@salesforce/core 3.30.14 → 3.31.7
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/LICENSE.txt +11 -11
- package/README.md +222 -227
- package/lib/config/aliasesConfig.d.ts +12 -12
- package/lib/config/aliasesConfig.js +27 -27
- package/lib/config/authInfoConfig.d.ts +19 -19
- package/lib/config/authInfoConfig.js +34 -34
- package/lib/config/config.d.ts +311 -311
- package/lib/config/config.js +574 -574
- package/lib/config/configAggregator.d.ts +232 -232
- package/lib/config/configAggregator.js +379 -379
- package/lib/config/configFile.d.ts +199 -199
- package/lib/config/configFile.js +340 -340
- package/lib/config/configGroup.d.ts +141 -141
- package/lib/config/configGroup.js +224 -224
- package/lib/config/configStore.d.ts +241 -241
- package/lib/config/configStore.js +352 -352
- package/lib/config/envVars.d.ts +101 -101
- package/lib/config/envVars.js +456 -456
- package/lib/config/orgUsersConfig.d.ts +31 -31
- package/lib/config/orgUsersConfig.js +41 -41
- package/lib/config/sandboxOrgConfig.d.ts +37 -37
- package/lib/config/sandboxOrgConfig.js +50 -50
- package/lib/config/sandboxProcessCache.d.ts +16 -16
- package/lib/config/sandboxProcessCache.js +37 -37
- package/lib/config/tokensConfig.d.ts +10 -10
- package/lib/config/tokensConfig.js +28 -28
- package/lib/config/ttlConfig.d.ts +34 -34
- package/lib/config/ttlConfig.js +54 -54
- package/lib/crypto/crypto.d.ts +54 -54
- package/lib/crypto/crypto.js +220 -220
- package/lib/crypto/keyChain.d.ts +8 -8
- package/lib/crypto/keyChain.js +61 -61
- package/lib/crypto/keyChainImpl.d.ts +116 -116
- package/lib/crypto/keyChainImpl.js +486 -486
- package/lib/crypto/secureBuffer.d.ts +46 -46
- package/lib/crypto/secureBuffer.js +82 -82
- package/lib/deviceOauthService.d.ts +71 -71
- package/lib/deviceOauthService.js +191 -191
- package/lib/exported.d.ts +38 -38
- package/lib/exported.js +118 -118
- package/lib/global.d.ts +70 -70
- package/lib/global.js +109 -109
- package/lib/lifecycleEvents.d.ts +93 -93
- package/lib/lifecycleEvents.js +188 -188
- package/lib/logger.d.ts +381 -381
- package/lib/logger.js +734 -734
- package/lib/messages.d.ts +291 -291
- package/lib/messages.js +543 -543
- package/lib/org/authInfo.d.ts +344 -344
- package/lib/org/authInfo.js +892 -892
- package/lib/org/authRemover.d.ts +88 -88
- package/lib/org/authRemover.js +182 -182
- package/lib/org/connection.d.ts +197 -197
- package/lib/org/connection.js +395 -395
- package/lib/org/index.d.ts +6 -6
- package/lib/org/index.js +28 -28
- package/lib/org/org.d.ts +558 -558
- package/lib/org/org.js +1267 -1267
- package/lib/org/orgConfigProperties.d.ts +69 -69
- package/lib/org/orgConfigProperties.js +136 -136
- package/lib/org/permissionSetAssignment.d.ts +35 -35
- package/lib/org/permissionSetAssignment.js +125 -125
- package/lib/org/scratchOrgCache.d.ts +20 -20
- package/lib/org/scratchOrgCache.js +32 -32
- package/lib/org/scratchOrgCreate.d.ts +54 -54
- package/lib/org/scratchOrgCreate.js +216 -216
- package/lib/org/scratchOrgErrorCodes.d.ts +10 -10
- package/lib/org/scratchOrgErrorCodes.js +88 -88
- package/lib/org/scratchOrgFeatureDeprecation.d.ts +26 -26
- package/lib/org/scratchOrgFeatureDeprecation.js +109 -109
- package/lib/org/scratchOrgInfoApi.d.ts +68 -68
- package/lib/org/scratchOrgInfoApi.js +413 -413
- package/lib/org/scratchOrgInfoGenerator.d.ts +64 -64
- package/lib/org/scratchOrgInfoGenerator.js +241 -241
- package/lib/org/scratchOrgLifecycleEvents.d.ts +10 -10
- package/lib/org/scratchOrgLifecycleEvents.js +40 -40
- package/lib/org/scratchOrgSettingsGenerator.d.ts +78 -78
- package/lib/org/scratchOrgSettingsGenerator.js +276 -276
- package/lib/org/scratchOrgTypes.d.ts +43 -43
- package/lib/org/scratchOrgTypes.js +8 -8
- package/lib/org/user.d.ts +187 -187
- package/lib/org/user.js +448 -448
- package/lib/schema/printer.d.ts +79 -79
- package/lib/schema/printer.js +260 -260
- package/lib/schema/validator.d.ts +70 -70
- package/lib/schema/validator.js +169 -169
- package/lib/sfError.d.ts +73 -73
- package/lib/sfError.js +136 -136
- package/lib/sfProject.d.ts +357 -357
- package/lib/sfProject.js +671 -671
- package/lib/stateAggregator/accessors/aliasAccessor.d.ts +98 -98
- package/lib/stateAggregator/accessors/aliasAccessor.js +145 -145
- package/lib/stateAggregator/accessors/orgAccessor.d.ts +101 -101
- package/lib/stateAggregator/accessors/orgAccessor.js +240 -240
- package/lib/stateAggregator/accessors/sandboxAccessor.d.ts +8 -8
- package/lib/stateAggregator/accessors/sandboxAccessor.js +27 -27
- package/lib/stateAggregator/accessors/tokenAccessor.d.ts +63 -63
- package/lib/stateAggregator/accessors/tokenAccessor.js +79 -79
- package/lib/stateAggregator/index.d.ts +4 -4
- package/lib/stateAggregator/index.js +26 -26
- package/lib/stateAggregator/stateAggregator.d.ts +25 -25
- package/lib/stateAggregator/stateAggregator.js +45 -45
- package/lib/status/myDomainResolver.d.ts +66 -66
- package/lib/status/myDomainResolver.js +124 -124
- package/lib/status/pollingClient.d.ts +85 -85
- package/lib/status/pollingClient.js +115 -115
- package/lib/status/streamingClient.d.ts +244 -244
- package/lib/status/streamingClient.js +436 -436
- package/lib/status/types.d.ts +89 -89
- package/lib/status/types.js +17 -17
- package/lib/testSetup.d.ts +553 -530
- package/lib/testSetup.js +871 -727
- package/lib/util/cache.d.ts +11 -11
- package/lib/util/cache.js +69 -69
- package/lib/util/checkLightningDomain.d.ts +1 -1
- package/lib/util/checkLightningDomain.js +28 -28
- package/lib/util/directoryWriter.d.ts +12 -12
- package/lib/util/directoryWriter.js +53 -53
- package/lib/util/getJwtAudienceUrl.d.ts +4 -4
- package/lib/util/getJwtAudienceUrl.js +18 -18
- package/lib/util/internal.d.ts +58 -58
- package/lib/util/internal.js +118 -118
- package/lib/util/jsonXmlTools.d.ts +14 -14
- package/lib/util/jsonXmlTools.js +38 -38
- package/lib/util/mapKeys.d.ts +14 -14
- package/lib/util/mapKeys.js +51 -51
- package/lib/util/sfdc.d.ts +52 -52
- package/lib/util/sfdc.js +85 -85
- package/lib/util/sfdcUrl.d.ts +72 -72
- package/lib/util/sfdcUrl.js +215 -215
- package/lib/util/structuredWriter.d.ts +9 -9
- package/lib/util/structuredWriter.js +2 -2
- package/lib/util/zipWriter.d.ts +16 -16
- package/lib/util/zipWriter.js +67 -67
- package/lib/webOAuthServer.d.ts +156 -156
- package/lib/webOAuthServer.js +388 -388
- package/messages/auth.md +37 -37
- package/messages/config.md +156 -156
- package/messages/connection.md +30 -30
- package/messages/core.json +20 -20
- package/messages/core.md +67 -67
- package/messages/encryption.md +85 -85
- package/messages/envVars.md +303 -303
- package/messages/org.md +63 -63
- package/messages/permissionSetAssignment.md +31 -31
- package/messages/scratchOrgCreate.md +23 -23
- package/messages/scratchOrgErrorCodes.md +115 -115
- package/messages/scratchOrgFeatureDeprecation.md +11 -11
- package/messages/scratchOrgInfoApi.md +15 -15
- package/messages/scratchOrgInfoGenerator.md +23 -23
- package/messages/streaming.md +23 -23
- package/messages/user.md +35 -35
- package/package.json +97 -97
package/lib/schema/validator.js
CHANGED
|
@@ -1,170 +1,170 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (c) 2020, salesforce.com, inc.
|
|
4
|
-
* All rights reserved.
|
|
5
|
-
* Licensed under the BSD 3-Clause license.
|
|
6
|
-
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.SchemaValidator = void 0;
|
|
10
|
-
const path = require("path");
|
|
11
|
-
const fs = require("fs");
|
|
12
|
-
const ajv_1 = require("ajv");
|
|
13
|
-
const kit_1 = require("@salesforce/kit");
|
|
14
|
-
const sfError_1 = require("../sfError");
|
|
15
|
-
/**
|
|
16
|
-
* Loads a JSON schema and performs validations against JSON objects.
|
|
17
|
-
*/
|
|
18
|
-
class SchemaValidator {
|
|
19
|
-
/**
|
|
20
|
-
* Creates a new `SchemaValidator` instance given a logger and path to a schema file.
|
|
21
|
-
*
|
|
22
|
-
* @param logger An {@link Logger} instance on which to base this class's logger.
|
|
23
|
-
* @param schemaPath The path to the schema file to load and use for validation.
|
|
24
|
-
*/
|
|
25
|
-
constructor(logger, schemaPath) {
|
|
26
|
-
this.schemaPath = schemaPath;
|
|
27
|
-
this.logger = logger.child('SchemaValidator');
|
|
28
|
-
this.schemasDir = path.dirname(this.schemaPath);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Loads a JSON schema from the `schemaPath` parameter provided at instantiation.
|
|
32
|
-
*/
|
|
33
|
-
async load() {
|
|
34
|
-
if (!this.schema) {
|
|
35
|
-
this.schema = (0, kit_1.parseJsonMap)(await fs.promises.readFile(this.schemaPath, 'utf8'));
|
|
36
|
-
this.logger.debug(`Schema loaded for ${this.schemaPath}`);
|
|
37
|
-
}
|
|
38
|
-
return this.schema;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Loads a JSON schema from the `schemaPath` parameter provided at instantiation.
|
|
42
|
-
*/
|
|
43
|
-
loadSync() {
|
|
44
|
-
if (!this.schema) {
|
|
45
|
-
this.schema = (0, kit_1.parseJsonMap)(fs.readFileSync(this.schemaPath, 'utf8'));
|
|
46
|
-
this.logger.debug(`Schema loaded for ${this.schemaPath}`);
|
|
47
|
-
}
|
|
48
|
-
return this.schema;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Performs validation of JSON data against the schema located at the `schemaPath` value provided
|
|
52
|
-
* at instantiation.
|
|
53
|
-
*
|
|
54
|
-
* **Throws** *{@link SfError}{ name: 'ValidationSchemaFieldError' }* If there are known validations errors.
|
|
55
|
-
* **Throws** *{@link SfError}{ name: 'ValidationSchemaUnknownError' }* If there are unknown validations errors.
|
|
56
|
-
*
|
|
57
|
-
* @param json A JSON value to validate against this instance's target schema.
|
|
58
|
-
* @returns The validated JSON data.
|
|
59
|
-
*/
|
|
60
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
61
|
-
async validate(json) {
|
|
62
|
-
return this.validateSync(json);
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Performs validation of JSON data against the schema located at the `schemaPath` value provided
|
|
66
|
-
* at instantiation.
|
|
67
|
-
*
|
|
68
|
-
* **Throws** *{@link SfError}{ name: 'ValidationSchemaFieldError' }* If there are known validations errors.
|
|
69
|
-
* **Throws** *{@link SfError}{ name: 'ValidationSchemaUnknownError' }* If there are unknown validations errors.
|
|
70
|
-
*
|
|
71
|
-
* @param json A JSON value to validate against this instance's target schema.
|
|
72
|
-
* @returns The validated JSON data.
|
|
73
|
-
*/
|
|
74
|
-
validateSync(json) {
|
|
75
|
-
const schema = this.loadSync();
|
|
76
|
-
const externalSchemas = this.loadExternalSchemas(schema);
|
|
77
|
-
const ajv = new ajv_1.default({
|
|
78
|
-
allErrors: true,
|
|
79
|
-
schemas: externalSchemas,
|
|
80
|
-
useDefaults: true,
|
|
81
|
-
// TODO: We may someday want to enable strictSchema. This is disabled for now
|
|
82
|
-
// because the CLI team does not "own" the @salesforce/schemas repository.
|
|
83
|
-
// Invalid schema would cause errors wherever SchemaValidator is used.
|
|
84
|
-
strictSchema: false,
|
|
85
|
-
// If we end up getting an npm-shrinkwrap working in the future we could turn this back off.
|
|
86
|
-
// https://github.com/forcedotcom/cli/issues/1493
|
|
87
|
-
validateSchema: false,
|
|
88
|
-
});
|
|
89
|
-
// JSEN to AJV migration note - regarding the following "TODO":
|
|
90
|
-
// I don't think that AJV has a way to throw an error if an additional property exists in the data
|
|
91
|
-
// It does however have a top level option for `removeAdditional` https://ajv.js.org/options.html#removeadditional
|
|
92
|
-
// Regardless, this would be a breaking changes and I do not think it should be implemented.
|
|
93
|
-
// TODO: We should default to throw an error when a property is specified
|
|
94
|
-
// that is not in the schema, but the only option to do this right now is
|
|
95
|
-
// to specify "removeAdditional: false" in every object.
|
|
96
|
-
const validate = ajv.compile(schema);
|
|
97
|
-
// AJV will modify the original json object. We need to make a clone of the
|
|
98
|
-
// json to keep this backwards compatible with JSEN functionality
|
|
99
|
-
const jsonClone = JSON.parse(JSON.stringify(json));
|
|
100
|
-
const valid = validate(jsonClone);
|
|
101
|
-
if (!valid) {
|
|
102
|
-
if (validate.errors) {
|
|
103
|
-
const errors = this.getErrorsText(validate.errors);
|
|
104
|
-
throw new sfError_1.SfError(`Validation errors:\n${errors}`, 'ValidationSchemaFieldError');
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
throw new sfError_1.SfError('Unknown schema validation error', 'ValidationSchemaUnknownError');
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
// We return the cloned JSON because it will have defaults included
|
|
111
|
-
// This is configured with the 'useDefaults' option above.
|
|
112
|
-
return jsonClone;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Loads local, external schemas from URIs in the same directory as the local schema file.
|
|
116
|
-
* Does not support loading from remote URIs.
|
|
117
|
-
* Returns a map of external schema local URIs to loaded schema JSON objects.
|
|
118
|
-
*
|
|
119
|
-
* @param schema The main schema to look up references ($ref) in.
|
|
120
|
-
* @returns An array of found referenced schemas.
|
|
121
|
-
*/
|
|
122
|
-
loadExternalSchemas(schema) {
|
|
123
|
-
return (0, kit_1.getJsonValuesByName)(schema, '$ref')
|
|
124
|
-
.map((ref) => ref && RegExp(/([\w\.]+)#/).exec(ref)) // eslint-disable-line no-useless-escape
|
|
125
|
-
.map((match) => match?.[1])
|
|
126
|
-
.filter((uri) => !!uri)
|
|
127
|
-
.map((uri) => this.loadExternalSchema(uri));
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Load another schema relative to the primary schema when referenced. Only supports local schema URIs.
|
|
131
|
-
*
|
|
132
|
-
* @param uri The first segment of the $ref schema.
|
|
133
|
-
*/
|
|
134
|
-
loadExternalSchema(uri) {
|
|
135
|
-
const schemaPath = path.join(this.schemasDir, `${uri}.json`);
|
|
136
|
-
try {
|
|
137
|
-
return (0, kit_1.parseJsonMap)(fs.readFileSync(schemaPath, 'utf8'));
|
|
138
|
-
}
|
|
139
|
-
catch (err) {
|
|
140
|
-
if (err.code === 'ENOENT') {
|
|
141
|
-
throw new sfError_1.SfError(`Schema not found: ${schemaPath}`, 'ValidationSchemaNotFound');
|
|
142
|
-
}
|
|
143
|
-
throw err;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Get a string representation of the schema validation errors.
|
|
148
|
-
* Adds additional (human friendly) information to certain errors.
|
|
149
|
-
*
|
|
150
|
-
* @param errors An array of AJV (DefinedError) objects.
|
|
151
|
-
*/
|
|
152
|
-
// eslint-disable-next-line class-methods-use-this
|
|
153
|
-
getErrorsText(errors) {
|
|
154
|
-
return errors
|
|
155
|
-
.map((error) => {
|
|
156
|
-
const msg = `${error.schemaPath}: ${error.message}`;
|
|
157
|
-
switch (error.keyword) {
|
|
158
|
-
case 'additionalProperties':
|
|
159
|
-
return `${msg} '${error.params.additionalProperty}'`;
|
|
160
|
-
case 'enum':
|
|
161
|
-
return `${msg} '${error.params.allowedValues.join(', ')}'`;
|
|
162
|
-
default:
|
|
163
|
-
return msg;
|
|
164
|
-
}
|
|
165
|
-
})
|
|
166
|
-
.join('\n');
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
exports.SchemaValidator = SchemaValidator;
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2020, salesforce.com, inc.
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
* Licensed under the BSD 3-Clause license.
|
|
6
|
+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.SchemaValidator = void 0;
|
|
10
|
+
const path = require("path");
|
|
11
|
+
const fs = require("fs");
|
|
12
|
+
const ajv_1 = require("ajv");
|
|
13
|
+
const kit_1 = require("@salesforce/kit");
|
|
14
|
+
const sfError_1 = require("../sfError");
|
|
15
|
+
/**
|
|
16
|
+
* Loads a JSON schema and performs validations against JSON objects.
|
|
17
|
+
*/
|
|
18
|
+
class SchemaValidator {
|
|
19
|
+
/**
|
|
20
|
+
* Creates a new `SchemaValidator` instance given a logger and path to a schema file.
|
|
21
|
+
*
|
|
22
|
+
* @param logger An {@link Logger} instance on which to base this class's logger.
|
|
23
|
+
* @param schemaPath The path to the schema file to load and use for validation.
|
|
24
|
+
*/
|
|
25
|
+
constructor(logger, schemaPath) {
|
|
26
|
+
this.schemaPath = schemaPath;
|
|
27
|
+
this.logger = logger.child('SchemaValidator');
|
|
28
|
+
this.schemasDir = path.dirname(this.schemaPath);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Loads a JSON schema from the `schemaPath` parameter provided at instantiation.
|
|
32
|
+
*/
|
|
33
|
+
async load() {
|
|
34
|
+
if (!this.schema) {
|
|
35
|
+
this.schema = (0, kit_1.parseJsonMap)(await fs.promises.readFile(this.schemaPath, 'utf8'));
|
|
36
|
+
this.logger.debug(`Schema loaded for ${this.schemaPath}`);
|
|
37
|
+
}
|
|
38
|
+
return this.schema;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Loads a JSON schema from the `schemaPath` parameter provided at instantiation.
|
|
42
|
+
*/
|
|
43
|
+
loadSync() {
|
|
44
|
+
if (!this.schema) {
|
|
45
|
+
this.schema = (0, kit_1.parseJsonMap)(fs.readFileSync(this.schemaPath, 'utf8'));
|
|
46
|
+
this.logger.debug(`Schema loaded for ${this.schemaPath}`);
|
|
47
|
+
}
|
|
48
|
+
return this.schema;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Performs validation of JSON data against the schema located at the `schemaPath` value provided
|
|
52
|
+
* at instantiation.
|
|
53
|
+
*
|
|
54
|
+
* **Throws** *{@link SfError}{ name: 'ValidationSchemaFieldError' }* If there are known validations errors.
|
|
55
|
+
* **Throws** *{@link SfError}{ name: 'ValidationSchemaUnknownError' }* If there are unknown validations errors.
|
|
56
|
+
*
|
|
57
|
+
* @param json A JSON value to validate against this instance's target schema.
|
|
58
|
+
* @returns The validated JSON data.
|
|
59
|
+
*/
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
61
|
+
async validate(json) {
|
|
62
|
+
return this.validateSync(json);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Performs validation of JSON data against the schema located at the `schemaPath` value provided
|
|
66
|
+
* at instantiation.
|
|
67
|
+
*
|
|
68
|
+
* **Throws** *{@link SfError}{ name: 'ValidationSchemaFieldError' }* If there are known validations errors.
|
|
69
|
+
* **Throws** *{@link SfError}{ name: 'ValidationSchemaUnknownError' }* If there are unknown validations errors.
|
|
70
|
+
*
|
|
71
|
+
* @param json A JSON value to validate against this instance's target schema.
|
|
72
|
+
* @returns The validated JSON data.
|
|
73
|
+
*/
|
|
74
|
+
validateSync(json) {
|
|
75
|
+
const schema = this.loadSync();
|
|
76
|
+
const externalSchemas = this.loadExternalSchemas(schema);
|
|
77
|
+
const ajv = new ajv_1.default({
|
|
78
|
+
allErrors: true,
|
|
79
|
+
schemas: externalSchemas,
|
|
80
|
+
useDefaults: true,
|
|
81
|
+
// TODO: We may someday want to enable strictSchema. This is disabled for now
|
|
82
|
+
// because the CLI team does not "own" the @salesforce/schemas repository.
|
|
83
|
+
// Invalid schema would cause errors wherever SchemaValidator is used.
|
|
84
|
+
strictSchema: false,
|
|
85
|
+
// If we end up getting an npm-shrinkwrap working in the future we could turn this back off.
|
|
86
|
+
// https://github.com/forcedotcom/cli/issues/1493
|
|
87
|
+
validateSchema: false,
|
|
88
|
+
});
|
|
89
|
+
// JSEN to AJV migration note - regarding the following "TODO":
|
|
90
|
+
// I don't think that AJV has a way to throw an error if an additional property exists in the data
|
|
91
|
+
// It does however have a top level option for `removeAdditional` https://ajv.js.org/options.html#removeadditional
|
|
92
|
+
// Regardless, this would be a breaking changes and I do not think it should be implemented.
|
|
93
|
+
// TODO: We should default to throw an error when a property is specified
|
|
94
|
+
// that is not in the schema, but the only option to do this right now is
|
|
95
|
+
// to specify "removeAdditional: false" in every object.
|
|
96
|
+
const validate = ajv.compile(schema);
|
|
97
|
+
// AJV will modify the original json object. We need to make a clone of the
|
|
98
|
+
// json to keep this backwards compatible with JSEN functionality
|
|
99
|
+
const jsonClone = JSON.parse(JSON.stringify(json));
|
|
100
|
+
const valid = validate(jsonClone);
|
|
101
|
+
if (!valid) {
|
|
102
|
+
if (validate.errors) {
|
|
103
|
+
const errors = this.getErrorsText(validate.errors);
|
|
104
|
+
throw new sfError_1.SfError(`Validation errors:\n${errors}`, 'ValidationSchemaFieldError');
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
throw new sfError_1.SfError('Unknown schema validation error', 'ValidationSchemaUnknownError');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// We return the cloned JSON because it will have defaults included
|
|
111
|
+
// This is configured with the 'useDefaults' option above.
|
|
112
|
+
return jsonClone;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Loads local, external schemas from URIs in the same directory as the local schema file.
|
|
116
|
+
* Does not support loading from remote URIs.
|
|
117
|
+
* Returns a map of external schema local URIs to loaded schema JSON objects.
|
|
118
|
+
*
|
|
119
|
+
* @param schema The main schema to look up references ($ref) in.
|
|
120
|
+
* @returns An array of found referenced schemas.
|
|
121
|
+
*/
|
|
122
|
+
loadExternalSchemas(schema) {
|
|
123
|
+
return (0, kit_1.getJsonValuesByName)(schema, '$ref')
|
|
124
|
+
.map((ref) => ref && RegExp(/([\w\.]+)#/).exec(ref)) // eslint-disable-line no-useless-escape
|
|
125
|
+
.map((match) => match?.[1])
|
|
126
|
+
.filter((uri) => !!uri)
|
|
127
|
+
.map((uri) => this.loadExternalSchema(uri));
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Load another schema relative to the primary schema when referenced. Only supports local schema URIs.
|
|
131
|
+
*
|
|
132
|
+
* @param uri The first segment of the $ref schema.
|
|
133
|
+
*/
|
|
134
|
+
loadExternalSchema(uri) {
|
|
135
|
+
const schemaPath = path.join(this.schemasDir, `${uri}.json`);
|
|
136
|
+
try {
|
|
137
|
+
return (0, kit_1.parseJsonMap)(fs.readFileSync(schemaPath, 'utf8'));
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
if (err.code === 'ENOENT') {
|
|
141
|
+
throw new sfError_1.SfError(`Schema not found: ${schemaPath}`, 'ValidationSchemaNotFound');
|
|
142
|
+
}
|
|
143
|
+
throw err;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get a string representation of the schema validation errors.
|
|
148
|
+
* Adds additional (human friendly) information to certain errors.
|
|
149
|
+
*
|
|
150
|
+
* @param errors An array of AJV (DefinedError) objects.
|
|
151
|
+
*/
|
|
152
|
+
// eslint-disable-next-line class-methods-use-this
|
|
153
|
+
getErrorsText(errors) {
|
|
154
|
+
return errors
|
|
155
|
+
.map((error) => {
|
|
156
|
+
const msg = `${error.schemaPath}: ${error.message}`;
|
|
157
|
+
switch (error.keyword) {
|
|
158
|
+
case 'additionalProperties':
|
|
159
|
+
return `${msg} '${error.params.additionalProperty}'`;
|
|
160
|
+
case 'enum':
|
|
161
|
+
return `${msg} '${error.params.allowedValues.join(', ')}'`;
|
|
162
|
+
default:
|
|
163
|
+
return msg;
|
|
164
|
+
}
|
|
165
|
+
})
|
|
166
|
+
.join('\n');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.SchemaValidator = SchemaValidator;
|
|
170
170
|
//# sourceMappingURL=validator.js.map
|
package/lib/sfError.d.ts
CHANGED
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
import { NamedError } from '@salesforce/kit';
|
|
2
|
-
import { JsonMap } from '@salesforce/ts-types';
|
|
3
|
-
/**
|
|
4
|
-
* A generalized sfdx error which also contains an action. The action is used in the
|
|
5
|
-
* CLI to help guide users past the error.
|
|
6
|
-
*
|
|
7
|
-
* To throw an error in a synchronous function you must either pass the error message and actions
|
|
8
|
-
* directly to the constructor, e.g.
|
|
9
|
-
*
|
|
10
|
-
* ```
|
|
11
|
-
* // To load a message bundle (Note that __dirname should contain a messages folder)
|
|
12
|
-
* Messages.importMessagesDirectory(__dirname);
|
|
13
|
-
* const messages = Messages.load('myPackageName', 'myBundleName');
|
|
14
|
-
*
|
|
15
|
-
* // To throw a non-bundle based error:
|
|
16
|
-
* throw new SfError(message.getMessage('myError'), 'MyErrorName');
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
export declare class SfError extends NamedError {
|
|
20
|
-
#private;
|
|
21
|
-
/**
|
|
22
|
-
* Action messages. Hints to the users regarding what can be done to fix related issues.
|
|
23
|
-
*/
|
|
24
|
-
actions?: string[];
|
|
25
|
-
/**
|
|
26
|
-
* SfdxCommand can return this process exit code.
|
|
27
|
-
*/
|
|
28
|
-
exitCode: number;
|
|
29
|
-
/**
|
|
30
|
-
* The related context for this error.
|
|
31
|
-
*/
|
|
32
|
-
context?: string;
|
|
33
|
-
data?: unknown;
|
|
34
|
-
/**
|
|
35
|
-
* Create an SfError.
|
|
36
|
-
*
|
|
37
|
-
* @param message The error message.
|
|
38
|
-
* @param name The error name. Defaults to 'SfError'.
|
|
39
|
-
* @param actions The action message(s).
|
|
40
|
-
* @param exitCodeOrCause The exit code which will be used by SfdxCommand or he underlying error that caused this error to be raised.
|
|
41
|
-
* @param cause The underlying error that caused this error to be raised.
|
|
42
|
-
*/
|
|
43
|
-
constructor(message: string, name?: string, actions?: string[], exitCodeOrCause?: number | Error, cause?: Error);
|
|
44
|
-
get code(): string | undefined | any;
|
|
45
|
-
set code(code: string);
|
|
46
|
-
/**
|
|
47
|
-
* Convert an Error to an SfError.
|
|
48
|
-
*
|
|
49
|
-
* @param err The error to convert.
|
|
50
|
-
*/
|
|
51
|
-
static wrap(err: Error | string): SfError;
|
|
52
|
-
/**
|
|
53
|
-
* Sets the context of the error. For convenience `this` object is returned.
|
|
54
|
-
*
|
|
55
|
-
* @param context The command name.
|
|
56
|
-
*/
|
|
57
|
-
setContext(context: string): SfError;
|
|
58
|
-
/**
|
|
59
|
-
* An additional payload for the error. For convenience `this` object is returned.
|
|
60
|
-
*
|
|
61
|
-
* @param data The payload data.
|
|
62
|
-
*/
|
|
63
|
-
setData(data: unknown): SfError;
|
|
64
|
-
/**
|
|
65
|
-
* Convert an {@link SfError} state to an object. Returns a plain object representing the state of this error.
|
|
66
|
-
*/
|
|
67
|
-
toObject(): JsonMap;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* @deprecated use SfError instead
|
|
71
|
-
*/
|
|
72
|
-
export declare class SfdxError extends SfError {
|
|
73
|
-
}
|
|
1
|
+
import { NamedError } from '@salesforce/kit';
|
|
2
|
+
import { JsonMap } from '@salesforce/ts-types';
|
|
3
|
+
/**
|
|
4
|
+
* A generalized sfdx error which also contains an action. The action is used in the
|
|
5
|
+
* CLI to help guide users past the error.
|
|
6
|
+
*
|
|
7
|
+
* To throw an error in a synchronous function you must either pass the error message and actions
|
|
8
|
+
* directly to the constructor, e.g.
|
|
9
|
+
*
|
|
10
|
+
* ```
|
|
11
|
+
* // To load a message bundle (Note that __dirname should contain a messages folder)
|
|
12
|
+
* Messages.importMessagesDirectory(__dirname);
|
|
13
|
+
* const messages = Messages.load('myPackageName', 'myBundleName');
|
|
14
|
+
*
|
|
15
|
+
* // To throw a non-bundle based error:
|
|
16
|
+
* throw new SfError(message.getMessage('myError'), 'MyErrorName');
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class SfError extends NamedError {
|
|
20
|
+
#private;
|
|
21
|
+
/**
|
|
22
|
+
* Action messages. Hints to the users regarding what can be done to fix related issues.
|
|
23
|
+
*/
|
|
24
|
+
actions?: string[];
|
|
25
|
+
/**
|
|
26
|
+
* SfdxCommand can return this process exit code.
|
|
27
|
+
*/
|
|
28
|
+
exitCode: number;
|
|
29
|
+
/**
|
|
30
|
+
* The related context for this error.
|
|
31
|
+
*/
|
|
32
|
+
context?: string;
|
|
33
|
+
data?: unknown;
|
|
34
|
+
/**
|
|
35
|
+
* Create an SfError.
|
|
36
|
+
*
|
|
37
|
+
* @param message The error message.
|
|
38
|
+
* @param name The error name. Defaults to 'SfError'.
|
|
39
|
+
* @param actions The action message(s).
|
|
40
|
+
* @param exitCodeOrCause The exit code which will be used by SfdxCommand or he underlying error that caused this error to be raised.
|
|
41
|
+
* @param cause The underlying error that caused this error to be raised.
|
|
42
|
+
*/
|
|
43
|
+
constructor(message: string, name?: string, actions?: string[], exitCodeOrCause?: number | Error, cause?: Error);
|
|
44
|
+
get code(): string | undefined | any;
|
|
45
|
+
set code(code: string);
|
|
46
|
+
/**
|
|
47
|
+
* Convert an Error to an SfError.
|
|
48
|
+
*
|
|
49
|
+
* @param err The error to convert.
|
|
50
|
+
*/
|
|
51
|
+
static wrap(err: Error | string): SfError;
|
|
52
|
+
/**
|
|
53
|
+
* Sets the context of the error. For convenience `this` object is returned.
|
|
54
|
+
*
|
|
55
|
+
* @param context The command name.
|
|
56
|
+
*/
|
|
57
|
+
setContext(context: string): SfError;
|
|
58
|
+
/**
|
|
59
|
+
* An additional payload for the error. For convenience `this` object is returned.
|
|
60
|
+
*
|
|
61
|
+
* @param data The payload data.
|
|
62
|
+
*/
|
|
63
|
+
setData(data: unknown): SfError;
|
|
64
|
+
/**
|
|
65
|
+
* Convert an {@link SfError} state to an object. Returns a plain object representing the state of this error.
|
|
66
|
+
*/
|
|
67
|
+
toObject(): JsonMap;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @deprecated use SfError instead
|
|
71
|
+
*/
|
|
72
|
+
export declare class SfdxError extends SfError {
|
|
73
|
+
}
|