Skip to content

feat: Expand property access in externals#2425

Draft
aleksanderkatan wants to merge 72 commits into
mainfrom
feat/expand-property-access-in-externals
Draft

feat: Expand property access in externals#2425
aleksanderkatan wants to merge 72 commits into
mainfrom
feat/expand-property-access-in-externals

Conversation

@aleksanderkatan

@aleksanderkatan aleksanderkatan commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

See the new doc for description on how now externals work.

The cut-off at '.$' actually changes some behavior: with .$ in externals, number slots resolve to abstract numbers instead of concrete.

@aleksanderkatan aleksanderkatan linked an issue Apr 29, 2026 that may be closed by this pull request
@github-actions

github-actions Bot commented Apr 29, 2026

Copy link
Copy Markdown

pkg.pr.new

packages
Ready to be installed by your favorite package manager ⬇️

https://pkg.pr.new/software-mansion/TypeGPU/typegpu@f30d34439312e4246e2c6774649457d98bfdf05b
https://pkg.pr.new/software-mansion/TypeGPU/@typegpu/cli@f30d34439312e4246e2c6774649457d98bfdf05b
https://pkg.pr.new/software-mansion/TypeGPU/@typegpu/noise@f30d34439312e4246e2c6774649457d98bfdf05b
https://pkg.pr.new/software-mansion/TypeGPU/@typegpu/react@f30d34439312e4246e2c6774649457d98bfdf05b
https://pkg.pr.new/software-mansion/TypeGPU/unplugin-typegpu@f30d34439312e4246e2c6774649457d98bfdf05b

benchmark
view benchmark

commit
view commit

@github-actions

github-actions Bot commented Apr 29, 2026

Copy link
Copy Markdown

Bundle size comparison (import * as ... in PR vs import * as ... in target):

🟢 Decreased ➖ Unchanged 🔴 Increased ❔ Unknown
24 296 0 0

import * as ... in PR vs import * as ... in target (did bundle size increase?):

Test tsdown
STATIC_useGpuFunction.ts 276 B ($${\color{green}-2.1\%}$$)

import { ... } in PR vs import * as ... in PR (is the library tree-Shakeable?):

