@itwin/ecschema-metadata 5.12.0-dev.8 → 5.13.0-dev.1
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/CHANGELOG.md +11 -1
- package/lib/cjs/Localization/SchemaLocalization.d.ts +1 -1
- package/lib/cjs/Localization/SchemaLocalization.d.ts.map +1 -1
- package/lib/cjs/Localization/SchemaLocalization.js.map +1 -1
- package/lib/cjs/SchemaView/SchemaManifest.d.ts +81 -0
- package/lib/cjs/SchemaView/SchemaManifest.d.ts.map +1 -0
- package/lib/cjs/SchemaView/SchemaManifest.js +131 -0
- package/lib/cjs/SchemaView/SchemaManifest.js.map +1 -0
- package/lib/cjs/{SchemaView.d.ts → SchemaView/SchemaView.d.ts} +23 -90
- package/lib/cjs/SchemaView/SchemaView.d.ts.map +1 -0
- package/lib/cjs/{SchemaView.js → SchemaView/SchemaView.js} +32 -198
- package/lib/cjs/SchemaView/SchemaView.js.map +1 -0
- package/lib/cjs/SchemaView/SchemaViewBinaryReader.d.ts +37 -0
- package/lib/cjs/SchemaView/SchemaViewBinaryReader.d.ts.map +1 -0
- package/lib/cjs/{SchemaViewBinaryReader.js → SchemaView/SchemaViewBinaryReader.js} +84 -43
- package/lib/cjs/SchemaView/SchemaViewBinaryReader.js.map +1 -0
- package/lib/cjs/SchemaView/SchemaViewBuilder.d.ts +116 -0
- package/lib/cjs/SchemaView/SchemaViewBuilder.d.ts.map +1 -0
- package/lib/cjs/SchemaView/SchemaViewBuilder.js +230 -0
- package/lib/cjs/SchemaView/SchemaViewBuilder.js.map +1 -0
- package/lib/cjs/{SchemaViewInterfaces.d.ts → SchemaView/SchemaViewInterfaces.d.ts} +1 -1
- package/lib/cjs/SchemaView/SchemaViewInterfaces.d.ts.map +1 -0
- package/lib/cjs/SchemaView/SchemaViewInterfaces.js.map +1 -0
- package/lib/cjs/SchemaView/SchemaViewManager.d.ts +114 -0
- package/lib/cjs/SchemaView/SchemaViewManager.d.ts.map +1 -0
- package/lib/cjs/SchemaView/SchemaViewManager.js +184 -0
- package/lib/cjs/SchemaView/SchemaViewManager.js.map +1 -0
- package/lib/cjs/ecschema-metadata.d.ts +6 -3
- package/lib/cjs/ecschema-metadata.d.ts.map +1 -1
- package/lib/cjs/ecschema-metadata.js +6 -3
- package/lib/cjs/ecschema-metadata.js.map +1 -1
- package/lib/esm/Localization/SchemaLocalization.d.ts +1 -1
- package/lib/esm/Localization/SchemaLocalization.d.ts.map +1 -1
- package/lib/esm/Localization/SchemaLocalization.js.map +1 -1
- package/lib/esm/SchemaView/SchemaManifest.d.ts +81 -0
- package/lib/esm/SchemaView/SchemaManifest.d.ts.map +1 -0
- package/lib/esm/SchemaView/SchemaManifest.js +127 -0
- package/lib/esm/SchemaView/SchemaManifest.js.map +1 -0
- package/lib/esm/{SchemaView.d.ts → SchemaView/SchemaView.d.ts} +23 -90
- package/lib/esm/SchemaView/SchemaView.d.ts.map +1 -0
- package/lib/esm/{SchemaView.js → SchemaView/SchemaView.js} +32 -197
- package/lib/esm/SchemaView/SchemaView.js.map +1 -0
- package/lib/esm/SchemaView/SchemaViewBinaryReader.d.ts +37 -0
- package/lib/esm/SchemaView/SchemaViewBinaryReader.d.ts.map +1 -0
- package/lib/esm/{SchemaViewBinaryReader.js → SchemaView/SchemaViewBinaryReader.js} +82 -43
- package/lib/esm/SchemaView/SchemaViewBinaryReader.js.map +1 -0
- package/lib/esm/SchemaView/SchemaViewBuilder.d.ts +116 -0
- package/lib/esm/SchemaView/SchemaViewBuilder.d.ts.map +1 -0
- package/lib/esm/SchemaView/SchemaViewBuilder.js +226 -0
- package/lib/esm/SchemaView/SchemaViewBuilder.js.map +1 -0
- package/lib/esm/{SchemaViewInterfaces.d.ts → SchemaView/SchemaViewInterfaces.d.ts} +1 -1
- package/lib/esm/SchemaView/SchemaViewInterfaces.d.ts.map +1 -0
- package/lib/esm/SchemaView/SchemaViewInterfaces.js.map +1 -0
- package/lib/esm/SchemaView/SchemaViewManager.d.ts +114 -0
- package/lib/esm/SchemaView/SchemaViewManager.d.ts.map +1 -0
- package/lib/esm/SchemaView/SchemaViewManager.js +180 -0
- package/lib/esm/SchemaView/SchemaViewManager.js.map +1 -0
- package/lib/esm/ecschema-metadata.d.ts +6 -3
- package/lib/esm/ecschema-metadata.d.ts.map +1 -1
- package/lib/esm/ecschema-metadata.js +6 -3
- package/lib/esm/ecschema-metadata.js.map +1 -1
- package/package.json +8 -8
- package/lib/cjs/SchemaView.d.ts.map +0 -1
- package/lib/cjs/SchemaView.js.map +0 -1
- package/lib/cjs/SchemaViewBinaryReader.d.ts +0 -16
- package/lib/cjs/SchemaViewBinaryReader.d.ts.map +0 -1
- package/lib/cjs/SchemaViewBinaryReader.js.map +0 -1
- package/lib/cjs/SchemaViewInterfaces.d.ts.map +0 -1
- package/lib/cjs/SchemaViewInterfaces.js.map +0 -1
- package/lib/esm/SchemaView.d.ts.map +0 -1
- package/lib/esm/SchemaView.js.map +0 -1
- package/lib/esm/SchemaViewBinaryReader.d.ts +0 -16
- package/lib/esm/SchemaViewBinaryReader.d.ts.map +0 -1
- package/lib/esm/SchemaViewBinaryReader.js.map +0 -1
- package/lib/esm/SchemaViewInterfaces.d.ts.map +0 -1
- package/lib/esm/SchemaViewInterfaces.js.map +0 -1
- /package/lib/cjs/{SchemaViewInterfaces.js → SchemaView/SchemaViewInterfaces.js} +0 -0
- /package/lib/esm/{SchemaViewInterfaces.js → SchemaView/SchemaViewInterfaces.js} +0 -0
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* @module Schema
|
|
7
7
|
*/
|
|
8
8
|
import { BentleyError, Logger } from "@itwin/core-bentley";
|
|
9
|
-
import { SchemaViewBuilder } from "./
|
|
10
|
-
import { StrengthDirection, StrengthType } from "
|
|
9
|
+
import { SchemaViewBuilder } from "./SchemaViewBuilder";
|
|
10
|
+
import { StrengthDirection, StrengthType } from "../ECObjects";
|
|
11
11
|
import { ClassType, schemaViewFormatVersion } from "./SchemaViewInterfaces";
|
|
12
12
|
/** Binary record tags for the SchemaView blob format.
|
|
13
13
|
* Each tag marks a flat, count-prefixed table. Must stay in sync with the C++ writer. */
|
|
@@ -98,7 +98,34 @@ function expectTag(reader, expected) {
|
|
|
98
98
|
if (tag !== expected)
|
|
99
99
|
throw new Error(`Expected tag 0x${expected.toString(16)} but found 0x${tag.toString(16)} at offset ${reader.pos - 1}`);
|
|
100
100
|
}
|
|
101
|
-
/**
|
|
101
|
+
/** Reusable parse/merge context for SchemaView blobs. Holds the live `SchemaViewBuilder` plus the
|
|
102
|
+
* cross-reference maps that must persist across fragment merges. Each `mergeBlob` appends one blob's
|
|
103
|
+
* schemas into the shared builder and resolves cross-references - including cross-fragment ones -
|
|
104
|
+
* against the accumulated maps. A whole-iModel blob is the degenerate case of a single fragment.
|
|
105
|
+
* @note Fragments must be merged in dependency order, so a fragment only references schemas already
|
|
106
|
+
* merged by an earlier one (or excluded schemas, which resolve to "not present").
|
|
107
|
+
* @internal
|
|
108
|
+
*/
|
|
109
|
+
export class SchemaViewMergeContext {
|
|
110
|
+
builder = new SchemaViewBuilder();
|
|
111
|
+
// Cross-reference maps. Persist across fragments: a row id / name from a later fragment resolves
|
|
112
|
+
// against a class, enum, koq, or category merged by an earlier fragment.
|
|
113
|
+
schemaECIdToIdx = new Map();
|
|
114
|
+
enumRowIdToIdx = new Map();
|
|
115
|
+
koqRowIdToIdx = new Map();
|
|
116
|
+
catRowIdToIdx = new Map();
|
|
117
|
+
classRowIdToIdx = new Map();
|
|
118
|
+
// "schemaname:classname" (both lowercased) -> global class index. Resolves base/mixin/constraint
|
|
119
|
+
// refs, which the blob encodes as schema+class name pairs, across fragment boundaries.
|
|
120
|
+
classResolver = new Map();
|
|
121
|
+
// global schemaIdx -> schema name, for building resolver keys and dangling-ref diagnostics.
|
|
122
|
+
schemaNames = [];
|
|
123
|
+
/** Parse one fragment blob and append its schemas into the shared builder. Synchronous. */
|
|
124
|
+
mergeBlob(data) {
|
|
125
|
+
mergeFragmentBlob(this, data);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Parse a schema view blob (binary format) into a fresh `SchemaView`.
|
|
102
129
|
*
|
|
103
130
|
* Layout: Header, PropertyDefTable, SchemaTable, EnumTable, KoQTable, PropCatTable, ClassTable, StringTable.
|
|
104
131
|
* Each table is count-prefixed. Schema items carry their schema's ecInstanceId for ownership resolution.
|
|
@@ -109,6 +136,16 @@ function expectTag(reader, expected) {
|
|
|
109
136
|
* @internal
|
|
110
137
|
*/
|
|
111
138
|
export function parseSchemaViewBlob(data, schemaToken) {
|
|
139
|
+
const ctx = new SchemaViewMergeContext();
|
|
140
|
+
ctx.mergeBlob(data);
|
|
141
|
+
return ctx.builder.build(schemaToken);
|
|
142
|
+
}
|
|
143
|
+
/** Parse one fragment blob and append it into the context's builder, resolving cross-references
|
|
144
|
+
* against the context's accumulated global maps. Per-fragment scratch state stays local; everything
|
|
145
|
+
* that must outlive the fragment lives on `ctx`.
|
|
146
|
+
*/
|
|
147
|
+
function mergeFragmentBlob(ctx, data) {
|
|
148
|
+
const builder = ctx.builder;
|
|
112
149
|
const reader = new BinaryReader(data);
|
|
113
150
|
// Header: magic(4) + version(1) + stringTableOffset(4)
|
|
114
151
|
const magic = reader.readU32();
|
|
@@ -119,16 +156,10 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
119
156
|
throw new Error(`Unsupported schema view format version: ${version}, expected ${schemaViewFormatVersion}`);
|
|
120
157
|
const stOffset = reader.readU32();
|
|
121
158
|
reader.parseStringTable(stOffset);
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const schemaEcIdToIdx =
|
|
125
|
-
|
|
126
|
-
const koqRowIdToIdx = new Map();
|
|
127
|
-
const catRowIdToIdx = new Map();
|
|
128
|
-
const classRowIdToIdx = new Map();
|
|
129
|
-
// Per-schema metadata for name-based class resolution
|
|
130
|
-
const schemaInfos = [];
|
|
131
|
-
// Per-schema item range tracking (indexed by schemaIdx)
|
|
159
|
+
// Global index of the first schema this fragment adds. Local schema index = global - base.
|
|
160
|
+
const schemaBaseIdx = builder.schemaCount;
|
|
161
|
+
const { schemaECIdToIdx: schemaEcIdToIdx, enumRowIdToIdx, koqRowIdToIdx, catRowIdToIdx, classRowIdToIdx, classResolver } = ctx;
|
|
162
|
+
// Per-schema item range tracking, indexed by LOCAL schema index (0-based within this fragment).
|
|
132
163
|
const schemaEnumStarts = [];
|
|
133
164
|
const schemaEnumCounts = [];
|
|
134
165
|
const schemaKoqStarts = [];
|
|
@@ -137,14 +168,14 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
137
168
|
const schemaCatCounts = [];
|
|
138
169
|
const schemaClassStarts = [];
|
|
139
170
|
const schemaClassCounts = [];
|
|
140
|
-
// Deferred class data for cross-reference resolution
|
|
171
|
+
// Deferred class data for cross-reference resolution (local to this fragment).
|
|
141
172
|
const pendingClasses = [];
|
|
142
173
|
// ---- PropertyDefTable ----
|
|
143
174
|
expectTag(reader, Tag.PropertyDefTable);
|
|
144
175
|
const defCount = reader.readU32();
|
|
145
|
-
// Each PreParsedDef
|
|
146
|
-
//
|
|
147
|
-
reader.validateCount(defCount,
|
|
176
|
+
// Each PreParsedDef is a fixed 46 bytes (10x u32 + 1x u16 + 4x u8). The bound is deliberately
|
|
177
|
+
// about half that, so a valid blob never trips the check.
|
|
178
|
+
reader.validateCount(defCount, 23, "PropertyDefTable");
|
|
148
179
|
const preParsedDefs = new Array(defCount);
|
|
149
180
|
for (let i = 0; i < defCount; i++) {
|
|
150
181
|
preParsedDefs[i] = {
|
|
@@ -168,7 +199,8 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
168
199
|
// ---- SchemaTable ----
|
|
169
200
|
expectTag(reader, Tag.SchemaTable);
|
|
170
201
|
const schemaCount = reader.readU32();
|
|
171
|
-
|
|
202
|
+
// Fixed 27 bytes per record (4x SRef + 3x u16 + u32 + u8).
|
|
203
|
+
reader.validateCount(schemaCount, 13, "SchemaTable");
|
|
172
204
|
for (let i = 0; i < schemaCount; i++) {
|
|
173
205
|
const name = reader.readSRef();
|
|
174
206
|
const vRead = reader.readU16();
|
|
@@ -195,7 +227,7 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
195
227
|
isHidden,
|
|
196
228
|
});
|
|
197
229
|
schemaEcIdToIdx.set(ecInstanceId, schemaIdx);
|
|
198
|
-
|
|
230
|
+
ctx.schemaNames[schemaIdx] = name;
|
|
199
231
|
schemaEnumStarts.push(0);
|
|
200
232
|
schemaEnumCounts.push(0);
|
|
201
233
|
schemaKoqStarts.push(0);
|
|
@@ -205,25 +237,31 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
205
237
|
schemaClassStarts.push(0);
|
|
206
238
|
schemaClassCounts.push(0);
|
|
207
239
|
}
|
|
208
|
-
/** Track an item's schema ownership and update range counters.
|
|
240
|
+
/** Track an item's schema ownership and update its owning schema's range counters. `globalIdx`
|
|
241
|
+
* is the item's global index in the builder; `starts`/`counts` are indexed by LOCAL schema index.
|
|
242
|
+
* An item must be owned by a schema in its own fragment, so a foreign owner is a malformed blob. */
|
|
209
243
|
function trackItem(schemaEcId, globalIdx, starts, counts) {
|
|
210
244
|
const schemaIdx = schemaEcIdToIdx.get(schemaEcId);
|
|
211
245
|
if (schemaIdx === undefined)
|
|
212
246
|
throw new Error(`SchemaView blob: unknown schema ecInstanceId ${schemaEcId}`);
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
247
|
+
const localIdx = schemaIdx - schemaBaseIdx;
|
|
248
|
+
if (localIdx < 0 || localIdx >= schemaCount)
|
|
249
|
+
throw new Error(`SchemaView fragment: item references schema ecInstanceId ${schemaEcId} not present in this fragment`);
|
|
250
|
+
if (counts[localIdx] === 0)
|
|
251
|
+
starts[localIdx] = globalIdx;
|
|
252
|
+
counts[localIdx]++;
|
|
216
253
|
return schemaIdx;
|
|
217
254
|
}
|
|
218
255
|
// ---- EnumTable ----
|
|
219
256
|
expectTag(reader, Tag.EnumTable);
|
|
220
257
|
const enumTotalCount = reader.readU32();
|
|
221
|
-
|
|
258
|
+
// Fixed 27 bytes per record (4x SRef + 2x u32 + u16 + u8); enumerators live inside a JSON SRef.
|
|
259
|
+
reader.validateCount(enumTotalCount, 13, "EnumTable");
|
|
222
260
|
for (let i = 0; i < enumTotalCount; i++) {
|
|
223
261
|
const schemaEcId = reader.readU32();
|
|
224
|
-
const schemaIdx = trackItem(schemaEcId,
|
|
262
|
+
const schemaIdx = trackItem(schemaEcId, builder.enumerationCount, schemaEnumStarts, schemaEnumCounts);
|
|
225
263
|
const eName = reader.readSRef();
|
|
226
|
-
const ePrimType = reader.
|
|
264
|
+
const ePrimType = reader.readU16();
|
|
227
265
|
const eIsStrict = reader.readU8() !== 0;
|
|
228
266
|
const eLabel = reader.readSRef();
|
|
229
267
|
const eDesc = reader.readSRef();
|
|
@@ -267,10 +305,11 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
267
305
|
// ---- KoQTable ----
|
|
268
306
|
expectTag(reader, Tag.KoQTable);
|
|
269
307
|
const koqTotalCount = reader.readU32();
|
|
270
|
-
|
|
308
|
+
// Fixed 36 bytes per record (6x SRef + f64 + u32).
|
|
309
|
+
reader.validateCount(koqTotalCount, 18, "KoQTable");
|
|
271
310
|
for (let i = 0; i < koqTotalCount; i++) {
|
|
272
311
|
const schemaEcId = reader.readU32();
|
|
273
|
-
const schemaIdx = trackItem(schemaEcId,
|
|
312
|
+
const schemaIdx = trackItem(schemaEcId, builder.koqCount, schemaKoqStarts, schemaKoqCounts);
|
|
274
313
|
const kName = reader.readSRef();
|
|
275
314
|
const kLabel = reader.readSRef();
|
|
276
315
|
const kDesc = reader.readSRef();
|
|
@@ -293,10 +332,11 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
293
332
|
// ---- PropCatTable ----
|
|
294
333
|
expectTag(reader, Tag.PropCatTable);
|
|
295
334
|
const catTotalCount = reader.readU32();
|
|
296
|
-
|
|
335
|
+
// Fixed 24 bytes per record (4x SRef + i32 + u32).
|
|
336
|
+
reader.validateCount(catTotalCount, 12, "PropCatTable");
|
|
297
337
|
for (let i = 0; i < catTotalCount; i++) {
|
|
298
338
|
const schemaEcId = reader.readU32();
|
|
299
|
-
const schemaIdx = trackItem(schemaEcId,
|
|
339
|
+
const schemaIdx = trackItem(schemaEcId, builder.propCategoryCount, schemaCatStarts, schemaCatCounts);
|
|
300
340
|
const pcName = reader.readSRef();
|
|
301
341
|
const pcLabel = reader.readSRef();
|
|
302
342
|
const pcDesc = reader.readSRef();
|
|
@@ -315,11 +355,13 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
315
355
|
// ---- ClassTable ----
|
|
316
356
|
expectTag(reader, Tag.ClassTable);
|
|
317
357
|
const classTotalCount = reader.readU32();
|
|
318
|
-
|
|
358
|
+
// Minimum 27 bytes per record (3x SRef + 3x u8 + u32 + 2x u16 count prefixes); records grow with
|
|
359
|
+
// relationship strength/direction and the base-class, prop-ref, and constraint sub-lists.
|
|
360
|
+
reader.validateCount(classTotalCount, 13, "ClassTable");
|
|
319
361
|
for (let i = 0; i < classTotalCount; i++) {
|
|
320
362
|
const schemaEcId = reader.readU32();
|
|
321
|
-
const schemaIdx = trackItem(schemaEcId,
|
|
322
|
-
const
|
|
363
|
+
const schemaIdx = trackItem(schemaEcId, builder.classCount, schemaClassStarts, schemaClassCounts);
|
|
364
|
+
const schemaName = ctx.schemaNames[schemaIdx];
|
|
323
365
|
const cName = reader.readSRef();
|
|
324
366
|
const cType = reader.readU8();
|
|
325
367
|
const cModifier = reader.readU8();
|
|
@@ -409,7 +451,7 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
409
451
|
targetConstraintIdx: -1,
|
|
410
452
|
isHidden: cIsHidden,
|
|
411
453
|
});
|
|
412
|
-
|
|
454
|
+
classResolver.set(`${schemaName.toLowerCase()}:${cName.toLowerCase()}`, classIdx);
|
|
413
455
|
classRowIdToIdx.set(cEcInstanceId, classIdx);
|
|
414
456
|
pendingClasses.push({
|
|
415
457
|
schemaIdx,
|
|
@@ -425,13 +467,14 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
425
467
|
baseClasses,
|
|
426
468
|
propRefs,
|
|
427
469
|
constraints,
|
|
428
|
-
schemaName
|
|
470
|
+
schemaName,
|
|
429
471
|
isHidden: cIsHidden,
|
|
430
472
|
});
|
|
431
473
|
}
|
|
432
474
|
// ---- Finalize per-schema item ranges ----
|
|
475
|
+
// Local index i maps to global schema index schemaBaseIdx + i; range starts are already global.
|
|
433
476
|
for (let i = 0; i < schemaCount; i++) {
|
|
434
|
-
builder.updateSchemaRanges(i, {
|
|
477
|
+
builder.updateSchemaRanges(schemaBaseIdx + i, {
|
|
435
478
|
classRangeStart: schemaClassStarts[i] ?? 0,
|
|
436
479
|
classCount: schemaClassCounts[i] ?? 0,
|
|
437
480
|
enumRangeStart: schemaEnumStarts[i] ?? 0,
|
|
@@ -442,12 +485,6 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
442
485
|
catCount: schemaCatCounts[i] ?? 0,
|
|
443
486
|
});
|
|
444
487
|
}
|
|
445
|
-
// Build a global name resolver: "SchemaName:ClassName" -> classIdx
|
|
446
|
-
const classResolver = new Map();
|
|
447
|
-
for (const s of schemaInfos) {
|
|
448
|
-
for (const [lowerName, idx] of s.classNameToIdx)
|
|
449
|
-
classResolver.set(`${s.name.toLowerCase()}:${lowerName}`, idx);
|
|
450
|
-
}
|
|
451
488
|
// Resolve pre-parsed defs to PropertyDef objects. Maps preParsedDef index -> builder defIdx.
|
|
452
489
|
const danglingRefs = [];
|
|
453
490
|
const resolvedDefMap = new Map();
|
|
@@ -602,6 +639,8 @@ export function parseSchemaViewBlob(data, schemaToken) {
|
|
|
602
639
|
const lines = danglingRefs.length <= cap ? danglingRefs : [...danglingRefs.slice(0, cap), `... and ${danglingRefs.length - cap} more`];
|
|
603
640
|
Logger.logWarning("ecschema-metadata.SchemaView", `${danglingRefs.length} unresolved cross-reference(s) in schema view blob (likely from excluded schemas):\n ${lines.join("\n ")}`);
|
|
604
641
|
}
|
|
605
|
-
|
|
642
|
+
// Bring the builder's lookup maps up to date for the schemas this fragment added. Their item
|
|
643
|
+
// ranges were finalized above, so the per-schema name maps build correctly.
|
|
644
|
+
builder.extendLookupMaps();
|
|
606
645
|
}
|
|
607
646
|
//# sourceMappingURL=SchemaViewBinaryReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaViewBinaryReader.js","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewBinaryReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Schema\n */\n\nimport { BentleyError, Logger } from \"@itwin/core-bentley\";\nimport { type SchemaView } from \"./SchemaView\";\nimport { SchemaViewBuilder } from \"./SchemaViewBuilder\";\nimport { StrengthDirection, StrengthType } from \"../ECObjects\";\nimport { ClassData, ClassModifier, ClassType, PropertyDef, PropertyKind, schemaViewFormatVersion, SchemaViewPrimitiveType } from \"./SchemaViewInterfaces\";\n\n/** Binary record tags for the SchemaView blob format.\n * Each tag marks a flat, count-prefixed table. Must stay in sync with the C++ writer. */\nenum Tag {\n PropertyDefTable = 0x0A,\n SchemaTable = 0x10,\n EnumTable = 0x20,\n KoQTable = 0x30,\n PropCatTable = 0x31,\n ClassTable = 0x40,\n}\n\nconst MAGIC = 0x43534348; // \"CSCH\"\n\n/** Low-level binary reader for the SchemaView blob. */\nclass BinaryReader {\n private _view: DataView;\n private _bytes: Uint8Array;\n private _pos: number;\n private _strings: string[];\n\n constructor(data: Uint8Array) {\n this._bytes = data;\n this._view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n this._pos = 0;\n this._strings = [];\n }\n\n public readU8(): number {\n if (this._pos >= this._bytes.length)\n throw new Error(`SchemaView blob truncated: cannot read u8 at offset ${this._pos} (length ${this._bytes.length})`);\n return this._bytes[this._pos++];\n }\n public readU16(): number { const v = this._view.getUint16(this._pos, true); this._pos += 2; return v; }\n public readU32(): number { const v = this._view.getUint32(this._pos, true); this._pos += 4; return v; }\n public readI32(): number { const v = this._view.getInt32(this._pos, true); this._pos += 4; return v; }\n public readF64(): number { const v = this._view.getFloat64(this._pos, true); this._pos += 8; return v; }\n public get pos(): number { return this._pos; }\n public set pos(v: number) { this._pos = v; }\n\n /** Read a string-table reference (U32 index) and return the original string. */\n public readSRef(): string {\n const idx = this.readU32();\n if (idx >= this._strings.length)\n throw new Error(`SchemaView blob: string reference ${idx} out of range (string table size ${this._strings.length})`);\n return this._strings[idx];\n }\n\n /** Validate a count-prefixed table header: the declared count cannot exceed what the remaining\n * buffer could plausibly hold. Each entry consumes at least `minBytesPerEntry` bytes. */\n public validateCount(count: number, minBytesPerEntry: number, tableName: string): void {\n const remaining = this._bytes.length - this._pos;\n if (count > remaining / Math.max(1, minBytesPerEntry))\n throw new Error(`SchemaView blob: ${tableName} count ${count} exceeds remaining buffer (${remaining} bytes)`);\n }\n\n /** Parse the string table at the given offset. */\n public parseStringTable(offset: number): void {\n if (offset > this._bytes.length)\n throw new Error(`SchemaView blob: stringTable offset ${offset} is past end of blob (length ${this._bytes.length})`);\n const saved = this._pos;\n this._pos = offset;\n const count = this.readU32();\n // Each entry is at minimum a 4-byte length prefix - a count larger than the remaining bytes\n // cannot possibly be valid and would cause a huge `new Array` allocation on a malformed blob.\n const remaining = this._bytes.length - this._pos;\n if (count > remaining / 4)\n throw new Error(`SchemaView blob: stringTable count ${count} exceeds remaining buffer (${remaining} bytes)`);\n this._strings = new Array(count);\n const decoder = new TextDecoder();\n for (let i = 0; i < count; i++) {\n const len = this.readU32();\n if (len === 0) {\n this._strings[i] = \"\";\n } else {\n if (len > this._bytes.length - this._pos)\n throw new Error(`SchemaView blob: string entry ${i} has length ${len} but only ${this._bytes.length - this._pos} bytes remain`);\n this._strings[i] = decoder.decode(this._bytes.subarray(this._pos, this._pos + len));\n this._pos += len;\n }\n }\n this._pos = saved;\n }\n}\n\n/** Read a U32 that uses 0xFFFFFFFF as a sentinel for \"not set\". */\nfunction readOptionalU32(reader: BinaryReader): number | undefined {\n const v = reader.readU32();\n return v === 0xFFFFFFFF ? undefined : v;\n}\n\n/** Temporary per-class data collected during parsing, before cross-references are resolved. */\ninterface PendingClass {\n schemaIdx: number;\n classIdx: number;\n ecInstanceId: number;\n nameStringIdx: number;\n labelStringIdx: number;\n descriptionStringIdx: number;\n type: ClassType;\n modifier: ClassModifier;\n relStrength: StrengthType;\n relStrengthDir: StrengthDirection;\n baseClasses: Array<{ schemaName: string; className: string; ordinal: number }>;\n propRefs: PendingPropRef[];\n constraints: PendingConstraint[];\n schemaName: string;\n isHidden: boolean | undefined;\n}\n\n/** A property reference from the binary PropertyDefTable. During parsing, `preDefIdx` stores the\n * index into the pre-parsed def array; during resolution it's mapped to the builder's deduped defIdx. */\ninterface PendingPropRef {\n preDefIdx: number; // index into preParsedDefs (mapped to builder defIdx during resolution)\n ecInstanceId: number;\n labelStringIdx: number;\n priority: number;\n}\n\n/** Pre-parsed property definition from the binary PropertyDefTable, with row ID cross-refs. */\ninterface PreParsedDef {\n name: string;\n description: string;\n kind: PropertyKind;\n primitiveType: SchemaViewPrimitiveType;\n extType: string;\n enumRowId: number; // ec_Enumeration.Id (0 = none)\n structClassRowId: number; // ec_Class.Id for struct type (0 = none)\n koqRowId: number; // ec_KindOfQuantity.Id (0 = none)\n catRowId: number; // ec_PropertyCategory.Id (0 = none)\n arrayMinOccurs: number | undefined;\n arrayMaxOccurs: number | undefined;\n navRelClassRowId: number; // ec_Class.Id for nav relationship (0 = none)\n navDirection: StrengthDirection;\n isReadonly: boolean;\n isHidden: boolean;\n}\n\ninterface PendingConstraint {\n relEnd: number; // 0=source, 1=target\n isPolymorphic: boolean;\n multiplicityLower: number;\n multiplicityUpper: number;\n roleLabel: string;\n abstractSchemaName: string;\n abstractClassName: string;\n constraintClasses: Array<{ schemaName: string; className: string }>;\n}\n\n/** Helper: read a tag byte and validate it matches the expected tag. */\nfunction expectTag(reader: BinaryReader, expected: Tag): void {\n const tag = reader.readU8();\n if (tag !== expected)\n throw new Error(`Expected tag 0x${expected.toString(16)} but found 0x${tag.toString(16)} at offset ${reader.pos - 1}`);\n}\n\n/** Reusable parse/merge context for SchemaView blobs. Holds the live `SchemaViewBuilder` plus the\n * cross-reference maps that must persist across fragment merges. Each `mergeBlob` appends one blob's\n * schemas into the shared builder and resolves cross-references - including cross-fragment ones -\n * against the accumulated maps. A whole-iModel blob is the degenerate case of a single fragment.\n * @note Fragments must be merged in dependency order, so a fragment only references schemas already\n * merged by an earlier one (or excluded schemas, which resolve to \"not present\").\n * @internal\n */\nexport class SchemaViewMergeContext {\n public readonly builder = new SchemaViewBuilder();\n\n // Cross-reference maps. Persist across fragments: a row id / name from a later fragment resolves\n // against a class, enum, koq, or category merged by an earlier fragment.\n public readonly schemaECIdToIdx = new Map<number, number>();\n public readonly enumRowIdToIdx = new Map<number, number>();\n public readonly koqRowIdToIdx = new Map<number, number>();\n public readonly catRowIdToIdx = new Map<number, number>();\n public readonly classRowIdToIdx = new Map<number, number>();\n // \"schemaname:classname\" (both lowercased) -> global class index. Resolves base/mixin/constraint\n // refs, which the blob encodes as schema+class name pairs, across fragment boundaries.\n public readonly classResolver = new Map<string, number>();\n // global schemaIdx -> schema name, for building resolver keys and dangling-ref diagnostics.\n public readonly schemaNames: string[] = [];\n\n /** Parse one fragment blob and append its schemas into the shared builder. Synchronous. */\n public mergeBlob(data: Uint8Array): void {\n mergeFragmentBlob(this, data);\n }\n}\n\n/** Parse a schema view blob (binary format) into a fresh `SchemaView`.\n *\n * Layout: Header, PropertyDefTable, SchemaTable, EnumTable, KoQTable, PropCatTable, ClassTable, StringTable.\n * Each table is count-prefixed. Schema items carry their schema's ecInstanceId for ownership resolution.\n * Classes have count-prefixed inline sub-items (base classes, property refs, constraints).\n *\n * Consumers should call `SchemaView.fromBinary` instead - this function is the low-level\n * implementation behind it.\n * @internal\n */\nexport function parseSchemaViewBlob(data: Uint8Array, schemaToken?: string): SchemaView {\n const ctx = new SchemaViewMergeContext();\n ctx.mergeBlob(data);\n return ctx.builder.build(schemaToken);\n}\n\n/** Parse one fragment blob and append it into the context's builder, resolving cross-references\n * against the context's accumulated global maps. Per-fragment scratch state stays local; everything\n * that must outlive the fragment lives on `ctx`.\n */\nfunction mergeFragmentBlob(ctx: SchemaViewMergeContext, data: Uint8Array): void {\n const builder = ctx.builder;\n const reader = new BinaryReader(data);\n\n // Header: magic(4) + version(1) + stringTableOffset(4)\n const magic = reader.readU32();\n if (magic !== MAGIC)\n throw new Error(`Invalid SchemaView blob magic: 0x${magic.toString(16)}, expected 0x${MAGIC.toString(16)}`);\n const version = reader.readU8();\n if (version !== schemaViewFormatVersion)\n throw new Error(`Unsupported schema view format version: ${version}, expected ${schemaViewFormatVersion}`);\n const stOffset = reader.readU32();\n reader.parseStringTable(stOffset);\n\n // Global index of the first schema this fragment adds. Local schema index = global - base.\n const schemaBaseIdx = builder.schemaCount;\n\n const { schemaECIdToIdx: schemaEcIdToIdx, enumRowIdToIdx, koqRowIdToIdx, catRowIdToIdx, classRowIdToIdx, classResolver } = ctx;\n\n // Per-schema item range tracking, indexed by LOCAL schema index (0-based within this fragment).\n const schemaEnumStarts: number[] = [];\n const schemaEnumCounts: number[] = [];\n const schemaKoqStarts: number[] = [];\n const schemaKoqCounts: number[] = [];\n const schemaCatStarts: number[] = [];\n const schemaCatCounts: number[] = [];\n const schemaClassStarts: number[] = [];\n const schemaClassCounts: number[] = [];\n\n // Deferred class data for cross-reference resolution (local to this fragment).\n const pendingClasses: PendingClass[] = [];\n\n // ---- PropertyDefTable ----\n expectTag(reader, Tag.PropertyDefTable);\n const defCount = reader.readU32();\n // Each PreParsedDef is a fixed 46 bytes (10x u32 + 1x u16 + 4x u8). The bound is deliberately\n // about half that, so a valid blob never trips the check.\n reader.validateCount(defCount, 23, \"PropertyDefTable\");\n const preParsedDefs: PreParsedDef[] = new Array(defCount);\n for (let i = 0; i < defCount; i++) {\n preParsedDefs[i] = {\n name: reader.readSRef(),\n kind: reader.readU8(),\n primitiveType: reader.readU16(),\n extType: reader.readSRef(),\n enumRowId: reader.readU32(),\n structClassRowId: reader.readU32(),\n koqRowId: reader.readU32(),\n catRowId: reader.readU32(),\n arrayMinOccurs: readOptionalU32(reader),\n arrayMaxOccurs: readOptionalU32(reader),\n navRelClassRowId: reader.readU32(),\n navDirection: reader.readU8(),\n isReadonly: reader.readU8() !== 0,\n isHidden: reader.readU8() !== 0,\n description: reader.readSRef(),\n };\n }\n\n // ---- SchemaTable ----\n expectTag(reader, Tag.SchemaTable);\n const schemaCount = reader.readU32();\n // Fixed 27 bytes per record (4x SRef + 3x u16 + u32 + u8).\n reader.validateCount(schemaCount, 13, \"SchemaTable\");\n for (let i = 0; i < schemaCount; i++) {\n const name = reader.readSRef();\n const vRead = reader.readU16();\n const vWrite = reader.readU16();\n const vMinor = reader.readU16();\n const alias = reader.readSRef();\n const label = reader.readSRef();\n const description = reader.readSRef();\n const ecInstanceId = reader.readU32();\n const isHidden = reader.readU8() !== 0;\n\n const schemaIdx = builder.addSchema({\n ecInstanceId,\n nameStringIdx: builder.internString(name),\n aliasStringIdx: builder.internString(alias),\n labelStringIdx: builder.internString(label),\n descriptionStringIdx: builder.internString(description),\n versionRead: vRead,\n versionWrite: vWrite,\n versionMinor: vMinor,\n classRangeStart: 0, classCount: 0,\n enumRangeStart: 0, enumCount: 0,\n koqRangeStart: 0, koqCount: 0,\n catRangeStart: 0, catCount: 0,\n isHidden,\n });\n schemaEcIdToIdx.set(ecInstanceId, schemaIdx);\n ctx.schemaNames[schemaIdx] = name;\n schemaEnumStarts.push(0); schemaEnumCounts.push(0);\n schemaKoqStarts.push(0); schemaKoqCounts.push(0);\n schemaCatStarts.push(0); schemaCatCounts.push(0);\n schemaClassStarts.push(0); schemaClassCounts.push(0);\n }\n\n /** Track an item's schema ownership and update its owning schema's range counters. `globalIdx`\n * is the item's global index in the builder; `starts`/`counts` are indexed by LOCAL schema index.\n * An item must be owned by a schema in its own fragment, so a foreign owner is a malformed blob. */\n function trackItem(schemaEcId: number, globalIdx: number, starts: number[], counts: number[]): number {\n const schemaIdx = schemaEcIdToIdx.get(schemaEcId);\n if (schemaIdx === undefined)\n throw new Error(`SchemaView blob: unknown schema ecInstanceId ${schemaEcId}`);\n const localIdx = schemaIdx - schemaBaseIdx;\n if (localIdx < 0 || localIdx >= schemaCount)\n throw new Error(`SchemaView fragment: item references schema ecInstanceId ${schemaEcId} not present in this fragment`);\n if (counts[localIdx] === 0)\n starts[localIdx] = globalIdx;\n counts[localIdx]++;\n return schemaIdx;\n }\n\n // ---- EnumTable ----\n expectTag(reader, Tag.EnumTable);\n const enumTotalCount = reader.readU32();\n // Fixed 27 bytes per record (4x SRef + 2x u32 + u16 + u8); enumerators live inside a JSON SRef.\n reader.validateCount(enumTotalCount, 13, \"EnumTable\");\n for (let i = 0; i < enumTotalCount; i++) {\n const schemaEcId = reader.readU32();\n const schemaIdx = trackItem(schemaEcId, builder.enumerationCount, schemaEnumStarts, schemaEnumCounts);\n\n const eName = reader.readSRef();\n const ePrimType = reader.readU16();\n const eIsStrict = reader.readU8() !== 0;\n const eLabel = reader.readSRef();\n const eDesc = reader.readSRef();\n const eValuesJson = reader.readSRef();\n const eEcInstanceId = reader.readU32();\n\n const enumeratorStart = builder.enumeratorCount;\n let enumeratorCount = 0;\n if (eValuesJson) {\n try {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const values = JSON.parse(eValuesJson) as Array<{ Name?: string; IntValue?: number; StringValue?: string; DisplayLabel?: string; Description?: string }>;\n for (const v of values) {\n const value = v.IntValue !== undefined ? v.IntValue : (v.StringValue ?? \"\");\n const name = v.Name ?? (typeof value === \"string\" ? value : `${eName}${value}`);\n builder.addEnumerator({\n nameStringIdx: builder.internString(name),\n labelStringIdx: builder.internString(v.DisplayLabel),\n descriptionStringIdx: builder.internString(v.Description),\n value,\n });\n enumeratorCount++;\n }\n } catch (e) {\n Logger.logWarning(\"ecschema-metadata.SchemaView\", `Malformed EnumValues JSON for enumeration \"${eName}\": ${BentleyError.getErrorMessage(e)}`);\n }\n }\n\n const eIdx = builder.addEnumeration({\n ecInstanceId: eEcInstanceId,\n schemaIdx,\n nameStringIdx: builder.internString(eName),\n labelStringIdx: builder.internString(eLabel),\n descriptionStringIdx: builder.internString(eDesc),\n primitiveType: ePrimType,\n isStrict: eIsStrict,\n enumeratorStart,\n enumeratorCount,\n });\n enumRowIdToIdx.set(eEcInstanceId, eIdx);\n }\n\n // ---- KoQTable ----\n expectTag(reader, Tag.KoQTable);\n const koqTotalCount = reader.readU32();\n // Fixed 36 bytes per record (6x SRef + f64 + u32).\n reader.validateCount(koqTotalCount, 18, \"KoQTable\");\n for (let i = 0; i < koqTotalCount; i++) {\n const schemaEcId = reader.readU32();\n const schemaIdx = trackItem(schemaEcId, builder.koqCount, schemaKoqStarts, schemaKoqCounts);\n\n const kName = reader.readSRef();\n const kLabel = reader.readSRef();\n const kDesc = reader.readSRef();\n const kPersUnit = reader.readSRef();\n const kRelError = reader.readF64();\n const kPresUnits = reader.readSRef();\n const kEcInstanceId = reader.readU32();\n\n const kIdx = builder.addKoq({\n ecInstanceId: kEcInstanceId,\n schemaIdx,\n nameStringIdx: builder.internString(kName),\n labelStringIdx: builder.internString(kLabel),\n descriptionStringIdx: builder.internString(kDesc),\n persistenceUnitStringIdx: builder.internString(kPersUnit),\n presentationFormatsStringIdx: builder.internString(kPresUnits),\n relativeError: kRelError,\n });\n koqRowIdToIdx.set(kEcInstanceId, kIdx);\n }\n\n // ---- PropCatTable ----\n expectTag(reader, Tag.PropCatTable);\n const catTotalCount = reader.readU32();\n // Fixed 24 bytes per record (4x SRef + i32 + u32).\n reader.validateCount(catTotalCount, 12, \"PropCatTable\");\n for (let i = 0; i < catTotalCount; i++) {\n const schemaEcId = reader.readU32();\n const schemaIdx = trackItem(schemaEcId, builder.propCategoryCount, schemaCatStarts, schemaCatCounts);\n\n const pcName = reader.readSRef();\n const pcLabel = reader.readSRef();\n const pcDesc = reader.readSRef();\n const pcPriority = reader.readI32();\n const pcEcInstanceId = reader.readU32();\n\n const pcIdx = builder.addPropertyCategory({\n ecInstanceId: pcEcInstanceId,\n schemaIdx,\n nameStringIdx: builder.internString(pcName),\n labelStringIdx: builder.internString(pcLabel),\n descriptionStringIdx: builder.internString(pcDesc),\n priority: pcPriority,\n });\n catRowIdToIdx.set(pcEcInstanceId, pcIdx);\n }\n\n // ---- ClassTable ----\n expectTag(reader, Tag.ClassTable);\n const classTotalCount = reader.readU32();\n // Minimum 27 bytes per record (3x SRef + 3x u8 + u32 + 2x u16 count prefixes); records grow with\n // relationship strength/direction and the base-class, prop-ref, and constraint sub-lists.\n reader.validateCount(classTotalCount, 13, \"ClassTable\");\n for (let i = 0; i < classTotalCount; i++) {\n const schemaEcId = reader.readU32();\n const schemaIdx = trackItem(schemaEcId, builder.classCount, schemaClassStarts, schemaClassCounts);\n const schemaName = ctx.schemaNames[schemaIdx];\n\n const cName = reader.readSRef();\n const cType = reader.readU8();\n const cModifier = reader.readU8();\n const cLabel = reader.readSRef();\n const cDesc = reader.readSRef();\n let relStrength: StrengthType = StrengthType.Referencing;\n let relStrengthDir: StrengthDirection = StrengthDirection.Forward;\n if (cType === ClassType.Relationship) {\n relStrength = reader.readU8();\n relStrengthDir = reader.readU8();\n }\n const cEcInstanceId = reader.readU32();\n // Tri-state hidden: 0=undefined (no CA, schema doesn't hide), 1=true (hidden), 2=false (explicitly shown)\n const cHiddenByte = reader.readU8();\n const cIsHidden: boolean | undefined = cHiddenByte === 1 ? true : cHiddenByte === 2 ? false : undefined;\n\n // Base classes (count-prefixed)\n const baseCount = reader.readU16();\n const baseClasses: Array<{ schemaName: string; className: string; ordinal: number }> = [];\n for (let b = 0; b < baseCount; b++) {\n baseClasses.push({\n schemaName: reader.readSRef(),\n className: reader.readSRef(),\n ordinal: reader.readU8(),\n });\n }\n\n // Property refs (count-prefixed)\n const propRefCount = reader.readU16();\n const propRefs: PendingPropRef[] = [];\n for (let p = 0; p < propRefCount; p++) {\n propRefs.push({\n preDefIdx: reader.readU32(),\n labelStringIdx: builder.internString(reader.readSRef()),\n priority: reader.readI32(),\n ecInstanceId: reader.readU32(),\n });\n }\n\n // Constraints (count-prefixed, only for relationships)\n const constraints: PendingConstraint[] = [];\n if (cType === ClassType.Relationship) {\n const constrCount = reader.readU8();\n for (let c = 0; c < constrCount; c++) {\n const rcEnd = reader.readU8();\n const rcMultLower = reader.readU32();\n const rcMultUpper = reader.readU32();\n const rcIsPoly = reader.readU8() !== 0;\n const rcRoleLabel = reader.readSRef();\n const rcAbsSchema = reader.readSRef();\n const rcAbsClass = reader.readSRef();\n\n // Constraint classes (count-prefixed)\n const ccCount = reader.readU8();\n const constraintClasses: Array<{ schemaName: string; className: string }> = [];\n for (let cc = 0; cc < ccCount; cc++) {\n constraintClasses.push({\n schemaName: reader.readSRef(),\n className: reader.readSRef(),\n });\n }\n\n constraints.push({\n relEnd: rcEnd,\n isPolymorphic: rcIsPoly,\n multiplicityLower: rcMultLower,\n multiplicityUpper: rcMultUpper,\n roleLabel: rcRoleLabel,\n abstractSchemaName: rcAbsSchema,\n abstractClassName: rcAbsClass,\n constraintClasses,\n });\n }\n }\n\n const nameStringIdx = builder.internString(cName);\n const classIdx = builder.addClass({\n ecInstanceId: cEcInstanceId,\n schemaIdx,\n nameStringIdx,\n labelStringIdx: builder.internString(cLabel),\n descriptionStringIdx: builder.internString(cDesc),\n type: cType,\n modifier: cModifier,\n baseClassIdx: -1,\n mixinStartIdx: -1,\n mixinCount: 0,\n ownPropStart: 0,\n ownPropCount: 0,\n strength: relStrength,\n strengthDirection: relStrengthDir,\n sourceConstraintIdx: -1,\n targetConstraintIdx: -1,\n isHidden: cIsHidden,\n });\n classResolver.set(`${schemaName.toLowerCase()}:${cName.toLowerCase()}`, classIdx);\n classRowIdToIdx.set(cEcInstanceId, classIdx);\n\n pendingClasses.push({\n schemaIdx,\n classIdx,\n ecInstanceId: cEcInstanceId,\n nameStringIdx,\n labelStringIdx: builder.internString(cLabel),\n descriptionStringIdx: builder.internString(cDesc),\n type: cType,\n modifier: cModifier,\n relStrength,\n relStrengthDir,\n baseClasses,\n propRefs,\n constraints,\n schemaName,\n isHidden: cIsHidden,\n });\n }\n\n // ---- Finalize per-schema item ranges ----\n // Local index i maps to global schema index schemaBaseIdx + i; range starts are already global.\n for (let i = 0; i < schemaCount; i++) {\n builder.updateSchemaRanges(schemaBaseIdx + i, {\n classRangeStart: schemaClassStarts[i] ?? 0,\n classCount: schemaClassCounts[i] ?? 0,\n enumRangeStart: schemaEnumStarts[i] ?? 0,\n enumCount: schemaEnumCounts[i] ?? 0,\n koqRangeStart: schemaKoqStarts[i] ?? 0,\n koqCount: schemaKoqCounts[i] ?? 0,\n catRangeStart: schemaCatStarts[i] ?? 0,\n catCount: schemaCatCounts[i] ?? 0,\n });\n }\n\n // Resolve pre-parsed defs to PropertyDef objects. Maps preParsedDef index -> builder defIdx.\n const danglingRefs: string[] = [];\n const resolvedDefMap = new Map<number, number>();\n const brokenDefs = new Set<number>();\n\n for (let i = 0; i < preParsedDefs.length; i++) {\n const prDef = preParsedDefs[i];\n\n let structClassIdx = -1;\n if (prDef.structClassRowId !== 0) {\n structClassIdx = classRowIdToIdx.get(prDef.structClassRowId) ?? -1;\n if (structClassIdx === -1) {\n brokenDefs.add(i);\n danglingRefs.push(`Dropped properties with struct class rowId ${prDef.structClassRowId}`);\n continue;\n }\n }\n\n let navRelClassIdx = -1;\n if (prDef.navRelClassRowId !== 0) {\n navRelClassIdx = classRowIdToIdx.get(prDef.navRelClassRowId) ?? -1;\n if (navRelClassIdx === -1) {\n brokenDefs.add(i);\n danglingRefs.push(`Dropped properties with nav relationship rowId ${prDef.navRelClassRowId}`);\n continue;\n }\n }\n\n let enumIdx = -1;\n if (prDef.enumRowId !== 0) {\n enumIdx = enumRowIdToIdx.get(prDef.enumRowId) ?? -1;\n if (enumIdx === -1)\n danglingRefs.push(`Unresolved enum rowId ${prDef.enumRowId}`);\n }\n\n let koqIdx = -1;\n if (prDef.koqRowId !== 0)\n koqIdx = koqRowIdToIdx.get(prDef.koqRowId) ?? -1;\n\n let categoryIdx = -1;\n if (prDef.catRowId !== 0)\n categoryIdx = catRowIdToIdx.get(prDef.catRowId) ?? -1;\n\n const def: PropertyDef = {\n nameStringIdx: builder.internString(prDef.name),\n descriptionStringIdx: builder.internString(prDef.description),\n kind: prDef.kind,\n primitiveType: prDef.primitiveType,\n extTypeStringIdx: builder.internString(prDef.extType),\n enumIdx,\n koqIdx,\n structClassIdx,\n navRelClassIdx,\n navDirection: prDef.navDirection,\n categoryIdx,\n isReadOnly: prDef.isReadonly,\n isHidden: prDef.isHidden,\n arrayMinOccurs: prDef.arrayMinOccurs,\n arrayMaxOccurs: prDef.arrayMaxOccurs,\n };\n\n resolvedDefMap.set(i, builder.addPropertyDef(def));\n }\n\n // Resolve cross-references and finalize classes\n for (const pc of pendingClasses) {\n pc.baseClasses.sort((a, b) => a.ordinal - b.ordinal);\n const classFullName = `${pc.schemaName}:${builder.getString(pc.nameStringIdx)}`;\n\n let baseClassIdx = -1;\n const mixinStartIdx = pc.baseClasses.length > 1 ? builder.classMixinCount : -1;\n let mixinCount = 0;\n\n for (const bc of pc.baseClasses) {\n const bcKey = `${bc.schemaName.toLowerCase()}:${bc.className.toLowerCase()}`;\n const bcIdx = classResolver.get(bcKey) ?? -1;\n if (bc.ordinal === 0) {\n if (bcIdx === -1 && bc.schemaName)\n danglingRefs.push(`${classFullName} -> base class ${bc.schemaName}:${bc.className}`);\n baseClassIdx = bcIdx;\n } else {\n if (bcIdx === -1) {\n danglingRefs.push(`${classFullName} -> mixin ${bc.schemaName}:${bc.className}`);\n continue;\n }\n builder.addClassMixin(bcIdx);\n mixinCount++;\n }\n }\n\n const ownPropStart = builder.propertyRefCount;\n for (const pr of pc.propRefs) {\n if (brokenDefs.has(pr.preDefIdx))\n continue;\n const defIdx = resolvedDefMap.get(pr.preDefIdx);\n if (defIdx === undefined)\n continue;\n builder.addPropertyRef({\n ecInstanceId: pr.ecInstanceId,\n defIdx,\n labelStringIdx: pr.labelStringIdx,\n priority: pr.priority,\n });\n }\n\n let sourceConstraintIdx = -1;\n let targetConstraintIdx = -1;\n for (const con of pc.constraints) {\n const absKey = con.abstractSchemaName && con.abstractClassName\n ? `${con.abstractSchemaName.toLowerCase()}:${con.abstractClassName.toLowerCase()}`\n : \"\";\n const absClassIdx = absKey ? (classResolver.get(absKey) ?? -1) : -1;\n if (absClassIdx === -1 && absKey)\n danglingRefs.push(`${classFullName} constraint -> abstract ${con.abstractSchemaName}:${con.abstractClassName}`);\n\n const classRefStart = builder.constraintClassRefCount;\n let classRefCount = 0;\n for (const cc of con.constraintClasses) {\n const ccKey = `${cc.schemaName.toLowerCase()}:${cc.className.toLowerCase()}`;\n const ccIdx = classResolver.get(ccKey) ?? -1;\n if (ccIdx === -1) {\n danglingRefs.push(`${classFullName} constraint -> class ${cc.schemaName}:${cc.className}`);\n continue;\n }\n builder.addConstraintClassRef(ccIdx);\n classRefCount++;\n }\n\n const constraintIdx = builder.addRelConstraint({\n abstractConstraintIdx: absClassIdx,\n polymorphic: con.isPolymorphic,\n multiplicityLower: con.multiplicityLower,\n multiplicityUpper: con.multiplicityUpper,\n roleLabelStringIdx: builder.internString(con.roleLabel),\n classRefStart,\n classRefCount,\n });\n\n if (con.relEnd === 0)\n sourceConstraintIdx = constraintIdx;\n else\n targetConstraintIdx = constraintIdx;\n }\n\n const updatedClass: ClassData = {\n ecInstanceId: pc.ecInstanceId,\n schemaIdx: pc.schemaIdx,\n nameStringIdx: pc.nameStringIdx,\n labelStringIdx: pc.labelStringIdx,\n descriptionStringIdx: pc.descriptionStringIdx,\n type: pc.type,\n modifier: pc.modifier,\n baseClassIdx,\n mixinStartIdx,\n mixinCount,\n ownPropStart,\n ownPropCount: builder.propertyRefCount - ownPropStart,\n strength: pc.relStrength,\n strengthDirection: pc.relStrengthDir,\n sourceConstraintIdx,\n targetConstraintIdx,\n isHidden: pc.isHidden,\n };\n builder.updateClass(pc.classIdx, updatedClass);\n }\n\n if (danglingRefs.length > 0) {\n const cap = 20;\n const lines = danglingRefs.length <= cap ? danglingRefs : [...danglingRefs.slice(0, cap), `... and ${danglingRefs.length - cap} more`];\n Logger.logWarning(\"ecschema-metadata.SchemaView\", `${danglingRefs.length} unresolved cross-reference(s) in schema view blob (likely from excluded schemas):\\n ${lines.join(\"\\n \")}`);\n }\n\n // Bring the builder's lookup maps up to date for the schemas this fragment added. Their item\n // ranges were finalized above, so the per-schema name maps build correctly.\n builder.extendLookupMaps();\n}\n\n"]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/** @packageDocumentation
|
|
2
|
+
* @module Schema
|
|
3
|
+
*/
|
|
4
|
+
import type { ClassData, EnumerationData, EnumeratorData, KoqData, PropCategoryData, PropertyDef, PropertyRef, RelConstraintData, SchemaData } from "./SchemaViewInterfaces";
|
|
5
|
+
import { SchemaView, type SchemaViewData } from "./SchemaView";
|
|
6
|
+
/** Builder for constructing an immutable `SchemaView`.
|
|
7
|
+
*
|
|
8
|
+
* Collects data during binary blob parsing, then freezes it into a view.
|
|
9
|
+
* Handles string interning and property definition deduplication.
|
|
10
|
+
*
|
|
11
|
+
* Consumers should not use this directly - read views via `IModelDb.getSchemaView`
|
|
12
|
+
* / `IModelConnection.getSchemaView` (or `SchemaView.fromBinary` if you have a raw blob).
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export declare class SchemaViewBuilder {
|
|
16
|
+
private readonly _strings;
|
|
17
|
+
private readonly _lowerStrings;
|
|
18
|
+
private readonly _stringMap;
|
|
19
|
+
private readonly _schemas;
|
|
20
|
+
private readonly _classes;
|
|
21
|
+
private readonly _classMixins;
|
|
22
|
+
private readonly _propDefs;
|
|
23
|
+
private readonly _propertyRefs;
|
|
24
|
+
private readonly _relConstraints;
|
|
25
|
+
private readonly _constraintClassRefs;
|
|
26
|
+
private readonly _enumerations;
|
|
27
|
+
private readonly _enumerators;
|
|
28
|
+
private readonly _koqs;
|
|
29
|
+
private readonly _propCategories;
|
|
30
|
+
private readonly _propDefMap;
|
|
31
|
+
private readonly _schemaByName;
|
|
32
|
+
private readonly _schemaByAlias;
|
|
33
|
+
private readonly _classByName;
|
|
34
|
+
private readonly _enumByName;
|
|
35
|
+
private readonly _koqByName;
|
|
36
|
+
private readonly _catByName;
|
|
37
|
+
private _lookupMapsBuiltUpto;
|
|
38
|
+
/** Intern a string, returning its SID. Empty/undefined strings return 0.
|
|
39
|
+
* Interning is case-sensitive - "MyLabel" and "MYLABEL" get distinct SIDs.
|
|
40
|
+
* The `lowerStrings` array provides case-insensitive lookup without mutating display values.
|
|
41
|
+
*/
|
|
42
|
+
internString(value: string | undefined): number;
|
|
43
|
+
/** Add a schema. Returns its index. */
|
|
44
|
+
addSchema(data: SchemaData): number;
|
|
45
|
+
/** Add a class. Returns its index. Must be called after the owning schema. */
|
|
46
|
+
addClass(data: ClassData): number;
|
|
47
|
+
/** Add a property definition with deduplication. Returns the def index (possibly existing). */
|
|
48
|
+
addPropertyDef(data: PropertyDef): number;
|
|
49
|
+
/** Append a property reference to the flat refs array. */
|
|
50
|
+
addPropertyRef(ref: PropertyRef): void;
|
|
51
|
+
/** Add an enumeration. Returns its index. */
|
|
52
|
+
addEnumeration(data: EnumerationData): number;
|
|
53
|
+
/** Append an enumerator to the flat enumerators array. */
|
|
54
|
+
addEnumerator(data: EnumeratorData): void;
|
|
55
|
+
/** Add a KindOfQuantity. Returns its index. */
|
|
56
|
+
addKoq(data: KoqData): number;
|
|
57
|
+
/** Add a PropertyCategory. Returns its index. */
|
|
58
|
+
addPropertyCategory(data: PropCategoryData): number;
|
|
59
|
+
/** Add a relationship constraint. Returns its index. */
|
|
60
|
+
addRelConstraint(data: RelConstraintData): number;
|
|
61
|
+
/** Append a constraint class reference to the flat array. */
|
|
62
|
+
addConstraintClassRef(classIdx: number): void;
|
|
63
|
+
/** Append a mixin class reference to the flat array. */
|
|
64
|
+
addClassMixin(classIdx: number): void;
|
|
65
|
+
/** The current count of property refs (used to set ownPropStart on ClassData). */
|
|
66
|
+
get propertyRefCount(): number;
|
|
67
|
+
/** The current count of enumerators (used to set enumeratorStart on EnumerationData). */
|
|
68
|
+
get enumeratorCount(): number;
|
|
69
|
+
/** The current count of constraint class refs (used to set classRefStart). */
|
|
70
|
+
get constraintClassRefCount(): number;
|
|
71
|
+
/** The current count of class mixins (used to set mixinStartIdx). */
|
|
72
|
+
get classMixinCount(): number;
|
|
73
|
+
/** The current count of schemas. @internal */
|
|
74
|
+
get schemaCount(): number;
|
|
75
|
+
/** The current count of classes. @internal */
|
|
76
|
+
get classCount(): number;
|
|
77
|
+
/** The current count of enumerations. @internal */
|
|
78
|
+
get enumerationCount(): number;
|
|
79
|
+
/** The current count of KindOfQuantities. @internal */
|
|
80
|
+
get koqCount(): number;
|
|
81
|
+
/** The current count of property categories. @internal */
|
|
82
|
+
get propCategoryCount(): number;
|
|
83
|
+
/** Get a string by SID. @internal */
|
|
84
|
+
getString(sid: number): string;
|
|
85
|
+
/** Replace class data at the given index (used during deferred cross-ref resolution). @internal */
|
|
86
|
+
updateClass(classIdx: number, data: ClassData): void;
|
|
87
|
+
/** Update range fields on a schema (used after all items for a schema are collected). @internal */
|
|
88
|
+
updateSchemaRanges(schemaIdx: number, ranges: {
|
|
89
|
+
classRangeStart: number;
|
|
90
|
+
classCount: number;
|
|
91
|
+
enumRangeStart: number;
|
|
92
|
+
enumCount: number;
|
|
93
|
+
koqRangeStart: number;
|
|
94
|
+
koqCount: number;
|
|
95
|
+
catRangeStart: number;
|
|
96
|
+
catCount: number;
|
|
97
|
+
}): void;
|
|
98
|
+
/** Freeze all data and produce an immutable SchemaView. */
|
|
99
|
+
build(schemaToken?: string): SchemaView;
|
|
100
|
+
/** Build lookup-map entries for any schemas added since the last call. Idempotent and
|
|
101
|
+
* append-only, so it is safe to call after each fragment merge. A schema's item ranges must
|
|
102
|
+
* already be finalized (via `updateSchemaRanges`) before it is processed.
|
|
103
|
+
* @internal */
|
|
104
|
+
extendLookupMaps(): void;
|
|
105
|
+
/** Assemble a {@link SchemaViewData} bag that references this builder's live arrays and lookup
|
|
106
|
+
* maps. Continued building - fragment merges that append to the arrays and extend the maps in
|
|
107
|
+
* place - is visible through the shared references, so a husk holding this data sees merged
|
|
108
|
+
* schemas without rebuilding. @internal */
|
|
109
|
+
assembleData(): SchemaViewData;
|
|
110
|
+
/** Produce a dedup signature for a PropertyDef. Label and priority are excluded because
|
|
111
|
+
* they are per-PropertyRef overrides, not part of the structural definition.
|
|
112
|
+
* Uses SIDs (not lowercase strings) for name/description so that case-preserving names
|
|
113
|
+
* stay distinct - matching the C++ writer's dedup behavior. */
|
|
114
|
+
private _propDefSignature;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=SchemaViewBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaViewBuilder.d.ts","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewBuilder.ts"],"names":[],"mappings":"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"}
|