shadow$provide.module$node_modules$pixi_DOT_js$lib$rendering$renderers$gpu$shader$utils$extractAttributesFromGpuProgram = function(global, require, module, exports) {
  function parseLocations(str, results) {
    let match;
    for (; null !== (match = LOCATION_REGEX.exec(str));) {
      const format = WGSL_TO_VERTEX_TYPES[match[3]] ?? "float32";
      results[match[2]] = {location:parseInt(match[1], 10), format, stride:getAttributeInfoFromFormat.getAttributeInfoFromFormat(format).stride, offset:0, instance:!1, start:0};
    }
    LOCATION_REGEX.lastIndex = 0;
  }
  var getAttributeInfoFromFormat = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$geometry$utils$getAttributeInfoFromFormat");
  "use strict";
  const WGSL_TO_VERTEX_TYPES = {f32:"float32", "vec2\x3cf32\x3e":"float32x2", "vec3\x3cf32\x3e":"float32x3", "vec4\x3cf32\x3e":"float32x4", vec2f:"float32x2", vec3f:"float32x3", vec4f:"float32x4", i32:"sint32", "vec2\x3ci32\x3e":"sint32x2", "vec3\x3ci32\x3e":"sint32x3", "vec4\x3ci32\x3e":"sint32x4", vec2i:"sint32x2", vec3i:"sint32x3", vec4i:"sint32x4", u32:"uint32", "vec2\x3cu32\x3e":"uint32x2", "vec3\x3cu32\x3e":"uint32x3", "vec4\x3cu32\x3e":"uint32x4", vec2u:"uint32x2", vec3u:"uint32x3", vec4u:"uint32x4", 
  bool:"uint32", "vec2\x3cbool\x3e":"uint32x2", "vec3\x3cbool\x3e":"uint32x3", "vec4\x3cbool\x3e":"uint32x4"}, LOCATION_REGEX = /@location\((\d+)\)\s+([a-zA-Z0-9_]+)\s*:\s*([a-zA-Z0-9_<>]+)(?:,|\s|\)|$)/g;
  exports.extractAttributesFromGpuProgram = function({source, entryPoint}) {
    const results = {};
    source = source.replace(/\/\/.*$/gm, "").replace(/\/\*[\s\S]*?\*\//g, "");
    entryPoint = source.indexOf(`fn ${entryPoint}(`);
    if (-1 === entryPoint) {
      return results;
    }
    const arrowFunctionStart = source.indexOf("-\x3e", entryPoint);
    if (-1 === arrowFunctionStart) {
      return results;
    }
    entryPoint = source.substring(entryPoint, arrowFunctionStart);
    parseLocations(entryPoint, results);
    0 === Object.keys(results).length && (entryPoint = entryPoint.match(/\(\s*\w+\s*:\s*(\w+)/)) && (source = source.match(new RegExp(`struct\\s+${entryPoint[1]}\\s*\\{([^}]+)\\}`, "s"))) && parseLocations(source[1], results);
    return results;
  };
};

//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$rendering$renderers$gpu$shader$utils$extractAttributesFromGpuProgram.js.map
