@ifc-lite/codegen 1.15.4 → 1.15.5
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/README.md +17 -14
- package/package.json +16 -6
- package/.turbo/turbo-build.log +0 -4
- package/CHANGELOG.md +0 -165
- package/INTEGRATION.md +0 -360
- package/generated/ifc4/entities.ts +0 -7400
- package/generated/ifc4/enums.ts +0 -2467
- package/generated/ifc4/index.ts +0 -17
- package/generated/ifc4/schema-registry.ts +0 -63186
- package/generated/ifc4/selects.ts +0 -315
- package/generated/ifc4/serializers.ts +0 -51
- package/generated/ifc4/test-compile.ts +0 -49
- package/generated/ifc4/type-ids.ts +0 -1682
- package/generated/ifc4/types.ts +0 -401
- package/generated/ifc4x3/entities.ts +0 -8300
- package/generated/ifc4x3/enums.ts +0 -3096
- package/generated/ifc4x3/index.ts +0 -17
- package/generated/ifc4x3/schema-registry.ts +0 -71489
- package/generated/ifc4x3/selects.ts +0 -312
- package/generated/ifc4x3/serializers.ts +0 -51
- package/generated/ifc4x3/test-compile.ts +0 -49
- package/generated/ifc4x3/type-ids.ts +0 -1882
- package/generated/ifc4x3/types.ts +0 -407
- package/src/cli.ts +0 -72
- package/src/crc32.ts +0 -77
- package/src/express-parser.ts +0 -457
- package/src/generator.ts +0 -268
- package/src/index.ts +0 -57
- package/src/rust-generator.ts +0 -714
- package/src/serialization-generator.ts +0 -74
- package/src/type-ids-generator.ts +0 -166
- package/src/typescript-generator.ts +0 -631
- package/test/express-parser.test.ts +0 -363
- package/test/integration.test.ts +0 -246
- package/test/serialization-generator.test.ts +0 -65
- package/test/typescript-generator.test.ts +0 -348
- package/tsconfig.json +0 -21
- package/vitest.config.ts +0 -18
|
@@ -1,74 +0,0 @@
|
|
|
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
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Serialization Generator
|
|
7
|
-
*
|
|
8
|
-
* Emits the per-schema STEP serializer bundle file. The serialization LOGIC is
|
|
9
|
-
* schema-agnostic and lives once in `@ifc-lite/data`; this generator emits only
|
|
10
|
-
* a thin binding that re-exports those primitives and binds the bundle's
|
|
11
|
-
* `SCHEMA_REGISTRY` to the registry-coupled helpers. Keeping the logic in a
|
|
12
|
-
* single place means the generated copies can never drift from the runtime.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import type { ExpressSchema } from './express-parser.js';
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Generate serialization support code — a thin re-export of the shared
|
|
19
|
-
* `@ifc-lite/data` STEP serializer with this schema's registry bound in.
|
|
20
|
-
*/
|
|
21
|
-
export function generateSerializers(schema: ExpressSchema): string {
|
|
22
|
-
return `/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
23
|
-
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
24
|
-
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* IFC Serialization Support
|
|
28
|
-
* Generated from EXPRESS schema: ${schema.name}
|
|
29
|
-
*
|
|
30
|
-
* Thin binding over the shared, schema-agnostic STEP serializer in
|
|
31
|
-
* \`@ifc-lite/data\`. All serialization logic lives there (single source of
|
|
32
|
-
* truth); only this bundle's \`SCHEMA_REGISTRY\` is bound to the registry-coupled
|
|
33
|
-
* helpers below.
|
|
34
|
-
*
|
|
35
|
-
* DO NOT EDIT - This file is auto-generated
|
|
36
|
-
*/
|
|
37
|
-
|
|
38
|
-
import { SCHEMA_REGISTRY } from './schema-registry.js';
|
|
39
|
-
import {
|
|
40
|
-
generateHeader,
|
|
41
|
-
generateStepFileWithRegistry,
|
|
42
|
-
toStepLineWithRegistry,
|
|
43
|
-
type StepEntity,
|
|
44
|
-
} from '@ifc-lite/data';
|
|
45
|
-
|
|
46
|
-
export {
|
|
47
|
-
isEntityRef,
|
|
48
|
-
isEnumValue,
|
|
49
|
-
ref,
|
|
50
|
-
enumVal,
|
|
51
|
-
serializeValue,
|
|
52
|
-
generateHeader,
|
|
53
|
-
parseStepValue,
|
|
54
|
-
} from '@ifc-lite/data';
|
|
55
|
-
export type { StepValue, EntityRef, EnumValue, StepEntity } from '@ifc-lite/data';
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Serialize an entity to a STEP line (bound to this bundle's schema).
|
|
59
|
-
*/
|
|
60
|
-
export function toStepLine(entity: StepEntity): string {
|
|
61
|
-
return toStepLineWithRegistry(SCHEMA_REGISTRY, entity);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Generate complete STEP file content (bound to this bundle's schema).
|
|
66
|
-
*/
|
|
67
|
-
export function generateStepFile(
|
|
68
|
-
entities: StepEntity[],
|
|
69
|
-
options: Parameters<typeof generateHeader>[0]
|
|
70
|
-
): string {
|
|
71
|
-
return generateStepFileWithRegistry(SCHEMA_REGISTRY, entities, options);
|
|
72
|
-
}
|
|
73
|
-
`;
|
|
74
|
-
}
|
|
@@ -1,166 +0,0 @@
|
|
|
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
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Type IDs Generator
|
|
7
|
-
*
|
|
8
|
-
* Generates TypeScript type ID constants and lookup maps.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { ExpressSchema } from './express-parser.js';
|
|
12
|
-
import { crc32 } from './crc32.js';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Generate TypeScript type IDs file
|
|
16
|
-
*/
|
|
17
|
-
export function generateTypeIds(schema: ExpressSchema): string {
|
|
18
|
-
let code = `/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
19
|
-
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
20
|
-
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* IFC Type IDs
|
|
24
|
-
* Generated from EXPRESS schema: ${schema.name}
|
|
25
|
-
*
|
|
26
|
-
* CRC32 hashes for fast O(1) type lookup.
|
|
27
|
-
*
|
|
28
|
-
* DO NOT EDIT - This file is auto-generated
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* CRC32 Type IDs for all IFC entities
|
|
33
|
-
*/
|
|
34
|
-
export const TYPE_IDS = {
|
|
35
|
-
`;
|
|
36
|
-
|
|
37
|
-
// Generate type IDs for all entities
|
|
38
|
-
for (const entity of schema.entities) {
|
|
39
|
-
const id = crc32(entity.name);
|
|
40
|
-
code += ` ${entity.name}: ${id},\n`;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
code += `} as const;
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Type for any valid type ID
|
|
47
|
-
*/
|
|
48
|
-
export type TypeId = (typeof TYPE_IDS)[keyof typeof TYPE_IDS];
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Reverse lookup: ID -> Name
|
|
52
|
-
*/
|
|
53
|
-
export const TYPE_NAMES: Record<number, string> = {
|
|
54
|
-
`;
|
|
55
|
-
|
|
56
|
-
for (const entity of schema.entities) {
|
|
57
|
-
const id = crc32(entity.name);
|
|
58
|
-
code += ` ${id}: '${entity.name}',\n`;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
code += `};
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Get type ID from name (case-insensitive)
|
|
65
|
-
*/
|
|
66
|
-
export function getTypeId(name: string): number | undefined {
|
|
67
|
-
// Normalize to IfcXxx format
|
|
68
|
-
const normalized = normalizeTypeName(name);
|
|
69
|
-
return (TYPE_IDS as Record<string, number>)[normalized];
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Get type name from ID
|
|
74
|
-
*/
|
|
75
|
-
export function getTypeName(id: number): string | undefined {
|
|
76
|
-
return TYPE_NAMES[id];
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Check if a type ID exists
|
|
81
|
-
*/
|
|
82
|
-
export function isValidTypeId(id: number): boolean {
|
|
83
|
-
return id in TYPE_NAMES;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Normalize type name to IfcXxx format
|
|
88
|
-
*/
|
|
89
|
-
function normalizeTypeName(name: string): string {
|
|
90
|
-
// Handle IFCWALL -> IfcWall
|
|
91
|
-
if (name.toUpperCase().startsWith('IFC')) {
|
|
92
|
-
const rest = name.substring(3);
|
|
93
|
-
// Find the entity that matches case-insensitively
|
|
94
|
-
const upperRest = rest.toUpperCase();
|
|
95
|
-
for (const key of Object.keys(TYPE_IDS)) {
|
|
96
|
-
if (key.substring(3).toUpperCase() === upperRest) {
|
|
97
|
-
return key;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return name;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Calculate CRC32 hash for any string
|
|
106
|
-
* (Useful for unknown types)
|
|
107
|
-
*/
|
|
108
|
-
export function crc32Hash(str: string): number {
|
|
109
|
-
const upper = str.toUpperCase();
|
|
110
|
-
let crc = 0xffffffff;
|
|
111
|
-
for (let i = 0; i < upper.length; i++) {
|
|
112
|
-
crc = CRC32_TABLE[(crc ^ upper.charCodeAt(i)) & 0xff] ^ (crc >>> 8);
|
|
113
|
-
}
|
|
114
|
-
return (crc ^ 0xffffffff) >>> 0;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// CRC32 lookup table
|
|
118
|
-
const CRC32_TABLE = new Uint32Array([
|
|
119
|
-
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
|
|
120
|
-
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
|
|
121
|
-
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
|
|
122
|
-
0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
|
|
123
|
-
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
|
|
124
|
-
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
|
|
125
|
-
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
|
|
126
|
-
0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
|
|
127
|
-
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
|
|
128
|
-
0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
|
|
129
|
-
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
|
|
130
|
-
0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
|
|
131
|
-
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
|
|
132
|
-
0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
|
|
133
|
-
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
|
|
134
|
-
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
|
|
135
|
-
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
|
|
136
|
-
0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
|
|
137
|
-
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cd9, 0x5005713c, 0x270241aa,
|
|
138
|
-
0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
|
|
139
|
-
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
|
|
140
|
-
0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
|
|
141
|
-
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
|
|
142
|
-
0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
|
|
143
|
-
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
|
|
144
|
-
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
|
|
145
|
-
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
|
|
146
|
-
0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
|
|
147
|
-
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
|
|
148
|
-
0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
|
|
149
|
-
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
|
|
150
|
-
0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
|
|
151
|
-
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
|
|
152
|
-
0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
|
|
153
|
-
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
|
|
154
|
-
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
|
|
155
|
-
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
|
|
156
|
-
0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
|
|
157
|
-
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
|
|
158
|
-
0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
|
159
|
-
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd706b3,
|
|
160
|
-
0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
|
|
161
|
-
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
|
|
162
|
-
]);
|
|
163
|
-
`;
|
|
164
|
-
|
|
165
|
-
return code;
|
|
166
|
-
}
|