@decohere/flux 0.0.1-dev.74 → 0.0.1-dev.75
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/commonjs/src/deferred-script-runner.js +58 -0
- package/commonjs/src/flux.module.js +3 -1
- package/commonjs/src/hot-reload-server.js +86 -28
- package/commonjs/src/index.js +24 -1
- package/commonjs/src/serve.action.js +75 -3
- package/commonjs/src/serve.command.js +30 -2
- package/commonjs/src/slice-serve.js +132 -0
- package/es6/src/deferred-script-runner.js +48 -0
- package/es6/src/flux.module.js +3 -1
- package/es6/src/hot-reload-server.js +86 -28
- package/es6/src/index.js +3 -1
- package/es6/src/serve.action.js +71 -3
- package/es6/src/serve.command.js +30 -2
- package/es6/src/slice-serve.js +107 -0
- package/package.json +7 -6
- package/types/src/deferred-script-runner.d.ts +18 -0
- package/types/src/hot-reload-server.d.ts +11 -3
- package/types/src/index.d.ts +2 -0
- package/types/src/serve.action.d.ts +10 -1
- package/types/src/serve.command.d.ts +5 -0
- package/types/src/slice-serve.d.ts +52 -0
|
@@ -8,10 +8,19 @@ Object.defineProperty(exports, "ServeAction", {
|
|
|
8
8
|
return ServeAction;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
11
12
|
const _decorators = require("@decohere/crucible/decorators");
|
|
12
13
|
const _mesh = require("@decohere/mesh");
|
|
13
14
|
const _cli = require("@decohere/nexus/cli");
|
|
15
|
+
const _scribe = require("@decohere/scribe");
|
|
16
|
+
const _deferredscriptrunner = require("./deferred-script-runner.js");
|
|
14
17
|
const _hotreloadserver = require("./hot-reload-server.js");
|
|
18
|
+
const _sliceserve = require("./slice-serve.js");
|
|
19
|
+
function _interop_require_default(obj) {
|
|
20
|
+
return obj && obj.__esModule ? obj : {
|
|
21
|
+
default: obj
|
|
22
|
+
};
|
|
23
|
+
}
|
|
15
24
|
function _ts_decorate(decorators, target, key, desc) {
|
|
16
25
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
17
26
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -24,11 +33,21 @@ function _ts_metadata(k, v) {
|
|
|
24
33
|
class ServeAction {
|
|
25
34
|
server;
|
|
26
35
|
workspace;
|
|
27
|
-
|
|
36
|
+
deferredScripts;
|
|
37
|
+
logger = _scribe.scribe.logger(ServeAction.name);
|
|
38
|
+
constructor(server, workspace, deferredScripts){
|
|
28
39
|
this.server = server;
|
|
29
40
|
this.workspace = workspace;
|
|
41
|
+
this.deferredScripts = deferredScripts;
|
|
30
42
|
}
|
|
31
43
|
async run(options) {
|
|
44
|
+
const slices = (options.slices ?? []).filter((s)=>s !== "");
|
|
45
|
+
if (slices.length > 0 && options.project != null) {
|
|
46
|
+
throw new Error("Use either directory slices or --project, not both");
|
|
47
|
+
}
|
|
48
|
+
if (slices.length > 0) {
|
|
49
|
+
return this.runSlices(options, slices);
|
|
50
|
+
}
|
|
32
51
|
await this.server.start({
|
|
33
52
|
workspace: this.workspace,
|
|
34
53
|
buildConfig: options.configuration,
|
|
@@ -37,14 +56,67 @@ class ServeAction {
|
|
|
37
56
|
});
|
|
38
57
|
return _cli.ActionResponse.Blocking(ServeAction.name);
|
|
39
58
|
}
|
|
59
|
+
async runSlices(options, slices) {
|
|
60
|
+
const views = await this.toSliceViews(options.configuration);
|
|
61
|
+
const classified = (0, _sliceserve.classifySliceProjects)(views, slices);
|
|
62
|
+
const label = slices.join(" ");
|
|
63
|
+
for (const skipped of classified.skip){
|
|
64
|
+
this.logger.info(`skipped ${skipped.projectDirectory} — library (no Flux entry / scripts)`);
|
|
65
|
+
}
|
|
66
|
+
if (classified.flux.length === 0 && classified.defer.length === 0) {
|
|
67
|
+
throw new Error(`No runnable projects in slice(s) "${label}" (need Flux main.ts apps and/or package scripts.dev/serve)`);
|
|
68
|
+
}
|
|
69
|
+
const workspaceRoot = _nodepath.default.resolve(this.workspace.rootDir ?? process.cwd());
|
|
70
|
+
for (const deferred of classified.defer){
|
|
71
|
+
const script = (0, _sliceserve.resolveDeferScript)(deferred.scripts);
|
|
72
|
+
if (script == null) continue;
|
|
73
|
+
const project = this.findProject(options.configuration, deferred.name);
|
|
74
|
+
this.deferredScripts.start({
|
|
75
|
+
label: deferred.projectDirectory,
|
|
76
|
+
cwd: project.projectRoot,
|
|
77
|
+
script,
|
|
78
|
+
workspaceRoot
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (classified.flux.length > 0) {
|
|
82
|
+
await this.server.start({
|
|
83
|
+
workspace: this.workspace,
|
|
84
|
+
buildConfig: options.configuration,
|
|
85
|
+
projects: classified.flux.map((p)=>p.name),
|
|
86
|
+
rebootDebounceMs: options.rebootDebounceMs
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return _cli.ActionResponse.Blocking(ServeAction.name);
|
|
90
|
+
}
|
|
91
|
+
async toSliceViews(configuration) {
|
|
92
|
+
const projects = this.workspace.getProjects(configuration);
|
|
93
|
+
return Promise.all(projects.map((project)=>this.toSliceView(project)));
|
|
94
|
+
}
|
|
95
|
+
async toSliceView(project) {
|
|
96
|
+
const pkg = await project.getPackageJson();
|
|
97
|
+
return {
|
|
98
|
+
name: project.name,
|
|
99
|
+
projectDirectory: project.projectDirectory.replaceAll("\\", "/"),
|
|
100
|
+
main: pkg.main ?? "src/index.ts",
|
|
101
|
+
scripts: pkg.scripts ?? {}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
findProject(configuration, name) {
|
|
105
|
+
const found = this.workspace.getProjects(configuration).find((p)=>p.name === name);
|
|
106
|
+
if (found == null) {
|
|
107
|
+
throw new Error(`Project "${name}" not found in workspace`);
|
|
108
|
+
}
|
|
109
|
+
return found;
|
|
110
|
+
}
|
|
40
111
|
}
|
|
41
112
|
ServeAction = _ts_decorate([
|
|
42
113
|
(0, _decorators.injectable)(),
|
|
43
114
|
_ts_metadata("design:type", Function),
|
|
44
115
|
_ts_metadata("design:paramtypes", [
|
|
45
116
|
typeof _hotreloadserver.HotReloadServer === "undefined" ? Object : _hotreloadserver.HotReloadServer,
|
|
46
|
-
typeof _mesh.Workspace === "undefined" ? Object : _mesh.Workspace
|
|
117
|
+
typeof _mesh.Workspace === "undefined" ? Object : _mesh.Workspace,
|
|
118
|
+
typeof _deferredscriptrunner.DeferredScriptRunner === "undefined" ? Object : _deferredscriptrunner.DeferredScriptRunner
|
|
47
119
|
])
|
|
48
120
|
], ServeAction);
|
|
49
121
|
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB7IHR5cGUgQWN0aW9uLCBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBIb3RSZWxvYWRTZXJ2ZXIgfSBmcm9tIFwiLi9ob3QtcmVsb2FkLXNlcnZlci5qc1wiO1xuXG5leHBvcnQgdHlwZSBTZXJ2ZU9wdGlvbnMgPSB7XG5cdGNvbmZpZ3VyYXRpb246IHN0cmluZztcblx0cHJvamVjdD86IHN0cmluZztcblx0cmVib290RGVib3VuY2VNcz86IG51bWJlcjtcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbjxTZXJ2ZU9wdGlvbnM+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgc2VydmVyOiBIb3RSZWxvYWRTZXJ2ZXIsXG5cdFx0cHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IFdvcmtzcGFjZSxcblx0KSB7fVxuXG5cdHB1YmxpYyBhc3luYyBydW4ob3B0aW9uczogU2VydmVPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRcdGF3YWl0IHRoaXMuc2VydmVyLnN0YXJ0KHtcblx0XHRcdHdvcmtzcGFjZTogdGhpcy53b3Jrc3BhY2UsXG5cdFx0XHRidWlsZENvbmZpZzogb3B0aW9ucy5jb25maWd1cmF0aW9uLFxuXHRcdFx0cHJvamVjdDogb3B0aW9ucy5wcm9qZWN0LFxuXHRcdFx0cmVib290RGVib3VuY2VNczogb3B0aW9ucy5yZWJvb3REZWJvdW5jZU1zLFxuXHRcdH0pO1xuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5CbG9ja2luZyhTZXJ2ZUFjdGlvbi5uYW1lKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlNlcnZlQWN0aW9uIiwic2VydmVyIiwid29ya3NwYWNlIiwicnVuIiwib3B0aW9ucyIsInN0YXJ0IiwiYnVpbGRDb25maWciLCJjb25maWd1cmF0aW9uIiwicHJvamVjdCIsInJlYm9vdERlYm91bmNlTXMiLCJBY3Rpb25SZXNwb25zZSIsIkJsb2NraW5nIiwibmFtZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFjYUE7OztlQUFBQTs7OzRCQWRjO3NCQUVEO3FCQUNrQjtpQ0FFWjs7Ozs7Ozs7OztBQVN6QixNQUFNQTs7O0lBQ1osWUFDQyxBQUFpQkMsTUFBdUIsRUFDeEMsQUFBaUJDLFNBQW9CLENBQ3BDO2FBRmdCRCxTQUFBQTthQUNBQyxZQUFBQTtJQUNmO0lBRUgsTUFBYUMsSUFBSUMsT0FBcUIsRUFBMkI7UUFDaEUsTUFBTSxJQUFJLENBQUNILE1BQU0sQ0FBQ0ksS0FBSyxDQUFDO1lBQ3ZCSCxXQUFXLElBQUksQ0FBQ0EsU0FBUztZQUN6QkksYUFBYUYsUUFBUUcsYUFBYTtZQUNsQ0MsU0FBU0osUUFBUUksT0FBTztZQUN4QkMsa0JBQWtCTCxRQUFRSyxnQkFBZ0I7UUFDM0M7UUFDQSxPQUFPQyxtQkFBYyxDQUFDQyxRQUFRLENBQUNYLFlBQVlZLElBQUk7SUFDaEQ7QUFDRCJ9
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyB0eXBlIFByb2plY3QsIFdvcmtzcGFjZSB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgdHlwZSBBY3Rpb24sIEFjdGlvblJlc3BvbnNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IHR5cGUgTG9nZ2VyLCBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvdXNlSW1wb3J0VHlwZTogPERJPlxuaW1wb3J0IHsgRGVmZXJyZWRTY3JpcHRSdW5uZXIgfSBmcm9tIFwiLi9kZWZlcnJlZC1zY3JpcHQtcnVubmVyLmpzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBIb3RSZWxvYWRTZXJ2ZXIgfSBmcm9tIFwiLi9ob3QtcmVsb2FkLXNlcnZlci5qc1wiO1xuaW1wb3J0IHtcblx0Y2xhc3NpZnlTbGljZVByb2plY3RzLFxuXHRyZXNvbHZlRGVmZXJTY3JpcHQsXG5cdHR5cGUgU2xpY2VQcm9qZWN0Vmlldyxcbn0gZnJvbSBcIi4vc2xpY2Utc2VydmUuanNcIjtcblxuZXhwb3J0IHR5cGUgU2VydmVPcHRpb25zID0ge1xuXHRjb25maWd1cmF0aW9uOiBzdHJpbmc7XG5cdHByb2plY3Q/OiBzdHJpbmc7XG5cdC8qKiBPbmUgb3IgbW9yZSBtb2R1bGUgZGlyZWN0b3J5IHRva2VucyAoYGZ1bmRpbmdgLCBgc2hlbGxgLCBgcHJvamVjdHMvZnVuZGluZ2ApLiAqL1xuXHRzbGljZXM/OiBzdHJpbmdbXTtcblx0cmVib290RGVib3VuY2VNcz86IG51bWJlcjtcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbjxTZXJ2ZU9wdGlvbnM+IHtcblx0cHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlciA9IHNjcmliZS5sb2dnZXIoU2VydmVBY3Rpb24ubmFtZSk7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgc2VydmVyOiBIb3RSZWxvYWRTZXJ2ZXIsXG5cdFx0cHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IFdvcmtzcGFjZSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IGRlZmVycmVkU2NyaXB0czogRGVmZXJyZWRTY3JpcHRSdW5uZXIsXG5cdCkge31cblxuXHRwdWJsaWMgYXN5bmMgcnVuKG9wdGlvbnM6IFNlcnZlT3B0aW9ucyk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0XHRjb25zdCBzbGljZXMgPSAob3B0aW9ucy5zbGljZXMgPz8gW10pLmZpbHRlcigocykgPT4gcyAhPT0gXCJcIik7XG5cdFx0aWYgKHNsaWNlcy5sZW5ndGggPiAwICYmIG9wdGlvbnMucHJvamVjdCAhPSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVc2UgZWl0aGVyIGRpcmVjdG9yeSBzbGljZXMgb3IgLS1wcm9qZWN0LCBub3QgYm90aFwiKTtcblx0XHR9XG5cblx0XHRpZiAoc2xpY2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0aGlzLnJ1blNsaWNlcyhvcHRpb25zLCBzbGljZXMpO1xuXHRcdH1cblxuXHRcdGF3YWl0IHRoaXMuc2VydmVyLnN0YXJ0KHtcblx0XHRcdHdvcmtzcGFjZTogdGhpcy53b3Jrc3BhY2UsXG5cdFx0XHRidWlsZENvbmZpZzogb3B0aW9ucy5jb25maWd1cmF0aW9uLFxuXHRcdFx0cHJvamVjdDogb3B0aW9ucy5wcm9qZWN0LFxuXHRcdFx0cmVib290RGVib3VuY2VNczogb3B0aW9ucy5yZWJvb3REZWJvdW5jZU1zLFxuXHRcdH0pO1xuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5CbG9ja2luZyhTZXJ2ZUFjdGlvbi5uYW1lKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcnVuU2xpY2VzKG9wdGlvbnM6IFNlcnZlT3B0aW9ucywgc2xpY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0XHRjb25zdCB2aWV3cyA9IGF3YWl0IHRoaXMudG9TbGljZVZpZXdzKG9wdGlvbnMuY29uZmlndXJhdGlvbik7XG5cdFx0Y29uc3QgY2xhc3NpZmllZCA9IGNsYXNzaWZ5U2xpY2VQcm9qZWN0cyh2aWV3cywgc2xpY2VzKTtcblx0XHRjb25zdCBsYWJlbCA9IHNsaWNlcy5qb2luKFwiIFwiKTtcblxuXHRcdGZvciAoY29uc3Qgc2tpcHBlZCBvZiBjbGFzc2lmaWVkLnNraXApIHtcblx0XHRcdHRoaXMubG9nZ2VyLmluZm8oXG5cdFx0XHRcdGBza2lwcGVkICR7c2tpcHBlZC5wcm9qZWN0RGlyZWN0b3J5fSDigJQgbGlicmFyeSAobm8gRmx1eCBlbnRyeSAvIHNjcmlwdHMpYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGNsYXNzaWZpZWQuZmx1eC5sZW5ndGggPT09IDAgJiYgY2xhc3NpZmllZC5kZWZlci5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YE5vIHJ1bm5hYmxlIHByb2plY3RzIGluIHNsaWNlKHMpIFwiJHtsYWJlbH1cIiAobmVlZCBGbHV4IG1haW4udHMgYXBwcyBhbmQvb3IgcGFja2FnZSBzY3JpcHRzLmRldi9zZXJ2ZSlgLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCB3b3Jrc3BhY2VSb290ID0gcGF0aC5yZXNvbHZlKHRoaXMud29ya3NwYWNlLnJvb3REaXIgPz8gcHJvY2Vzcy5jd2QoKSk7XG5cblx0XHRmb3IgKGNvbnN0IGRlZmVycmVkIG9mIGNsYXNzaWZpZWQuZGVmZXIpIHtcblx0XHRcdGNvbnN0IHNjcmlwdCA9IHJlc29sdmVEZWZlclNjcmlwdChkZWZlcnJlZC5zY3JpcHRzKTtcblx0XHRcdGlmIChzY3JpcHQgPT0gbnVsbCkgY29udGludWU7XG5cdFx0XHRjb25zdCBwcm9qZWN0ID0gdGhpcy5maW5kUHJvamVjdChvcHRpb25zLmNvbmZpZ3VyYXRpb24sIGRlZmVycmVkLm5hbWUpO1xuXHRcdFx0dGhpcy5kZWZlcnJlZFNjcmlwdHMuc3RhcnQoe1xuXHRcdFx0XHRsYWJlbDogZGVmZXJyZWQucHJvamVjdERpcmVjdG9yeSxcblx0XHRcdFx0Y3dkOiBwcm9qZWN0LnByb2plY3RSb290LFxuXHRcdFx0XHRzY3JpcHQsXG5cdFx0XHRcdHdvcmtzcGFjZVJvb3QsXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoY2xhc3NpZmllZC5mbHV4Lmxlbmd0aCA+IDApIHtcblx0XHRcdGF3YWl0IHRoaXMuc2VydmVyLnN0YXJ0KHtcblx0XHRcdFx0d29ya3NwYWNlOiB0aGlzLndvcmtzcGFjZSxcblx0XHRcdFx0YnVpbGRDb25maWc6IG9wdGlvbnMuY29uZmlndXJhdGlvbixcblx0XHRcdFx0cHJvamVjdHM6IGNsYXNzaWZpZWQuZmx1eC5tYXAoKHApID0+IHAubmFtZSksXG5cdFx0XHRcdHJlYm9vdERlYm91bmNlTXM6IG9wdGlvbnMucmVib290RGVib3VuY2VNcyxcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5CbG9ja2luZyhTZXJ2ZUFjdGlvbi5uYW1lKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgdG9TbGljZVZpZXdzKGNvbmZpZ3VyYXRpb246IHN0cmluZyk6IFByb21pc2U8U2xpY2VQcm9qZWN0Vmlld1tdPiB7XG5cdFx0Y29uc3QgcHJvamVjdHMgPSB0aGlzLndvcmtzcGFjZS5nZXRQcm9qZWN0cyhjb25maWd1cmF0aW9uKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvamVjdHMubWFwKChwcm9qZWN0KSA9PiB0aGlzLnRvU2xpY2VWaWV3KHByb2plY3QpKSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHRvU2xpY2VWaWV3KHByb2plY3Q6IFByb2plY3QpOiBQcm9taXNlPFNsaWNlUHJvamVjdFZpZXc+IHtcblx0XHRjb25zdCBwa2cgPSBhd2FpdCBwcm9qZWN0LmdldFBhY2thZ2VKc29uKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IHByb2plY3QubmFtZSxcblx0XHRcdHByb2plY3REaXJlY3Rvcnk6IHByb2plY3QucHJvamVjdERpcmVjdG9yeS5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIiksXG5cdFx0XHRtYWluOiBwa2cubWFpbiA/PyBcInNyYy9pbmRleC50c1wiLFxuXHRcdFx0c2NyaXB0czogcGtnLnNjcmlwdHMgPz8ge30sXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZmluZFByb2plY3QoY29uZmlndXJhdGlvbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9qZWN0IHtcblx0XHRjb25zdCBmb3VuZCA9IHRoaXMud29ya3NwYWNlLmdldFByb2plY3RzKGNvbmZpZ3VyYXRpb24pLmZpbmQoKHApID0+IHAubmFtZSA9PT0gbmFtZSk7XG5cdFx0aWYgKGZvdW5kID09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgUHJvamVjdCBcIiR7bmFtZX1cIiBub3QgZm91bmQgaW4gd29ya3NwYWNlYCk7XG5cdFx0fVxuXHRcdHJldHVybiBmb3VuZDtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlNlcnZlQWN0aW9uIiwibG9nZ2VyIiwic2NyaWJlIiwibmFtZSIsInNlcnZlciIsIndvcmtzcGFjZSIsImRlZmVycmVkU2NyaXB0cyIsInJ1biIsIm9wdGlvbnMiLCJzbGljZXMiLCJmaWx0ZXIiLCJzIiwibGVuZ3RoIiwicHJvamVjdCIsIkVycm9yIiwicnVuU2xpY2VzIiwic3RhcnQiLCJidWlsZENvbmZpZyIsImNvbmZpZ3VyYXRpb24iLCJyZWJvb3REZWJvdW5jZU1zIiwiQWN0aW9uUmVzcG9uc2UiLCJCbG9ja2luZyIsInZpZXdzIiwidG9TbGljZVZpZXdzIiwiY2xhc3NpZmllZCIsImNsYXNzaWZ5U2xpY2VQcm9qZWN0cyIsImxhYmVsIiwiam9pbiIsInNraXBwZWQiLCJza2lwIiwiaW5mbyIsInByb2plY3REaXJlY3RvcnkiLCJmbHV4IiwiZGVmZXIiLCJ3b3Jrc3BhY2VSb290IiwicGF0aCIsInJlc29sdmUiLCJyb290RGlyIiwicHJvY2VzcyIsImN3ZCIsImRlZmVycmVkIiwic2NyaXB0IiwicmVzb2x2ZURlZmVyU2NyaXB0Iiwic2NyaXB0cyIsImZpbmRQcm9qZWN0IiwicHJvamVjdFJvb3QiLCJwcm9qZWN0cyIsIm1hcCIsInAiLCJnZXRQcm9qZWN0cyIsIlByb21pc2UiLCJhbGwiLCJ0b1NsaWNlVmlldyIsInBrZyIsImdldFBhY2thZ2VKc29uIiwicmVwbGFjZUFsbCIsIm1haW4iLCJmb3VuZCIsImZpbmQiXSwibWFwcGluZ3MiOiI7Ozs7K0JBeUJhQTs7O2VBQUFBOzs7aUVBekJJOzRCQUNVO3NCQUVhO3FCQUNJO3dCQUNSO3NDQUVDO2lDQUVMOzRCQUt6Qjs7Ozs7Ozs7Ozs7Ozs7O0FBV0EsTUFBTUE7Ozs7SUFDS0MsU0FBaUJDLGNBQU0sQ0FBQ0QsTUFBTSxDQUFDRCxZQUFZRyxJQUFJLEVBQUU7SUFFbEUsWUFDQyxBQUFpQkMsTUFBdUIsRUFDeEMsQUFBaUJDLFNBQW9CLEVBQ3JDLEFBQWlCQyxlQUFxQyxDQUNyRDthQUhnQkYsU0FBQUE7YUFDQUMsWUFBQUE7YUFDQUMsa0JBQUFBO0lBQ2Y7SUFFSCxNQUFhQyxJQUFJQyxPQUFxQixFQUEyQjtRQUNoRSxNQUFNQyxTQUFTLEFBQUNELENBQUFBLFFBQVFDLE1BQU0sSUFBSSxFQUFFLEFBQUQsRUFBR0MsTUFBTSxDQUFDLENBQUNDLElBQU1BLE1BQU07UUFDMUQsSUFBSUYs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
|
|
@@ -19,11 +19,39 @@ class ServeCommand extends _cli.DecohereCommand {
|
|
|
19
19
|
}
|
|
20
20
|
constructor(name){
|
|
21
21
|
super(name);
|
|
22
|
-
this.description("Serve a project in
|
|
22
|
+
this.description("Serve a project or directory slices (Flux apps in-process; foreign packages via package scripts)");
|
|
23
|
+
this.argument("[slices...]", "Module directories to serve (e.g. funding shell secmaster, or projects/funding)");
|
|
23
24
|
this.addOption(new _cli.ConfigurationOption("debug"));
|
|
24
25
|
this.addOption(new _cli.ProjectOption());
|
|
25
26
|
this.option("--reboot-debounce-ms <ms>", "Quiet window in milliseconds after the last affecting save before a reboot", (value)=>(0, _hotreloadserver.resolveRebootDebounceMs)(Number(value)), _hotreloadserver.DEFAULT_REBOOT_DEBOUNCE_MS);
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Commander passes positional args before options when `[slices...]` is declared.
|
|
30
|
+
* Terminal's ModuleFactory expects `(opts, cmd)` — normalize here.
|
|
31
|
+
*/ action(fn) {
|
|
32
|
+
return super.action((...args)=>{
|
|
33
|
+
const cmd = args.at(-1);
|
|
34
|
+
const first = args[0];
|
|
35
|
+
const hasPositionalSlices = Array.isArray(first) || typeof first === "string" || first === undefined;
|
|
36
|
+
const opts = hasPositionalSlices ? args[1] : args[0];
|
|
37
|
+
const slices = normalizePositionalSlices(first);
|
|
38
|
+
if (slices.length > 0) {
|
|
39
|
+
cmd.setOptionValue("slices", slices);
|
|
40
|
+
}
|
|
41
|
+
return fn(opts, cmd);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function normalizePositionalSlices(first) {
|
|
46
|
+
if (Array.isArray(first)) {
|
|
47
|
+
return first.filter((s)=>typeof s === "string" && s !== "");
|
|
48
|
+
}
|
|
49
|
+
if (typeof first === "string" && first !== "") {
|
|
50
|
+
return [
|
|
51
|
+
first
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
return [];
|
|
27
55
|
}
|
|
28
56
|
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJhdGlvbk9wdGlvbiwgRGVjb2hlcmVDb21tYW5kLCBQcm9qZWN0T3B0aW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB0eXBlIHsgT3B0aW9uVmFsdWVzIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMsIHJlc29sdmVSZWJvb3REZWJvdW5jZU1zIH0gZnJvbSBcIi4vaG90LXJlbG9hZC1zZXJ2ZXIuanNcIjtcbmltcG9ydCB7IFNlcnZlQWN0aW9uIH0gZnJvbSBcIi4vc2VydmUuYWN0aW9uLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBTZXJ2ZUNvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQge1xuXHRwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7XG5cdFx0cmV0dXJuIFtTZXJ2ZUFjdGlvbl07XG5cdH1cblxuXHRwdWJsaWMgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobmFtZSk7XG5cdFx0dGhpcy5kZXNjcmlwdGlvbihcblx0XHRcdFwiU2VydmUgYSBwcm9qZWN0IG9yIGRpcmVjdG9yeSBzbGljZXMgKEZsdXggYXBwcyBpbi1wcm9jZXNzOyBmb3JlaWduIHBhY2thZ2VzIHZpYSBwYWNrYWdlIHNjcmlwdHMpXCIsXG5cdFx0KTtcblx0XHR0aGlzLmFyZ3VtZW50KFxuXHRcdFx0XCJbc2xpY2VzLi4uXVwiLFxuXHRcdFx0XCJNb2R1bGUgZGlyZWN0b3JpZXMgdG8gc2VydmUgKGUuZy4gZnVuZGluZyBzaGVsbCBzZWNtYXN0ZXIsIG9yIHByb2plY3RzL2Z1bmRpbmcpXCIsXG5cdFx0KTtcblx0XHR0aGlzLmFkZE9wdGlvbihuZXcgQ29uZmlndXJhdGlvbk9wdGlvbihcImRlYnVnXCIpKTtcblx0XHR0aGlzLmFkZE9wdGlvbihuZXcgUHJvamVjdE9wdGlvbigpKTtcblx0XHR0aGlzLm9wdGlvbihcblx0XHRcdFwiLS1yZWJvb3QtZGVib3VuY2UtbXMgPG1zPlwiLFxuXHRcdFx0XCJRdWlldCB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IGFmZmVjdGluZyBzYXZlIGJlZm9yZSBhIHJlYm9vdFwiLFxuXHRcdFx0KHZhbHVlOiBzdHJpbmcpID0+IHJlc29sdmVSZWJvb3REZWJvdW5jZU1zKE51bWJlcih2YWx1ZSkpLFxuXHRcdFx0REVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb21tYW5kZXIgcGFzc2VzIHBvc2l0aW9uYWwgYXJncyBiZWZvcmUgb3B0aW9ucyB3aGVuIGBbc2xpY2VzLi4uXWAgaXMgZGVjbGFyZWQuXG5cdCAqIFRlcm1pbmFsJ3MgTW9kdWxlRmFjdG9yeSBleHBlY3RzIGAob3B0cywgY21kKWAg4oCUIG5vcm1hbGl6ZSBoZXJlLlxuXHQgKi9cblx0cHVibGljIG92ZXJyaWRlIGFjdGlvbihmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPik6IHRoaXMge1xuXHRcdHJldHVybiBzdXBlci5hY3Rpb24oKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG5cdFx0XHRjb25zdCBjbWQgPSBhcmdzLmF0KC0xKSBhcyBEZWNvaGVyZUNvbW1hbmQ7XG5cdFx0XHRjb25zdCBmaXJzdCA9IGFyZ3NbMF07XG5cdFx0XHRjb25zdCBoYXNQb3NpdGlvbmFsU2xpY2VzID1cblx0XHRcdFx0QXJyYXkuaXNBcnJheShmaXJzdCkgfHwgdHlwZW9mIGZpcnN0ID09PSBcInN0cmluZ1wiIHx8IGZpcnN0ID09PSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBvcHRzID0gaGFzUG9zaXRpb25hbFNsaWNlcyA/IChhcmdzWzFdIGFzIE9wdGlvblZhbHVlcykgOiAoYXJnc1swXSBhcyBPcHRpb25WYWx1ZXMpO1xuXG5cdFx0XHRjb25zdCBzbGljZXMgPSBub3JtYWxpemVQb3NpdGlvbmFsU2xpY2VzKGZpcnN0KTtcblx0XHRcdGlmIChzbGljZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjbWQuc2V0T3B0aW9uVmFsdWUoXCJzbGljZXNcIiwgc2xpY2VzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmbihvcHRzLCBjbWQpO1xuXHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBub3JtYWxpemVQb3NpdGlvbmFsU2xpY2VzKGZpcnN0OiB1bmtub3duKTogc3RyaW5nW10ge1xuXHRpZiAoQXJyYXkuaXNBcnJheShmaXJzdCkpIHtcblx0XHRyZXR1cm4gZmlyc3QuZmlsdGVyKChzKTogcyBpcyBzdHJpbmcgPT4gdHlwZW9mIHMgPT09IFwic3RyaW5nXCIgJiYgcyAhPT0gXCJcIik7XG5cdH1cblx0aWYgKHR5cGVvZiBmaXJzdCA9PT0gXCJzdHJpbmdcIiAmJiBmaXJzdCAhPT0gXCJcIikge1xuXHRcdHJldHVybiBbZmlyc3RdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cbiJdLCJuYW1lcyI6WyJTZXJ2ZUNvbW1hbmQiLCJEZWNvaGVyZUNvbW1hbmQiLCJhY3Rpb25zIiwiU2VydmVBY3Rpb24iLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJhcmd1bWVudCIsImFkZE9wdGlvbiIsIkNvbmZpZ3VyYXRpb25PcHRpb24iLCJQcm9qZWN0T3B0aW9uIiwib3B0aW9uIiwidmFsdWUiLCJyZXNvbHZlUmVib290RGVib3VuY2VNcyIsIk51bWJlciIsIkRFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TIiwiYWN0aW9uIiwiZm4iLCJhcmdzIiwiY21kIiwiYXQiLCJmaXJzdCIsImhhc1Bvc2l0aW9uYWxTbGljZXMiLCJBcnJheSIsImlzQXJyYXkiLCJ1bmRlZmluZWQiLCJvcHRzIiwic2xpY2VzIiwibm9ybWFsaXplUG9zaXRpb25hbFNsaWNlcyIsImxlbmd0aCIsInNldE9wdGlvblZhbHVlIiwiZmlsdGVyIiwicyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFLYUE7OztlQUFBQTs7O3FCQUx1RDtpQ0FFQTs2QkFDeEM7QUFFckIsTUFBTUEscUJBQXFCQyxvQkFBZTtJQUNoRCxJQUFvQkMsVUFBVTtRQUM3QixPQUFPO1lBQUNDLHdCQUFXO1NBQUM7SUFDckI7SUFFQSxZQUFtQkMsSUFBWSxDQUFFO1FBQ2hDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLFdBQVcsQ0FDZjtRQUVELElBQUksQ0FBQ0MsUUFBUSxDQUNaLGVBQ0E7UUFFRCxJQUFJLENBQUNDLFNBQVMsQ0FBQyxJQUFJQyx3QkFBbUIsQ0FBQztRQUN2QyxJQUFJLENBQUNELFNBQVMsQ0FBQyxJQUFJRSxrQkFBYTtRQUNoQyxJQUFJLENBQUNDLE1BQU0sQ0FDViw2QkFDQSw4RUFDQSxDQUFDQyxRQUFrQkMsSUFBQUEsd0NBQXVCLEVBQUNDLE9BQU9GLFNBQ2xERywyQ0FBMEI7SUFFNUI7SUFFQTs7O0VBR0MsR0FDRCxBQUFnQkMsT0FBT0MsRUFBNEMsRUFBUTtRQUMxRSxPQUFPLEtBQUssQ0FBQ0QsT0FBTyxDQUFDLEdBQUdFO1lBQ3ZCLE1BQU1DLE1BQU1ELEtBQUtFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLE1BQU1DLFFBQVFILElBQUksQ0FBQyxFQUFFO1lBQ3JCLE1BQU1JLHNCQUNMQyxNQUFNQyxPQUFPLENBQUNILFVBQVUsT0FBT0EsVUFBVSxZQUFZQSxVQUFVSTtZQUNoRSxNQUFNQyxPQUFPSixzQkFBdUJKLElBQUksQ0FBQyxFQUFFLEdBQXFCQSxJQUFJLENBQUMsRUFBRTtZQUV2RSxNQUFNUyxTQUFTQywwQkFBMEJQO1lBQ3pDLElBQUlNLE9BQU9FLE1BQU0sR0FBRyxHQUFHO2dCQUN0QlYsSUFBSVcsY0FBYyxDQUFDLFVBQVVIO1lBQzlCO1lBQ0EsT0FBT1YsR0FBR1MsTUFBTVA7UUFDakI7SUFDRDtBQUNEO0FBQ0EsU0FBU1MsMEJBQTBCUCxLQUFjO0lBQ2hELElBQUlFLE1BQU1DLE9BQU8sQ0FBQ0gsUUFBUTtRQUN6QixPQUFPQSxNQUFNVSxNQUFNLENBQUMsQ0FBQ0MsSUFBbUIsT0FBT0EsTUFBTSxZQUFZQSxNQUFNO0lBQ3hFO0lBQ0EsSUFBSSxPQUFPWCxVQUFVLFlBQVlBLFVBQVUsSUFBSTtRQUM5QyxPQUFPO1lBQUNBO1NBQU07SUFDZjtJQUNBLE9BQU8sRUFBRTtBQUNWIn0=
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory-slice helpers for `flux serve <dir>…` — classify Mesh packages as
|
|
3
|
+
* Flux apps, Nixpacks-style script deferrals, or libraries to skip.
|
|
4
|
+
*/ "use strict";
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
function _export(target, all) {
|
|
9
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
_export(exports, {
|
|
15
|
+
get DEFER_SCRIPT_CANDIDATES () {
|
|
16
|
+
return DEFER_SCRIPT_CANDIDATES;
|
|
17
|
+
},
|
|
18
|
+
get classifySliceProject () {
|
|
19
|
+
return classifySliceProject;
|
|
20
|
+
},
|
|
21
|
+
get classifySliceProjects () {
|
|
22
|
+
return classifySliceProjects;
|
|
23
|
+
},
|
|
24
|
+
get isFluxAppMain () {
|
|
25
|
+
return isFluxAppMain;
|
|
26
|
+
},
|
|
27
|
+
get isFluxOwnedScript () {
|
|
28
|
+
return isFluxOwnedScript;
|
|
29
|
+
},
|
|
30
|
+
get isUnderSlice () {
|
|
31
|
+
return isUnderSlice;
|
|
32
|
+
},
|
|
33
|
+
get normalizeSlicePrefix () {
|
|
34
|
+
return normalizeSlicePrefix;
|
|
35
|
+
},
|
|
36
|
+
get projectsInSlice () {
|
|
37
|
+
return projectsInSlice;
|
|
38
|
+
},
|
|
39
|
+
get projectsInSlices () {
|
|
40
|
+
return projectsInSlices;
|
|
41
|
+
},
|
|
42
|
+
get resolveDeferScript () {
|
|
43
|
+
return resolveDeferScript;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
const DEFER_SCRIPT_CANDIDATES = [
|
|
47
|
+
"dev",
|
|
48
|
+
"serve"
|
|
49
|
+
];
|
|
50
|
+
function normalizeSlicePrefix(slice) {
|
|
51
|
+
const trimmed = slice.replaceAll("\\", "/").replace(/\/+$/, "");
|
|
52
|
+
if (trimmed === "" || trimmed === ".") {
|
|
53
|
+
throw new Error("Slice directory must be a non-empty path");
|
|
54
|
+
}
|
|
55
|
+
if (trimmed === "projects" || trimmed.startsWith("projects/")) {
|
|
56
|
+
return trimmed;
|
|
57
|
+
}
|
|
58
|
+
return `projects/${trimmed}`;
|
|
59
|
+
}
|
|
60
|
+
function isUnderSlice(projectDirectory, slicePrefix) {
|
|
61
|
+
const dir = projectDirectory.replaceAll("\\", "/").replace(/\/+$/, "");
|
|
62
|
+
const prefix = slicePrefix.replaceAll("\\", "/").replace(/\/+$/, "");
|
|
63
|
+
if (dir === prefix || dir.startsWith(`${prefix}/`)) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
// Flat monorepo packages: projects/<module>.<role>
|
|
67
|
+
return dir.startsWith(`${prefix}.`);
|
|
68
|
+
}
|
|
69
|
+
function projectsInSlice(projects, slice) {
|
|
70
|
+
const prefix = normalizeSlicePrefix(slice);
|
|
71
|
+
return projects.filter((p)=>isUnderSlice(p.projectDirectory, prefix));
|
|
72
|
+
}
|
|
73
|
+
function projectsInSlices(projects, slices) {
|
|
74
|
+
const byName = new Map();
|
|
75
|
+
for (const slice of slices){
|
|
76
|
+
for (const project of projectsInSlice(projects, slice)){
|
|
77
|
+
byName.set(project.name, project);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return [
|
|
81
|
+
...byName.values()
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
function isFluxOwnedScript(script) {
|
|
85
|
+
return /\bflux\b/i.test(script);
|
|
86
|
+
}
|
|
87
|
+
function resolveDeferScript(scripts) {
|
|
88
|
+
for (const name of DEFER_SCRIPT_CANDIDATES){
|
|
89
|
+
const body = scripts[name];
|
|
90
|
+
if (body != null && body !== "" && !isFluxOwnedScript(body)) {
|
|
91
|
+
return name;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
function isFluxAppMain(main) {
|
|
97
|
+
const normalized = main.replaceAll("\\", "/");
|
|
98
|
+
return /(^|\/)main\.tsx?$/.test(normalized);
|
|
99
|
+
}
|
|
100
|
+
function classifySliceProject(project) {
|
|
101
|
+
if (resolveDeferScript(project.scripts) != null) {
|
|
102
|
+
return "defer";
|
|
103
|
+
}
|
|
104
|
+
if (isFluxAppMain(project.main)) {
|
|
105
|
+
return "flux";
|
|
106
|
+
}
|
|
107
|
+
return "skip";
|
|
108
|
+
}
|
|
109
|
+
function classifySliceProjects(projects, slices) {
|
|
110
|
+
const tokens = typeof slices === "string" ? [
|
|
111
|
+
slices
|
|
112
|
+
] : [
|
|
113
|
+
...slices
|
|
114
|
+
];
|
|
115
|
+
const inSlice = projectsInSlices(projects, tokens);
|
|
116
|
+
const flux = [];
|
|
117
|
+
const defer = [];
|
|
118
|
+
const skip = [];
|
|
119
|
+
for (const project of inSlice){
|
|
120
|
+
const kind = classifySliceProject(project);
|
|
121
|
+
if (kind === "flux") flux.push(project);
|
|
122
|
+
else if (kind === "defer") defer.push(project);
|
|
123
|
+
else skip.push(project);
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
flux,
|
|
127
|
+
defer,
|
|
128
|
+
skip
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NsaWNlLXNlcnZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGlyZWN0b3J5LXNsaWNlIGhlbHBlcnMgZm9yIGBmbHV4IHNlcnZlIDxkaXI+4oCmYCDigJQgY2xhc3NpZnkgTWVzaCBwYWNrYWdlcyBhc1xuICogRmx1eCBhcHBzLCBOaXhwYWNrcy1zdHlsZSBzY3JpcHQgZGVmZXJyYWxzLCBvciBsaWJyYXJpZXMgdG8gc2tpcC5cbiAqL1xuXG5leHBvcnQgdHlwZSBTbGljZVByb2plY3RWaWV3ID0ge1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBSZWxhdGl2ZSBwcm9qZWN0IGRpciBmcm9tIHdvcmtzcGFjZSByb290IChlLmcuIGBwcm9qZWN0cy9mdW5kaW5nL2FwaWApLiAqL1xuXHRyZWFkb25seSBwcm9qZWN0RGlyZWN0b3J5OiBzdHJpbmc7XG5cdHJlYWRvbmx5IG1haW46IHN0cmluZztcblx0cmVhZG9ubHkgc2NyaXB0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIFNsaWNlS2luZCA9IFwiZmx1eFwiIHwgXCJkZWZlclwiIHwgXCJza2lwXCI7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRTbGljZSA9IHtcblx0cmVhZG9ubHkgZmx1eDogU2xpY2VQcm9qZWN0Vmlld1tdO1xuXHRyZWFkb25seSBkZWZlcjogU2xpY2VQcm9qZWN0Vmlld1tdO1xuXHRyZWFkb25seSBza2lwOiBTbGljZVByb2plY3RWaWV3W107XG59O1xuXG4vKiogUHJlZmVycmVkIHBhY2thZ2Ugc2NyaXB0cyBmb3IgZm9yZWlnbiB0b29sY2hhaW5zIChOaXhwYWNrcy1zdHlsZSkuICovXG5leHBvcnQgY29uc3QgREVGRVJfU0NSSVBUX0NBTkRJREFURVMgPSBbXCJkZXZcIiwgXCJzZXJ2ZVwiXSBhcyBjb25zdDtcblxuLyoqXG4gKiBOb3JtYWxpemUgYSBDTEkgc2xpY2UgdG9rZW4gdG8gYSBgcHJvamVjdHMv4oCmYCBwcmVmaXggd2l0aG91dCBhIHRyYWlsaW5nIHNsYXNoLlxuICogYGZ1bmRpbmdgIGFuZCBgcHJvamVjdHMvZnVuZGluZ2AgYm90aCBiZWNvbWUgYHByb2plY3RzL2Z1bmRpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU2xpY2VQcmVmaXgoc2xpY2U6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHRyaW1tZWQgPSBzbGljZS5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIikucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTtcblx0aWYgKHRyaW1tZWQgPT09IFwiXCIgfHwgdHJpbW1lZCA9PT0gXCIuXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJTbGljZSBkaXJlY3RvcnkgbXVzdCBiZSBhIG5vbi1lbXB0eSBwYXRoXCIpO1xuXHR9XG5cdGlmICh0cmltbWVkID09PSBcInByb2plY3RzXCIgfHwgdHJpbW1lZC5zdGFydHNXaXRoKFwicHJvamVjdHMvXCIpKSB7XG5cdFx0cmV0dXJuIHRyaW1tZWQ7XG5cdH1cblx0cmV0dXJuIGBwcm9qZWN0cy8ke3RyaW1tZWR9YDtcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gYHByb2plY3REaXJlY3RvcnlgIGJlbG9uZ3MgdG8gdGhlIHNsaWNlIHRva2VuLlxuICpcbiAqIE1hdGNoZXM6XG4gKiAtIG5lc3RlZDogYHByb2plY3RzL2Z1bmRpbmdgLCBgcHJvamVjdHMvZnVuZGluZy9hcGlgXG4gKiAtIGZsYXQgZG90dGVkIHBhY2thZ2UgZGlyczogYHByb2plY3RzL2Z1bmRpbmcud2ViYCBmb3IgdG9rZW4gYGZ1bmRpbmdgXG4gKlxuICogRG9lcyBub3QgbWF0Y2ggc2libGluZ3MgdGhhdCBvbmx5IHNoYXJlIGEgc3RyaW5nIHByZWZpeCAoYGZ1bmRpbmdgIHZzIGBmdW5kaW5nLWZlZS5hcGlgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZXJTbGljZShwcm9qZWN0RGlyZWN0b3J5OiBzdHJpbmcsIHNsaWNlUHJlZml4OiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3QgZGlyID0gcHJvamVjdERpcmVjdG9yeS5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIikucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTtcblx0Y29uc3QgcHJlZml4ID0gc2xpY2VQcmVmaXgucmVwbGFjZUFsbChcIlxcXFxcIiwgXCIvXCIpLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG5cdGlmIChkaXIgPT09IHByZWZpeCB8fCBkaXIuc3RhcnRzV2l0aChgJHtwcmVmaXh9L2ApKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gRmxhdCBtb25vcmVwbyBwYWNrYWdlczogcHJvamVjdHMvPG1vZHVsZT4uPHJvbGU+XG5cdHJldHVybiBkaXIuc3RhcnRzV2l0aChgJHtwcmVmaXh9LmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdHNJblNsaWNlKFxuXHRwcm9qZWN0czogcmVhZG9ubHkgU2xpY2VQcm9qZWN0Vmlld1tdLFxuXHRzbGljZTogc3RyaW5nLFxuKTogU2xpY2VQcm9qZWN0Vmlld1tdIHtcblx0Y29uc3QgcHJlZml4ID0gbm9ybWFsaXplU2xpY2VQcmVmaXgoc2xpY2UpO1xuXHRyZXR1cm4gcHJvamVjdHMuZmlsdGVyKChwKSA9PiBpc1VuZGVyU2xpY2UocC5wcm9qZWN0RGlyZWN0b3J5LCBwcmVmaXgpKTtcbn1cblxuLyoqIFVuaW9uIG9mIHBhY2thZ2VzIHVuZGVyIGFueSBvZiB0aGUgc2xpY2UgdG9rZW5zIChkZWR1cGVkIGJ5IHBhY2thZ2UgbmFtZSkuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdHNJblNsaWNlcyhcblx0cHJvamVjdHM6IHJlYWRvbmx5IFNsaWNlUHJvamVjdFZpZXdbXSxcblx0c2xpY2VzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IFNsaWNlUHJvamVjdFZpZXdbXSB7XG5cdGNvbnN0IGJ5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBTbGljZVByb2plY3RWaWV3PigpO1xuXHRmb3IgKGNvbnN0IHNsaWNlIG9mIHNsaWNlcykge1xuXHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0c0luU2xpY2UocHJvamVjdHMsIHNsaWNlKSkge1xuXHRcdFx0YnlOYW1lLnNldChwcm9qZWN0Lm5hbWUsIHByb2plY3QpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gWy4uLmJ5TmFtZS52YWx1ZXMoKV07XG59XG5cbi8qKiBTY3JpcHQgaW52b2tlcyBGbHV4IChpbi1wcm9jZXNzIHNlcnZlIHN0YXlzIG9uIEZsdXgsIG5vdCBkZWZlcnJlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGbHV4T3duZWRTY3JpcHQoc2NyaXB0OiBzdHJpbmcpOiBib29sZWFuIHtcblx0cmV0dXJuIC9cXGJmbHV4XFxiL2kudGVzdChzY3JpcHQpO1xufVxuXG4vKipcbiAqIEZpcnN0IE5peHBhY2tzLXN0eWxlIHNlcnZlIHNjcmlwdCB0aGF0IGlzIG5vdCBGbHV4LW93bmVkLlxuICogUHJlZmVycyBgZGV2YCwgdGhlbiBgc2VydmVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZURlZmVyU2NyaXB0KHNjcmlwdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRmb3IgKGNvbnN0IG5hbWUgb2YgREVGRVJfU0NSSVBUX0NBTkRJREFURVMpIHtcblx0XHRjb25zdCBib2R5ID0gc2NyaXB0c1tuYW1lXTtcblx0XHRpZiAoYm9keSAhPSBudWxsICYmIGJvZHkgIT09IFwiXCIgJiYgIWlzRmx1eE93bmVkU2NyaXB0KGJvZHkpKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIENvbnZlbnRpb246IEZsdXggTm9kZSBhcHBzIHVzZSBgbWFpbmAgZW5kaW5nIGluIGBtYWluLnRzYCAvIGBtYWluLnRzeGAuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGbHV4QXBwTWFpbihtYWluOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3Qgbm9ybWFsaXplZCA9IG1haW4ucmVwbGFjZUFsbChcIlxcXFxcIiwgXCIvXCIpO1xuXHRyZXR1cm4gLyhefFxcLyltYWluXFwudHN4PyQvLnRlc3Qobm9ybWFsaXplZCk7XG59XG5cbi8qKlxuICogQ2xhc3NpZnkgb25lIHBhY2thZ2UuIEZvcmVpZ24gc2VydmUgc2NyaXB0cyB3aW4gb3ZlciBgbWFpbi50c2AgKFZpdGUgYXBwc1xuICogb2Z0ZW4gaGF2ZSBhIG1haW4gZW50cnkgYnV0IG11c3Qgbm90IGJlIEhNUi1ib290ZWQgYnkgRmx1eCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeVNsaWNlUHJvamVjdChwcm9qZWN0OiBTbGljZVByb2plY3RWaWV3KTogU2xpY2VLaW5kIHtcblx0aWYgKHJlc29sdmVEZWZlclNjcmlwdChwcm9qZWN0LnNjcmlwdHMpICE9IG51bGwpIHtcblx0XHRyZXR1cm4gXCJkZWZlclwiO1xuXHR9XG5cdGlmIChpc0ZsdXhBcHBNYWluKHByb2plY3QubWFpbikpIHtcblx0XHRyZXR1cm4gXCJmbHV4XCI7XG5cdH1cblx0cmV0dXJuIFwic2tpcFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlTbGljZVByb2plY3RzKFxuXHRwcm9qZWN0czogcmVhZG9ubHkgU2xpY2VQcm9qZWN0Vmlld1tdLFxuXHRzbGljZXM6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogQ2xhc3NpZmllZFNsaWNlIHtcblx0Y29uc3QgdG9rZW5zID0gdHlwZW9mIHNsaWNlcyA9PT0gXCJzdHJpbmdcIiA/IFtzbGljZXNdIDogWy4uLnNsaWNlc107XG5cdGNvbnN0IGluU2xpY2UgPSBwcm9qZWN0c0luU2xpY2VzKHByb2plY3RzLCB0b2tlbnMpO1xuXHRjb25zdCBmbHV4OiBTbGljZVByb2plY3RWaWV3W10gPSBbXTtcblx0Y29uc3QgZGVmZXI6IFNsaWNlUHJvamVjdFZpZXdbXSA9IFtdO1xuXHRjb25zdCBza2lwOiBTbGljZVByb2plY3RWaWV3W10gPSBbXTtcblx0Zm9yIChjb25zdCBwcm9qZWN0IG9mIGluU2xpY2UpIHtcblx0XHRjb25zdCBraW5kID0gY2xhc3NpZnlTbGljZVByb2plY3QocHJvamVjdCk7XG5cdFx0aWYgKGtpbmQgPT09IFwiZmx1eFwiKSBmbHV4LnB1c2gocHJvamVjdCk7XG5cdFx0ZWxzZSBpZiAoa2luZCA9PT0gXCJkZWZlclwiKSBkZWZlci5wdXNoKHByb2plY3QpO1xuXHRcdGVsc2Ugc2tpcC5wdXNoKHByb2plY3QpO1xuXHR9XG5cdHJldHVybiB7IGZsdXgsIGRlZmVyLCBza2lwIH07XG59XG4iXSwibmFtZXMiOlsiREVGRVJfU0NSSVBUX0NBTkRJREFURVMiLCJjbGFzc2lmeVNsaWNlUHJvamVjdCIsImNsYXNzaWZ5U2xpY2VQcm9qZWN0cyIsImlzRmx1eEFwcE1haW4iLCJpc0ZsdXhPd25lZFNjcmlwdCIsImlzVW5kZXJTbGljZSIsIm5vcm1hbGl6ZVNsaWNlUHJlZml4IiwicHJvamVjdHNJblNsaWNlIiwicHJvamVjdHNJblNsaWNlcyIsInJlc29sdmVEZWZlclNjcmlwdCIsInNsaWNlIiwidHJpbW1lZCIsInJlcGxhY2VBbGwiLCJyZXBsYWNlIiwiRXJyb3IiLCJzdGFydHNXaXRoIiwicHJvamVjdERpcmVjdG9yeSIsInNsaWNlUHJlZml4IiwiZGlyIiwicHJlZml4IiwicHJvamVjdHMiLCJmaWx0ZXIiLCJwIiwic2xpY2VzIiwiYnlOYW1lIiwiTWFwIiwicHJvamVjdCIsInNldCIsIm5hbWUiLCJ2YWx1ZXMiLCJzY3JpcHQiLCJ0ZXN0Iiwic2NyaXB0cyIsImJvZHkiLCJ1bmRlZmluZWQiLCJtYWluIiwibm9ybWFsaXplZCIsInRva2VucyIsImluU2xpY2UiLCJmbHV4IiwiZGVmZXIiLCJza2lwIiwia2luZCIsInB1c2giXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQzs7Ozs7Ozs7Ozs7UUFtQllBO2VBQUFBOztRQXVGR0M7ZUFBQUE7O1FBVUFD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
|
|
@@ -0,0 +1,48 @@
|
|
|
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 { spawn } from "node:child_process";
|
|
8
|
+
import { injectable } from "@decohere/crucible/decorators";
|
|
9
|
+
import { detectPackageManager, packageManagerFromString } from "@decohere/nexus/interop";
|
|
10
|
+
import { scribe } from "@decohere/scribe";
|
|
11
|
+
export class DeferredScriptRunner {
|
|
12
|
+
logger = scribe.logger(DeferredScriptRunner.name);
|
|
13
|
+
children = [];
|
|
14
|
+
start(options) {
|
|
15
|
+
const pm = detectPackageManager(options.workspaceRoot) ?? packageManagerFromString("pnpm");
|
|
16
|
+
this.logger.info(`deferred ${options.label} — running ${pm.name} run ${options.script} in ${options.cwd}`);
|
|
17
|
+
const child = spawn(pm.name, [
|
|
18
|
+
"run",
|
|
19
|
+
options.script
|
|
20
|
+
], {
|
|
21
|
+
cwd: options.cwd,
|
|
22
|
+
stdio: "inherit",
|
|
23
|
+
env: process.env,
|
|
24
|
+
shell: false
|
|
25
|
+
});
|
|
26
|
+
child.on("exit", (code, signal)=>{
|
|
27
|
+
if (signal) return;
|
|
28
|
+
if (code != null && code !== 0) {
|
|
29
|
+
this.logger.warn(`deferred ${options.label} exited with ${code}`);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
this.children.push(child);
|
|
33
|
+
return child;
|
|
34
|
+
}
|
|
35
|
+
async [Symbol.asyncDispose]() {
|
|
36
|
+
for (const child of this.children){
|
|
37
|
+
if (!child.killed) {
|
|
38
|
+
child.kill("SIGTERM");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
this.children.length = 0;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
DeferredScriptRunner = _ts_decorate([
|
|
45
|
+
injectable()
|
|
46
|
+
], DeferredScriptRunner);
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2RlZmVycmVkLXNjcmlwdC1ydW5uZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDaGlsZFByb2Nlc3MsIHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZU1hbmFnZXIsIHBhY2thZ2VNYW5hZ2VyRnJvbVN0cmluZyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW50ZXJvcFwiO1xuaW1wb3J0IHsgdHlwZSBMb2dnZXIsIHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5cbmV4cG9ydCB0eXBlIERlZmVycmVkU2NyaXB0U3RhcnQgPSB7XG5cdHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuXHRyZWFkb25seSBzY3JpcHQ6IHN0cmluZztcblx0LyoqIFdvcmtzcGFjZSByb290IHVzZWQgdG8gZGV0ZWN0IHBucG0vbnBtL3lhcm4uICovXG5cdHJlYWRvbmx5IHdvcmtzcGFjZVJvb3Q6IHN0cmluZztcbn07XG5cbi8qKlxuICogTml4cGFja3Mtc3R5bGUgY2hpbGQgcHJvY2Vzc2VzIGZvciBmb3JlaWduIHBhY2thZ2VzIGluIGEgZmx1eCBzZXJ2ZSBzbGljZS5cbiAqIEtpbGxlZCB3aGVuIHRoZSBGbHV4IGNvbnRhaW5lciBkaXNwb3NlcyAoU0lHSU5UIOKGkiBSb290TW9kdWxlIHRlYXJkb3duKS5cbiAqL1xuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERlZmVycmVkU2NyaXB0UnVubmVyIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcblx0cHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlciA9IHNjcmliZS5sb2dnZXIoRGVmZXJyZWRTY3JpcHRSdW5uZXIubmFtZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IENoaWxkUHJvY2Vzc1tdID0gW107XG5cblx0cHVibGljIHN0YXJ0KG9wdGlvbnM6IERlZmVycmVkU2NyaXB0U3RhcnQpOiBDaGlsZFByb2Nlc3Mge1xuXHRcdGNvbnN0IHBtID0gZGV0ZWN0UGFja2FnZU1hbmFnZXIob3B0aW9ucy53b3Jrc3BhY2VSb290KSA/PyBwYWNrYWdlTWFuYWdlckZyb21TdHJpbmcoXCJwbnBtXCIpO1xuXHRcdHRoaXMubG9nZ2VyLmluZm8oXG5cdFx0XHRgZGVmZXJyZWQgJHtvcHRpb25zLmxhYmVsfSDigJQgcnVubmluZyAke3BtLm5hbWV9IHJ1biAke29wdGlvbnMuc2NyaXB0fSBpbiAke29wdGlvbnMuY3dkfWAsXG5cdFx0KTtcblx0XHRjb25zdCBjaGlsZCA9IHNwYXduKHBtLm5hbWUsIFtcInJ1blwiLCBvcHRpb25zLnNjcmlwdF0sIHtcblx0XHRcdGN3ZDogb3B0aW9ucy5jd2QsXG5cdFx0XHRzdGRpbzogXCJpbmhlcml0XCIsXG5cdFx0XHRlbnY6IHByb2Nlc3MuZW52LFxuXHRcdFx0c2hlbGw6IGZhbHNlLFxuXHRcdH0pO1xuXHRcdGNoaWxkLm9uKFwiZXhpdFwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG5cdFx0XHRpZiAoc2lnbmFsKSByZXR1cm47XG5cdFx0XHRpZiAoY29kZSAhPSBudWxsICYmIGNvZGUgIT09IDApIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIud2FybihgZGVmZXJyZWQgJHtvcHRpb25zLmxhYmVsfSBleGl0ZWQgd2l0aCAke2NvZGV9YCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblx0XHRyZXR1cm4gY2hpbGQ7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCkge1xuXHRcdGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuXHRcdFx0aWYgKCFjaGlsZC5raWxsZWQpIHtcblx0XHRcdFx0Y2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuY2hpbGRyZW4ubGVuZ3RoID0gMDtcblx0fVxufVxuIl0sIm5hbWVzIjpbInNwYXduIiwiaW5qZWN0YWJsZSIsImRldGVjdFBhY2thZ2VNYW5hZ2VyIiwicGFja2FnZU1hbmFnZXJGcm9tU3RyaW5nIiwic2NyaWJlIiwiRGVmZXJyZWRTY3JpcHRSdW5uZXIiLCJsb2dnZXIiLCJuYW1lIiwiY2hpbGRyZW4iLCJzdGFydCIsIm9wdGlvbnMiLCJwbSIsIndvcmtzcGFjZVJvb3QiLCJpbmZvIiwibGFiZWwiLCJzY3JpcHQiLCJjd2QiLCJjaGlsZCIsInN0ZGlvIiwiZW52IiwicHJvY2VzcyIsInNoZWxsIiwib24iLCJjb2RlIiwic2lnbmFsIiwid2FybiIsInB1c2giLCJTeW1ib2wiLCJhc3luY0Rpc3Bvc2UiLCJraWxsZWQiLCJraWxsIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxTQUE0QkEsS0FBSyxRQUFRLHFCQUFxQjtBQUM5RCxTQUFTQyxVQUFVLFFBQVEsZ0NBQWdDO0FBQzNELFNBQVNDLG9CQUFvQixFQUFFQyx3QkFBd0IsUUFBUSwwQkFBMEI7QUFDekYsU0FBc0JDLE1BQU0sUUFBUSxtQkFBbUI7QUFldkQsT0FBTyxNQUFNQztJQUNLQyxTQUFpQkYsT0FBT0UsTUFBTSxDQUFDRCxxQkFBcUJFLElBQUksRUFBRTtJQUMxREMsV0FBMkIsRUFBRSxDQUFDO0lBRXhDQyxNQUFNQyxPQUE0QixFQUFnQjtRQUN4RCxNQUFNQyxLQUFLVCxxQkFBcUJRLFFBQVFFLGFBQWEsS0FBS1QseUJBQXlCO1FBQ25GLElBQUksQ0FBQ0csTUFBTSxDQUFDTyxJQUFJLENBQ2YsQ0FBQyxTQUFTLEVBQUVILFFBQVFJLEtBQUssQ0FBQyxXQUFXLEVBQUVILEdBQUdKLElBQUksQ0FBQyxLQUFLLEVBQUVHLFFBQVFLLE1BQU0sQ0FBQyxJQUFJLEVBQUVMLFFBQVFNLEdBQUcsRUFBRTtRQUV6RixNQUFNQyxRQUFRakIsTUFBTVcsR0FBR0osSUFBSSxFQUFFO1lBQUM7WUFBT0csUUFBUUssTUFBTTtTQUFDLEVBQUU7WUFDckRDLEtBQUtOLFFBQVFNLEdBQUc7WUFDaEJFLE9BQU87WUFDUEMsS0FBS0MsUUFBUUQsR0FBRztZQUNoQkUsT0FBTztRQUNSO1FBQ0FKLE1BQU1LLEVBQUUsQ0FBQyxRQUFRLENBQUNDLE1BQU1DO1lBQ3ZCLElBQUlBLFFBQVE7WUFDWixJQUFJRCxRQUFRLFFBQVFBLFNBQVMsR0FBRztnQkFDL0IsSUFBSSxDQUFDakIsTUFBTSxDQUFDbUIsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFZixRQUFRSSxLQUFLLENBQUMsYUFBYSxFQUFFUyxNQUFNO1lBQ2pFO1FBQ0Q7UUFDQSxJQUFJLENBQUNmLFFBQVEsQ0FBQ2tCLElBQUksQ0FBQ1Q7UUFDbkIsT0FBT0E7SUFDUjtJQUVBLE1BQWEsQ0FBQ1UsT0FBT0MsWUFBWSxDQUFDLEdBQUc7UUFDcEMsS0FBSyxNQUFNWCxTQUFTLElBQUksQ0FBQ1QsUUFBUSxDQUFFO1lBQ2xDLElBQUksQ0FBQ1MsTUFBTVksTUFBTSxFQUFFO2dCQUNsQlosTUFBTWEsSUFBSSxDQUFDO1lBQ1o7UUFDRDtRQUNBLElBQUksQ0FBQ3RCLFFBQVEsQ0FBQ3VCLE1BQU0sR0FBRztJQUN4QjtBQUNEIn0=
|
package/es6/src/flux.module.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { WorkspaceFactory } from "@decohere/mesh";
|
|
2
2
|
import { ModuleManifest } from "@decohere/nexus/cli";
|
|
3
|
+
import { DeferredScriptRunner } from "./deferred-script-runner.js";
|
|
3
4
|
import { FluxCommand } from "./flux.command.js";
|
|
4
5
|
import { HotReloadServer } from "./hot-reload-server.js";
|
|
5
6
|
import { ServeAction } from "./serve.action.js";
|
|
@@ -11,6 +12,7 @@ export class FluxModule extends ModuleManifest {
|
|
|
11
12
|
};
|
|
12
13
|
registerServices(builder) {
|
|
13
14
|
builder.registerSingleton(HotReloadServer);
|
|
15
|
+
builder.registerSingleton(DeferredScriptRunner);
|
|
14
16
|
}
|
|
15
17
|
createWorkspace(options) {
|
|
16
18
|
return WorkspaceFactory.create({
|
|
@@ -19,4 +21,4 @@ export class FluxModule extends ModuleManifest {
|
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2ZsdXgubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdvcmtzcGFjZUZhY3RvcnkgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgTW9kdWxlTWFuaWZlc3QgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXJCdWlsZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb21wb3NpdGlvblwiO1xuaW1wb3J0IHsgRGVmZXJyZWRTY3JpcHRSdW5uZXIgfSBmcm9tIFwiLi9kZWZlcnJlZC1zY3JpcHQtcnVubmVyLmpzXCI7XG5pbXBvcnQgeyBGbHV4Q29tbWFuZCB9IGZyb20gXCIuL2ZsdXguY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgSG90UmVsb2FkU2VydmVyIH0gZnJvbSBcIi4vaG90LXJlbG9hZC1zZXJ2ZXIuanNcIjtcbmltcG9ydCB7IFNlcnZlQWN0aW9uIH0gZnJvbSBcIi4vc2VydmUuYWN0aW9uLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBGbHV4TW9kdWxlIGV4dGVuZHMgTW9kdWxlTWFuaWZlc3Qge1xuXHRwdWJsaWMgcmVhZG9ubHkgaWQgPSBcImZsdXhcIjtcblx0cHVibGljIHJlYWRvbmx5IGNvbW1hbmQgPSBGbHV4Q29tbWFuZDtcblx0cHVibGljIHJlYWRvbmx5IGFjdGlvbnMgPSB7XG5cdFx0c2VydmU6IFNlcnZlQWN0aW9uLFxuXHR9O1xuXG5cdHB1YmxpYyByZWdpc3RlclNlcnZpY2VzKGJ1aWxkZXI6IENvbnRhaW5lckJ1aWxkZXIpIHtcblx0XHRidWlsZGVyLnJlZ2lzdGVyU2luZ2xldG9uKEhvdFJlbG9hZFNlcnZlcik7XG5cdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihEZWZlcnJlZFNjcmlwdFJ1bm5lcik7XG5cdH1cblxuXHRwdWJsaWMgb3ZlcnJpZGUgY3JlYXRlV29ya3NwYWNlKG9wdGlvbnM6IFdvcmtzcGFjZUZhY3RvcnlPcHRpb25zKSB7XG5cdFx0cmV0dXJuIFdvcmtzcGFjZUZhY3RvcnkuY3JlYXRlKHsgY29uZmlnRmlsZTogb3B0aW9ucy5jb25maWdGaWxlIH0pO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiV29ya3NwYWNlRmFjdG9yeSIsIk1vZHVsZU1hbmlmZXN0IiwiRGVmZXJyZWRTY3JpcHRSdW5uZXIiLCJGbHV4Q29tbWFuZCIsIkhvdFJlbG9hZFNlcnZlciIsIlNlcnZlQWN0aW9uIiwiRmx1eE1vZHVsZSIsImlkIiwiY29tbWFuZCIsImFjdGlvbnMiLCJzZXJ2ZSIsInJlZ2lzdGVyU2VydmljZXMiLCJidWlsZGVyIiwicmVnaXN0ZXJTaW5nbGV0b24iLCJjcmVhdGVXb3Jrc3BhY2UiLCJvcHRpb25zIiwiY3JlYXRlIiwiY29uZmlnRmlsZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsZ0JBQWdCLFFBQVEsaUJBQWlCO0FBRWxELFNBQVNDLGNBQWMsUUFBUSxzQkFBc0I7QUFFckQsU0FBU0Msb0JBQW9CLFFBQVEsOEJBQThCO0FBQ25FLFNBQVNDLFdBQVcsUUFBUSxvQkFBb0I7QUFDaEQsU0FBU0MsZUFBZSxRQUFRLHlCQUF5QjtBQUN6RCxTQUFTQyxXQUFXLFFBQVEsb0JBQW9CO0FBRWhELE9BQU8sTUFBTUMsbUJBQW1CTDtJQUNmTSxLQUFLLE9BQU87SUFDWkMsVUFBVUwsWUFBWTtJQUN0Qk0sVUFBVTtRQUN6QkMsT0FBT0w7SUFDUixFQUFFO0lBRUtNLGlCQUFpQkMsT0FBeUIsRUFBRTtRQUNsREEsUUFBUUMsaUJBQWlCLENBQUNUO1FBQzFCUSxRQUFRQyxpQkFBaUIsQ0FBQ1g7SUFDM0I7SUFFZ0JZLGdCQUFnQkMsT0FBZ0MsRUFBRTtRQUNqRSxPQUFPZixpQkFBaUJnQixNQUFNLENBQUM7WUFBRUMsWUFBWUYsUUFBUUUsVUFBVTtRQUFDO0lBQ2pFO0FBQ0QifQ==
|