hekireki 0.8.5 → 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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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-Dcg9ZO7c.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,17 +1761,29 @@ 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
1789
  function snakeToCamel(name) {
@@ -1828,80 +1840,98 @@ function makeColumnExpr(field, provider, imports, enums) {
1828
1840
  const rest = baseExpr.slice(parenIdx + 1);
1829
1841
  return rest === ")" ? `${baseFnName}('${colName}')` : `${baseFnName}('${colName}', ${rest}`;
1830
1842
  }
1843
+ const SQL_IMPORT = {
1844
+ pkg: "drizzle-orm",
1845
+ kind: "named",
1846
+ name: "sql"
1847
+ };
1831
1848
  function resolveDefaultValue(dflt, fieldType, provider) {
1832
1849
  if (dflt === void 0 || dflt === null) return {
1833
1850
  chain: "",
1834
- needsSql: false,
1835
- needsCuid: false
1851
+ imports: []
1836
1852
  };
1837
1853
  if (isFieldDefault(dflt)) switch (dflt.name) {
1838
1854
  case "autoincrement": return {
1839
1855
  chain: "",
1840
- needsSql: false,
1841
- needsCuid: false
1856
+ imports: []
1842
1857
  };
1843
1858
  case "now":
1844
1859
  if (provider === "sqlite") return {
1845
1860
  chain: ".default(sql`(unixepoch() * 1000)`)",
1846
- needsSql: true,
1847
- needsCuid: false
1861
+ imports: [SQL_IMPORT]
1848
1862
  };
1849
1863
  if (provider === "mysql") return {
1850
1864
  chain: ".default(sql`CURRENT_TIMESTAMP(3)`)",
1851
- needsSql: true,
1852
- needsCuid: false
1865
+ imports: [SQL_IMPORT]
1853
1866
  };
1854
1867
  return {
1855
1868
  chain: ".defaultNow()",
1856
- needsSql: false,
1857
- needsCuid: false
1869
+ imports: []
1858
1870
  };
1859
1871
  case "uuid": return {
1860
1872
  chain: ".$defaultFn(() => crypto.randomUUID())",
1861
- needsSql: false,
1862
- needsCuid: false
1873
+ imports: []
1863
1874
  };
1864
- case "cuid": return {
1875
+ case "cuid": return dflt.args[0] === 2 ? {
1865
1876
  chain: ".$defaultFn(() => createId())",
1866
- needsSql: false,
1867
- 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
+ }]
1868
1905
  };
1869
1906
  case "dbgenerated":
1870
1907
  if (typeof dflt.args[0] === "string") return {
1871
1908
  chain: `.default(sql\`${dflt.args[0]}\`)`,
1872
- needsSql: true,
1873
- needsCuid: false
1909
+ imports: [SQL_IMPORT]
1874
1910
  };
1875
1911
  return {
1876
1912
  chain: "",
1877
- needsSql: false,
1878
- needsCuid: false
1913
+ imports: []
1879
1914
  };
1880
1915
  default: return {
1881
1916
  chain: "",
1882
- needsSql: false,
1883
- needsCuid: false
1917
+ imports: []
1884
1918
  };
1885
1919
  }
1886
1920
  if (typeof dflt === "string") return {
1887
1921
  chain: `.default('${dflt}')`,
1888
- needsSql: false,
1889
- needsCuid: false
1922
+ imports: []
1890
1923
  };
1891
1924
  if (typeof dflt === "number") return {
1892
1925
  chain: fieldType === "Decimal" ? `.default('${dflt}')` : `.default(${dflt})`,
1893
- needsSql: false,
1894
- needsCuid: false
1926
+ imports: []
1895
1927
  };
1896
1928
  if (typeof dflt === "boolean") return {
1897
1929
  chain: `.default(${dflt})`,
1898
- needsSql: false,
1899
- needsCuid: false
1930
+ imports: []
1900
1931
  };
1901
1932
  return {
1902
1933
  chain: "",
1903
- needsSql: false,
1904
- needsCuid: false
1934
+ imports: []
1905
1935
  };
1906
1936
  }
1907
1937
  function resolveUpdatedAtDefault(provider) {
@@ -1920,8 +1950,7 @@ function resolveUpdatedAtDefault(provider) {
1920
1950
  }
1921
1951
  function makeDefaultChain(dflt, fieldType, provider, imports) {
1922
1952
  const result = resolveDefaultValue(dflt, fieldType, provider);
1923
- if (result.needsSql) imports.orm.add("sql");
1924
- if (result.needsCuid) addExternal(imports, "@paralleldrive/cuid2", "createId");
1953
+ for (const req of result.imports) applyImport(imports, req);
1925
1954
  return result.chain;
1926
1955
  }
1927
1956
  const PRISMA_ACTION_MAP = {
@@ -2574,7 +2603,7 @@ function collectCompositeIndexTags(model, indexes) {
2574
2603
  return map;
2575
2604
  }, /* @__PURE__ */ new Map());
2576
2605
  }
2577
- const GO_INITIALISMS = new Set([
2606
+ const GO_INITIALISMS = /* @__PURE__ */ new Set([
2578
2607
  "acl",
2579
2608
  "api",
2580
2609
  "ascii",
@@ -2943,7 +2972,7 @@ function toPascalCase(name) {
2943
2972
  function toModuleName(modelName) {
2944
2973
  return toSnakeCase(modelName);
2945
2974
  }
2946
- const NON_EQ_PRISMA_TYPES = new Set(["Float"]);
2975
+ const NON_EQ_PRISMA_TYPES = /* @__PURE__ */ new Set(["Float"]);
2947
2976
  function canDeriveEq(fields) {
2948
2977
  return fields.filter((f) => f.kind !== "object").every((f) => !NON_EQ_PRISMA_TYPES.has(f.type));
2949
2978
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hekireki",
3
- "version": "0.8.5",
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",