@zlooks.cn/cli 1.0.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.
- package/dist/command/index.d.ts +3 -0
- package/dist/command/index.d.ts.map +1 -0
- package/dist/command/index.js +145 -0
- package/dist/command/index.js.map +1 -0
- package/dist/deploy.d.ts +35 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +312 -0
- package/dist/deploy.js.map +1 -0
- package/dist/deployment.d.ts +18 -0
- package/dist/deployment.d.ts.map +1 -0
- package/dist/deployment.js +26 -0
- package/dist/deployment.js.map +1 -0
- package/dist/doctor.d.ts +24 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +78 -0
- package/dist/doctor.js.map +1 -0
- package/dist/export/export-operation.d.ts +34 -0
- package/dist/export/export-operation.d.ts.map +1 -0
- package/dist/export/export-operation.js +69 -0
- package/dist/export/export-operation.js.map +1 -0
- package/dist/export/legacy-export.d.ts +129 -0
- package/dist/export/legacy-export.d.ts.map +1 -0
- package/dist/export/legacy-export.js +334 -0
- package/dist/export/legacy-export.js.map +1 -0
- package/dist/export/legacy-source.d.ts +16 -0
- package/dist/export/legacy-source.d.ts.map +1 -0
- package/dist/export/legacy-source.js +164 -0
- package/dist/export/legacy-source.js.map +1 -0
- package/dist/global-packages.d.ts +24 -0
- package/dist/global-packages.d.ts.map +1 -0
- package/dist/global-packages.js +89 -0
- package/dist/global-packages.js.map +1 -0
- package/dist/import/import-operation.d.ts +6 -0
- package/dist/import/import-operation.d.ts.map +1 -0
- package/dist/import/import-operation.js +16 -0
- package/dist/import/import-operation.js.map +1 -0
- package/dist/npm-registry.d.ts +11 -0
- package/dist/npm-registry.d.ts.map +1 -0
- package/dist/npm-registry.js +20 -0
- package/dist/npm-registry.js.map +1 -0
- package/dist/operations.d.ts +33 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +270 -0
- package/dist/operations.js.map +1 -0
- package/dist/package-manifest.d.ts +16 -0
- package/dist/package-manifest.d.ts.map +1 -0
- package/dist/package-manifest.js +72 -0
- package/dist/package-manifest.js.map +1 -0
- package/dist/package-updates.d.ts +13 -0
- package/dist/package-updates.d.ts.map +1 -0
- package/dist/package-updates.js +41 -0
- package/dist/package-updates.js.map +1 -0
- package/dist/pm2.d.ts +28 -0
- package/dist/pm2.d.ts.map +1 -0
- package/dist/pm2.js +72 -0
- package/dist/pm2.js.map +1 -0
- package/dist/prompt.d.ts +49 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +25 -0
- package/dist/prompt.js.map +1 -0
- package/dist/release-environment.d.ts +6 -0
- package/dist/release-environment.d.ts.map +1 -0
- package/dist/release-environment.js +19 -0
- package/dist/release-environment.js.map +1 -0
- package/dist/service-catalog.d.ts +10 -0
- package/dist/service-catalog.d.ts.map +1 -0
- package/dist/service-catalog.js +28 -0
- package/dist/service-catalog.js.map +1 -0
- package/dist/setup.d.ts +39 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +413 -0
- package/dist/setup.js.map +1 -0
- package/dist/system.d.ts +5 -0
- package/dist/system.d.ts.map +1 -0
- package/dist/system.js +11 -0
- package/dist/system.js.map +1 -0
- package/dist/topology.d.ts +11 -0
- package/dist/topology.d.ts.map +1 -0
- package/dist/topology.js +78 -0
- package/dist/topology.js.map +1 -0
- package/package.json +51 -0
package/dist/prompt.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { checkbox, confirm as inquirerConfirm, input as inquirerInput, number as inquirerNumber, password as inquirerPassword, select as inquirerSelect, } from '@inquirer/prompts';
|
|
2
|
+
export const interactivePrompts = {
|
|
3
|
+
input: (options) => inquirerInput(options),
|
|
4
|
+
number: (options) => inquirerNumber(options),
|
|
5
|
+
password: (options) => inquirerPassword(options),
|
|
6
|
+
confirm: (options) => inquirerConfirm(options),
|
|
7
|
+
select: (options) => inquirerSelect(options),
|
|
8
|
+
checkbox: (options) => checkbox(options),
|
|
9
|
+
};
|
|
10
|
+
export async function confirm(message, defaultValue = false) {
|
|
11
|
+
return interactivePrompts.confirm({ message, default: defaultValue });
|
|
12
|
+
}
|
|
13
|
+
export async function selectMany(message, choices) {
|
|
14
|
+
if (choices.length === 0)
|
|
15
|
+
return [];
|
|
16
|
+
return interactivePrompts.checkbox({
|
|
17
|
+
message,
|
|
18
|
+
choices: choices.map((choice) => ({ name: choice.name, value: choice.name, description: choice.detail })),
|
|
19
|
+
shortcuts: { all: 'a' },
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export function isPromptCancellation(error) {
|
|
23
|
+
return error instanceof Error && error.name === 'ExitPromptError';
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,OAAO,IAAI,eAAe,EAC1B,KAAK,IAAI,aAAa,EACtB,MAAM,IAAI,cAAc,EACxB,QAAQ,IAAI,gBAAgB,EAC5B,MAAM,IAAI,cAAc,GACzB,MAAM,mBAAmB,CAAC;AAiB3B,MAAM,CAAC,MAAM,kBAAkB,GAAuB;IACpD,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC;IAC5C,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC;IAChD,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC;IAC9C,MAAM,EAAE,CAAI,OAAmF,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC;IAC3H,QAAQ,EAAE,CAAI,OAAwM,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;CAC7O,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,YAAY,GAAG,KAAK;IACjE,OAAO,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,OAAsE;IAEtE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,OAAO,kBAAkB,CAAC,QAAQ,CAAC;QACjC,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzG,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;KACxB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type ZlooksEnvironment = 'production' | 'test';
|
|
2
|
+
export type ZlooksReleaseTag = 'latest' | 'test';
|
|
3
|
+
export declare function parseZlooksEnvironment(value: unknown): ZlooksEnvironment;
|
|
4
|
+
export declare function loadZlooksEnvironment(environmentFile: string): ZlooksEnvironment;
|
|
5
|
+
export declare function releaseTagForEnvironment(environment: ZlooksEnvironment): ZlooksReleaseTag;
|
|
6
|
+
//# sourceMappingURL=release-environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-environment.d.ts","sourceRoot":"","sources":["../src/release-environment.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,MAAM,CAAC;AACtD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAIxE;AAED,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,GAAG,iBAAiB,CAKhF;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,iBAAiB,GAAG,gBAAgB,CAEzF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { parseEnv } from 'node:util';
|
|
3
|
+
export function parseZlooksEnvironment(value) {
|
|
4
|
+
if (value === undefined || value === 'production')
|
|
5
|
+
return 'production';
|
|
6
|
+
if (value === 'test')
|
|
7
|
+
return 'test';
|
|
8
|
+
throw new Error('ZLOOKS_ENVIRONMENT must be production or test');
|
|
9
|
+
}
|
|
10
|
+
export function loadZlooksEnvironment(environmentFile) {
|
|
11
|
+
if (!existsSync(environmentFile)) {
|
|
12
|
+
throw new Error(`Environment file not found: ${environmentFile}. Run zlooks setup first.`);
|
|
13
|
+
}
|
|
14
|
+
return parseZlooksEnvironment(parseEnv(readFileSync(environmentFile, 'utf8')).ZLOOKS_ENVIRONMENT);
|
|
15
|
+
}
|
|
16
|
+
export function releaseTagForEnvironment(environment) {
|
|
17
|
+
return environment === 'production' ? 'latest' : 'test';
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=release-environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-environment.js","sourceRoot":"","sources":["../src/release-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAKrC,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IACvE,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACpC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,eAAuB;IAC3D,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,eAAe,2BAA2B,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,sBAAsB,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,WAA8B;IACrE,OAAO,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface DeployableService {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly packageName: `@zlooks.cn/${string}-server`;
|
|
4
|
+
readonly bin: string;
|
|
5
|
+
readonly requiresReactServer: boolean;
|
|
6
|
+
readonly requiresRscArtifact: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const SERVICES: readonly [DeployableService, DeployableService, DeployableService, DeployableService, DeployableService, DeployableService];
|
|
9
|
+
export declare function selectServices(ids: readonly string[]): readonly DeployableService[];
|
|
10
|
+
//# sourceMappingURL=service-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-catalog.d.ts","sourceRoot":"","sources":["../src/service-catalog.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,cAAc,MAAM,SAAS,CAAC;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC;AAED,eAAO,MAAM,QAAQ,6HAO4B,CAAC;AAYlD,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,iBAAiB,EAAE,CAOnF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const SERVICES = [
|
|
2
|
+
service('global-config-server'),
|
|
3
|
+
service('user-server', true),
|
|
4
|
+
service('blog-server'),
|
|
5
|
+
service('password-auth-server', true),
|
|
6
|
+
service('blog-theme-default-server', true),
|
|
7
|
+
service('gateway-server'),
|
|
8
|
+
];
|
|
9
|
+
function service(id, requiresRscArtifact = false) {
|
|
10
|
+
return {
|
|
11
|
+
id,
|
|
12
|
+
packageName: `@zlooks.cn/${id}`,
|
|
13
|
+
bin: `zlooks-${id}`,
|
|
14
|
+
requiresReactServer: requiresRscArtifact,
|
|
15
|
+
requiresRscArtifact,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function selectServices(ids) {
|
|
19
|
+
if (ids.length === 0)
|
|
20
|
+
return SERVICES;
|
|
21
|
+
return ids.map((id) => {
|
|
22
|
+
const selected = SERVICES.find((service) => service.id === id);
|
|
23
|
+
if (!selected)
|
|
24
|
+
throw new Error(`Unknown service: ${id}`);
|
|
25
|
+
return selected;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=service-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-catalog.js","sourceRoot":"","sources":["../src/service-catalog.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,CAAC,sBAAsB,CAAC;IAC/B,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;IAC5B,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;IACrC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;IAC1C,OAAO,CAAC,gBAAgB,CAAC;CACsB,CAAC;AAElD,SAAS,OAAO,CAAC,EAAU,EAAE,mBAAmB,GAAG,KAAK;IACtD,OAAO;QACL,EAAE;QACF,WAAW,EAAE,cAAc,EAAE,EAAE;QAC/B,GAAG,EAAE,UAAU,EAAE,EAAE;QACnB,mBAAmB,EAAE,mBAAmB;QACxC,mBAAmB;KACC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAsB;IACnD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type NetworkInterfaceInfo } from 'node:os';
|
|
2
|
+
import { type ActiveNpmRegistry } from './npm-registry.js';
|
|
3
|
+
import { type InteractivePrompts } from './prompt.js';
|
|
4
|
+
import type { ZlooksEnvironment } from './release-environment.js';
|
|
5
|
+
export declare const SETUP_GROUPS: readonly ['environment', 'npm-registry', 'release-environment', 'postgres', 'redis', 'public-host', 'gateway', 'email', 'password-auth'];
|
|
6
|
+
export type SetupGroup = typeof SETUP_GROUPS[number];
|
|
7
|
+
export interface SetupPaths {
|
|
8
|
+
readonly environment: string;
|
|
9
|
+
readonly registryYaml: string;
|
|
10
|
+
}
|
|
11
|
+
export interface BootstrapEnvironment {
|
|
12
|
+
readonly host: string;
|
|
13
|
+
readonly port: number;
|
|
14
|
+
readonly advertiseHost?: string;
|
|
15
|
+
readonly activeRegistry?: ActiveNpmRegistry;
|
|
16
|
+
readonly zlooksEnvironment?: ZlooksEnvironment;
|
|
17
|
+
}
|
|
18
|
+
export interface PrivateIpv4Address {
|
|
19
|
+
readonly interfaceName: string;
|
|
20
|
+
readonly address: string;
|
|
21
|
+
}
|
|
22
|
+
export interface SetupRuntime {
|
|
23
|
+
readonly homeDirectory: string;
|
|
24
|
+
readonly prompts: InteractivePrompts;
|
|
25
|
+
readonly interfaces: NodeJS.Dict<NetworkInterfaceInfo[]>;
|
|
26
|
+
randomSecret(bytes: number, encoding: 'base64' | 'base64url'): string;
|
|
27
|
+
write(text: string): void;
|
|
28
|
+
}
|
|
29
|
+
export declare function setupOperation(runtime?: SetupRuntime): Promise<void>;
|
|
30
|
+
export declare function getSetupPaths(homeDirectory?: string): SetupPaths;
|
|
31
|
+
export declare function findPrivateIpv4Addresses(interfaces?: NodeJS.Dict<NetworkInterfaceInfo[]>): readonly PrivateIpv4Address[];
|
|
32
|
+
export declare function serializeBootstrapEnvironment(environment: BootstrapEnvironment): string;
|
|
33
|
+
export declare function mergeBootstrapEnvironment(source: string, updates: ReadonlyMap<string, string | undefined>): string;
|
|
34
|
+
export declare function mergeYamlGroups(source: string, updates: ReadonlyMap<string, unknown>): string;
|
|
35
|
+
export declare function writeSetupFiles(paths: SetupPaths, contents: {
|
|
36
|
+
readonly environment?: string;
|
|
37
|
+
readonly yaml?: string;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAUA,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAUhF,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,MAAM,YAAY,YACvB,aAAa,EAAE,cAAc,EAAE,qBAAqB,EACpD,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,CAC/D,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,iBAAiB,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CAChD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACzD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACtE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,YAAkC,GAAG,OAAO,CAAC,IAAI,CAAC,CAqE/F;AAED,wBAAgB,aAAa,CAAC,aAAa,SAAY,GAAG,UAAU,CAKnE;AAED,wBAAgB,wBAAwB,CACtC,UAAU,GAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAuB,GACpE,SAAS,kBAAkB,EAAE,CAY/B;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,oBAAoB,GAAG,MAAM,CAQvF;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC/C,MAAM,CAoBR;AAmCD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAK7F;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
package/dist/setup.js
ADDED
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
|
|
3
|
+
import { homedir, networkInterfaces } from 'node:os';
|
|
4
|
+
import { dirname, resolve } from 'node:path';
|
|
5
|
+
import { parseEnv } from 'node:util';
|
|
6
|
+
import { parseEmailConfig, parsePostgresConfig, parseRedisConfig, } from '@zlooks.cn/infrastructure';
|
|
7
|
+
import { parsePublicHostConfig } from '@zlooks.cn/public-host-contract';
|
|
8
|
+
import { parseDocument } from 'yaml';
|
|
9
|
+
import { NPM_REGISTRY_CHOICES, } from './npm-registry.js';
|
|
10
|
+
import { interactivePrompts } from './prompt.js';
|
|
11
|
+
export const SETUP_GROUPS = [
|
|
12
|
+
'environment', 'npm-registry', 'release-environment',
|
|
13
|
+
'postgres', 'redis', 'public-host', 'gateway', 'email', 'password-auth',
|
|
14
|
+
];
|
|
15
|
+
export async function setupOperation(runtime = defaultSetupRuntime) {
|
|
16
|
+
const paths = getSetupPaths(runtime.homeDirectory);
|
|
17
|
+
const environmentExists = existsSync(paths.environment);
|
|
18
|
+
const yamlExists = existsSync(paths.registryYaml);
|
|
19
|
+
const selected = !environmentExists && !yamlExists
|
|
20
|
+
? [...SETUP_GROUPS]
|
|
21
|
+
: !environmentExists
|
|
22
|
+
? ['environment', 'npm-registry', 'release-environment']
|
|
23
|
+
: !yamlExists
|
|
24
|
+
? SETUP_GROUPS.filter((group) => (group !== 'environment' && group !== 'npm-registry' && group !== 'release-environment'))
|
|
25
|
+
: await selectSetupGroups(runtime.prompts);
|
|
26
|
+
if (selected.length === 0)
|
|
27
|
+
return;
|
|
28
|
+
const currentEnvironment = environmentExists ? parseEnv(readFileSync(paths.environment, 'utf8')) : {};
|
|
29
|
+
const environmentSource = environmentExists ? readFileSync(paths.environment, 'utf8') : '';
|
|
30
|
+
const yamlSource = yamlExists ? readFileSync(paths.registryYaml, 'utf8') : '';
|
|
31
|
+
const currentYaml = readYamlObject(yamlSource);
|
|
32
|
+
const updates = new Map();
|
|
33
|
+
let environment;
|
|
34
|
+
if (selected.includes('environment') || selected.includes('npm-registry') || selected.includes('release-environment')) {
|
|
35
|
+
const environmentUpdates = new Map();
|
|
36
|
+
if (selected.includes('environment')) {
|
|
37
|
+
const bootstrap = await promptBootstrapEnvironment(currentEnvironment, findPrivateIpv4Addresses(runtime.interfaces), runtime.prompts);
|
|
38
|
+
environmentUpdates.set('REGISTRY_HOST', bootstrap.host);
|
|
39
|
+
environmentUpdates.set('REGISTRY_PORT', String(bootstrap.port));
|
|
40
|
+
environmentUpdates.set('HILE_ADVERTISE_HOST', bootstrap.advertiseHost);
|
|
41
|
+
}
|
|
42
|
+
if (selected.includes('npm-registry')) {
|
|
43
|
+
environmentUpdates.set('ACTIVE_REGISTRY', await promptNpmRegistry(currentEnvironment.ACTIVE_REGISTRY, runtime.prompts));
|
|
44
|
+
}
|
|
45
|
+
if (selected.includes('release-environment')) {
|
|
46
|
+
environmentUpdates.set('ZLOOKS_ENVIRONMENT', await promptReleaseEnvironment(currentEnvironment.ZLOOKS_ENVIRONMENT, runtime.prompts));
|
|
47
|
+
}
|
|
48
|
+
environment = mergeBootstrapEnvironment(environmentSource, environmentUpdates);
|
|
49
|
+
}
|
|
50
|
+
if (selected.includes('postgres'))
|
|
51
|
+
updates.set('postgres', await promptPostgres(currentYaml.postgres, runtime.prompts));
|
|
52
|
+
if (selected.includes('redis'))
|
|
53
|
+
updates.set('redis', await promptRedis(currentYaml.redis, runtime.prompts));
|
|
54
|
+
if (selected.includes('public-host'))
|
|
55
|
+
updates.set('public-host', await promptPublicHost(currentYaml['public-host'], runtime.prompts));
|
|
56
|
+
if (selected.includes('gateway'))
|
|
57
|
+
updates.set('gateway', await promptGateway(currentYaml.gateway, runtime));
|
|
58
|
+
if (selected.includes('email'))
|
|
59
|
+
updates.set('email', await promptEmail(currentYaml.email, runtime.prompts));
|
|
60
|
+
if (selected.includes('password-auth'))
|
|
61
|
+
updates.set('password-auth', await promptPasswordAuth(currentYaml['password-auth'], runtime));
|
|
62
|
+
runtime.write(`\n即将更新:${selected.map(groupLabel).join('、')}\n`);
|
|
63
|
+
if (!await runtime.prompts.confirm({ message: '确认写入配置?', default: false })) {
|
|
64
|
+
runtime.write('已取消,配置文件未发生变化。\n');
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
await writeSetupFiles(paths, {
|
|
68
|
+
...(environment === undefined ? {} : { environment }),
|
|
69
|
+
...(updates.size === 0 ? {} : { yaml: mergeYamlGroups(yamlSource, updates) }),
|
|
70
|
+
});
|
|
71
|
+
const writtenPaths = [
|
|
72
|
+
...(environment === undefined ? [] : [paths.environment]),
|
|
73
|
+
...(updates.size === 0 ? [] : [paths.registryYaml]),
|
|
74
|
+
];
|
|
75
|
+
runtime.write(`配置已写入:\n${writtenPaths.map((path) => ` ${path}`).join('\n')}\n`);
|
|
76
|
+
}
|
|
77
|
+
export function getSetupPaths(homeDirectory = homedir()) {
|
|
78
|
+
return {
|
|
79
|
+
environment: resolve(homeDirectory, '.zlooks.cn/.env'),
|
|
80
|
+
registryYaml: resolve(homeDirectory, '.registry/configs/zlooks.cn.config.yaml'),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export function findPrivateIpv4Addresses(interfaces = networkInterfaces()) {
|
|
84
|
+
const found = [];
|
|
85
|
+
for (const [interfaceName, entries] of Object.entries(interfaces)) {
|
|
86
|
+
for (const entry of entries ?? []) {
|
|
87
|
+
if (entry.family !== 'IPv4' || entry.internal || !isPrivateIpv4(entry.address))
|
|
88
|
+
continue;
|
|
89
|
+
found.push({ interfaceName, address: entry.address });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return found
|
|
93
|
+
.filter((entry, index, all) => all.findIndex((candidate) => candidate.address === entry.address) === index)
|
|
94
|
+
.sort((left, right) => left.interfaceName.localeCompare(right.interfaceName)
|
|
95
|
+
|| left.address.localeCompare(right.address));
|
|
96
|
+
}
|
|
97
|
+
export function serializeBootstrapEnvironment(environment) {
|
|
98
|
+
return mergeBootstrapEnvironment('', new Map([
|
|
99
|
+
['REGISTRY_HOST', environment.host],
|
|
100
|
+
['REGISTRY_PORT', String(environment.port)],
|
|
101
|
+
['HILE_ADVERTISE_HOST', environment.advertiseHost],
|
|
102
|
+
['ACTIVE_REGISTRY', environment.activeRegistry],
|
|
103
|
+
['ZLOOKS_ENVIRONMENT', environment.zlooksEnvironment],
|
|
104
|
+
]));
|
|
105
|
+
}
|
|
106
|
+
export function mergeBootstrapEnvironment(source, updates) {
|
|
107
|
+
const lines = source.split('\n');
|
|
108
|
+
if (lines.at(-1) === '')
|
|
109
|
+
lines.pop();
|
|
110
|
+
const seen = new Set();
|
|
111
|
+
const output = [];
|
|
112
|
+
for (const line of lines) {
|
|
113
|
+
const key = /^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(line)?.[1];
|
|
114
|
+
if (!key || !updates.has(key)) {
|
|
115
|
+
output.push(line);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (seen.has(key))
|
|
119
|
+
continue;
|
|
120
|
+
seen.add(key);
|
|
121
|
+
const value = updates.get(key);
|
|
122
|
+
if (value !== undefined)
|
|
123
|
+
output.push(`${key}=${safeEnvironmentValue(value)}`);
|
|
124
|
+
}
|
|
125
|
+
for (const [key, value] of updates) {
|
|
126
|
+
if (!seen.has(key) && value !== undefined)
|
|
127
|
+
output.push(`${key}=${safeEnvironmentValue(value)}`);
|
|
128
|
+
}
|
|
129
|
+
return `${output.join('\n')}\n`;
|
|
130
|
+
}
|
|
131
|
+
async function promptNpmRegistry(current, prompts) {
|
|
132
|
+
const choices = [...NPM_REGISTRY_CHOICES].sort((left, right) => (Number(right.value === current) - Number(left.value === current)));
|
|
133
|
+
return prompts.select({
|
|
134
|
+
message: 'ACTIVE_REGISTRY(公开 npm 源)',
|
|
135
|
+
choices: choices.map((choice) => ({
|
|
136
|
+
name: `${choice.name} — ${choice.value}`,
|
|
137
|
+
value: choice.value,
|
|
138
|
+
})),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async function promptReleaseEnvironment(current, prompts) {
|
|
142
|
+
const environment = current === 'test' ? 'test' : 'production';
|
|
143
|
+
const choices = [
|
|
144
|
+
{ name: '正式环境 — latest', value: 'production' },
|
|
145
|
+
{ name: '测试环境 — test', value: 'test' },
|
|
146
|
+
];
|
|
147
|
+
return prompts.select({
|
|
148
|
+
message: 'ZLOOKS_ENVIRONMENT(软件包发布环境)',
|
|
149
|
+
choices: [...choices].sort((left, right) => (Number(right.value === environment) - Number(left.value === environment))),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
export function mergeYamlGroups(source, updates) {
|
|
153
|
+
const document = parseDocument(source || '{}\n');
|
|
154
|
+
if (document.errors.length > 0)
|
|
155
|
+
throw new Error(`Invalid Registry YAML: ${document.errors[0].message}`);
|
|
156
|
+
for (const [key, value] of updates)
|
|
157
|
+
document.set(key, value);
|
|
158
|
+
return document.toString({ lineWidth: 0 });
|
|
159
|
+
}
|
|
160
|
+
export async function writeSetupFiles(paths, contents) {
|
|
161
|
+
if (contents.environment !== undefined) {
|
|
162
|
+
mkdirSync(dirname(paths.environment), { recursive: true, mode: 0o700 });
|
|
163
|
+
chmodSync(dirname(paths.environment), 0o700);
|
|
164
|
+
writeAtomic(paths.environment, contents.environment);
|
|
165
|
+
}
|
|
166
|
+
if (contents.yaml !== undefined) {
|
|
167
|
+
mkdirSync(dirname(paths.registryYaml), { recursive: true });
|
|
168
|
+
writeAtomic(paths.registryYaml, contents.yaml);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async function selectSetupGroups(prompts) {
|
|
172
|
+
return prompts.checkbox({
|
|
173
|
+
message: '请选择需要更新的配置组',
|
|
174
|
+
required: true,
|
|
175
|
+
choices: SETUP_GROUPS.map((group) => ({ name: groupLabel(group), value: group })),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
async function promptBootstrapEnvironment(current, addresses, prompts) {
|
|
179
|
+
const host = await prompts.input({
|
|
180
|
+
message: 'Registry Host',
|
|
181
|
+
default: current.REGISTRY_HOST ?? '127.0.0.1',
|
|
182
|
+
validate: validateHostname,
|
|
183
|
+
});
|
|
184
|
+
const port = await requiredNumber(prompts, 'Registry Port', numberValue(current.REGISTRY_PORT, 9876), 1, 65_535);
|
|
185
|
+
const advertiseHost = await chooseAdvertiseHost(addresses, prompts);
|
|
186
|
+
return { host: host.trim(), port, ...(advertiseHost ? { advertiseHost } : {}) };
|
|
187
|
+
}
|
|
188
|
+
async function chooseAdvertiseHost(addresses, prompts) {
|
|
189
|
+
if (addresses.length === 0)
|
|
190
|
+
return undefined;
|
|
191
|
+
if (addresses.length === 1) {
|
|
192
|
+
const address = addresses[0];
|
|
193
|
+
return await prompts.confirm({
|
|
194
|
+
message: `检测到本机内网 IP ${address.address} (${address.interfaceName}),是否写入 HILE_ADVERTISE_HOST?`,
|
|
195
|
+
default: true,
|
|
196
|
+
}) ? address.address : undefined;
|
|
197
|
+
}
|
|
198
|
+
const selected = await prompts.select({
|
|
199
|
+
message: '检测到多个本机内网 IP,请选择用于 Hile 服务通告的地址',
|
|
200
|
+
choices: [
|
|
201
|
+
...addresses.map((address) => ({ name: `${address.address} ${address.interfaceName}`, value: address.address })),
|
|
202
|
+
{ name: '放弃,不写入 HILE_ADVERTISE_HOST', value: '' },
|
|
203
|
+
],
|
|
204
|
+
});
|
|
205
|
+
if (!selected)
|
|
206
|
+
return undefined;
|
|
207
|
+
return await prompts.confirm({
|
|
208
|
+
message: `将写入 HILE_ADVERTISE_HOST=${selected},是否确认?`,
|
|
209
|
+
default: true,
|
|
210
|
+
}) ? selected : undefined;
|
|
211
|
+
}
|
|
212
|
+
async function promptPostgres(current, prompts) {
|
|
213
|
+
const value = record(current);
|
|
214
|
+
return parsePostgresConfig({
|
|
215
|
+
host: await text(prompts, 'PostgreSQL Host', value.host, '127.0.0.1', validateHostname),
|
|
216
|
+
port: await requiredNumber(prompts, 'PostgreSQL Port', numeric(value.port, 5432), 1, 65_535),
|
|
217
|
+
username: await text(prompts, 'PostgreSQL Username', value.username, 'zlooks', requiredText),
|
|
218
|
+
password: await requiredSecret(prompts, 'PostgreSQL Password', value.password),
|
|
219
|
+
database: await text(prompts, 'PostgreSQL Database', value.database, 'zlooks_cn', requiredText),
|
|
220
|
+
ssl: await prompts.confirm({ message: 'Enable PostgreSQL SSL?', default: boolean(value.ssl, false) }),
|
|
221
|
+
poolSize: await requiredNumber(prompts, 'PostgreSQL Pool Size', numeric(value.poolSize, 10), 1, 100),
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
async function promptRedis(current, prompts) {
|
|
225
|
+
const value = record(current);
|
|
226
|
+
const username = await optionalText(prompts, 'Redis Username(可选)', value.username);
|
|
227
|
+
const password = await optionalSecret(prompts, 'Redis Password(可选)', value.password);
|
|
228
|
+
return parseRedisConfig({
|
|
229
|
+
host: await text(prompts, 'Redis Host', value.host, '127.0.0.1', validateHostname),
|
|
230
|
+
port: await requiredNumber(prompts, 'Redis Port', numeric(value.port, 6379), 1, 65_535),
|
|
231
|
+
...(username ? { username } : {}),
|
|
232
|
+
...(password ? { password } : {}),
|
|
233
|
+
database: await requiredNumber(prompts, 'Redis Database', numeric(value.database, 0), 0, 15),
|
|
234
|
+
keyPrefix: await text(prompts, 'Redis Key Prefix', value.keyPrefix, 'zlooks:', (input) => (/^[A-Za-z0-9:._-]+$/.test(input) || '只能包含字母、数字、冒号、点、下划线和连字符')),
|
|
235
|
+
tls: await prompts.confirm({ message: 'Enable Redis TLS?', default: boolean(value.tls, false) }),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
async function promptPublicHost(current, prompts) {
|
|
239
|
+
const value = record(current);
|
|
240
|
+
return parsePublicHostConfig({
|
|
241
|
+
origin: await text(prompts, 'Public Origin', value.origin, 'http://127.0.0.1:3000', (input) => {
|
|
242
|
+
try {
|
|
243
|
+
parsePublicHostConfig({ origin: input });
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return '请输入规范的 HTTP(S) Origin';
|
|
248
|
+
}
|
|
249
|
+
}),
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
async function promptGateway(current, runtime) {
|
|
253
|
+
const value = record(current);
|
|
254
|
+
const port = await requiredNumber(runtime.prompts, 'Gateway Port', numeric(value.port, 3000), 1, 65_535);
|
|
255
|
+
const mcpBearerToken = await generatedSecret(runtime, 'Gateway MCP Bearer Token', value.mcpBearerToken, 'base64url');
|
|
256
|
+
if (mcpBearerToken.length < 16) {
|
|
257
|
+
throw new Error('Gateway MCP Bearer Token must contain at least 16 characters');
|
|
258
|
+
}
|
|
259
|
+
return {
|
|
260
|
+
port,
|
|
261
|
+
mcpBearerToken,
|
|
262
|
+
mcpBearerClientId: await text(runtime.prompts, 'Gateway MCP Client ID', value.mcpBearerClientId, 'zlooks-admin-client', (input) => /^[a-z][a-z0-9._-]{0,127}$/.test(input) || 'Client ID 格式无效'),
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
async function promptEmail(current, prompts) {
|
|
266
|
+
const value = record(current);
|
|
267
|
+
const smtp = record(value.smtp);
|
|
268
|
+
const from = record(value.from);
|
|
269
|
+
return parseEmailConfig({
|
|
270
|
+
smtp: {
|
|
271
|
+
host: await text(prompts, 'SMTP Host', smtp.host, '', validateHostname),
|
|
272
|
+
port: await requiredNumber(prompts, 'SMTP Port', numeric(smtp.port, 465), 1, 65_535),
|
|
273
|
+
secure: await prompts.confirm({ message: 'SMTP Secure?', default: boolean(smtp.secure, true) }),
|
|
274
|
+
username: await text(prompts, 'SMTP Username', smtp.username, '', requiredText),
|
|
275
|
+
password: await requiredSecret(prompts, 'SMTP Password', smtp.password),
|
|
276
|
+
},
|
|
277
|
+
from: {
|
|
278
|
+
name: await text(prompts, 'Email Sender Name', from.name, 'Zlooks', requiredText),
|
|
279
|
+
address: await text(prompts, 'Email Sender Address', from.address, '', (input) => (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(input) || '请输入有效邮箱地址')),
|
|
280
|
+
},
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
async function promptPasswordAuth(current, runtime) {
|
|
284
|
+
const value = record(current);
|
|
285
|
+
const secret = await generatedSecret(runtime, 'Password Verification HMAC Key', value.verificationCodeHmacKey, 'base64');
|
|
286
|
+
if (Buffer.from(secret, 'base64').byteLength !== 32)
|
|
287
|
+
throw new Error('Password verification HMAC key must be 32 bytes');
|
|
288
|
+
return { verificationCodeHmacKey: secret };
|
|
289
|
+
}
|
|
290
|
+
async function generatedSecret(runtime, label, current, encoding) {
|
|
291
|
+
if (typeof current !== 'string' || current.length === 0) {
|
|
292
|
+
runtime.write(`${label}:已自动生成\n`);
|
|
293
|
+
return runtime.randomSecret(32, encoding);
|
|
294
|
+
}
|
|
295
|
+
const replace = await runtime.prompts.confirm({ message: `${label} 已设置,是否重新生成?`, default: false });
|
|
296
|
+
return replace ? runtime.randomSecret(32, encoding) : current;
|
|
297
|
+
}
|
|
298
|
+
async function text(prompts, message, current, fallback, validate) {
|
|
299
|
+
return (await prompts.input({
|
|
300
|
+
message,
|
|
301
|
+
default: typeof current === 'string' ? current : fallback,
|
|
302
|
+
validate,
|
|
303
|
+
})).trim();
|
|
304
|
+
}
|
|
305
|
+
async function optionalText(prompts, message, current) {
|
|
306
|
+
const result = (await prompts.input({
|
|
307
|
+
message,
|
|
308
|
+
...(typeof current === 'string' ? { default: current } : {}),
|
|
309
|
+
})).trim();
|
|
310
|
+
return result || undefined;
|
|
311
|
+
}
|
|
312
|
+
async function requiredSecret(prompts, message, current) {
|
|
313
|
+
const existing = typeof current === 'string' ? current : undefined;
|
|
314
|
+
const result = await prompts.password({
|
|
315
|
+
message: existing ? `${message}(回车保留现有值)` : message,
|
|
316
|
+
mask: '*',
|
|
317
|
+
validate: (input) => Boolean(input || existing) || '该字段不能为空',
|
|
318
|
+
});
|
|
319
|
+
return result || existing;
|
|
320
|
+
}
|
|
321
|
+
async function optionalSecret(prompts, message, current) {
|
|
322
|
+
const existing = typeof current === 'string' ? current : undefined;
|
|
323
|
+
const result = await prompts.password({
|
|
324
|
+
message: existing ? `${message}(回车保留现有值)` : message,
|
|
325
|
+
mask: '*',
|
|
326
|
+
});
|
|
327
|
+
return result || existing;
|
|
328
|
+
}
|
|
329
|
+
async function requiredNumber(prompts, message, defaultValue, min, max) {
|
|
330
|
+
const result = await prompts.number({ message, default: defaultValue, min, max, required: true });
|
|
331
|
+
if (result === undefined)
|
|
332
|
+
throw new Error(`${message} is required`);
|
|
333
|
+
return result;
|
|
334
|
+
}
|
|
335
|
+
function readYamlObject(source) {
|
|
336
|
+
if (!source.trim())
|
|
337
|
+
return {};
|
|
338
|
+
const document = parseDocument(source);
|
|
339
|
+
if (document.errors.length > 0)
|
|
340
|
+
throw new Error(`Invalid Registry YAML: ${document.errors[0].message}`);
|
|
341
|
+
return record(document.toJS());
|
|
342
|
+
}
|
|
343
|
+
function record(value) {
|
|
344
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
345
|
+
? value
|
|
346
|
+
: {};
|
|
347
|
+
}
|
|
348
|
+
function numeric(value, fallback) {
|
|
349
|
+
return typeof value === 'number' ? value : fallback;
|
|
350
|
+
}
|
|
351
|
+
function numberValue(value, fallback) {
|
|
352
|
+
const parsed = Number(value);
|
|
353
|
+
return Number.isInteger(parsed) ? parsed : fallback;
|
|
354
|
+
}
|
|
355
|
+
function boolean(value, fallback) {
|
|
356
|
+
return typeof value === 'boolean' ? value : fallback;
|
|
357
|
+
}
|
|
358
|
+
function requiredText(value) {
|
|
359
|
+
return value.trim().length > 0 || '该字段不能为空';
|
|
360
|
+
}
|
|
361
|
+
function validateHostname(value) {
|
|
362
|
+
const normalized = value.trim();
|
|
363
|
+
return (normalized.length > 0
|
|
364
|
+
&& normalized.length <= 253
|
|
365
|
+
&& /^[A-Za-z0-9_.:[\]%-]+$/.test(normalized)) || '请输入有效主机名或 IP';
|
|
366
|
+
}
|
|
367
|
+
function safeEnvironmentValue(value) {
|
|
368
|
+
if (/[\r\n\0]/.test(value))
|
|
369
|
+
throw new Error('Unsafe environment value');
|
|
370
|
+
return value;
|
|
371
|
+
}
|
|
372
|
+
function isPrivateIpv4(address) {
|
|
373
|
+
const parts = address.split('.').map(Number);
|
|
374
|
+
if (parts.length !== 4 || parts.some((part) => !Number.isInteger(part) || part < 0 || part > 255))
|
|
375
|
+
return false;
|
|
376
|
+
return parts[0] === 10
|
|
377
|
+
|| (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31)
|
|
378
|
+
|| (parts[0] === 192 && parts[1] === 168);
|
|
379
|
+
}
|
|
380
|
+
function groupLabel(group) {
|
|
381
|
+
return {
|
|
382
|
+
environment: 'Registry 启动配置',
|
|
383
|
+
'npm-registry': 'npm 源',
|
|
384
|
+
'release-environment': 'Zlooks 发布环境',
|
|
385
|
+
postgres: 'PostgreSQL',
|
|
386
|
+
redis: 'Redis',
|
|
387
|
+
'public-host': '公共访问地址',
|
|
388
|
+
gateway: 'Gateway',
|
|
389
|
+
email: '邮件服务',
|
|
390
|
+
'password-auth': '密码认证',
|
|
391
|
+
}[group];
|
|
392
|
+
}
|
|
393
|
+
function writeAtomic(path, content) {
|
|
394
|
+
const temporary = `${path}.tmp-${process.pid}-${randomBytes(6).toString('hex')}`;
|
|
395
|
+
try {
|
|
396
|
+
writeFileSync(temporary, content, { encoding: 'utf8', mode: 0o600, flag: 'wx' });
|
|
397
|
+
renameSync(temporary, path);
|
|
398
|
+
chmodSync(path, 0o600);
|
|
399
|
+
}
|
|
400
|
+
catch (error) {
|
|
401
|
+
if (existsSync(temporary))
|
|
402
|
+
unlinkSync(temporary);
|
|
403
|
+
throw error;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
const defaultSetupRuntime = {
|
|
407
|
+
homeDirectory: homedir(),
|
|
408
|
+
prompts: interactivePrompts,
|
|
409
|
+
interfaces: networkInterfaces(),
|
|
410
|
+
randomSecret: (bytes, encoding) => randomBytes(bytes).toString(encoding),
|
|
411
|
+
write: (text) => process.stdout.write(text),
|
|
412
|
+
};
|
|
413
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/system.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5E,MAAM,CAQR"}
|
package/dist/system.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
export function executeFile(executable, args, options = {}) {
|
|
3
|
+
if (options.silent) {
|
|
4
|
+
return execFileSync(executable, [...args], {
|
|
5
|
+
encoding: 'utf8', env: options.env, stdio: ['ignore', 'pipe', 'pipe'],
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
execFileSync(executable, [...args], { env: options.env, stdio: 'inherit' });
|
|
9
|
+
return '';
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,WAAW,CACzB,UAAkB,EAClB,IAAuB,EACvB,OAAO,GAAoE,EAAE;IAE7E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;YACzC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SACtE,CAAC,CAAC;IACL,CAAC;IACD,YAAY,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5E,OAAO,EAAE,CAAC;AACZ,CAAC"}
|