@guanjinke/artifact-client 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +2 -7
  2. package/dist/cli/environment.d.ts +1 -10
  3. package/dist/cli/environment.d.ts.map +1 -1
  4. package/dist/cli/environment.js +0 -24
  5. package/dist/cli/environment.js.map +1 -1
  6. package/dist/cli/setup.js +5 -8
  7. package/dist/cli/setup.js.map +1 -1
  8. package/dist/environment/builder.d.ts.map +1 -1
  9. package/dist/environment/builder.js +30 -20
  10. package/dist/environment/builder.js.map +1 -1
  11. package/dist/environment/catalog.d.ts +8 -0
  12. package/dist/environment/catalog.d.ts.map +1 -1
  13. package/dist/environment/catalog.js +25 -0
  14. package/dist/environment/catalog.js.map +1 -1
  15. package/dist/environment/plan.d.ts +26 -5
  16. package/dist/environment/plan.d.ts.map +1 -1
  17. package/dist/environment/plan.js +63 -11
  18. package/dist/environment/plan.js.map +1 -1
  19. package/dist/environment/types.d.ts +17 -9
  20. package/dist/environment/types.d.ts.map +1 -1
  21. package/dist/environment/update.d.ts +0 -25
  22. package/dist/environment/update.d.ts.map +1 -1
  23. package/dist/environment/update.js +74 -67
  24. package/dist/environment/update.js.map +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/package.json +2 -3
  28. package/resources/3DScene/capeHill.hdr +0 -0
  29. package/resources/3DScene/defaultGround.jpg +0 -0
  30. package/resources/3DScene/environmentSpecular.env +0 -0
  31. package/resources/3DScene/flare.png +0 -0
  32. package/resources/3DScene/geometry1.png +0 -0
  33. package/resources/3DScene/geometry10.png +0 -0
  34. package/resources/3DScene/geometry11.png +0 -0
  35. package/resources/3DScene/geometry12.png +0 -0
  36. package/resources/3DScene/geometry13.png +0 -0
  37. package/resources/3DScene/geometry2.png +0 -0
  38. package/resources/3DScene/geometry3.png +0 -0
  39. package/resources/3DScene/geometry4.png +0 -0
  40. package/resources/3DScene/geometry5.png +0 -0
  41. package/resources/3DScene/geometry6.png +0 -0
  42. package/resources/3DScene/geometry7.png +0 -0
  43. package/resources/3DScene/geometry8.png +0 -0
  44. package/resources/3DScene/geometry9.png +0 -0
  45. package/resources/3DScene/lilienstein.hdr +0 -0
  46. package/resources/3DScene/sky.hdr +0 -0
  47. package/resources/3DScene/studio.env +0 -0
  48. package/resources/3DScene/wastelandCloudsPureSky.hdr +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/environment/plan.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEpG,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B9G;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;CAAyC,CAAC;AAEhE,sEAAsE;AACtE,eAAO,MAAM,WAAW,EAAE,MAAwB,CAAC;AAEnD;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,iBAAiB,EAAE,CAG7E,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAAiE,CAAC;AAEjH,8DAA8D;AAC9D,eAAO,MAAM,WAAW,EAAE,MAAM,EAAmD,CAAC;AAEpF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAEpE;AAED,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,GAAG;IAAE,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC,CAerM;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAkCnK"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/environment/plan.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEpG,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B9G;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;CAAyC,CAAC;AAEhE,sEAAsE;AACtE,eAAO,MAAM,WAAW,EAAE,MAAwB,CAAC;AAEnD;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,iBAAiB,EAAE,CAG7E,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAAiE,CAAC;AAEjH,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAAmD,CAAC;AAEzF;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,EAA2B,CAAC;AAEhE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAEvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAEpE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAGrG;AAED,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,GAAG;IAAE,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC,CAkBrM;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAwDnK"}
@@ -33,10 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.coreModules = exports.optionalModules = exports.optionalModulesByEdition = exports.defaultPort = exports.portRange = void 0;
36
+ exports.trailingModules = exports.autoAddedModules = exports.optionalModules = exports.optionalModulesByEdition = exports.defaultPort = exports.portRange = void 0;
37
37
  exports.validateTarget = validateTarget;
38
38
  exports.dependencyModules = dependencyModules;
39
39
  exports.plannedModules = plannedModules;
40
+ exports.deployableModules = deployableModules;
40
41
  exports.validateEnvironmentOptions = validateEnvironmentOptions;
41
42
  exports.buildEnvironmentPlan = buildEnvironmentPlan;
42
43
  const fs = __importStar(require("fs/promises"));
