unplugin-typegpu 0.1.0-alpha.8 → 0.1.0-alpha.9

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 (49) hide show
  1. package/babel.cjs +1 -1
  2. package/babel.cjs.map +1 -1
  3. package/babel.js +1 -1
  4. package/{chunk-ZZFJJORV.js → chunk-D2NWA2J7.js} +1 -1
  5. package/chunk-D2NWA2J7.js.map +1 -0
  6. package/{chunk-GR7J76HM.cjs → chunk-IA2CUGWD.cjs} +2 -2
  7. package/chunk-IA2CUGWD.cjs.map +1 -0
  8. package/{chunk-R3Y6TVVS.js → chunk-JKPGDPK3.js} +2 -2
  9. package/chunk-JKPGDPK3.js.map +1 -0
  10. package/{chunk-O6MPSBAL.cjs → chunk-TCJABTWK.cjs} +1 -1
  11. package/chunk-TCJABTWK.cjs.map +1 -0
  12. package/esbuild.cjs +1 -1
  13. package/esbuild.cjs.map +1 -1
  14. package/esbuild.js +1 -1
  15. package/esbuild.js.map +1 -1
  16. package/farm.cjs +1 -1
  17. package/farm.cjs.map +1 -1
  18. package/farm.js +1 -1
  19. package/farm.js.map +1 -1
  20. package/index.cjs +1 -1
  21. package/index.cjs.map +1 -1
  22. package/index.d.cts +1 -1
  23. package/index.d.ts +1 -1
  24. package/index.js +1 -1
  25. package/package.json +5 -2
  26. package/rolldown.cjs +1 -1
  27. package/rolldown.cjs.map +1 -1
  28. package/rolldown.js +1 -1
  29. package/rolldown.js.map +1 -1
  30. package/rollup.cjs +1 -1
  31. package/rollup.cjs.map +1 -1
  32. package/rollup.js +1 -1
  33. package/rollup.js.map +1 -1
  34. package/rspack.cjs +1 -1
  35. package/rspack.cjs.map +1 -1
  36. package/rspack.js +1 -1
  37. package/rspack.js.map +1 -1
  38. package/vite.cjs +1 -1
  39. package/vite.cjs.map +1 -1
  40. package/vite.js +1 -1
  41. package/vite.js.map +1 -1
  42. package/webpack.cjs +1 -1
  43. package/webpack.cjs.map +1 -1
  44. package/webpack.js +1 -1
  45. package/webpack.js.map +1 -1
  46. package/chunk-GR7J76HM.cjs.map +0 -1
  47. package/chunk-O6MPSBAL.cjs.map +0 -1
  48. package/chunk-R3Y6TVVS.js.map +0 -1
  49. package/chunk-ZZFJJORV.js.map +0 -1
package/babel.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkO6MPSBALcjs = require('./chunk-O6MPSBAL.cjs');exports.default = _chunkO6MPSBALcjs.f;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkTCJABTWKcjs = require('./chunk-TCJABTWK.cjs');exports.default = _chunkTCJABTWKcjs.f;
2
2
  //# sourceMappingURL=babel.cjs.map
package/babel.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/babel.cjs"],"names":[],"mappings":"AAAA,iIAAwC,sCAAqB","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/babel.cjs"}
1
+ {"version":3,"sources":["/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/babel.cjs"],"names":[],"mappings":"AAAA,iIAAwC,sCAAqB","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/babel.cjs"}
package/babel.js CHANGED
@@ -1,2 +1,2 @@
1
- import{f as a}from"./chunk-ZZFJJORV.js";export{a as default};
1
+ import{f as a}from"./chunk-D2NWA2J7.js";export{a as default};
2
2
  //# sourceMappingURL=babel.js.map
@@ -1,2 +1,2 @@
1
1
  import*as m from"@babel/standalone";import{transpileFn as k}from"tinyest-for-wgsl";function f(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function y(e,n){let t="",r=n;for(;;)if(r.type==="MemberExpression"){if(r.property.type!=="Identifier")break;t=t?`${r.property.name}.${t}`:r.property.name,r=r.object}else if(r.type==="Identifier"){t=t?`${r.name}.${t}`:r.name;break}else break;return e.tgpuAliases.has(t)}var A=/import.*from\s*['"]typegpu.*['"]/,D=/import\s*\(\s*['"]\s*typegpu.*['"]/,F=/require\s*\(\s*['"]\s*typegpu.*['"]\s*\)/;function b(e,n,t){if(t&&!(e!=null&&e.include)){if(!A.test(t)&&!F.test(t)&&!D.test(t))return!0}else if(e!=null&&e.include&&e.include!=="all"&&(!n||!e.include.some(r=>r.test(n))))return!0;return!1}function x(e,n){if(e.source.value==="typegpu")for(let t of e.specifiers)t.type==="ImportDefaultSpecifier"||t.type==="ImportSpecifier"&&t.imported.type==="Identifier"&&t.imported.name==="tgpu"?n.tgpuAliases.add(t.local.name):t.type==="ImportNamespaceSpecifier"&&n.tgpuAliases.add(`${t.local.name}.tgpu`)}var T=["fn","vertexFn","fragmentFn","computeFn"];function v(e,n){return e.callee.type==="CallExpression"&&e.callee.callee.type==="MemberExpression"&&e.callee.callee.property.type==="Identifier"&&T.includes(e.callee.callee.property.name)&&e.arguments.length===1&&(e.callee.callee.object.type==="MemberExpression"?y(n,e.callee.callee.object.object):y(n,e.callee.callee.object))||e.callee.type==="MemberExpression"&&e.arguments.length===1&&e.callee.property.type==="Identifier"&&e.callee.property.name==="does"}var E=["kernel","kernel & js"];var c=m.packages.template,s=m.packages.types;function I(e){var t,r;let n=("directives"in e.body?(r=(t=e.body)==null?void 0:t.directives)!=null?r:[]:[]).map(i=>i.value.value);for(let i of E)if(n.includes(i))return i}function d(e,n,t){var p;let r=I(e);if(!r)return null;let{argNames:i,body:o,externalNames:a}=k(e),l=n.tgpuAliases.values().next().value;if(l===void 0)throw new Error(`No tgpu import found, cannot assign ast to function in file: ${(p=n.fileId)!=null?p:""}`);return s.callExpression(c.expression(`${l}.__assignAst`)(),[r==="kernel & js"?e:c.expression`${l}.__removedJsImpl(${t?`"${t}"`:""})`(),c.expression`${f({argNames:i,body:o,externalNames:a})}`(),s.objectExpression(a.map(u=>s.objectProperty(s.identifier(u),s.identifier(u))))])}function C(e){return{ImportDeclaration(n){x(n.node,e)},ArrowFunctionExpression(n){let t=d(n.node,e,n.parentPath.node.type==="VariableDeclarator"&&n.parentPath.node.id.type==="Identifier"?n.parentPath.node.id.name:void 0);t&&(n.replaceWith(t),n.skip())},FunctionExpression(n){var r;let t=d(n.node,e,(r=n.node.id)!=null&&r.name?n.node.id.name:n.parentPath.node.type==="VariableDeclarator"&&n.parentPath.node.id.type==="Identifier"?n.parentPath.node.id.name:void 0);t&&(n.replaceWith(t),n.skip())},FunctionDeclaration(n){var o;let t=n.node,r=s.functionExpression(t.id,t.params,t.body),i=d(r,e,(o=t.id)==null?void 0:o.name);i&&t.id&&(n.replaceWith(s.variableDeclaration("const",[s.variableDeclarator(t.id,i)])),n.skip())},CallExpression(n){var r;let t=n.node;if(v(t,e)){let i=t.arguments[0];if(i&&(i.type==="FunctionExpression"||i.type==="ArrowFunctionExpression")){let{argNames:o,body:a,externalNames:l}=k(i),p=e.tgpuAliases.values().next().value;if(p===void 0)throw new Error(`No tgpu import found, cannot assign ast to function in file: ${(r=e.fileId)!=null?r:""}`);let u=I(i);n.replaceWith(s.callExpression(t.callee,[s.callExpression(c.expression(`${p}.__assignAst`)(),[u!=="kernel & js"?c.expression`${p}.__removedJsImpl()`():i,c.expression`${f({argNames:o,body:a,externalNames:l})}`(),s.objectExpression(l.map(g=>s.objectProperty(s.identifier(g),s.identifier(g))))])])),n.skip()}}}}}function P(){return{visitor:{Program(e,n){var a;let t=(a=n.file)==null?void 0:a.code,r=n.opts,i=n.filename;if(b(r,i,t))return;let o={tgpuAliases:new Set(r!=null&&r.forceTgpuAlias?[r.forceTgpuAlias]:[]),fileId:i};e.traverse(C(o))}}}}export{f as a,b,x as c,v as d,E as e,P as f};
