@microtronics/studio-cli 0.53.0 → 0.54.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.
@@ -1812,6 +1812,7 @@ export declare namespace DefaultFiles {
1812
1812
  bloPath: string;
1813
1813
  reportTemplate: string;
1814
1814
  definesTs: string;
1815
+ definesAppTs: string;
1815
1816
  };
1816
1817
  dlo: {
1817
1818
  path: string;
@@ -2252,6 +2253,8 @@ export declare namespace Globals {
2252
2253
  definesWithSource: {
2253
2254
  [key: string]: DefineEntry;
2254
2255
  };
2256
+ /** For library projects: defaults-only config without app.ini overrides */
2257
+ defaultsOnly?: ResolvedConfig;
2255
2258
  }
2256
2259
  /**
2257
2260
  * Read all ini files from the project directory and its dependencies.
@@ -2275,7 +2278,7 @@ export declare namespace Globals {
2275
2278
  * @param fs - filesystem abstraction
2276
2279
  * @param resolvedConfig - the resolved config from Globals.read()
2277
2280
  */
2278
- export function exportDefinesTs(cwd: URI, fs: LocalFS, resolvedConfig: ResolvedConfig): Promise<void>;
2281
+ export function exportDefinesTs(cwd: URI, fs: LocalFS, resolvedConfig: ResolvedConfig, outputPath?: string): Promise<void>;
2279
2282
  /**
2280
2283
  * Replace {{KEY}} template tokens in a string with their resolved values.
2281
2284
  *
@@ -73,7 +73,8 @@ var DefaultFiles;
73
73
  dfilesProperties: `${deployDirectoryName}dfiles/properties.json`,
74
74
  bloPath: `${deployDirectoryName}blo`,
75
75
  reportTemplate: `${deployDirectoryName}/${DefaultFiles.fileNames.reportTemplate}`,
76
- definesTs: `${deployDirectoryName}defines.ts`
76
+ definesTs: `${deployDirectoryName}defines.ts`,
77
+ definesAppTs: `${deployDirectoryName}defines.app.ts`
77
78
  },
78
79
  dlo: {
79
80
  path: dloDirectoryName,
package/out/globals.js CHANGED
@@ -92,10 +92,12 @@ var Globals;
92
92
  const defaultsIni = vscode_uri_1.Utils.joinPath(cwd, defaultFiles_1.DefaultFiles.filePaths.defaultsIni);
93
93
  await mergeIniFile(fs, defaultsIni, allDefines, sections, definesWithSource);
94
94
  }
95
- // app.ini is always loaded
95
+ // Snapshot defaults-only state before app.ini merge (for library dual-defines)
96
+ const defaultsOnly = snapshotDefaultsOnly(manifest, allDefines, sections, definesWithSource);
97
+ // app.ini is always loaded (provides local dev overrides for libraries, main config for apps)
96
98
  const appIni = vscode_uri_1.Utils.joinPath(cwd, defaultFiles_1.DefaultFiles.filePaths.appIni);
97
99
  await mergeIniFile(fs, appIni, allDefines, sections, definesWithSource);
98
- return { flat: allDefines, sections, definesWithSource };
100
+ return { flat: allDefines, sections, definesWithSource, defaultsOnly };
99
101
  }
100
102
  Globals.read = read;
101
103
  /**
@@ -106,7 +108,7 @@ var Globals;
106
108
  * @param fs - filesystem abstraction
107
109
  * @param resolvedConfig - the resolved config from Globals.read()
108
110
  */
109
- async function exportDefinesTs(cwd, fs, resolvedConfig) {
111
+ async function exportDefinesTs(cwd, fs, resolvedConfig, outputPath) {
110
112
  const entries = Object.entries(resolvedConfig.flat);
111
113
  // Build the StudioDefines interface members
112
114
  const interfaceLines = [];
@@ -149,7 +151,7 @@ var Globals;
149
151
  lines.push('');
150
152
  lines.push('export {};');
151
153
  lines.push('');
152
- const definesPath = vscode_uri_1.Utils.joinPath(cwd, defaultFiles_1.DefaultFiles.filePaths.dist.definesTs);
154
+ const definesPath = vscode_uri_1.Utils.joinPath(cwd, outputPath ?? defaultFiles_1.DefaultFiles.filePaths.dist.definesTs);
153
155
  await fs.writeFile(definesPath, lines.join('\n'));
154
156
  }
155
157
  Globals.exportDefinesTs = exportDefinesTs;
@@ -174,6 +176,21 @@ var Globals;
174
176
  }
175
177
  Globals.replaceDefineTemplates = replaceDefineTemplates;
176
178
  })(Globals || (exports.Globals = Globals = {}));
