repluggable-core 0.0.0-pr340.39 → 0.0.0-pr342.44

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 (39) hide show
  1. package/dist/debug/src/API.d.ts +17 -1
  2. package/dist/es/src/API.d.ts +17 -1
  3. package/dist/es/src/API.d.ts.map +1 -1
  4. package/dist/es/src/API.js.map +1 -1
  5. package/dist/es/src/appHost.d.ts.map +1 -1
  6. package/dist/es/src/appHost.js +50 -5
  7. package/dist/es/src/appHost.js.map +1 -1
  8. package/dist/es/src/appHostUtils.d.ts +1 -0
  9. package/dist/es/src/appHostUtils.d.ts.map +1 -1
  10. package/dist/es/src/appHostUtils.js +3 -0
  11. package/dist/es/src/appHostUtils.js.map +1 -1
  12. package/dist/es/test/appHost.spec.js +483 -0
  13. package/dist/es/test/appHost.spec.js.map +1 -1
  14. package/dist/es/testKit/mockPackage.d.ts +1 -0
  15. package/dist/es/testKit/mockPackage.d.ts.map +1 -1
  16. package/dist/es/testKit/mockPackage.js +14 -0
  17. package/dist/es/testKit/mockPackage.js.map +1 -1
  18. package/dist/src/API.d.ts +17 -1
  19. package/dist/src/API.d.ts.map +1 -1
  20. package/dist/src/API.js.map +1 -1
  21. package/dist/src/appHost.d.ts.map +1 -1
  22. package/dist/src/appHost.js +49 -4
  23. package/dist/src/appHost.js.map +1 -1
  24. package/dist/src/appHostUtils.d.ts +1 -0
  25. package/dist/src/appHostUtils.d.ts.map +1 -1
  26. package/dist/src/appHostUtils.js +5 -1
  27. package/dist/src/appHostUtils.js.map +1 -1
  28. package/dist/test/appHost.spec.js +483 -0
  29. package/dist/test/appHost.spec.js.map +1 -1
  30. package/dist/testKit/mockPackage.d.ts +1 -0
  31. package/dist/testKit/mockPackage.d.ts.map +1 -1
  32. package/dist/testKit/mockPackage.js +15 -1
  33. package/dist/testKit/mockPackage.js.map +1 -1
  34. package/package.json +2 -2
  35. package/src/API.ts +18 -2
  36. package/src/appHost.ts +62 -6
  37. package/src/appHostUtils.ts +3 -0
  38. package/test/appHost.spec.ts +506 -0
  39. package/testKit/mockPackage.ts +15 -0
@@ -17,6 +17,7 @@ const appHost_1 = require("../src/appHost");
17
17
  const testKit_1 = require("../testKit");
18
18
  const appHostServices_1 = require("../src/appHostServices");
19
19
  const loggers_1 = require("../src/loggers");
20
+ const mockPackage_1 = require("../testKit/mockPackage");
20
21
  const appHost_mock_1 = require("./appHost.mock");
21
22
  const createSignalItemsDataStructure_1 = require("./createSignalItemsDataStructure");
22
23
  const testHostOptions = {
@@ -1542,5 +1543,487 @@ If the API is intended to be public, it should be declared as "public: true" in
1542
1543
  expect(itemsSpy).toBeCalledTimes(4);
1543
1544
  }));
1544
1545
  });
