Skip to content

Commit cff2194

Browse files
committed
CCM-12896: Extract a schema-utils utility
1 parent c2cf235 commit cff2194

File tree

17 files changed

+109
-101
lines changed

17 files changed

+109
-101
lines changed

package-lock.json

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
-r requirements.txt
22
pytest>=7.4.0
33
pytest-cov>=4.1.0
4-
pytest-mock>=3.11.0
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
11
datamodel-code-generator>=0.25.0,<1.0.0
2-
pydantic>=2.0.0,<3.0.0
3-
PyYAML>=6.0

src/python-schema-generator/src/__tests__/merge-allof.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable security/detect-non-literal-fs-filename */
22

3-
import { eventSchemasDir } from 'file-utils';
3+
import { eventSchemasDir } from 'utils';
44
import { mergeAllOfInSchemas } from 'merge-allof';
55
import mockFs from 'mock-fs';
66
import { readdirSync } from 'node:fs';

src/python-schema-generator/src/file-utils.ts

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,9 @@
11
// We don't accept user input, so path traversal attacks should not be a risk.
22
/* eslint-disable security/detect-non-literal-fs-filename */
33

4-
import { mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
4+
import { mkdirSync, writeFileSync } from 'node:fs';
55
import path from 'node:path';
66

7-
export const eventSchemasDir = path.resolve(
8-
__dirname,
9-
'..',
10-
'..',
11-
'..',
12-
'schemas',
13-
'digital-letters',
14-
'2025-10-draft',
15-
'events',
16-
);
17-
18-
export const destinationPackageName = 'digital-letters-events';
19-
20-
/**
21-
* Lists all event schema filenames in the digital letters schemas directory.
22-
*
23-
* @returns An array of schema filenames.
24-
*/
25-
export function listEventSchemas(): string[] {
26-
const flattenedSchemaFiles = readdirSync(eventSchemasDir).filter((f) =>
27-
f.endsWith('.flattened.schema.json'),
28-
);
29-
30-
return flattenedSchemaFiles;
31-
}
32-
33-
/**
34-
* Loads and parses a JSON schema from the specified file path.
35-
*
36-
* @param schemaPath The path to the JSON schema file.
37-
* @returns The parsed JSON schema object.
38-
*/
39-
export function loadSchema(schemaPath: string): any {
40-
return JSON.parse(readFileSync(schemaPath, 'utf8'));
41-
}
42-
437
/**
448
* Creates the specified output directory if it doesn't exist.
459
*

src/python-schema-generator/src/merge-allof.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
11
/* eslint-disable no-console */
2-
import {
3-
createOutputDir,
4-
eventSchemasDir,
5-
listEventSchemas,
6-
loadSchema,
7-
writeFile,
8-
} from 'file-utils';
2+
import { createOutputDir, writeFile } from 'file-utils';
93
import mergeAllOf from 'json-schema-merge-allof';
104
import path from 'node:path';
5+
import { eventSchemasDir, listEventSchemas, loadSchema } from 'utils';
116

127
export function mergeAllOfInSchemas(): void {
138
const eventSchemaFilenames = listEventSchemas();

src/typescript-schema-generator/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
"dependencies": {
33
"ajv": "^8.17.1",
44
"ajv-formats": "^3.0.1",
5-
"json-schema-to-typescript": "^15.0.4"
5+
"json-schema-to-typescript": "^15.0.4",
6+
"utils": "^0.0.1"
67
},
78
"description": "A tool to generate Typescript types and standalone validator functions for the application's event schemas.",
89
"devDependencies": {

src/typescript-schema-generator/src/__tests__/generate-types.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
/* eslint-disable security/detect-non-literal-fs-filename */
22

3-
import { destinationPackageName, eventSchemasDir } from 'file-utils';
43
import { generateTypes } from 'generate-types';
54
import { compile } from 'json-schema-to-typescript';
65
import mockFs from 'mock-fs';
76
import { readFileSync, readdirSync } from 'node:fs';
87
import path from 'node:path';
8+
import { destinationPackageName, eventSchemasDir } from 'utils';
99

1010
jest.mock('json-schema-to-typescript');
1111

src/typescript-schema-generator/src/__tests__/generate-validators.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/* eslint-disable security/detect-non-literal-fs-filename */
22
import standaloneCode from 'ajv/dist/standalone';
3-
import { destinationPackageName, eventSchemasDir } from 'file-utils';
43
import { generateValidators } from 'generate-validators';
54
import mockFs from 'mock-fs';
65
import { readFileSync, readdirSync } from 'node:fs';
76
import path from 'node:path';
7+
import { destinationPackageName, eventSchemasDir } from 'utils';
88

99
jest.mock('ajv/dist/2020');
1010
jest.mock('ajv/dist/standalone');

src/typescript-schema-generator/src/file-utils.ts

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,9 @@
11
// We don't accept user input, so path traversal attacks should not be a risk.
22
/* eslint-disable security/detect-non-literal-fs-filename */
33

4-
import { mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
4+
import { mkdirSync, writeFileSync } from 'node:fs';
55
import path from 'node:path';
6-
7-
export const eventSchemasDir = path.resolve(
8-
__dirname,
9-
'..',
10-
'..',
11-
'..',
12-
'schemas',
13-
'digital-letters',
14-
'2025-10-draft',
15-
'events',
16-
);
17-
18-
export const destinationPackageName = 'digital-letters-events';
19-
20-
/**
21-
* Lists all event schema filenames in the digital letters schemas directory.
22-
*
23-
* @returns An array of schema filenames.
24-
*/
25-
export function listEventSchemas(): string[] {
26-
const flattenedSchemaFiles = readdirSync(eventSchemasDir).filter((f) =>
27-
f.endsWith('.flattened.schema.json'),
28-
);
29-
30-
return flattenedSchemaFiles;
31-
}
32-
33-
/**
34-
* Loads and parses a JSON schema from the specified file path.
35-
*
36-
* @param schemaPath The path to the JSON schema file.
37-
* @returns The parsed JSON schema object.
38-
*/
39-
export function loadSchema(schemaPath: string): any {
40-
return JSON.parse(readFileSync(schemaPath, 'utf8'));
41-
}
6+
import { destinationPackageName } from 'utils';
427

438
/**
449
* Creates the specified output directory if it doesn't exist.

0 commit comments

Comments
 (0)