Files
klz-cables.com/.pnpm-store/v10/files/7c/8c0acfabea0dc38d86846f1bb83d5828ff694ad87f9e89e3d479cbb70d85c4f843f1bab9625396988927525b7a4b462a6416ff9021b532586557fa5b4fe023
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

145 lines
4.4 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.typesOfSchema = void 0;
const lodash_1 = require("lodash");
const JSONSchema_1 = require("./types/JSONSchema");
/**
* Duck types a JSONSchema schema or property to determine which kind of AST node to parse it into.
*
* Due to what some might say is an oversight in the JSON-Schema spec, a given schema may
* implicitly be an *intersection* of multiple JSON-Schema directives (ie. multiple TypeScript
* types). The spec leaves it up to implementations to decide what to do with this
* loosely-defined behavior.
*/
function typesOfSchema(schema) {
// tsType is an escape hatch that supercedes all other directives
if (schema.tsType) {
return new Set(['CUSTOM_TYPE']);
}
// Collect matched types
const matchedTypes = new Set();
for (const [schemaType, f] of Object.entries(matchers)) {
if (f(schema)) {
matchedTypes.add(schemaType);
}
}
// Default to an unnamed schema
if (!matchedTypes.size) {
matchedTypes.add('UNNAMED_SCHEMA');
}
return matchedTypes;
}
exports.typesOfSchema = typesOfSchema;
const matchers = {
ALL_OF(schema) {
return 'allOf' in schema;
},
ANY(schema) {
if (Object.keys(schema).length === 0) {
// The empty schema {} validates any value
// @see https://json-schema.org/draft-07/json-schema-core.html#rfc.section.4.3.1
return true;
}
return schema.type === 'any';
},
ANY_OF(schema) {
return 'anyOf' in schema;
},
BOOLEAN(schema) {
if ('enum' in schema) {
return false;
}
if (schema.type === 'boolean') {
return true;
}
if (!(0, JSONSchema_1.isCompound)(schema) && typeof schema.default === 'boolean') {
return true;
}
return false;
},
CUSTOM_TYPE() {
return false; // Explicitly handled before we try to match
},
NAMED_ENUM(schema) {
return 'enum' in schema && 'tsEnumNames' in schema;
},
NAMED_SCHEMA(schema) {
// 8.2.1. The presence of "$id" in a subschema indicates that the subschema constitutes a distinct schema resource within a single schema document.
return '$id' in schema && ('patternProperties' in schema || 'properties' in schema);
},
NEVER(schema) {
return schema === false;
},
NULL(schema) {
return schema.type === 'null';
},
NUMBER(schema) {
if ('enum' in schema) {
return false;
}
if (schema.type === 'integer' || schema.type === 'number') {
return true;
}
if (!(0, JSONSchema_1.isCompound)(schema) && typeof schema.default === 'number') {
return true;
}
return false;
},
OBJECT(schema) {
return (schema.type === 'object' &&
!(0, lodash_1.isPlainObject)(schema.additionalProperties) &&
!schema.allOf &&
!schema.anyOf &&
!schema.oneOf &&
!schema.patternProperties &&
!schema.properties &&
!schema.required);
},
ONE_OF(schema) {
return 'oneOf' in schema;
},
REFERENCE(schema) {
return '$ref' in schema;
},
STRING(schema) {
if ('enum' in schema) {
return false;
}
if (schema.type === 'string') {
return true;
}
if (!(0, JSONSchema_1.isCompound)(schema) && typeof schema.default === 'string') {
return true;
}
return false;
},
TYPED_ARRAY(schema) {
if (schema.type && schema.type !== 'array') {
return false;
}
return 'items' in schema;
},
UNION(schema) {
return Array.isArray(schema.type);
},
UNNAMED_ENUM(schema) {
if ('tsEnumNames' in schema) {
return false;
}
if (schema.type &&
schema.type !== 'boolean' &&
schema.type !== 'integer' &&
schema.type !== 'number' &&
schema.type !== 'string') {
return false;
}
return 'enum' in schema;
},
UNNAMED_SCHEMA() {
return false; // Explicitly handled as the default case
},
UNTYPED_ARRAY(schema) {
return schema.type === 'array' && !('items' in schema);
},
};
//# sourceMappingURL=typesOfSchema.js.map