@ykdz/template 0.0.4 → 0.0.6

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.
Files changed (46) hide show
  1. package/dist/src/cli.js +79 -34
  2. package/dist/src/declarations.d.ts +36 -0
  3. package/dist/src/declarations.js +31 -2
  4. package/dist/src/generated-scenarios.d.ts +62 -0
  5. package/dist/src/generated-scenarios.js +361 -0
  6. package/dist/src/module-graph.d.ts +1 -1
  7. package/dist/src/module-graph.js +10 -2
  8. package/dist/src/package-addition-support.d.ts +5 -0
  9. package/dist/src/package-addition-support.js +4 -0
  10. package/dist/src/package-addition.d.ts +1 -0
  11. package/dist/src/package-addition.js +409 -69
  12. package/dist/src/package-linking.d.ts +55 -0
  13. package/dist/src/package-linking.js +116 -0
  14. package/dist/src/preset-projection.d.ts +4 -1
  15. package/dist/src/preset-source.d.ts +430 -0
  16. package/dist/src/preset-source.js +940 -0
  17. package/dist/src/projection-capabilities.d.ts +67 -0
  18. package/dist/src/projection-capabilities.js +2207 -0
  19. package/dist/src/renderer.js +20 -1
  20. package/dist/src/template-boundary-check.d.ts +7 -3
  21. package/dist/src/template-boundary-check.js +104 -10
  22. package/package.json +3 -2
  23. package/templates/hono-api/src/server.ts +1 -1
  24. package/templates/hono-api/test/app.test.ts +1 -1
  25. package/templates/preset-source.json +499 -0
  26. package/templates/ts-lib/src/index.ts +2 -2
  27. package/templates/ts-lib/src/name-schema.ts +3 -0
  28. package/templates/vue-app/playwright.package-addition.config.ts +22 -0
  29. package/templates/vue-app/src/App.vue +1 -1
  30. package/templates/vue-app/test/app.test.ts +1 -1
  31. package/templates/vue-hono-app/web/src/App.vue +2 -2
  32. package/templates/vue-hono-app/web/test/app.test.ts +1 -1
  33. package/dist/templates/hono-api/projection.d.ts +0 -6
  34. package/dist/templates/hono-api/projection.js +0 -538
  35. package/dist/templates/projection-plans.d.ts +0 -7
  36. package/dist/templates/projection-plans.js +0 -94
  37. package/dist/templates/registry.d.ts +0 -7
  38. package/dist/templates/registry.js +0 -42
  39. package/dist/templates/rust-bin/projection.d.ts +0 -9
  40. package/dist/templates/rust-bin/projection.js +0 -390
  41. package/dist/templates/ts-lib/projection.d.ts +0 -6
  42. package/dist/templates/ts-lib/projection.js +0 -523
  43. package/dist/templates/vue-app/projection.d.ts +0 -6
  44. package/dist/templates/vue-app/projection.js +0 -757
  45. package/dist/templates/vue-hono-app/projection.d.ts +0 -8
  46. package/dist/templates/vue-hono-app/projection.js +0 -693
