@ifc-lite/parser 6.5.0 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +21 -0
  2. package/dist/columnar-parser-root-attributes.d.ts +2 -5
  3. package/dist/columnar-parser-root-attributes.d.ts.map +1 -1
  4. package/dist/columnar-parser-root-attributes.js +22 -2
  5. package/dist/columnar-parser-root-attributes.js.map +1 -1
  6. package/dist/columnar-parser.d.ts +4 -0
  7. package/dist/columnar-parser.d.ts.map +1 -1
  8. package/dist/columnar-parser.js +2 -47
  9. package/dist/columnar-parser.js.map +1 -1
  10. package/dist/cost-category-buckets.d.ts +5 -0
  11. package/dist/cost-category-buckets.d.ts.map +1 -0
  12. package/dist/cost-category-buckets.js +37 -0
  13. package/dist/cost-category-buckets.js.map +1 -0
  14. package/dist/cost-compatibility-tree.d.ts +4 -0
  15. package/dist/cost-compatibility-tree.d.ts.map +1 -0
  16. package/dist/cost-compatibility-tree.js +46 -0
  17. package/dist/cost-compatibility-tree.js.map +1 -0
  18. package/dist/cost-evaluation-arithmetic.d.ts +16 -0
  19. package/dist/cost-evaluation-arithmetic.d.ts.map +1 -0
  20. package/dist/cost-evaluation-arithmetic.js +181 -0
  21. package/dist/cost-evaluation-arithmetic.js.map +1 -0
  22. package/dist/cost-evaluation-context.d.ts +20 -0
  23. package/dist/cost-evaluation-context.d.ts.map +1 -0
  24. package/dist/cost-evaluation-context.js +54 -0
  25. package/dist/cost-evaluation-context.js.map +1 -0
  26. package/dist/cost-evaluation-result.d.ts +5 -0
  27. package/dist/cost-evaluation-result.d.ts.map +1 -0
  28. package/dist/cost-evaluation-result.js +20 -0
  29. package/dist/cost-evaluation-result.js.map +1 -0
  30. package/dist/cost-evaluator.d.ts +6 -0
  31. package/dist/cost-evaluator.d.ts.map +1 -0
  32. package/dist/cost-evaluator.js +398 -0
  33. package/dist/cost-evaluator.js.map +1 -0
  34. package/dist/cost-extractor.d.ts +4 -8
  35. package/dist/cost-extractor.d.ts.map +1 -1
  36. package/dist/cost-extractor.js +346 -334
  37. package/dist/cost-extractor.js.map +1 -1
  38. package/dist/cost-overlay.d.ts +72 -0
  39. package/dist/cost-overlay.d.ts.map +1 -0
  40. package/dist/cost-overlay.js +5 -0
  41. package/dist/cost-overlay.js.map +1 -0
  42. package/dist/cost-quantities.d.ts +5 -0
  43. package/dist/cost-quantities.d.ts.map +1 -0
  44. package/dist/cost-quantities.js +116 -0
  45. package/dist/cost-quantities.js.map +1 -0
  46. package/dist/cost-quantity-evaluator.d.ts +23 -0
  47. package/dist/cost-quantity-evaluator.d.ts.map +1 -0
  48. package/dist/cost-quantity-evaluator.js +153 -0
  49. package/dist/cost-quantity-evaluator.js.map +1 -0
  50. package/dist/cost-reader.d.ts +59 -0
  51. package/dist/cost-reader.d.ts.map +1 -0
  52. package/dist/cost-reader.js +210 -0
  53. package/dist/cost-reader.js.map +1 -0
  54. package/dist/cost-relationships.d.ts +7 -0
  55. package/dist/cost-relationships.d.ts.map +1 -0
  56. package/dist/cost-relationships.js +237 -0
  57. package/dist/cost-relationships.js.map +1 -0
  58. package/dist/cost-step-lexemes.d.ts +16 -0
  59. package/dist/cost-step-lexemes.d.ts.map +1 -0
  60. package/dist/cost-step-lexemes.js +131 -0
  61. package/dist/cost-step-lexemes.js.map +1 -0
  62. package/dist/cost-types.d.ts +218 -76
  63. package/dist/cost-types.d.ts.map +1 -1
  64. package/dist/cost-units.d.ts +38 -0
  65. package/dist/cost-units.d.ts.map +1 -0
  66. package/dist/cost-units.js +348 -0
  67. package/dist/cost-units.js.map +1 -0
  68. package/dist/cost-value-evaluation-session.d.ts +19 -0
  69. package/dist/cost-value-evaluation-session.d.ts.map +1 -0
  70. package/dist/cost-value-evaluation-session.js +25 -0
  71. package/dist/cost-value-evaluation-session.js.map +1 -0
  72. package/dist/cost.d.ts +5 -0
  73. package/dist/cost.d.ts.map +1 -0
  74. package/dist/cost.js +6 -0
  75. package/dist/cost.js.map +1 -0
  76. package/dist/entity-extractor.d.ts.map +1 -1
  77. package/dist/entity-extractor.js +5 -2
  78. package/dist/entity-extractor.js.map +1 -1
  79. package/dist/index.d.ts +1 -2
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +1 -1
  82. package/dist/index.js.map +1 -1
  83. package/dist/on-demand-extractors.d.ts +3 -4
  84. package/dist/on-demand-extractors.d.ts.map +1 -1
  85. package/dist/on-demand-extractors.js +9 -6
  86. package/dist/on-demand-extractors.js.map +1 -1
  87. package/dist/project-units.d.ts.map +1 -1
  88. package/dist/project-units.js +8 -2
  89. package/dist/project-units.js.map +1 -1
  90. package/dist/property-unit.d.ts +24 -0
  91. package/dist/property-unit.d.ts.map +1 -0
  92. package/dist/property-unit.js +29 -0
  93. package/dist/property-unit.js.map +1 -0
  94. package/dist/step-entity-parameters.d.ts +9 -0
  95. package/dist/step-entity-parameters.d.ts.map +1 -0
  96. package/dist/step-entity-parameters.js +30 -0
  97. package/dist/step-entity-parameters.js.map +1 -0
  98. package/dist/worker-parser.d.ts +29 -1
  99. package/dist/worker-parser.d.ts.map +1 -1
  100. package/dist/worker-parser.js +80 -7
  101. package/dist/worker-parser.js.map +1 -1
  102. package/package.json +6 -5
  103. package/dist/cost-schedule-2x3.d.ts +0 -31
  104. package/dist/cost-schedule-2x3.d.ts.map +0 -1
  105. package/dist/cost-schedule-2x3.js +0 -75
  106. package/dist/cost-schedule-2x3.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ const STEP_NUMBER = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/i;
