@common-stack/common-tools 8.5.1-alpha.1 → 8.5.1-alpha.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.
@@ -11,16 +11,18 @@ import { createGenerateResolutionsCommand } from '../lib/cli/generateResolutions
11
11
  import { createUpdateDependenciesCommand } from '../lib/cli/updateDependencies.js';
12
12
  import { createSortPackageJsonCommand } from '../lib/cli/sortPackageJson.js';
13
13
  import { createUpdateDependencyVersionCommand } from '../lib/cli/updateDependencyVersion.js';
14
+ import { createPrepWebConfigCommand } from '../lib/cli/prepWebConfig.js';
14
15
 
15
16
  const program = new Command();
16
17
 
17
- program.name('common-tools').description('Common CLI tools for monorepo management').version('8.2.4-alpha.5');
18
+ program.name('cdecodecli').description('Common CLI tools for monorepo management').version('8.2.4-alpha.5');
18
19
 
19
20
  // Add all subcommands
20
21
  program.addCommand(createGenerateResolutionsCommand());
21
22
  program.addCommand(createUpdateDependenciesCommand());
22
23
  program.addCommand(createSortPackageJsonCommand());
23
24
  program.addCommand(createUpdateDependencyVersionCommand());
25
+ program.addCommand(createPrepWebConfigCommand());
24
26
 
25
27
  // Parse and execute
26
28
  program.parse();
