dsqlbase 0.0.1 → 0.1.1

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 (159) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +86 -0
  3. package/dist/client/create.d.ts +73 -0
  4. package/dist/client/create.d.ts.map +1 -0
  5. package/dist/client/create.js +82 -0
  6. package/dist/client/create.js.map +1 -0
  7. package/dist/client/database/base.d.ts +8 -0
  8. package/dist/client/database/base.d.ts.map +1 -0
  9. package/dist/client/database/base.js +13 -0
  10. package/dist/client/database/base.js.map +1 -0
  11. package/dist/client/database/client.d.ts +5 -0
  12. package/dist/client/database/client.d.ts.map +1 -0
  13. package/dist/client/database/client.js +4 -0
  14. package/dist/client/database/client.js.map +1 -0
  15. package/dist/client/database/index.d.ts +9 -0
  16. package/dist/client/database/index.d.ts.map +1 -0
  17. package/dist/client/database/index.js +3 -0
  18. package/dist/client/database/index.js.map +1 -0
  19. package/dist/client/index.d.ts +6 -0
  20. package/dist/client/index.d.ts.map +1 -0
  21. package/dist/client/index.js +5 -0
  22. package/dist/client/index.js.map +1 -0
  23. package/dist/client/model/base.d.ts +330 -0
  24. package/dist/client/model/base.d.ts.map +1 -0
  25. package/dist/client/model/base.js +7 -0
  26. package/dist/client/model/base.js.map +1 -0
  27. package/dist/client/model/client.d.ts +102 -0
  28. package/dist/client/model/client.d.ts.map +1 -0
  29. package/dist/client/model/client.js +123 -0
  30. package/dist/client/model/client.js.map +1 -0
  31. package/dist/client/model/normalizer.d.ts +19 -0
  32. package/dist/client/model/normalizer.d.ts.map +1 -0
  33. package/dist/client/model/normalizer.js +221 -0
  34. package/dist/client/model/normalizer.js.map +1 -0
  35. package/dist/index.d.ts +3 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/pg/index.d.ts +9 -0
  40. package/dist/pg/index.d.ts.map +1 -0
  41. package/dist/pg/index.js +14 -0
  42. package/dist/pg/index.js.map +1 -0
  43. package/dist/pglite/index.d.ts +9 -0
  44. package/dist/pglite/index.d.ts.map +1 -0
  45. package/dist/pglite/index.js +14 -0
  46. package/dist/pglite/index.js.map +1 -0
  47. package/dist/schema/columns/array.d.ts +16 -0
  48. package/dist/schema/columns/array.d.ts.map +1 -0
  49. package/dist/schema/columns/array.js +24 -0
  50. package/dist/schema/columns/array.js.map +1 -0
  51. package/dist/schema/columns/bigint.d.ts +11 -0
  52. package/dist/schema/columns/bigint.d.ts.map +1 -0
  53. package/dist/schema/columns/bigint.js +19 -0
  54. package/dist/schema/columns/bigint.js.map +1 -0
  55. package/dist/schema/columns/boolean.d.ts +10 -0
  56. package/dist/schema/columns/boolean.d.ts.map +1 -0
  57. package/dist/schema/columns/boolean.js +18 -0
  58. package/dist/schema/columns/boolean.js.map +1 -0
  59. package/dist/schema/columns/bytea.d.ts +8 -0
  60. package/dist/schema/columns/bytea.d.ts.map +1 -0
  61. package/dist/schema/columns/bytea.js +16 -0
  62. package/dist/schema/columns/bytea.js.map +1 -0
  63. package/dist/schema/columns/char.d.ts +10 -0
  64. package/dist/schema/columns/char.d.ts.map +1 -0
  65. package/dist/schema/columns/char.js +18 -0
  66. package/dist/schema/columns/char.js.map +1 -0
  67. package/dist/schema/columns/date.d.ts +23 -0
  68. package/dist/schema/columns/date.d.ts.map +1 -0
  69. package/dist/schema/columns/date.js +29 -0
  70. package/dist/schema/columns/date.js.map +1 -0
  71. package/dist/schema/columns/double.d.ts +13 -0
  72. package/dist/schema/columns/double.d.ts.map +1 -0
  73. package/dist/schema/columns/double.js +21 -0
  74. package/dist/schema/columns/double.js.map +1 -0
  75. package/dist/schema/columns/identity.d.ts +56 -0
  76. package/dist/schema/columns/identity.d.ts.map +1 -0
  77. package/dist/schema/columns/identity.js +65 -0
  78. package/dist/schema/columns/identity.js.map +1 -0
  79. package/dist/schema/columns/int.d.ts +11 -0
  80. package/dist/schema/columns/int.d.ts.map +1 -0
  81. package/dist/schema/columns/int.js +19 -0
  82. package/dist/schema/columns/int.js.map +1 -0
  83. package/dist/schema/columns/interval.d.ts +23 -0
  84. package/dist/schema/columns/interval.d.ts.map +1 -0
  85. package/dist/schema/columns/interval.js +40 -0
  86. package/dist/schema/columns/interval.js.map +1 -0
  87. package/dist/schema/columns/json.d.ts +9 -0
  88. package/dist/schema/columns/json.d.ts.map +1 -0
  89. package/dist/schema/columns/json.js +18 -0
  90. package/dist/schema/columns/json.js.map +1 -0
  91. package/dist/schema/columns/numeric.d.ts +11 -0
  92. package/dist/schema/columns/numeric.d.ts.map +1 -0
  93. package/dist/schema/columns/numeric.js +19 -0
  94. package/dist/schema/columns/numeric.js.map +1 -0
  95. package/dist/schema/columns/real.d.ts +13 -0
  96. package/dist/schema/columns/real.d.ts.map +1 -0
  97. package/dist/schema/columns/real.js +21 -0
  98. package/dist/schema/columns/real.js.map +1 -0
  99. package/dist/schema/columns/smallint.d.ts +11 -0
  100. package/dist/schema/columns/smallint.d.ts.map +1 -0
  101. package/dist/schema/columns/smallint.js +19 -0
  102. package/dist/schema/columns/smallint.js.map +1 -0
  103. package/dist/schema/columns/text.d.ts +9 -0
  104. package/dist/schema/columns/text.d.ts.map +1 -0
  105. package/dist/schema/columns/text.js +17 -0
  106. package/dist/schema/columns/text.js.map +1 -0
  107. package/dist/schema/columns/time.d.ts +20 -0
  108. package/dist/schema/columns/time.d.ts.map +1 -0
  109. package/dist/schema/columns/time.js +19 -0
  110. package/dist/schema/columns/time.js.map +1 -0
  111. package/dist/schema/columns/timestamp.d.ts +40 -0
  112. package/dist/schema/columns/timestamp.d.ts.map +1 -0
  113. package/dist/schema/columns/timestamp.js +48 -0
  114. package/dist/schema/columns/timestamp.js.map +1 -0
  115. package/dist/schema/columns/uuid.d.ts +17 -0
  116. package/dist/schema/columns/uuid.d.ts.map +1 -0
  117. package/dist/schema/columns/uuid.js +27 -0
  118. package/dist/schema/columns/uuid.js.map +1 -0
  119. package/dist/schema/columns/varchar.d.ts +9 -0
  120. package/dist/schema/columns/varchar.d.ts.map +1 -0
  121. package/dist/schema/columns/varchar.js +17 -0
  122. package/dist/schema/columns/varchar.js.map +1 -0
  123. package/dist/schema/domain.d.ts +19 -0
  124. package/dist/schema/domain.d.ts.map +1 -0
  125. package/dist/schema/domain.js +37 -0
  126. package/dist/schema/domain.js.map +1 -0
  127. package/dist/schema/index.d.ts +27 -0
  128. package/dist/schema/index.d.ts.map +1 -0
  129. package/dist/schema/index.js +25 -0
  130. package/dist/schema/index.js.map +1 -0
  131. package/dist/schema/namespace.d.ts +22 -0
  132. package/dist/schema/namespace.d.ts.map +1 -0
  133. package/dist/schema/namespace.js +24 -0
  134. package/dist/schema/namespace.js.map +1 -0
  135. package/dist/schema/relations.d.ts +12 -0
  136. package/dist/schema/relations.d.ts.map +1 -0
  137. package/dist/schema/relations.js +29 -0
  138. package/dist/schema/relations.js.map +1 -0
  139. package/dist/schema/sequence.d.ts +14 -0
  140. package/dist/schema/sequence.d.ts.map +1 -0
  141. package/dist/schema/sequence.js +16 -0
  142. package/dist/schema/sequence.js.map +1 -0
  143. package/dist/schema/table.d.ts +20 -0
  144. package/dist/schema/table.d.ts.map +1 -0
  145. package/dist/schema/table.js +22 -0
  146. package/dist/schema/table.js.map +1 -0
  147. package/dist/schema/utils/date.d.ts +33 -0
  148. package/dist/schema/utils/date.d.ts.map +1 -0
  149. package/dist/schema/utils/date.js +62 -0
  150. package/dist/schema/utils/date.js.map +1 -0
  151. package/dist/schema/utils/duration.d.ts +66 -0
  152. package/dist/schema/utils/duration.d.ts.map +1 -0
  153. package/dist/schema/utils/duration.js +167 -0
  154. package/dist/schema/utils/duration.js.map +1 -0
  155. package/dist/schema/utils/json.d.ts +2 -0
  156. package/dist/schema/utils/json.d.ts.map +1 -0
  157. package/dist/schema/utils/json.js +12 -0
  158. package/dist/schema/utils/json.js.map +1 -0
  159. package/package.json +34 -5
