{"version":3,"sources":["../src/fileToJson.ts","../src/getComment.ts","../src/getCommentString.ts","../src/jsonToString.ts","../src/jsonToYaml.ts","../src/jsonToFile.ts"],"sourcesContent":["import { fromPairs } from '@lskjs/algos';\nimport { Err } from '@lskjs/err';\nimport { existsSync as exists } from 'fs';\nimport { readFile } from 'fs/promises';\nimport yaml from 'js-yaml';\n\nexport async function fileToJson(filename: string, { type = 'keyval' } = {}) {\n  if (!exists(filename)) return null;\n  try {\n    if (type === 'js') {\n      // eslint-disable-next-line import/no-dynamic-require\n      const data = require(filename);\n      delete require.cache[require.resolve(filename)];\n      return data;\n    }\n    const str = (await readFile(filename)).toString();\n    if (type === 'json') {\n      return JSON.parse(str);\n    }\n    if (type === 'keyval' || type === 'keyvalue' || type === 'env' || type === 'dotenv') {\n      if (!str) return [];\n      const keyvalues = String(str)\n        .split('\\n')\n        .map((a) => {\n          const s = a.trim();\n          if (s[0] === '#') return null;\n          if (s.indexOf('=') === -1) return null;\n          const delimiter = s.indexOf('=');\n          const key = s.substr(0, delimiter);\n          if (!key) return null;\n          const value = s.substr(delimiter + 1);\n          return [key, value];\n        })\n        .filter(Boolean) as [string, string][];\n      // console.log({ str, keyvalues });\n      return fromPairs(keyvalues);\n    }\n    if (type === 'yaml' || type === 'yml') {\n      return yaml.load(str);\n    }\n    throw new Err('!type', { data: { type } });\n  } catch (err) {\n    // TODO: обработать ошибку если\n    // eslint-disable-next-line no-console\n    console.error('fileToJson err', err, { filename, type });\n    return null;\n  }\n}\n\nexport default fileToJson;\n","export const toHumanDate = (date: Date) =>\n  `${new Date(date).toISOString().substr(0, 10)} ${new Date().toISOString().substr(11, 8)}`;\n\nconst defaultFooter = 'Auto generated by http://npmjs.com/package/@lskjs/stringify';\nexport interface CommentProps {\n  source?: string;\n  url?: string;\n  filename?: string;\n  name?: string;\n  date?: Date;\n  footer?: string;\n  values?: Array<[string, string]>;\n}\nexport const getComment = (props: CommentProps) => {\n  const date = props.date || new Date();\n  const url = props.source || props.url;\n  const name = props.filename || props.name;\n  const footer = props.footer || defaultFooter;\n  const values = props.values || [];\n\n  const keyValues = [\n    ['Source', url],\n    ['Date', toHumanDate(date)],\n    ['Filename', name],\n    ...values,\n    ['Footer', footer],\n  ];\n\n  const maxKeyLength = Math.max(...keyValues.map(([key]) => String(key).length));\n\n  return keyValues\n    .map(([key, value]) => {\n      if (!value) return null;\n      const keyStr = String(key).padEnd(maxKeyLength, ' ');\n      if (key === 'Footer') return `\\n${value}`;\n      return `${keyStr}: ${value}`;\n    })\n    .filter(Boolean)\n    .join('\\n')\n    .trim();\n};\n\nexport default getComment;\n","export function getCommentString(str: string, { type = 'keyval' } = {}) {\n  if (\n    type === 'keyval' ||\n    type === 'keyvalue' ||\n    type === 'env' ||\n    type === 'dotenv' ||\n    type === 'yml' ||\n    type === 'yaml'\n  ) {\n    return [\n      '##',\n      str\n        .split('\\n')\n        .map((s) => ['##', s].filter(Boolean).join(' '))\n        .join('\\n'),\n      '##',\n    ].join('\\n');\n  }\n\n  return [\n    '/**',\n    str\n      .split('\\n')\n      .map((s) => [' *', s].filter(Boolean).join(' '))\n      .join('\\n'),\n    ' */',\n  ].join('\\n');\n}\n\nexport default getCommentString;\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport { mapValues, omit } from '@lskjs/algos';\nimport { stringify as JSstringify } from 'javascript-stringify';\n\nimport { getCommentString } from './getCommentString';\nimport { jsonToYaml } from './jsonToYaml';\n\nconst KV = {\n  stringify: (json: Record<string, unknown>) =>\n    Object.values(mapValues(json, (value, key) => `${key}=${value}`)).join('\\n'),\n};\n\nexport function jsonToString(json: any, { type = 'keyval', comment = '', indent = 2 } = {}) {\n  const commentString = getCommentString(comment, { type }) || null;\n  if (type === 'keyval' || type === 'keyvalue' || type === 'env' || type === 'dotenv') {\n    return [commentString, KV.stringify(json)].filter(Boolean).join('\\n');\n  }\n  if (type === 'json') {\n    if (typeof json === 'object' && !Array.isArray(json)) {\n      // eslint-disable-next-line no-param-reassign\n      json = {\n        __comment: commentString,\n        ...json,\n      };\n    }\n    return JSON.stringify(json, null, indent);\n  }\n  if (type === 'yaml' || type === 'yml') {\n    let yamlObject;\n    const footer = json.__raw;\n    if (Array.isArray(json)) {\n      yamlObject = json;\n    } else {\n      yamlObject = omit(json, ['__raw']);\n    }\n    return [\n      commentString,\n      jsonToYaml(yamlObject, {\n        indent,\n        noRefs: true,\n      }),\n      footer,\n    ]\n      .filter(Boolean)\n      .join('\\n');\n  }\n\n  const moduleExports = type === 'es6' ? 'export default' : 'module.exports =';\n\n  return [\n    commentString,\n    '/* eslint-disable prettier/prettier */',\n    `${moduleExports} ${JSstringify(json, null, indent)};`,\n  ]\n    .filter(Boolean)\n    .join('\\n');\n}\n\nexport default jsonToString;\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport { dump } from 'js-yaml';\n\nexport function jsonToYaml(data: any, options: any = {}) {\n  // const fn = options.safe ? yaml.safeDump : yaml.dump;\n  return dump(data, { indent: 2, skipInvalid: false, flowLevel: -1, ...options });\n}\n\nexport default jsonToYaml;\n","// import { isEqual } from '@lskjs/algos';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nimport { fileToJson } from './fileToJson';\nimport { jsonToString } from './jsonToString';\n\nconst isEqual = (a: any, b: any) => JSON.stringify(a) === JSON.stringify(b);\n\nexport async function jsonToFile(\n  filename: string,\n  json: Record<string, unknown>,\n  { type = 'keyval', comment = '', compare = true } = {},\n) {\n  const data = await fileToJson(filename, { type });\n  if (compare && isEqual(json, data)) {\n    // // eslint-disable-next-line no-console\n    // console.log('isEqual', filename);\n    return;\n  }\n  await mkdir(path.dirname(filename), { recursive: true });\n  await writeFile(filename, jsonToString(json, { type, comment }));\n}\n\nexport default jsonToFile;\n"],"mappings":"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","names":["fromPairs","Err","existsSync","exists","readFile","yaml","fileToJson","filename","type","exists","data","require","cache","resolve","str","readFile","toString","JSON","parse","keyvalues","String","split","map","a","s","trim","indexOf","delimiter","key","substr","value","filter","Boolean","fromPairs","yaml","load","Err","err","console","error","toHumanDate","__name","date","Date","toISOString","substr","defaultFooter","getComment","props","url","source","name","filename","footer","values","keyValues","maxKeyLength","Math","max","map","key","String","length","value","keyStr","padEnd","filter","Boolean","join","trim","getCommentString","str","type","split","map","s","filter","Boolean","join","mapValues","omit","stringify","JSstringify","dump","jsonToYaml","data","options","dump","indent","skipInvalid","flowLevel","KV","stringify","json","Object","values","mapValues","value","key","join","jsonToString","type","comment","indent","commentString","getCommentString","filter","Boolean","Array","isArray","__comment","JSON","yamlObject","footer","__raw","omit","jsonToYaml","noRefs","moduleExports","JSstringify","mkdir","writeFile","path","isEqual","__name","a","b","JSON","stringify","jsonToFile","filename","json","type","comment","compare","data","fileToJson","mkdir","path","dirname","recursive","writeFile","jsonToString"]}