@stackone/core 1.27.0 → 1.29.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.
package/dist/index.es.mjs CHANGED
@@ -1 +1 @@
1
- import{notMissing as e,isBoolean as t,isNumber as r,isDate as n,isString as s,isObject as o,isMissing as i}from"@stackone/utils";import{z as a}from"zod";import{evaluate as u,safeEvaluateRecord as c}from"@stackone/expressions";import{RequestParameterLocations as l,HttpMethods as d,RequestClientFactory as p,parseRequestParameters as y,createAuthorizationHeaders as f}from"@stackone/transport";import*as m from"date-fns";const g=a.object({stepsDataToGroup:a.array(a.string()),isSingleRecord:a.boolean().optional()}),b=a.object({data:a.unknown()}),h=(e,t,r)=>Object.entries(e).reduce(((e,[n,s])=>{const o=s?.output?.data;return Array.isArray(o)&&o.length===t?e[n]={output:{data:o[r]}}:e[n]=s,e}),{}),v=(e,t,r)=>{if(!e||!r)return{record:e};const n={unified:{...e},..."object"==typeof r?r:{}},s={},o=[],i={...e};for(const r of t){const{error:t,value:a}=k(n,e.id,r);t?o.push(t):r.isUnified?i[r.targetFieldKey]=a:s[r.targetFieldKey]=a}return{record:{...i,unified_custom_fields:Object.keys(s).length>0?s:void 0},errors:o.length>0?o:void 0}},k=(e,t,r)=>{const{expression:n,targetFieldKey:s}=r;if(!n)return{error:{message:"Expression is empty",id:t,targetField:s}};let o;try{o=u(n,e)}catch(e){return{error:{message:"Invalid expression",id:t,targetField:s}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:s}}:{value:o}},S=a.object({fields:a.object({expression:a.string(),targetFieldKey:a.string(),type:a.string(),isUnified:a.boolean().optional()}).array(),dataSource:a.string()}),_=a.object({data:a.unknown()}),F=(e,t)=>{if(!t)return;const r={},n=[],s={};for(const o of e){const{error:e,value:i}=M(t,t?.id,o);e?n.push(e):o.isUnified?s[o.targetFieldKey]=i:r[o.targetFieldKey]=i}return{record:{...s,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:n.length>0?n:void 0}},M=(e,t,r)=>{const{expression:n,targetFieldKey:s}=r;if(!n)return{error:{message:"Expression is empty",id:t,targetField:s}};let o;try{o=u(n,e)}catch(e){return{error:{message:"Invalid expression",id:t,targetField:s}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:s}}:{value:o}},j=a.object({type:a.literal("basic"),username:a.string(),password:a.string(),encoding:a.string().optional()}),A=a.object({type:a.literal("bearer"),token:a.string()}),w=a.discriminatedUnion("type",[j,A]),x=a.object({baseUrl:a.string(),url:a.string(),method:a.enum(d),response:a.object({collection:a.boolean().optional(),indexField:a.string().optional(),dataKey:a.string().optional()}).optional(),args:a.object({name:a.string(),value:a.unknown(),in:a.enum(l),condition:a.string().optional()}).array().optional()}),T=a.object({data:a.unknown(),raw:a.unknown().optional()}),E=(e,t)=>{if(t?.collection&&t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const n=t.indexField;return n&&r[n]&&(e[r[n]]=r),e}),{});if(!t?.collection&&t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},O=a.object({fields:a.object({targetFieldKey:a.string(),type:a.string(),isUnified:a.boolean().optional()}).array().optional(),dataSource:a.string()}),U=a.object({data:a.unknown()}),K="yyyy-MM-dd",C=["yyyy-MM-dd","yyyy/MM/dd","dd/MM/yyyy","dd-MM-yyyy","yyyy-dd-MM","yyyy/dd/MM","MM/dd/yyyy","MM-dd-yyyy"],R=({value:e})=>{const t=m.parseISO(e);if(m.isValid(t))return t;const r=new Date;for(const t of C){const n=m.parse(e,t,r);if(m.isValid(n))return n.setUTCHours(0,0,0,0),n}return null},D=({value:e,format:t=K})=>{const r=(({value:e,format:t=K})=>{if(n(e))return e;if(!s(e))return null;try{const r=m.parse(e,t,new Date);return m.isValid(r)?r:R({value:e})}catch(e){return null}})({value:e,format:t});return r?r.toISOString():null};var I;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(I||(I={}));const P=({value:e,type:a,format:u})=>{if(i(e))return null;switch(a){case I.String:return(({value:e})=>s(e)?e:n(e)?e.toISOString():o(e)?JSON.stringify(e):String(e))({value:e});case I.Number:return(({value:e})=>{if(r(e))return e;if(n(e))return null;const t=Number(e);return isNaN(t)?null:t})({value:e});case I.Boolean:return(({value:e})=>t(e)?e:"false"!==e&&"0"!==e&&0!==e&&Boolean(e))({value:e});case I.DateTimeString:return D({value:e,format:u});default:return e}},L=e=>Object.values(I).includes(e),N=(t,r)=>{const n={...t};return r.forEach((r=>{const{targetFieldKey:s,type:o}=r;L(o)&&(r.isUnified&&e(n[s])?n[s]=P({value:t[s],type:o}):n.unified_custom_fields&&e(n.unified_custom_fields?.[s])&&(n.unified_custom_fields[s]=P({value:t.unified_custom_fields?.[s],type:o})))})),{...n}},$=(t,r)=>{const n={...t};return r.forEach((r=>{const{targetFieldKey:s,type:o}=r;L(o)&&(r.isUnified&&e(n[s])?n[s]=P({value:t[s],type:o}):n.unified_custom_fields&&e(n.unified_custom_fields?.[s])&&(n.unified_custom_fields[s]=P({value:t.unified_custom_fields?.[s],type:o})))})),{...n}};var q;!function(e){e.TYPECAST="typecast",e.MAP_FIELDS="map_fields",e.GROUP_DATA="group_data",e.REQUEST="request"}(q||(q={}));const G={[q.TYPECAST]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs;if(!t||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let r;return r=Array.isArray(e.result)?e.result.map((e=>N(e,t))):N(e.result,t),{block:{...e,result:r},successful:!0}}},v2:{fn:async({block:e,params:t})=>{const{fields:r,dataSource:n}=O.parse(t),s=u(n,e);if(!r||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let o;return o=Array.isArray(s)?s.map((e=>$(e,r))):$(s,r),{block:{...e},successful:!0,output:{data:o}}},inputSchema:O,outputSchema:U}},[q.MAP_FIELDS]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs,r=[],n=e.steps;if(!t||"disabled"===e?.debug?.custom_mappings||!n)return{block:e,successful:!0};let s;if(Array.isArray(e.result)){const o=e.result.length;s=e.result.map(((e,s)=>{const i=h(n,o,s),a=v(e,t,i);return r.push(...a.errors||[]),a.record}))}else{const o=v(e.result,t,n);s=o.record,r.push(...o.errors||[])}return{block:{...e,result:s},successful:!0,errors:Object.keys(r).length>0?r:void 0}}},v2:{fn:async({block:e,params:t})=>{const r=[],{fields:n,dataSource:s}=S.parse(t),o=u(s,e);if(!n||!s||"disabled"===e?.debug?.custom_mappings||!o)return{block:e,successful:!0};let i;if(Array.isArray(o))i=o.map((e=>{const t=F(n,e);return r.push(...t?.errors||[]),t?.record}));else{const e=F(n,o);i=e?.record,r.push(...e?.errors||[])}return{block:{...e},successful:!0,output:{data:i},errors:Object.keys(r).length>0?r:void 0}},inputSchema:S,outputSchema:_}},[q.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const r=p.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:n}=t,s=n?n.filter((t=>!t.condition||!0===u(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,o=t?c({...t,args:s},e):{},{baseUrl:i,url:a,method:l,response:d,args:m}=x.parse(o),g=o?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,b=w.parse(g),h=m?y(m):{query:{},body:{},headers:{}},v=f(b),k={...h?.headers??{},...v};let S;try{S=await r.performRequest({httpClient:e.httpClient,url:`${i}${a}`,queryParams:h?.query,method:l,headers:k,body:h?.body})}catch(t){return{block:e,successful:!1,errors:[t]}}const _=d?.dataKey?S.data[d?.dataKey]:S.data,F=E(_,d);return{block:e,successful:!0,output:{data:F,raw:S}}},inputSchema:x,outputSchema:T}},[q.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:n,isSingleRecord:s}=g.parse(r),o=n.reduce(((r,n)=>{const o=t.steps?.[n]?.output?.data;return o?s?{...r,[n]:{...o}}:(Object.keys(o).forEach((t=>{const s=e(r[t])?r[t]:{};r[t]={...s,[n]:{...o[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:s?o:Object.values(o)}}},inputSchema:g,outputSchema:b}}},H=(e,t)=>async({block:r,params:n})=>{try{e.inputSchema&&e.inputSchema.parse(n)}catch(e){return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const s=await e.fn({block:r,params:n});try{e.outputSchema&&e.outputSchema.parse(s.output)}catch(e){return{block:r,successful:!1,errors:[{message:`Output data of ${t} has unexpected format`}]}}return s},B={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:n=G}){const s=n?.[e]?.[`v${t}`];if(!s)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...s,fn:H(s,e)}:s}},V={hris:{title:"HRIS",key:"hris",description:"Human Resource Information System"},crm:{title:"CRM",key:"crm",description:"Customer Relationship Management"},ats:{title:"ATS",key:"ats",description:"Applicant Tracking System"},lms:{title:"LMS",key:"lms",description:"Learning Management System"},marketing:{title:"Marketing",key:"marketing",description:"Marketing"},filestorage:{title:"File Storage",key:"filestorage",description:"File Storage"}},z=e=>V[e.toLowerCase()]??null,Q=e=>!!V[e.toLowerCase()];export{w as AUTHENTICATION_SCHEMA,q as StepFunctionName,B as StepFunctionsFactory,z as getCategoryDetails,Q as isValidCategory};
1
+ import{notMissing as e,isString as t,isMissing as r,safeParseToDateTimeString as s,safeParseToBoolean as n,safeParseToNumber as o,safeParseToString as a}from"@stackone/utils";import{z as i}from"zod";import{evaluate as u,safeEvaluateRecord as c}from"@stackone/expressions";import{RequestParameterLocations as l,HttpMethods as d,RequestClientFactory as p,parseRequestParameters as m,createAuthorizationHeaders as f}from"@stackone/transport";const g=i.object({stepsDataToGroup:i.array(i.string()),isSingleRecord:i.boolean().optional()}),y=i.object({data:i.unknown()}),b=(e,t,r)=>Object.entries(e).reduce(((e,[s,n])=>{const o=n?.output?.data;return Array.isArray(o)&&o.length===t?e[s]={output:{data:o[r]}}:e[s]=n,e}),{}),h=(e,t,r)=>{if(!e||!r)return{record:e};const s={unified:{...e},..."object"==typeof r?r:{}},n={},o=[],a={...e};for(const r of t){const{error:t,value:i}=v(s,e.id,r);t?o.push(t):r.isUnified?a[r.targetFieldKey]=i:n[r.targetFieldKey]=i}return{record:{...a,unified_custom_fields:Object.keys(n).length>0?n:void 0},errors:o.length>0?o:void 0}},v=(e,t,r)=>{const{expression:s,targetFieldKey:n}=r;if(!s)return{error:{message:"Expression is empty",id:t,targetField:n}};let o;try{o=u(s,e)}catch{return{error:{message:"Invalid expression",id:t,targetField:n}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:n}}:{value:o}},k=i.object({fields:i.object({targetFieldKey:i.string(),expression:i.string(),type:i.enum(["string","number","boolean","datetime_string","enum"]),isUnified:i.boolean().optional(),enumMapper:i.object({matcher:i.string().or(i.object({matchExpression:i.string(),value:i.string()}).array())}).optional()}).array(),dataSource:i.string()}),S=i.object({data:i.unknown()}),_=(e,t)=>{if(!t)return;const r={},s=[],n={};for(const o of e){const{error:e,value:a}=F(t,t?.id,o);e?s.push(e):o.isUnified?n[o.targetFieldKey]=a:r[o.targetFieldKey]=a}return{record:{...n,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:s.length>0?s:void 0}},F=(e,t,r)=>{switch(r.type){case"string":case"number":case"boolean":case"datetime_string":return j(r,t,e);case"enum":return x(r,t,e);default:return{error:{message:"Invalid type",id:t,targetField:r.targetFieldKey}}}},j=(e,t,r)=>{if(!e.expression)return{error:{message:"Expression is empty",id:t,targetField:e.targetFieldKey}};let s;try{s=u(e.expression,r)}catch(r){return{error:{message:"Invalid expression",id:t,targetField:e.targetFieldKey}}}return void 0===s?{error:{message:"Expression returned no value",id:t,targetField:e.targetFieldKey}}:{value:s}},x=(r,s,n)=>{const o=j(r,s,n),a=e(o.value)?o.value:null;if(void 0===r.enumMapper)return{error:{message:"Enum mapper was not defined",id:s,targetField:r.targetFieldKey}};const i=r.enumMapper.matcher;if(t(i))return{error:{message:`The built-in matcher "${i}" is not supported`,id:s,targetField:r.targetFieldKey}};for(const e of i){const{matchExpression:t,value:r}=e;if(!0===u(t,n))return{value:{value:r,source_value:a}}}return{value:{value:"unmapped_value",source_value:a}}},A=i.object({type:i.literal("basic"),username:i.string(),password:i.string(),encoding:i.string().optional()}),w=i.object({type:i.literal("bearer"),token:i.string()}),E=i.discriminatedUnion("type",[A,w]),K=i.object({baseUrl:i.string(),url:i.string(),method:i.enum(d),response:i.object({collection:i.boolean().optional(),indexField:i.string().optional(),dataKey:i.string().optional()}).optional(),args:i.object({name:i.string(),value:i.unknown(),in:i.enum(l),condition:i.string().optional()}).array().optional()}),T=i.object({data:i.unknown(),raw:i.unknown().optional()}),U=(e,t)=>{if(t?.collection&&t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const s=t.indexField;return s&&r[s]&&(e[r[s]]=r),e}),{});if(!t?.collection&&t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},C=i.object({fields:i.object({targetFieldKey:i.string(),type:i.string(),isUnified:i.boolean().optional()}).array().optional(),dataSource:i.string()}),M=i.object({data:i.unknown()});var O;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(O||(O={}));const R=({value:e,type:t,format:i})=>{if(r(e))return null;switch(t){case O.String:return a({value:e});case O.Number:return o({value:e});case O.Boolean:return n({value:e});case O.DateTimeString:return s({value:e,format:i});default:return e}},D=e=>Object.values(O).includes(e),I=(t,r)=>{const s={...t};return r.forEach((r=>{const{targetFieldKey:n,type:o}=r;D(o)&&(r.isUnified&&e(s[n])?s[n]=R({value:t[n],type:o}):s.unified_custom_fields&&e(s.unified_custom_fields?.[n])&&(s.unified_custom_fields[n]=R({value:t.unified_custom_fields?.[n],type:o})))})),{...s}},P=(t,r)=>{const s={...t};return r.forEach((r=>{const{targetFieldKey:n,type:o}=r;D(o)&&(r.isUnified&&e(s[n])?s[n]=R({value:t[n],type:o}):s.unified_custom_fields&&e(s.unified_custom_fields?.[n])&&(s.unified_custom_fields[n]=R({value:t.unified_custom_fields?.[n],type:o})))})),{...s}};var $;!function(e){e.TYPECAST="typecast",e.MAP_FIELDS="map_fields",e.GROUP_DATA="group_data",e.REQUEST="request"}($||($={}));const L={[$.TYPECAST]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs;if(!t||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let r;return r=Array.isArray(e.result)?e.result.map((e=>I(e,t))):I(e.result,t),{block:{...e,result:r},successful:!0}}},v2:{fn:async({block:e,params:t})=>{const{fields:r,dataSource:s}=C.parse(t),n=u(s,e);if(!r||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let o;return o=Array.isArray(n)?n.map((e=>P(e,r))):P(n,r),{block:{...e},successful:!0,output:{data:o}}},inputSchema:C,outputSchema:M}},[$.MAP_FIELDS]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs,r=[],s=e.steps;if(!t||"disabled"===e?.debug?.custom_mappings||!s)return{block:e,successful:!0};let n;if(Array.isArray(e.result)){const o=e.result.length;n=e.result.map(((e,n)=>{const a=b(s,o,n),i=h(e,t,a);return r.push(...i.errors||[]),i.record}))}else{const o=h(e.result,t,s);n=o.record,r.push(...o.errors||[])}return{block:{...e,result:n},successful:!0,errors:Object.keys(r).length>0?r:void 0}}},v2:{fn:async({block:e,params:t})=>{const r=[],{fields:s,dataSource:n}=k.parse(t),o=u(n,e);if(!s||!n||"disabled"===e?.debug?.custom_mappings||!o)return{block:e,successful:!0};let a;if(Array.isArray(o))a=o.map((e=>{const t=_(s,e);return r.push(...t?.errors||[]),t?.record}));else{const e=_(s,o);a=e?.record,r.push(...e?.errors||[])}return{block:{...e},successful:!0,output:{data:a},errors:Object.keys(r).length>0?r:void 0}},inputSchema:k,outputSchema:S}},[$.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const r=p.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:s}=t,n=s?s.filter((t=>!t.condition||!0===u(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,o=t?c({...t,args:n},e):{},{baseUrl:a,url:i,method:l,response:d,args:g}=K.parse(o),y=o?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,b=E.parse(y),h=g?m(g):{query:{},body:{},headers:{}},v=f(b),k={...h?.headers??{},...v};let S;try{S=await r.performRequest({httpClient:e.httpClient,url:`${a}${i}`,queryParams:h?.query,method:l,headers:k,body:h?.body})}catch(t){return{block:e,successful:!1,errors:[t]}}const _=d?.dataKey?S.data[d?.dataKey]:S.data,F=U(_,d);return{block:e,successful:!0,output:{data:F,raw:S}}},inputSchema:K,outputSchema:T}},[$.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:s,isSingleRecord:n}=g.parse(r),o=s.reduce(((r,s)=>{const o=t.steps?.[s]?.output?.data;return o?n?{...r,[s]:{...o}}:(Object.keys(o).forEach((t=>{const n=e(r[t])?r[t]:{};r[t]={...n,[s]:{...o[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:n?o:Object.values(o)}}},inputSchema:g,outputSchema:y}}},q=(e,t)=>async({block:r,params:s})=>{try{e.inputSchema&&e.inputSchema.parse(s)}catch{return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const n=await e.fn({block:r,params:s});try{e.outputSchema&&e.outputSchema.parse(n.output)}catch{return{block:r,successful:!1,errors:[{message:`Output data of ${t} has unexpected format`}]}}return n},G={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:s=L}){const n=s?.[e]?.[`v${t}`];if(!n)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...n,fn:q(n,e)}:n}},H={hris:{title:"HRIS",key:"hris",description:"Human Resource Information System"},crm:{title:"CRM",key:"crm",description:"Customer Relationship Management"},ats:{title:"ATS",key:"ats",description:"Applicant Tracking System"},lms:{title:"LMS",key:"lms",description:"Learning Management System"},marketing:{title:"Marketing",key:"marketing",description:"Marketing"},filestorage:{title:"File Storage",key:"filestorage",description:"File Storage"}},N=e=>H[e.toLowerCase()]??null,z=e=>!!H[e.toLowerCase()];export{E as AUTHENTICATION_SCHEMA,$ as StepFunctionName,G as StepFunctionsFactory,N as getCategoryDetails,z as isValidCategory};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("@stackone/utils"),t=require("zod"),r=require("@stackone/expressions"),s=require("@stackone/transport");function n(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var i=n(require("date-fns"));const o=t.z.object({stepsDataToGroup:t.z.array(t.z.string()),isSingleRecord:t.z.boolean().optional()}),a=t.z.object({data:t.z.unknown()}),u=(e,t,r)=>Object.entries(e).reduce(((e,[s,n])=>{const i=n?.output?.data;return Array.isArray(i)&&i.length===t?e[s]={output:{data:i[r]}}:e[s]=n,e}),{}),c=(e,t,r)=>{if(!e||!r)return{record:e};const s={unified:{...e},..."object"==typeof r?r:{}},n={},i=[],o={...e};for(const r of t){const{error:t,value:a}=l(s,e.id,r);t?i.push(t):r.isUnified?o[r.targetFieldKey]=a:n[r.targetFieldKey]=a}return{record:{...o,unified_custom_fields:Object.keys(n).length>0?n:void 0},errors:i.length>0?i:void 0}},l=(e,t,s)=>{const{expression:n,targetFieldKey:i}=s;if(!n)return{error:{message:"Expression is empty",id:t,targetField:i}};let o;try{o=r.evaluate(n,e)}catch(e){return{error:{message:"Invalid expression",id:t,targetField:i}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:i}}:{value:o}},d=t.z.object({fields:t.z.object({expression:t.z.string(),targetFieldKey:t.z.string(),type:t.z.string(),isUnified:t.z.boolean().optional()}).array(),dataSource:t.z.string()}),p=t.z.object({data:t.z.unknown()}),y=(e,t)=>{if(!t)return;const r={},s=[],n={};for(const i of e){const{error:e,value:o}=f(t,t?.id,i);e?s.push(e):i.isUnified?n[i.targetFieldKey]=o:r[i.targetFieldKey]=o}return{record:{...n,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:s.length>0?s:void 0}},f=(e,t,s)=>{const{expression:n,targetFieldKey:i}=s;if(!n)return{error:{message:"Expression is empty",id:t,targetField:i}};let o;try{o=r.evaluate(n,e)}catch(e){return{error:{message:"Invalid expression",id:t,targetField:i}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:i}}:{value:o}},g=t.z.object({type:t.z.literal("basic"),username:t.z.string(),password:t.z.string(),encoding:t.z.string().optional()}),m=t.z.object({type:t.z.literal("bearer"),token:t.z.string()}),b=t.z.discriminatedUnion("type",[g,m]),v=t.z.object({baseUrl:t.z.string(),url:t.z.string(),method:t.z.enum(s.HttpMethods),response:t.z.object({collection:t.z.boolean().optional(),indexField:t.z.string().optional(),dataKey:t.z.string().optional()}).optional(),args:t.z.object({name:t.z.string(),value:t.z.unknown(),in:t.z.enum(s.RequestParameterLocations),condition:t.z.string().optional()}).array().optional()}),h=t.z.object({data:t.z.unknown(),raw:t.z.unknown().optional()}),S=(e,t)=>{if(t?.collection&&t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const s=t.indexField;return s&&r[s]&&(e[r[s]]=r),e}),{});if(!t?.collection&&t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},z=t.z.object({fields:t.z.object({targetFieldKey:t.z.string(),type:t.z.string(),isUnified:t.z.boolean().optional()}).array().optional(),dataSource:t.z.string()}),k=t.z.object({data:t.z.unknown()}),F="yyyy-MM-dd",M=["yyyy-MM-dd","yyyy/MM/dd","dd/MM/yyyy","dd-MM-yyyy","yyyy-dd-MM","yyyy/dd/MM","MM/dd/yyyy","MM-dd-yyyy"],_=({value:e})=>{const t=i.parseISO(e);if(i.isValid(t))return t;const r=new Date;for(const t of M){const s=i.parse(e,t,r);if(i.isValid(s))return s.setUTCHours(0,0,0,0),s}return null},j=({value:t,format:r=F})=>{const s=(({value:t,format:r=F})=>{if(e.isDate(t))return t;if(!e.isString(t))return null;try{const e=i.parse(t,r,new Date);return i.isValid(e)?e:_({value:t})}catch(e){return null}})({value:t,format:r});return s?s.toISOString():null};var x;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(x||(x={}));const A=({value:t,type:r,format:s})=>{if(e.isMissing(t))return null;switch(r){case x.String:return(({value:t})=>e.isString(t)?t:e.isDate(t)?t.toISOString():e.isObject(t)?JSON.stringify(t):String(t))({value:t});case x.Number:return(({value:t})=>{if(e.isNumber(t))return t;if(e.isDate(t))return null;const r=Number(t);return isNaN(r)?null:r})({value:t});case x.Boolean:return(({value:t})=>e.isBoolean(t)?t:"false"!==t&&"0"!==t&&0!==t&&Boolean(t))({value:t});case x.DateTimeString:return j({value:t,format:s});default:return t}},O=e=>Object.values(x).includes(e),w=(t,r)=>{const s={...t};return r.forEach((r=>{const{targetFieldKey:n,type:i}=r;O(i)&&(r.isUnified&&e.notMissing(s[n])?s[n]=A({value:t[n],type:i}):s.unified_custom_fields&&e.notMissing(s.unified_custom_fields?.[n])&&(s.unified_custom_fields[n]=A({value:t.unified_custom_fields?.[n],type:i})))})),{...s}},E=(t,r)=>{const s={...t};return r.forEach((r=>{const{targetFieldKey:n,type:i}=r;O(i)&&(r.isUnified&&e.notMissing(s[n])?s[n]=A({value:t[n],type:i}):s.unified_custom_fields&&e.notMissing(s.unified_custom_fields?.[n])&&(s.unified_custom_fields[n]=A({value:t.unified_custom_fields?.[n],type:i})))})),{...s}};var T;exports.StepFunctionName=void 0,(T=exports.StepFunctionName||(exports.StepFunctionName={})).TYPECAST="typecast",T.MAP_FIELDS="map_fields",T.GROUP_DATA="group_data",T.REQUEST="request";const C={[exports.StepFunctionName.TYPECAST]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs;if(!t||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let r;return r=Array.isArray(e.result)?e.result.map((e=>w(e,t))):w(e.result,t),{block:{...e,result:r},successful:!0}}},v2:{fn:async({block:e,params:t})=>{const{fields:s,dataSource:n}=z.parse(t),i=r.evaluate(n,e);if(!s||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let o;return o=Array.isArray(i)?i.map((e=>E(e,s))):E(i,s),{block:{...e},successful:!0,output:{data:o}}},inputSchema:z,outputSchema:k}},[exports.StepFunctionName.MAP_FIELDS]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs,r=[],s=e.steps;if(!t||"disabled"===e?.debug?.custom_mappings||!s)return{block:e,successful:!0};let n;if(Array.isArray(e.result)){const i=e.result.length;n=e.result.map(((e,n)=>{const o=u(s,i,n),a=c(e,t,o);return r.push(...a.errors||[]),a.record}))}else{const i=c(e.result,t,s);n=i.record,r.push(...i.errors||[])}return{block:{...e,result:n},successful:!0,errors:Object.keys(r).length>0?r:void 0}}},v2:{fn:async({block:e,params:t})=>{const s=[],{fields:n,dataSource:i}=d.parse(t),o=r.evaluate(i,e);if(!n||!i||"disabled"===e?.debug?.custom_mappings||!o)return{block:e,successful:!0};let a;if(Array.isArray(o))a=o.map((e=>{const t=y(n,e);return s.push(...t?.errors||[]),t?.record}));else{const e=y(n,o);a=e?.record,s.push(...e?.errors||[])}return{block:{...e},successful:!0,output:{data:a},errors:Object.keys(s).length>0?s:void 0}},inputSchema:d,outputSchema:p}},[exports.StepFunctionName.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const n=s.RequestClientFactory.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:i}=t,o=i?i.filter((t=>!t.condition||!0===r.evaluate(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,a=t?r.safeEvaluateRecord({...t,args:o},e):{},{baseUrl:u,url:c,method:l,response:d,args:p}=v.parse(a),y=a?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,f=b.parse(y),g=p?s.parseRequestParameters(p):{query:{},body:{},headers:{}},m=s.createAuthorizationHeaders(f),h={...g?.headers??{},...m};let z;try{z=await n.performRequest({httpClient:e.httpClient,url:`${u}${c}`,queryParams:g?.query,method:l,headers:h,body:g?.body})}catch(t){return{block:e,successful:!1,errors:[t]}}const k=d?.dataKey?z.data[d?.dataKey]:z.data,F=S(k,d);return{block:e,successful:!0,output:{data:F,raw:z}}},inputSchema:v,outputSchema:h}},[exports.StepFunctionName.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:s,isSingleRecord:n}=o.parse(r),i=s.reduce(((r,s)=>{const i=t.steps?.[s]?.output?.data;return i?n?{...r,[s]:{...i}}:(Object.keys(i).forEach((t=>{const n=e.notMissing(r[t])?r[t]:{};r[t]={...n,[s]:{...i[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:n?i:Object.values(i)}}},inputSchema:o,outputSchema:a}}},N=(e,t)=>async({block:r,params:s})=>{try{e.inputSchema&&e.inputSchema.parse(s)}catch(e){return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const n=await e.fn({block:r,params:s});try{e.outputSchema&&e.outputSchema.parse(n.output)}catch(e){return{block:r,successful:!1,errors:[{message:`Output data of ${t} has unexpected format`}]}}return n},U={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:s=C}){const n=s?.[e]?.[`v${t}`];if(!n)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...n,fn:N(n,e)}:n}},D={hris:{title:"HRIS",key:"hris",description:"Human Resource Information System"},crm:{title:"CRM",key:"crm",description:"Customer Relationship Management"},ats:{title:"ATS",key:"ats",description:"Applicant Tracking System"},lms:{title:"LMS",key:"lms",description:"Learning Management System"},marketing:{title:"Marketing",key:"marketing",description:"Marketing"},filestorage:{title:"File Storage",key:"filestorage",description:"File Storage"}};exports.AUTHENTICATION_SCHEMA=b,exports.StepFunctionsFactory=U,exports.getCategoryDetails=e=>D[e.toLowerCase()]??null,exports.isValidCategory=e=>!!D[e.toLowerCase()];
1
+ "use strict";var e=require("@stackone/utils"),t=require("zod"),r=require("@stackone/expressions"),s=require("@stackone/transport");const n=t.z.object({stepsDataToGroup:t.z.array(t.z.string()),isSingleRecord:t.z.boolean().optional()}),a=t.z.object({data:t.z.unknown()}),o=(e,t,r)=>Object.entries(e).reduce(((e,[s,n])=>{const a=n?.output?.data;return Array.isArray(a)&&a.length===t?e[s]={output:{data:a[r]}}:e[s]=n,e}),{}),i=(e,t,r)=>{if(!e||!r)return{record:e};const s={unified:{...e},..."object"==typeof r?r:{}},n={},a=[],o={...e};for(const r of t){const{error:t,value:i}=u(s,e.id,r);t?a.push(t):r.isUnified?o[r.targetFieldKey]=i:n[r.targetFieldKey]=i}return{record:{...o,unified_custom_fields:Object.keys(n).length>0?n:void 0},errors:a.length>0?a:void 0}},u=(e,t,s)=>{const{expression:n,targetFieldKey:a}=s;if(!n)return{error:{message:"Expression is empty",id:t,targetField:a}};let o;try{o=r.evaluate(n,e)}catch{return{error:{message:"Invalid expression",id:t,targetField:a}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:a}}:{value:o}},c=t.z.object({fields:t.z.object({targetFieldKey:t.z.string(),expression:t.z.string(),type:t.z.enum(["string","number","boolean","datetime_string","enum"]),isUnified:t.z.boolean().optional(),enumMapper:t.z.object({matcher:t.z.string().or(t.z.object({matchExpression:t.z.string(),value:t.z.string()}).array())}).optional()}).array(),dataSource:t.z.string()}),l=t.z.object({data:t.z.unknown()}),d=(e,t)=>{if(!t)return;const r={},s=[],n={};for(const a of e){const{error:e,value:o}=p(t,t?.id,a);e?s.push(e):a.isUnified?n[a.targetFieldKey]=o:r[a.targetFieldKey]=o}return{record:{...n,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:s.length>0?s:void 0}},p=(e,t,r)=>{switch(r.type){case"string":case"number":case"boolean":case"datetime_string":return m(r,t,e);case"enum":return g(r,t,e);default:return{error:{message:"Invalid type",id:t,targetField:r.targetFieldKey}}}},m=(e,t,s)=>{if(!e.expression)return{error:{message:"Expression is empty",id:t,targetField:e.targetFieldKey}};let n;try{n=r.evaluate(e.expression,s)}catch(r){return{error:{message:"Invalid expression",id:t,targetField:e.targetFieldKey}}}return void 0===n?{error:{message:"Expression returned no value",id:t,targetField:e.targetFieldKey}}:{value:n}},g=(t,s,n)=>{const a=m(t,s,n),o=e.notMissing(a.value)?a.value:null;if(void 0===t.enumMapper)return{error:{message:"Enum mapper was not defined",id:s,targetField:t.targetFieldKey}};const i=t.enumMapper.matcher;if(e.isString(i))return{error:{message:`The built-in matcher "${i}" is not supported`,id:s,targetField:t.targetFieldKey}};for(const e of i){const{matchExpression:t,value:s}=e;if(!0===r.evaluate(t,n))return{value:{value:s,source_value:o}}}return{value:{value:"unmapped_value",source_value:o}}},f=t.z.object({type:t.z.literal("basic"),username:t.z.string(),password:t.z.string(),encoding:t.z.string().optional()}),y=t.z.object({type:t.z.literal("bearer"),token:t.z.string()}),b=t.z.discriminatedUnion("type",[f,y]),v=t.z.object({baseUrl:t.z.string(),url:t.z.string(),method:t.z.enum(s.HttpMethods),response:t.z.object({collection:t.z.boolean().optional(),indexField:t.z.string().optional(),dataKey:t.z.string().optional()}).optional(),args:t.z.object({name:t.z.string(),value:t.z.unknown(),in:t.z.enum(s.RequestParameterLocations),condition:t.z.string().optional()}).array().optional()}),h=t.z.object({data:t.z.unknown(),raw:t.z.unknown().optional()}),z=(e,t)=>{if(t?.collection&&t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const s=t.indexField;return s&&r[s]&&(e[r[s]]=r),e}),{});if(!t?.collection&&t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},S=t.z.object({fields:t.z.object({targetFieldKey:t.z.string(),type:t.z.string(),isUnified:t.z.boolean().optional()}).array().optional(),dataSource:t.z.string()}),k=t.z.object({data:t.z.unknown()});var F;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(F||(F={}));const _=({value:t,type:r,format:s})=>{if(e.isMissing(t))return null;switch(r){case F.String:return e.safeParseToString({value:t});case F.Number:return e.safeParseToNumber({value:t});case F.Boolean:return e.safeParseToBoolean({value:t});case F.DateTimeString:return e.safeParseToDateTimeString({value:t,format:s});default:return t}},x=e=>Object.values(F).includes(e),A=(t,r)=>{const s={...t};return r.forEach((r=>{const{targetFieldKey:n,type:a}=r;x(a)&&(r.isUnified&&e.notMissing(s[n])?s[n]=_({value:t[n],type:a}):s.unified_custom_fields&&e.notMissing(s.unified_custom_fields?.[n])&&(s.unified_custom_fields[n]=_({value:t.unified_custom_fields?.[n],type:a})))})),{...s}},T=(t,r)=>{const s={...t};return r.forEach((r=>{const{targetFieldKey:n,type:a}=r;x(a)&&(r.isUnified&&e.notMissing(s[n])?s[n]=_({value:t[n],type:a}):s.unified_custom_fields&&e.notMissing(s.unified_custom_fields?.[n])&&(s.unified_custom_fields[n]=_({value:t.unified_custom_fields?.[n],type:a})))})),{...s}};var j;exports.StepFunctionName=void 0,(j=exports.StepFunctionName||(exports.StepFunctionName={})).TYPECAST="typecast",j.MAP_FIELDS="map_fields",j.GROUP_DATA="group_data",j.REQUEST="request";const E={[exports.StepFunctionName.TYPECAST]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs;if(!t||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let r;return r=Array.isArray(e.result)?e.result.map((e=>A(e,t))):A(e.result,t),{block:{...e,result:r},successful:!0}}},v2:{fn:async({block:e,params:t})=>{const{fields:s,dataSource:n}=S.parse(t),a=r.evaluate(n,e);if(!s||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let o;return o=Array.isArray(a)?a.map((e=>T(e,s))):T(a,s),{block:{...e},successful:!0,output:{data:o}}},inputSchema:S,outputSchema:k}},[exports.StepFunctionName.MAP_FIELDS]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs,r=[],s=e.steps;if(!t||"disabled"===e?.debug?.custom_mappings||!s)return{block:e,successful:!0};let n;if(Array.isArray(e.result)){const a=e.result.length;n=e.result.map(((e,n)=>{const u=o(s,a,n),c=i(e,t,u);return r.push(...c.errors||[]),c.record}))}else{const a=i(e.result,t,s);n=a.record,r.push(...a.errors||[])}return{block:{...e,result:n},successful:!0,errors:Object.keys(r).length>0?r:void 0}}},v2:{fn:async({block:e,params:t})=>{const s=[],{fields:n,dataSource:a}=c.parse(t),o=r.evaluate(a,e);if(!n||!a||"disabled"===e?.debug?.custom_mappings||!o)return{block:e,successful:!0};let i;if(Array.isArray(o))i=o.map((e=>{const t=d(n,e);return s.push(...t?.errors||[]),t?.record}));else{const e=d(n,o);i=e?.record,s.push(...e?.errors||[])}return{block:{...e},successful:!0,output:{data:i},errors:Object.keys(s).length>0?s:void 0}},inputSchema:c,outputSchema:l}},[exports.StepFunctionName.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const n=s.RequestClientFactory.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:a}=t,o=a?a.filter((t=>!t.condition||!0===r.evaluate(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,i=t?r.safeEvaluateRecord({...t,args:o},e):{},{baseUrl:u,url:c,method:l,response:d,args:p}=v.parse(i),m=i?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,g=b.parse(m),f=p?s.parseRequestParameters(p):{query:{},body:{},headers:{}},y=s.createAuthorizationHeaders(g),h={...f?.headers??{},...y};let S;try{S=await n.performRequest({httpClient:e.httpClient,url:`${u}${c}`,queryParams:f?.query,method:l,headers:h,body:f?.body})}catch(t){return{block:e,successful:!1,errors:[t]}}const k=d?.dataKey?S.data[d?.dataKey]:S.data,F=z(k,d);return{block:e,successful:!0,output:{data:F,raw:S}}},inputSchema:v,outputSchema:h}},[exports.StepFunctionName.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:s,isSingleRecord:a}=n.parse(r),o=s.reduce(((r,s)=>{const n=t.steps?.[s]?.output?.data;return n?a?{...r,[s]:{...n}}:(Object.keys(n).forEach((t=>{const a=e.notMissing(r[t])?r[t]:{};r[t]={...a,[s]:{...n[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:a?o:Object.values(o)}}},inputSchema:n,outputSchema:a}}},w=(e,t)=>async({block:r,params:s})=>{try{e.inputSchema&&e.inputSchema.parse(s)}catch{return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const n=await e.fn({block:r,params:s});try{e.outputSchema&&e.outputSchema.parse(n.output)}catch{return{block:r,successful:!1,errors:[{message:`Output data of ${t} has unexpected format`}]}}return n},M={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:s=E}){const n=s?.[e]?.[`v${t}`];if(!n)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...n,fn:w(n,e)}:n}},K={hris:{title:"HRIS",key:"hris",description:"Human Resource Information System"},crm:{title:"CRM",key:"crm",description:"Customer Relationship Management"},ats:{title:"ATS",key:"ats",description:"Applicant Tracking System"},lms:{title:"LMS",key:"lms",description:"Learning Management System"},marketing:{title:"Marketing",key:"marketing",description:"Marketing"},filestorage:{title:"File Storage",key:"filestorage",description:"File Storage"}};exports.AUTHENTICATION_SCHEMA=b,exports.StepFunctionsFactory=M,exports.getCategoryDetails=e=>K[e.toLowerCase()]??null,exports.isValidCategory=e=>!!K[e.toLowerCase()];
@@ -42,11 +42,18 @@ export type BlockIndexedRecord = {
42
42
  [key: string]: unknown;
43
43
  };
44
44
  };
45
+ export type EnumMatcherExpression = {
46
+ matchExpression: string;
47
+ value: string;
48
+ };
45
49
  export type FieldConfig = {
46
50
  expression?: string;
47
51
  targetFieldKey: string;
48
52
  type: string;
49
53
  isUnified?: boolean;
54
+ enumMapper?: {
55
+ matcher: string | EnumMatcherExpression[];
56
+ };
50
57
  };
51
58
  export type DebugParams = {
52
59
  custom_mappings?: 'disabled' | 'enabled';
@@ -1,36 +1,82 @@
1
1
  import { z } from 'zod';
2
2
  export declare const MAP_FIELDS_INPUT_PARAMS: z.ZodObject<{
3
3
  fields: z.ZodArray<z.ZodObject<{
4
- expression: z.ZodString;
5
4
  targetFieldKey: z.ZodString;
6
- type: z.ZodString;
5
+ expression: z.ZodString;
6
+ type: z.ZodEnum<["string", "number", "boolean", "datetime_string", "enum"]>;
7
7
  isUnified: z.ZodOptional<z.ZodBoolean>;
8
+ enumMapper: z.ZodOptional<z.ZodObject<{
9
+ matcher: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodObject<{
10
+ matchExpression: z.ZodString;
11
+ value: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ value: string;
14
+ matchExpression: string;
15
+ }, {
16
+ value: string;
17
+ matchExpression: string;
18
+ }>, "many">]>;
19
+ }, "strip", z.ZodTypeAny, {
20
+ matcher: string | {
21
+ value: string;
22
+ matchExpression: string;
23
+ }[];
24
+ }, {
25
+ matcher: string | {
26
+ value: string;
27
+ matchExpression: string;
28
+ }[];
29
+ }>>;
8
30
  }, "strip", z.ZodTypeAny, {
9
- expression: string;
10
31
  targetFieldKey: string;
11
- type: string;
32
+ expression: string;
33
+ type: "string" | "number" | "boolean" | "datetime_string" | "enum";
12
34
  isUnified?: boolean | undefined;
35
+ enumMapper?: {
36
+ matcher: string | {
37
+ value: string;
38
+ matchExpression: string;
39
+ }[];
40
+ } | undefined;
13
41
  }, {
14
- expression: string;
15
42
  targetFieldKey: string;
16
- type: string;
43
+ expression: string;
44
+ type: "string" | "number" | "boolean" | "datetime_string" | "enum";
17
45
  isUnified?: boolean | undefined;
46
+ enumMapper?: {
47
+ matcher: string | {
48
+ value: string;
49
+ matchExpression: string;
50
+ }[];
51
+ } | undefined;
18
52
  }>, "many">;
19
53
  dataSource: z.ZodString;
20
54
  }, "strip", z.ZodTypeAny, {
21
55
  fields: {
22
- expression: string;
23
56
  targetFieldKey: string;
24
- type: string;
57
+ expression: string;
58
+ type: "string" | "number" | "boolean" | "datetime_string" | "enum";
25
59
  isUnified?: boolean | undefined;
60
+ enumMapper?: {
61
+ matcher: string | {
62
+ value: string;
63
+ matchExpression: string;
64
+ }[];
65
+ } | undefined;
26
66
  }[];
27
67
  dataSource: string;
28
68
  }, {
29
69
  fields: {
30
- expression: string;
31
70
  targetFieldKey: string;
32
- type: string;
71
+ expression: string;
72
+ type: "string" | "number" | "boolean" | "datetime_string" | "enum";
33
73
  isUnified?: boolean | undefined;
74
+ enumMapper?: {
75
+ matcher: string | {
76
+ value: string;
77
+ matchExpression: string;
78
+ }[];
79
+ } | undefined;
34
80
  }[];
35
81
  dataSource: string;
36
82
  }>;
@@ -58,36 +58,82 @@ export declare const stepFunctions: {
58
58
  fn: import("./types").StepFunction;
59
59
  inputSchema: import("zod").ZodObject<{
60
60
  fields: import("zod").ZodArray<import("zod").ZodObject<{
61
- expression: import("zod").ZodString;
62
61
  targetFieldKey: import("zod").ZodString;
63
- type: import("zod").ZodString;
62
+ expression: import("zod").ZodString;
63
+ type: import("zod").ZodEnum<["string", "number", "boolean", "datetime_string", "enum"]>;
64
64
  isUnified: import("zod").ZodOptional<import("zod").ZodBoolean>;
65
+ enumMapper: import("zod").ZodOptional<import("zod").ZodObject<{
66
+ matcher: import("zod").ZodUnion<[import("zod").ZodString, import("zod").ZodArray<import("zod").ZodObject<{
67
+ matchExpression: import("zod").ZodString;
68
+ value: import("zod").ZodString;
69
+ }, "strip", import("zod").ZodTypeAny, {
70
+ value: string;
71
+ matchExpression: string;
72
+ }, {
73
+ value: string;
74
+ matchExpression: string;
75
+ }>, "many">]>;
76
+ }, "strip", import("zod").ZodTypeAny, {
77
+ matcher: string | {
78
+ value: string;
79
+ matchExpression: string;
80
+ }[];
81
+ }, {
82
+ matcher: string | {
83
+ value: string;
84
+ matchExpression: string;
85
+ }[];
86
+ }>>;
65
87
  }, "strip", import("zod").ZodTypeAny, {
66
88
  targetFieldKey: string;
67
- type: string;
89
+ type: "string" | "number" | "boolean" | "datetime_string" | "enum";
68
90
  expression: string;
69
91
  isUnified?: boolean | undefined;
92
+ enumMapper?: {
93
+ matcher: string | {
94
+ value: string;
95
+ matchExpression: string;
96
+ }[];
97
+ } | undefined;
70
98
  }, {
71
99
  targetFieldKey: string;
72
- type: string;
100
+ type: "string" | "number" | "boolean" | "datetime_string" | "enum";
73
101
  expression: string;
74
102
  isUnified?: boolean | undefined;
103
+ enumMapper?: {
104
+ matcher: string | {
105
+ value: string;
106
+ matchExpression: string;
107
+ }[];
108
+ } | undefined;
75
109
  }>, "many">;
76
110
  dataSource: import("zod").ZodString;
77
111
  }, "strip", import("zod").ZodTypeAny, {
78
112
  fields: {
79
113
  targetFieldKey: string;
80
- type: string;
114
+ type: "string" | "number" | "boolean" | "datetime_string" | "enum";
81
115
  expression: string;
82
116
  isUnified?: boolean | undefined;
117
+ enumMapper?: {
118
+ matcher: string | {
119
+ value: string;
120
+ matchExpression: string;
121
+ }[];
122
+ } | undefined;
83
123
  }[];
84
124
  dataSource: string;
85
125
  }, {
86
126
  fields: {
87
127
  targetFieldKey: string;
88
- type: string;
128
+ type: "string" | "number" | "boolean" | "datetime_string" | "enum";
89
129
  expression: string;
90
130
  isUnified?: boolean | undefined;
131
+ enumMapper?: {
132
+ matcher: string | {
133
+ value: string;
134
+ matchExpression: string;
135
+ }[];
136
+ } | undefined;
91
137
  }[];
92
138
  dataSource: string;
93
139
  }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackone/core",
3
- "version": "1.27.0",
3
+ "version": "1.29.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.es.mjs",
@@ -34,7 +34,6 @@
34
34
  "dependencies": {
35
35
  "@stackone/expressions": "*",
36
36
  "@stackone/transport": "*",
37
- "@stackone/utils": "*",
38
- "date-fns": "4.1.0"
37
+ "@stackone/utils": "*"
39
38
  }
40
39
  }
@@ -1,2 +0,0 @@
1
- export declare const DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
2
- export declare const FALLBACK_DATE_FORMATS: string[];
@@ -1,17 +0,0 @@
1
- export declare const safeParseToString: ({ value, }: {
2
- value: unknown;
3
- }) => string | null;
4
- export declare const safeParseToNumber: ({ value, }: {
5
- value: unknown;
6
- }) => number | null;
7
- export declare const safeParseToBoolean: ({ value, }: {
8
- value: unknown;
9
- }) => boolean | null;
10
- export declare const safeParseToDateTime: ({ value, format, }: {
11
- value: unknown;
12
- format?: string;
13
- }) => Date | null;
14
- export declare const safeParseToDateTimeString: ({ value, format, }: {
15
- value: unknown;
16
- format?: string;
17
- }) => string | null;