@ram_28/kf-ai-sdk 2.0.19 → 2.0.20-beta.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 (105) hide show
  1. package/README.md +8 -16
  2. package/dist/{FileField-CZjS2uLh.js → FileField-BWrSHNRq.js} +3 -3
  3. package/dist/{FileField-DU4UWo_t.cjs → FileField-eDeuzln8.cjs} +1 -1
  4. package/dist/api.cjs +1 -1
  5. package/dist/api.mjs +1 -1
  6. package/dist/auth/authConfig.d.ts +1 -1
  7. package/dist/auth/types.d.ts +1 -1
  8. package/dist/auth/types.d.ts.map +1 -1
  9. package/dist/auth.cjs +1 -1
  10. package/dist/auth.mjs +1 -1
  11. package/dist/bdo/core/Item.d.ts +4 -0
  12. package/dist/bdo/core/Item.d.ts.map +1 -1
  13. package/dist/bdo/fields/ReferenceField.d.ts +1 -1
  14. package/dist/bdo/fields/ReferenceField.d.ts.map +1 -1
  15. package/dist/bdo/fields/SelectField.d.ts +1 -1
  16. package/dist/bdo/fields/SelectField.d.ts.map +1 -1
  17. package/dist/bdo/fields/UserField.d.ts +1 -1
  18. package/dist/bdo/fields/UserField.d.ts.map +1 -1
  19. package/dist/bdo.cjs +1 -1
  20. package/dist/bdo.mjs +62 -53
  21. package/dist/components/hooks/useActivityForm/types.d.ts +5 -4
  22. package/dist/components/hooks/useActivityForm/types.d.ts.map +1 -1
  23. package/dist/components/hooks/useActivityForm/useActivityForm.d.ts.map +1 -1
  24. package/dist/components/hooks/useActivityTable/types.d.ts +4 -5
  25. package/dist/components/hooks/useActivityTable/types.d.ts.map +1 -1
  26. package/dist/components/hooks/useActivityTable/useActivityTable.d.ts.map +1 -1
  27. package/dist/components/hooks/useBDOForm/createItemProxy.d.ts +3 -2
  28. package/dist/components/hooks/useBDOForm/createItemProxy.d.ts.map +1 -1
  29. package/dist/components/hooks/useBDOTable/types.d.ts +12 -20
  30. package/dist/components/hooks/useBDOTable/types.d.ts.map +1 -1
  31. package/dist/components/hooks/useBDOTable/useBDOTable.d.ts +2 -2
  32. package/dist/components/hooks/useBDOTable/useBDOTable.d.ts.map +1 -1
  33. package/dist/{constants-Cyi942Yr.js → constants-ConHc1oS.js} +5 -5
  34. package/dist/constants-QX2RX-wu.cjs +1 -0
  35. package/dist/filter.cjs +1 -1
  36. package/dist/filter.mjs +1 -1
  37. package/dist/form.cjs +1 -1
  38. package/dist/form.mjs +243 -226
  39. package/dist/table.cjs +1 -1
  40. package/dist/table.mjs +16 -15
  41. package/dist/table.types.d.ts +1 -1
  42. package/dist/table.types.d.ts.map +1 -1
  43. package/dist/types/constants.d.ts +1 -1
  44. package/dist/workflow/Activity.d.ts +5 -8
  45. package/dist/workflow/Activity.d.ts.map +1 -1
  46. package/dist/workflow.cjs +1 -1
  47. package/dist/workflow.mjs +476 -461
  48. package/docs/api.md +95 -0
  49. package/docs/bdo.md +224 -0
  50. package/docs/gaps.md +360 -0
  51. package/docs/useActivityForm.md +393 -0
  52. package/docs/useActivityTable.md +418 -0
  53. package/docs/useBDOForm.md +498 -0
  54. package/docs/useBDOTable.md +284 -0
  55. package/docs/useFilter.md +188 -0
  56. package/docs/workflow.md +560 -0
  57. package/package.json +14 -15
  58. package/sdk/auth/authConfig.ts +1 -1
  59. package/sdk/auth/types.ts +1 -1
  60. package/sdk/bdo/core/Item.ts +10 -1
  61. package/sdk/bdo/fields/ReferenceField.ts +1 -1
  62. package/sdk/bdo/fields/SelectField.ts +1 -1
  63. package/sdk/bdo/fields/UserField.ts +1 -1
  64. package/sdk/components/hooks/useActivityForm/types.ts +6 -4
  65. package/sdk/components/hooks/useActivityForm/useActivityForm.ts +73 -10
  66. package/sdk/components/hooks/useActivityTable/types.ts +5 -4
  67. package/sdk/components/hooks/useActivityTable/useActivityTable.ts +8 -10
  68. package/sdk/components/hooks/useBDOForm/createItemProxy.ts +58 -17
  69. package/sdk/components/hooks/useBDOTable/types.ts +10 -20
  70. package/sdk/components/hooks/useBDOTable/useBDOTable.ts +8 -12
  71. package/sdk/table.types.ts +0 -2
  72. package/sdk/types/constants.ts +1 -1
  73. package/sdk/workflow/Activity.ts +7 -39
  74. package/dist/constants-DEmYwKfC.cjs +0 -1
  75. package/docs/README.md +0 -57
  76. package/docs/bdo/README.md +0 -161
  77. package/docs/bdo/api_reference.md +0 -281
  78. package/docs/examples/bdo/create-product.md +0 -69
  79. package/docs/examples/bdo/edit-product-dialog.md +0 -95
  80. package/docs/examples/bdo/filtered-product-table.md +0 -100
  81. package/docs/examples/bdo/product-listing.md +0 -73
  82. package/docs/examples/bdo/supplier-dropdown.md +0 -60
  83. package/docs/examples/fields/complex-fields.md +0 -248
  84. package/docs/examples/fields/primitive-fields.md +0 -217
  85. package/docs/examples/workflow/approve-leave-request.md +0 -76
  86. package/docs/examples/workflow/filtered-activity-table.md +0 -101
  87. package/docs/examples/workflow/my-pending-requests.md +0 -90
  88. package/docs/examples/workflow/start-new-workflow.md +0 -47
  89. package/docs/examples/workflow/submit-leave-request.md +0 -72
  90. package/docs/examples/workflow/workflow-progress.md +0 -49
  91. package/docs/fields/README.md +0 -141
  92. package/docs/fields/api_reference.md +0 -134
  93. package/docs/useActivityForm/README.md +0 -244
  94. package/docs/useActivityForm/api_reference.md +0 -279
  95. package/docs/useActivityTable/README.md +0 -263
  96. package/docs/useActivityTable/api_reference.md +0 -294
  97. package/docs/useBDOForm/README.md +0 -175
  98. package/docs/useBDOForm/api_reference.md +0 -244
  99. package/docs/useBDOTable/README.md +0 -242
  100. package/docs/useBDOTable/api_reference.md +0 -253
  101. package/docs/useFilter/README.md +0 -323
  102. package/docs/useFilter/api_reference.md +0 -228
  103. package/docs/workflow/README.md +0 -158
  104. package/docs/workflow/api_reference.md +0 -161
  105. /package/docs/{useAuth/README.md → useAuth.md} +0 -0
package/README.md CHANGED
@@ -461,22 +461,14 @@ cn("text-red-500", condition && "text-blue-500");
461
461
 
462
462
  ## Documentation
463
463
 
464
- Detailed, use-case-driven documentation with examples for each module:
465
-
466
- **Hooks:**
467
- - [useBDOForm](./docs/useBDOForm/README.md) — BDO-integrated forms with validation and API submission
468
- - [useBDOTable](./docs/useBDOTable/README.md) — Data tables with sorting, search, filtering, and pagination
469
- - [useActivityForm](./docs/useActivityForm/README.md) — Workflow activity forms with save-draft and complete
470
- - [useActivityTable](./docs/useActivityTable/README.md) — Activity instance tables for workflow tasks
471
- - [useFilter](./docs/useFilter/README.md) — Filter condition builder with nested groups
472
-
473
- **Core:**
474
- - [BDO](./docs/bdo/README.md) — Type-safe, role-based data access layer
475
- - [Workflow](./docs/workflow/README.md) — Business process orchestration
476
- - [API Client](./docs/api/README.md) — Low-level CRUD, metric, pivot, draft, and attachment operations
477
-
478
- **Auth:**
479
- - [useAuth](./docs/useAuth/README.md) — Cookie-based authentication with session management
464
+ Detailed documentation for each feature:
465
+
466
+ - [useBDOTable Documentation](./docs/useBDOTable.md)
467
+ - [useActivityTable Documentation](./docs/useActivityTable.md)
468
+ - [useFilter Documentation](./docs/useFilter.md)
469
+ - [useBDOForm Documentation](./docs/useBDOForm.md)
470
+ - [useAuth Documentation](./docs/useAuth.md)
471
+ - [API Documentation](./docs/api.md)
480
472
 
481
473
  ## Requirements
482
474
 
