@pikku/inspector 0.12.8 → 0.12.9
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/CHANGELOG.md +9 -0
- package/dist/add/add-functions.js +2 -3
- package/dist/add/add-mcp-prompt.js +4 -0
- package/dist/add/add-mcp-resource.js +4 -0
- package/dist/add/add-workflow.js +1 -1
- package/dist/utils/extract-function-name.d.ts +1 -0
- package/dist/utils/extract-function-name.js +27 -32
- package/dist/utils/extract-node-value.js +6 -1
- package/dist/utils/filter-inspector-state.js +7 -3
- package/dist/utils/resolve-versions.js +30 -0
- package/package.json +2 -2
- package/src/add/add-functions.ts +2 -4
- package/src/add/add-mcp-prompt.ts +5 -0
- package/src/add/add-mcp-resource.ts +5 -0
- package/src/add/add-workflow.ts +1 -1
- package/src/utils/extract-function-name.ts +36 -37
- package/src/utils/extract-node-value.test.ts +67 -0
- package/src/utils/extract-node-value.ts +5 -1
- package/src/utils/filter-inspector-state.ts +7 -3
- package/src/utils/resolve-versions.test.ts +141 -0
- package/src/utils/resolve-versions.ts +37 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -215,6 +215,147 @@ describe('resolveLatestVersions', () => {
|
|
|
215
215
|
assert.strictEqual(errors.length, 0)
|
|
216
216
|
})
|
|
217
217
|
|
|
218
|
+
test('exposedMeta propagates all versions when base name is exposed', () => {
|
|
219
|
+
const state = makeState({
|
|
220
|
+
'createUser@v1': {
|
|
221
|
+
pikkuFuncId: 'createUser@v1',
|
|
222
|
+
inputSchemaName: null,
|
|
223
|
+
outputSchemaName: null,
|
|
224
|
+
version: 1,
|
|
225
|
+
},
|
|
226
|
+
createUser: {
|
|
227
|
+
pikkuFuncId: 'createUser',
|
|
228
|
+
inputSchemaName: null,
|
|
229
|
+
outputSchemaName: null,
|
|
230
|
+
},
|
|
231
|
+
})
|
|
232
|
+
state.rpc.exposedMeta['createUser'] = 'createUser'
|
|
233
|
+
state.rpc.internalFiles.set('createUser@v1', {
|
|
234
|
+
path: '/src/user.ts',
|
|
235
|
+
exportedName: 'createUserV1',
|
|
236
|
+
})
|
|
237
|
+
const { logger } = makeLogger()
|
|
238
|
+
|
|
239
|
+
resolveLatestVersions(state, logger)
|
|
240
|
+
|
|
241
|
+
assert.strictEqual(state.rpc.exposedMeta['createUser'], 'createUser@v2')
|
|
242
|
+
assert.strictEqual(state.rpc.exposedMeta['createUser@v1'], 'createUser@v1')
|
|
243
|
+
assert.strictEqual(state.rpc.exposedMeta['createUser@v2'], 'createUser@v2')
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
test('exposedFiles propagated for versioned exposed functions', () => {
|
|
247
|
+
const state = makeState({
|
|
248
|
+
'createUser@v1': {
|
|
249
|
+
pikkuFuncId: 'createUser@v1',
|
|
250
|
+
inputSchemaName: null,
|
|
251
|
+
outputSchemaName: null,
|
|
252
|
+
version: 1,
|
|
253
|
+
},
|
|
254
|
+
createUser: {
|
|
255
|
+
pikkuFuncId: 'createUser',
|
|
256
|
+
inputSchemaName: null,
|
|
257
|
+
outputSchemaName: null,
|
|
258
|
+
},
|
|
259
|
+
})
|
|
260
|
+
state.rpc.exposedMeta['createUser'] = 'createUser'
|
|
261
|
+
state.rpc.internalFiles.set('createUser@v1', {
|
|
262
|
+
path: '/src/user-v1.ts',
|
|
263
|
+
exportedName: 'createUserV1',
|
|
264
|
+
})
|
|
265
|
+
state.rpc.internalFiles.set('createUser', {
|
|
266
|
+
path: '/src/user.ts',
|
|
267
|
+
exportedName: 'createUser',
|
|
268
|
+
})
|
|
269
|
+
const { logger } = makeLogger()
|
|
270
|
+
|
|
271
|
+
resolveLatestVersions(state, logger)
|
|
272
|
+
|
|
273
|
+
assert.ok(state.rpc.exposedFiles.has('createUser@v1'))
|
|
274
|
+
assert.strictEqual(
|
|
275
|
+
state.rpc.exposedFiles.get('createUser@v1')!.exportedName,
|
|
276
|
+
'createUserV1'
|
|
277
|
+
)
|
|
278
|
+
assert.ok(state.rpc.exposedFiles.has('createUser@v2'))
|
|
279
|
+
})
|
|
280
|
+
|
|
281
|
+
test('exposedMeta unchanged when base name is not exposed', () => {
|
|
282
|
+
const state = makeState({
|
|
283
|
+
'createUser@v1': {
|
|
284
|
+
pikkuFuncId: 'createUser@v1',
|
|
285
|
+
inputSchemaName: null,
|
|
286
|
+
outputSchemaName: null,
|
|
287
|
+
version: 1,
|
|
288
|
+
},
|
|
289
|
+
createUser: {
|
|
290
|
+
pikkuFuncId: 'createUser',
|
|
291
|
+
inputSchemaName: null,
|
|
292
|
+
outputSchemaName: null,
|
|
293
|
+
},
|
|
294
|
+
})
|
|
295
|
+
const { logger } = makeLogger()
|
|
296
|
+
|
|
297
|
+
resolveLatestVersions(state, logger)
|
|
298
|
+
|
|
299
|
+
assert.strictEqual(state.rpc.exposedMeta['createUser@v1'], undefined)
|
|
300
|
+
assert.strictEqual(state.rpc.exposedMeta['createUser@v2'], undefined)
|
|
301
|
+
})
|
|
302
|
+
|
|
303
|
+
test('exposedMeta propagates when only explicit versions exist', () => {
|
|
304
|
+
const state = makeState({
|
|
305
|
+
'createUser@v1': {
|
|
306
|
+
pikkuFuncId: 'createUser@v1',
|
|
307
|
+
inputSchemaName: null,
|
|
308
|
+
outputSchemaName: null,
|
|
309
|
+
version: 1,
|
|
310
|
+
},
|
|
311
|
+
'createUser@v2': {
|
|
312
|
+
pikkuFuncId: 'createUser@v2',
|
|
313
|
+
inputSchemaName: null,
|
|
314
|
+
outputSchemaName: null,
|
|
315
|
+
version: 2,
|
|
316
|
+
},
|
|
317
|
+
})
|
|
318
|
+
state.rpc.exposedMeta['createUser'] = 'createUser@v1'
|
|
319
|
+
const { logger } = makeLogger()
|
|
320
|
+
|
|
321
|
+
resolveLatestVersions(state, logger)
|
|
322
|
+
|
|
323
|
+
assert.strictEqual(state.rpc.exposedMeta['createUser'], 'createUser@v2')
|
|
324
|
+
assert.strictEqual(state.rpc.exposedMeta['createUser@v1'], 'createUser@v1')
|
|
325
|
+
assert.strictEqual(state.rpc.exposedMeta['createUser@v2'], 'createUser@v2')
|
|
326
|
+
})
|
|
327
|
+
|
|
328
|
+
test('updates HTTP meta pikkuFuncId when renaming unversioned', () => {
|
|
329
|
+
const state = makeState({
|
|
330
|
+
'createUser@v1': {
|
|
331
|
+
pikkuFuncId: 'createUser@v1',
|
|
332
|
+
inputSchemaName: null,
|
|
333
|
+
outputSchemaName: null,
|
|
334
|
+
version: 1,
|
|
335
|
+
},
|
|
336
|
+
createUser: {
|
|
337
|
+
pikkuFuncId: 'createUser',
|
|
338
|
+
inputSchemaName: null,
|
|
339
|
+
outputSchemaName: null,
|
|
340
|
+
},
|
|
341
|
+
})
|
|
342
|
+
;(state as any).http = {
|
|
343
|
+
meta: {
|
|
344
|
+
post: {
|
|
345
|
+
'/api/users': { pikkuFuncId: 'createUser', route: '/api/users' },
|
|
346
|
+
},
|
|
347
|
+
},
|
|
348
|
+
}
|
|
349
|
+
const { logger } = makeLogger()
|
|
350
|
+
|
|
351
|
+
resolveLatestVersions(state, logger)
|
|
352
|
+
|
|
353
|
+
assert.strictEqual(
|
|
354
|
+
(state as any).http.meta.post['/api/users'].pikkuFuncId,
|
|
355
|
+
'createUser@v2'
|
|
356
|
+
)
|
|
357
|
+
})
|
|
358
|
+
|
|
218
359
|
test('renames files entries when renaming unversioned to versioned', () => {
|
|
219
360
|
const state = makeState({
|
|
220
361
|
'createUser@v1': {
|
|
@@ -91,6 +91,8 @@ export function resolveLatestVersions(
|
|
|
91
91
|
if (state.rpc.exposedMeta[baseName] === oldId) {
|
|
92
92
|
state.rpc.exposedMeta[baseName] = newId
|
|
93
93
|
}
|
|
94
|
+
|
|
95
|
+
updateWiringReferences(state, oldId, newId)
|
|
94
96
|
} else {
|
|
95
97
|
const latest = group.explicit.reduce((a, b) =>
|
|
96
98
|
a.version > b.version ? a : b
|
|
@@ -98,8 +100,43 @@ export function resolveLatestVersions(
|
|
|
98
100
|
state.rpc.internalMeta[baseName] = latest.id
|
|
99
101
|
}
|
|
100
102
|
|
|
103
|
+
if (state.rpc.exposedMeta[baseName]) {
|
|
104
|
+
const latestId = state.rpc.internalMeta[baseName]!
|
|
105
|
+
state.rpc.exposedMeta[baseName] = latestId
|
|
106
|
+
for (const entry of group.explicit) {
|
|
107
|
+
state.rpc.exposedMeta[entry.id] = entry.id
|
|
108
|
+
const fileEntry = state.rpc.internalFiles.get(entry.id)
|
|
109
|
+
if (fileEntry) {
|
|
110
|
+
state.rpc.exposedFiles.set(entry.id, fileEntry)
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (group.unversioned) {
|
|
114
|
+
state.rpc.exposedMeta[latestId] = latestId
|
|
115
|
+
const fileEntry = state.rpc.internalFiles.get(latestId)
|
|
116
|
+
if (fileEntry) {
|
|
117
|
+
state.rpc.exposedFiles.set(latestId, fileEntry)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
101
122
|
for (const entry of group.explicit) {
|
|
102
123
|
state.rpc.invokedFunctions.add(entry.id)
|
|
103
124
|
}
|
|
104
125
|
}
|
|
105
126
|
}
|
|
127
|
+
|
|
128
|
+
function updateWiringReferences(
|
|
129
|
+
state: InspectorState,
|
|
130
|
+
oldId: string,
|
|
131
|
+
newId: string
|
|
132
|
+
): void {
|
|
133
|
+
if (state.http) {
|
|
134
|
+
for (const methods of Object.values(state.http.meta)) {
|
|
135
|
+
for (const meta of Object.values(methods)) {
|
|
136
|
+
if (meta.pikkuFuncId === oldId) {
|
|
137
|
+
meta.pikkuFuncId = newId
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|