create-flow-os 0.0.47-dev.1772045775 → 0.0.47-dev.1772047467

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-flow-os",
3
- "version": "0.0.47-dev.1772045775",
3
+ "version": "0.0.47-dev.1772047467",
4
4
  "license": "PolyForm-Shield-1.0.0",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -13,7 +13,7 @@
13
13
  "create": "bun run src/create/index.ts",
14
14
  "dev": "flow-os dev",
15
15
  "build": "flow-os build",
16
- "start": "bun run server/start.ts"
16
+ "start": "bun ./node_modules/@flow-os/server/src/bin.ts"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@types/node": "^25.3.0",
package/src/init/merge.ts CHANGED
@@ -136,7 +136,19 @@ export function mergeCodeTemplates(a: string, b: string): string {
136
136
  return replaceObjectArg(base, extB, merged);
137
137
  }
138
138
 
139
- /** Merge per file con pattern fn({...}) - config(), defineConfig(), ecc. */
139
+ /** Estrae la riga "export default fn(...)" dal template */
140
+ function extractExportDefault(content: string): string | null {
141
+ const m = content.match(/export\s+default\s+\w+\s*\([^)]*\)\s*;?/);
142
+ return m ? m[0].trim() : null;
143
+ }
144
+
145
+ /** True se user ha già export default (anche su righe diverse, formattazione diversa) */
146
+ function userHasExportDefault(content: string): boolean {
147
+ const normalized = content.replace(/\s+/g, " ");
148
+ return /\bexport\s+default\b/.test(normalized);
149
+ }
150
+
151
+ /** Merge per file con pattern fn({...}) - config(), defineConfig(), ecc. Additivo: non sovrascrive. */
140
152
  export function mergeCodeObject(userContent: string, templateContent: string, _path: string): { merged: string; conflicts: Conflict[]; ext: Extracted | null } {
141
153
  const conflicts: Conflict[] = [];
142
154
  const userExt = extractObjectArg(userContent);
@@ -146,7 +158,14 @@ export function mergeCodeObject(userContent: string, templateContent: string, _p
146
158
  const templateObj = templateExt.obj;
147
159
  const mergedObj = deepMergeAdditive(userObj, templateObj, "", conflicts);
148
160
  const base = userContent || templateContent;
149
- const merged = replaceObjectArg(base, templateExt, mergedObj);
161
+ const extToReplace = userExt ?? templateExt;
162
+ let merged = replaceObjectArg(base, extToReplace, mergedObj);
163
+ const templateExport = extractExportDefault(templateContent);
164
+ if (templateExport && !userHasExportDefault(userContent)) {
165
+ const userTrimmed = merged.trimEnd();
166
+ const sep = userTrimmed.endsWith("\n") || !userTrimmed ? "" : "\n\n";
167
+ merged = userTrimmed + sep + templateExport;
168
+ }
150
169
  return { merged, conflicts, ext: templateExt };
151
170
  }
152
171
 
@@ -235,6 +235,24 @@ function resolveFlowDeps(
235
235
  return resolved;
236
236
  }
237
237
 
238
+ const PKG_KEY_ORDER = ["name", "version", "private", "type", "scripts", "dependencies", "devDependencies"];
239
+
240
+ function sortPkgKeys(pkg: Record<string, unknown>): Record<string, unknown> {
241
+ const ordered: Record<string, unknown> = {};
242
+ for (const k of PKG_KEY_ORDER) {
243
+ if (k in pkg) {
244
+ const v = pkg[k];
245
+ ordered[k] = k === "scripts" && v && typeof v === "object" && !Array.isArray(v)
246
+ ? Object.fromEntries(Object.entries(v as Record<string, string>).sort(([a], [b]) => a.localeCompare(b)))
247
+ : v;
248
+ }
249
+ }
250
+ for (const k of Object.keys(pkg).sort()) {
251
+ if (!(k in ordered)) ordered[k] = pkg[k];
252
+ }
253
+ return ordered;
254
+ }
255
+
238
256
  function mergePkg(configDir: string, cwd: string, versionsFromNpm: Map<string, string>, useWorkspace: boolean): void {
239
257
  const configPkg = join(configDir, "package.json");
240
258
  if (!existsSync(configPkg)) return;
@@ -251,7 +269,7 @@ function mergePkg(configDir: string, cwd: string, versionsFromNpm: Map<string, s
251
269
  for (const [k, v] of Object.entries(resolveFlowDeps(config.devDependencies, pkgRootDir, versionsFromNpm, useWorkspace)))
252
270
  target.devDependencies[k] = v;
253
271
  target.scripts = { ...target.scripts, ...config.scripts };
254
- writeFileSync(targetPath, JSON.stringify(target, null, 2));
272
+ writeFileSync(targetPath, JSON.stringify(sortPkgKeys(target), null, 2));
255
273
  }
256
274
 
257
275
  type FlowOsInit = { dependencies?: Record<string, string>; devDependencies?: Record<string, string>; scripts?: Record<string, string>; name?: string; version?: string; type?: string };
@@ -297,7 +315,7 @@ function mergeFlowOsInit(
297
315
  for (const [k, v] of Object.entries(resolveFlowDeps(init.devDependencies, packageRoot, versionsFromNpm, useWorkspace)))
298
316
  target.devDependencies[k] = v;
299
317
  target.scripts = { ...target.scripts, ...init.scripts };
300
- writeFileSync(targetPath, JSON.stringify(target, null, 2));
318
+ writeFileSync(targetPath, JSON.stringify(sortPkgKeys(target), null, 2));
301
319
  }
302
320
 
303
321
  /** Aggiunge dipendenza per pacchetti senza config (solo install) */
@@ -313,7 +331,7 @@ function addDependencyForPackage(
313
331
  target.dependencies = target.dependencies ?? {};
314
332
  const spec = useWorkspace ? "workspace:*" : (versionsFromNpm.get(pkgName) ? `^${versionsFromNpm.get(pkgName)}` : undefined);
315
333
  if (spec) target.dependencies[pkgName] = spec;
316
- writeFileSync(targetPath, JSON.stringify(target, null, 2));
334
+ writeFileSync(targetPath, JSON.stringify(sortPkgKeys(target), null, 2));
317
335
  }
318
336
 
319
337
  /** Assicura che versions abbia le versioni per pkgNames (fetch lazy) */
@@ -465,7 +483,7 @@ export async function initLib(
465
483
  if (!existsSync(targetPath)) {
466
484
  writeFileSync(
467
485
  targetPath,
468
- JSON.stringify({ name: basename(cwd) || "flow-app", version: "0.0.1", private: true, type: "module" }, null, 2)
486
+ JSON.stringify(sortPkgKeys({ name: basename(cwd) || "flow-app", version: "0.0.1", private: true, type: "module" }), null, 2)
469
487
  );
470
488
  }
471
489