@decohere/flux 0.0.1-dev.39 → 0.0.1-dev.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decohere/flux",
3
- "version": "0.0.1-dev.39",
3
+ "version": "0.0.1-dev.4",
4
4
  "description": "Hot module reload server for Node.js ESM applications",
5
5
  "keywords": [
6
6
  "typescript",
@@ -19,18 +19,23 @@
19
19
  "types": "./types/src/index.d.ts",
20
20
  "import": "./es6/src/index.js",
21
21
  "require": "./commonjs/src/index.js"
22
+ },
23
+ "./serve": {
24
+ "types": "./types/src/serve.d.ts",
25
+ "import": "./es6/src/serve.js"
22
26
  }
23
27
  },
28
+ "bin": {
29
+ "ember": "./es6/src/serve.js"
30
+ },
24
31
  "scripts": {
25
32
  "test": "echo \"Error: no test specified\" && exit 1"
26
33
  },
27
34
  "dependencies": {
28
- "@decohere/crucible": "0.0.1-dev.39",
29
- "@decohere/forge": "0.0.1-dev.39",
30
- "@decohere/mesh": "0.0.1-dev.39",
31
- "@decohere/nexus": "0.0.1-dev.39",
32
- "@decohere/scribe": "0.0.1-dev.39",
33
- "rxjs": "^7.8.2"
35
+ "@decohere/crucible": "0.0.1-dev.4",
36
+ "@decohere/mesh": "0.0.1-dev.4",
37
+ "@decohere/nexus": "0.0.1-dev.4",
38
+ "@decohere/scribe": "0.0.1-dev.4"
34
39
  },
35
40
  "devDependencies": {}
36
41
  }