@@ -0,0 +1,23 @@
1
+ /**
2
+ * CLI command: prepWebConfig
3
+ *
4
+ * Generates the merged configuration (cde-webconfig.json) for a frontend server
5
+ * by resolving default-config.json + project config.json + environment variables.
6
+ *
7
+ * Usage:
8
+ * cdecodecli prepWebConfig [options]
9
+ *
10
+ * Options:
11
+ * --config Path to project config.json (default: ./config.json)
12
+ * --out Output directory for the generated config (default: ./app)
13
+ * --env-file Path to a .env file to load (falls back to ENV_FILE env var)
14
+ */
15
+ import { Command } from 'commander';
16
+ export declare function createPrepWebConfigCommand(): Command;
17
+ export interface PrepWebConfigOptions {
18
+ configPath: string;
19
+ outputDir: string;
20
+ envFile?: string;
21
+ }
22
+ export declare function runPrepWebConfig(options: PrepWebConfigOptions): Promise<void>;
23
+ //# sourceMappingURL=prepWebConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepWebConfig.d.ts","sourceRoot":"","sources":["../../src/cli/prepWebConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgJpC,wBAAgB,0BAA0B,IAAI,OAAO,CAiBpD;AAED,MAAM,WAAW,oBAAoB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CnF"}
@@ -0,0 +1,212 @@
1
+ import { Command } from 'commander';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { setupConfig, updateFromConfig } from '@common-stack/rollup-vite-utils';
5
+
6
+ /**
7
+ * CLI command: prepWebConfig
8
+ *
9
+ * Generates the merged configuration (cde-webconfig.json) for a frontend server
10
+ * by resolving default-config.json + project config.json + environment variables.
11
+ *
12
+ * Usage:
13
+ * cdecodecli prepWebConfig [options]
14
+ *
15
+ * Options:
16
+ * --config Path to project config.json (default: ./config.json)
17
+ * --out Output directory for the generated config (default: ./app)
18
+ * --env-file Path to a .env file to load (falls back to ENV_FILE env var)
19
+ */
20
+ // ---------------------------------------------------------------------------
21
+ // Value helpers
22
+ // ---------------------------------------------------------------------------
23
+ function coerceType(value) {
24
+ if (value === undefined)
25
+ return undefined;
26
+ if (value === 'true')
27
+ return true;
28
+ if (value === 'false')
29
+ return false;
30
+ if (value === 'null')
31
+ return null;
32
+ if (value === 'undefined')
33
+ return undefined;
34
+ if (/^-?\d+(\.\d+)?$/.test(value)) {
35
+ return parseFloat(value);
36
+ }
37
+ return value;
38
+ }
39
+ /**
40
+ * Resolves a single $ expression segment (e.g. $.env.CLIENT_URL.url.port)
41
+ */
42
+ function resolveSegment(config, expr) {
43
+ if (typeof expr !== 'string' || !expr.startsWith('$.')) {
44
+ const literal = expr.replace(/^['"]|['"]$/g, '');
45
+ return { value: coerceType(literal), resolved: true };
46
+ }
47
+ const parts = expr.split('.').slice(1); // Remove leading '$.'
48
+ if (parts[0] === 'env') {
49
+ const envVar = parts[1];
50
+ const envValue = process.env[envVar];
51
+ if (!envValue && envValue !== '') {
52
+ return { value: undefined, resolved: false };
53
+ }
54
+ if (parts[2] === 'url') {
55
+ try {
56
+ const url = new URL(envValue);
57
+ if (parts[3] === 'pathname')
58
+ return { value: url.pathname, resolved: true };
59
+ if (parts[3] === 'port') {
60
+ if (!url.port)
61
+ return { value: undefined, resolved: false };
62
+ return { value: parseInt(url.port, 10), resolved: true };
63
+ }
64
+ if (parts[3] === 'hostname')
65
+ return { value: url.hostname, resolved: true };
66
+ return { value: envValue, resolved: true };
67
+ }
68
+ catch {
69
+ console.warn(`Invalid URL in ${envVar}: ${envValue}`);
70
+ return { value: undefined, resolved: false };
71
+ }
72
+ }
73
+ return { value: coerceType(envValue), resolved: true };
74
+ }
75
+ // Regular config path resolution
76
+ const result = parts.reduce((o, p) => {
77
+ if (o === undefined || o === null || typeof o !== 'object')
78
+ return undefined;
79
+ return o[p];
80
+ }, config);
81
+ return { value: result, resolved: result !== undefined };
82
+ }
83
+ /**
84
+ * Resolves path expressions with chained '|' fallbacks.
85
+ * E.g. $.env.CLIENT_URL.url.port|$.env.LOCAL_CLIENT_URL.url.port|'3000'
86
+ */
87
+ function resolvePath(config, pathExpr) {
88
+ if (typeof pathExpr !== 'string')
89
+ return pathExpr;
90
+ const segments = pathExpr.split('|');
91
+ for (let i = 0; i < segments.length; i++) {
92
+ const segment = segments[i].trim();
93
+ const { value, resolved } = resolveSegment(config, segment);
94
+ if (resolved && value !== undefined)
95
+ return value;
96
+ if (i === segments.length - 1) {
97
+ if (!segment.startsWith('$.')) {
98
+ return coerceType(segment.replace(/^['"]|['"]$/g, ''));
99
+ }
100
+ console.warn(`Warning: Could not resolve any fallback in expression: ${pathExpr}`);
101
+ return undefined;
102
+ }
103
+ }
104
+ return pathExpr;
105
+ }
106
+ /**
107
+ * Resolves all buildConfig values that use $.env expressions
108
+ */
109
+ function resolveBuildConfig(config) {
110
+ const buildConfig = config.buildConfig;
111
+ if (!buildConfig)
112
+ return config;
113
+ const resolvedBuildConfig = {};
114
+ for (const [key, value] of Object.entries(buildConfig)) {
115
+ resolvedBuildConfig[key] = resolvePath(config, value);
116
+ }
117
+ return { ...config, buildConfig: resolvedBuildConfig };
118
+ }
119
+ // ---------------------------------------------------------------------------
120
+ // Env loader
121
+ // ---------------------------------------------------------------------------
122
+ function loadEnv(envFilePath) {
123
+ let dotenv;
124
+ try {
125
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
126
+ dotenv = require('dotenv');
127
+ }
128
+ catch {
129
+ // dotenv not available – env must be set externally
130
+ }
131
+ if (!dotenv)
132
+ return;
133
+ if (envFilePath) {
134
+ const resolved = path.resolve(envFilePath);
135
+ if (fs.existsSync(resolved)) {
136
+ dotenv.config({ path: resolved });
137
+ console.log(`Loaded environment from ${resolved}`);
138
+ }
139
+ else {
140
+ console.warn(`Warning: Specified env file not found at ${resolved}`);
141
+ }
142
+ return;
143
+ }
144
+ // Fallback: try the conventional dev.env path
145
+ const defaultEnvPath = path.resolve('../../config/development/dev.env');
146
+ if (fs.existsSync(defaultEnvPath)) {
147
+ dotenv.config({ path: defaultEnvPath });
148
+ console.log(`Loaded environment from ${defaultEnvPath}`);
149
+ }
150
+ }
151
+ // ---------------------------------------------------------------------------
152
+ // Command factory
153
+ // ---------------------------------------------------------------------------
154
+ function createPrepWebConfigCommand() {
155
+ const command = new Command('prepWebConfig')
156
+ .description('Generate merged frontend configuration (cde-webconfig.json) by resolving config.json + environment variables')
157
+ .option('-c, --config <path>', 'Path to project config.json', './config.json')
158
+ .option('-o, --out <dir>', 'Output directory for the generated config', './app')
159
+ .option('-e, --env-file <path>', 'Path to .env file to load (defaults to ENV_FILE env var)')
160
+ .action(async (options) => {
161
+ await runPrepWebConfig({
162
+ configPath: options.config,
163
+ outputDir: options.out,
164
+ envFile: options.envFile || process.env.ENV_FILE,
165
+ });
166
+ });
167
+ return command;
168
+ }
169
+ async function runPrepWebConfig(options) {
170
+ const projectConfigPath = path.resolve(options.configPath);
171
+ const outputDir = path.resolve(options.outputDir);
172
+ // 1. Load environment
173
+ loadEnv(options.envFile);
174
+ // 2. Verify config exists
175
+ if (!fs.existsSync(projectConfigPath)) {
176
+ console.error(`Error: Config file not found at ${projectConfigPath}`);
177
+ process.exit(1);
178
+ }
179
+ // 3. Merge and resolve config
180
+ const mergedConfig = setupConfig(projectConfigPath);
181
+ const resolvedConfig = resolveBuildConfig(mergedConfig);
182
+ // 4. Ensure output directory exists
183
+ if (!fs.existsSync(outputDir)) {
184
+ fs.mkdirSync(outputDir, { recursive: true });
185
+ console.log(`Created directory: ${outputDir}`);
186
+ }
187
+ // 5. Write the merged configuration
188
+ const finalConfigPath = path.resolve(outputDir, 'cde-webconfig.json');
189
+ fs.writeFileSync(finalConfigPath, JSON.stringify(resolvedConfig, null, 2));
190
+ console.log(`Merged configuration written to ${finalConfigPath}`);
191
+ // 6. Add output directory to .gitignore if not already present
192
+ const outDirName = path.basename(outputDir);
193
+ const gitignorePath = path.resolve('.gitignore');
194
+ let gitignoreContent = '';
195
+ if (fs.existsSync(gitignorePath)) {
196
+ gitignoreContent = fs.readFileSync(gitignorePath, 'utf8');
197
+ }
198
+ else {
199
+ fs.writeFileSync(gitignorePath, '');
200
+ console.log('Created .gitignore file');
201
+ }
202
+ if (!gitignoreContent.includes(outDirName)) {
203
+ fs.appendFileSync(gitignorePath, `\n${outDirName}\n`);
204
+ console.log(`Added "${outDirName}" to .gitignore`);
205
+ }
206
+ // 7. Update package.json from config (modules, devModules, etc.)
207
+ await updateFromConfig(finalConfigPath);
208
+ console.log('Web config preparation complete.');
209
+ }
210
+
211
+ export { createPrepWebConfigCommand, runPrepWebConfig };
212
+ //# sourceMappingURL=prepWebConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepWebConfig.js","sources":["../../src/cli/prepWebConfig.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -372,5 +372,28 @@ declare function runUpdateDependencyVersion(rootDir: string, options: UpdateDepe
372
372
  */
373
373
  declare function runUpdateDependencyVersionCLI(args?: string[]): Promise<void>;
374
374
 
375
- export { ADD_END_NEWLINE, DEFAULT_COMMON_STACK_PACKAGES, DEFAULT_CONFIG, JSON_SPACING, buildPackageMap, createGenerateResolutionsCommand, createSortPackageJsonCommand, createUpdateDependenciesCommand, createUpdateDependencyVersionCommand, execCommand, fileExists, fileExistsSync, findConfigFile, findPackageDirectories, findPackageJsonFiles, getTargetPathsForPackage, getWorkspacePackages, loadConfig, loadConfigWithDefaults, mergeDependencies, readCDecodeConfigFile, readPackageJson, readPackageJsonSync, resolveConfigPaths, runGenerateResolutions, runGenerateResolutionsCLI, runNcuUpdate, runSortPackageJson, runSortPackageJsonCLI, runUpdateDependenciesCLI, runUpdateDependenciesCLIAction, runUpdateDependenciesWorkflow, runUpdateDependencyVersion, runUpdateDependencyVersionCLI, runYarnInstall, sortAllPackageJsonFiles, sortObjectKeys, sortPackageJsonFile, updateDependencies, updateDependencyVersions, writePackageJson, writePackageJsonSync };
376
- export type { CDecodeConfig, CodegenConfig, DependencyUpdateConfig, DeployVersionUpdateConfig, GenerateResolutionsOptions, PackageJson, ProjectPathsConfig, ServiceSchemasConfig, SortPackageJsonConfig, SortPackageJsonOptions, UpdateDependenciesConfig, UpdateDependenciesOptions, UpdateDependencyVersionConfig, UpdateDependencyVersionOptions };
375
+ /**
376
+ * CLI command: prepWebConfig
377
+ *
378
+ * Generates the merged configuration (cde-webconfig.json) for a frontend server
379
+ * by resolving default-config.json + project config.json + environment variables.
380
+ *
381
+ * Usage:
382
+ * cdecodecli prepWebConfig [options]
383
+ *
384
+ * Options:
385
+ * --config Path to project config.json (default: ./config.json)
386
+ * --out Output directory for the generated config (default: ./app)
387
+ * --env-file Path to a .env file to load (falls back to ENV_FILE env var)
388
+ */
389
+
390
+ declare function createPrepWebConfigCommand(): Command;
391
+ interface PrepWebConfigOptions {
392
+ configPath: string;
393
+ outputDir: string;
394
+ envFile?: string;
395
+ }
396
+ declare function runPrepWebConfig(options: PrepWebConfigOptions): Promise<void>;
397
+
398
+ export { ADD_END_NEWLINE, DEFAULT_COMMON_STACK_PACKAGES, DEFAULT_CONFIG, JSON_SPACING, buildPackageMap, createGenerateResolutionsCommand, createPrepWebConfigCommand, createSortPackageJsonCommand, createUpdateDependenciesCommand, createUpdateDependencyVersionCommand, execCommand, fileExists, fileExistsSync, findConfigFile, findPackageDirectories, findPackageJsonFiles, getTargetPathsForPackage, getWorkspacePackages, loadConfig, loadConfigWithDefaults, mergeDependencies, readCDecodeConfigFile, readPackageJson, readPackageJsonSync, resolveConfigPaths, runGenerateResolutions, runGenerateResolutionsCLI, runNcuUpdate, runPrepWebConfig, runSortPackageJson, runSortPackageJsonCLI, runUpdateDependenciesCLI, runUpdateDependenciesCLIAction, runUpdateDependenciesWorkflow, runUpdateDependencyVersion, runUpdateDependencyVersionCLI, runYarnInstall, sortAllPackageJsonFiles, sortObjectKeys, sortPackageJsonFile, updateDependencies, updateDependencyVersions, writePackageJson, writePackageJsonSync };
399
+ export type { CDecodeConfig, CodegenConfig, DependencyUpdateConfig, DeployVersionUpdateConfig, GenerateResolutionsOptions, PackageJson, PrepWebConfigOptions, ProjectPathsConfig, ServiceSchemasConfig, SortPackageJsonConfig, SortPackageJsonOptions, UpdateDependenciesConfig, UpdateDependenciesOptions, UpdateDependencyVersionConfig, UpdateDependencyVersionOptions };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACH,yBAAyB,EACzB,oCAAoC,EACpC,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,IAAI,2BAA2B,EAChD,2BAA2B,EAC3B,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,IAAI,mBAAmB,GAC5C,MAAM,iCAAiC,CAAC;AAGzC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACH,yBAAyB,EACzB,oCAAoC,EACpC,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,IAAI,2BAA2B,EAChD,2BAA2B,EAC3B,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,IAAI,mBAAmB,GAC5C,MAAM,iCAAiC,CAAC;AAGzC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC"}
package/lib/index.js CHANGED
@@ -8,4 +8,5 @@ export { createGenerateResolutionsCommand, runGenerateResolutions, runGenerateRe
8
8
  export { createUpdateDependenciesCommand, runUpdateDependenciesCLI, runUpdateDependenciesCLIAction } from './cli/updateDependencies.js';
9
9
  export { createSortPackageJsonCommand, runSortPackageJson, runSortPackageJsonCLI, sortAllPackageJsonFiles, sortPackageJsonFile } from './cli/sortPackageJson.js';
10
10
  export { createUpdateDependencyVersionCommand, runUpdateDependencyVersion, runUpdateDependencyVersionCLI, updateDependencyVersions } from './cli/updateDependencyVersion.js';
11
+ export { createPrepWebConfigCommand, runPrepWebConfig } from './cli/prepWebConfig.js';
11
12
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@common-stack/common-tools",
3
- "version": "8.5.1-alpha.1",
3
+ "version": "8.5.1-alpha.3",
4
4
  "description": "Common CLI tools for monorepo management - resolution generation, dependency updates, and package.json utilities",
5
5
  "homepage": "https://github.com/cdmbase/fullstack-pro#readme",
6
6
  "bugs": {
@@ -17,6 +17,7 @@
17
17
  "module": "lib/index.js",
18
18
  "typings": "lib/index.d.ts",
19
19
  "bin": {
20
+ "cdecodecli": "bin/common-tools.js",
20
21
  "common-tools": "bin/common-tools.js",
21
22
  "generate-resolutions": "bin/generate-resolutions.js",
22
23
  "sort-package-json": "bin/sort-package-json.js",
@@ -38,8 +39,9 @@
38
39
  "watch": "npm run build:lib:watch"
39
40
  },
40
41
  "dependencies": {
41
- "@common-stack/rollup-vite-utils": "8.5.1-alpha.1",
42
+ "@common-stack/rollup-vite-utils": "8.5.1-alpha.3",
42
43
  "commander": "^12.1.0",
44
+ "dotenv": "^16.4.0",
43
45
  "glob": "^11.0.0",
44
46
  "sort-package-json": "^2.10.0"
45
47
  },
@@ -62,7 +64,7 @@
62
64
  "publishConfig": {
63
65
  "access": "public"
64
66
  },
65
- "gitHead": "2e05dc0e2a7a61f08500919ebaa3b543387827f0",
67
+ "gitHead": "3966f9ac59348ef1b9e78d40e0c3125f0a3d8a51",
66
68
  "typescript": {
67
69
  "definition": "lib/index.d.ts"
68
70
  }