{"version":3,"sources":["../src/lib/assert.ts","../src/lib/finalize.ts","../src/lib/loader.ts","../src/lib/error.ts","../src/lib/merge.ts","../package.json","../src/lib/common.ts","../src/index.ts"],"names":["resolve","promises","message","key"],"mappings":"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","sourcesContent":["\nexport function checkBaseDir(baseDir: string): void {\n  if (!baseDir) {\n    throw new Error('baseDir is required')\n  }\n\n  // パターンマッチ用文字列だったらエラーにする\n  if (baseDir.includes('*')) {\n    throw new Error(`baseDir must not contain wildcard. (baseDir: ${baseDir})`)\n  }\n}\n","import type { Config, ExportType } from \"./type\"\nimport { promises } from 'fs'\nimport { resolve } from 'path'\n\nexport async function finalize(result: unknown, config: Config): Promise<unknown> {\n  const finalized = await stringifyMap[config.exportType ?? 'json'](result)\n\n  if (config.exportType !== 'object' && config.export) {\n    await outputFile(finalized as string, config)\n  }\n\n  return finalized\n}\n\nasync function outputFile(result: string, config: Config): Promise<void> {\n  const exportPath = resolve(config.cwd ?? process.cwd(), config.export!)\n\n  await promises.mkdir(exportPath, { recursive: true })\n\n  await promises.writeFile(exportPath, JSON.stringify(result, null, 2))\n}\n\ntype Finalize = (result: unknown) => string | unknown | Promise<string>\n\nconst stringifyMap = {\n  json: (result: unknown) => JSON.stringify(result, null, 2),\n  yaml: async (result: unknown) => {\n    const { stringify } = await import('yaml')\n    return stringify(result, { indent: 2 })\n  },\n  object: (result: unknown) => result\n} as const satisfies Record<ExportType, Finalize>\n","import { resolve } from 'path'\nimport { promises } from 'fs'\nimport type { Config, Extension } from './type'\nimport globby from 'globby'\nimport { type ErrorReason, JsonFusionError } from './error'\n\nconst { readFile } = promises\n\nexport interface JsonFusionContext {\n  files: string[]\n  config: Config\n  jsons: JsonContext[]\n}\n\nexport interface JsonContext {\n  filePath: string\n  path: string\n  json: unknown\n}\n\nexport async function loadContext(baseDir: string, config: Config): Promise<JsonFusionContext> {\n  const [founds, ignores] = await Promise.all([\n    globFiles(baseDir, config),\n    ignoreFiles(baseDir, config)\n  ])\n  const files = founds.filter((file) => !ignores.includes(file))\n\n  return {\n    files,\n    config,\n    jsons: await loadJsons(files, baseDir, config)\n  }\n}\n\nfunction globFiles(baseDir: string, config: Config): Promise<string[]> {\n  return globby(baseDir, {\n    expandDirectories: {\n      extensions: (config.extensions ?? ['json']).flatMap((ext) => extensionAliases[ext])\n    },\n    gitignore: false,\n    cwd: config.cwd\n  })\n}\n\nconst extensionAliases = {\n  yaml: ['yml', 'yaml'],\n  json: ['json']\n} satisfies Record<Extension, string[]>\n\nconst extensions = Object.values(extensionAliases).flat()\n\nfunction getExtension(filePath: string): string {\n  const ext = filePath.split('.').pop() ?? ''\n  const found = Object.entries(extensionAliases).find(([, aliases]) =>\n    (aliases as readonly string[]).includes(ext)\n  )\n  return found?.[0] ?? ext\n}\n\nasync function ignoreFiles(baseDir: string, config: Config): Promise<string[]> {\n  if ((config.ignore ?? []).length <= 0) {\n    return []\n  }\n\n  return globby(config.ignore!, {\n    gitignore: true,\n    cwd: config.cwd\n  })\n}\n\nasync function loadJsons(files: string[], baseDir: string, config: Config): Promise<JsonContext[]> {\n  const loader = new JsonLoader(baseDir, config)\n  await loader.init()\n\n  const result = await Promise.all(files.map((path) => loader.load(path)))\n\n  const errors = result.filter((item): item is LoadJsonResult & { error: string } => !!item.error)\n  if (errors.length > 0) {\n    throw new JsonFusionError('Failed to load jsons', errors.map(toErrorReason))\n  }\n\n  return result as JsonContext[]\n}\n\nconst cwd = process.cwd()\n\ninterface LoadJsonResult {\n  filePath: string\n  path: string\n  json?: unknown\n  error?: string\n}\n\ntype Parser = (raw: string) => unknown\n\nclass JsonLoader {\n  constructor(\n    private readonly baseDir: string,\n    private readonly config: Config\n  ) {}\n\n  #parsers: Partial<Record<Extension, Parser>> = {\n    json: (raw) => JSON.parse(raw)\n  }\n\n  async init() {\n    if (this.config.extensions?.includes('yaml')) {\n      this.#parsers.yaml = await this.#createYamlParser()\n    }\n  }\n\n  async #createYamlParser(): Promise<Parser> {\n    const { parse } = await import('yaml')\n    return (raw) => parse(raw, { prettyErrors: true })\n  }\n\n  #assertSupportedExtension(ext: string): asserts ext is Extension {\n    if (!(this.config.extensions ?? ['json']).includes(ext as Extension)) {\n      throw new Error(`Unsupported file extension: ${ext}`)\n    }\n  }\n\n  #getPath(filePath: string): string {\n    return filePath\n      .replace(/^\\.\\//, '')\n      .replace(new RegExp(`^${this.baseDir.replace(/^\\.\\//, '')}/`), '')\n      .replace(new RegExp(`\\\\.(${extensions.join('|')})$`), '')\n  }\n\n  #parse(raw: string, ext: Extension): unknown {\n    const parser = this.#parsers[ext]\n    if (!parser) {\n      throw new Error(`Unsupported file extension: ${ext}`)\n    }\n    return parser(raw)\n  }\n\n  #errorToString(e: unknown): string {\n    if (e instanceof Error) {\n      return `${e.name}: ${e.message}`\n    }\n    return String(e)\n  }\n\n  async load(filePath: string): Promise<LoadJsonResult> {\n    const importPath = resolve(this.config.cwd ?? cwd, filePath)\n    const ext = getExtension(filePath)\n    this.#assertSupportedExtension(ext)\n    const path = this.#getPath(filePath)\n\n    const raw = await readFile(importPath, 'utf-8')\n\n    try {\n      return {\n        filePath,\n        path,\n        json: this.#parse(raw, ext)\n      }\n    } catch (e) {\n      return {\n        filePath,\n        path,\n        error: this.#errorToString(e)\n      }\n    }\n  }\n}\n\nfunction toErrorReason(result: LoadJsonResult & { error: string }): ErrorReason {\n  return {\n    message: result.error,\n    filePath: result.filePath\n  }\n}\n","export interface ErrorReason {\n  message: string\n  filePath: string\n}\n\nexport class JsonFusionError extends Error {\n  override name = 'JsonFusionError'\n\n  constructor(\n    message: string,\n    reasons: ErrorReason[]\n  ) {\n    super(createMessage(message, reasons))\n  }\n}\n\nfunction createMessage(message: string, reasons: ErrorReason[]): string {\n  return `${message}\\n${reasons\n    .map(({ message, filePath }) =>\n      ['  -', message, filePath ? `(filePath: ${filePath})` : ''].join(' ')\n    )\n    .join('\\n')}`\n}\n","import { all as merge } from 'deepmerge'\nimport type { JsonFusionContext } from './loader'\nimport type { Config } from '..'\n\nexport function mergeJson(context: JsonFusionContext): unknown {\n  const jsons = context.jsons\n    .sort((a, b) => a.path.localeCompare(b.path))\n    .map(({ path, json }) => fixHierarchy(path, json, context.config))\n\n  return merge(jsons)\n}\n\nfunction fixHierarchy(path: string, json: unknown, config: Config): object {\n  const keys = path.split('/').filter((key) => key !== '')\n\n  if (!config.noSpreadIndex && keys[keys.length - 1] === 'index') {\n    keys.pop()\n  }\n\n  if (keys.length === 0) {\n    if (typeof json !== 'object') {\n      throw new Error('root json must be object')\n    }\n    return json as object\n  }\n\n  return keys.reduceRight((acc, key) => {\n    return {\n      [key]: acc\n    }\n  }, json) as object\n}\n","{\n  \"name\": \"json-fusion\",\n  \"version\": \"0.2.3\",\n  \"description\": \"Json-Fusion is a Node.js library designed to streamline the process of loading, merging, and reflecting directory hierarchies in JSON files. With Json-Fusion, you can consolidate information scattered across different JSON files, and reflect your filesystem's structure directly in your data, all with just a few lines of code.\",\n  \"keywords\": [\n    \"json\",\n    \"yaml\",\n    \"merge\",\n    \"hierarchies\"\n  ],\n  \"repository\": {\n    \"url\": \"https://github.com/hacomono-lib/json-fusion\",\n    \"type\": \"git\"\n  },\n  \"author\": \"mew-ton <mxl_usmarc@slmail.mewton.jp>\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=14\"\n  },\n  \"packageManager\": \"yarn@3.6.3\",\n  \"type\": \"module\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"scripts\": {\n    \"dev\": \"vitest\",\n    \"build\": \"tsup\",\n    \"test\": \"run-p test:*\",\n    \"test:spec\": \"vitest --run --silent\",\n    \"test:type\": \"tsc --noEmit -p tsconfig.json\",\n    \"lint\": \"eslint --ext .ts .\",\n    \"format\": \"prettier --write . --ignore-path=.eslintignore\",\n    \"dedup\": \"yarn-deduplicate --strategy fewer\"\n  },\n  \"dependencies\": {\n    \"deepmerge\": \"^4.3.1\",\n    \"globby\": \"^11.1.0\"\n  },\n  \"devDependencies\": {\n    \"@changesets/changelog-github\": \"^0.4.8\",\n    \"@changesets/cli\": \"^2.26.2\",\n    \"@typescript-eslint/eslint-plugin\": \"^6.7.3\",\n    \"@typescript-eslint/parser\": \"^6.7.3\",\n    \"eslint\": \"^8.50.0\",\n    \"eslint-config-prettier\": \"^9.0.0\",\n    \"eslint-plugin-import\": \"^2.28.1\",\n    \"prettier\": \"^3.0.3\",\n    \"tsup\": \"^7.2.0\",\n    \"typescript\": \"^5.2.2\",\n    \"vitest\": \"^0.34.6\",\n    \"yaml\": \"^2.3.2\",\n    \"yarn-run-all\": \"latest\"\n  },\n  \"peerDependencies\": {\n    \"typescript\": \">= 4.0.0\",\n    \"yaml\": \">= 2.0.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"typescript\": {\n      \"optional\": true\n    },\n    \"yaml\": {\n      \"optional\": true\n    }\n  }\n}\n","import pkg from '../../package.json' assert { type: 'json' }\n\nexport const key = `[${pkg.name}]`\n","import { checkBaseDir } from './lib/assert'\nimport { finalize } from './lib/finalize'\nimport { loadContext } from './lib/loader'\nimport { mergeJson } from './lib/merge'\nimport type { Config } from './lib/type'\nimport { key } from './lib/common'\nimport { JsonFusionError } from './lib/error'\n\nexport { JsonFusionError, Config }\n\nasync function main(baseDir: string, config: Config): Promise<unknown> {\n  checkBaseDir(baseDir)\n\n  console.debug(key, 'baseDir:', baseDir)\n  console.debug(key, 'config:', config)\n\n  const context = await loadContext(baseDir, config)\n\n  console.debug(key, 'load jsons:', context.jsons)\n\n  const result = mergeJson(context)\n\n  console.debug(key, 'result:', result)\n\n  return await finalize(result, config)\n}\n\n/**\n *\n * @param baseDir\n * @param config\n */\nexport function jsonFusion(baseDir: string, config?: Config & { exportType?: 'json' | 'yaml' }): Promise<string>\n\n/**\n *\n * @param baseDir\n * @param config\n */\nexport function jsonFusion<T = unknown>(baseDir: string, config: Config & { exportType: 'object' }): Promise<T>\n\nexport function jsonFusion(baseDir: string, config: Config = {}): Promise<unknown> {\n  return main(baseDir, config)\n}\n"]}