@based/schema 0.0.16 → 1.0.2

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.
Files changed (105) hide show
  1. package/dist/error.d.ts +18 -0
  2. package/dist/error.js +31 -0
  3. package/dist/error.js.map +1 -0
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/set/collections.js +14 -32
  8. package/dist/set/collections.js.map +1 -1
  9. package/dist/set/error.d.ts +1 -2
  10. package/dist/set/error.js +3 -8
  11. package/dist/set/error.js.map +1 -1
  12. package/dist/set/fields/array.d.ts +2 -0
  13. package/dist/set/fields/array.js +96 -0
  14. package/dist/set/fields/array.js.map +1 -0
  15. package/dist/set/fields/index.d.ts +3 -0
  16. package/dist/set/fields/index.js +72 -0
  17. package/dist/set/fields/index.js.map +1 -0
  18. package/dist/set/fields/number.d.ts +4 -0
  19. package/dist/set/fields/number.js +121 -0
  20. package/dist/set/fields/number.js.map +1 -0
  21. package/dist/set/fields/object.d.ts +3 -0
  22. package/dist/set/fields/object.js +33 -0
  23. package/dist/set/fields/object.js.map +1 -0
  24. package/dist/set/fields/references.d.ts +3 -0
  25. package/dist/set/fields/references.js +106 -0
  26. package/dist/set/fields/references.js.map +1 -0
  27. package/dist/set/fields/set.d.ts +2 -0
  28. package/dist/set/fields/set.js +63 -0
  29. package/dist/set/fields/set.js.map +1 -0
  30. package/dist/set/fields/string.d.ts +3 -0
  31. package/dist/set/fields/string.js +190 -0
  32. package/dist/set/fields/string.js.map +1 -0
  33. package/dist/set/index.d.ts +2 -5
  34. package/dist/set/index.js +101 -126
  35. package/dist/set/index.js.map +1 -1
  36. package/dist/set/isValidId.d.ts +2 -0
  37. package/dist/set/isValidId.js +21 -0
  38. package/dist/set/isValidId.js.map +1 -0
  39. package/dist/set/number.js +23 -36
  40. package/dist/set/number.js.map +1 -1
  41. package/dist/set/parseDefaultAndValue.js +1 -3
  42. package/dist/set/parseDefaultAndValue.js.map +1 -1
  43. package/dist/set/references.js +5 -12
  44. package/dist/set/references.js.map +1 -1
  45. package/dist/set/rest.js +4 -4
  46. package/dist/set/rest.js.map +1 -1
  47. package/dist/set/string.js +35 -35
  48. package/dist/set/string.js.map +1 -1
  49. package/dist/set/types.d.ts +0 -5
  50. package/dist/set/types.js +0 -2
  51. package/dist/types.d.ts +7 -1
  52. package/dist/types.js.map +1 -1
  53. package/dist/walker/args.d.ts +31 -0
  54. package/dist/walker/args.js +120 -0
  55. package/dist/walker/args.js.map +1 -0
  56. package/dist/walker/index.d.ts +6 -0
  57. package/dist/walker/index.js +40 -0
  58. package/dist/walker/index.js.map +1 -0
  59. package/dist/walker/parse.d.ts +2 -0
  60. package/dist/walker/parse.js +157 -0
  61. package/dist/walker/parse.js.map +1 -0
  62. package/dist/walker/types.d.ts +44 -0
  63. package/dist/walker/types.js +9 -0
  64. package/dist/walker/types.js.map +1 -0
  65. package/package.json +2 -2
  66. package/src/{set/error.ts → error.ts} +3 -1
  67. package/src/index.ts +2 -2
  68. package/src/set/fields/array.ts +111 -0
  69. package/src/set/fields/index.ts +69 -0
  70. package/src/set/fields/number.ts +134 -0
  71. package/src/set/fields/object.ts +30 -0
  72. package/src/set/fields/references.ts +114 -0
  73. package/src/set/fields/set.ts +63 -0
  74. package/src/set/fields/string.ts +199 -0
  75. package/src/set/index.ts +105 -187
  76. package/src/set/isValidId.ts +23 -0
  77. package/src/set/types.ts +0 -20
  78. package/src/types.ts +4 -2
  79. package/src/walker/args.ts +159 -0
  80. package/src/walker/index.ts +35 -0
  81. package/src/walker/parse.ts +193 -0
  82. package/src/walker/types.ts +75 -0
  83. package/test/number.ts +289 -543
  84. package/test/reference.ts +150 -198
  85. package/test/rest.ts +227 -0
  86. package/test/string.ts +139 -183
  87. package/test/utils/index.ts +23 -0
  88. package/test/walker.ts +558 -3
  89. package/dist/set2/index.d.ts +0 -0
  90. package/dist/set2/index.js +0 -71
  91. package/dist/set2/index.js.map +0 -1
  92. package/dist/walker.d.ts +0 -51
  93. package/dist/walker.js +0 -120
  94. package/dist/walker.js.map +0 -1
  95. package/src/set/collections.ts +0 -338
  96. package/src/set/number.ts +0 -167
  97. package/src/set/parseDefaultAndValue.ts +0 -54
  98. package/src/set/parsers.ts +0 -20
  99. package/src/set/references.ts +0 -113
  100. package/src/set/rest.ts +0 -135
  101. package/src/set/string.ts +0 -254
  102. package/src/set2/index.ts +0 -71
  103. package/src/walker.ts +0 -201
  104. package/test/setWalker.ts +0 -494
  105. package/test/text.ts +0 -171
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.references = exports.reference = void 0;
4
+ const error_1 = require("../../error");
5
+ const isValidId_1 = require("../isValidId");
6
+ async function parseOperator(args, key) {
7
+ if (Array.isArray(args.value[key])) {
8
+ const n = args.create({
9
+ key,
10
+ skipCollection: true,
11
+ value: args.value[key],
12
+ });
13
+ await n.parse();
14
+ if (n.value?.$value) {
15
+ return n.value.$value;
16
+ }
17
+ return [];
18
+ }
19
+ const n = args.create({
20
+ value: args.value[key],
21
+ key,
22
+ skipCollection: true,
23
+ });
24
+ await (0, exports.reference)(n);
25
+ return [n.value];
26
+ }
27
+ const reference = async (args) => {
28
+ // TODO: setting an object here , handling $alias (both async hooks)
29
+ // block if path contains $remove
30
+ if (!(0, isValidId_1.isValidId)(args.schema, args.value)) {
31
+ args.error(error_1.ParseError.incorrectFormat);
32
+ return;
33
+ }
34
+ if ('allowedTypes' in args.fieldSchema) {
35
+ const prefix = args.value.slice(0, 2);
36
+ const targetType = args.schema.prefixToTypeMapping[prefix];
37
+ let typeMatches = false;
38
+ for (const t of args.fieldSchema.allowedTypes) {
39
+ if (typeof t === 'string') {
40
+ if (t === targetType) {
41
+ typeMatches = true;
42
+ break;
43
+ }
44
+ }
45
+ else {
46
+ if (t.type && t.type === targetType) {
47
+ typeMatches = true;
48
+ if (t.$filter) {
49
+ // TODO: ASYNC HOOK
50
+ // if(!(await args.target.referenceFilterCondition(value, t.$filter))){
51
+ // error(args, ParseError.referenceIsIncorrectType)
52
+ // return
53
+ // }
54
+ }
55
+ }
56
+ else if (!t.type && t.$filter) {
57
+ // if(!(await args.target.referenceFilterCondition))
58
+ // error(args, ParseError.referenceIsIncorrectType, )
59
+ // return
60
+ }
61
+ }
62
+ }
63
+ if (typeMatches === false) {
64
+ args.error(error_1.ParseError.referenceIsIncorrectType);
65
+ return;
66
+ }
67
+ }
68
+ args.collect();
69
+ };
70
+ exports.reference = reference;
71
+ const references = async (args) => {
72
+ const { value } = args;
73
+ if (typeof value !== 'object' || value === null) {
74
+ args.error(error_1.ParseError.incorrectFormat);
75
+ return;
76
+ }
77
+ args.stop();
78
+ if (Array.isArray(value)) {
79
+ const parseValues = await Promise.all(value.map(async (id, key) => {
80
+ const n = args.create({
81
+ value: id,
82
+ key,
83
+ skipCollection: true,
84
+ });
85
+ await (0, exports.reference)(n);
86
+ return n.value;
87
+ }));
88
+ args.value = { $value: parseValues };
89
+ }
90
+ else {
91
+ for (const key in args.value) {
92
+ if (key === '$add') {
93
+ args.value.$add = await parseOperator(args, key);
94
+ }
95
+ else if (key === '$remove') {
96
+ args.value.$remove = await parseOperator(args, key);
97
+ }
98
+ else {
99
+ args.create({ key }).error(error_1.ParseError.fieldDoesNotExist);
100
+ }
101
+ }
102
+ }
103
+ args.collect();
104
+ };
105
+ exports.references = references;
106
+ //# sourceMappingURL=references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../../../src/set/fields/references.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { FieldParser } from '../../walker';
2
+ export declare const set: FieldParser<'set'>;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.set = void 0;
4
+ const error_1 = require("../../error");
5
+ async function parseOperator(args, key) {
6
+ if (Array.isArray(args.value[key])) {
7
+ const n = args.create({
8
+ key,
9
+ skipCollection: true,
10
+ value: args.value[key],
11
+ });
12
+ await n.parse();
13
+ if (n.value?.$value) {
14
+ return n.value.$value;
15
+ }
16
+ return [];
17
+ }
18
+ const n = args.create({
19
+ key,
20
+ skipCollection: true,
21
+ value: args.value[key],
22
+ fieldSchema: args.fieldSchema.items,
23
+ });
24
+ await n.parse();
25
+ return [n.value];
26
+ }
27
+ const set = async (args) => {
28
+ if (typeof args.value !== 'object' || args.value === null) {
29
+ args.error(error_1.ParseError.incorrectFormat);
30
+ return;
31
+ }
32
+ args.stop();
33
+ const isArray = Array.isArray(args.value);
34
+ if (isArray) {
35
+ const newArgs = [];
36
+ for (let i = 0; i < args.value.length; i++) {
37
+ newArgs.push(args.create({
38
+ key: i,
39
+ value: args.value[i],
40
+ fieldSchema: args.fieldSchema.items,
41
+ skipCollection: true,
42
+ }));
43
+ }
44
+ await Promise.all(newArgs.map((args) => args.parse()));
45
+ args.value = { $value: newArgs.map((args) => args.value) };
46
+ }
47
+ else {
48
+ for (const key in args.value) {
49
+ if (key === '$add') {
50
+ args.value.$add = await parseOperator(args, key);
51
+ }
52
+ else if (key === '$remove') {
53
+ args.value.$remove = await parseOperator(args, key);
54
+ }
55
+ else {
56
+ args.create({ key }).error(error_1.ParseError.fieldDoesNotExist);
57
+ }
58
+ }
59
+ }
60
+ args.collect();
61
+ };
62
+ exports.set = set;
63
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/set/fields/set.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AAGxC,KAAK,UAAU,aAAa,CAC1B,IAAyB,EACzB,GAAW;IAEX,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACpB,GAAG;YACH,cAAc,EAAE,IAAI;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;SACvB,CAAC,CAAA;QACF,MAAM,CAAC,CAAC,KAAK,EAAE,CAAA;QACf,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE;YACnB,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAA;SACtB;QACD,OAAO,EAAE,CAAA;KACV;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACpB,GAAG;QACH,cAAc,EAAE,IAAI;QACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACtB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;KACpC,CAAC,CAAA;IACF,MAAM,CAAC,CAAC,KAAK,EAAE,CAAA;IACf,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAClB,CAAC;AAEM,MAAM,GAAG,GAAuB,KAAK,EAAE,IAAI,EAAE,EAAE;IACpD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;QACzD,IAAI,CAAC,KAAK,CAAC,kBAAU,CAAC,eAAe,CAAC,CAAA;QACtC,OAAM;KACP;IACD,IAAI,CAAC,IAAI,EAAE,CAAA;IACX,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzC,IAAI,OAAO,EAAE;QACX,MAAM,OAAO,GAAoC,EAAE,CAAA;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,OAAO,CAAC,IAAI,CACV,IAAI,CAAC,MAAM,CAAC;gBACV,GAAG,EAAE,CAAC;gBACN,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;gBACnC,cAAc,EAAE,IAAI;aACrB,CAAC,CACH,CAAA;SACF;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACtD,IAAI,CAAC,KAAK,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;KAC3D;SAAM;QACL,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;YAC5B,IAAI,GAAG,KAAK,MAAM,EAAE;gBAClB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;aACjD;iBAAM,IAAI,GAAG,KAAK,SAAS,EAAE;gBAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;aACpD;iBAAM;gBACL,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAU,CAAC,iBAAiB,CAAC,CAAA;aACzD;SACF;KACF;IACD,IAAI,CAAC,OAAO,EAAE,CAAA;AAChB,CAAC,CAAA;AAjCY,QAAA,GAAG,OAiCf"}
@@ -0,0 +1,3 @@
1
+ import { FieldParser } from '../../walker';
2
+ export declare const string: FieldParser<'string'>;
3
+ export declare const text: FieldParser<'text'>;
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.text = exports.string = void 0;
7
+ const error_1 = require("../../error");
8
+ const validator_1 = __importDefault(require("validator"));
9
+ const utils_1 = require("@saulx/utils");
10
+ const formatPatterns = {
11
+ email: validator_1.default.isEmail,
12
+ URL: validator_1.default.isURL,
13
+ MACAddress: validator_1.default.isMACAddress,
14
+ IP: validator_1.default.isIP,
15
+ IPRange: validator_1.default.isIPRange,
16
+ FQDN: validator_1.default.isFQDN,
17
+ IBAN: validator_1.default.isIBAN,
18
+ BIC: validator_1.default.isBIC,
19
+ alpha: validator_1.default.isAlpha,
20
+ alphaLocales: validator_1.default.isAlphaLocales,
21
+ alphanumeric: validator_1.default.isAlphanumeric,
22
+ alphanumericLocales: validator_1.default.isAlphanumericLocales,
23
+ passportNumber: validator_1.default.isPassportNumber,
24
+ port: validator_1.default.isPort,
25
+ lowercase: validator_1.default.isLowercase,
26
+ uppercase: validator_1.default.isUppercase,
27
+ ascii: validator_1.default.isAscii,
28
+ semVer: validator_1.default.isSemVer,
29
+ surrogatePair: validator_1.default.isSurrogatePair,
30
+ IMEI: validator_1.default.isIMEI,
31
+ hexadecimal: validator_1.default.isHexadecimal,
32
+ octal: validator_1.default.isOctal,
33
+ hexColor: validator_1.default.isHexColor,
34
+ rgbColor: validator_1.default.isRgbColor,
35
+ HSL: validator_1.default.isHSL,
36
+ ISRC: validator_1.default.isISRC,
37
+ MD5: validator_1.default.isMD5,
38
+ JWT: validator_1.default.isJWT,
39
+ UUID: validator_1.default.isUUID,
40
+ luhnNumber: validator_1.default.isLuhnNumber,
41
+ creditCard: validator_1.default.isCreditCard,
42
+ identityCard: validator_1.default.isIdentityCard,
43
+ EAN: validator_1.default.isEAN,
44
+ ISIN: validator_1.default.isISIN,
45
+ ISBN: validator_1.default.isISBN,
46
+ ISSN: validator_1.default.isISSN,
47
+ mobilePhone: validator_1.default.isMobilePhone,
48
+ mobilePhoneLocales: validator_1.default.isMobilePhoneLocales,
49
+ postalCode: validator_1.default.isPostalCode,
50
+ postalCodeLocales: validator_1.default.isPostalCodeLocales,
51
+ ethereumAddress: validator_1.default.isEthereumAddress,
52
+ currency: validator_1.default.isCurrency,
53
+ btcAddress: validator_1.default.isBtcAddress,
54
+ ISO6391: validator_1.default.isISO6391,
55
+ ISO8601: validator_1.default.isISO8601,
56
+ RFC3339: validator_1.default.isRFC3339,
57
+ ISO31661Alpha2: validator_1.default.isISO31661Alpha2,
58
+ ISO31661Alpha3: validator_1.default.isISO31661Alpha3,
59
+ ISO4217: validator_1.default.isISO4217,
60
+ base32: validator_1.default.isBase32,
61
+ base58: validator_1.default.isBase58,
62
+ base64: validator_1.default.isBase64,
63
+ dataURI: validator_1.default.isDataURI,
64
+ magnetURI: validator_1.default.isMagnetURI,
65
+ mimeType: validator_1.default.isMimeType,
66
+ latLong: validator_1.default.isLatLong,
67
+ slug: validator_1.default.isSlug,
68
+ strongPassword: validator_1.default.isStrongPassword,
69
+ taxID: validator_1.default.isTaxID,
70
+ licensePlate: validator_1.default.isLicensePlate,
71
+ VAT: validator_1.default.isVAT,
72
+ };
73
+ const validateString = (args, value) => {
74
+ if (typeof value !== 'string') {
75
+ args.error(error_1.ParseError.incorrectFormat);
76
+ return false;
77
+ }
78
+ if (args.fieldSchema.minLength && value.length < args.fieldSchema.minLength) {
79
+ args.error(error_1.ParseError.subceedsMinimum);
80
+ return false;
81
+ }
82
+ if (args.fieldSchema.maxLength && value.length > args.fieldSchema.maxLength) {
83
+ args.error(error_1.ParseError.exceedsMaximum);
84
+ return false;
85
+ }
86
+ if (args.fieldSchema.pattern) {
87
+ const re = new RegExp(args.fieldSchema.pattern);
88
+ if (!re.test(value)) {
89
+ args.error(error_1.ParseError.incorrectFormat);
90
+ return false;
91
+ }
92
+ }
93
+ if (args.fieldSchema.format &&
94
+ !formatPatterns[args.fieldSchema.format](value)) {
95
+ args.error(error_1.ParseError.incorrectFormat);
96
+ return false;
97
+ }
98
+ return true;
99
+ };
100
+ const string = async (args) => {
101
+ if (!validateString(args, args.value)) {
102
+ return;
103
+ }
104
+ args.collect();
105
+ };
106
+ exports.string = string;
107
+ async function next(args, key) {
108
+ const valueArgs = args.create({
109
+ key,
110
+ value: args.value[key],
111
+ skipCollection: true,
112
+ });
113
+ await valueArgs.parse();
114
+ return valueArgs.value;
115
+ }
116
+ const text = async (args) => {
117
+ const value = args.value;
118
+ if (value !== null && typeof value === 'object') {
119
+ args.stop();
120
+ const result = {};
121
+ for (const key in value) {
122
+ if (key === '$value') {
123
+ const nValue = await next(args, key);
124
+ if (typeof nValue.value === 'object') {
125
+ (0, utils_1.deepMerge)(result, nValue.value);
126
+ }
127
+ }
128
+ else if (key === '$default') {
129
+ result.$default = await next(args, key);
130
+ }
131
+ else if (args.schema.languages.includes(key)) {
132
+ if (value[key] && typeof value[key] === 'object') {
133
+ for (const k in value[key]) {
134
+ if (k === '$value') {
135
+ if (!validateString(args, value[key].$value)) {
136
+ args.create({ key }).error(error_1.ParseError.incorrectFormat);
137
+ }
138
+ else {
139
+ result[key] = value[key].$value;
140
+ }
141
+ }
142
+ else if (k === '$default') {
143
+ if (!validateString(args, value[key].$default)) {
144
+ args.create({ key }).error(error_1.ParseError.incorrectFormat);
145
+ }
146
+ else {
147
+ (0, utils_1.setByPath)(result, ['$default', key], value[key].$default);
148
+ }
149
+ }
150
+ else {
151
+ args
152
+ .create({ path: [...args.path, key, k] })
153
+ .error(error_1.ParseError.fieldDoesNotExist);
154
+ }
155
+ }
156
+ }
157
+ else {
158
+ if (!validateString(args, args.value[key])) {
159
+ args.error(error_1.ParseError.incorrectFormat);
160
+ return;
161
+ }
162
+ result[key] = args.value[key];
163
+ }
164
+ }
165
+ else {
166
+ args.create({ key }).error(error_1.ParseError.languageNotSupported);
167
+ }
168
+ }
169
+ args.collect(result);
170
+ return;
171
+ }
172
+ if (typeof value !== 'string') {
173
+ args.error(error_1.ParseError.incorrectFormat);
174
+ return;
175
+ }
176
+ if (!args.target.$language) {
177
+ args.error(error_1.ParseError.noLanguageFound);
178
+ return;
179
+ }
180
+ if (!validateString(args, args.value)) {
181
+ args.error(error_1.ParseError.incorrectFormat);
182
+ return;
183
+ }
184
+ args.value = {
185
+ [args.target.$language]: value,
186
+ };
187
+ args.collect();
188
+ };
189
+ exports.text = text;
190
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../../src/set/fields/string.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,2 @@
1
- import { BasedSchemaField, BasedSchemaType, BasedSetHandlers, BasedSchema, BasedSetTarget, BasedSetOptionalHandlers } from '../types';
2
- export declare const fieldWalker: (path: (string | number)[], value: any, fieldSchema: BasedSchemaField, typeSchema: BasedSchemaType, target: BasedSetTarget, handlers: BasedSetHandlers, noCollect?: boolean) => Promise<void>;
3
- export declare const setWalker: (schema: BasedSchema, value: {
4
- [key: string]: any;
5
- }, inHandlers: BasedSetOptionalHandlers) => Promise<BasedSetTarget>;
1
+ import { BasedSchema, BasedSetTarget } from '../types';
2
+ export declare const setWalker: (schema: BasedSchema, value: any) => Promise<BasedSetTarget>;
package/dist/set/index.js CHANGED
@@ -1,140 +1,115 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.setWalker = exports.fieldWalker = void 0;
7
- const error_1 = require("./error");
8
- const parsers_1 = __importDefault(require("./parsers"));
9
- const fieldWalker = async (path, value, fieldSchema, typeSchema, target, handlers, noCollect) => {
10
- if ('$ref' in fieldSchema) {
11
- // TODO: when we have this it has to get it from the schema and redo the parsing with the correct fieldSchema
12
- return;
13
- }
14
- const valueType = typeof value;
15
- const valueIsObject = value && valueType === 'object';
16
- if (valueIsObject && value.$delete === true) {
17
- if (!noCollect) {
18
- handlers.collect({ path, value, typeSchema, fieldSchema, target });
19
- }
20
- return;
21
- }
22
- const typeDef = fieldSchema.type ?? ('enum' in fieldSchema ? 'enum' : '');
23
- if (!typeDef) {
24
- (0, error_1.error)(handlers, error_1.ParseError.fieldDoesNotExist, path);
25
- }
26
- if ('customValidator' in fieldSchema) {
27
- const customValidator = fieldSchema.customValidator;
28
- if (!(await customValidator(value, path, target))) {
29
- (0, error_1.error)(handlers, error_1.ParseError.incorrectFormat, path);
30
- }
31
- }
32
- const parse = parsers_1.default[typeDef];
33
- await parse(path, value, fieldSchema, typeSchema, target, handlers, noCollect);
34
- return;
35
- };
36
- exports.fieldWalker = fieldWalker;
37
- const setWalker = async (schema, value, inHandlers) => {
38
- let errors;
39
- const collect = [];
40
- const x = { ...inHandlers };
41
- if (!('collectErrors' in x)) {
42
- errors = [];
43
- x.collectErrors = (info) => {
44
- errors.push(info);
3
+ exports.setWalker = void 0;
4
+ const error_1 = require("../error");
5
+ const walker_1 = require("../walker");
6
+ const fields_1 = require("./fields");
7
+ const isValidId_1 = require("./isValidId");
8
+ const opts = {
9
+ parsers: {
10
+ keys: {
11
+ $id: async (args) => {
12
+ if (!(0, isValidId_1.isValidId)(args.schema, args.value)) {
13
+ args.error(error_1.ParseError.incorrectFormat);
14
+ return;
15
+ }
16
+ },
17
+ $language: async (args) => {
18
+ if (!args.schema.languages.includes(args.value)) {
19
+ args.error(error_1.ParseError.languageNotSupported);
20
+ return;
21
+ }
22
+ },
23
+ $value: async (args) => {
24
+ const type = args.fieldSchema?.type;
25
+ if (type === 'text') {
26
+ return;
27
+ }
28
+ args.stop();
29
+ if (args.prev.value.$default) {
30
+ args.error(error_1.ParseError.valueAndDefault);
31
+ return;
32
+ }
33
+ return { path: args.path.slice(0, -1) };
34
+ },
35
+ $default: async (args) => {
36
+ const type = args.fieldSchema?.type;
37
+ if (type === 'number' || type === 'integer' || type === 'text') {
38
+ // default can exist with $incr and $decr
39
+ return;
40
+ }
41
+ args.prev.stop();
42
+ const newArgs = args.create({
43
+ path: args.path.slice(0, -1),
44
+ skipCollection: true,
45
+ });
46
+ await newArgs.parse();
47
+ for (const key in args.prev.value) {
48
+ if (key !== '$default') {
49
+ args.prev.create({ key }).error(error_1.ParseError.fieldDoesNotExist);
50
+ }
51
+ }
52
+ newArgs.skipCollection = false;
53
+ newArgs.value = { $default: newArgs.value };
54
+ newArgs.collect();
55
+ },
56
+ },
57
+ fields: fields_1.fields,
58
+ catch: async (args) => {
59
+ args.error(error_1.ParseError.fieldDoesNotExist);
60
+ },
61
+ },
62
+ init: async (value, schema, error) => {
63
+ let type;
64
+ const target = {
65
+ type,
66
+ schema,
67
+ required: [],
68
+ collected: [],
69
+ errors: [],
45
70
  };
46
- }
47
- let prevCollect;
48
- if (!('collect' in x)) {
49
- x.collect = (info) => {
50
- collect.push(info);
51
- };
52
- }
53
- else {
54
- prevCollect = x.collect;
55
- x.collect = (info) => {
56
- collect.push(info);
57
- };
58
- }
59
- const handlers = x;
60
- let type;
61
- if (value.$id) {
62
- type = schema.prefixToTypeMapping[value.$id.slice(0, 2)];
63
- if (!type) {
64
- (0, error_1.error)(handlers, error_1.ParseError.incorrectNodeType, [value.$id]);
65
- }
66
- }
67
- if (value.type) {
68
- if (type && value.type !== type) {
69
- (0, error_1.error)(handlers, error_1.ParseError.incorrectNodeType, [value.$id, value.type]);
70
- }
71
- type = value.type;
72
- }
73
- const schemaType = schema.types[type];
74
- if (!schemaType) {
75
- (0, error_1.error)(handlers, error_1.ParseError.incorrectNodeType, [type]);
76
- }
77
- const target = {
78
- type,
79
- schema,
80
- required: [],
81
- };
82
- if (value.$language) {
83
- if (!schema.languages.includes(value.$language)) {
84
- (0, error_1.error)(handlers, error_1.ParseError.languageNotSupported, ['$language']);
85
- }
86
- target.$language = value.$language;
87
- }
88
- if (value.$id) {
89
- target.$id = value.$id;
90
- }
91
- else if (value.$alias) {
92
- target.$alias = value.$alias;
93
- }
94
- const q = [];
95
- for (const key in value) {
96
- if (key[0] !== '$' && key !== 'type') {
97
- const fieldSchema = schemaType.fields[key];
98
- if (!fieldSchema) {
99
- (0, error_1.error)(handlers, error_1.ParseError.fieldDoesNotExist, [key]);
71
+ if (value.$id) {
72
+ if (value.$id === 'root') {
73
+ type = 'root';
100
74
  }
101
75
  else {
102
- q.push((0, exports.fieldWalker)([key], value[key], fieldSchema, schemaType, target, handlers));
76
+ type = schema.prefixToTypeMapping[value.$id.slice(0, 2)];
103
77
  }
104
- }
105
- }
106
- await Promise.all(q);
107
- if (schemaType.required) {
108
- for (const req of schemaType.required) {
109
- if (!(req in value)) {
110
- target.required.push([req]);
78
+ if (!type) {
79
+ error(error_1.ParseError.incorrectFieldType, { target });
80
+ return;
111
81
  }
112
82
  }
113
- }
114
- if (target.required?.length) {
115
- const requireDefined = await Promise.all(target.required.map(async (req) => {
116
- return handlers.checkRequiredFields(req);
117
- }));
118
- for (let i = 0; i < requireDefined.length; i++) {
119
- if (!requireDefined[i]) {
120
- const r = target.required[i];
121
- (0, error_1.error)(handlers, error_1.ParseError.requiredFieldNotDefined, r);
83
+ else if (value.$alias) {
84
+ target.$alias = value.$alias;
85
+ }
86
+ if (value.type) {
87
+ if (type && value.type !== type) {
88
+ error(error_1.ParseError.incorrectNodeType, { target });
89
+ return;
122
90
  }
91
+ type = value.type;
123
92
  }
124
- }
125
- if (errors?.length) {
126
- const err = new Error('Errors in in set' +
127
- errors.reduce((str, info) => {
128
- return str + `\n - ${info.message}`;
129
- }, ''));
130
- throw err;
131
- }
132
- if (prevCollect) {
133
- for (const x of collect) {
134
- prevCollect(x);
93
+ const typeSchema = type === 'root' ? schema.root : schema.types[type];
94
+ if (!typeSchema) {
95
+ error(error_1.ParseError.incorrectNodeType, { target });
96
+ return;
135
97
  }
136
- }
137
- return target;
98
+ target.type = type;
99
+ target.$language = value.$language;
100
+ target.$id = value.$id;
101
+ return { target, typeSchema };
102
+ },
103
+ error: (code, args) => {
104
+ args.target.errors.push({
105
+ code,
106
+ path: args.path ?? [],
107
+ });
108
+ },
109
+ collect: (args) => {
110
+ args.root.target.collected.push(args);
111
+ },
138
112
  };
113
+ const setWalker = (schema, value) => (0, walker_1.walk)(schema, opts, value);
139
114
  exports.setWalker = setWalker;
140
115
  //# sourceMappingURL=index.js.map