5
+ const TYPED_VALUE = /^[A-Z][A-Z0-9_]*\s*\(([\s\S]*)\)$/i;
6
+ const STEP_REFERENCE = /^#(0|[1-9]\d*)$/;
7
+ const STEP_ZERO = /^[+-]?(?:0+(?:\.0*)?|\.0+)(?:E[+-]?\d+)?$/i;
8
+ export function withoutStepComments(token) {
9
+ const scan = new StepTextScan(token);
10
+ const pieces = [];
11
+ let retainedFrom = 0;
12
+ for (let index = 0; index < token.length;) {
13
+ const skipped = scan.skipLexicalAt(index);
14
+ if (skipped > index) {
15
+ if (token[index] === '/') {
16
+ pieces.push(token.slice(retainedFrom, index), ' ');
17
+ retainedFrom = skipped;
18
+ }
19
+ index = skipped;
20
+ continue;
21
+ }
22
+ index++;
23
+ }
24
+ pieces.push(token.slice(retainedFrom));
25
+ return pieces.join('').trim();
26
+ }
27
+ const withoutComments = withoutStepComments;
28
+ /** Distinguish an omitted STEP attribute from malformed-but-present input. */
29
+ export function costAttributePresent(token) {
30
+ if (token === undefined)
31
+ return false;
32
+ const candidate = withoutComments(token);
33
+ return candidate !== '$' && candidate !== '*';
34
+ }
35
+ /** Split one entity parameter list while retaining the original STEP lexemes. */
36
+ export function splitCostAttributeLexemes(record) {
37
+ let open = -1;
38
+ let close = -1;
39
+ let depth = 0;
40
+ const recordScan = new StepTextScan(record);
41
+ for (let index = 0; index < record.length;) {
42
+ const skipped = recordScan.skipLexicalAt(index);
43
+ if (skipped > index) {
44
+ index = skipped;
45
+ continue;
46
+ }
47
+ const char = record[index];
48
+ if (char === '(') {
49
+ if (open < 0)
50
+ open = index;
51
+ depth++;
52
+ }
53
+ else if (char === ')' && open >= 0) {
54
+ depth--;
55
+ if (depth === 0) {
56
+ close = index;
57
+ break;
58
+ }
59
+ }
60
+ index++;
61
+ }
62
+ if (open < 0 || close <= open)
63
+ return [];
64
+ const params = record.slice(open + 1, close);
65
+ const result = [];
66
+ let start = 0;
67
+ depth = 0;
68
+ const parameterScan = new StepTextScan(params);
69
+ for (let index = 0; index < params.length;) {
70
+ const skipped = parameterScan.skipLexicalAt(index);
71
+ if (skipped > index) {
72
+ index = skipped;
73
+ continue;
74
+ }
75
+ const char = params[index];
76
+ if (char === '(')
77
+ depth++;
78
+ else if (char === ')')
79
+ depth--;
80
+ else if (char === ',' && depth === 0) {
81
+ result.push(params.slice(start, index).trim());
82
+ start = index + 1;
83
+ }
84
+ index++;
85
+ }
86
+ result.push(params.slice(start).trim());
87
+ return result;
88
+ }
89
+ /** Return the exact numeric token, unwrapping an IFC typed value when present. */
90
+ export function costNumericLexeme(token) {
91
+ if (!token)
92
+ return undefined;
93
+ let candidate = withoutComments(token);
94
+ const typed = TYPED_VALUE.exec(candidate);
95
+ if (typed)
96
+ candidate = typed[1].trim();
97
+ return STEP_NUMBER.test(candidate) ? candidate : undefined;
98
+ }
99
+ /** Return the EXPRESS wrapper around an exact numeric token, if one was supplied. */
100
+ export function costNumericTypeLexeme(token) {
101
+ if (!token)
102
+ return undefined;
103
+ const typed = TYPED_VALUE.exec(withoutComments(token));
104
+ return typed ? withoutComments(token).slice(0, withoutComments(token).indexOf('(')).trim().toUpperCase() : undefined;
105
+ }
106
+ /** True only when the STEP significand is zero; exponent digits do not count. */
107
+ export function isZeroCostNumericLexeme(token) {
108
+ return STEP_ZERO.test(token);
109
+ }
110
+ /** Read one exact STEP entity-reference token, rejecting integer literals. */
111
+ export function costReferenceLexeme(token) {
112
+ if (!token)
113
+ return undefined;
114
+ const match = STEP_REFERENCE.exec(withoutComments(token));
115
+ return match ? Number(match[1]) : undefined;
116
+ }
117
+ /** Read a flat non-empty aggregate of exact STEP entity-reference tokens. */
118
+ export function costReferenceListLexeme(token) {
119
+ if (!token)
120
+ return undefined;
121
+ const candidate = withoutComments(token);
122
+ if (!candidate.startsWith('(') || !candidate.endsWith(')'))
123
+ return undefined;
124
+ const entries = candidate.slice(1, -1).split(',').map(entry => entry.trim());
125
+ if (entries.length === 0 || entries.some(entry => entry.length === 0))
126
+ return undefined;
127
+ const refs = entries.map(entry => costReferenceLexeme(entry));
128
+ return refs.every((ref) => ref !== undefined) ? refs : undefined;
129
+ }
130
+ import { StepTextScan } from './step-lexing.js';
131
+ //# sourceMappingURL=cost-step-lexemes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-step-lexemes.js","sourceRoot":"","sources":["../src/cost-step-lexemes.ts"],"names":[],"mappings":"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"}
@@ -1,105 +1,247 @@
1
- /**
2
- * Read-model types for the cost (5D) extractor. See `cost-extractor.ts` for
3
- * the extraction logic and the relationship-wiring rationale.
4
- */
1
+ /** Schema-aware, read-only IFC cost graph types. */
5
2
  import type { CollectedQuantity } from './quantity-collect.js';
