@equinor/fusion-framework-cli 11.0.0-next.8 → 11.0.0

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 (224) hide show
  1. package/CHANGELOG.md +58 -103
  2. package/README.md +112 -57
  3. package/bin/build/bin.mjs +1 -0
  4. package/bin/build/cli.mjs +7 -0
  5. package/bin/cli.mjs +1 -1
  6. package/dist/esm/lib/app/app-config.js.map +1 -1
  7. package/dist/esm/lib/app/app-manifest.js.map +1 -1
  8. package/dist/esm/lib/app/app-package.js +1 -1
  9. package/dist/esm/lib/app/app-package.js.map +1 -1
  10. package/dist/esm/lib/app/merge-app-config.js +11 -5
  11. package/dist/esm/lib/app/merge-app-config.js.map +1 -1
  12. package/dist/esm/lib/app/merge-app-manifest.js +2 -2
  13. package/dist/esm/lib/app/merge-app-manifest.js.map +1 -1
  14. package/dist/esm/lib/index.js +3 -1
  15. package/dist/esm/lib/index.js.map +1 -1
  16. package/dist/esm/lib/load-dev-server-config.js +7 -3
  17. package/dist/esm/lib/load-dev-server-config.js.map +1 -1
  18. package/dist/esm/lib/merge-dev-server-config.js +24 -16
  19. package/dist/esm/lib/merge-dev-server-config.js.map +1 -1
  20. package/dist/esm/lib/portal/create-portal-manifest.js.map +1 -1
  21. package/dist/esm/lib/portal/load-portal-config.js +1 -1
  22. package/dist/esm/lib/portal/load-portal-config.js.map +1 -1
  23. package/dist/esm/lib/portal/load-portal-manifest.js +8 -4
  24. package/dist/esm/lib/portal/load-portal-manifest.js.map +1 -1
  25. package/dist/esm/lib/portal/load-portal-schema.js.map +1 -1
  26. package/dist/esm/lib/portal/portal-config.js.map +1 -1
  27. package/dist/esm/lib/utils/index.js +1 -0
  28. package/dist/esm/lib/utils/index.js.map +1 -1
  29. package/dist/esm/lib/utils/resolve-annotations.js +48 -5
  30. package/dist/esm/lib/utils/resolve-annotations.js.map +1 -1
  31. package/dist/esm/lib/utils/resolve-devops-annotations.js +7 -3
  32. package/dist/esm/lib/utils/resolve-devops-annotations.js.map +1 -1
  33. package/dist/esm/lib/utils/resolve-git-commit-sha.js +1 -0
  34. package/dist/esm/lib/utils/resolve-git-commit-sha.js.map +1 -1
  35. package/dist/esm/lib/utils/resolve-github-annotations.js +16 -72
  36. package/dist/esm/lib/utils/resolve-github-annotations.js.map +1 -1
  37. package/dist/esm/version.js +1 -1
  38. package/dist/types/bin/app-build.d.ts +2 -2
  39. package/dist/types/bin/app-check.d.ts +2 -2
  40. package/dist/types/bin/app-config-publish.d.ts +2 -2
  41. package/dist/types/bin/app-config.d.ts +3 -3
  42. package/dist/types/bin/app-dev.d.ts +1 -1
  43. package/dist/types/bin/app-manifest.d.ts +3 -3
  44. package/dist/types/bin/app-pack.d.ts +1 -1
  45. package/dist/types/bin/app-tag.d.ts +3 -3
  46. package/dist/types/bin/app-upload.d.ts +2 -2
  47. package/dist/types/bin/helpers/load-vite-config.d.ts +1 -2
  48. package/dist/types/bin/helpers/resolve-app-config.d.ts +3 -3
  49. package/dist/types/bin/helpers/resolve-app-manifest.d.ts +3 -3
  50. package/dist/types/bin/helpers/resolve-portal-config.d.ts +3 -3
  51. package/dist/types/bin/helpers/resolve-portal-manifest.d.ts +3 -4
  52. package/dist/types/bin/helpers/resolve-project-package.d.ts +2 -2
  53. package/dist/types/bin/index.d.ts +9 -0
  54. package/dist/types/bin/pack.d.ts +1 -1
  55. package/dist/types/bin/portal-build.d.ts +5 -5
  56. package/dist/types/bin/portal-config-publish.d.ts +2 -2
  57. package/dist/types/bin/portal-config.d.ts +4 -4
  58. package/dist/types/bin/portal-dev.d.ts +2 -2
  59. package/dist/types/bin/portal-manifest.d.ts +4 -4
  60. package/dist/types/bin/portal-pack.d.ts +3 -3
  61. package/dist/types/bin/portal-tag.d.ts +2 -2
  62. package/dist/types/bin/portal-upload.d.ts +2 -2
  63. package/dist/types/bin/utils/create-dev-server.d.ts +2 -2
  64. package/dist/types/cli/commands/disco/resolve.d.ts +1 -1
  65. package/dist/types/cli/main.d.ts +0 -20
  66. package/dist/types/cli/options/env.d.ts +1 -2
  67. package/dist/types/lib/app/app-config.d.ts +2 -2
  68. package/dist/types/lib/app/app-manifest.d.ts +1 -1
  69. package/dist/types/lib/app/merge-app-config.d.ts +1 -1
  70. package/dist/types/lib/app/merge-app-manifest.d.ts +1 -1
  71. package/dist/types/lib/index.d.ts +3 -2
  72. package/dist/types/lib/legacy.d.ts +1 -1
  73. package/dist/types/lib/load-dev-server-config.d.ts +2 -2
  74. package/dist/types/lib/merge-dev-server-config.d.ts +1 -1
  75. package/dist/types/lib/portal/create-portal-manifest.d.ts +1 -1
  76. package/dist/types/lib/portal/load-portal-manifest.d.ts +2 -2
  77. package/dist/types/lib/portal/load-portal-schema.d.ts +1 -1
  78. package/dist/types/lib/portal/portal-config.d.ts +2 -2
  79. package/dist/types/lib/portal/portal-manifest.schema.d.ts +6 -6
  80. package/dist/types/lib/types.d.ts +29 -0
  81. package/dist/types/lib/utils/index.d.ts +1 -0
  82. package/dist/types/lib/utils/resolve-annotations.d.ts +35 -1
  83. package/dist/types/lib/utils/resolve-devops-annotations.d.ts +28 -3
  84. package/dist/types/lib/utils/resolve-git-commit-sha.d.ts +1 -0
  85. package/dist/types/lib/utils/resolve-github-annotations.d.ts +85 -13
  86. package/dist/types/lib/utils/types.d.ts +57 -1
  87. package/dist/types/version.d.ts +1 -1
  88. package/docs/application.md +63 -8
  89. package/docs/auth.md +17 -1
  90. package/docs/migration-v10-to-v11.md +32 -20
  91. package/package.json +69 -33
  92. package/bin/build/bin.js +0 -28
  93. package/bin/build/cli.js +0 -10099
  94. package/bin/build/create-auth-client-B_j4Y_Dr.js +0 -1415
  95. package/bin/build/portal-config-publish-ezU_DFki.js +0 -29578
  96. package/dist/esm/bin/app-build.js +0 -34
  97. package/dist/esm/bin/app-build.js.map +0 -1
  98. package/dist/esm/bin/app-check.js +0 -63
  99. package/dist/esm/bin/app-check.js.map +0 -1
  100. package/dist/esm/bin/app-config-publish.js +0 -89
  101. package/dist/esm/bin/app-config-publish.js.map +0 -1
  102. package/dist/esm/bin/app-config.js +0 -48
  103. package/dist/esm/bin/app-config.js.map +0 -1
  104. package/dist/esm/bin/app-dev.js +0 -102
  105. package/dist/esm/bin/app-dev.js.map +0 -1
  106. package/dist/esm/bin/app-manifest.js +0 -38
  107. package/dist/esm/bin/app-manifest.js.map +0 -1
  108. package/dist/esm/bin/app-pack.js +0 -51
  109. package/dist/esm/bin/app-pack.js.map +0 -1
  110. package/dist/esm/bin/app-tag.js +0 -89
  111. package/dist/esm/bin/app-tag.js.map +0 -1
  112. package/dist/esm/bin/app-upload.js +0 -109
  113. package/dist/esm/bin/app-upload.js.map +0 -1
  114. package/dist/esm/bin/helpers/load-bundle-metadata.js +0 -32
  115. package/dist/esm/bin/helpers/load-bundle-metadata.js.map +0 -1
  116. package/dist/esm/bin/helpers/load-vite-config.js +0 -55
  117. package/dist/esm/bin/helpers/load-vite-config.js.map +0 -1
  118. package/dist/esm/bin/helpers/resolve-app-config.js +0 -46
  119. package/dist/esm/bin/helpers/resolve-app-config.js.map +0 -1
  120. package/dist/esm/bin/helpers/resolve-app-manifest.js +0 -55
  121. package/dist/esm/bin/helpers/resolve-app-manifest.js.map +0 -1
  122. package/dist/esm/bin/helpers/resolve-portal-config.js +0 -46
  123. package/dist/esm/bin/helpers/resolve-portal-config.js.map +0 -1
  124. package/dist/esm/bin/helpers/resolve-portal-manifest.js +0 -55
  125. package/dist/esm/bin/helpers/resolve-portal-manifest.js.map +0 -1
  126. package/dist/esm/bin/helpers/resolve-project-package.js +0 -32
  127. package/dist/esm/bin/helpers/resolve-project-package.js.map +0 -1
  128. package/dist/esm/bin/index.js +0 -12
  129. package/dist/esm/bin/index.js.map +0 -1
  130. package/dist/esm/bin/pack.js +0 -70
  131. package/dist/esm/bin/pack.js.map +0 -1
  132. package/dist/esm/bin/portal-build.js +0 -40
  133. package/dist/esm/bin/portal-build.js.map +0 -1
  134. package/dist/esm/bin/portal-config-publish.js +0 -74
  135. package/dist/esm/bin/portal-config-publish.js.map +0 -1
  136. package/dist/esm/bin/portal-config.js +0 -48
  137. package/dist/esm/bin/portal-config.js.map +0 -1
  138. package/dist/esm/bin/portal-dev.js +0 -61
  139. package/dist/esm/bin/portal-dev.js.map +0 -1
  140. package/dist/esm/bin/portal-manifest.js +0 -38
  141. package/dist/esm/bin/portal-manifest.js.map +0 -1
  142. package/dist/esm/bin/portal-pack.js +0 -60
  143. package/dist/esm/bin/portal-pack.js.map +0 -1
  144. package/dist/esm/bin/portal-tag.js +0 -96
  145. package/dist/esm/bin/portal-tag.js.map +0 -1
  146. package/dist/esm/bin/portal-upload.js +0 -99
  147. package/dist/esm/bin/portal-upload.js.map +0 -1
  148. package/dist/esm/bin/utils/ConsoleLogger.js +0 -112
  149. package/dist/esm/bin/utils/ConsoleLogger.js.map +0 -1
  150. package/dist/esm/bin/utils/create-dev-server.js +0 -167
  151. package/dist/esm/bin/utils/create-dev-server.js.map +0 -1
  152. package/dist/esm/bin/utils/format.js +0 -47
  153. package/dist/esm/bin/utils/format.js.map +0 -1
  154. package/dist/esm/bin/utils/index.js +0 -5
  155. package/dist/esm/bin/utils/index.js.map +0 -1
  156. package/dist/esm/bin/utils/spinner.js +0 -142
  157. package/dist/esm/bin/utils/spinner.js.map +0 -1
  158. package/dist/esm/cli/commands/app/alias.js +0 -42
  159. package/dist/esm/cli/commands/app/alias.js.map +0 -1
  160. package/dist/esm/cli/commands/app/build.js +0 -53
  161. package/dist/esm/cli/commands/app/build.js.map +0 -1
  162. package/dist/esm/cli/commands/app/check.js +0 -57
  163. package/dist/esm/cli/commands/app/check.js.map +0 -1
  164. package/dist/esm/cli/commands/app/config.js +0 -103
  165. package/dist/esm/cli/commands/app/config.js.map +0 -1
  166. package/dist/esm/cli/commands/app/dev.js +0 -67
  167. package/dist/esm/cli/commands/app/dev.js.map +0 -1
  168. package/dist/esm/cli/commands/app/index.js +0 -42
  169. package/dist/esm/cli/commands/app/index.js.map +0 -1
  170. package/dist/esm/cli/commands/app/manifest.js +0 -82
  171. package/dist/esm/cli/commands/app/manifest.js.map +0 -1
  172. package/dist/esm/cli/commands/app/pack.js +0 -71
  173. package/dist/esm/cli/commands/app/pack.js.map +0 -1
  174. package/dist/esm/cli/commands/app/publish.js +0 -130
  175. package/dist/esm/cli/commands/app/publish.js.map +0 -1
  176. package/dist/esm/cli/commands/app/tag.js +0 -113
  177. package/dist/esm/cli/commands/app/tag.js.map +0 -1
  178. package/dist/esm/cli/commands/app/upload.js +0 -85
  179. package/dist/esm/cli/commands/app/upload.js.map +0 -1
  180. package/dist/esm/cli/commands/auth/index.js +0 -22
  181. package/dist/esm/cli/commands/auth/index.js.map +0 -1
  182. package/dist/esm/cli/commands/auth/login.js +0 -72
  183. package/dist/esm/cli/commands/auth/login.js.map +0 -1
  184. package/dist/esm/cli/commands/auth/logout.js +0 -58
  185. package/dist/esm/cli/commands/auth/logout.js.map +0 -1
  186. package/dist/esm/cli/commands/auth/token.js +0 -78
  187. package/dist/esm/cli/commands/auth/token.js.map +0 -1
  188. package/dist/esm/cli/commands/disco/index.js +0 -6
  189. package/dist/esm/cli/commands/disco/index.js.map +0 -1
  190. package/dist/esm/cli/commands/disco/resolve.js +0 -58
  191. package/dist/esm/cli/commands/disco/resolve.js.map +0 -1
  192. package/dist/esm/cli/commands/index.js +0 -11
  193. package/dist/esm/cli/commands/index.js.map +0 -1
  194. package/dist/esm/cli/commands/portal/build.js +0 -27
  195. package/dist/esm/cli/commands/portal/build.js.map +0 -1
  196. package/dist/esm/cli/commands/portal/config.js +0 -101
  197. package/dist/esm/cli/commands/portal/config.js.map +0 -1
  198. package/dist/esm/cli/commands/portal/dev.js +0 -27
  199. package/dist/esm/cli/commands/portal/dev.js.map +0 -1
  200. package/dist/esm/cli/commands/portal/index.js +0 -23
  201. package/dist/esm/cli/commands/portal/index.js.map +0 -1
  202. package/dist/esm/cli/commands/portal/manifest.js +0 -48
  203. package/dist/esm/cli/commands/portal/manifest.js.map +0 -1
  204. package/dist/esm/cli/commands/portal/pack.js +0 -40
  205. package/dist/esm/cli/commands/portal/pack.js.map +0 -1
  206. package/dist/esm/cli/commands/portal/publish.js +0 -76
  207. package/dist/esm/cli/commands/portal/publish.js.map +0 -1
  208. package/dist/esm/cli/commands/portal/schema.js +0 -70
  209. package/dist/esm/cli/commands/portal/schema.js.map +0 -1
  210. package/dist/esm/cli/commands/portal/tag.js +0 -73
  211. package/dist/esm/cli/commands/portal/tag.js.map +0 -1
  212. package/dist/esm/cli/commands/portal/upload.js +0 -41
  213. package/dist/esm/cli/commands/portal/upload.js.map +0 -1
  214. package/dist/esm/cli/main.js +0 -52
  215. package/dist/esm/cli/main.js.map +0 -1
  216. package/dist/esm/cli/options/auth.js +0 -96
  217. package/dist/esm/cli/options/auth.js.map +0 -1
  218. package/dist/esm/cli/options/env.js +0 -30
  219. package/dist/esm/cli/options/env.js.map +0 -1
  220. package/dist/esm/lib/framework.node.js +0 -104
  221. package/dist/esm/lib/framework.node.js.map +0 -1
  222. package/dist/esm/version.js.map +0 -1
  223. package/dist/tsconfig.tsbuildinfo +0 -1
  224. /package/dist/types/{lib → bin}/framework.node.d.ts +0 -0
