diff --git a/__tests__/babel-plugin/__fixtures__/addVersion/code.js b/__tests__/babel-plugin/__fixtures__/addVersion/code.js new file mode 100644 index 0000000000..9c67ab7cea --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/addVersion/code.js @@ -0,0 +1 @@ +import module from 'example-dep'; diff --git a/__tests__/babel-plugin/__fixtures__/addVersion/options.json b/__tests__/babel-plugin/__fixtures__/addVersion/options.json new file mode 100644 index 0000000000..5815eaa593 --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/addVersion/options.json @@ -0,0 +1,3 @@ +{ + "addVersion": true +} \ No newline at end of file diff --git a/__tests__/babel-plugin/__fixtures__/addVersion/output.js b/__tests__/babel-plugin/__fixtures__/addVersion/output.js new file mode 100644 index 0000000000..aa4974813d --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/addVersion/output.js @@ -0,0 +1 @@ +import module from '/web_modules/example-dep.js?v=1.2.3'; diff --git a/__tests__/babel-plugin/__fixtures__/dir/code.js b/__tests__/babel-plugin/__fixtures__/dir/code.js new file mode 100644 index 0000000000..9c67ab7cea --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/dir/code.js @@ -0,0 +1 @@ +import module from 'example-dep'; diff --git a/__tests__/babel-plugin/__fixtures__/dir/options.json b/__tests__/babel-plugin/__fixtures__/dir/options.json new file mode 100644 index 0000000000..de40b2ed42 --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/dir/options.json @@ -0,0 +1,3 @@ +{ + "dir": "test_modules" +} \ No newline at end of file diff --git a/__tests__/babel-plugin/__fixtures__/dir/output.js b/__tests__/babel-plugin/__fixtures__/dir/output.js new file mode 100644 index 0000000000..650efc46a8 --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/dir/output.js @@ -0,0 +1 @@ +import module from '/test_modules/example-dep.js'; diff --git a/__tests__/babel-plugin/__fixtures__/noOption/code.js b/__tests__/babel-plugin/__fixtures__/noOption/code.js new file mode 100644 index 0000000000..9c67ab7cea --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/noOption/code.js @@ -0,0 +1 @@ +import module from 'example-dep'; diff --git a/__tests__/babel-plugin/__fixtures__/noOption/options.json b/__tests__/babel-plugin/__fixtures__/noOption/options.json new file mode 100644 index 0000000000..2c63c08510 --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/noOption/options.json @@ -0,0 +1,2 @@ +{ +} diff --git a/__tests__/babel-plugin/__fixtures__/noOption/output.js b/__tests__/babel-plugin/__fixtures__/noOption/output.js new file mode 100644 index 0000000000..659499992c --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/noOption/output.js @@ -0,0 +1 @@ +import module from '/web_modules/example-dep.js'; diff --git a/__tests__/babel-plugin/__fixtures__/optionalExtensions/code.js b/__tests__/babel-plugin/__fixtures__/optionalExtensions/code.js new file mode 100644 index 0000000000..082011b980 --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/optionalExtensions/code.js @@ -0,0 +1 @@ +import module from 'any/local/file'; diff --git a/__tests__/babel-plugin/__fixtures__/optionalExtensions/options.json b/__tests__/babel-plugin/__fixtures__/optionalExtensions/options.json new file mode 100644 index 0000000000..e73055ac82 --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/optionalExtensions/options.json @@ -0,0 +1,3 @@ +{ + "optionalExtensions": true +} \ No newline at end of file diff --git a/__tests__/babel-plugin/__fixtures__/optionalExtensions/output.js b/__tests__/babel-plugin/__fixtures__/optionalExtensions/output.js new file mode 100644 index 0000000000..9f5b27048b --- /dev/null +++ b/__tests__/babel-plugin/__fixtures__/optionalExtensions/output.js @@ -0,0 +1 @@ +import module from '/web_modules/any/local/file.js'; diff --git a/__tests__/babel-plugin/node_modules/example-dep/package.json b/__tests__/babel-plugin/node_modules/example-dep/package.json new file mode 100644 index 0000000000..17926cdcb9 --- /dev/null +++ b/__tests__/babel-plugin/node_modules/example-dep/package.json @@ -0,0 +1,6 @@ +{ + "name": "example-dep", + "version": "1.2.3", + "main": "test.cjs", + "module": "test.mjs" + } \ No newline at end of file diff --git a/__tests__/babel-plugin/node_modules/example-dep/test.cjs b/__tests__/babel-plugin/node_modules/example-dep/test.cjs new file mode 100644 index 0000000000..e69de29bb2 diff --git a/__tests__/babel-plugin/node_modules/example-dep/test.mjs b/__tests__/babel-plugin/node_modules/example-dep/test.mjs new file mode 100644 index 0000000000..e69de29bb2 diff --git a/__tests__/babel-plugin/runner.js b/__tests__/babel-plugin/runner.js new file mode 100644 index 0000000000..e74df2340f --- /dev/null +++ b/__tests__/babel-plugin/runner.js @@ -0,0 +1,11 @@ +const path = require('path'); +const pluginTester = require('babel-plugin-tester').default; +const babelPlugin = require('../../assets/babel-plugin.js'); + +process.chdir(__dirname); + +pluginTester({ + plugin: babelPlugin, + pluginName: 'snowpack/assets/babel-plugin.js', + fixtures: path.join(__dirname, '__fixtures__'), +}); diff --git a/assets/babel-plugin.js b/assets/babel-plugin.js index 06e21d6d7b..233679062b 100644 --- a/assets/babel-plugin.js +++ b/assets/babel-plugin.js @@ -8,10 +8,10 @@ function getWebDependencyName(dep) { return dep.replace(/\.js$/, ''); } -function getPackageVersion(package) { +function getPackageVersion(packageName) { // The root module for require.resolve is @babel/cli in default, so configure here. const modulesPath = process.cwd() + '/node_modules'; - const entryPointPath = require.resolve(package, {paths: [modulesPath]}); + const entryPointPath = require.resolve(packageName, {paths: [modulesPath]}); const json = finder(entryPointPath).next().value; return json.version; } diff --git a/package-lock.json b/package-lock.json index af4284f257..f993b64e4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2189,6 +2189,28 @@ "@types/babel__traverse": "^7.0.6" } }, + "babel-plugin-tester": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-tester/-/babel-plugin-tester-8.0.1.tgz", + "integrity": "sha512-5PN7FR1oxbTiA7JUdInT+vFkgu6ckYL5moRzWf5T7hAq+QX5cbcHpoXNHu1x7SQHCEZwYMhN1HzZoqeolNaO2g==", + "dev": true, + "requires": { + "lodash.mergewith": "^4.6.2", + "prettier": "^1.19.1", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + } + } + }, "babel-preset-jest": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", @@ -8129,6 +8151,12 @@ "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", "dev": true }, + "lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -8599,6 +8627,12 @@ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, + "min-indent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz", + "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=", + "dev": true + }, "minimatch": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.2.tgz", diff --git a/package.json b/package.json index 7ce9abb0b8..03fc93159a 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,9 @@ "lint": "prettier --check 'src/**/*.ts'", "publish": "pika publish", "version": "npm run build", - "test": "jest __tests__/integration/runner.js --test-timeout=15000", + "test": "npm run test:integration && npm run test:babel-plugin", + "test:integration": "jest __tests__/integration/runner.js --test-timeout=15000", + "test:babel-plugin": "jest __tests__/babel-plugin/runner.js", "docs:build": "cat docs/* > www/index.md && npx @11ty/eleventy --config www/.eleventy.js", "docs:watch": "cat docs/* > www/index.md && npx @11ty/eleventy --config www/.eleventy.js --serve", "docs:deploy": "npm run docs:build && cd www/dist && now --prod" @@ -66,11 +68,8 @@ "yargs-parser": "^16.1.0" }, "devDependencies": { - "@11ty/eleventy-plugin-syntaxhighlight": "^3.0.1", "@11ty/eleventy": "^0.10.0", - "eleventy-plugin-nesting-toc": "^1.1.0", - "markdown-it": "^10.0.0", - "markdown-it-anchor": "^5.2.5", + "@11ty/eleventy-plugin-syntaxhighlight": "^3.0.1", "@pika/pack": "^0.5.0", "@pika/plugin-build-node": "^0.8.1", "@pika/plugin-copy-assets": "^0.8.1", @@ -78,7 +77,11 @@ "@pika/plugin-ts-standard-pkg": "^0.8.1", "@types/babel__traverse": "^7.0.7", "@types/mkdirp": "^0.5.2", + "babel-plugin-tester": "^8.0.1", + "eleventy-plugin-nesting-toc": "^1.1.0", "jest": "^24.9.0", + "markdown-it": "^10.0.0", + "markdown-it-anchor": "^5.2.5", "prettier": "^1.18.2", "typescript": "^3.6.4" }