Click to reveal the results table (297 entries).
Test tsdown
d_Void.ts 87.40 kB ($${\color{red}+12093.7\%}$$)
d_sampler.ts 87.41 kB ($${\color{red}+11962.7\%}$$)
d_isPtr.ts 87.41 kB ($${\color{red}+11802.0\%}$$)
d_comparisonSampler.ts 87.42 kB ($${\color{red}+11787.8\%}$$)
d_isSizeAttrib.ts 87.41 kB ($${\color{red}+11771.4\%}$$)
d_isWgslArray.ts 87.41 kB ($${\color{red}+11771.2\%}$$)
d_isAlignAttrib.ts 87.41 kB ($${\color{red}+11755.8\%}$$)
d_isWgslStruct.ts 87.41 kB ($${\color{red}+11755.6\%}$$)
d_isAtomic.ts 87.41 kB ($${\color{red}+11755.1\%}$$)
d_isBuiltinAttrib.ts 87.42 kB ($${\color{red}+11724.7\%}$$)
d_isLocationAttrib.ts 87.42 kB ($${\color{red}+11709.2\%}$$)
d_isDecorated.ts 87.41 kB ($${\color{red}+11708.6\%}$$)
d_isInterpolateAttrib.ts 87.42 kB ($${\color{red}+11663.1\%}$$)
d_atomic.ts 87.41 kB ($${\color{red}+11389.6\%}$$)
d_ptrHandle.ts 87.41 kB ($${\color{red}+10417.9\%}$$)
d_ptrUniform.ts 87.41 kB ($${\color{red}+10405.6\%}$$)
d_ptrStorage.ts 87.41 kB ($${\color{red}+10356.5\%}$$)
d_ptrPrivate.ts 87.41 kB ($${\color{red}+10332.2\%}$$)
d_ptrFn.ts 87.41 kB ($${\color{red}+10319.4\%}$$)
d_ptrWorkgroup.ts 87.41 kB ($${\color{red}+10308.1\%}$$)
d_textureExternal.ts 87.42 kB ($${\color{red}+10153.5\%}$$)
d_textureStorage1d.ts 87.42 kB ($${\color{red}+8532.0\%}$$)
d_textureStorage2d.ts 87.42 kB ($${\color{red}+8532.0\%}$$)
d_textureStorage3d.ts 87.42 kB ($${\color{red}+8532.0\%}$$)
d_textureStorage2dArray.ts 87.42 kB ($${\color{red}+8385.2\%}$$)
d_isDisarray.ts 87.41 kB ($${\color{red}+7758.5\%}$$)
d_isUnstruct.ts 87.41 kB ($${\color{red}+7758.5\%}$$)
d_isLooseDecorated.ts 87.42 kB ($${\color{red}+7711.0\%}$$)
d_isLooseData.ts 87.41 kB ($${\color{red}+7447.1\%}$$)
d_isWgslData.ts 87.41 kB ($${\color{red}+6569.7\%}$$)
d_unstruct.ts 87.41 kB ($${\color{red}+5547.1\%}$$)
d_isData.ts 87.41 kB ($${\color{red}+4735.4\%}$$)
d_deepEqual.ts 87.41 kB ($${\color{red}+3886.9\%}$$)
d_struct.ts 87.41 kB ($${\color{red}+2324.9\%}$$)
d_ref.ts 87.40 kB ($${\color{red}+1725.4\%}$$)
std_discard.ts 103.14 kB ($${\color{red}+624.7\%}$$)
std_copy.ts 103.13 kB ($${\color{red}+612.6\%}$$)
std_arrayLength.ts 103.14 kB ($${\color{red}+612.4\%}$$)
std_isBeingTranspiled.ts 103.15 kB ($${\color{red}+610.8\%}$$)
std_getTargetShaderLanguage.ts 103.15 kB ($${\color{red}+607.7\%}$$)
std_extensionEnabled.ts 103.15 kB ($${\color{red}+605.2\%}$$)
std_range.ts 103.13 kB ($${\color{red}+592.4\%}$$)
std_dpdx.ts 103.13 kB ($${\color{red}+584.1\%}$$)
std_fwidthCoarse.ts 103.14 kB ($${\color{red}+583.9\%}$$)
std_dpdxCoarse.ts 103.14 kB ($${\color{red}+583.9\%}$$)
std_dpdyCoarse.ts 103.14 kB ($${\color{red}+583.9\%}$$)
std_fwidthFine.ts 103.14 kB ($${\color{red}+583.9\%}$$)
std_dpdxFine.ts 103.14 kB ($${\color{red}+583.9\%}$$)
std_dpdyFine.ts 103.14 kB ($${\color{red}+583.9\%}$$)
std_fwidth.ts 103.14 kB ($${\color{red}+583.9\%}$$)
std_dpdy.ts 103.13 kB ($${\color{red}+583.9\%}$$)
d_bool.ts 87.40 kB ($${\color{red}+571.4\%}$$)
d_f16.ts 87.40 kB ($${\color{red}+571.4\%}$$)
d_f32.ts 87.40 kB ($${\color{red}+571.4\%}$$)
d_i32.ts 87.40 kB ($${\color{red}+571.4\%}$$)
d_u32.ts 87.40 kB ($${\color{red}+571.4\%}$$)
d_u16.ts 87.40 kB ($${\color{red}+570.2\%}$$)
std_atomicLoad.ts 103.14 kB ($${\color{red}+551.5\%}$$)
std_textureBarrier.ts 103.14 kB ($${\color{red}+551.2\%}$$)
std_atomicStore.ts 103.14 kB ($${\color{red}+551.2\%}$$)
std_workgroupBarrier.ts 103.15 kB ($${\color{red}+551.0\%}$$)
std_storageBarrier.ts 103.14 kB ($${\color{red}+551.0\%}$$)
std_atomicAdd.ts 103.14 kB ($${\color{red}+551.0\%}$$)
std_atomicAnd.ts 103.14 kB ($${\color{red}+551.0\%}$$)
std_atomicMax.ts 103.14 kB ($${\color{red}+551.0\%}$$)
std_atomicMin.ts 103.14 kB ($${\color{red}+551.0\%}$$)
std_atomicSub.ts 103.14 kB ($${\color{red}+551.0\%}$$)
std_atomicXor.ts 103.14 kB ($${\color{red}+551.0\%}$$)
std_atomicOr.ts 103.14 kB ($${\color{red}+551.0\%}$$)
d_textureDepth2d.ts 87.41 kB ($${\color{red}+549.3\%}$$)
d_textureDepthCube.ts 87.42 kB ($${\color{red}+549.1\%}$$)
d_texture1d.ts 87.41 kB ($${\color{red}+548.8\%}$$)
d_texture2d.ts 87.41 kB ($${\color{red}+548.8\%}$$)
d_texture3d.ts 87.41 kB ($${\color{red}+548.8\%}$$)
d_textureDepth2dArray.ts 87.42 kB ($${\color{red}+548.5\%}$$)
d_textureCube.ts 87.41 kB ($${\color{red}+548.5\%}$$)
d_textureDepthCubeArray.ts 87.42 kB ($${\color{red}+548.3\%}$$)
d_textureDepthMultisampled2d.ts 87.43 kB ($${\color{red}+548.2\%}$$)
d_texture2dArray.ts 87.41 kB ($${\color{red}+548.0\%}$$)
d_textureCubeArray.ts 87.42 kB ($${\color{red}+547.7\%}$$)
d_textureMultisampled2d.ts 87.42 kB ($${\color{red}+547.7\%}$$)
d_disarrayOf.ts 87.41 kB ($${\color{red}+480.3\%}$$)
d_vec2b.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec2f.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec2h.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec2i.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec2u.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec3b.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec3f.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec3h.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec3i.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec3u.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec4b.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec4f.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec4h.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec4i.ts 87.41 kB ($${\color{red}+349.4\%}$$)
d_vec4u.ts 87.41 kB ($${\color{red}+349.4\%}$$)
std_subgroupAdd.ts 103.14 kB ($${\color{red}+329.3\%}$$)
std_subgroupBroadcastFirst.ts 103.15 kB ($${\color{red}+329.2\%}$$)
std_subgroupExclusiveAdd.ts 103.15 kB ($${\color{red}+329.2\%}$$)
std_subgroupExclusiveMul.ts 103.15 kB ($${\color{red}+329.2\%}$$)
std_subgroupInclusiveAdd.ts 103.15 kB ($${\color{red}+329.2\%}$$)
std_subgroupInclusiveMul.ts 103.15 kB ($${\color{red}+329.2\%}$$)
std_subgroupShuffleDown.ts 103.15 kB ($${\color{red}+329.2\%}$$)
std_subgroupShuffleXor.ts 103.15 kB ($${\color{red}+329.2\%}$$)
std_subgroupBroadcast.ts 103.15 kB ($${\color{red}+329.2\%}$$)
std_subgroupShuffleUp.ts 103.15 kB ($${\color{red}+329.2\%}$$)
std_subgroupShuffle.ts 103.14 kB ($${\color{red}+329.2\%}$$)
std_subgroupBallot.ts 103.14 kB ($${\color{red}+329.2\%}$$)
std_subgroupElect.ts 103.14 kB ($${\color{red}+329.2\%}$$)
std_subgroupAll.ts 103.14 kB ($${\color{red}+329.2\%}$$)
std_subgroupAnd.ts 103.14 kB ($${\color{red}+329.2\%}$$)
std_subgroupAny.ts 103.14 kB ($${\color{red}+329.2\%}$$)
std_subgroupMax.ts 103.14 kB ($${\color{red}+329.2\%}$$)
std_subgroupMin.ts 103.14 kB ($${\color{red}+329.2\%}$$)
std_subgroupMul.ts 103.14 kB ($${\color{red}+329.2\%}$$)
std_subgroupXor.ts 103.14 kB ($${\color{red}+329.2\%}$$)
std_subgroupOr.ts 103.14 kB ($${\color{red}+329.2\%}$$)
d_formatToWGSLType.ts 87.42 kB ($${\color{red}+317.4\%}$$)
d_uint8.ts 87.41 kB ($${\color{red}+317.3\%}$$)
d_unorm10_10_10_2.ts 87.42 kB ($${\color{red}+317.3\%}$$)
d_unorm8x4_bgra.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_float16x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_float16x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_float32x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_float32x3.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_float32x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_snorm16x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_snorm16x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_unorm16x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_unorm16x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_sint16x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_sint16x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_sint32x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_sint32x3.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_sint32x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_snorm8x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_snorm8x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_uint16x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_uint16x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_uint32x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_uint32x3.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_uint32x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_unorm8x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_unorm8x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_float16.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_float32.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_sint8x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_sint8x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_snorm16.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_uint8x2.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_uint8x4.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_unorm16.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_sint16.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_sint32.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_snorm8.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_uint16.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_uint32.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_unorm8.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_sint8.ts 87.41 kB ($${\color{red}+317.2\%}$$)
d_packedFormats.ts 87.41 kB ($${\color{red}+316.9\%}$$)
d_isPackedData.ts 87.41 kB ($${\color{red}+316.0\%}$$)
std_textureDimensions.ts 103.15 kB ($${\color{red}+300.1\%}$$)
std_textureGather.ts 103.14 kB ($${\color{red}+300.0\%}$$)
std_textureSampleBaseClampToEdge.ts 103.16 kB ($${\color{red}+300.0\%}$$)
std_textureSampleCompareLevel.ts 103.15 kB ($${\color{red}+300.0\%}$$)
std_textureSampleCompare.ts 103.15 kB ($${\color{red}+300.0\%}$$)
std_textureSampleLevel.ts 103.15 kB ($${\color{red}+300.0\%}$$)
std_textureSampleBias.ts 103.15 kB ($${\color{red}+300.0\%}$$)
std_textureSampleGrad.ts 103.15 kB ($${\color{red}+300.0\%}$$)
std_textureSample.ts 103.14 kB ($${\color{red}+299.9\%}$$)
std_textureStore.ts 103.14 kB ($${\color{red}+299.9\%}$$)
std_textureLoad.ts 103.14 kB ($${\color{red}+299.9\%}$$)
d_alignmentOf.ts 87.41 kB ($${\color{red}+299.2\%}$$)
std_translation4.ts 103.14 kB ($${\color{red}+281.5\%}$$)
std_rotationX4.ts 103.14 kB ($${\color{red}+281.5\%}$$)
std_rotationY4.ts 103.14 kB ($${\color{red}+281.5\%}$$)
std_rotationZ4.ts 103.14 kB ($${\color{red}+281.5\%}$$)
std_identity2.ts 103.14 kB ($${\color{red}+281.5\%}$$)
std_identity3.ts 103.14 kB ($${\color{red}+281.5\%}$$)
std_identity4.ts 103.14 kB ($${\color{red}+281.5\%}$$)
std_scaling4.ts 103.14 kB ($${\color{red}+281.5\%}$$)
d_isBuiltin.ts 87.41 kB ($${\color{red}+255.1\%}$$)
d_sizeOf.ts 87.41 kB ($${\color{red}+254.3\%}$$)
d_isContiguous.ts 87.41 kB ($${\color{red}+254.3\%}$$)
d_getLongestContiguousPrefix.ts 87.43 kB ($${\color{red}+254.2\%}$$)
d_arrayOf.ts 87.41 kB ($${\color{red}+233.4\%}$$)
d_size.ts 87.40 kB ($${\color{red}+231.6\%}$$)
d_align.ts 87.41 kB ($${\color{red}+231.6\%}$$)
d_location.ts 87.41 kB ($${\color{red}+231.6\%}$$)
d_interpolate.ts 87.41 kB ($${\color{red}+231.6\%}$$)
d_invariant.ts 87.41 kB ($${\color{red}+227.0\%}$$)
d_mat4x4f.ts 87.41 kB ($${\color{red}+223.3\%}$$)
d_mat2x2f.ts 87.41 kB ($${\color{red}+223.3\%}$$)
d_mat3x3f.ts 87.41 kB ($${\color{red}+223.3\%}$$)
d_matToArray.ts 87.41 kB ($${\color{red}+221.8\%}$$)
d_builtin.ts 87.41 kB ($${\color{red}+204.8\%}$$)
std_unpack2x16float.ts 103.14 kB ($${\color{red}+186.6\%}$$)
std_unpack4x8unorm.ts 103.14 kB ($${\color{red}+186.6\%}$$)
std_pack2x16float.ts 103.14 kB ($${\color{red}+186.6\%}$$)
std_pack4x8unorm.ts 103.14 kB ($${\color{red}+186.6\%}$$)
std_bitcastU32toF32.ts 103.14 kB ($${\color{red}+133.2\%}$$)
std_bitcastU32toI32.ts 103.14 kB ($${\color{red}+133.2\%}$$)
std_neg.ts 103.13 kB ($${\color{red}+113.1\%}$$)
std_bitShiftRight.ts 103.14 kB ($${\color{red}+113.1\%}$$)
std_bitShiftLeft.ts 103.14 kB ($${\color{red}+113.1\%}$$)
std_add.ts 103.13 kB ($${\color{red}+113.0\%}$$)
std_div.ts 103.13 kB ($${\color{red}+113.0\%}$$)
std_mod.ts 103.13 kB ($${\color{red}+113.0\%}$$)
std_mul.ts 103.13 kB ($${\color{red}+113.0\%}$$)
std_sub.ts 103.13 kB ($${\color{red}+113.0\%}$$)
std_translate4.ts 103.14 kB ($${\color{red}+109.8\%}$$)
std_rotateX4.ts 103.14 kB ($${\color{red}+109.8\%}$$)
std_scale4.ts 103.14 kB ($${\color{red}+109.8\%}$$)
std_rotateY4.ts 103.14 kB ($${\color{red}+109.7\%}$$)
std_rotateZ4.ts 103.14 kB ($${\color{red}+109.7\%}$$)
d_memoryLayoutOf.ts 87.41 kB ($${\color{red}+108.2\%}$$)
std_and.ts 103.13 kB ($${\color{red}+99.2\%}$$)
std_or.ts 103.13 kB ($${\color{red}+99.2\%}$$)
std_select.ts 103.14 kB ($${\color{red}+99.2\%}$$)
std_allEq.ts 103.13 kB ($${\color{red}+99.2\%}$$)
std_all.ts 103.13 kB ($${\color{red}+99.2\%}$$)
std_not.ts 103.13 kB ($${\color{red}+99.2\%}$$)
std_eq.ts 103.13 kB ($${\color{red}+99.2\%}$$)
std_lt.ts 103.13 kB ($${\color{red}+99.2\%}$$)
std_ne.ts 103.13 kB ($${\color{red}+99.2\%}$$)
std_isCloseTo.ts 103.14 kB ($${\color{red}+99.1\%}$$)
std_any.ts 103.13 kB ($${\color{red}+99.1\%}$$)
std_ge.ts 103.13 kB ($${\color{red}+99.1\%}$$)
std_gt.ts 103.13 kB ($${\color{red}+99.1\%}$$)
std_le.ts 103.13 kB ($${\color{red}+99.1\%}$$)
std_dot4U8Packed.ts 103.14 kB ($${\color{red}+56.2\%}$$)
std_length.ts 103.14 kB ($${\color{red}+56.2\%}$$)
std_countTrailingZeros.ts 103.15 kB ($${\color{red}+56.2\%}$$)
std_distance.ts 103.14 kB ($${\color{red}+56.2\%}$$)
std_dot.ts 103.13 kB ($${\color{red}+56.2\%}$$)
std_countLeadingZeros.ts 103.15 kB ($${\color{red}+56.2\%}$$)
std_firstTrailingBit.ts 103.15 kB ($${\color{red}+56.1\%}$$)
std_firstLeadingBit.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_fract.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_frexp.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_modf.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_quantizeToF16.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_mix.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_countOneBits.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_dot4I8Packed.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_determinant.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_extractBits.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_faceForward.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_inverseSqrt.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_reverseBits.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_insertBits.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_smoothstep.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_normalize.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_transpose.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_saturate.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_degrees.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_radians.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_reflect.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_refract.ts 103.14 kB ($${\color{red}+56.1\%}$$)
std_acosh.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_asinh.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_atan2.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_atanh.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_clamp.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_cross.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_floor.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_ldexp.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_round.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_trunc.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_acos.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_asin.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_atan.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_ceil.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_cosh.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_exp2.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_log2.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_sign.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_sinh.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_sqrt.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_step.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_tanh.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_abs.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_cos.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_exp.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_fma.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_log.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_max.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_min.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_pow.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_sin.ts 103.13 kB ($${\color{red}+56.1\%}$$)
std_tan.ts 103.13 kB ($${\color{red}+56.1\%}$$)
common_fullScreenTriangle.ts 57.15 kB ($${\color{red}+41.5\%}$$)
common_writeSoA.ts 57.14 kB ($${\color{red}+38.5\%}$$)
STATIC_allImports.ts 287.19 kB ($${\color{green}-1.7\%}$$)
STATIC_d.ts 87.40 kB ($${\color{green}-2.6\%}$$)
STATIC_std.ts 103.13 kB ($${\color{green}-2.7\%}$$)