@@ -1,74 +0,0 @@
1
- import { HttpJsonResponseError } from '@equinor/fusion-framework-module-http/errors';
2
- import { initializeFramework, } from '../lib/framework.node.js';
3
- import { formatPath, chalk } from './utils';
4
- import { generatePortalConfig } from './portal-config.js';
5
- /**
6
- * Publishes the portal configuration to the portal store for a specific build version.
7
- *
8
- * This function generates the portal config, loads the manifest, initializes the Fusion Framework,
9
- * and sends the config to the portal service. Handles and logs errors for common failure scenarios.
10
- *
11
- * @param options - Options for config, manifest, environment, authentication, and logging.
12
- * @returns A promise that resolves when publishing is complete.
13
- * @throws If the build version is missing or publishing fails.
14
- * @public
15
- */
16
- export const publishPortalConfig = async (options) => {
17
- const { log, portal } = options;
18
- // Generate the portal config using provided options and environment
19
- const { config: portalConfig } = await generatePortalConfig({
20
- log,
21
- config: options.config,
22
- env: { environment: options.environment },
23
- });
24
- log?.start('Initializing Fusion Framework...');
25
- // Initialize the Fusion Framework with the provided environment and authentication
26
- const framework = await initializeFramework({
27
- env: options.environment,
28
- auth: options.auth,
29
- });
30
- log?.succeed('Initialized Fusion Framework');
31
- // Create a client for the 'portals' service
32
- const portalClient = await framework.serviceDiscovery.createClient('portals');
33
- // Subscribe to outgoing requests for logging and debugging
34
- portalClient.request$.subscribe((request) => {
35
- log?.debug('Request:', request);
36
- log?.info('🌎', 'Executing request to:', formatPath(request.uri));
37
- });
38
- log?.start('Publishing portal config');
39
- log?.info('Using environment:', chalk.redBright(options.environment));
40
- try {
41
- // Send a PUT request to publish the portal config for the specific build version
42
- const response = await portalClient.json(`/portals/${portal.name}@${portal.version}/config`, {
43
- method: 'PUT',
44
- body: portalConfig,
45
- });
46
- log?.debug('Response:', response);
47
- log?.succeed('Published portal config');
48
- }
49
- catch (error) {
50
- // Handle known HTTP errors with specific log messages
51
- if (error instanceof HttpJsonResponseError) {
52
- switch (error.response.status) {
53
- case 410:
54
- log?.fail('🤬', `Portal ${portal.name} is deleted from portals-service. Please check the portal key and try again.`);
55
- break;
56
- case 404:
57
- log?.fail('🤬', `Portal ${portal.name} not found. Please check the portal key and try again.`);
58
- break;
59
- case 403:
60
- case 401:
61
- log?.fail('🤬', 'You are not authorized to publish portal config. Please check your permissions.');
62
- break;
63
- default:
64
- log?.fail('🤬', 'Failed to publish portal config.', `Status code: ${error.response.status}`, `Message: ${error.response.statusText}`);
65
- break;
66
- }
67
- }
68
- // Rethrow error for upstream handling
69
- throw error;
70
- }
71
- };
72
- // Export as default for compatibility with import patterns
73
- export default publishPortalConfig;
74
- //# sourceMappingURL=portal-config-publish.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal-config-publish.js","sourceRoot":"","sources":["../../../src/bin/portal-config-publish.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import { writeFile } from '../lib/utils';
2
- import { formatPath } from './utils';
3
- import { resolveProjectPackage } from './helpers/resolve-project-package.js';
4
- import { resolvePortalConfig } from './helpers/resolve-portal-config.js';
5
- /**
6
- * Generates the portal configuration object for the current project.
7
- *
8
- * This function resolves the portal package, sets up the runtime environment, resolves the portal config,
9
- * and optionally writes the config to a file if an output path is provided. Logging is supported for
10
- * debugging and progress tracking.
11
- *
12
- * @param options - Optional settings for logger, environment overrides, config path, and output file.
13
- * @returns An object containing the generated config and the resolved package info.
14
- * @throws If writing the config to file fails.
15
- * @public
16
- */
17
- export const generatePortalConfig = async (options) => {
18
- const { log } = options ?? {};
19
- // Resolve the portal's package.json for root and metadata
20
- const pkg = await resolveProjectPackage(log);
21
- // Setup the runtime environment for config resolution
22
- const env = {
23
- command: 'build',
24
- mode: process.env.NODE_ENV ?? 'production',
25
- root: pkg.root,
26
- ...options?.env, // Allow overrides from options
27
- };
28
- // Resolve the portal config using the environment and config path
29
- const config = await resolvePortalConfig(env, { log, config: options?.config });
30
- log?.debug('config:', config);
31
- // If an output path is provided, write the config to file
32
- if (options?.output) {
33
- log?.start('writing config to file');
34
- try {
35
- // Write the config as pretty-printed JSON
36
- await writeFile(options.output, JSON.stringify(config, null, 2));
37
- log?.succeed('config written successfully', formatPath(options.output, { relative: true }));
38
- }
39
- catch (error) {
40
- // Log and rethrow errors encountered during file write
41
- log?.fail('failed to write config');
42
- throw error;
43
- }
44
- }
45
- // Return the generated config and resolved package info for further use
46
- return { config, pkg };
47
- };
48
- //# sourceMappingURL=portal-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal-config.js","sourceRoot":"","sources":["../../../src/bin/portal-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAsB,MAAM,SAAS,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AA8BzE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAAqC,EAAE,EAAE;IAClF,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAC9B,0DAA0D;IAC1D,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAE7C,sDAAsD;IACtD,MAAM,GAAG,GAAe;QACtB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY;QAC1C,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,OAAO,EAAE,GAAG,EAAE,+BAA+B;KACjD,CAAC;IAEF,kEAAkE;IAClE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAChF,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE9B,0DAA0D;IAC1D,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,GAAG,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACrC,IAAI,CAAC;YACH,0CAA0C;YAC1C,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACjE,GAAG,EAAE,OAAO,CAAC,6BAA6B,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uDAAuD;YACvD,GAAG,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACpC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC,CAAC"}
@@ -1,61 +0,0 @@
1
- import { createDevServer } from './utils';
2
- import { resolveProjectPackage } from './helpers/resolve-project-package.js';
3
- import { resolvePortalManifest } from './helpers/resolve-portal-manifest.js';
4
- import { resolvePortalConfig } from './helpers/resolve-portal-config.js';
5
- /**
6
- * Starts the portal development server for local development and testing.
7
- *
8
- * This function sets up the runtime environment, resolves the portal manifest and config,
9
- * and launches a development server using the resolved configuration. It provides detailed
10
- * logging for each step and returns the dev server instance for further use.
11
- *
12
- * @param options - Settings for environment, manifest path, config path, logger, and server options.
13
- * @returns The dev server instance after it has started.
14
- * @public
15
- */
16
- export const startPortalDevServer = async (options) => {
17
- const { log } = options ?? {};
18
- // Resolve the portals's package.json for root and metadata
19
- const pkg = await resolveProjectPackage(log);
20
- // Setup the runtime environment for the dev server
21
- const env = {
22
- root: pkg.root,
23
- environment: 'local', // Always use 'local' for dev server
24
- ...options?.env, // Allow overrides from options
25
- mode: 'development', // Force development mode
26
- command: 'serve', // Command is always 'serve' for dev
27
- };
28
- // Resolve the portal manifest using the environment and manifest path
29
- const portalManifest = await resolvePortalManifest(env, pkg, {
30
- log,
31
- manifestPath: options?.manifest,
32
- });
33
- // Resolve the portal config (replace with real logic as needed)
34
- const portalConfig = await resolvePortalConfig(env, { log, config: options?.config });
35
- log?.start('Starting app development server...');
36
- // Create the dev server configuration, including portal and server settings
37
- const devServer = await createDevServer(env, {
38
- template: {
39
- portal: {
40
- id: portalManifest.name,
41
- },
42
- },
43
- portal: {
44
- manifest: portalManifest,
45
- config: portalConfig,
46
- },
47
- }, {
48
- server: {
49
- port: options?.server?.port,
50
- fs: {
51
- allow: [pkg.root], // Allow access to the root directory
52
- },
53
- },
54
- });
55
- await devServer.listen();
56
- // Log the resolved local URL for the dev server
57
- log?.succeed(`Started app development server on ${devServer.resolvedUrls?.local?.[0]}`);
58
- // Return the dev server instance for further use
59
- return devServer;
60
- };
61
- //# sourceMappingURL=portal-dev.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal-dev.js","sourceRoot":"","sources":["../../../src/bin/portal-dev.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAsB,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAuB1C,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAE9B,2DAA2D;IAC3D,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAE7C,mDAAmD;IACnD,MAAM,GAAG,GAAe;QACtB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,WAAW,EAAE,OAAO,EAAE,oCAAoC;QAC1D,GAAG,OAAO,EAAE,GAAG,EAAE,+BAA+B;QAChD,IAAI,EAAE,aAAa,EAAE,yBAAyB;QAC9C,OAAO,EAAE,OAAO,EAAE,oCAAoC;KACvD,CAAC;IAEF,sEAAsE;IACtE,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE;QAC3D,GAAG;QACH,YAAY,EAAE,OAAO,EAAE,QAAQ;KAChC,CAAC,CAAC;IAEH,gEAAgE;IAChE,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtF,GAAG,EAAE,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAEjD,4EAA4E;IAC5E,MAAM,SAAS,GAAG,MAAM,eAAe,CACrC,GAAG,EACH;QACE,QAAQ,EAAE;YACR,MAAM,EAAE;gBACN,EAAE,EAAE,cAAc,CAAC,IAAI;aACxB;SACF;QACD,MAAM,EAAE;YACN,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,YAAY;SACrB;KACF,EACD;QACE,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI;YAC3B,EAAE,EAAE;gBACF,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,qCAAqC;aACzD;SACF;KACF,CACF,CAAC;IAEF,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;IAEzB,gDAAgD;IAChD,GAAG,EAAE,OAAO,CAAC,qCAAqC,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAExF,iDAAiD;IACjD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
@@ -1,38 +0,0 @@
1
- import { resolvePortalManifest } from './helpers/resolve-portal-manifest.js';
2
- import { resolveProjectPackage } from './helpers/resolve-project-package.js';
3
- /**
4
- * Loads and resolves the portal manifest based on the provided options.
5
- *
6
- * This function resolves the app package, sets up the runtime environment, and loads the portal manifest.
7
- * Logging is supported for debugging and progress tracking. Returns the manifest, package, and environment.
8
- *
9
- * @param options - The options for resolving the portal manifest.
10
- * @returns An object containing the resolved manifest, package, and runtime environment.
11
- * @throws Will throw an error if resolving the application package or manifest fails.
12
- * @public
13
- */
14
- export const loadPortalManifest = async (options) => {
15
- const { log } = options ?? {};
16
- // Resolve the application's package.json for root and metadata
17
- const pkg = await resolveProjectPackage(log);
18
- log?.debug('package', pkg);
19
- // Setup the runtime environment for manifest resolution
20
- const env = {
21
- command: 'build',
22
- mode: process.env.NODE_ENV ?? 'production',
23
- root: pkg.root,
24
- ...options?.env, // Allow overrides from options
25
- };
26
- log?.debug('env:', env);
27
- // Resolve the portal manifest using the environment and manifest path
28
- const manifest = await resolvePortalManifest(env, pkg, {
29
- log,
30
- manifestPath: options?.manifest,
31
- });
32
- log?.debug('manifest:', manifest);
33
- // Return the resolved manifest, package, and environment for further use
34
- return { manifest, pkg, env };
35
- };
36
- // Export as default for compatibility with import patterns
37
- export default loadPortalManifest;
38
- //# sourceMappingURL=portal-manifest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal-manifest.js","sourceRoot":"","sources":["../../../src/bin/portal-manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AA0B7E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,OAAqC,EAAE,EAAE;IAChF,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAE9B,+DAA+D;IAC/D,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAE7C,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC3B,wDAAwD;IACxD,MAAM,GAAG,GAAe;QACtB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY;QAC1C,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,OAAO,EAAE,GAAG,EAAE,+BAA+B;KACjD,CAAC;IAEF,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAExB,sEAAsE;IACtE,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE;QACrD,GAAG;QACH,YAAY,EAAE,OAAO,EAAE,QAAQ;KAChC,CAAC,CAAC;IAEH,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAElC,yEAAyE;IACzE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,2DAA2D;AAC3D,eAAe,kBAAkB,CAAC"}
@@ -1,60 +0,0 @@
1
- import { loadPortalSchema } from '../lib/portal';
2
- import { pack } from './pack';
3
- import { buildPortal } from './portal-build';
4
- /**
5
- * Bundles the portal into an archive for distribution or deployment.
6
- *
7
- * This function builds the portal, validates the manifest, loads the schema, and creates an archive containing
8
- * the portal manifest, schema, and metadata. Handles errors and logs progress for maintainability and debugging.
9
- *
10
- * @param options - Options for logger, manifest path, schema path, and archive name.
11
- * @returns An object containing the archive path, portal manifest, and schema.
12
- * @throws If the manifest build config is missing or packaging fails.
13
- * @public
14
- */
15
- export const bundlePortal = async (options) => {
16
- const { log, manifest } = options;
17
- // Setup a default runtime environment for the build
18
- const env = {
19
- command: 'build',
20
- mode: process.env.NODE_ENV ?? 'production',
21
- environment: null,
22
- root: process.cwd(),
23
- };
24
- // Build the portal and retrieve the manifest and package info
25
- const { pkg, manifest: portalManifest } = await buildPortal({
26
- log,
27
- manifest,
28
- });
29
- // Ensure the manifest contains build configuration
30
- if (!portalManifest.build) {
31
- throw new Error('Manifest build config not found');
32
- }
33
- // Load the portal schema for validation and inclusion in the archive
34
- const schemaResult = await loadPortalSchema(env, { file: options?.schema });
35
- log?.debug('Schema:', schemaResult);
36
- // Create the archive with the portal manifest, schema, and metadata
37
- const result = await pack(pkg, {
38
- log,
39
- archive: options?.archive,
40
- content: {
41
- 'portal-template-manifest.json': JSON.stringify(portalManifest.build, null, 2),
42
- 'portal.schema.json': JSON.stringify(schemaResult.schema, null, 2),
43
- 'metadata.json': JSON.stringify({
44
- name: portalManifest.name,
45
- version: portalManifest.build.version,
46
- }),
47
- },
48
- }).catch((error) => {
49
- // Log and exit if packaging fails
50
- log?.error('Failed to create package:', error);
51
- process.exit(1);
52
- });
53
- // Return the archive path, manifest, and schema for further use
54
- return {
55
- archive: result,
56
- manifest: portalManifest,
57
- schema: schemaResult.schema,
58
- };
59
- };
60
- //# sourceMappingURL=portal-pack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal-pack.js","sourceRoot":"","sources":["../../../src/bin/portal-pack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAwB7C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,OAA4B,EAAE,EAAE;IACjE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAElC,oDAAoD;IACpD,MAAM,GAAG,GAAe;QACtB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY;QAC1C,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE;KACpB,CAAC;IAEF,8DAA8D;IAC9D,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,WAAW,CAAC;QAC1D,GAAG;QACH,QAAQ;KACT,CAAC,CAAC;IAEH,mDAAmD;IACnD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,qEAAqE;IACrE,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5E,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAEpC,oEAAoE;IACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE;QAC7B,GAAG;QACH,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,OAAO,EAAE;YACP,+BAA+B,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC9B,IAAI,EAAE,cAAc,CAAC,IAAI;gBACzB,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO;aACtC,CAAC;SACH;KACF,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,kCAAkC;QAClC,GAAG,EAAE,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,gEAAgE;IAChE,OAAO;QACL,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,cAAc;QACxB,MAAM,EAAE,YAAY,CAAC,MAAM;KAC5B,CAAC;AACJ,CAAC,CAAC"}
@@ -1,96 +0,0 @@
1
- import { HttpJsonResponseError } from '@equinor/fusion-framework-module-http/errors';
2
- import { chalk, formatPath } from './utils';
3
- /**
4
- * Allowed tags for portal versions in the portal service.
5
- *
6
- * - `latest`: Marks the most recent stable version of the portal template.
7
- * - `preview`: Marks a pre-release or preview version for testing or review.
8
- *
9
- * Used by {@link tagPortal} to validate and apply version tags.
10
- *
11
- * @public
12
- */
13
- export var AllowedTags;
14
- (function (AllowedTags) {
15
- AllowedTags["Latest"] = "latest";
16
- AllowedTags["Preview"] = "preview";
17
- })(AllowedTags || (AllowedTags = {}));
18
- /**
19
- * Tags a portal template version in the portal service with a specified tag (e.g., 'latest' or 'preview').
20
- *
21
- * This function validates input, creates a client for the portal service, and sends a tag request.
22
- * It provides detailed logging and error handling for common failure scenarios.
23
- *
24
- * @param options - Tag, portal name, version, framework instance, and logger.
25
- * @returns The result of the tag operation from the portal service.
26
- * @throws If the tag, name, or version is invalid, or if the tag operation fails.
27
- * @public
28
- */
29
- export const tagPortal = async (options) => {
30
- const { tag, name, version, framework, log } = options;
31
- // Validate tag value
32
- if (!['latest', 'preview'].includes(tag)) {
33
- log?.fail('🤪', 'Invalid tag. Use "latest" or "preview".');
34
- process.exit(1);
35
- }
36
- // Validate portal name
37
- if (!name) {
38
- log?.fail('🤪', 'Application name is required.');
39
- process.exit(1);
40
- }
41
- // Validate version
42
- if (!version) {
43
- log?.fail('🤪', 'Version is required.');
44
- process.exit(1);
45
- }
46
- // Log the tagging action for traceability
47
- log?.info('Tagging application:', chalk.greenBright(`${name}@${tag}`, version));
48
- // Create a client for the 'portal-config' service
49
- const client = await framework.serviceDiscovery.createClient('portal-config');
50
- // Subscribe to outgoing requests for logging and debugging
51
- client.request$.subscribe((request) => {
52
- log?.debug('Request:', request);
53
- log?.info('🌎', 'Executing request to:', formatPath(request.uri));
54
- });
55
- log?.start('Tagging portal template...');
56
- try {
57
- // Send a PUT request to tag the portal template version
58
- const response = await client.json(`/templates/${name}/tags/${tag}`, {
59
- method: 'PUT',
60
- body: { version },
61
- });
62
- log?.debug('Response:', response);
63
- log?.succeed('Tagged portal template successfully');
64
- log?.info('🚀', JSON.stringify(response));
65
- }
66
- catch (error) {
67
- // Handle known HTTP errors with specific log messages
68
- if (error instanceof HttpJsonResponseError) {
69
- const { data, response } = error;
70
- log?.debug('Error:', data);
71
- if (data) {
72
- log?.warn(chalk.red(`🤯 error: ${data.code}\n`), chalk.yellowBright(data.message), '\n');
73
- }
74
- switch (response?.status) {
75
- case 410:
76
- log?.fail(`🤬 - ${response?.status} -`, `${name} is deleted. Please check the name and try again.`);
77
- break;
78
- case 404:
79
- log?.fail(`🤬 - ${response?.status} -`, `${name} not found. Please check the name and try again.`);
80
- break;
81
- case 403:
82
- case 401:
83
- log?.fail(`🤬 - ${response?.status} -`, 'You are not authorized to tag. Please check your permissions.');
84
- break;
85
- default:
86
- log?.fail(`🤬 - ${response?.status} -`, 'Failed to tag', `Error: ${error.message}`);
87
- break;
88
- }
89
- }
90
- // Rethrow error for upstream handling
91
- throw error;
92
- }
93
- };
94
- // Export as default for compatibility with import patterns
95
- export default tagPortal;
96
- //# sourceMappingURL=portal-tag.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal-tag.js","sourceRoot":"","sources":["../../../src/bin/portal-tag.ts"],"names":[],"mappings":"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"}
@@ -1,99 +0,0 @@
1
- import AdmZip from 'adm-zip';
2
- import { chalk } from './utils';
3
- import { loadMetadata } from './helpers/load-bundle-metadata';
4
- /**
5
- * Uploads a portal bundle to the portal service for publishing or updating a portal template.
6
- *
7
- * This function loads the bundle, resolves the portal name (from argument or metadata),
8
- * reads the bundle content, and uploads it to the portal service. Handles and logs errors
9
- * for common failure scenarios, including HTTP status codes and bundle reading issues.
10
- *
11
- * @param opt - Options for bundle file, portal name, framework, and logger.
12
- * @returns A promise that resolves when the upload is complete.
13
- * @throws If bundle reading or upload fails, or if the portal service returns an error status.
14
- * @public
15
- */
16
- export const uploadPortalBundle = async (opt) => {
17
- const { log, framework } = opt;
18
- // Load the bundle from file or use the provided AdmZip instance
19
- const bundle = typeof opt.fileOrBundle === 'string' ? new AdmZip(opt.fileOrBundle) : opt.fileOrBundle;
20
- // Resolve the portal name from argument or bundle metadata
21
- const { name } = opt.name
22
- ? { name: opt.name }
23
- : await loadMetadata(bundle).catch((error) => {
24
- log?.error('Failed to resolve manifest:', error);
25
- process.exit(1);
26
- });
27
- // Read the bundle content as a buffer
28
- const content = await bundle.toBufferPromise().catch((error) => {
29
- log?.error('Failed to read bundle content:', error);
30
- process.exit(1);
31
- });
32
- try {
33
- // Create a client for the 'portal-config' service
34
- const appClient = await framework.serviceDiscovery.createClient('portal-config');
35
- // Subscribe to outgoing requests for logging and debugging
36
- appClient.request$.subscribe((request) => {
37
- log?.info('🌎', 'Executing request to:', request.uri);
38
- log?.debug('Request:', request);
39
- });
40
- // Upload the bundle as a zip file to the portal service
41
- const response = await appClient.fetch(`/bundles/templates/${name}`, {
42
- method: 'POST',
43
- body: new Blob([content], {
44
- type: 'application/zip',
45
- }),
46
- headers: {
47
- 'Content-Type': 'application/zip',
48
- },
49
- });
50
- // Handle non-OK responses with detailed error logging
51
- if (!response.ok) {
52
- try {
53
- const { error } = await response.json();
54
- log?.debug('Error:', error);
55
- if (error.message) {
56
- log?.warn(chalk.red(`🤯 error: ${error.code}\n`), chalk.yellowBright(error.message), '\n');
57
- }
58
- }
59
- catch (e) {
60
- log?.debug('Error:', response.statusText);
61
- }
62
- // Handle specific HTTP status codes for user-friendly error messages
63
- if (response.status === 409) {
64
- log?.fail(`🤬 - ${response.status} - `, 'Version is already published, please generate a new release');
65
- process.exit(1);
66
- }
67
- if (response.status === 410) {
68
- log?.fail(`🤬 - ${response.status} - `, `${name} is removed from Fusion`);
69
- process.exit(1);
70
- }
71
- if (response.status === 404) {
72
- log?.fail(`🤬 - ${response.status} - `, `${name} not found`);
73
- process.exit(1);
74
- }
75
- if (response.status === 401 || response.status === 403) {
76
- log?.fail(`🤬 - ${response.status} - `, `This is not allowed for your role on ${name}`);
77
- process.exit(1);
78
- }
79
- if (response.status === 500) {
80
- log?.fail(`🤬 - ${response.status} - `, 'Internal server error, please try again later or contact support');
81
- process.exit(1);
82
- }
83
- // Throw for any other error status
84
- throw new Error(`Failed to upload bundle. HTTP status ${response.status}, ${response.statusText}`);
85
- }
86
- // Log and return the successful response
87
- log?.succeed('Successfully uploaded application bundle');
88
- log?.debug('Response:', response);
89
- }
90
- catch (error) {
91
- // Log and exit on any error during upload
92
- log?.fail('🙅‍♂️', 'Failed to upload application bundle');
93
- log?.error(error);
94
- process.exit(1);
95
- }
96
- };
97
- // Export as default for compatibility with import patterns
98
- export default uploadPortalBundle;
99
- //# sourceMappingURL=portal-upload.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal-upload.js","sourceRoot":"","sources":["../../../src/bin/portal-upload.ts"],"names":[],"mappings":"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"}
@@ -1,112 +0,0 @@
1
- // ConsoleLogger provides a unified interface for logging and spinner-based feedback in CLI tools.
2
- // It wraps a Spinner instance and exposes methods for different log levels and progress reporting.
3
- import { Spinner } from './spinner.js';
4
- /**
5
- * ConsoleLogger is a utility class for logging progress, status, and debug information in CLI applications.
6
- * It uses a spinner for visual feedback and supports debug mode for verbose output.
7
- *
8
- * @remarks
9
- * This class is designed for CLI tools that require both spinner-based progress indication and
10
- * structured logging at various levels (info, warn, error, debug).
11
- *
12
- * @example
13
- * ```ts
14
- * const logger = new ConsoleLogger('My CLI', { debug: true });
15
- * logger.start('Starting task...');
16
- * logger.succeed('Task complete!');
17
- * logger.debug('Debug info');
18
- * ```
19
- */
20
- export class ConsoleLogger {
21
- /**
22
- * The spinner instance used for progress and status messages.
23
- */
24
- spinner;
25
- /**
26
- * Indicates if debug mode is enabled for verbose output.
27
- */
28
- debugMode;
29
- /**
30
- * Creates a new ConsoleLogger.
31
- * @param title - Prefix for spinner/log messages.
32
- * @param options - Optional debug flag.
33
- */
34
- constructor(title, options) {
35
- this.spinner = new Spinner({ prefixText: title });
36
- this.debugMode = options?.debug ?? false;
37
- }
38
- /**
39
- * Start the spinner with a message.
40
- * @param args - Message parts to display.
41
- */
42
- start(...args) {
43
- this.spinner.start(...args);
44
- }
45
- /**
46
- * Mark spinner as succeeded with a message.
47
- * @param args - Message parts to display.
48
- */
49
- succeed(...args) {
50
- this.spinner.succeed(...args);
51
- }
52
- /**
53
- * Mark spinner as failed with a message.
54
- * @param args - Message parts to display.
55
- */
56
- fail(...args) {
57
- this.spinner.fail(...args);
58
- }
59
- /**
60
- * Log an error message to the console.
61
- * @param args - Error message parts.
62
- */
63
- // biome-ignore lint/suspicious/noExplicitAny: same as original
64
- error(...args) {
65
- console.log(...args);
66
- }
67
- /**
68
- * Log a warning message.
69
- * @param args - Warning message parts.
70
- */
71
- warn(...args) {
72
- this.spinner.warn(...args);
73
- }
74
- /**
75
- * Log an informational message.
76
- * @param args - Info message parts.
77
- */
78
- info(...args) {
79
- this.spinner.info(...args);
80
- }
81
- /**
82
- * Alias for info.
83
- * @param args - Info message parts.
84
- */
85
- log(...args) {
86
- this.spinner.info(...args);
87
- }
88
- /**
89
- * Log debug messages if debugMode is enabled.
90
- * @param args - Debug message parts.
91
- */
92
- // biome-ignore lint/suspicious/noExplicitAny: same as original
93
- debug(...args) {
94
- if (this.debugMode) {
95
- console.debug(...args);
96
- }
97
- }
98
- /**
99
- * Attach spinner to native console output.
100
- */
101
- startNativeConsoleCapture() {
102
- this.spinner.attachConsole = true;
103
- }
104
- /**
105
- * Detach spinner from native console output.
106
- */
107
- stopNativeConsoleCapture() {
108
- this.spinner.attachConsole = false;
109
- }
110
- }
111
- export default ConsoleLogger;
112
- //# sourceMappingURL=ConsoleLogger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConsoleLogger.js","sourceRoot":"","sources":["../../../../src/bin/utils/ConsoleLogger.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,mGAAmG;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,aAAa;IACxB;;OAEG;IACa,OAAO,CAAU;IACjC;;OAEG;IACa,SAAS,CAAU;IAEnC;;;;OAIG;IACH,YAAY,KAAa,EAAE,OAA6B;QACtD,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;IAC3C,CAAC;IACD;;;OAGG;IACH,KAAK,CAAC,GAAG,IAAc;QACrB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD;;;OAGG;IACH,OAAO,CAAC,GAAG,IAAc;QACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAChC,CAAC;IACD;;;OAGG;IACH,IAAI,CAAC,GAAG,IAAc;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD;;;OAGG;IACH,+DAA+D;IAC/D,KAAK,CAAC,GAAG,IAAW;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;IACD;;;OAGG;IACH,IAAI,CAAC,GAAG,IAAc;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD;;;OAGG;IACH,IAAI,CAAC,GAAG,IAAc;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD;;;OAGG;IACH,GAAG,CAAC,GAAG,IAAc;QACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD;;;OAGG;IACH,+DAA+D;IAC/D,KAAK,CAAC,GAAG,IAAW;QAClB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD;;OAEG;IACH,yBAAyB;QACvB,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IACpC,CAAC;IACD;;OAEG;IACH,wBAAwB;QACtB,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;IACrC,CAAC;CACF;AAED,eAAe,aAAa,CAAC"}