source: trip-planner-front/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js@ 6a80231

Last change on this file since 6a80231 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 2.9 KB
Line 
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const dataType_1 = require("../../compile/validate/dataType");
4const codegen_1 = require("../../compile/codegen");
5const util_1 = require("../../compile/util");
6const equal_1 = require("../../runtime/equal");
7const error = {
8 message: ({ params: { i, j } }) => codegen_1.str `must NOT have duplicate items (items ## ${j} and ${i} are identical)`,
9 params: ({ params: { i, j } }) => codegen_1._ `{i: ${i}, j: ${j}}`,
10};
11const def = {
12 keyword: "uniqueItems",
13 type: "array",
14 schemaType: "boolean",
15 $data: true,
16 error,
17 code(cxt) {
18 const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt;
19 if (!$data && !schema)
20 return;
21 const valid = gen.let("valid");
22 const itemTypes = parentSchema.items ? dataType_1.getSchemaTypes(parentSchema.items) : [];
23 cxt.block$data(valid, validateUniqueItems, codegen_1._ `${schemaCode} === false`);
24 cxt.ok(valid);
25 function validateUniqueItems() {
26 const i = gen.let("i", codegen_1._ `${data}.length`);
27 const j = gen.let("j");
28 cxt.setParams({ i, j });
29 gen.assign(valid, true);
30 gen.if(codegen_1._ `${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j));
31 }
32 function canOptimize() {
33 return itemTypes.length > 0 && !itemTypes.some((t) => t === "object" || t === "array");
34 }
35 function loopN(i, j) {
36 const item = gen.name("item");
37 const wrongType = dataType_1.checkDataTypes(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong);
38 const indices = gen.const("indices", codegen_1._ `{}`);
39 gen.for(codegen_1._ `;${i}--;`, () => {
40 gen.let(item, codegen_1._ `${data}[${i}]`);
41 gen.if(wrongType, codegen_1._ `continue`);
42 if (itemTypes.length > 1)
43 gen.if(codegen_1._ `typeof ${item} == "string"`, codegen_1._ `${item} += "_"`);
44 gen
45 .if(codegen_1._ `typeof ${indices}[${item}] == "number"`, () => {
46 gen.assign(j, codegen_1._ `${indices}[${item}]`);
47 cxt.error();
48 gen.assign(valid, false).break();
49 })
50 .code(codegen_1._ `${indices}[${item}] = ${i}`);
51 });
52 }
53 function loopN2(i, j) {
54 const eql = util_1.useFunc(gen, equal_1.default);
55 const outer = gen.name("outer");
56 gen.label(outer).for(codegen_1._ `;${i}--;`, () => gen.for(codegen_1._ `${j} = ${i}; ${j}--;`, () => gen.if(codegen_1._ `${eql}(${data}[${i}], ${data}[${j}])`, () => {
57 cxt.error();
58 gen.assign(valid, false).break(outer);
59 })));
60 }
61 },
62};
63exports.default = def;
64//# sourceMappingURL=uniqueItems.js.map
Note: See TracBrowser for help on using the repository browser.