hekireki 0.8.4 → 0.8.6

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/README.md CHANGED
@@ -530,6 +530,26 @@ export const postRelations = relations(post, ({ one }) => ({
530
530
  }))
531
531
  ```
532
532
 
533
+ #### ID default functions
534
+
535
+ For Drizzle, Prisma `@default(...)` ID generators are emitted as client-side `$defaultFn` calls. Some require an extra package — install it in your project:
536
+
537
+ | Prisma default | Generated call | Package to install |
538
+ | ---------------------------------------- | --------------------- | ---------------------------------------------- |
539
+ | `@default(uuid())` / `@default(uuid(4))` | `crypto.randomUUID()` | — (Node/Web built-in) |
540
+ | `@default(cuid())` / `@default(cuid(1))` | `cuid()` | `npm i cuid` |
541
+ | `@default(cuid(2))` | `createId()` | `npm i @paralleldrive/cuid2` |
542
+ | `@default(nanoid())` | `nanoid()` | `npm i nanoid` (>= 5.0.9, or >= 3.3.8 for CJS) |
543
+ | `@default(ulid())` | `ulid()` | `npm i ulidx` |
544
+
545
+ Notes:
546
+
547
+ - **`cuid()` uses cuid v1**, which its author has deprecated in favor of cuid v2 ([npm `cuid`](https://www.npmjs.com/package/cuid)). It is emitted only when you explicitly write `@default(cuid())`; for new schemas prefer `@default(cuid(2))`.
548
+ - **`ulid()` maps to [`ulidx`](https://www.npmjs.com/package/ulidx)** (an actively maintained, crypto-backed drop-in for `ulid`).
549
+ - `@default(uuid(7))` is currently emitted as `crypto.randomUUID()` (UUID v4); native v7 support is planned.
550
+ - `@default(nanoid(n))` length argument is not yet applied — the default length is used.
551
+ - Inserts that bypass the ORM (raw SQL, bulk load) won't run `$defaultFn`; add a database-level `DEFAULT` for those paths.
552
+
533
553
  ### Mermaid
534
554
 
535
555
  ```mermaid
package/dist/bin/ajv.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/ajv.ts
4
4
  registerGenerator("ajv");
5
5
  //#endregion
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/arktype.ts
4
4
  registerGenerator("arktype");
5
5
  //#endregion
package/dist/bin/dbml.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/dbml.ts
4
4
  registerGenerator("dbml");
5
5
  //#endregion
package/dist/bin/docs.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/docs.ts
4
4
  registerGenerator("docs");
5
5
  //#endregion
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/drizzle.ts
4
4
  registerGenerator("drizzle");
5
5
  //#endregion
package/dist/bin/ecto.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/ecto.ts
4
4
  registerGenerator("ecto");
5
5
  //#endregion
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/effect.ts
4
4
  registerGenerator("effect");
5
5
  //#endregion
package/dist/bin/gorm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/gorm.ts
4
4
  registerGenerator("gorm");
5
5
  //#endregion
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/mermaid-er.ts
4
4
  registerGenerator("mermaid-er");
5
5
  //#endregion
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/sea-orm.ts
4
4
  registerGenerator("sea-orm");
5
5
  //#endregion
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/sqlalchemy.ts
4
4
  registerGenerator("sqlalchemy");
5
5
  //#endregion
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/typebox.ts
4
4
  registerGenerator("typebox");
5
5
  //#endregion
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/valibot.ts
4
4
  registerGenerator("valibot");
5
5
  //#endregion
package/dist/bin/zod.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as registerGenerator } from "../bin-5xZho8bJ.js";
2
+ import { t as registerGenerator } from "../bin-DLQOqGdU.js";
3
3
  //#region src/bin/zod.ts
4
4
  registerGenerator("zod");
5
5
  //#endregion
@@ -163,7 +163,7 @@ function parseDocumentWithoutAnnotations(documentation) {
163
163
  "@t.",
164
164
  "@j."
165
165
  ];
