@forge/cli-shared 0.0.0-experimental-d8cea00 → 0.0.0-experimental-c3d0263
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 +684 -3
- package/out/apps/template.d.ts +14 -6
- package/out/apps/template.d.ts.map +1 -1
- package/out/apps/template.js +53 -34
- package/out/config/config-file.d.ts +3 -1
- package/out/config/config-file.d.ts.map +1 -1
- package/out/config/config-file.js +20 -6
- package/out/graphql/graphql-types.d.ts +4682 -473
- package/out/graphql/graphql-types.d.ts.map +1 -1
- package/out/graphql/graphql-types.js +477 -19
- package/out/graphql/mutation-aware-graphql-client.d.ts +1 -1
- package/out/shared/index.d.ts +1 -1
- package/out/shared/index.d.ts.map +1 -1
- package/out/ui/text.d.ts +4 -1
- package/out/ui/text.d.ts.map +1 -1
- package/out/ui/text.js +7 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/apps/template.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/apps/template.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAM/B,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,QAAQ,EAAE,MAAM;CAG7B;AAED,qBAAa,2BAA4B,SAAQ,KAAK;CAAG;AAEzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,cAAc;IAC7B,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED,qBAAa,yBAA0B,YAAW,kBAAkB;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAevE,OAAO,CAAC,WAAW;CAGpB;AAED,qBAAa,oBAAqB,YAAW,iBAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAExC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAc7D,2BAA2B;CAqB1C;AAED,qBAAa,kBAAmB,SAAQ,KAAK;;CAI5C;AAKD,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,wBAAwB;IAOnB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAkBxD;AAED,qBAAa,mBAAoB,YAAW,SAAS;IAEjD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAHN,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM;IAEpB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBnF,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAG3C"}
|
package/out/apps/template.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ComposableTemplater = exports.TemplateServiceLister = exports.TemplateFetchError = exports.ZipTemplateExtractor = exports.TemplateServiceDownloader = exports.InvalidTemplateArchiveError = exports.NoTemplateError = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
6
6
|
const fs_extra_1 = require("fs-extra");
|
|
7
|
-
const https_1 = require("https");
|
|
8
7
|
const ignore_walk_1 = tslib_1.__importDefault(require("ignore-walk"));
|
|
9
8
|
const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
|
|
10
9
|
const path_1 = require("path");
|
|
11
10
|
const tmp_1 = tslib_1.__importDefault(require("tmp"));
|
|
11
|
+
const url_1 = require("url");
|
|
12
12
|
const ui_1 = require("../ui");
|
|
13
|
-
const
|
|
13
|
+
const TEMPLATE_SERVICE_URL = 'https://forge-templates.us-west-2.prod.public.atl-paas.net/';
|
|
14
|
+
const TEMPLATE_MAP = 'templates.json';
|
|
14
15
|
class NoTemplateError extends Error {
|
|
15
16
|
constructor(template) {
|
|
16
17
|
super(ui_1.Text.create.error.template.notFound(template));
|
|
@@ -20,28 +21,25 @@ exports.NoTemplateError = NoTemplateError;
|
|
|
20
21
|
class InvalidTemplateArchiveError extends Error {
|
|
21
22
|
}
|
|
22
23
|
exports.InvalidTemplateArchiveError = InvalidTemplateArchiveError;
|
|
23
|
-
class
|
|
24
|
+
class TemplateServiceDownloader {
|
|
24
25
|
async download(template, zipFile) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
res.pipe(fileStream);
|
|
34
|
-
});
|
|
35
|
-
downloadRequest.end();
|
|
26
|
+
const zipUrl = this.buildZipUrl(template);
|
|
27
|
+
const fileStream = fs_1.default.createWriteStream(zipFile);
|
|
28
|
+
const response = await node_fetch_1.default(zipUrl);
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
throw new NoTemplateError(template);
|
|
31
|
+
}
|
|
32
|
+
await new Promise((resolve) => {
|
|
36
33
|
fileStream.on('finish', resolve);
|
|
34
|
+
response.body.pipe(fileStream);
|
|
37
35
|
});
|
|
38
36
|
}
|
|
39
37
|
buildZipUrl(template) {
|
|
40
|
-
return
|
|
38
|
+
return new url_1.URL(`${template}.zip`, TEMPLATE_SERVICE_URL);
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
|
-
exports.
|
|
44
|
-
class
|
|
41
|
+
exports.TemplateServiceDownloader = TemplateServiceDownloader;
|
|
42
|
+
class ZipTemplateExtractor {
|
|
45
43
|
constructor(zipAccessor) {
|
|
46
44
|
this.zipAccessor = zipAccessor;
|
|
47
45
|
}
|
|
@@ -73,17 +71,48 @@ class BitbucketTemplateExtractor {
|
|
|
73
71
|
}
|
|
74
72
|
}
|
|
75
73
|
}
|
|
76
|
-
exports.
|
|
74
|
+
exports.ZipTemplateExtractor = ZipTemplateExtractor;
|
|
77
75
|
class TemplateFetchError extends Error {
|
|
78
76
|
constructor() {
|
|
79
77
|
super(ui_1.Text.error.templateFetchFailed);
|
|
80
78
|
}
|
|
81
79
|
}
|
|
82
80
|
exports.TemplateFetchError = TemplateFetchError;
|
|
83
|
-
class
|
|
84
|
-
|
|
81
|
+
class TemplateServiceLister {
|
|
82
|
+
isValidTemplateMapEntry(entry) {
|
|
83
|
+
return typeof entry === 'object' && entry !== null && typeof entry.name === 'string';
|
|
84
|
+
}
|
|
85
|
+
isValidTemplatesResponse(response) {
|
|
86
|
+
if (Array.isArray(response)) {
|
|
87
|
+
return response.every((curr) => this.isValidTemplateMapEntry(curr));
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
async getAvailableTemplates() {
|
|
92
|
+
try {
|
|
93
|
+
const res = await node_fetch_1.default(new url_1.URL(TEMPLATE_MAP, TEMPLATE_SERVICE_URL));
|
|
94
|
+
if (!res.ok) {
|
|
95
|
+
throw new TemplateFetchError();
|
|
96
|
+
}
|
|
97
|
+
const json = await res.json();
|
|
98
|
+
if (this.isValidTemplatesResponse(json)) {
|
|
99
|
+
return json.map(({ name }) => name);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
throw new TemplateFetchError();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
throw new TemplateFetchError();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.TemplateServiceLister = TemplateServiceLister;
|
|
111
|
+
class ComposableTemplater {
|
|
112
|
+
constructor(downloader, extractor, lister, logger) {
|
|
85
113
|
this.downloader = downloader;
|
|
86
114
|
this.extractor = extractor;
|
|
115
|
+
this.lister = lister;
|
|
87
116
|
this.logger = logger;
|
|
88
117
|
}
|
|
89
118
|
async downloadAndExtract(template, directory) {
|
|
@@ -105,18 +134,8 @@ class BitbucketTemplater {
|
|
|
105
134
|
fs_1.default.unlinkSync(zipFile);
|
|
106
135
|
}
|
|
107
136
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const res = await node_fetch_1.default(`https://api.bitbucket.org/2.0/repositories/atlassian?q=project.key=%22${BITBUCKET_PROJECT}%22&sort=name&pagelen=50`);
|
|
111
|
-
if (!res.ok) {
|
|
112
|
-
throw new TemplateFetchError();
|
|
113
|
-
}
|
|
114
|
-
const json = await res.json();
|
|
115
|
-
return json.values.map((repo) => repo.name);
|
|
116
|
-
}
|
|
117
|
-
catch (e) {
|
|
118
|
-
throw new TemplateFetchError();
|
|
119
|
-
}
|
|
137
|
+
getAvailableTemplates() {
|
|
138
|
+
return this.lister.getAvailableTemplates();
|
|
120
139
|
}
|
|
121
140
|
}
|
|
122
|
-
exports.
|
|
141
|
+
exports.ComposableTemplater = ComposableTemplater;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Document } from 'yaml';
|
|
2
2
|
import { FileSystemReader, FileSystemWriter } from '../file-system';
|
|
3
3
|
import { ConfigReader, ConfigWriter } from './';
|
|
4
|
-
import { ManifestSchema, Resources } from '@forge/manifest';
|
|
4
|
+
import { ManifestSchema, Resources } from '@forge/manifest/out/schema/manifest';
|
|
5
5
|
export declare class ResourceDefinitionMissingError extends Error {
|
|
6
6
|
constructor(resources: string[]);
|
|
7
7
|
}
|
|
@@ -27,6 +27,8 @@ export declare class ConfigFile implements ConfigReader, ConfigWriter, ConfigInt
|
|
|
27
27
|
writeToConfigFile<K extends string, V>(configKey: K, config: V): Promise<void>;
|
|
28
28
|
private getHostedResourceKeys;
|
|
29
29
|
private findMissingResources;
|
|
30
|
+
private getRemoteFromEgressPermission;
|
|
31
|
+
private instanceOfRemote;
|
|
30
32
|
getEgressPermissions(): Promise<{
|
|
31
33
|
type: string;
|
|
32
34
|
domains: string[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../../src/config/config-file.ts"],"names":[],"mappings":"AAAA,OAAa,EAAwB,QAAQ,EAAE,MAAM,MAAM,CAAC;AAI5D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAoB,MAAM,IAAI,CAAC;AAGlE,OAAO,
|
|
1
|
+
{"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../../src/config/config-file.ts"],"names":[],"mappings":"AAAA,OAAa,EAAwB,QAAQ,EAAE,MAAM,MAAM,CAAC;AAI5D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAoB,MAAM,IAAI,CAAC;AAGlE,OAAO,EAEL,cAAc,EACd,SAAS,EAMV,MAAM,qCAAqC,CAAC;AAE7C,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,SAAS,EAAE,MAAM,EAAE;CAGhC;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC;AAED,oBAAY,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAY,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAClD,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,qBAAa,UAAW,YAAW,YAAY,EAAE,YAAY,EAAE,gBAAgB;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAoB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAzD,UAAU,EAAE,gBAAgB,EAAmB,UAAU,EAAE,gBAAgB;IAE3F,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IASxC,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAUrC,oBAAoB,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;IAW5D,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAMjD,OAAO,CAAC,kBAAkB;IAmBb,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAapD,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3F,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,6BAA6B;IAYrC,OAAO,CAAC,gBAAgB;IAIX,oBAAoB,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IAoClF,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAe1E,YAAY,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IA0B1C,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAI1D"}
|
|
@@ -112,8 +112,22 @@ class ConfigFile {
|
|
|
112
112
|
const missing = resourceKeys.filter((resourceKey) => !resources.some(({ key }) => resourceKey === key));
|
|
113
113
|
return missing;
|
|
114
114
|
}
|
|
115
|
+
getRemoteFromEgressPermission(remoteEgressPermission, remotes) {
|
|
116
|
+
if (!remotes) {
|
|
117
|
+
return remoteEgressPermission;
|
|
118
|
+
}
|
|
119
|
+
for (const remote of remotes) {
|
|
120
|
+
if (remote.key === remoteEgressPermission) {
|
|
121
|
+
return new url_1.URL(remote.baseUrl).hostname;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return remoteEgressPermission;
|
|
125
|
+
}
|
|
126
|
+
instanceOfRemote(remote) {
|
|
127
|
+
return typeof remote !== 'string' && 'remote' in remote;
|
|
128
|
+
}
|
|
115
129
|
async getEgressPermissions() {
|
|
116
|
-
const { permissions } = await this.readConfig();
|
|
130
|
+
const { permissions, remotes } = await this.readConfig();
|
|
117
131
|
const egressPermissions = permissions === null || permissions === void 0 ? void 0 : permissions.external;
|
|
118
132
|
if (!egressPermissions) {
|
|
119
133
|
return [];
|
|
@@ -126,9 +140,11 @@ class ConfigFile {
|
|
|
126
140
|
return ({
|
|
127
141
|
type: typePrefix ? `${typePrefix}_${entry[0]}` : entry[0],
|
|
128
142
|
domains: (_a = entry[1]) === null || _a === void 0 ? void 0 : _a.map((url) => {
|
|
129
|
-
let domain = url;
|
|
143
|
+
let domain = this.instanceOfRemote(url) ? url.remote : url;
|
|
130
144
|
try {
|
|
131
|
-
domain =
|
|
145
|
+
domain = this.instanceOfRemote(url)
|
|
146
|
+
? this.getRemoteFromEgressPermission(url.remote, remotes)
|
|
147
|
+
: new url_1.URL(url).hostname;
|
|
132
148
|
}
|
|
133
149
|
catch (e) {
|
|
134
150
|
}
|
|
@@ -137,9 +153,7 @@ class ConfigFile {
|
|
|
137
153
|
});
|
|
138
154
|
});
|
|
139
155
|
const egressUrls = getDomainsFromPermissions(otherEgress);
|
|
140
|
-
const fetchUrls = fetchEgress
|
|
141
|
-
? getDomainsFromPermissions(fetchEgress, 'fetch')
|
|
142
|
-
: [];
|
|
156
|
+
const fetchUrls = fetchEgress ? getDomainsFromPermissions(fetchEgress, 'fetch') : [];
|
|
143
157
|
return [...egressUrls, ...fetchUrls];
|
|
144
158
|
}
|
|
145
159
|
async getAuthProviders() {
|