@jsenv/core 23.7.1 → 23.8.0

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 (34) hide show
  1. package/dist/jsenv_browser_system.js.map +1 -1
  2. package/dist/jsenv_compile_proxy.js.map +1 -1
  3. package/dist/jsenv_exploring_redirector.js.map +1 -1
  4. package/dist/jsenv_toolbar.js +0 -2
  5. package/dist/jsenv_toolbar.js.map +3 -3
  6. package/package.json +2 -2
  7. package/src/buildProject.js +300 -300
  8. package/src/execute.js +184 -184
  9. package/src/internal/browser-launcher/jsenv-browser-system.js +199 -199
  10. package/src/internal/compiling/babel_plugin_import_assertions.js +121 -100
  11. package/src/internal/compiling/babel_plugin_import_metadata.js +22 -0
  12. package/src/internal/compiling/babel_plugin_import_visitor.js +84 -0
  13. package/src/internal/compiling/compile-directory/getOrGenerateCompiledFile.js +268 -265
  14. package/src/internal/compiling/compile-directory/updateMeta.js +154 -150
  15. package/src/internal/compiling/compile-directory/validateCache.js +265 -265
  16. package/src/internal/compiling/compileFile.js +215 -194
  17. package/src/internal/compiling/compileHtml.js +550 -494
  18. package/src/internal/compiling/createCompiledFileService.js +291 -290
  19. package/src/internal/compiling/html_source_file_service.js +403 -379
  20. package/src/internal/compiling/js-compilation-service/jsenvTransform.js +270 -269
  21. package/src/internal/compiling/jsenvCompilerForHtml.js +300 -293
  22. package/src/internal/compiling/startCompileServer.js +1048 -1052
  23. package/src/internal/compiling/transformResultToCompilationResult.js +220 -217
  24. package/src/internal/executing/executePlan.js +183 -183
  25. package/src/internal/executing/launchAndExecute.js +458 -458
  26. package/src/internal/runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js +246 -246
  27. package/src/internal/runtime/createNodeRuntime/scanNodeRuntimeFeatures.js +112 -112
  28. package/src/internal/toolbar/toolbar.main.css +196 -188
  29. package/src/internal/toolbar/toolbar.main.js +227 -228
  30. package/src/internal/url_conversion.js +317 -317
  31. package/src/startExploring.js +309 -309
  32. package/src/internal/compiling/babel_plugin_transform_import_specifier.js +0 -86
  33. package/src/internal/toolbar/animation/animation.css +0 -5
  34. package/src/internal/toolbar/variant/variant.css +0 -3
