UNPKG

oazapfts

Version:

OpenApi TypeScript client generator

1 lines 32.7 kB
{"version":3,"file":"context-9l26yjuA.cjs","names":[],"sources":["../src/helpers/getOnlyModeSuffix.ts","../src/helpers/toIdentifier.ts","../src/generate/tscodegen.ts","../src/generate/generateServers.ts","../src/context.ts"],"sourcesContent":["import { OnlyMode } from \"../context\";\n\nconst onlyModeSuffixes: Record<OnlyMode, string> = {\n readOnly: \"Read\",\n writeOnly: \"Write\",\n};\n\nexport function getOnlyModeSuffix(onlyMode?: OnlyMode) {\n if (!onlyMode) return \"\";\n return onlyModeSuffixes[onlyMode];\n}\n","import _ from \"lodash\";\nimport { OnlyMode } from \"../context\";\nimport { isValidIdentifier } from \"../generate/tscodegen\";\nimport { getOnlyModeSuffix } from \"./getOnlyModeSuffix\";\n\nexport function toIdentifier(s: string, upper = false, onlyMode?: OnlyMode) {\n let cc = _.camelCase(s) + getOnlyModeSuffix(onlyMode);\n if (upper) cc = _.upperFirst(cc);\n if (isValidIdentifier(cc)) return cc;\n return \"$\" + cc;\n}\n","import ts from \"typescript\";\nimport { toIdentifier } from \"../helpers/toIdentifier\";\n\nconst factory = ts.factory;\n\nexport const questionToken = factory.createToken(ts.SyntaxKind.QuestionToken);\n\nexport function createQuestionToken(token?: boolean | ts.QuestionToken) {\n if (!token) return undefined;\n if (token === true) return questionToken;\n return token;\n}\n\nexport const keywordType = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n void: factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword),\n never: factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword),\n null: factory.createLiteralTypeNode(factory.createNull()),\n unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\n};\n\ntype KeywordTypeName = keyof typeof keywordType;\n\nexport function createKeywordType(type: KeywordTypeName) {\n return keywordType[type];\n}\n\nexport const modifier = {\n async: factory.createModifier(ts.SyntaxKind.AsyncKeyword),\n export: factory.createModifier(ts.SyntaxKind.ExportKeyword),\n};\n\nexport function createLiteral(v: string | boolean | number) {\n switch (typeof v) {\n case \"string\":\n return factory.createStringLiteral(v);\n case \"boolean\":\n return v ? factory.createTrue() : factory.createFalse();\n case \"number\":\n return String(v).charAt(0) === \"-\"\n ? factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n factory.createNumericLiteral(String(-v)),\n )\n : factory.createNumericLiteral(String(v));\n }\n}\n\nexport function createEnumTypeNode(values: Array<string | boolean | number>) {\n const types = values.map((v) =>\n v === null\n ? keywordType.null\n : factory.createLiteralTypeNode(createLiteral(v)),\n );\n return types.length > 1 ? factory.createUnionTypeNode(types) : types[0];\n}\n\nexport function createTypeAliasDeclaration({\n modifiers,\n name,\n typeParameters,\n type,\n}: {\n modifiers?: Array<ts.Modifier>;\n name: string | ts.Identifier;\n typeParameters?: Array<ts.TypeParameterDeclaration>;\n type: ts.TypeNode;\n}) {\n return factory.createTypeAliasDeclaration(\n modifiers,\n name,\n typeParameters,\n type,\n );\n}\n\nexport function createInterfaceAliasDeclaration({\n modifiers,\n name,\n typeParameters,\n type,\n inheritedNodeNames,\n}: {\n modifiers?: Array<ts.Modifier>;\n name: string | ts.Identifier;\n typeParameters?: Array<ts.TypeParameterDeclaration>;\n type: ts.TypeNode;\n inheritedNodeNames?: (string | ts.Identifier)[];\n}) {\n const heritageClauses = inheritedNodeNames\n ? [\n factory.createHeritageClause(\n ts.SyntaxKind.ExtendsKeyword,\n inheritedNodeNames.map((name) => {\n const extendedInterfaceName =\n typeof name === \"string\" ? name : name.escapedText.toString();\n return factory.createExpressionWithTypeArguments(\n factory.createIdentifier(\n toIdentifier(extendedInterfaceName, true),\n ),\n undefined,\n );\n }),\n ),\n ]\n : [];\n return factory.createInterfaceDeclaration(\n modifiers,\n name,\n typeParameters,\n heritageClauses,\n (type as ts.TypeLiteralNode).members,\n );\n}\n\nexport function toExpression(ex: ts.Expression | string) {\n if (typeof ex === \"string\") return factory.createIdentifier(ex);\n return ex;\n}\n\nexport function createCall(\n expression: ts.Expression | string,\n {\n typeArgs,\n args,\n }: {\n typeArgs?: Array<ts.TypeNode>;\n args?: Array<ts.Expression>;\n } = {},\n) {\n return factory.createCallExpression(toExpression(expression), typeArgs, args);\n}\n\nexport function createMethodCall(\n method: string,\n opts: {\n typeArgs?: Array<ts.TypeNode>;\n args?: Array<ts.Expression>;\n },\n) {\n return createCall(\n factory.createPropertyAccessExpression(factory.createThis(), method),\n opts,\n );\n}\n\nexport function createObjectLiteral(props: [string, string | ts.Expression][]) {\n return factory.createObjectLiteralExpression(\n props.map(([name, identifier]) =>\n createPropertyAssignment(name, toExpression(identifier)),\n ),\n true,\n );\n}\n\nexport function createPropertyAssignment(\n name: string,\n expression: ts.Expression,\n) {\n if (ts.isIdentifier(expression)) {\n if (expression.text === name) {\n return factory.createShorthandPropertyAssignment(name);\n }\n }\n return factory.createPropertyAssignment(propertyName(name), expression);\n}\n\nexport function block(...statements: ts.Statement[]) {\n return factory.createBlock(statements, true);\n}\n\nexport function createArrowFunction(\n parameters: ts.ParameterDeclaration[],\n body: ts.ConciseBody,\n {\n modifiers,\n typeParameters,\n type,\n equalsGreaterThanToken,\n }: {\n modifiers?: ts.Modifier[];\n typeParameters?: ts.TypeParameterDeclaration[];\n type?: ts.TypeNode;\n equalsGreaterThanToken?: ts.EqualsGreaterThanToken;\n } = {},\n) {\n return factory.createArrowFunction(\n modifiers,\n typeParameters,\n parameters,\n type,\n equalsGreaterThanToken,\n body,\n );\n}\n\nexport function createFunctionDeclaration(\n name: string | ts.Identifier | undefined,\n {\n modifiers,\n asteriskToken,\n typeParameters,\n type,\n }: {\n modifiers?: ts.Modifier[];\n asteriskToken?: ts.AsteriskToken;\n typeParameters?: ts.TypeParameterDeclaration[];\n type?: ts.TypeNode;\n },\n parameters: ts.ParameterDeclaration[],\n body?: ts.Block,\n): ts.FunctionDeclaration {\n return factory.createFunctionDeclaration(\n modifiers,\n asteriskToken,\n name,\n typeParameters,\n parameters,\n type,\n body,\n );\n}\n\nexport function createClassDeclaration({\n modifiers,\n name,\n typeParameters,\n heritageClauses,\n members,\n}: {\n modifiers?: Array<ts.Modifier>;\n name?: string | ts.Identifier;\n typeParameters?: Array<ts.TypeParameterDeclaration>;\n heritageClauses?: Array<ts.HeritageClause>;\n members: Array<ts.ClassElement>;\n}) {\n return factory.createClassDeclaration(\n modifiers,\n name,\n typeParameters,\n heritageClauses,\n members,\n );\n}\n\nexport function createConstructor({\n modifiers,\n parameters,\n body,\n}: {\n modifiers?: Array<ts.Modifier>;\n parameters: Array<ts.ParameterDeclaration>;\n body?: ts.Block;\n}) {\n return factory.createConstructorDeclaration(modifiers, parameters, body);\n}\n\nexport function createMethod(\n name:\n | string\n | ts.Identifier\n | ts.StringLiteral\n | ts.NumericLiteral\n | ts.ComputedPropertyName,\n {\n modifiers,\n asteriskToken,\n questionToken,\n typeParameters,\n type,\n }: {\n modifiers?: ts.Modifier[];\n asteriskToken?: ts.AsteriskToken;\n questionToken?: ts.QuestionToken | boolean;\n typeParameters?: ts.TypeParameterDeclaration[];\n type?: ts.TypeNode;\n } = {},\n parameters: ts.ParameterDeclaration[] = [],\n body?: ts.Block,\n): ts.MethodDeclaration {\n return factory.createMethodDeclaration(\n modifiers,\n asteriskToken,\n name,\n createQuestionToken(questionToken),\n typeParameters,\n parameters,\n type,\n body,\n );\n}\n\nexport function createParameter(\n name: string | ts.BindingName,\n {\n modifiers,\n dotDotDotToken,\n questionToken,\n type,\n initializer,\n }: {\n modifiers?: Array<ts.Modifier>;\n dotDotDotToken?: ts.DotDotDotToken;\n questionToken?: ts.QuestionToken | boolean;\n type?: ts.TypeNode;\n initializer?: ts.Expression;\n },\n): ts.ParameterDeclaration {\n return factory.createParameterDeclaration(\n modifiers,\n dotDotDotToken,\n name,\n createQuestionToken(questionToken),\n type,\n initializer,\n );\n}\n\nfunction propertyName(name: string | ts.PropertyName): ts.PropertyName {\n if (typeof name === \"string\") {\n return isValidIdentifier(name)\n ? factory.createIdentifier(name)\n : factory.createStringLiteral(name);\n }\n return name;\n}\n\nexport function createPropertySignature({\n modifiers,\n name,\n questionToken,\n type,\n}: {\n modifiers?: Array<ts.Modifier>;\n name: ts.PropertyName | string;\n questionToken?: ts.QuestionToken | boolean;\n type?: ts.TypeNode;\n}) {\n return factory.createPropertySignature(\n modifiers,\n propertyName(name),\n createQuestionToken(questionToken),\n type,\n );\n}\n\nexport function createIndexSignature(\n type: ts.TypeNode,\n {\n modifiers,\n indexName = \"key\",\n indexType = keywordType.string,\n }: {\n indexName?: string;\n indexType?: ts.TypeNode;\n modifiers?: Array<ts.Modifier>;\n } = {},\n) {\n return factory.createIndexSignature(\n modifiers,\n [createParameter(indexName, { type: indexType })],\n type,\n );\n}\n\nexport function createObjectBinding(\n elements: Array<{\n name: string | ts.BindingName;\n dotDotDotToken?: ts.DotDotDotToken;\n propertyName?: string | ts.PropertyName;\n initializer?: ts.Expression;\n }>,\n) {\n return factory.createObjectBindingPattern(\n elements.map(({ dotDotDotToken, propertyName, name, initializer }) =>\n factory.createBindingElement(\n dotDotDotToken,\n propertyName,\n name,\n initializer,\n ),\n ),\n );\n}\n\nexport function createTemplateString(\n head: string,\n spans: Array<{ literal: string; expression: ts.Expression }>,\n) {\n if (!spans.length) return factory.createStringLiteral(head);\n return factory.createTemplateExpression(\n factory.createTemplateHead(head),\n spans.map(({ expression, literal }, i) =>\n factory.createTemplateSpan(\n expression,\n i === spans.length - 1\n ? factory.createTemplateTail(literal)\n : factory.createTemplateMiddle(literal),\n ),\n ),\n );\n}\n\nexport function findNode<T extends ts.Node>(\n nodes: ts.NodeArray<ts.Node>,\n kind: T extends { kind: infer K } ? K : never,\n test?: (node: T) => boolean | undefined,\n): T {\n const node = nodes.find(\n (s) => s.kind === kind && (!test || test(s as T)),\n ) as T;\n if (!node) throw new Error(`Node not found: ${kind}`);\n return node;\n}\n\nexport function getName(name: ts.Node) {\n if (ts.isIdentifier(name)) {\n return name.escapedText;\n }\n if (ts.isLiteralExpression(name)) {\n return name.text;\n }\n return \"\";\n}\n\nexport function getFirstDeclarationName(n: ts.VariableStatement) {\n const name = ts.getNameOfDeclaration(n.declarationList.declarations[0]);\n return name ? getName(name) : \"\";\n}\n\nexport function findFirstVariableDeclaration(\n nodes: ts.NodeArray<ts.Node>,\n name: string,\n) {\n const statement = findNode<ts.VariableStatement>(\n nodes,\n ts.SyntaxKind.VariableStatement,\n (n) => getFirstDeclarationName(n) === name,\n );\n const [first] = statement.declarationList.declarations;\n if (!first) throw new Error(`Missing ${name} declaration`);\n return first;\n}\n\nexport function changePropertyValue(\n o: ts.ObjectLiteralExpression,\n property: string,\n value: ts.Expression,\n) {\n const p = o.properties.find(\n (p) => ts.isPropertyAssignment(p) && getName(p.name) === property,\n );\n if (p && ts.isPropertyAssignment(p)) {\n // p.initializer is readonly, this might break in a future TS version, but works fine for now.\n Object.assign(p, { initializer: value });\n } else {\n throw new Error(`No such property: ${property}`);\n }\n}\n\ntype Visitor = (\n node: ts.Node,\n context: ts.TransformationContext,\n) => void | ts.Node;\n\nfunction createTransformer(visitor: Visitor) {\n return <T extends ts.Node>(context: ts.TransformationContext) =>\n (rootNode: T) => {\n function visit(node: ts.Node): ts.Node {\n const result = visitor(node, context);\n\n if (result) {\n return result;\n }\n\n return ts.visitEachChild(node, visit, context);\n }\n\n return ts.visitNode(rootNode, visit);\n };\n}\n\nexport function transform<T extends ts.Node>(\n source: T,\n ...visitors: Visitor[]\n) {\n const result = ts.transform(source, visitors.map(createTransformer));\n\n return result.transformed[0] as T;\n}\n\nexport function appendNodes<T extends ts.Node>(\n array: ts.NodeArray<T>,\n ...nodes: T[]\n) {\n return factory.createNodeArray([...array, ...nodes]);\n}\n\nexport function addComment<T extends ts.Node>(node: T, comment?: string) {\n if (!comment) return node;\n return ts.addSyntheticLeadingComment(\n node,\n ts.SyntaxKind.MultiLineCommentTrivia,\n `*\\n * ${comment.replace(/\\n/g, \"\\n * \")}\\n `,\n true,\n );\n}\n\nconst printer = ts.createPrinter({\n newLine: ts.NewLineKind.LineFeed,\n});\n\nexport function printNode(node: ts.Node) {\n const file = ts.createSourceFile(\n \"someFileName.ts\",\n \"\",\n ts.ScriptTarget.Latest,\n /*setParentNodes*/ false,\n ts.ScriptKind.TS,\n );\n return printer.printNode(ts.EmitHint.Unspecified, node, file);\n}\n\nexport function printNodes(nodes: ts.Node[]) {\n const file = ts.createSourceFile(\n \"someFileName.ts\",\n \"\",\n ts.ScriptTarget.Latest,\n /*setParentNodes*/ false,\n ts.ScriptKind.TS,\n );\n return nodes\n .map((node) => printer.printNode(ts.EmitHint.Unspecified, node, file))\n .join(\"\\n\");\n}\n\nexport function printFile(sourceFile: ts.SourceFile) {\n return printer.printFile(sourceFile);\n}\n\nexport function isValidIdentifier(str: string) {\n if (!str.length || str.trim() !== str) return false;\n const node = ts.parseIsolatedEntityName(str, ts.ScriptTarget.Latest);\n return (\n !!node &&\n node.kind === ts.SyntaxKind.Identifier &&\n ts.identifierToKeywordKind(node) === undefined\n );\n}\n\nexport function updateVariableDeclaration(\n node: ts.VariableDeclaration,\n updates: Partial<ts.VariableDeclaration>,\n) {\n return ts.factory.updateVariableDeclaration(\n node,\n updates.name || node.name,\n updates.exclamationToken || node.exclamationToken,\n updates.type || node.type,\n updates.initializer || node.initializer,\n );\n}\n\nexport function updateFunctionDeclaration(\n node: ts.FunctionDeclaration,\n updates: Partial<ts.FunctionDeclaration>,\n) {\n return ts.factory.updateFunctionDeclaration(\n node,\n updates.modifiers || node.modifiers,\n updates.asteriskToken || node.asteriskToken,\n updates.name || node.name,\n updates.typeParameters || node.typeParameters,\n updates.parameters || node.parameters,\n updates.type || node.type,\n updates.body || node.body,\n );\n}\n","import _ from \"lodash\";\nimport * as cg from \"./tscodegen\";\nimport ts from \"typescript\";\nimport { OpenAPIV3 } from \"openapi-types\";\nimport { ServerObject } from \"../helpers/openApi3-x\";\n\nconst factory = ts.factory;\n\nfunction createTemplate(url: string) {\n const tokens = url.split(/{([\\s\\S]+?)}/g);\n const chunks = _.chunk(tokens.slice(1), 2);\n return cg.createTemplateString(\n tokens[0],\n chunks.map(([expression, literal]) => ({\n expression: factory.createIdentifier(expression),\n literal,\n })),\n );\n}\n\nfunction createServerFunction(\n template: string,\n vars: Record<string, OpenAPIV3.ServerVariableObject>,\n) {\n const params = [\n cg.createParameter(\n cg.createObjectBinding(\n Object.entries(vars || {}).map(([name, value]) => {\n return {\n name,\n initializer: cg.createLiteral(value.default),\n };\n }),\n ),\n {\n type: factory.createTypeLiteralNode(\n Object.entries(vars || {}).map(([name, value]) => {\n return cg.createPropertySignature({\n name,\n type: value.enum\n ? cg.createEnumTypeNode(value.enum)\n : factory.createUnionTypeNode([\n cg.keywordType.string,\n cg.keywordType.number,\n cg.keywordType.boolean,\n ]),\n });\n }),\n ),\n },\n ),\n ];\n\n return cg.createArrowFunction(params, createTemplate(template));\n}\n\nfunction generateServerExpression(server: ServerObject) {\n return server.variables\n ? createServerFunction(server.url, server.variables)\n : factory.createStringLiteral(server.url);\n}\n\nfunction defaultUrl(server?: ServerObject) {\n if (!server) return \"/\";\n const { url, variables } = server;\n if (!variables) return url;\n return url.replace(/\\{(.+?)\\}/g, (m, name) =>\n variables[name] ? String(variables[name].default) : m,\n );\n}\n\nexport function defaultBaseUrl(servers?: ServerObject[]) {\n return defaultUrl(servers?.[0]);\n}\n\nfunction serverName(server: ServerObject, index: number) {\n return server.description\n ? _.camelCase(server.description.replace(/\\W+/, \" \"))\n : `server${index + 1}`;\n}\n\nexport function generateServers(servers: ServerObject[]) {\n return cg.createObjectLiteral(\n servers.map((server, i) => [\n serverName(server, i),\n generateServerExpression(server),\n ]),\n );\n}\n\nexport function createServersStatement(servers: ServerObject[]) {\n return ts.factory.createVariableStatement(\n [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n ts.factory.createVariableDeclarationList(\n [\n ts.factory.createVariableDeclaration(\n \"servers\",\n undefined,\n undefined,\n generateServers(servers),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n );\n}\n","import ts, {\n InterfaceDeclaration,\n Statement,\n TypeAliasDeclaration,\n TypeReferenceNode,\n} from \"typescript\";\nimport type { OazapftsOptions } from \"./\";\nimport type {\n Document,\n SchemaObject,\n ServerObject,\n} from \"./helpers/openApi3-x\";\nimport { defaultBaseUrl } from \"./generate/generateServers\";\nimport _ from \"lodash\";\nimport { CustomHeaders } from \"@oazapfts/runtime\";\n\n// ─── Data types for template parts ──────────────────────────────────────────\n\nexport type ImportSpecifier = {\n name: string;\n as?: string;\n};\nexport type DefaultImport = [string, { from: string }];\nexport type NamespaceImport = [{ namespace: string }, { from: string }];\nexport type ImportsWithoutDefault = [\n (ImportSpecifier | string)[],\n { from: string },\n];\nexport type ImportWithDefault = [\n string,\n (ImportSpecifier | string)[],\n { from: string },\n];\n\nexport type Import =\n | string\n | ImportsWithoutDefault\n | DefaultImport\n | ImportWithDefault\n | NamespaceImport;\n\nexport type OnlyMode = \"readOnly\" | \"writeOnly\";\nexport type OnlyModes = Record<OnlyMode, boolean>;\n\nexport type ReadonlyDeep<T> = {\n readonly [P in keyof T]: ReadonlyDeep<T[P]>;\n};\n\nexport type Defaults = {\n baseUrl?: string;\n headers?: CustomHeaders;\n FormData?: ts.ClassExpression | ts.Identifier;\n fetch?: ts.FunctionExpression | ts.ArrowFunction | ts.Identifier;\n};\n\nexport type OazapftsContext = {\n readonly opts: ReadonlyDeep<OazapftsOptions>;\n readonly spec: Document;\n readonly mode?: OnlyMode;\n\n /** Banner comment at the top of the file (the text content, not including comment markers) */\n banner: string;\n /** Import declarations (AST nodes) */\n imports: Import[];\n /** Runtime defaults (baseUrl, etc.) - will be generated as `export const defaults = { ... }` */\n defaults: Defaults;\n /** Server definitions - will be generated as `export const servers = { ... }` */\n servers: ServerObject[];\n /** Initialization statements (e.g., `const oazapfts = Oazapfts.runtime(defaults)`) */\n init: Statement[];\n\n // see `preprocessComponents` for the definition of a discriminating schema\n discriminatingSchemas: Set<SchemaObject>;\n\n aliases: (TypeAliasDeclaration | InterfaceDeclaration)[];\n\n enumAliases: Statement[];\n enumRefs: Record<string, { values: string; type: TypeReferenceNode }>;\n\n // Collect the types of all referenced schemas so we can export them later\n // Referenced schemas can be pointing at the following versions:\n // - \"base\": The regular type/interface e.g. ExampleSchema\n // - \"readOnly\": The readOnly version e.g. ExampleSchemaRead\n // - \"writeOnly\": The writeOnly version e.g. ExampleSchemaWrite\n refs: Record<\n string,\n {\n base: TypeReferenceNode;\n readOnly?: TypeReferenceNode;\n writeOnly?: TypeReferenceNode;\n }\n >;\n\n // Maps a referenced schema to its readOnly/writeOnly status\n // This field should be used exclusively within the `checkSchemaOnlyMode` method\n refsOnlyMode: Map<string, OnlyModes>;\n\n // Keep track of already used type aliases\n typeAliases: Record<string, number>;\n // Keep track of already used operation names for collision handling\n operationNames: Map<string, number>;\n};\n\nexport function createContext(\n inputSpec: Document,\n opts: OazapftsContext[\"opts\"] = {},\n): OazapftsContext {\n const spec = _.cloneDeep(inputSpec);\n\n return {\n opts,\n spec,\n mode: undefined,\n\n // Template parts\n banner: `DO NOT MODIFY - This file has been generated using oazapfts.\nSee https://www.npmjs.com/package/oazapfts`,\n imports: [\n [{ namespace: \"Oazapfts\" }, { from: \"@oazapfts/runtime\" }],\n [{ namespace: \"QS\" }, { from: \"@oazapfts/runtime/query\" }],\n ],\n defaults: { baseUrl: defaultBaseUrl(spec.servers), headers: {} },\n servers: spec.servers || [],\n init: createInit(),\n\n // Internal state\n discriminatingSchemas: new Set(),\n aliases: [],\n enumAliases: [],\n enumRefs: {},\n refs: {},\n refsOnlyMode: new Map(),\n typeAliases: {},\n operationNames: new Map(),\n };\n}\n\nexport function withMode(\n ctx: OazapftsContext,\n mode?: OnlyMode,\n): OazapftsContext {\n return { ...ctx, mode };\n}\n\n/** Creates: const oazapfts = Oazapfts.runtime(defaults); */\nfunction createInit(): Statement[] {\n return [\n ts.factory.createVariableStatement(\n undefined,\n ts.factory.createVariableDeclarationList(\n [\n ts.factory.createVariableDeclaration(\n \"oazapfts\",\n undefined,\n undefined,\n ts.factory.createCallExpression(\n ts.factory.createPropertyAccessExpression(\n ts.factory.createIdentifier(\"Oazapfts\"),\n \"runtime\",\n ),\n undefined,\n [ts.factory.createIdentifier(\"defaults\")],\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n ),\n ];\n}\n"],"mappings":"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"}