2
- //# sourceMappingURL=chunk-ZZFJJORV.js.map
2
+ //# sourceMappingURL=chunk-D2NWA2J7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/babel.ts","../src/common.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 { transpileFn } from 'tinyest-for-wgsl';\nimport {\n type Context,\n type KernelDirective,\n type TypegpuPluginOptions,\n embedJSON,\n gatherTgpuAliases,\n isShellImplementationCall,\n kernelDirectives,\n shouldSkipFile,\n} from './common.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 getKernelDirective(\n node:\n | babel.FunctionDeclaration\n | babel.FunctionExpression\n | babel.ArrowFunctionExpression,\n): KernelDirective | undefined {\n const directives = (\n 'directives' in node.body ? (node.body?.directives ?? []) : []\n ).map((directive) => directive.value.value);\n\n for (const directive of kernelDirectives) {\n if (directives.includes(directive)) {\n return directive;\n }\n }\n}\n\nfunction functionToTranspiled(\n node: babel.ArrowFunctionExpression | babel.FunctionExpression,\n ctx: Context,\n name?: string | undefined,\n): babel.CallExpression | null {\n const directive = getKernelDirective(node);\n if (!directive) {\n return null;\n }\n\n const { argNames, body, externalNames } = transpileFn(node);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n if (tgpuAlias === undefined) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${ctx.fileId ?? ''}`,\n );\n }\n\n return types.callExpression(\n template.expression(`${tgpuAlias}.__assignAst`)(),\n [\n directive === 'kernel & js'\n ? node\n : template.expression`${tgpuAlias}.__removedJsImpl(${name ? `\"${name}\"` : ''})`(),\n template.expression`${embedJSON({ argNames, body, externalNames })}`(),\n types.objectExpression(\n externalNames.map((name) =>\n types.objectProperty(types.identifier(name), types.identifier(name)),\n ),\n ),\n ],\n );\n}\n\nfunction functionVisitor(ctx: Context): TraverseOptions {\n return {\n ImportDeclaration(path) {\n gatherTgpuAliases(path.node, ctx);\n },\n\n ArrowFunctionExpression(path) {\n const transpiled = functionToTranspiled(\n path.node,\n ctx,\n path.parentPath.node.type === 'VariableDeclarator'\n ? path.parentPath.node.id.type === 'Identifier'\n ? path.parentPath.node.id.name\n : undefined\n : undefined,\n );\n if (transpiled) {\n path.replaceWith(transpiled);\n path.skip();\n }\n },\n\n FunctionExpression(path) {\n const transpiled = functionToTranspiled(\n path.node,\n ctx,\n path.node.id?.name\n ? path.node.id.name\n : path.parentPath.node.type === 'VariableDeclarator'\n ? path.parentPath.node.id.type === 'Identifier'\n ? path.parentPath.node.id.name\n : undefined\n : undefined,\n );\n if (transpiled) {\n path.replaceWith(transpiled);\n path.skip();\n }\n },\n\n FunctionDeclaration(path) {\n const node = path.node;\n const expression = types.functionExpression(\n node.id,\n node.params,\n node.body,\n );\n const transpiled = functionToTranspiled(expression, ctx, node.id?.name);\n if (transpiled && node.id) {\n path.replaceWith(\n types.variableDeclaration('const', [\n types.variableDeclarator(node.id, transpiled),\n ]),\n );\n path.skip();\n }\n },\n\n CallExpression(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 { argNames, body, externalNames } = transpileFn(implementation);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n if (tgpuAlias === undefined) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${ctx.fileId ?? ''}`,\n );\n }\n\n const directive = getKernelDirective(implementation);\n\n path.replaceWith(\n types.callExpression(node.callee, [\n types.callExpression(\n template.expression(`${tgpuAlias}.__assignAst`)(),\n [\n directive !== 'kernel & js'\n ? template.expression`${tgpuAlias}.__removedJsImpl()`()\n : implementation,\n template.expression`${embedJSON({ argNames, body, externalNames })}`(),\n types.objectExpression(\n externalNames.map((name) =>\n types.objectProperty(\n types.identifier(name),\n types.identifier(name),\n ),\n ),\n ),\n ],\n ),\n ]),\n );\n\n path.skip();\n }\n }\n },\n };\n}\n\nexport default function () {\n return {\n visitor: {\n Program(path, state) {\n // @ts-ignore\n const code: string | undefined = state.file?.code;\n // @ts-ignore\n const options: TypegpuPluginOptions | undefined = state.opts;\n // @ts-ignore\n const id: string | undefined = state.filename;\n\n if (shouldSkipFile(options, id, code)) {\n return;\n }\n\n const ctx: Context = {\n tgpuAliases: new Set<string>(\n options?.forceTgpuAlias ? [options.forceTgpuAlias] : [],\n ),\n fileId: id,\n };\n\n path.traverse(functionVisitor(ctx));\n },\n } satisfies TraverseOptions,\n };\n}\n","import type * as babel from '@babel/types';\nimport type * as acorn from 'acorn';\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};\n\nexport interface TypegpuPluginOptions {\n include?: 'all' | RegExp[];\n forceTgpuAlias?: string;\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 (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\nconst typegpuImportRegex = /import.*from\\s*['\"]typegpu.*['\"]/;\nconst typegpuDynamicImportRegex = /import\\s*\\(\\s*['\"]\\s*typegpu.*['\"]/;\nconst typegpuRequireRegex = /require\\s*\\(\\s*['\"]\\s*typegpu.*['\"]\\s*\\)/;\n\nexport function shouldSkipFile(\n options: TypegpuPluginOptions | undefined,\n id: string | undefined,\n code: string | undefined,\n) {\n if (code && !options?.include) {\n if (\n !typegpuImportRegex.test(code) &&\n !typegpuRequireRegex.test(code) &&\n !typegpuDynamicImportRegex.test(code)\n ) {\n // No imports to `typegpu` or its sub modules, exiting early.\n return true;\n }\n } else if (\n options?.include &&\n options.include !== 'all' &&\n (!id || !options.include.some((pattern) => pattern.test(id)))\n ) {\n return true;\n }\n\n return false;\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 &&\n (node.callee.callee.object.type === 'MemberExpression'\n ? isTgpu(ctx, node.callee.callee.object.object)\n : isTgpu(ctx, node.callee.callee.object))) || // TODO: remove along with the deprecated 'does' method\n (node.callee.type === 'MemberExpression' &&\n node.arguments.length === 1 &&\n node.callee.property.type === 'Identifier' &&\n // Assuming that every call to `.does` is related to TypeGPU\n // because shells can be created separately from calls to `tgpu`,\n // making it hard to detect.\n node.callee.property.name === 'does')\n );\n}\n\nexport const kernelDirectives = ['kernel', 'kernel & js'] as const;\nexport type KernelDirective = (typeof kernelDirectives)[number];\n"],"mappings":"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","names":["Babel","transpileFn","embedJSON","jsValue","isTgpu","ctx","node","path","tail","typegpuImportRegex","typegpuDynamicImportRegex","typegpuRequireRegex","shouldSkipFile","options","id","code","pattern","gatherTgpuAliases","spec","fnShellFunctionNames","isShellImplementationCall","kernelDirectives","template","types","getKernelDirective","node","_a","_b","directives","directive","kernelDirectives","functionToTranspiled","ctx","name","argNames","body","externalNames","transpileFn","tgpuAlias","embedJSON","functionVisitor","path","gatherTgpuAliases","transpiled","expression","isShellImplementationCall","implementation","babel_default","state","code","options","id","shouldSkipFile"]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkO6MPSBALcjs = require('./chunk-O6MPSBAL.cjs');var _estreewalker = require('estree-walker');var _magicstring = require('magic-string'); var _magicstring2 = _interopRequireDefault(_magicstring);var _tinyestforwgsl = require('tinyest-for-wgsl');var _unplugin = require('unplugin');function w(o){if(o.body.type==="BlockStatement"){for(let t of o.body.body)if(t.type==="ExpressionStatement"&&_chunkO6MPSBALcjs.e.includes(t.directive))return t.directive}}function h(o){return o.body.type==="BlockStatement"&&(o.body.body=o.body.body.filter(t=>!(t.type==="ExpressionStatement"&&t.directive&&_chunkO6MPSBALcjs.e.includes(t.directive)))),o}var S=(o={})=>({name:"unplugin-typegpu",transform(t,c){if(_chunkO6MPSBALcjs.b.call(void 0, o,c,t))return;let u={tgpuAliases:new Set(o.forceTgpuAlias?[o.forceTgpuAlias]:[]),fileId:c},D=this.parse(t,{allowReturnOutsideFunction:!0}),l=[];_estreewalker.walk.call(void 0, D,{enter(r,n,d,g){var a;let e=r;if(e.type==="ImportDeclaration"&&_chunkO6MPSBALcjs.c.call(void 0, e,u),e.type==="CallExpression"&&_chunkO6MPSBALcjs.d.call(void 0, e,u)){let i=e.arguments[0];if(i&&(i.type==="FunctionExpression"||i.type==="ArrowFunctionExpression")){let $=w(i);l.push({def:h(i),removeJsImplementation:$!=="kernel & js"})}}if(e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration"){let i=w(e);i&&l.push({def:h(e),name:e.type==="FunctionDeclaration"||e.type==="FunctionExpression"?(a=e.id)==null?void 0:a.name:(n==null?void 0:n.type)==="VariableDeclarator"&&n.id.type==="Identifier"?n.id.name:void 0,removeJsImplementation:i!=="kernel & js"})}}});let p=new (0, _magicstring2.default)(t),m=u.tgpuAliases.values().next().value;if(m===void 0&&l.length>0)throw new Error(`No tgpu import found, cannot assign ast to function in file: ${c}`);for(let{def:r,name:n,removeJsImplementation:d}of l){let{argNames:g,body:e,externalNames:a}=_tinyestforwgsl.transpileFn.call(void 0, r),i=r.type==="FunctionDeclaration";if(i&&n&&t.slice(0,r.start).search(new RegExp(`(?<![\\w_.])${n}(?![\\w_])`))!==-1)throw new Error(`File ${c}: function "${n}", containing ${d?"kernel":"kernel & js"} directive, is referenced before its usage. Function statements are no longer hoisted after being transformed by the plugin.`);p.appendLeft(r.start,`${i&&n?`const ${n} = `:""}${m}.__assignAst(`),p.appendRight(r.end,`, ${_chunkO6MPSBALcjs.a.call(void 0, {argNames:g,body:e,externalNames:a})}`),a.length>0?p.appendRight(r.end,`, {${a.join(", ")}})`):p.appendRight(r.end,`)${i&&n?";":""}`),d&&p.overwrite(r.start,r.end,`${m}.__removedJsImpl(${n?`"${n}"`:""})`)}return{code:p.toString(),map:p.generateMap()}}}),s=_unplugin.createUnplugin.call(void 0, S),R= exports.a =s,j= exports.b =s.vite,C= exports.c =s.rollup,U= exports.d =s.rolldown,B= exports.e =s.webpack,M= exports.f =s.rspack,L= exports.g =s.esbuild,V= exports.h =s.farm,q= exports.i =_chunkO6MPSBALcjs.f;exports.a = R; exports.b = j; exports.c = C; exports.d = U; exports.e = B; exports.f = M; exports.g = L; exports.h = V; exports.i = q;
2
- //# sourceMappingURL=chunk-GR7J76HM.cjs.map
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkTCJABTWKcjs = require('./chunk-TCJABTWK.cjs');var _estreewalker = require('estree-walker');var _magicstring = require('magic-string'); var _magicstring2 = _interopRequireDefault(_magicstring);var _tinyestforwgsl = require('tinyest-for-wgsl');var _unplugin = require('unplugin');function w(o){if(o.body.type==="BlockStatement"){for(let t of o.body.body)if(t.type==="ExpressionStatement"&&_chunkTCJABTWKcjs.e.includes(t.directive))return t.directive}}function h(o){return o.body.type==="BlockStatement"&&(o.body.body=o.body.body.filter(t=>!(t.type==="ExpressionStatement"&&t.directive&&_chunkTCJABTWKcjs.e.includes(t.directive)))),o}var S=(o={})=>({name:"unplugin-typegpu",transform(t,c){if(_chunkTCJABTWKcjs.b.call(void 0, o,c,t))return;let u={tgpuAliases:new Set(o.forceTgpuAlias?[o.forceTgpuAlias]:[]),fileId:c},D=this.parse(t,{allowReturnOutsideFunction:!0}),l=[];_estreewalker.walk.call(void 0, D,{enter(r,n,d,g){var a;let e=r;if(e.type==="ImportDeclaration"&&_chunkTCJABTWKcjs.c.call(void 0, e,u),e.type==="CallExpression"&&_chunkTCJABTWKcjs.d.call(void 0, e,u)){let i=e.arguments[0];if(i&&(i.type==="FunctionExpression"||i.type==="ArrowFunctionExpression")){let $=w(i);l.push({def:h(i),removeJsImplementation:$!=="kernel & js"})}}if(e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration"){let i=w(e);i&&l.push({def:h(e),name:e.type==="FunctionDeclaration"||e.type==="FunctionExpression"?(a=e.id)==null?void 0:a.name:(n==null?void 0:n.type)==="VariableDeclarator"&&n.id.type==="Identifier"?n.id.name:void 0,removeJsImplementation:i!=="kernel & js"})}}});let p=new (0, _magicstring2.default)(t),m=u.tgpuAliases.values().next().value;if(m===void 0&&l.length>0)throw new Error(`No tgpu import found, cannot assign ast to function in file: ${c}`);for(let{def:r,name:n,removeJsImplementation:d}of l){let{argNames:g,body:e,externalNames:a}=_tinyestforwgsl.transpileFn.call(void 0, r),i=r.type==="FunctionDeclaration";if(i&&n&&t.slice(0,r.start).search(new RegExp(`(?<![\\w_.])${n}(?![\\w_])`))!==-1)throw new Error(`File ${c}: function "${n}", containing ${d?"kernel":"kernel & js"} directive, is referenced before its usage. Function statements are no longer hoisted after being transformed by the plugin.`);p.appendLeft(r.start,`${i&&n?`const ${n} = `:""}${m}.__assignAst(`),p.appendRight(r.end,`, ${_chunkTCJABTWKcjs.a.call(void 0, {argNames:g,body:e,externalNames:a})}`),a.length>0?p.appendRight(r.end,`, {${a.join(", ")}})`):p.appendRight(r.end,`)${i&&n?";":""}`),d&&p.overwrite(r.start,r.end,`${m}.__removedJsImpl(${n?`"${n}"`:""})`)}return{code:p.toString(),map:p.generateMap()}}}),s=_unplugin.createUnplugin.call(void 0, S),R= exports.a =s,j= exports.b =s.vite,C= exports.c =s.rollup,U= exports.d =s.rolldown,B= exports.e =s.webpack,M= exports.f =s.rspack,L= exports.g =s.esbuild,V= exports.h =s.farm,q= exports.i =_chunkTCJABTWKcjs.f;exports.a = R; exports.b = j; exports.c = C; exports.d = U; exports.e = B; exports.f = M; exports.g = L; exports.h = V; exports.i = q;
2
+ //# sourceMappingURL=chunk-IA2CUGWD.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/chunk-IA2CUGWD.cjs","../src/index.ts"],"names":["getKernelDirective","node","statement","kernelDirectives","removeKernelDirective","typegpu","options","code","id","shouldSkipFile","ctx","ast","tgslFunctionDefs","walk","_node","_parent","prop","index","_a","gatherTgpuAliases","isShellImplementationCall","implementation","directive","magicString","MagicString","tgpuAlias"],"mappings":"AAAA,iOAA2E,6CCC3C,qGACR,kDACI,oCACyB,SAmB5CA,CAAAA,CAAmBC,CAAAA,CAAiD,CAC3E,EAAA,CAAIA,CAAAA,CAAK,IAAA,CAAK,IAAA,GAAS,gBAAA,CAAA,CACrB,GAAA,CAAA,IAAWC,EAAAA,GAAaD,CAAAA,CAAK,IAAA,CAAK,IAAA,CAChC,EAAA,CAAIC,CAAAA,CAAU,IAAA,GAAS,qBAAA,EACjBC,mBAAAA,CAAiB,QAAA,CAASD,CAAAA,CAAU,SAA4B,CAAA,CAClE,OAAOA,CAAAA,CAAU,SAAA,CAK3B,CAEA,SAASE,CAAAA,CAAsBH,CAAAA,CAAoB,CACjD,OAAIA,CAAAA,CAAK,IAAA,CAAK,IAAA,GAAS,gBAAA,EAAA,CACrBA,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,CAC7BC,CAAAA,EACC,CAAA,CACEA,CAAAA,CAAU,IAAA,GAAS,qBAAA,EACnBA,CAAAA,CAAU,SAAA,EACVC,mBAAAA,CAAiB,QAAA,CAASD,CAAAA,CAAU,SAA4B,CAAA,CAEtE,CAAA,CAAA,CAGKD,CACT,CAEA,IAAMI,CAAAA,CAAiD,CACrDC,CAAAA,CAAgC,CAAC,CAAA,CAAA,EAAA,CAC7B,CACJ,IAAA,CAAM,kBAAA,CACN,SAAA,CAAUC,CAAAA,CAAMC,CAAAA,CAAI,CAClB,EAAA,CAAIC,iCAAAA,CAAeH,CAASE,CAAAA,CAAID,CAAI,CAAA,CAClC,MAAA,CAGF,IAAMG,CAAAA,CAAe,CACnB,WAAA,CAAa,IAAI,GAAA,CACfJ,CAAAA,CAAQ,cAAA,CAAiB,CAACA,CAAAA,CAAQ,cAAc,CAAA,CAAI,CAAC,CACvD,CAAA,CACA,MAAA,CAAQE,CACV,CAAA,CAEMG,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMJ,CAAAA,CAAM,CAC3B,0BAAA,CAA4B,CAAA,CAC9B,CAAC,CAAA,CAEKK,CAAAA,CAIA,CAAC,CAAA,CAEPC,gCAAAA,CAAKF,CAAK,CACR,KAAA,CAAMG,CAAAA,CAAOC,CAAAA,CAASC,CAAAA,CAAMC,CAAAA,CAAO,CA7EzC,IAAAC,CAAAA,CA8EQ,IAAMjB,CAAAA,CAAOa,CAAAA,CAMb,EAAA,CAJIb,CAAAA,CAAK,IAAA,GAAS,mBAAA,EAChBkB,iCAAAA,CAAkBlB,CAAMS,CAAG,CAAA,CAGzBT,CAAAA,CAAK,IAAA,GAAS,gBAAA,EACZmB,iCAAAA,CAA0BnB,CAAMS,CAAG,CAAA,CAAG,CACxC,IAAMW,CAAAA,CAAiBpB,CAAAA,CAAK,SAAA,CAAU,CAAC,CAAA,CAEvC,EAAA,CACEoB,CAAAA,EAAAA,CACCA,CAAAA,CAAe,IAAA,GAAS,oBAAA,EACvBA,CAAAA,CAAe,IAAA,GAAS,yBAAA,CAAA,CAC1B,CACA,IAAMC,CAAAA,CAAYtB,CAAAA,CAAmBqB,CAAc,CAAA,CACnDT,CAAAA,CAAiB,IAAA,CAAK,CACpB,GAAA,CAAKR,CAAAA,CAAsBiB,CAAc,CAAA,CACzC,sBAAA,CAAwBC,CAAAA,GAAc,aACxC,CAAC,CACH,CACF,CAGF,EAAA,CACErB,CAAAA,CAAK,IAAA,GAAS,yBAAA,EACdA,CAAAA,CAAK,IAAA,GAAS,oBAAA,EACdA,CAAAA,CAAK,IAAA,GAAS,qBAAA,CACd,CACA,IAAMqB,CAAAA,CAAYtB,CAAAA,CAAmBC,CAAI,CAAA,CACrCqB,CAAAA,EACFV,CAAAA,CAAiB,IAAA,CAAK,CACpB,GAAA,CAAKR,CAAAA,CAAsBH,CAAI,CAAA,CAC/B,IAAA,CACEA,CAAAA,CAAK,IAAA,GAAS,qBAAA,EACdA,CAAAA,CAAK,IAAA,GAAS,oBAAA,CAAA,CACViB,CAAAA,CAAAjB,CAAAA,CAAK,EAAA,CAAA,EAAL,IAAA,CAAA,KAAA,CAAA,CAAAiB,CAAAA,CAAS,IAAA,CAAA,CACTH,CAAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,CAAAA,CAAS,IAAA,CAAA,GAAS,oBAAA,EAChBA,CAAAA,CAAQ,EAAA,CAAG,IAAA,GAAS,YAAA,CAClBA,CAAAA,CAAQ,EAAA,CAAG,IAAA,CAEb,KAAA,CAAA,CACR,sBAAA,CAAwBO,CAAAA,GAAc,aACxC,CAAC,CAEL,CACF,CACF,CAAC,CAAA,CAED,IAAMC,CAAAA,CAAc,IAAIC,0BAAAA,CAAYjB,CAAI,CAAA,CAClCkB,CAAAA,CAAYf,CAAAA,CAAI,WAAA,CAAY,MAAA,CAAO,CAAA,CAAE,IAAA,CAAK,CAAA,CAAE,KAAA,CAElD,EAAA,CAAIe,CAAAA,GAAc,KAAA,CAAA,EAAab,CAAAA,CAAiB,MAAA,CAAS,CAAA,CACvD,MAAM,IAAI,KAAA,CACR,CAAA,6DAAA,EAAgEJ,CAAE,CAAA,CAAA","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/chunk-IA2CUGWD.cjs","sourcesContent":[null,"import type * as acorn from 'acorn';\nimport { type Node, walk } from 'estree-walker';\nimport MagicString from 'magic-string';\nimport { transpileFn } from 'tinyest-for-wgsl';\nimport { type UnpluginFactory, createUnplugin } from 'unplugin';\nimport babel from './babel.ts';\nimport {\n type Context,\n type KernelDirective,\n type TypegpuPluginOptions,\n embedJSON,\n gatherTgpuAliases,\n isShellImplementationCall,\n kernelDirectives,\n shouldSkipFile,\n} from './common.ts';\n\ntype FunctionNode =\n | acorn.FunctionDeclaration\n | acorn.AnonymousFunctionDeclaration\n | acorn.FunctionExpression\n | acorn.ArrowFunctionExpression;\n\nfunction getKernelDirective(node: FunctionNode): KernelDirective | undefined {\n if (node.body.type === 'BlockStatement') {\n for (const statement of node.body.body) {\n if (statement.type === 'ExpressionStatement') {\n if (kernelDirectives.includes(statement.directive as KernelDirective)) {\n return statement.directive as KernelDirective;\n }\n }\n }\n }\n}\n\nfunction removeKernelDirective(node: FunctionNode) {\n if (node.body.type === 'BlockStatement') {\n node.body.body = node.body.body.filter(\n (statement) =>\n !(\n statement.type === 'ExpressionStatement' &&\n statement.directive &&\n kernelDirectives.includes(statement.directive as KernelDirective)\n ),\n );\n }\n\n return node;\n}\n\nconst typegpu: UnpluginFactory<TypegpuPluginOptions> = (\n options: TypegpuPluginOptions = {},\n) => ({\n name: 'unplugin-typegpu' as const,\n transform(code, id) {\n if (shouldSkipFile(options, id, code)) {\n return;\n }\n\n const ctx: Context = {\n tgpuAliases: new Set<string>(\n options.forceTgpuAlias ? [options.forceTgpuAlias] : [],\n ),\n fileId: id,\n };\n\n const ast = this.parse(code, {\n allowReturnOutsideFunction: true,\n }) as Node;\n\n const tgslFunctionDefs: {\n def: FunctionNode;\n name?: string | undefined;\n removeJsImplementation: boolean;\n }[] = [];\n\n walk(ast, {\n enter(_node, _parent, prop, index) {\n const node = _node as acorn.AnyNode;\n\n if (node.type === 'ImportDeclaration') {\n gatherTgpuAliases(node, ctx);\n }\n\n if (node.type === 'CallExpression') {\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 directive = getKernelDirective(implementation);\n tgslFunctionDefs.push({\n def: removeKernelDirective(implementation),\n removeJsImplementation: directive !== 'kernel & js',\n });\n }\n }\n }\n\n if (\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionExpression' ||\n node.type === 'FunctionDeclaration'\n ) {\n const directive = getKernelDirective(node);\n if (directive) {\n tgslFunctionDefs.push({\n def: removeKernelDirective(node),\n name:\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression'\n ? node.id?.name\n : _parent?.type === 'VariableDeclarator'\n ? _parent.id.type === 'Identifier'\n ? _parent.id.name\n : undefined\n : undefined,\n removeJsImplementation: directive !== 'kernel & js',\n });\n }\n }\n },\n });\n\n const magicString = new MagicString(code);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n\n if (tgpuAlias === undefined && tgslFunctionDefs.length > 0) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${id}`,\n );\n }\n\n for (const { def, name, removeJsImplementation } of tgslFunctionDefs) {\n const { argNames, body, externalNames } = transpileFn(def);\n const isFunctionStatement = def.type === 'FunctionDeclaration';\n\n if (\n isFunctionStatement &&\n name &&\n code\n .slice(0, def.start)\n .search(new RegExp(`(?<![\\\\w_.])${name}(?![\\\\w_])`)) !== -1\n ) {\n throw new Error(\n `File ${id}: function \"${name}\", containing ${removeJsImplementation ? 'kernel' : 'kernel & js'} directive, is referenced before its usage. Function statements are no longer hoisted after being transformed by the plugin.`,\n );\n }\n\n // Wrap the implementation in a call to `tgpu.__assignAst` to associate the AST with the implementation.\n magicString.appendLeft(\n def.start,\n `${isFunctionStatement && name ? `const ${name} = ` : ''}${tgpuAlias}.__assignAst(`,\n );\n magicString.appendRight(\n def.end,\n `, ${embedJSON({ argNames, body, externalNames })}`,\n );\n\n if (externalNames.length > 0) {\n magicString.appendRight(def.end, `, {${externalNames.join(', ')}})`);\n } else {\n magicString.appendRight(\n def.end,\n `)${isFunctionStatement && name ? ';' : ''}`,\n );\n }\n\n if (removeJsImplementation) {\n magicString.overwrite(\n def.start,\n def.end,\n `${tgpuAlias}.__removedJsImpl(${name ? `\"${name}\"` : ''})`,\n );\n }\n }\n\n return {\n code: magicString.toString(),\n map: magicString.generateMap(),\n };\n },\n});\n\nconst unplugin = createUnplugin(typegpu);\n\nexport type { TypegpuPluginOptions } from './common.ts';\n\nexport default unplugin;\n\nexport const vitePlugin = unplugin.vite;\nexport const rollupPlugin = unplugin.rollup;\nexport const rolldownPlugin = unplugin.rolldown;\nexport const webpackPlugin = unplugin.webpack;\nexport const rspackPlugin = unplugin.rspack;\nexport const esbuildPlugin = unplugin.esbuild;\nexport const farmPlugin = unplugin.farm;\nexport const babelPlugin = babel;\n"]}
@@ -1,2 +1,2 @@
1
- import{a as y,b as x,c as v,d as F,e as f,f as b}from"./chunk-ZZFJJORV.js";import{walk as k}from"estree-walker";import E from"magic-string";import{transpileFn as A}from"tinyest-for-wgsl";import{createUnplugin as P}from"unplugin";function w(o){if(o.body.type==="BlockStatement"){for(let t of o.body.body)if(t.type==="ExpressionStatement"&&f.includes(t.directive))return t.directive}}function h(o){return o.body.type==="BlockStatement"&&(o.body.body=o.body.body.filter(t=>!(t.type==="ExpressionStatement"&&t.directive&&f.includes(t.directive)))),o}var S=(o={})=>({name:"unplugin-typegpu",transform(t,c){if(x(o,c,t))return;let u={tgpuAliases:new Set(o.forceTgpuAlias?[o.forceTgpuAlias]:[]),fileId:c},D=this.parse(t,{allowReturnOutsideFunction:!0}),l=[];k(D,{enter(r,n,d,g){var a;let e=r;if(e.type==="ImportDeclaration"&&v(e,u),e.type==="CallExpression"&&F(e,u)){let i=e.arguments[0];if(i&&(i.type==="FunctionExpression"||i.type==="ArrowFunctionExpression")){let $=w(i);l.push({def:h(i),removeJsImplementation:$!=="kernel & js"})}}if(e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration"){let i=w(e);i&&l.push({def:h(e),name:e.type==="FunctionDeclaration"||e.type==="FunctionExpression"?(a=e.id)==null?void 0:a.name:(n==null?void 0:n.type)==="VariableDeclarator"&&n.id.type==="Identifier"?n.id.name:void 0,removeJsImplementation:i!=="kernel & js"})}}});let p=new E(t),m=u.tgpuAliases.values().next().value;if(m===void 0&&l.length>0)throw new Error(`No tgpu import found, cannot assign ast to function in file: ${c}`);for(let{def:r,name:n,removeJsImplementation:d}of l){let{argNames:g,body:e,externalNames:a}=A(r),i=r.type==="FunctionDeclaration";if(i&&n&&t.slice(0,r.start).search(new RegExp(`(?<![\\w_.])${n}(?![\\w_])`))!==-1)throw new Error(`File ${c}: function "${n}", containing ${d?"kernel":"kernel & js"} directive, is referenced before its usage. Function statements are no longer hoisted after being transformed by the plugin.`);p.appendLeft(r.start,`${i&&n?`const ${n} = `:""}${m}.__assignAst(`),p.appendRight(r.end,`, ${y({argNames:g,body:e,externalNames:a})}`),a.length>0?p.appendRight(r.end,`, {${a.join(", ")}})`):p.appendRight(r.end,`)${i&&n?";":""}`),d&&p.overwrite(r.start,r.end,`${m}.__removedJsImpl(${n?`"${n}"`:""})`)}return{code:p.toString(),map:p.generateMap()}}}),s=P(S),R=s,j=s.vite,C=s.rollup,U=s.rolldown,B=s.webpack,M=s.rspack,L=s.esbuild,V=s.farm,q=b;export{R as a,j as b,C as c,U as d,B as e,M as f,L as g,V as h,q as i};
2
- //# sourceMappingURL=chunk-R3Y6TVVS.js.map
1
+ import{a as y,b as x,c as v,d as F,e as f,f as b}from"./chunk-D2NWA2J7.js";import{walk as k}from"estree-walker";import E from"magic-string";import{transpileFn as A}from"tinyest-for-wgsl";import{createUnplugin as P}from"unplugin";function w(o){if(o.body.type==="BlockStatement"){for(let t of o.body.body)if(t.type==="ExpressionStatement"&&f.includes(t.directive))return t.directive}}function h(o){return o.body.type==="BlockStatement"&&(o.body.body=o.body.body.filter(t=>!(t.type==="ExpressionStatement"&&t.directive&&f.includes(t.directive)))),o}var S=(o={})=>({name:"unplugin-typegpu",transform(t,c){if(x(o,c,t))return;let u={tgpuAliases:new Set(o.forceTgpuAlias?[o.forceTgpuAlias]:[]),fileId:c},D=this.parse(t,{allowReturnOutsideFunction:!0}),l=[];k(D,{enter(r,n,d,g){var a;let e=r;if(e.type==="ImportDeclaration"&&v(e,u),e.type==="CallExpression"&&F(e,u)){let i=e.arguments[0];if(i&&(i.type==="FunctionExpression"||i.type==="ArrowFunctionExpression")){let $=w(i);l.push({def:h(i),removeJsImplementation:$!=="kernel & js"})}}if(e.type==="ArrowFunctionExpression"||e.type==="FunctionExpression"||e.type==="FunctionDeclaration"){let i=w(e);i&&l.push({def:h(e),name:e.type==="FunctionDeclaration"||e.type==="FunctionExpression"?(a=e.id)==null?void 0:a.name:(n==null?void 0:n.type)==="VariableDeclarator"&&n.id.type==="Identifier"?n.id.name:void 0,removeJsImplementation:i!=="kernel & js"})}}});let p=new E(t),m=u.tgpuAliases.values().next().value;if(m===void 0&&l.length>0)throw new Error(`No tgpu import found, cannot assign ast to function in file: ${c}`);for(let{def:r,name:n,removeJsImplementation:d}of l){let{argNames:g,body:e,externalNames:a}=A(r),i=r.type==="FunctionDeclaration";if(i&&n&&t.slice(0,r.start).search(new RegExp(`(?<![\\w_.])${n}(?![\\w_])`))!==-1)throw new Error(`File ${c}: function "${n}", containing ${d?"kernel":"kernel & js"} directive, is referenced before its usage. Function statements are no longer hoisted after being transformed by the plugin.`);p.appendLeft(r.start,`${i&&n?`const ${n} = `:""}${m}.__assignAst(`),p.appendRight(r.end,`, ${y({argNames:g,body:e,externalNames:a})}`),a.length>0?p.appendRight(r.end,`, {${a.join(", ")}})`):p.appendRight(r.end,`)${i&&n?";":""}`),d&&p.overwrite(r.start,r.end,`${m}.__removedJsImpl(${n?`"${n}"`:""})`)}return{code:p.toString(),map:p.generateMap()}}}),s=P(S),R=s,j=s.vite,C=s.rollup,U=s.rolldown,B=s.webpack,M=s.rspack,L=s.esbuild,V=s.farm,q=b;export{R as a,j as b,C as c,U as d,B as e,M as f,L as g,V as h,q as i};
2
+ //# sourceMappingURL=chunk-JKPGDPK3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type * as acorn from 'acorn';\nimport { type Node, walk } from 'estree-walker';\nimport MagicString from 'magic-string';\nimport { transpileFn } from 'tinyest-for-wgsl';\nimport { type UnpluginFactory, createUnplugin } from 'unplugin';\nimport babel from './babel.ts';\nimport {\n type Context,\n type KernelDirective,\n type TypegpuPluginOptions,\n embedJSON,\n gatherTgpuAliases,\n isShellImplementationCall,\n kernelDirectives,\n shouldSkipFile,\n} from './common.ts';\n\ntype FunctionNode =\n | acorn.FunctionDeclaration\n | acorn.AnonymousFunctionDeclaration\n | acorn.FunctionExpression\n | acorn.ArrowFunctionExpression;\n\nfunction getKernelDirective(node: FunctionNode): KernelDirective | undefined {\n if (node.body.type === 'BlockStatement') {\n for (const statement of node.body.body) {\n if (statement.type === 'ExpressionStatement') {\n if (kernelDirectives.includes(statement.directive as KernelDirective)) {\n return statement.directive as KernelDirective;\n }\n }\n }\n }\n}\n\nfunction removeKernelDirective(node: FunctionNode) {\n if (node.body.type === 'BlockStatement') {\n node.body.body = node.body.body.filter(\n (statement) =>\n !(\n statement.type === 'ExpressionStatement' &&\n statement.directive &&\n kernelDirectives.includes(statement.directive as KernelDirective)\n ),\n );\n }\n\n return node;\n}\n\nconst typegpu: UnpluginFactory<TypegpuPluginOptions> = (\n options: TypegpuPluginOptions = {},\n) => ({\n name: 'unplugin-typegpu' as const,\n transform(code, id) {\n if (shouldSkipFile(options, id, code)) {\n return;\n }\n\n const ctx: Context = {\n tgpuAliases: new Set<string>(\n options.forceTgpuAlias ? [options.forceTgpuAlias] : [],\n ),\n fileId: id,\n };\n\n const ast = this.parse(code, {\n allowReturnOutsideFunction: true,\n }) as Node;\n\n const tgslFunctionDefs: {\n def: FunctionNode;\n name?: string | undefined;\n removeJsImplementation: boolean;\n }[] = [];\n\n walk(ast, {\n enter(_node, _parent, prop, index) {\n const node = _node as acorn.AnyNode;\n\n if (node.type === 'ImportDeclaration') {\n gatherTgpuAliases(node, ctx);\n }\n\n if (node.type === 'CallExpression') {\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 directive = getKernelDirective(implementation);\n tgslFunctionDefs.push({\n def: removeKernelDirective(implementation),\n removeJsImplementation: directive !== 'kernel & js',\n });\n }\n }\n }\n\n if (\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionExpression' ||\n node.type === 'FunctionDeclaration'\n ) {\n const directive = getKernelDirective(node);\n if (directive) {\n tgslFunctionDefs.push({\n def: removeKernelDirective(node),\n name:\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression'\n ? node.id?.name\n : _parent?.type === 'VariableDeclarator'\n ? _parent.id.type === 'Identifier'\n ? _parent.id.name\n : undefined\n : undefined,\n removeJsImplementation: directive !== 'kernel & js',\n });\n }\n }\n },\n });\n\n const magicString = new MagicString(code);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n\n if (tgpuAlias === undefined && tgslFunctionDefs.length > 0) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${id}`,\n );\n }\n\n for (const { def, name, removeJsImplementation } of tgslFunctionDefs) {\n const { argNames, body, externalNames } = transpileFn(def);\n const isFunctionStatement = def.type === 'FunctionDeclaration';\n\n if (\n isFunctionStatement &&\n name &&\n code\n .slice(0, def.start)\n .search(new RegExp(`(?<![\\\\w_.])${name}(?![\\\\w_])`)) !== -1\n ) {\n throw new Error(\n `File ${id}: function \"${name}\", containing ${removeJsImplementation ? 'kernel' : 'kernel & js'} directive, is referenced before its usage. Function statements are no longer hoisted after being transformed by the plugin.`,\n );\n }\n\n // Wrap the implementation in a call to `tgpu.__assignAst` to associate the AST with the implementation.\n magicString.appendLeft(\n def.start,\n `${isFunctionStatement && name ? `const ${name} = ` : ''}${tgpuAlias}.__assignAst(`,\n );\n magicString.appendRight(\n def.end,\n `, ${embedJSON({ argNames, body, externalNames })}`,\n );\n\n if (externalNames.length > 0) {\n magicString.appendRight(def.end, `, {${externalNames.join(', ')}})`);\n } else {\n magicString.appendRight(\n def.end,\n `)${isFunctionStatement && name ? ';' : ''}`,\n );\n }\n\n if (removeJsImplementation) {\n magicString.overwrite(\n def.start,\n def.end,\n `${tgpuAlias}.__removedJsImpl(${name ? `\"${name}\"` : ''})`,\n );\n }\n }\n\n return {\n code: magicString.toString(),\n map: magicString.generateMap(),\n };\n },\n});\n\nconst unplugin = createUnplugin(typegpu);\n\nexport type { TypegpuPluginOptions } from './common.ts';\n\nexport default unplugin;\n\nexport const vitePlugin = unplugin.vite;\nexport const rollupPlugin = unplugin.rollup;\nexport const rolldownPlugin = unplugin.rolldown;\nexport const webpackPlugin = unplugin.webpack;\nexport const rspackPlugin = unplugin.rspack;\nexport const esbuildPlugin = unplugin.esbuild;\nexport const farmPlugin = unplugin.farm;\nexport const babelPlugin = babel;\n"],"mappings":"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","names":["walk","MagicString","transpileFn","createUnplugin","getKernelDirective","node","statement","kernelDirectives","removeKernelDirective","typegpu","options","code","id","shouldSkipFile","ctx","ast","tgslFunctionDefs","walk","_node","_parent","prop","index","_a","gatherTgpuAliases","isShellImplementationCall","implementation","directive","magicString","MagicString","tgpuAlias","def","name","removeJsImplementation","argNames","body","externalNames","transpileFn","isFunctionStatement","embedJSON","unplugin","createUnplugin","index_default","vitePlugin","rollupPlugin","rolldownPlugin","webpackPlugin","rspackPlugin","esbuildPlugin","farmPlugin","babelPlugin","babel_default"]}
@@ -1,2 +1,2 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var _standalone = require('@babel/standalone'); var m = _interopRequireWildcard(_standalone);var _tinyestforwgsl = require('tinyest-for-wgsl');function f(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function y(e,n){let t="",r=n;for(;;)if(r.type==="MemberExpression"){if(r.property.type!=="Identifier")break;t=t?`${r.property.name}.${t}`:r.property.name,r=r.object}else if(r.type==="Identifier"){t=t?`${r.name}.${t}`:r.name;break}else break;return e.tgpuAliases.has(t)}var A=/import.*from\s*['"]typegpu.*['"]/,D=/import\s*\(\s*['"]\s*typegpu.*['"]/,F=/require\s*\(\s*['"]\s*typegpu.*['"]\s*\)/;function b(e,n,t){if(t&&!(e!=null&&e.include)){if(!A.test(t)&&!F.test(t)&&!D.test(t))return!0}else if(e!=null&&e.include&&e.include!=="all"&&(!n||!e.include.some(r=>r.test(n))))return!0;return!1}function x(e,n){if(e.source.value==="typegpu")for(let t of e.specifiers)t.type==="ImportDefaultSpecifier"||t.type==="ImportSpecifier"&&t.imported.type==="Identifier"&&t.imported.name==="tgpu"?n.tgpuAliases.add(t.local.name):t.type==="ImportNamespaceSpecifier"&&n.tgpuAliases.add(`${t.local.name}.tgpu`)}var T=["fn","vertexFn","fragmentFn","computeFn"];function v(e,n){return e.callee.type==="CallExpression"&&e.callee.callee.type==="MemberExpression"&&e.callee.callee.property.type==="Identifier"&&T.includes(e.callee.callee.property.name)&&e.arguments.length===1&&(e.callee.callee.object.type==="MemberExpression"?y(n,e.callee.callee.object.object):y(n,e.callee.callee.object))||e.callee.type==="MemberExpression"&&e.arguments.length===1&&e.callee.property.type==="Identifier"&&e.callee.property.name==="does"}var E=["kernel","kernel & js"];var c=m.packages.template,s=m.packages.types;function I(e){var t,r;let n=("directives"in e.body?(r=(t=e.body)==null?void 0:t.directives)!=null?r:[]:[]).map(i=>i.value.value);for(let i of E)if(n.includes(i))return i}function d(e,n,t){var p;let r=I(e);if(!r)return null;let{argNames:i,body:o,externalNames:a}=_tinyestforwgsl.transpileFn.call(void 0, e),l=n.tgpuAliases.values().next().value;if(l===void 0)throw new Error(`No tgpu import found, cannot assign ast to function in file: ${(p=n.fileId)!=null?p:""}`);return s.callExpression(c.expression(`${l}.__assignAst`)(),[r==="kernel & js"?e:c.expression`${l}.__removedJsImpl(${t?`"${t}"`:""})`(),c.expression`${f({argNames:i,body:o,externalNames:a})}`(),s.objectExpression(a.map(u=>s.objectProperty(s.identifier(u),s.identifier(u))))])}function C(e){return{ImportDeclaration(n){x(n.node,e)},ArrowFunctionExpression(n){let t=d(n.node,e,n.parentPath.node.type==="VariableDeclarator"&&n.parentPath.node.id.type==="Identifier"?n.parentPath.node.id.name:void 0);t&&(n.replaceWith(t),n.skip())},FunctionExpression(n){var r;let t=d(n.node,e,(r=n.node.id)!=null&&r.name?n.node.id.name:n.parentPath.node.type==="VariableDeclarator"&&n.parentPath.node.id.type==="Identifier"?n.parentPath.node.id.name:void 0);t&&(n.replaceWith(t),n.skip())},FunctionDeclaration(n){var o;let t=n.node,r=s.functionExpression(t.id,t.params,t.body),i=d(r,e,(o=t.id)==null?void 0:o.name);i&&t.id&&(n.replaceWith(s.variableDeclaration("const",[s.variableDeclarator(t.id,i)])),n.skip())},CallExpression(n){var r;let t=n.node;if(v(t,e)){let i=t.arguments[0];if(i&&(i.type==="FunctionExpression"||i.type==="ArrowFunctionExpression")){let{argNames:o,body:a,externalNames:l}=_tinyestforwgsl.transpileFn.call(void 0, i),p=e.tgpuAliases.values().next().value;if(p===void 0)throw new Error(`No tgpu import found, cannot assign ast to function in file: ${(r=e.fileId)!=null?r:""}`);let u=I(i);n.replaceWith(s.callExpression(t.callee,[s.callExpression(c.expression(`${p}.__assignAst`)(),[u!=="kernel & js"?c.expression`${p}.__removedJsImpl()`():i,c.expression`${f({argNames:o,body:a,externalNames:l})}`(),s.objectExpression(l.map(g=>s.objectProperty(s.identifier(g),s.identifier(g))))])])),n.skip()}}}}}function P(){return{visitor:{Program(e,n){var a;let t=(a=n.file)==null?void 0:a.code,r=n.opts,i=n.filename;if(b(r,i,t))return;let o={tgpuAliases:new Set(r!=null&&r.forceTgpuAlias?[r.forceTgpuAlias]:[]),fileId:i};e.traverse(C(o))}}}}exports.a = f; exports.b = b; exports.c = x; exports.d = v; exports.e = E; exports.f = P;
2
- //# sourceMappingURL=chunk-O6MPSBAL.cjs.map
2
+ //# sourceMappingURL=chunk-TCJABTWK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/babel.ts","../src/common.ts"],"names":["embedJSON","jsValue","isTgpu","ctx","node","path","tail"],"mappings":"AAAA,wbAAuB,kDAIK,SCaZA,CAAAA,CAAUC,CAAAA,CAAkB,CAC1C,OAAO,IAAA,CAAK,SAAA,CAAUA,CAAO,CAAA,CAC1B,OAAA,CAAQ,SAAA,CAAW,SAAS,CAAA,CAC5B,OAAA,CAAQ,SAAA,CAAW,SAAS,CACjC,CAMA,SAASC,CAAAA,CAAOC,CAAAA,CAAcC,CAAAA,CAA2C,CACvE,IAAIC,CAAAA,CAAO,EAAA,CAEPC,CAAAA,CAAOF,CAAAA,CACX,GAAA,CAAA,CAAA,CAAA,CACE,EAAA,CAAIE,CAAAA,CAAK,IAAA,GAAS,kBAAA,CAAoB,CACpC,EAAA,CAAIA,CAAAA,CAAK,QAAA,CAAS,IAAA,GAAS,YAAA,CAEzB,KAAA,CAGFD,CAAAA,CAAOA,CAAAA,CAAO,CAAA,EAAA","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/chunk-TCJABTWK.cjs","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 { transpileFn } from 'tinyest-for-wgsl';\nimport {\n type Context,\n type KernelDirective,\n type TypegpuPluginOptions,\n embedJSON,\n gatherTgpuAliases,\n isShellImplementationCall,\n kernelDirectives,\n shouldSkipFile,\n} from './common.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 getKernelDirective(\n node:\n | babel.FunctionDeclaration\n | babel.FunctionExpression\n | babel.ArrowFunctionExpression,\n): KernelDirective | undefined {\n const directives = (\n 'directives' in node.body ? (node.body?.directives ?? []) : []\n ).map((directive) => directive.value.value);\n\n for (const directive of kernelDirectives) {\n if (directives.includes(directive)) {\n return directive;\n }\n }\n}\n\nfunction functionToTranspiled(\n node: babel.ArrowFunctionExpression | babel.FunctionExpression,\n ctx: Context,\n name?: string | undefined,\n): babel.CallExpression | null {\n const directive = getKernelDirective(node);\n if (!directive) {\n return null;\n }\n\n const { argNames, body, externalNames } = transpileFn(node);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n if (tgpuAlias === undefined) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${ctx.fileId ?? ''}`,\n );\n }\n\n return types.callExpression(\n template.expression(`${tgpuAlias}.__assignAst`)(),\n [\n directive === 'kernel & js'\n ? node\n : template.expression`${tgpuAlias}.__removedJsImpl(${name ? `\"${name}\"` : ''})`(),\n template.expression`${embedJSON({ argNames, body, externalNames })}`(),\n types.objectExpression(\n externalNames.map((name) =>\n types.objectProperty(types.identifier(name), types.identifier(name)),\n ),\n ),\n ],\n );\n}\n\nfunction functionVisitor(ctx: Context): TraverseOptions {\n return {\n ImportDeclaration(path) {\n gatherTgpuAliases(path.node, ctx);\n },\n\n ArrowFunctionExpression(path) {\n const transpiled = functionToTranspiled(\n path.node,\n ctx,\n path.parentPath.node.type === 'VariableDeclarator'\n ? path.parentPath.node.id.type === 'Identifier'\n ? path.parentPath.node.id.name\n : undefined\n : undefined,\n );\n if (transpiled) {\n path.replaceWith(transpiled);\n path.skip();\n }\n },\n\n FunctionExpression(path) {\n const transpiled = functionToTranspiled(\n path.node,\n ctx,\n path.node.id?.name\n ? path.node.id.name\n : path.parentPath.node.type === 'VariableDeclarator'\n ? path.parentPath.node.id.type === 'Identifier'\n ? path.parentPath.node.id.name\n : undefined\n : undefined,\n );\n if (transpiled) {\n path.replaceWith(transpiled);\n path.skip();\n }\n },\n\n FunctionDeclaration(path) {\n const node = path.node;\n const expression = types.functionExpression(\n node.id,\n node.params,\n node.body,\n );\n const transpiled = functionToTranspiled(expression, ctx, node.id?.name);\n if (transpiled && node.id) {\n path.replaceWith(\n types.variableDeclaration('const', [\n types.variableDeclarator(node.id, transpiled),\n ]),\n );\n path.skip();\n }\n },\n\n CallExpression(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 { argNames, body, externalNames } = transpileFn(implementation);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n if (tgpuAlias === undefined) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${ctx.fileId ?? ''}`,\n );\n }\n\n const directive = getKernelDirective(implementation);\n\n path.replaceWith(\n types.callExpression(node.callee, [\n types.callExpression(\n template.expression(`${tgpuAlias}.__assignAst`)(),\n [\n directive !== 'kernel & js'\n ? template.expression`${tgpuAlias}.__removedJsImpl()`()\n : implementation,\n template.expression`${embedJSON({ argNames, body, externalNames })}`(),\n types.objectExpression(\n externalNames.map((name) =>\n types.objectProperty(\n types.identifier(name),\n types.identifier(name),\n ),\n ),\n ),\n ],\n ),\n ]),\n );\n\n path.skip();\n }\n }\n },\n };\n}\n\nexport default function () {\n return {\n visitor: {\n Program(path, state) {\n // @ts-ignore\n const code: string | undefined = state.file?.code;\n // @ts-ignore\n const options: TypegpuPluginOptions | undefined = state.opts;\n // @ts-ignore\n const id: string | undefined = state.filename;\n\n if (shouldSkipFile(options, id, code)) {\n return;\n }\n\n const ctx: Context = {\n tgpuAliases: new Set<string>(\n options?.forceTgpuAlias ? [options.forceTgpuAlias] : [],\n ),\n fileId: id,\n };\n\n path.traverse(functionVisitor(ctx));\n },\n } satisfies TraverseOptions,\n };\n}\n","import type * as babel from '@babel/types';\nimport type * as acorn from 'acorn';\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};\n\nexport interface TypegpuPluginOptions {\n include?: 'all' | RegExp[];\n forceTgpuAlias?: string;\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 (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\nconst typegpuImportRegex = /import.*from\\s*['\"]typegpu.*['\"]/;\nconst typegpuDynamicImportRegex = /import\\s*\\(\\s*['\"]\\s*typegpu.*['\"]/;\nconst typegpuRequireRegex = /require\\s*\\(\\s*['\"]\\s*typegpu.*['\"]\\s*\\)/;\n\nexport function shouldSkipFile(\n options: TypegpuPluginOptions | undefined,\n id: string | undefined,\n code: string | undefined,\n) {\n if (code && !options?.include) {\n if (\n !typegpuImportRegex.test(code) &&\n !typegpuRequireRegex.test(code) &&\n !typegpuDynamicImportRegex.test(code)\n ) {\n // No imports to `typegpu` or its sub modules, exiting early.\n return true;\n }\n } else if (\n options?.include &&\n options.include !== 'all' &&\n (!id || !options.include.some((pattern) => pattern.test(id)))\n ) {\n return true;\n }\n\n return false;\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 &&\n (node.callee.callee.object.type === 'MemberExpression'\n ? isTgpu(ctx, node.callee.callee.object.object)\n : isTgpu(ctx, node.callee.callee.object))) || // TODO: remove along with the deprecated 'does' method\n (node.callee.type === 'MemberExpression' &&\n node.arguments.length === 1 &&\n node.callee.property.type === 'Identifier' &&\n // Assuming that every call to `.does` is related to TypeGPU\n // because shells can be created separately from calls to `tgpu`,\n // making it hard to detect.\n node.callee.property.name === 'does')\n );\n}\n\nexport const kernelDirectives = ['kernel', 'kernel & js'] as const;\nexport type KernelDirective = (typeof kernelDirectives)[number];\n"]}
package/esbuild.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGR7J76HMcjs = require('./chunk-GR7J76HM.cjs');require('./chunk-O6MPSBAL.cjs');var l=_chunkGR7J76HMcjs.g;exports.default = l;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkIA2CUGWDcjs = require('./chunk-IA2CUGWD.cjs');require('./chunk-TCJABTWK.cjs');var l=_chunkIA2CUGWDcjs.g;exports.default = l;
2
2
  //# sourceMappingURL=esbuild.cjs.map
package/esbuild.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/esbuild.cjs","../src/esbuild.ts"],"names":["esbuild_default","esbuildPlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/esbuild.cjs","sourcesContent":[null,"import { esbuildPlugin } from './index';\n\nexport default esbuildPlugin;\n"]}
1
+ {"version":3,"sources":["/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/esbuild.cjs","../src/esbuild.ts"],"names":["esbuild_default","esbuildPlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/esbuild.cjs","sourcesContent":[null,"import { esbuildPlugin } from './index.ts';\n\nexport default esbuildPlugin;\n"]}
package/esbuild.js CHANGED
@@ -1,2 +1,2 @@
1
- import{g as e}from"./chunk-R3Y6TVVS.js";import"./chunk-ZZFJJORV.js";var l=e;export{l as default};
1
+ import{g as e}from"./chunk-JKPGDPK3.js";import"./chunk-D2NWA2J7.js";var l=e;export{l as default};
2
2
  //# sourceMappingURL=esbuild.js.map
package/esbuild.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/esbuild.ts"],"sourcesContent":["import { esbuildPlugin } from './index';\n\nexport default esbuildPlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["esbuild_default","esbuildPlugin"]}
1
+ {"version":3,"sources":["../src/esbuild.ts"],"sourcesContent":["import { esbuildPlugin } from './index.ts';\n\nexport default esbuildPlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["esbuild_default","esbuildPlugin"]}
package/farm.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGR7J76HMcjs = require('./chunk-GR7J76HM.cjs');require('./chunk-O6MPSBAL.cjs');var m=_chunkGR7J76HMcjs.h;exports.default = m;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkIA2CUGWDcjs = require('./chunk-IA2CUGWD.cjs');require('./chunk-TCJABTWK.cjs');var m=_chunkIA2CUGWDcjs.h;exports.default = m;
2
2
  //# sourceMappingURL=farm.cjs.map
package/farm.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/farm.cjs","../src/farm.ts"],"names":["farm_default","farmPlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/farm.cjs","sourcesContent":[null,"import { farmPlugin } from './index';\n\nexport default farmPlugin;\n"]}
1
+ {"version":3,"sources":["/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/farm.cjs","../src/farm.ts"],"names":["farm_default","farmPlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/farm.cjs","sourcesContent":[null,"import { farmPlugin } from './index.ts';\n\nexport default farmPlugin;\n"]}
package/farm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{h as r}from"./chunk-R3Y6TVVS.js";import"./chunk-ZZFJJORV.js";var m=r;export{m as default};
1
+ import{h as r}from"./chunk-JKPGDPK3.js";import"./chunk-D2NWA2J7.js";var m=r;export{m as default};
2
2
  //# sourceMappingURL=farm.js.map
package/farm.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/farm.ts"],"sourcesContent":["import { farmPlugin } from './index';\n\nexport default farmPlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["farm_default","farmPlugin"]}
1
+ {"version":3,"sources":["../src/farm.ts"],"sourcesContent":["import { farmPlugin } from './index.ts';\n\nexport default farmPlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["farm_default","farmPlugin"]}
package/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGR7J76HMcjs = require('./chunk-GR7J76HM.cjs');require('./chunk-O6MPSBAL.cjs');exports.babelPlugin = _chunkGR7J76HMcjs.i; exports.default = _chunkGR7J76HMcjs.a; exports.esbuildPlugin = _chunkGR7J76HMcjs.g; exports.farmPlugin = _chunkGR7J76HMcjs.h; exports.rolldownPlugin = _chunkGR7J76HMcjs.d; exports.rollupPlugin = _chunkGR7J76HMcjs.c; exports.rspackPlugin = _chunkGR7J76HMcjs.f; exports.vitePlugin = _chunkGR7J76HMcjs.b; exports.webpackPlugin = _chunkGR7J76HMcjs.e;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkIA2CUGWDcjs = require('./chunk-IA2CUGWD.cjs');require('./chunk-TCJABTWK.cjs');exports.babelPlugin = _chunkIA2CUGWDcjs.i; exports.default = _chunkIA2CUGWDcjs.a; exports.esbuildPlugin = _chunkIA2CUGWDcjs.g; exports.farmPlugin = _chunkIA2CUGWDcjs.h; exports.rolldownPlugin = _chunkIA2CUGWDcjs.d; exports.rollupPlugin = _chunkIA2CUGWDcjs.c; exports.rspackPlugin = _chunkIA2CUGWDcjs.f; exports.vitePlugin = _chunkIA2CUGWDcjs.b; exports.webpackPlugin = _chunkIA2CUGWDcjs.e;
2
2
  //# sourceMappingURL=index.cjs.map
package/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/index.cjs"],"names":[],"mappings":"AAAA,iIAAmD,gCAA6B,qYAAoK","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/index.cjs"}
1
+ {"version":3,"sources":["/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/index.cjs"],"names":[],"mappings":"AAAA,iIAAmD,gCAA6B,qYAAoK","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/index.cjs"}
package/index.d.cts CHANGED
@@ -13,7 +13,7 @@ declare const unplugin: _unplugin.UnpluginInstance<TypegpuPluginOptions, boolean
13
13
 
14
14
  declare const vitePlugin: (options: TypegpuPluginOptions) => _unplugin.VitePlugin<any> | _unplugin.VitePlugin<any>[];
15
15
  declare const rollupPlugin: (options: TypegpuPluginOptions) => rollup.Plugin<any> | rollup.Plugin<any>[];
16
- declare const rolldownPlugin: (options: TypegpuPluginOptions) => _unplugin.RolldownPlugin<any> | _unplugin.RolldownPlugin<any>[];
16
+ declare const rolldownPlugin: (options: TypegpuPluginOptions) => any;
17
17
  declare const webpackPlugin: (options: TypegpuPluginOptions) => WebpackPluginInstance;
18
18
  declare const rspackPlugin: (options: TypegpuPluginOptions) => RspackPluginInstance;
19
19
  declare const esbuildPlugin: (options: TypegpuPluginOptions) => _unplugin.EsbuildPlugin;
package/index.d.ts CHANGED
@@ -13,7 +13,7 @@ declare const unplugin: _unplugin.UnpluginInstance<TypegpuPluginOptions, boolean
13
13
 
14
14
  declare const vitePlugin: (options: TypegpuPluginOptions) => _unplugin.VitePlugin<any> | _unplugin.VitePlugin<any>[];
15
15
  declare const rollupPlugin: (options: TypegpuPluginOptions) => rollup.Plugin<any> | rollup.Plugin<any>[];
16
- declare const rolldownPlugin: (options: TypegpuPluginOptions) => _unplugin.RolldownPlugin<any> | _unplugin.RolldownPlugin<any>[];
16
+ declare const rolldownPlugin: (options: TypegpuPluginOptions) => any;
17
17
  declare const webpackPlugin: (options: TypegpuPluginOptions) => WebpackPluginInstance;
18
18
  declare const rspackPlugin: (options: TypegpuPluginOptions) => RspackPluginInstance;
19
19
  declare const esbuildPlugin: (options: TypegpuPluginOptions) => _unplugin.EsbuildPlugin;
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a,b,c,d,e,f,g,h,i}from"./chunk-R3Y6TVVS.js";import"./chunk-ZZFJJORV.js";export{i as babelPlugin,a as default,g as esbuildPlugin,h as farmPlugin,d as rolldownPlugin,c as rollupPlugin,f as rspackPlugin,b as vitePlugin,e as webpackPlugin};
1
+ import{a,b,c,d,e,f,g,h,i}from"./chunk-JKPGDPK3.js";import"./chunk-D2NWA2J7.js";export{i as babelPlugin,a as default,g as esbuildPlugin,h as farmPlugin,d as rolldownPlugin,c as rollupPlugin,f as rspackPlugin,b as vitePlugin,e as webpackPlugin};
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unplugin-typegpu",
3
- "version": "0.1.0-alpha.8",
3
+ "version": "0.1.0-alpha.9",
4
4
  "description": "Build plugins for TypeGPU, enabling seamless JavaScript -> WGSL transpilation and improved debugging.",
5
5
  "keywords": [
6
6
  "rollup-plugin",
@@ -86,9 +86,12 @@
86
86
  "@babel/standalone": "^7.26.6",
87
87
  "estree-walker": "^3.0.3",
88
88
  "magic-string": "^0.30.11",
89
- "tinyest-for-wgsl": "~0.1.0-alpha.8",
89
+ "tinyest-for-wgsl": "~0.1.0-alpha.9",
90
90
  "unplugin": "^2.2.0"
91
91
  },
92
+ "peerDependencies": {
93
+ "typegpu": "^0.5.4"
94
+ },
92
95
  "main": "./index.js",
93
96
  "types": "./index.d.ts",
94
97
  "private": false,
package/rolldown.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGR7J76HMcjs = require('./chunk-GR7J76HM.cjs');require('./chunk-O6MPSBAL.cjs');var r=_chunkGR7J76HMcjs.d;exports.default = r;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkIA2CUGWDcjs = require('./chunk-IA2CUGWD.cjs');require('./chunk-TCJABTWK.cjs');var r=_chunkIA2CUGWDcjs.d;exports.default = r;
2
2
  //# sourceMappingURL=rolldown.cjs.map
package/rolldown.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/rolldown.cjs","../src/rolldown.ts"],"names":["rolldown_default","rolldownPlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/rolldown.cjs","sourcesContent":[null,"import { rolldownPlugin } from './index';\n\nexport default rolldownPlugin;\n"]}
1
+ {"version":3,"sources":["/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/rolldown.cjs","../src/rolldown.ts"],"names":["rolldown_default","rolldownPlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/rolldown.cjs","sourcesContent":[null,"import { rolldownPlugin } from './index.ts';\n\nexport default rolldownPlugin;\n"]}
package/rolldown.js CHANGED
@@ -1,2 +1,2 @@
1
- import{d as o}from"./chunk-R3Y6TVVS.js";import"./chunk-ZZFJJORV.js";var r=o;export{r as default};
1
+ import{d as o}from"./chunk-JKPGDPK3.js";import"./chunk-D2NWA2J7.js";var r=o;export{r as default};
2
2
  //# sourceMappingURL=rolldown.js.map
package/rolldown.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/rolldown.ts"],"sourcesContent":["import { rolldownPlugin } from './index';\n\nexport default rolldownPlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["rolldown_default","rolldownPlugin"]}
1
+ {"version":3,"sources":["../src/rolldown.ts"],"sourcesContent":["import { rolldownPlugin } from './index.ts';\n\nexport default rolldownPlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["rolldown_default","rolldownPlugin"]}
package/rollup.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGR7J76HMcjs = require('./chunk-GR7J76HM.cjs');require('./chunk-O6MPSBAL.cjs');var r=_chunkGR7J76HMcjs.c;exports.default = r;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkIA2CUGWDcjs = require('./chunk-IA2CUGWD.cjs');require('./chunk-TCJABTWK.cjs');var r=_chunkIA2CUGWDcjs.c;exports.default = r;
2
2
  //# sourceMappingURL=rollup.cjs.map
package/rollup.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/rollup.cjs","../src/rollup.ts"],"names":["rollup_default","rollupPlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/rollup.cjs","sourcesContent":[null,"import { rollupPlugin } from './index';\n\nexport default rollupPlugin;\n"]}
1
+ {"version":3,"sources":["/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/rollup.cjs","../src/rollup.ts"],"names":["rollup_default","rollupPlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/rollup.cjs","sourcesContent":[null,"import { rollupPlugin } from './index.ts';\n\nexport default rollupPlugin;\n"]}
package/rollup.js CHANGED
@@ -1,2 +1,2 @@
1
- import{c as l}from"./chunk-R3Y6TVVS.js";import"./chunk-ZZFJJORV.js";var r=l;export{r as default};
1
+ import{c as l}from"./chunk-JKPGDPK3.js";import"./chunk-D2NWA2J7.js";var r=l;export{r as default};
2
2
  //# sourceMappingURL=rollup.js.map
package/rollup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/rollup.ts"],"sourcesContent":["import { rollupPlugin } from './index';\n\nexport default rollupPlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["rollup_default","rollupPlugin"]}
1
+ {"version":3,"sources":["../src/rollup.ts"],"sourcesContent":["import { rollupPlugin } from './index.ts';\n\nexport default rollupPlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["rollup_default","rollupPlugin"]}
package/rspack.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGR7J76HMcjs = require('./chunk-GR7J76HM.cjs');require('./chunk-O6MPSBAL.cjs');var p=_chunkGR7J76HMcjs.f;exports.default = p;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkIA2CUGWDcjs = require('./chunk-IA2CUGWD.cjs');require('./chunk-TCJABTWK.cjs');var p=_chunkIA2CUGWDcjs.f;exports.default = p;
2
2
  //# sourceMappingURL=rspack.cjs.map
package/rspack.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/rspack.cjs","../src/rspack.ts"],"names":["rspack_default","rspackPlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/rspack.cjs","sourcesContent":[null,"import { rspackPlugin } from './index';\n\nexport default rspackPlugin;\n"]}
1
+ {"version":3,"sources":["/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/rspack.cjs","../src/rspack.ts"],"names":["rspack_default","rspackPlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/rspack.cjs","sourcesContent":[null,"import { rspackPlugin } from './index.ts';\n\nexport default rspackPlugin;\n"]}
package/rspack.js CHANGED
@@ -1,2 +1,2 @@
1
- import{f as r}from"./chunk-R3Y6TVVS.js";import"./chunk-ZZFJJORV.js";var p=r;export{p as default};
1
+ import{f as r}from"./chunk-JKPGDPK3.js";import"./chunk-D2NWA2J7.js";var p=r;export{p as default};
2
2
  //# sourceMappingURL=rspack.js.map
package/rspack.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/rspack.ts"],"sourcesContent":["import { rspackPlugin } from './index';\n\nexport default rspackPlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["rspack_default","rspackPlugin"]}
1
+ {"version":3,"sources":["../src/rspack.ts"],"sourcesContent":["import { rspackPlugin } from './index.ts';\n\nexport default rspackPlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["rspack_default","rspackPlugin"]}
package/vite.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGR7J76HMcjs = require('./chunk-GR7J76HM.cjs');require('./chunk-O6MPSBAL.cjs');var i=_chunkGR7J76HMcjs.b;exports.default = i;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkIA2CUGWDcjs = require('./chunk-IA2CUGWD.cjs');require('./chunk-TCJABTWK.cjs');var i=_chunkIA2CUGWDcjs.b;exports.default = i;
2
2
  //# sourceMappingURL=vite.cjs.map
package/vite.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/vite.cjs","../src/vite.ts"],"names":["vite_default","vitePlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/vite.cjs","sourcesContent":[null,"import { vitePlugin } from './index';\n\nexport default vitePlugin;\n"]}
1
+ {"version":3,"sources":["/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/vite.cjs","../src/vite.ts"],"names":["vite_default","vitePlugin"],"mappings":"AAAA,iIAAwC,gCAA6B,ICE9DA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/vite.cjs","sourcesContent":[null,"import { vitePlugin } from './index.ts';\n\nexport default vitePlugin;\n"]}
package/vite.js CHANGED
@@ -1,2 +1,2 @@
1
- import{b as t}from"./chunk-R3Y6TVVS.js";import"./chunk-ZZFJJORV.js";var i=t;export{i as default};
1
+ import{b as t}from"./chunk-JKPGDPK3.js";import"./chunk-D2NWA2J7.js";var i=t;export{i as default};
2
2
  //# sourceMappingURL=vite.js.map
package/vite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/vite.ts"],"sourcesContent":["import { vitePlugin } from './index';\n\nexport default vitePlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["vite_default","vitePlugin"]}
1
+ {"version":3,"sources":["../src/vite.ts"],"sourcesContent":["import { vitePlugin } from './index.ts';\n\nexport default vitePlugin;\n"],"mappings":"oEAEA,IAAOA,EAAQC","names":["vite_default","vitePlugin"]}
package/webpack.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGR7J76HMcjs = require('./chunk-GR7J76HM.cjs');require('./chunk-O6MPSBAL.cjs');var p=_chunkGR7J76HMcjs.e;exports.default = p;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkIA2CUGWDcjs = require('./chunk-IA2CUGWD.cjs');require('./chunk-TCJABTWK.cjs');var p=_chunkIA2CUGWDcjs.e;exports.default = p;
2
2
  //# sourceMappingURL=webpack.cjs.map
package/webpack.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/webpack.cjs","../src/webpack.ts"],"names":["webpack_default","webpackPlugin"],"mappings":"AAAA,iIAAmC,gCAA6B,ICEzDA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/webpack.cjs","sourcesContent":[null,"import { webpackPlugin } from './index';\n\nexport default webpackPlugin;\n"]}
1
+ {"version":3,"sources":["/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/webpack.cjs","../src/webpack.ts"],"names":["webpack_default","webpackPlugin"],"mappings":"AAAA,iIAAmC,gCAA6B,ICEzDA,CAAAA,CAAQC,mBAAAA,CAAAA,oBAAAA","file":"/Users/marcinhawryluk/Documents/wigsill/packages/unplugin-typegpu/dist/webpack.cjs","sourcesContent":[null,"import { webpackPlugin } from './index.ts';\n\nexport default webpackPlugin;\n"]}
package/webpack.js CHANGED
@@ -1,2 +1,2 @@
1
- import{e}from"./chunk-R3Y6TVVS.js";import"./chunk-ZZFJJORV.js";var p=e;export{p as default};
1
+ import{e}from"./chunk-JKPGDPK3.js";import"./chunk-D2NWA2J7.js";var p=e;export{p as default};
2
2
  //# sourceMappingURL=webpack.js.map
package/webpack.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/webpack.ts"],"sourcesContent":["import { webpackPlugin } from './index';\n\nexport default webpackPlugin;\n"],"mappings":"+DAEA,IAAOA,EAAQC","names":["webpack_default","webpackPlugin"]}
1
+ {"version":3,"sources":["../src/webpack.ts"],"sourcesContent":["import { webpackPlugin } from './index.ts';\n\nexport default webpackPlugin;\n"],"mappings":"+DAEA,IAAOA,EAAQC","names":["webpack_default","webpackPlugin"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/chunk-GR7J76HM.cjs","../src/index.ts"],"names":["getKernelDirective","node","statement","kernelDirectives","removeKernelDirective","typegpu","options","code","id","shouldSkipFile","ctx","ast","tgslFunctionDefs","walk","_node","_parent","prop","index","_a","gatherTgpuAliases","isShellImplementationCall","implementation","directive","magicString","MagicString","tgpuAlias"],"mappings":"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","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/chunk-GR7J76HM.cjs","sourcesContent":[null,"import type * as acorn from 'acorn';\nimport { type Node, walk } from 'estree-walker';\nimport MagicString from 'magic-string';\nimport { transpileFn } from 'tinyest-for-wgsl';\nimport { type UnpluginFactory, createUnplugin } from 'unplugin';\nimport babel from './babel';\nimport {\n type Context,\n type KernelDirective,\n type TypegpuPluginOptions,\n embedJSON,\n gatherTgpuAliases,\n isShellImplementationCall,\n kernelDirectives,\n shouldSkipFile,\n} from './common';\n\ntype FunctionNode =\n | acorn.FunctionDeclaration\n | acorn.AnonymousFunctionDeclaration\n | acorn.FunctionExpression\n | acorn.ArrowFunctionExpression;\n\nfunction getKernelDirective(node: FunctionNode): KernelDirective | undefined {\n if (node.body.type === 'BlockStatement') {\n for (const statement of node.body.body) {\n if (statement.type === 'ExpressionStatement') {\n if (kernelDirectives.includes(statement.directive as KernelDirective)) {\n return statement.directive as KernelDirective;\n }\n }\n }\n }\n}\n\nfunction removeKernelDirective(node: FunctionNode) {\n if (node.body.type === 'BlockStatement') {\n node.body.body = node.body.body.filter(\n (statement) =>\n !(\n statement.type === 'ExpressionStatement' &&\n statement.directive &&\n kernelDirectives.includes(statement.directive as KernelDirective)\n ),\n );\n }\n\n return node;\n}\n\nconst typegpu: UnpluginFactory<TypegpuPluginOptions> = (\n options: TypegpuPluginOptions = {},\n) => ({\n name: 'unplugin-typegpu' as const,\n transform(code, id) {\n if (shouldSkipFile(options, id, code)) {\n return;\n }\n\n const ctx: Context = {\n tgpuAliases: new Set<string>(\n options.forceTgpuAlias ? [options.forceTgpuAlias] : [],\n ),\n fileId: id,\n };\n\n const ast = this.parse(code, {\n allowReturnOutsideFunction: true,\n }) as Node;\n\n const tgslFunctionDefs: {\n def: FunctionNode;\n name?: string | undefined;\n removeJsImplementation: boolean;\n }[] = [];\n\n walk(ast, {\n enter(_node, _parent, prop, index) {\n const node = _node as acorn.AnyNode;\n\n if (node.type === 'ImportDeclaration') {\n gatherTgpuAliases(node, ctx);\n }\n\n if (node.type === 'CallExpression') {\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 directive = getKernelDirective(implementation);\n tgslFunctionDefs.push({\n def: removeKernelDirective(implementation),\n removeJsImplementation: directive !== 'kernel & js',\n });\n }\n }\n }\n\n if (\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionExpression' ||\n node.type === 'FunctionDeclaration'\n ) {\n const directive = getKernelDirective(node);\n if (directive) {\n tgslFunctionDefs.push({\n def: removeKernelDirective(node),\n name:\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression'\n ? node.id?.name\n : _parent?.type === 'VariableDeclarator'\n ? _parent.id.type === 'Identifier'\n ? _parent.id.name\n : undefined\n : undefined,\n removeJsImplementation: directive !== 'kernel & js',\n });\n }\n }\n },\n });\n\n const magicString = new MagicString(code);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n\n if (tgpuAlias === undefined && tgslFunctionDefs.length > 0) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${id}`,\n );\n }\n\n for (const { def, name, removeJsImplementation } of tgslFunctionDefs) {\n const { argNames, body, externalNames } = transpileFn(def);\n const isFunctionStatement = def.type === 'FunctionDeclaration';\n\n if (\n isFunctionStatement &&\n name &&\n code\n .slice(0, def.start)\n .search(new RegExp(`(?<![\\\\w_.])${name}(?![\\\\w_])`)) !== -1\n ) {\n throw new Error(\n `File ${id}: function \"${name}\", containing ${removeJsImplementation ? 'kernel' : 'kernel & js'} directive, is referenced before its usage. Function statements are no longer hoisted after being transformed by the plugin.`,\n );\n }\n\n // Wrap the implementation in a call to `tgpu.__assignAst` to associate the AST with the implementation.\n magicString.appendLeft(\n def.start,\n `${isFunctionStatement && name ? `const ${name} = ` : ''}${tgpuAlias}.__assignAst(`,\n );\n magicString.appendRight(\n def.end,\n `, ${embedJSON({ argNames, body, externalNames })}`,\n );\n\n if (externalNames.length > 0) {\n magicString.appendRight(def.end, `, {${externalNames.join(', ')}})`);\n } else {\n magicString.appendRight(\n def.end,\n `)${isFunctionStatement && name ? ';' : ''}`,\n );\n }\n\n if (removeJsImplementation) {\n magicString.overwrite(\n def.start,\n def.end,\n `${tgpuAlias}.__removedJsImpl(${name ? `\"${name}\"` : ''})`,\n );\n }\n }\n\n return {\n code: magicString.toString(),\n map: magicString.generateMap(),\n };\n },\n});\n\nconst unplugin = createUnplugin(typegpu);\n\nexport type { TypegpuPluginOptions } from './common';\n\nexport default unplugin;\n\nexport const vitePlugin = unplugin.vite;\nexport const rollupPlugin = unplugin.rollup;\nexport const rolldownPlugin = unplugin.rolldown;\nexport const webpackPlugin = unplugin.webpack;\nexport const rspackPlugin = unplugin.rspack;\nexport const esbuildPlugin = unplugin.esbuild;\nexport const farmPlugin = unplugin.farm;\nexport const babelPlugin = babel;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/babel.ts","../src/common.ts"],"names":["embedJSON","jsValue","isTgpu","ctx","node","path","tail"],"mappings":"AAAA,wbAAuB,kDAIK,SCaZA,CAAAA,CAAUC,CAAAA,CAAkB,CAC1C,OAAO,IAAA,CAAK,SAAA,CAAUA,CAAO,CAAA,CAC1B,OAAA,CAAQ,SAAA,CAAW,SAAS,CAAA,CAC5B,OAAA,CAAQ,SAAA,CAAW,SAAS,CACjC,CAMA,SAASC,CAAAA,CAAOC,CAAAA,CAAcC,CAAAA,CAA2C,CACvE,IAAIC,CAAAA,CAAO,EAAA,CAEPC,CAAAA,CAAOF,CAAAA,CACX,GAAA,CAAA,CAAA,CAAA,CACE,EAAA,CAAIE,CAAAA,CAAK,IAAA,GAAS,kBAAA,CAAoB,CACpC,EAAA,CAAIA,CAAAA,CAAK,QAAA,CAAS,IAAA,GAAS,YAAA,CAEzB,KAAA,CAGFD,CAAAA,CAAOA,CAAAA,CAAO,CAAA,EAAA","file":"/Users/iwo/Projects/wigsill/packages/unplugin-typegpu/dist/chunk-O6MPSBAL.cjs","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 { transpileFn } from 'tinyest-for-wgsl';\nimport {\n type Context,\n type KernelDirective,\n type TypegpuPluginOptions,\n embedJSON,\n gatherTgpuAliases,\n isShellImplementationCall,\n kernelDirectives,\n shouldSkipFile,\n} from './common';\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 getKernelDirective(\n node:\n | babel.FunctionDeclaration\n | babel.FunctionExpression\n | babel.ArrowFunctionExpression,\n): KernelDirective | undefined {\n const directives = (\n 'directives' in node.body ? (node.body?.directives ?? []) : []\n ).map((directive) => directive.value.value);\n\n for (const directive of kernelDirectives) {\n if (directives.includes(directive)) {\n return directive;\n }\n }\n}\n\nfunction functionToTranspiled(\n node: babel.ArrowFunctionExpression | babel.FunctionExpression,\n ctx: Context,\n name?: string | undefined,\n): babel.CallExpression | null {\n const directive = getKernelDirective(node);\n if (!directive) {\n return null;\n }\n\n const { argNames, body, externalNames } = transpileFn(node);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n if (tgpuAlias === undefined) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${ctx.fileId ?? ''}`,\n );\n }\n\n return types.callExpression(\n template.expression(`${tgpuAlias}.__assignAst`)(),\n [\n directive === 'kernel & js'\n ? node\n : template.expression`${tgpuAlias}.__removedJsImpl(${name ? `\"${name}\"` : ''})`(),\n template.expression`${embedJSON({ argNames, body, externalNames })}`(),\n types.objectExpression(\n externalNames.map((name) =>\n types.objectProperty(types.identifier(name), types.identifier(name)),\n ),\n ),\n ],\n );\n}\n\nfunction functionVisitor(ctx: Context): TraverseOptions {\n return {\n ImportDeclaration(path) {\n gatherTgpuAliases(path.node, ctx);\n },\n\n ArrowFunctionExpression(path) {\n const transpiled = functionToTranspiled(\n path.node,\n ctx,\n path.parentPath.node.type === 'VariableDeclarator'\n ? path.parentPath.node.id.type === 'Identifier'\n ? path.parentPath.node.id.name\n : undefined\n : undefined,\n );\n if (transpiled) {\n path.replaceWith(transpiled);\n path.skip();\n }\n },\n\n FunctionExpression(path) {\n const transpiled = functionToTranspiled(\n path.node,\n ctx,\n path.node.id?.name\n ? path.node.id.name\n : path.parentPath.node.type === 'VariableDeclarator'\n ? path.parentPath.node.id.type === 'Identifier'\n ? path.parentPath.node.id.name\n : undefined\n : undefined,\n );\n if (transpiled) {\n path.replaceWith(transpiled);\n path.skip();\n }\n },\n\n FunctionDeclaration(path) {\n const node = path.node;\n const expression = types.functionExpression(\n node.id,\n node.params,\n node.body,\n );\n const transpiled = functionToTranspiled(expression, ctx, node.id?.name);\n if (transpiled && node.id) {\n path.replaceWith(\n types.variableDeclaration('const', [\n types.variableDeclarator(node.id, transpiled),\n ]),\n );\n path.skip();\n }\n },\n\n CallExpression(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 { argNames, body, externalNames } = transpileFn(implementation);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n if (tgpuAlias === undefined) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${ctx.fileId ?? ''}`,\n );\n }\n\n const directive = getKernelDirective(implementation);\n\n path.replaceWith(\n types.callExpression(node.callee, [\n types.callExpression(\n template.expression(`${tgpuAlias}.__assignAst`)(),\n [\n directive !== 'kernel & js'\n ? template.expression`${tgpuAlias}.__removedJsImpl()`()\n : implementation,\n template.expression`${embedJSON({ argNames, body, externalNames })}`(),\n types.objectExpression(\n externalNames.map((name) =>\n types.objectProperty(\n types.identifier(name),\n types.identifier(name),\n ),\n ),\n ),\n ],\n ),\n ]),\n );\n\n path.skip();\n }\n }\n },\n };\n}\n\nexport default function () {\n return {\n visitor: {\n Program(path, state) {\n // @ts-ignore\n const code: string | undefined = state.file?.code;\n // @ts-ignore\n const options: TypegpuPluginOptions | undefined = state.opts;\n // @ts-ignore\n const id: string | undefined = state.filename;\n\n if (shouldSkipFile(options, id, code)) {\n return;\n }\n\n const ctx: Context = {\n tgpuAliases: new Set<string>(\n options?.forceTgpuAlias ? [options.forceTgpuAlias] : [],\n ),\n fileId: id,\n };\n\n path.traverse(functionVisitor(ctx));\n },\n } satisfies TraverseOptions,\n };\n}\n","import type * as babel from '@babel/types';\nimport type * as acorn from 'acorn';\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};\n\nexport interface TypegpuPluginOptions {\n include?: 'all' | RegExp[];\n forceTgpuAlias?: string;\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 (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\nconst typegpuImportRegex = /import.*from\\s*['\"]typegpu.*['\"]/;\nconst typegpuDynamicImportRegex = /import\\s*\\(\\s*['\"]\\s*typegpu.*['\"]/;\nconst typegpuRequireRegex = /require\\s*\\(\\s*['\"]\\s*typegpu.*['\"]\\s*\\)/;\n\nexport function shouldSkipFile(\n options: TypegpuPluginOptions | undefined,\n id: string | undefined,\n code: string | undefined,\n) {\n if (code && !options?.include) {\n if (\n !typegpuImportRegex.test(code) &&\n !typegpuRequireRegex.test(code) &&\n !typegpuDynamicImportRegex.test(code)\n ) {\n // No imports to `typegpu` or its sub modules, exiting early.\n return true;\n }\n } else if (\n options?.include &&\n options.include !== 'all' &&\n (!id || !options.include.some((pattern) => pattern.test(id)))\n ) {\n return true;\n }\n\n return false;\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 &&\n (node.callee.callee.object.type === 'MemberExpression'\n ? isTgpu(ctx, node.callee.callee.object.object)\n : isTgpu(ctx, node.callee.callee.object))) || // TODO: remove along with the deprecated 'does' method\n (node.callee.type === 'MemberExpression' &&\n node.arguments.length === 1 &&\n node.callee.property.type === 'Identifier' &&\n // Assuming that every call to `.does` is related to TypeGPU\n // because shells can be created separately from calls to `tgpu`,\n // making it hard to detect.\n node.callee.property.name === 'does')\n );\n}\n\nexport const kernelDirectives = ['kernel', 'kernel & js'] as const;\nexport type KernelDirective = (typeof kernelDirectives)[number];\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type * as acorn from 'acorn';\nimport { type Node, walk } from 'estree-walker';\nimport MagicString from 'magic-string';\nimport { transpileFn } from 'tinyest-for-wgsl';\nimport { type UnpluginFactory, createUnplugin } from 'unplugin';\nimport babel from './babel';\nimport {\n type Context,\n type KernelDirective,\n type TypegpuPluginOptions,\n embedJSON,\n gatherTgpuAliases,\n isShellImplementationCall,\n kernelDirectives,\n shouldSkipFile,\n} from './common';\n\ntype FunctionNode =\n | acorn.FunctionDeclaration\n | acorn.AnonymousFunctionDeclaration\n | acorn.FunctionExpression\n | acorn.ArrowFunctionExpression;\n\nfunction getKernelDirective(node: FunctionNode): KernelDirective | undefined {\n if (node.body.type === 'BlockStatement') {\n for (const statement of node.body.body) {\n if (statement.type === 'ExpressionStatement') {\n if (kernelDirectives.includes(statement.directive as KernelDirective)) {\n return statement.directive as KernelDirective;\n }\n }\n }\n }\n}\n\nfunction removeKernelDirective(node: FunctionNode) {\n if (node.body.type === 'BlockStatement') {\n node.body.body = node.body.body.filter(\n (statement) =>\n !(\n statement.type === 'ExpressionStatement' &&\n statement.directive &&\n kernelDirectives.includes(statement.directive as KernelDirective)\n ),\n );\n }\n\n return node;\n}\n\nconst typegpu: UnpluginFactory<TypegpuPluginOptions> = (\n options: TypegpuPluginOptions = {},\n) => ({\n name: 'unplugin-typegpu' as const,\n transform(code, id) {\n if (shouldSkipFile(options, id, code)) {\n return;\n }\n\n const ctx: Context = {\n tgpuAliases: new Set<string>(\n options.forceTgpuAlias ? [options.forceTgpuAlias] : [],\n ),\n fileId: id,\n };\n\n const ast = this.parse(code, {\n allowReturnOutsideFunction: true,\n }) as Node;\n\n const tgslFunctionDefs: {\n def: FunctionNode;\n name?: string | undefined;\n removeJsImplementation: boolean;\n }[] = [];\n\n walk(ast, {\n enter(_node, _parent, prop, index) {\n const node = _node as acorn.AnyNode;\n\n if (node.type === 'ImportDeclaration') {\n gatherTgpuAliases(node, ctx);\n }\n\n if (node.type === 'CallExpression') {\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 directive = getKernelDirective(implementation);\n tgslFunctionDefs.push({\n def: removeKernelDirective(implementation),\n removeJsImplementation: directive !== 'kernel & js',\n });\n }\n }\n }\n\n if (\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionExpression' ||\n node.type === 'FunctionDeclaration'\n ) {\n const directive = getKernelDirective(node);\n if (directive) {\n tgslFunctionDefs.push({\n def: removeKernelDirective(node),\n name:\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression'\n ? node.id?.name\n : _parent?.type === 'VariableDeclarator'\n ? _parent.id.type === 'Identifier'\n ? _parent.id.name\n : undefined\n : undefined,\n removeJsImplementation: directive !== 'kernel & js',\n });\n }\n }\n },\n });\n\n const magicString = new MagicString(code);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n\n if (tgpuAlias === undefined && tgslFunctionDefs.length > 0) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${id}`,\n );\n }\n\n for (const { def, name, removeJsImplementation } of tgslFunctionDefs) {\n const { argNames, body, externalNames } = transpileFn(def);\n const isFunctionStatement = def.type === 'FunctionDeclaration';\n\n if (\n isFunctionStatement &&\n name &&\n code\n .slice(0, def.start)\n .search(new RegExp(`(?<![\\\\w_.])${name}(?![\\\\w_])`)) !== -1\n ) {\n throw new Error(\n `File ${id}: function \"${name}\", containing ${removeJsImplementation ? 'kernel' : 'kernel & js'} directive, is referenced before its usage. Function statements are no longer hoisted after being transformed by the plugin.`,\n );\n }\n\n // Wrap the implementation in a call to `tgpu.__assignAst` to associate the AST with the implementation.\n magicString.appendLeft(\n def.start,\n `${isFunctionStatement && name ? `const ${name} = ` : ''}${tgpuAlias}.__assignAst(`,\n );\n magicString.appendRight(\n def.end,\n `, ${embedJSON({ argNames, body, externalNames })}`,\n );\n\n if (externalNames.length > 0) {\n magicString.appendRight(def.end, `, {${externalNames.join(', ')}})`);\n } else {\n magicString.appendRight(\n def.end,\n `)${isFunctionStatement && name ? ';' : ''}`,\n );\n }\n\n if (removeJsImplementation) {\n magicString.overwrite(\n def.start,\n def.end,\n `${tgpuAlias}.__removedJsImpl(${name ? `\"${name}\"` : ''})`,\n );\n }\n }\n\n return {\n code: magicString.toString(),\n map: magicString.generateMap(),\n };\n },\n});\n\nconst unplugin = createUnplugin(typegpu);\n\nexport type { TypegpuPluginOptions } from './common';\n\nexport default unplugin;\n\nexport const vitePlugin = unplugin.vite;\nexport const rollupPlugin = unplugin.rollup;\nexport const rolldownPlugin = unplugin.rolldown;\nexport const webpackPlugin = unplugin.webpack;\nexport const rspackPlugin = unplugin.rspack;\nexport const esbuildPlugin = unplugin.esbuild;\nexport const farmPlugin = unplugin.farm;\nexport const babelPlugin = babel;\n"],"mappings":"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","names":["walk","MagicString","transpileFn","createUnplugin","getKernelDirective","node","statement","kernelDirectives","removeKernelDirective","typegpu","options","code","id","shouldSkipFile","ctx","ast","tgslFunctionDefs","walk","_node","_parent","prop","index","_a","gatherTgpuAliases","isShellImplementationCall","implementation","directive","magicString","MagicString","tgpuAlias","def","name","removeJsImplementation","argNames","body","externalNames","transpileFn","isFunctionStatement","embedJSON","unplugin","createUnplugin","index_default","vitePlugin","rollupPlugin","rolldownPlugin","webpackPlugin","rspackPlugin","esbuildPlugin","farmPlugin","babelPlugin","babel_default"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/babel.ts","../src/common.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 { transpileFn } from 'tinyest-for-wgsl';\nimport {\n type Context,\n type KernelDirective,\n type TypegpuPluginOptions,\n embedJSON,\n gatherTgpuAliases,\n isShellImplementationCall,\n kernelDirectives,\n shouldSkipFile,\n} from './common';\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 getKernelDirective(\n node:\n | babel.FunctionDeclaration\n | babel.FunctionExpression\n | babel.ArrowFunctionExpression,\n): KernelDirective | undefined {\n const directives = (\n 'directives' in node.body ? (node.body?.directives ?? []) : []\n ).map((directive) => directive.value.value);\n\n for (const directive of kernelDirectives) {\n if (directives.includes(directive)) {\n return directive;\n }\n }\n}\n\nfunction functionToTranspiled(\n node: babel.ArrowFunctionExpression | babel.FunctionExpression,\n ctx: Context,\n name?: string | undefined,\n): babel.CallExpression | null {\n const directive = getKernelDirective(node);\n if (!directive) {\n return null;\n }\n\n const { argNames, body, externalNames } = transpileFn(node);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n if (tgpuAlias === undefined) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${ctx.fileId ?? ''}`,\n );\n }\n\n return types.callExpression(\n template.expression(`${tgpuAlias}.__assignAst`)(),\n [\n directive === 'kernel & js'\n ? node\n : template.expression`${tgpuAlias}.__removedJsImpl(${name ? `\"${name}\"` : ''})`(),\n template.expression`${embedJSON({ argNames, body, externalNames })}`(),\n types.objectExpression(\n externalNames.map((name) =>\n types.objectProperty(types.identifier(name), types.identifier(name)),\n ),\n ),\n ],\n );\n}\n\nfunction functionVisitor(ctx: Context): TraverseOptions {\n return {\n ImportDeclaration(path) {\n gatherTgpuAliases(path.node, ctx);\n },\n\n ArrowFunctionExpression(path) {\n const transpiled = functionToTranspiled(\n path.node,\n ctx,\n path.parentPath.node.type === 'VariableDeclarator'\n ? path.parentPath.node.id.type === 'Identifier'\n ? path.parentPath.node.id.name\n : undefined\n : undefined,\n );\n if (transpiled) {\n path.replaceWith(transpiled);\n path.skip();\n }\n },\n\n FunctionExpression(path) {\n const transpiled = functionToTranspiled(\n path.node,\n ctx,\n path.node.id?.name\n ? path.node.id.name\n : path.parentPath.node.type === 'VariableDeclarator'\n ? path.parentPath.node.id.type === 'Identifier'\n ? path.parentPath.node.id.name\n : undefined\n : undefined,\n );\n if (transpiled) {\n path.replaceWith(transpiled);\n path.skip();\n }\n },\n\n FunctionDeclaration(path) {\n const node = path.node;\n const expression = types.functionExpression(\n node.id,\n node.params,\n node.body,\n );\n const transpiled = functionToTranspiled(expression, ctx, node.id?.name);\n if (transpiled && node.id) {\n path.replaceWith(\n types.variableDeclaration('const', [\n types.variableDeclarator(node.id, transpiled),\n ]),\n );\n path.skip();\n }\n },\n\n CallExpression(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 { argNames, body, externalNames } = transpileFn(implementation);\n const tgpuAlias = ctx.tgpuAliases.values().next().value;\n if (tgpuAlias === undefined) {\n throw new Error(\n `No tgpu import found, cannot assign ast to function in file: ${ctx.fileId ?? ''}`,\n );\n }\n\n const directive = getKernelDirective(implementation);\n\n path.replaceWith(\n types.callExpression(node.callee, [\n types.callExpression(\n template.expression(`${tgpuAlias}.__assignAst`)(),\n [\n directive !== 'kernel & js'\n ? template.expression`${tgpuAlias}.__removedJsImpl()`()\n : implementation,\n template.expression`${embedJSON({ argNames, body, externalNames })}`(),\n types.objectExpression(\n externalNames.map((name) =>\n types.objectProperty(\n types.identifier(name),\n types.identifier(name),\n ),\n ),\n ),\n ],\n ),\n ]),\n );\n\n path.skip();\n }\n }\n },\n };\n}\n\nexport default function () {\n return {\n visitor: {\n Program(path, state) {\n // @ts-ignore\n const code: string | undefined = state.file?.code;\n // @ts-ignore\n const options: TypegpuPluginOptions | undefined = state.opts;\n // @ts-ignore\n const id: string | undefined = state.filename;\n\n if (shouldSkipFile(options, id, code)) {\n return;\n }\n\n const ctx: Context = {\n tgpuAliases: new Set<string>(\n options?.forceTgpuAlias ? [options.forceTgpuAlias] : [],\n ),\n fileId: id,\n };\n\n path.traverse(functionVisitor(ctx));\n },\n } satisfies TraverseOptions,\n };\n}\n","import type * as babel from '@babel/types';\nimport type * as acorn from 'acorn';\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};\n\nexport interface TypegpuPluginOptions {\n include?: 'all' | RegExp[];\n forceTgpuAlias?: string;\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 (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\nconst typegpuImportRegex = /import.*from\\s*['\"]typegpu.*['\"]/;\nconst typegpuDynamicImportRegex = /import\\s*\\(\\s*['\"]\\s*typegpu.*['\"]/;\nconst typegpuRequireRegex = /require\\s*\\(\\s*['\"]\\s*typegpu.*['\"]\\s*\\)/;\n\nexport function shouldSkipFile(\n options: TypegpuPluginOptions | undefined,\n id: string | undefined,\n code: string | undefined,\n) {\n if (code && !options?.include) {\n if (\n !typegpuImportRegex.test(code) &&\n !typegpuRequireRegex.test(code) &&\n !typegpuDynamicImportRegex.test(code)\n ) {\n // No imports to `typegpu` or its sub modules, exiting early.\n return true;\n }\n } else if (\n options?.include &&\n options.include !== 'all' &&\n (!id || !options.include.some((pattern) => pattern.test(id)))\n ) {\n return true;\n }\n\n return false;\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 &&\n (node.callee.callee.object.type === 'MemberExpression'\n ? isTgpu(ctx, node.callee.callee.object.object)\n : isTgpu(ctx, node.callee.callee.object))) || // TODO: remove along with the deprecated 'does' method\n (node.callee.type === 'MemberExpression' &&\n node.arguments.length === 1 &&\n node.callee.property.type === 'Identifier' &&\n // Assuming that every call to `.does` is related to TypeGPU\n // because shells can be created separately from calls to `tgpu`,\n // making it hard to detect.\n node.callee.property.name === 'does')\n );\n}\n\nexport const kernelDirectives = ['kernel', 'kernel & js'] as const;\nexport type KernelDirective = (typeof kernelDirectives)[number];\n"],"mappings":"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","names":["Babel","transpileFn","embedJSON","jsValue","isTgpu","ctx","node","path","tail","typegpuImportRegex","typegpuDynamicImportRegex","typegpuRequireRegex","shouldSkipFile","options","id","code","pattern","gatherTgpuAliases","spec","fnShellFunctionNames","isShellImplementationCall","kernelDirectives","template","types","getKernelDirective","node","_a","_b","directives","directive","kernelDirectives","functionToTranspiled","ctx","name","argNames","body","externalNames","transpileFn","tgpuAlias","embedJSON","functionVisitor","path","gatherTgpuAliases","transpiled","expression","isShellImplementationCall","implementation","babel_default","state","code","options","id","shouldSkipFile"]}