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

openapi-to-effect

Package Overview
Dependencies
Maintainers
0
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

openapi-to-effect - npm Package Compare versions

Comparing version
0.6.2
to
0.7.0
+9
-4
dist/cjs/analysis/GraphAnalyzer.cjs

@@ -7,2 +7,3 @@ "use strict";

exports.topologicalSort = exports.schemaIdFromRef = exports.refFromSchemaId = exports.isObjectSchema = exports.dependentsMapFromDocument = exports.dependencyTree = exports.dependenciesMapFromDocument = exports.InfiniteRecursionError = void 0;
var _openapi = require("../util/openapi.cjs");
/* Copyright (c) Fortanix, Inc.

@@ -23,10 +24,14 @@ *

const schemaIdFromRef = ref => {
const matches = ref.match(/^#\/components\/schemas\/([a-zA-Z0-9_$]+)/);
if (!matches) {
const matches = ref.match(/^#\/components\/schemas\/.+/);
if (!/^#\/components\/schemas\/.+/.test(ref)) {
throw new Error(`Reference format not supported: ${ref}`);
}
const refSchemaId = matches[1];
const pointer = ref.replace(/^#/, '');
const [refSchemaId, ...segments] = (0, _openapi.decodeJsonPointer)(pointer).slice(2);
if (typeof refSchemaId === 'undefined') {
throw new Error('Should not happen');
}
if (segments.length !== 0) {
throw new Error(`Refs to nested paths not supported: ${ref}`);
}
return refSchemaId;

@@ -36,3 +41,3 @@ };

const refFromSchemaId = schemaId => {
return `#/components/schemas/${schemaId}`;
return '#' + (0, _openapi.encodeJsonPointer)(['components', 'schemas', schemaId]);
};

@@ -39,0 +44,0 @@ exports.refFromSchemaId = refFromSchemaId;

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

{"version":3,"file":"GraphAnalyzer.cjs","names":["schemaIdFromRef","ref","matches","match","Error","refSchemaId","exports","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 } 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\\/([a-zA-Z0-9_$]+)/);\n if (!matches) {\n throw new Error(`Reference format not supported: ${ref}`);\n }\n \n const refSchemaId = matches[1];\n if (typeof refSchemaId === 'undefined') { throw new Error('Should not happen'); }\n return refSchemaId;\n};\nexport const refFromSchemaId = (schemaId: OpenApiSchemaId): Ref => {\n return `#/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","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":[]}

@@ -70,4 +70,17 @@ "use strict";

return `pipe(${pipe.join(', ')})`;
},
// Convert an arbitrary name to a JS identifier
encodeIdentifier(name) {
if (/^[a-zA-Z$_][a-zA-Z0-9$_]*$/g.test(name)) {
return name;
} else {
const nameSpecialCharsRemoved = name.replace(/[^a-zA-Z0-9$_]/g, '');
if (/^[0-9]/.test(nameSpecialCharsRemoved)) {
return '_' + nameSpecialCharsRemoved;
} else {
return nameSpecialCharsRemoved;
}
}
}
};
//# sourceMappingURL=genUtil.cjs.map

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

{"version":3,"file":"genUtil.cjs","names":["_tsDedent","require","GenResultUtil","exports","combineRefs","refs","Set","flat","importNameFromRef","ref","fileName","split","at","Error","importName","replace","initComments","commentShort","commentLong","deprecated","initGenResult","code","comments","commentsFromSchemaObject","schema","title","description","format","commentsToCode","commentBlock","dedent","trim","commentInline","join","generatePipe","pipe","head","undefined","TypeError","length"],"sources":["../../../../src/generation/effSchemGen/genUtil.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 OpenAPIV3 } from 'openapi-types';\nimport { type OpenApiRef } from '../../util/openapi.ts';\n\n\nexport type GenComments = {\n commentShort: string,\n commentLong: string,\n deprecated: boolean,\n format?: undefined | string,\n};\nexport type GenResult = {\n code: string,\n refs: Array<OpenApiRef>,\n comments: GenComments,\n};\nexport const GenResultUtil = {\n combineRefs(...refs: Array<GenResult['refs']>): GenResult['refs'] {\n return [...new Set(refs.flat())];\n },\n importNameFromRef(ref: string) {\n const fileName = ref.split('/').at(-1);\n if (!fileName) { throw new Error(`Invalid ref: ${ref}`); }\n const importName = fileName.replace(/\\.ts$/, '');\n return importName;\n },\n \n initComments(): GenComments {\n return {\n commentShort: '',\n commentLong: '',\n deprecated: false,\n //format: undefined,\n };\n },\n initGenResult(): GenResult {\n return {\n code: '',\n refs: [],\n comments: GenResultUtil.initComments(),\n };\n },\n \n commentsFromSchemaObject(schema: OpenAPIV3.BaseSchemaObject): GenComments {\n return {\n commentShort: schema.title ?? '',\n commentLong: schema.description ?? '',\n deprecated: schema.deprecated ?? false,\n format: schema.format,\n };\n },\n commentsToCode(comments: GenComments): { commentBlock: string, commentInline: string } {\n const commentBlock = dedent`\n ${comments.commentLong}\n ${comments.deprecated ? `@deprecated` : ''}\n `.trim();\n const commentInline = comments.commentShort.split('\\n').join(' ').trim();\n return {\n commentBlock: commentBlock === '' ? '' : `/** ${commentBlock} */`,\n commentInline: commentInline === '' ? '' : `// ${commentInline}`,\n };\n },\n \n generatePipe(pipe: Array<string>): string {\n const head: undefined | string = pipe[0];\n if (head === undefined) { throw new TypeError(`generatePipe needs at least one argument`); }\n if (pipe.length === 1) { return head; }\n return `pipe(${pipe.join(', ')})`;\n },\n};\n"],"mappings":";;;;;;AAOA,IAAAA,SAAA,GAAAC,OAAA;AAPA;AACA;AACA;AACA;AACA;AACA;;AAkBO,MAAMC,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG;EAC3BE,WAAWA,CAAC,GAAGC,IAA8B,EAAqB;IAChE,OAAO,CAAC,GAAG,IAAIC,GAAG,CAACD,IAAI,CAACE,IAAI,CAAC,CAAC,CAAC,CAAC;EAClC,CAAC;EACDC,iBAAiBA,CAACC,GAAW,EAAE;IAC7B,MAAMC,QAAQ,GAAGD,GAAG,CAACE,KAAK,CAAC,GAAG,CAAC,CAACC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAACF,QAAQ,EAAE;MAAE,MAAM,IAAIG,KAAK,CAAC,gBAAgBJ,GAAG,EAAE,CAAC;IAAE;IACzD,MAAMK,UAAU,GAAGJ,QAAQ,CAACK,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAChD,OAAOD,UAAU;EACnB,CAAC;EAEDE,YAAYA,CAAA,EAAgB;IAC1B,OAAO;MACLC,YAAY,EAAE,EAAE;MAChBC,WAAW,EAAE,EAAE;MACfC,UAAU,EAAE;MACZ;IACF,CAAC;EACH,CAAC;EACDC,aAAaA,CAAA,EAAc;IACzB,OAAO;MACLC,IAAI,EAAE,EAAE;MACRhB,IAAI,EAAE,EAAE;MACRiB,QAAQ,EAAEpB,aAAa,CAACc,YAAY,CAAC;IACvC,CAAC;EACH,CAAC;EAEDO,wBAAwBA,CAACC,MAAkC,EAAe;IACxE,OAAO;MACLP,YAAY,EAAEO,MAAM,CAACC,KAAK,IAAI,EAAE;MAChCP,WAAW,EAAEM,MAAM,CAACE,WAAW,IAAI,EAAE;MACrCP,UAAU,EAAEK,MAAM,CAACL,UAAU,IAAI,KAAK;MACtCQ,MAAM,EAAEH,MAAM,CAACG;IACjB,CAAC;EACH,CAAC;EACDC,cAAcA,CAACN,QAAqB,EAAmD;IACrF,MAAMO,YAAY,GAAG,IAAAC,gBAAM;AAC/B,QAAQR,QAAQ,CAACJ,WAAW;AAC5B,QAAQI,QAAQ,CAACH,UAAU,GAAG,aAAa,GAAG,EAAE;AAChD,KAAK,CAACY,IAAI,CAAC,CAAC;IACR,MAAMC,aAAa,GAAGV,QAAQ,CAACL,YAAY,CAACN,KAAK,CAAC,IAAI,CAAC,CAACsB,IAAI,CAAC,GAAG,CAAC,CAACF,IAAI,CAAC,CAAC;IACxE,OAAO;MACLF,YAAY,EAAEA,YAAY,KAAK,EAAE,GAAG,EAAE,GAAG,OAAOA,YAAY,KAAK;MACjEG,aAAa,EAAEA,aAAa,KAAK,EAAE,GAAG,EAAE,GAAG,MAAMA,aAAa;IAChE,CAAC;EACH,CAAC;EAEDE,YAAYA,CAACC,IAAmB,EAAU;IACxC,MAAMC,IAAwB,GAAGD,IAAI,CAAC,CAAC,CAAC;IACxC,IAAIC,IAAI,KAAKC,SAAS,EAAE;MAAE,MAAM,IAAIC,SAAS,CAAC,0CAA0C,CAAC;IAAE;IAC3F,IAAIH,IAAI,CAACI,MAAM,KAAK,CAAC,EAAE;MAAE,OAAOH,IAAI;IAAE;IACtC,OAAO,QAAQD,IAAI,CAACF,IAAI,CAAC,IAAI,CAAC,GAAG;EACnC;AACF,CAAC","ignoreList":[]}
{"version":3,"file":"genUtil.cjs","names":["_tsDedent","require","GenResultUtil","exports","combineRefs","refs","Set","flat","importNameFromRef","ref","fileName","split","at","Error","importName","replace","initComments","commentShort","commentLong","deprecated","initGenResult","code","comments","commentsFromSchemaObject","schema","title","description","format","commentsToCode","commentBlock","dedent","trim","commentInline","join","generatePipe","pipe","head","undefined","TypeError","length","encodeIdentifier","name","test","nameSpecialCharsRemoved"],"sources":["../../../../src/generation/effSchemGen/genUtil.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 OpenAPIV3 } from 'openapi-types';\nimport { type OpenApiRef } from '../../util/openapi.ts';\n\n\nexport type GenComments = {\n commentShort: string,\n commentLong: string,\n deprecated: boolean,\n format?: undefined | string,\n};\nexport type GenResult = {\n code: string,\n refs: Array<OpenApiRef>,\n comments: GenComments,\n};\nexport const GenResultUtil = {\n combineRefs(...refs: Array<GenResult['refs']>): GenResult['refs'] {\n return [...new Set(refs.flat())];\n },\n importNameFromRef(ref: string) {\n const fileName = ref.split('/').at(-1);\n if (!fileName) { throw new Error(`Invalid ref: ${ref}`); }\n const importName = fileName.replace(/\\.ts$/, '');\n return importName;\n },\n \n initComments(): GenComments {\n return {\n commentShort: '',\n commentLong: '',\n deprecated: false,\n //format: undefined,\n };\n },\n initGenResult(): GenResult {\n return {\n code: '',\n refs: [],\n comments: GenResultUtil.initComments(),\n };\n },\n \n commentsFromSchemaObject(schema: OpenAPIV3.BaseSchemaObject): GenComments {\n return {\n commentShort: schema.title ?? '',\n commentLong: schema.description ?? '',\n deprecated: schema.deprecated ?? false,\n format: schema.format,\n };\n },\n commentsToCode(comments: GenComments): { commentBlock: string, commentInline: string } {\n const commentBlock = dedent`\n ${comments.commentLong}\n ${comments.deprecated ? `@deprecated` : ''}\n `.trim();\n const commentInline = comments.commentShort.split('\\n').join(' ').trim();\n return {\n commentBlock: commentBlock === '' ? '' : `/** ${commentBlock} */`,\n commentInline: commentInline === '' ? '' : `// ${commentInline}`,\n };\n },\n \n generatePipe(pipe: Array<string>): string {\n const head: undefined | string = pipe[0];\n if (head === undefined) { throw new TypeError(`generatePipe needs at least one argument`); }\n if (pipe.length === 1) { return head; }\n return `pipe(${pipe.join(', ')})`;\n },\n \n // Convert an arbitrary name to a JS identifier\n encodeIdentifier(name: string): string {\n if (/^[a-zA-Z$_][a-zA-Z0-9$_]*$/g.test(name)) {\n return name;\n } else {\n const nameSpecialCharsRemoved = name.replace(/[^a-zA-Z0-9$_]/g, '');\n if (/^[0-9]/.test(nameSpecialCharsRemoved)) {\n return '_' + nameSpecialCharsRemoved;\n } else {\n return nameSpecialCharsRemoved;\n }\n }\n },\n};\n"],"mappings":"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","ignoreList":[]}

@@ -17,2 +17,4 @@ "use strict";

const id = _genUtil.GenResultUtil.encodeIdentifier;
// Take an OpenAPI schema and generate a top-level module, as a string.

@@ -54,10 +56,10 @@ // @throws Error When we cannot generate a module from the given schema.

}
return `import { ${refId} } from '${ref}';`;
return `import { ${id(refId)} } from '${ref}';`;
}).join('\n')}
${commentsGenerated.commentBlock}
export const ${schemaId} = ${code}; ${commentsGenerated.commentInline}
export type ${schemaId} = S.Schema.Type<typeof ${schemaId}>;
export const ${schemaId}Encoded = S.encodedSchema(${schemaId});
export type ${schemaId}Encoded = S.Schema.Encoded<typeof ${schemaId}>;
export const ${id(schemaId)} = ${code}; ${commentsGenerated.commentInline}
export type ${id(schemaId)} = S.Schema.Type<typeof ${id(schemaId)}>;
export const ${id(schemaId)}Encoded = S.encodedSchema(${id(schemaId)});
export type ${id(schemaId)}Encoded = S.Schema.Encoded<typeof ${id(schemaId)}>;
`;

@@ -64,0 +66,0 @@ };

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

{"version":3,"file":"moduleGen.cjs","names":["_tsDedent","require","_genUtil","_schemaGen","generateModule","schemaId","schema","generationContext","schemas","hooks","isSchemaIdBefore","_schemaId","code","refs","comments","generateForSchema","commentsGenerated","GenResultUtil","commentsToCode","fileNameForRef","ref","split","at","schemaIdForRef","replace","refsSorted","filter","sort","ref1","ref2","startsWith","dedent","map","refId","Error","join","commentBlock","commentInline","exports"],"sources":["../../../../src/generation/effSchemGen/moduleGen.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 OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport { GenResultUtil } from './genUtil.ts';\nimport { type Context as SchemaGenContext, generateForSchema } from './schemaGen.ts';\n\n\n// Take an OpenAPI schema and generate a top-level module, as a string.\n// @throws Error When we cannot generate a module from the given schema.\nexport const generateModule = (schemaId: string, schema: OpenApiSchema): string => {\n const generationContext: SchemaGenContext = {\n schemas: {}, // FIXME\n hooks: {},\n isSchemaIdBefore(_schemaId: OpenApiSchemaId) { return true; },\n };\n const { code, refs, comments } = generateForSchema(generationContext, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n const fileNameForRef = (ref: string): undefined | string => ref.split('/').at(-1);\n const schemaIdForRef = (ref: string): undefined | string => fileNameForRef(ref)?.replace(/\\.ts$/, '');\n \n const refsSorted = [...refs]\n .filter(ref => schemaIdForRef(ref) !== schemaId)\n .sort((ref1, ref2) => {\n if (ref1.startsWith('../util/')) {\n return -1;\n } else if (ref2.startsWith('../util/')) {\n return +1;\n }\n return 0;\n });\n return dedent`\n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${refsSorted.map(ref => {\n const refId = schemaIdForRef(ref);\n if (!refId) { throw new Error(`Invalid ref: ${ref}`); }\n return `import { ${refId} } from '${ref}';`;\n }).join('\\n')}\n \n ${commentsGenerated.commentBlock}\n export const ${schemaId} = ${code}; ${commentsGenerated.commentInline}\n export type ${schemaId} = S.Schema.Type<typeof ${schemaId}>;\n export const ${schemaId}Encoded = S.encodedSchema(${schemaId});\n export type ${schemaId}Encoded = S.Schema.Encoded<typeof ${schemaId}>;\n `;\n};\n"],"mappings":";;;;;;AAOA,IAAAA,SAAA,GAAAC,OAAA;AAGA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAXA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACO,MAAMG,cAAc,GAAGA,CAACC,QAAgB,EAAEC,MAAqB,KAAa;EACjF,MAAMC,iBAAmC,GAAG;IAC1CC,OAAO,EAAE,CAAC,CAAC;IAAE;IACbC,KAAK,EAAE,CAAC,CAAC;IACTC,gBAAgBA,CAACC,SAA0B,EAAE;MAAE,OAAO,IAAI;IAAE;EAC9D,CAAC;EACD,MAAM;IAAEC,IAAI;IAAEC,IAAI;IAAEC;EAAS,CAAC,GAAG,IAAAC,4BAAiB,EAACR,iBAAiB,EAAED,MAAM,CAAC;EAC7E,MAAMU,iBAAiB,GAAGC,sBAAa,CAACC,cAAc,CAACJ,QAAQ,CAAC;EAEhE,MAAMK,cAAc,GAAIC,GAAW,IAAyBA,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,EAAE,CAAC,CAAC,CAAC,CAAC;EACjF,MAAMC,cAAc,GAAIH,GAAW,IAAyBD,cAAc,CAACC,GAAG,CAAC,EAAEI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;EAErG,MAAMC,UAAU,GAAG,CAAC,GAAGZ,IAAI,CAAC,CACzBa,MAAM,CAACN,GAAG,IAAIG,cAAc,CAACH,GAAG,CAAC,KAAKf,QAAQ,CAAC,CAC/CsB,IAAI,CAAC,CAACC,IAAI,EAAEC,IAAI,KAAK;IACpB,IAAID,IAAI,CAACE,UAAU,CAAC,UAAU,CAAC,EAAE;MAC/B,OAAO,CAAC,CAAC;IACX,CAAC,MAAM,IAAID,IAAI,CAACC,UAAU,CAAC,UAAU,CAAC,EAAE;MACtC,OAAO,CAAC,CAAC;IACX;IACA,OAAO,CAAC;EACV,CAAC,CAAC;EACJ,OAAO,IAAAC,gBAAM;AACf;AACA;AACA;AACA,MAAMN,UAAU,CAACO,GAAG,CAACZ,GAAG,IAAI;IACtB,MAAMa,KAAK,GAAGV,cAAc,CAACH,GAAG,CAAC;IACjC,IAAI,CAACa,KAAK,EAAE;MAAE,MAAM,IAAIC,KAAK,CAAC,gBAAgBd,GAAG,EAAE,CAAC;IAAE;IACtD,OAAO,YAAYa,KAAK,YAAYb,GAAG,IAAI;EAC7C,CAAC,CAAC,CAACe,IAAI,CAAC,IAAI,CAAC;AACjB;AACA,MAAMnB,iBAAiB,CAACoB,YAAY;AACpC,mBAAmB/B,QAAQ,MAAMO,IAAI,KAAKI,iBAAiB,CAACqB,aAAa;AACzE,kBAAkBhC,QAAQ,2BAA2BA,QAAQ;AAC7D,mBAAmBA,QAAQ,6BAA6BA,QAAQ;AAChE,kBAAkBA,QAAQ,qCAAqCA,QAAQ;AACvE,GAAG;AACH,CAAC;AAACiC,OAAA,CAAAlC,cAAA,GAAAA,cAAA","ignoreList":[]}
{"version":3,"file":"moduleGen.cjs","names":["_tsDedent","require","_genUtil","_schemaGen","id","GenResultUtil","encodeIdentifier","generateModule","schemaId","schema","generationContext","schemas","hooks","isSchemaIdBefore","_schemaId","code","refs","comments","generateForSchema","commentsGenerated","commentsToCode","fileNameForRef","ref","split","at","schemaIdForRef","replace","refsSorted","filter","sort","ref1","ref2","startsWith","dedent","map","refId","Error","join","commentBlock","commentInline","exports"],"sources":["../../../../src/generation/effSchemGen/moduleGen.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 OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport { GenResultUtil } from './genUtil.ts';\nimport { type Context as SchemaGenContext, generateForSchema } from './schemaGen.ts';\n\n\nconst id = GenResultUtil.encodeIdentifier;\n\n// Take an OpenAPI schema and generate a top-level module, as a string.\n// @throws Error When we cannot generate a module from the given schema.\nexport const generateModule = (schemaId: string, schema: OpenApiSchema): string => {\n const generationContext: SchemaGenContext = {\n schemas: {}, // FIXME\n hooks: {},\n isSchemaIdBefore(_schemaId: OpenApiSchemaId) { return true; },\n };\n const { code, refs, comments } = generateForSchema(generationContext, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n const fileNameForRef = (ref: string): undefined | string => ref.split('/').at(-1);\n const schemaIdForRef = (ref: string): undefined | string => fileNameForRef(ref)?.replace(/\\.ts$/, '');\n \n const refsSorted = [...refs]\n .filter(ref => schemaIdForRef(ref) !== schemaId)\n .sort((ref1, ref2) => {\n if (ref1.startsWith('../util/')) {\n return -1;\n } else if (ref2.startsWith('../util/')) {\n return +1;\n }\n return 0;\n });\n return dedent`\n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${refsSorted.map(ref => {\n const refId = schemaIdForRef(ref);\n if (!refId) { throw new Error(`Invalid ref: ${ref}`); }\n return `import { ${id(refId)} } from '${ref}';`;\n }).join('\\n')}\n \n ${commentsGenerated.commentBlock}\n export const ${id(schemaId)} = ${code}; ${commentsGenerated.commentInline}\n export type ${id(schemaId)} = S.Schema.Type<typeof ${id(schemaId)}>;\n export const ${id(schemaId)}Encoded = S.encodedSchema(${id(schemaId)});\n export type ${id(schemaId)}Encoded = S.Schema.Encoded<typeof ${id(schemaId)}>;\n `;\n};\n"],"mappings":";;;;;;AAOA,IAAAA,SAAA,GAAAC,OAAA;AAGA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAXA;AACA;AACA;AACA;AACA;AACA;;AASA,MAAMG,EAAE,GAAGC,sBAAa,CAACC,gBAAgB;;AAEzC;AACA;AACO,MAAMC,cAAc,GAAGA,CAACC,QAAgB,EAAEC,MAAqB,KAAa;EACjF,MAAMC,iBAAmC,GAAG;IAC1CC,OAAO,EAAE,CAAC,CAAC;IAAE;IACbC,KAAK,EAAE,CAAC,CAAC;IACTC,gBAAgBA,CAACC,SAA0B,EAAE;MAAE,OAAO,IAAI;IAAE;EAC9D,CAAC;EACD,MAAM;IAAEC,IAAI;IAAEC,IAAI;IAAEC;EAAS,CAAC,GAAG,IAAAC,4BAAiB,EAACR,iBAAiB,EAAED,MAAM,CAAC;EAC7E,MAAMU,iBAAiB,GAAGd,sBAAa,CAACe,cAAc,CAACH,QAAQ,CAAC;EAEhE,MAAMI,cAAc,GAAIC,GAAW,IAAyBA,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,EAAE,CAAC,CAAC,CAAC,CAAC;EACjF,MAAMC,cAAc,GAAIH,GAAW,IAAyBD,cAAc,CAACC,GAAG,CAAC,EAAEI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;EAErG,MAAMC,UAAU,GAAG,CAAC,GAAGX,IAAI,CAAC,CACzBY,MAAM,CAACN,GAAG,IAAIG,cAAc,CAACH,GAAG,CAAC,KAAKd,QAAQ,CAAC,CAC/CqB,IAAI,CAAC,CAACC,IAAI,EAAEC,IAAI,KAAK;IACpB,IAAID,IAAI,CAACE,UAAU,CAAC,UAAU,CAAC,EAAE;MAC/B,OAAO,CAAC,CAAC;IACX,CAAC,MAAM,IAAID,IAAI,CAACC,UAAU,CAAC,UAAU,CAAC,EAAE;MACtC,OAAO,CAAC,CAAC;IACX;IACA,OAAO,CAAC;EACV,CAAC,CAAC;EACJ,OAAO,IAAAC,gBAAM;AACf;AACA;AACA;AACA,MAAMN,UAAU,CAACO,GAAG,CAACZ,GAAG,IAAI;IACtB,MAAMa,KAAK,GAAGV,cAAc,CAACH,GAAG,CAAC;IACjC,IAAI,CAACa,KAAK,EAAE;MAAE,MAAM,IAAIC,KAAK,CAAC,gBAAgBd,GAAG,EAAE,CAAC;IAAE;IACtD,OAAO,YAAYlB,EAAE,CAAC+B,KAAK,CAAC,YAAYb,GAAG,IAAI;EACjD,CAAC,CAAC,CAACe,IAAI,CAAC,IAAI,CAAC;AACjB;AACA,MAAMlB,iBAAiB,CAACmB,YAAY;AACpC,mBAAmBlC,EAAE,CAACI,QAAQ,CAAC,MAAMO,IAAI,KAAKI,iBAAiB,CAACoB,aAAa;AAC7E,kBAAkBnC,EAAE,CAACI,QAAQ,CAAC,2BAA2BJ,EAAE,CAACI,QAAQ,CAAC;AACrE,mBAAmBJ,EAAE,CAACI,QAAQ,CAAC,6BAA6BJ,EAAE,CAACI,QAAQ,CAAC;AACxE,kBAAkBJ,EAAE,CAACI,QAAQ,CAAC,qCAAqCJ,EAAE,CAACI,QAAQ,CAAC;AAC/E,GAAG;AACH,CAAC;AAACgC,OAAA,CAAAjC,cAAA,GAAAA,cAAA","ignoreList":[]}

@@ -24,2 +24,3 @@ "use strict";

};
const id = _genUtil.GenResultUtil.encodeIdentifier;

@@ -204,4 +205,4 @@ // Transform the given `schema` by reordering object fields according the given `ordering` spec.

${schemaExportComment ? `${schemaExportComment}\n` : ''}${typeof definitionSpec.typeDeclaration === 'string'
//? `export const ${targetSchemaId}: S.Schema<${targetSchemaId}> = ` // Replaced with suspend annotations
? `export const ${targetSchemaId} = ` : `export const ${targetSchemaId} = `}${
//? `export const ${id(targetSchemaId)}: S.Schema<${id(targetSchemaId)}> = ` // Replaced with suspend annotations
? `export const ${id(targetSchemaId)} = ` : `export const ${id(targetSchemaId)} = `}${
//definitionSpec.lazy ? `S.suspend(() => ${code});` : code // Replaced with suspend annotations

@@ -212,7 +213,7 @@ code}; ${commentsGenerated.commentInline}

codeExports += (0, _tsDedent.dedent)`
export type ${targetSchemaId} = ${definitionSpec.typeDeclaration};
export type ${id(targetSchemaId)} = ${definitionSpec.typeDeclaration};
`;
} else {
codeExports += (0, _tsDedent.dedent)`
export type ${targetSchemaId} = S.Schema.Type<typeof ${targetSchemaId}>;
export type ${id(targetSchemaId)} = S.Schema.Type<typeof ${id(targetSchemaId)}>;
`;

@@ -244,3 +245,3 @@ }

codeExports += (0, _tsDedent.dedent)`
/* ${targetSchemaId} */
/* ${id(targetSchemaId)} */
${commentsGenerated.commentBlock}

@@ -252,5 +253,5 @@ ${sourceSchemaId === targetSchemaId ? '' : `// Generated from OpenAPI \`${sourceSchemaId}\` schema`}

if (typeof definitionSpec.typeDeclaration === 'string') {
codeExports += `type _${targetSchemaId} = ${definitionSpec.typeDeclaration};`;
codeExports += `type _${id(targetSchemaId)} = ${definitionSpec.typeDeclaration};`;
if (typeof definitionSpec.typeDeclarationEncoded === 'string') {
codeExports += `type _${targetSchemaId}Encoded = ${definitionSpec.typeDeclarationEncoded};`;
codeExports += `type _${id(targetSchemaId)}Encoded = ${definitionSpec.typeDeclarationEncoded};`;
}

@@ -262,4 +263,4 @@ }

typeof definitionSpec.typeDeclarationEncoded === 'string'
? `: S.Schema<_${targetSchemaId}, _${targetSchemaId}Encoded>`
: `: S.Schema<_${targetSchemaId}>`
? `: S.Schema<_${id(targetSchemaId)}, _${id(targetSchemaId)}Encoded>`
: `: S.Schema<_${id(targetSchemaId)}>`
)

@@ -282,10 +283,10 @@ : '';

codeExports += (0, _tsDedent.dedent)`
const _${targetSchemaId}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}
export interface ${targetSchemaId} extends S.Schema.Type<typeof _${targetSchemaId}> {}
export interface ${targetSchemaId}Encoded extends S.Schema.Encoded<typeof _${targetSchemaId}> {}
export const ${targetSchemaId}: S.Schema<${targetSchemaId}, ${targetSchemaId}Encoded> = _${targetSchemaId};
const _${id(targetSchemaId)}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}
export interface ${id(targetSchemaId)} extends S.Schema.Type<typeof _${id(targetSchemaId)}> {}
export interface ${id(targetSchemaId)}Encoded extends S.Schema.Encoded<typeof _${id(targetSchemaId)}> {}
export const ${id(targetSchemaId)}: S.Schema<${id(targetSchemaId)}, ${id(targetSchemaId)}Encoded> = _${id(targetSchemaId)};
`.trim();
/* To generate the runtime encoded schema:
export const ${targetSchemaId}Encoded: S.Schema<${targetSchemaId}Encoded, ${targetSchemaId}Encoded> =
S.encodedSchema(_${targetSchemaId});
export const ${id(targetSchemaId)}Encoded: S.Schema<${id(targetSchemaId)}Encoded, ${id(targetSchemaId)}Encoded> =
S.encodedSchema(_${id(targetSchemaId)});
*/

@@ -295,3 +296,3 @@ } else if (shouldGenerateOpaqueClass) {

codeExports += (0, _tsDedent.dedent)`
export class ${targetSchemaId} extends S.Class<${targetSchemaId}>("${targetSchemaId}")(
export class ${id(targetSchemaId)} extends S.Class<${id(targetSchemaId)}>("${id(targetSchemaId)}")(
${code.replace(/^S\.Struct\(/, '').replace(/\),?$/, '')}

@@ -302,8 +303,8 @@ ) {}

codeExports += (0, _tsDedent.dedent)`
export const ${targetSchemaId}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}
export type ${targetSchemaId} = S.Schema.Type<typeof ${targetSchemaId}>;
export type ${targetSchemaId}Encoded = S.Schema.Encoded<typeof ${targetSchemaId}>;
export const ${id(targetSchemaId)}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}
export type ${id(targetSchemaId)} = S.Schema.Type<typeof ${id(targetSchemaId)}>;
export type ${id(targetSchemaId)}Encoded = S.Schema.Encoded<typeof ${id(targetSchemaId)}>;
`.trim();
/* To generate the runtime encoded schema:
export const ${targetSchemaId}Encoded = S.encodedSchema(${targetSchemaId});
export const ${id(targetSchemaId)}Encoded = S.encodedSchema(${id(targetSchemaId)});
*/

@@ -347,3 +348,3 @@ }

}
return `import { ${targetSchemaId} } from '${modulePathRelative}';`;
return `import { ${id(targetSchemaId)} } from '${modulePathRelative}';`;
} else {

@@ -350,0 +351,0 @@ return `// MISSING ${sourceSchemaId}`;

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

