From da2d2dee298beb5de4e8d6c55199eb482b56d260 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 14 May 2019 06:30:46 +0200 Subject: [PATCH 1/8] Handle module side-effects specified as an array of patterns --- package-lock.json | 305 ++++++------------ package.json | 7 +- src/index.js | 115 ++++--- test/node_modules/side-effects-array/dep1.js | 4 + test/node_modules/side-effects-array/dep2.js | 4 + .../side-effects-array/dep3-free.js | 4 + test/node_modules/side-effects-array/index.js | 8 + .../side-effects-array/nested/dep4.js | 4 + .../side-effects-array/nested/dep5-free.js | 4 + .../side-effects-array/package.json | 7 + test/node_modules/side-effects-false/dep1.js | 4 + test/node_modules/side-effects-false/dep2.js | 4 + test/node_modules/side-effects-false/index.js | 5 + .../side-effects-false/package.json | 4 + test/node_modules/side-effects-true/dep1.js | 4 + test/node_modules/side-effects-true/dep2.js | 4 + test/node_modules/side-effects-true/index.js | 5 + .../side-effects-true/package.json | 4 + test/samples/side-effects/main.js | 3 + test/test.js | 16 + 20 files changed, 273 insertions(+), 242 deletions(-) create mode 100644 test/node_modules/side-effects-array/dep1.js create mode 100644 test/node_modules/side-effects-array/dep2.js create mode 100644 test/node_modules/side-effects-array/dep3-free.js create mode 100644 test/node_modules/side-effects-array/index.js create mode 100644 test/node_modules/side-effects-array/nested/dep4.js create mode 100644 test/node_modules/side-effects-array/nested/dep5-free.js create mode 100644 test/node_modules/side-effects-array/package.json create mode 100644 test/node_modules/side-effects-false/dep1.js create mode 100644 test/node_modules/side-effects-false/dep2.js create mode 100644 test/node_modules/side-effects-false/index.js create mode 100644 test/node_modules/side-effects-false/package.json create mode 100644 test/node_modules/side-effects-true/dep1.js create mode 100644 test/node_modules/side-effects-true/dep2.js create mode 100644 test/node_modules/side-effects-true/index.js create mode 100644 test/node_modules/side-effects-true/package.json create mode 100644 test/samples/side-effects/main.js diff --git a/package-lock.json b/package-lock.json index 86e12b2..018e17b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -860,32 +860,27 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "astral-regex": { "version": "1.0.0", @@ -896,8 +891,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "balanced-match": { "version": "1.0.0", @@ -909,7 +903,6 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -924,7 +917,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -933,7 +925,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -942,7 +933,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -951,18 +941,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -980,7 +963,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -998,7 +980,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1037,7 +1018,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -1089,7 +1069,6 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -1101,7 +1080,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1144,7 +1122,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -1172,10 +1149,9 @@ "dev": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "concat-map": { "version": "0.0.1", @@ -1270,8 +1246,7 @@ "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "deep-is": { "version": "0.1.3", @@ -1292,7 +1267,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -1302,7 +1276,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1311,7 +1284,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1320,18 +1292,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -1544,8 +1509,7 @@ "estree-walker": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz", - "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==", - "dev": true + "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==" }, "esutils": { "version": "2.0.2", @@ -1572,7 +1536,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -1587,7 +1550,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -1596,7 +1558,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1605,7 +1566,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1613,8 +1573,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -1622,7 +1581,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -1632,7 +1590,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -1654,7 +1611,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -1670,7 +1626,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -1679,7 +1634,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1688,7 +1642,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1697,7 +1650,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1706,18 +1658,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -1761,7 +1706,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -1773,7 +1717,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1837,14 +1780,12 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, "requires": { "map-cache": "^0.2.2" } @@ -1885,8 +1826,7 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "glob": { "version": "7.1.3", @@ -1939,7 +1879,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -1950,7 +1889,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -1960,7 +1898,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -2077,16 +2014,24 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { "version": "1.1.4", @@ -2098,9 +2043,18 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-date-object": { @@ -2113,7 +2067,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -2123,16 +2076,14 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -2149,16 +2100,24 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "requires": { "isobject": "^3.0.1" } @@ -2196,14 +2155,12 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -2267,13 +2224,9 @@ } }, "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" }, "lcid": { "version": "2.0.0", @@ -2359,14 +2312,12 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -2394,7 +2345,6 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -2409,14 +2359,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } } }, "mimic-fn": { @@ -2444,7 +2386,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -2454,7 +2395,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -2555,7 +2495,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -2568,14 +2507,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } } }, "natural-compare": { @@ -2640,7 +2571,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -2651,10 +2581,17 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } } } }, @@ -2668,7 +2605,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, "requires": { "isobject": "^3.0.0" } @@ -2699,7 +2635,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, "requires": { "isobject": "^3.0.1" } @@ -2807,8 +2742,7 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-exists": { "version": "3.0.0", @@ -2866,8 +2800,7 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "prelude-ls": { "version": "1.1.2", @@ -2931,7 +2864,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -2981,14 +2913,12 @@ "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "require-directory": { "version": "2.1.1", @@ -3019,8 +2949,7 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "restore-cursor": { "version": "2.0.0", @@ -3035,8 +2964,7 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "rimraf": { "version": "2.6.3", @@ -3048,9 +2976,8 @@ } }, "rollup": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.11.3.tgz", - "integrity": "sha512-81MR7alHcFKxgWzGfG7jSdv+JQxSOIOD/Fa3iNUmpzbd7p+V19e1l9uffqT8/7YAHgGOzmoPGN3Fx3L2ptOf5g==", + "version": "github:rollup/rollup#1ef16d89f6ae8fc452ca64ca8c2cf8115c9483db", + "from": "github:rollup/rollup#module-side-effects", "dev": true, "requires": { "@types/estree": "0.0.39", @@ -3077,34 +3004,30 @@ } }, "rollup-plugin-commonjs": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz", - "integrity": "sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==", + "version": "github:rollup/rollup-plugin-commonjs#bebf85771369672d026d8c949d47d8348f0bc7aa", + "from": "github:rollup/rollup-plugin-commonjs#use-new-resolveer", "dev": true, "requires": { "estree-walker": "^0.6.0", "magic-string": "^0.25.2", - "resolve": "^1.10.0", + "resolve": "^1.10.1", "rollup-pluginutils": "^2.6.0" }, "dependencies": { - "rollup-pluginutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.6.0.tgz", - "integrity": "sha512-aGQwspEF8oPKvg37u3p7h0cYNwmJR1sCBMZGZ5b9qy8HGtETknqjzcxrDRrcAnJNXN18lBH4Q9vZYth/p4n8jQ==", + "resolve": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", "dev": true, "requires": { - "estree-walker": "^0.6.0", - "micromatch": "^3.1.10" + "path-parse": "^1.0.6" } } } }, "rollup-pluginutils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz", - "integrity": "sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw==", - "dev": true, + "version": "github:rollup/rollup-pluginutils#8e700dd83312848404abd0cca4541da6b2037b79", + "from": "github:rollup/rollup-pluginutils#create-filter-base-dir", "requires": { "estree-walker": "^0.6.0", "micromatch": "^3.1.10" @@ -3138,7 +3061,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, "requires": { "ret": "~0.1.10" } @@ -3165,7 +3087,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -3177,7 +3098,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -3220,7 +3140,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -3236,7 +3155,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -3245,7 +3163,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -3254,7 +3171,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -3262,8 +3178,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -3271,7 +3186,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -3282,7 +3196,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -3291,7 +3204,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -3300,7 +3212,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -3309,18 +3220,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -3328,22 +3232,29 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, "requires": { "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, "requires": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", @@ -3373,8 +3284,7 @@ "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, "sourcemap-codec": { "version": "1.4.4", @@ -3386,7 +3296,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -3401,7 +3310,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -3411,7 +3319,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -3535,16 +3442,24 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -3556,7 +3471,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -3621,7 +3535,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -3633,7 +3546,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -3642,7 +3554,6 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -3656,7 +3567,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -3666,7 +3576,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -3677,7 +3586,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "requires": { "isarray": "1.0.0" } @@ -3687,8 +3595,7 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" } } }, @@ -3704,14 +3611,12 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "which": { "version": "1.3.1", diff --git a/package.json b/package.json index c1c5c5f..5d281ec 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,9 @@ "es5-ext": "^0.10.50", "eslint": "^5.16.0", "mocha": "^6.1.4", - "rollup": "^1.11.3", + "rollup": "github:rollup/rollup#module-side-effects", "rollup-plugin-babel": "^4.3.2", - "rollup-plugin-commonjs": "^9.3.4", + "rollup-plugin-commonjs": "github:rollup/rollup-plugin-commonjs#use-new-resolveer", "string-capitalize": "^1.0.1", "typescript": "^3.4.5" }, @@ -36,7 +36,8 @@ "@types/resolve": "0.0.8", "builtin-modules": "^3.1.0", "is-module": "^1.0.0", - "resolve": "^1.10.1" + "resolve": "^1.10.1", + "rollup-pluginutils": "github:rollup/rollup-pluginutils#create-filter-base-dir" }, "repository": "rollup/rollup-plugin-node-resolve", "keywords": [ diff --git a/src/index.js b/src/index.js index b5b6c61..065b383 100644 --- a/src/index.js +++ b/src/index.js @@ -3,6 +3,7 @@ import builtins from 'builtin-modules'; import resolveId from 'resolve'; import isModule from 'is-module'; import fs from 'fs'; +import {createFilter} from 'rollup-pluginutils'; const ES6_BROWSER_EMPTY = resolve( __dirname, '../src/empty.js' ); // It is important that .mjs occur before .js so that Rollup will interpret npm modules @@ -10,7 +11,9 @@ const ES6_BROWSER_EMPTY = resolve( __dirname, '../src/empty.js' ); const DEFAULT_EXTS = [ '.mjs', '.js', '.json', '.node' ]; const readFileAsync = file => new Promise((fulfil, reject) => fs.readFile(file, (err, contents) => err ? reject(err) : fulfil(contents))); + const statAsync = file => new Promise((fulfil, reject) => fs.stat(file, (err, contents) => err ? reject(err) : fulfil(contents))); + const cache = fn => { const cache = new Map(); const wrapped = (param, done) => { @@ -25,12 +28,16 @@ const cache = fn => { wrapped.clear = () => cache.clear(); return wrapped; }; + const ignoreENOENT = err => { if (err.code === 'ENOENT') return false; throw err; }; + const readFileCached = cache(readFileAsync); + const isDirCached = cache(file => statAsync(file).then(stat => stat.isDirectory(), ignoreENOENT)); + const isFileCached = cache(file => statAsync(file).then(stat => stat.isFile(), ignoreENOENT)); function getMainFields (options) { @@ -63,6 +70,8 @@ function getMainFields (options) { return mainFields; } +const alwaysNull = () => null; + const resolveIdAsync = (file, opts) => new Promise((fulfil, reject) => resolveId(file, opts, (err, contents) => err ? reject(err) : fulfil(contents))); export default function nodeResolve ( options = {} ) { @@ -85,6 +94,64 @@ export default function nodeResolve ( options = {} ) { throw new Error( 'options.skip is no longer supported — you should use the main Rollup `external` option instead' ); } + const extensions = options.extensions || DEFAULT_EXTS; + const packageInfoCache = new Map(); + + function getCachedPackageInfo (pkg, pkgPath) { + if (packageInfoCache.has(pkgPath)) { + return packageInfoCache.get(pkgPath); + } + // TODO Lukas refine/invert noPackageEntry + const packageInfo = { + hasModuleSideEffects: alwaysNull, + noPackageEntry: false, + packageBrowserField: null + }; + const pkgRoot = dirname( pkgPath ); + if (useBrowserOverrides && typeof pkg[ 'browser' ] === 'object') { + packageInfo.packageBrowserField = Object.keys(pkg[ 'browser' ]).reduce((browser, key) => { + let resolved = pkg[ 'browser' ][ key ]; + if (resolved && resolved[0] === '.') { + resolved = resolve( pkgRoot, resolved ); + } + browser[ key ] = resolved; + if ( key[0] === '.' ) { + const absoluteKey = resolve( pkgRoot, key ); + browser[ absoluteKey ] = resolved; + if ( !extname(key) ) { + extensions.reduce( ( browser, ext ) => { + browser[ absoluteKey + ext ] = browser[ key ]; + return browser; + }, browser ); + } + } + return browser; + }, {}); + } + const packageSideEffects = pkg['sideEffects']; + if (typeof packageSideEffects === 'boolean') { + packageInfo.hasModuleSideEffects = () => packageSideEffects; + } else if (Array.isArray(packageSideEffects)) { + const filter = createFilter(packageSideEffects, null, {resolve: dirname(pkgPath)}); + packageInfo.hasModuleSideEffects = id => !filter(id); + } + + let overriddenMain = false; + for ( let i = 0; i < mainFields.length; i++ ) { + const field = mainFields[i]; + if ( typeof pkg[ field ] === 'string' ) { + pkg[ 'main' ] = pkg[ field ]; + overriddenMain = true; + break; + } + } + if ( overriddenMain === false && mainFields.indexOf( 'main' ) === -1 ) { + packageInfo.noPackageEntry = true; + } + packageInfoCache.set(pkgPath, packageInfo); + return packageInfo; + } + let preserveSymlinks; return { @@ -134,47 +201,15 @@ export default function nodeResolve ( options = {} ) { if (only && !only.some(pattern => pattern.test(id))) return null; - let disregardResult = false; + let hasModuleSideEffects = alwaysNull; + let noPackageEntry = false; let packageBrowserField = false; - const extensions = options.extensions || DEFAULT_EXTS; const resolveOptions = { basedir, packageFilter ( pkg, pkgPath ) { - const pkgRoot = dirname( pkgPath ); - if (useBrowserOverrides && typeof pkg[ 'browser' ] === 'object') { - packageBrowserField = Object.keys(pkg[ 'browser' ]).reduce((browser, key) => { - let resolved = pkg[ 'browser' ][ key ]; - if (resolved && resolved[0] === '.') { - resolved = resolve( pkgRoot, pkg[ 'browser' ][ key ] ); - } - browser[ key ] = resolved; - if ( key[0] === '.' ) { - const absoluteKey = resolve( pkgRoot, key ); - browser[ absoluteKey ] = resolved; - if ( !extname(key) ) { - extensions.reduce( ( browser, ext ) => { - browser[ absoluteKey + ext ] = browser[ key ]; - return browser; - }, browser ); - } - } - return browser; - }, {}); - } - - let overriddenMain = false; - for ( let i = 0; i < mainFields.length; i++ ) { - const field = mainFields[i]; - if ( typeof pkg[ field ] === 'string' ) { - pkg[ 'main' ] = pkg[ field ]; - overriddenMain = true; - break; - } - } - if ( overriddenMain === false && mainFields.indexOf( 'main' ) === -1 ) { - disregardResult = true; - } + ({hasModuleSideEffects, noPackageEntry, packageBrowserField} = + getCachedPackageInfo(pkg, pkgPath)); return pkg; }, readFile: readFileCached, @@ -192,6 +227,7 @@ export default function nodeResolve ( options = {} ) { Object.assign( resolveOptions, customResolveOptions ) ) .then(resolved => { + // TODO Lukas useBrowserOverrides may not be necessary if ( resolved && useBrowserOverrides && packageBrowserField ) { if ( packageBrowserField.hasOwnProperty(resolved) ) { if (!packageBrowserField[resolved]) { @@ -203,7 +239,7 @@ export default function nodeResolve ( options = {} ) { browserMapCache[resolved] = packageBrowserField; } - if ( !disregardResult ) { + if ( !noPackageEntry ) { if ( !preserveSymlinks && resolved && fs.existsSync( resolved ) ) { resolved = fs.realpathSync( resolved ); } @@ -225,9 +261,10 @@ export default function nodeResolve ( options = {} ) { } if ( resolved && options.modulesOnly ) { - return readFileAsync( resolved, 'utf-8').then(code => isModule( code ) ? resolved : null); + return readFileAsync( resolved, 'utf-8') + .then(code => isModule( code ) ? {id: resolved, moduleSideEffects: hasModuleSideEffects(resolved)} : null); } else { - return resolved; + return {id: resolved, moduleSideEffects: hasModuleSideEffects(resolved)}; } }) .catch(() => null); diff --git a/test/node_modules/side-effects-array/dep1.js b/test/node_modules/side-effects-array/dep1.js new file mode 100644 index 0000000..c584474 --- /dev/null +++ b/test/node_modules/side-effects-array/dep1.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-dep1'); + +export const value = 'dep1'; diff --git a/test/node_modules/side-effects-array/dep2.js b/test/node_modules/side-effects-array/dep2.js new file mode 100644 index 0000000..ff72e7b --- /dev/null +++ b/test/node_modules/side-effects-array/dep2.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-dep2'); + +export const value = 'dep2'; diff --git a/test/node_modules/side-effects-array/dep3-free.js b/test/node_modules/side-effects-array/dep3-free.js new file mode 100644 index 0000000..22d5f6f --- /dev/null +++ b/test/node_modules/side-effects-array/dep3-free.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-dep3'); + +export const value = 'dep3'; diff --git a/test/node_modules/side-effects-array/index.js b/test/node_modules/side-effects-array/index.js new file mode 100644 index 0000000..bd33706 --- /dev/null +++ b/test/node_modules/side-effects-array/index.js @@ -0,0 +1,8 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('true-index'); + +export {value as value1} from './dep1.js'; +export {value as value2} from './dep2.js'; +export {value as value3} from './dep3-free.js'; +export {value as value4} from './nested/dep4'; +export {value as value5} from './nested/dep5-free'; diff --git a/test/node_modules/side-effects-array/nested/dep4.js b/test/node_modules/side-effects-array/nested/dep4.js new file mode 100644 index 0000000..4a4155d --- /dev/null +++ b/test/node_modules/side-effects-array/nested/dep4.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-dep4'); + +export const value = 'dep3'; diff --git a/test/node_modules/side-effects-array/nested/dep5-free.js b/test/node_modules/side-effects-array/nested/dep5-free.js new file mode 100644 index 0000000..cfc9de5 --- /dev/null +++ b/test/node_modules/side-effects-array/nested/dep5-free.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-dep5'); + +export const value = 'dep3'; diff --git a/test/node_modules/side-effects-array/package.json b/test/node_modules/side-effects-array/package.json new file mode 100644 index 0000000..5afd642 --- /dev/null +++ b/test/node_modules/side-effects-array/package.json @@ -0,0 +1,7 @@ +{ + "main": "./index.js", + "sideEffects": [ + "./dep1.js", + "**/*-free.js" + ] +} diff --git a/test/node_modules/side-effects-false/dep1.js b/test/node_modules/side-effects-false/dep1.js new file mode 100644 index 0000000..ea69652 --- /dev/null +++ b/test/node_modules/side-effects-false/dep1.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('false-dep1'); + +export const value = 'dep1'; diff --git a/test/node_modules/side-effects-false/dep2.js b/test/node_modules/side-effects-false/dep2.js new file mode 100644 index 0000000..c31f44e --- /dev/null +++ b/test/node_modules/side-effects-false/dep2.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('false-dep2'); + +export const value = 'dep2'; diff --git a/test/node_modules/side-effects-false/index.js b/test/node_modules/side-effects-false/index.js new file mode 100644 index 0000000..29754ae --- /dev/null +++ b/test/node_modules/side-effects-false/index.js @@ -0,0 +1,5 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('false-index'); + +export {value as value1} from './dep1.js'; +export {value as value2} from './dep2.js'; diff --git a/test/node_modules/side-effects-false/package.json b/test/node_modules/side-effects-false/package.json new file mode 100644 index 0000000..67eb6cf --- /dev/null +++ b/test/node_modules/side-effects-false/package.json @@ -0,0 +1,4 @@ +{ + "main": "./index.js", + "sideEffects": false +} diff --git a/test/node_modules/side-effects-true/dep1.js b/test/node_modules/side-effects-true/dep1.js new file mode 100644 index 0000000..4b370cc --- /dev/null +++ b/test/node_modules/side-effects-true/dep1.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('true-dep1'); + +export const value = 'dep1'; diff --git a/test/node_modules/side-effects-true/dep2.js b/test/node_modules/side-effects-true/dep2.js new file mode 100644 index 0000000..8c73a01 --- /dev/null +++ b/test/node_modules/side-effects-true/dep2.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('true-dep2'); + +export const value = 'dep2'; diff --git a/test/node_modules/side-effects-true/index.js b/test/node_modules/side-effects-true/index.js new file mode 100644 index 0000000..f0fcb71 --- /dev/null +++ b/test/node_modules/side-effects-true/index.js @@ -0,0 +1,5 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('true-index'); + +export {value as value1} from './dep1.js'; +export {value as value2} from './dep2.js'; diff --git a/test/node_modules/side-effects-true/package.json b/test/node_modules/side-effects-true/package.json new file mode 100644 index 0000000..d721c8a --- /dev/null +++ b/test/node_modules/side-effects-true/package.json @@ -0,0 +1,4 @@ +{ + "main": "./index.js", + "sideEffects": true +} diff --git a/test/samples/side-effects/main.js b/test/samples/side-effects/main.js new file mode 100644 index 0000000..c924537 --- /dev/null +++ b/test/samples/side-effects/main.js @@ -0,0 +1,3 @@ +export {value1 as falseValue} from 'side-effects-false'; +export {value1 as trueValue} from 'side-effects-true'; +import 'side-effects-array'; diff --git a/test/test.js b/test/test.js index df720b1..e647450 100644 --- a/test/test.js +++ b/test/test.js @@ -862,4 +862,20 @@ describe( 'rollup-plugin-node-resolve', function () { }); }); + it('handles package side-effects', () => + rollup.rollup({ + input: 'samples/side-effects/main.js', + plugins: [nodeResolve()] + }).then(executeBundle).then(() => { + assert.deepStrictEqual(global.sideEffects, [ + 'false-dep1', + 'true-dep1', + 'true-dep2', + 'true-index', + 'array-dep2', + 'array-dep4', + 'true-index' + ]); + delete global.sideEffects; + })); }); From df2a4cd941cde8641fc0d1c8fadf9adf83fde57c Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 14 May 2019 06:52:31 +0200 Subject: [PATCH 2/8] Refine code ordering and variable names --- src/index.js | 76 +++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/src/index.js b/src/index.js index 065b383..c626ed0 100644 --- a/src/index.js +++ b/src/index.js @@ -101,40 +101,7 @@ export default function nodeResolve ( options = {} ) { if (packageInfoCache.has(pkgPath)) { return packageInfoCache.get(pkgPath); } - // TODO Lukas refine/invert noPackageEntry - const packageInfo = { - hasModuleSideEffects: alwaysNull, - noPackageEntry: false, - packageBrowserField: null - }; const pkgRoot = dirname( pkgPath ); - if (useBrowserOverrides && typeof pkg[ 'browser' ] === 'object') { - packageInfo.packageBrowserField = Object.keys(pkg[ 'browser' ]).reduce((browser, key) => { - let resolved = pkg[ 'browser' ][ key ]; - if (resolved && resolved[0] === '.') { - resolved = resolve( pkgRoot, resolved ); - } - browser[ key ] = resolved; - if ( key[0] === '.' ) { - const absoluteKey = resolve( pkgRoot, key ); - browser[ absoluteKey ] = resolved; - if ( !extname(key) ) { - extensions.reduce( ( browser, ext ) => { - browser[ absoluteKey + ext ] = browser[ key ]; - return browser; - }, browser ); - } - } - return browser; - }, {}); - } - const packageSideEffects = pkg['sideEffects']; - if (typeof packageSideEffects === 'boolean') { - packageInfo.hasModuleSideEffects = () => packageSideEffects; - } else if (Array.isArray(packageSideEffects)) { - const filter = createFilter(packageSideEffects, null, {resolve: dirname(pkgPath)}); - packageInfo.hasModuleSideEffects = id => !filter(id); - } let overriddenMain = false; for ( let i = 0; i < mainFields.length; i++ ) { @@ -145,9 +112,39 @@ export default function nodeResolve ( options = {} ) { break; } } - if ( overriddenMain === false && mainFields.indexOf( 'main' ) === -1 ) { - packageInfo.noPackageEntry = true; + + const packageInfo = { + hasModuleSideEffects: alwaysNull, + hasPackageEntry: overriddenMain !== false || mainFields.indexOf( 'main' ) !== -1, + packageBrowserField: useBrowserOverrides && typeof pkg[ 'browser' ] === 'object' && + Object.keys(pkg[ 'browser' ]).reduce((browser, key) => { + let resolved = pkg[ 'browser' ][ key ]; + if (resolved && resolved[0] === '.') { + resolved = resolve( pkgRoot, resolved ); + } + browser[ key ] = resolved; + if ( key[0] === '.' ) { + const absoluteKey = resolve( pkgRoot, key ); + browser[ absoluteKey ] = resolved; + if ( !extname(key) ) { + extensions.reduce( ( browser, ext ) => { + browser[ absoluteKey + ext ] = browser[ key ]; + return browser; + }, browser ); + } + } + return browser; + }, {}) + }; + + const packageSideEffects = pkg['sideEffects']; + if (typeof packageSideEffects === 'boolean') { + packageInfo.hasModuleSideEffects = () => packageSideEffects; + } else if (Array.isArray(packageSideEffects)) { + const filter = createFilter(packageSideEffects, null, {resolve: pkgRoot}); + packageInfo.hasModuleSideEffects = id => !filter(id); } + packageInfoCache.set(pkgPath, packageInfo); return packageInfo; } @@ -202,13 +199,13 @@ export default function nodeResolve ( options = {} ) { if (only && !only.some(pattern => pattern.test(id))) return null; let hasModuleSideEffects = alwaysNull; - let noPackageEntry = false; + let hasPackageEntry = true; let packageBrowserField = false; const resolveOptions = { basedir, packageFilter ( pkg, pkgPath ) { - ({hasModuleSideEffects, noPackageEntry, packageBrowserField} = + ({hasModuleSideEffects, hasPackageEntry, packageBrowserField} = getCachedPackageInfo(pkg, pkgPath)); return pkg; }, @@ -227,8 +224,7 @@ export default function nodeResolve ( options = {} ) { Object.assign( resolveOptions, customResolveOptions ) ) .then(resolved => { - // TODO Lukas useBrowserOverrides may not be necessary - if ( resolved && useBrowserOverrides && packageBrowserField ) { + if ( resolved && packageBrowserField ) { if ( packageBrowserField.hasOwnProperty(resolved) ) { if (!packageBrowserField[resolved]) { browserMapCache[resolved] = packageBrowserField; @@ -239,7 +235,7 @@ export default function nodeResolve ( options = {} ) { browserMapCache[resolved] = packageBrowserField; } - if ( !noPackageEntry ) { + if ( hasPackageEntry ) { if ( !preserveSymlinks && resolved && fs.existsSync( resolved ) ) { resolved = fs.realpathSync( resolved ); } From b192a1f6a177b21bc48acf5205573a7e9f708590 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 14 May 2019 06:58:19 +0200 Subject: [PATCH 3/8] Speed up builtins lookup by converting them to a Set --- src/index.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index c626ed0..be22d09 100644 --- a/src/index.js +++ b/src/index.js @@ -1,10 +1,12 @@ import {dirname, extname, join, normalize, resolve, sep} from 'path'; -import builtins from 'builtin-modules'; +import builtinList from 'builtin-modules'; import resolveId from 'resolve'; import isModule from 'is-module'; import fs from 'fs'; import {createFilter} from 'rollup-pluginutils'; +const builtins = builtinList.reduce((set, id) => set.add(id), new Set()); + const ES6_BROWSER_EMPTY = resolve( __dirname, '../src/empty.js' ); // It is important that .mjs occur before .js so that Rollup will interpret npm modules // which deploy both ESM .mjs and CommonJS .js files as ESM. @@ -240,9 +242,9 @@ export default function nodeResolve ( options = {} ) { resolved = fs.realpathSync( resolved ); } - if ( ~builtins.indexOf( resolved ) ) { + if ( builtins.has( resolved ) ) { return null; - } else if ( ~builtins.indexOf( importee ) && preferBuiltins ) { + } else if ( builtins.has( importee ) && preferBuiltins ) { if ( !isPreferBuiltinsSet ) { this.warn( `preferring built-in module '${importee}' over local alternative ` + From 6085517702fefda4cbc6510643fb92b3e2025aff Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 14 May 2019 07:00:09 +0200 Subject: [PATCH 4/8] Fix minimum npm version in Travis --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8e360a4..fee5f87 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,3 +6,6 @@ node_js: env: global: - BUILD_TIMEOUT=10000 +install: npm ci --ignore-scripts +before_install: + - if [[ $TRAVIS_NODE_VERSION -lt 8 ]]; then npm install --global npm@5; fi From 64259e5fd88e50f2a9cfc81bbe18b223468dbf53 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 14 May 2019 07:02:29 +0200 Subject: [PATCH 5/8] Do not ignore scripts, add Node 12 --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fee5f87..5505a5f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,10 @@ node_js: - "6" - "8" - "10" + - "12" env: global: - BUILD_TIMEOUT=10000 -install: npm ci --ignore-scripts +install: npm ci before_install: - if [[ $TRAVIS_NODE_VERSION -lt 8 ]]; then npm install --global npm@5; fi From 0284022778c81cb18c73997d3675bf7d691fad61 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 14 May 2019 07:06:03 +0200 Subject: [PATCH 6/8] Or ignore scripts again --- .travis.yml | 2 +- package-lock.json | 31 ++++--------------------------- rollup.config.js | 2 +- 3 files changed, 6 insertions(+), 29 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5505a5f..efdde10 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,6 @@ node_js: env: global: - BUILD_TIMEOUT=10000 -install: npm ci +install: npm ci --ignore-scripts before_install: - if [[ $TRAVIS_NODE_VERSION -lt 8 ]]; then npm install --global npm@5; fi diff --git a/package-lock.json b/package-lock.json index 018e17b..66b0169 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1171,8 +1171,7 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js": { "version": "3.0.1", @@ -2171,8 +2170,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "js-levenshtein": { "version": "1.1.6", @@ -2198,7 +2196,7 @@ }, "jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true }, @@ -2458,16 +2456,6 @@ "ms": "^2.1.1" } }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "supports-color": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", @@ -2517,7 +2505,7 @@ }, "next-tick": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, @@ -3012,17 +3000,6 @@ "magic-string": "^0.25.2", "resolve": "^1.10.1", "rollup-pluginutils": "^2.6.0" - }, - "dependencies": { - "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } } }, "rollup-pluginutils": { diff --git a/rollup.config.js b/rollup.config.js index 814ffa3..1c696d6 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -9,7 +9,7 @@ export default { } }]] }) ], - external: [ 'path', 'fs', 'builtin-modules', 'resolve', 'browser-resolve', 'is-module' ], + external: [ 'path', 'fs', 'builtin-modules', 'resolve', 'browser-resolve', 'is-module', 'rollup-pluginutils' ], output: [ { file: 'dist/rollup-plugin-node-resolve.cjs.js', format: 'cjs' }, { file: 'dist/rollup-plugin-node-resolve.es.js', format: 'es' } From 7cd4234f796e970015c824a88ecf12faedb2f9ac Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 15 May 2019 07:55:04 +0200 Subject: [PATCH 7/8] Also cache mutated package.json information --- src/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index be22d09..23d1818 100644 --- a/src/index.js +++ b/src/index.js @@ -116,6 +116,7 @@ export default function nodeResolve ( options = {} ) { } const packageInfo = { + cachedPkg: pkg, hasModuleSideEffects: alwaysNull, hasPackageEntry: overriddenMain !== false || mainFields.indexOf( 'main' ) !== -1, packageBrowserField: useBrowserOverrides && typeof pkg[ 'browser' ] === 'object' && @@ -207,9 +208,10 @@ export default function nodeResolve ( options = {} ) { const resolveOptions = { basedir, packageFilter ( pkg, pkgPath ) { - ({hasModuleSideEffects, hasPackageEntry, packageBrowserField} = + let cachedPkg; + ({cachedPkg, hasModuleSideEffects, hasPackageEntry, packageBrowserField} = getCachedPackageInfo(pkg, pkgPath)); - return pkg; + return cachedPkg; }, readFile: readFileCached, isFile: isFileCached, From fe7ea0ede81f5caf08db61c6e6b6356ea7ac3ac2 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 15 May 2019 09:26:56 +0200 Subject: [PATCH 8/8] Use new dependencies and require at least node 1.11.0 --- package-lock.json | 44 +++++++++++++++++++++++++++++++++----------- package.json | 12 ++++++++---- rollup.config.js | 19 ++++++++++++------- src/index.js | 11 +++++++++++ 4 files changed, 64 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 66b0169..9350f2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2127,6 +2127,15 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, + "is-reference": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.2.tgz", + "integrity": "sha512-Kn5g8c7XHKejFOpTf2QN9YjiHHKl5xRj+2uAZf9iM2//nkBNi/NNeB5JMoun28nEaUVHyPUzqzhfRlfAirEjXg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -2964,19 +2973,20 @@ } }, "rollup": { - "version": "github:rollup/rollup#1ef16d89f6ae8fc452ca64ca8c2cf8115c9483db", - "from": "github:rollup/rollup#module-side-effects", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.12.0.tgz", + "integrity": "sha512-DFqgTupu9dkoS80AZ4xMgeLCeC96pGRCu1MLlOwRAjJ3qGItw+j4YWcL3/uWbgQO2mnmrAZphxAdjSXYsG5pWA==", "dev": true, "requires": { "@types/estree": "0.0.39", - "@types/node": "^11.13.9", + "@types/node": "^12.0.2", "acorn": "^6.1.1" }, "dependencies": { "@types/node": { - "version": "11.13.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.10.tgz", - "integrity": "sha512-leUNzbFTMX94TWaIKz8N15Chu55F9QSH+INKayQr5xpkasBQBRF3qQXfo3/dOnMU/dEIit+Y/SU8HyOjq++GwA==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", + "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==", "dev": true } } @@ -2992,19 +3002,31 @@ } }, "rollup-plugin-commonjs": { - "version": "github:rollup/rollup-plugin-commonjs#bebf85771369672d026d8c949d47d8348f0bc7aa", - "from": "github:rollup/rollup-plugin-commonjs#use-new-resolveer", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.0.tgz", + "integrity": "sha512-B8MoX5GRpj3kW4+YaFO/di2JsZkBxNjVmZ9LWjUoTAjq8N9wc7HObMXPsrvolVV9JXVtYSscflXM14A19dXPNQ==", "dev": true, "requires": { "estree-walker": "^0.6.0", + "is-reference": "^1.1.2", "magic-string": "^0.25.2", "resolve": "^1.10.1", - "rollup-pluginutils": "^2.6.0" + "rollup-pluginutils": "^2.7.0" + } + }, + "rollup-plugin-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz", + "integrity": "sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.5.0" } }, "rollup-pluginutils": { - "version": "github:rollup/rollup-pluginutils#8e700dd83312848404abd0cca4541da6b2037b79", - "from": "github:rollup/rollup-pluginutils#create-filter-base-dir", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.7.0.tgz", + "integrity": "sha512-FoP6L1YnMYTAR06Dpq5LE3jJtMwPE6H4VEOqFU23yoziZnqNRSiWcVy6YgEY5PdQB4G7278+8c4TvB0JKS1csA==", "requires": { "estree-walker": "^0.6.0", "micromatch": "^3.1.10" diff --git a/package.json b/package.json index 5d281ec..676be0f 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,15 @@ "version": "4.2.4", "devDependencies": { "@babel/core": "7.4.4", - "@babel/register": "^7.4.4", "@babel/preset-env": "^7.4.4", + "@babel/register": "^7.4.4", "es5-ext": "^0.10.50", "eslint": "^5.16.0", "mocha": "^6.1.4", - "rollup": "github:rollup/rollup#module-side-effects", + "rollup": "^1.12.0", "rollup-plugin-babel": "^4.3.2", - "rollup-plugin-commonjs": "github:rollup/rollup-plugin-commonjs#use-new-resolveer", + "rollup-plugin-commonjs": "^10.0.0", + "rollup-plugin-json": "^4.0.0", "string-capitalize": "^1.0.1", "typescript": "^3.4.5" }, @@ -37,7 +38,10 @@ "builtin-modules": "^3.1.0", "is-module": "^1.0.0", "resolve": "^1.10.1", - "rollup-pluginutils": "github:rollup/rollup-pluginutils#create-filter-base-dir" + "rollup-pluginutils": "^2.7.0" + }, + "peerDependencies": { + "rollup": ">=1.11.0" }, "repository": "rollup/rollup-plugin-node-resolve", "keywords": [ diff --git a/rollup.config.js b/rollup.config.js index 1c696d6..d3331e4 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,14 +1,19 @@ import babel from 'rollup-plugin-babel'; +import json from 'rollup-plugin-json'; export default { input: 'src/index.js', - plugins: [ babel({ - presets: [['@babel/preset-env', { - targets: { - node: 6 - } - }]] - }) ], + plugins: [ + json(), + babel({ + presets: [['@babel/preset-env', { + targets: { + node: 6 + } + }] + ] + }) + ], external: [ 'path', 'fs', 'builtin-modules', 'resolve', 'browser-resolve', 'is-module', 'rollup-pluginutils' ], output: [ { file: 'dist/rollup-plugin-node-resolve.cjs.js', format: 'cjs' }, diff --git a/src/index.js b/src/index.js index 23d1818..df29c44 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,7 @@ import resolveId from 'resolve'; import isModule from 'is-module'; import fs from 'fs'; import {createFilter} from 'rollup-pluginutils'; +import {peerDependencies} from '../package.json'; const builtins = builtinList.reduce((set, id) => set.add(id), new Set()); @@ -159,6 +160,16 @@ export default function nodeResolve ( options = {} ) { options ( options ) { preserveSymlinks = options.preserveSymlinks; + const [major, minor] = this.meta.rollupVersion.split('.').map(Number); + const minVersion = peerDependencies.rollup.slice(2); + const [minMajor, minMinor] = minVersion.split('.').map(Number); + if (major < minMajor || (major === minMajor && minor < minMinor)) { + this.error( + `Insufficient Rollup version: "rollup-plugin-node-resolve" requires at least rollup@${minVersion} but found rollup@${ + this.meta.rollupVersion + }.` + ); + } }, generateBundle () {