{"version":3,"file":"file.mjs","names":["baseDir"],"sources":["../../../../src/transpiler/file/file.ts"],"sourcesContent":["import { existsSync, readFileSync, statSync } from 'node:fs';\nimport { dirname, isAbsolute, relative, resolve } from 'node:path';\nimport { colorizePath, getAppLogger } from '@intlayer/config/logger';\nimport type { TypedNodeModel } from '@intlayer/types/nodeType';\nimport { FILE, formatNodeType } from '@intlayer/types/nodeType';\n\nexport type FileContentConstructor<T extends Record<string, any> = {}> =\n  TypedNodeModel<typeof FILE, string, T>;\n\nexport type FileContent = FileContentConstructor<{\n  content: string;\n  fixedPath?: string;\n}>;\n\nexport const fileContent = (\n  path: string,\n  callerDir: string,\n  baseDir: string\n): FileContent => {\n  const isRelativePath = path.startsWith('./') || path.startsWith('../');\n  const appLogger = getAppLogger();\n\n  let filePath: string;\n  if (isAbsolute(path)) {\n    appLogger(\n      `Using absolute path for file is not recommended. Use relative paths instead. Path: ${path}, imported from: ${callerDir}`,\n      { level: 'warn' }\n    );\n    filePath = path;\n  } else if (isRelativePath) {\n    filePath = resolve(callerDir, path);\n  } else {\n    filePath = resolve(baseDir, path);\n  }\n\n  if (existsSync(filePath) && statSync(filePath).isFile()) {\n    try {\n      const content = readFileSync(filePath, 'utf8');\n\n      return formatNodeType(FILE, path, {\n        content,\n        fixedPath: relative(baseDir, filePath),\n      });\n    } catch {\n      throw new Error(\n        `Unable to read path: ${colorizePath(relative(baseDir, filePath))}`\n      );\n    }\n  } else {\n    throw new Error(\n      `File not found: ${colorizePath(relative(baseDir, filePath))}`\n    );\n  }\n};\n\ntype GlobalIntlayerFilePath = {\n  INTLAYER_FILE_PATH: string;\n  INTLAYER_BASE_DIR: string;\n};\n\n/**\n * Function intended to be used to build intlayer dictionaries.\n *\n * Allow identify the usage of an external resource.\n *\n * Usage:\n *\n * ```ts\n * file('/path/to/file.md') // absolute path\n *\n * // or\n *\n * file('path/to/file.md') // relative path\n * ```\n */\nexport const file = (path: string): FileContent => {\n  const { INTLAYER_FILE_PATH, INTLAYER_BASE_DIR } =\n    globalThis as unknown as GlobalIntlayerFilePath;\n\n  const callerDir = dirname(INTLAYER_FILE_PATH);\n  const baseDir = INTLAYER_BASE_DIR;\n\n  return fileContent(path, callerDir, baseDir);\n};\n"],"mappings":";;;;;;AAcA,MAAa,eACX,MACA,WACA,YACgB;CAChB,MAAM,iBAAiB,KAAK,WAAW,KAAK,IAAI,KAAK,WAAW,MAAM;CACtE,MAAM,YAAY,cAAc;CAEhC,IAAI;AACJ,KAAI,WAAW,KAAK,EAAE;AACpB,YACE,sFAAsF,KAAK,mBAAmB,aAC9G,EAAE,OAAO,QAAQ,CAClB;AACD,aAAW;YACF,eACT,YAAW,QAAQ,WAAW,KAAK;KAEnC,YAAW,QAAQ,SAAS,KAAK;AAGnC,KAAI,WAAW,SAAS,IAAI,SAAS,SAAS,CAAC,QAAQ,CACrD,KAAI;AAGF,SAAO,eAAe,MAAM,MAAM;GAChC,SAHc,aAAa,UAAU,OAG9B;GACP,WAAW,SAAS,SAAS,SAAS;GACvC,CAAC;SACI;AACN,QAAM,IAAI,MACR,wBAAwB,aAAa,SAAS,SAAS,SAAS,CAAC,GAClE;;KAGH,OAAM,IAAI,MACR,mBAAmB,aAAa,SAAS,SAAS,SAAS,CAAC,GAC7D;;;;;;;;;;;;;;;;;AAwBL,MAAa,QAAQ,SAA8B;CACjD,MAAM,EAAE,oBAAoB,sBAC1B;AAKF,QAAO,YAAY,MAHD,QAAQ,mBAGQ,EAAEA,kBAAQ"}