@@ -0,0 +1,499 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "name": "built-in",
4
+ "sharedResources": [
5
+ {
6
+ "id": "shared-devcontainer",
7
+ "path": "shared/devcontainer"
8
+ },
9
+ {
10
+ "id": "shared-editor-customization",
11
+ "path": "shared/editor-customization/capabilities.json"
12
+ },
13
+ {
14
+ "id": "shared-oxc-node",
15
+ "path": "shared/oxc/node"
16
+ },
17
+ {
18
+ "id": "shared-oxc-format",
19
+ "path": "shared/oxc/oxfmt.config.ts"
20
+ },
21
+ {
22
+ "id": "shared-oxc-vue",
23
+ "path": "shared/oxc/vue"
24
+ }
25
+ ],
26
+ "fixtureMatrix": {
27
+ "initSupport": [
28
+ { "preset": "ts-lib" },
29
+ { "preset": "hono-api" },
30
+ { "preset": "vue-app" },
31
+ { "preset": "vue-hono-app" },
32
+ { "preset": "rust-bin" }
33
+ ],
34
+ "packageAdditionSupport": [
35
+ {
36
+ "preset": "ts-lib",
37
+ "packageLeafName": "fixture-lib"
38
+ },
39
+ {
40
+ "preset": "hono-api",
41
+ "packageLeafName": "fixture-api"
42
+ },
43
+ {
44
+ "preset": "vue-app",
45
+ "packageLeafName": "fixture-web"
46
+ }
47
+ ],
48
+ "supportedCombinations": [
49
+ { "basePreset": "ts-lib", "addedPreset": "ts-lib" },
50
+ { "basePreset": "ts-lib", "addedPreset": "hono-api" },
51
+ { "basePreset": "ts-lib", "addedPreset": "vue-app" },
52
+ { "basePreset": "hono-api", "addedPreset": "ts-lib" },
53
+ { "basePreset": "hono-api", "addedPreset": "hono-api" },
54
+ { "basePreset": "hono-api", "addedPreset": "vue-app" },
55
+ { "basePreset": "vue-app", "addedPreset": "ts-lib" },
56
+ { "basePreset": "vue-app", "addedPreset": "hono-api" },
57
+ { "basePreset": "vue-app", "addedPreset": "vue-app" },
58
+ { "basePreset": "vue-hono-app", "addedPreset": "ts-lib" },
59
+ {
60
+ "basePreset": "vue-hono-app",
61
+ "addedPreset": "ts-lib",
62
+ "linkFrom": ["apps/web"]
63
+ },
64
+ { "basePreset": "vue-hono-app", "addedPreset": "hono-api" },
65
+ { "basePreset": "vue-hono-app", "addedPreset": "vue-app" },
66
+ { "basePreset": "rust-bin", "addedPreset": "ts-lib" },
67
+ { "basePreset": "rust-bin", "addedPreset": "hono-api" },
68
+ { "basePreset": "rust-bin", "addedPreset": "vue-app" }
69
+ ],
70
+ "semanticSkips": [
71
+ {
72
+ "basePreset": "ts-lib",
73
+ "addedPreset": "vue-hono-app",
74
+ "reason": "vue-hono-app is an initialization-only full-stack preset."
75
+ },
76
+ {
77
+ "basePreset": "ts-lib",
78
+ "addedPreset": "rust-bin",
79
+ "reason": "rust-bin is an initialization-only native binary preset."
80
+ },
81
+ {
82
+ "basePreset": "hono-api",
83
+ "addedPreset": "vue-hono-app",
84
+ "reason": "vue-hono-app is an initialization-only full-stack preset."
85
+ },
86
+ {
87
+ "basePreset": "hono-api",
88
+ "addedPreset": "rust-bin",
89
+ "reason": "rust-bin is an initialization-only native binary preset."
90
+ },
91
+ {
92
+ "basePreset": "vue-app",
93
+ "addedPreset": "vue-hono-app",
94
+ "reason": "vue-hono-app is an initialization-only full-stack preset."
95
+ },
96
+ {
97
+ "basePreset": "vue-app",
98
+ "addedPreset": "rust-bin",
99
+ "reason": "rust-bin is an initialization-only native binary preset."
100
+ },
101
+ {
102
+ "basePreset": "vue-hono-app",
103
+ "addedPreset": "vue-hono-app",
104
+ "reason": "vue-hono-app is an initialization-only full-stack preset."
105
+ },
106
+ {
107
+ "basePreset": "vue-hono-app",
108
+ "addedPreset": "rust-bin",
109
+ "reason": "rust-bin is an initialization-only native binary preset."
110
+ },
111
+ {
112
+ "basePreset": "rust-bin",
113
+ "addedPreset": "vue-hono-app",
114
+ "reason": "vue-hono-app is an initialization-only full-stack preset."
115
+ },
116
+ {
117
+ "basePreset": "rust-bin",
118
+ "addedPreset": "rust-bin",
119
+ "reason": "rust-bin is an initialization-only native binary preset."
120
+ }
121
+ ],
122
+ "checkRequirements": ["machine-verifiable-next-steps", "root-check-ci"],
123
+ "environmentPreparation": ["playwright-browser-assets"]
124
+ },
125
+ "presets": [
126
+ {
127
+ "name": "ts-lib",
128
+ "title": "TypeScript library",
129
+ "description": "Strict TypeScript package with pnpm catalog tooling.",
130
+ "generation": "supported",
131
+ "supportedPackageManagers": ["pnpm"],
132
+ "supportedProjectKinds": ["multi-package"],
133
+ "packageAdditionSupport": "supported",
134
+ "features": [
135
+ "pnpm-catalog",
136
+ "oxc-format-lint",
137
+ "strict-typescript",
138
+ "root-check",
139
+ "fix-command",
140
+ "devcontainer",
141
+ "github-actions",
142
+ "dependabot"
143
+ ],
144
+ "dependencyCatalog": [
145
+ "@types/node",
146
+ "oxfmt",
147
+ "oxlint",
148
+ "turbo",
149
+ "typescript",
150
+ "valibot"
151
+ ],
152
+ "projection": {
153
+ "capabilities": [
154
+ {
155
+ "kind": "workspace-library-package",
156
+ "workspacePackageGlob": "packages/*",
157
+ "packageRole": "shared-library",
158
+ "packageSourcePreset": "ts-lib",
159
+ "sourceFiles": ["src/index.ts", "src/name-schema.ts"]
160
+ },
161
+ { "kind": "strict-typescript-root" },
162
+ { "kind": "oxc-format-lint" },
163
+ { "kind": "node-pnpm-devcontainer" },
164
+ { "kind": "github-maintenance" }
165
+ ]
166
+ },
167
+ "source": {
168
+ "roots": ["ts-lib/.github", "ts-lib/src"],
169
+ "sharedResources": [
170
+ "shared-devcontainer",
171
+ "shared-editor-customization",
172
+ "shared-oxc-node",
173
+ "shared-oxc-format"
174
+ ]
175
+ }
176
+ },
177
+ {
178
+ "name": "hono-api",
179
+ "title": "Hono API",
180
+ "description": "Hono Node API workspace with strict TypeScript tooling.",
181
+ "generation": "supported",
182
+ "supportedPackageManagers": ["pnpm"],
183
+ "supportedProjectKinds": ["multi-package"],
184
+ "packageAdditionSupport": "supported",
185
+ "features": [
186
+ "pnpm-catalog",
187
+ "oxc-format-lint",
188
+ "strict-typescript",
189
+ "root-check",
190
+ "fix-command",
191
+ "devcontainer",
192
+ "github-actions",
193
+ "dependabot"
194
+ ],
195
+ "dependencyCatalog": [
196
+ "@hono/node-server",
197
+ "@types/node",
198
+ "hono",
199
+ "oxfmt",
200
+ "oxlint",
201
+ "tsc-alias",
202
+ "turbo",
203
+ "typescript",
204
+ "vitest"
205
+ ],
206
+ "projection": {
207
+ "capabilities": [
208
+ {
209
+ "kind": "workspace-node-packages",
210
+ "workspacePackageGlob": "apps/*",
211
+ "packages": [
212
+ {
213
+ "kind": "hono-api",
214
+ "path": "apps/api",
215
+ "sourceFiles": [
216
+ "src/app.ts",
217
+ "src/server.ts",
218
+ "test/app.test.ts",
219
+ "vitest.config.ts"
220
+ ]
221
+ }
222
+ ]
223
+ },
224
+ { "kind": "strict-typescript-root" },
225
+ { "kind": "oxc-format-lint" },
226
+ { "kind": "node-pnpm-devcontainer" },
227
+ { "kind": "github-maintenance" }
228
+ ]
229
+ },
230
+ "source": {
231
+ "roots": ["hono-api/.github", "hono-api/src", "hono-api/test"],
232
+ "files": ["hono-api/vitest.config.ts"],
233
+ "sharedResources": [
234
+ "shared-devcontainer",
235
+ "shared-editor-customization",
236
+ "shared-oxc-node",
237
+ "shared-oxc-format"
238
+ ]
239
+ }
240
+ },
241
+ {
242
+ "name": "vue-app",
243
+ "title": "Vue app",
244
+ "description": "Vue app workspace with Vite, Tailwind, Pinia, and test tooling.",
245
+ "generation": "supported",
246
+ "supportedPackageManagers": ["pnpm"],
247
+ "supportedProjectKinds": ["multi-package"],
248
+ "packageAdditionSupport": "supported",
249
+ "features": [
250
+ "pnpm-catalog",
251
+ "oxc-format-lint",
252
+ "strict-typescript",
253
+ "root-check",
254
+ "fix-command",
255
+ "devcontainer",
256
+ "github-actions",
257
+ "dependabot"
258
+ ],
259
+ "dependencyCatalog": [
260
+ "@playwright/test",
261
+ "@tailwindcss/vite",
262
+ "@types/node",
263
+ "@types/web-bluetooth",
264
+ "@vitejs/plugin-vue",
265
+ "@vue/tsconfig",
266
+ "@vueuse/core",
267
+ "oxfmt",
268
+ "oxlint",
269
+ "pinia",
270
+ "tailwindcss",
271
+ "turbo",
272
+ "typescript",
273
+ "vite",
274
+ "vitest",
275
+ "vue",
276
+ "vue-tsc"
277
+ ],
278
+ "projection": {
279
+ "capabilities": [
280
+ {
281
+ "kind": "workspace-node-packages",
282
+ "workspacePackageGlob": "apps/*",
283
+ "packages": [
284
+ {
285
+ "kind": "vue-app",
286
+ "path": "apps/web",
287
+ "sourceFiles": [
288
+ "env.d.ts",
289
+ "index.html",
290
+ "playwright.config.ts",
291
+ "vite.config.ts",
292
+ "vitest.config.ts",
293
+ "src/App.vue",
294
+ "src/main.ts",
295
+ "src/style.css",
296
+ "src/stores/counter.ts",
297
+ "test/app.test.ts",
298
+ "test/e2e/app.spec.ts"
299
+ ]
300
+ }
301
+ ]
302
+ },
303
+ { "kind": "strict-typescript-root" },
304
+ { "kind": "oxc-format-lint" },
305
+ { "kind": "node-pnpm-devcontainer" },
306
+ { "kind": "github-maintenance" }
307
+ ]
308
+ },
309
+ "source": {
310
+ "roots": ["vue-app/.github", "vue-app/src", "vue-app/test"],
311
+ "files": [
312
+ "vue-app/env.d.ts",
313
+ "vue-app/index.html",
314
+ "vue-app/playwright.package-addition.config.ts",
315
+ "vue-app/playwright.config.ts",
316
+ "vue-app/vite.config.ts",
317
+ "vue-app/vitest.config.ts"
318
+ ],
319
+ "sharedResources": [
320
+ "shared-devcontainer",
321
+ "shared-editor-customization",
322
+ "shared-oxc-format",
323
+ "shared-oxc-vue"
324
+ ]
325
+ }
326
+ },
327
+ {
328
+ "name": "vue-hono-app",
329
+ "title": "Vue Hono app",
330
+ "description": "Full-stack Vue and Hono workspace with Hono RPC typing.",
331
+ "generation": "supported",
332
+ "supportedPackageManagers": ["pnpm"],
333
+ "supportedProjectKinds": ["multi-package"],
334
+ "packageAdditionSupport": "unsupported",
335
+ "features": [
336
+ "pnpm-catalog",
337
+ "oxc-format-lint",
338
+ "strict-typescript",
339
+ "root-check",
340
+ "fix-command",
341
+ "devcontainer",
342
+ "github-actions",
343
+ "dependabot"
344
+ ],
345
+ "dependencyCatalog": [
346
+ "@hono/node-server",
347
+ "@playwright/test",
348
+ "@tailwindcss/vite",
349
+ "@types/node",
350
+ "@types/web-bluetooth",
351
+ "@vitejs/plugin-vue",
352
+ "@vue/tsconfig",
353
+ "@vueuse/core",
354
+ "hono",
355
+ "oxfmt",
356
+ "oxlint",
357
+ "pinia",
358
+ "tailwindcss",
359
+ "tsc-alias",
360
+ "tsx",
361
+ "turbo",
362
+ "typescript",
363
+ "vite",
364
+ "vitest",
365
+ "vue",
366
+ "vue-tsc"
367
+ ],
368
+ "projection": {
369
+ "capabilities": [
370
+ {
371
+ "kind": "workspace-node-packages",
372
+ "workspacePackageGlob": "apps/*",
373
+ "packages": [
374
+ {
375
+ "kind": "vue-app",
376
+ "path": "apps/web",
377
+ "sourceFiles": [
378
+ "web/env.d.ts",
379
+ "web/index.html",
380
+ "web/playwright.config.ts",
381
+ "web/vite.config.ts",
382
+ "web/vitest.config.ts",
383
+ "web/src/api.ts",
384
+ "web/src/App.vue",
385
+ "web/src/main.ts",
386
+ "web/src/style.css",
387
+ "web/src/stores/counter.ts",
388
+ "web/test/app.test.ts",
389
+ "web/test/e2e/app.spec.ts"
390
+ ]
391
+ },
392
+ {
393
+ "kind": "hono-api",
394
+ "path": "apps/api",
395
+ "sourceFiles": [
396
+ "api/src/index.ts",
397
+ "api/src/runtime.ts",
398
+ "api/src/server.ts",
399
+ "api/test/app.test.ts",
400
+ "api/vitest.config.ts"
401
+ ]
402
+ }
403
+ ],
404
+ "packageLinks": [
405
+ {
406
+ "consumerPackagePath": "apps/web",
407
+ "providerPackagePath": "apps/api"
408
+ }
409
+ ]
410
+ },
411
+ { "kind": "strict-typescript-root" },
412
+ { "kind": "oxc-format-lint" },
413
+ { "kind": "node-pnpm-devcontainer" },
414
+ { "kind": "github-maintenance" }
415
+ ]
416
+ },
417
+ "source": {
418
+ "roots": [
419
+ "vue-hono-app/.github",
420
+ "vue-hono-app/api/src",
421
+ "vue-hono-app/api/test",
422
+ "vue-hono-app/web/src",
423
+ "vue-hono-app/web/test"
424
+ ],
425
+ "files": [
426
+ "vue-hono-app/api/vitest.config.ts",
427
+ "vue-hono-app/web/env.d.ts",
428
+ "vue-hono-app/web/index.html",
429
+ "vue-hono-app/web/playwright.config.ts",
430
+ "vue-hono-app/web/vite.config.ts",
431
+ "vue-hono-app/web/vitest.config.ts"
432
+ ],
433
+ "sharedResources": [
434
+ "shared-devcontainer",
435
+ "shared-editor-customization",
436
+ "shared-oxc-node",
437
+ "shared-oxc-format",
438
+ "shared-oxc-vue"
439
+ ]
440
+ }
441
+ },
442
+ {
443
+ "name": "rust-bin",
444
+ "title": "Rust binary",
445
+ "description": "Rust native binary workspace with rustfmt, clippy, and cargo tests.",
446
+ "generation": "supported",
447
+ "supportedPackageManagers": ["pnpm"],
448
+ "supportedProjectKinds": ["multi-package"],
449
+ "packageAdditionSupport": "unsupported",
450
+ "features": [
451
+ "root-check",
452
+ "fix-command",
453
+ "devcontainer",
454
+ "github-actions",
455
+ "dependabot",
456
+ "rustfmt-clippy",
457
+ "cargo-test"
458
+ ],
459
+ "dependencyCatalog": ["turbo"],
460
+ "projection": {
461
+ "capabilities": [
462
+ {
463
+ "kind": "rust-binary-workspace",
464
+ "workspacePackageGlob": "packages/*",
465
+ "sourceFiles": ["src/main.rs"]
466
+ }
467
+ ]
468
+ },
469
+ "source": {
470
+ "roots": ["rust-bin/.github", "rust-bin/src"],
471
+ "files": ["rust-bin/rust-toolchain.toml", "rust-bin/rustfmt.toml"],
472
+ "sharedResources": [
473
+ "shared-devcontainer",
474
+ "shared-editor-customization"
475
+ ]
476
+ }
477
+ },
478
+ {
479
+ "name": "ts-app",
480
+ "title": "TypeScript application",
481
+ "description": "Future application preset metadata.",
482
+ "generation": "future",
483
+ "supportedPackageManagers": ["pnpm"],
484
+ "supportedProjectKinds": ["multi-package"],
485
+ "packageAdditionSupport": "unsupported",
486
+ "features": []
487
+ },
488
+ {
489
+ "name": "node-cli",
490
+ "title": "Node.js CLI",
491
+ "description": "Future command-line preset metadata.",
492
+ "generation": "future",
493
+ "supportedPackageManagers": ["pnpm"],
494
+ "supportedProjectKinds": ["multi-package"],
495
+ "packageAdditionSupport": "unsupported",
496
+ "features": []
497
+ }
498
+ ]
499
+ }
@@ -1,11 +1,11 @@
1
1
  import * as v from "valibot";
