@ogygie/generate 0.0.0-stage → 0.20.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.
- package/LICENSE +21 -0
- package/README.md +39 -2
- package/dist/behavior-binding.d.ts +47 -0
- package/dist/behavior-grammar.d.ts +53 -0
- package/dist/check-spec.d.ts +53 -0
- package/dist/chunk-WVFHAPGC.js +10992 -0
- package/dist/cli/check-command.d.ts +3 -0
- package/dist/cli/fill-command.d.ts +39 -0
- package/dist/cli/generate-command.d.ts +8 -0
- package/dist/cli/generate-screen-command.d.ts +6 -0
- package/dist/cli/output.d.ts +9 -0
- package/dist/cli/preview-command.d.ts +19 -0
- package/dist/cli/project.d.ts +97 -0
- package/dist/cli/run.d.ts +13 -0
- package/dist/cli/run.js +1127 -0
- package/dist/cli/schemas-command.d.ts +31 -0
- package/dist/cli/verify-command.d.ts +3 -0
- package/dist/consumed-feature.d.ts +32 -0
- package/dist/emit/db.d.ts +27 -0
- package/dist/emit/factories.d.ts +14 -0
- package/dist/emit/hole-doc.d.ts +18 -0
- package/dist/emit/hole-tests.d.ts +28 -0
- package/dist/emit/manifest-entry.d.ts +44 -0
- package/dist/emit/mssql/migration.d.ts +2 -0
- package/dist/emit/mssql/repository.d.ts +17 -0
- package/dist/emit/mssql/sql-types.d.ts +23 -0
- package/dist/emit/mssql/statements.d.ts +55 -0
- package/dist/emit/mssql/stub.d.ts +17 -0
- package/dist/emit/names.d.ts +34 -0
- package/dist/emit/plan.d.ts +428 -0
- package/dist/emit/repository.d.ts +16 -0
- package/dist/emit/routes.d.ts +22 -0
- package/dist/emit/runtime.d.ts +47 -0
- package/dist/emit/screen/container.d.ts +17 -0
- package/dist/emit/screen/fixtures.d.ts +14 -0
- package/dist/emit/screen/hole-doc.d.ts +2 -0
- package/dist/emit/screen/previews.d.ts +24 -0
- package/dist/emit/screen/queries.d.ts +10 -0
- package/dist/emit/screen/shared.d.ts +35 -0
- package/dist/emit/screen/spec-contracts.d.ts +10 -0
- package/dist/emit/screen/tests-static.d.ts +21 -0
- package/dist/emit/screen/tests.d.ts +19 -0
- package/dist/emit/screen/views.d.ts +10 -0
- package/dist/emit/screen/writes.d.ts +9 -0
- package/dist/emit/screen-plan.d.ts +187 -0
- package/dist/emit/service.d.ts +18 -0
- package/dist/emit/spec-contracts.d.ts +27 -0
- package/dist/emit/tests.d.ts +3 -0
- package/dist/fill/body.d.ts +26 -0
- package/dist/fill/fill.d.ts +97 -0
- package/dist/fill/model-draw.d.ts +25 -0
- package/dist/generate-feature.d.ts +23 -0
- package/dist/generate-screen.d.ts +19 -0
- package/dist/generation-block.schema.d.ts +1279 -0
- package/dist/hole-shape.d.ts +100 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.js +401 -0
- package/dist/manifest-generation.schema.d.ts +239 -0
- package/dist/motif-catalog.d.ts +175 -0
- package/dist/package-root.d.ts +5 -0
- package/dist/prompt-card.d.ts +3 -0
- package/dist/schema-checks.d.ts +32 -0
- package/dist/schemas/draft.d.ts +111 -0
- package/dist/screen-block.schema.d.ts +146 -0
- package/dist/screen-checks.d.ts +34 -0
- package/dist/screen-grammar.d.ts +36 -0
- package/dist/screen-vocabulary.d.ts +47 -0
- package/dist/spec-sections.d.ts +51 -0
- package/dist/verify-generation.d.ts +93 -0
- package/dist/vocabulary.d.ts +39 -0
- package/dist/zod-introspection.d.ts +119 -0
- package/holes-library/27560e1760bb184c.json +28 -0
- package/holes-library/2c26136fc6bff99a.json +30 -0
- package/holes-library/43a27770407bb38a.json +27 -0
- package/holes-library/46e67880a81012bc.json +27 -0
- package/holes-library/48dc5c44dc2cf3b7.json +32 -0
- package/holes-library/63d0825a61f6f5d3.json +27 -0
- package/holes-library/6784ed6c8e353dac.json +27 -0
- package/holes-library/8b4e4c8f04a5fc6a.json +31 -0
- package/holes-library/README.md +33 -0
- package/holes-library/d3597f50c265ba0c.json +27 -0
- package/holes-library/e48695e16221ff1a.json +32 -0
- package/package.json +59 -3
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hole": "assertSummaryThreeLines",
|
|
3
|
+
"signature": "export function assertSummaryThreeLines(\n input: Pick<CreateTechDecisionInput, \"summary\">,\n): HoleResult<void, \"TECH_DECISION_SUMMARY_TOO_LONG\"> {",
|
|
4
|
+
"signatureHash": "46e67880a81012bc",
|
|
5
|
+
"shape": {
|
|
6
|
+
"kind": "validate",
|
|
7
|
+
"reads": [
|
|
8
|
+
"string"
|
|
9
|
+
],
|
|
10
|
+
"columns": [],
|
|
11
|
+
"codeRole": "operation-refusal",
|
|
12
|
+
"returns": "void"
|
|
13
|
+
},
|
|
14
|
+
"shapeHash": "a7686c995d5c7a29",
|
|
15
|
+
"errorCode": "TECH_DECISION_SUMMARY_TOO_LONG",
|
|
16
|
+
"bodyTemplate": " const lineCount = input.{{read:0}}.split(\"\\n\").length\n if (lineCount > 3) {\n return refuse(\n \"{{code}}\",\n `{{read:0}} has ${lineCount} lines, the limit is three`,\n \"shorten the {{read:0}} to at most three lines\",\n )\n }\n return accept(undefined)",
|
|
17
|
+
"provenance": [
|
|
18
|
+
{
|
|
19
|
+
"hole": "assertSummaryThreeLines",
|
|
20
|
+
"repo": "astorg-ai-pdlc",
|
|
21
|
+
"feature": "decisions-techniques",
|
|
22
|
+
"path": "draw:1",
|
|
23
|
+
"model": "claude-haiku-5-5",
|
|
24
|
+
"date": "2026-10-29"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hole": "axisTargets",
|
|
3
|
+
"signature": "view grade_axis_targets(workspace_id uuid, grade_code text, axis text, target double precision)",
|
|
4
|
+
"signatureHash": "48dc5c44dc2cf3b7",
|
|
5
|
+
"shape": {
|
|
6
|
+
"kind": "view",
|
|
7
|
+
"reads": [
|
|
8
|
+
"table"
|
|
9
|
+
],
|
|
10
|
+
"columns": [
|
|
11
|
+
"uuid",
|
|
12
|
+
"text",
|
|
13
|
+
"text",
|
|
14
|
+
"double precision"
|
|
15
|
+
],
|
|
16
|
+
"codeRole": "none",
|
|
17
|
+
"returns": "view:array"
|
|
18
|
+
},
|
|
19
|
+
"shapeHash": "446ee382d2ed4caa",
|
|
20
|
+
"errorCode": "",
|
|
21
|
+
"bodyTemplate": "create or replace view \"{{view}}\" as\n select t.\"{{column:0}}\", t.\"grade\" as \"{{column:1}}\", left(t.\"criterion_code\", 1) as \"{{column:2}}\", avg(t.\"target_level\")::double precision as \"{{column:3}}\"\n from \"grade_targets\" as t\n where t.\"target_level\" is not null\n group by t.\"{{column:0}}\", t.\"grade\", left(t.\"criterion_code\", 1);",
|
|
22
|
+
"provenance": [
|
|
23
|
+
{
|
|
24
|
+
"hole": "axisTargets",
|
|
25
|
+
"repo": "julienTeam/Ogygie",
|
|
26
|
+
"feature": "referentiel-de-paliers",
|
|
27
|
+
"path": "human",
|
|
28
|
+
"model": null,
|
|
29
|
+
"date": "2026-10-17"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hole": "assertEffectiveDateIsMonthEnd",
|
|
3
|
+
"signature": "export function assertEffectiveDateIsMonthEnd(\n input: Pick<CreateRateInput, \"effectiveDate\">,\n): HoleResult<void, \"RATE_EFFECTIVE_DATE_NOT_MONTH_END\"> {",
|
|
4
|
+
"signatureHash": "63d0825a61f6f5d3",
|
|
5
|
+
"shape": {
|
|
6
|
+
"kind": "validate",
|
|
7
|
+
"reads": [
|
|
8
|
+
"string:date"
|
|
9
|
+
],
|
|
10
|
+
"columns": [],
|
|
11
|
+
"codeRole": "operation-refusal",
|
|
12
|
+
"returns": "void"
|
|
13
|
+
},
|
|
14
|
+
"shapeHash": "319a0c042d79fffa",
|
|
15
|
+
"errorCode": "RATE_EFFECTIVE_DATE_NOT_MONTH_END",
|
|
16
|
+
"bodyTemplate": " // Pure arithmetic on the given ISO date: no clock is read (AGENTS.md principle 5).\n const [year, month, day] = input.{{read:0}}.split(\"-\").map(Number);\n if (year === undefined || month === undefined || day === undefined) {\n return refuse(\n \"{{code}}\",\n `{{read:0}}=${input.{{read:0}}} is not an ISO date`,\n \"Give the effective date as YYYY-MM-DD, on the last calendar day of its month.\",\n );\n }\n const lastDay = new Date(Date.UTC(year, month, 0)).getUTCDate();\n if (day === lastDay) return accept(undefined);\n const monthEnd = `${input.{{read:0}}.slice(0, 8)}${String(lastDay).padStart(2, \"0\")}`;\n return refuse(\n \"{{code}}\",\n `{{read:0}}=${input.{{read:0}}} is not the last calendar day of its month`,\n `Use the month end instead: ${monthEnd}.`,\n );",
|
|
17
|
+
"provenance": [
|
|
18
|
+
{
|
|
19
|
+
"hole": "assertEffectiveDateIsMonthEnd",
|
|
20
|
+
"repo": "julienTeam/Ogygie",
|
|
21
|
+
"feature": "publication-de-taux",
|
|
22
|
+
"path": "human",
|
|
23
|
+
"model": null,
|
|
24
|
+
"date": "2026-10-17"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hole": "assertDecidedOnNotInFuture",
|
|
3
|
+
"signature": "export async function assertDecidedOnNotInFuture(\n input: Pick<CreateTechDecisionInput, \"decidedOn\">,\n clock: Clock,\n): Promise<HoleResult<void, \"TECH_DECISION_DATE_IN_FUTURE\">> {",
|
|
4
|
+
"signatureHash": "6784ed6c8e353dac",
|
|
5
|
+
"shape": {
|
|
6
|
+
"kind": "validate",
|
|
7
|
+
"reads": [
|
|
8
|
+
"string:date"
|
|
9
|
+
],
|
|
10
|
+
"columns": [],
|
|
11
|
+
"codeRole": "operation-refusal",
|
|
12
|
+
"returns": "void"
|
|
13
|
+
},
|
|
14
|
+
"shapeHash": "319a0c042d79fffa",
|
|
15
|
+
"errorCode": "TECH_DECISION_DATE_IN_FUTURE",
|
|
16
|
+
"bodyTemplate": " const today = clock.now().toISOString().slice(0, 10);\n if (input.{{read:0}} > today) {\n return refuse(\n \"{{code}}\",\n `{{read:0}} ${input.{{read:0}}} is after today (${today})`,\n \"Set {{read:0}} to today's date or an earlier date (YYYY-MM-DD)\",\n );\n }\n return accept(undefined);",
|
|
17
|
+
"provenance": [
|
|
18
|
+
{
|
|
19
|
+
"hole": "assertDecidedOnNotInFuture",
|
|
20
|
+
"repo": "astorg-ai-pdlc",
|
|
21
|
+
"feature": "decisions-techniques",
|
|
22
|
+
"path": "draw:1",
|
|
23
|
+
"model": "claude-haiku-5-5",
|
|
24
|
+
"date": "2026-10-29"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hole": "overallTarget",
|
|
3
|
+
"signature": "view grade_overall_targets(workspace_id uuid, grade_code text, overall double precision)",
|
|
4
|
+
"signatureHash": "8b4e4c8f04a5fc6a",
|
|
5
|
+
"shape": {
|
|
6
|
+
"kind": "view",
|
|
7
|
+
"reads": [
|
|
8
|
+
"table"
|
|
9
|
+
],
|
|
10
|
+
"columns": [
|
|
11
|
+
"uuid",
|
|
12
|
+
"text",
|
|
13
|
+
"double precision"
|
|
14
|
+
],
|
|
15
|
+
"codeRole": "none",
|
|
16
|
+
"returns": "view:scalar"
|
|
17
|
+
},
|
|
18
|
+
"shapeHash": "1eb94b4b838d907b",
|
|
19
|
+
"errorCode": "",
|
|
20
|
+
"bodyTemplate": "create or replace view \"{{view}}\" as\n select a.\"{{column:0}}\", a.\"{{column:1}}\", avg(a.\"target\")::double precision as \"{{column:2}}\"\n from \"grade_axis_targets\" as a\n group by a.\"{{column:0}}\", a.\"{{column:1}}\";",
|
|
21
|
+
"provenance": [
|
|
22
|
+
{
|
|
23
|
+
"hole": "overallTarget",
|
|
24
|
+
"repo": "julienTeam/Ogygie",
|
|
25
|
+
"feature": "referentiel-de-paliers",
|
|
26
|
+
"path": "human",
|
|
27
|
+
"model": null,
|
|
28
|
+
"date": "2026-10-17"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# holes-library — les corps de trous retenus (D24)
|
|
2
|
+
|
|
3
|
+
Une entrée par corps retenu, nommée par le hachage de sa signature :
|
|
4
|
+
`sha256(signature)[0:16].json`, la signature étant le texte généré de
|
|
5
|
+
`export function …` à l'accolade ouvrante comprise, telle que `logic.ts` la
|
|
6
|
+
porte sous `// @hole <id>`.
|
|
7
|
+
|
|
8
|
+
```json
|
|
9
|
+
{
|
|
10
|
+
"hole": "<id du trou>",
|
|
11
|
+
"signature": "<signature générée>",
|
|
12
|
+
"signatureHash": "<16 hex — sha256 du texte de la signature>",
|
|
13
|
+
"shape": { "kind": "validate | transform", "reads": ["<type normalisé par position>"], "columns": ["…"], "codeRole": "operation-refusal | motif-rejection", "returns": "void | rows:<n>" },
|
|
14
|
+
"shapeHash": "<16 hex — sha256 du JSON de la forme>",
|
|
15
|
+
"errorCode": "<code que le trou rend>",
|
|
16
|
+
"bodyTemplate": "<corps en gabarit : {{read:n}}, {{column:n}}, {{code}}, {{rowType}} à la place des noms de la feature>",
|
|
17
|
+
"provenance": [{ "hole", "repo", "feature", "path": "library | draw:n | escalate | human", "model": null | "<modèle>", "date" }]
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Deux hachages, deux questions. `signatureHash` : ce corps a-t-il déjà été
|
|
22
|
+
écrit pour CETTE signature ? `shapeHash` : un corps existe-t-il pour cette
|
|
23
|
+
FORME — même kind, mêmes types lus aux mêmes positions, même rôle du code,
|
|
24
|
+
même retour — dans une autre feature, un autre repo ? Un
|
|
25
|
+
`Pick<CreateNavInput, "valuationDate">` et un
|
|
26
|
+
`Pick<CreateRateInput, "effectiveDate">` ont la même forme ; le gabarit
|
|
27
|
+
s'instancie avec les noms de la feature (`instantiateBody`). Les
|
|
28
|
+
« voisins de même forme » de chaque `holes/<id>.gen.md` viennent d'ici.
|
|
29
|
+
|
|
30
|
+
Lot 2 : les entrées sont écrites par `pnpm ogygie:holes-library <feature>`,
|
|
31
|
+
qui enregistre les corps qu'un humain a remplis (chemin `human`, `model: null`).
|
|
32
|
+
La recherche par forme au remplissage, le tirage-vérification et l'escalade
|
|
33
|
+
sont le lot 2 bis.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hole": "deriveDecisionCode",
|
|
3
|
+
"signature": "export function deriveDecisionCode(\n input: Pick<CreateTechDecisionInput, \"title\">,\n): HoleResult<string, \"TECH_DECISION_TITLE_INVALID\"> {",
|
|
4
|
+
"signatureHash": "d3597f50c265ba0c",
|
|
5
|
+
"shape": {
|
|
6
|
+
"kind": "derive",
|
|
7
|
+
"reads": [
|
|
8
|
+
"string"
|
|
9
|
+
],
|
|
10
|
+
"columns": [],
|
|
11
|
+
"codeRole": "operation-refusal",
|
|
12
|
+
"returns": "string:regex"
|
|
13
|
+
},
|
|
14
|
+
"shapeHash": "5a010bdc51bf4608",
|
|
15
|
+
"errorCode": "TECH_DECISION_TITLE_INVALID",
|
|
16
|
+
"bodyTemplate": " // Strip diacritics, then reduce to lowercase ASCII words joined by hyphens.\n const slug = input.{{read:0}}\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n\n // A {{read:0}} with no letter or digit yields an empty code: refuse it.\n if (slug.length === 0) {\n return refuse(\n \"{{code}}\",\n \"The {{read:0}} contains no letter or digit, so no code can be derived from it.\",\n \"Provide a {{read:0}} containing at least one letter or digit.\",\n );\n }\n\n return accept(slug);",
|
|
17
|
+
"provenance": [
|
|
18
|
+
{
|
|
19
|
+
"hole": "deriveDecisionCode",
|
|
20
|
+
"repo": "astorg-ai-pdlc",
|
|
21
|
+
"feature": "decisions-techniques",
|
|
22
|
+
"path": "draw:1",
|
|
23
|
+
"model": "claude-haiku-5-5",
|
|
24
|
+
"date": "2026-10-29"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hole": "parseRateCsv",
|
|
3
|
+
"signature": "export function parseRateCsv(input: { text: string }): HoleResult<ParseRateCsvRow[], \"RATE_IMPORT_REJECTED\"> {",
|
|
4
|
+
"signatureHash": "e48695e16221ff1a",
|
|
5
|
+
"shape": {
|
|
6
|
+
"kind": "transform",
|
|
7
|
+
"reads": [
|
|
8
|
+
"string:text"
|
|
9
|
+
],
|
|
10
|
+
"columns": [
|
|
11
|
+
"enum",
|
|
12
|
+
"string:date",
|
|
13
|
+
"string:date",
|
|
14
|
+
"string:regex"
|
|
15
|
+
],
|
|
16
|
+
"codeRole": "motif-rejection",
|
|
17
|
+
"returns": "rows:4"
|
|
18
|
+
},
|
|
19
|
+
"shapeHash": "1df746df7c922d91",
|
|
20
|
+
"errorCode": "RATE_IMPORT_REJECTED",
|
|
21
|
+
"bodyTemplate": " // Minimal CSV: comma separator, no quotes, the exact header first, every line four cells.\n const columns = [\"{{column:0}}\", \"{{column:1}}\", \"{{column:2}}\", \"{{column:3}}\"] as const;\n const lines = input.text.split(/\\r?\\n/u);\n const header = lines[0] ?? \"\";\n if (header !== columns.join(\",\")) {\n return refuse(\n \"{{code}}\",\n `header is \"${header}\", expected \"${columns.join(\",\")}\"`,\n \"Start the file with the exact header line, the four columns in this order.\",\n 1,\n );\n }\n const rows: {{rowType}}[] = [];\n for (let index = 1; index < lines.length; index += 1) {\n const raw = lines[index] ?? \"\";\n if (raw.trim() === \"\") continue;\n const cells = raw.split(\",\");\n if (cells.length !== columns.length) {\n return refuse(\n \"{{code}}\",\n `line ${index + 1} has ${cells.length} cell(s), expected ${columns.length}`,\n \"Give every line exactly four comma-separated cells, without quotes.\",\n index + 1,\n );\n }\n rows.push({\n line: index + 1,\n cells: {\n {{column:0}}: cells[0] ?? \"\",\n {{column:1}}: cells[1] ?? \"\",\n {{column:2}}: cells[2] ?? \"\",\n {{column:3}}: cells[3] ?? \"\",\n },\n });\n }\n return accept(rows);",
|
|
22
|
+
"provenance": [
|
|
23
|
+
{
|
|
24
|
+
"hole": "parseRateCsv",
|
|
25
|
+
"repo": "julienTeam/Ogygie",
|
|
26
|
+
"feature": "publication-de-taux",
|
|
27
|
+
"path": "human",
|
|
28
|
+
"model": null,
|
|
29
|
+
"date": "2026-10-17"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ogygie/generate",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.20.0",
|
|
4
|
+
"description": "Ogygie generator: reads the `# Génération` block of a spec and its schemas.ts, derives everything deterministic without a model (routes, pipeline, database, factories, tests, screens, previews), fills the typed holes of logic.ts by library, draw and escalation, and draws the first schemas.ts of a new feature — judged by the gates. Sixth package of the lockstep (D55).",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/julienTeam/Ogygie.git",
|
|
10
|
+
"directory": "packages/ogygie-generate"
|
|
11
|
+
},
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"holes-library",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE"
|
|
20
|
+
],
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"default": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./cli": {
|
|
27
|
+
"types": "./dist/cli/run.d.ts",
|
|
28
|
+
"default": "./dist/cli/run.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@ogygie/core": "0.20.0",
|
|
33
|
+
"tsx": "^4.20.0",
|
|
34
|
+
"yaml": "^2.9.0",
|
|
35
|
+
"zod": "^4.0.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@lingui/babel-plugin-lingui-macro": "^5.9.5",
|
|
39
|
+
"@lingui/core": "^5.9.5",
|
|
40
|
+
"@lingui/react": "^5.9.5",
|
|
41
|
+
"@ogygie/ui": "0.20.0",
|
|
42
|
+
"@starter/api": "0.1.0",
|
|
43
|
+
"@tanstack/react-query": "^5.102.2",
|
|
44
|
+
"@tanstack/react-router": "^1.170.32",
|
|
45
|
+
"@types/node": "^24.0.0",
|
|
46
|
+
"@types/react": "^19.2.18",
|
|
47
|
+
"@types/react-dom": "^19.2.4",
|
|
48
|
+
"@vitejs/plugin-react": "^5.2.0",
|
|
49
|
+
"esbuild": "^0.28.0",
|
|
50
|
+
"fastify": "^5.12.7",
|
|
51
|
+
"fastify-type-provider-zod": "^6.1.0",
|
|
52
|
+
"react": "^19.2.8",
|
|
53
|
+
"react-dom": "^19.2.8",
|
|
54
|
+
"typescript": "^5.8.0",
|
|
55
|
+
"vite": "^7.3.6",
|
|
56
|
+
"vitest": "^3.2.0"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "tsx scripts/build.ts",
|
|
60
|
+
"typecheck": "tsc -p tsconfig.json && tsc -p src/testing/__golden__/static-render-product/tsconfig.json"
|
|
61
|
+
}
|
|
6
62
|
}
|