6
3
  export type { CollectedQuantity };
7
- /**
8
- * `UnitBasis` resolved (`IfcAppliedValue.UnitBasis : OPTIONAL
9
- * IfcMeasureWithUnit`, schema slot 3 in `IFC4_ADD2_TC1.exp` / `IFC4X3.exp` /
10
- * `IFC2X3_TC1.exp` alike). Present exactly when the source declared a
11
- * `UnitBasis` that resolves to an `IFCMEASUREWITHUNIT` entity — that presence
12
- * alone is what marks this `CostValueInfo` as a RATE ("$85 per hour") rather
13
- * than a flat total ("$5,000"), even when `valueComponent`/`unitSymbol` below
14
- * could not themselves be resolved (e.g. `UnitComponent` selects an
15
- * `IfcContextDependentUnit`, which carries no SI conversion and
16
- * `resolveUnitByRef` does not resolve). `undefined` on `CostValueInfo` when
17
- * `UnitBasis` itself is absent or its reference is broken — matching this
18
- * module's absent-vs-unresolved convention for `costValues`/`parentGlobalId`.
19
- */
4
+ export type CostSchemaVersion = 'IFC2X3' | 'IFC4' | 'IFC4X3' | 'IFC5';
5
+ export type CostDiagnosticCode = 'IFC2X3_PARTIAL_READ' | 'UNSUPPORTED_SCHEMA' | 'MISSING_REFERENCE' | 'INVALID_LIST' | 'MULTIPLE_NESTING_PARENTS' | 'NESTING_CYCLE' | 'QUANTITY_CYCLE' | 'VALUE_CYCLE' | 'MISSING_VALUE' | 'INVALID_NUMBER' | 'UNSUPPORTED_APPLIED_VALUE' | 'UNSUPPORTED_CONDITION' | 'UNSUPPORTED_UNIT' | 'INCOMPATIBLE_UNIT' | 'MISSING_CURRENCY' | 'MIXED_CURRENCY' | 'DIVISION_BY_ZERO' | 'PENDING_EDIT_NOT_APPLIED';
6
+ export interface CostDiagnostic {
7
+ Code: CostDiagnosticCode;
8
+ Message: string;
9
+ Severity: 'warning' | 'error';
10
+ expressId?: number;
11
+ RelatedExpressId?: number;
12
+ }
13
+ export interface CostScheduleInfo {
14
+ expressId: number;
15
+ GlobalId?: string;
16
+ Name?: string;
17
+ Description?: string;
18
+ ObjectType?: string;
19
+ Identification?: string;
20
+ PredefinedType?: string;
21
+ Status?: string;
22
+ SubmittedOn?: string;
23
+ UpdateDate?: string;
24
+ /** IFC2X3-only identifier. */
25
+ ID?: string;
26
+ /** @deprecated Use the exact IFC-cased field. */
27
+ globalId: string;
28
+ /** @deprecated Use the exact IFC-cased field. */
29
+ name: string;
30
+ /** @deprecated Use PredefinedType. */
31
+ predefinedType?: string;
32
+ /** @deprecated Use Status. */
33
+ status?: string;
34
+ /** @deprecated Use SubmittedOn. */
35
+ submittedOn?: string;
36
+ /** @deprecated Use UpdateDate. */
37
+ updateDate?: string;
38
+ /** Existing normalized schedule-root convenience view. */
39
+ costItemGlobalIds: string[];
40
+ }
41
+ export interface CostItemInfo {
42
+ expressId: number;
43
+ GlobalId?: string;
44
+ Name?: string;
45
+ Description?: string;
46
+ ObjectType?: string;
47
+ Identification?: string;
48
+ PredefinedType?: string;
49
+ /** Ordered IFC4/IFC4X3 attribute references. Undefined means absent. */
50
+ CostValues?: number[];
51
+ /** Ordered IFC4/IFC4X3 attribute references. Undefined means absent. */
52
+ CostQuantities?: number[];
53
+ /** @deprecated Use the exact IFC-cased field. */
54
+ globalId: string;
55
+ /** @deprecated Use the exact IFC-cased field. */
56
+ name: string;
57
+ /** @deprecated Use PredefinedType. */
58
+ predefinedType?: string;
59
+ /** Existing normalized quantity view; never falls back to product Qto. */
60
+ costQuantities?: CollectedQuantity[];
61
+ /** Existing nested value view retained for compatibility. */
62
+ costValues?: CostValueInfo[];
63
+ parentGlobalId?: string;
64
+ childGlobalIds: string[];
65
+ /**
66
+ * Express IDs of the `IfcProduct` instances assigned to this cost item,
67
+ * via either `IfcRelAssignsToProduct` or `IfcRelAssignsToControl`. Tasks,
68
+ * resources and actors assigned via `IfcRelAssignsToControl` are excluded
69
+ * — that relationship also legitimately binds those, but this field is
70
+ * a products-only view (#4877).
71
+ */
72
+ productExpressIds: number[];
73
+ /** GlobalIds parallel to {@link productExpressIds}, same filtering. */
74
+ productGlobalIds: string[];
75
+ controllingScheduleGlobalIds: string[];
76
+ }
20
77
  export interface CostValueUnitBasis {
21
- /** `ValueComponent`, e.g. `1` in "per 1 hour". `undefined` when the
22
- * `IfcValue` select member is not a plain numeric measure this reader
23
- * resolves (same resolution `appliedValue` below uses). */
24
78
  valueComponent?: number;
25
- /** `UnitComponent`'s display symbol, e.g. `"h"`, `"m²"`. `undefined` when
26
- * `resolveUnitByRef` does not resolve the referenced `IfcUnit` member. */
27
79
  unitSymbol?: string;
28
- /** SI scale factor for `unitSymbol`, when resolved. */
29
80
  unitSiScale?: number;
30
81
  }
