@ailnaf/zoddb 0.0.0-stage → 0.2.0

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.
Files changed (93) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/LICENSE +15 -0
  3. package/README.md +440 -2
  4. package/dist/aggregate.d.ts +42 -0
  5. package/dist/aggregate.d.ts.map +1 -0
  6. package/dist/aggregate.js +77 -0
  7. package/dist/aggregate.js.map +1 -0
  8. package/dist/auth-schema.d.ts +26 -0
  9. package/dist/auth-schema.d.ts.map +1 -0
  10. package/dist/auth-schema.js +139 -0
  11. package/dist/auth-schema.js.map +1 -0
  12. package/dist/better-auth-adapter.d.ts +21 -0
  13. package/dist/better-auth-adapter.d.ts.map +1 -0
  14. package/dist/better-auth-adapter.js +175 -0
  15. package/dist/better-auth-adapter.js.map +1 -0
  16. package/dist/cli.d.ts +3 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +341 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/config.d.ts +22 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +52 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/db.d.ts +183 -0
  25. package/dist/db.d.ts.map +1 -0
  26. package/dist/db.js +1063 -0
  27. package/dist/db.js.map +1 -0
  28. package/dist/ddl.d.ts +21 -0
  29. package/dist/ddl.d.ts.map +1 -0
  30. package/dist/ddl.js +127 -0
  31. package/dist/ddl.js.map +1 -0
  32. package/dist/dev.d.ts +9 -0
  33. package/dist/dev.d.ts.map +1 -0
  34. package/dist/dev.js +21 -0
  35. package/dist/dev.js.map +1 -0
  36. package/dist/errors.d.ts +63 -0
  37. package/dist/errors.d.ts.map +1 -0
  38. package/dist/errors.js +122 -0
  39. package/dist/errors.js.map +1 -0
  40. package/dist/filter.d.ts +67 -0
  41. package/dist/filter.d.ts.map +1 -0
  42. package/dist/filter.js +230 -0
  43. package/dist/filter.js.map +1 -0
  44. package/dist/graph.d.ts +54 -0
  45. package/dist/graph.d.ts.map +1 -0
  46. package/dist/graph.js +52 -0
  47. package/dist/graph.js.map +1 -0
  48. package/dist/index.d.ts +8 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +6 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/init.d.ts +12 -0
  53. package/dist/init.d.ts.map +1 -0
  54. package/dist/init.js +62 -0
  55. package/dist/init.js.map +1 -0
  56. package/dist/migrate.d.ts +58 -0
  57. package/dist/migrate.d.ts.map +1 -0
  58. package/dist/migrate.js +447 -0
  59. package/dist/migrate.js.map +1 -0
  60. package/dist/migrations.d.ts +80 -0
  61. package/dist/migrations.d.ts.map +1 -0
  62. package/dist/migrations.js +281 -0
  63. package/dist/migrations.js.map +1 -0
  64. package/dist/relation-graph.d.ts +50 -0
  65. package/dist/relation-graph.d.ts.map +1 -0
  66. package/dist/relation-graph.js +93 -0
  67. package/dist/relation-graph.js.map +1 -0
  68. package/dist/relations.d.ts +128 -0
  69. package/dist/relations.d.ts.map +1 -0
  70. package/dist/relations.js +21 -0
  71. package/dist/relations.js.map +1 -0
  72. package/dist/schema.d.ts +247 -0
  73. package/dist/schema.d.ts.map +1 -0
  74. package/dist/schema.js +584 -0
  75. package/dist/schema.js.map +1 -0
  76. package/dist/studio/page.d.ts +3 -0
  77. package/dist/studio/page.d.ts.map +1 -0
  78. package/dist/studio/page.js +708 -0
  79. package/dist/studio/page.js.map +1 -0
  80. package/dist/studio/server.d.ts +26 -0
  81. package/dist/studio/server.d.ts.map +1 -0
  82. package/dist/studio/server.js +415 -0
  83. package/dist/studio/server.js.map +1 -0
  84. package/dist/table.d.ts +156 -0
  85. package/dist/table.d.ts.map +1 -0
  86. package/dist/table.js +165 -0
  87. package/dist/table.js.map +1 -0
  88. package/dist/where.d.ts +18 -0
  89. package/dist/where.d.ts.map +1 -0
  90. package/dist/where.js +76 -0
  91. package/dist/where.js.map +1 -0
  92. package/docs/api.md +476 -0
  93. package/package.json +70 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAA;CACpC;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAEpF;AAED,eAAO,MAAM,aAAa,MAAO,OAAO,KAAG,CAAC,IAAI,WAC0B,CAAA;AAE1E,eAAO,MAAM,SAAS,MAAO,MAAM,KAAG,MACW,CAAA;AAIjD,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,CAAA;CACtF,CAAA;AAED,qBAAa,aAAa,CACxB,IAAI,GAAG,OAAO,EACd,GAAG,GAAG,IAAI,EACV,SAAS,SAAS,OAAO,GAAG,KAAK,EACjC,WAAW,SAAS,OAAO,GAAG,KAAK;IAOjC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IACnC,QAAQ,CAAC,YAAY,EAAE,OAAO;IAC9B,QAAQ,CAAC,WAAW,EAAE,OAAO;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO;IACxB,QAAQ,CAAC,YAAY,EAAE,OAAO;IAC9B,QAAQ,CAAC,UAAU,EAAE,OAAO;IAC5B,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS;IAdvC,SAAiB,QAAQ,EAAE;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAC;QAAC,UAAU,EAAE,WAAW,CAAA;KAAE,CAAA;IAC/F,yDAAyD;IACzD,MAAM,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;IAEpD,YACW,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAC5B,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAM,GAAG,SAAqB,EACtC,YAAY,GAAE,OAAe,EAC7B,WAAW,GAAE,OAAe,EAC5B,MAAM,GAAE,OAAe,EACvB,YAAY,GAAE,OAAmB,EACjC,UAAU,GAAE,OAAe,EAC3B,GAAG,GAAE,SAAS,GAAG,SAAqB,EACtC,OAAO,GAAE,OAAO,GAAG,SAAqB,EAC/C;IAEJ,0CAA0C;IAC1C,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAEnE;IAED,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,CAEtD;IAED,EAAE,IAAI,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAErD;IAED,OAAO,CAAC,CAAC,EAAE,WAAW,GAAG,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAEvE;IAED,wCAAwC;IACxC,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAEzD;IAED,yCAAyC;IACzC,UAAU,CACR,MAAM,EAAE,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EACvD,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;KAAO,GAC9C,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAGlD;CACF;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;AAGjF,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;AAC9G,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;AAC7G,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAC7E,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,KAAK,GACrD,KAAK,CAAA;AAET,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AAIlD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CACnC;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAElF,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IACpD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;IACtC,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAA;IACnC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAA;IACnC,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAA;IAC9B,yBAAyB;IACzB,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7F,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAA;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAA;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAA;CACxC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,UAAU,EAAE;IAsBjE,IAAI;IAAY,KAAK,QADtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,MAAM,WAAW,CAAC,CAAC,OAAO,EAAE,aAAa,MAAM,OAAO,OAAO,kBAAkB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EAEpJ;AAED,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,GAAG,KAAK,CAAA;AAEpG,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,GAAG,KAAK,CAAA;AAExG,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAC9C,QAAQ,CACN;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACrF;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CACvF,GACD,KAAK,CAAA;AAET,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;AAE1E,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,SAAS;IAC/C,6CAA6C;IAC7C,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAA;IAC1C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,CAAA;IAC/B,OAAO,CAAC,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAA;QACtC,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,OAAO,CAAA;KACjB,EAAE,CAAA;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAC1C;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,EACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,EACV,IAAI,GAAE,YAAY,CAAC,CAAC,CAAM,GACzB,KAAK,CAAC,CAAC,CAAC,CA8DV;AAID,eAAO,MAAM,EAAE;IACb,IAAI;IACJ,IAAI;IACJ,OAAO,YAAY,MAAM;IACzB,GAAG;IACH,2DAA2D;IAC3D,MAAM;IAIN,0CAA0C;IAC1C,OAAO;IACP,IAAI;IACJ,+CAA+C;IAC/C,WAAW;IAKX,sEAAsE;IACtE,IAAI;IAIJ,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,UAAU,CAAC;IAEtC,sCAAsC;IACtC,KAAK,GAAG,CAAC,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,KAEhE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC;IAChF,KAAK;IACL,2DAA2D;IAC3D,IAAI,GAAG,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,YAAY,MAAM,UAAU,CAAC;CAOnF,CAAA"}
