unplugin-typegpu 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/babel.d.cts +1 -2
  2. package/babel.d.mts +1 -2
  3. package/babel.mjs +1 -2
  4. package/bun.d.cts +1 -2
  5. package/bun.d.mts +1 -2
  6. package/bun.mjs +1 -2
  7. package/common-CRPQ2KE6.d.mts +1 -2
  8. package/common-Dpl8jppn.d.cts +1 -2
  9. package/esbuild.d.cts +0 -1
  10. package/esbuild.d.mts +0 -2
  11. package/esbuild.mjs +1 -2
  12. package/farm.d.cts +0 -1
  13. package/farm.d.mts +0 -2
  14. package/farm.mjs +1 -2
  15. package/filter-6T-5w4kG.mjs +1 -2
  16. package/index-legacy-DRI9LQiG.d.mts +1 -2
  17. package/index-legacy-xKi5C2ga.d.cts +1 -2
  18. package/index.d.cts +1 -2
  19. package/index.d.mts +1 -2
  20. package/index.mjs +1 -2
  21. package/package.json +19 -19
  22. package/rolldown-browser-DKeiFM_e.mjs +1 -2
  23. package/rolldown-browser-JYqfNLQ8.d.mts +1 -2
  24. package/rolldown.d.cts +0 -1
  25. package/rolldown.d.mts +0 -2
  26. package/rolldown.mjs +1 -2
  27. package/rollup-impl-DqC_d-_W.d.cts +1 -2
  28. package/rollup.d.cts +0 -1
  29. package/rollup.d.mts +0 -2
  30. package/rollup.mjs +1 -2
  31. package/rspack.d.cts +0 -1
  32. package/rspack.d.mts +0 -2
  33. package/rspack.mjs +1 -2
  34. package/vite.d.cts +0 -1
  35. package/vite.d.mts +0 -2
  36. package/vite.mjs +1 -2
  37. package/webpack.d.cts +0 -1
  38. package/webpack.d.mts +0 -2
  39. package/webpack.mjs +1 -2
  40. package/babel.d.cts.map +0 -1
  41. package/babel.d.mts.map +0 -1
  42. package/babel.mjs.map +0 -1
  43. package/bun.d.cts.map +0 -1
  44. package/bun.d.mts.map +0 -1
  45. package/bun.mjs.map +0 -1
  46. package/common-CRPQ2KE6.d.mts.map +0 -1
  47. package/common-Dpl8jppn.d.cts.map +0 -1
  48. package/esbuild.mjs.map +0 -1
  49. package/farm.mjs.map +0 -1
  50. package/filter-6T-5w4kG.mjs.map +0 -1
  51. package/index-legacy-DRI9LQiG.d.mts.map +0 -1
  52. package/index-legacy-xKi5C2ga.d.cts.map +0 -1
  53. package/index.d.cts.map +0 -1
  54. package/index.d.mts.map +0 -1
  55. package/index.mjs.map +0 -1
  56. package/rolldown-browser-DKeiFM_e.mjs.map +0 -1
  57. package/rolldown-browser-JYqfNLQ8.d.mts.map +0 -1
  58. package/rolldown.mjs.map +0 -1
  59. package/rollup-impl-DqC_d-_W.d.cts.map +0 -1
  60. package/rollup.mjs.map +0 -1
  61. package/rspack.mjs.map +0 -1
  62. package/vite.mjs.map +0 -1
  63. package/webpack.mjs.map +0 -1
package/babel.d.cts CHANGED
@@ -7,5 +7,4 @@ declare function export_default(): {
7
7
  Program(this: Node, path: _babel_traverse0.NodePath<Program>, state: Node): void;
8
8
  };
9
9
  };
10
- export = export_default;
11
- //# sourceMappingURL=babel.d.cts.map
10
+ export = export_default;
package/babel.d.mts CHANGED
@@ -8,5 +8,4 @@ declare function export_default(): {
8
8
  };
9
9
  };
10
10
  //#endregion
11
- export { export_default as default };
12
- //# sourceMappingURL=babel.d.mts.map
11
+ export { export_default as default };
package/babel.mjs CHANGED
@@ -155,5 +155,4 @@ function babel_default() {
155
155
  }
156
156
 
157
157
  //#endregion
158
- export { babel_default as default };
159
- //# sourceMappingURL=babel.mjs.map
158
+ export { babel_default as default };
package/bun.d.cts CHANGED
@@ -2,5 +2,4 @@ import { t as Options } from "./common-Dpl8jppn.cjs";
2
2
 
3
3
  //#region src/bun.d.ts
4
4
  declare const _default: (rawOptions: Options) => BunPlugin;
5
- export = _default;
6
- //# sourceMappingURL=bun.d.cts.map
5
+ export = _default;
package/bun.d.mts CHANGED
@@ -3,5 +3,4 @@ import { t as Options } from "./common-CRPQ2KE6.mjs";
3
3
  //#region src/bun.d.ts
4
4
  declare const _default: (rawOptions: Options) => BunPlugin;
5
5
  //#endregion
6
- export { _default as default };
7
- //# sourceMappingURL=bun.d.mts.map
6
+ export { _default as default };
package/bun.mjs CHANGED
@@ -33,5 +33,4 @@ var bun_default = (rawOptions) => {
33
33
  };
34
34
 
35
35
  //#endregion
36
- export { bun_default as default };
37
- //# sourceMappingURL=bun.mjs.map
36
+ export { bun_default as default };
@@ -22,5 +22,4 @@ interface Options {
22
22
  earlyPruning?: boolean | undefined;
23
23
  }
24
24
  //#endregion
25
- export { Options as t };
26
- //# sourceMappingURL=common-CRPQ2KE6.d.mts.map
25
+ export { Options as t };
@@ -22,5 +22,4 @@ interface Options {
22
22
  earlyPruning?: boolean | undefined;
23
23
  }
24
24
  //#endregion
25
- export { Options as t };
26
- //# sourceMappingURL=common-Dpl8jppn.d.cts.map
25
+ export { Options as t };
package/esbuild.d.cts CHANGED
@@ -1,3 +1,2 @@
1
- import "./rollup-impl-DqC_d-_W.cjs";
2
1
  import { esbuildPlugin } from "./index.cjs";
3
2
  export = esbuildPlugin;
