UNPKG

json-schema-typescript-generator

Version:
82 lines 4.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.collectionGenerator = void 0; const TypeGenerator_1 = require("./TypeGenerator"); const type_generator_1 = require("./type-generator"); const util_1 = require("../util"); const collectionGenerator = (locatedSchema, gatheredInfo, inputInfo) => { const schema = locatedSchema.schema; if (!schema.type || !schema.type.has('array') || !schema.collection) { return; } const collection = schema.collection; const collectionItems = collection.items; if (Array.isArray(collectionItems)) { return tupleGenerator(collectionItems, collection.additionalItems, locatedSchema, gatheredInfo, inputInfo); } else { if (collection.uniqueItems) { const collectionProperties = collectionItems.object?.properties; const key = collectionProperties?.get('key'); const value = collectionProperties?.get('value'); if (isMap(collection) && key && value) { return mapGenerator(key, value, locatedSchema, gatheredInfo, inputInfo); } else { return setGenerator(collectionItems, locatedSchema, gatheredInfo, inputInfo); } } else { return arrayGenerator(collectionItems, locatedSchema, gatheredInfo, inputInfo); } } }; exports.collectionGenerator = collectionGenerator; const isMap = (collection) => { if (!collection.uniqueItems || Array.isArray(collection.items) || collection.additionalItems) { return false; } const element = collection.items; if (!element.object || element.const || element.$ref || element.enum || element.collection || element.allOf || element.anyOf || element.oneOf) { return false; } const object = element.object; return (object.properties.size === 2) && (object.properties.has('key')) && (object.properties.has('value')) && (object.additionalProperties === undefined) && (object.required.size === 2) && (object.required.has('key')) && (object.required.has('value')); }; const arrayGenerator = (items, locatedSchema, gatheredInfo, inputInfo) => { const itemsLocatedSchema = (0, TypeGenerator_1.located)(items, locatedSchema); const itemsType = (0, type_generator_1.typeGenerator)(itemsLocatedSchema, gatheredInfo, inputInfo); return `${itemsType}[]`; }; const setGenerator = (items, locatedSchema, gatheredInfo, inputInfo) => { const itemsLocatedSchema = (0, TypeGenerator_1.located)(items, locatedSchema); const itemsType = (0, type_generator_1.typeGenerator)(itemsLocatedSchema, gatheredInfo, inputInfo); return `Set<${itemsType}>`; }; const mapGenerator = (key, value, locatedSchema, gatheredInfo, inputInfo) => { const keyLocatedSchema = (0, TypeGenerator_1.located)(key, locatedSchema); const valueLocatedSchema = (0, TypeGenerator_1.located)(value, locatedSchema); const keyType = (0, type_generator_1.typeGenerator)(keyLocatedSchema, gatheredInfo, inputInfo); const valueType = (0, type_generator_1.typeGenerator)(valueLocatedSchema, gatheredInfo, inputInfo); return `Map<${keyType}, ${valueType}>`; }; const tupleGenerator = (items, additionalItems, locatedSchema, gatheredInfo, inputInfo) => { const itemTypes = items .map((item) => (0, TypeGenerator_1.located)(item, locatedSchema)) .map((itemLocatedSchema) => (0, type_generator_1.typeGenerator)(itemLocatedSchema, gatheredInfo, inputInfo)); const additionalType = (additionalItems) ? (0, type_generator_1.typeGenerator)((0, TypeGenerator_1.located)(additionalItems, locatedSchema), gatheredInfo, inputInfo) : undefined; const itemsCsv = (0, util_1.filteredJoin)(itemTypes, ', '); const combinedItemsCsv = additionalType ? `${itemsCsv}, ...${additionalType}[]` : `${itemsCsv}`; return `[${combinedItemsCsv}]`; }; //# sourceMappingURL=collection-generator.js.map