Skip to content

Commit 6947650

Browse files
committed
Use JSONValue for JSON properties in generated ontologies
1 parent 3db4341 commit 6947650

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

browser/cli/src/DatatypeToTSTypeMap.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ export const DatatypeToTSTypeMap = {
1212
[Datatype.SLUG]: 'string',
1313
[Datatype.MARKDOWN]: 'string',
1414
[Datatype.URI]: 'string',
15-
[Datatype.JSON]: 'unknown',
15+
[Datatype.JSON]: 'JSONValue',
1616
[Datatype.UNKNOWN]: 'JSONValue',
1717
};

browser/cli/src/generateOntology.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ enum Inserts {
1717
CLASSES = '{{4}}',
1818
PROP_TYPE_MAPPING = '{{7}}',
1919
PROP_SUBJECT_TO_NAME_MAPPING = '{{8}}',
20+
TYPE_IMPORTS = '{{9}}',
2021
}
2122

2223
const TEMPLATE = `
@@ -25,7 +26,7 @@ const TEMPLATE = `
2526
* For more info on how to use ontologies: https://github.com/atomicdata-dev/atomic-server/blob/develop/browser/cli/readme.md
2627
* -------------------------------- */
2728
28-
import type { OntologyBaseObject, BaseProps } from '${Inserts.MODULE_ALIAS}'
29+
import type { ${Inserts.TYPE_IMPORTS} } from '${Inserts.MODULE_ALIAS}'
2930
3031
${Inserts.BASE_OBJECT}
3132
@@ -57,14 +58,21 @@ export const generateOntology = async (
5758

5859
const [baseObjStr, reverseMapping] = await generateBaseObject(ontology);
5960
const classesStr = generateClasses(ontology, reverseMapping, propertyRecord);
60-
const propertiesStr = generatePropTypeMapping(ontology, reverseMapping);
61+
const [propertiesStr, propertiesImports] = generatePropTypeMapping(
62+
ontology,
63+
reverseMapping,
64+
);
6165
const subToNameStr = generateSubjectToNameMapping(ontology, reverseMapping);
6266
const classExportsStr = generateClassExports(ontology, reverseMapping);
6367

6468
const content = TEMPLATE.replaceAll(
6569
Inserts.MODULE_ALIAS,
6670
atomicConfig.moduleAlias ?? '@tomic/lib',
6771
)
72+
.replace(
73+
Inserts.TYPE_IMPORTS,
74+
['OntologyBaseObject', 'BaseProps', ...propertiesImports].join(', '),
75+
)
6876
.replace(Inserts.BASE_OBJECT, baseObjStr)
6977
.replace(Inserts.CLASS_EXPORTS, classExportsStr)
7078
.replace(Inserts.CLASSES, classesStr)

browser/cli/src/generatePropTypeMapping.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,20 @@ import { dedupe } from './utils.js';
77
export const generatePropTypeMapping = (
88
ontology: Resource<Core.Ontology>,
99
reverseMapping: ReverseMapping,
10-
): string => {
10+
): [mappingString: string, usedImports: string[]] => {
1111
const properties = dedupe(ontology.props.properties ?? []);
1212

1313
const lines = properties
1414
.map(subject => generateLine(subject, reverseMapping))
1515
.join('\n');
1616

17-
return `interface PropTypeMapping {
17+
const mappingString = `interface PropTypeMapping {
1818
${lines}
1919
}`;
20+
21+
const imports = mappingString.includes('JSONValue') ? ['JSONValue'] : [];
22+
23+
return [mappingString, imports];
2024
};
2125

2226
const generateLine = (subject: string, reverseMapping: ReverseMapping) => {

0 commit comments

Comments
 (0)