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 +20 -0
- package/dist/bin/ajv.js +1 -1
- package/dist/bin/arktype.js +1 -1
- package/dist/bin/dbml.js +1 -1
- package/dist/bin/docs.js +1 -1
- package/dist/bin/drizzle.js +1 -1
- package/dist/bin/ecto.js +1 -1
- package/dist/bin/effect.js +1 -1
- package/dist/bin/gorm.js +1 -1
- package/dist/bin/mermaid-er.js +1 -1
- package/dist/bin/sea-orm.js +1 -1
- package/dist/bin/sqlalchemy.js +1 -1
- package/dist/bin/typebox.js +1 -1
- package/dist/bin/valibot.js +1 -1
- package/dist/bin/zod.js +1 -1
- package/dist/{bin-Dcg9ZO7c.js → bin-DLQOqGdU.js} +70 -41
- package/package.json +10 -10
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
package/dist/bin/arktype.js
CHANGED
package/dist/bin/dbml.js
CHANGED
package/dist/bin/docs.js
CHANGED
package/dist/bin/drizzle.js
CHANGED
package/dist/bin/ecto.js
CHANGED
package/dist/bin/effect.js
CHANGED
package/dist/bin/gorm.js
CHANGED
package/dist/bin/mermaid-er.js
CHANGED
package/dist/bin/sea-orm.js
CHANGED
package/dist/bin/sqlalchemy.js
CHANGED
package/dist/bin/typebox.js
CHANGED
package/dist/bin/valibot.js
CHANGED
package/dist/bin/zod.js
CHANGED
|
@@ -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
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
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,
|
|
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
|
-
|
|
1835
|
-
needsCuid: false
|
|
1851
|
+
imports: []
|
|
1836
1852
|
};
|
|
1837
1853
|
if (isFieldDefault(dflt)) switch (dflt.name) {
|
|
1838
1854
|
case "autoincrement": return {
|
|
1839
1855
|
chain: "",
|
|
1840
|
-
|
|
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
|
-
|
|
1847
|
-
needsCuid: false
|
|
1861
|
+
imports: [SQL_IMPORT]
|
|
1848
1862
|
};
|
|
1849
1863
|
if (provider === "mysql") return {
|
|
1850
1864
|
chain: ".default(sql`CURRENT_TIMESTAMP(3)`)",
|
|
1851
|
-
|
|
1852
|
-
needsCuid: false
|
|
1865
|
+
imports: [SQL_IMPORT]
|
|
1853
1866
|
};
|
|
1854
1867
|
return {
|
|
1855
1868
|
chain: ".defaultNow()",
|
|
1856
|
-
|
|
1857
|
-
needsCuid: false
|
|
1869
|
+
imports: []
|
|
1858
1870
|
};
|
|
1859
1871
|
case "uuid": return {
|
|
1860
1872
|
chain: ".$defaultFn(() => crypto.randomUUID())",
|
|
1861
|
-
|
|
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
|
-
|
|
1867
|
-
|
|
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
|
-
|
|
1873
|
-
needsCuid: false
|
|
1909
|
+
imports: [SQL_IMPORT]
|
|
1874
1910
|
};
|
|
1875
1911
|
return {
|
|
1876
1912
|
chain: "",
|
|
1877
|
-
|
|
1878
|
-
needsCuid: false
|
|
1913
|
+
imports: []
|
|
1879
1914
|
};
|
|
1880
1915
|
default: return {
|
|
1881
1916
|
chain: "",
|
|
1882
|
-
|
|
1883
|
-
needsCuid: false
|
|
1917
|
+
imports: []
|
|
1884
1918
|
};
|
|
1885
1919
|
}
|
|
1886
1920
|
if (typeof dflt === "string") return {
|
|
1887
1921
|
chain: `.default('${dflt}')`,
|
|
1888
|
-
|
|
1889
|
-
needsCuid: false
|
|
1922
|
+
imports: []
|
|
1890
1923
|
};
|
|
1891
1924
|
if (typeof dflt === "number") return {
|
|
1892
1925
|
chain: fieldType === "Decimal" ? `.default('${dflt}')` : `.default(${dflt})`,
|
|
1893
|
-
|
|
1894
|
-
needsCuid: false
|
|
1926
|
+
imports: []
|
|
1895
1927
|
};
|
|
1896
1928
|
if (typeof dflt === "boolean") return {
|
|
1897
1929
|
chain: `.default(${dflt})`,
|
|
1898
|
-
|
|
1899
|
-
needsCuid: false
|
|
1930
|
+
imports: []
|
|
1900
1931
|
};
|
|
1901
1932
|
return {
|
|
1902
1933
|
chain: "",
|
|
1903
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
63
|
-
"oxfmt": "^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": "^
|
|
70
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
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.
|
|
73
|
-
"better-auth": "^1.6.
|
|
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.
|
|
76
|
+
"effect": "^3.21.4",
|
|
77
77
|
"json-schema-to-ts": "^3.1.1",
|
|
78
78
|
"prisma": "^7.8.0",
|
|
79
|
-
"tsdown": "^0.22.
|
|
79
|
+
"tsdown": "^0.22.3",
|
|
80
80
|
"tsx": "^4.22.4",
|
|
81
81
|
"typescript": "^6.0.3",
|
|
82
82
|
"valibot": "1.4.1",
|