@@ -0,0 +1,27 @@
1
+ import { ColumnDefinition, sql } from "@dsqlbase/core";
2
+ export class UUIDColumnDefinition extends ColumnDefinition {
3
+ /**
4
+ * Sets `gen_random_uuid()` as the default value for this UUID column, at database level.
5
+ * @returns *`this`*
6
+ */
7
+ defaultRandom() {
8
+ this._defaultValue = sql.raw("gen_random_uuid()");
9
+ return this;
10
+ }
11
+ }
12
+ /**
13
+ * Defines a `UUID` data type column in the database schema.
14
+ *
15
+ * @param name Name of the column in database
16
+ * @returns Serializable column definition for a UUID column.
17
+ */
18
+ export function uuid(name) {
19
+ return new UUIDColumnDefinition(name, {
20
+ dataType: "uuid",
21
+ codec: {
22
+ encode: (value) => value,
23
+ decode: (value) => value,
24
+ },
25
+ });
26
+ }
27
+ //# sourceMappingURL=uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../../src/schema/columns/uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,gBAAgB,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGrE,MAAM,OAAO,oBAGX,SAAQ,gBAAgC;IACxC;;;OAGG;IACI,aAAa;QAClB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAClD,OAAO,IAAwB,CAAC;IAClC,CAAC;CACF;AAED;;;;;GAKG;AAEH,MAAM,UAAU,IAAI,CAAuB,IAAW;IACpD,OAAO,IAAI,oBAAoB,CAAsC,IAAI,EAAE;QACzE,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE;YACL,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;YACxB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;SACzB;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { ColumnConfig, ColumnDefinition } from "@dsqlbase/core";
2
+ /**
3
+ * Defines a `varchar(n)` type column in the database schema.
4
+ * @param name Name of the column in database
5
+ * @param length Maximum length of the varchar field
6
+ * @returns Serializable column definition for a varchar column.
7
+ */
8
+ export declare function varchar<const TName extends string, const TLength extends number>(name: TName, length: TLength): ColumnDefinition<TName, ColumnConfig<string, string>>;
9
+ //# sourceMappingURL=varchar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"varchar.d.ts","sourceRoot":"","sources":["../../../src/schema/columns/varchar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;;;;GAKG;AAEH,wBAAgB,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK,CAAC,OAAO,SAAS,MAAM,EAC9E,IAAI,EAAE,KAAK,EACX,MAAM,EAAE,OAAO,yDAShB"}
@@ -0,0 +1,17 @@
1
+ import { ColumnDefinition } from "@dsqlbase/core";
2
+ /**
3
+ * Defines a `varchar(n)` type column in the database schema.
4
+ * @param name Name of the column in database
5
+ * @param length Maximum length of the varchar field
6
+ * @returns Serializable column definition for a varchar column.
7
+ */
8
+ export function varchar(name, length) {
9
+ return new ColumnDefinition(name, {
10
+ dataType: `varchar(${length})`,
11
+ codec: {
12
+ encode: (value) => value,
13
+ decode: (value) => value,
14
+ },
15
+ });
16
+ }
17
+ //# sourceMappingURL=varchar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"varchar.js","sourceRoot":"","sources":["../../../src/schema/columns/varchar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;;;;GAKG;AAEH,MAAM,UAAU,OAAO,CACrB,IAAW,EACX,MAAe;IAEf,OAAO,IAAI,gBAAgB,CAAsC,IAAI,EAAE;QACrE,QAAQ,EAAE,WAAW,MAAM,GAAG;QAC9B,KAAK,EAAE;YACL,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;YACxB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;SACzB;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { AnyNamespaceDefinition, DomainDefinition } from "@dsqlbase/core";
2
+ /**
3
+ * Creates a domain definition.
4
+ * A domain is a user-defined data type that can be used to define columns in tables. It allows you to specify constraints and validation rules for the data stored in the column.
5
+ * @example
6
+ * ```ts
7
+ * const emailDomain = domain("email")
8
+ * .check((value) => sql`${value} LIKE '%@%'`, "email_format_check");
9
+ *
10
+ * const usersTable = table("users", {
11
+ * email: emailDomain.column("email"),
12
+ * });
13
+ * ```
14
+ * @param name The name of the domain.
15
+ * @returns A new DomainDefinition instance.
16
+ */
17
+ export declare function domain<TName extends string>(name: TName): DomainDefinition<TName, string, string, AnyNamespaceDefinition>;
18
+ export declare function $enum<TName extends string, const TValues extends string[]>(name: TName, values: TValues): DomainDefinition<TName, TValues[number], string, AnyNamespaceDefinition>;
19
+ //# sourceMappingURL=domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/schema/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAO,MAAM,gBAAgB,CAAC;AAE/E;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,MAAM,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,EAAE,KAAK,mEASvD;AAED,wBAAgB,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK,CAAC,OAAO,SAAS,MAAM,EAAE,EACxE,IAAI,EAAE,KAAK,EACX,MAAM,EAAE,OAAO,4EAchB"}
@@ -0,0 +1,37 @@
1
+ import { DomainDefinition, sql } from "@dsqlbase/core";
2
+ /**
3
+ * Creates a domain definition.
4
+ * A domain is a user-defined data type that can be used to define columns in tables. It allows you to specify constraints and validation rules for the data stored in the column.
5
+ * @example
6
+ * ```ts
7
+ * const emailDomain = domain("email")
8
+ * .check((value) => sql`${value} LIKE '%@%'`, "email_format_check");
9
+ *
10
+ * const usersTable = table("users", {
11
+ * email: emailDomain.column("email"),
12
+ * });
13
+ * ```
14
+ * @param name The name of the domain.
15
+ * @returns A new DomainDefinition instance.
16
+ */
17
+ export function domain(name) {
18
+ return new DomainDefinition(name, {
19
+ notNull: false,
20
+ dataType: "text",
21
+ codec: {
22
+ encode: (value) => value,
23
+ decode: (value) => value,
24
+ },
25
+ });
26
+ }
27
+ export function $enum(name, values) {
28
+ const domain = new DomainDefinition(name, {
29
+ dataType: "text",
30
+ codec: {
31
+ encode: (value) => value,
32
+ decode: (value) => value,
33
+ },
34
+ });
35
+ return domain.check((v) => sql.in(v, values), `${name}_enum_check`);
36
+ }
37
+ //# sourceMappingURL=domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/schema/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,gBAAgB,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE/E;;;;;;;;;;;;;;GAcG;AAEH,MAAM,UAAU,MAAM,CAAuB,IAAW;IACtD,OAAO,IAAI,gBAAgB,CAAgD,IAAI,EAAE;QAC/E,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE;YACL,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;YACxB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;SACzB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,IAAW,EACX,MAAe;IAEf,MAAM,MAAM,GAAG,IAAI,gBAAgB,CACjC,IAAI,EACJ;QACE,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE;YACL,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;YACxB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;SACzB;KACF,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,27 @@
1
+ export { array } from "./columns/array.js";
2
+ export { bigint, int8 } from "./columns/bigint.js";
3
+ export { boolean, bool } from "./columns/boolean.js";
4
+ export { bytea } from "./columns/bytea.js";
5
+ export { char } from "./columns/char.js";
6
+ export { date, type DateValueType, type DateColumnOptions } from "./columns/date.js";
7
+ export { double, float8 } from "./columns/double.js";
8
+ export { identity, IdentityColumnDefinition, type IdentityColumnOptions, } from "./columns/identity.js";
9
+ export { int, int4 } from "./columns/int.js";
10
+ export { interval, duration, type IntervalColumnOptions } from "./columns/interval.js";
11
+ export { json } from "./columns/json.js";
12
+ export { decimal, numeric } from "./columns/numeric.js";
13
+ export { real, float4 } from "./columns/real.js";
14
+ export { smallint, int2 } from "./columns/smallint.js";
15
+ export { text } from "./columns/text.js";
16
+ export { time, type TimeColumnOptions } from "./columns/time.js";
17
+ export { timestamp, datetime, type DateTimeColumnOptions } from "./columns/timestamp.js";
18
+ export { uuid, UUIDColumnDefinition } from "./columns/uuid.js";
19
+ export { varchar } from "./columns/varchar.js";
20
+ export { domain, $enum } from "./domain.js";
21
+ export { namespace, schema } from "./namespace.js";
22
+ export { sequence } from "./sequence.js";
23
+ export { table } from "./table.js";
24
+ export { relations, belongsTo, hasMany, hasOne } from "./relations.js";
25
+ export { type Duration } from "./utils/duration.js";
26
+ export { type DateTimeMode } from "./utils/date.js";
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,25 @@
1
+ export { array } from "./columns/array.js";
2
+ export { bigint, int8 } from "./columns/bigint.js";
3
+ export { boolean, bool } from "./columns/boolean.js";
4
+ export { bytea } from "./columns/bytea.js";
5
+ export { char } from "./columns/char.js";
6
+ export { date } from "./columns/date.js";
7
+ export { double, float8 } from "./columns/double.js";
8
+ export { identity, IdentityColumnDefinition, } from "./columns/identity.js";
9
+ export { int, int4 } from "./columns/int.js";
10
+ export { interval, duration } from "./columns/interval.js";
11
+ export { json } from "./columns/json.js";
12
+ export { decimal, numeric } from "./columns/numeric.js";
13
+ export { real, float4 } from "./columns/real.js";
14
+ export { smallint, int2 } from "./columns/smallint.js";
15
+ export { text } from "./columns/text.js";
16
+ export { time } from "./columns/time.js";
17
+ export { timestamp, datetime } from "./columns/timestamp.js";
18
+ export { uuid, UUIDColumnDefinition } from "./columns/uuid.js";
19
+ export { varchar } from "./columns/varchar.js";
20
+ export { domain, $enum } from "./domain.js";
21
+ export { namespace, schema } from "./namespace.js";
22
+ export { sequence } from "./sequence.js";
23
+ export { table } from "./table.js";
24
+ export { relations, belongsTo, hasMany, hasOne } from "./relations.js";
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,IAAI,EAA8C,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,QAAQ,EACR,wBAAwB,GAEzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAA8B,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,IAAI,EAA0B,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAA8B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { NamespaceDefinition } from "@dsqlbase/core";
2
+ /**
3
+ * Creates a namespace definition.
4
+ * A namespace is a logical grouping of database objects, such as tables, views, and sequences.
5
+ * It helps to organize and manage database objects within a schema.
6
+ * @example
7
+ * ```ts
8
+ * const myNamespace = namespace("my_schema");
9
+ *
10
+ * const usersTable = myNamespace.table("users", {
11
+ * id: uuid("id").primaryKey(),
12
+ * name: text("name").notNull(),
13
+ * });
14
+ *
15
+ * const userIdSequence = myNamespace.sequence("user_id_seq");
16
+ * ```
17
+ * @param name The name of the namespace.
18
+ * @returns A new NamespaceDefinition instance.
19
+ */
20
+ export declare function namespace<const TName extends string>(name: TName): NamespaceDefinition<TName>;
21
+ export { namespace as schema };
22
+ //# sourceMappingURL=namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/schema/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAAgB,SAAS,CAAC,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,EAAE,KAAK,8BAEhE;AAED,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { NamespaceDefinition } from "@dsqlbase/core";
2
+ /**
3
+ * Creates a namespace definition.
4
+ * A namespace is a logical grouping of database objects, such as tables, views, and sequences.
5
+ * It helps to organize and manage database objects within a schema.
6
+ * @example
7
+ * ```ts
8
+ * const myNamespace = namespace("my_schema");
9
+ *
10
+ * const usersTable = myNamespace.table("users", {
11
+ * id: uuid("id").primaryKey(),
12
+ * name: text("name").notNull(),
13
+ * });
14
+ *
15
+ * const userIdSequence = myNamespace.sequence("user_id_seq");
16
+ * ```
17
+ * @param name The name of the namespace.
18
+ * @returns A new NamespaceDefinition instance.
19
+ */
20
+ export function namespace(name) {
21
+ return new NamespaceDefinition(name);
22
+ }
23
+ export { namespace as schema };
24
+ //# sourceMappingURL=namespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/schema/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,UAAU,SAAS,CAA6B,IAAW;IAC/D,OAAO,IAAI,mBAAmB,CAAQ,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { AnyTableDefinition, FieldRelation, RelationsDefinition } from "@dsqlbase/core/definition";
2
+ export declare function relations<TTable extends AnyTableDefinition, TRelations extends Record<string, FieldRelation<TTable>>>(table: TTable, relations: TRelations): RelationsDefinition<TTable, TRelations>;
3
+ export declare function hasMany<TSource extends AnyTableDefinition, TTarget extends AnyTableDefinition>(target: TTarget, config: {
4
+ from: FieldRelation<TSource, TTarget, "has_many">["from"];
5
+ to: FieldRelation<TSource, TTarget, "has_many">["to"];
6
+ }): FieldRelation<TSource, TTarget, "has_many">;
7
+ export declare function belongsTo<TSource extends AnyTableDefinition, TTarget extends AnyTableDefinition>(target: TTarget, config: {
8
+ from: FieldRelation<TSource, TTarget, "belongs_to">["from"];
9
+ to: FieldRelation<TSource, TTarget, "belongs_to">["to"];
10
+ }): FieldRelation<TSource, TTarget, "belongs_to">;
11
+ export declare function hasOne<TSource extends AnyTableDefinition, TTarget extends AnyTableDefinition>(target: TTarget, config: Pick<FieldRelation<TSource, TTarget, "has_one">, "from" | "to">): FieldRelation<TSource, TTarget, "has_one">;
12
+ //# sourceMappingURL=relations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/schema/relations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,aAAa,EAEb,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,wBAAgB,SAAS,CACvB,MAAM,SAAS,kBAAkB,EACjC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,EACxD,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,2CAErC;AAED,wBAAgB,OAAO,CAAC,OAAO,SAAS,kBAAkB,EAAE,OAAO,SAAS,kBAAkB,EAC5F,MAAM,EAAE,OAAO,EACf,MAAM,EAAE;IACN,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1D,EAAE,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;CACvD,GACA,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAO7C;AAED,wBAAgB,SAAS,CAAC,OAAO,SAAS,kBAAkB,EAAE,OAAO,SAAS,kBAAkB,EAC9F,MAAM,EAAE,OAAO,EACf,MAAM,EAAE;IACN,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5D,EAAE,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;CACzD,GACA,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAO/C;AAED,wBAAgB,MAAM,CAAC,OAAO,SAAS,kBAAkB,EAAE,OAAO,SAAS,kBAAkB,EAC3F,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GACtE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAO5C"}
@@ -0,0 +1,29 @@
1
+ import { Relation, RelationsDefinition, } from "@dsqlbase/core/definition";
2
+ export function relations(table, relations) {
3
+ return new RelationsDefinition(table, relations);
4
+ }
5
+ export function hasMany(target, config) {
6
+ return {
7
+ type: Relation.HAS_MANY,
8
+ target,
9
+ from: config.from,
10
+ to: config.to,
11
+ };
12
+ }
13
+ export function belongsTo(target, config) {
14
+ return {
15
+ type: Relation.BELONGS_TO,
16
+ target,
17
+ from: config.from,
18
+ to: config.to,
19
+ };
20
+ }
21
+ export function hasOne(target, config) {
22
+ return {
23
+ type: Relation.HAS_ONE,
24
+ target,
25
+ from: config.from,
26
+ to: config.to,
27
+ };
28
+ }
29
+ //# sourceMappingURL=relations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../src/schema/relations.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,QAAQ,EACR,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,UAAU,SAAS,CAGvB,KAAa,EAAE,SAAqB;IACpC,OAAO,IAAI,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,MAAe,EACf,MAGC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,QAAQ;QACvB,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,EAAE,EAAE,MAAM,CAAC,EAAE;KAC0C,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAe,EACf,MAGC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,UAAU;QACzB,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,EAAE,EAAE,MAAM,CAAC,EAAE;KAC4C,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,MAAe,EACf,MAAuE;IAEvE,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,OAAO;QACtB,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,EAAE,EAAE,MAAM,CAAC,EAAE;KACyC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { AnyNamespaceDefinition, SequenceDefinition } from "@dsqlbase/core";
2
+ /**
3
+ * Creates a sequence definition.
4
+ * A sequence is a database object that generates a sequence of unique numeric values.
5
+ * @example
6
+ * ```ts
7
+ * const userIdSequence = sequence("user_id_seq");
8
+ * ```
9
+ *
10
+ * @param name The name of the sequence.
11
+ * @returns A new SequenceDefinition instance.
12
+ */
13
+ export declare function sequence<const TName extends string>(name: TName): SequenceDefinition<TName, AnyNamespaceDefinition>;
14
+ //# sourceMappingURL=sequence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../../src/schema/sequence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE5E;;;;;;;;;;GAUG;AAEH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,EAAE,KAAK,qDAE/D"}
@@ -0,0 +1,16 @@
1
+ import { SequenceDefinition } from "@dsqlbase/core";
2
+ /**
3
+ * Creates a sequence definition.
4
+ * A sequence is a database object that generates a sequence of unique numeric values.
5
+ * @example
6
+ * ```ts
7
+ * const userIdSequence = sequence("user_id_seq");
8
+ * ```
9
+ *
10
+ * @param name The name of the sequence.
11
+ * @returns A new SequenceDefinition instance.
12
+ */
13
+ export function sequence(name) {
14
+ return new SequenceDefinition(name);
15
+ }
16
+ //# sourceMappingURL=sequence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../../src/schema/sequence.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE5E;;;;;;;;;;GAUG;AAEH,MAAM,UAAU,QAAQ,CAA6B,IAAW;IAC9D,OAAO,IAAI,kBAAkB,CAAgC,IAAI,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { TableDefinition, AnyColumnDefinition, AnyNamespaceDefinition } from "@dsqlbase/core/definition";
2
+ /**
3
+ * Defines a table schema with specified columns and optional schema association.
4
+ *
5
+ * @param name Table name in the database
6
+ * @param columns An object defining the columns of the table, where keys are field names used at runtime and values are ColumnDefinition instances that specify the column's properties and constraints.
7
+ * @returns A new instance of TableDefinition representing the defined table schema.
8
+ *
9
+ * @example
10
+ *
11
+ * ```ts
12
+ * const users = table("users", {
13
+ * id: uuid("id").primaryKey(),
14
+ * name: text("name").notNull(),
15
+ * email: text("email").unique(),
16
+ * });
17
+ * ```
18
+ */
19
+ export declare function table<TName extends string, TColumns extends Record<string, AnyColumnDefinition>>(name: TName, columns: TColumns): TableDefinition<TName, TColumns, AnyNamespaceDefinition>;
20
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/schema/table.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AAEnC;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAgB,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC9F,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,QAAQ,GAChB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAE1D"}
@@ -0,0 +1,22 @@
1
+ import { TableDefinition, } from "@dsqlbase/core/definition";
2
+ /**
3
+ * Defines a table schema with specified columns and optional schema association.
4
+ *
5
+ * @param name Table name in the database
6
+ * @param columns An object defining the columns of the table, where keys are field names used at runtime and values are ColumnDefinition instances that specify the column's properties and constraints.
7
+ * @returns A new instance of TableDefinition representing the defined table schema.
8
+ *
9
+ * @example
10
+ *
11
+ * ```ts
12
+ * const users = table("users", {
13
+ * id: uuid("id").primaryKey(),
14
+ * name: text("name").notNull(),
15
+ * email: text("email").unique(),
16
+ * });
17
+ * ```
18
+ */
19
+ export function table(name, columns) {
20
+ return new TableDefinition(name, { columns });
21
+ }
22
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/schema/table.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAGhB,MAAM,2BAA2B,CAAC;AAEnC;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,UAAU,KAAK,CACnB,IAAW,EACX,OAAiB;IAEjB,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,33 @@
1
+ export type DateTimeMode = "iso" | "string" | "date";
2
+ export declare const safeParseDate: (value: unknown) => Date;
3
+ export declare const utcDate: (date: Date) => Date;
4
+ /**
5
+ * Formats a `Date` for a Postgres `timestamp` / `timestamp with time zone` literal.
6
+ *
7
+ * - `tz: true` → ISO 8601 in UTC (e.g. `"2026-04-30T09:00:00.000Z"`). Postgres normalises
8
+ * to an absolute instant on insert; downstream reads are session-zone agnostic.
9
+ * - `tz: false` → space-separated **local wall clock** (e.g. `"2026-04-30 12:00:00.000"`).
10
+ * The literal value the caller wrote is the literal value Postgres stores. There is
11
+ * no zone metadata, so `getTime()` parity across machines is not preserved — that is
12
+ * the contract of `timestamp without time zone`.
13
+ */
14
+ export declare const formatTimestamp: (date: Date, opts: {
15
+ tz: boolean;
16
+ }) => string;
17
+ /**
18
+ * Formats a `Date` as a Postgres `date` literal `YYYY-MM-DD` using the **local**
19
+ * components of the input — Postgres `date` has no timezone concept, so we preserve
20
+ * the wall-clock day the caller authored.
21
+ */
22
+ export declare const formatDate: (date: Date) => string;
23
+ /**
24
+ * Formats a `Date`'s time-of-day for a Postgres `time` / `time with time zone` literal.
25
+ *
26
+ * - `tz: true` → UTC components with a trailing `Z` (e.g. `"09:00:00.000Z"`), mirroring
27
+ * the absolute-instant convention used for `timestamp with time zone`.
28
+ * - `tz: false` → local clock components (e.g. `"12:00:00.000"`), wall-clock semantics.
29
+ */
30
+ export declare const formatTime: (date: Date, opts: {
31
+ tz: boolean;
32
+ }) => string;
33
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../../src/schema/utils/date.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErD,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,SAoB3C,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,IAAI,SAEjC,CAAC;AAIF;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,IAAI,EAAE,MAAM;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,WAUhE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,WAEpC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,EAAE,MAAM;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,WAY3D,CAAC"}
@@ -0,0 +1,62 @@
1
+ export const safeParseDate = (value) => {
2
+ if (typeof value === "string") {
3
+ const parsed = Date.parse(value);
4
+ if (isNaN(parsed)) {
5
+ throw new Error(`Invalid date string: ${value}`);
6
+ }
7
+ return new Date(parsed);
8
+ }
9
+ if (value instanceof Date) {
10
+ if (isNaN(value.getTime())) {
11
+ throw new Error(`Invalid Date object: ${value}`);
12
+ }
13
+ return value;
14
+ }
15
+ throw new Error(`Unsupported date value: ${value}`);
16
+ };
17
+ export const utcDate = (date) => {
18
+ return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
19
+ };
20
+ const pad = (n, width = 2) => String(n).padStart(width, "0");
21
+ /**
22
+ * Formats a `Date` for a Postgres `timestamp` / `timestamp with time zone` literal.
23
+ *
24
+ * - `tz: true` → ISO 8601 in UTC (e.g. `"2026-04-30T09:00:00.000Z"`). Postgres normalises
25
+ * to an absolute instant on insert; downstream reads are session-zone agnostic.
26
+ * - `tz: false` → space-separated **local wall clock** (e.g. `"2026-04-30 12:00:00.000"`).
27
+ * The literal value the caller wrote is the literal value Postgres stores. There is
28
+ * no zone metadata, so `getTime()` parity across machines is not preserved — that is
29
+ * the contract of `timestamp without time zone`.
30
+ */
31
+ export const formatTimestamp = (date, opts) => {
32
+ if (opts.tz) {
33
+ return date.toISOString();
34
+ }
35
+ return (`${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}` +
36
+ ` ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}` +
37
+ `.${pad(date.getMilliseconds(), 3)}`);
38
+ };
39
+ /**
40
+ * Formats a `Date` as a Postgres `date` literal `YYYY-MM-DD` using the **local**
41
+ * components of the input — Postgres `date` has no timezone concept, so we preserve
42
+ * the wall-clock day the caller authored.
43
+ */
44
+ export const formatDate = (date) => {
45
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
46
+ };
47
+ /**
48
+ * Formats a `Date`'s time-of-day for a Postgres `time` / `time with time zone` literal.
49
+ *
50
+ * - `tz: true` → UTC components with a trailing `Z` (e.g. `"09:00:00.000Z"`), mirroring
51
+ * the absolute-instant convention used for `timestamp with time zone`.
52
+ * - `tz: false` → local clock components (e.g. `"12:00:00.000"`), wall-clock semantics.
53
+ */
54
+ export const formatTime = (date, opts) => {
55
+ if (opts.tz) {
56
+ return (`${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}` +
57
+ `.${pad(date.getUTCMilliseconds(), 3)}Z`);
58
+ }
59
+ return (`${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}` +
60
+ `.${pad(date.getMilliseconds(), 3)}`);
61
+ };
62
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../../src/schema/utils/date.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAE,EAAE;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,EAAE;IACpC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAErE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAU,EAAE,IAAqB,EAAE,EAAE;IACnE,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,CACL,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;QAC1E,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;QAC9E,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,CACrC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,EAAE;IACvC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;AACpF,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,IAAqB,EAAE,EAAE;IAC9D,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CACL,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE;YACtF,IAAI,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,GAAG,CACzC,CAAC;IACJ,CAAC;IAED,OAAO,CACL,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;QAC7E,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,CACrC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,66 @@
1
+ export interface Duration {
2
+ years: number;
3
+ months: number;
4
+ days: number;
5
+ hours: number;
6
+ minutes: number;
7
+ seconds: number;
8
+ milliseconds: number;
9
+ }
10
+ export declare const ISO_DURATION_REGEX: RegExp;
11
+ export declare const STRING_DURATION_REGEX: RegExp;
12
+ /**
13
+ * Formats a Duration object into an ISO 8601 duration string.
14
+ *
15
+ * @param duration Duration object
16
+ * @returns ISO 8601 duration string like "P3Y6M4DT12H30M5S"
17
+ */
18
+ export declare const formatISODuration: (duration: Partial<Duration>) => string;
19
+ /**
20
+ * Parses an ISO 8601 duration string into a Duration object. Supported formats include:
21
+ * - "P3Y6M4DT12H30M5S" (3 years, 6 months, 4 days, 12 hours, 30 minutes, and 5 seconds)
22
+ * - "P2Y" (2 years)
23
+ * - "PT15M" (15 minutes)
24
+ * - "P1DT12H" (1 day and 12 hours)
25
+ * - "PT0.5S" (0.5 seconds)
26
+ * @param isoString
27
+ * @returns Duration object
28
+ */
29
+ export declare const parseISODuration: (iso: string) => Duration;
30
+ /**
31
+ * Formats a Duration object into a human-readable string format.
32
+ *
33
+ * @param duration Duration object
34
+ * @returns String fomrat like "3 years 6 months 4 days 12 hours 30 minutes 5 seconds"
35
+ */
36
+ export declare const formatStringDuration: (duration: Partial<Duration>) => string;
37
+ /**
38
+ * Parses a human-readable duration string into a Duration object.
39
+ * Supported formats include:
40
+ * - "3 years 6 months 4 days 12 hours 30 minutes 5 seconds"
41
+ * - "2 hours 15 minutes"
42
+ * - "45 seconds"
43
+ *
44
+ * @param str String formatted duration
45
+ * @returns Duration object
46
+ */
47
+ export declare const parseStringDuration: (str: string) => Duration;
48
+ export declare const PG_INTERVAL_REGEX: RegExp;
49
+ /**
50
+ * Parses Postgres' default `intervalstyle = 'postgres'` text format into a Duration object.
51
+ * Supported shapes include:
52
+ * - "40:00:00" / "12:30:05.5" (time-only, optional fractional seconds)
53
+ * - "-12:30:05" (signed time)
54
+ * - "4 days 12:30:05"
55
+ * - "3 years 6 mons 4 days 12:30:05" (note: PG uses `mons`, not `months`)
56
+ * - Per-component negatives: "-3 years -6 mons -4 days -12:30:05"
57
+ *
58
+ * Each calendar component carries its own sign; the time portion's leading `-` applies to
59
+ * hours/minutes/seconds/milliseconds together.
60
+ *
61
+ * @param str Postgres-formatted interval string
62
+ * @returns Duration object
63
+ */
64
+ export declare const parsePGIntervalDuration: (str: string) => Duration;
65
+ export declare const safeParseDuration: (value: unknown) => Duration;
66
+ //# sourceMappingURL=duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../../src/schema/utils/duration.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,kBAAkB,QAC8I,CAAC;AAE9K,eAAO,MAAM,qBAAqB,QACgI,CAAC;AAEnK;;;;;GAKG;AAEH,eAAO,MAAM,iBAAiB,GAAI,UAAU,OAAO,CAAC,QAAQ,CAAC,WAsB5D,CAAC;AAEF;;;;;;;;;GASG;AAEH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,QAkB9C,CAAC;AAEF;;;;;GAKG;AAEH,eAAO,MAAM,oBAAoB,GAAI,UAAU,OAAO,CAAC,QAAQ,CAAC,WAW/D,CAAC;AAEF;;;;;;;;;GASG;AAEH,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,KAAG,QAiBjD,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAC6K,CAAC;AAE5M;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,uBAAuB,GAAI,KAAK,MAAM,KAAG,QAmBrD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,QA6BlD,CAAC"}