@pulumix/core 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +34 -79
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/types/manifest.d.ts +0 -74
- package/dist/types/manifest.d.ts.map +1 -1
- package/dist/types/service.d.ts +1 -5
- package/dist/types/service.d.ts.map +1 -1
- package/dist/validation/create-validator.d.ts +8 -0
- package/dist/validation/create-validator.d.ts.map +1 -0
- package/dist/validation/create-validator.js +122 -0
- package/dist/validation/create-validator.js.map +1 -0
- package/dist/validation/manifest.d.ts +4 -4
- package/dist/validation/manifest.d.ts.map +1 -1
- package/dist/validation/manifest.js +5 -111
- package/dist/validation/manifest.js.map +1 -1
- package/dist/validation/project.d.ts +4 -4
- package/dist/validation/project.d.ts.map +1 -1
- package/dist/validation/project.js +5 -102
- package/dist/validation/project.js.map +1 -1
- package/package.json +1 -1
- package/src/schemas/service-manifest.schema.json +9 -282
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.createValidator = void 0;
|
|
40
|
+
const ajv_1 = __importDefault(require("ajv"));
|
|
41
|
+
const ajv_formats_1 = __importDefault(require("ajv-formats"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const Either_1 = require("purify-ts/Either");
|
|
45
|
+
const errors_1 = require("../types/errors");
|
|
46
|
+
const formatValidationErrors = (errors, prefix) => {
|
|
47
|
+
const messages = [`${prefix} validation failed:`];
|
|
48
|
+
for (const error of errors) {
|
|
49
|
+
const fieldPath = error.instancePath || 'root';
|
|
50
|
+
const field = fieldPath.replace(/^\//, '').replace(/\//g, '.');
|
|
51
|
+
switch (error.keyword) {
|
|
52
|
+
case 'required':
|
|
53
|
+
messages.push(` - Missing required field: ${error.params.missingProperty}`);
|
|
54
|
+
break;
|
|
55
|
+
case 'type':
|
|
56
|
+
messages.push(` - Field '${field}' should be ${error.params.type}`);
|
|
57
|
+
break;
|
|
58
|
+
case 'pattern':
|
|
59
|
+
messages.push(` - Field '${field}' does not match required pattern`);
|
|
60
|
+
if (field === 'metadata.name') {
|
|
61
|
+
messages.push(` Must be lowercase alphanumeric with hyphens: [a-z0-9-]+`);
|
|
62
|
+
}
|
|
63
|
+
if (field === 'metadata.version') {
|
|
64
|
+
messages.push(` Must be valid semver: 1.2.3 or 1.2.3-beta.1`);
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
case 'format':
|
|
68
|
+
messages.push(` - Field '${field}' should be valid ${error.params.format}`);
|
|
69
|
+
break;
|
|
70
|
+
case 'additionalProperties':
|
|
71
|
+
messages.push(` - Unknown field: ${error.params.additionalProperty}`);
|
|
72
|
+
break;
|
|
73
|
+
case 'enum':
|
|
74
|
+
messages.push(` - Field '${field}' must be one of: ${error.params.allowedValues.join(', ')}`);
|
|
75
|
+
break;
|
|
76
|
+
case 'const':
|
|
77
|
+
messages.push(` - Field '${field}' must be '${error.params.allowedValue}'`);
|
|
78
|
+
break;
|
|
79
|
+
case 'oneOf':
|
|
80
|
+
messages.push(` - Field '${field}' does not match any valid type`);
|
|
81
|
+
break;
|
|
82
|
+
case 'minimum':
|
|
83
|
+
case 'maximum':
|
|
84
|
+
messages.push(` - Field '${field}' is out of range`);
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
messages.push(` - Validation error at ${field}: ${error.message}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return messages.join('\n');
|
|
91
|
+
};
|
|
92
|
+
const loadSchema = (schemaFileName) => {
|
|
93
|
+
let schemaPath = path.join(__dirname, `../schemas/${schemaFileName}`);
|
|
94
|
+
if (!fs.existsSync(schemaPath)) {
|
|
95
|
+
schemaPath = path.join(__dirname, `../../src/schemas/${schemaFileName}`);
|
|
96
|
+
}
|
|
97
|
+
return JSON.parse(fs.readFileSync(schemaPath, 'utf-8'));
|
|
98
|
+
};
|
|
99
|
+
const createValidator = (schemaFileName, errorPrefix) => {
|
|
100
|
+
const ajv = new ajv_1.default({ allErrors: true, verbose: true, strict: false, $data: true });
|
|
101
|
+
(0, ajv_formats_1.default)(ajv);
|
|
102
|
+
const schema = loadSchema(schemaFileName);
|
|
103
|
+
const compiledValidator = ajv.compile(schema);
|
|
104
|
+
const validate = (data, configPath) => {
|
|
105
|
+
const isValid = compiledValidator(data);
|
|
106
|
+
if (!isValid && compiledValidator.errors) {
|
|
107
|
+
const errorMessage = formatValidationErrors(compiledValidator.errors, errorPrefix);
|
|
108
|
+
return (0, Either_1.Left)((0, errors_1.createConfigError)('InvalidConfigFormat', errorMessage, undefined, undefined, { configPath, validationErrors: compiledValidator.errors }));
|
|
109
|
+
}
|
|
110
|
+
return (0, Either_1.Right)(data);
|
|
111
|
+
};
|
|
112
|
+
const validateOrThrow = (data, configPath) => {
|
|
113
|
+
const result = validate(data, configPath);
|
|
114
|
+
if (result.isLeft()) {
|
|
115
|
+
throw result.extract();
|
|
116
|
+
}
|
|
117
|
+
return result.unsafeCoerce();
|
|
118
|
+
};
|
|
119
|
+
return { validate, validateOrThrow };
|
|
120
|
+
};
|
|
121
|
+
exports.createValidator = createValidator;
|
|
122
|
+
//# sourceMappingURL=create-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-validator.js","sourceRoot":"","sources":["../../src/validation/create-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DeployError } from '../types/errors';
|
|
2
|
-
import { Either } from 'purify-ts/Either';
|
|
3
|
-
export declare
|
|
4
|
-
export declare
|
|
1
|
+
import type { DeployError } from '../types/errors';
|
|
2
|
+
import type { Either } from 'purify-ts/Either';
|
|
3
|
+
export declare const validateServiceManifest: (manifest: unknown, configPath: string) => Either<DeployError, Record<string, unknown>>;
|
|
4
|
+
export declare const validateServiceManifestOrThrow: (manifest: unknown, configPath: string) => Record<string, unknown>;
|
|
5
5
|
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/validation/manifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/validation/manifest.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AA6B9C,eAAO,MAAM,uBAAuB,EAAE,CACpC,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,MAAM,KACf,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAsB,CAAA;AAsBtE,eAAO,MAAM,8BAA8B,EAAE,CAC3C,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,MAAM,KACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAA6B,CAAA"}
|
|
@@ -1,114 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.validateServiceManifest =
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const path = __importStar(require("path"));
|
|
45
|
-
const errors_1 = require("../types/errors");
|
|
46
|
-
const Either_1 = require("purify-ts/Either");
|
|
47
|
-
let schemaPath = path.join(__dirname, '../schemas/service-manifest.schema.json');
|
|
48
|
-
if (!fs.existsSync(schemaPath)) {
|
|
49
|
-
schemaPath = path.join(__dirname, '../../src/schemas/service-manifest.schema.json');
|
|
50
|
-
}
|
|
51
|
-
const schema = JSON.parse(fs.readFileSync(schemaPath, 'utf-8'));
|
|
52
|
-
const ajv = new ajv_1.default({
|
|
53
|
-
allErrors: true,
|
|
54
|
-
verbose: true,
|
|
55
|
-
strict: false,
|
|
56
|
-
$data: true
|
|
57
|
-
});
|
|
58
|
-
(0, ajv_formats_1.default)(ajv);
|
|
59
|
-
const validateManifest = ajv.compile(schema);
|
|
60
|
-
function formatValidationErrors(errors) {
|
|
61
|
-
const messages = ['Service manifest validation failed:'];
|
|
62
|
-
for (const error of errors) {
|
|
63
|
-
const path = error.instancePath || 'root';
|
|
64
|
-
const field = path.replace(/^\//, '').replace(/\//g, '.');
|
|
65
|
-
switch (error.keyword) {
|
|
66
|
-
case 'required':
|
|
67
|
-
messages.push(` • Missing required field: ${error.params.missingProperty}`);
|
|
68
|
-
break;
|
|
69
|
-
case 'type':
|
|
70
|
-
messages.push(` • Field '${field}' should be ${error.params.type}`);
|
|
71
|
-
break;
|
|
72
|
-
case 'pattern':
|
|
73
|
-
messages.push(` • Field '${field}' does not match required pattern`);
|
|
74
|
-
if (field === 'metadata.name') {
|
|
75
|
-
messages.push(` Must be lowercase alphanumeric with hyphens: [a-z0-9-]+`);
|
|
76
|
-
}
|
|
77
|
-
if (field === 'metadata.version') {
|
|
78
|
-
messages.push(` Must be valid semver: 1.2.3 or 1.2.3-beta.1`);
|
|
79
|
-
}
|
|
80
|
-
break;
|
|
81
|
-
case 'format':
|
|
82
|
-
messages.push(` • Field '${field}' should be valid ${error.params.format}`);
|
|
83
|
-
break;
|
|
84
|
-
case 'additionalProperties':
|
|
85
|
-
messages.push(` • Unknown field: ${error.params.additionalProperty}`);
|
|
86
|
-
break;
|
|
87
|
-
case 'enum':
|
|
88
|
-
messages.push(` • Field '${field}' must be one of: ${error.params.allowedValues.join(', ')}`);
|
|
89
|
-
break;
|
|
90
|
-
case 'minimum':
|
|
91
|
-
case 'maximum':
|
|
92
|
-
messages.push(` • Field '${field}' is out of range`);
|
|
93
|
-
break;
|
|
94
|
-
default:
|
|
95
|
-
messages.push(` • Validation error at ${field}: ${error.message}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return messages.join('\n');
|
|
99
|
-
}
|
|
100
|
-
function validateServiceManifest(manifest, configPath) {
|
|
101
|
-
const valid = validateManifest(manifest);
|
|
102
|
-
if (!valid && validateManifest.errors) {
|
|
103
|
-
const errorMessage = formatValidationErrors(validateManifest.errors);
|
|
104
|
-
return (0, Either_1.Left)((0, errors_1.createConfigError)('InvalidConfigFormat', errorMessage, undefined, undefined, { configPath, validationErrors: validateManifest.errors }));
|
|
105
|
-
}
|
|
106
|
-
return (0, Either_1.Right)(manifest);
|
|
107
|
-
}
|
|
108
|
-
function validateServiceManifestOrThrow(manifest, configPath) {
|
|
109
|
-
const result = validateServiceManifest(manifest, configPath);
|
|
110
|
-
if (result.isLeft()) {
|
|
111
|
-
throw result.extract();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
3
|
+
exports.validateServiceManifestOrThrow = exports.validateServiceManifest = void 0;
|
|
4
|
+
const create_validator_1 = require("./create-validator");
|
|
5
|
+
const validator = (0, create_validator_1.createValidator)('service-manifest.schema.json', 'Service manifest');
|
|
6
|
+
exports.validateServiceManifest = validator.validate;
|
|
7
|
+
exports.validateServiceManifestOrThrow = validator.validateOrThrow;
|
|
114
8
|
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/validation/manifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/validation/manifest.ts"],"names":[],"mappings":";;;AASA,yDAAoD;AAKpD,MAAM,SAAS,GAAG,IAAA,kCAAe,EAC/B,8BAA8B,EAC9B,kBAAkB,CACnB,CAAA;AAuBY,QAAA,uBAAuB,GAGgB,SAAS,CAAC,QAAQ,CAAA;AAsBzD,QAAA,8BAA8B,GAGZ,SAAS,CAAC,eAAe,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DeployError } from '../types/errors';
|
|
2
|
-
import { Either } from 'purify-ts/Either';
|
|
1
|
+
import type { DeployError } from '../types/errors';
|
|
2
|
+
import type { Either } from 'purify-ts/Either';
|
|
3
3
|
import type { ProjectConfig } from '../types/manifest';
|
|
4
|
-
export declare
|
|
5
|
-
export declare
|
|
4
|
+
export declare const validateProjectConfig: (config: unknown, configPath: string) => Either<DeployError, ProjectConfig>;
|
|
5
|
+
export declare const validateProjectConfigOrThrow: (config: unknown, configPath: string) => ProjectConfig;
|
|
6
6
|
//# sourceMappingURL=project.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/validation/project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/validation/project.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AA0BtD,eAAO,MAAM,qBAAqB,EAAE,CAClC,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,KACf,MAAM,CAAC,WAAW,EAAE,aAAa,CAAsB,CAAA;AAS5D,eAAO,MAAM,4BAA4B,EAAE,CACzC,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,KACf,aAAyC,CAAA"}
|
|
@@ -1,105 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.validateProjectConfig =
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const path = __importStar(require("path"));
|
|
45
|
-
const errors_1 = require("../types/errors");
|
|
46
|
-
const Either_1 = require("purify-ts/Either");
|
|
47
|
-
let schemaPath = path.join(__dirname, '../schemas/project-config.schema.json');
|
|
48
|
-
if (!fs.existsSync(schemaPath)) {
|
|
49
|
-
schemaPath = path.join(__dirname, '../../src/schemas/project-config.schema.json');
|
|
50
|
-
}
|
|
51
|
-
const schema = JSON.parse(fs.readFileSync(schemaPath, 'utf-8'));
|
|
52
|
-
const ajv = new ajv_1.default({
|
|
53
|
-
allErrors: true,
|
|
54
|
-
verbose: true,
|
|
55
|
-
strict: false,
|
|
56
|
-
$data: true
|
|
57
|
-
});
|
|
58
|
-
(0, ajv_formats_1.default)(ajv);
|
|
59
|
-
const validateConfig = ajv.compile(schema);
|
|
60
|
-
function formatValidationErrors(errors) {
|
|
61
|
-
const messages = ['Project configuration validation failed:'];
|
|
62
|
-
for (const error of errors) {
|
|
63
|
-
const path = error.instancePath || 'root';
|
|
64
|
-
const field = path.replace(/^\//, '').replace(/\//g, '.');
|
|
65
|
-
switch (error.keyword) {
|
|
66
|
-
case 'required':
|
|
67
|
-
messages.push(` - Missing required field: ${error.params.missingProperty}`);
|
|
68
|
-
break;
|
|
69
|
-
case 'type':
|
|
70
|
-
messages.push(` - Field '${field}' should be ${error.params.type}`);
|
|
71
|
-
break;
|
|
72
|
-
case 'enum':
|
|
73
|
-
messages.push(` - Field '${field}' must be one of: ${error.params.allowedValues.join(', ')}`);
|
|
74
|
-
break;
|
|
75
|
-
case 'const':
|
|
76
|
-
messages.push(` - Field '${field}' must be '${error.params.allowedValue}'`);
|
|
77
|
-
break;
|
|
78
|
-
case 'additionalProperties':
|
|
79
|
-
messages.push(` - Unknown field: ${field}.${error.params.additionalProperty}`);
|
|
80
|
-
break;
|
|
81
|
-
case 'oneOf':
|
|
82
|
-
messages.push(` - Field '${field}' does not match any valid backend type`);
|
|
83
|
-
break;
|
|
84
|
-
default:
|
|
85
|
-
messages.push(` - Validation error at ${field}: ${error.message}`);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return messages.join('\n');
|
|
89
|
-
}
|
|
90
|
-
function validateProjectConfig(config, configPath) {
|
|
91
|
-
const valid = validateConfig(config);
|
|
92
|
-
if (!valid && validateConfig.errors) {
|
|
93
|
-
const errorMessage = formatValidationErrors(validateConfig.errors);
|
|
94
|
-
return (0, Either_1.Left)((0, errors_1.createConfigError)('InvalidConfigFormat', errorMessage, undefined, undefined, { configPath, validationErrors: validateConfig.errors }));
|
|
95
|
-
}
|
|
96
|
-
return (0, Either_1.Right)(config);
|
|
97
|
-
}
|
|
98
|
-
function validateProjectConfigOrThrow(config, configPath) {
|
|
99
|
-
const result = validateProjectConfig(config, configPath);
|
|
100
|
-
if (result.isLeft()) {
|
|
101
|
-
throw result.extract();
|
|
102
|
-
}
|
|
103
|
-
return result.unsafeCoerce();
|
|
104
|
-
}
|
|
3
|
+
exports.validateProjectConfigOrThrow = exports.validateProjectConfig = void 0;
|
|
4
|
+
const create_validator_1 = require("./create-validator");
|
|
5
|
+
const validator = (0, create_validator_1.createValidator)('project-config.schema.json', 'Project configuration');
|
|
6
|
+
exports.validateProjectConfig = validator.validate;
|
|
7
|
+
exports.validateProjectConfigOrThrow = validator.validateOrThrow;
|
|
105
8
|
//# sourceMappingURL=project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/validation/project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/validation/project.ts"],"names":[],"mappings":";;;AASA,yDAAoD;AAMpD,MAAM,SAAS,GAAG,IAAA,kCAAe,EAC/B,4BAA4B,EAC5B,uBAAuB,CACxB,CAAA;AAoBY,QAAA,qBAAqB,GAGQ,SAAS,CAAC,QAAQ,CAAA;AAS/C,QAAA,4BAA4B,GAGpB,SAAS,CAAC,eAAe,CAAA"}
|