repluggable-core 0.0.0-pr332.26 → 0.0.0-pr333.24

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.
Files changed (72) hide show
  1. package/dist/debug/src/API.d.ts +1 -8
  2. package/dist/debug/src/extensionSlot.d.ts +2 -13
  3. package/dist/es/src/API.d.ts +1 -8
  4. package/dist/es/src/API.d.ts.map +1 -1
  5. package/dist/es/src/IterableWeakMap.d.ts.map +1 -1
  6. package/dist/es/src/IterableWeakMap.js.map +1 -1
  7. package/dist/es/src/appHost.d.ts.map +1 -1
  8. package/dist/es/src/appHost.js +2 -11
  9. package/dist/es/src/appHost.js.map +1 -1
  10. package/dist/es/src/extensionSlot.d.ts +2 -13
  11. package/dist/es/src/extensionSlot.d.ts.map +1 -1
  12. package/dist/es/src/extensionSlot.js +9 -21
  13. package/dist/es/src/extensionSlot.js.map +1 -1
  14. package/dist/es/src/index.d.ts.map +1 -1
  15. package/dist/es/src/index.js.map +1 -1
  16. package/dist/es/src/throttledStore.d.ts.map +1 -1
  17. package/dist/es/src/throttledStore.js.map +1 -1
  18. package/dist/es/test/appHost.spec.js +0 -71
  19. package/dist/es/test/appHost.spec.js.map +1 -1
  20. package/dist/es/testKit/index.d.ts +0 -1
  21. package/dist/es/testKit/index.d.ts.map +1 -1
  22. package/dist/es/testKit/index.js +0 -1
  23. package/dist/es/testKit/index.js.map +1 -1
  24. package/dist/src/API.d.ts +1 -8
  25. package/dist/src/API.d.ts.map +1 -1
  26. package/dist/src/IterableWeakMap.d.ts.map +1 -1
  27. package/dist/src/IterableWeakMap.js.map +1 -1
  28. package/dist/src/appHost.d.ts.map +1 -1
  29. package/dist/src/appHost.js +2 -11
  30. package/dist/src/appHost.js.map +1 -1
  31. package/dist/src/extensionSlot.d.ts +2 -13
  32. package/dist/src/extensionSlot.d.ts.map +1 -1
  33. package/dist/src/extensionSlot.js +9 -21
  34. package/dist/src/extensionSlot.js.map +1 -1
  35. package/dist/src/index.d.ts.map +1 -1
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/throttledStore.d.ts.map +1 -1
  38. package/dist/src/throttledStore.js.map +1 -1
  39. package/dist/test/appHost.spec.js +0 -71
  40. package/dist/test/appHost.spec.js.map +1 -1
  41. package/dist/testKit/index.d.ts +0 -1
  42. package/dist/testKit/index.d.ts.map +1 -1
  43. package/dist/testKit/index.js +1 -3
  44. package/dist/testKit/index.js.map +1 -1
  45. package/package.json +2 -3
  46. package/src/API.ts +4 -10
  47. package/src/IterableWeakMap.ts +5 -3
  48. package/src/__internal.ts +1 -1
  49. package/src/appHost.ts +2 -10
  50. package/src/extensionSlot.ts +10 -36
  51. package/src/index.ts +5 -2
  52. package/src/throttledStore.ts +15 -9
  53. package/test/appHost.spec.ts +0 -89
  54. package/testKit/index.ts +7 -7
  55. package/dist/es/test/createSignalItemsDataStructure.d.ts +0 -16
  56. package/dist/es/test/createSignalItemsDataStructure.d.ts.map +0 -1
  57. package/dist/es/test/createSignalItemsDataStructure.js +0 -54
  58. package/dist/es/test/createSignalItemsDataStructure.js.map +0 -1
  59. package/dist/es/test/extensionSlot.spec.d.ts +0 -2
  60. package/dist/es/test/extensionSlot.spec.d.ts.map +0 -1
  61. package/dist/es/test/extensionSlot.spec.js +0 -136
  62. package/dist/es/test/extensionSlot.spec.js.map +0 -1
  63. package/dist/test/createSignalItemsDataStructure.d.ts +0 -16
  64. package/dist/test/createSignalItemsDataStructure.d.ts.map +0 -1
  65. package/dist/test/createSignalItemsDataStructure.js +0 -58
  66. package/dist/test/createSignalItemsDataStructure.js.map +0 -1
  67. package/dist/test/extensionSlot.spec.d.ts +0 -2
  68. package/dist/test/extensionSlot.spec.d.ts.map +0 -1
  69. package/dist/test/extensionSlot.spec.js +0 -138
  70. package/dist/test/extensionSlot.spec.js.map +0 -1
  71. package/test/createSignalItemsDataStructure.ts +0 -65
  72. package/test/extensionSlot.spec.ts +0 -176
