@jsenv/core 27.3.4 → 27.5.1
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.
- package/dist/js/autoreload.js +359 -0
- package/dist/js/execute_using_dynamic_import.js +1 -1
- package/dist/js/html_supervisor_installer.js +524 -147
- package/dist/js/html_supervisor_setup.js +3 -4
- package/dist/js/new_stylesheet.js +26 -58
- package/dist/js/server_events_client.js +307 -0
- package/dist/main.js +7709 -7324
- package/package.json +15 -15
- package/{README.md → readme.md} +18 -7
- package/src/build/build.js +16 -18
- package/src/build/start_build_server.js +24 -28
- package/src/dev/start_dev_server.js +34 -96
- package/src/execute/execute.js +17 -35
- package/src/omega/errors.js +43 -9
- package/src/omega/kitchen.js +42 -25
- package/src/omega/omega_server.js +96 -74
- package/src/omega/server/file_service.js +256 -28
- package/src/omega/url_graph.js +33 -20
- package/src/plugins/autoreload/client/autoreload.js +201 -0
- package/src/plugins/autoreload/{dev_sse/client → client}/autoreload_preference.js +0 -0
- package/src/plugins/autoreload/{dev_sse/client → client}/reload.js +29 -10
- package/src/plugins/autoreload/{dev_sse/client → client}/url_helpers.js +0 -0
- package/src/plugins/autoreload/jsenv_plugin_autoreload.js +4 -8
- package/src/plugins/autoreload/{dev_sse/jsenv_plugin_dev_sse_client.js → jsenv_plugin_autoreload_client.js} +8 -8
- package/src/plugins/autoreload/jsenv_plugin_autoreload_server.js +196 -0
- package/src/{dev/plugins → plugins}/explorer/client/explorer.html +0 -0
- package/src/{dev/plugins → plugins}/explorer/client/jsenv.png +0 -0
- package/src/{dev/plugins → plugins}/explorer/jsenv_plugin_explorer.js +1 -3
- package/src/plugins/html_supervisor/client/error_overlay.js +401 -0
- package/src/plugins/html_supervisor/client/html_supervisor_installer.js +138 -23
- package/src/plugins/html_supervisor/client/html_supervisor_setup.js +3 -4
- package/src/plugins/html_supervisor/jsenv_plugin_html_supervisor.js +55 -23
- package/src/plugins/inline/jsenv_plugin_html_inline_content.js +97 -117
- package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +66 -58
- package/src/plugins/plugin_controller.js +102 -67
- package/src/plugins/plugins.js +10 -10
- package/src/{helpers/event_source/event_source.js → plugins/server_events/client/event_source_connection.js} +125 -33
- package/src/plugins/server_events/client/server_events_client.js +17 -0
- package/src/plugins/server_events/jsenv_plugin_server_events_client_injection.js +48 -0
- package/src/plugins/server_events/server_events_dispatcher.js +69 -0
- package/src/{dev/plugins → plugins}/toolbar/client/animation/toolbar_animation.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/eventsource/eventsource.css +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/eventsource/toolbar_eventsource.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/execution/execution.css +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/execution/toolbar_execution.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/focus/focus.css +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/focus/toolbar_focus.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/jsenv_logo.svg +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/notification/toolbar_notification.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/responsive/overflow_menu.css +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/responsive/toolbar_responsive.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/settings/settings.css +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/settings/toolbar_settings.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/theme/jsenv_theme.css +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/theme/light_theme.css +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/theme/toolbar_theme.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/toolbar.html +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/toolbar_injector.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/toolbar_main.css +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/toolbar_main.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/tooltip/tooltip.css +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/tooltip/tooltip.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/util/animation.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/util/dom.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/util/fetch_using_xhr.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/util/fetching.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/util/iframe_to_parent_href.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/util/jsenv_logger.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/util/preferences.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/util/responsive.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/util/util.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/client/variant/variant.js +0 -0
- package/src/{dev/plugins → plugins}/toolbar/jsenv_plugin_toolbar.js +0 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +4 -3
- package/src/plugins/transpilation/babel/new_stylesheet/client/new_stylesheet.js +25 -55
- package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +44 -24
- package/src/plugins/transpilation/jsenv_plugin_transpilation.js +6 -1
- package/src/plugins/url_analysis/html/html_urls.js +8 -8
- package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +3 -1
- package/src/test/execute_plan.js +36 -54
- package/src/test/execute_test_plan.js +2 -2
- package/src/test/logs_file_execution.js +60 -27
- package/src/test/logs_file_execution.test.mjs +41 -0
- package/dist/js/event_source_client.js +0 -528
- package/src/helpers/event_source/sse_service.js +0 -53
- package/src/plugins/autoreload/dev_sse/client/event_source_client.js +0 -193
- package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +0 -203
- package/src/plugins/html_supervisor/client/error_in_document.js +0 -198
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsenv/core",
|
|
3
|
-
"version": "27.
|
|
3
|
+
"version": "27.5.1",
|
|
4
4
|
"description": "Tool to develop, test and build js projects",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -43,7 +43,6 @@
|
|
|
43
43
|
"eslint": "npx eslint . --ext=.js,.mjs,.cjs,.html",
|
|
44
44
|
"dev": "node --conditions=development ./scripts/dev/dev.mjs",
|
|
45
45
|
"test": "node --conditions=development ./scripts/test/test.mjs",
|
|
46
|
-
"test:coverage": "cross-env NODE_V8_COVERAGE=.coverage/node npm run test -- --coverage",
|
|
47
46
|
"test:workspace": "npm run test --workspaces --if-present -- --workspace",
|
|
48
47
|
"build": "node --conditions=development ./scripts/build/build.mjs",
|
|
49
48
|
"workspace:versions": "node ./scripts/publish/workspace_versions.mjs",
|
|
@@ -66,31 +65,33 @@
|
|
|
66
65
|
"@c88/v8-coverage": "0.1.1",
|
|
67
66
|
"@financial-times/polyfill-useragent-normaliser": "2.0.1",
|
|
68
67
|
"@jsenv/abort": "4.2.3",
|
|
69
|
-
"@jsenv/ast": "1.1.
|
|
68
|
+
"@jsenv/ast": "1.1.3",
|
|
70
69
|
"@jsenv/babel-plugins": "1.0.6",
|
|
71
|
-
"@jsenv/filesystem": "4.1.
|
|
70
|
+
"@jsenv/filesystem": "4.1.1",
|
|
72
71
|
"@jsenv/importmap": "1.2.1",
|
|
73
72
|
"@jsenv/integrity": "0.0.1",
|
|
74
73
|
"@jsenv/log": "3.1.0",
|
|
75
74
|
"@jsenv/node-esm-resolution": "0.1.0",
|
|
76
|
-
"@jsenv/server": "
|
|
77
|
-
"@jsenv/sourcemap": "1.0.
|
|
75
|
+
"@jsenv/server": "13.0.0",
|
|
76
|
+
"@jsenv/sourcemap": "1.0.2",
|
|
78
77
|
"@jsenv/uneval": "1.6.0",
|
|
79
78
|
"@jsenv/url-meta": "7.0.0",
|
|
80
|
-
"@jsenv/urls": "1.2.
|
|
79
|
+
"@jsenv/urls": "1.2.7",
|
|
81
80
|
"@jsenv/utils": "2.0.1",
|
|
82
81
|
"acorn-import-assertions": "1.8.0",
|
|
82
|
+
"construct-style-sheets-polyfill": "3.1.0",
|
|
83
83
|
"cuid": "2.1.8",
|
|
84
84
|
"html-minifier": "4.0.0",
|
|
85
85
|
"istanbul-lib-coverage": "3.2.0",
|
|
86
86
|
"istanbul-lib-instrument": "5.2.0",
|
|
87
87
|
"istanbul-lib-report": "3.0.0",
|
|
88
|
-
"istanbul-reports": "3.1.
|
|
88
|
+
"istanbul-reports": "3.1.5",
|
|
89
|
+
"launch-editor": "2.4.0",
|
|
89
90
|
"pidtree": "0.6.0",
|
|
90
|
-
"rollup": "2.
|
|
91
|
+
"rollup": "2.77.0",
|
|
91
92
|
"string-width": "5.1.2",
|
|
92
93
|
"strip-ansi": "7.0.1",
|
|
93
|
-
"terser": "5.14.
|
|
94
|
+
"terser": "5.14.2",
|
|
94
95
|
"v8-to-istanbul": "9.0.1",
|
|
95
96
|
"wrap-ansi": "8.0.1"
|
|
96
97
|
},
|
|
@@ -98,17 +99,16 @@
|
|
|
98
99
|
"@babel/eslint-parser": "7.18.2",
|
|
99
100
|
"@babel/plugin-syntax-import-assertions": "7.18.6",
|
|
100
101
|
"@jsenv/assert": "2.6.0",
|
|
101
|
-
"@jsenv/eslint-config": "16.1
|
|
102
|
+
"@jsenv/eslint-config": "16.2.1",
|
|
102
103
|
"@jsenv/file-size-impact": "13.0.1",
|
|
103
104
|
"@jsenv/https-local": "2.1.0",
|
|
104
105
|
"@jsenv/package-workspace": "0.4.1",
|
|
105
106
|
"@jsenv/performance-impact": "3.0.1",
|
|
106
|
-
"
|
|
107
|
-
"eslint": "
|
|
108
|
-
"eslint-plugin-html": "6.2.0",
|
|
107
|
+
"eslint": "8.20.0",
|
|
108
|
+
"eslint-plugin-html": "7.0.0",
|
|
109
109
|
"eslint-plugin-import": "2.26.0",
|
|
110
110
|
"eslint-plugin-react": "7.30.1",
|
|
111
|
-
"playwright": "1.23.
|
|
111
|
+
"playwright": "1.23.4",
|
|
112
112
|
"prettier": "2.7.1"
|
|
113
113
|
}
|
|
114
114
|
}
|
package/{README.md → readme.md}
RENAMED
|
@@ -1,21 +1,32 @@
|
|
|
1
1
|
# @jsenv/core [](https://www.npmjs.com/package/@jsenv/core)
|
|
2
2
|
|
|
3
|
-
Jsenv was first created to write tests that could be executed in different runtimes.
|
|
3
|
+
Jsenv was first created to write tests that could be executed in different runtimes.
|
|
4
|
+
It has naturally evolved to cover the core needs of a JavaScript project: developement, testing and building for production.
|
|
4
5
|
|
|
5
|
-
- :exploding_head:
|
|
6
|
-
- :
|
|
7
|
-
- :relieved: Same dev experience for source and test files
|
|
6
|
+
- :exploding_head: Execute HTML files as tests
|
|
7
|
+
- :sparkles: A single tool for the whole developer experience
|
|
8
8
|
- :ok_hand: Seamless integration with standard HTML, CSS and JS
|
|
9
9
|
|
|
10
10
|
# Demo
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
The following command can be used to create a jsenv project on a machine.
|
|
13
13
|
|
|
14
14
|
```console
|
|
15
15
|
npm create jsenv@latest
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
This command prompts to choose a demo from a list.
|
|
19
|
+
Each demo contains preconfigured scripts such as:
|
|
20
|
+
|
|
21
|
+
- `npm run dev`: starts a dev server with autoreload.
|
|
22
|
+
- `npm run test`: execute test files on browsers(s) and/or Node.js.
|
|
23
|
+
- `npm run build`: generate files optimized for production.
|
|
24
|
+
|
|
25
|
+
> **Info**
|
|
26
|
+
> Executing "npm install" in web demos can take time.
|
|
27
|
+
> It is because in these demos tests are runned in headless browsers that needs to be installed first.
|
|
28
|
+
|
|
29
|
+
See also [packages/create-jsenv](./packages/create-jsenv).
|
|
19
30
|
|
|
20
31
|
# Installation
|
|
21
32
|
|
|
@@ -23,7 +34,7 @@ npm create jsenv@latest
|
|
|
23
34
|
npm install --save-dev @jsenv/core
|
|
24
35
|
```
|
|
25
36
|
|
|
26
|
-
_@jsenv/core_ is tested on Mac, Windows, Linux
|
|
37
|
+
_@jsenv/core_ is tested on Mac, Windows, Linux with Node.js 18.5.0. Other operating systems and Node.js versions are not tested.
|
|
27
38
|
|
|
28
39
|
# Documentation
|
|
29
40
|
|
package/src/build/build.js
CHANGED
|
@@ -102,7 +102,7 @@ export const build = async ({
|
|
|
102
102
|
sourcemaps = false,
|
|
103
103
|
sourcemapsSourcesContent,
|
|
104
104
|
urlAnalysis = {},
|
|
105
|
-
nodeEsmResolution,
|
|
105
|
+
nodeEsmResolution = true,
|
|
106
106
|
fileSystemMagicResolution,
|
|
107
107
|
directoryReferenceAllowed,
|
|
108
108
|
transpilation = {},
|
|
@@ -228,7 +228,9 @@ build ${entryPointKeys.length} entry points`)
|
|
|
228
228
|
startLoading: (cookEntryFile) => {
|
|
229
229
|
Object.keys(entryPoints).forEach((key) => {
|
|
230
230
|
const [, entryUrlInfo] = cookEntryFile({
|
|
231
|
-
trace:
|
|
231
|
+
trace: {
|
|
232
|
+
message: `"${key}" in entryPoints parameter`,
|
|
233
|
+
},
|
|
232
234
|
type: "entry_point",
|
|
233
235
|
specifier: key,
|
|
234
236
|
})
|
|
@@ -415,8 +417,6 @@ build ${entryPointKeys.length} entry points`)
|
|
|
415
417
|
})
|
|
416
418
|
const postBuildRedirections = {}
|
|
417
419
|
const finalGraph = createUrlGraph()
|
|
418
|
-
const optimizeUrlContentHooks =
|
|
419
|
-
rawGraphKitchen.pluginController.addHook("optimizeUrlContent")
|
|
420
420
|
const finalGraphKitchen = createKitchen({
|
|
421
421
|
logger,
|
|
422
422
|
rootDirectoryUrl,
|
|
@@ -692,19 +692,17 @@ build ${entryPointKeys.length} entry points`)
|
|
|
692
692
|
name: "jsenv:optimize",
|
|
693
693
|
appliesDuring: "build",
|
|
694
694
|
finalizeUrlContent: async (urlInfo, context) => {
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
)
|
|
707
|
-
}
|
|
695
|
+
await rawGraphKitchen.pluginController.callAsyncHooks(
|
|
696
|
+
"optimizeUrlContent",
|
|
697
|
+
urlInfo,
|
|
698
|
+
context,
|
|
699
|
+
async (optimizeReturnValue) => {
|
|
700
|
+
await finalGraphKitchen.urlInfoTransformer.applyFinalTransformations(
|
|
701
|
+
urlInfo,
|
|
702
|
+
optimizeReturnValue,
|
|
703
|
+
)
|
|
704
|
+
},
|
|
705
|
+
)
|
|
708
706
|
},
|
|
709
707
|
},
|
|
710
708
|
],
|
|
@@ -722,7 +720,7 @@ build ${entryPointKeys.length} entry points`)
|
|
|
722
720
|
startLoading: (cookEntryFile) => {
|
|
723
721
|
entryUrls.forEach((entryUrl) => {
|
|
724
722
|
const [, postBuildEntryUrlInfo] = cookEntryFile({
|
|
725
|
-
trace: `entryPoint
|
|
723
|
+
trace: { message: `entryPoint` },
|
|
726
724
|
type: "entry_point",
|
|
727
725
|
specifier: entryUrl,
|
|
728
726
|
})
|
|
@@ -17,12 +17,9 @@ import { parentPort } from "node:worker_threads"
|
|
|
17
17
|
import {
|
|
18
18
|
jsenvAccessControlAllowedHeaders,
|
|
19
19
|
startServer,
|
|
20
|
-
pluginServerTiming,
|
|
21
|
-
pluginRequestWaitingCheck,
|
|
22
|
-
pluginCORS,
|
|
23
20
|
fetchFileSystem,
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
jsenvServiceCORS,
|
|
22
|
+
jsenvServiceErrorHandler,
|
|
26
23
|
} from "@jsenv/server"
|
|
27
24
|
import {
|
|
28
25
|
assertAndNormalizeDirectoryUrl,
|
|
@@ -43,10 +40,10 @@ export const startBuildServer = async ({
|
|
|
43
40
|
http2,
|
|
44
41
|
certificate,
|
|
45
42
|
privateKey,
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
acceptAnyIp,
|
|
44
|
+
host,
|
|
48
45
|
port = 9779,
|
|
49
|
-
services =
|
|
46
|
+
services = [],
|
|
50
47
|
keepProcessAlive = true,
|
|
51
48
|
|
|
52
49
|
rootDirectoryUrl,
|
|
@@ -94,9 +91,6 @@ export const startBuildServer = async ({
|
|
|
94
91
|
)
|
|
95
92
|
})
|
|
96
93
|
}
|
|
97
|
-
if (port === 0) {
|
|
98
|
-
port = await findFreePort(port, { signal: operation.signal })
|
|
99
|
-
}
|
|
100
94
|
|
|
101
95
|
let reloadableWorker
|
|
102
96
|
if (buildServerAutoreload) {
|
|
@@ -137,12 +131,12 @@ export const startBuildServer = async ({
|
|
|
137
131
|
const messagePromise = new Promise((resolve) => {
|
|
138
132
|
worker.once("message", resolve)
|
|
139
133
|
})
|
|
140
|
-
await messagePromise
|
|
134
|
+
const origin = await messagePromise
|
|
141
135
|
// if (!keepProcessAlive) {
|
|
142
136
|
// worker.unref()
|
|
143
137
|
// }
|
|
144
138
|
return {
|
|
145
|
-
origin
|
|
139
|
+
origin,
|
|
146
140
|
stop: () => {
|
|
147
141
|
stopWatchingBuildServerFiles()
|
|
148
142
|
reloadableWorker.terminate()
|
|
@@ -168,30 +162,32 @@ export const startBuildServer = async ({
|
|
|
168
162
|
http2,
|
|
169
163
|
certificate,
|
|
170
164
|
privateKey,
|
|
171
|
-
|
|
172
|
-
|
|
165
|
+
acceptAnyIp,
|
|
166
|
+
host,
|
|
173
167
|
port,
|
|
174
|
-
|
|
175
|
-
|
|
168
|
+
serverTiming: true,
|
|
169
|
+
requestWaitingMs: 60_000,
|
|
170
|
+
services: [
|
|
171
|
+
jsenvServiceCORS({
|
|
176
172
|
accessControlAllowRequestOrigin: true,
|
|
177
173
|
accessControlAllowRequestMethod: true,
|
|
178
174
|
accessControlAllowRequestHeaders: true,
|
|
179
175
|
accessControlAllowedRequestHeaders: jsenvAccessControlAllowedHeaders,
|
|
180
176
|
accessControlAllowCredentials: true,
|
|
177
|
+
timingAllowOrigin: true,
|
|
181
178
|
}),
|
|
182
|
-
...pluginServerTiming(),
|
|
183
|
-
...pluginRequestWaitingCheck({
|
|
184
|
-
requestWaitingMs: 60 * 1000,
|
|
185
|
-
}),
|
|
186
|
-
},
|
|
187
|
-
sendErrorDetails: true,
|
|
188
|
-
requestToResponse: composeServices({
|
|
189
179
|
...services,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
180
|
+
{
|
|
181
|
+
name: "jsenv:build_files_service",
|
|
182
|
+
handleRequest: createBuildFilesService({
|
|
183
|
+
buildDirectoryUrl,
|
|
184
|
+
buildIndexPath,
|
|
185
|
+
}),
|
|
186
|
+
},
|
|
187
|
+
jsenvServiceErrorHandler({
|
|
188
|
+
sendErrorDetails: true,
|
|
193
189
|
}),
|
|
194
|
-
|
|
190
|
+
],
|
|
195
191
|
})
|
|
196
192
|
startBuildServerTask.done()
|
|
197
193
|
logger.info(``)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { parentPort } from "node:worker_threads"
|
|
2
|
-
import { findFreePort } from "@jsenv/server"
|
|
3
2
|
import {
|
|
4
3
|
assertAndNormalizeDirectoryUrl,
|
|
5
4
|
registerDirectoryLifecycle,
|
|
@@ -9,29 +8,24 @@ import { createLogger, loggerToLevels, createTaskLog } from "@jsenv/log"
|
|
|
9
8
|
import { getCallerPosition } from "@jsenv/urls"
|
|
10
9
|
|
|
11
10
|
import { createReloadableWorker } from "@jsenv/core/src/helpers/worker_reload.js"
|
|
12
|
-
import { getCorePlugins } from "@jsenv/core/src/plugins/plugins.js"
|
|
13
|
-
import { createUrlGraph } from "@jsenv/core/src/omega/url_graph.js"
|
|
14
|
-
import { createKitchen } from "@jsenv/core/src/omega/kitchen.js"
|
|
15
11
|
import { startOmegaServer } from "@jsenv/core/src/omega/omega_server.js"
|
|
16
12
|
|
|
17
|
-
import { jsenvPluginExplorer } from "./plugins/explorer/jsenv_plugin_explorer.js"
|
|
18
|
-
// import { jsenvPluginToolbar } from "./plugins/toolbar/jsenv_plugin_toolbar.js"
|
|
19
|
-
|
|
20
13
|
export const startDevServer = async ({
|
|
21
14
|
signal = new AbortController().signal,
|
|
22
15
|
handleSIGINT = true,
|
|
23
16
|
logLevel = "info",
|
|
24
17
|
omegaServerLogLevel = "warn",
|
|
25
|
-
port = 3456,
|
|
26
18
|
protocol = "http",
|
|
27
|
-
listenAnyIp,
|
|
28
19
|
// it's better to use http1 by default because it allows to get statusText in devtools
|
|
29
20
|
// which gives valuable information when there is errors
|
|
30
21
|
http2 = false,
|
|
31
22
|
certificate,
|
|
32
23
|
privateKey,
|
|
24
|
+
host,
|
|
25
|
+
port = 3456,
|
|
26
|
+
acceptAnyIp,
|
|
33
27
|
keepProcessAlive = true,
|
|
34
|
-
|
|
28
|
+
services,
|
|
35
29
|
|
|
36
30
|
rootDirectoryUrl,
|
|
37
31
|
clientFiles = {
|
|
@@ -47,7 +41,6 @@ export const startDevServer = async ({
|
|
|
47
41
|
devServerMainFile = getCallerPosition().url,
|
|
48
42
|
cooldownBetweenFileEvents,
|
|
49
43
|
|
|
50
|
-
sourcemaps = "inline",
|
|
51
44
|
// default runtimeCompat assume dev server will be request by recent browsers
|
|
52
45
|
// Used by "jsenv_plugin_node_runtime.js" to deactivate itself
|
|
53
46
|
// If dev server can be requested by Node.js to exec files
|
|
@@ -64,16 +57,19 @@ export const startDevServer = async ({
|
|
|
64
57
|
nodeEsmResolution,
|
|
65
58
|
fileSystemMagicResolution,
|
|
66
59
|
transpilation,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
60
|
+
explorer = {
|
|
61
|
+
groups: {
|
|
62
|
+
src: {
|
|
63
|
+
"./src/**/*.html": true,
|
|
64
|
+
},
|
|
65
|
+
tests: {
|
|
66
|
+
"./tests/**/*.test.html": true,
|
|
67
|
+
},
|
|
74
68
|
},
|
|
75
69
|
},
|
|
76
70
|
// toolbar = false,
|
|
71
|
+
|
|
72
|
+
sourcemaps = "inline",
|
|
77
73
|
writeGeneratedFiles = true,
|
|
78
74
|
}) => {
|
|
79
75
|
const logger = createLogger({ logLevel })
|
|
@@ -90,9 +86,6 @@ export const startDevServer = async ({
|
|
|
90
86
|
)
|
|
91
87
|
})
|
|
92
88
|
}
|
|
93
|
-
if (port === 0) {
|
|
94
|
-
port = await findFreePort(port, { signal: operation.signal })
|
|
95
|
-
}
|
|
96
89
|
|
|
97
90
|
let reloadableWorker
|
|
98
91
|
if (devServerAutoreload) {
|
|
@@ -134,12 +127,12 @@ export const startDevServer = async ({
|
|
|
134
127
|
const messagePromise = new Promise((resolve) => {
|
|
135
128
|
worker.once("message", resolve)
|
|
136
129
|
})
|
|
137
|
-
await messagePromise
|
|
130
|
+
const origin = await messagePromise
|
|
138
131
|
// if (!keepProcessAlive) {
|
|
139
132
|
// worker.unref()
|
|
140
133
|
// }
|
|
141
134
|
return {
|
|
142
|
-
origin
|
|
135
|
+
origin,
|
|
143
136
|
stop: () => {
|
|
144
137
|
stopWatchingDevServerFiles()
|
|
145
138
|
reloadableWorker.terminate()
|
|
@@ -152,82 +145,33 @@ export const startDevServer = async ({
|
|
|
152
145
|
disabled: !loggerToLevels(logger).info,
|
|
153
146
|
})
|
|
154
147
|
|
|
155
|
-
const clientFileChangeCallbackList = []
|
|
156
|
-
const clientFilesPruneCallbackList = []
|
|
157
|
-
const clientFileChangeCallback = ({ relativeUrl, event }) => {
|
|
158
|
-
const url = new URL(relativeUrl, rootDirectoryUrl).href
|
|
159
|
-
clientFileChangeCallbackList.forEach((callback) => {
|
|
160
|
-
callback({ url, event })
|
|
161
|
-
})
|
|
162
|
-
}
|
|
163
|
-
const stopWatchingClientFiles = registerDirectoryLifecycle(rootDirectoryUrl, {
|
|
164
|
-
watchPatterns: {
|
|
165
|
-
...clientFiles,
|
|
166
|
-
".jsenv/": false,
|
|
167
|
-
},
|
|
168
|
-
cooldownBetweenFileEvents,
|
|
169
|
-
keepProcessAlive: false,
|
|
170
|
-
recursive: true,
|
|
171
|
-
added: ({ relativeUrl }) => {
|
|
172
|
-
clientFileChangeCallback({ event: "added", relativeUrl })
|
|
173
|
-
},
|
|
174
|
-
updated: ({ relativeUrl }) => {
|
|
175
|
-
clientFileChangeCallback({ event: "modified", relativeUrl })
|
|
176
|
-
},
|
|
177
|
-
removed: ({ relativeUrl }) => {
|
|
178
|
-
clientFileChangeCallback({ event: "removed", relativeUrl })
|
|
179
|
-
},
|
|
180
|
-
})
|
|
181
|
-
const urlGraph = createUrlGraph({
|
|
182
|
-
clientFileChangeCallbackList,
|
|
183
|
-
clientFilesPruneCallbackList,
|
|
184
|
-
})
|
|
185
|
-
const kitchen = createKitchen({
|
|
186
|
-
signal,
|
|
187
|
-
logger,
|
|
188
|
-
rootDirectoryUrl,
|
|
189
|
-
urlGraph,
|
|
190
|
-
scenario: "dev",
|
|
191
|
-
runtimeCompat,
|
|
192
|
-
sourcemaps,
|
|
193
|
-
writeGeneratedFiles,
|
|
194
|
-
plugins: [
|
|
195
|
-
...plugins,
|
|
196
|
-
...getCorePlugins({
|
|
197
|
-
rootDirectoryUrl,
|
|
198
|
-
urlGraph,
|
|
199
|
-
scenario: "dev",
|
|
200
|
-
runtimeCompat,
|
|
201
|
-
|
|
202
|
-
urlAnalysis,
|
|
203
|
-
htmlSupervisor,
|
|
204
|
-
nodeEsmResolution,
|
|
205
|
-
fileSystemMagicResolution,
|
|
206
|
-
transpilation,
|
|
207
|
-
clientAutoreload,
|
|
208
|
-
clientFileChangeCallbackList,
|
|
209
|
-
clientFilesPruneCallbackList,
|
|
210
|
-
}),
|
|
211
|
-
jsenvPluginExplorer({
|
|
212
|
-
groups: explorerGroups,
|
|
213
|
-
}),
|
|
214
|
-
// ...(toolbar ? [jsenvPluginToolbar(toolbar)] : []),
|
|
215
|
-
],
|
|
216
|
-
})
|
|
217
148
|
const server = await startOmegaServer({
|
|
218
149
|
logLevel: omegaServerLogLevel,
|
|
219
150
|
keepProcessAlive,
|
|
220
|
-
|
|
221
|
-
port,
|
|
151
|
+
acceptAnyIp,
|
|
222
152
|
protocol,
|
|
223
153
|
http2,
|
|
224
154
|
certificate,
|
|
225
155
|
privateKey,
|
|
156
|
+
host,
|
|
157
|
+
port,
|
|
158
|
+
services,
|
|
159
|
+
|
|
226
160
|
rootDirectoryUrl,
|
|
227
|
-
urlGraph,
|
|
228
|
-
kitchen,
|
|
229
161
|
scenario: "dev",
|
|
230
|
-
|
|
162
|
+
runtimeCompat,
|
|
163
|
+
plugins,
|
|
164
|
+
urlAnalysis,
|
|
165
|
+
htmlSupervisor,
|
|
166
|
+
nodeEsmResolution,
|
|
167
|
+
fileSystemMagicResolution,
|
|
168
|
+
transpilation,
|
|
169
|
+
clientFiles,
|
|
170
|
+
clientAutoreload,
|
|
171
|
+
cooldownBetweenFileEvents,
|
|
172
|
+
explorer,
|
|
173
|
+
sourcemaps,
|
|
174
|
+
writeGeneratedFiles,
|
|
231
175
|
})
|
|
232
176
|
startDevServerTask.done()
|
|
233
177
|
logger.info(``)
|
|
@@ -235,18 +179,12 @@ export const startDevServer = async ({
|
|
|
235
179
|
logger.info(`- ${server.origins[key]}`)
|
|
236
180
|
})
|
|
237
181
|
logger.info(``)
|
|
238
|
-
server.addEffect(() => {
|
|
239
|
-
return () => {
|
|
240
|
-
kitchen.pluginController.callHooks("destroy", {})
|
|
241
|
-
}
|
|
242
|
-
})
|
|
243
182
|
if (reloadableWorker && reloadableWorker.isWorker) {
|
|
244
183
|
parentPort.postMessage(server.origin)
|
|
245
184
|
}
|
|
246
185
|
return {
|
|
247
186
|
origin: server.origin,
|
|
248
187
|
stop: () => {
|
|
249
|
-
stopWatchingClientFiles()
|
|
250
188
|
server.stop()
|
|
251
189
|
},
|
|
252
190
|
}
|
package/src/execute/execute.js
CHANGED
|
@@ -2,11 +2,8 @@ import { Abort, raceProcessTeardownEvents } from "@jsenv/abort"
|
|
|
2
2
|
|
|
3
3
|
import { assertAndNormalizeDirectoryUrl } from "@jsenv/filesystem"
|
|
4
4
|
import { createLogger } from "@jsenv/log"
|
|
5
|
-
import { getCorePlugins } from "@jsenv/core/src/plugins/plugins.js"
|
|
6
|
-
import { createUrlGraph } from "@jsenv/core/src/omega/url_graph.js"
|
|
7
|
-
import { createKitchen } from "@jsenv/core/src/omega/kitchen.js"
|
|
8
|
-
import { startOmegaServer } from "@jsenv/core/src/omega/omega_server.js"
|
|
9
5
|
|
|
6
|
+
import { startOmegaServer } from "@jsenv/core/src/omega/omega_server.js"
|
|
10
7
|
import { run } from "./run.js"
|
|
11
8
|
|
|
12
9
|
export const execute = async ({
|
|
@@ -19,6 +16,7 @@ export const execute = async ({
|
|
|
19
16
|
allocatedMs,
|
|
20
17
|
mirrorConsole = true,
|
|
21
18
|
keepRunning = false,
|
|
19
|
+
services,
|
|
22
20
|
collectConsole,
|
|
23
21
|
collectCoverage,
|
|
24
22
|
coverageTempDirectoryUrl,
|
|
@@ -27,12 +25,12 @@ export const execute = async ({
|
|
|
27
25
|
runtimeParams,
|
|
28
26
|
|
|
29
27
|
scenario = "dev",
|
|
30
|
-
sourcemaps = "inline",
|
|
31
28
|
plugins = [],
|
|
32
29
|
nodeEsmResolution,
|
|
33
30
|
fileSystemMagicResolution,
|
|
34
31
|
transpilation,
|
|
35
32
|
htmlSupervisor = true,
|
|
33
|
+
sourcemaps = "inline",
|
|
36
34
|
writeGeneratedFiles = false,
|
|
37
35
|
|
|
38
36
|
port,
|
|
@@ -65,45 +63,29 @@ export const execute = async ({
|
|
|
65
63
|
...runtimeParams,
|
|
66
64
|
}
|
|
67
65
|
if (runtime.needsServer) {
|
|
68
|
-
const urlGraph = createUrlGraph()
|
|
69
|
-
const runtimeCompat = { [runtime.name]: runtime.version }
|
|
70
|
-
const kitchen = createKitchen({
|
|
71
|
-
signal,
|
|
72
|
-
logger,
|
|
73
|
-
rootDirectoryUrl,
|
|
74
|
-
urlGraph,
|
|
75
|
-
scenario,
|
|
76
|
-
sourcemaps,
|
|
77
|
-
runtimeCompat,
|
|
78
|
-
writeGeneratedFiles,
|
|
79
|
-
plugins: [
|
|
80
|
-
...plugins,
|
|
81
|
-
...getCorePlugins({
|
|
82
|
-
rootDirectoryUrl,
|
|
83
|
-
urlGraph,
|
|
84
|
-
scenario,
|
|
85
|
-
runtimeCompat,
|
|
86
|
-
|
|
87
|
-
htmlSupervisor,
|
|
88
|
-
nodeEsmResolution,
|
|
89
|
-
fileSystemMagicResolution,
|
|
90
|
-
transpilation,
|
|
91
|
-
}),
|
|
92
|
-
],
|
|
93
|
-
})
|
|
94
66
|
const server = await startOmegaServer({
|
|
95
67
|
signal: executeOperation.signal,
|
|
96
68
|
logLevel: "warn",
|
|
97
|
-
rootDirectoryUrl,
|
|
98
|
-
urlGraph,
|
|
99
|
-
kitchen,
|
|
100
|
-
scenario,
|
|
101
69
|
keepProcessAlive: false,
|
|
70
|
+
services,
|
|
102
71
|
port,
|
|
103
72
|
protocol,
|
|
104
73
|
http2,
|
|
105
74
|
certificate,
|
|
106
75
|
privateKey,
|
|
76
|
+
|
|
77
|
+
rootDirectoryUrl,
|
|
78
|
+
scenario,
|
|
79
|
+
runtimeCompat: { [runtime.name]: runtime.version },
|
|
80
|
+
|
|
81
|
+
plugins,
|
|
82
|
+
|
|
83
|
+
htmlSupervisor,
|
|
84
|
+
nodeEsmResolution,
|
|
85
|
+
fileSystemMagicResolution,
|
|
86
|
+
transpilation,
|
|
87
|
+
sourcemaps,
|
|
88
|
+
writeGeneratedFiles,
|
|
107
89
|
})
|
|
108
90
|
executeOperation.addEndCallback(async () => {
|
|
109
91
|
await server.stop("execution done")
|