1546
+ describe('Cold Dependencies', () => {
1547
+ it('should allow entry point to load without waiting for cold dependencies', () => __awaiter(void 0, void 0, void 0, function* () {
1548
+ const host = (0, appHost_1.createAppHost)([], testHostOptions);
1549
+ host.addShells([mockPackage_1.mockPackageWithColdDependency]);
1550
+ expect(host.hasShell(mockPackage_1.mockPackageWithColdDependency.name)).toBe(true);
1551
+ }));
1552
+ it('should return false for hasAPI when cold dependency is not ready', () => __awaiter(void 0, void 0, void 0, function* () {
1553
+ const host = (0, appHost_1.createAppHost)([], testHostOptions);
1554
+ host.addShells([mockPackage_1.mockPackageWithColdDependency]);
1555
+ expect(host.hasAPI(testKit_1.MockAPI)).toBe(false);
1556
+ }));
1557
+ it('should throw when accessing cold dependency that is not ready', () => __awaiter(void 0, void 0, void 0, function* () {
1558
+ const host = (0, appHost_1.createAppHost)([], testHostOptions);
1559
+ host.addShells([mockPackage_1.mockPackageWithColdDependency]);
1560
+ expect(() => host.getAPI(testKit_1.MockAPI)).toThrow();
1561
+ }));
1562
+ it('should throw when accessing cold dependency during entry point attach', () => __awaiter(void 0, void 0, void 0, function* () {
1563
+ const coldDependencyEntryPoint = {
1564
+ name: 'COLD_DEPENDENCY_ENTRY_POINT',
1565
+ getColdDependencyAPIs() {
1566
+ return [testKit_1.MockAPI];
1567
+ },
1568
+ declareAPIs() {
1569
+ return [testKit_1.MockPublicAPI];
1570
+ },
1571
+ attach(shell) {
1572
+ shell.contributeAPI(testKit_1.MockPublicAPI, () => {
1573
+ const mockAPI = shell.getAPI(testKit_1.MockAPI);
1574
+ return {
1575
+ stubTrue: () => mockAPI.stubTrue()
1576
+ };
1577
+ });
1578
+ }
1579
+ };
1580
+ const host = (0, appHost_1.createAppHost)([], testHostOptions);
1581
+ expect(() => host.addShells([coldDependencyEntryPoint])).toThrow();
1582
+ }));
1583
+ it('should throw when accessing cold dependency during entry point extend', () => __awaiter(void 0, void 0, void 0, function* () {
1584
+ const coldDependencyEntryPoint = {
1585
+ name: 'COLD_DEPENDENCY_ENTRY_POINT',
1586
+ getColdDependencyAPIs() {
1587
+ return [testKit_1.MockAPI];
1588
+ },
1589
+ extend(shell) {
1590
+ shell.getAPI(testKit_1.MockAPI).stubTrue();
1591
+ }
1592
+ };
1593
+ const host = (0, appHost_1.createAppHost)([], testHostOptions);
1594
+ expect(() => host.addShells([coldDependencyEntryPoint])).toThrow();
1595
+ }));
1596
+ it('should allow accessing cold dependency via getAPI after initialization completes', () => __awaiter(void 0, void 0, void 0, function* () {
1597
+ const host = (0, appHost_1.createAppHost)([testKit_1.mockPackage], testHostOptions);
1598
+ const shell = (0, testKit_1.addMockShell)(host, {
1599
+ getColdDependencyAPIs: () => [testKit_1.MockAPI]
1600
+ });
1601
+ expect(() => shell.getAPI(testKit_1.MockAPI)).not.toThrow();
1602
+ expect(shell.getAPI(testKit_1.MockAPI).stubTrue()).toBe(true);
1603
+ }));
1604
+ describe('getColdAPI', () => {
1605
+ it('should allow using getColdAPI inside contributeAPI factory', () => __awaiter(void 0, void 0, void 0, function* () {
1606
+ // Problem: You can't call getAPI(coldDep) inside contributeAPI factory because init hasn't completed
1607
+ // Solution: getColdAPI returns a lazy wrapper that defers resolution until the method is actually called
1608
+ const host = (0, appHost_1.createAppHost)([testKit_1.mockPackage], testHostOptions);
1609
+ (0, testKit_1.addMockShell)(host, {
1610
+ getColdDependencyAPIs: () => [testKit_1.MockAPI],
1611
+ declareAPIs: () => [testKit_1.MockPublicAPI],
1612
+ attach(shell) {
1613
+ const mockAPI = shell.getColdAPI(testKit_1.MockAPI);
1614
+ shell.contributeAPI(testKit_1.MockPublicAPI, () => ({
1615
+ stubTrue: () => mockAPI.get().stubTrue()
1616
+ }));
1617
+ }
1618
+ });
1619
+ expect(host.getAPI(testKit_1.MockPublicAPI).stubTrue()).toBe(true);
1620
+ }));
1621
+ it('should resolve cold dependency when get() is called after initialization', () => __awaiter(void 0, void 0, void 0, function* () {
1622
+ const host = (0, appHost_1.createAppHost)([testKit_1.mockPackage], testHostOptions);
1623
+ const shell = (0, testKit_1.addMockShell)(host, {
1624
+ getColdDependencyAPIs: () => [testKit_1.MockAPI]
1625
+ });
1626
+ const lazyAPI = shell.getColdAPI(testKit_1.MockAPI);
1627
+ expect(lazyAPI.get().stubTrue()).toBe(true);
1628
+ }));
1629
+ it('should throw when get() is called and cold dependency is not ready', () => __awaiter(void 0, void 0, void 0, function* () {
1630
+ const host = (0, appHost_1.createAppHost)([], testHostOptions);
1631
+ const shell = (0, testKit_1.addMockShell)(host, {
1632
+ getColdDependencyAPIs: () => [testKit_1.MockAPI]
1633
+ });
1634
+ const lazyAPI = shell.getColdAPI(testKit_1.MockAPI);
1635
+ expect(() => lazyAPI.get()).toThrow();
1636
+ }));
1637
+ it('should cache the API after first get() call', () => __awaiter(void 0, void 0, void 0, function* () {
1638
+ const host = (0, appHost_1.createAppHost)([testKit_1.mockPackage], testHostOptions);
1639
+ const shell = (0, testKit_1.addMockShell)(host, {
1640
+ getColdDependencyAPIs: () => [testKit_1.MockAPI]
1641
+ });
1642
+ const lazyAPI = shell.getColdAPI(testKit_1.MockAPI);
1643
+ const first = lazyAPI.get();
1644
+ const second = lazyAPI.get();
1645
+ expect(first).toBe(second);
1646
+ }));
1647
+ });
1648
+ describe('Cyclic Cold Dependencies', () => {
1649
+ it('should load entry point with cyclic cold dependencies', () => __awaiter(void 0, void 0, void 0, function* () {
1650
+ /**
1651
+ * (A)───cold───>(B)
1652
+ * ^ │
1653
+ * │ │
1654
+ * └────cold─────┘
1655
+ *
1656
+ * A declares APIA, has cold dep on APIB
1657
+ * B declares APIB, has cold dep on APIA
1658
+ */
1659
+ const APIA = { name: 'API_A' };
1660
+ const APIB = { name: 'API_B' };
1661
+ const declaringAWithColdDepOnB = {
1662
+ name: 'ENTRY_POINT_A',
1663
+ getColdDependencyAPIs() {
1664
+ return [APIB];
1665
+ },
1666
+ declareAPIs() {
1667
+ return [APIA];
1668
+ },
1669
+ attach(shell) {
1670
+ shell.contributeAPI(APIA, () => ({
1671
+ stubTrue: () => true
1672
+ }));
1673
+ }
1674
+ };
1675
+ const declaringBWithColdDepOnA = {
1676
+ name: 'ENTRY_POINT_B',
1677
+ getColdDependencyAPIs() {
1678
+ return [APIA];
1679
+ },
1680
+ declareAPIs() {
1681
+ return [APIB];
1682
+ },
1683
+ attach(shell) {
1684
+ shell.contributeAPI(APIB, () => ({
1685
+ stubTrue: () => true
1686
+ }));
1687
+ }
1688
+ };
1689
+ const host = (0, appHost_1.createAppHost)([declaringAWithColdDepOnB, declaringBWithColdDepOnA], testHostOptions);
1690
+ expect(host.hasShell(declaringAWithColdDepOnB.name)).toBe(true);
1691
+ expect(host.hasShell(declaringBWithColdDepOnA.name)).toBe(true);
1692
+ }));
1693
+ it('should load entry points with cyclic cold and regular dependencies', () => __awaiter(void 0, void 0, void 0, function* () {
1694
+ /**
1695
+ * (A)───cold───>(B)───cold───>(C)
1696
+ * ^ │
1697
+ * │ │
1698
+ * └─────────regular────────────┘
1699
+ *
1700
+ * A declares APIA, has cold dep on APIB
1701
+ * B declares APIB, has cold dep on APIC
1702
+ * C declares APIC, has regular dep on APIA
1703
+ */
1704
+ const APIA = { name: 'API_A' };
1705
+ const APIB = { name: 'API_B' };
1706
+ const APIC = { name: 'API_C' };
1707
+ const declaringA = {
1708
+ name: 'ENTRY_POINT_A',
1709
+ getColdDependencyAPIs() {
1710
+ return [APIB];
1711
+ },
1712
+ declareAPIs() {
1713
+ return [APIA];
1714
+ },
1715
+ attach(shell) {
1716
+ shell.contributeAPI(APIA, () => ({
1717
+ stubTrue: () => true
1718
+ }));
1719
+ }
1720
+ };
1721
+ const declaringB = {
1722
+ name: 'ENTRY_POINT_B',
1723
+ getColdDependencyAPIs() {
1724
+ return [APIC];
1725
+ },
1726
+ declareAPIs() {
1727
+ return [APIB];
1728
+ },
1729
+ attach(shell) {
1730
+ shell.contributeAPI(APIB, () => ({
1731
+ stubTrue: () => true
1732
+ }));
1733
+ }
1734
+ };
1735
+ const declaringC = {
1736
+ name: 'ENTRY_POINT_C',
1737
+ getDependencyAPIs() {
1738
+ return [APIA];
1739
+ },
1740
+ declareAPIs() {
1741
+ return [APIC];
1742
+ },
1743
+ attach(shell) {
1744
+ shell.contributeAPI(APIC, () => ({
1745
+ stubTrue: () => true
1746
+ }));
1747
+ }
1748
+ };
1749
+ const host = (0, appHost_1.createAppHost)([declaringA, declaringB, declaringC], testHostOptions);
1750
+ expect(host.hasShell(declaringA.name)).toBe(true);
1751
+ expect(host.hasShell(declaringB.name)).toBe(true);
1752
+ expect(host.hasShell(declaringC.name)).toBe(true);
1753
+ }));
1754
+ });
1755
+ describe('Cold dependency promotion', () => {
1756
+ it('should promote transitive cold dependencies to regular dependencies when there is a real direct dependency', () => __awaiter(void 0, void 0, void 0, function* () {
1757
+ const APIA = { name: 'API_A' };
1758
+ const APIB = { name: 'API_B' };
1759
+ const APIC = { name: 'API_C' };
1760
+ const declaringA = {
1761
+ name: 'ENTRY_POINT_A',
1762
+ declareAPIs() {
1763
+ return [APIA];
1764
+ },
1765
+ attach(shell) {
1766
+ shell.contributeAPI(APIA, () => ({
1767
+ stubTrue: () => true
1768
+ }));
1769
+ }
1770
+ };
1771
+ const declaringBWithColdDepOnA = {
1772
+ name: 'ENTRY_POINT_B',
1773
+ getColdDependencyAPIs() {
1774
+ return [APIA];
1775
+ },
1776
+ declareAPIs() {
1777
+ return [APIB];
1778
+ },
1779
+ attach(shell) {
1780
+ shell.contributeAPI(APIB, () => ({
1781
+ stubTrue: () => true
1782
+ }));
1783
+ }
1784
+ };
1785
+ const declaringCWithRegularDepOnB = {
1786
+ name: 'ENTRY_POINT_C',
1787
+ getDependencyAPIs() {
1788
+ return [APIB];
1789
+ },
1790
+ declareAPIs() {
1791
+ return [APIC];
1792
+ },
1793
+ attach(shell) {
1794
+ shell.contributeAPI(APIC, () => ({
1795
+ stubTrue: () => true
1796
+ }));
1797
+ }
1798
+ };
1799
+ // no APIA in the host
1800
+ const host = (0, appHost_1.createAppHost)([declaringBWithColdDepOnA, declaringCWithRegularDepOnB], testHostOptions);
1801
+ expect(host.hasShell(declaringBWithColdDepOnA.name)).toBe(true);
1802
+ expect(host.hasShell(declaringCWithRegularDepOnB.name)).toBe(false);
1803
+ yield host.addShells([declaringA]);
1804
+ expect(host.hasShell(declaringCWithRegularDepOnB.name)).toBe(true);
1805
+ }));
1806
+ it('should promote cold dependencies from unready entry points added in previous batches', () => __awaiter(void 0, void 0, void 0, function* () {
1807
+ const APIA = { name: 'API_A' };
1808
+ const APIB = { name: 'API_B' };
1809
+ const APIC = { name: 'API_C' };
1810
+ const APIX = { name: 'API_X' };
1811
+ // B declares APIB, depends on APIX (keeps B unready), has cold dep on APIA
1812
+ const declaringB = {
1813
+ name: 'ENTRY_POINT_B',
1814
+ getDependencyAPIs() {
1815
+ return [APIX];
1816
+ },
1817
+ getColdDependencyAPIs() {
1818
+ return [APIA];
1819
+ },
1820
+ declareAPIs() {
1821
+ return [APIB];
1822
+ },
1823
+ attach(shell) {
1824
+ shell.contributeAPI(APIB, () => ({ stubTrue: () => true }));
1825
+ }
1826
+ };
1827
+ // C depends on APIB (from unready B)
1828
+ const declaringC = {
1829
+ name: 'ENTRY_POINT_C',
1830
+ getDependencyAPIs() {
1831
+ return [APIB];
1832
+ },
1833
+ declareAPIs() {
1834
+ return [APIC];
1835
+ },
1836
+ attach(shell) {
1837
+ shell.contributeAPI(APIC, () => ({ stubTrue: () => true }));
1838
+ }
1839
+ };
1840
+ const declaringA = {
1841
+ name: 'ENTRY_POINT_A',
1842
+ declareAPIs() {
1843
+ return [APIA];
1844
+ },
1845
+ attach(shell) {
1846
+ shell.contributeAPI(APIA, () => ({ stubTrue: () => true }));
1847
+ }
1848
+ };
1849
+ const declaringX = {
1850
+ name: 'ENTRY_POINT_X',
1851
+ declareAPIs() {
1852
+ return [APIX];
1853
+ },
1854
+ attach(shell) {
1855
+ shell.contributeAPI(APIX, () => ({ stubTrue: () => true }));
1856
+ }
1857
+ };
1858
+ const host = (0, appHost_1.createAppHost)([], testHostOptions);
1859
+ // Batch 1: Add B (stays unready - needs APIX)
1860
+ yield host.addShells([declaringB]);
1861
+ expect(host.hasShell(declaringB.name)).toBe(false);
1862
+ // Batch 2: Add C (depends on APIB from unready B)
1863
+ // Even though B is unready, C's effective deps should include B's cold dep on APIA
1864
+ yield host.addShells([declaringC]);
1865
+ expect(host.hasShell(declaringC.name)).toBe(false);
1866
+ // Add X only (provides APIX for B)
1867
+ // B can now load and contribute APIB
1868
+ // But C should still wait because B's cold dep (APIA) is promoted to C
1869
+ yield host.addShells([declaringX]);
1870
+ expect(host.hasShell(declaringB.name)).toBe(true);
1871
+ expect(host.hasShell(declaringC.name)).toBe(false);
1872
+ // Add A (provides APIA)
1873
+ yield host.addShells([declaringA]);
1874
+ expect(host.hasShell(declaringC.name)).toBe(true);
1875
+ }));
1876
+ it('should promote cold dependencies through deep regular dependency chains', () => __awaiter(void 0, void 0, void 0, function* () {
1877
+ /**
1878
+ * (A)───regular───>(B)───regular───>(C)───regular───>(D)
1879
+ * │
1880
+ * cold
1881
+ * │
1882
+ * v
1883
+ * (E)
1884
+ *
1885
+ * A depends on B, B depends on C, C depends on D, D has cold dep on E
1886
+ * A should wait for E (cold dep promoted through entire chain)
1887
+ */
1888
+ const APIA = { name: 'API_A' };
1889
+ const APIB = { name: 'API_B' };
1890
+ const APIC = { name: 'API_C' };
1891
+ const APID = { name: 'API_D' };
1892
+ const APIE = { name: 'API_E' };
1893
+ const declaringE = {
1894
+ name: 'ENTRY_POINT_E',
1895
+ declareAPIs() {
1896
+ return [APIE];
1897
+ },
1898
+ attach(shell) {
1899
+ shell.contributeAPI(APIE, () => ({ stubTrue: () => true }));
1900
+ }
1901
+ };
1902
+ const declaringD = {
1903
+ name: 'ENTRY_POINT_D',
1904
+ getColdDependencyAPIs() {
1905
+ return [APIE];
1906
+ },
1907
+ declareAPIs() {
1908
+ return [APID];
1909
+ },
1910
+ attach(shell) {
1911
+ shell.contributeAPI(APID, () => ({ stubTrue: () => true }));
1912
+ }
1913
+ };
1914
+ const declaringC = {
1915
+ name: 'ENTRY_POINT_C',
1916
+ getDependencyAPIs() {
1917
+ return [APID];
1918
+ },
1919
+ declareAPIs() {
1920
+ return [APIC];
1921
+ },
1922
+ attach(shell) {
1923
+ shell.contributeAPI(APIC, () => ({ stubTrue: () => true }));
1924
+ }
1925
+ };
1926
+ const declaringB = {
1927
+ name: 'ENTRY_POINT_B',
1928
+ getDependencyAPIs() {
1929
+ return [APIC];
1930
+ },
1931
+ declareAPIs() {
1932
+ return [APIB];
1933
+ },
1934
+ attach(shell) {
1935
+ shell.contributeAPI(APIB, () => ({ stubTrue: () => true }));
1936
+ }
1937
+ };
1938
+ const declaringA = {
1939
+ name: 'ENTRY_POINT_A',
1940
+ getDependencyAPIs() {
1941
+ return [APIB];
1942
+ },
1943
+ declareAPIs() {
1944
+ return [APIA];
1945
+ },
1946
+ attach(shell) {
1947
+ shell.contributeAPI(APIA, () => ({ stubTrue: () => true }));
1948
+ }
1949
+ };
1950
+ // Without E, D loads (cold dep doesn't block), but A, B, C should wait
1951
+ const host = (0, appHost_1.createAppHost)([declaringA, declaringB, declaringC, declaringD], testHostOptions);
1952
+ expect(host.hasShell(declaringD.name)).toBe(true);
1953
+ expect(host.hasShell(declaringC.name)).toBe(false);
1954
+ expect(host.hasShell(declaringB.name)).toBe(false);
1955
+ expect(host.hasShell(declaringA.name)).toBe(false);
1956
+ // Add E, now everyone can load
1957
+ yield host.addShells([declaringE]);
1958
+ expect(host.hasShell(declaringC.name)).toBe(true);
1959
+ expect(host.hasShell(declaringB.name)).toBe(true);
1960
+ expect(host.hasShell(declaringA.name)).toBe(true);
1961
+ }));
1962
+ });
1963
+ it('should not promote transitive cold dependencies to regular dependencies when there is no real direct dependency', () => __awaiter(void 0, void 0, void 0, function* () {
1964
+ const APIA = { name: 'API_A' };
1965
+ const APIB = { name: 'API_B' };
1966
+ const APIC = { name: 'API_C' };
1967
+ const APID = { name: 'API_D' };
1968
+ const declaringA = {
1969
+ name: 'ENTRY_POINT_A',
1970
+ declareAPIs() {
1971
+ return [APIA];
1972
+ },
1973
+ attach(shell) {
1974
+ shell.contributeAPI(APIA, () => ({
1975
+ stubTrue: () => true
1976
+ }));
1977
+ }
1978
+ };
1979
+ const declaringBWithColdDepOnA = {
1980
+ name: 'ENTRY_POINT_B',
1981
+ getColdDependencyAPIs() {
1982
+ return [APIA];
1983
+ },
1984
+ declareAPIs() {
1985
+ return [APIB];
1986
+ },
1987
+ attach(shell) {
1988
+ shell.contributeAPI(APIB, () => ({
1989
+ stubTrue: () => true
1990
+ }));
1991
+ }
1992
+ };
1993
+ const declaringCWithRegularDepOnB = {
1994
+ name: 'ENTRY_POINT_C',
1995
+ getDependencyAPIs() {
1996
+ return [APIB];
1997
+ },
1998
+ declareAPIs() {
1999
+ return [APIC];
2000
+ },
2001
+ attach(shell) {
2002
+ shell.contributeAPI(APIC, () => ({
2003
+ stubTrue: () => true
2004
+ }));
2005
+ }
2006
+ };
2007
+ const declaringDWithColdDepOnC = {
2008
+ name: 'ENTRY_POINT_D',
2009
+ getColdDependencyAPIs() {
2010
+ return [APIC];
2011
+ },
2012
+ declareAPIs() {
2013
+ return [APID];
2014
+ },
2015
+ attach(shell) {
2016
+ shell.contributeAPI(APID, () => ({
2017
+ stubTrue: () => true
2018
+ }));
2019
+ }
2020
+ };
2021
+ const host = (0, appHost_1.createAppHost)([declaringBWithColdDepOnA, declaringCWithRegularDepOnB, declaringDWithColdDepOnC], testHostOptions);
2022
+ expect(host.hasShell(declaringDWithColdDepOnC.name)).toBe(true);
2023
+ expect(host.hasShell(declaringCWithRegularDepOnB.name)).toBe(false);
2024
+ yield host.addShells([declaringA]);
2025
+ expect(host.hasShell(declaringCWithRegularDepOnB.name)).toBe(true);
2026
+ }));
2027
+ });
1545
2028
  });
1546
2029
  //# sourceMappingURL=appHost.spec.js.map