@ifc-lite/mutations 1.20.0 → 1.21.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/README.md +46 -0
- package/dist/types.d.ts +17 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -60,6 +60,52 @@ Edits accumulate in the same overlay used by `setProperty` / `setAttribute`
|
|
|
60
60
|
and materialise the next time you call
|
|
61
61
|
`StepExporter.export({ applyMutations: true })`.
|
|
62
62
|
|
|
63
|
+
### Whole numbers on REAL-typed attributes
|
|
64
|
+
|
|
65
|
+
ISO 10303-21 requires a REAL-typed attribute (`IfcLengthMeasure` coordinates,
|
|
66
|
+
profile dimensions, `IfcExtrudedAreaSolid.Depth`, …) to carry a decimal point —
|
|
67
|
+
`450.`, never `450`. The exporter is schema-aware: when a slot's declared type
|
|
68
|
+
is unambiguously REAL-backed, a whole-number value is serialized with the
|
|
69
|
+
decimal point automatically, so the natural call just works:
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
editor.setPositionalAttribute(profile.expressId, 3, 1); // XDim → 1. (dotted)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
For the rare slot that a bare value genuinely can't disambiguate — a
|
|
76
|
+
`SELECT(IfcInteger, IfcReal)` where you specifically want the REAL member — wrap
|
|
77
|
+
the number in the write-only `{ real }` marker to force a REAL literal:
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
editor.addEntity('IfcQuantityLength', ['L', null, unitRef, { real: 3 }]); // → IFCLENGTHMEASURE-safe 3.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Type-qualified values on SELECT attributes
|
|
84
|
+
|
|
85
|
+
ISO 10303-21 requires a SELECT member that is a defined type to be
|
|
86
|
+
type-QUALIFIED — `IFCBOOLEAN(.T.)`, not a bare `.T.`, in an
|
|
87
|
+
`IfcTranslationalStiffnessSelect` slot. The exporter auto-qualifies these when
|
|
88
|
+
the member is unambiguous, so the natural call just works:
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
// TranslationalStiffnessX : SELECT(IfcBoolean, IfcLinearStiffnessMeasure)
|
|
92
|
+
editor.setPositionalAttribute(condition.expressId, 1, true); // → IFCBOOLEAN(.T.)
|
|
93
|
+
editor.setPositionalAttribute(condition.expressId, 1, 1000); // → IFCLINEARSTIFFNESSMEASURE(1000.)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
When the SELECT has several members of the same primitive class (a number in
|
|
97
|
+
`IfcValue`, which has 100+ REAL-backed members) auto-qualification can't choose.
|
|
98
|
+
Use the write-only `{ typed: { type, value } }` marker to pin the exact type —
|
|
99
|
+
it also works for the whole `IfcValue` family (`NominalValue`, etc.) and
|
|
100
|
+
subsumes `{ real }`:
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// IfcPropertySingleValue: Name, Description, NominalValue (IfcValue), Unit
|
|
104
|
+
editor.addEntity('IfcPropertySingleValue', [
|
|
105
|
+
'Length', null, { typed: { type: 'IfcLengthMeasure', value: 3 } }, null,
|
|
106
|
+
]); // NominalValue → IFCLENGTHMEASURE(3.)
|
|
107
|
+
```
|
|
108
|
+
|
|
63
109
|
## Mutation history (for undo / export)
|
|
64
110
|
|
|
65
111
|
```typescript
|
package/dist/types.d.ts
CHANGED
|
@@ -7,8 +7,23 @@ import type { PropertyValueType } from '@ifc-lite/data';
|
|
|
7
7
|
*
|
|
8
8
|
* Mirrors the parser's `IfcAttributeValue` to keep `@ifc-lite/mutations` free
|
|
9
9
|
* of a `@ifc-lite/parser` dependency (parser → ifcx → mutations would cycle).
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
*
|
|
11
|
+
* The extra `{ real: number }` and `{ typed: { type, value } }` variants are
|
|
12
|
+
* WRITE-ONLY markers (never produced by extraction). `{ real }` forces STEP
|
|
13
|
+
* REAL serialization with a decimal point for whole numbers (`5.` not `5`).
|
|
14
|
+
* `{ typed }` forces a type-qualified value `IFC<TYPE>(<value>)` for a SELECT
|
|
15
|
+
* member that is a defined type (`IFCBOOLEAN(.T.)`) or the `IfcValue` family;
|
|
16
|
+
* it generalizes `{ real }`. See `@ifc-lite/data`'s `IfcAttributeValue` for the
|
|
17
|
+
* full contract (kept in sync here to avoid a package cycle).
|
|
18
|
+
*/
|
|
19
|
+
export type IfcAttributeValue = string | number | boolean | null | {
|
|
20
|
+
real: number;
|
|
21
|
+
} | {
|
|
22
|
+
typed: {
|
|
23
|
+
type: string;
|
|
24
|
+
value: string | number | boolean;
|
|
25
|
+
};
|
|
26
|
+
} | IfcAttributeValue[];
|
|
12
27
|
/**
|
|
13
28
|
* Property value types supported by mutations
|
|
14
29
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAoP/D;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,QAAgB,EAAE,QAAgB;IAC9E,OAAO,GAAG,QAAQ,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,QAAgB,EAAE,SAAiB;IAC/E,OAAO,GAAG,QAAQ,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,aAAqB;IAClE,OAAO,GAAG,QAAQ,SAAS,aAAa,EAAE,CAAC;AAC7C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/mutations",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.1",
|
|
4
4
|
"description": "Mutation tracking and property editing for IFC-Lite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@noble/hashes": "^2.2.0",
|
|
17
|
-
"@ifc-lite/data": "^
|
|
17
|
+
"@ifc-lite/data": "^3.0.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"typescript": "^6.0.3",
|
|
21
|
-
"vitest": "^4.1.
|
|
21
|
+
"vitest": "^4.1.10"
|
|
22
22
|
},
|
|
23
23
|
"license": "MPL-2.0",
|
|
24
24
|
"author": "Louis True",
|