@fougere/cli 0.9.2-alpha.0 → 0.10.0-alpha.0

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 (67) hide show
  1. package/app/commands/CheckCommand.ts +3 -2
  2. package/app/commands/ExplainCommand.ts +15 -1
  3. package/app/commands/GraphCommand.ts +25 -1
  4. package/app/commands/LoadCommand.ts +44 -0
  5. package/app/commands/ServeCommand.ts +1 -1
  6. package/dist/bridge.d.ts.map +1 -1
  7. package/dist/bridge.js +24 -4
  8. package/dist/bridge.js.map +1 -1
  9. package/dist/machine.d.ts +1 -1
  10. package/dist/machine.js +1 -1
  11. package/dist/runner.d.ts +9 -1
  12. package/dist/runner.d.ts.map +1 -1
  13. package/dist/runner.js +13 -6
  14. package/dist/runner.js.map +1 -1
  15. package/dist/typescript/{EntityTypes.d.ts → EntityTypes/EntityTypes.d.ts} +1 -4
  16. package/dist/typescript/EntityTypes/EntityTypes.d.ts.map +1 -0
  17. package/dist/typescript/{EntityTypes.js → EntityTypes/EntityTypes.js} +1 -1
  18. package/dist/typescript/EntityTypes/EntityTypes.js.map +1 -0
  19. package/dist/typescript/EntityTypes/EntityTypesOptions.d.ts +5 -0
  20. package/dist/typescript/EntityTypes/EntityTypesOptions.d.ts.map +1 -0
  21. package/dist/typescript/EntityTypes/EntityTypesOptions.js +2 -0
  22. package/dist/typescript/EntityTypes/EntityTypesOptions.js.map +1 -0
  23. package/dist/typescript/FacadeTypes/FacadeTypes.d.ts +9 -0
  24. package/dist/typescript/FacadeTypes/FacadeTypes.d.ts.map +1 -0
  25. package/dist/typescript/{FacadeTypes.js → FacadeTypes/FacadeTypes.js} +1 -1
  26. package/dist/typescript/FacadeTypes/FacadeTypes.js.map +1 -0
  27. package/dist/typescript/FacadeTypes/FacadeTypesOptions.d.ts +6 -0
  28. package/dist/typescript/FacadeTypes/FacadeTypesOptions.d.ts.map +1 -0
  29. package/dist/typescript/FacadeTypes/FacadeTypesOptions.js +2 -0
  30. package/dist/typescript/FacadeTypes/FacadeTypesOptions.js.map +1 -0
  31. package/dist/typescript/FacadeTypes/OpDescriptor.d.ts +8 -0
  32. package/dist/typescript/FacadeTypes/OpDescriptor.d.ts.map +1 -0
  33. package/dist/typescript/FacadeTypes/OpDescriptor.js +2 -0
  34. package/dist/typescript/FacadeTypes/OpDescriptor.js.map +1 -0
  35. package/fronds/analysis/entities/Load.ts +8 -0
  36. package/fronds/analysis/handlers/BuildHandler.ts +25 -2
  37. package/fronds/analysis/handlers/CheckHandler.ts +39 -30
  38. package/fronds/analysis/handlers/DevtoolsHandler.ts +12 -2
  39. package/fronds/analysis/handlers/ExplainHandler.ts +6 -0
  40. package/fronds/analysis/handlers/GraphHandler.ts +6 -3
  41. package/fronds/analysis/handlers/LoadHandler.ts +43 -0
  42. package/fronds/scaffold/handlers/BuildFrondHandler.ts +1 -1
  43. package/fronds/scaffold/handlers/SyncHandler.ts +57 -18
  44. package/fronds/scaffold/services/ProjectWriter.ts +61 -3
  45. package/package.json +15 -8
  46. package/src/bridge.ts +27 -4
  47. package/src/machine.ts +1 -1
  48. package/src/runner.ts +13 -6
  49. package/src/typescript/{EntityTypes.ts → EntityTypes/EntityTypes.ts} +2 -6
  50. package/src/typescript/EntityTypes/EntityTypesOptions.ts +4 -0
  51. package/src/typescript/{FacadeTypes.ts → FacadeTypes/FacadeTypes.ts} +3 -15
  52. package/src/typescript/FacadeTypes/FacadeTypesOptions.ts +5 -0
  53. package/src/typescript/FacadeTypes/OpDescriptor.ts +8 -0
  54. package/templates/blog/fronds/blog/entities/Post.ts +1 -1
  55. package/templates/flat/CLAUDE.md +3 -3
  56. package/templates/frond/CLAUDE.md +3 -3
  57. package/templates/workspace/CLAUDE.md +3 -3
  58. package/dist/typescript/EntityTypes.d.ts.map +0 -1
  59. package/dist/typescript/EntityTypes.js.map +0 -1
  60. package/dist/typescript/FacadeTypes.d.ts +0 -19
  61. package/dist/typescript/FacadeTypes.d.ts.map +0 -1
  62. package/dist/typescript/FacadeTypes.js.map +0 -1
  63. package/templates/apps/nuxt/app/app.vue +0 -25
  64. package/templates/apps/nuxt/app/pages/index.vue +0 -33
  65. package/templates/apps/nuxt/nuxt.config.ts +0 -6
  66. package/templates/apps/nuxt/package.json +0 -19
  67. package/templates/apps/nuxt/tsconfig.json +0 -3
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityTypes.d.ts","sourceRoot":"","sources":["../../src/typescript/EntityTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA2C1F,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAcD,qBAAa,WAAW;IACF,OAAO,CAAC,QAAQ,CAAC,UAAU;IAA/C,OAAO,eAA8D;IAErE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,GAAG,WAAW,CAEnD;IAED,MAAM,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAS/C;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityTypes.js","sourceRoot":"","sources":["../../src/typescript/EntityTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA+C,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,4CAA4C;AAC5C,SAAS,MAAM,CAAC,KAAsB;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC;AAED,+EAA+E;AAC/E,SAAS,UAAU,CAAC,IAAwB,EAAE,KAAsB;IAClE,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC;IACD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1D,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAC/D,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC;QAC7G;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,SAAS,YAAY,CAAC,UAA2C,EAAE,QAA2B;IAC5F,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACpD,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,CAAC;AAOD,mDAAmD;AACnD,SAAS,WAAW,CAAC,UAA4B,EAAE,MAAM,GAAG,EAAE;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;QAC3D,OAAO,GAAG,GAAG,GAAG,MAAM,KAAK,WAAW,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IACnE,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,GAAG,CAAC;AAC9C,CAAC;AAED,MAAM,OAAO,WAAW;IACe,UAAU;IAA/C,YAAqC,UAA4B;0BAA5B,UAAU;IAAqB,CAAC;IAErE,MAAM,CAAC,EAAE,CAAC,UAA4B;QACpC,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,OAAO,GAAuB,EAAE;QACrC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC;QACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;aAClD,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;aAChD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,GAAG,QAAQ,SAAS,IAAI,gCAAgC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,iBAAiB,CAAC;IACxH,CAAC;CACF;AAED,iFAAiF;AACjF,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,2EAA2E,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,19 +0,0 @@
1
- import type { SchemaDescriptor } from '@fougere/schema';
2
- export interface FacadeTypesOptions {
3
- name?: string;
4
- exported?: boolean;
5
- rowType?: string;
6
- }
7
- export interface OpDescriptor {
8
- name: string;
9
- description?: string;
10
- output?: SchemaDescriptor;
11
- cardinality?: 'one' | 'maybe' | 'many' | 'page' | 'none';
12
- }
13
- export declare class FacadeTypes {
14
- private readonly operations;
15
- private constructor();
16
- static of(operations: readonly OpDescriptor[]): FacadeTypes;
17
- render(options?: FacadeTypesOptions): string;
18
- }
19
- //# sourceMappingURL=FacadeTypes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FacadeTypes.d.ts","sourceRoot":"","sources":["../../src/typescript/FacadeTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAC1D;AAcD,qBAAa,WAAW;IACF,OAAO,CAAC,QAAQ,CAAC,UAAU;IAA/C,OAAO,eAAqE;IAE5E,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,YAAY,EAAE,GAAG,WAAW,CAE1D;IAED,MAAM,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAW/C;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FacadeTypes.js","sourceRoot":"","sources":["../../src/typescript/FacadeTypes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAexD,yEAAyE;AACzE,SAAS,YAAY,CAAC,EAAgB,EAAE,OAAe;IACrD,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,MAAM,EAAE,OAAO,GAAG,OAAO,IAAI,CAAC;QACnC,KAAK,MAAM,EAAE,OAAO,GAAG,OAAO,gEAAgE,CAAC;QAC/F,KAAK,OAAO,EAAE,OAAO,GAAG,OAAO,cAAc,CAAC;QAC9C,KAAK,KAAK,EAAE,OAAO,OAAO,CAAC;QAC3B,KAAK,MAAM,EAAE,OAAO,SAAS,CAAC;QAC9B,SAAS,OAAO,SAAS,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,OAAO,WAAW;IACe,UAAU;IAA/C,YAAqC,UAAmC;0BAAnC,UAAU;IAA4B,CAAC;IAE5E,MAAM,CAAC,EAAE,CAAC,UAAmC;QAC3C,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,OAAO,GAAuB,EAAE;QACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAChD,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACtD,OAAO,GAAG,GAAG,KAAK,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,sCAAsC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC;QAC1H,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,QAAQ,aAAa,IAAI,KAAK,CAAC;QACnE,OAAO,GAAG,QAAQ,aAAa,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACpE,CAAC;CACF"}
@@ -1,25 +0,0 @@
1
- <template>
2
- <NuxtPage />
3
- </template>
4
-
5
- <style>
6
- :root { --fg: #1a1a1a; --muted: #6b7280; --border: #e5e7eb; --accent: #2563eb; }
7
- * { box-sizing: border-box; }
8
- body { margin: 0; font-family: system-ui, -apple-system, sans-serif; color: var(--fg); line-height: 1.6; }
9
- .wrap { max-width: 720px; margin: 3rem auto; padding: 0 1.5rem; }
10
- a { color: var(--accent); text-decoration: none; }
11
- a:hover { text-decoration: underline; }
12
- h1 { font-size: 1.6rem; margin-bottom: 0.25rem; }
13
- code { background: #f3f4f6; padding: 0.1rem 0.35rem; border-radius: 4px; font-size: 0.9em; }
14
- table { width: 100%; border-collapse: collapse; margin-top: 1rem; }
15
- th, td { text-align: left; padding: 0.6rem 0.5rem; border-bottom: 1px solid var(--border); }
16
- th { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.03em; color: var(--muted); }
17
- label { display: block; font-size: 0.85rem; margin: 0.9rem 0 0.3rem; color: var(--muted); }
18
- input, textarea { width: 100%; padding: 0.5rem 0.6rem; border: 1px solid var(--border); border-radius: 6px; font: inherit; }
19
- button { padding: 0.5rem 0.9rem; border: 0; border-radius: 6px; background: var(--accent); color: #fff; font: inherit; cursor: pointer; }
20
- button:disabled { opacity: 0.5; cursor: default; }
21
- .badge { font-size: 0.72rem; padding: 0.15rem 0.55rem; border-radius: 999px; background: #f3f4f6; color: var(--muted); }
22
- .badge.published { background: #dcfce7; color: #166534; }
23
- .muted { color: var(--muted); }
24
- .err { color: #b91c1c; font-size: 0.9rem; }
25
- </style>
@@ -1,33 +0,0 @@
1
- <script setup lang="ts">
2
- // The four primitives are auto-imported by @fougere/nuxt — no import line to write.
3
- // They take an ENTITY, so this page names none: what is composed here is yours, and a
4
- // scaffold that guessed at an entity shipped a page that could not run.
5
- //
6
- // import Post from '@fronds/<your-frond>/entities/Post'
7
- // const { items, loading } = await useQuery(Post, 'list')
8
- // const { values, errors, submit } = useFormFor(Post)
9
- // const { execute } = useCommand(Post, 'publish')
10
- const { user } = useCurrentUser();
11
- </script>
12
-
13
- <template>
14
- <main class="wrap">
15
- <h1>🌿 Fougere</h1>
16
- <p class="muted">
17
- The app boots, the fronds are scanned, the surface is mounted. Write a page against
18
- one of your entities — the commented block in this file is the whole API.
19
- </p>
20
- <p class="muted">Reader: <strong>{{ user?.name ?? 'nobody' }}</strong></p>
21
- <p class="muted">What to write, and why: <code>CLAUDE.md</code> at the workspace root.</p>
22
- </main>
23
- </template>
24
-
25
- <style>
26
- :root { --fg: #1a1a1a; --muted: #6b7280; }
27
- * { box-sizing: border-box; }
28
- body { margin: 0; font-family: system-ui, -apple-system, sans-serif; color: var(--fg); line-height: 1.6; }
29
- .wrap { max-width: 720px; margin: 3rem auto; padding: 0 1.5rem; }
30
- h1 { font-size: 1.6rem; margin-bottom: 0.25rem; }
31
- code { background: #f3f4f6; padding: 0.1rem 0.35rem; border-radius: 4px; font-size: 0.9em; }
32
- .muted { color: var(--muted); }
33
- </style>
@@ -1,6 +0,0 @@
1
- export default defineNuxtConfig({
2
- modules: ['@fougere/nuxt'],
3
- // Fronds are shared at the workspace root, two levels up from apps/<name>.
4
- fougere: { root: '../..' },
5
- compatibilityDate: '2026-07-20',
6
- });
@@ -1,19 +0,0 @@
1
- {
2
- "name": "fougere-app",
3
- "private": true,
4
- "type": "module",
5
- "scripts": {
6
- "dev": "nuxt dev",
7
- "build": "nuxt build"
8
- },
9
- "dependencies": {
10
- "@fougere/core": "latest",
11
- "@fougere/nuxt": "latest",
12
- "@fougere/schema": "latest",
13
- "@fougere/defaults": "latest",
14
- "better-sqlite3": "^13.0.3",
15
- "kysely": "^0.28.17",
16
- "nuxt": "^4.5.1",
17
- "@fougere/container": "latest"
18
- }
19
- }
@@ -1,3 +0,0 @@
1
- {
2
- "extends": "./.nuxt/tsconfig.json"
3
- }