@guanjinke/artifact-client 1.19.0 → 1.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/cli/environment.js +1 -1
- package/dist/cli/environment.js.map +1 -1
- package/dist/cli/setup.js +3 -2
- package/dist/cli/setup.js.map +1 -1
- package/dist/environment/builder.d.ts +12 -0
- package/dist/environment/builder.d.ts.map +1 -1
- package/dist/environment/builder.js +66 -6
- package/dist/environment/builder.js.map +1 -1
- package/dist/environment/catalog.d.ts +7 -0
- package/dist/environment/catalog.d.ts.map +1 -1
- package/dist/environment/catalog.js +15 -0
- package/dist/environment/catalog.js.map +1 -1
- package/dist/environment/config.d.ts +3 -1
- package/dist/environment/config.d.ts.map +1 -1
- package/dist/environment/config.js +103 -1
- package/dist/environment/config.js.map +1 -1
- package/dist/environment/manager.d.ts.map +1 -1
- package/dist/environment/manager.js +42 -9
- package/dist/environment/manager.js.map +1 -1
- package/dist/environment/manifest.d.ts +4 -0
- package/dist/environment/manifest.d.ts.map +1 -1
- package/dist/environment/manifest.js +5 -0
- package/dist/environment/manifest.js.map +1 -1
- package/dist/environment/plan.d.ts +3 -0
- package/dist/environment/plan.d.ts.map +1 -1
- package/dist/environment/plan.js +38 -6
- package/dist/environment/plan.js.map +1 -1
- package/dist/environment/ports.d.ts +34 -0
- package/dist/environment/ports.d.ts.map +1 -0
- package/dist/environment/ports.js +128 -0
- package/dist/environment/ports.js.map +1 -0
- package/dist/environment/process.d.ts +9 -0
- package/dist/environment/process.d.ts.map +1 -1
- package/dist/environment/process.js +60 -20
- package/dist/environment/process.js.map +1 -1
- package/dist/environment/registry.d.ts +3 -0
- package/dist/environment/registry.d.ts.map +1 -1
- package/dist/environment/registry.js +5 -0
- package/dist/environment/registry.js.map +1 -1
- package/dist/environment/types.d.ts +24 -1
- package/dist/environment/types.d.ts.map +1 -1
- package/dist/environment/types.js.map +1 -1
- package/dist/environment/update.d.ts +6 -16
- package/dist/environment/update.d.ts.map +1 -1
- package/dist/environment/update.js +120 -16
- package/dist/environment/update.js.map +1 -1
- package/dist/environment/validate.d.ts +2 -0
- package/dist/environment/validate.d.ts.map +1 -1
- package/dist/environment/validate.js +5 -2
- package/dist/environment/validate.js.map +1 -1
- package/dist/web/api.js +2 -1
- package/dist/web/api.js.map +1 -1
- package/dist/web/static/app.js +7 -7
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/environment/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/environment/registry.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;AAClD,MAAM,WAAW,eAAe;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAAE;AACzG,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAC3E,GAAG,CAAC,EAAE,eAAe,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E;AACD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IACzH,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACzF,8GAA8G;IAC9G,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,eAAe,CAAC;IAAC,GAAG,CAAC,EAAE,eAAe,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC3H,mFAAmF;IACnF,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,iFAAiF;IACjF,IAAI,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE/C;AACD,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAA0C,CAAC;AAClF,qBAAa,mBAAmB;IAGU,OAAO,CAAC,QAAQ,CAAC,WAAW;IAFpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,SAAS,SAAiB,EAAmB,WAAW,SAAO;IACrE,IAAI,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAyBpC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAa5D,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASxE,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ7E,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CACxC"}
|
|
@@ -40,6 +40,7 @@ const path = __importStar(require("path"));
|
|
|
40
40
|
const crypto_1 = require("crypto");
|
|
41
41
|
const config_manager_1 = require("../cli/config-manager");
|
|
42
42
|
const atomic_1 = require("../utils/atomic");
|
|
43
|
+
const ports_1 = require("./ports");
|
|
43
44
|
function validateName(name) {
|
|
44
45
|
if (typeof name !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/.test(name))
|
|
45
46
|
throw new Error('Invalid environment name (ASCII letters, digits, dot, underscore and hyphen; 1-64 characters).');
|
|
@@ -83,6 +84,10 @@ class EnvironmentRegistry {
|
|
|
83
84
|
throw new Error('Corrupt process identity.');
|
|
84
85
|
if (entry.lastMode !== undefined && !['foreground', 'background'].includes(entry.lastMode))
|
|
85
86
|
throw new Error('Corrupt previous runtime mode.');
|
|
87
|
+
if (entry.mode !== undefined && !['single-process', 'multi-process'].includes(entry.mode))
|
|
88
|
+
throw new Error('Corrupt environment mode.');
|
|
89
|
+
if (entry.ports !== undefined && !(0, ports_1.validatePortAssignments)(entry.ports))
|
|
90
|
+
throw new Error('Corrupt environment port assignment.');
|
|
86
91
|
if (entry.jdbcService !== undefined) {
|
|
87
92
|
const service = entry.jdbcService;
|
|
88
93
|
if (!service || typeof service !== 'object' || typeof service.version !== 'string' || !Number.isInteger(service.port) || service.port < 1 || service.port > 65535 || typeof service.url !== 'string' || typeof service.username !== 'string' || typeof service.java !== 'string')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/environment/registry.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/environment/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ArtifactClient } from '../artifact-client';
|
|
2
|
-
export type EnvironmentModule = 'dashboard' | 'reporting' | 'data-monitoring' | 'reportsheet' | 'ai' | 'analysis' | 'sheets' | 'documents' | 'collaboration' | 'patch';
|
|
2
|
+
export type EnvironmentModule = 'dashboard' | 'reporting' | 'data-monitoring' | 'reportsheet' | 'ai' | 'analysis' | 'sheets' | 'documents' | 'collaboration' | 'patch' | 'datasource-service' | 'memorydb-service';
|
|
3
3
|
export interface EnvironmentOptions {
|
|
4
4
|
root: string;
|
|
5
5
|
major: string;
|
|
@@ -15,6 +15,17 @@ export interface EnvironmentOptions {
|
|
|
15
15
|
* caller does not know, and resolution fails on its own if the module is absent.
|
|
16
16
|
*/
|
|
17
17
|
provider?: 'az' | 'oss';
|
|
18
|
+
/**
|
|
19
|
+
* Build a non-single-process environment: the workers, the Java data source and
|
|
20
|
+
* memory services and the collaboration service run as their own processes under
|
|
21
|
+
* the Monitor, while the scheduler stays embedded in the Server. A contiguous
|
|
22
|
+
* port block is allocated for the environment and recorded with it.
|
|
23
|
+
*/
|
|
24
|
+
multiProcess?: boolean;
|
|
25
|
+
/** Ports another registered environment already holds; never assign them again. */
|
|
26
|
+
reservedPorts?: number[];
|
|
27
|
+
/** A block the caller already allocated (manager); validated and reused by the plan. */
|
|
28
|
+
ports?: Record<string, number>;
|
|
18
29
|
}
|
|
19
30
|
export type EnvironmentClient = Pick<ArtifactClient, 'getLatestVersion' | 'listArtifacts' | 'downloadArtifact'>;
|
|
20
31
|
export interface LayoutMapping {
|
|
@@ -70,6 +81,13 @@ export interface LayoutMapping {
|
|
|
70
81
|
* never nested inside the plugin's destination.
|
|
71
82
|
*/
|
|
72
83
|
exclude?: string[];
|
|
84
|
+
/**
|
|
85
|
+
* How the Monitor starts this out-of-process service: the command (a Java
|
|
86
|
+
* service sets the resolved `java` executable) and, for a Java service, which
|
|
87
|
+
* generated settings file must be rewritten with this environment's ports.
|
|
88
|
+
*/
|
|
89
|
+
command?: string;
|
|
90
|
+
rewriteConfig?: 'datasource' | 'memorydb';
|
|
73
91
|
}
|
|
74
92
|
interface EnvironmentArtifactBase {
|
|
75
93
|
module: string;
|
|
@@ -147,6 +165,9 @@ export interface EnvironmentPlan {
|
|
|
147
165
|
schema: EnvironmentSchema | 'pending';
|
|
148
166
|
edition: 'cn' | 'en';
|
|
149
167
|
profile: 'embedded';
|
|
168
|
+
multiProcess: boolean;
|
|
169
|
+
/** Every port a multi-process environment holds; absent in single-process mode. */
|
|
170
|
+
ports?: Record<string, number>;
|
|
150
171
|
port: number;
|
|
151
172
|
selectedModules: EnvironmentModule[];
|
|
152
173
|
autoAddedModules: string[];
|
|
@@ -159,6 +180,8 @@ export interface EnvironmentResult {
|
|
|
159
180
|
manifest: string;
|
|
160
181
|
requirements: string[];
|
|
161
182
|
warnings?: string[];
|
|
183
|
+
multiProcess?: boolean;
|
|
184
|
+
ports?: Record<string, number>;
|
|
162
185
|
}
|
|
163
186
|
export type EnvironmentProgress = (message: string) => void;
|
|
164
187
|
export interface EnvironmentDependencies {
|
|
@@ -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,iBAAiB,GAAG,aAAa,GAAG,IAAI,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,eAAe,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/environment/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/environment/types.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/environment/types.ts"],"names":[],"mappings":";;AA2JA,gDAEC;AAHD,uFAAuF;AACvF,SAAgB,kBAAkB,CAAC,QAAyB;IAC1D,OAAQ,QAAmC,CAAC,QAAQ,KAAK,IAAI,CAAC;AAChE,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EnvironmentRegistry } from './registry';
|
|
2
2
|
import { ProcessBackend } from './process';
|
|
3
3
|
import { EnvironmentClient, EnvironmentProgress } from './types';
|
|
4
|
+
import { PortAssignments } from './ports';
|
|
4
5
|
/**
|
|
5
6
|
* Every catalog module a user may refresh. Both the create-only modules and the
|
|
6
7
|
* internal ones are excluded: a create-only module seeds a tree the Server owns
|
|
@@ -70,6 +71,7 @@ export interface PluginEntry {
|
|
|
70
71
|
path: string;
|
|
71
72
|
role?: 'plugin' | 'worker' | 'server' | 'service';
|
|
72
73
|
service?: string;
|
|
74
|
+
command?: string;
|
|
73
75
|
}
|
|
74
76
|
/**
|
|
75
77
|
* Parse `--modules` values into module specs.
|
|
@@ -80,22 +82,10 @@ export interface PluginEntry {
|
|
|
80
82
|
* `all` selects every configured module from remote and must be used alone.
|
|
81
83
|
*/
|
|
82
84
|
export declare function parseModuleSpecs(values: string[]): ModuleUpdateSpec[];
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
* The document is parsed with the creation path's parser options, only the
|
|
88
|
-
* `sys:string` path lists and the matching worker service nodes are mutated, and
|
|
89
|
-
* the result is rebuilt with the same builder options and re-validated before it
|
|
90
|
-
* is returned. Dashboard stays the first `Plugins` entry; every other entry keeps
|
|
91
|
-
* its order. A worker service keeps all of its other fields, including
|
|
92
|
-
* `Disabled`; a configuration without that node is updated through
|
|
93
|
-
* `<PluginWorkers>` alone. The Server service is kept in step the same way a
|
|
94
|
-
* worker is, and a native service the environment does not declare yet gets the
|
|
95
|
-
* empty node `create-env` writes, so a freshly installed collaboration service is
|
|
96
|
-
* actually loaded.
|
|
97
|
-
*/
|
|
98
|
-
export declare function patchEnvironmentConfiguration(xml: string, entries: PluginEntry[], platform?: NodeJS.Platform): string;
|
|
85
|
+
export declare function patchEnvironmentConfiguration(xml: string, entries: PluginEntry[], platform?: NodeJS.Platform, multiProcess?: {
|
|
86
|
+
ports: PortAssignments;
|
|
87
|
+
java?: string;
|
|
88
|
+
}): string;
|
|
99
89
|
/**
|
|
100
90
|
* Update selected modules of a registered environment.
|
|
101
91
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/environment/update.ts"],"names":[],"mappings":"AAaA,OAAO,EAAqB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAyB,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAoC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/environment/update.ts"],"names":[],"mappings":"AAaA,OAAO,EAAqB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAyB,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAoC,MAAM,SAAS,CAAC;AACnG,OAAO,EAAE,eAAe,EAAqC,MAAM,SAAS,CAAC;AAU7E;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,UAA8I,CAAC;AAkN5K,MAAM,WAAW,gBAAgB;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AAC7G,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AAC5J,MAAM,WAAW,YAAY;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE;AACvM,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IAAC,eAAe,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,WAAW,EAAE,CAAA;CAAE;AAC1P,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAC1H;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAAG,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AAwG/K;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAarE;AA8FD,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAAE,YAAY,CAAC,EAAE;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAgGjM;AAqTD;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAKjB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAJzC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAsB;gBACrB,YAAY,GAAE,kBAAuB;IAM5D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,gBAAgB,GAAG,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,iBAAiB,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;QAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;KAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CAukB/N"}
|
|
@@ -52,6 +52,7 @@ const registry_1 = require("./registry");
|
|
|
52
52
|
const validate_1 = require("./validate");
|
|
53
53
|
const process_1 = require("./process");
|
|
54
54
|
const posix_process_1 = require("./posix-process");
|
|
55
|
+
const ports_1 = require("./ports");
|
|
55
56
|
const atomic_1 = require("../utils/atomic");
|
|
56
57
|
const local_path_1 = require("../utils/local-path");
|
|
57
58
|
/** Same parser options as the creation path, so a rewrite round-trips identically. */
|
|
@@ -68,7 +69,7 @@ const separatorOf = (platform) => (platform === 'win32' ? '\\' : '/');
|
|
|
68
69
|
* itself — so an update never refreshes, preserves or re-deploys either on
|
|
69
70
|
* request. The web update picker reads this same list.
|
|
70
71
|
*/
|
|
71
|
-
exports.updatableModules = Object.keys(catalog_1.catalog).filter(module => !catalog_1.catalog[module].createOnly && !catalog_1.catalog[module].internal).sort();
|
|
72
|
+
exports.updatableModules = Object.keys(catalog_1.catalog).filter(module => !catalog_1.catalog[module].createOnly && !catalog_1.catalog[module].internal && !catalog_1.catalog[module].multiProcessOnly).sort();
|
|
72
73
|
/**
|
|
73
74
|
* Server-root settings the environment owns.
|
|
74
75
|
*
|
|
@@ -189,7 +190,7 @@ function readConfigurationView(configuration) {
|
|
|
189
190
|
* so they force a deployment. A module with a local source is never current: the
|
|
190
191
|
* remote spec is the way back to the published artifact.
|
|
191
192
|
*/
|
|
192
|
-
async function moduleIsCurrent(entry, manifest, artifact, edition, configuration, platform) {
|
|
193
|
+
async function moduleIsCurrent(entry, manifest, artifact, edition, configuration, platform, multiProcess = false, ports) {
|
|
193
194
|
const recorded = (manifest.artifacts ?? []).find(candidate => candidate.module === artifact.module);
|
|
194
195
|
if (!recorded || recorded.version !== artifact.version)
|
|
195
196
|
return false;
|
|
@@ -203,7 +204,13 @@ async function moduleIsCurrent(entry, manifest, artifact, edition, configuration
|
|
|
203
204
|
if (mapping.role === 'resource')
|
|
204
205
|
continue;
|
|
205
206
|
if (mapping.role === 'service') {
|
|
206
|
-
if (
|
|
207
|
+
if (multiProcess) {
|
|
208
|
+
const spec = multiProcessServiceNodes[mapping.destination];
|
|
209
|
+
const node = spec && ports ? view.services.get(spec.node) : undefined;
|
|
210
|
+
if (!node || node.Disabled !== 'false' || String(node.UrlPort) !== String(ports[spec.port]))
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
else if (mapping.service && !view.services.get(mapping.service))
|
|
207
214
|
return false;
|
|
208
215
|
continue;
|
|
209
216
|
}
|
|
@@ -225,11 +232,23 @@ async function moduleIsCurrent(entry, manifest, artifact, edition, configuration
|
|
|
225
232
|
return false;
|
|
226
233
|
}
|
|
227
234
|
else if (mapping.role === 'worker') {
|
|
228
|
-
if (
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
235
|
+
if (multiProcess) {
|
|
236
|
+
const spec = multiProcessServiceNodes[mapping.destination];
|
|
237
|
+
const node = spec ? view.services.get(spec.node) : undefined;
|
|
238
|
+
if (!node || node.Disabled !== 'false')
|
|
239
|
+
return false;
|
|
240
|
+
if (ports && String(node.UrlPort) !== String(ports[spec.port]))
|
|
241
|
+
return false;
|
|
242
|
+
if (String(node.Assembly ?? '').toLowerCase() !== path.posix.basename(assembly).toLowerCase())
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
if (!view.workers.some(value => value.toLowerCase() === configured))
|
|
247
|
+
return false;
|
|
248
|
+
const node = mapping.service ? view.services.get(mapping.service) : undefined;
|
|
249
|
+
if (!node || String(node.Assembly ?? '').toLowerCase() !== path.posix.basename(assembly).toLowerCase())
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
233
252
|
}
|
|
234
253
|
else if (mapping.role === 'server') {
|
|
235
254
|
const node = view.services.get('Server');
|
|
@@ -480,7 +499,22 @@ function rewritePathList(values, entries, platform) {
|
|
|
480
499
|
* empty node `create-env` writes, so a freshly installed collaboration service is
|
|
481
500
|
* actually loaded.
|
|
482
501
|
*/
|
|
483
|
-
|
|
502
|
+
/**
|
|
503
|
+
* Where a worker or service lives in a non-single-process configuration: the
|
|
504
|
+
* service node, its listening port and, for a worker process, its local scheduler
|
|
505
|
+
* port. `SmartDocumentsWorker` is the one destination whose node is singular.
|
|
506
|
+
*/
|
|
507
|
+
const multiProcessServiceNodes = {
|
|
508
|
+
DashboardWorker: { node: 'DashboardWorker', port: 'dashboardWorker', schedule: 'dashboardSchedule' },
|
|
509
|
+
ReportingWorker: { node: 'ReportingWorker', port: 'reportingWorker', schedule: 'reportingSchedule' },
|
|
510
|
+
CotWorker: { node: 'CotWorker', port: 'cotWorker', schedule: 'cotSchedule' },
|
|
511
|
+
SpreadsheetWorker: { node: 'SpreadsheetWorker', port: 'spreadsheetWorker', schedule: 'spreadsheetSchedule' },
|
|
512
|
+
SmartDocumentsWorker: { node: 'SmartDocumentWorker', port: 'smartDocumentWorker', schedule: 'smartDocumentSchedule' },
|
|
513
|
+
DataSourceService: { node: 'DataSourceService', port: 'datasource' },
|
|
514
|
+
MemoryDBService: { node: 'MemoryDBService', port: 'memorydb' },
|
|
515
|
+
CollaborationService: { node: 'CollaborationService', port: 'collaboration' },
|
|
516
|
+
};
|
|
517
|
+
function patchEnvironmentConfiguration(xml, entries, platform = process.platform, multiProcess) {
|
|
484
518
|
if (typeof xml !== 'string' || /<!DOCTYPE|<!ENTITY/i.test(xml) || fast_xml_parser_1.XMLValidator.validate(xml) !== true)
|
|
485
519
|
throw new Error('Invalid environment configuration.');
|
|
486
520
|
const document = new fast_xml_parser_1.XMLParser(parserOptions).parse(xml);
|
|
@@ -504,7 +538,13 @@ function patchEnvironmentConfiguration(xml, entries, platform = process.platform
|
|
|
504
538
|
server.Plugins = plugins;
|
|
505
539
|
}
|
|
506
540
|
const workers = entries.filter(entry => entry.role === 'worker');
|
|
507
|
-
if (
|
|
541
|
+
if (multiProcess) {
|
|
542
|
+
// A multi-process worker is spawned by the Monitor through its own
|
|
543
|
+
// `<Services>` node; listing it in <PluginWorkers> would load it inside the
|
|
544
|
+
// Server as well, so that list is never written here.
|
|
545
|
+
delete server.PluginWorkers;
|
|
546
|
+
}
|
|
547
|
+
else if (workers.length) {
|
|
508
548
|
const pluginWorkers = server.PluginWorkers === undefined || server.PluginWorkers === '' ? {} : server.PluginWorkers;
|
|
509
549
|
if (typeof pluginWorkers !== 'object' || Array.isArray(pluginWorkers))
|
|
510
550
|
throw new Error('Invalid environment configuration.');
|
|
@@ -519,7 +559,48 @@ function patchEnvironmentConfiguration(xml, entries, platform = process.platform
|
|
|
519
559
|
// exactly like the product's own `conf/Wyn.conf`: the Server loads it itself.
|
|
520
560
|
const declared = entries.filter(entry => entry.role === 'service' && entry.service);
|
|
521
561
|
const services = document?.SystemConfig?.Services;
|
|
522
|
-
if (
|
|
562
|
+
if (multiProcess && services && typeof services === 'object' && !Array.isArray(services)) {
|
|
563
|
+
const nodes = services;
|
|
564
|
+
for (const entry of entries.filter(candidate => candidate.role === 'server' && candidate.service)) {
|
|
565
|
+
const node = nodes[entry.service];
|
|
566
|
+
if (!node || typeof node !== 'object' || Array.isArray(node))
|
|
567
|
+
continue;
|
|
568
|
+
const fields = node;
|
|
569
|
+
fields.WorkingDirectory = windowsPath((0, local_path_1.directoryOf)(entry.path, platform), platform);
|
|
570
|
+
fields.Assembly = (0, local_path_1.baseNameOf)(entry.path);
|
|
571
|
+
}
|
|
572
|
+
for (const entry of [...workers, ...declared]) {
|
|
573
|
+
const spec = multiProcessServiceNodes[entry.destination];
|
|
574
|
+
if (!spec)
|
|
575
|
+
continue;
|
|
576
|
+
let node = nodes[spec.node];
|
|
577
|
+
if (node === undefined) {
|
|
578
|
+
node = {};
|
|
579
|
+
nodes[spec.node] = node;
|
|
580
|
+
}
|
|
581
|
+
if (!node || typeof node !== 'object' || Array.isArray(node))
|
|
582
|
+
throw new Error('Invalid environment configuration.');
|
|
583
|
+
const fields = node;
|
|
584
|
+
const port = multiProcess.ports[spec.port];
|
|
585
|
+
if (!Number.isInteger(port))
|
|
586
|
+
throw new Error(`Missing ${spec.port} port assignment for ${spec.node}.`);
|
|
587
|
+
fields.Disabled = 'false';
|
|
588
|
+
fields.UrlPort = String(port);
|
|
589
|
+
if (spec.schedule) {
|
|
590
|
+
const localPort = multiProcess.ports[spec.schedule];
|
|
591
|
+
if (!Number.isInteger(localPort))
|
|
592
|
+
throw new Error(`Missing ${spec.schedule} port assignment for ${spec.node}.`);
|
|
593
|
+
fields.WorkingDirectory = windowsPath((0, local_path_1.directoryOf)(entry.path, platform), platform);
|
|
594
|
+
fields.Assembly = (0, local_path_1.baseNameOf)(entry.path);
|
|
595
|
+
fields.SchedulerConfig = { LocalPort: String(localPort), ServerPort: String(multiProcess.ports.schedulerServer) };
|
|
596
|
+
}
|
|
597
|
+
else if (entry.command === 'java') {
|
|
598
|
+
fields.Command = multiProcess.java ?? 'java';
|
|
599
|
+
delete fields.Assembly;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
else if ((hosted.length || declared.length) && services && typeof services === 'object' && !Array.isArray(services)) {
|
|
523
604
|
const nodes = services;
|
|
524
605
|
for (const entry of declared)
|
|
525
606
|
if (nodes[entry.service] === undefined)
|
|
@@ -954,6 +1035,10 @@ class EnvironmentUpdater {
|
|
|
954
1035
|
const entry = await this.registry.get(name);
|
|
955
1036
|
if (entry.id !== original.id || entry.root !== original.root)
|
|
956
1037
|
throw new Error('Environment changed during operation.');
|
|
1038
|
+
const multiProcess = entry.mode === 'multi-process';
|
|
1039
|
+
const ports = multiProcess ? entry.ports : undefined;
|
|
1040
|
+
if (multiProcess && !(0, ports_1.validatePortAssignments)(ports))
|
|
1041
|
+
throw new Error(`${entry.name} is a multi-process environment without a valid recorded port assignment; recreate it with create-env.`);
|
|
957
1042
|
onProgress?.(`Validating environment ${entry.name} at ${entry.root}`);
|
|
958
1043
|
await (0, validate_1.validateEnvironmentRoot)(entry, this.registry.directory);
|
|
959
1044
|
await (0, validate_1.validateEnvironmentOwnership)(entry, this.registry.directory);
|
|
@@ -966,7 +1051,9 @@ class EnvironmentUpdater {
|
|
|
966
1051
|
// `all` means every configured module from remote; modules that already
|
|
967
1052
|
// point at a local developer build are left exactly as they are.
|
|
968
1053
|
const localModules = new Set([...Object.keys(manifest.moduleSources ?? {}), ...(entry.localModules ?? [])]);
|
|
969
|
-
const configured = [...new Set(artifacts.map(artifact => artifact.module))]
|
|
1054
|
+
const configured = [...new Set(artifacts.map(artifact => artifact.module))]
|
|
1055
|
+
.filter(module => exports.updatableModules.includes(module) || (multiProcess && catalog_1.catalog[module]?.multiProcessOnly === true))
|
|
1056
|
+
.sort();
|
|
970
1057
|
for (const module of configured) {
|
|
971
1058
|
if (localModules.has(module))
|
|
972
1059
|
skipped.push({ module, reason: 'local' });
|
|
@@ -984,6 +1071,11 @@ class EnvironmentUpdater {
|
|
|
984
1071
|
const localOverrides = new Map();
|
|
985
1072
|
const selectedTargets = new Set();
|
|
986
1073
|
for (const spec of parsed) {
|
|
1074
|
+
// The two Java services exist only in a non-single-process environment;
|
|
1075
|
+
// naming one in a single-process update would install a service the Server
|
|
1076
|
+
// never starts, so it is refused before any resolution or write.
|
|
1077
|
+
if (catalog_1.catalog[spec.module]?.multiProcessOnly && !multiProcess)
|
|
1078
|
+
throw new Error(`Module ${spec.module} is only available in a multi-process environment; ${entry.name} was created without --multi-process.`);
|
|
987
1079
|
if (['sheets', 'documents'].includes(spec.module) && entry.edition !== 'en')
|
|
988
1080
|
throw new Error(`Module ${spec.module} requires an EN edition environment; ${entry.name} is ${entry.edition}.`);
|
|
989
1081
|
if (spec.module === 'reportsheet' && entry.edition !== 'cn')
|
|
@@ -1095,7 +1187,7 @@ class EnvironmentUpdater {
|
|
|
1095
1187
|
if (spec.version !== undefined || autoRefreshed.includes(spec.module) || autoReplaced.includes(spec.module))
|
|
1096
1188
|
continue;
|
|
1097
1189
|
const artifact = resolved.get(spec.module);
|
|
1098
|
-
if (await moduleIsCurrent(entry, manifest, artifact, editionOf(entry), configured, this.platform)) {
|
|
1190
|
+
if (await moduleIsCurrent(entry, manifest, artifact, editionOf(entry), configured, this.platform, multiProcess, ports)) {
|
|
1099
1191
|
current.set(spec.module, artifact.version);
|
|
1100
1192
|
onProgress?.(`${artifact.module}/${artifact.version}: already deployed; nothing downloaded`);
|
|
1101
1193
|
}
|
|
@@ -1316,7 +1408,7 @@ class EnvironmentUpdater {
|
|
|
1316
1408
|
// empty node: the Server loads it from that entry and supplies the rest.
|
|
1317
1409
|
if (mapping.role === 'service') {
|
|
1318
1410
|
if (mapping.service)
|
|
1319
|
-
entries.push({ destination: mapping.destination, assemblies: [], path: mapping.destination, role: 'service', service: mapping.service });
|
|
1411
|
+
entries.push({ destination: mapping.destination, assemblies: [], path: mapping.destination, role: 'service', service: mapping.service, ...(mapping.command ? { command: mapping.command } : {}) });
|
|
1320
1412
|
continue;
|
|
1321
1413
|
}
|
|
1322
1414
|
const assembly = stagedArtifact?.assemblies.get(mapping.destination) ?? knownAssembly(configured, mapping, this.platform);
|
|
@@ -1361,7 +1453,10 @@ class EnvironmentUpdater {
|
|
|
1361
1453
|
});
|
|
1362
1454
|
}
|
|
1363
1455
|
const changes = plans.map(plan => ({ module: plan.module, previous: plan.previous, next: plan.next, copiedDirectories: plan.copiedDirectories, removedDirectories: plan.removedDirectories }));
|
|
1364
|
-
|
|
1456
|
+
// The Java services written into a multi-process configuration need the same
|
|
1457
|
+
// executable a create used; resolve it before the configuration is patched.
|
|
1458
|
+
const java = multiProcess && plans.some(plan => plan.module === 'datasource-service' || plan.module === 'memorydb-service') ? (0, builder_1.resolveJavaExecutable)() : undefined;
|
|
1459
|
+
const configuration = patchEnvironmentConfiguration(configured, plans.flatMap(plan => plan.entries), this.platform, multiProcess ? { ports: ports, ...(java ? { java } : {}) } : undefined);
|
|
1365
1460
|
const nextArtifacts = [...artifacts];
|
|
1366
1461
|
const nextDownloads = [...downloads];
|
|
1367
1462
|
for (const plan of plans) {
|
|
@@ -1468,7 +1563,7 @@ class EnvironmentUpdater {
|
|
|
1468
1563
|
removedCreateOnly.push(module);
|
|
1469
1564
|
}
|
|
1470
1565
|
}
|
|
1471
|
-
const nextManifest = { ...manifest, artifacts: nextArtifacts, downloads: nextDownloads, requirements: [...new Set(requirements)] };
|
|
1566
|
+
const nextManifest = { ...manifest, ...(multiProcess ? { mode: 'multi-process', ports: ports } : {}), artifacts: nextArtifacts, downloads: nextDownloads, requirements: [...new Set(requirements)] };
|
|
1472
1567
|
if (autoAddedModules)
|
|
1473
1568
|
nextManifest.autoAddedModules = autoAddedModules;
|
|
1474
1569
|
if (Object.keys(moduleSources).length)
|
|
@@ -1537,6 +1632,15 @@ class EnvironmentUpdater {
|
|
|
1537
1632
|
await fs.rm(removal, { recursive: true, force: true });
|
|
1538
1633
|
for (const copy of plan.copies)
|
|
1539
1634
|
await (0, builder_1.copyTree)(copy.source, copy.destination, copy.exclude);
|
|
1635
|
+
// A refreshed Java service package ships its own settings file; the
|
|
1636
|
+
// environment-specific port and identity URL are written back after the
|
|
1637
|
+
// directory swap, exactly like create-env writes them.
|
|
1638
|
+
if (multiProcess && ports) {
|
|
1639
|
+
for (const mapping of plan.staged?.layout ?? []) {
|
|
1640
|
+
if (mapping.rewriteConfig)
|
|
1641
|
+
await (0, builder_1.rewriteServiceConfig)(path.join(entry.root, mapping.destination), mapping.rewriteConfig, ports);
|
|
1642
|
+
}
|
|
1643
|
+
}
|
|
1540
1644
|
for (const file of plan.preserved)
|
|
1541
1645
|
await fs.copyFile(file.source, path.join(file.directory, file.name));
|
|
1542
1646
|
// The replacement is applied after the directory it lives in has been
|