UNPKG

pixi.js

Version:

<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">

46 lines (43 loc) 1.45 kB
'use strict'; "use strict"; function extractStructAndGroups(wgsl) { const linePattern = /(^|[^/])@(group|binding)\(\d+\)[^;]+;/g; const groupPattern = /@group\((\d+)\)/; const bindingPattern = /@binding\((\d+)\)/; const namePattern = /var(<[^>]+>)? (\w+)/; const typePattern = /:\s*(\w+)/; const structPattern = /struct\s+(\w+)\s*{([^}]+)}/g; const structMemberPattern = /(\w+)\s*:\s*([\w\<\>]+)/g; const structName = /struct\s+(\w+)/; const groups = wgsl.match(linePattern)?.map((item) => ({ group: parseInt(item.match(groupPattern)[1], 10), binding: parseInt(item.match(bindingPattern)[1], 10), name: item.match(namePattern)[2], isUniform: item.match(namePattern)[1] === "<uniform>", type: item.match(typePattern)[1] })); if (!groups) { return { groups: [], structs: [] }; } const structs = wgsl.match(structPattern)?.map((struct) => { const name = struct.match(structName)[1]; const members = struct.match(structMemberPattern).reduce((acc, member) => { const [name2, type] = member.split(":"); acc[name2.trim()] = type.trim(); return acc; }, {}); if (!members) { return null; } return { name, members }; }).filter(({ name }) => groups.some((group) => group.type === name)) ?? []; return { groups, structs }; } exports.extractStructAndGroups = extractStructAndGroups; //# sourceMappingURL=extractStructAndGroups.js.map