geospec 0.1.0-beta.9 → 0.4.1-next.331
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 +34 -9
- package/agent/doctrine.md +2 -1
- package/agent/geospec-authoring/SKILL.md +3 -3
- package/agent/geospec-authoring/api-index.md +20 -92
- package/agent/geospec-authoring/api-types.md +85 -480
- package/agent/geospec-authoring/public-api-functions.md +21 -1
- package/agent/geospec-authoring/public-api-index.md +215 -319
- package/agent/geospec-authoring/public-api-types-2.md +480 -352
- package/agent/geospec-authoring/public-api-types-3.md +79 -215
- package/agent/geospec-authoring/public-api-types.md +334 -849
- package/agent/resources.js +12 -13
- package/agent/skills.json +2 -3
- package/dist/assertion-client/client.d.mts +14 -15
- package/dist/assertion-client/client.mjs +1 -1
- package/dist/cli/check.mjs +2 -0
- package/dist/cli/cli.d.mts +5 -5
- package/dist/cli/cli.mjs +20 -3
- package/dist/cli/node-host.d.mts +5 -4
- package/dist/cli/node-host.mjs +1 -1
- package/dist/cli/wire-value.mjs +1 -1
- package/dist/config/define-config.d.mts +2 -3
- package/dist/config/node/index.mjs +1 -1
- package/dist/config/node/load.d.mts +2 -3
- package/dist/config/node/load.mjs +1 -1
- package/dist/config/read-geospec-config.d.mts +10 -6
- package/dist/config/read-geospec-config.mjs +1 -1
- package/dist/config/types.d.mts +6 -7
- package/dist/create-geospec.d.mts +7 -6
- package/dist/engine/client.d.mts +15 -15
- package/dist/engine/client.mjs +1 -1
- package/dist/engine/matchers.d.mts +10 -11
- package/dist/engine/pmi.types.d.mts +11 -12
- package/dist/engine/protocol.d.mts +7 -8
- package/dist/engine/protocol.mjs +1 -1
- package/dist/geometry-unit.d.mts +2 -3
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/mesh/index.d.mts +2 -2
- package/dist/mesh/types.d.mts +8 -505
- package/dist/model/errors.d.mts +2 -3
- package/dist/model/load-model.d.mts +3 -4
- package/dist/model/mesh-evidence-matchers.d.mts +2 -3
- package/dist/model/native-model-loader.d.mts +14 -17
- package/dist/model/native-model-loader.mjs +1 -1
- package/dist/model/node/command-exporter.d.mts +3 -4
- package/dist/model/node/command-exporter.mjs +1 -1
- package/dist/model/node/index.mjs +1 -1
- package/dist/model/region-scope.d.mts +3 -6
- package/dist/model/region-scope.mjs +1 -1
- package/dist/model/subject.d.mts +2 -5
- package/dist/model/subject.mjs +1 -1
- package/dist/model/types.d.mts +19 -20
- package/dist/runner/collector.d.mts +7 -8
- package/dist/runner/collector.mjs +3 -1
- package/dist/runner/discovery.d.mts +10 -11
- package/dist/runner/discovery.mjs +5 -1
- package/dist/runner/filter.d.mts +6 -7
- package/dist/runner/filter.mjs +3 -1
- package/dist/runner/index.d.mts +3 -1
- package/dist/runner/index.mjs +1 -1
- package/dist/runner/native/native-pool-grants.d.mts +2 -3
- package/dist/runner/native/native-serial-runner.d.mts +4 -7
- package/dist/runner/native/native-serial-runner.mjs +1 -1
- package/dist/runner/node/engine.d.mts +5 -6
- package/dist/runner/node/index.mjs +1 -1
- package/dist/runner/node/node-vm-filesystem.d.mts +4 -5
- package/dist/runner/node/node-vm-filesystem.mjs +1 -1
- package/dist/runner/node/pool-runner.d.mts +15 -6
- package/dist/runner/node/pool-runner.mjs +1 -1
- package/dist/runner/node/pool-worker-entry.d.mts +9 -6
- package/dist/runner/node/pool-worker-entry.mjs +1 -1
- package/dist/runner/pool/events.mjs +1 -1
- package/dist/runner/pool/pool-messages.d.mts +8 -9
- package/dist/runner/pool/pool.d.mts +4 -6
- package/dist/runner/pool/pool.mjs +1 -1
- package/dist/runner/pool/shard-timings.d.mts +3 -4
- package/dist/runner/pool/worker-host.d.mts +6 -5
- package/dist/runner/pool/worker-host.mjs +1 -1
- package/dist/runner/run-geospec-module.d.mts +2 -3
- package/dist/runner/run-geospec-module.mjs +2 -2
- package/dist/runner/timeout-codes.d.mts +6 -8
- package/dist/runner/types.d.mts +56 -53
- package/dist/runner/worker/no-matching-tests-issue.d.mts +3 -4
- package/dist/runner/worker/runner-types.d.mts +17 -16
- package/dist/runner/worker/serial-runner.mjs +1 -1
- package/dist/selector/types.d.mts +22 -23
- package/dist/step/types.d.mts +4 -119
- package/dist/support/filesystem-errors.mjs +1 -0
- package/dist/support/hash.mjs +1 -0
- package/dist/support/path.mjs +1 -0
- package/dist/support/sha256.mjs +1 -0
- package/dist/support/types.d.mts +38 -0
- package/dist/vitest/adapter.d.mts +5 -6
- package/dist/vitest/adapter.mjs +1 -1
- package/dist/vitest/index.d.mts +0 -1
- package/dist/vitest/index.mjs +1 -1
- package/dist/vitest/node/index.d.mts +2 -0
- package/dist/vitest/node/index.mjs +1 -0
- package/dist/vitest/node/setup-project.d.mts +60 -0
- package/dist/vitest/node/setup-project.mjs +1 -0
- package/dist/vm/plain-module-vm.d.mts +13 -0
- package/dist/vm/plain-module-vm.mjs +8 -0
- package/dist/vm/types.d.mts +142 -0
- package/package.json +17 -9
- package/agent/geospec-authoring/api-types-2.md +0 -85
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# geospec — Types
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
55 top-level symbols. Signatures are verbatim typescript.
|
|
4
4
|
|
|
5
5
|
// A model admitted by one live GeoSpec host scope
|
|
6
6
|
GeoSpecSubject: {
|
|
@@ -34,7 +34,7 @@ GeoSpecAssertion: {
|
|
|
34
34
|
* holds for this millimetre box, never for the whole model.
|
|
35
35
|
*/
|
|
36
36
|
region?: GeoSpecLoadRegion;
|
|
37
|
-
/** Wall-clock cost of matcher evaluation in milliseconds (
|
|
37
|
+
/** Wall-clock cost of matcher evaluation in milliseconds (budgeted matchers only). */
|
|
38
38
|
durationMs?: number;
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -62,7 +62,7 @@ GeoSpecAssertion: {
|
|
|
62
62
|
// The crop this assertion's subject was loaded with
|
|
63
63
|
region?: GeoSpecLoadRegion
|
|
64
64
|
|
|
65
|
-
// Wall-clock cost of matcher evaluation in milliseconds (
|
|
65
|
+
// Wall-clock cost of matcher evaluation in milliseconds (budgeted matchers only)
|
|
66
66
|
durationMs?: number
|
|
67
67
|
|
|
68
68
|
// Assembly occurrence rule accepted by `expectGeo(...).toHaveAssemblyOccurrences(...)`
|
|
@@ -830,256 +830,6 @@ GeoSpecVolumeExpectation: {
|
|
|
830
830
|
|
|
831
831
|
tolerance?: number
|
|
832
832
|
|
|
833
|
-
// Basic exact or topology-derived BRep evidence consumed by early feature matchers
|
|
834
|
-
BrepEvidence: {
|
|
835
|
-
validity?: {
|
|
836
|
-
valid: boolean;
|
|
837
|
-
checks?: Array<{
|
|
838
|
-
shape: string;
|
|
839
|
-
status: string;
|
|
840
|
-
}>;
|
|
841
|
-
maxTolerance?: number;
|
|
842
|
-
freeBounds?: {
|
|
843
|
-
count: number;
|
|
844
|
-
};
|
|
845
|
-
smallEdges?: Array<{
|
|
846
|
-
length: number;
|
|
847
|
-
shape?: string;
|
|
848
|
-
location?: Vec3;
|
|
849
|
-
}>;
|
|
850
|
-
sameParameter?: boolean;
|
|
851
|
-
closedShells?: boolean;
|
|
852
|
-
closedSolids?: boolean;
|
|
853
|
-
solidCount?: number;
|
|
854
|
-
invalidSolidCount?: number;
|
|
855
|
-
openEdgeCount?: number;
|
|
856
|
-
reason?: string;
|
|
857
|
-
closedWires?: boolean;
|
|
858
|
-
};
|
|
859
|
-
topologyCounts?: {
|
|
860
|
-
vertices?: number;
|
|
861
|
-
edges?: number;
|
|
862
|
-
wires?: number;
|
|
863
|
-
faces?: number;
|
|
864
|
-
shells?: number;
|
|
865
|
-
solids?: number;
|
|
866
|
-
compounds?: number;
|
|
867
|
-
};
|
|
868
|
-
boundingBox?: {
|
|
869
|
-
min: Vec3;
|
|
870
|
-
max: Vec3;
|
|
871
|
-
size: Vec3;
|
|
872
|
-
center: Vec3;
|
|
873
|
-
};
|
|
874
|
-
massProperties?: {
|
|
875
|
-
surfaceArea?: number;
|
|
876
|
-
volume?: number;
|
|
877
|
-
centerOfMass?: Vec3;
|
|
878
|
-
mass?: number;
|
|
879
|
-
};
|
|
880
|
-
planarFaces?: Array<{
|
|
881
|
-
normal: Vec3;
|
|
882
|
-
offset: number;
|
|
883
|
-
area?: number;
|
|
884
|
-
center?: Vec3;
|
|
885
|
-
}>;
|
|
886
|
-
cylindricalFaces?: Array<{
|
|
887
|
-
radius: number;
|
|
888
|
-
axis: 'x' | 'y' | 'z';
|
|
889
|
-
center?: Vec3;
|
|
890
|
-
axisRange?: {
|
|
891
|
-
min: number;
|
|
892
|
-
max: number;
|
|
893
|
-
};
|
|
894
|
-
}>;
|
|
895
|
-
circularHoles?: Array<{
|
|
896
|
-
diameter: number;
|
|
897
|
-
through: boolean;
|
|
898
|
-
axis: 'x' | 'y' | 'z';
|
|
899
|
-
center?: Vec3;
|
|
900
|
-
axisRange?: {
|
|
901
|
-
min: number;
|
|
902
|
-
max: number;
|
|
903
|
-
};
|
|
904
|
-
}>;
|
|
905
|
-
circularHolePatterns?: Array<{
|
|
906
|
-
count: number;
|
|
907
|
-
holeDiameter: number;
|
|
908
|
-
boltCircleDiameter: number;
|
|
909
|
-
axis: 'x' | 'y' | 'z';
|
|
910
|
-
center?: Vec3;
|
|
911
|
-
}>;
|
|
912
|
-
chamferFeatures?: Array<{
|
|
913
|
-
distance: number;
|
|
914
|
-
selection?: string;
|
|
915
|
-
}>;
|
|
916
|
-
filletFeatures?: Array<{
|
|
917
|
-
radius: number;
|
|
918
|
-
selection?: string;
|
|
919
|
-
}>;
|
|
920
|
-
minimumWallThickness?: {
|
|
921
|
-
value: number;
|
|
922
|
-
location?: Vec3;
|
|
923
|
-
pointA?: Vec3;
|
|
924
|
-
pointB?: Vec3;
|
|
925
|
-
solidIndex?: number;
|
|
926
|
-
tieCount?: number;
|
|
927
|
-
algorithm?: string;
|
|
928
|
-
tolerance?: number;
|
|
929
|
-
supportA?: {
|
|
930
|
-
faceIndex?: number;
|
|
931
|
-
surfaceType?: string;
|
|
932
|
-
supportType?: string;
|
|
933
|
-
};
|
|
934
|
-
supportB?: {
|
|
935
|
-
faceIndex?: number;
|
|
936
|
-
surfaceType?: string;
|
|
937
|
-
supportType?: string;
|
|
938
|
-
};
|
|
939
|
-
rejections?: Record<string, number>;
|
|
940
|
-
};
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
validity?: {
|
|
944
|
-
valid: boolean;
|
|
945
|
-
checks?: Array<{
|
|
946
|
-
shape: string;
|
|
947
|
-
status: string;
|
|
948
|
-
}>;
|
|
949
|
-
maxTolerance?: number;
|
|
950
|
-
freeBounds?: {
|
|
951
|
-
count: number;
|
|
952
|
-
};
|
|
953
|
-
smallEdges?: Array<{
|
|
954
|
-
length: number;
|
|
955
|
-
shape?: string;
|
|
956
|
-
location?: Vec3;
|
|
957
|
-
}>;
|
|
958
|
-
sameParameter?: boolean;
|
|
959
|
-
closedShells?: boolean;
|
|
960
|
-
closedSolids?: boolean;
|
|
961
|
-
solidCount?: number;
|
|
962
|
-
invalidSolidCount?: number;
|
|
963
|
-
openEdgeCount?: number;
|
|
964
|
-
reason?: string;
|
|
965
|
-
closedWires?: boolean;
|
|
966
|
-
}
|
|
967
|
-
|
|
968
|
-
topologyCounts?: {
|
|
969
|
-
vertices?: number;
|
|
970
|
-
edges?: number;
|
|
971
|
-
wires?: number;
|
|
972
|
-
faces?: number;
|
|
973
|
-
shells?: number;
|
|
974
|
-
solids?: number;
|
|
975
|
-
compounds?: number;
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
boundingBox?: {
|
|
979
|
-
min: Vec3;
|
|
980
|
-
max: Vec3;
|
|
981
|
-
size: Vec3;
|
|
982
|
-
center: Vec3;
|
|
983
|
-
}
|
|
984
|
-
|
|
985
|
-
massProperties?: {
|
|
986
|
-
surfaceArea?: number;
|
|
987
|
-
volume?: number;
|
|
988
|
-
centerOfMass?: Vec3;
|
|
989
|
-
mass?: number;
|
|
990
|
-
}
|
|
991
|
-
|
|
992
|
-
planarFaces?: Array<{
|
|
993
|
-
normal: Vec3;
|
|
994
|
-
offset: number;
|
|
995
|
-
area?: number;
|
|
996
|
-
center?: Vec3;
|
|
997
|
-
}>
|
|
998
|
-
|
|
999
|
-
cylindricalFaces?: Array<{
|
|
1000
|
-
radius: number;
|
|
1001
|
-
axis: 'x' | 'y' | 'z';
|
|
1002
|
-
center?: Vec3;
|
|
1003
|
-
axisRange?: {
|
|
1004
|
-
min: number;
|
|
1005
|
-
max: number;
|
|
1006
|
-
};
|
|
1007
|
-
}>
|
|
1008
|
-
|
|
1009
|
-
circularHoles?: Array<{
|
|
1010
|
-
diameter: number;
|
|
1011
|
-
through: boolean;
|
|
1012
|
-
axis: 'x' | 'y' | 'z';
|
|
1013
|
-
center?: Vec3;
|
|
1014
|
-
axisRange?: {
|
|
1015
|
-
min: number;
|
|
1016
|
-
max: number;
|
|
1017
|
-
};
|
|
1018
|
-
}>
|
|
1019
|
-
|
|
1020
|
-
circularHolePatterns?: Array<{
|
|
1021
|
-
count: number;
|
|
1022
|
-
holeDiameter: number;
|
|
1023
|
-
boltCircleDiameter: number;
|
|
1024
|
-
axis: 'x' | 'y' | 'z';
|
|
1025
|
-
center?: Vec3;
|
|
1026
|
-
}>
|
|
1027
|
-
|
|
1028
|
-
chamferFeatures?: Array<{
|
|
1029
|
-
distance: number;
|
|
1030
|
-
selection?: string;
|
|
1031
|
-
}>
|
|
1032
|
-
|
|
1033
|
-
filletFeatures?: Array<{
|
|
1034
|
-
radius: number;
|
|
1035
|
-
selection?: string;
|
|
1036
|
-
}>
|
|
1037
|
-
|
|
1038
|
-
minimumWallThickness?: {
|
|
1039
|
-
value: number;
|
|
1040
|
-
location?: Vec3;
|
|
1041
|
-
pointA?: Vec3;
|
|
1042
|
-
pointB?: Vec3;
|
|
1043
|
-
solidIndex?: number;
|
|
1044
|
-
tieCount?: number;
|
|
1045
|
-
algorithm?: string;
|
|
1046
|
-
tolerance?: number;
|
|
1047
|
-
supportA?: {
|
|
1048
|
-
faceIndex?: number;
|
|
1049
|
-
surfaceType?: string;
|
|
1050
|
-
supportType?: string;
|
|
1051
|
-
};
|
|
1052
|
-
supportB?: {
|
|
1053
|
-
faceIndex?: number;
|
|
1054
|
-
surfaceType?: string;
|
|
1055
|
-
supportType?: string;
|
|
1056
|
-
};
|
|
1057
|
-
rejections?: Record<string, number>;
|
|
1058
|
-
}
|
|
1059
|
-
|
|
1060
|
-
// Geometry file formats understood by GeoSpec provenance
|
|
1061
|
-
GeometryFileFormat: MeshFileFormat | 'step' | 'stp'
|
|
1062
|
-
|
|
1063
|
-
// Capability exposed by a loaded subject
|
|
1064
|
-
GeometryCapability: {
|
|
1065
|
-
kind: 'mesh';
|
|
1066
|
-
feature: 'triangles' | 'bounding-box' | 'connected-components' | 'watertightness' | 'surface-area' | 'volume' | 'center-of-mass' | 'distance' | 'component-overlap';
|
|
1067
|
-
} | {
|
|
1068
|
-
kind: 'brep';
|
|
1069
|
-
feature: 'validity' | 'topology-counts' | 'bounding-box' | 'mass-properties' | 'planar-faces' | 'cylindrical-faces' | 'circular-holes' | 'circular-hole-patterns' | 'chamfer-features' | 'fillet-features' | 'wall-thickness';
|
|
1070
|
-
} | {
|
|
1071
|
-
kind: 'step';
|
|
1072
|
-
feature: 'schema' | 'units' | 'product-structure' | 'reader-provenance';
|
|
1073
|
-
} | {
|
|
1074
|
-
kind: 'unsupported';
|
|
1075
|
-
feature: string;
|
|
1076
|
-
reason: string;
|
|
1077
|
-
}
|
|
1078
|
-
|
|
1079
|
-
kind: 'mesh'
|
|
1080
|
-
|
|
1081
|
-
feature: 'triangles' | 'bounding-box' | 'connected-components' | 'watertightness' | 'surface-area' | 'volume' | 'center-of-mass' | 'distance' | 'component-overlap'
|
|
1082
|
-
|
|
1083
833
|
// Diagnostic emitted by GeoSpec loaders, analyzers, and matchers
|
|
1084
834
|
GeometryDiagnostic: {
|
|
1085
835
|
code: KernelIssueCode | (string & {});
|
|
@@ -1110,233 +860,6 @@ GeometryDiagnostic: {
|
|
|
1110
860
|
|
|
1111
861
|
details?: unknown
|
|
1112
862
|
|
|
1113
|
-
// Provenance recorded by GeoSpec loaders
|
|
1114
|
-
GeometryProvenance: {
|
|
1115
|
-
source: GeometrySource;
|
|
1116
|
-
unit: GeoSpecUnit;
|
|
1117
|
-
loader: 'gltf-transform' | 'in-memory' | 'opencascade-step';
|
|
1118
|
-
contentHash?: string;
|
|
1119
|
-
parameters?: Record<string, JSONValue>;
|
|
1120
|
-
exportIntent?: GeometryExportIntent;
|
|
1121
|
-
}
|
|
1122
|
-
|
|
1123
|
-
source: GeometrySource
|
|
1124
|
-
|
|
1125
|
-
unit: GeoSpecUnit
|
|
1126
|
-
|
|
1127
|
-
loader: 'gltf-transform' | 'in-memory' | 'opencascade-step'
|
|
1128
|
-
|
|
1129
|
-
contentHash?: string
|
|
1130
|
-
|
|
1131
|
-
parameters?: Record<string, JSONValue>
|
|
1132
|
-
|
|
1133
|
-
exportIntent?: GeometryExportIntent
|
|
1134
|
-
|
|
1135
|
-
// Source metadata for a loaded geometry subject
|
|
1136
|
-
GeometrySource: {
|
|
1137
|
-
kind: 'bytes' | 'array-buffer' | 'blob' | 'file' | 'path' | 'url' | 'mesh-buffer' | 'readable-stream' | 'async-iterable';
|
|
1138
|
-
format: GeometryFileFormat;
|
|
1139
|
-
path?: string;
|
|
1140
|
-
name?: string;
|
|
1141
|
-
byteLength?: number;
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
kind: 'bytes' | 'array-buffer' | 'blob' | 'file' | 'path' | 'url' | 'mesh-buffer' | 'readable-stream' | 'async-iterable'
|
|
1145
|
-
|
|
1146
|
-
format: GeometryFileFormat
|
|
1147
|
-
|
|
1148
|
-
path?: string
|
|
1149
|
-
|
|
1150
|
-
name?: string
|
|
1151
|
-
|
|
1152
|
-
byteLength?: number
|
|
1153
|
-
|
|
1154
|
-
// Canonical P0 object under test for GeoSpec
|
|
1155
|
-
// Remarks: This is intentionally a GeoSpec-loaded subject rather than a Tau runtime contract. Runtime integrations pass GLB/glTF bytes or files into loaders.
|
|
1156
|
-
GeometrySubject: {
|
|
1157
|
-
kind: 'geometry-subject';
|
|
1158
|
-
/** Opaque engine-owned identifier used by every protocol claim. */
|
|
1159
|
-
subjectId: string;
|
|
1160
|
-
mesh: GeometrySubjectMeshEvidence;
|
|
1161
|
-
brep?: BrepEvidence;
|
|
1162
|
-
step?: StepEvidence;
|
|
1163
|
-
provenance: GeometryProvenance;
|
|
1164
|
-
capabilities: GeometryCapability[];
|
|
1165
|
-
diagnostics: GeometryEvidenceDiagnostic[];
|
|
1166
|
-
}
|
|
1167
|
-
|
|
1168
|
-
kind: 'geometry-subject'
|
|
1169
|
-
|
|
1170
|
-
// Opaque engine-owned identifier used by every protocol claim
|
|
1171
|
-
subjectId: string
|
|
1172
|
-
|
|
1173
|
-
mesh: GeometrySubjectMeshEvidence
|
|
1174
|
-
|
|
1175
|
-
brep?: BrepEvidence
|
|
1176
|
-
|
|
1177
|
-
step?: StepEvidence
|
|
1178
|
-
|
|
1179
|
-
provenance: GeometryProvenance
|
|
1180
|
-
|
|
1181
|
-
capabilities: GeometryCapability[]
|
|
1182
|
-
|
|
1183
|
-
diagnostics: GeometryEvidenceDiagnostic[]
|
|
1184
|
-
|
|
1185
|
-
// Wire-safe mesh summary carried by an opaque geometry subject
|
|
1186
|
-
GeometrySubjectMeshEvidence: {
|
|
1187
|
-
format: MeshFileFormat;
|
|
1188
|
-
stats: Pick<GeometryStats, 'vertexCount' | 'meshCount' | 'triangleCount'>;
|
|
1189
|
-
}
|
|
1190
|
-
|
|
1191
|
-
format: MeshFileFormat
|
|
1192
|
-
|
|
1193
|
-
stats: Pick<GeometryStats, 'vertexCount' | 'meshCount' | 'triangleCount'>
|
|
1194
|
-
|
|
1195
|
-
// Mesh evidence loaded from geometry bytes or buffers
|
|
1196
|
-
MeshEvidence: {
|
|
1197
|
-
format: MeshFileFormat;
|
|
1198
|
-
stats: GeometryStats;
|
|
1199
|
-
}
|
|
1200
|
-
|
|
1201
|
-
format: MeshFileFormat
|
|
1202
|
-
|
|
1203
|
-
stats: GeometryStats
|
|
1204
|
-
|
|
1205
|
-
// Geometry file formats supported by the P0 mesh loader
|
|
1206
|
-
MeshFileFormat: 'glb' | 'gltf' | 'mesh-buffer'
|
|
1207
|
-
|
|
1208
|
-
// Triangle quality and scalar mesh metrics used by P0 GeoSpec matchers
|
|
1209
|
-
// Remarks: Values are reported in the glTF document coordinate units.
|
|
1210
|
-
MeshQualityStats: {
|
|
1211
|
-
triangleCount: number;
|
|
1212
|
-
nonFiniteVertices: Array<{
|
|
1213
|
-
primitive: string;
|
|
1214
|
-
vertexIndex: number;
|
|
1215
|
-
position: [number, number, number];
|
|
1216
|
-
}>;
|
|
1217
|
-
degenerateTriangles: Array<{
|
|
1218
|
-
primitive: string;
|
|
1219
|
-
triangleIndex: number;
|
|
1220
|
-
area: number;
|
|
1221
|
-
center: [number, number, number];
|
|
1222
|
-
}>;
|
|
1223
|
-
duplicateFaces: Array<{
|
|
1224
|
-
primitive: string;
|
|
1225
|
-
triangleIndex: number;
|
|
1226
|
-
firstTriangleIndex: number;
|
|
1227
|
-
}>;
|
|
1228
|
-
triangles: MeshTriangle[];
|
|
1229
|
-
surfaceArea: number;
|
|
1230
|
-
signedVolume: number;
|
|
1231
|
-
centerOfMass?: Vec3;
|
|
1232
|
-
}
|
|
1233
|
-
|
|
1234
|
-
triangleCount: number
|
|
1235
|
-
|
|
1236
|
-
nonFiniteVertices: Array<{
|
|
1237
|
-
primitive: string;
|
|
1238
|
-
vertexIndex: number;
|
|
1239
|
-
position: [number, number, number];
|
|
1240
|
-
}>
|
|
1241
|
-
|
|
1242
|
-
degenerateTriangles: Array<{
|
|
1243
|
-
primitive: string;
|
|
1244
|
-
triangleIndex: number;
|
|
1245
|
-
area: number;
|
|
1246
|
-
center: [number, number, number];
|
|
1247
|
-
}>
|
|
1248
|
-
|
|
1249
|
-
duplicateFaces: Array<{
|
|
1250
|
-
primitive: string;
|
|
1251
|
-
triangleIndex: number;
|
|
1252
|
-
firstTriangleIndex: number;
|
|
1253
|
-
}>
|
|
1254
|
-
|
|
1255
|
-
triangles: MeshTriangle[]
|
|
1256
|
-
|
|
1257
|
-
surfaceArea: number
|
|
1258
|
-
|
|
1259
|
-
signedVolume: number
|
|
1260
|
-
|
|
1261
|
-
centerOfMass?: Vec3
|
|
1262
|
-
|
|
1263
|
-
// One triangle from mesh evidence, in geometry document coordinates
|
|
1264
|
-
MeshTriangle: {
|
|
1265
|
-
primitive: string;
|
|
1266
|
-
triangleIndex: number;
|
|
1267
|
-
a: [number, number, number];
|
|
1268
|
-
b: [number, number, number];
|
|
1269
|
-
c: [number, number, number];
|
|
1270
|
-
center: [number, number, number];
|
|
1271
|
-
area: number;
|
|
1272
|
-
}
|
|
1273
|
-
|
|
1274
|
-
primitive: string
|
|
1275
|
-
|
|
1276
|
-
triangleIndex: number
|
|
1277
|
-
|
|
1278
|
-
a: [number, number, number]
|
|
1279
|
-
|
|
1280
|
-
b: [number, number, number]
|
|
1281
|
-
|
|
1282
|
-
c: [number, number, number]
|
|
1283
|
-
|
|
1284
|
-
center: [number, number, number]
|
|
1285
|
-
|
|
1286
|
-
area: number
|
|
1287
|
-
|
|
1288
|
-
// STEP/XDE evidence extracted while loading a STEP subject
|
|
1289
|
-
StepEvidence: {
|
|
1290
|
-
schema?: string;
|
|
1291
|
-
unit?: GeoSpecUnit;
|
|
1292
|
-
productStructure?: Array<{
|
|
1293
|
-
name: string;
|
|
1294
|
-
path: string;
|
|
1295
|
-
transform?: number[];
|
|
1296
|
-
}>;
|
|
1297
|
-
readStrategy: {
|
|
1298
|
-
strategy: 'native-stream' | 'filesystem';
|
|
1299
|
-
inputKind: GeometrySource['kind'];
|
|
1300
|
-
bytesRead: number;
|
|
1301
|
-
nativeReadStream: boolean;
|
|
1302
|
-
copiedToEmscriptenFs: boolean;
|
|
1303
|
-
};
|
|
1304
|
-
capabilities: Array<{
|
|
1305
|
-
feature: string;
|
|
1306
|
-
supported: boolean;
|
|
1307
|
-
reason?: string;
|
|
1308
|
-
}>;
|
|
1309
|
-
/** Structured AP242 XDE read result (occurrences, subshape names, datum placements). */
|
|
1310
|
-
xde?: XdeReadResult;
|
|
1311
|
-
}
|
|
1312
|
-
|
|
1313
|
-
schema?: string
|
|
1314
|
-
|
|
1315
|
-
unit?: GeoSpecUnit
|
|
1316
|
-
|
|
1317
|
-
productStructure?: Array<{
|
|
1318
|
-
name: string;
|
|
1319
|
-
path: string;
|
|
1320
|
-
transform?: number[];
|
|
1321
|
-
}>
|
|
1322
|
-
|
|
1323
|
-
readStrategy: {
|
|
1324
|
-
strategy: 'native-stream' | 'filesystem';
|
|
1325
|
-
inputKind: GeometrySource['kind'];
|
|
1326
|
-
bytesRead: number;
|
|
1327
|
-
nativeReadStream: boolean;
|
|
1328
|
-
copiedToEmscriptenFs: boolean;
|
|
1329
|
-
}
|
|
1330
|
-
|
|
1331
|
-
capabilities: Array<{
|
|
1332
|
-
feature: string;
|
|
1333
|
-
supported: boolean;
|
|
1334
|
-
reason?: string;
|
|
1335
|
-
}>
|
|
1336
|
-
|
|
1337
|
-
// Structured AP242 XDE read result (occurrences, subshape names, datum placements)
|
|
1338
|
-
xde?: XdeReadResult
|
|
1339
|
-
|
|
1340
863
|
// Numeric 3D vector
|
|
1341
864
|
Vec3: readonly [number, number, number]
|
|
1342
865
|
|
|
@@ -1752,3 +1275,85 @@ LoadModelOptions: LoadModelSourceOptions | LoadModelCodeOptions<Code> | LoadMode
|
|
|
1752
1275
|
|
|
1753
1276
|
// Default work-unit budget for every claim on this subject
|
|
1754
1277
|
workUnitLimit?: number
|
|
1278
|
+
|
|
1279
|
+
// Direct geometry-source model load options
|
|
1280
|
+
LoadModelSourceOptions: {
|
|
1281
|
+
/** Geometry bytes, path, browser file/blob, or in-memory mesh buffer. */
|
|
1282
|
+
source: MeshSource | StepSource;
|
|
1283
|
+
/** Named external resources consumed alongside the direct geometry bytes. */
|
|
1284
|
+
resources?: ReadonlyArray<{
|
|
1285
|
+
readonly name: string;
|
|
1286
|
+
readonly source: MeshSource | StepSource;
|
|
1287
|
+
}>;
|
|
1288
|
+
/**
|
|
1289
|
+
* Project-relative folder a path `source` and each resource path resolve in. Omitted, they resolve against the
|
|
1290
|
+
* project root. Recorded in the load evidence.
|
|
1291
|
+
*/
|
|
1292
|
+
rootDir?: string;
|
|
1293
|
+
/** Source geometry format. Defaults to `glb`. */
|
|
1294
|
+
format?: GeoSpecModelFormat;
|
|
1295
|
+
/** Source path recorded in provenance. */
|
|
1296
|
+
path?: string;
|
|
1297
|
+
/** Human-readable source name recorded in provenance. */
|
|
1298
|
+
name?: string;
|
|
1299
|
+
/** Coordinate unit of raw GLB/glTF or mesh-buffer data before canonical millimetre normalization. */
|
|
1300
|
+
sourceUnit?: GeoSpecUnit;
|
|
1301
|
+
/** Explicit parameters recorded in provenance. */
|
|
1302
|
+
parameters?: Record<string, unknown>;
|
|
1303
|
+
/** STEP reader strategy used for STEP sources. */
|
|
1304
|
+
stepStreaming?: StepStreamingMode;
|
|
1305
|
+
/** Whether STEP loading should also produce mesh evidence. Defaults to true. */
|
|
1306
|
+
mesh?: boolean;
|
|
1307
|
+
/** Linear tolerance used while meshing exact BRep evidence. */
|
|
1308
|
+
meshLinearTolerance?: number;
|
|
1309
|
+
/** Angular tolerance in degrees used while meshing exact BRep evidence. */
|
|
1310
|
+
meshAngularToleranceDegrees?: number;
|
|
1311
|
+
/**
|
|
1312
|
+
* Default work-unit budget for every claim on this subject: a positive integer no greater than
|
|
1313
|
+
* the host's maximum (default `geoSpecMaximumWorkUnitLimit`, 512 000 000). `expectGeo(subject, { workUnitLimit })` overrides
|
|
1314
|
+
* it per chain. Recorded in the load evidence; it never changes the exported or admitted bytes.
|
|
1315
|
+
*/
|
|
1316
|
+
workUnitLimit?: number;
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
// Geometry bytes, path, browser file/blob, or in-memory mesh buffer
|
|
1320
|
+
source: MeshSource | StepSource
|
|
1321
|
+
|
|
1322
|
+
// Named external resources consumed alongside the direct geometry bytes
|
|
1323
|
+
resources?: ReadonlyArray<{
|
|
1324
|
+
readonly name: string;
|
|
1325
|
+
readonly source: MeshSource | StepSource;
|
|
1326
|
+
}>
|
|
1327
|
+
|
|
1328
|
+
// Project-relative folder a path `source` and each resource path resolve in
|
|
1329
|
+
rootDir?: string
|
|
1330
|
+
|
|
1331
|
+
// Source geometry format
|
|
1332
|
+
format?: GeoSpecModelFormat
|
|
1333
|
+
|
|
1334
|
+
// Source path recorded in provenance
|
|
1335
|
+
path?: string
|
|
1336
|
+
|
|
1337
|
+
// Human-readable source name recorded in provenance
|
|
1338
|
+
name?: string
|
|
1339
|
+
|
|
1340
|
+
// Coordinate unit of raw GLB/glTF or mesh-buffer data before canonical millimetre normalization
|
|
1341
|
+
sourceUnit?: GeoSpecUnit
|
|
1342
|
+
|
|
1343
|
+
// Explicit parameters recorded in provenance
|
|
1344
|
+
parameters?: Record<string, unknown>
|
|
1345
|
+
|
|
1346
|
+
// STEP reader strategy used for STEP sources
|
|
1347
|
+
stepStreaming?: StepStreamingMode
|
|
1348
|
+
|
|
1349
|
+
// Whether STEP loading should also produce mesh evidence
|
|
1350
|
+
mesh?: boolean
|
|
1351
|
+
|
|
1352
|
+
// Linear tolerance used while meshing exact BRep evidence
|
|
1353
|
+
meshLinearTolerance?: number
|
|
1354
|
+
|
|
1355
|
+
// Angular tolerance in degrees used while meshing exact BRep evidence
|
|
1356
|
+
meshAngularToleranceDegrees?: number
|
|
1357
|
+
|
|
1358
|
+
// Default work-unit budget for every claim on this subject
|
|
1359
|
+
workUnitLimit?: number
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# geospec — Functions
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
48 top-level symbols. Signatures are verbatim typescript.
|
|
4
4
|
|
|
5
5
|
// GeoSpec suite helper used inside VM-executed test modules
|
|
6
6
|
// describe (function)
|
|
@@ -129,6 +129,11 @@ export declare function runGeoSpecModule(options: RunGeoSpecModuleOptions): Prom
|
|
|
129
129
|
export declare function isGeoSpecTimeoutCode(code: string): code is GeoSpecTimeoutCode;
|
|
130
130
|
// code: Any diagnostic or issue code
|
|
131
131
|
|
|
132
|
+
// Create GeoSpec's default module VM
|
|
133
|
+
// createPlainModuleVm (function)
|
|
134
|
+
export declare function createPlainModuleVm(options: ModuleVmOptions): Promise<ModuleVm>;
|
|
135
|
+
// options: The project filesystem
|
|
136
|
+
|
|
132
137
|
// Compose compiled assertion and model bindings with the SDK's serial lifecycle
|
|
133
138
|
// createNativeGeoSpecRunner (function)
|
|
134
139
|
export declare function createNativeGeoSpecRunner(options: GeoSpecNativeRunnerOptions): GeoSpecRunner;
|
|
@@ -244,6 +249,21 @@ export declare function installGeoSpecVitest(client: GeoSpecAssertionClient): Ge
|
|
|
244
249
|
export declare function setupGeoSpecVitest(options: GeoSpecAssertionClientOptions): GeoSpecVitestAdapter;
|
|
245
250
|
// options: Flat native assertion-client options
|
|
246
251
|
|
|
252
|
+
// Configure GeoSpec for the active Vitest file from the project's `geospec.config.*`, the file the `geospec` CLI reads
|
|
253
|
+
// Remarks: Call it at the top level of a test file or a setup file and await it. Subjects are released, and an engine this call created is closed, after the file's tests.
|
|
254
|
+
// setupGeoSpecVitestProject (function)
|
|
255
|
+
export declare function setupGeoSpecVitestProject(options: SetupGeoSpecVitestProjectOptions): Promise<GeoSpecVitestProject>;
|
|
256
|
+
// options: Project root, config file, overrides and assertion-client options
|
|
257
|
+
// Example (A Vitest file over a project with a geospec.config.ts):
|
|
258
|
+
// import { expect, it } from 'vitest';
|
|
259
|
+
// import { setupGeoSpecVitestProject } from 'geospec/vitest/node';
|
|
260
|
+
//
|
|
261
|
+
// const geo = await setupGeoSpecVitestProject({ projectPath: import.meta.dirname });
|
|
262
|
+
//
|
|
263
|
+
// it('has the intended volume', async () => {
|
|
264
|
+
// await expect(await geo.loadModel({ file: 'part.step' })).toHaveVolume({ value: 1000, tolerance: 1 });
|
|
265
|
+
// });
|
|
266
|
+
|
|
247
267
|
// Type a `geospec.config.*` default export
|
|
248
268
|
// Remarks: An identity at runtime. The parameter is not generic, so an object literal gets the excess-property and contextual checks `satisfies GeoSpecConfig` gives, in `.ts` and `.js` alike.
|
|
249
269
|
// defineConfig (function)
|