@idfkit/core 0.1.0 → 0.2.0-rc.2
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 +16 -7
- package/dist/collection.d.ts +0 -13
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +1 -1
- package/dist/conformance.d.ts +20 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +20 -0
- package/dist/conformance.js.map +1 -0
- package/dist/docs-url/index.d.ts +81 -0
- package/dist/docs-url/index.d.ts.map +1 -0
- package/dist/docs-url/index.js +201 -0
- package/dist/docs-url/index.js.map +1 -0
- package/dist/docs-url/locations.d.ts +2 -0
- package/dist/docs-url/locations.d.ts.map +1 -0
- package/dist/docs-url/locations.js +272 -0
- package/dist/docs-url/locations.js.map +1 -0
- package/dist/document.d.ts +40 -14
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +0 -0
- package/dist/document.js.map +1 -1
- package/dist/index.d.ts +19 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -3
- package/dist/index.js.map +1 -1
- package/dist/introspect/describe.d.ts +117 -0
- package/dist/introspect/describe.d.ts.map +1 -0
- package/dist/introspect/describe.js +206 -0
- package/dist/introspect/describe.js.map +1 -0
- package/dist/node.d.ts +5 -5
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +25 -5
- package/dist/node.js.map +1 -1
- package/dist/object.d.ts +1 -1
- package/dist/parse/epjson.d.ts +1 -1
- package/dist/parse/epjson.d.ts.map +1 -1
- package/dist/parse/epjson.js +3 -3
- package/dist/parse/epjson.js.map +1 -1
- package/dist/parse/idf.d.ts +24 -6
- package/dist/parse/idf.d.ts.map +1 -1
- package/dist/parse/idf.js +181 -8
- package/dist/parse/idf.js.map +1 -1
- package/dist/parse/lexer.d.ts +36 -0
- package/dist/parse/lexer.d.ts.map +1 -1
- package/dist/parse/lexer.js +49 -2
- package/dist/parse/lexer.js.map +1 -1
- package/dist/typemap.d.ts +7 -5
- package/dist/typemap.d.ts.map +1 -1
- package/dist/typemap.js +7 -5
- package/dist/typemap.js.map +1 -1
- package/dist/validate/index.d.ts +11 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +10 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/types.d.ts +63 -0
- package/dist/validate/types.d.ts.map +1 -0
- package/dist/validate/types.js +25 -0
- package/dist/validate/types.js.map +1 -0
- package/dist/validate/validate.d.ts +82 -0
- package/dist/validate/validate.d.ts.map +1 -0
- package/dist/validate/validate.js +574 -0
- package/dist/validate/validate.js.map +1 -0
- package/dist/write/epjson.d.ts +3 -3
- package/dist/write/idf.d.ts +34 -2
- package/dist/write/idf.d.ts.map +1 -1
- package/dist/write/idf.js +24 -5
- package/dist/write/idf.js.map +1 -1
- package/package.json +11 -8
- package/dist/types/v26-1.d.ts +0 -65896
- package/dist/types/v26-1.d.ts.map +0 -1
- package/dist/types/v26-1.js +0 -5
- package/dist/types/v26-1.js.map +0 -1
- package/dist/types/v9-4.d.ts +0 -61414
- package/dist/types/v9-4.d.ts.map +0 -1
- package/dist/types/v9-4.js +0 -5
- package/dist/types/v9-4.js.map +0 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { Schema } from '@idfkit/schemas';
|
|
2
|
+
/**
|
|
3
|
+
* Description of a single field in an EnergyPlus object type.
|
|
4
|
+
*
|
|
5
|
+
* The field set mirrors Python's `idfkit.introspection.FieldDescription`
|
|
6
|
+
* one-for-one, snake_case renamed to camelCase. Every member is always present,
|
|
7
|
+
* so a description can be diffed against the Python dataclass key by key;
|
|
8
|
+
* Python's `str | None` becomes `string | undefined`.
|
|
9
|
+
*/
|
|
10
|
+
export interface FieldDescription {
|
|
11
|
+
/** Field name in epJSON spelling, e.g. `x_origin`. */
|
|
12
|
+
readonly name: string;
|
|
13
|
+
/**
|
|
14
|
+
* epJSON JSON-Schema type: `"number"`, `"string"`, `"integer"`, `"array"`, or
|
|
15
|
+
* a pipe-delimited union in declaration order for heterogeneous `anyOf`
|
|
16
|
+
* fields, e.g. `"number|string"` for `Schedule:Compact`'s extensible `field`.
|
|
17
|
+
*
|
|
18
|
+
* `undefined` when the field appears in the positional order but carries no
|
|
19
|
+
* schema definition at all.
|
|
20
|
+
*/
|
|
21
|
+
readonly fieldType: string | undefined;
|
|
22
|
+
/** Whether the field is listed in the object's `required` array. */
|
|
23
|
+
readonly required: boolean;
|
|
24
|
+
readonly default: string | number | undefined;
|
|
25
|
+
/** SI units, e.g. `"m"`, `"W/m-K"`. */
|
|
26
|
+
readonly units: string | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Permitted values for a choice field.
|
|
29
|
+
*
|
|
30
|
+
* Numbers rather than strings for the handful of fields that express a choice
|
|
31
|
+
* numerically, matching Python, which also hands back the raw JSON values.
|
|
32
|
+
*/
|
|
33
|
+
readonly enumValues: readonly (string | number)[] | undefined;
|
|
34
|
+
readonly minimum: number | undefined;
|
|
35
|
+
readonly maximum: number | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Exclusive minimum, as the schema for this version declares it.
|
|
38
|
+
*
|
|
39
|
+
* `true` rather than a number on 8.9.0 through 9.5.0, whose draft-04 schemas
|
|
40
|
+
* use the keyword as a flag qualifying `minimum` instead of as a bound. Python
|
|
41
|
+
* reports the same raw value, so a caller comparing the two sides sees no
|
|
42
|
+
* difference; a caller comparing a value against it must check the type first.
|
|
43
|
+
*/
|
|
44
|
+
readonly exclusiveMinimum: number | boolean | undefined;
|
|
45
|
+
/** Exclusive maximum. Number or boolean, exactly as `exclusiveMinimum`. */
|
|
46
|
+
readonly exclusiveMaximum: number | boolean | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Field documentation note.
|
|
49
|
+
*
|
|
50
|
+
* Always `undefined` here. The slim schema bundle deliberately drops `note`
|
|
51
|
+
* (see the header of `@idfkit/schemas`'s `types.ts`), and no other faithful
|
|
52
|
+
* source for it exists in this package. It is kept in the type because the
|
|
53
|
+
* naming register requires the same field set on both sides, and because
|
|
54
|
+
* inventing a value from the field name would be worse than admitting the
|
|
55
|
+
* absence.
|
|
56
|
+
*/
|
|
57
|
+
readonly note: string | undefined;
|
|
58
|
+
/** Whether this field points into another object's reference list. */
|
|
59
|
+
readonly isReference: boolean;
|
|
60
|
+
/** Reference list names this field points into. */
|
|
61
|
+
readonly objectList: readonly string[] | undefined;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Description of an EnergyPlus object type.
|
|
65
|
+
*
|
|
66
|
+
* Field set mirrors Python's `idfkit.introspection.ObjectDescription`.
|
|
67
|
+
*/
|
|
68
|
+
export interface ObjectDescription {
|
|
69
|
+
/** Canonical object type name, e.g. `"Zone"`. */
|
|
70
|
+
readonly objType: string;
|
|
71
|
+
/**
|
|
72
|
+
* Object memo from the schema.
|
|
73
|
+
*
|
|
74
|
+
* Always `undefined` here, for the same reason as `FieldDescription.note`:
|
|
75
|
+
* the slim bundle drops `memo`, and this package has no faithful source for
|
|
76
|
+
* it. See that member's note.
|
|
77
|
+
*/
|
|
78
|
+
readonly memo: string | undefined;
|
|
79
|
+
readonly fields: readonly FieldDescription[];
|
|
80
|
+
/** Required field names, in schema order. */
|
|
81
|
+
readonly requiredFields: readonly string[];
|
|
82
|
+
/** Whether the type carries a name field. `Version` and friends do not. */
|
|
83
|
+
readonly hasName: boolean;
|
|
84
|
+
/** Whether the type has a repeating extensible group. */
|
|
85
|
+
readonly isExtensible: boolean;
|
|
86
|
+
/** Number of fields in one extensible repeat group. */
|
|
87
|
+
readonly extensibleSize: number | undefined;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Describe an EnergyPlus object type: its fields, their order, and their
|
|
91
|
+
* constraints.
|
|
92
|
+
*
|
|
93
|
+
* Synchronous and pure, like the rest of `@idfkit/core`'s root entry: the
|
|
94
|
+
* schema is already in memory, and this only reads it.
|
|
95
|
+
*
|
|
96
|
+
* Ports `idfkit.introspection.describe_object_type`. Where the slim schema
|
|
97
|
+
* cannot reproduce Python exactly the loss is recorded in a comment at the
|
|
98
|
+
* point it happens rather than papered over with a plausible substitute.
|
|
99
|
+
*
|
|
100
|
+
* @throws If `objType` is not defined in this schema version. The message is
|
|
101
|
+
* the one `Schema.require` already produces everywhere else in the package;
|
|
102
|
+
* Python raises `UnknownObjectTypeError`, which has no registered TypeScript
|
|
103
|
+
* counterpart and so must not become a new exported class.
|
|
104
|
+
*/
|
|
105
|
+
/**
|
|
106
|
+
* The schema's explanatory prose, loaded on demand.
|
|
107
|
+
*
|
|
108
|
+
* A plain array of strings, indexed by `SlimType.m` and `SlimField.n`. It is
|
|
109
|
+
* passed in rather than reached for, and that is deliberate: reading it is
|
|
110
|
+
* asynchronous, `describeObjectType` is synchronous, and making the function
|
|
111
|
+
* async to fetch a file most callers do not want would be a breaking change
|
|
112
|
+
* serving the minority. Loading it is the caller's step, and its cost is
|
|
113
|
+
* visible at the call site instead of hidden inside a description.
|
|
114
|
+
*/
|
|
115
|
+
export type ProsePool = readonly string[];
|
|
116
|
+
export declare function describeObjectType(schema: Schema, objType: string, prose?: ProsePool): ObjectDescription;
|
|
117
|
+
//# sourceMappingURL=describe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../../src/introspect/describe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,iBAAiB,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC;;;;;;;OAOG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACxD,2EAA2E;IAC3E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACxD;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACpD;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC7C,6CAA6C;IAC7C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED;;;;;;;;;;;;;;;GAeG;AACH;;;;;;;;;GASG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,MAAM,EAAE,CAAC;AAE1C,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,SAAS,GAChB,iBAAiB,CAmCnB"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
export function describeObjectType(schema, objType, prose) {
|
|
2
|
+
const type = schema.require(objType);
|
|
3
|
+
// Exact-cased input resolves to itself, so this matches Python's verbatim
|
|
4
|
+
// echo of the argument for every name Python accepts.
|
|
5
|
+
const canonical = schema.resolve(objType) ?? objType;
|
|
6
|
+
const properties = mergedProperties(type);
|
|
7
|
+
const requiredFields = type.r ?? [];
|
|
8
|
+
const required = new Set(requiredFields);
|
|
9
|
+
const extensible = type.x;
|
|
10
|
+
const fieldNames = orderedFieldNames(type);
|
|
11
|
+
const fields = fieldNames.map((name) => describeField(name, properties[name], required.has(name), prose));
|
|
12
|
+
return {
|
|
13
|
+
objType: canonical,
|
|
14
|
+
// Resolved from the pool when one is supplied, and `undefined` otherwise —
|
|
15
|
+
// which is exactly what this returned before the pool existed, so a caller
|
|
16
|
+
// who passes nothing sees no change at all (FR-014). A type with no memo in
|
|
17
|
+
// the source schema also reports `undefined`, in both languages: absence is
|
|
18
|
+
// reported as absence rather than filled with a placeholder.
|
|
19
|
+
memo: lookupProse(type.m, prose),
|
|
20
|
+
fields,
|
|
21
|
+
requiredFields: [...requiredFields],
|
|
22
|
+
hasName: type.anon !== 1,
|
|
23
|
+
isExtensible: extensible !== undefined,
|
|
24
|
+
// Python reads `extensible_size` straight from the schema. The slim bundle
|
|
25
|
+
// drops that key, but it is exactly the repeat-group width, which survives
|
|
26
|
+
// as `x.fields.length`. Verified equal for every extensible type in all 17
|
|
27
|
+
// bundled versions, so this is a derivation, not an approximation.
|
|
28
|
+
extensibleSize: extensible === undefined ? undefined : extensible.fields.length,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Field names in the order Python produces them.
|
|
33
|
+
*
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
function orderedFieldNames(type) {
|
|
37
|
+
// Python's `get_field_names` returns `legacy_idd.fields[1:]` — it drops the
|
|
38
|
+
// first entry positionally, on the assumption that it is always the name.
|
|
39
|
+
// That holds for every named type in all 17 bundled versions, but 154 types
|
|
40
|
+
// in 26.1.0 are anonymous, and for those the first entry is a real field
|
|
41
|
+
// (`GlobalGeometryRules.starting_vertex_position`, `Output:Variable.key_value`)
|
|
42
|
+
// which Python silently drops. Dropping positionally rather than filtering on
|
|
43
|
+
// `!== 'name'` is what keeps this port in agreement with the oracle; the
|
|
44
|
+
// divergence to close is in Python, not here.
|
|
45
|
+
const names = type.f.slice(1);
|
|
46
|
+
// No legacy field order (or only the name): Python falls back to the key order
|
|
47
|
+
// of the merged property map. Only the fixed half is taken from `p` here; the
|
|
48
|
+
// extensible half is appended below from `x.fields`, which is an array and so
|
|
49
|
+
// keeps its declaration order. Taking it from `x.p` instead would be wrong:
|
|
50
|
+
// the bundle content-addresses each definition through a canonical serializer
|
|
51
|
+
// that sorts object keys, so every `Record` in it is in alphabetical order,
|
|
52
|
+
// not schema order. `AvailabilityManagerAssignmentList` is the type that shows
|
|
53
|
+
// it — its two extensible fields are declared object-type first and sort
|
|
54
|
+
// name first.
|
|
55
|
+
// `fo` is the declaration order, recorded by the bundle for the three types
|
|
56
|
+
// whose `f` holds only the name. Without it the fallback below returns the
|
|
57
|
+
// key order of `p`, which `canonical()` sorted for content-addressing, and
|
|
58
|
+
// the reader gets alphabetical order where Python gives declaration order.
|
|
59
|
+
const ordered = names.length > 0 ? names : (type.fo ?? Object.keys(type.p)).slice();
|
|
60
|
+
if (type.x !== undefined) {
|
|
61
|
+
for (const name of type.x.fields) {
|
|
62
|
+
if (!ordered.includes(name))
|
|
63
|
+
ordered.push(name);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return ordered;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Python flattens each extension array's `items.properties` into the top-level
|
|
70
|
+
* property map so extensible fields look up the same way as fixed ones. Spread
|
|
71
|
+
* order reproduces that: existing keys keep their position, new ones append.
|
|
72
|
+
*
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
function mergedProperties(type) {
|
|
76
|
+
return type.x === undefined ? type.p : { ...type.p, ...type.x.p };
|
|
77
|
+
}
|
|
78
|
+
/** @internal */
|
|
79
|
+
function describeField(name, field, required, prose) {
|
|
80
|
+
if (field === undefined) {
|
|
81
|
+
// In the positional order but absent from the schema. Python reaches the
|
|
82
|
+
// same state via `properties.get(field_name, {})`.
|
|
83
|
+
return {
|
|
84
|
+
name,
|
|
85
|
+
fieldType: undefined,
|
|
86
|
+
required,
|
|
87
|
+
default: undefined,
|
|
88
|
+
units: undefined,
|
|
89
|
+
enumValues: undefined,
|
|
90
|
+
minimum: undefined,
|
|
91
|
+
maximum: undefined,
|
|
92
|
+
exclusiveMinimum: undefined,
|
|
93
|
+
exclusiveMaximum: undefined,
|
|
94
|
+
note: undefined,
|
|
95
|
+
isReference: false,
|
|
96
|
+
objectList: undefined,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// `auto` marks a field the bundle collapsed from `anyOf: [number, string]`.
|
|
100
|
+
// Python's `describe_object_type` reads `minimum`/`maximum`/`exclusiveMinimum`/
|
|
101
|
+
// `exclusiveMaximum` from the *top level* of the field schema only, and no
|
|
102
|
+
// `anyOf` field in any of the 17 bundled versions carries those keys at the
|
|
103
|
+
// top level — they live on the numeric branch, which that function never looks
|
|
104
|
+
// at. The bundle hoists them; Python reports null. Suppressing them here is
|
|
105
|
+
// what makes the two sides agree. Validation is a separate question and reads
|
|
106
|
+
// the branch properly on both sides; see `validate/`.
|
|
107
|
+
const collapsedAnyOf = field.auto === 1;
|
|
108
|
+
return {
|
|
109
|
+
name,
|
|
110
|
+
fieldType: fieldTypeOf(field),
|
|
111
|
+
required,
|
|
112
|
+
default: field.d,
|
|
113
|
+
units: field.u,
|
|
114
|
+
enumValues: acceptedValues(field),
|
|
115
|
+
minimum: collapsedAnyOf ? undefined : field.min,
|
|
116
|
+
maximum: collapsedAnyOf ? undefined : field.max,
|
|
117
|
+
exclusiveMinimum: collapsedAnyOf ? undefined : field.xmin,
|
|
118
|
+
exclusiveMaximum: collapsedAnyOf ? undefined : field.xmax,
|
|
119
|
+
note: lookupProse(field.n, prose),
|
|
120
|
+
isReference: field.ol !== undefined,
|
|
121
|
+
objectList: field.ol === undefined ? undefined : [...field.ol],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Resolve a prose index against the pool.
|
|
126
|
+
*
|
|
127
|
+
* Returns `undefined` for a record with no prose, and for every record when no
|
|
128
|
+
* pool was supplied. Out-of-range is `undefined` too rather than a throw: a
|
|
129
|
+
* caller who hands in a pool from a different bundle build gets no prose, which
|
|
130
|
+
* is the same thing they had before, instead of a description that cannot be
|
|
131
|
+
* produced at all.
|
|
132
|
+
*
|
|
133
|
+
* @internal
|
|
134
|
+
*/
|
|
135
|
+
function lookupProse(index, prose) {
|
|
136
|
+
if (index === undefined || prose === undefined)
|
|
137
|
+
return undefined;
|
|
138
|
+
return prose[index];
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The values a field accepts, as Python reports them.
|
|
142
|
+
*
|
|
143
|
+
* Two sources, and until feature 002 this read neither completely:
|
|
144
|
+
*
|
|
145
|
+
* - `e`, the choice list, with the empty string filtered out by the bundle
|
|
146
|
+
* because `e` is what validation checks against. Python keeps the blank, so
|
|
147
|
+
* `eb` records that it was there and it goes back on the front. It is always
|
|
148
|
+
* the front: measured across all 17 schemas, all 21,962 blank-bearing enums
|
|
149
|
+
* carry it at position 0.
|
|
150
|
+
* - `se`, the collapsed `anyOf` string branch, which holds the sentinels.
|
|
151
|
+
* `Autosize` on 10,565 fields and `Autocalculate` on 1,781. Validation has
|
|
152
|
+
* always read it (`validate/validate.ts:543`); this path never did, so
|
|
153
|
+
* `WindowMaterial:Glazing:EquivalentLayer.diffuse_diffuse_solar_transmittance`
|
|
154
|
+
* reported nothing where Python reported `['', 'Autocalculate']`.
|
|
155
|
+
*
|
|
156
|
+
* A field carries one or the other, never both: `se` exists only when the field
|
|
157
|
+
* was an `anyOf`, and `e` is then hoisted from the numeric branch. The 68
|
|
158
|
+
* fields that carry both are the numeric-enum ones, and Python reports the
|
|
159
|
+
* string branch for those, which is what taking `se` first does.
|
|
160
|
+
*
|
|
161
|
+
* @internal
|
|
162
|
+
*/
|
|
163
|
+
function acceptedValues(field) {
|
|
164
|
+
if (field.se !== undefined)
|
|
165
|
+
return [...field.se];
|
|
166
|
+
if (field.e === undefined)
|
|
167
|
+
return undefined;
|
|
168
|
+
return field.eb === 1 ? ['', ...field.e] : [...field.e];
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Map the slim storage class back to the epJSON JSON-Schema type string Python
|
|
172
|
+
* reports.
|
|
173
|
+
*
|
|
174
|
+
* The bundle stores four storage classes where Python reports the raw `type`
|
|
175
|
+
* key, so the mapping is not automatically one-to-one. Measured against all 17
|
|
176
|
+
* bundled schemas it is, with one exception:
|
|
177
|
+
*
|
|
178
|
+
* - `'a'` is `"string"`. Every `'a'` field is a raw `"type": "string"`, or an
|
|
179
|
+
* enum-only field, which Python also calls `"string"`.
|
|
180
|
+
* - `'n'` is `"number"`, and `"number|string"` when `auto` is set. `auto` is set
|
|
181
|
+
* exactly when the raw field was `anyOf: [{number}, {string}]` — 13052 such
|
|
182
|
+
* fields across all versions, every one of them in that branch order, so the
|
|
183
|
+
* union string is reconstructed exactly rather than guessed.
|
|
184
|
+
* - `'i'` is `"integer"`, and `"integer|string"` when `auto` is set, the
|
|
185
|
+
* `anyOf: [{integer}, {string}]` shape carried by one field per version from
|
|
186
|
+
* 9.3.0 on, `AirTerminal:SingleDuct:ConstantVolume:CooledBeam.number_of_beams`.
|
|
187
|
+
* The bundle also folds `"type": "number"` carrying `"data_type": "integer"`
|
|
188
|
+
* into `'i'`, which would report `"number"` in Python — but no schema in any
|
|
189
|
+
* bundled version actually uses that form.
|
|
190
|
+
* - `'arr'` is `"array"`.
|
|
191
|
+
*
|
|
192
|
+
* @internal
|
|
193
|
+
*/
|
|
194
|
+
function fieldTypeOf(field) {
|
|
195
|
+
switch (field.t) {
|
|
196
|
+
case 'arr':
|
|
197
|
+
return 'array';
|
|
198
|
+
case 'i':
|
|
199
|
+
return field.auto === 1 ? 'integer|string' : 'integer';
|
|
200
|
+
case 'n':
|
|
201
|
+
return field.auto === 1 ? 'number|string' : 'number';
|
|
202
|
+
case 'a':
|
|
203
|
+
return 'string';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=describe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../../src/introspect/describe.ts"],"names":[],"mappings":"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"}
|
package/dist/node.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* to be async "just in case" and browser bundles never pull in `node:fs`.
|
|
7
7
|
*/
|
|
8
8
|
import { SchemaBundle, type Schema } from '@idfkit/schemas';
|
|
9
|
-
import type {
|
|
9
|
+
import type { IdfDocument } from './document.js';
|
|
10
10
|
import { type ParseOptions, type ParseResult } from './parse/idf.js';
|
|
11
11
|
import type { AnyTypeMap, UntypedMap } from './typemap.js';
|
|
12
12
|
import { type WriteEpJsonOptions } from './write/epjson.js';
|
|
@@ -28,13 +28,13 @@ export interface LoadOptions extends ParseOptions {
|
|
|
28
28
|
*/
|
|
29
29
|
export declare function schemaFor(detected: string | undefined, options?: LoadOptions): Promise<Schema>;
|
|
30
30
|
/** Read and parse an IDF file. */
|
|
31
|
-
export declare function loadIdf<M extends AnyTypeMap = UntypedMap>(path: string, options?: LoadOptions): Promise<
|
|
31
|
+
export declare function loadIdf<M extends AnyTypeMap = UntypedMap>(path: string, options?: LoadOptions): Promise<IdfDocument<M>>;
|
|
32
32
|
/** Read and parse an IDF file, keeping non-fatal diagnostics. */
|
|
33
33
|
export declare function loadIdfWithDiagnostics<M extends AnyTypeMap = UntypedMap>(path: string, options?: LoadOptions): Promise<ParseResult<M>>;
|
|
34
34
|
/** Read and parse an epJSON file. */
|
|
35
|
-
export declare function loadEpJson<M extends AnyTypeMap = UntypedMap>(path: string, options?: LoadOptions): Promise<
|
|
35
|
+
export declare function loadEpJson<M extends AnyTypeMap = UntypedMap>(path: string, options?: LoadOptions): Promise<IdfDocument<M>>;
|
|
36
36
|
/** Write a document to an IDF file. */
|
|
37
|
-
export declare function saveIdf<M extends AnyTypeMap>(document:
|
|
37
|
+
export declare function saveIdf<M extends AnyTypeMap>(document: IdfDocument<M>, path: string, options?: WriteIdfOptions): Promise<void>;
|
|
38
38
|
/** Write a document to an epJSON file. */
|
|
39
|
-
export declare function saveEpJson<M extends AnyTypeMap>(document:
|
|
39
|
+
export declare function saveEpJson<M extends AnyTypeMap>(document: IdfDocument<M>, path: string, options?: WriteEpJsonOptions): Promise<void>;
|
|
40
40
|
//# sourceMappingURL=node.d.ts.map
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIhE,kFAAkF;AAClF,wBAAgB,OAAO,IAAI,YAAY,CAGtC;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,kCAAkC;AAClC,wBAAsB,OAAO,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAC7D,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAEzB;AAED,iEAAiE;AACjE,wBAAsB,sBAAsB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAC5E,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAuBzB;AAOD,qCAAqC;AACrC,wBAAsB,UAAU,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAChE,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAIzB;AAED,uCAAuC;AACvC,wBAAsB,OAAO,CAAC,CAAC,SAAS,UAAU,EAChD,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,0CAA0C;AAC1C,wBAAsB,UAAU,CAAC,CAAC,SAAS,UAAU,EACnD,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
package/dist/node.js
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
import { readFile, writeFile } from 'node:fs/promises';
|
|
9
9
|
import { SchemaBundle } from '@idfkit/schemas';
|
|
10
10
|
import { localBundle } from '@idfkit/schemas/node';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
11
|
+
import { getEpJsonVersion, parseEpJson } from './parse/epjson.js';
|
|
12
|
+
import { getIdfVersion, IdfParseError, parseIdf, } from './parse/idf.js';
|
|
13
13
|
import { resolveVersion } from './versions.js';
|
|
14
14
|
import { writeEpJson } from './write/epjson.js';
|
|
15
15
|
import { writeIdf } from './write/idf.js';
|
|
@@ -50,13 +50,33 @@ export async function loadIdfWithDiagnostics(path, options = {}) {
|
|
|
50
50
|
// models routinely contain single high bytes (degree signs, accented station
|
|
51
51
|
// names) that are not valid utf-8 and would otherwise decode to U+FFFD.
|
|
52
52
|
const text = await readFile(path, 'latin1');
|
|
53
|
-
const schema = await schemaFor(
|
|
54
|
-
|
|
53
|
+
const schema = await schemaFor(getIdfVersion(text), options);
|
|
54
|
+
// `parseIdf` takes text and cannot know where the text came from, so the path is attached here,
|
|
55
|
+
// at the one place that does. Python's parser opens the file itself and fills `filepath` from
|
|
56
|
+
// its own constructor argument; this is the same field reaching a caller by the only route this
|
|
57
|
+
// library has (FR-033).
|
|
58
|
+
//
|
|
59
|
+
// Stamped on both paths: the findings that stop the parse arrive on the error, and the ones that
|
|
60
|
+
// do not arrive in the result. Neither is useful without saying which file it was.
|
|
61
|
+
try {
|
|
62
|
+
const result = parseIdf(text, schema, options);
|
|
63
|
+
return { ...result, diagnostics: result.diagnostics.map((d) => withPath(d, path)) };
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error instanceof IdfParseError) {
|
|
67
|
+
throw new IdfParseError(error.diagnostics.map((d) => withPath(d, path)));
|
|
68
|
+
}
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** Attach the source path to a finding, leaving one that already names a file alone. */
|
|
73
|
+
function withPath(diagnostic, path) {
|
|
74
|
+
return diagnostic.filepath === undefined ? { ...diagnostic, filepath: path } : diagnostic;
|
|
55
75
|
}
|
|
56
76
|
/** Read and parse an epJSON file. */
|
|
57
77
|
export async function loadEpJson(path, options = {}) {
|
|
58
78
|
const text = await readFile(path, 'utf8');
|
|
59
|
-
const schema = await schemaFor(
|
|
79
|
+
const schema = await schemaFor(getEpJsonVersion(text), options);
|
|
60
80
|
return parseEpJson(text, schema, options).document;
|
|
61
81
|
}
|
|
62
82
|
/** Write a document to an IDF file. */
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/dist/object.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export type FieldValues = Record<string, StoredValue | null | undefined>;
|
|
|
12
12
|
/**
|
|
13
13
|
* Something that wants to know when an object changes.
|
|
14
14
|
*
|
|
15
|
-
* Implemented by `
|
|
15
|
+
* Implemented by `IdfDocument`. Declared as an interface so a detached object
|
|
16
16
|
* has no dependency on the document at all.
|
|
17
17
|
*/
|
|
18
18
|
export interface ObjectOwner {
|
package/dist/parse/epjson.d.ts
CHANGED
|
@@ -12,5 +12,5 @@ export type EpJson = Record<string, Record<string, Record<string, unknown>>>;
|
|
|
12
12
|
*/
|
|
13
13
|
export declare function parseEpJson<M extends AnyTypeMap = UntypedMap>(source: string | EpJson, schema: Schema, options?: ParseOptions): ParseResult<M>;
|
|
14
14
|
/** Read the version identifier from epJSON without a schema. */
|
|
15
|
-
export declare function
|
|
15
|
+
export declare function getEpJsonVersion(source: string | EpJson): string | undefined;
|
|
16
16
|
//# sourceMappingURL=epjson.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epjson.d.ts","sourceRoot":"","sources":["../../src/parse/epjson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAI9C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAmB,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG3E,2DAA2D;AAC3D,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7E;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAC3D,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,YAAiB,GACzB,WAAW,CAAC,CAAC,CAAC,CA6DhB;AAED,gEAAgE;AAChE,wBAAgB,
|
|
1
|
+
{"version":3,"file":"epjson.d.ts","sourceRoot":"","sources":["../../src/parse/epjson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAI9C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAmB,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG3E,2DAA2D;AAC3D,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7E;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAC3D,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,YAAiB,GACzB,WAAW,CAAC,CAAC,CAAC,CA6DhB;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAgB5E"}
|
package/dist/parse/epjson.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IdfDocument } from '../document.js';
|
|
2
2
|
import { IdfParseError } from './idf.js';
|
|
3
3
|
/**
|
|
4
4
|
* Parse epJSON into a document.
|
|
@@ -26,7 +26,7 @@ export function parseEpJson(source, schema, options = {}) {
|
|
|
26
26
|
line: 1,
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
|
-
const document = new
|
|
29
|
+
const document = new IdfDocument(schema);
|
|
30
30
|
for (const [typeName, body] of Object.entries(root)) {
|
|
31
31
|
const canonical = schema.resolve(typeName);
|
|
32
32
|
if (canonical === undefined) {
|
|
@@ -68,7 +68,7 @@ export function parseEpJson(source, schema, options = {}) {
|
|
|
68
68
|
return { document, diagnostics };
|
|
69
69
|
}
|
|
70
70
|
/** Read the version identifier from epJSON without a schema. */
|
|
71
|
-
export function
|
|
71
|
+
export function getEpJsonVersion(source) {
|
|
72
72
|
let root;
|
|
73
73
|
try {
|
|
74
74
|
root = typeof source === 'string' ? JSON.parse(source) : source;
|
package/dist/parse/epjson.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epjson.js","sourceRoot":"","sources":["../../src/parse/epjson.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKzC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,MAAuB,EACvB,MAAc,EACd,UAAwB,EAAE;IAE1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACtC,MAAM,WAAW,GAAsB,EAAE,CAAC;IAE1C,MAAM,MAAM,GAAG,CAAC,UAA2B,EAAQ,EAAE;QACnD,IAAI,MAAM;YAAE,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CAAC;YACtB,OAAO,EAAE,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAClF,IAAI,EAAE,CAAC;SACR,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAI,MAAM,CAAC,CAAC;IAE5C,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC;gBACL,OAAO,EAAE,wBAAwB,QAAQ,mBAAmB,MAAM,CAAC,OAAO,EAAE;gBAC5E,IAAI,EAAE,CAAC;gBACP,QAAQ;aACT,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE7C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,MAAM,MAAM,GAAgB,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,KAAK,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;oBACvE,MAAM,CAAC;wBACL,OAAO,EAAE,kBAAkB,KAAK,QAAQ,SAAS,EAAE;wBACnD,IAAI,EAAE,CAAC;wBACP,QAAQ,EAAE,SAAS;qBACpB,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBACD,MAAM,CAAC,KAAK,CAAC,GAAG,KAA4B,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC;gBACH,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC;oBACL,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC/D,IAAI,EAAE,CAAC;oBACP,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"epjson.js","sourceRoot":"","sources":["../../src/parse/epjson.ts"],"names":[],"mappings":"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"}
|
package/dist/parse/idf.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import type { Schema } from '@idfkit/schemas';
|
|
2
|
-
import {
|
|
2
|
+
import { IdfDocument } from '../document.js';
|
|
3
3
|
import type { AnyTypeMap, UntypedMap } from '../typemap.js';
|
|
4
4
|
import { type LexDiagnostic } from './lexer.js';
|
|
5
5
|
export interface ParseDiagnostic extends LexDiagnostic {
|
|
6
|
-
/**
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Object name the problem occurred in, when known.
|
|
8
|
+
*
|
|
9
|
+
* Python spells this `obj_name`, and `typeName` against its `obj_type` is the same idiomatic
|
|
10
|
+
* casing difference the naming register already records. Not a gap, and not renamed: spending a
|
|
11
|
+
* rename to make the register harder to read is the wrong trade.
|
|
12
|
+
*/
|
|
13
|
+
objectName?: string;
|
|
8
14
|
}
|
|
9
15
|
export interface ParseOptions {
|
|
10
16
|
/**
|
|
@@ -16,7 +22,7 @@ export interface ParseOptions {
|
|
|
16
22
|
onDiagnostic?: (diagnostic: ParseDiagnostic) => void;
|
|
17
23
|
}
|
|
18
24
|
export interface ParseResult<M extends AnyTypeMap = UntypedMap> {
|
|
19
|
-
document:
|
|
25
|
+
document: IdfDocument<M>;
|
|
20
26
|
diagnostics: ParseDiagnostic[];
|
|
21
27
|
}
|
|
22
28
|
/**
|
|
@@ -31,7 +37,19 @@ export declare function parseIdf<M extends AnyTypeMap = UntypedMap>(text: string
|
|
|
31
37
|
export declare class IdfParseError extends Error {
|
|
32
38
|
readonly line: number;
|
|
33
39
|
readonly typeName: string | undefined;
|
|
34
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Every finding that stopped the parse.
|
|
42
|
+
*
|
|
43
|
+
* This error carried `line` and `typeName` from a single diagnostic, flattened into fields, and
|
|
44
|
+
* a caller who wanted the rest had nowhere to look. Python's `IDFParseError` has always carried
|
|
45
|
+
* the collection; this is the half of the difference that was real.
|
|
46
|
+
*
|
|
47
|
+
* `line` and `typeName` still resolve to the first finding's values, so no existing caller
|
|
48
|
+
* breaks (FR-013, FR-014). They are a convenience over `diagnostics[0]` rather than a second
|
|
49
|
+
* source of truth.
|
|
50
|
+
*/
|
|
51
|
+
readonly diagnostics: readonly ParseDiagnostic[];
|
|
52
|
+
constructor(diagnostic: ParseDiagnostic | readonly ParseDiagnostic[]);
|
|
35
53
|
}
|
|
36
54
|
/**
|
|
37
55
|
* Read the version identifier from IDF text without a schema.
|
|
@@ -40,5 +58,5 @@ export declare class IdfParseError extends Error {
|
|
|
40
58
|
* version lives inside the file. This does the minimum scan needed to break
|
|
41
59
|
* the cycle, and does not validate anything else.
|
|
42
60
|
*/
|
|
43
|
-
export declare function
|
|
61
|
+
export declare function getIdfVersion(text: string): string | undefined;
|
|
44
62
|
//# sourceMappingURL=idf.d.ts.map
|
package/dist/parse/idf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idf.d.ts","sourceRoot":"","sources":["../../src/parse/idf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAO,KAAK,aAAa,EAAkB,MAAM,YAAY,CAAC;AAErE,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD
|
|
1
|
+
{"version":3,"file":"idf.d.ts","sourceRoot":"","sources":["../../src/parse/idf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAO,KAAK,aAAa,EAAkB,MAAM,YAAY,CAAC;AAErE,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IAC5D,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACzB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACxD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,YAAiB,GACzB,WAAW,CAAC,CAAC,CAAC,CAoFhB;AAiND,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;gBAErC,UAAU,EAAE,eAAe,GAAG,SAAS,eAAe,EAAE;CAcrE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAc9D"}
|