166
- const annotationExact = new Set([
166
+ const annotationExact = /* @__PURE__ */ new Set([
167
167
  "@z",
168
168
  "@v",
169
169
  "@a",
@@ -183,7 +183,7 @@ function stripAnnotations(doc) {
183
183
  "@t.",
184
184
  "@j."
185
185
  ];
186
- const annotationExact = new Set([
186
+ const annotationExact = /* @__PURE__ */ new Set([
187
187
  "@z",
188
188
  "@v",
189
189
  "@a",
@@ -1067,7 +1067,7 @@ const ModelAction = {
1067
1067
  function isFieldDefault$1(v) {
1068
1068
  return typeof v === "object" && v !== null && "name" in v && "args" in v;
1069
1069
  }
1070
- const fieldDirectiveMap = new Map([
1070
+ const fieldDirectiveMap = /* @__PURE__ */ new Map([
1071
1071
  ["isUnique", "@unique"],
1072
1072
  ["isId", "@id"],
1073
1073
  ["hasDefaultValue", "@default"],
@@ -1761,21 +1761,43 @@ function createImports() {
1761
1761
  ext: /* @__PURE__ */ new Map()
1762
1762
  };
1763
1763
  }
1764
- function addExternal(imports, pkg, fn) {
1765
- const fns = imports.ext.get(pkg) ?? /* @__PURE__ */ new Set();
1766
- fns.add(fn);
1767
- imports.ext.set(pkg, fns);
1764
+ function applyImport(imports, req) {
1765
+ if (req.pkg === "drizzle-orm") {
1766
+ imports.orm.add(req.name);
1767
+ return;
1768
+ }
1769
+ const entry = imports.ext.get(req.pkg) ?? { named: /* @__PURE__ */ new Set() };
1770
+ const next = req.kind === "default" ? {
1771
+ named: entry.named,
1772
+ default: req.name
1773
+ } : {
1774
+ named: entry.named.add(req.name),
1775
+ default: entry.default
1776
+ };
1777
+ imports.ext.set(req.pkg, next);
1768
1778
  }
1769
1779
  function generateImports(imports, provider) {
1770
1780
  const mod = provider === "postgresql" ? "drizzle-orm/pg-core" : provider === "mysql" ? "drizzle-orm/mysql-core" : "drizzle-orm/sqlite-core";
1771
1781
  return [
1772
1782
  imports.core.size > 0 ? `import { ${[...imports.core].sort().join(", ")} } from '${mod}'` : "",
1773
1783
  imports.orm.size > 0 ? `import { ${[...imports.orm].sort().join(", ")} } from 'drizzle-orm'` : "",
1774
- ...[...imports.ext.entries()].map(([pkg, fns]) => `import { ${[...fns].sort().join(", ")} } from '${pkg}'`)
1784
+ ...[...imports.ext.entries()].map(([pkg, entry]) => {
1785
+ return `import ${[entry.default, entry.named.size > 0 ? `{ ${[...entry.named].sort().join(", ")} }` : void 0].filter((c) => c !== void 0).join(", ")} from '${pkg}'`;
1786
+ })
1775
1787
  ].filter(Boolean).join("\n");
1776
1788
  }
1777
- function toCamelCase(name) {
1778
- return name.charAt(0).toLowerCase() + name.slice(1);
1789
+ function snakeToCamel(name) {
1790
+ return name.replace(/_+([a-zA-Z0-9])/g, (_, c) => c.toUpperCase());
1791
+ }
1792
+ function resolveTableName(model) {
1793
+ return model.dbName ?? makeSnakeCase(model.name);
1794
+ }
1795
+ function resolveVarName(model) {
1796
+ return snakeToCamel(resolveTableName(model));
1797
+ }
1798
+ function resolveVarNameByType(type, models) {
1799
+ const target = models.find((m) => m.name === type);
1800
+ return snakeToCamel(target ? resolveTableName(target) : makeSnakeCase(type));
1779
1801
  }
1780
1802
  function isFieldDefault(v) {
1781
1803
  return typeof v === "object" && v !== null && "name" in v;
@@ -1818,80 +1840,98 @@ function makeColumnExpr(field, provider, imports, enums) {
1818
1840
  const rest = baseExpr.slice(parenIdx + 1);
1819
1841
  return rest === ")" ? `${baseFnName}('${colName}')` : `${baseFnName}('${colName}', ${rest}`;
1820
1842
  }
1843
+ const SQL_IMPORT = {
1844
+ pkg: "drizzle-orm",
1845
+ kind: "named",
1846
+ name: "sql"
1847
+ };
1821
1848
  function resolveDefaultValue(dflt, fieldType, provider) {
1822
1849
  if (dflt === void 0 || dflt === null) return {
1823
1850
  chain: "",
1824
- needsSql: false,
1825
- needsCuid: false
1851
+ imports: []
1826
1852
  };
1827
1853
  if (isFieldDefault(dflt)) switch (dflt.name) {
1828
1854
  case "autoincrement": return {
1829
1855
  chain: "",
1830
- needsSql: false,
1831
- needsCuid: false
1856
+ imports: []
1832
1857
  };
1833
1858
  case "now":
1834
1859
  if (provider === "sqlite") return {
1835
1860
  chain: ".default(sql`(unixepoch() * 1000)`)",
1836
- needsSql: true,
1837
- needsCuid: false
1861
+ imports: [SQL_IMPORT]
1838
1862
  };
1839
1863
  if (provider === "mysql") return {
1840
1864
  chain: ".default(sql`CURRENT_TIMESTAMP(3)`)",
1841
- needsSql: true,
1842
- needsCuid: false
1865
+ imports: [SQL_IMPORT]
1843
1866
  };
1844
1867
  return {
1845
1868
  chain: ".defaultNow()",
1846
- needsSql: false,
1847
- needsCuid: false
1869
+ imports: []
1848
1870
  };
1849
1871
  case "uuid": return {
1850
1872
  chain: ".$defaultFn(() => crypto.randomUUID())",
1851
- needsSql: false,
1852
- needsCuid: false
1873
+ imports: []
1853
1874
  };
1854
- case "cuid": return {
1875
+ case "cuid": return dflt.args[0] === 2 ? {
1855
1876
  chain: ".$defaultFn(() => createId())",
1856
- needsSql: false,
1857
- needsCuid: true
1877
+ imports: [{
1878
+ pkg: "@paralleldrive/cuid2",
1879
+ kind: "named",
1880
+ name: "createId"
1881
+ }]
1882
+ } : {
1883
+ chain: ".$defaultFn(() => cuid())",
1884
+ imports: [{
1885
+ pkg: "cuid",
1886
+ kind: "default",
1887
+ name: "cuid"
1888
+ }]
1889
+ };
1890
+ case "nanoid": return {
1891
+ chain: ".$defaultFn(() => nanoid())",
1892
+ imports: [{
1893
+ pkg: "nanoid",
1894
+ kind: "named",
1895
+ name: "nanoid"
1896
+ }]
1897
+ };
1898
+ case "ulid": return {
1899
+ chain: ".$defaultFn(() => ulid())",
1900
+ imports: [{
1901
+ pkg: "ulidx",
1902
+ kind: "named",
1903
+ name: "ulid"
1904
+ }]
1858
1905
  };
1859
1906
  case "dbgenerated":
1860
1907
  if (typeof dflt.args[0] === "string") return {
1861
1908
  chain: `.default(sql\`${dflt.args[0]}\`)`,
1862
- needsSql: true,
1863
- needsCuid: false
1909
+ imports: [SQL_IMPORT]
1864
1910
  };
1865
1911
  return {
1866
1912
  chain: "",
1867
- needsSql: false,
1868
- needsCuid: false
1913
+ imports: []
1869
1914
  };
1870
1915
  default: return {
1871
1916
  chain: "",
1872
- needsSql: false,
1873
- needsCuid: false
1917
+ imports: []
1874
1918
  };
1875
1919
  }
1876
1920
  if (typeof dflt === "string") return {
1877
1921
  chain: `.default('${dflt}')`,
1878
- needsSql: false,
1879
- needsCuid: false
1922
+ imports: []
1880
1923
  };
1881
1924
  if (typeof dflt === "number") return {
1882
1925
  chain: fieldType === "Decimal" ? `.default('${dflt}')` : `.default(${dflt})`,
1883
- needsSql: false,
1884
- needsCuid: false
1926
+ imports: []
1885
1927
  };
1886
1928
  if (typeof dflt === "boolean") return {
1887
1929
  chain: `.default(${dflt})`,
1888
- needsSql: false,
1889
- needsCuid: false
1930
+ imports: []
1890
1931
  };
1891
1932
  return {
1892
1933
  chain: "",
1893
- needsSql: false,
1894
- needsCuid: false
1934
+ imports: []
1895
1935
  };
1896
1936
  }
1897
1937
  function resolveUpdatedAtDefault(provider) {
@@ -1910,8 +1950,7 @@ function resolveUpdatedAtDefault(provider) {
1910
1950
  }
1911
1951
  function makeDefaultChain(dflt, fieldType, provider, imports) {
1912
1952
  const result = resolveDefaultValue(dflt, fieldType, provider);
1913
- if (result.needsSql) imports.orm.add("sql");
1914
- if (result.needsCuid) addExternal(imports, "@paralleldrive/cuid2", "createId");
1953
+ for (const req of result.imports) applyImport(imports, req);
1915
1954
  return result.chain;
1916
1955
  }
1917
1956
  const PRISMA_ACTION_MAP = {
@@ -1921,17 +1960,17 @@ const PRISMA_ACTION_MAP = {
1921
1960
  NoAction: "no action",
1922
1961
  SetDefault: "set default"
1923
1962
  };
1924
- function makeFkReference(field, model) {
1963
+ function makeFkReference(field, model, models) {
1925
1964
  const relField = model.fields.find((f) => f.kind === "object" && f.relationFromFields && f.relationFromFields.includes(field.name));
1926
1965
  if (!(relField?.relationFromFields && relField.relationToFields)) return "";
1927
1966
  if (relField.type === model.name) return "";
1928
- const targetVar = toCamelCase(relField.type);
1967
+ const targetVar = resolveVarNameByType(relField.type, models);
1929
1968
  const toCol = relField.relationToFields[0] ?? "id";
1930
1969
  const onDelete = relField.relationOnDelete;
1931
1970
  const drizzleAction = onDelete ? PRISMA_ACTION_MAP[onDelete] : void 0;
1932
1971
  return `.references(() => ${targetVar}.${toCol}${drizzleAction ? `, { onDelete: '${drizzleAction}' }` : ""})`;
1933
1972
  }
1934
- function makeColumn(field, model, provider, imports, enums) {
1973
+ function makeColumn(field, model, models, provider, imports, enums) {
1935
1974
  if (field.kind === "object") return null;
1936
1975
  if (field.kind === "unsupported") return `// unsupported type: ${field.name}`;
1937
1976
  const isAutoincrement = isFieldDefault(field.default) && field.default.name === "autoincrement";
@@ -1941,7 +1980,7 @@ function makeColumn(field, model, provider, imports, enums) {
1941
1980
  field.isId && !hasCompositePK ? isAutoincrement && provider === "sqlite" ? ".primaryKey({ autoIncrement: true })" : ".primaryKey()" : "",
1942
1981
  field.isRequired && !field.isId && !(isAutoincrement && provider === "postgresql") ? ".notNull()" : "",
1943
1982
  field.isUnique ? ".unique()" : "",
1944
- makeFkReference(field, model),
1983
+ makeFkReference(field, model, models),
1945
1984
  isAutoincrement ? provider === "mysql" ? ".autoincrement()" : "" : field.isUpdatedAt && (field.default === void 0 || field.default === null) ? (() => {
1946
1985
  const r = resolveUpdatedAtDefault(provider);
1947
1986
  if (r.needsSql) imports.orm.add("sql");
@@ -1972,18 +2011,18 @@ function makeCompositeConstraints(model, imports, indexes, tableName) {
1972
2011
  ].filter((l) => l !== null);
1973
2012
  return all.length > 0 ? all.join(", ") : null;
1974
2013
  }
1975
- function makeTable(model, provider, imports, enums, indexes) {
2014
+ function makeTable(model, models, provider, imports, enums, indexes) {
1976
2015
  const tableFunc = provider === "postgresql" ? "pgTable" : provider === "mysql" ? "mysqlTable" : "sqliteTable";
1977
2016
  imports.core.add(tableFunc);
1978
- const varName = toCamelCase(model.name);
1979
- const tableName = model.dbName ?? makeSnakeCase(model.name);
1980
- const columns = model.fields.map((field) => makeColumn(field, model, provider, imports, enums)).filter((c) => c !== null).join(", ");
2017
+ const varName = resolveVarName(model);
2018
+ const tableName = resolveTableName(model);
2019
+ const columns = model.fields.map((field) => makeColumn(field, model, models, provider, imports, enums)).filter((c) => c !== null).join(", ");
1981
2020
  const constraints = makeCompositeConstraints(model, imports, indexes, tableName);
1982
2021
  return constraints ? `export const ${varName} = ${tableFunc}('${tableName}', { ${columns} }, (table) => [${constraints}])` : `export const ${varName} = ${tableFunc}('${tableName}', { ${columns} })`;
1983
2022
  }
1984
- function makeRelationField(field, model, _models, relFields) {
1985
- const targetVar = toCamelCase(field.type);
1986
- const modelVar = toCamelCase(model.name);
2023
+ function makeRelationField(field, model, models, relFields) {
2024
+ const targetVar = resolveVarNameByType(field.type, models);
2025
+ const modelVar = resolveVarName(model);
1987
2026
  const needsAlias = relFields.filter((f) => f.type === field.type).length > 1 && field.relationName;
1988
2027
  if (field.relationFromFields && field.relationFromFields.length > 0) {
1989
2028
  const fromCol = field.relationFromFields[0];
@@ -2005,7 +2044,7 @@ function makeRelations(models, imports) {
2005
2044
  return modelsWithRels.map((model) => {
2006
2045
  const relFields = model.fields.filter((f) => f.kind === "object");
2007
2046
  const fieldLines = relFields.map((field) => makeRelationField(field, model, models, relFields)).join(", ");
2008
- const modelVar = toCamelCase(model.name);
2047
+ const modelVar = resolveVarName(model);
2009
2048
  const needsOne = relFields.some((f) => f.relationFromFields && f.relationFromFields.length > 0 || !f.isList);
2010
2049
  const needsMany = relFields.some((f) => f.isList && !(f.relationFromFields && f.relationFromFields.length > 0));
2011
2050
  return `export const ${modelVar}Relations = relations(${modelVar}, ({ ${[needsOne ? "one" : "", needsMany ? "many" : ""].filter(Boolean).join(", ")} }) => ({ ${fieldLines} }))`;
@@ -2016,7 +2055,7 @@ function makeRelations(models, imports) {
2016
2055
  function drizzleSchema(datamodel, provider, indexes) {
2017
2056
  const db = resolveDbProvider(provider);
2018
2057
  const imports = createImports();
2019
- const tableLines = datamodel.models.map((model) => makeTable(model, db, imports, datamodel.enums, indexes));
2058
+ const tableLines = datamodel.models.map((model) => makeTable(model, datamodel.models, db, imports, datamodel.enums, indexes));
2020
2059
  const relationsLines = makeRelations(datamodel.models, imports);
2021
2060
  const tableLinesWithGap = tableLines.flatMap((line, i) => i < tableLines.length - 1 ? [line, ""] : [line]);
2022
2061
  const relationsLinesWithGap = relationsLines.flatMap((line, i) => i < relationsLines.length - 1 ? [line, ""] : [line]);
@@ -2564,7 +2603,7 @@ function collectCompositeIndexTags(model, indexes) {
2564
2603
  return map;
2565
2604
  }, /* @__PURE__ */ new Map());
2566
2605
  }
2567
- const GO_INITIALISMS = new Set([
2606
+ const GO_INITIALISMS = /* @__PURE__ */ new Set([
2568
2607
  "acl",
2569
2608
  "api",
2570
2609
  "ascii",
@@ -2735,8 +2774,8 @@ const RELATIONSHIPS = {
2735
2774
  "zero-many": "}o",
2736
2775
  many: "}|"
2737
2776
  };
2738
- function erRelationLine(relation) {
2739
- return ` ${relation.from.model} ${RELATIONSHIPS[relation.from.cardinality]}--${RELATIONSHIPS[relation.to.cardinality]} ${relation.to.model} : "(${relation.from.field}) - (${relation.to.field})"`;
2777
+ function erRelationLine(relation, resolveName = (model) => model) {
2778
+ return ` ${resolveName(relation.from.model)} ${RELATIONSHIPS[relation.from.cardinality]}--${RELATIONSHIPS[relation.to.cardinality]} ${resolveName(relation.to.model)} : "(${relation.from.field}) - (${relation.to.field})"`;
2740
2779
  }
2741
2780
  function modelFields(model) {
2742
2781
  const fkFields = new Set(model.fields.filter((f) => f.relationFromFields && f.relationFromFields.length > 0).flatMap((f) => f.relationFromFields ?? []));
@@ -2750,7 +2789,7 @@ function modelFields(model) {
2750
2789
  }
2751
2790
  function modelInfo(model) {
2752
2791
  return [
2753
- ` ${model.name} {`,
2792
+ ` ${model.dbName ?? model.name} {`,
2754
2793
  ...modelFields(model),
2755
2794
  " }"
2756
2795
  ];
@@ -2760,7 +2799,8 @@ function modelInfo(model) {
2760
2799
  const ER_HEADER = ["```mermaid", "erDiagram"];
2761
2800
  const ER_FOOTER = ["```"];
2762
2801
  function erContent(models) {
2763
- const relations = mergeERRelations(models).map(erRelationLine);
2802
+ const resolveName = (model) => models.find((m) => m.name === model)?.dbName ?? model;
2803
+ const relations = mergeERRelations(models).map((relation) => erRelationLine(relation, resolveName));
2764
2804
  const modelInfos = models.flatMap(modelInfo);
2765
2805
  return [
2766
2806
  ...ER_HEADER,
@@ -2932,7 +2972,7 @@ function toPascalCase(name) {
2932
2972
  function toModuleName(modelName) {
2933
2973
  return toSnakeCase(modelName);
2934
2974
  }
2935
- const NON_EQ_PRISMA_TYPES = new Set(["Float"]);
2975
+ const NON_EQ_PRISMA_TYPES = /* @__PURE__ */ new Set(["Float"]);
2936
2976
  function canDeriveEq(fields) {
2937
2977
  return fields.filter((f) => f.kind !== "object").every((f) => !NON_EQ_PRISMA_TYPES.has(f.type));
2938
2978
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hekireki",
3
- "version": "0.8.4",
3
+ "version": "0.8.6",
4
4
  "description": "Hekireki is a tool that generates validation schemas for Zod, Valibot, ArkType, and Effect Schema, as well as ER diagrams and DBML, from Prisma schemas annotated with comments.",
5
5
  "keywords": [
6
6
  "ajv",
@@ -55,28 +55,28 @@
55
55
  "access": "public"
56
56
  },
57
57
  "dependencies": {
58
- "@hono/node-server": "^2.0.4",
58
+ "@hono/node-server": "^2.0.6",
59
59
  "@prisma/generator-helper": "^7.8.0",
60
60
  "@resvg/resvg-js": "^2.6.2",
61
61
  "@softwaretechnik/dbml-renderer": "^1.0.31",
62
- "hono": "^4.12.25",
63
- "oxfmt": "^0.54.0"
62
+ "hono": "^4.12.27",
63
+ "oxfmt": "^0.56.0"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@paralleldrive/cuid2": "^3.3.0",
67
67
  "@prisma/client": "^7.8.0",
68
68
  "@sinclair/typebox": "^0.34.49",
69
- "@types/node": "^25.9.3",
70
- "@typescript/native-preview": "7.0.0-dev.20260611.2",
69
+ "@types/node": "^26.0.1",
70
+ "@typescript/native-preview": "7.0.0-dev.20260624.1",
71
71
  "ajv": "^8.20.0",
72
- "arktype": "^2.2.0",
73
- "better-auth": "^1.6.17",
72
+ "arktype": "^2.2.1",
73
+ "better-auth": "^1.6.20",
74
74
  "drizzle-kit": "^0.31.10",
75
75
  "drizzle-orm": "^0.45.2",
76
- "effect": "^3.21.3",
76
+ "effect": "^3.21.4",
77
77
  "json-schema-to-ts": "^3.1.1",
78
78
  "prisma": "^7.8.0",
79
- "tsdown": "^0.22.2",
79
+ "tsdown": "^0.22.3",
80
80
  "tsx": "^4.22.4",
81
81
  "typescript": "^6.0.3",
82
82
  "valibot": "1.4.1",