{"version":3,"file":"moduleGenWithSpec.cjs","names":["_tsDedent","require","path","_interopRequireWildcard","GenSpec","_genUtil","_schemaGen","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","assertUnreachable","x","Error","reorderFields","fieldGroups","schema","TypeError","allOf","map","oneOf","anyOf","type","properties","orderingKeys","Set","values","flatMap","fieldGroup","keys","fieldNames","split","orderingHeadings","entries","reduce","acc","fieldGroupKey","fieldGroupNames","fieldInitial","fromEntries","filter","propKey","includes","sort","prop1Key","prop2Key","indexOf","prop","hasOwn","processSchemaWithSpec","spec","action","fields","generateModuleWithSpec","schemas","modulePath","options","generationContext","hooks","isSchemaIdBefore","schemaId","specModules","runtime","modules","moduleSpec","schemaIds","definitions","def","DefUtil","sourceSchemaIdFromDef","schemasToDefinitionsMap","Map","definition","codeExports","refsModule","definitionSpec","targetSchemaId","targetSchemaIdFromDef","generationContextForSchema","referencedSchemaId","isSchemaBefore","code","sourceSchemaId","refs","comments","generateForSchema","commentsGenerated","GenResultUtil","commentsToCode","combineRefs","schemaExportComment","dedent","commentBlock","trim","typeDeclaration","commentInline","schemaRaw","replace","typeDeclarationEncoded","typeAnnotation","schemaCode","JSON","stringify","shouldGenerateOpaqueStruct","shouldGenerateOpaqueClass","refsSorted","ref","importName","importNameFromRef","ref1","ref2","codeImports","definitionLocator","modulePathRelative","relative","dirname","startsWith","join","exports"],"sources":["../../../../src/generation/effSchemGen/moduleGenWithSpec.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 * as path from 'node:path';\nimport { type OpenApiRef, type OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport { refFromSchemaId, isObjectSchema } from '../../analysis/GraphAnalyzer.ts';\nimport * as GenSpec from '../generationSpec.ts';\nimport { type GenResult, GenResultUtil } from './genUtil.ts';\nimport { type Context as SchemaGenContext, generateForSchema } from './schemaGen.ts';\n\n\nconst assertUnreachable = (x: never): never => { throw new Error(`Should not happen`); };\n\n\n// Transform the given `schema` by reordering object fields according the given `ordering` spec.\n// @throws TypeError When `schema` is not an object schema.\nconst reorderFields = (fieldGroups: GenSpec.FieldGroups, schema: OpenApiSchema): OpenApiSchema => {\n // We assume the `schema` is an object schema (or close enough to one). If `schema` is an allOf/oneOf/anyOf then\n // we reorder all of the possibilities.\n \n if ('$ref' in schema) { // Case: OpenAPIV3.ReferenceObject\n throw new TypeError(`Not an object schema`);\n } else { // Case: OpenAPIV3.SchemaObject\n if ('items' in schema) { // Case: OpenAPIV3.ArraySchemaObject\n throw new TypeError(`Not an object schema`);\n } else { // Case: OpenAPIV3.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return { ...schema, allOf: schema.allOf.map(schema => reorderFields(fieldGroups, schema)) };\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return { ...schema, oneOf: schema.oneOf.map(schema => reorderFields(fieldGroups, schema)) };\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return { ...schema, anyOf: schema.anyOf.map(schema => reorderFields(fieldGroups, schema)) };\n }\n \n if (schema.type !== 'object') {\n throw new TypeError(`Not an object schema`);\n }\n \n // Reorder `properties` (if any)\n // Note: we don't care about `required` or `additionalProperties` here\n \n const properties: undefined | Record<string, OpenApiSchema> = schema.properties;\n if (typeof properties === 'undefined') { return schema; }\n \n // Prep: get the list of all keys across all groups, for quick lookup purposes\n const orderingKeys: Array<string> = [...new Set(Object.values(fieldGroups).flatMap(fieldGroup => {\n // Each key may be a comma-separated string of field names\n return Object.keys(fieldGroup).flatMap(fieldNames => fieldNames.split(/,\\s*/));\n }))];\n \n // FIXME\n // const groupHeadingComment: null | string = groupKey.startsWith('//')\n // ? groupKey.replace('//', '').trim()\n // : null;\n \n // Get a mapping of the initial fields in the group to the group name (for later annotation purposes)\n const orderingHeadings = Object.entries(fieldGroups).reduce(\n (acc, [fieldGroupKey, fieldGroup]) => {\n const fieldGroupNames = Object.keys(fieldGroup).flatMap(fieldNames => fieldNames.split(/,\\s*/));\n \n // Get the first field in the list (this field will be annotated to identify where the group starts)\n const fieldInitial: undefined | string = fieldGroupNames[0];\n \n if (typeof fieldInitial === 'string') {\n acc[fieldInitial] = fieldGroupKey;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n \n return {\n ...schema,\n properties: Object.fromEntries(Object.entries(properties)\n .filter(([propKey]) => orderingKeys.includes(propKey))\n .sort(([prop1Key], [prop2Key]) => {\n return orderingKeys.indexOf(prop1Key) - orderingKeys.indexOf(prop2Key);\n })\n .map(([propKey, prop]) => {\n if (Object.hasOwn(orderingHeadings, propKey)) {\n return [propKey, { ...prop, 'x-heading': orderingHeadings[propKey] }];\n } else {\n return [propKey, prop];\n }\n }),\n ),\n };\n }\n }\n};\nconst processSchemaWithSpec = (spec: GenSpec.GenerationDefinitionSpec, schema: OpenApiSchema): OpenApiSchema => {\n if (spec.action !== 'generate-schema') { return schema; }\n \n const fields: undefined | GenSpec.FieldGroups = spec.fields;\n if (typeof fields !== 'undefined') {\n return reorderFields(fields, schema);\n }\n \n return schema;\n};\n\n// Generate an @effect/schema module for the given module as per the given module spec\ntype GenerateModuleWithSpecOptions = {\n // Whether `schema1` is before `schema2` in the generation order\n isSchemaBefore: (schema1: OpenApiSchemaId, schema2: OpenApiSchemaId) => boolean,\n};\nexport const generateModuleWithSpec = (\n schemas: Record<string, OpenApiSchema>, // All available source schemas (may contain ones we don't need)\n spec: GenSpec.GenerationSpec, // The (full) generation spec\n modulePath: GenSpec.ModulePath, // The specific module we want to generate\n options: GenerateModuleWithSpecOptions,\n): string => {\n const generationContext: SchemaGenContext = {\n schemas,\n hooks: spec.hooks,\n isSchemaIdBefore: (schemaId: OpenApiSchemaId): boolean => {\n return true;\n },\n };\n \n const specModules = { ...spec.runtime, ...spec.modules };\n \n const moduleSpec: undefined | GenSpec.GenerationModuleSpec = specModules[modulePath];\n if (typeof moduleSpec === 'undefined') { throw new Error(`Cannot find definition for module ${modulePath}`); }\n \n // Derive the list of all schema IDs from `schemas`\n const schemaIds: Set<OpenApiSchemaId> = new Set(moduleSpec.definitions.map((def): OpenApiSchemaId => {\n return GenSpec.DefUtil.sourceSchemaIdFromDef(def);\n }));\n \n // Reverse mapping of schema IDs to the first definition that contains it\n type DefinitionLocator = { modulePath: GenSpec.ModulePath, definition: GenSpec.GenerationDefinitionSpec };\n const schemasToDefinitionsMap: Map<OpenApiSchemaId, DefinitionLocator> = new Map();\n for (const [modulePath, moduleSpec] of Object.entries(specModules)) {\n for (const definition of moduleSpec.definitions) {\n const schemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definition);\n if (!schemasToDefinitionsMap.has(schemaId)) {\n schemasToDefinitionsMap.set(schemaId, { modulePath, definition });\n }\n }\n }\n \n let codeExports = '';\n let refsModule: GenResult['refs'] = [];\n for (const definitionSpec of moduleSpec.definitions) {\n const targetSchemaId = GenSpec.DefUtil.targetSchemaIdFromDef(definitionSpec);\n \n const generationContextForSchema: SchemaGenContext = {\n ...generationContext,\n isSchemaIdBefore: (referencedSchemaId: OpenApiSchemaId): boolean => {\n return options.isSchemaBefore(referencedSchemaId, targetSchemaId);\n \n // const referencedDef = schemasToDefinitionsMap.get(referencedSchemaId);\n // if (!referencedDef) { return false; }\n // const defs = moduleSpec.definitions;\n // \n // console.log('YYY', referencedSchemaId, '<-', targetSchemaId, referencedDef.definition);\n // if (defs.indexOf(referencedDef.definition) >= defs.indexOf(definitionSpec)) {\n // console.log('XXX', referencedSchemaId, '>=', targetSchemaId);\n // }\n // \n // return defs.indexOf(referencedDef.definition) < defs.indexOf(definitionSpec);\n },\n };\n \n switch (definitionSpec.action) {\n case 'custom-code': {\n codeExports = definitionSpec.code;\n break;\n };\n case 'custom-schema': {\n const schema: OpenApiSchema = definitionSpec.schema;\n const sourceSchemaId: OpenApiSchemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definitionSpec);\n \n const { code, refs, comments } = generateForSchema(generationContextForSchema, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n refsModule = GenResultUtil.combineRefs(refsModule, refs);\n \n const schemaExportComment: string = dedent`\n ${commentsGenerated.commentBlock}\n ${sourceSchemaId === targetSchemaId ? '' : `// Generated from OpenAPI \\`${sourceSchemaId}\\` schema`}\n `.trim();\n \n codeExports += '\\n\\n' + dedent`\n ${schemaExportComment ? `${schemaExportComment}\\n` : ''}${\n typeof definitionSpec.typeDeclaration === 'string'\n //? `export const ${targetSchemaId}: S.Schema<${targetSchemaId}> = ` // Replaced with suspend annotations\n ? `export const ${targetSchemaId} = `\n : `export const ${targetSchemaId} = `\n }${\n //definitionSpec.lazy ? `S.suspend(() => ${code});` : code // Replaced with suspend annotations\n code\n }; ${commentsGenerated.commentInline}\n `.trim();\n if (typeof definitionSpec.typeDeclaration === 'string') {\n codeExports += dedent`\n export type ${targetSchemaId} = ${definitionSpec.typeDeclaration};\n `;\n } else {\n codeExports += dedent`\n export type ${targetSchemaId} = S.Schema.Type<typeof ${targetSchemaId}>;\n `;\n }\n break;\n };\n case 'generate-schema': {\n const sourceSchemaId: OpenApiSchemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definitionSpec);\n const schemaRaw: undefined | OpenApiSchema = schemas[sourceSchemaId];\n if (!schemaRaw) { throw new Error(`Could not find a schema named ${sourceSchemaId}`) }\n const schema: OpenApiSchema = processSchemaWithSpec(definitionSpec, schemaRaw);\n \n const { code, refs, comments } = generateForSchema(generationContextForSchema, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n refsModule = GenResultUtil.combineRefs(refsModule, refs);\n \n \n // Start generating the schema exports\n codeExports += '\\n\\n';\n \n // Comments\n codeExports += dedent`\n /* ${targetSchemaId} */\n ${commentsGenerated.commentBlock}\n ${sourceSchemaId === targetSchemaId ? '' : `// Generated from OpenAPI \\`${sourceSchemaId}\\` schema`}\n `.replace(/[\\n]+/, '\\n') + '\\n';\n \n // Manual type declarations (for recursive references)\n if (typeof definitionSpec.typeDeclaration === 'string') {\n codeExports += `type _${targetSchemaId} = ${definitionSpec.typeDeclaration};`;\n if (typeof definitionSpec.typeDeclarationEncoded === 'string') {\n codeExports += `type _${targetSchemaId}Encoded = ${definitionSpec.typeDeclarationEncoded};`;\n }\n }\n /*\n const typeAnnotation = typeof definitionSpec.typeDeclaration === 'string'\n ? (\n typeof definitionSpec.typeDeclarationEncoded === 'string'\n ? `: S.Schema<_${targetSchemaId}, _${targetSchemaId}Encoded>`\n : `: S.Schema<_${targetSchemaId}>`\n )\n : '';\n */\n const typeAnnotation = ''; // Replaced with suspend annotations\n \n const schemaCode = dedent`\n ${\n //definitionSpec.lazy ? `S.suspend(() => ${code})` : code // Replaced with suspend annotations\n code\n }\n .annotations({ identifier: ${JSON.stringify(targetSchemaId)} })\n `.trim();\n \n // See: https://github.com/Effect-TS/effect/tree/main/packages/schema#understanding-opaque-names\n const shouldGenerateOpaqueStruct = false;//isObjectSchema(schemas, refFromSchemaId(sourceSchemaId));\n const shouldGenerateOpaqueClass = false; //isObjectSchema(schemas, refFromSchemaId(sourceSchemaId)) && /^S.Struct/.test(code);\n if (shouldGenerateOpaqueStruct) {\n codeExports += dedent`\n const _${targetSchemaId}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}\n export interface ${targetSchemaId} extends S.Schema.Type<typeof _${targetSchemaId}> {}\n export interface ${targetSchemaId}Encoded extends S.Schema.Encoded<typeof _${targetSchemaId}> {}\n export const ${targetSchemaId}: S.Schema<${targetSchemaId}, ${targetSchemaId}Encoded> = _${targetSchemaId};\n `.trim();\n /* To generate the runtime encoded schema:\n export const ${targetSchemaId}Encoded: S.Schema<${targetSchemaId}Encoded, ${targetSchemaId}Encoded> =\n S.encodedSchema(_${targetSchemaId});\n */\n } else if (shouldGenerateOpaqueClass) {\n // Experimental: generate a top level Struct as a class (for better opaque types)\n codeExports += dedent`\n export class ${targetSchemaId} extends S.Class<${targetSchemaId}>(\"${targetSchemaId}\")(\n ${code.replace(/^S\\.Struct\\(/, '').replace(/\\),?$/, '')}\n ) {}\n `.trim();\n } else {\n codeExports += dedent`\n export const ${targetSchemaId}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}\n export type ${targetSchemaId} = S.Schema.Type<typeof ${targetSchemaId}>;\n export type ${targetSchemaId}Encoded = S.Schema.Encoded<typeof ${targetSchemaId}>;\n `.trim();\n /* To generate the runtime encoded schema:\n export const ${targetSchemaId}Encoded = S.encodedSchema(${targetSchemaId});\n */\n }\n break;\n };\n default: assertUnreachable(definitionSpec);\n }\n }\n \n const refsSorted = [...refsModule]\n .filter(ref => {\n // Filter out imports that are already part of this file\n const importName = GenResultUtil.importNameFromRef(ref);\n return !schemaIds.has(importName);\n })\n .sort((ref1, ref2) => {\n // Sort certain imports at the top\n // FIXME: unhardcode this logic somehow\n if (ref1.includes('/util/')) {\n return -1;\n } else if (ref2.includes('/util/')) {\n return +1;\n }\n return 0;\n });\n \n const codeImports = dedent`\n ${refsSorted.map(ref => {\n const sourceSchemaId: OpenApiSchemaId = GenResultUtil.importNameFromRef(ref); // Get the source schema ID\n \n // Try to reverse-map this schema ID to one of the spec's definitions\n const definitionLocator: undefined | DefinitionLocator = schemasToDefinitionsMap.get(sourceSchemaId);\n \n if (typeof definitionLocator !== 'undefined') {\n const targetSchemaId = GenSpec.DefUtil.targetSchemaIdFromDef(definitionLocator.definition);\n \n // Calculate the relative path to the module\n let modulePathRelative = path.relative(path.dirname(modulePath), definitionLocator.modulePath);\n if (!modulePathRelative.startsWith('.')) { // Ensure the path starts with a `.` (ESM import paths require it)\n modulePathRelative = './' + modulePathRelative;\n }\n \n return `import { ${targetSchemaId} } from '${modulePathRelative}';`;\n } else {\n return `// MISSING ${sourceSchemaId}`;\n //return `import { ${sourceSchemaId} } from '${ref}';`;\n }\n }).join('\\n')}\n `;\n \n // TODO: may want to add a comment at the top like:\n // /* Generated on ${new Date().toISOString()} from ${apiName} version ${apiVersion} */\n // Currently leaving this out because it means even simple changes cause a git diff upon regeneration.\n return dedent`\n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${codeImports}\n \n ${codeExports}\n `;\n};\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"moduleGenWithSpec.cjs","names":["_tsDedent","require","path","_interopRequireWildcard","GenSpec","_genUtil","_schemaGen","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","assertUnreachable","x","Error","id","GenResultUtil","encodeIdentifier","reorderFields","fieldGroups","schema","TypeError","allOf","map","oneOf","anyOf","type","properties","orderingKeys","Set","values","flatMap","fieldGroup","keys","fieldNames","split","orderingHeadings","entries","reduce","acc","fieldGroupKey","fieldGroupNames","fieldInitial","fromEntries","filter","propKey","includes","sort","prop1Key","prop2Key","indexOf","prop","hasOwn","processSchemaWithSpec","spec","action","fields","generateModuleWithSpec","schemas","modulePath","options","generationContext","hooks","isSchemaIdBefore","schemaId","specModules","runtime","modules","moduleSpec","schemaIds","definitions","def","DefUtil","sourceSchemaIdFromDef","schemasToDefinitionsMap","Map","definition","codeExports","refsModule","definitionSpec","targetSchemaId","targetSchemaIdFromDef","generationContextForSchema","referencedSchemaId","isSchemaBefore","code","sourceSchemaId","refs","comments","generateForSchema","commentsGenerated","commentsToCode","combineRefs","schemaExportComment","dedent","commentBlock","trim","typeDeclaration","commentInline","schemaRaw","replace","typeDeclarationEncoded","typeAnnotation","schemaCode","JSON","stringify","shouldGenerateOpaqueStruct","shouldGenerateOpaqueClass","refsSorted","ref","importName","importNameFromRef","ref1","ref2","codeImports","definitionLocator","modulePathRelative","relative","dirname","startsWith","join","exports"],"sources":["../../../../src/generation/effSchemGen/moduleGenWithSpec.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 * as path from 'node:path';\nimport { type OpenApiRef, type OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport { refFromSchemaId, isObjectSchema } from '../../analysis/GraphAnalyzer.ts';\nimport * as GenSpec from '../generationSpec.ts';\nimport { type GenResult, GenResultUtil } from './genUtil.ts';\nimport { type Context as SchemaGenContext, generateForSchema } from './schemaGen.ts';\n\n\nconst assertUnreachable = (x: never): never => { throw new Error(`Should not happen`); };\nconst id = GenResultUtil.encodeIdentifier;\n\n\n// Transform the given `schema` by reordering object fields according the given `ordering` spec.\n// @throws TypeError When `schema` is not an object schema.\nconst reorderFields = (fieldGroups: GenSpec.FieldGroups, schema: OpenApiSchema): OpenApiSchema => {\n // We assume the `schema` is an object schema (or close enough to one). If `schema` is an allOf/oneOf/anyOf then\n // we reorder all of the possibilities.\n \n if ('$ref' in schema) { // Case: OpenAPIV3.ReferenceObject\n throw new TypeError(`Not an object schema`);\n } else { // Case: OpenAPIV3.SchemaObject\n if ('items' in schema) { // Case: OpenAPIV3.ArraySchemaObject\n throw new TypeError(`Not an object schema`);\n } else { // Case: OpenAPIV3.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return { ...schema, allOf: schema.allOf.map(schema => reorderFields(fieldGroups, schema)) };\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return { ...schema, oneOf: schema.oneOf.map(schema => reorderFields(fieldGroups, schema)) };\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return { ...schema, anyOf: schema.anyOf.map(schema => reorderFields(fieldGroups, schema)) };\n }\n \n if (schema.type !== 'object') {\n throw new TypeError(`Not an object schema`);\n }\n \n // Reorder `properties` (if any)\n // Note: we don't care about `required` or `additionalProperties` here\n \n const properties: undefined | Record<string, OpenApiSchema> = schema.properties;\n if (typeof properties === 'undefined') { return schema; }\n \n // Prep: get the list of all keys across all groups, for quick lookup purposes\n const orderingKeys: Array<string> = [...new Set(Object.values(fieldGroups).flatMap(fieldGroup => {\n // Each key may be a comma-separated string of field names\n return Object.keys(fieldGroup).flatMap(fieldNames => fieldNames.split(/,\\s*/));\n }))];\n \n // FIXME\n // const groupHeadingComment: null | string = groupKey.startsWith('//')\n // ? groupKey.replace('//', '').trim()\n // : null;\n \n // Get a mapping of the initial fields in the group to the group name (for later annotation purposes)\n const orderingHeadings = Object.entries(fieldGroups).reduce(\n (acc, [fieldGroupKey, fieldGroup]) => {\n const fieldGroupNames = Object.keys(fieldGroup).flatMap(fieldNames => fieldNames.split(/,\\s*/));\n \n // Get the first field in the list (this field will be annotated to identify where the group starts)\n const fieldInitial: undefined | string = fieldGroupNames[0];\n \n if (typeof fieldInitial === 'string') {\n acc[fieldInitial] = fieldGroupKey;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n \n return {\n ...schema,\n properties: Object.fromEntries(Object.entries(properties)\n .filter(([propKey]) => orderingKeys.includes(propKey))\n .sort(([prop1Key], [prop2Key]) => {\n return orderingKeys.indexOf(prop1Key) - orderingKeys.indexOf(prop2Key);\n })\n .map(([propKey, prop]) => {\n if (Object.hasOwn(orderingHeadings, propKey)) {\n return [propKey, { ...prop, 'x-heading': orderingHeadings[propKey] }];\n } else {\n return [propKey, prop];\n }\n }),\n ),\n };\n }\n }\n};\nconst processSchemaWithSpec = (spec: GenSpec.GenerationDefinitionSpec, schema: OpenApiSchema): OpenApiSchema => {\n if (spec.action !== 'generate-schema') { return schema; }\n \n const fields: undefined | GenSpec.FieldGroups = spec.fields;\n if (typeof fields !== 'undefined') {\n return reorderFields(fields, schema);\n }\n \n return schema;\n};\n\n// Generate an @effect/schema module for the given module as per the given module spec\ntype GenerateModuleWithSpecOptions = {\n // Whether `schema1` is before `schema2` in the generation order\n isSchemaBefore: (schema1: OpenApiSchemaId, schema2: OpenApiSchemaId) => boolean,\n};\nexport const generateModuleWithSpec = (\n schemas: Record<string, OpenApiSchema>, // All available source schemas (may contain ones we don't need)\n spec: GenSpec.GenerationSpec, // The (full) generation spec\n modulePath: GenSpec.ModulePath, // The specific module we want to generate\n options: GenerateModuleWithSpecOptions,\n): string => {\n const generationContext: SchemaGenContext = {\n schemas,\n hooks: spec.hooks,\n isSchemaIdBefore: (schemaId: OpenApiSchemaId): boolean => {\n return true;\n },\n };\n \n const specModules = { ...spec.runtime, ...spec.modules };\n \n const moduleSpec: undefined | GenSpec.GenerationModuleSpec = specModules[modulePath];\n if (typeof moduleSpec === 'undefined') { throw new Error(`Cannot find definition for module ${modulePath}`); }\n \n // Derive the list of all schema IDs from `schemas`\n const schemaIds: Set<OpenApiSchemaId> = new Set(moduleSpec.definitions.map((def): OpenApiSchemaId => {\n return GenSpec.DefUtil.sourceSchemaIdFromDef(def);\n }));\n \n // Reverse mapping of schema IDs to the first definition that contains it\n type DefinitionLocator = { modulePath: GenSpec.ModulePath, definition: GenSpec.GenerationDefinitionSpec };\n const schemasToDefinitionsMap: Map<OpenApiSchemaId, DefinitionLocator> = new Map();\n for (const [modulePath, moduleSpec] of Object.entries(specModules)) {\n for (const definition of moduleSpec.definitions) {\n const schemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definition);\n if (!schemasToDefinitionsMap.has(schemaId)) {\n schemasToDefinitionsMap.set(schemaId, { modulePath, definition });\n }\n }\n }\n \n let codeExports = '';\n let refsModule: GenResult['refs'] = [];\n for (const definitionSpec of moduleSpec.definitions) {\n const targetSchemaId = GenSpec.DefUtil.targetSchemaIdFromDef(definitionSpec);\n \n const generationContextForSchema: SchemaGenContext = {\n ...generationContext,\n isSchemaIdBefore: (referencedSchemaId: OpenApiSchemaId): boolean => {\n return options.isSchemaBefore(referencedSchemaId, targetSchemaId);\n \n // const referencedDef = schemasToDefinitionsMap.get(referencedSchemaId);\n // if (!referencedDef) { return false; }\n // const defs = moduleSpec.definitions;\n // \n // console.log('YYY', referencedSchemaId, '<-', targetSchemaId, referencedDef.definition);\n // if (defs.indexOf(referencedDef.definition) >= defs.indexOf(definitionSpec)) {\n // console.log('XXX', referencedSchemaId, '>=', targetSchemaId);\n // }\n // \n // return defs.indexOf(referencedDef.definition) < defs.indexOf(definitionSpec);\n },\n };\n \n switch (definitionSpec.action) {\n case 'custom-code': {\n codeExports = definitionSpec.code;\n break;\n };\n case 'custom-schema': {\n const schema: OpenApiSchema = definitionSpec.schema;\n const sourceSchemaId: OpenApiSchemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definitionSpec);\n \n const { code, refs, comments } = generateForSchema(generationContextForSchema, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n refsModule = GenResultUtil.combineRefs(refsModule, refs);\n \n const schemaExportComment: string = dedent`\n ${commentsGenerated.commentBlock}\n ${sourceSchemaId === targetSchemaId ? '' : `// Generated from OpenAPI \\`${sourceSchemaId}\\` schema`}\n `.trim();\n \n codeExports += '\\n\\n' + dedent`\n ${schemaExportComment ? `${schemaExportComment}\\n` : ''}${\n typeof definitionSpec.typeDeclaration === 'string'\n //? `export const ${id(targetSchemaId)}: S.Schema<${id(targetSchemaId)}> = ` // Replaced with suspend annotations\n ? `export const ${id(targetSchemaId)} = `\n : `export const ${id(targetSchemaId)} = `\n }${\n //definitionSpec.lazy ? `S.suspend(() => ${code});` : code // Replaced with suspend annotations\n code\n }; ${commentsGenerated.commentInline}\n `.trim();\n if (typeof definitionSpec.typeDeclaration === 'string') {\n codeExports += dedent`\n export type ${id(targetSchemaId)} = ${definitionSpec.typeDeclaration};\n `;\n } else {\n codeExports += dedent`\n export type ${id(targetSchemaId)} = S.Schema.Type<typeof ${id(targetSchemaId)}>;\n `;\n }\n break;\n };\n case 'generate-schema': {\n const sourceSchemaId: OpenApiSchemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definitionSpec);\n const schemaRaw: undefined | OpenApiSchema = schemas[sourceSchemaId];\n if (!schemaRaw) { throw new Error(`Could not find a schema named ${sourceSchemaId}`) }\n const schema: OpenApiSchema = processSchemaWithSpec(definitionSpec, schemaRaw);\n \n const { code, refs, comments } = generateForSchema(generationContextForSchema, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n refsModule = GenResultUtil.combineRefs(refsModule, refs);\n \n \n // Start generating the schema exports\n codeExports += '\\n\\n';\n \n // Comments\n codeExports += dedent`\n /* ${id(targetSchemaId)} */\n ${commentsGenerated.commentBlock}\n ${sourceSchemaId === targetSchemaId ? '' : `// Generated from OpenAPI \\`${sourceSchemaId}\\` schema`}\n `.replace(/[\\n]+/, '\\n') + '\\n';\n \n // Manual type declarations (for recursive references)\n if (typeof definitionSpec.typeDeclaration === 'string') {\n codeExports += `type _${id(targetSchemaId)} = ${definitionSpec.typeDeclaration};`;\n if (typeof definitionSpec.typeDeclarationEncoded === 'string') {\n codeExports += `type _${id(targetSchemaId)}Encoded = ${definitionSpec.typeDeclarationEncoded};`;\n }\n }\n /*\n const typeAnnotation = typeof definitionSpec.typeDeclaration === 'string'\n ? (\n typeof definitionSpec.typeDeclarationEncoded === 'string'\n ? `: S.Schema<_${id(targetSchemaId)}, _${id(targetSchemaId)}Encoded>`\n : `: S.Schema<_${id(targetSchemaId)}>`\n )\n : '';\n */\n const typeAnnotation = ''; // Replaced with suspend annotations\n \n const schemaCode = dedent`\n ${\n //definitionSpec.lazy ? `S.suspend(() => ${code})` : code // Replaced with suspend annotations\n code\n }\n .annotations({ identifier: ${JSON.stringify(targetSchemaId)} })\n `.trim();\n \n // See: https://github.com/Effect-TS/effect/tree/main/packages/schema#understanding-opaque-names\n const shouldGenerateOpaqueStruct = false;//isObjectSchema(schemas, refFromSchemaId(sourceSchemaId));\n const shouldGenerateOpaqueClass = false; //isObjectSchema(schemas, refFromSchemaId(sourceSchemaId)) && /^S.Struct/.test(code);\n if (shouldGenerateOpaqueStruct) {\n codeExports += dedent`\n const _${id(targetSchemaId)}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}\n export interface ${id(targetSchemaId)} extends S.Schema.Type<typeof _${id(targetSchemaId)}> {}\n export interface ${id(targetSchemaId)}Encoded extends S.Schema.Encoded<typeof _${id(targetSchemaId)}> {}\n export const ${id(targetSchemaId)}: S.Schema<${id(targetSchemaId)}, ${id(targetSchemaId)}Encoded> = _${id(targetSchemaId)};\n `.trim();\n /* To generate the runtime encoded schema:\n export const ${id(targetSchemaId)}Encoded: S.Schema<${id(targetSchemaId)}Encoded, ${id(targetSchemaId)}Encoded> =\n S.encodedSchema(_${id(targetSchemaId)});\n */\n } else if (shouldGenerateOpaqueClass) {\n // Experimental: generate a top level Struct as a class (for better opaque types)\n codeExports += dedent`\n export class ${id(targetSchemaId)} extends S.Class<${id(targetSchemaId)}>(\"${id(targetSchemaId)}\")(\n ${code.replace(/^S\\.Struct\\(/, '').replace(/\\),?$/, '')}\n ) {}\n `.trim();\n } else {\n codeExports += dedent`\n export const ${id(targetSchemaId)}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}\n export type ${id(targetSchemaId)} = S.Schema.Type<typeof ${id(targetSchemaId)}>;\n export type ${id(targetSchemaId)}Encoded = S.Schema.Encoded<typeof ${id(targetSchemaId)}>;\n `.trim();\n /* To generate the runtime encoded schema:\n export const ${id(targetSchemaId)}Encoded = S.encodedSchema(${id(targetSchemaId)});\n */\n }\n break;\n };\n default: assertUnreachable(definitionSpec);\n }\n }\n \n const refsSorted = [...refsModule]\n .filter(ref => {\n // Filter out imports that are already part of this file\n const importName = GenResultUtil.importNameFromRef(ref);\n return !schemaIds.has(importName);\n })\n .sort((ref1, ref2) => {\n // Sort certain imports at the top\n // FIXME: unhardcode this logic somehow\n if (ref1.includes('/util/')) {\n return -1;\n } else if (ref2.includes('/util/')) {\n return +1;\n }\n return 0;\n });\n \n const codeImports = dedent`\n ${refsSorted.map(ref => {\n const sourceSchemaId: OpenApiSchemaId = GenResultUtil.importNameFromRef(ref); // Get the source schema ID\n \n // Try to reverse-map this schema ID to one of the spec's definitions\n const definitionLocator: undefined | DefinitionLocator = schemasToDefinitionsMap.get(sourceSchemaId);\n \n if (typeof definitionLocator !== 'undefined') {\n const targetSchemaId = GenSpec.DefUtil.targetSchemaIdFromDef(definitionLocator.definition);\n \n // Calculate the relative path to the module\n let modulePathRelative = path.relative(path.dirname(modulePath), definitionLocator.modulePath);\n if (!modulePathRelative.startsWith('.')) { // Ensure the path starts with a `.` (ESM import paths require it)\n modulePathRelative = './' + modulePathRelative;\n }\n \n return `import { ${id(targetSchemaId)} } from '${modulePathRelative}';`;\n } else {\n return `// MISSING ${sourceSchemaId}`;\n //return `import { ${sourceSchemaId} } from '${ref}';`;\n }\n }).join('\\n')}\n `;\n \n // TODO: may want to add a comment at the top like:\n // /* Generated on ${new Date().toISOString()} from ${apiName} version ${apiVersion} */\n // Currently leaving this out because it means even simple changes cause a git diff upon regeneration.\n return dedent`\n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${codeImports}\n \n ${codeExports}\n `;\n};\n"],"mappings":"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","ignoreList":[]}

@@ -12,2 +12,3 @@ "use strict";

var fs = _interopRequireWildcard(require("node:fs/promises"));
var _nodeAsync_hooks = require("node:async_hooks");
var _moduleGen = require("./generation/effSchemGen/moduleGen.cjs");

@@ -52,2 +53,11 @@ var _moduleGenWithSpec = require("./generation/effSchemGen/moduleGenWithSpec.cjs");

const servicesStorage = new _nodeAsync_hooks.AsyncLocalStorage();
const getServices = () => {
const services = servicesStorage.getStore();
if (typeof services === 'undefined') {
throw new Error(`Missing services`);
}
return services;
};
// Parse an OpenAPI v3.1 document (in JSON format).

@@ -87,6 +97,7 @@ // @throws Error[code=ENOENT] When the document cannot be read.

// Generate one module per schema (does not support a spec file)
const generateSchemas = async (request, {
logger
}) => {
const generateSchemas = async request => {
const {
logger
} = getServices();
const {
document,

@@ -140,6 +151,7 @@ outputDirectory

exports.generateSchemas = generateSchemas;
const generateSchemasWithSpec = async (request, {
logger
}) => {
const generateSchemasWithSpec = async request => {
const {
logger
} = getServices();
const {
document,

@@ -309,5 +321,7 @@ spec,

specPath
}, {
logger
}) => {
const {
logger
} = getServices();
// Note: the following could throw a `TypeError` exception if the paths are (syntactically) invalid, e.g. `//`

@@ -376,5 +390,6 @@ const documentUrl = new URL(documentPath, cwd);

exports.parseRequest = parseRequest;
const printUsage = ({
logger
}) => {
const printUsage = () => {
const {
logger
} = getServices();
logger.info((0, _tsDedent.dedent)`

@@ -388,11 +403,10 @@ Usage: openapi-to-effect [-h | --help] [--silent] <command> [<args>]

};
const runGenerator = async (args, {
logger
}) => {
const runGenerator = async args => {
const {
logger
} = getServices();
const documentPath = args.positionals[0];
const outputPath = args.positionals[1];
if (!documentPath || !outputPath) {
printUsage({
logger
});
printUsage();
return;

@@ -405,13 +419,7 @@ }

};
const request = await parseRequest(requestInput, {
logger
});
const request = await parseRequest(requestInput);
if (request.spec === null) {
await generateSchemas(request, {
logger
});
await generateSchemas(request);
} else {
await generateSchemasWithSpec(request, {
logger
});
await generateSchemasWithSpec(request);
}

@@ -425,11 +433,10 @@ logger.info('Done!');

exports.runGenerator = runGenerator;
const runAnalyzeDependencyTree = async (args, {
logger
}) => {
const runAnalyzeDependencyTree = async args => {
const {
logger
} = getServices();
const documentPath = args.positionals[0];
const rootSchemaRef = args.positionals[1];
if (!documentPath || !rootSchemaRef) {
printUsage({
logger
});
printUsage();
return;

@@ -447,9 +454,2 @@ }

const run = async argsRaw => {
// Services
const logger = {
info: console.info,
error: console.error,
log: console.log
};
// Ref: https://exploringjs.com/nodejs-shell-scripting/ch_node-util-parseargs.html

@@ -473,34 +473,34 @@ const args = (0, _nodeUtil.parseArgs)({

});
if (args.values.silent) {
logger.info = () => {};
}
const command = args.positionals[0] ?? null;
if (command === null || args.values.help) {
printUsage({
logger
});
return;
}
const argsForCommand = {
...args,
positionals: args.positionals.slice(1)
// Services
const logger = {
info: args.values.silent ? () => {} : console.info,
error: console.error,
log: console.log
};
switch (command) {
case 'gen':
await runGenerator(argsForCommand, {
logger
});
break;
case 'analyze:dependency-tree':
await runAnalyzeDependencyTree(argsForCommand, {
logger
});
break;
default:
logger.error(`Unknown command '${command}'\n`);
printUsage({
logger
});
break;
}
await servicesStorage.run({
logger
}, async () => {
const command = args.positionals[0] ?? null;
if (command === null || args.values.help) {
printUsage();
return;
}
const argsForCommand = {
...args,
positionals: args.positionals.slice(1)
};
switch (command) {
case 'gen':
await runGenerator(argsForCommand);
break;
case 'analyze:dependency-tree':
await runAnalyzeDependencyTree(argsForCommand);
break;
default:
logger.error(`Unknown command '${command}'\n`);
printUsage();
break;
}
});
};

@@ -507,0 +507,0 @@ exports.run = run;

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

{"version":3,"file":"openapiToEffect.cjs","names":["_tsDedent","require","_nodeUtil","path","_interopRequireWildcard","_nodeUrl","fs","_moduleGen","_moduleGenWithSpec","_formatting","_immutableJsonPatch","_GraphAnalyzer","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","__transformExtension","filepath","extMapping","startsWith","idx","lastIndexOf","includes","newExt","origExt","entries","sort","b","length","endsWith","slice","ensureTrailingSlash","replace","cwd","pathToFileURL","process","parseDocument","documentUrl","content","readFile","contentJson","JSON","parse","error","SyntaxError","Error","cause","isDocument","openapi","trim","documentVersion","generateSchemas","request","logger","document","outputDirectory","info","title","version","schemas","components","schemaId","schema","outputUrl","URL","relative","fileURLToPath","generatedCode","generateModule","generatedCodeFormatted","formatGeneratedCode","writeFile","exports","generateSchemasWithSpec","spec","schemasSorted","topologicalSort","specParsed","generationMethod","method","modules","fromEntries","keys","map","definitions","action","ref","circularDependency","schemaIdFromRef","def","find","lazy","bundle","modulePath","_moduleSpec","runtime","generateModuleWithSpec","isSchemaBefore","schema1","schema2","schema1Index","findIndex","schema2Index","mkdir","dirname","recursive","bundleName","bundleFormatted","dedent","Date","toISOString","generateBarrelFile","barrelContent","moduleSpec","barrelUrl","log","parseRequest","documentPath","outputPath","specPath","specUrl","stat","outputUrlStats","isDirectory","specifier","Promise","then","s","href","patch","Array","isArray","documentPatched","immutableJSONPatch","printUsage","runGenerator","args","positionals","requestInput","values","runAnalyzeDependencyTree","rootSchemaRef","tree","dependencyTree","run","argsRaw","console","parseArgs","allowPositionals","options","help","type","short","silent","command","argsForCommand","_argExec","argScript","argv","realpath","import","meta","url","exit"],"sources":["../../src/openapiToEffect.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 { parseArgs } from 'node:util';\nimport * as path from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport { type Stats } from 'node:fs';\nimport * as fs from 'node:fs/promises';\n\nimport { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { type OpenApiSchemaId, type OpenApiSchema } from './util/openapi.ts';\n\nimport * as GenSpec from './generation/generationSpec.ts';\nimport { generateModule } from './generation/effSchemGen/moduleGen.ts';\nimport { generateModuleWithSpec } from './generation/effSchemGen/moduleGenWithSpec.ts';\nimport { formatGeneratedCode } from './generation/formatting.ts';\nimport { type JSONPatchDocument, immutableJSONPatch } from 'immutable-json-patch';\nimport { schemaIdFromRef, topologicalSort, dependencyTree } from './analysis/GraphAnalyzer.ts';\n\n\n// To use a directory path as a base URL in `new URL(<path>, <base>)` we need to ensure it has a trailing slash,\n// otherwise the path will be relative to the parent directory.\nconst ensureTrailingSlash = (path: string) => path.replace(/[/]+$/, '') + '/';\n\nconst cwd: URL = pathToFileURL(ensureTrailingSlash(process.cwd())); // Trailing slash so we can use it as a base URL\n\n\ntype ConsoleService = Pick<Console, 'info' | 'error' | 'log'>;\n\n// Parse an OpenAPI v3.1 document (in JSON format).\n// @throws Error[code=ENOENT] When the document cannot be read.\n// @throws SyntaxError When the document is not a valid OpenAPI v3.1 JSON document.\nconst parseDocument = async (documentUrl: URL): Promise<OpenApi.Document> => {\n const content: string = await fs.readFile(documentUrl, 'utf8');\n \n const contentJson = ((): unknown => {\n try {\n return JSON.parse(content);\n } catch (error: unknown) {\n if (error instanceof SyntaxError) {\n throw error;\n } else {\n throw new Error(`Unable to parse JSON`, { cause: error }); // Unexpected error\n }\n }\n })();\n \n // Some quick sanity checks\n const isDocument = typeof contentJson === 'object' && contentJson !== null && 'openapi' in contentJson;\n if (!isDocument) { throw new SyntaxError('Not a valid OpenAPI document'); }\n if (typeof contentJson.openapi !== 'string' || !contentJson.openapi.trim().startsWith('3.1')) {\n const documentVersion = typeof contentJson.openapi !== 'string' ? contentJson.openapi : '(unknown version)';\n throw new SyntaxError(`Expected OpenAPI version 3.1, but got version '${documentVersion}'`);\n }\n \n // Note: we assume that this is a valid instance of `OpenApi.Document`\n // We may want to do some proper runtime validation here (but this can be expensive since the document may be large)\n return contentJson as any as OpenApi.Document; // (!) Unsafe cast\n};\n\n\nexport type GenerateRequest = {\n document: OpenApi.Document,\n spec: null | GenSpec.GenerationSpec,\n outputDirectory: URL,\n};\ntype GenerateRequestWithSpec = GenerateRequest & { spec: GenSpec.GenerationSpec };\n\n// Generate one module per schema (does not support a spec file)\nexport const generateSchemas = async (\n request: GenerateRequest,\n { logger }: { logger: ConsoleService },\n): Promise<void> => {\n const { document, outputDirectory } = request;\n \n logger.info(`Generating schemas from document: ${document.info.title} ${document.info.version}`);\n \n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const outputUrl = new URL(`${schemaId}.ts`, outputDirectory);\n \n logger.info(`Generating schema: '${path.relative(process.cwd(), fileURLToPath(outputUrl))}'`);\n \n try {\n // Generate the effect-schema module code\n const generatedCode = ((): string => {\n try {\n return generateModule(schemaId, schema);\n } catch (error: unknown) {\n logger.error(`Unable to convert to effect-schema`);\n throw error;\n }\n })();\n \n // Format the generated code\n const generatedCodeFormatted = await (async (): Promise<string> => {\n try {\n return await formatGeneratedCode(generatedCode);\n } catch (error: unknown) {\n // Note: if we made a mistake in our code generation logic (and generate invalid syntax), it will usually\n // appear as an error here\n logger.info(generatedCode);\n logger.error(`Unable to format code`);\n throw error;\n }\n })();\n \n // Write to the output file\n try {\n await fs.writeFile(outputUrl, generatedCodeFormatted, 'utf-8');\n } catch (error: unknown) {\n logger.error(`Failed to write to file: '${fileURLToPath(outputUrl)}'`);\n throw error;\n }\n } catch (error: unknown) {\n // If anything fails, just print the error and continue with the next schema\n logger.error(error);\n }\n }\n};\n\n// Generate schemas based on the given spec file\nexport const generateSchemasWithSpec = async (\n request: GenerateRequestWithSpec,\n { logger }: { logger: ConsoleService },\n): Promise<void> => {\n const { document, spec, outputDirectory } = request;\n \n logger.info(`Generating schemas from document: ${document.info.title} ${document.info.version}`);\n \n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n const schemasSorted = topologicalSort(document);\n \n const specParsed = ((): GenSpec.GenerationSpec => {\n if (spec.generationMethod.method === 'one-to-one') { // Autogenerate modules one-to-one (one file per schema)\n return {\n ...spec,\n modules: {\n // Add each schema in the OpenAPI document to the spec modules list, so as to be autogenerated\n ...Object.fromEntries(Object.keys(schemas)\n .map((schemaId: OpenApiSchemaId): [GenSpec.ModulePath, GenSpec.GenerationModuleSpec] => {\n return [`./${schemaId}.ts`, { definitions: [{ action: 'generate-schema', schemaId }] }];\n }),\n ),\n // Modules already in the spec can still override the default autogenerate directives.\n ...spec.modules,\n },\n };\n } else if (spec.generationMethod.method === 'bundled') { // Bundle everything into one file\n return {\n ...spec,\n modules: {\n ...Object.fromEntries(schemasSorted\n .map(({ ref, circularDependency }): [GenSpec.ModulePath, GenSpec.GenerationModuleSpec] => {\n const schemaId = schemaIdFromRef(ref);\n const def: GenSpec.GenerationDefinitionSpec = {\n ...(spec.modules[`./${schemaId}.ts`]?.definitions?.find(def => def.schemaId === schemaId) ?? {}),\n action: 'generate-schema',\n schemaId,\n lazy: circularDependency,\n };\n return [`./${schemaId}.ts`, { definitions: [def] }];\n }),\n ),\n },\n };\n } else {\n return spec;\n }\n })();\n \n let bundle = '';\n for (const [modulePath, _moduleSpec] of Object.entries({ ...specParsed.runtime, ...specParsed.modules })) {\n logger.info(`Generating module: ${modulePath}`);\n \n try {\n // Generate the effect-schema module code\n const generatedCode = ((): string => {\n try {\n return generateModuleWithSpec(schemas, specParsed, modulePath, {\n isSchemaBefore(schema1: OpenApiSchemaId, schema2: OpenApiSchemaId): boolean {\n if (spec.generationMethod.method !== 'bundled') { return true; }\n \n const schema1Index = schemasSorted.findIndex(({ ref }) => schemaIdFromRef(ref) === schema1);\n const schema2Index = schemasSorted.findIndex(({ ref }) => schemaIdFromRef(ref) === schema2);\n \n if (schema1Index === -1 || schema2Index === -1) {\n return true;\n }\n \n return schema1Index < schema2Index;\n },\n });\n } catch (error: unknown) {\n logger.error(`Unable to convert to effect-schema`);\n throw error;\n }\n })();\n \n // Format the generated code\n const generatedCodeFormatted = await (async (): Promise<string> => {\n try {\n return await formatGeneratedCode(generatedCode);\n } catch (error: unknown) {\n // Note: if we made a mistake in our code generation logic (and generate invalid syntax), it will usually\n // appear as an error here\n logger.info(generatedCode);\n logger.error(`Unable to format code`);\n throw error;\n }\n })();\n \n // Write to an output file\n const outputUrl = new URL(modulePath, outputDirectory);\n try {\n if (specParsed.generationMethod.method === 'bundled') {\n bundle += '\\n\\n' + generatedCodeFormatted;\n } else {\n await fs.mkdir(path.dirname(fileURLToPath(outputUrl)), { recursive: true });\n await fs.writeFile(outputUrl, generatedCodeFormatted, 'utf-8');\n }\n } catch (error: unknown) {\n logger.error(`Failed to write to file: ${outputUrl}`);\n throw error;\n }\n } catch (error: unknown) {\n if (specParsed.generationMethod.method === 'bundled') {\n throw error; // Stop bundling on first error\n } else {\n // If anything fails, just print the error and continue with the next schema\n logger.error('Error:', error);\n }\n }\n }\n \n if (specParsed.generationMethod.method === 'bundled') {\n const outputUrl = new URL(`${specParsed.generationMethod.bundleName}.ts`, outputDirectory);\n logger.info(`Writing to bundle: ${fileURLToPath(outputUrl)}`);\n \n try {\n const bundleFormatted = await formatGeneratedCode(\n dedent`\n /* Generated on ${new Date().toISOString()} from ${document.info.title} version ${document.info.version} */\n \n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${bundle.replace(/(^|\\n)(\\s*)import [^;]+;(?! \\/\\/ <runtime>)/g, '')}\n `,\n );\n \n await fs.mkdir(path.dirname(fileURLToPath(outputUrl)), { recursive: true });\n await fs.writeFile(outputUrl, bundleFormatted, 'utf-8');\n } catch (error: unknown) {\n logger.error(`Failed to write to file: ${outputUrl}`);\n throw error;\n }\n }\n \n if (spec.generationMethod.method === 'one-to-one' && spec.generationMethod.generateBarrelFile) {\n // Generate a barrel file containing all exports\n let barrelContent = '';\n for (const [modulePath, moduleSpec] of Object.entries({ ...specParsed.runtime, ...specParsed.modules })) {\n barrelContent += `export * from '${modulePath}';\\n`;\n }\n const barrelUrl = new URL('./index.ts', outputDirectory);\n logger.log(`Generating barrel file: ./index.ts`);\n await fs.writeFile(barrelUrl, barrelContent, 'utf-8');\n }\n};\n\n\nexport type RequestInput = {\n documentPath: string,\n outputPath: string,\n specPath?: undefined | string,\n};\n\n// Parse the given input and return a valid `GenerateRequest` (or throw an error).\n// @throws TypeError[ERR_INVALID_URL] If any of the given file paths are syntactically invalid.\nexport const parseRequest = async (\n { documentPath, outputPath, specPath }: RequestInput,\n { logger }: { logger: ConsoleService },\n): Promise<GenerateRequest> => {\n // Note: the following could throw a `TypeError` exception if the paths are (syntactically) invalid, e.g. `//`\n const documentUrl = new URL(documentPath, cwd);\n const outputUrl = new URL(ensureTrailingSlash(outputPath), cwd); // Trailing slash for use as base URL\n const specUrl: null | URL = typeof specPath === 'undefined' ? null : new URL(specPath, cwd);\n \n // Check if the OpenAPI document exists\n try {\n await fs.stat(documentUrl);\n } catch (error: unknown) {\n throw new Error(`Provided OpenAPI file does not exist: '${documentPath}'`, { cause: error });\n }\n \n // Check if the output path exists and is a directory\n let outputUrlStats: Stats;\n try {\n outputUrlStats = await fs.stat(outputUrl);\n } catch (error: unknown) {\n throw new Error(`Provided output path does not exist: '${outputPath}'`, { cause: error });\n }\n if (!outputUrlStats.isDirectory()) {\n throw new Error(`Provided output path '${outputPath}' is not a directory`);\n }\n \n // Check if the generation spec file exists\n if (specUrl !== null) {\n try {\n await fs.stat(specUrl);\n } catch (error: unknown) {\n throw new Error(`Provided generation spec file does not exist: '${specPath}'`, { cause: error });\n }\n }\n \n // Load the generation spec\n const spec: null | GenSpec.GenerationSpec = specUrl === null ? null : (await import(specUrl.href)).default;\n \n // Load the OpenAPI document\n const document = await (async (): Promise<OpenApi.Document> => {\n try {\n return await parseDocument(documentUrl);\n } catch (error: unknown) {\n logger.error(`Unable to parse OpenAPI document: '${documentPath}'`);\n throw error;\n }\n })();\n \n // Apply JSON Patch (if any)\n const patch: null | JSONPatchDocument = spec !== null && Array.isArray(spec?.patch) ? spec.patch : null;\n const documentPatched = patch === null\n ? document\n : immutableJSONPatch<OpenApi.Document>(document, patch);\n \n return { document: documentPatched, outputDirectory: outputUrl, spec };\n};\n\n\nconst printUsage = ({ logger }: { logger: ConsoleService }) => {\n logger.info(dedent`\n Usage: openapi-to-effect [-h | --help] [--silent] <command> [<args>]\n \n Commands:\n gen [--spec=<path>] <openapi-document-path> <output-path>\n analyze:dependency-tree <openapi-document-path> <root-schema-ref>\n `);\n};\n\ntype ScriptArgs = {\n values: {\n help: boolean | undefined,\n spec: string | undefined,\n },\n positionals: Array<string>,\n};\n\nexport const runGenerator = async (\n args: ScriptArgs,\n { logger }: { logger: ConsoleService },\n): Promise<void> => {\n const documentPath: undefined | string = args.positionals[0];\n const outputPath: undefined | string = args.positionals[1];\n if (!documentPath || !outputPath) {\n printUsage({ logger });\n return;\n }\n \n const requestInput: RequestInput = {\n documentPath,\n outputPath,\n specPath: args.values.spec,\n };\n const request: GenerateRequest = await parseRequest(requestInput, { logger });\n \n if (request.spec === null) {\n await generateSchemas(request, { logger });\n } else {\n await generateSchemasWithSpec(request as GenerateRequestWithSpec, { logger });\n }\n \n logger.info('Done!');\n};\n\n// Example:\n// `npm --silent run node src/openapiToEffect.ts analyze:dependency-tree tests/fixtures/fixture1_api.json\\\n// '#/components/schemas/BatchRequest'`\nexport const runAnalyzeDependencyTree = async (\n args: ScriptArgs,\n { logger }: { logger: ConsoleService },\n): Promise<void> => {\n const documentPath: undefined | string = args.positionals[0];\n const rootSchemaRef: undefined | string = args.positionals[1];\n if (!documentPath || !rootSchemaRef) {\n printUsage({ logger });\n return;\n }\n \n const documentUrl = new URL(documentPath, cwd);\n const document = await parseDocument(documentUrl);\n const tree = await dependencyTree(document, rootSchemaRef);\n \n logger.log(tree);\n \n logger.info('Done!');\n};\n\n// Run the script with the given CLI arguments\nexport const run = async (argsRaw: Array<string>): Promise<void> => {\n // Services\n const logger: ConsoleService = {\n info: console.info,\n error: console.error,\n log: console.log,\n };\n \n // Ref: https://exploringjs.com/nodejs-shell-scripting/ch_node-util-parseargs.html\n const args = parseArgs({\n args: argsRaw,\n allowPositionals: true,\n options: {\n help: { type: 'boolean', short: 'h' },\n silent: { type: 'boolean' },\n spec: { type: 'string' }, // Path to a spec file (optional)\n //runtime: { type: 'string' } // TODO: allow specifying a path to a \"runtime\" dir that we include in the output?\n },\n });\n \n if (args.values.silent) {\n logger.info = () => {};\n }\n \n const command: null | string = args.positionals[0] ?? null;\n if (command === null || args.values.help) {\n printUsage({ logger });\n return;\n }\n \n const argsForCommand = { ...args, positionals: args.positionals.slice(1) };\n switch (command) {\n case 'gen':\n await runGenerator(argsForCommand, { logger });\n break;\n case 'analyze:dependency-tree':\n await runAnalyzeDependencyTree(argsForCommand, { logger });\n break;\n default:\n logger.error(`Unknown command '${command}'\\n`);\n printUsage({ logger });\n break;\n }\n};\n\nconst [_argExec, argScript, ...args] = process.argv; // First two arguments should be the executable + script\n\n// Detect if this module is being run directly from the command line\nif (argScript && await fs.realpath(argScript) === fileURLToPath(import.meta.url)) {\n try {\n await run(args);\n process.exit(0);\n } catch (error: unknown) {\n console.error(error);\n process.exit(1);\n }\n}\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"openapiToEffect.cjs","names":["_tsDedent","require","_nodeUtil","path","_interopRequireWildcard","_nodeUrl","fs","_nodeAsync_hooks","_moduleGen","_moduleGenWithSpec","_formatting","_immutableJsonPatch","_GraphAnalyzer","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","__transformExtension","filepath","extMapping","startsWith","idx","lastIndexOf","includes","newExt","origExt","entries","sort","b","length","endsWith","slice","ensureTrailingSlash","replace","cwd","pathToFileURL","process","servicesStorage","AsyncLocalStorage","getServices","services","getStore","Error","parseDocument","documentUrl","content","readFile","contentJson","JSON","parse","error","SyntaxError","cause","isDocument","openapi","trim","documentVersion","generateSchemas","request","logger","document","outputDirectory","info","title","version","schemas","components","schemaId","schema","outputUrl","URL","relative","fileURLToPath","generatedCode","generateModule","generatedCodeFormatted","formatGeneratedCode","writeFile","exports","generateSchemasWithSpec","spec","schemasSorted","topologicalSort","specParsed","generationMethod","method","modules","fromEntries","keys","map","definitions","action","ref","circularDependency","schemaIdFromRef","def","find","lazy","bundle","modulePath","_moduleSpec","runtime","generateModuleWithSpec","isSchemaBefore","schema1","schema2","schema1Index","findIndex","schema2Index","mkdir","dirname","recursive","bundleName","bundleFormatted","dedent","Date","toISOString","generateBarrelFile","barrelContent","moduleSpec","barrelUrl","log","parseRequest","documentPath","outputPath","specPath","specUrl","stat","outputUrlStats","isDirectory","specifier","Promise","then","s","href","patch","Array","isArray","documentPatched","immutableJSONPatch","printUsage","runGenerator","args","positionals","requestInput","values","runAnalyzeDependencyTree","rootSchemaRef","tree","dependencyTree","run","argsRaw","parseArgs","allowPositionals","options","help","type","short","silent","console","command","argsForCommand","_argExec","argScript","argv","realpath","import","meta","url","exit"],"sources":["../../src/openapiToEffect.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 { parseArgs } from 'node:util';\nimport * as path from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport { type Stats } from 'node:fs';\nimport * as fs from 'node:fs/promises';\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nimport { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { type OpenApiSchemaId, type OpenApiSchema } from './util/openapi.ts';\n\nimport * as GenSpec from './generation/generationSpec.ts';\nimport { generateModule } from './generation/effSchemGen/moduleGen.ts';\nimport { generateModuleWithSpec } from './generation/effSchemGen/moduleGenWithSpec.ts';\nimport { formatGeneratedCode } from './generation/formatting.ts';\nimport { type JSONPatchDocument, immutableJSONPatch } from 'immutable-json-patch';\nimport { schemaIdFromRef, topologicalSort, dependencyTree } from './analysis/GraphAnalyzer.ts';\n\n\n// To use a directory path as a base URL in `new URL(<path>, <base>)` we need to ensure it has a trailing slash,\n// otherwise the path will be relative to the parent directory.\nconst ensureTrailingSlash = (path: string) => path.replace(/[/]+$/, '') + '/';\n\nconst cwd: URL = pathToFileURL(ensureTrailingSlash(process.cwd())); // Trailing slash so we can use it as a base URL\n\n\ntype Logger = Pick<Console, 'info' | 'error' | 'log'>;\ntype Services = { logger: Logger };\nconst servicesStorage = new AsyncLocalStorage<Services>();\nconst getServices = () => {\n const services = servicesStorage.getStore();\n if (typeof services === 'undefined') { throw new Error(`Missing services`); }\n return services;\n};\n\n// Parse an OpenAPI v3.1 document (in JSON format).\n// @throws Error[code=ENOENT] When the document cannot be read.\n// @throws SyntaxError When the document is not a valid OpenAPI v3.1 JSON document.\nconst parseDocument = async (documentUrl: URL): Promise<OpenApi.Document> => {\n const content: string = await fs.readFile(documentUrl, 'utf8');\n \n const contentJson = ((): unknown => {\n try {\n return JSON.parse(content);\n } catch (error: unknown) {\n if (error instanceof SyntaxError) {\n throw error;\n } else {\n throw new Error(`Unable to parse JSON`, { cause: error }); // Unexpected error\n }\n }\n })();\n \n // Some quick sanity checks\n const isDocument = typeof contentJson === 'object' && contentJson !== null && 'openapi' in contentJson;\n if (!isDocument) { throw new SyntaxError('Not a valid OpenAPI document'); }\n if (typeof contentJson.openapi !== 'string' || !contentJson.openapi.trim().startsWith('3.1')) {\n const documentVersion = typeof contentJson.openapi !== 'string' ? contentJson.openapi : '(unknown version)';\n throw new SyntaxError(`Expected OpenAPI version 3.1, but got version '${documentVersion}'`);\n }\n \n // Note: we assume that this is a valid instance of `OpenApi.Document`\n // We may want to do some proper runtime validation here (but this can be expensive since the document may be large)\n return contentJson as any as OpenApi.Document; // (!) Unsafe cast\n};\n\n\nexport type GenerateRequest = {\n document: OpenApi.Document,\n spec: null | GenSpec.GenerationSpec,\n outputDirectory: URL,\n};\ntype GenerateRequestWithSpec = GenerateRequest & { spec: GenSpec.GenerationSpec };\n\n// Generate one module per schema (does not support a spec file)\nexport const generateSchemas = async (request: GenerateRequest): Promise<void> => {\n const { logger } = getServices();\n const { document, outputDirectory } = request;\n \n logger.info(`Generating schemas from document: ${document.info.title} ${document.info.version}`);\n \n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const outputUrl = new URL(`${schemaId}.ts`, outputDirectory);\n \n logger.info(`Generating schema: '${path.relative(process.cwd(), fileURLToPath(outputUrl))}'`);\n \n try {\n // Generate the effect-schema module code\n const generatedCode = ((): string => {\n try {\n return generateModule(schemaId, schema);\n } catch (error: unknown) {\n logger.error(`Unable to convert to effect-schema`);\n throw error;\n }\n })();\n \n // Format the generated code\n const generatedCodeFormatted = await (async (): Promise<string> => {\n try {\n return await formatGeneratedCode(generatedCode);\n } catch (error: unknown) {\n // Note: if we made a mistake in our code generation logic (and generate invalid syntax), it will usually\n // appear as an error here\n logger.info(generatedCode);\n logger.error(`Unable to format code`);\n throw error;\n }\n })();\n \n // Write to the output file\n try {\n await fs.writeFile(outputUrl, generatedCodeFormatted, 'utf-8');\n } catch (error: unknown) {\n logger.error(`Failed to write to file: '${fileURLToPath(outputUrl)}'`);\n throw error;\n }\n } catch (error: unknown) {\n // If anything fails, just print the error and continue with the next schema\n logger.error(error);\n }\n }\n};\n\n// Generate schemas based on the given spec file\nexport const generateSchemasWithSpec = async (request: GenerateRequestWithSpec): Promise<void> => {\n const { logger } = getServices();\n const { document, spec, outputDirectory } = request;\n \n logger.info(`Generating schemas from document: ${document.info.title} ${document.info.version}`);\n \n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n const schemasSorted = topologicalSort(document);\n \n const specParsed = ((): GenSpec.GenerationSpec => {\n if (spec.generationMethod.method === 'one-to-one') { // Autogenerate modules one-to-one (one file per schema)\n return {\n ...spec,\n modules: {\n // Add each schema in the OpenAPI document to the spec modules list, so as to be autogenerated\n ...Object.fromEntries(Object.keys(schemas)\n .map((schemaId: OpenApiSchemaId): [GenSpec.ModulePath, GenSpec.GenerationModuleSpec] => {\n return [`./${schemaId}.ts`, { definitions: [{ action: 'generate-schema', schemaId }] }];\n }),\n ),\n // Modules already in the spec can still override the default autogenerate directives.\n ...spec.modules,\n },\n };\n } else if (spec.generationMethod.method === 'bundled') { // Bundle everything into one file\n return {\n ...spec,\n modules: {\n ...Object.fromEntries(schemasSorted\n .map(({ ref, circularDependency }): [GenSpec.ModulePath, GenSpec.GenerationModuleSpec] => {\n const schemaId = schemaIdFromRef(ref);\n const def: GenSpec.GenerationDefinitionSpec = {\n ...(spec.modules[`./${schemaId}.ts`]?.definitions?.find(def => def.schemaId === schemaId) ?? {}),\n action: 'generate-schema',\n schemaId,\n lazy: circularDependency,\n };\n return [`./${schemaId}.ts`, { definitions: [def] }];\n }),\n ),\n },\n };\n } else {\n return spec;\n }\n })();\n \n let bundle = '';\n for (const [modulePath, _moduleSpec] of Object.entries({ ...specParsed.runtime, ...specParsed.modules })) {\n logger.info(`Generating module: ${modulePath}`);\n \n try {\n // Generate the effect-schema module code\n const generatedCode = ((): string => {\n try {\n return generateModuleWithSpec(schemas, specParsed, modulePath, {\n isSchemaBefore(schema1: OpenApiSchemaId, schema2: OpenApiSchemaId): boolean {\n if (spec.generationMethod.method !== 'bundled') { return true; }\n \n const schema1Index = schemasSorted.findIndex(({ ref }) => schemaIdFromRef(ref) === schema1);\n const schema2Index = schemasSorted.findIndex(({ ref }) => schemaIdFromRef(ref) === schema2);\n \n if (schema1Index === -1 || schema2Index === -1) {\n return true;\n }\n \n return schema1Index < schema2Index;\n },\n });\n } catch (error: unknown) {\n logger.error(`Unable to convert to effect-schema`);\n throw error;\n }\n })();\n \n // Format the generated code\n const generatedCodeFormatted = await (async (): Promise<string> => {\n try {\n return await formatGeneratedCode(generatedCode);\n } catch (error: unknown) {\n // Note: if we made a mistake in our code generation logic (and generate invalid syntax), it will usually\n // appear as an error here\n logger.info(generatedCode);\n logger.error(`Unable to format code`);\n throw error;\n }\n })();\n \n // Write to an output file\n const outputUrl = new URL(modulePath, outputDirectory);\n try {\n if (specParsed.generationMethod.method === 'bundled') {\n bundle += '\\n\\n' + generatedCodeFormatted;\n } else {\n await fs.mkdir(path.dirname(fileURLToPath(outputUrl)), { recursive: true });\n await fs.writeFile(outputUrl, generatedCodeFormatted, 'utf-8');\n }\n } catch (error: unknown) {\n logger.error(`Failed to write to file: ${outputUrl}`);\n throw error;\n }\n } catch (error: unknown) {\n if (specParsed.generationMethod.method === 'bundled') {\n throw error; // Stop bundling on first error\n } else {\n // If anything fails, just print the error and continue with the next schema\n logger.error('Error:', error);\n }\n }\n }\n \n if (specParsed.generationMethod.method === 'bundled') {\n const outputUrl = new URL(`${specParsed.generationMethod.bundleName}.ts`, outputDirectory);\n logger.info(`Writing to bundle: ${fileURLToPath(outputUrl)}`);\n \n try {\n const bundleFormatted = await formatGeneratedCode(\n dedent`\n /* Generated on ${new Date().toISOString()} from ${document.info.title} version ${document.info.version} */\n \n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${bundle.replace(/(^|\\n)(\\s*)import [^;]+;(?! \\/\\/ <runtime>)/g, '')}\n `,\n );\n \n await fs.mkdir(path.dirname(fileURLToPath(outputUrl)), { recursive: true });\n await fs.writeFile(outputUrl, bundleFormatted, 'utf-8');\n } catch (error: unknown) {\n logger.error(`Failed to write to file: ${outputUrl}`);\n throw error;\n }\n }\n \n if (spec.generationMethod.method === 'one-to-one' && spec.generationMethod.generateBarrelFile) {\n // Generate a barrel file containing all exports\n let barrelContent = '';\n for (const [modulePath, moduleSpec] of Object.entries({ ...specParsed.runtime, ...specParsed.modules })) {\n barrelContent += `export * from '${modulePath}';\\n`;\n }\n const barrelUrl = new URL('./index.ts', outputDirectory);\n logger.log(`Generating barrel file: ./index.ts`);\n await fs.writeFile(barrelUrl, barrelContent, 'utf-8');\n }\n};\n\n\nexport type RequestInput = {\n documentPath: string,\n outputPath: string,\n specPath?: undefined | string,\n};\n\n// Parse the given input and return a valid `GenerateRequest` (or throw an error).\n// @throws TypeError[ERR_INVALID_URL] If any of the given file paths are syntactically invalid.\nexport const parseRequest = async ({ documentPath, outputPath, specPath }: RequestInput): Promise<GenerateRequest> => {\n const { logger } = getServices();\n \n // Note: the following could throw a `TypeError` exception if the paths are (syntactically) invalid, e.g. `//`\n const documentUrl = new URL(documentPath, cwd);\n const outputUrl = new URL(ensureTrailingSlash(outputPath), cwd); // Trailing slash for use as base URL\n const specUrl: null | URL = typeof specPath === 'undefined' ? null : new URL(specPath, cwd);\n \n // Check if the OpenAPI document exists\n try {\n await fs.stat(documentUrl);\n } catch (error: unknown) {\n throw new Error(`Provided OpenAPI file does not exist: '${documentPath}'`, { cause: error });\n }\n \n // Check if the output path exists and is a directory\n let outputUrlStats: Stats;\n try {\n outputUrlStats = await fs.stat(outputUrl);\n } catch (error: unknown) {\n throw new Error(`Provided output path does not exist: '${outputPath}'`, { cause: error });\n }\n if (!outputUrlStats.isDirectory()) {\n throw new Error(`Provided output path '${outputPath}' is not a directory`);\n }\n \n // Check if the generation spec file exists\n if (specUrl !== null) {\n try {\n await fs.stat(specUrl);\n } catch (error: unknown) {\n throw new Error(`Provided generation spec file does not exist: '${specPath}'`, { cause: error });\n }\n }\n \n // Load the generation spec\n const spec: null | GenSpec.GenerationSpec = specUrl === null ? null : (await import(specUrl.href)).default;\n \n // Load the OpenAPI document\n const document = await (async (): Promise<OpenApi.Document> => {\n try {\n return await parseDocument(documentUrl);\n } catch (error: unknown) {\n logger.error(`Unable to parse OpenAPI document: '${documentPath}'`);\n throw error;\n }\n })();\n \n // Apply JSON Patch (if any)\n const patch: null | JSONPatchDocument = spec !== null && Array.isArray(spec?.patch) ? spec.patch : null;\n const documentPatched = patch === null\n ? document\n : immutableJSONPatch<OpenApi.Document>(document, patch);\n \n return { document: documentPatched, outputDirectory: outputUrl, spec };\n};\n\n\nconst printUsage = () => {\n const { logger } = getServices();\n \n logger.info(dedent`\n Usage: openapi-to-effect [-h | --help] [--silent] <command> [<args>]\n \n Commands:\n gen [--spec=<path>] <openapi-document-path> <output-path>\n analyze:dependency-tree <openapi-document-path> <root-schema-ref>\n `);\n};\n\ntype ScriptArgs = {\n values: {\n help: boolean | undefined,\n spec: string | undefined,\n },\n positionals: Array<string>,\n};\n\nexport const runGenerator = async (args: ScriptArgs): Promise<void> => {\n const { logger } = getServices();\n \n const documentPath: undefined | string = args.positionals[0];\n const outputPath: undefined | string = args.positionals[1];\n if (!documentPath || !outputPath) {\n printUsage();\n return;\n }\n \n const requestInput: RequestInput = {\n documentPath,\n outputPath,\n specPath: args.values.spec,\n };\n const request: GenerateRequest = await parseRequest(requestInput);\n \n if (request.spec === null) {\n await generateSchemas(request);\n } else {\n await generateSchemasWithSpec(request as GenerateRequestWithSpec);\n }\n \n logger.info('Done!');\n};\n\n// Example:\n// `npm --silent run node src/openapiToEffect.ts analyze:dependency-tree tests/fixtures/fixture1_api.json\\\n// '#/components/schemas/BatchRequest'`\nexport const runAnalyzeDependencyTree = async (args: ScriptArgs): Promise<void> => {\n const { logger } = getServices();\n \n const documentPath: undefined | string = args.positionals[0];\n const rootSchemaRef: undefined | string = args.positionals[1];\n if (!documentPath || !rootSchemaRef) {\n printUsage();\n return;\n }\n \n const documentUrl = new URL(documentPath, cwd);\n const document = await parseDocument(documentUrl);\n const tree = await dependencyTree(document, rootSchemaRef);\n \n logger.log(tree);\n \n logger.info('Done!');\n};\n\n// Run the script with the given CLI arguments\nexport const run = async (argsRaw: Array<string>): Promise<void> => {\n // Ref: https://exploringjs.com/nodejs-shell-scripting/ch_node-util-parseargs.html\n const args = parseArgs({\n args: argsRaw,\n allowPositionals: true,\n options: {\n help: { type: 'boolean', short: 'h' },\n silent: { type: 'boolean' },\n spec: { type: 'string' }, // Path to a spec file (optional)\n //runtime: { type: 'string' } // TODO: allow specifying a path to a \"runtime\" dir that we include in the output?\n },\n });\n \n // Services\n const logger: Logger = {\n info: args.values.silent ? () => {} : console.info,\n error: console.error,\n log: console.log,\n };\n \n await servicesStorage.run({ logger }, async () => {\n const command: null | string = args.positionals[0] ?? null;\n if (command === null || args.values.help) {\n printUsage();\n return;\n }\n \n const argsForCommand = { ...args, positionals: args.positionals.slice(1) };\n switch (command) {\n case 'gen':\n await runGenerator(argsForCommand);\n break;\n case 'analyze:dependency-tree':\n await runAnalyzeDependencyTree(argsForCommand);\n break;\n default:\n logger.error(`Unknown command '${command}'\\n`);\n printUsage();\n break;\n }\n });\n};\n\nconst [_argExec, argScript, ...args] = process.argv; // First two arguments should be the executable + script\n\n// Detect if this module is being run directly from the command line\nif (argScript && await fs.realpath(argScript) === fileURLToPath(import.meta.url)) {\n try {\n await run(args);\n process.exit(0);\n } catch (error: unknown) {\n console.error(error);\n process.exit(1);\n }\n}\n"],"mappings":";;;;;;AAOA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,IAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAEA,IAAAK,EAAA,GAAAF,uBAAA,CAAAH,OAAA;AACA,IAAAM,gBAAA,GAAAN,OAAA;AAMA,IAAAO,UAAA,GAAAP,OAAA;AACA,IAAAQ,kBAAA,GAAAR,OAAA;AACA,IAAAS,WAAA,GAAAT,OAAA;AACA,IAAAU,mBAAA,GAAAV,OAAA;AACA,IAAAW,cAAA,GAAAX,OAAA;AAA+F,SAAAY,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAV,wBAAAU,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAvB9F,SAASW,oBAAoBA,CAACC,QAAQ,EAAEC,UAAU,EAAE;EACnD,IAAG,CAACD,QAAQ,CAACE,UAAU,CAAC,IAAI,CAAC,IAAI,CAACF,QAAQ,CAACE,UAAU,CAAC,KAAK,CAAC,EAAE;IAC5D;IACA,OAAOF,QAAQ;EACjB;EAEA,MAAMG,GAAG,GAAGH,QAAQ,CAACI,WAAW,CAAC,GAAG,CAAC;EACrC,IAAGD,GAAG,KAAK,CAAC,CAAC,IAAIH,QAAQ,CAACK,QAAQ,CAAC,GAAG,EAAEF,GAAG,CAAC,EAAE;IAC5C;IACA,MAAMG,MAAM,GAAGL,UAAU,CAAC,EAAE,CAAC;IAC7B,IAAGK,MAAM,EAAE;MACT,OAAON,QAAQ,GAAGM,MAAM;IAC1B;IACA,OAAON,QAAQ;EACjB;EAEA,KAAI,IAAI,CAACO,OAAO,EAAED,MAAM,CAAC,IAAIf,MAAM,CAACiB,OAAO,CAACP,UAAU,CAAC,CAACQ,IAAI,CAC1D,CAACnB,CAAC,EAAEoB,CAAC,KAAKA,CAAC,CAAC,CAAC,CAAC,CAACC,MAAM,GAAGrB,CAAC,CAAC,CAAC,CAAC,CAACqB,MAC/B,CAAC,EAAE;IACD,IAAGX,QAAQ,CAACY,QAAQ,CAACL,OAAO,CAAC,EAAE;MAC7B,OAAOP,QAAQ,CAACa,KAAK,CAAC,CAAC,EAAE,CAACN,OAAO,CAACI,MAAM,CAAC,GAAGL,MAAM;IACpD;EACF;EACA,OAAON,QAAQ;AACjB,CAAC,CAxBD;AACA;AACA;AACA;AACA;AACA;;AAqBA;AACA;AACA,MAAMc,mBAAmB,GAAI7C,IAAY,IAAKA,IAAI,CAAC8C,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG;AAE7E,MAAMC,GAAQ,GAAG,IAAAC,sBAAa,EAACH,mBAAmB,CAACI,OAAO,CAACF,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAKpE,MAAMG,eAAe,GAAG,IAAIC,kCAAiB,CAAW,CAAC;AACzD,MAAMC,WAAW,GAAGA,CAAA,KAAM;EACxB,MAAMC,QAAQ,GAAGH,eAAe,CAACI,QAAQ,CAAC,CAAC;EAC3C,IAAI,OAAOD,QAAQ,KAAK,WAAW,EAAE;IAAE,MAAM,IAAIE,KAAK,CAAC,kBAAkB,CAAC;EAAE;EAC5E,OAAOF,QAAQ;AACjB,CAAC;;AAED;AACA;AACA;AACA,MAAMG,aAAa,GAAG,MAAOC,WAAgB,IAAgC;EAC3E,MAAMC,OAAe,GAAG,MAAMvD,EAAE,CAACwD,QAAQ,CAACF,WAAW,EAAE,MAAM,CAAC;EAE9D,MAAMG,WAAW,GAAG,CAAC,MAAe;IAClC,IAAI;MACF,OAAOC,IAAI,CAACC,KAAK,CAACJ,OAAO,CAAC;IAC5B,CAAC,CAAC,OAAOK,KAAc,EAAE;MACvB,IAAIA,KAAK,YAAYC,WAAW,EAAE;QAChC,MAAMD,KAAK;MACb,CAAC,MAAM;QACL,MAAM,IAAIR,KAAK,CAAC,sBAAsB,EAAE;UAAEU,KAAK,EAAEF;QAAM,CAAC,CAAC,CAAC,CAAC;MAC7D;IACF;EACF,CAAC,EAAE,CAAC;;EAEJ;EACA,MAAMG,UAAU,GAAG,OAAON,WAAW,KAAK,QAAQ,IAAIA,WAAW,KAAK,IAAI,IAAI,SAAS,IAAIA,WAAW;EACtG,IAAI,CAACM,UAAU,EAAE;IAAE,MAAM,IAAIF,WAAW,CAAC,8BAA8B,CAAC;EAAE;EAC1E,IAAI,OAAOJ,WAAW,CAACO,OAAO,KAAK,QAAQ,IAAI,CAACP,WAAW,CAACO,OAAO,CAACC,IAAI,CAAC,CAAC,CAACnC,UAAU,CAAC,KAAK,CAAC,EAAE;IAC5F,MAAMoC,eAAe,GAAG,OAAOT,WAAW,CAACO,OAAO,KAAK,QAAQ,GAAGP,WAAW,CAACO,OAAO,GAAG,mBAAmB;IAC3G,MAAM,IAAIH,WAAW,CAAC,kDAAkDK,eAAe,GAAG,CAAC;EAC7F;;EAEA;EACA;EACA,OAAOT,WAAW,CAA4B,CAAC;AACjD,CAAC;AAUD;AACO,MAAMU,eAAe,GAAG,MAAOC,OAAwB,IAAoB;EAChF,MAAM;IAAEC;EAAO,CAAC,GAAGpB,WAAW,CAAC,CAAC;EAChC,MAAM;IAAEqB,QAAQ;IAAEC;EAAgB,CAAC,GAAGH,OAAO;EAE7CC,MAAM,CAACG,IAAI,CAAC,qCAAqCF,QAAQ,CAACE,IAAI,CAACC,KAAK,IAAIH,QAAQ,CAACE,IAAI,CAACE,OAAO,EAAE,CAAC;EAEhG,MAAMC,OAA+C,GAAGL,QAAQ,CAACM,UAAU,EAAED,OAAO,IAAI,CAAC,CAAC;EAE1F,KAAK,MAAM,CAACE,QAAQ,EAAEC,MAAM,CAAC,IAAI3D,MAAM,CAACiB,OAAO,CAACuC,OAAO,CAAC,EAAE;IACxD,MAAMI,SAAS,GAAG,IAAIC,GAAG,CAAC,GAAGH,QAAQ,KAAK,EAAEN,eAAe,CAAC;IAE5DF,MAAM,CAACG,IAAI,CAAC,uBAAuB3E,IAAI,CAACoF,QAAQ,CAACnC,OAAO,CAACF,GAAG,CAAC,CAAC,EAAE,IAAAsC,sBAAa,EAACH,SAAS,CAAC,CAAC,GAAG,CAAC;IAE7F,IAAI;MACF;MACA,MAAMI,aAAa,GAAG,CAAC,MAAc;QACnC,IAAI;UACF,OAAO,IAAAC,yBAAc,EAACP,QAAQ,EAAEC,MAAM,CAAC;QACzC,CAAC,CAAC,OAAOlB,KAAc,EAAE;UACvBS,MAAM,CAACT,KAAK,CAAC,oCAAoC,CAAC;UAClD,MAAMA,KAAK;QACb;MACF,CAAC,EAAE,CAAC;;MAEJ;MACA,MAAMyB,sBAAsB,GAAG,MAAM,CAAC,YAA6B;QACjE,IAAI;UACF,OAAO,MAAM,IAAAC,+BAAmB,EAACH,aAAa,CAAC;QACjD,CAAC,CAAC,OAAOvB,KAAc,EAAE;UACvB;UACA;UACAS,MAAM,CAACG,IAAI,CAACW,aAAa,CAAC;UAC1Bd,MAAM,CAACT,KAAK,CAAC,uBAAuB,CAAC;UACrC,MAAMA,KAAK;QACb;MACF,CAAC,EAAE,CAAC;;MAEJ;MACA,IAAI;QACF,MAAM5D,EAAE,CAACuF,SAAS,CAACR,SAAS,EAAEM,sBAAsB,EAAE,OAAO,CAAC;MAChE,CAAC,CAAC,OAAOzB,KAAc,EAAE;QACvBS,MAAM,CAACT,KAAK,CAAC,6BAA6B,IAAAsB,sBAAa,EAACH,SAAS,CAAC,GAAG,CAAC;QACtE,MAAMnB,KAAK;MACb;IACF,CAAC,CAAC,OAAOA,KAAc,EAAE;MACvB;MACAS,MAAM,CAACT,KAAK,CAACA,KAAK,CAAC;IACrB;EACF;AACF,CAAC;;AAED;AAAA4B,OAAA,CAAArB,eAAA,GAAAA,eAAA;AACO,MAAMsB,uBAAuB,GAAG,MAAOrB,OAAgC,IAAoB;EAChG,MAAM;IAAEC;EAAO,CAAC,GAAGpB,WAAW,CAAC,CAAC;EAChC,MAAM;IAAEqB,QAAQ;IAAEoB,IAAI;IAAEnB;EAAgB,CAAC,GAAGH,OAAO;EAEnDC,MAAM,CAACG,IAAI,CAAC,qCAAqCF,QAAQ,CAACE,IAAI,CAACC,KAAK,IAAIH,QAAQ,CAACE,IAAI,CAACE,OAAO,EAAE,CAAC;EAEhG,MAAMC,OAA+C,GAAGL,QAAQ,CAACM,UAAU,EAAED,OAAO,IAAI,CAAC,CAAC;EAC1F,MAAMgB,aAAa,GAAG,IAAAC,8BAAe,EAACtB,QAAQ,CAAC;EAE/C,MAAMuB,UAAU,GAAG,CAAC,MAA8B;IAChD,IAAIH,IAAI,CAACI,gBAAgB,CAACC,MAAM,KAAK,YAAY,EAAE;MAAE;MACnD,OAAO;QACL,GAAGL,IAAI;QACPM,OAAO,EAAE;UACP;UACA,GAAG7E,MAAM,CAAC8E,WAAW,CAAC9E,MAAM,CAAC+E,IAAI,CAACvB,OAAO,CAAC,CACvCwB,GAAG,CAAEtB,QAAyB,IAAyD;YACtF,OAAO,CAAC,KAAKA,QAAQ,KAAK,EAAE;cAAEuB,WAAW,EAAE,CAAC;gBAAEC,MAAM,EAAE,iBAAiB;gBAAExB;cAAS,CAAC;YAAE,CAAC,CAAC;UACzF,CAAC,CACH,CAAC;UACD;UACA,GAAGa,IAAI,CAACM;QACV;MACF,CAAC;IACH,CAAC,MAAM,IAAIN,IAAI,CAACI,gBAAgB,CAACC,MAAM,KAAK,SAAS,EAAE;MAAE;MACvD,OAAO;QACL,GAAGL,IAAI;QACPM,OAAO,EAAE;UACP,GAAG7E,MAAM,CAAC8E,WAAW,CAACN,aAAa,CAChCQ,GAAG,CAAC,CAAC;YAAEG,GAAG;YAAEC;UAAmB,CAAC,KAAyD;YACxF,MAAM1B,QAAQ,GAAG,IAAA2B,8BAAe,EAACF,GAAG,CAAC;YACrC,MAAMG,GAAqC,GAAG;cAC5C,IAAIf,IAAI,CAACM,OAAO,CAAC,KAAKnB,QAAQ,KAAK,CAAC,EAAEuB,WAAW,EAAEM,IAAI,CAACD,GAAG,IAAIA,GAAG,CAAC5B,QAAQ,KAAMA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;cACjGwB,MAAM,EAAE,iBAAiB;cACzBxB,QAAQ;cACR8B,IAAI,EAAEJ;YACR,CAAC;YACD,OAAO,CAAC,KAAK1B,QAAQ,KAAK,EAAE;cAAEuB,WAAW,EAAE,CAACK,GAAG;YAAE,CAAC,CAAC;UACrD,CAAC,CACH;QACF;MACF,CAAC;IACH,CAAC,MAAM;MACL,OAAOf,IAAI;IACb;EACF,CAAC,EAAE,CAAC;EAEJ,IAAIkB,MAAM,GAAG,EAAE;EACf,KAAK,MAAM,CAACC,UAAU,EAAEC,WAAW,CAAC,IAAI3F,MAAM,CAACiB,OAAO,CAAC;IAAE,GAAGyD,UAAU,CAACkB,OAAO;IAAE,GAAGlB,UAAU,CAACG;EAAQ,CAAC,CAAC,EAAE;IACxG3B,MAAM,CAACG,IAAI,CAAC,sBAAsBqC,UAAU,EAAE,CAAC;IAE/C,IAAI;MACF;MACA,MAAM1B,aAAa,GAAG,CAAC,MAAc;QACnC,IAAI;UACF,OAAO,IAAA6B,yCAAsB,EAACrC,OAAO,EAAEkB,UAAU,EAAEgB,UAAU,EAAE;YAC7DI,cAAcA,CAACC,OAAwB,EAAEC,OAAwB,EAAW;cAC1E,IAAIzB,IAAI,CAACI,gBAAgB,CAACC,MAAM,KAAK,SAAS,EAAE;gBAAE,OAAO,IAAI;cAAE;cAE/D,MAAMqB,YAAY,GAAGzB,aAAa,CAAC0B,SAAS,CAAC,CAAC;gBAAEf;cAAI,CAAC,KAAK,IAAAE,8BAAe,EAACF,GAAG,CAAC,KAAKY,OAAO,CAAC;cAC3F,MAAMI,YAAY,GAAG3B,aAAa,CAAC0B,SAAS,CAAC,CAAC;gBAAEf;cAAI,CAAC,KAAK,IAAAE,8BAAe,EAACF,GAAG,CAAC,KAAKa,OAAO,CAAC;cAE3F,IAAIC,YAAY,KAAK,CAAC,CAAC,IAAIE,YAAY,KAAK,CAAC,CAAC,EAAE;gBAC9C,OAAO,IAAI;cACb;cAEA,OAAOF,YAAY,GAAGE,YAAY;YACpC;UACF,CAAC,CAAC;QACJ,CAAC,CAAC,OAAO1D,KAAc,EAAE;UACvBS,MAAM,CAACT,KAAK,CAAC,oCAAoC,CAAC;UAClD,MAAMA,KAAK;QACb;MACF,CAAC,EAAE,CAAC;;MAEJ;MACA,MAAMyB,sBAAsB,GAAG,MAAM,CAAC,YAA6B;QACjE,IAAI;UACF,OAAO,MAAM,IAAAC,+BAAmB,EAACH,aAAa,CAAC;QACjD,CAAC,CAAC,OAAOvB,KAAc,EAAE;UACvB;UACA;UACAS,MAAM,CAACG,IAAI,CAACW,aAAa,CAAC;UAC1Bd,MAAM,CAACT,KAAK,CAAC,uBAAuB,CAAC;UACrC,MAAMA,KAAK;QACb;MACF,CAAC,EAAE,CAAC;;MAEJ;MACA,MAAMmB,SAAS,GAAG,IAAIC,GAAG,CAAC6B,UAAU,EAAEtC,eAAe,CAAC;MACtD,IAAI;QACF,IAAIsB,UAAU,CAACC,gBAAgB,CAACC,MAAM,KAAK,SAAS,EAAE;UACpDa,MAAM,IAAI,MAAM,GAAGvB,sBAAsB;QAC3C,CAAC,MAAM;UACL,MAAMrF,EAAE,CAACuH,KAAK,CAAC1H,IAAI,CAAC2H,OAAO,CAAC,IAAAtC,sBAAa,EAACH,SAAS,CAAC,CAAC,EAAE;YAAE0C,SAAS,EAAE;UAAK,CAAC,CAAC;UAC3E,MAAMzH,EAAE,CAACuF,SAAS,CAACR,SAAS,EAAEM,sBAAsB,EAAE,OAAO,CAAC;QAChE;MACF,CAAC,CAAC,OAAOzB,KAAc,EAAE;QACvBS,MAAM,CAACT,KAAK,CAAC,4BAA4BmB,SAAS,EAAE,CAAC;QACrD,MAAMnB,KAAK;MACb;IACF,CAAC,CAAC,OAAOA,KAAc,EAAE;MACvB,IAAIiC,UAAU,CAACC,gBAAgB,CAACC,MAAM,KAAK,SAAS,EAAE;QACpD,MAAMnC,KAAK,CAAC,CAAC;MACf,CAAC,MAAM;QACL;QACAS,MAAM,CAACT,KAAK,CAAC,QAAQ,EAAEA,KAAK,CAAC;MAC/B;IACF;EACF;EAEA,IAAIiC,UAAU,CAACC,gBAAgB,CAACC,MAAM,KAAK,SAAS,EAAE;IACpD,MAAMhB,SAAS,GAAG,IAAIC,GAAG,CAAC,GAAGa,UAAU,CAACC,gBAAgB,CAAC4B,UAAU,KAAK,EAAEnD,eAAe,CAAC;IAC1FF,MAAM,CAACG,IAAI,CAAC,sBAAsB,IAAAU,sBAAa,EAACH,SAAS,CAAC,EAAE,CAAC;IAE7D,IAAI;MACF,MAAM4C,eAAe,GAAG,MAAM,IAAArC,+BAAmB,EAC/C,IAAAsC,gBAAM;AACd,4BAA4B,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,SAASxD,QAAQ,CAACE,IAAI,CAACC,KAAK,YAAYH,QAAQ,CAACE,IAAI,CAACE,OAAO;AACjH;AACA;AACA;AACA;AACA,YAAYkC,MAAM,CAACjE,OAAO,CAAC,8CAA8C,EAAE,EAAE,CAAC;AAC9E,SACM,CAAC;MAED,MAAM3C,EAAE,CAACuH,KAAK,CAAC1H,IAAI,CAAC2H,OAAO,CAAC,IAAAtC,sBAAa,EAACH,SAAS,CAAC,CAAC,EAAE;QAAE0C,SAAS,EAAE;MAAK,CAAC,CAAC;MAC3E,MAAMzH,EAAE,CAACuF,SAAS,CAACR,SAAS,EAAE4C,eAAe,EAAE,OAAO,CAAC;IACzD,CAAC,CAAC,OAAO/D,KAAc,EAAE;MACvBS,MAAM,CAACT,KAAK,CAAC,4BAA4BmB,SAAS,EAAE,CAAC;MACrD,MAAMnB,KAAK;IACb;EACF;EAEA,IAAI8B,IAAI,CAACI,gBAAgB,CAACC,MAAM,KAAK,YAAY,IAAIL,IAAI,CAACI,gBAAgB,CAACiC,kBAAkB,EAAE;IAC7F;IACA,IAAIC,aAAa,GAAG,EAAE;IACtB,KAAK,MAAM,CAACnB,UAAU,EAAEoB,UAAU,CAAC,IAAI9G,MAAM,CAACiB,OAAO,CAAC;MAAE,GAAGyD,UAAU,CAACkB,OAAO;MAAE,GAAGlB,UAAU,CAACG;IAAQ,CAAC,CAAC,EAAE;MACvGgC,aAAa,IAAI,kBAAkBnB,UAAU,MAAM;IACrD;IACA,MAAMqB,SAAS,GAAG,IAAIlD,GAAG,CAAC,YAAY,EAAET,eAAe,CAAC;IACxDF,MAAM,CAAC8D,GAAG,CAAC,oCAAoC,CAAC;IAChD,MAAMnI,EAAE,CAACuF,SAAS,CAAC2C,SAAS,EAAEF,aAAa,EAAE,OAAO,CAAC;EACvD;AACF,CAAC;AAACxC,OAAA,CAAAC,uBAAA,GAAAA,uBAAA;AASF;AACA;AACO,MAAM2C,YAAY,GAAG,MAAAA,CAAO;EAAEC,YAAY;EAAEC,UAAU;EAAEC;AAAuB,CAAC,KAA+B;EACpH,MAAM;IAAElE;EAAO,CAAC,GAAGpB,WAAW,CAAC,CAAC;;EAEhC;EACA,MAAMK,WAAW,GAAG,IAAI0B,GAAG,CAACqD,YAAY,EAAEzF,GAAG,CAAC;EAC9C,MAAMmC,SAAS,GAAG,IAAIC,GAAG,CAACtC,mBAAmB,CAAC4F,UAAU,CAAC,EAAE1F,GAAG,CAAC,CAAC,CAAC;EACjE,MAAM4F,OAAmB,GAAG,OAAOD,QAAQ,KAAK,WAAW,GAAG,IAAI,GAAG,IAAIvD,GAAG,CAACuD,QAAQ,EAAE3F,GAAG,CAAC;;EAE3F;EACA,IAAI;IACF,MAAM5C,EAAE,CAACyI,IAAI,CAACnF,WAAW,CAAC;EAC5B,CAAC,CAAC,OAAOM,KAAc,EAAE;IACvB,MAAM,IAAIR,KAAK,CAAC,0CAA0CiF,YAAY,GAAG,EAAE;MAAEvE,KAAK,EAAEF;IAAM,CAAC,CAAC;EAC9F;;EAEA;EACA,IAAI8E,cAAqB;EACzB,IAAI;IACFA,cAAc,GAAG,MAAM1I,EAAE,CAACyI,IAAI,CAAC1D,SAAS,CAAC;EAC3C,CAAC,CAAC,OAAOnB,KAAc,EAAE;IACvB,MAAM,IAAIR,KAAK,CAAC,yCAAyCkF,UAAU,GAAG,EAAE;MAAExE,KAAK,EAAEF;IAAM,CAAC,CAAC;EAC3F;EACA,IAAI,CAAC8E,cAAc,CAACC,WAAW,CAAC,CAAC,EAAE;IACjC,MAAM,IAAIvF,KAAK,CAAC,yBAAyBkF,UAAU,sBAAsB,CAAC;EAC5E;;EAEA;EACA,IAAIE,OAAO,KAAK,IAAI,EAAE;IACpB,IAAI;MACF,MAAMxI,EAAE,CAACyI,IAAI,CAACD,OAAO,CAAC;IACxB,CAAC,CAAC,OAAO5E,KAAc,EAAE;MACvB,MAAM,IAAIR,KAAK,CAAC,kDAAkDmF,QAAQ,GAAG,EAAE;QAAEzE,KAAK,EAAEF;MAAM,CAAC,CAAC;IAClG;EACF;;EAEA;EACA,MAAM8B,IAAmC,GAAG8C,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,OAAAI,SAAA,QAAAC,OAAA,CAAAnI,CAAA,IAAAA,CAAA,IAAAkI,SAAA,KAAAE,IAAA,CAAAC,CAAA,IAAAjJ,uBAAA,CAAAH,OAAA,CAAAoJ,CAAA,KAAApH,oBAAA,CAAa6G,OAAO,CAACQ,IAAI;IAAA;EAAA,GAAC,EAAEnI,OAAO;;EAE1G;EACA,MAAMyD,QAAQ,GAAG,MAAM,CAAC,YAAuC;IAC7D,IAAI;MACF,OAAO,MAAMjB,aAAa,CAACC,WAAW,CAAC;IACzC,CAAC,CAAC,OAAOM,KAAc,EAAE;MACvBS,MAAM,CAACT,KAAK,CAAC,sCAAsCyE,YAAY,GAAG,CAAC;MACnE,MAAMzE,KAAK;IACb;EACF,CAAC,EAAE,CAAC;;EAEJ;EACA,MAAMqF,KAA+B,GAAGvD,IAAI,KAAK,IAAI,IAAIwD,KAAK,CAACC,OAAO,CAACzD,IAAI,EAAEuD,KAAK,CAAC,GAAGvD,IAAI,CAACuD,KAAK,GAAG,IAAI;EACvG,MAAMG,eAAe,GAAGH,KAAK,KAAK,IAAI,GAClC3E,QAAQ,GACR,IAAA+E,sCAAkB,EAAmB/E,QAAQ,EAAE2E,KAAK,CAAC;EAEzD,OAAO;IAAE3E,QAAQ,EAAE8E,eAAe;IAAE7E,eAAe,EAAEQ,SAAS;IAAEW;EAAK,CAAC;AACxE,CAAC;AAACF,OAAA,CAAA4C,YAAA,GAAAA,YAAA;AAGF,MAAMkB,UAAU,GAAGA,CAAA,KAAM;EACvB,MAAM;IAAEjF;EAAO,CAAC,GAAGpB,WAAW,CAAC,CAAC;EAEhCoB,MAAM,CAACG,IAAI,CAAC,IAAAoD,gBAAM;AACpB;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;AACJ,CAAC;AAUM,MAAM2B,YAAY,GAAG,MAAOC,IAAgB,IAAoB;EACrE,MAAM;IAAEnF;EAAO,CAAC,GAAGpB,WAAW,CAAC,CAAC;EAEhC,MAAMoF,YAAgC,GAAGmB,IAAI,CAACC,WAAW,CAAC,CAAC,CAAC;EAC5D,MAAMnB,UAA8B,GAAGkB,IAAI,CAACC,WAAW,CAAC,CAAC,CAAC;EAC1D,IAAI,CAACpB,YAAY,IAAI,CAACC,UAAU,EAAE;IAChCgB,UAAU,CAAC,CAAC;IACZ;EACF;EAEA,MAAMI,YAA0B,GAAG;IACjCrB,YAAY;IACZC,UAAU;IACVC,QAAQ,EAAEiB,IAAI,CAACG,MAAM,CAACjE;EACxB,CAAC;EACD,MAAMtB,OAAwB,GAAG,MAAMgE,YAAY,CAACsB,YAAY,CAAC;EAEjE,IAAItF,OAAO,CAACsB,IAAI,KAAK,IAAI,EAAE;IACzB,MAAMvB,eAAe,CAACC,OAAO,CAAC;EAChC,CAAC,MAAM;IACL,MAAMqB,uBAAuB,CAACrB,OAAkC,CAAC;EACnE;EAEAC,MAAM,CAACG,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;;AAED;AACA;AACA;AAAAgB,OAAA,CAAA+D,YAAA,GAAAA,YAAA;AACO,MAAMK,wBAAwB,GAAG,MAAOJ,IAAgB,IAAoB;EACjF,MAAM;IAAEnF;EAAO,CAAC,GAAGpB,WAAW,CAAC,CAAC;EAEhC,MAAMoF,YAAgC,GAAGmB,IAAI,CAACC,WAAW,CAAC,CAAC,CAAC;EAC5D,MAAMI,aAAiC,GAAGL,IAAI,CAACC,WAAW,CAAC,CAAC,CAAC;EAC7D,IAAI,CAACpB,YAAY,IAAI,CAACwB,aAAa,EAAE;IACnCP,UAAU,CAAC,CAAC;IACZ;EACF;EAEA,MAAMhG,WAAW,GAAG,IAAI0B,GAAG,CAACqD,YAAY,EAAEzF,GAAG,CAAC;EAC9C,MAAM0B,QAAQ,GAAG,MAAMjB,aAAa,CAACC,WAAW,CAAC;EACjD,MAAMwG,IAAI,GAAG,MAAM,IAAAC,6BAAc,EAACzF,QAAQ,EAAEuF,aAAa,CAAC;EAE1DxF,MAAM,CAAC8D,GAAG,CAAC2B,IAAI,CAAC;EAEhBzF,MAAM,CAACG,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;;AAED;AAAAgB,OAAA,CAAAoE,wBAAA,GAAAA,wBAAA;AACO,MAAMI,GAAG,GAAG,MAAOC,OAAsB,IAAoB;EAClE;EACA,MAAMT,IAAI,GAAG,IAAAU,mBAAS,EAAC;IACrBV,IAAI,EAAES,OAAO;IACbE,gBAAgB,EAAE,IAAI;IACtBC,OAAO,EAAE;MACPC,IAAI,EAAE;QAAEC,IAAI,EAAE,SAAS;QAAEC,KAAK,EAAE;MAAI,CAAC;MACrCC,MAAM,EAAE;QAAEF,IAAI,EAAE;MAAU,CAAC;MAC3B5E,IAAI,EAAE;QAAE4E,IAAI,EAAE;MAAS,CAAC,CAAE;MAC1B;IACF;EACF,CAAC,CAAC;;EAEF;EACA,MAAMjG,MAAc,GAAG;IACrBG,IAAI,EAAEgF,IAAI,CAACG,MAAM,CAACa,MAAM,GAAG,MAAM,CAAC,CAAC,GAAGC,OAAO,CAACjG,IAAI;IAClDZ,KAAK,EAAE6G,OAAO,CAAC7G,KAAK;IACpBuE,GAAG,EAAEsC,OAAO,CAACtC;EACf,CAAC;EAED,MAAMpF,eAAe,CAACiH,GAAG,CAAC;IAAE3F;EAAO,CAAC,EAAE,YAAY;IAChD,MAAMqG,OAAsB,GAAGlB,IAAI,CAACC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI;IAC1D,IAAIiB,OAAO,KAAK,IAAI,IAAIlB,IAAI,CAACG,MAAM,CAACU,IAAI,EAAE;MACxCf,UAAU,CAAC,CAAC;MACZ;IACF;IAEA,MAAMqB,cAAc,GAAG;MAAE,GAAGnB,IAAI;MAAEC,WAAW,EAAED,IAAI,CAACC,WAAW,CAAChH,KAAK,CAAC,CAAC;IAAE,CAAC;IAC1E,QAAQiI,OAAO;MACb,KAAK,KAAK;QACR,MAAMnB,YAAY,CAACoB,cAAc,CAAC;QAClC;MACF,KAAK,yBAAyB;QAC5B,MAAMf,wBAAwB,CAACe,cAAc,CAAC;QAC9C;MACF;QACEtG,MAAM,CAACT,KAAK,CAAC,oBAAoB8G,OAAO,KAAK,CAAC;QAC9CpB,UAAU,CAAC,CAAC;QACZ;IACJ;EACF,CAAC,CAAC;AACJ,CAAC;AAAC9D,OAAA,CAAAwE,GAAA,GAAAA,GAAA;AAEF,MAAM,CAACY,QAAQ,EAAEC,SAAS,EAAE,GAAGrB,IAAI,CAAC,GAAG1G,OAAO,CAACgI,IAAI,CAAC,CAAC;;AAErD;AACA,IAAID,SAAS,IAAI,OAAM7K,EAAE,CAAC+K,QAAQ,CAACF,SAAS,CAAC,MAAK,IAAA3F,sBAAa,EAAC8F,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,EAAE;EAChF,IAAI;IACF,MAAMlB,GAAG,CAACR,IAAI,CAAC;IACf1G,OAAO,CAACqI,IAAI,CAAC,CAAC,CAAC;EACjB,CAAC,CAAC,OAAOvH,KAAc,EAAE;IACvB6G,OAAO,CAAC7G,KAAK,CAACA,KAAK,CAAC;IACpBd,OAAO,CAACqI,IAAI,CAAC,CAAC,CAAC;EACjB;AACF","ignoreList":[]}

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

"use strict";
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.encodeJsonPointer = exports.decodeJsonPointer = void 0;
/* Copyright (c) Fortanix, Inc.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
const unescapeJsonPointerSegment = segment => segment.replace(/~1/g, '/').replace(/~0/g, '~');
const decodeJsonPointer = jsonPointer => {
const jsonPointerTrimmed = jsonPointer.trim();
if (jsonPointerTrimmed === '') {
return [];
}
if (jsonPointerTrimmed.charAt(0) !== '/') {
throw new Error(`Invalid JSON Pointer: ${jsonPointer}`);
}
return jsonPointer.substring(1).split('/').map(segment => unescapeJsonPointerSegment(segment));
};
exports.decodeJsonPointer = decodeJsonPointer;
const escapeJsonPointerSegment = segment => segment.replace(/~/g, '~0').replace(/\//g, '~1');
const encodeJsonPointer = segments => {
return '/' + segments.map(segment => escapeJsonPointerSegment(segment)).join('/');
};
exports.encodeJsonPointer = encodeJsonPointer;
//# sourceMappingURL=openapi.cjs.map

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

{"version":3,"file":"openapi.cjs","names":[],"sources":["../../../src/util/openapi.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';\n\n\nexport type OpenApiRef = string;\n\nexport type OpenApiSchema = OpenApi.ReferenceObject | OpenApi.SchemaObject;\nexport type OpenApiSchemaId = string;\n"],"mappings":"","ignoreList":[]}
{"version":3,"file":"openapi.cjs","names":["unescapeJsonPointerSegment","segment","replace","decodeJsonPointer","jsonPointer","jsonPointerTrimmed","trim","charAt","Error","substring","split","map","exports","escapeJsonPointerSegment","encodeJsonPointer","segments","join"],"sources":["../../../src/util/openapi.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';\n\n\nexport type OpenApiRef = string;\n\nexport type OpenApiSchema = OpenApi.ReferenceObject | OpenApi.SchemaObject;\nexport type OpenApiSchemaId = string;\n\n\nconst unescapeJsonPointerSegment = (segment: string): string =>\n segment.replace(/~1/g, '/').replace(/~0/g, '~');\nexport const decodeJsonPointer = (jsonPointer: string): Array<string> => {\n const jsonPointerTrimmed = jsonPointer.trim();\n if (jsonPointerTrimmed === '') { return []; }\n if (jsonPointerTrimmed.charAt(0) !== '/') { throw new Error(`Invalid JSON Pointer: ${jsonPointer}`); }\n return jsonPointer.substring(1).split('/').map(segment => unescapeJsonPointerSegment(segment));\n};\n\nconst escapeJsonPointerSegment = (segment: string): string =>\n segment.replace(/~/g, '~0').replace(/\\//g, '~1');\nexport const encodeJsonPointer = (segments: Array<string>): string => {\n return '/' + segments.map(segment => escapeJsonPointerSegment(segment)).join('/');\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;AAWA,MAAMA,0BAA0B,GAAIC,OAAe,IACjDA,OAAO,CAACC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAC1C,MAAMC,iBAAiB,GAAIC,WAAmB,IAAoB;EACvE,MAAMC,kBAAkB,GAAGD,WAAW,CAACE,IAAI,CAAC,CAAC;EAC7C,IAAID,kBAAkB,KAAK,EAAE,EAAE;IAAE,OAAO,EAAE;EAAE;EAC5C,IAAIA,kBAAkB,CAACE,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAAE,MAAM,IAAIC,KAAK,CAAC,yBAAyBJ,WAAW,EAAE,CAAC;EAAE;EACrG,OAAOA,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACV,OAAO,IAAID,0BAA0B,CAACC,OAAO,CAAC,CAAC;AAChG,CAAC;AAACW,OAAA,CAAAT,iBAAA,GAAAA,iBAAA;AAEF,MAAMU,wBAAwB,GAAIZ,OAAe,IAC/CA,OAAO,CAACC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;AAC3C,MAAMY,iBAAiB,GAAIC,QAAuB,IAAa;EACpE,OAAO,GAAG,GAAGA,QAAQ,CAACJ,GAAG,CAACV,OAAO,IAAIY,wBAAwB,CAACZ,OAAO,CAAC,CAAC,CAACe,IAAI,CAAC,GAAG,CAAC;AACnF,CAAC;AAACJ,OAAA,CAAAE,iBAAA,GAAAA,iBAAA","ignoreList":[]}

@@ -8,2 +8,4 @@ /* Copyright (c) Fortanix, Inc.

import { decodeJsonPointer, encodeJsonPointer } from "../util/openapi.mjs";
//

@@ -14,17 +16,22 @@ // Reference resolving

// OpenAPI schema reference
// Callback to take a ref and resolve it to the corresponding schema
export const schemaIdFromRef = ref => {
const matches = ref.match(/^#\/components\/schemas\/([a-zA-Z0-9_$]+)/);
if (!matches) {
const matches = ref.match(/^#\/components\/schemas\/.+/);
if (!/^#\/components\/schemas\/.+/.test(ref)) {
throw new Error(`Reference format not supported: ${ref}`);
}
const refSchemaId = matches[1];
const pointer = ref.replace(/^#/, '');
const [refSchemaId, ...segments] = decodeJsonPointer(pointer).slice(2);
if (typeof refSchemaId === 'undefined') {
throw new Error('Should not happen');
}
if (segments.length !== 0) {
throw new Error(`Refs to nested paths not supported: ${ref}`);
}
return refSchemaId;
};
export const refFromSchemaId = schemaId => {
return `#/components/schemas/${schemaId}`;
return '#' + encodeJsonPointer(['components', 'schemas', schemaId]);
};

@@ -31,0 +38,0 @@ const resolver = schemas => ref => {

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

{"version":3,"file":"GraphAnalyzer.mjs","names":["schemaIdFromRef","ref","matches","match","Error","refSchemaId","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 } 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\\/([a-zA-Z0-9_$]+)/);\n if (!matches) {\n throw new Error(`Reference format not supported: ${ref}`);\n }\n \n const refSchemaId = matches[1];\n if (typeof refSchemaId === 'undefined') { throw new Error('Should not happen'); }\n return refSchemaId;\n};\nexport const refFromSchemaId = (schemaId: OpenApiSchemaId): Ref => {\n return `#/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","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":[]}

@@ -64,4 +64,17 @@ /* Copyright (c) Fortanix, Inc.

return `pipe(${pipe.join(', ')})`;
},
// Convert an arbitrary name to a JS identifier
encodeIdentifier(name) {
if (/^[a-zA-Z$_][a-zA-Z0-9$_]*$/g.test(name)) {
return name;
} else {
const nameSpecialCharsRemoved = name.replace(/[^a-zA-Z0-9$_]/g, '');
if (/^[0-9]/.test(nameSpecialCharsRemoved)) {
return '_' + nameSpecialCharsRemoved;
} else {
return nameSpecialCharsRemoved;
}
}
}
};
//# sourceMappingURL=genUtil.mjs.map

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

{"version":3,"file":"genUtil.mjs","names":["dedent","GenResultUtil","combineRefs","refs","Set","flat","importNameFromRef","ref","fileName","split","at","Error","importName","replace","initComments","commentShort","commentLong","deprecated","initGenResult","code","comments","commentsFromSchemaObject","schema","title","description","format","commentsToCode","commentBlock","trim","commentInline","join","generatePipe","pipe","head","undefined","TypeError","length"],"sources":["../../../../src/generation/effSchemGen/genUtil.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 OpenAPIV3 } from 'openapi-types';\nimport { type OpenApiRef } from '../../util/openapi.ts';\n\n\nexport type GenComments = {\n commentShort: string,\n commentLong: string,\n deprecated: boolean,\n format?: undefined | string,\n};\nexport type GenResult = {\n code: string,\n refs: Array<OpenApiRef>,\n comments: GenComments,\n};\nexport const GenResultUtil = {\n combineRefs(...refs: Array<GenResult['refs']>): GenResult['refs'] {\n return [...new Set(refs.flat())];\n },\n importNameFromRef(ref: string) {\n const fileName = ref.split('/').at(-1);\n if (!fileName) { throw new Error(`Invalid ref: ${ref}`); }\n const importName = fileName.replace(/\\.ts$/, '');\n return importName;\n },\n \n initComments(): GenComments {\n return {\n commentShort: '',\n commentLong: '',\n deprecated: false,\n //format: undefined,\n };\n },\n initGenResult(): GenResult {\n return {\n code: '',\n refs: [],\n comments: GenResultUtil.initComments(),\n };\n },\n \n commentsFromSchemaObject(schema: OpenAPIV3.BaseSchemaObject): GenComments {\n return {\n commentShort: schema.title ?? '',\n commentLong: schema.description ?? '',\n deprecated: schema.deprecated ?? false,\n format: schema.format,\n };\n },\n commentsToCode(comments: GenComments): { commentBlock: string, commentInline: string } {\n const commentBlock = dedent`\n ${comments.commentLong}\n ${comments.deprecated ? `@deprecated` : ''}\n `.trim();\n const commentInline = comments.commentShort.split('\\n').join(' ').trim();\n return {\n commentBlock: commentBlock === '' ? '' : `/** ${commentBlock} */`,\n commentInline: commentInline === '' ? '' : `// ${commentInline}`,\n };\n },\n \n generatePipe(pipe: Array<string>): string {\n const head: undefined | string = pipe[0];\n if (head === undefined) { throw new TypeError(`generatePipe needs at least one argument`); }\n if (pipe.length === 1) { return head; }\n return `pipe(${pipe.join(', ')})`;\n },\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,WAAW;AAgBlC,OAAO,MAAMC,aAAa,GAAG;EAC3BC,WAAWA,CAAC,GAAGC,IAA8B,EAAqB;IAChE,OAAO,CAAC,GAAG,IAAIC,GAAG,CAACD,IAAI,CAACE,IAAI,CAAC,CAAC,CAAC,CAAC;EAClC,CAAC;EACDC,iBAAiBA,CAACC,GAAW,EAAE;IAC7B,MAAMC,QAAQ,GAAGD,GAAG,CAACE,KAAK,CAAC,GAAG,CAAC,CAACC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAACF,QAAQ,EAAE;MAAE,MAAM,IAAIG,KAAK,CAAC,gBAAgBJ,GAAG,EAAE,CAAC;IAAE;IACzD,MAAMK,UAAU,GAAGJ,QAAQ,CAACK,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAChD,OAAOD,UAAU;EACnB,CAAC;EAEDE,YAAYA,CAAA,EAAgB;IAC1B,OAAO;MACLC,YAAY,EAAE,EAAE;MAChBC,WAAW,EAAE,EAAE;MACfC,UAAU,EAAE;MACZ;IACF,CAAC;EACH,CAAC;EACDC,aAAaA,CAAA,EAAc;IACzB,OAAO;MACLC,IAAI,EAAE,EAAE;MACRhB,IAAI,EAAE,EAAE;MACRiB,QAAQ,EAAEnB,aAAa,CAACa,YAAY,CAAC;IACvC,CAAC;EACH,CAAC;EAEDO,wBAAwBA,CAACC,MAAkC,EAAe;IACxE,OAAO;MACLP,YAAY,EAAEO,MAAM,CAACC,KAAK,IAAI,EAAE;MAChCP,WAAW,EAAEM,MAAM,CAACE,WAAW,IAAI,EAAE;MACrCP,UAAU,EAAEK,MAAM,CAACL,UAAU,IAAI,KAAK;MACtCQ,MAAM,EAAEH,MAAM,CAACG;IACjB,CAAC;EACH,CAAC;EACDC,cAAcA,CAACN,QAAqB,EAAmD;IACrF,MAAMO,YAAY,GAAG3B,MAAM;AAC/B,QAAQoB,QAAQ,CAACJ,WAAW;AAC5B,QAAQI,QAAQ,CAACH,UAAU,GAAG,aAAa,GAAG,EAAE;AAChD,KAAK,CAACW,IAAI,CAAC,CAAC;IACR,MAAMC,aAAa,GAAGT,QAAQ,CAACL,YAAY,CAACN,KAAK,CAAC,IAAI,CAAC,CAACqB,IAAI,CAAC,GAAG,CAAC,CAACF,IAAI,CAAC,CAAC;IACxE,OAAO;MACLD,YAAY,EAAEA,YAAY,KAAK,EAAE,GAAG,EAAE,GAAG,OAAOA,YAAY,KAAK;MACjEE,aAAa,EAAEA,aAAa,KAAK,EAAE,GAAG,EAAE,GAAG,MAAMA,aAAa;IAChE,CAAC;EACH,CAAC;EAEDE,YAAYA,CAACC,IAAmB,EAAU;IACxC,MAAMC,IAAwB,GAAGD,IAAI,CAAC,CAAC,CAAC;IACxC,IAAIC,IAAI,KAAKC,SAAS,EAAE;MAAE,MAAM,IAAIC,SAAS,CAAC,0CAA0C,CAAC;IAAE;IAC3F,IAAIH,IAAI,CAACI,MAAM,KAAK,CAAC,EAAE;MAAE,OAAOH,IAAI;IAAE;IACtC,OAAO,QAAQD,IAAI,CAACF,IAAI,CAAC,IAAI,CAAC,GAAG;EACnC;AACF,CAAC","ignoreList":[]}
{"version":3,"file":"genUtil.mjs","names":["dedent","GenResultUtil","combineRefs","refs","Set","flat","importNameFromRef","ref","fileName","split","at","Error","importName","replace","initComments","commentShort","commentLong","deprecated","initGenResult","code","comments","commentsFromSchemaObject","schema","title","description","format","commentsToCode","commentBlock","trim","commentInline","join","generatePipe","pipe","head","undefined","TypeError","length","encodeIdentifier","name","test","nameSpecialCharsRemoved"],"sources":["../../../../src/generation/effSchemGen/genUtil.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 OpenAPIV3 } from 'openapi-types';\nimport { type OpenApiRef } from '../../util/openapi.ts';\n\n\nexport type GenComments = {\n commentShort: string,\n commentLong: string,\n deprecated: boolean,\n format?: undefined | string,\n};\nexport type GenResult = {\n code: string,\n refs: Array<OpenApiRef>,\n comments: GenComments,\n};\nexport const GenResultUtil = {\n combineRefs(...refs: Array<GenResult['refs']>): GenResult['refs'] {\n return [...new Set(refs.flat())];\n },\n importNameFromRef(ref: string) {\n const fileName = ref.split('/').at(-1);\n if (!fileName) { throw new Error(`Invalid ref: ${ref}`); }\n const importName = fileName.replace(/\\.ts$/, '');\n return importName;\n },\n \n initComments(): GenComments {\n return {\n commentShort: '',\n commentLong: '',\n deprecated: false,\n //format: undefined,\n };\n },\n initGenResult(): GenResult {\n return {\n code: '',\n refs: [],\n comments: GenResultUtil.initComments(),\n };\n },\n \n commentsFromSchemaObject(schema: OpenAPIV3.BaseSchemaObject): GenComments {\n return {\n commentShort: schema.title ?? '',\n commentLong: schema.description ?? '',\n deprecated: schema.deprecated ?? false,\n format: schema.format,\n };\n },\n commentsToCode(comments: GenComments): { commentBlock: string, commentInline: string } {\n const commentBlock = dedent`\n ${comments.commentLong}\n ${comments.deprecated ? `@deprecated` : ''}\n `.trim();\n const commentInline = comments.commentShort.split('\\n').join(' ').trim();\n return {\n commentBlock: commentBlock === '' ? '' : `/** ${commentBlock} */`,\n commentInline: commentInline === '' ? '' : `// ${commentInline}`,\n };\n },\n \n generatePipe(pipe: Array<string>): string {\n const head: undefined | string = pipe[0];\n if (head === undefined) { throw new TypeError(`generatePipe needs at least one argument`); }\n if (pipe.length === 1) { return head; }\n return `pipe(${pipe.join(', ')})`;\n },\n \n // Convert an arbitrary name to a JS identifier\n encodeIdentifier(name: string): string {\n if (/^[a-zA-Z$_][a-zA-Z0-9$_]*$/g.test(name)) {\n return name;\n } else {\n const nameSpecialCharsRemoved = name.replace(/[^a-zA-Z0-9$_]/g, '');\n if (/^[0-9]/.test(nameSpecialCharsRemoved)) {\n return '_' + nameSpecialCharsRemoved;\n } else {\n return nameSpecialCharsRemoved;\n }\n }\n },\n};\n"],"mappings":"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","ignoreList":[]}

@@ -11,2 +11,3 @@ /* Copyright (c) Fortanix, Inc.

import { generateForSchema } from "./schemaGen.mjs";
const id = GenResultUtil.encodeIdentifier;

@@ -49,12 +50,12 @@ // Take an OpenAPI schema and generate a top-level module, as a string.

}
return `import { ${refId} } from '${ref}';`;
return `import { ${id(refId)} } from '${ref}';`;
}).join('\n')}
${commentsGenerated.commentBlock}
export const ${schemaId} = ${code}; ${commentsGenerated.commentInline}
export type ${schemaId} = S.Schema.Type<typeof ${schemaId}>;
export const ${schemaId}Encoded = S.encodedSchema(${schemaId});
export type ${schemaId}Encoded = S.Schema.Encoded<typeof ${schemaId}>;
export const ${id(schemaId)} = ${code}; ${commentsGenerated.commentInline}
export type ${id(schemaId)} = S.Schema.Type<typeof ${id(schemaId)}>;
export const ${id(schemaId)}Encoded = S.encodedSchema(${id(schemaId)});
export type ${id(schemaId)}Encoded = S.Schema.Encoded<typeof ${id(schemaId)}>;
`;
};
//# sourceMappingURL=moduleGen.mjs.map

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

{"version":3,"file":"moduleGen.mjs","names":["dedent","GenResultUtil","generateForSchema","generateModule","schemaId","schema","generationContext","schemas","hooks","isSchemaIdBefore","_schemaId","code","refs","comments","commentsGenerated","commentsToCode","fileNameForRef","ref","split","at","schemaIdForRef","replace","refsSorted","filter","sort","ref1","ref2","startsWith","map","refId","Error","join","commentBlock","commentInline"],"sources":["../../../../src/generation/effSchemGen/moduleGen.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 OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport { GenResultUtil } from './genUtil.ts';\nimport { type Context as SchemaGenContext, generateForSchema } from './schemaGen.ts';\n\n\n// Take an OpenAPI schema and generate a top-level module, as a string.\n// @throws Error When we cannot generate a module from the given schema.\nexport const generateModule = (schemaId: string, schema: OpenApiSchema): string => {\n const generationContext: SchemaGenContext = {\n schemas: {}, // FIXME\n hooks: {},\n isSchemaIdBefore(_schemaId: OpenApiSchemaId) { return true; },\n };\n const { code, refs, comments } = generateForSchema(generationContext, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n const fileNameForRef = (ref: string): undefined | string => ref.split('/').at(-1);\n const schemaIdForRef = (ref: string): undefined | string => fileNameForRef(ref)?.replace(/\\.ts$/, '');\n \n const refsSorted = [...refs]\n .filter(ref => schemaIdForRef(ref) !== schemaId)\n .sort((ref1, ref2) => {\n if (ref1.startsWith('../util/')) {\n return -1;\n } else if (ref2.startsWith('../util/')) {\n return +1;\n }\n return 0;\n });\n return dedent`\n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${refsSorted.map(ref => {\n const refId = schemaIdForRef(ref);\n if (!refId) { throw new Error(`Invalid ref: ${ref}`); }\n return `import { ${refId} } from '${ref}';`;\n }).join('\\n')}\n \n ${commentsGenerated.commentBlock}\n export const ${schemaId} = ${code}; ${commentsGenerated.commentInline}\n export type ${schemaId} = S.Schema.Type<typeof ${schemaId}>;\n export const ${schemaId}Encoded = S.encodedSchema(${schemaId});\n export type ${schemaId}Encoded = S.Schema.Encoded<typeof ${schemaId}>;\n `;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,WAAW;AAGlC,SAASC,aAAa,QAAQ,eAAc;AAC5C,SAA2CC,iBAAiB,QAAQ,iBAAgB;;AAGpF;AACA;AACA,OAAO,MAAMC,cAAc,GAAGA,CAACC,QAAgB,EAAEC,MAAqB,KAAa;EACjF,MAAMC,iBAAmC,GAAG;IAC1CC,OAAO,EAAE,CAAC,CAAC;IAAE;IACbC,KAAK,EAAE,CAAC,CAAC;IACTC,gBAAgBA,CAACC,SAA0B,EAAE;MAAE,OAAO,IAAI;IAAE;EAC9D,CAAC;EACD,MAAM;IAAEC,IAAI;IAAEC,IAAI;IAAEC;EAAS,CAAC,GAAGX,iBAAiB,CAACI,iBAAiB,EAAED,MAAM,CAAC;EAC7E,MAAMS,iBAAiB,GAAGb,aAAa,CAACc,cAAc,CAACF,QAAQ,CAAC;EAEhE,MAAMG,cAAc,GAAIC,GAAW,IAAyBA,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,EAAE,CAAC,CAAC,CAAC,CAAC;EACjF,MAAMC,cAAc,GAAIH,GAAW,IAAyBD,cAAc,CAACC,GAAG,CAAC,EAAEI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;EAErG,MAAMC,UAAU,GAAG,CAAC,GAAGV,IAAI,CAAC,CACzBW,MAAM,CAACN,GAAG,IAAIG,cAAc,CAACH,GAAG,CAAC,KAAKb,QAAQ,CAAC,CAC/CoB,IAAI,CAAC,CAACC,IAAI,EAAEC,IAAI,KAAK;IACpB,IAAID,IAAI,CAACE,UAAU,CAAC,UAAU,CAAC,EAAE;MAC/B,OAAO,CAAC,CAAC;IACX,CAAC,MAAM,IAAID,IAAI,CAACC,UAAU,CAAC,UAAU,CAAC,EAAE;MACtC,OAAO,CAAC,CAAC;IACX;IACA,OAAO,CAAC;EACV,CAAC,CAAC;EACJ,OAAO3B,MAAM;AACf;AACA;AACA;AACA,MAAMsB,UAAU,CAACM,GAAG,CAACX,GAAG,IAAI;IACtB,MAAMY,KAAK,GAAGT,cAAc,CAACH,GAAG,CAAC;IACjC,IAAI,CAACY,KAAK,EAAE;MAAE,MAAM,IAAIC,KAAK,CAAC,gBAAgBb,GAAG,EAAE,CAAC;IAAE;IACtD,OAAO,YAAYY,KAAK,YAAYZ,GAAG,IAAI;EAC7C,CAAC,CAAC,CAACc,IAAI,CAAC,IAAI,CAAC;AACjB;AACA,MAAMjB,iBAAiB,CAACkB,YAAY;AACpC,mBAAmB5B,QAAQ,MAAMO,IAAI,KAAKG,iBAAiB,CAACmB,aAAa;AACzE,kBAAkB7B,QAAQ,2BAA2BA,QAAQ;AAC7D,mBAAmBA,QAAQ,6BAA6BA,QAAQ;AAChE,kBAAkBA,QAAQ,qCAAqCA,QAAQ;AACvE,GAAG;AACH,CAAC","ignoreList":[]}
{"version":3,"file":"moduleGen.mjs","names":["dedent","GenResultUtil","generateForSchema","id","encodeIdentifier","generateModule","schemaId","schema","generationContext","schemas","hooks","isSchemaIdBefore","_schemaId","code","refs","comments","commentsGenerated","commentsToCode","fileNameForRef","ref","split","at","schemaIdForRef","replace","refsSorted","filter","sort","ref1","ref2","startsWith","map","refId","Error","join","commentBlock","commentInline"],"sources":["../../../../src/generation/effSchemGen/moduleGen.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 OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport { GenResultUtil } from './genUtil.ts';\nimport { type Context as SchemaGenContext, generateForSchema } from './schemaGen.ts';\n\n\nconst id = GenResultUtil.encodeIdentifier;\n\n// Take an OpenAPI schema and generate a top-level module, as a string.\n// @throws Error When we cannot generate a module from the given schema.\nexport const generateModule = (schemaId: string, schema: OpenApiSchema): string => {\n const generationContext: SchemaGenContext = {\n schemas: {}, // FIXME\n hooks: {},\n isSchemaIdBefore(_schemaId: OpenApiSchemaId) { return true; },\n };\n const { code, refs, comments } = generateForSchema(generationContext, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n const fileNameForRef = (ref: string): undefined | string => ref.split('/').at(-1);\n const schemaIdForRef = (ref: string): undefined | string => fileNameForRef(ref)?.replace(/\\.ts$/, '');\n \n const refsSorted = [...refs]\n .filter(ref => schemaIdForRef(ref) !== schemaId)\n .sort((ref1, ref2) => {\n if (ref1.startsWith('../util/')) {\n return -1;\n } else if (ref2.startsWith('../util/')) {\n return +1;\n }\n return 0;\n });\n return dedent`\n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${refsSorted.map(ref => {\n const refId = schemaIdForRef(ref);\n if (!refId) { throw new Error(`Invalid ref: ${ref}`); }\n return `import { ${id(refId)} } from '${ref}';`;\n }).join('\\n')}\n \n ${commentsGenerated.commentBlock}\n export const ${id(schemaId)} = ${code}; ${commentsGenerated.commentInline}\n export type ${id(schemaId)} = S.Schema.Type<typeof ${id(schemaId)}>;\n export const ${id(schemaId)}Encoded = S.encodedSchema(${id(schemaId)});\n export type ${id(schemaId)}Encoded = S.Schema.Encoded<typeof ${id(schemaId)}>;\n `;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,WAAW;AAGlC,SAASC,aAAa,QAAQ,eAAc;AAC5C,SAA2CC,iBAAiB,QAAQ,iBAAgB;AAGpF,MAAMC,EAAE,GAAGF,aAAa,CAACG,gBAAgB;;AAEzC;AACA;AACA,OAAO,MAAMC,cAAc,GAAGA,CAACC,QAAgB,EAAEC,MAAqB,KAAa;EACjF,MAAMC,iBAAmC,GAAG;IAC1CC,OAAO,EAAE,CAAC,CAAC;IAAE;IACbC,KAAK,EAAE,CAAC,CAAC;IACTC,gBAAgBA,CAACC,SAA0B,EAAE;MAAE,OAAO,IAAI;IAAE;EAC9D,CAAC;EACD,MAAM;IAAEC,IAAI;IAAEC,IAAI;IAAEC;EAAS,CAAC,GAAGb,iBAAiB,CAACM,iBAAiB,EAAED,MAAM,CAAC;EAC7E,MAAMS,iBAAiB,GAAGf,aAAa,CAACgB,cAAc,CAACF,QAAQ,CAAC;EAEhE,MAAMG,cAAc,GAAIC,GAAW,IAAyBA,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,EAAE,CAAC,CAAC,CAAC,CAAC;EACjF,MAAMC,cAAc,GAAIH,GAAW,IAAyBD,cAAc,CAACC,GAAG,CAAC,EAAEI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;EAErG,MAAMC,UAAU,GAAG,CAAC,GAAGV,IAAI,CAAC,CACzBW,MAAM,CAACN,GAAG,IAAIG,cAAc,CAACH,GAAG,CAAC,KAAKb,QAAQ,CAAC,CAC/CoB,IAAI,CAAC,CAACC,IAAI,EAAEC,IAAI,KAAK;IACpB,IAAID,IAAI,CAACE,UAAU,CAAC,UAAU,CAAC,EAAE;MAC/B,OAAO,CAAC,CAAC;IACX,CAAC,MAAM,IAAID,IAAI,CAACC,UAAU,CAAC,UAAU,CAAC,EAAE;MACtC,OAAO,CAAC,CAAC;IACX;IACA,OAAO,CAAC;EACV,CAAC,CAAC;EACJ,OAAO7B,MAAM;AACf;AACA;AACA;AACA,MAAMwB,UAAU,CAACM,GAAG,CAACX,GAAG,IAAI;IACtB,MAAMY,KAAK,GAAGT,cAAc,CAACH,GAAG,CAAC;IACjC,IAAI,CAACY,KAAK,EAAE;MAAE,MAAM,IAAIC,KAAK,CAAC,gBAAgBb,GAAG,EAAE,CAAC;IAAE;IACtD,OAAO,YAAYhB,EAAE,CAAC4B,KAAK,CAAC,YAAYZ,GAAG,IAAI;EACjD,CAAC,CAAC,CAACc,IAAI,CAAC,IAAI,CAAC;AACjB;AACA,MAAMjB,iBAAiB,CAACkB,YAAY;AACpC,mBAAmB/B,EAAE,CAACG,QAAQ,CAAC,MAAMO,IAAI,KAAKG,iBAAiB,CAACmB,aAAa;AAC7E,kBAAkBhC,EAAE,CAACG,QAAQ,CAAC,2BAA2BH,EAAE,CAACG,QAAQ,CAAC;AACrE,mBAAmBH,EAAE,CAACG,QAAQ,CAAC,6BAA6BH,EAAE,CAACG,QAAQ,CAAC;AACxE,kBAAkBH,EAAE,CAACG,QAAQ,CAAC,qCAAqCH,EAAE,CAACG,QAAQ,CAAC;AAC/E,GAAG;AACH,CAAC","ignoreList":[]}

@@ -16,2 +16,3 @@ /* Copyright (c) Fortanix, Inc.

};
const id = GenResultUtil.encodeIdentifier;

@@ -196,4 +197,4 @@ // Transform the given `schema` by reordering object fields according the given `ordering` spec.

${schemaExportComment ? `${schemaExportComment}\n` : ''}${typeof definitionSpec.typeDeclaration === 'string'
//? `export const ${targetSchemaId}: S.Schema<${targetSchemaId}> = ` // Replaced with suspend annotations
? `export const ${targetSchemaId} = ` : `export const ${targetSchemaId} = `}${
//? `export const ${id(targetSchemaId)}: S.Schema<${id(targetSchemaId)}> = ` // Replaced with suspend annotations
? `export const ${id(targetSchemaId)} = ` : `export const ${id(targetSchemaId)} = `}${
//definitionSpec.lazy ? `S.suspend(() => ${code});` : code // Replaced with suspend annotations

@@ -204,7 +205,7 @@ code}; ${commentsGenerated.commentInline}

codeExports += dedent`
export type ${targetSchemaId} = ${definitionSpec.typeDeclaration};
export type ${id(targetSchemaId)} = ${definitionSpec.typeDeclaration};
`;
} else {
codeExports += dedent`
export type ${targetSchemaId} = S.Schema.Type<typeof ${targetSchemaId}>;
export type ${id(targetSchemaId)} = S.Schema.Type<typeof ${id(targetSchemaId)}>;
`;

@@ -236,3 +237,3 @@ }

codeExports += dedent`
/* ${targetSchemaId} */
/* ${id(targetSchemaId)} */
${commentsGenerated.commentBlock}

@@ -244,5 +245,5 @@ ${sourceSchemaId === targetSchemaId ? '' : `// Generated from OpenAPI \`${sourceSchemaId}\` schema`}

if (typeof definitionSpec.typeDeclaration === 'string') {
codeExports += `type _${targetSchemaId} = ${definitionSpec.typeDeclaration};`;
codeExports += `type _${id(targetSchemaId)} = ${definitionSpec.typeDeclaration};`;
if (typeof definitionSpec.typeDeclarationEncoded === 'string') {
codeExports += `type _${targetSchemaId}Encoded = ${definitionSpec.typeDeclarationEncoded};`;
codeExports += `type _${id(targetSchemaId)}Encoded = ${definitionSpec.typeDeclarationEncoded};`;
}

@@ -254,4 +255,4 @@ }

typeof definitionSpec.typeDeclarationEncoded === 'string'
? `: S.Schema<_${targetSchemaId}, _${targetSchemaId}Encoded>`
: `: S.Schema<_${targetSchemaId}>`
? `: S.Schema<_${id(targetSchemaId)}, _${id(targetSchemaId)}Encoded>`
: `: S.Schema<_${id(targetSchemaId)}>`
)

@@ -274,10 +275,10 @@ : '';

codeExports += dedent`
const _${targetSchemaId}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}
export interface ${targetSchemaId} extends S.Schema.Type<typeof _${targetSchemaId}> {}
export interface ${targetSchemaId}Encoded extends S.Schema.Encoded<typeof _${targetSchemaId}> {}
export const ${targetSchemaId}: S.Schema<${targetSchemaId}, ${targetSchemaId}Encoded> = _${targetSchemaId};
const _${id(targetSchemaId)}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}
export interface ${id(targetSchemaId)} extends S.Schema.Type<typeof _${id(targetSchemaId)}> {}
export interface ${id(targetSchemaId)}Encoded extends S.Schema.Encoded<typeof _${id(targetSchemaId)}> {}
export const ${id(targetSchemaId)}: S.Schema<${id(targetSchemaId)}, ${id(targetSchemaId)}Encoded> = _${id(targetSchemaId)};
`.trim();
/* To generate the runtime encoded schema:
export const ${targetSchemaId}Encoded: S.Schema<${targetSchemaId}Encoded, ${targetSchemaId}Encoded> =
S.encodedSchema(_${targetSchemaId});
export const ${id(targetSchemaId)}Encoded: S.Schema<${id(targetSchemaId)}Encoded, ${id(targetSchemaId)}Encoded> =
S.encodedSchema(_${id(targetSchemaId)});
*/

@@ -287,3 +288,3 @@ } else if (shouldGenerateOpaqueClass) {

codeExports += dedent`
export class ${targetSchemaId} extends S.Class<${targetSchemaId}>("${targetSchemaId}")(
export class ${id(targetSchemaId)} extends S.Class<${id(targetSchemaId)}>("${id(targetSchemaId)}")(
${code.replace(/^S\.Struct\(/, '').replace(/\),?$/, '')}

@@ -294,8 +295,8 @@ ) {}

codeExports += dedent`
export const ${targetSchemaId}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}
export type ${targetSchemaId} = S.Schema.Type<typeof ${targetSchemaId}>;
export type ${targetSchemaId}Encoded = S.Schema.Encoded<typeof ${targetSchemaId}>;
export const ${id(targetSchemaId)}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}
export type ${id(targetSchemaId)} = S.Schema.Type<typeof ${id(targetSchemaId)}>;
export type ${id(targetSchemaId)}Encoded = S.Schema.Encoded<typeof ${id(targetSchemaId)}>;
`.trim();
/* To generate the runtime encoded schema:
export const ${targetSchemaId}Encoded = S.encodedSchema(${targetSchemaId});
export const ${id(targetSchemaId)}Encoded = S.encodedSchema(${id(targetSchemaId)});
*/

@@ -339,3 +340,3 @@ }

}
return `import { ${targetSchemaId} } from '${modulePathRelative}';`;
return `import { ${id(targetSchemaId)} } from '${modulePathRelative}';`;
} else {

@@ -342,0 +343,0 @@ return `// MISSING ${sourceSchemaId}`;

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

{"version":3,"file":"moduleGenWithSpec.mjs","names":["dedent","path","GenSpec","GenResultUtil","generateForSchema","assertUnreachable","x","Error","reorderFields","fieldGroups","schema","TypeError","allOf","map","oneOf","anyOf","type","properties","orderingKeys","Set","Object","values","flatMap","fieldGroup","keys","fieldNames","split","orderingHeadings","entries","reduce","acc","fieldGroupKey","fieldGroupNames","fieldInitial","fromEntries","filter","propKey","includes","sort","prop1Key","prop2Key","indexOf","prop","hasOwn","processSchemaWithSpec","spec","action","fields","generateModuleWithSpec","schemas","modulePath","options","generationContext","hooks","isSchemaIdBefore","schemaId","specModules","runtime","modules","moduleSpec","schemaIds","definitions","def","DefUtil","sourceSchemaIdFromDef","schemasToDefinitionsMap","Map","definition","has","set","codeExports","refsModule","definitionSpec","targetSchemaId","targetSchemaIdFromDef","generationContextForSchema","referencedSchemaId","isSchemaBefore","code","sourceSchemaId","refs","comments","commentsGenerated","commentsToCode","combineRefs","schemaExportComment","commentBlock","trim","typeDeclaration","commentInline","schemaRaw","replace","typeDeclarationEncoded","typeAnnotation","schemaCode","JSON","stringify","shouldGenerateOpaqueStruct","shouldGenerateOpaqueClass","refsSorted","ref","importName","importNameFromRef","ref1","ref2","codeImports","definitionLocator","get","modulePathRelative","relative","dirname","startsWith","join"],"sources":["../../../../src/generation/effSchemGen/moduleGenWithSpec.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 * as path from 'node:path';\nimport { type OpenApiRef, type OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport { refFromSchemaId, isObjectSchema } from '../../analysis/GraphAnalyzer.ts';\nimport * as GenSpec from '../generationSpec.ts';\nimport { type GenResult, GenResultUtil } from './genUtil.ts';\nimport { type Context as SchemaGenContext, generateForSchema } from './schemaGen.ts';\n\n\nconst assertUnreachable = (x: never): never => { throw new Error(`Should not happen`); };\n\n\n// Transform the given `schema` by reordering object fields according the given `ordering` spec.\n// @throws TypeError When `schema` is not an object schema.\nconst reorderFields = (fieldGroups: GenSpec.FieldGroups, schema: OpenApiSchema): OpenApiSchema => {\n // We assume the `schema` is an object schema (or close enough to one). If `schema` is an allOf/oneOf/anyOf then\n // we reorder all of the possibilities.\n \n if ('$ref' in schema) { // Case: OpenAPIV3.ReferenceObject\n throw new TypeError(`Not an object schema`);\n } else { // Case: OpenAPIV3.SchemaObject\n if ('items' in schema) { // Case: OpenAPIV3.ArraySchemaObject\n throw new TypeError(`Not an object schema`);\n } else { // Case: OpenAPIV3.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return { ...schema, allOf: schema.allOf.map(schema => reorderFields(fieldGroups, schema)) };\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return { ...schema, oneOf: schema.oneOf.map(schema => reorderFields(fieldGroups, schema)) };\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return { ...schema, anyOf: schema.anyOf.map(schema => reorderFields(fieldGroups, schema)) };\n }\n \n if (schema.type !== 'object') {\n throw new TypeError(`Not an object schema`);\n }\n \n // Reorder `properties` (if any)\n // Note: we don't care about `required` or `additionalProperties` here\n \n const properties: undefined | Record<string, OpenApiSchema> = schema.properties;\n if (typeof properties === 'undefined') { return schema; }\n \n // Prep: get the list of all keys across all groups, for quick lookup purposes\n const orderingKeys: Array<string> = [...new Set(Object.values(fieldGroups).flatMap(fieldGroup => {\n // Each key may be a comma-separated string of field names\n return Object.keys(fieldGroup).flatMap(fieldNames => fieldNames.split(/,\\s*/));\n }))];\n \n // FIXME\n // const groupHeadingComment: null | string = groupKey.startsWith('//')\n // ? groupKey.replace('//', '').trim()\n // : null;\n \n // Get a mapping of the initial fields in the group to the group name (for later annotation purposes)\n const orderingHeadings = Object.entries(fieldGroups).reduce(\n (acc, [fieldGroupKey, fieldGroup]) => {\n const fieldGroupNames = Object.keys(fieldGroup).flatMap(fieldNames => fieldNames.split(/,\\s*/));\n \n // Get the first field in the list (this field will be annotated to identify where the group starts)\n const fieldInitial: undefined | string = fieldGroupNames[0];\n \n if (typeof fieldInitial === 'string') {\n acc[fieldInitial] = fieldGroupKey;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n \n return {\n ...schema,\n properties: Object.fromEntries(Object.entries(properties)\n .filter(([propKey]) => orderingKeys.includes(propKey))\n .sort(([prop1Key], [prop2Key]) => {\n return orderingKeys.indexOf(prop1Key) - orderingKeys.indexOf(prop2Key);\n })\n .map(([propKey, prop]) => {\n if (Object.hasOwn(orderingHeadings, propKey)) {\n return [propKey, { ...prop, 'x-heading': orderingHeadings[propKey] }];\n } else {\n return [propKey, prop];\n }\n }),\n ),\n };\n }\n }\n};\nconst processSchemaWithSpec = (spec: GenSpec.GenerationDefinitionSpec, schema: OpenApiSchema): OpenApiSchema => {\n if (spec.action !== 'generate-schema') { return schema; }\n \n const fields: undefined | GenSpec.FieldGroups = spec.fields;\n if (typeof fields !== 'undefined') {\n return reorderFields(fields, schema);\n }\n \n return schema;\n};\n\n// Generate an @effect/schema module for the given module as per the given module spec\ntype GenerateModuleWithSpecOptions = {\n // Whether `schema1` is before `schema2` in the generation order\n isSchemaBefore: (schema1: OpenApiSchemaId, schema2: OpenApiSchemaId) => boolean,\n};\nexport const generateModuleWithSpec = (\n schemas: Record<string, OpenApiSchema>, // All available source schemas (may contain ones we don't need)\n spec: GenSpec.GenerationSpec, // The (full) generation spec\n modulePath: GenSpec.ModulePath, // The specific module we want to generate\n options: GenerateModuleWithSpecOptions,\n): string => {\n const generationContext: SchemaGenContext = {\n schemas,\n hooks: spec.hooks,\n isSchemaIdBefore: (schemaId: OpenApiSchemaId): boolean => {\n return true;\n },\n };\n \n const specModules = { ...spec.runtime, ...spec.modules };\n \n const moduleSpec: undefined | GenSpec.GenerationModuleSpec = specModules[modulePath];\n if (typeof moduleSpec === 'undefined') { throw new Error(`Cannot find definition for module ${modulePath}`); }\n \n // Derive the list of all schema IDs from `schemas`\n const schemaIds: Set<OpenApiSchemaId> = new Set(moduleSpec.definitions.map((def): OpenApiSchemaId => {\n return GenSpec.DefUtil.sourceSchemaIdFromDef(def);\n }));\n \n // Reverse mapping of schema IDs to the first definition that contains it\n type DefinitionLocator = { modulePath: GenSpec.ModulePath, definition: GenSpec.GenerationDefinitionSpec };\n const schemasToDefinitionsMap: Map<OpenApiSchemaId, DefinitionLocator> = new Map();\n for (const [modulePath, moduleSpec] of Object.entries(specModules)) {\n for (const definition of moduleSpec.definitions) {\n const schemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definition);\n if (!schemasToDefinitionsMap.has(schemaId)) {\n schemasToDefinitionsMap.set(schemaId, { modulePath, definition });\n }\n }\n }\n \n let codeExports = '';\n let refsModule: GenResult['refs'] = [];\n for (const definitionSpec of moduleSpec.definitions) {\n const targetSchemaId = GenSpec.DefUtil.targetSchemaIdFromDef(definitionSpec);\n \n const generationContextForSchema: SchemaGenContext = {\n ...generationContext,\n isSchemaIdBefore: (referencedSchemaId: OpenApiSchemaId): boolean => {\n return options.isSchemaBefore(referencedSchemaId, targetSchemaId);\n \n // const referencedDef = schemasToDefinitionsMap.get(referencedSchemaId);\n // if (!referencedDef) { return false; }\n // const defs = moduleSpec.definitions;\n // \n // console.log('YYY', referencedSchemaId, '<-', targetSchemaId, referencedDef.definition);\n // if (defs.indexOf(referencedDef.definition) >= defs.indexOf(definitionSpec)) {\n // console.log('XXX', referencedSchemaId, '>=', targetSchemaId);\n // }\n // \n // return defs.indexOf(referencedDef.definition) < defs.indexOf(definitionSpec);\n },\n };\n \n switch (definitionSpec.action) {\n case 'custom-code': {\n codeExports = definitionSpec.code;\n break;\n };\n case 'custom-schema': {\n const schema: OpenApiSchema = definitionSpec.schema;\n const sourceSchemaId: OpenApiSchemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definitionSpec);\n \n const { code, refs, comments } = generateForSchema(generationContextForSchema, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n refsModule = GenResultUtil.combineRefs(refsModule, refs);\n \n const schemaExportComment: string = dedent`\n ${commentsGenerated.commentBlock}\n ${sourceSchemaId === targetSchemaId ? '' : `// Generated from OpenAPI \\`${sourceSchemaId}\\` schema`}\n `.trim();\n \n codeExports += '\\n\\n' + dedent`\n ${schemaExportComment ? `${schemaExportComment}\\n` : ''}${\n typeof definitionSpec.typeDeclaration === 'string'\n //? `export const ${targetSchemaId}: S.Schema<${targetSchemaId}> = ` // Replaced with suspend annotations\n ? `export const ${targetSchemaId} = `\n : `export const ${targetSchemaId} = `\n }${\n //definitionSpec.lazy ? `S.suspend(() => ${code});` : code // Replaced with suspend annotations\n code\n }; ${commentsGenerated.commentInline}\n `.trim();\n if (typeof definitionSpec.typeDeclaration === 'string') {\n codeExports += dedent`\n export type ${targetSchemaId} = ${definitionSpec.typeDeclaration};\n `;\n } else {\n codeExports += dedent`\n export type ${targetSchemaId} = S.Schema.Type<typeof ${targetSchemaId}>;\n `;\n }\n break;\n };\n case 'generate-schema': {\n const sourceSchemaId: OpenApiSchemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definitionSpec);\n const schemaRaw: undefined | OpenApiSchema = schemas[sourceSchemaId];\n if (!schemaRaw) { throw new Error(`Could not find a schema named ${sourceSchemaId}`) }\n const schema: OpenApiSchema = processSchemaWithSpec(definitionSpec, schemaRaw);\n \n const { code, refs, comments } = generateForSchema(generationContextForSchema, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n refsModule = GenResultUtil.combineRefs(refsModule, refs);\n \n \n // Start generating the schema exports\n codeExports += '\\n\\n';\n \n // Comments\n codeExports += dedent`\n /* ${targetSchemaId} */\n ${commentsGenerated.commentBlock}\n ${sourceSchemaId === targetSchemaId ? '' : `// Generated from OpenAPI \\`${sourceSchemaId}\\` schema`}\n `.replace(/[\\n]+/, '\\n') + '\\n';\n \n // Manual type declarations (for recursive references)\n if (typeof definitionSpec.typeDeclaration === 'string') {\n codeExports += `type _${targetSchemaId} = ${definitionSpec.typeDeclaration};`;\n if (typeof definitionSpec.typeDeclarationEncoded === 'string') {\n codeExports += `type _${targetSchemaId}Encoded = ${definitionSpec.typeDeclarationEncoded};`;\n }\n }\n /*\n const typeAnnotation = typeof definitionSpec.typeDeclaration === 'string'\n ? (\n typeof definitionSpec.typeDeclarationEncoded === 'string'\n ? `: S.Schema<_${targetSchemaId}, _${targetSchemaId}Encoded>`\n : `: S.Schema<_${targetSchemaId}>`\n )\n : '';\n */\n const typeAnnotation = ''; // Replaced with suspend annotations\n \n const schemaCode = dedent`\n ${\n //definitionSpec.lazy ? `S.suspend(() => ${code})` : code // Replaced with suspend annotations\n code\n }\n .annotations({ identifier: ${JSON.stringify(targetSchemaId)} })\n `.trim();\n \n // See: https://github.com/Effect-TS/effect/tree/main/packages/schema#understanding-opaque-names\n const shouldGenerateOpaqueStruct = false;//isObjectSchema(schemas, refFromSchemaId(sourceSchemaId));\n const shouldGenerateOpaqueClass = false; //isObjectSchema(schemas, refFromSchemaId(sourceSchemaId)) && /^S.Struct/.test(code);\n if (shouldGenerateOpaqueStruct) {\n codeExports += dedent`\n const _${targetSchemaId}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}\n export interface ${targetSchemaId} extends S.Schema.Type<typeof _${targetSchemaId}> {}\n export interface ${targetSchemaId}Encoded extends S.Schema.Encoded<typeof _${targetSchemaId}> {}\n export const ${targetSchemaId}: S.Schema<${targetSchemaId}, ${targetSchemaId}Encoded> = _${targetSchemaId};\n `.trim();\n /* To generate the runtime encoded schema:\n export const ${targetSchemaId}Encoded: S.Schema<${targetSchemaId}Encoded, ${targetSchemaId}Encoded> =\n S.encodedSchema(_${targetSchemaId});\n */\n } else if (shouldGenerateOpaqueClass) {\n // Experimental: generate a top level Struct as a class (for better opaque types)\n codeExports += dedent`\n export class ${targetSchemaId} extends S.Class<${targetSchemaId}>(\"${targetSchemaId}\")(\n ${code.replace(/^S\\.Struct\\(/, '').replace(/\\),?$/, '')}\n ) {}\n `.trim();\n } else {\n codeExports += dedent`\n export const ${targetSchemaId}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}\n export type ${targetSchemaId} = S.Schema.Type<typeof ${targetSchemaId}>;\n export type ${targetSchemaId}Encoded = S.Schema.Encoded<typeof ${targetSchemaId}>;\n `.trim();\n /* To generate the runtime encoded schema:\n export const ${targetSchemaId}Encoded = S.encodedSchema(${targetSchemaId});\n */\n }\n break;\n };\n default: assertUnreachable(definitionSpec);\n }\n }\n \n const refsSorted = [...refsModule]\n .filter(ref => {\n // Filter out imports that are already part of this file\n const importName = GenResultUtil.importNameFromRef(ref);\n return !schemaIds.has(importName);\n })\n .sort((ref1, ref2) => {\n // Sort certain imports at the top\n // FIXME: unhardcode this logic somehow\n if (ref1.includes('/util/')) {\n return -1;\n } else if (ref2.includes('/util/')) {\n return +1;\n }\n return 0;\n });\n \n const codeImports = dedent`\n ${refsSorted.map(ref => {\n const sourceSchemaId: OpenApiSchemaId = GenResultUtil.importNameFromRef(ref); // Get the source schema ID\n \n // Try to reverse-map this schema ID to one of the spec's definitions\n const definitionLocator: undefined | DefinitionLocator = schemasToDefinitionsMap.get(sourceSchemaId);\n \n if (typeof definitionLocator !== 'undefined') {\n const targetSchemaId = GenSpec.DefUtil.targetSchemaIdFromDef(definitionLocator.definition);\n \n // Calculate the relative path to the module\n let modulePathRelative = path.relative(path.dirname(modulePath), definitionLocator.modulePath);\n if (!modulePathRelative.startsWith('.')) { // Ensure the path starts with a `.` (ESM import paths require it)\n modulePathRelative = './' + modulePathRelative;\n }\n \n return `import { ${targetSchemaId} } from '${modulePathRelative}';`;\n } else {\n return `// MISSING ${sourceSchemaId}`;\n //return `import { ${sourceSchemaId} } from '${ref}';`;\n }\n }).join('\\n')}\n `;\n \n // TODO: may want to add a comment at the top like:\n // /* Generated on ${new Date().toISOString()} from ${apiName} version ${apiVersion} */\n // Currently leaving this out because it means even simple changes cause a git diff upon regeneration.\n return dedent`\n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${codeImports}\n \n ${codeExports}\n `;\n};\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"moduleGenWithSpec.mjs","names":["dedent","path","GenSpec","GenResultUtil","generateForSchema","assertUnreachable","x","Error","id","encodeIdentifier","reorderFields","fieldGroups","schema","TypeError","allOf","map","oneOf","anyOf","type","properties","orderingKeys","Set","Object","values","flatMap","fieldGroup","keys","fieldNames","split","orderingHeadings","entries","reduce","acc","fieldGroupKey","fieldGroupNames","fieldInitial","fromEntries","filter","propKey","includes","sort","prop1Key","prop2Key","indexOf","prop","hasOwn","processSchemaWithSpec","spec","action","fields","generateModuleWithSpec","schemas","modulePath","options","generationContext","hooks","isSchemaIdBefore","schemaId","specModules","runtime","modules","moduleSpec","schemaIds","definitions","def","DefUtil","sourceSchemaIdFromDef","schemasToDefinitionsMap","Map","definition","has","set","codeExports","refsModule","definitionSpec","targetSchemaId","targetSchemaIdFromDef","generationContextForSchema","referencedSchemaId","isSchemaBefore","code","sourceSchemaId","refs","comments","commentsGenerated","commentsToCode","combineRefs","schemaExportComment","commentBlock","trim","typeDeclaration","commentInline","schemaRaw","replace","typeDeclarationEncoded","typeAnnotation","schemaCode","JSON","stringify","shouldGenerateOpaqueStruct","shouldGenerateOpaqueClass","refsSorted","ref","importName","importNameFromRef","ref1","ref2","codeImports","definitionLocator","get","modulePathRelative","relative","dirname","startsWith","join"],"sources":["../../../../src/generation/effSchemGen/moduleGenWithSpec.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 * as path from 'node:path';\nimport { type OpenApiRef, type OpenApiSchemaId, type OpenApiSchema } from '../../util/openapi.ts';\n\nimport { refFromSchemaId, isObjectSchema } from '../../analysis/GraphAnalyzer.ts';\nimport * as GenSpec from '../generationSpec.ts';\nimport { type GenResult, GenResultUtil } from './genUtil.ts';\nimport { type Context as SchemaGenContext, generateForSchema } from './schemaGen.ts';\n\n\nconst assertUnreachable = (x: never): never => { throw new Error(`Should not happen`); };\nconst id = GenResultUtil.encodeIdentifier;\n\n\n// Transform the given `schema` by reordering object fields according the given `ordering` spec.\n// @throws TypeError When `schema` is not an object schema.\nconst reorderFields = (fieldGroups: GenSpec.FieldGroups, schema: OpenApiSchema): OpenApiSchema => {\n // We assume the `schema` is an object schema (or close enough to one). If `schema` is an allOf/oneOf/anyOf then\n // we reorder all of the possibilities.\n \n if ('$ref' in schema) { // Case: OpenAPIV3.ReferenceObject\n throw new TypeError(`Not an object schema`);\n } else { // Case: OpenAPIV3.SchemaObject\n if ('items' in schema) { // Case: OpenAPIV3.ArraySchemaObject\n throw new TypeError(`Not an object schema`);\n } else { // Case: OpenAPIV3.NonArraySchemaObject\n if ('allOf' in schema && typeof schema.allOf !== 'undefined') {\n return { ...schema, allOf: schema.allOf.map(schema => reorderFields(fieldGroups, schema)) };\n } else if ('oneOf' in schema && typeof schema.oneOf !== 'undefined') {\n return { ...schema, oneOf: schema.oneOf.map(schema => reorderFields(fieldGroups, schema)) };\n } else if ('anyOf' in schema && typeof schema.anyOf !== 'undefined') {\n return { ...schema, anyOf: schema.anyOf.map(schema => reorderFields(fieldGroups, schema)) };\n }\n \n if (schema.type !== 'object') {\n throw new TypeError(`Not an object schema`);\n }\n \n // Reorder `properties` (if any)\n // Note: we don't care about `required` or `additionalProperties` here\n \n const properties: undefined | Record<string, OpenApiSchema> = schema.properties;\n if (typeof properties === 'undefined') { return schema; }\n \n // Prep: get the list of all keys across all groups, for quick lookup purposes\n const orderingKeys: Array<string> = [...new Set(Object.values(fieldGroups).flatMap(fieldGroup => {\n // Each key may be a comma-separated string of field names\n return Object.keys(fieldGroup).flatMap(fieldNames => fieldNames.split(/,\\s*/));\n }))];\n \n // FIXME\n // const groupHeadingComment: null | string = groupKey.startsWith('//')\n // ? groupKey.replace('//', '').trim()\n // : null;\n \n // Get a mapping of the initial fields in the group to the group name (for later annotation purposes)\n const orderingHeadings = Object.entries(fieldGroups).reduce(\n (acc, [fieldGroupKey, fieldGroup]) => {\n const fieldGroupNames = Object.keys(fieldGroup).flatMap(fieldNames => fieldNames.split(/,\\s*/));\n \n // Get the first field in the list (this field will be annotated to identify where the group starts)\n const fieldInitial: undefined | string = fieldGroupNames[0];\n \n if (typeof fieldInitial === 'string') {\n acc[fieldInitial] = fieldGroupKey;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n \n return {\n ...schema,\n properties: Object.fromEntries(Object.entries(properties)\n .filter(([propKey]) => orderingKeys.includes(propKey))\n .sort(([prop1Key], [prop2Key]) => {\n return orderingKeys.indexOf(prop1Key) - orderingKeys.indexOf(prop2Key);\n })\n .map(([propKey, prop]) => {\n if (Object.hasOwn(orderingHeadings, propKey)) {\n return [propKey, { ...prop, 'x-heading': orderingHeadings[propKey] }];\n } else {\n return [propKey, prop];\n }\n }),\n ),\n };\n }\n }\n};\nconst processSchemaWithSpec = (spec: GenSpec.GenerationDefinitionSpec, schema: OpenApiSchema): OpenApiSchema => {\n if (spec.action !== 'generate-schema') { return schema; }\n \n const fields: undefined | GenSpec.FieldGroups = spec.fields;\n if (typeof fields !== 'undefined') {\n return reorderFields(fields, schema);\n }\n \n return schema;\n};\n\n// Generate an @effect/schema module for the given module as per the given module spec\ntype GenerateModuleWithSpecOptions = {\n // Whether `schema1` is before `schema2` in the generation order\n isSchemaBefore: (schema1: OpenApiSchemaId, schema2: OpenApiSchemaId) => boolean,\n};\nexport const generateModuleWithSpec = (\n schemas: Record<string, OpenApiSchema>, // All available source schemas (may contain ones we don't need)\n spec: GenSpec.GenerationSpec, // The (full) generation spec\n modulePath: GenSpec.ModulePath, // The specific module we want to generate\n options: GenerateModuleWithSpecOptions,\n): string => {\n const generationContext: SchemaGenContext = {\n schemas,\n hooks: spec.hooks,\n isSchemaIdBefore: (schemaId: OpenApiSchemaId): boolean => {\n return true;\n },\n };\n \n const specModules = { ...spec.runtime, ...spec.modules };\n \n const moduleSpec: undefined | GenSpec.GenerationModuleSpec = specModules[modulePath];\n if (typeof moduleSpec === 'undefined') { throw new Error(`Cannot find definition for module ${modulePath}`); }\n \n // Derive the list of all schema IDs from `schemas`\n const schemaIds: Set<OpenApiSchemaId> = new Set(moduleSpec.definitions.map((def): OpenApiSchemaId => {\n return GenSpec.DefUtil.sourceSchemaIdFromDef(def);\n }));\n \n // Reverse mapping of schema IDs to the first definition that contains it\n type DefinitionLocator = { modulePath: GenSpec.ModulePath, definition: GenSpec.GenerationDefinitionSpec };\n const schemasToDefinitionsMap: Map<OpenApiSchemaId, DefinitionLocator> = new Map();\n for (const [modulePath, moduleSpec] of Object.entries(specModules)) {\n for (const definition of moduleSpec.definitions) {\n const schemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definition);\n if (!schemasToDefinitionsMap.has(schemaId)) {\n schemasToDefinitionsMap.set(schemaId, { modulePath, definition });\n }\n }\n }\n \n let codeExports = '';\n let refsModule: GenResult['refs'] = [];\n for (const definitionSpec of moduleSpec.definitions) {\n const targetSchemaId = GenSpec.DefUtil.targetSchemaIdFromDef(definitionSpec);\n \n const generationContextForSchema: SchemaGenContext = {\n ...generationContext,\n isSchemaIdBefore: (referencedSchemaId: OpenApiSchemaId): boolean => {\n return options.isSchemaBefore(referencedSchemaId, targetSchemaId);\n \n // const referencedDef = schemasToDefinitionsMap.get(referencedSchemaId);\n // if (!referencedDef) { return false; }\n // const defs = moduleSpec.definitions;\n // \n // console.log('YYY', referencedSchemaId, '<-', targetSchemaId, referencedDef.definition);\n // if (defs.indexOf(referencedDef.definition) >= defs.indexOf(definitionSpec)) {\n // console.log('XXX', referencedSchemaId, '>=', targetSchemaId);\n // }\n // \n // return defs.indexOf(referencedDef.definition) < defs.indexOf(definitionSpec);\n },\n };\n \n switch (definitionSpec.action) {\n case 'custom-code': {\n codeExports = definitionSpec.code;\n break;\n };\n case 'custom-schema': {\n const schema: OpenApiSchema = definitionSpec.schema;\n const sourceSchemaId: OpenApiSchemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definitionSpec);\n \n const { code, refs, comments } = generateForSchema(generationContextForSchema, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n refsModule = GenResultUtil.combineRefs(refsModule, refs);\n \n const schemaExportComment: string = dedent`\n ${commentsGenerated.commentBlock}\n ${sourceSchemaId === targetSchemaId ? '' : `// Generated from OpenAPI \\`${sourceSchemaId}\\` schema`}\n `.trim();\n \n codeExports += '\\n\\n' + dedent`\n ${schemaExportComment ? `${schemaExportComment}\\n` : ''}${\n typeof definitionSpec.typeDeclaration === 'string'\n //? `export const ${id(targetSchemaId)}: S.Schema<${id(targetSchemaId)}> = ` // Replaced with suspend annotations\n ? `export const ${id(targetSchemaId)} = `\n : `export const ${id(targetSchemaId)} = `\n }${\n //definitionSpec.lazy ? `S.suspend(() => ${code});` : code // Replaced with suspend annotations\n code\n }; ${commentsGenerated.commentInline}\n `.trim();\n if (typeof definitionSpec.typeDeclaration === 'string') {\n codeExports += dedent`\n export type ${id(targetSchemaId)} = ${definitionSpec.typeDeclaration};\n `;\n } else {\n codeExports += dedent`\n export type ${id(targetSchemaId)} = S.Schema.Type<typeof ${id(targetSchemaId)}>;\n `;\n }\n break;\n };\n case 'generate-schema': {\n const sourceSchemaId: OpenApiSchemaId = GenSpec.DefUtil.sourceSchemaIdFromDef(definitionSpec);\n const schemaRaw: undefined | OpenApiSchema = schemas[sourceSchemaId];\n if (!schemaRaw) { throw new Error(`Could not find a schema named ${sourceSchemaId}`) }\n const schema: OpenApiSchema = processSchemaWithSpec(definitionSpec, schemaRaw);\n \n const { code, refs, comments } = generateForSchema(generationContextForSchema, schema);\n const commentsGenerated = GenResultUtil.commentsToCode(comments);\n \n refsModule = GenResultUtil.combineRefs(refsModule, refs);\n \n \n // Start generating the schema exports\n codeExports += '\\n\\n';\n \n // Comments\n codeExports += dedent`\n /* ${id(targetSchemaId)} */\n ${commentsGenerated.commentBlock}\n ${sourceSchemaId === targetSchemaId ? '' : `// Generated from OpenAPI \\`${sourceSchemaId}\\` schema`}\n `.replace(/[\\n]+/, '\\n') + '\\n';\n \n // Manual type declarations (for recursive references)\n if (typeof definitionSpec.typeDeclaration === 'string') {\n codeExports += `type _${id(targetSchemaId)} = ${definitionSpec.typeDeclaration};`;\n if (typeof definitionSpec.typeDeclarationEncoded === 'string') {\n codeExports += `type _${id(targetSchemaId)}Encoded = ${definitionSpec.typeDeclarationEncoded};`;\n }\n }\n /*\n const typeAnnotation = typeof definitionSpec.typeDeclaration === 'string'\n ? (\n typeof definitionSpec.typeDeclarationEncoded === 'string'\n ? `: S.Schema<_${id(targetSchemaId)}, _${id(targetSchemaId)}Encoded>`\n : `: S.Schema<_${id(targetSchemaId)}>`\n )\n : '';\n */\n const typeAnnotation = ''; // Replaced with suspend annotations\n \n const schemaCode = dedent`\n ${\n //definitionSpec.lazy ? `S.suspend(() => ${code})` : code // Replaced with suspend annotations\n code\n }\n .annotations({ identifier: ${JSON.stringify(targetSchemaId)} })\n `.trim();\n \n // See: https://github.com/Effect-TS/effect/tree/main/packages/schema#understanding-opaque-names\n const shouldGenerateOpaqueStruct = false;//isObjectSchema(schemas, refFromSchemaId(sourceSchemaId));\n const shouldGenerateOpaqueClass = false; //isObjectSchema(schemas, refFromSchemaId(sourceSchemaId)) && /^S.Struct/.test(code);\n if (shouldGenerateOpaqueStruct) {\n codeExports += dedent`\n const _${id(targetSchemaId)}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}\n export interface ${id(targetSchemaId)} extends S.Schema.Type<typeof _${id(targetSchemaId)}> {}\n export interface ${id(targetSchemaId)}Encoded extends S.Schema.Encoded<typeof _${id(targetSchemaId)}> {}\n export const ${id(targetSchemaId)}: S.Schema<${id(targetSchemaId)}, ${id(targetSchemaId)}Encoded> = _${id(targetSchemaId)};\n `.trim();\n /* To generate the runtime encoded schema:\n export const ${id(targetSchemaId)}Encoded: S.Schema<${id(targetSchemaId)}Encoded, ${id(targetSchemaId)}Encoded> =\n S.encodedSchema(_${id(targetSchemaId)});\n */\n } else if (shouldGenerateOpaqueClass) {\n // Experimental: generate a top level Struct as a class (for better opaque types)\n codeExports += dedent`\n export class ${id(targetSchemaId)} extends S.Class<${id(targetSchemaId)}>(\"${id(targetSchemaId)}\")(\n ${code.replace(/^S\\.Struct\\(/, '').replace(/\\),?$/, '')}\n ) {}\n `.trim();\n } else {\n codeExports += dedent`\n export const ${id(targetSchemaId)}${typeAnnotation} = ${schemaCode}; ${commentsGenerated.commentInline}\n export type ${id(targetSchemaId)} = S.Schema.Type<typeof ${id(targetSchemaId)}>;\n export type ${id(targetSchemaId)}Encoded = S.Schema.Encoded<typeof ${id(targetSchemaId)}>;\n `.trim();\n /* To generate the runtime encoded schema:\n export const ${id(targetSchemaId)}Encoded = S.encodedSchema(${id(targetSchemaId)});\n */\n }\n break;\n };\n default: assertUnreachable(definitionSpec);\n }\n }\n \n const refsSorted = [...refsModule]\n .filter(ref => {\n // Filter out imports that are already part of this file\n const importName = GenResultUtil.importNameFromRef(ref);\n return !schemaIds.has(importName);\n })\n .sort((ref1, ref2) => {\n // Sort certain imports at the top\n // FIXME: unhardcode this logic somehow\n if (ref1.includes('/util/')) {\n return -1;\n } else if (ref2.includes('/util/')) {\n return +1;\n }\n return 0;\n });\n \n const codeImports = dedent`\n ${refsSorted.map(ref => {\n const sourceSchemaId: OpenApiSchemaId = GenResultUtil.importNameFromRef(ref); // Get the source schema ID\n \n // Try to reverse-map this schema ID to one of the spec's definitions\n const definitionLocator: undefined | DefinitionLocator = schemasToDefinitionsMap.get(sourceSchemaId);\n \n if (typeof definitionLocator !== 'undefined') {\n const targetSchemaId = GenSpec.DefUtil.targetSchemaIdFromDef(definitionLocator.definition);\n \n // Calculate the relative path to the module\n let modulePathRelative = path.relative(path.dirname(modulePath), definitionLocator.modulePath);\n if (!modulePathRelative.startsWith('.')) { // Ensure the path starts with a `.` (ESM import paths require it)\n modulePathRelative = './' + modulePathRelative;\n }\n \n return `import { ${id(targetSchemaId)} } from '${modulePathRelative}';`;\n } else {\n return `// MISSING ${sourceSchemaId}`;\n //return `import { ${sourceSchemaId} } from '${ref}';`;\n }\n }).join('\\n')}\n `;\n \n // TODO: may want to add a comment at the top like:\n // /* Generated on ${new Date().toISOString()} from ${apiName} version ${apiVersion} */\n // Currently leaving this out because it means even simple changes cause a git diff upon regeneration.\n return dedent`\n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${codeImports}\n \n ${codeExports}\n `;\n};\n"],"mappings":"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","ignoreList":[]}

@@ -34,2 +34,3 @@ function __transformExtension(filepath, extMapping) {

import * as fs from 'node:fs/promises';
import { AsyncLocalStorage } from 'node:async_hooks';
import { generateModule } from "./generation/effSchemGen/moduleGen.mjs";

@@ -46,2 +47,11 @@ import { generateModuleWithSpec } from "./generation/effSchemGen/moduleGenWithSpec.mjs";

const servicesStorage = new AsyncLocalStorage();
const getServices = () => {
const services = servicesStorage.getStore();
if (typeof services === 'undefined') {
throw new Error(`Missing services`);
}
return services;
};
// Parse an OpenAPI v3.1 document (in JSON format).

@@ -81,6 +91,7 @@ // @throws Error[code=ENOENT] When the document cannot be read.

// Generate one module per schema (does not support a spec file)
export const generateSchemas = async (request, {
logger
}) => {
export const generateSchemas = async request => {
const {
logger
} = getServices();
const {
document,

@@ -133,6 +144,7 @@ outputDirectory

// Generate schemas based on the given spec file
export const generateSchemasWithSpec = async (request, {
logger
}) => {
export const generateSchemasWithSpec = async request => {
const {
logger
} = getServices();
const {
document,

@@ -301,5 +313,7 @@ spec,

specPath
}, {
logger
}) => {
const {
logger
} = getServices();
// Note: the following could throw a `TypeError` exception if the paths are (syntactically) invalid, e.g. `//`

@@ -367,5 +381,6 @@ const documentUrl = new URL(documentPath, cwd);

};
const printUsage = ({
logger
}) => {
const printUsage = () => {
const {
logger
} = getServices();
logger.info(dedent`

@@ -379,11 +394,10 @@ Usage: openapi-to-effect [-h | --help] [--silent] <command> [<args>]

};
export const runGenerator = async (args, {
logger
}) => {
export const runGenerator = async args => {
const {
logger
} = getServices();
const documentPath = args.positionals[0];
const outputPath = args.positionals[1];
if (!documentPath || !outputPath) {
printUsage({
logger
});
printUsage();
return;

@@ -396,13 +410,7 @@ }

};
const request = await parseRequest(requestInput, {
logger
});
const request = await parseRequest(requestInput);
if (request.spec === null) {
await generateSchemas(request, {
logger
});
await generateSchemas(request);
} else {
await generateSchemasWithSpec(request, {
logger
});
await generateSchemasWithSpec(request);
}

@@ -415,11 +423,10 @@ logger.info('Done!');

// '#/components/schemas/BatchRequest'`
export const runAnalyzeDependencyTree = async (args, {
logger
}) => {
export const runAnalyzeDependencyTree = async args => {
const {
logger
} = getServices();
const documentPath = args.positionals[0];
const rootSchemaRef = args.positionals[1];
if (!documentPath || !rootSchemaRef) {
printUsage({
logger
});
printUsage();
return;

@@ -436,9 +443,2 @@ }

export const run = async argsRaw => {
// Services
const logger = {
info: console.info,
error: console.error,
log: console.log
};
// Ref: https://exploringjs.com/nodejs-shell-scripting/ch_node-util-parseargs.html

@@ -462,34 +462,34 @@ const args = parseArgs({

});
if (args.values.silent) {
logger.info = () => {};
}
const command = args.positionals[0] ?? null;
if (command === null || args.values.help) {
printUsage({
logger
});
return;
}
const argsForCommand = {
...args,
positionals: args.positionals.slice(1)
// Services
const logger = {
info: args.values.silent ? () => {} : console.info,
error: console.error,
log: console.log
};
switch (command) {
case 'gen':
await runGenerator(argsForCommand, {
logger
});
break;
case 'analyze:dependency-tree':
await runAnalyzeDependencyTree(argsForCommand, {
logger
});
break;
default:
logger.error(`Unknown command '${command}'\n`);
printUsage({
logger
});
break;
}
await servicesStorage.run({
logger
}, async () => {
const command = args.positionals[0] ?? null;
if (command === null || args.values.help) {
printUsage();
return;
}
const argsForCommand = {
...args,
positionals: args.positionals.slice(1)
};
switch (command) {
case 'gen':
await runGenerator(argsForCommand);
break;
case 'analyze:dependency-tree':
await runAnalyzeDependencyTree(argsForCommand);
break;
default:
logger.error(`Unknown command '${command}'\n`);
printUsage();
break;
}
});
};

@@ -496,0 +496,0 @@ const [_argExec, argScript, ...args] = process.argv; // First two arguments should be the executable + script

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

{"version":3,"file":"openapiToEffect.mjs","names":["__transformExtension","filepath","extMapping","startsWith","idx","lastIndexOf","includes","newExt","origExt","Object","entries","sort","a","b","length","endsWith","slice","dedent","parseArgs","path","fileURLToPath","pathToFileURL","fs","generateModule","generateModuleWithSpec","formatGeneratedCode","immutableJSONPatch","schemaIdFromRef","topologicalSort","dependencyTree","ensureTrailingSlash","replace","cwd","process","parseDocument","documentUrl","content","readFile","contentJson","JSON","parse","error","SyntaxError","Error","cause","isDocument","openapi","trim","documentVersion","generateSchemas","request","logger","document","outputDirectory","info","title","version","schemas","components","schemaId","schema","outputUrl","URL","relative","generatedCode","generatedCodeFormatted","writeFile","generateSchemasWithSpec","spec","schemasSorted","specParsed","generationMethod","method","modules","fromEntries","keys","map","definitions","action","ref","circularDependency","def","find","lazy","bundle","modulePath","_moduleSpec","runtime","isSchemaBefore","schema1","schema2","schema1Index","findIndex","schema2Index","mkdir","dirname","recursive","bundleName","bundleFormatted","Date","toISOString","generateBarrelFile","barrelContent","moduleSpec","barrelUrl","log","parseRequest","documentPath","outputPath","specPath","specUrl","stat","outputUrlStats","isDirectory","href","default","patch","Array","isArray","documentPatched","printUsage","runGenerator","args","positionals","requestInput","values","runAnalyzeDependencyTree","rootSchemaRef","tree","run","argsRaw","console","allowPositionals","options","help","type","short","silent","command","argsForCommand","_argExec","argScript","argv","realpath","import","meta","url","exit"],"sources":["../../src/openapiToEffect.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 { parseArgs } from 'node:util';\nimport * as path from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport { type Stats } from 'node:fs';\nimport * as fs from 'node:fs/promises';\n\nimport { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { type OpenApiSchemaId, type OpenApiSchema } from './util/openapi.ts';\n\nimport * as GenSpec from './generation/generationSpec.ts';\nimport { generateModule } from './generation/effSchemGen/moduleGen.ts';\nimport { generateModuleWithSpec } from './generation/effSchemGen/moduleGenWithSpec.ts';\nimport { formatGeneratedCode } from './generation/formatting.ts';\nimport { type JSONPatchDocument, immutableJSONPatch } from 'immutable-json-patch';\nimport { schemaIdFromRef, topologicalSort, dependencyTree } from './analysis/GraphAnalyzer.ts';\n\n\n// To use a directory path as a base URL in `new URL(<path>, <base>)` we need to ensure it has a trailing slash,\n// otherwise the path will be relative to the parent directory.\nconst ensureTrailingSlash = (path: string) => path.replace(/[/]+$/, '') + '/';\n\nconst cwd: URL = pathToFileURL(ensureTrailingSlash(process.cwd())); // Trailing slash so we can use it as a base URL\n\n\ntype ConsoleService = Pick<Console, 'info' | 'error' | 'log'>;\n\n// Parse an OpenAPI v3.1 document (in JSON format).\n// @throws Error[code=ENOENT] When the document cannot be read.\n// @throws SyntaxError When the document is not a valid OpenAPI v3.1 JSON document.\nconst parseDocument = async (documentUrl: URL): Promise<OpenApi.Document> => {\n const content: string = await fs.readFile(documentUrl, 'utf8');\n \n const contentJson = ((): unknown => {\n try {\n return JSON.parse(content);\n } catch (error: unknown) {\n if (error instanceof SyntaxError) {\n throw error;\n } else {\n throw new Error(`Unable to parse JSON`, { cause: error }); // Unexpected error\n }\n }\n })();\n \n // Some quick sanity checks\n const isDocument = typeof contentJson === 'object' && contentJson !== null && 'openapi' in contentJson;\n if (!isDocument) { throw new SyntaxError('Not a valid OpenAPI document'); }\n if (typeof contentJson.openapi !== 'string' || !contentJson.openapi.trim().startsWith('3.1')) {\n const documentVersion = typeof contentJson.openapi !== 'string' ? contentJson.openapi : '(unknown version)';\n throw new SyntaxError(`Expected OpenAPI version 3.1, but got version '${documentVersion}'`);\n }\n \n // Note: we assume that this is a valid instance of `OpenApi.Document`\n // We may want to do some proper runtime validation here (but this can be expensive since the document may be large)\n return contentJson as any as OpenApi.Document; // (!) Unsafe cast\n};\n\n\nexport type GenerateRequest = {\n document: OpenApi.Document,\n spec: null | GenSpec.GenerationSpec,\n outputDirectory: URL,\n};\ntype GenerateRequestWithSpec = GenerateRequest & { spec: GenSpec.GenerationSpec };\n\n// Generate one module per schema (does not support a spec file)\nexport const generateSchemas = async (\n request: GenerateRequest,\n { logger }: { logger: ConsoleService },\n): Promise<void> => {\n const { document, outputDirectory } = request;\n \n logger.info(`Generating schemas from document: ${document.info.title} ${document.info.version}`);\n \n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const outputUrl = new URL(`${schemaId}.ts`, outputDirectory);\n \n logger.info(`Generating schema: '${path.relative(process.cwd(), fileURLToPath(outputUrl))}'`);\n \n try {\n // Generate the effect-schema module code\n const generatedCode = ((): string => {\n try {\n return generateModule(schemaId, schema);\n } catch (error: unknown) {\n logger.error(`Unable to convert to effect-schema`);\n throw error;\n }\n })();\n \n // Format the generated code\n const generatedCodeFormatted = await (async (): Promise<string> => {\n try {\n return await formatGeneratedCode(generatedCode);\n } catch (error: unknown) {\n // Note: if we made a mistake in our code generation logic (and generate invalid syntax), it will usually\n // appear as an error here\n logger.info(generatedCode);\n logger.error(`Unable to format code`);\n throw error;\n }\n })();\n \n // Write to the output file\n try {\n await fs.writeFile(outputUrl, generatedCodeFormatted, 'utf-8');\n } catch (error: unknown) {\n logger.error(`Failed to write to file: '${fileURLToPath(outputUrl)}'`);\n throw error;\n }\n } catch (error: unknown) {\n // If anything fails, just print the error and continue with the next schema\n logger.error(error);\n }\n }\n};\n\n// Generate schemas based on the given spec file\nexport const generateSchemasWithSpec = async (\n request: GenerateRequestWithSpec,\n { logger }: { logger: ConsoleService },\n): Promise<void> => {\n const { document, spec, outputDirectory } = request;\n \n logger.info(`Generating schemas from document: ${document.info.title} ${document.info.version}`);\n \n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n const schemasSorted = topologicalSort(document);\n \n const specParsed = ((): GenSpec.GenerationSpec => {\n if (spec.generationMethod.method === 'one-to-one') { // Autogenerate modules one-to-one (one file per schema)\n return {\n ...spec,\n modules: {\n // Add each schema in the OpenAPI document to the spec modules list, so as to be autogenerated\n ...Object.fromEntries(Object.keys(schemas)\n .map((schemaId: OpenApiSchemaId): [GenSpec.ModulePath, GenSpec.GenerationModuleSpec] => {\n return [`./${schemaId}.ts`, { definitions: [{ action: 'generate-schema', schemaId }] }];\n }),\n ),\n // Modules already in the spec can still override the default autogenerate directives.\n ...spec.modules,\n },\n };\n } else if (spec.generationMethod.method === 'bundled') { // Bundle everything into one file\n return {\n ...spec,\n modules: {\n ...Object.fromEntries(schemasSorted\n .map(({ ref, circularDependency }): [GenSpec.ModulePath, GenSpec.GenerationModuleSpec] => {\n const schemaId = schemaIdFromRef(ref);\n const def: GenSpec.GenerationDefinitionSpec = {\n ...(spec.modules[`./${schemaId}.ts`]?.definitions?.find(def => def.schemaId === schemaId) ?? {}),\n action: 'generate-schema',\n schemaId,\n lazy: circularDependency,\n };\n return [`./${schemaId}.ts`, { definitions: [def] }];\n }),\n ),\n },\n };\n } else {\n return spec;\n }\n })();\n \n let bundle = '';\n for (const [modulePath, _moduleSpec] of Object.entries({ ...specParsed.runtime, ...specParsed.modules })) {\n logger.info(`Generating module: ${modulePath}`);\n \n try {\n // Generate the effect-schema module code\n const generatedCode = ((): string => {\n try {\n return generateModuleWithSpec(schemas, specParsed, modulePath, {\n isSchemaBefore(schema1: OpenApiSchemaId, schema2: OpenApiSchemaId): boolean {\n if (spec.generationMethod.method !== 'bundled') { return true; }\n \n const schema1Index = schemasSorted.findIndex(({ ref }) => schemaIdFromRef(ref) === schema1);\n const schema2Index = schemasSorted.findIndex(({ ref }) => schemaIdFromRef(ref) === schema2);\n \n if (schema1Index === -1 || schema2Index === -1) {\n return true;\n }\n \n return schema1Index < schema2Index;\n },\n });\n } catch (error: unknown) {\n logger.error(`Unable to convert to effect-schema`);\n throw error;\n }\n })();\n \n // Format the generated code\n const generatedCodeFormatted = await (async (): Promise<string> => {\n try {\n return await formatGeneratedCode(generatedCode);\n } catch (error: unknown) {\n // Note: if we made a mistake in our code generation logic (and generate invalid syntax), it will usually\n // appear as an error here\n logger.info(generatedCode);\n logger.error(`Unable to format code`);\n throw error;\n }\n })();\n \n // Write to an output file\n const outputUrl = new URL(modulePath, outputDirectory);\n try {\n if (specParsed.generationMethod.method === 'bundled') {\n bundle += '\\n\\n' + generatedCodeFormatted;\n } else {\n await fs.mkdir(path.dirname(fileURLToPath(outputUrl)), { recursive: true });\n await fs.writeFile(outputUrl, generatedCodeFormatted, 'utf-8');\n }\n } catch (error: unknown) {\n logger.error(`Failed to write to file: ${outputUrl}`);\n throw error;\n }\n } catch (error: unknown) {\n if (specParsed.generationMethod.method === 'bundled') {\n throw error; // Stop bundling on first error\n } else {\n // If anything fails, just print the error and continue with the next schema\n logger.error('Error:', error);\n }\n }\n }\n \n if (specParsed.generationMethod.method === 'bundled') {\n const outputUrl = new URL(`${specParsed.generationMethod.bundleName}.ts`, outputDirectory);\n logger.info(`Writing to bundle: ${fileURLToPath(outputUrl)}`);\n \n try {\n const bundleFormatted = await formatGeneratedCode(\n dedent`\n /* Generated on ${new Date().toISOString()} from ${document.info.title} version ${document.info.version} */\n \n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${bundle.replace(/(^|\\n)(\\s*)import [^;]+;(?! \\/\\/ <runtime>)/g, '')}\n `,\n );\n \n await fs.mkdir(path.dirname(fileURLToPath(outputUrl)), { recursive: true });\n await fs.writeFile(outputUrl, bundleFormatted, 'utf-8');\n } catch (error: unknown) {\n logger.error(`Failed to write to file: ${outputUrl}`);\n throw error;\n }\n }\n \n if (spec.generationMethod.method === 'one-to-one' && spec.generationMethod.generateBarrelFile) {\n // Generate a barrel file containing all exports\n let barrelContent = '';\n for (const [modulePath, moduleSpec] of Object.entries({ ...specParsed.runtime, ...specParsed.modules })) {\n barrelContent += `export * from '${modulePath}';\\n`;\n }\n const barrelUrl = new URL('./index.ts', outputDirectory);\n logger.log(`Generating barrel file: ./index.ts`);\n await fs.writeFile(barrelUrl, barrelContent, 'utf-8');\n }\n};\n\n\nexport type RequestInput = {\n documentPath: string,\n outputPath: string,\n specPath?: undefined | string,\n};\n\n// Parse the given input and return a valid `GenerateRequest` (or throw an error).\n// @throws TypeError[ERR_INVALID_URL] If any of the given file paths are syntactically invalid.\nexport const parseRequest = async (\n { documentPath, outputPath, specPath }: RequestInput,\n { logger }: { logger: ConsoleService },\n): Promise<GenerateRequest> => {\n // Note: the following could throw a `TypeError` exception if the paths are (syntactically) invalid, e.g. `//`\n const documentUrl = new URL(documentPath, cwd);\n const outputUrl = new URL(ensureTrailingSlash(outputPath), cwd); // Trailing slash for use as base URL\n const specUrl: null | URL = typeof specPath === 'undefined' ? null : new URL(specPath, cwd);\n \n // Check if the OpenAPI document exists\n try {\n await fs.stat(documentUrl);\n } catch (error: unknown) {\n throw new Error(`Provided OpenAPI file does not exist: '${documentPath}'`, { cause: error });\n }\n \n // Check if the output path exists and is a directory\n let outputUrlStats: Stats;\n try {\n outputUrlStats = await fs.stat(outputUrl);\n } catch (error: unknown) {\n throw new Error(`Provided output path does not exist: '${outputPath}'`, { cause: error });\n }\n if (!outputUrlStats.isDirectory()) {\n throw new Error(`Provided output path '${outputPath}' is not a directory`);\n }\n \n // Check if the generation spec file exists\n if (specUrl !== null) {\n try {\n await fs.stat(specUrl);\n } catch (error: unknown) {\n throw new Error(`Provided generation spec file does not exist: '${specPath}'`, { cause: error });\n }\n }\n \n // Load the generation spec\n const spec: null | GenSpec.GenerationSpec = specUrl === null ? null : (await import(specUrl.href)).default;\n \n // Load the OpenAPI document\n const document = await (async (): Promise<OpenApi.Document> => {\n try {\n return await parseDocument(documentUrl);\n } catch (error: unknown) {\n logger.error(`Unable to parse OpenAPI document: '${documentPath}'`);\n throw error;\n }\n })();\n \n // Apply JSON Patch (if any)\n const patch: null | JSONPatchDocument = spec !== null && Array.isArray(spec?.patch) ? spec.patch : null;\n const documentPatched = patch === null\n ? document\n : immutableJSONPatch<OpenApi.Document>(document, patch);\n \n return { document: documentPatched, outputDirectory: outputUrl, spec };\n};\n\n\nconst printUsage = ({ logger }: { logger: ConsoleService }) => {\n logger.info(dedent`\n Usage: openapi-to-effect [-h | --help] [--silent] <command> [<args>]\n \n Commands:\n gen [--spec=<path>] <openapi-document-path> <output-path>\n analyze:dependency-tree <openapi-document-path> <root-schema-ref>\n `);\n};\n\ntype ScriptArgs = {\n values: {\n help: boolean | undefined,\n spec: string | undefined,\n },\n positionals: Array<string>,\n};\n\nexport const runGenerator = async (\n args: ScriptArgs,\n { logger }: { logger: ConsoleService },\n): Promise<void> => {\n const documentPath: undefined | string = args.positionals[0];\n const outputPath: undefined | string = args.positionals[1];\n if (!documentPath || !outputPath) {\n printUsage({ logger });\n return;\n }\n \n const requestInput: RequestInput = {\n documentPath,\n outputPath,\n specPath: args.values.spec,\n };\n const request: GenerateRequest = await parseRequest(requestInput, { logger });\n \n if (request.spec === null) {\n await generateSchemas(request, { logger });\n } else {\n await generateSchemasWithSpec(request as GenerateRequestWithSpec, { logger });\n }\n \n logger.info('Done!');\n};\n\n// Example:\n// `npm --silent run node src/openapiToEffect.ts analyze:dependency-tree tests/fixtures/fixture1_api.json\\\n// '#/components/schemas/BatchRequest'`\nexport const runAnalyzeDependencyTree = async (\n args: ScriptArgs,\n { logger }: { logger: ConsoleService },\n): Promise<void> => {\n const documentPath: undefined | string = args.positionals[0];\n const rootSchemaRef: undefined | string = args.positionals[1];\n if (!documentPath || !rootSchemaRef) {\n printUsage({ logger });\n return;\n }\n \n const documentUrl = new URL(documentPath, cwd);\n const document = await parseDocument(documentUrl);\n const tree = await dependencyTree(document, rootSchemaRef);\n \n logger.log(tree);\n \n logger.info('Done!');\n};\n\n// Run the script with the given CLI arguments\nexport const run = async (argsRaw: Array<string>): Promise<void> => {\n // Services\n const logger: ConsoleService = {\n info: console.info,\n error: console.error,\n log: console.log,\n };\n \n // Ref: https://exploringjs.com/nodejs-shell-scripting/ch_node-util-parseargs.html\n const args = parseArgs({\n args: argsRaw,\n allowPositionals: true,\n options: {\n help: { type: 'boolean', short: 'h' },\n silent: { type: 'boolean' },\n spec: { type: 'string' }, // Path to a spec file (optional)\n //runtime: { type: 'string' } // TODO: allow specifying a path to a \"runtime\" dir that we include in the output?\n },\n });\n \n if (args.values.silent) {\n logger.info = () => {};\n }\n \n const command: null | string = args.positionals[0] ?? null;\n if (command === null || args.values.help) {\n printUsage({ logger });\n return;\n }\n \n const argsForCommand = { ...args, positionals: args.positionals.slice(1) };\n switch (command) {\n case 'gen':\n await runGenerator(argsForCommand, { logger });\n break;\n case 'analyze:dependency-tree':\n await runAnalyzeDependencyTree(argsForCommand, { logger });\n break;\n default:\n logger.error(`Unknown command '${command}'\\n`);\n printUsage({ logger });\n break;\n }\n};\n\nconst [_argExec, argScript, ...args] = process.argv; // First two arguments should be the executable + script\n\n// Detect if this module is being run directly from the command line\nif (argScript && await fs.realpath(argScript) === fileURLToPath(import.meta.url)) {\n try {\n await run(args);\n process.exit(0);\n } catch (error: unknown) {\n console.error(error);\n process.exit(1);\n }\n}\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"openapiToEffect.mjs","names":["__transformExtension","filepath","extMapping","startsWith","idx","lastIndexOf","includes","newExt","origExt","Object","entries","sort","a","b","length","endsWith","slice","dedent","parseArgs","path","fileURLToPath","pathToFileURL","fs","AsyncLocalStorage","generateModule","generateModuleWithSpec","formatGeneratedCode","immutableJSONPatch","schemaIdFromRef","topologicalSort","dependencyTree","ensureTrailingSlash","replace","cwd","process","servicesStorage","getServices","services","getStore","Error","parseDocument","documentUrl","content","readFile","contentJson","JSON","parse","error","SyntaxError","cause","isDocument","openapi","trim","documentVersion","generateSchemas","request","logger","document","outputDirectory","info","title","version","schemas","components","schemaId","schema","outputUrl","URL","relative","generatedCode","generatedCodeFormatted","writeFile","generateSchemasWithSpec","spec","schemasSorted","specParsed","generationMethod","method","modules","fromEntries","keys","map","definitions","action","ref","circularDependency","def","find","lazy","bundle","modulePath","_moduleSpec","runtime","isSchemaBefore","schema1","schema2","schema1Index","findIndex","schema2Index","mkdir","dirname","recursive","bundleName","bundleFormatted","Date","toISOString","generateBarrelFile","barrelContent","moduleSpec","barrelUrl","log","parseRequest","documentPath","outputPath","specPath","specUrl","stat","outputUrlStats","isDirectory","href","default","patch","Array","isArray","documentPatched","printUsage","runGenerator","args","positionals","requestInput","values","runAnalyzeDependencyTree","rootSchemaRef","tree","run","argsRaw","allowPositionals","options","help","type","short","silent","console","command","argsForCommand","_argExec","argScript","argv","realpath","import","meta","url","exit"],"sources":["../../src/openapiToEffect.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 { parseArgs } from 'node:util';\nimport * as path from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport { type Stats } from 'node:fs';\nimport * as fs from 'node:fs/promises';\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nimport { type OpenAPIV3_1 as OpenApi } from 'openapi-types';\nimport { type OpenApiSchemaId, type OpenApiSchema } from './util/openapi.ts';\n\nimport * as GenSpec from './generation/generationSpec.ts';\nimport { generateModule } from './generation/effSchemGen/moduleGen.ts';\nimport { generateModuleWithSpec } from './generation/effSchemGen/moduleGenWithSpec.ts';\nimport { formatGeneratedCode } from './generation/formatting.ts';\nimport { type JSONPatchDocument, immutableJSONPatch } from 'immutable-json-patch';\nimport { schemaIdFromRef, topologicalSort, dependencyTree } from './analysis/GraphAnalyzer.ts';\n\n\n// To use a directory path as a base URL in `new URL(<path>, <base>)` we need to ensure it has a trailing slash,\n// otherwise the path will be relative to the parent directory.\nconst ensureTrailingSlash = (path: string) => path.replace(/[/]+$/, '') + '/';\n\nconst cwd: URL = pathToFileURL(ensureTrailingSlash(process.cwd())); // Trailing slash so we can use it as a base URL\n\n\ntype Logger = Pick<Console, 'info' | 'error' | 'log'>;\ntype Services = { logger: Logger };\nconst servicesStorage = new AsyncLocalStorage<Services>();\nconst getServices = () => {\n const services = servicesStorage.getStore();\n if (typeof services === 'undefined') { throw new Error(`Missing services`); }\n return services;\n};\n\n// Parse an OpenAPI v3.1 document (in JSON format).\n// @throws Error[code=ENOENT] When the document cannot be read.\n// @throws SyntaxError When the document is not a valid OpenAPI v3.1 JSON document.\nconst parseDocument = async (documentUrl: URL): Promise<OpenApi.Document> => {\n const content: string = await fs.readFile(documentUrl, 'utf8');\n \n const contentJson = ((): unknown => {\n try {\n return JSON.parse(content);\n } catch (error: unknown) {\n if (error instanceof SyntaxError) {\n throw error;\n } else {\n throw new Error(`Unable to parse JSON`, { cause: error }); // Unexpected error\n }\n }\n })();\n \n // Some quick sanity checks\n const isDocument = typeof contentJson === 'object' && contentJson !== null && 'openapi' in contentJson;\n if (!isDocument) { throw new SyntaxError('Not a valid OpenAPI document'); }\n if (typeof contentJson.openapi !== 'string' || !contentJson.openapi.trim().startsWith('3.1')) {\n const documentVersion = typeof contentJson.openapi !== 'string' ? contentJson.openapi : '(unknown version)';\n throw new SyntaxError(`Expected OpenAPI version 3.1, but got version '${documentVersion}'`);\n }\n \n // Note: we assume that this is a valid instance of `OpenApi.Document`\n // We may want to do some proper runtime validation here (but this can be expensive since the document may be large)\n return contentJson as any as OpenApi.Document; // (!) Unsafe cast\n};\n\n\nexport type GenerateRequest = {\n document: OpenApi.Document,\n spec: null | GenSpec.GenerationSpec,\n outputDirectory: URL,\n};\ntype GenerateRequestWithSpec = GenerateRequest & { spec: GenSpec.GenerationSpec };\n\n// Generate one module per schema (does not support a spec file)\nexport const generateSchemas = async (request: GenerateRequest): Promise<void> => {\n const { logger } = getServices();\n const { document, outputDirectory } = request;\n \n logger.info(`Generating schemas from document: ${document.info.title} ${document.info.version}`);\n \n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n \n for (const [schemaId, schema] of Object.entries(schemas)) {\n const outputUrl = new URL(`${schemaId}.ts`, outputDirectory);\n \n logger.info(`Generating schema: '${path.relative(process.cwd(), fileURLToPath(outputUrl))}'`);\n \n try {\n // Generate the effect-schema module code\n const generatedCode = ((): string => {\n try {\n return generateModule(schemaId, schema);\n } catch (error: unknown) {\n logger.error(`Unable to convert to effect-schema`);\n throw error;\n }\n })();\n \n // Format the generated code\n const generatedCodeFormatted = await (async (): Promise<string> => {\n try {\n return await formatGeneratedCode(generatedCode);\n } catch (error: unknown) {\n // Note: if we made a mistake in our code generation logic (and generate invalid syntax), it will usually\n // appear as an error here\n logger.info(generatedCode);\n logger.error(`Unable to format code`);\n throw error;\n }\n })();\n \n // Write to the output file\n try {\n await fs.writeFile(outputUrl, generatedCodeFormatted, 'utf-8');\n } catch (error: unknown) {\n logger.error(`Failed to write to file: '${fileURLToPath(outputUrl)}'`);\n throw error;\n }\n } catch (error: unknown) {\n // If anything fails, just print the error and continue with the next schema\n logger.error(error);\n }\n }\n};\n\n// Generate schemas based on the given spec file\nexport const generateSchemasWithSpec = async (request: GenerateRequestWithSpec): Promise<void> => {\n const { logger } = getServices();\n const { document, spec, outputDirectory } = request;\n \n logger.info(`Generating schemas from document: ${document.info.title} ${document.info.version}`);\n \n const schemas: Record<OpenApiSchemaId, OpenApiSchema> = document.components?.schemas ?? {};\n const schemasSorted = topologicalSort(document);\n \n const specParsed = ((): GenSpec.GenerationSpec => {\n if (spec.generationMethod.method === 'one-to-one') { // Autogenerate modules one-to-one (one file per schema)\n return {\n ...spec,\n modules: {\n // Add each schema in the OpenAPI document to the spec modules list, so as to be autogenerated\n ...Object.fromEntries(Object.keys(schemas)\n .map((schemaId: OpenApiSchemaId): [GenSpec.ModulePath, GenSpec.GenerationModuleSpec] => {\n return [`./${schemaId}.ts`, { definitions: [{ action: 'generate-schema', schemaId }] }];\n }),\n ),\n // Modules already in the spec can still override the default autogenerate directives.\n ...spec.modules,\n },\n };\n } else if (spec.generationMethod.method === 'bundled') { // Bundle everything into one file\n return {\n ...spec,\n modules: {\n ...Object.fromEntries(schemasSorted\n .map(({ ref, circularDependency }): [GenSpec.ModulePath, GenSpec.GenerationModuleSpec] => {\n const schemaId = schemaIdFromRef(ref);\n const def: GenSpec.GenerationDefinitionSpec = {\n ...(spec.modules[`./${schemaId}.ts`]?.definitions?.find(def => def.schemaId === schemaId) ?? {}),\n action: 'generate-schema',\n schemaId,\n lazy: circularDependency,\n };\n return [`./${schemaId}.ts`, { definitions: [def] }];\n }),\n ),\n },\n };\n } else {\n return spec;\n }\n })();\n \n let bundle = '';\n for (const [modulePath, _moduleSpec] of Object.entries({ ...specParsed.runtime, ...specParsed.modules })) {\n logger.info(`Generating module: ${modulePath}`);\n \n try {\n // Generate the effect-schema module code\n const generatedCode = ((): string => {\n try {\n return generateModuleWithSpec(schemas, specParsed, modulePath, {\n isSchemaBefore(schema1: OpenApiSchemaId, schema2: OpenApiSchemaId): boolean {\n if (spec.generationMethod.method !== 'bundled') { return true; }\n \n const schema1Index = schemasSorted.findIndex(({ ref }) => schemaIdFromRef(ref) === schema1);\n const schema2Index = schemasSorted.findIndex(({ ref }) => schemaIdFromRef(ref) === schema2);\n \n if (schema1Index === -1 || schema2Index === -1) {\n return true;\n }\n \n return schema1Index < schema2Index;\n },\n });\n } catch (error: unknown) {\n logger.error(`Unable to convert to effect-schema`);\n throw error;\n }\n })();\n \n // Format the generated code\n const generatedCodeFormatted = await (async (): Promise<string> => {\n try {\n return await formatGeneratedCode(generatedCode);\n } catch (error: unknown) {\n // Note: if we made a mistake in our code generation logic (and generate invalid syntax), it will usually\n // appear as an error here\n logger.info(generatedCode);\n logger.error(`Unable to format code`);\n throw error;\n }\n })();\n \n // Write to an output file\n const outputUrl = new URL(modulePath, outputDirectory);\n try {\n if (specParsed.generationMethod.method === 'bundled') {\n bundle += '\\n\\n' + generatedCodeFormatted;\n } else {\n await fs.mkdir(path.dirname(fileURLToPath(outputUrl)), { recursive: true });\n await fs.writeFile(outputUrl, generatedCodeFormatted, 'utf-8');\n }\n } catch (error: unknown) {\n logger.error(`Failed to write to file: ${outputUrl}`);\n throw error;\n }\n } catch (error: unknown) {\n if (specParsed.generationMethod.method === 'bundled') {\n throw error; // Stop bundling on first error\n } else {\n // If anything fails, just print the error and continue with the next schema\n logger.error('Error:', error);\n }\n }\n }\n \n if (specParsed.generationMethod.method === 'bundled') {\n const outputUrl = new URL(`${specParsed.generationMethod.bundleName}.ts`, outputDirectory);\n logger.info(`Writing to bundle: ${fileURLToPath(outputUrl)}`);\n \n try {\n const bundleFormatted = await formatGeneratedCode(\n dedent`\n /* Generated on ${new Date().toISOString()} from ${document.info.title} version ${document.info.version} */\n \n import { pipe, Option } from 'effect';\n import { Schema as S } from '@effect/schema';\n \n ${bundle.replace(/(^|\\n)(\\s*)import [^;]+;(?! \\/\\/ <runtime>)/g, '')}\n `,\n );\n \n await fs.mkdir(path.dirname(fileURLToPath(outputUrl)), { recursive: true });\n await fs.writeFile(outputUrl, bundleFormatted, 'utf-8');\n } catch (error: unknown) {\n logger.error(`Failed to write to file: ${outputUrl}`);\n throw error;\n }\n }\n \n if (spec.generationMethod.method === 'one-to-one' && spec.generationMethod.generateBarrelFile) {\n // Generate a barrel file containing all exports\n let barrelContent = '';\n for (const [modulePath, moduleSpec] of Object.entries({ ...specParsed.runtime, ...specParsed.modules })) {\n barrelContent += `export * from '${modulePath}';\\n`;\n }\n const barrelUrl = new URL('./index.ts', outputDirectory);\n logger.log(`Generating barrel file: ./index.ts`);\n await fs.writeFile(barrelUrl, barrelContent, 'utf-8');\n }\n};\n\n\nexport type RequestInput = {\n documentPath: string,\n outputPath: string,\n specPath?: undefined | string,\n};\n\n// Parse the given input and return a valid `GenerateRequest` (or throw an error).\n// @throws TypeError[ERR_INVALID_URL] If any of the given file paths are syntactically invalid.\nexport const parseRequest = async ({ documentPath, outputPath, specPath }: RequestInput): Promise<GenerateRequest> => {\n const { logger } = getServices();\n \n // Note: the following could throw a `TypeError` exception if the paths are (syntactically) invalid, e.g. `//`\n const documentUrl = new URL(documentPath, cwd);\n const outputUrl = new URL(ensureTrailingSlash(outputPath), cwd); // Trailing slash for use as base URL\n const specUrl: null | URL = typeof specPath === 'undefined' ? null : new URL(specPath, cwd);\n \n // Check if the OpenAPI document exists\n try {\n await fs.stat(documentUrl);\n } catch (error: unknown) {\n throw new Error(`Provided OpenAPI file does not exist: '${documentPath}'`, { cause: error });\n }\n \n // Check if the output path exists and is a directory\n let outputUrlStats: Stats;\n try {\n outputUrlStats = await fs.stat(outputUrl);\n } catch (error: unknown) {\n throw new Error(`Provided output path does not exist: '${outputPath}'`, { cause: error });\n }\n if (!outputUrlStats.isDirectory()) {\n throw new Error(`Provided output path '${outputPath}' is not a directory`);\n }\n \n // Check if the generation spec file exists\n if (specUrl !== null) {\n try {\n await fs.stat(specUrl);\n } catch (error: unknown) {\n throw new Error(`Provided generation spec file does not exist: '${specPath}'`, { cause: error });\n }\n }\n \n // Load the generation spec\n const spec: null | GenSpec.GenerationSpec = specUrl === null ? null : (await import(specUrl.href)).default;\n \n // Load the OpenAPI document\n const document = await (async (): Promise<OpenApi.Document> => {\n try {\n return await parseDocument(documentUrl);\n } catch (error: unknown) {\n logger.error(`Unable to parse OpenAPI document: '${documentPath}'`);\n throw error;\n }\n })();\n \n // Apply JSON Patch (if any)\n const patch: null | JSONPatchDocument = spec !== null && Array.isArray(spec?.patch) ? spec.patch : null;\n const documentPatched = patch === null\n ? document\n : immutableJSONPatch<OpenApi.Document>(document, patch);\n \n return { document: documentPatched, outputDirectory: outputUrl, spec };\n};\n\n\nconst printUsage = () => {\n const { logger } = getServices();\n \n logger.info(dedent`\n Usage: openapi-to-effect [-h | --help] [--silent] <command> [<args>]\n \n Commands:\n gen [--spec=<path>] <openapi-document-path> <output-path>\n analyze:dependency-tree <openapi-document-path> <root-schema-ref>\n `);\n};\n\ntype ScriptArgs = {\n values: {\n help: boolean | undefined,\n spec: string | undefined,\n },\n positionals: Array<string>,\n};\n\nexport const runGenerator = async (args: ScriptArgs): Promise<void> => {\n const { logger } = getServices();\n \n const documentPath: undefined | string = args.positionals[0];\n const outputPath: undefined | string = args.positionals[1];\n if (!documentPath || !outputPath) {\n printUsage();\n return;\n }\n \n const requestInput: RequestInput = {\n documentPath,\n outputPath,\n specPath: args.values.spec,\n };\n const request: GenerateRequest = await parseRequest(requestInput);\n \n if (request.spec === null) {\n await generateSchemas(request);\n } else {\n await generateSchemasWithSpec(request as GenerateRequestWithSpec);\n }\n \n logger.info('Done!');\n};\n\n// Example:\n// `npm --silent run node src/openapiToEffect.ts analyze:dependency-tree tests/fixtures/fixture1_api.json\\\n// '#/components/schemas/BatchRequest'`\nexport const runAnalyzeDependencyTree = async (args: ScriptArgs): Promise<void> => {\n const { logger } = getServices();\n \n const documentPath: undefined | string = args.positionals[0];\n const rootSchemaRef: undefined | string = args.positionals[1];\n if (!documentPath || !rootSchemaRef) {\n printUsage();\n return;\n }\n \n const documentUrl = new URL(documentPath, cwd);\n const document = await parseDocument(documentUrl);\n const tree = await dependencyTree(document, rootSchemaRef);\n \n logger.log(tree);\n \n logger.info('Done!');\n};\n\n// Run the script with the given CLI arguments\nexport const run = async (argsRaw: Array<string>): Promise<void> => {\n // Ref: https://exploringjs.com/nodejs-shell-scripting/ch_node-util-parseargs.html\n const args = parseArgs({\n args: argsRaw,\n allowPositionals: true,\n options: {\n help: { type: 'boolean', short: 'h' },\n silent: { type: 'boolean' },\n spec: { type: 'string' }, // Path to a spec file (optional)\n //runtime: { type: 'string' } // TODO: allow specifying a path to a \"runtime\" dir that we include in the output?\n },\n });\n \n // Services\n const logger: Logger = {\n info: args.values.silent ? () => {} : console.info,\n error: console.error,\n log: console.log,\n };\n \n await servicesStorage.run({ logger }, async () => {\n const command: null | string = args.positionals[0] ?? null;\n if (command === null || args.values.help) {\n printUsage();\n return;\n }\n \n const argsForCommand = { ...args, positionals: args.positionals.slice(1) };\n switch (command) {\n case 'gen':\n await runGenerator(argsForCommand);\n break;\n case 'analyze:dependency-tree':\n await runAnalyzeDependencyTree(argsForCommand);\n break;\n default:\n logger.error(`Unknown command '${command}'\\n`);\n printUsage();\n break;\n }\n });\n};\n\nconst [_argExec, argScript, ...args] = process.argv; // First two arguments should be the executable + script\n\n// Detect if this module is being run directly from the command line\nif (argScript && await fs.realpath(argScript) === fileURLToPath(import.meta.url)) {\n try {\n await run(args);\n process.exit(0);\n } catch (error: unknown) {\n console.error(error);\n process.exit(1);\n }\n}\n"],"mappings":"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","ignoreList":[]}

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

export {};
/* Copyright (c) Fortanix, Inc.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
const unescapeJsonPointerSegment = segment => segment.replace(/~1/g, '/').replace(/~0/g, '~');
export const decodeJsonPointer = jsonPointer => {
const jsonPointerTrimmed = jsonPointer.trim();
if (jsonPointerTrimmed === '') {
return [];
}
if (jsonPointerTrimmed.charAt(0) !== '/') {
throw new Error(`Invalid JSON Pointer: ${jsonPointer}`);
}
return jsonPointer.substring(1).split('/').map(segment => unescapeJsonPointerSegment(segment));
};
const escapeJsonPointerSegment = segment => segment.replace(/~/g, '~0').replace(/\//g, '~1');
export const encodeJsonPointer = segments => {
return '/' + segments.map(segment => escapeJsonPointerSegment(segment)).join('/');
};
//# sourceMappingURL=openapi.mjs.map

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

{"version":3,"file":"openapi.mjs","names":[],"sources":["../../../src/util/openapi.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';\n\n\nexport type OpenApiRef = string;\n\nexport type OpenApiSchema = OpenApi.ReferenceObject | OpenApi.SchemaObject;\nexport type OpenApiSchemaId = string;\n"],"mappings":"","ignoreList":[]}
{"version":3,"file":"openapi.mjs","names":["unescapeJsonPointerSegment","segment","replace","decodeJsonPointer","jsonPointer","jsonPointerTrimmed","trim","charAt","Error","substring","split","map","escapeJsonPointerSegment","encodeJsonPointer","segments","join"],"sources":["../../../src/util/openapi.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';\n\n\nexport type OpenApiRef = string;\n\nexport type OpenApiSchema = OpenApi.ReferenceObject | OpenApi.SchemaObject;\nexport type OpenApiSchemaId = string;\n\n\nconst unescapeJsonPointerSegment = (segment: string): string =>\n segment.replace(/~1/g, '/').replace(/~0/g, '~');\nexport const decodeJsonPointer = (jsonPointer: string): Array<string> => {\n const jsonPointerTrimmed = jsonPointer.trim();\n if (jsonPointerTrimmed === '') { return []; }\n if (jsonPointerTrimmed.charAt(0) !== '/') { throw new Error(`Invalid JSON Pointer: ${jsonPointer}`); }\n return jsonPointer.substring(1).split('/').map(segment => unescapeJsonPointerSegment(segment));\n};\n\nconst escapeJsonPointerSegment = (segment: string): string =>\n segment.replace(/~/g, '~0').replace(/\\//g, '~1');\nexport const encodeJsonPointer = (segments: Array<string>): string => {\n return '/' + segments.map(segment => escapeJsonPointerSegment(segment)).join('/');\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;;AAWA,MAAMA,0BAA0B,GAAIC,OAAe,IACjDA,OAAO,CAACC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACjD,OAAO,MAAMC,iBAAiB,GAAIC,WAAmB,IAAoB;EACvE,MAAMC,kBAAkB,GAAGD,WAAW,CAACE,IAAI,CAAC,CAAC;EAC7C,IAAID,kBAAkB,KAAK,EAAE,EAAE;IAAE,OAAO,EAAE;EAAE;EAC5C,IAAIA,kBAAkB,CAACE,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAAE,MAAM,IAAIC,KAAK,CAAC,yBAAyBJ,WAAW,EAAE,CAAC;EAAE;EACrG,OAAOA,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACV,OAAO,IAAID,0BAA0B,CAACC,OAAO,CAAC,CAAC;AAChG,CAAC;AAED,MAAMW,wBAAwB,GAAIX,OAAe,IAC/CA,OAAO,CAACC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;AAClD,OAAO,MAAMW,iBAAiB,GAAIC,QAAuB,IAAa;EACpE,OAAO,GAAG,GAAGA,QAAQ,CAACH,GAAG,CAACV,OAAO,IAAIW,wBAAwB,CAACX,OAAO,CAAC,CAAC,CAACc,IAAI,CAAC,GAAG,CAAC;AACnF,CAAC","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,EAAE,MAAM,oBAAoB,CAAC;AAO9E,KAAK,GAAG,GAAG,MAAM,CAAC;AAGlB,eAAO,MAAM,eAAe,QAAS,GAAG,KAAG,eAS1C,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,gBAAgB,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,gBAAgB,iBAcrE,CAAC;AAGF,eAAO,MAAM,yBAAyB,aAAc,gBAAgB,iBAyBnE,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,gBAAgB,oBAYzD,CAAC;AAIF,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAiCpD,eAAO,MAAM,cAAc,YAAa,OAAO,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;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"}

@@ -15,3 +15,3 @@ import { type OpenAPIV3_1 as OpenAPIV3 } from 'openapi-types';

export declare const GenResultUtil: {
combineRefs(...refs: Array<GenResult['refs']>): GenResult['refs'];
combineRefs(...refs: Array<GenResult["refs"]>): GenResult["refs"];
importNameFromRef(ref: string): string;

@@ -26,3 +26,4 @@ initComments(): GenComments;

generatePipe(pipe: Array<string>): string;
encodeIdentifier(name: string): string;
};
//# sourceMappingURL=genUtil.d.ts.map

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

{"version":3,"file":"genUtil.d.ts","sourceRoot":"","sources":["../../../../src/generation/effSchemGen/genUtil.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,WAAW,IAAI,SAAS,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC7B,CAAC;AACF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxB,QAAQ,EAAE,WAAW,CAAC;CACvB,CAAC;AACF,eAAO,MAAM,aAAa;yBACH,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;2BAG1C,MAAM;oBAOb,WAAW;qBAQV,SAAS;qCAQO,UAAU,gBAAgB,GAAG,WAAW;6BAQhD,WAAW,GAAG;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;uBAYnE,MAAM,MAAM,CAAC,GAAG,MAAM;CAM1C,CAAC"}
{"version":3,"file":"genUtil.d.ts","sourceRoot":"","sources":["../../../../src/generation/effSchemGen/genUtil.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,WAAW,IAAI,SAAS,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC7B,CAAC;AACF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxB,QAAQ,EAAE,WAAW,CAAC;CACvB,CAAC;AACF,eAAO,MAAM,aAAa;yBACH,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;2BAG1C,MAAM;oBAOb,WAAW;qBAQV,SAAS;qCAQO,SAAS,CAAC,gBAAgB,GAAG,WAAW;6BAQhD,WAAW,GAAG;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;uBAYnE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM;2BAQlB,MAAM,GAAG,MAAM;CAYvC,CAAC"}

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

{"version":3,"file":"moduleGen.d.ts","sourceRoot":"","sources":["../../../../src/generation/effSchemGen/moduleGen.ts"],"names":[],"mappings":"AAQA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAQjF,eAAO,MAAM,cAAc,aAAc,MAAM,UAAU,aAAa,KAAG,MAsCxE,CAAC"}
{"version":3,"file":"moduleGen.d.ts","sourceRoot":"","sources":["../../../../src/generation/effSchemGen/moduleGen.ts"],"names":[],"mappings":"AAQA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAUjF,eAAO,MAAM,cAAc,aAAc,MAAM,UAAU,aAAa,KAAG,MAsCxE,CAAC"}

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

{"version":3,"file":"moduleGenWithSpec.d.ts","sourceRoot":"","sources":["../../../../src/generation/effSchemGen/moduleGenWithSpec.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGlG,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAgGhD,KAAK,6BAA6B,GAAG;IAEnC,cAAc,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC;CACjF,CAAC;AACF,eAAO,MAAM,sBAAsB,YACxB,OAAO,MAAM,EAAE,aAAa,CAAC,QAChC,QAAQ,cAAc,cAChB,QAAQ,UAAU,WACrB,6BAA6B,KACrC,MAwOF,CAAC"}
{"version":3,"file":"moduleGenWithSpec.d.ts","sourceRoot":"","sources":["../../../../src/generation/effSchemGen/moduleGenWithSpec.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGlG,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAiGhD,KAAK,6BAA6B,GAAG;IAEnC,cAAc,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC;CACjF,CAAC;AACF,eAAO,MAAM,sBAAsB,YACxB,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,QAChC,OAAO,CAAC,cAAc,cAChB,OAAO,CAAC,UAAU,WACrB,6BAA6B,KACrC,MAwOF,CAAC"}

@@ -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,QAAQ,oBAAoB,KAAG,SAM1F,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAS,OAAO,UAAU,QAAQ,oBAAoB,KAAG,SAkD5F,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAC7B,OAAO,UACJ,QAAQ,oBAAoB,KACnC,SAyCF,CAAC;AAEF,eAAO,MAAM,wBAAwB,QAAS,OAAO,UAAU,QAAQ,oBAAoB,KAAG,SAa7F,CAAC;AAWF,eAAO,MAAM,6BAA6B,QAAS,OAAO,UAAU,QAAQ,oBAAoB,KAAG,SA8DlG,CAAC;AACF,eAAO,MAAM,uBAAuB,QAAS,OAAO,UAAU,QAAQ,oBAAoB,KAAG,SAwD5F,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAAS,OAAO,UAAU,QAAQ,iBAAiB,KAAG,SAkBxF,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAAS,OAAO,UAAU,QAAQ,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;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"}

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

{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../../src/generation/formatting.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,eAAO,MAAM,mBAAmB,kBAAyB,MAAM,KAAG,QAAQ,MAAM,CAS/E,CAAC"}
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../../src/generation/formatting.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,eAAO,MAAM,mBAAmB,kBAAyB,MAAM,KAAG,OAAO,CAAC,MAAM,CAS/E,CAAC"}
import { type OpenAPIV3_1 as OpenApi } from 'openapi-types';
import * as GenSpec from './generation/generationSpec.ts';
type ConsoleService = Pick<Console, 'info' | 'error' | 'log'>;
export type GenerateRequest = {

@@ -12,8 +11,4 @@ document: OpenApi.Document;

};
export declare const generateSchemas: (request: GenerateRequest, { logger }: {
logger: ConsoleService;
}) => Promise<void>;
export declare const generateSchemasWithSpec: (request: GenerateRequestWithSpec, { logger }: {
logger: ConsoleService;
}) => Promise<void>;
export declare const generateSchemas: (request: GenerateRequest) => Promise<void>;
export declare const generateSchemasWithSpec: (request: GenerateRequestWithSpec) => Promise<void>;
export type RequestInput = {

@@ -24,5 +19,3 @@ documentPath: string;

};
export declare const parseRequest: ({ documentPath, outputPath, specPath }: RequestInput, { logger }: {
logger: ConsoleService;
}) => Promise<GenerateRequest>;
export declare const parseRequest: ({ documentPath, outputPath, specPath }: RequestInput) => Promise<GenerateRequest>;
type ScriptArgs = {

@@ -35,10 +28,6 @@ values: {

};
export declare const runGenerator: (args: ScriptArgs, { logger }: {
logger: ConsoleService;
}) => Promise<void>;
export declare const runAnalyzeDependencyTree: (args: ScriptArgs, { logger }: {
logger: ConsoleService;
}) => Promise<void>;
export declare const runGenerator: (args: ScriptArgs) => Promise<void>;
export declare const runAnalyzeDependencyTree: (args: ScriptArgs) => Promise<void>;
export declare const run: (argsRaw: Array<string>) => Promise<void>;
export {};
//# sourceMappingURL=openapiToEffect.d.ts.map

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

{"version":3,"file":"openapiToEffect.d.ts","sourceRoot":"","sources":["../../src/openapiToEffect.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,WAAW,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,KAAK,OAAO,MAAM,gCAAgC,CAAC;AAe1D,KAAK,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;AAkC9D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;IAC3B,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;IACpC,eAAe,EAAE,GAAG,CAAC;CACtB,CAAC;AACF,KAAK,uBAAuB,GAAG,eAAe,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC,cAAc,CAAA;CAAE,CAAC;AAGlF,eAAO,MAAM,eAAe,YACjB,eAAe,cACZ;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,KACrC,QAAQ,IAAI,CAgDd,CAAC;AAGF,eAAO,MAAM,uBAAuB,YACzB,uBAAuB,cACpB;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,KACrC,QAAQ,IAAI,CAgJd,CAAC;AAGF,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC/B,CAAC;AAIF,eAAO,MAAM,YAAY,2CACiB,YAAY,cACxC;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,KACrC,QAAQ,eAAe,CAqDzB,CAAC;AAaF,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE;QACN,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;QAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;KAC1B,CAAC;IACF,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,YAAY,SACjB,UAAU,cACJ;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,KACrC,QAAQ,IAAI,CAsBd,CAAC;AAKF,eAAO,MAAM,wBAAwB,SAC7B,UAAU,cACJ;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,KACrC,QAAQ,IAAI,CAed,CAAC;AAGF,eAAO,MAAM,GAAG,YAAmB,MAAM,MAAM,CAAC,KAAG,QAAQ,IAAI,CA2C9D,CAAC"}
{"version":3,"file":"openapiToEffect.d.ts","sourceRoot":"","sources":["../../src/openapiToEffect.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,WAAW,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,KAAK,OAAO,MAAM,gCAAgC,CAAC;AAwD1D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;IAC3B,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;IACpC,eAAe,EAAE,GAAG,CAAC;CACtB,CAAC;AACF,KAAK,uBAAuB,GAAG,eAAe,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC,cAAc,CAAA;CAAE,CAAC;AAGlF,eAAO,MAAM,eAAe,YAAmB,eAAe,KAAG,OAAO,CAAC,IAAI,CAiD5E,CAAC;AAGF,eAAO,MAAM,uBAAuB,YAAmB,uBAAuB,KAAG,OAAO,CAAC,IAAI,CAiJ5F,CAAC;AAGF,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC/B,CAAC;AAIF,eAAO,MAAM,YAAY,2CAAkD,YAAY,KAAG,OAAO,CAAC,eAAe,CAuDhH,CAAC;AAeF,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE;QACN,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;QAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;KAC1B,CAAC;IACF,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,YAAY,SAAgB,UAAU,KAAG,OAAO,CAAC,IAAI,CAwBjE,CAAC;AAKF,eAAO,MAAM,wBAAwB,SAAgB,UAAU,KAAG,OAAO,CAAC,IAAI,CAiB7E,CAAC;AAGF,eAAO,MAAM,GAAG,YAAmB,KAAK,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,IAAI,CAyC9D,CAAC"}

@@ -5,2 +5,4 @@ import { type OpenAPIV3_1 as OpenApi } from 'openapi-types';

export type OpenApiSchemaId = string;
export declare const decodeJsonPointer: (jsonPointer: string) => Array<string>;
export declare const encodeJsonPointer: (segments: Array<string>) => string;
//# sourceMappingURL=openapi.d.ts.map

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

{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../../src/util/openapi.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAG5D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;AAC3E,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC"}
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../../src/util/openapi.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAG5D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;AAC3E,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAKrC,eAAO,MAAM,iBAAiB,gBAAiB,MAAM,KAAG,KAAK,CAAC,MAAM,CAKnE,CAAC;AAIF,eAAO,MAAM,iBAAiB,aAAc,KAAK,CAAC,MAAM,CAAC,KAAG,MAE3D,CAAC"}
{
"name": "openapi-to-effect",
"version": "0.6.2",
"version": "0.7.0",
"license": "MPL-2.0",

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

"devDependencies": {
"typescript": "^5.4.5",
"tsx": "^4.11.0",
"@babel/core": "^7.24.6",
"@babel/cli": "^7.24.6",
"@babel/preset-env": "^7.24.6",
"@babel/preset-typescript": "^7.24.6",
"typescript": "^5.5.2",
"tsx": "^4.15.7",
"@babel/core": "^7.24.7",
"@babel/cli": "^7.24.7",
"@babel/preset-env": "^7.24.7",
"@babel/preset-typescript": "^7.24.7",
"babel-plugin-replace-import-extension": "^1.1.4",
"@types/node": "^20.12.12",
"@types/node": "^20.14.9",
"openapi-types": "^12.1.3"

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

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

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