@@ -32,7 +32,6 @@ import {
32
32
  import { AppHostAPI, AppHostServicesEntryPointName, AppHostServicesProvider } from '../src/appHostServices'
33
33
  import { ConsoleHostLogger } from '../src/loggers'
34
34
  import { createCircularEntryPoints, createDirectCircularEntryPoints } from './appHost.mock'
35
- import { createSignalItemsDataStructure } from './createSignalItemsDataStructure'
36
35
 
37
36
  const testHostOptions: AppHostOptions = {
38
37
  monitoring: { disableMonitoring: true }
@@ -1793,92 +1792,4 @@ If the API is intended to be public, it should be declared as "public: true" in
1793
1792
  )
1794
1793
  })
1795
1794
  })
1796
-
1797
- describe('Custom Items Data Structure via AppHost Options (plugins)', () => {
1798
- it('should use customCreateExtensionSlot from appHostOptions when contributing and removing items', async () => {
1799
- interface SlotItem {
1800
- value: string
1801
- }
1802
- const slotKey: SlotKey<SlotItem> = { name: 'host_options_signal_slot' }
1803
-
1804
- interface SlotContributionAPI {
1805
- contributeItem(fromShell: Shell, item: SlotItem): void
1806
- getItems(): SlotItem[]
1807
- }
1808
- const SlotContributionAPIKey: SlotKey<SlotContributionAPI> = {
1809
- name: 'SLOT_CONTRIBUTION_API'
1810
- }
1811
-
1812
- const itemsSpy = jest.fn()
1813
-
1814
- const { createDataStructure, effect } = createSignalItemsDataStructure()
1815
-
1816
- const slotOwnerEntryPoint: EntryPoint = {
1817
- name: 'SLOT_OWNER_ENTRY_POINT',
1818
- declareAPIs() {
1819
- return [SlotContributionAPIKey]
1820
- },
1821
- attach(shell: Shell) {
1822
- const slot = shell.declareSlot(slotKey)
1823
- shell.contributeAPI(SlotContributionAPIKey, () => ({
1824
- contributeItem(fromShell: Shell, item: SlotItem) {
1825
- slot.contribute(fromShell, item)
1826
- },
1827
- getItems() {
1828
- return slot.getItems().map(item => item.contribution)
1829
- }
1830
- }))
1831
- }
1832
- }
1833
-
1834
- const ContributorEntryPoint: EntryPoint = {
1835
- name: 'CONTRIBUTOR_ENTRY_POINT',
1836
- getDependencyAPIs() {
1837
- return [SlotContributionAPIKey, ListenerAPI]
1838
- },
1839
- extend(shell: Shell) {
1840
- const api = shell.getAPI(SlotContributionAPIKey)
1841
- api.contributeItem(shell, { value: 'item1' })
1842
- api.contributeItem(shell, { value: 'item2' })
1843
- }
1844
- }
1845
-
1846
- const ListenerAPI: SlotKey<{}> = { name: 'LISTENER_API' }
1847
-
1848
- const ListenerEntryPoint: EntryPoint = {
1849
- name: 'LISTENER_ENTRY_POINT',
1850
- declareAPIs() {
1851
- return [ListenerAPI]
1852
- },
1853
- getDependencyAPIs() {
1854
- return [SlotContributionAPIKey]
1855
- },
1856
- // move to attach to make sure
1857
- attach(shell: Shell) {
1858
- const slotContributionAPI = shell.getAPI(SlotContributionAPIKey)
1859
- effect(() => {
1860
- slotContributionAPI.getItems()
1861
- itemsSpy()
1862
- })
1863
- // contribute an api to make sure that the contribution depends on it and happens after.
1864
- shell.contributeAPI(ListenerAPI, () => ({}))
1865
- }
1866
- }
1867
-
1868
- const host = createAppHost([slotOwnerEntryPoint, ContributorEntryPoint, ListenerEntryPoint], {
1869
- monitoring: {},
1870
- plugins: {
1871
- extensionSlot: {
1872
- customCreateExtensionSlot: createDataStructure
1873
- }
1874
- }
1875
- })
1876
-
1877
- // first was created and then two time
1878
- expect(itemsSpy).toBeCalledTimes(3)
1879
-
1880
- await host.removeShells([ContributorEntryPoint.name])
1881
- expect(itemsSpy).toBeCalledTimes(4)
1882
- })
1883
- })
1884
1795
  })
