@tachybase/module-workflow 1.6.14 → 1.6.16

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.
@@ -855,7 +855,7 @@ export default async function (
855
855
  `},"x-component":"CollectionFieldset"},Qe={type:"object",title:'{{t("Filter")}}',"x-decorator":"FormItem","x-component":"Filter","x-use-component-props":()=>{const{values:e}=A.useForm(),[t,o]=s.parseCollectionName(e==null?void 0:e.collection);return{options:s.useCollectionFilterOptions(o,t),className:s.css`
856
856
  position: relative;
857
857
  width: 100%;
858
- `}},"x-component-props":{dynamicComponent:"FilterDynamicComponent"}},hn={type:"array",title:'{{t("Sort")}}',"x-decorator":"FormItem","x-component":"ArrayItems",items:{type:"object",properties:{space:{type:"void","x-component":"Space",properties:{sort:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.SortHandle"},field:{type:"string",enum:"{{useSortableFields()}}",required:!0,"x-decorator":"FormItem","x-component":"Select","x-component-props":{style:{width:260}}},direction:{type:"string","x-decorator":"FormItem","x-component":"Radio.Group","x-component-props":{optionType:"button"},enum:[{label:'{{t("ASC")}}',value:"asc"},{label:'{{t("DESC")}}',value:"desc"}]},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}}}},properties:{add:{type:"void",title:'{{t("Add sort field")}}',"x-component":"ArrayItems.Addition"}}},yn={type:"void",properties:{paginate:{type:"boolean",title:T("Pagination"),"x-decorator":"FormItem","x-component":"Checkbox","x-content":T("Custom pagination(page number and count cannot be empty)"),default:!1},pagination:{type:"void","x-decorator":"FormItem","x-component":"Grid","x-reactions":[{dependencies:[".paginate"],fulfill:{state:{hidden:"{{ !$deps[0] }}"}}}],properties:{row:{type:"void","x-component":"Grid.Row",properties:{page:{type:"void","x-component":"Grid.Col",properties:{page:{type:"number",title:'{{t("Page number")}}',"x-decorator":"FormItem","x-component":"WorkflowVariableInput","x-component-props":{useTypedConstant:["number","null"]},default:1}}},pageSize:{type:"void","x-component":"Grid.Col",properties:{pageSize:{type:"number",title:'{{t("Page size")}}',"x-decorator":"FormItem","x-component":"InputNumber","x-component-props":{min:1,max:100},default:20}}}}}}}}},lt={type:"array",title:`{{t("Preload associations", { ns: "${m}" })}}`,description:`{{t("Please select the associated fields that need to be accessed in subsequent nodes. With more than two levels of to-many associations may cause performance issue, please use with caution.", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"AppendsTreeSelect","x-component-props":{title:"Preload associations",multiple:!0,useCollection(){const{values:e}=A.useForm();return e==null?void 0:e.collection}},"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{!!$deps[0]}}"}}}]};class Cl extends oe{constructor(){super(...arguments),this.title=`{{t("Create record", { ns: "${m}" })}}`,this.type="create",this.group="collection",this.icon="FileAddOutlined",this.color="#07fa0f",this.description=`{{t("Add new record to a collection. You can use variables from upstream nodes to assign values to fields.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",effects:["onFieldValueChange"],fulfill:{state:{visible:"{{!!$self.value}}",value:"{{Object.create({})}}"}}}]}),params:{type:"object",properties:{values:so,appends:lt}}},this.scope={useCollectionDataSource:s.useCollectionDataSource},this.components={CollectionFieldset:ro}}useVariables({key:t,title:o,config:n},a){var d,u;const i=s.useCompile(),{getCollectionFields:l}=s.useCollectionManager_deprecated(),[c]=fe(F(v({appends:[t,...((u=(d=n.params)==null?void 0:d.appends)==null?void 0:u.map(p=>`${t}.${p}`))||[]]},a),{fields:[{collectionName:n.collection,name:t,type:"hasOne",target:n.collection,uiSchema:{title:o}}],compile:i,getCollectionFields:l}));return c}useInitializers(t){var o,n;return t.config.collection?{name:(o=t.title)!=null?o:`#${t.id}`,type:"item",title:(n=t.title)!=null?n:`#${t.id}`,Component:Te,collection:t.config.collection,dataPath:`$jobsMapByNodeKey.${t.key}`}:null}}class kl extends oe{constructor(){super(...arguments),this.title='{{t("Delete record")}}',this.type="destroy",this.group="collection",this.icon="ClockCircleOutlined",this.color="#fa0b07",this.description=`{{t("Delete records of a collection. Could use variables in workflow context as filter. All records match the filter will be deleted.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",fulfill:{state:{visible:"{{!!$self.value}}"}}},{target:"params",effects:["onFieldValueChange"],fulfill:{state:{value:"{{Object.create({})}}"}}}]}),params:{type:"object",properties:{filter:F(v({},Qe),{"x-validator"(t){return nt(t)?"":O("Please add at least one condition")}})}}},this.scope={useCollectionDataSource:s.useCollectionDataSource},this.components={FilterDynamicComponent:Ae}}}class Sl extends oe{constructor(){super(...arguments),this.title=`{{t("End process", { ns: "${m}" })}}`,this.type="end",this.group="control",this.icon="LogoutOutlined",this.color="#2659a1",this.description=`{{t("End the process immediately, with set status.", { ns: "${m}" })}}`,this.fieldset={endStatus:{type:"number",title:`{{t("End status", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"Radio.Group",enum:[{label:`{{t("Succeeded", { ns: "${m}" })}}`,value:Ce.RESOLVED},{label:`{{t("Failed", { ns: "${m}" })}}`,value:Ce.FAILED}],required:!0,default:Ce.RESOLVED},remarks:{type:"string",title:`{{t("Remarks", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{autoSize:{minRows:3},placeholder:`{{t("Input remarks", { ns: "${m}" })}}`}}},this.end=!0}}class Al extends oe{constructor(){super(...arguments),this.title=`{{t("Query record", { ns: "${m}" })}}`,this.type="query",this.group="collection",this.icon="FileSearchOutlined",this.color="#55e2d1",this.description=`{{t("Query records from a collection. You can use variables from upstream nodes as query conditions.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",effects:["onFieldValueChange"],fulfill:{state:{visible:"{{!!$self.value}}",value:"{{Object.create({})}}"}}}]}),multiple:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Allow multiple records as result", { ns: "${m}" })}}`,description:`{{t("If checked, when there are multiple records in the query result, an array will be returned as the result, which can be operated on one by one using a loop node. Otherwise, only one record will be returned.", { ns: "${m}" })}}`},isTree:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Allow query for tree data", { ns: "${m}" })}}`},params:{type:"object","x-component":"fieldset",properties:{filter:Qe,sort:hn,pagination:yn,appends:lt},"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{$deps[0] != null}}"}}}]},failOnEmpty:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Exit when query result is null", { ns: "${m}" })}}`}},this.scope={useCollectionDataSource:s.useCollectionDataSource,useSortableFields(){const t=s.useCompile(),{getCollectionFields:o,getInterface:n}=s.useCollectionManager_deprecated(),{values:a}=A.useForm();return o(a.collection).filter(l=>{if(!l.interface)return!1;const c=n(l.interface);return!!(c!=null&&c.sortable)}).map(l=>{var c,d;return{value:l.name,label:(c=l==null?void 0:l.uiSchema)!=null&&c.title?t((d=l==null?void 0:l.uiSchema)==null?void 0:d.title):l.name}})}},this.components={ArrayItems:W.ArrayItems,FilterDynamicComponent:Ae,SchemaComponentContext:s.SchemaComponentContext,WorkflowVariableInput:ke}}useVariables({key:t,title:o,config:n},a){var d,u;const i=s.useCompile(),{getCollectionFields:l}=s.useCollectionManager_deprecated(),[c]=fe(F(v({appends:[t,...((u=(d=n.params)==null?void 0:d.appends)==null?void 0:u.map(p=>`${t}.${p}`))||[]]},a),{fields:[{collectionName:n.collection,name:t,type:"hasOne",target:n.collection,uiSchema:{title:o}}],compile:i,getCollectionFields:l}));return c}useInitializers(t){var o,n;return!t.config.collection||t.config.multiple?null:{name:(o=t.title)!=null?o:`#${t.id}`,type:"item",title:(n=t.title)!=null?n:`#${t.id}`,Component:Te,collection:t.config.collection,dataPath:`$jobsMapByNodeKey.${t.key}`}}}class Il extends oe{constructor(){super(...arguments),this.title=`{{t("Select record", { ns: "${m}" })}}`,this.type="select",this.group="collection",this.icon="SelectOutlined",this.color="#a47cef",this.description=`{{t("Select records from a collection. You can use variables from upstream nodes as query conditions.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",effects:["onFieldValueChange"],fulfill:{state:{visible:"{{!!$self.value}}",value:"{{Object.create({})}}"}}}]}),multiple:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Allow multiple records as result", { ns: "${m}" })}}`,description:`{{t("If checked, when there are multiple records in the query result, an array will be returned as the result, which can be operated on one by one using a loop node. Otherwise, only one record will be returned.", { ns: "${m}" })}}`},isTree:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Allow query for tree data", { ns: "${m}" })}}`},params:{type:"object","x-component":"fieldset",properties:{filter:Qe,sort:hn,pagination:yn,summary:{type:"array",title:`{{t("Select fields to display in the collection", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"CollectionTreeSelect","x-component-props":{title:"Preload associations",needLeaf:!0,useCollection(){const{values:t}=A.useForm();return t==null?void 0:t.collection}},"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{!!$deps[0]}}"}}}]}},"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{$deps[0] != null}}"}}}]},failOnEmpty:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Exit when query result is null", { ns: "${m}" })}}`}},this.scope={useCollectionDataSource:s.useCollectionDataSource,useSortableFields(){const t=s.useCompile(),{getCollectionFields:o,getInterface:n}=s.useCollectionManager_deprecated(),{values:a}=A.useForm();return o(a.collection).filter(l=>{if(!l.interface)return!1;const c=n(l.interface);return!!(c!=null&&c.sortable)}).map(l=>{var c,d;return{value:l.name,label:(c=l==null?void 0:l.uiSchema)!=null&&c.title?t((d=l==null?void 0:l.uiSchema)==null?void 0:d.title):l.name}})}},this.components={ArrayItems:W.ArrayItems,FilterDynamicComponent:Ae,SchemaComponentContext:s.SchemaComponentContext,WorkflowVariableInput:ke}}useVariables({key:t,title:o,config:n},a){var d,u;const i=s.useCompile(),{getCollectionFields:l}=s.useCollectionManager_deprecated(),[c]=fe(F(v({appends:[t,...((u=(d=n.params)==null?void 0:d.appends)==null?void 0:u.map(p=>`${t}.${p}`))||[]]},a),{fields:[{collectionName:n.collection,name:t,type:"hasOne",target:n.collection,uiSchema:{title:o}}],compile:i,getCollectionFields:l}));return c}useInitializers(t){var o,n;return!t.config.collection||t.config.multiple?null:{name:(o=t.title)!=null?o:`#${t.id}`,type:"item",title:(n=t.title)!=null?n:`#${t.id}`,Component:Te,collection:t.config.collection,dataPath:`$jobsMapByNodeKey.${t.key}`}}}function Fl(o){var n=o,{onChange:e}=n,t=Q(n,["onChange"]);const{getCollectionFields:a}=s.useCollectionManager_deprecated(),i=A.useForm(),{collection:l}=i.values,c=a(l),d=A.useField();function u({target:p}){const f=d.query(".values").take();if(!f)return;const y=c.reduce((h,g)=>(g.name in f.value&&(p.value||![].includes(g.type))&&(h[g.name]=f.value[g.name]),h),{});i.setValuesIn("params.values",y),e(p.value)}return r.jsx(Ne,F(v({},t),{onChange:u}))}class Tl extends oe{constructor(){super(...arguments),this.title=`{{t("Update record", { ns: "${m}" })}}`,this.type="update",this.group="collection",this.icon="SignatureOutlined",this.color="#f4952f",this.description=`{{t("Update records of a collection. You can use variables from upstream nodes as query conditions and field values.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",fulfill:{state:{visible:"{{!!$self.value}}"}}},{target:"params.filter",effects:["onFieldValueChange"],fulfill:{state:{value:"{{Object.create({})}}"}}},{target:"params.values",effects:["onFieldValueChange"],fulfill:{state:{value:"{{Object.create({})}}"}}}]}),params:{type:"object",properties:{individualHooks:{type:"boolean",title:`{{t("Update mode", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"IndividualHooksRadioWithTooltip","x-component-props":{options:[{label:`{{t("Update in a batch", { ns: "${m}" })}}`,value:!1,tooltip:`{{t("Update all eligible data at one time, which has better performance when the amount of data is large. But the updated data will not trigger other workflows, and will not record audit logs.", { ns: "${m}" })}}`},{label:`{{t("Update one by one", { ns: "${m}" })}}`,value:!0,tooltip:`{{t("The updated data can trigger other workflows, and the audit log will also be recorded. But it is usually only applicable to several or dozens of pieces of data, otherwise there will be performance problems.", { ns: "${m}" })}}`}]},default:!1},filter:F(v({},Qe),{title:`{{t("Only update records matching conditions", { ns: "${m}" })}}`,"x-validator"(t){return nt(t)?"":O("Please add at least one condition")}}),values:F(v({},so),{"x-component-props":{filter(t){var o;return((o=this.params)==null?void 0:o.individualHooks)||![].includes(t.type)}}})}}},this.scope={useCollectionDataSource:s.useCollectionDataSource},this.components={FilterDynamicComponent:Ae,CollectionFieldset:ro,IndividualHooksRadioWithTooltip:Fl}}}function Nl(o){var n=o,{onChange:e}=n,t=Q(n,["onChange"]);const{getCollectionFields:a}=s.useCollectionManager_deprecated(),i=A.useForm(),{collection:l}=i.values,c=a(l),d=A.useField();function u({target:p}){const f=d.query(".values").take();if(!f)return;const y=c.reduce((h,g)=>(g.name in f.value&&(p.value||![].includes(g.type))&&(h[g.name]=f.value[g.name]),h),{});i.setValuesIn("params.values",y),e(p.value)}return r.jsx(Ne,F(v({},t),{onChange:u}))}class Dl extends oe{constructor(){super(...arguments),this.title=`{{t("Update or create record", { ns: "${m}" })}}`,this.type="updateorcreate",this.group="collection",this.icon="FileSyncOutlined",this.color="#f6f66a",this.description=`{{t("Update or create record, if no matching record is found, a new record will be created, with the ability to assign values to fields using variables from upstream nodes.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",fulfill:{state:{visible:"{{!!$self.value}}"}}},{target:"params.filter",effects:["onFieldValueChange"],fulfill:{state:{value:"{{Object.create({})}}"}}},{target:"params.values",effects:["onFieldValueChange"],fulfill:{state:{value:"{{Object.create({})}}"}}}]}),params:{type:"object",properties:{individualHooks:{type:"boolean",title:`{{t("Update mode", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"IndividualHooksRadioWithTooltip","x-component-props":{options:[{label:`{{t("Update in a batch", { ns: "${m}" })}}`,value:!1,tooltip:`{{t("Update all eligible data at one time, which has better performance when the amount of data is large. But the updated data will not trigger other workflows, and will not record audit logs.", { ns: "${m}" })}}`},{label:`{{t("Update one by one", { ns: "${m}" })}}`,value:!0,tooltip:`{{t("The updated data can trigger other workflows, and the audit log will also be recorded. But it is usually only applicable to several or dozens of pieces of data, otherwise there will be performance problems.", { ns: "${m}" })}}`}]},default:!1},filter:F(v({},Qe),{title:`{{t("Only update records matching conditions", { ns: "${m}" })}}`,"x-validator"(t){return nt(t)?"":O("Please add at least one condition")}}),values:F(v({},so),{"x-component-props":{filter(t){var o;return((o=this.params)==null?void 0:o.individualHooks)||![].includes(t.type)}}})}}},this.scope={useCollectionDataSource:s.useCollectionDataSource},this.components={FilterDynamicComponent:Ae,CollectionFieldset:ro,IndividualHooksRadioWithTooltip:Nl}}}const Ol=new s.SchemaSettings({name:"actionSettings:submitToWorkflow",items:[{name:"editButton",Component:s.ButtonEditor,useComponentProps(){const{buttonEditorProps:e}=s.useSchemaToolbar();return e}},{name:"secondConfirmation",Component:s.SecondConFirm},{name:"assignFieldValues",Component:s.AssignedFieldValues},{name:"skipRequiredValidation",Component:s.SkipValidation},{name:"afterSuccessfulSubmission",Component:s.AfterSuccess,useVisible(){var t;const e=A.useFieldSchema();return A.isValid((t=e==null?void 0:e["x-action-settings"])==null?void 0:t.onSuccess)}},{name:"bindWorkflow",Component:s.WorkflowConfig},{name:"delete",sort:100,Component:s.RemoveButton,useComponentProps(){const{removeButtonProps:e}=s.useSchemaToolbar();return e}}]}),ze={CREATED:1,UPDATED:2,SAVED:3,DELETED:4},Pl=[{label:`{{t("After record added", { ns: "${m}" })}}`,value:ze.CREATED},{label:`{{t("After record updated", { ns: "${m}" })}}`,value:ze.UPDATED},{label:`{{t("After record added or updated", { ns: "${m}" })}}`,value:ze.SAVED},{label:`{{t("After record deleted", { ns: "${m}" })}}`,value:ze.DELETED}];class El extends Re{constructor(){super(...arguments),this.title=`{{t("Collection event", { ns: "${m}" })}}`,this.description=`{{t("Event will be triggered on collection data row created, updated or deleted.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-disabled":"{{ useWorkflowAnyExecuted() }}","x-component-props":{dataSourceFilter(t){return t.options.key==="main"||t.options.isDBInstance}},"x-reactions":[...ue["x-reactions"],{target:"changed",effects:["onFieldValueChange"],fulfill:{state:{value:[]}}},{target:"blacklist",effects:["onFieldValueChange"],fulfill:{state:{value:[]}}},{target:"condition",effects:["onFieldValueChange"],fulfill:{state:{value:null}}},{target:"appends",effects:["onFieldValueChange"],fulfill:{state:{value:[]}}}]}),mode:{type:"number",title:`{{t("Trigger on", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"Select","x-component-props":{popupMatchSelectWidth:!1,placeholder:`{{t("Trigger on", { ns: "${m}" })}}`,className:"auto-width"},enum:Pl,required:!0,"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{!!$deps[0]}}"}}}]},blacklist:{type:"array",title:`{{t("Changed fields - blacklist", { ns: "${m}" })}}`,description:`{{t("Triggered only if none of the selected fields changes. When record is added or deleted, this field has no effect.", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"FieldsSelect","x-component-props":{mode:"multiple",placeholder:'{{t("Select field")}}',filter(t){return!t.hidden&&(t.uiSchema?!t.uiSchema["x-read-pretty"]:!0)&&!["linkTo","hasOne","hasMany","belongsToMany"].includes(t.type)}},"x-reactions":[{dependencies:["collection","mode"],fulfill:{state:{visible:`{{!!$deps[0] && ($deps[1] & ${ze.UPDATED})}}`}}}]},changed:{type:"array",title:`{{t("Changed fields", { ns: "${m}" })}}`,description:`{{t("Triggered only if one of the selected fields changes. If unselected, it means that it will be triggered when any field changes. When record is added or deleted, any field is considered to have been changed.", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"FieldsSelect","x-component-props":{mode:"multiple",placeholder:'{{t("Select field")}}',filter(t){return!t.hidden&&(t.uiSchema?!t.uiSchema["x-read-pretty"]:!0)&&!["linkTo","hasOne","hasMany","belongsToMany"].includes(t.type)}},"x-reactions":[{dependencies:["collection","mode"],fulfill:{state:{visible:`{{!!$deps[0] && ($deps[1] & ${ze.UPDATED})}}`}}}]},condition:F(v({},Qe),{title:`{{t("Only triggers when match conditions", { ns: "${m}" })}}`,"x-component-props":{},"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{!!$deps[0]}}"}}}]}),appends:F(v({},lt),{"x-reactions":[...lt["x-reactions"],{dependencies:["mode"],fulfill:{state:{visible:`{{!($deps[0] & ${ze.DELETED})}}`}}}]})},this.scope={useCollectionDataSource:s.useCollectionDataSource,useWorkflowAnyExecuted:zo},this.components={FieldsSelect:rt}}useVariables(t,o){var c;const n=s.useCompile(),{getCollectionFields:a}=s.useCollectionManager_deprecated(),i=[{collectionName:t.collection,name:"data",type:"hasOne",target:t.collection,uiSchema:{title:O("Trigger data")}}];return fe(F(v({appends:["data",...((c=t.appends)==null?void 0:c.map(d=>`data.${d}`))||[]]},o),{fields:i,compile:n,getCollectionFields:a}))}useInitializers(t){return t.collection?{name:"triggerData",type:"item",key:"triggerData",title:`{{t("Trigger data", { ns: "${m}" })}}`,Component:Te,collection:t.collection,dataPath:"$context.data"}:null}}const qe={STATIC:0,DATE_FIELD:1};function Ml(e){return!e.hidden&&(e.uiSchema?e.type==="date":!1)}function xn({value:e,onChange:t}){const o=e!=null?e:{},{t:n}=ee.useTranslation(),[a,i]=x.useState(o.offset?o.offset/Math.abs(o.offset):0);return r.jsxs("fieldset",{className:s.css`
858
+ `}},"x-component-props":{dynamicComponent:"FilterDynamicComponent"}},hn={type:"array",title:'{{t("Sort")}}',"x-decorator":"FormItem","x-component":"ArrayItems",items:{type:"object",properties:{space:{type:"void","x-component":"Space",properties:{sort:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.SortHandle"},field:{type:"string",enum:"{{useSortableFields()}}",required:!0,"x-decorator":"FormItem","x-component":"Select","x-component-props":{style:{width:260}}},direction:{type:"string","x-decorator":"FormItem","x-component":"Radio.Group","x-component-props":{optionType:"button"},enum:[{label:'{{t("ASC")}}',value:"asc"},{label:'{{t("DESC")}}',value:"desc"}]},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}}}},properties:{add:{type:"void",title:'{{t("Add sort field")}}',"x-component":"ArrayItems.Addition"}}},yn={type:"void",properties:{paginate:{type:"boolean",title:T("Pagination"),"x-decorator":"FormItem","x-component":"Checkbox","x-content":T("Custom pagination(page number and count cannot be empty)"),default:!1},pagination:{type:"void","x-decorator":"FormItem","x-component":"Grid","x-reactions":[{dependencies:[".paginate"],fulfill:{state:{hidden:"{{ !$deps[0] }}"}}}],properties:{row:{type:"void","x-component":"Grid.Row",properties:{page:{type:"void","x-component":"Grid.Col",properties:{page:{type:"number",title:'{{t("Page number")}}',"x-decorator":"FormItem","x-component":"WorkflowVariableInput","x-component-props":{useTypedConstant:["number","null"]},default:1}}},pageSize:{type:"void","x-component":"Grid.Col",properties:{pageSize:{type:"number",title:'{{t("Page size")}}',"x-decorator":"FormItem","x-component":"InputNumber","x-component-props":{min:1,max:100},default:20}}}}}}}}},lt={type:"array",title:`{{t("Preload associations", { ns: "${m}" })}}`,description:`{{t("Please select the associated fields that need to be accessed in subsequent nodes. With more than two levels of to-many associations may cause performance issue, please use with caution.", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"AppendsTreeSelect","x-component-props":{title:"Preload associations",multiple:!0,useCollection(){const{values:e}=A.useForm();return e==null?void 0:e.collection}},"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{!!$deps[0]}}"}}}]};class Cl extends oe{constructor(){super(...arguments),this.title=`{{t("Create record", { ns: "${m}" })}}`,this.type="create",this.group="collection",this.icon="FileAddOutlined",this.color="#07fa0f",this.description=`{{t("Add new record to a collection. You can use variables from upstream nodes to assign values to fields.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",effects:["onFieldValueChange"],fulfill:{state:{visible:"{{!!$self.value}}",value:"{{Object.create({})}}"}}}]}),params:{type:"object",properties:{values:so,appends:lt}}},this.scope={useCollectionDataSource:s.useCollectionDataSource},this.components={CollectionFieldset:ro}}useVariables({key:t,title:o,config:n},a){var d,u;const i=s.useCompile(),{getCollectionFields:l}=s.useCollectionManager_deprecated(),[c]=fe(F(v({appends:[t,...((u=(d=n.params)==null?void 0:d.appends)==null?void 0:u.map(p=>`${t}.${p}`))||[]]},a),{fields:[{collectionName:n.collection,name:t,type:"hasOne",target:n.collection,uiSchema:{title:o}}],compile:i,getCollectionFields:l}));return c}useInitializers(t){var o,n;return t.config.collection?{name:(o=t.title)!=null?o:`#${t.id}`,type:"item",title:(n=t.title)!=null?n:`#${t.id}`,Component:Te,collection:t.config.collection,dataPath:`$jobsMapByNodeKey.${t.key}`}:null}}class kl extends oe{constructor(){super(...arguments),this.title='{{t("Delete record")}}',this.type="destroy",this.group="collection",this.icon="ClockCircleOutlined",this.color="#fa0b07",this.description=`{{t("Delete records of a collection. Could use variables in workflow context as filter. All records match the filter will be deleted.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",fulfill:{state:{visible:"{{!!$self.value}}"}}},{target:"params",effects:["onFieldValueChange"],fulfill:{state:{value:"{{Object.create({})}}"}}}]}),params:{type:"object",properties:{filter:F(v({},Qe),{"x-validator"(t){return nt(t)?"":O("Please add at least one condition")}})}}},this.scope={useCollectionDataSource:s.useCollectionDataSource},this.components={FilterDynamicComponent:Ae}}}class Sl extends oe{constructor(){super(...arguments),this.title=`{{t("End process", { ns: "${m}" })}}`,this.type="end",this.group="control",this.icon="LogoutOutlined",this.color="#2659a1",this.description=`{{t("End the process immediately, with set status.", { ns: "${m}" })}}`,this.fieldset={endStatus:{type:"number",title:`{{t("End status", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"Radio.Group",enum:[{label:`{{t("Succeeded", { ns: "${m}" })}}`,value:Ce.RESOLVED},{label:`{{t("Failed", { ns: "${m}" })}}`,value:Ce.FAILED}],required:!0,default:Ce.RESOLVED},remarks:{type:"string",title:`{{t("Remarks", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{autoSize:{minRows:3},placeholder:`{{t("Input remarks", { ns: "${m}" })}}`}}},this.end=!0}}class Al extends oe{constructor(){super(...arguments),this.title=`{{t("Query record", { ns: "${m}" })}}`,this.type="query",this.group="collection",this.icon="FileSearchOutlined",this.color="#55e2d1",this.description=`{{t("Query records from a collection. You can use variables from upstream nodes as query conditions.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",effects:["onFieldValueChange"],fulfill:{state:{visible:"{{!!$self.value}}",value:"{{Object.create({})}}"}}}]}),multiple:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Allow multiple records as result", { ns: "${m}" })}}`,description:`{{t("If checked, when there are multiple records in the query result, an array will be returned as the result, which can be operated on one by one using a loop node. Otherwise, only one record will be returned.", { ns: "${m}" })}}`},isTree:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Allow query for tree data", { ns: "${m}" })}}`},params:{type:"object","x-component":"fieldset",properties:{filter:Qe,sort:hn,pagination:yn,appends:lt},"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{$deps[0] != null}}"}}}]},failOnEmpty:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Exit when query result is null", { ns: "${m}" })}}`}},this.scope={useCollectionDataSource:s.useCollectionDataSource,useSortableFields(){const t=s.useCompile(),{getCollectionFields:o,getInterface:n}=s.useCollectionManager_deprecated(),{values:a}=A.useForm();return o(a.collection).filter(l=>{if(!l.interface)return!1;const c=n(l.interface);return!!(c!=null&&c.sortable)}).map(l=>{var c,d;return{value:l.name,label:(c=l==null?void 0:l.uiSchema)!=null&&c.title?t((d=l==null?void 0:l.uiSchema)==null?void 0:d.title):l.name}})}},this.components={ArrayItems:W.ArrayItems,FilterDynamicComponent:Ae,SchemaComponentContext:s.SchemaComponentContext,WorkflowVariableInput:ke}}useVariables({key:t,title:o,config:n},a){var d,u;const i=s.useCompile(),{getCollectionFields:l}=s.useCollectionManager_deprecated(),[c]=fe(F(v({appends:[t,...((u=(d=n.params)==null?void 0:d.appends)==null?void 0:u.map(p=>`${t}.${p}`))||[]]},a),{fields:[{collectionName:n.collection,name:t,type:"hasOne",target:n.collection,uiSchema:{title:o}}],compile:i,getCollectionFields:l}));return c}useInitializers(t){var o,n;return!t.config.collection||t.config.multiple?null:{name:(o=t.title)!=null?o:`#${t.id}`,type:"item",title:(n=t.title)!=null?n:`#${t.id}`,Component:Te,collection:t.config.collection,dataPath:`$jobsMapByNodeKey.${t.key}`}}}class Il extends oe{constructor(){super(...arguments),this.title=`{{t("Select record", { ns: "${m}" })}}`,this.type="select",this.group="collection",this.icon="SelectOutlined",this.color="#a47cef",this.description=`{{t("Select records from a collection. You can use variables from upstream nodes as query conditions.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",effects:["onFieldValueChange"],fulfill:{state:{visible:"{{!!$self.value}}",value:"{{Object.create({})}}"}}}]}),multiple:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Allow multiple records as result", { ns: "${m}" })}}`,description:`{{t("If checked, when there are multiple records in the query result, an array will be returned as the result, which can be operated on one by one using a loop node. Otherwise, only one record will be returned.", { ns: "${m}" })}}`},isTree:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Allow query for tree data", { ns: "${m}" })}}`},params:{type:"object","x-component":"fieldset",properties:{filter:Qe,sort:hn,pagination:yn,summary:{type:"array",title:`{{t("Select fields to display in the collection", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"CollectionTreeSelect","x-component-props":{title:"Preload associations",needLeaf:!0,useCollection(){const{values:t}=A.useForm();return t==null?void 0:t.collection}},"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{!!$deps[0]}}"}}}]}},"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{$deps[0] != null}}"}}}]},failOnEmpty:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":`{{t("Exit when query result is null", { ns: "${m}" })}}`}},this.scope={useCollectionDataSource:s.useCollectionDataSource,useSortableFields(){const t=s.useCompile(),{getCollectionFields:o,getInterface:n}=s.useCollectionManager_deprecated(),{values:a}=A.useForm();return o(a.collection).filter(l=>{if(!l.interface)return!1;const c=n(l.interface);return!!(c!=null&&c.sortable)}).map(l=>{var c,d;return{value:l.name,label:(c=l==null?void 0:l.uiSchema)!=null&&c.title?t((d=l==null?void 0:l.uiSchema)==null?void 0:d.title):l.name}})}},this.components={ArrayItems:W.ArrayItems,FilterDynamicComponent:Ae,SchemaComponentContext:s.SchemaComponentContext,WorkflowVariableInput:ke}}useVariables({key:t,title:o,config:n},a){var d,u;const i=s.useCompile(),{getCollectionFields:l}=s.useCollectionManager_deprecated(),[c]=fe(F(v({appends:[t,...((u=(d=n.params)==null?void 0:d.appends)==null?void 0:u.map(p=>`${t}.${p}`))||[]]},a),{fields:[{collectionName:n.collection,name:t,type:"hasOne",target:n.collection,uiSchema:{title:o}}],compile:i,getCollectionFields:l}));return c}useInitializers(t){var o,n;return!t.config.collection||t.config.multiple?null:{name:(o=t.title)!=null?o:`#${t.id}`,type:"item",title:(n=t.title)!=null?n:`#${t.id}`,Component:Te,collection:t.config.collection,dataPath:`$jobsMapByNodeKey.${t.key}`}}}function Fl(o){var n=o,{onChange:e}=n,t=Q(n,["onChange"]);const{getCollectionFields:a}=s.useCollectionManager_deprecated(),i=A.useForm(),{collection:l}=i.values,c=a(l),d=A.useField();function u({target:p}){const f=d.query(".values").take();if(!f)return;const y=c.reduce((h,g)=>(g.name in f.value&&(p.value||![].includes(g.type))&&(h[g.name]=f.value[g.name]),h),{});i.setValuesIn("params.values",y),e(p.value)}return r.jsx(Ne,F(v({},t),{onChange:u}))}class Tl extends oe{constructor(){super(...arguments),this.title=`{{t("Update record", { ns: "${m}" })}}`,this.type="update",this.group="collection",this.icon="SignatureOutlined",this.color="#f4952f",this.description=`{{t("Update records of a collection. You can use variables from upstream nodes as query conditions and field values.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",fulfill:{state:{visible:"{{!!$self.value}}"}}},{target:"params.filter",effects:["onFieldValueChange"],fulfill:{state:{value:"{{Object.create({})}}"}}},{target:"params.values",effects:["onFieldValueChange"],fulfill:{state:{value:"{{Object.create({})}}"}}}]}),params:{type:"object",properties:{individualHooks:{type:"boolean",title:`{{t("Update mode", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"IndividualHooksRadioWithTooltip","x-component-props":{options:[{label:`{{t("Update in a batch", { ns: "${m}" })}}`,value:!1,tooltip:`{{t("Update all eligible data at one time, which has better performance when the amount of data is large. But the updated data will not trigger other workflows, will not record audit logs, and may not update association fields.", { ns: "${m}" })}}`},{label:`{{t("Update one by one", { ns: "${m}" })}}`,value:!0,tooltip:`{{t("The updated data can trigger other workflows, and the audit log will also be recorded. But it is usually only applicable to several or dozens of pieces of data, otherwise there will be performance problems.", { ns: "${m}" })}}`}]},default:!1},filter:F(v({},Qe),{title:`{{t("Only update records matching conditions", { ns: "${m}" })}}`,"x-validator"(t){return nt(t)?"":O("Please add at least one condition")}}),values:F(v({},so),{"x-component-props":{filter(t){var o;return((o=this.params)==null?void 0:o.individualHooks)||![].includes(t.type)}}})}}},this.scope={useCollectionDataSource:s.useCollectionDataSource},this.components={FilterDynamicComponent:Ae,CollectionFieldset:ro,IndividualHooksRadioWithTooltip:Fl}}}function Nl(o){var n=o,{onChange:e}=n,t=Q(n,["onChange"]);const{getCollectionFields:a}=s.useCollectionManager_deprecated(),i=A.useForm(),{collection:l}=i.values,c=a(l),d=A.useField();function u({target:p}){const f=d.query(".values").take();if(!f)return;const y=c.reduce((h,g)=>(g.name in f.value&&(p.value||![].includes(g.type))&&(h[g.name]=f.value[g.name]),h),{});i.setValuesIn("params.values",y),e(p.value)}return r.jsx(Ne,F(v({},t),{onChange:u}))}class Dl extends oe{constructor(){super(...arguments),this.title=`{{t("Update or create record", { ns: "${m}" })}}`,this.type="updateorcreate",this.group="collection",this.icon="FileSyncOutlined",this.color="#f6f66a",this.description=`{{t("Update or create record, if no matching record is found, a new record will be created, with the ability to assign values to fields using variables from upstream nodes.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-reactions":[...ue["x-reactions"],{target:"params",fulfill:{state:{visible:"{{!!$self.value}}"}}},{target:"params.filter",effects:["onFieldValueChange"],fulfill:{state:{value:"{{Object.create({})}}"}}},{target:"params.values",effects:["onFieldValueChange"],fulfill:{state:{value:"{{Object.create({})}}"}}}]}),params:{type:"object",properties:{individualHooks:{type:"boolean",title:`{{t("Update mode", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"IndividualHooksRadioWithTooltip","x-component-props":{options:[{label:`{{t("Update in a batch", { ns: "${m}" })}}`,value:!1,tooltip:`{{t("Update all eligible data at one time, which has better performance when the amount of data is large. But the updated data will not trigger other workflows, will not record audit logs, and may not update association fields.", { ns: "${m}" })}}`},{label:`{{t("Update one by one", { ns: "${m}" })}}`,value:!0,tooltip:`{{t("The updated data can trigger other workflows, and the audit log will also be recorded. But it is usually only applicable to several or dozens of pieces of data, otherwise there will be performance problems.", { ns: "${m}" })}}`}]},default:!1},filter:F(v({},Qe),{title:`{{t("Only update records matching conditions", { ns: "${m}" })}}`,"x-validator"(t){return nt(t)?"":O("Please add at least one condition")}}),values:F(v({},so),{"x-component-props":{filter(t){var o;return((o=this.params)==null?void 0:o.individualHooks)||![].includes(t.type)}}})}}},this.scope={useCollectionDataSource:s.useCollectionDataSource},this.components={FilterDynamicComponent:Ae,CollectionFieldset:ro,IndividualHooksRadioWithTooltip:Nl}}}const Ol=new s.SchemaSettings({name:"actionSettings:submitToWorkflow",items:[{name:"editButton",Component:s.ButtonEditor,useComponentProps(){const{buttonEditorProps:e}=s.useSchemaToolbar();return e}},{name:"secondConfirmation",Component:s.SecondConFirm},{name:"assignFieldValues",Component:s.AssignedFieldValues},{name:"skipRequiredValidation",Component:s.SkipValidation},{name:"afterSuccessfulSubmission",Component:s.AfterSuccess,useVisible(){var t;const e=A.useFieldSchema();return A.isValid((t=e==null?void 0:e["x-action-settings"])==null?void 0:t.onSuccess)}},{name:"bindWorkflow",Component:s.WorkflowConfig},{name:"delete",sort:100,Component:s.RemoveButton,useComponentProps(){const{removeButtonProps:e}=s.useSchemaToolbar();return e}}]}),ze={CREATED:1,UPDATED:2,SAVED:3,DELETED:4},Pl=[{label:`{{t("After record added", { ns: "${m}" })}}`,value:ze.CREATED},{label:`{{t("After record updated", { ns: "${m}" })}}`,value:ze.UPDATED},{label:`{{t("After record added or updated", { ns: "${m}" })}}`,value:ze.SAVED},{label:`{{t("After record deleted", { ns: "${m}" })}}`,value:ze.DELETED}];class El extends Re{constructor(){super(...arguments),this.title=`{{t("Collection event", { ns: "${m}" })}}`,this.description=`{{t("Event will be triggered on collection data row created, updated or deleted.", { ns: "${m}" })}}`,this.fieldset={collection:F(v({},ue),{"x-disabled":"{{ useWorkflowAnyExecuted() }}","x-component-props":{dataSourceFilter(t){return t.options.key==="main"||t.options.isDBInstance}},"x-reactions":[...ue["x-reactions"],{target:"changed",effects:["onFieldValueChange"],fulfill:{state:{value:[]}}},{target:"blacklist",effects:["onFieldValueChange"],fulfill:{state:{value:[]}}},{target:"condition",effects:["onFieldValueChange"],fulfill:{state:{value:null}}},{target:"appends",effects:["onFieldValueChange"],fulfill:{state:{value:[]}}}]}),mode:{type:"number",title:`{{t("Trigger on", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"Select","x-component-props":{popupMatchSelectWidth:!1,placeholder:`{{t("Trigger on", { ns: "${m}" })}}`,className:"auto-width"},enum:Pl,required:!0,"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{!!$deps[0]}}"}}}]},blacklist:{type:"array",title:`{{t("Changed fields - blacklist", { ns: "${m}" })}}`,description:`{{t("Triggered only if none of the selected fields changes. When record is added or deleted, this field has no effect.", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"FieldsSelect","x-component-props":{mode:"multiple",placeholder:'{{t("Select field")}}',filter(t){return!t.hidden&&(t.uiSchema?!t.uiSchema["x-read-pretty"]:!0)&&!["linkTo","hasOne","hasMany","belongsToMany"].includes(t.type)}},"x-reactions":[{dependencies:["collection","mode"],fulfill:{state:{visible:`{{!!$deps[0] && ($deps[1] & ${ze.UPDATED})}}`}}}]},changed:{type:"array",title:`{{t("Changed fields", { ns: "${m}" })}}`,description:`{{t("Triggered only if one of the selected fields changes. If unselected, it means that it will be triggered when any field changes. When record is added or deleted, any field is considered to have been changed.", { ns: "${m}" })}}`,"x-decorator":"FormItem","x-component":"FieldsSelect","x-component-props":{mode:"multiple",placeholder:'{{t("Select field")}}',filter(t){return!t.hidden&&(t.uiSchema?!t.uiSchema["x-read-pretty"]:!0)&&!["linkTo","hasOne","hasMany","belongsToMany"].includes(t.type)}},"x-reactions":[{dependencies:["collection","mode"],fulfill:{state:{visible:`{{!!$deps[0] && ($deps[1] & ${ze.UPDATED})}}`}}}]},condition:F(v({},Qe),{title:`{{t("Only triggers when match conditions", { ns: "${m}" })}}`,"x-component-props":{},"x-reactions":[{dependencies:["collection"],fulfill:{state:{visible:"{{!!$deps[0]}}"}}}]}),appends:F(v({},lt),{"x-reactions":[...lt["x-reactions"],{dependencies:["mode"],fulfill:{state:{visible:`{{!($deps[0] & ${ze.DELETED})}}`}}}]})},this.scope={useCollectionDataSource:s.useCollectionDataSource,useWorkflowAnyExecuted:zo},this.components={FieldsSelect:rt}}useVariables(t,o){var c;const n=s.useCompile(),{getCollectionFields:a}=s.useCollectionManager_deprecated(),i=[{collectionName:t.collection,name:"data",type:"hasOne",target:t.collection,uiSchema:{title:O("Trigger data")}}];return fe(F(v({appends:["data",...((c=t.appends)==null?void 0:c.map(d=>`data.${d}`))||[]]},o),{fields:i,compile:n,getCollectionFields:a}))}useInitializers(t){return t.collection?{name:"triggerData",type:"item",key:"triggerData",title:`{{t("Trigger data", { ns: "${m}" })}}`,Component:Te,collection:t.collection,dataPath:"$context.data"}:null}}const qe={STATIC:0,DATE_FIELD:1};function Ml(e){return!e.hidden&&(e.uiSchema?e.type==="date":!1)}function xn({value:e,onChange:t}){const o=e!=null?e:{},{t:n}=ee.useTranslation(),[a,i]=x.useState(o.offset?o.offset/Math.abs(o.offset):0);return r.jsxs("fieldset",{className:s.css`
859
859
  display: flex;
860
860
  gap: 0.5em;
861
861
  `,children:[r.jsx(rt,{value:o.field,onChange:l=>t(F(v({},o),{field:l})),filter:Ml,placeholder:n("Select field"),className:"auto-width"}),o.field?r.jsx(b.Select,{value:a,onChange:l=>{i(l),t(F(v({},o),{offset:Math.abs(o.offset)*l}))},options:[{value:0,label:O("Exactly at")},{value:-1,label:n("Before")},{value:1,label:n("After")}],className:"auto-width"}):null,a?r.jsxs(r.Fragment,{children:[r.jsx(b.InputNumber,{value:Math.abs(o.offset),onChange:l=>t(F(v({},o),{offset:(l!=null?l:0)*a}))}),r.jsx(b.Select,{value:o.unit||864e5,onChange:l=>t(F(v({},o),{unit:l})),options:[{value:864e5,label:O("Days")},{value:36e5,label:O("Hours")},{value:6e4,label:O("Minutes")},{value:1e3,label:O("Seconds")}],className:"auto-width"})]}):null]})}function $l({value:e,onChange:t}){const{t:o}=ve(),n=e!=null?typeof e=="object"&&!(e instanceof Date)?"field":"date":null;return r.jsxs("fieldset",{className:s.css`
@@ -1,6 +1,6 @@
1
1
  module.exports = {
2
2
  "react": "18.3.1",
3
- "@tachybase/client": "1.6.14",
3
+ "@tachybase/client": "1.6.16",
4
4
  "@ant-design/icons": "6.1.0",
5
5
  "antd": "5.22.5",
6
6
  "lodash": "4.17.21",
@@ -13,8 +13,8 @@ module.exports = {
13
13
  "@dnd-kit/core": "6.3.1",
14
14
  "axios": "1.13.0",
15
15
  "sequelize": "6.37.5",
16
- "@tachybase/plugin-workflow-test": "1.6.14",
16
+ "@tachybase/plugin-workflow-test": "1.6.16",
17
17
  "@tachybase/test": "1.6.10",
18
- "@tachybase/module-error-handler": "1.6.14",
19
- "@tachybase/module-ui-schema": "1.6.14"
18
+ "@tachybase/module-error-handler": "1.6.16",
19
+ "@tachybase/module-ui-schema": "1.6.16"
20
20
  };
@@ -343,6 +343,7 @@
343
343
  "Unconfigured": "Unconfigured",
344
344
  "Unkown group": "Unkown group",
345
345
  "Unprocessed": "Unprocessed",
346
+ "Update all eligible data at one time, which has better performance when the amount of data is large. But the updated data will not trigger other workflows, will not record audit logs, and may not update association fields.": "Update all eligible data at one time, which has better performance when the amount of data is large. But the updated data will not trigger other workflows, will not record audit logs, and may not update association fields.",
346
347
  "Update record": "Update record",
347
348
  "Update record form": "Update record form",
348
349
  "Updated at": "Updated at",
@@ -241,7 +241,7 @@
241
241
  "URL": "주소",
242
242
  "Unassigned fields will be set to default values, and those without default values will be set to null.": "미할당된 필드는 기본값으로 설정되며 기본값이 없는 필드는 null로 설정됩니다.",
243
243
  "Unconfigured": "구성되지 않음",
244
- "Update all eligible data at one time, which has better performance when the amount of data is large. But the updated data will not trigger other workflows, and will not record audit logs.": "일괄로 모든 해당 데이터를 한 번에 업데이트하며, 데이터 양이 많을 때 성능이 더 좋습니다. 그러나 업데이트된 데이터는 다른 워크플로를 트리거하지 않으며 감사 로그를 기록하지 않습니다.",
244
+ "Update all eligible data at one time, which has better performance when the amount of data is large. But the updated data will not trigger other workflows, will not record audit logs, and may not update association fields.": "일괄로 모든 해당 데이터를 한 번에 업데이트하며, 데이터 양이 많을 때 성능이 더 좋습니다. 그러나 업데이트된 데이터는 다른 워크플로를 트리거하지 않으며 감사 로그를 기록하지 않고, 연관 필드가 업데이트되지 않을 수 있습니다.",
245
245
  "Update in a batch": "일괄 업데이트",
246
246
  "Update mode": "업데이트 모드",
247
247
  "Update one by one": "개별 업데이트",
@@ -432,7 +432,7 @@
432
432
  "Unconfigured": "未配置",
433
433
  "Unkown group": "未知分组",
434
434
  "Unprocessed": "未处理",
435
- "Update all eligible data at one time, which has better performance when the amount of data is large. But the updated data will not trigger other workflows, and will not record audit logs.": "一次性更新所有符合条件的数据,在数据量较大时有比较好的性能;但被更新的数据不会触发其他工作流,也不会记录更新日志。",
435
+ "Update all eligible data at one time, which has better performance when the amount of data is large. But the updated data will not trigger other workflows, will not record audit logs, and may not update association fields.": "一次性更新所有符合条件的数据,在数据量较大时有比较好的性能;但被更新的数据不会触发其他工作流,也不会记录更新日志,也可能不会更新关联字段。",
436
436
  "Update in a batch": "批量更新",
437
437
  "Update mode": "更新模式",
438
438
  "Update one by one": "逐条更新",
@@ -1 +1 @@
1
- {"name":"@babel/core","version":"7.27.4","description":"Babel compiler core.","main":"./lib/index.js","author":"The Babel Team (https://babel.dev/team)","license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://github.com/babel/babel.git","directory":"packages/babel-core"},"homepage":"https://babel.dev/docs/en/next/babel-core","bugs":"https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20core%22+is%3Aopen","keywords":["6to5","babel","classes","const","es6","harmony","let","modules","transpile","transpiler","var","babel-core","compiler"],"engines":{"node":">=6.9.0"},"funding":{"type":"opencollective","url":"https://opencollective.com/babel"},"browser":{"./lib/config/files/index.js":"./lib/config/files/index-browser.js","./lib/config/resolve-targets.js":"./lib/config/resolve-targets-browser.js","./lib/transform-file.js":"./lib/transform-file-browser.js","./src/config/files/index.ts":"./src/config/files/index-browser.ts","./src/config/resolve-targets.ts":"./src/config/resolve-targets-browser.ts","./src/transform-file.ts":"./src/transform-file-browser.ts"},"dependencies":{"@ampproject/remapping":"^2.2.0","@babel/code-frame":"^7.27.1","@babel/generator":"^7.27.3","@babel/helper-compilation-targets":"^7.27.2","@babel/helper-module-transforms":"^7.27.3","@babel/helpers":"^7.27.4","@babel/parser":"^7.27.4","@babel/template":"^7.27.2","@babel/traverse":"^7.27.4","@babel/types":"^7.27.3","convert-source-map":"^2.0.0","debug":"^4.1.0","gensync":"^1.0.0-beta.2","json5":"^2.2.3","semver":"^6.3.1"},"devDependencies":{"@babel/helper-transform-fixture-test-runner":"^7.27.1","@babel/plugin-syntax-flow":"^7.27.1","@babel/plugin-transform-flow-strip-types":"^7.27.1","@babel/plugin-transform-modules-commonjs":"^7.27.1","@babel/preset-env":"^7.27.2","@babel/preset-typescript":"^7.27.1","@jridgewell/trace-mapping":"^0.3.25","@types/convert-source-map":"^2.0.0","@types/debug":"^4.1.0","@types/resolve":"^1.3.2","@types/semver":"^5.4.0","rimraf":"^3.0.0","ts-node":"^11.0.0-beta.1"},"type":"commonjs","_lastModified":"2026-04-01T11:01:59.738Z"}
1
+ {"name":"@babel/core","version":"7.27.4","description":"Babel compiler core.","main":"./lib/index.js","author":"The Babel Team (https://babel.dev/team)","license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://github.com/babel/babel.git","directory":"packages/babel-core"},"homepage":"https://babel.dev/docs/en/next/babel-core","bugs":"https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20core%22+is%3Aopen","keywords":["6to5","babel","classes","const","es6","harmony","let","modules","transpile","transpiler","var","babel-core","compiler"],"engines":{"node":">=6.9.0"},"funding":{"type":"opencollective","url":"https://opencollective.com/babel"},"browser":{"./lib/config/files/index.js":"./lib/config/files/index-browser.js","./lib/config/resolve-targets.js":"./lib/config/resolve-targets-browser.js","./lib/transform-file.js":"./lib/transform-file-browser.js","./src/config/files/index.ts":"./src/config/files/index-browser.ts","./src/config/resolve-targets.ts":"./src/config/resolve-targets-browser.ts","./src/transform-file.ts":"./src/transform-file-browser.ts"},"dependencies":{"@ampproject/remapping":"^2.2.0","@babel/code-frame":"^7.27.1","@babel/generator":"^7.27.3","@babel/helper-compilation-targets":"^7.27.2","@babel/helper-module-transforms":"^7.27.3","@babel/helpers":"^7.27.4","@babel/parser":"^7.27.4","@babel/template":"^7.27.2","@babel/traverse":"^7.27.4","@babel/types":"^7.27.3","convert-source-map":"^2.0.0","debug":"^4.1.0","gensync":"^1.0.0-beta.2","json5":"^2.2.3","semver":"^6.3.1"},"devDependencies":{"@babel/helper-transform-fixture-test-runner":"^7.27.1","@babel/plugin-syntax-flow":"^7.27.1","@babel/plugin-transform-flow-strip-types":"^7.27.1","@babel/plugin-transform-modules-commonjs":"^7.27.1","@babel/preset-env":"^7.27.2","@babel/preset-typescript":"^7.27.1","@jridgewell/trace-mapping":"^0.3.25","@types/convert-source-map":"^2.0.0","@types/debug":"^4.1.0","@types/resolve":"^1.3.2","@types/semver":"^5.4.0","rimraf":"^3.0.0","ts-node":"^11.0.0-beta.1"},"type":"commonjs","_lastModified":"2026-04-27T06:06:12.496Z"}
@@ -1 +1 @@
1
- {"name":"@babel/preset-env","version":"7.27.2","description":"A Babel preset for each environment.","author":"The Babel Team (https://babel.dev/team)","homepage":"https://babel.dev/docs/en/next/babel-preset-env","bugs":"https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20preset-env%22+is%3Aopen","license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://github.com/babel/babel.git","directory":"packages/babel-preset-env"},"main":"./lib/index.js","dependencies":{"@babel/compat-data":"^7.27.2","@babel/helper-compilation-targets":"^7.27.2","@babel/helper-plugin-utils":"^7.27.1","@babel/helper-validator-option":"^7.27.1","@babel/plugin-bugfix-firefox-class-in-computed-class-key":"^7.27.1","@babel/plugin-bugfix-safari-class-field-initializer-scope":"^7.27.1","@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression":"^7.27.1","@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining":"^7.27.1","@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly":"^7.27.1","@babel/plugin-proposal-private-property-in-object":"7.21.0-placeholder-for-preset-env.2","@babel/plugin-syntax-import-assertions":"^7.27.1","@babel/plugin-syntax-import-attributes":"^7.27.1","@babel/plugin-syntax-unicode-sets-regex":"^7.18.6","@babel/plugin-transform-arrow-functions":"^7.27.1","@babel/plugin-transform-async-generator-functions":"^7.27.1","@babel/plugin-transform-async-to-generator":"^7.27.1","@babel/plugin-transform-block-scoped-functions":"^7.27.1","@babel/plugin-transform-block-scoping":"^7.27.1","@babel/plugin-transform-class-properties":"^7.27.1","@babel/plugin-transform-class-static-block":"^7.27.1","@babel/plugin-transform-classes":"^7.27.1","@babel/plugin-transform-computed-properties":"^7.27.1","@babel/plugin-transform-destructuring":"^7.27.1","@babel/plugin-transform-dotall-regex":"^7.27.1","@babel/plugin-transform-duplicate-keys":"^7.27.1","@babel/plugin-transform-duplicate-named-capturing-groups-regex":"^7.27.1","@babel/plugin-transform-dynamic-import":"^7.27.1","@babel/plugin-transform-exponentiation-operator":"^7.27.1","@babel/plugin-transform-export-namespace-from":"^7.27.1","@babel/plugin-transform-for-of":"^7.27.1","@babel/plugin-transform-function-name":"^7.27.1","@babel/plugin-transform-json-strings":"^7.27.1","@babel/plugin-transform-literals":"^7.27.1","@babel/plugin-transform-logical-assignment-operators":"^7.27.1","@babel/plugin-transform-member-expression-literals":"^7.27.1","@babel/plugin-transform-modules-amd":"^7.27.1","@babel/plugin-transform-modules-commonjs":"^7.27.1","@babel/plugin-transform-modules-systemjs":"^7.27.1","@babel/plugin-transform-modules-umd":"^7.27.1","@babel/plugin-transform-named-capturing-groups-regex":"^7.27.1","@babel/plugin-transform-new-target":"^7.27.1","@babel/plugin-transform-nullish-coalescing-operator":"^7.27.1","@babel/plugin-transform-numeric-separator":"^7.27.1","@babel/plugin-transform-object-rest-spread":"^7.27.2","@babel/plugin-transform-object-super":"^7.27.1","@babel/plugin-transform-optional-catch-binding":"^7.27.1","@babel/plugin-transform-optional-chaining":"^7.27.1","@babel/plugin-transform-parameters":"^7.27.1","@babel/plugin-transform-private-methods":"^7.27.1","@babel/plugin-transform-private-property-in-object":"^7.27.1","@babel/plugin-transform-property-literals":"^7.27.1","@babel/plugin-transform-regenerator":"^7.27.1","@babel/plugin-transform-regexp-modifiers":"^7.27.1","@babel/plugin-transform-reserved-words":"^7.27.1","@babel/plugin-transform-shorthand-properties":"^7.27.1","@babel/plugin-transform-spread":"^7.27.1","@babel/plugin-transform-sticky-regex":"^7.27.1","@babel/plugin-transform-template-literals":"^7.27.1","@babel/plugin-transform-typeof-symbol":"^7.27.1","@babel/plugin-transform-unicode-escapes":"^7.27.1","@babel/plugin-transform-unicode-property-regex":"^7.27.1","@babel/plugin-transform-unicode-regex":"^7.27.1","@babel/plugin-transform-unicode-sets-regex":"^7.27.1","@babel/preset-modules":"0.1.6-no-external-plugins","babel-plugin-polyfill-corejs2":"^0.4.10","babel-plugin-polyfill-corejs3":"^0.11.0","babel-plugin-polyfill-regenerator":"^0.6.1","core-js-compat":"^3.40.0","semver":"^6.3.1"},"peerDependencies":{"@babel/core":"^7.0.0-0"},"devDependencies":{"@babel/core":"^7.27.1","@babel/core-7.12":"npm:@babel/core@7.12.9","@babel/helper-plugin-test-runner":"^7.27.1","@babel/traverse":"^7.27.1"},"engines":{"node":">=6.9.0"},"type":"commonjs","_lastModified":"2026-04-01T11:02:05.216Z"}
1
+ {"name":"@babel/preset-env","version":"7.27.2","description":"A Babel preset for each environment.","author":"The Babel Team (https://babel.dev/team)","homepage":"https://babel.dev/docs/en/next/babel-preset-env","bugs":"https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20preset-env%22+is%3Aopen","license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://github.com/babel/babel.git","directory":"packages/babel-preset-env"},"main":"./lib/index.js","dependencies":{"@babel/compat-data":"^7.27.2","@babel/helper-compilation-targets":"^7.27.2","@babel/helper-plugin-utils":"^7.27.1","@babel/helper-validator-option":"^7.27.1","@babel/plugin-bugfix-firefox-class-in-computed-class-key":"^7.27.1","@babel/plugin-bugfix-safari-class-field-initializer-scope":"^7.27.1","@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression":"^7.27.1","@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining":"^7.27.1","@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly":"^7.27.1","@babel/plugin-proposal-private-property-in-object":"7.21.0-placeholder-for-preset-env.2","@babel/plugin-syntax-import-assertions":"^7.27.1","@babel/plugin-syntax-import-attributes":"^7.27.1","@babel/plugin-syntax-unicode-sets-regex":"^7.18.6","@babel/plugin-transform-arrow-functions":"^7.27.1","@babel/plugin-transform-async-generator-functions":"^7.27.1","@babel/plugin-transform-async-to-generator":"^7.27.1","@babel/plugin-transform-block-scoped-functions":"^7.27.1","@babel/plugin-transform-block-scoping":"^7.27.1","@babel/plugin-transform-class-properties":"^7.27.1","@babel/plugin-transform-class-static-block":"^7.27.1","@babel/plugin-transform-classes":"^7.27.1","@babel/plugin-transform-computed-properties":"^7.27.1","@babel/plugin-transform-destructuring":"^7.27.1","@babel/plugin-transform-dotall-regex":"^7.27.1","@babel/plugin-transform-duplicate-keys":"^7.27.1","@babel/plugin-transform-duplicate-named-capturing-groups-regex":"^7.27.1","@babel/plugin-transform-dynamic-import":"^7.27.1","@babel/plugin-transform-exponentiation-operator":"^7.27.1","@babel/plugin-transform-export-namespace-from":"^7.27.1","@babel/plugin-transform-for-of":"^7.27.1","@babel/plugin-transform-function-name":"^7.27.1","@babel/plugin-transform-json-strings":"^7.27.1","@babel/plugin-transform-literals":"^7.27.1","@babel/plugin-transform-logical-assignment-operators":"^7.27.1","@babel/plugin-transform-member-expression-literals":"^7.27.1","@babel/plugin-transform-modules-amd":"^7.27.1","@babel/plugin-transform-modules-commonjs":"^7.27.1","@babel/plugin-transform-modules-systemjs":"^7.27.1","@babel/plugin-transform-modules-umd":"^7.27.1","@babel/plugin-transform-named-capturing-groups-regex":"^7.27.1","@babel/plugin-transform-new-target":"^7.27.1","@babel/plugin-transform-nullish-coalescing-operator":"^7.27.1","@babel/plugin-transform-numeric-separator":"^7.27.1","@babel/plugin-transform-object-rest-spread":"^7.27.2","@babel/plugin-transform-object-super":"^7.27.1","@babel/plugin-transform-optional-catch-binding":"^7.27.1","@babel/plugin-transform-optional-chaining":"^7.27.1","@babel/plugin-transform-parameters":"^7.27.1","@babel/plugin-transform-private-methods":"^7.27.1","@babel/plugin-transform-private-property-in-object":"^7.27.1","@babel/plugin-transform-property-literals":"^7.27.1","@babel/plugin-transform-regenerator":"^7.27.1","@babel/plugin-transform-regexp-modifiers":"^7.27.1","@babel/plugin-transform-reserved-words":"^7.27.1","@babel/plugin-transform-shorthand-properties":"^7.27.1","@babel/plugin-transform-spread":"^7.27.1","@babel/plugin-transform-sticky-regex":"^7.27.1","@babel/plugin-transform-template-literals":"^7.27.1","@babel/plugin-transform-typeof-symbol":"^7.27.1","@babel/plugin-transform-unicode-escapes":"^7.27.1","@babel/plugin-transform-unicode-property-regex":"^7.27.1","@babel/plugin-transform-unicode-regex":"^7.27.1","@babel/plugin-transform-unicode-sets-regex":"^7.27.1","@babel/preset-modules":"0.1.6-no-external-plugins","babel-plugin-polyfill-corejs2":"^0.4.10","babel-plugin-polyfill-corejs3":"^0.11.0","babel-plugin-polyfill-regenerator":"^0.6.1","core-js-compat":"^3.40.0","semver":"^6.3.1"},"peerDependencies":{"@babel/core":"^7.0.0-0"},"devDependencies":{"@babel/core":"^7.27.1","@babel/core-7.12":"npm:@babel/core@7.12.9","@babel/helper-plugin-test-runner":"^7.27.1","@babel/traverse":"^7.27.1"},"engines":{"node":">=6.9.0"},"type":"commonjs","_lastModified":"2026-04-27T06:06:18.038Z"}
@@ -1 +1 @@
1
- {"name":"@babel/preset-react","version":"7.27.1","description":"Babel preset for all React plugins.","author":"The Babel Team (https://babel.dev/team)","homepage":"https://babel.dev/docs/en/next/babel-preset-react","bugs":"https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22area%3A%20react%22+is%3Aopen","license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://github.com/babel/babel.git","directory":"packages/babel-preset-react"},"main":"./lib/index.js","dependencies":{"@babel/helper-plugin-utils":"^7.27.1","@babel/helper-validator-option":"^7.27.1","@babel/plugin-transform-react-display-name":"^7.27.1","@babel/plugin-transform-react-jsx":"^7.27.1","@babel/plugin-transform-react-jsx-development":"^7.27.1","@babel/plugin-transform-react-pure-annotations":"^7.27.1"},"peerDependencies":{"@babel/core":"^7.0.0-0"},"devDependencies":{"@babel/core":"^7.27.1","@babel/helper-plugin-test-runner":"^7.27.1"},"engines":{"node":">=6.9.0"},"type":"commonjs","_lastModified":"2026-04-01T11:02:08.767Z"}
1
+ {"name":"@babel/preset-react","version":"7.27.1","description":"Babel preset for all React plugins.","author":"The Babel Team (https://babel.dev/team)","homepage":"https://babel.dev/docs/en/next/babel-preset-react","bugs":"https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22area%3A%20react%22+is%3Aopen","license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://github.com/babel/babel.git","directory":"packages/babel-preset-react"},"main":"./lib/index.js","dependencies":{"@babel/helper-plugin-utils":"^7.27.1","@babel/helper-validator-option":"^7.27.1","@babel/plugin-transform-react-display-name":"^7.27.1","@babel/plugin-transform-react-jsx":"^7.27.1","@babel/plugin-transform-react-jsx-development":"^7.27.1","@babel/plugin-transform-react-pure-annotations":"^7.27.1"},"peerDependencies":{"@babel/core":"^7.0.0-0"},"devDependencies":{"@babel/core":"^7.27.1","@babel/helper-plugin-test-runner":"^7.27.1"},"engines":{"node":">=6.9.0"},"type":"commonjs","_lastModified":"2026-04-27T06:06:21.661Z"}
@@ -1 +1 @@
1
- {"name":"@babel/preset-typescript","version":"7.27.1","description":"Babel preset for TypeScript.","repository":{"type":"git","url":"https://github.com/babel/babel.git","directory":"packages/babel-preset-typescript"},"license":"MIT","publishConfig":{"access":"public"},"main":"./lib/index.js","keywords":["babel-preset","typescript"],"dependencies":{"@babel/helper-plugin-utils":"^7.27.1","@babel/helper-validator-option":"^7.27.1","@babel/plugin-syntax-jsx":"^7.27.1","@babel/plugin-transform-modules-commonjs":"^7.27.1","@babel/plugin-transform-typescript":"^7.27.1"},"peerDependencies":{"@babel/core":"^7.0.0-0"},"devDependencies":{"@babel/core":"^7.27.1","@babel/helper-plugin-test-runner":"^7.27.1"},"homepage":"https://babel.dev/docs/en/next/babel-preset-typescript","bugs":"https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22area%3A%20typescript%22+is%3Aopen","engines":{"node":">=6.9.0"},"author":"The Babel Team (https://babel.dev/team)","type":"commonjs","_lastModified":"2026-04-01T11:02:13.065Z"}
1
+ {"name":"@babel/preset-typescript","version":"7.27.1","description":"Babel preset for TypeScript.","repository":{"type":"git","url":"https://github.com/babel/babel.git","directory":"packages/babel-preset-typescript"},"license":"MIT","publishConfig":{"access":"public"},"main":"./lib/index.js","keywords":["babel-preset","typescript"],"dependencies":{"@babel/helper-plugin-utils":"^7.27.1","@babel/helper-validator-option":"^7.27.1","@babel/plugin-syntax-jsx":"^7.27.1","@babel/plugin-transform-modules-commonjs":"^7.27.1","@babel/plugin-transform-typescript":"^7.27.1"},"peerDependencies":{"@babel/core":"^7.0.0-0"},"devDependencies":{"@babel/core":"^7.27.1","@babel/helper-plugin-test-runner":"^7.27.1"},"homepage":"https://babel.dev/docs/en/next/babel-preset-typescript","bugs":"https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22area%3A%20typescript%22+is%3Aopen","engines":{"node":">=6.9.0"},"author":"The Babel Team (https://babel.dev/team)","type":"commonjs","_lastModified":"2026-04-27T06:06:26.044Z"}
@@ -1 +1 @@
1
- {"name":"cron-parser","version":"4.9.0","description":"Node.js library for parsing crontab instructions","main":"lib/parser.js","types":"types/index.d.ts","typesVersions":{"<4.1":{"*":["types/ts3/*"]}},"directories":{"test":"test"},"scripts":{"test:tsd":"tsd","test:unit":"TZ=UTC tap ./test/*.js","test:cover":"TZ=UTC tap --coverage-report=html ./test/*.js","lint":"eslint .","lint:fix":"eslint --fix .","test":"npm run lint && npm run test:unit && npm run test:tsd"},"repository":{"type":"git","url":"https://github.com/harrisiirak/cron-parser.git"},"keywords":["cron","crontab","parser"],"author":"Harri Siirak","contributors":["Nicholas Clawson","Daniel Prentis <daniel@salsitasoft.com>","Renault John Lecoultre","Richard Astbury <richard.astbury@gmail.com>","Meaglin Wasabi <Meaglin.wasabi@gmail.com>","Mike Kusold <hello@mikekusold.com>","Alex Kit <alex.kit@atmajs.com>","Santiago Gimeno <santiago.gimeno@gmail.com>","Daniel <darc.tec@gmail.com>","Christian Steininger <christian.steininger.cs@gmail.com>","Mykola Piskovyi <m.piskovyi@gmail.com>","Brian Vaughn <brian.david.vaughn@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Yasuhiroki <yasuhiroki.duck@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Brendan Warkentin <faazshift@gmail.com>","Charlie Fish <fishcharlie.code@gmail.com>","Ian Graves <ian+diskimage@iangrav.es>","Andy Thompson <me@andytson.com>","Regev Brody <regevbr@gmail.com>"],"license":"MIT","dependencies":{"luxon":"^3.2.1"},"devDependencies":{"eslint":"^8.27.0","sinon":"^15.0.1","tap":"^16.3.3","tsd":"^0.26.0"},"engines":{"node":">=12.0.0"},"browser":{"fs":false},"tap":{"check-coverage":false},"tsd":{"directory":"test","compilerOptions":{"lib":["es2017","dom"]}},"files":["lib","types","LICENSE","README.md"],"_lastModified":"2026-04-01T11:02:13.283Z"}
1
+ {"name":"cron-parser","version":"4.9.0","description":"Node.js library for parsing crontab instructions","main":"lib/parser.js","types":"types/index.d.ts","typesVersions":{"<4.1":{"*":["types/ts3/*"]}},"directories":{"test":"test"},"scripts":{"test:tsd":"tsd","test:unit":"TZ=UTC tap ./test/*.js","test:cover":"TZ=UTC tap --coverage-report=html ./test/*.js","lint":"eslint .","lint:fix":"eslint --fix .","test":"npm run lint && npm run test:unit && npm run test:tsd"},"repository":{"type":"git","url":"https://github.com/harrisiirak/cron-parser.git"},"keywords":["cron","crontab","parser"],"author":"Harri Siirak","contributors":["Nicholas Clawson","Daniel Prentis <daniel@salsitasoft.com>","Renault John Lecoultre","Richard Astbury <richard.astbury@gmail.com>","Meaglin Wasabi <Meaglin.wasabi@gmail.com>","Mike Kusold <hello@mikekusold.com>","Alex Kit <alex.kit@atmajs.com>","Santiago Gimeno <santiago.gimeno@gmail.com>","Daniel <darc.tec@gmail.com>","Christian Steininger <christian.steininger.cs@gmail.com>","Mykola Piskovyi <m.piskovyi@gmail.com>","Brian Vaughn <brian.david.vaughn@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Yasuhiroki <yasuhiroki.duck@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Brendan Warkentin <faazshift@gmail.com>","Charlie Fish <fishcharlie.code@gmail.com>","Ian Graves <ian+diskimage@iangrav.es>","Andy Thompson <me@andytson.com>","Regev Brody <regevbr@gmail.com>"],"license":"MIT","dependencies":{"luxon":"^3.2.1"},"devDependencies":{"eslint":"^8.27.0","sinon":"^15.0.1","tap":"^16.3.3","tsd":"^0.26.0"},"engines":{"node":">=12.0.0"},"browser":{"fs":false},"tap":{"check-coverage":false},"tsd":{"directory":"test","compilerOptions":{"lib":["es2017","dom"]}},"files":["lib","types","LICENSE","README.md"],"_lastModified":"2026-04-27T06:06:26.262Z"}
@@ -1 +1 @@
1
- {"author":"Felix Geisendörfer <felix@debuggable.com> (http://debuggable.com/)","name":"form-data","description":"A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.","version":"4.0.4","repository":{"type":"git","url":"git://github.com/form-data/form-data.git"},"main":"./lib/form_data","browser":"./lib/browser","typings":"./index.d.ts","scripts":{"pretest":"npm run lint","pretests-only":"rimraf coverage test/tmp","tests-only":"istanbul cover test/run.js","posttests-only":"istanbul report lcov text","test":"npm run tests-only","posttest":"npx npm@'>=10.2' audit --production","lint":"eslint --ext=js,mjs .","report":"istanbul report lcov text","ci-lint":"is-node-modern 8 && npm run lint || is-node-not-modern 8","ci-test":"npm run tests-only && npm run browser && npm run report","predebug":"rimraf coverage test/tmp","debug":"verbose=1 ./test/run.js","browser":"browserify -t browserify-istanbul test/run-browser.js | obake --coverage","check":"istanbul check-coverage coverage/coverage*.json","files":"pkgfiles --sort=name","get-version":"node -e \"console.log(require('./package.json').version)\"","update-readme":"sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md","postupdate-readme":"mv README.md.bak READ.ME.md.bak","restore-readme":"mv READ.ME.md.bak README.md","prepublish":"not-in-publish || npm run prepublishOnly","prepack":"npm run update-readme","postpack":"npm run restore-readme","version":"auto-changelog && git add CHANGELOG.md","postversion":"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""},"engines":{"node":">= 6"},"dependencies":{"asynckit":"^0.4.0","combined-stream":"^1.0.8","es-set-tostringtag":"^2.1.0","hasown":"^2.0.2","mime-types":"^2.1.12"},"devDependencies":{"@ljharb/eslint-config":"^21.2.0","auto-changelog":"^2.5.0","browserify":"^13.3.0","browserify-istanbul":"^2.0.0","coveralls":"^3.1.1","cross-spawn":"^6.0.6","eslint":"=8.8.0","fake":"^0.2.2","far":"^0.0.7","formidable":"^1.2.6","in-publish":"^2.0.1","is-node-modern":"^1.0.0","istanbul":"^0.4.5","obake":"^0.1.2","pkgfiles":"^2.3.2","pre-commit":"^1.2.2","predict-v8-randomness":"^1.0.35","puppeteer":"^1.20.0","request":"~2.87.0","rimraf":"^2.7.1","semver":"^6.3.1","tape":"^5.9.0"},"license":"MIT","auto-changelog":{"output":"CHANGELOG.md","template":"keepachangelog","unreleased":false,"commitLimit":false,"backfillLimit":false,"hideCredit":true},"_lastModified":"2026-04-01T11:01:55.200Z"}
1
+ {"author":"Felix Geisendörfer <felix@debuggable.com> (http://debuggable.com/)","name":"form-data","description":"A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.","version":"4.0.4","repository":{"type":"git","url":"git://github.com/form-data/form-data.git"},"main":"./lib/form_data","browser":"./lib/browser","typings":"./index.d.ts","scripts":{"pretest":"npm run lint","pretests-only":"rimraf coverage test/tmp","tests-only":"istanbul cover test/run.js","posttests-only":"istanbul report lcov text","test":"npm run tests-only","posttest":"npx npm@'>=10.2' audit --production","lint":"eslint --ext=js,mjs .","report":"istanbul report lcov text","ci-lint":"is-node-modern 8 && npm run lint || is-node-not-modern 8","ci-test":"npm run tests-only && npm run browser && npm run report","predebug":"rimraf coverage test/tmp","debug":"verbose=1 ./test/run.js","browser":"browserify -t browserify-istanbul test/run-browser.js | obake --coverage","check":"istanbul check-coverage coverage/coverage*.json","files":"pkgfiles --sort=name","get-version":"node -e \"console.log(require('./package.json').version)\"","update-readme":"sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md","postupdate-readme":"mv README.md.bak READ.ME.md.bak","restore-readme":"mv READ.ME.md.bak README.md","prepublish":"not-in-publish || npm run prepublishOnly","prepack":"npm run update-readme","postpack":"npm run restore-readme","version":"auto-changelog && git add CHANGELOG.md","postversion":"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""},"engines":{"node":">= 6"},"dependencies":{"asynckit":"^0.4.0","combined-stream":"^1.0.8","es-set-tostringtag":"^2.1.0","hasown":"^2.0.2","mime-types":"^2.1.12"},"devDependencies":{"@ljharb/eslint-config":"^21.2.0","auto-changelog":"^2.5.0","browserify":"^13.3.0","browserify-istanbul":"^2.0.0","coveralls":"^3.1.1","cross-spawn":"^6.0.6","eslint":"=8.8.0","fake":"^0.2.2","far":"^0.0.7","formidable":"^1.2.6","in-publish":"^2.0.1","is-node-modern":"^1.0.0","istanbul":"^0.4.5","obake":"^0.1.2","pkgfiles":"^2.3.2","pre-commit":"^1.2.2","predict-v8-randomness":"^1.0.35","puppeteer":"^1.20.0","request":"~2.87.0","rimraf":"^2.7.1","semver":"^6.3.1","tape":"^5.9.0"},"license":"MIT","auto-changelog":{"output":"CHANGELOG.md","template":"keepachangelog","unreleased":false,"commitLimit":false,"backfillLimit":false,"hideCredit":true},"_lastModified":"2026-04-27T06:06:07.852Z"}
@@ -1 +1 @@
1
- {"name":"jsonata","version":"2.0.6","description":"JSON query and transformation language","module":"jsonata.js","main":"jsonata.js","typings":"jsonata.d.ts","homepage":"http://jsonata.org/","repository":{"type":"git","url":"https://github.com/jsonata-js/jsonata.git"},"scripts":{"pretest":"npm run lint","mocha":"nyc ./node_modules/mocha/bin/_mocha -- \"test/**/*.js\"","test":"npm run mocha","posttest":"npm run check-coverage && npm run browserify && npm run minify && npm run build-es5","build-es5":"npm run mkdir-dist && npm run regenerator && npm run browserify-es5 && npm run minify-es5","check-coverage":"nyc check-coverage --statements 100 --branches 100 --functions 100 --lines 100","browserify":"browserify src/jsonata.js --outfile jsonata.js --standalone jsonata","mkdir-dist":"mkdirp ./dist","regenerator":"babel src --out-dir dist --presets=@babel/env","browserify-es5":"regenerator --include-runtime polyfill.js > jsonata-es5.js; browserify dist/jsonata.js --standalone jsonata >> jsonata-es5.js","prepublishOnly":"npm run browserify && npm run minify && npm run build-es5","lint":"eslint src","doc":"jsdoc --configure jsdoc.json .","cover":"nyc _mocha","minify":"uglifyjs jsonata.js -o jsonata.min.js --compress --mangle","minify-es5":"uglifyjs jsonata-es5.js -o jsonata-es5.min.js --compress --mangle"},"license":"MIT","keywords":["JSON","query","transformation","transform","mapping","path"],"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.8.4","@babel/preset-env":"^7.8.4","browserify":"^16.5.0","chai":"^4.2.0","chai-as-promised":"^7.1.1","eslint":"8.0.0","eslint-plugin-ideal":"^0.1.3","eslint-plugin-promise":"^6.0.0","jsdoc":"^3.6.3","mkdirp":"^1.0.3","mocha":"^7.0.1","mocha-lcov-reporter":"^1.3.0","nyc":"^15.1.0","regenerator":"^0.14.4","request":"^2.88.2","uglify-es":"^3.3.10"},"engines":{"node":">= 8"},"_lastModified":"2026-04-01T11:01:56.143Z"}
1
+ {"name":"jsonata","version":"2.0.6","description":"JSON query and transformation language","module":"jsonata.js","main":"jsonata.js","typings":"jsonata.d.ts","homepage":"http://jsonata.org/","repository":{"type":"git","url":"https://github.com/jsonata-js/jsonata.git"},"scripts":{"pretest":"npm run lint","mocha":"nyc ./node_modules/mocha/bin/_mocha -- \"test/**/*.js\"","test":"npm run mocha","posttest":"npm run check-coverage && npm run browserify && npm run minify && npm run build-es5","build-es5":"npm run mkdir-dist && npm run regenerator && npm run browserify-es5 && npm run minify-es5","check-coverage":"nyc check-coverage --statements 100 --branches 100 --functions 100 --lines 100","browserify":"browserify src/jsonata.js --outfile jsonata.js --standalone jsonata","mkdir-dist":"mkdirp ./dist","regenerator":"babel src --out-dir dist --presets=@babel/env","browserify-es5":"regenerator --include-runtime polyfill.js > jsonata-es5.js; browserify dist/jsonata.js --standalone jsonata >> jsonata-es5.js","prepublishOnly":"npm run browserify && npm run minify && npm run build-es5","lint":"eslint src","doc":"jsdoc --configure jsdoc.json .","cover":"nyc _mocha","minify":"uglifyjs jsonata.js -o jsonata.min.js --compress --mangle","minify-es5":"uglifyjs jsonata-es5.js -o jsonata-es5.min.js --compress --mangle"},"license":"MIT","keywords":["JSON","query","transformation","transform","mapping","path"],"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.8.4","@babel/preset-env":"^7.8.4","browserify":"^16.5.0","chai":"^4.2.0","chai-as-promised":"^7.1.1","eslint":"8.0.0","eslint-plugin-ideal":"^0.1.3","eslint-plugin-promise":"^6.0.0","jsdoc":"^3.6.3","mkdirp":"^1.0.3","mocha":"^7.0.1","mocha-lcov-reporter":"^1.3.0","nyc":"^15.1.0","regenerator":"^0.14.4","request":"^2.88.2","uglify-es":"^3.3.10"},"engines":{"node":">= 8"},"_lastModified":"2026-04-27T06:06:08.804Z"}
@@ -1 +1 @@
1
- {"type":"commonjs","_lastModified":"2026-04-01T11:01:54.805Z"}
1
+ {"type":"commonjs","_lastModified":"2026-04-27T06:06:07.478Z"}
@@ -1 +1 @@
1
- {"name":"mime-types","description":"The ultimate javascript content-type utility.","version":"3.0.1","contributors":["Douglas Christopher Wilson <doug@somethingdoug.com>","Jeremiah Senkpiel <fishrock123@rocketmail.com> (https://searchbeam.jit.su)","Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)"],"license":"MIT","keywords":["mime","types"],"repository":"jshttp/mime-types","dependencies":{"mime-db":"^1.54.0"},"devDependencies":{"eslint":"8.33.0","eslint-config-standard":"14.1.1","eslint-plugin-import":"2.27.5","eslint-plugin-markdown":"3.0.0","eslint-plugin-node":"11.1.0","eslint-plugin-promise":"6.1.1","eslint-plugin-standard":"4.1.0","mocha":"10.2.0","nyc":"15.1.0"},"files":["HISTORY.md","LICENSE","index.js","mimeScore.js"],"engines":{"node":">= 0.6"},"scripts":{"lint":"eslint .","test":"mocha --reporter spec test/test.js","test-ci":"nyc --reporter=lcov --reporter=text npm test","test-cov":"nyc --reporter=html --reporter=text npm test"},"_lastModified":"2026-04-01T11:01:55.360Z"}
1
+ {"name":"mime-types","description":"The ultimate javascript content-type utility.","version":"3.0.1","contributors":["Douglas Christopher Wilson <doug@somethingdoug.com>","Jeremiah Senkpiel <fishrock123@rocketmail.com> (https://searchbeam.jit.su)","Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)"],"license":"MIT","keywords":["mime","types"],"repository":"jshttp/mime-types","dependencies":{"mime-db":"^1.54.0"},"devDependencies":{"eslint":"8.33.0","eslint-config-standard":"14.1.1","eslint-plugin-import":"2.27.5","eslint-plugin-markdown":"3.0.0","eslint-plugin-node":"11.1.0","eslint-plugin-promise":"6.1.1","eslint-plugin-standard":"4.1.0","mocha":"10.2.0","nyc":"15.1.0"},"files":["HISTORY.md","LICENSE","index.js","mimeScore.js"],"engines":{"node":">= 0.6"},"scripts":{"lint":"eslint .","test":"mocha --reporter spec test/test.js","test-ci":"nyc --reporter=lcov --reporter=text npm test","test-cov":"nyc --reporter=html --reporter=text npm test"},"_lastModified":"2026-04-27T06:06:08.021Z"}
@@ -1 +1 @@
1
- {"name":"qrcode","description":"QRCode / 2d Barcode api with both server side and client side support using canvas","version":"1.5.4","author":"Ryan Day <soldair@gmail.com>","contributors":["Vincenzo Greco <greco.vincenzo@gmail.com>","Linus Unnebäck <linus@folkdatorn.se>"],"keywords":["qr","code","canvas","qrcode"],"main":"./lib/index.js","browser":{"./lib/index.js":"./lib/browser.js","fs":false},"files":["bin","build","lib","helper"],"homepage":"http://github.com/soldair/node-qrcode","license":"MIT","scripts":{"lint":"standard","pretest":"npm run lint","test":"node --throw-deprecation test.js","build":"rollup -c","prepublish":"npm run build","browser":"node examples/clientsideserver.js"},"bin":{"qrcode":"./bin/qrcode"},"dependencies":{"dijkstrajs":"^1.0.1","pngjs":"^5.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/core":"^7.9.0","@babel/preset-env":"^7.9.5","@rollup/plugin-commonjs":"^11.1.0","@rollup/plugin-node-resolve":"^7.1.3","browserify":"^16.5.1","canvas":"^2.8.0","canvasutil":"0.0.4","colors":"^1.4.0","express":"^4.17.1","htmlparser2":"^4.1.0","rollup":"^2.6.1","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","sinon":"^9.0.2","standard":"^16.0.4","tap":"^16.2.0"},"repository":{"type":"git","url":"git://github.com/soldair/node-qrcode.git"},"engines":{"node":">=10.13.0"},"standard":{"ignore":["build/","examples/vendors/","lib/core/regex.js"]},"_lastModified":"2026-04-01T11:01:55.761Z"}
1
+ {"name":"qrcode","description":"QRCode / 2d Barcode api with both server side and client side support using canvas","version":"1.5.4","author":"Ryan Day <soldair@gmail.com>","contributors":["Vincenzo Greco <greco.vincenzo@gmail.com>","Linus Unnebäck <linus@folkdatorn.se>"],"keywords":["qr","code","canvas","qrcode"],"main":"./lib/index.js","browser":{"./lib/index.js":"./lib/browser.js","fs":false},"files":["bin","build","lib","helper"],"homepage":"http://github.com/soldair/node-qrcode","license":"MIT","scripts":{"lint":"standard","pretest":"npm run lint","test":"node --throw-deprecation test.js","build":"rollup -c","prepublish":"npm run build","browser":"node examples/clientsideserver.js"},"bin":{"qrcode":"./bin/qrcode"},"dependencies":{"dijkstrajs":"^1.0.1","pngjs":"^5.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/core":"^7.9.0","@babel/preset-env":"^7.9.5","@rollup/plugin-commonjs":"^11.1.0","@rollup/plugin-node-resolve":"^7.1.3","browserify":"^16.5.1","canvas":"^2.8.0","canvasutil":"0.0.4","colors":"^1.4.0","express":"^4.17.1","htmlparser2":"^4.1.0","rollup":"^2.6.1","rollup-plugin-babel":"^4.4.0","rollup-plugin-terser":"^5.3.0","sinon":"^9.0.2","standard":"^16.0.4","tap":"^16.2.0"},"repository":{"type":"git","url":"git://github.com/soldair/node-qrcode.git"},"engines":{"node":">=10.13.0"},"standard":{"ignore":["build/","examples/vendors/","lib/core/regex.js"]},"_lastModified":"2026-04-27T06:06:08.417Z"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tachybase/module-workflow",
3
3
  "displayName": "Workflow",
4
- "version": "1.6.14",
4
+ "version": "1.6.16",
5
5
  "description": "A powerful BPM tool that provides foundational support for business automation, with the capability to extend unlimited triggers and nodes.",
6
6
  "keywords": [
7
7
  "Workflow"
@@ -50,12 +50,12 @@
50
50
  "react-js-cron": "^3.2.0",
51
51
  "react-router-dom": "6.28.1",
52
52
  "sequelize": "6.37.5",
53
- "@tachybase/module-collection": "1.6.14",
54
- "@tachybase/module-error-handler": "1.6.14",
55
- "@tachybase/client": "1.6.14",
56
- "@tachybase/module-ui-schema": "1.6.14",
57
- "@tachybase/module-user": "1.6.14",
58
- "@tachybase/plugin-workflow-test": "1.6.14"
53
+ "@tachybase/client": "1.6.16",
54
+ "@tachybase/module-collection": "1.6.16",
55
+ "@tachybase/module-user": "1.6.16",
56
+ "@tachybase/plugin-workflow-test": "1.6.16",
57
+ "@tachybase/module-error-handler": "1.6.16",
58
+ "@tachybase/module-ui-schema": "1.6.16"
59
59
  },
60
60
  "description.zh-CN": "一个强大的 BPM 工具,为业务自动化提供基础支持,并且可任意扩展更多的触发器和节点。",
61
61
  "displayName.zh-CN": "工作流",