drizzle-docs-generator 0.1.0

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 (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +89 -0
  3. package/README.md +89 -0
  4. package/dist/cli/index.d.ts +8 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +69 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/generator/common.d.ts +393 -0
  9. package/dist/generator/common.d.ts.map +1 -0
  10. package/dist/generator/common.js +699 -0
  11. package/dist/generator/common.js.map +1 -0
  12. package/dist/generator/index.d.ts +15 -0
  13. package/dist/generator/index.d.ts.map +1 -0
  14. package/dist/generator/mysql.d.ts +36 -0
  15. package/dist/generator/mysql.d.ts.map +1 -0
  16. package/dist/generator/mysql.js +16 -0
  17. package/dist/generator/mysql.js.map +1 -0
  18. package/dist/generator/pg.d.ts +48 -0
  19. package/dist/generator/pg.d.ts.map +1 -0
  20. package/dist/generator/pg.js +52 -0
  21. package/dist/generator/pg.js.map +1 -0
  22. package/dist/generator/sqlite.d.ts +36 -0
  23. package/dist/generator/sqlite.d.ts.map +1 -0
  24. package/dist/generator/sqlite.js +16 -0
  25. package/dist/generator/sqlite.js.map +1 -0
  26. package/dist/index.d.ts +13 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +21 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/parser/comments.d.ts +31 -0
  31. package/dist/parser/comments.d.ts.map +1 -0
  32. package/dist/parser/comments.js +113 -0
  33. package/dist/parser/comments.js.map +1 -0
  34. package/dist/parser/index.d.ts +5 -0
  35. package/dist/parser/index.d.ts.map +1 -0
  36. package/dist/parser/relations.d.ts +34 -0
  37. package/dist/parser/relations.d.ts.map +1 -0
  38. package/dist/parser/relations.js +111 -0
  39. package/dist/parser/relations.js.map +1 -0
  40. package/dist/test-utils/cli-runner.d.ts +35 -0
  41. package/dist/test-utils/cli-runner.d.ts.map +1 -0
  42. package/dist/test-utils/dbml-validator.d.ts +70 -0
  43. package/dist/test-utils/dbml-validator.d.ts.map +1 -0
  44. package/dist/test-utils/index.d.ts +7 -0
  45. package/dist/test-utils/index.d.ts.map +1 -0
  46. package/dist/types.d.ts +53 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/package.json +69 -0
@@ -0,0 +1,393 @@
1
+ import { AnyColumn, Table } from 'drizzle-orm';
2
+ import { TableRelationalConfig } from 'drizzle-orm/relations';
3
+ import { GeneratedRef, GenerateOptions } from '../types';
4
+ import { SchemaComments } from '../parser/comments';
5
+ import { SchemaRelations } from '../parser/relations';
6
+ /**
7
+ * Legacy v0 Relations type (for backward compatibility with relations())
8
+ * This is a simplified type - the actual structure is more complex
9
+ */
10
+ type LegacyRelations = {
11
+ table: Table;
12
+ config: Record<string, unknown>;
13
+ };
14
+ /**
15
+ * Simple DBML string builder
16
+ */
17
+ export declare class DbmlBuilder {
18
+ private lines;
19
+ private indentLevel;
20
+ /**
21
+ * Increase the indentation level by one
22
+ * @returns This instance for method chaining
23
+ */
24
+ indent(): this;
25
+ /**
26
+ * Decrease the indentation level by one (minimum 0)
27
+ * @returns This instance for method chaining
28
+ */
29
+ dedent(): this;
30
+ /**
31
+ * Add a line with the current indentation level
32
+ * @param content - The content to add (empty string adds a blank line)
33
+ * @returns This instance for method chaining
34
+ */
35
+ line(content?: string): this;
36
+ /**
37
+ * Build the final DBML string from all added lines
38
+ * @returns The complete DBML content as a string
39
+ */
40
+ build(): string;
41
+ }
42
+ /**
43
+ * Configuration for different database dialects
44
+ */
45
+ export interface DialectConfig {
46
+ escapeName: (name: string) => string;
47
+ isIncrement: (column: AnyColumn) => boolean;
48
+ }
49
+ /**
50
+ * Table configuration extracted from Drizzle tables
51
+ * Using 'any' types for dialect-agnostic handling
52
+ */
53
+ export interface TableConfig {
54
+ indexes: unknown[];
55
+ primaryKeys: unknown[];
56
+ uniqueConstraints: unknown[];
57
+ foreignKeys: unknown[];
58
+ }
59
+ /**
60
+ * Base generator class for DBML generation
61
+ */
62
+ export declare abstract class BaseGenerator<TSchema extends Record<string, unknown> = Record<string, unknown>> {
63
+ protected schema: TSchema;
64
+ protected relational: boolean;
65
+ protected generatedRefs: GeneratedRef[];
66
+ protected comments: SchemaComments | undefined;
67
+ protected parsedRelations: SchemaRelations | undefined;
68
+ protected source: string | undefined;
69
+ protected abstract dialectConfig: DialectConfig;
70
+ /**
71
+ * Create a new generator instance
72
+ * @param options - Configuration options including schema, relational mode, source code, and comments
73
+ */
74
+ constructor(options: GenerateOptions<TSchema>);
75
+ /**
76
+ * Generate complete DBML output from the schema
77
+ *
78
+ * Creates DBML representation including:
79
+ * - Table definitions with columns, indexes, and constraints
80
+ * - Foreign key references (from table config or relations)
81
+ * - Comments for tables and columns
82
+ *
83
+ * @returns The complete DBML string
84
+ */
85
+ generate(): string;
86
+ /**
87
+ * Get all tables from schema
88
+ *
89
+ * Extracts all Drizzle table objects from the schema by checking each value
90
+ * with isTable() method.
91
+ *
92
+ * @returns Array of table objects
93
+ */
94
+ protected getTables(): Table[];
95
+ /**
96
+ * Check if a value is a Drizzle table
97
+ *
98
+ * Validates whether a value is a table instance from any supported dialect
99
+ * (PostgreSQL, MySQL, or SQLite).
100
+ *
101
+ * @param value - The value to check
102
+ * @returns True if value is a Drizzle table
103
+ */
104
+ protected isTable(value: unknown): boolean;
105
+ /**
106
+ * Get all v0 relations from schema (legacy relations() API)
107
+ *
108
+ * Extracts legacy relations defined using the old relations() API.
109
+ * These are identified by having 'table' and 'config' properties.
110
+ *
111
+ * @returns Array of legacy relation objects
112
+ */
113
+ protected getV0Relations(): LegacyRelations[];
114
+ /**
115
+ * Check if a value is a Drizzle v0 relations object (from relations())
116
+ *
117
+ * Validates the legacy relations() format by checking for 'table' and 'config' properties.
118
+ *
119
+ * @param value - The value to check
120
+ * @returns True if value is a legacy relations object
121
+ */
122
+ protected isV0Relations(value: unknown): boolean;
123
+ /**
124
+ * Check if a value is a v1 relation entry (from defineRelations())
125
+ *
126
+ * Uses official Drizzle v1 types: TableRelationalConfig with Relation instances.
127
+ * Validates the structure has 'table', 'name', and 'relations' properties with valid types.
128
+ *
129
+ * @param value - The value to check
130
+ * @returns True if value is a v1 relation entry
131
+ */
132
+ protected isV1RelationEntry(value: unknown): value is TableRelationalConfig;
133
+ /**
134
+ * Get all v1 relation entries from schema (defineRelations() API)
135
+ *
136
+ * Handles both individual entries and the full defineRelations() result object.
137
+ * Extracts relation configurations that use the modern v1 API with official types.
138
+ *
139
+ * @returns Array of v1 relation entries
140
+ */
141
+ protected getV1RelationEntries(): TableRelationalConfig[];
142
+ /**
143
+ * Check if a value is a full v1 defineRelations() result object
144
+ *
145
+ * This is an object where all values are TableRelationalConfig objects.
146
+ * Used to detect the full result of calling defineRelations() in v1.
147
+ *
148
+ * @param value - The value to check
149
+ * @returns True if value is a full defineRelations() result
150
+ */
151
+ protected isV1DefineRelationsResult(value: unknown): boolean;
152
+ /**
153
+ * Generate a table definition in DBML format
154
+ *
155
+ * Creates the complete table definition including columns, indexes, constraints,
156
+ * and table-level comments. Also collects foreign keys if not in relational mode.
157
+ *
158
+ * @param dbml - The DBML builder to add the table to
159
+ * @param table - The Drizzle table to generate
160
+ */
161
+ protected generateTable(dbml: DbmlBuilder, table: Table): void;
162
+ /**
163
+ * Get table configuration from a Drizzle table
164
+ *
165
+ * Extracts indexes, primary keys, unique constraints, and foreign keys
166
+ * from the table using the appropriate dialect-specific config getter.
167
+ *
168
+ * @param table - The Drizzle table to get configuration from
169
+ * @returns Table configuration or undefined if dialect is not supported
170
+ */
171
+ protected getTableConfig(table: Table): TableConfig | undefined;
172
+ /**
173
+ * Generate a column definition in DBML format
174
+ *
175
+ * Creates a column line with type and attributes (primary key, not null, unique, etc.)
176
+ * and includes column-level comments if available.
177
+ *
178
+ * @param dbml - The DBML builder to add the column to
179
+ * @param column - The Drizzle column to generate
180
+ * @param tableName - Optional table name for looking up comments
181
+ */
182
+ protected generateColumn(dbml: DbmlBuilder, column: AnyColumn, tableName?: string): void;
183
+ /**
184
+ * Get the SQL type for a column
185
+ *
186
+ * @param column - The column to get the SQL type from
187
+ * @returns The SQL type string (e.g., "varchar", "integer")
188
+ */
189
+ protected getColumnType(column: AnyColumn): string;
190
+ /**
191
+ * Get column attributes for DBML
192
+ *
193
+ * Extracts attributes like primary key, not null, unique, increment, default value,
194
+ * and note from the column. Uses column metadata and comments if available.
195
+ *
196
+ * @param column - The column to get attributes from
197
+ * @param tableName - Optional table name for looking up comments
198
+ * @returns Array of attribute strings for DBML format
199
+ */
200
+ protected getColumnAttributes(column: AnyColumn, tableName?: string): string[];
201
+ /**
202
+ * Format attributes into a string
203
+ *
204
+ * @param attrs - Array of attribute strings
205
+ * @returns Comma-separated attribute string
206
+ */
207
+ protected formatAttributes(attrs: string[]): string;
208
+ /**
209
+ * Get the default value for a column
210
+ *
211
+ * Extracts and formats the default value from a column, handling SQL expressions,
212
+ * objects, and primitive values. Returns undefined if no default value exists.
213
+ *
214
+ * @param column - The column to get the default value from
215
+ * @returns Formatted default value string or undefined
216
+ */
217
+ protected getDefaultValue(column: AnyColumn): string | undefined;
218
+ /**
219
+ * Generate indexes block from table configuration
220
+ *
221
+ * Creates the indexes block containing primary keys, unique constraints,
222
+ * and regular indexes with their respective attributes.
223
+ *
224
+ * @param dbml - The DBML builder to add the indexes block to
225
+ * @param tableConfig - The table configuration containing index information
226
+ */
227
+ protected generateIndexesBlock(dbml: DbmlBuilder, tableConfig: TableConfig): void;
228
+ /**
229
+ * Collect foreign keys from table configuration
230
+ *
231
+ * Parses all foreign key definitions from the table config and adds them
232
+ * to the generatedRefs collection for later output.
233
+ *
234
+ * @param tableName - The name of the source table
235
+ * @param foreignKeys - Array of foreign key definitions from table config
236
+ */
237
+ protected collectForeignKeysFromConfig(tableName: string, foreignKeys: unknown[]): void;
238
+ /**
239
+ * Parse a foreign key into a GeneratedRef
240
+ *
241
+ * Extracts foreign key information (source/target tables and columns, actions)
242
+ * and converts it to a GeneratedRef object for DBML output.
243
+ *
244
+ * @param tableName - The name of the source table
245
+ * @param fk - The foreign key definition to parse
246
+ * @returns GeneratedRef object or undefined if parsing fails
247
+ */
248
+ protected parseForeignKey(tableName: string, fk: unknown): GeneratedRef | undefined;
249
+ /**
250
+ * Get a mapping from variable names to table names in the schema
251
+ *
252
+ * Creates a map from TypeScript variable names (e.g., "usersTable") to
253
+ * actual database table names (e.g., "users").
254
+ *
255
+ * @returns Map of variable names to table names
256
+ */
257
+ protected getTableNameMapping(): Map<string, string>;
258
+ /**
259
+ * Get a mapping from TypeScript property names to database column names for a table
260
+ *
261
+ * Creates a map from TypeScript property names (e.g., "authorId") to
262
+ * actual database column names (e.g., "author_id").
263
+ *
264
+ * @param tableVarName - The variable name of the table in the schema
265
+ * @returns Map of property names to column names
266
+ */
267
+ protected getColumnNameMapping(tableVarName: string): Map<string, string>;
268
+ /**
269
+ * Check if there's a reverse one() relation (B->A when we have A->B)
270
+ *
271
+ * Used to detect one-to-one relationships by checking if both tables
272
+ * have one() relations pointing to each other.
273
+ *
274
+ * @param sourceTable - The source table variable name
275
+ * @param targetTable - The target table variable name
276
+ * @param sourceFields - The source table's field names
277
+ * @param targetReferences - The target table's reference column names
278
+ * @returns True if a reverse one() relation exists
279
+ */
280
+ protected hasReverseOneRelation(sourceTable: string, targetTable: string, sourceFields: string[], targetReferences: string[]): boolean;
281
+ /**
282
+ * Helper to check if two arrays are equal
283
+ *
284
+ * @param a - First array
285
+ * @param b - Second array
286
+ * @returns True if arrays have same length and same elements in order
287
+ */
288
+ private arraysEqual;
289
+ /**
290
+ * Generate references from v0 relations() API
291
+ *
292
+ * Uses TypeScript Compiler API to parse relations() definitions from source file
293
+ * and extract fields/references to generate DBML Ref lines.
294
+ *
295
+ * Detects one-to-one relationships when bidirectional one() relations exist.
296
+ */
297
+ protected generateRelationalRefsFromV0(): void;
298
+ /**
299
+ * Generate references from v1 defineRelations() entries
300
+ *
301
+ * Uses official Drizzle v1 types (TableRelationalConfig, Relation, One).
302
+ * Processes One relations to extract foreign key information and generates
303
+ * DBML Ref lines. Detects one-to-one relationships with bidirectional checks.
304
+ *
305
+ * @param entries - Array of v1 relation entries from defineRelations()
306
+ */
307
+ protected generateRelationalRefsFromV1(entries: TableRelationalConfig[]): void;
308
+ /**
309
+ * Check if there's a reverse One relation in v1 entries
310
+ *
311
+ * Detects one-to-one relationships by checking if the target table
312
+ * has a matching One relation pointing back to the source table.
313
+ *
314
+ * @param entries - All v1 relation entries
315
+ * @param fromTableName - The table to search for reverse relation
316
+ * @param toTableName - The expected target table of the reverse relation
317
+ * @param fromColumns - The expected source columns of the reverse relation
318
+ * @param toColumns - The expected target columns of the reverse relation
319
+ * @returns True if a matching reverse One relation exists
320
+ */
321
+ protected hasV1ReverseOneRelation(entries: TableRelationalConfig[], fromTableName: string, toTableName: string, fromColumns: string[], toColumns: string[]): boolean;
322
+ /**
323
+ * Get unique key for a relation to avoid duplicates
324
+ *
325
+ * Creates a consistent key by sorting table names alphabetically.
326
+ *
327
+ * @param tableName - The source table name
328
+ * @param relation - The relation object
329
+ * @returns A unique key string for the relation
330
+ */
331
+ protected getRelationKey(tableName: string, relation: unknown): string;
332
+ /**
333
+ * Parse a relation into a GeneratedRef
334
+ *
335
+ * Extracts relation information from a legacy relation object and converts
336
+ * it to a GeneratedRef for DBML output.
337
+ *
338
+ * @param tableName - The source table name
339
+ * @param relation - The relation object to parse
340
+ * @returns GeneratedRef object or undefined if parsing fails
341
+ */
342
+ protected parseRelation(tableName: string, relation: unknown): GeneratedRef | undefined;
343
+ /**
344
+ * Generate a reference line in DBML format
345
+ *
346
+ * Creates a Ref line showing the relationship between tables with optional
347
+ * onDelete and onUpdate actions.
348
+ *
349
+ * @param dbml - The DBML builder to add the reference to
350
+ * @param ref - The reference definition to generate
351
+ */
352
+ protected generateRef(dbml: DbmlBuilder, ref: GeneratedRef): void;
353
+ /**
354
+ * Get column names from an index definition
355
+ *
356
+ * @param idx - The index definition to extract columns from
357
+ * @returns Array of column names in the index
358
+ */
359
+ protected getIndexColumns(idx: unknown): string[];
360
+ /**
361
+ * Check if an index is unique
362
+ *
363
+ * @param idx - The index definition to check
364
+ * @returns True if the index has the unique flag
365
+ */
366
+ protected isUniqueIndex(idx: unknown): boolean;
367
+ /**
368
+ * Get column names from a primary key constraint
369
+ *
370
+ * @param pk - The primary key definition to extract columns from
371
+ * @returns Array of column names in the primary key
372
+ */
373
+ protected getPrimaryKeyColumns(pk: unknown): string[];
374
+ /**
375
+ * Get column names from a unique constraint
376
+ *
377
+ * @param uc - The unique constraint definition to extract columns from
378
+ * @returns Array of column names in the unique constraint
379
+ */
380
+ protected getUniqueConstraintColumns(uc: unknown): string[];
381
+ }
382
+ /**
383
+ * Write DBML content to a file
384
+ *
385
+ * Creates the directory if it doesn't exist and writes the DBML content
386
+ * to the specified file path.
387
+ *
388
+ * @param filePath - The path to write the DBML file to
389
+ * @param content - The DBML content to write
390
+ */
391
+ export declare function writeDbmlFile(filePath: string, content: string): void;
392
+ export {};
393
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/generator/common.ts"],"names":[],"mappings":"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"}