@akanjs/signal 0.9.47 → 0.9.49
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/cjs/src/apiInfo.js +167 -0
- package/cjs/src/base.signal.js +55 -93
- package/cjs/src/baseFetch.js +1 -2
- package/cjs/src/fetch.js +2 -0
- package/cjs/src/fetchInfo.js +364 -0
- package/cjs/src/gql.js +7 -762
- package/cjs/src/graphql.js +125 -0
- package/cjs/src/index.js +5 -0
- package/cjs/src/internalApiInfo.js +151 -0
- package/cjs/src/signalDecorators.js +114 -148
- package/cjs/src/signalInfo.js +185 -0
- package/cjs/src/sliceInfo.js +193 -0
- package/esm/src/apiInfo.js +152 -0
- package/esm/src/base.signal.js +56 -108
- package/esm/src/baseFetch.js +1 -2
- package/esm/src/fetch.js +2 -0
- package/esm/src/fetchInfo.js +345 -0
- package/esm/src/gql.js +7 -784
- package/esm/src/graphql.js +106 -0
- package/esm/src/index.js +5 -0
- package/esm/src/internalApiInfo.js +137 -0
- package/esm/src/signalDecorators.js +115 -152
- package/esm/src/signalInfo.js +174 -0
- package/esm/src/sliceInfo.js +178 -0
- package/package.json +1 -1
- package/src/apiInfo.d.ts +73 -0
- package/src/base.signal.d.ts +131 -19
- package/src/fetch.d.ts +10 -8
- package/src/fetchInfo.d.ts +19 -0
- package/src/gql.d.ts +12 -48
- package/src/graphql.d.ts +9 -0
- package/src/index.d.ts +5 -0
- package/src/internalApiInfo.d.ts +74 -0
- package/src/signalDecorators.d.ts +71 -42
- package/src/signalInfo.d.ts +78 -0
- package/src/sliceInfo.d.ts +68 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var signalInfo_exports = {};
|
|
19
|
+
__export(signalInfo_exports, {
|
|
20
|
+
signalInfo: () => signalInfo
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(signalInfo_exports);
|
|
23
|
+
var import_base = require("@akanjs/base");
|
|
24
|
+
var import_common = require("@akanjs/common");
|
|
25
|
+
var import_constant = require("@akanjs/constant");
|
|
26
|
+
var import_client = require("./client");
|
|
27
|
+
var import_fetchInfo = require("./fetchInfo");
|
|
28
|
+
var import_signalDecorators = require("./signalDecorators");
|
|
29
|
+
const signalInfo = {
|
|
30
|
+
database: /* @__PURE__ */ new Map(),
|
|
31
|
+
service: /* @__PURE__ */ new Map(),
|
|
32
|
+
serializedSignals: [],
|
|
33
|
+
setDatabase(refName, signal) {
|
|
34
|
+
signalInfo.database.set(refName, signal);
|
|
35
|
+
},
|
|
36
|
+
getDatabase(refName) {
|
|
37
|
+
return signalInfo.database.get(refName);
|
|
38
|
+
},
|
|
39
|
+
setRefNameTemp(sigRef, refName) {
|
|
40
|
+
Reflect.defineMetadata("signal:refName", refName, sigRef.prototype);
|
|
41
|
+
},
|
|
42
|
+
getRefNameTemp(sigRef) {
|
|
43
|
+
const refName = Reflect.getMetadata("signal:refName", sigRef.prototype);
|
|
44
|
+
if (!refName)
|
|
45
|
+
throw new Error("RefName Not Found");
|
|
46
|
+
return refName;
|
|
47
|
+
},
|
|
48
|
+
setPrefixTemp(sigRef, prefix) {
|
|
49
|
+
Reflect.defineMetadata("signal:prefix", prefix, sigRef.prototype);
|
|
50
|
+
},
|
|
51
|
+
getPrefixTemp(sigRef) {
|
|
52
|
+
const prefix = Reflect.getMetadata("signal:prefix", sigRef.prototype);
|
|
53
|
+
return prefix;
|
|
54
|
+
},
|
|
55
|
+
setHandlerKey(execFn, key) {
|
|
56
|
+
Reflect.defineMetadata("signal:key", key, execFn);
|
|
57
|
+
},
|
|
58
|
+
getHandlerKey(execFn) {
|
|
59
|
+
const key = Reflect.getMetadata("signal:key", execFn);
|
|
60
|
+
if (!key)
|
|
61
|
+
throw new Error("Handler key not found");
|
|
62
|
+
return key;
|
|
63
|
+
},
|
|
64
|
+
setService(refName, signal) {
|
|
65
|
+
signalInfo.service.set(refName, signal);
|
|
66
|
+
},
|
|
67
|
+
getService(refName) {
|
|
68
|
+
return signalInfo.service.get(refName);
|
|
69
|
+
},
|
|
70
|
+
registerSignals(...signals) {
|
|
71
|
+
signals.forEach((sigRef) => {
|
|
72
|
+
const refName = signalInfo.getRefNameTemp(sigRef);
|
|
73
|
+
const signalType = import_constant.constantInfo.database.has(refName) ? "database" : "service";
|
|
74
|
+
if (signalType === "database")
|
|
75
|
+
signalInfo.setDatabase(refName, sigRef);
|
|
76
|
+
else
|
|
77
|
+
signalInfo.setService(refName, sigRef);
|
|
78
|
+
});
|
|
79
|
+
signals.forEach((sigRef) => {
|
|
80
|
+
const refName = signalInfo.getRefNameTemp(sigRef);
|
|
81
|
+
const prefix = signalInfo.getPrefixTemp(sigRef);
|
|
82
|
+
const databaseCnst = import_constant.constantInfo.getDatabase(refName, { allowEmpty: true });
|
|
83
|
+
const scalarCnst = import_constant.constantInfo.getScalar(refName, { allowEmpty: true });
|
|
84
|
+
if (databaseCnst) {
|
|
85
|
+
const gqlMetas = (0, import_signalDecorators.getGqlMetas)(sigRef);
|
|
86
|
+
const modelName = refName;
|
|
87
|
+
const listName = `${modelName}ListIn`;
|
|
88
|
+
const slices = [
|
|
89
|
+
{ refName: modelName, sliceName: modelName, argLength: 1, defaultArgs: [{}] },
|
|
90
|
+
...gqlMetas.filter((gqlMeta) => {
|
|
91
|
+
const name = gqlMeta.signalOption.name ?? gqlMeta.key;
|
|
92
|
+
if (!name.includes(listName))
|
|
93
|
+
return false;
|
|
94
|
+
const [retRef, arrDepth] = (0, import_base.getNonArrayModel)(gqlMeta.returns());
|
|
95
|
+
return import_constant.constantInfo.getRefName(retRef) === refName && arrDepth === 1;
|
|
96
|
+
}).map((gqlMeta) => {
|
|
97
|
+
const name = gqlMeta.signalOption.name ?? gqlMeta.key;
|
|
98
|
+
const sliceName = name.replace(listName, `${modelName}In`);
|
|
99
|
+
const [argMetas] = (0, import_signalDecorators.getArgMetas)(sigRef, gqlMeta.key);
|
|
100
|
+
const skipIdx = argMetas.findIndex((argMeta) => argMeta.name === "skip");
|
|
101
|
+
if (skipIdx === -1)
|
|
102
|
+
throw new Error(`Invalid Args for ${sliceName}`);
|
|
103
|
+
const argLength = skipIdx;
|
|
104
|
+
const queryArgRefs = argMetas.slice(0, skipIdx).map((argMeta) => argMeta.returns());
|
|
105
|
+
const defaultArgs = queryArgRefs.map(
|
|
106
|
+
(queryArgRef, idx) => argMetas[idx].argsOption.nullable ? null : (0, import_signalDecorators.getDefaultArg)(queryArgRef)
|
|
107
|
+
);
|
|
108
|
+
return { refName: modelName, sliceName, argLength, defaultArgs };
|
|
109
|
+
})
|
|
110
|
+
];
|
|
111
|
+
(0, import_signalDecorators.setSigMeta)(sigRef, { returns: () => databaseCnst.full, prefix, slices, refName: modelName, enabled: true });
|
|
112
|
+
(0, import_signalDecorators.setSignalRefOnStorage)(modelName, sigRef);
|
|
113
|
+
} else if (scalarCnst) {
|
|
114
|
+
(0, import_signalDecorators.setSigMeta)(sigRef, { returns: () => scalarCnst.model, prefix, slices: [], refName, enabled: true });
|
|
115
|
+
(0, import_signalDecorators.setSignalRefOnStorage)(refName, sigRef);
|
|
116
|
+
} else {
|
|
117
|
+
(0, import_signalDecorators.setSigMeta)(sigRef, { returns: void 0, prefix, slices: [], refName, enabled: true });
|
|
118
|
+
(0, import_signalDecorators.setSignalRefOnStorage)(refName, sigRef);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
return signals;
|
|
122
|
+
},
|
|
123
|
+
serialize(sigRef) {
|
|
124
|
+
const refName = signalInfo.getRefNameTemp(sigRef);
|
|
125
|
+
const { slices, prefix } = (0, import_signalDecorators.getSigMeta)(sigRef);
|
|
126
|
+
const gqlMetaMap = (0, import_signalDecorators.getGqlMetaMapOnPrototype)(sigRef.prototype);
|
|
127
|
+
const serializedSignal = { refName, slices, prefix, endpoint: {} };
|
|
128
|
+
gqlMetaMap.forEach((gqlMeta, key) => {
|
|
129
|
+
if (!["Query", "Mutation", "Pubsub", "Message"].includes(gqlMeta.type))
|
|
130
|
+
return;
|
|
131
|
+
const [argMetas] = (0, import_signalDecorators.getArgMetas)(sigRef, key);
|
|
132
|
+
const [returnRef, arrDepth] = (0, import_base.getNonArrayModel)(gqlMeta.returns());
|
|
133
|
+
const isGqlScalar = import_base.scalarNameMap.has(returnRef);
|
|
134
|
+
const modelType = isGqlScalar ? "scalar" : import_constant.constantInfo.getModelType(returnRef);
|
|
135
|
+
if (!["input", "full", "light", "insight", "scalar"].includes(modelType))
|
|
136
|
+
throw new Error(`Invalid model type: ${modelType}`);
|
|
137
|
+
const refName2 = isGqlScalar ? import_base.scalarNameMap.get(returnRef) : import_constant.constantInfo.getRefName(returnRef);
|
|
138
|
+
serializedSignal.endpoint[key] = {
|
|
139
|
+
type: (0, import_common.lowerlize)(gqlMeta.type),
|
|
140
|
+
signalOption: gqlMeta.signalOption,
|
|
141
|
+
returns: { refName: refName2, modelType, arrDepth },
|
|
142
|
+
args: argMetas.map((argMeta) => {
|
|
143
|
+
const [argRef, arrDepth2] = (0, import_base.getNonArrayModel)(argMeta.returns());
|
|
144
|
+
const isGqlScalar2 = import_base.scalarNameMap.has(argRef);
|
|
145
|
+
const modelType2 = isGqlScalar2 ? "scalar" : import_constant.constantInfo.getModelType(argRef);
|
|
146
|
+
if (!["input", "insight", "scalar"].includes(modelType2))
|
|
147
|
+
throw new Error(`Invalid model type: ${modelType2}`);
|
|
148
|
+
const refName3 = isGqlScalar2 ? import_base.scalarNameMap.get(argRef) : import_constant.constantInfo.getRefName(argRef);
|
|
149
|
+
return {
|
|
150
|
+
type: argMeta.type,
|
|
151
|
+
refName: refName3,
|
|
152
|
+
modelType: modelType2,
|
|
153
|
+
name: argMeta.name,
|
|
154
|
+
argsOption: argMeta.argsOption,
|
|
155
|
+
arrDepth: arrDepth2
|
|
156
|
+
};
|
|
157
|
+
})
|
|
158
|
+
};
|
|
159
|
+
});
|
|
160
|
+
return serializedSignal;
|
|
161
|
+
},
|
|
162
|
+
initialize() {
|
|
163
|
+
const databaseSignals = [...signalInfo.database.values()].map((sigRef) => signalInfo.serialize(sigRef));
|
|
164
|
+
const serviceSignals = [...signalInfo.service.values()].map((sigRef) => signalInfo.serialize(sigRef));
|
|
165
|
+
signalInfo.serializedSignals = [...databaseSignals, ...serviceSignals];
|
|
166
|
+
return signalInfo.buildFetch(signalInfo.serializedSignals);
|
|
167
|
+
},
|
|
168
|
+
buildFetch(signals = [], cnstInfo = import_constant.constantInfo) {
|
|
169
|
+
const databaseSignals = signals.filter((signal) => cnstInfo.database.has(signal.refName));
|
|
170
|
+
const serviceSignals = signals.filter((signal) => !cnstInfo.database.has(signal.refName));
|
|
171
|
+
const fetchComponent = Object.assign(
|
|
172
|
+
{ client: import_client.client },
|
|
173
|
+
...databaseSignals.map((signal) => (0, import_fetchInfo.databaseFetchOf)(signal)),
|
|
174
|
+
...serviceSignals.map((signal) => (0, import_fetchInfo.serviceFetchOf)(signal))
|
|
175
|
+
);
|
|
176
|
+
return Object.assign(global.fetch, fetchComponent);
|
|
177
|
+
},
|
|
178
|
+
registerClient: async (cnst) => {
|
|
179
|
+
const [signals] = await Promise.all([
|
|
180
|
+
(async () => await (await global.fetch(`${import_base.baseClientEnv.serverHttpUri}/getSignals`)).json())()
|
|
181
|
+
]);
|
|
182
|
+
signalInfo.buildFetch(signals);
|
|
183
|
+
return { fetch, signals };
|
|
184
|
+
}
|
|
185
|
+
};
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var sliceInfo_exports = {};
|
|
19
|
+
__export(sliceInfo_exports, {
|
|
20
|
+
SliceInfo: () => SliceInfo,
|
|
21
|
+
sliceInit: () => sliceInit
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(sliceInfo_exports);
|
|
24
|
+
var import_base = require("@akanjs/base");
|
|
25
|
+
var import_common = require("@akanjs/common");
|
|
26
|
+
var import_signalDecorators = require("./signalDecorators");
|
|
27
|
+
var import_signalInfo = require("./signalInfo");
|
|
28
|
+
class SliceInfo {
|
|
29
|
+
full;
|
|
30
|
+
light;
|
|
31
|
+
insight;
|
|
32
|
+
args = [];
|
|
33
|
+
internalArgs = [];
|
|
34
|
+
signalOption;
|
|
35
|
+
guards;
|
|
36
|
+
execFn = null;
|
|
37
|
+
constructor(full, light, insight, signalOptionOrGuard, ...guards) {
|
|
38
|
+
this.full = full;
|
|
39
|
+
this.light = light;
|
|
40
|
+
this.insight = insight;
|
|
41
|
+
this.signalOption = typeof signalOptionOrGuard === "string" ? {} : signalOptionOrGuard ?? {};
|
|
42
|
+
this.guards = [
|
|
43
|
+
.../* @__PURE__ */ new Set([
|
|
44
|
+
...guards,
|
|
45
|
+
...typeof signalOptionOrGuard === "string" ? [signalOptionOrGuard] : ["Public"]
|
|
46
|
+
])
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
param(name, argRef, option) {
|
|
50
|
+
if (this.execFn)
|
|
51
|
+
throw new Error("Query function is already set");
|
|
52
|
+
else if (this.args.at(-1)?.option?.nullable)
|
|
53
|
+
throw new Error("Last argument is nullable");
|
|
54
|
+
this.args.push({ type: "Param", name, argRef, option });
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
body(name, argRef, option) {
|
|
58
|
+
if (this.execFn)
|
|
59
|
+
throw new Error("Query function is already set");
|
|
60
|
+
else if (this.args.at(-1)?.option?.nullable)
|
|
61
|
+
throw new Error("Last argument is nullable");
|
|
62
|
+
this.args.push({ type: "Body", name, argRef, option });
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
search(name, argRef, option) {
|
|
66
|
+
if (this.execFn)
|
|
67
|
+
throw new Error("Query function is already set");
|
|
68
|
+
this.args.push({ type: "Query", name, argRef, option: { ...option, nullable: true } });
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
with(argType, option) {
|
|
72
|
+
if (this.execFn)
|
|
73
|
+
throw new Error("Query function is already set");
|
|
74
|
+
this.internalArgs.push({ type: argType, option });
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
exec(query) {
|
|
78
|
+
if (this.execFn)
|
|
79
|
+
throw new Error("Query function is already set");
|
|
80
|
+
this.execFn = query;
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
applySliceMeta(refName, sigRef, key) {
|
|
84
|
+
if (!this.execFn)
|
|
85
|
+
throw new Error("Query function is not set");
|
|
86
|
+
const execFn = this.execFn;
|
|
87
|
+
const serviceName = `${refName}Service`;
|
|
88
|
+
const argLength = this.args.length;
|
|
89
|
+
const gqlMetaMap = (0, import_signalDecorators.getGqlMetaMapOnPrototype)(sigRef.prototype);
|
|
90
|
+
const argMetas = this.args.map((arg, idx) => {
|
|
91
|
+
const [singleArgRef, argArrDepth] = (0, import_base.getNonArrayModel)(arg.argRef);
|
|
92
|
+
const returnRef = (0, import_base.arraiedModel)(singleArgRef instanceof import_base.Enum ? singleArgRef.type : singleArgRef, argArrDepth);
|
|
93
|
+
return {
|
|
94
|
+
name: arg.name,
|
|
95
|
+
returns: () => returnRef,
|
|
96
|
+
argsOption: { ...arg.option, enum: arg.argRef instanceof import_base.Enum ? arg.argRef : void 0 },
|
|
97
|
+
key,
|
|
98
|
+
idx,
|
|
99
|
+
type: arg.type
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
const skipLimitSortArgMetas = [
|
|
103
|
+
{
|
|
104
|
+
name: "skip",
|
|
105
|
+
returns: () => import_base.Int,
|
|
106
|
+
argsOption: { nullable: true, example: 0 },
|
|
107
|
+
key,
|
|
108
|
+
idx: argLength,
|
|
109
|
+
type: "Query"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: "limit",
|
|
113
|
+
returns: () => import_base.Int,
|
|
114
|
+
argsOption: { nullable: true, example: 20 },
|
|
115
|
+
key,
|
|
116
|
+
idx: argLength + 1,
|
|
117
|
+
type: "Query"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: "sort",
|
|
121
|
+
returns: () => String,
|
|
122
|
+
argsOption: { nullable: true, example: "latest" },
|
|
123
|
+
key,
|
|
124
|
+
idx: argLength + 2,
|
|
125
|
+
type: "Query"
|
|
126
|
+
}
|
|
127
|
+
];
|
|
128
|
+
const internalArgMetas = this.internalArgs.map((arg, idx) => ({
|
|
129
|
+
type: arg.type,
|
|
130
|
+
key,
|
|
131
|
+
idx,
|
|
132
|
+
option: arg.option
|
|
133
|
+
}));
|
|
134
|
+
const listKey = `${refName}List${(0, import_common.capitalize)(key)}`;
|
|
135
|
+
const listFn = async function(...requestArgs) {
|
|
136
|
+
const args = requestArgs.slice(0, argLength);
|
|
137
|
+
const skipLimitSort = requestArgs.slice(argLength, argLength + 3);
|
|
138
|
+
const [skip = 0, limit = 20, sort = "latest"] = skipLimitSort;
|
|
139
|
+
const internalArgs = requestArgs.slice(argLength + 3);
|
|
140
|
+
const query = execFn.apply(this, [...args, ...internalArgs]);
|
|
141
|
+
return await this[serviceName].__list(query, {
|
|
142
|
+
skip,
|
|
143
|
+
limit,
|
|
144
|
+
sort
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
import_signalInfo.signalInfo.setHandlerKey(listFn, listKey);
|
|
148
|
+
sigRef.prototype[listKey] = listFn;
|
|
149
|
+
const listApiMeta = {
|
|
150
|
+
returns: () => [this.full],
|
|
151
|
+
signalOption: this.signalOption,
|
|
152
|
+
key: listKey,
|
|
153
|
+
descriptor: { value: listFn, writable: true, enumerable: false, configurable: true },
|
|
154
|
+
guards: this.guards,
|
|
155
|
+
type: "Query"
|
|
156
|
+
};
|
|
157
|
+
gqlMetaMap.set(listKey, listApiMeta);
|
|
158
|
+
(0, import_signalDecorators.setArgMetas)(
|
|
159
|
+
sigRef,
|
|
160
|
+
listKey,
|
|
161
|
+
[...argMetas, ...skipLimitSortArgMetas],
|
|
162
|
+
internalArgMetas.map((argMeta, idx) => ({ ...argMeta, idx: argLength + 3 + idx }))
|
|
163
|
+
);
|
|
164
|
+
const insightKey = `${refName}Insight${(0, import_common.capitalize)(key)}`;
|
|
165
|
+
const insightFn = async function(...requestArgs) {
|
|
166
|
+
const args = requestArgs.slice(0, argLength);
|
|
167
|
+
const internalArgs = requestArgs.slice(argLength);
|
|
168
|
+
const query = execFn.apply(this, [...args, ...internalArgs]);
|
|
169
|
+
return await this[serviceName].__insight(
|
|
170
|
+
query
|
|
171
|
+
);
|
|
172
|
+
};
|
|
173
|
+
import_signalInfo.signalInfo.setHandlerKey(insightFn, insightKey);
|
|
174
|
+
sigRef.prototype[insightKey] = insightFn;
|
|
175
|
+
const insightApiMeta = {
|
|
176
|
+
returns: () => this.insight,
|
|
177
|
+
signalOption: this.signalOption,
|
|
178
|
+
key: insightKey,
|
|
179
|
+
descriptor: { value: insightFn, writable: true, enumerable: false, configurable: true },
|
|
180
|
+
guards: this.guards,
|
|
181
|
+
type: "Query"
|
|
182
|
+
};
|
|
183
|
+
gqlMetaMap.set(insightKey, insightApiMeta);
|
|
184
|
+
(0, import_signalDecorators.setArgMetas)(
|
|
185
|
+
sigRef,
|
|
186
|
+
insightKey,
|
|
187
|
+
argMetas,
|
|
188
|
+
internalArgMetas.map((argMeta, idx) => ({ ...argMeta, idx: argLength + idx }))
|
|
189
|
+
);
|
|
190
|
+
(0, import_signalDecorators.setGqlMetaMapOnPrototype)(sigRef.prototype, gqlMetaMap);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const sliceInit = (full, light, insight) => (signalOptionOrGuard, ...guards) => new SliceInfo(full, light, insight, signalOptionOrGuard, ...guards);
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { arraiedModel, Enum, getNonArrayModel } from "@akanjs/base";
|
|
2
|
+
import {
|
|
3
|
+
getGqlMetaMapOnPrototype,
|
|
4
|
+
setArgMetas,
|
|
5
|
+
setGqlMetaMapOnPrototype
|
|
6
|
+
} from "./signalDecorators";
|
|
7
|
+
import { signalInfo } from "./signalInfo";
|
|
8
|
+
class ApiInfo {
|
|
9
|
+
type;
|
|
10
|
+
args = [];
|
|
11
|
+
internalArgs = [];
|
|
12
|
+
returnRef;
|
|
13
|
+
signalOption;
|
|
14
|
+
guards;
|
|
15
|
+
execFn = null;
|
|
16
|
+
constructor(type, returnRef, signalOptionOrGuard, ...guards) {
|
|
17
|
+
this.type = type;
|
|
18
|
+
this.returnRef = returnRef;
|
|
19
|
+
this.signalOption = typeof signalOptionOrGuard === "string" ? {} : signalOptionOrGuard ?? {};
|
|
20
|
+
this.guards = [
|
|
21
|
+
.../* @__PURE__ */ new Set([
|
|
22
|
+
...guards,
|
|
23
|
+
...typeof signalOptionOrGuard === "string" ? [signalOptionOrGuard] : ["Public"]
|
|
24
|
+
])
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
param(name, argRef, option) {
|
|
28
|
+
if (this.execFn)
|
|
29
|
+
throw new Error("Query function is already set");
|
|
30
|
+
else if (this.args.at(-1)?.option?.nullable)
|
|
31
|
+
throw new Error("Last argument is nullable");
|
|
32
|
+
this.args.push({ type: "Param", name, argRef, option });
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
body(name, argRef, option) {
|
|
36
|
+
if (this.execFn)
|
|
37
|
+
throw new Error("Query function is already set");
|
|
38
|
+
this.args.push({ type: "Body", name, argRef, option });
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
room(name, argRef, option) {
|
|
42
|
+
if (this.execFn)
|
|
43
|
+
throw new Error("Query function is already set");
|
|
44
|
+
else if (this.args.at(-1)?.option?.nullable)
|
|
45
|
+
throw new Error("Last argument is nullable");
|
|
46
|
+
this.args.push({ type: "Room", name, argRef, option });
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
msg(name, argRef, option) {
|
|
50
|
+
if (this.execFn)
|
|
51
|
+
throw new Error("Query function is already set");
|
|
52
|
+
else if (this.args.at(-1)?.option?.nullable)
|
|
53
|
+
throw new Error("Last argument is nullable");
|
|
54
|
+
this.args.push({ type: "Msg", name, argRef, option });
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
search(name, argRef, option) {
|
|
58
|
+
if (this.execFn)
|
|
59
|
+
throw new Error("Query function is already set");
|
|
60
|
+
this.args.push({ type: "Query", name, argRef, option: { ...option, nullable: true } });
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
with(argType, option) {
|
|
64
|
+
if (this.execFn)
|
|
65
|
+
throw new Error("Query function is already set");
|
|
66
|
+
this.internalArgs.push({ type: argType, option });
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
exec(execFn) {
|
|
70
|
+
if (this.execFn)
|
|
71
|
+
throw new Error("Query function is already set");
|
|
72
|
+
this.execFn = execFn;
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
static #typeTempMap = {
|
|
76
|
+
query: "Query",
|
|
77
|
+
mutation: "Mutation",
|
|
78
|
+
pubsub: "Pubsub",
|
|
79
|
+
message: "Message"
|
|
80
|
+
};
|
|
81
|
+
applyApiMeta(sigRef, key) {
|
|
82
|
+
const execFn = this.execFn;
|
|
83
|
+
if (!execFn)
|
|
84
|
+
throw new Error("Exec function is not set");
|
|
85
|
+
signalInfo.setHandlerKey(execFn, key);
|
|
86
|
+
const [singleReturnRef, returnArrDepth] = getNonArrayModel(this.returnRef);
|
|
87
|
+
const apiMeta = {
|
|
88
|
+
returns: () => arraiedModel(
|
|
89
|
+
singleReturnRef instanceof Enum ? singleReturnRef.type : singleReturnRef,
|
|
90
|
+
returnArrDepth
|
|
91
|
+
),
|
|
92
|
+
signalOption: this.signalOption,
|
|
93
|
+
key,
|
|
94
|
+
descriptor: { value: this.execFn, writable: true, enumerable: false, configurable: true },
|
|
95
|
+
guards: this.guards,
|
|
96
|
+
type: ApiInfo.#typeTempMap[this.type]
|
|
97
|
+
};
|
|
98
|
+
sigRef.prototype[key] = this.execFn;
|
|
99
|
+
const metadataMap = getGqlMetaMapOnPrototype(sigRef.prototype);
|
|
100
|
+
metadataMap.set(key, apiMeta);
|
|
101
|
+
setGqlMetaMapOnPrototype(sigRef.prototype, metadataMap);
|
|
102
|
+
const argMetas = this.args.map((arg, idx) => {
|
|
103
|
+
const [singleArgRef, argArrDepth] = getNonArrayModel(arg.argRef);
|
|
104
|
+
const returnRef = arraiedModel(singleArgRef instanceof Enum ? singleArgRef.type : singleArgRef, argArrDepth);
|
|
105
|
+
return {
|
|
106
|
+
name: arg.name,
|
|
107
|
+
returns: () => returnRef,
|
|
108
|
+
argsOption: { ...arg.option, enum: arg.argRef instanceof Enum ? arg.argRef : void 0 },
|
|
109
|
+
key,
|
|
110
|
+
idx,
|
|
111
|
+
type: arg.type
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
const internalArgMetas = this.internalArgs.map((arg, idx) => ({
|
|
115
|
+
type: arg.type,
|
|
116
|
+
key,
|
|
117
|
+
idx: this.args.length + idx,
|
|
118
|
+
option: arg.option
|
|
119
|
+
}));
|
|
120
|
+
setArgMetas(sigRef, key, argMetas, internalArgMetas);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const makeApiBuilder = () => ({
|
|
124
|
+
query: (returnRef, signalOptionOrGuard, ...guards) => new ApiInfo(
|
|
125
|
+
"query",
|
|
126
|
+
returnRef,
|
|
127
|
+
signalOptionOrGuard,
|
|
128
|
+
...guards
|
|
129
|
+
),
|
|
130
|
+
mutation: (returnRef, signalOptionOrGuard, ...guards) => new ApiInfo(
|
|
131
|
+
"mutation",
|
|
132
|
+
returnRef,
|
|
133
|
+
signalOptionOrGuard,
|
|
134
|
+
...guards
|
|
135
|
+
),
|
|
136
|
+
pubsub: (returnRef, signalOptionOrGuard, ...guards) => new ApiInfo(
|
|
137
|
+
"pubsub",
|
|
138
|
+
returnRef,
|
|
139
|
+
signalOptionOrGuard,
|
|
140
|
+
...guards
|
|
141
|
+
),
|
|
142
|
+
message: (returnRef, signalOptionOrGuard, ...guards) => new ApiInfo(
|
|
143
|
+
"message",
|
|
144
|
+
returnRef,
|
|
145
|
+
signalOptionOrGuard,
|
|
146
|
+
...guards
|
|
147
|
+
)
|
|
148
|
+
});
|
|
149
|
+
export {
|
|
150
|
+
ApiInfo,
|
|
151
|
+
makeApiBuilder
|
|
152
|
+
};
|