@holo-js/cli 0.2.6 → 0.3.1
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/dist/bin/holo.mjs +417 -109
- package/dist/{broadcast-JBQWQZSO.mjs → broadcast-PJLFVZH4.mjs} +12 -12
- package/dist/cache-KR4ACOYD.mjs +137 -0
- package/dist/{cache-migrations-77TLXIVG.mjs → cache-migrations-J34RE4WH.mjs} +13 -13
- package/dist/{chunk-LXGQCG56.mjs → chunk-2XXJ76YC.mjs} +1 -1
- package/dist/chunk-3ICVWL2M.mjs +491 -0
- package/dist/{chunk-YEFJBN56.mjs → chunk-4VYR2ARA.mjs} +11 -8
- package/dist/{chunk-VP2E62DF.mjs → chunk-7KZVFDSI.mjs} +49 -349
- package/dist/chunk-AZ6NVJAP.mjs +360 -0
- package/dist/chunk-CT23GSEC.mjs +156 -0
- package/dist/{chunk-7B2RVYLL.mjs → chunk-FFTJKBQF.mjs} +293 -399
- package/dist/{chunk-KS5TWO75.mjs → chunk-I3RRWDLV.mjs} +7 -7
- package/dist/{chunk-J76GH2DR.mjs → chunk-L3YATEQY.mjs} +129 -86
- package/dist/{chunk-4K4CWMMP.mjs → chunk-L6FF22IV.mjs} +76 -61
- package/dist/{chunk-ILU426CF.mjs → chunk-PVVGQSUP.mjs} +482 -2
- package/dist/chunk-XBOVM6LO.mjs +41 -0
- package/dist/{chunk-I7QBCEV7.mjs → chunk-Y355VYRN.mjs} +5 -3
- package/dist/{chunk-VRGB6DIS.mjs → chunk-YJWHIQ45.mjs} +2 -0
- package/dist/{config-MD27U4FM.mjs → config-XVPV6DJW.mjs} +3 -3
- package/dist/{dev-L4Y2GU2E.mjs → dev-NTQTEY5B.mjs} +9 -8
- package/dist/{discovery-GWTBF5RZ.mjs → discovery-TMPUQQHI.mjs} +8 -6
- package/dist/{generators-VCYISHWO.mjs → generators-3FDCCJDC.mjs} +16 -15
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +419 -111
- package/dist/{media-migrations-BNVAPYEM.mjs → media-migrations-UJ6BMUSZ.mjs} +12 -12
- package/dist/plugins-USHY6SPF.mjs +24 -0
- package/dist/{queue-5BXSDFCO.mjs → queue-6U7JU4T6.mjs} +53 -17
- package/dist/{queue-D4LSWNS2.mjs → queue-VJEFD6SE.mjs} +55 -19
- package/dist/{queue-migrations-EF4AMMSY.mjs → queue-migrations-6YUUOKMH.mjs} +17 -14
- package/dist/{runtime-RPMZMTD4.mjs → runtime-FVRB4O2M.mjs} +8 -8
- package/dist/{runtime-GSXF4NB3.mjs → runtime-P5R7H3B4.mjs} +1 -1
- package/dist/runtime-worker.mjs +7 -1
- package/dist/{scaffold-NJ5VH73M.mjs → scaffold-F3AZDNPG.mjs} +9 -4
- package/dist/{security-K5PZS3E3.mjs → security-X4274RHX.mjs} +8 -7
- package/package.json +35 -8
- package/dist/broadcast-YGJFCEPP.mjs +0 -204
- package/dist/cache-HUGRWOHQ.mjs +0 -66
- package/dist/cache-OSJ4PD52.mjs +0 -66
- package/dist/cache-migrations-FKAHRP24.mjs +0 -173
- package/dist/chunk-AJLRAC5M.mjs +0 -497
- package/dist/chunk-C624G3R2.mjs +0 -3306
- package/dist/chunk-D7O4SU6N.mjs +0 -2
- package/dist/chunk-FGQ2I2YH.mjs +0 -22
- package/dist/chunk-LBJAJLKU.mjs +0 -25
- package/dist/dev-YPBQBEOE.mjs +0 -44
- package/dist/generators-H4NTV4DB.mjs +0 -520
- package/dist/media-migrations-NNB3DAQR.mjs +0 -106
- package/dist/queue-migrations-LXEWXJYT.mjs +0 -168
- package/dist/runtime-UKBJQFXM.mjs +0 -57
- package/dist/scaffold-VV3KTYGO.mjs +0 -139
- package/dist/security-JR4P7L2C.mjs +0 -71
|
@@ -3,12 +3,440 @@ import { mkdtemp, mkdir, readFile, rm, writeFile } from "fs/promises";
|
|
|
3
3
|
import { existsSync } from "fs";
|
|
4
4
|
import { createRequire } from "module";
|
|
5
5
|
import { basename, dirname, extname as extname2, join as join2, resolve as resolve2 } from "path";
|
|
6
|
-
import { pathToFileURL } from "url";
|
|
6
|
+
import { fileURLToPath, pathToFileURL } from "url";
|
|
7
7
|
import { build } from "esbuild";
|
|
8
8
|
|
|
9
9
|
// src/project/shared.ts
|
|
10
10
|
import { stat } from "fs/promises";
|
|
11
11
|
import { extname, join, relative, resolve } from "path";
|
|
12
|
+
|
|
13
|
+
// package.json
|
|
14
|
+
var package_default = {
|
|
15
|
+
name: "@holo-js/cli",
|
|
16
|
+
version: "0.3.1",
|
|
17
|
+
description: "Holo-JS Framework - project creation, discovery, and operational CLI",
|
|
18
|
+
type: "module",
|
|
19
|
+
license: "MIT",
|
|
20
|
+
bin: {
|
|
21
|
+
holo: "./dist/bin/holo.mjs",
|
|
22
|
+
"holo-js": "./dist/bin/holo.mjs"
|
|
23
|
+
},
|
|
24
|
+
exports: {
|
|
25
|
+
".": {
|
|
26
|
+
types: "./dist/index.d.ts",
|
|
27
|
+
import: "./dist/index.mjs"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
main: "./dist/index.mjs",
|
|
31
|
+
types: "./dist/index.d.ts",
|
|
32
|
+
files: [
|
|
33
|
+
"dist"
|
|
34
|
+
],
|
|
35
|
+
scripts: {
|
|
36
|
+
build: "node ../../scripts/generate-cli-workspace-catalog.mjs && tsup",
|
|
37
|
+
stub: "node ../../scripts/generate-cli-workspace-catalog.mjs && tsup --watch",
|
|
38
|
+
typecheck: "tsc -p tsconfig.json --noEmit",
|
|
39
|
+
test: "vitest --run && HOLO_CLI_INCLUDE_INTEGRATION=1 vitest --run tests/cli.test.ts",
|
|
40
|
+
"test:integration": "HOLO_CLI_INCLUDE_INTEGRATION=1 vitest --run tests/cli.test.ts"
|
|
41
|
+
},
|
|
42
|
+
dependencies: {
|
|
43
|
+
"@clack/prompts": "catalog:",
|
|
44
|
+
"@holo-js/auth": "catalog:",
|
|
45
|
+
"@holo-js/cache-db": "catalog:",
|
|
46
|
+
"@holo-js/config": "catalog:",
|
|
47
|
+
"@holo-js/core": "catalog:",
|
|
48
|
+
"@holo-js/db": "catalog:",
|
|
49
|
+
"@holo-js/kernel": "catalog:",
|
|
50
|
+
"@holo-js/security": "catalog:",
|
|
51
|
+
"@holo-js/storage": "catalog:",
|
|
52
|
+
esbuild: "catalog:",
|
|
53
|
+
inflection: "catalog:"
|
|
54
|
+
},
|
|
55
|
+
peerDependencies: {
|
|
56
|
+
"@holo-js/broadcast": "catalog:",
|
|
57
|
+
"@holo-js/mail": "catalog:",
|
|
58
|
+
"@holo-js/session": "catalog:",
|
|
59
|
+
"@holo-js/queue": "catalog:"
|
|
60
|
+
},
|
|
61
|
+
peerDependenciesMeta: {
|
|
62
|
+
"@holo-js/broadcast": {
|
|
63
|
+
optional: true
|
|
64
|
+
},
|
|
65
|
+
"@holo-js/mail": {
|
|
66
|
+
optional: true
|
|
67
|
+
},
|
|
68
|
+
"@holo-js/queue": {
|
|
69
|
+
optional: true
|
|
70
|
+
},
|
|
71
|
+
"@holo-js/session": {
|
|
72
|
+
optional: true
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
devDependencies: {
|
|
76
|
+
"@holo-js/broadcast": "catalog:",
|
|
77
|
+
"@holo-js/events": "catalog:",
|
|
78
|
+
"@holo-js/mail": "catalog:",
|
|
79
|
+
"@holo-js/queue": "catalog:",
|
|
80
|
+
"@holo-js/queue-db": "catalog:",
|
|
81
|
+
"@holo-js/session": "catalog:",
|
|
82
|
+
"@types/node": "catalog:",
|
|
83
|
+
tsup: "catalog:",
|
|
84
|
+
typescript: "catalog:",
|
|
85
|
+
vitest: "catalog:"
|
|
86
|
+
},
|
|
87
|
+
engines: {
|
|
88
|
+
node: ">=20.11.0"
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// src/generated/workspaceCatalog.ts
|
|
93
|
+
var WORKSPACE_CATALOG = Object.freeze({
|
|
94
|
+
"@clerk/backend": "^3.4.7",
|
|
95
|
+
"@clack/prompts": "^1.5.1",
|
|
96
|
+
"@eslint/js": "^9.17.0",
|
|
97
|
+
"@holo-js/adapter-next": "^0.3.1",
|
|
98
|
+
"@holo-js/adapter-nuxt": "^0.3.1",
|
|
99
|
+
"@holo-js/adapter-sveltekit": "^0.3.1",
|
|
100
|
+
"@holo-js/adapter-shared": "^0.3.1",
|
|
101
|
+
"@holo-js/auth": "^0.3.1",
|
|
102
|
+
"@holo-js/auth-clerk": "^0.3.1",
|
|
103
|
+
"@holo-js/auth-social": "^0.3.1",
|
|
104
|
+
"@holo-js/auth-social-apple": "^0.3.1",
|
|
105
|
+
"@holo-js/auth-social-discord": "^0.3.1",
|
|
106
|
+
"@holo-js/auth-social-facebook": "^0.3.1",
|
|
107
|
+
"@holo-js/auth-social-github": "^0.3.1",
|
|
108
|
+
"@holo-js/auth-social-google": "^0.3.1",
|
|
109
|
+
"@holo-js/auth-social-linkedin": "^0.3.1",
|
|
110
|
+
"@holo-js/auth-workos": "^0.3.1",
|
|
111
|
+
"@holo-js/authorization": "^0.3.1",
|
|
112
|
+
"@holo-js/broadcast": "^0.3.1",
|
|
113
|
+
"@holo-js/cache": "^0.3.1",
|
|
114
|
+
"@holo-js/cache-db": "^0.3.1",
|
|
115
|
+
"@holo-js/cache-redis": "^0.3.1",
|
|
116
|
+
"@holo-js/cli": "^0.3.1",
|
|
117
|
+
"@holo-js/config": "^0.3.1",
|
|
118
|
+
"@holo-js/core": "^0.3.1",
|
|
119
|
+
"@holo-js/db": "^0.3.1",
|
|
120
|
+
"@holo-js/db-mysql": "^0.3.1",
|
|
121
|
+
"@holo-js/db-postgres": "^0.3.1",
|
|
122
|
+
"@holo-js/db-sqlite": "^0.3.1",
|
|
123
|
+
"@holo-js/events": "^0.3.1",
|
|
124
|
+
"@holo-js/flux": "^0.3.1",
|
|
125
|
+
"@holo-js/flux-react": "^0.3.1",
|
|
126
|
+
"@holo-js/flux-svelte": "^0.3.1",
|
|
127
|
+
"@holo-js/flux-vue": "^0.3.1",
|
|
128
|
+
"@holo-js/forms": "^0.3.1",
|
|
129
|
+
"@holo-js/kernel": "^0.3.1",
|
|
130
|
+
"@holo-js/mail": "^0.3.1",
|
|
131
|
+
"@holo-js/media": "^0.3.1",
|
|
132
|
+
"@holo-js/notifications": "^0.3.1",
|
|
133
|
+
"@holo-js/queue": "^0.3.1",
|
|
134
|
+
"@holo-js/queue-db": "^0.3.1",
|
|
135
|
+
"@holo-js/queue-redis": "^0.3.1",
|
|
136
|
+
"@holo-js/realtime": "^0.3.1",
|
|
137
|
+
"@holo-js/security": "^0.3.1",
|
|
138
|
+
"@holo-js/session": "^0.3.1",
|
|
139
|
+
"@holo-js/storage": "^0.3.1",
|
|
140
|
+
"@holo-js/storage-s3": "^0.3.1",
|
|
141
|
+
"@holo-js/validation": "^0.3.1",
|
|
142
|
+
"@nuxt/kit": "^4.4.4",
|
|
143
|
+
"@nuxt/module-builder": "^1.0.2",
|
|
144
|
+
"@sveltejs/adapter-node": "^5.5.4",
|
|
145
|
+
"@sveltejs/kit": "^2.59.1",
|
|
146
|
+
"@sveltejs/vite-plugin-svelte": "^7.1.0",
|
|
147
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
148
|
+
"@types/node": "^22.10.2",
|
|
149
|
+
"@types/pg": "^8.11.0",
|
|
150
|
+
"@types/react": "^19.2.14",
|
|
151
|
+
"@types/react-dom": "^19.2.3",
|
|
152
|
+
"@types/react-test-renderer": "^19.1.0",
|
|
153
|
+
"@types/ws": "^8.18.1",
|
|
154
|
+
"@vitest/coverage-istanbul": "^4.1.5",
|
|
155
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
156
|
+
"better-sqlite3": "^11.7.0",
|
|
157
|
+
"bullmq": "^5.71.0",
|
|
158
|
+
"create-holo-js": "^0.3.1",
|
|
159
|
+
"esbuild": "^0.27.4",
|
|
160
|
+
"eslint": "^9.17.0",
|
|
161
|
+
"fast-check": "^4.5.3",
|
|
162
|
+
"globals": "^15.14.0",
|
|
163
|
+
"h3": "^1.15.11",
|
|
164
|
+
"inflection": "^3.0.2",
|
|
165
|
+
"ioredis": "^5.4.2",
|
|
166
|
+
"mysql2": "^3.17.1",
|
|
167
|
+
"next": "^16.2.4",
|
|
168
|
+
"nodemailer": "^6.10.1",
|
|
169
|
+
"nuxt": "^4.4.4",
|
|
170
|
+
"pg": "^8.13.0",
|
|
171
|
+
"playwright": "^1.57.0",
|
|
172
|
+
"react": "^19.2.6",
|
|
173
|
+
"react-dom": "^19.2.6",
|
|
174
|
+
"react-test-renderer": "^19.2.6",
|
|
175
|
+
"sharp": "^0.34.4",
|
|
176
|
+
"svelte": "^5.55.5",
|
|
177
|
+
"svelte-check": "^4.4.6",
|
|
178
|
+
"tslib": "^2.8.1",
|
|
179
|
+
"tsup": "^8.3.5",
|
|
180
|
+
"typescript": "^5.7.2",
|
|
181
|
+
"typescript-eslint": "^8.30.1",
|
|
182
|
+
"ulid": "^3.0.1",
|
|
183
|
+
"uuid": "^12.0.0",
|
|
184
|
+
"valibot": "^1.1.0",
|
|
185
|
+
"vite": "^8.0.10",
|
|
186
|
+
"vitepress": "^1.6.3",
|
|
187
|
+
"vitest": "^4.1.5",
|
|
188
|
+
"vue": "^3.5.13",
|
|
189
|
+
"vue-router": "^5.0.4",
|
|
190
|
+
"vue-tsc": "^2.2.0",
|
|
191
|
+
"ws": "^8.18.3"
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// src/metadata.ts
|
|
195
|
+
var HOLO_PACKAGE_VERSION = package_default.version;
|
|
196
|
+
var HOLO_PACKAGE_RANGE = `^${HOLO_PACKAGE_VERSION}`;
|
|
197
|
+
function catalogVersion(packageName) {
|
|
198
|
+
return WORKSPACE_CATALOG[packageName];
|
|
199
|
+
}
|
|
200
|
+
var ESBUILD_PACKAGE_VERSION = catalogVersion("esbuild");
|
|
201
|
+
var SCAFFOLD_PACKAGE_MANAGER_VERSIONS = Object.freeze({
|
|
202
|
+
npm: "npm@latest",
|
|
203
|
+
pnpm: "pnpm@latest",
|
|
204
|
+
yarn: "yarn@stable",
|
|
205
|
+
bun: "bun@1.3.9"
|
|
206
|
+
});
|
|
207
|
+
var SCAFFOLD_FRAMEWORK_VERSIONS = Object.freeze({
|
|
208
|
+
nuxt: catalogVersion("nuxt"),
|
|
209
|
+
next: catalogVersion("next"),
|
|
210
|
+
sveltekit: catalogVersion("@sveltejs/kit")
|
|
211
|
+
});
|
|
212
|
+
var SCAFFOLD_NEXT_REACT_VERSIONS = Object.freeze({
|
|
213
|
+
react: catalogVersion("react"),
|
|
214
|
+
"react-dom": catalogVersion("react-dom"),
|
|
215
|
+
"@types/react": catalogVersion("@types/react"),
|
|
216
|
+
"@types/react-dom": catalogVersion("@types/react-dom")
|
|
217
|
+
});
|
|
218
|
+
var SCAFFOLD_BASE_DEV_DEPENDENCY_VERSIONS = Object.freeze({
|
|
219
|
+
typescript: catalogVersion("typescript"),
|
|
220
|
+
"@types/node": catalogVersion("@types/node"),
|
|
221
|
+
"@eslint/js": catalogVersion("@eslint/js"),
|
|
222
|
+
eslint: catalogVersion("eslint"),
|
|
223
|
+
globals: catalogVersion("globals"),
|
|
224
|
+
"typescript-eslint": catalogVersion("typescript-eslint")
|
|
225
|
+
});
|
|
226
|
+
var SCAFFOLD_NUXT_DEPENDENCY_VERSIONS = Object.freeze({
|
|
227
|
+
vue: catalogVersion("vue"),
|
|
228
|
+
"vue-router": catalogVersion("vue-router"),
|
|
229
|
+
"vue-tsc": catalogVersion("vue-tsc")
|
|
230
|
+
});
|
|
231
|
+
var SCAFFOLD_SVELTEKIT_DEPENDENCY_VERSIONS = Object.freeze({
|
|
232
|
+
"@sveltejs/adapter-node": catalogVersion("@sveltejs/adapter-node"),
|
|
233
|
+
"@sveltejs/vite-plugin-svelte": catalogVersion("@sveltejs/vite-plugin-svelte"),
|
|
234
|
+
svelte: catalogVersion("svelte"),
|
|
235
|
+
"svelte-check": catalogVersion("svelte-check"),
|
|
236
|
+
vite: catalogVersion("vite")
|
|
237
|
+
});
|
|
238
|
+
var IOREDIS_PACKAGE_VERSION = catalogVersion("ioredis");
|
|
239
|
+
var SCAFFOLD_FRAMEWORK_ADAPTER_VERSIONS = Object.freeze({
|
|
240
|
+
nuxt: HOLO_PACKAGE_RANGE,
|
|
241
|
+
next: HOLO_PACKAGE_RANGE,
|
|
242
|
+
sveltekit: HOLO_PACKAGE_RANGE
|
|
243
|
+
});
|
|
244
|
+
var SCAFFOLD_FRAMEWORK_RUNTIME_VERSIONS = Object.freeze({
|
|
245
|
+
nuxt: {
|
|
246
|
+
"@holo-js/storage": HOLO_PACKAGE_RANGE
|
|
247
|
+
},
|
|
248
|
+
next: {
|
|
249
|
+
"@holo-js/storage": HOLO_PACKAGE_RANGE
|
|
250
|
+
},
|
|
251
|
+
sveltekit: {
|
|
252
|
+
"@holo-js/storage": HOLO_PACKAGE_RANGE
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// src/project/frameworks.ts
|
|
257
|
+
var FRAMEWORK_DESCRIPTORS = {
|
|
258
|
+
nuxt: {
|
|
259
|
+
id: "nuxt",
|
|
260
|
+
displayName: "Nuxt",
|
|
261
|
+
detectPackages: ["nuxt"],
|
|
262
|
+
adapterPackage: "@holo-js/adapter-nuxt",
|
|
263
|
+
fluxPackage: "@holo-js/flux-vue",
|
|
264
|
+
scaffold: {
|
|
265
|
+
dependencies: {
|
|
266
|
+
nuxt: SCAFFOLD_FRAMEWORK_VERSIONS.nuxt,
|
|
267
|
+
vue: SCAFFOLD_NUXT_DEPENDENCY_VERSIONS.vue,
|
|
268
|
+
"vue-router": SCAFFOLD_NUXT_DEPENDENCY_VERSIONS["vue-router"],
|
|
269
|
+
"@holo-js/adapter-nuxt": SCAFFOLD_FRAMEWORK_ADAPTER_VERSIONS.nuxt
|
|
270
|
+
},
|
|
271
|
+
devDependencies: {
|
|
272
|
+
"vue-tsc": SCAFFOLD_NUXT_DEPENDENCY_VERSIONS["vue-tsc"]
|
|
273
|
+
},
|
|
274
|
+
scripts: {
|
|
275
|
+
postinstall: "nuxt prepare"
|
|
276
|
+
},
|
|
277
|
+
lintScript: "eslint app config server shared tests *.d.ts --fix --no-warn-ignored --no-error-on-unmatched-pattern",
|
|
278
|
+
typecheckScript: "nuxt typecheck",
|
|
279
|
+
defaultUrl: "http://localhost:3000",
|
|
280
|
+
tsconfig: "nuxt",
|
|
281
|
+
vscodeVueHybridMode: true
|
|
282
|
+
},
|
|
283
|
+
runner: {
|
|
284
|
+
commandName: "nuxt",
|
|
285
|
+
buildArgs: ["build"],
|
|
286
|
+
start: [".output/server/index.mjs"],
|
|
287
|
+
startUsesFrameworkBinary: false,
|
|
288
|
+
preloadNextRuntime: false,
|
|
289
|
+
suppressSvelteKitOutput: false,
|
|
290
|
+
nextDevServerConflictHandling: false
|
|
291
|
+
},
|
|
292
|
+
sync: {
|
|
293
|
+
commands: {
|
|
294
|
+
bun: ["bun", "x", "nuxt", "prepare"],
|
|
295
|
+
npm: ["npm", "exec", "--", "nuxt", "prepare"],
|
|
296
|
+
pnpm: ["pnpm", "exec", "nuxt", "prepare"],
|
|
297
|
+
yarn: ["yarn", "run", "nuxt", "prepare"]
|
|
298
|
+
},
|
|
299
|
+
errorLabel: "nuxt prepare"
|
|
300
|
+
},
|
|
301
|
+
capabilities: {
|
|
302
|
+
managedBroadcastAuthRoute: false
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
next: {
|
|
306
|
+
id: "next",
|
|
307
|
+
displayName: "Next.js",
|
|
308
|
+
detectPackages: ["next"],
|
|
309
|
+
adapterPackage: "@holo-js/adapter-next",
|
|
310
|
+
fluxPackage: "@holo-js/flux-react",
|
|
311
|
+
scaffold: {
|
|
312
|
+
dependencies: {
|
|
313
|
+
next: SCAFFOLD_FRAMEWORK_VERSIONS.next,
|
|
314
|
+
react: SCAFFOLD_NEXT_REACT_VERSIONS.react,
|
|
315
|
+
"react-dom": SCAFFOLD_NEXT_REACT_VERSIONS["react-dom"],
|
|
316
|
+
"@holo-js/adapter-next": SCAFFOLD_FRAMEWORK_ADAPTER_VERSIONS.next
|
|
317
|
+
},
|
|
318
|
+
devDependencies: {
|
|
319
|
+
"@types/react": SCAFFOLD_NEXT_REACT_VERSIONS["@types/react"],
|
|
320
|
+
"@types/react-dom": SCAFFOLD_NEXT_REACT_VERSIONS["@types/react-dom"]
|
|
321
|
+
},
|
|
322
|
+
scripts: {},
|
|
323
|
+
lintScript: "eslint app config server tests --fix --no-warn-ignored --no-error-on-unmatched-pattern",
|
|
324
|
+
typecheckScript: "tsc -p tsconfig.json --noEmit",
|
|
325
|
+
defaultUrl: "http://localhost:3000",
|
|
326
|
+
tsconfig: "next"
|
|
327
|
+
},
|
|
328
|
+
runner: {
|
|
329
|
+
commandName: "next",
|
|
330
|
+
buildArgs: ["build"],
|
|
331
|
+
start: ["start"],
|
|
332
|
+
startUsesFrameworkBinary: true,
|
|
333
|
+
preloadNextRuntime: true,
|
|
334
|
+
suppressSvelteKitOutput: false,
|
|
335
|
+
nextDevServerConflictHandling: true
|
|
336
|
+
},
|
|
337
|
+
capabilities: {
|
|
338
|
+
managedBroadcastAuthRoute: true
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
sveltekit: {
|
|
342
|
+
id: "sveltekit",
|
|
343
|
+
displayName: "SvelteKit",
|
|
344
|
+
detectPackages: ["@sveltejs/kit"],
|
|
345
|
+
adapterPackage: "@holo-js/adapter-sveltekit",
|
|
346
|
+
fluxPackage: "@holo-js/flux-svelte",
|
|
347
|
+
scaffold: {
|
|
348
|
+
dependencies: {
|
|
349
|
+
"@holo-js/adapter-sveltekit": SCAFFOLD_FRAMEWORK_ADAPTER_VERSIONS.sveltekit,
|
|
350
|
+
"@sveltejs/adapter-node": SCAFFOLD_SVELTEKIT_DEPENDENCY_VERSIONS["@sveltejs/adapter-node"],
|
|
351
|
+
"@sveltejs/kit": SCAFFOLD_FRAMEWORK_VERSIONS.sveltekit,
|
|
352
|
+
"@sveltejs/vite-plugin-svelte": SCAFFOLD_SVELTEKIT_DEPENDENCY_VERSIONS["@sveltejs/vite-plugin-svelte"],
|
|
353
|
+
svelte: SCAFFOLD_SVELTEKIT_DEPENDENCY_VERSIONS.svelte,
|
|
354
|
+
vite: SCAFFOLD_SVELTEKIT_DEPENDENCY_VERSIONS.vite
|
|
355
|
+
},
|
|
356
|
+
devDependencies: {
|
|
357
|
+
"svelte-check": SCAFFOLD_SVELTEKIT_DEPENDENCY_VERSIONS["svelte-check"]
|
|
358
|
+
},
|
|
359
|
+
scripts: {},
|
|
360
|
+
lintScript: "eslint src config server tests --fix --no-warn-ignored --no-error-on-unmatched-pattern",
|
|
361
|
+
typecheckScript: "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
362
|
+
defaultUrl: "http://localhost:5173",
|
|
363
|
+
tsconfig: "sveltekit"
|
|
364
|
+
},
|
|
365
|
+
runner: {
|
|
366
|
+
commandName: "vite",
|
|
367
|
+
buildArgs: ["build", "--logLevel", "error"],
|
|
368
|
+
start: ["build/index.js"],
|
|
369
|
+
startUsesFrameworkBinary: false,
|
|
370
|
+
preloadNextRuntime: false,
|
|
371
|
+
suppressSvelteKitOutput: true,
|
|
372
|
+
nextDevServerConflictHandling: false
|
|
373
|
+
},
|
|
374
|
+
sync: {
|
|
375
|
+
commands: {
|
|
376
|
+
bun: ["bun", "x", "svelte-kit", "sync"],
|
|
377
|
+
npm: ["npm", "exec", "--", "svelte-kit", "sync"],
|
|
378
|
+
pnpm: ["pnpm", "exec", "svelte-kit", "sync"],
|
|
379
|
+
yarn: ["yarn", "run", "svelte-kit", "sync"]
|
|
380
|
+
},
|
|
381
|
+
errorLabel: "svelte-kit sync"
|
|
382
|
+
},
|
|
383
|
+
capabilities: {
|
|
384
|
+
managedBroadcastAuthRoute: false
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
var SUPPORTED_FRAMEWORK_IDS = Object.keys(FRAMEWORK_DESCRIPTORS);
|
|
389
|
+
function getFrameworkDescriptor(framework) {
|
|
390
|
+
return FRAMEWORK_DESCRIPTORS[framework];
|
|
391
|
+
}
|
|
392
|
+
function getFrameworkDescriptorById(framework) {
|
|
393
|
+
return Object.values(FRAMEWORK_DESCRIPTORS).find((descriptor) => descriptor.id === framework);
|
|
394
|
+
}
|
|
395
|
+
function isSupportedFrameworkId(framework) {
|
|
396
|
+
return Object.prototype.hasOwnProperty.call(FRAMEWORK_DESCRIPTORS, framework);
|
|
397
|
+
}
|
|
398
|
+
function getFrameworkDescriptorByIdFrom(framework, descriptors) {
|
|
399
|
+
return descriptors.find((descriptor) => descriptor.id === framework) ?? getFrameworkDescriptorById(framework);
|
|
400
|
+
}
|
|
401
|
+
function getFrameworkDescriptorsWith(descriptors) {
|
|
402
|
+
return Object.freeze([
|
|
403
|
+
...descriptors,
|
|
404
|
+
...Object.values(FRAMEWORK_DESCRIPTORS)
|
|
405
|
+
]);
|
|
406
|
+
}
|
|
407
|
+
function detectFrameworkDescriptorFromPackageJson(dependencies, devDependencies, descriptors = Object.values(FRAMEWORK_DESCRIPTORS)) {
|
|
408
|
+
return descriptors.find(
|
|
409
|
+
(descriptor) => descriptor.detectPackages.some((packageName) => dependencies[packageName] || devDependencies[packageName])
|
|
410
|
+
);
|
|
411
|
+
}
|
|
412
|
+
function getFrameworkRuntimeDependencies(framework) {
|
|
413
|
+
return SCAFFOLD_FRAMEWORK_RUNTIME_VERSIONS[framework];
|
|
414
|
+
}
|
|
415
|
+
function getFrameworkRuntimeDependencyVersion(framework, packageName) {
|
|
416
|
+
const version = getFrameworkRuntimeDependencies(framework)[packageName];
|
|
417
|
+
if (!version) {
|
|
418
|
+
throw new Error(`Missing runtime dependency "${packageName}" for framework "${framework}".`);
|
|
419
|
+
}
|
|
420
|
+
return version;
|
|
421
|
+
}
|
|
422
|
+
function getFrameworkBroadcastPackages(framework) {
|
|
423
|
+
const descriptor = getFrameworkDescriptor(framework);
|
|
424
|
+
return descriptor.fluxPackage ? [descriptor.fluxPackage, descriptor.adapterPackage] : [descriptor.adapterPackage];
|
|
425
|
+
}
|
|
426
|
+
function getFrameworkBroadcastPackagesFromDescriptor(descriptor) {
|
|
427
|
+
return descriptor.fluxPackage ? [descriptor.fluxPackage, descriptor.adapterPackage] : [descriptor.adapterPackage];
|
|
428
|
+
}
|
|
429
|
+
function frameworkDescriptorSupportsManagedBroadcastAuthRoute(framework) {
|
|
430
|
+
return framework?.capabilities.managedBroadcastAuthRoute === true;
|
|
431
|
+
}
|
|
432
|
+
function getManagedFrameworkPackageNames() {
|
|
433
|
+
return Object.values(FRAMEWORK_DESCRIPTORS).flatMap((descriptor) => [
|
|
434
|
+
descriptor.adapterPackage,
|
|
435
|
+
...descriptor.fluxPackage ? [descriptor.fluxPackage] : []
|
|
436
|
+
]);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// src/project/shared.ts
|
|
12
440
|
var SUPPORTED_AUTH_SOCIAL_PROVIDERS = [
|
|
13
441
|
"google",
|
|
14
442
|
"github",
|
|
@@ -238,6 +666,42 @@ function resolveDefaultArtifactPath(projectRoot, relativeDir, fileName) {
|
|
|
238
666
|
|
|
239
667
|
// src/project/runtime.ts
|
|
240
668
|
var projectModuleBundler = build;
|
|
669
|
+
function createHoloPackageBundlerPlugin(projectRoot) {
|
|
670
|
+
const projectRequire = createRequire(join2(projectRoot, "package.json"));
|
|
671
|
+
const cliRequire = createRequire(import.meta.url);
|
|
672
|
+
return {
|
|
673
|
+
name: "holo-package-bundler",
|
|
674
|
+
setup(buildContext) {
|
|
675
|
+
buildContext.onResolve({ filter: /^@holo-js\// }, ({ importer, path }) => {
|
|
676
|
+
const importerRequire = importer ? createRequire(importer) : void 0;
|
|
677
|
+
const resolvers = [
|
|
678
|
+
...importerRequire ? [importerRequire.resolve.bind(importerRequire)] : [],
|
|
679
|
+
projectRequire.resolve.bind(projectRequire),
|
|
680
|
+
cliRequire.resolve.bind(cliRequire)
|
|
681
|
+
];
|
|
682
|
+
for (const resolvePackage of resolvers) {
|
|
683
|
+
try {
|
|
684
|
+
const resolved = resolvePackage(path);
|
|
685
|
+
return {
|
|
686
|
+
path: resolved.startsWith("file:") ? fileURLToPath(resolved) : resolved,
|
|
687
|
+
external: true
|
|
688
|
+
};
|
|
689
|
+
} catch {
|
|
690
|
+
continue;
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
const workspaceSpecifier = resolveWorkspacePackageImportSpecifier(path);
|
|
694
|
+
if (workspaceSpecifier) {
|
|
695
|
+
return {
|
|
696
|
+
path: fileURLToPath(workspaceSpecifier),
|
|
697
|
+
external: true
|
|
698
|
+
};
|
|
699
|
+
}
|
|
700
|
+
return void 0;
|
|
701
|
+
});
|
|
702
|
+
}
|
|
703
|
+
};
|
|
704
|
+
}
|
|
241
705
|
function resolveWorkspacePackageImportSpecifier(specifier) {
|
|
242
706
|
if (!specifier.startsWith("@holo-js/")) {
|
|
243
707
|
return void 0;
|
|
@@ -341,11 +805,12 @@ async function bundleProjectModule(projectRoot, entryPath, options = {}) {
|
|
|
341
805
|
outfile,
|
|
342
806
|
format: "esm",
|
|
343
807
|
logLevel: "silent",
|
|
344
|
-
packages: "external",
|
|
808
|
+
packages: options.bundleDependencies ? "bundle" : "external",
|
|
345
809
|
platform: "node",
|
|
346
810
|
target: "node20",
|
|
347
811
|
tsconfig: tsconfigPath,
|
|
348
812
|
sourcemap: false,
|
|
813
|
+
plugins: options.bundleDependencies ? [createHoloPackageBundlerPlugin(projectRoot)] : [],
|
|
349
814
|
external: [...options.external ?? []]
|
|
350
815
|
});
|
|
351
816
|
return {
|
|
@@ -415,6 +880,21 @@ function setProjectModuleBundlerForTesting(bundler) {
|
|
|
415
880
|
}
|
|
416
881
|
|
|
417
882
|
export {
|
|
883
|
+
HOLO_PACKAGE_VERSION,
|
|
884
|
+
ESBUILD_PACKAGE_VERSION,
|
|
885
|
+
SCAFFOLD_PACKAGE_MANAGER_VERSIONS,
|
|
886
|
+
SCAFFOLD_BASE_DEV_DEPENDENCY_VERSIONS,
|
|
887
|
+
IOREDIS_PACKAGE_VERSION,
|
|
888
|
+
getFrameworkDescriptor,
|
|
889
|
+
isSupportedFrameworkId,
|
|
890
|
+
getFrameworkDescriptorByIdFrom,
|
|
891
|
+
getFrameworkDescriptorsWith,
|
|
892
|
+
detectFrameworkDescriptorFromPackageJson,
|
|
893
|
+
getFrameworkRuntimeDependencyVersion,
|
|
894
|
+
getFrameworkBroadcastPackages,
|
|
895
|
+
getFrameworkBroadcastPackagesFromDescriptor,
|
|
896
|
+
frameworkDescriptorSupportsManagedBroadcastAuthRoute,
|
|
897
|
+
getManagedFrameworkPackageNames,
|
|
418
898
|
SUPPORTED_AUTH_SOCIAL_PROVIDERS,
|
|
419
899
|
AUTH_SOCIAL_PROVIDER_PACKAGE_NAMES,
|
|
420
900
|
APP_CONFIG_FILE_NAMES,
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// src/database-drivers.ts
|
|
2
|
+
import { createRequire } from "module";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { pathToFileURL } from "url";
|
|
5
|
+
import { registerDatabaseDriverFactory } from "@holo-js/db";
|
|
6
|
+
async function loadProjectDatabaseDrivers(projectRoot, config) {
|
|
7
|
+
const packageByDriver = {
|
|
8
|
+
sqlite: { packageName: "@holo-js/db-sqlite", factoryExport: "sqliteDatabaseDriverFactory" },
|
|
9
|
+
postgres: { packageName: "@holo-js/db-postgres", factoryExport: "postgresDatabaseDriverFactory" },
|
|
10
|
+
mysql: { packageName: "@holo-js/db-mysql", factoryExport: "mysqlDatabaseDriverFactory" }
|
|
11
|
+
};
|
|
12
|
+
const connections = Object.values(config?.connections ?? { default: "./data/database.sqlite" });
|
|
13
|
+
const drivers = /* @__PURE__ */ new Set();
|
|
14
|
+
for (const connection of connections) {
|
|
15
|
+
const driver = (() => {
|
|
16
|
+
if (typeof connection === "string") {
|
|
17
|
+
if (connection.startsWith("postgres://") || connection.startsWith("postgresql://")) return "postgres";
|
|
18
|
+
if (connection.startsWith("mysql://") || connection.startsWith("mysql2://")) return "mysql";
|
|
19
|
+
return "sqlite";
|
|
20
|
+
}
|
|
21
|
+
return connection.driver ?? "sqlite";
|
|
22
|
+
})();
|
|
23
|
+
if (!(driver in packageByDriver)) throw new Error(`Unsupported Holo database driver "${driver}".`);
|
|
24
|
+
drivers.add(driver);
|
|
25
|
+
}
|
|
26
|
+
const require2 = createRequire(join(projectRoot, "package.json"));
|
|
27
|
+
const factories = [];
|
|
28
|
+
for (const driver of drivers) {
|
|
29
|
+
const { packageName, factoryExport } = packageByDriver[driver];
|
|
30
|
+
const module = await import(pathToFileURL(require2.resolve(packageName)).href);
|
|
31
|
+
const factory = module[factoryExport];
|
|
32
|
+
if (!factory) throw new Error(`Database driver package ${packageName} does not export ${factoryExport}.`);
|
|
33
|
+
registerDatabaseDriverFactory(factory);
|
|
34
|
+
factories.push(factory);
|
|
35
|
+
}
|
|
36
|
+
return factories;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export {
|
|
40
|
+
loadProjectDatabaseDrivers
|
|
41
|
+
};
|
|
@@ -6,7 +6,10 @@ function writeLine(stream, message = "") {
|
|
|
6
6
|
}
|
|
7
7
|
async function runWithSpinner(io, message, task, successMessage = message) {
|
|
8
8
|
if (!supportsSpinner(io)) {
|
|
9
|
-
|
|
9
|
+
writeLine(io.stdout, message);
|
|
10
|
+
const result = await task();
|
|
11
|
+
writeLine(io.stdout, successMessage);
|
|
12
|
+
return result;
|
|
10
13
|
}
|
|
11
14
|
const loading = spinner({
|
|
12
15
|
input: io.stdin,
|
|
@@ -28,6 +31,5 @@ function supportsSpinner(io) {
|
|
|
28
31
|
|
|
29
32
|
export {
|
|
30
33
|
writeLine,
|
|
31
|
-
runWithSpinner
|
|
32
|
-
supportsSpinner
|
|
34
|
+
runWithSpinner
|
|
33
35
|
};
|
|
@@ -251,6 +251,7 @@ async function resolveNewProjectInput(io, input, prompts = {
|
|
|
251
251
|
prompt: (label) => prompt(io, label),
|
|
252
252
|
choose: (label, allowed, defaultValue) => promptChoice(io, label, allowed, defaultValue),
|
|
253
253
|
optionalPackages: () => promptOptionalPackages(io)
|
|
254
|
+
}, validateProjectName = async () => {
|
|
254
255
|
}) {
|
|
255
256
|
const flagProjectName = resolveStringFlag(input.flags, "name");
|
|
256
257
|
const positionalProjectName = input.args[0]?.trim();
|
|
@@ -262,6 +263,7 @@ async function resolveNewProjectInput(io, input, prompts = {
|
|
|
262
263
|
if (!projectName) {
|
|
263
264
|
throw new Error(interactive ? "Project creation cancelled." : "Missing required argument: Project name.");
|
|
264
265
|
}
|
|
266
|
+
await validateProjectName(projectName);
|
|
265
267
|
const framework = resolveStringFlag(input.flags, "framework") ? normalizeChoice(resolveStringFlag(input.flags, "framework"), SUPPORTED_NEW_FRAMEWORKS, "framework") : interactive ? await prompts.choose("Framework", SUPPORTED_NEW_FRAMEWORKS, "nuxt") : "nuxt";
|
|
266
268
|
const databaseDriver = resolveStringFlag(input.flags, "database") ? normalizeChoice(resolveStringFlag(input.flags, "database"), SUPPORTED_NEW_DATABASE_DRIVERS, "database driver") : interactive ? await prompts.choose("Database driver", SUPPORTED_NEW_DATABASE_DRIVERS, "sqlite") : "sqlite";
|
|
267
269
|
const packageManager = resolveStringFlag(input.flags, "package-manager") ? normalizeChoice(resolveStringFlag(input.flags, "package-manager"), SUPPORTED_NEW_PACKAGE_MANAGERS, "package manager") : interactive ? await prompts.choose("Package manager", SUPPORTED_NEW_PACKAGE_MANAGERS, "npm") : "npm";
|
|
@@ -7,11 +7,11 @@ import {
|
|
|
7
7
|
serializeDatabaseConfig,
|
|
8
8
|
serializeProjectConfig,
|
|
9
9
|
writeProjectConfig
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-4VYR2ARA.mjs";
|
|
11
|
+
import "./chunk-L3YATEQY.mjs";
|
|
12
12
|
import {
|
|
13
13
|
readTextFile
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-PVVGQSUP.mjs";
|
|
15
15
|
export {
|
|
16
16
|
defaultProjectConfig,
|
|
17
17
|
ensureGeneratedSchemaPlaceholder,
|
|
@@ -14,16 +14,17 @@ import {
|
|
|
14
14
|
runProjectPrepare,
|
|
15
15
|
runProjectStartServer,
|
|
16
16
|
toPosixSlashes
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-L6FF22IV.mjs";
|
|
18
18
|
import {
|
|
19
19
|
hasProjectDependency
|
|
20
|
-
} from "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
20
|
+
} from "./chunk-CT23GSEC.mjs";
|
|
21
|
+
import "./chunk-FFTJKBQF.mjs";
|
|
22
|
+
import "./chunk-4VYR2ARA.mjs";
|
|
23
|
+
import "./chunk-7KZVFDSI.mjs";
|
|
24
|
+
import "./chunk-L3YATEQY.mjs";
|
|
25
|
+
import "./chunk-3ICVWL2M.mjs";
|
|
26
|
+
import "./chunk-AZ6NVJAP.mjs";
|
|
27
|
+
import "./chunk-PVVGQSUP.mjs";
|
|
27
28
|
export {
|
|
28
29
|
collectDirectoryTree,
|
|
29
30
|
collectDiscoveryWatchRoots,
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
|
-
collectImportedBindingsBySource,
|
|
3
2
|
discoverAppCommands,
|
|
4
|
-
extractListensToItems,
|
|
5
3
|
loadRegisteredMigrations,
|
|
6
4
|
loadRegisteredModels,
|
|
7
5
|
loadRegisteredSeeders,
|
|
8
|
-
prepareProjectDiscovery
|
|
6
|
+
prepareProjectDiscovery
|
|
7
|
+
} from "./chunk-7KZVFDSI.mjs";
|
|
8
|
+
import "./chunk-L3YATEQY.mjs";
|
|
9
|
+
import {
|
|
10
|
+
collectImportedBindingsBySource,
|
|
11
|
+
extractListensToItems,
|
|
9
12
|
resolveListenerEventNamesForDiscovery,
|
|
10
13
|
resolveListenerEventNamesFromSource,
|
|
11
14
|
resolveNamedExport,
|
|
12
15
|
resolveNamedExportEntry
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-ILU426CF.mjs";
|
|
16
|
+
} from "./chunk-AZ6NVJAP.mjs";
|
|
17
|
+
import "./chunk-PVVGQSUP.mjs";
|
|
16
18
|
export {
|
|
17
19
|
collectImportedBindingsBySource,
|
|
18
20
|
discoverAppCommands,
|