shapedef 1.0.12 → 1.0.13
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.
- package/dist/cjs/translations/postgres.d.ts +5 -2
- package/dist/cjs/translations/postgres.d.ts.map +1 -1
- package/dist/cjs/translations/postgres.js +7 -5
- package/dist/cjs/translations/postgres.js.map +1 -1
- package/dist/esm/translations/postgres.d.ts +5 -2
- package/dist/esm/translations/postgres.d.ts.map +1 -1
- package/dist/esm/translations/postgres.js +7 -5
- package/dist/esm/translations/postgres.js.map +1 -1
- package/package.json +1 -1
- package/src/translations/postgres.test.ts +44 -0
- package/src/translations/postgres.ts +11 -6
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
1
|
+
import { Shape } from "../shape";
|
|
2
|
+
export type PostgresOptions = {
|
|
3
|
+
tablePrefix?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const postgres: (shape: Shape, options?: PostgresOptions) => string;
|
|
3
6
|
//# sourceMappingURL=postgres.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAA;AAqED,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,EAAE,UAAS,eAAoB,WASnE,CAAC"}
|
|
@@ -43,7 +43,7 @@ const pgType = (shape) => {
|
|
|
43
43
|
return "JSONB";
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
|
-
const pgColumnDef = (colName, shape) => {
|
|
46
|
+
const pgColumnDef = (colName, shape, options) => {
|
|
47
47
|
const parts = [colName, pgType(shape)];
|
|
48
48
|
if (shape.anno.primary) {
|
|
49
49
|
parts.push("PRIMARY KEY");
|
|
@@ -60,16 +60,18 @@ const pgColumnDef = (colName, shape) => {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
if (shape.anno.foreign) {
|
|
63
|
-
|
|
63
|
+
const refTable = `${options.tablePrefix ?? ""}${shape.anno.foreign.shapeName}`;
|
|
64
|
+
parts.push(`REFERENCES "${refTable}"(${shape.anno.foreign.fieldName})`);
|
|
64
65
|
}
|
|
65
66
|
return parts.join(" ");
|
|
66
67
|
};
|
|
67
|
-
const postgres = (shape) => {
|
|
68
|
+
const postgres = (shape, options = {}) => {
|
|
68
69
|
if (shape.type === "mapping" && shape.anno.name) {
|
|
70
|
+
const tableName = `${options.tablePrefix ?? ""}${shape.anno.name}`;
|
|
69
71
|
const cols = Object.entries(shape.rec)
|
|
70
|
-
.map(([k, v]) => ` ${pgColumnDef(k, v)}`)
|
|
72
|
+
.map(([k, v]) => ` ${pgColumnDef(k, v, options)}`)
|
|
71
73
|
.join(",\n");
|
|
72
|
-
return `CREATE TABLE IF NOT EXISTS "${
|
|
74
|
+
return `CREATE TABLE IF NOT EXISTS "${tableName}" (\n${cols}\n)`;
|
|
73
75
|
}
|
|
74
76
|
return pgType(shape);
|
|
75
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
1
|
+
import { Shape } from "../shape";
|
|
2
|
+
export type PostgresOptions = {
|
|
3
|
+
tablePrefix?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const postgres: (shape: Shape, options?: PostgresOptions) => string;
|
|
3
6
|
//# sourceMappingURL=postgres.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAA;AAqED,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,EAAE,UAAS,eAAoB,WASnE,CAAC"}
|
|
@@ -43,7 +43,7 @@ const pgType = (shape) => {
|
|
|
43
43
|
return "JSONB";
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
|
-
const pgColumnDef = (colName, shape) => {
|
|
46
|
+
const pgColumnDef = (colName, shape, options) => {
|
|
47
47
|
const parts = [colName, pgType(shape)];
|
|
48
48
|
if (shape.anno.primary) {
|
|
49
49
|
parts.push("PRIMARY KEY");
|
|
@@ -60,16 +60,18 @@ const pgColumnDef = (colName, shape) => {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
if (shape.anno.foreign) {
|
|
63
|
-
|
|
63
|
+
const refTable = `${options.tablePrefix ?? ""}${shape.anno.foreign.shapeName}`;
|
|
64
|
+
parts.push(`REFERENCES "${refTable}"(${shape.anno.foreign.fieldName})`);
|
|
64
65
|
}
|
|
65
66
|
return parts.join(" ");
|
|
66
67
|
};
|
|
67
|
-
const postgres = (shape) => {
|
|
68
|
+
const postgres = (shape, options = {}) => {
|
|
68
69
|
if (shape.type === "mapping" && shape.anno.name) {
|
|
70
|
+
const tableName = `${options.tablePrefix ?? ""}${shape.anno.name}`;
|
|
69
71
|
const cols = Object.entries(shape.rec)
|
|
70
|
-
.map(([k, v]) => ` ${pgColumnDef(k, v)}`)
|
|
72
|
+
.map(([k, v]) => ` ${pgColumnDef(k, v, options)}`)
|
|
71
73
|
.join(",\n");
|
|
72
|
-
return `CREATE TABLE IF NOT EXISTS "${
|
|
74
|
+
return `CREATE TABLE IF NOT EXISTS "${tableName}" (\n${cols}\n)`;
|
|
73
75
|
}
|
|
74
76
|
return pgType(shape);
|
|
75
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -158,4 +158,48 @@ describe("postgres", (it) => {
|
|
|
158
158
|
it("returns column type for unnamed mappings", () => {
|
|
159
159
|
expect(postgres(shapes.mapping({ x: shapes.int() }))).toBe("JSONB");
|
|
160
160
|
});
|
|
161
|
+
|
|
162
|
+
it("applies tablePrefix to table name", () => {
|
|
163
|
+
expect(
|
|
164
|
+
postgres(
|
|
165
|
+
annotate.named(
|
|
166
|
+
shapes.mapping({
|
|
167
|
+
id: annotate.primary(shapes.int()),
|
|
168
|
+
name: shapes.str(),
|
|
169
|
+
}),
|
|
170
|
+
"User",
|
|
171
|
+
),
|
|
172
|
+
{ tablePrefix: "app_" },
|
|
173
|
+
),
|
|
174
|
+
).toBe(
|
|
175
|
+
[
|
|
176
|
+
`CREATE TABLE IF NOT EXISTS "app_User" (`,
|
|
177
|
+
" id INTEGER PRIMARY KEY,",
|
|
178
|
+
" name TEXT NOT NULL",
|
|
179
|
+
")",
|
|
180
|
+
].join("\n"),
|
|
181
|
+
);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it("applies tablePrefix to REFERENCES clauses", () => {
|
|
185
|
+
expect(
|
|
186
|
+
postgres(
|
|
187
|
+
annotate.named(
|
|
188
|
+
shapes.mapping({
|
|
189
|
+
id: annotate.primary(shapes.int()),
|
|
190
|
+
user_id: annotate.foreign(shapes.int(), "User", "id"),
|
|
191
|
+
}),
|
|
192
|
+
"Post",
|
|
193
|
+
),
|
|
194
|
+
{ tablePrefix: "app_" },
|
|
195
|
+
),
|
|
196
|
+
).toBe(
|
|
197
|
+
[
|
|
198
|
+
`CREATE TABLE IF NOT EXISTS "app_Post" (`,
|
|
199
|
+
" id INTEGER PRIMARY KEY,",
|
|
200
|
+
` user_id INTEGER NOT NULL REFERENCES "app_User"(id)`,
|
|
201
|
+
")",
|
|
202
|
+
].join("\n"),
|
|
203
|
+
);
|
|
204
|
+
});
|
|
161
205
|
});
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { Shape } from "../shape";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
export type PostgresOptions = {
|
|
4
|
+
tablePrefix?: string;
|
|
5
|
+
}
|
|
3
6
|
|
|
4
7
|
const pgType = (shape: Shape): string => {
|
|
5
8
|
switch (shape.type) {
|
|
@@ -44,7 +47,7 @@ const pgType = (shape: Shape): string => {
|
|
|
44
47
|
}
|
|
45
48
|
};
|
|
46
49
|
|
|
47
|
-
const pgColumnDef = (colName: string, shape: Shape): string => {
|
|
50
|
+
const pgColumnDef = (colName: string, shape: Shape, options: PostgresOptions): string => {
|
|
48
51
|
const parts: string[] = [colName, pgType(shape)];
|
|
49
52
|
if (shape.anno.primary) {
|
|
50
53
|
parts.push("PRIMARY KEY");
|
|
@@ -60,19 +63,21 @@ const pgColumnDef = (colName: string, shape: Shape): string => {
|
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
if (shape.anno.foreign) {
|
|
66
|
+
const refTable = `${options.tablePrefix ?? ""}${shape.anno.foreign.shapeName}`;
|
|
63
67
|
parts.push(
|
|
64
|
-
`REFERENCES "${
|
|
68
|
+
`REFERENCES "${refTable}"(${shape.anno.foreign.fieldName})`,
|
|
65
69
|
);
|
|
66
70
|
}
|
|
67
71
|
return parts.join(" ");
|
|
68
72
|
};
|
|
69
73
|
|
|
70
|
-
export const postgres:
|
|
74
|
+
export const postgres = (shape: Shape, options: PostgresOptions = {}) => {
|
|
71
75
|
if (shape.type === "mapping" && shape.anno.name) {
|
|
76
|
+
const tableName = `${options.tablePrefix ?? ""}${shape.anno.name}`;
|
|
72
77
|
const cols = Object.entries(shape.rec)
|
|
73
|
-
.map(([k, v]) => ` ${pgColumnDef(k, v)}`)
|
|
78
|
+
.map(([k, v]) => ` ${pgColumnDef(k, v, options)}`)
|
|
74
79
|
.join(",\n");
|
|
75
|
-
return `CREATE TABLE IF NOT EXISTS "${
|
|
80
|
+
return `CREATE TABLE IF NOT EXISTS "${tableName}" (\n${cols}\n)`;
|
|
76
81
|
}
|
|
77
82
|
return pgType(shape);
|
|
78
83
|
};
|