shapedef 1.0.27 → 1.0.28
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.map +1 -1
- package/dist/cjs/translations/postgres.js +13 -6
- package/dist/cjs/translations/postgres.js.map +1 -1
- package/dist/esm/translations/postgres.d.ts.map +1 -1
- package/dist/esm/translations/postgres.js +13 -6
- package/dist/esm/translations/postgres.js.map +1 -1
- package/package.json +1 -1
- package/src/translations/postgres.test.ts +24 -0
- package/src/translations/postgres.ts +19 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA+B,MAAM,UAAU,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA+B,MAAM,UAAU,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAoFF,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,EAAE,UAAS,eAAoB,WAwCnE,CAAC"}
|
|
@@ -48,10 +48,12 @@ const pgType = (shape) => {
|
|
|
48
48
|
return "BYTEA";
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
|
-
const pgColumnDef = (colName, shape, options, overrideType) => {
|
|
51
|
+
const pgColumnDef = (colName, shape, options, overrideType, skipPrimaryKey) => {
|
|
52
52
|
const parts = [`"${colName}"`, overrideType ?? pgType(shape)];
|
|
53
53
|
if (shape.anno.primary) {
|
|
54
|
-
|
|
54
|
+
if (!skipPrimaryKey) {
|
|
55
|
+
parts.push("PRIMARY KEY");
|
|
56
|
+
}
|
|
55
57
|
}
|
|
56
58
|
else if (!shape.anno.optional) {
|
|
57
59
|
parts.push("NOT NULL");
|
|
@@ -85,10 +87,15 @@ const postgres = (shape, options = {}) => {
|
|
|
85
87
|
enumTypeNames.set(colName, `"${enumTypeName}"`);
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
|
-
const
|
|
89
|
-
.
|
|
90
|
-
.
|
|
91
|
-
const
|
|
90
|
+
const primaryKeys = Object.entries(shape.rec)
|
|
91
|
+
.filter(([, v]) => v.anno.primary)
|
|
92
|
+
.map(([k]) => k);
|
|
93
|
+
const multiPk = primaryKeys.length > 1;
|
|
94
|
+
const colLines = Object.entries(shape.rec).map(([k, v]) => ` ${pgColumnDef(k, v, options, enumTypeNames.get(k), multiPk)}`);
|
|
95
|
+
if (multiPk) {
|
|
96
|
+
colLines.push(` PRIMARY KEY (${primaryKeys.map((k) => `"${k}"`).join(", ")})`);
|
|
97
|
+
}
|
|
98
|
+
const tableStatement = `CREATE TABLE IF NOT EXISTS "${tableName}" (\n${colLines.join(",\n")}\n)`;
|
|
92
99
|
return enumStatements.length > 0 ?
|
|
93
100
|
[...enumStatements, tableStatement].join(";\n")
|
|
94
101
|
: tableStatement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":";;;AAMA,MAAM,oBAAoB,GAAG,CAC3B,KAAY,EACsC,EAAE,CACpD,KAAK,CAAC,IAAI,KAAK,OAAO;IACtB,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;IACpB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;AAEnD,MAAM,MAAM,GAAG,CAAC,KAAY,EAAU,EAAE;IACtC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,SAAS,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,kBAAkB,CAAC;QAC5B,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB,KAAK,KAAK;YACR,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC;QACjB,KAAK,aAAa,CAAC;QACnB,KAAK,eAAe,CAAC;QACrB,KAAK,gBAAgB;YACnB,OAAO,SAAS,CAAC;QACnB,KAAK,aAAa;YAChB,OAAO,MAAM,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,SAAS,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC;QACpD,CAAC;QACD,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,UAAU,KAAK,CAAC,IAAI,GAAG,CAAC;QACjC,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAClB,OAAe,EACf,KAAY,EACZ,OAAwB,EACxB,YAAqB,
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA+B,MAAM,UAAU,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA+B,MAAM,UAAU,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAoFF,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,EAAE,UAAS,eAAoB,WAwCnE,CAAC"}
|
|
@@ -48,10 +48,12 @@ const pgType = (shape) => {
|
|
|
48
48
|
return "BYTEA";
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
|
-
const pgColumnDef = (colName, shape, options, overrideType) => {
|
|
51
|
+
const pgColumnDef = (colName, shape, options, overrideType, skipPrimaryKey) => {
|
|
52
52
|
const parts = [`"${colName}"`, overrideType ?? pgType(shape)];
|
|
53
53
|
if (shape.anno.primary) {
|
|
54
|
-
|
|
54
|
+
if (!skipPrimaryKey) {
|
|
55
|
+
parts.push("PRIMARY KEY");
|
|
56
|
+
}
|
|
55
57
|
}
|
|
56
58
|
else if (!shape.anno.optional) {
|
|
57
59
|
parts.push("NOT NULL");
|
|
@@ -85,10 +87,15 @@ const postgres = (shape, options = {}) => {
|
|
|
85
87
|
enumTypeNames.set(colName, `"${enumTypeName}"`);
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
|
-
const
|
|
89
|
-
.
|
|
90
|
-
.
|
|
91
|
-
const
|
|
90
|
+
const primaryKeys = Object.entries(shape.rec)
|
|
91
|
+
.filter(([, v]) => v.anno.primary)
|
|
92
|
+
.map(([k]) => k);
|
|
93
|
+
const multiPk = primaryKeys.length > 1;
|
|
94
|
+
const colLines = Object.entries(shape.rec).map(([k, v]) => ` ${pgColumnDef(k, v, options, enumTypeNames.get(k), multiPk)}`);
|
|
95
|
+
if (multiPk) {
|
|
96
|
+
colLines.push(` PRIMARY KEY (${primaryKeys.map((k) => `"${k}"`).join(", ")})`);
|
|
97
|
+
}
|
|
98
|
+
const tableStatement = `CREATE TABLE IF NOT EXISTS "${tableName}" (\n${colLines.join(",\n")}\n)`;
|
|
92
99
|
return enumStatements.length > 0 ?
|
|
93
100
|
[...enumStatements, tableStatement].join(";\n")
|
|
94
101
|
: tableStatement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":";;;AAMA,MAAM,oBAAoB,GAAG,CAC3B,KAAY,EACsC,EAAE,CACpD,KAAK,CAAC,IAAI,KAAK,OAAO;IACtB,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;IACpB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;AAEnD,MAAM,MAAM,GAAG,CAAC,KAAY,EAAU,EAAE;IACtC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,SAAS,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,kBAAkB,CAAC;QAC5B,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB,KAAK,KAAK;YACR,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC;QACjB,KAAK,aAAa,CAAC;QACnB,KAAK,eAAe,CAAC;QACrB,KAAK,gBAAgB;YACnB,OAAO,SAAS,CAAC;QACnB,KAAK,aAAa;YAChB,OAAO,MAAM,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,SAAS,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC;QACpD,CAAC;QACD,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,UAAU,KAAK,CAAC,IAAI,GAAG,CAAC;QACjC,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAClB,OAAe,EACf,KAAY,EACZ,OAAwB,EACxB,YAAqB,
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/translations/postgres.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -249,6 +249,30 @@ describe("postgres", (it) => {
|
|
|
249
249
|
);
|
|
250
250
|
});
|
|
251
251
|
|
|
252
|
+
it("generates composite PRIMARY KEY constraint for multiple primary keys", () => {
|
|
253
|
+
expect(
|
|
254
|
+
postgres(
|
|
255
|
+
annotate.named(
|
|
256
|
+
shapes.mapping({
|
|
257
|
+
tenant_id: annotate.primary(shapes.int()),
|
|
258
|
+
user_id: annotate.primary(shapes.int()),
|
|
259
|
+
name: shapes.str(),
|
|
260
|
+
}),
|
|
261
|
+
"TenantUser",
|
|
262
|
+
),
|
|
263
|
+
),
|
|
264
|
+
).toBe(
|
|
265
|
+
[
|
|
266
|
+
`CREATE TABLE IF NOT EXISTS "TenantUser" (`,
|
|
267
|
+
` "tenant_id" INTEGER,`,
|
|
268
|
+
` "user_id" INTEGER,`,
|
|
269
|
+
` "name" TEXT NOT NULL,`,
|
|
270
|
+
` PRIMARY KEY ("tenant_id", "user_id")`,
|
|
271
|
+
`)`,
|
|
272
|
+
].join("\n"),
|
|
273
|
+
);
|
|
274
|
+
});
|
|
275
|
+
|
|
252
276
|
it("returns column type for unnamed mappings", () => {
|
|
253
277
|
expect(postgres(shapes.mapping({ x: shapes.int() }))).toBe("JSONB");
|
|
254
278
|
});
|
|
@@ -61,10 +61,13 @@ const pgColumnDef = (
|
|
|
61
61
|
shape: Shape,
|
|
62
62
|
options: PostgresOptions,
|
|
63
63
|
overrideType?: string,
|
|
64
|
+
skipPrimaryKey?: boolean,
|
|
64
65
|
): string => {
|
|
65
66
|
const parts: string[] = [`"${colName}"`, overrideType ?? pgType(shape)];
|
|
66
67
|
if (shape.anno.primary) {
|
|
67
|
-
|
|
68
|
+
if (!skipPrimaryKey) {
|
|
69
|
+
parts.push("PRIMARY KEY");
|
|
70
|
+
}
|
|
68
71
|
} else if (!shape.anno.optional) {
|
|
69
72
|
parts.push("NOT NULL");
|
|
70
73
|
}
|
|
@@ -102,10 +105,21 @@ export const postgres = (shape: Shape, options: PostgresOptions = {}) => {
|
|
|
102
105
|
}
|
|
103
106
|
}
|
|
104
107
|
|
|
105
|
-
const
|
|
106
|
-
.
|
|
107
|
-
.
|
|
108
|
-
const
|
|
108
|
+
const primaryKeys = Object.entries(shape.rec)
|
|
109
|
+
.filter(([, v]) => v.anno.primary)
|
|
110
|
+
.map(([k]) => k);
|
|
111
|
+
const multiPk = primaryKeys.length > 1;
|
|
112
|
+
|
|
113
|
+
const colLines = Object.entries(shape.rec).map(
|
|
114
|
+
([k, v]) =>
|
|
115
|
+
` ${pgColumnDef(k, v, options, enumTypeNames.get(k), multiPk)}`,
|
|
116
|
+
);
|
|
117
|
+
if (multiPk) {
|
|
118
|
+
colLines.push(
|
|
119
|
+
` PRIMARY KEY (${primaryKeys.map((k) => `"${k}"`).join(", ")})`,
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
const tableStatement = `CREATE TABLE IF NOT EXISTS "${tableName}" (\n${colLines.join(",\n")}\n)`;
|
|
109
123
|
|
|
110
124
|
return enumStatements.length > 0 ?
|
|
111
125
|
[...enumStatements, tableStatement].join(";\n")
|