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

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 (226) hide show
  1. package/CHANGELOG.md +71 -94
  2. package/README.md +98 -104
  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 +73 -79
  89. package/docs/auth.md +18 -45
  90. package/docs/libsecret.md +0 -31
  91. package/docs/migration-v10-to-v11.md +43 -47
  92. package/docs/portal.md +4 -38
  93. package/package.json +69 -33
  94. package/bin/build/bin.js +0 -28
  95. package/bin/build/cli.js +0 -10099
  96. package/bin/build/create-auth-client-B_j4Y_Dr.js +0 -1415
  97. package/bin/build/portal-config-publish-ezU_DFki.js +0 -29578
  98. package/dist/esm/bin/app-build.js +0 -34
  99. package/dist/esm/bin/app-build.js.map +0 -1
  100. package/dist/esm/bin/app-check.js +0 -63
  101. package/dist/esm/bin/app-check.js.map +0 -1
  102. package/dist/esm/bin/app-config-publish.js +0 -89
  103. package/dist/esm/bin/app-config-publish.js.map +0 -1
  104. package/dist/esm/bin/app-config.js +0 -48
  105. package/dist/esm/bin/app-config.js.map +0 -1
  106. package/dist/esm/bin/app-dev.js +0 -102
  107. package/dist/esm/bin/app-dev.js.map +0 -1
  108. package/dist/esm/bin/app-manifest.js +0 -38
  109. package/dist/esm/bin/app-manifest.js.map +0 -1
  110. package/dist/esm/bin/app-pack.js +0 -51
  111. package/dist/esm/bin/app-pack.js.map +0 -1
  112. package/dist/esm/bin/app-tag.js +0 -89
  113. package/dist/esm/bin/app-tag.js.map +0 -1
  114. package/dist/esm/bin/app-upload.js +0 -109
  115. package/dist/esm/bin/app-upload.js.map +0 -1
  116. package/dist/esm/bin/helpers/load-bundle-metadata.js +0 -32
  117. package/dist/esm/bin/helpers/load-bundle-metadata.js.map +0 -1
  118. package/dist/esm/bin/helpers/load-vite-config.js +0 -55
  119. package/dist/esm/bin/helpers/load-vite-config.js.map +0 -1
  120. package/dist/esm/bin/helpers/resolve-app-config.js +0 -46
  121. package/dist/esm/bin/helpers/resolve-app-config.js.map +0 -1
  122. package/dist/esm/bin/helpers/resolve-app-manifest.js +0 -55
  123. package/dist/esm/bin/helpers/resolve-app-manifest.js.map +0 -1
  124. package/dist/esm/bin/helpers/resolve-portal-config.js +0 -46
  125. package/dist/esm/bin/helpers/resolve-portal-config.js.map +0 -1
  126. package/dist/esm/bin/helpers/resolve-portal-manifest.js +0 -55
  127. package/dist/esm/bin/helpers/resolve-portal-manifest.js.map +0 -1
  128. package/dist/esm/bin/helpers/resolve-project-package.js +0 -32
  129. package/dist/esm/bin/helpers/resolve-project-package.js.map +0 -1
  130. package/dist/esm/bin/index.js +0 -12
  131. package/dist/esm/bin/index.js.map +0 -1
  132. package/dist/esm/bin/pack.js +0 -70
  133. package/dist/esm/bin/pack.js.map +0 -1
  134. package/dist/esm/bin/portal-build.js +0 -40
  135. package/dist/esm/bin/portal-build.js.map +0 -1
  136. package/dist/esm/bin/portal-config-publish.js +0 -74
  137. package/dist/esm/bin/portal-config-publish.js.map +0 -1
  138. package/dist/esm/bin/portal-config.js +0 -48
  139. package/dist/esm/bin/portal-config.js.map +0 -1
  140. package/dist/esm/bin/portal-dev.js +0 -61
  141. package/dist/esm/bin/portal-dev.js.map +0 -1
  142. package/dist/esm/bin/portal-manifest.js +0 -38
  143. package/dist/esm/bin/portal-manifest.js.map +0 -1
  144. package/dist/esm/bin/portal-pack.js +0 -60
  145. package/dist/esm/bin/portal-pack.js.map +0 -1
  146. package/dist/esm/bin/portal-tag.js +0 -96
  147. package/dist/esm/bin/portal-tag.js.map +0 -1
  148. package/dist/esm/bin/portal-upload.js +0 -99
  149. package/dist/esm/bin/portal-upload.js.map +0 -1
  150. package/dist/esm/bin/utils/ConsoleLogger.js +0 -112
  151. package/dist/esm/bin/utils/ConsoleLogger.js.map +0 -1
  152. package/dist/esm/bin/utils/create-dev-server.js +0 -167
  153. package/dist/esm/bin/utils/create-dev-server.js.map +0 -1
  154. package/dist/esm/bin/utils/format.js +0 -47
  155. package/dist/esm/bin/utils/format.js.map +0 -1
  156. package/dist/esm/bin/utils/index.js +0 -5
  157. package/dist/esm/bin/utils/index.js.map +0 -1
  158. package/dist/esm/bin/utils/spinner.js +0 -142
  159. package/dist/esm/bin/utils/spinner.js.map +0 -1
  160. package/dist/esm/cli/commands/app/alias.js +0 -42
  161. package/dist/esm/cli/commands/app/alias.js.map +0 -1
  162. package/dist/esm/cli/commands/app/build.js +0 -53
  163. package/dist/esm/cli/commands/app/build.js.map +0 -1
  164. package/dist/esm/cli/commands/app/check.js +0 -57
  165. package/dist/esm/cli/commands/app/check.js.map +0 -1
  166. package/dist/esm/cli/commands/app/config.js +0 -103
  167. package/dist/esm/cli/commands/app/config.js.map +0 -1
  168. package/dist/esm/cli/commands/app/dev.js +0 -67
  169. package/dist/esm/cli/commands/app/dev.js.map +0 -1
  170. package/dist/esm/cli/commands/app/index.js +0 -42
  171. package/dist/esm/cli/commands/app/index.js.map +0 -1
  172. package/dist/esm/cli/commands/app/manifest.js +0 -82
  173. package/dist/esm/cli/commands/app/manifest.js.map +0 -1
  174. package/dist/esm/cli/commands/app/pack.js +0 -71
  175. package/dist/esm/cli/commands/app/pack.js.map +0 -1
  176. package/dist/esm/cli/commands/app/publish.js +0 -130
  177. package/dist/esm/cli/commands/app/publish.js.map +0 -1
  178. package/dist/esm/cli/commands/app/tag.js +0 -113
  179. package/dist/esm/cli/commands/app/tag.js.map +0 -1
  180. package/dist/esm/cli/commands/app/upload.js +0 -85
  181. package/dist/esm/cli/commands/app/upload.js.map +0 -1
  182. package/dist/esm/cli/commands/auth/index.js +0 -22
  183. package/dist/esm/cli/commands/auth/index.js.map +0 -1
  184. package/dist/esm/cli/commands/auth/login.js +0 -72
  185. package/dist/esm/cli/commands/auth/login.js.map +0 -1
  186. package/dist/esm/cli/commands/auth/logout.js +0 -58
  187. package/dist/esm/cli/commands/auth/logout.js.map +0 -1
  188. package/dist/esm/cli/commands/auth/token.js +0 -78
  189. package/dist/esm/cli/commands/auth/token.js.map +0 -1
  190. package/dist/esm/cli/commands/disco/index.js +0 -6
  191. package/dist/esm/cli/commands/disco/index.js.map +0 -1
  192. package/dist/esm/cli/commands/disco/resolve.js +0 -58
  193. package/dist/esm/cli/commands/disco/resolve.js.map +0 -1
  194. package/dist/esm/cli/commands/index.js +0 -11
  195. package/dist/esm/cli/commands/index.js.map +0 -1
  196. package/dist/esm/cli/commands/portal/build.js +0 -27
  197. package/dist/esm/cli/commands/portal/build.js.map +0 -1
  198. package/dist/esm/cli/commands/portal/config.js +0 -101
  199. package/dist/esm/cli/commands/portal/config.js.map +0 -1
  200. package/dist/esm/cli/commands/portal/dev.js +0 -27
  201. package/dist/esm/cli/commands/portal/dev.js.map +0 -1
  202. package/dist/esm/cli/commands/portal/index.js +0 -23
  203. package/dist/esm/cli/commands/portal/index.js.map +0 -1
  204. package/dist/esm/cli/commands/portal/manifest.js +0 -48
  205. package/dist/esm/cli/commands/portal/manifest.js.map +0 -1
  206. package/dist/esm/cli/commands/portal/pack.js +0 -40
  207. package/dist/esm/cli/commands/portal/pack.js.map +0 -1
  208. package/dist/esm/cli/commands/portal/publish.js +0 -76
  209. package/dist/esm/cli/commands/portal/publish.js.map +0 -1
  210. package/dist/esm/cli/commands/portal/schema.js +0 -70
  211. package/dist/esm/cli/commands/portal/schema.js.map +0 -1
  212. package/dist/esm/cli/commands/portal/tag.js +0 -73
  213. package/dist/esm/cli/commands/portal/tag.js.map +0 -1
  214. package/dist/esm/cli/commands/portal/upload.js +0 -41
  215. package/dist/esm/cli/commands/portal/upload.js.map +0 -1
  216. package/dist/esm/cli/main.js +0 -52
  217. package/dist/esm/cli/main.js.map +0 -1
  218. package/dist/esm/cli/options/auth.js +0 -96
  219. package/dist/esm/cli/options/auth.js.map +0 -1
  220. package/dist/esm/cli/options/env.js +0 -30
  221. package/dist/esm/cli/options/env.js.map +0 -1
  222. package/dist/esm/lib/framework.node.js +0 -104
  223. package/dist/esm/lib/framework.node.js.map +0 -1
  224. package/dist/esm/version.js.map +0 -1
  225. package/dist/tsconfig.tsbuildinfo +0 -1
  226. /package/dist/types/{lib → bin}/framework.node.d.ts +0 -0
