@next-core/easyops-runtime 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getCheckedApp = getCheckedApp;
7
+ exports.preCheckInstalledApps = preCheckInstalledApps;
8
+ exports.waitForCheckingApps = waitForCheckingApps;
9
+ var _storyboard = require("@next-core/utils/storyboard");
10
+ var _microAppStandaloneSdk = require("@next-api-sdk/micro-app-standalone-sdk");
11
+ const checkingApps = new Map();
12
+ const checkedApps = new Map();
13
+ function preCheckInstalledApps(storyboard, hasAppInBootstrap) {
14
+ if (window.STANDALONE_MICRO_APPS && !window.NO_AUTH_GUARD) {
15
+ const appIds = scanInstalledAppsUsage(storyboard);
16
+ const searchIds = [];
17
+ for (const appId of appIds) {
18
+ // Do not check these apps already checking or in bootstrap.
19
+ if (!checkingApps.has(appId) && !hasAppInBootstrap(appId)) {
20
+ searchIds.push(appId);
21
+ }
22
+ }
23
+ if (searchIds.length === 0) {
24
+ return;
25
+ }
26
+ const promise = (0, _microAppStandaloneSdk.RuntimeApi_searchMicroAppStandalone)({
27
+ query: {
28
+ appId: {
29
+ $in: searchIds
30
+ }
31
+ },
32
+ fields: ["appId", "currentVersion", "installStatus"]
33
+ }).catch(error => {
34
+ // Allow search micro app to fail, and
35
+ // make it not crash when the backend service is not updated.
36
+ // eslint-disable-next-line no-console
37
+ console.error("Get off site standalone micro-apps failed", error);
38
+ });
39
+ for (const appId of searchIds) {
40
+ checkingApps.set(appId, promise.then(result => {
41
+ var _result$list;
42
+ const app = result === null || result === void 0 ? void 0 : (_result$list = result.list) === null || _result$list === void 0 ? void 0 : _result$list.find(item => item.appId === appId);
43
+ const checkedApp = app ? {
44
+ ...app,
45
+ id: appId
46
+ } : undefined;
47
+ checkedApps.set(appId, checkedApp);
48
+ return checkedApp;
49
+ }));
50
+ }
51
+ }
52
+ }
53
+ async function waitForCheckingApps(appIds) {
54
+ await Promise.all(appIds.map(appId => checkingApps.get(appId)));
55
+ }
56
+ function getCheckedApp(appId) {
57
+ if (window.STANDALONE_MICRO_APPS) {
58
+ return checkedApps.get(appId);
59
+ }
60
+ }
61
+ function scanInstalledAppsUsage(storyboard) {
62
+ var _storyboard$meta;
63
+ const usage = {
64
+ usedArgs: new Set()
65
+ };
66
+ // `INSTALLED_APPS.has(...)` is not available in storyboard functions
67
+ const {
68
+ customTemplates,
69
+ menus
70
+ } = (_storyboard$meta = storyboard.meta) !== null && _storyboard$meta !== void 0 ? _storyboard$meta : {};
71
+ (0, _storyboard.traverseStoryboardExpressions)([storyboard.routes, customTemplates, menus], (node, parent) => {
72
+ (0, _storyboard.collectInstalledAppsHasUsage)(usage, node, parent);
73
+ }, "INSTALLED_APPS");
74
+ return [...usage.usedArgs];
75
+ }
76
+ //# sourceMappingURL=checkInstalledApps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkInstalledApps.js","names":["_storyboard","require","_microAppStandaloneSdk","checkingApps","Map","checkedApps","preCheckInstalledApps","storyboard","hasAppInBootstrap","window","STANDALONE_MICRO_APPS","NO_AUTH_GUARD","appIds","scanInstalledAppsUsage","searchIds","appId","has","push","length","promise","RuntimeApi_searchMicroAppStandalone","query","$in","fields","catch","error","console","set","then","result","_result$list","app","list","find","item","checkedApp","id","undefined","waitForCheckingApps","Promise","all","map","get","getCheckedApp","_storyboard$meta","usage","usedArgs","Set","customTemplates","menus","meta","traverseStoryboardExpressions","routes","node","parent","collectInstalledAppsHasUsage"],"sources":["../../src/checkInstalledApps.ts"],"sourcesContent":["import type { MicroApp, Storyboard } from \"@next-core/types\";\nimport {\n traverseStoryboardExpressions,\n collectInstalledAppsHasUsage,\n type MemberCallUsage,\n} from \"@next-core/utils/storyboard\";\nimport { RuntimeApi_searchMicroAppStandalone } from \"@next-api-sdk/micro-app-standalone-sdk\";\n\ntype AppForCheck = Pick<MicroApp, \"id\" | \"currentVersion\" | \"installStatus\">;\n\nconst checkingApps = new Map<string, Promise<AppForCheck | undefined>>();\nconst checkedApps = new Map<string, AppForCheck | undefined>();\n\nexport function preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n) {\n if (window.STANDALONE_MICRO_APPS && !window.NO_AUTH_GUARD) {\n const appIds = scanInstalledAppsUsage(storyboard);\n const searchIds: string[] = [];\n for (const appId of appIds) {\n // Do not check these apps already checking or in bootstrap.\n if (!checkingApps.has(appId) && !hasAppInBootstrap(appId)) {\n searchIds.push(appId);\n }\n }\n if (searchIds.length === 0) {\n return;\n }\n const promise = RuntimeApi_searchMicroAppStandalone({\n query: { appId: { $in: searchIds } },\n fields: [\"appId\", \"currentVersion\", \"installStatus\"],\n }).catch((error) => {\n // Allow search micro app to fail, and\n // make it not crash when the backend service is not updated.\n // eslint-disable-next-line no-console\n console.error(\"Get off site standalone micro-apps failed\", error);\n });\n for (const appId of searchIds) {\n checkingApps.set(\n appId,\n promise.then((result) => {\n const app = result?.list?.find((item) => item.appId === appId);\n const checkedApp = app\n ? {\n ...app,\n id: appId,\n }\n : undefined;\n checkedApps.set(appId, checkedApp);\n return checkedApp;\n })\n );\n }\n }\n}\n\nexport async function waitForCheckingApps(appIds: string[]) {\n await Promise.all(appIds.map((appId) => checkingApps.get(appId)));\n}\n\nexport function getCheckedApp(appId: string) {\n if (window.STANDALONE_MICRO_APPS) {\n return checkedApps.get(appId);\n }\n}\n\nfunction scanInstalledAppsUsage(storyboard: Storyboard) {\n const usage: MemberCallUsage = {\n usedArgs: new Set(),\n };\n // `INSTALLED_APPS.has(...)` is not available in storyboard functions\n const { customTemplates, menus } = storyboard.meta ?? {};\n traverseStoryboardExpressions(\n [storyboard.routes, customTemplates, menus],\n (node, parent) => {\n collectInstalledAppsHasUsage(usage, node, parent);\n },\n \"INSTALLED_APPS\"\n );\n return [...usage.usedArgs];\n}\n"],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.clearCollectWidgetContract = clearCollectWidgetContract;
7
+ exports.collectContract = collectContract;
8
+ exports.collectWidgetContract = collectWidgetContract;
9
+ exports.getContract = getContract;
10
+ const contractsMap = new Map();
11
+ const widgetContractMap = new Map();
12
+ const addContract = (contracts, map) => {
13
+ contracts === null || contracts === void 0 ? void 0 : contracts.forEach(contract => {
14
+ map.set(`${contract.namespaceId}.${contract.name}`, contract);
15
+ });
16
+ };
17
+ function collectContract(contracts) {
18
+ addContract(contracts, contractsMap);
19
+ }
20
+ function collectWidgetContract(contracts) {
21
+ addContract(contracts, widgetContractMap);
22
+ }
23
+ function clearCollectWidgetContract() {
24
+ widgetContractMap.clear();
25
+ }
26
+ function getContract(name) {
27
+ return contractsMap.get(name) || widgetContractMap.get(name);
28
+ }
29
+ //# sourceMappingURL=CollectContracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectContracts.js","names":["contractsMap","Map","widgetContractMap","addContract","contracts","map","forEach","contract","set","namespaceId","name","collectContract","collectWidgetContract","clearCollectWidgetContract","clear","getContract","get"],"sources":["../../../src/flowApi/CollectContracts.ts"],"sourcesContent":["import { Contract } from \"@next-core/types\";\n\nconst contractsMap: Map<string, Contract> = new Map();\nconst widgetContractMap: Map<string, Contract> = new Map();\n\nconst addContract = (\n contracts: Contract[] | undefined,\n map: Map<string, Contract>\n): void => {\n contracts?.forEach((contract) => {\n map.set(`${contract.namespaceId}.${contract.name}`, contract);\n });\n};\n\nexport function collectContract(contracts: Contract[] | undefined): void {\n addContract(contracts, contractsMap);\n}\n\nexport function collectWidgetContract(contracts: Contract[] | undefined): void {\n addContract(contracts, widgetContractMap);\n}\n\nexport function clearCollectWidgetContract(): void {\n widgetContractMap.clear();\n}\n\nexport function getContract(name: string): Contract | undefined {\n return contractsMap.get(name) || widgetContractMap.get(name);\n}\n"],"mappings":";;;;;;;;;AAEA,MAAMA,YAAmC,GAAG,IAAIC,GAAG,EAAE;AACrD,MAAMC,iBAAwC,GAAG,IAAID,GAAG,EAAE;AAE1D,MAAME,WAAW,GAAGA,CAClBC,SAAiC,EACjCC,GAA0B,KACjB;EACTD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEE,OAAO,CAAEC,QAAQ,IAAK;IAC/BF,GAAG,CAACG,GAAG,CAAE,GAAED,QAAQ,CAACE,WAAY,IAAGF,QAAQ,CAACG,IAAK,EAAC,EAAEH,QAAQ,CAAC;EAC/D,CAAC,CAAC;AACJ,CAAC;AAEM,SAASI,eAAeA,CAACP,SAAiC,EAAQ;EACvED,WAAW,CAACC,SAAS,EAAEJ,YAAY,CAAC;AACtC;AAEO,SAASY,qBAAqBA,CAACR,SAAiC,EAAQ;EAC7ED,WAAW,CAACC,SAAS,EAAEF,iBAAiB,CAAC;AAC3C;AAEO,SAASW,0BAA0BA,CAAA,EAAS;EACjDX,iBAAiB,CAACY,KAAK,EAAE;AAC3B;AAEO,SAASC,WAAWA,CAACL,IAAY,EAAwB;EAC9D,OAAOV,YAAY,CAACgB,GAAG,CAACN,IAAI,CAAC,IAAIR,iBAAiB,CAACc,GAAG,CAACN,IAAI,CAAC;AAC9D"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getArgsOfFlowApi = getArgsOfFlowApi;
8
+ exports.isFlowApiProvider = isFlowApiProvider;
9
+ var _jsYaml = _interopRequireDefault(require("js-yaml"));
10
+ var _apiGatewaySdk = require("@next-api-sdk/api-gateway-sdk");
11
+ var _CollectContracts = require("./CollectContracts.js");
12
+ const flowApiDefinitionPromiseMap = new Map();
13
+
14
+ // Legacy Custom API: `${namespace}@${name}`
15
+ // Flow API: `${namespace}@${name}:${version}`
16
+ function isFlowApiProvider(provider) {
17
+ return provider.includes("@");
18
+ }
19
+ async function getArgsOfFlowApi(provider, originalArgs, method) {
20
+ if (!provider.includes(":")) {
21
+ throw new Error(`You're using legacy Custom API "${provider}" which is dropped in v3, please use Flow API instead`);
22
+ }
23
+ const apiDefinition = await fetchFlowApiDefinition(provider);
24
+ if (!apiDefinition) {
25
+ throw new Error(`Flow API not found: "${provider}"`);
26
+ }
27
+ const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);
28
+ return getApiArgsFromApiProfile(apiProfile, originalArgs, method);
29
+ }
30
+ function getApiArgsFromApiProfile({
31
+ uri,
32
+ method: apiMethod,
33
+ ext_fields,
34
+ name,
35
+ namespace,
36
+ serviceName,
37
+ responseWrapper,
38
+ version,
39
+ isFileType,
40
+ request
41
+ }, originalArgs, method) {
42
+ const isDownload = isFileType && method === "saveAs";
43
+ let fileName;
44
+ if (isDownload) {
45
+ fileName = originalArgs.shift();
46
+ }
47
+ const {
48
+ url,
49
+ args
50
+ } = getTransformedUriAndRestArgs(uri, originalArgs, name, namespace, serviceName, version);
51
+ return [...(isDownload ? [fileName] : []), {
52
+ url,
53
+ originalUri: uri,
54
+ method: apiMethod,
55
+ ext_fields,
56
+ responseWrapper,
57
+ request,
58
+ isFileType
59
+ }, ...args];
60
+ }
61
+ function getTransformedUriAndRestArgs(uri, originalArgs, name, namespace, serviceName, version) {
62
+ const prefix = version ? serviceName ? `api/gateway/${serviceName}` : `api/gateway/${namespace}.${name}@${version}` : `api/gateway/api_service.${namespace}.${name}`;
63
+ const restArgs = originalArgs.slice();
64
+ const transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift());
65
+ return {
66
+ url: prefix + transformedUri,
67
+ args: restArgs
68
+ };
69
+ }
70
+ function getApiProfileFromApiDefinition(provider, api) {
71
+ var _contract$endpoint, _contract$response;
72
+ const contract = typeof api.contract === "string" ? _jsYaml.default.safeLoad(api.contract, {
73
+ schema: _jsYaml.default.JSON_SCHEMA,
74
+ json: true
75
+ }) : api.contract;
76
+ const {
77
+ uri,
78
+ method = "GET",
79
+ ext_fields
80
+ } = (_contract$endpoint = contract === null || contract === void 0 ? void 0 : contract.endpoint) !== null && _contract$endpoint !== void 0 ? _contract$endpoint : {};
81
+ const responseWrapper = contract !== null && contract !== void 0 && contract.response ? contract.response.wrapper !== false : false;
82
+ if (!uri) {
83
+ throw new Error(`Missing endpoint.uri in contract of provider "${provider}"`);
84
+ }
85
+ return {
86
+ uri,
87
+ method: method.toLowerCase() === "list" ? "get" : method,
88
+ ext_fields,
89
+ name: api.name,
90
+ namespace: api.namespace,
91
+ serviceName: api.serviceName,
92
+ version: api.version,
93
+ isFileType: (contract === null || contract === void 0 ? void 0 : (_contract$response = contract.response) === null || _contract$response === void 0 ? void 0 : _contract$response.type) === "file",
94
+ responseWrapper,
95
+ request: contract === null || contract === void 0 ? void 0 : contract.request
96
+ };
97
+ }
98
+ function fetchFlowApiDefinition(provider) {
99
+ let promise = flowApiDefinitionPromiseMap.get(provider);
100
+ if (!promise) {
101
+ promise = _fetchFlowApiDefinition(provider);
102
+ flowApiDefinitionPromiseMap.set(provider, promise);
103
+ }
104
+ return promise;
105
+ }
106
+ async function _fetchFlowApiDefinition(provider) {
107
+ const [namespaceName, nameWithVersion] = provider.split("@");
108
+ const [name, version] = nameWithVersion.split(":");
109
+ const contract = (0, _CollectContracts.getContract)(`${namespaceName}.${name}`);
110
+ if (contract) {
111
+ return {
112
+ name: contract.name,
113
+ namespace: contract.namespaceId,
114
+ serviceName: contract.serviceName,
115
+ version: contract.version,
116
+ contract: {
117
+ endpoint: contract.endpoint,
118
+ response: contract.response,
119
+ request: contract.request
120
+ }
121
+ };
122
+ } else {
123
+ const {
124
+ contractData
125
+ } = await (0, _apiGatewaySdk.ContractApi_searchSingleContract)({
126
+ contractName: `${namespaceName}.${name}`,
127
+ version
128
+ });
129
+
130
+ // return undefined if don't found contract
131
+ if (contractData) {
132
+ var _contractData$namespa, _contractData$namespa2;
133
+ return {
134
+ name: contractData.name,
135
+ namespace: (_contractData$namespa = contractData.namespace) === null || _contractData$namespa === void 0 ? void 0 : (_contractData$namespa2 = _contractData$namespa[0]) === null || _contractData$namespa2 === void 0 ? void 0 : _contractData$namespa2.name,
136
+ serviceName: contractData.serviceName,
137
+ version: contractData.version,
138
+ contract: {
139
+ endpoint: contractData.endpoint,
140
+ response: contractData.response,
141
+ request: contractData.request
142
+ }
143
+ };
144
+ }
145
+ }
146
+ }
147
+ //# sourceMappingURL=FlowApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowApi.js","names":["_jsYaml","_interopRequireDefault","require","_apiGatewaySdk","_CollectContracts","flowApiDefinitionPromiseMap","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","Error","apiDefinition","fetchFlowApiDefinition","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","uri","apiMethod","ext_fields","name","namespace","serviceName","responseWrapper","version","isFileType","request","isDownload","fileName","shift","url","args","getTransformedUriAndRestArgs","originalUri","prefix","restArgs","slice","transformedUri","replace","api","_contract$endpoint","_contract$response","contract","yaml","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","toLowerCase","type","promise","get","_fetchFlowApiDefinition","set","namespaceName","nameWithVersion","split","getContract","namespaceId","contractData","ContractApi_searchSingleContract","contractName","_contractData$namespa","_contractData$namespa2"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport { ContractRequest, ContractResponse, ExtField } from \"@next-core/types\";\nimport { getContract } from \"./CollectContracts.js\";\n\nconst flowApiDefinitionPromiseMap = new Map<\n string,\n Promise<CustomApiDefinition | undefined>\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): 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 Error(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method);\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): unknown[] {\n const isDownload = isFileType && 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 },\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\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 + transformedUri,\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\nfunction fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n let promise = flowApiDefinitionPromiseMap.get(provider);\n if (!promise) {\n promise = _fetchFlowApiDefinition(provider);\n flowApiDefinitionPromiseMap.set(provider, promise);\n }\n return promise;\n}\n\nasync function _fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\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 } else {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespaceName}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n if (contractData) {\n return {\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 }\n }\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?: ContractRequest;\n response?: ContractResponse;\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?: ContractRequest;\n}\n"],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FLOW_API_PROVIDER = void 0;
7
+ exports.callFlowApi = callFlowApi;
8
+ exports.hasFileType = hasFileType;
9
+ exports.processExtFields = processExtFields;
10
+ exports.registerFlowApiProvider = registerFlowApiProvider;
11
+ exports.transformFormData = transformFormData;
12
+ var _general = require("@next-core/utils/general");
13
+ var _http = require("@next-core/http");
14
+ var _lodash = require("lodash");
15
+ const FLOW_API_PROVIDER = "core.provider-flow-api";
16
+ exports.FLOW_API_PROVIDER = FLOW_API_PROVIDER;
17
+ function hasFields(ext_fields, type) {
18
+ return ext_fields.some(item => item.source === type);
19
+ }
20
+ function processExtFields(ext_fields, ...args) {
21
+ const hasQueryParams = hasFields(ext_fields, "query");
22
+ const hasBodyParams = hasFields(ext_fields, "body");
23
+ if (hasQueryParams) {
24
+ if (hasBodyParams) {
25
+ const [data, params, options] = args;
26
+ return {
27
+ data: data,
28
+ options: {
29
+ params: params,
30
+ ...options
31
+ }
32
+ };
33
+ }
34
+ const [params, options] = args;
35
+ return {
36
+ data: {},
37
+ options: {
38
+ params: params,
39
+ ...options
40
+ }
41
+ };
42
+ }
43
+
44
+ // only hasBodyParams or default
45
+ const [data, options] = args;
46
+ return {
47
+ data,
48
+ options: options
49
+ };
50
+ }
51
+ function hasFileType(request) {
52
+ if (!request || request.type !== "object") {
53
+ return false;
54
+ }
55
+ const processFields = fields => {
56
+ return !(0, _lodash.isEmpty)(fields) && fields.some(field => ["file", "file[]"].includes(field.type) || processFields(field.fields));
57
+ };
58
+ return processFields(request.fields);
59
+ }
60
+ function transformFormData(data) {
61
+ if (data instanceof FormData) {
62
+ return data;
63
+ }
64
+ const formData = new FormData();
65
+ for (const [key, value] of Object.entries(data)) {
66
+ if (Array.isArray(value)) {
67
+ value.forEach(v => {
68
+ formData.append(key, v);
69
+ });
70
+ } else if ((0, _lodash.isObject)(value) && !(value instanceof Blob) && !(value instanceof Date)) {
71
+ Object.entries(value).forEach(([k, v]) => {
72
+ formData.append(`${key}[${k}]`, v);
73
+ });
74
+ } else {
75
+ formData.append(key, value);
76
+ }
77
+ }
78
+ return formData;
79
+ }
80
+ async function callFlowApi({
81
+ url,
82
+ originalUri,
83
+ method = "GET",
84
+ responseWrapper = true,
85
+ ext_fields = [],
86
+ request,
87
+ isFileType
88
+ }, ...args) {
89
+ const isSimpleRequest = ["get", "delete", "head"].includes(method.toLowerCase());
90
+ const defaultOptions = isFileType ? {
91
+ responseType: "blob"
92
+ } : {};
93
+ let response;
94
+ if (isSimpleRequest) {
95
+ var _originalUri$match$le, _originalUri$match, _request$fields$lengt, _request$fields;
96
+ 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) : false;
97
+ let params;
98
+ let options;
99
+ if (noParams) {
100
+ [options] = args;
101
+ } else {
102
+ [params, options] = args;
103
+ }
104
+ response = await _http.http.simpleRequest(method, url, {
105
+ params,
106
+ ...defaultOptions,
107
+ ...options
108
+ });
109
+ } else {
110
+ const isUploadType = hasFileType(request);
111
+ const result = processExtFields(ext_fields, ...args);
112
+ response = await _http.http.requestWithBody(method, url, isUploadType ? transformFormData(result.data) : result.data, {
113
+ ...defaultOptions,
114
+ ...result.options
115
+ });
116
+ }
117
+ return (isFileType ? false : responseWrapper) ? response.data : response;
118
+ }
119
+ function registerFlowApiProvider() {
120
+ customElements.define(FLOW_API_PROVIDER, (0, _general.createProviderClass)(callFlowApi));
121
+ }
122
+ //# sourceMappingURL=FlowApiProvider.js.map
@@ -0,0 +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","isSimpleRequest","toLowerCase","defaultOptions","responseType","response","_originalUri$match$le","_originalUri$match","_request$fields$lengt","_request$fields","noParams","match","length","http","simpleRequest","isUploadType","result","requestWithBody","registerFlowApiProvider","customElements","define","createProviderClass"],"sources":["../../../src/flowApi/FlowApiProvider.ts"],"sourcesContent":["import { createProviderClass } from \"@next-core/utils/general\";\nimport {\n ExtField,\n ContractRequest,\n ContractField,\n ContractFieldItem,\n} from \"@next-core/types\";\nimport { http, HttpOptions, HttpParams } from \"@next-core/http\";\nimport { isEmpty, isObject } from \"lodash\";\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?: ContractRequest;\n isFileType?: boolean;\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(request: ContractRequest | undefined): boolean {\n if (!request || request.type !== \"object\") {\n return false;\n }\n\n const processFields = (fields: ContractField[] | undefined): 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 }: 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 response = await http.simpleRequest(method, url, {\n params,\n ...defaultOptions,\n ...(options as HttpOptions),\n });\n } else {\n const isUploadType = hasFileType(request);\n const result = processExtFields(ext_fields, ...args);\n\n response = await http.requestWithBody(\n method,\n url,\n isUploadType ? transformFormData(result.data as any) : result.data,\n { ...defaultOptions, ...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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"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "FLOW_API_PROVIDER", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _FlowApiProvider.FLOW_API_PROVIDER;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "clearCollectWidgetContract", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _CollectContracts.clearCollectWidgetContract;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "collectContract", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _CollectContracts.collectContract;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "collectWidgetContract", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _CollectContracts.collectWidgetContract;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "getArgsOfFlowApi", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _FlowApi.getArgsOfFlowApi;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "isFlowApiProvider", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _FlowApi.isFlowApiProvider;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "registerFlowApiProvider", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _FlowApiProvider.registerFlowApiProvider;
46
+ }
47
+ });
48
+ var _FlowApiProvider = require("./FlowApiProvider.js");
49
+ var _FlowApi = require("./FlowApi.js");
50
+ var _CollectContracts = require("./CollectContracts.js");
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_FlowApiProvider","require","_FlowApi","_CollectContracts"],"sources":["../../../src/flowApi/index.ts"],"sourcesContent":["export {\n FLOW_API_PROVIDER,\n registerFlowApiProvider,\n} from \"./FlowApiProvider.js\";\n\nexport { isFlowApiProvider, getArgsOfFlowApi } from \"./FlowApi.js\";\n\nexport {\n collectContract,\n collectWidgetContract,\n clearCollectWidgetContract,\n} from \"./CollectContracts.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA;AAEA,IAAAE,iBAAA,GAAAF,OAAA"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.flowApi = exports.checkInstalledApps = void 0;
8
+ Object.defineProperty(exports, "validatePermissions", {
9
+ enumerable: true,
10
+ get: function () {
11
+ return _microAppSdk.PermissionApi_validatePermissions;
12
+ }
13
+ });
14
+ var _microAppSdk = require("@next-api-sdk/micro-app-sdk");
15
+ var _checkInstalledApps = _interopRequireWildcard(require("./checkInstalledApps.js"));
16
+ exports.checkInstalledApps = _checkInstalledApps;
17
+ var _flowApi = _interopRequireWildcard(require("./flowApi/index.js"));
18
+ exports.flowApi = _flowApi;
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_microAppSdk","require","_checkInstalledApps","_interopRequireWildcard","exports","checkInstalledApps","_flowApi","flowApi"],"sources":["../../src/index.ts"],"sourcesContent":["export { PermissionApi_validatePermissions as validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\n\nexport * as checkInstalledApps from \"./checkInstalledApps.js\";\n\nexport * as flowApi from \"./flowApi/index.js\";\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAuG,IAAAC,mBAAA,GAAAC,uBAAA,CAAAF,OAAA;AAAAG,OAAA,CAAAC,kBAAA,GAAAH,mBAAA;AAAA,IAAAI,QAAA,GAAAH,uBAAA,CAAAF,OAAA;AAAAG,OAAA,CAAAG,OAAA,GAAAD,QAAA"}
@@ -0,0 +1,78 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
3
+ import { traverseStoryboardExpressions, collectInstalledAppsHasUsage } from "@next-core/utils/storyboard";
4
+ import { RuntimeApi_searchMicroAppStandalone } from "@next-api-sdk/micro-app-standalone-sdk";
5
+ var checkingApps = new Map();
6
+ var checkedApps = new Map();
7
+ export function preCheckInstalledApps(storyboard, hasAppInBootstrap) {
8
+ if (window.STANDALONE_MICRO_APPS && !window.NO_AUTH_GUARD) {
9
+ var appIds = scanInstalledAppsUsage(storyboard);
10
+ var searchIds = [];
11
+ for (var _appId of appIds) {
12
+ // Do not check these apps already checking or in bootstrap.
13
+ if (!checkingApps.has(_appId) && !hasAppInBootstrap(_appId)) {
14
+ searchIds.push(_appId);
15
+ }
16
+ }
17
+ if (searchIds.length === 0) {
18
+ return;
19
+ }
20
+ var promise = RuntimeApi_searchMicroAppStandalone({
21
+ query: {
22
+ appId: {
23
+ $in: searchIds
24
+ }
25
+ },
26
+ fields: ["appId", "currentVersion", "installStatus"]
27
+ }).catch(error => {
28
+ // Allow search micro app to fail, and
29
+ // make it not crash when the backend service is not updated.
30
+ // eslint-disable-next-line no-console
31
+ console.error("Get off site standalone micro-apps failed", error);
32
+ });
33
+ var _loop = function (_appId2) {
34
+ checkingApps.set(_appId2, promise.then(result => {
35
+ var _result$list;
36
+ var app = result === null || result === void 0 ? void 0 : (_result$list = result.list) === null || _result$list === void 0 ? void 0 : _result$list.find(item => item.appId === _appId2);
37
+ var checkedApp = app ? _objectSpread(_objectSpread({}, app), {}, {
38
+ id: _appId2
39
+ }) : undefined;
40
+ checkedApps.set(_appId2, checkedApp);
41
+ return checkedApp;
42
+ }));
43
+ };
44
+ for (var _appId2 of searchIds) {
45
+ _loop(_appId2);
46
+ }
47
+ }
48
+ }
49
+ export function waitForCheckingApps(_x) {
50
+ return _waitForCheckingApps.apply(this, arguments);
51
+ }
52
+ function _waitForCheckingApps() {
53
+ _waitForCheckingApps = _asyncToGenerator(function* (appIds) {
54
+ yield Promise.all(appIds.map(appId => checkingApps.get(appId)));
55
+ });
56
+ return _waitForCheckingApps.apply(this, arguments);
57
+ }
58
+ export function getCheckedApp(appId) {
59
+ if (window.STANDALONE_MICRO_APPS) {
60
+ return checkedApps.get(appId);
61
+ }
62
+ }
63
+ function scanInstalledAppsUsage(storyboard) {
64
+ var _storyboard$meta;
65
+ var usage = {
66
+ usedArgs: new Set()
67
+ };
68
+ // `INSTALLED_APPS.has(...)` is not available in storyboard functions
69
+ var {
70
+ customTemplates,
71
+ menus
72
+ } = (_storyboard$meta = storyboard.meta) !== null && _storyboard$meta !== void 0 ? _storyboard$meta : {};
73
+ traverseStoryboardExpressions([storyboard.routes, customTemplates, menus], (node, parent) => {
74
+ collectInstalledAppsHasUsage(usage, node, parent);
75
+ }, "INSTALLED_APPS");
76
+ return [...usage.usedArgs];
77
+ }
78
+ //# sourceMappingURL=checkInstalledApps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkInstalledApps.js","names":["traverseStoryboardExpressions","collectInstalledAppsHasUsage","RuntimeApi_searchMicroAppStandalone","checkingApps","Map","checkedApps","preCheckInstalledApps","storyboard","hasAppInBootstrap","window","STANDALONE_MICRO_APPS","NO_AUTH_GUARD","appIds","scanInstalledAppsUsage","searchIds","appId","has","push","length","promise","query","$in","fields","catch","error","console","_loop","_appId2","set","then","result","_result$list","app","list","find","item","checkedApp","_objectSpread","id","undefined","waitForCheckingApps","_x","_waitForCheckingApps","apply","arguments","_asyncToGenerator","Promise","all","map","get","getCheckedApp","_storyboard$meta","usage","usedArgs","Set","customTemplates","menus","meta","routes","node","parent"],"sources":["../../src/checkInstalledApps.ts"],"sourcesContent":["import type { MicroApp, Storyboard } from \"@next-core/types\";\nimport {\n traverseStoryboardExpressions,\n collectInstalledAppsHasUsage,\n type MemberCallUsage,\n} from \"@next-core/utils/storyboard\";\nimport { RuntimeApi_searchMicroAppStandalone } from \"@next-api-sdk/micro-app-standalone-sdk\";\n\ntype AppForCheck = Pick<MicroApp, \"id\" | \"currentVersion\" | \"installStatus\">;\n\nconst checkingApps = new Map<string, Promise<AppForCheck | undefined>>();\nconst checkedApps = new Map<string, AppForCheck | undefined>();\n\nexport function preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n) {\n if (window.STANDALONE_MICRO_APPS && !window.NO_AUTH_GUARD) {\n const appIds = scanInstalledAppsUsage(storyboard);\n const searchIds: string[] = [];\n for (const appId of appIds) {\n // Do not check these apps already checking or in bootstrap.\n if (!checkingApps.has(appId) && !hasAppInBootstrap(appId)) {\n searchIds.push(appId);\n }\n }\n if (searchIds.length === 0) {\n return;\n }\n const promise = RuntimeApi_searchMicroAppStandalone({\n query: { appId: { $in: searchIds } },\n fields: [\"appId\", \"currentVersion\", \"installStatus\"],\n }).catch((error) => {\n // Allow search micro app to fail, and\n // make it not crash when the backend service is not updated.\n // eslint-disable-next-line no-console\n console.error(\"Get off site standalone micro-apps failed\", error);\n });\n for (const appId of searchIds) {\n checkingApps.set(\n appId,\n promise.then((result) => {\n const app = result?.list?.find((item) => item.appId === appId);\n const checkedApp = app\n ? {\n ...app,\n id: appId,\n }\n : undefined;\n checkedApps.set(appId, checkedApp);\n return checkedApp;\n })\n );\n }\n }\n}\n\nexport async function waitForCheckingApps(appIds: string[]) {\n await Promise.all(appIds.map((appId) => checkingApps.get(appId)));\n}\n\nexport function getCheckedApp(appId: string) {\n if (window.STANDALONE_MICRO_APPS) {\n return checkedApps.get(appId);\n }\n}\n\nfunction scanInstalledAppsUsage(storyboard: Storyboard) {\n const usage: MemberCallUsage = {\n usedArgs: new Set(),\n };\n // `INSTALLED_APPS.has(...)` is not available in storyboard functions\n const { customTemplates, menus } = storyboard.meta ?? {};\n traverseStoryboardExpressions(\n [storyboard.routes, customTemplates, menus],\n (node, parent) => {\n collectInstalledAppsHasUsage(usage, node, parent);\n },\n \"INSTALLED_APPS\"\n );\n return [...usage.usedArgs];\n}\n"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ var contractsMap = new Map();
2
+ var widgetContractMap = new Map();
3
+ var addContract = (contracts, map) => {
4
+ contracts === null || contracts === void 0 ? void 0 : contracts.forEach(contract => {
5
+ map.set("".concat(contract.namespaceId, ".").concat(contract.name), contract);
6
+ });
7
+ };
8
+ export function collectContract(contracts) {
9
+ addContract(contracts, contractsMap);
10
+ }
11
+ export function collectWidgetContract(contracts) {
12
+ addContract(contracts, widgetContractMap);
13
+ }
14
+ export function clearCollectWidgetContract() {
15
+ widgetContractMap.clear();
16
+ }
17
+ export function getContract(name) {
18
+ return contractsMap.get(name) || widgetContractMap.get(name);
19
+ }
20
+ //# sourceMappingURL=CollectContracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectContracts.js","names":["contractsMap","Map","widgetContractMap","addContract","contracts","map","forEach","contract","set","concat","namespaceId","name","collectContract","collectWidgetContract","clearCollectWidgetContract","clear","getContract","get"],"sources":["../../../src/flowApi/CollectContracts.ts"],"sourcesContent":["import { Contract } from \"@next-core/types\";\n\nconst contractsMap: Map<string, Contract> = new Map();\nconst widgetContractMap: Map<string, Contract> = new Map();\n\nconst addContract = (\n contracts: Contract[] | undefined,\n map: Map<string, Contract>\n): void => {\n contracts?.forEach((contract) => {\n map.set(`${contract.namespaceId}.${contract.name}`, contract);\n });\n};\n\nexport function collectContract(contracts: Contract[] | undefined): void {\n addContract(contracts, contractsMap);\n}\n\nexport function collectWidgetContract(contracts: Contract[] | undefined): void {\n addContract(contracts, widgetContractMap);\n}\n\nexport function clearCollectWidgetContract(): void {\n widgetContractMap.clear();\n}\n\nexport function getContract(name: string): Contract | undefined {\n return contractsMap.get(name) || widgetContractMap.get(name);\n}\n"],"mappings":"AAEA,IAAMA,YAAmC,GAAG,IAAIC,GAAG,EAAE;AACrD,IAAMC,iBAAwC,GAAG,IAAID,GAAG,EAAE;AAE1D,IAAME,WAAW,GAAGA,CAClBC,SAAiC,EACjCC,GAA0B,KACjB;EACTD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEE,OAAO,CAAEC,QAAQ,IAAK;IAC/BF,GAAG,CAACG,GAAG,IAAAC,MAAA,CAAIF,QAAQ,CAACG,WAAW,OAAAD,MAAA,CAAIF,QAAQ,CAACI,IAAI,GAAIJ,QAAQ,CAAC;EAC/D,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,SAASK,eAAeA,CAACR,SAAiC,EAAQ;EACvED,WAAW,CAACC,SAAS,EAAEJ,YAAY,CAAC;AACtC;AAEA,OAAO,SAASa,qBAAqBA,CAACT,SAAiC,EAAQ;EAC7ED,WAAW,CAACC,SAAS,EAAEF,iBAAiB,CAAC;AAC3C;AAEA,OAAO,SAASY,0BAA0BA,CAAA,EAAS;EACjDZ,iBAAiB,CAACa,KAAK,EAAE;AAC3B;AAEA,OAAO,SAASC,WAAWA,CAACL,IAAY,EAAwB;EAC9D,OAAOX,YAAY,CAACiB,GAAG,CAACN,IAAI,CAAC,IAAIT,iBAAiB,CAACe,GAAG,CAACN,IAAI,CAAC;AAC9D"}
@@ -0,0 +1,153 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import yaml from "js-yaml";
3
+ import { ContractApi_searchSingleContract } from "@next-api-sdk/api-gateway-sdk";
4
+ import { getContract } from "./CollectContracts.js";
5
+ var flowApiDefinitionPromiseMap = new Map();
6
+
7
+ // Legacy Custom API: `${namespace}@${name}`
8
+ // Flow API: `${namespace}@${name}:${version}`
9
+ export function isFlowApiProvider(provider) {
10
+ return provider.includes("@");
11
+ }
12
+ export function getArgsOfFlowApi(_x, _x2, _x3) {
13
+ return _getArgsOfFlowApi.apply(this, arguments);
14
+ }
15
+ function _getArgsOfFlowApi() {
16
+ _getArgsOfFlowApi = _asyncToGenerator(function* (provider, originalArgs, method) {
17
+ if (!provider.includes(":")) {
18
+ throw new Error("You're using legacy Custom API \"".concat(provider, "\" which is dropped in v3, please use Flow API instead"));
19
+ }
20
+ var apiDefinition = yield fetchFlowApiDefinition(provider);
21
+ if (!apiDefinition) {
22
+ throw new Error("Flow API not found: \"".concat(provider, "\""));
23
+ }
24
+ var apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);
25
+ return getApiArgsFromApiProfile(apiProfile, originalArgs, method);
26
+ });
27
+ return _getArgsOfFlowApi.apply(this, arguments);
28
+ }
29
+ function getApiArgsFromApiProfile(_ref, originalArgs, method) {
30
+ var {
31
+ uri,
32
+ method: apiMethod,
33
+ ext_fields,
34
+ name,
35
+ namespace,
36
+ serviceName,
37
+ responseWrapper,
38
+ version,
39
+ isFileType,
40
+ request
41
+ } = _ref;
42
+ var isDownload = isFileType && method === "saveAs";
43
+ var fileName;
44
+ if (isDownload) {
45
+ fileName = originalArgs.shift();
46
+ }
47
+ var {
48
+ url,
49
+ args
50
+ } = getTransformedUriAndRestArgs(uri, originalArgs, name, namespace, serviceName, version);
51
+ return [...(isDownload ? [fileName] : []), {
52
+ url,
53
+ originalUri: uri,
54
+ method: apiMethod,
55
+ ext_fields,
56
+ responseWrapper,
57
+ request,
58
+ isFileType
59
+ }, ...args];
60
+ }
61
+ function getTransformedUriAndRestArgs(uri, originalArgs, name, namespace, serviceName, version) {
62
+ var prefix = version ? serviceName ? "api/gateway/".concat(serviceName) : "api/gateway/".concat(namespace, ".").concat(name, "@").concat(version) : "api/gateway/api_service.".concat(namespace, ".").concat(name);
63
+ var restArgs = originalArgs.slice();
64
+ var transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift());
65
+ return {
66
+ url: prefix + transformedUri,
67
+ args: restArgs
68
+ };
69
+ }
70
+ function getApiProfileFromApiDefinition(provider, api) {
71
+ var _contract$endpoint, _contract$response;
72
+ var contract = typeof api.contract === "string" ? yaml.safeLoad(api.contract, {
73
+ schema: yaml.JSON_SCHEMA,
74
+ json: true
75
+ }) : api.contract;
76
+ var {
77
+ uri,
78
+ method = "GET",
79
+ ext_fields
80
+ } = (_contract$endpoint = contract === null || contract === void 0 ? void 0 : contract.endpoint) !== null && _contract$endpoint !== void 0 ? _contract$endpoint : {};
81
+ var responseWrapper = contract !== null && contract !== void 0 && contract.response ? contract.response.wrapper !== false : false;
82
+ if (!uri) {
83
+ throw new Error("Missing endpoint.uri in contract of provider \"".concat(provider, "\""));
84
+ }
85
+ return {
86
+ uri,
87
+ method: method.toLowerCase() === "list" ? "get" : method,
88
+ ext_fields,
89
+ name: api.name,
90
+ namespace: api.namespace,
91
+ serviceName: api.serviceName,
92
+ version: api.version,
93
+ isFileType: (contract === null || contract === void 0 ? void 0 : (_contract$response = contract.response) === null || _contract$response === void 0 ? void 0 : _contract$response.type) === "file",
94
+ responseWrapper,
95
+ request: contract === null || contract === void 0 ? void 0 : contract.request
96
+ };
97
+ }
98
+ function fetchFlowApiDefinition(provider) {
99
+ var promise = flowApiDefinitionPromiseMap.get(provider);
100
+ if (!promise) {
101
+ promise = _fetchFlowApiDefinition(provider);
102
+ flowApiDefinitionPromiseMap.set(provider, promise);
103
+ }
104
+ return promise;
105
+ }
106
+ function _fetchFlowApiDefinition(_x4) {
107
+ return _fetchFlowApiDefinition2.apply(this, arguments);
108
+ }
109
+ function _fetchFlowApiDefinition2() {
110
+ _fetchFlowApiDefinition2 = _asyncToGenerator(function* (provider) {
111
+ var [namespaceName, nameWithVersion] = provider.split("@");
112
+ var [name, version] = nameWithVersion.split(":");
113
+ var contract = getContract("".concat(namespaceName, ".").concat(name));
114
+ if (contract) {
115
+ return {
116
+ name: contract.name,
117
+ namespace: contract.namespaceId,
118
+ serviceName: contract.serviceName,
119
+ version: contract.version,
120
+ contract: {
121
+ endpoint: contract.endpoint,
122
+ response: contract.response,
123
+ request: contract.request
124
+ }
125
+ };
126
+ } else {
127
+ var {
128
+ contractData
129
+ } = yield ContractApi_searchSingleContract({
130
+ contractName: "".concat(namespaceName, ".").concat(name),
131
+ version
132
+ });
133
+
134
+ // return undefined if don't found contract
135
+ if (contractData) {
136
+ var _contractData$namespa, _contractData$namespa2;
137
+ return {
138
+ name: contractData.name,
139
+ namespace: (_contractData$namespa = contractData.namespace) === null || _contractData$namespa === void 0 ? void 0 : (_contractData$namespa2 = _contractData$namespa[0]) === null || _contractData$namespa2 === void 0 ? void 0 : _contractData$namespa2.name,
140
+ serviceName: contractData.serviceName,
141
+ version: contractData.version,
142
+ contract: {
143
+ endpoint: contractData.endpoint,
144
+ response: contractData.response,
145
+ request: contractData.request
146
+ }
147
+ };
148
+ }
149
+ }
150
+ });
151
+ return _fetchFlowApiDefinition2.apply(this, arguments);
152
+ }
153
+ //# sourceMappingURL=FlowApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowApi.js","names":["yaml","ContractApi_searchSingleContract","getContract","flowApiDefinitionPromiseMap","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","_x","_x2","_x3","_getArgsOfFlowApi","apply","arguments","_asyncToGenerator","originalArgs","method","Error","concat","apiDefinition","fetchFlowApiDefinition","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","_ref","uri","apiMethod","ext_fields","name","namespace","serviceName","responseWrapper","version","isFileType","request","isDownload","fileName","shift","url","args","getTransformedUriAndRestArgs","originalUri","prefix","restArgs","slice","transformedUri","replace","api","_contract$endpoint","_contract$response","contract","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","toLowerCase","type","promise","get","_fetchFlowApiDefinition","set","_x4","_fetchFlowApiDefinition2","namespaceName","nameWithVersion","split","namespaceId","contractData","contractName","_contractData$namespa","_contractData$namespa2"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport { ContractRequest, ContractResponse, ExtField } from \"@next-core/types\";\nimport { getContract } from \"./CollectContracts.js\";\n\nconst flowApiDefinitionPromiseMap = new Map<\n string,\n Promise<CustomApiDefinition | undefined>\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): 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 Error(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method);\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): unknown[] {\n const isDownload = isFileType && 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 },\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\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 + transformedUri,\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\nfunction fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n let promise = flowApiDefinitionPromiseMap.get(provider);\n if (!promise) {\n promise = _fetchFlowApiDefinition(provider);\n flowApiDefinitionPromiseMap.set(provider, promise);\n }\n return promise;\n}\n\nasync function _fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\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 } else {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespaceName}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n if (contractData) {\n return {\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 }\n }\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?: ContractRequest;\n response?: ContractResponse;\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?: ContractRequest;\n}\n"],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
3
+ import { createProviderClass } from "@next-core/utils/general";
4
+ import { http } from "@next-core/http";
5
+ import { isEmpty, isObject } from "lodash";
6
+ export var FLOW_API_PROVIDER = "core.provider-flow-api";
7
+ function hasFields(ext_fields, type) {
8
+ return ext_fields.some(item => item.source === type);
9
+ }
10
+ export function processExtFields(ext_fields) {
11
+ var hasQueryParams = hasFields(ext_fields, "query");
12
+ var hasBodyParams = hasFields(ext_fields, "body");
13
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
14
+ args[_key - 1] = arguments[_key];
15
+ }
16
+ if (hasQueryParams) {
17
+ if (hasBodyParams) {
18
+ var [_data, _params, _options] = args;
19
+ return {
20
+ data: _data,
21
+ options: _objectSpread({
22
+ params: _params
23
+ }, _options)
24
+ };
25
+ }
26
+ var [params, _options2] = args;
27
+ return {
28
+ data: {},
29
+ options: _objectSpread({
30
+ params: params
31
+ }, _options2)
32
+ };
33
+ }
34
+
35
+ // only hasBodyParams or default
36
+ var [data, options] = args;
37
+ return {
38
+ data,
39
+ options: options
40
+ };
41
+ }
42
+ export function hasFileType(request) {
43
+ if (!request || request.type !== "object") {
44
+ return false;
45
+ }
46
+ var processFields = fields => {
47
+ return !isEmpty(fields) && fields.some(field => ["file", "file[]"].includes(field.type) || processFields(field.fields));
48
+ };
49
+ return processFields(request.fields);
50
+ }
51
+ export function transformFormData(data) {
52
+ if (data instanceof FormData) {
53
+ return data;
54
+ }
55
+ var formData = new FormData();
56
+ var _loop = function (key) {
57
+ if (Array.isArray(value)) {
58
+ value.forEach(v => {
59
+ formData.append(key, v);
60
+ });
61
+ } else if (isObject(value) && !(value instanceof Blob) && !(value instanceof Date)) {
62
+ Object.entries(value).forEach(_ref => {
63
+ var [k, v] = _ref;
64
+ formData.append("".concat(key, "[").concat(k, "]"), v);
65
+ });
66
+ } else {
67
+ formData.append(key, value);
68
+ }
69
+ };
70
+ for (var [key, value] of Object.entries(data)) {
71
+ _loop(key);
72
+ }
73
+ return formData;
74
+ }
75
+ export function callFlowApi(_x) {
76
+ return _callFlowApi.apply(this, arguments);
77
+ }
78
+ function _callFlowApi() {
79
+ _callFlowApi = _asyncToGenerator(function* (_ref2) {
80
+ var {
81
+ url,
82
+ originalUri,
83
+ method = "GET",
84
+ responseWrapper = true,
85
+ ext_fields = [],
86
+ request,
87
+ isFileType
88
+ } = _ref2;
89
+ var isSimpleRequest = ["get", "delete", "head"].includes(method.toLowerCase());
90
+ var defaultOptions = isFileType ? {
91
+ responseType: "blob"
92
+ } : {};
93
+ var response;
94
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
95
+ args[_key2 - 1] = arguments[_key2];
96
+ }
97
+ if (isSimpleRequest) {
98
+ var _originalUri$match$le, _originalUri$match, _request$fields$lengt, _request$fields;
99
+ var 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) : false;
100
+ var params;
101
+ var options;
102
+ if (noParams) {
103
+ [options] = args;
104
+ } else {
105
+ [params, options] = args;
106
+ }
107
+ response = yield http.simpleRequest(method, url, _objectSpread(_objectSpread({
108
+ params
109
+ }, defaultOptions), options));
110
+ } else {
111
+ var isUploadType = hasFileType(request);
112
+ var result = processExtFields(ext_fields, ...args);
113
+ response = yield http.requestWithBody(method, url, isUploadType ? transformFormData(result.data) : result.data, _objectSpread(_objectSpread({}, defaultOptions), result.options));
114
+ }
115
+ return (isFileType ? false : responseWrapper) ? response.data : response;
116
+ });
117
+ return _callFlowApi.apply(this, arguments);
118
+ }
119
+ export function registerFlowApiProvider() {
120
+ customElements.define(FLOW_API_PROVIDER, createProviderClass(callFlowApi));
121
+ }
122
+ //# sourceMappingURL=FlowApiProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowApiProvider.js","names":["createProviderClass","http","isEmpty","isObject","FLOW_API_PROVIDER","hasFields","ext_fields","type","some","item","source","processExtFields","hasQueryParams","hasBodyParams","_len","arguments","length","args","Array","_key","data","params","options","_objectSpread","hasFileType","request","processFields","fields","field","includes","transformFormData","FormData","formData","_loop","key","isArray","value","forEach","v","append","Blob","Date","Object","entries","_ref","k","concat","callFlowApi","_x","_callFlowApi","apply","_asyncToGenerator","_ref2","url","originalUri","method","responseWrapper","isFileType","isSimpleRequest","toLowerCase","defaultOptions","responseType","response","_len2","_key2","_originalUri$match$le","_originalUri$match","_request$fields$lengt","_request$fields","noParams","match","simpleRequest","isUploadType","result","requestWithBody","registerFlowApiProvider","customElements","define"],"sources":["../../../src/flowApi/FlowApiProvider.ts"],"sourcesContent":["import { createProviderClass } from \"@next-core/utils/general\";\nimport {\n ExtField,\n ContractRequest,\n ContractField,\n ContractFieldItem,\n} from \"@next-core/types\";\nimport { http, HttpOptions, HttpParams } from \"@next-core/http\";\nimport { isEmpty, isObject } from \"lodash\";\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?: ContractRequest;\n isFileType?: boolean;\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(request: ContractRequest | undefined): boolean {\n if (!request || request.type !== \"object\") {\n return false;\n }\n\n const processFields = (fields: ContractField[] | undefined): 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 }: 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 response = await http.simpleRequest(method, url, {\n params,\n ...defaultOptions,\n ...(options as HttpOptions),\n });\n } else {\n const isUploadType = hasFileType(request);\n const result = processExtFields(ext_fields, ...args);\n\n response = await http.requestWithBody(\n method,\n url,\n isUploadType ? transformFormData(result.data as any) : result.data,\n { ...defaultOptions, ...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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"}
@@ -0,0 +1,4 @@
1
+ export { FLOW_API_PROVIDER, registerFlowApiProvider } from "./FlowApiProvider.js";
2
+ export { isFlowApiProvider, getArgsOfFlowApi } from "./FlowApi.js";
3
+ export { collectContract, collectWidgetContract, clearCollectWidgetContract } from "./CollectContracts.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["FLOW_API_PROVIDER","registerFlowApiProvider","isFlowApiProvider","getArgsOfFlowApi","collectContract","collectWidgetContract","clearCollectWidgetContract"],"sources":["../../../src/flowApi/index.ts"],"sourcesContent":["export {\n FLOW_API_PROVIDER,\n registerFlowApiProvider,\n} from \"./FlowApiProvider.js\";\n\nexport { isFlowApiProvider, getArgsOfFlowApi } from \"./FlowApi.js\";\n\nexport {\n collectContract,\n collectWidgetContract,\n clearCollectWidgetContract,\n} from \"./CollectContracts.js\";\n"],"mappings":"AAAA,SACEA,iBAAiB,EACjBC,uBAAuB,QAClB,sBAAsB;AAE7B,SAASC,iBAAiB,EAAEC,gBAAgB,QAAQ,cAAc;AAElE,SACEC,eAAe,EACfC,qBAAqB,EACrBC,0BAA0B,QACrB,uBAAuB"}
@@ -0,0 +1,6 @@
1
+ export { PermissionApi_validatePermissions as validatePermissions } from "@next-api-sdk/micro-app-sdk";
2
+ import * as _checkInstalledApps from "./checkInstalledApps.js";
3
+ export { _checkInstalledApps as checkInstalledApps };
4
+ import * as _flowApi from "./flowApi/index.js";
5
+ export { _flowApi as flowApi };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["PermissionApi_validatePermissions","validatePermissions","_checkInstalledApps","checkInstalledApps","_flowApi","flowApi"],"sources":["../../src/index.ts"],"sourcesContent":["export { PermissionApi_validatePermissions as validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\n\nexport * as checkInstalledApps from \"./checkInstalledApps.js\";\n\nexport * as flowApi from \"./flowApi/index.js\";\n"],"mappings":"AAAA,SAASA,iCAAiC,IAAIC,mBAAmB,QAAQ,6BAA6B;AAAC,YAAAC,mBAAA,MAEnE,yBAAyB;AAAA,SAAAA,mBAAA,IAAjDC,kBAAkB;AAAA,YAAAC,QAAA,MAEL,oBAAoB;AAAA,SAAAA,QAAA,IAAjCC,OAAO"}
@@ -0,0 +1,6 @@
1
+ import type { MicroApp, Storyboard } from "@next-core/types";
2
+ type AppForCheck = Pick<MicroApp, "id" | "currentVersion" | "installStatus">;
3
+ export declare function preCheckInstalledApps(storyboard: Storyboard, hasAppInBootstrap: (appId: string) => boolean): void;
4
+ export declare function waitForCheckingApps(appIds: string[]): Promise<void>;
5
+ export declare function getCheckedApp(appId: string): AppForCheck | undefined;
6
+ export {};
@@ -0,0 +1,5 @@
1
+ import { Contract } from "@next-core/types";
2
+ export declare function collectContract(contracts: Contract[] | undefined): void;
3
+ export declare function collectWidgetContract(contracts: Contract[] | undefined): void;
4
+ export declare function clearCollectWidgetContract(): void;
5
+ export declare function getContract(name: string): Contract | undefined;
@@ -0,0 +1,30 @@
1
+ import { ContractRequest, ContractResponse, ExtField } from "@next-core/types";
2
+ export declare function isFlowApiProvider(provider: string): boolean;
3
+ export declare function getArgsOfFlowApi(provider: string, originalArgs: unknown[], method?: string): Promise<unknown[]>;
4
+ export interface CustomApiDefinition {
5
+ name: string;
6
+ namespace: string;
7
+ version?: string;
8
+ serviceName?: string;
9
+ contract?: {
10
+ endpoint: {
11
+ ext_fields?: ExtField[];
12
+ uri: string;
13
+ method: "POST" | "post" | "PUT" | "put" | "GET" | "get" | "DELETE" | "delete" | "LIST" | "list" | "PATCH" | "patch" | "HEAD" | "head";
14
+ };
15
+ request?: ContractRequest;
16
+ response?: ContractResponse;
17
+ };
18
+ }
19
+ export interface CustomApiProfile {
20
+ uri: string;
21
+ method: string;
22
+ name: string;
23
+ namespace: string;
24
+ serviceName?: string;
25
+ responseWrapper: boolean;
26
+ version?: string;
27
+ isFileType?: boolean;
28
+ ext_fields?: ExtField[];
29
+ request?: ContractRequest;
30
+ }
@@ -0,0 +1,20 @@
1
+ import { ExtField, ContractRequest } from "@next-core/types";
2
+ import { HttpOptions } from "@next-core/http";
3
+ export declare const FLOW_API_PROVIDER = "core.provider-flow-api";
4
+ export interface CustomApiParams {
5
+ url: string;
6
+ originalUri?: string;
7
+ method?: string;
8
+ responseWrapper?: boolean;
9
+ ext_fields?: ExtField[];
10
+ request?: ContractRequest;
11
+ isFileType?: boolean;
12
+ }
13
+ export declare function processExtFields(ext_fields: ExtField[], ...args: unknown[]): {
14
+ data: unknown;
15
+ options: HttpOptions;
16
+ };
17
+ export declare function hasFileType(request: ContractRequest | undefined): boolean;
18
+ export declare function transformFormData(data: Record<string, unknown> | FormData): FormData;
19
+ export declare function callFlowApi({ url, originalUri, method, responseWrapper, ext_fields, request, isFileType, }: CustomApiParams, ...args: unknown[]): Promise<unknown>;
20
+ export declare function registerFlowApiProvider(): void;
@@ -0,0 +1,3 @@
1
+ export { FLOW_API_PROVIDER, registerFlowApiProvider, } from "./FlowApiProvider.js";
2
+ export { isFlowApiProvider, getArgsOfFlowApi } from "./FlowApi.js";
3
+ export { collectContract, collectWidgetContract, clearCollectWidgetContract, } from "./CollectContracts.js";
@@ -0,0 +1,3 @@
1
+ export { PermissionApi_validatePermissions as validatePermissions } from "@next-api-sdk/micro-app-sdk";
2
+ export * as checkInstalledApps from "./checkInstalledApps.js";
3
+ export * as flowApi from "./flowApi/index.js";
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@next-core/easyops-runtime",
3
+ "version": "0.1.0",
4
+ "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/easyops-runtime",
5
+ "license": "GPL-3.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git@github.com:easyops-cn/next-core.git"
9
+ },
10
+ "sideEffects": [
11
+ "*.css"
12
+ ],
13
+ "type": "module",
14
+ "main": "dist/cjs/index.js",
15
+ "module": "dist/esm/index.js",
16
+ "typings": "dist/types/index.d.ts",
17
+ "files": [
18
+ "dist",
19
+ "styles"
20
+ ],
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/types/index.d.ts",
24
+ "import": "./dist/esm/index.js",
25
+ "require": "./dist/cjs/index.js"
26
+ },
27
+ "./package.json": "./package.json"
28
+ },
29
+ "scripts": {
30
+ "clean": "rimraf dist",
31
+ "prestart": "npm run clean",
32
+ "start": "concurrently -k -n types,main \"npm run start:types\" \"npm run start:main\"",
33
+ "start:main": "cross-env NODE_ENV=development build-next-libs --watch",
34
+ "start:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types --project tsconfig.build.json --watch",
35
+ "prebuild": "npm run clean",
36
+ "build": "npm run build:types && npm run build:main",
37
+ "build:main": "cross-env NODE_ENV=production build-next-libs",
38
+ "build:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types --project tsconfig.build.json",
39
+ "test": "cross-env NODE_ENV='test' test-next",
40
+ "test:ci": "cross-env NODE_ENV='test' CI=true test-next"
41
+ },
42
+ "dependencies": {
43
+ "@next-api-sdk/api-gateway-sdk": "^1.1.0",
44
+ "@next-api-sdk/micro-app-sdk": "^1.1.0",
45
+ "@next-api-sdk/micro-app-standalone-sdk": "^1.1.0",
46
+ "@next-core/http": "^1.0.5",
47
+ "@next-core/runtime": "^1.11.0",
48
+ "@next-core/types": "^1.3.0",
49
+ "@next-core/utils": "^1.5.0",
50
+ "js-yaml": "^3.14.1",
51
+ "lodash": "^4.17.21"
52
+ },
53
+ "devDependencies": {
54
+ "@next-core/build-next-libs": "^1.0.4",
55
+ "@next-core/test-next": "^1.0.5"
56
+ },
57
+ "gitHead": "4befd0b5435dd8701ca18962905e0b27ff58e94f"
58
+ }