ddlforge 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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +326 -0
  3. package/dist/bin/ddlforge.d.ts +6 -0
  4. package/dist/bin/ddlforge.d.ts.map +1 -0
  5. package/dist/bin/ddlforge.js +14 -0
  6. package/dist/bin/ddlforge.js.map +1 -0
  7. package/dist/src/cli.d.ts +21 -0
  8. package/dist/src/cli.d.ts.map +1 -0
  9. package/dist/src/cli.js +262 -0
  10. package/dist/src/cli.js.map +1 -0
  11. package/dist/src/engine/analyzer.d.ts +30 -0
  12. package/dist/src/engine/analyzer.d.ts.map +1 -0
  13. package/dist/src/engine/analyzer.js +76 -0
  14. package/dist/src/engine/analyzer.js.map +1 -0
  15. package/dist/src/engine/locks.d.ts +26 -0
  16. package/dist/src/engine/locks.d.ts.map +1 -0
  17. package/dist/src/engine/locks.js +136 -0
  18. package/dist/src/engine/locks.js.map +1 -0
  19. package/dist/src/index.d.ts +12 -0
  20. package/dist/src/index.d.ts.map +1 -0
  21. package/dist/src/index.js +17 -0
  22. package/dist/src/index.js.map +1 -0
  23. package/dist/src/lexer/sqlTokenizer.d.ts +40 -0
  24. package/dist/src/lexer/sqlTokenizer.d.ts.map +1 -0
  25. package/dist/src/lexer/sqlTokenizer.js +494 -0
  26. package/dist/src/lexer/sqlTokenizer.js.map +1 -0
  27. package/dist/src/lexer/tokens.d.ts +35 -0
  28. package/dist/src/lexer/tokens.d.ts.map +1 -0
  29. package/dist/src/lexer/tokens.js +81 -0
  30. package/dist/src/lexer/tokens.js.map +1 -0
  31. package/dist/src/reporters/index.d.ts +7 -0
  32. package/dist/src/reporters/index.d.ts.map +1 -0
  33. package/dist/src/reporters/index.js +7 -0
  34. package/dist/src/reporters/index.js.map +1 -0
  35. package/dist/src/reporters/json.d.ts +20 -0
  36. package/dist/src/reporters/json.d.ts.map +1 -0
  37. package/dist/src/reporters/json.js +35 -0
  38. package/dist/src/reporters/json.js.map +1 -0
  39. package/dist/src/reporters/markdown.d.ts +6 -0
  40. package/dist/src/reporters/markdown.d.ts.map +1 -0
  41. package/dist/src/reporters/markdown.js +70 -0
  42. package/dist/src/reporters/markdown.js.map +1 -0
  43. package/dist/src/reporters/terminal.d.ts +10 -0
  44. package/dist/src/reporters/terminal.d.ts.map +1 -0
  45. package/dist/src/reporters/terminal.js +109 -0
  46. package/dist/src/reporters/terminal.js.map +1 -0
  47. package/dist/src/rules/addColumnNotNull.d.ts +9 -0
  48. package/dist/src/rules/addColumnNotNull.d.ts.map +1 -0
  49. package/dist/src/rules/addColumnNotNull.js +131 -0
  50. package/dist/src/rules/addColumnNotNull.js.map +1 -0
  51. package/dist/src/rules/foreignKeyNotValid.d.ts +9 -0
  52. package/dist/src/rules/foreignKeyNotValid.d.ts.map +1 -0
  53. package/dist/src/rules/foreignKeyNotValid.js +119 -0
  54. package/dist/src/rules/foreignKeyNotValid.js.map +1 -0
  55. package/dist/src/rules/index.d.ts +14 -0
  56. package/dist/src/rules/index.d.ts.map +1 -0
  57. package/dist/src/rules/index.js +28 -0
  58. package/dist/src/rules/index.js.map +1 -0
  59. package/dist/src/rules/indexConcurrently.d.ts +9 -0
  60. package/dist/src/rules/indexConcurrently.d.ts.map +1 -0
  61. package/dist/src/rules/indexConcurrently.js +92 -0
  62. package/dist/src/rules/indexConcurrently.js.map +1 -0
  63. package/dist/src/rules/prismaRenameDropAdd.d.ts +11 -0
  64. package/dist/src/rules/prismaRenameDropAdd.d.ts.map +1 -0
  65. package/dist/src/rules/prismaRenameDropAdd.js +144 -0
  66. package/dist/src/rules/prismaRenameDropAdd.js.map +1 -0
  67. package/dist/src/rules/setNotNullFullScan.d.ts +9 -0
  68. package/dist/src/rules/setNotNullFullScan.d.ts.map +1 -0
  69. package/dist/src/rules/setNotNullFullScan.js +93 -0
  70. package/dist/src/rules/setNotNullFullScan.js.map +1 -0
  71. package/dist/src/rules/transactionTrap.d.ts +9 -0
  72. package/dist/src/rules/transactionTrap.d.ts.map +1 -0
  73. package/dist/src/rules/transactionTrap.js +104 -0
  74. package/dist/src/rules/transactionTrap.js.map +1 -0
  75. package/dist/src/rules/types.d.ts +36 -0
  76. package/dist/src/rules/types.d.ts.map +1 -0
  77. package/dist/src/rules/types.js +5 -0
  78. package/dist/src/rules/types.js.map +1 -0
  79. package/dist/src/rules/unbatchedBackfill.d.ts +9 -0
  80. package/dist/src/rules/unbatchedBackfill.d.ts.map +1 -0
  81. package/dist/src/rules/unbatchedBackfill.js +58 -0
  82. package/dist/src/rules/unbatchedBackfill.js.map +1 -0
  83. package/package.json +44 -0