package/testKit/index.ts CHANGED
@@ -4,14 +4,13 @@ import { AnySlotKey, AppHost, createAppHost as _createAppHost, EntryPointOrPacka
4
4
  import { createShellLogger } from '../src/loggers'
5
5
  import { emptyLoggerOptions } from './emptyLoggerOptions'
6
6
 
7
- export { createShellLogger }
7
+ export {createShellLogger}
8
8
  export { emptyLoggerOptions }
9
9
  export { AppHost } from '../src/index'
10
10
 
11
11
  export { withConsoleErrors } from './withConsoleErrors'
12
12
  export { withThrowOnError } from './withThrowOnError'
13
13
  export * from './mockPackage'
14
- export { createSignalItemsDataStructure } from '../test/createSignalItemsDataStructure'
15
14
 
16
15
  export const createAppHost: typeof _createAppHost = (packages, options = emptyLoggerOptions) => {
17
16
  return _createAppHost(packages, options)
@@ -75,10 +74,7 @@ export function createAppHostWithPacts(packages: EntryPointOrPackage[], pacts: P
75
74
  }
76
75
  }
77
76
 
78
- return createAppHost([...packages, pactsEntryPoint], {
79
- ...emptyLoggerOptions,
80
- disableLayersValidation: true
81
- })
77
+ return createAppHost([...packages, pactsEntryPoint], { ...emptyLoggerOptions, disableLayersValidation: true })
82
78
  }
83
79
 
