@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 CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  __toESM,
7
7
  generateSchema,
8
8
  resolveEnvOptions
9
- } from "./chunk-QO7QQCAM.js";
9
+ } from "./chunk-NQ3MLSYQ.js";
10
10
 
11
11
  // node_modules/dotenv/package.json
12
12
  var require_package = __commonJS({
@@ -1037,10 +1037,7 @@ function sanitizeIdentifier(name) {
1037
1037
  return sanitized;
1038
1038
  }
1039
1039
  function sanitizePropertyName(name) {
1040
- const leadingUnderscore = name.startsWith("_") ? "_" : "";
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
- // integer (int2, int4, integer)
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) => ["int2", "int4", "integer"].includes(f.type),
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", "timestamp"];
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 registry = createDefaultRegistry();
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
@@ -5,7 +5,7 @@ import {
5
5
  generateSchemaFromData,
6
6
  normalizeApiResponse,
7
7
  resolveEnvOptions
8
- } from "./chunk-QO7QQCAM.js";
8
+ } from "./chunk-NQ3MLSYQ.js";
9
9
  export {
10
10
  generateSchema,
11
11
  generateSchemaCode,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/db-schema-sync",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.2",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",