package/esbuild.d.mts CHANGED
@@ -1,4 +1,2 @@
1
- import "./common-CRPQ2KE6.mjs";
2
- import "./rolldown-browser-JYqfNLQ8.mjs";
3
1
  import { esbuildPlugin } from "./index.mjs";
4
2
  export { esbuildPlugin as default };
package/esbuild.mjs CHANGED
@@ -4,5 +4,4 @@ import { esbuildPlugin } from "./index.mjs";
4
4
  var esbuild_default = esbuildPlugin;
5
5
 
6
6
  //#endregion
7
- export { esbuild_default as default };
8
- //# sourceMappingURL=esbuild.mjs.map
7
+ export { esbuild_default as default };
package/farm.d.cts CHANGED
@@ -1,3 +1,2 @@
1
- import "./rollup-impl-DqC_d-_W.cjs";
2
1
  import { farmPlugin } from "./index.cjs";
3
2
  export = farmPlugin;
package/farm.d.mts CHANGED
@@ -1,4 +1,2 @@
1
- import "./common-CRPQ2KE6.mjs";
2
- import "./rolldown-browser-JYqfNLQ8.mjs";
3
1
  import { farmPlugin } from "./index.mjs";
4
2
  export { farmPlugin as default };
package/farm.mjs CHANGED
@@ -4,5 +4,4 @@ import { farmPlugin } from "./index.mjs";
4
4
  var farm_default = farmPlugin;
5
5
 
6
6
  //#endregion
7
- export { farm_default as default };
8
- //# sourceMappingURL=farm.mjs.map
7
+ export { farm_default as default };
@@ -231,5 +231,4 @@ function createFilterForId(filter) {
231
231
  }
232
232
 
233
233
  //#endregion
234
- export { gatherTgpuAliases as a, operators as c, embedJSON as i, performExpressionNaming as l, defaultOptions as n, getFunctionName as o, earlyPruneRegex as r, isShellImplementationCall as s, createFilterForId as t, useGpuDirective as u };
235
- //# sourceMappingURL=filter-6T-5w4kG.mjs.map
234
+ export { gatherTgpuAliases as a, operators as c, embedJSON as i, performExpressionNaming as l, defaultOptions as n, getFunctionName as o, earlyPruneRegex as r, isShellImplementationCall as s, createFilterForId as t, useGpuDirective as u };
@@ -1485,5 +1485,4 @@ type TSType = TSAnyKeyword | TSBooleanKeyword | TSBigIntKeyword | TSIntrinsicKey
1485
1485
  type TSBaseType = TSAnyKeyword | TSBooleanKeyword | TSBigIntKeyword | TSIntrinsicKeyword | TSNeverKeyword | TSNullKeyword | TSNumberKeyword | TSObjectKeyword | TSStringKeyword | TSSymbolKeyword | TSUndefinedKeyword | TSUnknownKeyword | TSVoidKeyword | TSThisType | TSLiteralType;
1486
1486
  type ModuleDeclaration = ExportAllDeclaration | ExportDefaultDeclaration | ExportNamedDeclaration | ImportDeclaration;
1487
1487
  //#endregion
1488
- export { Program as n, Node as t };
1489
- //# sourceMappingURL=index-legacy-DRI9LQiG.d.mts.map
1488
+ export { Program as n, Node as t };
@@ -1485,5 +1485,4 @@ type TSType = TSAnyKeyword | TSBooleanKeyword | TSBigIntKeyword | TSIntrinsicKey
1485
1485
  type TSBaseType = TSAnyKeyword | TSBooleanKeyword | TSBigIntKeyword | TSIntrinsicKeyword | TSNeverKeyword | TSNullKeyword | TSNumberKeyword | TSObjectKeyword | TSStringKeyword | TSSymbolKeyword | TSUndefinedKeyword | TSUnknownKeyword | TSVoidKeyword | TSThisType | TSLiteralType;
1486
1486
  type ModuleDeclaration = ExportAllDeclaration | ExportDefaultDeclaration | ExportNamedDeclaration | ImportDeclaration;
1487
1487
  //#endregion
1488
- export { Program as n, Node as t };
1489
- //# sourceMappingURL=index-legacy-xKi5C2ga.d.cts.map
1488
+ export { Program as n, Node as t };
package/index.d.cts CHANGED
@@ -14,5 +14,4 @@ declare const rspackPlugin: (options: Options) => RspackPluginInstance;
14
14
  declare const esbuildPlugin: (options: Options) => unplugin.EsbuildPlugin;
15
15
  declare const farmPlugin: (options: Options) => JsPlugin;
16
16
  //#endregion
17
- export { type Options, export_default as babelPlugin, _default as bunPlugin, typegpu as default, esbuildPlugin, farmPlugin, rollUpImpl as rolldownBrowserPlugin, rolldownPlugin, rollupPlugin, rspackPlugin, vitePlugin, webpackPlugin };
18
- //# sourceMappingURL=index.d.cts.map
17
+ export { type Options, export_default as babelPlugin, _default as bunPlugin, typegpu as default, esbuildPlugin, farmPlugin, rollUpImpl as rolldownBrowserPlugin, rolldownPlugin, rollupPlugin, rspackPlugin, vitePlugin, webpackPlugin };
package/index.d.mts CHANGED
@@ -14,5 +14,4 @@ declare const rspackPlugin: (options: Options) => RspackPluginInstance;
14
14
  declare const esbuildPlugin: (options: Options) => unplugin.EsbuildPlugin;
15
15
  declare const farmPlugin: (options: Options) => JsPlugin;
16
16
  //#endregion
17
- export { type Options, export_default as babelPlugin, _default as bunPlugin, typegpu as default, esbuildPlugin, farmPlugin, rollUpImpl as rolldownBrowserPlugin, rolldownPlugin, rollupPlugin, rspackPlugin, vitePlugin, webpackPlugin };
18
- //# sourceMappingURL=index.d.mts.map
17
+ export { type Options, export_default as babelPlugin, _default as bunPlugin, typegpu as default, esbuildPlugin, farmPlugin, rollUpImpl as rolldownBrowserPlugin, rolldownPlugin, rollupPlugin, rspackPlugin, vitePlugin, webpackPlugin };
package/index.mjs CHANGED
@@ -14,5 +14,4 @@ const esbuildPlugin = typegpu.esbuild;
14
14
  const farmPlugin = typegpu.farm;
