@jsenv/plugin-commonjs 0.1.2 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/package.json +11 -9
  2. package/scripts/test.mjs +15 -0
  3. package/src/compile_cache/compiled_file_cache.js +13 -13
  4. package/src/compile_cache/update_compile_cache.js +3 -3
  5. package/src/jsenv_plugin_commonjs.js +13 -7
  6. package/tests/cjs_cache/cjs_cache.manual_test.mjs +17 -0
  7. package/tests/cjs_cache/cjs_cache.test.mjs +79 -0
  8. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/index.js +3 -0
  9. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/index.js.map +9 -0
  10. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/decompose.js +405 -0
  11. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/decompose.js.map +9 -0
  12. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/escapeString.js +28 -0
  13. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/global-value-path.js +60 -0
  14. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/global-value-path.js.map +9 -0
  15. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/isComposite.js +18 -0
  16. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/sortRecipe.js +76 -0
  17. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/uneval.js +212 -0
  18. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/uneval.js.map +9 -0
  19. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/ast/src/html/html_src_set.js +18 -0
  20. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/helpers/event_source/event_source.js +197 -0
  21. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/autoreload_preference.js +11 -0
  22. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/event_source_client.js +195 -0
  23. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/event_source_client.js.map +9 -0
  24. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/reload.js +106 -0
  25. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/reload.js.map +9 -0
  26. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/url_helpers.js +20 -0
  27. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/error_in_document.js +198 -0
  28. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/error_in_notification.js +21 -0
  29. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/html_supervisor_installer.js +256 -0
  30. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/html_supervisor_installer.js.map +9 -0
  31. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/html_supervisor_setup.js +82 -0
  32. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/uneval_exception.js +10 -0
  33. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/uneval_exception.js.map +9 -0
  34. package/tests/cjs_cache/client/.jsenv/chrome@102.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/import_meta_hot/client/import_meta_hot.js +82 -0
  35. package/tests/cjs_cache/client/.jsenv/chrome@102.00/file.cjs +9 -0
  36. package/tests/cjs_cache/client/.jsenv/chrome@102.00/file.cjs.map +12 -0
  37. package/tests/cjs_cache/client/.jsenv/chrome@102.00/main.html +16 -0
  38. package/tests/cjs_cache/client/.jsenv/chrome@102.00/main.html@L10-L14.js +5 -0
  39. package/tests/cjs_cache/client/.jsenv/chrome@102.00/main.html@L3-L8.js +7 -0
  40. package/tests/cjs_cache/client/.jsenv/chrome@102.00/main.html@L3-L8.js.map +12 -0
  41. package/tests/cjs_cache/client/.jsenv/chrome@102.00/main.js +5 -0
  42. package/tests/cjs_cache/client/.jsenv/chrome@102.00/main.js.map +9 -0
  43. package/tests/cjs_cache/client/.jsenv/cjs_to_esm/__compile_context__.json +3 -0
  44. package/tests/cjs_cache/client/.jsenv/cjs_to_esm/file.development.cjs +7 -0
  45. package/tests/cjs_cache/client/.jsenv/cjs_to_esm/file.development.cjs__compile_info__.json +17 -0
  46. package/tests/cjs_cache/client/.jsenv/cjs_to_esm/file.development.map +1 -0
  47. package/tests/cjs_cache/client/dep.cjs +1 -0
  48. package/tests/cjs_cache/client/file.cjs +1 -0
  49. package/tests/cjs_cache/client/main.html +17 -0
  50. package/tests/cjs_cache/client/main.js +3 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/plugin-commonjs",
3
- "version": "0.1.2",
3
+ "version": "0.3.2",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,26 +8,28 @@
8
8
  "directory": "packages/jsenv-plugin-commonjs"
9
9
  },
10
10
  "publishConfig": {
11
- "access": "public",
12
- "registry": "https://registry.npmjs.org"
11
+ "access": "public"
13
12
  },
14
13
  "type": "module",
15
14
  "main": "./main.js",
16
15
  "dependencies": {
17
16
  "@jsenv/filesystem": "4.1.0",
18
- "@jsenv/log": "2.1.0",
17
+ "@jsenv/log": "3.1.0",
19
18
  "@jsenv/url-meta": "7.0.0",
20
19
  "@jsenv/urls": "1.2.6",
21
- "@rollup/plugin-commonjs": "22.0.0",
20
+ "@rollup/plugin-commonjs": "22.0.1",
22
21
  "@rollup/plugin-json": "4.1.0",
23
22
  "@rollup/plugin-node-resolve": "13.3.0",
24
23
  "@rollup/plugin-replace": "4.0.0",
25
24
  "cjs-module-lexer": "1.2.2",
26
25
  "is-valid-identifier": "2.0.2",
27
26
  "resolve": "1.22.1",
28
- "rollup": "2.75.7",
27
+ "rollup": "2.76.0",
29
28
  "rollup-plugin-node-globals": "1.4.0",
30
- "rollup-plugin-polyfill-node": "0.9.0",
31
- "vm2": "3.9.9"
29
+ "rollup-plugin-polyfill-node": "0.10.1",
30
+ "vm2": "3.9.10"
31
+ },
32
+ "devDependencies": {
33
+ "@jsenv/core": "../../"
32
34
  }