If you wish to run a comparison for other, slower bundlers, run the 'Tree-shake test' from the GitHub Actions menu.

@github-actions

github-actions Bot commented Apr 29, 2026

Copy link
Copy Markdown

Resolution Time Benchmark

---
config:
  themeVariables:
    xyChart:
      plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
  title "Random Branching (🔴 PR | 🔵 main | 🟢 release)"
  x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
  y-axis "time (ms)"
  line [0.96, 1.98, 4.61, 6.82, 7.52, 12.30, 23.30, 26.43]
  line [0.90, 1.95, 4.51, 6.62, 7.61, 13.01, 24.17, 26.29]
  line [0.91, 1.87, 4.33, 6.59, 7.85, 11.50, 23.93, 22.99]
Loading
---
config:
  themeVariables:
    xyChart:
      plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
  title "Linear Recursion (🔴 PR | 🔵 main | 🟢 release)"
  x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
  y-axis "time (ms)"
  line [0.33, 0.57, 0.75, 0.90, 1.20, 1.27, 1.53, 1.61]
  line [0.36, 0.52, 0.71, 0.92, 1.28, 1.25, 1.46, 1.55]
  line [0.34, 0.54, 0.72, 0.96, 1.22, 1.28, 1.52, 1.68]
Loading
---
config:
  themeVariables:
    xyChart:
      plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
  title "Full Tree (🔴 PR | 🔵 main | 🟢 release)"
  x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
  y-axis "time (ms)"
  line [0.83, 2.27, 4.32, 7.25, 12.96, 26.02, 57.41, 115.98]
  line [0.88, 2.17, 4.03, 6.51, 12.78, 27.43, 57.39, 116.95]
  line [1.06, 2.16, 4.45, 7.06, 13.26, 27.80, 58.51, 118.51]