31
- /**
32
- * One `IfcCostValue` (a subtype of `IfcAppliedValue` that adds no attributes
33
- * of its own — `packages/codegen/schemas/IFC4_ADD2_TC1.exp` /
34
- * `IFC4X3.exp`: `ENTITY IfcCostValue SUBTYPE OF (IfcAppliedValue); END_ENTITY;`).
35
- * Every field below is `IfcAppliedValue`'s own, per its EXPRESS definition.
36
- */
82
+ export type CostAppliedValue = {
83
+ Kind: 'Typed';
84
+ Type: string;
85
+ Value: string;
86
+ } | {
87
+ Kind: 'Reference';
88
+ expressId: number;
89
+ } | {
90
+ Kind: 'Unsupported';
91
+ Raw: unknown;
92
+ InvalidNumber?: boolean;
93
+ };
37
94
  export interface CostValueInfo {
95
+ /** Present on values returned by the schema-aware extractor. Optional for source compatibility. */
96
+ expressId?: number;
97
+ /** Present on values returned by the schema-aware extractor. Optional for source compatibility. */
98
+ Type?: 'IfcCostValue' | 'IfcAppliedValue';
99
+ Name?: string;
100
+ Description?: string;
101
+ AppliedValue?: CostAppliedValue;
102
+ UnitBasis?: number;
103
+ /** The source supplied UnitBasis but it was not an entity reference. */
104
+ InvalidUnitBasis?: boolean;
105
+ ApplicableDate?: string;
106
+ FixedUntilDate?: string;
107
+ Category?: string;
108
+ Condition?: string;
109
+ /** The source supplied Condition with a non-string representation. */
110
+ InvalidCondition?: boolean;
111
+ ArithmeticOperator?: string;
112
+ /** Ordered references; shared references retain their original expressId. */
113
+ Components?: number[];
114
+ /** IFC2X3-only equivalent of Category. */
115
+ CostType?: string;
116
+ /** @deprecated Use the exact IFC-cased field. */
38
117
  name?: string;
118
+ /** @deprecated Use the exact IFC-cased field. */
39
119
  description?: string;
40
- /**
41
- * `AppliedValue` is an `IfcAppliedValueSelect` — in practice almost always
42
- * an `IfcMonetaryMeasure`/`IfcNumericMeasure`/`IfcRatioMeasure` typed
43
- * numeric wrapper. Resolved to a plain number when the wrapped value reads
44
- * as one; left `undefined` when it selects a non-numeric member (e.g. an
45
- * `IfcMeasureWithUnit` reference) this extractor does not resolve.
46
- */
120
+ /** @deprecated Use AppliedValue. */
47
121
  appliedValue?: number;
48
- /** See {@link CostValueUnitBasis} — distinguishes a rate from a flat total. */
122
+ /** Existing resolved rate basis view. */
49
123
  unitBasis?: CostValueUnitBasis;
50
124
  applicableDate?: string;
51
125
  fixedUntilDate?: string;
52
126
  category?: string;
53
127
  condition?: string;
54
128
  arithmeticOperator?: string;
55
- /** Nested `IfcCostValue` components (`Components : OPTIONAL LIST [1:?] OF IfcAppliedValue`). */
129
+ /** Existing nested component view. Shared identity is available in Components. */
56
130
  components?: CostValueInfo[];
57
131
  }