@@ -1,150 +1,154 @@
1
- import {
2
- urlToRelativeUrl,
3
- urlToFileSystemPath,
4
- bufferToEtag,
5
- } from "@jsenv/filesystem"
6
- import { utimesSync } from "node:fs"
7
-
8
- import { writeFileContent, testFilePresence } from "./fs-optimized-for-cache.js"
9
- import { getMetaJsonFileUrl } from "./compile-asset.js"
10
-
11
- export const updateMeta = async ({
12
- logger,
13
- meta,
14
- compiledFileUrl,
15
- compileResult,
16
- compileResultStatus,
17
- }) => {
18
- const isNew = compileResultStatus === "created"
19
- const isUpdated = compileResultStatus === "updated"
20
- const {
21
- compiledSource,
22
- contentType,
23
- sources,
24
- sourcesContent,
25
- assets,
26
- assetsContent,
27
- } = compileResult
28
-
29
- const promises = []
30
- if (isNew || isUpdated) {
31
- // ensure source that does not leads to concrete files are not capable to invalidate the cache
32
- const sourcesToRemove = []
33
- sources.forEach((sourceFileUrl) => {
34
- const sourceFileExists = testFilePresence(sourceFileUrl)
35
- if (sourceFileExists) {
36
- return
37
- }
38
-
39
- sourcesToRemove.push(sourceFileUrl)
40
- })
41
- const sourceNotFoundCount = sourcesToRemove.length
42
- if (sourceNotFoundCount > 0) {
43
- logger.warn(`SOURCE_META_NOT_FOUND: ${sourceNotFoundCount} source file(s) not found.
44
- --- consequence ---
45
- cache will be reused even if one of the source file is modified
46
- --- source files not found ---
47
- ${sourcesToRemove.join(`\n`)}`)
48
- sourcesToRemove.forEach((url) => {
49
- const sourceIndex = sources.indexOf(url)
50
- if (sourceIndex) {
51
- sources.splice(sourceIndex, 1)
52
- sourcesContent.splice(sourceIndex, 1)
53
- }
54
- })
55
- }
56
-
57
- const { writeCompiledSourceFile = true, writeAssetsFile = true } =
58
- compileResult
59
-
60
- if (writeCompiledSourceFile) {
61
- logger.debug(
62
- `write compiled file at ${urlToFileSystemPath(compiledFileUrl)}`,
63
- )
64
- promises.push(
65
- writeFileContent(compiledFileUrl, compiledSource, {
66
- fileLikelyNotFound: isNew,
67
- }).then(() => {
68
- const mtime = compileResult.compiledMtime
69
- // when compileResult.compiledMtime do not exists it means
70
- // the client is not interested in it so
71
- // -> moment we write the file is not important
72
- // -> There is no need to update mtime
73
- if (mtime) {
74
- utimesSync(
75
- urlToFileSystemPath(compiledFileUrl),
76
- new Date(mtime),
77
- new Date(mtime),
78
- )
79
- }
80
- }),
81
- )
82
- }
83
-
84
- if (writeAssetsFile) {
85
- promises.push(
86
- ...assets.map((assetFileUrl, index) => {
87
- logger.debug(
88
- `write compiled file asset at ${urlToFileSystemPath(assetFileUrl)}`,
89
- )
90
- return writeFileContent(assetFileUrl, assetsContent[index], {
91
- fileLikelyNotFound: isNew,
92
- })
93
- }),
94
- )
95
- }
96
- }
97
-
98
- const metaJsonFileUrl = getMetaJsonFileUrl(compiledFileUrl)
99
-
100
- if (isNew || isUpdated) {
101
- let latestMeta
102
-
103
- const sourceAndAssetProps = {
104
- sources: sources.map((source) =>
105
- urlToRelativeUrl(source, metaJsonFileUrl),
106
- ),
107
- sourcesEtag: sourcesContent.map((sourceContent) =>
108
- bufferToEtag(Buffer.from(sourceContent)),
109
- ),
110
- assets: assets.map((asset) => urlToRelativeUrl(asset, metaJsonFileUrl)),
111
- assetsEtag: assetsContent.map((assetContent) =>
112
- bufferToEtag(Buffer.from(assetContent)),
113
- ),
114
- }
115
-
116
- if (isNew) {
117
- latestMeta = {
118
- contentType,
119
- ...sourceAndAssetProps,
120
- createdMs: Number(Date.now()),
121
- lastModifiedMs: Number(Date.now()),
122
- }
123
- } else if (isUpdated) {
124
- latestMeta = {
125
- ...meta,
126
- ...sourceAndAssetProps,
127
- lastModifiedMs: Number(Date.now()),
128
- }
129
- } else {
130
- latestMeta = {
131
- ...meta,
132
- }
133
- }
134
-
135
- logger.debug(
136
- `write compiled file meta at ${urlToFileSystemPath(metaJsonFileUrl)}`,
137
- )
138
- promises.push(
139
- writeFileContent(
140
- metaJsonFileUrl,
141
- JSON.stringify(latestMeta, null, " "),
142
- {
143
- fileLikelyNotFound: isNew,
144
- },
145
- ),
146
- )
147
- }
148
-
149
- return Promise.all(promises)
150
- }
1
+ import {
2
+ urlToRelativeUrl,
3
+ urlToFileSystemPath,
4
+ bufferToEtag,
5
+ } from "@jsenv/filesystem"
6
+ import { utimesSync } from "node:fs"
7
+
8
+ import { writeFileContent, testFilePresence } from "./fs-optimized-for-cache.js"
9
+ import { getMetaJsonFileUrl } from "./compile-asset.js"
10
+
11
+ export const updateMeta = async ({
12
+ logger,
13
+ meta,
14
+ compiledFileUrl,
15
+ compileResult,
16
+ compileResultStatus,
17
+ }) => {
18
+ const isNew = compileResultStatus === "created"
19
+ const isUpdated = compileResultStatus === "updated"
20
+ const {
21
+ compiledSource,
22
+ contentType,
23
+ sources,
24
+ sourcesContent,
25
+ assets,
26
+ assetsContent,
27
+ dependencies,
28
+ } = compileResult
29
+
30
+ const promises = []
31
+ if (isNew || isUpdated) {
32
+ // ensure source that does not leads to concrete files are not capable to invalidate the cache
33
+ const sourcesToRemove = []
34
+ sources.forEach((sourceFileUrl) => {
35
+ const sourceFileExists = testFilePresence(sourceFileUrl)
36
+ if (sourceFileExists) {
37
+ return
38
+ }
39
+
40
+ sourcesToRemove.push(sourceFileUrl)
41
+ })
42
+ const sourceNotFoundCount = sourcesToRemove.length
43
+ if (sourceNotFoundCount > 0) {
44
+ logger.warn(`SOURCE_META_NOT_FOUND: ${sourceNotFoundCount} source file(s) not found.
45
+ --- consequence ---
46
+ cache will be reused even if one of the source file is modified
47
+ --- source files not found ---
48
+ ${sourcesToRemove.join(`\n`)}`)
49
+ sourcesToRemove.forEach((url) => {
50
+ const sourceIndex = sources.indexOf(url)
51
+ if (sourceIndex) {
52
+ sources.splice(sourceIndex, 1)
53
+ sourcesContent.splice(sourceIndex, 1)
54
+ }
55
+ })
56
+ }
57
+
58
+ const { writeCompiledSourceFile = true, writeAssetsFile = true } =
59
+ compileResult
60
+
61
+ if (writeCompiledSourceFile) {
62
+ logger.debug(
63
+ `write compiled file at ${urlToFileSystemPath(compiledFileUrl)}`,
64
+ )
65
+ promises.push(
66
+ writeFileContent(compiledFileUrl, compiledSource, {
67
+ fileLikelyNotFound: isNew,
68
+ }).then(() => {
69
+ const mtime = compileResult.compiledMtime
70
+ // when compileResult.compiledMtime do not exists it means
71
+ // the client is not interested in it so
72
+ // -> moment we write the file is not important
73
+ // -> There is no need to update mtime
74
+ if (mtime) {
75
+ utimesSync(
76
+ urlToFileSystemPath(compiledFileUrl),
77
+ new Date(mtime),
78
+ new Date(mtime),
79
+ )
80
+ }
81
+ }),
82
+ )
83
+ }
84
+
85
+ if (writeAssetsFile) {
86
+ promises.push(
87
+ ...assets.map((assetFileUrl, index) => {
88
+ logger.debug(
89
+ `write compiled file asset at ${urlToFileSystemPath(assetFileUrl)}`,
90
+ )
91
+ return writeFileContent(assetFileUrl, assetsContent[index], {
92
+ fileLikelyNotFound: isNew,
93
+ })
94
+ }),
95
+ )
96
+ }
97
+ }
98
+
99
+ const metaJsonFileUrl = getMetaJsonFileUrl(compiledFileUrl)
100
+
101
+ if (isNew || isUpdated) {
102
+ let latestMeta
103
+
104
+ const sourceAndAssetProps = {
105
+ sources: sources.map((source) =>
106
+ urlToRelativeUrl(source, metaJsonFileUrl),
107
+ ),
108
+ sourcesEtag: sourcesContent.map((sourceContent) =>
109
+ bufferToEtag(Buffer.from(sourceContent)),
110
+ ),
111
+ assets: assets.map((asset) => urlToRelativeUrl(asset, metaJsonFileUrl)),
112
+ assetsEtag: assetsContent.map((assetContent) =>
113
+ bufferToEtag(Buffer.from(assetContent)),
114
+ ),
115
+ dependencies: dependencies.filter((dep) => {
116
+ return !dep.startsWith("data:")
117
+ }),
118
+ }
119
+
120
+ if (isNew) {
121
+ latestMeta = {
122
+ contentType,
123
+ ...sourceAndAssetProps,
124
+ createdMs: Number(Date.now()),
125
+ lastModifiedMs: Number(Date.now()),
126
+ }
127
+ } else if (isUpdated) {
128
+ latestMeta = {
129
+ ...meta,
130
+ ...sourceAndAssetProps,
131
+ lastModifiedMs: Number(Date.now()),
132
+ }
133
+ } else {
134
+ latestMeta = {
135
+ ...meta,
136
+ }
137
+ }
138
+
139
+ logger.debug(
140
+ `write compiled file meta at ${urlToFileSystemPath(metaJsonFileUrl)}`,
141
+ )
142
+ promises.push(
143
+ writeFileContent(
144
+ metaJsonFileUrl,
145
+ JSON.stringify(latestMeta, null, " "),
146
+ {
147
+ fileLikelyNotFound: isNew,
148
+ },
149
+ ),
150
+ )
151
+ }
152
+
153
+ return Promise.all(promises)
154
+ }