@boltstore/utils 0.5.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 (62) hide show
  1. package/README.md +61 -0
  2. package/dist/auth-types.d.ts +138 -0
  3. package/dist/auth-types.d.ts.map +1 -0
  4. package/dist/auth-types.js +4 -0
  5. package/dist/auth-types.js.map +1 -0
  6. package/dist/constants.d.ts +123 -0
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +144 -0
  9. package/dist/constants.js.map +1 -0
  10. package/dist/filter/compiler.d.ts +14 -0
  11. package/dist/filter/compiler.d.ts.map +1 -0
  12. package/dist/filter/compiler.js +93 -0
  13. package/dist/filter/compiler.js.map +1 -0
  14. package/dist/filter/parser.d.ts +15 -0
  15. package/dist/filter/parser.d.ts.map +1 -0
  16. package/dist/filter/parser.js +134 -0
  17. package/dist/filter/parser.js.map +1 -0
  18. package/dist/filter/query.d.ts +13 -0
  19. package/dist/filter/query.d.ts.map +1 -0
  20. package/dist/filter/query.js +20 -0
  21. package/dist/filter/query.js.map +1 -0
  22. package/dist/filter/tokenizer.d.ts +17 -0
  23. package/dist/filter/tokenizer.d.ts.map +1 -0
  24. package/dist/filter/tokenizer.js +133 -0
  25. package/dist/filter/tokenizer.js.map +1 -0
  26. package/dist/filter/types.d.ts +24 -0
  27. package/dist/filter/types.d.ts.map +1 -0
  28. package/dist/filter/types.js +3 -0
  29. package/dist/filter/types.js.map +1 -0
  30. package/dist/filter.d.ts +7 -0
  31. package/dist/filter.d.ts.map +1 -0
  32. package/dist/filter.js +12 -0
  33. package/dist/filter.js.map +1 -0
  34. package/dist/index.d.ts +13 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +16 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/realtime-types.d.ts +90 -0
  39. package/dist/realtime-types.d.ts.map +1 -0
  40. package/dist/realtime-types.js +4 -0
  41. package/dist/realtime-types.js.map +1 -0
  42. package/dist/schema.d.ts +612 -0
  43. package/dist/schema.d.ts.map +1 -0
  44. package/dist/schema.js +209 -0
  45. package/dist/schema.js.map +1 -0
  46. package/dist/storage-types.d.ts +117 -0
  47. package/dist/storage-types.d.ts.map +1 -0
  48. package/dist/storage-types.js +4 -0
  49. package/dist/storage-types.js.map +1 -0
  50. package/dist/sync-types.d.ts +136 -0
  51. package/dist/sync-types.d.ts.map +1 -0
  52. package/dist/sync-types.js +4 -0
  53. package/dist/sync-types.js.map +1 -0
  54. package/dist/types.d.ts +164 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +3 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/validation.d.ts +30 -0
  59. package/dist/validation.d.ts.map +1 -0
  60. package/dist/validation.js +259 -0
  61. package/dist/validation.js.map +1 -0
  62. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,QAAQ,GACR,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,UAAU,GACV,OAAO,GACP,KAAK,GACL,QAAQ,CAAC;AAEb,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,wBAAwB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0DAA0D;IAC1D,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;KAC9D,CAAC;CACH;AAID,MAAM,WAAW,SAAS;IACxB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,iBAAiB,GAAG,aAAa,GAAG,QAAQ,CAAC;AAExF,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,QAAQ,EAAE,YAAY,CAAC;IACvB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACvC;AAID,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,CAAC,EAAE,CAAC;CACZ;AAID,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACrE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAClF;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,uCAAuC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,cAAc,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,UAAU,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAID,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // ── Core domain types shared between server and client ──
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,2DAA2D"}
@@ -0,0 +1,30 @@
1
+ import type { FieldSchema, FieldType } from "./types";
2
+ export interface ValidationError {
3
+ field: string;
4
+ code: string;
5
+ message: string;
6
+ }
7
+ export interface ValidationResult {
8
+ valid: boolean;
9
+ errors: ValidationError[];
10
+ }
11
+ /**
12
+ * Validate a single field value against its schema.
13
+ */
14
+ export declare function validateField(value: unknown, field: FieldSchema): ValidationError | null;
15
+ /**
16
+ * Validate a record's data against a collection's field schemas.
17
+ * Only validates fields that are present in the data object.
18
+ */
19
+ export declare function validateRecord(data: Record<string, unknown>, fields: FieldSchema[], options?: {
20
+ partial?: boolean;
21
+ }): ValidationResult;
22
+ /**
23
+ * Check if a value matches the expected type without full validation.
24
+ */
25
+ export declare function isValidType(value: unknown, type: FieldType): boolean;
26
+ /**
27
+ * Apply default values from field schemas to a data object.
28
+ */
29
+ export declare function applyDefaults(data: Record<string, unknown>, fields: FieldSchema[]): Record<string, unknown>;
30
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGtD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAyMD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,WAAW,GACjB,eAAe,GAAG,IAAI,CAMxB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9B,gBAAgB,CAgClB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAqBpE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,EAAE,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB"}
@@ -0,0 +1,259 @@
1
+ // ── Field Validation ──
2
+ // Pure functions, zero dependencies. Used by both server and client.
3
+ import { ErrorCodes } from "./constants";
4
+ // ── Individual Validators ──
5
+ const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
6
+ const URL_REGEX = /^https?:\/\/.+/i;
7
+ function validateRequired(value, field) {
8
+ if (field.required && (value === undefined || value === null || value === "")) {
9
+ return {
10
+ field: field.name,
11
+ code: ErrorCodes.VALIDATION_ERROR,
12
+ message: `Field "${field.name}" is required`,
13
+ };
14
+ }
15
+ return null;
16
+ }
17
+ function validateType(value, field) {
18
+ if (value === undefined || value === null)
19
+ return null;
20
+ const type = field.type;
21
+ switch (type) {
22
+ case "text":
23
+ case "email":
24
+ case "url":
25
+ case "select":
26
+ if (typeof value !== "string") {
27
+ return {
28
+ field: field.name,
29
+ code: ErrorCodes.VALIDATION_ERROR,
30
+ message: `Field "${field.name}" must be a string, got ${typeof value}`,
31
+ };
32
+ }
33
+ break;
34
+ case "number":
35
+ if (typeof value !== "number" || Number.isNaN(value)) {
36
+ return {
37
+ field: field.name,
38
+ code: ErrorCodes.VALIDATION_ERROR,
39
+ message: `Field "${field.name}" must be a number, got ${typeof value}`,
40
+ };
41
+ }
42
+ break;
43
+ case "bool":
44
+ if (typeof value !== "boolean") {
45
+ return {
46
+ field: field.name,
47
+ code: ErrorCodes.VALIDATION_ERROR,
48
+ message: `Field "${field.name}" must be a boolean, got ${typeof value}`,
49
+ };
50
+ }
51
+ break;
52
+ case "date":
53
+ if (typeof value !== "string" || Number.isNaN(Date.parse(value))) {
54
+ return {
55
+ field: field.name,
56
+ code: ErrorCodes.VALIDATION_ERROR,
57
+ message: `Field "${field.name}" must be a valid ISO 8601 date string`,
58
+ };
59
+ }
60
+ break;
61
+ case "json":
62
+ // JSON fields accept objects, arrays, and primitives
63
+ if (typeof value === "function" || typeof value === "symbol") {
64
+ return {
65
+ field: field.name,
66
+ code: ErrorCodes.VALIDATION_ERROR,
67
+ message: `Field "${field.name}" must be valid JSON`,
68
+ };
69
+ }
70
+ break;
71
+ case "file":
72
+ if (typeof value !== "string") {
73
+ return {
74
+ field: field.name,
75
+ code: ErrorCodes.VALIDATION_ERROR,
76
+ message: `Field "${field.name}" must be a file ID string`,
77
+ };
78
+ }
79
+ break;
80
+ case "relation":
81
+ if (typeof value !== "string") {
82
+ return {
83
+ field: field.name,
84
+ code: ErrorCodes.VALIDATION_ERROR,
85
+ message: `Field "${field.name}" must be a relation ID string`,
86
+ };
87
+ }
88
+ break;
89
+ }
90
+ return null;
91
+ }
92
+ function validateConstraints(value, field) {
93
+ if (value === undefined || value === null)
94
+ return null;
95
+ const type = field.type;
96
+ // String constraints
97
+ if (type === "text" || type === "email" || type === "url" || type === "select") {
98
+ const str = value;
99
+ if (field.min !== undefined && str.length < field.min) {
100
+ return {
101
+ field: field.name,
102
+ code: ErrorCodes.VALIDATION_ERROR,
103
+ message: `Field "${field.name}" must be at least ${field.min} characters`,
104
+ };
105
+ }
106
+ if (field.maxLength !== undefined && str.length > field.maxLength) {
107
+ return {
108
+ field: field.name,
109
+ code: ErrorCodes.VALIDATION_ERROR,
110
+ message: `Field "${field.name}" must be at most ${field.maxLength} characters`,
111
+ };
112
+ }
113
+ if (field.pattern) {
114
+ try {
115
+ const regex = new RegExp(field.pattern);
116
+ if (!regex.test(str)) {
117
+ return {
118
+ field: field.name,
119
+ code: ErrorCodes.VALIDATION_ERROR,
120
+ message: `Field "${field.name}" does not match the required pattern`,
121
+ };
122
+ }
123
+ }
124
+ catch {
125
+ return {
126
+ field: field.name,
127
+ code: ErrorCodes.VALIDATION_ERROR,
128
+ message: `Field "${field.name}" has an invalid pattern`,
129
+ };
130
+ }
131
+ }
132
+ }
133
+ // Email-specific
134
+ if (type === "email" && typeof value === "string" && !EMAIL_REGEX.test(value)) {
135
+ return {
136
+ field: field.name,
137
+ code: ErrorCodes.VALIDATION_ERROR,
138
+ message: `Field "${field.name}" must be a valid email address`,
139
+ };
140
+ }
141
+ // URL-specific
142
+ if (type === "url" && typeof value === "string" && !URL_REGEX.test(value)) {
143
+ return {
144
+ field: field.name,
145
+ code: ErrorCodes.VALIDATION_ERROR,
146
+ message: `Field "${field.name}" must be a valid URL`,
147
+ };
148
+ }
149
+ // Select-specific
150
+ if (type === "select" && field.values && typeof value === "string") {
151
+ if (!field.values.includes(value)) {
152
+ return {
153
+ field: field.name,
154
+ code: ErrorCodes.VALIDATION_ERROR,
155
+ message: `Field "${field.name}" must be one of: ${field.values.join(", ")}`,
156
+ };
157
+ }
158
+ }
159
+ // Number constraints
160
+ if (type === "number" && typeof value === "number") {
161
+ if (field.min !== undefined && value < field.min) {
162
+ return {
163
+ field: field.name,
164
+ code: ErrorCodes.VALIDATION_ERROR,
165
+ message: `Field "${field.name}" must be at least ${field.min}`,
166
+ };
167
+ }
168
+ if (field.max !== undefined && value > field.max) {
169
+ return {
170
+ field: field.name,
171
+ code: ErrorCodes.VALIDATION_ERROR,
172
+ message: `Field "${field.name}" must be at most ${field.max}`,
173
+ };
174
+ }
175
+ }
176
+ return null;
177
+ }
178
+ // ── Main Validation API ──
179
+ /**
180
+ * Validate a single field value against its schema.
181
+ */
182
+ export function validateField(value, field) {
183
+ return (validateRequired(value, field) ??
184
+ validateType(value, field) ??
185
+ validateConstraints(value, field));
186
+ }
187
+ /**
188
+ * Validate a record's data against a collection's field schemas.
189
+ * Only validates fields that are present in the data object.
190
+ */
191
+ export function validateRecord(data, fields, options) {
192
+ const errors = [];
193
+ const fieldMap = new Map(fields.map((f) => [f.name, f]));
194
+ // Check all provided fields
195
+ for (const [key, value] of Object.entries(data)) {
196
+ const field = fieldMap.get(key);
197
+ if (!field) {
198
+ // Unknown fields are allowed — they get stored in the JSON blob
199
+ continue;
200
+ }
201
+ const error = validateField(value, field);
202
+ if (error)
203
+ errors.push(error);
204
+ }
205
+ // For non-partial (create) operations, check required fields
206
+ if (!options?.partial) {
207
+ for (const field of fields) {
208
+ if (field.required && !(field.name in data)) {
209
+ errors.push({
210
+ field: field.name,
211
+ code: ErrorCodes.VALIDATION_ERROR,
212
+ message: `Field "${field.name}" is required`,
213
+ });
214
+ }
215
+ }
216
+ }
217
+ return {
218
+ valid: errors.length === 0,
219
+ errors,
220
+ };
221
+ }
222
+ /**
223
+ * Check if a value matches the expected type without full validation.
224
+ */
225
+ export function isValidType(value, type) {
226
+ switch (type) {
227
+ case "text":
228
+ case "email":
229
+ case "url":
230
+ case "select":
231
+ return typeof value === "string";
232
+ case "number":
233
+ return typeof value === "number" && !Number.isNaN(value);
234
+ case "bool":
235
+ return typeof value === "boolean";
236
+ case "date":
237
+ return typeof value === "string" && !Number.isNaN(Date.parse(value));
238
+ case "json":
239
+ return typeof value !== "function" && typeof value !== "symbol";
240
+ case "file":
241
+ case "relation":
242
+ return typeof value === "string";
243
+ default:
244
+ return false;
245
+ }
246
+ }
247
+ /**
248
+ * Apply default values from field schemas to a data object.
249
+ */
250
+ export function applyDefaults(data, fields) {
251
+ const result = { ...data };
252
+ for (const field of fields) {
253
+ if (field.default !== undefined && !(field.name in result)) {
254
+ result[field.name] = field.default;
255
+ }
256
+ }
257
+ return result;
258
+ }
259
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "@boltstore/utils",
3
+ "version": "0.5.0",
4
+ "private": false,
5
+ "description": "Shared TypeScript types, validation, and utilities for Boltstore",
6
+ "type": "module",
7
+ "sideEffects": false,
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js"
14
+ },
15
+ "./types": {
16
+ "types": "./dist/types.d.ts",
17
+ "import": "./dist/types.js"
18
+ },
19
+ "./validation": {
20
+ "types": "./dist/validation.d.ts",
21
+ "import": "./dist/validation.js"
22
+ },
23
+ "./filter": {
24
+ "types": "./dist/filter.d.ts",
25
+ "import": "./dist/filter.js"
26
+ },
27
+ "./sync-types": {
28
+ "types": "./dist/sync-types.d.ts",
29
+ "import": "./dist/sync-types.js"
30
+ },
31
+ "./realtime-types": {
32
+ "types": "./dist/realtime-types.d.ts",
33
+ "import": "./dist/realtime-types.js"
34
+ },
35
+ "./auth-types": {
36
+ "types": "./dist/auth-types.d.ts",
37
+ "import": "./dist/auth-types.js"
38
+ },
39
+ "./storage-types": {
40
+ "types": "./dist/storage-types.d.ts",
41
+ "import": "./dist/storage-types.js"
42
+ },
43
+ "./constants": {
44
+ "types": "./dist/constants.d.ts",
45
+ "import": "./dist/constants.js"
46
+ },
47
+ "./schema": {
48
+ "types": "./dist/schema.d.ts",
49
+ "import": "./dist/schema.js"
50
+ }
51
+ },
52
+ "scripts": {
53
+ "test": "bun test",
54
+ "check": "tsc --noEmit",
55
+ "build": "tsc",
56
+ "prepublishOnly": "bun run build"
57
+ },
58
+ "devDependencies": {
59
+ "@types/bun": "latest",
60
+ "typescript": "^5.7.0"
61
+ },
62
+ "files": [
63
+ "dist/",
64
+ "README.md"
65
+ ],
66
+ "license": "MIT",
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "https://github.com/boltstore/utils"
70
+ },
71
+ "publishConfig": {
72
+ "access": "public"
73
+ }
74
+ }