33
- }
35
+ }
@@ -0,0 +1,15 @@
1
+ import { executeTestPlan, nodeWorkerThread } from "@jsenv/core"
2
+
3
+ await executeTestPlan({
4
+ rootDirectoryUrl: new URL("../", import.meta.url),
5
+ testPlan: {
6
+ "tests/**/*.test.mjs": {
7
+ node: {
8
+ runtime: nodeWorkerThread,
9
+ },
10
+ },
11
+ },
12
+ failFast: process.argv.includes("--workspace"),
13
+ completedExecutionLogMerging: process.argv.includes("--workspace"),
14
+ coverageEnabled: process.argv.includes("--coverage"),
15
+ })
@@ -27,15 +27,20 @@ export const reuseOrCreateCompiledFile = async ({
27
27
  throw new TypeError(`compile must be a function, got ${compile}`)
28
28
  }
29
29
 
30
+ const getCacheValidity = () => {
31
+ const cacheValidity = validateCompileCache({
32
+ logger,
33
+ compiledFileUrl,
34
+ compileCacheStrategy,
35
+ compileCacheAssetsValidation,
36
+ })
37
+ return cacheValidity
38
+ }
39
+
30
40
  return startAsap(
31
41
  async () => {
32
42
  logger.debug(`check cache for ${compiledFileUrl}`)
33
- const cacheValidity = validateCompileCache({
34
- logger,
35
- compiledFileUrl,
36
- compileCacheStrategy,
37
- compileCacheAssetsValidation,
38
- })
43
+ const cacheValidity = getCacheValidity()
39
44
  if (cacheValidity.isValid) {
40
45
  logger.debug(`${UNICODE.OK} found a valid cache`)
41
46
  const compileInfo = cacheValidity.compileInfo.data
@@ -55,14 +60,8 @@ export const reuseOrCreateCompiledFile = async ({
55
60
  sourcemap = assetValidity.data.sourcemap
56
61
  }
57
62
  })
58
- updateCompileCache({
59
- logger,
60
- compiledFileUrl,
61
- content,
62
- assets,
63
- compileResultStatus: "cached",
64
- })
65
63
  return {
64
+ isValid: () => getCacheValidity().isValid,
66
65
  content,
67
66
  sourcemap,
68
67
  }
@@ -96,6 +95,7 @@ export const reuseOrCreateCompiledFile = async ({
96
95
  compileResultStatus: compileInfoIsValid ? "updated" : "created",
97
96
  })
98
97
  return {
98
+ isValid: () => getCacheValidity().isValid,
99
99
  content,
100
100
  sourcemap,
101
101
  }
@@ -70,15 +70,15 @@ ${filesRemoved.join(`\n`)}`)
70
70
  // was used at some point to ensure the compiled file matches browser etag
71
71
  // etag: bufferToEtag(Buffer.from(content)),
72
72
  assetInfos,
73
- createdMs: Number(Date.now()),
74
- lastModifiedMs: Number(Date.now()),
73
+ createdMs: Date.now(),
74
+ lastModifiedMs: Date.now(),
75
75
  }
76
76
  } else if (isUpdated) {
77
77
  latestCompileInfo = {
78
78
  // was used at some point to ensure the compiled file matches browser etag
79
79
  // etag: bufferToEtag(Buffer.from(content)),
80
80
  assetInfos,
81
- lastModifiedMs: Number(Date.now()),
81
+ lastModifiedMs: Date.now(),
82
82
  }
83
83
  }
84
84
  logger.debug(
@@ -8,16 +8,19 @@ export const jsenvPluginCommonJs = ({
8
8
  logLevel,
9
9
  include,
10
10
  }) => {
11
- const associations = URL_META.resolveAssociations(
12
- {
13
- commonjs: include,
14
- },
15
- "file://",
16
- )
11
+ let associations
17
12
 
18
13
  return {
19
14
  name,
20
15
  appliesDuring: "*",
16
+ init: ({ rootDirectoryUrl }) => {
17
+ associations = URL_META.resolveAssociations(
18
+ {
19
+ commonjs: include,
20
+ },
21
+ rootDirectoryUrl,
22
+ )
23
+ },
21
24
  redirectUrl: {
22
25
  js_import_export: (reference) => {
23
26
  const { commonjs } = URL_META.applyAssociations({
@@ -45,7 +48,7 @@ export const jsenvPluginCommonJs = ({
45
48
  if (!originalUrlInfo) {
46
49
  return null
47
50
  }
48
- const { content, sourcemap } = await commonJsToJsModule({
51
+ const { content, sourcemap, isValid } = await commonJsToJsModule({
49
52
  logLevel,
50
53
  rootDirectoryUrl: context.rootDirectoryUrl,
51
54
  sourceFileUrl: originalUrlInfo.url,
@@ -55,6 +58,9 @@ export const jsenvPluginCommonJs = ({
55
58
  : "production",
56
59
  ...urlInfo.data.commonjs,
57
60
  })
61
+ if (isValid) {
62
+ urlInfo.isValid = isValid
63
+ }
58
64
  return {
59
65
  content,
60
66
  contentType: "text/javascript",
@@ -0,0 +1,17 @@
1
+ import { startDevServer } from "@jsenv/core"
2
+ import { jsenvPluginCommonJs } from "@jsenv/plugin-commonjs"
3
+
4
+ await startDevServer({
5
+ logLevel: "info",
6
+ rootDirectoryUrl: new URL("./client/", import.meta.url),
7
+ port: 5432,
8
+ plugins: [
9
+ jsenvPluginCommonJs({
10
+ include: {
11
+ "./file.cjs": true,
12
+ },
13
+ }),
14
+ ],
15
+ clientAutoreload: false,
16
+ htmlSupervisor: false,
17
+ })
@@ -0,0 +1,79 @@
1
+ import { writeFileSync, readFileSync } from "node:fs"
2
+ import { chromium } from "playwright"
3
+ import { assert } from "@jsenv/assert"
4
+ import { ensureEmptyDirectory } from "@jsenv/filesystem"
5
+ import { startDevServer } from "@jsenv/core"
6
+ import { launchBrowserPage } from "@jsenv/core/tests/launch_browser_page.js"
7
+
8
+ import { jsenvPluginCommonJs } from "@jsenv/plugin-commonjs"
9
+
10
+ const debug = false // true to have browser UI + keep it open after test
11
+ await ensureEmptyDirectory(
12
+ new URL("./client/.jsenv/cjs_to_esm", import.meta.url),
13
+ )
14
+ const cjsFileUrl = new URL("./client/dep.cjs", import.meta.url)
15
+ const cjsFileContent = {
16
+ beforeTest: readFileSync(cjsFileUrl),
17
+ update: (content) => writeFileSync(cjsFileUrl, content),
18
+ restore: () => writeFileSync(cjsFileUrl, cjsFileContent.beforeTest),
19
+ }
20
+ const devServer = await startDevServer({
21
+ logLevel: "warn",
22
+ rootDirectoryUrl: new URL("./client/", import.meta.url),
23
+ keepProcessAlive: false,
24
+ plugins: [
25
+ jsenvPluginCommonJs({
26
+ include: {
27
+ "./file.cjs": true,
28
+ },
29
+ }),
30
+ ],
31
+ clientAutoreload: false,
32
+ htmlSupervisor: false,
33
+ })
34
+ const browser = await chromium.launch({
35
+ headless: !debug,
36
+ })
37
+ try {
38
+ const page = await launchBrowserPage(browser)
39
+ await page.goto(`${devServer.origin}/main.html`)
40
+
41
+ const getResult = async () => {
42
+ const result = await page.evaluate(
43
+ /* eslint-disable no-undef */
44
+ () => {
45
+ return window.resultPromise
46
+ },
47
+ /* eslint-enable no-undef */
48
+ )
49
+ return result
50
+ }
51
+
52
+ {
53
+ const actual = {
54
+ result: await getResult(),
55
+ }
56
+ const expected = {
57
+ result: 42,
58
+ }
59
+ assert({ actual, expected })
60
+ }
61
+
62
+ // now update the package content + version and see if reloading the page updates the result
63
+ {
64
+ cjsFileContent.update(`module.exports = 43`)
65
+ await page.reload()
66
+ const actual = {
67
+ result: await getResult(),
68
+ }
69
+ const expected = {
70
+ result: 43,
71
+ }
72
+ assert({ actual, expected })
73
+ }
74
+ } finally {
75
+ if (!debug) {
76
+ browser.close()
77
+ }
78
+ cjsFileContent.restore()
79
+ }
@@ -0,0 +1,3 @@
1
+ export { uneval } from "/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/uneval.js?v=1.6.0"
2
+
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbImZpbGU6Ly8vVXNlcnMvZC5tYWlsbGFyZC9kZXYvanNlbnYvanNlbnYtY29yZS9ub2RlX21vZHVsZXMvQGpzZW52L3VuZXZhbC9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNkZBQWlCOyJ9
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "file": null,
4
+ "sources": [
5
+ "file:///Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/index.js"
6
+ ],
7
+ "names": [],
8
+ "mappings": "AAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6FAAiB;"
9
+ }