15
15
 
16
16
  //#endregion
17
- export { babel_default as babelPlugin, bun_default as bunPlugin, typegpu as default, esbuildPlugin, farmPlugin, rolldown_browser_default as rolldownBrowserPlugin, rolldownPlugin, rollupPlugin, rspackPlugin, vitePlugin, webpackPlugin };
18
- //# sourceMappingURL=index.mjs.map
17
+ export { babel_default as babelPlugin, bun_default as bunPlugin, typegpu as default, esbuildPlugin, farmPlugin, rolldown_browser_default as rolldownBrowserPlugin, rolldownPlugin, rollupPlugin, rspackPlugin, vitePlugin, webpackPlugin };
package/package.json CHANGED
@@ -1,22 +1,31 @@
1
1
  {
2
2
  "name": "unplugin-typegpu",
3
- "version": "0.10.0",
3
+ "version": "0.10.2",
4
4
  "description": "Build plugins for TypeGPU, enabling seamless JavaScript -> WGSL transpilation and improved debugging.",
5
5
  "keywords": [
6
+ "babel-plugin",
7
+ "gpgpu",
6
8
  "rollup-plugin",
9
+ "shaders",
10
+ "typegpu",
11
+ "typescript",
7
12
  "unplugin",
8
- "babel-plugin",
9
13
  "vite-plugin",
10
- "typegpu",
11
- "gpgpu",
12
14
  "webgpu",
13
15
  "wgpu",
14
- "wgsl",
15
- "typescript",
16
- "shaders"
16
+ "wgsl"
17
17
  ],
18
+ "homepage": "https://typegpu.com",
19
+ "bugs": {
20
+ "url": "https://github.com/software-mansion/TypeGPU/issues"
21
+ },
18
22
  "license": "MIT",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/software-mansion/TypeGPU.git"
26
+ },
19
27
  "type": "module",
28
+ "sideEffects": false,
20
29
  "exports": {
21
30
  "./package.json": "./package.json",
22
31
  ".": {
@@ -130,15 +139,6 @@
130
139
  }
131
140
  }
132
141
  },
133
- "sideEffects": false,
134
- "repository": {
135
- "type": "git",
136
- "url": "git+https://github.com/software-mansion/TypeGPU.git"
137
- },
138
- "bugs": {
139
- "url": "https://github.com/software-mansion/TypeGPU/issues"
140
- },
141
- "homepage": "https://typegpu.com",
142
142
  "dependencies": {
143
143
  "@babel/standalone": "^7.28.6",
144
144
  "defu": "^6.1.4",
@@ -146,12 +146,12 @@
146
146
  "magic-string-ast": "^1.0.0",
147
147
  "pathe": "^2.0.3",
148
148
  "picomatch": "^4.0.3",
149
- "tinyest": "~0.3.0",
150
- "tinyest-for-wgsl": "~0.3.0",
149
+ "tinyest": "~0.3.1",
150
+ "tinyest-for-wgsl": "~0.3.2",
151
151
  "unplugin": "^2.3.5"
152
152
  },
153
153
  "peerDependencies": {
154
- "typegpu": "^0.10.0"
154
+ "typegpu": "^0.10.2"
155
155
  },
156
156
  "main": "./index.mjs",
157
157
  "types": "./index.d.mts",
@@ -126,5 +126,4 @@ const rollUpImpl = (rawOptions) => {
126
126
  var rolldown_browser_default = rollUpImpl;
127
127
 
128
128
  //#endregion
129
- export { rollUpImpl as n, rolldown_browser_default as t };
130
- //# sourceMappingURL=rolldown-browser-DKeiFM_e.mjs.map
129
+ export { rollUpImpl as n, rolldown_browser_default as t };
@@ -1244,5 +1244,4 @@ declare const rollUpImpl: (rawOptions: Options) => {
1244
1244
  };
1245
1245
  };
1246
1246
  //#endregion
1247
- export { Plugin as n, rollUpImpl as t };
1248
- //# sourceMappingURL=rolldown-browser-JYqfNLQ8.d.mts.map
1247
+ export { Plugin as n, rollUpImpl as t };
package/rolldown.d.cts CHANGED
@@ -1,3 +1,2 @@
1
- import "./rollup-impl-DqC_d-_W.cjs";
2
1
  import { rolldownPlugin } from "./index.cjs";
3
2
  export = rolldownPlugin;
package/rolldown.d.mts CHANGED
@@ -1,4 +1,2 @@
1
- import "./common-CRPQ2KE6.mjs";
2
- import "./rolldown-browser-JYqfNLQ8.mjs";
3
1
  import { rolldownPlugin } from "./index.mjs";
4
2
  export { rolldownPlugin as default };
package/rolldown.mjs CHANGED
@@ -4,5 +4,4 @@ import { rolldownPlugin } from "./index.mjs";
4
4
  var rolldown_default = rolldownPlugin;
5
5
 
6
6
  //#endregion
7
- export { rolldown_default as default };
8
- //# sourceMappingURL=rolldown.mjs.map
7
+ export { rolldown_default as default };
@@ -1243,5 +1243,4 @@ declare const rollUpImpl: (rawOptions: Options) => {
1243
1243
  };
1244
1244
  };
1245
1245
  //#endregion
1246
- export { Plugin as n, rollUpImpl as t };
1247
- //# sourceMappingURL=rollup-impl-DqC_d-_W.d.cts.map
1246
+ export { Plugin as n, rollUpImpl as t };
package/rollup.d.cts CHANGED
@@ -1,3 +1,2 @@
1
- import "./rollup-impl-DqC_d-_W.cjs";
2
1
  import { rollupPlugin } from "./index.cjs";
3
2
  export = rollupPlugin;
package/rollup.d.mts CHANGED
@@ -1,4 +1,2 @@
1
- import "./common-CRPQ2KE6.mjs";
2
- import "./rolldown-browser-JYqfNLQ8.mjs";
3
1
  import { rollupPlugin } from "./index.mjs";
4
2
  export { rollupPlugin as default };
package/rollup.mjs CHANGED
@@ -4,5 +4,4 @@ import { rollupPlugin } from "./index.mjs";
4
4
  var rollup_default = rollupPlugin;
5
5
 
6
6
  //#endregion
