@forge/cli-shared 8.19.1-next.0 → 8.20.0-experimental-a6c6519

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 CHANGED
@@ -1,5 +1,72 @@
1
1
  # @forge/cli-shared
2
2
 
3
+ ## 8.20.0-experimental-a6c6519
4
+
5
+ ### Minor Changes
6
+
7
+ - 7f9ae91: Added variable prompting and structure skeleton for forge module add
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [5b726e6]
12
+ - @forge/manifest@12.6.0-experimental-a6c6519
13
+
14
+ ## 8.20.0
15
+
16
+ ### Minor Changes
17
+
18
+ - 1e710ce: Detect permission and egress changes in post-deployment verification
19
+
20
+ ### Patch Changes
21
+
22
+ - c6ee214: Added Debug Log for Non Essential CCP Entitlement ID
23
+ - Updated dependencies [8b7704f]
24
+ - Updated dependencies [4964a50]
25
+ - Updated dependencies [911bef1]
26
+ - Updated dependencies [399ae7d]
27
+ - Updated dependencies [955c1ab]
28
+ - Updated dependencies [53b24df]
29
+ - Updated dependencies [36fbb18]
30
+ - Updated dependencies [3b625c7]
31
+ - @forge/manifest@12.6.0
32
+
33
+ ## 8.20.0-next.5
34
+
35
+ ### Patch Changes
36
+
37
+ - Updated dependencies [3b625c7]
38
+ - @forge/manifest@12.6.0-next.3
39
+
40
+ ## 8.20.0-next.4
41
+
42
+ ### Patch Changes
43
+
44
+ - Updated dependencies [8b7704f]
45
+ - Updated dependencies [4964a50]
46
+ - Updated dependencies [911bef1]
47
+ - Updated dependencies [955c1ab]
48
+ - Updated dependencies [53b24df]
49
+ - @forge/manifest@12.6.0-next.2
50
+
51
+ ## 8.20.0-next.3
52
+
53
+ ### Patch Changes
54
+
55
+ - c6ee214: Added Debug Log for Non Essential CCP Entitlement ID
56
+
57
+ ## 8.20.0-next.2
58
+
59
+ ### Patch Changes
60
+
61
+ - Updated dependencies [36fbb18]
62
+ - @forge/manifest@12.6.0-next.1
63
+
64
+ ## 8.20.0-next.1
65
+
66
+ ### Minor Changes
67
+
68
+ - 1e710ce: Detect permission and egress changes in post-deployment verification
69
+
3
70
  ## 8.19.1-next.0
4
71
 
5
72
  ### Patch Changes
@@ -5,5 +5,6 @@ export * from './package-installer';
5
5
  export * from './register-app';
6
6
  export * from './sites';
7
7
  export * from './template';
8
+ export * from './template-module';
8
9
  export * from './get-app-owner';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/apps/index.ts"],"names":[],"mappings":"AAEA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/apps/index.ts"],"names":[],"mappings":"AAEA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
package/out/apps/index.js CHANGED
@@ -8,4 +8,5 @@ tslib_1.__exportStar(require("./package-installer"), exports);
8
8
  tslib_1.__exportStar(require("./register-app"), exports);
9
9
  tslib_1.__exportStar(require("./sites"), exports);
10
10
  tslib_1.__exportStar(require("./template"), exports);
11
+ tslib_1.__exportStar(require("./template-module"), exports);
11
12
  tslib_1.__exportStar(require("./get-app-owner"), exports);
