🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

openapi-to-effect

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

openapi-to-effect - npm Package Compare versions

Comparing version
0.7.2
to
0.8.0
+9
-8
dist/cjs/generation/effSchemGen/schemaGen.cjs

@@ -183,10 +183,11 @@ "use strict";

const optionalParams = {};
const printOptionalParams = optionalParams => {
const printOptional = (code, optionalParams) => {
if (Object.keys(optionalParams).length === 0) {
return '';
return `S.optional(${code})`;
}
return `, {
const paramsFormatted = (0, _tsDedent.dedent)`{
${Object.hasOwn(optionalParams, 'exact') ? `exact: ${optionalParams.exact},` : ''}
${Object.hasOwn(optionalParams, 'default') ? `default: ${optionalParams.default}` : ''}
}`;
return `S.optionalWith(${code}, ${paramsFormatted})`;
};

@@ -203,5 +204,5 @@ const hasDefault = 'default' in propSchema && typeof propSchema.default !== 'undefined';

if (ctx.hooks.optionalFieldRepresentation === 'nullish') {
propCode = `S.optional(S.NullOr(${propCode})${printOptionalParams(optionalParams)})`;
propCode = printOptional(`S.NullOr(${propCode})`, optionalParams);
} else {
propCode = `S.optional(${propCode}${printOptionalParams(optionalParams)})`;
propCode = printOptional(propCode, optionalParams);
}

@@ -236,5 +237,5 @@ }

} else if (additionalPropSchema === true) {
code = `S.Record(S.String, S.Unknown())`;
code = `S.Record({ key: S.String, value: S.Unknown() })`;
} else if (additionalPropSchema === false) {
code = `S.Record(S.Never, S.Never)`;
code = `S.Record({ key: S.Never, value: S.Never })`;
} else {

@@ -244,3 +245,3 @@ const additionalPropsResult = generateForSchema(ctx, additionalPropSchema);

// TODO: also include the `comments` from `additionalPropsResult`?
code = `S.Record(S.String, ${additionalPropsResult.code})`;
code = `S.Record({ key: S.String, value: ${additionalPropsResult.code} })`;
}

@@ -247,0 +248,0 @@ } else {

@@ -1,1 +0,1 @@

{"version":3,"file":"schemaGen.cjs","names":["_tsDedent","require","_GraphAnalyzer","_genUtil","id","GenResultUtil","encodeIdentifier","generateForUnknownSchema","ctx","schema","code","refs","comments","commentsFromSchemaObject","exports","generateForNullSchema","generateForStringSchema","Array","isArray","enum","every","value","TypeError","JSON","stringify","dedent","map","String","join","baseSchema","format","pipe","push","pattern","minLength","maxLength","hookResult","hooks","generateStringType","combineRefs","generatePipe","generateForNumberSchema","type","generateNumberType","minimum","maximum","exclusiveMinimum","exclusiveMaximum","generateForBooleanSchema","Error","propertyNameAsIdentifier","propertyName","test","replaceAll","generateFieldsForObjectSchema","propSchemas","properties","propsRequired","Set","required","Object","entries","propName","propSchema","propIndex","propResult","generateForSchema","commentsGenerated","commentsToCode","propCode","has","optionalParams","printOptionalParams","keys","length","hasOwn","exact","default","hasDefault","optionalFieldRepresentation","propNeedsSeparator","propHeading","propHeadingComment","startsWith","commentBlock","commentInline","trim","generateForObjectSchema","additionalPropSchema","additionalProperties","additionalPropsResult","indexSignature","fieldsGen","generateForArraySchema","itemSchema","items","itemResult","generateForReferenceObject","schemaId","schemaIdFromRef","$ref","shouldSuspend","isSchemaIdBefore","initComments","isNonArraySchemaType","allOf","schemasHead","areAllObjects","reduce","acc","isObjectSchema","schemas","isObject","filter","props","schemasResults","genResult","index","flatMap","oneOf","flat","anyOf","generateSchema","result","schemaAnyOf","schemaNonMixed"],"sources":["../../../../src/generation/effSchemGen/schemaGen.ts"],"sourcesContent":["/* Copyright (c) Fortanix, Inc.\n *\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { dedent } from 'ts-dedent';\nimport { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { OpenApiSchemaId, type OpenApiRef, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport * as GenSpec from '../generationSpec.ts';\nimport { isObjectSchema, schemaIdFromRef } from '../../analysis/GraphAnalyzer.ts';\nimport { type GenResult, GenResultUtil } from './genUtil.ts';\n\n\nconst id = GenResultUtil.encodeIdentifier;\n\nexport type Context = {\n schemas: Record<string, OpenApiSchema>,\n hooks: GenSpec.GenerationHooks,\n isSchemaIdBefore: (schemaId: OpenApiSchemaId) => boolean,\n};\n\nexport const generateForUnknownSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n return {\n code: `S.Unknown`,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForNullSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n return {\n code: `S.Null`,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForStringSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n let refs: GenResult['refs'] = [];\n const code = ((): string => {\n if (Array.isArray(schema.enum)) {\n if (!schema.enum.every(value => typeof value === 'string' || typeof value === 'number')) {\n throw new TypeError(`Unknown enum value, expected string array: ${JSON.stringify(schema.enum)}`);\n }\n return dedent`S.Literal(\n ${schema.enum.map((value: string | number) => JSON.stringify(String(value)) + ',').join('\\n')}\n )`;\n }\n \n let baseSchema = `S.String`;\n switch (schema.format) {\n case 'uuid': baseSchema = `S.UUID`; break;\n //case 'date': baseSchema = `S.Date`; // FIXME: validate lack of time component\n case 'date-time': baseSchema = `S.Date`; break;\n // FIXME: using `S.Base64` will result in `Uint8Array` rather than strings, which will break some downstream\n // consumers.\n //case 'byte': baseSchema = `S.Base64`; break;\n }\n \n let pipe: Array<string> = [baseSchema];\n \n // Note: no built-in validator for emails, see https://github.com/effect-ts/effect/tree/main/packages/schema#email\n if (schema.format === 'email') { pipe.push(`S.pattern(/.+@.+/)`); }\n \n if (typeof schema.pattern === 'string') {\n pipe.push(`S.pattern(new RegExp(${JSON.stringify(schema.pattern)}))`);\n }\n \n if (typeof schema.minLength === 'number') { pipe.push(`S.minLength(${schema.minLength})`); }\n if (typeof schema.maxLength === 'number') { pipe.push(`S.maxLength(${schema.maxLength})`); }\n \n // Run hook\n const hookResult = ctx.hooks.generateStringType?.(schema) ?? null;\n if (hookResult !== null) {\n refs = GenResultUtil.combineRefs(refs, hookResult.refs);\n pipe = [hookResult.code];\n }\n \n //if (schema.nullable) { pipe.push(`S.NullOr`); }\n \n return GenResultUtil.generatePipe(pipe);\n })();\n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForNumberSchema = (\n ctx: Context,\n schema: OpenApi.NonArraySchemaObject,\n): GenResult => {\n let refs: GenResult['refs'] = [];\n const code = ((): string => {\n if (Array.isArray(schema.enum)) {\n if (!schema.enum.every(value => typeof value === 'number')) {\n throw new TypeError(`Unknown enum value, expected number array: ${JSON.stringify(schema.enum)}`);\n }\n return dedent`S.Literal(\n ${schema.enum.map((value: number) => JSON.stringify(value) + ',').join('\\n')}\n )`;\n }\n \n let baseSchema = `S.Number`;\n switch (schema.format) {\n //case 'date': baseSchema = `S.Date`; break; // FIXME: validate lack of time component\n case 'date-time': baseSchema = `S.DateFromNumber.pipe(S.validDate())`; break;\n }\n \n let pipe: Array<string> = [baseSchema];\n if (schema.type === 'integer') { pipe.push(`S.int()`); }\n \n // Run hook\n const hookResult = ctx.hooks.generateNumberType?.(schema) ?? null;\n if (hookResult !== null) {\n refs = GenResultUtil.combineRefs(refs, hookResult.refs);\n pipe = [hookResult.code];\n }\n \n if (typeof schema.minimum === 'number') { pipe.push(`S.greaterThanOrEqualTo(${schema.minimum})`); }\n if (typeof schema.maximum === 'number') { pipe.push(`S.lessThanOrEqualTo(${schema.maximum})`); }\n if (typeof schema.exclusiveMinimum === 'number') { pipe.push(`S.greaterThan(${schema.exclusiveMinimum})`); }\n if (typeof schema.exclusiveMaximum === 'number') { pipe.push(`S.lessThan(${schema.exclusiveMaximum})`); }\n //if (schema.nullable) { pipe.push(`S.NullOr`); }\n \n return GenResultUtil.generatePipe(pipe);\n })();\n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForBooleanSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const code = ((): string => {\n if (Array.isArray(schema.enum)) { throw new Error(`Boolean enum currently not supported`); }\n \n let code = `S.Boolean`;\n //if (schema.nullable) { code = `S.NullOr(${code})`; }\n return code;\n })();\n return {\n code,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\n// Format a property name as valid JS identifier, to be used in a JS object literal\nconst propertyNameAsIdentifier = (propertyName: string): string => {\n if (!(/^[a-zA-Z$_][a-zA-Z0-9$_]*$/g.test(propertyName))) {\n return `'${propertyName.replaceAll(/'/g, '\\\\\\'')}'`;\n }\n\n return propertyName;\n};\n\nexport const generateFieldsForObjectSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const propSchemas: Record<string, OpenApiSchema> = schema.properties ?? {};\n const propsRequired: Set<string> = new Set(schema.required ?? []);\n \n let refs: GenResult['refs'] = [];\n \n const code = Object.entries(propSchemas).map(([propName, propSchema], propIndex) => {\n const propResult = generateForSchema(ctx, propSchema);\n \n // Merge refs\n refs = GenResultUtil.combineRefs(refs, propResult.refs);\n \n const commentsGenerated = GenResultUtil.commentsToCode(propResult.comments);\n let propCode = propResult.code;\n \n // If the prop is optional, mark it as `S.optional()`\n if (!propsRequired.has(propName)) {\n type OptionalParams = { exact?: boolean, default?: string };\n const optionalParams: OptionalParams = {};\n const printOptionalParams = (optionalParams: OptionalParams): string => {\n if (Object.keys(optionalParams).length === 0) { return ''; }\n return `, {\n ${Object.hasOwn(optionalParams, 'exact') ? `exact: ${optionalParams.exact},` : ''}\n ${Object.hasOwn(optionalParams, 'default') ? `default: ${optionalParams.default}` : ''}\n }`;\n };\n \n const hasDefault = 'default' in propSchema && typeof propSchema.default !== 'undefined';\n if (hasDefault) {\n if (typeof propSchema.default === 'object' && propSchema.default !== null) {\n // Add parens for object literals when used as arrow function return value\n optionalParams.default = `() => (${JSON.stringify(propSchema.default)})`;\n } else {\n optionalParams.default = `() => ${JSON.stringify(propSchema.default)}`;\n }\n }\n \n if (ctx.hooks.optionalFieldRepresentation === 'nullish') {\n propCode = `S.optional(S.NullOr(${propCode})${printOptionalParams(optionalParams)})`;\n } else {\n propCode = `S.optional(${propCode}${printOptionalParams(optionalParams)})`;\n }\n }\n \n // Handle (custom/hacked in) `x-heading` fields to group certain fields with a heading comment\n const propNeedsSeparator = propIndex > 0 && 'x-heading' in propSchema;\n const propHeading: null | string = 'x-heading' in propSchema ? propSchema['x-heading'] as string : null;\n const propHeadingComment: null | string = propHeading !== null && propHeading.startsWith('//')\n ? propHeading\n : null;\n \n return (propNeedsSeparator ? '\\n\\n' : '') + dedent`\n ${propHeadingComment ?? ''}${commentsGenerated.commentBlock ? `\\n${commentsGenerated.commentBlock}` : ''}\n ${propertyNameAsIdentifier(propName)}: ${propCode}, ${commentsGenerated.commentInline}\n `.trim();\n }).join('\\n');\n \n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\nexport const generateForObjectSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const propSchemas: Record<string, OpenApiSchema> = schema.properties ?? {};\n \n let refs: GenResult['refs'] = [];\n \n const code = ((): string => {\n let code = '';\n if (Object.keys(propSchemas).length === 0) {\n const additionalPropSchema = schema.additionalProperties;\n if (typeof additionalPropSchema === 'undefined') {\n code = `S.Struct({})`;\n } else if (additionalPropSchema === true) {\n code = `S.Record(S.String, S.Unknown())`;\n } else if (additionalPropSchema === false) {\n code = `S.Record(S.Never, S.Never)`;\n } else {\n const additionalPropsResult = generateForSchema(ctx, additionalPropSchema);\n refs = GenResultUtil.combineRefs(refs, additionalPropsResult.refs);\n // TODO: also include the `comments` from `additionalPropsResult`?\n code = `S.Record(S.String, ${additionalPropsResult.code})`;\n }\n } else {\n let indexSignature = '';\n if (typeof schema.additionalProperties !== 'undefined') {\n if (schema.additionalProperties === false) {\n // No equivalent for this on a schema level, requires the consumer to use `onExcessProperty: \"error\"`\n // https://github.com/Effect-TS/effect/tree/main/packages/schema#strict\n } else if (schema.additionalProperties === true) {\n // No equivalent for this on a schema level, requires the consumer to use `onExcessProperty: \"preserve\"`\n // https://github.com/Effect-TS/effect/tree/main/packages/schema#passthrough\n } else {\n const additionalPropsResult = generateForSchema(ctx, schema.additionalProperties);\n refs = GenResultUtil.combineRefs(refs, additionalPropsResult.refs);\n \n // https://github.com/Effect-TS/effect/tree/main/packages/schema#index-signatures\n // TODO: also include the `comments` from `additionalPropsResult`?\n indexSignature = `{ key: S.String, value: ${additionalPropsResult.code} }`;\n }\n }\n \n const fieldsGen = generateFieldsForObjectSchema(ctx, schema);\n refs = GenResultUtil.combineRefs(refs, fieldsGen.refs);\n code = dedent`\n S.Struct({\\n\n ${fieldsGen.code}\n }${indexSignature ? `, ${indexSignature}` : ''})\n `;\n }\n return code;\n })();\n \n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForArraySchema = (ctx: Context, schema: OpenApi.ArraySchemaObject): GenResult => {\n const itemSchema: OpenApiSchema = schema.items;\n const itemResult = generateForSchema(ctx, itemSchema);\n \n const code = ((): string => {\n let code = `S.Array(${itemResult.code})`;\n if (typeof schema.minLength === 'number') { code = `${code}.min(${schema.minLength})`; }\n if (typeof schema.maxLength === 'number') { code = `${code}.max(${schema.maxLength})`; }\n //if (schema.nullable) { code = `S.NullOr(${code})`; }\n return code;\n })();\n \n // FIXME: include the comments for `itemSchema` as well?\n return {\n code,\n refs: itemResult.refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForReferenceObject = (ctx: Context, schema: OpenApi.ReferenceObject): GenResult => {\n // FIXME: make this logic customizable (allow a callback to resolve a `$ref` string to a `Ref` instance?)\n const schemaId = schemaIdFromRef(schema.$ref);\n \n // If the referenced schema ID is topologically after the current one, wrap it in `S.suspend` for lazy eval\n const shouldSuspend = !ctx.isSchemaIdBefore(schemaId);\n const code = shouldSuspend\n ? `S.suspend((): S.Schema<_${id(schemaId)}, _${id(schemaId)}Encoded> => ${id(schemaId)})`\n : id(schemaId);\n \n return { code, refs: [`./${schemaId}.ts`], comments: GenResultUtil.initComments() };\n};\n\n// Generate the @effect/schema code for the given OpenAPI schema\nexport const generateForSchema = (ctx: Context, schema: OpenApiSchema): GenResult => {\n const isNonArraySchemaType = (schema: OpenApiSchema): schema is OpenApi.NonArraySchemaObject => {\n return !('$ref' in schema) && (!('type' in schema) || !Array.isArray(schema.type));\n };\n \n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n return generateForReferenceObject(ctx, schema);\n } else { // Case: OpenApi.SchemaObject\n if (schema.type === 'array' || 'items' in schema) { // Case: OpenApi.ArraySchemaObject\n return generateForArraySchema(ctx, { items: {}, ...schema } as OpenApi.ArraySchemaObject);\n } else { // Case: OpenApi.NonArraySchemaObject | OpenApi.MixedSchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n const schemasHead: undefined | OpenApiSchema = schema.allOf[0];\n if (schemasHead && schema.allOf.length === 1) { // If only one schema, simply generate that schema\n return generateForSchema(ctx, schemasHead);\n }\n \n // `allOf` supports any type, but `@effect/schema` does not currently support generic intersections. Thus,\n // currently we only support `allOf` if it consists only of object schemas.\n // Idea: merge `allOf` schema first, e.g. using https://github.com/mokkabonna/json-schema-merge-allof\n const areAllObjects: boolean = schema.allOf.reduce(\n (acc, schema) => {\n if ('$ref' in schema) {\n return acc && isObjectSchema(ctx.schemas, schema.$ref);\n }\n \n const isObject = isNonArraySchemaType(schema) && schema.type === 'object';\n return acc && isObject;\n },\n true,\n );\n \n /*\n if (!areAllObjects) {\n throw new Error(dedent`\n Found \\`allOf\\` with a non-object schema. Currently only object schemas or unions of object schemas are\n supported.\n `);\n }\n */\n \n const schemas: Array<OpenApiSchema> = schema.allOf\n // Filter out empty schemas\n // XXX this only makes sense when all schemas are objects, would not work if we supported generic `allOf`\n .filter((schema: OpenApiSchema) => {\n if (!isNonArraySchemaType(schema) || schema.type !== 'object') { return true; }\n \n const props = schema.properties ?? {};\n if (Object.keys(props).length === 0 && !schema.additionalProperties) {\n return false;\n } else {\n return true;\n }\n });\n \n if (typeof schemasHead === 'undefined') {\n // XXX this only works for object schemas, as in `S.extend()`, would not work if we support generic `allOf`\n return generateForObjectSchema(ctx, { type: 'object' }); // Empty `allOf`\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n let code = '';\n let schemasResults: Array<GenResult>;\n if (areAllObjects) {\n // Experimental: using `...MySchema.fields` to combine struct schemas.\n // Note: doesn't work if `MySchema` is a union of structs\n \n schemasResults = schemas.map(schema => {\n const genResult = generateForSchema(ctx, schema);\n if ('$ref' in schema) {\n genResult.code = `...${genResult.code}.fields,`;\n } else if (isNonArraySchemaType(schema)) {\n genResult.code = generateFieldsForObjectSchema(ctx, schema).code;\n }\n return genResult;\n });\n \n code = dedent`\n S.Struct({\n ${schemasResults\n .map(({ code, comments }, index) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${commentsGenerated.commentInline}\n ${code}\n `.trim();\n })\n .join('\\n')\n }\n })\n `;\n } else {\n schemasResults = schemas.map(schema => generateForSchema(ctx, schema));\n \n // Note: `extend` doesn't quite cover the semantics of `allOf`, since it only accepts objects and\n // assumes distinct types. However, @effect/schema has no generic built-in mechanism for this.\n code = dedent`\n pipe(\n ${schemasResults\n .map(({ code, comments }, index) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${index > 0 ? `S.extend(${code})` : code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n }\n \n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.flatMap(({ refs }) => refs)),\n comments: GenResultUtil.initComments(),\n };\n }\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n const schemas: Array<OpenApiSchema> = schema.oneOf;\n const schemasHead: undefined | OpenApiSchema = schemas[0];\n if (typeof schemasHead === 'undefined') {\n throw new TypeError(`oneOf must have at least one schema`);\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n const schemasResults: Array<GenResult> = schemas.map(schema => generateForSchema(ctx, schema));\n // Note: `union` doesn't quite cover the semantics of `oneOf`, since `oneOf` must guarantee that exactly\n // one schema matches. However, @effect/schema has no easy built-in mechanism for this.\n const code = dedent`\n S.Union(\n ${schemasResults\n .map(({ code, comments }) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.map(({ refs }) => refs).flat()),\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n }\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n const schemas: Array<OpenApiSchema> = schema.anyOf;\n const schemasHead: undefined | OpenApiSchema = schemas[0];\n if (typeof schemasHead === 'undefined') {\n throw new TypeError(`anyOf must have at least one schema`);\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n const schemasResults: Array<GenResult> = schemas.map(schema => generateForSchema(ctx, schema));\n const code = dedent`\n S.Union(\n ${schemasResults\n .map(({ code, comments }) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.map(({ refs }) => refs).flat()),\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n }\n }\n \n type SchemaType = 'array' | OpenApi.NonArraySchemaObjectType;\n const type: undefined | OpenApi.NonArraySchemaObjectType | Array<SchemaType> = schema.type;\n \n const hookResult: null | GenResult = ctx.hooks.generateSchema?.(schema) ?? null;\n \n let result: GenResult;\n if (hookResult !== null) {\n result = hookResult;\n } else {\n if (typeof type === 'undefined') {\n result = generateForUnknownSchema(ctx, schema as OpenApi.NonArraySchemaObject); // Any type\n } else if (Array.isArray(type)) {\n // `type` as an array is equivalent to `anyOf` with `type` set to the individual type string\n const schemaAnyOf = { anyOf: type.map(type => ({ ...schema, type })) } as OpenApiSchema;\n result = generateForSchema(ctx, schemaAnyOf);\n } else {\n const schemaNonMixed = schema as OpenApi.NonArraySchemaObject;\n switch (type) {\n case 'null': result = generateForNullSchema(ctx, schemaNonMixed); break;\n case 'string': result = generateForStringSchema(ctx, schemaNonMixed); break;\n case 'number': result = generateForNumberSchema(ctx, schemaNonMixed); break;\n case 'integer': result = generateForNumberSchema(ctx, schemaNonMixed); break;\n case 'boolean': result = generateForBooleanSchema(ctx, schemaNonMixed); break;\n case 'object': result = generateForObjectSchema(ctx, schemaNonMixed); break;\n default: throw new TypeError(`Unsupported type \"${type}\"`);\n }\n }\n }\n return {\n ...result,\n code: `${result.code}`,\n };\n }\n }\n};\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"schemaGen.cjs","names":["_tsDedent","require","_GraphAnalyzer","_genUtil","id","GenResultUtil","encodeIdentifier","generateForUnknownSchema","ctx","schema","code","refs","comments","commentsFromSchemaObject","exports","generateForNullSchema","generateForStringSchema","Array","isArray","enum","every","value","TypeError","JSON","stringify","dedent","map","String","join","baseSchema","format","pipe","push","pattern","minLength","maxLength","hookResult","hooks","generateStringType","combineRefs","generatePipe","generateForNumberSchema","type","generateNumberType","minimum","maximum","exclusiveMinimum","exclusiveMaximum","generateForBooleanSchema","Error","propertyNameAsIdentifier","propertyName","test","replaceAll","generateFieldsForObjectSchema","propSchemas","properties","propsRequired","Set","required","Object","entries","propName","propSchema","propIndex","propResult","generateForSchema","commentsGenerated","commentsToCode","propCode","has","optionalParams","printOptional","keys","length","paramsFormatted","hasOwn","exact","default","hasDefault","optionalFieldRepresentation","propNeedsSeparator","propHeading","propHeadingComment","startsWith","commentBlock","commentInline","trim","generateForObjectSchema","additionalPropSchema","additionalProperties","additionalPropsResult","indexSignature","fieldsGen","generateForArraySchema","itemSchema","items","itemResult","generateForReferenceObject","schemaId","schemaIdFromRef","$ref","shouldSuspend","isSchemaIdBefore","initComments","isNonArraySchemaType","allOf","schemasHead","areAllObjects","reduce","acc","isObjectSchema","schemas","isObject","filter","props","schemasResults","genResult","index","flatMap","oneOf","flat","anyOf","generateSchema","result","schemaAnyOf","schemaNonMixed"],"sources":["../../../../src/generation/effSchemGen/schemaGen.ts"],"sourcesContent":["/* Copyright (c) Fortanix, Inc.\n *\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { dedent } from 'ts-dedent';\nimport { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { type OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport * as GenSpec from '../generationSpec.ts';\nimport { isObjectSchema, schemaIdFromRef } from '../../analysis/GraphAnalyzer.ts';\nimport { type GenResult, GenResultUtil } from './genUtil.ts';\n\n\nconst id = GenResultUtil.encodeIdentifier;\n\nexport type Context = {\n schemas: Record<string, OpenApiSchema>,\n hooks: GenSpec.GenerationHooks,\n isSchemaIdBefore: (schemaId: OpenApiSchemaId) => boolean,\n};\n\nexport const generateForUnknownSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n return {\n code: `S.Unknown`,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForNullSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n return {\n code: `S.Null`,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForStringSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n let refs: GenResult['refs'] = [];\n const code = ((): string => {\n if (Array.isArray(schema.enum)) {\n if (!schema.enum.every(value => typeof value === 'string' || typeof value === 'number')) {\n throw new TypeError(`Unknown enum value, expected string array: ${JSON.stringify(schema.enum)}`);\n }\n return dedent`S.Literal(\n ${schema.enum.map((value: string | number) => JSON.stringify(String(value)) + ',').join('\\n')}\n )`;\n }\n \n let baseSchema = `S.String`;\n switch (schema.format) {\n case 'uuid': baseSchema = `S.UUID`; break;\n //case 'date': baseSchema = `S.Date`; // FIXME: validate lack of time component\n case 'date-time': baseSchema = `S.Date`; break;\n // FIXME: using `S.Base64` will result in `Uint8Array` rather than strings, which will break some downstream\n // consumers.\n //case 'byte': baseSchema = `S.Base64`; break;\n }\n \n let pipe: Array<string> = [baseSchema];\n \n // Note: no built-in validator for emails, see https://github.com/effect-ts/effect/tree/main/packages/schema#email\n if (schema.format === 'email') { pipe.push(`S.pattern(/.+@.+/)`); }\n \n if (typeof schema.pattern === 'string') {\n pipe.push(`S.pattern(new RegExp(${JSON.stringify(schema.pattern)}))`);\n }\n \n if (typeof schema.minLength === 'number') { pipe.push(`S.minLength(${schema.minLength})`); }\n if (typeof schema.maxLength === 'number') { pipe.push(`S.maxLength(${schema.maxLength})`); }\n \n // Run hook\n const hookResult = ctx.hooks.generateStringType?.(schema) ?? null;\n if (hookResult !== null) {\n refs = GenResultUtil.combineRefs(refs, hookResult.refs);\n pipe = [hookResult.code];\n }\n \n //if (schema.nullable) { pipe.push(`S.NullOr`); }\n \n return GenResultUtil.generatePipe(pipe);\n })();\n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForNumberSchema = (\n ctx: Context,\n schema: OpenApi.NonArraySchemaObject,\n): GenResult => {\n let refs: GenResult['refs'] = [];\n const code = ((): string => {\n if (Array.isArray(schema.enum)) {\n if (!schema.enum.every(value => typeof value === 'number')) {\n throw new TypeError(`Unknown enum value, expected number array: ${JSON.stringify(schema.enum)}`);\n }\n return dedent`S.Literal(\n ${schema.enum.map((value: number) => JSON.stringify(value) + ',').join('\\n')}\n )`;\n }\n \n let baseSchema = `S.Number`;\n switch (schema.format) {\n //case 'date': baseSchema = `S.Date`; break; // FIXME: validate lack of time component\n case 'date-time': baseSchema = `S.DateFromNumber.pipe(S.validDate())`; break;\n }\n \n let pipe: Array<string> = [baseSchema];\n if (schema.type === 'integer') { pipe.push(`S.int()`); }\n \n // Run hook\n const hookResult = ctx.hooks.generateNumberType?.(schema) ?? null;\n if (hookResult !== null) {\n refs = GenResultUtil.combineRefs(refs, hookResult.refs);\n pipe = [hookResult.code];\n }\n \n if (typeof schema.minimum === 'number') { pipe.push(`S.greaterThanOrEqualTo(${schema.minimum})`); }\n if (typeof schema.maximum === 'number') { pipe.push(`S.lessThanOrEqualTo(${schema.maximum})`); }\n if (typeof schema.exclusiveMinimum === 'number') { pipe.push(`S.greaterThan(${schema.exclusiveMinimum})`); }\n if (typeof schema.exclusiveMaximum === 'number') { pipe.push(`S.lessThan(${schema.exclusiveMaximum})`); }\n //if (schema.nullable) { pipe.push(`S.NullOr`); }\n \n return GenResultUtil.generatePipe(pipe);\n })();\n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForBooleanSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const code = ((): string => {\n if (Array.isArray(schema.enum)) { throw new Error(`Boolean enum currently not supported`); }\n \n let code = `S.Boolean`;\n //if (schema.nullable) { code = `S.NullOr(${code})`; }\n return code;\n })();\n return {\n code,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\n// Format a property name as valid JS identifier, to be used in a JS object literal\nconst propertyNameAsIdentifier = (propertyName: string): string => {\n if (!(/^[a-zA-Z$_][a-zA-Z0-9$_]*$/g.test(propertyName))) {\n return `'${propertyName.replaceAll(/'/g, '\\\\\\'')}'`;\n }\n\n return propertyName;\n};\n\nexport const generateFieldsForObjectSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const propSchemas: Record<string, OpenApiSchema> = schema.properties ?? {};\n const propsRequired: Set<string> = new Set(schema.required ?? []);\n \n let refs: GenResult['refs'] = [];\n \n const code = Object.entries(propSchemas).map(([propName, propSchema], propIndex) => {\n const propResult = generateForSchema(ctx, propSchema);\n \n // Merge refs\n refs = GenResultUtil.combineRefs(refs, propResult.refs);\n \n const commentsGenerated = GenResultUtil.commentsToCode(propResult.comments);\n let propCode = propResult.code;\n \n // If the prop is optional, mark it as `S.optional()`\n if (!propsRequired.has(propName)) {\n type OptionalParams = { exact?: boolean, default?: string };\n const optionalParams: OptionalParams = {};\n const printOptional = (code: string, optionalParams: OptionalParams): string => {\n if (Object.keys(optionalParams).length === 0) { return `S.optional(${code})`; }\n const paramsFormatted = dedent`{\n ${Object.hasOwn(optionalParams, 'exact') ? `exact: ${optionalParams.exact},` : ''}\n ${Object.hasOwn(optionalParams, 'default') ? `default: ${optionalParams.default}` : ''}\n }`;\n return `S.optionalWith(${code}, ${paramsFormatted})`;\n };\n \n const hasDefault = 'default' in propSchema && typeof propSchema.default !== 'undefined';\n if (hasDefault) {\n if (typeof propSchema.default === 'object' && propSchema.default !== null) {\n // Add parens for object literals when used as arrow function return value\n optionalParams.default = `() => (${JSON.stringify(propSchema.default)})`;\n } else {\n optionalParams.default = `() => ${JSON.stringify(propSchema.default)}`;\n }\n }\n \n if (ctx.hooks.optionalFieldRepresentation === 'nullish') {\n propCode = printOptional(`S.NullOr(${propCode})`, optionalParams);\n } else {\n propCode = printOptional(propCode, optionalParams);\n }\n }\n \n // Handle (custom/hacked in) `x-heading` fields to group certain fields with a heading comment\n const propNeedsSeparator = propIndex > 0 && 'x-heading' in propSchema;\n const propHeading: null | string = 'x-heading' in propSchema ? propSchema['x-heading'] as string : null;\n const propHeadingComment: null | string = propHeading !== null && propHeading.startsWith('//')\n ? propHeading\n : null;\n \n return (propNeedsSeparator ? '\\n\\n' : '') + dedent`\n ${propHeadingComment ?? ''}${commentsGenerated.commentBlock ? `\\n${commentsGenerated.commentBlock}` : ''}\n ${propertyNameAsIdentifier(propName)}: ${propCode}, ${commentsGenerated.commentInline}\n `.trim();\n }).join('\\n');\n \n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\nexport const generateForObjectSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const propSchemas: Record<string, OpenApiSchema> = schema.properties ?? {};\n \n let refs: GenResult['refs'] = [];\n \n const code = ((): string => {\n let code = '';\n if (Object.keys(propSchemas).length === 0) {\n const additionalPropSchema = schema.additionalProperties;\n if (typeof additionalPropSchema === 'undefined') {\n code = `S.Struct({})`;\n } else if (additionalPropSchema === true) {\n code = `S.Record({ key: S.String, value: S.Unknown() })`;\n } else if (additionalPropSchema === false) {\n code = `S.Record({ key: S.Never, value: S.Never })`;\n } else {\n const additionalPropsResult = generateForSchema(ctx, additionalPropSchema);\n refs = GenResultUtil.combineRefs(refs, additionalPropsResult.refs);\n // TODO: also include the `comments` from `additionalPropsResult`?\n code = `S.Record({ key: S.String, value: ${additionalPropsResult.code} })`;\n }\n } else {\n let indexSignature = '';\n if (typeof schema.additionalProperties !== 'undefined') {\n if (schema.additionalProperties === false) {\n // No equivalent for this on a schema level, requires the consumer to use `onExcessProperty: \"error\"`\n // https://github.com/Effect-TS/effect/tree/main/packages/schema#strict\n } else if (schema.additionalProperties === true) {\n // No equivalent for this on a schema level, requires the consumer to use `onExcessProperty: \"preserve\"`\n // https://github.com/Effect-TS/effect/tree/main/packages/schema#passthrough\n } else {\n const additionalPropsResult = generateForSchema(ctx, schema.additionalProperties);\n refs = GenResultUtil.combineRefs(refs, additionalPropsResult.refs);\n \n // https://github.com/Effect-TS/effect/tree/main/packages/schema#index-signatures\n // TODO: also include the `comments` from `additionalPropsResult`?\n indexSignature = `{ key: S.String, value: ${additionalPropsResult.code} }`;\n }\n }\n \n const fieldsGen = generateFieldsForObjectSchema(ctx, schema);\n refs = GenResultUtil.combineRefs(refs, fieldsGen.refs);\n code = dedent`\n S.Struct({\\n\n ${fieldsGen.code}\n }${indexSignature ? `, ${indexSignature}` : ''})\n `;\n }\n return code;\n })();\n \n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForArraySchema = (ctx: Context, schema: OpenApi.ArraySchemaObject): GenResult => {\n const itemSchema: OpenApiSchema = schema.items;\n const itemResult = generateForSchema(ctx, itemSchema);\n \n const code = ((): string => {\n let code = `S.Array(${itemResult.code})`;\n if (typeof schema.minLength === 'number') { code = `${code}.min(${schema.minLength})`; }\n if (typeof schema.maxLength === 'number') { code = `${code}.max(${schema.maxLength})`; }\n //if (schema.nullable) { code = `S.NullOr(${code})`; }\n return code;\n })();\n \n // FIXME: include the comments for `itemSchema` as well?\n return {\n code,\n refs: itemResult.refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForReferenceObject = (ctx: Context, schema: OpenApi.ReferenceObject): GenResult => {\n // FIXME: make this logic customizable (allow a callback to resolve a `$ref` string to a `Ref` instance?)\n const schemaId = schemaIdFromRef(schema.$ref);\n \n // If the referenced schema ID is topologically after the current one, wrap it in `S.suspend` for lazy eval\n const shouldSuspend = !ctx.isSchemaIdBefore(schemaId);\n const code = shouldSuspend\n ? `S.suspend((): S.Schema<_${id(schemaId)}, _${id(schemaId)}Encoded> => ${id(schemaId)})`\n : id(schemaId);\n \n return { code, refs: [`./${schemaId}.ts`], comments: GenResultUtil.initComments() };\n};\n\n// Generate the @effect/schema code for the given OpenAPI schema\nexport const generateForSchema = (ctx: Context, schema: OpenApiSchema): GenResult => {\n const isNonArraySchemaType = (schema: OpenApiSchema): schema is OpenApi.NonArraySchemaObject => {\n return !('$ref' in schema) && (!('type' in schema) || !Array.isArray(schema.type));\n };\n \n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n return generateForReferenceObject(ctx, schema);\n } else { // Case: OpenApi.SchemaObject\n if (schema.type === 'array' || 'items' in schema) { // Case: OpenApi.ArraySchemaObject\n return generateForArraySchema(ctx, { items: {}, ...schema } as OpenApi.ArraySchemaObject);\n } else { // Case: OpenApi.NonArraySchemaObject | OpenApi.MixedSchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n const schemasHead: undefined | OpenApiSchema = schema.allOf[0];\n if (schemasHead && schema.allOf.length === 1) { // If only one schema, simply generate that schema\n return generateForSchema(ctx, schemasHead);\n }\n \n // `allOf` supports any type, but `@effect/schema` does not currently support generic intersections. Thus,\n // currently we only support `allOf` if it consists only of object schemas.\n // Idea: merge `allOf` schema first, e.g. using https://github.com/mokkabonna/json-schema-merge-allof\n const areAllObjects: boolean = schema.allOf.reduce(\n (acc, schema) => {\n if ('$ref' in schema) {\n return acc && isObjectSchema(ctx.schemas, schema.$ref);\n }\n \n const isObject = isNonArraySchemaType(schema) && schema.type === 'object';\n return acc && isObject;\n },\n true,\n );\n \n /*\n if (!areAllObjects) {\n throw new Error(dedent`\n Found \\`allOf\\` with a non-object schema. Currently only object schemas or unions of object schemas are\n supported.\n `);\n }\n */\n \n const schemas: Array<OpenApiSchema> = schema.allOf\n // Filter out empty schemas\n // XXX this only makes sense when all schemas are objects, would not work if we supported generic `allOf`\n .filter((schema: OpenApiSchema) => {\n if (!isNonArraySchemaType(schema) || schema.type !== 'object') { return true; }\n \n const props = schema.properties ?? {};\n if (Object.keys(props).length === 0 && !schema.additionalProperties) {\n return false;\n } else {\n return true;\n }\n });\n \n if (typeof schemasHead === 'undefined') {\n // XXX this only works for object schemas, as in `S.extend()`, would not work if we support generic `allOf`\n return generateForObjectSchema(ctx, { type: 'object' }); // Empty `allOf`\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n let code = '';\n let schemasResults: Array<GenResult>;\n if (areAllObjects) {\n // Experimental: using `...MySchema.fields` to combine struct schemas.\n // Note: doesn't work if `MySchema` is a union of structs\n \n schemasResults = schemas.map(schema => {\n const genResult = generateForSchema(ctx, schema);\n if ('$ref' in schema) {\n genResult.code = `...${genResult.code}.fields,`;\n } else if (isNonArraySchemaType(schema)) {\n genResult.code = generateFieldsForObjectSchema(ctx, schema).code;\n }\n return genResult;\n });\n \n code = dedent`\n S.Struct({\n ${schemasResults\n .map(({ code, comments }, index) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${commentsGenerated.commentInline}\n ${code}\n `.trim();\n })\n .join('\\n')\n }\n })\n `;\n } else {\n schemasResults = schemas.map(schema => generateForSchema(ctx, schema));\n \n // Note: `extend` doesn't quite cover the semantics of `allOf`, since it only accepts objects and\n // assumes distinct types. However, @effect/schema has no generic built-in mechanism for this.\n code = dedent`\n pipe(\n ${schemasResults\n .map(({ code, comments }, index) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${index > 0 ? `S.extend(${code})` : code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n }\n \n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.flatMap(({ refs }) => refs)),\n comments: GenResultUtil.initComments(),\n };\n }\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n const schemas: Array<OpenApiSchema> = schema.oneOf;\n const schemasHead: undefined | OpenApiSchema = schemas[0];\n if (typeof schemasHead === 'undefined') {\n throw new TypeError(`oneOf must have at least one schema`);\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n const schemasResults: Array<GenResult> = schemas.map(schema => generateForSchema(ctx, schema));\n // Note: `union` doesn't quite cover the semantics of `oneOf`, since `oneOf` must guarantee that exactly\n // one schema matches. However, @effect/schema has no easy built-in mechanism for this.\n const code = dedent`\n S.Union(\n ${schemasResults\n .map(({ code, comments }) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.map(({ refs }) => refs).flat()),\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n }\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n const schemas: Array<OpenApiSchema> = schema.anyOf;\n const schemasHead: undefined | OpenApiSchema = schemas[0];\n if (typeof schemasHead === 'undefined') {\n throw new TypeError(`anyOf must have at least one schema`);\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n const schemasResults: Array<GenResult> = schemas.map(schema => generateForSchema(ctx, schema));\n const code = dedent`\n S.Union(\n ${schemasResults\n .map(({ code, comments }) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.map(({ refs }) => refs).flat()),\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n }\n }\n \n type SchemaType = 'array' | OpenApi.NonArraySchemaObjectType;\n const type: undefined | OpenApi.NonArraySchemaObjectType | Array<SchemaType> = schema.type;\n \n const hookResult: null | GenResult = ctx.hooks.generateSchema?.(schema) ?? null;\n \n let result: GenResult;\n if (hookResult !== null) {\n result = hookResult;\n } else {\n if (typeof type === 'undefined') {\n result = generateForUnknownSchema(ctx, schema as OpenApi.NonArraySchemaObject); // Any type\n } else if (Array.isArray(type)) {\n // `type` as an array is equivalent to `anyOf` with `type` set to the individual type string\n const schemaAnyOf = { anyOf: type.map(type => ({ ...schema, type })) } as OpenApiSchema;\n result = generateForSchema(ctx, schemaAnyOf);\n } else {\n const schemaNonMixed = schema as OpenApi.NonArraySchemaObject;\n switch (type) {\n case 'null': result = generateForNullSchema(ctx, schemaNonMixed); break;\n case 'string': result = generateForStringSchema(ctx, schemaNonMixed); break;\n case 'number': result = generateForNumberSchema(ctx, schemaNonMixed); break;\n case 'integer': result = generateForNumberSchema(ctx, schemaNonMixed); break;\n case 'boolean': result = generateForBooleanSchema(ctx, schemaNonMixed); break;\n case 'object': result = generateForObjectSchema(ctx, schemaNonMixed); break;\n default: throw new TypeError(`Unsupported type \"${type}\"`);\n }\n }\n }\n return {\n ...result,\n code: `${result.code}`,\n };\n }\n }\n};\n"],"mappings":"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","ignoreList":[]}

@@ -172,10 +172,11 @@ /* Copyright (c) Fortanix, Inc.

const optionalParams = {};
const printOptionalParams = optionalParams => {
const printOptional = (code, optionalParams) => {
if (Object.keys(optionalParams).length === 0) {
return '';
return `S.optional(${code})`;
}
return `, {
const paramsFormatted = dedent`{
${Object.hasOwn(optionalParams, 'exact') ? `exact: ${optionalParams.exact},` : ''}
${Object.hasOwn(optionalParams, 'default') ? `default: ${optionalParams.default}` : ''}
}`;
return `S.optionalWith(${code}, ${paramsFormatted})`;
};

@@ -192,5 +193,5 @@ const hasDefault = 'default' in propSchema && typeof propSchema.default !== 'undefined';

if (ctx.hooks.optionalFieldRepresentation === 'nullish') {
propCode = `S.optional(S.NullOr(${propCode})${printOptionalParams(optionalParams)})`;
propCode = printOptional(`S.NullOr(${propCode})`, optionalParams);
} else {
propCode = `S.optional(${propCode}${printOptionalParams(optionalParams)})`;
propCode = printOptional(propCode, optionalParams);
}

@@ -224,5 +225,5 @@ }

} else if (additionalPropSchema === true) {
code = `S.Record(S.String, S.Unknown())`;
code = `S.Record({ key: S.String, value: S.Unknown() })`;
} else if (additionalPropSchema === false) {
code = `S.Record(S.Never, S.Never)`;
code = `S.Record({ key: S.Never, value: S.Never })`;
} else {

@@ -232,3 +233,3 @@ const additionalPropsResult = generateForSchema(ctx, additionalPropSchema);

// TODO: also include the `comments` from `additionalPropsResult`?
code = `S.Record(S.String, ${additionalPropsResult.code})`;
code = `S.Record({ key: S.String, value: ${additionalPropsResult.code} })`;
}

@@ -235,0 +236,0 @@ } else {

@@ -1,1 +0,1 @@

{"version":3,"file":"schemaGen.mjs","names":["dedent","isObjectSchema","schemaIdFromRef","GenResultUtil","id","encodeIdentifier","generateForUnknownSchema","ctx","schema","code","refs","comments","commentsFromSchemaObject","generateForNullSchema","generateForStringSchema","Array","isArray","enum","every","value","TypeError","JSON","stringify","map","String","join","baseSchema","format","pipe","push","pattern","minLength","maxLength","hookResult","hooks","generateStringType","combineRefs","generatePipe","generateForNumberSchema","type","generateNumberType","minimum","maximum","exclusiveMinimum","exclusiveMaximum","generateForBooleanSchema","Error","propertyNameAsIdentifier","propertyName","test","replaceAll","generateFieldsForObjectSchema","propSchemas","properties","propsRequired","Set","required","Object","entries","propName","propSchema","propIndex","propResult","generateForSchema","commentsGenerated","commentsToCode","propCode","has","optionalParams","printOptionalParams","keys","length","hasOwn","exact","default","hasDefault","optionalFieldRepresentation","propNeedsSeparator","propHeading","propHeadingComment","startsWith","commentBlock","commentInline","trim","generateForObjectSchema","additionalPropSchema","additionalProperties","additionalPropsResult","indexSignature","fieldsGen","generateForArraySchema","itemSchema","items","itemResult","generateForReferenceObject","schemaId","$ref","shouldSuspend","isSchemaIdBefore","initComments","isNonArraySchemaType","allOf","schemasHead","areAllObjects","reduce","acc","schemas","isObject","filter","props","schemasResults","genResult","index","flatMap","oneOf","flat","anyOf","generateSchema","result","schemaAnyOf","schemaNonMixed"],"sources":["../../../../src/generation/effSchemGen/schemaGen.ts"],"sourcesContent":["/* Copyright (c) Fortanix, Inc.\n *\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { dedent } from 'ts-dedent';\nimport { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { OpenApiSchemaId, type OpenApiRef, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport * as GenSpec from '../generationSpec.ts';\nimport { isObjectSchema, schemaIdFromRef } from '../../analysis/GraphAnalyzer.ts';\nimport { type GenResult, GenResultUtil } from './genUtil.ts';\n\n\nconst id = GenResultUtil.encodeIdentifier;\n\nexport type Context = {\n schemas: Record<string, OpenApiSchema>,\n hooks: GenSpec.GenerationHooks,\n isSchemaIdBefore: (schemaId: OpenApiSchemaId) => boolean,\n};\n\nexport const generateForUnknownSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n return {\n code: `S.Unknown`,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForNullSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n return {\n code: `S.Null`,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForStringSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n let refs: GenResult['refs'] = [];\n const code = ((): string => {\n if (Array.isArray(schema.enum)) {\n if (!schema.enum.every(value => typeof value === 'string' || typeof value === 'number')) {\n throw new TypeError(`Unknown enum value, expected string array: ${JSON.stringify(schema.enum)}`);\n }\n return dedent`S.Literal(\n ${schema.enum.map((value: string | number) => JSON.stringify(String(value)) + ',').join('\\n')}\n )`;\n }\n \n let baseSchema = `S.String`;\n switch (schema.format) {\n case 'uuid': baseSchema = `S.UUID`; break;\n //case 'date': baseSchema = `S.Date`; // FIXME: validate lack of time component\n case 'date-time': baseSchema = `S.Date`; break;\n // FIXME: using `S.Base64` will result in `Uint8Array` rather than strings, which will break some downstream\n // consumers.\n //case 'byte': baseSchema = `S.Base64`; break;\n }\n \n let pipe: Array<string> = [baseSchema];\n \n // Note: no built-in validator for emails, see https://github.com/effect-ts/effect/tree/main/packages/schema#email\n if (schema.format === 'email') { pipe.push(`S.pattern(/.+@.+/)`); }\n \n if (typeof schema.pattern === 'string') {\n pipe.push(`S.pattern(new RegExp(${JSON.stringify(schema.pattern)}))`);\n }\n \n if (typeof schema.minLength === 'number') { pipe.push(`S.minLength(${schema.minLength})`); }\n if (typeof schema.maxLength === 'number') { pipe.push(`S.maxLength(${schema.maxLength})`); }\n \n // Run hook\n const hookResult = ctx.hooks.generateStringType?.(schema) ?? null;\n if (hookResult !== null) {\n refs = GenResultUtil.combineRefs(refs, hookResult.refs);\n pipe = [hookResult.code];\n }\n \n //if (schema.nullable) { pipe.push(`S.NullOr`); }\n \n return GenResultUtil.generatePipe(pipe);\n })();\n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForNumberSchema = (\n ctx: Context,\n schema: OpenApi.NonArraySchemaObject,\n): GenResult => {\n let refs: GenResult['refs'] = [];\n const code = ((): string => {\n if (Array.isArray(schema.enum)) {\n if (!schema.enum.every(value => typeof value === 'number')) {\n throw new TypeError(`Unknown enum value, expected number array: ${JSON.stringify(schema.enum)}`);\n }\n return dedent`S.Literal(\n ${schema.enum.map((value: number) => JSON.stringify(value) + ',').join('\\n')}\n )`;\n }\n \n let baseSchema = `S.Number`;\n switch (schema.format) {\n //case 'date': baseSchema = `S.Date`; break; // FIXME: validate lack of time component\n case 'date-time': baseSchema = `S.DateFromNumber.pipe(S.validDate())`; break;\n }\n \n let pipe: Array<string> = [baseSchema];\n if (schema.type === 'integer') { pipe.push(`S.int()`); }\n \n // Run hook\n const hookResult = ctx.hooks.generateNumberType?.(schema) ?? null;\n if (hookResult !== null) {\n refs = GenResultUtil.combineRefs(refs, hookResult.refs);\n pipe = [hookResult.code];\n }\n \n if (typeof schema.minimum === 'number') { pipe.push(`S.greaterThanOrEqualTo(${schema.minimum})`); }\n if (typeof schema.maximum === 'number') { pipe.push(`S.lessThanOrEqualTo(${schema.maximum})`); }\n if (typeof schema.exclusiveMinimum === 'number') { pipe.push(`S.greaterThan(${schema.exclusiveMinimum})`); }\n if (typeof schema.exclusiveMaximum === 'number') { pipe.push(`S.lessThan(${schema.exclusiveMaximum})`); }\n //if (schema.nullable) { pipe.push(`S.NullOr`); }\n \n return GenResultUtil.generatePipe(pipe);\n })();\n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForBooleanSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const code = ((): string => {\n if (Array.isArray(schema.enum)) { throw new Error(`Boolean enum currently not supported`); }\n \n let code = `S.Boolean`;\n //if (schema.nullable) { code = `S.NullOr(${code})`; }\n return code;\n })();\n return {\n code,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\n// Format a property name as valid JS identifier, to be used in a JS object literal\nconst propertyNameAsIdentifier = (propertyName: string): string => {\n if (!(/^[a-zA-Z$_][a-zA-Z0-9$_]*$/g.test(propertyName))) {\n return `'${propertyName.replaceAll(/'/g, '\\\\\\'')}'`;\n }\n\n return propertyName;\n};\n\nexport const generateFieldsForObjectSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const propSchemas: Record<string, OpenApiSchema> = schema.properties ?? {};\n const propsRequired: Set<string> = new Set(schema.required ?? []);\n \n let refs: GenResult['refs'] = [];\n \n const code = Object.entries(propSchemas).map(([propName, propSchema], propIndex) => {\n const propResult = generateForSchema(ctx, propSchema);\n \n // Merge refs\n refs = GenResultUtil.combineRefs(refs, propResult.refs);\n \n const commentsGenerated = GenResultUtil.commentsToCode(propResult.comments);\n let propCode = propResult.code;\n \n // If the prop is optional, mark it as `S.optional()`\n if (!propsRequired.has(propName)) {\n type OptionalParams = { exact?: boolean, default?: string };\n const optionalParams: OptionalParams = {};\n const printOptionalParams = (optionalParams: OptionalParams): string => {\n if (Object.keys(optionalParams).length === 0) { return ''; }\n return `, {\n ${Object.hasOwn(optionalParams, 'exact') ? `exact: ${optionalParams.exact},` : ''}\n ${Object.hasOwn(optionalParams, 'default') ? `default: ${optionalParams.default}` : ''}\n }`;\n };\n \n const hasDefault = 'default' in propSchema && typeof propSchema.default !== 'undefined';\n if (hasDefault) {\n if (typeof propSchema.default === 'object' && propSchema.default !== null) {\n // Add parens for object literals when used as arrow function return value\n optionalParams.default = `() => (${JSON.stringify(propSchema.default)})`;\n } else {\n optionalParams.default = `() => ${JSON.stringify(propSchema.default)}`;\n }\n }\n \n if (ctx.hooks.optionalFieldRepresentation === 'nullish') {\n propCode = `S.optional(S.NullOr(${propCode})${printOptionalParams(optionalParams)})`;\n } else {\n propCode = `S.optional(${propCode}${printOptionalParams(optionalParams)})`;\n }\n }\n \n // Handle (custom/hacked in) `x-heading` fields to group certain fields with a heading comment\n const propNeedsSeparator = propIndex > 0 && 'x-heading' in propSchema;\n const propHeading: null | string = 'x-heading' in propSchema ? propSchema['x-heading'] as string : null;\n const propHeadingComment: null | string = propHeading !== null && propHeading.startsWith('//')\n ? propHeading\n : null;\n \n return (propNeedsSeparator ? '\\n\\n' : '') + dedent`\n ${propHeadingComment ?? ''}${commentsGenerated.commentBlock ? `\\n${commentsGenerated.commentBlock}` : ''}\n ${propertyNameAsIdentifier(propName)}: ${propCode}, ${commentsGenerated.commentInline}\n `.trim();\n }).join('\\n');\n \n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\nexport const generateForObjectSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const propSchemas: Record<string, OpenApiSchema> = schema.properties ?? {};\n \n let refs: GenResult['refs'] = [];\n \n const code = ((): string => {\n let code = '';\n if (Object.keys(propSchemas).length === 0) {\n const additionalPropSchema = schema.additionalProperties;\n if (typeof additionalPropSchema === 'undefined') {\n code = `S.Struct({})`;\n } else if (additionalPropSchema === true) {\n code = `S.Record(S.String, S.Unknown())`;\n } else if (additionalPropSchema === false) {\n code = `S.Record(S.Never, S.Never)`;\n } else {\n const additionalPropsResult = generateForSchema(ctx, additionalPropSchema);\n refs = GenResultUtil.combineRefs(refs, additionalPropsResult.refs);\n // TODO: also include the `comments` from `additionalPropsResult`?\n code = `S.Record(S.String, ${additionalPropsResult.code})`;\n }\n } else {\n let indexSignature = '';\n if (typeof schema.additionalProperties !== 'undefined') {\n if (schema.additionalProperties === false) {\n // No equivalent for this on a schema level, requires the consumer to use `onExcessProperty: \"error\"`\n // https://github.com/Effect-TS/effect/tree/main/packages/schema#strict\n } else if (schema.additionalProperties === true) {\n // No equivalent for this on a schema level, requires the consumer to use `onExcessProperty: \"preserve\"`\n // https://github.com/Effect-TS/effect/tree/main/packages/schema#passthrough\n } else {\n const additionalPropsResult = generateForSchema(ctx, schema.additionalProperties);\n refs = GenResultUtil.combineRefs(refs, additionalPropsResult.refs);\n \n // https://github.com/Effect-TS/effect/tree/main/packages/schema#index-signatures\n // TODO: also include the `comments` from `additionalPropsResult`?\n indexSignature = `{ key: S.String, value: ${additionalPropsResult.code} }`;\n }\n }\n \n const fieldsGen = generateFieldsForObjectSchema(ctx, schema);\n refs = GenResultUtil.combineRefs(refs, fieldsGen.refs);\n code = dedent`\n S.Struct({\\n\n ${fieldsGen.code}\n }${indexSignature ? `, ${indexSignature}` : ''})\n `;\n }\n return code;\n })();\n \n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForArraySchema = (ctx: Context, schema: OpenApi.ArraySchemaObject): GenResult => {\n const itemSchema: OpenApiSchema = schema.items;\n const itemResult = generateForSchema(ctx, itemSchema);\n \n const code = ((): string => {\n let code = `S.Array(${itemResult.code})`;\n if (typeof schema.minLength === 'number') { code = `${code}.min(${schema.minLength})`; }\n if (typeof schema.maxLength === 'number') { code = `${code}.max(${schema.maxLength})`; }\n //if (schema.nullable) { code = `S.NullOr(${code})`; }\n return code;\n })();\n \n // FIXME: include the comments for `itemSchema` as well?\n return {\n code,\n refs: itemResult.refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForReferenceObject = (ctx: Context, schema: OpenApi.ReferenceObject): GenResult => {\n // FIXME: make this logic customizable (allow a callback to resolve a `$ref` string to a `Ref` instance?)\n const schemaId = schemaIdFromRef(schema.$ref);\n \n // If the referenced schema ID is topologically after the current one, wrap it in `S.suspend` for lazy eval\n const shouldSuspend = !ctx.isSchemaIdBefore(schemaId);\n const code = shouldSuspend\n ? `S.suspend((): S.Schema<_${id(schemaId)}, _${id(schemaId)}Encoded> => ${id(schemaId)})`\n : id(schemaId);\n \n return { code, refs: [`./${schemaId}.ts`], comments: GenResultUtil.initComments() };\n};\n\n// Generate the @effect/schema code for the given OpenAPI schema\nexport const generateForSchema = (ctx: Context, schema: OpenApiSchema): GenResult => {\n const isNonArraySchemaType = (schema: OpenApiSchema): schema is OpenApi.NonArraySchemaObject => {\n return !('$ref' in schema) && (!('type' in schema) || !Array.isArray(schema.type));\n };\n \n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n return generateForReferenceObject(ctx, schema);\n } else { // Case: OpenApi.SchemaObject\n if (schema.type === 'array' || 'items' in schema) { // Case: OpenApi.ArraySchemaObject\n return generateForArraySchema(ctx, { items: {}, ...schema } as OpenApi.ArraySchemaObject);\n } else { // Case: OpenApi.NonArraySchemaObject | OpenApi.MixedSchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n const schemasHead: undefined | OpenApiSchema = schema.allOf[0];\n if (schemasHead && schema.allOf.length === 1) { // If only one schema, simply generate that schema\n return generateForSchema(ctx, schemasHead);\n }\n \n // `allOf` supports any type, but `@effect/schema` does not currently support generic intersections. Thus,\n // currently we only support `allOf` if it consists only of object schemas.\n // Idea: merge `allOf` schema first, e.g. using https://github.com/mokkabonna/json-schema-merge-allof\n const areAllObjects: boolean = schema.allOf.reduce(\n (acc, schema) => {\n if ('$ref' in schema) {\n return acc && isObjectSchema(ctx.schemas, schema.$ref);\n }\n \n const isObject = isNonArraySchemaType(schema) && schema.type === 'object';\n return acc && isObject;\n },\n true,\n );\n \n /*\n if (!areAllObjects) {\n throw new Error(dedent`\n Found \\`allOf\\` with a non-object schema. Currently only object schemas or unions of object schemas are\n supported.\n `);\n }\n */\n \n const schemas: Array<OpenApiSchema> = schema.allOf\n // Filter out empty schemas\n // XXX this only makes sense when all schemas are objects, would not work if we supported generic `allOf`\n .filter((schema: OpenApiSchema) => {\n if (!isNonArraySchemaType(schema) || schema.type !== 'object') { return true; }\n \n const props = schema.properties ?? {};\n if (Object.keys(props).length === 0 && !schema.additionalProperties) {\n return false;\n } else {\n return true;\n }\n });\n \n if (typeof schemasHead === 'undefined') {\n // XXX this only works for object schemas, as in `S.extend()`, would not work if we support generic `allOf`\n return generateForObjectSchema(ctx, { type: 'object' }); // Empty `allOf`\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n let code = '';\n let schemasResults: Array<GenResult>;\n if (areAllObjects) {\n // Experimental: using `...MySchema.fields` to combine struct schemas.\n // Note: doesn't work if `MySchema` is a union of structs\n \n schemasResults = schemas.map(schema => {\n const genResult = generateForSchema(ctx, schema);\n if ('$ref' in schema) {\n genResult.code = `...${genResult.code}.fields,`;\n } else if (isNonArraySchemaType(schema)) {\n genResult.code = generateFieldsForObjectSchema(ctx, schema).code;\n }\n return genResult;\n });\n \n code = dedent`\n S.Struct({\n ${schemasResults\n .map(({ code, comments }, index) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${commentsGenerated.commentInline}\n ${code}\n `.trim();\n })\n .join('\\n')\n }\n })\n `;\n } else {\n schemasResults = schemas.map(schema => generateForSchema(ctx, schema));\n \n // Note: `extend` doesn't quite cover the semantics of `allOf`, since it only accepts objects and\n // assumes distinct types. However, @effect/schema has no generic built-in mechanism for this.\n code = dedent`\n pipe(\n ${schemasResults\n .map(({ code, comments }, index) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${index > 0 ? `S.extend(${code})` : code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n }\n \n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.flatMap(({ refs }) => refs)),\n comments: GenResultUtil.initComments(),\n };\n }\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n const schemas: Array<OpenApiSchema> = schema.oneOf;\n const schemasHead: undefined | OpenApiSchema = schemas[0];\n if (typeof schemasHead === 'undefined') {\n throw new TypeError(`oneOf must have at least one schema`);\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n const schemasResults: Array<GenResult> = schemas.map(schema => generateForSchema(ctx, schema));\n // Note: `union` doesn't quite cover the semantics of `oneOf`, since `oneOf` must guarantee that exactly\n // one schema matches. However, @effect/schema has no easy built-in mechanism for this.\n const code = dedent`\n S.Union(\n ${schemasResults\n .map(({ code, comments }) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.map(({ refs }) => refs).flat()),\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n }\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n const schemas: Array<OpenApiSchema> = schema.anyOf;\n const schemasHead: undefined | OpenApiSchema = schemas[0];\n if (typeof schemasHead === 'undefined') {\n throw new TypeError(`anyOf must have at least one schema`);\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n const schemasResults: Array<GenResult> = schemas.map(schema => generateForSchema(ctx, schema));\n const code = dedent`\n S.Union(\n ${schemasResults\n .map(({ code, comments }) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.map(({ refs }) => refs).flat()),\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n }\n }\n \n type SchemaType = 'array' | OpenApi.NonArraySchemaObjectType;\n const type: undefined | OpenApi.NonArraySchemaObjectType | Array<SchemaType> = schema.type;\n \n const hookResult: null | GenResult = ctx.hooks.generateSchema?.(schema) ?? null;\n \n let result: GenResult;\n if (hookResult !== null) {\n result = hookResult;\n } else {\n if (typeof type === 'undefined') {\n result = generateForUnknownSchema(ctx, schema as OpenApi.NonArraySchemaObject); // Any type\n } else if (Array.isArray(type)) {\n // `type` as an array is equivalent to `anyOf` with `type` set to the individual type string\n const schemaAnyOf = { anyOf: type.map(type => ({ ...schema, type })) } as OpenApiSchema;\n result = generateForSchema(ctx, schemaAnyOf);\n } else {\n const schemaNonMixed = schema as OpenApi.NonArraySchemaObject;\n switch (type) {\n case 'null': result = generateForNullSchema(ctx, schemaNonMixed); break;\n case 'string': result = generateForStringSchema(ctx, schemaNonMixed); break;\n case 'number': result = generateForNumberSchema(ctx, schemaNonMixed); break;\n case 'integer': result = generateForNumberSchema(ctx, schemaNonMixed); break;\n case 'boolean': result = generateForBooleanSchema(ctx, schemaNonMixed); break;\n case 'object': result = generateForObjectSchema(ctx, schemaNonMixed); break;\n default: throw new TypeError(`Unsupported type \"${type}\"`);\n }\n }\n }\n return {\n ...result,\n code: `${result.code}`,\n };\n }\n }\n};\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"schemaGen.mjs","names":["dedent","isObjectSchema","schemaIdFromRef","GenResultUtil","id","encodeIdentifier","generateForUnknownSchema","ctx","schema","code","refs","comments","commentsFromSchemaObject","generateForNullSchema","generateForStringSchema","Array","isArray","enum","every","value","TypeError","JSON","stringify","map","String","join","baseSchema","format","pipe","push","pattern","minLength","maxLength","hookResult","hooks","generateStringType","combineRefs","generatePipe","generateForNumberSchema","type","generateNumberType","minimum","maximum","exclusiveMinimum","exclusiveMaximum","generateForBooleanSchema","Error","propertyNameAsIdentifier","propertyName","test","replaceAll","generateFieldsForObjectSchema","propSchemas","properties","propsRequired","Set","required","Object","entries","propName","propSchema","propIndex","propResult","generateForSchema","commentsGenerated","commentsToCode","propCode","has","optionalParams","printOptional","keys","length","paramsFormatted","hasOwn","exact","default","hasDefault","optionalFieldRepresentation","propNeedsSeparator","propHeading","propHeadingComment","startsWith","commentBlock","commentInline","trim","generateForObjectSchema","additionalPropSchema","additionalProperties","additionalPropsResult","indexSignature","fieldsGen","generateForArraySchema","itemSchema","items","itemResult","generateForReferenceObject","schemaId","$ref","shouldSuspend","isSchemaIdBefore","initComments","isNonArraySchemaType","allOf","schemasHead","areAllObjects","reduce","acc","schemas","isObject","filter","props","schemasResults","genResult","index","flatMap","oneOf","flat","anyOf","generateSchema","result","schemaAnyOf","schemaNonMixed"],"sources":["../../../../src/generation/effSchemGen/schemaGen.ts"],"sourcesContent":["/* Copyright (c) Fortanix, Inc.\n *\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { dedent } from 'ts-dedent';\nimport { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { type OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport * as GenSpec from '../generationSpec.ts';\nimport { isObjectSchema, schemaIdFromRef } from '../../analysis/GraphAnalyzer.ts';\nimport { type GenResult, GenResultUtil } from './genUtil.ts';\n\n\nconst id = GenResultUtil.encodeIdentifier;\n\nexport type Context = {\n schemas: Record<string, OpenApiSchema>,\n hooks: GenSpec.GenerationHooks,\n isSchemaIdBefore: (schemaId: OpenApiSchemaId) => boolean,\n};\n\nexport const generateForUnknownSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n return {\n code: `S.Unknown`,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForNullSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n return {\n code: `S.Null`,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForStringSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n let refs: GenResult['refs'] = [];\n const code = ((): string => {\n if (Array.isArray(schema.enum)) {\n if (!schema.enum.every(value => typeof value === 'string' || typeof value === 'number')) {\n throw new TypeError(`Unknown enum value, expected string array: ${JSON.stringify(schema.enum)}`);\n }\n return dedent`S.Literal(\n ${schema.enum.map((value: string | number) => JSON.stringify(String(value)) + ',').join('\\n')}\n )`;\n }\n \n let baseSchema = `S.String`;\n switch (schema.format) {\n case 'uuid': baseSchema = `S.UUID`; break;\n //case 'date': baseSchema = `S.Date`; // FIXME: validate lack of time component\n case 'date-time': baseSchema = `S.Date`; break;\n // FIXME: using `S.Base64` will result in `Uint8Array` rather than strings, which will break some downstream\n // consumers.\n //case 'byte': baseSchema = `S.Base64`; break;\n }\n \n let pipe: Array<string> = [baseSchema];\n \n // Note: no built-in validator for emails, see https://github.com/effect-ts/effect/tree/main/packages/schema#email\n if (schema.format === 'email') { pipe.push(`S.pattern(/.+@.+/)`); }\n \n if (typeof schema.pattern === 'string') {\n pipe.push(`S.pattern(new RegExp(${JSON.stringify(schema.pattern)}))`);\n }\n \n if (typeof schema.minLength === 'number') { pipe.push(`S.minLength(${schema.minLength})`); }\n if (typeof schema.maxLength === 'number') { pipe.push(`S.maxLength(${schema.maxLength})`); }\n \n // Run hook\n const hookResult = ctx.hooks.generateStringType?.(schema) ?? null;\n if (hookResult !== null) {\n refs = GenResultUtil.combineRefs(refs, hookResult.refs);\n pipe = [hookResult.code];\n }\n \n //if (schema.nullable) { pipe.push(`S.NullOr`); }\n \n return GenResultUtil.generatePipe(pipe);\n })();\n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForNumberSchema = (\n ctx: Context,\n schema: OpenApi.NonArraySchemaObject,\n): GenResult => {\n let refs: GenResult['refs'] = [];\n const code = ((): string => {\n if (Array.isArray(schema.enum)) {\n if (!schema.enum.every(value => typeof value === 'number')) {\n throw new TypeError(`Unknown enum value, expected number array: ${JSON.stringify(schema.enum)}`);\n }\n return dedent`S.Literal(\n ${schema.enum.map((value: number) => JSON.stringify(value) + ',').join('\\n')}\n )`;\n }\n \n let baseSchema = `S.Number`;\n switch (schema.format) {\n //case 'date': baseSchema = `S.Date`; break; // FIXME: validate lack of time component\n case 'date-time': baseSchema = `S.DateFromNumber.pipe(S.validDate())`; break;\n }\n \n let pipe: Array<string> = [baseSchema];\n if (schema.type === 'integer') { pipe.push(`S.int()`); }\n \n // Run hook\n const hookResult = ctx.hooks.generateNumberType?.(schema) ?? null;\n if (hookResult !== null) {\n refs = GenResultUtil.combineRefs(refs, hookResult.refs);\n pipe = [hookResult.code];\n }\n \n if (typeof schema.minimum === 'number') { pipe.push(`S.greaterThanOrEqualTo(${schema.minimum})`); }\n if (typeof schema.maximum === 'number') { pipe.push(`S.lessThanOrEqualTo(${schema.maximum})`); }\n if (typeof schema.exclusiveMinimum === 'number') { pipe.push(`S.greaterThan(${schema.exclusiveMinimum})`); }\n if (typeof schema.exclusiveMaximum === 'number') { pipe.push(`S.lessThan(${schema.exclusiveMaximum})`); }\n //if (schema.nullable) { pipe.push(`S.NullOr`); }\n \n return GenResultUtil.generatePipe(pipe);\n })();\n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForBooleanSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const code = ((): string => {\n if (Array.isArray(schema.enum)) { throw new Error(`Boolean enum currently not supported`); }\n \n let code = `S.Boolean`;\n //if (schema.nullable) { code = `S.NullOr(${code})`; }\n return code;\n })();\n return {\n code,\n refs: [],\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\n// Format a property name as valid JS identifier, to be used in a JS object literal\nconst propertyNameAsIdentifier = (propertyName: string): string => {\n if (!(/^[a-zA-Z$_][a-zA-Z0-9$_]*$/g.test(propertyName))) {\n return `'${propertyName.replaceAll(/'/g, '\\\\\\'')}'`;\n }\n\n return propertyName;\n};\n\nexport const generateFieldsForObjectSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const propSchemas: Record<string, OpenApiSchema> = schema.properties ?? {};\n const propsRequired: Set<string> = new Set(schema.required ?? []);\n \n let refs: GenResult['refs'] = [];\n \n const code = Object.entries(propSchemas).map(([propName, propSchema], propIndex) => {\n const propResult = generateForSchema(ctx, propSchema);\n \n // Merge refs\n refs = GenResultUtil.combineRefs(refs, propResult.refs);\n \n const commentsGenerated = GenResultUtil.commentsToCode(propResult.comments);\n let propCode = propResult.code;\n \n // If the prop is optional, mark it as `S.optional()`\n if (!propsRequired.has(propName)) {\n type OptionalParams = { exact?: boolean, default?: string };\n const optionalParams: OptionalParams = {};\n const printOptional = (code: string, optionalParams: OptionalParams): string => {\n if (Object.keys(optionalParams).length === 0) { return `S.optional(${code})`; }\n const paramsFormatted = dedent`{\n ${Object.hasOwn(optionalParams, 'exact') ? `exact: ${optionalParams.exact},` : ''}\n ${Object.hasOwn(optionalParams, 'default') ? `default: ${optionalParams.default}` : ''}\n }`;\n return `S.optionalWith(${code}, ${paramsFormatted})`;\n };\n \n const hasDefault = 'default' in propSchema && typeof propSchema.default !== 'undefined';\n if (hasDefault) {\n if (typeof propSchema.default === 'object' && propSchema.default !== null) {\n // Add parens for object literals when used as arrow function return value\n optionalParams.default = `() => (${JSON.stringify(propSchema.default)})`;\n } else {\n optionalParams.default = `() => ${JSON.stringify(propSchema.default)}`;\n }\n }\n \n if (ctx.hooks.optionalFieldRepresentation === 'nullish') {\n propCode = printOptional(`S.NullOr(${propCode})`, optionalParams);\n } else {\n propCode = printOptional(propCode, optionalParams);\n }\n }\n \n // Handle (custom/hacked in) `x-heading` fields to group certain fields with a heading comment\n const propNeedsSeparator = propIndex > 0 && 'x-heading' in propSchema;\n const propHeading: null | string = 'x-heading' in propSchema ? propSchema['x-heading'] as string : null;\n const propHeadingComment: null | string = propHeading !== null && propHeading.startsWith('//')\n ? propHeading\n : null;\n \n return (propNeedsSeparator ? '\\n\\n' : '') + dedent`\n ${propHeadingComment ?? ''}${commentsGenerated.commentBlock ? `\\n${commentsGenerated.commentBlock}` : ''}\n ${propertyNameAsIdentifier(propName)}: ${propCode}, ${commentsGenerated.commentInline}\n `.trim();\n }).join('\\n');\n \n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\nexport const generateForObjectSchema = (ctx: Context, schema: OpenApi.NonArraySchemaObject): GenResult => {\n const propSchemas: Record<string, OpenApiSchema> = schema.properties ?? {};\n \n let refs: GenResult['refs'] = [];\n \n const code = ((): string => {\n let code = '';\n if (Object.keys(propSchemas).length === 0) {\n const additionalPropSchema = schema.additionalProperties;\n if (typeof additionalPropSchema === 'undefined') {\n code = `S.Struct({})`;\n } else if (additionalPropSchema === true) {\n code = `S.Record({ key: S.String, value: S.Unknown() })`;\n } else if (additionalPropSchema === false) {\n code = `S.Record({ key: S.Never, value: S.Never })`;\n } else {\n const additionalPropsResult = generateForSchema(ctx, additionalPropSchema);\n refs = GenResultUtil.combineRefs(refs, additionalPropsResult.refs);\n // TODO: also include the `comments` from `additionalPropsResult`?\n code = `S.Record({ key: S.String, value: ${additionalPropsResult.code} })`;\n }\n } else {\n let indexSignature = '';\n if (typeof schema.additionalProperties !== 'undefined') {\n if (schema.additionalProperties === false) {\n // No equivalent for this on a schema level, requires the consumer to use `onExcessProperty: \"error\"`\n // https://github.com/Effect-TS/effect/tree/main/packages/schema#strict\n } else if (schema.additionalProperties === true) {\n // No equivalent for this on a schema level, requires the consumer to use `onExcessProperty: \"preserve\"`\n // https://github.com/Effect-TS/effect/tree/main/packages/schema#passthrough\n } else {\n const additionalPropsResult = generateForSchema(ctx, schema.additionalProperties);\n refs = GenResultUtil.combineRefs(refs, additionalPropsResult.refs);\n \n // https://github.com/Effect-TS/effect/tree/main/packages/schema#index-signatures\n // TODO: also include the `comments` from `additionalPropsResult`?\n indexSignature = `{ key: S.String, value: ${additionalPropsResult.code} }`;\n }\n }\n \n const fieldsGen = generateFieldsForObjectSchema(ctx, schema);\n refs = GenResultUtil.combineRefs(refs, fieldsGen.refs);\n code = dedent`\n S.Struct({\\n\n ${fieldsGen.code}\n }${indexSignature ? `, ${indexSignature}` : ''})\n `;\n }\n return code;\n })();\n \n return {\n code,\n refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForArraySchema = (ctx: Context, schema: OpenApi.ArraySchemaObject): GenResult => {\n const itemSchema: OpenApiSchema = schema.items;\n const itemResult = generateForSchema(ctx, itemSchema);\n \n const code = ((): string => {\n let code = `S.Array(${itemResult.code})`;\n if (typeof schema.minLength === 'number') { code = `${code}.min(${schema.minLength})`; }\n if (typeof schema.maxLength === 'number') { code = `${code}.max(${schema.maxLength})`; }\n //if (schema.nullable) { code = `S.NullOr(${code})`; }\n return code;\n })();\n \n // FIXME: include the comments for `itemSchema` as well?\n return {\n code,\n refs: itemResult.refs,\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n};\n\nexport const generateForReferenceObject = (ctx: Context, schema: OpenApi.ReferenceObject): GenResult => {\n // FIXME: make this logic customizable (allow a callback to resolve a `$ref` string to a `Ref` instance?)\n const schemaId = schemaIdFromRef(schema.$ref);\n \n // If the referenced schema ID is topologically after the current one, wrap it in `S.suspend` for lazy eval\n const shouldSuspend = !ctx.isSchemaIdBefore(schemaId);\n const code = shouldSuspend\n ? `S.suspend((): S.Schema<_${id(schemaId)}, _${id(schemaId)}Encoded> => ${id(schemaId)})`\n : id(schemaId);\n \n return { code, refs: [`./${schemaId}.ts`], comments: GenResultUtil.initComments() };\n};\n\n// Generate the @effect/schema code for the given OpenAPI schema\nexport const generateForSchema = (ctx: Context, schema: OpenApiSchema): GenResult => {\n const isNonArraySchemaType = (schema: OpenApiSchema): schema is OpenApi.NonArraySchemaObject => {\n return !('$ref' in schema) && (!('type' in schema) || !Array.isArray(schema.type));\n };\n \n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n return generateForReferenceObject(ctx, schema);\n } else { // Case: OpenApi.SchemaObject\n if (schema.type === 'array' || 'items' in schema) { // Case: OpenApi.ArraySchemaObject\n return generateForArraySchema(ctx, { items: {}, ...schema } as OpenApi.ArraySchemaObject);\n } else { // Case: OpenApi.NonArraySchemaObject | OpenApi.MixedSchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n const schemasHead: undefined | OpenApiSchema = schema.allOf[0];\n if (schemasHead && schema.allOf.length === 1) { // If only one schema, simply generate that schema\n return generateForSchema(ctx, schemasHead);\n }\n \n // `allOf` supports any type, but `@effect/schema` does not currently support generic intersections. Thus,\n // currently we only support `allOf` if it consists only of object schemas.\n // Idea: merge `allOf` schema first, e.g. using https://github.com/mokkabonna/json-schema-merge-allof\n const areAllObjects: boolean = schema.allOf.reduce(\n (acc, schema) => {\n if ('$ref' in schema) {\n return acc && isObjectSchema(ctx.schemas, schema.$ref);\n }\n \n const isObject = isNonArraySchemaType(schema) && schema.type === 'object';\n return acc && isObject;\n },\n true,\n );\n \n /*\n if (!areAllObjects) {\n throw new Error(dedent`\n Found \\`allOf\\` with a non-object schema. Currently only object schemas or unions of object schemas are\n supported.\n `);\n }\n */\n \n const schemas: Array<OpenApiSchema> = schema.allOf\n // Filter out empty schemas\n // XXX this only makes sense when all schemas are objects, would not work if we supported generic `allOf`\n .filter((schema: OpenApiSchema) => {\n if (!isNonArraySchemaType(schema) || schema.type !== 'object') { return true; }\n \n const props = schema.properties ?? {};\n if (Object.keys(props).length === 0 && !schema.additionalProperties) {\n return false;\n } else {\n return true;\n }\n });\n \n if (typeof schemasHead === 'undefined') {\n // XXX this only works for object schemas, as in `S.extend()`, would not work if we support generic `allOf`\n return generateForObjectSchema(ctx, { type: 'object' }); // Empty `allOf`\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n let code = '';\n let schemasResults: Array<GenResult>;\n if (areAllObjects) {\n // Experimental: using `...MySchema.fields` to combine struct schemas.\n // Note: doesn't work if `MySchema` is a union of structs\n \n schemasResults = schemas.map(schema => {\n const genResult = generateForSchema(ctx, schema);\n if ('$ref' in schema) {\n genResult.code = `...${genResult.code}.fields,`;\n } else if (isNonArraySchemaType(schema)) {\n genResult.code = generateFieldsForObjectSchema(ctx, schema).code;\n }\n return genResult;\n });\n \n code = dedent`\n S.Struct({\n ${schemasResults\n .map(({ code, comments }, index) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${commentsGenerated.commentInline}\n ${code}\n `.trim();\n })\n .join('\\n')\n }\n })\n `;\n } else {\n schemasResults = schemas.map(schema => generateForSchema(ctx, schema));\n \n // Note: `extend` doesn't quite cover the semantics of `allOf`, since it only accepts objects and\n // assumes distinct types. However, @effect/schema has no generic built-in mechanism for this.\n code = dedent`\n pipe(\n ${schemasResults\n .map(({ code, comments }, index) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${index > 0 ? `S.extend(${code})` : code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n }\n \n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.flatMap(({ refs }) => refs)),\n comments: GenResultUtil.initComments(),\n };\n }\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n const schemas: Array<OpenApiSchema> = schema.oneOf;\n const schemasHead: undefined | OpenApiSchema = schemas[0];\n if (typeof schemasHead === 'undefined') {\n throw new TypeError(`oneOf must have at least one schema`);\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n const schemasResults: Array<GenResult> = schemas.map(schema => generateForSchema(ctx, schema));\n // Note: `union` doesn't quite cover the semantics of `oneOf`, since `oneOf` must guarantee that exactly\n // one schema matches. However, @effect/schema has no easy built-in mechanism for this.\n const code = dedent`\n S.Union(\n ${schemasResults\n .map(({ code, comments }) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.map(({ refs }) => refs).flat()),\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n }\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n const schemas: Array<OpenApiSchema> = schema.anyOf;\n const schemasHead: undefined | OpenApiSchema = schemas[0];\n if (typeof schemasHead === 'undefined') {\n throw new TypeError(`anyOf must have at least one schema`);\n } else if (schemas.length === 1) {\n // Trivial case: only one schema\n return generateForSchema(ctx, schemasHead);\n } else {\n const schemasResults: Array<GenResult> = schemas.map(schema => generateForSchema(ctx, schema));\n const code = dedent`\n S.Union(\n ${schemasResults\n .map(({ code, comments }) => {\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n return dedent`\n ${commentsGenerated.commentBlock}\n ${code}, ${commentsGenerated.commentInline}\n `.trim();\n })\n .join('\\n')\n }\n )\n `;\n return {\n code,\n refs: GenResultUtil.combineRefs(schemasResults.map(({ refs }) => refs).flat()),\n comments: GenResultUtil.commentsFromSchemaObject(schema),\n };\n }\n }\n \n type SchemaType = 'array' | OpenApi.NonArraySchemaObjectType;\n const type: undefined | OpenApi.NonArraySchemaObjectType | Array<SchemaType> = schema.type;\n \n const hookResult: null | GenResult = ctx.hooks.generateSchema?.(schema) ?? null;\n \n let result: GenResult;\n if (hookResult !== null) {\n result = hookResult;\n } else {\n if (typeof type === 'undefined') {\n result = generateForUnknownSchema(ctx, schema as OpenApi.NonArraySchemaObject); // Any type\n } else if (Array.isArray(type)) {\n // `type` as an array is equivalent to `anyOf` with `type` set to the individual type string\n const schemaAnyOf = { anyOf: type.map(type => ({ ...schema, type })) } as OpenApiSchema;\n result = generateForSchema(ctx, schemaAnyOf);\n } else {\n const schemaNonMixed = schema as OpenApi.NonArraySchemaObject;\n switch (type) {\n case 'null': result = generateForNullSchema(ctx, schemaNonMixed); break;\n case 'string': result = generateForStringSchema(ctx, schemaNonMixed); break;\n case 'number': result = generateForNumberSchema(ctx, schemaNonMixed); break;\n case 'integer': result = generateForNumberSchema(ctx, schemaNonMixed); break;\n case 'boolean': result = generateForBooleanSchema(ctx, schemaNonMixed); break;\n case 'object': result = generateForObjectSchema(ctx, schemaNonMixed); break;\n default: throw new TypeError(`Unsupported type \"${type}\"`);\n }\n }\n }\n return {\n ...result,\n code: `${result.code}`,\n };\n }\n }\n};\n"],"mappings":"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","ignoreList":[]}
import { type OpenAPIV3_1 as OpenApi } from 'openapi-types';
import { OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';
import { type OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';
import * as GenSpec from '../generationSpec.ts';

@@ -4,0 +4,0 @@ import { type GenResult } from './genUtil.ts';

@@ -1,1 +0,1 @@

{"version":3,"file":"schemaGen.d.ts","sourceRoot":"","sources":["../../../../src/generation/effSchemGen/schemaGen.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,WAAW,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAmB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE7F,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,cAAc,CAAC;AAK7D,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;IAC/B,gBAAgB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,OAAO,CAAC;CAC1D,CAAC;AAEF,eAAO,MAAM,wBAAwB,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SAM7F,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SAM1F,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SAkD5F,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAC7B,OAAO,UACJ,OAAO,CAAC,oBAAoB,KACnC,SAyCF,CAAC;AAEF,eAAO,MAAM,wBAAwB,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SAa7F,CAAC;AAWF,eAAO,MAAM,6BAA6B,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SA8DlG,CAAC;AACF,eAAO,MAAM,uBAAuB,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SAwD5F,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAAS,OAAO,UAAU,OAAO,CAAC,iBAAiB,KAAG,SAkBxF,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAAS,OAAO,UAAU,OAAO,CAAC,eAAe,KAAG,SAW1F,CAAC;AAGF,eAAO,MAAM,iBAAiB,QAAS,OAAO,UAAU,aAAa,KAAG,SA0NvE,CAAC"}
{"version":3,"file":"schemaGen.d.ts","sourceRoot":"","sources":["../../../../src/generation/effSchemGen/schemaGen.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,WAAW,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEjF,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,cAAc,CAAC;AAK7D,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;IAC/B,gBAAgB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,OAAO,CAAC;CAC1D,CAAC;AAEF,eAAO,MAAM,wBAAwB,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SAM7F,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SAM1F,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SAkD5F,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAC7B,OAAO,UACJ,OAAO,CAAC,oBAAoB,KACnC,SAyCF,CAAC;AAEF,eAAO,MAAM,wBAAwB,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SAa7F,CAAC;AAWF,eAAO,MAAM,6BAA6B,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SA+DlG,CAAC;AACF,eAAO,MAAM,uBAAuB,QAAS,OAAO,UAAU,OAAO,CAAC,oBAAoB,KAAG,SAwD5F,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAAS,OAAO,UAAU,OAAO,CAAC,iBAAiB,KAAG,SAkBxF,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAAS,OAAO,UAAU,OAAO,CAAC,eAAe,KAAG,SAW1F,CAAC;AAGF,eAAO,MAAM,iBAAiB,QAAS,OAAO,UAAU,aAAa,KAAG,SA0NvE,CAAC"}
{
"name": "openapi-to-effect",
"version": "0.7.2",
"version": "0.8.0",
"license": "MPL-2.0",

@@ -57,10 +57,10 @@ "homepage": "https://github.com/fortanix/openapi-to-effect",

"devDependencies": {
"typescript": "^5.5.2",
"tsx": "^4.15.7",
"@babel/core": "^7.24.7",
"@babel/cli": "^7.24.7",
"@babel/preset-env": "^7.24.7",
"typescript": "^5.6.2",
"tsx": "^4.19.1",
"@babel/core": "^7.25.2",
"@babel/cli": "^7.25.6",
"@babel/preset-env": "^7.25.4",
"@babel/preset-typescript": "^7.24.7",
"babel-plugin-replace-import-extension": "^1.1.4",
"@types/node": "^20.14.9",
"@types/node": "^22.5.4",
"openapi-types": "^12.1.3"

@@ -71,7 +71,7 @@ },

"immutable-json-patch": "^6.0.1",
"prettier": "^3.3.2",
"prettier": "^3.3.3",
"prettier-plugin-jsdoc": "^1.3.0",
"effect": "^3.4.4",
"fast-check": "^3.19.0",
"@effect/schema": "^0.68.11"
"effect": "^3.7.3",
"fast-check": "^3.22.0",
"@effect/schema": "^0.72.4"
},

@@ -78,0 +78,0 @@ "peerDependencies": {