7
- export { rollup_default as default };
8
- //# sourceMappingURL=rollup.mjs.map
7
+ export { rollup_default as default };
package/rspack.d.cts CHANGED
@@ -1,3 +1,2 @@
1
- import "./rollup-impl-DqC_d-_W.cjs";
2
1
  import { rspackPlugin } from "./index.cjs";
3
2
  export = rspackPlugin;
package/rspack.d.mts CHANGED
@@ -1,4 +1,2 @@
1
- import "./common-CRPQ2KE6.mjs";
2
- import "./rolldown-browser-JYqfNLQ8.mjs";
3
1
  import { rspackPlugin } from "./index.mjs";
4
2
  export { rspackPlugin as default };
package/rspack.mjs CHANGED
@@ -4,5 +4,4 @@ import { rspackPlugin } from "./index.mjs";
4
4
  var rspack_default = rspackPlugin;
5
5
 
6
6
  //#endregion
7
- export { rspack_default as default };
8
- //# sourceMappingURL=rspack.mjs.map
7
+ export { rspack_default as default };
package/vite.d.cts CHANGED
@@ -1,3 +1,2 @@
1
- import "./rollup-impl-DqC_d-_W.cjs";
2
1
  import { vitePlugin } from "./index.cjs";
3
2
  export = vitePlugin;
package/vite.d.mts CHANGED
@@ -1,4 +1,2 @@
1
- import "./common-CRPQ2KE6.mjs";
2
- import "./rolldown-browser-JYqfNLQ8.mjs";
3
1
  import { vitePlugin } from "./index.mjs";
4
2
  export { vitePlugin as default };
package/vite.mjs CHANGED
@@ -4,5 +4,4 @@ import { vitePlugin } from "./index.mjs";
4
4
  var vite_default = vitePlugin;
5
5
 
6
6
  //#endregion
7
- export { vite_default as default };
8
- //# sourceMappingURL=vite.mjs.map
7
+ export { vite_default as default };
package/webpack.d.cts CHANGED
@@ -1,3 +1,2 @@
1
- import "./rollup-impl-DqC_d-_W.cjs";
2
1
  import { webpackPlugin } from "./index.cjs";
3
2
  export = webpackPlugin;
package/webpack.d.mts CHANGED
@@ -1,4 +1,2 @@
1
- import "./common-CRPQ2KE6.mjs";
2
- import "./rolldown-browser-JYqfNLQ8.mjs";
3
1
  import { webpackPlugin } from "./index.mjs";
4
2
  export { webpackPlugin as default };
package/webpack.mjs CHANGED
@@ -4,5 +4,4 @@ import { webpackPlugin } from "./index.mjs";
4
4
  var webpack_default = webpackPlugin;
5
5
 
6
6
  //#endregion