Loading

@aleksanderkatan aleksanderkatan force-pushed the feat/expand-property-access-in-externals branch from e29acd4 to d6e4f7e Compare May 28, 2026 11:47
@aleksanderkatan aleksanderkatan requested a review from Copilot June 8, 2026 09:52
@aleksanderkatan aleksanderkatan changed the base branch from main to fix/forbid-multiple-uses June 22, 2026 13:18
@aleksanderkatan aleksanderkatan force-pushed the feat/expand-property-access-in-externals branch from 12cd661 to f8d8ed4 Compare June 22, 2026 14:34
Base automatically changed from fix/forbid-multiple-uses to main June 25, 2026 15:54
@aleksanderkatan

Copy link
Copy Markdown
Contributor Author

@pullfrog review

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ No critical issues — minor suggestions inline.

Reviewed changes — expand captured externals from root identifiers to flattened property chains, bump metadata format to v2, and add documentation.

  • Flatten external property chains in tinyest-for-wgsl up to . / $ / computed / call boundaries.
  • Metadata v2 in unplugin-typegpu: externals become flat { "<chain>": () => <chain> } thunks, and AST externalNames are reduced to root names for backwards compatibility.
  • Runtime support for v2 getters, naming by last chain segment, and new tests for matrix columns, runtime array length, console.log, Math.sin, infix dispatch, and TS syntax.
  • Docs: new "Explaining the Magic" page under Advanced.

