@sprucelabs/schema 29.4.60 → 30.0.1
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/build/.spruce/schemas/fields/fieldClassMap.d.ts +2 -2
- package/build/.spruce/schemas/fields/fieldClassMap.js +3 -3
- package/build/AbstractEntity.js +1 -0
- package/build/AbstractSchemaTest.js +1 -0
- package/build/DynamicSchemaEntityImplementation.d.ts +1 -1
- package/build/DynamicSchemaEntityImplementation.js +4 -3
- package/build/StaticSchemaEntityImpl.js +23 -13
- package/build/errors/SpruceError.js +3 -4
- package/build/errors/ValidateErrorMessageFormatter.js +11 -8
- package/build/esm/.spruce/schemas/fields/fieldClassMap.d.ts +2 -2
- package/build/esm/.spruce/schemas/fields/fieldClassMap.js +3 -3
- package/build/esm/DynamicSchemaEntityImplementation.d.ts +1 -1
- package/build/esm/StaticSchemaEntityImpl.js +6 -2
- package/build/esm/errors/ValidateErrorMessageFormatter.js +5 -1
- package/build/esm/fields/AbstractField.d.ts +1 -1
- package/build/esm/fields/AddressField.d.ts +1 -1
- package/build/esm/fields/AddressField.js +3 -4
- package/build/esm/fields/BooleanField.d.ts +1 -1
- package/build/esm/fields/BooleanField.js +3 -4
- package/build/esm/fields/DateField.d.ts +1 -1
- package/build/esm/fields/DateField.js +3 -4
- package/build/esm/fields/DateTimeField.d.ts +1 -1
- package/build/esm/fields/DateTimeField.js +3 -4
- package/build/esm/fields/DirectoryField.d.ts +1 -1
- package/build/esm/fields/DirectoryField.js +9 -7
- package/build/esm/fields/DurationField.d.ts +1 -1
- package/build/esm/fields/DurationField.js +5 -5
- package/build/esm/fields/EmailField.d.ts +1 -1
- package/build/esm/fields/EmailField.js +3 -4
- package/build/esm/fields/FileField.d.ts +1 -1
- package/build/esm/fields/FileField.js +3 -4
- package/build/esm/fields/IdField.d.ts +1 -1
- package/build/esm/fields/IdField.js +3 -4
- package/build/esm/fields/ImageField.d.ts +1 -1
- package/build/esm/fields/ImageField.js +3 -4
- package/build/esm/fields/NumberField.d.ts +1 -1
- package/build/esm/fields/NumberField.js +3 -4
- package/build/esm/fields/PhoneField.d.ts +1 -1
- package/build/esm/fields/PhoneField.js +3 -4
- package/build/esm/fields/RawField.d.ts +1 -1
- package/build/esm/fields/RawField.js +3 -4
- package/build/esm/fields/SchemaField.d.ts +1 -1
- package/build/esm/fields/SchemaField.js +23 -13
- package/build/esm/fields/SchemaField.types.d.ts +2 -2
- package/build/esm/fields/SelectField.d.ts +1 -1
- package/build/esm/fields/SelectField.js +3 -4
- package/build/esm/fields/TextField.d.ts +1 -1
- package/build/esm/fields/TextField.js +7 -5
- package/build/esm/fields/field.static.types.d.ts +3 -5
- package/build/esm/schemas.static.types.d.ts +4 -11
- package/build/esm/tests/validationErrorAssert.utility.d.ts +2 -2
- package/build/esm/types/utilities.types.d.ts +4 -4
- package/build/esm/utilities/KeyMapper.js +0 -3
- package/build/esm/utilities/cloneDeep.js +2 -1
- package/build/esm/utilities/formatPhoneNumber.js +4 -2
- package/build/esm/utilities/mapFieldErrorsToParameterErrors.js +3 -1
- package/build/esm/utilities/normalizeFieldValue.d.ts +1 -1
- package/build/esm/utilities/registerFieldType.js +1 -3
- package/build/esm/utilities/validateSchemaValues.js +1 -3
- package/build/fields/AbstractField.d.ts +1 -1
- package/build/fields/AbstractField.js +7 -2
- package/build/fields/AddressField.d.ts +1 -1
- package/build/fields/AddressField.js +1 -3
- package/build/fields/BooleanField.d.ts +1 -1
- package/build/fields/BooleanField.js +1 -3
- package/build/fields/DateField.d.ts +1 -1
- package/build/fields/DateField.js +1 -3
- package/build/fields/DateTimeField.d.ts +1 -1
- package/build/fields/DateTimeField.js +2 -5
- package/build/fields/DirectoryField.d.ts +1 -1
- package/build/fields/DirectoryField.js +8 -7
- package/build/fields/DurationField.d.ts +1 -1
- package/build/fields/DurationField.js +4 -6
- package/build/fields/EmailField.d.ts +1 -1
- package/build/fields/EmailField.js +1 -3
- package/build/fields/FileField.d.ts +1 -1
- package/build/fields/FileField.js +3 -6
- package/build/fields/IdField.d.ts +1 -1
- package/build/fields/IdField.js +1 -3
- package/build/fields/ImageField.d.ts +1 -1
- package/build/fields/ImageField.js +3 -7
- package/build/fields/NumberField.d.ts +1 -1
- package/build/fields/NumberField.js +1 -3
- package/build/fields/PhoneField.d.ts +1 -1
- package/build/fields/PhoneField.js +1 -3
- package/build/fields/RawField.d.ts +1 -1
- package/build/fields/RawField.js +1 -3
- package/build/fields/SchemaField.d.ts +1 -1
- package/build/fields/SchemaField.js +28 -16
- package/build/fields/SchemaField.types.d.ts +2 -2
- package/build/fields/SelectField.d.ts +1 -1
- package/build/fields/SelectField.js +1 -3
- package/build/fields/TextField.d.ts +1 -1
- package/build/fields/TextField.js +6 -6
- package/build/fields/field.static.types.d.ts +3 -5
- package/build/schemas.static.types.d.ts +4 -11
- package/build/singletons/SchemaRegistry.js +4 -6
- package/build/tests/AbstractDateFieldTest.js +2 -0
- package/build/tests/validationErrorAssert.utility.d.ts +2 -2
- package/build/tests/validationErrorAssert.utility.js +2 -3
- package/build/types/utilities.types.d.ts +4 -4
- package/build/utilities/KeyMapper.js +3 -7
- package/build/utilities/areSchemasTheSame.js +2 -3
- package/build/utilities/assertOptions.js +1 -1
- package/build/utilities/cloneDeep.js +3 -3
- package/build/utilities/cloneDeepPreservingInstances.js +1 -2
- package/build/utilities/defaultSchemaValues.js +4 -1
- package/build/utilities/dropFields.js +3 -1
- package/build/utilities/dropPrivateFields.js +3 -1
- package/build/utilities/formatPhoneNumber.js +6 -5
- package/build/utilities/getFields.js +1 -2
- package/build/utilities/isSchemaValid.js +1 -1
- package/build/utilities/makeFieldsOptional.js +4 -1
- package/build/utilities/mapFieldErrorsToParameterErrors.js +15 -4
- package/build/utilities/normalizeFieldValue.d.ts +1 -1
- package/build/utilities/normalizeFieldValue.js +13 -16
- package/build/utilities/normalizePartialSchemaValues.js +4 -1
- package/build/utilities/normalizeSchemaValues.js +5 -13
- package/build/utilities/registerFieldType.js +15 -6
- package/build/utilities/selectChoicesToHash.js +1 -2
- package/build/utilities/validateSchema.js +1 -2
- package/build/utilities/validateSchemaValues.js +2 -15
- package/package.json +12 -13
|
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
7
7
|
const DateField_1 = require("./DateField");
|
|
8
8
|
class DateTimeField extends AbstractField_1.default {
|
|
9
|
-
static
|
|
10
|
-
return 'Date and time support.';
|
|
11
|
-
}
|
|
9
|
+
static description = 'Date and time support.';
|
|
12
10
|
static generateTemplateDetails(options) {
|
|
13
11
|
return {
|
|
14
12
|
valueType: `${options.importAs}.DateTimeFieldValue${options.definition.isArray ? '[]' : ''}`,
|
|
@@ -26,12 +24,11 @@ class DateTimeField extends AbstractField_1.default {
|
|
|
26
24
|
});
|
|
27
25
|
}
|
|
28
26
|
toValueType(value) {
|
|
29
|
-
var _a;
|
|
30
27
|
let normalized = value;
|
|
31
28
|
if (normalized instanceof Date) {
|
|
32
29
|
normalized = normalized.getTime();
|
|
33
30
|
}
|
|
34
|
-
if (
|
|
31
|
+
if (this.options?.dateTimeFormat === 'iso_8601') {
|
|
35
32
|
return new Date(value).toISOString();
|
|
36
33
|
}
|
|
37
34
|
if (typeof normalized === 'string') {
|
|
@@ -3,7 +3,7 @@ import AbstractField from './AbstractField';
|
|
|
3
3
|
import { DirectoryFieldDefinition, DirectoryFieldValue } from './DirectoryField.types';
|
|
4
4
|
import { ToValueTypeOptions } from './field.static.types';
|
|
5
5
|
export default class DirectoryField extends AbstractField<DirectoryFieldDefinition> {
|
|
6
|
-
static
|
|
6
|
+
static readonly description = "A way to select entire directories once!";
|
|
7
7
|
static generateTemplateDetails(options: FieldTemplateDetailOptions<DirectoryFieldDefinition>): FieldTemplateDetails;
|
|
8
8
|
toValueType<C extends boolean>(value: any, options?: ToValueTypeOptions<DirectoryFieldDefinition, C>): DirectoryFieldValue;
|
|
9
9
|
}
|
|
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
|
|
7
7
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
8
8
|
class DirectoryField extends AbstractField_1.default {
|
|
9
|
-
static
|
|
10
|
-
return 'A way to select entire directories once!';
|
|
11
|
-
}
|
|
9
|
+
static description = 'A way to select entire directories once!';
|
|
12
10
|
static generateTemplateDetails(options) {
|
|
13
11
|
const { definition } = options;
|
|
14
12
|
return {
|
|
@@ -16,9 +14,11 @@ class DirectoryField extends AbstractField_1.default {
|
|
|
16
14
|
};
|
|
17
15
|
}
|
|
18
16
|
toValueType(value, options) {
|
|
19
|
-
const stringValue = typeof value === 'string' || value.toString
|
|
17
|
+
const stringValue = typeof value === 'string' || value.toString
|
|
18
|
+
? value.toString()
|
|
19
|
+
: undefined;
|
|
20
20
|
let path;
|
|
21
|
-
const relativeTo = options
|
|
21
|
+
const relativeTo = options?.relativeTo;
|
|
22
22
|
if (stringValue) {
|
|
23
23
|
path = stringValue;
|
|
24
24
|
}
|
|
@@ -35,9 +35,10 @@ class DirectoryField extends AbstractField_1.default {
|
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
if (path && relativeTo) {
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
39
38
|
const pathUtil = require('path');
|
|
40
|
-
path =
|
|
39
|
+
path =
|
|
40
|
+
pathUtil.relative(relativeTo, path) ||
|
|
41
|
+
path;
|
|
41
42
|
}
|
|
42
43
|
return { path };
|
|
43
44
|
}
|
|
@@ -7,7 +7,7 @@ import { TextFieldDefinition } from './TextField.types';
|
|
|
7
7
|
export declare function reduceDurationToMs(duration: Partial<DurationFieldValue>): number;
|
|
8
8
|
export declare function buildDuration(value: string | number | Partial<DurationFieldValue>): DurationFieldValue;
|
|
9
9
|
export default class DurationField extends AbstractField<DurationFieldDefinition> {
|
|
10
|
-
static
|
|
10
|
+
static readonly description = "A span of time represented in { hours, minutes, seconds, ms }";
|
|
11
11
|
static generateTemplateDetails(options: FieldTemplateDetailOptions<DurationFieldDefinition>): FieldTemplateDetails;
|
|
12
12
|
validate(value: any, _?: ValidateOptions<TextFieldDefinition>): FieldError[];
|
|
13
13
|
toValueType(value: any): DurationFieldValue;
|
|
@@ -27,7 +27,8 @@ function buildDuration(value) {
|
|
|
27
27
|
else if (typeof value === 'object') {
|
|
28
28
|
totalMs += typeof value.ms === 'number' ? value.ms : 0;
|
|
29
29
|
totalMs += typeof value.seconds === 'number' ? value.seconds * 1000 : 0;
|
|
30
|
-
totalMs +=
|
|
30
|
+
totalMs +=
|
|
31
|
+
typeof value.minutes === 'number' ? value.minutes * 1000 * 60 : 0;
|
|
31
32
|
totalMs +=
|
|
32
33
|
typeof value.hours === 'number' ? value.hours * 1000 * 60 * 60 : 0;
|
|
33
34
|
}
|
|
@@ -48,16 +49,13 @@ function buildDuration(value) {
|
|
|
48
49
|
}
|
|
49
50
|
exports.buildDuration = buildDuration;
|
|
50
51
|
class DurationField extends AbstractField_1.default {
|
|
51
|
-
static
|
|
52
|
-
return 'A span of time represented in { hours, minutes, seconds, ms }';
|
|
53
|
-
}
|
|
52
|
+
static description = 'A span of time represented in { hours, minutes, seconds, ms }';
|
|
54
53
|
static generateTemplateDetails(options) {
|
|
55
54
|
return {
|
|
56
55
|
valueType: `${options.importAs}.DurationFieldValue${options.definition.isArray ? '[]' : ''}`,
|
|
57
56
|
};
|
|
58
57
|
}
|
|
59
58
|
validate(value, _) {
|
|
60
|
-
var _a;
|
|
61
59
|
const errors = [];
|
|
62
60
|
try {
|
|
63
61
|
buildDuration(value);
|
|
@@ -67,7 +65,7 @@ class DurationField extends AbstractField_1.default {
|
|
|
67
65
|
code: 'INVALID_PARAMETER',
|
|
68
66
|
name: this.name,
|
|
69
67
|
originalError: err,
|
|
70
|
-
friendlyMessage:
|
|
68
|
+
friendlyMessage: err.options?.friendlyMessage,
|
|
71
69
|
});
|
|
72
70
|
}
|
|
73
71
|
return errors;
|
|
@@ -3,7 +3,7 @@ import AbstractField from './AbstractField';
|
|
|
3
3
|
import { EmailFieldDefinition } from './EmailField.types';
|
|
4
4
|
import { ValidateOptions } from './field.static.types';
|
|
5
5
|
export default class EmailField extends AbstractField<EmailFieldDefinition> {
|
|
6
|
-
static
|
|
6
|
+
static readonly description = "Email support.";
|
|
7
7
|
static generateTemplateDetails(options: FieldTemplateDetailOptions<EmailFieldDefinition>): FieldTemplateDetails;
|
|
8
8
|
validate(value: any, options?: ValidateOptions<EmailFieldDefinition>): import("..").FieldError[];
|
|
9
9
|
}
|
|
@@ -29,9 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
const EmailValidator = __importStar(require("email-validator"));
|
|
30
30
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
31
31
|
class EmailField extends AbstractField_1.default {
|
|
32
|
-
static
|
|
33
|
-
return 'Email support.';
|
|
34
|
-
}
|
|
32
|
+
static description = 'Email support.';
|
|
35
33
|
static generateTemplateDetails(options) {
|
|
36
34
|
return {
|
|
37
35
|
valueType: `string${options.definition.isArray ? '[]' : ''}`,
|
|
@@ -4,7 +4,7 @@ import AbstractField from './AbstractField';
|
|
|
4
4
|
import { ToValueTypeOptions, ValidateOptions } from './field.static.types';
|
|
5
5
|
import { FileFieldDefinition, FileFieldValue } from './FileField.types';
|
|
6
6
|
export default class FileField extends AbstractField<FileFieldDefinition> {
|
|
7
|
-
static
|
|
7
|
+
static readonly description = "A way to handle files. Supports mime-type lookups.";
|
|
8
8
|
static generateTemplateDetails(options: FieldTemplateDetailOptions<FileFieldDefinition>): FieldTemplateDetails;
|
|
9
9
|
validate(value: FileFieldValue, _?: ValidateOptions<FileFieldDefinition>): FieldError[];
|
|
10
10
|
toValueType<C extends boolean>(value: any, _options?: ToValueTypeOptions<FileFieldDefinition, C>): FileFieldValue;
|
|
@@ -5,18 +5,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
7
7
|
class FileField extends AbstractField_1.default {
|
|
8
|
-
static
|
|
9
|
-
return 'A way to handle files. Supports mime-type lookups.';
|
|
10
|
-
}
|
|
8
|
+
static description = 'A way to handle files. Supports mime-type lookups.';
|
|
11
9
|
static generateTemplateDetails(options) {
|
|
12
10
|
return {
|
|
13
11
|
valueType: `${options.importAs}.FileFieldValue${options.definition.isArray ? '[]' : ''}`,
|
|
14
12
|
};
|
|
15
13
|
}
|
|
16
14
|
validate(value, _) {
|
|
17
|
-
var _a, _b, _c;
|
|
18
15
|
const errors = super.validate(value);
|
|
19
|
-
const acceptableTypes =
|
|
16
|
+
const acceptableTypes = this.definition.options?.acceptableTypes ?? [];
|
|
20
17
|
if (value &&
|
|
21
18
|
!value.base64 &&
|
|
22
19
|
acceptableTypes[0] !== '*' &&
|
|
@@ -24,7 +21,7 @@ class FileField extends AbstractField_1.default {
|
|
|
24
21
|
errors.push({
|
|
25
22
|
code: 'INVALID_PARAMETER',
|
|
26
23
|
name: this.name,
|
|
27
|
-
friendlyMessage: `You sent a '${value.type}' to '${
|
|
24
|
+
friendlyMessage: `You sent a '${value.type}' to '${this.label ?? this.name}' and it only accepts '${acceptableTypes.join("', '")}'.`,
|
|
28
25
|
});
|
|
29
26
|
}
|
|
30
27
|
return errors;
|
|
@@ -2,7 +2,7 @@ import { FieldTemplateDetailOptions, FieldTemplateDetails } from '../types/templ
|
|
|
2
2
|
import AbstractField from './AbstractField';
|
|
3
3
|
import { IdFieldDefinition } from './IdField.types';
|
|
4
4
|
export default class IdField extends AbstractField<IdFieldDefinition> {
|
|
5
|
-
static
|
|
5
|
+
static readonly description = "A unique identifier field.";
|
|
6
6
|
static generateTemplateDetails(options: FieldTemplateDetailOptions<IdFieldDefinition>): FieldTemplateDetails;
|
|
7
7
|
toValueType(value: any): string;
|
|
8
8
|
}
|
package/build/fields/IdField.js
CHANGED
|
@@ -5,9 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
7
7
|
class IdField extends AbstractField_1.default {
|
|
8
|
-
static
|
|
9
|
-
return 'A unique identifier field.';
|
|
10
|
-
}
|
|
8
|
+
static description = 'A unique identifier field.';
|
|
11
9
|
static generateTemplateDetails(options) {
|
|
12
10
|
return {
|
|
13
11
|
valueType: `string${options.definition.isArray ? '[]' : ''}`,
|
|
@@ -3,7 +3,7 @@ import AbstractField from './AbstractField';
|
|
|
3
3
|
import { ImageFieldDefinition } from './ImageField.types';
|
|
4
4
|
export default class ImageField extends AbstractField<ImageFieldDefinition> {
|
|
5
5
|
static generateTemplateDetails(options: FieldTemplateDetailOptions<ImageFieldDefinition>): FieldTemplateDetails;
|
|
6
|
-
static
|
|
6
|
+
static readonly description = "Images of various sizes!";
|
|
7
7
|
validate(value: any): import("..").FieldError[];
|
|
8
8
|
private getRequiredSizes;
|
|
9
9
|
}
|
|
@@ -12,11 +12,8 @@ class ImageField extends AbstractField_1.default {
|
|
|
12
12
|
valueType: `${importAs}.ImageFieldValue${definition.isArray ? '[]' : ''}`,
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
|
-
static
|
|
16
|
-
return 'Images of various sizes!';
|
|
17
|
-
}
|
|
15
|
+
static description = 'Images of various sizes!';
|
|
18
16
|
validate(value) {
|
|
19
|
-
var _a;
|
|
20
17
|
const errors = super.validate(value);
|
|
21
18
|
if (value && errors.length === 0 && !value.base64) {
|
|
22
19
|
let sizes = this.getRequiredSizes();
|
|
@@ -32,15 +29,14 @@ class ImageField extends AbstractField_1.default {
|
|
|
32
29
|
errors.push({
|
|
33
30
|
code: 'INVALID_PARAMETER',
|
|
34
31
|
name: this.name,
|
|
35
|
-
friendlyMessage: `You need to supply the remaining sizes to upload an image to ${
|
|
32
|
+
friendlyMessage: `You need to supply the remaining sizes to upload an image to ${this.label ?? this.name}: '${missing.join("', '")}'`,
|
|
36
33
|
});
|
|
37
34
|
}
|
|
38
35
|
}
|
|
39
36
|
return errors;
|
|
40
37
|
}
|
|
41
38
|
getRequiredSizes() {
|
|
42
|
-
|
|
43
|
-
let sizes = (_b = (_a = this.definition.options) === null || _a === void 0 ? void 0 : _a.requiredSizes) !== null && _b !== void 0 ? _b : [];
|
|
39
|
+
let sizes = this.definition.options?.requiredSizes ?? [];
|
|
44
40
|
if (sizes[0] === '*') {
|
|
45
41
|
sizes = ImageField_types_1.requiredImageSizes.filter((s) => s !== '*');
|
|
46
42
|
}
|
|
@@ -3,7 +3,7 @@ import { FieldTemplateDetailOptions, FieldTemplateDetails } from '../types/templ
|
|
|
3
3
|
import AbstractField from './AbstractField';
|
|
4
4
|
import { NumberFieldDefinition } from './NumberField.types';
|
|
5
5
|
export default class NumberField extends AbstractField<NumberFieldDefinition> {
|
|
6
|
-
static
|
|
6
|
+
static readonly description = "Handles all types of numbers with min/max and clamp support";
|
|
7
7
|
static generateTemplateDetails(options: FieldTemplateDetailOptions<NumberFieldDefinition>): FieldTemplateDetails;
|
|
8
8
|
toValueType(value: any): number;
|
|
9
9
|
private buildNaNError;
|
|
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
|
|
7
7
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
8
8
|
class NumberField extends AbstractField_1.default {
|
|
9
|
-
static
|
|
10
|
-
return 'Handles all types of numbers with min/max and clamp support';
|
|
11
|
-
}
|
|
9
|
+
static description = 'Handles all types of numbers with min/max and clamp support';
|
|
12
10
|
static generateTemplateDetails(options) {
|
|
13
11
|
return {
|
|
14
12
|
valueType: `number${options.definition.isArray ? '[]' : ''}`,
|
|
@@ -3,7 +3,7 @@ import AbstractField from './AbstractField';
|
|
|
3
3
|
import { ValidateOptions } from './field.static.types';
|
|
4
4
|
import { PhoneFieldDefinition } from './PhoneField.types';
|
|
5
5
|
export default class PhoneField extends AbstractField<PhoneFieldDefinition> {
|
|
6
|
-
static
|
|
6
|
+
static readonly description = "Takes anything close to a phone number and formats it. Also great at validating numbers.";
|
|
7
7
|
static generateTemplateDetails(options: FieldTemplateDetailOptions<PhoneFieldDefinition>): FieldTemplateDetails;
|
|
8
8
|
toValueType(value: any): string;
|
|
9
9
|
validate(value: any, options?: ValidateOptions<PhoneFieldDefinition>): import("..").FieldError[];
|
|
@@ -29,9 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
const formatPhoneNumber_1 = __importStar(require("../utilities/formatPhoneNumber"));
|
|
30
30
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
31
31
|
class PhoneField extends AbstractField_1.default {
|
|
32
|
-
static
|
|
33
|
-
return 'Takes anything close to a phone number and formats it. Also great at validating numbers.';
|
|
34
|
-
}
|
|
32
|
+
static description = 'Takes anything close to a phone number and formats it. Also great at validating numbers.';
|
|
35
33
|
static generateTemplateDetails(options) {
|
|
36
34
|
return {
|
|
37
35
|
valueType: `string${options.definition.isArray ? '[]' : ''}`,
|
|
@@ -2,6 +2,6 @@ import { FieldTemplateDetailOptions, FieldTemplateDetails } from '../types/templ
|
|
|
2
2
|
import AbstractField from './AbstractField';
|
|
3
3
|
import { RawFieldDefinition } from './RawField.types';
|
|
4
4
|
export default class RawField extends AbstractField<RawFieldDefinition> {
|
|
5
|
-
static
|
|
5
|
+
static readonly description = "Set an interface directly.";
|
|
6
6
|
static generateTemplateDetails(options: FieldTemplateDetailOptions<RawFieldDefinition>): FieldTemplateDetails;
|
|
7
7
|
}
|
package/build/fields/RawField.js
CHANGED
|
@@ -5,9 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
7
7
|
class RawField extends AbstractField_1.default {
|
|
8
|
-
static
|
|
9
|
-
return 'Set an interface directly.';
|
|
10
|
-
}
|
|
8
|
+
static description = 'Set an interface directly.';
|
|
11
9
|
static generateTemplateDetails(options) {
|
|
12
10
|
return {
|
|
13
11
|
valueType: `(${options.definition.options.valueType})${options.definition.isArray ? '[]' : ''}`,
|
|
@@ -5,7 +5,7 @@ import AbstractField from './AbstractField';
|
|
|
5
5
|
import { ValidateOptions, ToValueTypeOptions, FieldDefinitionValueType } from './field.static.types';
|
|
6
6
|
import { SchemaFieldFieldDefinition } from './SchemaField.types';
|
|
7
7
|
export default class SchemaField<F extends SchemaFieldFieldDefinition = SchemaFieldFieldDefinition> extends AbstractField<F> {
|
|
8
|
-
static
|
|
8
|
+
static readonly description = "A way to map relationships.";
|
|
9
9
|
static mapFieldDefinitionToSchemasOrIdsWithVersion(field: SchemaFieldFieldDefinition): (SchemaIdWithVersion | Schema)[];
|
|
10
10
|
static mapFieldDefinitionToSchemaIdsWithVersion(field: SchemaFieldFieldDefinition): SchemaIdWithVersion[];
|
|
11
11
|
static generateTypeDetails(): {
|
|
@@ -14,9 +14,7 @@ const normalizeSchemaToIdWithVersion_1 = __importDefault(require("../utilities/n
|
|
|
14
14
|
const validateSchema_1 = __importDefault(require("../utilities/validateSchema"));
|
|
15
15
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
16
16
|
class SchemaField extends AbstractField_1.default {
|
|
17
|
-
static
|
|
18
|
-
return 'A way to map relationships.';
|
|
19
|
-
}
|
|
17
|
+
static description = 'A way to map relationships.';
|
|
20
18
|
static mapFieldDefinitionToSchemasOrIdsWithVersion(field) {
|
|
21
19
|
const { options } = field;
|
|
22
20
|
const schemasOrIds = [
|
|
@@ -75,7 +73,7 @@ class SchemaField extends AbstractField_1.default {
|
|
|
75
73
|
if (!item.namespace) {
|
|
76
74
|
throwInvalidReferenceError(item);
|
|
77
75
|
}
|
|
78
|
-
return item.namespace.toLowerCase() === namespace.toLowerCase();
|
|
76
|
+
return (item.namespace.toLowerCase() === namespace.toLowerCase());
|
|
79
77
|
});
|
|
80
78
|
}
|
|
81
79
|
let matchedTemplateItem;
|
|
@@ -102,7 +100,8 @@ class SchemaField extends AbstractField_1.default {
|
|
|
102
100
|
valueType = `${globalNamespace}.${matchedTemplateItem.namespace}${version ? `.${version}` : ''}${renderAs === template_types_1.TemplateRenderAs.Type
|
|
103
101
|
? `.${matchedTemplateItem.namePascal + typeSuffix}`
|
|
104
102
|
: `.${matchedTemplateItem.namePascal}Schema`}`;
|
|
105
|
-
if (renderAs === template_types_1.TemplateRenderAs.Type &&
|
|
103
|
+
if (renderAs === template_types_1.TemplateRenderAs.Type &&
|
|
104
|
+
idsWithVersion.length > 1) {
|
|
106
105
|
valueType = `{ schemaId: '${id}'${version ? `, version: '${version}'` : ''}, values: ${valueType} }`;
|
|
107
106
|
}
|
|
108
107
|
}
|
|
@@ -115,7 +114,7 @@ class SchemaField extends AbstractField_1.default {
|
|
|
115
114
|
throw new SpruceError_1.default({
|
|
116
115
|
code: 'SCHEMA_NOT_FOUND',
|
|
117
116
|
schemaId: id,
|
|
118
|
-
friendlyMessage: `Template generation failed. I could not find a schema that was being referenced. I was looking for a schema with the id of '${id}' and namespace '${namespace
|
|
117
|
+
friendlyMessage: `Template generation failed. I could not find a schema that was being referenced. I was looking for a schema with the id of '${id}' and namespace '${namespace ?? '**missing**'}'.`,
|
|
119
118
|
});
|
|
120
119
|
}
|
|
121
120
|
});
|
|
@@ -124,11 +123,14 @@ class SchemaField extends AbstractField_1.default {
|
|
|
124
123
|
valueType =
|
|
125
124
|
unions.length === 1
|
|
126
125
|
? unions[0].valueType
|
|
127
|
-
: '[' +
|
|
126
|
+
: '[' +
|
|
127
|
+
unions.map((item) => item.valueType).join(', ') +
|
|
128
|
+
']';
|
|
128
129
|
}
|
|
129
130
|
else {
|
|
130
131
|
valueType = unions.map((item) => item.valueType).join(' | ');
|
|
131
|
-
valueType = `${(definition.isArray ||
|
|
132
|
+
valueType = `${(definition.isArray ||
|
|
133
|
+
renderAs === template_types_1.TemplateRenderAs.SchemaType) &&
|
|
132
134
|
unions.length > 1
|
|
133
135
|
? `(${valueType})`
|
|
134
136
|
: `${valueType}`}${(definition.isArray && renderAs === template_types_1.TemplateRenderAs.Type) ||
|
|
@@ -154,7 +156,6 @@ class SchemaField extends AbstractField_1.default {
|
|
|
154
156
|
return schemas;
|
|
155
157
|
}
|
|
156
158
|
validate(value, options) {
|
|
157
|
-
var _a;
|
|
158
159
|
const errors = super.validate(value, options);
|
|
159
160
|
// do not validate schemas by default, very heavy and only needed when explicitly asked to
|
|
160
161
|
if (value instanceof AbstractEntity_1.default) {
|
|
@@ -176,7 +177,7 @@ class SchemaField extends AbstractField_1.default {
|
|
|
176
177
|
errors.push({
|
|
177
178
|
code: 'INVALID_PARAMETER',
|
|
178
179
|
name: this.name,
|
|
179
|
-
friendlyMessage: `${
|
|
180
|
+
friendlyMessage: `${this.label ?? this.name} must be an object!`,
|
|
180
181
|
});
|
|
181
182
|
}
|
|
182
183
|
else {
|
|
@@ -209,7 +210,8 @@ class SchemaField extends AbstractField_1.default {
|
|
|
209
210
|
name: this.name,
|
|
210
211
|
label: this.label,
|
|
211
212
|
code: 'INVALID_PARAMETER',
|
|
212
|
-
friendlyMessage: 'You need to add `values` to the value of ' +
|
|
213
|
+
friendlyMessage: 'You need to add `values` to the value of ' +
|
|
214
|
+
this.name,
|
|
213
215
|
});
|
|
214
216
|
}
|
|
215
217
|
else if (!schemaId) {
|
|
@@ -217,17 +219,21 @@ class SchemaField extends AbstractField_1.default {
|
|
|
217
219
|
name: this.name,
|
|
218
220
|
label: this.label,
|
|
219
221
|
code: 'INVALID_PARAMETER',
|
|
220
|
-
friendlyMessage: 'You need to add `schemaId` to the value of ' +
|
|
222
|
+
friendlyMessage: 'You need to add `schemaId` to the value of ' +
|
|
223
|
+
this.name,
|
|
221
224
|
});
|
|
222
225
|
}
|
|
223
226
|
else {
|
|
224
|
-
const matchSchema = schemas.find((schema) => schema.id === schemaId &&
|
|
227
|
+
const matchSchema = schemas.find((schema) => schema.id === schemaId &&
|
|
228
|
+
schema.version === version);
|
|
225
229
|
if (!matchSchema) {
|
|
226
230
|
errors.push({
|
|
227
231
|
name: this.name,
|
|
228
232
|
label: this.label,
|
|
229
233
|
code: 'INVALID_PARAMETER',
|
|
230
|
-
friendlyMessage: `Could not find a schema by id '${schemaId}'${version
|
|
234
|
+
friendlyMessage: `Could not find a schema by id '${schemaId}'${version
|
|
235
|
+
? ` and version '${version}'`
|
|
236
|
+
: ' with no version'}.`,
|
|
231
237
|
});
|
|
232
238
|
}
|
|
233
239
|
else {
|
|
@@ -272,7 +278,9 @@ class SchemaField extends AbstractField_1.default {
|
|
|
272
278
|
}
|
|
273
279
|
const { createEntityInstances, schemasById: schemasById = {} } = options || {};
|
|
274
280
|
// try and pull the schema definition from the options and by id
|
|
275
|
-
const destinationSchemas = SchemaField.mapFieldDefinitionToSchemas(this.definition, {
|
|
281
|
+
const destinationSchemas = SchemaField.mapFieldDefinitionToSchemas(this.definition, {
|
|
282
|
+
schemasById,
|
|
283
|
+
});
|
|
276
284
|
const isUnion = destinationSchemas.length > 1;
|
|
277
285
|
let instance;
|
|
278
286
|
if (value instanceof AbstractEntity_1.default) {
|
|
@@ -315,7 +323,11 @@ class SchemaField extends AbstractField_1.default {
|
|
|
315
323
|
if (createEntityInstances) {
|
|
316
324
|
return instance;
|
|
317
325
|
}
|
|
318
|
-
const getValueOptions =
|
|
326
|
+
const getValueOptions = {
|
|
327
|
+
validate: false,
|
|
328
|
+
...options,
|
|
329
|
+
fields: undefined,
|
|
330
|
+
};
|
|
319
331
|
if (isUnion) {
|
|
320
332
|
return {
|
|
321
333
|
schemaId: instance.schemaId,
|
|
@@ -15,14 +15,14 @@ export interface SchemaFieldOptions {
|
|
|
15
15
|
/** Dropped in after the type. Used to generate generics, like <T> */
|
|
16
16
|
typeSuffix?: string;
|
|
17
17
|
}
|
|
18
|
-
export type SchemaFieldUnion<S extends
|
|
18
|
+
export type SchemaFieldUnion<S extends Schema[], CreateEntityInstances extends boolean = false> = {
|
|
19
19
|
[K in keyof S]: S[K] extends Schema ? CreateEntityInstances extends true ? StaticSchemaEntity<S[K]> : {
|
|
20
20
|
schemaId: S[K]['id'];
|
|
21
21
|
version?: S[K]['version'];
|
|
22
22
|
values: SchemaValues<S[K]>;
|
|
23
23
|
} : any;
|
|
24
24
|
};
|
|
25
|
-
export type SchemaFieldValueTypeMapper<F extends SchemaFieldFieldDefinition, CreateEntityInstances extends boolean = false, ShouldIncludeNullAndUndefinedFields extends boolean = false> = F['options']['schemas'] extends
|
|
25
|
+
export type SchemaFieldValueTypeMapper<F extends SchemaFieldFieldDefinition, CreateEntityInstances extends boolean = false, ShouldIncludeNullAndUndefinedFields extends boolean = false> = F['options']['schemas'] extends Schema[] ? IsArrayNoUnpack<SchemaFieldUnion<F['options']['schemas'], CreateEntityInstances>[number], F['isArray']> : F['options']['schema'] extends Schema ? CreateEntityInstances extends true ? IsArray<StaticSchemaEntity<F['options']['schema']>, F['isArray']> : IsArray<SchemaValues<F['options']['schema'], false, true, ShouldIncludeNullAndUndefinedFields>, F['isArray']> : any;
|
|
26
26
|
export type SchemaFieldFieldDefinition = FieldDefinition<Record<string, any>, Record<string, any>, SchemaFieldValueUnion[], SchemaFieldValueUnion[]> & {
|
|
27
27
|
/** * .Schema go team! */
|
|
28
28
|
type: 'schema';
|
|
@@ -3,7 +3,7 @@ import { FieldTemplateDetailOptions, FieldTemplateDetails } from '../types/templ
|
|
|
3
3
|
import AbstractField from './AbstractField';
|
|
4
4
|
import { SelectFieldDefinition, SelectChoice } from './SelectField.types';
|
|
5
5
|
export default class SelectField<T extends SelectFieldDefinition = SelectFieldDefinition> extends AbstractField<T> {
|
|
6
|
-
static
|
|
6
|
+
static readonly description = "Stored as string, lets user select between available options.";
|
|
7
7
|
constructor(name: string, definition: T);
|
|
8
8
|
static generateTypeDetails(): {
|
|
9
9
|
valueTypeMapper: string;
|
|
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const selectChoicesToHash_1 = require("../utilities/selectChoicesToHash");
|
|
7
7
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
8
8
|
class SelectField extends AbstractField_1.default {
|
|
9
|
-
static
|
|
10
|
-
return 'Stored as string, lets user select between available options.';
|
|
11
|
-
}
|
|
9
|
+
static description = 'Stored as string, lets user select between available options.';
|
|
12
10
|
constructor(name, definition) {
|
|
13
11
|
super(name, definition);
|
|
14
12
|
if (!definition.options || !definition.options.choices) {
|
|
@@ -4,7 +4,7 @@ import AbstractField from './AbstractField';
|
|
|
4
4
|
import { ToValueTypeOptions, ValidateOptions } from './field.static.types';
|
|
5
5
|
import { TextFieldDefinition } from './TextField.types';
|
|
6
6
|
export default class TextField extends AbstractField<TextFieldDefinition> {
|
|
7
|
-
static
|
|
7
|
+
static readonly description = "A text field. Converts non-strings into strings by calling toString(). Size set by options.";
|
|
8
8
|
static generateTemplateDetails(options: FieldTemplateDetailOptions<TextFieldDefinition>): FieldTemplateDetails;
|
|
9
9
|
validate(value: any, options: ValidateOptions<TextFieldDefinition>): FieldError[];
|
|
10
10
|
toValueType<C extends boolean>(value: any, options?: ToValueTypeOptions<TextFieldDefinition, C>): string;
|
|
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
|
|
7
7
|
const AbstractField_1 = __importDefault(require("./AbstractField"));
|
|
8
8
|
class TextField extends AbstractField_1.default {
|
|
9
|
-
static
|
|
10
|
-
return 'A text field. Converts non-strings into strings by calling toString(). Size set by options.';
|
|
11
|
-
}
|
|
9
|
+
static description = 'A text field. Converts non-strings into strings by calling toString(). Size set by options.';
|
|
12
10
|
static generateTemplateDetails(options) {
|
|
13
11
|
const { definition } = options;
|
|
14
12
|
return {
|
|
@@ -37,10 +35,9 @@ class TextField extends AbstractField_1.default {
|
|
|
37
35
|
return errors;
|
|
38
36
|
}
|
|
39
37
|
toValueType(value, options) {
|
|
40
|
-
var _a;
|
|
41
38
|
let transformed = this.convertToString(value);
|
|
42
39
|
if (typeof transformed === 'string') {
|
|
43
|
-
const maxLength =
|
|
40
|
+
const maxLength = options?.maxLength ?? 0;
|
|
44
41
|
if (maxLength > 0 && transformed.length > maxLength) {
|
|
45
42
|
transformed = transformed.substr(0, maxLength);
|
|
46
43
|
}
|
|
@@ -64,7 +61,10 @@ class TextField extends AbstractField_1.default {
|
|
|
64
61
|
convertToString(value) {
|
|
65
62
|
return typeof value === 'string'
|
|
66
63
|
? value
|
|
67
|
-
: typeof value === 'number' &&
|
|
64
|
+
: typeof value === 'number' &&
|
|
65
|
+
value &&
|
|
66
|
+
value.toString &&
|
|
67
|
+
value.toString();
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
exports.default = TextField;
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { FieldDefinitions, FieldMap, FieldValueTypeGeneratorMap } from
|
|
1
|
+
import { FieldDefinitions, FieldMap, FieldValueTypeGeneratorMap } from './../.spruce/schemas/fields/fields.types';
|
|
2
2
|
import { FieldError } from '../errors/options.types';
|
|
3
3
|
import { Schema, SchemaFieldsByName, SchemaValues, StaticSchemaEntity } from '../schemas.static.types';
|
|
4
4
|
import { Unpack, IsArray, IsRequired } from '../types/utilities.types';
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
export type SchemaFieldUnion<S extends Array<Schema>, CreateEntityInstances extends boolean = false> = {
|
|
5
|
+
export type SchemasById = Record<string, Schema[]>;
|
|
6
|
+
export type SchemaFieldUnion<S extends Schema[], CreateEntityInstances extends boolean = false> = {
|
|
9
7
|
[K in keyof S]: S[K] extends Schema ? CreateEntityInstances extends true ? StaticSchemaEntity<S[K]> : {
|
|
10
8
|
schemaId: S[K]['id'];
|
|
11
9
|
version?: S[K]['version'];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FieldDefinitions, Fields, FieldDefinitionMap, FieldMap } from
|
|
1
|
+
import { FieldDefinitions, Fields, FieldDefinitionMap, FieldMap } from './.spruce/schemas/fields/fields.types';
|
|
2
2
|
import { FieldDefinition, FieldDefinitionValueType, Field, FieldType } from './fields/field.static.types';
|
|
3
3
|
export interface SchemaEntity {
|
|
4
4
|
schemaId: string;
|
|
@@ -39,9 +39,7 @@ export interface DynamicSchemaEntityByName<ISchema extends Schema, OurField exte
|
|
|
39
39
|
validate(options?: DynamicSchemaValidateOptions): void;
|
|
40
40
|
isValid(options?: DynamicSchemaValidateOptions): boolean;
|
|
41
41
|
}
|
|
42
|
-
export
|
|
43
|
-
[fieldName: string]: FieldDefinitions;
|
|
44
|
-
}
|
|
42
|
+
export type SchemaFieldsByName = Record<string, FieldDefinitions>;
|
|
45
43
|
export interface Schema {
|
|
46
44
|
id: string;
|
|
47
45
|
name?: string;
|
|
@@ -70,18 +68,13 @@ export type SchemaAllValues<S extends Schema, CreateEntityInstances extends bool
|
|
|
70
68
|
export type StaticSchemaAllValues<S extends Schema, CreateEntityInstances extends boolean = false> = {
|
|
71
69
|
[K in SchemaFieldNames<S>]-?: SchemaFieldValueType<S, K, CreateEntityInstances>;
|
|
72
70
|
};
|
|
73
|
-
export type DynamicSchemaAllValues<S extends Schema, CreateEntityInstances extends boolean = false> =
|
|
74
|
-
[dynamicKey: string]: S['dynamicFieldSignature'] extends FieldDefinitions ? FieldDefinitionValueType<S['dynamicFieldSignature'], CreateEntityInstances> : never;
|
|
75
|
-
};
|
|
71
|
+
export type DynamicSchemaAllValues<S extends Schema, CreateEntityInstances extends boolean = false> = Record<string, S['dynamicFieldSignature'] extends FieldDefinitions ? FieldDefinitionValueType<S['dynamicFieldSignature'], CreateEntityInstances> : never>;
|
|
76
72
|
export type SchemaPartialValues<S extends Schema, CreateEntityInstances extends boolean = false> = IsDynamicSchema<S> extends true ? DynamicSchemaPartialValues<S, CreateEntityInstances> : StaticSchemaPartialValues<S, CreateEntityInstances>;
|
|
77
73
|
export type StaticSchemaPartialValues<T extends Schema, CreateEntityInstances extends boolean = false> = {
|
|
78
74
|
[K in SchemaFieldNames<T>]?: SchemaFieldValueType<T, K, CreateEntityInstances> | undefined | null;
|
|
79
75
|
};
|
|
80
|
-
export type DynamicSchemaPartialValues<S extends Schema, CreateEntityInstances extends boolean = false> = Partial<
|
|
81
|
-
[dynamicField: string]: S['dynamicFieldSignature'] extends FieldDefinitions ? FieldDefinitionValueType<S['dynamicFieldSignature'], CreateEntityInstances> | undefined | null : never;
|
|
82
|
-
}>;
|
|
76
|
+
export type DynamicSchemaPartialValues<S extends Schema, CreateEntityInstances extends boolean = false> = Partial<Record<string, S['dynamicFieldSignature'] extends FieldDefinitions ? FieldDefinitionValueType<S['dynamicFieldSignature'], CreateEntityInstances> | undefined | null : never>>;
|
|
83
77
|
export type SchemaStaticValues<T extends Schema, CreateEntityInstances extends boolean = false, K extends SchemaOptionalFieldNames<T> = SchemaOptionalFieldNames<T>, V extends SchemaAllValues<T, CreateEntityInstances> = SchemaAllValues<T, CreateEntityInstances>> = Omit<V, K> & Partial<Pick<V, K>>;
|
|
84
|
-
export type SchemaValues_OLD<S extends Schema, CreateEntityInstances extends boolean = false> = IsDynamicSchema<S> extends true ? DynamicSchemaAllValues<S> : SchemaStaticValues<S, CreateEntityInstances>;
|
|
85
78
|
export type IsDynamicSchema<S extends Schema> = S['dynamicFieldSignature'] extends FieldDefinitions ? true : false;
|
|
86
79
|
export type SchemaDefaultValues<S extends Schema, CreateEntityInstances extends boolean = false, K extends SchemaFieldNamesWithDefaultValue<S> = SchemaFieldNamesWithDefaultValue<S>, V extends SchemaAllValues<S, CreateEntityInstances> = SchemaAllValues<S, CreateEntityInstances>> = {
|
|
87
80
|
[F in K]: NonNullable<V[F]>;
|
|
@@ -6,9 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
|
|
7
7
|
const validateSchema_1 = __importDefault(require("../utilities/validateSchema"));
|
|
8
8
|
class SchemaRegistry {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
9
|
+
schemasById = {};
|
|
10
|
+
static instance;
|
|
12
11
|
static getInstance() {
|
|
13
12
|
if (!this.instance) {
|
|
14
13
|
this.instance = new SchemaRegistry();
|
|
@@ -84,9 +83,8 @@ class SchemaRegistry {
|
|
|
84
83
|
return true;
|
|
85
84
|
}
|
|
86
85
|
forgetSchema(id, version) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (((_b = this.schemasById[id]) === null || _b === void 0 ? void 0 : _b.length) === 0) {
|
|
86
|
+
this.schemasById[id] = this.schemasById[id]?.filter((schema) => !(schema.id === id && schema.version === version));
|
|
87
|
+
if (this.schemasById[id]?.length === 0) {
|
|
90
88
|
delete this.schemasById[id];
|
|
91
89
|
}
|
|
92
90
|
}
|