@pascal-app/core 1.1.1 → 1.1.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.
Files changed (40) hide show
  1. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +13453 -13453
  2. package/dist/agent-operations/batch.d.ts +4 -8
  3. package/dist/agent-operations/batch.d.ts.map +1 -1
  4. package/dist/agent-operations/batch.js +7 -19
  5. package/dist/agent-operations/circulation-spaces.d.ts +3431 -3431
  6. package/dist/agent-operations/index.d.ts +5715 -9
  7. package/dist/agent-operations/index.d.ts.map +1 -1
  8. package/dist/agent-operations/index.js +16 -5
  9. package/dist/agent-operations/scene-queries.d.ts +2610 -2610
  10. package/dist/agent-operations/types.d.ts +7 -0
  11. package/dist/agent-operations/types.d.ts.map +1 -1
  12. package/dist/agent-operations/usage-checks.js +2 -2
  13. package/dist/agent-operations/verify-scene.d.ts +7 -3
  14. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  15. package/dist/agent-operations/verify-scene.js +15 -7
  16. package/dist/building/__fixtures__/wall-opening-cases.d.ts +238 -238
  17. package/dist/building/level-duplication.d.ts +1274 -1274
  18. package/dist/commands/structure/zone-wall-merge.d.ts +568 -568
  19. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2610 -2610
  20. package/dist/lib/__fixtures__/mezzanine.d.ts +10874 -10874
  21. package/dist/lib/absorb-wall-separators.d.ts +635 -635
  22. package/dist/lib/steps.d.ts +8 -0
  23. package/dist/lib/steps.d.ts.map +1 -0
  24. package/dist/lib/steps.js +7 -0
  25. package/dist/spatial/usage-field/findings.d.ts +3 -0
  26. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  27. package/dist/spatial/usage-field/findings.js +17 -5
  28. package/dist/spatial/usage-field/measure.d.ts +3 -1
  29. package/dist/spatial/usage-field/measure.d.ts.map +1 -1
  30. package/dist/spatial/usage-field/measure.js +7 -2
  31. package/dist/store/actions/node-actions.d.ts +3431 -3431
  32. package/dist/store/scene-annotations.d.ts +1193 -1193
  33. package/dist/systems/slab/__fixtures__/floor-step.d.ts +3431 -3431
  34. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2610 -2610
  35. package/dist/systems/stair/stair-opening-preview.d.ts +2610 -2610
  36. package/dist/utils/ensure-scene-openings.d.ts +6215 -6215
  37. package/dist/utils/floor-plate-migration.d.ts +635 -635
  38. package/dist/utils/owned-floor-opening-migration.d.ts +635 -635
  39. package/dist/utils/reconcile-structure-on-load.d.ts +3431 -3431
  40. package/package.json +1 -1
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Work in steps: each resume runs the next piece, and the last returns the result. A long
3
+ * computation written this way can be resumed one piece at a time by a caller that lets other work
4
+ * run in between; `inOneGo` runs it through.
5
+ */
6
+ export type Steps<Result> = Generator<void, Result, void>;
7
+ export declare function inOneGo<Result>(steps: Steps<Result>): Result;
8
+ //# sourceMappingURL=steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/lib/steps.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;AAEzD,wBAAgB,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAK5D"}
@@ -0,0 +1,7 @@
1
+ export function inOneGo(steps) {
2
+ for (;;) {
3
+ const step = steps.next();
4
+ if (step.done)
5
+ return step.value;
6
+ }
7
+ }
@@ -1,4 +1,5 @@
1
1
  import { type CodeProfileId, type ThresholdSource } from '../../building/code-profile.js';
2
+ import { type Steps } from '../../lib/steps.js';
2
3
  import { type MeasureOptions } from './measure.js';
3
4
  import type { Nodes } from './walls.js';
4
5
  /** Clear width of a path in a house: 0,90 m, the arrêté du 24 décembre 2015 art. 11 II (36 in is the IRC hall). */
@@ -79,4 +80,6 @@ export type UsageOptions = MeasureOptions & {
79
80
  * not a compliance check.
80
81
  */
81
82
  export declare function usageIssues(nodes: Nodes, options?: UsageOptions): UsageIssue[];
83
+ /** `usageIssues`, a step for each measurement and for each floor of the circulation one. */
84
+ export declare function usageIssueSteps(nodes: Nodes, options?: UsageOptions): Steps<UsageIssue[]>;
82
85
  //# sourceMappingURL=findings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/findings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/findings.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { USAGE_INDICATORS, } from '../../building/code-profile.js';
2
+ import { inOneGo } from '../../lib/steps.js';
2
3
  import { bedIssues } from './beds.js';
3
4
  import { blockedOpeningIssues } from './blocked.js';
4
5
  import { clashIssues } from './clash.js';
@@ -6,7 +7,7 @@ import { doorOverStairIssues } from './door-stairs.js';
6
7
  import { entryIssues } from './entry-way.js';
7
8
  import { fixtureClearanceIssues } from './fixtures.js';
8
9
  import { m, nameOf, quote, unique } from './labels.js';
9
- import { measureUsage, } from './measure.js';
10
+ import { measureUsageSteps, } from './measure.js';
10
11
  import { usageShapes } from './shapes.js';
11
12
  import { doorSwingIssues } from './swings.js';
12
13
  /** Clear width of a path in a house: 0,90 m, the arrêté du 24 décembre 2015 art. 11 II (36 in is the IRC hall). */
@@ -203,8 +204,8 @@ function pocketIssue(nodes, room, from) {
203
204
  };
204
205
  }