Tests I ran: tinyest-for-wgsl/tests/parsers.test.ts, unplugin-typegpu/test/nested-externals.test.ts, unplugin-typegpu/test/tgsl-transpiling.test.ts, packages/typegpu/tests/externalPropAccess.test.ts, packages/typegpu/tests/internal/metadataNormalization.test.ts, packages/typegpu/tests/tgslFn.test.ts, the full unplugin-typegpu suite, and typechecks for typegpu, unplugin-typegpu, and tinyest-for-wgsl — all passed.

Pullfrog  | Fix all ➔Fix 👍s ➔View workflow run | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

Comment on lines +85 to +86
ast: {"params":[],"body":[0,[[2,"counter.$","+=","incrementBy.allModifier.$"],[2,"counter.$.y","+=","incrementBy.yModifier.$"]]],"externalNames":["counter","incrementBy"]},
externals: { "counter.$": () => counter.$, "incrementBy.allModifier.$": () => incrementBy.allModifier.$, "counter.$.y": () => counter.$.y, "incrementBy.yModifier.$": () => incrementBy.yModifier.$ }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This example doesn't match the actual flattening rule. Because the chain stops at .$, the AST body for counter.$ stays as a member access expression ([7, ...]) rather than being squashed into the string "counter.$", and the externals object won't contain keys like "counter.$". Update the snippet to use the same format as the Step 1/Step 2 examples below.

let pipeline;
const computeFn = tgpu.computeFn({ workgroupSize: [1] })(() => {
'use gpu'; buffer.$ += 1;
}); // { buffer: buffer } would now become { buffer: undefined }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment still describes the old behavior where buffer.$ was captured as an external. With the .$ cut-off, the captured external is just buffer, so the recapture note should mention { buffer: () => buffer } becoming { buffer: undefined }.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Expand property access when generating externals

3 participants