typegpu 0.11.9 → 0.12.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/bin.mjs +28 -6
- package/builtin.d.ts +51 -53
- package/builtin.js +30 -34
- package/common/fullScreenTriangle.d.ts +2 -10
- package/common/fullScreenTriangle.js +20 -28
- package/common/index.d.ts +2 -9
- package/common/index.js +3 -12
- package/common/writeSoA.d.ts +11 -12
- package/common/writeSoA.js +88 -76
- package/core/buffer/buffer.d.ts +79 -62
- package/core/buffer/buffer.js +283 -205
- package/core/buffer/bufferBinding.d.ts +71 -0
- package/core/buffer/bufferBinding.js +154 -0
- package/core/buffer/bufferUsage.d.ts +14 -45
- package/core/buffer/bufferUsage.js +1 -171
- package/core/buffer/laidOutBuffer.d.ts +25 -0
- package/core/buffer/laidOutBuffer.js +55 -0
- package/core/commandEncoder/attachments.d.ts +125 -0
- package/core/commandEncoder/attachments.js +29 -0
- package/core/commandEncoder/commandEncoder.d.ts +53 -0
- package/core/commandEncoder/commandEncoder.js +56 -0
- package/core/commandEncoder/computePass.d.ts +58 -0
- package/core/commandEncoder/computePass.js +63 -0
- package/core/commandEncoder/renderPass.d.ts +121 -0
- package/core/commandEncoder/renderPass.js +196 -0
- package/core/constant/tgpuConstant.d.ts +26 -26
- package/core/constant/tgpuConstant.js +76 -65
- package/core/declare/tgpuDeclare.d.ts +3 -6
- package/core/declare/tgpuDeclare.js +36 -36
- package/core/function/autoIO.d.ts +61 -33
- package/core/function/autoIO.js +68 -73
- package/core/function/comptime.d.ts +11 -13
- package/core/function/comptime.js +60 -52
- package/core/function/createCallableSchema.d.ts +16 -0
- package/core/function/createCallableSchema.js +50 -40
- package/core/function/dualImpl.d.ts +44 -0
- package/core/function/dualImpl.js +71 -50
- package/core/function/entryInputRouter.d.ts +26 -0
- package/core/function/entryInputRouter.js +31 -33
- package/core/function/extractArgs.d.ts +38 -0
- package/core/function/extractArgs.js +202 -200
- package/core/function/fnCore.d.ts +44 -5
- package/core/function/fnCore.js +148 -93
- package/core/function/fnTypes.d.ts +31 -29
- package/core/function/fnTypes.js +1 -0
- package/core/function/ioSchema.d.ts +12 -10
- package/core/function/ioSchema.js +65 -47
- package/core/function/shelllessImpl.d.ts +9 -12
- package/core/function/shelllessImpl.js +17 -22
- package/core/function/templateUtils.d.ts +2 -0
- package/core/function/templateUtils.js +9 -8
- package/core/function/tgpuComputeFn.d.ts +26 -28
- package/core/function/tgpuComputeFn.js +47 -48
- package/core/function/tgpuFn.d.ts +34 -37
- package/core/function/tgpuFn.js +179 -153
- package/core/function/tgpuFragmentFn.d.ts +52 -53
- package/core/function/tgpuFragmentFn.js +63 -56
- package/core/function/tgpuVertexFn.d.ts +36 -39
- package/core/function/tgpuVertexFn.js +56 -53
- package/core/pipeline/computePipeline.d.ts +141 -53
- package/core/pipeline/computePipeline.js +291 -225
- package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
- package/core/pipeline/connectAttachmentToShader.js +25 -22
- package/core/pipeline/connectTargetsToShader.d.ts +3 -0
- package/core/pipeline/connectTargetsToShader.js +29 -27
- package/core/pipeline/drawState.d.ts +52 -0
- package/core/pipeline/drawState.js +225 -0
- package/core/pipeline/performanceTracker.d.ts +14 -0
- package/core/pipeline/performanceTracker.js +34 -0
- package/core/pipeline/pipelineUtils.d.ts +18 -0
- package/core/pipeline/pipelineUtils.js +54 -25
- package/core/pipeline/priors.d.ts +1 -0
- package/core/pipeline/priors.js +12 -0
- package/core/pipeline/renderPipeline.d.ts +246 -261
- package/core/pipeline/renderPipeline.js +487 -480
- package/core/pipeline/timeable.d.ts +28 -18
- package/core/pipeline/timeable.js +90 -52
- package/core/pipeline/typeGuards.d.ts +17 -0
- package/core/pipeline/typeGuards.js +52 -22
- package/core/pipeline/webgpuLimitations.d.ts +10 -0
- package/core/pipeline/webgpuLimitations.js +81 -0
- package/core/querySet/querySet.d.ts +26 -21
- package/core/querySet/querySet.js +127 -103
- package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
- package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +89 -90
- package/core/resolve/externals.d.ts +25 -8
- package/core/resolve/externals.js +78 -54
- package/core/resolve/namespace.d.ts +22 -25
- package/core/resolve/namespace.js +16 -21
- package/core/resolve/resolvableString.d.ts +7 -0
- package/core/resolve/resolvableString.js +13 -0
- package/core/resolve/resolveData.d.ts +10 -0
- package/core/resolve/resolveData.js +162 -121
- package/core/resolve/stitch.d.ts +8 -0
- package/core/resolve/stitch.js +23 -21
- package/core/resolve/tgpuResolve.d.ts +55 -53
- package/core/resolve/tgpuResolve.js +106 -53
- package/core/root/configurableImpl.d.ts +10 -0
- package/core/root/configurableImpl.js +17 -19
- package/core/root/init.d.ts +76 -38
- package/core/root/init.js +346 -455
- package/core/root/rootTypes.d.ts +461 -636
- package/core/root/rootTypes.js +1 -0
- package/core/sampler/sampler.d.ts +50 -31
- package/core/sampler/sampler.js +120 -113
- package/core/simulate/tgpuSimulate.d.ts +9 -12
- package/core/simulate/tgpuSimulate.js +68 -71
- package/core/slot/accessor.d.ts +36 -13
- package/core/slot/accessor.js +138 -91
- package/core/slot/internalSlots.d.ts +2 -0
- package/core/slot/internalSlots.js +1 -6
- package/core/slot/lazy.d.ts +2 -6
- package/core/slot/lazy.js +71 -39
- package/core/slot/slot.d.ts +2 -6
- package/core/slot/slot.js +45 -38
- package/core/slot/slotTypes.d.ts +78 -80
- package/core/slot/slotTypes.js +11 -16
- package/core/texture/externalTexture.d.ts +20 -11
- package/core/texture/externalTexture.js +46 -46
- package/core/texture/texture.d.ts +152 -97
- package/core/texture/texture.js +407 -314
- package/core/texture/textureFormats.d.ts +42 -23
- package/core/texture/textureFormats.js +104 -75
- package/core/texture/textureProps.d.ts +7 -10
- package/core/texture/textureProps.js +1 -0
- package/core/texture/textureUtils.d.ts +8 -0
- package/core/texture/textureUtils.js +185 -179
- package/core/texture/usageExtension.d.ts +21 -18
- package/core/texture/usageExtension.js +13 -17
- package/core/unroll/tgpuUnroll.d.ts +20 -19
- package/core/unroll/tgpuUnroll.js +82 -91
- package/core/valueProxyUtils.d.ts +3 -0
- package/core/valueProxyUtils.js +52 -41
- package/core/variable/tgpuVariable.d.ts +26 -27
- package/core/variable/tgpuVariable.js +93 -96
- package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
- package/core/vertexLayout/connectAttributesToShader.js +61 -56
- package/core/vertexLayout/vertexAttribute.d.ts +21 -17
- package/core/vertexLayout/vertexAttribute.js +1 -0
- package/core/vertexLayout/vertexLayout.d.ts +24 -18
- package/core/vertexLayout/vertexLayout.js +130 -99
- package/core/whitespaces.d.ts +2 -0
- package/core/whitespaces.js +16 -0
- package/data/alignIO.d.ts +7 -0
- package/data/alignIO.js +13 -13
- package/data/alignmentOf.d.ts +5 -8
- package/data/alignmentOf.js +90 -75
- package/data/array.d.ts +17 -9
- package/data/array.js +57 -40
- package/data/atomic.d.ts +2 -7
- package/data/atomic.js +26 -23
- package/data/attributes.d.ts +19 -21
- package/data/attributes.js +192 -132
- package/data/autoStruct.d.ts +36 -3
- package/data/autoStruct.js +84 -81
- package/data/compiledIO.d.ts +5 -0
- package/data/compiledIO.js +231 -215
- package/data/dataIO.d.ts +13 -11
- package/data/dataIO.js +643 -589
- package/data/dataTypes.d.ts +83 -65
- package/data/dataTypes.js +66 -68
- package/data/deepEqual.d.ts +2 -7
- package/data/deepEqual.js +80 -55
- package/data/disarray.d.ts +6 -10
- package/data/disarray.js +52 -46
- package/data/float16Conversion.d.ts +4 -0
- package/data/float16Conversion.js +7 -0
- package/data/generalizeFn.d.ts +25 -0
- package/data/generalizeFn.js +89 -0
- package/data/getLongestContiguousPrefix.d.ts +4 -8
- package/data/getLongestContiguousPrefix.js +6 -11
- package/data/index.d.ts +30 -31
- package/data/index.js +39 -172
- package/data/instanceToSchema.d.ts +24 -27
- package/data/instanceToSchema.js +1 -0
- package/data/isContiguous.d.ts +4 -8
- package/data/isContiguous.js +6 -11
- package/data/matrix.d.ts +21 -21
- package/data/matrix.js +513 -505
- package/data/numberOps.d.ts +5 -0
- package/data/numberOps.js +21 -21
- package/data/numeric.d.ts +21 -12
- package/data/numeric.js +287 -197
- package/data/offsetUtils.d.ts +9 -13
- package/data/offsetUtils.js +204 -144
- package/data/offsets.d.ts +8 -0
- package/data/offsets.js +33 -33
- package/data/partialIO.d.ts +13 -8
- package/data/partialIO.js +124 -113
- package/data/ptr.d.ts +12 -12
- package/data/ptr.js +42 -44
- package/data/ref.d.ts +40 -27
- package/data/ref.js +125 -95
- package/data/sampler.d.ts +99 -101
- package/data/sampler.js +17 -21
- package/data/schemaCallWrapper.d.ts +19 -0
- package/data/schemaCallWrapper.js +31 -26
- package/data/schemaMemoryLayout.d.ts +8 -0
- package/data/schemaMemoryLayout.js +213 -185
- package/data/sizeOf.d.ts +4 -8
- package/data/sizeOf.js +6 -11
- package/data/snippet.d.ts +96 -20
- package/data/snippet.js +75 -86
- package/data/struct.d.ts +4 -7
- package/data/struct.js +51 -39
- package/data/texture.d.ts +253 -250
- package/data/texture.js +238 -200
- package/data/unstruct.d.ts +2 -7
- package/data/unstruct.js +43 -37
- package/data/vector.d.ts +33 -21
- package/data/vector.js +234 -221
- package/data/vectorImpl.d.ts +231 -0
- package/data/vectorImpl.js +563 -515
- package/data/vectorOps.d.ts +25 -0
- package/data/vectorOps.js +118 -669
- package/data/vertexFormatData.d.ts +181 -184
- package/data/vertexFormatData.js +104 -106
- package/data/wgslTypes.d.ts +665 -600
- package/data/wgslTypes.js +220 -198
- package/errors.d.ts +50 -24
- package/errors.js +146 -126
- package/execMode.d.ts +16 -0
- package/execMode.js +47 -40
- package/extension.d.ts +13 -8
- package/extension.js +10 -16
- package/getGPUValue.d.ts +1 -0
- package/getGPUValue.js +2 -7
- package/index.d.ts +28 -68
- package/index.js +8 -28
- package/indexNamedExports.d.ts +69 -42
- package/indexNamedExports.js +25 -0
- package/internal.d.ts +16 -0
- package/internal.js +12 -0
- package/mathUtils.d.ts +5 -0
- package/mathUtils.js +7 -11
- package/memo.d.ts +11 -0
- package/memo.js +20 -22
- package/minify.d.ts +5 -0
- package/minify.js +93 -0
- package/nameUtils.d.ts +29 -0
- package/nameUtils.js +427 -394
- package/package.json +5 -1
- package/resolutionCtx.d.ts +162 -22
- package/resolutionCtx.js +911 -629
- package/serial/registry.d.ts +15 -0
- package/serial/registry.js +106 -0
- package/serial/restore.d.ts +49 -0
- package/serial/restore.js +68 -0
- package/serial/schema.d.ts +58 -0
- package/serial/schema.js +209 -0
- package/serial/types.d.ts +5 -0
- package/serial/types.js +1 -0
- package/shared/env.d.ts +9 -0
- package/shared/env.js +9 -12
- package/shared/generators.d.ts +4 -0
- package/shared/generators.js +10 -12
- package/shared/meta.d.ts +29 -14
- package/shared/meta.js +71 -55
- package/shared/normalizeMetadata.d.ts +32 -27
- package/shared/normalizeMetadata.js +23 -36
- package/shared/repr.d.ts +73 -55
- package/shared/repr.js +1 -0
- package/shared/soul.d.ts +17 -0
- package/shared/soul.js +1 -0
- package/shared/stringify.d.ts +2 -0
- package/shared/stringify.js +29 -20
- package/shared/symbols.d.ts +26 -20
- package/shared/symbols.js +79 -79
- package/shared/tseynit.d.ts +2 -0
- package/shared/tseynit.js +160 -75
- package/shared/utilityTypes.d.ts +30 -14
- package/shared/utilityTypes.js +2 -6
- package/shared/vertexFormat.d.ts +41 -43
- package/shared/vertexFormat.js +59 -62
- package/std/array.d.ts +2 -7
- package/std/array.js +18 -23
- package/std/atomic.d.ts +14 -18
- package/std/atomic.js +96 -95
- package/std/bitcast.d.ts +193 -10
- package/std/bitcast.js +309 -39
- package/std/boolean.d.ts +19 -33
- package/std/boolean.js +296 -292
- package/std/copy.d.ts +2 -7
- package/std/copy.js +27 -24
- package/std/derivative.d.ts +11 -15
- package/std/derivative.js +56 -79
- package/std/discard.d.ts +1 -6
- package/std/discard.js +7 -14
- package/std/environment.d.ts +19 -14
- package/std/environment.js +71 -51
- package/std/extensions.d.ts +2 -8
- package/std/extensions.js +10 -11
- package/std/index.d.ts +20 -24
- package/std/index.js +32 -187
- package/std/matrix.d.ts +6 -12
- package/std/matrix.js +60 -69
- package/std/numeric.d.ts +150 -146
- package/std/numeric.js +771 -727
- package/std/operators.d.ts +19 -27
- package/std/operators.js +195 -194
- package/std/packing.d.ts +5 -11
- package/std/packing.js +67 -75
- package/std/range.d.ts +6 -11
- package/std/range.js +48 -36
- package/std/subgroup.d.ts +33 -37
- package/std/subgroup.js +180 -217
- package/std/texture.d.ts +70 -38
- package/std/texture.js +176 -172
- package/taskQueue.d.ts +6 -0
- package/taskQueue.js +30 -0
- package/tgpu.d.ts +16 -0
- package/tgpu.js +17 -44
- package/tgpuBindGroupLayout.d.ts +132 -152
- package/tgpuBindGroupLayout.js +346 -268
- package/tgpuLogger.d.ts +34 -0
- package/tgpuLogger.js +64 -0
- package/tgpuUnstable.d.ts +16 -22
- package/tgpuUnstable.js +13 -35
- package/tgsl/accessIndex.d.ts +2 -0
- package/tgsl/accessIndex.js +76 -33
- package/tgsl/accessProp.d.ts +2 -0
- package/tgsl/accessProp.js +142 -101
- package/tgsl/accessStructProp.d.ts +5 -0
- package/tgsl/accessStructProp.js +13 -15
- package/tgsl/consoleLog/deserializers.d.ts +13 -0
- package/tgsl/consoleLog/deserializers.js +119 -103
- package/tgsl/consoleLog/logGenerator.d.ts +21 -0
- package/tgsl/consoleLog/logGenerator.js +85 -80
- package/tgsl/consoleLog/serializers.d.ts +21 -0
- package/tgsl/consoleLog/serializers.js +119 -100
- package/tgsl/consoleLog/types.d.ts +40 -39
- package/tgsl/consoleLog/types.js +1 -0
- package/tgsl/conversion.d.ts +33 -0
- package/tgsl/conversion.js +271 -216
- package/tgsl/forOfUtils.d.ts +15 -0
- package/tgsl/forOfUtils.js +85 -70
- package/tgsl/generationHelpers.d.ts +22 -39
- package/tgsl/generationHelpers.js +85 -58
- package/tgsl/infixDispatch.d.ts +70 -0
- package/tgsl/infixDispatch.js +48 -46
- package/tgsl/jsPolyfills.d.ts +16 -19
- package/tgsl/jsPolyfills.js +44 -42
- package/tgsl/makeDereferenceable.d.ts +48 -0
- package/tgsl/makeDereferenceable.js +86 -0
- package/tgsl/makeResolvable.d.ts +22 -0
- package/tgsl/makeResolvable.js +33 -0
- package/tgsl/shaderGenerator.d.ts +77 -17
- package/tgsl/shaderGenerator.js +1 -0
- package/tgsl/shellless.d.ts +6 -9
- package/tgsl/shellless.js +73 -43
- package/tgsl/wgslGenerator.d.ts +66 -59
- package/tgsl/wgslGenerator.js +1345 -760
- package/types.d.ts +287 -222
- package/types.js +61 -44
- package/unwrapper.d.ts +31 -26
- package/unwrapper.js +1 -0
- package/wgslExtensions.d.ts +3 -5
- package/wgslExtensions.js +12 -16
- package/_virtual/rolldown_runtime.js +0 -13
- package/core/buffer/bufferShorthand.d.ts +0 -50
- package/core/buffer/bufferShorthand.js +0 -55
- package/core/pipeline/applyPipelineState.js +0 -37
- package/core/pipeline/limitsOverflow.js +0 -13
- package/package.js +0 -5
- package/tgsl/shaderGenerator_members.d.ts +0 -33
- package/tgsl/shaderGenerator_members.js +0 -12
package/shared/symbols.d.ts
CHANGED
|
@@ -1,70 +1,76 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export declare const $internal: unique symbol;
|
|
2
|
+
/** A plain record of all definitional state of a resource, surviving transfer between runtimes */
|
|
3
|
+
export declare const $soul: unique symbol;
|
|
3
4
|
/**
|
|
4
5
|
* The getter to the value of this resource, accessible on the GPU
|
|
5
6
|
*/
|
|
6
|
-
declare const $gpuValueOf: unique symbol;
|
|
7
|
+
export declare const $gpuValueOf: unique symbol;
|
|
7
8
|
/**
|
|
8
9
|
* If this symbol is present, this means that getName and setName
|
|
9
10
|
* will refer to object behind this property instead.
|
|
10
11
|
*/
|
|
11
|
-
declare const $getNameForward: unique symbol;
|
|
12
|
+
export declare const $getNameForward: unique symbol;
|
|
12
13
|
/**
|
|
13
14
|
* Marks an object with slot-value bindings
|
|
14
15
|
*/
|
|
15
|
-
declare const $providing: unique symbol;
|
|
16
|
-
|
|
16
|
+
export declare const $providing: unique symbol;
|
|
17
|
+
/**
|
|
18
|
+
* Objects can provide the snippet that represents them.
|
|
19
|
+
*/
|
|
20
|
+
export declare const $ownSnippet: unique symbol;
|
|
21
|
+
export declare const $resolve: unique symbol;
|
|
17
22
|
/**
|
|
18
23
|
* A way for a schema to provide casting behavior, without the need to be explicitly
|
|
19
24
|
* callable by the end-user (e.g. vertex formats)
|
|
20
25
|
*/
|
|
21
|
-
declare const $cast: unique symbol;
|
|
26
|
+
export declare const $cast: unique symbol;
|
|
22
27
|
/**
|
|
23
28
|
* Can be called on the GPU
|
|
24
29
|
*/
|
|
25
|
-
declare const $gpuCallable: unique symbol;
|
|
30
|
+
export declare const $gpuCallable: unique symbol;
|
|
26
31
|
/**
|
|
27
32
|
* Type token for the inferred (CPU & GPU) representation of a resource
|
|
28
33
|
*/
|
|
29
|
-
declare const $repr: unique symbol;
|
|
34
|
+
export declare const $repr: unique symbol;
|
|
30
35
|
/**
|
|
31
36
|
* Type token for the inferred (GPU-side) representation of a resource
|
|
32
37
|
* If present, it shadows the value of `$repr` for GPU-side inference.
|
|
33
38
|
*/
|
|
34
|
-
declare const $gpuRepr: unique symbol;
|
|
39
|
+
export declare const $gpuRepr: unique symbol;
|
|
35
40
|
/**
|
|
36
41
|
* Type token for the inferred partial representation of a resource.
|
|
37
42
|
* If present, it shadows the value of `$repr` for use in partial IO.
|
|
38
43
|
*/
|
|
39
|
-
declare const $reprPartial: unique symbol;
|
|
44
|
+
export declare const $reprPartial: unique symbol;
|
|
40
45
|
/**
|
|
41
46
|
* Type token for the inferred patch representation of a resource.
|
|
42
47
|
* Used by the `buffer.patch` API with `Record<number, T>` sparse arrays.
|
|
43
48
|
*/
|
|
44
|
-
declare const $reprPatch: unique symbol;
|
|
49
|
+
export declare const $reprPatch: unique symbol;
|
|
45
50
|
/**
|
|
46
51
|
* Type token for the write-side (input) representation of a resource.
|
|
47
52
|
*/
|
|
48
|
-
declare const $inRepr: unique symbol;
|
|
53
|
+
export declare const $inRepr: unique symbol;
|
|
49
54
|
/**
|
|
50
55
|
* Type token holding schemas that are identical in memory layout.
|
|
51
56
|
*/
|
|
52
|
-
declare const $memIdent: unique symbol;
|
|
57
|
+
export declare const $memIdent: unique symbol;
|
|
53
58
|
/**
|
|
54
59
|
* Type token, signaling that a schema can be used in a storage buffer.
|
|
55
60
|
*/
|
|
56
|
-
declare const $validStorageSchema: unique symbol;
|
|
61
|
+
export declare const $validStorageSchema: unique symbol;
|
|
57
62
|
/**
|
|
58
63
|
* Type token, signaling that a schema can be used in a uniform buffer.
|
|
59
64
|
*/
|
|
60
|
-
declare const $validUniformSchema: unique symbol;
|
|
65
|
+
export declare const $validUniformSchema: unique symbol;
|
|
61
66
|
/**
|
|
62
67
|
* Type token, signaling that a schema can be used in a vertex buffer.
|
|
63
68
|
*/
|
|
64
|
-
declare const $validVertexSchema: unique symbol;
|
|
69
|
+
export declare const $validVertexSchema: unique symbol;
|
|
65
70
|
/**
|
|
66
71
|
* Type token, containing a reason for why the schema is invalid (if it is).
|
|
67
72
|
*/
|
|
68
|
-
declare const $invalidSchemaReason: unique symbol;
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
export declare const $invalidSchemaReason: unique symbol;
|
|
74
|
+
export declare function isMarkedInternal(value: unknown): value is {
|
|
75
|
+
[$internal]: Record<string, unknown> | true;
|
|
76
|
+
};
|
package/shared/symbols.js
CHANGED
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const $
|
|
5
|
-
/**
|
|
6
|
-
* The getter to the value of this resource, accessible on the GPU
|
|
7
|
-
*/
|
|
8
|
-
const $gpuValueOf = Symbol(`typegpu:${version}:$gpuValueOf`);
|
|
9
|
-
/**
|
|
10
|
-
* If this symbol is present, this means that getName and setName
|
|
11
|
-
* will refer to object behind this property instead.
|
|
12
|
-
*/
|
|
13
|
-
const $getNameForward = Symbol(`typegpu:${version}:$getNameForward`);
|
|
14
|
-
/**
|
|
15
|
-
* Marks an object with slot-value bindings
|
|
16
|
-
*/
|
|
17
|
-
const $providing = Symbol(`typegpu:${version}:$providing`);
|
|
18
|
-
/**
|
|
19
|
-
* Objects can provide the snippet that represents them.
|
|
20
|
-
*/
|
|
21
|
-
const $ownSnippet = Symbol(`typegpu:${version}:$ownSnippet`);
|
|
22
|
-
const $resolve = Symbol(`typegpu:${version}:$resolve`);
|
|
23
|
-
/**
|
|
24
|
-
* A way for a schema to provide casting behavior, without the need to be explicitly
|
|
25
|
-
* callable by the end-user (e.g. vertex formats)
|
|
26
|
-
*/
|
|
27
|
-
const $cast = Symbol(`typegpu:${version}:$cast`);
|
|
28
|
-
/**
|
|
29
|
-
* Can be called on the GPU
|
|
30
|
-
*/
|
|
31
|
-
const $gpuCallable = Symbol(`typegpu:${version}:$gpuCallable`);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
1
|
+
const version = "0.12.1";
|
|
2
|
+
export const $internal = Symbol(`typegpu:${version}:$internal`);
|
|
3
|
+
/** A plain record of all definitional state of a resource, surviving transfer between runtimes */
|
|
4
|
+
export const $soul = Symbol(`typegpu:${version}:$soul`);
|
|
5
|
+
/**
|
|
6
|
+
* The getter to the value of this resource, accessible on the GPU
|
|
7
|
+
*/
|
|
8
|
+
export const $gpuValueOf = Symbol(`typegpu:${version}:$gpuValueOf`);
|
|
9
|
+
/**
|
|
10
|
+
* If this symbol is present, this means that getName and setName
|
|
11
|
+
* will refer to object behind this property instead.
|
|
12
|
+
*/
|
|
13
|
+
export const $getNameForward = Symbol(`typegpu:${version}:$getNameForward`);
|
|
14
|
+
/**
|
|
15
|
+
* Marks an object with slot-value bindings
|
|
16
|
+
*/
|
|
17
|
+
export const $providing = Symbol(`typegpu:${version}:$providing`);
|
|
18
|
+
/**
|
|
19
|
+
* Objects can provide the snippet that represents them.
|
|
20
|
+
*/
|
|
21
|
+
export const $ownSnippet = Symbol(`typegpu:${version}:$ownSnippet`);
|
|
22
|
+
export const $resolve = Symbol(`typegpu:${version}:$resolve`);
|
|
23
|
+
/**
|
|
24
|
+
* A way for a schema to provide casting behavior, without the need to be explicitly
|
|
25
|
+
* callable by the end-user (e.g. vertex formats)
|
|
26
|
+
*/
|
|
27
|
+
export const $cast = Symbol(`typegpu:${version}:$cast`);
|
|
28
|
+
/**
|
|
29
|
+
* Can be called on the GPU
|
|
30
|
+
*/
|
|
31
|
+
export const $gpuCallable = Symbol(`typegpu:${version}:$gpuCallable`);
|
|
32
|
+
//
|
|
33
|
+
// Type tokens
|
|
34
|
+
//
|
|
35
|
+
/**
|
|
36
|
+
* Type token for the inferred (CPU & GPU) representation of a resource
|
|
37
|
+
*/
|
|
38
|
+
export const $repr = Symbol(`typegpu:${version}:$repr`);
|
|
39
|
+
/**
|
|
40
|
+
* Type token for the inferred (GPU-side) representation of a resource
|
|
41
|
+
* If present, it shadows the value of `$repr` for GPU-side inference.
|
|
42
|
+
*/
|
|
43
|
+
export const $gpuRepr = Symbol(`typegpu:${version}:$gpuRepr`);
|
|
44
|
+
/**
|
|
45
|
+
* Type token for the inferred partial representation of a resource.
|
|
46
|
+
* If present, it shadows the value of `$repr` for use in partial IO.
|
|
47
|
+
*/
|
|
48
|
+
export const $reprPartial = Symbol(`typegpu:${version}:$reprPartial`);
|
|
49
|
+
/**
|
|
50
|
+
* Type token for the inferred patch representation of a resource.
|
|
51
|
+
* Used by the `buffer.patch` API with `Record<number, T>` sparse arrays.
|
|
52
|
+
*/
|
|
53
|
+
export const $reprPatch = Symbol(`typegpu:${version}:$reprPatch`);
|
|
54
|
+
/**
|
|
55
|
+
* Type token for the write-side (input) representation of a resource.
|
|
56
|
+
*/
|
|
57
|
+
export const $inRepr = Symbol(`typegpu:${version}:$inRepr`);
|
|
58
|
+
/**
|
|
59
|
+
* Type token holding schemas that are identical in memory layout.
|
|
60
|
+
*/
|
|
61
|
+
export const $memIdent = Symbol(`typegpu:${version}:$memIdent`);
|
|
62
|
+
/**
|
|
63
|
+
* Type token, signaling that a schema can be used in a storage buffer.
|
|
64
|
+
*/
|
|
65
|
+
export const $validStorageSchema = Symbol(`typegpu:${version}:$invalidStorageSchema`);
|
|
66
|
+
/**
|
|
67
|
+
* Type token, signaling that a schema can be used in a uniform buffer.
|
|
68
|
+
*/
|
|
69
|
+
export const $validUniformSchema = Symbol(`typegpu:${version}:$validUniformSchema`);
|
|
70
|
+
/**
|
|
71
|
+
* Type token, signaling that a schema can be used in a vertex buffer.
|
|
72
|
+
*/
|
|
73
|
+
export const $validVertexSchema = Symbol(`typegpu:${version}:$validVertexSchema`);
|
|
74
|
+
/**
|
|
75
|
+
* Type token, containing a reason for why the schema is invalid (if it is).
|
|
76
|
+
*/
|
|
77
|
+
export const $invalidSchemaReason = Symbol(`typegpu:${version}:$invalidSchemaReason`);
|
|
78
|
+
export function isMarkedInternal(value) {
|
|
79
|
+
return !!value?.[$internal];
|
|
77
80
|
}
|
|
78
|
-
|
|
79
|
-
//#endregion
|
|
80
|
-
export { $cast, $getNameForward, $gpuCallable, $gpuValueOf, $internal, $ownSnippet, $providing, $repr, $resolve, isMarkedInternal };
|
package/shared/tseynit.js
CHANGED
|
@@ -1,90 +1,175 @@
|
|
|
1
|
-
import * as tinyest from
|
|
2
|
-
|
|
3
|
-
//#region src/shared/tseynit.ts
|
|
1
|
+
import * as tinyest from 'tinyest';
|
|
4
2
|
const { NodeTypeCatalog: NODE } = tinyest;
|
|
5
|
-
function stringifyNode(node) {
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
export function stringifyNode(node) {
|
|
4
|
+
if (isExpression(node)) {
|
|
5
|
+
return stringifyExpression(node, '');
|
|
6
|
+
}
|
|
7
|
+
return stringifyStatement(node, '');
|
|
8
8
|
}
|
|
9
9
|
function stringifyStatement(node, ident) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
10
|
+
if (isExpression(node)) {
|
|
11
|
+
return `${ident}${stringifyExpression(node, ident)};`;
|
|
12
|
+
}
|
|
13
|
+
if (node[0] === NODE.block) {
|
|
14
|
+
const statements = node[1].map((n) => stringifyStatement(n, ident + ' '));
|
|
15
|
+
return `{\n${statements.join('\n')}\n${ident}}`;
|
|
16
|
+
}
|
|
17
|
+
if (node[0] === NODE.return) {
|
|
18
|
+
const expr = node[1] === undefined ? '' : ` ${stringifyExpression(node[1], '')}`;
|
|
19
|
+
return `${ident}return${expr};`;
|
|
20
|
+
}
|
|
21
|
+
if (node[0] === NODE.if) {
|
|
22
|
+
const cond = stringifyExpression(node[1], ident);
|
|
23
|
+
const then = stringifyStatement(node[2], ident);
|
|
24
|
+
const base = `${ident}if (${cond}) ${then}`;
|
|
25
|
+
if (node[3] !== undefined) {
|
|
26
|
+
return `${base} else ${stringifyStatement(node[3], ident)}`;
|
|
27
|
+
}
|
|
28
|
+
return base;
|
|
29
|
+
}
|
|
30
|
+
if (node[0] === NODE.let) {
|
|
31
|
+
if (node[2] !== undefined) {
|
|
32
|
+
return `${ident}let ${node[1]} = ${stringifyExpression(node[2], ident)};`;
|
|
33
|
+
}
|
|
34
|
+
return `${ident}let ${node[1]};`;
|
|
35
|
+
}
|
|
36
|
+
if (node[0] === NODE.const) {
|
|
37
|
+
if (node[2] !== undefined) {
|
|
38
|
+
return `${ident}const ${node[1]} = ${stringifyExpression(node[2], ident)};`;
|
|
39
|
+
}
|
|
40
|
+
return `${ident}const ${node[1]};`;
|
|
41
|
+
}
|
|
42
|
+
if (node[0] === NODE.for) {
|
|
43
|
+
const init = node[1] ? stringifyStatement(node[1], '') : ';';
|
|
44
|
+
const cond = node[2] ? stringifyExpression(node[2], ident) : '';
|
|
45
|
+
const update = node[3] ? stringifyStatement(node[3], '') : '';
|
|
46
|
+
const body = stringifyStatement(node[4], ident);
|
|
47
|
+
return `${ident}for (${init} ${cond}; ${update.slice(0, -1) /* trim the ';' */}) ${body}`;
|
|
48
|
+
}
|
|
49
|
+
if (node[0] === NODE.while) {
|
|
50
|
+
const cond = stringifyExpression(node[1], ident);
|
|
51
|
+
const body = stringifyStatement(node[2], ident);
|
|
52
|
+
return `${ident}while (${cond}) ${body}`;
|
|
53
|
+
}
|
|
54
|
+
if (node[0] === NODE.continue) {
|
|
55
|
+
return `${ident}continue;`;
|
|
56
|
+
}
|
|
57
|
+
if (node[0] === NODE.break) {
|
|
58
|
+
return `${ident}break;`;
|
|
59
|
+
}
|
|
60
|
+
if (node[0] === NODE.forOf) {
|
|
61
|
+
const leftKind = node[1][0] === NODE.const ? 'const' : 'let';
|
|
62
|
+
const leftName = node[1][1];
|
|
63
|
+
const right = stringifyExpression(node[2], ident);
|
|
64
|
+
const body = stringifyStatement(node[3], ident);
|
|
65
|
+
return `${ident}for (${leftKind} ${leftName} of ${right}) ${body}`;
|
|
66
|
+
}
|
|
67
|
+
assertExhaustive(node);
|
|
38
68
|
}
|
|
39
69
|
function stringifyExpression(node, ident) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
70
|
+
if (typeof node === 'string') {
|
|
71
|
+
return node;
|
|
72
|
+
}
|
|
73
|
+
if (typeof node === 'boolean') {
|
|
74
|
+
return `${node}`;
|
|
75
|
+
}
|
|
76
|
+
if (node[0] === NODE.numericLiteral) {
|
|
77
|
+
return node[1];
|
|
78
|
+
}
|
|
79
|
+
if (node[0] === NODE.stringLiteral) {
|
|
80
|
+
return JSON.stringify(node[1]);
|
|
81
|
+
}
|
|
82
|
+
if (node[0] === NODE.arrayExpr) {
|
|
83
|
+
const elements = node[1].map((n) => stringifyExpression(n, ident));
|
|
84
|
+
return `[${elements.join(', ')}]`;
|
|
85
|
+
}
|
|
86
|
+
if (node[0] === NODE.binaryExpr) {
|
|
87
|
+
return `${wrapIfComplex(node[1], ident)} ${node[2]} ${wrapIfComplex(node[3], ident)}`;
|
|
88
|
+
}
|
|
89
|
+
if (node[0] === NODE.assignmentExpr) {
|
|
90
|
+
return `${stringifyExpression(node[1], ident)} ${node[2]} ${stringifyExpression(node[3], ident)}`;
|
|
91
|
+
}
|
|
92
|
+
if (node[0] === NODE.logicalExpr) {
|
|
93
|
+
return `${wrapIfComplex(node[1], ident)} ${node[2]} ${wrapIfComplex(node[3], ident)}`;
|
|
94
|
+
}
|
|
95
|
+
if (node[0] === NODE.unaryExpr) {
|
|
96
|
+
// Unary word operators like void, instanceof and delete require a space
|
|
97
|
+
const sep = node[1].length > 1 ? ' ' : '';
|
|
98
|
+
return `${node[1]}${sep}${wrapIfComplex(node[2], ident)}`;
|
|
99
|
+
}
|
|
100
|
+
if (node[0] === NODE.call) {
|
|
101
|
+
const callee = wrapIfComplex(node[1], ident);
|
|
102
|
+
const args = node[2].map((n) => stringifyExpression(n, ident)).join(', ');
|
|
103
|
+
return `${callee}(${args})`;
|
|
104
|
+
}
|
|
105
|
+
if (node[0] === NODE.memberAccess) {
|
|
106
|
+
if (Array.isArray(node[1]) && node[1][0] === NODE.numericLiteral) {
|
|
107
|
+
return `(${stringifyExpression(node[1], ident)}).${node[2]}`;
|
|
108
|
+
}
|
|
109
|
+
return `${wrapIfComplex(node[1], ident)}.${node[2]}`;
|
|
110
|
+
}
|
|
111
|
+
if (node[0] === NODE.indexAccess) {
|
|
112
|
+
return `${wrapIfComplex(node[1], ident)}[${stringifyExpression(node[2], ident)}]`;
|
|
113
|
+
}
|
|
114
|
+
if (node[0] === NODE.preUpdate) {
|
|
115
|
+
return `${node[1]}${wrapIfComplex(node[2], ident)}`;
|
|
116
|
+
}
|
|
117
|
+
if (node[0] === NODE.postUpdate) {
|
|
118
|
+
return `${wrapIfComplex(node[2], ident)}${node[1]}`;
|
|
119
|
+
}
|
|
120
|
+
if (node[0] === NODE.objectExpr) {
|
|
121
|
+
const entries = Object.entries(node[1]).map(([key, val]) => `${key}: ${stringifyExpression(val, ident)}`);
|
|
122
|
+
return `{ ${entries.join(', ')} }`;
|
|
123
|
+
}
|
|
124
|
+
if (node[0] === NODE.conditionalExpr) {
|
|
125
|
+
return `${wrapIfComplex(node[1], ident)} ? ${wrapIfComplex(node[2], ident)} : ${wrapIfComplex(node[3], ident)}`;
|
|
126
|
+
}
|
|
127
|
+
assertExhaustive(node);
|
|
63
128
|
}
|
|
64
129
|
function assertExhaustive(value) {
|
|
65
|
-
|
|
130
|
+
throw new Error(`'${JSON.stringify(value)}' was not handled by the stringify function.`);
|
|
66
131
|
}
|
|
67
132
|
function isExpression(node) {
|
|
68
|
-
|
|
69
|
-
|
|
133
|
+
if (typeof node === 'string' ||
|
|
134
|
+
typeof node === 'boolean' ||
|
|
135
|
+
node[0] === NODE.numericLiteral ||
|
|
136
|
+
node[0] === NODE.stringLiteral ||
|
|
137
|
+
node[0] === NODE.arrayExpr ||
|
|
138
|
+
node[0] === NODE.binaryExpr ||
|
|
139
|
+
node[0] === NODE.assignmentExpr ||
|
|
140
|
+
node[0] === NODE.logicalExpr ||
|
|
141
|
+
node[0] === NODE.unaryExpr ||
|
|
142
|
+
node[0] === NODE.call ||
|
|
143
|
+
node[0] === NODE.memberAccess ||
|
|
144
|
+
node[0] === NODE.indexAccess ||
|
|
145
|
+
node[0] === NODE.preUpdate ||
|
|
146
|
+
node[0] === NODE.postUpdate ||
|
|
147
|
+
node[0] === NODE.objectExpr ||
|
|
148
|
+
node[0] === NODE.conditionalExpr) {
|
|
149
|
+
node;
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
node;
|
|
153
|
+
return false;
|
|
70
154
|
}
|
|
71
155
|
const SIMPLE_NODES = [
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
156
|
+
NODE.memberAccess, // highest precedence
|
|
157
|
+
NODE.indexAccess, // highest precedence
|
|
158
|
+
NODE.call, // highest precedence
|
|
159
|
+
NODE.arrayExpr, // [] make things not ambiguous
|
|
160
|
+
NODE.stringLiteral,
|
|
161
|
+
NODE.numericLiteral,
|
|
78
162
|
];
|
|
79
163
|
/**
|
|
80
|
-
* Stringifies expression, and wraps it in parentheses if they cannot be trivially omitted
|
|
81
|
-
*/
|
|
164
|
+
* Stringifies expression, and wraps it in parentheses if they cannot be trivially omitted
|
|
165
|
+
*/
|
|
82
166
|
function wrapIfComplex(node, ident) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
167
|
+
const s = stringifyExpression(node, ident);
|
|
168
|
+
if (typeof node === 'string' || typeof node === 'boolean') {
|
|
169
|
+
return s;
|
|
170
|
+
}
|
|
171
|
+
if (SIMPLE_NODES.includes(node[0])) {
|
|
172
|
+
return s;
|
|
173
|
+
}
|
|
174
|
+
return `(${s})`;
|
|
87
175
|
}
|
|
88
|
-
|
|
89
|
-
//#endregion
|
|
90
|
-
export { stringifyNode };
|
package/shared/utilityTypes.d.ts
CHANGED
|
@@ -1,33 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
type
|
|
3
|
-
type
|
|
4
|
-
type
|
|
5
|
-
|
|
1
|
+
export type Default<T, TDefault> = unknown extends T ? TDefault : T extends undefined ? TDefault : T;
|
|
2
|
+
export type SwapNever<T, Replacement> = [T] extends [never] ? Replacement : T;
|
|
3
|
+
export type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
|
|
4
|
+
export type Prettify<T> = {
|
|
5
|
+
[K in keyof T]: T[K];
|
|
6
|
+
} & {};
|
|
6
7
|
/**
|
|
7
8
|
* Utility type that merges a partial type with defaults, where defaults are used
|
|
8
9
|
* for properties not present in the partial type.
|
|
9
10
|
*/
|
|
10
|
-
type WithDefaults<TPartial, TDefaults> = Omit<TDefaults, keyof TPartial> & TPartial;
|
|
11
|
+
export type WithDefaults<TPartial, TDefaults> = Omit<TDefaults, keyof TPartial> & TPartial;
|
|
11
12
|
/**
|
|
12
13
|
* Removes properties from record type that extend `Prop`
|
|
13
14
|
*/
|
|
14
|
-
type OmitProps<T extends Record<string, unknown>, Prop> = Pick<T, {
|
|
15
|
-
|
|
15
|
+
export type OmitProps<T extends Record<string, unknown>, Prop> = Pick<T, {
|
|
16
|
+
[Key in keyof T]: T[Key] extends Prop ? never : Key;
|
|
17
|
+
}[keyof T]>;
|
|
18
|
+
/**
|
|
19
|
+
* Removes properties from record type that equal `Prop`
|
|
20
|
+
*/
|
|
21
|
+
export type OmitPropsExact<T extends Record<string, unknown>, Prop> = Pick<T, {
|
|
22
|
+
[Key in keyof T]: [T[Key], Prop] extends [Prop, T[Key]] ? never : Key;
|
|
23
|
+
}[keyof T]>;
|
|
24
|
+
export type NullableToOptional<T> = {
|
|
25
|
+
[K in keyof T as T[K] extends null ? K : never]?: T[K];
|
|
26
|
+
} & {
|
|
27
|
+
[K in keyof T as T[K] extends null ? never : K]: T[K];
|
|
28
|
+
};
|
|
16
29
|
/**
|
|
17
30
|
* The opposite of Readonly<T>
|
|
18
31
|
*/
|
|
19
|
-
type Mutable<T> = {
|
|
32
|
+
export type Mutable<T> = {
|
|
33
|
+
-readonly [P in keyof T]: T[P];
|
|
34
|
+
};
|
|
20
35
|
/**
|
|
21
36
|
* Source: https://code.lol/post/programming/higher-kinded-types
|
|
22
37
|
*/
|
|
23
|
-
type Assume<T, U> = T extends U ? T : U;
|
|
38
|
+
export type Assume<T, U> = T extends U ? T : U;
|
|
24
39
|
/**
|
|
25
40
|
* Any typed array
|
|
26
41
|
*/
|
|
27
|
-
type TypedArray = Uint8Array | Uint16Array | Uint32Array | Int32Array | Float32Array | Float64Array;
|
|
42
|
+
export type TypedArray = Uint8Array | Uint16Array | Uint32Array | Int32Array | Float32Array | Float64Array;
|
|
43
|
+
export declare function assertExhaustive(x: never, location: string): never;
|
|
28
44
|
/**
|
|
29
45
|
* Source: https://futurestud.io/tutorials/typescript-how-to-remove-index-signature-from-a-type
|
|
30
46
|
*/
|
|
31
|
-
type RemoveIndexSignature<T> = {
|
|
32
|
-
|
|
33
|
-
|
|
47
|
+
export type RemoveIndexSignature<T> = {
|
|
48
|
+
[K in keyof T as string extends K ? never : number extends K ? never : symbol extends K ? never : K]: T[K];
|
|
49
|
+
};
|
package/shared/utilityTypes.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
throw new Error(`Failed to handle ${x} at ${location}`);
|
|
1
|
+
export function assertExhaustive(x, location) {
|
|
2
|
+
throw new Error(`Failed to handle ${x} at ${location}`);
|
|
4
3
|
}
|
|
5
|
-
|
|
6
|
-
//#endregion
|
|
7
|
-
export { assertExhaustive };
|