create-flow-os 0.0.47-dev.1772043683 → 0.0.47-dev.1772043837

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.1772043683",
3
+ "version": "0.0.47-dev.1772043837",
4
4
  "license": "PolyForm-Shield-1.0.0",
5
5
  "type": "module",
6
6
  "dependencies": {
package/src/init/index.ts CHANGED
@@ -6,7 +6,7 @@ import * as readline from "readline";
6
6
  import { join, dirname } from "path";
7
7
  import { fileURLToPath } from "url";
8
8
  import { libsWithConfig, toShortName, toPkgName } from "./lib";
9
- import { initLib, fetchFlowPackageVersions } from "./scaffold";
9
+ import { initLib, fetchFlowPackageVersions, shouldUseWorkspace } from "./scaffold";
10
10
  import { bannerBox, withLoading, colors } from "./ui";
11
11
 
12
12
  const { V, V_LIGHT, Y, E, R, B } = colors;
@@ -43,7 +43,7 @@ if (!toInit.length) {
43
43
  // ───────────────────────────────────────────────────────────────────────────────
44
44
  const pkgNames = toInit.map(toPkgName);
45
45
  await withLoading(async (onStep) => {
46
- const versions = await fetchFlowPackageVersions(pkgNames);
46
+ const versions = shouldUseWorkspace(cwd) ? new Map<string, string>() : await fetchFlowPackageVersions(pkgNames);
47
47
  await initLib(toInit, cwd, versions, onStep);
48
48
  });
49
49
 
@@ -79,6 +79,29 @@ function isCreateFlowOsDev(): boolean {
79
79
  }
80
80
  }
81
81
 
82
+ /** Trova la root del repo flow-os salendo da cwd (contiene packages/client) */
83
+ export function findFlowOsRepoRoot(cwd: string): string | null {
84
+ let d = cwd;
85
+ while (true) {
86
+ const pkgClient = join(d, "packages", "client", "package.json");
87
+ if (existsSync(pkgClient)) {
88
+ try {
89
+ const pkg = JSON.parse(readFileSync(pkgClient, "utf-8")) as { name?: string };
90
+ if (pkg?.name === "@flow-os/client") return d;
91
+ } catch {}
92
+ }
93
+ const parent = dirname(d);
94
+ if (parent === d) break;
95
+ d = parent;
96
+ }
97
+ return null;
98
+ }
99
+
100
+ /** True se usare workspace:* (cwd dentro repo flow-os) */
101
+ export function shouldUseWorkspace(cwd: string): boolean {
102
+ return !!findFlowOsRepoRoot(cwd);
103
+ }
104
+
82
105
  /** Recupera versione di un pacchetto @flow-os/* dal registry npm (con cache 5 min) */
83
106
  async function fetchFlowPackageVersion(pkgName: string): Promise<string | undefined> {
84
107
  const tag = isCreateFlowOsDev() ? "dev" : "latest";
@@ -170,10 +193,17 @@ async function fetchConfigFromNpm(
170
193
  function resolveFlowDeps(
171
194
  deps: Record<string, string> | undefined,
172
195
  configDir: string,
173
- versionsFromNpm: Map<string, string>
196
+ versionsFromNpm: Map<string, string>,
197
+ useWorkspace: boolean
174
198
  ): Record<string, string> {
175
199
  if (!deps) return {};
176
200
  const resolved = { ...deps };
201
+ if (useWorkspace) {
202
+ for (const k of Object.keys(resolved)) {
203
+ if (k.startsWith("@flow-os/")) resolved[k] = "workspace:*";
204
+ }
205
+ return resolved;
206
+ }
177
207
  const ownerPkgPath = join(configDir, "..", "package.json");
178
208
  let ownerVersion: string | undefined;
179
209
  if (existsSync(ownerPkgPath)) {
@@ -205,7 +235,7 @@ function resolveFlowDeps(
205
235
  return resolved;
206
236
  }
207
237
 
208
- function mergePkg(configDir: string, cwd: string, versionsFromNpm: Map<string, string>): void {
238
+ function mergePkg(configDir: string, cwd: string, versionsFromNpm: Map<string, string>, useWorkspace: boolean): void {
209
239
  const configPkg = join(configDir, "package.json");
210
240
  if (!existsSync(configPkg)) return;
211
241
  const targetPath = join(cwd, "package.json");
@@ -215,9 +245,9 @@ function mergePkg(configDir: string, cwd: string, versionsFromNpm: Map<string, s
215
245
  : { ...config, name: basename(cwd) || "flow-app" };
216
246
  target.dependencies = { ...target.dependencies, ...config.dependencies };
217
247
  target.devDependencies = { ...target.devDependencies, ...config.devDependencies };
218
- for (const [k, v] of Object.entries(resolveFlowDeps(config.dependencies, configDir, versionsFromNpm)))
248
+ for (const [k, v] of Object.entries(resolveFlowDeps(config.dependencies, configDir, versionsFromNpm, useWorkspace)))
219
249
  target.dependencies[k] = v;
220
- for (const [k, v] of Object.entries(resolveFlowDeps(config.devDependencies, configDir, versionsFromNpm)))
250
+ for (const [k, v] of Object.entries(resolveFlowDeps(config.devDependencies, configDir, versionsFromNpm, useWorkspace)))
221
251
  target.devDependencies[k] = v;
222
252
  target.scripts = { ...target.scripts, ...config.scripts };
223
253
  writeFileSync(targetPath, JSON.stringify(target, null, 2));
@@ -251,12 +281,17 @@ async function collectAllTemplates(
251
281
  done: Set<string>,
252
282
  order: string[],
253
283
  versionsFromNpm: Map<string, string>,
254
- tmpDirs: string[]
284
+ tmpDirs: string[],
285
+ flowOsRepoRoot: string | null
255
286
  ): Promise<void> {
256
287
  for (const lib of libs) {
257
288
  const pkgName = toPkgName(lib);
258
289
  if (done.has(pkgName)) continue;
259
290
 
291
+ const shortName = toShortName(pkgName);
292
+ const localFromRepo = flowOsRepoRoot ? join(flowOsRepoRoot, "packages", shortName) : "";
293
+ const localConfigFromRepo = localFromRepo ? join(localFromRepo, "config") : "";
294
+
260
295
  let root: string;
261
296
  let configDir: string;
262
297
  try {
@@ -266,12 +301,22 @@ async function collectAllTemplates(
266
301
  root = "";
267
302
  configDir = "";
268
303
  }
304
+ const hasLocalFromRepo = !!localConfigFromRepo && existsSync(localConfigFromRepo);
269
305
  const hasLocal = existsSync(configDir);
270
306
 
271
307
  let pkgFiles: Map<string, string>;
272
308
  let configDirForPkg: string;
309
+ const useLocalRepo = hasLocalFromRepo && flowOsRepoRoot;
273
310
  const npmVer = versionsFromNpm.get(pkgName);
274
- if (npmVer) {
311
+
312
+ if (useLocalRepo) {
313
+ configDirForPkg = localConfigFromRepo;
314
+ pkgFiles = collectConfigFiles(configDirForPkg);
315
+ const subDeps = flowDepsFromPkg(join(configDirForPkg, ".."));
316
+ for (const sub of subDeps) {
317
+ await collectAllTemplates([toShortName(sub)], combined, done, order, versionsFromNpm, tmpDirs, flowOsRepoRoot);
318
+ }
319
+ } else if (npmVer) {
275
320
  const fetched = await fetchConfigFromNpm(pkgName, npmVer, tmpDirs);
276
321
  if (fetched) {
277
322
  pkgFiles = fetched.files;
@@ -279,13 +324,13 @@ async function collectAllTemplates(
279
324
  const subDeps = flowDepsFromPkg(join(configDirForPkg, ".."));
280
325
  await ensureVersions(versionsFromNpm, subDeps);
281
326
  for (const sub of subDeps) {
282
- await collectAllTemplates([toShortName(sub)], combined, done, order, versionsFromNpm, tmpDirs);
327
+ await collectAllTemplates([toShortName(sub)], combined, done, order, versionsFromNpm, tmpDirs, flowOsRepoRoot);
283
328
  }
284
329
  } else if (hasLocal) {
285
330
  const subDeps = flowDeps(root);
286
331
  await ensureVersions(versionsFromNpm, subDeps);
287
332
  for (const sub of subDeps) {
288
- await collectAllTemplates([toShortName(sub)], combined, done, order, versionsFromNpm, tmpDirs);
333
+ await collectAllTemplates([toShortName(sub)], combined, done, order, versionsFromNpm, tmpDirs, flowOsRepoRoot);
289
334
  }
290
335
  pkgFiles = collectConfigFiles(configDir);
291
336
  configDirForPkg = configDir;
@@ -296,7 +341,7 @@ async function collectAllTemplates(
296
341
  const subDeps = flowDeps(root);
297
342
  await ensureVersions(versionsFromNpm, subDeps);
298
343
  for (const sub of subDeps) {
299
- await collectAllTemplates([toShortName(sub)], combined, done, order, versionsFromNpm, tmpDirs);
344
+ await collectAllTemplates([toShortName(sub)], combined, done, order, versionsFromNpm, tmpDirs, flowOsRepoRoot);
300
345
  }
301
346
  pkgFiles = collectConfigFiles(configDir);
302
347
  configDirForPkg = configDir;
@@ -319,28 +364,33 @@ export async function initLib(
319
364
  onProgress?: (step: InitProgressStep) => void
320
365
  ): Promise<void> {
321
366
  const pkgNames = libs.map(toPkgName);
367
+ const flowOsRepoRoot = findFlowOsRepoRoot(cwd);
368
+ const useWorkspace = !!flowOsRepoRoot;
322
369
  const versions = versionsFromNpm ?? new Map<string, string>();
323
370
 
324
371
  onProgress?.("fetch");
325
- const fetched = await fetchFlowPackageVersions(pkgNames);
326
- for (const [k, v] of fetched) versions.set(k, v);
372
+ if (!useWorkspace) {
373
+ const fetched = await fetchFlowPackageVersions(pkgNames);
374
+ for (const [k, v] of fetched) versions.set(k, v);
375
+ }
327
376
 
328
377
  onProgress?.("templates");
329
378
  const combined = new Map<string, string>();
330
379
  const done = new Set<string>();
331
380
  const order: string[] = [];
332
381
  const tmpDirs: string[] = [];
333
- await collectAllTemplates(libs, combined, done, order, versions, tmpDirs);
382
+ await collectAllTemplates(libs, combined, done, order, versions, tmpDirs, flowOsRepoRoot);
334
383
 
335
384
  for (const configDir of order) {
336
- mergePkg(configDir, cwd, versions);
385
+ mergePkg(configDir, cwd, versions, useWorkspace);
337
386
  }
338
387
 
339
388
  onProgress?.("write");
340
389
  await writeMergedWithUser(combined, cwd, (path, conflicts) => resolveConflicts(conflicts, path));
341
390
 
342
391
  onProgress?.("install");
343
- const proc = Bun.spawn(["bun", "install"], { cwd, stdout: "inherit", stderr: "inherit" });
392
+ const installCwd = useWorkspace && flowOsRepoRoot ? flowOsRepoRoot : cwd;
393
+ const proc = Bun.spawn(["bun", "install"], { cwd: installCwd, stdout: "inherit", stderr: "inherit" });
344
394
  const exitCode = await proc.exited;
345
395
  if (exitCode !== 0) {
346
396
  throw new Error(`bun install exited with code ${exitCode}`);
package/src/init/ui.ts CHANGED
@@ -9,6 +9,7 @@ const E = "\x1b[91m";
9
9
  const R = "\x1b[0m";
10
10
  const B = "\x1b[1m";
11
11
  const DIM = "\x1b[2m";
12
+ const W = "\x1b[97m"; // bianco
12
13
 
13
14
  const FRAMES = "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏";
14
15