pgsql-deparser 17.18.5 → 17.19.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.
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Auto-generated file with types stripped for better tree-shaking
3
+ * DO NOT EDIT - Generated by strip-deparser-types.ts
4
+ */
5
+ import { Deparser } from './deparser';
6
+ const deparseMethod = Deparser.deparse;
7
+ // Export the original sync version as deparseSync
8
+ export const deparseSync = deparseMethod;
9
+ // Create an async wrapper for deparse
10
+ export const deparse = async (...args) => {
11
+ return deparseMethod(...args);
12
+ };
13
+ export { Deparser };
14
+ export { splitSqlLines } from './utils/sql-formatter';
15
+ export { QuoteUtils } from '@pgsql/quotes';
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Auto-generated file with types stripped for better tree-shaking
3
+ * DO NOT EDIT - Generated by strip-deparser-types.ts
4
+ */
1
5
  export class ListUtils {
2
6
  static unwrapList(obj) {
3
7
  if (obj === undefined || obj === null) {
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Auto-generated file with types stripped for better tree-shaking
3
+ * DO NOT EDIT - Generated by strip-deparser-types.ts
4
+ */
5
+ const isIdentChar = (ch) => ch !== undefined && (/[A-Za-z0-9_$]/.test(ch) || ch.charCodeAt(0) >= 0x80);
6
+ const DOLLAR_TAG = /\$(?:[A-Za-z_\u0080-\uffff][A-Za-z0-9_\u0080-\uffff]*)?\$/y;
7
+ /**
8
+ * Splits SQL text into lines, breaking only at newlines that sit between
9
+ * tokens. A newline inside a string literal ('...', E'...', $tag$...$tag$),
10
+ * a quoted identifier or a block comment is part of that token's value and
11
+ * stays inside its line, so callers can re-indent the lines without changing
12
+ * what the SQL means.
13
+ */
14
+ export function splitSqlLines(text, newlineChar = '\n') {
15
+ if (!newlineChar || !text.includes(newlineChar)) {
16
+ return [text];
17
+ }
18
+ const lines = [];
19
+ const length = text.length;
20
+ let lineStart = 0;
21
+ let i = 0;
22
+ while (i < length) {
23
+ const ch = text[i];
24
+ if (ch === "'") {
25
+ const prev = text[i - 1];
26
+ const backslashEscapes = (prev === 'E' || prev === 'e') && !isIdentChar(text[i - 2]);
27
+ i++;
28
+ while (i < length) {
29
+ if (backslashEscapes && text[i] === '\\') {
30
+ i += 2;
31
+ }
32
+ else if (text[i] === "'") {
33
+ if (text[i + 1] === "'") {
34
+ i += 2;
35
+ }
36
+ else {
37
+ break;
38
+ }
39
+ }
40
+ else {
41
+ i++;
42
+ }
43
+ }
44
+ i++;
45
+ }
46
+ else if (ch === '"') {
47
+ i++;
48
+ while (i < length) {
49
+ if (text[i] === '"') {
50
+ if (text[i + 1] === '"') {
51
+ i += 2;
52
+ }
53
+ else {
54
+ break;
55
+ }
56
+ }
57
+ else {
58
+ i++;
59
+ }
60
+ }
61
+ i++;
62
+ }
63
+ else if (ch === '$' && !isIdentChar(text[i - 1])) {
64
+ DOLLAR_TAG.lastIndex = i;
65
+ const tag = DOLLAR_TAG.exec(text);
66
+ if (tag) {
67
+ const close = text.indexOf(tag[0], i + tag[0].length);
68
+ i = close === -1 ? length : close + tag[0].length;
69
+ }
70
+ else {
71
+ i++;
72
+ }
73
+ }
74
+ else if (ch === '-' && text[i + 1] === '-') {
75
+ const end = text.indexOf('\n', i);
76
+ i = end === -1 ? length : end;
77
+ }
78
+ else if (ch === '/' && text[i + 1] === '*') {
79
+ let depth = 1;
80
+ i += 2;
81
+ while (i < length && depth > 0) {
82
+ if (text[i] === '/' && text[i + 1] === '*') {
83
+ depth++;
84
+ i += 2;
85
+ }
86
+ else if (text[i] === '*' && text[i + 1] === '/') {
87
+ depth--;
88
+ i += 2;
89
+ }
90
+ else {
91
+ i++;
92
+ }
93
+ }
94
+ }
95
+ else if (text.startsWith(newlineChar, i)) {
96
+ lines.push(text.slice(lineStart, i));
97
+ i += newlineChar.length;
98
+ lineStart = i;
99
+ }
100
+ else {
101
+ i++;
102
+ }
103
+ }
104
+ lines.push(text.slice(lineStart));
105
+ return lines;
106
+ }
107
+ export class SqlFormatter {
108
+ newlineChar;
109
+ tabChar;
110
+ prettyMode;
111
+ constructor(newlineChar = '\n', tabChar = ' ', prettyMode = true) {
112
+ this.newlineChar = newlineChar;
113
+ this.tabChar = tabChar;
114
+ this.prettyMode = prettyMode;
115
+ }
116
+ format(parts, separator = ' ') {
117
+ return parts.filter(part => part !== null && part !== undefined && part !== '').join(separator);
118
+ }
119
+ indent(text, count = 1) {
120
+ if (!this.prettyMode) {
121
+ return text;
122
+ }
123
+ const indentation = this.tabChar.repeat(count);
124
+ return splitSqlLines(text, this.newlineChar).map(line => line.trim() ? indentation + line : line).join(this.newlineChar);
125
+ }
126
+ parens(content) {
127
+ return `(${content})`;
128
+ }
129
+ newline() {
130
+ return this.newlineChar;
131
+ }
132
+ tab() {
133
+ return this.tabChar;
134
+ }
135
+ isPretty() {
136
+ return this.prettyMode;
137
+ }
138
+ }
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Auto-generated file with types stripped for better tree-shaking
3
+ * DO NOT EDIT - Generated by strip-deparser-types.ts
4
+ */
1
5
  import { SqlFormatter } from '../utils/sql-formatter';
2
6
  export class DeparserContext {
3
7
  indentLevel;
package/esm/index.js CHANGED
@@ -1,10 +1,24 @@
1
- import { Deparser } from "./deparser";
2
- const deparseMethod = Deparser.deparse;
3
- // Export the original sync version as deparseSync
4
- export const deparseSync = deparseMethod;
5
- // Create an async wrapper for deparse
6
- export const deparse = async (...args) => {
7
- return deparseMethod(...args);
8
- };
9
- export { Deparser };
1
+ /**
2
+ * Deparser for PostgreSQL version 17
3
+ * Auto-generated by generate-version-deparsers.ts
4
+ */
5
+ import { Deparser as Deparser18 } from './deparser';
6
+ import { PG17ToPG18Transformer } from './v17-to-v18-direct';
7
+ const tx = new PG17ToPG18Transformer();
8
+ const toAst18 = (query) => Array.isArray(query) ? query.map(node => tx.transform(node)) : tx.transform(query);
9
+ export class Deparser extends Deparser18 {
10
+ constructor(tree, opts = {}) {
11
+ super(toAst18(tree), opts);
12
+ }
13
+ static deparse(query, opts = {}) {
14
+ return new Deparser(query, opts).deparseQuery();
15
+ }
16
+ }
17
+ export async function deparse(query, opts) {
18
+ return Deparser.deparse(query, opts);
19
+ }
20
+ export function deparseSync(query, opts) {
21
+ return Deparser.deparse(query, opts);
22
+ }
23
+ export { splitSqlLines } from './deparser/utils/sql-formatter';
10
24
  export { QuoteUtils } from '@pgsql/quotes';
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Auto-generated file with types stripped for better tree-shaking
3
+ * DO NOT EDIT - Generated by strip-direct-transformer-types.ts
4
+ */
5
+ import { V17ToV18Transformer } from "./v17-to-v18";
6
+ /**
7
+ * Direct transformer from PG17 to PG18
8
+ * This transformer chains v17->...->v18 transformations
9
+ */
10
+ export class PG17ToPG18Transformer {
11
+ v17to18 = new V17ToV18Transformer();
12
+ transform(node) {
13
+ if (this.isParseResult(node)) {
14
+ const transformedStmts = node.stmts.map((stmtWrapper) => {
15
+ if (stmtWrapper.stmt) {
16
+ const transformedStmt = this.v17to18.transform(stmtWrapper.stmt, { parentNodeTypes: [] });
17
+ return { ...stmtWrapper, stmt: transformedStmt };
18
+ }
19
+ return stmtWrapper;
20
+ });
21
+ return {
22
+ ...node,
23
+ version: 180004, // PG18 version
24
+ stmts: transformedStmts
25
+ };
26
+ }
27
+ // Otherwise, transform as a regular node
28
+ return this.v17to18.transform(node, { parentNodeTypes: [] });
29
+ }
30
+ /**
31
+ * Transform a single statement from PG17 to PG18
32
+ * @deprecated Use transform() instead, which handles all node types
33
+ */
34
+ transformStatement(stmt) {
35
+ return this.v17to18.transform(stmt, { parentNodeTypes: [] });
36
+ }
37
+ /**
38
+ * Type guard to check if a node is a ParseResult
39
+ */
40
+ isParseResult(node) {
41
+ return node && typeof node === 'object' && 'version' in node && 'stmts' in node;
42
+ }
43
+ }
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Auto-generated file with types stripped for better tree-shaking
3
+ * DO NOT EDIT - Generated by strip-transformer-types.ts
4
+ */
5
+ // @ts-nocheck
6
+ /**
7
+ * V17 to V18 AST Transformer
8
+ * Transforms PostgreSQL v17 AST nodes to v18 format
9
+ *
10
+ * Structural changes in v18:
11
+ * - InsertStmt/UpdateStmt/DeleteStmt/MergeStmt: returningList -> returningClause { exprs }
12
+ * - Constraint: new is_enforced flag (true by default for CHECK/FOREIGN/NOTNULL)
13
+ * - Constraint: CONSTR_GENERATED gains generated_kind ('s' = STORED, 'v' = VIRTUAL)
14
+ * - Column-level NOT NULL constraints gain initially_valid: true
15
+ */
16
+ export class V17ToV18Transformer {
17
+ transform(node, context = { parentNodeTypes: [] }) {
18
+ if (node == null) {
19
+ return null;
20
+ }
21
+ if (typeof node === 'number' || node instanceof Number) {
22
+ return node;
23
+ }
24
+ if (typeof node === 'string') {
25
+ return node;
26
+ }
27
+ try {
28
+ return this.visit(node, context);
29
+ }
30
+ catch (error) {
31
+ const nodeType = Object.keys(node)[0];
32
+ throw new Error(`Error transforming ${nodeType}: ${error.message}`);
33
+ }
34
+ }
35
+ visit(node, context = { parentNodeTypes: [] }) {
36
+ if (node && typeof node === 'object' && 'version' in node && 'stmts' in node) {
37
+ return this.ParseResult(node, context);
38
+ }
39
+ const nodeType = this.getNodeType(node);
40
+ // Handle empty objects
41
+ if (!nodeType) {
42
+ return {};
43
+ }
44
+ const nodeData = this.getNodeData(node);
45
+ const methodName = nodeType;
46
+ if (typeof this[methodName] === 'function') {
47
+ const childContext = {
48
+ ...context,
49
+ parentNodeTypes: [...context.parentNodeTypes, nodeType]
50
+ };
51
+ const result = this[methodName](nodeData, childContext);
52
+ return result;
53
+ }
54
+ // No specific method: recurse into children so nested statements
55
+ // (e.g. DML inside CTEs) still get transformed
56
+ return this.walkValue(node, context);
57
+ }
58
+ /**
59
+ * Generic recursive walk that re-dispatches wrapped nodes with a
60
+ * dedicated transformer method and deep-copies everything else.
61
+ */
62
+ walkValue(value, context) {
63
+ if (value == null || typeof value !== 'object') {
64
+ return value;
65
+ }
66
+ if (Array.isArray(value)) {
67
+ return value.map(item => this.walkValue(item, context));
68
+ }
69
+ const keys = Object.keys(value);
70
+ if (keys.length === 1 && typeof this[keys[0]] === 'function') {
71
+ // Wrapped node with a dedicated transformer method
72
+ return this.visit(value, context);
73
+ }
74
+ const result = {};
75
+ for (const key of keys) {
76
+ result[key] = this.walkValue(value[key], context);
77
+ }
78
+ return result;
79
+ }
80
+ getNodeType(node) {
81
+ return Object.keys(node)[0];
82
+ }
83
+ getNodeData(node) {
84
+ const keys = Object.keys(node);
85
+ if (keys.length === 1 && typeof node[keys[0]] === 'object') {
86
+ return node[keys[0]];
87
+ }
88
+ return node;
89
+ }
90
+ ParseResult(node, context) {
91
+ if (node && typeof node === 'object' && 'version' in node && 'stmts' in node) {
92
+ return {
93
+ version: 180004, // PG18 version
94
+ stmts: node.stmts.map((stmt) => {
95
+ if (stmt && typeof stmt === 'object' && 'stmt' in stmt) {
96
+ return {
97
+ ...stmt,
98
+ stmt: this.transform(stmt.stmt, context)
99
+ };
100
+ }
101
+ return this.transform(stmt, context);
102
+ })
103
+ };
104
+ }
105
+ return node;
106
+ }
107
+ RawStmt(node, context) {
108
+ const result = {};
109
+ if (node.stmt !== undefined) {
110
+ result.stmt = this.transform(node.stmt, context);
111
+ }
112
+ if (node.stmt_location !== undefined) {
113
+ result.stmt_location = node.stmt_location;
114
+ }
115
+ if (node.stmt_len !== undefined) {
116
+ result.stmt_len = node.stmt_len;
117
+ }
118
+ return { RawStmt: result };
119
+ }
120
+ /**
121
+ * Convert a v17 returningList into a v18 ReturningClause
122
+ */
123
+ transformReturningList(returningList, context) {
124
+ return {
125
+ exprs: returningList.map(item => this.transform(item, context))
126
+ };
127
+ }
128
+ transformDmlStatement(nodeType, node, context) {
129
+ const result = {};
130
+ for (const key of Object.keys(node)) {
131
+ if (key === 'returningList') {
132
+ result.returningClause = this.transformReturningList(node.returningList, context);
133
+ }
134
+ else {
135
+ result[key] = this.walkValue(node[key], context);
136
+ }
137
+ }
138
+ return { [nodeType]: result };
139
+ }
140
+ InsertStmt(node, context) {
141
+ return this.transformDmlStatement('InsertStmt', node, context);
142
+ }
143
+ UpdateStmt(node, context) {
144
+ return this.transformDmlStatement('UpdateStmt', node, context);
145
+ }
146
+ DeleteStmt(node, context) {
147
+ return this.transformDmlStatement('DeleteStmt', node, context);
148
+ }
149
+ MergeStmt(node, context) {
150
+ return this.transformDmlStatement('MergeStmt', node, context);
151
+ }
152
+ AlterTableCmd(node, context) {
153
+ const result = {};
154
+ for (const key of Object.keys(node)) {
155
+ result[key] = this.walkValue(node[key], context);
156
+ }
157
+ // v18 wraps ALTER CONSTRAINT definitions in the new ATAlterConstraint node
158
+ if (node.subtype === 'AT_AlterConstraint' && node.def?.Constraint) {
159
+ const constraint = node.def.Constraint;
160
+ const alterConstraint = {};
161
+ if (constraint.conname !== undefined) {
162
+ alterConstraint.conname = constraint.conname;
163
+ }
164
+ alterConstraint.is_enforced = true;
165
+ // v17 ALTER CONSTRAINT could only change deferrability
166
+ alterConstraint.alterDeferrability = true;
167
+ if (constraint.deferrable !== undefined) {
168
+ alterConstraint.deferrable = constraint.deferrable;
169
+ }
170
+ if (constraint.initdeferred !== undefined) {
171
+ alterConstraint.initdeferred = constraint.initdeferred;
172
+ }
173
+ result.def = { ATAlterConstraint: alterConstraint };
174
+ }
175
+ return { AlterTableCmd: result };
176
+ }
177
+ VariableSetStmt(node, context) {
178
+ const result = {};
179
+ for (const key of Object.keys(node)) {
180
+ result[key] = this.walkValue(node[key], context);
181
+ }
182
+ // v18 marks SET TRANSACTION / SESSION CHARACTERISTICS args as jumbled
183
+ if (node.kind === 'VAR_SET_MULTI' && (node.name === 'TRANSACTION' || node.name === 'SESSION CHARACTERISTICS')) {
184
+ result.jumble_args = true;
185
+ }
186
+ return { VariableSetStmt: result };
187
+ }
188
+ Constraint(node, context) {
189
+ const result = {};
190
+ for (const key of Object.keys(node)) {
191
+ result[key] = this.walkValue(node[key], context);
192
+ }
193
+ // v18 constraints are enforced by default; v17 grammar had no ENFORCED syntax
194
+ if (node.contype === 'CONSTR_CHECK' || node.contype === 'CONSTR_FOREIGN') {
195
+ result.is_enforced = true;
196
+ }
197
+ if (node.contype === 'CONSTR_NOTNULL') {
198
+ // v17 only produces column-level NOT NULL constraints, which in v18
199
+ // carry is_enforced and initially_valid
200
+ result.is_enforced = true;
201
+ result.initially_valid = true;
202
+ }
203
+ if (node.contype === 'CONSTR_GENERATED' && result.generated_kind === undefined) {
204
+ // v17 only supports STORED generated columns
205
+ result.generated_kind = 's';
206
+ }
207
+ return { Constraint: result };
208
+ }
209
+ }
package/index.d.ts CHANGED
@@ -1,6 +1,16 @@
1
- import { Deparser, DeparserOptions } from "./deparser";
2
- declare const deparseMethod: typeof Deparser.deparse;
3
- export declare const deparseSync: typeof Deparser.deparse;
4
- export declare const deparse: (...args: Parameters<typeof deparseMethod>) => Promise<ReturnType<typeof deparseMethod>>;
5
- export { Deparser, DeparserOptions };
1
+ /**
2
+ * Deparser for PostgreSQL version 17
3
+ * Auto-generated by generate-version-deparsers.ts
4
+ */
5
+ import { Node, ParseResult } from '@pgsql/types';
6
+ import { Deparser as Deparser18, DeparserOptions } from './deparser';
7
+ type Query = Node | Node[] | ParseResult;
8
+ export declare class Deparser extends Deparser18 {
9
+ constructor(tree: Query, opts?: DeparserOptions);
10
+ static deparse(query: Query, opts?: DeparserOptions): string;
11
+ }
12
+ export declare function deparse(query: Query, opts?: DeparserOptions): Promise<string>;
13
+ export declare function deparseSync(query: Query, opts?: DeparserOptions): string;
14
+ export { DeparserOptions };
15
+ export { splitSqlLines } from './deparser/utils/sql-formatter';
6
16
  export { QuoteUtils } from '@pgsql/quotes';
package/index.js CHANGED
@@ -1,15 +1,32 @@
1
1
  "use strict";
2
+ /**
3
+ * Deparser for PostgreSQL version 17
4
+ * Auto-generated by generate-version-deparsers.ts
5
+ */
2
6
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QuoteUtils = exports.Deparser = exports.deparse = exports.deparseSync = void 0;
4
- const deparser_1 = require("./deparser");
5
- Object.defineProperty(exports, "Deparser", { enumerable: true, get: function () { return deparser_1.Deparser; } });
6
- const deparseMethod = deparser_1.Deparser.deparse;
7
- // Export the original sync version as deparseSync
8
- exports.deparseSync = deparseMethod;
9
- // Create an async wrapper for deparse
10
- const deparse = async (...args) => {
11
- return deparseMethod(...args);
12
- };
7
+ exports.QuoteUtils = exports.splitSqlLines = exports.Deparser = void 0;
13
8
  exports.deparse = deparse;
9
+ exports.deparseSync = deparseSync;
10
+ const deparser_1 = require("./deparser");
11
+ const v17_to_v18_direct_1 = require("./v17-to-v18-direct");
12
+ const tx = new v17_to_v18_direct_1.PG17ToPG18Transformer();
13
+ const toAst18 = (query) => Array.isArray(query) ? query.map(node => tx.transform(node)) : tx.transform(query);
14
+ class Deparser extends deparser_1.Deparser {
15
+ constructor(tree, opts = {}) {
16
+ super(toAst18(tree), opts);
17
+ }
18
+ static deparse(query, opts = {}) {
19
+ return new Deparser(query, opts).deparseQuery();
20
+ }
21
+ }
22
+ exports.Deparser = Deparser;
23
+ async function deparse(query, opts) {
24
+ return Deparser.deparse(query, opts);
25
+ }
26
+ function deparseSync(query, opts) {
27
+ return Deparser.deparse(query, opts);
28
+ }
29
+ var sql_formatter_1 = require("./deparser/utils/sql-formatter");
30
+ Object.defineProperty(exports, "splitSqlLines", { enumerable: true, get: function () { return sql_formatter_1.splitSqlLines; } });
14
31
  var quotes_1 = require("@pgsql/quotes");
15
32
  Object.defineProperty(exports, "QuoteUtils", { enumerable: true, get: function () { return quotes_1.QuoteUtils; } });
package/package.json CHANGED
@@ -1,13 +1,17 @@
1
1
  {
2
- "name": "pgsql-deparser",
3
- "version": "17.18.5",
4
2
  "author": "Constructive <developers@constructive.io>",
5
- "description": "PostgreSQL AST Deparser",
3
+ "homepage": "https://github.com/constructive-io/pgsql-parser",
4
+ "license": "MIT",
6
5
  "main": "index.js",
7
6
  "module": "esm/index.js",
8
7
  "types": "index.d.ts",
9
- "homepage": "https://github.com/constructive-io/pgsql-parser",
10
- "license": "MIT",
8
+ "description": "PostgreSQL AST Deparser",
9
+ "scripts": {
10
+ "copy": "copyfiles -f ../../../../LICENSE README.md package.json dist",
11
+ "clean": "rimraf dist",
12
+ "build": "npm run clean && tsc && tsc -p tsconfig.esm.json && npm run copy",
13
+ "publish:pkg": "npm publish --tag pg17"
14
+ },
11
15
  "publishConfig": {
12
16
  "access": "public",
13
17
  "directory": "dist"
@@ -19,29 +23,6 @@
19
23
  "bugs": {
20
24
  "url": "https://github.com/constructive-io/pgsql-parser/issues"
21
25
  },
22
- "scripts": {
23
- "copy": "makage assets",
24
- "clean": "makage clean dist",
25
- "prepublishOnly": "npm run build",
26
- "build": "npm run clean && tsc && tsc -p tsconfig.esm.json && npm run copy",
27
- "build:dev": "npm run clean && tsc --declarationMap && tsc -p tsconfig.esm.json && npm run copy",
28
- "kitchen-sink": "npm run fixtures && npm run fixtures:kitchen-sink",
29
- "fixtures:kitchen-sink": "ts-node scripts/make-kitchen-sink.ts",
30
- "fixtures:ast": "ts-node scripts/make-fixtures-ast.ts",
31
- "fixtures:sql": "ts-node scripts/make-fixtures-sql.ts",
32
- "fixtures": "ts-node scripts/make-fixtures.ts",
33
- "fixtures:upstream-diff": "ts-node scripts/make-upstream-diff.ts",
34
- "lint": "eslint . --fix",
35
- "test": "jest",
36
- "test:watch": "jest --watch",
37
- "strip-transformer-types": "ts-node scripts/strip-transformer-types.ts",
38
- "strip-direct-transformer-types": "ts-node scripts/strip-direct-transformer-types.ts",
39
- "strip-deparser-types": "ts-node scripts/strip-deparser-types.ts",
40
- "organize-transformers": "ts-node scripts/organize-transformers-by-version.ts",
41
- "generate-version-deparsers": "ts-node scripts/generate-version-deparsers.ts",
42
- "generate-packages": "ts-node scripts/generate-version-packages.ts",
43
- "prepare-versions": "npm run strip-transformer-types && npm run strip-direct-transformer-types && npm run strip-deparser-types && npm run organize-transformers && npm run generate-version-deparsers && npm run generate-packages"
44
- },
45
26
  "keywords": [
46
27
  "sql",
47
28
  "postgres",
@@ -52,13 +33,10 @@
52
33
  "deparser",
53
34
  "database"
54
35
  ],
55
- "devDependencies": {
56
- "libpg-query": "17.7.3",
57
- "makage": "^0.1.8"
58
- },
36
+ "name": "pgsql-deparser",
37
+ "version": "17.19.0",
59
38
  "dependencies": {
60
- "@pgsql/quotes": "17.1.0",
39
+ "@pgsql/quotes": "18.2.4",
61
40
  "@pgsql/types": "^17.6.2"
62
- },
63
- "gitHead": "4213e2c9da8ccb8d21c4ec02f35e34aef65b8ced"
64
- }
41
+ }
42
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Auto-generated file with types stripped for better tree-shaking
3
+ * DO NOT EDIT - Generated by strip-direct-transformer-types.ts
4
+ */
5
+ /**
6
+ * Direct transformer from PG17 to PG18
7
+ * This transformer chains v17->...->v18 transformations
8
+ */
9
+ export declare class PG17ToPG18Transformer {
10
+ private v17to18;
11
+ transform(node: any): any;
12
+ /**
13
+ * Transform a single statement from PG17 to PG18
14
+ * @deprecated Use transform() instead, which handles all node types
15
+ */
16
+ transformStatement(stmt: any): any;
17
+ /**
18
+ * Type guard to check if a node is a ParseResult
19
+ */
20
+ private isParseResult;
21
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ /**
3
+ * Auto-generated file with types stripped for better tree-shaking
4
+ * DO NOT EDIT - Generated by strip-direct-transformer-types.ts
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.PG17ToPG18Transformer = void 0;
8
+ const v17_to_v18_1 = require("./v17-to-v18");
9
+ /**
10
+ * Direct transformer from PG17 to PG18
11
+ * This transformer chains v17->...->v18 transformations
12
+ */
13
+ class PG17ToPG18Transformer {
14
+ v17to18 = new v17_to_v18_1.V17ToV18Transformer();
15
+ transform(node) {
16
+ if (this.isParseResult(node)) {
17
+ const transformedStmts = node.stmts.map((stmtWrapper) => {
18
+ if (stmtWrapper.stmt) {
19
+ const transformedStmt = this.v17to18.transform(stmtWrapper.stmt, { parentNodeTypes: [] });
20
+ return { ...stmtWrapper, stmt: transformedStmt };
21
+ }
22
+ return stmtWrapper;
23
+ });
24
+ return {
25
+ ...node,
26
+ version: 180004, // PG18 version
27
+ stmts: transformedStmts
28
+ };
29
+ }
30
+ // Otherwise, transform as a regular node
31
+ return this.v17to18.transform(node, { parentNodeTypes: [] });
32
+ }
33
+ /**
34
+ * Transform a single statement from PG17 to PG18
35
+ * @deprecated Use transform() instead, which handles all node types
36
+ */
37
+ transformStatement(stmt) {
38
+ return this.v17to18.transform(stmt, { parentNodeTypes: [] });
39
+ }
40
+ /**
41
+ * Type guard to check if a node is a ParseResult
42
+ */
43
+ isParseResult(node) {
44
+ return node && typeof node === 'object' && 'version' in node && 'stmts' in node;
45
+ }
46
+ }
47
+ exports.PG17ToPG18Transformer = PG17ToPG18Transformer;