Skip to content

Commit 770f7ff

Browse files
committed
Revert "Break up spec into domain-based zod models."
This reverts commit 7d1536a.
1 parent c4b7d93 commit 770f7ff

File tree

11 files changed

+232
-668
lines changed

11 files changed

+232
-668
lines changed

docs/architecture-decisions/workspace-restructure.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,10 @@ safety-net-openapi/
7373
│ └── clients/ # Generated API clients
7474
│ ├── package.json
7575
│ ├── generated/
76+
│ │ ├── zodios/
7677
│ │ └── postman-collection.json
77-
│ ├── dist-packages/ # Built state packages
7878
│ └── scripts/
79-
│ ├── generate-modular-zod.js
80-
│ ├── build-state-package.js
79+
│ ├── generate-zodios.js
8180
│ └── generate-postman.js
8281
```
8382

docs/reference/project-structure.md

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,11 @@ safety-net-openapi/
5454
│ └── clients/ # Generated API clients
5555
│ ├── package.json
5656
│ ├── scripts/ # Generator scripts
57-
│ │ ├── generate-modular-zod.js # Zod schema generator
58-
│ │ ├── build-state-package.js # State package builder
57+
│ │ ├── generate-zodios.js
5958
│ │ └── generate-postman.js
60-
│ ├── generated/ # Output directory
61-
│ │ └── postman-collection.json
62-
│ ├── dist-packages/ # Built npm packages
63-
│ │ ├── california/
64-
│ │ └── colorado/
65-
│ └── templates/ # Package templates
59+
│ └── generated/ # Output directory
60+
│ ├── zodios/ # TypeScript clients
61+
│ └── postman-collection.json
6662
6763
└── docs/ # Documentation
6864
├── getting-started/ # Persona-based onboarding

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"overlay:list": "npm run overlay:list -w @safety-net/schemas",
2323
"clients:generate": "npm run generate -w @safety-net/clients",
2424
"clients:build-package": "node packages/clients/scripts/build-state-package.js",
25+
"clients:validate": "npm run validate -w @safety-net/clients",
2526
"postman:generate": "npm run postman -w @safety-net/clients",
2627
"mock:start": "npm start -w @safety-net/mock-server",
2728
"mock:start:all": "npm run start:all -w @safety-net/mock-server",

packages/clients/domain-mapping.yaml

Lines changed: 0 additions & 122 deletions
This file was deleted.

packages/clients/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,19 @@
44
"description": "Generated API clients and collections for Safety Net APIs",
55
"type": "module",
66
"scripts": {
7-
"generate": "node scripts/generate-modular-zod.js --all",
7+
"generate": "node scripts/generate-zodios.js",
88
"postman": "node scripts/generate-postman.js",
9-
"build-package": "node scripts/build-state-package.js"
9+
"validate": "tsc --noEmit -p tsconfig.validate.json"
1010
},
1111
"dependencies": {
1212
"@apidevtools/json-schema-ref-parser": "^11.7.2",
1313
"@safety-net/schemas": "*",
14+
"@zodios/core": "^10.9.6",
1415
"js-yaml": "^4.1.0",
1516
"zod": "^3.23.8"
1617
},
1718
"devDependencies": {
19+
"openapi-zod-client": "^1.18.2",
1820
"typescript": "^5.3.3"
1921
}
2022
}

packages/clients/scripts/build-state-package.js

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -110,28 +110,32 @@ async function main() {
110110
console.log('\n1. Resolving state overlay...');
111111
await exec('npm', ['run', 'overlay:resolve', '-w', '@safety-net/schemas', '--', `--state=${state}`]);
112112

113-
// Step 2: Generate modular Zod schemas from overlay-resolved specs
114-
console.log('\n2. Generating modular Zod schemas...');
115-
const specDir = join(repoRoot, 'packages', 'schemas', 'openapi', 'resolved');
116-
const generatorScript = join(clientsRoot, 'scripts', 'generate-modular-zod.js');
117-
const domains = ['applications', 'households', 'incomes', 'persons'];
118-
119-
for (const domain of domains) {
120-
const specPath = join(specDir, `${domain}.yaml`);
121-
const outputPath = join(srcDir, `${domain}.ts`);
122-
if (existsSync(specPath)) {
123-
await exec('node', [generatorScript, specPath, outputPath]);
113+
// Step 2: Generate Zodios clients
114+
console.log('\n2. Generating Zodios clients...');
115+
await exec('npm', ['run', 'clients:generate']);
116+
117+
// Step 3: Copy generated TypeScript files to src/
118+
console.log('\n3. Copying generated clients...');
119+
const generatedDir = join(clientsRoot, 'generated', 'clients', 'zodios');
120+
const clientFiles = ['applications.ts', 'households.ts', 'incomes.ts', 'persons.ts'];
121+
122+
for (const file of clientFiles) {
123+
const srcPath = join(generatedDir, file);
124+
const destPath = join(srcDir, file);
125+
if (existsSync(srcPath)) {
126+
cpSync(srcPath, destPath);
127+
console.log(` Copied ${file}`);
124128
} else {
125-
console.warn(` Warning: ${specPath} not found`);
129+
console.warn(` Warning: ${file} not found`);
126130
}
127131
}
128132

129133
// Copy search helpers utility
130134
cpSync(join(templatesDir, 'search-helpers.ts'), join(srcDir, 'search-helpers.ts'));
131135
console.log(' Copied search-helpers.ts');
132136

133-
// Step 3: Generate package.json and README from templates
134-
console.log('\n3. Generating package metadata...');
137+
// Step 4: Generate package.json from template
138+
console.log('\n4. Generating package.json...');
135139
const packageTemplate = readFileSync(join(templatesDir, 'package.template.json'), 'utf8');
136140
const packageJson = packageTemplate
137141
.replace(/\{\{STATE\}\}/g, state)
@@ -140,27 +144,20 @@ async function main() {
140144
writeFileSync(join(outputDir, 'package.json'), packageJson);
141145
console.log(' Generated package.json');
142146

143-
const readmeTemplate = readFileSync(join(templatesDir, 'README.template.md'), 'utf8');
144-
const readme = readmeTemplate
145-
.replace(/\{\{STATE\}\}/g, state)
146-
.replace(/\{\{STATE_TITLE\}\}/g, stateTitle);
147-
writeFileSync(join(outputDir, 'README.md'), readme);
148-
console.log(' Generated README.md');
149-
150-
// Step 4: Generate index.ts from template
151-
console.log('\n4. Generating index.ts...');
147+
// Step 5: Generate index.ts from template
148+
console.log('\n5. Generating index.ts...');
152149
const indexTemplate = readFileSync(join(templatesDir, 'index.template.ts'), 'utf8');
153150
const indexTs = indexTemplate.replace(/\{\{STATE_TITLE\}\}/g, stateTitle);
154151
writeFileSync(join(srcDir, 'index.ts'), indexTs);
155152
console.log(' Generated index.ts');
156153

157-
// Step 5: Copy tsconfig for compilation
158-
console.log('\n5. Setting up TypeScript compilation...');
154+
// Step 6: Copy tsconfig for compilation
155+
console.log('\n6. Setting up TypeScript compilation...');
159156
cpSync(join(templatesDir, 'tsconfig.build.json'), join(outputDir, 'tsconfig.json'));
160157
console.log(' Copied tsconfig.json');
161158

162-
// Step 6: Compile TypeScript
163-
console.log('\n6. Compiling TypeScript...');
159+
// Step 7: Compile TypeScript
160+
console.log('\n7. Compiling TypeScript...');
164161
await exec('npx', ['tsc'], { cwd: outputDir });
165162
console.log(' Compilation complete');
166163

0 commit comments

Comments
 (0)