@@ -105,7 +106,18 @@ exports.optionalModulesByEdition = {
105
106
  /** Every selectable optional module, in the order errors and the UI list them. */
106
107
  exports.optionalModules = [...new Set(Object.values(exports.optionalModulesByEdition).flat())];
107
108
  /** Components every environment contains, selected or not. */
108
- exports.coreModules = ['server', 'monitoring', 'common', 'analysis'];
109
+ exports.autoAddedModules = ['server', 'monitoring', 'common', 'analysis'];
110
+ /**
111
+ * Built-in modules deployed **after** every other module, in this order.
112
+ *
113
+ * `dashboard-resource` ships the 3D scene and map assets the Server serves from
114
+ * its web root. It is built in and invisible: no `--modules` value can select,
115
+ * add or remove it, it is never an optional module and it has no local source.
116
+ * It is only deployed when the environment's major publishes it — a major
117
+ * without a version pointer (9.1 has no `wyn-dashboard-resource` line) simply
118
+ * does not get it, and the plan says so in one warning.
119
+ */
120
+ exports.trailingModules = ['dashboard-resource'];
109
121
  /**
110
122
  * Modules a selection pulls in on its own, because the selected module cannot
111
123
  * work without them — smart documents requires the collaboration service.
@@ -114,13 +126,26 @@ function dependencyModules(selected) {
114
126
  return selected.includes('documents') ? ['collaboration'] : [];
115
127
  }
116
128
  /**
117
- * The complete module list of a plan, in resolution order: core components,
118
- * automatically added dependencies, then what the caller selected. `plan.ts`
119
- * builds the artifacts from this and `builder.ts` re-derives it to validate an
120
- * untrusted plan, so the two can never disagree.
129
+ * The complete module order of a plan: core components, automatically added
130
+ * dependencies, what the caller selected, and the built-in trailing modules.
131
+ * `plan.ts` builds the artifacts from this and `builder.ts` re-derives it to
132
+ * validate an untrusted plan, so the two can never disagree.
133
+ *
134
+ * A trailing module is only part of a plan that really deploys it: the caller
135
+ * filters the returned list against the module's availability for the major.
121
136
  */
122
137
  function plannedModules(selected) {
123
- return [...exports.coreModules, ...dependencyModules(selected), ...selected];
138
+ return [...exports.autoAddedModules, ...dependencyModules(selected), ...selected, ...exports.trailingModules];
139
+ }
140
+ /**
141
+ * The modules of `plannedModules(selected)` this environment really deploys:
142
+ * a built-in trailing module that the major publishes no pointer for is left out
143
+ * of both the artifact list and the recorded automatically added modules, so a
144
+ * 9.1 plan looks exactly like it did before the module existed.
145
+ */
146
+ function deployableModules(selected, available) {
147
+ const published = new Set(available);
148
+ return plannedModules(selected).filter(module => !exports.trailingModules.includes(module) || published.has(module));
124
149
  }
125
150
  async function validateEnvironmentOptions(options) {
126
151
  if (!options.root || !options.major || !/^(9\.1(?:-[A-Za-z0-9][A-Za-z0-9._-]*)?|dev)$/.test(options.major))
@@ -135,7 +160,10 @@ async function validateEnvironmentOptions(options) {
135
160
  if (!Number.isInteger(port) || port < 1 || port > 65535)
136
161
  throw new Error('Port must be an integer between 1 and 65535.');
137
162
  const requestedModules = [...new Set((options.modules ?? []).flatMap(m => m.split(',')).map(m => m.trim()).filter(Boolean))];
138
- const modules = requestedModules.filter(m => !['server', 'account', 'dataset', 'analysis', 'cot-worker', 'common', 'monitoring'].includes(m)).sort();
163
+ // The built-in parts of an environment are accepted-and-ignored in `--modules`
164
+ // exactly like the core components: naming them never selects, adds or removes
165
+ // anything. `dashboard-resource` is deployed by the plan itself.
166
+ const modules = requestedModules.filter(m => !['server', 'account', 'dataset', 'analysis', 'cot-worker', 'common', 'monitoring', ...exports.trailingModules].includes(m)).sort();
139
167
  if (modules.some(m => !exports.optionalModules.includes(m)))
140
168
  throw new Error(`Select optional modules: ${exports.optionalModules.join(', ')}. Wyn core server, account, dataset, analysis model and cot worker are always included.`);
141
169
  const unsupported = modules.filter(m => !exports.optionalModulesByEdition[edition].includes(m));
@@ -147,8 +175,32 @@ async function validateEnvironmentOptions(options) {
147
175
  async function buildEnvironmentPlan(options, client, onProgress) {
148
176
  onProgress?.('Validating environment options and target directory');
149
177
  const normalized = await validateEnvironmentOptions(options);
150
- const modules = plannedModules(normalized.modules);
151
178
  const selected = new Set(normalized.modules);
179
+ const warnings = ['No services are registered or started.', 'Wyn core server, account, dataset, analysis model and cot worker are always included.', 'License, sample data, bootstrap data and optional language/styles-cache archives are not provisioned.'];
180
+ // Availability is per major and only checked for the built-in trailing modules:
181
+ // a major that publishes no version pointer for one (9.1 has no
182
+ // `wyn-dashboard-resource` line) does not get it, and the plan says so once.
183
+ // The probe runs before the artifact loop so the plan lists — and counts —
184
+ // only the modules this environment really deploys. A pointer that exists but
185
+ // cannot be resolved (an invalid version, a missing or ambiguous ZIP) stays a
186
+ // hard error in the loop below, exactly like every other module.
187
+ const resolved = new Map();
188
+ for (const module of exports.trailingModules) {
189
+ const entry = catalog_1.catalog[module];
190
+ let pointer;
191
+ try {
192
+ pointer = await client.getLatestVersion(entry.plugin, normalized.major);
193
+ }
194
+ catch {
195
+ warnings.push(`${entry.plugin} is not published for major ${normalized.major}; 3D scene and map resources were not deployed.`);
196
+ continue;
197
+ }
198
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(pointer.version))
199
+ throw new Error(`Unable to resolve artifacts for ${entry.plugin}/${normalized.major}.`);
200
+ resolved.set(module, pointer.version);
201
+ onProgress?.(`${entry.plugin} is published for major ${normalized.major}; it will be deployed last`);
202
+ }
203
+ const modules = deployableModules(normalized.modules, [...resolved.keys()]);
152
204
  const autoAddedModules = modules.filter(module => !selected.has(module));
153
205
  const artifacts = [];
154
206
  for (const [index, module] of modules.entries()) {
@@ -157,7 +209,7 @@ async function buildEnvironmentPlan(options, client, onProgress) {
157
209
  let version;
158
210
  let files;
159
211
  try {
160
- version = (await client.getLatestVersion(entry.plugin, normalized.major)).version;
212
+ version = resolved.get(module) ?? (await client.getLatestVersion(entry.plugin, normalized.major)).version;
161
213
  if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(version))
162
214
  throw new Error('Invalid resolved version');
163
215
  files = await client.listArtifacts(entry.plugin, version);
@@ -179,7 +231,7 @@ async function buildEnvironmentPlan(options, client, onProgress) {
179
231
  return {
180
232
  root: normalized.root, major: normalized.major, schema: 'pending', edition: normalized.edition, profile: normalized.profile, port: normalized.port,
181
233
  selectedModules: normalized.modules, autoAddedModules, artifacts,
182
- warnings: ['No services are registered or started.', 'Wyn core server, account, dataset, analysis model and cot worker are always included.', 'License, sample data, bootstrap data and optional language/styles-cache archives are not provisioned.'],
234
+ warnings,
183
235
  requirements: ['Windows for execution.', '.NET runtime requirements are discovered from downloaded runtimeconfig files.', 'A valid license and database initialization may be required before startup.'],
184
236
  };
185
237
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/environment/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/environment/plan.ts"],"names":[],"mappings":"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"}
@@ -16,11 +16,26 @@ export interface LayoutMapping {
16
16
  /**
17
17
  * .NET assemblies this mapping must contain. Empty for a `service` mapping:
18
18
  * an out-of-process native service that ships no managed assembly and is
19
- * loaded by the Server from its `<Services>` declaration alone.
19
+ * loaded by the Server from its `<Services>` declaration alone. Empty for a
20
+ * `resource` mapping too: it is a static file tree the Server only serves.
20
21
  */
21
22
  assemblies: string[];
22
- role: 'plugin' | 'worker' | 'server' | 'monitor' | 'service';
23
+ /**
24
+ * `resource` is a static tree deployed into the environment's web root for the
25
+ * Server to serve (the built-in `dashboard-resource` module's 3D scene and map
26
+ * assets). It carries no assembly, needs no `.runtimeconfig.json`, and adds
27
+ * nothing to `conf/Wyn.conf`.
28
+ */
29
+ role: 'plugin' | 'worker' | 'server' | 'monitor' | 'service' | 'resource';
23
30
  service?: string;
31
+ /**
32
+ * Edition this mapping belongs to. A mapping without one is deployed for every
33
+ * edition; a tagged mapping is deployed **only** when the environment has that
34
+ * edition, and is never required, copied or referenced otherwise — which is how
35
+ * `map-cn` and `map-en` both land in `Server/wwwroot/map` without one edition
36
+ * ever needing the other's directory.
37
+ */
38
+ edition?: 'cn' | 'en';
24
39
  }
25
40
  export interface EnvironmentArtifact {
26
41
  module: string;
@@ -67,12 +82,5 @@ export interface EnvironmentDependencies {
67
82
  id: string;
68
83
  name: string;
69
84
  };
70
- /**
71
- * Root directory of the resource trees bundled with this package, for
72
- * `create-env`'s layout of `resources/<name>` into the environment. Injectable
73
- * so a test can point at a fixture tree; the default is the `resources`
74
- * directory beside the installed package.
75
- */
76
- bundledResourcesDirectory?: string;
77
85
  }
78
86
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/environment/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,eAAe,CAAC;AAClH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AACD,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,kBAAkB,GAAG,eAAe,GAAG,kBAAkB,CAAC,CAAC;AAChH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AACD,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,CAAC;AAC/C,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AACD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AACD,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,gEAAgE;IAChE,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/environment/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,eAAe,CAAC;AAClH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AACD,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,kBAAkB,GAAG,eAAe,GAAG,kBAAkB,CAAC,CAAC;AAChH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB;;;;;OAKG;IACH,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AACD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AACD,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,CAAC;AAC/C,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AACD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AACD,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,gEAAgE;IAChE,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC"}
@@ -31,21 +31,6 @@ export interface ModuleChange {
31
31
  copiedDirectories: string[];
32
32
  removedDirectories: string[];
33
33
  }
34
- /**
35
- * What an update did (or, in a dry run, would do) to one bundled resource tree.
36
- *
37
- * `added` counts files the environment did not have yet and `updated` counts
38
- * files whose destination content differed and was refreshed; `files` is the size
39
- * of the packaged tree, exactly as the lock manifest records it.
40
- */
41
- export interface ResourceChange {
42
- name: string;
43
- source: string;
44
- destination: string;
45
- files: number;
46
- added: number;
47
- updated: number;
48
- }
49
34
  export interface UpdateResult {
50
35
  name: string;
51
36
  root: string;
@@ -58,21 +43,12 @@ export interface UpdateResult {
58
43
  restartRequired: boolean;
59
44
  warnings: string[];
60
45
  localTargets: LocalTarget[];
61
- resource: ResourceChange;
62
46
  }
63
47
  export interface UpdateDependencies {
64
48
  registry?: EnvironmentRegistry;
65
49
  processes?: ProcessBackend;
66
50
  platform?: NodeJS.Platform;
67
51
  onProgress?: EnvironmentProgress;
68
- /**
69
- * Root directory of the resource trees bundled with this package, for
70
- * `update-env`'s layout of `resources/<name>` into an existing environment.
71
- * Injectable so a test can point at a fixture tree; the default is the
72
- * `resources` directory beside the installed package (the same seam
73
- * `EnvironmentDependencies.bundledResourcesDirectory` gives `create-env`).
74
- */
75
- bundledResourcesDirectory?: string;
76
52
  }
77
53
  /**
78
54
  * One `<Server><Plugins>` or `<Server><PluginWorkers>` entry: where it is
@@ -127,7 +103,6 @@ export declare class EnvironmentUpdater {
127
103
  readonly registry: EnvironmentRegistry;
128
104
  private readonly processes;
129
105
  private readonly platform;
130
- private readonly bundledResources;
131
106
  private readonly onProgress?;
132
107
  constructor(dependencies?: UpdateDependencies);
133
108
  update(name: string, specs: (ModuleUpdateSpec | string)[], clientFactory: () => EnvironmentClient, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/environment/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/environment/update.ts"],"names":[],"mappings":"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"}
@@ -48,7 +48,6 @@ const registry_1 = require("./registry");
48
48
  const validate_1 = require("./validate");
49
49
  const process_1 = require("./process");
50
50
  const posix_process_1 = require("./posix-process");
51
- const package_resource_1 = require("./package-resource");
52
51
  const atomic_1 = require("../utils/atomic");
53
52
  const local_path_1 = require("../utils/local-path");
54
53
  /** Same parser options as the creation path, so a rewrite round-trips identically. */
@@ -95,6 +94,12 @@ const excludedCopyNames = (mapping) => mapping.role === 'server' ? [...serverOwn
95
94
  */
96
95
  const selectableModules = () => new Set([...new Set(Object.values(plan_1.optionalModulesByEdition).flat())]);
97
96
  const installationDirectory = (root, destination) => path.join(root, ...destination.split('/'));
97
+ /**
98
+ * The edition an environment deploys. The registry records a free string and
99
+ * only `en` is special everywhere else in this module, so anything else counts
100
+ * as `cn`, exactly like the edition gate below does.
101
+ */
102
+ const editionOf = (entry) => entry.edition === 'en' ? 'en' : 'cn';
98
103
  function validateUpdatableModule(module) {
99
104
  if (Object.prototype.hasOwnProperty.call(catalog_1.catalog, module))
100
105
  return;
@@ -382,10 +387,9 @@ async function readManifest(root) {
382
387
  }
383
388
  if (manifest.selectedModules !== undefined && (!Array.isArray(manifest.selectedModules) || manifest.selectedModules.some(module => typeof module !== 'string')))
384
389
  throw new Error('Environment manifest is unreadable.');
385
- // Only the entry name is required: the resource list is written by this package
386
- // for the package's own trees, and unknown extra fields are preserved as-is.
387
- if (manifest.resources !== undefined && (!Array.isArray(manifest.resources) || manifest.resources.some(resource => !resource || typeof resource !== 'object' || Array.isArray(resource) || typeof resource.name !== 'string')))
388
- throw new Error('Environment manifest is unreadable.');
390
+ // A stale `resources` key written by an older version is ignored here and
391
+ // dropped when the manifest is rewritten: the key belongs to the removed
392
+ // packaged-resource feature, not to the environment's configuration.
389
393
  if (manifest.moduleSources !== undefined && (!manifest.moduleSources || typeof manifest.moduleSources !== 'object' || Array.isArray(manifest.moduleSources)))
390
394
  throw new Error('Environment manifest is unreadable.');
391
395
  for (const source of Object.values(manifest.moduleSources ?? {})) {
@@ -454,7 +458,7 @@ async function resolveRemoteArtifact(client, entry, spec) {
454
458
  return { module, plugin: source.plugin, version, name, path: remotePath, mappings: source.mappings.map(mapping => ({ ...mapping, assemblies: [...mapping.assemblies] })) };
455
459
  }
456
460
  /** Download, hash, extract and verify one resolved artifact inside the staging workspace. */
457
- async function stageRemoteArtifact(client, artifact, workspace, onProgress) {
461
+ async function stageRemoteArtifact(client, artifact, edition, workspace, onProgress) {
458
462
  const label = `[${artifact.module}] ${artifact.plugin}/${artifact.version}/${artifact.name}`;
459
463
  const download = path.join(workspace, 'download', artifact.module);
460
464
  const expanded = path.join(workspace, `expanded-${artifact.module}`);
@@ -469,10 +473,16 @@ async function stageRemoteArtifact(client, artifact, workspace, onProgress) {
469
473
  onProgress?.(`${label}: Extracting and validating ZIP`);
470
474
  await (0, archive_1.extractArchive)(archive, expanded);
471
475
  const assemblies = new Map();
472
- for (const mapping of artifact.mappings) {
476
+ // A mapping of the other edition is never required: its source directory
477
+ // does not even have to be in the archive.
478
+ for (const mapping of (0, catalog_1.editionMappings)(artifact.mappings, edition)) {
473
479
  const source = path.join(expanded, mapping.source);
474
480
  if (!(await fs.lstat(source)).isDirectory())
475
481
  throw new Error('Required source directory missing.');
482
+ // A `resource` mapping is a static tree with no assembly to verify and no
483
+ // runtimeconfig to read; the Server only serves it.
484
+ if (mapping.role === 'resource')
485
+ continue;
476
486
  if (mapping.role === 'service' && mapping.assemblies.length === 0)
477
487
  continue;
478
488
  const present = [];
@@ -616,6 +626,12 @@ function mappingForAssembly(module, assembly) {
616
626
  * explicitly, for a build whose file name matches no assembly at all.
617
627
  */
618
628
  async function resolveLocalSource(entry, module, assembly, input) {
629
+ // The built-in resource module is never a developer-build target: it ships a
630
+ // static asset tree that no local DLL could stand in for, so a local source is
631
+ // refused on its own terms before any path is even looked at. Remote specs
632
+ // (latest, pinned and `all`) keep working.
633
+ if (plan_1.trailingModules.includes(module))
634
+ throw new Error(`Module ${module} is built in and has no local source: it ships the 3D scene and map assets and is always deployed from its published artifact. Refresh it from the cloud (\`${module}\`, \`${module}:<version>\` or \`all\`).`);
619
635
  const mappings = localMappings(module);
620
636
  // The Server, Monitor and collaboration deployments are whole services, not a
621
637
  // plugin the Server loads: a developer build has no place to point the
@@ -705,14 +721,12 @@ class EnvironmentUpdater {
705
721
  registry;
706
722
  processes;
707
723
  platform;
708
- bundledResources;
709
724
  onProgress;
710
725
  constructor(dependencies = {}) {
711
726
  this.dependencies = dependencies;
712
727
  this.registry = dependencies.registry ?? new registry_1.EnvironmentRegistry();
713
728
  this.processes = dependencies.processes ?? (process.platform === 'win32' ? new process_1.WindowsProcessBackend() : new posix_process_1.PosixProcessBackend());
714
729
  this.platform = dependencies.platform ?? process.platform;
715
- this.bundledResources = dependencies.bundledResourcesDirectory ?? (0, package_resource_1.bundledResourcesDirectory)();
716
730
  this.onProgress = dependencies.onProgress;
717
731
  }
718
732
  async update(name, specs, clientFactory, options = {}) {
@@ -720,9 +734,8 @@ class EnvironmentUpdater {
720
734
  const onProgress = options.onProgress ?? this.onProgress;
721
735
  onProgress?.('Validating module specs');
722
736
  let parsed = normalizeModuleSpecs(specs);
723
- // No module spec is a valid request: it (re)lays out the bundled resources
724
- // alone, which is how an environment created before they were bundled gets
725
- // them without touching a single module.
737
+ if (!parsed.length)
738
+ throw new Error('At least one module spec is required: pass `all` or one or more module names (module, module:<version> or module=<local path>).');
726
739
  const entry = await this.registry.get(name);
727
740
  onProgress?.(`Validating environment ${entry.name} at ${entry.root}`);
728
741
  await (0, validate_1.validateEnvironmentRoot)(entry, this.registry.directory);
@@ -766,6 +779,22 @@ class EnvironmentUpdater {
766
779
  localOverrides.set(spec.module, targets);
767
780
  }
768
781
  const remote = parsed.filter(spec => spec.localPath === undefined);
782
+ // The built-in resource modules deploy their trees *inside* the Server
783
+ // directory, and a Server refresh replaces that whole directory. An
784
+ // environment that has such a module therefore re-deploys it from its own
785
+ // artifact whenever the Server is refreshed in the same call: a remote-only
786
+ // module has no local copy to restore the trees from.
787
+ const autoRefreshed = [];
788
+ if (remote.some(spec => spec.module === 'server')) {
789
+ for (const module of plan_1.trailingModules) {
790
+ if (!installed.has(module) || parsed.some(spec => spec.module === module))
791
+ continue;
792
+ parsed.push({ module });
793
+ remote.push({ module });
794
+ autoRefreshed.push(module);
795
+ onProgress?.(`${module} is refreshed with the Server package: its trees deploy inside the Server directory`);
796
+ }
797
+ }
769
798
  // Smart documents cannot run without the collaboration service, which
770
799
  // create-env deploys and declares in the Server configuration alongside
771
800
  // documents. Installing documents into an environment with no collaboration
@@ -779,26 +808,6 @@ class EnvironmentUpdater {
779
808
  throw new Error(`Cannot update modules from a remote source while ${entry.name} is ${state}: deployed files may be in use. Run \`afm env stop ${entry.name}\` first.`);
780
809
  if (!remote.length && state !== 'ready' && state !== 'stopped' && state !== 'running')
781
810
  throw new Error(`Cannot update modules while ${entry.name} is ${state}: the runtime identity must be verified before its files are changed. Run \`afm env stop ${entry.name}\` first.`);
782
- // The packaged 3D scene assets belong to every environment, not only to one
783
- // that create-env assembled: the plan below finds the files an environment is
784
- // still missing (or that differ) and the apply writes them with the rest of
785
- // the update. Planning touches nothing and runs before any download or write,
786
- // so an incomplete installation fails loudly with the path it expected and
787
- // leaves the environment exactly as it was.
788
- //
789
- // The assets live at `Server/wwwroot/3DScene`, so refreshing the server
790
- // module removes the whole tree they are in. Plan every packaged file as
791
- // missing in that case: comparing against the content that is about to be
792
- // deleted would report every file identical and lay nothing out at all.
793
- const refreshesServer = remote.some(spec => spec.module === 'server');
794
- const resourceSource = (0, package_resource_1.bundledResourceDirectory)(package_resource_1.sceneResourceName, this.bundledResources);
795
- const resourceDestination = path.join(entry.root, ...package_resource_1.sceneResourceDestination.split('/'));
796
- onProgress?.(`Checking bundled 3D scene resources in ${package_resource_1.sceneResourceDestination}`);
797
- const resourcePlan = await (0, package_resource_1.planBundledResource)(resourceSource, resourceDestination, refreshesServer);
798
- const resourceWrites = resourcePlan.added + resourcePlan.updated;
799
- const resource = { name: package_resource_1.sceneResourceName, source: resourceSource, destination: package_resource_1.sceneResourceDestination, files: resourcePlan.files.length, added: resourcePlan.added, updated: resourcePlan.updated };
800
- const resourceSummary = `${resourcePlan.files.length - resourceWrites} identical, ${resourcePlan.added} missing, ${resourcePlan.updated} different`;
801
- onProgress?.(`Bundled 3D scene resources in ${package_resource_1.sceneResourceDestination}: ${dryRun ? 'dry run; ' : ''}${resourceSummary}`);
802
811
  const downloads = [...(manifest.downloads ?? [])];
803
812
  const selectedModules = stringListOrUndefined(manifest.selectedModules);
804
813
  const autoAddedModules = stringListOrUndefined(manifest.autoAddedModules);
@@ -811,7 +820,7 @@ class EnvironmentUpdater {
811
820
  // runtimeconfig files, so an update replaces the entries of the modules it
812
821
  // refreshes and leaves every other module's alone.
813
822
  let requirements = Array.isArray(manifest.requirements) ? manifest.requirements.filter((line) => typeof line === 'string') : [];
814
- const workspace = !dryRun && (remote.length > 0 || resourceWrites > 0) ? await fs.mkdtemp(path.join(path.dirname(entry.root), '.afm-env-')) : undefined;
823
+ const workspace = !dryRun && remote.length > 0 ? await fs.mkdtemp(path.join(path.dirname(entry.root), '.afm-env-')) : undefined;
815
824
  const warnings = [];
816
825
  try {
817
826
  const resolved = new Map();
@@ -824,7 +833,7 @@ class EnvironmentUpdater {
824
833
  }
825
834
  if (!dryRun)
826
835
  for (const spec of remote)
827
- staged.set(spec.module, await stageRemoteArtifact(client, resolved.get(spec.module), workspace, onProgress));
836
+ staged.set(spec.module, await stageRemoteArtifact(client, resolved.get(spec.module), editionOf(entry), workspace, onProgress));
828
837
  }
829
838
  const configured = await fs.readFile(path.join(entry.root, 'conf', 'Wyn.conf'), 'utf8');
830
839
  // A Server or Monitor package is only usable when it still serves the
@@ -846,7 +855,12 @@ class EnvironmentUpdater {
846
855
  }
847
856
  const plans = [];
848
857
  // A module may carry several local specs: plan it once, for all its targets.
849
- for (const module of [...new Set(parsed.map(spec => spec.module))]) {
858
+ // The built-in trailing modules are planned last, in the same order
859
+ // `create-env` assembles: their trees live inside other modules'
860
+ // directories, so a Server replacement must not wipe them again.
861
+ const planOrder = [...new Set(parsed.map(spec => spec.module))]
862
+ .sort((left, right) => Number(plan_1.trailingModules.includes(left)) - Number(plan_1.trailingModules.includes(right)));
863
+ for (const module of planOrder) {
850
864
  const artifact = artifacts.find(candidate => candidate.module === module);
851
865
  const previous = moduleSources[module] ? { local: moduleSources[module].path } : { version: artifact?.version };
852
866
  const override = localOverrides.get(module);
@@ -885,8 +899,12 @@ class EnvironmentUpdater {
885
899
  const entries = [];
886
900
  let configurationAssets;
887
901
  let configurationLink;
888
- for (const mapping of remoteArtifact.mappings) {
902
+ // Only the mappings this environment's edition deploys: the other
903
+ // edition's directory is never removed, copied or referenced.
904
+ for (const mapping of (0, catalog_1.editionMappings)(remoteArtifact.mappings, editionOf(entry))) {
889
905
  const destination = installationDirectory(entry.root, mapping.destination);
906
+ // A `resource` directory the module already deployed is replaced, never
907
+ // merged, and it contributes no plugin, worker, service or runtime entry.
890
908
  if (await exists(destination)) {
891
909
  removals.push(destination);
892
910
  removedDirectories.push(mapping.destination);
@@ -903,6 +921,8 @@ class EnvironmentUpdater {
903
921
  if (stagedArtifact)
904
922
  copies.push({ source: path.join(stagedArtifact.expanded, mapping.source), destination, exclude: excludedCopyNames(mapping) });
905
923
  copiedDirectories.push(mapping.destination);
924
+ if (mapping.role === 'resource')
925
+ continue;
906
926
  // A native out-of-process service has no assembly and is declared as an
907
927
  // empty node: the Server loads it from that entry and supplies the rest.
908
928
  if (mapping.role === 'service') {
@@ -975,9 +995,10 @@ class EnvironmentUpdater {
975
995
  nextDownloads[downloadIndex] = download;
976
996
  // The requirements the old artifact needed are gone with it: re-read
977
997
  // the ones the new package actually declares, per deployed mapping.
998
+ // A resource mapping is a static tree: it declares none.
978
999
  requirements = requirements.filter(line => !line.endsWith(` (${plan.module})`));
979
- for (const mapping of plan.artifact.mappings) {
980
- if (mapping.role === 'service')
1000
+ for (const mapping of (0, catalog_1.editionMappings)(plan.artifact.mappings, editionOf(entry))) {
1001
+ if (mapping.role === 'service' || mapping.role === 'resource')
981
1002
  continue;
982
1003
  for (const framework of await (0, builder_1.runtimeRequirements)(path.join(plan.staged.expanded, mapping.source))) {
983
1004
  requirements.push(`${framework.name} ${framework.version} (${plan.module})`);
@@ -1019,18 +1040,9 @@ class EnvironmentUpdater {
1019
1040
  delete nextManifest.moduleSources;
1020
1041
  if (selectedModules)
1021
1042
  nextManifest.selectedModules = selectedModules;
1022
- // The resource is recorded in place, in exactly the shape create-env writes:
1023
- // a second update finds the entry and refreshes it instead of adding a
1024
- // duplicate. The result carries the added/updated counts; the manifest keeps
1025
- // the durable four-field description.
1026
- const resources = [...(manifest.resources ?? [])];
1027
- const recorded = resources.findIndex(candidate => candidate.name === package_resource_1.sceneResourceName);
1028
- const record = { name: package_resource_1.sceneResourceName, source: resource.source, destination: resource.destination, files: resource.files };
1029
- if (recorded < 0)
1030
- resources.push(record);
1031
- else
1032
- resources[recorded] = { ...resources[recorded], ...record };
1033
- nextManifest.resources = resources;
1043
+ // A stale `resources` key from an older manifest is dropped here: the
1044
+ // packaged-resource feature is gone and nothing records it any more.
1045
+ delete nextManifest.resources;
1034
1046
  const modules = [...new Set([...entry.modules, ...plans.filter(plan => !installed.has(plan.module) && selectable.has(plan.module)).map(plan => plan.module)])].sort();
1035
1047
  const localModules = Object.keys(moduleSources).sort();
1036
1048
  if (state === 'running')
@@ -1046,6 +1058,8 @@ class EnvironmentUpdater {
1046
1058
  if (parsed.some(spec => spec.module === 'documents') && !parsed.some(spec => spec.module === 'collaboration')) {
1047
1059
  warnings.push('documents was refreshed without collaboration; the smart documents plugin may expect the deployed collaboration service version, so refresh collaboration too.');
1048
1060
  }
1061
+ if (autoRefreshed.length)
1062
+ warnings.push(`${autoRefreshed.join(', ')} was refreshed with the Server package: its trees live inside the Server directory and would otherwise be lost.`);
1049
1063
  if (!dryRun) {
1050
1064
  for (const plan of plans) {
1051
1065
  // Take the environment-owned settings aside first, and drop the Monitor
@@ -1075,20 +1089,13 @@ class EnvironmentUpdater {
1075
1089
  if (plan.configurationLink)
1076
1090
  await fs.symlink(path.join(entry.root, 'conf'), plan.configurationLink, 'junction');
1077
1091
  }
1078
- // The staged resources are written with the module changes, before the
1079
- // manifest that records them; a failure rolls the layout back.
1080
- if (resourceWrites) {
1081
- if (!workspace)
1082
- throw new Error('Missing staging workspace for the bundled resource layout.');
1083
- onProgress?.(`Laying out bundled 3D scene resources into ${package_resource_1.sceneResourceDestination}`);
1084
- const applied = await (0, package_resource_1.applyBundledResource)(resourceSource, resourceDestination, resourcePlan, path.join(workspace, 'replaced-resources'));
1085
- if (applied.added.length !== resourcePlan.added || applied.updated.length !== resourcePlan.updated)
1086
- throw new Error('Bundled resource layout did not match its plan.');
1087
- }
1088
- // A resource-only update (no module spec) leaves the Server configuration
1089
- // exactly as it is: the assets need no plugin, worker or service entry.
1090
- onProgress?.(plans.length ? 'Writing configuration, manifest and registry record' : 'Writing manifest and registry record');
1091
- if (plans.length)
1092
+ // Only a plan that really contributes something to the configuration
1093
+ // rewrites it: the built-in dashboard-resource module adds no plugin,
1094
+ // worker or service entry, so refreshing it alone leaves `conf/Wyn.conf`
1095
+ // exactly as it is instead of round-tripping it through the XML builder.
1096
+ const configurationChanged = plans.some(plan => plan.entries.length > 0 || plan.configurationAssets !== undefined || plan.configurationLink !== undefined);
1097
+ onProgress?.(configurationChanged ? 'Writing configuration, manifest and registry record' : 'Writing manifest and registry record');
1098
+ if (configurationChanged)
1092
1099
  await writeAtomic(path.join(entry.root, 'conf', 'Wyn.conf'), configuration);
1093
1100
  await writeJsonAtomic(path.join(entry.root, 'environment.lock.json'), nextManifest);
1094
1101
  await this.registry.update(entries => {
@@ -1104,10 +1111,10 @@ class EnvironmentUpdater {
1104
1111
  delete entries[index].localModules;
1105
1112
  });
1106
1113
  }
1107
- const restartRequired = !dryRun && (changes.length > 0 || resourceWrites > 0);
1114
+ const restartRequired = !dryRun && changes.length > 0;
1108
1115
  if (restartRequired)
1109
- onProgress?.(`${entry.name}: ${changes.length ? 'modules updated' : 'bundled resources laid out'}; restart the environment to load the change (no service was started).`);
1110
- return { name: entry.name, root: entry.root, dryRun, changes, skipped, restartRequired, warnings, localTargets: plans.flatMap(plan => plan.local ?? []), resource };
1116
+ onProgress?.(`${entry.name}: modules updated; restart the environment to load the change (no service was started).`);
1117
+ return { name: entry.name, root: entry.root, dryRun, changes, skipped, restartRequired, warnings, localTargets: plans.flatMap(plan => plan.local ?? []) };
1111
1118
  }
1112
1119
  finally {
1113
1120
  if (workspace)