7
- export { webpack_default as default };
8
- //# sourceMappingURL=webpack.mjs.map
7
+ export { webpack_default as default };
package/babel.d.cts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"babel.d.cts","names":[],"sources":["../src/babel.ts"],"mappings":";;;;iBAG2C,cAAA,CAAA"}
package/babel.d.mts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"babel.d.mts","names":[],"sources":["../src/babel.ts"],"mappings":";;;;iBAG2C,cAAA,CAAA"}
package/babel.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"babel.mjs","names":[],"sources":["../src/babel.ts"],"sourcesContent":["import * as Babel from '@babel/standalone';\nimport type TemplateGenerator from '@babel/template';\nimport type { TraverseOptions } from '@babel/traverse';\nimport type * as babel from '@babel/types';\nimport defu from 'defu';\nimport { FORMAT_VERSION } from 'tinyest';\nimport { transpileFn } from 'tinyest-for-wgsl';\nimport {\n type Context,\n defaultOptions,\n embedJSON,\n gatherTgpuAliases,\n getFunctionName,\n isShellImplementationCall,\n operators,\n type Options,\n performExpressionNaming,\n useGpuDirective,\n} from './common.ts';\nimport { createFilterForId } from './filter.ts';\n\n// NOTE: @babel/standalone does expose internal packages, as specified in the docs, but the\n// typing for @babel/standalone does not expose them.\nconst template = (\n Babel as unknown as { packages: { template: typeof TemplateGenerator } }\n).packages.template;\nconst types = (Babel as unknown as { packages: { types: typeof babel } })\n .packages.types;\n\nfunction containsUseGpuDirective(\n node:\n | babel.FunctionDeclaration\n | babel.FunctionExpression\n | babel.ArrowFunctionExpression,\n): boolean {\n return ((\n 'directives' in node.body ? (node.body?.directives ?? []) : []\n )\n .map((directive) => directive.value.value))\n .includes(useGpuDirective);\n}\n\nfunction i(identifier: string): babel.Identifier {\n return types.identifier(identifier);\n}\n\nconst fnNodeToOriginalMap = new WeakMap<\n | babel.FunctionDeclaration\n | babel.FunctionExpression\n | babel.ArrowFunctionExpression,\n | babel.FunctionDeclaration\n | babel.FunctionExpression\n | babel.ArrowFunctionExpression\n>();\n\nfunction functionToTranspiled(\n node: babel.ArrowFunctionExpression | babel.FunctionExpression,\n parent: babel.Node | null,\n): babel.CallExpression {\n const { params, body, externalNames } = transpileFn(\n fnNodeToOriginalMap.get(node) ?? node,\n );\n const maybeName = getFunctionName(node, parent);\n\n const metadata = types.objectExpression([\n types.objectProperty(\n i('v'),\n types.numericLiteral(FORMAT_VERSION),\n ),\n types.objectProperty(\n i('name'),\n maybeName ? types.stringLiteral(maybeName) : types.buildUndefinedNode(),\n ),\n types.objectProperty(\n i('ast'),\n template.expression`${embedJSON({ params, body, externalNames })}`(),\n ),\n types.objectProperty(\n i('externals'),\n types.arrowFunctionExpression(\n [],\n types.blockStatement([\n types.returnStatement(\n types.objectExpression(\n externalNames.map((name) =>\n types.objectProperty(\n i(name),\n i(name),\n false,\n /* shorthand */ name !== 'this',\n )\n ),\n ),\n ),\n ]),\n ),\n ),\n ]);\n\n return types.callExpression(\n types.arrowFunctionExpression(\n [i('$')],\n types.logicalExpression(\n '&&',\n types.callExpression(\n types.memberExpression(\n types.assignmentExpression(\n '??=',\n types.memberExpression(i('globalThis'), i('__TYPEGPU_META__')),\n types.newExpression(i('WeakMap'), []),\n ),\n i('set'),\n ),\n [\n types.assignmentExpression(\n '=',\n types.memberExpression(i('$'), i('f')),\n node,\n ),\n metadata,\n ],\n ),\n types.memberExpression(i('$'), i('f')),\n ),\n ),\n [types.objectExpression([])],\n );\n}\n\nfunction wrapInAutoName(\n node: babel.Expression,\n name: string,\n) {\n return types.callExpression(\n template.expression('globalThis.__TYPEGPU_AUTONAME__ ?? (a => a)', {\n placeholderPattern: false,\n })(),\n [node, types.stringLiteral(name)],\n );\n}\n\nfunction functionVisitor(ctx: Context): TraverseOptions {\n let inUseGpuScope = false;\n\n return {\n VariableDeclarator(path) {\n performExpressionNaming(ctx, path.node, (node, name) => {\n path.get('init').replaceWith(wrapInAutoName(node, name));\n });\n },\n\n AssignmentExpression(path) {\n if (inUseGpuScope) {\n const runtimeFn =\n operators[path.node.operator as keyof typeof operators];\n\n if (runtimeFn) {\n path.replaceWith(\n types.assignmentExpression(\n '=',\n path.node.left,\n types.callExpression(types.identifier(runtimeFn), [\n path.node.left as babel.Expression,\n path.node.right,\n ]),\n ),\n );\n }\n }\n\n performExpressionNaming(ctx, path.node, (node, name) => {\n path.get('right').replaceWith(wrapInAutoName(node, name));\n });\n },\n\n ObjectProperty(path) {\n performExpressionNaming(ctx, path.node, (node, name) => {\n path.get('value').replaceWith(wrapInAutoName(node, name));\n });\n },\n\n ClassProperty(path) {\n performExpressionNaming(ctx, path.node, (node, name) => {\n path.get('value').replaceWith(wrapInAutoName(node, name));\n });\n },\n\n ImportDeclaration(path) {\n gatherTgpuAliases(path.node, ctx);\n },\n\n BinaryExpression: {\n exit(path) {\n if (!inUseGpuScope) {\n return;\n }\n\n const runtimeFn =\n operators[path.node.operator as keyof typeof operators];\n\n if (runtimeFn) {\n path.replaceWith(\n types.callExpression(types.identifier(runtimeFn), [\n path.node.left as babel.Expression,\n path.node.right,\n ]),\n );\n }\n },\n },\n\n ArrowFunctionExpression: {\n enter(path) {\n if (containsUseGpuDirective(path.node)) {\n fnNodeToOriginalMap.set(path.node, types.cloneNode(path.node, true));\n if (inUseGpuScope) {\n throw new Error(`Nesting 'use gpu' functions is not allowed`);\n }\n inUseGpuScope = true;\n }\n },\n exit(path) {\n const node = path.node;\n if (containsUseGpuDirective(node)) {\n inUseGpuScope = false;\n const parent = path.parentPath.node;\n path.replaceWith(functionToTranspiled(node, parent));\n path.skip();\n }\n },\n },\n\n FunctionExpression: {\n enter(path) {\n if (containsUseGpuDirective(path.node)) {\n fnNodeToOriginalMap.set(path.node, types.cloneNode(path.node, true));\n if (inUseGpuScope) {\n throw new Error(`Nesting 'use gpu' functions is not allowed`);\n }\n inUseGpuScope = true;\n }\n },\n exit(path) {\n const node = path.node;\n if (containsUseGpuDirective(node)) {\n inUseGpuScope = false;\n const parent = path.parentPath.node;\n path.replaceWith(functionToTranspiled(node, parent));\n path.skip();\n }\n },\n },\n\n FunctionDeclaration: {\n enter(path) {\n if (containsUseGpuDirective(path.node)) {\n fnNodeToOriginalMap.set(path.node, types.cloneNode(path.node, true));\n if (inUseGpuScope) {\n throw new Error(`Nesting 'use gpu' functions is not allowed`);\n }\n inUseGpuScope = true;\n }\n },\n exit(path) {\n const node = (fnNodeToOriginalMap.get(path.node) ??\n path.node) as babel.FunctionDeclaration;\n if (containsUseGpuDirective(node)) {\n inUseGpuScope = false;\n\n if (!node.id) {\n return;\n }\n\n const parent = path.parentPath.node;\n const expression = types.functionExpression(\n node.id,\n node.params,\n node.body,\n );\n\n path.replaceWith(\n types.variableDeclaration('const', [\n types.variableDeclarator(\n node.id,\n functionToTranspiled(expression, parent),\n ),\n ]),\n );\n path.skip();\n }\n },\n },\n\n CallExpression: {\n exit(path) {\n const node = path.node;\n\n if (isShellImplementationCall(node, ctx)) {\n const implementation = node.arguments[0];\n\n if (\n implementation &&\n (implementation.type === 'FunctionExpression' ||\n implementation.type === 'ArrowFunctionExpression')\n ) {\n const transpiled = functionToTranspiled(\n implementation,\n null,\n );\n\n path.replaceWith(\n types.callExpression(node.callee, [\n transpiled,\n ]),\n );\n\n path.skip();\n }\n }\n },\n },\n };\n}\n\nexport default function () {\n return {\n visitor: {\n Program(path, state) {\n // oxlint-disable-next-line typescript/no-explicit-any <oh babel babel...>\n const options = defu((state as any).opts as Options, defaultOptions);\n // oxlint-disable-next-line typescript/no-explicit-any <oh babel babel...>\n const id: string | undefined = (state as any).filename;\n\n const filter = createFilterForId(options);\n if (id && filter && !filter?.(id)) {\n return;\n }\n\n const ctx: Context = {\n tgpuAliases: new Set<string>(\n options.forceTgpuAlias ? [options.forceTgpuAlias] : [],\n ),\n fileId: id,\n autoNamingEnabled: options.autoNamingEnabled,\n };\n\n path.traverse(functionVisitor(ctx));\n },\n } satisfies TraverseOptions,\n };\n}\n"],"mappings":"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"}
package/bun.d.cts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bun.d.cts","names":[],"sources":["../src/bun.ts"],"mappings":";;;cAG4E,QAAA,GAG5D,UAAA,EAAY,OAAA,KAAU,SAAA;AAAA"}
package/bun.d.mts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bun.d.mts","names":[],"sources":["../src/bun.ts"],"mappings":";;;cAG4E,QAAA,GAG5D,UAAA,EAAY,OAAA,KAAU,SAAA"}
package/bun.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bun.mjs","names":["babelPlugin"],"sources":["../src/bun.ts"],"sourcesContent":["import type { BunPlugin } from 'bun';\nimport * as Babel from '@babel/standalone';\nimport defu from 'defu';\nimport { defaultOptions, earlyPruneRegex, type Options } from './common.ts';\nimport babelPlugin from './babel.ts';\n\nexport default (rawOptions: Options): BunPlugin => {\n const options = defu(rawOptions, defaultOptions);\n const include = options.include;\n if (!(include instanceof RegExp)) {\n throw new Error(\n `Unsupported 'include' options in Bun plugin. Please provide a single regular expression`,\n );\n }\n if (options.exclude) {\n throw new Error(`Unsupported 'exclude' option in Bun plugin`);\n }\n\n return {\n name: 'unplugin-typegpu',\n setup(build) {\n build.onLoad({ filter: include }, async (args) => {\n const text = await Bun.file(args.path).text();\n\n // Pruning early before more expensive operations\n if (earlyPruneRegex.every((pattern) => !pattern.test(text))) {\n return {\n contents: text,\n loader: args.loader,\n };\n }\n\n const result = Babel.transform(text, {\n presets: [['typescript', { allowDeclareFields: true }]],\n filename: args.path,\n plugins: [babelPlugin],\n }).code;\n\n return {\n contents: result ?? text,\n loader: args.loader,\n };\n });\n },\n };\n};\n"],"mappings":";;;;;;AAMA,mBAAgB,eAAmC;CACjD,MAAM,UAAU,KAAK,YAAY,eAAe;CAChD,MAAM,UAAU,QAAQ;AACxB,KAAI,EAAE,mBAAmB,QACvB,OAAM,IAAI,MACR,0FACD;AAEH,KAAI,QAAQ,QACV,OAAM,IAAI,MAAM,6CAA6C;AAG/D,QAAO;EACL,MAAM;EACN,MAAM,OAAO;AACX,SAAM,OAAO,EAAE,QAAQ,SAAS,EAAE,OAAO,SAAS;IAChD,MAAM,OAAO,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM;AAG7C,QAAI,gBAAgB,OAAO,YAAY,CAAC,QAAQ,KAAK,KAAK,CAAC,CACzD,QAAO;KACL,UAAU;KACV,QAAQ,KAAK;KACd;IAGH,MAAM,SAAS,MAAM,UAAU,MAAM;KACnC,SAAS,CAAC,CAAC,cAAc,EAAE,oBAAoB,MAAM,CAAC,CAAC;KACvD,UAAU,KAAK;KACf,SAAS,CAACA,cAAY;KACvB,CAAC,CAAC;AAEH,WAAO;KACL,UAAU,gDAAU;KACpB,QAAQ,KAAK;KACd;KACD;;EAEL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"common-CRPQ2KE6.d.mts","names":[],"sources":["../src/common.ts"],"mappings":";;;UAciB,OAAA;EAcf;EAZA,OAAA,GAAU,aAAA;EAqBE;EAlBZ,OAAA,GAAU,aAAA;;EAGV,OAAA;;EAGA,cAAA;;EAGA,iBAAA;;;;;;;;EASA,YAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"common-Dpl8jppn.d.cts","names":[],"sources":["../src/common.ts"],"mappings":";;;UAciB,OAAA;EAcf;EAZA,OAAA,GAAU,aAAA;EAqBE;EAlBZ,OAAA,GAAU,aAAA;;EAGV,OAAA;;EAGA,cAAA;;EAGA,iBAAA;;;;;;;;EASA,YAAA;AAAA"}
package/esbuild.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"esbuild.mjs","names":[],"sources":["../src/esbuild.ts"],"sourcesContent":["import { esbuildPlugin } from './index.ts';\n\nexport default esbuildPlugin;\n"],"mappings":";;;AAEA,sBAAe"}
package/farm.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"farm.mjs","names":[],"sources":["../src/farm.ts"],"sourcesContent":["import { farmPlugin } from './index.ts';\n\nexport default farmPlugin;\n"],"mappings":";;;AAEA,mBAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"filter-6T-5w4kG.mjs","names":[],"sources":["../src/common.ts","../src/filter.ts"],"sourcesContent":["import type * as babel from '@babel/types';\nimport type * as acorn from 'acorn';\nimport type { FilterPattern } from 'unplugin';\n\nexport type Context = {\n /**\n * How the `tgpu` object is used in code. Since it can be aliased, we\n * need to catch that and act accordingly.\n */\n tgpuAliases: Set<string>;\n fileId?: string | undefined;\n autoNamingEnabled: boolean;\n};\n\nexport interface Options {\n /** @default [/\\.m?[jt]sx?$/] */\n include?: FilterPattern;\n\n /** @default undefined */\n exclude?: FilterPattern;\n\n /** @default undefined */\n enforce?: 'post' | 'pre' | undefined;\n\n /** @default undefined */\n forceTgpuAlias?: string | undefined;\n\n /** @default true */\n autoNamingEnabled?: boolean | undefined;\n\n /**\n * Skipping files that don't contain \"typegpu\", \"tgpu\" or \"use gpu\".\n * In case this early pruning hinders transformation, you\n * can disable it.\n *\n * @default true\n */\n earlyPruning?: boolean | undefined;\n}\n\nexport const defaultOptions = {\n include: /\\.m?[jt]sx?(?:\\?.*)?$/,\n autoNamingEnabled: true,\n earlyPruning: true,\n};\n\nexport function embedJSON(jsValue: unknown) {\n return JSON.stringify(jsValue)\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\n/**\n * Checks if `node` is an alias for the 'tgpu' object, traditionally\n * available via `import tgpu from 'typegpu'`.\n */\nfunction isTgpu(ctx: Context, node: babel.Node | acorn.AnyNode): boolean {\n let path = '';\n\n let tail = node;\n while (true) {\n if (tail.type === 'MemberExpression') {\n if (\n (tail.property.type === 'Literal' ||\n tail.property.type === 'StringLiteral') &&\n tail.property.value === '~unstable'\n ) {\n // Bypassing the '~unstable' property.\n tail = tail.object;\n continue;\n }\n\n if (tail.property.type !== 'Identifier') {\n // Not handling computed expressions.\n break;\n }\n\n path = path ? `${tail.property.name}.${path}` : tail.property.name;\n tail = tail.object;\n } else if (tail.type === 'Identifier') {\n path = path ? `${tail.name}.${path}` : tail.name;\n break;\n } else {\n break;\n }\n }\n\n return ctx.tgpuAliases.has(path);\n}\n\nexport function gatherTgpuAliases(\n node: acorn.ImportDeclaration | babel.ImportDeclaration,\n ctx: Context,\n) {\n if (node.source.value === 'typegpu') {\n for (const spec of node.specifiers) {\n if (\n // The default export of 'typegpu' is the `tgpu` object.\n spec.type === 'ImportDefaultSpecifier' ||\n // Aliasing 'tgpu' while importing, e.g. import { tgpu as t } from 'typegpu';\n (spec.type === 'ImportSpecifier' &&\n spec.imported.type === 'Identifier' &&\n spec.imported.name === 'tgpu')\n ) {\n ctx.tgpuAliases.add(spec.local.name);\n } else if (spec.type === 'ImportNamespaceSpecifier') {\n // Importing everything, e.g. import * as t from 'typegpu';\n ctx.tgpuAliases.add(`${spec.local.name}.tgpu`);\n }\n }\n }\n}\n\nconst fnShellFunctionNames = ['fn', 'vertexFn', 'fragmentFn', 'computeFn'];\n\nexport function isShellImplementationCall(\n node: acorn.CallExpression | babel.CallExpression,\n ctx: Context,\n) {\n return (\n node.callee.type === 'CallExpression' &&\n node.callee.callee.type === 'MemberExpression' &&\n node.callee.callee.property.type === 'Identifier' &&\n fnShellFunctionNames.includes(node.callee.callee.property.name) &&\n node.arguments.length === 1 && isTgpu(ctx, node.callee.callee.object)\n );\n}\n\n/**\n * Extracts a name and expression from nodes that contain a label and an expression,\n * such as VariableDeclarator or PropertyDefinition.\n * Returns a tuple of [name, expression] if found, otherwise undefined.\n *\n * @example\n * extractLabelledExpression(node`let name = tgpu.bindGroupLayout({});`)\n * // [\"name\", node`tgpu.bindGroupLayout({})`]\n */\nfunction extractLabelledExpression<T extends acorn.AnyNode | babel.Node>(\n node: T,\n): [string, ExpressionFor<T>] | undefined {\n if (\n node.type === 'VariableDeclarator' &&\n node.id.type === 'Identifier' &&\n node.init\n ) {\n // let id = init;\n return [node.id.name, node.init as ExpressionFor<T>];\n } else if (node.type === 'AssignmentExpression') {\n // left = right;\n const maybeName = tryFindIdentifier(node.left);\n if (maybeName) {\n return [maybeName, node.right as ExpressionFor<T>];\n }\n } else if (\n (node.type === 'Property' || node.type === 'ObjectProperty') &&\n node.key.type === 'Identifier'\n ) {\n // const a = { key: value }\n return [node.key.name, node.value as ExpressionFor<T>];\n } else if (\n (node.type === 'ClassProperty' || node.type === 'PropertyDefinition') &&\n node.value &&\n node.key.type === 'Identifier'\n ) {\n // class Class {\n //\t key = value;\n // }\n return [node.key.name, node.value as ExpressionFor<T>];\n }\n}\n\nexport function getFunctionName(\n node: acorn.AnyNode | babel.Node,\n parent: acorn.AnyNode | babel.Node | null,\n): string | undefined {\n const maybeName = parent ? extractLabelledExpression(parent)?.[0] : undefined;\n return maybeName ??\n (node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression'\n ? node.id?.name\n : undefined);\n}\n\nconst resourceConstructors: string[] = [\n // tgpu\n 'bindGroupLayout',\n 'vertexLayout',\n 'privateVar',\n 'workgroupVar',\n 'const',\n 'slot',\n 'accessor',\n 'comptime',\n ...fnShellFunctionNames,\n // root\n 'createBuffer',\n 'createMutable',\n 'createReadonly',\n 'createUniform',\n 'createQuerySet',\n 'createPipeline',\n 'createComputePipeline',\n 'createGuardedComputePipeline',\n 'createRenderPipeline',\n 'createTexture',\n 'createSampler',\n 'createComparisonSampler',\n // d\n 'struct',\n 'unstruct',\n // other\n 'createView',\n];\n\n/**\n * Checks if `node` should be wrapped in an autoname function.\n * Since it is mostly for debugging and clean WGSL generation,\n * some false positives and false negatives are admissible.\n */\nfunction containsResourceConstructorCall(\n node: acorn.AnyNode | babel.Node,\n ctx: Context,\n) {\n if (node.type === 'CallExpression') {\n if (isShellImplementationCall(node, ctx)) {\n return true;\n }\n // struct({...})\n if (\n node.callee.type === 'Identifier' &&\n resourceConstructors.includes(node.callee.name)\n ) {\n return true;\n }\n if (node.callee.type === 'MemberExpression') {\n if (node.callee.property.type === 'Identifier') {\n // root.createBuffer({...})\n if (resourceConstructors.includes(node.callee.property.name)) {\n return true;\n }\n if (node.callee.property.name === '$name') {\n return false;\n }\n }\n // root.createBuffer(d.f32).$usage('storage')\n return containsResourceConstructorCall(node.callee.object, ctx);\n }\n }\n if (node.type === 'TaggedTemplateExpression') {\n return containsResourceConstructorCall(node.tag, ctx);\n }\n return false;\n}\n\n/**\n * Tries to find an identifier in a node.\n *\n * @example\n * // syntax is simplified, imagine the arguments are appropriate nodes instead\n * tryFindIdentifier('myBuffer'); // 'myBuffer'\n * tryFindIdentifier('buffers.myBuffer'); // 'myBuffer'\n * tryFindIdentifier('this.myBuffer'); // 'myBuffer'\n * tryFindIdentifier('[a, b]'); // undefined\n */\nfunction tryFindIdentifier(\n node: acorn.AnyNode | babel.Node,\n): string | undefined {\n if (node.type === 'Identifier') {\n return node.name;\n }\n if (node.type === 'PrivateName') {\n return tryFindIdentifier(node.id);\n }\n if (node.type === 'PrivateIdentifier') {\n return node.name;\n }\n if (node.type === 'MemberExpression') {\n return tryFindIdentifier(node.property);\n }\n}\n\ntype ExpressionFor<T extends acorn.AnyNode | babel.Node> = T extends\n acorn.AnyNode ? acorn.Expression : babel.Expression;\n\n/**\n * Checks if `node` contains a label and a tgpu expression that could be named.\n * If so, it calls the provided callback. Nodes selected for naming include:\n *\n * `let name = tgpu.bindGroupLayout({});` (VariableDeclarator)\n *\n * `name = tgpu.bindGroupLayout({});` (AssignmentExpression)\n *\n * `property: tgpu.bindGroupLayout({})` (Property/ObjectProperty)\n *\n * Since it is mostly for debugging and clean WGSL generation,\n * some false positives and false negatives are admissible.\n *\n * This function is NOT used for auto-naming shell-less functions.\n * Those are handled separately.\n *\n * @privateRemarks\n * When adding new checks, you need to call this method in the corresponding node in Babel.\n */\nexport function performExpressionNaming<T extends acorn.AnyNode | babel.Node>(\n ctx: Context,\n node: T,\n namingCallback: (node: ExpressionFor<T>, name: string) => void,\n) {\n if (!ctx.autoNamingEnabled) {\n return;\n }\n\n const labelledExpression = extractLabelledExpression(node);\n if (labelledExpression) {\n const [label, expression] = labelledExpression;\n if (containsResourceConstructorCall(expression, ctx)) {\n namingCallback(expression, label);\n }\n }\n}\n\nexport const useGpuDirective = 'use gpu';\n\n/** Regular expressions used for early pruning (to avoid unnecessary parsing, which is expensive) */\nexport const earlyPruneRegex = [/[\"']use gpu[\"']/, /t(ype)?gpu/];\n\nexport const operators = {\n '+': '__tsover_add',\n '-': '__tsover_sub',\n '*': '__tsover_mul',\n '/': '__tsover_div',\n '%': '__tsover_mod',\n '+=': '__tsover_add',\n '-=': '__tsover_sub',\n '*=': '__tsover_mul',\n '/=': '__tsover_div',\n '%=': '__tsover_mod',\n};\n","// Copied from https://github.com/unjs/unplugin/blob/f514bf8e2d751b48b3a5acb1077eb1292d9711b3/src/utils/filter.ts#L2\n// Used only in the babel version of the plugin, since others can rely on native unplugin functionality.\n\nimport { resolve } from 'pathe';\nimport picomatch from 'picomatch';\nimport type {\n Arrayable,\n Nullable,\n StringFilter,\n StringOrRegExp,\n} from 'unplugin';\n\nfunction toArray<T>(array?: Nullable<Arrayable<T>>): Array<T> {\n const result = array || [];\n if (Array.isArray(result)) return result;\n return [result];\n}\n\nconst BACKSLASH_REGEX = /\\\\/g;\nfunction normalize(path: string): string {\n return path.replace(BACKSLASH_REGEX, '/');\n}\n\nconst ABSOLUTE_PATH_REGEX = /^(?:\\/|(?:[A-Z]:)?[/\\\\|])/i;\nfunction isAbsolute(path: string): boolean {\n return ABSOLUTE_PATH_REGEX.test(path);\n}\n\nexport type PluginFilter = (input: string) => boolean;\nexport type TransformHookFilter = (id: string, code: string) => boolean;\n\ninterface NormalizedStringFilter {\n include?: StringOrRegExp[] | undefined;\n exclude?: StringOrRegExp[] | undefined;\n}\n\nfunction getMatcherString(glob: string, cwd: string) {\n if (glob.startsWith('**') || isAbsolute(glob)) {\n return normalize(glob);\n }\n\n const resolved = resolve(cwd, glob);\n return normalize(resolved);\n}\n\nfunction patternToIdFilter(pattern: StringOrRegExp): PluginFilter {\n if (pattern instanceof RegExp) {\n return (id: string) => {\n const normalizedId = normalize(id);\n const result = pattern.test(normalizedId);\n pattern.lastIndex = 0;\n return result;\n };\n }\n const cwd = process.cwd();\n const glob = getMatcherString(pattern, cwd);\n const matcher = picomatch(glob, { dot: true });\n return (id: string) => {\n const normalizedId = normalize(id);\n return matcher(normalizedId);\n };\n}\n\nfunction createFilter(\n exclude: PluginFilter[] | undefined,\n include: PluginFilter[] | undefined,\n): PluginFilter | undefined {\n if (!exclude && !include) {\n return;\n }\n\n return (input) => {\n if (exclude?.some((filter) => filter(input))) {\n return false;\n }\n if (include?.some((filter) => filter(input))) {\n return true;\n }\n return !(include && include.length > 0);\n };\n}\n\nfunction normalizeFilter(filter: StringFilter): NormalizedStringFilter {\n if (typeof filter === 'string' || filter instanceof RegExp) {\n return {\n include: [filter],\n };\n }\n if (Array.isArray(filter)) {\n return {\n include: filter,\n };\n }\n return {\n exclude: filter.exclude ? toArray(filter.exclude) : undefined,\n include: filter.include ? toArray(filter.include) : undefined,\n };\n}\n\nfunction createIdFilter(\n filter: StringFilter | undefined,\n): PluginFilter | undefined {\n if (!filter) return;\n const { exclude, include } = normalizeFilter(filter);\n const excludeFilter = exclude?.map(patternToIdFilter);\n const includeFilter = include?.map(patternToIdFilter);\n return createFilter(excludeFilter, includeFilter);\n}\n\nexport function createFilterForId(\n filter: StringFilter | undefined,\n): PluginFilter | undefined {\n const filterFunction = createIdFilter(filter);\n return filterFunction ? (id) => !!filterFunction(id) : undefined;\n}\n"],"mappings":"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"}