@@ -0,0 +1,17 @@
1
+ import { DecohereCommand } from "../../nexus/src/cli/index.js";
2
+ import { ServeCommand } from "./serve.command.js";
3
+ export class EmberCommand extends DecohereCommand {
4
+ constructor(commands, handler){
5
+ super(EmberCommand);
6
+ this.exitOverride();
7
+ this.registerSubcommand({
8
+ serve: ServeCommand,
9
+ ...commands
10
+ }, handler);
11
+ }
12
+ run(_actions, _options) {
13
+ return this.help();
14
+ }
15
+ }
16
+
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2VtYmVyLmNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25zIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7XG5cdHR5cGUgQ29tbWFuZEhhbmRsZXIsXG5cdHR5cGUgQ29tbWFuZFJlc3BvbnNlLFxuXHR0eXBlIENvbW1hbmRUeXBlLFxuXHREZWNvaGVyZUNvbW1hbmQsXG59IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBTZXJ2ZUNvbW1hbmQgfSBmcm9tIFwiLi9zZXJ2ZS5jb21tYW5kLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBFbWJlckNvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQge1xuXHRwdWJsaWMgY29uc3RydWN0b3IoY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmRUeXBlPiwgaGFuZGxlcjogQ29tbWFuZEhhbmRsZXIpIHtcblx0XHRzdXBlcihFbWJlckNvbW1hbmQpO1xuXHRcdHRoaXMuZXhpdE92ZXJyaWRlKCk7XG5cdFx0dGhpcy5yZWdpc3RlclN1YmNvbW1hbmQoeyBzZXJ2ZTogU2VydmVDb21tYW5kLCAuLi5jb21tYW5kcyB9LCBoYW5kbGVyKTtcblx0fVxuXG5cdHB1YmxpYyBydW4oX2FjdGlvbnM6IEFjdGlvbnMsIF9vcHRpb25zOiBuZXZlcik6IFByb21pc2U8Q29tbWFuZFJlc3BvbnNlPiB7XG5cdFx0cmV0dXJuIHRoaXMuaGVscCgpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiRGVjb2hlcmVDb21tYW5kIiwiU2VydmVDb21tYW5kIiwiRW1iZXJDb21tYW5kIiwiY29tbWFuZHMiLCJoYW5kbGVyIiwiZXhpdE92ZXJyaWRlIiwicmVnaXN0ZXJTdWJjb21tYW5kIiwic2VydmUiLCJydW4iLCJfYWN0aW9ucyIsIl9vcHRpb25zIiwiaGVscCJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FJQ0EsZUFBZSxRQUNULCtCQUFzQjtBQUM3QixTQUFTQyxZQUFZLFFBQVEscUJBQXFCO0FBRWxELE9BQU8sTUFBTUMscUJBQXFCRjtJQUNqQyxZQUFtQkcsUUFBcUMsRUFBRUMsT0FBdUIsQ0FBRTtRQUNsRixLQUFLLENBQUNGO1FBQ04sSUFBSSxDQUFDRyxZQUFZO1FBQ2pCLElBQUksQ0FBQ0Msa0JBQWtCLENBQUM7WUFBRUMsT0FBT047WUFBYyxHQUFHRSxRQUFRO1FBQUMsR0FBR0M7SUFDL0Q7SUFFT0ksSUFBSUMsUUFBaUIsRUFBRUMsUUFBZSxFQUE0QjtRQUN4RSxPQUFPLElBQUksQ0FBQ0MsSUFBSTtJQUNqQjtBQUNEIn0=
@@ -0,0 +1,19 @@
1
+ import { WorkspaceFactory } from "../../mesh/src/index.js";
2
+ import { ModuleManifest } from "../../nexus/src/cli/index.js";
3
+ import { EmberCommand } from "./ember.command.js";
4
+ import { WorkspaceServeAction } from "./workspace-serve.action.js";
5
+ export const EmberActions = {};
6
+ export class EmberModule extends ModuleManifest {
7
+ id = "ember";
8
+ command = EmberCommand;
9
+ actions = {
10
+ serve: WorkspaceServeAction
11
+ };
12
+ createWorkspace(options) {
13
+ return WorkspaceFactory.create({
14
+ configFile: options.configFile
15
+ });
16
+ }
17
+ }
18
+
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2VtYmVyLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdvcmtzcGFjZSB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgV29ya3NwYWNlRmFjdG9yeSB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VGYWN0b3J5T3B0aW9ucyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBNb2R1bGVNYW5pZmVzdCB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRhaW5lckJ1aWxkZXIgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NvbXBvc2l0aW9uXCI7XG5pbXBvcnQgeyBFbWJlckNvbW1hbmQgfSBmcm9tIFwiLi9lbWJlci5jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBXb3Jrc3BhY2VTZXJ2ZUFjdGlvbiB9IGZyb20gXCIuL3dvcmtzcGFjZS1zZXJ2ZS5hY3Rpb24uanNcIjtcblxuZXhwb3J0IHR5cGUgRW1iZXJNb2R1bGVDb250ZXh0ID0ge1xuXHRidWlsZGVyOiBDb250YWluZXJCdWlsZGVyO1xuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZTtcbn07XG5cbmV4cG9ydCB0eXBlIEVtYmVyTW9kdWxlUmVzdWx0ID0ge1xuXHRhY3Rpb25zOiB0eXBlb2YgRW1iZXJBY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IEVtYmVyQWN0aW9ucyA9IHt9O1xuXG5leHBvcnQgY2xhc3MgRW1iZXJNb2R1bGUgZXh0ZW5kcyBNb2R1bGVNYW5pZmVzdCB7XG5cdHB1YmxpYyByZWFkb25seSBpZCA9IFwiZW1iZXJcIjtcblx0cHVibGljIHJlYWRvbmx5IGNvbW1hbmQgPSBFbWJlckNvbW1hbmQ7XG5cdHB1YmxpYyByZWFkb25seSBhY3Rpb25zID0ge1xuXHRcdHNlcnZlOiBXb3Jrc3BhY2VTZXJ2ZUFjdGlvbixcblx0fTtcblxuXHRwdWJsaWMgb3ZlcnJpZGUgY3JlYXRlV29ya3NwYWNlKG9wdGlvbnM6IFdvcmtzcGFjZUZhY3RvcnlPcHRpb25zKSB7XG5cdFx0cmV0dXJuIFdvcmtzcGFjZUZhY3RvcnkuY3JlYXRlKHsgY29uZmlnRmlsZTogb3B0aW9ucy5jb25maWdGaWxlIH0pO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiV29ya3NwYWNlRmFjdG9yeSIsIk1vZHVsZU1hbmlmZXN0IiwiRW1iZXJDb21tYW5kIiwiV29ya3NwYWNlU2VydmVBY3Rpb24iLCJFbWJlckFjdGlvbnMiLCJFbWJlck1vZHVsZSIsImlkIiwiY29tbWFuZCIsImFjdGlvbnMiLCJzZXJ2ZSIsImNyZWF0ZVdvcmtzcGFjZSIsIm9wdGlvbnMiLCJjcmVhdGUiLCJjb25maWdGaWxlIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxnQkFBZ0IsUUFBUSwwQkFBaUI7QUFFbEQsU0FBU0MsY0FBYyxRQUFRLCtCQUFzQjtBQUVyRCxTQUFTQyxZQUFZLFFBQVEscUJBQXFCO0FBQ2xELFNBQVNDLG9CQUFvQixRQUFRLDhCQUE4QjtBQVduRSxPQUFPLE1BQU1DLGVBQWUsQ0FBQyxFQUFFO0FBRS9CLE9BQU8sTUFBTUMsb0JBQW9CSjtJQUNoQkssS0FBSyxRQUFRO0lBQ2JDLFVBQVVMLGFBQWE7SUFDdkJNLFVBQVU7UUFDekJDLE9BQU9OO0lBQ1IsRUFBRTtJQUVjTyxnQkFBZ0JDLE9BQWdDLEVBQUU7UUFDakUsT0FBT1gsaUJBQWlCWSxNQUFNLENBQUM7WUFBRUMsWUFBWUYsUUFBUUUsVUFBVTtRQUFDO0lBQ2pFO0FBQ0QifQ==
@@ -0,0 +1,26 @@
1
+ import { registerHooks } from "node:module";
2
+ const resolvers = new Set();
3
+ let initialized = false;
4
+ export function initModuleHooks() {
5
+ if (initialized) {
6
+ return;
7
+ }
8
+ initialized = true;
9
+ registerHooks({
10
+ resolve: (specifier, context, next)=>{
11
+ const result = next(specifier, context);
12
+ for (const handler of resolvers){
13
+ handler(result, context.parentURL ?? "");
14
+ }
15
+ return result;
16
+ }
17
+ });
18
+ }
19
+ export function addResolverHook(fn) {
20
+ resolvers.add(fn);
21
+ }
22
+ export function removeResolverHook(fn) {
23
+ resolvers.delete(fn);
24
+ }
25
+
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2hvdC1tb2R1bGUtaG9va3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZXNvbHZlRm5PdXRwdXQsIFJlc29sdmVIb29rQ29udGV4dCB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJIb29rcyB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlSGFuZGxlciA9IChyZXN1bHQ6IFJlc29sdmVGbk91dHB1dCwgcGFyZW50VXJsOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmNvbnN0IHJlc29sdmVycyA9IG5ldyBTZXQ8UmVzb2x2ZUhhbmRsZXI+KCk7XG5sZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRNb2R1bGVIb29rcygpOiB2b2lkIHtcblx0aWYgKGluaXRpYWxpemVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGluaXRpYWxpemVkID0gdHJ1ZTtcblxuXHRyZWdpc3Rlckhvb2tzKHtcblx0XHRyZXNvbHZlOiAoXG5cdFx0XHRzcGVjaWZpZXI6IHN0cmluZyxcblx0XHRcdGNvbnRleHQ6IFJlc29sdmVIb29rQ29udGV4dCxcblx0XHRcdG5leHQ6IChzcGVjaWZpZXI6IHN0cmluZywgY29udGV4dD86IFBhcnRpYWw8UmVzb2x2ZUhvb2tDb250ZXh0PikgPT4gUmVzb2x2ZUZuT3V0cHV0LFxuXHRcdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gbmV4dChzcGVjaWZpZXIsIGNvbnRleHQpIGFzIFJlc29sdmVGbk91dHB1dDtcblx0XHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiByZXNvbHZlcnMpIHtcblx0XHRcdFx0aGFuZGxlcihyZXN1bHQsIGNvbnRleHQucGFyZW50VVJMID8/IFwiXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFJlc29sdmVySG9vayhmbjogUmVzb2x2ZUhhbmRsZXIpOiB2b2lkIHtcblx0cmVzb2x2ZXJzLmFkZChmbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVSZXNvbHZlckhvb2soZm46IFJlc29sdmVIYW5kbGVyKTogdm9pZCB7XG5cdHJlc29sdmVycy5kZWxldGUoZm4pO1xufVxuIl0sIm5hbWVzIjpbInJlZ2lzdGVySG9va3MiLCJyZXNvbHZlcnMiLCJTZXQiLCJpbml0aWFsaXplZCIsImluaXRNb2R1bGVIb29rcyIsInJlc29sdmUiLCJzcGVjaWZpZXIiLCJjb250ZXh0IiwibmV4dCIsInJlc3VsdCIsImhhbmRsZXIiLCJwYXJlbnRVUkwiLCJhZGRSZXNvbHZlckhvb2siLCJmbiIsImFkZCIsInJlbW92ZVJlc29sdmVySG9vayIsImRlbGV0ZSJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsYUFBYSxRQUFRLGNBQWM7QUFJNUMsTUFBTUMsWUFBWSxJQUFJQztBQUN0QixJQUFJQyxjQUFjO0FBRWxCLE9BQU8sU0FBU0M7SUFDZixJQUFJRCxhQUFhO1FBQ2hCO0lBQ0Q7SUFDQUEsY0FBYztJQUVkSCxjQUFjO1FBQ2JLLFNBQVMsQ0FDUkMsV0FDQUMsU0FDQUM7WUFFQSxNQUFNQyxTQUFTRCxLQUFLRixXQUFXQztZQUMvQixLQUFLLE1BQU1HLFdBQVdULFVBQVc7Z0JBQ2hDUyxRQUFRRCxRQUFRRixRQUFRSSxTQUFTLElBQUk7WUFDdEM7WUFDQSxPQUFPRjtRQUNSO0lBQ0Q7QUFDRDtBQUVBLE9BQU8sU0FBU0csZ0JBQWdCQyxFQUFrQjtJQUNqRFosVUFBVWEsR0FBRyxDQUFDRDtBQUNmO0FBRUEsT0FBTyxTQUFTRSxtQkFBbUJGLEVBQWtCO0lBQ3BEWixVQUFVZSxNQUFNLENBQUNIO0FBQ2xCIn0=
@@ -0,0 +1,201 @@
1
+ import { EventEmitter } from "node:events";
2
+ import path from "node:path";
3
+ import { io } from "../../nexus/src/io/index.js";
4
+ import { debounce } from "../../nexus/src/system/index.js";
5
+ import { addResolverHook, initModuleHooks, removeResolverHook } from "./hot-module-hooks.js";
6
+ const currentFilePath = io.fileUrlToPath(import.meta.url);
7
+ export class HotReloadServer extends EventEmitter {
8
+ logger;
9
+ disposed = false;
10
+ entryModule;
11
+ entry;
12
+ sourceFiles = [];
13
+ moduleCache = new Map();
14
+ dependencies = new Map();
15
+ watchers = [];
16
+ constructor(logger){
17
+ super();
18
+ this.logger = logger;
19
+ }
20
+ async start(entry, ...watchDirs) {
21
+ this.entryModule = entry;
22
+ this.sourceFiles = await this.getSourceFiles(watchDirs);
23
+ this.configureModuleHooks();
24
+ this.invalidateAllSourceFiles();
25
+ await this.watch(watchDirs);
26
+ this.logger.trace("Serving", entry);
27
+ this.logger.trace("Hot reload watching", watchDirs);
28
+ await this.bootEntry();
29
+ }
30
+ async dispose() {
31
+ if (this.disposed) return;
32
+ this.disposed = true;
33
+ removeResolverHook(this.onResolve);
34
+ for (const watcher of this.watchers){
35
+ watcher.close();
36
+ }
37
+ await this.disposeEntry();
38
+ }
39
+ removeSourceFiles(...sourceFiles) {
40
+ this.sourceFiles = this.sourceFiles.filter((sourceFile)=>!sourceFiles.includes(sourceFile));
41
+ }
42
+ async getSourceFiles(dirs) {
43
+ const patterns = dirs.map((dir)=>`${dir}/**/*.js`);
44
+ const files = await io.findFiles(patterns);
45
+ return files.map((f)=>f.fullPath);
46
+ }
47
+ configureModuleHooks() {
48
+ initModuleHooks();
49
+ addResolverHook(this.onResolve);
50
+ }
51
+ onResolve = (result, parentUrl)=>{
52
+ const { url } = result;
53
+ const parentUrlClean = parentUrl.split("?")[0];
54
+ const isSource = this.isSourceModule(url);
55
+ const parentIsSource = this.isSourceModule(parentUrlClean);
56
+ if (isSource || parentIsSource) {
57
+ this.trackDependency(url, parentUrl);
58
+ }
59
+ if (!isSource) {
60
+ return;
61
+ }
62
+ result.url = this.getCachedOrNew(url);
63
+ };
64
+ isSourceModule(url) {
65
+ const path = io.fileUrlToPath(url);
66
+ return this.sourceFiles.includes(path);
67
+ }
68
+ getDependencyGraph(moduleId, parentModules = []) {
69
+ if (this.isSelf(moduleId)) {
70
+ return [];
71
+ }
72
+ const moduleDeps = this.dependencies.get(moduleId) ?? [];
73
+ if (parentModules.includes(moduleId)) {
74
+ this.logger.error(`Circular reference detected: ${moduleId}`);
75
+ return [];
76
+ }
77
+ let subDeps = Array.of();
78
+ for (const dep of moduleDeps){
79
+ if (!this.sourceFiles.includes(dep)) continue;
80
+ const subs = this.getDependencyGraph(dep, [
81
+ moduleId,
82
+ ...parentModules
83
+ ]);
84
+ subDeps = [
85
+ ...subDeps,
86
+ ...subs
87
+ ];
88
+ }
89
+ return [
90
+ ...new Set([
91
+ ...moduleDeps,
92
+ ...subDeps
93
+ ])
94
+ ];
95
+ }
96
+ trackDependency(url, parentUrl) {
97
+ const filePath = io.fileUrlToPath(url);
98
+ const parentPath = io.fileUrlToPath(parentUrl.split("?")[0]);
99
+ const deps = this.dependencies.get(filePath) ?? [];
100
+ const updatedDeps = new Set([
101
+ ...deps,
102
+ parentPath
103
+ ]);
104
+ this.dependencies.set(filePath, [
105
+ ...updatedDeps
106
+ ]);
107
+ }
108
+ getCachedOrNew(moduleUrl) {
109
+ const filePath = io.fileUrlToPath(moduleUrl);
110
+ const cached = this.moduleCache.get(filePath);
111
+ const versioned = cached ?? this.versionModule(moduleUrl);
112
+ this.moduleCache.set(filePath, versioned);
113
+ return versioned;
114
+ }
115
+ versionModule(moduleUrl) {
116
+ const versionedUrl = new URL(moduleUrl);
117
+ versionedUrl.searchParams.set("version", Date.now().toString());
118
+ return versionedUrl.toString();
119
+ }
120
+ watch = async (dirs)=>{
121
+ for (const dir of dirs){
122
+ const watcher = io.watch(dir, {
123
+ include: [
124
+ "**/*.js"
125
+ ],
126
+ ignoreInitial: true
127
+ });
128
+ watcher.on("add", this.onFileAdded).on("change", this.onSourceFileChanged).on("unlink", this.onFileDeleted);
129
+ this.watchers.push(watcher);
130
+ }
131
+ };
132
+ onFileAdded = async ({ fullPath })=>{
133
+ this.sourceFiles.push(fullPath);
134
+ this.moduleCache.set(fullPath, null);
135
+ this.reloadIfAffected(fullPath);
136
+ };
137
+ onSourceFileChanged = async ({ fullPath })=>{
138
+ if (!this.reloadIfAffected(fullPath)) {
139
+ this.logger.trace(`${fullPath} is not part of the current dependency graph. Not reloading entry.`);
140
+ }
141
+ };
142
+ onFileDeleted = async ({ fullPath })=>{
143
+ this.removeSourceFiles(fullPath);
144
+ };
145
+ reloadIfAffected(fullPath) {
146
+ const deps = this.getDependencyGraph(fullPath);
147
+ const modules = [
148
+ ...new Set([
149
+ ...deps,
150
+ fullPath
151
+ ])
152
+ ];
153
+ if (!modules.includes(this.entryModule)) {
154
+ return false;
155
+ }
156
+ this.invlidateModule(...modules);
157
+ this.disposeAndBoot();
158
+ return true;
159
+ }
160
+ isSelf(urlLike) {
161
+ return currentFilePath === path.resolve(io.fileUrlToPath(urlLike));
162
+ }
163
+ invlidateModule(...modules) {
164
+ for (const module of modules){
165
+ this.moduleCache.set(module, null);
166
+ }
167
+ // Prune invalidated modules from all parent lists so stale relationships
168
+ // are cleared. The fresh boot rebuilds only what is actually imported.
169
+ for (const [child, parents] of this.dependencies){
170
+ const pruned = parents.filter((p)=>!modules.includes(p));
171
+ if (pruned.length === 0) {
172
+ this.dependencies.delete(child);
173
+ } else {
174
+ this.dependencies.set(child, pruned);
175
+ }
176
+ }
177
+ }
178
+ invalidateAllSourceFiles() {
179
+ for (const file of this.sourceFiles){
180
+ this.moduleCache.set(file, null);
181
+ }
182
+ }
183
+ disposeAndBoot = debounce(async ()=>{
184
+ await this.disposeEntry();
185
+ await this.bootEntry();
186
+ }, 250);
187
+ async disposeEntry() {
188
+ await this.entry?.[Symbol.asyncDispose]();
189
+ }
190
+ async bootEntry() {
191
+ try {
192
+ const version = this.versionModule(io.pathToFileUrl(this.entryModule));
193
+ this.entry = (await import(version))?.default;
194
+ this.emit("reboot");
195
+ } catch (error) {
196
+ this.logger.error(`There was an error booting the entry point. Your application may not function as expected`, error);
197
+ }
198
+ }
199
+ }
200
+
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2hvdC1yZWxvYWQtc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZlRm5PdXRwdXQgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHR5cGUgRmlsZSwgaW8gfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2lvXCI7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvc3lzdGVtXCI7XG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgeyBhZGRSZXNvbHZlckhvb2ssIGluaXRNb2R1bGVIb29rcywgcmVtb3ZlUmVzb2x2ZXJIb29rIH0gZnJvbSBcIi4vaG90LW1vZHVsZS1ob29rcy5qc1wiO1xuXG5jb25zdCBjdXJyZW50RmlsZVBhdGggPSBpby5maWxlVXJsVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90UmVsb2FkU2VydmVyRXZlbnRzIHtcblx0cmVib290OiBbXTtcbn1cblxuZXhwb3J0IGNsYXNzIEhvdFJlbG9hZFNlcnZlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxIb3RSZWxvYWRTZXJ2ZXJFdmVudHM+IHtcblx0cHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlcjtcblx0cHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuXHRwcml2YXRlIGVudHJ5TW9kdWxlOiBzdHJpbmc7XG5cdHByaXZhdGUgZW50cnk6IEFzeW5jRGlzcG9zYWJsZTtcblx0cHJpdmF0ZSBzb3VyY2VGaWxlczogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSBtb2R1bGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmcgfCBudWxsPigpO1xuXHRwcml2YXRlIGRlcGVuZGVuY2llcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcblx0cHJpdmF0ZSB3YXRjaGVyczogUmV0dXJuVHlwZTx0eXBlb2YgaW8ud2F0Y2g+W10gPSBbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IobG9nZ2VyOiBMb2dnZXIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIHN0YXJ0KGVudHJ5OiBzdHJpbmcsIC4uLndhdGNoRGlyczogc3RyaW5nW10pIHtcblx0XHR0aGlzLmVudHJ5TW9kdWxlID0gZW50cnk7XG5cdFx0dGhpcy5zb3VyY2VGaWxlcyA9IGF3YWl0IHRoaXMuZ2V0U291cmNlRmlsZXMod2F0Y2hEaXJzKTtcblx0XHR0aGlzLmNvbmZpZ3VyZU1vZHVsZUhvb2tzKCk7XG5cdFx0dGhpcy5pbnZhbGlkYXRlQWxsU291cmNlRmlsZXMoKTtcblx0XHRhd2FpdCB0aGlzLndhdGNoKHdhdGNoRGlycyk7XG5cdFx0dGhpcy5sb2dnZXIudHJhY2UoXCJTZXJ2aW5nXCIsIGVudHJ5KTtcblx0XHR0aGlzLmxvZ2dlci50cmFjZShcIkhvdCByZWxvYWQgd2F0Y2hpbmdcIiwgd2F0Y2hEaXJzKTtcblx0XHRhd2FpdCB0aGlzLmJvb3RFbnRyeSgpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGRpc3Bvc2UoKSB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybjtcblx0XHR0aGlzLmRpc3Bvc2VkID0gdHJ1ZTtcblx0XHRyZW1vdmVSZXNvbHZlckhvb2sodGhpcy5vblJlc29sdmUpO1xuXHRcdGZvciAoY29uc3Qgd2F0Y2hlciBvZiB0aGlzLndhdGNoZXJzKSB7XG5cdFx0XHR3YXRjaGVyLmNsb3NlKCk7XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuZGlzcG9zZUVudHJ5KCk7XG5cdH1cblxuXHRwcml2YXRlIHJlbW92ZVNvdXJjZUZpbGVzKC4uLnNvdXJjZUZpbGVzOiBzdHJpbmdbXSkge1xuXHRcdHRoaXMuc291cmNlRmlsZXMgPSB0aGlzLnNvdXJjZUZpbGVzLmZpbHRlcihcblx0XHRcdChzb3VyY2VGaWxlKSA9PiAhc291cmNlRmlsZXMuaW5jbHVkZXMoc291cmNlRmlsZSksXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZ2V0U291cmNlRmlsZXMoZGlyczogc3RyaW5nW10pIHtcblx0XHRjb25zdCBwYXR0ZXJucyA9IGRpcnMubWFwKChkaXIpID0+IGAke2Rpcn0vKiovKi5qc2ApO1xuXHRcdGNvbnN0IGZpbGVzID0gYXdhaXQgaW8uZmluZEZpbGVzKHBhdHRlcm5zKTtcblx0XHRyZXR1cm4gZmlsZXMubWFwKChmKSA9PiBmLmZ1bGxQYXRoKTtcblx0fVxuXG5cdHByaXZhdGUgY29uZmlndXJlTW9kdWxlSG9va3MoKSB7XG5cdFx0aW5pdE1vZHVsZUhvb2tzKCk7XG5cdFx0YWRkUmVzb2x2ZXJIb29rKHRoaXMub25SZXNvbHZlKTtcblx0fVxuXG5cdHByaXZhdGUgb25SZXNvbHZlID0gKHJlc3VsdDogUmVzb2x2ZUZuT3V0cHV0LCBwYXJlbnRVcmw6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHsgdXJsIH0gPSByZXN1bHQ7XG5cdFx0Y29uc3QgcGFyZW50VXJsQ2xlYW4gPSBwYXJlbnRVcmwuc3BsaXQoXCI/XCIpWzBdO1xuXHRcdGNvbnN0IGlzU291cmNlID0gdGhpcy5pc1NvdXJjZU1vZHVsZSh1cmwpO1xuXHRcdGNvbnN0IHBhcmVudElzU291cmNlID0gdGhpcy5pc1NvdXJjZU1vZHVsZShwYXJlbnRVcmxDbGVhbik7XG5cblx0XHRpZiAoaXNTb3VyY2UgfHwgcGFyZW50SXNTb3VyY2UpIHtcblx0XHRcdHRoaXMudHJhY2tEZXBlbmRlbmN5KHVybCwgcGFyZW50VXJsKTtcblx0XHR9XG5cblx0XHRpZiAoIWlzU291cmNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cmVzdWx0LnVybCA9IHRoaXMuZ2V0Q2FjaGVkT3JOZXcodXJsKTtcblx0fTtcblxuXHRwcml2YXRlIGlzU291cmNlTW9kdWxlKHVybDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgcGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgodXJsKTtcblx0XHRyZXR1cm4gdGhpcy5zb3VyY2VGaWxlcy5pbmNsdWRlcyhwYXRoKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0RGVwZW5kZW5jeUdyYXBoKG1vZHVsZUlkOiBzdHJpbmcsIHBhcmVudE1vZHVsZXM6IHN0cmluZ1tdID0gW10pIHtcblx0XHRpZiAodGhpcy5pc1NlbGYobW9kdWxlSWQpKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Y29uc3QgbW9kdWxlRGVwcyA9IHRoaXMuZGVwZW5kZW5jaWVzLmdldChtb2R1bGVJZCkgPz8gW107XG5cdFx0aWYgKHBhcmVudE1vZHVsZXMuaW5jbHVkZXMobW9kdWxlSWQpKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkOiAke21vZHVsZUlkfWApO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGxldCBzdWJEZXBzID0gQXJyYXkub2Y8c3RyaW5nPigpO1xuXHRcdGZvciAoY29uc3QgZGVwIG9mIG1vZHVsZURlcHMpIHtcblx0XHRcdGlmICghdGhpcy5zb3VyY2VGaWxlcy5pbmNsdWRlcyhkZXApKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IHN1YnMgPSB0aGlzLmdldERlcGVuZGVuY3lHcmFwaChkZXAsIFttb2R1bGVJZCwgLi4ucGFyZW50TW9kdWxlc10pO1xuXHRcdFx0c3ViRGVwcyA9IFsuLi5zdWJEZXBzLCAuLi5zdWJzXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gWy4uLm5ldyBTZXQoWy4uLm1vZHVsZURlcHMsIC4uLnN1YkRlcHNdKV07XG5cdH1cblxuXHRwcml2YXRlIHRyYWNrRGVwZW5kZW5jeSh1cmw6IHN0cmluZywgcGFyZW50VXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCBmaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgodXJsKTtcblx0XHRjb25zdCBwYXJlbnRQYXRoID0gaW8uZmlsZVVybFRvUGF0aChwYXJlbnRVcmwuc3BsaXQoXCI/XCIpWzBdKTtcblx0XHRjb25zdCBkZXBzID0gdGhpcy5kZXBlbmRlbmNpZXMuZ2V0KGZpbGVQYXRoKSA/PyBbXTtcblx0XHRjb25zdCB1cGRhdGVkRGVwcyA9IG5ldyBTZXQoWy4uLmRlcHMsIHBhcmVudFBhdGhdKTtcblx0XHR0aGlzLmRlcGVuZGVuY2llcy5zZXQoZmlsZVBhdGgsIFsuLi51cGRhdGVkRGVwc10pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDYWNoZWRPck5ldyhtb2R1bGVVcmw6IHN0cmluZykge1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gaW8uZmlsZVVybFRvUGF0aChtb2R1bGVVcmwpO1xuXHRcdGNvbnN0IGNhY2hlZCA9IHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGZpbGVQYXRoKTtcblx0XHRjb25zdCB2ZXJzaW9uZWQgPSBjYWNoZWQgPz8gdGhpcy52ZXJzaW9uTW9kdWxlKG1vZHVsZVVybCk7XG5cdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQoZmlsZVBhdGgsIHZlcnNpb25lZCk7XG5cdFx0cmV0dXJuIHZlcnNpb25lZDtcblx0fVxuXG5cdHByaXZhdGUgdmVyc2lvbk1vZHVsZShtb2R1bGVVcmw6IHN0cmluZykge1xuXHRcdGNvbnN0IHZlcnNpb25lZFVybCA9IG5ldyBVUkwobW9kdWxlVXJsKTtcblx0XHR2ZXJzaW9uZWRVcmwuc2VhcmNoUGFyYW1zLnNldChcInZlcnNpb25cIiwgRGF0ZS5ub3coKS50b1N0cmluZygpKTtcblx0XHRyZXR1cm4gdmVyc2lvbmVkVXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRwcml2YXRlIHdhdGNoID0gYXN5bmMgKGRpcnM6IHN0cmluZ1tdKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuXHRcdFx0Y29uc3Qgd2F0Y2hlciA9IGlvLndhdGNoKGRpciwgeyBpbmNsdWRlOiBbXCIqKi8qLmpzXCJdLCBpZ25vcmVJbml0aWFsOiB0cnVlIH0pO1xuXHRcdFx0d2F0Y2hlclxuXHRcdFx0XHQub24oXCJhZGRcIiwgdGhpcy5vbkZpbGVBZGRlZClcblx0XHRcdFx0Lm9uKFwiY2hhbmdlXCIsIHRoaXMub25Tb3VyY2VGaWxlQ2hhbmdlZClcblx0XHRcdFx0Lm9uKFwidW5saW5rXCIsIHRoaXMub25GaWxlRGVsZXRlZCk7XG5cdFx0XHR0aGlzLndhdGNoZXJzLnB1c2god2F0Y2hlcik7XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgb25GaWxlQWRkZWQgPSBhc3luYyAoeyBmdWxsUGF0aCB9OiBGaWxlKSA9PiB7XG5cdFx0dGhpcy5zb3VyY2VGaWxlcy5wdXNoKGZ1bGxQYXRoKTtcblx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChmdWxsUGF0aCwgbnVsbCk7XG5cdFx0dGhpcy5yZWxvYWRJZkFmZmVjdGVkKGZ1bGxQYXRoKTtcblx0fTtcblxuXHRwcml2YXRlIG9uU291cmNlRmlsZUNoYW5nZWQgPSBhc3luYyAoeyBmdWxsUGF0aCB9OiBGaWxlKSA9PiB7XG5cdFx0aWYgKCF0aGlzLnJlbG9hZElmQWZmZWN0ZWQoZnVsbFBhdGgpKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci50cmFjZShcblx0XHRcdFx0YCR7ZnVsbFBhdGh9IGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IGRlcGVuZGVuY3kgZ3JhcGguIE5vdCByZWxvYWRpbmcgZW50cnkuYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgb25GaWxlRGVsZXRlZCA9IGFzeW5jICh7IGZ1bGxQYXRoIH06IEZpbGUpID0+IHtcblx0XHR0aGlzLnJlbW92ZVNvdXJjZUZpbGVzKGZ1bGxQYXRoKTtcblx0fTtcblxuXHRwcml2YXRlIHJlbG9hZElmQWZmZWN0ZWQoZnVsbFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGRlcHMgPSB0aGlzLmdldERlcGVuZGVuY3lHcmFwaChmdWxsUGF0aCk7XG5cdFx0Y29uc3QgbW9kdWxlcyA9IFsuLi5uZXcgU2V0KFsuLi5kZXBzLCBmdWxsUGF0aF0pXTtcblxuXHRcdGlmICghbW9kdWxlcy5pbmNsdWRlcyh0aGlzLmVudHJ5TW9kdWxlKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuaW52bGlkYXRlTW9kdWxlKC4uLm1vZHVsZXMpO1xuXHRcdHRoaXMuZGlzcG9zZUFuZEJvb3QoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgaXNTZWxmKHVybExpa2U6IHN0cmluZykge1xuXHRcdHJldHVybiBjdXJyZW50RmlsZVBhdGggPT09IHBhdGgucmVzb2x2ZShpby5maWxlVXJsVG9QYXRoKHVybExpa2UpKTtcblx0fVxuXG5cdHByaXZhdGUgaW52bGlkYXRlTW9kdWxlKC4uLm1vZHVsZXM6IHN0cmluZ1tdKSB7XG5cdFx0Zm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQobW9kdWxlLCBudWxsKTtcblx0XHR9XG5cdFx0Ly8gUHJ1bmUgaW52YWxpZGF0ZWQgbW9kdWxlcyBmcm9tIGFsbCBwYXJlbnQgbGlzdHMgc28gc3RhbGUgcmVsYXRpb25zaGlwc1xuXHRcdC8vIGFyZSBjbGVhcmVkLiBUaGUgZnJlc2ggYm9vdCByZWJ1aWxkcyBvbmx5IHdoYXQgaXMgYWN0dWFsbHkgaW1wb3J0ZWQuXG5cdFx0Zm9yIChjb25zdCBbY2hpbGQsIHBhcmVudHNdIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG5cdFx0XHRjb25zdCBwcnVuZWQgPSBwYXJlbnRzLmZpbHRlcigocCkgPT4gIW1vZHVsZXMuaW5jbHVkZXMocCkpO1xuXHRcdFx0aWYgKHBydW5lZC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhpcy5kZXBlbmRlbmNpZXMuZGVsZXRlKGNoaWxkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZGVwZW5kZW5jaWVzLnNldChjaGlsZCwgcHJ1bmVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGludmFsaWRhdGVBbGxTb3VyY2VGaWxlcygpIHtcblx0XHRmb3IgKGNvbnN0IGZpbGUgb2YgdGhpcy5zb3VyY2VGaWxlcykge1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQoZmlsZSwgbnVsbCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBkaXNwb3NlQW5kQm9vdCA9IGRlYm91bmNlKGFzeW5jICgpID0+IHtcblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2VFbnRyeSgpO1xuXHRcdGF3YWl0IHRoaXMuYm9vdEVudHJ5KCk7XG5cdH0sIDI1MCk7XG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwb3NlRW50cnkoKSB7XG5cdFx0YXdhaXQgdGhpcy5lbnRyeT8uW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGJvb3RFbnRyeSgpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmVyc2lvbiA9IHRoaXMudmVyc2lvbk1vZHVsZShpby5wYXRoVG9GaWxlVXJsKHRoaXMuZW50cnlNb2R1bGUpKTtcblx0XHRcdHRoaXMuZW50cnkgPSAoYXdhaXQgaW1wb3J0KHZlcnNpb24pKT8uZGVmYXVsdDtcblx0XHRcdHRoaXMuZW1pdChcInJlYm9vdFwiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoXG5cdFx0XHRcdGBUaGVyZSB3YXMgYW4gZXJyb3IgYm9vdGluZyB0aGUgZW50cnkgcG9pbnQuIFlvdXIgYXBwbGljYXRpb24gbWF5IG5vdCBmdW5jdGlvbiBhcyBleHBlY3RlZGAsXG5cdFx0XHRcdGVycm9yLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJFdmVudEVtaXR0ZXIiLCJwYXRoIiwiaW8iLCJkZWJvdW5jZSIsImFkZFJlc29sdmVySG9vayIsImluaXRNb2R1bGVIb29rcyIsInJlbW92ZVJlc29sdmVySG9vayIsImN1cnJlbnRGaWxlUGF0aCIsImZpbGVVcmxUb1BhdGgiLCJ1cmwiLCJIb3RSZWxvYWRTZXJ2ZXIiLCJsb2dnZXIiLCJkaXNwb3NlZCIsImVudHJ5TW9kdWxlIiwiZW50cnkiLCJzb3VyY2VGaWxlcyIsIm1vZHVsZUNhY2hlIiwiTWFwIiwiZGVwZW5kZW5jaWVzIiwid2F0Y2hlcnMiLCJzdGFydCIsIndhdGNoRGlycyIsImdldFNvdXJjZUZpbGVzIiwiY29uZmlndXJlTW9kdWxlSG9va3MiLCJpbnZhbGlkYXRlQWxsU291cmNlRmlsZXMiLCJ3YXRjaCIsInRyYWNlIiwiYm9vdEVudHJ5IiwiZGlzcG9zZSIsIm9uUmVzb2x2ZSIsIndhdGNoZXIiLCJjbG9zZSIsImRpc3Bvc2VFbnRyeSIsInJlbW92ZVNvdXJjZUZpbGVzIiwiZmlsdGVyIiwic291cmNlRmlsZSIsImluY2x1ZGVzIiwiZGlycyIsInBhdHRlcm5zIiwibWFwIiwiZGlyIiwiZmlsZXMiLCJmaW5kRmlsZXMiLCJmIiwiZnVsbFBhdGgiLCJyZXN1bHQiLCJwYXJlbnRVcmwiLCJwYXJlbnRVcmxDbGVhbiIsInNwbGl0IiwiaXNTb3VyY2UiLCJpc1NvdXJjZU1vZHVsZSIsInBhcmVudElzU291cmNlIiwidHJhY2tEZXBlbmRlbmN5IiwiZ2V0Q2FjaGVkT3JOZXciLCJnZXREZXBlbmRlbmN5R3JhcGgiLCJtb2R1bGVJZCIsInBhcmVudE1vZHVsZXMiLCJpc1NlbGYiLCJtb2R1bGVEZXBzIiwiZ2V0IiwiZXJyb3IiLCJzdWJEZXBzIiwiQXJyYXkiLCJvZiIsImRlcCIsInN1YnMiLCJTZXQiLCJmaWxlUGF0aCIsInBhcmVudFBhdGgiLCJkZXBzIiwidXBkYXRlZERlcHMiLCJzZXQiLCJtb2R1bGVVcmwiLCJjYWNoZWQiLCJ2ZXJzaW9uZWQiLCJ2ZXJzaW9uTW9kdWxlIiwidmVyc2lvbmVkVXJsIiwiVVJMIiwic2VhcmNoUGFyYW1zIiwiRGF0ZSIsIm5vdyIsInRvU3RyaW5nIiwiaW5jbHVkZSIsImlnbm9yZUluaXRpYWwiLCJvbiIsIm9uRmlsZUFkZGVkIiwib25Tb3VyY2VGaWxlQ2hhbmdlZCIsIm9uRmlsZURlbGV0ZWQiLCJwdXNoIiwicmVsb2FkSWZBZmZlY3RlZCIsIm1vZHVsZXMiLCJpbnZsaWRhdGVNb2R1bGUiLCJkaXNwb3NlQW5kQm9vdCIsInVybExpa2UiLCJyZXNvbHZlIiwibW9kdWxlIiwiY2hpbGQiLCJwYXJlbnRzIiwicHJ1bmVkIiwicCIsImxlbmd0aCIsImRlbGV0ZSIsImZpbGUiLCJTeW1ib2wiLCJhc3luY0Rpc3Bvc2UiLCJ2ZXJzaW9uIiwicGF0aFRvRmlsZVVybCIsImRlZmF1bHQiLCJlbWl0Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxZQUFZLFFBQVEsY0FBYztBQUUzQyxPQUFPQyxVQUFVLFlBQVk7QUFDN0IsU0FBb0JDLEVBQUUsUUFBUSw4QkFBcUI7QUFDbkQsU0FBU0MsUUFBUSxRQUFRLGtDQUF5QjtBQUVsRCxTQUFTQyxlQUFlLEVBQUVDLGVBQWUsRUFBRUMsa0JBQWtCLFFBQVEsd0JBQXdCO0FBRTdGLE1BQU1DLGtCQUFrQkwsR0FBR00sYUFBYSxDQUFDLFlBQVlDLEdBQUc7QUFNeEQsT0FBTyxNQUFNQyx3QkFBd0JWO0lBQ25CVyxPQUFlO0lBQ3hCQyxXQUFXLE1BQU07SUFDakJDLFlBQW9CO0lBQ3BCQyxNQUF1QjtJQUN2QkMsY0FBd0IsRUFBRSxDQUFDO0lBQzNCQyxjQUFjLElBQUlDLE1BQTZCO0lBQy9DQyxlQUFlLElBQUlELE1BQXdCO0lBQzNDRSxXQUEwQyxFQUFFLENBQUM7SUFFckQsWUFBbUJSLE1BQWMsQ0FBRTtRQUNsQyxLQUFLO1FBQ0wsSUFBSSxDQUFDQSxNQUFNLEdBQUdBO0lBQ2Y7SUFFQSxNQUFhUyxNQUFNTixLQUFhLEVBQUUsR0FBR08sU0FBbUIsRUFBRTtRQUN6RCxJQUFJLENBQUNSLFdBQVcsR0FBR0M7UUFDbkIsSUFBSSxDQUFDQyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUNPLGNBQWMsQ0FBQ0Q7UUFDN0MsSUFBSSxDQUFDRSxvQkFBb0I7UUFDekIsSUFBSSxDQUFDQyx3QkFBd0I7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
package/src/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { EmberCommand } from "./ember.command.js";
2
+ export { EmberActions, EmberModule } from "./ember.module.js";
3
+ export * from "./hot-reload-server.js";
4
+ export { ServeAction } from "./serve.action.js";
5
+ export { ServeCommand } from "./serve.command.js";
6
+ export { WorkspaceServeAction } from "./workspace-serve.action.js";
7
+
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEVtYmVyQ29tbWFuZCB9IGZyb20gXCIuL2VtYmVyLmNvbW1hbmQuanNcIjtcbmV4cG9ydCB0eXBlIHsgRW1iZXJNb2R1bGVDb250ZXh0LCBFbWJlck1vZHVsZVJlc3VsdCB9IGZyb20gXCIuL2VtYmVyLm1vZHVsZS5qc1wiO1xuZXhwb3J0IHsgRW1iZXJBY3Rpb25zLCBFbWJlck1vZHVsZSB9IGZyb20gXCIuL2VtYmVyLm1vZHVsZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaG90LXJlbG9hZC1zZXJ2ZXIuanNcIjtcbmV4cG9ydCB0eXBlIHsgU2VydmVPcHRpb25zIH0gZnJvbSBcIi4vc2VydmUuYWN0aW9uLmpzXCI7XG5leHBvcnQgeyBTZXJ2ZUFjdGlvbiB9IGZyb20gXCIuL3NlcnZlLmFjdGlvbi5qc1wiO1xuZXhwb3J0IHsgU2VydmVDb21tYW5kIH0gZnJvbSBcIi4vc2VydmUuY29tbWFuZC5qc1wiO1xuZXhwb3J0IHR5cGUgeyBXb3Jrc3BhY2VTZXJ2ZU9wdGlvbnMgfSBmcm9tIFwiLi93b3Jrc3BhY2Utc2VydmUuYWN0aW9uLmpzXCI7XG5leHBvcnQgeyBXb3Jrc3BhY2VTZXJ2ZUFjdGlvbiB9IGZyb20gXCIuL3dvcmtzcGFjZS1zZXJ2ZS5hY3Rpb24uanNcIjtcbiJdLCJuYW1lcyI6WyJFbWJlckNvbW1hbmQiLCJFbWJlckFjdGlvbnMiLCJFbWJlck1vZHVsZSIsIlNlcnZlQWN0aW9uIiwiU2VydmVDb21tYW5kIiwiV29ya3NwYWNlU2VydmVBY3Rpb24iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFlBQVksUUFBUSxxQkFBcUI7QUFFbEQsU0FBU0MsWUFBWSxFQUFFQyxXQUFXLFFBQVEsb0JBQW9CO0FBQzlELGNBQWMseUJBQXlCO0FBRXZDLFNBQVNDLFdBQVcsUUFBUSxvQkFBb0I7QUFDaEQsU0FBU0MsWUFBWSxRQUFRLHFCQUFxQjtBQUVsRCxTQUFTQyxvQkFBb0IsUUFBUSw4QkFBOEIifQ==
@@ -0,0 +1,28 @@
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ import { injectable } from "../../crucible/src/decorators/index.js";
8
+ import { ActionResponse } from "../../nexus/src/cli/index.js";
9
+ import { scribe } from "../../scribe/scribe/src/index.js";
10
+ import { HotReloadServer } from "./hot-reload-server.js";
11
+ export class ServeAction {
12
+ async run(options) {
13
+ const { entry, watchDir } = options;
14
+ const logger = scribe.logger("ServeAction");
15
+ const server = new HotReloadServer(logger);
16
+ process.on("SIGINT", async ()=>{
17
+ await server.dispose();
18
+ process.exit(0);
19
+ });
20
+ await server.start(entry, watchDir);
21
+ return ActionResponse.Success(ServeAction.name);
22
+ }
23
+ }
24
+ ServeAction = _ts_decorate([
25
+ injectable()
26
+ ], ServeAction);
27
+
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyB0eXBlIEFjdGlvbiwgQWN0aW9uUmVzcG9uc2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgc2NyaWJlIH0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcbmltcG9ydCB7IEhvdFJlbG9hZFNlcnZlciB9IGZyb20gXCIuL2hvdC1yZWxvYWQtc2VydmVyLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFNlcnZlT3B0aW9ucyA9IHtcblx0ZW50cnk6IHN0cmluZztcblx0d2F0Y2hEaXI6IHN0cmluZztcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbjxTZXJ2ZU9wdGlvbnM+IHtcblx0cHVibGljIGFzeW5jIHJ1bihvcHRpb25zOiBTZXJ2ZU9wdGlvbnMpOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPiB7XG5cdFx0Y29uc3QgeyBlbnRyeSwgd2F0Y2hEaXIgfSA9IG9wdGlvbnM7XG5cdFx0Y29uc3QgbG9nZ2VyID0gc2NyaWJlLmxvZ2dlcihcIlNlcnZlQWN0aW9uXCIpO1xuXHRcdGNvbnN0IHNlcnZlciA9IG5ldyBIb3RSZWxvYWRTZXJ2ZXIobG9nZ2VyKTtcblxuXHRcdHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0YXdhaXQgc2VydmVyLmRpc3Bvc2UoKTtcblx0XHRcdHByb2Nlc3MuZXhpdCgwKTtcblx0XHR9KTtcblxuXHRcdGF3YWl0IHNlcnZlci5zdGFydChlbnRyeSwgd2F0Y2hEaXIpO1xuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5TdWNjZXNzKFNlcnZlQWN0aW9uLm5hbWUpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiaW5qZWN0YWJsZSIsIkFjdGlvblJlc3BvbnNlIiwic2NyaWJlIiwiSG90UmVsb2FkU2VydmVyIiwiU2VydmVBY3Rpb24iLCJydW4iLCJvcHRpb25zIiwiZW50cnkiLCJ3YXRjaERpciIsImxvZ2dlciIsInNlcnZlciIsInByb2Nlc3MiLCJvbiIsImRpc3Bvc2UiLCJleGl0Iiwic3RhcnQiLCJTdWNjZXNzIiwibmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsU0FBU0EsVUFBVSxRQUFRLHlDQUFnQztBQUMzRCxTQUFzQkMsY0FBYyxRQUFRLCtCQUFzQjtBQUNsRSxTQUFTQyxNQUFNLFFBQVEsbUNBQW1CO0FBQzFDLFNBQVNDLGVBQWUsUUFBUSx5QkFBeUI7QUFRekQsT0FBTyxNQUFNQztJQUNaLE1BQWFDLElBQUlDLE9BQXFCLEVBQTJCO1FBQ2hFLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBR0Y7UUFDNUIsTUFBTUcsU0FBU1AsT0FBT08sTUFBTSxDQUFDO1FBQzdCLE1BQU1DLFNBQVMsSUFBSVAsZ0JBQWdCTTtRQUVuQ0UsUUFBUUMsRUFBRSxDQUFDLFVBQVU7WUFDcEIsTUFBTUYsT0FBT0csT0FBTztZQUNwQkYsUUFBUUcsSUFBSSxDQUFDO1FBQ2Q7UUFFQSxNQUFNSixPQUFPSyxLQUFLLENBQUNSLE9BQU9DO1FBQzFCLE9BQU9QLGVBQWVlLE9BQU8sQ0FBQ1osWUFBWWEsSUFBSTtJQUMvQztBQUNEIn0=
@@ -0,0 +1,15 @@
1
+ import { DecohereCommand } from "../../nexus/src/cli/index.js";
2
+ import { WorkspaceServeAction } from "./workspace-serve.action.js";
3
+ export class ServeCommand extends DecohereCommand {
4
+ get actions() {
5
+ return [
6
+ WorkspaceServeAction
7
+ ];
8
+ }
9
+ constructor(name){
10
+ super(name);
11
+ this.description("Serve the first project in a workspace configuration");
12
+ }
13
+ }
14
+
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjb2hlcmVDb21tYW5kIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IFdvcmtzcGFjZVNlcnZlQWN0aW9uIH0gZnJvbSBcIi4vd29ya3NwYWNlLXNlcnZlLmFjdGlvbi5qc1wiO1xuXG5leHBvcnQgY2xhc3MgU2VydmVDb21tYW5kIGV4dGVuZHMgRGVjb2hlcmVDb21tYW5kIHtcblx0cHVibGljIG92ZXJyaWRlIGdldCBhY3Rpb25zKCkge1xuXHRcdHJldHVybiBbV29ya3NwYWNlU2VydmVBY3Rpb25dO1xuXHR9XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuXHRcdHN1cGVyKG5hbWUpO1xuXHRcdHRoaXMuZGVzY3JpcHRpb24oXCJTZXJ2ZSB0aGUgZmlyc3QgcHJvamVjdCBpbiBhIHdvcmtzcGFjZSBjb25maWd1cmF0aW9uXCIpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiRGVjb2hlcmVDb21tYW5kIiwiV29ya3NwYWNlU2VydmVBY3Rpb24iLCJTZXJ2ZUNvbW1hbmQiLCJhY3Rpb25zIiwibmFtZSIsImRlc2NyaXB0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxlQUFlLFFBQVEsK0JBQXNCO0FBQ3RELFNBQVNDLG9CQUFvQixRQUFRLDhCQUE4QjtBQUVuRSxPQUFPLE1BQU1DLHFCQUFxQkY7SUFDakMsSUFBb0JHLFVBQVU7UUFDN0IsT0FBTztZQUFDRjtTQUFxQjtJQUM5QjtJQUVBLFlBQW1CRyxJQUFZLENBQUU7UUFDaEMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0MsV0FBVyxDQUFDO0lBQ2xCO0FBQ0QifQ==
package/src/serve.js ADDED
@@ -0,0 +1,32 @@
1
+ import { parseArgs } from "node:util";
2
+ import { scribe } from "../../scribe/scribe/src/index.js";
3
+ import { HotReloadServer } from "./hot-reload-server.js";
4
+ const { values } = parseArgs({
5
+ args: process.argv.slice(2),
6
+ options: {
7
+ entry: {
8
+ type: "string",
9
+ short: "e"
10
+ },
11
+ watchDir: {
12
+ type: "string",
13
+ multiple: true,
14
+ short: "w"
15
+ }
16
+ },
17
+ allowPositionals: false
18
+ });
19
+ const entry = values.entry;
20
+ const watchDirs = values.watchDir ?? [];
21
+ if (!entry) {
22
+ console.error("Usage: forge-hmr --entry <path> --watchDir <dir> [--watchDir <dir>...]");
23
+ process.exit(1);
24
+ }
25
+ if (watchDirs.length === 0) {
26
+ console.error("Usage: forge-hmr --entry <path> --watchDir <dir> [--watchDir <dir>...]");
27
+ process.exit(1);
28
+ }
29
+ const hmr = new HotReloadServer(scribe.logger("HotReloadServer"));
30
+ await hmr.start(entry, ...watchDirs);
31
+
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlQXJncyB9IGZyb20gXCJub2RlOnV0aWxcIjtcbmltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgeyBIb3RSZWxvYWRTZXJ2ZXIgfSBmcm9tIFwiLi9ob3QtcmVsb2FkLXNlcnZlci5qc1wiO1xuXG5jb25zdCB7IHZhbHVlcyB9ID0gcGFyc2VBcmdzKHtcblx0YXJnczogcHJvY2Vzcy5hcmd2LnNsaWNlKDIpLFxuXHRvcHRpb25zOiB7XG5cdFx0ZW50cnk6IHsgdHlwZTogXCJzdHJpbmdcIiwgc2hvcnQ6IFwiZVwiIH0sXG5cdFx0d2F0Y2hEaXI6IHsgdHlwZTogXCJzdHJpbmdcIiwgbXVsdGlwbGU6IHRydWUsIHNob3J0OiBcIndcIiB9LFxuXHR9LFxuXHRhbGxvd1Bvc2l0aW9uYWxzOiBmYWxzZSxcbn0pO1xuXG5jb25zdCBlbnRyeSA9IHZhbHVlcy5lbnRyeTtcbmNvbnN0IHdhdGNoRGlycyA9IHZhbHVlcy53YXRjaERpciA/PyBbXTtcblxuaWYgKCFlbnRyeSkge1xuXHRjb25zb2xlLmVycm9yKFwiVXNhZ2U6IGZvcmdlLWhtciAtLWVudHJ5IDxwYXRoPiAtLXdhdGNoRGlyIDxkaXI+IFstLXdhdGNoRGlyIDxkaXI+Li4uXVwiKTtcblx0cHJvY2Vzcy5leGl0KDEpO1xufVxuXG5pZiAod2F0Y2hEaXJzLmxlbmd0aCA9PT0gMCkge1xuXHRjb25zb2xlLmVycm9yKFwiVXNhZ2U6IGZvcmdlLWhtciAtLWVudHJ5IDxwYXRoPiAtLXdhdGNoRGlyIDxkaXI+IFstLXdhdGNoRGlyIDxkaXI+Li4uXVwiKTtcblx0cHJvY2Vzcy5leGl0KDEpO1xufVxuXG5jb25zdCBobXIgPSBuZXcgSG90UmVsb2FkU2VydmVyKHNjcmliZS5sb2dnZXIoXCJIb3RSZWxvYWRTZXJ2ZXJcIikpO1xuYXdhaXQgaG1yLnN0YXJ0KGVudHJ5LCAuLi53YXRjaERpcnMpO1xuIl0sIm5hbWVzIjpbInBhcnNlQXJncyIsInNjcmliZSIsIkhvdFJlbG9hZFNlcnZlciIsInZhbHVlcyIsImFyZ3MiLCJwcm9jZXNzIiwiYXJndiIsInNsaWNlIiwib3B0aW9ucyIsImVudHJ5IiwidHlwZSIsInNob3J0Iiwid2F0Y2hEaXIiLCJtdWx0aXBsZSIsImFsbG93UG9zaXRpb25hbHMiLCJ3YXRjaERpcnMiLCJjb25zb2xlIiwiZXJyb3IiLCJleGl0IiwibGVuZ3RoIiwiaG1yIiwibG9nZ2VyIiwic3RhcnQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFNBQVMsUUFBUSxZQUFZO0FBQ3RDLFNBQVNDLE1BQU0sUUFBUSxtQ0FBbUI7QUFDMUMsU0FBU0MsZUFBZSxRQUFRLHlCQUF5QjtBQUV6RCxNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHSCxVQUFVO0lBQzVCSSxNQUFNQyxRQUFRQyxJQUFJLENBQUNDLEtBQUssQ0FBQztJQUN6QkMsU0FBUztRQUNSQyxPQUFPO1lBQUVDLE1BQU07WUFBVUMsT0FBTztRQUFJO1FBQ3BDQyxVQUFVO1lBQUVGLE1BQU07WUFBVUcsVUFBVTtZQUFNRixPQUFPO1FBQUk7SUFDeEQ7SUFDQUcsa0JBQWtCO0FBQ25CO0FBRUEsTUFBTUwsUUFBUU4sT0FBT00sS0FBSztBQUMxQixNQUFNTSxZQUFZWixPQUFPUyxRQUFRLElBQUksRUFBRTtBQUV2QyxJQUFJLENBQUNILE9BQU87SUFDWE8sUUFBUUMsS0FBSyxDQUFDO0lBQ2RaLFFBQVFhLElBQUksQ0FBQztBQUNkO0FBRUEsSUFBSUgsVUFBVUksTUFBTSxLQUFLLEdBQUc7SUFDM0JILFFBQVFDLEtBQUssQ0FBQztJQUNkWixRQUFRYSxJQUFJLENBQUM7QUFDZDtBQUVBLE1BQU1FLE1BQU0sSUFBSWxCLGdCQUFnQkQsT0FBT29CLE1BQU0sQ0FBQztBQUM5QyxNQUFNRCxJQUFJRSxLQUFLLENBQUNiLFVBQVVNIn0=
@@ -0,0 +1,45 @@
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ function _ts_metadata(k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ }
10
+ import path from "node:path";
11
+ import { injectable } from "../../crucible/src/decorators/index.js";
12
+ // biome-ignore lint/style/useImportType: <DI>
13
+ import { Workspace } from "../../mesh/src/index.js";
14
+ import { ActionResponse } from "../../nexus/src/cli/index.js";
15
+ import { ServeAction } from "./serve.action.js";
16
+ export class WorkspaceServeAction {
17
+ workspace;
18
+ constructor(workspace){
19
+ this.workspace = workspace;
20
+ }
21
+ async run(options) {
22
+ const { configuration } = options;
23
+ const projects = this.workspace.getProjects(configuration);
24
+ const project = projects.at(0);
25
+ if (project == null) {
26
+ return ActionResponse.Error(WorkspaceServeAction.name, `No projects found for configuration: ${configuration}`);
27
+ }
28
+ const outDir = project.getOutDir();
29
+ const entry = path.join(outDir, "src", "index.js");
30
+ const serveAction = new ServeAction();
31
+ return serveAction.run({
32
+ entry,
33
+ watchDir: outDir
34
+ });
35
+ }
36
+ }
37
+ WorkspaceServeAction = _ts_decorate([
38
+ injectable(),
39
+ _ts_metadata("design:type", Function),
40
+ _ts_metadata("design:paramtypes", [
41
+ typeof Workspace === "undefined" ? Object : Workspace
42
+ ])
43
+ ], WorkspaceServeAction);
44
+
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3dvcmtzcGFjZS1zZXJ2ZS5hY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBTZXJ2ZUFjdGlvbiB9IGZyb20gXCIuL3NlcnZlLmFjdGlvbi5qc1wiO1xuXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VTZXJ2ZU9wdGlvbnMgPSB7XG5cdGNvbmZpZ3VyYXRpb246IHN0cmluZztcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VTZXJ2ZUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbjxXb3Jrc3BhY2VTZXJ2ZU9wdGlvbnM+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBXb3Jrc3BhY2UpIHt9XG5cblx0cHVibGljIGFzeW5jIHJ1bihvcHRpb25zOiBXb3Jrc3BhY2VTZXJ2ZU9wdGlvbnMpOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPiB7XG5cdFx0Y29uc3QgeyBjb25maWd1cmF0aW9uIH0gPSBvcHRpb25zO1xuXHRcdGNvbnN0IHByb2plY3RzID0gdGhpcy53b3Jrc3BhY2UuZ2V0UHJvamVjdHMoY29uZmlndXJhdGlvbik7XG5cdFx0Y29uc3QgcHJvamVjdCA9IHByb2plY3RzLmF0KDApO1xuXG5cdFx0aWYgKHByb2plY3QgPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLkVycm9yKFxuXHRcdFx0XHRXb3Jrc3BhY2VTZXJ2ZUFjdGlvbi5uYW1lLFxuXHRcdFx0XHRgTm8gcHJvamVjdHMgZm91bmQgZm9yIGNvbmZpZ3VyYXRpb246ICR7Y29uZmlndXJhdGlvbn1gLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBvdXREaXIgPSBwcm9qZWN0LmdldE91dERpcigpO1xuXHRcdGNvbnN0IGVudHJ5ID0gcGF0aC5qb2luKG91dERpciwgXCJzcmNcIiwgXCJpbmRleC5qc1wiKTtcblx0XHRjb25zdCBzZXJ2ZUFjdGlvbiA9IG5ldyBTZXJ2ZUFjdGlvbigpO1xuXHRcdHJldHVybiBzZXJ2ZUFjdGlvbi5ydW4oeyBlbnRyeSwgd2F0Y2hEaXI6IG91dERpciB9KTtcblx0fVxufVxuIl0sIm5hbWVzIjpbInBhdGgiLCJpbmplY3RhYmxlIiwiV29ya3NwYWNlIiwiQWN0aW9uUmVzcG9uc2UiLCJTZXJ2ZUFjdGlvbiIsIldvcmtzcGFjZVNlcnZlQWN0aW9uIiwid29ya3NwYWNlIiwicnVuIiwib3B0aW9ucyIsImNvbmZpZ3VyYXRpb24iLCJwcm9qZWN0cyIsImdldFByb2plY3RzIiwicHJvamVjdCIsImF0IiwiRXJyb3IiLCJuYW1lIiwib3V0RGlyIiwiZ2V0T3V0RGlyIiwiZW50cnkiLCJqb2luIiwic2VydmVBY3Rpb24iLCJ3YXRjaERpciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBT0EsVUFBVSxZQUFZO0FBQzdCLFNBQVNDLFVBQVUsUUFBUSx5Q0FBZ0M7QUFDM0QsOENBQThDO0FBQzlDLFNBQVNDLFNBQVMsUUFBUSwwQkFBaUI7QUFFM0MsU0FBU0MsY0FBYyxRQUFRLCtCQUFzQjtBQUNyRCxTQUFTQyxXQUFXLFFBQVEsb0JBQW9CO0FBT2hELE9BQU8sTUFBTUM7O0lBQ1osWUFBbUIsQUFBaUJDLFNBQW9CLENBQUU7YUFBdEJBLFlBQUFBO0lBQXVCO0lBRTNELE1BQWFDLElBQUlDLE9BQThCLEVBQTJCO1FBQ3pFLE1BQU0sRUFBRUMsYUFBYSxFQUFFLEdBQUdEO1FBQzFCLE1BQU1FLFdBQVcsSUFBSSxDQUFDSixTQUFTLENBQUNLLFdBQVcsQ0FBQ0Y7UUFDNUMsTUFBTUcsVUFBVUYsU0FBU0csRUFBRSxDQUFDO1FBRTVCLElBQUlELFdBQVcsTUFBTTtZQUNwQixPQUFPVCxlQUFlVyxLQUFLLENBQzFCVCxxQkFBcUJVLElBQUksRUFDekIsQ0FBQyxxQ0FBcUMsRUFBRU4sZUFBZTtRQUV6RDtRQUVBLE1BQU1PLFNBQVNKLFFBQVFLLFNBQVM7UUFDaEMsTUFBTUMsUUFBUWxCLEtBQUttQixJQUFJLENBQUNILFFBQVEsT0FBTztRQUN2QyxNQUFNSSxjQUFjLElBQUloQjtRQUN4QixPQUFPZ0IsWUFBWWIsR0FBRyxDQUFDO1lBQUVXO1lBQU9HLFVBQVVMO1FBQU87SUFDbEQ7QUFDRCJ9