@rawsql-ts/ddl-docs-cli 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/AGENTS.md +27 -0
  2. package/README.md +86 -0
  3. package/dist/src/analyzer/columnConcepts.d.ts +12 -0
  4. package/dist/src/analyzer/columnConcepts.js +185 -0
  5. package/dist/src/analyzer/columnConcepts.js.map +1 -0
  6. package/dist/src/analyzer/dictionary.d.ts +3 -0
  7. package/dist/src/analyzer/dictionary.js +39 -0
  8. package/dist/src/analyzer/dictionary.js.map +1 -0
  9. package/dist/src/analyzer/typeNormalization.d.ts +7 -0
  10. package/dist/src/analyzer/typeNormalization.js +76 -0
  11. package/dist/src/analyzer/typeNormalization.js.map +1 -0
  12. package/dist/src/cli.d.ts +8 -0
  13. package/dist/src/cli.js +264 -0
  14. package/dist/src/cli.js.map +1 -0
  15. package/dist/src/commands/generate.d.ts +5 -0
  16. package/dist/src/commands/generate.js +266 -0
  17. package/dist/src/commands/generate.js.map +1 -0
  18. package/dist/src/commands/prune.d.ts +2 -0
  19. package/dist/src/commands/prune.js +17 -0
  20. package/dist/src/commands/prune.js.map +1 -0
  21. package/dist/src/config.d.ts +5 -0
  22. package/dist/src/config.js +57 -0
  23. package/dist/src/config.js.map +1 -0
  24. package/dist/src/index.d.ts +2 -0
  25. package/dist/src/index.js +9 -0
  26. package/dist/src/index.js.map +1 -0
  27. package/dist/src/parser/snapshotTableDocs.d.ts +6 -0
  28. package/dist/src/parser/snapshotTableDocs.js +1001 -0
  29. package/dist/src/parser/snapshotTableDocs.js.map +1 -0
  30. package/dist/src/render/columnPages.d.ts +6 -0
  31. package/dist/src/render/columnPages.js +226 -0
  32. package/dist/src/render/columnPages.js.map +1 -0
  33. package/dist/src/render/indexPages.d.ts +6 -0
  34. package/dist/src/render/indexPages.js +156 -0
  35. package/dist/src/render/indexPages.js.map +1 -0
  36. package/dist/src/render/referencesPage.d.ts +6 -0
  37. package/dist/src/render/referencesPage.js +51 -0
  38. package/dist/src/render/referencesPage.js.map +1 -0
  39. package/dist/src/render/tableMarkdown.d.ts +36 -0
  40. package/dist/src/render/tableMarkdown.js +243 -0
  41. package/dist/src/render/tableMarkdown.js.map +1 -0
  42. package/dist/src/render/types.d.ts +7 -0
  43. package/dist/src/render/types.js +3 -0
  44. package/dist/src/render/types.js.map +1 -0
  45. package/dist/src/state/manifest.d.ts +14 -0
  46. package/dist/src/state/manifest.js +153 -0
  47. package/dist/src/state/manifest.js.map +1 -0
  48. package/dist/src/types.d.ts +193 -0
  49. package/dist/src/types.js +3 -0
  50. package/dist/src/types.js.map +1 -0
  51. package/dist/src/utils/ddlInputDedupe.d.ts +9 -0
  52. package/dist/src/utils/ddlInputDedupe.js +25 -0
  53. package/dist/src/utils/ddlInputDedupe.js.map +1 -0
  54. package/dist/src/utils/fs.d.ts +13 -0
  55. package/dist/src/utils/fs.js +187 -0
  56. package/dist/src/utils/fs.js.map +1 -0
  57. package/dist/src/utils/io.d.ts +2 -0
  58. package/dist/src/utils/io.js +13 -0
  59. package/dist/src/utils/io.js.map +1 -0
  60. package/dist/src/utils/markdown.d.ts +12 -0
  61. package/dist/src/utils/markdown.js +34 -0
  62. package/dist/src/utils/markdown.js.map +1 -0
  63. package/dist/src/utils/pgDumpFilter.d.ts +8 -0
  64. package/dist/src/utils/pgDumpFilter.js +104 -0
  65. package/dist/src/utils/pgDumpFilter.js.map +1 -0
  66. package/dist/src/utils/slug.d.ts +1 -0
  67. package/dist/src/utils/slug.js +13 -0
  68. package/dist/src/utils/slug.js.map +1 -0
  69. package/package.json +43 -0