@@ -1,13 +1,44 @@
1
1
  /**
2
- * Interface for the expected structure of the GitHub Actions event payload.
2
+ * Represents the payload structure for various GitHub webhook events.
3
+ *
4
+ * This type covers common fields found in GitHub event payloads, such as push, pull request,
5
+ * workflow, and release events. All properties are optional to accommodate the differences
6
+ * between event types.
7
+ *
8
+ * @remarks only some are mapped to the GitHub API event types.
9
+ *
10
+ * @property after - The SHA of the most recent commit on the ref after the event.
11
+ * @property head_commit - Information about the head commit, including its SHA.
12
+ * @property ref - The Git ref (branch or tag) that triggered the event.
13
+ * @property workflow - The name of the workflow (for workflow-related events).
14
+ * @property action - The action performed (e.g., "opened", "closed", "created").
15
+ * @property repository - Information about the repository where the event occurred.
16
+ * @property pull_request - Details about the pull request (for pull request events).
17
+ * @property release - Details about the release (for release events).
18
+ * @property sender - Information about the user who triggered the event.
3
19
  */
4
- export interface GithubEventPayload {
20
+ type GithubEventPayload = {
21
+ after?: string;
22
+ head_commit?: {
23
+ id?: string;
24
+ };
25
+ ref?: string;
26
+ workflow?: string;
27
+ action?: string;
28
+ repository?: {
29
+ owner?: {
30
+ login?: string;
31
+ avatar_url?: string;
32
+ };
33
+ name?: string;
34
+ license?: {
35
+ name?: string;
36
+ };
37
+ homepage?: string;
38
+ };
5
39
  pull_request?: {
6
40
  number?: number;
7
41
  title?: string;
8
- user?: {
9
- login?: string;
10
- };
11
42
  head?: {
12
43
  sha?: string;
13
44
  ref?: string;
@@ -16,11 +47,6 @@ export interface GithubEventPayload {
16
47
  updated_at?: string;
17
48
  html_url?: string;
18
49
  };
19
- after?: string;
20
- head_commit?: {
21
- id?: string;
22
- };
23
- ref?: string;
24
50
  release?: {
25
51
  tag_name?: string;
26
52
  name?: string;
@@ -31,9 +57,54 @@ export interface GithubEventPayload {
31
57
  published_at?: string;
32
58
  html_url?: string;
33
59
  };
60
+ sender?: {
61
+ login?: string;
62
+ avatar_url?: string;
63
+ };
64
+ };
65
+ /**
66
+ * Represents metadata and contextual information related to GitHub Actions workflows,
67
+ * pull requests, commits, releases, and associated actors.
68
+ *
69
+ * @property pull_request - Information about the pull request associated with the workflow run.
70
+ * @property pull_request.number - The pull request number.
71
+ * @property pull_request.title - The title of the pull request.
72
+ * @property pull_request.user - The user who created the pull request.
73
+ * @property pull_request.user.login - The login name of the pull request creator.
74
+ * @property pull_request.head - The head commit information of the pull request.
75
+ * @property pull_request.head.sha - The SHA of the head commit.
76
+ * @property pull_request.head.ref - The reference name of the head commit.
77
+ * @property pull_request.created_at - The creation timestamp of the pull request.
78
+ * @property pull_request.updated_at - The last update timestamp of the pull request.
79
+ * @property pull_request.html_url - The URL to view the pull request on GitHub.
80
+ * @property actor - The GitHub username of the actor who triggered the workflow.
81
+ * @property runId - The unique identifier of the workflow run.
82
+ * @property runUrl - The URL to view the workflow run on GitHub.
83
+ * @property repository - The full name of the repository (e.g., "owner/repo").
84
+ * @property after - The SHA of the commit after the workflow run.
85
+ * @property head_commit - Information about the head commit.
86
+ * @property head_commit.id - The SHA of the head commit.
87
+ * @property ref - The Git reference (e.g., "refs/heads/main").
88
+ * @property release - Information about the release associated with the workflow run.
89
+ * @property release.tag_name - The tag name of the release.
90
+ * @property release.name - The name of the release.
91
+ * @property release.body - The body or description of the release.
92
+ * @property release.draft - Indicates if the release is a draft.
93
+ * @property release.prerelease - Indicates if the release is a prerelease.
94
+ * @property release.created_at - The creation timestamp of the release.
95
+ * @property release.published_at - The publication timestamp of the release.
96
+ * @property release.html_url - The URL to view the release on GitHub.
97
+ * @property workflow - The name of the workflow.
98
+ * @property action - The name of the action being executed.
99
+ */
100
+ export type GithubAnnotations = GithubEventPayload & {
34
101
  workflow?: string;
35
102
  action?: string;
36
- }
103
+ eventName: string;
104
+ actor?: string;
105
+ runId?: string;
106
+ runUrl?: string;
107
+ };
37
108
  /**
38
109
  * Resolves GitHub Actions-specific annotation variables from environment variables.
39
110
  *
@@ -50,6 +121,7 @@ export interface GithubEventPayload {
50
121
  * - GITHUB_REPOSITORY: Repository in the format owner/repo
51
122
  * - GITHUB_SERVER_URL: Base URL of the GitHub server (defaults to https://github.com)
52
123
  * - GITHUB_EVENT_PATH: Path to the event payload file (JSON)
124
+ * - GITHUB_WORKFLOW: Name of the workflow
53
125
  *
54
126
  * Notes for maintainers:
55
127
  * - The event payload can be large; consider truncating or parsing if only specific fields are needed.
@@ -61,5 +133,5 @@ export interface GithubEventPayload {
61
133
  * - To add more annotations, extract additional environment variables as needed and include them in the returned object.
62
134
  * - For custom workflows or self-hosted runners, verify that all required environment variables are available.
63
135
  */
64
- export declare const resolveAnnotations: () => Record<string, string>;
65
- export default resolveAnnotations;
136
+ export declare const resolveGithubAnnotations: () => GithubAnnotations;
137
+ export default resolveGithubAnnotations;
@@ -1,6 +1,62 @@
1
+ /**
2
+ * Recursively makes all properties of a type optional, including nested objects and arrays.
3
+ *
4
+ * - For object types, all properties become optional and the transformation is applied deeply.
5
+ * - For array properties, the transformation is applied to the array's element type.
6
+ * - For primitive types and functions, the type is preserved as-is.
7
+ *
8
+ * This utility is useful for scenarios such as:
9
+ * - Creating deeply partial configuration objects (e.g., for overrides or patch updates)
10
+ * - Accepting partial user input for complex data structures
11
+ * - Safely merging deeply nested objects
12
+ *
13
+ * @template T - The type to make recursively partial.
14
+ *
15
+ * @example
16
+ * // Simple object
17
+ * type Foo = { a: number; b: { c: string } };
18
+ * // RecursivePartial<Foo> is: { a?: number; b?: { c?: string } }
19
+ *
20
+ * // Object with array
21
+ * type Bar = { items: { id: string; value: number }[] };
22
+ * // RecursivePartial<Bar> is: { items?: Array<{ id?: string; value?: number }> }
23
+ *
24
+ * // Nested and mixed types
25
+ * type Baz = { x: number; y: { z: { w: string[] } } };
26
+ * // RecursivePartial<Baz> is: { x?: number; y?: { z?: { w?: string[] } } }
27
+ *
28
+ * // With primitives and functions
29
+ * type Qux = { cb: () => void; flag: boolean; nested: { n: number } };
30
+ * // RecursivePartial<Qux> is: { cb?: () => void; flag?: boolean; nested?: { n?: number } }
31
+ *
32
+ * @remarks
33
+ * - RecursivePartial preserves the original type for primitives, functions, and Date objects.
34
+ * - For union types, each member is transformed recursively.
35
+ * - TypeScript's built-in Partial<T> only makes top-level properties optional; RecursivePartial applies this deeply.
36
+ *
37
+ * @see Partial
38
+ * @see Value
39
+ */
1
40
  export type RecursivePartial<T> = {
2
41
  [P in keyof T]?: T[P] extends Array<infer U> ? Array<Value<U>> : Value<T[P]>;
3
42
  };
4
- type AllowedPrimitives = Function | boolean | string | number | Date;
43
+ type AnyFunction = (...args: any[]) => unknown;
44
+ /**
45
+ * Represents the set of primitive types and commonly used types allowed in the framework.
46
+ * Includes function types, booleans, strings, numbers, and Date objects.
47
+ *
48
+ * @remarks
49
+ * - `AnyFunction` should be defined elsewhere as a type representing any function signature.
50
+ * - Useful for constraining generic types or utility functions to a specific set of primitives.
51
+ */
52
+ type AllowedPrimitives = AnyFunction | boolean | string | number | Date;
53
+ /**
54
+ * Resolves to the type `T` if it extends `AllowedPrimitives`, otherwise recursively makes all properties of `T` optional.
55
+ *
56
+ * @typeParam T - The type to be evaluated.
57
+ * @remarks
58
+ * This utility type is useful for creating deeply partial versions of complex types,
59
+ * while preserving primitive types as-is.
60
+ */
5
61
  type Value<T> = T extends AllowedPrimitives ? T : RecursivePartial<T>;
6
62
  export {};
@@ -1 +1 @@
1
- export declare const version = "11.0.0-next.8";
1
+ export declare const version = "11.0.1";
@@ -1,71 +1,10 @@
1
- ---
2
- title: Developing Apps with Fusion Framework CLI
3
- description: >
4
- In-depth guide to building, configuring, and deploying applications using the Fusion Framework CLI. Includes setup, essential commands, configuration files, CI/CD best practices, troubleshooting, and advanced tips for modern app development.
5
- category: cli
6
- related:
7
- - ./auth.md
8
- - ./migration-v10-to-v11.md
9
- tags:
10
- - getting-started
11
- - app-development
12
- - configuration
13
- - deployment
14
- - ci-cd
15
- - commands
16
- - troubleshooting
17
- - release-management
18
- - automation
19
- - best-practices
20
- - migration
21
- keywords:
22
- - fusion-framework-cli upload
23
- - fusion-framework-cli publish
24
- - fusion-framework-cli tag
25
- - fusion-framework-cli config
26
- - fusion-framework-cli build
27
- - fusion-framework-cli pack
28
- - fusion-framework-cli check
29
- - fusion-framework-cli manifest
30
- - fusion-framework-cli troubleshooting
31
- - fusion-framework-cli deployment
32
- - fusion-framework-cli ci-cd
33
- - fusion app upload
34
- - fusion app publish
35
- - fusion app tag
36
- - fusion app config
37
- - fusion app build
38
- - fusion app pack
39
- - fusion app check
40
- - fusion app manifest
41
- - fusion app troubleshooting
42
- - fusion app deployment
43
- - fusion app ci-cd
44
- - fusion cli command reference
45
- - fusion cli options
46
- - fusion cli arguments
47
- ---
48
-
49
- # Fusion Framework CLI: Application Development Guide
50
-
51
- > **Table of Contents**
52
- > - [Getting Started](#getting-started)
53
- > - [Prerequisites](#prerequisites)
54
- > - [Troubleshooting & FAQ](#troubleshooting--faq)
55
- > - [Configuration](#configuration)
56
- > - [CI/CD Best Practices](#cicd)
57
- > - [Command Reference](#commands)
58
- > - [Migration & Deprecated Commands](#aliases)
59
-
60
- ---
61
-
62
1
  The Fusion Framework CLI empowers you to rapidly build, configure, and deploy modern applications with ease. Whether you’re starting a new project or maintaining an existing app, this CLI streamlines your workflow—from local development to production deployment.
63
2
 
64
3
  This guide will help you get set up, understand the most important commands, and follow best practices for configuration and CI/CD. Let’s get started building robust, scalable apps with Fusion Framework!
65
4
 
66
5
  ## Getting Started
67
6
 
68
- ### 1. Install the CLI
7
+ ### Install the CLI
69
8
 
70
9
  ```sh
71
10
  pnpm add -D @equinor/fusion-framework-cli
@@ -73,7 +12,7 @@ pnpm add -D @equinor/fusion-framework-cli
73
12
  npm install --save-dev @equinor/fusion-framework-cli
74
13
  ```
75
14
 
76
- ### 2. Scaffold a New App (if supported)
15
+ ### Scaffold a New App (if supported)
77
16
 
78
17
  > **Tip:** If you have a template or starter, clone it. Otherwise, create a new directory and initialize your project as below.
79
18
 
@@ -82,7 +21,7 @@ mkdir my-fusion-app && cd my-fusion-app
82
21
  pnpm init
83
22
  ```
84
23
 
85
- ### 3. Create Required Files
24
+ ### Create Required Files
86
25
 
87
26
  #### Minimal `package.json` Example
88
27
 
@@ -98,6 +37,18 @@ pnpm init
98
37
  }
99
38
  ```
100
39
 
40
+ > **Build Output Configuration:**
41
+ > The CLI uses the `main` field (or `module` field) in your `package.json` to determine where to output the built application bundle. If neither field is specified, it defaults to `./dist/bundle.js`.
42
+ >
43
+ > **Why this approach?** Using the `main`/`module` fields ensures your package works correctly when served directly or when developing portals with internal references. This follows Node.js package conventions and enables proper module resolution.
44
+ >
45
+ > **Important:** The output directory cannot be the project root, the `src` directory, or the current working directory. Always specify a dedicated build directory like `dist/`, `build/`, or similar.
46
+ >
47
+ > **Examples:**
48
+ > - `"main": "dist/index.js"` → outputs to `dist/index.js`
49
+ > - `"module": "build/app.esm.js"` → outputs to `build/app.esm.js`
50
+ > - No `main`/`module` specified → defaults to `dist/bundle.js`
51
+
101
52
  #### Example `app.manifest.ts`
102
53
 
103
54
  ```ts
@@ -105,8 +56,8 @@ import { defineAppManifest } from '@equinor/fusion-framework-cli/app';
105
56
 
106
57
  export default defineAppManifest(async (env, { base }) => ({
107
58
  ...base,
108
- name: 'My Fusion App',
109
- version: '0.0.1',
59
+ appKey: 'my-app',
60
+ displayName: 'My First Awesome Fusion App'
110
61
  // Add more manifest fields as needed
111
62
  }));
112
63
  ```
@@ -128,13 +79,22 @@ export default defineAppConfig((env, args) => ({
128
79
  }));
129
80
  ```
130
81
 
131
- ### 4. Start the Development Server
82
+ ### Start the Development Server
132
83
 
133
84
  ```sh
134
85
  pnpm fusion-framework-cli dev
135
86
  ```
136
87
 
137
- ### 5. Log in to Fusion Framework (if needed)
88
+ ### Log in to Fusion Framework (if needed)
89
+
90
+ > [!NOTE]
91
+ > __All HTTP requests to Fusion services require an authorized user.__
92
+ > For example, before running `fusion-framework-cli app publish`, make sure you are authenticated using `fusion-framework-cli auth login`.
93
+
94
+ > [!WARNING]
95
+ > The `fusion-framework-cli auth login` command is only available in interactive environments (such as your local terminal). For CI/CD pipelines or automated deployments, you must provide a valid authentication token using the `FUSION_TOKEN` environment variable.
96
+ >
97
+ > See [Authentication](auth.md#setting-the-fusion-token-in-github) for details on setting up tokens for CI/CD.
138
98
 
139
99
  ```sh
140
100
  pnpm fusion-framework-cli auth login
@@ -144,7 +104,7 @@ pnpm fusion-framework-cli auth login
144
104
 
145
105
  ```sh
146
106
  pnpm fusion-framework-cli publish --env <environment>
147
- pnpm fusion-framework-cli app config --upload --env <environment>
107
+ pnpm fusion-framework-cli app config --publish --env <environment>
148
108
  ```
149
109
 
150
110
  > **Tip:** For CI/CD and automation, set the `FUSION_TOKEN` environment variable. See [Authentication](./docs/auth.md) for details.
@@ -292,11 +252,11 @@ jobs:
292
252
  - name: Publish application
293
253
  run: pnpm exec fusion-framework-cli app upload --env ${{ matrix.env }} app-bundle.zip
294
254
  - step: Upload configuration
295
- run: pnpm exec fusion-framework-cli app config --upload --env ${{ matrix.env }}
255
+ run: pnpm exec fusion-framework-cli app config --publish --env ${{ matrix.env }}
296
256
  ```
297
257
 
298
258
  > [!TIP]
299
- > see [setting-the-fusion-token-in-github](./auth.md#setting-the-fusion-token-in-github) for adding `FUSION_TOKEN` to your envirnoment
259
+ > see [setting-the-fusion-token-in-github](auth.md#setting-the-fusion-token-in-github) for adding `FUSION_TOKEN` to your environment
300
260
 
301
261
 
302
262
  ### Example: Using Environment Variables in App Config
@@ -305,7 +265,7 @@ You can use environment variables in your app configuration to inject secrets or
305
265
 
306
266
  ```yml
307
267
  step: Upload configuration
308
- run: pnpm exec fusion-framework-cli app config --upload --env ${{ matrix.env }}
268
+ run: pnpm exec fusion-framework-cli app config --publish --env ${{ matrix.env }}
309
269
  with:
310
270
  CONFIG_VALUE_FOO: ${{ VAR.ENVIRONMENT_CONFIG_VALUE }}
311
271
  CONFIG_VALUE_BAR: ${{ SECRETS.ENVIRONMENT_CONFIG_SECRET_VALUE }}
@@ -342,6 +302,7 @@ The Fusion Framework CLI provides a suite of commands to support the full applic
342
302
  - [Pack](#pack) — Bundle your app into a distributable archive.
343
303
  - [Upload](#upload) — Upload your app bundle to the Fusion app store.
344
304
  - [Tag](#tag) — Tag a published app version for release management.
305
+ - [Manifest](#manifest) — Generate your app manifest file.
345
306
  - [Check](#check) — Verify your app's registration status.
346
307
  - [Aliases](#aliases) — Deprecated commands and their replacements.
347
308
 
@@ -383,7 +344,7 @@ Publish your application to the Fusion app store (registry) for deployment. This
383
344
  | ------------------ | --------------------------------------------------------------------------------------------------- | ----------------- |
384
345
  | `[bundle]` | Path to the app bundle to upload. If omitted, the CLI will build and bundle your app automatically. | |
385
346
  | `-e`, `--env` | Target environment for deployment (e.g., `ci`, `fqa`, `fprd`). | |
386
- | `-m`, `--manifest` | Manifest file to use for bundling (e.g., `app.manifest.ts`). | `app.manifest.ts` |
347
+ | `-m`, `--manifest` | Manifest file to use for bundling (e.g., `app.manifest.ts`) (optional). | `app.manifest.ts` |
387
348
  | `-t`, `--tag` | Tag to apply to the published app (`latest` \| `preview`). | `latest` |
388
349
  | `-d`, `--debug` | Enable debug mode for verbose logging. | `false` |
389
350
  | `--token` | Authentication token for Fusion. | |
@@ -474,6 +435,14 @@ pnpm fusion-framework-cli build
474
435
  pnpm fusion-framework-cli build app.manifest.dev.ts --debug
475
436
  ```
476
437
 
438
+ > [!NOTE]
439
+ > The build output location is determined by the `main` field (or `module` field) in your `package.json`. If neither field is specified, the CLI defaults to `./dist/bundle.js`. This approach ensures your package works correctly when served directly or when developing portals with internal references, following Node.js package conventions for proper module resolution. The output directory cannot be the project root, the `src` directory, or the current working directory.
440
+ >
441
+ > **Examples:**
442
+ > - `"main": "dist/index.js"` → builds to `dist/index.js`
443
+ > - `"module": "build/app.esm.js"` → builds to `build/app.esm.js`
444
+ > - No `main`/`module` specified → defaults to `dist/bundle.js`
445
+
477
446
  ### Pack
478
447
 
479
448
  Build a distributable app bundle archive for deployment.
@@ -562,17 +531,42 @@ pnpm fusion-framework-cli app tag <tag> [options]
562
531
  ```sh
563
532
  pnpm fusion-framework-cli app tag latest
564
533
  pnpm fusion-framework-cli app tag preview --env prod --manifest app.manifest.prod.ts
565
- pnpm fusion-framework-cli app tag stable --appKey my-app --version 1.2.3
534
+ pnpm fusion-framework-cli app tag latest --appKey my-app --version 1.2.3
566
535
  ```
567
536
 
568
537
  > [!TIP] You can roll back a release by tagging a previous build as `latest`. Simply run the tag command with the desired version to make it the active release for deployment.
569
538
 
570
539
  > [!NOTE]
571
540
  > - The `tag` command requires a published application version. You can specify the app key and version directly, or let the CLI resolve them from your manifest file.
572
- > - Supported tags are: `latest`, `preview`, and `stable`.
541
+ > - Supported tags are: `latest` and `preview`.
573
542
  > - Authentication options (`--token`, `--tenantId`, `--clientId`) can be set via CLI flags or environment variables.
574
543
  > - If tagging fails, an error will be logged and the process will exit with a non-zero code.
575
544
 
545
+ ### Manifest
546
+
547
+ Generate and output your application manifest for Fusion apps.
548
+
549
+ | Option/Argument | Description | Default / Example |
550
+ | --------------------- | -------------------------------------------------------------------------- | ----------------- |
551
+ | `[manifest]` | Manifest build file to use (e.g., `app.manifest[.env]?.[ts,js,json]`). | `app.manifest.ts` |
552
+ | `-d, --debug` | Enable debug mode for verbose logging. | `false` |
553
+ | `-o, --output <path>` | Write manifest to the specified file (default: stdout). | `stdout` |
554
+ | `-s, --silent` | Silent mode, suppresses output except errors. | `false` |
555
+
556
+ **Usage:**
557
+ ```sh
558
+ pnpm fusion-framework-cli app manifest [manifest] [options]
559
+ ```
560
+
561
+ **Examples:**
562
+ ```sh
563
+ pnpm fusion-framework-cli app manifest
564
+ pnpm fusion-framework-cli app manifest app.manifest.prod.ts --output ./dist/app.manifest.json
565
+ pnpm fusion-framework-cli app manifest --debug
566
+ ```
567
+
568
+ > **Tip:** By default, the manifest is printed to stdout. Use `--output` to write it to a file for use in CI/CD pipelines or for inspection.
569
+
576
570
  ### Check
577
571
 
578
572
  Check if a Fusion application is registered in the Fusion app store (registry).
@@ -634,11 +628,11 @@ pnpm fusion-framework-cli build-pack
634
628
 
635
629
  > [!WARNING]
636
630
  > The deprecated commands will be removed in future versions. Please update your scripts and workflows to use the new command names (`pack`, `upload`, `manifest`, `publish`) to ensure compatibility with v11 and beyond.
637
- > For a full migration guide, see [Migration v10 to v11](./migration-v10-to-v11.md).
631
+ > For a full migration guide, see [Migration v10 to v11](migration-v10-to-v11.md).
638
632
 
639
633
  ---
640
634
 
641
635
  > **Need more examples?**
642
- > - See the [cookbooks/](../../cookbooks/) directory for real-world app examples.
643
- > - For migration help, see [Migration v10 to v11](./migration-v10-to-v11.md).
644
- > - For advanced configuration, see [Authentication](./auth.md) and [CI/CD](#cicd).
636
+ > - See the [cookbooks directory in the GitHub repository](https://github.com/equinor/fusion-framework/tree/main/cookbooks) for real-world app examples.
637
+ > - For migration help, see [Migration v10 to v11](migration-v10-to-v11.md).
638
+ > - For advanced configuration, see [Authentication](auth.md) and [CI/CD](#ci-cd).
package/docs/auth.md CHANGED
@@ -1,49 +1,6 @@
1
- ---
2
- title: Fusion Framework CLI - Authorization
3
- description: >
4
- Comprehensive guide to authentication and authorization in the Fusion Framework CLI, covering Azure AD, MSAL, local development, CI/CD, service principals, and best practices for secure automation and integration.
5
- category: cli
6
- related:
7
- - '@equinor/fusion-framework-module-msal-node/README.md'
8
- tags:
9
- - cli
10
- - fusion-framework
11
- - msal
12
- - azure
13
- - azure-ad
14
- - authentication
15
- - authorization
16
- - service-principal
17
- - github-actions
18
- - ci
19
- - cd
20
- - devops
21
- - security
22
- keywords:
23
- - azure ad
24
- - msal
25
- - access token
26
- - authentication flow
27
- - interactive login
28
- - silent authentication
29
- - token caching
30
- - secure storage
31
- - app registration
32
- - tenant id
33
- - client id
34
- - scopes
35
- - api permissions
36
- - oidc
37
- - sso
38
- - cloud identity
39
- - developer experience
40
- ---
41
-
42
- # Authentication with Fusion Framework CLI
43
-
44
1
  The Fusion Framework CLI provides secure, robust authentication for both automation and interactive development scenarios by leveraging Microsoft's MSAL (Microsoft Authentication Library) and Azure Active Directory (Azure AD). Authentication is handled through the Fusion Framework for Node.js, using the `@equinor/fusion-framework-module-msal-node` package, which is built on top of Microsoft's official `msal-node` library. This ensures standards-compliant, up-to-date authentication flows and seamless integration across Fusion Framework applications and tools.
45
2
 
46
- Key features include:
3
+ ## Key features
47
4
  - **Multiple authentication modes:**
48
5
  - `token_only`: Use a pre-provided token (e.g., for CI/CD and automation).
49
6
  - `silent`: Acquire tokens silently using cached or refresh tokens (background services, scripts).
@@ -75,7 +32,7 @@ When configuring authentication for the Fusion Framework CLI, you will encounter
75
32
 
76
33
  ## Local Development
77
34
 
78
- ### Logging in with the CLI
35
+ ### Login in with the CLI
79
36
 
80
37
  For local development, you should authenticate interactively using the CLI's built-in login command. This uses the `interactive` authentication mode, which will prompt you to sign in via your browser and securely store your credentials for future CLI commands.
81
38
 
@@ -113,6 +70,22 @@ The CLI provides several authentication-related options for advanced scenarios o
113
70
 
114
71
  These options allow you to use the CLI with custom tenants, client apps, or tokens if needed, but for most development scenarios, the built-in defaults are sufficient and only the `--scope` option is commonly changed. This flexibility supports both simple and advanced authentication needs, making it easy to get started while enabling custom setups for more complex environments.
115
72
 
73
+ ### Acquiring token
74
+
75
+ The `auth token` command is designed to show your access token for the current user.
76
+
77
+ ```sh
78
+ fusion-framework-cli auth token
79
+ ```
80
+
81
+ > [!TIP]
82
+ > The `--silent` flag outputs only the token (no extra logging), which is useful for exporting the token as an environment variable or saving it to a file for local testing or scripting:
83
+ > ```sh
84
+ > export FUSION_TOKEN=$(fusion-framework-cli auth token --silent)
85
+ > ```
86
+
87
+ > [!Note] This command requires an interactive user context and MSAL Node. It is not suitable for CI/CD environments, as there is no user available in those scenarios. Use it for local development, testing, or whenever you need to preserve a Fusion token for your own scripts or tools.
88
+
116
89
  ## CI/CD
117
90
 
118
91
  ### Setting the Fusion Token in GitHub
package/docs/libsecret.md CHANGED
@@ -1,34 +1,3 @@
1
- ---
2
- title: Enabling Secure Credential Storage with libsecret
3
- description: Instructions for installing libsecret on Linux to enable secure credential storage for your CLI.
4
- tags:
5
- - cli
6
- - authentication
7
- - keytar
8
- - libsecret
9
- - linux
10
- - security
11
- - credentials
12
- - msal
13
- - nodejs
14
- - keychain
15
- keywords:
16
- - secure credential storage
17
- - keychain
18
- - linux
19
- - node.js
20
- - password manager
21
- - system keyring
22
- - msal-node
23
- - credential storage
24
- - cross-platform
25
- - token caching
26
- - npm
27
- - secrets
28
- - cli authentication
29
- - keytar troubleshooting
30
- ---
31
-
32
1
  This CLI enables secure authentication and persistent token caching by storing credentials in your system's keychain. It uses [`@azure/msal-node`](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-node) for authentication, which relies on the [`keytar`](https://github.com/atom/node-keytar) module for secure credential storage.
33
2
 
34
3
  > **What is `libsecret`?**