package/dist/table.js ADDED
@@ -0,0 +1,165 @@
1
+ import { z } from 'zod';
2
+ import { RowValidationError } from './errors.js';
3
+ export function sql(strings, ...params) {
4
+ return { _tag: 'sql', strings: [...strings], params };
5
+ }
6
+ export const isSqlFragment = (v) => typeof v === 'object' && v !== null && v._tag === 'sql';
7
+ export const snakeCase = (s) => s.replace(/[A-Z]/g, c => `_${c.toLowerCase()}`);
8
+ export class ColumnBuilder {
9
+ schema;
10
+ sqlType;
11
+ column;
12
+ nullableFlag;
13
+ defaultFlag;
14
+ pkFlag;
15
+ defaultValue;
16
+ uniqueFlag;
17
+ ref;
18
+ enumDef;
19
+ /** 由 table() 盖章,供 .references(() => other.id) 反查表名/列名 */
20
+ _owner;
21
+ constructor(schema, sqlType, column = undefined, nullableFlag = false, defaultFlag = false, pkFlag = false, defaultValue = undefined, uniqueFlag = false, ref = undefined, enumDef = undefined) {
22
+ this.schema = schema;
23
+ this.sqlType = sqlType;
24
+ this.column = column;
25
+ this.nullableFlag = nullableFlag;
26
+ this.defaultFlag = defaultFlag;
27
+ this.pkFlag = pkFlag;
28
+ this.defaultValue = defaultValue;
29
+ this.uniqueFlag = uniqueFlag;
30
+ this.ref = ref;
31
+ this.enumDef = enumDef;
32
+ }
33
+ /** 覆盖 DB 列名(默认 camelCase → snake_case) */
34
+ as(column) {
35
+ return new ColumnBuilder(this.schema, this.sqlType, column, this.nullableFlag, this.defaultFlag, this.pkFlag, this.defaultValue, this.uniqueFlag, this.ref, this.enumDef);
36
+ }
37
+ nullable() {
38
+ return new ColumnBuilder(this.schema, this.sqlType, this.column, true, this.defaultFlag, this.pkFlag, this.defaultValue, this.uniqueFlag, this.ref, this.enumDef);
39
+ }
40
+ pk() {
41
+ return new ColumnBuilder(this.schema, this.sqlType, this.column, this.nullableFlag, this.defaultFlag, true, this.defaultValue, this.uniqueFlag, this.ref, this.enumDef);
42
+ }
43
+ default(v) {
44
+ return new ColumnBuilder(this.schema, this.sqlType, this.column, this.nullableFlag, true, this.pkFlag, v, this.uniqueFlag, this.ref, this.enumDef);
45
+ }
46
+ /** 单列唯一约束(PG 自动命名 {table}_{col}_key) */
47
+ unique() {
48
+ return new ColumnBuilder(this.schema, this.sqlType, this.column, this.nullableFlag, this.defaultFlag, this.pkFlag, this.defaultValue, true, this.ref, this.enumDef);
49
+ }
50
+ /** 外键;目标列必须来自 table() 定义(延迟解析,支持前向引用) */
51
+ references(target, opts = {}) {
52
+ const ref = opts.onDelete ? { thunk: target, onDelete: opts.onDelete } : { thunk: target };
53
+ return new ColumnBuilder(this.schema, this.sqlType, this.column, this.nullableFlag, this.defaultFlag, this.pkFlag, this.defaultValue, this.uniqueFlag, ref, this.enumDef);
54
+ }
55
+ }
56
+ /**
57
+ * 生成按表定制的映射函数:字面量 key → 单态对象形状,避免通用遍历/动态查表。
58
+ * key 来自开发者写的 schema,JSON.stringify 转义后内联,不接受用户输入。
59
+ */
60
+ export function compilePlanMappers(name, plan) {
61
+ const fast = ['const o = {};'];
62
+ const valid = ['const o = {};'];
63
+ plan.forEach((p, i) => {
64
+ const db = JSON.stringify(p.dbKey);
65
+ const out = JSON.stringify(p.outKey);
66
+ const read = p.dbKey === p.outKey
67
+ ? `const v${i} = row[${db}];`
68
+ : `let v${i} = row[${db}]; if (v${i} === undefined) v${i} = row[${out}];`;
69
+ fast.push(read, `o[${out}] = v${i};`);
70
+ valid.push(read, `{ const p = parsers[${i}].safeParse(v${i});`, ` if (!p.success) throw new Err(tableName, index, p.error.issues, ${out}, v${i} === undefined);`, ` o[${out}] = p.data; }`);
71
+ });
72
+ fast.push('return o;');
73
+ valid.push('return o;');
74
+ const makeFast = new Function('row', fast.join('\n'));
75
+ const makeValid = new Function('row', 'index', 'parsers', 'tableName', 'Err', valid.join('\n'));
76
+ return { fast: makeFast, valid: makeValid };
77
+ }
78
+ export function table(name, columns, opts = {}) {
79
+ const entries = Object.entries(columns);
80
+ const plan = entries.map(([outKey, col]) => ({
81
+ outKey,
82
+ dbKey: col.column ?? snakeCase(outKey),
83
+ nullable: col.nullableFlag,
84
+ parse: col.nullableFlag ? z.union([col.schema, z.null()]) : col.schema,
85
+ sqlType: col.sqlType,
86
+ pk: col.pkFlag,
87
+ unique: col.uniqueFlag,
88
+ defaultValue: col.defaultValue,
89
+ ref: col.ref,
90
+ enum: col.enumDef,
91
+ }));
92
+ const compositePk = opts.primaryKey ? [...opts.primaryKey] : [];
93
+ if (compositePk.length > 0) {
94
+ if (compositePk.length < 2)
95
+ throw new Error(`table ${name}: primaryKey 数组至少需要 2 列`);
96
+ if (new Set(compositePk).size !== compositePk.length) {
97
+ throw new Error(`table ${name}: primaryKey 不能包含重复列`);
98
+ }
99
+ for (const key of compositePk) {
100
+ const col = columns[key];
101
+ if (!col)
102
+ throw new Error(`table ${name}: primaryKey 引用了未知列 ${key}`);
103
+ if (col.pkFlag)
104
+ throw new Error(`table ${name}: primaryKey 数组不能与列 .pk() 混用`);
105
+ if (col.nullableFlag)
106
+ throw new Error(`table ${name}: primaryKey 列 ${key} 不能 nullable`);
107
+ }
108
+ }
109
+ const shape = {};
110
+ for (const [key, col] of entries) {
111
+ const base = col.nullableFlag ? z.union([col.schema, z.null()]) : col.schema;
112
+ shape[key] = col.nullableFlag || col.defaultFlag ? base.optional() : base;
113
+ }
114
+ const compiled = compilePlanMappers(name, plan);
115
+ const parsers = plan.map(p => p.parse);
116
+ const dbKeyOf = (k) => columns[k].column ?? snakeCase(k);
117
+ const tbl = {
118
+ _tag: 'table',
119
+ name,
120
+ columns,
121
+ __plan: plan,
122
+ __primaryKey: compositePk.map(k => columns[k].column ?? snakeCase(k)),
123
+ insertSchema: z.strictObject(shape),
124
+ updateSchema: z.strictObject(shape).partial(),
125
+ __mapFast: compiled.fast,
126
+ __mapValid: (row, index) => compiled.valid(row, index, parsers, name, RowValidationError),
127
+ __uniques: (opts.unique ?? []).map(keys => keys.map(dbKeyOf)),
128
+ __indexes: (opts.indexes ?? []).map(idx => {
129
+ if (idx.columns.length === 0)
130
+ throw new Error(`table ${name}: index 至少需要一列`);
131
+ const cols = idx.columns.map(dbKeyOf);
132
+ return { name: idx.name ?? `${name}_${cols.join('_')}_idx`, columns: cols, unique: idx.unique === true };
133
+ }),
134
+ __checks: Object.entries(opts.checks ?? {}).map(([checkName, expression]) => ({
135
+ name: checkName,
136
+ expression,
137
+ })),
138
+ };
139
+ for (const [outKey, col] of entries)
140
+ col._owner = { table: tbl, outKey };
141
+ return tbl;
142
+ }
143
+ // ---------------------------------------------------------------- pg 类型 → zod
144
+ export const pg = {
145
+ uuid: () => new ColumnBuilder(z.uuid(), 'uuid'),
146
+ text: () => new ColumnBuilder(z.string(), 'text'),
147
+ varchar: (length) => new ColumnBuilder(z.string().max(length ?? Number.POSITIVE_INFINITY), `varchar${length ? `(${length})` : ''}`),
148
+ int: () => new ColumnBuilder(z.int(), 'int4'),
149
+ /** postgres.js 把 int8 以字符串返回(避免精度丢失),这里转成 bigint;入参两种都收 */
150
+ bigint: () => new ColumnBuilder(z.union([z.bigint(), z.string().regex(/^-?\d+$/)]).transform(v => (typeof v === 'bigint' ? v : BigInt(v))), 'int8'),
151
+ /** numeric 由 postgres.js 以字符串返回,避免精度丢失 */
152
+ numeric: () => new ColumnBuilder(z.string(), 'numeric'),
153
+ bool: () => new ColumnBuilder(z.boolean(), 'bool'),
154
+ /** 只提供 timestamptz:timestamp(no tz) 是时区事故源头 */
155
+ timestamptz: () => new ColumnBuilder(z.union([z.date(), z.iso.datetime()]).transform(v => (v instanceof Date ? v : new Date(v))), 'timestamptz'),
156
+ /** postgres.js 把 date 解析成 Date(UTC 零点),对外统一成 YYYY-MM-DD 字符串,避免时区歧义 */
157
+ date: () => new ColumnBuilder(z.union([z.iso.date(), z.date()]).transform(v => (v instanceof Date ? v.toISOString().slice(0, 10) : v)), 'date'),
158
+ jsonb: (schema) => new ColumnBuilder(schema, 'jsonb'),
159
+ /** 数组:pg.array(pg.text()) → text[] */
160
+ array: (item) => new ColumnBuilder(z.array(item.schema), `${item.sqlType}[]`),
161
+ bytea: () => new ColumnBuilder(z.custom(v => v instanceof Uint8Array), 'bytea'),
162
+ /** PG enum:type 名 + 值列表;建类型由 createSchema/diffSchema 负责 */
163
+ enum: (enumName, values) => new ColumnBuilder(z.enum(values), enumName, undefined, false, false, false, undefined, false, undefined, { name: enumName, values: [...values] }),
164
+ };
165
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * better-auth Where[] → 参数化 SQL 片段。
3
+ * 只生成文本与参数;标识符由保留字安全转义,值全部走 $n 绑定。
4
+ */
5
+ export interface WhereCondition {
6
+ field: string;
7
+ value: unknown;
8
+ operator?: string | undefined;
9
+ connector?: 'AND' | 'OR' | undefined;
10
+ mode?: 'sensitive' | 'insensitive' | undefined;
11
+ }
12
+ export interface SqlChunk {
13
+ text: string;
14
+ params: unknown[];
15
+ }
16
+ /** 同一 connector 组内 AND/OR,组间 AND(与 better-auth 官方 adapter 语义一致) */
17
+ export declare function compileWhere(where: readonly WhereCondition[] | undefined, column: (field: string) => string, params?: unknown[]): SqlChunk;
18
+ //# sourceMappingURL=where.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where.d.ts","sourceRoot":"","sources":["../src/where.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAA;IACpC,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAA;CAC/C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,EAAE,CAAA;CAClB;AAsDD,mEAAmE;AACnE,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,EAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EACjC,MAAM,GAAE,OAAO,EAAO,GACrB,QAAQ,CAaV"}
package/dist/where.js ADDED
@@ -0,0 +1,76 @@
1
+ const quoteIdent = (s) => `"${s.replace(/"/g, '""')}"`;
2
+ function makePlaceholder(params, value) {
3
+ if (value === undefined)
4
+ throw new Error('where 参数为 undefined:拒绝生成 SQL');
5
+ params.push(value);
6
+ return `$${params.length}`;
7
+ }
8
+ function compileCondition(w, column, params) {
9
+ const col = quoteIdent(column(w.field));
10
+ const op = (w.operator ?? 'eq').toLowerCase();
11
+ const value = w.value;
12
+ const arr = Array.isArray(value) ? value : [value];
13
+ const insensitive = w.mode === 'insensitive'
14
+ && (typeof value === 'string' || (Array.isArray(value) && value.every(v => typeof v === 'string')));
15
+ const ph = (v) => makePlaceholder(params, v);
16
+ switch (op) {
17
+ case 'eq':
18
+ if (value === null)
19
+ return `${col} is null`;
20
+ if (insensitive)
21
+ return `lower(${col}) = lower(${ph(value)})`;
22
+ return `${col} = ${ph(value)}`;
23
+ case 'ne':
24
+ if (value === null)
25
+ return `${col} is not null`;
26
+ if (insensitive)
27
+ return `lower(${col}) <> lower(${ph(value)})`;
28
+ return `${col} <> ${ph(value)}`;
29
+ case 'gt': return `${col} > ${ph(value)}`;
30
+ case 'gte': return `${col} >= ${ph(value)}`;
31
+ case 'lt': return `${col} < ${ph(value)}`;
32
+ case 'lte': return `${col} <= ${ph(value)}`;
33
+ case 'in': {
34
+ if (arr.length === 0)
35
+ return 'false';
36
+ const values = insensitive ? arr.map(v => String(v).toLowerCase()) : arr;
37
+ return insensitive
38
+ ? `lower(${col}) = any(${ph(values)})`
39
+ : `${col} = any(${ph(values)})`;
40
+ }
41
+ case 'not_in': {
42
+ if (arr.length === 0)
43
+ return 'true';
44
+ const values = insensitive ? arr.map(v => String(v).toLowerCase()) : arr;
45
+ return insensitive
46
+ ? `not (lower(${col}) = any(${ph(values)}))`
47
+ : `not (${col} = any(${ph(values)}))`;
48
+ }
49
+ case 'contains': return `${col} ${insensitive ? 'ilike' : 'like'} ${ph(`%${String(value)}%`)}`;
50
+ case 'starts_with': return `${col} ${insensitive ? 'ilike' : 'like'} ${ph(`${String(value)}%`)}`;
51
+ case 'ends_with': return `${col} ${insensitive ? 'ilike' : 'like'} ${ph(`%${String(value)}`)}`;
52
+ default:
53
+ throw new Error(`不支持的 where 操作符 "${op}"`);
54
+ }
55
+ }
56
+ /** 同一 connector 组内 AND/OR,组间 AND(与 better-auth 官方 adapter 语义一致) */
57
+ export function compileWhere(where, column, params = []) {
58
+ if (!where || where.length === 0)
59
+ return { text: '', params };
60
+ const ands = [];
61
+ const ors = [];
62
+ for (const w of where) {
63
+ const sql = compileCondition(w, column, params);
64
+ if (w.connector === 'OR')
65
+ ors.push(sql);
66
+ else
67
+ ands.push(sql);
68
+ }
69
+ const groups = [];
70
+ if (ands.length)
71
+ groups.push(`(${ands.join(' and ')})`);
72
+ if (ors.length)
73
+ groups.push(`(${ors.join(' or ')})`);
74
+ return { text: groups.join(' and '), params };
75
+ }
76
+ //# sourceMappingURL=where.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where.js","sourceRoot":"","sources":["../src/where.ts"],"names":[],"mappings":"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"}