@stackone/core 1.4.0 → 1.4.1
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{HttpClient as t}from"@stackone/transport";const
|
|
1
|
+
import{HttpClient as t}from"@stackone/transport";import*as e from"date-fns";const r=(t,e="")=>{if("object"===t.type&&t.properties){const n=""===e||e.endsWith(".")?e:`${e}.`;return Object.entries(t.properties).flatMap((([t,e])=>r(e,`${n}${t}`)))}return"array"===t.type&&t.items?r(t.items,`${e}[].`):[{name:e.endsWith(".")?e.slice(0,-1):e,type:t.type,description:t.description}]};class n{constructor({version:e="1",key:n,name:s,services:o={},httpOperations:a={},auth:i,proxy:c,httpClient:u=new t}){this.listOperations=()=>Object.keys(this.httpOperations||{}),this.getOperation=t=>{const e=this.httpOperations?.[t];if(!e)throw new Error(`Operation ${t} not found`);return e},this.getOperationResponseFieldsMetadata=t=>{const e=this.getOperation(t).responses;if(!e)return null;const n=(t=>{const e=Object.entries(t).find((([t])=>t.startsWith("2")));return e?e[1]:null})(e);return n&&n.content["application/json"]?.schema?r(n.content["application/json"]?.schema):null},this.callOperation=async({operationId:t,params:e,credentials:r})=>{const n=this.httpOperations?.[t];if(!n)throw new Error(`Operation ${t} not found`);const s=(({params:t,httpOperation:e})=>{const{url:r,method:n}=e;let s=r;const o=[],a=[],i={};let c;Object.entries(t||{}).forEach((([t,r])=>{const n=e.parameters?.[t];if(n)switch(n.in){case"path":s=s.replace(`{${t}}`,r).replace(`:${t}`,r);break;case"query":o.push(`${t}=${r}`);break;case"header":i[t]=r;break;case"cookie":a.push(`${t}=${r}; `);break;case"body":c=r}}));const u=o.length>0?`?${o.join("&")}`:"";return a.length>0&&(i.cookie=a.join("")),{url:`${s}${u}`,method:n,headers:Object.keys(i).length>0?i:void 0,body:c||void 0}})({params:e,httpOperation:n}),{method:o,url:a,headers:i,body:c}=s,{apiKey:u}=r;return{connector:this,input:{operationId:t,params:e},response:await this.httpClient.request({method:o,url:a,headers:{...i,authorization:u},payload:c}),credentials:r}},this.version=e,this.key=n,this.name=s,this.services=o,this.httpOperations=a,this.auth=i,this.proxy=c,this.httpClient=u}}const s="request_body";var o;!function(t){t.MAP="map",t.TYPECAST="typecast"}(o||(o={}));const a=async({blockFunctions:t,block:e})=>t.reduce((async(t,e)=>e({block:await t})),Promise.resolve(e)),i=async({block:t})=>{const e=t?.fieldConfigs;if(!e)return t;let r;return r=Array.isArray(t.result)?t.result.map((r=>{const n=(t.providerResponse?.data?.[t.context.resource]).find((t=>t.id===r.id));return c(r,e,n)})):c(t.result,e,t.providerResponse?.data),{...t,result:r}},c=(t,e,r)=>{if(!r)return t;const n={...t};return e.forEach((t=>{const{expression:e,targetFieldKey:s}=t;e&&r[e]&&(n[s]=r[e])})),{...n}},u=t=>"string"==typeof t,l=t=>t instanceof Date,p="yyyy-MM-dd",y=["yyyy-MM-dd","yyyy/MM/dd","dd/MM/yyyy","dd-MM-yyyy","yyyy-dd-MM","yyyy/dd/MM","MM/dd/yyyy","MM-dd-yyyy"],d=({value:t})=>{const r=e.parseISO(t);if(e.isValid(r))return r;const n=new Date;for(const r of y){const s=e.parse(t,r,n);if(e.isValid(s))return s.setUTCHours(0,0,0,0),s}return null},h=({value:t,format:r=p})=>{const n=(({value:t,format:r=p})=>{if(l(t))return t;if(!u(t))return null;try{const n=e.parse(t,r,new Date);return e.isValid(n)?n:d({value:t})}catch(t){return null}})({value:t,format:r});return n?n.toISOString():null};var f;!function(t){t.String="string",t.Number="number",t.Boolean="boolean",t.DateTime="datetime"}(f||(f={}));const m=({value:t,type:e,format:r})=>{if(!t)return null;switch(e){case f.String:return(({value:t})=>u(t)?t:l(t)?t.toISOString():(t=>"object"==typeof t&&null!==t)(t)?JSON.stringify(t):String(t))({value:t});case f.Number:return(({value:t})=>{if((t=>"number"==typeof t)(t))return t;if(l(t))return null;const e=Number(t);return isNaN(e)?null:e})({value:t});case f.Boolean:return(({value:t})=>(t=>"boolean"==typeof t)(t)?t:"false"!==t&&"0"!==t&&0!==t&&Boolean(t))({value:t});case f.DateTime:return h({value:t,format:r});default:return t}},b=async({block:t})=>{const e=t?.fieldConfigs;if(!e)return t;let r;return r=Array.isArray(t.result)?t.result.map((t=>v(t,e))):v(t.result,e),{...t,result:r}},v=(t,e)=>{const r={...t};return e.forEach((e=>{const{targetFieldKey:n,type:s}=e;(t=>Object.values(f).includes(t))(s)&&t[n]&&(r[n]=m({value:t[n],type:s}))})),{...r}};class O{static build({type:t}){switch(t){case o.MAP:return i;case o.TYPECAST:return b;default:throw new Error(`Unknown block function: ${t}`)}}}const M=({fieldConfigs:t})=>{const e=[];return t&&e.push(O.build({type:o.MAP}),O.build({type:o.TYPECAST})),e};export{n as BaseConnector,o as BlockFunctionType,s as REQUEST_BODY_PARAM,a as blockPipe,M as getBlockPipeFunctionsFromConfigs};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var e=require("@stackone/transport");function t(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var r=t(require("date-fns"));const n=(e,t="")=>{if("object"===e.type&&e.properties){const r=""===t||t.endsWith(".")?t:`${t}.`;return Object.entries(e.properties).flatMap((([e,t])=>n(t,`${r}${e}`)))}return"array"===e.type&&e.items?n(e.items,`${t}[].`):[{name:t.endsWith(".")?t.slice(0,-1):t,type:e.type,description:e.description}]};var o;exports.BlockFunctionType=void 0,(o=exports.BlockFunctionType||(exports.BlockFunctionType={})).MAP="map",o.TYPECAST="typecast";const s=async({block:e})=>{const t=e?.fieldConfigs;if(!t)return e;let r;return r=Array.isArray(e.result)?e.result.map((r=>{const n=(e.providerResponse?.data?.[e.context.resource]).find((e=>e.id===r.id));return i(r,t,n)})):i(e.result,t,e.providerResponse?.data),{...e,result:r}},i=(e,t,r)=>{if(!r)return e;const n={...e};return t.forEach((e=>{const{expression:t,targetFieldKey:o}=e;t&&r[t]&&(n[o]=r[t])})),{...n}},a=e=>"string"==typeof e,c=e=>e instanceof Date,u="yyyy-MM-dd",l=["yyyy-MM-dd","yyyy/MM/dd","dd/MM/yyyy","dd-MM-yyyy","yyyy-dd-MM","yyyy/dd/MM","MM/dd/yyyy","MM-dd-yyyy"],p=({value:e})=>{const t=r.parseISO(e);if(r.isValid(t))return t;const n=new Date;for(const t of l){const o=r.parse(e,t,n);if(r.isValid(o))return o.setUTCHours(0,0,0,0),o}return null},y=({value:e,format:t=u})=>{const n=(({value:e,format:t=u})=>{if(c(e))return e;if(!a(e))return null;try{const n=r.parse(e,t,new Date);return r.isValid(n)?n:p({value:e})}catch(e){return null}})({value:e,format:t});return n?n.toISOString():null};var d;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTime="datetime"}(d||(d={}));const h=({value:e,type:t,format:r})=>{if(!e)return null;switch(t){case d.String:return(({value:e})=>a(e)?e:c(e)?e.toISOString():(e=>"object"==typeof e&&null!==e)(e)?JSON.stringify(e):String(e))({value:e});case d.Number:return(({value:e})=>{if((e=>"number"==typeof e)(e))return e;if(c(e))return null;const t=Number(e);return isNaN(t)?null:t})({value:e});case d.Boolean:return(({value:e})=>(e=>"boolean"==typeof e)(e)?e:"false"!==e&&"0"!==e&&0!==e&&Boolean(e))({value:e});case d.DateTime:return y({value:e,format:r});default:return e}},f=async({block:e})=>{const t=e?.fieldConfigs;if(!t)return e;let r;return r=Array.isArray(e.result)?e.result.map((e=>b(e,t))):b(e.result,t),{...e,result:r}},b=(e,t)=>{const r={...e};return t.forEach((t=>{const{targetFieldKey:n,type:o}=t;(e=>Object.values(d).includes(e))(o)&&e[n]&&(r[n]=h({value:e[n],type:o}))})),{...r}};class m{static build({type:e}){switch(e){case exports.BlockFunctionType.MAP:return s;case exports.BlockFunctionType.TYPECAST:return f;default:throw new Error(`Unknown block function: ${e}`)}}}exports.BaseConnector=class{constructor({version:t="1",key:r,name:o,services:s={},httpOperations:i={},auth:a,proxy:c,httpClient:u=new e.HttpClient}){this.listOperations=()=>Object.keys(this.httpOperations||{}),this.getOperation=e=>{const t=this.httpOperations?.[e];if(!t)throw new Error(`Operation ${e} not found`);return t},this.getOperationResponseFieldsMetadata=e=>{const t=this.getOperation(e).responses;if(!t)return null;const r=(e=>{const t=Object.entries(e).find((([e])=>e.startsWith("2")));return t?t[1]:null})(t);return r&&r.content["application/json"]?.schema?n(r.content["application/json"]?.schema):null},this.callOperation=async({operationId:e,params:t,credentials:r})=>{const n=this.httpOperations?.[e];if(!n)throw new Error(`Operation ${e} not found`);const o=(({params:e,httpOperation:t})=>{const{url:r,method:n}=t;let o=r;const s=[],i=[],a={};let c;Object.entries(e||{}).forEach((([e,r])=>{const n=t.parameters?.[e];if(n)switch(n.in){case"path":o=o.replace(`{${e}}`,r).replace(`:${e}`,r);break;case"query":s.push(`${e}=${r}`);break;case"header":a[e]=r;break;case"cookie":i.push(`${e}=${r}; `);break;case"body":c=r}}));const u=s.length>0?`?${s.join("&")}`:"";return i.length>0&&(a.cookie=i.join("")),{url:`${o}${u}`,method:n,headers:Object.keys(a).length>0?a:void 0,body:c||void 0}})({params:t,httpOperation:n}),{method:s,url:i,headers:a,body:c}=o,{apiKey:u}=r;return{connector:this,input:{operationId:e,params:t},response:await this.httpClient.request({method:s,url:i,headers:{...a,authorization:u},payload:c}),credentials:r}},this.version=t,this.key=r,this.name=o,this.services=s,this.httpOperations=i,this.auth=a,this.proxy=c,this.httpClient=u}},exports.REQUEST_BODY_PARAM="request_body",exports.blockPipe=async({blockFunctions:e,block:t})=>e.reduce((async(e,t)=>t({block:await e})),Promise.resolve(t)),exports.getBlockPipeFunctionsFromConfigs=({fieldConfigs:e})=>{const t=[];return e&&t.push(m.build({type:exports.BlockFunctionType.MAP}),m.build({type:exports.BlockFunctionType.TYPECAST})),t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlockFieldConfig, BlockFunction } from './types';
|
|
2
2
|
export declare const getBlockPipeFunctionsFromConfigs: ({ fieldConfigs, }: {
|
|
3
|
-
fieldConfigs?:
|
|
3
|
+
fieldConfigs?: BlockFieldConfig[] | undefined;
|
|
4
4
|
}) => BlockFunction[];
|
|
@@ -2,14 +2,3 @@ export declare enum BlockFunctionType {
|
|
|
2
2
|
MAP = "map",
|
|
3
3
|
TYPECAST = "typecast"
|
|
4
4
|
}
|
|
5
|
-
export type BlockFunctionArgs = {
|
|
6
|
-
[BlockFunctionType.MAP]: {
|
|
7
|
-
expression: string;
|
|
8
|
-
targetFieldKey: string;
|
|
9
|
-
type: string;
|
|
10
|
-
};
|
|
11
|
-
[BlockFunctionType.TYPECAST]: {
|
|
12
|
-
targetFieldKey: string;
|
|
13
|
-
type: string;
|
|
14
|
-
};
|
|
15
|
-
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { HttpResponse } from '@stackone/transport';
|
|
2
|
-
import { BlockFunctionType } from './functions/functionsDirectoryTypes';
|
|
3
2
|
export type Block = {
|
|
4
|
-
fieldConfigs?:
|
|
3
|
+
fieldConfigs?: BlockFieldConfig[];
|
|
5
4
|
providerResponse?: HttpResponse;
|
|
6
5
|
result?: BlockIndexedRecord[] | BlockIndexedRecord;
|
|
7
6
|
context: BlockContext;
|
|
@@ -14,13 +13,15 @@ export type BlockContext = {
|
|
|
14
13
|
resource: string;
|
|
15
14
|
operationType: string;
|
|
16
15
|
};
|
|
17
|
-
export type BlockFieldConfigs = {
|
|
18
|
-
[K in BlockFunctionType]?: unknown;
|
|
19
|
-
};
|
|
20
16
|
export type BlockIndexedRecord = {
|
|
21
17
|
id: string;
|
|
22
18
|
[key: string]: unknown;
|
|
23
19
|
};
|
|
20
|
+
export type BlockFieldConfig = {
|
|
21
|
+
expression?: string;
|
|
22
|
+
targetFieldKey: string;
|
|
23
|
+
type: string;
|
|
24
|
+
};
|
|
24
25
|
export type BlockFunction = ({ block, }: {
|
|
25
26
|
block: Readonly<Block>;
|
|
26
27
|
}) => Promise<Block>;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { IConnector, HttpOperations, HttpParameter, HttpParameterLocation, HttpParameterType, } from './types';
|
|
2
2
|
export { BaseConnector } from './baseConnector';
|
|
3
3
|
export { REQUEST_BODY_PARAM } from './constants';
|
|
4
|
-
export { Block, BlockFunction, BlockIndexedRecord, BlockContext,
|
|
4
|
+
export { Block, BlockFunction, BlockIndexedRecord, BlockContext, BlockFieldConfig, } from './blocks/types';
|
|
5
5
|
export { BlockFunctionType } from './blocks/functions/functionsDirectoryTypes';
|
|
6
6
|
export { blockPipe } from './blocks/blockPipe';
|
|
7
7
|
export { getBlockPipeFunctionsFromConfigs } from './blocks/blockFunctionsConfigs';
|