@ifc-lite/codegen 1.0.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/INTEGRATION.md +354 -0
- package/LICENSE +373 -0
- package/README.md +101 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +35 -0
- package/dist/cli.js.map +1 -0
- package/dist/express-parser.d.ts +75 -0
- package/dist/express-parser.d.ts.map +1 -0
- package/dist/express-parser.js +318 -0
- package/dist/express-parser.js.map +1 -0
- package/dist/generator.d.ts +10 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +64 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/typescript-generator.d.ts +28 -0
- package/dist/typescript-generator.d.ts.map +1 -0
- package/dist/typescript-generator.js +400 -0
- package/dist/typescript-generator.js.map +1 -0
- package/generated/ifc4/entities.ts +6978 -0
- package/generated/ifc4/enums.ts +2471 -0
- package/generated/ifc4/index.ts +15 -0
- package/generated/ifc4/schema-registry.ts +60726 -0
- package/generated/ifc4/selects.ts +191 -0
- package/generated/ifc4/test-compile.ts +37 -0
- package/generated/ifc4/types.ts +3104 -0
- package/generated/ifc4x3/entities.ts +7836 -0
- package/generated/ifc4x3/enums.ts +3100 -0
- package/generated/ifc4x3/index.ts +15 -0
- package/generated/ifc4x3/schema-registry.ts +71023 -0
- package/generated/ifc4x3/selects.ts +194 -0
- package/generated/ifc4x3/types.ts +3707 -0
- package/package.json +32 -0
- package/schemas/IFC4X3.exp +13984 -0
- package/schemas/IFC4_ADD2_TC1.exp +12399 -0
- package/src/cli.ts +41 -0
- package/src/express-parser.ts +441 -0
- package/src/generator.ts +81 -0
- package/src/index.ts +31 -0
- package/src/typescript-generator.ts +496 -0
- package/test/express-parser.test.ts +363 -0
- package/test/integration.test.ts +246 -0
- package/test/typescript-generator.test.ts +348 -0
- package/tsconfig.json +20 -0
- package/vitest.config.ts +18 -0
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { getAllAttributes, getInheritanceChain } from './express-parser.js';
|
|
5
|
+
/**
|
|
6
|
+
* Generate all TypeScript code from EXPRESS schema
|
|
7
|
+
*/
|
|
8
|
+
export function generateTypeScript(schema) {
|
|
9
|
+
return {
|
|
10
|
+
entities: generateEntityInterfaces(schema),
|
|
11
|
+
types: generateTypeAliases(schema),
|
|
12
|
+
enums: generateEnums(schema),
|
|
13
|
+
selects: generateSelectTypes(schema),
|
|
14
|
+
schemaRegistry: generateSchemaRegistry(schema),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generate entity interfaces
|
|
19
|
+
*/
|
|
20
|
+
function generateEntityInterfaces(schema) {
|
|
21
|
+
let code = `/**
|
|
22
|
+
* IFC Entity Interfaces
|
|
23
|
+
* Generated from EXPRESS schema: ${schema.name}
|
|
24
|
+
*
|
|
25
|
+
* DO NOT EDIT - This file is auto-generated
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
`;
|
|
29
|
+
// Sort entities by dependency order (parents before children)
|
|
30
|
+
const sortedEntities = topologicalSort(schema.entities);
|
|
31
|
+
for (const entity of sortedEntities) {
|
|
32
|
+
code += generateEntityInterface(entity, schema);
|
|
33
|
+
code += '\n\n';
|
|
34
|
+
}
|
|
35
|
+
return code;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Generate a single entity interface
|
|
39
|
+
*/
|
|
40
|
+
function generateEntityInterface(entity, schema) {
|
|
41
|
+
let code = '';
|
|
42
|
+
// Add JSDoc comment
|
|
43
|
+
code += `/**\n * ${entity.name}\n`;
|
|
44
|
+
if (entity.isAbstract) {
|
|
45
|
+
code += ` * @abstract\n`;
|
|
46
|
+
}
|
|
47
|
+
if (entity.supertype) {
|
|
48
|
+
code += ` * @extends ${entity.supertype}\n`;
|
|
49
|
+
}
|
|
50
|
+
code += ` */\n`;
|
|
51
|
+
// Generate interface
|
|
52
|
+
code += `export interface ${entity.name}`;
|
|
53
|
+
// Add extends clause
|
|
54
|
+
if (entity.supertype) {
|
|
55
|
+
code += ` extends ${entity.supertype}`;
|
|
56
|
+
}
|
|
57
|
+
code += ` {\n`;
|
|
58
|
+
// Add attributes (only this level, not inherited)
|
|
59
|
+
for (const attr of entity.attributes) {
|
|
60
|
+
code += generateAttribute(attr);
|
|
61
|
+
}
|
|
62
|
+
code += `}`;
|
|
63
|
+
return code;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate an attribute declaration
|
|
67
|
+
*/
|
|
68
|
+
function generateAttribute(attr) {
|
|
69
|
+
let code = ` ${attr.name}`;
|
|
70
|
+
// Add optional marker
|
|
71
|
+
if (attr.optional) {
|
|
72
|
+
code += '?';
|
|
73
|
+
}
|
|
74
|
+
code += ': ';
|
|
75
|
+
// Map EXPRESS type to TypeScript type
|
|
76
|
+
let tsType = mapExpressTypeToTypeScript(attr.type);
|
|
77
|
+
// Wrap in array if needed
|
|
78
|
+
// Note: attr.type may already contain [] for nested collections from the parser
|
|
79
|
+
if (attr.isArray || attr.isList || attr.isSet) {
|
|
80
|
+
tsType = `${tsType}[]`;
|
|
81
|
+
}
|
|
82
|
+
code += tsType;
|
|
83
|
+
code += ';\n';
|
|
84
|
+
return code;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Map EXPRESS types to TypeScript types
|
|
88
|
+
*/
|
|
89
|
+
function mapExpressTypeToTypeScript(expressType) {
|
|
90
|
+
// Handle basic EXPRESS types
|
|
91
|
+
const typeMap = {
|
|
92
|
+
REAL: 'number',
|
|
93
|
+
INTEGER: 'number',
|
|
94
|
+
NUMBER: 'number',
|
|
95
|
+
BOOLEAN: 'boolean',
|
|
96
|
+
LOGICAL: 'boolean | null',
|
|
97
|
+
STRING: 'string',
|
|
98
|
+
BINARY: 'string',
|
|
99
|
+
};
|
|
100
|
+
// Check if it's a measure type (ends with Measure)
|
|
101
|
+
if (expressType.endsWith('Measure')) {
|
|
102
|
+
return 'number';
|
|
103
|
+
}
|
|
104
|
+
// Check if it's a simple type in our map
|
|
105
|
+
const upperType = expressType.toUpperCase();
|
|
106
|
+
if (typeMap[upperType]) {
|
|
107
|
+
return typeMap[upperType];
|
|
108
|
+
}
|
|
109
|
+
// Check for IFC types
|
|
110
|
+
if (expressType.startsWith('Ifc')) {
|
|
111
|
+
return expressType;
|
|
112
|
+
}
|
|
113
|
+
// Default: use as-is (likely a custom type or entity reference)
|
|
114
|
+
return expressType;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Generate type aliases
|
|
118
|
+
*/
|
|
119
|
+
function generateTypeAliases(schema) {
|
|
120
|
+
let code = `/**
|
|
121
|
+
* IFC Type Aliases
|
|
122
|
+
* Generated from EXPRESS schema: ${schema.name}
|
|
123
|
+
*
|
|
124
|
+
* DO NOT EDIT - This file is auto-generated
|
|
125
|
+
*/
|
|
126
|
+
|
|
127
|
+
`;
|
|
128
|
+
for (const type of schema.types) {
|
|
129
|
+
code += `/** ${type.name} */\n`;
|
|
130
|
+
code += `export type ${type.name} = ${mapExpressTypeToTypeScript(type.underlyingType)};\n\n`;
|
|
131
|
+
}
|
|
132
|
+
return code;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Generate enum definitions
|
|
136
|
+
*/
|
|
137
|
+
function generateEnums(schema) {
|
|
138
|
+
let code = `/**
|
|
139
|
+
* IFC Enumerations
|
|
140
|
+
* Generated from EXPRESS schema: ${schema.name}
|
|
141
|
+
*
|
|
142
|
+
* DO NOT EDIT - This file is auto-generated
|
|
143
|
+
*/
|
|
144
|
+
|
|
145
|
+
`;
|
|
146
|
+
for (const enumDef of schema.enums) {
|
|
147
|
+
code += generateEnum(enumDef);
|
|
148
|
+
code += '\n\n';
|
|
149
|
+
}
|
|
150
|
+
return code;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Generate a single enum
|
|
154
|
+
*/
|
|
155
|
+
function generateEnum(enumDef) {
|
|
156
|
+
let code = `/** ${enumDef.name} */\n`;
|
|
157
|
+
code += `export enum ${enumDef.name} {\n`;
|
|
158
|
+
for (const value of enumDef.values) {
|
|
159
|
+
// Convert to PascalCase for enum member
|
|
160
|
+
const memberName = value.toUpperCase();
|
|
161
|
+
code += ` ${memberName} = '${value}',\n`;
|
|
162
|
+
}
|
|
163
|
+
code += `}`;
|
|
164
|
+
return code;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Generate SELECT type unions
|
|
168
|
+
*/
|
|
169
|
+
function generateSelectTypes(schema) {
|
|
170
|
+
let code = `/**
|
|
171
|
+
* IFC SELECT Types (Unions)
|
|
172
|
+
* Generated from EXPRESS schema: ${schema.name}
|
|
173
|
+
*
|
|
174
|
+
* DO NOT EDIT - This file is auto-generated
|
|
175
|
+
*/
|
|
176
|
+
|
|
177
|
+
`;
|
|
178
|
+
for (const select of schema.selects) {
|
|
179
|
+
code += `/** ${select.name} */\n`;
|
|
180
|
+
code += `export type ${select.name} = `;
|
|
181
|
+
// Join types with |
|
|
182
|
+
const tsTypes = select.types.map(t => mapExpressTypeToTypeScript(t));
|
|
183
|
+
code += tsTypes.join(' | ');
|
|
184
|
+
code += ';\n\n';
|
|
185
|
+
}
|
|
186
|
+
return code;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Generate schema registry with runtime metadata
|
|
190
|
+
*/
|
|
191
|
+
function generateSchemaRegistry(schema) {
|
|
192
|
+
let code = `/**
|
|
193
|
+
* IFC Schema Registry
|
|
194
|
+
* Generated from EXPRESS schema: ${schema.name}
|
|
195
|
+
*
|
|
196
|
+
* Runtime metadata for IFC entities, types, and relationships.
|
|
197
|
+
*
|
|
198
|
+
* DO NOT EDIT - This file is auto-generated
|
|
199
|
+
*/
|
|
200
|
+
|
|
201
|
+
export interface EntityMetadata {
|
|
202
|
+
name: string;
|
|
203
|
+
isAbstract: boolean;
|
|
204
|
+
parent?: string;
|
|
205
|
+
attributes: AttributeMetadata[];
|
|
206
|
+
allAttributes?: AttributeMetadata[]; // Including inherited
|
|
207
|
+
inheritanceChain?: string[]; // From root to entity
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export interface AttributeMetadata {
|
|
211
|
+
name: string;
|
|
212
|
+
type: string;
|
|
213
|
+
optional: boolean;
|
|
214
|
+
isArray: boolean;
|
|
215
|
+
isList: boolean;
|
|
216
|
+
isSet: boolean;
|
|
217
|
+
arrayBounds?: [number, number];
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export interface SchemaRegistry {
|
|
221
|
+
name: string;
|
|
222
|
+
entities: Record<string, EntityMetadata>;
|
|
223
|
+
types: Record<string, string>; // name -> underlying type
|
|
224
|
+
enums: Record<string, string[]>; // name -> values
|
|
225
|
+
selects: Record<string, string[]>; // name -> types
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export const SCHEMA_REGISTRY: SchemaRegistry = {
|
|
229
|
+
name: '${schema.name}',
|
|
230
|
+
|
|
231
|
+
entities: {
|
|
232
|
+
`;
|
|
233
|
+
// Generate entity metadata
|
|
234
|
+
for (const entity of schema.entities) {
|
|
235
|
+
code += generateEntityMetadata(entity, schema);
|
|
236
|
+
}
|
|
237
|
+
code += ` },
|
|
238
|
+
|
|
239
|
+
types: {
|
|
240
|
+
`;
|
|
241
|
+
// Generate type metadata (escape single quotes in underlying types)
|
|
242
|
+
for (const type of schema.types) {
|
|
243
|
+
const escapedType = type.underlyingType.replace(/'/g, "\\'").replace(/\n/g, ' ');
|
|
244
|
+
code += ` ${type.name}: '${escapedType}',\n`;
|
|
245
|
+
}
|
|
246
|
+
code += ` },
|
|
247
|
+
|
|
248
|
+
enums: {
|
|
249
|
+
`;
|
|
250
|
+
// Generate enum metadata (escape single quotes in values)
|
|
251
|
+
for (const enumDef of schema.enums) {
|
|
252
|
+
const escapedValues = enumDef.values.map(v => `'${v.replace(/'/g, "\\'")}'`);
|
|
253
|
+
code += ` ${enumDef.name}: [${escapedValues.join(', ')}],\n`;
|
|
254
|
+
}
|
|
255
|
+
code += ` },
|
|
256
|
+
|
|
257
|
+
selects: {
|
|
258
|
+
`;
|
|
259
|
+
// Generate select metadata (escape single quotes in types)
|
|
260
|
+
for (const select of schema.selects) {
|
|
261
|
+
const escapedTypes = select.types.map(t => `'${t.replace(/'/g, "\\'")}'`);
|
|
262
|
+
code += ` ${select.name}: [${escapedTypes.join(', ')}],\n`;
|
|
263
|
+
}
|
|
264
|
+
code += ` },
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Get entity metadata by name (case-insensitive)
|
|
269
|
+
*/
|
|
270
|
+
export function getEntityMetadata(typeName: string): EntityMetadata | undefined {
|
|
271
|
+
// Normalize to IfcXxx format
|
|
272
|
+
const normalized = normalizeTypeName(typeName);
|
|
273
|
+
return SCHEMA_REGISTRY.entities[normalized];
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Get all attributes for an entity (including inherited)
|
|
278
|
+
*/
|
|
279
|
+
export function getAllAttributesForEntity(typeName: string): AttributeMetadata[] {
|
|
280
|
+
const metadata = getEntityMetadata(typeName);
|
|
281
|
+
return metadata?.allAttributes || [];
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Get inheritance chain for an entity
|
|
286
|
+
*/
|
|
287
|
+
export function getInheritanceChainForEntity(typeName: string): string[] {
|
|
288
|
+
const metadata = getEntityMetadata(typeName);
|
|
289
|
+
return metadata?.inheritanceChain || [];
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Check if a type is a known entity
|
|
294
|
+
*/
|
|
295
|
+
export function isKnownEntity(typeName: string): boolean {
|
|
296
|
+
const normalized = normalizeTypeName(typeName);
|
|
297
|
+
return normalized in SCHEMA_REGISTRY.entities;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Normalize type name to IfcXxx format
|
|
302
|
+
*/
|
|
303
|
+
function normalizeTypeName(name: string): string {
|
|
304
|
+
// Convert IFCWALL -> IfcWall
|
|
305
|
+
if (name.toUpperCase().startsWith('IFC')) {
|
|
306
|
+
return 'Ifc' + name.substring(3).charAt(0).toUpperCase() +
|
|
307
|
+
name.substring(4).toLowerCase();
|
|
308
|
+
}
|
|
309
|
+
return name;
|
|
310
|
+
}
|
|
311
|
+
`;
|
|
312
|
+
return code;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Generate metadata for a single entity
|
|
316
|
+
*/
|
|
317
|
+
function generateEntityMetadata(entity, schema) {
|
|
318
|
+
let code = ` ${entity.name}: {\n`;
|
|
319
|
+
code += ` name: '${entity.name}',\n`;
|
|
320
|
+
code += ` isAbstract: ${entity.isAbstract},\n`;
|
|
321
|
+
if (entity.supertype) {
|
|
322
|
+
code += ` parent: '${entity.supertype}',\n`;
|
|
323
|
+
}
|
|
324
|
+
code += ` attributes: [\n`;
|
|
325
|
+
for (const attr of entity.attributes) {
|
|
326
|
+
code += ` {\n`;
|
|
327
|
+
code += ` name: '${attr.name}',\n`;
|
|
328
|
+
code += ` type: '${attr.type}',\n`;
|
|
329
|
+
code += ` optional: ${attr.optional},\n`;
|
|
330
|
+
code += ` isArray: ${attr.isArray},\n`;
|
|
331
|
+
code += ` isList: ${attr.isList},\n`;
|
|
332
|
+
code += ` isSet: ${attr.isSet},\n`;
|
|
333
|
+
if (attr.arrayBounds) {
|
|
334
|
+
code += ` arrayBounds: [${attr.arrayBounds[0]}, ${attr.arrayBounds[1]}],\n`;
|
|
335
|
+
}
|
|
336
|
+
code += ` },\n`;
|
|
337
|
+
}
|
|
338
|
+
code += ` ],\n`;
|
|
339
|
+
// Add all attributes (including inherited)
|
|
340
|
+
const allAttrs = getAllAttributes(entity, schema);
|
|
341
|
+
code += ` allAttributes: [\n`;
|
|
342
|
+
for (const attr of allAttrs) {
|
|
343
|
+
code += ` {\n`;
|
|
344
|
+
code += ` name: '${attr.name}',\n`;
|
|
345
|
+
code += ` type: '${attr.type}',\n`;
|
|
346
|
+
code += ` optional: ${attr.optional},\n`;
|
|
347
|
+
code += ` isArray: ${attr.isArray},\n`;
|
|
348
|
+
code += ` isList: ${attr.isList},\n`;
|
|
349
|
+
code += ` isSet: ${attr.isSet},\n`;
|
|
350
|
+
if (attr.arrayBounds) {
|
|
351
|
+
code += ` arrayBounds: [${attr.arrayBounds[0]}, ${attr.arrayBounds[1]}],\n`;
|
|
352
|
+
}
|
|
353
|
+
code += ` },\n`;
|
|
354
|
+
}
|
|
355
|
+
code += ` ],\n`;
|
|
356
|
+
// Add inheritance chain
|
|
357
|
+
const chain = getInheritanceChain(entity, schema);
|
|
358
|
+
code += ` inheritanceChain: [${chain.map(c => `'${c}'`).join(', ')}],\n`;
|
|
359
|
+
code += ` },\n`;
|
|
360
|
+
return code;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Topological sort of entities by dependency order
|
|
364
|
+
* Ensures parent entities are generated before children
|
|
365
|
+
*/
|
|
366
|
+
function topologicalSort(entities) {
|
|
367
|
+
const sorted = [];
|
|
368
|
+
const visited = new Set();
|
|
369
|
+
function visit(entity) {
|
|
370
|
+
if (visited.has(entity.name)) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
visited.add(entity.name);
|
|
374
|
+
// Visit parent first
|
|
375
|
+
if (entity.supertype) {
|
|
376
|
+
const parent = entities.find(e => e.name === entity.supertype);
|
|
377
|
+
if (parent) {
|
|
378
|
+
visit(parent);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
sorted.push(entity);
|
|
382
|
+
}
|
|
383
|
+
for (const entity of entities) {
|
|
384
|
+
visit(entity);
|
|
385
|
+
}
|
|
386
|
+
return sorted;
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Write generated code to files
|
|
390
|
+
*/
|
|
391
|
+
export function writeGeneratedFiles(code, outputDir) {
|
|
392
|
+
return {
|
|
393
|
+
entities: `${outputDir}/entities.ts`,
|
|
394
|
+
types: `${outputDir}/types.ts`,
|
|
395
|
+
enums: `${outputDir}/enums.ts`,
|
|
396
|
+
selects: `${outputDir}/selects.ts`,
|
|
397
|
+
schema: `${outputDir}/schema-registry.ts`,
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=typescript-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-generator.js","sourceRoot":"","sources":["../src/typescript-generator.ts"],"names":[],"mappings":"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"}
|