@forge/manifest 12.8.0-next.1 → 12.8.0-next.10
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 +56 -0
- package/out/processor/full-validation-processor.d.ts.map +1 -1
- package/out/processor/full-validation-processor.js +1 -0
- package/out/schema/manifest-schema.json +106 -34
- package/out/schema/manifest.d.ts +39 -16
- package/out/text/errors.d.ts +12 -0
- package/out/text/errors.d.ts.map +1 -1
- package/out/text/errors.js +14 -2
- package/out/utils/module-references.d.ts +6 -0
- package/out/utils/module-references.d.ts.map +1 -1
- package/out/utils/module-references.js +32 -2
- package/out/validators/index.d.ts +1 -0
- package/out/validators/index.d.ts.map +1 -1
- package/out/validators/index.js +1 -0
- package/out/validators/internal-fields-validator.d.ts +8 -0
- package/out/validators/internal-fields-validator.d.ts.map +1 -0
- package/out/validators/internal-fields-validator.js +44 -0
- package/out/validators/modules-validators/rovo/index.d.ts.map +1 -1
- package/out/validators/modules-validators/rovo/index.js +2 -0
- package/out/validators/modules-validators/rovo/validate-rovo-skill-actions.d.ts +4 -0
- package/out/validators/modules-validators/rovo/validate-rovo-skill-actions.d.ts.map +1 -0
- package/out/validators/modules-validators/rovo/validate-rovo-skill-actions.js +29 -0
- package/out/validators/modules-validators/rovo/validate-unreferenced-actions.js +6 -0
- package/out/validators/resources-validator.d.ts +4 -0
- package/out/validators/resources-validator.d.ts.map +1 -1
- package/out/validators/resources-validator.js +158 -9
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
# @forge/manifest
|
|
2
2
|
|
|
3
|
+
## 12.8.0-next.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 489c6d0: Update manifest definitions
|
|
8
|
+
|
|
9
|
+
## 12.8.0-next.9
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- e5b5031: Update manifest definitions
|
|
14
|
+
|
|
15
|
+
## 12.8.0-next.8
|
|
16
|
+
|
|
17
|
+
### Minor Changes
|
|
18
|
+
|
|
19
|
+
- bf76c3c: allow overrides for services
|
|
20
|
+
|
|
21
|
+
## 12.8.0-next.7
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- f7c39e1: Setup limit to max number of resource entries allowed
|
|
26
|
+
|
|
27
|
+
## 12.8.0-next.6
|
|
28
|
+
|
|
29
|
+
### Minor Changes
|
|
30
|
+
|
|
31
|
+
- e7b0684: support scaling containers to zero
|
|
32
|
+
|
|
33
|
+
## 12.8.0-next.5
|
|
34
|
+
|
|
35
|
+
### Patch Changes
|
|
36
|
+
|
|
37
|
+
- ef0434d: Added support for multi-entry resources in UI Kit applications, enabling developers to define multiple entry points within a single resource.
|
|
38
|
+
|
|
39
|
+
## 12.8.0-next.4
|
|
40
|
+
|
|
41
|
+
### Minor Changes
|
|
42
|
+
|
|
43
|
+
- 1eded6e: Update action reference validation
|
|
44
|
+
- cf7000f: rovo:skill validation
|
|
45
|
+
- d660fb0: Update action validation
|
|
46
|
+
|
|
47
|
+
## 12.8.0-next.3
|
|
48
|
+
|
|
49
|
+
### Minor Changes
|
|
50
|
+
|
|
51
|
+
- 8d90f4f: Add entry map support to hosted resources schema and enhance validation
|
|
52
|
+
|
|
53
|
+
## 12.8.0-next.2
|
|
54
|
+
|
|
55
|
+
### Patch Changes
|
|
56
|
+
|
|
57
|
+
- 55991a3: Update manifest definitions
|
|
58
|
+
|
|
3
59
|
## 12.8.0-next.1
|
|
4
60
|
|
|
5
61
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"full-validation-processor.d.ts","sourceRoot":"","sources":["../../src/processor/full-validation-processor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"full-validation-processor.d.ts","sourceRoot":"","sources":["../../src/processor/full-validation-processor.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAUpD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,qBAAa,uBAAwB,SAAQ,2BAA2B,CAAC,cAAc,CAAC;gBAC1E,WAAW,EAAE,WAAW;CA8BrC"}
|
|
@@ -22,6 +22,7 @@ class FullValidationProcessor extends abstract_validation_processor_1.AbstractVa
|
|
|
22
22
|
new validators_1.FileValidator(),
|
|
23
23
|
new validators_1.YamlValidator(),
|
|
24
24
|
new validators_1.SchemaValidator(FULL_SCHEMA),
|
|
25
|
+
new validators_1.InternalFieldsValidator(),
|
|
25
26
|
new validators_1.ModulesValidator(),
|
|
26
27
|
new validators_1.ConnectModulesValidator(),
|
|
27
28
|
new validators_1.ResourcesValidator(),
|
|
@@ -30903,6 +30903,42 @@
|
|
|
30903
30903
|
},
|
|
30904
30904
|
"minItems": 1
|
|
30905
30905
|
},
|
|
30906
|
+
"rovo:skill": {
|
|
30907
|
+
"type": "array",
|
|
30908
|
+
"items": {
|
|
30909
|
+
"type": "object",
|
|
30910
|
+
"required": [
|
|
30911
|
+
"path",
|
|
30912
|
+
"key"
|
|
30913
|
+
],
|
|
30914
|
+
"properties": {
|
|
30915
|
+
"path": {
|
|
30916
|
+
"type": "string",
|
|
30917
|
+
"pattern": "^resource:[^;]+;.+$"
|
|
30918
|
+
},
|
|
30919
|
+
"dependencies": {
|
|
30920
|
+
"type": "object",
|
|
30921
|
+
"properties": {
|
|
30922
|
+
"tools": {
|
|
30923
|
+
"type": "array",
|
|
30924
|
+
"items": {
|
|
30925
|
+
"type": "string"
|
|
30926
|
+
}
|
|
30927
|
+
}
|
|
30928
|
+
}
|
|
30929
|
+
},
|
|
30930
|
+
"key": {
|
|
30931
|
+
"$ref": "#/definitions/ModuleKeySchema"
|
|
30932
|
+
}
|
|
30933
|
+
},
|
|
30934
|
+
"not": {
|
|
30935
|
+
"required": [
|
|
30936
|
+
"unlicensedAccess"
|
|
30937
|
+
]
|
|
30938
|
+
}
|
|
30939
|
+
},
|
|
30940
|
+
"minItems": 1
|
|
30941
|
+
},
|
|
30906
30942
|
"graph:smartLink": {
|
|
30907
30943
|
"type": "array",
|
|
30908
30944
|
"items": {
|
|
@@ -31184,39 +31220,6 @@
|
|
|
31184
31220
|
},
|
|
31185
31221
|
"minItems": 1
|
|
31186
31222
|
},
|
|
31187
|
-
"rovo:skill": {
|
|
31188
|
-
"minItems": 1,
|
|
31189
|
-
"type": "array",
|
|
31190
|
-
"items": {
|
|
31191
|
-
"type": "object",
|
|
31192
|
-
"additionalProperties": false,
|
|
31193
|
-
"required": [
|
|
31194
|
-
"key",
|
|
31195
|
-
"path"
|
|
31196
|
-
],
|
|
31197
|
-
"properties": {
|
|
31198
|
-
"path": {
|
|
31199
|
-
"type": "string",
|
|
31200
|
-
"pattern": "^resource:[^;]+;.+$"
|
|
31201
|
-
},
|
|
31202
|
-
"key": {
|
|
31203
|
-
"$ref": "#/definitions/ModuleKeySchema"
|
|
31204
|
-
},
|
|
31205
|
-
"dependencies": {
|
|
31206
|
-
"type": "object",
|
|
31207
|
-
"additionalProperties": false,
|
|
31208
|
-
"properties": {
|
|
31209
|
-
"tools": {
|
|
31210
|
-
"type": "array",
|
|
31211
|
-
"items": {
|
|
31212
|
-
"type": "string"
|
|
31213
|
-
}
|
|
31214
|
-
}
|
|
31215
|
-
}
|
|
31216
|
-
}
|
|
31217
|
-
}
|
|
31218
|
-
}
|
|
31219
|
-
},
|
|
31220
31223
|
"devops:buildInfoProvider": {
|
|
31221
31224
|
"type": "array",
|
|
31222
31225
|
"items": {
|
|
@@ -32297,6 +32300,19 @@
|
|
|
32297
32300
|
"path": {
|
|
32298
32301
|
"type": "string"
|
|
32299
32302
|
},
|
|
32303
|
+
"entry": {
|
|
32304
|
+
"type": "object",
|
|
32305
|
+
"minProperties": 1,
|
|
32306
|
+
"maxProperties": 50,
|
|
32307
|
+
"propertyNames": {
|
|
32308
|
+
"pattern": "^[a-zA-Z0-9_-]+$",
|
|
32309
|
+
"maxLength": 23
|
|
32310
|
+
},
|
|
32311
|
+
"additionalProperties": {
|
|
32312
|
+
"type": "string",
|
|
32313
|
+
"pattern": "^[a-zA-Z0-9_-]+(?:\\.[a-zA-Z0-9_-]+)*$"
|
|
32314
|
+
}
|
|
32315
|
+
},
|
|
32300
32316
|
"tunnel": {
|
|
32301
32317
|
"type": "object",
|
|
32302
32318
|
"required": [
|
|
@@ -32988,7 +33004,7 @@
|
|
|
32988
33004
|
"min": {
|
|
32989
33005
|
"type": "number",
|
|
32990
33006
|
"description": "The minimum number of instances to run",
|
|
32991
|
-
"minimum":
|
|
33007
|
+
"minimum": 0
|
|
32992
33008
|
},
|
|
32993
33009
|
"max": {
|
|
32994
33010
|
"type": "number",
|
|
@@ -33083,6 +33099,58 @@
|
|
|
33083
33099
|
}
|
|
33084
33100
|
}
|
|
33085
33101
|
},
|
|
33102
|
+
"ManifestOverridesSchema": {
|
|
33103
|
+
"type": "array",
|
|
33104
|
+
"items": {
|
|
33105
|
+
"type": "object",
|
|
33106
|
+
"additionalProperties": false,
|
|
33107
|
+
"required": [
|
|
33108
|
+
"applyTo",
|
|
33109
|
+
"value"
|
|
33110
|
+
],
|
|
33111
|
+
"properties": {
|
|
33112
|
+
"applyTo": {
|
|
33113
|
+
"type": "object",
|
|
33114
|
+
"additionalProperties": false,
|
|
33115
|
+
"minProperties": 1,
|
|
33116
|
+
"properties": {
|
|
33117
|
+
"environmentTypes": {
|
|
33118
|
+
"type": "array",
|
|
33119
|
+
"minItems": 1,
|
|
33120
|
+
"items": {
|
|
33121
|
+
"type": "string",
|
|
33122
|
+
"enum": [
|
|
33123
|
+
"DEVELOPMENT",
|
|
33124
|
+
"STAGING",
|
|
33125
|
+
"PRODUCTION"
|
|
33126
|
+
]
|
|
33127
|
+
}
|
|
33128
|
+
},
|
|
33129
|
+
"shards": {
|
|
33130
|
+
"type": "array",
|
|
33131
|
+
"minItems": 1,
|
|
33132
|
+
"items": {
|
|
33133
|
+
"type": "string",
|
|
33134
|
+
"maxLength": 32,
|
|
33135
|
+
"pattern": "^[a-zA-Z0-9_:-]+$"
|
|
33136
|
+
}
|
|
33137
|
+
}
|
|
33138
|
+
}
|
|
33139
|
+
},
|
|
33140
|
+
"value": {
|
|
33141
|
+
"type": "object",
|
|
33142
|
+
"additionalProperties": false,
|
|
33143
|
+
"minProperties": 1,
|
|
33144
|
+
"properties": {
|
|
33145
|
+
"services": {
|
|
33146
|
+
"$ref": "#/definitions/ServicesSchema",
|
|
33147
|
+
"title": "OverriddenServices"
|
|
33148
|
+
}
|
|
33149
|
+
}
|
|
33150
|
+
}
|
|
33151
|
+
}
|
|
33152
|
+
}
|
|
33153
|
+
},
|
|
33086
33154
|
"OAuth2ScopeName": {
|
|
33087
33155
|
"type": "string",
|
|
33088
33156
|
"pattern": "^[^\\s]+$"
|
|
@@ -36194,6 +36262,10 @@
|
|
|
36194
36262
|
"services": {
|
|
36195
36263
|
"$ref": "#/definitions/ServicesSchema",
|
|
36196
36264
|
"title": "services"
|
|
36265
|
+
},
|
|
36266
|
+
"overrides": {
|
|
36267
|
+
"$ref": "#/definitions/ManifestOverridesSchema",
|
|
36268
|
+
"title": "ManifestOverrides"
|
|
36197
36269
|
}
|
|
36198
36270
|
},
|
|
36199
36271
|
"required": [
|
package/out/schema/manifest.d.ts
CHANGED
|
@@ -802,6 +802,21 @@ export type Services = {
|
|
|
802
802
|
scaling?: Scaling;
|
|
803
803
|
tunnel?: ServiceTunnelConfig;
|
|
804
804
|
}[];
|
|
805
|
+
export type OverriddenServices = {
|
|
806
|
+
key: string;
|
|
807
|
+
containers: Containers;
|
|
808
|
+
scaling?: Scaling;
|
|
809
|
+
tunnel?: ServiceTunnelConfig;
|
|
810
|
+
}[];
|
|
811
|
+
export type ManifestOverrides = {
|
|
812
|
+
applyTo: {
|
|
813
|
+
environmentTypes?: ['DEVELOPMENT' | 'STAGING' | 'PRODUCTION', ...('DEVELOPMENT' | 'STAGING' | 'PRODUCTION')[]];
|
|
814
|
+
shards?: [string, ...string[]];
|
|
815
|
+
};
|
|
816
|
+
value: {
|
|
817
|
+
services?: OverriddenServices;
|
|
818
|
+
};
|
|
819
|
+
}[];
|
|
805
820
|
|
|
806
821
|
export interface ManifestSchema {
|
|
807
822
|
app: App;
|
|
@@ -814,6 +829,7 @@ export interface ManifestSchema {
|
|
|
814
829
|
environment?: Environment;
|
|
815
830
|
translations?: Translations;
|
|
816
831
|
services?: Services;
|
|
832
|
+
overrides?: ManifestOverrides;
|
|
817
833
|
}
|
|
818
834
|
export interface App {
|
|
819
835
|
description?: Description;
|
|
@@ -25145,6 +25161,26 @@ export interface Modules {
|
|
|
25145
25161
|
key: ModuleKeySchema;
|
|
25146
25162
|
}[]
|
|
25147
25163
|
];
|
|
25164
|
+
'rovo:skill'?: [
|
|
25165
|
+
{
|
|
25166
|
+
path: string;
|
|
25167
|
+
dependencies?: {
|
|
25168
|
+
tools?: string[];
|
|
25169
|
+
[k: string]: unknown;
|
|
25170
|
+
};
|
|
25171
|
+
key: ModuleKeySchema;
|
|
25172
|
+
[k: string]: unknown;
|
|
25173
|
+
},
|
|
25174
|
+
...{
|
|
25175
|
+
path: string;
|
|
25176
|
+
dependencies?: {
|
|
25177
|
+
tools?: string[];
|
|
25178
|
+
[k: string]: unknown;
|
|
25179
|
+
};
|
|
25180
|
+
key: ModuleKeySchema;
|
|
25181
|
+
[k: string]: unknown;
|
|
25182
|
+
}[]
|
|
25183
|
+
];
|
|
25148
25184
|
'graph:smartLink'?: [
|
|
25149
25185
|
{
|
|
25150
25186
|
/**
|
|
@@ -25453,22 +25489,6 @@ export interface Modules {
|
|
|
25453
25489
|
key: ModuleKeySchema;
|
|
25454
25490
|
}[]
|
|
25455
25491
|
];
|
|
25456
|
-
'rovo:skill'?: [
|
|
25457
|
-
{
|
|
25458
|
-
path: string;
|
|
25459
|
-
key: ModuleKeySchema;
|
|
25460
|
-
dependencies?: {
|
|
25461
|
-
tools?: string[];
|
|
25462
|
-
};
|
|
25463
|
-
},
|
|
25464
|
-
...{
|
|
25465
|
-
path: string;
|
|
25466
|
-
key: ModuleKeySchema;
|
|
25467
|
-
dependencies?: {
|
|
25468
|
-
tools?: string[];
|
|
25469
|
-
};
|
|
25470
|
-
}[]
|
|
25471
|
-
];
|
|
25472
25492
|
'devops:buildInfoProvider'?: [
|
|
25473
25493
|
{
|
|
25474
25494
|
name: {
|
|
@@ -74947,6 +74967,9 @@ export interface HostedResourcesSchema {
|
|
|
74947
74967
|
*/
|
|
74948
74968
|
key: string;
|
|
74949
74969
|
path: string;
|
|
74970
|
+
entry?: {
|
|
74971
|
+
[k: string]: string;
|
|
74972
|
+
};
|
|
74950
74973
|
tunnel?: {
|
|
74951
74974
|
port: number;
|
|
74952
74975
|
};
|
package/out/text/errors.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export declare const errors: {
|
|
|
44
44
|
wrongEndpointReference: (module: string, endpointKey: string) => string;
|
|
45
45
|
wrongServiceReference: (module: string, serviceKey: string) => string;
|
|
46
46
|
wrongResourceReference: (module: string, resourceKey: string) => string;
|
|
47
|
+
internalFieldFound: (fieldName: string, moduleKey: string) => string;
|
|
47
48
|
wrongResourceType: (folder: string) => string;
|
|
48
49
|
singleEntryOfTheModule: (moduleType: string) => string;
|
|
49
50
|
singleEntryOfModuleWithoutConfigureAndStartedParams: (moduleType: string) => string;
|
|
@@ -149,6 +150,7 @@ export declare const errors: {
|
|
|
149
150
|
undefinedActionName: (action: string) => string;
|
|
150
151
|
incorrectA2AEndpointReference: (module: string, endpointKey: string) => string;
|
|
151
152
|
incorrectA2AEndpointConfiguration: (module: string, endpointKey: string) => string;
|
|
153
|
+
incorrectSkill: (module: string, toolKey: string) => string;
|
|
152
154
|
};
|
|
153
155
|
action: {
|
|
154
156
|
unreferencedAction: (action: string) => string;
|
|
@@ -182,6 +184,16 @@ export declare const errors: {
|
|
|
182
184
|
deprecatedCspPolicyDefinition: (folder: string) => string;
|
|
183
185
|
tooManyResourcesError: (limit: number) => string;
|
|
184
186
|
nonDirectory: (folder: string, key: string) => string;
|
|
187
|
+
missingEntryMap: (resourceKey: string, key: string) => string;
|
|
188
|
+
missingEntryKey: (resourceKey: string, entryKey: string, key: string) => string;
|
|
189
|
+
missingEntryFile: (entryPath: string, key: string) => string;
|
|
190
|
+
directoryEntryFile: (entryPath: string, key: string) => string;
|
|
191
|
+
invalidCustomUiEntryFileType: (entryPath: string, key: string) => string;
|
|
192
|
+
invalidUiKitEntryFileType: (entryPath: string, key: string) => string;
|
|
193
|
+
invalidEntryPathValue: (resourceKey: string, entryKey: string, entryPath: string) => string;
|
|
194
|
+
resourceTypeConflict: (resourceKey: string) => string;
|
|
195
|
+
invalidCustomUiResourceEntryFileType: (resourceKey: string, entryKey: string, entryPath: string) => string;
|
|
196
|
+
invalidUiKitResourceEntryFileType: (resourceKey: string, entryKey: string, entryPath: string) => string;
|
|
185
197
|
};
|
|
186
198
|
deprecationInfo: {
|
|
187
199
|
app: {
|
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":"AAAA,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,eAAO,MAAM,MAAM;8BACS,MAAM,KAAG,MAAM;+BACd,MAAM,EAAE,KAAG,MAAM;2BAIvB,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,mBAAmB,MAAM,KAAG,MAAM;mDAIvC,MAAM,KAAG,MAAM;4BAEtC,MAAM,EAAE,GAAG,SAAS,KAAG,MAAM;+CAIV,MAAM;6CACR,MAAM,gBAAgB,MAAM;qCAEpC,MAAM;2CACA,MAAM;6CACJ,MAAM;;;qCAGd,MAAM,SAAS,MAAM,KAAG,MAAM;4CAEvB,MAAM,SAAS,MAAM,KAAG,MAAM;0DAEhB,MAAM,YAAY,MAAM,mBAAmB,MAAM,EAAE,KAAG,MAAM;oDAElE,MAAM,OAAO,MAAM,KAAG,MAAM;kDAE9B,MAAM,OAAO,MAAM,KAAG,MAAM;wCAEtC,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM;0CAI9B,MAAM;2CAEL,MAAM,KAAG,MAAM;0CAEhB,MAAM,SAAS,MAAM,KAAG,MAAM;+CAEzB,MAAM,KAAG,MAAM;wCAEtB,MAAM,KAAG,MAAM;gCAEvB,MAAM,KAAG,MAAM;;;uCAIR,MAAM,KAAG,MAAM;0CACZ,MAAM,KAAG,MAAM;;;gCAGzB,MAAM,KAAG,MAAM;6BACpB,MAAM;+BACJ,MAAM;iCACF,MAAM,KAAG,MAAM;yCACP,MAAM,eAAe,MAAM,KAAG,MAAM;yCAEpC,MAAM,eAAe,MAAM,KAAG,MAAM;wCAErC,MAAM,cAAc,MAAM,KAAG,MAAM;yCAElC,MAAM,eAAe,MAAM,KAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"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"}
|
package/out/text/errors.js
CHANGED
|
@@ -58,6 +58,7 @@ exports.errors = {
|
|
|
58
58
|
wrongEndpointReference: (module, endpointKey) => `${module} references undefined endpoint module with key '${endpointKey}'`,
|
|
59
59
|
wrongServiceReference: (module, serviceKey) => `${module} references undefined service with key '${serviceKey}'`,
|
|
60
60
|
wrongResourceReference: (module, resourceKey) => `missing resource key '${resourceKey}' is being referenced by ${module} module`,
|
|
61
|
+
internalFieldFound: (fieldName, moduleKey) => `'${fieldName}' is an internal property and cannot be set explicitly. Remove this field from the ${moduleKey} module.`,
|
|
61
62
|
wrongResourceType: (folder) => `Client Side UI Kit resource (${folder}) cannot be a directory`,
|
|
62
63
|
singleEntryOfTheModule: (moduleType) => `Only a single entry of the ${moduleType} module can be defined in the manifest`,
|
|
63
64
|
singleEntryOfModuleWithoutConfigureAndStartedParams: (moduleType) => `The ${moduleType} module can only have a single entry that doesn’t include either useAsConfig or useAsGetStarted properties.`,
|
|
@@ -162,7 +163,8 @@ exports.errors = {
|
|
|
162
163
|
incorrectAgentActionReference: (module, moduleKey) => `${module} references undefined action module with key '${moduleKey}'.`,
|
|
163
164
|
undefinedActionName: (action) => `Action '${action}' does not have a name property. 'name' property will be required when Forge Agents are GA.`,
|
|
164
165
|
incorrectA2AEndpointReference: (module, endpointKey) => `${module} references undefined endpoint '${endpointKey}' in agent2Agent protocol.`,
|
|
165
|
-
incorrectA2AEndpointConfiguration: (module, endpointKey) => `${module} endpoint '${endpointKey}' must reference a remote. Agent2Agent protocol requires remote endpoints
|
|
166
|
+
incorrectA2AEndpointConfiguration: (module, endpointKey) => `${module} endpoint '${endpointKey}' must reference a remote. Agent2Agent protocol requires remote endpoints.`,
|
|
167
|
+
incorrectSkill: (module, toolKey) => `${module} references undefined action module with key '${toolKey}'.`
|
|
166
168
|
},
|
|
167
169
|
action: {
|
|
168
170
|
unreferencedAction: (action) => `Action '${action}' is not referenced by any Rovo agent or automation:actionProvider module.`,
|
|
@@ -195,7 +197,17 @@ exports.errors = {
|
|
|
195
197
|
missingEntrypoint: (folder, key) => `missing index.html file in directory (${folder}) is being referenced by a Custom UI resource in ${key} module`,
|
|
196
198
|
deprecatedCspPolicyDefinition: (folder) => `The index.html file in the (${folder}) directory is using a deprecated method of defining CSP. To use the supported method, go to: https://go.atlassian.com/forge-content-security-and-egress-controls`,
|
|
197
199
|
tooManyResourcesError: (limit) => `document exceeds ${limit} resources`,
|
|
198
|
-
nonDirectory: (folder, key) => `Custom UI resource must be a directory. (${folder}) in ${key} module is not a directory
|
|
200
|
+
nonDirectory: (folder, key) => `Custom UI resource must be a directory. (${folder}) in ${key} module is not a directory`,
|
|
201
|
+
missingEntryMap: (resourceKey, key) => `resource '${resourceKey}' referenced by ${key} module does not define an entry map`,
|
|
202
|
+
missingEntryKey: (resourceKey, entryKey, key) => `resource '${resourceKey}' referenced by ${key} module does not define entry '${entryKey}'`,
|
|
203
|
+
missingEntryFile: (entryPath, key) => `missing resource entry file '${entryPath}' referenced by ${key} module`,
|
|
204
|
+
directoryEntryFile: (entryPath, key) => `resource entry '${entryPath}' referenced by ${key} module must be a file`,
|
|
205
|
+
invalidCustomUiEntryFileType: (entryPath, key) => `Custom UI resource entry '${entryPath}' referenced by ${key} module must point to an .html file`,
|
|
206
|
+
invalidUiKitEntryFileType: (entryPath, key) => `UI Kit resource entry '${entryPath}' referenced by ${key} module must not point to an .html file`,
|
|
207
|
+
invalidEntryPathValue: (resourceKey, entryKey, entryPath) => `resource '${resourceKey}' entry '${entryKey}' must be a filename only. Found '${entryPath}'`,
|
|
208
|
+
resourceTypeConflict: (resourceKey) => `resource '${resourceKey}' cannot be used as both UI Kit and Custom UI. Use a consistent resource type`,
|
|
209
|
+
invalidCustomUiResourceEntryFileType: (resourceKey, entryKey, entryPath) => `resource '${resourceKey}' is Custom UI, so entry '${entryKey}' must point to an .html file. Found '${entryPath}'`,
|
|
210
|
+
invalidUiKitResourceEntryFileType: (resourceKey, entryKey, entryPath) => `resource '${resourceKey}' is UI Kit, so entry '${entryKey}' must not point to an .html file. Found '${entryPath}'`
|
|
199
211
|
},
|
|
200
212
|
deprecationInfo: {
|
|
201
213
|
app: {
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
interface KeyedModuleEntry {
|
|
2
2
|
key: string;
|
|
3
3
|
}
|
|
4
|
+
export declare type ResourceReference = {
|
|
5
|
+
resourceKey: string;
|
|
6
|
+
entryKey?: string;
|
|
7
|
+
isValidFormat: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const parseResourceReference: (resourceReference: string) => ResourceReference;
|
|
4
10
|
export declare const findInvalidFunctionReferences: (module: any, functions?: KeyedModuleEntry[]) => string[];
|
|
5
11
|
export declare const findInvalidResourceReferences: (module: any, resources?: KeyedModuleEntry[]) => string[];
|
|
6
12
|
export declare const findInvalidEndpointReferences: (module: any, resources?: KeyedModuleEntry[]) => string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-references.d.ts","sourceRoot":"","sources":["../../src/utils/module-references.ts"],"names":[],"mappings":"AAAA,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,CAAC;CACb;
|
|
1
|
+
{"version":3,"file":"module-references.d.ts","sourceRoot":"","sources":["../../src/utils/module-references.ts"],"names":[],"mappings":"AAAA,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,CAAC;CACb;AAID,oBAAY,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,sBAAsB,sBAAuB,MAAM,KAAG,iBAsBlE,CAAC;AAoCF,eAAO,MAAM,6BAA6B,WAAY,GAAG,cAAc,gBAAgB,EAAE,aAChC,CAAC;AAC1D,eAAO,MAAM,6BAA6B,WAAY,GAAG,cAAc,gBAAgB,EAAE,aAChC,CAAC;AAC1D,eAAO,MAAM,6BAA6B,WAAY,GAAG,cAAc,gBAAgB,EAAE,aAChC,CAAC;AAC1D,eAAO,MAAM,4BAA4B,WAAY,GAAG,aAAa,gBAAgB,EAAE,aAChC,CAAC"}
|
|
@@ -1,10 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findInvalidServiceReferences = exports.findInvalidEndpointReferences = exports.findInvalidResourceReferences = exports.findInvalidFunctionReferences = void 0;
|
|
3
|
+
exports.findInvalidServiceReferences = exports.findInvalidEndpointReferences = exports.findInvalidResourceReferences = exports.findInvalidFunctionReferences = exports.parseResourceReference = void 0;
|
|
4
|
+
const parseResourceReference = (resourceReference) => {
|
|
5
|
+
const parts = resourceReference.split('/');
|
|
6
|
+
if (parts.length === 1 && parts[0]) {
|
|
7
|
+
return {
|
|
8
|
+
resourceKey: parts[0],
|
|
9
|
+
isValidFormat: true
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
if (parts.length === 2 && parts[0] && parts[1]) {
|
|
13
|
+
return {
|
|
14
|
+
resourceKey: parts[0],
|
|
15
|
+
entryKey: parts[1],
|
|
16
|
+
isValidFormat: true
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
resourceKey: resourceReference,
|
|
21
|
+
isValidFormat: false
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
exports.parseResourceReference = parseResourceReference;
|
|
25
|
+
const parseResourceKey = (resourceReference) => {
|
|
26
|
+
const parsedReference = (0, exports.parseResourceReference)(resourceReference);
|
|
27
|
+
return parsedReference.isValidFormat ? parsedReference.resourceKey : undefined;
|
|
28
|
+
};
|
|
29
|
+
const normalizeReferenceKey = (referenceProperty, entryKey) => referenceProperty === 'resource' ? parseResourceKey(entryKey) : entryKey;
|
|
4
30
|
const findInvalidReferenceKeys = (property, module, references) => {
|
|
5
31
|
const invalidEntries = [];
|
|
6
32
|
const _checkModuleEntryKey = (entryKey) => {
|
|
7
|
-
if (
|
|
33
|
+
if (!entryKey) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const normalizedReference = normalizeReferenceKey(property, entryKey);
|
|
37
|
+
if (!normalizedReference || !references?.find((reference) => reference.key === normalizedReference)) {
|
|
8
38
|
invalidEntries.push(entryKey);
|
|
9
39
|
}
|
|
10
40
|
};
|
|
@@ -4,6 +4,7 @@ export * from './schema-validator';
|
|
|
4
4
|
export * from './file-validator';
|
|
5
5
|
export * from './yaml-validator';
|
|
6
6
|
export * from './validator-interface';
|
|
7
|
+
export * from './internal-fields-validator';
|
|
7
8
|
export * from './resources-validator';
|
|
8
9
|
export * from './display-conditions-validator';
|
|
9
10
|
export * from './product-trigger-scopes-validator';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,0CAA0C,CAAC;AACzD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,0CAA0C,CAAC;AACzD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC"}
|
package/out/validators/index.js
CHANGED
|
@@ -7,6 +7,7 @@ tslib_1.__exportStar(require("./schema-validator"), exports);
|
|
|
7
7
|
tslib_1.__exportStar(require("./file-validator"), exports);
|
|
8
8
|
tslib_1.__exportStar(require("./yaml-validator"), exports);
|
|
9
9
|
tslib_1.__exportStar(require("./validator-interface"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./internal-fields-validator"), exports);
|
|
10
11
|
tslib_1.__exportStar(require("./resources-validator"), exports);
|
|
11
12
|
tslib_1.__exportStar(require("./display-conditions-validator"), exports);
|
|
12
13
|
tslib_1.__exportStar(require("./product-trigger-scopes-validator"), exports);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ManifestObject, ManifestValidationResult } from '../types';
|
|
2
|
+
import { ManifestSchema } from '../schema/manifest';
|
|
3
|
+
import { ValidatorInterface } from './validator-interface';
|
|
4
|
+
export declare class InternalFieldsValidator implements ValidatorInterface<ManifestObject<ManifestSchema> | undefined, ManifestSchema> {
|
|
5
|
+
private readonly INTERNAL_FIELDS;
|
|
6
|
+
validate(manifest: ManifestObject<ManifestSchema> | undefined): Promise<ManifestValidationResult<ManifestSchema>>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=internal-fields-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-fields-validator.d.ts","sourceRoot":"","sources":["../../src/validators/internal-fields-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAmB,MAAM,UAAU,CAAC;AAGrF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAW3D,qBAAa,uBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IAGzF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2D;IAErF,QAAQ,CACZ,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GACnD,OAAO,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;CAyCrD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InternalFieldsValidator = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
const text_1 = require("../text");
|
|
6
|
+
class InternalFieldsValidator {
|
|
7
|
+
INTERNAL_FIELDS = ['resolvedResourceEntry', 'renderRuntimeType'];
|
|
8
|
+
async validate(manifest) {
|
|
9
|
+
if (!manifest || !manifest.typedContent || !manifest.typedContent.modules) {
|
|
10
|
+
return {
|
|
11
|
+
success: true,
|
|
12
|
+
manifestObject: manifest
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const validationErrors = [];
|
|
16
|
+
const { modules } = manifest.typedContent;
|
|
17
|
+
const yamlContentByLine = manifest.yamlContentByLine || [];
|
|
18
|
+
(0, utils_1.getValidModules)(modules).forEach((moduleType) => {
|
|
19
|
+
const moduleArray = modules[moduleType];
|
|
20
|
+
if (!Array.isArray(moduleArray)) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
moduleArray.forEach((module, index) => {
|
|
24
|
+
this.INTERNAL_FIELDS.forEach((fieldName) => {
|
|
25
|
+
if (fieldName in module) {
|
|
26
|
+
const moduleKey = module.key || `${moduleType}[${index}]`;
|
|
27
|
+
validationErrors.push({
|
|
28
|
+
message: text_1.errors.modules.internalFieldFound(fieldName, moduleKey),
|
|
29
|
+
reference: text_1.References.Modules,
|
|
30
|
+
level: 'error',
|
|
31
|
+
...(0, utils_1.findPosition)(moduleKey, yamlContentByLine)
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
success: validationErrors.length === 0,
|
|
39
|
+
manifestObject: manifest,
|
|
40
|
+
errors: validationErrors
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.InternalFieldsValidator = InternalFieldsValidator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/rovo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/rovo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAOnD,eAAO,MAAM,mBAAmB,YAAa,OAAO,sBAAsB,MAAM,EAAE,KAAG,eAAe,EAUnG,CAAC"}
|
|
@@ -3,12 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.validateRovoModules = void 0;
|
|
4
4
|
const validate_rovo_agent_actions_1 = require("./validate-rovo-agent-actions");
|
|
5
5
|
const validate_unreferenced_actions_1 = require("./validate-unreferenced-actions");
|
|
6
|
+
const validate_rovo_skill_actions_1 = require("./validate-rovo-skill-actions");
|
|
6
7
|
const validate_undefined_action_name_1 = require("./validate-undefined-action-name");
|
|
7
8
|
const validate_agent_connector_remote_endpoints_1 = require("./validate-agent-connector-remote-endpoints");
|
|
8
9
|
const validateRovoModules = (modules, yamlContentByLine) => {
|
|
9
10
|
const validationErrors = [];
|
|
10
11
|
validationErrors.push(...(0, validate_rovo_agent_actions_1.validateRovoAgentActions)(modules, yamlContentByLine));
|
|
11
12
|
validationErrors.push(...(0, validate_unreferenced_actions_1.validateUnreferencedActions)(modules, yamlContentByLine));
|
|
13
|
+
validationErrors.push(...(0, validate_rovo_skill_actions_1.validateRovoSkillActions)(modules, yamlContentByLine));
|
|
12
14
|
validationErrors.push(...(0, validate_undefined_action_name_1.validateUndefinedActionName)(modules, yamlContentByLine));
|
|
13
15
|
validationErrors.push(...(0, validate_agent_connector_remote_endpoints_1.validateAgentConnectorRemoteEndpoints)(modules, yamlContentByLine));
|
|
14
16
|
return validationErrors;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ValidationError } from '../../../types';
|
|
2
|
+
import { Modules } from '../../../schema/manifest';
|
|
3
|
+
export declare const validateRovoSkillActions: (allModules: Modules, yamlContentByLine?: string[]) => ValidationError[];
|
|
4
|
+
//# sourceMappingURL=validate-rovo-skill-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-rovo-skill-actions.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/rovo/validate-rovo-skill-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,eAAO,MAAM,wBAAwB,eAAgB,OAAO,sBAAsB,MAAM,EAAE,KAAG,eAAe,EAe3G,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateRovoSkillActions = void 0;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
const text_1 = require("../../../text");
|
|
6
|
+
const utils_1 = require("../../../utils");
|
|
7
|
+
const validateRovoSkillActions = (allModules, yamlContentByLine) => {
|
|
8
|
+
const validationErrors = [];
|
|
9
|
+
const rovoSkills = allModules[types_1.AllModuleTypes.RovoSkill];
|
|
10
|
+
const actionKey = (0, utils_1.cleanKey)(types_1.AllModuleTypes.CoreAction);
|
|
11
|
+
const actions = new Set(allModules[actionKey]?.map((action) => action.key) ?? []);
|
|
12
|
+
rovoSkills?.forEach((skill) => {
|
|
13
|
+
skill.dependencies?.tools?.forEach((tool) => {
|
|
14
|
+
if (!actions.has(tool)) {
|
|
15
|
+
validationErrors.push(getValidationError(skill.key, tool, yamlContentByLine));
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
return validationErrors;
|
|
20
|
+
};
|
|
21
|
+
exports.validateRovoSkillActions = validateRovoSkillActions;
|
|
22
|
+
function getValidationError(skill, tool, yamlContentByLine) {
|
|
23
|
+
return {
|
|
24
|
+
message: text_1.errors.modules.rovo.incorrectSkill(skill, tool),
|
|
25
|
+
reference: text_1.References.Modules,
|
|
26
|
+
level: 'error',
|
|
27
|
+
...(0, utils_1.findPosition)(skill, yamlContentByLine)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -17,12 +17,18 @@ function getUnreferencedActions(allModules) {
|
|
|
17
17
|
const actionKey = (0, utils_1.cleanKey)(types_1.AllModuleTypes.CoreAction);
|
|
18
18
|
const allActions = new Set((allModules[actionKey]?.map((action) => action.key) ?? []));
|
|
19
19
|
const rovoAgents = allModules[types_1.AllModuleTypes.RovoAgent];
|
|
20
|
+
const rovoSkills = allModules[types_1.AllModuleTypes.RovoSkill];
|
|
20
21
|
const automationActionProviders = allModules[types_1.AllModuleTypes.AutomationActionProvider];
|
|
21
22
|
rovoAgents?.forEach((agent) => {
|
|
22
23
|
agent.actions?.forEach((action) => {
|
|
23
24
|
allActions.delete(action);
|
|
24
25
|
});
|
|
25
26
|
});
|
|
27
|
+
rovoSkills?.forEach((skill) => {
|
|
28
|
+
skill.dependencies?.tools?.forEach((tool) => {
|
|
29
|
+
allActions.delete(tool);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
26
32
|
automationActionProviders?.forEach((actionProvider) => {
|
|
27
33
|
actionProvider.actions?.forEach((action) => {
|
|
28
34
|
allActions.delete(action);
|
|
@@ -3,6 +3,10 @@ import { ManifestSchema } from '../schema/manifest';
|
|
|
3
3
|
import { ValidatorInterface } from './validator-interface';
|
|
4
4
|
export declare const MAX_RESOURCE_COUNT = 50;
|
|
5
5
|
export declare class ResourcesValidator implements ValidatorInterface<ManifestObject<ManifestSchema> | undefined, ManifestSchema> {
|
|
6
|
+
private isHtmlEntryFile;
|
|
7
|
+
private validateEntryResourceReference;
|
|
8
|
+
private trackAndValidateResourceType;
|
|
9
|
+
private validateResourceEntryExtensions;
|
|
6
10
|
validate(manifest: ManifestObject<ManifestSchema> | undefined): Promise<ManifestValidationResult<ManifestSchema>>;
|
|
7
11
|
}
|
|
8
12
|
//# sourceMappingURL=resources-validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources-validator.d.ts","sourceRoot":"","sources":["../../src/validators/resources-validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAmB,MAAM,UAAU,CAAC;AAGrF,OAAO,
|
|
1
|
+
{"version":3,"file":"resources-validator.d.ts","sourceRoot":"","sources":["../../src/validators/resources-validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAmB,MAAM,UAAU,CAAC;AAGrF,OAAO,EAAyB,cAAc,EAAmB,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAUrC,qBAAa,kBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IAEzF,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,8BAA8B;IAoGtC,OAAO,CAAC,4BAA4B;IAwBpC,OAAO,CAAC,+BAA+B;IAwCjC,QAAQ,CACZ,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GACnD,OAAO,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;CAsOrD"}
|
|
@@ -7,9 +7,130 @@ const path_1 = require("path");
|
|
|
7
7
|
const cheerio_1 = require("cheerio");
|
|
8
8
|
const utils_1 = require("../utils");
|
|
9
9
|
const text_1 = require("../text");
|
|
10
|
-
const utils_2 = require("../utils");
|
|
11
10
|
exports.MAX_RESOURCE_COUNT = 50;
|
|
12
11
|
class ResourcesValidator {
|
|
12
|
+
isHtmlEntryFile(entryPath) {
|
|
13
|
+
return entryPath.toLowerCase().endsWith('.html');
|
|
14
|
+
}
|
|
15
|
+
validateEntryResourceReference(parsedReference, resource, moduleKey, module, manifestDir, yamlContentByLine, validationErrors) {
|
|
16
|
+
const entryKey = parsedReference.entryKey;
|
|
17
|
+
if (!entryKey) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const entryMap = resource.entry;
|
|
21
|
+
if (!entryMap) {
|
|
22
|
+
validationErrors.push({
|
|
23
|
+
message: text_1.errors.resources.missingEntryMap(resource.key, moduleKey),
|
|
24
|
+
reference: text_1.References.Resources,
|
|
25
|
+
level: 'error',
|
|
26
|
+
...(0, utils_1.findPosition)(moduleKey, yamlContentByLine)
|
|
27
|
+
});
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (!Object.hasOwn(entryMap, entryKey)) {
|
|
31
|
+
validationErrors.push({
|
|
32
|
+
message: text_1.errors.resources.missingEntryKey(resource.key, entryKey, moduleKey),
|
|
33
|
+
reference: text_1.References.Resources,
|
|
34
|
+
level: 'error',
|
|
35
|
+
...(0, utils_1.findPosition)(moduleKey, yamlContentByLine)
|
|
36
|
+
});
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const entryPath = entryMap[entryKey];
|
|
40
|
+
if (entryPath.includes('..')) {
|
|
41
|
+
validationErrors.push({
|
|
42
|
+
message: text_1.errors.resources.invalidEntryPathValue(resource.key, entryKey, entryPath),
|
|
43
|
+
reference: text_1.References.Resources,
|
|
44
|
+
level: 'error',
|
|
45
|
+
...(0, utils_1.findPosition)(moduleKey, yamlContentByLine)
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const resolvedEntryPath = (0, path_1.resolve)(manifestDir, resource.path, entryPath);
|
|
50
|
+
const displayEntryPath = `${resource.path}/${entryPath}`;
|
|
51
|
+
if (!fs_1.default.existsSync(resolvedEntryPath)) {
|
|
52
|
+
validationErrors.push({
|
|
53
|
+
message: text_1.errors.resources.missingEntryFile(displayEntryPath, moduleKey),
|
|
54
|
+
reference: text_1.References.Resources,
|
|
55
|
+
level: 'error',
|
|
56
|
+
...(0, utils_1.findPosition)(moduleKey, yamlContentByLine)
|
|
57
|
+
});
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (fs_1.default.lstatSync(resolvedEntryPath).isDirectory()) {
|
|
61
|
+
validationErrors.push({
|
|
62
|
+
message: text_1.errors.resources.directoryEntryFile(displayEntryPath, moduleKey),
|
|
63
|
+
reference: text_1.References.Resources,
|
|
64
|
+
level: 'error',
|
|
65
|
+
...(0, utils_1.findPosition)(moduleKey, yamlContentByLine)
|
|
66
|
+
});
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (module.render === 'native' && this.isHtmlEntryFile(entryPath)) {
|
|
70
|
+
validationErrors.push({
|
|
71
|
+
message: text_1.errors.resources.invalidUiKitEntryFileType(displayEntryPath, moduleKey),
|
|
72
|
+
reference: text_1.References.Resources,
|
|
73
|
+
level: 'error',
|
|
74
|
+
...(0, utils_1.findPosition)(moduleKey, yamlContentByLine)
|
|
75
|
+
});
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (module.render !== 'native' && !this.isHtmlEntryFile(entryPath)) {
|
|
79
|
+
validationErrors.push({
|
|
80
|
+
message: text_1.errors.resources.invalidCustomUiEntryFileType(displayEntryPath, moduleKey),
|
|
81
|
+
reference: text_1.References.Resources,
|
|
82
|
+
level: 'error',
|
|
83
|
+
...(0, utils_1.findPosition)(moduleKey, yamlContentByLine)
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
trackAndValidateResourceType(resource, module, resourceTypeMap, moduleKey, yamlContentByLine, validationErrors) {
|
|
88
|
+
if (resource.entry) {
|
|
89
|
+
const resourceType = module.render === 'native' ? 'native' : 'customUI';
|
|
90
|
+
const existingResourceType = resourceTypeMap.get(resource.key);
|
|
91
|
+
if (existingResourceType && existingResourceType !== resourceType) {
|
|
92
|
+
validationErrors.push({
|
|
93
|
+
message: text_1.errors.resources.resourceTypeConflict(resource.key),
|
|
94
|
+
reference: text_1.References.Resources,
|
|
95
|
+
level: 'error',
|
|
96
|
+
...(0, utils_1.findPosition)(moduleKey, yamlContentByLine)
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else if (!existingResourceType) {
|
|
100
|
+
resourceTypeMap.set(resource.key, resourceType);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
validateResourceEntryExtensions(resources, resourceTypeMap, yamlContentByLine, validationErrors) {
|
|
105
|
+
resources.forEach((resource) => {
|
|
106
|
+
const entryMap = resource.entry;
|
|
107
|
+
if (!entryMap) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const resourceType = resourceTypeMap.get(resource.key);
|
|
111
|
+
if (!resourceType) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
Object.entries(entryMap).forEach(([entryKey, entryPath]) => {
|
|
115
|
+
if (resourceType === 'native' && this.isHtmlEntryFile(entryPath)) {
|
|
116
|
+
validationErrors.push({
|
|
117
|
+
message: text_1.errors.resources.invalidUiKitResourceEntryFileType(resource.key, entryKey, entryPath),
|
|
118
|
+
reference: text_1.References.Resources,
|
|
119
|
+
level: 'error',
|
|
120
|
+
...(0, utils_1.findPosition)(resource.key, yamlContentByLine)
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (resourceType === 'customUI' && !this.isHtmlEntryFile(entryPath)) {
|
|
124
|
+
validationErrors.push({
|
|
125
|
+
message: text_1.errors.resources.invalidCustomUiResourceEntryFileType(resource.key, entryKey, entryPath),
|
|
126
|
+
reference: text_1.References.Resources,
|
|
127
|
+
level: 'error',
|
|
128
|
+
...(0, utils_1.findPosition)(resource.key, yamlContentByLine)
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
}
|
|
13
134
|
async validate(manifest) {
|
|
14
135
|
if (!manifest || !manifest.typedContent || !manifest.filePath) {
|
|
15
136
|
return {
|
|
@@ -18,7 +139,8 @@ class ResourcesValidator {
|
|
|
18
139
|
};
|
|
19
140
|
}
|
|
20
141
|
const validationErrors = [];
|
|
21
|
-
const { typedContent: { resources, modules },
|
|
142
|
+
const { typedContent: { resources, modules }, filePath } = manifest;
|
|
143
|
+
const yamlContentByLine = manifest.yamlContentByLine || [];
|
|
22
144
|
if (!resources) {
|
|
23
145
|
return {
|
|
24
146
|
success: true,
|
|
@@ -34,22 +156,40 @@ class ResourcesValidator {
|
|
|
34
156
|
});
|
|
35
157
|
}
|
|
36
158
|
if (modules) {
|
|
37
|
-
const resourceMap = new Map(resources.map((
|
|
159
|
+
const resourceMap = new Map(resources.map((resource) => [resource.key, resource]));
|
|
160
|
+
const resourceTypeMap = new Map();
|
|
38
161
|
const manifestDir = (0, path_1.dirname)(filePath);
|
|
39
162
|
(0, utils_1.getValidModules)(modules).forEach((moduleKey) => {
|
|
40
163
|
modules[moduleKey]?.forEach((module) => {
|
|
41
|
-
|
|
164
|
+
const resourceReference = module.resource;
|
|
165
|
+
if (!resourceReference) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const invalidResourceReferences = (0, utils_1.findInvalidResourceReferences)(module, resources);
|
|
169
|
+
invalidResourceReferences.forEach((invalidReference) => {
|
|
170
|
+
const parsedReference = (0, utils_1.parseResourceReference)(invalidReference);
|
|
42
171
|
validationErrors.push({
|
|
43
|
-
message: text_1.errors.modules.wrongResourceReference(moduleKey, resourceKey),
|
|
172
|
+
message: text_1.errors.modules.wrongResourceReference(moduleKey, parsedReference.resourceKey),
|
|
44
173
|
reference: text_1.References.Resources,
|
|
45
174
|
level: 'error',
|
|
46
175
|
...(0, utils_1.findPosition)(moduleKey, yamlContentByLine)
|
|
47
176
|
});
|
|
48
177
|
});
|
|
49
|
-
const
|
|
50
|
-
|
|
178
|
+
const parsedReference = (0, utils_1.parseResourceReference)(resourceReference);
|
|
179
|
+
const resource = resourceMap.get(parsedReference.resourceKey);
|
|
180
|
+
if (!resource) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (parsedReference.entryKey) {
|
|
184
|
+
this.trackAndValidateResourceType(resource, module, resourceTypeMap, moduleKey, yamlContentByLine, validationErrors);
|
|
185
|
+
this.validateEntryResourceReference(parsedReference, resource, moduleKey, module, manifestDir, yamlContentByLine, validationErrors);
|
|
51
186
|
return;
|
|
52
|
-
|
|
187
|
+
}
|
|
188
|
+
const resourcePath = resource.path;
|
|
189
|
+
const resourcePathDir = (0, path_1.resolve)(manifestDir, resourcePath);
|
|
190
|
+
if (!fs_1.default.existsSync(resourcePathDir)) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
53
193
|
if (module.render === 'native') {
|
|
54
194
|
if (fs_1.default.lstatSync(resourcePathDir).isDirectory()) {
|
|
55
195
|
validationErrors.push({
|
|
@@ -81,8 +221,17 @@ class ResourcesValidator {
|
|
|
81
221
|
}
|
|
82
222
|
});
|
|
83
223
|
});
|
|
224
|
+
this.validateResourceEntryExtensions(resources, resourceTypeMap, yamlContentByLine, validationErrors);
|
|
84
225
|
(0, utils_1.getValidModules)(modules).forEach((moduleKey) => {
|
|
85
|
-
const uniquePaths = new Set(modules[moduleKey]
|
|
226
|
+
const uniquePaths = new Set(modules[moduleKey]
|
|
227
|
+
.map(({ resource }) => {
|
|
228
|
+
if (!resource) {
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
const parsedReference = (0, utils_1.parseResourceReference)(resource);
|
|
232
|
+
return resourceMap.get(parsedReference.resourceKey)?.path;
|
|
233
|
+
})
|
|
234
|
+
.filter((resourcePath) => Boolean(resourcePath)));
|
|
86
235
|
uniquePaths.forEach((path) => {
|
|
87
236
|
if (!path)
|
|
88
237
|
return;
|