Skip to content

Commit 7f2a4bb

Browse files
committed
fix apisix backend typing
1 parent 9011884 commit 7f2a4bb

9 files changed

Lines changed: 336 additions & 220 deletions

File tree

libs/backend-apisix/e2e/resources/service-upstream.e2e-spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ describe('Service-Upstreams E2E', () => {
5757
],
5858
});
5959
// Verify that inline upstream has no id and name
60+
// @ts-expect-error ignore
6061
expect(testService?.upstream?.id).toBeUndefined();
6162
expect(testService?.upstream?.name).toBeUndefined();
6263
});
@@ -95,6 +96,7 @@ describe('Service-Upstreams E2E', () => {
9596
expect(testService?.upstream?.nodes).toHaveLength(2);
9697
expect(testService?.upstream).toMatchObject(updatedService.upstream);
9798
// Verify that inline upstream still has no id and name
99+
// @ts-expect-error ignore
98100
expect(testService?.upstream?.id).toBeUndefined();
99101
expect(testService?.upstream?.name).toBeUndefined();
100102
});

libs/backend-apisix/e2e/sync-and-dump-1.e2e-spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -424,11 +424,11 @@ describe('Sync and Dump - 1', () => {
424424
const plugin1Name = 'prometheus';
425425
const plugin1 = {
426426
prefer_name: true,
427-
} as ADCSDK.GlobalRule;
427+
} as unknown as ADCSDK.GlobalRule;
428428
const plugin2Name = 'file-logger';
429429
const plugin2 = {
430430
path: 'logs/file.log',
431-
} as ADCSDK.GlobalRule;
431+
} as unknown as ADCSDK.GlobalRule;
432432