58
- /**
59
- * One `IfcCostItem`. Mirrors `ScheduleTaskInfo`'s shape in `schedule-extractor.ts`.
60
- *
61
- * `costQuantities` is `undefined` when `CostQuantities` is absent (the
62
- * schema's `LIST [1:?]` forbids an empty-but-declared list, so `undefined`
63
- * is the only "nothing here" state) or when every referenced quantity failed
64
- * to resolve. It is never a fallback to a product's `Qto_` quantities — see
65
- * `cost-extractor.ts` for why.
66
- *
67
- * `productExpressIds`/`productGlobalIds` use an empty array as a genuine
68
- * "no products assigned" state, distinct from "not resolved".
69
- */
70
- export interface CostItemInfo {
132
+ export type CostQuantityDimension = 'length' | 'area' | 'volume' | 'mass' | 'time' | 'count' | 'number';
133
+ export interface CostQuantityInfo {
71
134
  expressId: number;
72
- globalId: string;
73
- name: string;
74
- predefinedType?: string;
75
- costQuantities?: CollectedQuantity[];
76
- costValues?: CostValueInfo[];
77
- /** Parent cost item globalId (from IfcRelNests where this item is in RelatedObjects). */
78
- parentGlobalId?: string;
79
- /** Child cost item globalIds (from IfcRelNests where this item is RelatingObject). */
80
- childGlobalIds: string[];
81
- /** expressIds of objects/products this cost item is assigned to via IfcRelAssignsToControl. */
82
- productExpressIds: number[];
83
- /** globalIds of the same products (index-aligned with productExpressIds). */
84
- productGlobalIds: string[];
85
- /** CostSchedule globalIds that control this cost item via IfcRelAssignsToControl. */
86
- controllingScheduleGlobalIds: string[];
135
+ Type: string;
136
+ Name?: string;
137
+ Description?: string;
138
+ Unit?: number;
139
+ /** The source supplied Unit but it was not an entity reference. */
140
+ InvalidUnit?: boolean;
141
+ LengthValue?: string;
142
+ AreaValue?: string;
143
+ VolumeValue?: string;
144
+ CountValue?: string;
145
+ WeightValue?: string;
146
+ TimeValue?: string;
147
+ NumberValue?: string;
148
+ Formula?: string;
149
+ Dimension?: CostQuantityDimension;
150
+ /** IfcPhysicalComplexQuantity children, in source order. */
151
+ HasQuantities?: number[];
152
+ /** The source aggregate contained a non-reference member. */
153
+ InvalidHasQuantities?: boolean;
87
154
  }
88
- export interface CostScheduleInfo {
155
+ export interface CostUnitInfo {
89
156
  expressId: number;
90
- globalId: string;
91
- name: string;
92
- predefinedType?: string;
93
- status?: string;
94
- submittedOn?: string;
95
- updateDate?: string;
96
- /** Top-level cost item globalIds directly assigned via IfcRelAssignsToControl. */
97
- costItemGlobalIds: string[];
157
+ Type: string;
158
+ UnitType?: string;
159
+ Prefix?: string;
160
+ Name?: string;
161
+ Symbol?: string;
162
+ Currency?: string;
163
+ Dimension?: CostQuantityDimension;
164
+ /** Decimal multiplier into the dimension's canonical SI unit. */
165
+ Scale?: string;
166
+ }
167
+ export interface CostMeasureWithUnitInfo {
168
+ expressId: number;
169
+ ValueComponent: string;
170
+ UnitComponent: number;
171
+ ValueType?: string;
172
+ ValueDimension?: CostQuantityDimension;
98
173
  }
174
+ export type CostRelationshipType = 'IfcRelAssignsToControl' | 'IfcRelAssignsToProduct' | 'IfcRelAssignsToProcess' | 'IfcRelNests' | 'IfcRelDeclares' | 'IfcRelAssociatesAppliedValue' | 'IfcRelSchedulesCostItems' | 'IfcAppliedValueRelationship';
175
+ /**
176
+ * Exact relationship endpoints are retained instead of flattened ID arrays.
177
+ * Only attributes present on a relationship kind are populated.
178
+ */
179
+ export interface CostRelationshipInfo {
180
+ expressId: number;
181
+ Type: CostRelationshipType;
182
+ GlobalId?: string;
183
+ Name?: string;
184
+ Description?: string;
185
+ RelatedObjects?: number[];
186
+ /** The source RelatedObjects aggregate contained a non-reference member. */
187
+ InvalidRelatedObjects?: boolean;
188
+ /** One or more source endpoints were present but not STEP references. */
189
+ InvalidReferences?: boolean;
190
+ RelatedDefinitions?: number[];
191
+ RelatingControl?: number;
192
+ RelatingObject?: number;
193
+ RelatingProduct?: number;
194
+ RelatingProcess?: number;
195
+ RelatingContext?: number;
196
+ RelatingAppliedValue?: number;
197
+ ComponentOfTotal?: number;
198
+ Components?: number[];
199
+ ArithmeticOperator?: string;
200
+ }
201
+ /** Backward-compatible normalized extraction shape. */
99
202
  export interface CostExtraction {
100
203
  costSchedules: CostScheduleInfo[];
101
204
  costItems: CostItemInfo[];
102
- /** True if we encountered any costing entity (useful for empty-state UI). */
103
205
  hasCost: boolean;
206
+ SchemaVersion?: CostSchemaVersion;
207
+ CostSchedules?: CostScheduleInfo[];
208
+ CostItems?: CostItemInfo[];
209
+ CostValues?: CostValueInfo[];
210
+ CostQuantities?: CostQuantityInfo[];
211
+ Units?: CostUnitInfo[];
212
+ MeasuresWithUnit?: CostMeasureWithUnitInfo[];
213
+ ProjectUnits?: Partial<Record<CostQuantityDimension, number>>;
214
+ Relationships?: CostRelationshipInfo[];
215
+ Diagnostics?: CostDiagnostic[];
216
+ HasCostData?: boolean;
217
+ Currency?: string;
218
+ }
219
+ /** Complete schema-aware graph returned by {@link extractCostOnDemand}. */
220
+ export interface CostGraphExtraction extends CostExtraction {
221
+ SchemaVersion: CostSchemaVersion;
222
+ CostSchedules: CostScheduleInfo[];
223
+ CostItems: CostItemInfo[];
224
+ CostValues: CostValueInfo[];
225
+ CostQuantities: CostQuantityInfo[];
226
+ Units: CostUnitInfo[];
227
+ MeasuresWithUnit: CostMeasureWithUnitInfo[];
228
+ ProjectUnits: Partial<Record<CostQuantityDimension, number>>;
229
+ Relationships: CostRelationshipInfo[];
230
+ Diagnostics: CostDiagnostic[];
231
+ HasCostData: boolean;
232
+ /** Project currency, when supplied by IfcUnitAssignment. */
233
+ Currency?: string;
234
+ }
235
+ export interface CostEvaluationResult {
236
+ expressId: number;
237
+ Amount?: string;
238
+ Currency?: string;
239
+ Dimension?: CostQuantityDimension | 'ratio';
240
+ QuantityApplied?: string;
241
+ Diagnostics: CostDiagnostic[];
242
+ }
243
+ export interface CostEvaluationOptions {
244
+ /** Decimal significant-digit precision from 1 through 10,000. Defaults to 34 (decimal128). */
245
+ Precision?: number;
104
246
  }
105
247
  //# sourceMappingURL=cost-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cost-types.d.ts","sourceRoot":"","sources":["../src/cost-types.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IACjC;;gEAE4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;+EAC2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gGAAgG;IAChG,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+FAA+F;IAC/F,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,qFAAqF;IACrF,4BAA4B,EAAE,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;CAClB"}
1
+ {"version":3,"file":"cost-types.d.ts","sourceRoot":"","sources":["../src/cost-types.ts"],"names":[],"mappings":"AAIA,oDAAoD;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAC1B,qBAAqB,GACrB,oBAAoB,GACpB,mBAAmB,GACnB,cAAc,GACd,0BAA0B,GAC1B,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,eAAe,GACf,gBAAgB,GAChB,2BAA2B,GAC3B,uBAAuB,GACvB,kBAAkB,GAClB,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;;OAMG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,4BAA4B,EAAE,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,mGAAmG;IACnG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mGAAmG;IACnG,IAAI,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,MAAM,GACN,MAAM,GACN,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,6DAA6D;IAC7D,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,wBAAwB,GACxB,wBAAwB,GACxB,aAAa,GACb,gBAAgB,GAChB,8BAA8B,GAC9B,0BAA0B,GAC1B,6BAA6B,CAAC;AAElC;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,4EAA4E;IAC5E,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACvC,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,2EAA2E;AAC3E,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,aAAa,EAAE,iBAAiB,CAAC;IACjC,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,gBAAgB,EAAE,uBAAuB,EAAE,CAAC;IAC5C,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7D,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,38 @@
1
+ import type { CostDiagnostic, CostMeasureWithUnitInfo, CostQuantityDimension, CostUnitInfo } from './cost-types.js';
2
+ import { CostEntityReader } from './cost-reader.js';
3
+ export interface ResolvedMeasureWithUnit {
4
+ Value: string;
5
+ Unit: CostUnitInfo;
6
+ ValueType?: string;
7
+ ValueDimension?: CostQuantityDimension;
8
+ }
9
+ export interface CompatibilityMeasureWithUnit {
10
+ Value?: string;
11
+ Unit?: CostUnitInfo;
12
+ }
13
+ export declare class CostUnitResolver {
14
+ private readonly reader;
15
+ private readonly diagnostics;
16
+ readonly Units: Map<number, CostUnitInfo>;
17
+ readonly MeasuresWithUnit: Map<number, CostMeasureWithUnitInfo>;
18
+ readonly ProjectUnits: Map<CostQuantityDimension, CostUnitInfo>;
19
+ Currency?: string;
20
+ private conversionScaleWork;
21
+ private conversionScaleBudgetReported;
22
+ constructor(reader: CostEntityReader, diagnostics: CostDiagnostic[]);
23
+ resolve(expressId: number): CostUnitInfo | undefined;
24
+ private buildSimpleUnit;
25
+ private unresolvedUnit;
26
+ private buildConversionUnit;
27
+ private conversionScale;
28
+ resolveMeasureWithUnit(expressId: number | undefined): ResolvedMeasureWithUnit | undefined;
29
+ /** Preserve the former best-effort rate marker without weakening canonical validation. */
30
+ compatibilityMeasureWithUnit(expressId: number | undefined, canonical: ResolvedMeasureWithUnit | undefined): CompatibilityMeasureWithUnit | undefined;
31
+ private readMeasureHeader;
32
+ private readMeasure;
33
+ private readProjectUnits;
34
+ private warn;
35
+ private reference;
36
+ private references;
37
+ }
38
+ //# sourceMappingURL=cost-units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-units.d.ts","sourceRoot":"","sources":["../src/cost-units.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAoB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAuEtE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAeD,qBAAa,gBAAgB;IASzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAT9B,QAAQ,CAAC,KAAK,4BAAmC;IACjD,QAAQ,CAAC,gBAAgB,uCAA8C;IACvE,QAAQ,CAAC,YAAY,2CAAkD;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,6BAA6B,CAAS;gBAG3B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,cAAc,EAAE;IAKhD,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAoCpD,OAAO,CAAC,eAAe;IA0DvB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,eAAe;IAgBvB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,uBAAuB,GAAG,SAAS;IAO1F,0FAA0F;IAC1F,4BAA4B,CAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,SAAS,EAAE,uBAAuB,GAAG,SAAS,GAC7C,4BAA4B,GAAG,SAAS;IAa3C,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,UAAU;CAOnB"}