@tailor-platform/sdk 2.13.1 → 2.14.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 (40) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{application-D3HlhR3i.mjs → application-CiN_er9X.mjs} +15 -11
  3. package/dist/application-CiN_er9X.mjs.map +1 -0
  4. package/dist/application-_8rjQRx8.mjs +1 -0
  5. package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +1 -0
  6. package/dist/cli/lib.mjs +1 -1
  7. package/dist/cli/lib.mjs.map +1 -1
  8. package/dist/cli/main.mjs +43 -41
  9. package/dist/cli/main.mjs.map +1 -1
  10. package/dist/completion/zsh-worker.zsh +1 -1
  11. package/dist/configure/index.d.mts +4 -4
  12. package/dist/configure/index.mjs +1 -1
  13. package/dist/configure/index.mjs.map +1 -1
  14. package/dist/configure/services/tailordb/schema.d.mts +1 -1
  15. package/dist/configure/types/field.types.d.mts +8 -1
  16. package/dist/date-DrUO8rOJ.mjs +2 -0
  17. package/dist/date-DrUO8rOJ.mjs.map +1 -0
  18. package/dist/{register-ts-hook-BJmGCQAA.mjs → register-ts-hook-DS1zYiCV.mjs} +32 -32
  19. package/dist/register-ts-hook-DS1zYiCV.mjs.map +1 -0
  20. package/dist/runtime/date.d.mts +17 -0
  21. package/dist/runtime/index.d.mts +2 -1
  22. package/dist/runtime/index.mjs +1 -1
  23. package/dist/schema-DMlLMsWA.mjs +2 -0
  24. package/dist/schema-DMlLMsWA.mjs.map +1 -0
  25. package/dist/service-7SCy2bhm.mjs +7 -0
  26. package/dist/service-7SCy2bhm.mjs.map +1 -0
  27. package/dist/service-CWFQ8EVo.mjs +1 -0
  28. package/dist/types/resolver.generated.d.mts +2 -0
  29. package/docs/services/resolver.md +21 -0
  30. package/docs/services/tailordb-migration.md +25 -3
  31. package/docs/services/tailordb.md +2 -0
  32. package/package.json +2 -2
  33. package/dist/application-BFTkaW6X.mjs +0 -1
  34. package/dist/application-D3HlhR3i.mjs.map +0 -1
  35. package/dist/register-ts-hook-BJmGCQAA.mjs.map +0 -1
  36. package/dist/schema-6d_OHyZf.mjs +0 -2
  37. package/dist/schema-6d_OHyZf.mjs.map +0 -1
  38. package/dist/service-BzsSm2f6.mjs +0 -7
  39. package/dist/service-BzsSm2f6.mjs.map +0 -1
  40. package/dist/service-CmwD9bwv.mjs +0 -1
@@ -405,7 +405,7 @@ declare function datetime<const Opt extends FieldOptions>(options?: Opt): Tailor
405
405
  */
406
406
  declare function time<const Opt extends FieldOptions>(options?: Opt): TailorDBFieldInstance<"time", Opt, string>;
407
407
  /**
408
- * Create an enum field with a fixed set of allowed string values.
408
+ * Create an enum field with at least one allowed string value.
409
409
  * @param values - Array of allowed string values, or array of `{ value, description }` objects
410
410
  * @param options - Field configuration options
411
411
  * @returns An enum field
@@ -19,6 +19,7 @@ type TailorToTs = {
19
19
  nested: Record<string, unknown>;
20
20
  } & Record<TailorFieldType, unknown>;
21
21
  interface FieldMetadata {
22
+ as?: "string" | "date";
22
23
  description?: string;
23
24
  required?: boolean;
24
25
  array?: boolean;
@@ -37,6 +38,12 @@ type FieldOptions = {
37
38
  optional?: boolean;
38
39
  array?: boolean;
39
40
  };
41
+ /** Options for a date field. */
42
+ type DateFieldOptions = FieldOptions & {
43
+ /** Use a Date at midnight UTC instead of a YYYY-MM-DD string. Defaults to string. */
44
+ as?: "string" | "date";
45
+ };
46
+ type DateFieldValue<As> = As extends "date" ? Date : string;
40
47
  type FieldOutput<T, O extends FieldOptions> = OptionalFieldOutput<ArrayFieldOutput<T, O>, O>;
