{"version":3,"sources":["../../src/processor/utils/file-collector.ts","../../src/processor/utils/normalizer.ts","../../src/processor/processFiles.ts"],"names":["__name","yauzl","err","path","fs","fetchAndRegisterSchemas","processTokenSets"],"mappings":"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","file":"processor-node.cjs","sourcesContent":["import type { Stats } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport * as yauzl from \"yauzl\";\n\nenum FileType {\n  ZIP = \"ZIP\",\n  JSON = \"JSON\",\n  DIRECTORY = \"DIRECTORY\",\n}\n\nfunction parseJson(content: string, fileName: string): unknown {\n  try {\n    return JSON.parse(content);\n  } catch (error) {\n    throw new Error(\n      `Failed to parse JSON in file '${fileName}': ${error instanceof Error ? error.message : String(error)}`,\n    );\n  }\n}\n\nfunction removeJsonExtension(fileName: string): string {\n  return fileName.replace(/\\.json$/i, \"\");\n}\n\nasync function loadZipToMemory(zipPath: string): Promise<Record<string, unknown>> {\n  return new Promise((resolve, reject) => {\n    const filesContent: Record<string, unknown> = {};\n\n    yauzl.open(zipPath, { lazyEntries: true }, (err, zipfile) => {\n      if (err) {\n        reject(new Error(`Failed to open ZIP file: ${err.message}`));\n        return;\n      }\n\n      if (!zipfile) {\n        reject(new Error(\"Failed to open ZIP file\"));\n        return;\n      }\n\n      zipfile.readEntry();\n\n      zipfile.on(\"entry\", (entry) => {\n        if (entry.fileName.endsWith(\"/\")) {\n          zipfile.readEntry();\n          return;\n        }\n\n        if (entry.fileName.endsWith(\".json\")) {\n          zipfile.openReadStream(entry, (err, readStream) => {\n            if (err) {\n              reject(new Error(`Failed to read entry ${entry.fileName}: ${err.message}`));\n              return;\n            }\n\n            if (!readStream) {\n              reject(new Error(`Failed to read entry ${entry.fileName}`));\n              return;\n            }\n\n            let data = \"\";\n            readStream.on(\"data\", (chunk) => {\n              data += chunk;\n            });\n\n            readStream.on(\"end\", () => {\n              try {\n                const fileNameWithoutExt = removeJsonExtension(entry.fileName);\n                filesContent[fileNameWithoutExt] = parseJson(data, entry.fileName);\n                zipfile.readEntry();\n              } catch (error) {\n                reject(error);\n              }\n            });\n\n            readStream.on(\"error\", (streamErr) => {\n              reject(new Error(`Error reading stream for ${entry.fileName}: ${streamErr.message}`));\n            });\n          });\n        } else {\n          zipfile.readEntry();\n        }\n      });\n\n      zipfile.on(\"end\", () => {\n        resolve(filesContent);\n      });\n\n      zipfile.on(\"error\", (zipErr) => {\n        reject(new Error(`ZIP file error: ${zipErr.message}`));\n      });\n    });\n  });\n}\n\nfunction detectFileType(filePath: string, stats: Stats): FileType {\n  if (stats.isDirectory()) {\n    return FileType.DIRECTORY;\n  }\n\n  const ext = path.extname(filePath).toLowerCase();\n\n  if (ext === \".zip\") return FileType.ZIP;\n  if (ext === \".json\") return FileType.JSON;\n\n  throw new Error(`Unsupported file type: ${ext}`);\n}\n\n/**\n * Collects JSON files from a given path (file, directory, or ZIP archive).\n * Returns a record where keys are file names without the .json extension.\n *\n * @param filePath - Path to a JSON file, directory containing JSON files, or ZIP archive\n * @returns Record mapping file names (without extension) to their parsed JSON content\n * @throws Error if the file type is unsupported or if JSON parsing fails\n */\nexport async function collectJsonFiles(filePath: string): Promise<Record<string, unknown>> {\n  const fileStats = await fs.stat(filePath);\n  const fileType = detectFileType(filePath, fileStats);\n\n  switch (fileType) {\n    case FileType.ZIP: {\n      const filesContent = await loadZipToMemory(filePath);\n      return filesContent;\n    }\n\n    case FileType.JSON: {\n      const content = await fs.readFile(filePath, \"utf-8\");\n      const fileName = path.basename(filePath);\n      const fileNameWithoutExt = removeJsonExtension(fileName);\n      const parsed = parseJson(content, fileName);\n      return { [fileNameWithoutExt]: parsed };\n    }\n\n    case FileType.DIRECTORY: {\n      const files = await fs.readdir(filePath);\n      const jsonFiles: Record<string, unknown> = {};\n\n      for (const file of files) {\n        if (path.extname(file).toLowerCase() === \".json\") {\n          const fullPath = path.join(filePath, file);\n          const content = await fs.readFile(fullPath, \"utf-8\");\n          const parsed = parseJson(content, file);\n          const fileNameWithoutExt = removeJsonExtension(file);\n          jsonFiles[fileNameWithoutExt] = parsed;\n        }\n      }\n\n      return jsonFiles;\n    }\n  }\n}\n","export function normalizeJsonFiles(jsonFiles: Record<string, unknown>): Record<string, unknown> {\n  const isSingleEntry = Object.keys(jsonFiles).length === 1;\n\n  if (!isSingleEntry) {\n    return jsonFiles; // Already multi-file\n  }\n\n  const [, content] = Object.entries(jsonFiles)[0];\n\n  if (typeof content !== \"object\" || content === null) {\n    throw new Error(\"File content is not an object\");\n  }\n\n  // Check if single file has metadata keys (like $themes, $metadata)\n  const hasMetadata = Object.keys(content as Record<string, unknown>).some((key) =>\n    key.startsWith(\"$\"),\n  );\n  if (hasMetadata) {\n    return content as Record<string, unknown>;\n  }\n\n  return jsonFiles;\n}\n","import { fetchAndRegisterSchemas } from \"@src/utils/schema-fetcher\";\nimport { processTokenSets } from \"./process\";\nimport type { ProcessFilesOptions, ProcessResult } from \"./types\";\nimport { collectJsonFiles } from \"./utils/file-collector\";\nimport { normalizeJsonFiles } from \"./utils/normalizer\";\n\nexport { collectJsonFiles };\nexport { normalizeJsonFiles };\n\n/**\n * Process tokens from files on disk.\n */\nexport async function processTokensFromFiles<T = any>({\n  path: inputPath,\n  schemas,\n  activeSets,\n  activeTheme,\n  builder,\n}: ProcessFilesOptions<T>): Promise<ProcessResult<T>> {\n  await fetchAndRegisterSchemas(schemas ?? []);\n\n  const jsonFiles = await collectJsonFiles(inputPath);\n\n  const normalizedFiles = normalizeJsonFiles(jsonFiles);\n\n  return processTokenSets<T>(normalizedFiles, {\n    activeSets,\n    activeTheme,\n    builder,\n  });\n}\n"]}