rty-test-cli-package 1.0.2 → 1.0.4
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 +135 -19
- package/dist/cli/ManifestBuilder.js.map +1 -1
- package/dist/cli/forgeManifestSchema.d.ts +5075 -0
- package/dist/cli/forgeManifestSchema.js +142 -0
- package/dist/cli/forgeManifestSchema.js.map +1 -0
- package/package.json +2 -2
- package/src/cli/ManifestBuilder.ts +171 -19
- package/src/cli/forgeManifestSchema.ts +167 -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,30 +97,125 @@ 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
|
-
const
|
|
115
|
-
|
|
116
|
+
const lines = result.error.issues.map((issue) => {
|
|
117
|
+
const path = issue.path.length > 0 ? issue.path.join('.') : '(root)';
|
|
118
|
+
return `${path} - ${issue.message}`;
|
|
119
|
+
});
|
|
120
|
+
const message = lines.join('\n');
|
|
116
121
|
throw new Error(`Manifest validation failed:\n${message}`);
|
|
117
122
|
}
|
|
118
123
|
return result.data;
|
|
119
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Collects env variables that start with FORGE_APP_ for interpolation and overrides.
|
|
127
|
+
* Only includes non-empty values.
|
|
128
|
+
*/
|
|
120
129
|
static getAllowedEnv(env) {
|
|
121
130
|
return Object.entries(env).reduce((acc, [key, value]) => {
|
|
122
|
-
if (key.startsWith(FORGE_APP_PREFIX) &&
|
|
131
|
+
if (key.startsWith(FORGE_APP_PREFIX) &&
|
|
132
|
+
value !== undefined &&
|
|
133
|
+
value !== null &&
|
|
134
|
+
String(value).trim() !== '') {
|
|
123
135
|
acc[key] = String(value);
|
|
124
136
|
}
|
|
125
137
|
return acc;
|
|
126
138
|
}, {});
|
|
127
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Applies automatic overrides from FORGE_APP_* env when present:
|
|
142
|
+
* - FORGE_APP_APP_ID / FORGE_APP_ID → app.id
|
|
143
|
+
* - FORGE_APP_ENV → prefix "[ENVNAME] " to app name and module titles (uppercase)
|
|
144
|
+
* - FORGE_APP_LICENSE → app.licensing.enabled (true/1 → true)
|
|
145
|
+
* - FORGE_APP_ENABLE_PLANS → app.editionsEnabled (true/1 → true)
|
|
146
|
+
*/
|
|
147
|
+
static applyEnvOverrides(config, env) {
|
|
148
|
+
const allowed = ManifestBuilder.getAllowedEnv(env);
|
|
149
|
+
if (Object.keys(allowed).length === 0)
|
|
150
|
+
return config;
|
|
151
|
+
const out = { ...config };
|
|
152
|
+
const envNameRaw = allowed[ENV_NAME];
|
|
153
|
+
const envName = envNameRaw != null && envNameRaw.trim() !== '' ? envNameRaw.trim() : null;
|
|
154
|
+
const envPrefix = envName != null ? `[${envName.toUpperCase()}] ` : '';
|
|
155
|
+
if (out.app != null && typeof out.app === 'object') {
|
|
156
|
+
const app = out.app;
|
|
157
|
+
const appId = allowed[ENV_APP_ID] ?? allowed[ENV_APP_ID_ALT];
|
|
158
|
+
if (appId != null) {
|
|
159
|
+
app.id = appId;
|
|
160
|
+
}
|
|
161
|
+
if (envPrefix !== '') {
|
|
162
|
+
if (typeof app.name === 'string') {
|
|
163
|
+
if (!app.name.startsWith('['))
|
|
164
|
+
app.name = envPrefix + app.name;
|
|
165
|
+
}
|
|
166
|
+
else if (app.name == null) {
|
|
167
|
+
app.name = envPrefix + 'App';
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const licenseRaw = allowed[ENV_LICENSE];
|
|
171
|
+
if (licenseRaw != null) {
|
|
172
|
+
const enabled = /^(true|1|yes)$/i.test(licenseRaw.trim());
|
|
173
|
+
app.licensing = {
|
|
174
|
+
...(typeof app.licensing === 'object' && app.licensing != null
|
|
175
|
+
? app.licensing
|
|
176
|
+
: {}),
|
|
177
|
+
enabled,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
const enablePlansRaw = allowed[ENV_ENABLE_PLANS];
|
|
181
|
+
if (enablePlansRaw != null) {
|
|
182
|
+
app.editionsEnabled = /^(true|1|yes)$/i.test(enablePlansRaw.trim());
|
|
183
|
+
}
|
|
184
|
+
out.app = app;
|
|
185
|
+
}
|
|
186
|
+
if (envPrefix !== '' && out.modules != null && typeof out.modules === 'object') {
|
|
187
|
+
out.modules = ManifestBuilder.prefixModuleTitles(out.modules, envPrefix);
|
|
188
|
+
}
|
|
189
|
+
return out;
|
|
190
|
+
}
|
|
191
|
+
static prefixModuleTitles(modules, prefix) {
|
|
192
|
+
const result = {};
|
|
193
|
+
for (const [key, value] of Object.entries(modules)) {
|
|
194
|
+
result[key] = ManifestBuilder.prefixTitlesInValue(value, prefix);
|
|
195
|
+
}
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
static prefixTitlesInValue(value, prefix) {
|
|
199
|
+
if (value == null)
|
|
200
|
+
return value;
|
|
201
|
+
if (Array.isArray(value)) {
|
|
202
|
+
return value.map((item) => ManifestBuilder.prefixTitlesInValue(item, prefix));
|
|
203
|
+
}
|
|
204
|
+
if (typeof value === 'object') {
|
|
205
|
+
const obj = value;
|
|
206
|
+
const out = {};
|
|
207
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
208
|
+
if (k === 'title' && typeof v === 'string' && !v.startsWith('[')) {
|
|
209
|
+
out[k] = prefix + v;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
out[k] = ManifestBuilder.prefixTitlesInValue(v, prefix);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return out;
|
|
216
|
+
}
|
|
217
|
+
return value;
|
|
218
|
+
}
|
|
128
219
|
static interpolateString(str, allowed) {
|
|
129
220
|
const unknownPlaceholders = [];
|
|
130
221
|
const result = str.replace(PLACEHOLDER_REGEX, (_, varName) => {
|
|
@@ -155,6 +246,31 @@ class ManifestBuilder {
|
|
|
155
246
|
}
|
|
156
247
|
return value;
|
|
157
248
|
}
|
|
249
|
+
static logSummary(manifest, env) {
|
|
250
|
+
const usedEnv = ManifestBuilder.getAllowedEnv(env);
|
|
251
|
+
if (Object.keys(usedEnv).length > 0) {
|
|
252
|
+
process.stdout.write('[forge-app] Using FORGE_APP_* env overrides:\n');
|
|
253
|
+
for (const [key, value] of Object.entries(usedEnv)) {
|
|
254
|
+
process.stdout.write(` - ${key}=${value}\n`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const envNameRaw = usedEnv[ENV_NAME];
|
|
258
|
+
if (envNameRaw != null && envNameRaw.trim() !== '') {
|
|
259
|
+
const prefix = `[${envNameRaw.trim().toUpperCase()}] `;
|
|
260
|
+
process.stdout.write(`[forge-app] Applied environment prefix "${prefix}" to app name and module titles.\n`);
|
|
261
|
+
}
|
|
262
|
+
const app = manifest.app;
|
|
263
|
+
const appName = typeof app.name === 'string' && app.name.trim() !== ''
|
|
264
|
+
? app.name
|
|
265
|
+
: '(not set)';
|
|
266
|
+
const appKey = app.connect && typeof app.connect.key === 'string'
|
|
267
|
+
? app.connect.key
|
|
268
|
+
: '(not set)';
|
|
269
|
+
const licensingEnabled = app.licensing && typeof app.licensing.enabled === 'boolean'
|
|
270
|
+
? app.licensing.enabled
|
|
271
|
+
: false;
|
|
272
|
+
process.stdout.write(`[forge-app] App info: name="${appName}", key="${appKey}", licensing.enabled=${licensingEnabled}\n`);
|
|
273
|
+
}
|
|
158
274
|
}
|
|
159
275
|
exports.default = ManifestBuilder;
|
|
160
276
|
//# 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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"}
|