{
  "version": 3,
  "sources": ["../src/generator.ts", "../package.json", "../src/comment.ts", "../src/config.ts", "../src/parser.ts", "../src/statement-postgresql.ts", "../src/statement-mysql.ts", "../src/statement.ts"],
  "sourcesContent": ["#!/usr/bin/env node\n/**\n * This code is based on the following code by @Jyrno42\n * https://github.com/prisma/prisma/issues/8703#issuecomment-1614360386\n *\n * This is a workaround to have https://github.com/prisma/prisma/issues/8703 before it is implemented\n * in Prisma itself.\n */\n\nimport { generatorHandler, GeneratorOptions } from \"@prisma/generator-helper\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { version } from \"../package.json\";\nimport { Comments, createComments, diffComments } from \"./comment\";\nimport { readConfig } from \"./config\";\nimport { parse } from \"./parser\";\nimport { generateCommentStatements } from \"./statement\";\n\nconst generate = async (options: GeneratorOptions) => {\n  const { dmmf, schemaPath } = options;\n  const config = readConfig(options);\n\n  fs.mkdirSync(config.outputDir, { recursive: true });\n\n  const models = parse(dmmf.datamodel);\n  const currentComments = createComments(models, config);\n\n  // load latest\n  const latestFilePath = path.join(config.outputDir, \"comments-latest.json\");\n  let latestComments: Comments;\n  if (fs.existsSync(latestFilePath)) {\n    const json = fs.readFileSync(latestFilePath, \"utf-8\");\n    latestComments = JSON.parse(json);\n  } else {\n    latestComments = {};\n  }\n\n  const diff = diffComments(currentComments, latestComments);\n\n  const commentStatements = generateCommentStatements(diff, config.provider);\n\n  if (commentStatements.length === 0) {\n    console.log(\n      \"No changes detected, skipping creating a fresh comments migration...\",\n    );\n    return;\n  }\n\n  const migrationDirName = await outputMigrationFile(\n    path.dirname(schemaPath),\n    commentStatements,\n  );\n\n  // update latest\n  fs.writeFileSync(\n    latestFilePath,\n    JSON.stringify(currentComments, null, 2),\n    \"utf-8\",\n  );\n\n  console.log(`Comments generation completed: ${migrationDirName}`);\n};\n\nconst outputMigrationFile = async (\n  baseDirPath: string,\n  commentStatements: string[],\n) => {\n  const date = new Date();\n  date.setMilliseconds(0);\n\n  const dateStr = date\n    .toISOString()\n    .replace(/[:\\-TZ]/g, \"\")\n    .replace(\".000\", \"\");\n  const dirName = `${dateStr}_update_comments`;\n\n  const migrationDir = path.join(baseDirPath, \"migrations\", dirName);\n  fs.mkdirSync(migrationDir, { recursive: true });\n  fs.writeFileSync(\n    path.join(migrationDir, \"migration.sql\"),\n    `-- Prisma Database Comments Generator v${version}\\n\\n` +\n      commentStatements.join(\"\\n\"),\n    \"utf-8\",\n  );\n\n  return dirName;\n};\n\ngeneratorHandler({\n  onManifest: () => ({\n    version: `v${version}`,\n    defaultOutput: \"migrations\",\n    prettyName: \"Prisma Database Comments\",\n  }),\n  onGenerate: generate,\n});\n", "{\n  \"name\": \"@onozaty/prisma-db-comments-generator\",\n  \"version\": \"1.3.0\",\n  \"description\": \"Generate database comments from Prisma schema\",\n  \"type\": \"module\",\n  \"bin\": {\n    \"prisma-db-comments-generator\": \"./dist/generator.cjs\"\n  },\n  \"files\": [\n    \"dist/**/*\",\n    \"!dist/**/*.test.*\"\n  ],\n  \"scripts\": {\n    \"build\": \"rm -rf dist/ && node build.js\",\n    \"prepare\": \"pnpm run build\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"format\": \"prettier --write src/**\",\n    \"lint\": \"eslint 'src/**/*.ts' --ignore-pattern 'src/__fixtures__/**'\",\n    \"test\": \"vitest run\",\n    \"test:cov\": \"vitest run --coverage\",\n    \"db:init\": \"rm -rf prisma/migrations && prisma migrate reset --skip-generate\",\n    \"db:migrate\": \"prisma migrate dev && prisma generate && pnpm run db:deploy\",\n    \"db:deploy\": \"prisma migrate deploy\",\n    \"db:init:mysql\": \"rm -rf prisma-mysql/migrations && dotenv -e .env.mysql -- prisma migrate reset --skip-generate --schema=prisma-mysql/schema.prisma\",\n    \"db:migrate:mysql\": \"dotenv -e .env.mysql -- prisma migrate dev --schema=prisma-mysql/schema.prisma && dotenv -e .env.mysql -- prisma generate --schema=prisma-mysql/schema.prisma && pnpm run db:deploy:mysql\",\n    \"db:deploy:mysql\": \"dotenv -e .env.mysql -- prisma migrate deploy --schema=prisma-mysql/schema.prisma\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/onozaty/prisma-db-comments-generator.git\"\n  },\n  \"keywords\": [\n    \"prisma\",\n    \"generator\",\n    \"postgresql\"\n  ],\n  \"author\": \"onozaty\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/onozaty/prisma-db-comments-generator/issues\"\n  },\n  \"homepage\": \"https://github.com/onozaty/prisma-db-comments-generator#readme\",\n  \"devDependencies\": {\n    \"@eslint/js\": \"^9.28.0\",\n    \"@prisma/client\": \"^6.0.0\",\n    \"@types/node\": \"^22.0.0\",\n    \"@vitest/coverage-v8\": \"^3.2.0\",\n    \"@vitest/eslint-plugin\": \"^1.2.1\",\n    \"dotenv-cli\": \"^8.0.0\",\n    \"esbuild\": \"^0.25.5\",\n    \"eslint\": \"^9.28.0\",\n    \"globals\": \"^15.8.0\",\n    \"prettier\": \"^3.3.3\",\n    \"prisma\": \"^6.0.0\",\n    \"typescript\": \"^5.5.4\",\n    \"typescript-eslint\": \"^8.33.1\",\n    \"vitest\": \"^3.2.0\"\n  },\n  \"dependencies\": {\n    \"@prisma/generator-helper\": \"^5.0.0 || ^6.0.0\",\n    \"@prisma/internals\": \"^5.0.0 || ^6.0.0\"\n  }\n}", "import { Config } from \"./config\";\nimport { Field, Model } from \"./parser\";\n\nexport type Comments = {\n  [key: string]: TableComments;\n};\n\nexport type TableComments = {\n  table?: TableComment;\n  columns?: ColumnComment[];\n};\n\nexport type TableComment = {\n  schema?: string;\n  tableName: string;\n  comment: string;\n};\n\nexport type ColumnComment = {\n  schema?: string;\n  tableName: string;\n  columnName: string;\n  comment: string;\n};\n\nexport const AllTargets = [\"table\", \"column\"] as const;\nexport type Target = (typeof AllTargets)[number];\n\nexport const createComments = (\n  models: readonly Model[],\n  {\n    targets,\n    ignorePattern,\n    ignoreCommentPattern,\n    includeEnumInFieldComment,\n  }: Pick<\n    Config,\n    | \"targets\"\n    | \"ignorePattern\"\n    | \"ignoreCommentPattern\"\n    | \"includeEnumInFieldComment\"\n  >,\n): Comments => {\n  const comments: Comments = {};\n\n  for (const model of models) {\n    if (ignorePattern && ignorePattern.test(model.dbName)) {\n      continue;\n    }\n\n    comments[`${model.schema ? model.schema + \".\" : \"\"}${model.dbName}`] = {\n      table: targets.includes(\"table\")\n        ? {\n            schema: model.schema,\n            tableName: model.dbName,\n            comment: createModelCommentString(model, ignoreCommentPattern),\n          }\n        : undefined,\n      columns: targets.includes(\"column\")\n        ? model.fields.map((field) => {\n            return {\n              schema: model.schema,\n              tableName: model.dbName,\n              columnName: field.dbName,\n              comment: createFieldCommentString(\n                field,\n                ignoreCommentPattern,\n                includeEnumInFieldComment,\n              ),\n            };\n          })\n        : undefined,\n    };\n  }\n\n  return comments;\n};\n\nconst createFieldCommentString = (\n  field: Field,\n  ignoreCommentPattern: RegExp | undefined,\n  includeEnumInFieldComment: boolean,\n) => {\n  let comment = field.documentation ?? \"\";\n\n  if (ignoreCommentPattern && ignoreCommentPattern.test(comment)) {\n    return \"\";\n  }\n\n  if (includeEnumInFieldComment && field.typeEnum) {\n    if (comment !== \"\") {\n      comment += \"\\n\";\n    }\n    comment += `enum: ${field.typeEnum.dbName}(${field.typeEnum.values.join(\", \")})`;\n  }\n\n  return comment;\n};\n\nconst createModelCommentString = (\n  model: Model,\n  ignoreCommentPattern: RegExp | undefined,\n): string => {\n  if (model.documentation === undefined) {\n    return \"\";\n  }\n\n  if (ignoreCommentPattern && ignoreCommentPattern.test(model.documentation)) {\n    return \"\";\n  }\n\n  return model.documentation;\n};\n\nexport const diffComments = (first: Comments, second: Comments): Comments => {\n  // first \u306E\u4E2D\u3067\u3001second \u3068\u540C\u3058\u3082\u306E\u306F\u9664\u5916\n  // first \u3067\u30B3\u30E1\u30F3\u30C8\u304C\u7A7A\u3067\u3001\u304B\u3064second\u306B\u5BFE\u5FDC\u3059\u308B\u3082\u306E\u304C\u7121\u304B\u3063\u305F\u5834\u5408\u3082\u9664\u5916\n  // (\u7A7A\u306E\u30B3\u30E1\u30F3\u30C8\u306F\u3001\u524D\u56DE\u30B3\u30E1\u30F3\u30C8\u304C\u7A7A\u3058\u3083\u306A\u304B\u3063\u305F\u3068\u304D\u3060\u3051\u5165\u308C\u308B\u306E\u3067)\n  const diff: Comments = {};\n\n  for (const key in first) {\n    const tableDiff = diffTableComments(first[key], second[key]);\n    if (tableDiff) {\n      diff[key] = tableDiff;\n    }\n  }\n\n  return diff;\n};\n\nconst diffTableComments = (\n  first: TableComments,\n  second?: TableComments,\n): TableComments | undefined => {\n  const tableDiff = first.table\n    ? diffComment(first.table, second?.table)\n    : undefined;\n\n  const commentDiffs = first.columns\n    ?.map((firstColumn) => {\n      // \u30AB\u30E9\u30E0\u304C\u4E00\u81F4\u3059\u308B\u3082\u306E\u3092\u63A2\u3057\u3066\u6BD4\u8F03\n      const secondColumn = second?.columns?.find(\n        (x) => x.columnName === firstColumn.columnName,\n      );\n      return diffComment(firstColumn, secondColumn);\n    })\n    .filter((x) => x !== undefined);\n\n  if (!tableDiff && (!commentDiffs || commentDiffs.length === 0)) {\n    return undefined;\n  }\n\n  return {\n    table: tableDiff,\n    columns: commentDiffs,\n  };\n};\n\nconst diffComment = <T extends TableComment | ColumnComment>(\n  first: T,\n  second?: T,\n): T | undefined => {\n  if (different(first.comment, second?.comment)) {\n    return { ...first };\n  }\n  return undefined;\n};\n\nconst different = (first: string, second?: string) => {\n  return first !== (second ?? \"\");\n};\n", "import { EnvValue, GeneratorOptions } from \"@prisma/generator-helper\";\nimport { parseEnvValue } from \"@prisma/internals\";\nimport { AllTargets, Target } from \"./comment\";\nimport { DatabaseProvider } from \"./statement\";\n\nexport interface Config {\n  targets: readonly Target[];\n  ignorePattern?: RegExp;\n  ignoreCommentPattern?: RegExp;\n  includeEnumInFieldComment: boolean;\n  provider: DatabaseProvider;\n  outputDir: string;\n}\n\nexport const readConfig = ({\n  generator,\n  datasources,\n}: Pick<GeneratorOptions, \"generator\" | \"datasources\">): Config => {\n  const targets: readonly Target[] = Array.isArray(generator.config.targets)\n    ? (generator.config.targets as Target[])\n    : AllTargets;\n\n  let ignorePattern;\n  if (\n    generator.config.ignorePattern &&\n    typeof generator.config.ignorePattern === \"string\"\n  ) {\n    ignorePattern = new RegExp(generator.config.ignorePattern);\n  }\n\n  let ignoreCommentPattern;\n  if (\n    generator.config.ignoreCommentPattern &&\n    typeof generator.config.ignoreCommentPattern === \"string\"\n  ) {\n    ignoreCommentPattern = new RegExp(generator.config.ignoreCommentPattern);\n  }\n\n  let includeEnumInFieldComment = false;\n  if (\n    generator.config.includeEnumInFieldComment &&\n    typeof generator.config.includeEnumInFieldComment === \"string\"\n  ) {\n    includeEnumInFieldComment =\n      generator.config.includeEnumInFieldComment === \"true\";\n  }\n\n  const provider: DatabaseProvider =\n    datasources.length > 0\n      ? datasources[0].activeProvider === \"mysql\"\n        ? \"mysql\"\n        : \"postgresql\"\n      : \"postgresql\";\n\n  const outputDir = parseEnvValue(generator.output as EnvValue);\n\n  return {\n    targets,\n    ignorePattern,\n    ignoreCommentPattern,\n    includeEnumInFieldComment,\n    provider,\n    outputDir,\n  };\n};\n", "import { DMMF } from \"@prisma/generator-helper\";\n\nexport const parse = (datamodel: DMMF.Datamodel) => {\n  const typeEnums = datamodel.enums.map((x) => parseEnum(x));\n  const typeEnumMap = new Map(typeEnums.map((x) => [x.name, x]));\n  const models = datamodel.models.map((x) => parseModel(x, typeEnumMap));\n\n  return models;\n};\n\nconst parseEnum = (datamodelEnum: DMMF.DatamodelEnum): TypeEnum => {\n  return {\n    dbName: datamodelEnum.dbName ?? datamodelEnum.name,\n    name: datamodelEnum.name,\n    values: datamodelEnum.values.map((x) => x.dbName ?? x.name),\n    documentation: datamodelEnum.documentation,\n  };\n};\n\nconst parseField = (\n  field: DMMF.Field,\n  typeEnumMap: Map<string, TypeEnum>,\n): Field => {\n  const typeEnum =\n    field.kind === \"enum\" ? typeEnumMap.get(field.type) : undefined;\n\n  return {\n    dbName: field.dbName ?? field.name,\n    documentation: field.documentation,\n    typeEnum,\n  };\n};\n\nconst parseModel = (\n  model: DMMF.Model,\n  typeEnumMap: Map<string, TypeEnum>,\n): Model => {\n  return {\n    schema: model.schema ?? undefined,\n    dbName: model.dbName ?? model.name,\n    fields: model.fields\n      .filter((x) => x.kind === \"scalar\" || x.kind === \"enum\")\n      .map((x) => parseField(x, typeEnumMap)),\n    documentation: model.documentation,\n  };\n};\n\nexport type Model = {\n  schema?: string;\n  dbName: string;\n  fields: Field[];\n  documentation?: string;\n};\n\nexport type Field = {\n  dbName: string;\n  documentation?: string;\n  typeEnum?: TypeEnum;\n};\n\nexport type TypeEnum = {\n  dbName: string;\n  name: string;\n  values: string[];\n  documentation?: string;\n};\n", "import { Comments } from \"./comment\";\n\nexport const generatePostgreSQLCommentStatements = (\n  comments: Comments,\n): string[] => {\n  const commentStatements: string[] = [];\n\n  for (const tableName in comments) {\n    const { table, columns } = comments[tableName];\n\n    commentStatements.push(`-- ${tableName} comments`);\n    if (table) {\n      // ON TABLE\n      commentStatements.push(\n        `COMMENT ON TABLE ${joinNames(table.schema, table.tableName)} IS ${toStringLiteral(table.comment)};`,\n      );\n    }\n\n    if (columns) {\n      for (const column of columns) {\n        // ON COLUMN\n        commentStatements.push(\n          `COMMENT ON COLUMN ${joinNames(column.schema, column.tableName, column.columnName)} IS ${toStringLiteral(column.comment)};`,\n        );\n      }\n    }\n\n    commentStatements.push(\"\");\n  }\n\n  return commentStatements;\n};\n\nconst toStringLiteral = (str?: string) => {\n  if (str) {\n    const strValue = `'${escapeString(str)}'`;\n    return strValue.includes(\"\\\\\") ? \"E\" + strValue : strValue;\n  } else {\n    return \"NULL\";\n  }\n};\n\nconst escapeString = (str: string) => {\n  return str\n    .replace(/'/g, \"''\")\n    .replace(/\\\\/g, \"\\\\\\\\\")\n    .replace(/\\n/g, \"\\\\n\")\n    .replace(/\\r/g, \"\\\\r\");\n};\n\nconst joinNames = (\n  schema: string | undefined,\n  tableName: string,\n  columnName?: string,\n) => {\n  let name = \"\";\n  if (schema) {\n    name += `\"${schema}\".`;\n  }\n  name += `\"${tableName}\"`;\n  if (columnName) {\n    name += `.\"${columnName}\"`;\n  }\n  return name;\n};\n", "import { Comments } from \"./comment\";\n\nconst CREATE_COLUMN_COMMENT_STORED_PROCEDURES = `-- Stored procedure to update column comments\nDROP PROCEDURE IF EXISTS prisma_update_column_comment;\n\nCREATE PROCEDURE prisma_update_column_comment(\n    IN p_table_name VARCHAR(255),\n    IN p_column_name VARCHAR(255),\n    IN p_comment_text TEXT\n)\nBEGIN\n    DECLARE column_definition TEXT;\n    \n    -- Get current column definition from current database\n    SELECT CONCAT(\n        COLUMN_TYPE,\n        CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE ' NULL' END,\n        CASE WHEN COLUMN_DEFAULT IS NOT NULL THEN CONCAT(' DEFAULT ', QUOTE(COLUMN_DEFAULT)) ELSE '' END,\n        CASE WHEN EXTRA != '' THEN CONCAT(' ', EXTRA) ELSE '' END\n    ) INTO column_definition\n    FROM information_schema.COLUMNS\n    WHERE TABLE_SCHEMA = DATABASE()\n        AND TABLE_NAME = p_table_name\n        AND COLUMN_NAME = p_column_name;\n    \n    -- Build and execute ALTER statement\n    SET @sql = CONCAT(\n        'ALTER TABLE \\`', p_table_name, '\\`',\n        ' MODIFY COLUMN \\`', p_column_name, '\\` ',\n        column_definition,\n        CASE \n            WHEN p_comment_text IS NULL THEN ''\n            ELSE CONCAT(' COMMENT ', QUOTE(p_comment_text))\n        END\n    );\n    \n    PREPARE stmt FROM @sql;\n    EXECUTE stmt;\n    DEALLOCATE PREPARE stmt;\nEND;\n`;\n\nconst DROP_COLUMN_COMMENT_STORED_PROCEDURES = `-- Drop stored procedure to update column comments\nDROP PROCEDURE IF EXISTS prisma_update_column_comment;\n`;\n\nexport const generateMySQLCommentStatements = (\n  comments: Comments,\n): string[] => {\n  const commentStatements: string[] = [];\n  let hasColumnComments = false;\n\n  for (const tableName in comments) {\n    const { table, columns } = comments[tableName];\n\n    commentStatements.push(`-- ${tableName} comments`);\n    if (table) {\n      // Direct ALTER TABLE for table comment (MySQL doesn't support multi-schema)\n      commentStatements.push(\n        `ALTER TABLE \\`${table.tableName}\\` COMMENT = ${toStringLiteral(table.comment)};`,\n      );\n    }\n\n    if (columns) {\n      for (const column of columns) {\n        // Call stored procedure for column comment (MySQL doesn't support multi-schema)\n        commentStatements.push(\n          `CALL prisma_update_column_comment(${toStringLiteral(column.tableName)}, ${toStringLiteral(column.columnName)}, ${toStringLiteral(column.comment)});`,\n        );\n        hasColumnComments = true;\n      }\n    }\n\n    commentStatements.push(\"\");\n  }\n\n  if (hasColumnComments) {\n    // Add stored procedures first (only once)\n    commentStatements.unshift(CREATE_COLUMN_COMMENT_STORED_PROCEDURES);\n\n    // Drop stored procedures after use (cleanup)\n    commentStatements.push(DROP_COLUMN_COMMENT_STORED_PROCEDURES);\n  }\n\n  return commentStatements;\n};\n\nconst toStringLiteral = (str?: string) => {\n  if (str) {\n    return `'${escapeString(str)}'`;\n  } else {\n    return \"NULL\";\n  }\n};\n\nconst escapeString = (str: string) => {\n  return str\n    .replace(/'/g, \"''\")\n    .replace(/\\\\/g, \"\\\\\\\\\")\n    .replace(/\\n/g, \"\\\\n\")\n    .replace(/\\r/g, \"\\\\r\");\n};\n", "import { Comments } from \"./comment\";\nimport { generatePostgreSQLCommentStatements } from \"./statement-postgresql\";\nimport { generateMySQLCommentStatements } from \"./statement-mysql\";\n\nexport type DatabaseProvider = \"postgresql\" | \"mysql\";\n\nexport const generateCommentStatements = (\n  comments: Comments,\n  provider: DatabaseProvider = \"postgresql\",\n): string[] => {\n  switch (provider) {\n    case \"mysql\":\n      return generateMySQLCommentStatements(comments);\n    case \"postgresql\":\n    default:\n      return generatePostgreSQLCommentStatements(comments);\n  }\n};\n"],
  "mappings": "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",
  "names": ["toStringLiteral", "escapeString", "fs", "path"]
}
