create-flow-os 0.0.47-dev.1772045775 → 0.0.47-dev.1772047685
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 +2 -2
- package/src/init/merge.ts +21 -2
- package/src/init/scaffold.ts +22 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-flow-os",
|
|
3
|
-
"version": "0.0.47-dev.
|
|
3
|
+
"version": "0.0.47-dev.1772047685",
|
|
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
|
|
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
|
-
/**
|
|
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
|
|
161
|
+
const extToReplace = userExt ?? templateExt;
|
|
162
|
+
let merged = replaceObjectArg(base, extToReplace, mergedObj);
|
|
163
|
+
const templateExport = extractExportDefault(templateContent);
|
|
164
|
+
if (templateExport && !userHasExportDefault(userContent) && !userHasExportDefault(merged)) {
|
|
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
|
|
package/src/init/scaffold.ts
CHANGED
|
@@ -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
|
|