@appshell/loader 1.0.0-alpha.10 → 1.0.0-alpha.101

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 (97) hide show
  1. package/README.md +19 -21
  2. package/dist/main.js +1 -1
  3. package/dist/types/config/src/axios.d.ts +0 -1
  4. package/dist/types/config/src/configmap.d.ts +0 -1
  5. package/dist/types/config/src/context.d.ts +8 -5
  6. package/dist/types/config/src/credentials.d.ts +35 -3
  7. package/dist/types/config/src/generate.manifest.d.ts +30 -2
  8. package/dist/types/config/src/index.d.ts +9 -10
  9. package/dist/types/config/src/loader.d.ts +18 -0
  10. package/dist/types/config/src/mappers/appshell.config.d.ts +9 -3
  11. package/dist/types/config/src/outdated.d.ts +0 -1
  12. package/dist/types/config/src/package-name.d.ts +20 -0
  13. package/dist/types/config/src/publish.d.ts +109 -7
  14. package/dist/types/config/src/sync.d.ts +0 -1
  15. package/dist/types/config/src/tls.d.ts +11 -0
  16. package/dist/types/config/src/types.d.ts +184 -31
  17. package/dist/types/config/src/utils/blur.d.ts +0 -1
  18. package/dist/types/config/src/utils/compare.d.ts +0 -1
  19. package/dist/types/config/src/utils/config.d.ts +15 -1
  20. package/dist/types/config/src/utils/copy.d.ts +0 -1
  21. package/dist/types/config/src/utils/dump.d.ts +10 -0
  22. package/dist/types/config/src/utils/index.d.ts +2 -5
  23. package/dist/types/config/src/utils/list.d.ts +0 -1
  24. package/dist/types/config/src/utils/load.d.ts +0 -1
  25. package/dist/types/config/src/validators/AppshellTemplateValidator.d.ts +0 -1
  26. package/dist/types/config/src/validators/index.d.ts +0 -3
  27. package/dist/types/loader/src/index.d.ts +0 -1
  28. package/dist/types/loader/src/loadAppshellComponent.d.ts +13 -14
  29. package/dist/types/loader/src/remoteLoader.d.ts +2 -3
  30. package/dist/types/loader/src/resolvers.d.ts +4 -12
  31. package/dist/types/loader/src/types.d.ts +0 -1
  32. package/dist/types/runtime/src/errors.d.ts +32 -0
  33. package/dist/types/runtime/src/identity.d.ts +47 -0
  34. package/dist/types/runtime/src/index.d.ts +6 -0
  35. package/dist/types/runtime/src/store.d.ts +25 -0
  36. package/dist/types/runtime/src/types.d.ts +9 -0
  37. package/dist/types/runtime/src/wire.d.ts +58 -0
  38. package/package.json +15 -4
  39. package/CHANGELOG.md +0 -201
  40. package/__tests__/fetchDynamicScript.spec.ts +0 -44
  41. package/__tests__/fixtures/TestComponent.ts +0 -3
  42. package/__tests__/loadAppshellComponent.spec.ts +0 -102
  43. package/__tests__/remoteLoader.spec.ts +0 -144
  44. package/__tests__/resolvers.spec.ts +0 -128
  45. package/dist/types/config/src/axios.d.ts.map +0 -1
  46. package/dist/types/config/src/configmap.d.ts.map +0 -1
  47. package/dist/types/config/src/context.d.ts.map +0 -1
  48. package/dist/types/config/src/credentials.d.ts.map +0 -1
  49. package/dist/types/config/src/deregister.d.ts +0 -3
  50. package/dist/types/config/src/deregister.d.ts.map +0 -1
  51. package/dist/types/config/src/generate.env.d.ts +0 -3
  52. package/dist/types/config/src/generate.env.d.ts.map +0 -1
  53. package/dist/types/config/src/generate.global-config.d.ts +0 -10
  54. package/dist/types/config/src/generate.global-config.d.ts.map +0 -1
  55. package/dist/types/config/src/generate.manifest.d.ts.map +0 -1
  56. package/dist/types/config/src/index.d.ts.map +0 -1
  57. package/dist/types/config/src/mappers/appshell.config.d.ts.map +0 -1
  58. package/dist/types/config/src/outdated.d.ts.map +0 -1
  59. package/dist/types/config/src/publish.d.ts.map +0 -1
  60. package/dist/types/config/src/register.d.ts +0 -4
  61. package/dist/types/config/src/register.d.ts.map +0 -1
  62. package/dist/types/config/src/sync.d.ts.map +0 -1
  63. package/dist/types/config/src/types.d.ts.map +0 -1
  64. package/dist/types/config/src/utils/blur.d.ts.map +0 -1
  65. package/dist/types/config/src/utils/compare.d.ts.map +0 -1
  66. package/dist/types/config/src/utils/config.d.ts.map +0 -1
  67. package/dist/types/config/src/utils/copy.d.ts.map +0 -1
  68. package/dist/types/config/src/utils/index.d.ts.map +0 -1
  69. package/dist/types/config/src/utils/isValidUrl.d.ts +0 -3
  70. package/dist/types/config/src/utils/isValidUrl.d.ts.map +0 -1
  71. package/dist/types/config/src/utils/list.d.ts.map +0 -1
  72. package/dist/types/config/src/utils/load.d.ts.map +0 -1
  73. package/dist/types/config/src/utils/loadJson.d.ts +0 -10
  74. package/dist/types/config/src/utils/loadJson.d.ts.map +0 -1
  75. package/dist/types/config/src/utils/merge.d.ts +0 -4
  76. package/dist/types/config/src/utils/merge.d.ts.map +0 -1
  77. package/dist/types/config/src/validators/AppshellGlobalConfigValidator.d.ts +0 -4
  78. package/dist/types/config/src/validators/AppshellGlobalConfigValidator.d.ts.map +0 -1
  79. package/dist/types/config/src/validators/AppshellManifestValidator.d.ts +0 -4
  80. package/dist/types/config/src/validators/AppshellManifestValidator.d.ts.map +0 -1
  81. package/dist/types/config/src/validators/AppshellTemplateValidator.d.ts.map +0 -1
  82. package/dist/types/config/src/validators/index.d.ts.map +0 -1
  83. package/dist/types/loader/src/fetchDynamicScript.d.ts +0 -3
  84. package/dist/types/loader/src/fetchDynamicScript.d.ts.map +0 -1
  85. package/dist/types/loader/src/index.d.ts.map +0 -1
  86. package/dist/types/loader/src/loadAppshellComponent.d.ts.map +0 -1
  87. package/dist/types/loader/src/remoteLoader.d.ts.map +0 -1
  88. package/dist/types/loader/src/resolvers.d.ts.map +0 -1
  89. package/dist/types/loader/src/types.d.ts.map +0 -1
  90. package/src/fetchDynamicScript.ts +0 -49
  91. package/src/index.ts +0 -7
  92. package/src/loadAppshellComponent.ts +0 -48
  93. package/src/remoteLoader.ts +0 -80
  94. package/src/resolvers.ts +0 -110
  95. package/src/types.ts +0 -10
  96. package/tsconfig.json +0 -7
  97. package/webpack.config.js +0 -37