2
2
 
3
+ import { nameSchema } from "#/name-schema";
4
+
3
5
  export type Greeting = {
4
6
  message: string;
5
7
  };
6
8
 
7
- const nameSchema = v.pipe(v.string(), v.trim(), v.minLength(1));
8
-
9
9
  export function greet(name: string): Greeting {
10
10
  return { message: `Hello, ${v.parse(nameSchema, name)}` };
11
11
  }
@@ -0,0 +1,3 @@
1
+ import * as v from "valibot";
2
+
3
+ export const nameSchema = v.pipe(v.string(), v.trim(), v.minLength(1));
@@ -0,0 +1,22 @@
1
+ import { defineConfig, devices } from "@playwright/test";
2
+
3
+ const previewUrl = "http://127.0.0.1:{{VUE_PREVIEW_PORT}}";
4
+
5
+ export default defineConfig({
6
+ testDir: "./test/e2e",
7
+ use: {
8
+ baseURL: previewUrl,
9
+ trace: "on-first-retry",
10
+ },
11
+ webServer: {
12
+ command: "pnpm run preview --host 127.0.0.1 --port {{VUE_PREVIEW_PORT}}",
13
+ reuseExistingServer: !process.env.CI,
14
+ url: previewUrl,
15
+ },
16
+ projects: [
17
+ {
18
+ name: "chromium",
19
+ use: { ...devices["Desktop Chrome"] },
20
+ },
21
+ ],
22
+ });
@@ -3,7 +3,7 @@ import { usePreferredDark } from "@vueuse/core";
3
3
  import { storeToRefs } from "pinia";
