@code3d/core 0.0.1-alpha.6 → 0.0.1-alpha.8
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 +53 -3
- package/bld/chunks/{chunk-3RIMOCPP.js → chunk-EWPRWRLV.js} +2 -2
- package/bld/chunks/{chunk-T6COR2SG.js → chunk-HSU2FH3L.js} +3 -3
- package/bld/chunks/{chunk-T3RAUNSF.js → chunk-MICNLFBF.js} +452 -107
- package/bld/chunks/chunk-MICNLFBF.js.map +7 -0
- package/bld/chunks/{chunk-KYW4AWKO.js → chunk-OAVABPL5.js} +2 -2
- package/bld/library/cached.d.ts +5 -3
- package/bld/library/cached.d.ts.map +1 -1
- package/bld/library/index.d.ts +4 -4
- package/bld/library/index.d.ts.map +1 -1
- package/bld/library/index.js +5 -3
- package/bld/library/kernel-cache.d.ts +5 -3
- package/bld/library/kernel-cache.d.ts.map +1 -1
- package/bld/library/loft.d.ts.map +1 -1
- package/bld/library/replicad.js +2 -2
- package/bld/library/runtime.d.ts +61 -6
- package/bld/library/runtime.d.ts.map +1 -1
- package/bld/library/topology.d.ts +4 -2
- package/bld/library/topology.d.ts.map +1 -1
- package/bld/node/index.js +7 -5
- package/bld/node/replicad.js +4 -4
- package/bld/tooling/index.d.ts +2 -2
- package/bld/tooling/index.d.ts.map +1 -1
- package/bld/tooling/index.js +4 -2
- package/package.json +1 -1
- package/src/library/cached.ts +29 -8
- package/src/library/index.ts +5 -2
- package/src/library/kernel-cache.ts +29 -5
- package/src/library/loft.ts +5 -1
- package/src/library/runtime.ts +508 -43
- package/src/library/shell.ts +3 -3
- package/src/library/topology.ts +24 -15
- package/src/tooling/index.ts +2 -0
- package/bld/chunks/chunk-T3RAUNSF.js.map +0 -7
- /package/bld/chunks/{chunk-3RIMOCPP.js.map → chunk-EWPRWRLV.js.map} +0 -0
- /package/bld/chunks/{chunk-T6COR2SG.js.map → chunk-HSU2FH3L.js.map} +0 -0
- /package/bld/chunks/{chunk-KYW4AWKO.js.map → chunk-OAVABPL5.js.map} +0 -0
package/bld/tooling/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { identifyCachedFunction } from '../library/cached.js';
|
|
|
2
2
|
export { installFontEngine, installModelResourceReader, } from '../library/font.js';
|
|
3
3
|
export { googleFontSources, googleFontUrl } from '../library/google-font.js';
|
|
4
4
|
export { installOpenCascade } from '../library/open-cascade.js';
|
|
5
|
-
export { clearKernelOperationCache, kernelOperationCacheStats, setKernelCacheBudget, setKernelArtifactStore, setKernelExternalBytes, } from '../library/kernel-cache.js';
|
|
5
|
+
export { clearKernelOperationCache, kernelOperationCacheStats, setKernelCacheBudget, setKernelCachePersistenceThreshold, setKernelArtifactStore, setKernelExternalBytes, } from '../library/kernel-cache.js';
|
|
6
6
|
export type { KernelArtifactStore } from '../library/kernel-cache.js';
|
|
7
7
|
export { SketchConstraintError, installSketchSolver, } from '../library/sketch-solver.js';
|
|
8
8
|
export { assertSketchDragConnections, isSketch, sketchDefinition, sketchDragRequiresSolver, sketchEntityParameters, sketchFrame, sketchPointResolver, sketchSource, snapshotSketch, solveSketchSnapshot, withSketchEntityParameters, } from '../library/sketch.js';
|
|
@@ -15,7 +15,7 @@ export { sketchRegions } from '../library/sketch-regions.js';
|
|
|
15
15
|
export type { SketchRegion } from '../library/sketch-regions.js';
|
|
16
16
|
export { describeOpenCascadeException } from '../library/open-cascade-error.js';
|
|
17
17
|
export { authoringApi, beginModelEvaluation, relationPreview, currentRelationSelf, relationSelectionPreview, relationTraceReference, createModelSnapshotter, disposeModelObjects, executeSnapshotQueryBatch, instrumentRelation, instrumentModelOperation, isConstraint, isRelationExpression, isModelObject, modelElementReference, modelObjectRuntimeInfo, modelTopologyIds, modelTopologyReference, planModelSnapshotQueries, relatedModelObjects, retainModelGeometry, } from '../library/runtime.js';
|
|
18
|
-
export type { Constraint, ConstraintAnchorSnapshot, RelationExpression, RelationPreview, ConstraintSnapshot, TransformationSnapshot, RelationStageSnapshot, RelationSpatialReference, ConstraintTraceReference, RelationTraceReference, ElementKind, ElementSnapshot, ModelElementReference, ModelGeometryKind, ModelGeometrySnapshot, ModelKind, ModelObject, ModelObjectRuntimeInfo, ModelOperationInputRole, ModelOperationInstrumentation, ModelOperationKind, ModelOperationRegionSnapshot, ModelOperationSelectionSnapshot, ModelOperationSnapshot, ModelParameterDimension, ModelSnapshotObject, ModelSpatialOperation, RotationReferenceSnapshot, ModelTopologyReference, ParameterKind, ParameterTarget, ParameterUsage, RelationObject, RenderMesh, SnapshotQuery, SnapshotQueryBatch, SnapshotQueryResult, SourceRef, Transform, } from '../library/runtime.js';
|
|
18
|
+
export type { Constraint, ConstraintAnchorSnapshot, RelationExpression, RelationPreview, ConstraintSnapshot, TransformationSnapshot, RelationStageSnapshot, RelationSpatialReference, ConstraintTraceReference, RelationTraceReference, ElementKind, ElementSnapshot, DistanceSnapshot, ModelElementReference, ModelGeometryKind, ModelGeometrySnapshot, ModelKind, ModelObject, ModelObjectRuntimeInfo, ModelOperationInputRole, ModelOperationInstrumentation, ModelOperationKind, ModelOperationRegionSnapshot, ModelOperationSelectionSnapshot, ModelOperationSnapshot, ModelParameterDimension, ModelSnapshotObject, ModelSpatialOperation, RotationReferenceSnapshot, ModelTopologyReference, ParameterKind, ParameterTarget, ParameterUsage, RelationObject, RenderMesh, SnapshotQuery, SnapshotQueryBatch, SnapshotQueryResult, SourceRef, Transform, } from '../library/runtime.js';
|
|
19
19
|
export { composeTransforms, identityRigidTransform, invertTransform, quaternionAxisAngle, relativeTransform, rotateVector, rotationAround, transformsAreEquivalent, xyzRotation, } from '../library/spatial.js';
|
|
20
20
|
export type { Quaternion, RigidTransform, Vec3 } from '../library/spatial.js';
|
|
21
21
|
export type { TopologyGeometry, TopologyInspection, TopologyInspectionItem, TopologyInspectionOptions, } from '../library/topology-inspection.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tooling/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tooling/index.ts"],"names":[],"mappings":"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"}
|
package/bld/tooling/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
installOpenCascade
|
|
3
|
-
} from "../chunks/chunk-
|
|
3
|
+
} from "../chunks/chunk-EWPRWRLV.js";
|
|
4
4
|
import {
|
|
5
5
|
SketchConstraintError,
|
|
6
6
|
TopologyIdSet,
|
|
@@ -52,6 +52,7 @@ import {
|
|
|
52
52
|
sameTopologyId,
|
|
53
53
|
setKernelArtifactStore,
|
|
54
54
|
setKernelCacheBudget,
|
|
55
|
+
setKernelCachePersistenceThreshold,
|
|
55
56
|
setKernelExternalBytes,
|
|
56
57
|
sketchArcGeometry,
|
|
57
58
|
sketchCurveBounds,
|
|
@@ -74,7 +75,7 @@ import {
|
|
|
74
75
|
transformsAreEquivalent,
|
|
75
76
|
withSketchEntityParameters,
|
|
76
77
|
xyzRotation
|
|
77
|
-
} from "../chunks/chunk-
|
|
78
|
+
} from "../chunks/chunk-MICNLFBF.js";
|
|
78
79
|
export {
|
|
79
80
|
SketchConstraintError,
|
|
80
81
|
TopologyIdSet,
|
|
@@ -127,6 +128,7 @@ export {
|
|
|
127
128
|
sameTopologyId,
|
|
128
129
|
setKernelArtifactStore,
|
|
129
130
|
setKernelCacheBudget,
|
|
131
|
+
setKernelCachePersistenceThreshold,
|
|
130
132
|
setKernelExternalBytes,
|
|
131
133
|
sketchArcGeometry,
|
|
132
134
|
sketchCurveBounds,
|
package/package.json
CHANGED
package/src/library/cached.ts
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from './kernel-cache.js';
|
|
14
14
|
import {estimateRetainedBytes} from './retained-memory.js';
|
|
15
15
|
|
|
16
|
-
export type
|
|
16
|
+
export type CacheOptions<Value> = CacheCodec<Value>;
|
|
17
17
|
|
|
18
18
|
const identities = new WeakMap<Function, string>();
|
|
19
19
|
const sessionIdentities = new WeakMap<Function, string>();
|
|
@@ -56,18 +56,34 @@ const dataLifecycle: KernelValueLifecycle<unknown> = {
|
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
58
|
* Memoizes a synchronous, deterministic computation in the shared cache.
|
|
59
|
+
* Omit args to create a function, or pass an argument tuple to return its value.
|
|
59
60
|
* Pass changing captured state as arguments and treat returned data as immutable.
|
|
60
61
|
* The engine fingerprints definitions and dependencies for persistent reuse.
|
|
61
62
|
* Outside the engine, function identity provides process-local memory reuse.
|
|
62
63
|
* Custom encoder/decoder pairs run only when writing/restoring persistent data;
|
|
63
64
|
* memory hits return the retained value without decoding or copying it.
|
|
64
65
|
*/
|
|
65
|
-
export function
|
|
66
|
+
export function cache<Args extends unknown[], Value>(
|
|
66
67
|
compute: (
|
|
67
68
|
...args: Args
|
|
68
69
|
) => Value & (Value extends PromiseLike<unknown> ? never : unknown),
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
args: Readonly<NoInfer<Args>>,
|
|
71
|
+
options?: CacheOptions<NoInfer<Value>>,
|
|
72
|
+
): Value;
|
|
73
|
+
export function cache<Args extends unknown[], Value>(
|
|
74
|
+
compute: (
|
|
75
|
+
...args: Args
|
|
76
|
+
) => Value & (Value extends PromiseLike<unknown> ? never : unknown),
|
|
77
|
+
args?: undefined,
|
|
78
|
+
options?: CacheOptions<NoInfer<Value>>,
|
|
79
|
+
): (...args: Args) => Value;
|
|
80
|
+
export function cache<Args extends unknown[], Value>(
|
|
81
|
+
compute: (
|
|
82
|
+
...args: Args
|
|
83
|
+
) => Value & (Value extends PromiseLike<unknown> ? never : unknown),
|
|
84
|
+
args?: Readonly<Args>,
|
|
85
|
+
options?: CacheOptions<Value>,
|
|
86
|
+
): Value | ((...args: Args) => Value) {
|
|
71
87
|
const operation = cachedArtifact(
|
|
72
88
|
(...args: Args): Value => {
|
|
73
89
|
const value = compute(...args);
|
|
@@ -77,12 +93,14 @@ export function cached<Args extends unknown[], Value>(
|
|
|
77
93
|
'then' in value &&
|
|
78
94
|
typeof value.then === 'function'
|
|
79
95
|
)
|
|
80
|
-
throw new Error('
|
|
96
|
+
throw new Error('cache() requires a synchronous computation.');
|
|
81
97
|
return value;
|
|
82
98
|
},
|
|
83
99
|
{identity: compute, codec: options},
|
|
84
100
|
);
|
|
85
|
-
return
|
|
101
|
+
return args === undefined
|
|
102
|
+
? (...args: Args) => operation(...args).value
|
|
103
|
+
: operation(...args).value;
|
|
86
104
|
}
|
|
87
105
|
|
|
88
106
|
/** Internal artifact form also supports native ownership and remote admission. */
|
|
@@ -116,8 +134,11 @@ export function cachedArtifact<Args extends unknown[], Value>(
|
|
|
116
134
|
findKernelOperation(key, lifecycle, persistence);
|
|
117
135
|
const findMany = (keys: readonly KernelOperationKey[]) =>
|
|
118
136
|
findKernelOperations(keys, lifecycle, persistence);
|
|
119
|
-
const accept = (
|
|
120
|
-
|
|
137
|
+
const accept = (
|
|
138
|
+
key: KernelOperationKey,
|
|
139
|
+
value: Value,
|
|
140
|
+
milliseconds: number,
|
|
141
|
+
) => acceptKernelOperation(key, lifecycle, value, milliseconds, persistence);
|
|
121
142
|
return Object.assign(
|
|
122
143
|
(...args: Args): KernelArtifact<Value> => {
|
|
123
144
|
return evaluateCachedArtifact(
|
package/src/library/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export type {
|
|
1
|
+
export {cache} from './cached.js';
|
|
2
|
+
export type {CacheOptions} from './cached.js';
|
|
3
3
|
export {font, googleFont} from './font.js';
|
|
4
4
|
export type {Font} from './font.js';
|
|
5
5
|
export type {GoogleFontOptions} from './google-font.js';
|
|
@@ -30,6 +30,7 @@ export {
|
|
|
30
30
|
coil,
|
|
31
31
|
cut,
|
|
32
32
|
cylinder,
|
|
33
|
+
distance,
|
|
33
34
|
ellipse,
|
|
34
35
|
extrude,
|
|
35
36
|
text,
|
|
@@ -52,6 +53,7 @@ export type {
|
|
|
52
53
|
Anchor,
|
|
53
54
|
Bound,
|
|
54
55
|
DirectionalBounds,
|
|
56
|
+
DistanceAxis,
|
|
55
57
|
PivotChain,
|
|
56
58
|
PivotRotation,
|
|
57
59
|
AxisRotation,
|
|
@@ -78,6 +80,7 @@ export type {
|
|
|
78
80
|
MergedElements,
|
|
79
81
|
Model,
|
|
80
82
|
ModelCapabilities,
|
|
83
|
+
ModelBounds,
|
|
81
84
|
ModelElementKind,
|
|
82
85
|
ModelForKind,
|
|
83
86
|
ModelGeometryKind,
|
|
@@ -40,6 +40,7 @@ export type KernelValueLifecycle<Value> = Readonly<{
|
|
|
40
40
|
}>;
|
|
41
41
|
|
|
42
42
|
type CacheEntry<Value> = Readonly<{
|
|
43
|
+
persistenceEligible: boolean;
|
|
43
44
|
estimatedBytes: number;
|
|
44
45
|
signature: string;
|
|
45
46
|
value: Value;
|
|
@@ -49,9 +50,11 @@ type CacheEntry<Value> = Readonly<{
|
|
|
49
50
|
|
|
50
51
|
export function createComputationCache({
|
|
51
52
|
maximumBytes = 2 * 1024 ** 3,
|
|
53
|
+
minimumPersistenceMilliseconds = 1,
|
|
52
54
|
nativeAllocatedBytes,
|
|
53
55
|
}: {
|
|
54
56
|
maximumBytes?: number;
|
|
57
|
+
minimumPersistenceMilliseconds?: number;
|
|
55
58
|
nativeAllocatedBytes: () => number;
|
|
56
59
|
}) {
|
|
57
60
|
const entries = new Map<string, CacheEntry<unknown>>();
|
|
@@ -77,6 +80,11 @@ export function createComputationCache({
|
|
|
77
80
|
evictHistoricalEntries();
|
|
78
81
|
}
|
|
79
82
|
|
|
83
|
+
/** Apply to future computations without changing existing entries' admission. */
|
|
84
|
+
function setKernelCachePersistenceThreshold(milliseconds: number): void {
|
|
85
|
+
minimumPersistenceMilliseconds = milliseconds;
|
|
86
|
+
}
|
|
87
|
+
|
|
80
88
|
/** The host accounts for in-flight inputs and all auxiliary native heaps. */
|
|
81
89
|
function setKernelExternalBytes(bytes: number): void {
|
|
82
90
|
externalBytes = bytes;
|
|
@@ -134,8 +142,10 @@ export function createComputationCache({
|
|
|
134
142
|
): KernelArtifact<Value> {
|
|
135
143
|
const hit = findKernelOperation(key, lifecycle, codec);
|
|
136
144
|
if (hit) return hit;
|
|
145
|
+
const started = performance.now();
|
|
137
146
|
const value = compute();
|
|
138
|
-
|
|
147
|
+
const milliseconds = performance.now() - started;
|
|
148
|
+
acceptKernelOperation(key, lifecycle, value, milliseconds, codec);
|
|
139
149
|
return {id: key.id, value};
|
|
140
150
|
}
|
|
141
151
|
|
|
@@ -191,7 +201,9 @@ export function createComputationCache({
|
|
|
191
201
|
misses += 1;
|
|
192
202
|
return undefined;
|
|
193
203
|
}
|
|
194
|
-
|
|
204
|
+
// Existing disk records have already been admitted; reading one must
|
|
205
|
+
// not reinterpret decode time as its original computation cost.
|
|
206
|
+
cached = retainEntry(key, lifecycle, restored, true);
|
|
195
207
|
persistentHits += 1;
|
|
196
208
|
persisted.add(id);
|
|
197
209
|
}
|
|
@@ -204,7 +216,8 @@ export function createComputationCache({
|
|
|
204
216
|
throw new Error(`Kernel operation cache identity collision: ${id}`);
|
|
205
217
|
hits += 1;
|
|
206
218
|
const value = cached.instantiate(cached.value);
|
|
207
|
-
if (codec !== false)
|
|
219
|
+
if (cached.persistenceEligible && codec !== false)
|
|
220
|
+
persist(key, cached.value, codec, true);
|
|
208
221
|
touchEntry(id, cached as CacheEntry<unknown>);
|
|
209
222
|
return {id, value};
|
|
210
223
|
}
|
|
@@ -214,6 +227,7 @@ export function createComputationCache({
|
|
|
214
227
|
key: KernelOperationKey,
|
|
215
228
|
lifecycle: KernelValueLifecycle<Value>,
|
|
216
229
|
value: Value,
|
|
230
|
+
milliseconds: number,
|
|
217
231
|
codec?: CacheCodec<Value> | false,
|
|
218
232
|
): void {
|
|
219
233
|
const existing = entries.get(key.id);
|
|
@@ -230,8 +244,14 @@ export function createComputationCache({
|
|
|
230
244
|
lifecycle.release(value);
|
|
231
245
|
throw error;
|
|
232
246
|
}
|
|
233
|
-
const entry = retainEntry(
|
|
234
|
-
|
|
247
|
+
const entry = retainEntry(
|
|
248
|
+
key,
|
|
249
|
+
lifecycle,
|
|
250
|
+
retained,
|
|
251
|
+
milliseconds >= minimumPersistenceMilliseconds,
|
|
252
|
+
);
|
|
253
|
+
if (entry.persistenceEligible && codec !== false)
|
|
254
|
+
persist(key, retained, codec);
|
|
235
255
|
touchEntry(key.id, entry as CacheEntry<unknown>);
|
|
236
256
|
}
|
|
237
257
|
|
|
@@ -288,8 +308,10 @@ export function createComputationCache({
|
|
|
288
308
|
key: KernelOperationKey,
|
|
289
309
|
lifecycle: KernelValueLifecycle<Value>,
|
|
290
310
|
retained: Value,
|
|
311
|
+
persistenceEligible: boolean,
|
|
291
312
|
): CacheEntry<Value> {
|
|
292
313
|
const entry: CacheEntry<Value> = {
|
|
314
|
+
persistenceEligible,
|
|
293
315
|
estimatedBytes:
|
|
294
316
|
256 +
|
|
295
317
|
estimateRetainedBytes(key.signature) +
|
|
@@ -375,6 +397,7 @@ export function createComputationCache({
|
|
|
375
397
|
clearKernelOperationCache,
|
|
376
398
|
kernelOperationCacheStats,
|
|
377
399
|
setKernelCacheBudget,
|
|
400
|
+
setKernelCachePersistenceThreshold,
|
|
378
401
|
setKernelArtifactStore,
|
|
379
402
|
findKernelOperation,
|
|
380
403
|
findKernelOperations,
|
|
@@ -396,6 +419,7 @@ export const {
|
|
|
396
419
|
clearKernelOperationCache,
|
|
397
420
|
kernelOperationCacheStats,
|
|
398
421
|
setKernelCacheBudget,
|
|
422
|
+
setKernelCachePersistenceThreshold,
|
|
399
423
|
setKernelArtifactStore,
|
|
400
424
|
findKernelOperation,
|
|
401
425
|
findKernelOperations,
|
package/src/library/loft.ts
CHANGED
|
@@ -62,7 +62,11 @@ export function loftWithTopology(
|
|
|
62
62
|
ruled,
|
|
63
63
|
holes.map(wires => wires[0]),
|
|
64
64
|
);
|
|
65
|
-
return booleanWithTopology(
|
|
65
|
+
return booleanWithTopology(
|
|
66
|
+
{...outer, namespace: 'intermediate'},
|
|
67
|
+
{...inner, namespace: 'intermediate'},
|
|
68
|
+
'cut',
|
|
69
|
+
);
|
|
66
70
|
} finally {
|
|
67
71
|
inner?.shape.delete();
|
|
68
72
|
outer?.shape.delete();
|