@forge/manifest 3.8.2-next.0 → 3.9.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.
- package/CHANGELOG.md +23 -0
- package/out/text/errors.d.ts +12 -1
- package/out/text/errors.d.ts.map +1 -1
- package/out/text/errors.js +12 -1
- package/out/utils/get-all-modules.d.ts +3 -0
- package/out/utils/get-all-modules.d.ts.map +1 -0
- package/out/utils/get-all-modules.js +4 -0
- package/out/utils/index.d.ts +1 -0
- package/out/utils/index.d.ts.map +1 -1
- package/out/utils/index.js +1 -0
- package/out/validators/modules-validators/confluence/index.d.ts.map +1 -1
- package/out/validators/modules-validators/confluence/index.js +6 -0
- package/out/validators/modules-validators/confluence/validateCrossModulePropertyUniqueness.d.ts +4 -0
- package/out/validators/modules-validators/confluence/validateCrossModulePropertyUniqueness.d.ts.map +1 -0
- package/out/validators/modules-validators/confluence/validateCrossModulePropertyUniqueness.js +19 -0
- package/out/validators/modules-validators/confluence/validateCustomContentHierarchy.d.ts +4 -0
- package/out/validators/modules-validators/confluence/validateCustomContentHierarchy.d.ts.map +1 -0
- package/out/validators/modules-validators/confluence/validateCustomContentHierarchy.js +43 -0
- package/out/validators/modules-validators/confluence/validateKeyboardShortcuts.d.ts +4 -0
- package/out/validators/modules-validators/confluence/validateKeyboardShortcuts.d.ts.map +1 -0
- package/out/validators/modules-validators/confluence/validateKeyboardShortcuts.js +102 -0
- package/out/validators/modules-validators/confluence/validatePropertyUniqueness.d.ts.map +1 -1
- package/out/validators/modules-validators/confluence/validatePropertyUniqueness.js +1 -1
- package/out/validators/modules-validators/confluence/validateSingleProperty.d.ts.map +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @forge/manifest
|
|
2
2
|
|
|
3
|
+
## 3.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- b447be2: CONFDEV-80332 Added validation for Custom Content modules
|
|
8
|
+
- 4285fc3: Added validator for cross-module uniqueness of property values and a validator for keyboard shortcut accelerators.
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- 74e00c8: Update manifest definitions
|
|
13
|
+
|
|
14
|
+
## 3.9.0-next.2
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- 4285fc36: Added validator for cross-module uniqueness of property values and a validator for keyboard shortcut accelerators.
|
|
19
|
+
|
|
20
|
+
## 3.9.0-next.1
|
|
21
|
+
|
|
22
|
+
### Minor Changes
|
|
23
|
+
|
|
24
|
+
- b447be27: CONFDEV-80332 Added validation for Custom Content modules
|
|
25
|
+
|
|
3
26
|
## 3.8.2-next.0
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
package/out/text/errors.d.ts
CHANGED
|
@@ -35,7 +35,18 @@ export declare const errors: {
|
|
|
35
35
|
};
|
|
36
36
|
confluence: {
|
|
37
37
|
multipleProperty: (property: string, moduleKey: string, keys: string[]) => string;
|
|
38
|
-
|
|
38
|
+
propertyUniqueness: (property: string, moduleKey: string, keys: string[]) => string;
|
|
39
|
+
crossModulePropertyUniqueness: (property: string, keys: string[]) => string;
|
|
40
|
+
validateCustomContentHierarchyUnknown: (property: string, moduleKey: string, unknownKey: string) => string;
|
|
41
|
+
validateCustomContentCrossReferenceMissingContainer: (moduleKey: string, referredModuleKey: string) => string;
|
|
42
|
+
validateCustomContentCrossReferenceMissingChild: (moduleKey: string, referredModuleKey: string) => string;
|
|
43
|
+
keyboardShortcuts: {
|
|
44
|
+
emptyAccelerator: () => string;
|
|
45
|
+
spaceAroundAccelerator: (accelerator: string) => string;
|
|
46
|
+
invalidPlusSyntax: (accelerator: string) => string;
|
|
47
|
+
invalidAcceleratorCombination: (accelerator: string) => string;
|
|
48
|
+
invalidKey: (accelerator: string, key: string) => string;
|
|
49
|
+
};
|
|
39
50
|
};
|
|
40
51
|
jiraWorkflowValidator: {
|
|
41
52
|
missingProperty: (key: string) => string;
|
package/out/text/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;8BACS,MAAM,KAAG,MAAM;2BACpB,MAAM;yBAEN,MAAM,GAAG,SAAS,QAAQ,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAAM;;uBAO3E,MAAM,EAAE,EAAE,GAAG,SAAS,KAAG,MAAM;4BAI1B,MAAM,EAAE,KAAG,MAAM;mCACV,MAAM,SAAS,MAAM,0CAA4B,MAAM;mDAIvC,MAAM,KAAG,MAAM;;;qCAI7B,MAAM,SAAS,MAAM,KAAG,MAAM;4CAEvB,MAAM,SAAS,MAAM,KAAG,MAAM;wCAElC,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM;;;uCAMjC,MAAM,KAAG,MAAM;oCACpB,MAAM;iCAEP,MAAM,KAAG,MAAM;4CACJ,MAAM,KAAG,MAAM;;;gCAG3B,MAAM,KAAG,MAAM;6BACpB,MAAM;+BACJ,MAAM;iCACF,MAAM,KAAG,MAAM;yCACP,MAAM,eAAe,MAAM,KAAG,MAAM;yCAEpC,MAAM,eAAe,MAAM,KAAG,MAAM;6CAEhC,MAAM,KAAG,MAAM;;yCAGrB,MAAM,KAAG,MAAM;iCAEvB,MAAM,KAAG,MAAM;4CACJ,MAAM,gBAAgB,MAAM,KAAG,MAAM;sCAE3C,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,KAAG,MAAM;;;yCAIxD,MAAM,aAAa,MAAM,QAAQ,MAAM,EAAE,KAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;8BACS,MAAM,KAAG,MAAM;2BACpB,MAAM;yBAEN,MAAM,GAAG,SAAS,QAAQ,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAAM;;uBAO3E,MAAM,EAAE,EAAE,GAAG,SAAS,KAAG,MAAM;4BAI1B,MAAM,EAAE,KAAG,MAAM;mCACV,MAAM,SAAS,MAAM,0CAA4B,MAAM;mDAIvC,MAAM,KAAG,MAAM;;;qCAI7B,MAAM,SAAS,MAAM,KAAG,MAAM;4CAEvB,MAAM,SAAS,MAAM,KAAG,MAAM;wCAElC,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM;;;uCAMjC,MAAM,KAAG,MAAM;oCACpB,MAAM;iCAEP,MAAM,KAAG,MAAM;4CACJ,MAAM,KAAG,MAAM;;;gCAG3B,MAAM,KAAG,MAAM;6BACpB,MAAM;+BACJ,MAAM;iCACF,MAAM,KAAG,MAAM;yCACP,MAAM,eAAe,MAAM,KAAG,MAAM;yCAEpC,MAAM,eAAe,MAAM,KAAG,MAAM;6CAEhC,MAAM,KAAG,MAAM;;yCAGrB,MAAM,KAAG,MAAM;iCAEvB,MAAM,KAAG,MAAM;4CACJ,MAAM,gBAAgB,MAAM,KAAG,MAAM;sCAE3C,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,KAAG,MAAM;;;yCAIxD,MAAM,aAAa,MAAM,QAAQ,MAAM,EAAE,KAAG,MAAM;2CAIhD,MAAM,aAAa,MAAM,QAAQ,MAAM,EAAE,KAAG,MAAM;sDAEvC,MAAM,QAAQ,MAAM,EAAE,KAAG,MAAM;8DAEvB,MAAM,aAAa,MAAM,cAAc,MAAM,KAAG,MAAM;6EAEvC,MAAM,qBAAqB,MAAM,KAAG,MAAM;yEAE9C,MAAM,qBAAqB,MAAM,KAAG,MAAM;;wCAG/E,MAAM;sDACU,MAAM,KAAG,MAAM;iDAEpB,MAAM,KAAG,MAAM;6DAEH,MAAM,KAAG,MAAM;0CAElC,MAAM,OAAO,MAAM,KAAG,MAAM;;;;mCAKjC,MAAM,KAAG,MAAM;mCAEf,MAAM,KAAG,MAAM;;;qCAIb,MAAM,KAAG,MAAM;;;0CAIV,MAAM,KAAG,MAAM;;;mCAItB,MAAM,EAAE,KAAG,MAAM;;;qCAIf,MAAM,KAAG,MAAM;2CAET,MAAM,KAAG,MAAM;;;oCAGtB,MAAM,KAAG,MAAM;;oCAEjB,MAAM,SAAS,MAAM,KAAG,MAAM;qCAI7B,MAAM,YAAY,MAAM,KAAG,MAAM;;;;;mCAQ/B,MAAM,OAAO,MAAM,KAAG,MAAM;iCAE9B,MAAM,OAAO,MAAM,KAAG,MAAM;oCAEzB,MAAM,OAAO,MAAM,KAAG,MAAM;gDAEhB,MAAM,KAAG,MAAM;uCAExB,MAAM,KAAG,MAAM;;;;;;;;kCAQpB,MAAM,UAAU,MAAM,KAAG,MAAM;gCAEjC,MAAM,KAAG,MAAM;2CAEJ,MAAM,eAAe,MAAM,KAAG,MAAM;;;uCAI1C,MAAM;uCAEJ,MAAM,KAAG,MAAM;qCAEnB,MAAM;;CAGpC,CAAC;AAEF,oBAAY,UAAU;IACpB,eAAe,2BAA2B;IAC1C,eAAe,wBAAwB;IACvC,WAAW,4BAA4B;IACvC,WAAW,+BAA+B;IAC1C,aAAa,8BAA8B;IAC3C,OAAO,0BAA0B;IACjC,cAAc,kCAAkC;IAChD,mBAAmB,0BAA0B;IAC7C,SAAS,4BAA4B;IACrC,SAAS,4BAA4B;IACrC,UAAU,wBAAwB;IAClC,GAAG,8BAA8B;CAClC"}
|
package/out/text/errors.js
CHANGED
|
@@ -47,7 +47,18 @@ exports.errors = {
|
|
|
47
47
|
},
|
|
48
48
|
confluence: {
|
|
49
49
|
multipleProperty: (property, moduleKey, keys) => `There can be only 1 ${moduleKey} module which designates "${property}": true. Modules containing designation: ${keys.join(', ')}`,
|
|
50
|
-
|
|
50
|
+
propertyUniqueness: (property, moduleKey, keys) => `${property} should be unique across all ${moduleKey} modules. Found duplicates: ${keys.join(', ')}`,
|
|
51
|
+
crossModulePropertyUniqueness: (property, keys) => `${property} should be unique across all modules. Found duplicates: ${keys.join(', ')}`,
|
|
52
|
+
validateCustomContentHierarchyUnknown: (property, moduleKey, unknownKey) => `${property} of the "${moduleKey}" module refers to unknown key: ${unknownKey}`,
|
|
53
|
+
validateCustomContentCrossReferenceMissingContainer: (moduleKey, referredModuleKey) => `supportedContainerTypes of the "${moduleKey}" module refers to "${referredModuleKey}" module. "${referredModuleKey}" module must include "${moduleKey}" in supportedChildTypes`,
|
|
54
|
+
validateCustomContentCrossReferenceMissingChild: (moduleKey, referredModuleKey) => `supportedChildTypes of the "${moduleKey}" module refers to "${referredModuleKey}" module. "${referredModuleKey}" module must include "${moduleKey}" in supportedContainerTypes`,
|
|
55
|
+
keyboardShortcuts: {
|
|
56
|
+
emptyAccelerator: () => 'Keyboard shortcut accelerator must be defined and not be an empty string.',
|
|
57
|
+
spaceAroundAccelerator: (accelerator) => `Keyboard shortcut accelerator must not have surrounding empty spaces. Accelerator issue found: [${accelerator}]`,
|
|
58
|
+
invalidPlusSyntax: (accelerator) => `Keyboard shortcut accelerator must not be single "+" character or have empty spaces on left or right of "+" character. Accelerator issue found: [${accelerator}]`,
|
|
59
|
+
invalidAcceleratorCombination: (accelerator) => `Keyboard shortcut accelerator combinations must have unique keys when joined with "+". Accelerator issue found: [${accelerator}]`,
|
|
60
|
+
invalidKey: (accelerator, key) => `Keyboard shortcut accelerator key must be a valid named key, i.e. ctrl, command, or a single key. Accelerator issue found: [${accelerator}] with invalid key: [${key}]`
|
|
61
|
+
}
|
|
51
62
|
},
|
|
52
63
|
jiraWorkflowValidator: {
|
|
53
64
|
missingProperty: (key) => `${types_1.AllModuleTypes.JiraWorkflowValidator} module '${key}' must have either a function or expression.`,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-all-modules.d.ts","sourceRoot":"","sources":["../../src/utils/get-all-modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,eAAO,MAAM,aAAa,eAAgB,OAAO,KAAG,GAAG,EACqD,CAAC"}
|
package/out/utils/index.d.ts
CHANGED
package/out/utils/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
|
package/out/utils/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./get-all-modules"), exports);
|
|
4
5
|
tslib_1.__exportStar(require("./line-finder"), exports);
|
|
5
6
|
tslib_1.__exportStar(require("./module-key-cleaner"), exports);
|
|
6
7
|
tslib_1.__exportStar(require("./module-references"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAkB,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAkB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAYjE,eAAO,MAAM,yBAAyB,YAAa,OAAO,+CAAiC,eAAe,EA8BzG,CAAC"}
|
|
@@ -4,9 +4,13 @@ exports.validateConfluenceModules = void 0;
|
|
|
4
4
|
const types_1 = require("../../../types");
|
|
5
5
|
const validateSingleProperty_1 = require("./validateSingleProperty");
|
|
6
6
|
const validatePropertyUniqueness_1 = require("./validatePropertyUniqueness");
|
|
7
|
+
const validateKeyboardShortcuts_1 = require("./validateKeyboardShortcuts");
|
|
8
|
+
const validateCrossModulePropertyUniqueness_1 = require("./validateCrossModulePropertyUniqueness");
|
|
9
|
+
const validateCustomContentHierarchy_1 = require("./validateCustomContentHierarchy");
|
|
7
10
|
const ROUTE = 'route';
|
|
8
11
|
const USE_AS_CONFIG = 'useAsConfig';
|
|
9
12
|
const USE_AS_GET_STARTED = 'useAsGetStarted';
|
|
13
|
+
const KEYBOARD_SHORTCUT_ACCELERATOR = 'keyboardShortcut.accelerator';
|
|
10
14
|
exports.validateConfluenceModules = (modules, yamlContentByLine) => {
|
|
11
15
|
const validationErrors = [];
|
|
12
16
|
[
|
|
@@ -18,5 +22,7 @@ exports.validateConfluenceModules = (modules, yamlContentByLine) => {
|
|
|
18
22
|
});
|
|
19
23
|
validationErrors.push(...validateSingleProperty_1.validateSingleProperty(modules, types_1.AllModuleTypes.ConfluenceGlobalSettings, USE_AS_CONFIG, yamlContentByLine));
|
|
20
24
|
validationErrors.push(...validateSingleProperty_1.validateSingleProperty(modules, types_1.AllModuleTypes.ConfluenceGlobalSettings, USE_AS_GET_STARTED, yamlContentByLine));
|
|
25
|
+
validationErrors.push(...validateCustomContentHierarchy_1.validateCustomContentHierarchy(modules, types_1.AllModuleTypes.ConfluenceCustomContent, yamlContentByLine));
|
|
26
|
+
validationErrors.push(...validateCrossModulePropertyUniqueness_1.validateCrossModulePropertyUniqueness(modules, KEYBOARD_SHORTCUT_ACCELERATOR, yamlContentByLine), ...validateKeyboardShortcuts_1.validateKeyboardShortcuts(modules, yamlContentByLine));
|
|
21
27
|
return validationErrors;
|
|
22
28
|
};
|
package/out/validators/modules-validators/confluence/validateCrossModulePropertyUniqueness.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ValidationError } from '../../../types';
|
|
2
|
+
import { Modules } from '../../../schema/manifest';
|
|
3
|
+
export declare const validateCrossModulePropertyUniqueness: (allModules: Modules, property: string, yamlContentByLine?: string[] | undefined) => ValidationError[];
|
|
4
|
+
//# sourceMappingURL=validateCrossModulePropertyUniqueness.d.ts.map
|
package/out/validators/modules-validators/confluence/validateCrossModulePropertyUniqueness.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateCrossModulePropertyUniqueness.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/validateCrossModulePropertyUniqueness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AASnD,eAAO,MAAM,qCAAqC,eACpC,OAAO,YACT,MAAM,+CAEf,eAAe,EAuBjB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateCrossModulePropertyUniqueness = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const get_1 = tslib_1.__importDefault(require("lodash/get"));
|
|
6
|
+
const text_1 = require("../../../text");
|
|
7
|
+
const utils_1 = require("../../../utils");
|
|
8
|
+
exports.validateCrossModulePropertyUniqueness = (allModules, property, yamlContentByLine) => {
|
|
9
|
+
var _a;
|
|
10
|
+
const validationErrors = [];
|
|
11
|
+
const modules = utils_1.getAllModules(allModules) || [];
|
|
12
|
+
const allPropertyValues = modules.map((module) => get_1.default(module, property)).filter((propertyValue) => propertyValue);
|
|
13
|
+
const duplicatePropertyValues = allPropertyValues.filter((propertyValue, index, all) => all.indexOf(propertyValue) !== index);
|
|
14
|
+
if (duplicatePropertyValues.length > 0) {
|
|
15
|
+
const allModulesWithDuplicatedPropertyValues = modules.filter((module) => get_1.default(module, property) === duplicatePropertyValues[0]);
|
|
16
|
+
validationErrors.push(Object.assign({ message: text_1.errors.modules.confluence.crossModulePropertyUniqueness(property, duplicatePropertyValues), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition((_a = allModulesWithDuplicatedPropertyValues === null || allModulesWithDuplicatedPropertyValues === void 0 ? void 0 : allModulesWithDuplicatedPropertyValues[0]) === null || _a === void 0 ? void 0 : _a.key, yamlContentByLine)));
|
|
17
|
+
}
|
|
18
|
+
return validationErrors;
|
|
19
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AllModuleTypes, ValidationError } from '../../../types';
|
|
2
|
+
import { Modules } from '../../../schema/manifest';
|
|
3
|
+
export declare const validateCustomContentHierarchy: (allModules: Modules, moduleType: AllModuleTypes, yamlContentByLine?: string[] | undefined) => ValidationError[];
|
|
4
|
+
//# sourceMappingURL=validateCustomContentHierarchy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateCustomContentHierarchy.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/validateCustomContentHierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,eAAO,MAAM,8BAA8B,eAC7B,OAAO,cACP,cAAc,+CAEzB,eAAe,EAyDjB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateCustomContentHierarchy = void 0;
|
|
4
|
+
const text_1 = require("../../../text");
|
|
5
|
+
const utils_1 = require("../../../utils");
|
|
6
|
+
const INNER_TYPE_PREFIX = 'this:';
|
|
7
|
+
exports.validateCustomContentHierarchy = (allModules, moduleType, yamlContentByLine) => {
|
|
8
|
+
const validationErrors = [];
|
|
9
|
+
const modules = allModules[moduleType] || [];
|
|
10
|
+
modules.forEach((module) => {
|
|
11
|
+
const supportedContainerTypes = module.supportedContainerTypes || [];
|
|
12
|
+
const supportedChildTypes = module.supportedChildTypes || [];
|
|
13
|
+
[
|
|
14
|
+
{
|
|
15
|
+
propName: 'supportedContainerTypes',
|
|
16
|
+
propInnerValues: supportedContainerTypes.filter((supportedContainerType) => supportedContainerType.startsWith(INNER_TYPE_PREFIX)),
|
|
17
|
+
dependentPropName: 'supportedChildTypes',
|
|
18
|
+
dependentReferenceMissingMessage: text_1.errors.modules.confluence.validateCustomContentCrossReferenceMissingContainer
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
propName: 'supportedChildTypes',
|
|
22
|
+
propInnerValues: supportedChildTypes.filter((supportedChildType) => supportedChildType.startsWith(INNER_TYPE_PREFIX)),
|
|
23
|
+
dependentPropName: 'supportedContainerTypes',
|
|
24
|
+
dependentReferenceMissingMessage: text_1.errors.modules.confluence.validateCustomContentCrossReferenceMissingChild
|
|
25
|
+
}
|
|
26
|
+
].forEach(({ propName, propInnerValues, dependentPropName, dependentReferenceMissingMessage }) => {
|
|
27
|
+
propInnerValues.forEach((value) => {
|
|
28
|
+
const referredModuleName = value.substring(INNER_TYPE_PREFIX.length);
|
|
29
|
+
const referredModule = modules.find((m) => m.key === referredModuleName);
|
|
30
|
+
if (!referredModule) {
|
|
31
|
+
validationErrors.push(Object.assign({ message: text_1.errors.modules.confluence.validateCustomContentHierarchyUnknown(propName, module.key, referredModuleName), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(module.key, yamlContentByLine)));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const referredModuleDependentPropValues = referredModule[dependentPropName] || [];
|
|
35
|
+
if (!referredModuleDependentPropValues.includes(`${INNER_TYPE_PREFIX}${module.key}`)) {
|
|
36
|
+
validationErrors.push(Object.assign({ message: dependentReferenceMissingMessage(module.key, referredModule.key), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(module.key, yamlContentByLine)));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
return validationErrors;
|
|
43
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ValidationError } from '../../../types';
|
|
2
|
+
import { Modules } from '../../../schema/manifest';
|
|
3
|
+
export declare const validateKeyboardShortcuts: (allModules: Modules, yamlContentByLine?: string[] | undefined) => ValidationError[];
|
|
4
|
+
//# sourceMappingURL=validateKeyboardShortcuts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateKeyboardShortcuts.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/validateKeyboardShortcuts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAgHnD,eAAO,MAAM,yBAAyB,eAAgB,OAAO,+CAAiC,eAAe,EAsB5G,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateKeyboardShortcuts = void 0;
|
|
4
|
+
const text_1 = require("../../../text");
|
|
5
|
+
const utils_1 = require("../../../utils");
|
|
6
|
+
const VALID_SINGLE_KEY = new RegExp(/^[^+ ]$/);
|
|
7
|
+
const INVALID_COMBINATION_SYNTAX = new RegExp(/(^\+$| \+|\+ )/);
|
|
8
|
+
const VALID_NAMED_KEYS = new Set([
|
|
9
|
+
'f1',
|
|
10
|
+
'f2',
|
|
11
|
+
'f3',
|
|
12
|
+
'f4',
|
|
13
|
+
'f5',
|
|
14
|
+
'f6',
|
|
15
|
+
'f7',
|
|
16
|
+
'f8',
|
|
17
|
+
'f9',
|
|
18
|
+
'f10',
|
|
19
|
+
'f11',
|
|
20
|
+
'f12',
|
|
21
|
+
'shift',
|
|
22
|
+
'ctrl',
|
|
23
|
+
'alt',
|
|
24
|
+
'option',
|
|
25
|
+
'meta',
|
|
26
|
+
'command',
|
|
27
|
+
'mod',
|
|
28
|
+
'backspace',
|
|
29
|
+
'tab',
|
|
30
|
+
'enter',
|
|
31
|
+
'return',
|
|
32
|
+
'capslock',
|
|
33
|
+
'esc',
|
|
34
|
+
'escape',
|
|
35
|
+
'pageup',
|
|
36
|
+
'pagedown',
|
|
37
|
+
'end',
|
|
38
|
+
'home',
|
|
39
|
+
'left',
|
|
40
|
+
'up',
|
|
41
|
+
'right',
|
|
42
|
+
'down',
|
|
43
|
+
'ins',
|
|
44
|
+
'del',
|
|
45
|
+
'space',
|
|
46
|
+
'plus'
|
|
47
|
+
]);
|
|
48
|
+
const isValidKey = (key) => VALID_NAMED_KEYS.has(key) || !!key.match(VALID_SINGLE_KEY);
|
|
49
|
+
const validateShortcut = (moduleKey, accelerator) => {
|
|
50
|
+
const keyboardShortcutErrors = [];
|
|
51
|
+
if (!accelerator || accelerator.trim() === '') {
|
|
52
|
+
keyboardShortcutErrors.push({
|
|
53
|
+
moduleKey,
|
|
54
|
+
message: text_1.errors.modules.confluence.keyboardShortcuts.emptyAccelerator()
|
|
55
|
+
});
|
|
56
|
+
return keyboardShortcutErrors;
|
|
57
|
+
}
|
|
58
|
+
else if (accelerator.startsWith(' ') || accelerator.endsWith(' ')) {
|
|
59
|
+
keyboardShortcutErrors.push({
|
|
60
|
+
moduleKey,
|
|
61
|
+
message: text_1.errors.modules.confluence.keyboardShortcuts.spaceAroundAccelerator(accelerator)
|
|
62
|
+
});
|
|
63
|
+
return keyboardShortcutErrors;
|
|
64
|
+
}
|
|
65
|
+
else if (accelerator.match(INVALID_COMBINATION_SYNTAX)) {
|
|
66
|
+
keyboardShortcutErrors.push({
|
|
67
|
+
moduleKey,
|
|
68
|
+
message: text_1.errors.modules.confluence.keyboardShortcuts.invalidPlusSyntax(accelerator)
|
|
69
|
+
});
|
|
70
|
+
return keyboardShortcutErrors;
|
|
71
|
+
}
|
|
72
|
+
const sequence = accelerator.split(' ');
|
|
73
|
+
for (const combination of sequence) {
|
|
74
|
+
const keys = combination.split('+');
|
|
75
|
+
const uniqueKeys = new Set(keys);
|
|
76
|
+
const allDifferent = keys.length === uniqueKeys.size;
|
|
77
|
+
if (!allDifferent) {
|
|
78
|
+
keyboardShortcutErrors.push({
|
|
79
|
+
moduleKey,
|
|
80
|
+
message: text_1.errors.modules.confluence.keyboardShortcuts.invalidAcceleratorCombination(accelerator)
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
for (const key of keys) {
|
|
84
|
+
if (!isValidKey(key)) {
|
|
85
|
+
keyboardShortcutErrors.push({
|
|
86
|
+
moduleKey,
|
|
87
|
+
message: text_1.errors.modules.confluence.keyboardShortcuts.invalidKey(accelerator, key)
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return keyboardShortcutErrors;
|
|
93
|
+
};
|
|
94
|
+
exports.validateKeyboardShortcuts = (allModules, yamlContentByLine) => {
|
|
95
|
+
const validationErrors = [];
|
|
96
|
+
const modules = utils_1.getAllModules(allModules) || [];
|
|
97
|
+
const modulesWithKeyboardShortcut = modules.filter((module) => { var _a; return (_a = module === null || module === void 0 ? void 0 : module.keyboardShortcut) === null || _a === void 0 ? void 0 : _a.accelerator; });
|
|
98
|
+
if (modulesWithKeyboardShortcut.length > 0) {
|
|
99
|
+
modulesWithKeyboardShortcut.forEach((m) => validationErrors.push(...validateShortcut(m.key, m.keyboardShortcut.accelerator).map((e) => (Object.assign({ message: e.message, reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(e.moduleKey, yamlContentByLine))))));
|
|
100
|
+
}
|
|
101
|
+
return validationErrors;
|
|
102
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validatePropertyUniqueness.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/validatePropertyUniqueness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"validatePropertyUniqueness.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/validatePropertyUniqueness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAUnD,eAAO,MAAM,0BAA0B,eACzB,OAAO,cACP,cAAc,YAChB,MAAM,+CAEf,eAAe,EAqBjB,CAAC"}
|
|
@@ -11,7 +11,7 @@ exports.validatePropertyUniqueness = (allModules, moduleType, property, yamlCont
|
|
|
11
11
|
const duplicatePropertyValues = allPropertyValues.filter((property, index, all) => all.indexOf(property) !== index);
|
|
12
12
|
if (duplicatePropertyValues.length > 0) {
|
|
13
13
|
const allModulesWithDuplicatedPropertyValues = modules.filter((module) => module[property] === duplicatePropertyValues[0]);
|
|
14
|
-
validationErrors.push(Object.assign({ message: text_1.errors.modules.confluence.
|
|
14
|
+
validationErrors.push(Object.assign({ message: text_1.errors.modules.confluence.propertyUniqueness(property, moduleType, duplicatePropertyValues), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition((_a = allModulesWithDuplicatedPropertyValues === null || allModulesWithDuplicatedPropertyValues === void 0 ? void 0 : allModulesWithDuplicatedPropertyValues[0]) === null || _a === void 0 ? void 0 : _a.key, yamlContentByLine)));
|
|
15
15
|
}
|
|
16
16
|
return validationErrors;
|
|
17
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateSingleProperty.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/validateSingleProperty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"validateSingleProperty.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/validateSingleProperty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AASnD,eAAO,MAAM,sBAAsB,eACrB,OAAO,cACP,cAAc,YAChB,MAAM,+CAEf,eAAe,EAgBjB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge/manifest",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.9.0",
|
|
4
4
|
"description": "Definitions and validations of the Forge manifest",
|
|
5
5
|
"main": "out/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"cheerio": "^0.22.0",
|
|
29
29
|
"js-yaml": "^3.13.1",
|
|
30
30
|
"json-schema-to-typescript": "^9.1.1",
|
|
31
|
+
"lodash": "^4.17.20",
|
|
31
32
|
"node-fetch": "2.6.1",
|
|
32
33
|
"typescript-json-schema": "^0.45.1"
|
|
33
34
|
}
|