@@ -0,0 +1,62 @@
1
+ export declare class BifrostFetchError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export declare type UIFramework = 'ui-kit' | 'custom-ui';
5
+ export interface TemplateVariableDef {
6
+ name: string;
7
+ prompt: string;
8
+ default?: string;
9
+ }
10
+ export interface ModuleTemplateMeta {
11
+ name: string;
12
+ displayName: string;
13
+ description: string;
14
+ product: string;
15
+ category?: string;
16
+ uiFramework?: UIFramework;
17
+ moduleKey: string;
18
+ dependencies?: Record<string, string> | string[];
19
+ devDependencies?: Record<string, string> | string[];
20
+ frontend?: {
21
+ dependencies?: string[];
22
+ devDependencies?: string[];
23
+ };
24
+ customUiDependencies?: string[];
25
+ customUiDevDependencies?: string[];
26
+ requiredScopes?: string[];
27
+ variables?: TemplateVariableDef[];
28
+ fileOperations?: Array<{
29
+ type: 'create' | 'append' | 'merge' | 'update';
30
+ source?: string;
31
+ target: string;
32
+ template?: boolean;
33
+ }>;
34
+ variants?: Record<UIFramework, {
35
+ manifestPath?: string;
36
+ dependencies?: Record<string, string> | string[];
37
+ devDependencies?: Record<string, string> | string[];
38
+ frontend?: {
39
+ dependencies?: string[];
40
+ devDependencies?: string[];
41
+ };
42
+ variables?: TemplateVariableDef[];
43
+ fileOperations?: Array<{
44
+ type: 'create' | 'append' | 'merge' | 'update';
45
+ source?: string;
46
+ target: string;
47
+ template?: boolean;
48
+ }>;
49
+ }>;
50
+ cacheDir?: string;
51
+ }
52
+ export declare class TemplateModuleServices {
53
+ private readonly baseUrl;
54
+ private templatesCache;
55
+ constructor(baseUrl?: string);
56
+ getAvailableModules(product: string): Promise<ModuleTemplateMeta[]>;
57
+ private fetchModuleTemplates;
58
+ fetchManifestFragment(manifestPath: string): Promise<string>;
59
+ downloadModuleAssets(template: ModuleTemplateMeta, uiFramework?: UIFramework): Promise<ModuleTemplateMeta>;
60
+ cleanupCache(cacheDir: string): void;
61
+ }
62
+ //# sourceMappingURL=template-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-module.d.ts","sourceRoot":"","sources":["../../src/apps/template-module.ts"],"names":[],"mappings":"AAUA,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,oBAAY,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IACpD,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IAEF,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;QAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IAEH,QAAQ,CAAC,EAAE,MAAM,CACf,WAAW,EACX;QACE,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;QACjD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;QACpD,QAAQ,CAAC,EAAE;YACT,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;YACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5B,CAAC;QACF,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;QAClC,cAAc,CAAC,EAAE,KAAK,CAAC;YACrB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;YAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,CAAC,EAAE,OAAO,CAAC;SACpB,CAAC,CAAC;KACJ,CACF,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,cAAc,CAAqC;gBAE/C,OAAO,CAAC,EAAE,MAAM;IAIf,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAOlE,oBAAoB;IAsBrB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa5D,oBAAoB,CAC/B,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,kBAAkB,CAAC;IAkCvB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAO5C"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TemplateModuleServices = exports.BifrostFetchError = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const fs_1 = tslib_1.__importDefault(require("fs"));
6
+ const path_1 = tslib_1.__importDefault(require("path"));
7
+ const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
8
+ const os_1 = tslib_1.__importDefault(require("os"));
9
+ const url_1 = require("url");
10
+ const text_1 = require("../ui/text");
11
+ const BIFROST_BASE_URL = 'https://forge-templates-bifrost.ddev.frontend.public.atl-paas.net/assets/';
12
+ const MODULE_INDEX_FILE = 'template-modules.json';
13
+ class BifrostFetchError extends Error {
14
+ constructor(message) {
15
+ super(message);
16
+ this.name = 'BifrostFetchError';
17
+ }
18
+ }
19
+ exports.BifrostFetchError = BifrostFetchError;
20
+ class TemplateModuleServices {
21
+ baseUrl;
22
+ templatesCache = null;
23
+ constructor(baseUrl) {
24
+ this.baseUrl = baseUrl ?? BIFROST_BASE_URL;
25
+ }
26
+ async getAvailableModules(product) {
27
+ const infos = await this.fetchModuleTemplates();
28
+ const filtered = infos.filter((i) => i.product === product);
29
+ return filtered;
30
+ }
31
+ async fetchModuleTemplates() {
32
+ if (this.templatesCache) {
33
+ return this.templatesCache;
34
+ }
35
+ const indexUrl = new url_1.URL(MODULE_INDEX_FILE, this.baseUrl);
36
+ const res = await (0, node_fetch_1.default)(indexUrl);
37
+ if (!res.ok) {
38
+ throw new BifrostFetchError(text_1.Text.module.errors.bifrostIndexFetchFailed(res.status, res.statusText));
39
+ }
40
+ const json = await res.json();
41
+ if (Array.isArray(json)) {
42
+ this.templatesCache = json;
43
+ return this.templatesCache;
44
+ }
45
+ throw new BifrostFetchError(text_1.Text.module.errors.bifrostIndexInvalid);
46
+ }
47
+ async fetchManifestFragment(manifestPath) {
48
+ const url = `${this.baseUrl}${manifestPath}`;
49
+ const res = await (0, node_fetch_1.default)(url);
50
+ if (!res.ok) {
51
+ throw new BifrostFetchError(text_1.Text.module.errors.bifrostManifestFragmentFetchFailed(res.status, res.statusText));
52
+ }
53
+ return await res.text();
54
+ }
55
+ async downloadModuleAssets(template, uiFramework) {
56
+ let manifestFragment;
57
+ let variantData;
58
+ if (uiFramework) {
59
+ variantData = template.variants?.[uiFramework];
60
+ if (!variantData)
61
+ throw new Error(text_1.Text.module.add.errorInvalidUIFramework(uiFramework, template.moduleKey));
62
+ }
63
+ if (variantData?.manifestPath) {
64
+ manifestFragment = await this.fetchManifestFragment(variantData.manifestPath);
65
+ }
66
+ const cacheDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'forge-module-'));
67
+ if (manifestFragment) {
68
+ fs_1.default.writeFileSync(path_1.default.join(cacheDir, 'manifest-fragment.yml'), manifestFragment);
69
+ }
70
+ return {
71
+ ...template,
72
+ ...(variantData
73
+ ? {
74
+ uiFramework,
75
+ dependencies: variantData.dependencies ?? template.dependencies,
76
+ devDependencies: variantData.devDependencies ?? template.devDependencies,
77
+ frontend: variantData.frontend ?? template.frontend,
78
+ variables: variantData.variables ?? template.variables,
79
+ fileOperations: variantData.fileOperations ?? template.fileOperations
80
+ }
81
+ : {}),
82
+ cacheDir
83
+ };
84
+ }
85
+ cleanupCache(cacheDir) {
86
+ try {
87
+ fs_1.default.rmSync(cacheDir, { recursive: true, force: true });
88
+ }
89
+ catch {
90
+ }
91
+ }
92
+ }
93
+ exports.TemplateModuleServices = TemplateModuleServices;