create-flow-os 0.0.23 → 0.0.24

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,10 +1,10 @@
1
1
  {
2
2
  "name": "create-flow-os",
3
- "version": "0.0.23",
3
+ "version": "0.0.24",
4
4
  "license": "PolyForm-Shield-1.0.0",
5
5
  "type": "module",
6
6
  "dependencies": {
7
- "@flow-os/client": "^0.0.23"
7
+ "@flow-os/client": "^0.0.24"
8
8
  },
9
9
  "bin": {
10
10
  "create-flow-os": "./src/index.ts"
@@ -89,6 +89,29 @@ export async function fetchFlowClientVersion(): Promise<string | undefined> {
89
89
  }
90
90
  }
91
91
 
92
+ /** Scarica config da npm (bypass cache) - estrae in temp, ritorna { files, configDir, tmpDir } */
93
+ async function fetchConfigFromNpm(
94
+ pkgName: string,
95
+ version: string
96
+ ): Promise<{ files: Map<string, string>; configDir: string; tmpDir: string } | null> {
97
+ const shortName = pkgName.replace(/^@flow-os\//, "");
98
+ const url = `${NPM_REGISTRY}/${pkgName}/-/${shortName}-${version}.tgz`;
99
+ try {
100
+ const res = await fetch(url, { cache: "no-store" });
101
+ if (!res.ok) return null;
102
+ const archive = new Bun.Archive(await res.blob());
103
+ const { tmpdir } = await import("os");
104
+ const tmpDir = join(tmpdir(), `flow-os-client-${version}-${Date.now()}`);
105
+ await archive.extract(tmpDir, { glob: ["package/config/**"] });
106
+ const configDir = join(tmpDir, "package", "config");
107
+ if (!existsSync(configDir)) return null;
108
+ const files = collectConfigFiles(configDir);
109
+ return { files, configDir, tmpDir };
110
+ } catch {
111
+ return null;
112
+ }
113
+ }
114
+
92
115
  /** Sostituisce workspace:* e 0.0.1 con versione concreta (workspace va bene solo dentro flow-os) */
93
116
  function resolveFlowDeps(
94
117
  deps: Record<string, string> | undefined,
@@ -160,7 +183,8 @@ async function collectAllTemplates(
160
183
  combined: Map<string, string>,
161
184
  done: Set<string>,
162
185
  order: string[],
163
- _clientVersionFromNpm?: string
186
+ clientVersionFromNpm: string | undefined,
187
+ tmpDirs: string[]
164
188
  ): Promise<void> {
165
189
  for (const lib of libs) {
166
190
  const pkgName = toPkgName(lib);
@@ -168,15 +192,32 @@ async function collectAllTemplates(
168
192
 
169
193
  const root = pkgRoot(pkgName);
170
194
  const configDir = join(root, "config");
171
- if (!existsSync(configDir)) continue;
195
+ if (!existsSync(configDir) && pkgName !== "@flow-os/client") continue;
172
196
 
173
197
  for (const sub of flowDeps(root)) {
174
- await collectAllTemplates([toShortName(sub)], combined, done, order, _clientVersionFromNpm);
198
+ await collectAllTemplates([toShortName(sub)], combined, done, order, clientVersionFromNpm, tmpDirs);
175
199
  }
176
200
 
177
- const pkgFiles = collectConfigFiles(configDir);
201
+ let pkgFiles: Map<string, string>;
202
+ let configDirForPkg: string;
203
+ if (pkgName === "@flow-os/client" && clientVersionFromNpm) {
204
+ const fetched = await fetchConfigFromNpm(pkgName, clientVersionFromNpm);
205
+ if (fetched) {
206
+ pkgFiles = fetched.files;
207
+ configDirForPkg = fetched.configDir;
208
+ tmpDirs.push(fetched.tmpDir);
209
+ } else {
210
+ if (!existsSync(configDir)) continue;
211
+ pkgFiles = collectConfigFiles(configDir);
212
+ configDirForPkg = configDir;
213
+ }
214
+ } else {
215
+ if (!existsSync(configDir)) continue;
216
+ pkgFiles = collectConfigFiles(configDir);
217
+ configDirForPkg = configDir;
218
+ }
178
219
  mergeTemplateInto(combined, pkgFiles);
179
- order.push(configDir);
220
+ order.push(configDirForPkg);
180
221
  done.add(pkgName);
181
222
  }
182
223
  }
@@ -190,11 +231,19 @@ export async function initLib(
190
231
  const combined = new Map<string, string>();
191
232
  const done = new Set<string>();
192
233
  const order: string[] = [];
193
- await collectAllTemplates(libs, combined, done, order, clientVersionFromNpm);
234
+ const tmpDirs: string[] = [];
235
+ await collectAllTemplates(libs, combined, done, order, clientVersionFromNpm, tmpDirs);
194
236
 
195
237
  for (const configDir of order) {
196
238
  mergePkg(configDir, cwd, clientVersionFromNpm);
197
239
  }
198
240
 
199
241
  await writeMergedWithUser(combined, cwd, (path, conflicts) => resolveConflicts(conflicts, path));
242
+
243
+ const { rmSync } = await import("fs");
244
+ for (const d of tmpDirs) {
245
+ try {
246
+ rmSync(d, { recursive: true, force: true });
247
+ } catch {}
248
+ }
200
249
  }