@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.
@@ -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
+ }