@@ -192,12 +192,12 @@ describe('getUIExtensionPayload', () => {
192192 assets : {
193193 tools : {
194194 name : 'tools' ,
195- url : 'http://tunnel-url.com/extensions/devUUID/assets/tools.json ' ,
195+ url : 'http://tunnel-url.com/extensions/devUUID/assets/CUSTOM_EXTENSION_POINT/ tools' ,
196196 lastUpdated : expect . any ( Number ) ,
197197 } ,
198198 instructions : {
199199 name : 'instructions' ,
200- url : 'http://tunnel-url.com/extensions/devUUID/assets/instructions.md ' ,
200+ url : 'http://tunnel-url.com/extensions/devUUID/assets/CUSTOM_EXTENSION_POINT/ instructions' ,
201201 lastUpdated : expect . any ( Number ) ,
202202 } ,
203203 } ,
@@ -241,12 +241,12 @@ describe('getUIExtensionPayload', () => {
241241 assets : {
242242 main : {
243243 name : 'main' ,
244- url : 'http://tunnel-url.com/extensions/devUUID/assets/test-ui-extension.js ' ,
244+ url : 'http://tunnel-url.com/extensions/devUUID/assets/CUSTOM_EXTENSION_POINT/main ' ,
245245 lastUpdated : expect . any ( Number ) ,
246246 } ,
247247 should_render : {
248248 name : 'should_render' ,
249- url : 'http://tunnel-url.com/extensions/devUUID/assets/test-ui-extension-conditions.js ' ,
249+ url : 'http://tunnel-url.com/extensions/devUUID/assets/CUSTOM_EXTENSION_POINT/should_render ' ,
250250 lastUpdated : expect . any ( Number ) ,
251251 } ,
252252 } ,
@@ -295,12 +295,12 @@ describe('getUIExtensionPayload', () => {
295295 assets : {
296296 main : {
297297 name : 'main' ,
298- url : 'http://tunnel-url.com/extensions/devUUID/assets/dist/test-ui-extension.js ' ,
298+ url : 'http://tunnel-url.com/extensions/devUUID/assets/CUSTOM_EXTENSION_POINT/main ' ,
299299 lastUpdated : expect . any ( Number ) ,
300300 } ,
301301 should_render : {
302302 name : 'should_render' ,
303- url : 'http://tunnel-url.com/extensions/devUUID/assets/dist/test-ui-extension-conditions.js ' ,
303+ url : 'http://tunnel-url.com/extensions/devUUID/assets/CUSTOM_EXTENSION_POINT/should_render ' ,
304304 lastUpdated : expect . any ( Number ) ,
305305 } ,
306306 } ,
@@ -309,6 +309,91 @@ describe('getUIExtensionPayload', () => {
309309 } )
310310 } )
311311
312+ test ( 'emits a distinct URL per extension point even when built assets share a filepath' , async ( ) => {
313+ await inTemporaryDirectory ( async ( tmpDir ) => {
314+ const uiExtension = await testUIExtension ( {
315+ directory : tmpDir ,
316+ configuration : {
317+ name : 'test-ui-extension' ,
318+ type : 'ui_extension' ,
319+ extension_points : [
320+ { target : 'TARGET_A' , module : './src/ExtensionPointA.js' } ,
321+ { target : 'TARGET_B' , module : './src/ExtensionPointB.js' } ,
322+ ] ,
323+ } ,
324+ devUUID : 'devUUID' ,
325+ } )
326+
327+ await setupBuildOutput (
328+ uiExtension ,
329+ tmpDir ,
330+ {
331+ TARGET_A : { main : 'dist/main.js' } ,
332+ TARGET_B : { main : 'dist/main.js' } ,
333+ } ,
334+ { } ,
335+ )
336+
337+ const resolver = new Map < string , string > ( )
338+ const got = await getUIExtensionPayload (
339+ uiExtension ,
340+ tmpDir ,
341+ {
342+ ...createMockOptions ( tmpDir , [ uiExtension ] ) ,
343+ currentDevelopmentPayload : { hidden : true , status : 'success' } ,
344+ } ,
345+ resolver ,
346+ )
347+
348+ expect ( got . extensionPoints ) . toMatchObject ( [
349+ {
350+ target : 'TARGET_A' ,
351+ assets : {
352+ main : { name : 'main' , url : 'http://tunnel-url.com/extensions/devUUID/assets/TARGET_A/main' } ,
353+ } ,
354+ } ,
355+ {
356+ target : 'TARGET_B' ,
357+ assets : {
358+ main : { name : 'main' , url : 'http://tunnel-url.com/extensions/devUUID/assets/TARGET_B/main' } ,
359+ } ,
360+ } ,
361+ ] )
362+ expect ( resolver . get ( 'TARGET_A/main' ) ) . toBe ( 'dist/main.js' )
363+ expect ( resolver . get ( 'TARGET_B/main' ) ) . toBe ( 'dist/main.js' )
364+ } )
365+ } )
366+
367+ test ( 'clears stale resolver entries on each payload regeneration' , async ( ) => {
368+ await inTemporaryDirectory ( async ( tmpDir ) => {
369+ const uiExtension = await testUIExtension ( {
370+ directory : tmpDir ,
371+ configuration : {
372+ name : 'test-ui-extension' ,
373+ type : 'ui_extension' ,
374+ extension_points : [ { target : 'CUSTOM_EXTENSION_POINT' , module : './src/ExtensionPointA.js' } ] ,
375+ } ,
376+ devUUID : 'devUUID' ,
377+ } )
378+
379+ await setupBuildOutput ( uiExtension , tmpDir , { CUSTOM_EXTENSION_POINT : { main : 'dist/main.js' } } , { } )
380+
381+ const resolver = new Map < string , string > ( [ [ 'STALE_TARGET/main' , 'stale.js' ] ] )
382+ await getUIExtensionPayload (
383+ uiExtension ,
384+ tmpDir ,
385+ {
386+ ...createMockOptions ( tmpDir , [ uiExtension ] ) ,
387+ currentDevelopmentPayload : { hidden : true , status : 'success' } ,
388+ } ,
389+ resolver ,
390+ )
391+
392+ expect ( resolver . has ( 'STALE_TARGET/main' ) ) . toBe ( false )
393+ expect ( resolver . get ( 'CUSTOM_EXTENSION_POINT/main' ) ) . toBe ( 'dist/main.js' )
394+ } )
395+ } )
396+
312397 test ( 'maps intents from manifest.json to asset payloads' , async ( ) => {
313398 await inTemporaryDirectory ( async ( tmpDir ) => {
314399 const uiExtension = await testUIExtension ( {
@@ -351,7 +436,7 @@ describe('getUIExtensionPayload', () => {
351436 action : 'create' ,
352437 schema : {
353438 name : 'schema' ,
354- url : 'http://tunnel-url.com/extensions/devUUID/assets/intents/create- schema.json ' ,
439+ url : 'http://tunnel-url.com/extensions/devUUID/assets/CUSTOM_EXTENSION_POINT/ intents/0/ schema' ,
355440 lastUpdated : expect . any ( Number ) ,
356441 } ,
357442 } ,
@@ -360,7 +445,7 @@ describe('getUIExtensionPayload', () => {
360445 action : 'update' ,
361446 schema : {
362447 name : 'schema' ,
363- url : 'http://tunnel-url.com/extensions/devUUID/assets/intents/update- schema.json ' ,
448+ url : 'http://tunnel-url.com/extensions/devUUID/assets/CUSTOM_EXTENSION_POINT/ intents/1/ schema' ,
364449 lastUpdated : expect . any ( Number ) ,
365450 } ,
366451 } ,
@@ -461,7 +546,7 @@ describe('getUIExtensionPayload', () => {
461546 assets : {
462547 tools : {
463548 name : 'tools' ,
464- url : 'http://tunnel-url.com/extensions/devUUID/assets/tools.json ' ,
549+ url : 'http://tunnel-url.com/extensions/devUUID/assets/admin.app.intent.link/tools ' ,
465550 lastUpdated : expect . any ( Number ) ,
466551 } ,
467552 } ,
0 commit comments