openapi-to-effect
Advanced tools
@@ -58,5 +58,10 @@ "use strict"; | ||
| // Case: OpenApi.SchemaObject | ||
| if ('items' in schema) { | ||
| if (schema.type === 'array' || 'items' in schema) { | ||
| // Case: OpenApi.ArraySchemaObject | ||
| return depsShallow(schema.items); | ||
| if ('items' in schema) { | ||
| return depsShallow(schema.items); | ||
| } else { | ||
| // Array of unknown | ||
| return new Set(); | ||
| } | ||
| } else { | ||
@@ -72,2 +77,3 @@ // Case: OpenApi.NonArraySchemaObject | ||
| switch (schema.type) { | ||
| case undefined: // Any type | ||
| case 'null': | ||
@@ -105,5 +111,10 @@ case 'string': | ||
| // Case: OpenApi.SchemaObject | ||
| if ('items' in schema) { | ||
| if (schema.type === 'array' || 'items' in schema) { | ||
| // Case: OpenApi.ArraySchemaObject | ||
| return depsDeep(schema.items, resolve, visited); | ||
| if ('items' in schema) { | ||
| return depsDeep(schema.items, resolve, visited); | ||
| } else { | ||
| // Array of unknown | ||
| return {}; | ||
| } | ||
| } else { | ||
@@ -119,2 +130,5 @@ // Case: OpenApi.NonArraySchemaObject | ||
| switch (schema.type) { | ||
| case undefined: | ||
| // Any type | ||
| return {}; | ||
| case 'null': | ||
@@ -250,5 +264,5 @@ case 'string': | ||
| // Case: OpenApi.SchemaObject | ||
| if ('items' in schema) { | ||
| if (schema.type === 'array' || 'items' in schema) { | ||
| // Case: OpenApi.ArraySchemaObject | ||
| return _isObjectSchema(schema.items, resolve, visited); | ||
| return false; | ||
| } else { | ||
@@ -264,2 +278,6 @@ // Case: OpenApi.NonArraySchemaObject | ||
| switch (schema.type) { | ||
| case undefined: | ||
| // Any type | ||
| return false; | ||
| // Possibly an object, but we cannot know | ||
| case 'null': | ||
@@ -266,0 +284,0 @@ case 'string': |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"GraphAnalyzer.cjs","names":["_openapi","require","schemaIdFromRef","ref","matches","match","test","Error","pointer","replace","refSchemaId","segments","decodeJsonPointer","slice","length","exports","refFromSchemaId","schemaId","encodeJsonPointer","resolver","schemas","refSchema","depsShallow","schema","Set","$ref","items","allOf","flatMap","subschema","oneOf","anyOf","type","props","properties","additionalProps","additionalProperties","additionalPropsSchema","Object","values","propSchema","TypeError","JSON","stringify","depsDeep","resolve","visited","has","assign","dependencyTree","document","rootSchemaRef","components","rootSchemaId","rootSchema","dependenciesMapFromDocument","dependenciesMap","Map","entries","schemaRef","dependencies","set","dependentsMapFromDocument","dependentsMap","error","cause","dependency","get","topologicalSorter","refsWithCycles","sorted","visit","add","dependents","dependentSchemaRef","unshift","circularDependency","topologicalSort","adjacency","sorter","keys","InfiniteRecursionError","_isObjectSchema","every","Boolean","isObjectSchema"],"sources":["../../../src/analysis/GraphAnalyzer.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 { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { type OpenApiSchemaId, type OpenApiSchema, decodeJsonPointer, encodeJsonPointer } from '../util/openapi.ts';\n\n\n//\n// Reference resolving\n//\n\ntype Ref = string; // OpenAPI schema reference\ntype Resolve = (ref: Ref) => OpenApiSchema; // Callback to take a ref and resolve it to the corresponding schema\n\nexport const schemaIdFromRef = (ref: Ref): OpenApiSchemaId => {\n const matches = ref.match(/^#\\/components\\/schemas\\/.+/);\n if (!/^#\\/components\\/schemas\\/.+/.test(ref)) {\n throw new Error(`Reference format not supported: ${ref}`);\n }\n \n const pointer = ref.replace(/^#/, '');\n const [refSchemaId, ...segments] = decodeJsonPointer(pointer).slice(2);\n if (typeof refSchemaId === 'undefined') { throw new Error('Should not happen'); }\n if (segments.length !== 0) { throw new Error(`Refs to nested paths not supported: ${ref}`); }\n \n return refSchemaId;\n};\nexport const refFromSchemaId = (schemaId: OpenApiSchemaId): Ref => {\n return '#' + encodeJsonPointer(['components', 'schemas', schemaId]);\n};\n\nconst resolver = (schemas: Record<OpenApiSchemaId, OpenApiSchema>) => (ref: string): OpenApiSchema => {\n const refSchemaId = schemaIdFromRef(ref);\n const refSchema = schemas[refSchemaId];\n if (typeof refSchema === 'undefined') { throw new Error('Should not happen'); }\n return refSchema;\n};\n\n// Get all direct (shallow) dependencies\nconst depsShallow = (schema: OpenApiSchema): Set<Ref> => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n return new Set([schema.$ref]);\n } else { // Case: OpenApi.SchemaObject\n if ('items' in schema) { // Case: OpenApi.ArraySchemaObject\n return depsShallow(schema.items);\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return new Set(schema.allOf.flatMap(subschema => [...depsShallow(subschema)]));\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return new Set(schema.oneOf.flatMap(subschema => [...depsShallow(subschema)]));\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return new Set(schema.anyOf.flatMap(subschema => [...depsShallow(subschema)]));\n }\n \n switch (schema.type) {\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return new Set();\n case 'object':\n const props: Record<OpenApiSchemaId, OpenApiSchema> = schema.properties ?? {};\n const additionalProps = schema.additionalProperties;\n const additionalPropsSchema: null | OpenApiSchema =\n typeof additionalProps === 'object' && additionalProps !== null\n ? additionalProps\n : null;\n return new Set([\n ...Object.values(props).flatMap(propSchema => [...depsShallow(propSchema)]),\n ...(additionalPropsSchema ? depsShallow(additionalPropsSchema) : []),\n ]);\n default: throw new TypeError(`Unsupported type ${JSON.stringify(schema.type)}`);\n }\n }\n }\n};\n\n// Get all dependencies for the given schema (as a dependency tree rooted at `schema`)\nconst depsDeep = (schema: OpenApiSchema, resolve: Resolve, visited: Set<Ref>): DepTree => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n if (visited.has(schema.$ref)) { return { [schema.$ref]: 'recurse' }; }\n return { [schema.$ref]: depsDeep(resolve(schema.$ref), resolve, new Set([...visited, schema.$ref])) };\n } else { // Case: OpenApi.SchemaObject\n if ('items' in schema) { // Case: OpenApi.ArraySchemaObject\n return depsDeep(schema.items, resolve, visited);\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return Object.assign({}, ...schema.allOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return Object.assign({}, ...schema.oneOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return Object.assign({}, ...schema.anyOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n }\n \n switch (schema.type) {\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return {};\n case 'object':\n const props: Record<OpenApiSchemaId, OpenApiSchema> = schema.properties ?? {};\n const additionalProps = schema.additionalProperties;\n const additionalPropsSchema: null | OpenApiSchema =\n typeof additionalProps === 'object' && additionalProps !== null\n ? additionalProps\n : null;\n return Object.assign(\n {},\n ...Object.values(props).flatMap(propSchema => depsDeep(propSchema, resolve, visited)),\n additionalPropsSchema ? depsDeep(additionalPropsSchema, resolve, visited) : {},\n );\n default: throw new TypeError(`Unsupported type \"${schema.type}\"`);\n }\n }\n }\n};\n\n\n//\n// Dependency trees\n//\n\ntype DepTree = { [ref: Ref]: DepTree | 'recurse' };\n\n// Create a dependency tree rooted at `rootRef`. If we find a cycle, inject a special \"recurse\" marker.\nexport const dependencyTree = (document: OpenApi.Document, rootSchemaRef: Ref): DepTree => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n const rootSchemaId = schemaIdFromRef(rootSchemaRef);\n \n const rootSchema: undefined | OpenApiSchema = schemas[rootSchemaId];\n if (!rootSchema) { throw new Error(`Unable to find schema \"${rootSchemaRef}\"`); }\n \n return { [rootSchemaRef]: depsDeep(rootSchema, resolver(schemas), new Set([rootSchemaRef])) };\n};\n\n\n//\n// Adjacency maps\n//\n\ntype AdjacencyMap = Map<Ref, Set<Ref>>;\n\n// Get a mapping from schemas to all of their direct dependencies\nexport const dependenciesMapFromDocument = (document: OpenApi.Document): AdjacencyMap => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n // Mapping from a particular schema to its dependencies (directed neighbors in the graph: schema -> dependency)\n const dependenciesMap: AdjacencyMap = new Map<Ref, Set<Ref>>();\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n const dependencies: Set<Ref> = depsShallow(schema);\n \n dependenciesMap.set(schemaRef, dependencies);\n }\n \n return dependenciesMap;\n};\n\n// Get a mapping from schemas to all of their direct dependents\nexport const dependentsMapFromDocument = (document: OpenApi.Document): AdjacencyMap => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n // Mapping from a particular schema to its dependents (directed neighbors in the graph: schema <- dependent)\n const dependentsMap: AdjacencyMap = new Map<Ref, Set<Ref>>();\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n const dependencies = ((): Set<Ref> => {\n try {\n return depsShallow(schema);\n } catch (error: unknown) {\n throw new Error(`Unable to determine dependents for '${schemaRef}'`, { cause: error });\n }\n })();\n \n for (const dependency of dependencies) {\n dependentsMap.set(dependency, new Set([\n ...(dependentsMap.get(dependency) ?? new Set()),\n schemaRef,\n ]));\n }\n }\n \n return dependentsMap;\n};\n\n\n//\n// Topological sort\n//\n\ntype TopologicalSort = Array<{\n ref: Ref,\n circularDependency: boolean, // If true, then this has at least one dependency that breaks the topological ordering\n}>;\nconst topologicalSorter = (dependentsMap: AdjacencyMap) => {\n const visited = new Set<Ref>(); // Keep track of schemas we've already visited\n const refsWithCycles = new Set<Ref>(); // Keep track of schemas that have at least one circular dependency\n const sorted: TopologicalSort = [];\n \n const visit = (schemaRef: Ref): void => {\n if (visited.has(schemaRef)) {\n refsWithCycles.add(schemaRef);\n return;\n }\n \n visited.add(schemaRef);\n \n const dependents = dependentsMap.get(schemaRef) ?? new Set();\n for (const dependentSchemaRef of dependents) {\n visit(dependentSchemaRef);\n }\n \n sorted.unshift({ ref: schemaRef, circularDependency: refsWithCycles.has(schemaRef) });\n };\n \n return { visit, sorted };\n};\n\nexport const topologicalSort = (document: OpenApi.Document): TopologicalSort => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n const adjacency = dependentsMapFromDocument(document);\n const sorter = topologicalSorter(adjacency);\n \n for (const schemaId of Object.keys(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n sorter.visit(schemaRef);\n }\n \n return sorter.sorted;\n};\n\n\n// Util: check if a given schema is an object schema\nexport class InfiniteRecursionError extends Error {}\nconst _isObjectSchema = (schema: OpenApiSchema, resolve: Resolve, visited: Set<Ref>): boolean => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n if (visited.has(schema.$ref)) {\n throw new InfiniteRecursionError(`Infinite recursion at ${schema.$ref}`);\n }\n return _isObjectSchema(resolve(schema.$ref), resolve, new Set([...visited, schema.$ref]));\n } else { // Case: OpenApi.SchemaObject\n if ('items' in schema) { // Case: OpenApi.ArraySchemaObject\n return _isObjectSchema(schema.items, resolve, visited);\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return schema.allOf.flatMap(subschema => _isObjectSchema(subschema, resolve, visited)).every(Boolean);\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return false; // Union\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return false; // Union\n }\n \n switch (schema.type) {\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return false;\n case 'object':\n return true;\n default: throw new TypeError(`Unsupported type \"${schema.type}\"`);\n }\n }\n }\n};\nexport const isObjectSchema = (schemas: Record<OpenApiSchemaId, OpenApiSchema>, rootSchemaRef: Ref): boolean => {\n const rootSchemaId = schemaIdFromRef(rootSchemaRef);\n \n const rootSchema: undefined | OpenApiSchema = schemas[rootSchemaId];\n if (!rootSchema) { throw new Error(`Unable to find schema \"${rootSchemaRef}\"`); }\n \n return _isObjectSchema(rootSchema, resolver(schemas), new Set([rootSchemaRef]));\n};\n"],"mappings":"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","ignoreList":[]} | ||
| {"version":3,"file":"GraphAnalyzer.cjs","names":["_openapi","require","schemaIdFromRef","ref","matches","match","test","Error","pointer","replace","refSchemaId","segments","decodeJsonPointer","slice","length","exports","refFromSchemaId","schemaId","encodeJsonPointer","resolver","schemas","refSchema","depsShallow","schema","Set","$ref","type","items","allOf","flatMap","subschema","oneOf","anyOf","undefined","props","properties","additionalProps","additionalProperties","additionalPropsSchema","Object","values","propSchema","TypeError","JSON","stringify","depsDeep","resolve","visited","has","assign","dependencyTree","document","rootSchemaRef","components","rootSchemaId","rootSchema","dependenciesMapFromDocument","dependenciesMap","Map","entries","schemaRef","dependencies","set","dependentsMapFromDocument","dependentsMap","error","cause","dependency","get","topologicalSorter","refsWithCycles","sorted","visit","add","dependents","dependentSchemaRef","unshift","circularDependency","topologicalSort","adjacency","sorter","keys","InfiniteRecursionError","_isObjectSchema","every","Boolean","isObjectSchema"],"sources":["../../../src/analysis/GraphAnalyzer.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 { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { type OpenApiSchemaId, type OpenApiSchema, decodeJsonPointer, encodeJsonPointer } from '../util/openapi.ts';\n\n\n//\n// Reference resolving\n//\n\ntype Ref = string; // OpenAPI schema reference\ntype Resolve = (ref: Ref) => OpenApiSchema; // Callback to take a ref and resolve it to the corresponding schema\n\nexport const schemaIdFromRef = (ref: Ref): OpenApiSchemaId => {\n const matches = ref.match(/^#\\/components\\/schemas\\/.+/);\n if (!/^#\\/components\\/schemas\\/.+/.test(ref)) {\n throw new Error(`Reference format not supported: ${ref}`);\n }\n \n const pointer = ref.replace(/^#/, '');\n const [refSchemaId, ...segments] = decodeJsonPointer(pointer).slice(2);\n if (typeof refSchemaId === 'undefined') { throw new Error('Should not happen'); }\n if (segments.length !== 0) { throw new Error(`Refs to nested paths not supported: ${ref}`); }\n \n return refSchemaId;\n};\nexport const refFromSchemaId = (schemaId: OpenApiSchemaId): Ref => {\n return '#' + encodeJsonPointer(['components', 'schemas', schemaId]);\n};\n\nconst resolver = (schemas: Record<OpenApiSchemaId, OpenApiSchema>) => (ref: string): OpenApiSchema => {\n const refSchemaId = schemaIdFromRef(ref);\n const refSchema = schemas[refSchemaId];\n if (typeof refSchema === 'undefined') { throw new Error('Should not happen'); }\n return refSchema;\n};\n\n// Get all direct (shallow) dependencies\nconst depsShallow = (schema: OpenApiSchema): Set<Ref> => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n return new Set([schema.$ref]);\n } else { // Case: OpenApi.SchemaObject\n if (schema.type === 'array' || 'items' in schema) { // Case: OpenApi.ArraySchemaObject\n if ('items' in schema) {\n return depsShallow(schema.items);\n } else { // Array of unknown\n return new Set();\n }\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return new Set(schema.allOf.flatMap(subschema => [...depsShallow(subschema)]));\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return new Set(schema.oneOf.flatMap(subschema => [...depsShallow(subschema)]));\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return new Set(schema.anyOf.flatMap(subschema => [...depsShallow(subschema)]));\n }\n \n switch (schema.type) {\n case undefined: // Any type\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return new Set();\n case 'object':\n const props: Record<OpenApiSchemaId, OpenApiSchema> = schema.properties ?? {};\n const additionalProps = schema.additionalProperties;\n const additionalPropsSchema: null | OpenApiSchema =\n typeof additionalProps === 'object' && additionalProps !== null\n ? additionalProps\n : null;\n return new Set([\n ...Object.values(props).flatMap(propSchema => [...depsShallow(propSchema)]),\n ...(additionalPropsSchema ? depsShallow(additionalPropsSchema) : []),\n ]);\n default: throw new TypeError(`Unsupported type ${JSON.stringify(schema.type)}`);\n }\n }\n }\n};\n\n// Get all dependencies for the given schema (as a dependency tree rooted at `schema`)\nconst depsDeep = (schema: OpenApiSchema, resolve: Resolve, visited: Set<Ref>): DepTree => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n if (visited.has(schema.$ref)) { return { [schema.$ref]: 'recurse' }; }\n return { [schema.$ref]: depsDeep(resolve(schema.$ref), resolve, new Set([...visited, schema.$ref])) };\n } else { // Case: OpenApi.SchemaObject\n if (schema.type === 'array' || 'items' in schema) { // Case: OpenApi.ArraySchemaObject\n if ('items' in schema) {\n return depsDeep(schema.items, resolve, visited);\n } else { // Array of unknown\n return {};\n }\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return Object.assign({}, ...schema.allOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return Object.assign({}, ...schema.oneOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return Object.assign({}, ...schema.anyOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n }\n \n switch (schema.type) {\n case undefined: // Any type\n return {};\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return {};\n case 'object':\n const props: Record<OpenApiSchemaId, OpenApiSchema> = schema.properties ?? {};\n const additionalProps = schema.additionalProperties;\n const additionalPropsSchema: null | OpenApiSchema =\n typeof additionalProps === 'object' && additionalProps !== null\n ? additionalProps\n : null;\n return Object.assign(\n {},\n ...Object.values(props).flatMap(propSchema => depsDeep(propSchema, resolve, visited)),\n additionalPropsSchema ? depsDeep(additionalPropsSchema, resolve, visited) : {},\n );\n default: throw new TypeError(`Unsupported type \"${schema.type}\"`);\n }\n }\n }\n};\n\n\n//\n// Dependency trees\n//\n\ntype DepTree = { [ref: Ref]: DepTree | 'recurse' };\n\n// Create a dependency tree rooted at `rootRef`. If we find a cycle, inject a special \"recurse\" marker.\nexport const dependencyTree = (document: OpenApi.Document, rootSchemaRef: Ref): DepTree => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n const rootSchemaId = schemaIdFromRef(rootSchemaRef);\n \n const rootSchema: undefined | OpenApiSchema = schemas[rootSchemaId];\n if (!rootSchema) { throw new Error(`Unable to find schema \"${rootSchemaRef}\"`); }\n \n return { [rootSchemaRef]: depsDeep(rootSchema, resolver(schemas), new Set([rootSchemaRef])) };\n};\n\n\n//\n// Adjacency maps\n//\n\ntype AdjacencyMap = Map<Ref, Set<Ref>>;\n\n// Get a mapping from schemas to all of their direct dependencies\nexport const dependenciesMapFromDocument = (document: OpenApi.Document): AdjacencyMap => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n // Mapping from a particular schema to its dependencies (directed neighbors in the graph: schema -> dependency)\n const dependenciesMap: AdjacencyMap = new Map<Ref, Set<Ref>>();\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n const dependencies: Set<Ref> = depsShallow(schema);\n \n dependenciesMap.set(schemaRef, dependencies);\n }\n \n return dependenciesMap;\n};\n\n// Get a mapping from schemas to all of their direct dependents\nexport const dependentsMapFromDocument = (document: OpenApi.Document): AdjacencyMap => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n // Mapping from a particular schema to its dependents (directed neighbors in the graph: schema <- dependent)\n const dependentsMap: AdjacencyMap = new Map<Ref, Set<Ref>>();\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n const dependencies = ((): Set<Ref> => {\n try {\n return depsShallow(schema);\n } catch (error: unknown) {\n throw new Error(`Unable to determine dependents for '${schemaRef}'`, { cause: error });\n }\n })();\n \n for (const dependency of dependencies) {\n dependentsMap.set(dependency, new Set([\n ...(dependentsMap.get(dependency) ?? new Set()),\n schemaRef,\n ]));\n }\n }\n \n return dependentsMap;\n};\n\n\n//\n// Topological sort\n//\n\ntype TopologicalSort = Array<{\n ref: Ref,\n circularDependency: boolean, // If true, then this has at least one dependency that breaks the topological ordering\n}>;\nconst topologicalSorter = (dependentsMap: AdjacencyMap) => {\n const visited = new Set<Ref>(); // Keep track of schemas we've already visited\n const refsWithCycles = new Set<Ref>(); // Keep track of schemas that have at least one circular dependency\n const sorted: TopologicalSort = [];\n \n const visit = (schemaRef: Ref): void => {\n if (visited.has(schemaRef)) {\n refsWithCycles.add(schemaRef);\n return;\n }\n \n visited.add(schemaRef);\n \n const dependents = dependentsMap.get(schemaRef) ?? new Set();\n for (const dependentSchemaRef of dependents) {\n visit(dependentSchemaRef);\n }\n \n sorted.unshift({ ref: schemaRef, circularDependency: refsWithCycles.has(schemaRef) });\n };\n \n return { visit, sorted };\n};\n\nexport const topologicalSort = (document: OpenApi.Document): TopologicalSort => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n const adjacency = dependentsMapFromDocument(document);\n const sorter = topologicalSorter(adjacency);\n \n for (const schemaId of Object.keys(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n sorter.visit(schemaRef);\n }\n \n return sorter.sorted;\n};\n\n\n// Util: check if a given schema is an object schema\nexport class InfiniteRecursionError extends Error {}\nconst _isObjectSchema = (schema: OpenApiSchema, resolve: Resolve, visited: Set<Ref>): boolean => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n if (visited.has(schema.$ref)) {\n throw new InfiniteRecursionError(`Infinite recursion at ${schema.$ref}`);\n }\n return _isObjectSchema(resolve(schema.$ref), resolve, new Set([...visited, schema.$ref]));\n } else { // Case: OpenApi.SchemaObject\n if (schema.type === 'array' || 'items' in schema) { // Case: OpenApi.ArraySchemaObject\n return false;\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return schema.allOf.flatMap(subschema => _isObjectSchema(subschema, resolve, visited)).every(Boolean);\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return false; // Union\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return false; // Union\n }\n \n switch (schema.type) {\n case undefined: // Any type\n return false; // Possibly an object, but we cannot know\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return false;\n case 'object':\n return true;\n default: throw new TypeError(`Unsupported type \"${schema.type}\"`);\n }\n }\n }\n};\nexport const isObjectSchema = (schemas: Record<OpenApiSchemaId, OpenApiSchema>, rootSchemaRef: Ref): boolean => {\n const rootSchemaId = schemaIdFromRef(rootSchemaRef);\n \n const rootSchema: undefined | OpenApiSchema = schemas[rootSchemaId];\n if (!rootSchema) { throw new Error(`Unable to find schema \"${rootSchemaRef}\"`); }\n \n return _isObjectSchema(rootSchema, resolver(schemas), new Set([rootSchemaRef]));\n};\n"],"mappings":"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","ignoreList":[]} |
@@ -6,3 +6,3 @@ "use strict"; | ||
| }); | ||
| exports.generateForStringSchema = exports.generateForSchema = exports.generateForReferenceObject = exports.generateForObjectSchema = exports.generateForNumberSchema = exports.generateForNullSchema = exports.generateForBooleanSchema = exports.generateForArraySchema = exports.generateFieldsForObjectSchema = void 0; | ||
| exports.generateForUnknownSchema = exports.generateForStringSchema = exports.generateForSchema = exports.generateForReferenceObject = exports.generateForObjectSchema = exports.generateForNumberSchema = exports.generateForNullSchema = exports.generateForBooleanSchema = exports.generateForArraySchema = exports.generateFieldsForObjectSchema = void 0; | ||
| var _tsDedent = require("ts-dedent"); | ||
@@ -18,2 +18,11 @@ var _GraphAnalyzer = require("../../analysis/GraphAnalyzer.cjs"); | ||
| const id = _genUtil.GenResultUtil.encodeIdentifier; | ||
| const generateForUnknownSchema = (ctx, schema) => { | ||
| return { | ||
| code: `S.Unknown`, | ||
| refs: [], | ||
| comments: _genUtil.GenResultUtil.commentsFromSchemaObject(schema) | ||
| }; | ||
| }; | ||
| exports.generateForUnknownSchema = generateForUnknownSchema; | ||
| const generateForNullSchema = (ctx, schema) => { | ||
@@ -31,7 +40,7 @@ return { | ||
| if (Array.isArray(schema.enum)) { | ||
| if (!schema.enum.every(value => typeof value === 'string')) { | ||
| if (!schema.enum.every(value => typeof value === 'string' || typeof value === 'number')) { | ||
| throw new TypeError(`Unknown enum value, expected string array: ${JSON.stringify(schema.enum)}`); | ||
| } | ||
| return (0, _tsDedent.dedent)`S.Literal( | ||
| ${schema.enum.map(value => JSON.stringify(value) + ',').join('\n')} | ||
| ${schema.enum.map(value => JSON.stringify(String(value)) + ',').join('\n')} | ||
| )`; | ||
@@ -297,14 +306,7 @@ } | ||
| // FIXME: make this logic customizable (allow a callback to resolve a `$ref` string to a `Ref` instance?) | ||
| const matches = schema.$ref.match(/^#\/components\/schemas\/([a-zA-Z0-9_$]+)/); | ||
| if (!matches) { | ||
| throw new Error(`Reference format not supported: ${schema.$ref}`); | ||
| } | ||
| const schemaId = matches[1]; | ||
| if (typeof schemaId === 'undefined') { | ||
| throw new Error('Should not happen'); | ||
| } | ||
| const schemaId = (0, _GraphAnalyzer.schemaIdFromRef)(schema.$ref); | ||
| // If the referenced schema ID is topologically after the current one, wrap it in `S.suspend` for lazy eval | ||
| const shouldSuspend = !ctx.isSchemaIdBefore(schemaId); | ||
| const code = shouldSuspend ? `S.suspend((): S.Schema<_${schemaId}, _${schemaId}Encoded> => ${schemaId})` : schemaId; | ||
| const code = shouldSuspend ? `S.suspend((): S.Schema<_${id(schemaId)}, _${id(schemaId)}Encoded> => ${id(schemaId)})` : id(schemaId); | ||
| return { | ||
@@ -328,5 +330,8 @@ code, | ||
| // Case: OpenApi.SchemaObject | ||
| if ('items' in schema && schema.type === 'array') { | ||
| if (schema.type === 'array' || 'items' in schema) { | ||
| // Case: OpenApi.ArraySchemaObject | ||
| return generateForArraySchema(ctx, schema); | ||
| return generateForArraySchema(ctx, { | ||
| items: {}, | ||
| ...schema | ||
| }); | ||
| } else if (isNonArraySchemaType(schema)) { | ||
@@ -498,3 +503,3 @@ // Case: OpenApi.NonArraySchemaObject | ||
| }).join('\n')} | ||
| ); | ||
| ) | ||
| `; | ||
@@ -511,5 +516,2 @@ return { | ||
| const type = schema.type; | ||
| if (typeof type === 'undefined') { | ||
| throw new TypeError(`Missing 'type' in schema`); | ||
| } | ||
| const hookResult = ctx.hooks.generateSchema?.(schema) ?? null; | ||
@@ -521,2 +523,5 @@ let result; | ||
| switch (type) { | ||
| case undefined: | ||
| result = generateForUnknownSchema(ctx, schema); | ||
| break; | ||
| case 'null': | ||
@@ -523,0 +528,0 @@ result = generateForNullSchema(ctx, schema); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"schemaGen.cjs","names":["_tsDedent","require","_GraphAnalyzer","_genUtil","generateForNullSchema","ctx","schema","code","refs","comments","GenResultUtil","commentsFromSchemaObject","exports","generateForStringSchema","Array","isArray","enum","every","value","TypeError","JSON","stringify","dedent","map","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","matches","$ref","match","schemaId","shouldSuspend","isSchemaIdBefore","initComments","isNonArraySchemaType","allOf","schemasHead","areAllObjects","reduce","acc","isObjectSchema","schemas","isObject","filter","props","schemasResults","genResult","index","flatMap","oneOf","flat","anyOf","generateSchema","result"],"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 } from '../../analysis/GraphAnalyzer.ts';\nimport { type GenResult, GenResultUtil } from './genUtil.ts';\n\n\nexport type Context = {\n schemas: Record<string, OpenApiSchema>,\n hooks: GenSpec.GenerationHooks,\n isSchemaIdBefore: (schemaId: OpenApiSchemaId) => boolean,\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')) {\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) => JSON.stringify(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 matches = schema.$ref.match(/^#\\/components\\/schemas\\/([a-zA-Z0-9_$]+)/);\n if (!matches) {\n throw new Error(`Reference format not supported: ${schema.$ref}`);\n }\n \n const schemaId = matches[1];\n if (typeof schemaId === 'undefined') { throw new Error('Should not happen'); }\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 ? `S.suspend((): S.Schema<_${schemaId}, _${schemaId}Encoded> => ${schemaId})` : 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 ('items' in schema && schema.type === 'array') { // Case: OpenApi.ArraySchemaObject\n return generateForArraySchema(ctx, schema);\n } else if (isNonArraySchemaType(schema)) { // Case: OpenApi.NonArraySchemaObject\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 `;\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 if (typeof type === 'undefined') {\n throw new TypeError(`Missing 'type' in schema`);\n }\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 switch (type) {\n case 'null': result = generateForNullSchema(ctx, schema); break;\n case 'string': result = generateForStringSchema(ctx, schema); break;\n case 'number': result = generateForNumberSchema(ctx, schema); break;\n case 'integer': result = generateForNumberSchema(ctx, schema); break;\n case 'boolean': result = generateForBooleanSchema(ctx, schema); break;\n case 'object': result = generateForObjectSchema(ctx, schema); break;\n default: throw new TypeError(`Unsupported type \"${type}\"`);\n }\n }\n return {\n ...result,\n code: `${result.code}`,\n };\n } else { // Case: OpenApi.MixedSchemaObject\n throw new Error(`Currently unsupported: MixedSchemaObject`);\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","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","undefined"],"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 if (isNonArraySchemaType(schema)) { // Case: OpenApi.NonArraySchemaObject\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 `;\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 switch (type) {\n case undefined: result = generateForUnknownSchema(ctx, schema); break;\n case 'null': result = generateForNullSchema(ctx, schema); break;\n case 'string': result = generateForStringSchema(ctx, schema); break;\n case 'number': result = generateForNumberSchema(ctx, schema); break;\n case 'integer': result = generateForNumberSchema(ctx, schema); break;\n case 'boolean': result = generateForBooleanSchema(ctx, schema); break;\n case 'object': result = generateForObjectSchema(ctx, schema); break;\n default: throw new TypeError(`Unsupported type \"${type}\"`);\n }\n }\n return {\n ...result,\n code: `${result.code}`,\n };\n } else { // Case: OpenApi.MixedSchemaObject\n throw new Error(`Currently unsupported: MixedSchemaObject`);\n }\n }\n};\n"],"mappings":"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","ignoreList":[]} |
@@ -52,5 +52,10 @@ /* Copyright (c) Fortanix, Inc. | ||
| // Case: OpenApi.SchemaObject | ||
| if ('items' in schema) { | ||
| if (schema.type === 'array' || 'items' in schema) { | ||
| // Case: OpenApi.ArraySchemaObject | ||
| return depsShallow(schema.items); | ||
| if ('items' in schema) { | ||
| return depsShallow(schema.items); | ||
| } else { | ||
| // Array of unknown | ||
| return new Set(); | ||
| } | ||
| } else { | ||
@@ -66,2 +71,3 @@ // Case: OpenApi.NonArraySchemaObject | ||
| switch (schema.type) { | ||
| case undefined: // Any type | ||
| case 'null': | ||
@@ -99,5 +105,10 @@ case 'string': | ||
| // Case: OpenApi.SchemaObject | ||
| if ('items' in schema) { | ||
| if (schema.type === 'array' || 'items' in schema) { | ||
| // Case: OpenApi.ArraySchemaObject | ||
| return depsDeep(schema.items, resolve, visited); | ||
| if ('items' in schema) { | ||
| return depsDeep(schema.items, resolve, visited); | ||
| } else { | ||
| // Array of unknown | ||
| return {}; | ||
| } | ||
| } else { | ||
@@ -113,2 +124,5 @@ // Case: OpenApi.NonArraySchemaObject | ||
| switch (schema.type) { | ||
| case undefined: | ||
| // Any type | ||
| return {}; | ||
| case 'null': | ||
@@ -241,5 +255,5 @@ case 'string': | ||
| // Case: OpenApi.SchemaObject | ||
| if ('items' in schema) { | ||
| if (schema.type === 'array' || 'items' in schema) { | ||
| // Case: OpenApi.ArraySchemaObject | ||
| return _isObjectSchema(schema.items, resolve, visited); | ||
| return false; | ||
| } else { | ||
@@ -255,2 +269,6 @@ // Case: OpenApi.NonArraySchemaObject | ||
| switch (schema.type) { | ||
| case undefined: | ||
| // Any type | ||
| return false; | ||
| // Possibly an object, but we cannot know | ||
| case 'null': | ||
@@ -257,0 +275,0 @@ case 'string': |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"GraphAnalyzer.mjs","names":["decodeJsonPointer","encodeJsonPointer","schemaIdFromRef","ref","matches","match","test","Error","pointer","replace","refSchemaId","segments","slice","length","refFromSchemaId","schemaId","resolver","schemas","refSchema","depsShallow","schema","Set","$ref","items","allOf","flatMap","subschema","oneOf","anyOf","type","props","properties","additionalProps","additionalProperties","additionalPropsSchema","Object","values","propSchema","TypeError","JSON","stringify","depsDeep","resolve","visited","has","assign","dependencyTree","document","rootSchemaRef","components","rootSchemaId","rootSchema","dependenciesMapFromDocument","dependenciesMap","Map","entries","schemaRef","dependencies","set","dependentsMapFromDocument","dependentsMap","error","cause","dependency","get","topologicalSorter","refsWithCycles","sorted","visit","add","dependents","dependentSchemaRef","unshift","circularDependency","topologicalSort","adjacency","sorter","keys","InfiniteRecursionError","_isObjectSchema","every","Boolean","isObjectSchema"],"sources":["../../../src/analysis/GraphAnalyzer.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 { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { type OpenApiSchemaId, type OpenApiSchema, decodeJsonPointer, encodeJsonPointer } from '../util/openapi.ts';\n\n\n//\n// Reference resolving\n//\n\ntype Ref = string; // OpenAPI schema reference\ntype Resolve = (ref: Ref) => OpenApiSchema; // Callback to take a ref and resolve it to the corresponding schema\n\nexport const schemaIdFromRef = (ref: Ref): OpenApiSchemaId => {\n const matches = ref.match(/^#\\/components\\/schemas\\/.+/);\n if (!/^#\\/components\\/schemas\\/.+/.test(ref)) {\n throw new Error(`Reference format not supported: ${ref}`);\n }\n \n const pointer = ref.replace(/^#/, '');\n const [refSchemaId, ...segments] = decodeJsonPointer(pointer).slice(2);\n if (typeof refSchemaId === 'undefined') { throw new Error('Should not happen'); }\n if (segments.length !== 0) { throw new Error(`Refs to nested paths not supported: ${ref}`); }\n \n return refSchemaId;\n};\nexport const refFromSchemaId = (schemaId: OpenApiSchemaId): Ref => {\n return '#' + encodeJsonPointer(['components', 'schemas', schemaId]);\n};\n\nconst resolver = (schemas: Record<OpenApiSchemaId, OpenApiSchema>) => (ref: string): OpenApiSchema => {\n const refSchemaId = schemaIdFromRef(ref);\n const refSchema = schemas[refSchemaId];\n if (typeof refSchema === 'undefined') { throw new Error('Should not happen'); }\n return refSchema;\n};\n\n// Get all direct (shallow) dependencies\nconst depsShallow = (schema: OpenApiSchema): Set<Ref> => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n return new Set([schema.$ref]);\n } else { // Case: OpenApi.SchemaObject\n if ('items' in schema) { // Case: OpenApi.ArraySchemaObject\n return depsShallow(schema.items);\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return new Set(schema.allOf.flatMap(subschema => [...depsShallow(subschema)]));\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return new Set(schema.oneOf.flatMap(subschema => [...depsShallow(subschema)]));\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return new Set(schema.anyOf.flatMap(subschema => [...depsShallow(subschema)]));\n }\n \n switch (schema.type) {\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return new Set();\n case 'object':\n const props: Record<OpenApiSchemaId, OpenApiSchema> = schema.properties ?? {};\n const additionalProps = schema.additionalProperties;\n const additionalPropsSchema: null | OpenApiSchema =\n typeof additionalProps === 'object' && additionalProps !== null\n ? additionalProps\n : null;\n return new Set([\n ...Object.values(props).flatMap(propSchema => [...depsShallow(propSchema)]),\n ...(additionalPropsSchema ? depsShallow(additionalPropsSchema) : []),\n ]);\n default: throw new TypeError(`Unsupported type ${JSON.stringify(schema.type)}`);\n }\n }\n }\n};\n\n// Get all dependencies for the given schema (as a dependency tree rooted at `schema`)\nconst depsDeep = (schema: OpenApiSchema, resolve: Resolve, visited: Set<Ref>): DepTree => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n if (visited.has(schema.$ref)) { return { [schema.$ref]: 'recurse' }; }\n return { [schema.$ref]: depsDeep(resolve(schema.$ref), resolve, new Set([...visited, schema.$ref])) };\n } else { // Case: OpenApi.SchemaObject\n if ('items' in schema) { // Case: OpenApi.ArraySchemaObject\n return depsDeep(schema.items, resolve, visited);\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return Object.assign({}, ...schema.allOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return Object.assign({}, ...schema.oneOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return Object.assign({}, ...schema.anyOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n }\n \n switch (schema.type) {\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return {};\n case 'object':\n const props: Record<OpenApiSchemaId, OpenApiSchema> = schema.properties ?? {};\n const additionalProps = schema.additionalProperties;\n const additionalPropsSchema: null | OpenApiSchema =\n typeof additionalProps === 'object' && additionalProps !== null\n ? additionalProps\n : null;\n return Object.assign(\n {},\n ...Object.values(props).flatMap(propSchema => depsDeep(propSchema, resolve, visited)),\n additionalPropsSchema ? depsDeep(additionalPropsSchema, resolve, visited) : {},\n );\n default: throw new TypeError(`Unsupported type \"${schema.type}\"`);\n }\n }\n }\n};\n\n\n//\n// Dependency trees\n//\n\ntype DepTree = { [ref: Ref]: DepTree | 'recurse' };\n\n// Create a dependency tree rooted at `rootRef`. If we find a cycle, inject a special \"recurse\" marker.\nexport const dependencyTree = (document: OpenApi.Document, rootSchemaRef: Ref): DepTree => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n const rootSchemaId = schemaIdFromRef(rootSchemaRef);\n \n const rootSchema: undefined | OpenApiSchema = schemas[rootSchemaId];\n if (!rootSchema) { throw new Error(`Unable to find schema \"${rootSchemaRef}\"`); }\n \n return { [rootSchemaRef]: depsDeep(rootSchema, resolver(schemas), new Set([rootSchemaRef])) };\n};\n\n\n//\n// Adjacency maps\n//\n\ntype AdjacencyMap = Map<Ref, Set<Ref>>;\n\n// Get a mapping from schemas to all of their direct dependencies\nexport const dependenciesMapFromDocument = (document: OpenApi.Document): AdjacencyMap => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n // Mapping from a particular schema to its dependencies (directed neighbors in the graph: schema -> dependency)\n const dependenciesMap: AdjacencyMap = new Map<Ref, Set<Ref>>();\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n const dependencies: Set<Ref> = depsShallow(schema);\n \n dependenciesMap.set(schemaRef, dependencies);\n }\n \n return dependenciesMap;\n};\n\n// Get a mapping from schemas to all of their direct dependents\nexport const dependentsMapFromDocument = (document: OpenApi.Document): AdjacencyMap => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n // Mapping from a particular schema to its dependents (directed neighbors in the graph: schema <- dependent)\n const dependentsMap: AdjacencyMap = new Map<Ref, Set<Ref>>();\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n const dependencies = ((): Set<Ref> => {\n try {\n return depsShallow(schema);\n } catch (error: unknown) {\n throw new Error(`Unable to determine dependents for '${schemaRef}'`, { cause: error });\n }\n })();\n \n for (const dependency of dependencies) {\n dependentsMap.set(dependency, new Set([\n ...(dependentsMap.get(dependency) ?? new Set()),\n schemaRef,\n ]));\n }\n }\n \n return dependentsMap;\n};\n\n\n//\n// Topological sort\n//\n\ntype TopologicalSort = Array<{\n ref: Ref,\n circularDependency: boolean, // If true, then this has at least one dependency that breaks the topological ordering\n}>;\nconst topologicalSorter = (dependentsMap: AdjacencyMap) => {\n const visited = new Set<Ref>(); // Keep track of schemas we've already visited\n const refsWithCycles = new Set<Ref>(); // Keep track of schemas that have at least one circular dependency\n const sorted: TopologicalSort = [];\n \n const visit = (schemaRef: Ref): void => {\n if (visited.has(schemaRef)) {\n refsWithCycles.add(schemaRef);\n return;\n }\n \n visited.add(schemaRef);\n \n const dependents = dependentsMap.get(schemaRef) ?? new Set();\n for (const dependentSchemaRef of dependents) {\n visit(dependentSchemaRef);\n }\n \n sorted.unshift({ ref: schemaRef, circularDependency: refsWithCycles.has(schemaRef) });\n };\n \n return { visit, sorted };\n};\n\nexport const topologicalSort = (document: OpenApi.Document): TopologicalSort => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n const adjacency = dependentsMapFromDocument(document);\n const sorter = topologicalSorter(adjacency);\n \n for (const schemaId of Object.keys(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n sorter.visit(schemaRef);\n }\n \n return sorter.sorted;\n};\n\n\n// Util: check if a given schema is an object schema\nexport class InfiniteRecursionError extends Error {}\nconst _isObjectSchema = (schema: OpenApiSchema, resolve: Resolve, visited: Set<Ref>): boolean => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n if (visited.has(schema.$ref)) {\n throw new InfiniteRecursionError(`Infinite recursion at ${schema.$ref}`);\n }\n return _isObjectSchema(resolve(schema.$ref), resolve, new Set([...visited, schema.$ref]));\n } else { // Case: OpenApi.SchemaObject\n if ('items' in schema) { // Case: OpenApi.ArraySchemaObject\n return _isObjectSchema(schema.items, resolve, visited);\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return schema.allOf.flatMap(subschema => _isObjectSchema(subschema, resolve, visited)).every(Boolean);\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return false; // Union\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return false; // Union\n }\n \n switch (schema.type) {\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return false;\n case 'object':\n return true;\n default: throw new TypeError(`Unsupported type \"${schema.type}\"`);\n }\n }\n }\n};\nexport const isObjectSchema = (schemas: Record<OpenApiSchemaId, OpenApiSchema>, rootSchemaRef: Ref): boolean => {\n const rootSchemaId = schemaIdFromRef(rootSchemaRef);\n \n const rootSchema: undefined | OpenApiSchema = schemas[rootSchemaId];\n if (!rootSchema) { throw new Error(`Unable to find schema \"${rootSchemaRef}\"`); }\n \n return _isObjectSchema(rootSchema, resolver(schemas), new Set([rootSchemaRef]));\n};\n"],"mappings":"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","ignoreList":[]} | ||
| {"version":3,"file":"GraphAnalyzer.mjs","names":["decodeJsonPointer","encodeJsonPointer","schemaIdFromRef","ref","matches","match","test","Error","pointer","replace","refSchemaId","segments","slice","length","refFromSchemaId","schemaId","resolver","schemas","refSchema","depsShallow","schema","Set","$ref","type","items","allOf","flatMap","subschema","oneOf","anyOf","undefined","props","properties","additionalProps","additionalProperties","additionalPropsSchema","Object","values","propSchema","TypeError","JSON","stringify","depsDeep","resolve","visited","has","assign","dependencyTree","document","rootSchemaRef","components","rootSchemaId","rootSchema","dependenciesMapFromDocument","dependenciesMap","Map","entries","schemaRef","dependencies","set","dependentsMapFromDocument","dependentsMap","error","cause","dependency","get","topologicalSorter","refsWithCycles","sorted","visit","add","dependents","dependentSchemaRef","unshift","circularDependency","topologicalSort","adjacency","sorter","keys","InfiniteRecursionError","_isObjectSchema","every","Boolean","isObjectSchema"],"sources":["../../../src/analysis/GraphAnalyzer.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 { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { type OpenApiSchemaId, type OpenApiSchema, decodeJsonPointer, encodeJsonPointer } from '../util/openapi.ts';\n\n\n//\n// Reference resolving\n//\n\ntype Ref = string; // OpenAPI schema reference\ntype Resolve = (ref: Ref) => OpenApiSchema; // Callback to take a ref and resolve it to the corresponding schema\n\nexport const schemaIdFromRef = (ref: Ref): OpenApiSchemaId => {\n const matches = ref.match(/^#\\/components\\/schemas\\/.+/);\n if (!/^#\\/components\\/schemas\\/.+/.test(ref)) {\n throw new Error(`Reference format not supported: ${ref}`);\n }\n \n const pointer = ref.replace(/^#/, '');\n const [refSchemaId, ...segments] = decodeJsonPointer(pointer).slice(2);\n if (typeof refSchemaId === 'undefined') { throw new Error('Should not happen'); }\n if (segments.length !== 0) { throw new Error(`Refs to nested paths not supported: ${ref}`); }\n \n return refSchemaId;\n};\nexport const refFromSchemaId = (schemaId: OpenApiSchemaId): Ref => {\n return '#' + encodeJsonPointer(['components', 'schemas', schemaId]);\n};\n\nconst resolver = (schemas: Record<OpenApiSchemaId, OpenApiSchema>) => (ref: string): OpenApiSchema => {\n const refSchemaId = schemaIdFromRef(ref);\n const refSchema = schemas[refSchemaId];\n if (typeof refSchema === 'undefined') { throw new Error('Should not happen'); }\n return refSchema;\n};\n\n// Get all direct (shallow) dependencies\nconst depsShallow = (schema: OpenApiSchema): Set<Ref> => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n return new Set([schema.$ref]);\n } else { // Case: OpenApi.SchemaObject\n if (schema.type === 'array' || 'items' in schema) { // Case: OpenApi.ArraySchemaObject\n if ('items' in schema) {\n return depsShallow(schema.items);\n } else { // Array of unknown\n return new Set();\n }\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return new Set(schema.allOf.flatMap(subschema => [...depsShallow(subschema)]));\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return new Set(schema.oneOf.flatMap(subschema => [...depsShallow(subschema)]));\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return new Set(schema.anyOf.flatMap(subschema => [...depsShallow(subschema)]));\n }\n \n switch (schema.type) {\n case undefined: // Any type\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return new Set();\n case 'object':\n const props: Record<OpenApiSchemaId, OpenApiSchema> = schema.properties ?? {};\n const additionalProps = schema.additionalProperties;\n const additionalPropsSchema: null | OpenApiSchema =\n typeof additionalProps === 'object' && additionalProps !== null\n ? additionalProps\n : null;\n return new Set([\n ...Object.values(props).flatMap(propSchema => [...depsShallow(propSchema)]),\n ...(additionalPropsSchema ? depsShallow(additionalPropsSchema) : []),\n ]);\n default: throw new TypeError(`Unsupported type ${JSON.stringify(schema.type)}`);\n }\n }\n }\n};\n\n// Get all dependencies for the given schema (as a dependency tree rooted at `schema`)\nconst depsDeep = (schema: OpenApiSchema, resolve: Resolve, visited: Set<Ref>): DepTree => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n if (visited.has(schema.$ref)) { return { [schema.$ref]: 'recurse' }; }\n return { [schema.$ref]: depsDeep(resolve(schema.$ref), resolve, new Set([...visited, schema.$ref])) };\n } else { // Case: OpenApi.SchemaObject\n if (schema.type === 'array' || 'items' in schema) { // Case: OpenApi.ArraySchemaObject\n if ('items' in schema) {\n return depsDeep(schema.items, resolve, visited);\n } else { // Array of unknown\n return {};\n }\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return Object.assign({}, ...schema.allOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return Object.assign({}, ...schema.oneOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return Object.assign({}, ...schema.anyOf.flatMap(subschema => depsDeep(subschema, resolve, visited)));\n }\n \n switch (schema.type) {\n case undefined: // Any type\n return {};\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return {};\n case 'object':\n const props: Record<OpenApiSchemaId, OpenApiSchema> = schema.properties ?? {};\n const additionalProps = schema.additionalProperties;\n const additionalPropsSchema: null | OpenApiSchema =\n typeof additionalProps === 'object' && additionalProps !== null\n ? additionalProps\n : null;\n return Object.assign(\n {},\n ...Object.values(props).flatMap(propSchema => depsDeep(propSchema, resolve, visited)),\n additionalPropsSchema ? depsDeep(additionalPropsSchema, resolve, visited) : {},\n );\n default: throw new TypeError(`Unsupported type \"${schema.type}\"`);\n }\n }\n }\n};\n\n\n//\n// Dependency trees\n//\n\ntype DepTree = { [ref: Ref]: DepTree | 'recurse' };\n\n// Create a dependency tree rooted at `rootRef`. If we find a cycle, inject a special \"recurse\" marker.\nexport const dependencyTree = (document: OpenApi.Document, rootSchemaRef: Ref): DepTree => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n const rootSchemaId = schemaIdFromRef(rootSchemaRef);\n \n const rootSchema: undefined | OpenApiSchema = schemas[rootSchemaId];\n if (!rootSchema) { throw new Error(`Unable to find schema \"${rootSchemaRef}\"`); }\n \n return { [rootSchemaRef]: depsDeep(rootSchema, resolver(schemas), new Set([rootSchemaRef])) };\n};\n\n\n//\n// Adjacency maps\n//\n\ntype AdjacencyMap = Map<Ref, Set<Ref>>;\n\n// Get a mapping from schemas to all of their direct dependencies\nexport const dependenciesMapFromDocument = (document: OpenApi.Document): AdjacencyMap => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n // Mapping from a particular schema to its dependencies (directed neighbors in the graph: schema -> dependency)\n const dependenciesMap: AdjacencyMap = new Map<Ref, Set<Ref>>();\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n const dependencies: Set<Ref> = depsShallow(schema);\n \n dependenciesMap.set(schemaRef, dependencies);\n }\n \n return dependenciesMap;\n};\n\n// Get a mapping from schemas to all of their direct dependents\nexport const dependentsMapFromDocument = (document: OpenApi.Document): AdjacencyMap => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n // Mapping from a particular schema to its dependents (directed neighbors in the graph: schema <- dependent)\n const dependentsMap: AdjacencyMap = new Map<Ref, Set<Ref>>();\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n const dependencies = ((): Set<Ref> => {\n try {\n return depsShallow(schema);\n } catch (error: unknown) {\n throw new Error(`Unable to determine dependents for '${schemaRef}'`, { cause: error });\n }\n })();\n \n for (const dependency of dependencies) {\n dependentsMap.set(dependency, new Set([\n ...(dependentsMap.get(dependency) ?? new Set()),\n schemaRef,\n ]));\n }\n }\n \n return dependentsMap;\n};\n\n\n//\n// Topological sort\n//\n\ntype TopologicalSort = Array<{\n ref: Ref,\n circularDependency: boolean, // If true, then this has at least one dependency that breaks the topological ordering\n}>;\nconst topologicalSorter = (dependentsMap: AdjacencyMap) => {\n const visited = new Set<Ref>(); // Keep track of schemas we've already visited\n const refsWithCycles = new Set<Ref>(); // Keep track of schemas that have at least one circular dependency\n const sorted: TopologicalSort = [];\n \n const visit = (schemaRef: Ref): void => {\n if (visited.has(schemaRef)) {\n refsWithCycles.add(schemaRef);\n return;\n }\n \n visited.add(schemaRef);\n \n const dependents = dependentsMap.get(schemaRef) ?? new Set();\n for (const dependentSchemaRef of dependents) {\n visit(dependentSchemaRef);\n }\n \n sorted.unshift({ ref: schemaRef, circularDependency: refsWithCycles.has(schemaRef) });\n };\n \n return { visit, sorted };\n};\n\nexport const topologicalSort = (document: OpenApi.Document): TopologicalSort => {\n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n const adjacency = dependentsMapFromDocument(document);\n const sorter = topologicalSorter(adjacency);\n \n for (const schemaId of Object.keys(schemas)) {\n const schemaRef = refFromSchemaId(schemaId);\n sorter.visit(schemaRef);\n }\n \n return sorter.sorted;\n};\n\n\n// Util: check if a given schema is an object schema\nexport class InfiniteRecursionError extends Error {}\nconst _isObjectSchema = (schema: OpenApiSchema, resolve: Resolve, visited: Set<Ref>): boolean => {\n if ('$ref' in schema) { // Case: OpenApi.ReferenceObject\n if (visited.has(schema.$ref)) {\n throw new InfiniteRecursionError(`Infinite recursion at ${schema.$ref}`);\n }\n return _isObjectSchema(resolve(schema.$ref), resolve, new Set([...visited, schema.$ref]));\n } else { // Case: OpenApi.SchemaObject\n if (schema.type === 'array' || 'items' in schema) { // Case: OpenApi.ArraySchemaObject\n return false;\n } else { // Case: OpenApi.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return schema.allOf.flatMap(subschema => _isObjectSchema(subschema, resolve, visited)).every(Boolean);\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return false; // Union\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return false; // Union\n }\n \n switch (schema.type) {\n case undefined: // Any type\n return false; // Possibly an object, but we cannot know\n case 'null':\n case 'string':\n case 'number':\n case 'integer':\n case 'boolean':\n return false;\n case 'object':\n return true;\n default: throw new TypeError(`Unsupported type \"${schema.type}\"`);\n }\n }\n }\n};\nexport const isObjectSchema = (schemas: Record<OpenApiSchemaId, OpenApiSchema>, rootSchemaRef: Ref): boolean => {\n const rootSchemaId = schemaIdFromRef(rootSchemaRef);\n \n const rootSchema: undefined | OpenApiSchema = schemas[rootSchemaId];\n if (!rootSchema) { throw new Error(`Unable to find schema \"${rootSchemaRef}\"`); }\n \n return _isObjectSchema(rootSchema, resolver(schemas), new Set([rootSchemaRef]));\n};\n"],"mappings":"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","ignoreList":[]} |
@@ -9,4 +9,12 @@ /* Copyright (c) Fortanix, Inc. | ||
| import { dedent } from 'ts-dedent'; | ||
| import { isObjectSchema } from "../../analysis/GraphAnalyzer.mjs"; | ||
| import { isObjectSchema, schemaIdFromRef } from "../../analysis/GraphAnalyzer.mjs"; | ||
| import { GenResultUtil } from "./genUtil.mjs"; | ||
| const id = GenResultUtil.encodeIdentifier; | ||
| export const generateForUnknownSchema = (ctx, schema) => { | ||
| return { | ||
| code: `S.Unknown`, | ||
| refs: [], | ||
| comments: GenResultUtil.commentsFromSchemaObject(schema) | ||
| }; | ||
| }; | ||
| export const generateForNullSchema = (ctx, schema) => { | ||
@@ -23,7 +31,7 @@ return { | ||
| if (Array.isArray(schema.enum)) { | ||
| if (!schema.enum.every(value => typeof value === 'string')) { | ||
| if (!schema.enum.every(value => typeof value === 'string' || typeof value === 'number')) { | ||
| throw new TypeError(`Unknown enum value, expected string array: ${JSON.stringify(schema.enum)}`); | ||
| } | ||
| return dedent`S.Literal( | ||
| ${schema.enum.map(value => JSON.stringify(value) + ',').join('\n')} | ||
| ${schema.enum.map(value => JSON.stringify(String(value)) + ',').join('\n')} | ||
| )`; | ||
@@ -283,14 +291,7 @@ } | ||
| // FIXME: make this logic customizable (allow a callback to resolve a `$ref` string to a `Ref` instance?) | ||
| const matches = schema.$ref.match(/^#\/components\/schemas\/([a-zA-Z0-9_$]+)/); | ||
| if (!matches) { | ||
| throw new Error(`Reference format not supported: ${schema.$ref}`); | ||
| } | ||
| const schemaId = matches[1]; | ||
| if (typeof schemaId === 'undefined') { | ||
| throw new Error('Should not happen'); | ||
| } | ||
| const schemaId = schemaIdFromRef(schema.$ref); | ||
| // If the referenced schema ID is topologically after the current one, wrap it in `S.suspend` for lazy eval | ||
| const shouldSuspend = !ctx.isSchemaIdBefore(schemaId); | ||
| const code = shouldSuspend ? `S.suspend((): S.Schema<_${schemaId}, _${schemaId}Encoded> => ${schemaId})` : schemaId; | ||
| const code = shouldSuspend ? `S.suspend((): S.Schema<_${id(schemaId)}, _${id(schemaId)}Encoded> => ${id(schemaId)})` : id(schemaId); | ||
| return { | ||
@@ -313,5 +314,8 @@ code, | ||
| // Case: OpenApi.SchemaObject | ||
| if ('items' in schema && schema.type === 'array') { | ||
| if (schema.type === 'array' || 'items' in schema) { | ||
| // Case: OpenApi.ArraySchemaObject | ||
| return generateForArraySchema(ctx, schema); | ||
| return generateForArraySchema(ctx, { | ||
| items: {}, | ||
| ...schema | ||
| }); | ||
| } else if (isNonArraySchemaType(schema)) { | ||
@@ -483,3 +487,3 @@ // Case: OpenApi.NonArraySchemaObject | ||
| }).join('\n')} | ||
| ); | ||
| ) | ||
| `; | ||
@@ -496,5 +500,2 @@ return { | ||
| const type = schema.type; | ||
| if (typeof type === 'undefined') { | ||
| throw new TypeError(`Missing 'type' in schema`); | ||
| } | ||
| const hookResult = ctx.hooks.generateSchema?.(schema) ?? null; | ||
@@ -506,2 +507,5 @@ let result; | ||
| switch (type) { | ||
| case undefined: | ||
| result = generateForUnknownSchema(ctx, schema); | ||
| break; | ||
| case 'null': | ||
@@ -508,0 +512,0 @@ result = generateForNullSchema(ctx, schema); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"schemaGen.mjs","names":["dedent","isObjectSchema","GenResultUtil","generateForNullSchema","ctx","schema","code","refs","comments","commentsFromSchemaObject","generateForStringSchema","Array","isArray","enum","every","value","TypeError","JSON","stringify","map","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","matches","$ref","match","schemaId","shouldSuspend","isSchemaIdBefore","initComments","isNonArraySchemaType","allOf","schemasHead","areAllObjects","reduce","acc","schemas","isObject","filter","props","schemasResults","genResult","index","flatMap","oneOf","flat","anyOf","generateSchema","result"],"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 } from '../../analysis/GraphAnalyzer.ts';\nimport { type GenResult, GenResultUtil } from './genUtil.ts';\n\n\nexport type Context = {\n schemas: Record<string, OpenApiSchema>,\n hooks: GenSpec.GenerationHooks,\n isSchemaIdBefore: (schemaId: OpenApiSchemaId) => boolean,\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')) {\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) => JSON.stringify(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 matches = schema.$ref.match(/^#\\/components\\/schemas\\/([a-zA-Z0-9_$]+)/);\n if (!matches) {\n throw new Error(`Reference format not supported: ${schema.$ref}`);\n }\n \n const schemaId = matches[1];\n if (typeof schemaId === 'undefined') { throw new Error('Should not happen'); }\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 ? `S.suspend((): S.Schema<_${schemaId}, _${schemaId}Encoded> => ${schemaId})` : 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 ('items' in schema && schema.type === 'array') { // Case: OpenApi.ArraySchemaObject\n return generateForArraySchema(ctx, schema);\n } else if (isNonArraySchemaType(schema)) { // Case: OpenApi.NonArraySchemaObject\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 `;\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 if (typeof type === 'undefined') {\n throw new TypeError(`Missing 'type' in schema`);\n }\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 switch (type) {\n case 'null': result = generateForNullSchema(ctx, schema); break;\n case 'string': result = generateForStringSchema(ctx, schema); break;\n case 'number': result = generateForNumberSchema(ctx, schema); break;\n case 'integer': result = generateForNumberSchema(ctx, schema); break;\n case 'boolean': result = generateForBooleanSchema(ctx, schema); break;\n case 'object': result = generateForObjectSchema(ctx, schema); break;\n default: throw new TypeError(`Unsupported type \"${type}\"`);\n }\n }\n return {\n ...result,\n code: `${result.code}`,\n };\n } else { // Case: OpenApi.MixedSchemaObject\n throw new Error(`Currently unsupported: MixedSchemaObject`);\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","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","undefined"],"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 if (isNonArraySchemaType(schema)) { // Case: OpenApi.NonArraySchemaObject\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 `;\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 switch (type) {\n case undefined: result = generateForUnknownSchema(ctx, schema); break;\n case 'null': result = generateForNullSchema(ctx, schema); break;\n case 'string': result = generateForStringSchema(ctx, schema); break;\n case 'number': result = generateForNumberSchema(ctx, schema); break;\n case 'integer': result = generateForNumberSchema(ctx, schema); break;\n case 'boolean': result = generateForBooleanSchema(ctx, schema); break;\n case 'object': result = generateForObjectSchema(ctx, schema); break;\n default: throw new TypeError(`Unsupported type \"${type}\"`);\n }\n }\n return {\n ...result,\n code: `${result.code}`,\n };\n } else { // Case: OpenApi.MixedSchemaObject\n throw new Error(`Currently unsupported: MixedSchemaObject`);\n }\n }\n};\n"],"mappings":"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","ignoreList":[]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"GraphAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/analysis/GraphAnalyzer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAwC,MAAM,oBAAoB,CAAC;AAOpH,KAAK,GAAG,GAAG,MAAM,CAAC;AAGlB,eAAO,MAAM,eAAe,QAAS,GAAG,KAAG,eAY1C,CAAC;AACF,eAAO,MAAM,eAAe,aAAc,eAAe,KAAG,GAE3D,CAAC;AAgGF,KAAK,OAAO,GAAG;IAAE,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,GAAG,SAAS,CAAA;CAAE,CAAC;AAGnD,eAAO,MAAM,cAAc,aAAc,OAAO,CAAC,QAAQ,iBAAiB,GAAG,KAAG,OAQ/E,CAAC;AAOF,KAAK,YAAY,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAGvC,eAAO,MAAM,2BAA2B,aAAc,OAAO,CAAC,QAAQ,KAAG,YAcxE,CAAC;AAGF,eAAO,MAAM,yBAAyB,aAAc,OAAO,CAAC,QAAQ,KAAG,YAyBtE,CAAC;AAOF,KAAK,eAAe,GAAG,KAAK,CAAC;IAC3B,GAAG,EAAE,GAAG,CAAC;IACT,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC,CAAC;AAyBH,eAAO,MAAM,eAAe,aAAc,OAAO,CAAC,QAAQ,KAAG,eAY5D,CAAC;AAIF,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAiCpD,eAAO,MAAM,cAAc,YAAa,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,iBAAiB,GAAG,KAAG,OAOpG,CAAC"} | ||
| {"version":3,"file":"GraphAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/analysis/GraphAnalyzer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAwC,MAAM,oBAAoB,CAAC;AAOpH,KAAK,GAAG,GAAG,MAAM,CAAC;AAGlB,eAAO,MAAM,eAAe,QAAS,GAAG,KAAG,eAY1C,CAAC;AACF,eAAO,MAAM,eAAe,aAAc,eAAe,KAAG,GAE3D,CAAC;AA2GF,KAAK,OAAO,GAAG;IAAE,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,GAAG,SAAS,CAAA;CAAE,CAAC;AAGnD,eAAO,MAAM,cAAc,aAAc,OAAO,CAAC,QAAQ,iBAAiB,GAAG,KAAG,OAQ/E,CAAC;AAOF,KAAK,YAAY,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAGvC,eAAO,MAAM,2BAA2B,aAAc,OAAO,CAAC,QAAQ,KAAG,YAcxE,CAAC;AAGF,eAAO,MAAM,yBAAyB,aAAc,OAAO,CAAC,QAAQ,KAAG,YAyBtE,CAAC;AAOF,KAAK,eAAe,GAAG,KAAK,CAAC;IAC3B,GAAG,EAAE,GAAG,CAAC;IACT,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC,CAAC;AAyBH,eAAO,MAAM,eAAe,aAAc,OAAO,CAAC,QAAQ,KAAG,eAY5D,CAAC;AAIF,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAmCpD,eAAO,MAAM,cAAc,YAAa,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,iBAAiB,GAAG,KAAG,OAOpG,CAAC"} |
@@ -10,2 +10,3 @@ import { type OpenAPIV3_1 as OpenApi } from 'openapi-types'; | ||
| }; | ||
| export declare const generateForUnknownSchema: (ctx: Context, schema: OpenApi.NonArraySchemaObject) => GenResult; | ||
| export declare const generateForNullSchema: (ctx: Context, schema: OpenApi.NonArraySchemaObject) => GenResult; | ||
@@ -12,0 +13,0 @@ export declare const generateForStringSchema: (ctx: Context, schema: OpenApi.NonArraySchemaObject) => GenResult; |
@@ -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;AAG7D,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,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,SAe1F,CAAC;AAGF,eAAO,MAAM,iBAAiB,QAAS,OAAO,UAAU,aAAa,KAAG,SAuNvE,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,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,SAoNvE,CAAC"} |
+1
-1
| { | ||
| "name": "openapi-to-effect", | ||
| "version": "0.7.0", | ||
| "version": "0.7.1", | ||
| "license": "MPL-2.0", | ||
@@ -5,0 +5,0 @@ "homepage": "https://github.com/fortanix/openapi-to-effect", |
482542
0.78%3908
1.19%