├── .npmignore ├── README.md ├── demo.gif ├── index.js ├── main.js ├── npm-utils.js ├── package-lock.json └── package.json /.npmignore: -------------------------------------------------------------------------------- 1 | demo.gif 2 | 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # `is-esm` 2 | 3 |

4 | 5 |

6 | 7 | This package tells you if an npm module uses ECMAScript modules or not. 8 | 9 | ## Why do I need to know? 10 | 11 | ECMAScript modules are statically analyzable. This helps bundlers and JavaScript optimizers to get rid of the unused exports and ultimately make your bundles smaller. 12 | 13 | You can read more about this [here](https://web.dev/commonjs-larger-bundles/). 14 | 15 | ## How to use it? 16 | 17 | To use `is-esm`: 18 | 19 | ```bash 20 | $ npx is-esm @angular/core 8.0.0 21 | $ ✔ Yes 22 | ``` 23 | 24 | ```bash 25 | $ npx is-esm moment 26 | $ ✖ No 27 | ``` 28 | 29 | ## License 30 | 31 | MIT 32 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgechev/is-esm/45d3fd1b981777eefc0d898d2b556fe6f23948eb/demo.gif -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const main = require('./main'); 4 | 5 | const packageName = process.argv[2]; 6 | const version = process.argv[3]; 7 | main(packageName, version); 8 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | const tmp = require("tmp"); 2 | const { join } = require("path"); 3 | const { writeFileSync } = require("fs"); 4 | 5 | const { rollup } = require("rollup"); 6 | const nodeResolve = require("@rollup/plugin-node-resolve"); 7 | 8 | const ora = require("ora"); 9 | const rimraf = require("rimraf"); 10 | 11 | const utils = require("./npm-utils"); 12 | 13 | const getPackageVersion = async (packageName, version) => { 14 | let versions = []; 15 | try { 16 | versions = await utils.getVersionList(packageName); 17 | } catch (e) { 18 | throw new Error(e.message); 19 | } 20 | if (!version) { 21 | version = versions[versions.length - 1]; 22 | } 23 | let found = false; 24 | for (const v of versions) { 25 | if (v === version) { 26 | found = true; 27 | break; 28 | } 29 | } 30 | if (found) { 31 | return version; 32 | } 33 | return undefined; 34 | }; 35 | 36 | const initializeTempDir = (packageName, indexName) => { 37 | const tmpDir = tmp.dirSync(); 38 | writeFileSync(join(tmpDir.name, "package.json"), '{ "name": "is-esm" }'); 39 | 40 | const entryFile = join(tmpDir.name, indexName); 41 | writeFileSync( 42 | entryFile, 43 | `import * as isesm from "${packageName}";\nconsole.log(iesm);\n` 44 | ); 45 | 46 | return tmpDir.name; 47 | }; 48 | 49 | const checkESM = async (packageName, entryFile) => { 50 | let isESM = false; 51 | 52 | function moduleExists(packageName) { 53 | return { 54 | name: "module-exists", 55 | load(id) { 56 | if (id.indexOf(join("node_modules", packageName)) >= 0) { 57 | isESM = true; 58 | } 59 | }, 60 | }; 61 | } 62 | 63 | await rollup({ 64 | input: entryFile, 65 | output: "out.js", 66 | onwarn() {}, 67 | plugins: [ 68 | nodeResolve({ 69 | modulesOnly: true, 70 | }), 71 | moduleExists(packageName), 72 | ], 73 | }); 74 | 75 | return isESM; 76 | }; 77 | 78 | module.exports = async (packageName, version) => { 79 | const spinner = ora({ stream: process.stdout }); 80 | spinner.text = `Fetching ${packageName}`; 81 | spinner.start(); 82 | 83 | let userVersion = version; 84 | try { 85 | version = await getPackageVersion(packageName, version); 86 | } catch (e) { 87 | spinner.fail( 88 | `Unable to fetch the package ${packageName} stats: ${e.message}` 89 | ); 90 | process.exit(0); 91 | } 92 | 93 | if (!version) { 94 | spinner.fail(`Unable to find version ${userVersion} of ${packageName}`); 95 | process.exit(0); 96 | } 97 | spinner.text = `Fetching ${packageName}@${version}...`; 98 | 99 | const indexName = "index.js"; 100 | const tmpDirName = initializeTempDir(packageName, indexName); 101 | 102 | try { 103 | await utils.installModules(packageName, version, tmpDirName); 104 | } catch (e) { 105 | spinner.fail("Unable to fetch the package"); 106 | process.exit(0); 107 | } 108 | 109 | const entryFile = join(tmpDirName, indexName); 110 | 111 | try { 112 | if (await checkESM(packageName, entryFile)) { 113 | spinner.succeed("Yes"); 114 | } else { 115 | spinner.warn("No"); 116 | } 117 | } catch { 118 | spinner.fail("Unable to detect the module format"); 119 | process.exit(0); 120 | } 121 | 122 | rimraf.sync(tmpDirName); 123 | }; 124 | -------------------------------------------------------------------------------- /npm-utils.js: -------------------------------------------------------------------------------- 1 | const { exec } = require('child_process'); 2 | 3 | const getVersionList = (name) => { 4 | if (!name) return Promise.reject(new Error('Empty name given as argument')); 5 | return new Promise((resolve, reject) => 6 | exec(`npm show ${name} versions --json`, (err, stdout, stderr) => { 7 | if (err) { 8 | return reject( 9 | /Registry returned 404 for GET on|404 Not found|code E404/.test( 10 | stderr 11 | ) 12 | ? new Error("The package you were looking for doesn't exist.") 13 | : err 14 | ); 15 | } 16 | return resolve(JSON.parse(stdout)); 17 | }) 18 | ); 19 | }; 20 | 21 | const installCommand = (package, version, prefix) => { 22 | return `npm install --prefix ${prefix} ${package}@${version}`; 23 | }; 24 | 25 | const installModules = (packageName, version, tmpDirName) => { 26 | return new Promise((resolve, reject) => { 27 | exec( 28 | installCommand(packageName, version, tmpDirName), 29 | { 30 | stdio: ['ignore'], 31 | }, 32 | (error) => { 33 | if (error) { 34 | reject(error); 35 | } else { 36 | resolve(); 37 | } 38 | } 39 | ); 40 | }); 41 | }; 42 | 43 | module.exports = { getVersionList, installModules }; 44 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "is-esm", 3 | "version": "0.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@rollup/plugin-node-resolve": { 8 | "version": "7.1.3", 9 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", 10 | "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", 11 | "requires": { 12 | "@rollup/pluginutils": "^3.0.8", 13 | "@types/resolve": "0.0.8", 14 | "builtin-modules": "^3.1.0", 15 | "is-module": "^1.0.0", 16 | "resolve": "^1.14.2" 17 | } 18 | }, 19 | "@rollup/pluginutils": { 20 | "version": "3.0.10", 21 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.10.tgz", 22 | "integrity": "sha512-d44M7t+PjmMrASHbhgpSbVgtL6EFyX7J4mYxwQ/c5eoaE6N2VgCgEcWVzNnwycIloti+/MpwFr8qfw+nRw00sw==", 23 | "requires": { 24 | "@types/estree": "0.0.39", 25 | "estree-walker": "^1.0.1", 26 | "picomatch": "^2.2.2" 27 | } 28 | }, 29 | "@types/color-name": { 30 | "version": "1.1.1", 31 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 32 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" 33 | }, 34 | "@types/estree": { 35 | "version": "0.0.39", 36 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 37 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" 38 | }, 39 | "@types/node": { 40 | "version": "14.0.1", 41 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz", 42 | "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA==" 43 | }, 44 | "@types/resolve": { 45 | "version": "0.0.8", 46 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", 47 | "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", 48 | "requires": { 49 | "@types/node": "*" 50 | } 51 | }, 52 | "ansi-regex": { 53 | "version": "5.0.1", 54 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 55 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 56 | }, 57 | "ansi-styles": { 58 | "version": "4.2.1", 59 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 60 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 61 | "requires": { 62 | "@types/color-name": "^1.1.1", 63 | "color-convert": "^2.0.1" 64 | } 65 | }, 66 | "balanced-match": { 67 | "version": "1.0.0", 68 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 69 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 70 | }, 71 | "brace-expansion": { 72 | "version": "1.1.11", 73 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 74 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 75 | "requires": { 76 | "balanced-match": "^1.0.0", 77 | "concat-map": "0.0.1" 78 | } 79 | }, 80 | "builtin-modules": { 81 | "version": "3.1.0", 82 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", 83 | "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==" 84 | }, 85 | "chalk": { 86 | "version": "3.0.0", 87 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 88 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 89 | "requires": { 90 | "ansi-styles": "^4.1.0", 91 | "supports-color": "^7.1.0" 92 | } 93 | }, 94 | "cli-cursor": { 95 | "version": "3.1.0", 96 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 97 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 98 | "requires": { 99 | "restore-cursor": "^3.1.0" 100 | } 101 | }, 102 | "cli-spinners": { 103 | "version": "2.3.0", 104 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz", 105 | "integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w==" 106 | }, 107 | "clone": { 108 | "version": "1.0.4", 109 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 110 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" 111 | }, 112 | "color-convert": { 113 | "version": "2.0.1", 114 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 115 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 116 | "requires": { 117 | "color-name": "~1.1.4" 118 | } 119 | }, 120 | "color-name": { 121 | "version": "1.1.4", 122 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 123 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 124 | }, 125 | "concat-map": { 126 | "version": "0.0.1", 127 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 128 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 129 | }, 130 | "defaults": { 131 | "version": "1.0.3", 132 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 133 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 134 | "requires": { 135 | "clone": "^1.0.2" 136 | } 137 | }, 138 | "escape-string-regexp": { 139 | "version": "1.0.5", 140 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 141 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 142 | }, 143 | "estree-walker": { 144 | "version": "1.0.1", 145 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 146 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" 147 | }, 148 | "fs.realpath": { 149 | "version": "1.0.0", 150 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 151 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 152 | }, 153 | "fsevents": { 154 | "version": "2.1.3", 155 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 156 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 157 | "optional": true 158 | }, 159 | "glob": { 160 | "version": "7.1.6", 161 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 162 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 163 | "requires": { 164 | "fs.realpath": "^1.0.0", 165 | "inflight": "^1.0.4", 166 | "inherits": "2", 167 | "minimatch": "^3.0.4", 168 | "once": "^1.3.0", 169 | "path-is-absolute": "^1.0.0" 170 | } 171 | }, 172 | "has-flag": { 173 | "version": "4.0.0", 174 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 175 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 176 | }, 177 | "inflight": { 178 | "version": "1.0.6", 179 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 180 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 181 | "requires": { 182 | "once": "^1.3.0", 183 | "wrappy": "1" 184 | } 185 | }, 186 | "inherits": { 187 | "version": "2.0.4", 188 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 189 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 190 | }, 191 | "is-interactive": { 192 | "version": "1.0.0", 193 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 194 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" 195 | }, 196 | "is-module": { 197 | "version": "1.0.0", 198 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 199 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" 200 | }, 201 | "log-symbols": { 202 | "version": "3.0.0", 203 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", 204 | "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", 205 | "requires": { 206 | "chalk": "^2.4.2" 207 | }, 208 | "dependencies": { 209 | "ansi-styles": { 210 | "version": "3.2.1", 211 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 212 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 213 | "requires": { 214 | "color-convert": "^1.9.0" 215 | } 216 | }, 217 | "chalk": { 218 | "version": "2.4.2", 219 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 220 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 221 | "requires": { 222 | "ansi-styles": "^3.2.1", 223 | "escape-string-regexp": "^1.0.5", 224 | "supports-color": "^5.3.0" 225 | } 226 | }, 227 | "color-convert": { 228 | "version": "1.9.3", 229 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 230 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 231 | "requires": { 232 | "color-name": "1.1.3" 233 | } 234 | }, 235 | "color-name": { 236 | "version": "1.1.3", 237 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 238 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 239 | }, 240 | "has-flag": { 241 | "version": "3.0.0", 242 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 243 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 244 | }, 245 | "supports-color": { 246 | "version": "5.5.0", 247 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 248 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 249 | "requires": { 250 | "has-flag": "^3.0.0" 251 | } 252 | } 253 | } 254 | }, 255 | "mimic-fn": { 256 | "version": "2.1.0", 257 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 258 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 259 | }, 260 | "minimatch": { 261 | "version": "3.0.4", 262 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 263 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 264 | "requires": { 265 | "brace-expansion": "^1.1.7" 266 | } 267 | }, 268 | "mute-stream": { 269 | "version": "0.0.8", 270 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 271 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" 272 | }, 273 | "once": { 274 | "version": "1.4.0", 275 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 276 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 277 | "requires": { 278 | "wrappy": "1" 279 | } 280 | }, 281 | "onetime": { 282 | "version": "5.1.0", 283 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", 284 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", 285 | "requires": { 286 | "mimic-fn": "^2.1.0" 287 | } 288 | }, 289 | "ora": { 290 | "version": "4.0.4", 291 | "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.4.tgz", 292 | "integrity": "sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww==", 293 | "requires": { 294 | "chalk": "^3.0.0", 295 | "cli-cursor": "^3.1.0", 296 | "cli-spinners": "^2.2.0", 297 | "is-interactive": "^1.0.0", 298 | "log-symbols": "^3.0.0", 299 | "mute-stream": "0.0.8", 300 | "strip-ansi": "^6.0.0", 301 | "wcwidth": "^1.0.1" 302 | } 303 | }, 304 | "path-is-absolute": { 305 | "version": "1.0.1", 306 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 307 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 308 | }, 309 | "path-parse": { 310 | "version": "1.0.7", 311 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 312 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 313 | }, 314 | "picomatch": { 315 | "version": "2.2.2", 316 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 317 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" 318 | }, 319 | "resolve": { 320 | "version": "1.17.0", 321 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 322 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 323 | "requires": { 324 | "path-parse": "^1.0.6" 325 | } 326 | }, 327 | "restore-cursor": { 328 | "version": "3.1.0", 329 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 330 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 331 | "requires": { 332 | "onetime": "^5.1.0", 333 | "signal-exit": "^3.0.2" 334 | } 335 | }, 336 | "rimraf": { 337 | "version": "3.0.2", 338 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 339 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 340 | "requires": { 341 | "glob": "^7.1.3" 342 | } 343 | }, 344 | "rollup": { 345 | "version": "2.10.2", 346 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.10.2.tgz", 347 | "integrity": "sha512-tivFM8UXBlYOUqpBYD3pRktYpZvK/eiCQ190eYlrAyrpE/lzkyG2gbawroNdbwmzyUc7Y4eT297xfzv0BDh9qw==", 348 | "requires": { 349 | "fsevents": "~2.1.2" 350 | } 351 | }, 352 | "signal-exit": { 353 | "version": "3.0.3", 354 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 355 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 356 | }, 357 | "strip-ansi": { 358 | "version": "6.0.0", 359 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 360 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 361 | "requires": { 362 | "ansi-regex": "^5.0.0" 363 | } 364 | }, 365 | "supports-color": { 366 | "version": "7.1.0", 367 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 368 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 369 | "requires": { 370 | "has-flag": "^4.0.0" 371 | } 372 | }, 373 | "tmp": { 374 | "version": "0.2.1", 375 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", 376 | "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", 377 | "requires": { 378 | "rimraf": "^3.0.0" 379 | } 380 | }, 381 | "wcwidth": { 382 | "version": "1.0.1", 383 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 384 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", 385 | "requires": { 386 | "defaults": "^1.0.3" 387 | } 388 | }, 389 | "wrappy": { 390 | "version": "1.0.2", 391 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 392 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 393 | } 394 | } 395 | } 396 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "is-esm", 3 | "version": "0.0.0", 4 | "description": "CLI tool that helps you check if a package is using ECMAScript modules.", 5 | "main": "main.js", 6 | "bin": { 7 | "is-esm": "./index.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/mgechev/is-esm.git" 12 | }, 13 | "keywords": [ 14 | "esm", 15 | "modules", 16 | "javascript", 17 | "npm", 18 | "cjs", 19 | "commonjs" 20 | ], 21 | "author": "Minko Gechev ", 22 | "license": "MIT", 23 | "bugs": { 24 | "url": "https://github.com/mgechev/is-esm/issues" 25 | }, 26 | "homepage": "https://github.com/mgechev/is-esm#readme", 27 | "dependencies": { 28 | "@rollup/plugin-node-resolve": "^7.1.3", 29 | "ora": "^4.0.4", 30 | "rimraf": "^3.0.2", 31 | "rollup": "^2.10.2", 32 | "tmp": "^0.2.1" 33 | } 34 | } 35 | --------------------------------------------------------------------------------