@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 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":"AAmBA,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;CA6BrC"}
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": 1
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": [
@@ -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
  };
@@ -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: {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"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"}
@@ -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;AAqBD,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
+ {"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 (entryKey && !references?.find((func) => func.key === entryKey)) {
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"}
@@ -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;AAMnD,eAAO,MAAM,mBAAmB,YAAa,OAAO,sBAAsB,MAAM,EAAE,KAAG,eAAe,EASnG,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,EAAE,cAAc,EAAmB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,qBAAa,kBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IAEnF,QAAQ,CACZ,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GACnD,OAAO,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;CAkLrD"}
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 }, yamlContentByLine, filePath } = manifest;
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(({ key, path }) => [key, path]));
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
- (0, utils_2.findInvalidResourceReferences)(module, resources).forEach((resourceKey) => {
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 resourcePath = resourceMap.get(module.resource);
50
- if (resourcePath === undefined)
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
- const resourcePathDir = (0, path_1.resolve)(resourcePath);
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].map(({ resource }) => resourceMap.get(resource)));
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/manifest",
3
- "version": "12.8.0-next.1",
3
+ "version": "12.8.0-next.10",
4
4
  "description": "Definitions and validations of the Forge manifest",
5
5
  "main": "out/index.js",
6
6
  "scripts": {