package/AGENTS.md ADDED
@@ -0,0 +1,27 @@
1
+ # Package Scope
2
+ - Applies to `packages/ddl-docs-cli`.
3
+ - Defines contract rules for the development CLI package.
4
+
5
+ # Policy
6
+ ## REQUIRED
7
+ - SQL parsing behavior MUST stay AST-first through `rawsql-ts` APIs.
8
+ - Regex parsing fallback MUST be guarded and limited to unsupported AST gaps.
9
+ - Package dependency footprint MUST remain minimal.
10
+
11
+ ## ALLOWED
12
+ - CLI-only development usage MAY depend on package-local tooling.
13
+
14
+ ## PROHIBITED
15
+ - Treating this package as runtime application `src/` dependency.
16
+
17
+ # Mandatory Workflow
18
+ - Before committing changes under `packages/ddl-docs-cli`, run:
19
+ - `pnpm --filter @rawsql-ts/ddl-docs-cli lint`
20
+ - `pnpm --filter @rawsql-ts/ddl-docs-cli test`
21
+ - `pnpm --filter @rawsql-ts/ddl-docs-cli build`
22
+
23
+ # Hygiene
24
+ - Temporary debug output MUST be removed before commit.
25
+
26
+ # References
27
+ - Parent policy context: [../../AGENTS.md](../../AGENTS.md)
package/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # @rawsql-ts/ddl-docs-cli
2
+
3
+ Generate Markdown table definition documents from DDL files.
4
+
5
+ - DDL is treated as SSOT.
6
+ - SQL parsing uses `rawsql-ts`.
7
+ - `CREATE TABLE` and `ALTER TABLE ... ADD CONSTRAINT` are applied across the full DDL stream.
8
+ - `COMMENT ON TABLE/COLUMN` is parsed via `rawsql-ts`.
9
+
10
+ ## Install
11
+
12
+ ```bash
13
+ pnpm --filter @rawsql-ts/ddl-docs-cli build
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ ```bash
19
+ ddl-docs generate --ddl-dir ztd/ddl --out-dir ztd/docs/tables
20
+ ```
21
+
22
+ Show help:
23
+
24
+ ```bash
25
+ ddl-docs help
26
+ ddl-docs help generate
27
+ ddl-docs help prune
28
+ ```
29
+
30
+ Generated layout:
31
+
32
+ - `ztd/docs/tables/index.md`
33
+ - `ztd/docs/tables/<schema>/index.md`
34
+ - `ztd/docs/tables/<schema>/<table>.md`
35
+
36
+ Options:
37
+
38
+ - `--ddl-dir <directory>` repeatable recursive directory input
39
+ - `--ddl-file <file>` repeatable explicit file input
40
+ - `--ddl <file>` alias of `--ddl-file`
41
+ - `--ddl-glob <pattern>` repeatable glob pattern input
42
+ - `--extensions <csv>` default `.sql`
43
+ - `--out-dir <directory>` output root (default `ztd/docs/tables`)
44
+ - `--config <path>` optional `ztd.config.json` path
45
+ - `--default-schema <name>` schema override for unqualified table names
46
+ - `--search-path <csv>` schema search path override
47
+ - `--no-index` skip index page generation
48
+ - `--strict` fail when warnings exist
49
+ - `--column-order <mode>` `definition` (default) or `name`
50
+
51
+ Prune generated files:
52
+
53
+ ```bash
54
+ ddl-docs prune --out-dir ztd/docs/tables
55
+ ```
56
+
57
+ Prune preview:
58
+
59
+ ```bash
60
+ ddl-docs prune --out-dir ztd/docs/tables --dry-run
61
+ ```
62
+
63
+ Optional orphan cleanup:
64
+
65
+ ```bash
66
+ ddl-docs prune --out-dir ztd/docs/tables --prune-orphans
67
+ ```
68
+
69
+ ## VitePress Integration
70
+
71
+ This tool emits plain Markdown files and index pages.
72
+ If you prefer VitePress-side navigation generation, run with `--no-index` and let your site config build navigation from the generated table pages.
73
+
74
+ ## Warnings
75
+
76
+ Warnings are emitted to `<outDir>/_meta/warnings.json`.
77
+ Use `--strict` in CI to treat warnings as failures.
78
+
79
+ ## Memory Notes
80
+
81
+ Current implementation prioritizes correctness by applying the full DDL stream and aggregating table metadata before rendering.
82
+ For large schemas (for example, ~300 tables), follow-up optimization should focus on reducing peak memory by keeping only compact table metadata and discarding statement-level objects early.
83
+
84
+ ## Minimal E2E Sample
85
+
86
+ See `packages/ddl-docs-cli/examples/minimal-e2e`.
@@ -0,0 +1,12 @@
1
+ import type { ColumnDictionary, FindingItem, ObservedColumnDictionary, SuggestionItem, TableDocModel } from '../types';
2
+ interface AnalyzeOptions {
3
+ locale: string;
4
+ dictionary: ColumnDictionary | null;
5
+ }
6
+ export interface AnalyzeResult {
7
+ observed: ObservedColumnDictionary;
8
+ findings: FindingItem[];
9
+ suggestions: SuggestionItem[];
10
+ }
11
+ export declare function analyzeColumns(tables: TableDocModel[], options: AnalyzeOptions): AnalyzeResult;
12
+ export {};
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analyzeColumns = analyzeColumns;
4
+ const KNOWN_RAW_TYPES = new Set(['text', 'date']);
5
+ const FLEXIBLE_CANONICAL_TYPES = new Set(['date', 'text']);
6
+ const PG_INT_ALIASES = {
7
+ int: 'integer',
8
+ int2: 'smallint',
9
+ int4: 'integer',
10
+ int8: 'bigint',
11
+ };
12
+ function analyzeColumns(tables, options) {
13
+ var _a, _b, _c, _d;
14
+ const conceptMap = new Map();
15
+ const findings = [];
16
+ const suggestions = [];
17
+ const commentCatalog = buildCommentCatalog(tables);
18
+ for (const table of tables) {
19
+ for (const column of table.columns) {
20
+ const concept = column.concept;
21
+ const conceptItem = (_a = conceptMap.get(concept)) !== null && _a !== void 0 ? _a : {
22
+ concept,
23
+ conceptSlug: column.conceptSlug,
24
+ typeDistribution: {},
25
+ usages: [],
26
+ };
27
+ conceptItem.typeDistribution[column.typeKey] = ((_b = conceptItem.typeDistribution[column.typeKey]) !== null && _b !== void 0 ? _b : 0) + 1;
28
+ conceptItem.usages.push({
29
+ schema: table.schema,
30
+ table: table.table,
31
+ column: column.name,
32
+ tableSlug: table.tableSlug,
33
+ schemaSlug: table.schemaSlug,
34
+ typeKey: column.typeKey,
35
+ canonicalType: column.canonicalType,
36
+ nullable: column.nullable,
37
+ defaultValue: column.defaultValue,
38
+ comment: column.comment.trim(),
39
+ hasComment: Boolean(column.comment.trim()),
40
+ });
41
+ conceptMap.set(concept, conceptItem);
42
+ if (column.unknownType && !KNOWN_RAW_TYPES.has(column.typeName.toLowerCase())) {
43
+ findings.push({
44
+ kind: 'UNSUPPORTED_OR_UNKNOWN_TYPE',
45
+ severity: 'info',
46
+ message: `Unknown type treated as raw for ${table.schema}.${table.table}.${column.name}: ${column.typeName}`,
47
+ scope: { schema: table.schema, table: table.table, column: column.name, concept },
48
+ });
49
+ }
50
+ const suggestedComment = pickCommentSuggestion(commentCatalog, table.schema, concept);
51
+ if (!column.comment.trim() && suggestedComment) {
52
+ findings.push({
53
+ kind: 'MISSING_COMMENT_SUGGESTED',
54
+ severity: 'warning',
55
+ message: `Missing comment for ${table.schema}.${table.table}.${column.name}.`,
56
+ scope: { schema: table.schema, table: table.table, column: column.name, concept },
57
+ });
58
+ suggestions.push({
59
+ kind: 'column_comment',
60
+ schema: table.schema,
61
+ table: table.table,
62
+ column: column.name,
63
+ sql: `COMMENT ON COLUMN ${quoteQualifiedColumn(table.schema, table.table, column.name)} IS '${escapeSqlLiteral(suggestedComment)}';`,
64
+ });
65
+ }
66
+ const dictionaryEntry = (_d = (_c = options.dictionary) === null || _c === void 0 ? void 0 : _c.columns) === null || _d === void 0 ? void 0 : _d[concept];
67
+ if (!dictionaryEntry) {
68
+ continue;
69
+ }
70
+ const dictionaryComment = buildSuggestedComment(dictionaryEntry, options.locale);
71
+ if (column.comment.trim() && dictionaryComment && normalizeCompare(column.comment) !== normalizeCompare(dictionaryComment)) {
72
+ findings.push({
73
+ kind: 'COMMENT_VS_DICTIONARY_MISMATCH',
74
+ severity: 'warning',
75
+ message: `Comment differs from dictionary for ${table.schema}.${table.table}.${column.name}.`,
76
+ scope: { schema: table.schema, table: table.table, column: column.name, concept },
77
+ });
78
+ }
79
+ }
80
+ }
81
+ for (const conceptItem of conceptMap.values()) {
82
+ const divergenceBases = new Set(conceptItem.usages
83
+ .map((usage) => {
84
+ var _a;
85
+ const base = usage.canonicalType.replace(/\(.*\)/, '').replace(/\{serial\}/, '');
86
+ const normalizedBase = base.toLowerCase();
87
+ return (_a = PG_INT_ALIASES[normalizedBase]) !== null && _a !== void 0 ? _a : normalizedBase;
88
+ })
89
+ .filter((base) => !FLEXIBLE_CANONICAL_TYPES.has(base.toLowerCase())));
90
+ if (divergenceBases.size > 1) {
91
+ findings.push({
92
+ kind: 'COLUMN_NAME_TYPE_DIVERGENCE',
93
+ severity: 'info',
94
+ message: `Type variation detected for concept "${conceptItem.concept}".`,
95
+ scope: { concept: conceptItem.concept },
96
+ });
97
+ }
98
+ }
99
+ const concepts = Array.from(conceptMap.values())
100
+ .map((concept) => ({
101
+ ...concept,
102
+ usages: concept.usages.sort((a, b) => `${a.schema}.${a.table}.${a.column}|${a.typeKey}`.localeCompare(`${b.schema}.${b.table}.${b.column}|${b.typeKey}`)),
103
+ }))
104
+ .sort((a, b) => a.concept.localeCompare(b.concept));
105
+ return {
106
+ observed: {
107
+ version: 1,
108
+ generatedAt: '1970-01-01T00:00:00.000Z',
109
+ concepts,
110
+ },
111
+ findings: findings.sort((a, b) => `${a.kind}|${a.message}`.localeCompare(`${b.kind}|${b.message}`)),
112
+ suggestions: suggestions.sort((a, b) => a.sql.localeCompare(b.sql)),
113
+ };
114
+ }
115
+ function buildSuggestedComment(entry, locale) {
116
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
117
+ const label = (_d = (_b = (_a = entry.labels) === null || _a === void 0 ? void 0 : _a[locale]) !== null && _b !== void 0 ? _b : (_c = entry.labels) === null || _c === void 0 ? void 0 : _c.en) !== null && _d !== void 0 ? _d : Object.values((_e = entry.labels) !== null && _e !== void 0 ? _e : {})[0];
118
+ const note = (_j = (_g = (_f = entry.notes) === null || _f === void 0 ? void 0 : _f[locale]) !== null && _g !== void 0 ? _g : (_h = entry.notes) === null || _h === void 0 ? void 0 : _h.en) !== null && _j !== void 0 ? _j : Object.values((_k = entry.notes) !== null && _k !== void 0 ? _k : {})[0];
119
+ if (label && note) {
120
+ return `${label} - ${note}`;
121
+ }
122
+ return (_l = label !== null && label !== void 0 ? label : note) !== null && _l !== void 0 ? _l : '';
123
+ }
124
+ function escapeSqlLiteral(input) {
125
+ return input.replace(/'/g, "''");
126
+ }
127
+ function normalizeCompare(input) {
128
+ return input.trim().replace(/\s+/g, ' ').toLowerCase();
129
+ }
130
+ function buildCommentCatalog(tables) {
131
+ var _a, _b;
132
+ const catalog = new Map();
133
+ for (const table of tables) {
134
+ for (const column of table.columns) {
135
+ const comment = column.comment.trim();
136
+ if (!comment) {
137
+ continue;
138
+ }
139
+ const concept = column.concept;
140
+ const entry = (_a = catalog.get(concept)) !== null && _a !== void 0 ? _a : {
141
+ sameSchema: new Map(),
142
+ global: [],
143
+ };
144
+ const schemaComments = (_b = entry.sameSchema.get(table.schema)) !== null && _b !== void 0 ? _b : [];
145
+ schemaComments.push(comment);
146
+ entry.sameSchema.set(table.schema, schemaComments);
147
+ entry.global.push({ schema: table.schema, comment });
148
+ catalog.set(concept, entry);
149
+ }
150
+ }
151
+ for (const entry of catalog.values()) {
152
+ for (const [schema, comments] of entry.sameSchema.entries()) {
153
+ entry.sameSchema.set(schema, Array.from(new Set(comments)).sort((a, b) => a.localeCompare(b)));
154
+ }
155
+ const deduped = new Map();
156
+ for (const item of entry.global) {
157
+ deduped.set(`${item.schema}|${item.comment}`, item);
158
+ }
159
+ entry.global = Array.from(deduped.values()).sort((a, b) => `${a.schema}|${a.comment}`.localeCompare(`${b.schema}|${b.comment}`));
160
+ }
161
+ return catalog;
162
+ }
163
+ function pickCommentSuggestion(catalog, schema, concept) {
164
+ var _a, _b, _c, _d;
165
+ const entry = catalog.get(concept);
166
+ if (!entry) {
167
+ return '';
168
+ }
169
+ const sameSchema = (_a = entry.sameSchema.get(schema)) !== null && _a !== void 0 ? _a : [];
170
+ if (sameSchema.length > 0) {
171
+ return (_b = sameSchema[0]) !== null && _b !== void 0 ? _b : '';
172
+ }
173
+ if (entry.global.length > 0) {
174
+ return (_d = (_c = entry.global[0]) === null || _c === void 0 ? void 0 : _c.comment) !== null && _d !== void 0 ? _d : '';
175
+ }
176
+ return '';
177
+ }
178
+ function quoteQualifiedColumn(schema, table, column) {
179
+ return [schema, table, column].map(quoteIdentifier).join('.');
180
+ }
181
+ function quoteIdentifier(value) {
182
+ const normalized = value.replace(/^"|"$/g, '');
183
+ return `"${normalized.replace(/"/g, '""')}"`;
184
+ }
185
+ //# sourceMappingURL=columnConcepts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columnConcepts.js","sourceRoot":"","sources":["../../../src/analyzer/columnConcepts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ColumnDictionary } from '../types';
2
+ export declare function loadDictionary(pathValue: string | undefined): ColumnDictionary | null;
3
+ export declare function resolveLocale(requested: string | undefined, dictionary: ColumnDictionary | null): string;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadDictionary = loadDictionary;
4
+ exports.resolveLocale = resolveLocale;
5
+ const node_fs_1 = require("node:fs");
6
+ function loadDictionary(pathValue) {
7
+ var _a, _b;
8
+ if (!pathValue) {
9
+ return null;
10
+ }
11
+ if (!(0, node_fs_1.existsSync)(pathValue)) {
12
+ throw new Error(`Dictionary file not found: ${pathValue}`);
13
+ }
14
+ const raw = (0, node_fs_1.readFileSync)(pathValue, 'utf8');
15
+ const parsed = JSON.parse(raw);
16
+ if (typeof parsed !== 'object' || parsed === null || !parsed.columns) {
17
+ throw new Error(`Invalid dictionary format: ${pathValue}`);
18
+ }
19
+ return {
20
+ version: (_a = parsed.version) !== null && _a !== void 0 ? _a : 1,
21
+ locales: (_b = parsed.locales) !== null && _b !== void 0 ? _b : ['en'],
22
+ columns: parsed.columns,
23
+ };
24
+ }
25
+ function resolveLocale(requested, dictionary) {
26
+ var _a, _b, _c, _d, _e;
27
+ if (requested && requested.trim()) {
28
+ return requested.trim();
29
+ }
30
+ const lang = (_a = process.env.LANG) === null || _a === void 0 ? void 0 : _a.split(/[._-]/)[0];
31
+ if (lang && ((_b = dictionary === null || dictionary === void 0 ? void 0 : dictionary.locales) === null || _b === void 0 ? void 0 : _b.includes(lang))) {
32
+ return lang;
33
+ }
34
+ if ((_c = dictionary === null || dictionary === void 0 ? void 0 : dictionary.locales) === null || _c === void 0 ? void 0 : _c.includes('en')) {
35
+ return 'en';
36
+ }
37
+ return (_e = (_d = dictionary === null || dictionary === void 0 ? void 0 : dictionary.locales) === null || _d === void 0 ? void 0 : _d[0]) !== null && _e !== void 0 ? _e : 'en';
38
+ }
39
+ //# sourceMappingURL=dictionary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../../src/analyzer/dictionary.ts"],"names":[],"mappings":";;AAGA,wCAiBC;AAED,sCAYC;AAlCD,qCAAmD;AAGnD,SAAgB,cAAc,CAAC,SAA6B;;IAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,IAAA,oBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA8B,CAAC;IAC5D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAA,MAAM,CAAC,OAAO,mCAAI,CAAC;QAC5B,OAAO,EAAE,MAAA,MAAM,CAAC,OAAO,mCAAI,CAAC,IAAI,CAAC;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,SAA6B,EAAE,UAAmC;;IAC9F,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IACD,MAAM,IAAI,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,IAAI,0CAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjD,IAAI,IAAI,KAAI,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,0CAAE,QAAQ,CAAC,IAAI,CAAC,CAAA,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,0CAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,0CAAG,CAAC,CAAC,mCAAI,IAAI,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface NormalizedType {
2
+ canonicalType: string;
3
+ typeKey: string;
4
+ unknown: boolean;
5
+ baseForDivergence: string;
6
+ }
7
+ export declare function normalizePostgresType(rawTypeName: string): NormalizedType;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizePostgresType = normalizePostgresType;
4
+ function normalizePostgresType(rawTypeName) {
5
+ const raw = rawTypeName.trim();
6
+ const lower = raw.toLowerCase().replace(/\s+/g, ' ');
7
+ if (!lower) {
8
+ return asRaw('unknown');
9
+ }
10
+ if (lower === 'smallint' || lower === 'int2') {
11
+ return known('int2', 'int2');
12
+ }
13
+ if (lower === 'integer' || lower === 'int' || lower === 'int4') {
14
+ return known('int4', 'int4');
15
+ }
16
+ if (lower === 'bigint' || lower === 'int8') {
17
+ return known('int8', 'int8');
18
+ }
19
+ if (lower === 'smallserial' || lower === 'serial2') {
20
+ return known('int2', 'int2{serial}', 'int2');
21
+ }
22
+ if (lower === 'serial' || lower === 'serial4') {
23
+ return known('int4', 'int4{serial}', 'int4');
24
+ }
25
+ if (lower === 'bigserial' || lower === 'serial8') {
26
+ return known('int8', 'int8{serial}', 'int8');
27
+ }
28
+ if (lower === 'boolean' || lower === 'bool') {
29
+ return known('bool', 'bool');
30
+ }
31
+ if (lower === 'uuid') {
32
+ return known('uuid', 'uuid');
33
+ }
34
+ if (lower === 'timestamp without time zone' || lower === 'timestamp') {
35
+ return known('timestamp', 'timestamp');
36
+ }
37
+ if (lower === 'timestamp with time zone' || lower === 'timestamptz') {
38
+ return known('timestamptz', 'timestamptz');
39
+ }
40
+ const numeric = lower.match(/^(numeric|decimal)\s*\((\d+)\s*,\s*(\d+)\)$/);
41
+ if (numeric) {
42
+ const p = numeric[2];
43
+ const s = numeric[3];
44
+ return known(`numeric(${p},${s})`, `numeric(${p},${s})`, 'numeric');
45
+ }
46
+ if (lower === 'numeric' || lower === 'decimal') {
47
+ return known('numeric', 'numeric', 'numeric');
48
+ }
49
+ const varchar = lower.match(/^(character varying|varchar)\s*\((\d+)\)$/);
50
+ if (varchar) {
51
+ const n = varchar[2];
52
+ return known(`varchar(${n})`, `varchar(${n})`, 'varchar');
53
+ }
54
+ if (lower === 'character varying' || lower === 'varchar') {
55
+ return known('varchar', 'varchar', 'varchar');
56
+ }
57
+ return asRaw(raw);
58
+ }
59
+ function known(canonicalType, typeKey, baseForDivergence) {
60
+ return {
61
+ canonicalType,
62
+ typeKey,
63
+ unknown: false,
64
+ baseForDivergence: baseForDivergence !== null && baseForDivergence !== void 0 ? baseForDivergence : canonicalType.replace(/\(.*\)/, ''),
65
+ };
66
+ }
67
+ function asRaw(raw) {
68
+ const normalizedRaw = raw.replace(/\s+/g, ' ').trim();
69
+ return {
70
+ canonicalType: normalizedRaw,
71
+ typeKey: `raw:${normalizedRaw}`,
72
+ unknown: true,
73
+ baseForDivergence: `raw:${normalizedRaw.toLowerCase()}`,
74
+ };
75
+ }
76
+ //# sourceMappingURL=typeNormalization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeNormalization.js","sourceRoot":"","sources":["../../../src/analyzer/typeNormalization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Runs ddl-docs-cli command dispatch and executes generate/prune subcommands.
3
+ *
4
+ * @param argv Command-line arguments without the node executable and script path.
5
+ * @returns A promise that resolves when command execution completes.
6
+ * Side effects include console output and filesystem writes/removals via subcommands.
7
+ */
8
+ export declare function runCli(argv: string[]): Promise<void>;