41
48
  type OptionalFieldOutput<T, O extends FieldOptions> = O["optional"] extends true ? T | null : T;
42
49
  type ArrayFieldOutput<T, O extends FieldOptions> = [O] extends [{
@@ -67,4 +74,4 @@ interface TailorField<Defined extends DefinedFieldMetadata = DefinedFieldMetadat
67
74
  }
68
75
  type TailorAnyField = TailorField<any>;
69
76
  //#endregion
70
- export { DefinedFieldMetadata, EnumValue, FieldMetadata, FieldOptions, FieldOutput, FieldValidateInput, TailorAnyField, TailorField, TailorFieldType, TailorToTs };
77
+ export { DateFieldOptions, DateFieldValue, DefinedFieldMetadata, EnumValue, FieldMetadata, FieldOptions, FieldOutput, FieldValidateInput, TailorAnyField, TailorField, TailorFieldType, TailorToTs };
@@ -0,0 +1,2 @@
1
+ function formatDate(e){let t=e.getUTCFullYear();if(!Number.isFinite(t)||t<0||t>9999)throw RangeError(`Expected a valid Date with a year between 0000 and 9999`);return`${String(t).padStart(4,`0`)}-${String(e.getUTCMonth()+1).padStart(2,`0`)}-${String(e.getUTCDate()).padStart(2,`0`)}`}function serialize(e,t,n){if(t==null)return t;if(e.metadata.array){if(!Array.isArray(t))return t;let r=t.map((t,r)=>serializeValue(e,t,`${n}[${r}]`));return r.every((e,n)=>e===t[n])?t:r}return serializeValue(e,t,n)}function serializeValue(e,t,n){if(t==null)return t;if(e.type===`date`&&e.metadata.as===`date`){if(!(t instanceof Date))throw TypeError(`Expected a Date at ${n||`<root>`}`);try{return formatDate(t)}catch(e){throw RangeError(`Invalid date at ${n||`<root>`}`,{cause:e})}}if(e.type!==`nested`||typeof t!=`object`||Array.isArray(t))return t;let r=t,i=r;for(let[t,a]of Object.entries(e.fields)){let e=serialize(a,r[t],n?`${n}.${t}`:t);e!==r[t]&&(i===r&&(i={...r}),Object.defineProperty(i,t,{value:e,enumerable:!0,configurable:!0,writable:!0}))}return i}function serializeDateFields(e,t){return serialize(e,t,``)}export{serializeDateFields as n,formatDate as t};
2
+ //# sourceMappingURL=date-DrUO8rOJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-DrUO8rOJ.mjs","names":[],"sources":["../src/runtime/date.ts"],"sourcesContent":["import type { FieldMetadata, TailorFieldType } from \"#/configure/types/field.types\";\n\n/**\n * Format a Date using its UTC calendar date.\n * @param date - Date to format\n * @returns Date string in YYYY-MM-DD format\n */\nexport function formatDate(date: Date): string {\n const year = date.getUTCFullYear();\n if (!Number.isFinite(year) || year < 0 || year > 9999) {\n throw new RangeError(\"Expected a valid Date with a year between 0000 and 9999\");\n }\n return `${String(year).padStart(4, \"0\")}-${String(date.getUTCMonth() + 1).padStart(2, \"0\")}-${String(date.getUTCDate()).padStart(2, \"0\")}`;\n}\n\ntype DateField = {\n readonly type: TailorFieldType;\n readonly metadata: FieldMetadata;\n readonly fields: Record<string, DateField>;\n};\n\nfunction serialize(field: DateField, value: unknown, path: string): unknown {\n if (value === null || value === undefined) return value;\n if (field.metadata.array) {\n if (!Array.isArray(value)) return value;\n const converted = value.map((item, index) => serializeValue(field, item, `${path}[${index}]`));\n return converted.every((item, index) => item === value[index]) ? value : converted;\n }\n return serializeValue(field, value, path);\n}\n\nfunction serializeValue(field: DateField, value: unknown, path: string): unknown {\n if (value === null || value === undefined) return value;\n if (field.type === \"date\" && field.metadata.as === \"date\") {\n if (!(value instanceof Date)) {\n throw new TypeError(`Expected a Date at ${path || \"<root>\"}`);\n }\n try {\n return formatDate(value);\n } catch (error) {\n throw new RangeError(`Invalid date at ${path || \"<root>\"}`, { cause: error });\n }\n }\n if (field.type !== \"nested\" || typeof value !== \"object\" || Array.isArray(value)) return value;\n const record = value as Record<string, unknown>;\n let result = record;\n for (const [key, child] of Object.entries(field.fields)) {\n const converted = serialize(child, record[key], path ? `${path}.${key}` : key);\n if (converted !== record[key]) {\n if (result === record) result = { ...record };\n Object.defineProperty(result, key, {\n value: converted,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n }\n return result;\n}\n\n/**\n * Convert fields using the Date representation to YYYY-MM-DD strings in UTC.\n * @param field - Date or object field defining the value's shape\n * @param value - Value to serialize\n * @returns Value with Date fields converted to strings\n * @internal\n */\nexport function serializeDateFields(field: DateField, value: unknown): unknown {\n return serialize(field, value, \"\");\n}\n"],"mappings":"AAOA,SAAgB,WAAW,EAAoB,CAC7C,IAAM,EAAO,EAAK,eAAe,EACjC,GAAI,CAAC,OAAO,SAAS,CAAI,GAAK,EAAO,GAAK,EAAO,KAC/C,MAAU,WAAW,yDAAyD,EAEhF,MAAO,GAAG,OAAO,CAAI,CAAC,CAAC,SAAS,EAAG,GAAG,EAAE,GAAG,OAAO,EAAK,YAAY,EAAI,CAAC,CAAC,CAAC,SAAS,EAAG,GAAG,EAAE,GAAG,OAAO,EAAK,WAAW,CAAC,CAAC,CAAC,SAAS,EAAG,GAAG,GACzI,CAQA,SAAS,UAAU,EAAkB,EAAgB,EAAuB,CAC1E,GAAI,GAAU,KAA6B,OAAO,EAClD,GAAI,EAAM,SAAS,MAAO,CACxB,GAAI,CAAC,MAAM,QAAQ,CAAK,EAAG,OAAO,EAClC,IAAM,EAAY,EAAM,KAAK,EAAM,IAAU,eAAe,EAAO,EAAM,GAAG,EAAK,GAAG,EAAM,EAAE,CAAC,EAC7F,OAAO,EAAU,OAAO,EAAM,IAAU,IAAS,EAAM,EAAM,EAAI,EAAQ,CAC3E,CACA,OAAO,eAAe,EAAO,EAAO,CAAI,CAC1C,CAEA,SAAS,eAAe,EAAkB,EAAgB,EAAuB,CAC/E,GAAI,GAAU,KAA6B,OAAO,EAClD,GAAI,EAAM,OAAS,QAAU,EAAM,SAAS,KAAO,OAAQ,CACzD,GAAI,EAAE,aAAiB,MACrB,MAAU,UAAU,sBAAsB,GAAQ,UAAU,EAE9D,GAAI,CACF,OAAO,WAAW,CAAK,CACzB,OAAS,EAAO,CACd,MAAU,WAAW,mBAAmB,GAAQ,WAAY,CAAE,MAAO,CAAM,CAAC,CAC9E,CACF,CACA,GAAI,EAAM,OAAS,UAAY,OAAO,GAAU,UAAY,MAAM,QAAQ,CAAK,EAAG,OAAO,EACzF,IAAM,EAAS,EACX,EAAS,EACb,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAM,MAAM,EAAG,CACvD,IAAM,EAAY,UAAU,EAAO,EAAO,GAAM,EAAO,GAAG,EAAK,GAAG,IAAQ,CAAG,EACzE,IAAc,EAAO,KACnB,IAAW,IAAQ,EAAS,CAAE,GAAG,CAAO,GAC5C,OAAO,eAAe,EAAQ,EAAK,CACjC,MAAO,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EACZ,CAAC,EAEL,CACA,OAAO,CACT,CASA,SAAgB,oBAAoB,EAAkB,EAAyB,CAC7E,OAAO,UAAU,EAAO,EAAO,EAAE,CACnC"}