@decohere/flux 0.0.1-dev.88 → 0.0.1-dev.9

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 (39) hide show
  1. package/commonjs/src/flux.command.js +1 -3
  2. package/commonjs/src/flux.module.js +2 -6
  3. package/commonjs/src/hot-reload-server.js +194 -268
  4. package/commonjs/src/index.js +1 -35
  5. package/commonjs/src/serve.action.js +4 -77
  6. package/commonjs/src/serve.command.js +2 -32
  7. package/es6/src/flux.command.js +1 -3
  8. package/es6/src/flux.module.js +2 -6
  9. package/es6/src/hot-reload-server.js +151 -249
  10. package/es6/src/index.js +2 -6
  11. package/es6/src/serve.action.js +4 -73
  12. package/es6/src/serve.command.js +2 -32
  13. package/package.json +6 -7
  14. package/types/src/flux.module.d.ts +0 -2
  15. package/types/src/hot-reload-server.d.ts +22 -45
  16. package/types/src/index.d.ts +1 -8
  17. package/types/src/serve.action.d.ts +1 -11
  18. package/types/src/serve.command.d.ts +0 -5
  19. package/commonjs/src/deferred-script-runner.js +0 -58
  20. package/commonjs/src/flux.js +0 -58
  21. package/commonjs/src/rewrite-serve-specifier.js +0 -46
  22. package/commonjs/src/run.action.js +0 -49
  23. package/commonjs/src/run.command.js +0 -67
  24. package/commonjs/src/slice-serve.js +0 -132
  25. package/commonjs/src/source-module-loader.js +0 -216
  26. package/es6/src/deferred-script-runner.js +0 -48
  27. package/es6/src/flux.js +0 -43
  28. package/es6/src/rewrite-serve-specifier.js +0 -40
  29. package/es6/src/run.action.js +0 -40
  30. package/es6/src/run.command.js +0 -57
  31. package/es6/src/slice-serve.js +0 -107
  32. package/es6/src/source-module-loader.js +0 -160
  33. package/types/src/deferred-script-runner.d.ts +0 -18
  34. package/types/src/flux.d.ts +0 -43
  35. package/types/src/rewrite-serve-specifier.d.ts +0 -13
  36. package/types/src/run.action.d.ts +0 -15
  37. package/types/src/run.command.d.ts +0 -11
  38. package/types/src/slice-serve.d.ts +0 -52
  39. package/types/src/source-module-loader.d.ts +0 -49
package/es6/src/index.js CHANGED
@@ -1,8 +1,4 @@
1
- export { DeferredScriptRunner } from "./deferred-script-runner.js";
2
- export { flux } from "./flux.js";
3
1
  export { FluxModule } from "./flux.module.js";
