{
  "version": 3,
  "sources": ["../../src/cli/builders/buildOptionBuilder.ts", "../../src/cli/builders/outputOptionBuilder.ts", "../../src/cli/builders/commonOptionBuilder.ts", "../../src/configs/const-enum/CE_ENTITY_VERSION_FROM.ts", "../../src/configs/const-enum/CE_MERMAID_THEME.ts", "../../src/configs/const-enum/CE_OUTPUT_COMPONENT.ts", "../../src/configs/const-enum/CE_OUTPUT_FORMAT.ts", "../../src/configs/const-enum/CE_PROJECT_NAME_FROM.ts", "../../src/cli/builders/documentOptionBuilder.ts", "../../src/common/getDatabaseName.ts", "../../src/common/getPackageName.ts", "../../src/common/getProjectName.ts", "../../src/common/getFileVersion.ts", "../../src/configs/const-enum/CE_DEFAULT_VALUE.ts", "../../src/configs/modules/getCwd.ts", "../../src/modules/files/getFindFile.ts", "../../src/modules/files/betterMkdir.ts", "../../src/modules/files/getOutputDirPath.ts", "../../src/common/getVersion.ts", "../../src/modules/containers/container.ts", "../../src/modules/containers/keys/SymbolDataSource.ts", "../../src/common/getMetadata.ts", "../../src/creators/applyPretter.ts", "../../src/modules/containers/keys/SymbolTemplateRenderer.ts", "../../src/templates/cosnt-enum/CE_TEMPLATE_NAME.ts", "../../src/creators/createHtml.ts", "../../src/creators/createImageHtml.ts", "../../src/creators/createMarkdown.ts", "../../src/creators/createPdfHtml.ts", "../../src/databases/const-enum/CE_RECORD_KIND.ts", "../../src/modules/getSlashEndRoutePath.ts", "../../src/creators/getRenderData.ts", "../../src/modules/getPuppeteerConfig.ts", "../../src/creators/writeToImage.ts", "../../src/creators/writeToPdf.ts", "../../src/common/getColumnHash.ts", "../../src/common/getEntityHash.ts", "../../src/common/getIndexHash.ts", "../../src/common/getPlainRelationType.ts", "../../src/common/getRelationHash.ts", "../../src/databases/const-enum/CE_CHANGE_KIND.ts", "../../src/databases/compareDatabase.ts", "../../src/databases/flushDatabase.ts", "../../src/databases/openDatabase.ts", "../../src/databases/processDatabase.ts", "../../src/modules/containers/keys/SymbolDefaultTemplate.ts", "../../src/modules/containers/keys/SymbolLogger.ts", "../../src/modules/containers/keys/SymbolTemplate.ts", "../../src/modules/loggers/Logger.ts", "../../src/modules/loggers/createLogger.ts", "../../src/templates/TemplateRenderer.ts", "../../src/templates/modules/configTemplate.ts", "../../src/templates/modules/getTemplateModulePath.ts", "../../src/templates/modules/getTemplatePath.ts", "../../src/modules/files/getGlobFiles.ts", "../../src/modules/scopes/defaultExclude.ts", "../../src/templates/modules/getTemplate.ts", "../../src/templates/modules/getTemplates.ts", "../../src/templates/modules/loadTemplates.ts", "../../src/configs/const-enum/CE_COLUMN_ATTRIBUTE.ts", "../../src/creators/columns/getColumnWeight.ts", "../../src/typeorm/columns/getColumnAttributeKey.ts", "../../src/typeorm/columns/getIsNullable.ts", "../../src/typeorm/columns/getColumnType.ts", "../../src/typeorm/columns/getComment.ts", "../../src/typeorm/entities/getEntityName.ts", "../../src/typeorm/columns/getColumnRecord.ts", "../../src/typeorm/entities/getEntityRecord.ts", "../../src/typeorm/entities/getEntityRecords.ts", "../../src/typeorm/loadDataSource.ts", "../../src/typeorm/getDataSource.ts", "../../src/typeorm/indices/getIndexRecord.ts", "../../src/typeorm/indices/getIndexRecords.ts", "../../src/typeorm/relations/dedupeManyToManyRelationRecord.ts", "../../src/typeorm/entities/getEntityPropertyName.ts", "../../src/typeorm/relations/getInverseRelationMetadata.ts", "../../src/typeorm/relations/getManyToManyJoinColumn.ts", "../../src/typeorm/relations/getManyToOneJoinColumn.ts", "../../src/typeorm/relations/getJoinColumn.ts", "../../src/typeorm/relations/getManyToManyEntityMetadata.ts", "../../src/typeorm/relations/getRelationRecord.ts", "../../src/typeorm/relations/getRelationRecords.ts", "../../src/modules/commands/building.ts", "../../src/cli/commands/buildDocumentCommandHandler.ts", "../../src/modules/commands/cleaning.ts", "../../src/cli/commands/cleanDocumentCommandHandler.ts", "../../src/configs/const-enum/CE_IMAGE_FORMAT.ts", "../../src/configs/modules/getAutoCompleteSource.ts", "../../src/modules/files/getTemplateDirPath.ts", "../../src/modules/commands/ejecting.ts", "../../src/configs/modules/getConfigContent.ts", "../../src/modules/commands/initializing.ts", "../../src/cli/commands/initConfigCommandHandler.ts", "../../src/cli/commands/templateEjectCommandHandler.ts", "../../src/configs/const-enum/CE_COMMAND_LIST.ts", "../../src/configs/modules/getConfigFilePath.ts", "../../src/configs/modules/preLoadConfig.ts", "../../src/cli.ts"],
  "sourcesContent": ["import type { Argv } from 'yargs';\n\nexport function buildOptionBuilder<T>(args: Argv<T>) {\n  // option\n  args\n    .option('route-base-path', {\n      describe:\n        'define the route base path. The route base path is used as the base path for navbar anchor when generating HTML documents',\n      type: 'string',\n      default: undefined,\n    })\n    .option('title', {\n      describe: 'define what will be written in the HTML document title tag',\n      type: 'string',\n      default: undefined,\n    })\n    .option('prettier-config', {\n      describe: 'define the path to the prettier configuration file',\n      type: 'string',\n      default: undefined,\n    })\n    .option('puppeteer-config', {\n      describe: 'define the path to the puppeteer configuration file',\n      type: 'string',\n    })\n    .option('width', {\n      describe: 'define the ER diagram width. The width is defined by the HTML document css attribute width',\n      type: 'string',\n      default: '100%',\n    })\n    .option('viewport-width', {\n      describe: 'define the viewport width to puppeteer. The width is defined by the HTML document css attribute width',\n      type: 'number',\n      default: 1280,\n    })\n    .option('viewport-height', {\n      describe:\n        'define the viewport height to puppeteer. The width is defined by the HTML document css attribute height',\n      type: 'number',\n      default: 720 * 2,\n    })\n    .option('image-format', {\n      describe: 'define the format to image file',\n      type: 'string',\n      choices: ['svg', 'png'],\n      default: 'svg',\n    })\n    .option('background-color', {\n      describe: \"define the background color to html documents. eg. transparent, red, '#F0F0F0'\",\n      type: 'string',\n      default: 'white',\n    });\n\n  return args;\n}\n", "import type { Argv } from 'yargs';\n\nexport function outputOptionBuilder<T>(args: Argv<T>) {\n  // option\n  args.option('output', {\n    alias: 'o',\n    describe: 'define the directory to output file',\n    type: 'string',\n  });\n\n  return args;\n}\n", "import { outputOptionBuilder } from '#/cli/builders/outputOptionBuilder';\nimport type { Argv } from 'yargs';\n\nexport function commonOptionBuilder<T>(args: Argv<T>) {\n  // option\n  outputOptionBuilder(args)\n    .option('config', {\n      alias: 'c',\n      describe: 'define the path to to configuration file: .erdiarc',\n      type: 'string',\n    })\n    .option('data-source-path', {\n      alias: 'd',\n      describe: 'define the path to TypeORM data source file',\n      type: 'string',\n    })\n    .option('show-logo', {\n      describe: 'define the logo display on cli interface',\n      type: 'boolean',\n      default: false,\n    })\n    .demandOption('data-source-path');\n\n  return args;\n}\n", "/**\n * Entity document version using package.json version or specific file, timestamp\n *\n * - timestamp: use timestamp\n * - file: use version file\n * - package.json: use package.json\n */\nexport const CE_ENTITY_VERSION_FROM = {\n  TIMESTAMP: 'timestamp',\n  PACKAGE_JSON: 'package.json',\n  FILE: 'file',\n} as const;\n\nexport type CE_ENTITY_VERSION_FROM = (typeof CE_ENTITY_VERSION_FROM)[keyof typeof CE_ENTITY_VERSION_FROM];\n", "/**\n * mermaid.js theme configuration\n *\n * @see https://mermaid-js.github.io/mermaid/#/Setup?id=theme\n *\n * - default\n * - forest\n * - dark\n * - neutral\n * - null\n */\nexport const CE_MERMAID_THEME = {\n  DEFAULT: 'default',\n  FOREST: 'forest',\n  DARK: 'dark',\n  NEUTRAL: 'neutral',\n  NULL: 'null',\n} as const;\n\nexport type CE_MERMAID_THEME = (typeof CE_MERMAID_THEME)[keyof typeof CE_MERMAID_THEME];\n", "/**\n * ER Diagram output component\n *\n * - table: Entity spec.\n * - er: ER diagram\n */\nexport const CE_OUTPUT_COMPONENT = {\n  TABLE: 'table',\n  ER: 'er',\n} as const;\n\nexport type CE_OUTPUT_COMPONENT = (typeof CE_OUTPUT_COMPONENT)[keyof typeof CE_OUTPUT_COMPONENT];\n", "export const CE_OUTPUT_FORMAT = {\n  HTML: 'html',\n  MARKDOWN: 'md',\n  PDF: 'pdf',\n  IMAGE: 'image',\n} as const;\n\nexport type CE_OUTPUT_FORMAT = (typeof CE_OUTPUT_FORMAT)[keyof typeof CE_OUTPUT_FORMAT];\n", "/**\n * determine whether project name will come from the name in `package.json` or database name\n *\n * - db: database name from TypeORM\n * - app: application name from package.json\n */\nexport const CE_PROJECT_NAME_FROM = {\n  DATABASE: 'db',\n  APPLICATION: 'app',\n} as const;\n\nexport type CE_PROJECT_NAME_FROM = (typeof CE_PROJECT_NAME_FROM)[keyof typeof CE_PROJECT_NAME_FROM];\n", "import { CE_ENTITY_VERSION_FROM } from '#/configs/const-enum/CE_ENTITY_VERSION_FROM';\nimport { CE_MERMAID_THEME } from '#/configs/const-enum/CE_MERMAID_THEME';\nimport { CE_OUTPUT_COMPONENT } from '#/configs/const-enum/CE_OUTPUT_COMPONENT';\nimport { CE_OUTPUT_FORMAT } from '#/configs/const-enum/CE_OUTPUT_FORMAT';\nimport { CE_PROJECT_NAME_FROM } from '#/configs/const-enum/CE_PROJECT_NAME_FROM';\nimport type { Argv } from 'yargs';\n\nexport function documentOptionBuilder<T>(args: Argv<T>) {\n  // option\n  args\n    .option('components', {\n      alias: 't',\n      describe: 'define the output component to builded documents',\n      choices: [CE_OUTPUT_COMPONENT.TABLE, CE_OUTPUT_COMPONENT.ER],\n      type: 'array',\n      default: [CE_OUTPUT_COMPONENT.TABLE, CE_OUTPUT_COMPONENT.ER],\n    })\n    .option('project-name', {\n      describe: 'define whether project name will come from the `package.json` name field or database name',\n      type: 'string',\n      choices: [CE_PROJECT_NAME_FROM.APPLICATION, CE_PROJECT_NAME_FROM.DATABASE],\n      default: CE_PROJECT_NAME_FROM.APPLICATION,\n    })\n    .option('database-path', {\n      describe: 'define the directory to store `erdiadb.json`',\n      type: 'string',\n      default: undefined,\n    })\n    .option('template-path', {\n      describe: 'define the directory to ETA templates',\n      type: 'string',\n    })\n    .option('skip-image-in-html', {\n      describe: 'enabling the this option will skip attaching the ER diagram image file to the html document',\n      type: 'boolean',\n      default: false,\n    })\n    .option('format', {\n      describe: 'define the output format to builded documents',\n      choices: [CE_OUTPUT_FORMAT.HTML, CE_OUTPUT_FORMAT.MARKDOWN, CE_OUTPUT_FORMAT.PDF, CE_OUTPUT_FORMAT.IMAGE],\n      type: 'string',\n      default: CE_OUTPUT_FORMAT.HTML,\n    })\n    .option('version-from', {\n      describe:\n        'define whether document version will come from the `package.json` version field or specific file, timestamp',\n      choices: [CE_ENTITY_VERSION_FROM.PACKAGE_JSON, CE_ENTITY_VERSION_FROM.FILE, CE_ENTITY_VERSION_FROM.TIMESTAMP],\n      type: 'string',\n      default: CE_ENTITY_VERSION_FROM.PACKAGE_JSON,\n    })\n    .option('version-path', {\n      describe: 'If the versionFrom option set `file`, read the file from this path',\n      type: 'string',\n      default: undefined,\n    })\n    .option('theme', {\n      describe: 'define the mermaid.js plugin theme. see https://mermaid-js.github.io/mermaid/#/Setup?id=theme',\n      choices: [\n        CE_MERMAID_THEME.DEFAULT,\n        CE_MERMAID_THEME.DARK,\n        CE_MERMAID_THEME.FOREST,\n        CE_MERMAID_THEME.DARK,\n        CE_MERMAID_THEME.NEUTRAL,\n        CE_MERMAID_THEME.NULL,\n      ],\n      default: CE_MERMAID_THEME.DARK,\n      type: 'string',\n    });\n\n  return args;\n}\n", "import { TextDecoder } from 'util';\n\nexport function getDatabaseName(options: { database?: string | Uint8Array | undefined }): string {\n  const name = options.database;\n\n  if (typeof name === 'string') {\n    return name;\n  }\n\n  if (name instanceof Uint8Array) {\n    return new TextDecoder().decode(name);\n  }\n\n  return 'default';\n}\n", "export function getPackageName(json: Record<string, unknown>): string {\n  const { name } = json;\n\n  if (typeof name === 'string' && name !== '') {\n    return name;\n  }\n\n  throw new Error('Cannot get project name from package.json');\n}\n", "import { getDatabaseName } from '#/common/getDatabaseName';\nimport { getPackageName } from '#/common/getPackageName';\nimport { CE_PROJECT_NAME_FROM } from '#/configs/const-enum/CE_PROJECT_NAME_FROM';\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\n\nexport async function getProjectName(\n  dataSource: { options: { database?: string | Uint8Array | undefined } },\n  json: Record<string, unknown>,\n  option: Pick<IBuildCommandOption, 'projectName'>,\n) {\n  if (option.projectName === CE_PROJECT_NAME_FROM.DATABASE) {\n    if (dataSource.options.database != null) {\n      const databaseName = getDatabaseName(dataSource.options);\n      return databaseName;\n    }\n\n    const name = getPackageName(json);\n    return name;\n  }\n\n  const name = getPackageName(json);\n  return name;\n}\n", "import { parse } from 'jsonc-parser';\nimport semver from 'semver';\n\nexport function getFileVersion(buf: Buffer): string {\n  const rawJson = buf.toString();\n\n  if (semver.valid(rawJson)) {\n    return rawJson;\n  }\n\n  const parsed = parse(rawJson) as Record<string, string>;\n  const { version } = parsed;\n\n  if (version == null || version === '') {\n    throw new Error(`invalid version file: ${rawJson}`);\n  }\n\n  return version;\n}\n", "export const CE_DEFAULT_VALUE = {\n  CONFIG_FILE_NAME: '.erdiarc',\n  TSCONFIG_FILE_NAME: 'tsconfig.json',\n\n  HTML_INDEX_FILENAME: 'index.html',\n  HTML_MERMAID_FILENAME: 'mermaid.html',\n\n  MARKDOWN_FILENAME: 'erdia.md',\n\n  DATABASE_FILENAME: 'erdiadb.json',\n  VERSION_FILENAME: '.erdiaverrc',\n\n  TEMPLATES_PATH: 'templates',\n\n  DATA_SOURCE_FILE_FUZZY_SCORE_LIMIT: 50,\n  OUTPUT_DIRECTORY_FUZZY_SCORE_LIMIT: 50,\n} as const;\n\nexport type CE_DEFAULT_VALUE = (typeof CE_DEFAULT_VALUE)[keyof typeof CE_DEFAULT_VALUE];\n", "export function getCwd(env: NodeJS.ProcessEnv): string {\n  if ((env.USE_INIT_CWD ?? 'false') === 'false') {\n    return process.cwd();\n  }\n\n  if (env.INIT_CWD != null) {\n    return env.INIT_CWD;\n  }\n\n  return process.cwd();\n}\n", "import findUp from 'find-up';\n\nexport async function getFindFile(\n  filename: string | readonly string[],\n  option?: findUp.Options,\n): Promise<string | undefined> {\n  const finded = await findUp(filename, option);\n  return finded;\n}\n", "import { isFalse } from 'my-easy-fp';\nimport { exists, getDirname } from 'my-node-fp';\nimport fs from 'node:fs';\nimport pathe from 'pathe';\n\nexport async function betterMkdir(filePath: string) {\n  const isFilePathExist = await exists(filePath);\n\n  if (isFalse(isFilePathExist)) {\n    const extname = pathe.extname(filePath);\n    const hasExtname = extname !== '' && extname.length > 0;\n\n    if (hasExtname) {\n      const dirPath = await getDirname(filePath);\n      await fs.promises.mkdir(dirPath, { recursive: true });\n    } else {\n      await fs.promises.mkdir(filePath, { recursive: true });\n    }\n  }\n}\n", "import type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { betterMkdir } from '#/modules/files/betterMkdir';\nimport { isFalse } from 'my-easy-fp';\nimport { exists, getDirname, isDirectory } from 'my-node-fp';\nimport pathe from 'pathe';\n\nexport async function getOutputDirPath(option: Pick<IBuildCommandOption, 'output'>, cwd: string) {\n  const outputDirPath = option.output ?? cwd;\n  const resolvedOutputDirPath = pathe.resolve(outputDirPath);\n\n  if (isFalse(await exists(resolvedOutputDirPath))) {\n    await betterMkdir(pathe.join(resolvedOutputDirPath));\n    return resolvedOutputDirPath;\n  }\n\n  if (isFalse(await isDirectory(outputDirPath))) {\n    return pathe.resolve(await getDirname(outputDirPath));\n  }\n\n  return pathe.resolve(outputDirPath);\n}\n", "import { getFileVersion } from '#/common/getFileVersion';\nimport { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { getCwd } from '#/configs/modules/getCwd';\nimport { getFindFile } from '#/modules/files/getFindFile';\nimport { getOutputDirPath } from '#/modules/files/getOutputDirPath';\nimport dayjs from 'dayjs';\nimport fs from 'fs';\nimport pathe from 'pathe';\n\nasync function getVersionFilename(\n  option: Pick<IBuildCommandOption, 'versionFrom' | 'versionPath'>,\n  versionFilename: string,\n) {\n  if (option.versionPath != null) {\n    const filename = await getFindFile(\n      pathe.join(await getOutputDirPath({ output: option.versionPath }, getCwd(process.env)), versionFilename),\n      { cwd: getCwd(process.env) },\n    );\n\n    return filename;\n  }\n\n  const filename = await getFindFile(versionFilename, { cwd: getCwd(process.env) });\n  return filename;\n}\n\nexport async function getVersion(\n  json: Record<string, unknown>,\n  option: Pick<IBuildCommandOption, 'versionFrom' | 'versionPath'>,\n): Promise<{ version: string }> {\n  if (option.versionFrom === 'package.json') {\n    const { version } = json;\n\n    if (!(typeof version === 'string') || version == null) {\n      throw new Error(`Cannot found version field in package.json`);\n    }\n\n    return { version };\n  }\n\n  if (option.versionFrom === 'file') {\n    const getVersionFile = async () => {\n      const filename = await getVersionFilename(option, CE_DEFAULT_VALUE.VERSION_FILENAME);\n\n      if (filename != null) {\n        return filename;\n      }\n\n      const fromConfig = await getVersionFilename(option, CE_DEFAULT_VALUE.CONFIG_FILE_NAME);\n      return fromConfig;\n    };\n\n    const versionFilename = await getVersionFile();\n\n    if (versionFilename == null) {\n      throw new Error(`Cannot found version file: ${CE_DEFAULT_VALUE.VERSION_FILENAME}`);\n    }\n\n    const versionBuf = await fs.promises.readFile(versionFilename);\n    const version = getFileVersion(versionBuf);\n    return { version: version.trim() };\n  }\n\n  return { version: `${dayjs().valueOf()}` };\n}\n", "import { createContainer } from 'awilix';\n\nexport const container = createContainer();\n", "export const SymbolDataSource = Symbol('data-source');\n", "import { getProjectName } from '#/common/getProjectName';\nimport { getVersion } from '#/common/getVersion';\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport { container } from '#/modules/containers/container';\nimport { SymbolDataSource } from '#/modules/containers/keys/SymbolDataSource';\nimport dayjs from 'dayjs';\nimport filenamify from 'filenamify';\nimport readPkg from 'read-pkg';\nimport type { DataSource } from 'typeorm';\n\nexport async function getMetadata(\n  option: Pick<IBuildCommandOption, 'projectName' | 'versionFrom' | 'versionPath' | 'title'>,\n): Promise<IRecordMetadata> {\n  const dataSource = container.resolve<DataSource>(SymbolDataSource);\n  const json = await readPkg({ normalize: false });\n  const rawName = await getProjectName(dataSource, json, option);\n  const name = filenamify(rawName, { replacement: '_' });\n  const { version } = await getVersion(json, option);\n\n  return {\n    name,\n    title: option.title,\n    version,\n    createdAt: dayjs().format(),\n    updatedAt: dayjs().format(),\n  };\n}\n", "import consola from 'consola';\nimport { isError } from 'my-easy-fp';\n\nexport async function applyPrettier(\n  document: string,\n  format: 'html' | 'md' | 'json',\n  configPath?: string,\n): Promise<string> {\n  try {\n    const prettier = (await import('prettier')).default;\n    const prettierConfig = await prettier.resolveConfig(configPath ?? '.');\n\n    const formatted = await prettier.format(document, {\n      ...(prettierConfig ?? {}),\n      parser: format === 'md' ? 'markdown' : format,\n    });\n\n    return formatted;\n  } catch (caught) {\n    const err = isError(caught, new Error('unknown error raised from prettier appling function'));\n\n    consola.error(err.message);\n    consola.error(err.stack);\n\n    return document;\n  }\n}\n", "export const SymbolTemplateRenderer = Symbol('template-renderer');\n", "export const CE_TEMPLATE_NAME = {\n  HTML_DOCUMENT_TOC: 'html-document-toc',\n  HTML_DOCUMENT: 'html-document',\n  HTML_MERMAID: 'html-mermaid',\n  HTML_MERMAID_TOC: 'html-mermaid-toc',\n  HTML_MERMAID_DIAGRAM: 'html-mermaid-diagram',\n  HTML_STYLE: 'html-style',\n  HTML_TABLE: 'html-table',\n\n  IMAGE_DOCUMENT: 'image-document',\n  IMAGE_MERMAID_DIAGRAM: 'image-mermaid-diagram',\n  IMAGE_STYLE: 'image-style',\n\n  MARKDOWN_DOCUMENT: 'markdown-document',\n  MARKDOWN_MERMAID_DIAGRAM: 'markdown-mermaid-diagram',\n  MARKDOWN_TABLE: 'markdown-table',\n  MARKDOWN_TOC: 'markdown-toc',\n\n  PDF_DOCUMENT_TOC: 'pdf-document-toc',\n  PDF_DOCUMENT: 'pdf-document',\n  PDF_MERMAID_DIAGRAM: 'pdf-mermaid-diagram',\n  PDF_STYLE: 'pdf-style',\n  PDF_TABLE: 'pdf-table',\n\n  CONFIG_JSON: 'config-json',\n} as const;\n\nexport type CE_TEMPLATE_NAME = (typeof CE_TEMPLATE_NAME)[keyof typeof CE_TEMPLATE_NAME];\n", "import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport { CE_OUTPUT_COMPONENT } from '#/configs/const-enum/CE_OUTPUT_COMPONENT';\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { getCwd } from '#/configs/modules/getCwd';\nimport { applyPrettier } from '#/creators/applyPretter';\nimport type { getRenderData } from '#/creators/getRenderData';\nimport type { IErdiaDocument } from '#/creators/interfaces/IErdiaDocument';\nimport { container } from '#/modules/containers/container';\nimport { SymbolTemplateRenderer } from '#/modules/containers/keys/SymbolTemplateRenderer';\nimport { getOutputDirPath } from '#/modules/files/getOutputDirPath';\nimport type { TemplateRenderer } from '#/templates/TemplateRenderer';\nimport { CE_TEMPLATE_NAME } from '#/templates/cosnt-enum/CE_TEMPLATE_NAME';\nimport consola from 'consola';\nimport pathe from 'pathe';\nimport type { AsyncReturnType } from 'type-fest';\n\nasync function getTables(\n  option: Pick<IBuildCommandOption, 'output' | 'components' | 'prettierConfig'>,\n  renderData: AsyncReturnType<typeof getRenderData>,\n  outputDir: string,\n): Promise<IErdiaDocument[]> {\n  if (!option.components.includes(CE_OUTPUT_COMPONENT.TABLE)) {\n    return [];\n  }\n\n  const renderer = container.resolve<TemplateRenderer>(SymbolTemplateRenderer);\n  const rawTables = await renderer.evaluate(CE_TEMPLATE_NAME.HTML_DOCUMENT, renderData);\n  const prettiedTables = await applyPrettier(rawTables, 'html', option.prettierConfig);\n  const tablesFileName = pathe.join(outputDir, CE_DEFAULT_VALUE.HTML_INDEX_FILENAME);\n  return [\n    {\n      dirname: pathe.resolve(outputDir),\n      filename: pathe.resolve(tablesFileName),\n      content: prettiedTables,\n    },\n  ];\n}\n\nasync function getDiagram(\n  option: Pick<IBuildCommandOption, 'output' | 'components' | 'prettierConfig'>,\n  renderData: AsyncReturnType<typeof getRenderData>,\n  outputDir: string,\n): Promise<IErdiaDocument[]> {\n  if (!option.components.includes(CE_OUTPUT_COMPONENT.ER)) {\n    return [];\n  }\n\n  const renderer = container.resolve<TemplateRenderer>(SymbolTemplateRenderer);\n  const rawDiagram = await renderer.evaluate(CE_TEMPLATE_NAME.HTML_MERMAID, renderData);\n  const prettiedDiagram = await applyPrettier(rawDiagram, 'html', option.prettierConfig);\n  const diagramFileName = option.components.includes(CE_OUTPUT_COMPONENT.TABLE)\n    ? pathe.join(outputDir, CE_DEFAULT_VALUE.HTML_MERMAID_FILENAME)\n    : pathe.join(outputDir, CE_DEFAULT_VALUE.HTML_INDEX_FILENAME);\n\n  return [\n    {\n      dirname: pathe.resolve(outputDir),\n      filename: pathe.resolve(diagramFileName),\n      content: prettiedDiagram,\n    },\n  ];\n}\n\nexport async function createHtml(\n  option: Pick<IBuildCommandOption, 'output' | 'components' | 'prettierConfig'>,\n  renderData: AsyncReturnType<typeof getRenderData>,\n) {\n  const outputDir = await getOutputDirPath(option, getCwd(process.env));\n\n  consola.info(`export component: ${option.components.join(', ')}`);\n\n  const documents = (\n    await Promise.all(\n      option.components.map(async (component) => {\n        if (component === CE_OUTPUT_COMPONENT.TABLE) {\n          return getTables(option, renderData, outputDir);\n        }\n\n        if (component === CE_OUTPUT_COMPONENT.ER) {\n          return getDiagram(option, renderData, outputDir);\n        }\n\n        return [];\n      }),\n    )\n  ).flat();\n\n  return documents;\n}\n", "import type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { applyPrettier } from '#/creators/applyPretter';\nimport type { getRenderData } from '#/creators/getRenderData';\nimport type { IErdiaDocument } from '#/creators/interfaces/IErdiaDocument';\nimport { container } from '#/modules/containers/container';\nimport { SymbolTemplateRenderer } from '#/modules/containers/keys/SymbolTemplateRenderer';\nimport { betterMkdir } from '#/modules/files/betterMkdir';\nimport type { TemplateRenderer } from '#/templates/TemplateRenderer';\nimport { CE_TEMPLATE_NAME } from '#/templates/cosnt-enum/CE_TEMPLATE_NAME';\nimport { getDirname } from 'my-node-fp';\nimport { randomUUID } from 'node:crypto';\nimport pathe from 'pathe';\nimport type { AsyncReturnType } from 'type-fest';\n\nexport async function createImageHtml(\n  option: Pick<IBuildCommandOption, 'output' | 'components' | 'prettierConfig'>,\n  renderData: AsyncReturnType<typeof getRenderData>,\n): Promise<IErdiaDocument> {\n  const renderer = container.resolve<TemplateRenderer>(SymbolTemplateRenderer);\n  const rawHtml = await renderer.evaluate(CE_TEMPLATE_NAME.IMAGE_DOCUMENT, {\n    ...renderData,\n    option: { ...renderData.option, width: '200vw' },\n  });\n\n  const prettiedHtml = await applyPrettier(rawHtml, 'html', option.prettierConfig);\n  const outputDirPath = option.output != null ? pathe.resolve(option.output) : process.cwd();\n  await betterMkdir(outputDirPath);\n  const tempFileName = pathe.join(outputDirPath, `${randomUUID()}.html`);\n\n  return {\n    dirname: await getDirname(outputDirPath),\n    content: prettiedHtml,\n    filename: pathe.resolve(tempFileName),\n  } satisfies IErdiaDocument;\n}\n", "import type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { getCwd } from '#/configs/modules/getCwd';\nimport { applyPrettier } from '#/creators/applyPretter';\nimport type { getRenderData } from '#/creators/getRenderData';\nimport type { IErdiaDocument } from '#/creators/interfaces/IErdiaDocument';\nimport { container } from '#/modules/containers/container';\nimport { SymbolTemplateRenderer } from '#/modules/containers/keys/SymbolTemplateRenderer';\nimport { getOutputDirPath } from '#/modules/files/getOutputDirPath';\nimport type { TemplateRenderer } from '#/templates/TemplateRenderer';\nimport { CE_TEMPLATE_NAME } from '#/templates/cosnt-enum/CE_TEMPLATE_NAME';\nimport pathe from 'pathe';\nimport type { AsyncReturnType } from 'type-fest';\n\nexport async function createMarkdown(\n  option: Pick<IBuildCommandOption, 'output' | 'prettierConfig'>,\n  renderData: AsyncReturnType<typeof getRenderData>,\n): Promise<IErdiaDocument> {\n  const renderer = container.resolve<TemplateRenderer>(SymbolTemplateRenderer);\n  const rawMarkdown = await renderer.evaluate(CE_TEMPLATE_NAME.MARKDOWN_DOCUMENT, renderData);\n  const prettiedMarkdown = await applyPrettier(rawMarkdown, 'md', option.prettierConfig);\n  const markdownFileName = `${renderData.metadata.name}.md`;\n  const outputDir = await getOutputDirPath(option, getCwd(process.env));\n\n  return {\n    filename: pathe.resolve(pathe.join(outputDir, markdownFileName)),\n    dirname: pathe.resolve(outputDir),\n    content: prettiedMarkdown,\n  } satisfies IErdiaDocument;\n}\n", "import type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { applyPrettier } from '#/creators/applyPretter';\nimport type { getRenderData } from '#/creators/getRenderData';\nimport type { IErdiaDocument } from '#/creators/interfaces/IErdiaDocument';\nimport { container } from '#/modules/containers/container';\nimport { SymbolTemplateRenderer } from '#/modules/containers/keys/SymbolTemplateRenderer';\nimport { betterMkdir } from '#/modules/files/betterMkdir';\nimport type { TemplateRenderer } from '#/templates/TemplateRenderer';\nimport { CE_TEMPLATE_NAME } from '#/templates/cosnt-enum/CE_TEMPLATE_NAME';\nimport { getDirname } from 'my-node-fp';\nimport { randomUUID } from 'node:crypto';\nimport pathe from 'pathe';\nimport type { AsyncReturnType } from 'type-fest';\n\nexport async function createPdfHtml(\n  option: Pick<IBuildCommandOption, 'output' | 'components' | 'prettierConfig'>,\n  renderData: AsyncReturnType<typeof getRenderData>,\n) {\n  const renderer = container.resolve<TemplateRenderer>(SymbolTemplateRenderer);\n  const rawHtml = await renderer.evaluate(CE_TEMPLATE_NAME.PDF_DOCUMENT, renderData);\n  const prettiedHtml = await applyPrettier(rawHtml, 'html', option.prettierConfig);\n  const outputDirPath = option.output != null ? pathe.resolve(option.output) : process.cwd();\n  await betterMkdir(outputDirPath);\n\n  const tempFileName = pathe.join(outputDirPath, `${randomUUID()}.html`);\n\n  return {\n    dirname: await getDirname(outputDirPath),\n    content: prettiedHtml,\n    filename: pathe.resolve(tempFileName),\n  } satisfies IErdiaDocument;\n}\n", "export const CE_RECORD_KIND = {\n  COLUMN: 'column',\n  ENTITY: 'entity',\n  RELATION: 'relation',\n  INDEX: 'index',\n} as const;\n\nexport type CE_RECORD_KIND = (typeof CE_RECORD_KIND)[keyof typeof CE_RECORD_KIND];\n", "export function getSlashEndRoutePath(basePath: string): string {\n  if (basePath.endsWith('/')) {\n    return basePath;\n  }\n\n  return `${basePath}/`;\n}\n", "import { CE_OUTPUT_FORMAT } from '#/configs/const-enum/CE_OUTPUT_FORMAT';\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { CE_RECORD_KIND } from '#/databases/const-enum/CE_RECORD_KIND';\nimport type { IColumnRecord } from '#/databases/interfaces/IColumnRecord';\nimport type { IEntityRecord } from '#/databases/interfaces/IEntityRecord';\nimport type { IEntityWithColumnAndRelationAndIndex } from '#/databases/interfaces/IEntityWithColumnAndRelationAndIndex';\nimport type { IIndexRecord } from '#/databases/interfaces/IIndexRecord';\nimport type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport type { IRelationRecord } from '#/databases/interfaces/IRelationRecord';\nimport type { IRenderData } from '#/databases/interfaces/IRenderData';\nimport type { TDatabaseRecord } from '#/databases/interfaces/TDatabaseRecord';\nimport { getSlashEndRoutePath } from '#/modules/getSlashEndRoutePath';\nimport alasql from 'alasql';\nimport { compareVersions } from 'compare-versions';\n\nexport async function getRenderData(\n  records: TDatabaseRecord[],\n  metadata: IRecordMetadata,\n  option: Omit<IBuildCommandOption, 'config'>,\n): Promise<IRenderData> {\n  const versionRows = (await alasql.promise('SELECT DISTINCT version FROM ?', [records])) as {\n    version: string;\n  }[];\n\n  const unSortedVersions = versionRows.map((version) => version.version);\n  const versions =\n    option.versionFrom === 'timestamp'\n      ? unSortedVersions.sort((l, r) => r.localeCompare(l))\n      : unSortedVersions.sort((l, r) => compareVersions(r, l));\n\n  const renderDatas = await Promise.all(\n    versions.map(async (version) => {\n      const entities = (await alasql.promise(`SELECT * FROM ? WHERE [$kind] = ? AND version = ?`, [\n        records,\n        'entity',\n        version,\n      ])) as IEntityRecord[];\n\n      const renderData: IEntityWithColumnAndRelationAndIndex[] = await Promise.all(\n        entities.map(async (entity) => {\n          const [columns, relations, indices] = await Promise.all([\n            (await alasql.promise('SELECT * FROM ? WHERE [$kind] = ? AND entity = ? AND version = ?', [\n              records,\n              CE_RECORD_KIND.COLUMN,\n              entity.entity,\n              version,\n            ])) as IColumnRecord[],\n\n            (await alasql.promise('SELECT * FROM ? WHERE [$kind] = ? AND entity = ? AND version = ?', [\n              records,\n              CE_RECORD_KIND.RELATION,\n              entity.entity,\n              version,\n            ])) as IRelationRecord[],\n\n            (await alasql.promise('SELECT * FROM ? WHERE [$kind] = ? AND entity = ? AND version = ?', [\n              records,\n              CE_RECORD_KIND.INDEX,\n              entity.entity,\n              version,\n            ])) as IIndexRecord[],\n          ]);\n\n          return { ...entity, columns, relations, indices } satisfies IEntityWithColumnAndRelationAndIndex;\n        }),\n      );\n\n      return { version, entities: renderData, latest: version === metadata.version };\n    }),\n  );\n\n  if (option.format === CE_OUTPUT_FORMAT.HTML) {\n    return {\n      versions: renderDatas,\n      option: {\n        ...option,\n        routeBasePath: option.routeBasePath != null ? getSlashEndRoutePath(option.routeBasePath) : undefined,\n      },\n      metadata,\n    };\n  }\n\n  return { versions: renderDatas, option, metadata };\n}\n", "import fs from 'fs';\nimport { parse } from 'jsonc-parser';\nimport { exists } from 'my-node-fp';\nimport type puppeteer from 'puppeteer';\n\nexport async function getPuppeteerConfig(confgFilePath?: string): Promise<Parameters<typeof puppeteer.launch>[0]> {\n  try {\n    if (confgFilePath == null) {\n      return {};\n    }\n\n    if (await exists(confgFilePath)) {\n      const buf = await fs.promises.readFile(confgFilePath);\n      const option = parse(buf.toString()) as Parameters<typeof puppeteer.launch>[0];\n      return option;\n    }\n\n    return {};\n  } catch {\n    return {};\n  }\n}\n", "/* eslint-disable no-param-reassign, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any */\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport type { getRenderData } from '#/creators/getRenderData';\nimport type { IErdiaDocument } from '#/creators/interfaces/IErdiaDocument';\nimport { betterMkdir } from '#/modules/files/betterMkdir';\nimport { getPuppeteerConfig } from '#/modules/getPuppeteerConfig';\nimport consola from 'consola';\nimport del from 'del';\nimport { isError } from 'my-easy-fp';\nimport fs from 'node:fs';\nimport pathe from 'pathe';\nimport * as puppeteer from 'puppeteer';\nimport type { AsyncReturnType } from 'type-fest';\n\nexport async function writeToImage(\n  document: IErdiaDocument,\n  option: Pick<\n    IBuildCommandOption,\n    'output' | 'components' | 'prettierConfig' | 'viewportWidth' | 'viewportHeight' | 'backgroundColor' | 'imageFormat'\n  >,\n  renderData: AsyncReturnType<typeof getRenderData>,\n) {\n  let localBrowser: puppeteer.Browser | undefined;\n  let localPage: puppeteer.Page | undefined;\n\n  try {\n    const puppeteerConfig = await getPuppeteerConfig(option.prettierConfig);\n    const browser = await puppeteer.launch({ ...puppeteerConfig, headless: true });\n    const page = await browser.newPage();\n    const puppeteerGotoOption: Parameters<typeof page.goto>[1] = {\n      waitUntil: 'domcontentloaded',\n      timeout: 60_000,\n    };\n\n    localBrowser = browser;\n    localPage = page;\n\n    await betterMkdir(document.filename);\n    await fs.promises.writeFile(document.filename, document.content);\n    await page.setViewport({ width: option.viewportWidth ?? 1280, height: option.viewportHeight ?? 720 * 2 });\n    await page.goto(`file://${document.filename}`, puppeteerGotoOption);\n\n    consola.debug(`file write start: ${document.filename}`);\n\n    await page.$eval(\n      'body',\n      (body, backgroundColor) => {\n        body.style.background = backgroundColor;\n      },\n      option.backgroundColor ?? 'white',\n    );\n\n    if (option.imageFormat === 'svg') {\n      // this source code from [mermaid-cli](https://github.com/mermaidjs/mermaid.cli/blob/46185413d75384cd7bceed802d187db6852f5190/index.js#L110)\n      const svg = await page.$eval('#mermaid-diagram-container', (container) => container.innerHTML);\n\n      if (svg == null) {\n        await del(document.filename);\n        throw new Error('invalid image html document template');\n      }\n\n      await fs.promises.writeFile(pathe.join(document.dirname, `${renderData.metadata.name}.svg`), svg);\n      consola.debug('file write end');\n\n      await del(document.filename);\n      consola.info(`Component ER diagram successfully write on ${renderData.metadata.name}.svg`);\n\n      return [pathe.join(document.dirname, `${renderData.metadata.name}.svg`)];\n    }\n\n    // this source code from [mermaid-cli](https://github.com/mermaidjs/mermaid.cli/blob/46185413d75384cd7bceed802d187db6852f5190/index.js#L113-L117)\n    const clip = await page.$eval('svg', (htmlSvgElement: any) => {\n      const react = htmlSvgElement.getBoundingClientRect();\n      return { x: react.left, y: react.top, width: react.width, height: react.height };\n    });\n\n    await page.screenshot({\n      path: pathe.join(document.dirname, `${renderData.metadata.name}.png`),\n      clip,\n      omitBackground: false,\n    });\n\n    consola.debug('file write end');\n\n    await del(document.filename);\n    consola.info(`Component ER diagram successfully write on ${renderData.metadata.name}.png`);\n\n    return [pathe.join(document.dirname, `${renderData.metadata.name}.png`)];\n  } catch (caught) {\n    const err = isError(caught, new Error('unknown error raised from writeToImage'));\n\n    consola.error(err.message);\n    consola.error(err.stack);\n\n    return false;\n  } finally {\n    consola.debug('Start page, brower close');\n\n    if (localPage !== undefined && localPage !== null) {\n      await localPage.close();\n    }\n\n    if (localBrowser !== undefined && localBrowser !== null) {\n      await localBrowser.close();\n    }\n  }\n}\n", "import type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport type { getRenderData } from '#/creators/getRenderData';\nimport type { IErdiaDocument } from '#/creators/interfaces/IErdiaDocument';\nimport { getPuppeteerConfig } from '#/modules/getPuppeteerConfig';\nimport consola from 'consola';\nimport del from 'del';\nimport fs from 'fs';\nimport { isError } from 'my-easy-fp';\nimport pathe from 'pathe';\nimport * as puppeteer from 'puppeteer';\nimport type { AsyncReturnType } from 'type-fest';\n\nexport async function writeToPdf(\n  document: IErdiaDocument,\n  option: Pick<\n    IBuildCommandOption,\n    | 'output'\n    | 'components'\n    | 'prettierConfig'\n    | 'puppeteerConfig'\n    | 'viewportWidth'\n    | 'viewportHeight'\n    | 'backgroundColor'\n  >,\n  renderData: AsyncReturnType<typeof getRenderData>,\n): Promise<string[]> {\n  let localBrowser: puppeteer.Browser | undefined;\n  let localPage: puppeteer.Page | undefined;\n\n  try {\n    const puppeteerConfig = await getPuppeteerConfig(option.puppeteerConfig);\n    const browser = await puppeteer.launch({ ...puppeteerConfig, headless: true });\n    const page = await browser.newPage();\n    const puppeteerGotoOption: Parameters<typeof page.goto>[1] = {\n      waitUntil: 'domcontentloaded',\n      timeout: 60_000,\n    };\n\n    localBrowser = browser;\n    localPage = page;\n\n    consola.info('filename: ', document.filename);\n\n    await page.setViewport({ width: option.viewportWidth ?? 1280, height: option.viewportHeight ?? 720 * 2 });\n    await fs.promises.writeFile(document.filename, document.content);\n    await page.goto(`file://${document.filename}`, puppeteerGotoOption);\n    await page.pdf({\n      path: pathe.join(document.dirname, `${renderData.metadata.name}.pdf`),\n      printBackground: option.backgroundColor !== 'transparent',\n    });\n\n    await del(document.filename);\n\n    return [pathe.join(document.dirname, `${renderData.metadata.name}.pdf`)];\n  } catch (caught) {\n    const err = isError(caught, new Error('unknown error raised from writeToPdf'));\n\n    consola.error(err.message);\n    consola.error(err.stack);\n\n    return [];\n  } finally {\n    if (localPage !== undefined && localPage !== null) {\n      consola.debug('Session Closed');\n      await localPage.close();\n    }\n\n    if (localBrowser !== undefined && localBrowser !== null) {\n      await localBrowser.close();\n    }\n  }\n}\n", "import type { IColumnRecord } from '#/databases/interfaces/IColumnRecord';\n\nexport function getColumnHash(column: Pick<IColumnRecord, 'entity' | 'dbName'>): string {\n  const baseHash = [column.entity, column.dbName].join(':');\n  const base64 = Buffer.from(baseHash).toString('base64');\n\n  return base64;\n}\n", "import type { IEntityRecord } from '#/databases/interfaces/IEntityRecord';\n\nexport function getEntityHash(entity: Pick<IEntityRecord, 'entity' | 'dbName'>): string {\n  const baseHash = [entity.entity, entity.dbName].join(':');\n  const base64 = Buffer.from(baseHash).toString('base64');\n\n  return base64;\n}\n", "import type { IIndexRecord } from '#/databases/interfaces/IIndexRecord';\n\nexport function getIndexHash(column: Pick<IIndexRecord, 'entity' | 'dbName'>): string {\n  const baseHash = [column.entity, column.dbName].join(':');\n  const base64 = Buffer.from(baseHash).toString('base64');\n\n  return base64;\n}\n", "import type { IRelationRecord } from '#/databases/interfaces/IRelationRecord';\n\nexport function getPlainRelationType(relationType: IRelationRecord['relationType']) {\n  if (relationType === 'one-to-one') {\n    return 'one-to-one';\n  }\n\n  if (relationType === 'many-to-many') {\n    return 'many-to-many';\n  }\n\n  return 'one-to-many';\n}\n", "import { getPlainRelationType } from '#/common/getPlainRelationType';\nimport type { IRelationRecord } from '#/databases/interfaces/IRelationRecord';\n\nexport function getRelationHash(\n  relation: Pick<IRelationRecord, 'entity' | 'inverseEntityName' | 'relationType'>,\n): string {\n  const entities = [relation.entity, relation.inverseEntityName].sort((l, r) => l.localeCompare(r));\n\n  const plainRelationType = getPlainRelationType(relation.relationType);\n  const baseHash = [...entities, plainRelationType].join(':');\n  const base64 = Buffer.from(baseHash).toString('base64');\n\n  return base64;\n}\n", "export const CE_CHANGE_KIND = {\n  CHANGE: 'change',\n  ADD: 'add',\n  DELETE: 'delete',\n  NONE: 'none',\n} as const;\n\nexport type CE_CHANGE_KIND = (typeof CE_CHANGE_KIND)[keyof typeof CE_CHANGE_KIND];\n", "import { getColumnHash } from '#/common/getColumnHash';\nimport { getEntityHash } from '#/common/getEntityHash';\nimport { getIndexHash } from '#/common/getIndexHash';\nimport { getRelationHash } from '#/common/getRelationHash';\nimport { CE_CHANGE_KIND } from '#/databases/const-enum/CE_CHANGE_KIND';\nimport { CE_RECORD_KIND } from '#/databases/const-enum/CE_RECORD_KIND';\nimport type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport type { TDatabaseRecord } from '#/databases/interfaces/TDatabaseRecord';\nimport { detailedDiff } from 'deep-object-diff';\nimport { settify } from 'my-easy-fp';\n\nexport function compareDatabase(\n  metadata: IRecordMetadata,\n  next: TDatabaseRecord[],\n  prev: TDatabaseRecord[],\n): TDatabaseRecord[] {\n  if (prev.length <= 0) {\n    return next.map((record) => ({ ...record, change: CE_CHANGE_KIND.NONE }));\n  }\n\n  const nextMap = next.reduce<Record<string, TDatabaseRecord>>((aggregation, record) => {\n    switch (record.$kind) {\n      case CE_RECORD_KIND.ENTITY:\n        return { ...aggregation, [getEntityHash(record)]: record };\n      case CE_RECORD_KIND.COLUMN:\n        return { ...aggregation, [getColumnHash(record)]: record };\n      case CE_RECORD_KIND.RELATION:\n        return { ...aggregation, [getRelationHash(record)]: record };\n      case CE_RECORD_KIND.INDEX:\n        return { ...aggregation, [getIndexHash(record)]: record };\n      default:\n        return aggregation;\n    }\n  }, {});\n\n  const prevMap = prev.reduce<Record<string, TDatabaseRecord>>((aggregation, record) => {\n    switch (record.$kind) {\n      case CE_RECORD_KIND.ENTITY:\n        return { ...aggregation, [getEntityHash(record)]: record };\n      case CE_RECORD_KIND.COLUMN:\n        return { ...aggregation, [getColumnHash(record)]: record };\n      case CE_RECORD_KIND.RELATION:\n        return { ...aggregation, [getRelationHash(record)]: record };\n      case CE_RECORD_KIND.INDEX:\n        return { ...aggregation, [getIndexHash(record)]: record };\n      default:\n        return aggregation;\n    }\n  }, {});\n\n  const compared = settify([...Object.keys(nextMap), ...Object.keys(prevMap)]).map((key): TDatabaseRecord => {\n    const fromNext = nextMap[key];\n    const fromPrev = prevMap[key];\n    // add\n    if (fromNext != null && fromPrev == null) {\n      return { ...fromNext, change: CE_CHANGE_KIND.ADD } satisfies TDatabaseRecord;\n    }\n\n    // delete\n    if (fromNext == null && fromPrev != null) {\n      return { ...fromPrev, change: CE_CHANGE_KIND.DELETE, version: metadata.version } satisfies TDatabaseRecord;\n    }\n\n    const forCompareNext: TDatabaseRecord = {\n      ...fromNext,\n      title: fromNext.title ?? '',\n      change: CE_CHANGE_KIND.NONE,\n      createdAt: '',\n      updatedAt: '',\n      version: '',\n    };\n    const forComparePrev: TDatabaseRecord = {\n      ...fromPrev,\n      title: fromPrev.title ?? '',\n      change: CE_CHANGE_KIND.NONE,\n      createdAt: '',\n      updatedAt: '',\n      version: '',\n    };\n    const diffed = detailedDiff(forCompareNext, forComparePrev);\n\n    // none\n    if (\n      Object.keys(diffed.added).length <= 0 &&\n      Object.keys(diffed.updated).length <= 0 &&\n      Object.keys(diffed.deleted).length <= 0\n    ) {\n      return { ...fromNext, change: CE_CHANGE_KIND.NONE } satisfies TDatabaseRecord;\n    }\n\n    // change\n    return { ...fromNext, change: CE_CHANGE_KIND.CHANGE, prev: fromPrev } satisfies TDatabaseRecord;\n  });\n\n  return compared;\n}\n", "import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport type { TDatabaseRecord } from '#/databases/interfaces/TDatabaseRecord';\nimport { getOutputDirPath } from '#/modules/files/getOutputDirPath';\nimport fs from 'node:fs';\nimport pathe from 'pathe';\n\nexport async function flushDatabase(\n  option: Pick<IBuildCommandOption, 'databasePath'>,\n  records: TDatabaseRecord[],\n): Promise<TDatabaseRecord[]> {\n  const dirname = await getOutputDirPath({ output: option.databasePath }, process.cwd());\n  const filename = pathe.join(dirname, CE_DEFAULT_VALUE.DATABASE_FILENAME);\n\n  if (filename == null) {\n    throw new Error(`invalid database name: undefined`);\n  }\n\n  await fs.promises.writeFile(\n    pathe.join(dirname, CE_DEFAULT_VALUE.DATABASE_FILENAME),\n    JSON.stringify(records, undefined, 2),\n  );\n\n  return records;\n}\n", "import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport type { TDatabaseRecord } from '#/databases/interfaces/TDatabaseRecord';\nimport { getOutputDirPath } from '#/modules/files/getOutputDirPath';\nimport { parse } from 'jsonc-parser';\nimport { isFalse } from 'my-easy-fp';\nimport { exists } from 'my-node-fp';\nimport fs from 'node:fs';\nimport pathe from 'pathe';\n\nexport async function openDatabase(option: Pick<IBuildCommandOption, 'databasePath'>): Promise<TDatabaseRecord[]> {\n  const dirname = await getOutputDirPath({ output: option.databasePath }, process.cwd());\n  const filename = pathe.join(dirname, CE_DEFAULT_VALUE.DATABASE_FILENAME);\n\n  if (filename == null) {\n    return [];\n  }\n\n  if (isFalse(await exists(filename))) {\n    return [];\n  }\n\n  const db = parse((await fs.promises.readFile(filename)).toString()) as TDatabaseRecord[];\n  return db;\n}\n", "import type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport type { TDatabaseRecord } from '#/databases/interfaces/TDatabaseRecord';\nimport alasql from 'alasql';\nimport { compareVersions } from 'compare-versions';\nimport { atOrThrow } from 'my-easy-fp';\n\nexport async function processDatabase(\n  metadata: IRecordMetadata,\n  db: TDatabaseRecord[],\n  option: Pick<IBuildCommandOption, 'versionFrom'>,\n): Promise<{ next: TDatabaseRecord[]; deleted: TDatabaseRecord[]; prev: TDatabaseRecord[] }> {\n  // case 01. empty database, first create database\n  if (db.length <= 0) {\n    return { next: [], deleted: [], prev: [] };\n  }\n\n  const currentVersion = metadata.version;\n  const versions = (await alasql.promise('SELECT DISTINCT version FROM ?', [db])) as {\n    version: string;\n  }[];\n\n  const sortedVersions =\n    option.versionFrom === 'timestamp'\n      ? versions.sort((l, r) => r.version.localeCompare(l.version))\n      : versions.sort((l, r) => compareVersions(r.version, l.version));\n\n  const firstVersionFromDb = atOrThrow(sortedVersions, 0).version;\n\n  // case 02. different version between current and latest from database\n  if (currentVersion !== firstVersionFromDb) {\n    const latestRecords = (await alasql.promise('SELECT * FROM ? WHERE version = ?', [\n      db,\n      firstVersionFromDb,\n    ])) as TDatabaseRecord[];\n\n    return { next: db, deleted: [], prev: latestRecords };\n  }\n\n  // case 03. database have only one version, but one version same current version\n  if (sortedVersions.length <= 1) {\n    return { next: [], deleted: [], prev: [] };\n  }\n\n  const secondVersionFromDb = atOrThrow(sortedVersions, 1).version;\n\n  // case 04. same version between current and latest from database\n  // in this case, update current version records in database\n  const partialRecords = (await alasql.promise('SELECT * FROM ? WHERE version != ?', [\n    db,\n    currentVersion,\n  ])) as TDatabaseRecord[];\n\n  const oldRecords = (await alasql.promise('SELECT * FROM ? WHERE version = ?', [\n    db,\n    currentVersion,\n  ])) as TDatabaseRecord[];\n\n  const latestRecords = (await alasql.promise('SELECT * FROM ? WHERE version = ?', [\n    db,\n    secondVersionFromDb,\n  ])) as TDatabaseRecord[];\n\n  return { next: partialRecords, deleted: oldRecords, prev: latestRecords };\n}\n", "export const SymbolDefaultTemplate = Symbol('default-template');\n", "export const SymbolLogger = Symbol('symbol-logger');\n", "export const SymbolTemplate = Symbol('template');\n", "import consola, { LogLevel, type InputLogObject, type LogType } from 'consola';\n\nexport class Logger {\n  #enable: boolean;\n\n  get enable() {\n    return this.#enable;\n  }\n\n  set enable(value) {\n    this.#enable = value;\n  }\n\n  constructor(enable?: boolean) {\n    this.#enable = enable ?? false;\n  }\n\n  get level() {\n    return consola.level;\n  }\n\n  set level(level: LogLevel) {\n    consola.level = level;\n  }\n\n  logging(level: LogType, message: InputLogObject | any, ...args: any[]) {\n    if (this.#enable) {\n      consola[level](message, ...args);\n    }\n  }\n\n  info = this.logging.bind(this, 'info');\n\n  warn = this.logging.bind(this, 'warn');\n\n  silent = this.logging.bind(this, 'silent');\n\n  error = this.logging.bind(this, 'error');\n\n  success = this.logging.bind(this, 'success');\n\n  fail = this.logging.bind(this, 'fail');\n\n  fatal = this.logging.bind(this, 'fatal');\n\n  debug = this.logging.bind(this, 'debug');\n\n  trace = this.logging.bind(this, 'trace');\n\n  verbose = this.logging.bind(this, 'verbose');\n\n  ready = this.logging.bind(this, 'ready');\n\n  box = this.logging.bind(this, 'box');\n\n  log = this.logging.bind(this, 'log');\n}\n", "import { container } from '#/modules/containers/container';\nimport { SymbolLogger } from '#/modules/containers/keys/SymbolLogger';\nimport { Logger } from '#/modules/loggers/Logger';\nimport { asValue } from 'awilix';\n\nexport function createLogger(enable?: boolean) {\n  if (!container.hasRegistration(SymbolLogger)) {\n    const logger = new Logger(enable ?? false);\n    container.register(SymbolLogger, asValue(logger));\n  }\n}\n", "import consola from 'consola';\nimport { Eta } from 'eta';\nimport { isError, orThrow } from 'my-easy-fp';\n\nexport class TemplateRenderer {\n  #eta: Eta;\n\n  #templates: Map<string, string>;\n\n  #defaultTemplates: Map<string, string>;\n\n  constructor(templates: Map<string, string>, defaultTemplates: Map<string, string>) {\n    this.#templates = templates;\n    this.#defaultTemplates = defaultTemplates;\n\n    this.#eta = new Eta({ views: 'erdia', autoEscape: false });\n    this.#eta.resolvePath = (templatePath: string) => templatePath;\n    this.#eta.readFile = (templatePath: string) => {\n      const template = this.#templates.get(templatePath) ?? this.#defaultTemplates.get(templatePath);\n      return orThrow(template, new Error(`cannot found template: ${templatePath}`));\n    };\n  }\n\n  async evaluate<T extends object>(name: string, data: T) {\n    try {\n      const rendered = this.#eta.render(name, data);\n      return rendered;\n    } catch (caught) {\n      const err = isError(caught, new Error(`raise error from evaluateTemplate: ${name}`));\n      consola.error(`template: ${name}`, data);\n      consola.error(err);\n      throw err;\n    }\n  }\n}\n", "export const configTemplate = `\n{\n  // directory for output files\n  \"output\": \"<%= it.config.output %>\",\n\n  // typeorm dataSourcePath\n  \"data-source-path\": \"<%= it.config.dataSourceFile %>\",\n\n  // type of generated document\n  \"components\": <%~ JSON.stringify(it.config.components) %>,\n\n  // kind of document name\n  // - db: database name from TypeORM\n  // - app: application name from package.json\n  \"project-name\": \"<%= it.config.projectName %>\",\n\n  // custom template file path. erdia are using [ETA](https://eta.js.org/) template engine\n  <% if (it.config.templatePath != null) { %>\n    \"template-path\": \"<%= it.config.templatePath %>\",\n  <% } else { %>\n    // \"template-path\": \"\",\n  <% } %>\n\n  // erdia entity database file path\n  <% if (it.config.databasePath != null) { %>\n    \"database-path\": \"<%= it.config.databasePath %>\",\n  <% } else { %>\n    // \"database-path\": \"\",\n  <% } %>\n\n  // erdia entity database file path\n<% if (it.config.routeBasePath != null) { %>\n  \"route-base-path\": \"<%= it.config.routeBasePath %>\",\n<% } else { %>\n  // \"route-base-path\": \"\",\n<% } %>\n\n  // document version using package.json version or timestamp\n  \"version-from\": \"<%= it.config.versionFrom %>\",\n\n  // If the versionFrom option set file, read the file from this path\n<% if (it.config.versionPath != null) { %>\n  \"version-path\": \"<%= it.config.versionPath %>\",\n<% } else { %>\n  // \"version-path\": \"\",\n<% } %>\n\n  // output format of generated documents\n  // - html\n  // - md\n  // - pdf\n  // - image\n  \"format\": \"<%= it.config.format %>\",\n\n  // skip image file attachment in html document\n  \"skipImageInHtml\": false,\n\n  // mermaid.js plugin theme configuration\n  // @url https://mermaid-js.github.io/mermaid/#/Setup?id=theme\n  \"theme\": \"<%= it.config.theme %>\",\n\n  // prettier config path\n  // \"prettier-config\": \"set your .prettierrc file path\",\n\n  // title tag content that inside of html document\n  // \"title\": \"set title tag content in html document\",\n\n  // ER diagram width, it will be set width css attribute\n  // @format pdf, image\n  <% if (it.config.format === 'pdf' || it.config.format === 'image') { -%>\n  \"width\": \"100%\",\n  <% } else { -%>\n  // \"width\": \"100%\",\n  <% } -%>\n\n  // puppeteer viewport width\n  // @format pdf, image\n  <% if (it.config.format === 'pdf' || it.config.format === 'image') { -%>\n  \"viewport-width\": 1280,\n  <% } else { -%>\n  // \"viewport-width\": 1280,\n  <% } -%>\n\n  // puppeteer viewport height\n  // @format pdf, image\n  <% if (it.config.format === 'pdf' || it.config.format === 'image') { -%>\n  \"viewport-height\":  1440,\n  <% } else { -%>\n  // \"viewport-height\":  1440,\n  <% } -%>\n\n  // puppeteer config file path\n  // @format pdf, image\n  // \"puppeteer-config-path\": \"set your puppeteer configuration file path\",\n\n  // Background color. Example: transparent, red, '#F0F0F0'. Optional. Default: white\n  // @format pdf, image\n  // \"background-color\": \"#FFFFFF\",\n\n  // ER diagram export image file format\n  // @format image\n  <% if (it.config.format === 'image') { %>\n  \"image-format\": \"<%= it.config.imageFormat %>\",\n  <% } else { %>\n  // \"image-format\": \"svg\",\n  <% } %>\n}\n`;\n", "import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport { exists } from 'my-node-fp';\nimport pathe from 'pathe';\n\nexport async function getTemplateModulePath(templatePathParam?: string): Promise<string> {\n  const currentFilePath = pathe.resolve(__dirname);\n\n  if (templatePathParam != null) {\n    const currentWithTemplatePath = pathe.resolve(pathe.join(currentFilePath, templatePathParam));\n    if (await exists(currentWithTemplatePath)) {\n      return currentWithTemplatePath;\n    }\n  }\n\n  const packageRootTemplatePath = pathe.resolve(\n    pathe.join(currentFilePath, '..', '..', '..', CE_DEFAULT_VALUE.TEMPLATES_PATH),\n  );\n\n  if (await exists(packageRootTemplatePath)) {\n    return packageRootTemplatePath;\n  }\n\n  const distTemplatePath = pathe.resolve(pathe.join(currentFilePath, '..', '..', CE_DEFAULT_VALUE.TEMPLATES_PATH));\n  if (await exists(distTemplatePath)) {\n    return distTemplatePath;\n  }\n\n  throw new Error('cannot found template directory!');\n}\n", "import { getTemplateModulePath } from '#/templates/modules/getTemplateModulePath';\nimport { exists } from 'my-node-fp';\nimport pathe from 'pathe';\n\nexport async function getTemplatePath(templatePathParam?: string): Promise<string> {\n  if (templatePathParam != null && (await exists(pathe.resolve(templatePathParam)))) {\n    return pathe.resolve(templatePathParam);\n  }\n\n  return getTemplateModulePath(templatePathParam);\n}\n", "import type { Glob, GlobOptions } from 'glob';\nimport pathe from 'pathe';\n\nexport function getGlobFiles<T extends GlobOptions>(glob: Glob<T>): string[] {\n  const filePathSet = new Set<string>();\n\n  for (const filePath of glob) {\n    filePathSet.add(typeof filePath === 'string' ? filePath : pathe.join(filePath.path, filePath.name));\n  }\n\n  return Array.from(filePathSet);\n}\n", "export const defaultExclude = ['node_modules/**', 'flow-typed/**', 'coverage/**', '.git/**'];\n", "import type { ITemplate } from '#/templates/interfaces/ITemplate';\nimport { isTrue } from 'my-easy-fp';\nimport { basenames, exists, getDirname } from 'my-node-fp';\nimport fs from 'node:fs';\nimport pathe from 'pathe';\n\nexport async function getTemplate(dirPath: string, filePath: string): Promise<ITemplate | undefined> {\n  if (isTrue(await exists(filePath))) {\n    const buf = await fs.promises.readFile(filePath);\n    const relative = pathe.relative(dirPath, filePath).replace(`.${pathe.sep}`, '');\n    const dirname = await getDirname(relative);\n    const basename = basenames(relative, ['.eta', '.ejs']);\n\n    return { key: pathe.join(dirname, basename), content: buf.toString() };\n  }\n\n  return undefined;\n}\n", "import { getGlobFiles } from '#/modules/files/getGlobFiles';\nimport { defaultExclude } from '#/modules/scopes/defaultExclude';\nimport type { ITemplate } from '#/templates/interfaces/ITemplate';\nimport { getTemplate } from '#/templates/modules/getTemplate';\nimport { Glob, type GlobOptions } from 'glob';\nimport pathe from 'pathe';\n\nexport async function getTemplates(templatePath: string, globOptions?: GlobOptions) {\n  const resolvedTemplatePath = pathe.resolve(templatePath);\n\n  const globs = new Glob(pathe.join(resolvedTemplatePath, `**`, '*.eta'), {\n    ...globOptions,\n    absolute: true,\n    ignore: defaultExclude,\n    cwd: resolvedTemplatePath,\n    windowsPathsNoEscape: true,\n  });\n\n  const templateFilePaths = getGlobFiles(globs)\n    .map((filePath): [string, boolean] => [filePath, true])\n    .map(([filePath, _flag]) => filePath);\n\n  const loadedTemplateFiles = (\n    await Promise.all(templateFilePaths.map((templateFilePath) => getTemplate(resolvedTemplatePath, templateFilePath)))\n  ).filter((template): template is ITemplate => template != null);\n\n  return loadedTemplateFiles;\n}\n", "import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport type { IDocumentOption } from '#/configs/interfaces/IDocumentOption';\nimport { configTemplate } from '#/templates/modules/configTemplate';\nimport { getTemplatePath } from '#/templates/modules/getTemplatePath';\nimport { getTemplates } from '#/templates/modules/getTemplates';\nimport pathe from 'pathe';\n\nexport async function loadTemplates(option?: Pick<IDocumentOption, 'templatePath'>) {\n  const defaultTemplatePath = await getTemplatePath(CE_DEFAULT_VALUE.TEMPLATES_PATH);\n  const [defaultHtml, defaultMarkdown, defaultImage, defaultPdf] = await Promise.all([\n    getTemplates(pathe.join(defaultTemplatePath, 'html'), {}),\n    getTemplates(pathe.join(defaultTemplatePath, 'markdown'), {}),\n    getTemplates(pathe.join(defaultTemplatePath, 'image'), {}),\n    getTemplates(pathe.join(defaultTemplatePath, 'pdf'), {}),\n  ]);\n\n  const defaultTemplateMap = new Map<string, string>([\n    ['config-json', configTemplate.trim()],\n    ...defaultHtml.map((template): [string, string] => [`html-${template.key}`, template.content]),\n    ...defaultMarkdown.map((template): [string, string] => [`markdown-${template.key}`, template.content]),\n    ...defaultImage.map((template): [string, string] => [`image-${template.key}`, template.content]),\n    ...defaultPdf.map((template): [string, string] => [`pdf-${template.key}`, template.content]),\n  ]);\n\n  if (option?.templatePath == null) {\n    return {\n      default: defaultTemplateMap,\n      template: defaultTemplateMap,\n    };\n  }\n\n  const templatePath = await getTemplatePath(option.templatePath);\n  const [templateHtml, templateMarkdown, templateImage, templatePdf] = await Promise.all([\n    getTemplates(pathe.join(templatePath, 'html'), {}),\n    getTemplates(pathe.join(templatePath, 'markdown'), {}),\n    getTemplates(pathe.join(templatePath, 'image'), {}),\n    getTemplates(pathe.join(templatePath, 'pdf'), {}),\n  ]);\n\n  const templateMap = new Map<string, string>([\n    ['config-json', configTemplate.trim()],\n    ...templateHtml.map((template): [string, string] => [`html-${template.key}`, template.content]),\n    ...templateMarkdown.map((template): [string, string] => [`markdown-${template.key}`, template.content]),\n    ...templateImage.map((template): [string, string] => [`image-${template.key}`, template.content]),\n    ...templatePdf.map((template): [string, string] => [`pdf-${template.key}`, template.content]),\n  ]);\n\n  return {\n    default: defaultTemplateMap,\n    template: templateMap,\n  };\n}\n", "/**\n * ER Diagram column attribute\n *\n * - PK: primary key\n * - FK: foreign key\n * - UK: unique key\n */\nexport const CE_COLUMN_ATTRIBUTE = {\n  PK: 'PK',\n  FK: 'FK',\n  UK: 'UK',\n} as const;\n\nexport type CE_COLUMN_ATTRIBUTE = (typeof CE_COLUMN_ATTRIBUTE)[keyof typeof CE_COLUMN_ATTRIBUTE];\n", "import { CE_COLUMN_ATTRIBUTE } from '#/configs/const-enum/CE_COLUMN_ATTRIBUTE';\nimport type { IColumnRecord } from '#/databases/interfaces/IColumnRecord';\nimport { bignumber, type BigNumber } from 'mathjs';\nimport { populate } from 'my-easy-fp';\n\nexport function getColumnWeight(column: Omit<IColumnRecord, 'weight'>): BigNumber {\n  const weight = bignumber(0);\n\n  const type = bignumber(\n    populate(column.columnType.length).reduce((sum, index) => sum + column.columnType.charCodeAt(index), 0),\n  ).mul(1000);\n\n  return weight\n    .add(column.attributeKey.indexOf(CE_COLUMN_ATTRIBUTE.PK) >= 0 ? 20000000 : 0)\n    .add(column.attributeKey.indexOf(CE_COLUMN_ATTRIBUTE.FK) >= 0 ? 10000000 : 0)\n    .add(type)\n    .add(bignumber(122).sub(bignumber(column.name.toLowerCase().charCodeAt(0))))\n    .add(\n      bignumber(122)\n        .sub(bignumber(column.name.toLowerCase().charCodeAt(1)))\n        .div(100),\n    );\n}\n", "import { CE_COLUMN_ATTRIBUTE } from '#/configs/const-enum/CE_COLUMN_ATTRIBUTE';\nimport type { IIndexRecord } from '#/databases/interfaces/IIndexRecord';\nimport alasql from 'alasql';\nimport { atOrUndefined } from 'my-easy-fp';\nimport type { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata';\n\nexport function getColumnAttributeKey(\n  columnMetadata: Pick<ColumnMetadata, 'relationMetadata' | 'isPrimary'>,\n  dbName: string,\n  tableDBName: string,\n  indexRecords: IIndexRecord[],\n) {\n  const indices = alasql('SELECT * FROM ? WHERE ? = ANY (columnNames) and tableDBName = ?', [\n    indexRecords,\n    dbName,\n    tableDBName,\n  ]) as IIndexRecord[];\n\n  const index = atOrUndefined(indices, 0);\n\n  return [\n    columnMetadata.relationMetadata != null ? CE_COLUMN_ATTRIBUTE.FK : undefined,\n    columnMetadata.isPrimary ? CE_COLUMN_ATTRIBUTE.PK : undefined,\n    index?.isUnique ? CE_COLUMN_ATTRIBUTE.UK : undefined,\n  ].filter((attribute): attribute is CE_COLUMN_ATTRIBUTE => attribute != null);\n}\n", "import type { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata';\n\nexport function getIsNullable(metadata: {\n  isNullable: ColumnMetadata['isNullable'];\n  isPrimary: ColumnMetadata['isPrimary'];\n}) {\n  if (metadata.isPrimary) {\n    return '';\n  }\n\n  if (metadata.isNullable === false) {\n    return '';\n  }\n\n  return 'nullable';\n}\n", "import { getIsNullable } from '#/typeorm/columns/getIsNullable';\nimport { isTrue } from 'my-easy-fp';\nimport type { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata';\n\nexport function getColumnType(\n  columnMetadata: Pick<ColumnMetadata, 'type' | 'length' | 'isNullable' | 'isPrimary'>,\n  includeLength?: boolean,\n) {\n  const nullable = getIsNullable(columnMetadata);\n  if (typeof columnMetadata.type === 'function') {\n    if (isTrue(includeLength ?? false) && columnMetadata.length !== '') {\n      const name = columnMetadata.type.name.toString().toLowerCase().replace(/\\s/g, '-');\n      const withNullable = nullable === 'nullable' ? name : `*${name}`;\n      return `${withNullable}(${columnMetadata.length})`;\n    }\n\n    const name = columnMetadata.type.name.toString().toLowerCase().replace(/\\s/g, '-');\n    const withNullable = nullable === 'nullable' ? name : `*${name}`;\n    return withNullable;\n  }\n\n  if (isTrue(includeLength ?? false) && columnMetadata.length !== '') {\n    const name = columnMetadata.type.toString().replace(/\\s/g, '-');\n    const withNullable = nullable === 'nullable' ? name : `*${name}`;\n    return `${withNullable}(${columnMetadata.length})`;\n  }\n\n  const name = columnMetadata.type.toString().replace(/\\s/g, '-');\n  const withNullable = nullable === 'nullable' ? name : `*${name}`;\n  return withNullable;\n}\n", "import { CE_OUTPUT_FORMAT } from '#/configs/const-enum/CE_OUTPUT_FORMAT';\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\n\nexport function getComment(option: Pick<IBuildCommandOption, 'format'>, comment: undefined | null | string) {\n  if (comment == null) {\n    return '';\n  }\n\n  if (option.format === CE_OUTPUT_FORMAT.MARKDOWN) {\n    return comment.replace(/\\r\\n/g, '\\\\\\\\r\\\\\\\\n').replace(/\\n\\r/g, '\\\\\\\\n\\\\\\\\r').replace(/\\n/g, '\\\\\\\\n');\n  }\n\n  if (option.format === CE_OUTPUT_FORMAT.HTML) {\n    return comment.replace(/\\r\\n/g, '<br />').replace(/\\n\\r/g, '<br />').replace(/\\n/g, '<br />');\n  }\n\n  return comment.replace(/\\r\\n/g, '<br />').replace(/\\n\\r/g, '<br />').replace(/\\n/g, '<br />');\n}\n", "import type { IEntityRecord } from '#/databases/interfaces/IEntityRecord';\nimport type { EntityMetadata } from 'typeorm';\n\n/**\n * \uC5D4\uD2F0\uD2F0 \uBA54\uD0C0 \uB370\uC774\uD130\uB97C \uBC1B\uC544\uC11C \uB2E4\uC774\uC5B4\uADF8\uB7A8\uC5D0\uC11C \uC0AC\uC6A9\uD560 \uC774\uB984\uC744 \uBC18\uD658\uD55C\uB2E4.\n * \uAD04\uD638\uB098 \uC5D8\uB9AC\uC5B4\uC2A4\uB97C \uD45C\uC2DC\uD560 \uC218 \uC788\uB294 \uBC29\uBC95\uC774 \uC5C6\uC5B4\uC11C \uD14C\uC774\uBE14 \uC774\uB984\uC744 \uC0AC\uC6A9\uD55C\uB2E4.\n * \uD14C\uC774\uBE14 \uC774\uB984\uC774 \uC5C6\uB294 \uACBD\uC6B0\uC5D0\uB9CC \uC5D4\uD2F0\uD2F0 \uC774\uB984\uC744 \uC0AC\uC6A9\uD55C\uB2E4.\n *\n * @param entityMeta \uC5D4\uD2F0\uD2F0 \uBA54\uD0C0 \uB370\uC774\uD130\n * @returns entity name in CF-ER Diagram\n */\nexport function getEntityName(entityMeta: Pick<EntityMetadata, 'tableName' | 'name'> | IEntityRecord) {\n  if ('$kind' in entityMeta) {\n    if (entityMeta.dbName == null || entityMeta.dbName === '') {\n      return entityMeta.name;\n    }\n\n    return entityMeta.dbName;\n  }\n\n  const { tableName, name } = entityMeta;\n\n  if (tableName == null || tableName === '') {\n    return name;\n  }\n\n  return tableName;\n}\n", "import type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { getColumnWeight } from '#/creators/columns/getColumnWeight';\nimport { CE_CHANGE_KIND } from '#/databases/const-enum/CE_CHANGE_KIND';\nimport type { IColumnRecord } from '#/databases/interfaces/IColumnRecord';\nimport type { IIndexRecord } from '#/databases/interfaces/IIndexRecord';\nimport type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport { getColumnAttributeKey } from '#/typeorm/columns/getColumnAttributeKey';\nimport { getColumnType } from '#/typeorm/columns/getColumnType';\nimport { getComment } from '#/typeorm/columns/getComment';\nimport { getIsNullable } from '#/typeorm/columns/getIsNullable';\nimport { getEntityName } from '#/typeorm/entities/getEntityName';\nimport type { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata';\n\nexport function getColumnRecord(\n  columnMetadata: ColumnMetadata,\n  option: Pick<IBuildCommandOption, 'format'>,\n  metadata: IRecordMetadata,\n  indices: IIndexRecord[],\n): IColumnRecord {\n  /** entity name of metadata */\n  const entityName = getEntityName(columnMetadata.entityMetadata);\n\n  const { propertyName } = columnMetadata;\n\n  /** table name of database */\n  const columnName = columnMetadata.databaseName;\n\n  /** column attribute key, (e.g., PK, FK) */\n  const attributeKey = getColumnAttributeKey(columnMetadata, columnName, entityName, indices);\n\n  /** type of column */\n  const columnType = getColumnType(columnMetadata);\n\n  /** type of column */\n  const columnTypeWithLength = getColumnType(columnMetadata, true);\n\n  /** comment of entity, column */\n  const comment = getComment(option, columnMetadata.comment);\n\n  const isNullable = getIsNullable(columnMetadata);\n\n  const charset = columnMetadata.charset ?? '';\n\n  const columnData: Omit<IColumnRecord, 'weight'> = {\n    $kind: 'column',\n    ...metadata,\n    change: CE_CHANGE_KIND.ADD,\n    entity: entityName,\n    name: propertyName,\n    dbName: columnName,\n    attributeKey,\n    isNullable,\n    columnType,\n    charset,\n    columnTypeWithLength,\n    comment,\n  };\n\n  const weight = getColumnWeight(columnData);\n\n  return { ...columnData, weight: weight.toNumber() };\n}\n", "import { CE_CHANGE_KIND } from '#/databases/const-enum/CE_CHANGE_KIND';\nimport type { IEntityRecord } from '#/databases/interfaces/IEntityRecord';\nimport type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport { getEntityName } from '#/typeorm/entities/getEntityName';\nimport type { EntityMetadata } from 'typeorm';\n\nexport function getEntityRecord(entityMetadata: EntityMetadata, metadata: IRecordMetadata): IEntityRecord {\n  const record: IEntityRecord = {\n    $kind: 'entity',\n    ...metadata,\n    change: CE_CHANGE_KIND.ADD,\n    entity: getEntityName(entityMetadata),\n    name: entityMetadata.name,\n    dbName: entityMetadata.tableName,\n    hasRelation: entityMetadata.relations.length > 0,\n  };\n\n  return record;\n}\n", "import type { IEntityRecord } from '#/databases/interfaces/IEntityRecord';\nimport type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport { getEntityRecord } from '#/typeorm/entities/getEntityRecord';\nimport { type DataSource } from 'typeorm';\n\nexport function getEntityRecords(dataSource: DataSource, metadata: IRecordMetadata): IEntityRecord[] {\n  const entityRecords = dataSource.entityMetadatas.map((entityMetadata) => getEntityRecord(entityMetadata, metadata));\n\n  const entityMap = entityRecords.reduce<Record<string, IEntityRecord>>((map, record) => {\n    return { ...map, [record.name]: record };\n  }, {});\n\n  const deduped = Object.values(entityMap);\n\n  return deduped;\n}\n", "/* eslint-disable @typescript-eslint/no-unsafe-member-access, no-await-in-loop, @typescript-eslint/no-unsafe-assignment, guard-for-in */\nimport { isError } from 'my-easy-fp';\nimport { InstanceChecker, type DataSource } from 'typeorm';\nimport { importOrRequireFile } from 'typeorm/util/ImportUtils';\n\n/**\n * load dataSource, from [CommandUtils.ts](https://github.com/typeorm/typeorm/blob/master/src/commands/CommandUtils.ts#L13)\n *\n * @param dataSourceFilePath dataSource file path\n * @returns\n */\nexport async function loadDataSource(dataSourceFilePath: string): Promise<DataSource> {\n  let dataSourceFileExports;\n\n  try {\n    [dataSourceFileExports] = await importOrRequireFile(dataSourceFilePath);\n  } catch (caught) {\n    const err = isError(caught, new Error(`Unable to open file: \"${dataSourceFilePath}\".`));\n    throw new Error(`Unable to open file: \"${dataSourceFilePath}\". ${err.message}`);\n  }\n\n  if (!dataSourceFileExports || typeof dataSourceFileExports !== 'object') {\n    throw new Error(`Given data source file must contain export of a DataSource instance`);\n  }\n\n  if (InstanceChecker.isDataSource(dataSourceFileExports)) {\n    return dataSourceFileExports;\n  }\n\n  const dataSourceExports = [];\n\n  for (const fileExportKey in dataSourceFileExports) {\n    const fileExport = dataSourceFileExports[fileExportKey];\n    // It is necessary to await here in case of the exported async value (Promise<DataSource>).\n    // e.g. the DataSource is instantiated with an async factory in the source file\n    // It is safe to await regardless of the export being async or not due to `awaits` definition:\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#return_value\n    const awaitedFileExport = await fileExport;\n    if (InstanceChecker.isDataSource(awaitedFileExport)) {\n      dataSourceExports.push(awaitedFileExport);\n    }\n  }\n\n  if (dataSourceExports.length === 0) {\n    throw new Error(`Given data source file must contain export of a DataSource instance`);\n  }\n\n  if (dataSourceExports.length > 1) {\n    throw new Error(`Given data source file must contain only one export of DataSource instance`);\n  }\n\n  return dataSourceExports[0];\n}\n", "import type { ICommonOption } from '#/configs/interfaces/ICommonOption';\nimport { loadDataSource } from '#/typeorm/loadDataSource';\nimport { isFalse } from 'my-easy-fp';\nimport { exists } from 'my-node-fp';\nimport pathe from 'pathe';\nimport { type DataSource } from 'typeorm';\n\nexport async function getDataSource(options: Pick<ICommonOption, 'dataSourcePath'>): Promise<DataSource> {\n  const dataSourcePath = pathe.resolve(options.dataSourcePath);\n\n  if (isFalse(await exists(dataSourcePath))) {\n    throw new Error(`Cannot found dataSource: ${dataSourcePath}`);\n  }\n\n  const dataSource = await loadDataSource(dataSourcePath);\n\n  if (dataSource == null) {\n    throw new Error(`Cannot found dataSource in ${options.dataSourcePath}`);\n  }\n\n  return dataSource;\n}\n", "import { CE_CHANGE_KIND } from '#/databases/const-enum/CE_CHANGE_KIND';\nimport { CE_RECORD_KIND } from '#/databases/const-enum/CE_RECORD_KIND';\nimport type { IIndexRecord } from '#/databases/interfaces/IIndexRecord';\nimport type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport { getEntityName } from '#/typeorm/entities/getEntityName';\nimport type { EntityMetadata } from 'typeorm';\n\nexport function getIndexRecord(entityMetadata: EntityMetadata, metadata: IRecordMetadata) {\n  const indices = entityMetadata.indices.map((entityIndex) => {\n    const record: IIndexRecord = {\n      $kind: CE_RECORD_KIND.INDEX,\n      ...metadata,\n      change: CE_CHANGE_KIND.NONE,\n      entity: getEntityName(entityMetadata),\n      name: entityIndex.givenName ?? entityIndex.name,\n      dbName: entityIndex.name,\n      tableName: entityMetadata.name,\n      tableDBName: entityMetadata.tableName,\n      isUnique: entityIndex.isUnique,\n      isFulltext: entityIndex.isFulltext,\n      isSpatial: entityIndex.isSpatial ?? false,\n      columnNames: entityIndex.columns.map((column) => column.databaseName),\n    };\n    return record;\n  });\n\n  const uniques = entityMetadata.uniques.map((entityUnique) => {\n    const record: IIndexRecord = {\n      $kind: CE_RECORD_KIND.INDEX,\n      ...metadata,\n      change: CE_CHANGE_KIND.NONE,\n      entity: getEntityName(entityMetadata),\n      name: entityUnique.givenName ?? entityUnique.name,\n      dbName: entityUnique.name,\n      tableName: entityMetadata.name,\n      tableDBName: entityMetadata.tableName,\n      isUnique: true,\n      isFulltext: false,\n      isSpatial: false,\n      columnNames: entityUnique.columns.map((column) => column.databaseName),\n    };\n    return record;\n  });\n\n  return [...indices, ...uniques];\n}\n", "import { getIndexHash } from '#/common/getIndexHash';\nimport type { IIndexRecord } from '#/databases/interfaces/IIndexRecord';\nimport type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport { getIndexRecord } from '#/typeorm/indices/getIndexRecord';\nimport { type DataSource } from 'typeorm';\n\nexport function getIndexRecords(dataSource: DataSource, metadata: IRecordMetadata): IIndexRecord[] {\n  const indexRecords = dataSource.entityMetadatas\n    .map((entityMetadata) => getIndexRecord(entityMetadata, metadata))\n    .flat();\n\n  const dedupedMap = indexRecords.reduce<Record<string, IIndexRecord>>((aggregation, indexRecord) => {\n    return { ...aggregation, [getIndexHash(indexRecord)]: indexRecord };\n  }, {});\n\n  const deduped = Object.values(dedupedMap);\n\n  return deduped;\n}\n", "import type { IRelationRecord } from '#/databases/interfaces/IRelationRecord';\nimport { atOrThrow } from 'my-easy-fp';\n\nexport function dedupeManyToManyRelationRecord(relations: IRelationRecord[]) {\n  const otherRelations = relations.filter((relation) => relation.relationType !== 'many-to-many');\n  const manyToManyRelations = relations.filter((relation) => relation.relationType === 'many-to-many');\n\n  const relationMap = manyToManyRelations.reduce<Record<string, IRelationRecord[]>>((aggregation, relation) => {\n    if (aggregation[relation.relationHash] == null) {\n      return { ...aggregation, [relation.relationHash]: [relation] };\n    }\n\n    return { ...aggregation, [relation.relationHash]: [...aggregation[relation.relationHash], relation] };\n  }, {});\n\n  const nextRelations = Object.values(relationMap).map((chunkedRelations) => {\n    const sortedRelations = chunkedRelations.sort((l, r) => l.dbName.localeCompare(r.dbName));\n\n    const firstRelation = atOrThrow(\n      sortedRelations,\n      0,\n      new Error(`Cannot found relation: ${sortedRelations.at(0)?.entity} - ${sortedRelations.at(1)?.entity}`),\n    );\n\n    const secondRelation = sortedRelations.length > 1 ? sortedRelations[1] : null;\n\n    if (secondRelation) {\n      const firstNext = { ...firstRelation, inverseJoinColumnName: secondRelation.joinColumnName };\n      const secondNext = { ...secondRelation, inverseJoinColumnName: firstRelation.joinColumnName, isDuplicate: true };\n\n      return [firstNext, secondNext];\n    }\n\n    const firstNext = { ...firstRelation };\n    return [firstNext];\n  });\n\n  return [...otherRelations, ...nextRelations.flat()];\n}\n", "import type { IEntityRecord } from '#/databases/interfaces/IEntityRecord';\nimport type { EntityMetadata } from 'typeorm';\n\n/**\n * \uC5D4\uD2F0\uD2F0 \uBA54\uD0C0 \uB370\uC774\uD130\uB97C \uBC1B\uC544\uC11C \uB2E4\uC774\uC5B4\uADF8\uB7A8\uC5D0\uC11C \uC0AC\uC6A9\uD560 \uC774\uB984\uC744 \uBC18\uD658\uD55C\uB2E4.\n * \uAD04\uD638\uB098 \uC5D8\uB9AC\uC5B4\uC2A4\uB97C \uD45C\uC2DC\uD560 \uC218 \uC788\uB294 \uBC29\uBC95\uC774 \uC5C6\uC5B4\uC11C \uD14C\uC774\uBE14 \uC774\uB984\uC744 \uC0AC\uC6A9\uD55C\uB2E4.\n * \uD14C\uC774\uBE14 \uC774\uB984\uC774 \uC5C6\uB294 \uACBD\uC6B0\uC5D0\uB9CC \uC5D4\uD2F0\uD2F0 \uC774\uB984\uC744 \uC0AC\uC6A9\uD55C\uB2E4.\n *\n * @param entityMeta \uC5D4\uD2F0\uD2F0 \uBA54\uD0C0 \uB370\uC774\uD130\n * @returns entity name in CF-ER Diagram\n */\nexport function getEntityPropertyName(entityMeta: Pick<EntityMetadata, 'tableName' | 'name'> | IEntityRecord) {\n  if ('$kind' in entityMeta) {\n    if (entityMeta.name == null || entityMeta.name === '') {\n      return entityMeta.dbName;\n    }\n\n    return entityMeta.name;\n  }\n\n  const { tableName, name } = entityMeta;\n\n  if (name == null || name === '') {\n    return tableName;\n  }\n\n  return name;\n}\n", "import { getEntityName } from '#/typeorm/entities/getEntityName';\nimport { atOrUndefined } from 'my-easy-fp';\nimport type { RelationMetadata } from 'typeorm/metadata/RelationMetadata';\n\nexport function getInverseRelationMetadata(\n  relationMetadata: Pick<RelationMetadata, 'entityMetadata' | 'inverseEntityMetadata' | 'inverseJoinColumns'>,\n) {\n  const entityName = getEntityName(relationMetadata.entityMetadata);\n  const raceInverseRelationMetadata = () => {\n    const fromInverseMetadata = relationMetadata.inverseEntityMetadata.relations.find(\n      (relation) => getEntityName(relation.inverseEntityMetadata) === entityName,\n    );\n\n    const fromInverseJoinColumns = atOrUndefined(relationMetadata.inverseJoinColumns, 0);\n\n    if (fromInverseMetadata != null) {\n      return fromInverseMetadata;\n    }\n\n    if (fromInverseJoinColumns?.relationMetadata != null) {\n      return fromInverseJoinColumns.relationMetadata;\n    }\n\n    return undefined;\n  };\n\n  const inverseRelationMetadata = raceInverseRelationMetadata();\n\n  if (inverseRelationMetadata == null) {\n    throw new Error(\n      `Cannot found relation from inverse entity metadata: ${relationMetadata.inverseEntityMetadata.name}`,\n    );\n  }\n\n  return inverseRelationMetadata;\n}\n", "import type { IRelationRecord } from '#/databases/interfaces/IRelationRecord';\nimport { getEntityName } from '#/typeorm/entities/getEntityName';\nimport { getInverseRelationMetadata } from '#/typeorm/relations/getInverseRelationMetadata';\nimport consola from 'consola';\nimport type { RelationMetadata } from 'typeorm/metadata/RelationMetadata';\n\nexport function getManyToManyJoinColumn(\n  relationMetadata: Pick<\n    RelationMetadata,\n    'joinTableName' | 'joinColumns' | 'entityMetadata' | 'inverseEntityMetadata' | 'inverseJoinColumns'\n  >,\n): Pick<\n  IRelationRecord,\n  'joinColumnName' | 'joinPropertyName' | 'inverseJoinColumnOne' | 'inverseJoinColumnNullable' | 'isDuplicate'\n> {\n  const joinTable = relationMetadata.joinTableName;\n  const joinColumn = relationMetadata.joinColumns.find((column) => getEntityName(column.entityMetadata) === joinTable);\n  const inverseRelationMetadata = getInverseRelationMetadata(relationMetadata);\n\n  if (joinColumn != null) {\n    consola.debug(`M:N entity: ${joinColumn.propertyName}-${relationMetadata.joinTableName}`);\n\n    return {\n      inverseJoinColumnOne: false,\n      inverseJoinColumnNullable: inverseRelationMetadata.isNullable,\n      joinPropertyName: joinColumn.propertyName,\n      joinColumnName: joinColumn.databaseName,\n      isDuplicate: false,\n    };\n  }\n\n  const entityName = getEntityName(relationMetadata.entityMetadata);\n\n  const manyToManyRelation = relationMetadata.inverseEntityMetadata.manyToManyRelations.find(\n    (manyToOneRelationMetadata) => {\n      const inverseEntityName = getEntityName(manyToOneRelationMetadata.inverseEntityMetadata);\n      return inverseEntityName === entityName;\n    },\n  );\n\n  if (manyToManyRelation == null) {\n    throw new Error(`Cannot found relation on many-to-many side: ${relationMetadata.entityMetadata.name}`);\n  }\n\n  const inverseJoinTable = manyToManyRelation.joinTableName;\n  const inverseJoinColumn = manyToManyRelation.joinColumns.find(\n    (column) => getEntityName(column.entityMetadata) === inverseJoinTable,\n  );\n\n  if (inverseJoinColumn == null) {\n    throw new Error(`Cannot found join-column on many-to-many side: ${manyToManyRelation.entityMetadata.name}`);\n  }\n\n  return {\n    inverseJoinColumnOne: false,\n    inverseJoinColumnNullable: inverseRelationMetadata.isNullable,\n    joinPropertyName: inverseJoinColumn.propertyName,\n    joinColumnName: inverseJoinColumn.databaseName,\n    isDuplicate: false,\n  };\n}\n", "import type { IRelationRecord } from '#/databases/interfaces/IRelationRecord';\nimport { getEntityName } from '#/typeorm/entities/getEntityName';\nimport type { RelationMetadata } from 'typeorm/metadata/RelationMetadata';\n\nexport function getManyToOneJoinColumn(\n  relationMetadata: Pick<RelationMetadata, 'joinColumns' | 'entityMetadata' | 'propertyName'>,\n): Pick<IRelationRecord, 'joinColumnName' | 'joinPropertyName' | 'inverseJoinColumnNullable'> {\n  const joinColumn = relationMetadata.joinColumns.find(\n    (column) => getEntityName(column.entityMetadata) === getEntityName(relationMetadata.entityMetadata),\n  );\n\n  if (joinColumn == null) {\n    throw new Error(\n      `Invalid joinColumn detected: [${relationMetadata.joinColumns.length}] ${relationMetadata.propertyName}`,\n    );\n  }\n\n  return {\n    inverseJoinColumnNullable: joinColumn.isNullable,\n    joinPropertyName: joinColumn.propertyName,\n    joinColumnName: joinColumn.databaseName,\n  };\n}\n", "import type { IRelationRecord } from '#/databases/interfaces/IRelationRecord';\nimport { getEntityName } from '#/typeorm/entities/getEntityName';\nimport { getManyToManyJoinColumn } from '#/typeorm/relations/getManyToManyJoinColumn';\nimport { getManyToOneJoinColumn } from '#/typeorm/relations/getManyToOneJoinColumn';\nimport type { RelationMetadata } from 'typeorm/metadata/RelationMetadata';\n\nexport function getJoinColumn(\n  relationMetadata: RelationMetadata,\n): Pick<\n  IRelationRecord,\n  'joinColumnName' | 'joinPropertyName' | 'inverseJoinColumnOne' | 'inverseJoinColumnNullable' | 'isDuplicate'\n> {\n  if (relationMetadata.relationType === 'one-to-one') {\n    const joinColumn = relationMetadata.joinColumns.find(\n      (column) => getEntityName(column.entityMetadata) === getEntityName(relationMetadata.entityMetadata),\n    );\n\n    if (joinColumn != null) {\n      return {\n        inverseJoinColumnOne: true,\n        inverseJoinColumnNullable: joinColumn.isNullable,\n        joinPropertyName: joinColumn.propertyName,\n        joinColumnName: joinColumn.databaseName,\n        isDuplicate: false,\n      };\n    }\n\n    const entityName = getEntityName(relationMetadata.entityMetadata);\n    const inverseRelationMetadata = relationMetadata.inverseEntityMetadata.oneToOneRelations.find(\n      (oneToOneRelation) => {\n        return getEntityName(oneToOneRelation.inverseEntityMetadata) === entityName;\n      },\n    );\n\n    if (inverseRelationMetadata == null) {\n      throw new Error(`Invalid joinColumn detected: ${relationMetadata.propertyName}`);\n    }\n\n    const inverseJoinColumn = inverseRelationMetadata.joinColumns.find(\n      (column) => getEntityName(column.entityMetadata) === getEntityName(inverseRelationMetadata.entityMetadata),\n    );\n\n    if (inverseJoinColumn == null) {\n      throw new Error(`Invalid joinColumn detected: ${relationMetadata.propertyName}`);\n    }\n\n    return {\n      inverseJoinColumnOne: true,\n      inverseJoinColumnNullable: inverseRelationMetadata.isNullable,\n      joinPropertyName: inverseJoinColumn.propertyName,\n      joinColumnName: inverseJoinColumn.databaseName,\n      isDuplicate: true,\n    };\n  }\n\n  if (relationMetadata.relationType === 'many-to-one') {\n    return { ...getManyToOneJoinColumn(relationMetadata), inverseJoinColumnOne: true, isDuplicate: false };\n  }\n\n  if (relationMetadata.relationType === 'one-to-many') {\n    const oneEntityName = getEntityName(relationMetadata.entityMetadata);\n\n    const manyToOneRelation = relationMetadata.inverseEntityMetadata.manyToOneRelations.find(\n      (manyToOneRelationMetadata) => {\n        const entityName = getEntityName(manyToOneRelationMetadata.inverseEntityMetadata);\n        return entityName === oneEntityName;\n      },\n    );\n\n    if (manyToOneRelation == null) {\n      throw new Error(`Cannot found relation on many-to-one side: ${relationMetadata.entityMetadata.name}`);\n    }\n\n    return { ...getManyToOneJoinColumn(manyToOneRelation), inverseJoinColumnOne: false, isDuplicate: true };\n  }\n\n  return getManyToManyJoinColumn(relationMetadata);\n}\n", "import { getEntityName } from '#/typeorm/entities/getEntityName';\nimport type { EntityMetadata } from 'typeorm';\nimport type { RelationMetadata } from 'typeorm/metadata/RelationMetadata';\n\nexport function getManyToManyEntityMetadata(\n  entityMetadatas: EntityMetadata[],\n  relationMetadata: Pick<RelationMetadata, 'entityMetadata' | 'joinTableName' | 'inverseEntityMetadata'>,\n) {\n  const entityName = getEntityName(relationMetadata.entityMetadata);\n  const { joinTableName } = relationMetadata;\n  const joinEntityMetadata = entityMetadatas.find((entityMetadata) => entityMetadata.name === joinTableName);\n\n  if (joinEntityMetadata != null) {\n    return joinEntityMetadata;\n  }\n\n  const manyToManyRelation = relationMetadata.inverseEntityMetadata.manyToManyRelations.find(\n    (manyToOneRelationMetadata) => {\n      const inverseEntityName = getEntityName(manyToOneRelationMetadata.inverseEntityMetadata);\n      return inverseEntityName === entityName;\n    },\n  );\n\n  if (manyToManyRelation == null) {\n    throw new Error('many-to-many relations need JoinTable more than one!');\n  }\n\n  const inverseJoinTableName = manyToManyRelation.joinTableName;\n  const inverseJoinEntityMetadata = entityMetadatas.find(\n    (entityMetadata) => entityMetadata.name === inverseJoinTableName,\n  );\n\n  if (inverseJoinEntityMetadata == null) {\n    throw new Error(`[many-to-many] cannot found entity: ${inverseJoinTableName}`);\n  }\n\n  return inverseJoinEntityMetadata;\n}\n", "import { getRelationHash } from '#/common/getRelationHash';\nimport type { IReason } from '#/creators/interfaces/IReason';\nimport { CE_CHANGE_KIND } from '#/databases/const-enum/CE_CHANGE_KIND';\nimport type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport type { IRelationRecord } from '#/databases/interfaces/IRelationRecord';\nimport { getEntityName } from '#/typeorm/entities/getEntityName';\nimport { getEntityPropertyName } from '#/typeorm/entities/getEntityPropertyName';\nimport { getJoinColumn } from '#/typeorm/relations/getJoinColumn';\nimport { getManyToManyEntityMetadata } from '#/typeorm/relations/getManyToManyEntityMetadata';\nimport consola from 'consola';\nimport { isError } from 'my-easy-fp';\nimport { fail, pass, type PassFailEither } from 'my-only-either';\nimport type { EntityMetadata } from 'typeorm';\nimport type { RelationMetadata } from 'typeorm/metadata/RelationMetadata';\n\nexport function getRelationRecord(\n  entityMetadatas: EntityMetadata[],\n  relationMetadata: RelationMetadata,\n  metadata: IRecordMetadata,\n): PassFailEither<IReason, IRelationRecord[]> {\n  try {\n    const entityDBName = getEntityName(relationMetadata.entityMetadata);\n    const entityPropertyName = getEntityPropertyName(relationMetadata.entityMetadata);\n    const inverseEntityDBName = getEntityName(relationMetadata.inverseEntityMetadata);\n    const inverseEntityPropertyName = getEntityPropertyName(relationMetadata.inverseEntityMetadata);\n    const { relationType } = relationMetadata;\n    const { joinColumnName, joinPropertyName, inverseJoinColumnOne, inverseJoinColumnNullable, isDuplicate } =\n      getJoinColumn(relationMetadata);\n    const joinColumnOne = relationType === 'one-to-many' || relationType === 'one-to-one';\n    const relationHash = getRelationHash({\n      entity: entityDBName,\n      inverseEntityName: inverseEntityDBName,\n      relationType: relationMetadata.relationType,\n    });\n\n    // \uC791\uC5C5\uD558\uBA74\uC11C \uC54C\uAC8C\uB41C \uB0B4\uC6A9\uC778\uB370, relation \uAD00\uACC4\uC5D0\uC11C isNullable\uC740 \uAE30\uBCF8 \uAC12\uC774 true \uC774\uB2E4\n    // \uADF8\uB798\uC11C false\uB97C \uC6D0\uD558\uBA74 \uBCC4\uB3C4\uB85C nullable: false \uC73C\uB85C \uC804\uB2EC\uD574\uC57C \uD55C\uB2E4\n    // example \uB514\uB809\uD130\uB9AC \uC544\uB798 License.ts \uD30C\uC77C \uCC38\uACE0\n    //\n    // nullable option in relation(eg> ManyToOne, OneToMany, etc) have false to default\n    // see license.ts file in example directory\n    const joinColumnNullable = relationMetadata.isNullable;\n\n    consola.debug(`relation: [${relationMetadata.relationType}] ${entityDBName} -> ${inverseEntityDBName}`);\n\n    if (relationType === 'many-to-many') {\n      // \uC774\uAC70 foreign-key\uB85C \uC5F0\uACB0\uB41C\uB2E4, \uC774\uAC78 \uB044\uB294 \uBC29\uBC95\uC744 \uCC3E\uC544\uBD10\uC57C\uACA0\uB2E4\n      const joinEntityMetadata = getManyToManyEntityMetadata(entityMetadatas, relationMetadata);\n      const joinEntityName = getEntityName(joinEntityMetadata);\n      const joinEntityPropertyName = getEntityPropertyName(joinEntityMetadata);\n      const order = [entityDBName, inverseEntityDBName].sort().indexOf(entityDBName) + 1;\n\n      const relationRecord: IRelationRecord = {\n        ...metadata,\n        $kind: 'relation',\n        entity: entityDBName,\n        name: entityPropertyName,\n        dbName: entityDBName,\n        change: CE_CHANGE_KIND.ADD,\n        inverseEntityName: inverseEntityPropertyName,\n        inverseEntityDBName,\n        joinColumnName,\n        joinPropertyName,\n        relationHash,\n        joinColumnOne,\n        joinColumnNullable,\n        inverseJoinColumnNullable,\n        inverseJoinColumnOne,\n        relationType,\n        order,\n        isDuplicate,\n      };\n\n      const manyToManyRelationEntityRecord: IRelationRecord = {\n        ...metadata,\n        $kind: 'relation',\n        entity: joinEntityName,\n        name: joinEntityPropertyName,\n        dbName: joinEntityName,\n        change: CE_CHANGE_KIND.ADD,\n        inverseEntityName: entityPropertyName,\n        inverseEntityDBName: entityDBName,\n        joinPropertyName,\n        joinColumnName,\n        joinColumnOne: false,\n        joinColumnNullable: false,\n        inverseJoinColumnOne: true,\n        inverseJoinColumnNullable: false,\n        relationType: 'many-to-one',\n        relationHash: getRelationHash({\n          entity: joinEntityName,\n          inverseEntityName: joinEntityName,\n          relationType: 'many-to-one',\n        }),\n        isDuplicate: false,\n        order: [joinEntityName, entityDBName].sort().indexOf(joinEntityName) + 1,\n      };\n\n      return pass([relationRecord, manyToManyRelationEntityRecord]);\n    }\n\n    return pass([\n      {\n        ...metadata,\n        $kind: 'relation',\n        entity: entityDBName,\n        name: entityPropertyName,\n        dbName: entityDBName,\n        change: CE_CHANGE_KIND.ADD,\n        inverseEntityName: inverseEntityPropertyName,\n        inverseEntityDBName,\n        joinColumnName,\n        joinPropertyName,\n        relationHash,\n        joinColumnOne,\n        joinColumnNullable,\n        inverseJoinColumnNullable,\n        inverseJoinColumnOne,\n        relationType,\n        isDuplicate,\n        order: [entityDBName, inverseEntityDBName].sort().indexOf(entityDBName) + 1,\n      } satisfies IRelationRecord,\n    ]);\n  } catch (caught) {\n    const err = isError(caught, new Error('unknown error raised from getRelationData'));\n\n    const reason: IReason = {\n      columnName: 'N/A',\n      entityName: getEntityName(relationMetadata.entityMetadata),\n      message: `${getEntityName(relationMetadata.entityMetadata)}: ${err.message}`,\n    };\n\n    return fail(reason);\n  }\n}\n", "import type { IRecordMetadata } from '#/databases/interfaces/IRecordMetadata';\nimport { getEntityName } from '#/typeorm/entities/getEntityName';\nimport { getRelationRecord } from '#/typeorm/relations/getRelationRecord';\nimport consola from 'consola';\nimport type { DataSource } from 'typeorm';\n\nexport function getRelationRecords(\n  dataSource: DataSource,\n  metadata: IRecordMetadata,\n): ReturnType<typeof getRelationRecord>[] {\n  const relationRecords = dataSource.entityMetadatas\n    .map((entityMetadata) => {\n      consola.debug(`Entity: ${getEntityName(entityMetadata)}, Length: ${entityMetadata.relations.length}`);\n\n      return entityMetadata.relations.map((relation) =>\n        getRelationRecord(dataSource.entityMetadatas, relation, metadata),\n      );\n    })\n    .flat();\n\n  return relationRecords;\n}\n", "import { getDatabaseName } from '#/common/getDatabaseName';\nimport { getMetadata } from '#/common/getMetadata';\nimport { CE_MERMAID_THEME } from '#/configs/const-enum/CE_MERMAID_THEME';\nimport { CE_OUTPUT_FORMAT } from '#/configs/const-enum/CE_OUTPUT_FORMAT';\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { createHtml } from '#/creators/createHtml';\nimport { createImageHtml } from '#/creators/createImageHtml';\nimport { createMarkdown } from '#/creators/createMarkdown';\nimport { createPdfHtml } from '#/creators/createPdfHtml';\nimport { getRenderData } from '#/creators/getRenderData';\nimport type { IReason } from '#/creators/interfaces/IReason';\nimport { writeToImage } from '#/creators/writeToImage';\nimport { writeToPdf } from '#/creators/writeToPdf';\nimport { compareDatabase } from '#/databases/compareDatabase';\nimport { flushDatabase } from '#/databases/flushDatabase';\nimport type { IRelationRecord } from '#/databases/interfaces/IRelationRecord';\nimport { openDatabase } from '#/databases/openDatabase';\nimport { processDatabase } from '#/databases/processDatabase';\nimport { container } from '#/modules/containers/container';\nimport { SymbolDataSource } from '#/modules/containers/keys/SymbolDataSource';\nimport { SymbolDefaultTemplate } from '#/modules/containers/keys/SymbolDefaultTemplate';\nimport { SymbolLogger } from '#/modules/containers/keys/SymbolLogger';\nimport { SymbolTemplate } from '#/modules/containers/keys/SymbolTemplate';\nimport { SymbolTemplateRenderer } from '#/modules/containers/keys/SymbolTemplateRenderer';\nimport { betterMkdir } from '#/modules/files/betterMkdir';\nimport type { Logger } from '#/modules/loggers/Logger';\nimport { createLogger } from '#/modules/loggers/createLogger';\nimport { TemplateRenderer } from '#/templates/TemplateRenderer';\nimport { loadTemplates } from '#/templates/modules/loadTemplates';\nimport { getColumnRecord } from '#/typeorm/columns/getColumnRecord';\nimport { getEntityRecords } from '#/typeorm/entities/getEntityRecords';\nimport { getDataSource } from '#/typeorm/getDataSource';\nimport { getIndexRecords } from '#/typeorm/indices/getIndexRecords';\nimport { dedupeManyToManyRelationRecord } from '#/typeorm/relations/dedupeManyToManyRelationRecord';\nimport { getRelationRecords } from '#/typeorm/relations/getRelationRecords';\nimport { asValue } from 'awilix';\nimport chalk from 'chalk';\nimport fastSafeStringify from 'fast-safe-stringify';\nimport { isError, isFalse } from 'my-easy-fp';\nimport { isFail, isPass, type IFail, type IPass } from 'my-only-either';\nimport fs from 'node:fs';\nimport type { SetOptional } from 'type-fest';\nimport type { DataSource } from 'typeorm';\n\nexport async function building(option: SetOptional<IBuildCommandOption, 'config'>, logging?: boolean) {\n  createLogger(logging);\n  const logger = container.resolve<Logger>(SymbolLogger);\n\n  try {\n    logger.info(`connection initialize: \"${chalk.yellowBright(`${option.dataSourcePath}`)}\"`);\n\n    const dataSource = await getDataSource(option);\n    const [templates] = await Promise.all([await loadTemplates(option), await dataSource.initialize()]);\n    const renderer = new TemplateRenderer(templates.template, templates.default);\n\n    if (isFalse(dataSource.isInitialized)) {\n      throw new Error(`Cannot initialize in ${fastSafeStringify(dataSource.options, undefined, 2)}`);\n    }\n\n    container.register(SymbolDefaultTemplate, asValue(templates.default));\n    container.register(SymbolTemplate, asValue(templates.template));\n    container.register(SymbolDataSource, asValue(dataSource));\n    container.register(SymbolTemplateRenderer, asValue(renderer));\n\n    const metadata = await getMetadata(option);\n\n    logger.success('connection initialized');\n    logger.info(`version: ${metadata.version}`);\n\n    logger.info(`extract entities in ${getDatabaseName(dataSource.options)}`);\n\n    const entities = getEntityRecords(dataSource, metadata);\n    const indicesRecords = getIndexRecords(dataSource, metadata);\n    const columns = dataSource.entityMetadatas\n      .map((entity) => entity.columns.map((column) => getColumnRecord(column, option, metadata, indicesRecords)))\n      .flat();\n\n    const relationRecords = getRelationRecords(dataSource, metadata);\n\n    const failRelations = relationRecords\n      .filter((relationRecord): relationRecord is IFail<IReason> => isFail(relationRecord))\n      .map((relationRecord) => relationRecord.fail)\n      .flat();\n\n    failRelations.forEach((relation) => logger.warn(relation.message));\n\n    const passRelations = relationRecords\n      .filter((relation): relation is IPass<IRelationRecord[]> => isPass(relation))\n      .map((relationRecord) => relationRecord.pass)\n      .flat();\n\n    const dedupedRelations = dedupeManyToManyRelationRecord(passRelations);\n    const records = [...entities, ...columns, ...dedupedRelations, ...indicesRecords];\n\n    logger.success('complete extraction');\n    logger.info('Database open and processing');\n\n    const db = await openDatabase(option);\n    const processedDb = await processDatabase(metadata, db, option);\n    const compared = compareDatabase(metadata, records, processedDb.prev);\n\n    const nextDb = [...compared, ...processedDb.next];\n    const renderData = await getRenderData(nextDb, metadata, option);\n\n    await flushDatabase(option, nextDb);\n    logger.success('Database open and processing completed');\n\n    logger.info(`output format: ${option.format}`);\n\n    if (option.format === CE_OUTPUT_FORMAT.HTML) {\n      const imageOption: SetOptional<IBuildCommandOption, 'config'> = {\n        ...option,\n        format: CE_OUTPUT_FORMAT.IMAGE,\n        imageFormat: 'svg',\n        width: '200%',\n        theme: CE_MERMAID_THEME.DARK,\n      };\n\n      const documents = await createHtml(option, renderData);\n      await Promise.all(\n        documents.map(async (document) => {\n          await betterMkdir(document.dirname);\n          await fs.promises.writeFile(document.filename, document.content);\n        }),\n      );\n\n      if (!option.skipImageInHtml) {\n        const imageDocument = await createImageHtml(imageOption, renderData);\n        await writeToImage(imageDocument, imageOption, renderData);\n      }\n\n      return documents.map((document) => document.filename);\n    }\n\n    if (option.format === CE_OUTPUT_FORMAT.MARKDOWN) {\n      const document = await createMarkdown(option, renderData);\n      await betterMkdir(document.dirname);\n      await fs.promises.writeFile(document.filename, document.content);\n      return [document.filename];\n    }\n\n    if (option.format === CE_OUTPUT_FORMAT.PDF) {\n      const document = await createPdfHtml(option, renderData);\n      const filenames = await writeToPdf(document, option, renderData);\n      return filenames;\n    }\n\n    if (option.format === CE_OUTPUT_FORMAT.IMAGE) {\n      const document = await createImageHtml(option, renderData);\n      await betterMkdir(document.dirname);\n      const filenames = await writeToImage(document, option, renderData);\n      return filenames;\n    }\n\n    return [];\n  } catch (caught) {\n    const err = isError(caught, new Error('unknown error raised from createHtmlDocCommand'));\n    logger.error(err);\n\n    return [];\n  } finally {\n    if (container.hasRegistration(SymbolDataSource)) {\n      const dataSource = container.resolve<DataSource>(SymbolDataSource);\n      await dataSource.destroy();\n    }\n  }\n}\n", "import type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { building } from '#/modules/commands/building';\nimport { container } from '#/modules/containers/container';\nimport { SymbolLogger } from '#/modules/containers/keys/SymbolLogger';\nimport type { Logger } from '#/modules/loggers/Logger';\nimport { showLogo } from '@maeum/cli-logo';\nimport { LogLevels } from 'consola';\n\nexport async function buildDocumentCommandHandler(option: IBuildCommandOption) {\n  const logger = container.resolve<Logger>(SymbolLogger);\n\n  logger.level = LogLevels.info;\n  logger.enable = true;\n\n  if (option.showLogo != null) {\n    await showLogo({\n      message: 'erdia',\n      figlet: { font: 'ANSI Shadow', width: 80 },\n      color: 'cyan',\n    });\n  } else {\n    logger.info('erdia build start');\n  }\n\n  await building(option);\n}\n", "import { getMetadata } from '#/common/getMetadata';\nimport { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport type { ICommonOption } from '#/configs/interfaces/ICommonOption';\nimport { getCwd } from '#/configs/modules/getCwd';\nimport { container } from '#/modules/containers/container';\nimport { SymbolDataSource } from '#/modules/containers/keys/SymbolDataSource';\nimport { getOutputDirPath } from '#/modules/files/getOutputDirPath';\nimport { getDataSource } from '#/typeorm/getDataSource';\nimport { showLogo } from '@maeum/cli-logo';\nimport { asValue } from 'awilix';\nimport consola from 'consola';\nimport del from 'del';\nimport fastSafeStringify from 'fast-safe-stringify';\nimport { isError, isFalse } from 'my-easy-fp';\nimport pathe from 'pathe';\nimport type { DataSource } from 'typeorm';\n\nexport async function cleaning(option: ICommonOption) {\n  try {\n    if (option.showLogo != null) {\n      await showLogo({\n        message: 'erdia',\n        figlet: { font: 'ANSI Shadow', width: 80 },\n        color: 'cyan',\n      });\n    } else {\n      consola.info('erdia build start');\n    }\n\n    const dataSource = await getDataSource(option);\n    await dataSource.initialize();\n\n    if (isFalse(dataSource.isInitialized)) {\n      throw new Error(`Cannot initialize in ${fastSafeStringify(dataSource.options, undefined, 2)}`);\n    }\n\n    container.register(SymbolDataSource, asValue(dataSource));\n\n    const metadata = await getMetadata({ ...option, versionFrom: 'package.json', projectName: 'app' });\n    const outputDirPath = await getOutputDirPath(option, getCwd(process.env));\n\n    const filenames = [\n      pathe.join(outputDirPath, CE_DEFAULT_VALUE.HTML_MERMAID_FILENAME),\n      pathe.join(outputDirPath, CE_DEFAULT_VALUE.HTML_INDEX_FILENAME),\n      pathe.join(outputDirPath, `${metadata.name}.md`),\n      pathe.join(outputDirPath, `${metadata.name}.png`),\n      pathe.join(outputDirPath, `${metadata.name}.svg`),\n    ];\n\n    await del(filenames);\n\n    return filenames;\n  } catch (caught) {\n    const err = isError(caught, new Error('unknown error raised from createHtmlDocCommand'));\n    consola.error(err);\n\n    return [];\n  } finally {\n    if (container.hasRegistration(SymbolDataSource)) {\n      const dataSource = container.resolve<DataSource>(SymbolDataSource);\n      await dataSource.destroy();\n    }\n  }\n}\n", "import type { ICommonOption } from '#/configs/interfaces/ICommonOption';\nimport { cleaning } from '#/modules/commands/cleaning';\nimport { container } from '#/modules/containers/container';\nimport { SymbolLogger } from '#/modules/containers/keys/SymbolLogger';\nimport type { Logger } from '#/modules/loggers/Logger';\nimport { showLogo } from '@maeum/cli-logo';\nimport consola, { LogLevels } from 'consola';\n\nexport async function cleanDocumentCommandHandler(option: ICommonOption) {\n  const logger = container.resolve<Logger>(SymbolLogger);\n\n  logger.level = LogLevels.info;\n  logger.enable = true;\n\n  if (option.showLogo != null) {\n    await showLogo({\n      message: 'erdia',\n      figlet: { font: 'ANSI Shadow', width: 80 },\n      color: 'cyan',\n    });\n  } else {\n    consola.info('erdia build start');\n  }\n\n  await cleaning(option);\n}\n", "/**\n * ER diagram export image file format\n *\n * @format image\n *\n * - svg: svg image format\n * - png: png image format\n * */\nexport const CE_IMAGE_FORMAT = {\n  SVG: 'svg',\n  PNG: 'png',\n} as const;\n\nexport type CE_IMAGE_FORMAT = (typeof CE_IMAGE_FORMAT)[keyof typeof CE_IMAGE_FORMAT];\n", "import type Fuse from 'fuse.js';\nimport { bignumber } from 'mathjs';\n\nexport function getAutoCompleteSource(fuse: Fuse<string>, limit: number) {\n  return (_answersSoFar: unknown, input: string | undefined) => {\n    const safeInput = input === undefined || input === null ? '' : input;\n\n    return fuse\n      .search(safeInput)\n      .map((matched) => {\n        return {\n          ...matched,\n          oneBased: bignumber(1)\n            .sub(bignumber(matched.score ?? 0))\n            .mul(100)\n            .floor()\n            .div(100)\n            .toNumber(),\n          percent: bignumber(1)\n            .sub(bignumber(matched.score ?? 0))\n            .mul(10000)\n            .floor()\n            .div(100)\n            .toNumber(),\n        };\n      })\n      .filter((matched) => matched.percent > limit)\n      .sort((l, r) => r.percent - l.percent)\n      .map((matched) => matched.item);\n  };\n}\n", "import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport type { IDocumentOption } from '#/configs/interfaces/IDocumentOption';\nimport { betterMkdir } from '#/modules/files/betterMkdir';\nimport { isFalse } from 'my-easy-fp';\nimport { exists, getDirname, isDirectory } from 'my-node-fp';\nimport pathe from 'pathe';\n\nexport async function getTemplateDirPath(option: Pick<IDocumentOption, 'templatePath'>, cwd: string) {\n  const templateDirPath = pathe.join(option.templatePath ?? pathe.join(cwd, CE_DEFAULT_VALUE.TEMPLATES_PATH));\n  const resolvedTemplateDirPath = pathe.resolve(templateDirPath);\n\n  if (isFalse(await exists(resolvedTemplateDirPath))) {\n    await betterMkdir(pathe.join(resolvedTemplateDirPath));\n    return resolvedTemplateDirPath;\n  }\n\n  if (isFalse(await isDirectory(templateDirPath))) {\n    return pathe.resolve(await getDirname(templateDirPath));\n  }\n\n  return pathe.resolve(templateDirPath);\n}\n", "import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport type { ICommonOption } from '#/configs/interfaces/ICommonOption';\nimport type { IDocumentOption } from '#/configs/interfaces/IDocumentOption';\nimport { getCwd } from '#/configs/modules/getCwd';\nimport { container } from '#/modules/containers/container';\nimport { SymbolLogger } from '#/modules/containers/keys/SymbolLogger';\nimport { betterMkdir } from '#/modules/files/betterMkdir';\nimport { getGlobFiles } from '#/modules/files/getGlobFiles';\nimport { getTemplateDirPath } from '#/modules/files/getTemplateDirPath';\nimport type { Logger } from '#/modules/loggers/Logger';\nimport { createLogger } from '#/modules/loggers/createLogger';\nimport { defaultExclude } from '#/modules/scopes/defaultExclude';\nimport { getTemplateModulePath } from '#/templates/modules/getTemplateModulePath';\nimport { Glob } from 'glob';\nimport { isError } from 'my-easy-fp';\nimport { getDirname, startSepRemove } from 'my-node-fp';\nimport fs from 'node:fs';\nimport pathe from 'pathe';\n\nexport async function ejecting(\n  option: Pick<ICommonOption & IDocumentOption, 'showLogo' | 'templatePath'>,\n  logging?: boolean,\n) {\n  createLogger(logging);\n  const logger = container.resolve<Logger>(SymbolLogger);\n\n  try {\n    const templateDirPath = await getTemplateDirPath(option, getCwd(process.env));\n    const originTemplateDirPath = await getTemplateModulePath(CE_DEFAULT_VALUE.TEMPLATES_PATH);\n    const targetTemplateDirPath =\n      option.templatePath == null ? pathe.join(templateDirPath, CE_DEFAULT_VALUE.TEMPLATES_PATH) : templateDirPath;\n\n    logger.info('Template directory: ', targetTemplateDirPath);\n\n    const originTemplateGlobPaths = new Glob(pathe.join(originTemplateDirPath, `**`, '*.eta'), {\n      absolute: true,\n      ignore: [...defaultExclude, 'config/**'],\n      cwd: originTemplateDirPath,\n      windowsPathsNoEscape: true,\n    });\n    const originTemplateFilePaths = getGlobFiles(originTemplateGlobPaths);\n\n    await Promise.all(\n      originTemplateFilePaths.map(async (originTemplateFilePath) => {\n        const subDirPath = await getDirname(originTemplateFilePath);\n        const subFilePath = startSepRemove(originTemplateFilePath.replace(subDirPath, ''));\n        const targetTemplateSubDirPath = pathe.join(\n          targetTemplateDirPath,\n          startSepRemove(subDirPath.replace(originTemplateDirPath, '')),\n        );\n\n        await betterMkdir(targetTemplateSubDirPath);\n\n        const templateFileBuf = await fs.promises.readFile(originTemplateFilePath);\n        await fs.promises.writeFile(pathe.join(targetTemplateSubDirPath, subFilePath), templateFileBuf);\n      }),\n    );\n\n    logger.success('eject success: ', targetTemplateDirPath);\n\n    return targetTemplateDirPath;\n  } catch (caught) {\n    const err = isError(caught, new Error('unknown error raised from createHtmlDocCommand'));\n    logger.error(err);\n\n    return undefined;\n  }\n}\n", "import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport { CE_ENTITY_VERSION_FROM } from '#/configs/const-enum/CE_ENTITY_VERSION_FROM';\nimport { CE_IMAGE_FORMAT } from '#/configs/const-enum/CE_IMAGE_FORMAT';\nimport { CE_MERMAID_THEME } from '#/configs/const-enum/CE_MERMAID_THEME';\nimport { CE_OUTPUT_COMPONENT } from '#/configs/const-enum/CE_OUTPUT_COMPONENT';\nimport { CE_OUTPUT_FORMAT } from '#/configs/const-enum/CE_OUTPUT_FORMAT';\nimport type { IInitDocAnswer } from '#/configs/interfaces/InquirerAnswer';\nimport { getAutoCompleteSource } from '#/configs/modules/getAutoCompleteSource';\nimport { getCwd } from '#/configs/modules/getCwd';\nimport { ejecting } from '#/modules/commands/ejecting';\nimport { container } from '#/modules/containers/container';\nimport { SymbolTemplateRenderer } from '#/modules/containers/keys/SymbolTemplateRenderer';\nimport { getGlobFiles } from '#/modules/files/getGlobFiles';\nimport { defaultExclude } from '#/modules/scopes/defaultExclude';\nimport type { TemplateRenderer } from '#/templates/TemplateRenderer';\nimport { CE_TEMPLATE_NAME } from '#/templates/cosnt-enum/CE_TEMPLATE_NAME';\nimport Fuse from 'fuse.js';\nimport { Glob } from 'glob';\nimport inquirer from 'inquirer';\nimport inquirerPrompt from 'inquirer-autocomplete-prompt';\nimport pathe from 'pathe';\n\nexport async function getConfigContent() {\n  /**\n   * html     - er, table\n   *          - er\n   *          - table\n   * markdown - er, table\n   *          - er\n   *          - table\n   * pdf      - er, table\n   *          - er\n   *          - table\n   * image    - svg\n   *          - png\n   */\n\n  const sourceGlobFiles = new Glob(['**/*.js', '**/*.cjs', '**/*.mjs', '**/*.ts', '**/*.cts', '**/*.mts'], {\n    // absolute: true,\n    ignore: defaultExclude,\n    cwd: process.cwd(),\n    onlyFiles: true,\n  });\n  const sourceFiles = getGlobFiles(sourceGlobFiles);\n\n  const everyGlobFiles = new Glob(['**/*'], {\n    // absolute: true,\n    ignore: defaultExclude,\n    cwd: process.cwd(),\n    dot: true,\n    onlyFiles: true,\n  });\n  const everyFiles = getGlobFiles(everyGlobFiles);\n\n  const directoryGlobDirPaths = new Glob(['**/*'], {\n    // absolute: true,\n    ignore: defaultExclude,\n    cwd: process.cwd(),\n    dot: true,\n    onlyDirectories: true,\n  });\n  const directories = getGlobFiles(directoryGlobDirPaths);\n\n  const sourceFilesFuse = new Fuse(sourceFiles, { includeScore: true });\n  const everyFilesFuse = new Fuse(everyFiles, { includeScore: true });\n  const directoriesFuse = new Fuse(directories, { includeScore: true });\n\n  inquirer.registerPrompt('autocomplete', inquirerPrompt);\n\n  const answer = await inquirer.prompt<IInitDocAnswer>([\n    {\n      type: 'autocomplete',\n      name: 'dataSourceFile',\n      message: 'Select a dataSource file: ',\n      source: getAutoCompleteSource(sourceFilesFuse, CE_DEFAULT_VALUE.DATA_SOURCE_FILE_FUZZY_SCORE_LIMIT),\n    },\n    {\n      type: 'autocomplete',\n      name: 'output',\n      message: 'Select directory for output files: ',\n      source: getAutoCompleteSource(directoriesFuse, CE_DEFAULT_VALUE.OUTPUT_DIRECTORY_FUZZY_SCORE_LIMIT),\n    },\n    {\n      type: 'list',\n      name: 'projectName',\n      message: 'Select output type: ',\n      choices: [\n        { name: 'database: document name came from database name', value: 'db' },\n        { name: 'application: document name came from name in package.json', value: 'app' },\n      ],\n    },\n    {\n      type: 'list',\n      name: 'isEjectTemplate',\n      message: 'Want to eject template? ',\n      choices: [\n        { name: 'use custom template: eject template', value: true },\n        { name: 'use default template: not eject template', value: false },\n      ],\n    },\n    {\n      type: 'list',\n      name: 'format',\n      message: 'Select output type: ',\n      default: CE_OUTPUT_FORMAT.HTML,\n      choices: [\n        { name: 'html', value: CE_OUTPUT_FORMAT.HTML },\n        { name: 'markdown', value: CE_OUTPUT_FORMAT.MARKDOWN },\n        { name: 'pdf', value: CE_OUTPUT_FORMAT.PDF },\n        { name: 'image', value: CE_OUTPUT_FORMAT.IMAGE },\n      ],\n    },\n    {\n      type: 'list',\n      name: 'isSelectDatabasePath',\n      message: 'Want to select the entity database file path?',\n      default: false,\n      choices: [\n        { name: 'yes', value: true },\n        { name: 'no', value: false },\n      ],\n    },\n    {\n      type: 'autocomplete',\n      name: 'databasePath',\n      message: 'Select the entity database file path: ',\n      source: getAutoCompleteSource(directoriesFuse, CE_DEFAULT_VALUE.OUTPUT_DIRECTORY_FUZZY_SCORE_LIMIT),\n      when: (answerForWhen: IInitDocAnswer) => {\n        return answerForWhen.isSelectDatabasePath;\n      },\n    },\n    {\n      type: 'list',\n      name: 'isEnterRouteBasePath',\n      message: 'Want to enter route base path for html document? ',\n      default: false,\n      choices: [\n        { name: 'enter rotue base path', value: true },\n        { name: 'skip', value: false },\n      ],\n      when: (answerForWhen: IInitDocAnswer) => {\n        return answerForWhen.format === CE_OUTPUT_FORMAT.HTML;\n      },\n    },\n    {\n      type: 'input',\n      name: 'routeBasePath',\n      message: 'Enter your route base path: ',\n      when: (answerForWhen: IInitDocAnswer) => {\n        return answerForWhen.format === CE_OUTPUT_FORMAT.HTML && answerForWhen.isEnterRouteBasePath;\n      },\n    },\n    {\n      type: 'list',\n      name: 'versionFrom',\n      message: 'Select version extract style: ',\n      choices: [\n        { name: 'extract from package.json', value: CE_ENTITY_VERSION_FROM.PACKAGE_JSON },\n        { name: 'extract from file(need version file selection)', value: CE_ENTITY_VERSION_FROM.FILE },\n        { name: 'use timestamp(all stored different version)', value: CE_ENTITY_VERSION_FROM.TIMESTAMP },\n      ],\n      when: (answerForWhen: IInitDocAnswer) => {\n        return answerForWhen.format !== CE_OUTPUT_FORMAT.IMAGE;\n      },\n    },\n    {\n      type: 'autocomplete',\n      name: 'versionPath',\n      message: 'Select the version file path: ',\n      source: getAutoCompleteSource(everyFilesFuse, CE_DEFAULT_VALUE.OUTPUT_DIRECTORY_FUZZY_SCORE_LIMIT),\n      when: (answerForWhen: IInitDocAnswer) => {\n        return answerForWhen.versionFrom === CE_ENTITY_VERSION_FROM.FILE;\n      },\n    },\n    {\n      type: 'list',\n      name: 'theme',\n      message: 'Select mermaid theme: ',\n      choices: [\n        { name: 'default', value: CE_MERMAID_THEME.DEFAULT },\n        { name: 'forest', value: CE_MERMAID_THEME.FOREST },\n        { name: 'dark', value: CE_MERMAID_THEME.DARK },\n        { name: 'neutral', value: CE_MERMAID_THEME.NEUTRAL },\n        { name: 'null', value: CE_MERMAID_THEME.NULL },\n      ],\n    },\n    {\n      type: 'checkbox',\n      name: 'components',\n      message: 'Check component in document: ',\n      choices: [\n        ...[CE_OUTPUT_COMPONENT.TABLE, CE_OUTPUT_COMPONENT.ER].map((component) =>\n          component === CE_OUTPUT_COMPONENT.ER\n            ? { name: 'ER diagram', value: 'er', checked: true }\n            : { name: 'Entity specification table', value: 'table', checked: true },\n        ),\n      ],\n      when: (answerForWhen: IInitDocAnswer) => {\n        return answerForWhen.format !== 'image';\n      },\n    },\n    {\n      type: 'list',\n      name: 'imageFormat',\n      message: 'Select image format: ',\n      choices: [\n        { name: 'svg', checked: CE_IMAGE_FORMAT.SVG },\n        { name: 'png', checked: CE_IMAGE_FORMAT.PNG },\n      ],\n      when: (answerForWhen: IInitDocAnswer) => {\n        return answerForWhen.format === 'image';\n      },\n    },\n  ]);\n\n  const templateDir = await (answer.isEjectTemplate\n    ? ejecting({ templatePath: pathe.join(getCwd(process.env), CE_DEFAULT_VALUE.TEMPLATES_PATH), showLogo: false })\n    : Promise.resolve(undefined));\n  const renderer = container.resolve<TemplateRenderer>(SymbolTemplateRenderer);\n  const file = await renderer.evaluate(CE_TEMPLATE_NAME.CONFIG_JSON, {\n    config: {\n      ...answer,\n      templatePath: templateDir != null ? pathe.relative(getCwd(process.env), templateDir) : templateDir,\n      versionFrom: answer.versionFrom != null ? answer.versionFrom : CE_ENTITY_VERSION_FROM.TIMESTAMP,\n      config: CE_DEFAULT_VALUE.CONFIG_FILE_NAME,\n    },\n  });\n\n  return file;\n}\n", "import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport { getConfigContent } from '#/configs/modules/getConfigContent';\nimport { applyPrettier } from '#/creators/applyPretter';\nimport { container } from '#/modules/containers/container';\nimport { SymbolLogger } from '#/modules/containers/keys/SymbolLogger';\nimport { SymbolTemplateRenderer } from '#/modules/containers/keys/SymbolTemplateRenderer';\nimport type { Logger } from '#/modules/loggers/Logger';\nimport { createLogger } from '#/modules/loggers/createLogger';\nimport { TemplateRenderer } from '#/templates/TemplateRenderer';\nimport { loadTemplates } from '#/templates/modules/loadTemplates';\nimport { asValue } from 'awilix';\nimport fs from 'fs';\nimport { isError } from 'my-easy-fp';\n\nexport async function initializing(logging?: boolean) {\n  createLogger(logging);\n  const logger = container.resolve<Logger>(SymbolLogger);\n\n  try {\n    const templates = await loadTemplates();\n    const renderer = new TemplateRenderer(templates.template, templates.default);\n\n    container.register(SymbolTemplateRenderer, asValue(renderer));\n\n    const rawConfig = await getConfigContent();\n    const prettiered = await applyPrettier(rawConfig, 'json');\n\n    await fs.promises.writeFile(CE_DEFAULT_VALUE.CONFIG_FILE_NAME, prettiered);\n    logger.info(`${CE_DEFAULT_VALUE.CONFIG_FILE_NAME} file created`);\n\n    return rawConfig;\n  } catch (caught) {\n    const err = isError(caught, new Error('unknown error raised from createHtmlDocCommand'));\n    logger.error(err);\n\n    return undefined;\n  }\n}\n", "import { initializing } from '#/modules/commands/initializing';\nimport { container } from '#/modules/containers/container';\nimport { SymbolLogger } from '#/modules/containers/keys/SymbolLogger';\nimport type { Logger } from '#/modules/loggers/Logger';\nimport { LogLevels } from 'consola';\n\nexport async function initConfigCommandHandler() {\n  const logger = container.resolve<Logger>(SymbolLogger);\n\n  logger.level = LogLevels.info;\n  logger.enable = true;\n\n  const configFilePath = await initializing();\n  return configFilePath;\n}\n", "import type { ICommonOption } from '#/configs/interfaces/ICommonOption';\nimport { ejecting } from '#/modules/commands/ejecting';\nimport { container } from '#/modules/containers/container';\nimport { SymbolLogger } from '#/modules/containers/keys/SymbolLogger';\nimport type { Logger } from '#/modules/loggers/Logger';\nimport { showLogo } from '@maeum/cli-logo';\nimport consola, { LogLevels } from 'consola';\n\nexport async function templateEjectCommandHandler(option: Pick<ICommonOption, 'output' | 'showLogo'>) {\n  const logger = container.resolve<Logger>(SymbolLogger);\n\n  logger.level = LogLevels.info;\n  logger.enable = true;\n\n  if (option.showLogo != null) {\n    await showLogo({\n      message: 'erdia',\n      figlet: { font: 'ANSI Shadow', width: 80 },\n      color: 'cyan',\n    });\n  } else {\n    consola.info('erdia build start');\n  }\n\n  const targetTemplateDirPath = await ejecting(option);\n  return targetTemplateDirPath;\n}\n", "export const CE_COMMAND_LIST = {\n  BUILD: 'build',\n  INIT: 'init',\n  CLEAN: 'clean',\n  EJECT: 'eject',\n\n  BUILD_ALIAS: 'b',\n  INIT_ALIAS: 'i',\n  CLEAN_ALIAS: 'c',\n  EJECT_ALIAS: 'e',\n} as const;\n\nexport type CE_COMMAND_LIST = (typeof CE_COMMAND_LIST)[keyof typeof CE_COMMAND_LIST];\n", "import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE';\nimport { getCwd } from '#/configs/modules/getCwd';\nimport * as findUp from 'find-up';\n\nexport function getConfigFilePath(argv: Record<string, unknown>) {\n  const configFilePathSearchResultOnCwd = findUp.sync(CE_DEFAULT_VALUE.CONFIG_FILE_NAME, { cwd: getCwd(process.env) });\n\n  const getConfigValue = () => {\n    if (typeof argv.c === 'string' && argv.c !== '') {\n      return argv.c;\n    }\n\n    if (typeof argv.config === 'string' && argv.config !== '') {\n      return argv.config;\n    }\n\n    return undefined;\n  };\n\n  return getConfigValue() ?? configFilePathSearchResultOnCwd;\n}\n", "import type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport { getConfigFilePath } from '#/configs/modules/getConfigFilePath';\nimport consola from 'consola';\nimport { parse } from 'jsonc-parser';\nimport minimist from 'minimist';\nimport * as fs from 'node:fs';\n\nexport function preLoadConfig() {\n  try {\n    const argv = minimist(process.argv.slice(2));\n    const configFilePath = getConfigFilePath(argv);\n\n    const readConfigFile = () => {\n      if (configFilePath != null) {\n        const buf = fs.readFileSync(configFilePath);\n        const parsed = parse(buf.toString()) as IBuildCommandOption;\n        return parsed;\n      }\n\n      return { 'data-source-path': undefined };\n    };\n\n    const config = readConfigFile();\n\n    return {\n      ...config,\n      c: configFilePath,\n      config: configFilePath,\n    };\n  } catch (caught) {\n    const err = caught instanceof Error ? caught : new Error('unknown error raised');\n\n    consola.error(err);\n    consola.error(err.stack);\n\n    return {};\n  }\n}\n", "import { buildOptionBuilder } from '#/cli/builders/buildOptionBuilder';\nimport { commonOptionBuilder } from '#/cli/builders/commonOptionBuilder';\nimport { documentOptionBuilder } from '#/cli/builders/documentOptionBuilder';\nimport { outputOptionBuilder } from '#/cli/builders/outputOptionBuilder';\nimport { buildDocumentCommandHandler } from '#/cli/commands/buildDocumentCommandHandler';\nimport { cleanDocumentCommandHandler } from '#/cli/commands/cleanDocumentCommandHandler';\nimport { initConfigCommandHandler } from '#/cli/commands/initConfigCommandHandler';\nimport { templateEjectCommandHandler } from '#/cli/commands/templateEjectCommandHandler';\nimport { CE_COMMAND_LIST } from '#/configs/const-enum/CE_COMMAND_LIST';\nimport type { IBuildCommandOption } from '#/configs/interfaces/IBuildCommandOption';\nimport type { ICommonOption } from '#/configs/interfaces/ICommonOption';\nimport { preLoadConfig } from '#/configs/modules/preLoadConfig';\nimport '#/modules/containers/container';\nimport { createLogger } from '#/modules/loggers/createLogger';\nimport consola from 'consola';\nimport { isError } from 'my-easy-fp';\nimport sourceMapSupport from 'source-map-support';\nimport yargs, { type CommandModule } from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nsourceMapSupport.install();\ncreateLogger();\n\nconst buildCmdModule: CommandModule<IBuildCommandOption, IBuildCommandOption> = {\n  command: CE_COMMAND_LIST.BUILD,\n  aliases: CE_COMMAND_LIST.BUILD_ALIAS,\n  describe: 'generate an entity specification document and ER diagram document',\n  builder: (argv) => {\n    const withCommonArgv = commonOptionBuilder<IBuildCommandOption>(argv);\n    const withDocumentArgv = documentOptionBuilder<IBuildCommandOption>(withCommonArgv);\n    const withBuildArgv = buildOptionBuilder<IBuildCommandOption>(withDocumentArgv);\n    return withBuildArgv;\n  },\n  handler: async (argv) => {\n    try {\n      await buildDocumentCommandHandler(argv);\n    } catch (caught) {\n      const err = isError(caught, new Error('unknown error raised'));\n      consola.error(err);\n    }\n  },\n};\n\nconst cleanCmdModule: CommandModule<ICommonOption, ICommonOption> = {\n  command: CE_COMMAND_LIST.CLEAN,\n  aliases: CE_COMMAND_LIST.CLEAN_ALIAS,\n  describe: 'clean generated document',\n  builder: (argv) => {\n    const withCommonArgv = commonOptionBuilder<ICommonOption>(argv);\n    return withCommonArgv;\n  },\n  handler: async (argv) => {\n    try {\n      await cleanDocumentCommandHandler(argv);\n    } catch (caught) {\n      const err = isError(caught, new Error('unknown error raised'));\n      consola.error(err);\n    }\n  },\n};\n\nconst initCmdModule: CommandModule<object, object> = {\n  command: CE_COMMAND_LIST.INIT,\n  aliases: CE_COMMAND_LIST.INIT_ALIAS,\n  describe: 'generate configuration file: `.erdiarc`',\n  handler: async () => {\n    try {\n      await initConfigCommandHandler();\n    } catch (caught) {\n      const err = isError(caught, new Error('unknown error raised'));\n      consola.error(err);\n    }\n  },\n};\n\nconst ejectCmdModule: CommandModule<Pick<ICommonOption, 'output'>, Pick<ICommonOption, 'output'>> = {\n  command: CE_COMMAND_LIST.EJECT,\n  aliases: CE_COMMAND_LIST.EJECT_ALIAS,\n  describe: 'eject document template files',\n  builder: (argv) => {\n    const withCommonArgv = outputOptionBuilder<Pick<ICommonOption, 'output'>>(argv);\n    return withCommonArgv;\n  },\n  handler: async (argv) => {\n    try {\n      await templateEjectCommandHandler(argv);\n    } catch (caught) {\n      const err = isError(caught, new Error('unknown error raised'));\n      consola.error(err);\n    }\n  },\n};\n\nconst parser = yargs(hideBin(process.argv));\n\nparser\n  .command(buildCmdModule as CommandModule<object, IBuildCommandOption>)\n  .command(cleanCmdModule as CommandModule<object, ICommonOption>)\n  .command(initCmdModule as CommandModule<object, ICommonOption>)\n  .command(ejectCmdModule as CommandModule<object, ICommonOption>)\n  .demandCommand()\n  .recommendCommands()\n  .config(preLoadConfig())\n  .help();\n\nconst handler = async () => {\n  await parser.argv;\n};\n\nhandler().catch((caught) => {\n  const err = isError(caught, new Error('unknown error raised'));\n  consola.error(err.message);\n  consola.error(err.stack);\n\n  process.exit(1);\n});\n"],
  "mappings": "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",
  "names": ["name", "semver", "findUp", "pathe", "fs", "import_my_easy_fp", "import_my_node_fp", "import_pathe", "pathe", "import_pathe", "filename", "pathe", "fs", "dayjs", "import_dayjs", "readPkg", "filenamify", "dayjs", "import_my_easy_fp", "consola", "import_consola", "import_pathe", "pathe", "consola", "import_my_node_fp", "import_pathe", "pathe", "import_pathe", "pathe", "import_my_node_fp", "import_node_crypto", "import_pathe", "pathe", "alasql", "import_fs", "import_jsonc_parser", "import_my_node_fp", "fs", "import_consola", "import_my_easy_fp", "import_node_fs", "import_pathe", "fs", "consola", "container", "del", "pathe", "import_consola", "import_del", "import_fs", "import_my_easy_fp", "import_pathe", "puppeteer", "consola", "fs", "pathe", "del", "import_my_easy_fp", "import_node_fs", "import_pathe", "pathe", "fs", "import_jsonc_parser", "import_my_easy_fp", "import_my_node_fp", "import_node_fs", "import_pathe", "pathe", "fs", "import_alasql", "import_compare_versions", "import_my_easy_fp", "alasql", "latestRecords", "import_consola", "consola", "import_awilix", "import_consola", "import_my_easy_fp", "consola", "import_my_node_fp", "import_pathe", "pathe", "import_my_node_fp", "import_pathe", "pathe", "import_pathe", "pathe", "import_my_easy_fp", "import_my_node_fp", "import_node_fs", "import_pathe", "fs", "pathe", "import_pathe", "pathe", "import_pathe", "pathe", "import_my_easy_fp", "import_alasql", "import_my_easy_fp", "alasql", "import_my_easy_fp", "name", "withNullable", "import_my_easy_fp", "import_my_easy_fp", "import_my_node_fp", "import_pathe", "pathe", "import_my_easy_fp", "firstNext", "import_my_easy_fp", "import_consola", "consola", "import_consola", "import_my_easy_fp", "consola", "import_consola", "consola", "import_awilix", "import_my_easy_fp", "import_my_only_either", "import_node_fs", "chalk", "fastSafeStringify", "fs", "import_consola", "import_cli_logo", "import_awilix", "import_consola", "import_del", "import_fast_safe_stringify", "import_my_easy_fp", "import_pathe", "consola", "fastSafeStringify", "pathe", "del", "import_cli_logo", "import_consola", "consola", "import_mathjs", "import_my_easy_fp", "import_my_node_fp", "import_pathe", "pathe", "import_glob", "import_my_easy_fp", "import_my_node_fp", "import_node_fs", "import_pathe", "pathe", "fs", "import_glob", "import_pathe", "Fuse", "inquirer", "inquirerPrompt", "pathe", "import_awilix", "import_fs", "import_my_easy_fp", "fs", "import_consola", "import_cli_logo", "import_consola", "consola", "findUp", "import_consola", "import_jsonc_parser", "fs", "minimist", "consola", "import_consola", "import_my_easy_fp", "sourceMapSupport", "consola", "yargs"]
}