179
+ /**
180
+ * For library projects, snapshot the current defines state (before app.ini merge)
181
+ * so the published library only contains defaults.ini values.
182
+ * Returns undefined for non-library projects.
183
+ */
184
+ function snapshotDefaultsOnly(manifest, allDefines, sections, definesWithSource) {
185
+ if (!manifest_1.Manifest.isLibrary(manifest)) {
186
+ return undefined;
187
+ }
188
+ return {
189
+ flat: { ...allDefines },
190
+ sections: structuredClone(sections),
191
+ definesWithSource: { ...definesWithSource }
192
+ };
193
+ }
177
194
  /**
178
195
  * Classify a trimmed ini-file line into one of the known kinds.
179
196
  * Moves boolean-operator branching out of the main loop to reduce cognitive complexity.
@@ -46,7 +46,7 @@ const defaultIgnore = [
46
46
  '**/.vscode-test/**',
47
47
  '**/.vscode-test-web/**'
48
48
  ];
49
- defaultIgnore.push(...['**/.studio/**', '**/node_modules/**', STUDIO_IGNORE_FILE]);
49
+ defaultIgnore.push(...['**/.studio/**', '**/node_modules/**', STUDIO_IGNORE_FILE, 'dist/defines.app.ts']);
50
50
  const MINIMATCH_OPTIONS = { dot: true };
51
51
  var Library;
52
52
  (function (Library) {
@@ -46,8 +46,7 @@ var Package;
46
46
  // Generate dist/defines.ts before POV/BLO builds
47
47
  try {
48
48
  const resolvedConfig = await globals_1.Globals.read(cwd, fs, logger);
49
- await globals_1.Globals.exportDefinesTs(cwd, fs, resolvedConfig);
50
- logger.log('Generated', defaultFiles_1.DefaultFiles.filePaths.dist.definesTs);
49
+ await exportDefinesForProject(cwd, fs, logger, resolvedConfig);
51
50
  }
52
51
  catch (e) {
53
52
  logger.warn('Could not generate defines.ts:', e);
@@ -367,6 +366,26 @@ async function preBuild(cwd, fs, logger, env, apiToken, selectedParts) {
367
366
  await dde_1.DDE.fetchPreviousHistoryJson(cwd, fs, logger, env, apiToken);
368
367
  }
369
368
  }
369
+ /**
370
+ * Export defines.ts file(s) based on project type.
371
+ * Library projects get two files: dist/defines.ts (defaults only) and dist/defines.app.ts (full merged).
372
+ * App/addon/analytics projects get a single dist/defines.ts with all merged values.
373
+ */
374
+ async function exportDefinesForProject(cwd, fs, logger, resolvedConfig) {
375
+ if (resolvedConfig.defaultsOnly) {
376
+ // Library: dist/defines.ts = defaults only (for publishing)
377
+ await globals_1.Globals.exportDefinesTs(cwd, fs, resolvedConfig.defaultsOnly);
378
+ logger.log('Generated', defaultFiles_1.DefaultFiles.filePaths.dist.definesTs, '(defaults only)');
379
+ // Library: dist/defines.app.ts = full merged (for local dev)
380
+ await globals_1.Globals.exportDefinesTs(cwd, fs, resolvedConfig, defaultFiles_1.DefaultFiles.filePaths.dist.definesAppTs);
381
+ logger.log('Generated', defaultFiles_1.DefaultFiles.filePaths.dist.definesAppTs, '(with app.ini overrides)');
382
+ }
383
+ else {
384
+ // App/addon/analytics: single merged file
385
+ await globals_1.Globals.exportDefinesTs(cwd, fs, resolvedConfig);
386
+ logger.log('Generated', defaultFiles_1.DefaultFiles.filePaths.dist.definesTs);
387
+ }
388
+ }
370
389
  /**
371
390
  * Generates all needed files out of the dde declaration
372
391
  * @param cwd
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microtronics/studio-cli",
3
- "version": "0.53.0",
3
+ "version": "0.54.0",
4
4
  "description": "Microtronics Studio CLI Tool",
5
5
  "main": "./out/api.js",
6
6
  "typings": "./dist/studio-cli.d.ts",