rty-test-cli-package 1.0.2 → 1.0.3
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/bin/forge-app +1 -1
- package/dist/cli/ManifestBuilder.d.ts +19 -36
- package/dist/cli/ManifestBuilder.js +130 -17
- package/dist/cli/ManifestBuilder.js.map +1 -1
- package/dist/cli/forgeManifestSchema.d.ts +5075 -0
- package/dist/cli/forgeManifestSchema.js +138 -0
- package/dist/cli/forgeManifestSchema.js.map +1 -0
- package/package.json +1 -1
- package/src/cli/ManifestBuilder.ts +166 -17
- package/src/cli/forgeManifestSchema.ts +162 -0
- package/forge.config.js +0 -667
package/bin/forge-app
CHANGED
|
@@ -52,7 +52,7 @@ yargs(hideBin(process.argv))
|
|
|
52
52
|
|
|
53
53
|
Promise.resolve(configContent).then((resolved) => {
|
|
54
54
|
const content = resolved.default ?? resolved;
|
|
55
|
-
const result = ManifestBuilder.generateManifest(content);
|
|
55
|
+
const result = ManifestBuilder.generateManifest(content, process.env);
|
|
56
56
|
const outPath = path.resolve(args.output);
|
|
57
57
|
|
|
58
58
|
fs.writeFileSync(outPath, result.yaml, 'utf8');
|
|
@@ -1,36 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
app: z.ZodObject<{
|
|
4
|
-
id: z.ZodString;
|
|
5
|
-
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
6
|
-
id: z.ZodString;
|
|
7
|
-
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
8
|
-
id: z.ZodString;
|
|
9
|
-
}, z.ZodTypeAny, "passthrough">>;
|
|
10
|
-
modules: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnknown>, Record<string, unknown>, Record<string, unknown>>;
|
|
11
|
-
permissions: z.ZodUnknown;
|
|
12
|
-
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
13
|
-
app: z.ZodObject<{
|
|
14
|
-
id: z.ZodString;
|
|
15
|
-
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
16
|
-
id: z.ZodString;
|
|
17
|
-
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
18
|
-
id: z.ZodString;
|
|
19
|
-
}, z.ZodTypeAny, "passthrough">>;
|
|
20
|
-
modules: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnknown>, Record<string, unknown>, Record<string, unknown>>;
|
|
21
|
-
permissions: z.ZodUnknown;
|
|
22
|
-
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
23
|
-
app: z.ZodObject<{
|
|
24
|
-
id: z.ZodString;
|
|
25
|
-
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
26
|
-
id: z.ZodString;
|
|
27
|
-
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
28
|
-
id: z.ZodString;
|
|
29
|
-
}, z.ZodTypeAny, "passthrough">>;
|
|
30
|
-
modules: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnknown>, Record<string, unknown>, Record<string, unknown>>;
|
|
31
|
-
permissions: z.ZodUnknown;
|
|
32
|
-
}, z.ZodTypeAny, "passthrough">>;
|
|
33
|
-
export type ForgeManifest = z.infer<typeof forgeManifestSchema>;
|
|
1
|
+
import { type ForgeManifest } from './forgeManifestSchema.js';
|
|
2
|
+
export type { ForgeManifest };
|
|
34
3
|
export interface BuildContext {
|
|
35
4
|
command: 'build-manifest';
|
|
36
5
|
mode: string;
|
|
@@ -39,13 +8,27 @@ export interface BuildContext {
|
|
|
39
8
|
export default class ManifestBuilder {
|
|
40
9
|
static resolveConfigFromFile(configPath: string, context: BuildContext): Promise<Record<string, unknown>>;
|
|
41
10
|
static resolveConfigFromTemplate(templatePath: string, env: Record<string, string>): Record<string, unknown>;
|
|
42
|
-
static generateManifest(config: Record<string, unknown>): {
|
|
11
|
+
static generateManifest(config: Record<string, unknown>, env?: Record<string, string>): {
|
|
43
12
|
yaml: string;
|
|
44
13
|
object: ForgeManifest;
|
|
45
14
|
};
|
|
46
15
|
static validateManifest(manifest: unknown): ForgeManifest;
|
|
47
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Collects env variables that start with FORGE_APP_ for interpolation and overrides.
|
|
18
|
+
* Only includes non-empty values.
|
|
19
|
+
*/
|
|
20
|
+
static getAllowedEnv(env: Record<string, string>): Record<string, string>;
|
|
21
|
+
/**
|
|
22
|
+
* Applies automatic overrides from FORGE_APP_* env when present:
|
|
23
|
+
* - FORGE_APP_APP_ID / FORGE_APP_ID → app.id
|
|
24
|
+
* - FORGE_APP_ENV → prefix "[ENVNAME] " to app name and module titles (uppercase)
|
|
25
|
+
* - FORGE_APP_LICENSE → app.licensing.enabled (true/1 → true)
|
|
26
|
+
* - FORGE_APP_ENABLE_PLANS → app.editionsEnabled (true/1 → true)
|
|
27
|
+
*/
|
|
28
|
+
static applyEnvOverrides(config: Record<string, unknown>, env: Record<string, string>): Record<string, unknown>;
|
|
29
|
+
private static prefixModuleTitles;
|
|
30
|
+
private static prefixTitlesInValue;
|
|
48
31
|
private static interpolateString;
|
|
49
32
|
private static interpolateValue;
|
|
33
|
+
private static logSummary;
|
|
50
34
|
}
|
|
51
|
-
export {};
|
|
@@ -40,20 +40,16 @@ const fs = __importStar(require("fs"));
|
|
|
40
40
|
const module_1 = require("module");
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
42
|
const yaml_1 = __importDefault(require("yaml"));
|
|
43
|
-
const
|
|
43
|
+
const forgeManifestSchema_js_1 = require("./forgeManifestSchema.js");
|
|
44
44
|
const PLACEHOLDER_REGEX = /\$\{([^}]+)\}/g;
|
|
45
45
|
const FORGE_APP_PREFIX = 'FORGE_APP_';
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}),
|
|
54
|
-
permissions: zod_1.z.unknown(),
|
|
55
|
-
})
|
|
56
|
-
.passthrough();
|
|
46
|
+
/** Env keys used for automatic manifest overrides (all under FORGE_APP_ prefix). */
|
|
47
|
+
const ENV_APP_ID = 'FORGE_APP_APP_ID';
|
|
48
|
+
const ENV_APP_ID_ALT = 'FORGE_APP_ID';
|
|
49
|
+
const ENV_NAME = 'FORGE_APP_ENV';
|
|
50
|
+
const ENV_LICENSE = 'FORGE_APP_LICENSE';
|
|
51
|
+
const ENV_ENABLE_PLANS = 'FORGE_APP_ENABLE_PLANS';
|
|
52
|
+
const ENV_PREFIX = '[ENV] ';
|
|
57
53
|
class ManifestBuilder {
|
|
58
54
|
static async resolveConfigFromFile(configPath, context) {
|
|
59
55
|
const resolvedPath = path.resolve(configPath);
|
|
@@ -101,15 +97,21 @@ class ManifestBuilder {
|
|
|
101
97
|
}
|
|
102
98
|
}
|
|
103
99
|
const allowed = ManifestBuilder.getAllowedEnv(env);
|
|
104
|
-
|
|
100
|
+
const interpolated = ManifestBuilder.interpolateValue(parsed, allowed);
|
|
101
|
+
return ManifestBuilder.applyEnvOverrides(interpolated, env);
|
|
105
102
|
}
|
|
106
|
-
static generateManifest(config) {
|
|
107
|
-
const
|
|
103
|
+
static generateManifest(config, env) {
|
|
104
|
+
const envRecord = env ?? {};
|
|
105
|
+
const withOverrides = Object.keys(envRecord).length > 0
|
|
106
|
+
? ManifestBuilder.applyEnvOverrides(config, envRecord)
|
|
107
|
+
: config;
|
|
108
|
+
const validated = ManifestBuilder.validateManifest(withOverrides);
|
|
108
109
|
const yaml = yaml_1.default.stringify(validated);
|
|
110
|
+
ManifestBuilder.logSummary(validated, envRecord);
|
|
109
111
|
return { yaml, object: validated };
|
|
110
112
|
}
|
|
111
113
|
static validateManifest(manifest) {
|
|
112
|
-
const result = forgeManifestSchema.safeParse(manifest);
|
|
114
|
+
const result = forgeManifestSchema_js_1.forgeManifestSchema.safeParse(manifest);
|
|
113
115
|
if (!result.success) {
|
|
114
116
|
const formatted = result.error.format();
|
|
115
117
|
const message = JSON.stringify(formatted, null, 2);
|
|
@@ -117,14 +119,100 @@ class ManifestBuilder {
|
|
|
117
119
|
}
|
|
118
120
|
return result.data;
|
|
119
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Collects env variables that start with FORGE_APP_ for interpolation and overrides.
|
|
124
|
+
* Only includes non-empty values.
|
|
125
|
+
*/
|
|
120
126
|
static getAllowedEnv(env) {
|
|
121
127
|
return Object.entries(env).reduce((acc, [key, value]) => {
|
|
122
|
-
if (key.startsWith(FORGE_APP_PREFIX) &&
|
|
128
|
+
if (key.startsWith(FORGE_APP_PREFIX) &&
|
|
129
|
+
value !== undefined &&
|
|
130
|
+
value !== null &&
|
|
131
|
+
String(value).trim() !== '') {
|
|
123
132
|
acc[key] = String(value);
|
|
124
133
|
}
|
|
125
134
|
return acc;
|
|
126
135
|
}, {});
|
|
127
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Applies automatic overrides from FORGE_APP_* env when present:
|
|
139
|
+
* - FORGE_APP_APP_ID / FORGE_APP_ID → app.id
|
|
140
|
+
* - FORGE_APP_ENV → prefix "[ENVNAME] " to app name and module titles (uppercase)
|
|
141
|
+
* - FORGE_APP_LICENSE → app.licensing.enabled (true/1 → true)
|
|
142
|
+
* - FORGE_APP_ENABLE_PLANS → app.editionsEnabled (true/1 → true)
|
|
143
|
+
*/
|
|
144
|
+
static applyEnvOverrides(config, env) {
|
|
145
|
+
const allowed = ManifestBuilder.getAllowedEnv(env);
|
|
146
|
+
if (Object.keys(allowed).length === 0)
|
|
147
|
+
return config;
|
|
148
|
+
const out = { ...config };
|
|
149
|
+
const envNameRaw = allowed[ENV_NAME];
|
|
150
|
+
const envName = envNameRaw != null && envNameRaw.trim() !== '' ? envNameRaw.trim() : null;
|
|
151
|
+
const envPrefix = envName != null ? `[${envName.toUpperCase()}] ` : '';
|
|
152
|
+
if (out.app != null && typeof out.app === 'object') {
|
|
153
|
+
const app = out.app;
|
|
154
|
+
const appId = allowed[ENV_APP_ID] ?? allowed[ENV_APP_ID_ALT];
|
|
155
|
+
if (appId != null) {
|
|
156
|
+
app.id = appId;
|
|
157
|
+
}
|
|
158
|
+
if (envPrefix !== '') {
|
|
159
|
+
if (typeof app.name === 'string') {
|
|
160
|
+
if (!app.name.startsWith('['))
|
|
161
|
+
app.name = envPrefix + app.name;
|
|
162
|
+
}
|
|
163
|
+
else if (app.name == null) {
|
|
164
|
+
app.name = envPrefix + 'App';
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const licenseRaw = allowed[ENV_LICENSE];
|
|
168
|
+
if (licenseRaw != null) {
|
|
169
|
+
const enabled = /^(true|1|yes)$/i.test(licenseRaw.trim());
|
|
170
|
+
app.licensing = {
|
|
171
|
+
...(typeof app.licensing === 'object' && app.licensing != null
|
|
172
|
+
? app.licensing
|
|
173
|
+
: {}),
|
|
174
|
+
enabled,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const enablePlansRaw = allowed[ENV_ENABLE_PLANS];
|
|
178
|
+
if (enablePlansRaw != null) {
|
|
179
|
+
app.editionsEnabled = /^(true|1|yes)$/i.test(enablePlansRaw.trim());
|
|
180
|
+
}
|
|
181
|
+
out.app = app;
|
|
182
|
+
}
|
|
183
|
+
if (envPrefix !== '' && out.modules != null && typeof out.modules === 'object') {
|
|
184
|
+
out.modules = ManifestBuilder.prefixModuleTitles(out.modules, envPrefix);
|
|
185
|
+
}
|
|
186
|
+
return out;
|
|
187
|
+
}
|
|
188
|
+
static prefixModuleTitles(modules, prefix) {
|
|
189
|
+
const result = {};
|
|
190
|
+
for (const [key, value] of Object.entries(modules)) {
|
|
191
|
+
result[key] = ManifestBuilder.prefixTitlesInValue(value, prefix);
|
|
192
|
+
}
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
static prefixTitlesInValue(value, prefix) {
|
|
196
|
+
if (value == null)
|
|
197
|
+
return value;
|
|
198
|
+
if (Array.isArray(value)) {
|
|
199
|
+
return value.map((item) => ManifestBuilder.prefixTitlesInValue(item, prefix));
|
|
200
|
+
}
|
|
201
|
+
if (typeof value === 'object') {
|
|
202
|
+
const obj = value;
|
|
203
|
+
const out = {};
|
|
204
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
205
|
+
if (k === 'title' && typeof v === 'string' && !v.startsWith('[')) {
|
|
206
|
+
out[k] = prefix + v;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
out[k] = ManifestBuilder.prefixTitlesInValue(v, prefix);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
214
|
+
return value;
|
|
215
|
+
}
|
|
128
216
|
static interpolateString(str, allowed) {
|
|
129
217
|
const unknownPlaceholders = [];
|
|
130
218
|
const result = str.replace(PLACEHOLDER_REGEX, (_, varName) => {
|
|
@@ -155,6 +243,31 @@ class ManifestBuilder {
|
|
|
155
243
|
}
|
|
156
244
|
return value;
|
|
157
245
|
}
|
|
246
|
+
static logSummary(manifest, env) {
|
|
247
|
+
const usedEnv = ManifestBuilder.getAllowedEnv(env);
|
|
248
|
+
if (Object.keys(usedEnv).length > 0) {
|
|
249
|
+
process.stdout.write('[forge-app] Using FORGE_APP_* env overrides:\n');
|
|
250
|
+
for (const [key, value] of Object.entries(usedEnv)) {
|
|
251
|
+
process.stdout.write(` - ${key}=${value}\n`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
const envNameRaw = usedEnv[ENV_NAME];
|
|
255
|
+
if (envNameRaw != null && envNameRaw.trim() !== '') {
|
|
256
|
+
const prefix = `[${envNameRaw.trim().toUpperCase()}] `;
|
|
257
|
+
process.stdout.write(`[forge-app] Applied environment prefix "${prefix}" to app name and module titles.\n`);
|
|
258
|
+
}
|
|
259
|
+
const app = manifest.app;
|
|
260
|
+
const appName = typeof app.name === 'string' && app.name.trim() !== ''
|
|
261
|
+
? app.name
|
|
262
|
+
: '(not set)';
|
|
263
|
+
const appKey = app.connect && typeof app.connect.key === 'string'
|
|
264
|
+
? app.connect.key
|
|
265
|
+
: '(not set)';
|
|
266
|
+
const licensingEnabled = app.licensing && typeof app.licensing.enabled === 'boolean'
|
|
267
|
+
? app.licensing.enabled
|
|
268
|
+
: false;
|
|
269
|
+
process.stdout.write(`[forge-app] App info: name="${appName}", key="${appKey}", licensing.enabled=${licensingEnabled}\n`);
|
|
270
|
+
}
|
|
158
271
|
}
|
|
159
272
|
exports.default = ManifestBuilder;
|
|
160
273
|
//# sourceMappingURL=ManifestBuilder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManifestBuilder.js","sourceRoot":"","sources":["../../src/cli/ManifestBuilder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,mCAAuC;AACvC,2CAA6B;AAE7B,gDAAwB;
|
|
1
|
+
{"version":3,"file":"ManifestBuilder.js","sourceRoot":"","sources":["../../src/cli/ManifestBuilder.ts"],"names":[],"mappings":"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"}
|