433433
it('Create global rules', async () =>
434434
syncEvents(backend, [
@@ -444,7 +444,7 @@ describe('Sync and Dump - 1', () => {
444444
});
445445

446446
it('Update plugin1', async () => {
447-
plugin1.test = 'test';
447+
plugin1.test = { value: 'test' };
448448
await syncEvents(backend, [
449449
updateEvent(ADCSDK.ResourceType.GLOBAL_RULE, plugin1Name, plugin1),
450450
]);
@@ -502,7 +502,7 @@ describe('Sync and Dump - 1', () => {
502502
});
503503

504504
it('Update plugin1', async () => {
505-
plugin1.test = 'test';
505+
plugin1.test = { value: 'test' };
506506
await syncEvents(backend, [
507507
updateEvent(ADCSDK.ResourceType.PLUGIN_METADATA, plugin1Name, plugin1),
508508
]);

libs/backend-apisix/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
}
1010
},
1111
"devDependencies": {
12+
"@api7/adc-differ": "workspace:*",
1213
"@api7/adc-sdk": "workspace:*",
13-
"@api7/adc-differ": "workspace:*"
14+
"@types/jest": "^30.0.0"
1415
},
1516
"nx": {
1617
"name": "backend-apisix",

libs/backend-apisix/src/fetcher.ts

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -133,27 +133,35 @@ export class Fetcher extends ADCSDK.backend.BackendEventSource {
133133
}
134134

135135
private listGlobalRules() {
136-
return this._list<typing.ListResponse<typing.GlobalRule>>(
136+
return this._list<typing.ListResponse<Record<string, typing.GlobalRule>>>(
137137
ADCSDK.ResourceType.GLOBAL_RULE,
138138
).pipe<ADCSDK.Plugins>(
139139
map(({ list }) =>
140140
// [{ 'key-auth': {}, 'basic-auth': {} }, { 'real-ip': {} }] =>
141141
// { 'key-auth': {}, 'basic-auth': {}, 'real-ip': {} }
142-
Object.fromEntries(
143-
list.flatMap((item) => Object.entries(item.value?.plugins ?? [])),
144-
),
142+
{
143+
console.log('list', list);
144+
145+
const returnData = Object.fromEntries(
146+
list.flatMap((item) => Object.entries(item.value?.plugins ?? [])),
147+
);
148+
149+
console.log('listGlobalRules returnData', returnData);
150+
151+
return returnData;
152+
},
145153
),
146154
);
147155
}
148156

149157
private listPluginMetadata() {
150-
return this._list<typing.ListResponse<typing.PluginMetadata>>(
151-
ADCSDK.ResourceType.PLUGIN_METADATA,
152-
).pipe<ADCSDK.Plugins>(
158+
return this._list<
159+
typing.ListResponse<Record<string, typing.PluginMetadata>>
160+
>(ADCSDK.ResourceType.PLUGIN_METADATA).pipe<ADCSDK.Plugins>(
153161
map(({ list }) =>
154162
Object.fromEntries<ADCSDK.Plugin>(
155163
list.map((item) => [
156-
item.key.split('/').pop(),
164+
item.key.split('/').pop() || item.key,
157165
ADCSDK.utils.recursiveOmitUndefined(item.value),
158166
]),
159167
),
@@ -221,7 +229,7 @@ export class Fetcher extends ADCSDK.backend.BackendEventSource {
221229
// Move plugin templates to route
222230
map((resources) => {
223231
const pluginConfigIdMap = Object.fromEntries(
224-
resources?.[ADCSDK.ResourceType.PLUGIN_CONFIG]?.map((item) => [
232+
(resources?.[ADCSDK.ResourceType.PLUGIN_CONFIG] ?? []).map((item) => [
225233
item.id,
226234
item,
227235
]),
@@ -241,7 +249,7 @@ export class Fetcher extends ADCSDK.backend.BackendEventSource {
241249
// Move upstreams to service or route
242250
map((resources) => {
243251
const upstreamIdMap = Object.fromEntries(
244-
resources?.upstream?.map((item) => [
252+
(resources?.upstream ?? []).map((item) => [
245253
item.id,
246254
this.toADC.transformUpstream(item),
247255
]),
@@ -274,7 +282,7 @@ export class Fetcher extends ADCSDK.backend.BackendEventSource {
274282
serviceDraft.upstream = upstreamIdMap[service.upstream_id];
275283
unset(serviceDraft, 'upstream.id');
276284
unset(serviceDraft, 'upstream.name');
277-
if (upstreamServiceIdMap[service.id])
285+
if (upstreamServiceIdMap?.[service.id])
278286
serviceDraft.upstreams = upstreamServiceIdMap[service.id];
279287
}),
280288
);
@@ -294,7 +302,7 @@ export class Fetcher extends ADCSDK.backend.BackendEventSource {
294302
// Move routes and stream_routes to service
295303
map((config) => {
296304
const serviceIdMap = Object.fromEntries(
297-
resources?.service?.map((item) => [
305+
(resources?.service ?? []).map((item) => [
298306
item.id,
299307
this.toADC.transformService(item),
300308
]),
@@ -305,7 +313,7 @@ export class Fetcher extends ADCSDK.backend.BackendEventSource {
305313
if (!serviceIdMap[item.service_id]) return; //TODO error report
306314
if (!serviceIdMap[item.service_id].routes)
307315
serviceIdMap[item.service_id].routes = [];
308-
serviceIdMap[item.service_id].routes.push(route);
316+
serviceIdMap[item.service_id].routes?.push(route);
309317
}
310318
});
311319
resources?.stream_route?.forEach((item) => {
@@ -314,16 +322,17 @@ export class Fetcher extends ADCSDK.backend.BackendEventSource {
314322
if (!serviceIdMap[item.service_id]) return; //TODO error report
315323
if (!serviceIdMap[item.service_id].stream_routes)
316324
serviceIdMap[item.service_id].stream_routes = [];
317-
serviceIdMap[item.service_id].stream_routes.push(route);
325+
serviceIdMap[item.service_id].stream_routes?.push(route);
318326
}
319327
});
320328
return produce(config, (draft) => {
321329
draft.services = Object.values(serviceIdMap).map((item) =>
322330
ADCSDK.utils.recursiveOmitUndefined({
323331
...item,
324-
routes: item?.routes?.length > 0 ? item.routes : undefined,
332+
routes:
333+
item?.routes?.length || 0 > 0 ? item?.routes : undefined,
325334
stream_routes:
326-
item?.stream_routes?.length > 0
335+
item?.stream_routes?.length || 0 > 0
327336
? item.stream_routes
328337
: undefined,
329338
}),

libs/backend-apisix/src/index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ export class BackendAPISIX implements ADCSDK.Backend {
4848
}
4949
if (opts?.tlsClientCertFile) {
5050
agentConfig.cert = readFileSync(opts.tlsClientCertFile);
51-
agentConfig.key = readFileSync(opts.tlsClientKeyFile);
51+
if (opts?.tlsClientKeyFile) {
52+
agentConfig.key = readFileSync(opts.tlsClientKeyFile);
53+
}
5254
}
5355

5456
config.httpsAgent = new httpsAgent(agentConfig);
@@ -73,7 +75,7 @@ export class BackendAPISIX implements ADCSDK.Backend {
7375
await this.client.get(`/apisix/admin/routes`);
7476
}
7577

76-
public async version() {
78+
public async version(): Promise<SemVer> {
7779
if (this._version) return this._version;
7880

7981
const resp = await this.client.get<{ value: string }>(
@@ -84,10 +86,11 @@ export class BackendAPISIX implements ADCSDK.Backend {
8486
event: { response: resp, description: `Get APISIX version` },
8587
});
8688

87-
this._version = semver.coerce('999.999.999');
89+
const fallback = new semver.SemVer('999.999.999');
90+
this._version = fallback;
8891
if (resp.headers.server) {
8992
const version = (resp.headers.server as string).match(/APISIX\/(.*)/);
90-
if (version) this._version = semver.coerce(version[1]);
93+
if (version) this._version = semver.coerce(version[1]) ?? fallback;
9194
}
9295

9396
return this._version;

libs/backend-apisix/src/operator.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ export class Operator extends ADCSDK.backend.BackendEventSource {
168168
// The sequence of events should not be broken in this process,
169169
// and the correct behavior of the API will depend on the order
170170
// of execution.
171-
reduce((groups, event) => {
171+
reduce((groups: Record<string, Array<ADCSDK.Event>>, event) => {
172172
const key = `${event.resourceType}.${event.type}`;
173173
(groups[key] = groups[key] || []).push(event);
174174
return groups;
@@ -237,7 +237,7 @@ export class Operator extends ADCSDK.backend.BackendEventSource {
237237
(event.newValue as ADCSDK.StreamRoute).id = event.resourceId;
238238
const route = fromADC.transformStreamRoute(
239239
event.newValue as ADCSDK.StreamRoute,
240-
event.parentId,
240+
event.parentId!,
241241
semVerGTE(version, '3.8.0'),
242242
);
243243
if (event.parentId) route.service_id = event.parentId;

libs/backend-apisix/src/typing.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,10 @@ export interface Resources {
194194
[ResourceType.SERVICE]?: Array<Service>;
195195
[ResourceType.CONSUMER]?: Array<Consumer>;
196196
[ResourceType.SSL]?: Array<SSL>;
197-
[ResourceType.GLOBAL_RULE]?: Record<string, GlobalRule>;
197+
[ResourceType.GLOBAL_RULE]?: GlobalRule;
198198
[ResourceType.PLUGIN_CONFIG]?: Array<PluginConfig>;
199199
[ResourceType.CONSUMER_GROUP]?: Array<ConsumerGroup>;
200-
[ResourceType.PLUGIN_METADATA]?: Record<string, PluginMetadata>;
200+
[ResourceType.PLUGIN_METADATA]?: PluginMetadata;
201201
[ResourceType.STREAM_ROUTE]?: Array<StreamRoute>;
202202
[ResourceType.UPSTREAM]?: Array<Upstream>;
203203
}

libs/backend-apisix/tsconfig.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
"extends": "../../tsconfig.base.json",
33
"compilerOptions": {},
44
"files": [],
5-
"include": [],
5+
"include": [
6+
"src",
7+
"e2e"
8+
],
69
"references": [
710
{
811
"path": "../sdk"
@@ -14,4 +17,4 @@
1417
"path": "./tsconfig.spec.json"
1518
}
1619
]
17-
}
20+
}

0 commit comments

Comments
 (0)