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 +2 -2
- package/src/init/scaffold.ts +55 -6
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-flow-os",
|
|
3
|
-
"version": "0.0.
|
|
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.
|
|
7
|
+
"@flow-os/client": "^0.0.24"
|
|
8
8
|
},
|
|
9
9
|
"bin": {
|
|
10
10
|
"create-flow-os": "./src/index.ts"
|
package/src/init/scaffold.ts
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
198
|
+
await collectAllTemplates([toShortName(sub)], combined, done, order, clientVersionFromNpm, tmpDirs);
|
|
175
199
|
}
|
|
176
200
|
|
|
177
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
}
|