@@ -169,7 +169,7 @@ class _ extends s {
169
169
  /**
170
170
  * Fetch dynamic options from the backend, returned as typed SelectOption[]
171
171
  */
172
- async fetchOptions(e = "draft") {
172
+ async fetchOptions(e) {
173
173
  if (!this._parentBoId)
174
174
  throw new Error(
175
175
  `Field ${this.id} not bound to a BDO. Cannot fetch options.`
@@ -217,7 +217,7 @@ class v extends s {
217
217
  * Fetch referenced records from the backend via the fetchField API.
218
218
  * Requires the field to be bound to a parent BDO.
219
219
  */
220
- async fetchOptions(e = "draft") {
220
+ async fetchOptions(e) {
221
221
  if (!this._parentBoId)
222
222
  throw new Error(
223
223
  `Field ${this.id} not bound to a BDO. Cannot fetch options.`
@@ -238,7 +238,7 @@ class g extends s {
238
238
  * Fetch user records from the backend via the fetchField API.
239
239
  * Requires the field to be bound to a parent BDO.
240
240
  */
241
- async fetchOptions(e = "draft") {
241
+ async fetchOptions(e) {
242
242
  if (!this._parentBoId)
243
243
  throw new Error(
244
244
  `Field ${this.id} not bound to a BDO. Cannot fetch options.`
@@ -1 +1 @@
1
- "use strict";var l=Object.defineProperty;var o=(r,e,t)=>e in r?l(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var a=(r,e,t)=>o(r,typeof e!="symbol"?e+"":e,t);const n=require("./client-D5k4SYuw.cjs");class i{constructor(e){a(this,"_meta");a(this,"_parentBoId");this._meta=e}get id(){return this._meta._id}get label(){return this._meta.Name||this._meta._id}get readOnly(){return this._meta.ReadOnly??!1}get required(){var e;return((e=this._meta.Constraint)==null?void 0:e.Required)??this._meta.Required??!1}get defaultValue(){var e;return this._meta.DefaultValue??((e=this._meta.Constraint)==null?void 0:e.DefaultValue)}get primaryKey(){var e;return((e=this._meta.Constraint)==null?void 0:e.PrimaryKey)??!1}get meta(){return this._meta}}class d extends i{constructor(e){super(e)}get length(){var e;return(e=this._meta.Constraint)==null?void 0:e.Length}validate(e){return e!=null&&typeof e!="string"?{valid:!1,errors:[`${this.label} must be a string`]}:{valid:!0,errors:[]}}}class u extends i{constructor(e){super(e)}get integerPart(){var e;return((e=this._meta.Constraint)==null?void 0:e.IntegerPart)??9}get fractionPart(){var e;return(e=this._meta.Constraint)==null?void 0:e.FractionPart}validate(e){return e==null||e===""?{valid:!0,errors:[]}:typeof e!="number"||isNaN(e)?{valid:!1,errors:[`${this.label} must be a valid number`]}:{valid:!0,errors:[]}}}class f extends i{constructor(e){super(e)}validate(e){return e!=null&&typeof e!="boolean"?{valid:!1,errors:[`${this.label} must be a boolean`]}:{valid:!0,errors:[]}}}class c extends i{constructor(e){super(e)}validate(e){if(e==null||e==="")return{valid:!0,errors:[]};if(typeof e!="string")return{valid:!1,errors:[`${this.label} must be a valid date string`]};if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return{valid:!1,errors:[`${this.label} must be in YYYY-MM-DD format`]};const t=new Date(e+"T00:00:00");return isNaN(t.getTime())?{valid:!1,errors:[`${this.label} is not a valid date`]}:{valid:!0,errors:[]}}}class h extends i{constructor(e){super(e)}get precision(){var e;return((e=this._meta.Constraint)==null?void 0:e.Precision)??"Second"}validate(e){if(e==null||e==="")return{valid:!0,errors:[]};if(typeof e!="string")return{valid:!1,errors:[`${this.label} must be a valid date string`]};const t=new Date(e);return isNaN(t.getTime())?{valid:!1,errors:[`${this.label} is not a valid date`]}:{valid:!0,errors:[]}}}class m extends i{constructor(e){super(e)}get format(){var e;return((e=this._meta.Constraint)==null?void 0:e.Format)??"Plain"}validate(e){return e!=null&&typeof e!="string"?{valid:!1,errors:[`${this.label} must be a string`]}:{valid:!0,errors:[]}}}class b extends i{constructor(e){super(e)}get options(){var t;return(((t=this._meta.Constraint)==null?void 0:t.Enum)??[]).map(s=>({value:s,label:s}))}validate(e){if(e==null||e==="")return{valid:!0,errors:[]};if(this.options.length===0)return{valid:!0,errors:[]};const t=this.options.map(s=>s.value);return t.includes(e)?{valid:!0,errors:[]}:{valid:!1,errors:[`${this.label} must be one of: ${t.join(", ")}`]}}async fetchOptions(e="draft"){if(!this._parentBoId)throw new Error(`Field ${this.id} not bound to a BDO. Cannot fetch options.`);return(await n.api(this._parentBoId).fetchField(e,this.id)).map(s=>({value:s.Value,label:s.Label}))}}class p extends i{constructor(e){super(e)}get referenceBdo(){var e,t;return((t=(e=this._meta.View)==null?void 0:e.DataObject)==null?void 0:t.Id)??""}get referenceFields(){var e;return((e=this._meta.View)==null?void 0:e.Fields)??["_id"]}get searchFields(){var e;return((e=this._meta.View)==null?void 0:e.Search)??[]}validate(e){if(e==null)return{valid:!0,errors:[]};if(typeof e!="object")return{valid:!1,errors:[`${this.label} must be a valid reference object`]};const t=e;return!("_id"in t)||typeof t._id!="string"?{valid:!1,errors:[`${this.label} must have a valid _id`]}:{valid:!0,errors:[]}}async fetchOptions(e="draft"){if(!this._parentBoId)throw new Error(`Field ${this.id} not bound to a BDO. Cannot fetch options.`);return n.api(this._parentBoId).fetchField(e,this.id)}}class _ extends i{constructor(e){super(e)}get businessEntity(){var e;return(e=this._meta.View)==null?void 0:e.BusinessEntity}async fetchOptions(e="draft"){if(!this._parentBoId)throw new Error(`Field ${this.id} not bound to a BDO. Cannot fetch options.`);return n.api(this._parentBoId).fetchField(e,this.id)}validate(e){if(e==null)return{valid:!0,errors:[]};if(typeof e!="object")return{valid:!1,errors:[`${this.label} must be a valid user object`]};const t=e;return!("_id"in t)||typeof t._id!="string"?{valid:!1,errors:[`${this.label} must have a valid _id`]}:{valid:!0,errors:[]}}}class v extends i{constructor(e){super(e)}validate(e){if(e==null)return{valid:!0,errors:[]};if(!Array.isArray(e))return{valid:!1,errors:[`${this.label} must be an array of file objects`]};for(const t of e)if(!t||typeof t!="object"||!t._id)return{valid:!1,errors:[`Each file in ${this.label} must have an _id`]};return{valid:!0,errors:[]}}}exports.BaseField=i;exports.BooleanField=f;exports.DateField=c;exports.DateTimeField=h;exports.FileField=v;exports.NumberField=u;exports.ReferenceField=p;exports.SelectField=b;exports.StringField=d;exports.TextField=m;exports.UserField=_;
1
+ "use strict";var l=Object.defineProperty;var o=(r,e,t)=>e in r?l(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var a=(r,e,t)=>o(r,typeof e!="symbol"?e+"":e,t);const n=require("./client-D5k4SYuw.cjs");class i{constructor(e){a(this,"_meta");a(this,"_parentBoId");this._meta=e}get id(){return this._meta._id}get label(){return this._meta.Name||this._meta._id}get readOnly(){return this._meta.ReadOnly??!1}get required(){var e;return((e=this._meta.Constraint)==null?void 0:e.Required)??this._meta.Required??!1}get defaultValue(){var e;return this._meta.DefaultValue??((e=this._meta.Constraint)==null?void 0:e.DefaultValue)}get primaryKey(){var e;return((e=this._meta.Constraint)==null?void 0:e.PrimaryKey)??!1}get meta(){return this._meta}}class d extends i{constructor(e){super(e)}get length(){var e;return(e=this._meta.Constraint)==null?void 0:e.Length}validate(e){return e!=null&&typeof e!="string"?{valid:!1,errors:[`${this.label} must be a string`]}:{valid:!0,errors:[]}}}class u extends i{constructor(e){super(e)}get integerPart(){var e;return((e=this._meta.Constraint)==null?void 0:e.IntegerPart)??9}get fractionPart(){var e;return(e=this._meta.Constraint)==null?void 0:e.FractionPart}validate(e){return e==null||e===""?{valid:!0,errors:[]}:typeof e!="number"||isNaN(e)?{valid:!1,errors:[`${this.label} must be a valid number`]}:{valid:!0,errors:[]}}}class f extends i{constructor(e){super(e)}validate(e){return e!=null&&typeof e!="boolean"?{valid:!1,errors:[`${this.label} must be a boolean`]}:{valid:!0,errors:[]}}}class c extends i{constructor(e){super(e)}validate(e){if(e==null||e==="")return{valid:!0,errors:[]};if(typeof e!="string")return{valid:!1,errors:[`${this.label} must be a valid date string`]};if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return{valid:!1,errors:[`${this.label} must be in YYYY-MM-DD format`]};const t=new Date(e+"T00:00:00");return isNaN(t.getTime())?{valid:!1,errors:[`${this.label} is not a valid date`]}:{valid:!0,errors:[]}}}class h extends i{constructor(e){super(e)}get precision(){var e;return((e=this._meta.Constraint)==null?void 0:e.Precision)??"Second"}validate(e){if(e==null||e==="")return{valid:!0,errors:[]};if(typeof e!="string")return{valid:!1,errors:[`${this.label} must be a valid date string`]};const t=new Date(e);return isNaN(t.getTime())?{valid:!1,errors:[`${this.label} is not a valid date`]}:{valid:!0,errors:[]}}}class m extends i{constructor(e){super(e)}get format(){var e;return((e=this._meta.Constraint)==null?void 0:e.Format)??"Plain"}validate(e){return e!=null&&typeof e!="string"?{valid:!1,errors:[`${this.label} must be a string`]}:{valid:!0,errors:[]}}}class b extends i{constructor(e){super(e)}get options(){var t;return(((t=this._meta.Constraint)==null?void 0:t.Enum)??[]).map(s=>({value:s,label:s}))}validate(e){if(e==null||e==="")return{valid:!0,errors:[]};if(this.options.length===0)return{valid:!0,errors:[]};const t=this.options.map(s=>s.value);return t.includes(e)?{valid:!0,errors:[]}:{valid:!1,errors:[`${this.label} must be one of: ${t.join(", ")}`]}}async fetchOptions(e){if(!this._parentBoId)throw new Error(`Field ${this.id} not bound to a BDO. Cannot fetch options.`);return(await n.api(this._parentBoId).fetchField(e,this.id)).map(s=>({value:s.Value,label:s.Label}))}}class p extends i{constructor(e){super(e)}get referenceBdo(){var e,t;return((t=(e=this._meta.View)==null?void 0:e.DataObject)==null?void 0:t.Id)??""}get referenceFields(){var e;return((e=this._meta.View)==null?void 0:e.Fields)??["_id"]}get searchFields(){var e;return((e=this._meta.View)==null?void 0:e.Search)??[]}validate(e){if(e==null)return{valid:!0,errors:[]};if(typeof e!="object")return{valid:!1,errors:[`${this.label} must be a valid reference object`]};const t=e;return!("_id"in t)||typeof t._id!="string"?{valid:!1,errors:[`${this.label} must have a valid _id`]}:{valid:!0,errors:[]}}async fetchOptions(e){if(!this._parentBoId)throw new Error(`Field ${this.id} not bound to a BDO. Cannot fetch options.`);return n.api(this._parentBoId).fetchField(e,this.id)}}class _ extends i{constructor(e){super(e)}get businessEntity(){var e;return(e=this._meta.View)==null?void 0:e.BusinessEntity}async fetchOptions(e){if(!this._parentBoId)throw new Error(`Field ${this.id} not bound to a BDO. Cannot fetch options.`);return n.api(this._parentBoId).fetchField(e,this.id)}validate(e){if(e==null)return{valid:!0,errors:[]};if(typeof e!="object")return{valid:!1,errors:[`${this.label} must be a valid user object`]};const t=e;return!("_id"in t)||typeof t._id!="string"?{valid:!1,errors:[`${this.label} must have a valid _id`]}:{valid:!0,errors:[]}}}class v extends i{constructor(e){super(e)}validate(e){if(e==null)return{valid:!0,errors:[]};if(!Array.isArray(e))return{valid:!1,errors:[`${this.label} must be an array of file objects`]};for(const t of e)if(!t||typeof t!="object"||!t._id)return{valid:!1,errors:[`Each file in ${this.label} must have an _id`]};return{valid:!0,errors:[]}}}exports.BaseField=i;exports.BooleanField=f;exports.DateField=c;exports.DateTimeField=h;exports.FileField=v;exports.NumberField=u;exports.ReferenceField=p;exports.SelectField=b;exports.StringField=d;exports.TextField=m;exports.UserField=_;
package/dist/api.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./client-D5k4SYuw.cjs"),u=require("./metadata-DWXQPDav.cjs"),o=require("./constants-DEmYwKfC.cjs"),p={DATE:"%Y-%m-%d",TIME:"%H:%M:%S",DATE_TIME:"%Y-%m-%d %H:%M:%S"};function D(t){const[e,a,r]=t.$__d__.split("-").map(Number);return new Date(e,a-1,r)}function g(t){return new Date(t.$__dt__*1e3)}function l(t){const e=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return`${e}-${a}-${r}`}function S(t){const e=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0"),s=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),c=String(t.getSeconds()).padStart(2,"0");return`${e}-${a}-${r} ${s}:${i}:${c}`}function y(t){const[e,a,r]=t.split("-").map(Number);return new Date(e,a-1,r)}function f(t){const[e,a]=t.split(" "),[r,s,i]=e.split("-").map(Number),[c,d,m]=a.split(":").map(Number);return new Date(r,s-1,i,c,d,m)}exports.api=n.api;exports.getApiBaseUrl=n.getApiBaseUrl;exports.getDefaultHeaders=n.getDefaultHeaders;exports.setApiBaseUrl=n.setApiBaseUrl;exports.setDefaultHeaders=n.setDefaultHeaders;exports.getBdoSchema=u.getBdoSchema;exports.listMetadata=u.listMetadata;exports.DateEncodingKey=o.DateEncodingKey;exports.DeleteStatus=o.DeleteStatus;exports.HttpMethod=o.HttpMethod;exports.MetricType=o.MetricType;exports.QueryType=o.QueryType;exports.DatetimeFormat=p;exports.decodeDate=D;exports.decodeDateTime=g;exports.formatDate=l;exports.formatDateTime=S;exports.parseDate=y;exports.parseDateTime=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./client-D5k4SYuw.cjs"),u=require("./metadata-DWXQPDav.cjs"),o=require("./constants-QX2RX-wu.cjs"),p={DATE:"%Y-%m-%d",TIME:"%H:%M:%S",DATE_TIME:"%Y-%m-%d %H:%M:%S"};function D(t){const[e,a,r]=t.$__d__.split("-").map(Number);return new Date(e,a-1,r)}function g(t){return new Date(t.$__dt__*1e3)}function l(t){const e=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return`${e}-${a}-${r}`}function S(t){const e=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0"),s=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),c=String(t.getSeconds()).padStart(2,"0");return`${e}-${a}-${r} ${s}:${i}:${c}`}function y(t){const[e,a,r]=t.split("-").map(Number);return new Date(e,a-1,r)}function f(t){const[e,a]=t.split(" "),[r,s,i]=e.split("-").map(Number),[c,d,m]=a.split(":").map(Number);return new Date(r,s-1,i,c,d,m)}exports.api=n.api;exports.getApiBaseUrl=n.getApiBaseUrl;exports.getDefaultHeaders=n.getDefaultHeaders;exports.setApiBaseUrl=n.setApiBaseUrl;exports.setDefaultHeaders=n.setDefaultHeaders;exports.getBdoSchema=u.getBdoSchema;exports.listMetadata=u.listMetadata;exports.DateEncodingKey=o.DateEncodingKey;exports.DeleteStatus=o.DeleteStatus;exports.HttpMethod=o.HttpMethod;exports.MetricType=o.MetricType;exports.QueryType=o.QueryType;exports.DatetimeFormat=p;exports.decodeDate=D;exports.decodeDateTime=g;exports.formatDate=l;exports.formatDateTime=S;exports.parseDate=y;exports.parseDateTime=f;
package/dist/api.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { a as f, c as h, g as M, s as $, b as T } from "./client-_ayziI1d.js";
2
2
  import { g as H, l as b } from "./metadata-Cc1mBcLS.js";
3
- import { a as w, b as x, H as A, M as N, Q as Y } from "./constants-Cyi942Yr.js";
3
+ import { a as w, b as x, H as A, M as N, Q as Y } from "./constants-ConHc1oS.js";
4
4
  const m = {
5
5
  /** Date format: "YYYY-MM-DD" */
6
6
  DATE: "%Y-%m-%d",
@@ -8,7 +8,7 @@ import type { AuthConfigType, AuthProviderNameType, AuthEndpointConfigType } fro
8
8
  * autoRedirect: true,
9
9
  * providers: {
10
10
  * google: { loginPath: "/api/auth/google/login" },
11
- * azure: { loginPath: "/api/auth/azure/login" },
11
+ * microsoft: { loginPath: "/api/auth/microsoft/login" },
12
12
  * },
13
13
  * });
14
14
  * ```
@@ -22,7 +22,7 @@ export type AuthStatusType = "loading" | "authenticated" | "unauthenticated";
22
22
  /**
23
23
  * Authentication provider type (extensible for multiple OAuth providers)
24
24
  */
25
- export type AuthProviderNameType = "google" | "azure" | "github" | "custom";
25
+ export type AuthProviderNameType = "google" | "microsoft" | "github" | "azure" | "custom";
26
26
  /**
27
27
  * Auth endpoint configuration for a specific provider
28
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../sdk/auth/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../sdk/auth/types.ts"],"names":[],"mappings":"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"}
package/dist/auth.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var J=Object.defineProperty;var X=(e,t,o)=>t in e?J(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var Q=(e,t,o)=>X(e,typeof t!="symbol"?t+"":t,o);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react/jsx-runtime"),n=require("react"),M=require("@tanstack/react-query"),K=require("./client-D5k4SYuw.cjs"),W=require("./constants-DEmYwKfC.cjs"),Y={sessionEndpoint:"/api/id",providers:{google:{loginPath:"/api/auth/google/login",logoutPath:"/api/auth/logout"}},defaultProvider:"google",autoRedirect:!1,sessionCheckInterval:0,retry:{count:3,delay:1e3},staleTime:5*60*1e3,refetchOnWindowFocus:!1,refetchOnReconnect:!0};let h={...Y};function G(e){h={...h,...e,providers:{...h.providers,...e.providers},retry:{...h.retry,...e.retry}}}function Z(e,t){h.providers[e]=t}function b(){return{...h}}function k(){return h.baseUrl||K.getApiBaseUrl()||(typeof window<"u"?window.location.origin:"")}function H(e){return h.providers[e]}function D(){h={...Y}}class m extends Error{constructor(o,r){super(o);Q(this,"statusCode");this.name="AuthenticationError",this.statusCode=r}}async function ee(){const e=b(),t=k(),o=K.getDefaultHeaders(),r=await fetch(`${t}${e.sessionEndpoint}`,{method:"GET",headers:o,credentials:"include"});if(!r.ok)throw r.status===401||r.status===403?new m("Not authenticated",r.status):new m(`Session check failed: ${r.statusText}`,r.status);return await r.json()}function N(e,t){return new Promise(()=>{const o=b(),r=k();if(!r)throw new Error('Auth base URL is not configured. Call setApiBaseUrl("https://...") or configureAuth({ baseUrl: "https://..." }) first.');const i=e||o.defaultProvider,l=H(i);if(!l){const A=Object.keys(o.providers||{}).join(", ")||"none";throw new Error(`Auth provider "${i}" is not configured. Available providers: ${A}`)}if(!l.loginPath)throw new Error(`Login path not configured for provider "${i}". Configure it with: configureAuth({ providers: { ${i}: { loginPath: '/api/auth/...' } } })`);let g;try{g=new URL(`${r}${l.loginPath}`)}catch{throw new Error(`Failed to construct login URL. Base URL: "${r}", Login path: "${l.loginPath}". Ensure baseUrl is a valid URL (e.g., "https://example.com").`)}(t!=null&&t.callbackUrl||o.callbackUrl)&&g.searchParams.set("callbackUrl",(t==null?void 0:t.callbackUrl)||o.callbackUrl||window.location.href),t!=null&&t.params&&Object.entries(t.params).forEach(([A,v])=>{g.searchParams.set(A,v)}),window.open(g.toString(),"_blank")})}async function te(e){const t=b(),o=k(),r=H(t.defaultProvider),i=r==null?void 0:r.logoutPath;if(i&&(e==null?void 0:e.callLogoutEndpoint)!==!1)try{await fetch(`${o}${i}`)}catch(l){console.warn("Logout endpoint call failed:",l)}e!=null&&e.redirectUrl?window.location.href=e.redirectUrl:t.loginRedirectUrl&&(window.location.href=t.loginRedirectUrl)}const V=n.createContext(null),_=["auth","session"];function re({children:e,config:t,onAuthChange:o,onError:r,loadingComponent:i,unauthenticatedComponent:l,skipInitialCheck:g=!1}){const A=n.useRef(!1);t&&!A.current&&(G(t),A.current=!0);const v=M.useQueryClient(),c=b(),{data:u,isLoading:f,error:U,refetch:R,isFetching:C}=M.useQuery({queryKey:_,queryFn:ee,enabled:!g,retry:(s,w)=>w instanceof m&&(w.statusCode===401||w.statusCode===403)?!1:s<c.retry.count,retryDelay:c.retry.delay,staleTime:c.staleTime,gcTime:c.staleTime*2,refetchOnWindowFocus:c.refetchOnWindowFocus??!0,refetchOnReconnect:c.refetchOnReconnect??!0,refetchInterval:c.sessionCheckInterval||!1}),[S,L]=n.useState(null),d=n.useMemo(()=>f||C?"loading":Object.keys((u==null?void 0:u.userDetails)||{}).length>0?"authenticated":"unauthenticated",[f,C,u]),a=(u==null?void 0:u.userDetails)||null,x=(u==null?void 0:u.staticBaseUrl)||null,$=(u==null?void 0:u.buildId)||null,j=d==="authenticated",P=n.useRef(o);P.current=o;const E=n.useRef(r);E.current=r,n.useEffect(()=>{var s;f||(s=P.current)==null||s.call(P,d,a)},[d,a,f]),n.useEffect(()=>{var s;U&&(L(U),(s=E.current)==null||s.call(E,U))},[U]),n.useEffect(()=>{d==="unauthenticated"&&c.autoRedirect&&!f&&N()},[d,f,c.autoRedirect]);const p=n.useCallback((s,w)=>{N(s,w)},[]),q=n.useCallback(async s=>{v.removeQueries({queryKey:_}),await te(s)},[v]),B=n.useCallback(async()=>{if(C)return u||null;try{return(await R()).data||null}catch(s){return L(s),null}},[R,C,u]),O=n.useCallback(s=>(a==null?void 0:a.Role)===s,[a]),I=n.useCallback(s=>s.includes((a==null?void 0:a.Role)||""),[a]),F=n.useCallback(()=>{L(null)},[]),T=n.useCallback(()=>{R()},[R]),z=n.useMemo(()=>({user:a,staticBaseUrl:x,buildId:$,status:d,isAuthenticated:j,isLoading:f,login:p,logout:q,refreshSession:B,hasRole:O,hasAnyRole:I,error:S,clearError:F,_forceCheck:T}),[a,x,$,d,j,f,p,q,B,O,I,S,F,T]);return d==="loading"&&i?y.jsx(y.Fragment,{children:i}):d==="unauthenticated"&&!c.autoRedirect&&l?y.jsx(y.Fragment,{children:l}):y.jsx(V.Provider,{value:z,children:e})}function ne(){const e=n.useContext(V);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e}function oe(){const e=ne();return n.useMemo(()=>({user:e.user,staticBaseUrl:e.staticBaseUrl,buildId:e.buildId,status:e.status,isAuthenticated:e.isAuthenticated,isLoading:e.isLoading,login:e.login,logout:e.logout,refreshSession:e.refreshSession,hasRole:e.hasRole,hasAnyRole:e.hasAnyRole,error:e.error,clearError:e.clearError}),[e.user,e.staticBaseUrl,e.buildId,e.status,e.isAuthenticated,e.isLoading,e.login,e.logout,e.refreshSession,e.hasRole,e.hasAnyRole,e.error,e.clearError])}exports.AuthProviderName=W.AuthProviderName;exports.AuthStatus=W.AuthStatus;exports.AuthProvider=re;exports.AuthenticationError=m;exports.configureAuth=G;exports.getAuthBaseUrl=k;exports.getAuthConfig=b;exports.resetAuthConfig=D;exports.setAuthProvider=Z;exports.useAuth=oe;
1
+ "use strict";var J=Object.defineProperty;var X=(e,t,o)=>t in e?J(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var Q=(e,t,o)=>X(e,typeof t!="symbol"?t+"":t,o);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react/jsx-runtime"),n=require("react"),M=require("@tanstack/react-query"),K=require("./client-D5k4SYuw.cjs"),W=require("./constants-QX2RX-wu.cjs"),Y={sessionEndpoint:"/api/id",providers:{google:{loginPath:"/api/auth/google/login",logoutPath:"/api/auth/logout"}},defaultProvider:"google",autoRedirect:!1,sessionCheckInterval:0,retry:{count:3,delay:1e3},staleTime:5*60*1e3,refetchOnWindowFocus:!1,refetchOnReconnect:!0};let h={...Y};function G(e){h={...h,...e,providers:{...h.providers,...e.providers},retry:{...h.retry,...e.retry}}}function Z(e,t){h.providers[e]=t}function b(){return{...h}}function k(){return h.baseUrl||K.getApiBaseUrl()||(typeof window<"u"?window.location.origin:"")}function H(e){return h.providers[e]}function D(){h={...Y}}class m extends Error{constructor(o,r){super(o);Q(this,"statusCode");this.name="AuthenticationError",this.statusCode=r}}async function ee(){const e=b(),t=k(),o=K.getDefaultHeaders(),r=await fetch(`${t}${e.sessionEndpoint}`,{method:"GET",headers:o,credentials:"include"});if(!r.ok)throw r.status===401||r.status===403?new m("Not authenticated",r.status):new m(`Session check failed: ${r.statusText}`,r.status);return await r.json()}function N(e,t){return new Promise(()=>{const o=b(),r=k();if(!r)throw new Error('Auth base URL is not configured. Call setApiBaseUrl("https://...") or configureAuth({ baseUrl: "https://..." }) first.');const i=e||o.defaultProvider,l=H(i);if(!l){const A=Object.keys(o.providers||{}).join(", ")||"none";throw new Error(`Auth provider "${i}" is not configured. Available providers: ${A}`)}if(!l.loginPath)throw new Error(`Login path not configured for provider "${i}". Configure it with: configureAuth({ providers: { ${i}: { loginPath: '/api/auth/...' } } })`);let g;try{g=new URL(`${r}${l.loginPath}`)}catch{throw new Error(`Failed to construct login URL. Base URL: "${r}", Login path: "${l.loginPath}". Ensure baseUrl is a valid URL (e.g., "https://example.com").`)}(t!=null&&t.callbackUrl||o.callbackUrl)&&g.searchParams.set("callbackUrl",(t==null?void 0:t.callbackUrl)||o.callbackUrl||window.location.href),t!=null&&t.params&&Object.entries(t.params).forEach(([A,v])=>{g.searchParams.set(A,v)}),window.open(g.toString(),"_blank")})}async function te(e){const t=b(),o=k(),r=H(t.defaultProvider),i=r==null?void 0:r.logoutPath;if(i&&(e==null?void 0:e.callLogoutEndpoint)!==!1)try{await fetch(`${o}${i}`)}catch(l){console.warn("Logout endpoint call failed:",l)}e!=null&&e.redirectUrl?window.location.href=e.redirectUrl:t.loginRedirectUrl&&(window.location.href=t.loginRedirectUrl)}const V=n.createContext(null),_=["auth","session"];function re({children:e,config:t,onAuthChange:o,onError:r,loadingComponent:i,unauthenticatedComponent:l,skipInitialCheck:g=!1}){const A=n.useRef(!1);t&&!A.current&&(G(t),A.current=!0);const v=M.useQueryClient(),c=b(),{data:u,isLoading:f,error:U,refetch:R,isFetching:C}=M.useQuery({queryKey:_,queryFn:ee,enabled:!g,retry:(s,w)=>w instanceof m&&(w.statusCode===401||w.statusCode===403)?!1:s<c.retry.count,retryDelay:c.retry.delay,staleTime:c.staleTime,gcTime:c.staleTime*2,refetchOnWindowFocus:c.refetchOnWindowFocus??!0,refetchOnReconnect:c.refetchOnReconnect??!0,refetchInterval:c.sessionCheckInterval||!1}),[S,L]=n.useState(null),d=n.useMemo(()=>f||C?"loading":Object.keys((u==null?void 0:u.userDetails)||{}).length>0?"authenticated":"unauthenticated",[f,C,u]),a=(u==null?void 0:u.userDetails)||null,x=(u==null?void 0:u.staticBaseUrl)||null,$=(u==null?void 0:u.buildId)||null,j=d==="authenticated",P=n.useRef(o);P.current=o;const E=n.useRef(r);E.current=r,n.useEffect(()=>{var s;f||(s=P.current)==null||s.call(P,d,a)},[d,a,f]),n.useEffect(()=>{var s;U&&(L(U),(s=E.current)==null||s.call(E,U))},[U]),n.useEffect(()=>{d==="unauthenticated"&&c.autoRedirect&&!f&&N()},[d,f,c.autoRedirect]);const p=n.useCallback((s,w)=>{N(s,w)},[]),q=n.useCallback(async s=>{v.removeQueries({queryKey:_}),await te(s)},[v]),B=n.useCallback(async()=>{if(C)return u||null;try{return(await R()).data||null}catch(s){return L(s),null}},[R,C,u]),O=n.useCallback(s=>(a==null?void 0:a.Role)===s,[a]),I=n.useCallback(s=>s.includes((a==null?void 0:a.Role)||""),[a]),F=n.useCallback(()=>{L(null)},[]),T=n.useCallback(()=>{R()},[R]),z=n.useMemo(()=>({user:a,staticBaseUrl:x,buildId:$,status:d,isAuthenticated:j,isLoading:f,login:p,logout:q,refreshSession:B,hasRole:O,hasAnyRole:I,error:S,clearError:F,_forceCheck:T}),[a,x,$,d,j,f,p,q,B,O,I,S,F,T]);return d==="loading"&&i?y.jsx(y.Fragment,{children:i}):d==="unauthenticated"&&!c.autoRedirect&&l?y.jsx(y.Fragment,{children:l}):y.jsx(V.Provider,{value:z,children:e})}function ne(){const e=n.useContext(V);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e}function oe(){const e=ne();return n.useMemo(()=>({user:e.user,staticBaseUrl:e.staticBaseUrl,buildId:e.buildId,status:e.status,isAuthenticated:e.isAuthenticated,isLoading:e.isLoading,login:e.login,logout:e.logout,refreshSession:e.refreshSession,hasRole:e.hasRole,hasAnyRole:e.hasAnyRole,error:e.error,clearError:e.clearError}),[e.user,e.staticBaseUrl,e.buildId,e.status,e.isAuthenticated,e.isLoading,e.login,e.logout,e.refreshSession,e.hasRole,e.hasAnyRole,e.error,e.clearError])}exports.AuthProviderName=W.AuthProviderName;exports.AuthStatus=W.AuthStatus;exports.AuthProvider=re;exports.AuthenticationError=m;exports.configureAuth=G;exports.getAuthBaseUrl=k;exports.getAuthConfig=b;exports.resetAuthConfig=D;exports.setAuthProvider=Z;exports.useAuth=oe;
package/dist/auth.mjs CHANGED
@@ -5,7 +5,7 @@ import { jsx as C, Fragment as W } from "react/jsx-runtime";
5
5
  import { useRef as p, useState as Z, useMemo as k, useEffect as L, useCallback as f, createContext as D, useContext as ee } from "react";
6
6
  import { useQueryClient as te, useQuery as re } from "@tanstack/react-query";
7
7
  import { c as ne, g as oe } from "./client-_ayziI1d.js";
8
- import { c as me, A as be } from "./constants-Cyi942Yr.js";
8
+ import { c as me, A as be } from "./constants-ConHc1oS.js";
9
9
  const H = {
10
10
  sessionEndpoint: "/api/id",
11
11
  providers: {
@@ -64,6 +64,10 @@ export declare class Item<T extends Record<string, unknown>> {
64
64
  private readonly _bdo;
65
65
  private readonly _accessorCache;
66
66
  constructor(bdo: BdoLike, data: Partial<T>);
67
+ /**
68
+ * Require instanceId or throw.
69
+ * TODO: Support create flow via draftInteraction to get temp _id
70
+ */
67
71
  private _requireInstanceId;
68
72
  /**
69
73
  * Get or create a field accessor for the given field.
@@ -1 +1 @@
1
- {"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../../sdk/bdo/core/Item.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,8BAA8B,EAC9B,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAEV,cAAc,EACd,aAAa,EACd,MAAM,yBAAyB,CAAC;AAYjC;;GAEG;AACH,UAAU,OAAO;IACf,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,WAAW,IAAI,OAAO,CAAC;IACvB,uBAAuB,CACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,oBAAoB,CAAC;IACxB,OAAO,IAAI,MAAM,CAAC;CACnB;AAGD,YAAY,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;AAE3G;;GAEG;AACH,KAAK,uBAAuB,CAAC,CAAC,IAC5B;IAAC,CAAC;CAAC,SAAS,CAAC,cAAc,CAAC,GACxB,8BAA8B,GAC9B,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,GACzB,6BAA6B,GAC7B,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAErC;;GAEG;AACH,KAAK,uBAAuB,CAAC,CAAC,IAC5B;IAAC,CAAC;CAAC,SAAS,CAAC,cAAc,CAAC,GACxB,8BAA8B,GAC9B,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,GACzB,6BAA6B,GAC7B,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAErC;;GAEG;AACH,KAAK,iBAAiB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7E,CAAC;AAEF;;GAEG;AACH,KAAK,iBAAiB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7E,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,CAClB,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,IAC5C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,GAC7B,iBAAiB,CAAC,SAAS,CAAC,GAC5B,iBAAiB,CAAC,SAAS,CAAC,GAC5B;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3B;;;;;;;;;;;;;;GAcG;AACH,qBAAa,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjD,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsD;gBAEzE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAgF1C,OAAO,CAAC,kBAAkB;IAK1B;;;OAGG;IACH,OAAO,CAAC,YAAY;IA6PpB;;OAEG;IACH,QAAQ,IAAI,oBAAoB;IAqChC;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC;CAGrB"}
1
+ {"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../../sdk/bdo/core/Item.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,8BAA8B,EAC9B,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAEV,cAAc,EACd,aAAa,EACd,MAAM,yBAAyB,CAAC;AAYjC;;GAEG;AACH,UAAU,OAAO;IACf,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,WAAW,IAAI,OAAO,CAAC;IACvB,uBAAuB,CACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,oBAAoB,CAAC;IACxB,OAAO,IAAI,MAAM,CAAC;CACnB;AAGD,YAAY,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;AAE3G;;GAEG;AACH,KAAK,uBAAuB,CAAC,CAAC,IAC5B;IAAC,CAAC;CAAC,SAAS,CAAC,cAAc,CAAC,GACxB,8BAA8B,GAC9B,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,GACzB,6BAA6B,GAC7B,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAErC;;GAEG;AACH,KAAK,uBAAuB,CAAC,CAAC,IAC5B;IAAC,CAAC;CAAC,SAAS,CAAC,cAAc,CAAC,GACxB,8BAA8B,GAC9B,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,GACzB,6BAA6B,GAC7B,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAErC;;GAEG;AACH,KAAK,iBAAiB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7E,CAAC;AAEF;;GAEG;AACH,KAAK,iBAAiB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7E,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,CAClB,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,IAC5C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,GAC7B,iBAAiB,CAAC,SAAS,CAAC,GAC5B,iBAAiB,CAAC,SAAS,CAAC,GAC5B;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3B;;;;;;;;;;;;;;GAcG;AACH,qBAAa,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjD,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsD;gBAEzE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAgF1C;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;;OAGG;IACH,OAAO,CAAC,YAAY;IA6PpB;;OAEG;IACH,QAAQ,IAAI,oBAAoB;IAqChC;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC;CAGrB"}
@@ -28,6 +28,6 @@ export declare class ReferenceField<TRef = unknown> extends BaseField<ReferenceF
28
28
  * Fetch referenced records from the backend via the fetchField API.
29
29
  * Requires the field to be bound to a parent BDO.
30
30
  */
31
- fetchOptions(instanceId?: string): Promise<TRef[]>;
31
+ fetchOptions(instanceId: string): Promise<TRef[]>;
32
32
  }
33
33
  //# sourceMappingURL=ReferenceField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReferenceField.d.ts","sourceRoot":"","sources":["../../../sdk/bdo/fields/ReferenceField.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,IAAI,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE/G,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAc,CAAC,IAAI,GAAG,OAAO,CAAE,SAAQ,SAAS,CAC3D,kBAAkB,CAAC,IAAI,CAAC,CACzB;gBACa,IAAI,EAAE,yBAAyB;IAI3C,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,eAAe,IAAI,SAAS,MAAM,EAAE,CAEvC;IAED,IAAI,YAAY,IAAI,SAAS,MAAM,EAAE,CAEpC;IAED,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,oBAAoB;IAuB3E;;;OAGG;IACG,YAAY,CAAC,UAAU,GAAE,MAAgB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;CAQlE"}
1
+ {"version":3,"file":"ReferenceField.d.ts","sourceRoot":"","sources":["../../../sdk/bdo/fields/ReferenceField.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,IAAI,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE/G,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAc,CAAC,IAAI,GAAG,OAAO,CAAE,SAAQ,SAAS,CAC3D,kBAAkB,CAAC,IAAI,CAAC,CACzB;gBACa,IAAI,EAAE,yBAAyB;IAI3C,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,eAAe,IAAI,SAAS,MAAM,EAAE,CAEvC;IAED,IAAI,YAAY,IAAI,SAAS,MAAM,EAAE,CAEpC;IAED,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,oBAAoB;IAuB3E;;;OAGG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;CAQxD"}
@@ -22,6 +22,6 @@ export declare class SelectField<T extends string | number = string> extends Bas
22
22
  /**
23
23
  * Fetch dynamic options from the backend, returned as typed SelectOption[]
24
24
  */
25
- fetchOptions(instanceId?: string): Promise<SelectOptionType<T>[]>;
25
+ fetchOptions(instanceId: string): Promise<SelectOptionType<T>[]>;
26
26
  }
27
27
  //# sourceMappingURL=SelectField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectField.d.ts","sourceRoot":"","sources":["../../../sdk/bdo/fields/SelectField.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,IAAI,sBAAsB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG3H,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;gBACnE,IAAI,EAAE,sBAAsB;IAIxC,kDAAkD;IAClD,IAAI,OAAO,IAAI,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAG5C;IAED,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,oBAAoB;IAqBpD;;OAEG;IACG,YAAY,CAAC,UAAU,GAAE,MAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;CAejF"}
1
+ {"version":3,"file":"SelectField.d.ts","sourceRoot":"","sources":["../../../sdk/bdo/fields/SelectField.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,IAAI,sBAAsB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG3H,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;gBACnE,IAAI,EAAE,sBAAsB;IAIxC,kDAAkD;IAClD,IAAI,OAAO,IAAI,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAG5C;IAED,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,oBAAoB;IAqBpD;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;CAevE"}
@@ -19,7 +19,7 @@ export declare class UserField extends BaseField<UserFieldType> {
19
19
  * Fetch user records from the backend via the fetchField API.
20
20
  * Requires the field to be bound to a parent BDO.
21
21
  */
22
- fetchOptions(instanceId?: string): Promise<UserFieldType[]>;
22
+ fetchOptions(instanceId: string): Promise<UserFieldType[]>;
23
23
  validate(value: UserFieldType | undefined): ValidationResultType;
24
24
  }
25
25
  //# sourceMappingURL=UserField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserField.d.ts","sourceRoot":"","sources":["../../../sdk/bdo/fields/UserField.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;;;GASG;AACH,qBAAa,SAAU,SAAQ,SAAS,CAAC,aAAa,CAAC;gBACzC,IAAI,EAAE,iBAAiB;IAInC,yCAAyC;IACzC,IAAI,cAAc,IAAI,MAAM,GAAG,SAAS,CAEvC;IAED;;;OAGG;IACG,YAAY,CAAC,UAAU,GAAE,MAAgB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAS1E,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,oBAAoB;CAsBjE"}
1
+ {"version":3,"file":"UserField.d.ts","sourceRoot":"","sources":["../../../sdk/bdo/fields/UserField.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;;;GASG;AACH,qBAAa,SAAU,SAAQ,SAAS,CAAC,aAAa,CAAC;gBACzC,IAAI,EAAE,iBAAiB;IAInC,yCAAyC;IACzC,IAAI,cAAc,IAAI,MAAM,GAAG,SAAS,CAEvC;IAED;;;OAGG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAShE,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,oBAAoB;CAsBjE"}
package/dist/bdo.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var E=Object.defineProperty;var T=(r,e,t)=>e in r?E(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var m=(r,e,t)=>T(r,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./client-D5k4SYuw.cjs"),w=require("./attachment-constants-B5jlqoKI.cjs"),o=require("./FileField-DU4UWo_t.cjs"),U=require("./constants-DEmYwKfC.cjs");class x{constructor(e,t){m(this,"_data");m(this,"_bdo");m(this,"_accessorCache",new Map);return this._bdo=e,this._data={...t},new Proxy(this,{get(a,s,n){return s==="validate"||s==="toJSON"||s==="_bdo"||s==="_data"||s==="_accessorCache"||s==="_getAccessor"||s==="_requireInstanceId"||typeof s=="symbol"?Reflect.get(a,s,n):s==="_id"?a._data._id:a._getAccessor(s)},set(a,s,n){return s==="_bdo"||s==="_data"||s==="_accessorCache"||s==="validate"||s==="toJSON"?!1:typeof s=="symbol"?Reflect.set(a,s,n):(a._data[s]=n,!0)},has(a,s){return s==="validate"||s==="toJSON"?!0:s in a._data||s in a._bdo.getFields()},ownKeys(a){return[...Object.keys(a._bdo.getFields()),"validate","toJSON"]},getOwnPropertyDescriptor(a,s){if(s==="validate"||s==="toJSON")return{configurable:!0,enumerable:!1,value:a[s]};const n=a._bdo.getFields();if(s in n||s in a._data)return{configurable:!0,enumerable:!0,get:()=>a._getAccessor(s)}}})}_requireInstanceId(){return this._data._id||"draft"}_getAccessor(e){if(this._accessorCache.has(e))return this._accessorCache.get(e);const a=this._bdo.getFields()[e],s=(a==null?void 0:a.meta)??{_id:e,Name:e,Type:"String"},n=(a==null?void 0:a.readOnly)??!1,d=()=>{if(a){const _=a.validate(this._data[e]);if(!_.valid)return _}return this._bdo.hasMetadata()?this._bdo.validateFieldExpression(e,this._data[e],this.toJSON()):{valid:!0,errors:[]}},h=_=>{const f=this._data[e];return f??_};let y;if(n?y={label:(a==null?void 0:a.label)??e,required:(a==null?void 0:a.required)??!1,readOnly:!0,defaultValue:a==null?void 0:a.defaultValue,meta:s,get:()=>this._data[e],getOrDefault:h,validate:d}:y={label:(a==null?void 0:a.label)??e,required:(a==null?void 0:a.required)??!1,readOnly:!1,defaultValue:a==null?void 0:a.defaultValue,meta:s,get:()=>this._data[e],getOrDefault:h,set:_=>{this._data[e]=_},validate:d},s.Type==="Image"||s.Type==="File"){const _=this._bdo.getBoId(),f=y;s.Type==="Image"?(f.getDownloadUrl=async l=>{const c=this._requireInstanceId(),g=this._data[e];if(!(g!=null&&g._id))throw new Error(`${e} has no image to download`);return i.api(_).getDownloadUrl(c,e,g._id,l)},n||(f.upload=async l=>{w.validateFileExtension(l.name,"Image");const c=this._requireInstanceId(),g={FileName:l.name,Size:l.size,FileExtension:w.extractFileExtension(l.name)},[u]=await i.api(_).getUploadUrl(c,e,[g]);await fetch(u.UploadUrl.URL,{method:"PUT",headers:{"Content-Type":u.ContentType},body:l});const F={_id:u._id,_name:u._name,FileName:u.FileName,FileExtension:u.FileExtension,Size:u.Size,ContentType:u.ContentType};return this._data[e]=F,F},f.deleteAttachment=async()=>{const l=this._requireInstanceId(),c=this._data[e];if(!(c!=null&&c._id))throw new Error(`${e} has no image to delete`);await i.api(_).deleteAttachment(l,e,c._id),this._data[e]=null})):(f.getDownloadUrl=async(l,c)=>{const g=this._requireInstanceId();return i.api(_).getDownloadUrl(g,e,l,c)},f.getDownloadUrls=async l=>{const c=this._requireInstanceId();return i.api(_).getDownloadUrls(c,e,l)},n||(f.upload=async l=>{for(const b of l)w.validateFileExtension(b.name,"File");const c=this._requireInstanceId(),g=l.map(b=>({FileName:b.name,Size:b.size,FileExtension:w.extractFileExtension(b.name)})),u=await i.api(_).getUploadUrl(c,e,g),F=await Promise.all(l.map(async(b,p)=>(await fetch(u[p].UploadUrl.URL,{method:"PUT",headers:{"Content-Type":u[p].ContentType},body:b}),{_id:u[p]._id,_name:u[p]._name,FileName:u[p].FileName,FileExtension:u[p].FileExtension,Size:u[p].Size,ContentType:u[p].ContentType}))),v=this._data[e]??[];return this._data[e]=[...v,...F],F},f.deleteAttachment=async l=>{const c=this._requireInstanceId();await i.api(_).deleteAttachment(c,e,l);const g=this._data[e]??[];this._data[e]=g.filter(u=>u._id!==l)}))}return this._accessorCache.set(e,y),y}validate(){const e=this._bdo.getFields(),t=[],a=this.toJSON();for(const[s,n]of Object.entries(e)){if(n.readOnly)continue;const d=this._data[s],h=n.validate(d);if(!h.valid){t.push(...h.errors);continue}if(this._bdo.hasMetadata()){const y=this._bdo.validateFieldExpression(s,d,a);y.valid||t.push(...y.errors)}}return{valid:t.length===0,errors:t}}toJSON(){return{...this._data}}}const A={CONCAT:(...r)=>r.map(e=>String(e??"")).join(""),UPPER:r=>String(r??"").toUpperCase(),LOWER:r=>String(r??"").toLowerCase(),TRIM:r=>String(r??"").trim(),LENGTH:r=>String(r??"").length,SUBSTRING:(r,e,t)=>String(r??"").substring(e,t!==void 0?e+t:void 0),REPLACE:(r,e,t)=>String(r??"").replace(e,t),SUM:(...r)=>r.reduce((e,t)=>e+(Number(t)||0),0),AVG:(...r)=>{const e=r.filter(t=>t!=null&&!isNaN(Number(t)));return e.length===0?0:e.reduce((t,a)=>t+Number(a),0)/e.length},MIN:(...r)=>{const e=r.filter(t=>t!=null&&!isNaN(Number(t))).map(t=>Number(t));return e.length===0?0:Math.min(...e)},MAX:(...r)=>{const e=r.filter(t=>t!=null&&!isNaN(Number(t))).map(t=>Number(t));return e.length===0?0:Math.max(...e)},ABS:r=>Math.abs(Number(r)||0),ROUND:r=>Math.round(Number(r)||0),FLOOR:r=>Math.floor(Number(r)||0),CEIL:r=>Math.ceil(Number(r)||0),YEAR:r=>{const e=new Date(r);return isNaN(e.getTime())?0:e.getFullYear()},MONTH:r=>{const e=new Date(r);return isNaN(e.getTime())?0:e.getMonth()+1},DAY:r=>{const e=new Date(r);return isNaN(e.getTime())?0:e.getDate()},DATE_DIFF:(r,e)=>{const t=new Date(r),a=new Date(e);if(isNaN(t.getTime())||isNaN(a.getTime()))return 0;const s=Math.abs(t.getTime()-a.getTime());return Math.ceil(s/(1e3*60*60*24))},ADD_DAYS:(r,e)=>{const t=new Date(r);return isNaN(t.getTime())?new Date(NaN):(t.setDate(t.getDate()+e),t)},ADD_MONTHS:(r,e)=>{const t=new Date(r);return isNaN(t.getTime())?new Date(NaN):(t.setMonth(t.getMonth()+e),t)},IF:(r,e,t)=>r?e:t,UUID:()=>typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{const e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)})};function S(){const r=new Date;return{NOW:r,TODAY:new Date(r.getFullYear(),r.getMonth(),r.getDate()),CURRENT_USER:{Id:"",Email:"",FirstName:"",LastName:""}}}function N(r,e){var t;switch(r.Type){case"Literal":return r.Value;case"Identifier":return e.formValues[r.Name];case"SystemIdentifier":return O(r,e);case"BinaryExpression":return R(r,e);case"LogicalExpression":return D(r,e);case"CallExpression":return C(r,e);case"MemberExpression":return M(r,e);case"AssignmentExpression":return((t=r.Arguments)==null?void 0:t.length)===1?N(r.Arguments[0],e):void 0;default:throw new Error(`Unsupported expression type: ${r.Type}`)}}function O(r,e){const t=r.Name,a=e.systemValues[t];return r.Property?a&&typeof a=="object"?a[r.Property.Name]:void 0:a}function R(r,e){if(!r.Arguments||r.Arguments.length<2)throw new Error("BinaryExpression requires 2 arguments");const[t,a]=r.Arguments,s=N(t,e),n=N(a,e);switch(r.Operator){case"==":return s==n;case"!=":return s!=n;case"<":return Number(s)<Number(n);case"<=":return Number(s)<=Number(n);case">":return Number(s)>Number(n);case">=":return Number(s)>=Number(n);case"+":return Number(s)+Number(n);case"-":return Number(s)-Number(n);case"*":return Number(s)*Number(n);case"/":return Number(n)!==0?Number(s)/Number(n):0;case"%":return Number(s)%Number(n);default:throw new Error(`Unsupported binary operator: ${r.Operator}`)}}function D(r,e){if(!r.Arguments||r.Arguments.length===0)throw new Error("LogicalExpression requires at least 1 argument");const t=r.Arguments;switch(r.Operator){case"AND":return t.every(a=>!!N(a,e));case"OR":return t.some(a=>!!N(a,e));case"!":return!N(t[0],e);default:throw new Error(`Unsupported logical operator: ${r.Operator}`)}}function C(r,e){if(!r.Callee)throw new Error("CallExpression requires a Callee");const t=A[r.Callee];if(!t)throw new Error(`Unknown function: ${r.Callee}`);const a=(r.Arguments??[]).map(s=>N(s,e));return t(...a)}function M(r,e){var s,n;if(!((s=r.Arguments)!=null&&s.length))return;const t=N(r.Arguments[0],e),a=(n=r.Arguments[0].Property)==null?void 0:n.Name;return a&&t&&typeof t=="object"?t[a]:t}class B{constructor(){m(this,"fieldRules",new Map);m(this,"metadata",null)}loadMetadata(e){var t,a;this.metadata=e,this.fieldRules.clear();for(const[s,n]of Object.entries(e.Fields)){const d=[];if(n.Validation&&Array.isArray(n.Validation)){for(const h of n.Validation)if(typeof h=="object"&&h.ExpressionTree)d.push(h);else if(typeof h=="string"){const y=(a=(t=e.Rules)==null?void 0:t.Validation)==null?void 0:a[h];y&&d.push(y)}}d.length>0&&this.fieldRules.set(s,d)}}hasMetadata(){return this.metadata!==null}getFieldRules(e){return this.fieldRules.get(e)??[]}validateField(e,t,a){const s=this.fieldRules.get(e);if(!s||s.length===0)return{valid:!0,errors:[]};const n={formValues:{...a,[e]:t},systemValues:S()};for(const d of s)try{if(!N(d.ExpressionTree,n))return{valid:!1,errors:[d.Message||`Validation failed: ${d.Name||d.Id}`]}}catch(h){console.warn(`Expression evaluation failed for rule ${d.Id}:`,h)}return{valid:!0,errors:[]}}validateAll(e){const t=[];for(const a of this.fieldRules.keys()){const s=this.validateField(a,e[a],e);s.valid||t.push(...s.errors)}return{valid:t.length===0,errors:t}}}class I{constructor(){m(this,"_id",new o.StringField({_id:"_id",Name:"ID",Type:"String",ReadOnly:!0}));m(this,"_created_at",new o.DateTimeField({_id:"_created_at",Name:"Created At",Type:"DateTime",ReadOnly:!0}));m(this,"_modified_at",new o.DateTimeField({_id:"_modified_at",Name:"Modified At",Type:"DateTime",ReadOnly:!0}));m(this,"_created_by",new o.UserField({_id:"_created_by",Name:"Created By",Type:"User",ReadOnly:!0}));m(this,"_modified_by",new o.UserField({_id:"_modified_by",Name:"Modified By",Type:"User",ReadOnly:!0}));m(this,"_version",new o.StringField({_id:"_version",Name:"Version",Type:"String",ReadOnly:!0}));m(this,"_m_version",new o.StringField({_id:"_m_version",Name:"Metadata Version",Type:"String",ReadOnly:!0}));m(this,"_fieldsBound",!1);m(this,"_fieldsCache",null);m(this,"_expressionEngine",new B)}getBoId(){return this.meta._id}getFields(){if(this._fieldsCache)return this._fieldsCache;const e={};for(const t of Object.keys(this)){const a=this[t];a instanceof o.BaseField&&(e[t]=a)}if(!this._fieldsBound){for(const t of Object.values(e))t._parentBoId=this.meta._id;this._fieldsBound=!0}return this._fieldsCache=e,e}loadMetadata(e){this._expressionEngine.loadMetadata(e)}hasMetadata(){return this._expressionEngine.hasMetadata()}validateFieldExpression(e,t,a){return this._expressionEngine.hasMetadata()?this._expressionEngine.validateField(e,t,a):{valid:!0,errors:[]}}async get(e){const t=await i.api(this.meta._id).get(e);return new x(this,t)}async list(e){return(await i.api(this.meta._id).list(e)).Data.map(a=>new x(this,a))}async count(e){return(await i.api(this.meta._id).count(e)).Count}async create(e){const t=await i.api(this.meta._id).create(e);return new x(this,{...e,_id:t._id})}async update(e,t){return i.api(this.meta._id).update(e,t)}async delete(e){return i.api(this.meta._id).delete(e)}async draft(e){return i.api(this.meta._id).draft(e)}async draftInteraction(e){return i.api(this.meta._id).draftInteraction(e)}createItem(e){return new x(this,e??{})}async draftUpdate(e,t){return i.api(this.meta._id).draftUpdate(e,t)}async draftPatch(e,t){return i.api(this.meta._id).draftPatch(e,t)}async metric(e){return i.api(this.meta._id).metric(e)}async pivot(e){return i.api(this.meta._id).pivot(e)}async getUploadUrl(e,t,a){return i.api(this.meta._id).getUploadUrl(e,t,a)}async getDownloadUrl(e,t,a,s){return i.api(this.meta._id).getDownloadUrl(e,t,a,s)}async getDownloadUrls(e,t,a){return i.api(this.meta._id).getDownloadUrls(e,t,a)}async deleteAttachment(e,t,a){return i.api(this.meta._id).deleteAttachment(e,t,a)}}class q extends o.BaseField{constructor(e){super(e)}get elementType(){return this._meta.Property}validate(e){return e!=null&&!Array.isArray(e)?{valid:!1,errors:[`${this.label} must be an array`]}:{valid:!0,errors:[]}}}class V extends o.BaseField{constructor(e){super(e)}get properties(){return this._meta.Property}validate(e){return e==null?{valid:!0,errors:[]}:typeof e!="object"||Array.isArray(e)?{valid:!1,errors:[`${this.label} must be a valid object`]}:{valid:!0,errors:[]}}}class j extends o.BaseField{constructor(e){super(e)}validate(e){return e==null?{valid:!0,errors:[]}:typeof e!="object"||Array.isArray(e)?{valid:!1,errors:[`${this.label} must be a valid image object`]}:!e._id||!e.FileName?{valid:!1,errors:[`${this.label} must have _id and FileName`]}:{valid:!0,errors:[]}}}exports.BaseField=o.BaseField;exports.BooleanField=o.BooleanField;exports.DateField=o.DateField;exports.DateTimeField=o.DateTimeField;exports.FileField=o.FileField;exports.NumberField=o.NumberField;exports.ReferenceField=o.ReferenceField;exports.SelectField=o.SelectField;exports.StringField=o.StringField;exports.TextAreaField=o.TextField;exports.TextField=o.TextField;exports.UserField=o.UserField;exports.SystemField=U.SystemField;exports.ArrayField=q;exports.BaseBdo=I;exports.ImageField=j;exports.ObjectField=V;
1
+ "use strict";var E=Object.defineProperty;var T=(r,e,t)=>e in r?E(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var m=(r,e,t)=>T(r,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./client-D5k4SYuw.cjs"),w=require("./attachment-constants-B5jlqoKI.cjs"),o=require("./FileField-eDeuzln8.cjs"),U=require("./constants-QX2RX-wu.cjs");class x{constructor(e,t){m(this,"_data");m(this,"_bdo");m(this,"_accessorCache",new Map);return this._bdo=e,this._data={...t},new Proxy(this,{get(a,s,n){return s==="validate"||s==="toJSON"||s==="_bdo"||s==="_data"||s==="_accessorCache"||s==="_getAccessor"||s==="_requireInstanceId"||typeof s=="symbol"?Reflect.get(a,s,n):s==="_id"?a._data._id:a._getAccessor(s)},set(a,s,n){return s==="_bdo"||s==="_data"||s==="_accessorCache"||s==="validate"||s==="toJSON"?!1:typeof s=="symbol"?Reflect.set(a,s,n):(a._data[s]=n,!0)},has(a,s){return s==="validate"||s==="toJSON"?!0:s in a._data||s in a._bdo.getFields()},ownKeys(a){return[...Object.keys(a._bdo.getFields()),"validate","toJSON"]},getOwnPropertyDescriptor(a,s){if(s==="validate"||s==="toJSON")return{configurable:!0,enumerable:!1,value:a[s]};const n=a._bdo.getFields();if(s in n||s in a._data)return{configurable:!0,enumerable:!0,get:()=>a._getAccessor(s)}}})}_requireInstanceId(){const e=this._data._id;if(!e)throw new Error("Cannot perform attachment operation: item has no _id. Save the item first.");return e}_getAccessor(e){if(this._accessorCache.has(e))return this._accessorCache.get(e);const a=this._bdo.getFields()[e],s=(a==null?void 0:a.meta)??{_id:e,Name:e,Type:"String"},n=(a==null?void 0:a.readOnly)??!1,d=()=>{if(a){const _=a.validate(this._data[e]);if(!_.valid)return _}return this._bdo.hasMetadata()?this._bdo.validateFieldExpression(e,this._data[e],this.toJSON()):{valid:!0,errors:[]}},h=_=>{const f=this._data[e];return f??_};let y;if(n?y={label:(a==null?void 0:a.label)??e,required:(a==null?void 0:a.required)??!1,readOnly:!0,defaultValue:a==null?void 0:a.defaultValue,meta:s,get:()=>this._data[e],getOrDefault:h,validate:d}:y={label:(a==null?void 0:a.label)??e,required:(a==null?void 0:a.required)??!1,readOnly:!1,defaultValue:a==null?void 0:a.defaultValue,meta:s,get:()=>this._data[e],getOrDefault:h,set:_=>{this._data[e]=_},validate:d},s.Type==="Image"||s.Type==="File"){const _=this._bdo.getBoId(),f=y;s.Type==="Image"?(f.getDownloadUrl=async l=>{const c=this._requireInstanceId(),g=this._data[e];if(!(g!=null&&g._id))throw new Error(`${e} has no image to download`);return i.api(_).getDownloadUrl(c,e,g._id,l)},n||(f.upload=async l=>{w.validateFileExtension(l.name,"Image");const c=this._requireInstanceId(),g={FileName:l.name,Size:l.size,FileExtension:w.extractFileExtension(l.name)},[u]=await i.api(_).getUploadUrl(c,e,[g]);await fetch(u.UploadUrl.URL,{method:"PUT",headers:{"Content-Type":u.ContentType},body:l});const F={_id:u._id,_name:u._name,FileName:u.FileName,FileExtension:u.FileExtension,Size:u.Size,ContentType:u.ContentType};return this._data[e]=F,F},f.deleteAttachment=async()=>{const l=this._requireInstanceId(),c=this._data[e];if(!(c!=null&&c._id))throw new Error(`${e} has no image to delete`);await i.api(_).deleteAttachment(l,e,c._id),this._data[e]=null})):(f.getDownloadUrl=async(l,c)=>{const g=this._requireInstanceId();return i.api(_).getDownloadUrl(g,e,l,c)},f.getDownloadUrls=async l=>{const c=this._requireInstanceId();return i.api(_).getDownloadUrls(c,e,l)},n||(f.upload=async l=>{for(const b of l)w.validateFileExtension(b.name,"File");const c=this._requireInstanceId(),g=l.map(b=>({FileName:b.name,Size:b.size,FileExtension:w.extractFileExtension(b.name)})),u=await i.api(_).getUploadUrl(c,e,g),F=await Promise.all(l.map(async(b,N)=>(await fetch(u[N].UploadUrl.URL,{method:"PUT",headers:{"Content-Type":u[N].ContentType},body:b}),{_id:u[N]._id,_name:u[N]._name,FileName:u[N].FileName,FileExtension:u[N].FileExtension,Size:u[N].Size,ContentType:u[N].ContentType}))),v=this._data[e]??[];return this._data[e]=[...v,...F],F},f.deleteAttachment=async l=>{const c=this._requireInstanceId();await i.api(_).deleteAttachment(c,e,l);const g=this._data[e]??[];this._data[e]=g.filter(u=>u._id!==l)}))}return this._accessorCache.set(e,y),y}validate(){const e=this._bdo.getFields(),t=[],a=this.toJSON();for(const[s,n]of Object.entries(e)){if(n.readOnly)continue;const d=this._data[s],h=n.validate(d);if(!h.valid){t.push(...h.errors);continue}if(this._bdo.hasMetadata()){const y=this._bdo.validateFieldExpression(s,d,a);y.valid||t.push(...y.errors)}}return{valid:t.length===0,errors:t}}toJSON(){return{...this._data}}}const A={CONCAT:(...r)=>r.map(e=>String(e??"")).join(""),UPPER:r=>String(r??"").toUpperCase(),LOWER:r=>String(r??"").toLowerCase(),TRIM:r=>String(r??"").trim(),LENGTH:r=>String(r??"").length,SUBSTRING:(r,e,t)=>String(r??"").substring(e,t!==void 0?e+t:void 0),REPLACE:(r,e,t)=>String(r??"").replace(e,t),SUM:(...r)=>r.reduce((e,t)=>e+(Number(t)||0),0),AVG:(...r)=>{const e=r.filter(t=>t!=null&&!isNaN(Number(t)));return e.length===0?0:e.reduce((t,a)=>t+Number(a),0)/e.length},MIN:(...r)=>{const e=r.filter(t=>t!=null&&!isNaN(Number(t))).map(t=>Number(t));return e.length===0?0:Math.min(...e)},MAX:(...r)=>{const e=r.filter(t=>t!=null&&!isNaN(Number(t))).map(t=>Number(t));return e.length===0?0:Math.max(...e)},ABS:r=>Math.abs(Number(r)||0),ROUND:r=>Math.round(Number(r)||0),FLOOR:r=>Math.floor(Number(r)||0),CEIL:r=>Math.ceil(Number(r)||0),YEAR:r=>{const e=new Date(r);return isNaN(e.getTime())?0:e.getFullYear()},MONTH:r=>{const e=new Date(r);return isNaN(e.getTime())?0:e.getMonth()+1},DAY:r=>{const e=new Date(r);return isNaN(e.getTime())?0:e.getDate()},DATE_DIFF:(r,e)=>{const t=new Date(r),a=new Date(e);if(isNaN(t.getTime())||isNaN(a.getTime()))return 0;const s=Math.abs(t.getTime()-a.getTime());return Math.ceil(s/(1e3*60*60*24))},ADD_DAYS:(r,e)=>{const t=new Date(r);return isNaN(t.getTime())?new Date(NaN):(t.setDate(t.getDate()+e),t)},ADD_MONTHS:(r,e)=>{const t=new Date(r);return isNaN(t.getTime())?new Date(NaN):(t.setMonth(t.getMonth()+e),t)},IF:(r,e,t)=>r?e:t,UUID:()=>typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{const e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)})};function S(){const r=new Date;return{NOW:r,TODAY:new Date(r.getFullYear(),r.getMonth(),r.getDate()),CURRENT_USER:{Id:"",Email:"",FirstName:"",LastName:""}}}function p(r,e){var t;switch(r.Type){case"Literal":return r.Value;case"Identifier":return e.formValues[r.Name];case"SystemIdentifier":return O(r,e);case"BinaryExpression":return R(r,e);case"LogicalExpression":return C(r,e);case"CallExpression":return D(r,e);case"MemberExpression":return M(r,e);case"AssignmentExpression":return((t=r.Arguments)==null?void 0:t.length)===1?p(r.Arguments[0],e):void 0;default:throw new Error(`Unsupported expression type: ${r.Type}`)}}function O(r,e){const t=r.Name,a=e.systemValues[t];return r.Property?a&&typeof a=="object"?a[r.Property.Name]:void 0:a}function R(r,e){if(!r.Arguments||r.Arguments.length<2)throw new Error("BinaryExpression requires 2 arguments");const[t,a]=r.Arguments,s=p(t,e),n=p(a,e);switch(r.Operator){case"==":return s==n;case"!=":return s!=n;case"<":return Number(s)<Number(n);case"<=":return Number(s)<=Number(n);case">":return Number(s)>Number(n);case">=":return Number(s)>=Number(n);case"+":return Number(s)+Number(n);case"-":return Number(s)-Number(n);case"*":return Number(s)*Number(n);case"/":return Number(n)!==0?Number(s)/Number(n):0;case"%":return Number(s)%Number(n);default:throw new Error(`Unsupported binary operator: ${r.Operator}`)}}function C(r,e){if(!r.Arguments||r.Arguments.length===0)throw new Error("LogicalExpression requires at least 1 argument");const t=r.Arguments;switch(r.Operator){case"AND":return t.every(a=>!!p(a,e));case"OR":return t.some(a=>!!p(a,e));case"!":return!p(t[0],e);default:throw new Error(`Unsupported logical operator: ${r.Operator}`)}}function D(r,e){if(!r.Callee)throw new Error("CallExpression requires a Callee");const t=A[r.Callee];if(!t)throw new Error(`Unknown function: ${r.Callee}`);const a=(r.Arguments??[]).map(s=>p(s,e));return t(...a)}function M(r,e){var s,n;if(!((s=r.Arguments)!=null&&s.length))return;const t=p(r.Arguments[0],e),a=(n=r.Arguments[0].Property)==null?void 0:n.Name;return a&&t&&typeof t=="object"?t[a]:t}class B{constructor(){m(this,"fieldRules",new Map);m(this,"metadata",null)}loadMetadata(e){var t,a;this.metadata=e,this.fieldRules.clear();for(const[s,n]of Object.entries(e.Fields)){const d=[];if(n.Validation&&Array.isArray(n.Validation)){for(const h of n.Validation)if(typeof h=="object"&&h.ExpressionTree)d.push(h);else if(typeof h=="string"){const y=(a=(t=e.Rules)==null?void 0:t.Validation)==null?void 0:a[h];y&&d.push(y)}}d.length>0&&this.fieldRules.set(s,d)}}hasMetadata(){return this.metadata!==null}getFieldRules(e){return this.fieldRules.get(e)??[]}validateField(e,t,a){const s=this.fieldRules.get(e);if(!s||s.length===0)return{valid:!0,errors:[]};const n={formValues:{...a,[e]:t},systemValues:S()};for(const d of s)try{if(!p(d.ExpressionTree,n))return{valid:!1,errors:[d.Message||`Validation failed: ${d.Name||d.Id}`]}}catch(h){console.warn(`Expression evaluation failed for rule ${d.Id}:`,h)}return{valid:!0,errors:[]}}validateAll(e){const t=[];for(const a of this.fieldRules.keys()){const s=this.validateField(a,e[a],e);s.valid||t.push(...s.errors)}return{valid:t.length===0,errors:t}}}class I{constructor(){m(this,"_id",new o.StringField({_id:"_id",Name:"ID",Type:"String",ReadOnly:!0}));m(this,"_created_at",new o.DateTimeField({_id:"_created_at",Name:"Created At",Type:"DateTime",ReadOnly:!0}));m(this,"_modified_at",new o.DateTimeField({_id:"_modified_at",Name:"Modified At",Type:"DateTime",ReadOnly:!0}));m(this,"_created_by",new o.UserField({_id:"_created_by",Name:"Created By",Type:"User",ReadOnly:!0}));m(this,"_modified_by",new o.UserField({_id:"_modified_by",Name:"Modified By",Type:"User",ReadOnly:!0}));m(this,"_version",new o.StringField({_id:"_version",Name:"Version",Type:"String",ReadOnly:!0}));m(this,"_m_version",new o.StringField({_id:"_m_version",Name:"Metadata Version",Type:"String",ReadOnly:!0}));m(this,"_fieldsBound",!1);m(this,"_fieldsCache",null);m(this,"_expressionEngine",new B)}getBoId(){return this.meta._id}getFields(){if(this._fieldsCache)return this._fieldsCache;const e={};for(const t of Object.keys(this)){const a=this[t];a instanceof o.BaseField&&(e[t]=a)}if(!this._fieldsBound){for(const t of Object.values(e))t._parentBoId=this.meta._id;this._fieldsBound=!0}return this._fieldsCache=e,e}loadMetadata(e){this._expressionEngine.loadMetadata(e)}hasMetadata(){return this._expressionEngine.hasMetadata()}validateFieldExpression(e,t,a){return this._expressionEngine.hasMetadata()?this._expressionEngine.validateField(e,t,a):{valid:!0,errors:[]}}async get(e){const t=await i.api(this.meta._id).get(e);return new x(this,t)}async list(e){return(await i.api(this.meta._id).list(e)).Data.map(a=>new x(this,a))}async count(e){return(await i.api(this.meta._id).count(e)).Count}async create(e){const t=await i.api(this.meta._id).create(e);return new x(this,{...e,_id:t._id})}async update(e,t){return i.api(this.meta._id).update(e,t)}async delete(e){return i.api(this.meta._id).delete(e)}async draft(e){return i.api(this.meta._id).draft(e)}async draftInteraction(e){return i.api(this.meta._id).draftInteraction(e)}createItem(e){return new x(this,e??{})}async draftUpdate(e,t){return i.api(this.meta._id).draftUpdate(e,t)}async draftPatch(e,t){return i.api(this.meta._id).draftPatch(e,t)}async metric(e){return i.api(this.meta._id).metric(e)}async pivot(e){return i.api(this.meta._id).pivot(e)}async getUploadUrl(e,t,a){return i.api(this.meta._id).getUploadUrl(e,t,a)}async getDownloadUrl(e,t,a,s){return i.api(this.meta._id).getDownloadUrl(e,t,a,s)}async getDownloadUrls(e,t,a){return i.api(this.meta._id).getDownloadUrls(e,t,a)}async deleteAttachment(e,t,a){return i.api(this.meta._id).deleteAttachment(e,t,a)}}class q extends o.BaseField{constructor(e){super(e)}get elementType(){return this._meta.Property}validate(e){return e!=null&&!Array.isArray(e)?{valid:!1,errors:[`${this.label} must be an array`]}:{valid:!0,errors:[]}}}class V extends o.BaseField{constructor(e){super(e)}get properties(){return this._meta.Property}validate(e){return e==null?{valid:!0,errors:[]}:typeof e!="object"||Array.isArray(e)?{valid:!1,errors:[`${this.label} must be a valid object`]}:{valid:!0,errors:[]}}}class j extends o.BaseField{constructor(e){super(e)}validate(e){return e==null?{valid:!0,errors:[]}:typeof e!="object"||Array.isArray(e)?{valid:!1,errors:[`${this.label} must be a valid image object`]}:!e._id||!e.FileName?{valid:!1,errors:[`${this.label} must have _id and FileName`]}:{valid:!0,errors:[]}}}exports.BaseField=o.BaseField;exports.BooleanField=o.BooleanField;exports.DateField=o.DateField;exports.DateTimeField=o.DateTimeField;exports.FileField=o.FileField;exports.NumberField=o.NumberField;exports.ReferenceField=o.ReferenceField;exports.SelectField=o.SelectField;exports.StringField=o.StringField;exports.TextAreaField=o.TextField;exports.TextField=o.TextField;exports.UserField=o.UserField;exports.SystemField=U.SystemField;exports.ArrayField=q;exports.BaseBdo=I;exports.ImageField=j;exports.ObjectField=V;
package/dist/bdo.mjs CHANGED
@@ -1,16 +1,16 @@
1
1
  var O = Object.defineProperty;
2
2
  var S = (r, e, t) => e in r ? O(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
- var c = (r, e, t) => S(r, typeof e != "symbol" ? e + "" : e, t);
3
+ var d = (r, e, t) => S(r, typeof e != "symbol" ? e + "" : e, t);
4
4
  import { a as i } from "./client-_ayziI1d.js";
5
5
  import { v, e as E } from "./attachment-constants-C2UHWxmp.js";
6
- import { S as F, D as T, U, B as x } from "./FileField-CZjS2uLh.js";
7
- import { a as K, b as W, F as X, N as Q, R as Z, c as ee, T as te, T as re } from "./FileField-CZjS2uLh.js";
8
- import { d as se } from "./constants-Cyi942Yr.js";
6
+ import { S as F, D as T, U, B as x } from "./FileField-BWrSHNRq.js";
7
+ import { a as K, b as W, F as X, N as Q, R as Z, c as ee, T as te, T as re } from "./FileField-BWrSHNRq.js";
8
+ import { d as se } from "./constants-ConHc1oS.js";
9
9
  class w {
10
10
  constructor(e, t) {
11
- c(this, "_data");
12
- c(this, "_bdo");
13
- c(this, "_accessorCache", /* @__PURE__ */ new Map());
11
+ d(this, "_data");
12
+ d(this, "_bdo");
13
+ d(this, "_accessorCache", /* @__PURE__ */ new Map());
14
14
  return this._bdo = e, this._data = { ...t }, new Proxy(this, {
15
15
  get(a, s, n) {
16
16
  return s === "validate" || s === "toJSON" || s === "_bdo" || s === "_data" || s === "_accessorCache" || s === "_getAccessor" || s === "_requireInstanceId" || typeof s == "symbol" ? Reflect.get(a, s, n) : s === "_id" ? a._data._id : a._getAccessor(s);
@@ -41,8 +41,17 @@ class w {
41
41
  }
42
42
  });
43
43
  }
44
+ /**
45
+ * Require instanceId or throw.
46
+ * TODO: Support create flow via draftInteraction to get temp _id
47
+ */
44
48
  _requireInstanceId() {
45
- return this._data._id || "draft";
49
+ const e = this._data._id;
50
+ if (!e)
51
+ throw new Error(
52
+ "Cannot perform attachment operation: item has no _id. Save the item first."
53
+ );
54
+ return e;
46
55
  }
47
56
  /**
48
57
  * Get or create a field accessor for the given field.
@@ -67,8 +76,8 @@ class w {
67
76
  this.toJSON()
68
77
  ) : { valid: !0, errors: [] };
69
78
  }, m = (h) => {
70
- const g = this._data[e];
71
- return g ?? h;
79
+ const f = this._data[e];
80
+ return f ?? h;
72
81
  };
73
82
  let y;
74
83
  if (n ? y = {
@@ -93,25 +102,25 @@ class w {
93
102
  },
94
103
  validate: l
95
104
  }, s.Type === "Image" || s.Type === "File") {
96
- const h = this._bdo.getBoId(), g = y;
97
- s.Type === "Image" ? (g.getDownloadUrl = async (o) => {
98
- const d = this._requireInstanceId(), _ = this._data[e];
105
+ const h = this._bdo.getBoId(), f = y;
106
+ s.Type === "Image" ? (f.getDownloadUrl = async (o) => {
107
+ const c = this._requireInstanceId(), _ = this._data[e];
99
108
  if (!(_ != null && _._id))
100
109
  throw new Error(`${e} has no image to download`);
101
110
  return i(h).getDownloadUrl(
102
- d,
111
+ c,
103
112
  e,
104
113
  _._id,
105
114
  o
106
115
  );
107
- }, n || (g.upload = async (o) => {
116
+ }, n || (f.upload = async (o) => {
108
117
  v(o.name, "Image");
109
- const d = this._requireInstanceId(), _ = {
118
+ const c = this._requireInstanceId(), _ = {
110
119
  FileName: o.name,
111
120
  Size: o.size,
112
121
  FileExtension: E(o.name)
113
122
  }, [u] = await i(h).getUploadUrl(
114
- d,
123
+ c,
115
124
  e,
116
125
  [_]
117
126
  );
@@ -129,31 +138,31 @@ class w {
129
138
  ContentType: u.ContentType
130
139
  };
131
140
  return this._data[e] = p, p;
132
- }, g.deleteAttachment = async () => {
133
- const o = this._requireInstanceId(), d = this._data[e];
134
- if (!(d != null && d._id))
141
+ }, f.deleteAttachment = async () => {
142
+ const o = this._requireInstanceId(), c = this._data[e];
143
+ if (!(c != null && c._id))
135
144
  throw new Error(`${e} has no image to delete`);
136
- await i(h).deleteAttachment(o, e, d._id), this._data[e] = null;
137
- })) : (g.getDownloadUrl = async (o, d) => {
145
+ await i(h).deleteAttachment(o, e, c._id), this._data[e] = null;
146
+ })) : (f.getDownloadUrl = async (o, c) => {
138
147
  const _ = this._requireInstanceId();
139
148
  return i(h).getDownloadUrl(
140
149
  _,
141
150
  e,
142
151
  o,
143
- d
152
+ c
144
153
  );
145
- }, g.getDownloadUrls = async (o) => {
146
- const d = this._requireInstanceId();
147
- return i(h).getDownloadUrls(d, e, o);
148
- }, n || (g.upload = async (o) => {
154
+ }, f.getDownloadUrls = async (o) => {
155
+ const c = this._requireInstanceId();
156
+ return i(h).getDownloadUrls(c, e, o);
157
+ }, n || (f.upload = async (o) => {
149
158
  for (const b of o)
150
159
  v(b.name, "File");
151
- const d = this._requireInstanceId(), _ = o.map((b) => ({
160
+ const c = this._requireInstanceId(), _ = o.map((b) => ({
152
161
  FileName: b.name,
153
162
  Size: b.size,
154
163
  FileExtension: E(b.name)
155
164
  })), u = await i(h).getUploadUrl(
156
- d,
165
+ c,
157
166
  e,
158
167
  _
159
168
  ), p = await Promise.all(
@@ -174,10 +183,10 @@ class w {
174
183
  ...A,
175
184
  ...p
176
185
  ], p;
177
- }, g.deleteAttachment = async (o) => {
178
- const d = this._requireInstanceId();
186
+ }, f.deleteAttachment = async (o) => {
187
+ const c = this._requireInstanceId();
179
188
  await i(h).deleteAttachment(
180
- d,
189
+ c,
181
190
  e,
182
191
  o
183
192
  );
@@ -407,7 +416,7 @@ function C() {
407
416
  }
408
417
  };
409
418
  }
410
- function f(r, e) {
419
+ function g(r, e) {
411
420
  var t;
412
421
  switch (r.Type) {
413
422
  case "Literal":
@@ -425,7 +434,7 @@ function f(r, e) {
425
434
  case "MemberExpression":
426
435
  return V(r, e);
427
436
  case "AssignmentExpression":
428
- return ((t = r.Arguments) == null ? void 0 : t.length) === 1 ? f(r.Arguments[0], e) : void 0;
437
+ return ((t = r.Arguments) == null ? void 0 : t.length) === 1 ? g(r.Arguments[0], e) : void 0;
429
438
  default:
430
439
  throw new Error(`Unsupported expression type: ${r.Type}`);
431
440
  }
@@ -437,7 +446,7 @@ function M(r, e) {
437
446
  function D(r, e) {
438
447
  if (!r.Arguments || r.Arguments.length < 2)
439
448
  throw new Error("BinaryExpression requires 2 arguments");
440
- const [t, a] = r.Arguments, s = f(t, e), n = f(a, e);
449
+ const [t, a] = r.Arguments, s = g(t, e), n = g(a, e);
441
450
  switch (r.Operator) {
442
451
  case "==":
443
452
  return s == n;
@@ -471,11 +480,11 @@ function I(r, e) {
471
480
  const t = r.Arguments;
472
481
  switch (r.Operator) {
473
482
  case "AND":
474
- return t.every((a) => !!f(a, e));
483
+ return t.every((a) => !!g(a, e));
475
484
  case "OR":
476
- return t.some((a) => !!f(a, e));
485
+ return t.some((a) => !!g(a, e));
477
486
  case "!":
478
- return !f(t[0], e);
487
+ return !g(t[0], e);
479
488
  default:
480
489
  throw new Error(`Unsupported logical operator: ${r.Operator}`);
481
490
  }
@@ -486,14 +495,14 @@ function B(r, e) {
486
495
  const t = R[r.Callee];
487
496
  if (!t)
488
497
  throw new Error(`Unknown function: ${r.Callee}`);
489
- const a = (r.Arguments ?? []).map((s) => f(s, e));
498
+ const a = (r.Arguments ?? []).map((s) => g(s, e));
490
499
  return t(...a);
491
500
  }
492
501
  function V(r, e) {
493
502
  var s, n;
494
503
  if (!((s = r.Arguments) != null && s.length))
495
504
  return;
496
- const t = f(r.Arguments[0], e), a = (n = r.Arguments[0].Property) == null ? void 0 : n.Name;
505
+ const t = g(r.Arguments[0], e), a = (n = r.Arguments[0].Property) == null ? void 0 : n.Name;
497
506
  return a && t && typeof t == "object" ? t[a] : t;
498
507
  }
499
508
  class q {
@@ -501,11 +510,11 @@ class q {
501
510
  /**
502
511
  * Map of field ID to its validation rules
503
512
  */
504
- c(this, "fieldRules", /* @__PURE__ */ new Map());
513
+ d(this, "fieldRules", /* @__PURE__ */ new Map());
505
514
  /**
506
515
  * The loaded BDO metadata
507
516
  */
508
- c(this, "metadata", null);
517
+ d(this, "metadata", null);
509
518
  }
510
519
  /**
511
520
  * Load metadata and extract field validation rules
@@ -573,7 +582,7 @@ class q {
573
582
  };
574
583
  for (const l of s)
575
584
  try {
576
- if (!f(l.ExpressionTree, n))
585
+ if (!g(l.ExpressionTree, n))
577
586
  return {
578
587
  valid: !1,
579
588
  errors: [l.Message || `Validation failed: ${l.Name || l.Id}`]
@@ -612,28 +621,28 @@ class z {
612
621
  // ============================================================
613
622
  // SYSTEM FIELDS (inherited by all BDOs)
614
623
  // ============================================================
615
- c(this, "_id", new F({ _id: "_id", Name: "ID", Type: "String", ReadOnly: !0 }));
616
- c(this, "_created_at", new T({ _id: "_created_at", Name: "Created At", Type: "DateTime", ReadOnly: !0 }));
617
- c(this, "_modified_at", new T({ _id: "_modified_at", Name: "Modified At", Type: "DateTime", ReadOnly: !0 }));
618
- c(this, "_created_by", new U({ _id: "_created_by", Name: "Created By", Type: "User", ReadOnly: !0 }));
619
- c(this, "_modified_by", new U({ _id: "_modified_by", Name: "Modified By", Type: "User", ReadOnly: !0 }));
620
- c(this, "_version", new F({ _id: "_version", Name: "Version", Type: "String", ReadOnly: !0 }));
621
- c(this, "_m_version", new F({ _id: "_m_version", Name: "Metadata Version", Type: "String", ReadOnly: !0 }));
624
+ d(this, "_id", new F({ _id: "_id", Name: "ID", Type: "String", ReadOnly: !0 }));
625
+ d(this, "_created_at", new T({ _id: "_created_at", Name: "Created At", Type: "DateTime", ReadOnly: !0 }));
626
+ d(this, "_modified_at", new T({ _id: "_modified_at", Name: "Modified At", Type: "DateTime", ReadOnly: !0 }));
627
+ d(this, "_created_by", new U({ _id: "_created_by", Name: "Created By", Type: "User", ReadOnly: !0 }));
628
+ d(this, "_modified_by", new U({ _id: "_modified_by", Name: "Modified By", Type: "User", ReadOnly: !0 }));
629
+ d(this, "_version", new F({ _id: "_version", Name: "Version", Type: "String", ReadOnly: !0 }));
630
+ d(this, "_m_version", new F({ _id: "_m_version", Name: "Metadata Version", Type: "String", ReadOnly: !0 }));
622
631
  /**
623
632
  * Whether fields have been bound to this BDO
624
633
  */
625
- c(this, "_fieldsBound", !1);
634
+ d(this, "_fieldsBound", !1);
626
635
  /**
627
636
  * Cached field map
628
637
  */
629
- c(this, "_fieldsCache", null);
638
+ d(this, "_fieldsCache", null);
630
639
  // ============================================================
631
640
  // EXPRESSION ENGINE (for backend validation rules)
632
641
  // ============================================================
633
642
  /**
634
643
  * Expression engine instance for evaluating backend validation rules
635
644
  */
636
- c(this, "_expressionEngine", new q());
645
+ d(this, "_expressionEngine", new q());
637
646
  }
638
647
  // ============================================================
639
648
  // FIELD DEFINITIONS (auto-discovered)