205
206
  /** The passages, turning circles and pockets of every group of rooms, measured on one clearance field. */
206
- function circulationIssues(nodes, shapes, options) {
207
- const measure = measureUsage(nodes, shapes, options);
207
+ function* circulationIssues(nodes, shapes, options) {
208
+ const measure = yield* measureUsageSteps(nodes, shapes, options);
208
209
  const issues = [];
209
210
  for (const group of measure.groups) {
210
211
  const from = group.source.kind === 'door' ? 'the entrance' : 'the stair arrival';
@@ -245,7 +246,8 @@ function circulationIssues(nodes, shapes, options) {
245
246
  /**
246
247
  * Each measurement with the finding types it gives, in the order their findings are listed. On a
247
248
  * building of a few hundred rooms the circulation measurement takes seconds and the others a
248
- * fraction of one, so a question about some types takes the measurements that give them alone.
249
+ * fraction of one, so a question about some types takes the measurements that give them alone,
250
+ * and the circulation measurement is taken in steps.
249
251
  */
250
252
  const MEASUREMENTS = [
251
253
  {
@@ -273,6 +275,10 @@ export const USAGE_TYPES = new Set(MEASUREMENTS.flatMap((measurement) => measure
273
275
  * not a compliance check.
274
276
  */
275
277
  export function usageIssues(nodes, options = {}) {
278
+ return inOneGo(usageIssueSteps(nodes, options));
279
+ }
280
+ /** `usageIssues`, a step for each measurement and for each floor of the circulation one. */
281
+ export function* usageIssueSteps(nodes, options = {}) {
276
282
  const { types, ...measure } = options;
277
283
  const asked = types
278
284
  ? MEASUREMENTS.filter((measurement) => measurement.types.some((type) => types.has(type)))
@@ -280,5 +286,11 @@ export function usageIssues(nodes, options = {}) {
280
286
  if (asked.length === 0)
281
287
  return [];
282
288
  const shapes = usageShapes(nodes);
283
- return asked.flatMap((measurement) => measurement.run(nodes, shapes, measure));
289
+ const issues = [];
290
+ for (const measurement of asked) {
291
+ const found = measurement.run(nodes, shapes, measure);
292
+ issues.push(...(Array.isArray(found) ? found : yield* found));
293
+ yield;
294
+ }
295
+ return issues;
284
296
  }
@@ -1,3 +1,4 @@
1
+ import { type Steps } from '../../lib/steps.js';
1
2
  import { type Grid } from './field.js';
2
3
  import { type FloorGroup } from './level-field.js';
3
4
  import type { Prism, Ring, UsageShapes } from './types.js';
@@ -318,7 +319,8 @@ export declare function prepareGroup(nodes: Nodes, shapes: UsageShapes, group: F
318
319
  * shapes `usageShapes` read. The floor is a cell grid of the clearance to the nearest obstacle in a
319
320
  * band a body stands in; a passage is the widest path from the entrance to the room, its pinch
320
321
  * re-solved on a finer grid to the millimetre; a pocket is floor where a 0.60 m unit fits but
321
- * cannot get out.
322
+ * cannot get out. One floor a step: a building of many floors takes seconds.
322
323
  */
324
+ export declare function measureUsageSteps(nodes: Nodes, shapes: UsageShapes, options?: MeasureOptions): Steps<UsageMeasure>;
323
325
  export declare function measureUsage(nodes: Nodes, shapes: UsageShapes, options?: MeasureOptions): UsageMeasure;
324
326
  //# sourceMappingURL=measure.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/measure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/measure.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { floorsOf } from '../../agent-operations/circulation-spaces.js';
3
3
  import { isFloorUnderlay } from '../../agent-operations/furniture-kind.js';
4
4
  import { area, difference, union } from '../../lib/polygon-boolean.js';
5
5
  import { polygonInteriorPoint } from '../../lib/polygon-label.js';
6
+ import { inOneGo } from '../../lib/steps.js';
6
7
  import { resolveStairWalkingSurfaces } from '../../systems/stair/stair-clearance.js';
7
8
  import { cellX, cellZ } from './field.js';
8
9
  import { BODY_BAND, buildField, FEET_BAND, floorGroups, inRegion, maskOf, } from './level-field.js';
@@ -248,9 +249,9 @@ export function prepareGroup(nodes, shapes, group, cell, underlay) {
248
249
  * shapes `usageShapes` read. The floor is a cell grid of the clearance to the nearest obstacle in a
249
250
  * band a body stands in; a passage is the widest path from the entrance to the room, its pinch
250
251
  * re-solved on a finer grid to the millimetre; a pocket is floor where a 0.60 m unit fits but
251
- * cannot get out.
252
+ * cannot get out. One floor a step: a building of many floors takes seconds.
252
253
  */
253
- export function measureUsage(nodes, shapes, options = {}) {
254
+ export function* measureUsageSteps(nodes, shapes, options = {}) {
254
255
  const cell = options.cell ?? 0.02;
255
256
  const floors = floorsOf(nodes).floors;
256
257
  const exterior = exteriorDoors(nodes);
@@ -453,6 +454,10 @@ export function measureUsage(nodes, shapes, options = {}) {
453
454
  };
454
455
  });
455
456
  groups.push({ levelId: group.levelId, y: group.y, source, rooms });
457
+ yield;
456
458
  }
457
459
  return { groups, entranceDoorId: entrance };
458
460
  }
461
+ export function measureUsage(nodes, shapes, options = {}) {
462
+ return inOneGo(measureUsageSteps(nodes, shapes, options));
463
+ }