4
4
  import { computed } from "vue";
5
5
 
6
- import { useCounterStore } from "@/stores/counter";
6
+ import { useCounterStore } from "#/stores/counter";
7
7
 
8
8
  const counter = useCounterStore();
9
9
  const { count } = storeToRefs(counter);
@@ -1,6 +1,6 @@
1
1
  import { createPinia, setActivePinia } from "pinia";
2
2
 
3
- import { useCounterStore } from "@/stores/counter";
3
+ import { useCounterStore } from "#/stores/counter";
4
4
 
5
5
  describe("counter store", () => {
6
6
  it("increments the count", () => {
@@ -3,8 +3,8 @@ import { usePreferredDark } from "@vueuse/core";
3
3
  import { storeToRefs } from "pinia";
4
4
  import { computed, onMounted, ref } from "vue";
5
5
 
6
- import { api } from "@/api";
7
- import { useCounterStore } from "@/stores/counter";
6
+ import { api } from "#/api";
7
+ import { useCounterStore } from "#/stores/counter";
8
8
 
9
9
  const counter = useCounterStore();
10
10
  const { count } = storeToRefs(counter);
@@ -1,6 +1,6 @@
1
1
  import { createPinia, setActivePinia } from "pinia";
2
2
 
3
- import { useCounterStore } from "@/stores/counter";
3
+ import { useCounterStore } from "#/stores/counter";
4
4
 
5
5
  describe("counter store", () => {
6
6
  it("increments the count", () => {
@@ -1,6 +0,0 @@
1
- import type { BuiltInPreset, ProjectBlueprint } from "../../src/declarations.js";
2
- import type { PresetBlueprintOptions, PresetProjection } from "../../src/preset-projection.js";
3
- export declare const honoApiPresetMetadata: BuiltInPreset;
4
- export declare function honoApiBlueprint(options?: PresetBlueprintOptions): ProjectBlueprint;
5
- export declare function projectHonoApiPackageScripts(): Record<string, string>;
6
- export declare const honoApiPresetProjection: PresetProjection;