@@ -0,0 +1,494 @@
1
+ /**
2
+ * ddlforge - Zero-dependency SQL DDL lexer & statement splitter
3
+ */
4
+ import { TokenType, SQL_KEYWORDS } from './tokens.js';
5
+ export class SqlTokenizer {
6
+ input;
7
+ length;
8
+ pos = 0;
9
+ line = 1;
10
+ column = 1;
11
+ constructor(input) {
12
+ this.input = input;
13
+ this.length = input.length;
14
+ }
15
+ tokenize(options = {}) {
16
+ const tokens = [];
17
+ this.pos = 0;
18
+ this.line = 1;
19
+ this.column = 1;
20
+ while (this.pos < this.length) {
21
+ const ch = this.input[this.pos];
22
+ // Whitespace
23
+ if (this.isWhitespace(ch)) {
24
+ const token = this.readWhitespace();
25
+ if (options.includeWhitespace) {
26
+ tokens.push(token);
27
+ }
28
+ continue;
29
+ }
30
+ // Single-line comment: -- ...
31
+ if (ch === '-' && this.peek() === '-') {
32
+ const token = this.readSingleLineComment();
33
+ if (options.includeComments ?? true) {
34
+ tokens.push(token);
35
+ }
36
+ continue;
37
+ }
38
+ // Multi-line comment: /* ... */
39
+ if (ch === '/' && this.peek() === '*') {
40
+ const token = this.readMultiLineComment();
41
+ if (options.includeComments ?? true) {
42
+ tokens.push(token);
43
+ }
44
+ continue;
45
+ }
46
+ // Dollar-quoted string: $$ ... $$ or $tag$ ... $tag$
47
+ if (ch === '$' && this.isDollarQuoteStart()) {
48
+ tokens.push(this.readDollarString());
49
+ continue;
50
+ }
51
+ // Standard single-quoted string: ' ... ' (with '' escape)
52
+ if (ch === '\'') {
53
+ tokens.push(this.readSingleQuotedString());
54
+ continue;
55
+ }
56
+ // Quoted identifier: " ... " (with "" escape)
57
+ if (ch === '"') {
58
+ tokens.push(this.readQuotedIdentifier());
59
+ continue;
60
+ }
61
+ // Numbers
62
+ if (this.isDigit(ch)) {
63
+ tokens.push(this.readNumber());
64
+ continue;
65
+ }
66
+ // Multi-character operators and punctuation
67
+ if (ch === ':' && this.peek() === ':') {
68
+ tokens.push(this.createToken(TokenType.OPERATOR, '::', '::', 2));
69
+ continue;
70
+ }
71
+ if (ch === '!' && this.peek() === '=') {
72
+ tokens.push(this.createToken(TokenType.OPERATOR, '!=', '!=', 2));
73
+ continue;
74
+ }
75
+ if (ch === '<' && (this.peek() === '=' || this.peek() === '>')) {
76
+ const op = ch + this.peek();
77
+ tokens.push(this.createToken(TokenType.OPERATOR, op, op, 2));
78
+ continue;
79
+ }
80
+ if (ch === '>' && this.peek() === '=') {
81
+ tokens.push(this.createToken(TokenType.OPERATOR, '>=', '>=', 2));
82
+ continue;
83
+ }
84
+ // Single-character punctuation
85
+ if (ch === ';' || ch === ',' || ch === '(' || ch === ')' || ch === '.' || ch === '[' || ch === ']') {
86
+ tokens.push(this.createToken(TokenType.PUNCTUATION, ch, ch, 1));
87
+ continue;
88
+ }
89
+ // Single-character operators
90
+ if (ch === '=' || ch === '<' || ch === '>' || ch === '+' || ch === '-' || ch === '*' || ch === '/') {
91
+ tokens.push(this.createToken(TokenType.OPERATOR, ch, ch, 1));
92
+ continue;
93
+ }
94
+ // Identifiers or Keywords
95
+ if (this.isIdentifierStart(ch)) {
96
+ tokens.push(this.readIdentifierOrKeyword());
97
+ continue;
98
+ }
99
+ // Any other single character fallback
100
+ tokens.push(this.createToken(TokenType.OPERATOR, ch, ch, 1));
101
+ }
102
+ tokens.push({
103
+ type: TokenType.EOF,
104
+ value: '',
105
+ raw: '',
106
+ line: this.line,
107
+ column: this.column,
108
+ offset: this.pos,
109
+ });
110
+ return tokens;
111
+ }
112
+ peek(offset = 1) {
113
+ const idx = this.pos + offset;
114
+ return idx < this.length ? this.input[idx] : '';
115
+ }
116
+ advance(count = 1) {
117
+ for (let i = 0; i < count; i++) {
118
+ if (this.pos >= this.length)
119
+ break;
120
+ const ch = this.input[this.pos];
121
+ this.pos++;
122
+ if (ch === '\n') {
123
+ this.line++;
124
+ this.column = 1;
125
+ }
126
+ else {
127
+ this.column++;
128
+ }
129
+ }
130
+ }
131
+ isWhitespace(ch) {
132
+ return ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r' || ch === '\f' || ch === '\v';
133
+ }
134
+ isDigit(ch) {
135
+ return ch >= '0' && ch <= '9';
136
+ }
137
+ isIdentifierStart(ch) {
138
+ return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch === '_' || ch > '\u007F';
139
+ }
140
+ isIdentifierPart(ch) {
141
+ return this.isIdentifierStart(ch) || this.isDigit(ch) || ch === '$';
142
+ }
143
+ createToken(type, value, raw, advanceCount) {
144
+ const startLine = this.line;
145
+ const startCol = this.column;
146
+ const startOffset = this.pos;
147
+ this.advance(advanceCount);
148
+ return {
149
+ type,
150
+ value,
151
+ raw,
152
+ line: startLine,
153
+ column: startCol,
154
+ offset: startOffset,
155
+ };
156
+ }
157
+ readWhitespace() {
158
+ const startLine = this.line;
159
+ const startCol = this.column;
160
+ const startOffset = this.pos;
161
+ let raw = '';
162
+ while (this.pos < this.length && this.isWhitespace(this.input[this.pos])) {
163
+ raw += this.input[this.pos];
164
+ this.advance(1);
165
+ }
166
+ return {
167
+ type: TokenType.WHITESPACE,
168
+ value: raw,
169
+ raw,
170
+ line: startLine,
171
+ column: startCol,
172
+ offset: startOffset,
173
+ };
174
+ }
175
+ readSingleLineComment() {
176
+ const startLine = this.line;
177
+ const startCol = this.column;
178
+ const startOffset = this.pos;
179
+ let raw = '';
180
+ while (this.pos < this.length && this.input[this.pos] !== '\n' && this.input[this.pos] !== '\r') {
181
+ raw += this.input[this.pos];
182
+ this.advance(1);
183
+ }
184
+ // Capture the newline as well if present, to keep stream safe
185
+ if (this.pos < this.length && (this.input[this.pos] === '\r' || this.input[this.pos] === '\n')) {
186
+ if (this.input[this.pos] === '\r' && this.peek() === '\n') {
187
+ raw += '\r\n';
188
+ this.advance(2);
189
+ }
190
+ else {
191
+ raw += this.input[this.pos];
192
+ this.advance(1);
193
+ }
194
+ }
195
+ return {
196
+ type: TokenType.COMMENT,
197
+ value: raw.trim(),
198
+ raw,
199
+ line: startLine,
200
+ column: startCol,
201
+ offset: startOffset,
202
+ };
203
+ }
204
+ readMultiLineComment() {
205
+ const startLine = this.line;
206
+ const startCol = this.column;
207
+ const startOffset = this.pos;
208
+ let raw = '';
209
+ // Consume /*
210
+ raw += this.input[this.pos];
211
+ raw += this.input[this.pos + 1];
212
+ this.advance(2);
213
+ while (this.pos < this.length) {
214
+ if (this.input[this.pos] === '*' && this.peek() === '/') {
215
+ raw += '*/';
216
+ this.advance(2);
217
+ break;
218
+ }
219
+ raw += this.input[this.pos];
220
+ this.advance(1);
221
+ }
222
+ return {
223
+ type: TokenType.COMMENT,
224
+ value: raw,
225
+ raw,
226
+ line: startLine,
227
+ column: startCol,
228
+ offset: startOffset,
229
+ };
230
+ }
231
+ isDollarQuoteStart() {
232
+ // Check if current position matches $[A-Za-z0-9_]*$
233
+ let idx = this.pos + 1;
234
+ while (idx < this.length) {
235
+ const c = this.input[idx];
236
+ if (c === '$') {
237
+ return true;
238
+ }
239
+ if (!this.isIdentifierPart(c)) {
240
+ return false;
241
+ }
242
+ idx++;
243
+ }
244
+ return false;
245
+ }
246
+ readDollarString() {
247
+ const startLine = this.line;
248
+ const startCol = this.column;
249
+ const startOffset = this.pos;
250
+ // Find the opening tag
251
+ let tag = '$';
252
+ let idx = this.pos + 1;
253
+ while (idx < this.length && this.input[idx] !== '$') {
254
+ tag += this.input[idx];
255
+ idx++;
256
+ }
257
+ tag += '$'; // e.g. "$$" or "$func$"
258
+ const tagLen = tag.length;
259
+ let raw = '';
260
+ // Consume the opening tag
261
+ for (let i = 0; i < tagLen; i++) {
262
+ raw += this.input[this.pos];
263
+ this.advance(1);
264
+ }
265
+ // Read until matching closing tag
266
+ while (this.pos < this.length) {
267
+ if (this.input.startsWith(tag, this.pos)) {
268
+ for (let i = 0; i < tagLen; i++) {
269
+ raw += this.input[this.pos];
270
+ this.advance(1);
271
+ }
272
+ break;
273
+ }
274
+ raw += this.input[this.pos];
275
+ this.advance(1);
276
+ }
277
+ const value = raw.length >= tagLen * 2 ? raw.slice(tagLen, -tagLen) : raw;
278
+ return {
279
+ type: TokenType.DOLLAR_STRING,
280
+ value,
281
+ raw,
282
+ line: startLine,
283
+ column: startCol,
284
+ offset: startOffset,
285
+ };
286
+ }
287
+ readSingleQuotedString() {
288
+ const startLine = this.line;
289
+ const startCol = this.column;
290
+ const startOffset = this.pos;
291
+ let raw = "'";
292
+ let value = '';
293
+ this.advance(1); // skip initial '
294
+ while (this.pos < this.length) {
295
+ const ch = this.input[this.pos];
296
+ if (ch === "'") {
297
+ if (this.peek() === "'") {
298
+ // Escaped quote ''
299
+ raw += "''";
300
+ value += "'";
301
+ this.advance(2);
302
+ continue;
303
+ }
304
+ else {
305
+ // End of string
306
+ raw += "'";
307
+ this.advance(1);
308
+ break;
309
+ }
310
+ }
311
+ else if (ch === '\\' && this.peek() === "'") {
312
+ // Escaped quote \'
313
+ raw += "\\'";
314
+ value += "'";
315
+ this.advance(2);
316
+ continue;
317
+ }
318
+ else {
319
+ raw += ch;
320
+ value += ch;
321
+ this.advance(1);
322
+ }
323
+ }
324
+ return {
325
+ type: TokenType.STRING,
326
+ value,
327
+ raw,
328
+ line: startLine,
329
+ column: startCol,
330
+ offset: startOffset,
331
+ };
332
+ }
333
+ readQuotedIdentifier() {
334
+ const startLine = this.line;
335
+ const startCol = this.column;
336
+ const startOffset = this.pos;
337
+ let raw = '"';
338
+ let value = '';
339
+ this.advance(1); // skip initial "
340
+ while (this.pos < this.length) {
341
+ const ch = this.input[this.pos];
342
+ if (ch === '"') {
343
+ if (this.peek() === '"') {
344
+ // Escaped double quote ""
345
+ raw += '""';
346
+ value += '"';
347
+ this.advance(2);
348
+ continue;
349
+ }
350
+ else {
351
+ // End of quoted identifier
352
+ raw += '"';
353
+ this.advance(1);
354
+ break;
355
+ }
356
+ }
357
+ else {
358
+ raw += ch;
359
+ value += ch;
360
+ this.advance(1);
361
+ }
362
+ }
363
+ return {
364
+ type: TokenType.IDENTIFIER,
365
+ value,
366
+ raw,
367
+ line: startLine,
368
+ column: startCol,
369
+ offset: startOffset,
370
+ };
371
+ }
372
+ readNumber() {
373
+ const startLine = this.line;
374
+ const startCol = this.column;
375
+ const startOffset = this.pos;
376
+ let raw = '';
377
+ while (this.pos < this.length && (this.isDigit(this.input[this.pos]) || (this.input[this.pos] === '.' && this.isDigit(this.peek())))) {
378
+ raw += this.input[this.pos];
379
+ this.advance(1);
380
+ }
381
+ return {
382
+ type: TokenType.NUMBER,
383
+ value: raw,
384
+ raw,
385
+ line: startLine,
386
+ column: startCol,
387
+ offset: startOffset,
388
+ };
389
+ }
390
+ readIdentifierOrKeyword() {
391
+ const startLine = this.line;
392
+ const startCol = this.column;
393
+ const startOffset = this.pos;
394
+ let raw = '';
395
+ while (this.pos < this.length && this.isIdentifierPart(this.input[this.pos])) {
396
+ raw += this.input[this.pos];
397
+ this.advance(1);
398
+ }
399
+ const upper = raw.toUpperCase();
400
+ const isKeyword = SQL_KEYWORDS.has(upper);
401
+ return {
402
+ type: isKeyword ? TokenType.KEYWORD : TokenType.IDENTIFIER,
403
+ value: isKeyword ? upper : raw,
404
+ raw,
405
+ line: startLine,
406
+ column: startCol,
407
+ offset: startOffset,
408
+ };
409
+ }
410
+ }
411
+ /**
412
+ * Splits SQL into discrete executable statements while tracking comments,
413
+ * source coordinates, and inline lint directives.
414
+ */
415
+ export function splitStatements(sql) {
416
+ const tokenizer = new SqlTokenizer(sql);
417
+ const allTokens = tokenizer.tokenize({ includeWhitespace: false, includeComments: true });
418
+ const statements = [];
419
+ let currentTokens = [];
420
+ let pendingComments = [];
421
+ let statementComments = [];
422
+ for (const token of allTokens) {
423
+ if (token.type === TokenType.COMMENT) {
424
+ pendingComments.push(token.value);
425
+ continue;
426
+ }
427
+ if (token.type === TokenType.EOF) {
428
+ break;
429
+ }
430
+ if (token.type === TokenType.PUNCTUATION && token.value === ';') {
431
+ if (currentTokens.length > 0) {
432
+ statements.push(createStatement(currentTokens, [...statementComments, ...pendingComments]));
433
+ currentTokens = [];
434
+ statementComments = [];
435
+ pendingComments = [];
436
+ }
437
+ continue;
438
+ }
439
+ // Attach any comments encountered prior to the first token of a statement
440
+ if (currentTokens.length === 0 && pendingComments.length > 0) {
441
+ statementComments = [...pendingComments];
442
+ pendingComments = [];
443
+ }
444
+ currentTokens.push(token);
445
+ }
446
+ // Handle trailing statement without semicolon
447
+ if (currentTokens.length > 0) {
448
+ statements.push(createStatement(currentTokens, [...statementComments, ...pendingComments]));
449
+ }
450
+ return statements;
451
+ }
452
+ function createStatement(tokens, comments) {
453
+ const startLine = tokens[0]?.line ?? 1;
454
+ const startColumn = tokens[0]?.column ?? 1;
455
+ const lastToken = tokens[tokens.length - 1];
456
+ const endLine = lastToken?.line ?? startLine;
457
+ const endColumn = (lastToken?.column ?? startColumn) + (lastToken?.raw.length ?? 0);
458
+ const raw = tokens.map(t => t.raw).join(' ');
459
+ return {
460
+ raw,
461
+ tokens,
462
+ comments,
463
+ startLine,
464
+ startColumn,
465
+ endLine,
466
+ endColumn,
467
+ hasIgnore(ruleId) {
468
+ for (const comment of comments) {
469
+ const lower = comment.toLowerCase();
470
+ // Check standard ignore patterns:
471
+ // -- ddlforge-ignore
472
+ // -- ddlforge-disable
473
+ // -- ddlforge-ignore <ruleId>
474
+ if (lower.includes('ddlforge-ignore') || lower.includes('ddlforge-disable')) {
475
+ if (!ruleId)
476
+ return true;
477
+ if (lower.includes(ruleId.toLowerCase()))
478
+ return true;
479
+ // Bare ignore comment applies to all rules for that statement
480
+ const match = lower.match(/ddlforge-(?:ignore|disable)(.*)$/);
481
+ if (match && match[1].trim() === '') {
482
+ return true;
483
+ }
484
+ }
485
+ }
486
+ return false;
487
+ },
488
+ };
489
+ }
490
+ export function tokenize(sql, options) {
491
+ const tokenizer = new SqlTokenizer(sql);
492
+ return tokenizer.tokenize(options);
493
+ }
494
+ //# sourceMappingURL=sqlTokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlTokenizer.js","sourceRoot":"","sources":["../../../src/lexer/sqlTokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * ddlforge - Token definitions for zero-dependency SQL DDL Lexer
3
+ */
4
+ export declare enum TokenType {
5
+ KEYWORD = "KEYWORD",
6
+ IDENTIFIER = "IDENTIFIER",
7
+ STRING = "STRING",
8
+ DOLLAR_STRING = "DOLLAR_STRING",
9
+ NUMBER = "NUMBER",
10
+ OPERATOR = "OPERATOR",
11
+ PUNCTUATION = "PUNCTUATION",
12
+ COMMENT = "COMMENT",
13
+ WHITESPACE = "WHITESPACE",
14
+ EOF = "EOF"
15
+ }
16
+ export interface Token {
17
+ type: TokenType;
18
+ value: string;
19
+ raw: string;
20
+ line: number;
21
+ column: number;
22
+ offset: number;
23
+ }
24
+ export interface Statement {
25
+ raw: string;
26
+ tokens: Token[];
27
+ comments: string[];
28
+ startLine: number;
29
+ startColumn: number;
30
+ endLine: number;
31
+ endColumn: number;
32
+ hasIgnore(ruleId?: string): boolean;
33
+ }
34
+ export declare const SQL_KEYWORDS: Set<string>;
35
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../src/lexer/tokens.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,SAAS;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,aAAa,kBAAkB;IAC/B,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACrC;AAGD,eAAO,MAAM,YAAY,aA8DvB,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * ddlforge - Token definitions for zero-dependency SQL DDL Lexer
3
+ */
4
+ export var TokenType;
5
+ (function (TokenType) {
6
+ TokenType["KEYWORD"] = "KEYWORD";
7
+ TokenType["IDENTIFIER"] = "IDENTIFIER";
8
+ TokenType["STRING"] = "STRING";
9
+ TokenType["DOLLAR_STRING"] = "DOLLAR_STRING";
10
+ TokenType["NUMBER"] = "NUMBER";
11
+ TokenType["OPERATOR"] = "OPERATOR";
12
+ TokenType["PUNCTUATION"] = "PUNCTUATION";
13
+ TokenType["COMMENT"] = "COMMENT";
14
+ TokenType["WHITESPACE"] = "WHITESPACE";
15
+ TokenType["EOF"] = "EOF";
16
+ })(TokenType || (TokenType = {}));
17
+ // SQL Keywords relevant for DDL & migration safety
18
+ export const SQL_KEYWORDS = new Set([
19
+ 'ADD',
20
+ 'ALTER',
21
+ 'AND',
22
+ 'AS',
23
+ 'ASC',
24
+ 'BEGIN',
25
+ 'BETWEEN',
26
+ 'BY',
27
+ 'CASCADE',
28
+ 'CHECK',
29
+ 'COLUMN',
30
+ 'COMMIT',
31
+ 'CONCURRENTLY',
32
+ 'CONSTRAINT',
33
+ 'CREATE',
34
+ 'DEFAULT',
35
+ 'DELETE',
36
+ 'DESC',
37
+ 'DO',
38
+ 'DROP',
39
+ 'ELSE',
40
+ 'END',
41
+ 'EXISTS',
42
+ 'FOREIGN',
43
+ 'FROM',
44
+ 'IF',
45
+ 'IN',
46
+ 'INDEX',
47
+ 'INSERT',
48
+ 'INTO',
49
+ 'IS',
50
+ 'JOIN',
51
+ 'KEY',
52
+ 'LIMIT',
53
+ 'NOT',
54
+ 'NULL',
55
+ 'ON',
56
+ 'OR',
57
+ 'PRIMARY',
58
+ 'REFERENCES',
59
+ 'RENAME',
60
+ 'RESTRICT',
61
+ 'ROLLBACK',
62
+ 'SELECT',
63
+ 'SET',
64
+ 'START',
65
+ 'TABLE',
66
+ 'THEN',
67
+ 'TO',
68
+ 'TRANSACTION',
69
+ 'TYPE',
70
+ 'UNIQUE',
71
+ 'UPDATE',
72
+ 'USING',
73
+ 'VALID',
74
+ 'VALIDATE',
75
+ 'VALUES',
76
+ 'VIEW',
77
+ 'WHEN',
78
+ 'WHERE',
79
+ 'WITH',
80
+ ]);
81
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/lexer/tokens.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAN,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,gCAAmB,CAAA;IACnB,sCAAyB,CAAA;IACzB,8BAAiB,CAAA;IACjB,4CAA+B,CAAA;IAC/B,8BAAiB,CAAA;IACjB,kCAAqB,CAAA;IACrB,wCAA2B,CAAA;IAC3B,gCAAmB,CAAA;IACnB,sCAAyB,CAAA;IACzB,wBAAW,CAAA;AACb,CAAC,EAXW,SAAS,KAAT,SAAS,QAWpB;AAsBD,mDAAmD;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAClC,KAAK;IACL,OAAO;IACP,KAAK;IACL,IAAI;IACJ,KAAK;IACL,OAAO;IACP,SAAS;IACT,IAAI;IACJ,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,SAAS;IACT,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,MAAM;IACN,KAAK;IACL,OAAO;IACP,KAAK;IACL,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,KAAK;IACL,OAAO;IACP,OAAO;IACP,MAAM;IACN,IAAI;IACJ,aAAa;IACb,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,OAAO;IACP,UAAU;IACV,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;CACP,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * ddlforge - Reporters export
3
+ */
4
+ export * from './terminal.js';
5
+ export * from './json.js';
6
+ export * from './markdown.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * ddlforge - Reporters export
3
+ */
4
+ export * from './terminal.js';
5
+ export * from './json.js';
6
+ export * from './markdown.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}