{"version":3,"file":"index.cjs","sources":["webpack://webpack/runtime/define_property_getters","webpack://webpack/runtime/has_own_property","webpack://webpack/runtime/make_namespace_object","../src/core.ts","../src/index.ts"],"sourcesContent":["__webpack_require__.d = (exports, getters, values) => {\n\tvar define = (defs, kind) => {\n\t\tfor(var key in defs) {\n\t\t\tif(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });\n\t\t\t}\n\t\t}\n\t};\n\tdefine(getters, \"get\");\n\tdefine(values, \"value\");\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { readFile as readFileFromDisk } from 'node:fs/promises';\nimport { dirname, extname, isAbsolute, resolve, sep } from 'node:path';\nimport type {\n  PluginGlslOptions,\n  ResolvedPluginGlslOptions,\n  TransformShaderOptions,\n  TransformShaderResult,\n} from './types';\n\nexport const DEFAULT_SHADER_PATTERN = /\\.(?:glsl|wgsl|vert|frag|vs|fs)$/i;\n\nexport const DEFAULT_OPTIONS: Readonly<ResolvedPluginGlslOptions> = Object.freeze({\n  include: DEFAULT_SHADER_PATTERN,\n  defaultExtension: 'glsl',\n  warnDuplicatedImports: true,\n  removeDuplicatedImports: false,\n  importKeywords: Object.freeze(['#include']),\n  minify: false,\n  watch: true,\n  root: '/',\n});\n\nexport function resolveOptions(options: PluginGlslOptions = {}): ResolvedPluginGlslOptions {\n  const minify = options.minify ?? options.compress ?? DEFAULT_OPTIONS.minify;\n  const defaultExtension = (options.defaultExtension ?? DEFAULT_OPTIONS.defaultExtension).replace(\n    /^\\./,\n    '',\n  );\n  const importKeywords = options.importKeywords ?? DEFAULT_OPTIONS.importKeywords;\n\n  if (!defaultExtension) {\n    throw new TypeError('`defaultExtension` must not be empty.');\n  }\n\n  if (importKeywords.length === 0 || importKeywords.some((keyword) => !keyword.trim())) {\n    throw new TypeError('`importKeywords` must contain at least one non-empty keyword.');\n  }\n\n  return {\n    include: options.include ?? DEFAULT_OPTIONS.include,\n    defaultExtension,\n    warnDuplicatedImports: options.warnDuplicatedImports ?? DEFAULT_OPTIONS.warnDuplicatedImports,\n    removeDuplicatedImports:\n      options.removeDuplicatedImports ?? DEFAULT_OPTIONS.removeDuplicatedImports,\n    importKeywords: [...new Set(importKeywords.map((keyword) => keyword.trim()))],\n    minify,\n    watch: options.watch ?? DEFAULT_OPTIONS.watch,\n    root: options.root ?? DEFAULT_OPTIONS.root,\n    ...(options.exclude !== undefined ? { exclude: options.exclude } : {}),\n    ...(options.onComplete !== undefined ? { onComplete: options.onComplete } : {}),\n  };\n}\n\nfunction escapeRegExp(value: string): string {\n  return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction createImportPattern(keywords: readonly string[]): RegExp {\n  const alternatives = [...keywords]\n    .sort((left, right) => right.length - left.length)\n    .map(escapeRegExp)\n    .join('|');\n\n  return new RegExp(String.raw`(?:${alternatives})\\s+([^\\s<>]+);?`, 'gi');\n}\n\n/** Remove comments while preserving line endings and `///` documentation comments. */\nexport function stripShaderComments(\n  source: string,\n  preserveTripleSlash = true,\n  importPattern?: RegExp,\n): string {\n  let result = '';\n  let index = 0;\n  let blockComment = false;\n\n  while (index < source.length) {\n    if (blockComment) {\n      if (source[index] === '*' && source[index + 1] === '/') {\n        blockComment = false;\n        index += 2;\n      } else {\n        if (source[index] === '\\n' || source[index] === '\\r') {\n          result += source[index];\n        }\n        index += 1;\n      }\n      continue;\n    }\n\n    if (source[index] === '/' && source[index + 1] === '*') {\n      if (result && !/\\s$/.test(result)) result += ' ';\n      blockComment = true;\n      index += 2;\n      continue;\n    }\n\n    if (source[index] === '/' && source[index + 1] === '/') {\n      const isTripleSlash = source[index + 2] === '/';\n      const lineEnd = source.indexOf('\\n', index);\n      const end = lineEnd === -1 ? source.length : lineEnd;\n      const comment = source.slice(index, end);\n      const containsImport = importPattern\n        ? new RegExp(importPattern.source, importPattern.flags).test(comment)\n        : false;\n\n      if (preserveTripleSlash && isTripleSlash && !containsImport) {\n        result += comment;\n      }\n\n      index = end;\n      continue;\n    }\n\n    result += source[index];\n    index += 1;\n  }\n\n  return result;\n}\n\n/** Minify GLSL/WGSL without joining preprocessor directives to adjacent code. */\nexport function minifyShader(source: string): string {\n  const withoutComments = stripShaderComments(source, false);\n  const lines = withoutComments.split(/\\r?\\n/);\n  const result: string[] = [];\n  let code = '';\n\n  const flushCode = () => {\n    if (!code) return;\n    result.push(\n      code\n        .replace(/\\s+/g, ' ')\n        .replace(/\\s*([{}=*,+/>[\\]()!;|&])\\s*/g, '$1')\n        .replace(/\\s+([,;])/g, '$1')\n        .trim(),\n    );\n    code = '';\n  };\n\n  for (const rawLine of lines) {\n    const line = rawLine.trim();\n    if (!line) continue;\n\n    if (line.startsWith('#')) {\n      flushCode();\n      result.push(line);\n    } else {\n      code += `${code ? ' ' : ''}${line}`;\n    }\n  }\n\n  flushCode();\n  return result.join('\\n');\n}\n\nfunction normalizePath(path: string): string {\n  const normalized = path.split(sep).join('/');\n  return process.platform === 'win32' ? normalized.toLowerCase() : normalized;\n}\n\nfunction cleanSpecifier(value: string): string {\n  return value\n    .trim()\n    .replace(/^(?:\"|')|(?:\"|');?$/g, '')\n    .replace(/;$/, '');\n}\n\nfunction resolveRootDirectory(root: string, cwd: string): string {\n  if (!root || root === '/' || root === '\\\\') return cwd;\n  if (isAbsolute(root)) {\n    return resolve(cwd, root.replace(/^[/\\\\]+/, ''));\n  }\n  return resolve(cwd, root);\n}\n\nfunction resolveChunk(\n  specifier: string,\n  importer: string,\n  options: ResolvedTransformOptions,\n): string {\n  const cwd = options.cwd ?? process.cwd();\n  const rootDirectory = resolveRootDirectory(options.root, cwd);\n  const rootRelative = specifier.startsWith('/') || specifier.startsWith('\\\\');\n  const baseDirectory = rootRelative ? rootDirectory : dirname(importer);\n  const requestedPath = rootRelative ? specifier.replace(/^[/\\\\]+/, '') : specifier;\n  let chunk = resolve(baseDirectory, requestedPath);\n\n  if (!extname(chunk)) chunk = `${chunk}.${options.defaultExtension}`;\n  return chunk;\n}\n\ninterface TransformState {\n  pattern: RegExp;\n  options: ResolvedTransformOptions;\n  readFile: (path: string) => Promise<string>;\n  dependencies: Set<string>;\n  seen: Set<string>;\n  duplicateWarnings: Set<string>;\n  warnings: string[];\n}\n\ninterface ResolvedTransformOptions extends Omit<\n  ResolvedPluginGlslOptions,\n  'include' | 'exclude' | 'watch'\n> {\n  cwd: string;\n}\n\nasync function expandShader(\n  source: string,\n  resourcePath: string,\n  stack: string[],\n  state: TransformState,\n): Promise<string> {\n  const cleanSource = stripShaderComments(source, true, state.pattern);\n  const pattern = new RegExp(state.pattern.source, state.pattern.flags);\n  const matches = [...cleanSource.matchAll(pattern)];\n  if (matches.length === 0) return cleanSource.trim();\n\n  let cursor = 0;\n  let output = '';\n\n  for (const match of matches) {\n    const matchIndex = match.index ?? 0;\n    output += cleanSource.slice(cursor, matchIndex);\n    cursor = matchIndex + match[0].length;\n\n    const specifier = cleanSpecifier(match[1] ?? '');\n    const chunkPath = resolveChunk(specifier, resourcePath, state.options);\n    const chunkKey = normalizePath(chunkPath);\n    const cycleIndex = stack.findIndex((item) => item === chunkKey);\n\n    if (cycleIndex !== -1) {\n      const cycle = [...stack.slice(cycleIndex), chunkKey].join(' -> ');\n      throw new Error(`Recursive shader import detected: ${cycle}`);\n    }\n\n    state.dependencies.add(chunkPath);\n\n    if (state.seen.has(chunkKey)) {\n      const warningKey = `${normalizePath(resourcePath)}:${chunkKey}`;\n      if (state.options.warnDuplicatedImports && !state.duplicateWarnings.has(warningKey)) {\n        state.duplicateWarnings.add(warningKey);\n        state.warnings.push(\n          `Shader chunk \"${chunkPath}\" is imported multiple times by \"${resourcePath}\".`,\n        );\n      }\n\n      if (state.options.removeDuplicatedImports) continue;\n    }\n\n    state.seen.add(chunkKey);\n\n    let chunkSource: string;\n    try {\n      chunkSource = await state.readFile(chunkPath);\n    } catch (error) {\n      const detail = error instanceof Error ? ` ${error.message}` : '';\n      throw new Error(\n        `Unable to load shader chunk \"${specifier}\" imported by \"${resourcePath}\".${detail}`,\n        { cause: error },\n      );\n    }\n\n    output += await expandShader(chunkSource, chunkPath, [...stack, chunkKey], state);\n  }\n\n  output += cleanSource.slice(cursor);\n  return output.trim().replace(/(\\r\\n|\\r|\\n){3,}/g, '$1\\n');\n}\n\n/** Expand, validate and optionally minify a shader without shared process state. */\nexport async function transformShader(\n  source: string,\n  resourcePath: string,\n  options: TransformShaderOptions = {},\n): Promise<TransformShaderResult> {\n  const resolved = resolveOptions(options);\n  const transformOptions: ResolvedTransformOptions = {\n    defaultExtension: resolved.defaultExtension,\n    warnDuplicatedImports: resolved.warnDuplicatedImports,\n    removeDuplicatedImports: resolved.removeDuplicatedImports,\n    importKeywords: resolved.importKeywords,\n    minify: resolved.minify,\n    root: resolved.root,\n    cwd: options.cwd ?? process.cwd(),\n    ...(resolved.onComplete ? { onComplete: resolved.onComplete } : {}),\n  };\n  const readFile = options.readFile ?? ((path: string) => readFileFromDisk(path, 'utf8'));\n  const state: TransformState = {\n    pattern: createImportPattern(transformOptions.importKeywords),\n    options: transformOptions,\n    readFile: async (path) => String(await readFile(path)),\n    dependencies: new Set(),\n    seen: new Set([normalizePath(resourcePath)]),\n    duplicateWarnings: new Set(),\n    warnings: [],\n  };\n\n  let code = await expandShader(source, resourcePath, [normalizePath(resourcePath)], state);\n\n  if (typeof transformOptions.minify === 'function') {\n    code = await transformOptions.minify(code, resourcePath);\n  } else if (transformOptions.minify) {\n    code = minifyShader(code);\n  }\n\n  if (transformOptions.onComplete) {\n    code = await transformOptions.onComplete(code, resourcePath);\n  }\n\n  return {\n    code,\n    dependencies: [...state.dependencies],\n    warnings: state.warnings,\n  };\n}\n","import { dirname, extname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { RsbuildPlugin } from '@rsbuild/core';\nimport { resolveOptions } from './core';\nimport type { PluginGlslOptions } from './types';\n\nexport {\n  DEFAULT_OPTIONS,\n  DEFAULT_SHADER_PATTERN,\n  minifyShader,\n  resolveOptions,\n  stripShaderComments,\n  transformShader,\n} from './core';\nexport type {\n  PluginGlslOptions,\n  ResolvedPluginGlslOptions,\n  ShaderProcessor,\n  TransformShaderOptions,\n  TransformShaderResult,\n} from './types';\n\nexport const PLUGIN_GLSL_NAME = 'rsbuild:glsl';\n\nfunction getLoaderPath(): string {\n  const currentFile = fileURLToPath(import.meta.url);\n  const loaderExtension = extname(currentFile) === '.cjs' ? '.cjs' : '.js';\n  return join(dirname(currentFile), `glsl-loader${loaderExtension}`);\n}\n\nexport const pluginGlsl = (options: PluginGlslOptions = {}): RsbuildPlugin => {\n  const resolvedOptions = resolveOptions(options);\n\n  return {\n    name: PLUGIN_GLSL_NAME,\n    setup(api) {\n      api.modifyBundlerChain((chain) => {\n        const rule = chain.module\n          .rule('glsl')\n          .type('javascript/auto')\n          .test(resolvedOptions.include)\n          .use('glsl')\n          .loader(getLoaderPath())\n          .options(resolvedOptions)\n          .end();\n\n        if (resolvedOptions.exclude) {\n          rule.exclude.add(resolvedOptions.exclude);\n        }\n      });\n    },\n  };\n};\n"],"names":["__webpack_require__","getters","values","define","defs","kind","key","Object","obj","prop","Symbol","DEFAULT_SHADER_PATTERN","DEFAULT_OPTIONS","resolveOptions","options","minify","defaultExtension","importKeywords","TypeError","keyword","Set","undefined","escapeRegExp","value","createImportPattern","keywords","alternatives","left","right","RegExp","String","stripShaderComments","source","preserveTripleSlash","importPattern","result","index","blockComment","isTripleSlash","lineEnd","end","comment","containsImport","minifyShader","withoutComments","lines","code","flushCode","rawLine","line","normalizePath","path","normalized","sep","process","cleanSpecifier","resolveRootDirectory","root","cwd","isAbsolute","resolve","resolveChunk","specifier","importer","rootDirectory","rootRelative","baseDirectory","dirname","requestedPath","chunk","extname","expandShader","resourcePath","stack","state","cleanSource","pattern","matches","cursor","output","match","matchIndex","chunkPath","chunkKey","cycleIndex","item","cycle","Error","warningKey","chunkSource","error","detail","transformShader","resolved","transformOptions","readFile","readFileFromDisk","PLUGIN_GLSL_NAME","getLoaderPath","currentFile","fileURLToPath","loaderExtension","join","pluginGlsl","resolvedOptions","api","chain","rule"],"mappings":"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"}