84
80
  export async function createAppHostAndWaitForLoading(packages: EntryPointOrPackage[], pacts: PactAPIBase[]): Promise<AppHost> {
@@ -92,7 +88,7 @@ export async function createAppHostAndWaitForLoading(packages: EntryPointOrPacka
92
88
  setTimeout(() => {
93
89
  const readyAPIs = Array.from(globalThis.repluggableAppDebug.readyAPIs)
94
90
  const unreadyAPIs = declaredAPIs.filter(api => !readyAPIs.some(readyAPI => readyAPI.name === api.name))
95
- const rootUnreadyAPI = globalThis.repluggableAppDebug.utils.getRootUnreadyAPI()
91
+ const rootUnreadyAPI = globalThis.repluggableAppDebug.utils.getRootUnreadyAPI();
96
92
 
97
93
  reject(
98
94
  new Error(
@@ -122,6 +118,7 @@ in addition here's the full list of declared APIs that have not been contributed
122
118
  return Promise.race([timeoutPromise, loadingPromise]).then(() => appHost)
123
119
  }
124
120
 
121
+
125
122
  type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
126
123
  interface EntryPointOverrides extends Omit<EntryPoint, 'name'> {
127
124
  name?: EntryPoint['name']
@@ -162,6 +159,8 @@ export const addMockShell = (host: AppHost, entryPointOverrides: EntryPointOverr
162
159
  return shell
163
160
  }
164
161
 
162
+
163
+
165
164
  export function mockObservable<T>(value: T): ObservableState<T> {
166
165
  return {
167
166
  subscribe: () => {
@@ -172,3 +171,4 @@ export function mockObservable<T>(value: T): ObservableState<T> {
172
171
  }
173
172
  }
174
173
  }
174
+
@@ -1,16 +0,0 @@
1
- import { ExtensionItem } from '../src/API';
2
- interface Signal<T> {
3
- get(): T;
4
- set(value: T): void;
5
- }
6
- export declare const createSignalItemsDataStructure: () => {
7
- createDataStructure: <U>() => {
8
- get: () => ExtensionItem<U>[];
9
- add: (item: ExtensionItem<U>) => void;
10
- discardBy: (predicate: (item: ExtensionItem<U>) => boolean) => void;
11
- };
12
- getSignalToTrack: () => Signal<ExtensionItem<any>[]>;
13
- effect: (fn: () => void) => (() => void);
14
- };
15
- export {};
16
- //# sourceMappingURL=createSignalItemsDataStructure.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSignalItemsDataStructure.d.ts","sourceRoot":"","sources":["../../../test/createSignalItemsDataStructure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG1C,UAAU,MAAM,CAAC,CAAC;IACd,GAAG,IAAI,CAAC,CAAA;IACR,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CACtB;AAkCD,eAAO,MAAM,8BAA8B;;;oBAQf,cAAc,CAAC,CAAC;+BAGL,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,KAAK,OAAO;;;iBAvBtD,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC;CAoC5C,CAAA"}
@@ -1,54 +0,0 @@
1
- let currentEffect = null;
2
- const signal = (initialValue) => {
3
- let value = initialValue;
4
- const subscribers = new Set();
5
- return {
6
- get: () => {
7
- if (currentEffect) {
8
- subscribers.add(currentEffect);
9
- }
10
- return value;
11
- },
12
- set: (newValue) => {
13
- value = newValue;
14
- subscribers.forEach(fn => fn());
15
- }
16
- };
17
- };
18
- const effect = (fn) => {
19
- const execute = () => {
20
- currentEffect = execute;
21
- fn();
22
- currentEffect = null;
23
- };
24
- execute();
25
- return () => {
26
- currentEffect = null;
27
- };
28
- };
29
- export const createSignalItemsDataStructure = () => {
30
- let signalToTrack = null;
31
- return {
32
- createDataStructure: () => {
33
- const itemsSignal = signal([]);
34
- signalToTrack = itemsSignal;
35
- return {
36
- get: () => itemsSignal.get(),
37
- add: (item) => {
38
- itemsSignal.set([...itemsSignal.get(), item]);
39
- },
40
- discardBy: (predicate) => {
41
- itemsSignal.set(itemsSignal.get().filter(predicate));
42
- }
43
- };
44
- },
45
- getSignalToTrack: () => {
46
- if (!signalToTrack) {
47
- throw new Error('Signal to track is not set');
48
- }
49
- return signalToTrack;
50
- },
51
- effect
52
- };
53
- };
54
- //# sourceMappingURL=createSignalItemsDataStructure.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSignalItemsDataStructure.js","sourceRoot":"","sources":["../../../test/createSignalItemsDataStructure.ts"],"names":[],"mappings":"AAQA,IAAI,aAAa,GAAwB,IAAI,CAAA;AAE7C,MAAM,MAAM,GAAG,CAAI,YAAe,EAAa,EAAE;IAC7C,IAAI,KAAK,GAAG,YAAY,CAAA;IACxB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAA;IAEzC,OAAO;QACH,GAAG,EAAE,GAAG,EAAE;YACN,IAAI,aAAa,EAAE,CAAC;gBAChB,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;YAClC,CAAC;YACD,OAAO,KAAK,CAAA;QAChB,CAAC;QACD,GAAG,EAAE,CAAC,QAAW,EAAE,EAAE;YACjB,KAAK,GAAG,QAAQ,CAAA;YAChB,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QACnC,CAAC;KACJ,CAAA;AACL,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,EAAc,EAAgB,EAAE;IAC5C,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,aAAa,GAAG,OAAO,CAAA;QACvB,EAAE,EAAE,CAAA;QACJ,aAAa,GAAG,IAAI,CAAA;IACxB,CAAC,CAAA;IACD,OAAO,EAAE,CAAA;IACT,OAAO,GAAG,EAAE;QACR,aAAa,GAAG,IAAI,CAAA;IACxB,CAAC,CAAA;AACL,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,EAAE;IAC/C,IAAI,aAAa,GAAwC,IAAI,CAAA;IAC7D,OAAO;QACH,mBAAmB,EAAE,GAAM,EAAE;YACzB,MAAM,WAAW,GAAG,MAAM,CAAqB,EAAE,CAAC,CAAA;YAClD,aAAa,GAAG,WAAW,CAAA;YAC3B,OAAO;gBACH,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBAC5B,GAAG,EAAE,CAAC,IAAsB,EAAE,EAAE;oBAC5B,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA;gBACjD,CAAC;gBACD,SAAS,EAAE,CAAC,SAA8C,EAAE,EAAE;oBAC1D,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;gBACxD,CAAC;aACJ,CAAA;QACL,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE;YACnB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;YACjD,CAAC;YACD,OAAO,aAAa,CAAA;QACxB,CAAC;QACD,MAAM;KACT,CAAA;AACL,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=extensionSlot.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extensionSlot.spec.d.ts","sourceRoot":"","sources":["../../../test/extensionSlot.spec.ts"],"names":[],"mappings":""}
@@ -1,136 +0,0 @@
1
- import { createAppHost } from '../src';
2
- import { createExtensionSlot } from '../src/extensionSlot';
3
- import { addMockShell } from '../testKit';
4
- import { createSignalItemsDataStructure } from './createSignalItemsDataStructure';
5
- describe('ExtensionSlot', () => {
6
- describe('Subscribe', () => {
7
- it('should be invoked on contribution', () => {
8
- const slotKey = {
9
- name: 'mock_key'
10
- };
11
- const host = createAppHost([]);
12
- const shell = addMockShell(host);
13
- const spy = jest.fn();
14
- const slot = shell.declareSlot(slotKey);
15
- slot.subscribe(spy);
16
- slot.contribute(shell, () => ({}));
17
- expect(spy).toBeCalledTimes(1);
18
- slot.contribute(shell, () => ({}));
19
- expect(spy).toBeCalledTimes(2);
20
- });
21
- it('should be invoked once when contribution is during installation phase', () => {
22
- const slotKey = {
23
- name: 'MOCK_SLOT'
24
- };
25
- const ContributionAPI = {
26
- name: 'CONTRIBUTION_API'
27
- };
28
- const spy = jest.fn();
29
- const contributionEntryPoint = {
30
- name: 'PRIVATE CONTRIBUTION ENTRY POINT',
31
- declareAPIs() {
32
- return [ContributionAPI];
33
- },
34
- attach(shell) {
35
- const slot = shell.declareSlot(slotKey);
36
- slot.subscribe(spy);
37
- shell.contributeAPI(ContributionAPI, () => ({
38
- contributeItem(fromShell, item) {
39
- shell.getSlot(slotKey).contribute(fromShell, item);
40
- }
41
- }));
42
- }
43
- };
44
- const API_A = { name: 'API_A' };
45
- const itemContributionEntryPointA = {
46
- name: 'ITEM CONTRIBUTION ENTRY POINT A',
47
- getDependencyAPIs() {
48
- return [ContributionAPI];
49
- },
50
- declareAPIs() {
51
- return [API_A];
52
- },
53
- attach(shell) {
54
- shell.contributeAPI(API_A, () => ({}));
55
- },
56
- extend(shell) {
57
- shell.getAPI(ContributionAPI).contributeItem(shell, { name: 'A.1' });
58
- shell.getAPI(ContributionAPI).contributeItem(shell, { name: 'A.2' });
59
- }
60
- };
61
- const itemContributionEntryPointB = {
62
- name: 'ITEM CONTRIBUTION ENTRY POINT B',
63
- getDependencyAPIs() {
64
- return [ContributionAPI, API_A];
65
- },
66
- extend(shell) {
67
- shell.getAPI(ContributionAPI).contributeItem(shell, { name: 'B.1' });
68
- shell.getAPI(ContributionAPI).contributeItem(shell, { name: 'B.2' });
69
- }
70
- };
71
- createAppHost([contributionEntryPoint, itemContributionEntryPointA, itemContributionEntryPointB]);
72
- expect(spy).toBeCalledTimes(1);
73
- });
74
- });
75
- describe('Custom Items Data Structure with Signals', () => {
76
- it('should notify effect when items are added', () => {
77
- const slotKey = { name: 'signal_slot' };
78
- const host = createAppHost([]);
79
- const shell = addMockShell(host);
80
- const { createDataStructure: dataStructure, getSignalToTrack, effect } = createSignalItemsDataStructure();
81
- const effectSpy = jest.fn();
82
- const slot = createExtensionSlot(slotKey, host, {
83
- customCreateExtensionSlot: dataStructure
84
- });
85
- effect(() => {
86
- getSignalToTrack().get();
87
- effectSpy();
88
- });
89
- expect(effectSpy).toHaveBeenCalledTimes(1);
90
- slot.contribute(shell, { value: 'item1' });
91
- expect(effectSpy).toHaveBeenCalledTimes(2);
92
- slot.contribute(shell, { value: 'item2' });
93
- expect(effectSpy).toHaveBeenCalledTimes(3);
94
- });
95
- it('should notify effect when items are filtered/removed', () => {
96
- const slotKey = { name: 'filter_signal_slot' };
97
- const host = createAppHost([]);
98
- const shell = addMockShell(host);
99
- const { createDataStructure: dataStructure, getSignalToTrack, effect } = createSignalItemsDataStructure();
100
- const effectSpy = jest.fn();
101
- const slot = createExtensionSlot(slotKey, host, {
102
- customCreateExtensionSlot: dataStructure
103
- });
104
- effect(() => {
105
- getSignalToTrack().get();
106
- effectSpy();
107
- });
108
- expect(effectSpy).toHaveBeenCalledTimes(1);
109
- slot.contribute(shell, { id: 1 });
110
- slot.contribute(shell, { id: 2 });
111
- expect(effectSpy).toHaveBeenCalledTimes(3);
112
- slot.discardBy((item) => item.contribution.id === 1);
113
- expect(effectSpy).toHaveBeenCalledTimes(4);
114
- });
115
- it('should track signal value correctly', () => {
116
- const slotKey = { name: 'track_slot' };
117
- const host = createAppHost([]);
118
- const shell = addMockShell(host);
119
- const { createDataStructure: dataStructure, getSignalToTrack, effect } = createSignalItemsDataStructure();
120
- let capturedItems = [];
121
- const slot = createExtensionSlot(slotKey, host, {
122
- customCreateExtensionSlot: dataStructure
123
- });
124
- effect(() => {
125
- capturedItems = getSignalToTrack().get();
126
- });
127
- slot.contribute(shell, { name: 'first' });
128
- expect(capturedItems).toHaveLength(1);
129
- expect(capturedItems[0].contribution.name).toBe('first');
130
- slot.contribute(shell, { name: 'second' });
131
- expect(capturedItems).toHaveLength(2);
132
- expect(capturedItems[1].contribution.name).toBe('second');
133
- });
134
- });
135
- });
136
- //# sourceMappingURL=extensionSlot.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extensionSlot.spec.js","sourceRoot":"","sources":["../../../test/extensionSlot.spec.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import { ExtensionItem } from '../src/API';
2
- interface Signal<T> {
3
- get(): T;
4
- set(value: T): void;
5
- }
6
- export declare const createSignalItemsDataStructure: () => {
7
- createDataStructure: <U>() => {
8
- get: () => ExtensionItem<U>[];
9
- add: (item: ExtensionItem<U>) => void;
10
- discardBy: (predicate: (item: ExtensionItem<U>) => boolean) => void;
11
- };
12
- getSignalToTrack: () => Signal<ExtensionItem<any>[]>;
13
- effect: (fn: () => void) => (() => void);
14
- };
15
- export {};
16
- //# sourceMappingURL=createSignalItemsDataStructure.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSignalItemsDataStructure.d.ts","sourceRoot":"","sources":["../../test/createSignalItemsDataStructure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG1C,UAAU,MAAM,CAAC,CAAC;IACd,GAAG,IAAI,CAAC,CAAA;IACR,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CACtB;AAkCD,eAAO,MAAM,8BAA8B;;;oBAQf,cAAc,CAAC,CAAC;+BAGL,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,KAAK,OAAO;;;iBAvBtD,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC;CAoC5C,CAAA"}
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSignalItemsDataStructure = void 0;
4
- let currentEffect = null;
5
- const signal = (initialValue) => {
6
- let value = initialValue;
7
- const subscribers = new Set();
8
- return {
9
- get: () => {
10
- if (currentEffect) {
11
- subscribers.add(currentEffect);
12
- }
13
- return value;
14
- },
15
- set: (newValue) => {
16
- value = newValue;
17
- subscribers.forEach(fn => fn());
18
- }
19
- };
20
- };
21
- const effect = (fn) => {
22
- const execute = () => {
23
- currentEffect = execute;
24
- fn();
25
- currentEffect = null;
26
- };
27
- execute();
28
- return () => {
29
- currentEffect = null;
30
- };
31
- };
32
- const createSignalItemsDataStructure = () => {
33
- let signalToTrack = null;
34
- return {
35
- createDataStructure: () => {
36
- const itemsSignal = signal([]);
37
- signalToTrack = itemsSignal;
38
- return {
39
- get: () => itemsSignal.get(),
40
- add: (item) => {
41
- itemsSignal.set([...itemsSignal.get(), item]);
42
- },
43
- discardBy: (predicate) => {
44
- itemsSignal.set(itemsSignal.get().filter(predicate));
45
- }
46
- };
47
- },
48
- getSignalToTrack: () => {
49
- if (!signalToTrack) {
50
- throw new Error('Signal to track is not set');
51
- }
52
- return signalToTrack;
53
- },
54
- effect
55
- };
56
- };
57
- exports.createSignalItemsDataStructure = createSignalItemsDataStructure;
58
- //# sourceMappingURL=createSignalItemsDataStructure.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSignalItemsDataStructure.js","sourceRoot":"","sources":["../../test/createSignalItemsDataStructure.ts"],"names":[],"mappings":";;;AAQA,IAAI,aAAa,GAAwB,IAAI,CAAA;AAE7C,MAAM,MAAM,GAAG,CAAI,YAAe,EAAa,EAAE;IAC7C,IAAI,KAAK,GAAG,YAAY,CAAA;IACxB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAA;IAEzC,OAAO;QACH,GAAG,EAAE,GAAG,EAAE;YACN,IAAI,aAAa,EAAE,CAAC;gBAChB,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;YAClC,CAAC;YACD,OAAO,KAAK,CAAA;QAChB,CAAC;QACD,GAAG,EAAE,CAAC,QAAW,EAAE,EAAE;YACjB,KAAK,GAAG,QAAQ,CAAA;YAChB,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QACnC,CAAC;KACJ,CAAA;AACL,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,EAAc,EAAgB,EAAE;IAC5C,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,aAAa,GAAG,OAAO,CAAA;QACvB,EAAE,EAAE,CAAA;QACJ,aAAa,GAAG,IAAI,CAAA;IACxB,CAAC,CAAA;IACD,OAAO,EAAE,CAAA;IACT,OAAO,GAAG,EAAE;QACR,aAAa,GAAG,IAAI,CAAA;IACxB,CAAC,CAAA;AACL,CAAC,CAAA;AAEM,MAAM,8BAA8B,GAAG,GAAG,EAAE;IAC/C,IAAI,aAAa,GAAwC,IAAI,CAAA;IAC7D,OAAO;QACH,mBAAmB,EAAE,GAAM,EAAE;YACzB,MAAM,WAAW,GAAG,MAAM,CAAqB,EAAE,CAAC,CAAA;YAClD,aAAa,GAAG,WAAW,CAAA;YAC3B,OAAO;gBACH,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBAC5B,GAAG,EAAE,CAAC,IAAsB,EAAE,EAAE;oBAC5B,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA;gBACjD,CAAC;gBACD,SAAS,EAAE,CAAC,SAA8C,EAAE,EAAE;oBAC1D,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;gBACxD,CAAC;aACJ,CAAA;QACL,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE;YACnB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;YACjD,CAAC;YACD,OAAO,aAAa,CAAA;QACxB,CAAC;QACD,MAAM;KACT,CAAA;AACL,CAAC,CAAA;AAxBY,QAAA,8BAA8B,kCAwB1C"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=extensionSlot.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extensionSlot.spec.d.ts","sourceRoot":"","sources":["../../test/extensionSlot.spec.ts"],"names":[],"mappings":""}
@@ -1,138 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const src_1 = require("../src");
4
- const extensionSlot_1 = require("../src/extensionSlot");
5
- const testKit_1 = require("../testKit");
6
- const createSignalItemsDataStructure_1 = require("./createSignalItemsDataStructure");
7
- describe('ExtensionSlot', () => {
8
- describe('Subscribe', () => {
9
- it('should be invoked on contribution', () => {
10
- const slotKey = {
11
- name: 'mock_key'
12
- };
13
- const host = (0, src_1.createAppHost)([]);
14
- const shell = (0, testKit_1.addMockShell)(host);
15
- const spy = jest.fn();
16
- const slot = shell.declareSlot(slotKey);
17
- slot.subscribe(spy);
18
- slot.contribute(shell, () => ({}));
19
- expect(spy).toBeCalledTimes(1);
20
- slot.contribute(shell, () => ({}));
21
- expect(spy).toBeCalledTimes(2);
22
- });
23
- it('should be invoked once when contribution is during installation phase', () => {
24
- const slotKey = {
25
- name: 'MOCK_SLOT'
26
- };
27
- const ContributionAPI = {
28
- name: 'CONTRIBUTION_API'
29
- };
30
- const spy = jest.fn();
31
- const contributionEntryPoint = {
32
- name: 'PRIVATE CONTRIBUTION ENTRY POINT',
33
- declareAPIs() {
34
- return [ContributionAPI];
35
- },
36
- attach(shell) {
37
- const slot = shell.declareSlot(slotKey);
38
- slot.subscribe(spy);
39
- shell.contributeAPI(ContributionAPI, () => ({
40
- contributeItem(fromShell, item) {
41
- shell.getSlot(slotKey).contribute(fromShell, item);
42
- }
43
- }));
44
- }
45
- };
46
- const API_A = { name: 'API_A' };
47
- const itemContributionEntryPointA = {
48
- name: 'ITEM CONTRIBUTION ENTRY POINT A',
49
- getDependencyAPIs() {
50
- return [ContributionAPI];
51
- },
52
- declareAPIs() {
53
- return [API_A];
54
- },
55
- attach(shell) {
56
- shell.contributeAPI(API_A, () => ({}));
57
- },
58
- extend(shell) {
59
- shell.getAPI(ContributionAPI).contributeItem(shell, { name: 'A.1' });
60
- shell.getAPI(ContributionAPI).contributeItem(shell, { name: 'A.2' });
61
- }
62
- };
63
- const itemContributionEntryPointB = {
64
- name: 'ITEM CONTRIBUTION ENTRY POINT B',
65
- getDependencyAPIs() {
66
- return [ContributionAPI, API_A];
67
- },
68
- extend(shell) {
69
- shell.getAPI(ContributionAPI).contributeItem(shell, { name: 'B.1' });
70
- shell.getAPI(ContributionAPI).contributeItem(shell, { name: 'B.2' });
71
- }
72
- };
73
- (0, src_1.createAppHost)([contributionEntryPoint, itemContributionEntryPointA, itemContributionEntryPointB]);
74
- expect(spy).toBeCalledTimes(1);
75
- });
76
- });
77
- describe('Custom Items Data Structure with Signals', () => {
78
- it('should notify effect when items are added', () => {
79
- const slotKey = { name: 'signal_slot' };
80
- const host = (0, src_1.createAppHost)([]);
81
- const shell = (0, testKit_1.addMockShell)(host);
82
- const { createDataStructure: dataStructure, getSignalToTrack, effect } = (0, createSignalItemsDataStructure_1.createSignalItemsDataStructure)();
83
- const effectSpy = jest.fn();
84
- const slot = (0, extensionSlot_1.createExtensionSlot)(slotKey, host, {
85
- customCreateExtensionSlot: dataStructure
86
- });
87
- effect(() => {
88
- getSignalToTrack().get();
89
- effectSpy();
90
- });
91
- expect(effectSpy).toHaveBeenCalledTimes(1);
92
- slot.contribute(shell, { value: 'item1' });
93
- expect(effectSpy).toHaveBeenCalledTimes(2);
94
- slot.contribute(shell, { value: 'item2' });
95
- expect(effectSpy).toHaveBeenCalledTimes(3);
96
- });
97
- it('should notify effect when items are filtered/removed', () => {
98
- const slotKey = { name: 'filter_signal_slot' };
99
- const host = (0, src_1.createAppHost)([]);
100
- const shell = (0, testKit_1.addMockShell)(host);
101
- const { createDataStructure: dataStructure, getSignalToTrack, effect } = (0, createSignalItemsDataStructure_1.createSignalItemsDataStructure)();
102
- const effectSpy = jest.fn();
103
- const slot = (0, extensionSlot_1.createExtensionSlot)(slotKey, host, {
104
- customCreateExtensionSlot: dataStructure
105
- });
106
- effect(() => {
107
- getSignalToTrack().get();
108
- effectSpy();
109
- });
110
- expect(effectSpy).toHaveBeenCalledTimes(1);
111
- slot.contribute(shell, { id: 1 });
112
- slot.contribute(shell, { id: 2 });
113
- expect(effectSpy).toHaveBeenCalledTimes(3);
114
- slot.discardBy((item) => item.contribution.id === 1);
115
- expect(effectSpy).toHaveBeenCalledTimes(4);
116
- });
117
- it('should track signal value correctly', () => {
118
- const slotKey = { name: 'track_slot' };
119
- const host = (0, src_1.createAppHost)([]);
120
- const shell = (0, testKit_1.addMockShell)(host);
121
- const { createDataStructure: dataStructure, getSignalToTrack, effect } = (0, createSignalItemsDataStructure_1.createSignalItemsDataStructure)();
122
- let capturedItems = [];
123
- const slot = (0, extensionSlot_1.createExtensionSlot)(slotKey, host, {
124
- customCreateExtensionSlot: dataStructure
125
- });
126
- effect(() => {
127
- capturedItems = getSignalToTrack().get();
128
- });
129
- slot.contribute(shell, { name: 'first' });
130
- expect(capturedItems).toHaveLength(1);
131
- expect(capturedItems[0].contribution.name).toBe('first');
132
- slot.contribute(shell, { name: 'second' });
133
- expect(capturedItems).toHaveLength(2);
134
- expect(capturedItems[1].contribution.name).toBe('second');
135
- });
136
- });
137
- });
138
- //# sourceMappingURL=extensionSlot.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extensionSlot.spec.js","sourceRoot":"","sources":["../../test/extensionSlot.spec.ts"],"names":[],"mappings":"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"}