@@ -1,80 +0,0 @@
1
- /* eslint-disable no-underscore-dangle */
2
- import type { AppshellComposition, AppshellGlobalConfig } from '@appshell/config';
3
- import fetchDynamicScript from './fetchDynamicScript';
4
- import loadAppshellComponent from './loadAppshellComponent';
5
- import {
6
- chainResolvers,
7
- inlineResolver,
8
- legacyManifestResolver,
9
- registryResolver,
10
- type RemoteResolver,
11
- } from './resolvers';
12
-
13
- const fetchedScriptCache = new Set<string>();
14
-
15
- declare global {
16
- interface Window {
17
- __appshell_config__?: AppshellComposition;
18
- }
19
- }
20
-
21
- export type RemoteLoaderOptions = {
22
- composition?: AppshellComposition;
23
- /** Replaces the resolver chain outright; a seam for tests and embedders. */
24
- resolver?: RemoteResolver;
25
- };
26
-
27
- export default (config: AppshellGlobalConfig, options: RemoteLoaderOptions = {}) => {
28
- const composition =
29
- options.composition ?? (typeof window === 'undefined' ? undefined : window.__appshell_config__);
30
-
31
- const resolve =
32
- options.resolver ??
33
- chainResolvers(
34
- inlineResolver(composition),
35
- registryResolver(composition),
36
- legacyManifestResolver(config),
37
- );
38
-
39
- return async <TComponent>(key: string) => {
40
- const failed = (err: unknown) =>
41
- new Error(`Failed to load component '${key}'. ${err?.toString()}`);
42
-
43
- let resolution;
44
- try {
45
- resolution = await resolve(key);
46
- } catch (err) {
47
- throw failed(err);
48
- }
49
-
50
- if (!resolution) {
51
- throw new Error(`Remote resource not found in registry. Expected: ${key}`);
52
- }
53
-
54
- const { remote, environment, manifest } = resolution;
55
-
56
- try {
57
- window[`__appshell_env__${remote.scope}`] = environment;
58
-
59
- const loaded =
60
- fetchedScriptCache.has(remote.remoteEntryUrl) ||
61
- (await fetchDynamicScript(remote.remoteEntryUrl));
62
-
63
- if (!loaded) {
64
- return [null, null] as const;
65
- }
66
-
67
- fetchedScriptCache.add(remote.remoteEntryUrl);
68
-
69
- const Component = await loadAppshellComponent<TComponent>(
70
- remote.scope,
71
- remote.module,
72
- remote.shareScope,
73
- );
74
-
75
- return [Component, manifest] as const;
76
- } catch (err) {
77
- throw failed(err);
78
- }
79
- };
80
- };
package/src/resolvers.ts DELETED
@@ -1,110 +0,0 @@
1
- import type {
2
- AppshellComposition,
3
- AppshellGlobalConfig,
4
- AppshellManifest,
5
- ResolvedRemote,
6
- } from '@appshell/config';
7
-
8
- export type RemoteResolution = {
9
- remote: ResolvedRemote;
10
- /** Already merged with the environment's overrides — nothing left for the browser to layer on. */
11
- environment: Record<string, string | number | undefined>;
12
- /** Back-compat payload for `ManifestProvider`; synthesized when the source was a composition. */
13
- manifest: AppshellManifest;
14
- };
15
-
16
- export type RemoteResolver = (key: string) => Promise<RemoteResolution | undefined>;
17
-
18
- const manifestOf = (composition: AppshellComposition, remotes: AppshellManifest['remotes']) => ({
19
- remotes,
20
- environment: composition.environment,
21
- modules: {},
22
- });
23
-
24
- /** The registry inlined the composition into the page, so no network call is needed. */
25
- export const inlineResolver =
26
- (composition?: AppshellComposition): RemoteResolver =>
27
- async (key) => {
28
- const remote = composition?.remotes[key];
29
- if (!composition || !remote) return undefined;
30
-
31
- return {
32
- remote,
33
- environment: composition.environment[remote.scope] ?? {},
34
- manifest: manifestOf(composition, composition.remotes),
35
- };
36
- };
37
-
38
- /** Fetch-on-miss: covers an app activated after this page was served. */
39
- export const registryResolver =
40
- (composition?: AppshellComposition, origin = ''): RemoteResolver =>
41
- async (key) => {
42
- if (!composition) return undefined;
43
-
44
- const url = `${origin}/v1/environments/${composition.environmentId}/remotes/${key}`;
45
- const response = await fetch(url, { credentials: 'include' });
46
- if (!response.ok) return undefined;
47
-
48
- const remote: ResolvedRemote = await response.json();
49
-
50
- return {
51
- remote,
52
- environment: composition.environment[remote.scope] ?? {},
53
- manifest: manifestOf(composition, { [key]: remote }),
54
- };
55
- };
56
-
57
- /**
58
- * Pre-registry hosts: follow `index[key]` to the app's own manifest. The override
59
- * merge stays here because in this mode no server has done it.
60
- */
61
- export const legacyManifestResolver = (config: AppshellGlobalConfig): RemoteResolver => {
62
- const cache = new Map<string, Promise<AppshellManifest>>();
63
-
64
- const fetchManifest = (url: string) => {
65
- const cached = cache.get(url);
66
- if (cached) return cached;
67
-
68
- const pending = fetch(url, { credentials: 'include' }).then(async (response) => {
69
- if (!response.ok) {
70
- throw new Error(`Failed to get manifest from ${url}. ${await response.text()}`);
71
- }
72
- return response.json() as Promise<AppshellManifest>;
73
- });
74
-
75
- cache.set(url, pending);
76
-
77
- return pending;
78
- };
79
-
80
- return async (key) => {
81
- const manifestUrl = config.index?.[key];
82
- if (!manifestUrl) return undefined;
83
-
84
- const manifest = await fetchManifest(manifestUrl);
85
- const remote = manifest?.remotes[key];
86
- if (!remote) return undefined;
87
-
88
- return {
89
- remote,
90
- environment: {
91
- ...(manifest.environment[remote.scope] ?? {}),
92
- ...(config.overrides?.environment?.[remote.scope] ?? {}),
93
- },
94
- manifest,
95
- };
96
- };
97
- };
98
-
99
- export const chainResolvers =
100
- (...resolvers: RemoteResolver[]): RemoteResolver =>
101
- async (key) => {
102
- // eslint-disable-next-line no-restricted-syntax
103
- for (const resolve of resolvers) {
104
- // eslint-disable-next-line no-await-in-loop
105
- const resolution = await resolve(key);
106
- if (resolution) return resolution;
107
- }
108
-
109
- return undefined;
110
- };
package/src/types.ts DELETED
@@ -1,10 +0,0 @@
1
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2
- export type ShareScope<TComponent = any> = Record<
3
- string,
4
- Record<string, { loaded?: 1; get: () => Promise<TComponent>; from: string; eager: boolean }>
5
- >;
6
-
7
- export interface ModuleContainer<TComponent> {
8
- init(shareScope: ShareScope<TComponent>): Promise<void>;
9
- get(module: string): Promise<() => Record<string, TComponent>>;
10
- }
package/tsconfig.json DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "extends": "../../tsconfig",
3
- "compilerOptions": {
4
- "declarationDir": "./dist/types"
5
- },
6
- "include": ["./src"]
7
- }
package/webpack.config.js DELETED
@@ -1,37 +0,0 @@
1
- const path = require('path');
2
- const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
3
-
4
- module.exports = (env, { mode }) => {
5
- const isDevelopment = mode === 'development';
6
-
7
- return {
8
- entry: './src/index',
9
- mode,
10
- devtool: isDevelopment ? 'eval-source-map' : false,
11
- output: {
12
- filename: '[name].js',
13
- pathinfo: false,
14
- libraryTarget: 'umd',
15
- },
16
- resolve: {
17
- extensions: ['.js', '.ts'],
18
- plugins: [new TsconfigPathsPlugin()],
19
- },
20
- module: {
21
- rules: [
22
- {
23
- test: /\.ts$/,
24
- exclude: /node_modules/,
25
- use: [
26
- {
27
- loader: 'babel-loader',
28
- options: {
29
- presets: ['@babel/preset-typescript'],
30
- },
31
- },
32
- ],
33
- },
34
- ],
35
- },
36
- };
37
- };