@next-core/easyops-runtime 0.14.4 → 0.15.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/cjs/flowApi/FlowApi.js +82 -19
- package/dist/cjs/flowApi/FlowApi.js.map +1 -1
- package/dist/cjs/flowApi/FlowApiProvider.js +7 -4
- package/dist/cjs/flowApi/FlowApiProvider.js.map +1 -1
- package/dist/esm/flowApi/FlowApi.js +76 -14
- package/dist/esm/flowApi/FlowApi.js.map +1 -1
- package/dist/esm/flowApi/FlowApiProvider.js +7 -4
- package/dist/esm/flowApi/FlowApiProvider.js.map +1 -1
- package/dist/types/flowApi/FlowApi.d.ts +2 -2
- package/dist/types/flowApi/FlowApiProvider.d.ts +1 -1
- package/package.json +5 -5
|
@@ -8,6 +8,7 @@ exports.getArgsOfFlowApi = getArgsOfFlowApi;
|
|
|
8
8
|
exports.isFlowApiProvider = isFlowApiProvider;
|
|
9
9
|
var _jsYaml = _interopRequireDefault(require("js-yaml"));
|
|
10
10
|
var _apiGatewaySdk = require("@next-api-sdk/api-gateway-sdk");
|
|
11
|
+
var _general = require("@next-core/utils/general");
|
|
11
12
|
var _CollectContracts = require("./CollectContracts.js");
|
|
12
13
|
const remoteContractCache = new Map();
|
|
13
14
|
|
|
@@ -27,29 +28,32 @@ async function getArgsOfFlowApi(provider, originalArgs, method, stream) {
|
|
|
27
28
|
const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);
|
|
28
29
|
return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);
|
|
29
30
|
}
|
|
30
|
-
function getApiArgsFromApiProfile({
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
isFileType,
|
|
40
|
-
request
|
|
41
|
-
}, originalArgs, method, stream) {
|
|
31
|
+
function getApiArgsFromApiProfile(api, originalArgs, method, stream) {
|
|
32
|
+
const {
|
|
33
|
+
uri,
|
|
34
|
+
method: apiMethod,
|
|
35
|
+
ext_fields,
|
|
36
|
+
responseWrapper,
|
|
37
|
+
isFileType,
|
|
38
|
+
request
|
|
39
|
+
} = api;
|
|
42
40
|
// `saveAs` requires the first argument to be the filename.
|
|
43
41
|
const isDownload = method === "saveAs";
|
|
44
|
-
let
|
|
42
|
+
let filename;
|
|
43
|
+
let fixedArgs = originalArgs;
|
|
45
44
|
if (isDownload) {
|
|
46
|
-
|
|
45
|
+
if (Array.isArray(originalArgs)) {
|
|
46
|
+
fixedArgs = originalArgs.slice();
|
|
47
|
+
filename = fixedArgs.shift();
|
|
48
|
+
} else {
|
|
49
|
+
filename = originalArgs.filename;
|
|
50
|
+
}
|
|
47
51
|
}
|
|
48
52
|
const {
|
|
49
53
|
url,
|
|
50
54
|
args
|
|
51
|
-
} = getTransformedUriAndRestArgs(
|
|
52
|
-
return [...(isDownload ? [
|
|
55
|
+
} = getTransformedUriAndRestArgs(api, fixedArgs);
|
|
56
|
+
return [...(isDownload ? [filename] : []), {
|
|
53
57
|
url,
|
|
54
58
|
originalUri: uri,
|
|
55
59
|
method: apiMethod,
|
|
@@ -60,10 +64,69 @@ function getApiArgsFromApiProfile({
|
|
|
60
64
|
stream
|
|
61
65
|
}, ...args];
|
|
62
66
|
}
|
|
63
|
-
function getTransformedUriAndRestArgs(
|
|
67
|
+
function getTransformedUriAndRestArgs(api, originalArgs) {
|
|
68
|
+
const {
|
|
69
|
+
uri,
|
|
70
|
+
name,
|
|
71
|
+
namespace,
|
|
72
|
+
serviceName,
|
|
73
|
+
version,
|
|
74
|
+
method = "GET",
|
|
75
|
+
request,
|
|
76
|
+
ext_fields
|
|
77
|
+
} = api;
|
|
64
78
|
const prefix = version ? serviceName === "logic.api.gateway" || serviceName !== null && serviceName !== void 0 && serviceName.startsWith("logic.api.gateway.") ? "" : serviceName ? `api/gateway/${serviceName}` : `api/gateway/${namespace}.${name}@${version}` : `api/gateway/api_service.${namespace}.${name}`;
|
|
65
|
-
|
|
66
|
-
|
|
79
|
+
let transformedUri;
|
|
80
|
+
let restArgs = [];
|
|
81
|
+
if (Array.isArray(originalArgs)) {
|
|
82
|
+
restArgs = originalArgs.slice();
|
|
83
|
+
transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift());
|
|
84
|
+
} else {
|
|
85
|
+
const restParams = {
|
|
86
|
+
...originalArgs.params
|
|
87
|
+
};
|
|
88
|
+
transformedUri = uri.replace(/:([^/]+)/g, (_, key) => {
|
|
89
|
+
if ((0, _general.hasOwnProperty)(restParams, key)) {
|
|
90
|
+
const value = restParams[key];
|
|
91
|
+
delete restParams[key];
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
94
|
+
throw new Error(`Missing required param: "${key}"`);
|
|
95
|
+
});
|
|
96
|
+
const isSimpleRequest = ["get", "delete", "head"].includes(method.toLowerCase());
|
|
97
|
+
if (isSimpleRequest) {
|
|
98
|
+
var _uri$match, _request$fields;
|
|
99
|
+
const noParams = (request === null || request === void 0 ? void 0 : request.type) === "object" && (((_uri$match = uri.match(/:([^/]+)/g)) === null || _uri$match === void 0 ? void 0 : _uri$match.length) ?? 0) === (((_request$fields = request.fields) === null || _request$fields === void 0 ? void 0 : _request$fields.length) ?? 0);
|
|
100
|
+
if (!noParams) {
|
|
101
|
+
restArgs.push(restParams);
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
const bodyField = ext_fields === null || ext_fields === void 0 ? void 0 : ext_fields.find(item => item.source === "body");
|
|
105
|
+
if (bodyField) {
|
|
106
|
+
let body;
|
|
107
|
+
if (bodyField.name && (0, _general.hasOwnProperty)(restParams, bodyField.name)) {
|
|
108
|
+
body = restParams[bodyField.name];
|
|
109
|
+
delete restParams[bodyField.name];
|
|
110
|
+
}
|
|
111
|
+
restArgs.push(body);
|
|
112
|
+
}
|
|
113
|
+
const queryField = ext_fields === null || ext_fields === void 0 ? void 0 : ext_fields.find(item => item.source === "query");
|
|
114
|
+
if (queryField) {
|
|
115
|
+
let query;
|
|
116
|
+
if (queryField.name && (0, _general.hasOwnProperty)(restParams, queryField.name)) {
|
|
117
|
+
query = restParams[queryField.name];
|
|
118
|
+
delete restParams[queryField.name];
|
|
119
|
+
}
|
|
120
|
+
restArgs.push(query);
|
|
121
|
+
}
|
|
122
|
+
if (!bodyField && !queryField) {
|
|
123
|
+
restArgs.push(restParams);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (originalArgs.options) {
|
|
127
|
+
restArgs.push(originalArgs.options);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
67
130
|
return {
|
|
68
131
|
url: prefix ? prefix + transformedUri : transformedUri.replace(/^\//, ""),
|
|
69
132
|
args: restArgs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowApi.js","names":["_jsYaml","_interopRequireDefault","require","_apiGatewaySdk","_CollectContracts","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","stream","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","uri","apiMethod","ext_fields","name","namespace","serviceName","responseWrapper","version","isFileType","request","isDownload","fileName","shift","url","args","getTransformedUriAndRestArgs","originalUri","prefix","startsWith","restArgs","slice","transformedUri","replace","api","_contract$response","contract","yaml","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","toLowerCase","type","namespaceName","nameWithVersion","split","getContract","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","_contractData$namespa","contractData","ContractApi_searchSingleContract","contractName","constructor","message","captureStackTrace"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport type {\n ContractResponse,\n ExtField,\n ContractRequest,\n} from \"@next-core/types\";\nimport { getContract } from \"./CollectContracts.js\";\n\nexport type MinimalContractRequest = Pick<ContractRequest, \"type\"> & {\n fields?: MinimalContractField[];\n};\nexport type MinimalContractField =\n | {\n type: string;\n fields?: MinimalContractField[];\n }\n | {\n ref: string;\n };\nexport type MinimalContractResponse = Pick<\n ContractResponse,\n \"type\" | \"wrapper\"\n>;\n\nconst remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new FlowApiNotFoundError(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);\n}\n\nfunction getApiArgsFromApiProfile(\n {\n uri,\n method: apiMethod,\n ext_fields,\n name,\n namespace,\n serviceName,\n responseWrapper,\n version,\n isFileType,\n request,\n }: CustomApiProfile,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n): unknown[] {\n // `saveAs` requires the first argument to be the filename.\n const isDownload = method === \"saveAs\";\n let fileName: string | undefined;\n if (isDownload) {\n fileName = originalArgs.shift() as string;\n }\n\n const { url, args } = getTransformedUriAndRestArgs(\n uri,\n originalArgs,\n name,\n namespace,\n serviceName,\n version\n );\n\n return [\n ...(isDownload ? [fileName] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n stream,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n uri: string,\n originalArgs: unknown[],\n name: string,\n namespace: string,\n serviceName: string | undefined,\n version?: string\n): { url: string; args: unknown[] } {\n const prefix = version\n ? serviceName === \"logic.api.gateway\" ||\n serviceName?.startsWith(\"logic.api.gateway.\")\n ? \"\"\n : serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n const restArgs = originalArgs.slice();\n const transformedUri = uri.replace(\n /:([^/]+)/g,\n () => restArgs.shift() as string\n );\n return {\n url: prefix ? prefix + transformedUri : transformedUri.replace(/^\\//, \"\"),\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespace}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n return contractData\n ? {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n }\n : null;\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: MinimalContractRequest;\n response?: MinimalContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n}\n\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FlowApi.js","names":["_jsYaml","_interopRequireDefault","require","_apiGatewaySdk","_general","_CollectContracts","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","stream","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","api","uri","apiMethod","ext_fields","responseWrapper","isFileType","request","isDownload","filename","fixedArgs","Array","isArray","slice","shift","url","args","getTransformedUriAndRestArgs","originalUri","name","namespace","serviceName","version","prefix","startsWith","transformedUri","restArgs","replace","restParams","params","_","key","hasOwnProperty","value","isSimpleRequest","toLowerCase","_uri$match","_request$fields","noParams","type","match","length","fields","push","bodyField","find","item","source","body","queryField","query","options","_contract$response","contract","yaml","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","namespaceName","nameWithVersion","split","getContract","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","_contractData$namespa","contractData","ContractApi_searchSingleContract","contractName","constructor","message","captureStackTrace"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport type {\n ContractResponse,\n ExtField,\n ContractRequest,\n UseProviderContractConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { getContract } from \"./CollectContracts.js\";\n\nexport type MinimalContractRequest = Pick<ContractRequest, \"type\"> & {\n fields?: MinimalContractField[];\n};\nexport type MinimalContractField =\n | {\n type: string;\n fields?: MinimalContractField[];\n }\n | {\n ref: string;\n };\nexport type MinimalContractResponse = Pick<\n ContractResponse,\n \"type\" | \"wrapper\"\n>;\n\nconst remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new FlowApiNotFoundError(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);\n}\n\nfunction getApiArgsFromApiProfile(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): unknown[] {\n const {\n uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n isFileType,\n request,\n } = api;\n // `saveAs` requires the first argument to be the filename.\n const isDownload = method === \"saveAs\";\n let filename: string | undefined;\n let fixedArgs = originalArgs;\n if (isDownload) {\n if (Array.isArray(originalArgs)) {\n fixedArgs = originalArgs.slice();\n filename = fixedArgs.shift() as string;\n } else {\n filename = originalArgs.filename;\n }\n }\n\n const { url, args } = getTransformedUriAndRestArgs(api, fixedArgs);\n\n return [\n ...(isDownload ? [filename] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n stream,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf\n): { url: string; args: unknown[] } {\n const {\n uri,\n name,\n namespace,\n serviceName,\n version,\n method = \"GET\",\n request,\n ext_fields,\n } = api;\n\n const prefix = version\n ? serviceName === \"logic.api.gateway\" ||\n serviceName?.startsWith(\"logic.api.gateway.\")\n ? \"\"\n : serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n\n let transformedUri: string;\n let restArgs: unknown[] = [];\n if (Array.isArray(originalArgs)) {\n restArgs = originalArgs.slice();\n transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift() as string);\n } else {\n const restParams = { ...originalArgs.params };\n transformedUri = uri.replace(/:([^/]+)/g, (_, key) => {\n if (hasOwnProperty(restParams, key)) {\n const value = restParams[key] as string;\n delete restParams[key];\n return value;\n }\n throw new Error(`Missing required param: \"${key}\"`);\n });\n\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n if (isSimpleRequest) {\n const noParams =\n request?.type === \"object\" &&\n (uri.match(/:([^/]+)/g)?.length ?? 0) === (request.fields?.length ?? 0);\n if (!noParams) {\n restArgs.push(restParams);\n }\n } else {\n const bodyField = ext_fields?.find((item) => item.source === \"body\");\n if (bodyField) {\n let body: Record<string, unknown> | undefined;\n if (bodyField.name && hasOwnProperty(restParams, bodyField.name)) {\n body = restParams[bodyField.name] as Record<string, unknown>;\n delete restParams[bodyField.name];\n }\n restArgs.push(body);\n }\n\n const queryField = ext_fields?.find((item) => item.source === \"query\");\n if (queryField) {\n let query: Record<string, unknown> | undefined;\n if (queryField.name && hasOwnProperty(restParams, queryField.name)) {\n query = restParams[queryField.name] as Record<string, unknown>;\n delete restParams[queryField.name];\n }\n\n restArgs.push(query);\n }\n\n if (!bodyField && !queryField) {\n restArgs.push(restParams);\n }\n }\n\n if (originalArgs.options) {\n restArgs.push(originalArgs.options);\n }\n }\n return {\n url: prefix ? prefix + transformedUri : transformedUri.replace(/^\\//, \"\"),\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespace}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n return contractData\n ? {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n }\n : null;\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: MinimalContractRequest;\n response?: MinimalContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n}\n\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,13 +14,16 @@ var _http = require("@next-core/http");
|
|
|
14
14
|
var _lodash = require("lodash");
|
|
15
15
|
const FLOW_API_PROVIDER = exports.FLOW_API_PROVIDER = "core.provider-flow-api";
|
|
16
16
|
function hasFields(ext_fields, type) {
|
|
17
|
-
return ext_fields.some(item => item.source === type);
|
|
17
|
+
return ext_fields === null || ext_fields === void 0 ? void 0 : ext_fields.some(item => item.source === type);
|
|
18
18
|
}
|
|
19
19
|
function processExtFields(ext_fields, ...args) {
|
|
20
20
|
const hasQueryParams = hasFields(ext_fields, "query");
|
|
21
|
-
const hasBodyParams = hasFields(ext_fields, "body");
|
|
22
21
|
if (hasQueryParams) {
|
|
22
|
+
const hasBodyParams = hasFields(ext_fields, "body");
|
|
23
23
|
if (hasBodyParams) {
|
|
24
|
+
// NOTE: The args order here is different from generated SDK,
|
|
25
|
+
// in SDK, it's [params, data, options]
|
|
26
|
+
// But we keep the current behavior for compatibility.
|
|
24
27
|
const [data, params, options] = args;
|
|
25
28
|
return {
|
|
26
29
|
data: data,
|
|
@@ -81,7 +84,7 @@ async function callFlowApi({
|
|
|
81
84
|
originalUri,
|
|
82
85
|
method = "GET",
|
|
83
86
|
responseWrapper = true,
|
|
84
|
-
ext_fields
|
|
87
|
+
ext_fields,
|
|
85
88
|
request,
|
|
86
89
|
isFileType,
|
|
87
90
|
stream
|
|
@@ -93,7 +96,7 @@ async function callFlowApi({
|
|
|
93
96
|
let response;
|
|
94
97
|
if (isSimpleRequest) {
|
|
95
98
|
var _originalUri$match, _request$fields;
|
|
96
|
-
const noParams = originalUri && (request === null || request === void 0 ? void 0 : request.type) === "object"
|
|
99
|
+
const noParams = originalUri && (request === null || request === void 0 ? void 0 : request.type) === "object" && (((_originalUri$match = originalUri.match(/:([^/]+)/g)) === null || _originalUri$match === void 0 ? void 0 : _originalUri$match.length) ?? 0) === (((_request$fields = request.fields) === null || _request$fields === void 0 ? void 0 : _request$fields.length) ?? 0);
|
|
97
100
|
let params;
|
|
98
101
|
let options;
|
|
99
102
|
if (noParams) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowApiProvider.js","names":["_general","require","_http","_lodash","FLOW_API_PROVIDER","exports","hasFields","ext_fields","type","some","item","source","processExtFields","args","hasQueryParams","hasBodyParams","data","params","options","hasFileType","request","processFields","fields","isEmpty","field","includes","transformFormData","FormData","formData","key","value","Object","entries","Array","isArray","forEach","v","append","isObject","Blob","Date","k","callFlowApi","url","originalUri","method","responseWrapper","isFileType","stream","isSimpleRequest","toLowerCase","defaultOptions","responseType","response","_originalUri$match","_request$fields","noParams","match","length","_options","createSSEStream","http","getUrlWithParams","headers","fromEntries","Headers","simpleRequest","isUploadType","result","_result$options","body","getBodyAndHeaders","requestWithBody","registerFlowApiProvider","customElements","define","createProviderClass"],"sources":["../../../src/flowApi/FlowApiProvider.ts"],"sourcesContent":["import { createProviderClass } from \"@next-core/utils/general\";\nimport { ExtField, ContractFieldItem } from \"@next-core/types\";\nimport { http, HttpOptions, HttpParams } from \"@next-core/http\";\nimport { isEmpty, isObject } from \"lodash\";\nimport { createSSEStream } from \"@next-core/utils/general\";\nimport type {\n MinimalContractField,\n MinimalContractRequest,\n} from \"./FlowApi.js\";\n\nexport const FLOW_API_PROVIDER = \"core.provider-flow-api\";\n\nexport interface CustomApiParams {\n url: string;\n originalUri?: string;\n method?: string;\n responseWrapper?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n isFileType?: boolean;\n stream?: boolean;\n}\n\nfunction hasFields(ext_fields: ExtField[], type: \"query\" | \"body\"): boolean {\n return ext_fields.some((item) => item.source === type);\n}\n\nexport function processExtFields(\n ext_fields: ExtField[],\n ...args: unknown[]\n): { data: unknown; options: HttpOptions } {\n const hasQueryParams = hasFields(ext_fields, \"query\");\n const hasBodyParams = hasFields(ext_fields, \"body\");\n\n if (hasQueryParams) {\n if (hasBodyParams) {\n const [data, params, options] = args;\n return {\n data: data,\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n const [params, options] = args;\n return {\n data: {},\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n // only hasBodyParams or default\n const [data, options] = args;\n return {\n data,\n options: options as HttpOptions,\n };\n}\n\nexport function hasFileType(\n request: MinimalContractRequest | undefined\n): boolean {\n if (request?.type !== \"object\") {\n return false;\n }\n\n const processFields = (\n fields: MinimalContractField[] | undefined\n ): boolean => {\n return (\n !isEmpty(fields) &&\n fields!.some(\n (field) =>\n [\"file\", \"file[]\"].includes((field as ContractFieldItem).type) ||\n processFields((field as ContractFieldItem).fields)\n )\n );\n };\n\n return processFields(request.fields);\n}\n\nexport function transformFormData(\n data: Record<string, unknown> | FormData\n): FormData {\n if (data instanceof FormData) {\n return data;\n }\n\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n formData.append(key, v);\n });\n } else if (\n isObject(value) &&\n !(value instanceof Blob) &&\n !(value instanceof Date)\n ) {\n Object.entries(value).forEach(([k, v]) => {\n formData.append(`${key}[${k}]`, v);\n });\n } else {\n formData.append(key, value as string);\n }\n }\n\n return formData;\n}\n\nexport async function callFlowApi(\n {\n url,\n originalUri,\n method = \"GET\",\n responseWrapper = true,\n ext_fields = [],\n request,\n isFileType,\n stream,\n }: CustomApiParams,\n ...args: unknown[]\n): Promise<unknown> {\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n const defaultOptions: HttpOptions = isFileType\n ? { responseType: \"blob\" }\n : {};\n let response: { data?: unknown };\n\n if (isSimpleRequest) {\n const noParams =\n originalUri && request?.type === \"object\"\n ? (originalUri.match(/:([^/]+)/g)?.length ?? 0) ===\n (request.fields?.length ?? 0)\n : false;\n let params: HttpParams | undefined;\n let options: HttpOptions | undefined;\n\n if (noParams) {\n [options] = args as [HttpOptions?];\n } else {\n [params, options] = args as [HttpParams?, HttpOptions?];\n }\n\n if (stream) {\n const stream = await createSSEStream(http.getUrlWithParams(url, params), {\n ...defaultOptions,\n ...options,\n method,\n headers: Object.fromEntries([\n ...new Headers(options?.headers ?? {}).entries(),\n ]),\n });\n return stream;\n }\n\n response = await http.simpleRequest(method, url, {\n params,\n ...defaultOptions,\n ...options,\n });\n } else {\n const isUploadType = hasFileType(request);\n const result = processExtFields(ext_fields, ...args);\n\n const data = isUploadType\n ? transformFormData(result.data as any)\n : result.data;\n\n if (stream) {\n const { body, headers } = http.getBodyAndHeaders(\n data,\n result.options?.headers\n );\n const stream = await createSSEStream(url, {\n ...defaultOptions,\n ...result.options,\n method,\n headers: Object.fromEntries([...new Headers(headers ?? {}).entries()]),\n body,\n });\n return stream;\n }\n\n response = await http.requestWithBody(method, url, data, {\n ...defaultOptions,\n ...result.options,\n });\n }\n\n return (isFileType ? false : responseWrapper) ? response.data : response;\n}\n\nexport function registerFlowApiProvider(): void {\n customElements.define(FLOW_API_PROVIDER, createProviderClass(callFlowApi));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FlowApiProvider.js","names":["_general","require","_http","_lodash","FLOW_API_PROVIDER","exports","hasFields","ext_fields","type","some","item","source","processExtFields","args","hasQueryParams","hasBodyParams","data","params","options","hasFileType","request","processFields","fields","isEmpty","field","includes","transformFormData","FormData","formData","key","value","Object","entries","Array","isArray","forEach","v","append","isObject","Blob","Date","k","callFlowApi","url","originalUri","method","responseWrapper","isFileType","stream","isSimpleRequest","toLowerCase","defaultOptions","responseType","response","_originalUri$match","_request$fields","noParams","match","length","_options","createSSEStream","http","getUrlWithParams","headers","fromEntries","Headers","simpleRequest","isUploadType","result","_result$options","body","getBodyAndHeaders","requestWithBody","registerFlowApiProvider","customElements","define","createProviderClass"],"sources":["../../../src/flowApi/FlowApiProvider.ts"],"sourcesContent":["import { createProviderClass } from \"@next-core/utils/general\";\nimport { ExtField, ContractFieldItem } from \"@next-core/types\";\nimport { http, HttpOptions, HttpParams } from \"@next-core/http\";\nimport { isEmpty, isObject } from \"lodash\";\nimport { createSSEStream } from \"@next-core/utils/general\";\nimport type {\n MinimalContractField,\n MinimalContractRequest,\n} from \"./FlowApi.js\";\n\nexport const FLOW_API_PROVIDER = \"core.provider-flow-api\";\n\nexport interface CustomApiParams {\n url: string;\n originalUri?: string;\n method?: string;\n responseWrapper?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n isFileType?: boolean;\n stream?: boolean;\n}\n\nfunction hasFields(ext_fields: ExtField[] | undefined, type: \"query\" | \"body\") {\n return ext_fields?.some((item) => item.source === type);\n}\n\nexport function processExtFields(\n ext_fields: ExtField[] | undefined,\n ...args: unknown[]\n): { data: unknown; options: HttpOptions } {\n const hasQueryParams = hasFields(ext_fields, \"query\");\n\n if (hasQueryParams) {\n const hasBodyParams = hasFields(ext_fields, \"body\");\n if (hasBodyParams) {\n // NOTE: The args order here is different from generated SDK,\n // in SDK, it's [params, data, options]\n // But we keep the current behavior for compatibility.\n const [data, params, options] = args;\n return {\n data: data,\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n const [params, options] = args;\n return {\n data: {},\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n // only hasBodyParams or default\n const [data, options] = args;\n return {\n data,\n options: options as HttpOptions,\n };\n}\n\nexport function hasFileType(\n request: MinimalContractRequest | undefined\n): boolean {\n if (request?.type !== \"object\") {\n return false;\n }\n\n const processFields = (\n fields: MinimalContractField[] | undefined\n ): boolean => {\n return (\n !isEmpty(fields) &&\n fields!.some(\n (field) =>\n [\"file\", \"file[]\"].includes((field as ContractFieldItem).type) ||\n processFields((field as ContractFieldItem).fields)\n )\n );\n };\n\n return processFields(request.fields);\n}\n\nexport function transformFormData(\n data: Record<string, unknown> | FormData\n): FormData {\n if (data instanceof FormData) {\n return data;\n }\n\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n formData.append(key, v);\n });\n } else if (\n isObject(value) &&\n !(value instanceof Blob) &&\n !(value instanceof Date)\n ) {\n Object.entries(value).forEach(([k, v]) => {\n formData.append(`${key}[${k}]`, v);\n });\n } else {\n formData.append(key, value as string);\n }\n }\n\n return formData;\n}\n\nexport async function callFlowApi(\n {\n url,\n originalUri,\n method = \"GET\",\n responseWrapper = true,\n ext_fields,\n request,\n isFileType,\n stream,\n }: CustomApiParams,\n ...args: unknown[]\n): Promise<unknown> {\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n const defaultOptions: HttpOptions = isFileType\n ? { responseType: \"blob\" }\n : {};\n let response: { data?: unknown };\n\n if (isSimpleRequest) {\n const noParams =\n originalUri &&\n request?.type === \"object\" &&\n (originalUri.match(/:([^/]+)/g)?.length ?? 0) ===\n (request.fields?.length ?? 0);\n let params: HttpParams | undefined;\n let options: HttpOptions | undefined;\n\n if (noParams) {\n [options] = args as [HttpOptions?];\n } else {\n [params, options] = args as [HttpParams?, HttpOptions?];\n }\n\n if (stream) {\n const stream = await createSSEStream(http.getUrlWithParams(url, params), {\n ...defaultOptions,\n ...options,\n method,\n headers: Object.fromEntries([\n ...new Headers(options?.headers ?? {}).entries(),\n ]),\n });\n return stream;\n }\n\n response = await http.simpleRequest(method, url, {\n params,\n ...defaultOptions,\n ...options,\n });\n } else {\n const isUploadType = hasFileType(request);\n const result = processExtFields(ext_fields, ...args);\n\n const data = isUploadType\n ? transformFormData(result.data as any)\n : result.data;\n\n if (stream) {\n const { body, headers } = http.getBodyAndHeaders(\n data,\n result.options?.headers\n );\n const stream = await createSSEStream(url, {\n ...defaultOptions,\n ...result.options,\n method,\n headers: Object.fromEntries([...new Headers(headers ?? {}).entries()]),\n body,\n });\n return stream;\n }\n\n response = await http.requestWithBody(method, url, data, {\n ...defaultOptions,\n ...result.options,\n });\n }\n\n return (isFileType ? false : responseWrapper) ? response.data : response;\n}\n\nexport function registerFlowApiProvider(): void {\n customElements.define(FLOW_API_PROVIDER, createProviderClass(callFlowApi));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import yaml from "js-yaml";
|
|
2
2
|
import { ContractApi_searchSingleContract } from "@next-api-sdk/api-gateway-sdk";
|
|
3
|
+
import { hasOwnProperty } from "@next-core/utils/general";
|
|
3
4
|
import { getContract } from "./CollectContracts.js";
|
|
4
5
|
const remoteContractCache = new Map();
|
|
5
6
|
|
|
@@ -19,30 +20,32 @@ export async function getArgsOfFlowApi(provider, originalArgs, method, stream) {
|
|
|
19
20
|
const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);
|
|
20
21
|
return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);
|
|
21
22
|
}
|
|
22
|
-
function getApiArgsFromApiProfile(
|
|
23
|
-
|
|
23
|
+
function getApiArgsFromApiProfile(api, originalArgs, method, stream) {
|
|
24
|
+
const {
|
|
24
25
|
uri,
|
|
25
26
|
method: apiMethod,
|
|
26
27
|
ext_fields,
|
|
27
|
-
name,
|
|
28
|
-
namespace,
|
|
29
|
-
serviceName,
|
|
30
28
|
responseWrapper,
|
|
31
|
-
version,
|
|
32
29
|
isFileType,
|
|
33
30
|
request
|
|
34
|
-
} =
|
|
31
|
+
} = api;
|
|
35
32
|
// `saveAs` requires the first argument to be the filename.
|
|
36
33
|
const isDownload = method === "saveAs";
|
|
37
|
-
let
|
|
34
|
+
let filename;
|
|
35
|
+
let fixedArgs = originalArgs;
|
|
38
36
|
if (isDownload) {
|
|
39
|
-
|
|
37
|
+
if (Array.isArray(originalArgs)) {
|
|
38
|
+
fixedArgs = originalArgs.slice();
|
|
39
|
+
filename = fixedArgs.shift();
|
|
40
|
+
} else {
|
|
41
|
+
filename = originalArgs.filename;
|
|
42
|
+
}
|
|
40
43
|
}
|
|
41
44
|
const {
|
|
42
45
|
url,
|
|
43
46
|
args
|
|
44
|
-
} = getTransformedUriAndRestArgs(
|
|
45
|
-
return [...(isDownload ? [
|
|
47
|
+
} = getTransformedUriAndRestArgs(api, fixedArgs);
|
|
48
|
+
return [...(isDownload ? [filename] : []), {
|
|
46
49
|
url,
|
|
47
50
|
originalUri: uri,
|
|
48
51
|
method: apiMethod,
|
|
@@ -53,10 +56,69 @@ function getApiArgsFromApiProfile(_ref, originalArgs, method, stream) {
|
|
|
53
56
|
stream
|
|
54
57
|
}, ...args];
|
|
55
58
|
}
|
|
56
|
-
function getTransformedUriAndRestArgs(
|
|
59
|
+
function getTransformedUriAndRestArgs(api, originalArgs) {
|
|
60
|
+
const {
|
|
61
|
+
uri,
|
|
62
|
+
name,
|
|
63
|
+
namespace,
|
|
64
|
+
serviceName,
|
|
65
|
+
version,
|
|
66
|
+
method = "GET",
|
|
67
|
+
request,
|
|
68
|
+
ext_fields
|
|
69
|
+
} = api;
|
|
57
70
|
const prefix = version ? serviceName === "logic.api.gateway" || serviceName !== null && serviceName !== void 0 && serviceName.startsWith("logic.api.gateway.") ? "" : serviceName ? `api/gateway/${serviceName}` : `api/gateway/${namespace}.${name}@${version}` : `api/gateway/api_service.${namespace}.${name}`;
|
|
58
|
-
|
|
59
|
-
|
|
71
|
+
let transformedUri;
|
|
72
|
+
let restArgs = [];
|
|
73
|
+
if (Array.isArray(originalArgs)) {
|
|
74
|
+
restArgs = originalArgs.slice();
|
|
75
|
+
transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift());
|
|
76
|
+
} else {
|
|
77
|
+
const restParams = {
|
|
78
|
+
...originalArgs.params
|
|
79
|
+
};
|
|
80
|
+
transformedUri = uri.replace(/:([^/]+)/g, (_, key) => {
|
|
81
|
+
if (hasOwnProperty(restParams, key)) {
|
|
82
|
+
const value = restParams[key];
|
|
83
|
+
delete restParams[key];
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
throw new Error(`Missing required param: "${key}"`);
|
|
87
|
+
});
|
|
88
|
+
const isSimpleRequest = ["get", "delete", "head"].includes(method.toLowerCase());
|
|
89
|
+
if (isSimpleRequest) {
|
|
90
|
+
var _uri$match$length, _uri$match, _request$fields$lengt, _request$fields;
|
|
91
|
+
const noParams = (request === null || request === void 0 ? void 0 : request.type) === "object" && ((_uri$match$length = (_uri$match = uri.match(/:([^/]+)/g)) === null || _uri$match === void 0 ? void 0 : _uri$match.length) !== null && _uri$match$length !== void 0 ? _uri$match$length : 0) === ((_request$fields$lengt = (_request$fields = request.fields) === null || _request$fields === void 0 ? void 0 : _request$fields.length) !== null && _request$fields$lengt !== void 0 ? _request$fields$lengt : 0);
|
|
92
|
+
if (!noParams) {
|
|
93
|
+
restArgs.push(restParams);
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
const bodyField = ext_fields === null || ext_fields === void 0 ? void 0 : ext_fields.find(item => item.source === "body");
|
|
97
|
+
if (bodyField) {
|
|
98
|
+
let body;
|
|
99
|
+
if (bodyField.name && hasOwnProperty(restParams, bodyField.name)) {
|
|
100
|
+
body = restParams[bodyField.name];
|
|
101
|
+
delete restParams[bodyField.name];
|
|
102
|
+
}
|
|
103
|
+
restArgs.push(body);
|
|
104
|
+
}
|
|
105
|
+
const queryField = ext_fields === null || ext_fields === void 0 ? void 0 : ext_fields.find(item => item.source === "query");
|
|
106
|
+
if (queryField) {
|
|
107
|
+
let query;
|
|
108
|
+
if (queryField.name && hasOwnProperty(restParams, queryField.name)) {
|
|
109
|
+
query = restParams[queryField.name];
|
|
110
|
+
delete restParams[queryField.name];
|
|
111
|
+
}
|
|
112
|
+
restArgs.push(query);
|
|
113
|
+
}
|
|
114
|
+
if (!bodyField && !queryField) {
|
|
115
|
+
restArgs.push(restParams);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (originalArgs.options) {
|
|
119
|
+
restArgs.push(originalArgs.options);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
60
122
|
return {
|
|
61
123
|
url: prefix ? prefix + transformedUri : transformedUri.replace(/^\//, ""),
|
|
62
124
|
args: restArgs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowApi.js","names":["yaml","ContractApi_searchSingleContract","getContract","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","stream","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","_ref","uri","apiMethod","ext_fields","name","namespace","serviceName","responseWrapper","version","isFileType","request","isDownload","fileName","shift","url","args","getTransformedUriAndRestArgs","originalUri","prefix","startsWith","restArgs","slice","transformedUri","replace","api","_contract$endpoint","_contract$response","contract","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","toLowerCase","type","namespaceName","nameWithVersion","split","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","_contractData$namespa","contractData","contractName","constructor","message","captureStackTrace"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport type {\n ContractResponse,\n ExtField,\n ContractRequest,\n} from \"@next-core/types\";\nimport { getContract } from \"./CollectContracts.js\";\n\nexport type MinimalContractRequest = Pick<ContractRequest, \"type\"> & {\n fields?: MinimalContractField[];\n};\nexport type MinimalContractField =\n | {\n type: string;\n fields?: MinimalContractField[];\n }\n | {\n ref: string;\n };\nexport type MinimalContractResponse = Pick<\n ContractResponse,\n \"type\" | \"wrapper\"\n>;\n\nconst remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new FlowApiNotFoundError(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);\n}\n\nfunction getApiArgsFromApiProfile(\n {\n uri,\n method: apiMethod,\n ext_fields,\n name,\n namespace,\n serviceName,\n responseWrapper,\n version,\n isFileType,\n request,\n }: CustomApiProfile,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n): unknown[] {\n // `saveAs` requires the first argument to be the filename.\n const isDownload = method === \"saveAs\";\n let fileName: string | undefined;\n if (isDownload) {\n fileName = originalArgs.shift() as string;\n }\n\n const { url, args } = getTransformedUriAndRestArgs(\n uri,\n originalArgs,\n name,\n namespace,\n serviceName,\n version\n );\n\n return [\n ...(isDownload ? [fileName] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n stream,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n uri: string,\n originalArgs: unknown[],\n name: string,\n namespace: string,\n serviceName: string | undefined,\n version?: string\n): { url: string; args: unknown[] } {\n const prefix = version\n ? serviceName === \"logic.api.gateway\" ||\n serviceName?.startsWith(\"logic.api.gateway.\")\n ? \"\"\n : serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n const restArgs = originalArgs.slice();\n const transformedUri = uri.replace(\n /:([^/]+)/g,\n () => restArgs.shift() as string\n );\n return {\n url: prefix ? prefix + transformedUri : transformedUri.replace(/^\\//, \"\"),\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespace}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n return contractData\n ? {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n }\n : null;\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: MinimalContractRequest;\n response?: MinimalContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n}\n\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FlowApi.js","names":["yaml","ContractApi_searchSingleContract","hasOwnProperty","getContract","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","stream","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","api","uri","apiMethod","ext_fields","responseWrapper","isFileType","request","isDownload","filename","fixedArgs","Array","isArray","slice","shift","url","args","getTransformedUriAndRestArgs","originalUri","name","namespace","serviceName","version","prefix","startsWith","transformedUri","restArgs","replace","restParams","params","_","key","value","isSimpleRequest","toLowerCase","_uri$match$length","_uri$match","_request$fields$lengt","_request$fields","noParams","type","match","length","fields","push","bodyField","find","item","source","body","queryField","query","options","_contract$endpoint","_contract$response","contract","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","namespaceName","nameWithVersion","split","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","_contractData$namespa","contractData","contractName","constructor","message","captureStackTrace"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport type {\n ContractResponse,\n ExtField,\n ContractRequest,\n UseProviderContractConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { getContract } from \"./CollectContracts.js\";\n\nexport type MinimalContractRequest = Pick<ContractRequest, \"type\"> & {\n fields?: MinimalContractField[];\n};\nexport type MinimalContractField =\n | {\n type: string;\n fields?: MinimalContractField[];\n }\n | {\n ref: string;\n };\nexport type MinimalContractResponse = Pick<\n ContractResponse,\n \"type\" | \"wrapper\"\n>;\n\nconst remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new FlowApiNotFoundError(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);\n}\n\nfunction getApiArgsFromApiProfile(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): unknown[] {\n const {\n uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n isFileType,\n request,\n } = api;\n // `saveAs` requires the first argument to be the filename.\n const isDownload = method === \"saveAs\";\n let filename: string | undefined;\n let fixedArgs = originalArgs;\n if (isDownload) {\n if (Array.isArray(originalArgs)) {\n fixedArgs = originalArgs.slice();\n filename = fixedArgs.shift() as string;\n } else {\n filename = originalArgs.filename;\n }\n }\n\n const { url, args } = getTransformedUriAndRestArgs(api, fixedArgs);\n\n return [\n ...(isDownload ? [filename] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n stream,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf\n): { url: string; args: unknown[] } {\n const {\n uri,\n name,\n namespace,\n serviceName,\n version,\n method = \"GET\",\n request,\n ext_fields,\n } = api;\n\n const prefix = version\n ? serviceName === \"logic.api.gateway\" ||\n serviceName?.startsWith(\"logic.api.gateway.\")\n ? \"\"\n : serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n\n let transformedUri: string;\n let restArgs: unknown[] = [];\n if (Array.isArray(originalArgs)) {\n restArgs = originalArgs.slice();\n transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift() as string);\n } else {\n const restParams = { ...originalArgs.params };\n transformedUri = uri.replace(/:([^/]+)/g, (_, key) => {\n if (hasOwnProperty(restParams, key)) {\n const value = restParams[key] as string;\n delete restParams[key];\n return value;\n }\n throw new Error(`Missing required param: \"${key}\"`);\n });\n\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n if (isSimpleRequest) {\n const noParams =\n request?.type === \"object\" &&\n (uri.match(/:([^/]+)/g)?.length ?? 0) === (request.fields?.length ?? 0);\n if (!noParams) {\n restArgs.push(restParams);\n }\n } else {\n const bodyField = ext_fields?.find((item) => item.source === \"body\");\n if (bodyField) {\n let body: Record<string, unknown> | undefined;\n if (bodyField.name && hasOwnProperty(restParams, bodyField.name)) {\n body = restParams[bodyField.name] as Record<string, unknown>;\n delete restParams[bodyField.name];\n }\n restArgs.push(body);\n }\n\n const queryField = ext_fields?.find((item) => item.source === \"query\");\n if (queryField) {\n let query: Record<string, unknown> | undefined;\n if (queryField.name && hasOwnProperty(restParams, queryField.name)) {\n query = restParams[queryField.name] as Record<string, unknown>;\n delete restParams[queryField.name];\n }\n\n restArgs.push(query);\n }\n\n if (!bodyField && !queryField) {\n restArgs.push(restParams);\n }\n }\n\n if (originalArgs.options) {\n restArgs.push(originalArgs.options);\n }\n }\n return {\n url: prefix ? prefix + transformedUri : transformedUri.replace(/^\\//, \"\"),\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespace}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n return contractData\n ? {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n }\n : null;\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: MinimalContractRequest;\n response?: MinimalContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n}\n\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,16 +4,19 @@ import { isEmpty, isObject } from "lodash";
|
|
|
4
4
|
import { createSSEStream } from "@next-core/utils/general";
|
|
5
5
|
export const FLOW_API_PROVIDER = "core.provider-flow-api";
|
|
6
6
|
function hasFields(ext_fields, type) {
|
|
7
|
-
return ext_fields.some(item => item.source === type);
|
|
7
|
+
return ext_fields === null || ext_fields === void 0 ? void 0 : ext_fields.some(item => item.source === type);
|
|
8
8
|
}
|
|
9
9
|
export function processExtFields(ext_fields) {
|
|
10
10
|
const hasQueryParams = hasFields(ext_fields, "query");
|
|
11
|
-
const hasBodyParams = hasFields(ext_fields, "body");
|
|
12
11
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
13
12
|
args[_key - 1] = arguments[_key];
|
|
14
13
|
}
|
|
15
14
|
if (hasQueryParams) {
|
|
15
|
+
const hasBodyParams = hasFields(ext_fields, "body");
|
|
16
16
|
if (hasBodyParams) {
|
|
17
|
+
// NOTE: The args order here is different from generated SDK,
|
|
18
|
+
// in SDK, it's [params, data, options]
|
|
19
|
+
// But we keep the current behavior for compatibility.
|
|
17
20
|
const [data, params, options] = args;
|
|
18
21
|
return {
|
|
19
22
|
data: data,
|
|
@@ -76,7 +79,7 @@ export async function callFlowApi(_ref2) {
|
|
|
76
79
|
originalUri,
|
|
77
80
|
method = "GET",
|
|
78
81
|
responseWrapper = true,
|
|
79
|
-
ext_fields
|
|
82
|
+
ext_fields,
|
|
80
83
|
request,
|
|
81
84
|
isFileType,
|
|
82
85
|
stream
|
|
@@ -91,7 +94,7 @@ export async function callFlowApi(_ref2) {
|
|
|
91
94
|
}
|
|
92
95
|
if (isSimpleRequest) {
|
|
93
96
|
var _originalUri$match$le, _originalUri$match, _request$fields$lengt, _request$fields;
|
|
94
|
-
const noParams = originalUri && (request === null || request === void 0 ? void 0 : request.type) === "object"
|
|
97
|
+
const noParams = originalUri && (request === null || request === void 0 ? void 0 : request.type) === "object" && ((_originalUri$match$le = (_originalUri$match = originalUri.match(/:([^/]+)/g)) === null || _originalUri$match === void 0 ? void 0 : _originalUri$match.length) !== null && _originalUri$match$le !== void 0 ? _originalUri$match$le : 0) === ((_request$fields$lengt = (_request$fields = request.fields) === null || _request$fields === void 0 ? void 0 : _request$fields.length) !== null && _request$fields$lengt !== void 0 ? _request$fields$lengt : 0);
|
|
95
98
|
let params;
|
|
96
99
|
let options;
|
|
97
100
|
if (noParams) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowApiProvider.js","names":["createProviderClass","http","isEmpty","isObject","createSSEStream","FLOW_API_PROVIDER","hasFields","ext_fields","type","some","item","source","processExtFields","hasQueryParams","hasBodyParams","_len","arguments","length","args","Array","_key","data","params","options","hasFileType","request","processFields","fields","field","includes","transformFormData","FormData","formData","key","value","Object","entries","isArray","forEach","v","append","Blob","Date","_ref","k","callFlowApi","_ref2","url","originalUri","method","responseWrapper","isFileType","stream","isSimpleRequest","toLowerCase","defaultOptions","responseType","response","_len2","_key2","_originalUri$match$le","_originalUri$match","_request$fields$lengt","_request$fields","noParams","match","_options$headers","_options","getUrlWithParams","headers","fromEntries","Headers","simpleRequest","isUploadType","result","_result$options","body","getBodyAndHeaders","requestWithBody","registerFlowApiProvider","customElements","define"],"sources":["../../../src/flowApi/FlowApiProvider.ts"],"sourcesContent":["import { createProviderClass } from \"@next-core/utils/general\";\nimport { ExtField, ContractFieldItem } from \"@next-core/types\";\nimport { http, HttpOptions, HttpParams } from \"@next-core/http\";\nimport { isEmpty, isObject } from \"lodash\";\nimport { createSSEStream } from \"@next-core/utils/general\";\nimport type {\n MinimalContractField,\n MinimalContractRequest,\n} from \"./FlowApi.js\";\n\nexport const FLOW_API_PROVIDER = \"core.provider-flow-api\";\n\nexport interface CustomApiParams {\n url: string;\n originalUri?: string;\n method?: string;\n responseWrapper?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n isFileType?: boolean;\n stream?: boolean;\n}\n\nfunction hasFields(ext_fields: ExtField[], type: \"query\" | \"body\"): boolean {\n return ext_fields.some((item) => item.source === type);\n}\n\nexport function processExtFields(\n ext_fields: ExtField[],\n ...args: unknown[]\n): { data: unknown; options: HttpOptions } {\n const hasQueryParams = hasFields(ext_fields, \"query\");\n const hasBodyParams = hasFields(ext_fields, \"body\");\n\n if (hasQueryParams) {\n if (hasBodyParams) {\n const [data, params, options] = args;\n return {\n data: data,\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n const [params, options] = args;\n return {\n data: {},\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n // only hasBodyParams or default\n const [data, options] = args;\n return {\n data,\n options: options as HttpOptions,\n };\n}\n\nexport function hasFileType(\n request: MinimalContractRequest | undefined\n): boolean {\n if (request?.type !== \"object\") {\n return false;\n }\n\n const processFields = (\n fields: MinimalContractField[] | undefined\n ): boolean => {\n return (\n !isEmpty(fields) &&\n fields!.some(\n (field) =>\n [\"file\", \"file[]\"].includes((field as ContractFieldItem).type) ||\n processFields((field as ContractFieldItem).fields)\n )\n );\n };\n\n return processFields(request.fields);\n}\n\nexport function transformFormData(\n data: Record<string, unknown> | FormData\n): FormData {\n if (data instanceof FormData) {\n return data;\n }\n\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n formData.append(key, v);\n });\n } else if (\n isObject(value) &&\n !(value instanceof Blob) &&\n !(value instanceof Date)\n ) {\n Object.entries(value).forEach(([k, v]) => {\n formData.append(`${key}[${k}]`, v);\n });\n } else {\n formData.append(key, value as string);\n }\n }\n\n return formData;\n}\n\nexport async function callFlowApi(\n {\n url,\n originalUri,\n method = \"GET\",\n responseWrapper = true,\n ext_fields = [],\n request,\n isFileType,\n stream,\n }: CustomApiParams,\n ...args: unknown[]\n): Promise<unknown> {\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n const defaultOptions: HttpOptions = isFileType\n ? { responseType: \"blob\" }\n : {};\n let response: { data?: unknown };\n\n if (isSimpleRequest) {\n const noParams =\n originalUri && request?.type === \"object\"\n ? (originalUri.match(/:([^/]+)/g)?.length ?? 0) ===\n (request.fields?.length ?? 0)\n : false;\n let params: HttpParams | undefined;\n let options: HttpOptions | undefined;\n\n if (noParams) {\n [options] = args as [HttpOptions?];\n } else {\n [params, options] = args as [HttpParams?, HttpOptions?];\n }\n\n if (stream) {\n const stream = await createSSEStream(http.getUrlWithParams(url, params), {\n ...defaultOptions,\n ...options,\n method,\n headers: Object.fromEntries([\n ...new Headers(options?.headers ?? {}).entries(),\n ]),\n });\n return stream;\n }\n\n response = await http.simpleRequest(method, url, {\n params,\n ...defaultOptions,\n ...options,\n });\n } else {\n const isUploadType = hasFileType(request);\n const result = processExtFields(ext_fields, ...args);\n\n const data = isUploadType\n ? transformFormData(result.data as any)\n : result.data;\n\n if (stream) {\n const { body, headers } = http.getBodyAndHeaders(\n data,\n result.options?.headers\n );\n const stream = await createSSEStream(url, {\n ...defaultOptions,\n ...result.options,\n method,\n headers: Object.fromEntries([...new Headers(headers ?? {}).entries()]),\n body,\n });\n return stream;\n }\n\n response = await http.requestWithBody(method, url, data, {\n ...defaultOptions,\n ...result.options,\n });\n }\n\n return (isFileType ? false : responseWrapper) ? response.data : response;\n}\n\nexport function registerFlowApiProvider(): void {\n customElements.define(FLOW_API_PROVIDER, createProviderClass(callFlowApi));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FlowApiProvider.js","names":["createProviderClass","http","isEmpty","isObject","createSSEStream","FLOW_API_PROVIDER","hasFields","ext_fields","type","some","item","source","processExtFields","hasQueryParams","_len","arguments","length","args","Array","_key","hasBodyParams","data","params","options","hasFileType","request","processFields","fields","field","includes","transformFormData","FormData","formData","key","value","Object","entries","isArray","forEach","v","append","Blob","Date","_ref","k","callFlowApi","_ref2","url","originalUri","method","responseWrapper","isFileType","stream","isSimpleRequest","toLowerCase","defaultOptions","responseType","response","_len2","_key2","_originalUri$match$le","_originalUri$match","_request$fields$lengt","_request$fields","noParams","match","_options$headers","_options","getUrlWithParams","headers","fromEntries","Headers","simpleRequest","isUploadType","result","_result$options","body","getBodyAndHeaders","requestWithBody","registerFlowApiProvider","customElements","define"],"sources":["../../../src/flowApi/FlowApiProvider.ts"],"sourcesContent":["import { createProviderClass } from \"@next-core/utils/general\";\nimport { ExtField, ContractFieldItem } from \"@next-core/types\";\nimport { http, HttpOptions, HttpParams } from \"@next-core/http\";\nimport { isEmpty, isObject } from \"lodash\";\nimport { createSSEStream } from \"@next-core/utils/general\";\nimport type {\n MinimalContractField,\n MinimalContractRequest,\n} from \"./FlowApi.js\";\n\nexport const FLOW_API_PROVIDER = \"core.provider-flow-api\";\n\nexport interface CustomApiParams {\n url: string;\n originalUri?: string;\n method?: string;\n responseWrapper?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n isFileType?: boolean;\n stream?: boolean;\n}\n\nfunction hasFields(ext_fields: ExtField[] | undefined, type: \"query\" | \"body\") {\n return ext_fields?.some((item) => item.source === type);\n}\n\nexport function processExtFields(\n ext_fields: ExtField[] | undefined,\n ...args: unknown[]\n): { data: unknown; options: HttpOptions } {\n const hasQueryParams = hasFields(ext_fields, \"query\");\n\n if (hasQueryParams) {\n const hasBodyParams = hasFields(ext_fields, \"body\");\n if (hasBodyParams) {\n // NOTE: The args order here is different from generated SDK,\n // in SDK, it's [params, data, options]\n // But we keep the current behavior for compatibility.\n const [data, params, options] = args;\n return {\n data: data,\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n const [params, options] = args;\n return {\n data: {},\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n // only hasBodyParams or default\n const [data, options] = args;\n return {\n data,\n options: options as HttpOptions,\n };\n}\n\nexport function hasFileType(\n request: MinimalContractRequest | undefined\n): boolean {\n if (request?.type !== \"object\") {\n return false;\n }\n\n const processFields = (\n fields: MinimalContractField[] | undefined\n ): boolean => {\n return (\n !isEmpty(fields) &&\n fields!.some(\n (field) =>\n [\"file\", \"file[]\"].includes((field as ContractFieldItem).type) ||\n processFields((field as ContractFieldItem).fields)\n )\n );\n };\n\n return processFields(request.fields);\n}\n\nexport function transformFormData(\n data: Record<string, unknown> | FormData\n): FormData {\n if (data instanceof FormData) {\n return data;\n }\n\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n formData.append(key, v);\n });\n } else if (\n isObject(value) &&\n !(value instanceof Blob) &&\n !(value instanceof Date)\n ) {\n Object.entries(value).forEach(([k, v]) => {\n formData.append(`${key}[${k}]`, v);\n });\n } else {\n formData.append(key, value as string);\n }\n }\n\n return formData;\n}\n\nexport async function callFlowApi(\n {\n url,\n originalUri,\n method = \"GET\",\n responseWrapper = true,\n ext_fields,\n request,\n isFileType,\n stream,\n }: CustomApiParams,\n ...args: unknown[]\n): Promise<unknown> {\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n const defaultOptions: HttpOptions = isFileType\n ? { responseType: \"blob\" }\n : {};\n let response: { data?: unknown };\n\n if (isSimpleRequest) {\n const noParams =\n originalUri &&\n request?.type === \"object\" &&\n (originalUri.match(/:([^/]+)/g)?.length ?? 0) ===\n (request.fields?.length ?? 0);\n let params: HttpParams | undefined;\n let options: HttpOptions | undefined;\n\n if (noParams) {\n [options] = args as [HttpOptions?];\n } else {\n [params, options] = args as [HttpParams?, HttpOptions?];\n }\n\n if (stream) {\n const stream = await createSSEStream(http.getUrlWithParams(url, params), {\n ...defaultOptions,\n ...options,\n method,\n headers: Object.fromEntries([\n ...new Headers(options?.headers ?? {}).entries(),\n ]),\n });\n return stream;\n }\n\n response = await http.simpleRequest(method, url, {\n params,\n ...defaultOptions,\n ...options,\n });\n } else {\n const isUploadType = hasFileType(request);\n const result = processExtFields(ext_fields, ...args);\n\n const data = isUploadType\n ? transformFormData(result.data as any)\n : result.data;\n\n if (stream) {\n const { body, headers } = http.getBodyAndHeaders(\n data,\n result.options?.headers\n );\n const stream = await createSSEStream(url, {\n ...defaultOptions,\n ...result.options,\n method,\n headers: Object.fromEntries([...new Headers(headers ?? {}).entries()]),\n body,\n });\n return stream;\n }\n\n response = await http.requestWithBody(method, url, data, {\n ...defaultOptions,\n ...result.options,\n });\n }\n\n return (isFileType ? false : responseWrapper) ? response.data : response;\n}\n\nexport function registerFlowApiProvider(): void {\n customElements.define(FLOW_API_PROVIDER, createProviderClass(callFlowApi));\n}\n"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,0BAA0B;AAE9D,SAASC,IAAI,QAAiC,iBAAiB;AAC/D,SAASC,OAAO,EAAEC,QAAQ,QAAQ,QAAQ;AAC1C,SAASC,eAAe,QAAQ,0BAA0B;AAM1D,OAAO,MAAMC,iBAAiB,GAAG,wBAAwB;AAazD,SAASC,SAASA,CAACC,UAAkC,EAAEC,IAAsB,EAAE;EAC7E,OAAOD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEE,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAACC,MAAM,KAAKH,IAAI,CAAC;AACzD;AAEA,OAAO,SAASI,gBAAgBA,CAC9BL,UAAkC,EAEO;EACzC,MAAMM,cAAc,GAAGP,SAAS,CAACC,UAAU,EAAE,OAAO,CAAC;EAAC,SAAAO,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAFnDC,IAAI,OAAAC,KAAA,CAAAJ,IAAA,OAAAA,IAAA,WAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;IAAJF,IAAI,CAAAE,IAAA,QAAAJ,SAAA,CAAAI,IAAA;EAAA;EAIP,IAAIN,cAAc,EAAE;IAClB,MAAMO,aAAa,GAAGd,SAAS,CAACC,UAAU,EAAE,MAAM,CAAC;IACnD,IAAIa,aAAa,EAAE;MACjB;MACA;MACA;MACA,MAAM,CAACC,IAAI,EAAEC,MAAM,EAAEC,OAAO,CAAC,GAAGN,IAAI;MACpC,OAAO;QACLI,IAAI,EAAEA,IAAI;QACVE,OAAO,EAAE;UACPD,MAAM,EAAEA,MAAoB;UAC5B,GAAIC;QACN;MACF,CAAC;IACH;IAEA,MAAM,CAACD,MAAM,EAAEC,OAAO,CAAC,GAAGN,IAAI;IAC9B,OAAO;MACLI,IAAI,EAAE,CAAC,CAAC;MACRE,OAAO,EAAE;QACPD,MAAM,EAAEA,MAAoB;QAC5B,GAAIC;MACN;IACF,CAAC;EACH;;EAEA;EACA,MAAM,CAACF,IAAI,EAAEE,OAAO,CAAC,GAAGN,IAAI;EAC5B,OAAO;IACLI,IAAI;IACJE,OAAO,EAAEA;EACX,CAAC;AACH;AAEA,OAAO,SAASC,WAAWA,CACzBC,OAA2C,EAClC;EACT,IAAI,CAAAA,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEjB,IAAI,MAAK,QAAQ,EAAE;IAC9B,OAAO,KAAK;EACd;EAEA,MAAMkB,aAAa,GACjBC,MAA0C,IAC9B;IACZ,OACE,CAACzB,OAAO,CAACyB,MAAM,CAAC,IAChBA,MAAM,CAAElB,IAAI,CACTmB,KAAK,IACJ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAACC,QAAQ,CAAED,KAAK,CAAuBpB,IAAI,CAAC,IAC9DkB,aAAa,CAAEE,KAAK,CAAuBD,MAAM,CACrD,CAAC;EAEL,CAAC;EAED,OAAOD,aAAa,CAACD,OAAO,CAACE,MAAM,CAAC;AACtC;AAEA,OAAO,SAASG,iBAAiBA,CAC/BT,IAAwC,EAC9B;EACV,IAAIA,IAAI,YAAYU,QAAQ,EAAE;IAC5B,OAAOV,IAAI;EACb;EAEA,MAAMW,QAAQ,GAAG,IAAID,QAAQ,CAAC,CAAC;EAC/B,KAAK,MAAM,CAACE,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACf,IAAI,CAAC,EAAE;IAC/C,IAAIH,KAAK,CAACmB,OAAO,CAACH,KAAK,CAAC,EAAE;MACxBA,KAAK,CAACI,OAAO,CAAEC,CAAC,IAAK;QACnBP,QAAQ,CAACQ,MAAM,CAACP,GAAG,EAAEM,CAAC,CAAC;MACzB,CAAC,CAAC;IACJ,CAAC,MAAM,IACLpC,QAAQ,CAAC+B,KAAK,CAAC,IACf,EAAEA,KAAK,YAAYO,IAAI,CAAC,IACxB,EAAEP,KAAK,YAAYQ,IAAI,CAAC,EACxB;MACAP,MAAM,CAACC,OAAO,CAACF,KAAK,CAAC,CAACI,OAAO,CAACK,IAAA,IAAY;QAAA,IAAX,CAACC,CAAC,EAAEL,CAAC,CAAC,GAAAI,IAAA;QACnCX,QAAQ,CAACQ,MAAM,CAAC,GAAGP,GAAG,IAAIW,CAAC,GAAG,EAAEL,CAAC,CAAC;MACpC,CAAC,CAAC;IACJ,CAAC,MAAM;MACLP,QAAQ,CAACQ,MAAM,CAACP,GAAG,EAAEC,KAAe,CAAC;IACvC;EACF;EAEA,OAAOF,QAAQ;AACjB;AAEA,OAAO,eAAea,WAAWA,CAAAC,KAAA,EAYb;EAAA,IAXlB;IACEC,GAAG;IACHC,WAAW;IACXC,MAAM,GAAG,KAAK;IACdC,eAAe,GAAG,IAAI;IACtB3C,UAAU;IACVkB,OAAO;IACP0B,UAAU;IACVC;EACe,CAAC,GAAAN,KAAA;EAGlB,MAAMO,eAAe,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAACxB,QAAQ,CACxDoB,MAAM,CAACK,WAAW,CAAC,CACrB,CAAC;EACD,MAAMC,cAA2B,GAAGJ,UAAU,GAC1C;IAAEK,YAAY,EAAE;EAAO,CAAC,GACxB,CAAC,CAAC;EACN,IAAIC,QAA4B;EAAC,SAAAC,KAAA,GAAA3C,SAAA,CAAAC,MAAA,EAR9BC,IAAI,OAAAC,KAAA,CAAAwC,KAAA,OAAAA,KAAA,WAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;IAAJ1C,IAAI,CAAA0C,KAAA,QAAA5C,SAAA,CAAA4C,KAAA;EAAA;EAUP,IAAIN,eAAe,EAAE;IAAA,IAAAO,qBAAA,EAAAC,kBAAA,EAAAC,qBAAA,EAAAC,eAAA;IACnB,MAAMC,QAAQ,GACZhB,WAAW,IACX,CAAAvB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEjB,IAAI,MAAK,QAAQ,IAC1B,EAAAoD,qBAAA,IAAAC,kBAAA,GAACb,WAAW,CAACiB,KAAK,CAAC,WAAW,CAAC,cAAAJ,kBAAA,uBAA9BA,kBAAA,CAAgC7C,MAAM,cAAA4C,qBAAA,cAAAA,qBAAA,GAAI,CAAC,QAAAE,qBAAA,IAAAC,eAAA,GACzCtC,OAAO,CAACE,MAAM,cAAAoC,eAAA,uBAAdA,eAAA,CAAgB/C,MAAM,cAAA8C,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;IACjC,IAAIxC,MAA8B;IAClC,IAAIC,OAAgC;IAEpC,IAAIyC,QAAQ,EAAE;MACZ,CAACzC,OAAO,CAAC,GAAGN,IAAsB;IACpC,CAAC,MAAM;MACL,CAACK,MAAM,EAAEC,OAAO,CAAC,GAAGN,IAAmC;IACzD;IAEA,IAAImC,MAAM,EAAE;MAAA,IAAAc,gBAAA,EAAAC,QAAA;MACV,MAAMf,MAAM,GAAG,MAAMhD,eAAe,CAACH,IAAI,CAACmE,gBAAgB,CAACrB,GAAG,EAAEzB,MAAM,CAAC,EAAE;QACvE,GAAGiC,cAAc;QACjB,GAAGhC,OAAO;QACV0B,MAAM;QACNoB,OAAO,EAAElC,MAAM,CAACmC,WAAW,CAAC,CAC1B,GAAG,IAAIC,OAAO,EAAAL,gBAAA,IAAAC,QAAA,GAAC5C,OAAO,cAAA4C,QAAA,uBAAPA,QAAA,CAASE,OAAO,cAAAH,gBAAA,cAAAA,gBAAA,GAAI,CAAC,CAAC,CAAC,CAAC9B,OAAO,CAAC,CAAC,CACjD;MACH,CAAC,CAAC;MACF,OAAOgB,MAAM;IACf;IAEAK,QAAQ,GAAG,MAAMxD,IAAI,CAACuE,aAAa,CAACvB,MAAM,EAAEF,GAAG,EAAE;MAC/CzB,MAAM;MACN,GAAGiC,cAAc;MACjB,GAAGhC;IACL,CAAC,CAAC;EACJ,CAAC,MAAM;IACL,MAAMkD,YAAY,GAAGjD,WAAW,CAACC,OAAO,CAAC;IACzC,MAAMiD,MAAM,GAAG9D,gBAAgB,CAACL,UAAU,EAAE,GAAGU,IAAI,CAAC;IAEpD,MAAMI,IAAI,GAAGoD,YAAY,GACrB3C,iBAAiB,CAAC4C,MAAM,CAACrD,IAAW,CAAC,GACrCqD,MAAM,CAACrD,IAAI;IAEf,IAAI+B,MAAM,EAAE;MAAA,IAAAuB,eAAA;MACV,MAAM;QAAEC,IAAI;QAAEP;MAAQ,CAAC,GAAGpE,IAAI,CAAC4E,iBAAiB,CAC9CxD,IAAI,GAAAsD,eAAA,GACJD,MAAM,CAACnD,OAAO,cAAAoD,eAAA,uBAAdA,eAAA,CAAgBN,OAClB,CAAC;MACD,MAAMjB,MAAM,GAAG,MAAMhD,eAAe,CAAC2C,GAAG,EAAE;QACxC,GAAGQ,cAAc;QACjB,GAAGmB,MAAM,CAACnD,OAAO;QACjB0B,MAAM;QACNoB,OAAO,EAAElC,MAAM,CAACmC,WAAW,CAAC,CAAC,GAAG,IAAIC,OAAO,CAACF,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,CAAC,CAAC,CAAC,CAACjC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtEwC;MACF,CAAC,CAAC;MACF,OAAOxB,MAAM;IACf;IAEAK,QAAQ,GAAG,MAAMxD,IAAI,CAAC6E,eAAe,CAAC7B,MAAM,EAAEF,GAAG,EAAE1B,IAAI,EAAE;MACvD,GAAGkC,cAAc;MACjB,GAAGmB,MAAM,CAACnD;IACZ,CAAC,CAAC;EACJ;EAEA,OAAO,CAAC4B,UAAU,GAAG,KAAK,GAAGD,eAAe,IAAIO,QAAQ,CAACpC,IAAI,GAAGoC,QAAQ;AAC1E;AAEA,OAAO,SAASsB,uBAAuBA,CAAA,EAAS;EAC9CC,cAAc,CAACC,MAAM,CAAC5E,iBAAiB,EAAEL,mBAAmB,CAAC6C,WAAW,CAAC,CAAC;AAC5E","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ContractResponse, ExtField, ContractRequest } from "@next-core/types";
|
|
1
|
+
import type { ContractResponse, ExtField, ContractRequest, UseProviderContractConf } from "@next-core/types";
|
|
2
2
|
export type MinimalContractRequest = Pick<ContractRequest, "type"> & {
|
|
3
3
|
fields?: MinimalContractField[];
|
|
4
4
|
};
|
|
@@ -10,7 +10,7 @@ export type MinimalContractField = {
|
|
|
10
10
|
};
|
|
11
11
|
export type MinimalContractResponse = Pick<ContractResponse, "type" | "wrapper">;
|
|
12
12
|
export declare function isFlowApiProvider(provider: string): boolean;
|
|
13
|
-
export declare function getArgsOfFlowApi(provider: string, originalArgs: unknown[], method?: string, stream?: boolean): Promise<unknown[]>;
|
|
13
|
+
export declare function getArgsOfFlowApi(provider: string, originalArgs: unknown[] | UseProviderContractConf, method?: string, stream?: boolean): Promise<unknown[]>;
|
|
14
14
|
export interface CustomApiDefinition {
|
|
15
15
|
name: string;
|
|
16
16
|
namespace: string;
|
|
@@ -12,7 +12,7 @@ export interface CustomApiParams {
|
|
|
12
12
|
isFileType?: boolean;
|
|
13
13
|
stream?: boolean;
|
|
14
14
|
}
|
|
15
|
-
export declare function processExtFields(ext_fields: ExtField[], ...args: unknown[]): {
|
|
15
|
+
export declare function processExtFields(ext_fields: ExtField[] | undefined, ...args: unknown[]): {
|
|
16
16
|
data: unknown;
|
|
17
17
|
options: HttpOptions;
|
|
18
18
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-core/easyops-runtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.1",
|
|
4
4
|
"homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/easyops-runtime",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"repository": {
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"@next-core/cook": "^2.5.9",
|
|
49
49
|
"@next-core/http": "^1.2.13",
|
|
50
50
|
"@next-core/pipes": "^2.0.33",
|
|
51
|
-
"@next-core/runtime": "^1.
|
|
52
|
-
"@next-core/types": "^1.
|
|
53
|
-
"@next-core/utils": "^1.8.
|
|
51
|
+
"@next-core/runtime": "^1.65.0",
|
|
52
|
+
"@next-core/types": "^1.17.0",
|
|
53
|
+
"@next-core/utils": "^1.8.2",
|
|
54
54
|
"js-yaml": "^3.14.1",
|
|
55
55
|
"lodash": "^4.17.21"
|
|
56
56
|
},
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"jest-websocket-mock": "^2.5.0",
|
|
61
61
|
"whatwg-fetch": "^3.6.20"
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "b356ef08ecef65234dcace9aa78c4a87222facbd"
|
|
64
64
|
}
|