4
- export { DEFAULT_REBOOT_DEBOUNCE_MS, HotReloadServer } from "./hot-reload-server.js";
5
- export { classifySliceProject, classifySliceProjects, normalizeSlicePrefix, projectsInSlice, projectsInSlices, resolveDeferScript } from "./slice-serve.js";
6
- export { SourceModuleLoader } from "./source-module-loader.js";
2
+ export { HotReloadServer } from "./hot-reload-server.js";
7
3
 
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IERlZmVycmVkU2NyaXB0UnVubmVyIH0gZnJvbSBcIi4vZGVmZXJyZWQtc2NyaXB0LXJ1bm5lci5qc1wiO1xuZXhwb3J0IHR5cGUgeyBGbHV4UnVuT3B0aW9ucywgRmx1eFNlcnZlT3B0aW9ucyB9IGZyb20gXCIuL2ZsdXguanNcIjtcbmV4cG9ydCB7IGZsdXggfSBmcm9tIFwiLi9mbHV4LmpzXCI7XG5leHBvcnQgeyBGbHV4TW9kdWxlIH0gZnJvbSBcIi4vZmx1eC5tb2R1bGUuanNcIjtcbmV4cG9ydCB0eXBlIHsgSG90UmVsb2FkU2VydmVyT3B0aW9ucyB9IGZyb20gXCIuL2hvdC1yZWxvYWQtc2VydmVyLmpzXCI7XG5leHBvcnQgeyBERUZBVUxUX1JFQk9PVF9ERUJPVU5DRV9NUywgSG90UmVsb2FkU2VydmVyIH0gZnJvbSBcIi4vaG90LXJlbG9hZC1zZXJ2ZXIuanNcIjtcbmV4cG9ydCB0eXBlIHsgUnVuT3B0aW9ucyB9IGZyb20gXCIuL3J1bi5hY3Rpb24uanNcIjtcbmV4cG9ydCB0eXBlIHsgU2VydmVPcHRpb25zIH0gZnJvbSBcIi4vc2VydmUuYWN0aW9uLmpzXCI7XG5leHBvcnQge1xuXHR0eXBlIENsYXNzaWZpZWRTbGljZSxcblx0Y2xhc3NpZnlTbGljZVByb2plY3QsXG5cdGNsYXNzaWZ5U2xpY2VQcm9qZWN0cyxcblx0bm9ybWFsaXplU2xpY2VQcmVmaXgsXG5cdHByb2plY3RzSW5TbGljZSxcblx0cHJvamVjdHNJblNsaWNlcyxcblx0cmVzb2x2ZURlZmVyU2NyaXB0LFxuXHR0eXBlIFNsaWNlS2luZCxcblx0dHlwZSBTbGljZVByb2plY3RWaWV3LFxufSBmcm9tIFwiLi9zbGljZS1zZXJ2ZS5qc1wiO1xuZXhwb3J0IHR5cGUgeyBTb3VyY2VNb2R1bGVMb2FkZXJPcHRpb25zIH0gZnJvbSBcIi4vc291cmNlLW1vZHVsZS1sb2FkZXIuanNcIjtcbmV4cG9ydCB7IFNvdXJjZU1vZHVsZUxvYWRlciB9IGZyb20gXCIuL3NvdXJjZS1tb2R1bGUtbG9hZGVyLmpzXCI7XG4iXSwibmFtZXMiOlsiRGVmZXJyZWRTY3JpcHRSdW5uZXIiLCJmbHV4IiwiRmx1eE1vZHVsZSIsIkRFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TIiwiSG90UmVsb2FkU2VydmVyIiwiY2xhc3NpZnlTbGljZVByb2plY3QiLCJjbGFzc2lmeVNsaWNlUHJvamVjdHMiLCJub3JtYWxpemVTbGljZVByZWZpeCIsInByb2plY3RzSW5TbGljZSIsInByb2plY3RzSW5TbGljZXMiLCJyZXNvbHZlRGVmZXJTY3JpcHQiLCJTb3VyY2VNb2R1bGVMb2FkZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLG9CQUFvQixRQUFRLDhCQUE4QjtBQUVuRSxTQUFTQyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxTQUFTQyxVQUFVLFFBQVEsbUJBQW1CO0FBRTlDLFNBQVNDLDBCQUEwQixFQUFFQyxlQUFlLFFBQVEseUJBQXlCO0FBR3JGLFNBRUNDLG9CQUFvQixFQUNwQkMscUJBQXFCLEVBQ3JCQyxvQkFBb0IsRUFDcEJDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxrQkFBa0IsUUFHWixtQkFBbUI7QUFFMUIsU0FBU0Msa0JBQWtCLFFBQVEsNEJBQTRCIn0=
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZsdXhNb2R1bGUgfSBmcm9tIFwiLi9mbHV4Lm1vZHVsZS5qc1wiO1xuZXhwb3J0IHR5cGUgeyBIb3RSZWxvYWRTZXJ2ZXJPcHRpb25zIH0gZnJvbSBcIi4vaG90LXJlbG9hZC1zZXJ2ZXIuanNcIjtcbmV4cG9ydCB7IEhvdFJlbG9hZFNlcnZlciB9IGZyb20gXCIuL2hvdC1yZWxvYWQtc2VydmVyLmpzXCI7XG5leHBvcnQgdHlwZSB7IFNlcnZlT3B0aW9ucyB9IGZyb20gXCIuL3NlcnZlLmFjdGlvbi5qc1wiO1xuIl0sIm5hbWVzIjpbIkZsdXhNb2R1bGUiLCJIb3RSZWxvYWRTZXJ2ZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsUUFBUSxtQkFBbUI7QUFFOUMsU0FBU0MsZUFBZSxRQUFRLHlCQUF5QiJ9
@@ -7,104 +7,35 @@ function _ts_decorate(decorators, target, key, desc) {
7
7
  function _ts_metadata(k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  }
10
- import path from "node:path";
11
10
  import { injectable } from "@decohere/crucible/decorators";
12
11
  // biome-ignore lint/style/useImportType: <DI>
13
12
  import { Workspace } from "@decohere/mesh";
14
13
  import { ActionResponse } from "@decohere/nexus/cli";
15
- import { scribe } from "@decohere/scribe";
16
- // biome-ignore lint/style/useImportType: <DI>
17
- import { DeferredScriptRunner } from "./deferred-script-runner.js";
18
14
  // biome-ignore lint/style/useImportType: <DI>
19
15
  import { HotReloadServer } from "./hot-reload-server.js";
20
- import { classifySliceProjects, resolveDeferScript } from "./slice-serve.js";
21
16
  export class ServeAction {
22
17
  server;
23
18
  workspace;
24
- deferredScripts;
25
- logger = scribe.logger(ServeAction.name);
26
- constructor(server, workspace, deferredScripts){
19
+ constructor(server, workspace){
27
20
  this.server = server;
28
21
  this.workspace = workspace;
29
- this.deferredScripts = deferredScripts;
30
22
  }
31
23
  async run(options) {
32
- const slices = (options.slices ?? []).filter((s)=>s !== "");
33
- if (slices.length > 0 && options.project != null) {
34
- throw new Error("Use either directory slices or --project, not both");
35
- }
36
- if (slices.length > 0) {
37
- return this.runSlices(options, slices);
38
- }
39
24
  await this.server.start({
40
25
  workspace: this.workspace,
41
26
  buildConfig: options.configuration,
42
- project: options.project,
43
- rebootDebounceMs: options.rebootDebounceMs
27
+ project: options.project
44
28
  });
45
29
  return ActionResponse.Blocking(ServeAction.name);
46
30
  }
47
- async runSlices(options, slices) {
48
- const views = await this.toSliceViews(options.configuration);
49
- const classified = classifySliceProjects(views, slices);
50
- const label = slices.join(" ");
51
- for (const skipped of classified.skip){
52
- this.logger.info(`skipped ${skipped.projectDirectory} — library (no Flux entry / scripts)`);
53
- }
54
- if (classified.flux.length === 0 && classified.defer.length === 0) {
55
- throw new Error(`No runnable projects in slice(s) "${label}" (need Flux main.ts apps and/or package scripts.dev/serve)`);
56
- }
57
- const workspaceRoot = path.resolve(this.workspace.rootDir ?? process.cwd());
58
- for (const deferred of classified.defer){
59
- const script = resolveDeferScript(deferred.scripts);
60
- if (script == null) continue;
61
- const project = this.findProject(options.configuration, deferred.name);
62
- this.deferredScripts.start({
63
- label: deferred.projectDirectory,
64
- cwd: project.projectRoot,
65
- script,
66
- workspaceRoot
67
- });
68
- }
69
- if (classified.flux.length > 0) {
70
- await this.server.start({
71
- workspace: this.workspace,
72
- buildConfig: options.configuration,
73
- projects: classified.flux.map((p)=>p.name),
74
- rebootDebounceMs: options.rebootDebounceMs
75
- });
76
- }
77
- return ActionResponse.Blocking(ServeAction.name);
78
- }
79
- async toSliceViews(configuration) {
80
- const projects = this.workspace.getProjects(configuration);
81
- return Promise.all(projects.map((project)=>this.toSliceView(project)));
82
- }
83
- async toSliceView(project) {
84
- const pkg = await project.getPackageJson();
85
- return {
86
- name: project.name,
87
- projectDirectory: project.projectDirectory.replaceAll("\\", "/"),
88
- main: pkg.main ?? "src/index.ts",
89
- scripts: pkg.scripts ?? {}
90
- };
91
- }
92
- findProject(configuration, name) {
93
- const found = this.workspace.getProjects(configuration).find((p)=>p.name === name);
94
- if (found == null) {
95
- throw new Error(`Project "${name}" not found in workspace`);
96
- }
97
- return found;
98
- }
99
31
  }
100
32
  ServeAction = _ts_decorate([
101
33
  injectable(),
102
34
  _ts_metadata("design:type", Function),
103
35
  _ts_metadata("design:paramtypes", [
104
36
  typeof HotReloadServer === "undefined" ? Object : HotReloadServer,
105
- typeof Workspace === "undefined" ? Object : Workspace,
106
- typeof DeferredScriptRunner === "undefined" ? Object : DeferredScriptRunner
37
+ typeof Workspace === "undefined" ? Object : Workspace
107
38
  ])
108
39
  ], ServeAction);
109
40
 
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyB0eXBlIFByb2plY3QsIFdvcmtzcGFjZSB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgdHlwZSBBY3Rpb24sIEFjdGlvblJlc3BvbnNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IHR5cGUgTG9nZ2VyLCBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgRGVmZXJyZWRTY3JpcHRSdW5uZXIgfSBmcm9tIFwiLi9kZWZlcnJlZC1zY3JpcHQtcnVubmVyLmpzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBIb3RSZWxvYWRTZXJ2ZXIgfSBmcm9tIFwiLi9ob3QtcmVsb2FkLXNlcnZlci5qc1wiO1xuaW1wb3J0IHtcblx0Y2xhc3NpZnlTbGljZVByb2plY3RzLFxuXHRyZXNvbHZlRGVmZXJTY3JpcHQsXG5cdHR5cGUgU2xpY2VQcm9qZWN0Vmlldyxcbn0gZnJvbSBcIi4vc2xpY2Utc2VydmUuanNcIjtcblxuZXhwb3J0IHR5cGUgU2VydmVPcHRpb25zID0ge1xuXHRjb25maWd1cmF0aW9uOiBzdHJpbmc7XG5cdHByb2plY3Q/OiBzdHJpbmc7XG5cdC8qKiBPbmUgb3IgbW9yZSBtb2R1bGUgZGlyZWN0b3J5IHRva2VucyAoYGZ1bmRpbmdgLCBgc2hlbGxgLCBgcHJvamVjdHMvZnVuZGluZ2ApLiAqL1xuXHRzbGljZXM/OiBzdHJpbmdbXTtcblx0cmVib290RGVib3VuY2VNcz86IG51bWJlcjtcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbjxTZXJ2ZU9wdGlvbnM+IHtcblx0cHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlciA9IHNjcmliZS5sb2dnZXIoU2VydmVBY3Rpb24ubmFtZSk7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgc2VydmVyOiBIb3RSZWxvYWRTZXJ2ZXIsXG5cdFx0cHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IFdvcmtzcGFjZSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IGRlZmVycmVkU2NyaXB0czogRGVmZXJyZWRTY3JpcHRSdW5uZXIsXG5cdCkge31cblxuXHRwdWJsaWMgYXN5bmMgcnVuKG9wdGlvbnM6IFNlcnZlT3B0aW9ucyk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0XHRjb25zdCBzbGljZXMgPSAob3B0aW9ucy5zbGljZXMgPz8gW10pLmZpbHRlcigocykgPT4gcyAhPT0gXCJcIik7XG5cdFx0aWYgKHNsaWNlcy5sZW5ndGggPiAwICYmIG9wdGlvbnMucHJvamVjdCAhPSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVc2UgZWl0aGVyIGRpcmVjdG9yeSBzbGljZXMgb3IgLS1wcm9qZWN0LCBub3QgYm90aFwiKTtcblx0XHR9XG5cblx0XHRpZiAoc2xpY2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0aGlzLnJ1blNsaWNlcyhvcHRpb25zLCBzbGljZXMpO1xuXHRcdH1cblxuXHRcdGF3YWl0IHRoaXMuc2VydmVyLnN0YXJ0KHtcblx0XHRcdHdvcmtzcGFjZTogdGhpcy53b3Jrc3BhY2UsXG5cdFx0XHRidWlsZENvbmZpZzogb3B0aW9ucy5jb25maWd1cmF0aW9uLFxuXHRcdFx0cHJvamVjdDogb3B0aW9ucy5wcm9qZWN0LFxuXHRcdFx0cmVib290RGVib3VuY2VNczogb3B0aW9ucy5yZWJvb3REZWJvdW5jZU1zLFxuXHRcdH0pO1xuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5CbG9ja2luZyhTZXJ2ZUFjdGlvbi5uYW1lKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcnVuU2xpY2VzKG9wdGlvbnM6IFNlcnZlT3B0aW9ucywgc2xpY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0XHRjb25zdCB2aWV3cyA9IGF3YWl0IHRoaXMudG9TbGljZVZpZXdzKG9wdGlvbnMuY29uZmlndXJhdGlvbik7XG5cdFx0Y29uc3QgY2xhc3NpZmllZCA9IGNsYXNzaWZ5U2xpY2VQcm9qZWN0cyh2aWV3cywgc2xpY2VzKTtcblx0XHRjb25zdCBsYWJlbCA9IHNsaWNlcy5qb2luKFwiIFwiKTtcblxuXHRcdGZvciAoY29uc3Qgc2tpcHBlZCBvZiBjbGFzc2lmaWVkLnNraXApIHtcblx0XHRcdHRoaXMubG9nZ2VyLmluZm8oXG5cdFx0XHRcdGBza2lwcGVkICR7c2tpcHBlZC5wcm9qZWN0RGlyZWN0b3J5fSDigJQgbGlicmFyeSAobm8gRmx1eCBlbnRyeSAvIHNjcmlwdHMpYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGNsYXNzaWZpZWQuZmx1eC5sZW5ndGggPT09IDAgJiYgY2xhc3NpZmllZC5kZWZlci5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YE5vIHJ1bm5hYmxlIHByb2plY3RzIGluIHNsaWNlKHMpIFwiJHtsYWJlbH1cIiAobmVlZCBGbHV4IG1haW4udHMgYXBwcyBhbmQvb3IgcGFja2FnZSBzY3JpcHRzLmRldi9zZXJ2ZSlgLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCB3b3Jrc3BhY2VSb290ID0gcGF0aC5yZXNvbHZlKHRoaXMud29ya3NwYWNlLnJvb3REaXIgPz8gcHJvY2Vzcy5jd2QoKSk7XG5cblx0XHRmb3IgKGNvbnN0IGRlZmVycmVkIG9mIGNsYXNzaWZpZWQuZGVmZXIpIHtcblx0XHRcdGNvbnN0IHNjcmlwdCA9IHJlc29sdmVEZWZlclNjcmlwdChkZWZlcnJlZC5zY3JpcHRzKTtcblx0XHRcdGlmIChzY3JpcHQgPT0gbnVsbCkgY29udGludWU7XG5cdFx0XHRjb25zdCBwcm9qZWN0ID0gdGhpcy5maW5kUHJvamVjdChvcHRpb25zLmNvbmZpZ3VyYXRpb24sIGRlZmVycmVkLm5hbWUpO1xuXHRcdFx0dGhpcy5kZWZlcnJlZFNjcmlwdHMuc3RhcnQoe1xuXHRcdFx0XHRsYWJlbDogZGVmZXJyZWQucHJvamVjdERpcmVjdG9yeSxcblx0XHRcdFx0Y3dkOiBwcm9qZWN0LnByb2plY3RSb290LFxuXHRcdFx0XHRzY3JpcHQsXG5cdFx0XHRcdHdvcmtzcGFjZVJvb3QsXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoY2xhc3NpZmllZC5mbHV4Lmxlbmd0aCA+IDApIHtcblx0XHRcdGF3YWl0IHRoaXMuc2VydmVyLnN0YXJ0KHtcblx0XHRcdFx0d29ya3NwYWNlOiB0aGlzLndvcmtzcGFjZSxcblx0XHRcdFx0YnVpbGRDb25maWc6IG9wdGlvbnMuY29uZmlndXJhdGlvbixcblx0XHRcdFx0cHJvamVjdHM6IGNsYXNzaWZpZWQuZmx1eC5tYXAoKHApID0+IHAubmFtZSksXG5cdFx0XHRcdHJlYm9vdERlYm91bmNlTXM6IG9wdGlvbnMucmVib290RGVib3VuY2VNcyxcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5CbG9ja2luZyhTZXJ2ZUFjdGlvbi5uYW1lKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgdG9TbGljZVZpZXdzKGNvbmZpZ3VyYXRpb246IHN0cmluZyk6IFByb21pc2U8U2xpY2VQcm9qZWN0Vmlld1tdPiB7XG5cdFx0Y29uc3QgcHJvamVjdHMgPSB0aGlzLndvcmtzcGFjZS5nZXRQcm9qZWN0cyhjb25maWd1cmF0aW9uKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvamVjdHMubWFwKChwcm9qZWN0KSA9PiB0aGlzLnRvU2xpY2VWaWV3KHByb2plY3QpKSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHRvU2xpY2VWaWV3KHByb2plY3Q6IFByb2plY3QpOiBQcm9taXNlPFNsaWNlUHJvamVjdFZpZXc+IHtcblx0XHRjb25zdCBwa2cgPSBhd2FpdCBwcm9qZWN0LmdldFBhY2thZ2VKc29uKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IHByb2plY3QubmFtZSxcblx0XHRcdHByb2plY3REaXJlY3Rvcnk6IHByb2plY3QucHJvamVjdERpcmVjdG9yeS5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIiksXG5cdFx0XHRtYWluOiBwa2cubWFpbiA/PyBcInNyYy9pbmRleC50c1wiLFxuXHRcdFx0c2NyaXB0czogcGtnLnNjcmlwdHMgPz8ge30sXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZmluZFByb2plY3QoY29uZmlndXJhdGlvbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9qZWN0IHtcblx0XHRjb25zdCBmb3VuZCA9IHRoaXMud29ya3NwYWNlLmdldFByb2plY3RzKGNvbmZpZ3VyYXRpb24pLmZpbmQoKHApID0+IHAubmFtZSA9PT0gbmFtZSk7XG5cdFx0aWYgKGZvdW5kID09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgUHJvamVjdCBcIiR7bmFtZX1cIiBub3QgZm91bmQgaW4gd29ya3NwYWNlYCk7XG5cdFx0fVxuXHRcdHJldHVybiBmb3VuZDtcblx0fVxufVxuIl0sIm5hbWVzIjpbInBhdGgiLCJpbmplY3RhYmxlIiwiV29ya3NwYWNlIiwiQWN0aW9uUmVzcG9uc2UiLCJzY3JpYmUiLCJEZWZlcnJlZFNjcmlwdFJ1bm5lciIsIkhvdFJlbG9hZFNlcnZlciIsImNsYXNzaWZ5U2xpY2VQcm9qZWN0cyIsInJlc29sdmVEZWZlclNjcmlwdCIsIlNlcnZlQWN0aW9uIiwibG9nZ2VyIiwibmFtZSIsInNlcnZlciIsIndvcmtzcGFjZSIsImRlZmVycmVkU2NyaXB0cyIsInJ1biIsIm9wdGlvbnMiLCJzbGljZXMiLCJmaWx0ZXIiLCJzIiwibGVuZ3RoIiwicHJvamVjdCIsIkVycm9yIiwicnVuU2xpY2VzIiwic3RhcnQiLCJidWlsZENvbmZpZyIsImNvbmZpZ3VyYXRpb24iLCJyZWJvb3REZWJvdW5jZU1zIiwiQmxvY2tpbmciLCJ2aWV3cyIsInRvU2xpY2VWaWV3cyIsImNsYXNzaWZpZWQiLCJsYWJlbCIsImpvaW4iLCJza2lwcGVkIiwic2tpcCIsImluZm8iLCJwcm9qZWN0RGlyZWN0b3J5IiwiZmx1eCIsImRlZmVyIiwid29ya3NwYWNlUm9vdCIsInJlc29sdmUiLCJyb290RGlyIiwicHJvY2VzcyIsImN3ZCIsImRlZmVycmVkIiwic2NyaXB0Iiwic2NyaXB0cyIsImZpbmRQcm9qZWN0IiwicHJvamVjdFJvb3QiLCJwcm9qZWN0cyIsIm1hcCIsInAiLCJnZXRQcm9qZWN0cyIsIlByb21pc2UiLCJhbGwiLCJ0b1NsaWNlVmlldyIsInBrZyIsImdldFBhY2thZ2VKc29uIiwicmVwbGFjZUFsbCIsIm1haW4iLCJmb3VuZCIsImZpbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU9BLFVBQVUsWUFBWTtBQUM3QixTQUFTQyxVQUFVLFFBQVEsZ0NBQWdDO0FBQzNELDhDQUE4QztBQUM5QyxTQUF1QkMsU0FBUyxRQUFRLGlCQUFpQjtBQUN6RCxTQUFzQkMsY0FBYyxRQUFRLHNCQUFzQjtBQUNsRSxTQUFzQkMsTUFBTSxRQUFRLG1CQUFtQjtBQUN2RCw4Q0FBOEM7QUFDOUMsU0FBU0Msb0JBQW9CLFFBQVEsOEJBQThCO0FBQ25FLDhDQUE4QztBQUM5QyxTQUFTQyxlQUFlLFFBQVEseUJBQXlCO0FBQ3pELFNBQ0NDLHFCQUFxQixFQUNyQkMsa0JBQWtCLFFBRVosbUJBQW1CO0FBVzFCLE9BQU8sTUFBTUM7Ozs7SUFDS0MsU0FBaUJOLE9BQU9NLE1BQU0sQ0FBQ0QsWUFBWUUsSUFBSSxFQUFFO0lBRWxFLFlBQ0MsQUFBaUJDLE1BQXVCLEVBQ3hDLEFBQWlCQyxTQUFvQixFQUNyQyxBQUFpQkMsZUFBcUMsQ0FDckQ7YUFIZ0JGLFNBQUFBO2FBQ0FDLFlBQUFBO2FBQ0FDLGtCQUFBQTtJQUNmO0lBRUgsTUFBYUMsSUFBSUMsT0FBcUIsRUFBMkI7UUFDaEUsTUFBTUMsU0FBUyxBQUFDRCxDQUFBQSxRQUFRQyxNQUFNLElBQUksRUFBRSxBQUFELEVBQUdDLE1BQU0sQ0FBQyxDQUFDQyxJQUFNQSxNQUFNO1FBQzFELElBQUlGLE9BQU9HLE1BQU0sR0FBRyxLQUFLSixRQUFRSyxPQUFPLElBQUksTUFBTTtZQUNqRCxNQUFNLElBQUlDLE1BQU07UUFDakI7UUFFQSxJQUFJTCxPQUFPRyxNQUFNLEdBQUcsR0FBRztZQUN0QixPQUFPLElBQUksQ0FBQ0csU0FBUyxDQUFDUCxTQUFTQztRQUNoQztRQUVBLE1BQU0sSUFBSSxDQUFDTCxNQUFNLENBQUNZLEtBQUssQ0FBQztZQUN2QlgsV0FBVyxJQUFJLENBQUNBLFNBQVM7WUFDekJZLGFBQWFULFFBQVFVLGFBQWE7WUFDbENMLFNBQVNMLFFBQVFLLE9BQU87WUFDeEJNLGtCQUFrQlgsUUFBUVcsZ0JBQWdCO1FBQzNDO1FBQ0EsT0FBT3hCLGVBQWV5QixRQUFRLENBQUNuQixZQUFZRSxJQUFJO0lBQ2hEO0lBRUEsTUFBY1ksVUFBVVAsT0FBcUIsRUFBRUMsTUFBZ0IsRUFBMkI7UUFDekYsTUFBTVksUUFBUSxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDZCxRQUFRVSxhQUFhO1FBQzNELE1BQU1LLGFBQWF4QixzQkFBc0JzQixPQUFPWjtRQUNoRCxNQUFNZSxRQUFRZixPQUFPZ0IsSUFBSSxDQUFDO1FBRTFCLEtBQUssTUFBTUMsV0FBV0gsV0FBV0ksSUFBSSxDQUFFO1lBQ3RDLElBQUksQ0FBQ3pCLE1BQU0sQ0FBQzBCLElBQUksQ0FDZixDQUFDLFFBQVEsRUFBRUYsUUFBUUcsZ0JBQWdCLENBQUMsb0NBQW9DLENBQUM7UUFFM0U7UUFFQSxJQUFJTixXQUFXTyxJQUFJLENBQUNsQixNQUFNLEtBQUssS0FBS1csV0FBV1EsS0FBSyxDQUFDbkIsTUFBTSxLQUFLLEdBQUc7WUFDbEUsTUFBTSxJQUFJRSxNQUNULENBQUMsa0NBQWtDLEVBQUVVLE1BQU0sMkRBQTJELENBQUM7UUFFekc7UUFFQSxNQUFNUSxnQkFBZ0J4QyxLQUFLeUMsT0FBTyxDQUFDLElBQUksQ0FBQzVCLFNBQVMsQ0FBQzZCLE9BQU8sSUFBSUMsUUFBUUMsR0FBRztRQUV4RSxLQUFLLE1BQU1DLFlBQVlkLFdBQVdRLEtBQUssQ0FBRTtZQUN4QyxNQUFNTyxTQUFTdEMsbUJBQW1CcUMsU0FBU0UsT0FBTztZQUNsRCxJQUFJRCxVQUFVLE1BQU07WUFDcEIsTUFBTXpCLFVBQVUsSUFBSSxDQUFDMkIsV0FBVyxDQUFDaEMsUUFBUVUsYUFBYSxFQUFFbUIsU0FBU2xDLElBQUk7WUFDckUsSUFBSSxDQUFDRyxlQUFlLENBQUNVLEtBQUssQ0FBQztnQkFDMUJRLE9BQU9hLFNBQVNSLGdCQUFnQjtnQkFDaENPLEtBQUt2QixRQUFRNEIsV0FBVztnQkFDeEJIO2dCQUNBTjtZQUNEO1FBQ0Q7UUFFQSxJQUFJVCxXQUFXTyxJQUFJLENBQUNsQixNQUFNLEdBQUcsR0FBRztZQUMvQixNQUFNLElBQUksQ0FBQ1IsTUFBTSxDQUFDWSxLQUFLLENBQUM7Z0JBQ3ZCWCxXQUFXLElBQUksQ0FBQ0EsU0FBUztnQkFDekJZLGFBQWFULFFBQVFVLGFBQWE7Z0JBQ2xDd0IsVUFBVW5CLFdBQVdPLElBQUksQ0FBQ2EsR0FBRyxDQUFDLENBQUNDLElBQU1BLEVBQUV6QyxJQUFJO2dCQUMzQ2dCLGtCQUFrQlgsUUFBUVcsZ0JBQWdCO1lBQzNDO1FBQ0Q7UUFFQSxPQUFPeEIsZUFBZXlCLFFBQVEsQ0FBQ25CLFlBQVlFLElBQUk7SUFDaEQ7SUFFQSxNQUFjbUIsYUFBYUosYUFBcUIsRUFBK0I7UUFDOUUsTUFBTXdCLFdBQVcsSUFBSSxDQUFDckMsU0FBUyxDQUFDd0MsV0FBVyxDQUFDM0I7UUFDNUMsT0FBTzRCLFFBQVFDLEdBQUcsQ0FBQ0wsU0FBU0MsR0FBRyxDQUFDLENBQUM5QixVQUFZLElBQUksQ0FBQ21DLFdBQVcsQ0FBQ25DO0lBQy9EO0lBRUEsTUFBY21DLFlBQVluQyxPQUFnQixFQUE2QjtRQUN0RSxNQUFNb0MsTUFBTSxNQUFNcEMsUUFBUXFDLGNBQWM7UUFDeEMsT0FBTztZQUNOL0MsTUFBTVUsUUFBUVYsSUFBSTtZQUNsQjBCLGtCQUFrQmhCLFFBQVFnQixnQkFBZ0IsQ0FBQ3NCLFVBQVUsQ0FBQyxNQUFNO1lBQzVEQyxNQUFNSCxJQUFJRyxJQUFJLElBQUk7WUFDbEJiLFNBQVNVLElBQUlWLE9BQU8sSUFBSSxDQUFDO1FBQzFCO0lBQ0Q7SUFFUUMsWUFBWXRCLGFBQXFCLEVBQUVmLElBQVksRUFBVztRQUNqRSxNQUFNa0QsUUFBUSxJQUFJLENBQUNoRCxTQUFTLENBQUN3QyxXQUFXLENBQUMzQixlQUFlb0MsSUFBSSxDQUFDLENBQUNWLElBQU1BLEVBQUV6QyxJQUFJLEtBQUtBO1FBQy9FLElBQUlrRCxTQUFTLE1BQU07WUFDbEIsTUFBTSxJQUFJdkMsTUFBTSxDQUFDLFNBQVMsRUFBRVgsS0FBSyx3QkFBd0IsQ0FBQztRQUMzRDtRQUNBLE9BQU9rRDtJQUNSO0FBQ0QifQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB7IHR5cGUgQWN0aW9uLCBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBIb3RSZWxvYWRTZXJ2ZXIgfSBmcm9tIFwiLi9ob3QtcmVsb2FkLXNlcnZlci5qc1wiO1xuXG5leHBvcnQgdHlwZSBTZXJ2ZU9wdGlvbnMgPSB7XG5cdGNvbmZpZ3VyYXRpb246IHN0cmluZztcblx0cHJvamVjdD86IHN0cmluZztcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbjxTZXJ2ZU9wdGlvbnM+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgc2VydmVyOiBIb3RSZWxvYWRTZXJ2ZXIsXG5cdFx0cHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IFdvcmtzcGFjZSxcblx0KSB7fVxuXG5cdHB1YmxpYyBhc3luYyBydW4ob3B0aW9uczogU2VydmVPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRcdGF3YWl0IHRoaXMuc2VydmVyLnN0YXJ0KHtcblx0XHRcdHdvcmtzcGFjZTogdGhpcy53b3Jrc3BhY2UsXG5cdFx0XHRidWlsZENvbmZpZzogb3B0aW9ucy5jb25maWd1cmF0aW9uLFxuXHRcdFx0cHJvamVjdDogb3B0aW9ucy5wcm9qZWN0LFxuXHRcdH0pO1xuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5CbG9ja2luZyhTZXJ2ZUFjdGlvbi5uYW1lKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbImluamVjdGFibGUiLCJXb3Jrc3BhY2UiLCJBY3Rpb25SZXNwb25zZSIsIkhvdFJlbG9hZFNlcnZlciIsIlNlcnZlQWN0aW9uIiwic2VydmVyIiwid29ya3NwYWNlIiwicnVuIiwib3B0aW9ucyIsInN0YXJ0IiwiYnVpbGRDb25maWciLCJjb25maWd1cmF0aW9uIiwicHJvamVjdCIsIkJsb2NraW5nIiwibmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsU0FBU0EsVUFBVSxRQUFRLGdDQUFnQztBQUMzRCw4Q0FBOEM7QUFDOUMsU0FBU0MsU0FBUyxRQUFRLGlCQUFpQjtBQUMzQyxTQUFzQkMsY0FBYyxRQUFRLHNCQUFzQjtBQUNsRSw4Q0FBOEM7QUFDOUMsU0FBU0MsZUFBZSxRQUFRLHlCQUF5QjtBQVF6RCxPQUFPLE1BQU1DOzs7SUFDWixZQUNDLEFBQWlCQyxNQUF1QixFQUN4QyxBQUFpQkMsU0FBb0IsQ0FDcEM7YUFGZ0JELFNBQUFBO2FBQ0FDLFlBQUFBO0lBQ2Y7SUFFSCxNQUFhQyxJQUFJQyxPQUFxQixFQUEyQjtRQUNoRSxNQUFNLElBQUksQ0FBQ0gsTUFBTSxDQUFDSSxLQUFLLENBQUM7WUFDdkJILFdBQVcsSUFBSSxDQUFDQSxTQUFTO1lBQ3pCSSxhQUFhRixRQUFRRyxhQUFhO1lBQ2xDQyxTQUFTSixRQUFRSSxPQUFPO1FBQ3pCO1FBQ0EsT0FBT1YsZUFBZVcsUUFBUSxDQUFDVCxZQUFZVSxJQUFJO0lBQ2hEO0FBQ0QifQ==
@@ -1,5 +1,4 @@
1
1
  import { ConfigurationOption, DecohereCommand, ProjectOption } from "@decohere/nexus/cli";
2
- import { DEFAULT_REBOOT_DEBOUNCE_MS, resolveRebootDebounceMs } from "./hot-reload-server.js";
3
2
  import { ServeAction } from "./serve.action.js";
4
3
  export class ServeCommand extends DecohereCommand {
5
4
  get actions() {
@@ -9,39 +8,10 @@ export class ServeCommand extends DecohereCommand {
9
8
  }
10
9
  constructor(name){
11
10
  super(name);
12
- this.description("Serve a project or directory slices (Flux apps in-process; foreign packages via package scripts)");
13
- this.argument("[slices...]", "Module directories to serve (e.g. funding shell secmaster, or projects/funding)");
11
+ this.description("Serve a project in a workspace configuration");
14
12
  this.addOption(new ConfigurationOption("debug"));
15
13
  this.addOption(new ProjectOption());
16
- this.option("--reboot-debounce-ms <ms>", "Quiet window in milliseconds after the last affecting save before a reboot", (value)=>resolveRebootDebounceMs(Number(value)), DEFAULT_REBOOT_DEBOUNCE_MS);
17
14
  }
18
- /**
19
- * Commander passes positional args before options when `[slices...]` is declared.
20
- * The CLI host ModuleFactory expects `(opts, cmd)` — normalize here.
21
- */ action(fn) {
22
- return super.action((...args)=>{
23
- const cmd = args.at(-1);
24
- const first = args[0];
25
- const hasPositionalSlices = Array.isArray(first) || typeof first === "string" || first === undefined;
26
- const opts = hasPositionalSlices ? args[1] : args[0];
27
- const slices = normalizePositionalSlices(first);
28
- if (slices.length > 0) {
29
- cmd.setOptionValue("slices", slices);
30
- }
31
- return fn(opts, cmd);
32
- });
33
- }
34
- }
35
- function normalizePositionalSlices(first) {
36
- if (Array.isArray(first)) {
37
- return first.filter((s)=>typeof s === "string" && s !== "");
38
- }
39
- if (typeof first === "string" && first !== "") {
40
- return [
41
- first
42
- ];
43
- }
44
- return [];
45
15
  }
46
16
 
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJhdGlvbk9wdGlvbiwgRGVjb2hlcmVDb21tYW5kLCBQcm9qZWN0T3B0aW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB0eXBlIHsgT3B0aW9uVmFsdWVzIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMsIHJlc29sdmVSZWJvb3REZWJvdW5jZU1zIH0gZnJvbSBcIi4vaG90LXJlbG9hZC1zZXJ2ZXIuanNcIjtcbmltcG9ydCB7IFNlcnZlQWN0aW9uIH0gZnJvbSBcIi4vc2VydmUuYWN0aW9uLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBTZXJ2ZUNvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQge1xuXHRwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7XG5cdFx0cmV0dXJuIFtTZXJ2ZUFjdGlvbl07XG5cdH1cblxuXHRwdWJsaWMgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobmFtZSk7XG5cdFx0dGhpcy5kZXNjcmlwdGlvbihcblx0XHRcdFwiU2VydmUgYSBwcm9qZWN0IG9yIGRpcmVjdG9yeSBzbGljZXMgKEZsdXggYXBwcyBpbi1wcm9jZXNzOyBmb3JlaWduIHBhY2thZ2VzIHZpYSBwYWNrYWdlIHNjcmlwdHMpXCIsXG5cdFx0KTtcblx0XHR0aGlzLmFyZ3VtZW50KFxuXHRcdFx0XCJbc2xpY2VzLi4uXVwiLFxuXHRcdFx0XCJNb2R1bGUgZGlyZWN0b3JpZXMgdG8gc2VydmUgKGUuZy4gZnVuZGluZyBzaGVsbCBzZWNtYXN0ZXIsIG9yIHByb2plY3RzL2Z1bmRpbmcpXCIsXG5cdFx0KTtcblx0XHR0aGlzLmFkZE9wdGlvbihuZXcgQ29uZmlndXJhdGlvbk9wdGlvbihcImRlYnVnXCIpKTtcblx0XHR0aGlzLmFkZE9wdGlvbihuZXcgUHJvamVjdE9wdGlvbigpKTtcblx0XHR0aGlzLm9wdGlvbihcblx0XHRcdFwiLS1yZWJvb3QtZGVib3VuY2UtbXMgPG1zPlwiLFxuXHRcdFx0XCJRdWlldCB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IGFmZmVjdGluZyBzYXZlIGJlZm9yZSBhIHJlYm9vdFwiLFxuXHRcdFx0KHZhbHVlOiBzdHJpbmcpID0+IHJlc29sdmVSZWJvb3REZWJvdW5jZU1zKE51bWJlcih2YWx1ZSkpLFxuXHRcdFx0REVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb21tYW5kZXIgcGFzc2VzIHBvc2l0aW9uYWwgYXJncyBiZWZvcmUgb3B0aW9ucyB3aGVuIGBbc2xpY2VzLi4uXWAgaXMgZGVjbGFyZWQuXG5cdCAqIFRoZSBDTEkgaG9zdCBNb2R1bGVGYWN0b3J5IGV4cGVjdHMgYChvcHRzLCBjbWQpYCDigJQgbm9ybWFsaXplIGhlcmUuXG5cdCAqL1xuXHRwdWJsaWMgb3ZlcnJpZGUgYWN0aW9uKGZuOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KTogdGhpcyB7XG5cdFx0cmV0dXJuIHN1cGVyLmFjdGlvbigoLi4uYXJnczogYW55W10pID0+IHtcblx0XHRcdGNvbnN0IGNtZCA9IGFyZ3MuYXQoLTEpIGFzIERlY29oZXJlQ29tbWFuZDtcblx0XHRcdGNvbnN0IGZpcnN0ID0gYXJnc1swXTtcblx0XHRcdGNvbnN0IGhhc1Bvc2l0aW9uYWxTbGljZXMgPVxuXHRcdFx0XHRBcnJheS5pc0FycmF5KGZpcnN0KSB8fCB0eXBlb2YgZmlyc3QgPT09IFwic3RyaW5nXCIgfHwgZmlyc3QgPT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IG9wdHMgPSBoYXNQb3NpdGlvbmFsU2xpY2VzID8gKGFyZ3NbMV0gYXMgT3B0aW9uVmFsdWVzKSA6IChhcmdzWzBdIGFzIE9wdGlvblZhbHVlcyk7XG5cblx0XHRcdGNvbnN0IHNsaWNlcyA9IG5vcm1hbGl6ZVBvc2l0aW9uYWxTbGljZXMoZmlyc3QpO1xuXHRcdFx0aWYgKHNsaWNlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNtZC5zZXRPcHRpb25WYWx1ZShcInNsaWNlc1wiLCBzbGljZXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZuKG9wdHMsIGNtZCk7XG5cdFx0fSk7XG5cdH1cbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBvc2l0aW9uYWxTbGljZXMoZmlyc3Q6IHVua25vd24pOiBzdHJpbmdbXSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGZpcnN0KSkge1xuXHRcdHJldHVybiBmaXJzdC5maWx0ZXIoKHMpOiBzIGlzIHN0cmluZyA9PiB0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiAmJiBzICE9PSBcIlwiKTtcblx0fVxuXHRpZiAodHlwZW9mIGZpcnN0ID09PSBcInN0cmluZ1wiICYmIGZpcnN0ICE9PSBcIlwiKSB7XG5cdFx0cmV0dXJuIFtmaXJzdF07XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuIl0sIm5hbWVzIjpbIkNvbmZpZ3VyYXRpb25PcHRpb24iLCJEZWNvaGVyZUNvbW1hbmQiLCJQcm9qZWN0T3B0aW9uIiwiREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMiLCJyZXNvbHZlUmVib290RGVib3VuY2VNcyIsIlNlcnZlQWN0aW9uIiwiU2VydmVDb21tYW5kIiwiYWN0aW9ucyIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFyZ3VtZW50IiwiYWRkT3B0aW9uIiwib3B0aW9uIiwidmFsdWUiLCJOdW1iZXIiLCJhY3Rpb24iLCJmbiIsImFyZ3MiLCJjbWQiLCJhdCIsImZpcnN0IiwiaGFzUG9zaXRpb25hbFNsaWNlcyIsIkFycmF5IiwiaXNBcnJheSIsInVuZGVmaW5lZCIsIm9wdHMiLCJzbGljZXMiLCJub3JtYWxpemVQb3NpdGlvbmFsU2xpY2VzIiwibGVuZ3RoIiwic2V0T3B0aW9uVmFsdWUiLCJmaWx0ZXIiLCJzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxtQkFBbUIsRUFBRUMsZUFBZSxFQUFFQyxhQUFhLFFBQVEsc0JBQXNCO0FBRTFGLFNBQVNDLDBCQUEwQixFQUFFQyx1QkFBdUIsUUFBUSx5QkFBeUI7QUFDN0YsU0FBU0MsV0FBVyxRQUFRLG9CQUFvQjtBQUVoRCxPQUFPLE1BQU1DLHFCQUFxQkw7SUFDakMsSUFBb0JNLFVBQVU7UUFDN0IsT0FBTztZQUFDRjtTQUFZO0lBQ3JCO0lBRUEsWUFBbUJHLElBQVksQ0FBRTtRQUNoQyxLQUFLLENBQUNBO1FBQ04sSUFBSSxDQUFDQyxXQUFXLENBQ2Y7UUFFRCxJQUFJLENBQUNDLFFBQVEsQ0FDWixlQUNBO1FBRUQsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSVgsb0JBQW9CO1FBQ3ZDLElBQUksQ0FBQ1csU0FBUyxDQUFDLElBQUlUO1FBQ25CLElBQUksQ0FBQ1UsTUFBTSxDQUNWLDZCQUNBLDhFQUNBLENBQUNDLFFBQWtCVCx3QkFBd0JVLE9BQU9ELFNBQ2xEVjtJQUVGO0lBRUE7OztFQUdDLEdBQ0QsQUFBZ0JZLE9BQU9DLEVBQTRDLEVBQVE7UUFDMUUsT0FBTyxLQUFLLENBQUNELE9BQU8sQ0FBQyxHQUFHRTtZQUN2QixNQUFNQyxNQUFNRCxLQUFLRSxFQUFFLENBQUMsQ0FBQztZQUNyQixNQUFNQyxRQUFRSCxJQUFJLENBQUMsRUFBRTtZQUNyQixNQUFNSSxzQkFDTEMsTUFBTUMsT0FBTyxDQUFDSCxVQUFVLE9BQU9BLFVBQVUsWUFBWUEsVUFBVUk7WUFDaEUsTUFBTUMsT0FBT0osc0JBQXVCSixJQUFJLENBQUMsRUFBRSxHQUFxQkEsSUFBSSxDQUFDLEVBQUU7WUFFdkUsTUFBTVMsU0FBU0MsMEJBQTBCUDtZQUN6QyxJQUFJTSxPQUFPRSxNQUFNLEdBQUcsR0FBRztnQkFDdEJWLElBQUlXLGNBQWMsQ0FBQyxVQUFVSDtZQUM5QjtZQUNBLE9BQU9WLEdBQUdTLE1BQU1QO1FBQ2pCO0lBQ0Q7QUFDRDtBQUNBLFNBQVNTLDBCQUEwQlAsS0FBYztJQUNoRCxJQUFJRSxNQUFNQyxPQUFPLENBQUNILFFBQVE7UUFDekIsT0FBT0EsTUFBTVUsTUFBTSxDQUFDLENBQUNDLElBQW1CLE9BQU9BLE1BQU0sWUFBWUEsTUFBTTtJQUN4RTtJQUNBLElBQUksT0FBT1gsVUFBVSxZQUFZQSxVQUFVLElBQUk7UUFDOUMsT0FBTztZQUFDQTtTQUFNO0lBQ2Y7SUFDQSxPQUFPLEVBQUU7QUFDViJ9
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJhdGlvbk9wdGlvbiwgRGVjb2hlcmVDb21tYW5kLCBQcm9qZWN0T3B0aW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IFNlcnZlQWN0aW9uIH0gZnJvbSBcIi4vc2VydmUuYWN0aW9uLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBTZXJ2ZUNvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQge1xuXHRwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7XG5cdFx0cmV0dXJuIFtTZXJ2ZUFjdGlvbl07XG5cdH1cblxuXHRwdWJsaWMgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobmFtZSk7XG5cdFx0dGhpcy5kZXNjcmlwdGlvbihcIlNlcnZlIGEgcHJvamVjdCBpbiBhIHdvcmtzcGFjZSBjb25maWd1cmF0aW9uXCIpO1xuXHRcdHRoaXMuYWRkT3B0aW9uKG5ldyBDb25maWd1cmF0aW9uT3B0aW9uKFwiZGVidWdcIikpO1xuXHRcdHRoaXMuYWRkT3B0aW9uKG5ldyBQcm9qZWN0T3B0aW9uKCkpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiQ29uZmlndXJhdGlvbk9wdGlvbiIsIkRlY29oZXJlQ29tbWFuZCIsIlByb2plY3RPcHRpb24iLCJTZXJ2ZUFjdGlvbiIsIlNlcnZlQ29tbWFuZCIsImFjdGlvbnMiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJhZGRPcHRpb24iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLG1CQUFtQixFQUFFQyxlQUFlLEVBQUVDLGFBQWEsUUFBUSxzQkFBc0I7QUFDMUYsU0FBU0MsV0FBVyxRQUFRLG9CQUFvQjtBQUVoRCxPQUFPLE1BQU1DLHFCQUFxQkg7SUFDakMsSUFBb0JJLFVBQVU7UUFDN0IsT0FBTztZQUFDRjtTQUFZO0lBQ3JCO0lBRUEsWUFBbUJHLElBQVksQ0FBRTtRQUNoQyxLQUFLLENBQUNBO1FBQ04sSUFBSSxDQUFDQyxXQUFXLENBQUM7UUFDakIsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSVIsb0JBQW9CO1FBQ3ZDLElBQUksQ0FBQ1EsU0FBUyxDQUFDLElBQUlOO0lBQ3BCO0FBQ0QifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decohere/flux",
3
- "version": "0.0.1-dev.88",
3
+ "version": "0.0.1-dev.9",
4
4
  "description": "Hot module reload server for Node.js ESM applications",
5
5
  "keywords": [
6
6
  "typescript",
@@ -25,12 +25,11 @@
25
25
  "test": "echo \"Error: no test specified\" && exit 1"
26
26
  },
27
27
  "dependencies": {
28
- "@decohere/crucible": "0.0.1-dev.88",
29
- "@decohere/forge": "0.0.1-dev.88",
30
- "@decohere/mesh": "0.0.1-dev.88",
31
- "@decohere/nexus": "0.0.1-dev.88",
32
- "@decohere/scribe": "0.0.1-dev.88",
33
- "commander": "^13.1.0",
28
+ "@decohere/crucible": "0.0.1-dev.9",
29
+ "@decohere/forge": "0.0.1-dev.9",
30
+ "@decohere/mesh": "0.0.1-dev.9",
31
+ "@decohere/nexus": "0.0.1-dev.9",
32
+ "@decohere/scribe": "0.0.1-dev.9",
34
33
  "rxjs": "^7.8.2"
35
34
  },
36
35
  "devDependencies": {}
@@ -2,14 +2,12 @@ import type { WorkspaceFactoryOptions } from "@decohere/nexus/cli";
2
2
  import { ModuleManifest } from "@decohere/nexus/cli";
3
3
  import type { ContainerBuilder } from "@decohere/nexus/composition";
4
4
  import { FluxCommand } from "./flux.command.js";
5
- import { RunAction } from "./run.action.js";
6
5
  import { ServeAction } from "./serve.action.js";
7
6
  export declare class FluxModule extends ModuleManifest {
8
7
  readonly id = "flux";
9
8
  readonly command: typeof FluxCommand;
10
9
  readonly actions: {
11
10
  serve: typeof ServeAction;
12
- run: typeof RunAction;
13
11
  };
14
12
  registerServices(builder: ContainerBuilder): void;
15
13
  createWorkspace(options: WorkspaceFactoryOptions): Promise<import("@decohere/mesh").Workspace>;
@@ -1,12 +1,5 @@
1
1
  import { EventEmitter } from "node:events";
2
2
  import type { Workspace } from "@decohere/mesh";
3
- /** Default quiet window before a file-change reboot. */
4
- export declare const DEFAULT_REBOOT_DEBOUNCE_MS = 250;
5
- export declare function resolveRebootDebounceMs(value: number | undefined): number;
6
- /** Info-level HMR start block — keep `flux reboot` in the text so operators can search the buffer. */
7
- export declare function formatFluxRebootStart(labels: readonly string[], triggers?: readonly string[]): string;
8
- /** Info-level HMR finish block. */
9
- export declare function formatFluxRebootReady(labels: readonly string[], elapsedMs: number): string;
10
3
  export interface HotReloadServerEvents {
11
4
  start: [];
12
5
  reboot: [];
@@ -16,72 +9,56 @@ export interface HotReloadServerOptions {
16
9
  buildConfig: string;
17
10
  /** Name of the project to serve. Defaults to the first project in the workspace. */
18
11
  project?: string;
19
- /**
20
- * Multiple Flux app package names to boot in one process (directory slice).
21
- * When set, takes precedence over {@link project}.
22
- */
23
- projects?: readonly string[];
24
12
  /**
25
13
  * Pre-built Workspace instance to use instead of running WorkspaceFactory.
26
14
  * Useful in tests to bypass filesystem-based workspace discovery.
27
15
  */
28
16
  workspace?: Workspace;
29
- /**
30
- * Quiet window in milliseconds after the last affecting save before a reboot.
31
- * Defaults to {@link DEFAULT_REBOOT_DEBOUNCE_MS}. Raise this for agent save trains.
32
- */
33
- rebootDebounceMs?: number;
34
17
  }
35
18
  export declare class HotReloadServer extends EventEmitter<HotReloadServerEvents> {
36
19
  private readonly logger;
37
- private readonly loader;
38
20
  private disposed;
39
- /** Absolute entry paths currently served (one or more Flux apps). */
40
- private entries;
41
- private pendingEntryReboots;
42
- /** Source paths that scheduled the next reboot (cleared when that reboot starts). */
43
- private pendingTriggers;
21
+ private hooksRegistered;
22
+ private entryModulePath;
23
+ private entryModule?;
24
+ private workspace?;
44
25
  private watchSubscription?;
26
+ /** Map from absolute .ts source file path to project info */
27
+ private fileInfoMap;
45
28
  private moduleCache;
46
29
  private dependencies;
47
- private rebootTail;
48
- private rebootDebounceGen;
49
- private rebootInFlight;
50
- private rebootFollowUp;
51
- private rebootQueued;
52
- /** Modules whose reverse-graph edges are pruned at reboot, not on schedule. */
53
- private pendingGraphPrune;
54
- private scheduleReboot;
30
+ private transpileCache;
31
+ private transpiler;
55
32
  start(options: HotReloadServerOptions): Promise<void>;
56
33
  dispose(): Promise<void>;
57
34
  [Symbol.asyncDispose](): Promise<void>;
58
- private bootEntries;
59
35
  private bootEntry;
60
- private bindScheduleReboot;
61
- private requestReboot;
62
- private runReboot;
63
- private disposeEntries;
36
+ private reboot;
64
37
  private disposeEntry;
65
- private requireWorkspace;
66
- private resolveProjects;
38
+ private scheduleReboot;
39
+ private resolveWorkspace;
40
+ private resolveProject;
41
+ private buildFileInfoMap;
42
+ private registerHooks;
43
+ /**
44
+ * Pre-next specifier rewriter: if specifier is a .js import that maps to a
45
+ * known .ts source file, returns the versioned .ts file URL so next() never
46
+ * tries to load a non-existent .js file from disk.
47
+ */
48
+ private rewriteJsToTs;
67
49
  /**
68
50
  * Post-next dependency tracker: records which source files import which
69
51
  * other source files so that reloadIfAffected can traverse the graph.
70
52
  */
71
53
  private onPostResolve;
54
+ private loadTs;
72
55
  private onFileChange;
73
56
  private reloadIfAffected;
74
57
  private getDependencyGraph;
75
58
  private trackDependency;
76
59
  private getCachedOrNew;
77
60
  private versionModule;
78
- private invalidateModuleCaches;
79
- private prunePendingDependencyEdges;
80
- /** Remove these modules as parents so boot can rebuild edges without stale importers. */
81
- private pruneDependencyParents;
61
+ private invalidateModule;
82
62
  private invalidateAllSourceFiles;
83
63
  private isSelf;
84
- private labelsFor;
85
- private takeTriggers;
86
- private formatTrigger;
87
64
  }
@@ -1,11 +1,4 @@
1
- export { DeferredScriptRunner } from "./deferred-script-runner.js";
2
- export type { FluxRunOptions, FluxServeOptions } from "./flux.js";
3
- export { flux } from "./flux.js";
4
1
  export { FluxModule } from "./flux.module.js";
5
2
  export type { HotReloadServerOptions } from "./hot-reload-server.js";
6
- export { DEFAULT_REBOOT_DEBOUNCE_MS, HotReloadServer } from "./hot-reload-server.js";
7
- export type { RunOptions } from "./run.action.js";
3
+ export { HotReloadServer } from "./hot-reload-server.js";
8
4
  export type { ServeOptions } from "./serve.action.js";
9
- export { type ClassifiedSlice, classifySliceProject, classifySliceProjects, normalizeSlicePrefix, projectsInSlice, projectsInSlices, resolveDeferScript, type SliceKind, type SliceProjectView, } from "./slice-serve.js";
10
- export type { SourceModuleLoaderOptions } from "./source-module-loader.js";
11
- export { SourceModuleLoader } from "./source-module-loader.js";
@@ -1,23 +1,13 @@
1
1
  import { Workspace } from "@decohere/mesh";
2
2
  import { type Action, ActionResponse } from "@decohere/nexus/cli";
3
- import { DeferredScriptRunner } from "./deferred-script-runner.js";
4
3
  import { HotReloadServer } from "./hot-reload-server.js";
5
4
  export type ServeOptions = {
6
5
  configuration: string;
7
6
  project?: string;
8
- /** One or more module directory tokens (`funding`, `shell`, `projects/funding`). */
9
- slices?: string[];
10
- rebootDebounceMs?: number;
11
7
  };
12
8
  export declare class ServeAction implements Action<ServeOptions> {
13
9
  private readonly server;
14
10
  private readonly workspace;
15
- private readonly deferredScripts;
16
- private readonly logger;
17
- constructor(server: HotReloadServer, workspace: Workspace, deferredScripts: DeferredScriptRunner);
11
+ constructor(server: HotReloadServer, workspace: Workspace);
18
12
  run(options: ServeOptions): Promise<ActionResponse>;
19
- private runSlices;
20
- private toSliceViews;
21
- private toSliceView;
22
- private findProject;
23
13
  }
@@ -3,9 +3,4 @@ import { ServeAction } from "./serve.action.js";
3
3
  export declare class ServeCommand extends DecohereCommand {
4
4
  get actions(): (typeof ServeAction)[];
5
5
  constructor(name: string);
6
- /**
7
- * Commander passes positional args before options when `[slices...]` is declared.
8
- * The CLI host ModuleFactory expects `(opts, cmd)` — normalize here.
9
- */
10
- action(fn: (...args: any[]) => void | Promise<void>): this;
11
6
  }
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "DeferredScriptRunner", {
6
- enumerable: true,
7
- get: function() {
8
- return DeferredScriptRunner;
9
- }
10
- });
11
- const _nodechild_process = require("node:child_process");
12
- const _decorators = require("@decohere/crucible/decorators");
13
- const _interop = require("@decohere/nexus/interop");
14
- const _scribe = require("@decohere/scribe");
15
- function _ts_decorate(decorators, target, key, desc) {
16
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
18
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
19
- return c > 3 && r && Object.defineProperty(target, key, r), r;
20
- }
21
- class DeferredScriptRunner {
22
- logger = _scribe.scribe.logger(DeferredScriptRunner.name);
23
- children = [];
24
- start(options) {
25
- const pm = (0, _interop.detectPackageManager)(options.workspaceRoot) ?? (0, _interop.packageManagerFromString)("pnpm");
26
- this.logger.info(`deferred ${options.label} — running ${pm.name} run ${options.script} in ${options.cwd}`);
27
- const child = (0, _nodechild_process.spawn)(pm.name, [
28
- "run",
29
- options.script
30
- ], {
31
- cwd: options.cwd,
32
- stdio: "inherit",
33
- env: process.env,
34
- shell: false
35
- });
36
- child.on("exit", (code, signal)=>{
37
- if (signal) return;
38
- if (code != null && code !== 0) {
39
- this.logger.warn(`deferred ${options.label} exited with ${code}`);
40
- }
41
- });
42
- this.children.push(child);
43
- return child;
44
- }
45
- async [Symbol.asyncDispose]() {
46
- for (const child of this.children){
47
- if (!child.killed) {
48
- child.kill("SIGTERM");
49
- }
50
- }
51
- this.children.length = 0;
52
- }
53
- }
54
- DeferredScriptRunner = _ts_decorate([
55
- (0, _decorators.injectable)()
56
- ], DeferredScriptRunner);
57
-
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2RlZmVycmVkLXNjcmlwdC1ydW5uZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDaGlsZFByb2Nlc3MsIHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZU1hbmFnZXIsIHBhY2thZ2VNYW5hZ2VyRnJvbVN0cmluZyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW50ZXJvcFwiO1xuaW1wb3J0IHsgdHlwZSBMb2dnZXIsIHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5cbmV4cG9ydCB0eXBlIERlZmVycmVkU2NyaXB0U3RhcnQgPSB7XG5cdHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuXHRyZWFkb25seSBzY3JpcHQ6IHN0cmluZztcblx0LyoqIFdvcmtzcGFjZSByb290IHVzZWQgdG8gZGV0ZWN0IHBucG0vbnBtL3lhcm4uICovXG5cdHJlYWRvbmx5IHdvcmtzcGFjZVJvb3Q6IHN0cmluZztcbn07XG5cbi8qKlxuICogTml4cGFja3Mtc3R5bGUgY2hpbGQgcHJvY2Vzc2VzIGZvciBmb3JlaWduIHBhY2thZ2VzIGluIGEgZmx1eCBzZXJ2ZSBzbGljZS5cbiAqIEtpbGxlZCB3aGVuIHRoZSBGbHV4IGNvbnRhaW5lciBkaXNwb3NlcyAoU0lHSU5UIOKGkiBSb290TW9kdWxlIHRlYXJkb3duKS5cbiAqL1xuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERlZmVycmVkU2NyaXB0UnVubmVyIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcblx0cHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlciA9IHNjcmliZS5sb2dnZXIoRGVmZXJyZWRTY3JpcHRSdW5uZXIubmFtZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IENoaWxkUHJvY2Vzc1tdID0gW107XG5cblx0cHVibGljIHN0YXJ0KG9wdGlvbnM6IERlZmVycmVkU2NyaXB0U3RhcnQpOiBDaGlsZFByb2Nlc3Mge1xuXHRcdGNvbnN0IHBtID0gZGV0ZWN0UGFja2FnZU1hbmFnZXIob3B0aW9ucy53b3Jrc3BhY2VSb290KSA/PyBwYWNrYWdlTWFuYWdlckZyb21TdHJpbmcoXCJwbnBtXCIpO1xuXHRcdHRoaXMubG9nZ2VyLmluZm8oXG5cdFx0XHRgZGVmZXJyZWQgJHtvcHRpb25zLmxhYmVsfSDigJQgcnVubmluZyAke3BtLm5hbWV9IHJ1biAke29wdGlvbnMuc2NyaXB0fSBpbiAke29wdGlvbnMuY3dkfWAsXG5cdFx0KTtcblx0XHRjb25zdCBjaGlsZCA9IHNwYXduKHBtLm5hbWUsIFtcInJ1blwiLCBvcHRpb25zLnNjcmlwdF0sIHtcblx0XHRcdGN3ZDogb3B0aW9ucy5jd2QsXG5cdFx0XHRzdGRpbzogXCJpbmhlcml0XCIsXG5cdFx0XHRlbnY6IHByb2Nlc3MuZW52LFxuXHRcdFx0c2hlbGw6IGZhbHNlLFxuXHRcdH0pO1xuXHRcdGNoaWxkLm9uKFwiZXhpdFwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG5cdFx0XHRpZiAoc2lnbmFsKSByZXR1cm47XG5cdFx0XHRpZiAoY29kZSAhPSBudWxsICYmIGNvZGUgIT09IDApIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIud2FybihgZGVmZXJyZWQgJHtvcHRpb25zLmxhYmVsfSBleGl0ZWQgd2l0aCAke2NvZGV9YCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblx0XHRyZXR1cm4gY2hpbGQ7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCkge1xuXHRcdGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuXHRcdFx0aWYgKCFjaGlsZC5raWxsZWQpIHtcblx0XHRcdFx0Y2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuY2hpbGRyZW4ubGVuZ3RoID0gMDtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkRlZmVycmVkU2NyaXB0UnVubmVyIiwibG9nZ2VyIiwic2NyaWJlIiwibmFtZSIsImNoaWxkcmVuIiwic3RhcnQiLCJvcHRpb25zIiwicG0iLCJkZXRlY3RQYWNrYWdlTWFuYWdlciIsIndvcmtzcGFjZVJvb3QiLCJwYWNrYWdlTWFuYWdlckZyb21TdHJpbmciLCJpbmZvIiwibGFiZWwiLCJzY3JpcHQiLCJjd2QiLCJjaGlsZCIsInNwYXduIiwic3RkaW8iLCJlbnYiLCJwcm9jZXNzIiwic2hlbGwiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJ3YXJuIiwicHVzaCIsIlN5bWJvbCIsImFzeW5jRGlzcG9zZSIsImtpbGxlZCIsImtpbGwiLCJsZW5ndGgiXSwibWFwcGluZ3MiOiI7Ozs7K0JBa0JhQTs7O2VBQUFBOzs7bUNBbEI0Qjs0QkFDZDt5QkFDb0M7d0JBQzNCOzs7Ozs7O0FBZTdCLE1BQU1BO0lBQ0tDLFNBQWlCQyxjQUFNLENBQUNELE1BQU0sQ0FBQ0QscUJBQXFCRyxJQUFJLEVBQUU7SUFDMURDLFdBQTJCLEVBQUUsQ0FBQztJQUV4Q0MsTUFBTUMsT0FBNEIsRUFBZ0I7UUFDeEQsTUFBTUMsS0FBS0MsSUFBQUEsNkJBQW9CLEVBQUNGLFFBQVFHLGFBQWEsS0FBS0MsSUFBQUEsaUNBQXdCLEVBQUM7UUFDbkYsSUFBSSxDQUFDVCxNQUFNLENBQUNVLElBQUksQ0FDZixDQUFDLFNBQVMsRUFBRUwsUUFBUU0sS0FBSyxDQUFDLFdBQVcsRUFBRUwsR0FBR0osSUFBSSxDQUFDLEtBQUssRUFBRUcsUUFBUU8sTUFBTSxDQUFDLElBQUksRUFBRVAsUUFBUVEsR0FBRyxFQUFFO1FBRXpGLE1BQU1DLFFBQVFDLElBQUFBLHdCQUFLLEVBQUNULEdBQUdKLElBQUksRUFBRTtZQUFDO1lBQU9HLFFBQVFPLE1BQU07U0FBQyxFQUFFO1lBQ3JEQyxLQUFLUixRQUFRUSxHQUFHO1lBQ2hCRyxPQUFPO1lBQ1BDLEtBQUtDLFFBQVFELEdBQUc7WUFDaEJFLE9BQU87UUFDUjtRQUNBTCxNQUFNTSxFQUFFLENBQUMsUUFBUSxDQUFDQyxNQUFNQztZQUN2QixJQUFJQSxRQUFRO1lBQ1osSUFBSUQsUUFBUSxRQUFRQSxTQUFTLEdBQUc7Z0JBQy9CLElBQUksQ0FBQ3JCLE1BQU0sQ0FBQ3VCLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRWxCLFFBQVFNLEtBQUssQ0FBQyxhQUFhLEVBQUVVLE1BQU07WUFDakU7UUFDRDtRQUNBLElBQUksQ0FBQ2xCLFFBQVEsQ0FBQ3FCLElBQUksQ0FBQ1Y7UUFDbkIsT0FBT0E7SUFDUjtJQUVBLE1BQWEsQ0FBQ1csT0FBT0MsWUFBWSxDQUFDLEdBQUc7UUFDcEMsS0FBSyxNQUFNWixTQUFTLElBQUksQ0FBQ1gsUUFBUSxDQUFFO1lBQ2xDLElBQUksQ0FBQ1csTUFBTWEsTUFBTSxFQUFFO2dCQUNsQmIsTUFBTWMsSUFBSSxDQUFDO1lBQ1o7UUFDRDtRQUNBLElBQUksQ0FBQ3pCLFFBQVEsQ0FBQzBCLE1BQU0sR0FBRztJQUN4QjtBQUNEIn0=
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "flux", {
6
- enumerable: true,
7
- get: function() {
8
- return flux;
9
- }
10
- });
11
- const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
12
- const _hotreloadserver = require("./hot-reload-server.js");
13
- const _sourcemoduleloader = require("./source-module-loader.js");
14
- function _interop_require_default(obj) {
15
- return obj && obj.__esModule ? obj : {
16
- default: obj
17
- };
18
- }
19
- /** Process-level one-shot loader so a second `run()` reconfigures instead of stacking hooks. */ const runLoader = new _sourcemoduleloader.SourceModuleLoader();
20
- async function run(entry, options = {}) {
21
- const trimmed = entry.trim();
22
- if (trimmed == null || trimmed === "") {
23
- throw new Error("flux.run requires an entry file path");
24
- }
25
- const absoluteEntry = _nodepath.default.resolve(trimmed);
26
- await runLoader.configure({
27
- workspace: options.workspace,
28
- buildConfig: options.configuration ?? "debug"
29
- });
30
- runLoader.registerHooks();
31
- process.argv = [
32
- process.execPath,
33
- absoluteEntry,
34
- ...options.args ?? []
35
- ];
36
- return runLoader.importEntry(absoluteEntry);
37
- }
38
- async function serve(options = {}) {
39
- const server = new _hotreloadserver.HotReloadServer();
40
- await server.start({
41
- buildConfig: options.configuration ?? "debug",
42
- project: options.project,
43
- projects: options.projects,
44
- workspace: options.workspace,
45
- rebootDebounceMs: options.rebootDebounceMs
46
- });
47
- return server;
48
- }
49
- function dispose() {
50
- runLoader.dispose();
51
- }
52
- const flux = {
53
- run,
54
- serve,
55
- dispose
56
- };
57
-
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2ZsdXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB7IEhvdFJlbG9hZFNlcnZlciB9IGZyb20gXCIuL2hvdC1yZWxvYWQtc2VydmVyLmpzXCI7XG5pbXBvcnQgeyBTb3VyY2VNb2R1bGVMb2FkZXIgfSBmcm9tIFwiLi9zb3VyY2UtbW9kdWxlLWxvYWRlci5qc1wiO1xuXG5leHBvcnQgdHlwZSBGbHV4UnVuT3B0aW9ucyA9IHtcblx0LyoqIE1lc2gvRm9yZ2UgY29uZmlndXJhdGlvbiBuYW1lLiBEZWZhdWx0cyB0byBgZGVidWdgIChgLS1jb25maWd1cmF0aW9uYCkuICovXG5cdGNvbmZpZ3VyYXRpb24/OiBzdHJpbmc7XG5cdC8qKiBBcmd1bWVudHMgZm9yd2FyZGVkIHRvIHRoZSBlbnRyeSAoYmluLXN0eWxlIGBwcm9jZXNzLmFyZ3Yuc2xpY2UoMilgKS4gKi9cblx0YXJncz86IHN0cmluZ1tdO1xuXHQvKipcblx0ICogUHJlLWJ1aWx0IFdvcmtzcGFjZSBpbnN0ZWFkIG9mIGBXb3Jrc3BhY2VGYWN0b3J5YC5cblx0ICogVXNlZnVsIGluIHRlc3RzIHRvIHNraXAgZmlsZXN5c3RlbSBkaXNjb3ZlcnkuXG5cdCAqL1xuXHR3b3Jrc3BhY2U/OiBXb3Jrc3BhY2U7XG59O1xuXG5leHBvcnQgdHlwZSBGbHV4U2VydmVPcHRpb25zID0ge1xuXHQvKiogTWVzaC9Gb3JnZSBjb25maWd1cmF0aW9uIG5hbWUuIERlZmF1bHRzIHRvIGBkZWJ1Z2AgKGAtLWNvbmZpZ3VyYXRpb25gKS4gKi9cblx0Y29uZmlndXJhdGlvbj86IHN0cmluZztcblx0LyoqIE5hbWUgb2YgdGhlIHByb2plY3QgdG8gc2VydmUuIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UuICovXG5cdHByb2plY3Q/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBNdWx0aXBsZSBGbHV4IGFwcCBwYWNrYWdlIG5hbWVzIHRvIGJvb3QgaW4gb25lIHByb2Nlc3MgKGRpcmVjdG9yeSBzbGljZSkuXG5cdCAqIFdoZW4gc2V0LCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIge0BsaW5rIHByb2plY3R9LlxuXHQgKi9cblx0cHJvamVjdHM/OiByZWFkb25seSBzdHJpbmdbXTtcblx0LyoqXG5cdCAqIFByZS1idWlsdCBXb3Jrc3BhY2UgaW5zdGVhZCBvZiBgV29ya3NwYWNlRmFjdG9yeWAuXG5cdCAqIFVzZWZ1bCBpbiB0ZXN0cyB0byBza2lwIGZpbGVzeXN0ZW0gZGlzY292ZXJ5LlxuXHQgKi9cblx0d29ya3NwYWNlPzogV29ya3NwYWNlO1xuXHQvKipcblx0ICogUXVpZXQgd2luZG93IGluIG1pbGxpc2Vjb25kcyBhZnRlciB0aGUgbGFzdCBhZmZlY3Rpbmcgc2F2ZSBiZWZvcmUgYSByZWJvb3QuXG5cdCAqIFJhaXNlIHRoaXMgZm9yIGFnZW50IHNhdmUgdHJhaW5zLlxuXHQgKi9cblx0cmVib290RGVib3VuY2VNcz86IG51bWJlcjtcbn07XG5cbi8qKiBQcm9jZXNzLWxldmVsIG9uZS1zaG90IGxvYWRlciBzbyBhIHNlY29uZCBgcnVuKClgIHJlY29uZmlndXJlcyBpbnN0ZWFkIG9mIHN0YWNraW5nIGhvb2tzLiAqL1xuY29uc3QgcnVuTG9hZGVyID0gbmV3IFNvdXJjZU1vZHVsZUxvYWRlcigpO1xuXG5hc3luYyBmdW5jdGlvbiBydW4oZW50cnk6IHN0cmluZywgb3B0aW9uczogRmx1eFJ1bk9wdGlvbnMgPSB7fSk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRjb25zdCB0cmltbWVkID0gZW50cnkudHJpbSgpO1xuXHRpZiAodHJpbW1lZCA9PSBudWxsIHx8IHRyaW1tZWQgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJmbHV4LnJ1biByZXF1aXJlcyBhbiBlbnRyeSBmaWxlIHBhdGhcIik7XG5cdH1cblxuXHRjb25zdCBhYnNvbHV0ZUVudHJ5ID0gcGF0aC5yZXNvbHZlKHRyaW1tZWQpO1xuXHRhd2FpdCBydW5Mb2FkZXIuY29uZmlndXJlKHtcblx0XHR3b3Jrc3BhY2U6IG9wdGlvbnMud29ya3NwYWNlLFxuXHRcdGJ1aWxkQ29uZmlnOiBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPz8gXCJkZWJ1Z1wiLFxuXHR9KTtcblx0cnVuTG9hZGVyLnJlZ2lzdGVySG9va3MoKTtcblx0cHJvY2Vzcy5hcmd2ID0gW3Byb2Nlc3MuZXhlY1BhdGgsIGFic29sdXRlRW50cnksIC4uLihvcHRpb25zLmFyZ3MgPz8gW10pXTtcblx0cmV0dXJuIHJ1bkxvYWRlci5pbXBvcnRFbnRyeShhYnNvbHV0ZUVudHJ5KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VydmUob3B0aW9uczogRmx1eFNlcnZlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxIb3RSZWxvYWRTZXJ2ZXI+IHtcblx0Y29uc3Qgc2VydmVyID0gbmV3IEhvdFJlbG9hZFNlcnZlcigpO1xuXHRhd2FpdCBzZXJ2ZXIuc3RhcnQoe1xuXHRcdGJ1aWxkQ29uZmlnOiBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPz8gXCJkZWJ1Z1wiLFxuXHRcdHByb2plY3Q6IG9wdGlvbnMucHJvamVjdCxcblx0XHRwcm9qZWN0czogb3B0aW9ucy5wcm9qZWN0cyxcblx0XHR3b3Jrc3BhY2U6IG9wdGlvbnMud29ya3NwYWNlLFxuXHRcdHJlYm9vdERlYm91bmNlTXM6IG9wdGlvbnMucmVib290RGVib3VuY2VNcyxcblx0fSk7XG5cdHJldHVybiBzZXJ2ZXI7XG59XG5cbmZ1bmN0aW9uIGRpc3Bvc2UoKTogdm9pZCB7XG5cdHJ1bkxvYWRlci5kaXNwb3NlKCk7XG59XG5cbmV4cG9ydCBjb25zdCBmbHV4ID0geyBydW4sIHNlcnZlLCBkaXNwb3NlIH07XG4iXSwibmFtZXMiOlsiZmx1eCIsInJ1bkxvYWRlciIsIlNvdXJjZU1vZHVsZUxvYWRlciIsInJ1biIsImVudHJ5Iiwib3B0aW9ucyIsInRyaW1tZWQiLCJ0cmltIiwiRXJyb3IiLCJhYnNvbHV0ZUVudHJ5IiwicGF0aCIsInJlc29sdmUiLCJjb25maWd1cmUiLCJ3b3Jrc3BhY2UiLCJidWlsZENvbmZpZyIsImNvbmZpZ3VyYXRpb24iLCJyZWdpc3Rlckhvb2tzIiwicHJvY2VzcyIsImFyZ3YiLCJleGVjUGF0aCIsImFyZ3MiLCJpbXBvcnRFbnRyeSIsInNlcnZlIiwic2VydmVyIiwiSG90UmVsb2FkU2VydmVyIiwic3RhcnQiLCJwcm9qZWN0IiwicHJvamVjdHMiLCJyZWJvb3REZWJvdW5jZU1zIiwiZGlzcG9zZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkEwRWFBOzs7ZUFBQUE7OztpRUExRUk7aUNBRWU7b0NBQ0c7Ozs7OztBQW9DbkMsOEZBQThGLEdBQzlGLE1BQU1DLFlBQVksSUFBSUMsc0NBQWtCO0FBRXhDLGVBQWVDLElBQUlDLEtBQWEsRUFBRUMsVUFBMEIsQ0FBQyxDQUFDO0lBQzdELE1BQU1DLFVBQVVGLE1BQU1HLElBQUk7SUFDMUIsSUFBSUQsV0FBVyxRQUFRQSxZQUFZLElBQUk7UUFDdEMsTUFBTSxJQUFJRSxNQUFNO0lBQ2pCO0lBRUEsTUFBTUMsZ0JBQWdCQyxpQkFBSSxDQUFDQyxPQUFPLENBQUNMO0lBQ25DLE1BQU1MLFVBQVVXLFNBQVMsQ0FBQztRQUN6QkMsV0FBV1IsUUFBUVEsU0FBUztRQUM1QkMsYUFBYVQsUUFBUVUsYUFBYSxJQUFJO0lBQ3ZDO0lBQ0FkLFVBQVVlLGFBQWE7SUFDdkJDLFFBQVFDLElBQUksR0FBRztRQUFDRCxRQUFRRSxRQUFRO1FBQUVWO1dBQW1CSixRQUFRZSxJQUFJLElBQUksRUFBRTtLQUFFO0lBQ3pFLE9BQU9uQixVQUFVb0IsV0FBVyxDQUFDWjtBQUM5QjtBQUVBLGVBQWVhLE1BQU1qQixVQUE0QixDQUFDLENBQUM7SUFDbEQsTUFBTWtCLFNBQVMsSUFBSUMsZ0NBQWU7SUFDbEMsTUFBTUQsT0FBT0UsS0FBSyxDQUFDO1FBQ2xCWCxhQUFhVCxRQUFRVSxhQUFhLElBQUk7UUFDdENXLFNBQVNyQixRQUFRcUIsT0FBTztRQUN4QkMsVUFBVXRCLFFBQVFzQixRQUFRO1FBQzFCZCxXQUFXUixRQUFRUSxTQUFTO1FBQzVCZSxrQkFBa0J2QixRQUFRdUIsZ0JBQWdCO0lBQzNDO0lBQ0EsT0FBT0w7QUFDUjtBQUVBLFNBQVNNO0lBQ1I1QixVQUFVNEIsT0FBTztBQUNsQjtBQUVPLE1BQU03QixPQUFPO0lBQUVHO0lBQUttQjtJQUFPTztBQUFRIn0=
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "rewriteServeSpecifier", {
6
- enumerable: true,
7
- get: function() {
8
- return rewriteServeSpecifier;
9
- }
10
- });
11
- const _nodeurl = require("node:url");
12
- const _mesh = require("@decohere/mesh");
13
- function rewriteServeSpecifier(options) {
14
- const { specifier, parentUrl, isWatchedTs, resolveBare, versionFileUrl } = options;
15
- const relativeTs = resolveRelativeWatchedTs(specifier, parentUrl, isWatchedTs);
16
- if (relativeTs != null) {
17
- return versionFileUrl((0, _nodeurl.pathToFileURL)(relativeTs).toString());
18
- }
19
- const bareTarget = resolveBare(specifier);
20
- if (bareTarget != null && isWatchedTs(bareTarget)) {
21
- return versionFileUrl((0, _nodeurl.pathToFileURL)(bareTarget).toString());
22
- }
23
- return null;
24
- }
25
- function resolveRelativeWatchedTs(specifier, parentUrl, isWatchedTs) {
26
- if (_mesh.packageAliases.isBareSpecifier(specifier)) return null;
27
- if (!(specifier.startsWith(".") || specifier.startsWith("/"))) return null;
28
- const parentClean = parentUrl.split("?")[0];
29
- if (parentClean == null || parentClean === "") return null;
30
- let resolved;
31
- try {
32
- resolved = new URL(specifier, parentClean);
33
- } catch {
34
- return null;
35
- }
36
- if (resolved.protocol !== "file:") return null;
37
- let filePath = (0, _nodeurl.fileURLToPath)(resolved);
38
- if (filePath.endsWith(".js")) {
39
- filePath = `${filePath.slice(0, -3)}.ts`;
40
- } else if (!filePath.endsWith(".ts")) {
41
- filePath = `${filePath}.ts`;
42
- }
43
- return isWatchedTs(filePath) ? filePath : null;
44
- }
45
-
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3Jld3JpdGUtc2VydmUtc3BlY2lmaWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpbGVVUkxUb1BhdGgsIHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB7IHBhY2thZ2VBbGlhc2VzIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5cbmV4cG9ydCB0eXBlIFJld3JpdGVTZXJ2ZVNwZWNpZmllck9wdGlvbnMgPSB7XG5cdHNwZWNpZmllcjogc3RyaW5nO1xuXHRwYXJlbnRVcmw6IHN0cmluZztcblx0aXNXYXRjaGVkVHM6IChhYnNvbHV0ZVBhdGg6IHN0cmluZykgPT4gYm9vbGVhbjtcblx0cmVzb2x2ZUJhcmU6IChzcGVjaWZpZXI6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcblx0dmVyc2lvbkZpbGVVcmw6IChmaWxlVXJsOiBzdHJpbmcpID0+IHN0cmluZztcbn07XG5cbi8qKlxuICogTWFwIGEgcmVzb2x2ZS1ob29rIHNwZWNpZmllciB0byBhIHZlcnNpb25lZCB3YXRjaGVkIGAudHNgIGZpbGUgVVJMLlxuICogQ292ZXJzIHJlbGF0aXZlIGAuanNgIC8gYC50c2AgLyBleHRlbnNpb25sZXNzIGltcG9ydHMgYW5kIGJhcmUgd29ya3NwYWNlXG4gKiBwYWNrYWdlIG5hbWVzIChkeW5hbWljIGBpbXBvcnQoKWAgbmV2ZXIgZ29lcyB0aHJvdWdoIFNXQyBwYXRoIHJld3JpdGUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZVNlcnZlU3BlY2lmaWVyKG9wdGlvbnM6IFJld3JpdGVTZXJ2ZVNwZWNpZmllck9wdGlvbnMpOiBzdHJpbmcgfCBudWxsIHtcblx0Y29uc3QgeyBzcGVjaWZpZXIsIHBhcmVudFVybCwgaXNXYXRjaGVkVHMsIHJlc29sdmVCYXJlLCB2ZXJzaW9uRmlsZVVybCB9ID0gb3B0aW9ucztcblxuXHRjb25zdCByZWxhdGl2ZVRzID0gcmVzb2x2ZVJlbGF0aXZlV2F0Y2hlZFRzKHNwZWNpZmllciwgcGFyZW50VXJsLCBpc1dhdGNoZWRUcyk7XG5cdGlmIChyZWxhdGl2ZVRzICE9IG51bGwpIHtcblx0XHRyZXR1cm4gdmVyc2lvbkZpbGVVcmwocGF0aFRvRmlsZVVSTChyZWxhdGl2ZVRzKS50b1N0cmluZygpKTtcblx0fVxuXG5cdGNvbnN0IGJhcmVUYXJnZXQgPSByZXNvbHZlQmFyZShzcGVjaWZpZXIpO1xuXHRpZiAoYmFyZVRhcmdldCAhPSBudWxsICYmIGlzV2F0Y2hlZFRzKGJhcmVUYXJnZXQpKSB7XG5cdFx0cmV0dXJuIHZlcnNpb25GaWxlVXJsKHBhdGhUb0ZpbGVVUkwoYmFyZVRhcmdldCkudG9TdHJpbmcoKSk7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVJlbGF0aXZlV2F0Y2hlZFRzKFxuXHRzcGVjaWZpZXI6IHN0cmluZyxcblx0cGFyZW50VXJsOiBzdHJpbmcsXG5cdGlzV2F0Y2hlZFRzOiAoYWJzb2x1dGVQYXRoOiBzdHJpbmcpID0+IGJvb2xlYW4sXG4pOiBzdHJpbmcgfCBudWxsIHtcblx0aWYgKHBhY2thZ2VBbGlhc2VzLmlzQmFyZVNwZWNpZmllcihzcGVjaWZpZXIpKSByZXR1cm4gbnVsbDtcblx0aWYgKCEoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoXCIuXCIpIHx8IHNwZWNpZmllci5zdGFydHNXaXRoKFwiL1wiKSkpIHJldHVybiBudWxsO1xuXG5cdGNvbnN0IHBhcmVudENsZWFuID0gcGFyZW50VXJsLnNwbGl0KFwiP1wiKVswXTtcblx0aWYgKHBhcmVudENsZWFuID09IG51bGwgfHwgcGFyZW50Q2xlYW4gPT09IFwiXCIpIHJldHVybiBudWxsO1xuXG5cdGxldCByZXNvbHZlZDogVVJMO1xuXHR0cnkge1xuXHRcdHJlc29sdmVkID0gbmV3IFVSTChzcGVjaWZpZXIsIHBhcmVudENsZWFuKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKHJlc29sdmVkLnByb3RvY29sICE9PSBcImZpbGU6XCIpIHJldHVybiBudWxsO1xuXG5cdGxldCBmaWxlUGF0aCA9IGZpbGVVUkxUb1BhdGgocmVzb2x2ZWQpO1xuXHRpZiAoZmlsZVBhdGguZW5kc1dpdGgoXCIuanNcIikpIHtcblx0XHRmaWxlUGF0aCA9IGAke2ZpbGVQYXRoLnNsaWNlKDAsIC0zKX0udHNgO1xuXHR9IGVsc2UgaWYgKCFmaWxlUGF0aC5lbmRzV2l0aChcIi50c1wiKSkge1xuXHRcdGZpbGVQYXRoID0gYCR7ZmlsZVBhdGh9LnRzYDtcblx0fVxuXG5cdHJldHVybiBpc1dhdGNoZWRUcyhmaWxlUGF0aCkgPyBmaWxlUGF0aCA6IG51bGw7XG59XG4iXSwibmFtZXMiOlsicmV3cml0ZVNlcnZlU3BlY2lmaWVyIiwib3B0aW9ucyIsInNwZWNpZmllciIsInBhcmVudFVybCIsImlzV2F0Y2hlZFRzIiwicmVzb2x2ZUJhcmUiLCJ2ZXJzaW9uRmlsZVVybCIsInJlbGF0aXZlVHMiLCJyZXNvbHZlUmVsYXRpdmVXYXRjaGVkVHMiLCJwYXRoVG9GaWxlVVJMIiwidG9TdHJpbmciLCJiYXJlVGFyZ2V0IiwicGFja2FnZUFsaWFzZXMiLCJpc0JhcmVTcGVjaWZpZXIiLCJzdGFydHNXaXRoIiwicGFyZW50Q2xlYW4iLCJzcGxpdCIsInJlc29sdmVkIiwiVVJMIiwicHJvdG9jb2wiLCJmaWxlUGF0aCIsImZpbGVVUkxUb1BhdGgiLCJlbmRzV2l0aCIsInNsaWNlIl0sIm1hcHBpbmdzIjoiOzs7OytCQWdCZ0JBOzs7ZUFBQUE7Ozt5QkFoQjZCO3NCQUNkO0FBZXhCLFNBQVNBLHNCQUFzQkMsT0FBcUM7SUFDMUUsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsV0FBVyxFQUFFQyxXQUFXLEVBQUVDLGNBQWMsRUFBRSxHQUFHTDtJQUUzRSxNQUFNTSxhQUFhQyx5QkFBeUJOLFdBQVdDLFdBQVdDO0lBQ2xFLElBQUlHLGNBQWMsTUFBTTtRQUN2QixPQUFPRCxlQUFlRyxJQUFBQSxzQkFBYSxFQUFDRixZQUFZRyxRQUFRO0lBQ3pEO0lBRUEsTUFBTUMsYUFBYU4sWUFBWUg7SUFDL0IsSUFBSVMsY0FBYyxRQUFRUCxZQUFZTyxhQUFhO1FBQ2xELE9BQU9MLGVBQWVHLElBQUFBLHNCQUFhLEVBQUNFLFlBQVlELFFBQVE7SUFDekQ7SUFFQSxPQUFPO0FBQ1I7QUFFQSxTQUFTRix5QkFDUk4sU0FBaUIsRUFDakJDLFNBQWlCLEVBQ2pCQyxXQUE4QztJQUU5QyxJQUFJUSxvQkFBYyxDQUFDQyxlQUFlLENBQUNYLFlBQVksT0FBTztJQUN0RCxJQUFJLENBQUVBLENBQUFBLFVBQVVZLFVBQVUsQ0FBQyxRQUFRWixVQUFVWSxVQUFVLENBQUMsSUFBRyxHQUFJLE9BQU87SUFFdEUsTUFBTUMsY0FBY1osVUFBVWEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQzNDLElBQUlELGVBQWUsUUFBUUEsZ0JBQWdCLElBQUksT0FBTztJQUV0RCxJQUFJRTtJQUNKLElBQUk7UUFDSEEsV0FBVyxJQUFJQyxJQUFJaEIsV0FBV2E7SUFDL0IsRUFBRSxPQUFNO1FBQ1AsT0FBTztJQUNSO0lBQ0EsSUFBSUUsU0FBU0UsUUFBUSxLQUFLLFNBQVMsT0FBTztJQUUxQyxJQUFJQyxXQUFXQyxJQUFBQSxzQkFBYSxFQUFDSjtJQUM3QixJQUFJRyxTQUFTRSxRQUFRLENBQUMsUUFBUTtRQUM3QkYsV0FBVyxHQUFHQSxTQUFTRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3pDLE9BQU8sSUFBSSxDQUFDSCxTQUFTRSxRQUFRLENBQUMsUUFBUTtRQUNyQ0YsV0FBVyxHQUFHQSxTQUFTLEdBQUcsQ0FBQztJQUM1QjtJQUVBLE9BQU9oQixZQUFZZ0IsWUFBWUEsV0FBVztBQUMzQyJ9