@lark-apaas/db-schema-sync 0.1.0-alpha.1 → 0.1.0-alpha.2
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/bin.js +1 -1
- package/dist/{chunk-QO7QQCAM.js → chunk-NQ3MLSYQ.js} +52 -12
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
@@ -1037,10 +1037,7 @@ function sanitizeIdentifier(name) {
|
|
|
1037
1037
|
return sanitized;
|
|
1038
1038
|
}
|
|
1039
1039
|
function sanitizePropertyName(name) {
|
|
1040
|
-
|
|
1041
|
-
const stripped = leadingUnderscore ? name.slice(1) : name;
|
|
1042
|
-
const base = sanitizeIdentifier(stripped);
|
|
1043
|
-
return `${leadingUnderscore}${base}`;
|
|
1040
|
+
return sanitizeIdentifier(name);
|
|
1044
1041
|
}
|
|
1045
1042
|
function getUniqueIdentifier(name, usedIdentifiers) {
|
|
1046
1043
|
const base = sanitizeIdentifier(name);
|
|
@@ -1077,6 +1074,7 @@ function normalizeField(field, systemFieldNamesToRemove) {
|
|
|
1077
1074
|
}
|
|
1078
1075
|
function normalizeRelationship(rel) {
|
|
1079
1076
|
return {
|
|
1077
|
+
constraintName: rel.constraintName || void 0,
|
|
1080
1078
|
fieldNames: rel.fieldName,
|
|
1081
1079
|
targetTableName: rel.fkTableName,
|
|
1082
1080
|
targetFieldNames: rel.fkFieldName,
|
|
@@ -1251,10 +1249,17 @@ var primitiveMappers = [
|
|
|
1251
1249
|
generate: (f) => `text("${escapeDoubleQuote(f.fieldName)}")`,
|
|
1252
1250
|
imports: () => [{ name: "text", from: PG_CORE }]
|
|
1253
1251
|
},
|
|
1254
|
-
//
|
|
1252
|
+
// smallint (int2)
|
|
1253
|
+
{
|
|
1254
|
+
name: "smallint",
|
|
1255
|
+
match: (f) => f.type === "int2",
|
|
1256
|
+
generate: (f) => `smallint("${escapeDoubleQuote(f.fieldName)}")`,
|
|
1257
|
+
imports: () => [{ name: "smallint", from: PG_CORE }]
|
|
1258
|
+
},
|
|
1259
|
+
// integer (int4, integer)
|
|
1255
1260
|
{
|
|
1256
1261
|
name: "integer",
|
|
1257
|
-
match: (f) => ["
|
|
1262
|
+
match: (f) => ["int4", "integer"].includes(f.type),
|
|
1258
1263
|
generate: (f) => `integer("${escapeDoubleQuote(f.fieldName)}")`,
|
|
1259
1264
|
imports: () => [{ name: "integer", from: PG_CORE }]
|
|
1260
1265
|
},
|
|
@@ -1307,6 +1312,13 @@ var primitiveMappers = [
|
|
|
1307
1312
|
generate: (f) => `jsonb("${escapeDoubleQuote(f.fieldName)}")`,
|
|
1308
1313
|
imports: () => [{ name: "jsonb", from: PG_CORE }]
|
|
1309
1314
|
},
|
|
1315
|
+
// timestamp (without timezone) — uses drizzle-orm timestamp, not customTimestamptz
|
|
1316
|
+
{
|
|
1317
|
+
name: "timestamp",
|
|
1318
|
+
match: (f) => f.type === "timestamp",
|
|
1319
|
+
generate: (f) => `timestamp("${escapeDoubleQuote(f.fieldName)}", { mode: 'string' })`,
|
|
1320
|
+
imports: () => [{ name: "timestamp", from: PG_CORE }]
|
|
1321
|
+
},
|
|
1310
1322
|
// date
|
|
1311
1323
|
{
|
|
1312
1324
|
name: "date",
|
|
@@ -1314,6 +1326,13 @@ var primitiveMappers = [
|
|
|
1314
1326
|
generate: (f) => `date("${escapeDoubleQuote(f.fieldName)}")`,
|
|
1315
1327
|
imports: () => [{ name: "date", from: PG_CORE }]
|
|
1316
1328
|
},
|
|
1329
|
+
// timetz (time with time zone)
|
|
1330
|
+
{
|
|
1331
|
+
name: "timetz",
|
|
1332
|
+
match: (f) => f.type === "timetz",
|
|
1333
|
+
generate: (f) => `time("${escapeDoubleQuote(f.fieldName)}", { withTimezone: true })`,
|
|
1334
|
+
imports: () => [{ name: "time", from: PG_CORE }]
|
|
1335
|
+
},
|
|
1317
1336
|
// time
|
|
1318
1337
|
{
|
|
1319
1338
|
name: "time",
|
|
@@ -1331,7 +1350,7 @@ var primitiveMappers = [
|
|
|
1331
1350
|
];
|
|
1332
1351
|
|
|
1333
1352
|
// src/generator/mappers/custom-types.ts
|
|
1334
|
-
var TIMESTAMP_TYPES = ["timestamptz"
|
|
1353
|
+
var TIMESTAMP_TYPES = ["timestamptz"];
|
|
1335
1354
|
var CUSTOM_TYPE_MAP = {
|
|
1336
1355
|
user_profile: "userProfile",
|
|
1337
1356
|
file_attachment: "fileAttachment"
|
|
@@ -1385,6 +1404,17 @@ var customTypeMappers = [
|
|
|
1385
1404
|
}
|
|
1386
1405
|
];
|
|
1387
1406
|
|
|
1407
|
+
// src/generator/mappers/enum-mapper.ts
|
|
1408
|
+
function createEnumMapper(enumNameToIdentifier) {
|
|
1409
|
+
return {
|
|
1410
|
+
name: "enum",
|
|
1411
|
+
match: (f) => f.isEnum && enumNameToIdentifier.has(f.type),
|
|
1412
|
+
generate: (f) => `${enumNameToIdentifier.get(f.type)}("${escapeDoubleQuote(f.fieldName)}")`,
|
|
1413
|
+
imports: () => []
|
|
1414
|
+
// pgEnum import is added at the structural level
|
|
1415
|
+
};
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1388
1418
|
// src/generator/mappers/fallback.ts
|
|
1389
1419
|
var fallbackMapper = {
|
|
1390
1420
|
name: "fallback-text",
|
|
@@ -1394,8 +1424,11 @@ var fallbackMapper = {
|
|
|
1394
1424
|
};
|
|
1395
1425
|
|
|
1396
1426
|
// src/generator/mappers/index.ts
|
|
1397
|
-
function createDefaultRegistry() {
|
|
1427
|
+
function createDefaultRegistry(enumNameToIdentifier) {
|
|
1398
1428
|
const registry = new TypeMapperRegistry();
|
|
1429
|
+
if (enumNameToIdentifier && enumNameToIdentifier.size > 0) {
|
|
1430
|
+
registry.register(createEnumMapper(enumNameToIdentifier));
|
|
1431
|
+
}
|
|
1399
1432
|
for (const mapper of customTypeMappers) registry.register(mapper);
|
|
1400
1433
|
for (const mapper of primitiveMappers) registry.register(mapper);
|
|
1401
1434
|
registry.register(fallbackMapper);
|
|
@@ -1503,9 +1536,11 @@ function generateForeignKeyCode(rel, tableIdentifier, tableIdentifierMap) {
|
|
|
1503
1536
|
const columns = rel.fieldNames.map((f) => `table.${sanitizePropertyName(f)}`).join(", ");
|
|
1504
1537
|
const targetIdentifier = tableIdentifierMap?.get(rel.targetTableName) ?? sanitizeIdentifier(rel.targetTableName);
|
|
1505
1538
|
const foreignColumns = rel.targetFieldNames.map((f) => `${targetIdentifier}.${sanitizePropertyName(f)}`).join(", ");
|
|
1539
|
+
const namePart = rel.constraintName ? `
|
|
1540
|
+
name: "${escapeDoubleQuote(rel.constraintName)}",` : "";
|
|
1506
1541
|
let code = `foreignKey({
|
|
1507
1542
|
columns: [${columns}],
|
|
1508
|
-
foreignColumns: [${foreignColumns}]
|
|
1543
|
+
foreignColumns: [${foreignColumns}],${namePart}
|
|
1509
1544
|
})`;
|
|
1510
1545
|
if (rel.removePolicy && rel.removePolicy !== "NO_ACTION") {
|
|
1511
1546
|
code += `.onDelete("${escapeDoubleQuote(rel.removePolicy.toLowerCase())}")`;
|
|
@@ -1564,7 +1599,11 @@ ${fieldLines.join("\n")}
|
|
|
1564
1599
|
|
|
1565
1600
|
// src/generator/index.ts
|
|
1566
1601
|
function generateSchemaCode(data) {
|
|
1567
|
-
const
|
|
1602
|
+
const enumNameToIdentifier = /* @__PURE__ */ new Map();
|
|
1603
|
+
for (const enumSchema of data.enums) {
|
|
1604
|
+
enumNameToIdentifier.set(enumSchema.enumName, enumSchema.identifier);
|
|
1605
|
+
}
|
|
1606
|
+
const registry = createDefaultRegistry(enumNameToIdentifier);
|
|
1568
1607
|
const collector = new ImportCollector();
|
|
1569
1608
|
if (data.enums.length > 0) {
|
|
1570
1609
|
collector.add({ name: "pgEnum", from: "drizzle-orm/pg-core" });
|
|
@@ -1791,7 +1830,8 @@ var TYPE_RULES = [
|
|
|
1791
1830
|
{
|
|
1792
1831
|
usageName: "customTimestamptz",
|
|
1793
1832
|
definitionCheck: "const customTimestamptz = customType<",
|
|
1794
|
-
definition: CUSTOM_TIMESTAMPTZ_DEFINITION
|
|
1833
|
+
definition: CUSTOM_TIMESTAMPTZ_DEFINITION,
|
|
1834
|
+
alwaysExport: true
|
|
1795
1835
|
},
|
|
1796
1836
|
{
|
|
1797
1837
|
usageName: "userProfile",
|
|
@@ -1853,7 +1893,7 @@ var inlineTypesEnhancer = {
|
|
|
1853
1893
|
for (const rule of TYPE_RULES) {
|
|
1854
1894
|
if (usedTypes.has(rule.usageName) && !text.includes(rule.definitionCheck)) {
|
|
1855
1895
|
let def = rule.definition;
|
|
1856
|
-
if (exportCustomTypes) {
|
|
1896
|
+
if (rule.alwaysExport || exportCustomTypes) {
|
|
1857
1897
|
def = def.replace(/^(const |function |type )/gm, "export $1");
|
|
1858
1898
|
}
|
|
1859
1899
|
definitions.push(def);
|
package/dist/index.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ interface FieldSchema {
|
|
|
28
28
|
extraInfo?: Record<string, unknown>;
|
|
29
29
|
}
|
|
30
30
|
interface RelationshipSchema {
|
|
31
|
+
constraintName?: string;
|
|
31
32
|
fieldNames: string[];
|
|
32
33
|
targetTableName: string;
|
|
33
34
|
targetFieldNames: string[];
|
|
@@ -73,6 +74,7 @@ interface ApiFieldItem {
|
|
|
73
74
|
[key: string]: unknown;
|
|
74
75
|
}
|
|
75
76
|
interface ApiRelationshipItem {
|
|
77
|
+
constraintName?: string;
|
|
76
78
|
fieldName: string[];
|
|
77
79
|
fkTableName: string;
|
|
78
80
|
fkFieldName: string[];
|
package/dist/index.js
CHANGED