@equinor/fusion-framework-cli 10.0.0-beta-cli-2ce11df2efed9cbee27355186d6da472253326a7 → 10.0.0-next-9f6eec8c5a4cb3dd430fc6bee227442a3dc28bb8
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.
- package/CHANGELOG.md +387 -6
- package/README.md +31 -9
- package/dist/bin/build-application.js +22 -1
- package/dist/bin/build-application.js.map +1 -1
- package/dist/bin/bundle-application.js +8 -11
- package/dist/bin/bundle-application.js.map +1 -1
- package/dist/bin/create-dev-serve.js +89 -117
- package/dist/bin/create-dev-serve.js.map +1 -1
- package/dist/bin/create-export-config.js +54 -12
- package/dist/bin/create-export-config.js.map +1 -1
- package/dist/bin/create-export-manifest.js +44 -36
- package/dist/bin/create-export-manifest.js.map +1 -1
- package/dist/bin/dev-portal/AppLoader.js +23 -0
- package/dist/bin/dev-portal/AppLoader.js.map +1 -1
- package/dist/bin/dev-portal/ContextSelector/ContextSelector.js +17 -2
- package/dist/bin/dev-portal/ContextSelector/ContextSelector.js.map +1 -1
- package/dist/bin/dev-portal/ContextSelector/useContextResolver.js +35 -1
- package/dist/bin/dev-portal/ContextSelector/useContextResolver.js.map +1 -1
- package/dist/bin/dev-portal/Header.js +1 -0
- package/dist/bin/dev-portal/Header.js.map +1 -1
- package/dist/bin/dev-portal/PersonSideSheet/index.js +4 -0
- package/dist/bin/dev-portal/PersonSideSheet/index.js.map +1 -1
- package/dist/bin/dev-portal/PersonSideSheet/sheets/FeatureSheetContent.js +4 -0
- package/dist/bin/dev-portal/PersonSideSheet/sheets/FeatureSheetContent.js.map +1 -1
- package/dist/bin/dev-portal/PersonSideSheet/sheets/FeatureTogglerApp.js +3 -0
- package/dist/bin/dev-portal/PersonSideSheet/sheets/FeatureTogglerApp.js.map +1 -1
- package/dist/bin/dev-portal/PersonSideSheet/sheets/FeatureTogglerPortal.js +3 -0
- package/dist/bin/dev-portal/PersonSideSheet/sheets/FeatureTogglerPortal.js.map +1 -1
- package/dist/bin/dev-portal/PersonSideSheet/sheets/LandingSheetContent.js +3 -0
- package/dist/bin/dev-portal/PersonSideSheet/sheets/LandingSheetContent.js.map +1 -1
- package/dist/bin/dev-portal/Router.js +3 -0
- package/dist/bin/dev-portal/Router.js.map +1 -1
- package/dist/bin/dev-portal/config.js +7 -2
- package/dist/bin/dev-portal/config.js.map +1 -1
- package/dist/bin/dev-portal/useAppContextNavigation.js +27 -6
- package/dist/bin/dev-portal/useAppContextNavigation.js.map +1 -1
- package/dist/bin/main.app.js +32 -19
- package/dist/bin/main.app.js.map +1 -1
- package/dist/bin/main.js +3 -0
- package/dist/bin/main.js.map +1 -1
- package/dist/bin/public/assets/index-CwGBhRCD.js +5235 -0
- package/dist/bin/public/index.html +1 -1
- package/dist/bin/publish-application.js +75 -20
- package/dist/bin/publish-application.js.map +1 -1
- package/dist/bin/tag-application.js +52 -16
- package/dist/bin/tag-application.js.map +1 -1
- package/dist/bin/upload-application.js +47 -14
- package/dist/bin/upload-application.js.map +1 -1
- package/dist/bin/utils/{execute-commant.js → execute-command.js} +5 -2
- package/dist/bin/utils/execute-command.js.map +1 -0
- package/dist/bin/utils/format.js +1 -1
- package/dist/bin/utils/format.js.map +1 -1
- package/dist/bin/utils/getEndpointUrl.js +49 -0
- package/dist/bin/utils/getEndpointUrl.js.map +1 -0
- package/dist/bin/utils/index.js +14 -0
- package/dist/bin/utils/index.js.map +1 -0
- package/dist/bin/utils/isAppRegistered.js +32 -0
- package/dist/bin/utils/isAppRegistered.js.map +1 -0
- package/dist/bin/utils/load-app-config.js +1 -0
- package/dist/bin/utils/load-app-config.js.map +1 -1
- package/dist/bin/utils/load-manifest.js +9 -4
- package/dist/bin/utils/load-manifest.js.map +1 -1
- package/dist/bin/utils/proxy-request-logger.js +34 -0
- package/dist/bin/utils/proxy-request-logger.js.map +1 -0
- package/dist/bin/utils/publishAppConfig.js +36 -0
- package/dist/bin/utils/publishAppConfig.js.map +1 -0
- package/dist/bin/utils/requireToken.js +10 -0
- package/dist/bin/utils/requireToken.js.map +1 -0
- package/dist/bin/utils/spinner.js +10 -0
- package/dist/bin/utils/spinner.js.map +1 -1
- package/dist/bin/utils/tagAppBundle.js +35 -0
- package/dist/bin/utils/tagAppBundle.js.map +1 -0
- package/dist/bin/utils/uploadAppBundle.js +54 -0
- package/dist/bin/utils/uploadAppBundle.js.map +1 -0
- package/dist/lib/app-config.js +3 -1
- package/dist/lib/app-config.js.map +1 -1
- package/dist/lib/app-manifest.js +97 -15
- package/dist/lib/app-manifest.js.map +1 -1
- package/dist/lib/app-package.js +52 -5
- package/dist/lib/app-package.js.map +1 -1
- package/dist/lib/plugins/app-assets/app-asset-plugin.js +102 -0
- package/dist/lib/plugins/app-assets/app-asset-plugin.js.map +1 -0
- package/dist/lib/plugins/app-assets/emit-asset.js +41 -0
- package/dist/lib/plugins/app-assets/emit-asset.js.map +1 -0
- package/dist/lib/plugins/app-assets/extension-filter-pattern.js +20 -0
- package/dist/lib/plugins/app-assets/extension-filter-pattern.js.map +1 -0
- package/dist/lib/plugins/app-assets/index.js +4 -0
- package/dist/lib/plugins/app-assets/index.js.map +1 -0
- package/dist/lib/plugins/app-assets/read-asset-content.js +34 -0
- package/dist/lib/plugins/app-assets/read-asset-content.js.map +1 -0
- package/dist/lib/plugins/app-assets/resolve-asset-id.js +63 -0
- package/dist/lib/plugins/app-assets/resolve-asset-id.js.map +1 -0
- package/dist/lib/plugins/app-assets/static.js +15 -0
- package/dist/lib/plugins/app-assets/static.js.map +1 -0
- package/dist/lib/plugins/app-proxy/app-proxy-plugin.js +127 -0
- package/dist/lib/plugins/app-proxy/app-proxy-plugin.js.map +1 -0
- package/dist/lib/plugins/app-proxy/index.js +2 -0
- package/dist/lib/plugins/app-proxy/index.js.map +1 -0
- package/dist/lib/plugins/external-public/external-public-plugin.js +103 -0
- package/dist/lib/plugins/external-public/external-public-plugin.js.map +1 -0
- package/dist/lib/plugins/external-public/index.js +2 -0
- package/dist/lib/plugins/external-public/index.js.map +1 -0
- package/dist/lib/utils/assert.js +2 -1
- package/dist/lib/utils/assert.js.map +1 -1
- package/dist/lib/utils/config.js +5 -0
- package/dist/lib/utils/config.js.map +1 -1
- package/dist/lib/vite-config.js +4 -4
- package/dist/lib/vite-config.js.map +1 -1
- package/dist/lib/vite-logger.js +2 -0
- package/dist/lib/vite-logger.js.map +1 -1
- package/dist/types/bin/build-application.d.ts +4 -3
- package/dist/types/bin/create-dev-serve.d.ts +1 -1
- package/dist/types/bin/create-export-config.d.ts +3 -3
- package/dist/types/bin/create-export-manifest.d.ts +6 -9
- package/dist/types/bin/dev-portal/AppLoader.d.ts +7 -0
- package/dist/types/bin/dev-portal/ContextSelector/ContextSelector.d.ts +5 -0
- package/dist/types/bin/dev-portal/ContextSelector/useContextResolver.d.ts +6 -0
- package/dist/types/bin/dev-portal/FusionLogo.d.ts +0 -1
- package/dist/types/bin/dev-portal/PersonSideSheet/index.d.ts +4 -0
- package/dist/types/bin/dev-portal/PersonSideSheet/sheets/FeatureSheetContent.d.ts +4 -0
- package/dist/types/bin/dev-portal/PersonSideSheet/sheets/FeatureTogglerApp.d.ts +3 -0
- package/dist/types/bin/dev-portal/PersonSideSheet/sheets/FeatureTogglerPortal.d.ts +3 -0
- package/dist/types/bin/dev-portal/PersonSideSheet/sheets/LandingSheetContent.d.ts +3 -0
- package/dist/types/bin/dev-portal/PersonSideSheet/sheets/Styled.d.ts +4 -5
- package/dist/types/bin/dev-portal/useAppContextNavigation.d.ts +4 -0
- package/dist/types/bin/publish-application.d.ts +1 -1
- package/dist/types/bin/tag-application.d.ts +1 -1
- package/dist/types/bin/upload-application.d.ts +1 -1
- package/dist/types/bin/utils/execute-command.d.ts +8 -0
- package/dist/types/bin/utils/format.d.ts +0 -2
- package/dist/types/bin/utils/getEndpointUrl.d.ts +10 -0
- package/dist/types/bin/utils/index.d.ts +14 -0
- package/dist/types/bin/utils/isAppRegistered.d.ts +7 -0
- package/dist/types/bin/utils/load-app-config.d.ts +1 -1
- package/dist/types/bin/utils/load-manifest.d.ts +3 -2
- package/dist/types/bin/utils/proxy-request-logger.d.ts +15 -0
- package/dist/types/bin/utils/publishAppConfig.d.ts +9 -0
- package/dist/types/bin/utils/requireToken.d.ts +4 -0
- package/dist/types/bin/utils/spinner.d.ts +1 -0
- package/dist/types/bin/utils/tagAppBundle.d.ts +7 -0
- package/dist/types/bin/utils/uploadAppBundle.d.ts +7 -0
- package/dist/types/lib/app-config.d.ts +1 -1
- package/dist/types/lib/app-manifest.d.ts +30 -2
- package/dist/types/lib/app-package.d.ts +34 -3
- package/dist/types/lib/plugins/app-assets/app-asset-plugin.d.ts +36 -0
- package/dist/types/lib/plugins/app-assets/emit-asset.d.ts +18 -0
- package/dist/types/lib/plugins/app-assets/extension-filter-pattern.d.ts +14 -0
- package/dist/types/lib/plugins/app-assets/index.d.ts +3 -0
- package/dist/types/lib/plugins/app-assets/read-asset-content.d.ts +14 -0
- package/dist/types/lib/plugins/app-assets/resolve-asset-id.d.ts +16 -0
- package/dist/types/lib/plugins/app-assets/static.d.ts +5 -0
- package/dist/types/lib/plugins/app-proxy/app-proxy-plugin.d.ts +70 -0
- package/dist/types/lib/plugins/app-proxy/index.d.ts +1 -0
- package/dist/types/lib/plugins/external-public/external-public-plugin.d.ts +30 -0
- package/dist/types/lib/plugins/external-public/index.d.ts +1 -0
- package/dist/types/lib/utils/assert.d.ts +2 -2
- package/dist/types/lib/utils/config.d.ts +7 -1
- package/dist/types/lib/utils/expect.d.ts +1 -1
- package/dist/types/lib/vite-config.d.ts +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/version.js +2 -1
- package/dist/version.js.map +1 -1
- package/package.json +49 -35
- package/dist/bin/dev-proxy.js +0 -89
- package/dist/bin/dev-proxy.js.map +0 -1
- package/dist/bin/public/assets/index-Cd994U8q.js +0 -3504
- package/dist/bin/utils/app-api.js +0 -169
- package/dist/bin/utils/app-api.js.map +0 -1
- package/dist/bin/utils/execute-commant.js.map +0 -1
- package/dist/index.js +0 -12
- package/dist/index.js.map +0 -1
- package/dist/types/bin/dev-proxy.d.ts +0 -26
- package/dist/types/bin/utils/app-api.d.ts +0 -8
- package/dist/types/bin/utils/execute-commant.d.ts +0 -8
- package/dist/types/index.d.ts +0 -4
|
@@ -7,145 +7,117 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
11
|
-
import { readFileSync } from 'node:fs';
|
|
10
|
+
import { createServer, defineConfig, mergeConfig, } from 'vite';
|
|
12
11
|
import { assert } from 'node:console';
|
|
13
|
-
import {
|
|
14
|
-
import ViteRestart from 'vite-plugin-restart';
|
|
12
|
+
import { join, relative } from 'node:path';
|
|
15
13
|
import portFinder from 'portfinder';
|
|
16
|
-
import
|
|
14
|
+
import deepmerge from 'deepmerge/index.js';
|
|
15
|
+
import ViteRestart from 'vite-plugin-restart';
|
|
16
|
+
import { appProxyPlugin } from '../lib/plugins/app-proxy/app-proxy-plugin.js';
|
|
17
|
+
import { externalPublicPlugin } from '../lib/plugins/external-public/external-public-plugin.js';
|
|
18
|
+
import { supportedExt } from '../lib/utils/config.js';
|
|
19
|
+
import { manifestConfigFilename } from '../lib/app-manifest.js';
|
|
20
|
+
import { appConfigFilename } from '../lib/app-config.js';
|
|
17
21
|
import { loadAppConfig } from './utils/load-app-config.js';
|
|
18
22
|
import { loadViteConfig } from './utils/load-vite-config.js';
|
|
19
|
-
import {
|
|
23
|
+
import { loadPackage } from './utils/load-package.js';
|
|
20
24
|
import { Spinner } from './utils/spinner.js';
|
|
21
25
|
import { chalk, formatPath } from './utils/format.js';
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import { appConfigFilename, createAppConfig } from '../lib/app-config.js';
|
|
25
|
-
import { loadPackage } from './utils/load-package.js';
|
|
26
|
-
import { rateLimit } from 'express-rate-limit';
|
|
26
|
+
import { loadAppManifest } from './utils/load-manifest.js';
|
|
27
|
+
import { proxyRequestLogger } from './utils/proxy-request-logger.js';
|
|
27
28
|
export const createDevServer = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
-
var _a;
|
|
29
|
-
const { configSourceFiles, library,
|
|
29
|
+
var _a, _b, _c, _d;
|
|
30
|
+
const { configSourceFiles, library, port, devPortalPath } = options;
|
|
30
31
|
const spinner = Spinner.Global({ prefixText: chalk.dim('dev-server') });
|
|
31
32
|
const pkg = yield loadPackage();
|
|
32
|
-
spinner.info(`using portal 🔌${formatPath(portal)} as proxy target`);
|
|
33
33
|
const env = {
|
|
34
34
|
command: 'serve',
|
|
35
35
|
mode: (_a = process.env.NODE_ENV) !== null && _a !== void 0 ? _a : 'development',
|
|
36
36
|
root: pkg.root,
|
|
37
37
|
};
|
|
38
|
-
const
|
|
39
|
-
|
|
38
|
+
const generateManifest = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
+
const { manifest } = yield loadAppManifest(env, pkg, {
|
|
40
|
+
file: configSourceFiles.manifest,
|
|
41
|
+
});
|
|
42
|
+
const assetPath = `bundles/apps/${manifest.appKey}/${pkg.packageJson.version}`;
|
|
43
|
+
return deepmerge(manifest, {
|
|
44
|
+
build: {
|
|
45
|
+
assetPath,
|
|
46
|
+
configUrl: `${assetPath}/config`,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
const generateConfig = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
51
|
+
const { config } = yield loadAppConfig(env, pkg, {
|
|
52
|
+
file: configSourceFiles.app,
|
|
53
|
+
});
|
|
54
|
+
return config;
|
|
55
|
+
});
|
|
56
|
+
const { appKey } = yield generateManifest();
|
|
57
|
+
/**
|
|
58
|
+
* Load application manifest
|
|
59
|
+
* Application might have overridden the `appKey`
|
|
60
|
+
*/
|
|
40
61
|
spinner.info(`resolved application key ${chalk.magenta(appKey)}`);
|
|
41
|
-
const { viteConfig, path: viteConfigPath } = yield loadViteConfig(env, {
|
|
62
|
+
const { viteConfig: baseViteConfig, path: viteConfigPath } = yield loadViteConfig(env, {
|
|
42
63
|
file: configSourceFiles.vite,
|
|
43
64
|
});
|
|
65
|
+
/**
|
|
66
|
+
* Defines the configuration for the development server.
|
|
67
|
+
*/
|
|
68
|
+
const devServerConfig = defineConfig({
|
|
69
|
+
publicDir: devPortalPath,
|
|
70
|
+
appType: 'custom',
|
|
71
|
+
server: {
|
|
72
|
+
open: `/apps/${appKey}`,
|
|
73
|
+
port: port !== null && port !== void 0 ? port : (yield portFinder.getPortPromise({ port: 3000 })),
|
|
74
|
+
},
|
|
75
|
+
plugins: [
|
|
76
|
+
// Serve the dev portal as static files
|
|
77
|
+
externalPublicPlugin(devPortalPath),
|
|
78
|
+
// Proxy requests to the app server
|
|
79
|
+
appProxyPlugin({
|
|
80
|
+
proxy: {
|
|
81
|
+
path: '/apps-proxy',
|
|
82
|
+
target: 'https://fusion-s-apps-ci.azurewebsites.net/',
|
|
83
|
+
onProxyReq: proxyRequestLogger,
|
|
84
|
+
},
|
|
85
|
+
app: {
|
|
86
|
+
key: appKey,
|
|
87
|
+
version: String(pkg.packageJson.version),
|
|
88
|
+
generateConfig,
|
|
89
|
+
generateManifest,
|
|
90
|
+
},
|
|
91
|
+
}),
|
|
92
|
+
// Restart the server when config changes or the dev portal source is updated
|
|
93
|
+
ViteRestart({
|
|
94
|
+
restart: [
|
|
95
|
+
'package.json',
|
|
96
|
+
viteConfigPath,
|
|
97
|
+
join(relative(process.cwd(), devPortalPath), '/**/*'),
|
|
98
|
+
].filter((x) => !!x),
|
|
99
|
+
/** reload the CLI when config changes, note change to APP-KEY need restart */
|
|
100
|
+
reload: [
|
|
101
|
+
...supportedExt.map((ext) => [appConfigFilename, ext].join('')),
|
|
102
|
+
...supportedExt.map((ext) => [manifestConfigFilename, ext].join('')),
|
|
103
|
+
],
|
|
104
|
+
}),
|
|
105
|
+
],
|
|
106
|
+
});
|
|
107
|
+
// Merge the base Vite config with the dev server config
|
|
108
|
+
const viteConfig = mergeConfig(devServerConfig, baseViteConfig);
|
|
109
|
+
/** Add library/framework plugins */
|
|
44
110
|
if (library === 'react') {
|
|
45
111
|
const reactPlugin = yield import('@vitejs/plugin-react');
|
|
46
112
|
viteConfig.plugins.push(reactPlugin.default());
|
|
47
113
|
}
|
|
48
|
-
viteConfig.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
...supportedExt.map((ext) => [manifestConfigFilename, ext].join('')),
|
|
53
|
-
],
|
|
54
|
-
}));
|
|
114
|
+
assert((_b = viteConfig.build) === null || _b === void 0 ? void 0 : _b.lib, 'expected vite build to have library defined');
|
|
115
|
+
const { entry } = viteConfig.build.lib;
|
|
116
|
+
spinner.info('💾 application entrypoint', formatPath(String(entry), { relative: true }));
|
|
117
|
+
spinner.info('resolving cli internal assets from', formatPath(String(viteConfig.publicDir), { relative: true }));
|
|
55
118
|
const vite = yield createServer(Object.assign(Object.assign({}, env), viteConfig));
|
|
56
|
-
assert(vite.config.build.lib, 'expected vite build to have library defined');
|
|
57
|
-
const { entry } = vite.config.build.lib;
|
|
58
|
-
spinner.info('💾 application entrypoint', formatPath(String(entry)));
|
|
59
|
-
spinner.info('resolving cli internal assets from ', formatPath(devPortalPath));
|
|
60
|
-
const server = createDevProxy({
|
|
61
|
-
onConfigResponse: (slug, message, data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
62
|
-
if (slug.appKey === appKey) {
|
|
63
|
-
if (message.statusCode === 404) {
|
|
64
|
-
const { config: response, path } = yield loadAppConfig(env, pkg, {
|
|
65
|
-
file: configSourceFiles.app,
|
|
66
|
-
});
|
|
67
|
-
return { response, path, statusCode: 200 };
|
|
68
|
-
}
|
|
69
|
-
else if (data) {
|
|
70
|
-
const { config: response, path } = yield createAppConfig(env, data, {
|
|
71
|
-
file: configSourceFiles.app,
|
|
72
|
-
});
|
|
73
|
-
path && spinner.info('created config from ', formatPath(path));
|
|
74
|
-
return { response, path };
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}),
|
|
78
|
-
onManifestResponse: (slug, message, data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
-
if (slug.appKey === appKey) {
|
|
80
|
-
if (message.statusCode === 404) {
|
|
81
|
-
const { manifest: response, path } = yield loadAppManifest(env, pkg, {
|
|
82
|
-
file: configSourceFiles.manifest,
|
|
83
|
-
});
|
|
84
|
-
response.entry = `/${entry}`;
|
|
85
|
-
if (response.build) {
|
|
86
|
-
response.build.entryPoint = `/${entry}`;
|
|
87
|
-
}
|
|
88
|
-
return { response, path, statusCode: 200 };
|
|
89
|
-
}
|
|
90
|
-
else if (data) {
|
|
91
|
-
const { manifest: response, path } = yield createManifest(env, data, {
|
|
92
|
-
file: configSourceFiles.manifest,
|
|
93
|
-
});
|
|
94
|
-
response.entry = `/${entry}`;
|
|
95
|
-
if (response.build) {
|
|
96
|
-
response.build.entryPoint = `/${entry}`;
|
|
97
|
-
}
|
|
98
|
-
path && spinner.info('created manifest from ', formatPath(path));
|
|
99
|
-
return { response, path };
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}),
|
|
103
|
-
onManifestListResponse: (slug, message, data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
104
|
-
var _b, _c;
|
|
105
|
-
if (!data) {
|
|
106
|
-
const { manifest, path } = yield loadAppManifest(env, pkg, {
|
|
107
|
-
file: configSourceFiles.manifest,
|
|
108
|
-
});
|
|
109
|
-
manifest.entry = `/${entry}`;
|
|
110
|
-
return { response: [manifest], path };
|
|
111
|
-
}
|
|
112
|
-
let path;
|
|
113
|
-
const atIndex = (_b = data === null || data === void 0 ? void 0 : data.findIndex((manifest) => manifest.key === appKey)) !== null && _b !== void 0 ? _b : -1;
|
|
114
|
-
if (atIndex > -1) {
|
|
115
|
-
data[atIndex].entry = `/${entry}`;
|
|
116
|
-
data[atIndex].build = Object.assign((_c = data[atIndex].build) !== null && _c !== void 0 ? _c : {}, {
|
|
117
|
-
entryPoint: `/${entry}`,
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
const { manifest, path: manifestPath } = yield loadAppManifest(env, pkg, {
|
|
122
|
-
file: configSourceFiles.manifest,
|
|
123
|
-
});
|
|
124
|
-
manifest.entry = `/${entry}`;
|
|
125
|
-
if (manifest.build) {
|
|
126
|
-
manifest.build.entryPoint = `/${entry}`;
|
|
127
|
-
}
|
|
128
|
-
path = manifestPath;
|
|
129
|
-
data.push(manifest);
|
|
130
|
-
}
|
|
131
|
-
return { response: data, path };
|
|
132
|
-
}),
|
|
133
|
-
}, {
|
|
134
|
-
target: portal,
|
|
135
|
-
staticAssets: [{ path: devPortalPath }],
|
|
136
|
-
});
|
|
137
|
-
server.use(vite.middlewares);
|
|
138
|
-
server.use('*', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
139
|
-
const htmlRaw = readFileSync(join(devPortalPath + '/index.html'), 'utf-8');
|
|
140
|
-
const html = yield vite.transformIndexHtml(req.url, htmlRaw);
|
|
141
|
-
res.send(html);
|
|
142
|
-
}), rateLimit({
|
|
143
|
-
max: 10,
|
|
144
|
-
}));
|
|
145
|
-
const serverPort = port !== null && port !== void 0 ? port : (yield portFinder.getPortPromise({ port: 3000 }));
|
|
146
119
|
spinner.start('🚀 start server');
|
|
147
|
-
|
|
148
|
-
spinner.succeed();
|
|
149
|
-
spinner.succeed('🔗', chalk.underline.green(new URL(`/apps/${appKey}`, `http://localhost:${serverPort}`).href));
|
|
120
|
+
yield vite.listen();
|
|
121
|
+
spinner.succeed('🔗', chalk.underline.green(new URL(`/apps/${appKey}`, (_d = (_c = vite.resolvedUrls) === null || _c === void 0 ? void 0 : _c.local[0]) !== null && _d !== void 0 ? _d : `https://localhost:/${vite.config.server.port}`).href));
|
|
150
122
|
});
|
|
151
123
|
//# sourceMappingURL=create-dev-serve.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-dev-serve.js","sourceRoot":"","sources":["../../src/bin/create-dev-serve.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"create-dev-serve.js","sourceRoot":"","sources":["../../src/bin/create-dev-serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,10 +13,9 @@ import { dirname } from 'node:path';
|
|
|
13
13
|
import semverValid from 'semver/functions/valid.js';
|
|
14
14
|
import { chalk, formatPath } from './utils/format.js';
|
|
15
15
|
import { Spinner } from './utils/spinner.js';
|
|
16
|
-
import { loadPackage } from './utils/
|
|
17
|
-
import { loadAppConfig } from './utils/load-app-config.js';
|
|
18
|
-
import { publishAppConfig, validateToken } from './utils/app-api.js';
|
|
16
|
+
import { getEndpointUrl, loadAppConfig, loadPackage, isAppRegistered, requireToken, publishAppConfig, } from './utils/index.js';
|
|
19
17
|
import { resolveAppKey } from '../lib/app-package.js';
|
|
18
|
+
import { exit } from 'node:process';
|
|
20
19
|
export const createExportConfig = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
20
|
var _a;
|
|
22
21
|
const { command = 'build', outputFile, configFile, publish, env, service } = options;
|
|
@@ -50,20 +49,63 @@ export const createExportConfig = (options) => __awaiter(void 0, void 0, void 0,
|
|
|
50
49
|
console.log(config);
|
|
51
50
|
}
|
|
52
51
|
if (publish) {
|
|
53
|
-
spinner.info('
|
|
54
|
-
|
|
55
|
-
if (!validToken) {
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
52
|
+
spinner.info('Preparing to publishing config');
|
|
53
|
+
/* Make sure version is valid */
|
|
58
54
|
const version = publish === 'current' ? pkg.packageJson.version : publish;
|
|
59
|
-
if (!version || !semverValid(version)) {
|
|
55
|
+
if (!version || (!semverValid(version) && !['latest', 'preview'].includes(version))) {
|
|
60
56
|
spinner.fail('🙅♂️', 'Can not publish config to invalid version', chalk.redBright(version), '');
|
|
61
|
-
|
|
57
|
+
exit(1);
|
|
58
|
+
}
|
|
59
|
+
/** make sure user has a valid token */
|
|
60
|
+
try {
|
|
61
|
+
spinner.info('Validating FUSION_TOKEN');
|
|
62
|
+
// make sure token exist
|
|
63
|
+
requireToken();
|
|
64
|
+
// call service discovery with token, will throw error if failed
|
|
65
|
+
yield getEndpointUrl('apps', env, '');
|
|
66
|
+
spinner.succeed('Found valid FUSION_TOKEN');
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
const err = e;
|
|
70
|
+
spinner.fail(chalk.bgRed(err.message));
|
|
71
|
+
exit(1);
|
|
62
72
|
}
|
|
63
|
-
|
|
64
|
-
|
|
73
|
+
try {
|
|
74
|
+
spinner.info('Verifying that App is registered');
|
|
75
|
+
const state = { endpoint: '' };
|
|
76
|
+
try {
|
|
77
|
+
state.endpoint = yield getEndpointUrl(`apps/${appKey}`, env, service);
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
const err = e;
|
|
81
|
+
throw new Error(`Could not get endpoint from service discovery while verifying app. service-discovery status: ${err.message}`);
|
|
82
|
+
}
|
|
83
|
+
yield isAppRegistered(state.endpoint, appKey);
|
|
84
|
+
spinner.succeed(`${appKey} is registered`);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
const err = e;
|
|
88
|
+
spinner.fail('🙅♂️', chalk.bgRed(err.message));
|
|
89
|
+
exit(1);
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
spinner.info(`Publishing config to "${appKey}@${version}"`);
|
|
93
|
+
const state = { endpoint: '' };
|
|
94
|
+
try {
|
|
95
|
+
state.endpoint = yield getEndpointUrl(`apps/${appKey}/builds/${version}/config`, env, service);
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
const err = e;
|
|
99
|
+
throw new Error(`Could not get endpoint from service discovery while publishig config. service-discovery status: ${err.message}`);
|
|
100
|
+
}
|
|
101
|
+
yield publishAppConfig(state.endpoint, appKey, config);
|
|
65
102
|
spinner.succeed('✅', 'Published config to version', chalk.yellowBright(version));
|
|
66
103
|
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
const err = e;
|
|
106
|
+
spinner.fail('🙅♂️', chalk.bgRed(err.message));
|
|
107
|
+
exit(1);
|
|
108
|
+
}
|
|
67
109
|
}
|
|
68
110
|
return config;
|
|
69
111
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-export-config.js","sourceRoot":"","sources":["../../src/bin/create-export-config.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,WAAW,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,
|
|
1
|
+
{"version":3,"file":"create-export-config.js","sourceRoot":"","sources":["../../src/bin/create-export-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,60 +10,68 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import nodeFs from 'node:fs';
|
|
11
11
|
import { writeFile } from 'node:fs/promises';
|
|
12
12
|
import assert from 'node:assert';
|
|
13
|
-
import { execSync } from 'node:child_process';
|
|
14
13
|
import { SemVer, parse as parseSemver } from 'semver';
|
|
15
14
|
import { chalk, formatPath } from './utils/format.js';
|
|
16
15
|
import { Spinner } from './utils/spinner.js';
|
|
17
16
|
import { loadAppManifest } from './utils/load-manifest.js';
|
|
18
17
|
import { loadPackage } from './utils/load-package.js';
|
|
19
18
|
import { dirname } from 'node:path';
|
|
19
|
+
// TODO why do we do this??? can`t backend parse semver?
|
|
20
20
|
export const normalizeVersion = (version) => {
|
|
21
21
|
const semverVersion = parseSemver(version);
|
|
22
22
|
assert(semverVersion instanceof SemVer, 'expected version in AppManifest to be SemVer');
|
|
23
23
|
const { major, minor, patch } = semverVersion;
|
|
24
24
|
return { major, minor, patch };
|
|
25
25
|
};
|
|
26
|
-
export const
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
26
|
+
export const createAppManifest = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
27
|
+
Spinner.Global({ prefixText: chalk.dim('app manifest') });
|
|
28
|
+
const manifest = yield createManifest(options);
|
|
29
|
+
if (options === null || options === void 0 ? void 0 : options.outputFile) {
|
|
30
|
+
yield writeManifestToDisk(manifest, options.outputFile);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.log(JSON.stringify(manifest, undefined, 2));
|
|
34
|
+
}
|
|
35
|
+
return manifest;
|
|
36
|
+
});
|
|
37
|
+
export const createBuildManifest = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
38
|
+
Spinner.Global({ prefixText: chalk.dim('build manifest') });
|
|
39
|
+
const { build } = yield createManifest(options);
|
|
40
|
+
if (options === null || options === void 0 ? void 0 : options.outputFile) {
|
|
41
|
+
yield writeManifestToDisk(build, options.outputFile);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log(JSON.stringify(build, undefined, 2));
|
|
45
|
+
}
|
|
46
|
+
return build;
|
|
47
|
+
});
|
|
48
|
+
const writeManifestToDisk = (content, outputFile) => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
+
const spinner = Spinner.Clone();
|
|
50
|
+
spinner.start(`Exporting manifest to ${formatPath(outputFile)}`);
|
|
51
|
+
try {
|
|
52
|
+
const dir = dirname(outputFile).trim();
|
|
53
|
+
if (!nodeFs.existsSync(dirname(outputFile))) {
|
|
54
|
+
nodeFs.mkdirSync(dir, { recursive: true });
|
|
55
|
+
}
|
|
56
|
+
yield writeFile(outputFile, JSON.stringify(content));
|
|
57
|
+
spinner.succeed();
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
spinner.fail();
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
const createManifest = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
65
|
+
var _a, _b;
|
|
30
66
|
const pkg = yield loadPackage();
|
|
31
67
|
const env = {
|
|
32
|
-
command,
|
|
33
|
-
mode: (
|
|
68
|
+
command: (_a = options === null || options === void 0 ? void 0 : options.command) !== null && _a !== void 0 ? _a : 'build',
|
|
69
|
+
mode: (_b = process.env.NODE_ENV) !== null && _b !== void 0 ? _b : 'development',
|
|
34
70
|
root: pkg.root,
|
|
35
71
|
};
|
|
36
72
|
const { manifest } = yield loadAppManifest(env, pkg, {
|
|
37
73
|
file: options === null || options === void 0 ? void 0 : options.configFile,
|
|
38
74
|
});
|
|
39
|
-
|
|
40
|
-
const repoUrl = execSync('git remote get-url origin').toString().trim();
|
|
41
|
-
const githubRepo = repoUrl
|
|
42
|
-
? repoUrl.indexOf('git') === 0
|
|
43
|
-
? encodeURIComponent(repoUrl.replace('git@github.com:', 'https://github.com/').replace('.git', ''))
|
|
44
|
-
: encodeURIComponent(repoUrl)
|
|
45
|
-
: '';
|
|
46
|
-
const manifestExport = Object.assign(Object.assign({}, manifest), { entryPoint: 'app-bundle.js', commitSha,
|
|
47
|
-
githubRepo, timestamp: new Date().toISOString() });
|
|
48
|
-
if (outputFile) {
|
|
49
|
-
spinner.start(`outputting manifest to ${formatPath(outputFile)}`);
|
|
50
|
-
try {
|
|
51
|
-
const dir = dirname(outputFile).trim();
|
|
52
|
-
if (!nodeFs.existsSync(dirname(outputFile))) {
|
|
53
|
-
nodeFs.mkdirSync(dir, { recursive: true });
|
|
54
|
-
}
|
|
55
|
-
yield writeFile(outputFile, JSON.stringify(manifestExport));
|
|
56
|
-
spinner.succeed();
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
spinner.fail();
|
|
60
|
-
throw err;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
console.log(manifestExport);
|
|
65
|
-
}
|
|
66
|
-
return manifestExport;
|
|
75
|
+
return manifest;
|
|
67
76
|
});
|
|
68
|
-
export default createExportManifest;
|
|
69
77
|
//# sourceMappingURL=create-export-manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-export-manifest.js","sourceRoot":"","sources":["../../src/bin/create-export-manifest.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"create-export-manifest.js","sourceRoot":"","sources":["../../src/bin/create-export-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,40 +6,63 @@ import { useObservableState } from '@equinor/fusion-observable/react';
|
|
|
6
6
|
import { AppManifestError } from '@equinor/fusion-framework-module-app/errors.js';
|
|
7
7
|
import { ErrorViewer } from './ErrorViewer';
|
|
8
8
|
import EquinorLoader from './EquinorLoader';
|
|
9
|
+
/**
|
|
10
|
+
* React Functional Component for handling current application
|
|
11
|
+
*
|
|
12
|
+
* this component will set the current app by provided appKey.
|
|
13
|
+
* when the appKey changes, this component will try to initialize the referred application
|
|
14
|
+
* and render it.
|
|
15
|
+
*/
|
|
9
16
|
export const AppLoader = (props) => {
|
|
10
17
|
const { appKey } = props;
|
|
11
18
|
const fusion = useFramework();
|
|
19
|
+
/** reference of application section/container */
|
|
12
20
|
const ref = useRef(null);
|
|
13
21
|
const [loading, setLoading] = useState(false);
|
|
14
22
|
const [error, setError] = useState();
|
|
23
|
+
// TODO change to `useCurrentApp`
|
|
24
|
+
/** observe and use the current selected application from framework */
|
|
15
25
|
const { value: currentApp } = useObservableState(useMemo(() => fusion.modules.app.current$, [fusion.modules.app]));
|
|
16
26
|
useEffect(() => {
|
|
27
|
+
/** when appKey property change, assign it to current */
|
|
17
28
|
fusion.modules.app.setCurrentApp(appKey);
|
|
18
29
|
}, [appKey, fusion]);
|
|
19
30
|
useEffect(() => {
|
|
31
|
+
/** flag that application is loading */
|
|
20
32
|
setLoading(true);
|
|
33
|
+
/** clear previous errors */
|
|
21
34
|
setError(undefined);
|
|
35
|
+
/** create a teardown of load */
|
|
22
36
|
const subscription = new Subscription();
|
|
37
|
+
/** make sure that initialize is canceled and disposed if current app changes */
|
|
23
38
|
subscription.add(currentApp === null || currentApp === void 0 ? void 0 : currentApp.initialize().subscribe({
|
|
24
39
|
next: ({ manifest, script, config }) => {
|
|
25
40
|
var _a, _b;
|
|
41
|
+
/** generate basename for application */
|
|
26
42
|
const [basename] = (_a = window.location.pathname.match(/\/?apps\/[a-z|-]+(\/)?/g)) !== null && _a !== void 0 ? _a : [''];
|
|
43
|
+
/** create a 'private' element for the application */
|
|
27
44
|
const el = document.createElement('div');
|
|
28
45
|
if (!ref.current) {
|
|
29
46
|
throw Error('Missing application mounting point');
|
|
30
47
|
}
|
|
31
48
|
ref.current.appendChild(el);
|
|
49
|
+
/** extract render callback function from javascript module */
|
|
32
50
|
const render = (_b = script.renderApp) !== null && _b !== void 0 ? _b : script.default;
|
|
51
|
+
/** add application teardown to current render effect teardown */
|
|
33
52
|
subscription.add(render(el, { fusion, env: { basename, config, manifest } }));
|
|
53
|
+
/** remove app element when application unmounts */
|
|
34
54
|
subscription.add(() => el.remove());
|
|
35
55
|
},
|
|
36
56
|
complete: () => {
|
|
57
|
+
/** flag that application is no longer loading */
|
|
37
58
|
setLoading(false);
|
|
38
59
|
},
|
|
39
60
|
error: (err) => {
|
|
61
|
+
/** set error if initialization of application fails */
|
|
40
62
|
setError(err);
|
|
41
63
|
},
|
|
42
64
|
}));
|
|
65
|
+
/** teardown application when hook unmounts */
|
|
43
66
|
return () => subscription.unsubscribe();
|
|
44
67
|
}, [fusion, currentApp, ref]);
|
|
45
68
|
if (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppLoader.js","sourceRoot":"","sources":["../../../src/bin/dev-portal/AppLoader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAElF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,aAAa,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"AppLoader.js","sourceRoot":"","sources":["../../../src/bin/dev-portal/AppLoader.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback } from 'react';
|
|
3
|
-
import { ContextProvider, ContextSearch, } from '@equinor/fusion-react-context-selector';
|
|
2
|
+
import { useCallback, useEffect, useMemo } from 'react';
|
|
3
|
+
import { ContextProvider, ContextSearch, ContextClearEvent, } from '@equinor/fusion-react-context-selector';
|
|
4
4
|
import { useContextResolver } from './useContextResolver';
|
|
5
|
+
/**
|
|
6
|
+
* See fusion-react-component storybook for available attributes
|
|
7
|
+
* @link https://equinor.github.io/fusion-react-components/?path=/docs/data-contextselector--component
|
|
8
|
+
* @returns JSX element
|
|
9
|
+
*/
|
|
5
10
|
export const ContextSelector = (props) => {
|
|
6
11
|
var _a, _b, _c, _d;
|
|
7
12
|
const { resolver, provider, currentContext: [selectedContextItem], } = useContextResolver();
|
|
13
|
+
/** callback handler for context selector, when context is changed or cleared */
|
|
8
14
|
const onContextSelect = useCallback((e) => {
|
|
9
15
|
if (provider) {
|
|
10
16
|
if (e.type === 'select') {
|
|
@@ -18,6 +24,15 @@ export const ContextSelector = (props) => {
|
|
|
18
24
|
}
|
|
19
25
|
}
|
|
20
26
|
}, [provider]);
|
|
27
|
+
/**
|
|
28
|
+
* Clears context when ctx has been cleared outside the selector.
|
|
29
|
+
*/
|
|
30
|
+
const clearEvent = useMemo(() => new ContextClearEvent({ date: Date.now() }), []);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!selectedContextItem) {
|
|
33
|
+
document.dispatchEvent(clearEvent);
|
|
34
|
+
}
|
|
35
|
+
}, [clearEvent, selectedContextItem]);
|
|
21
36
|
if (!resolver)
|
|
22
37
|
return null;
|
|
23
38
|
return (_jsx("div", { style: { flex: 1, maxWidth: '480px' }, children: _jsx(ContextProvider, { resolver: resolver, children: _jsx(ContextSearch, { id: "context-selector-cli-header", placeholder: (_a = props.placeholder) !== null && _a !== void 0 ? _a : 'Search for context', initialText: (_b = props.initialText) !== null && _b !== void 0 ? _b : 'Start typing to search', dropdownHeight: (_c = props.dropdownHeight) !== null && _c !== void 0 ? _c : '300px', variant: (_d = props.variant) !== null && _d !== void 0 ? _d : 'header', onSelect: (e) => onContextSelect(e), selectTextOnFocus: true, previewItem: selectedContextItem, onClearContext: onContextSelect }) }) }));
|