@forge/lint 5.9.0-next.3 → 5.9.0-next.4
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 +9 -0
- package/out/lint/lint.d.ts.map +1 -1
- package/out/lint/lint.js +3 -1
- package/out/lint/linters/manifest-linter/deprecated-egress-permissions-manifest-linter.d.ts +9 -0
- package/out/lint/linters/manifest-linter/deprecated-egress-permissions-manifest-linter.d.ts.map +1 -0
- package/out/lint/linters/manifest-linter/deprecated-egress-permissions-manifest-linter.js +18 -0
- package/out/lint/linters/permission-linter/permission-linter.d.ts.map +1 -1
- package/out/lint/linters/permission-linter/permission-linter.js +38 -12
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
package/out/lint/lint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/lint/lint.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/lint/lint.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AAcxG,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,WAAY,UAAU,eAAe,UAAU,EAAE,4BAAuB,IA+CrG,CAAC;AAEF,eAAO,MAAM,YAAY,gBAAiB,UAAU,EAAE,KAAG,YAQxD,CAAC;AAEF,eAAO,MAAM,eAAe,aAChB,MAAM,UACR,eAAe,oBACN,OAAO,GAAG,QAAQ,CAAC,aAAa,KAChD,QAAQ,SAAS,CAOnB,CAAC;AAEF,eAAO,MAAM,IAAI,gBACF,MAAM,EAAE,YACX,QAAQ,eACL,MAAM,UACX,UAAU,6BAhBR,MAAM,UACR,eAAe,oBACN,OAAO,GAAG,QAAQ,CAAC,aAAa,KAChD,QAAQ,SAAS,CAAC,YAeV,eAAe,EAAE,KAazB,QAAQ,UAAU,EAAE,CAyCtB,CAAC;AAwBF,eAAO,MAAM,QAAQ,WACX,UAAU,WACV,eAAe,KACtB,QAAQ,UAAU,EAAE,CAGtB,CAAC"}
|
package/out/lint/lint.js
CHANGED
|
@@ -18,6 +18,7 @@ const remote_compute_manifest_linter_1 = require("./linters/manifest-linter/remo
|
|
|
18
18
|
const invoke_remote_linter_1 = require("./linters/remote-linter/invoke-remote-linter");
|
|
19
19
|
const storage_module_linter_1 = require("./linters/storage-module-linter/storage-module-linter");
|
|
20
20
|
const frame_component_linter_1 = require("./linters/frame-component-linter/frame-component-linter");
|
|
21
|
+
const deprecated_egress_permissions_manifest_linter_1 = require("./linters/manifest-linter/deprecated-egress-permissions-manifest-linter");
|
|
21
22
|
const reportLintResults = (logger, lintResults, showSummary = true) => {
|
|
22
23
|
let numErrors = 0, numWarnings = 0;
|
|
23
24
|
let noProblemsFound = true;
|
|
@@ -89,7 +90,8 @@ const lint = async (filesToLint, manifest, environment, logger, parseFunction =
|
|
|
89
90
|
new dynamic_properties_permissions_linter_1.DynamicPropertiesPermissionsLinter(environment, manifest, logger),
|
|
90
91
|
new invoke_remote_linter_1.InvokeRemoteLinter(environment, manifest, logger),
|
|
91
92
|
new storage_module_linter_1.StorageModulesLinter(environment, manifest, logger),
|
|
92
|
-
new frame_component_linter_1.FrameComponentLinter(environment, manifest, logger)
|
|
93
|
+
new frame_component_linter_1.FrameComponentLinter(environment, manifest, logger),
|
|
94
|
+
new deprecated_egress_permissions_manifest_linter_1.DeprecatedEgressPermissionsManifestLinter(logger)
|
|
93
95
|
]) => {
|
|
94
96
|
const { include, exclude } = await (0, cli_shared_1.listTSConfigIncludeExclude)(new cli_shared_1.FileSystemReader());
|
|
95
97
|
const tsInclude = new Set(include);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ManifestValidationResult, SchemaValidationError } from '@forge/manifest';
|
|
2
|
+
import { AbstractManifestLinter } from './abstract-manifest-linter';
|
|
3
|
+
import { LintResultRule, LintFixState, LintLogger } from '../../linter-interface';
|
|
4
|
+
export declare class DeprecatedEgressPermissionsManifestLinter extends AbstractManifestLinter {
|
|
5
|
+
constructor(logger: LintLogger);
|
|
6
|
+
getFixer(): ((errors: LintResultRule[], warnings: LintResultRule[], state: LintFixState) => Promise<LintFixState>) | undefined;
|
|
7
|
+
getResultsForFixer(results: ManifestValidationResult<any>): SchemaValidationError[];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=deprecated-egress-permissions-manifest-linter.d.ts.map
|
package/out/lint/linters/manifest-linter/deprecated-egress-permissions-manifest-linter.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated-egress-permissions-manifest-linter.d.ts","sourceRoot":"","sources":["../../../../src/lint/linters/manifest-linter/deprecated-egress-permissions-manifest-linter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGlF,qBAAa,yCAA0C,SAAQ,sBAAsB;gBACvE,MAAM,EAAE,UAAU;IAI9B,QAAQ,IACJ,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,GACtG,SAAS;IAIb,kBAAkB,CAAC,OAAO,EAAE,wBAAwB,CAAC,GAAG,CAAC,GAAG,qBAAqB,EAAE;CAGpF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeprecatedEgressPermissionsManifestLinter = void 0;
|
|
4
|
+
const manifest_1 = require("@forge/manifest");
|
|
5
|
+
const abstract_manifest_linter_1 = require("./abstract-manifest-linter");
|
|
6
|
+
const permission_linter_1 = require("../permission-linter/permission-linter");
|
|
7
|
+
class DeprecatedEgressPermissionsManifestLinter extends abstract_manifest_linter_1.AbstractManifestLinter {
|
|
8
|
+
constructor(logger) {
|
|
9
|
+
super(manifest_1.ValidationTypes.DEPRECATED_EGRESS_PERMISSIONS, logger);
|
|
10
|
+
}
|
|
11
|
+
getFixer() {
|
|
12
|
+
return permission_linter_1.fixMissingPermissions;
|
|
13
|
+
}
|
|
14
|
+
getResultsForFixer(results) {
|
|
15
|
+
return results.errors?.filter((error) => error.metadata?.hasDeprecatedEgressPermissions) || [];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.DeprecatedEgressPermissionsManifestLinter = DeprecatedEgressPermissionsManifestLinter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-linter.d.ts","sourceRoot":"","sources":["../../../../src/lint/linters/permission-linter/permission-linter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,IAAI,QAAQ,EAAe,MAAM,iBAAiB,CAAC;AAE/E,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EACL,OAAO,EAEP,eAAe,EACf,QAAQ,EACR,cAAc,EACd,cAAc,EACd,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAML,WAAW,EAGZ,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"permission-linter.d.ts","sourceRoot":"","sources":["../../../../src/lint/linters/permission-linter/permission-linter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,IAAI,QAAQ,EAAe,MAAM,iBAAiB,CAAC;AAE/E,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EACL,OAAO,EAEP,eAAe,EACf,QAAQ,EACR,cAAc,EACd,cAAc,EACd,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAML,WAAW,EAGZ,MAAM,aAAa,CAAC;AAYrB,UAAU,aAAa;IACrB,KAAK,EAAE;QACL,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;KAC7B,CAAC;CACH;AAED,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAKhD,eAAO,MAAM,sBAAsB,WACzB,cAAc,EAAE,YACd,cAAc,EAAE,mBAEtB,mBAAmB,GACnB,gCAAgC,GAChC,+BAA+B,GAC/B,iCAAiC,UAC7B,YAAY,KACnB,IAAI,MAAM,CAkBZ,CAAC;AAEF,eAAO,MAAM,qBAAqB,WACxB,cAAc,EAAE,YACd,cAAc,EAAE,SACnB,YAAY,KAClB,QAAQ,YAAY,CAyGtB,CAAC;AAEF,UAAU,6BAA6B;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IACzB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,qBAAa,gBAAiB,SAAQ,UAAU,CAAC,OAAO,EAAE,6BAA6B,EAAE,OAAO,EAAE,CAAC;IAe/F,OAAO,CAAC,QAAQ;IAdlB,MAAM,CAAC,cAAc,SAAgC;IACrD,MAAM,CAAC,aAAa,SAA+B;IACnD,MAAM,CAAC,aAAa,SAA+B;IACnD,MAAM,CAAC,oBAAoB,SAAsC;IACjE,MAAM,CAAC,uBAAuB,SAAyC;IACvE,MAAM,CAAC,mBAAmB,SAAqC;IAE/D,OAAO,CAAC,IAAI,CAAC,CAA0B;IACvC,OAAO,CAAC,UAAU,CAAC,CAA0B;IAC7C,OAAO,CAAC,SAAS,CAAC,CAA0B;IAC5C,OAAO,CAAC,KAAK,CAAC,CAAa;gBAGzB,WAAW,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAC1B,MAAM,EAAE,UAAU;IAKP,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA2FvC,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAcjD,SAAS,CAAC,QAAQ,IACd,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,GACtG,SAAS;IAIb,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAsB3D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAWtE,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKrE,OAAO,CAAC,YAAY;CAarB"}
|
|
@@ -37,27 +37,20 @@ const fixMissingPermissions = async (errors, warnings, state) => {
|
|
|
37
37
|
const missingExternalFetchBackend = (0, exports.findMissingPermissions)(errors, warnings, 'missingExternalFetchPermission', state);
|
|
38
38
|
const missingContentStyle = (0, exports.findMissingPermissions)(errors, warnings, 'missingContentStylePermission', state);
|
|
39
39
|
const missingExternalImage = (0, exports.findMissingPermissions)(errors, warnings, 'missingExternalImagesPermission', state);
|
|
40
|
+
const hasDeprecatedEgressPermissions = errors.some((error) => error.metadata?.hasDeprecatedEgressPermissions) ||
|
|
41
|
+
missingExternalImage.size > 0 ||
|
|
42
|
+
missingExternalFetchBackend.size > 0;
|
|
40
43
|
const currentPermissions = (await state.configFile.readConfig())?.permissions ?? {};
|
|
41
|
-
const currentRemotes = (await state.configFile.readConfig())?.remotes ?? [];
|
|
42
44
|
const currentScopes = (0, utils_1.getAllScopeKeys)(currentPermissions?.scopes ?? []);
|
|
43
45
|
currentScopes.forEach((scope) => missingScopes.add(scope));
|
|
44
46
|
const currentExternalFetchBackend = currentPermissions?.external?.fetch?.backend ?? [];
|
|
45
|
-
currentExternalFetchBackend
|
|
46
|
-
.map((item) => {
|
|
47
|
-
if (typeof item === 'string')
|
|
48
|
-
return item;
|
|
49
|
-
if ('address' in item)
|
|
50
|
-
return item.address;
|
|
51
|
-
return currentRemotes.find((remote) => remote.key == item.remote)?.baseUrl;
|
|
52
|
-
})
|
|
53
|
-
.filter((item) => typeof item === 'string')
|
|
54
|
-
.forEach((scope) => missingExternalFetchBackend.add(scope));
|
|
47
|
+
currentExternalFetchBackend.forEach((scope) => missingExternalFetchBackend.add(scope));
|
|
55
48
|
const arrayMissingExternalFetchBackend = [...missingExternalFetchBackend];
|
|
56
49
|
const currentContentStyles = currentPermissions?.content?.styles ?? [];
|
|
57
50
|
currentContentStyles.forEach((scope) => missingContentStyle.add(scope));
|
|
58
51
|
const arrayMissingContentStyles = [...missingContentStyle];
|
|
59
52
|
const currentExternalImages = currentPermissions?.external?.images ?? [];
|
|
60
|
-
currentExternalImages.forEach((scope) => missingExternalImage.add(
|
|
53
|
+
currentExternalImages.forEach((scope) => missingExternalImage.add(scope));
|
|
61
54
|
const arrayMissingExternalImages = [...missingExternalImage];
|
|
62
55
|
const config = {
|
|
63
56
|
...currentPermissions,
|
|
@@ -84,6 +77,39 @@ const fixMissingPermissions = async (errors, warnings, state) => {
|
|
|
84
77
|
styles: arrayMissingContentStyles
|
|
85
78
|
};
|
|
86
79
|
}
|
|
80
|
+
if (hasDeprecatedEgressPermissions) {
|
|
81
|
+
const { fetch: originalFetch, ...restExternal } = config.external ?? {};
|
|
82
|
+
Object.entries(originalFetch || {}).forEach(([key, values]) => {
|
|
83
|
+
const valuesToOverride = [];
|
|
84
|
+
values.forEach((egressValue) => {
|
|
85
|
+
if (typeof egressValue === 'string') {
|
|
86
|
+
valuesToOverride.push({
|
|
87
|
+
address: egressValue,
|
|
88
|
+
inScopeEUD: false
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
valuesToOverride.push(egressValue);
|
|
93
|
+
}
|
|
94
|
+
config.external.fetch[key] = valuesToOverride;
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
Object.entries(restExternal || {}).forEach(([key, values]) => {
|
|
98
|
+
const valuesToOverride = [];
|
|
99
|
+
values.forEach((egressValue) => {
|
|
100
|
+
if (typeof egressValue === 'string') {
|
|
101
|
+
valuesToOverride.push({
|
|
102
|
+
address: egressValue,
|
|
103
|
+
inScopeEUD: false
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
valuesToOverride.push(egressValue);
|
|
108
|
+
}
|
|
109
|
+
config.external[key] = valuesToOverride;
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
87
113
|
await state.configFile.writeToConfigFile('permissions', config);
|
|
88
114
|
return state;
|
|
89
115
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge/lint",
|
|
3
|
-
"version": "5.9.0-next.
|
|
3
|
+
"version": "5.9.0-next.4",
|
|
4
4
|
"description": "Linting for forge apps",
|
|
5
5
|
"main": "out/index.js",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
"eslint-plugin-import": "^2.29.1"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@forge/cli-shared": "7.1.0-next.
|
|
22
|
+
"@forge/cli-shared": "7.1.0-next.4",
|
|
23
23
|
"@forge/csp": "3.9.0",
|
|
24
24
|
"@forge/egress": "1.4.1",
|
|
25
|
-
"@forge/manifest": "9.5.0-next.
|
|
25
|
+
"@forge/manifest": "9.5.0-next.3",
|
|
26
26
|
"@typescript-eslint/typescript-estree": "^5.62.0",
|
|
27
27
|
"array.prototype.flatmap": "^1.3.2",
|
|
28
28
|
"atlassian-openapi": "^1.0.18",
|