@looker/sdk-codegen 21.3.1 → 21.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/specConverter.ts"],"names":["isEmpty","ApiModel","warn","warning","Error","appJson","getSpecsFromVersions","versions","fetcher","undefined","items","uniqueId","v","specKey","version","max","status","length","frag","substr","supported_versions","swagger_url","spec","key","isDefault","specURL","api","defaultMimeFormats","produces","consumes","swapXLookerTags","swaps","pattern","replacement","forEach","swap","replace","openApiStyle","collectionFormat","styles","csv","pipes","ssv","findOpenApiParam","endpoint","verb","name","result","paths","parameters","find","p","fixConversionObjects","swagger","fixes","Object","entries","op","httpMethod","method","operation","params","param","in","required","fix","operationId","requestBody","push","format","style","newParam","JSON","stringify","isSwagger","isOpenApi","openapi","fixConversion","openApiSpec","swaggerSpec","parse","swapRef","ref","structName","parts","split","convertParam","schema","type","explode","convertResponses","responses","formats","code","response","description","content","convertOp","moveKeys","moveKey","value","body","values","xdep","deprecated","convertPathsAndBodies","requestBodies","path","entry","ep","convertDefs","defs","_","struct","properties","prop","$ref","upgradeSpecObject","cleanup","schemas","definitions","info","tags","servers","url","schemes","host","basePath","components","upgradeSpec","getLookerSpecs","sdk","serverUrl","versionUrl","ok","get","getSpecLinks","include","prefix","looker_release_version","deriveSpec","current_version","specs","filter","map","loadSpecs","links","json","fromJson"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport isEmpty from 'lodash/isEmpty'\nimport type { APIMethods } from '@looker/sdk-rtl'\nimport type { ArgValues, IApiModel, KeyedCollection } from './sdkModels'\nimport { ApiModel } from './sdkModels'\n\nconst warn = (warning: string) => {\n throw new Error(warning)\n}\n\nconst appJson = 'application/json'\n\n/** This declaration is duplicated DIRECTLY from @looker/sdk API 4.0 models to detach dependency */\nexport interface IApiVersion {\n /**\n * Current Looker release version number (read-only)\n */\n looker_release_version?: string\n current_version?: IApiVersionElement\n /**\n * Array of versions supported by this Looker instance (read-only)\n */\n supported_versions?: IApiVersionElement[]\n /**\n * API server base url (read-only)\n */\n api_server_url?: string\n /**\n * Web server base url (read-only)\n */\n web_server_url?: string\n}\n\n/** This declaration is duplicated DIRECTLY from @looker/sdk API 4.0 models to detach dependency */\nexport interface IApiVersionElement {\n /**\n * Version number as it appears in '/api/xxx/' urls (read-only)\n */\n version?: string | null\n /**\n * Full version number including minor version (read-only)\n */\n full_version?: string | null\n /**\n * Status of this version (read-only)\n */\n status?: string | null\n /**\n * Url for swagger.json for this version (read-only)\n */\n swagger_url?: string | null\n}\n\n/**\n * Describes the mime types supported by an operation\n */\nexport interface MimeFormats {\n /**\n * Output types produced by an operation\n */\n produces: string[]\n /**\n * Input types accepted by an operation\n */\n consumes: string[]\n}\n\n/** codegen specification item */\nexport interface SpecItem {\n /** Key for specification in collection. Duplicated for atomic passing */\n key: string\n /** API version status */\n status: string // 'current' | 'deprecated' | 'experimental' | 'stable'\n /** API version of spec */\n version: string\n /** true if this is the default spec */\n isDefault: boolean\n /** Compiled version of spec */\n api?: ApiModel\n /** URL for retrieving spec */\n specURL?: string\n /** string content of spec */\n specContent?: string\n}\n\n/** Keyed collection of specification items */\nexport type SpecList = KeyedCollection<SpecItem>\n\n/**\n * Looker specification version item from versions payload\n */\nexport interface ISpecItem {\n /** Abbreviated version of the API */\n version: string\n /** Semantic version of the API */\n full_version: string\n /** Usually legacy, stable, experimental, current */\n status: string\n /** Link to the swagger specification */\n swagger_url: string\n}\n\n/**\n * Callback for fetching and compiling specification to ApiModel\n */\nexport type SpecFetcher = (spec: SpecItem) => Promise<ApiModel | undefined>\n\n/**\n * Return all public API specifications from an ApiVersion payload\n * @param versions payload from a Looker server\n * @param fetcher fetches and compiles spec to ApiModel\n */\nexport const getSpecsFromVersions = async (\n versions: IApiVersion,\n fetcher: SpecFetcher | undefined = undefined\n): Promise<SpecList> => {\n const items = {}\n\n /**\n * Create a unique spec key for this version\n * @param v version to identify\n */\n const uniqueId = (v: IApiVersionElement) => {\n let specKey = v.version || 'api'\n const max = v.status?.length || 0\n let frag = 1\n while (items[specKey]) {\n if (frag <= max) {\n // More than one spec for this version\n specKey = `${v.version}${v.status?.substr(0, frag)}`\n } else {\n specKey = `${v.version}${v.status}${frag}`\n }\n frag++\n }\n return specKey\n }\n\n if (versions.supported_versions) {\n for (const v of versions.supported_versions) {\n // Tell TypeScript these are all defined because IApiVersion definition is lax\n if (v.status && v.version && v.swagger_url) {\n if (\n v.status !== 'internal_test' &&\n v.status !== 'deprecated' &&\n v.status !== 'legacy'\n ) {\n const spec: SpecItem = {\n key: uniqueId(v),\n status: v.status,\n version: v.version,\n isDefault: v.status === 'current',\n specURL: v.swagger_url,\n }\n if (fetcher) {\n spec.api = await fetcher(spec)\n }\n items[spec.key] = spec\n }\n }\n }\n }\n return items\n}\n\n/**\n * Payload returned by the Looker /versions endpoint\n */\nexport interface ILookerVersions {\n /** This Looker version */\n looker_release_version: string\n /** The current/default API version */\n current_version: ISpecItem\n /** All API versions */\n supported_versions: ISpecItem[]\n /** API server url */\n api_server_url: string\n /** Web server url */\n web_server_url: string\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\n\n/**\n * Api Specification with on-demand determination of values\n */\nexport interface IApiSpecLink {\n /** Name of the specification */\n name: string\n /** API version */\n version: string\n /** API version status */\n status: string\n /** Location of the specification */\n url: string\n /** Parsed content. Will be loaded on demand but is assigned to an empty object by default. */\n api: IApiModel\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\nexport type SpecLinks = IApiSpecLink[]\n\n/**\n * Defaults the mime formats for producing and consuming\n */\nexport const defaultMimeFormats: MimeFormats = {\n produces: [appJson],\n consumes: [appJson],\n}\n/**\n * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#style-values\n */\ntype OpenApiParameterStyle =\n | 'matrix'\n | 'label'\n | 'form'\n | 'simple'\n | 'spaceDelimited'\n | 'pipeDelimited'\n | 'deepObject'\n | undefined\n\n/**\n * Replaces x-looker-nullable with nullable for parameters and properties in a string\n * @param {string} spec\n * @returns {Promise<string>} name of the file written\n */\nexport const swapXLookerTags = (spec: string) => {\n const swaps = [\n { pattern: /x-looker-nullable/gi, replacement: 'nullable' },\n { pattern: /x-looker-values/gi, replacement: 'enum' },\n ]\n swaps.forEach((swap) => {\n spec = spec.replace(swap.pattern, swap.replacement)\n })\n return spec\n}\n\n/**\n * Convert OpenAPI 2 collectionFormat to OpenApi 3 style\n *\n * See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#style-values for\n * conversion guidelines\n *\n * @param collectionFormat string\n * @returns the converted style, or undefined\n */\nexport const openApiStyle = (\n collectionFormat: string\n): OpenApiParameterStyle => {\n if (!collectionFormat) return undefined\n const styles: { [key: string]: OpenApiParameterStyle } = {\n csv: 'simple',\n pipes: 'pipeDelimited',\n ssv: 'spaceDelimited',\n }\n if (collectionFormat in styles) {\n return styles[collectionFormat]\n }\n return undefined\n}\n\n/**\n * Utility function to find the named parameter for an OpenAPI endpoint\n * @param api JSON structure of OpenAPI spec\n * @param endpoint url pattern for endpoint\n * @param verb HTTP method to locate\n * @param name name of parameter to find\n * @returns the matched parameter, or undefined\n */\nconst findOpenApiParam = (\n api: any,\n endpoint: string,\n verb: string,\n name: string\n) => {\n const result = api.paths[endpoint][verb].parameters.find(\n (p: { name: string }) => p.name === name\n )\n if (!result) {\n warn(`Missing parameter: ${endpoint} ${verb} parameter ${name}`)\n }\n return result\n}\n\n/**\n * Results of the spec conversion\n */\nexport interface IConversionResults {\n /**\n * JSON.stringify of the spec\n */\n spec: string\n /**\n * List of fixes to the spec\n */\n fixes: string[]\n}\n\nexport const fixConversionObjects = (api: any, swagger: any) => {\n const paths = swagger.paths\n const fixes: string[] = []\n Object.entries(paths).forEach(([endpoint, op]) => {\n Object.entries(op as any).forEach(([httpMethod, method]) => {\n const operation = method as any\n const params = operation.parameters\n if (params) {\n Object.entries(params).forEach(([, p]) => {\n const param = p as any\n if (param.name === 'body' && param.in === 'body') {\n // Set `required` in requestBody\n if ('required' in param) {\n // explicitly setting required value\n const required = param.required\n const fix = `${endpoint}::${operation.operationId} setting requestBody.required to ${required}`\n const requestBody = api.paths[endpoint][httpMethod].requestBody\n if (!requestBody) {\n warn(\n `Failed to find \"requestBody\" in OAS for swagger \"body param\" fix: ${fix}`\n )\n } else {\n if (requestBody.required !== required) {\n fixes.push(fix)\n }\n requestBody.required = required\n }\n }\n }\n\n if (param.collectionFormat) {\n // Set style from collectionFormat if it's not set\n const format = param.collectionFormat\n const style = openApiStyle(format)\n if (style === undefined) {\n warn(\n `OAS style conversion failed: collectionFormat '${param.collectionFormat}' is unknown`\n )\n } else {\n const fix = `${endpoint}::${operation.operationId} ${param.name} '${format}' -> '${style}'`\n const newParam = findOpenApiParam(\n api,\n endpoint,\n httpMethod,\n param.name\n )\n if (newParam && newParam.style !== style) {\n newParam.style = style\n fixes.push(fix)\n }\n }\n }\n })\n }\n })\n })\n\n return { fixes, spec: JSON.stringify(api) }\n}\n\n/**\n * Returns true if this spec is a swagger specification\n * @param spec to check\n */\nexport const isSwagger = (spec: any) => spec.swagger !== undefined\n\n/**\n * Returns true spec is an OpenAPI specification\n * @param spec to check\n */\nexport const isOpenApi = (spec: any) => spec.openapi !== undefined\n\n/**\n * This is a post-fix operation for the OpenAPI converter which currently misses this type of conversion\n *\n * - Converts missing swagger collectionFormat values to OpenAPI styles\n * - Flags OAS.requestBody as required or optional\n *\n * @param openApiSpec converted OpenAPI spec\n * @param swaggerSpec original swagger spec that may contain missed conversions\n * @returns modified openApiSpec and fix log in IConversionResults\n */\nexport const fixConversion = (\n openApiSpec: string,\n swaggerSpec: string\n): IConversionResults => {\n return fixConversionObjects(JSON.parse(openApiSpec), JSON.parse(swaggerSpec))\n}\n\n/**\n * Convert a swagger structure ref to an OpenAPI structure ref\n *\n * TODO update this to the typescript that understands replaceAll\n * @param ref string reference to convert\n */\nexport const swapRef = (ref: string) =>\n ref.replace(/#\\/definitions\\//g, '#/components/schemas/')\n\n/**\n * Get the name of the structure from the reference string\n * @param ref to partse\n */\nexport const structName = (ref: string) => {\n if (!ref) return undefined\n const parts = ref.split('/')\n return parts[parts.length - 1]\n}\n\n/**\n * Moves type, format, items to schema\n * Converts collectionFormat to style\n * @param param to convert\n */\nexport const convertParam = (param: any) => {\n const schema: any = { type: param.type }\n const result = { ...param }\n delete result.type\n if (param.format) {\n schema.format = param.format\n delete result.format\n }\n if (param.collectionFormat) {\n result.style = openApiStyle(param.collectionFormat)\n delete result.collectionFormat\n }\n if (param.items) {\n schema.items = param.items\n result.explode = false\n delete result.items\n }\n result.schema = schema\n return result\n}\n\n/**\n * Convert responses for the right response formats\n * @param responses response to convert\n * @param formats mime formats\n */\nexport const convertResponses = (\n responses: ArgValues,\n formats = defaultMimeFormats\n) => {\n Object.entries(responses).forEach(([code, response]) => {\n responses[code] = {\n description: response.description,\n }\n if (response.schema) {\n const content = {}\n formats.produces.forEach(\n (format) => (content[format] = { schema: response.schema })\n )\n responses[code].content = content\n }\n })\n return responses\n}\n\n/**\n * Convert an operation\n * Assign schemas in params, create request bodies, update $refs\n * @param op operation to convert\n * @param formats mime format consumer and producer\n * @param moveKeys true to move keys for reference OAS comparison\n */\nexport const convertOp = (\n op: ArgValues,\n formats = defaultMimeFormats,\n moveKeys = false\n) => {\n // If keys need to be shuffled for file comparison reasons, uncomment this function\n const moveKey = (key: string, value?: any) => {\n if (!moveKeys || !(key in op)) return value\n if (!value) value = op[key]\n if (value) {\n delete op[key]\n op[key] = value\n }\n return value\n }\n\n let { produces, consumes } = formats\n const body = {}\n if (op.produces) {\n produces = op.produces\n delete op.produces\n }\n if (op.consumes) {\n consumes = op.consumes\n delete op.consumes\n }\n if (op.parameters) {\n // Copy parameters before rebuilding\n const params = { ...op.parameters }\n op.parameters = []\n Object.values(params).forEach((p: any) => {\n if (p.in === 'body') {\n // const struct = structName(p.schema?.$ref)\n op.requestBody = {}\n // if (struct) {\n // op.requestBody.$ref = `#/components/requestBodies/${struct}`\n // }\n if (p.schema) {\n op.requestBody.content = { [consumes[0]]: { schema: p.schema } }\n }\n op.requestBody.description = p.description\n if ('required' in p) op.requestBody.required = p.required\n // if (struct) {\n // body[struct] = { ...op.requestBody }\n // body[struct].$ref = `#/components/schema/${struct}`\n // }\n } else {\n op.parameters.push(convertParam(p))\n }\n })\n if (op.parameters.length === 0) delete op.parameters\n }\n moveKey('responses', convertResponses(op.responses, { produces, consumes }))\n moveKey('deprecated')\n const xdep = 'x-looker-deprecated'\n if (xdep in op) {\n op.deprecated = op[xdep]\n delete op[xdep]\n }\n moveKey('x-looker-status')\n moveKey('x-looker-activity-type')\n moveKey('x-looker-rate-limited')\n return { op, body }\n}\n\n/**\n * Assign schemas and request bodies\n * @param paths to process\n * @param formats mime response types\n */\nexport const convertPathsAndBodies = (\n paths: ArgValues,\n formats = defaultMimeFormats\n) => {\n const result = { paths: {}, requestBodies: {} }\n Object.entries(paths).forEach(([path, entry]) => {\n result.paths[path] = {}\n // Hack to accommodate linting limitations\n const endpoint: ArgValues = entry\n Object.entries(endpoint).forEach(([verb, op]) => {\n const ep = convertOp(op, formats)\n result.paths[path][verb] = ep.op\n Object.entries(ep.body as ArgValues).forEach(([name, body]) => {\n result.requestBodies[name] = body\n })\n })\n })\n return result\n}\n\n/**\n * Convert structure definitions\n * @param defs to convert\n */\nexport const convertDefs = (defs: ArgValues): ArgValues => {\n Object.entries(defs).forEach(([_, struct]) => {\n Object.entries(struct.properties as ArgValues).forEach(([name, prop]) => {\n if (prop.$ref) {\n // Evidently OAS only wants the ref for the property type\n struct.properties[name] = { $ref: prop.$ref }\n }\n })\n })\n return defs\n}\n\n/**\n * On-demand conversion of swagger to openAPI specification\n * @param spec to possibly convert\n * @returns OpenAPI version of the specification or throws error if not Swagger or OpenAPI\n */\nexport const upgradeSpecObject = (spec: any) => {\n if (isOpenApi(spec)) {\n return JSON.parse(swapXLookerTags(JSON.stringify(spec)))\n }\n if (!isSwagger(spec)) {\n throw new Error('Input is not a Swagger or OpenAPI specification')\n }\n const cleanup = swapRef(swapXLookerTags(JSON.stringify(spec)))\n spec = JSON.parse(cleanup)\n const consumes = spec.consumes || [appJson]\n const produces = spec.produces || [appJson]\n const formats = { produces, consumes }\n const { paths, requestBodies } = convertPathsAndBodies(spec.paths, formats)\n // TODO create a requestBodies entry for every struct used > 1x?\n // TODO reassign op.requestBody for all requestBodies entries?\n const schemas = convertDefs(spec.definitions)\n const api = {\n openapi: '3.0.0',\n info: spec.info,\n tags: spec.tags,\n paths,\n servers: [{ url: `${spec.schemes[0]}://${spec.host}${spec.basePath}` }],\n components: {\n requestBodies,\n schemas: schemas,\n },\n }\n // const result = fixConversionObjects(api, spec)\n return api\n}\n\n/**\n * Upgrade a spec to OpenAPI if it's not already an OpenAPI spec\n * @param spec to upgrade\n */\nexport const upgradeSpec = (spec: string | Record<string, unknown>) => {\n if (typeof spec === 'string') spec = JSON.parse(spec)\n return JSON.stringify(upgradeSpecObject(spec))\n}\n\n/**\n * Fetches specs via /versions payload from the API server url\n * @param sdk APIMethods implementation that supports authenticating a request\n * @param serverUrl base url of the /versions server. Typically something like https://my.looker.com:19999 or https://my.looker.com\n */\nexport const getLookerSpecs = async (sdk: APIMethods, serverUrl: string) => {\n const versionUrl = `${serverUrl}/versions`\n const versions = await sdk.ok(sdk.get<ILookerVersions, Error>(versionUrl))\n return versions\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\n/**\n * Convert a Looker versions payload into API specification links\n * @param versions\n * @param include lambda that returns true to include a spec item in the list\n */\nexport const getSpecLinks = (\n versions: ILookerVersions,\n include = (spec: ISpecItem) => spec.version > '2.99'\n) => {\n const prefix = `Release ${versions.looker_release_version} API `\n const deriveSpec = (spec: ISpecItem): IApiSpecLink => {\n const status =\n spec.swagger_url === versions.current_version.swagger_url\n ? 'current'\n : spec.status\n return {\n name: `${prefix}${spec.version}`,\n version: spec.version,\n status,\n url: spec.swagger_url,\n api: {} as IApiModel,\n }\n }\n const specs = versions.supported_versions\n .filter((v) => include(v))\n .map((v) => deriveSpec(v))\n return specs\n}\n\n/**\n * Fetch and parse API specifications from the established links\n * @param sdk APIMethods implementation that supports authenticating a request\n * @param links list of specifications to load\n */\nexport const loadSpecs = async (sdk: APIMethods, links: SpecLinks) => {\n for (const spec of links) {\n if (isEmpty(spec.api)) {\n // Not parsed yet\n const content = await sdk.ok<string, Error>(sdk.get(spec.url))\n const json = typeof content === 'string' ? JSON.parse(content) : content\n spec.api = ApiModel.fromJson(upgradeSpecObject(json))\n }\n }\n return links\n}\n"],"file":"specConverter.js"}
1
+ {"version":3,"sources":["../../src/specConverter.ts"],"names":["isEmpty","ApiModel","warn","warning","Error","appJson","include31","ver","status","version","swagger_url","getSpecsFromVersions","versions","fetcher","undefined","include","items","uniqueId","v","specKey","max","length","frag","substr","supported_versions","spec","key","isDefault","specURL","api","defaultMimeFormats","produces","consumes","swapXLookerTags","swaps","pattern","replacement","forEach","swap","replace","openApiStyle","collectionFormat","styles","csv","pipes","ssv","findOpenApiParam","endpoint","verb","name","result","paths","parameters","find","p","fixConversionObjects","swagger","fixes","Object","entries","op","httpMethod","method","operation","params","param","in","required","fix","operationId","requestBody","push","format","style","newParam","JSON","stringify","isSwagger","isOpenApi","openapi","fixConversion","openApiSpec","swaggerSpec","parse","swapRef","ref","structName","parts","split","convertParam","schema","type","explode","convertResponses","responses","formats","code","response","description","content","convertOp","moveKeys","moveKey","value","body","values","xdep","deprecated","convertPathsAndBodies","requestBodies","path","entry","ep","convertDefs","defs","_","struct","properties","prop","$ref","upgradeSpecObject","cleanup","schemas","definitions","info","tags","servers","url","schemes","host","basePath","components","upgradeSpec","getLookerSpecs","sdk","serverUrl","versionUrl","ok","get","getSpecLinks","prefix","looker_release_version","deriveSpec","current_version","specs","filter","map","loadSpecs","links","json","fromJson"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport isEmpty from 'lodash/isEmpty'\nimport type { APIMethods } from '@looker/sdk-rtl'\nimport type { ArgValues, IApiModel, KeyedCollection } from './sdkModels'\nimport { ApiModel } from './sdkModels'\n\nconst warn = (warning: string) => {\n throw new Error(warning)\n}\n\nconst appJson = 'application/json'\n\n/** This declaration is duplicated DIRECTLY from @looker/sdk API 4.0 models to detach dependency */\nexport interface IApiVersion {\n /**\n * Current Looker release version number (read-only)\n */\n looker_release_version?: string\n current_version?: IApiVersionElement\n /**\n * Array of versions supported by this Looker instance (read-only)\n */\n supported_versions?: IApiVersionElement[]\n /**\n * API server base url (read-only)\n */\n api_server_url?: string\n /**\n * Web server base url (read-only)\n */\n web_server_url?: string\n}\n\n/** This declaration is duplicated DIRECTLY from @looker/sdk API 4.0 models to detach dependency */\nexport interface IApiVersionElement {\n /**\n * Version number as it appears in '/api/xxx/' urls (read-only)\n */\n version?: string | null\n /**\n * Full version number including minor version (read-only)\n */\n full_version?: string | null\n /**\n * Status of this version (read-only)\n */\n status?: string | null\n /**\n * Url for swagger.json for this version (read-only)\n */\n swagger_url?: string | null\n}\n\n/**\n * Describes the mime types supported by an operation\n */\nexport interface MimeFormats {\n /**\n * Output types produced by an operation\n */\n produces: string[]\n /**\n * Input types accepted by an operation\n */\n consumes: string[]\n}\n\n/** codegen specification item */\nexport interface SpecItem {\n /** Key for specification in collection. Duplicated for atomic passing */\n key: string\n /** API version status */\n status: string // 'current' | 'deprecated' | 'experimental' | 'stable'\n /** API version of spec */\n version: string\n /** true if this is the default spec */\n isDefault: boolean\n /** Compiled version of spec */\n api?: ApiModel\n /** URL for retrieving spec */\n specURL?: string\n /** string content of spec */\n specContent?: string\n}\n\n/** Keyed collection of specification items */\nexport type SpecList = KeyedCollection<SpecItem>\n\n/**\n * Looker specification version item from versions payload\n */\nexport interface ISpecItem {\n /** Abbreviated version of the API */\n version: string\n /** Semantic version of the API */\n full_version: string\n /** Usually legacy, stable, experimental, current */\n status: string\n /** Link to the swagger specification */\n swagger_url: string\n}\n\n/**\n * Callback for fetching and compiling specification to ApiModel\n */\nexport type SpecFetcher = (spec: SpecItem) => Promise<ApiModel | undefined>\nexport type IncludeVersion = (version: IApiVersionElement) => boolean\n\n/**\n * Should this specification version be included?\n * @param ver to check\n */\nexport const include31 = (ver: IApiVersionElement) => {\n return (\n (ver.status &&\n ver.version &&\n ver.swagger_url &&\n ver.status !== 'internal_test' &&\n ver.status !== 'deprecated' &&\n ver.status !== 'legacy') ||\n (ver.version || '') >= '3.1' // unfortunately, need to hard-code this for API Explorer's spec selector\n )\n}\n\n/**\n * Return all public API specifications from an ApiVersion payload\n * @param versions payload from a Looker server\n * @param fetcher fetches and compiles spec to ApiModel\n * @param include test for specification version inclusion\n */\nexport const getSpecsFromVersions = async (\n versions: IApiVersion,\n fetcher: SpecFetcher | undefined = undefined,\n include: IncludeVersion = include31\n): Promise<SpecList> => {\n const items = {}\n\n /**\n * Create a unique spec key for this version\n * @param v version to identify\n */\n const uniqueId = (v: IApiVersionElement) => {\n let specKey = v.version || 'api'\n const max = v.status?.length || 0\n let frag = 1\n while (items[specKey]) {\n if (frag <= max) {\n // More than one spec for this version\n specKey = `${v.version}${v.status?.substr(0, frag)}`\n } else {\n specKey = `${v.version}${v.status}${frag}`\n }\n frag++\n }\n return specKey\n }\n\n if (versions.supported_versions) {\n for (const v of versions.supported_versions) {\n // Tell TypeScript these are all defined because IApiVersion definition is lax\n if (v.status && v.version && v.swagger_url) {\n if (include(v)) {\n const spec: SpecItem = {\n key: uniqueId(v),\n status: v.status,\n version: v.version,\n isDefault: v.status === 'current',\n specURL: v.swagger_url,\n }\n if (fetcher) {\n spec.api = await fetcher(spec)\n }\n items[spec.key] = spec\n }\n }\n }\n }\n return items\n}\n\n/**\n * Payload returned by the Looker /versions endpoint\n */\nexport interface ILookerVersions {\n /** This Looker version */\n looker_release_version: string\n /** The current/default API version */\n current_version: ISpecItem\n /** All API versions */\n supported_versions: ISpecItem[]\n /** API server url */\n api_server_url: string\n /** Web server url */\n web_server_url: string\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\n\n/**\n * Api Specification with on-demand determination of values\n */\nexport interface IApiSpecLink {\n /** Name of the specification */\n name: string\n /** API version */\n version: string\n /** API version status */\n status: string\n /** Location of the specification */\n url: string\n /** Parsed content. Will be loaded on demand but is assigned to an empty object by default. */\n api: IApiModel\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\nexport type SpecLinks = IApiSpecLink[]\n\n/**\n * Defaults the mime formats for producing and consuming\n */\nexport const defaultMimeFormats: MimeFormats = {\n produces: [appJson],\n consumes: [appJson],\n}\n/**\n * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#style-values\n */\ntype OpenApiParameterStyle =\n | 'matrix'\n | 'label'\n | 'form'\n | 'simple'\n | 'spaceDelimited'\n | 'pipeDelimited'\n | 'deepObject'\n | undefined\n\n/**\n * Replaces x-looker-nullable with nullable for parameters and properties in a string\n * @param {string} spec\n * @returns {Promise<string>} name of the file written\n */\nexport const swapXLookerTags = (spec: string) => {\n const swaps = [\n { pattern: /x-looker-nullable/gi, replacement: 'nullable' },\n { pattern: /x-looker-values/gi, replacement: 'enum' },\n ]\n swaps.forEach((swap) => {\n spec = spec.replace(swap.pattern, swap.replacement)\n })\n return spec\n}\n\n/**\n * Convert OpenAPI 2 collectionFormat to OpenApi 3 style\n *\n * See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#style-values for\n * conversion guidelines\n *\n * @param collectionFormat string\n * @returns the converted style, or undefined\n */\nexport const openApiStyle = (\n collectionFormat: string\n): OpenApiParameterStyle => {\n if (!collectionFormat) return undefined\n const styles: { [key: string]: OpenApiParameterStyle } = {\n csv: 'simple',\n pipes: 'pipeDelimited',\n ssv: 'spaceDelimited',\n }\n if (collectionFormat in styles) {\n return styles[collectionFormat]\n }\n return undefined\n}\n\n/**\n * Utility function to find the named parameter for an OpenAPI endpoint\n * @param api JSON structure of OpenAPI spec\n * @param endpoint url pattern for endpoint\n * @param verb HTTP method to locate\n * @param name name of parameter to find\n * @returns the matched parameter, or undefined\n */\nconst findOpenApiParam = (\n api: any,\n endpoint: string,\n verb: string,\n name: string\n) => {\n const result = api.paths[endpoint][verb].parameters.find(\n (p: { name: string }) => p.name === name\n )\n if (!result) {\n warn(`Missing parameter: ${endpoint} ${verb} parameter ${name}`)\n }\n return result\n}\n\n/**\n * Results of the spec conversion\n */\nexport interface IConversionResults {\n /**\n * JSON.stringify of the spec\n */\n spec: string\n /**\n * List of fixes to the spec\n */\n fixes: string[]\n}\n\nexport const fixConversionObjects = (api: any, swagger: any) => {\n const paths = swagger.paths\n const fixes: string[] = []\n Object.entries(paths).forEach(([endpoint, op]) => {\n Object.entries(op as any).forEach(([httpMethod, method]) => {\n const operation = method as any\n const params = operation.parameters\n if (params) {\n Object.entries(params).forEach(([, p]) => {\n const param = p as any\n if (param.name === 'body' && param.in === 'body') {\n // Set `required` in requestBody\n if ('required' in param) {\n // explicitly setting required value\n const required = param.required\n const fix = `${endpoint}::${operation.operationId} setting requestBody.required to ${required}`\n const requestBody = api.paths[endpoint][httpMethod].requestBody\n if (!requestBody) {\n warn(\n `Failed to find \"requestBody\" in OAS for swagger \"body param\" fix: ${fix}`\n )\n } else {\n if (requestBody.required !== required) {\n fixes.push(fix)\n }\n requestBody.required = required\n }\n }\n }\n\n if (param.collectionFormat) {\n // Set style from collectionFormat if it's not set\n const format = param.collectionFormat\n const style = openApiStyle(format)\n if (style === undefined) {\n warn(\n `OAS style conversion failed: collectionFormat '${param.collectionFormat}' is unknown`\n )\n } else {\n const fix = `${endpoint}::${operation.operationId} ${param.name} '${format}' -> '${style}'`\n const newParam = findOpenApiParam(\n api,\n endpoint,\n httpMethod,\n param.name\n )\n if (newParam && newParam.style !== style) {\n newParam.style = style\n fixes.push(fix)\n }\n }\n }\n })\n }\n })\n })\n\n return { fixes, spec: JSON.stringify(api) }\n}\n\n/**\n * Returns true if this spec is a swagger specification\n * @param spec to check\n */\nexport const isSwagger = (spec: any) => spec.swagger !== undefined\n\n/**\n * Returns true spec is an OpenAPI specification\n * @param spec to check\n */\nexport const isOpenApi = (spec: any) => spec.openapi !== undefined\n\n/**\n * This is a post-fix operation for the OpenAPI converter which currently misses this type of conversion\n *\n * - Converts missing swagger collectionFormat values to OpenAPI styles\n * - Flags OAS.requestBody as required or optional\n *\n * @param openApiSpec converted OpenAPI spec\n * @param swaggerSpec original swagger spec that may contain missed conversions\n * @returns modified openApiSpec and fix log in IConversionResults\n */\nexport const fixConversion = (\n openApiSpec: string,\n swaggerSpec: string\n): IConversionResults => {\n return fixConversionObjects(JSON.parse(openApiSpec), JSON.parse(swaggerSpec))\n}\n\n/**\n * Convert a swagger structure ref to an OpenAPI structure ref\n *\n * TODO update this to the typescript that understands replaceAll\n * @param ref string reference to convert\n */\nexport const swapRef = (ref: string) =>\n ref.replace(/#\\/definitions\\//g, '#/components/schemas/')\n\n/**\n * Get the name of the structure from the reference string\n * @param ref to partse\n */\nexport const structName = (ref: string) => {\n if (!ref) return undefined\n const parts = ref.split('/')\n return parts[parts.length - 1]\n}\n\n/**\n * Moves type, format, items to schema\n * Converts collectionFormat to style\n * @param param to convert\n */\nexport const convertParam = (param: any) => {\n const schema: any = { type: param.type }\n const result = { ...param }\n delete result.type\n if (param.format) {\n schema.format = param.format\n delete result.format\n }\n if (param.collectionFormat) {\n result.style = openApiStyle(param.collectionFormat)\n delete result.collectionFormat\n }\n if (param.items) {\n schema.items = param.items\n result.explode = false\n delete result.items\n }\n result.schema = schema\n return result\n}\n\n/**\n * Convert responses for the right response formats\n * @param responses response to convert\n * @param formats mime formats\n */\nexport const convertResponses = (\n responses: ArgValues,\n formats = defaultMimeFormats\n) => {\n Object.entries(responses).forEach(([code, response]) => {\n responses[code] = {\n description: response.description,\n }\n if (response.schema) {\n const content = {}\n formats.produces.forEach(\n (format) => (content[format] = { schema: response.schema })\n )\n responses[code].content = content\n }\n })\n return responses\n}\n\n/**\n * Convert an operation\n * Assign schemas in params, create request bodies, update $refs\n * @param op operation to convert\n * @param formats mime format consumer and producer\n * @param moveKeys true to move keys for reference OAS comparison\n */\nexport const convertOp = (\n op: ArgValues,\n formats = defaultMimeFormats,\n moveKeys = false\n) => {\n // If keys need to be shuffled for file comparison reasons, uncomment this function\n const moveKey = (key: string, value?: any) => {\n if (!moveKeys || !(key in op)) return value\n if (!value) value = op[key]\n if (value) {\n delete op[key]\n op[key] = value\n }\n return value\n }\n\n let { produces, consumes } = formats\n const body = {}\n if (op.produces) {\n produces = op.produces\n delete op.produces\n }\n if (op.consumes) {\n consumes = op.consumes\n delete op.consumes\n }\n if (op.parameters) {\n // Copy parameters before rebuilding\n const params = { ...op.parameters }\n op.parameters = []\n Object.values(params).forEach((p: any) => {\n if (p.in === 'body') {\n // const struct = structName(p.schema?.$ref)\n op.requestBody = {}\n // if (struct) {\n // op.requestBody.$ref = `#/components/requestBodies/${struct}`\n // }\n if (p.schema) {\n op.requestBody.content = { [consumes[0]]: { schema: p.schema } }\n }\n op.requestBody.description = p.description\n if ('required' in p) op.requestBody.required = p.required\n // if (struct) {\n // body[struct] = { ...op.requestBody }\n // body[struct].$ref = `#/components/schema/${struct}`\n // }\n } else {\n op.parameters.push(convertParam(p))\n }\n })\n if (op.parameters.length === 0) delete op.parameters\n }\n moveKey('responses', convertResponses(op.responses, { produces, consumes }))\n moveKey('deprecated')\n const xdep = 'x-looker-deprecated'\n if (xdep in op) {\n op.deprecated = op[xdep]\n delete op[xdep]\n }\n moveKey('x-looker-status')\n moveKey('x-looker-activity-type')\n moveKey('x-looker-rate-limited')\n return { op, body }\n}\n\n/**\n * Assign schemas and request bodies\n * @param paths to process\n * @param formats mime response types\n */\nexport const convertPathsAndBodies = (\n paths: ArgValues,\n formats = defaultMimeFormats\n) => {\n const result = { paths: {}, requestBodies: {} }\n Object.entries(paths).forEach(([path, entry]) => {\n result.paths[path] = {}\n // Hack to accommodate linting limitations\n const endpoint: ArgValues = entry\n Object.entries(endpoint).forEach(([verb, op]) => {\n const ep = convertOp(op, formats)\n result.paths[path][verb] = ep.op\n Object.entries(ep.body as ArgValues).forEach(([name, body]) => {\n result.requestBodies[name] = body\n })\n })\n })\n return result\n}\n\n/**\n * Convert structure definitions\n * @param defs to convert\n */\nexport const convertDefs = (defs: ArgValues): ArgValues => {\n Object.entries(defs).forEach(([_, struct]) => {\n Object.entries(struct.properties as ArgValues).forEach(([name, prop]) => {\n if (prop.$ref) {\n // Evidently OAS only wants the ref for the property type\n struct.properties[name] = { $ref: prop.$ref }\n }\n })\n })\n return defs\n}\n\n/**\n * On-demand conversion of swagger to openAPI specification\n * @param spec to possibly convert\n * @returns OpenAPI version of the specification or throws error if not Swagger or OpenAPI\n */\nexport const upgradeSpecObject = (spec: any) => {\n if (isOpenApi(spec)) {\n return JSON.parse(swapXLookerTags(JSON.stringify(spec)))\n }\n if (!isSwagger(spec)) {\n throw new Error('Input is not a Swagger or OpenAPI specification')\n }\n const cleanup = swapRef(swapXLookerTags(JSON.stringify(spec)))\n spec = JSON.parse(cleanup)\n const consumes = spec.consumes || [appJson]\n const produces = spec.produces || [appJson]\n const formats = { produces, consumes }\n const { paths, requestBodies } = convertPathsAndBodies(spec.paths, formats)\n // TODO create a requestBodies entry for every struct used > 1x?\n // TODO reassign op.requestBody for all requestBodies entries?\n const schemas = convertDefs(spec.definitions)\n const api = {\n openapi: '3.0.0',\n info: spec.info,\n tags: spec.tags,\n paths,\n servers: [{ url: `${spec.schemes[0]}://${spec.host}${spec.basePath}` }],\n components: {\n requestBodies,\n schemas: schemas,\n },\n }\n // const result = fixConversionObjects(api, spec)\n return api\n}\n\n/**\n * Upgrade a spec to OpenAPI if it's not already an OpenAPI spec\n * @param spec to upgrade\n */\nexport const upgradeSpec = (spec: string | Record<string, unknown>) => {\n if (typeof spec === 'string') spec = JSON.parse(spec)\n return JSON.stringify(upgradeSpecObject(spec))\n}\n\n/**\n * Fetches specs via /versions payload from the API server url\n * @param sdk APIMethods implementation that supports authenticating a request\n * @param serverUrl base url of the /versions server. Typically something like https://my.looker.com:19999 or https://my.looker.com\n */\nexport const getLookerSpecs = async (sdk: APIMethods, serverUrl: string) => {\n const versionUrl = `${serverUrl}/versions`\n const versions = await sdk.ok(sdk.get<ILookerVersions, Error>(versionUrl))\n return versions\n}\n\n// TODO this work was duplicated in API Explorer. Need to merge and use one version.\n/**\n * Convert a Looker versions payload into API specification links\n * @param versions\n * @param include lambda that returns true to include a spec item in the list\n */\nexport const getSpecLinks = (\n versions: ILookerVersions,\n include = (spec: ISpecItem) => spec.version > '2.99'\n) => {\n const prefix = `Release ${versions.looker_release_version} API `\n const deriveSpec = (spec: ISpecItem): IApiSpecLink => {\n const status =\n spec.swagger_url === versions.current_version.swagger_url\n ? 'current'\n : spec.status\n return {\n name: `${prefix}${spec.version}`,\n version: spec.version,\n status,\n url: spec.swagger_url,\n api: {} as IApiModel,\n }\n }\n const specs = versions.supported_versions\n .filter((v) => include(v))\n .map((v) => deriveSpec(v))\n return specs\n}\n\n/**\n * Fetch and parse API specifications from the established links\n * @param sdk APIMethods implementation that supports authenticating a request\n * @param links list of specifications to load\n */\nexport const loadSpecs = async (sdk: APIMethods, links: SpecLinks) => {\n for (const spec of links) {\n if (isEmpty(spec.api)) {\n // Not parsed yet\n const content = await sdk.ok<string, Error>(sdk.get(spec.url))\n const json = typeof content === 'string' ? JSON.parse(content) : content\n spec.api = ApiModel.fromJson(upgradeSpecObject(json))\n }\n }\n return links\n}\n"],"file":"specConverter.js"}
@@ -1,6 +1,6 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
2
 
3
- import { EnumType, mayQuote, strBody } from './sdkModels';
3
+ import { EnumType, mayQuote, strBody, TypeOfType, typeOfType } from './sdkModels';
4
4
  import { CodeGen, commentBlock } from './codeGen';
5
5
  export class SwiftGen extends CodeGen {
6
6
  constructor() {
@@ -98,13 +98,34 @@ export class SwiftGen extends CodeGen {
98
98
  return '';
99
99
  }
100
100
 
101
+ isIdProp(_property) {
102
+ return true;
103
+ }
104
+
105
+ itemType(property) {
106
+ if (typeOfType(property.type) === TypeOfType.Array && property.type.elementType) {
107
+ return property.type.elementType;
108
+ }
109
+
110
+ return property.type;
111
+ }
112
+
101
113
  useAnyString(property) {
102
- var nameCheck = property.name.toLowerCase();
103
- return this.anyString && property.type.name.toLowerCase() === 'string' && (nameCheck === 'id' || nameCheck.endsWith('_id'));
114
+ var typeCheck = this.itemType(property).name.toLowerCase();
115
+ return this.anyString && typeCheck === 'string' && this.isIdProp(property);
116
+ }
117
+
118
+ useAnyInt(property) {
119
+ var typeCheck = this.itemType(property).name.toLowerCase();
120
+ return this.anyString && (typeCheck === 'integer' || typeCheck === 'int64') && this.isIdProp(property);
104
121
  }
105
122
 
106
123
  privy(name) {
107
- return this.reserve('_' + name);
124
+ return this.reserve('_' + name.replace(/`/g, ''));
125
+ }
126
+
127
+ getSpecialHandling(property) {
128
+ return this.useAnyString(property) ? 'AnyString' : this.useAnyInt(property) ? 'AnyInt' : '';
108
129
  }
109
130
 
110
131
  declareProperty(indent, property) {
@@ -116,16 +137,18 @@ export class SwiftGen extends CodeGen {
116
137
  }
117
138
 
118
139
  var type = this.typeMap(property.type);
119
- var specialHandling = this.useAnyString(property);
140
+ var specialHandling = this.getSpecialHandling(property);
120
141
  var munge = '';
121
142
  var declaration = "".concat(indent, "public var ").concat(this.reserve(property.name), ": ").concat(type.name).concat(optional, "\n");
122
143
 
123
144
  if (specialHandling) {
145
+ var ra = typeOfType(property.type) === TypeOfType.Array;
124
146
  var privy = this.reserve('_' + property.name);
125
147
  var bump = this.bumper(indent);
126
- var setter = property.required ? 'AnyString.init(newValue)' : 'newValue.map(AnyString.init)';
127
- munge = "".concat(indent, "private var ").concat(privy, ": AnyString").concat(optional, "\n");
128
- declaration = "".concat(indent, "public var ").concat(this.reserve(property.name), ": ").concat(type.name).concat(optional, " {\n").concat(bump, "get { ").concat(privy).concat(optional, ".value }\n").concat(bump, "set { ").concat(privy, " = ").concat(setter, " }\n").concat(indent, "}\n");
148
+ var setter = property.required ? ra ? "".concat(privy, " = newValue.map { ").concat(specialHandling, ".init($0) }") : "".concat(privy, " = ").concat(specialHandling, ".init(newValue)") : ra ? "if let v = newValue { ".concat(privy, " = v.map { ").concat(specialHandling, ".init($0) } } else { ").concat(privy, " = nil }") : "".concat(privy, " = newValue.map(").concat(specialHandling, ".init)");
149
+ var getter = property.required ? ra ? "".concat(privy, ".map { $0.value }") : "".concat(privy, ".value") : ra ? "if let v = ".concat(privy, " { return v.map { $0.value } } else { return nil }") : "".concat(privy).concat(optional, ".value");
150
+ munge = ra ? "".concat(indent, "private var ").concat(privy, ": [").concat(specialHandling, "]").concat(optional, "\n") : "".concat(indent, "private var ").concat(privy, ": ").concat(specialHandling).concat(optional, "\n");
151
+ declaration = "".concat(indent, "public var ").concat(this.reserve(property.name), ": ").concat(type.name).concat(optional, " {\n").concat(bump, "get { ").concat(getter, " }\n").concat(bump, "set { ").concat(setter, " }\n").concat(indent, "}\n");
129
152
  }
130
153
 
131
154
  return munge + this.commentHeader(indent, this.describeProperty(property)) + declaration;
@@ -154,6 +177,32 @@ export class SwiftGen extends CodeGen {
154
177
  return this.commentHeader(indent, this.paramComment(param, mapped)) + "".concat(indent).concat(line).concat(this.reserve(param.name), ": ").concat(mapped.name).concat(pOpt) + (param.required ? '' : mapped.default ? " = ".concat(mapped.default) : '');
155
178
  }
156
179
 
180
+ initProp(prop) {
181
+ var propName = this.reserve(prop.name);
182
+ var specialHandling = this.getSpecialHandling(prop);
183
+
184
+ if (specialHandling) {
185
+ var ra = typeOfType(prop.type) === TypeOfType.Array;
186
+ var varName = this.privy(propName);
187
+
188
+ if (prop.required) {
189
+ if (ra) {
190
+ return "".concat(this.it(varName), " = ").concat(propName, ".map { ").concat(specialHandling, ".init($0) }");
191
+ }
192
+
193
+ return "".concat(this.it(varName), " = ").concat(specialHandling, ".init(").concat(propName, ")");
194
+ } else {
195
+ if (ra) {
196
+ return "if let v = ".concat(propName, " { ").concat(varName, " = v.map { ").concat(specialHandling, ".init($0) } } else { ").concat(varName, " = nil }");
197
+ }
198
+
199
+ return "".concat(this.it(varName), " = ").concat(propName, ".map(").concat(specialHandling, ".init)");
200
+ }
201
+ }
202
+
203
+ return "".concat(this.it(propName), " = ").concat(propName);
204
+ }
205
+
157
206
  construct(indent, type) {
158
207
  if (type instanceof EnumType) return '';
159
208
  indent = this.bumper(indent);
@@ -167,19 +216,7 @@ export class SwiftGen extends CodeGen {
167
216
  var propName = this.reserve(prop.name);
168
217
  args.push(this.declareConstructorArg('', prop));
169
218
  posArgs.push(this.declarePositionalArg('', prop));
170
-
171
- if (this.useAnyString(prop)) {
172
- var varName = this.privy(propName);
173
-
174
- if (prop.required) {
175
- inits.push("".concat(bump).concat(this.it(varName), " = AnyString.init(").concat(propName, ")"));
176
- } else {
177
- inits.push("".concat(bump).concat(this.it(varName), " = ").concat(propName, ".map(AnyString.init)"));
178
- }
179
- } else {
180
- inits.push("".concat(bump).concat(this.it(propName), " = ").concat(propName));
181
- }
182
-
219
+ inits.push("".concat(bump).concat(this.initProp(prop)));
183
220
  posInits.push("".concat(propName, ": ").concat(propName));
184
221
  });
185
222
  var namedInit = "".concat(indent, "public init(") + "".concat(args.join(this.argDelimiter), ") {\n") + inits.join('\n') + "\n".concat(indent, "}");
@@ -289,7 +326,7 @@ export class SwiftGen extends CodeGen {
289
326
  var keys = Object.values(type.properties).map(p => {
290
327
  var name = this.reserve(p.name);
291
328
  var alias = '';
292
- var useIt = this.useAnyString(p);
329
+ var useIt = this.useAnyString(p) || this.useAnyInt(p);
293
330
 
294
331
  if (useIt) {
295
332
  name = this.privy(name);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/swift.gen.ts"],"names":["EnumType","mayQuote","strBody","CodeGen","commentBlock","SwiftGen","Set","supportsMultiApi","methodsPrologue","_indent","warnEditing","packageName","indentStr","streamsPrologue","methodsEpilogue","modelsPrologue","modelsEpilogue","reserve","name","keywords","has","sdkFileName","baseFileName","fileName","commentHeader","indent","text","commentStr","noComment","beginRegion","description","endRegion","_description","useAnyString","property","nameCheck","toLowerCase","anyString","type","endsWith","privy","declareProperty","optional","required","refCount","typeMap","specialHandling","munge","declaration","bump","bumper","setter","describeProperty","paramComment","param","mapped","declareParameter","method","location","writeableType","pOpt","line","default","construct","args","posArgs","inits","posInits","props","typeProperties","forEach","prop","propName","push","declareConstructorArg","declarePositionalArg","varName","it","namedInit","join","argDelimiter","posInit","some","p","mappedType","propType","nullStr","methodHeaderDeclaration","streamer","resultType","returnType","head","trim","headComment","httpMethod","endpoint","fragment","requestType","requestTypeName","params","allParams","length","paramDelimiter","responseIsBoth","responseIsBinary","header","methodSignature","encodePathParams","encodings","pathParams","declareMethod","httpCall","streamerSignature","declareStreamer","streamCall","codingKeys","special","keys","Object","values","properties","map","alias","useIt","jsonName","hasSpecialNeeds","bump2","cases","declareEnumValue","value","quote","codeQuote","typeSignature","recursive","isRecursive","typeName","access","baseClass","isEnum","num","elementType","needClass","errorResponses","_method","httpPath","path","prefix","indexOf","tweak","replace","argGroup","hash","arg","queryGroup","getParams","asAny","castIt","argList","argFill","current","httpArgs","request","useRequest","result","bodyArg","errors","summary","typeNames","countError","names","api","types","Error","filter","intrinsic","ns","swiftTypes","Group","Locale","any","boolean","byte","date","datetime","double","float","int32","int64","integer","number","object","password","string","uri","url","void","className","mapName","JSON","stringify"],"mappings":";;AAkCA,SAASA,QAAT,EAAmBC,QAAnB,EAA6BC,OAA7B,QAA4C,aAA5C;AAEA,SAASC,OAAT,EAAkBC,YAAlB,QAAsC,WAAtC;AAEA,OAAO,MAAMC,QAAN,SAAuBF,OAAvB,CAA+B;AAAA;AAAA;;AAAA,uCAExB,IAFwB;;AAAA,sCAGzB,UAHyB;;AAAA,yCAItB,QAJsB;;AAAA,oCAK3B,MAL2B;;AAAA,2CAMpB,QANoB;;AAAA,wCAOvB,KAPuB;;AAAA,qCAQ1B,KAR0B;;AAAA,uCASxB,WATwB;;AAAA,0CAWrB,IAXqB;;AAAA,4CAYnB,KAZmB;;AAAA,2CAapB,IAboB;;AAAA,2CAcpB,IAdoB;;AAAA,uCAexB,GAfwB;;AAAA,uCAiBxB,MAjBwB;;AAAA;;AAAA,+CAmBhB,KAnBgB;;AAAA,0CAoBrB,IApBqB;;AAAA,sCAqBzB,IAAIG,GAAJ,CAAgB,CACzB,gBADyB,EAEzB,OAFyB,EAGzB,QAHyB,EAIzB,MAJyB,EAKzB,WALyB,EAMzB,aANyB,EAOzB,MAPyB,EAQzB,QARyB,EASzB,MATyB,EAUzB,OAVyB,EAWzB,UAXyB,EAYzB,KAZyB,EAazB,MAbyB,EAczB,UAdyB,EAezB,SAfyB,EAgBzB,UAhByB,EAiBzB,QAjByB,EAkBzB,QAlByB,EAmBzB,QAnByB,EAoBzB,WApByB,EAqBzB,WArByB,EAsBzB,KAtByB,EAuBzB,OAvByB,EAwBzB,MAxByB,EAyBzB,UAzByB,EA0BzB,SA1ByB,EA2BzB,OA3ByB,EA4BzB,IA5ByB,EA6BzB,MA7ByB,EA8BzB,aA9ByB,EA+BzB,KA/ByB,EAgCzB,OAhCyB,EAiCzB,IAjCyB,EAkCzB,IAlCyB,EAmCzB,QAnCyB,EAoCzB,QApCyB,EAqCzB,QArCyB,EAsCzB,OAtCyB,EAuCzB,OAvCyB,EAwCzB,IAxCyB,EAyCzB,KAzCyB,EA0CzB,OA1CyB,EA2CzB,OA3CyB,EA4CzB,IA5CyB,EA6CzB,KA7CyB,EA8CzB,UA9CyB,EA+CzB,OA/CyB,EAgDzB,MAhDyB,EAiDzB,MAjDyB,EAkDzB,OAlDyB,EAmDzB,QAnDyB,EAoDzB,MApDyB,EAqDzB,KArDyB,EAsDzB,GAtDyB,EAuDzB,YAvDyB,EAwDzB,eAxDyB,EAyDzB,SAzDyB,EA0DzB,OA1DyB,EA2DzB,SA3DyB,EA4DzB,QA5DyB,EA6DzB,OA7DyB,EA8DzB,cA9DyB,EA+DzB,WA/DyB,EAgEzB,KAhEyB,EAiEzB,eAjEyB,EAkEzB,OAlEyB,EAmEzB,WAnEyB,EAoEzB,qBApEyB,EAqEzB,eArEyB,EAsEzB,aAtEyB,EAuEzB,SAvEyB,EAwEzB,QAxEyB,EAyEzB,OAzEyB,EA0EzB,KA1EyB,EA2EzB,OA3EyB,EA4EzB,UA5EyB,EA6EzB,MA7EyB,EA8EzB,MA9EyB,EA+EzB,UA/EyB,EAgFzB,MAhFyB,EAiFzB,aAjFyB,EAkFzB,UAlFyB,EAmFzB,UAnFyB,EAoFzB,SApFyB,EAqFzB,YArFyB,EAsFzB,QAtFyB,EAuFzB,UAvFyB,EAyFzB,OAzFyB,EA0FzB,KA1FyB,EA2FzB,MA3FyB,EA4FzB,SA5FyB,EA6FzB,MA7FyB,EA8FzB,SA9FyB,CAAhB,CArByB;AAAA;;AAsHpCC,EAAAA,gBAAgB,GAAY;AAC1B,WAAO,KAAP;AACD;;AAEDC,EAAAA,eAAe,CAACC,OAAD,EAAkB;AAC/B,2BACE,KAAKC,WAAL,EADF,2EAMS,KAAKC,WANd,+BAQF,KAAKC,SARH,sCAQwC,KAAKD,WAR7C;AAUD;;AAEDE,EAAAA,eAAe,CAACJ,OAAD,EAA0B;AACvC,2BACE,KAAKC,WAAL,EADF,2EAMS,KAAKC,WANd;AAQD;;AAEDG,EAAAA,eAAe,CAACL,OAAD,EAAkB;AAC/B,WAAO,KAAP;AACD;;AAEDM,EAAAA,cAAc,CAACN,OAAD,EAAkB;AAC9B,2BACE,KAAKC,WAAL,EADF;AAKD;;AAEDM,EAAAA,cAAc,CAACP,OAAD,EAAkB;AAC9B,WAAO,IAAP;AACD;;AAEDQ,EAAAA,OAAO,CAACC,IAAD,EAAe;AACpB,QAAI,KAAKC,QAAL,CAAcC,GAAd,CAAkBF,IAAlB,CAAJ,EAA6B;AAC3B,wBAAYA,IAAZ;AACD;;AACD,WAAOA,IAAP;AACD;;AAEDG,EAAAA,WAAW,CAACC,YAAD,EAAuB;AAEhC,WAAO,KAAKC,QAAL,eAAqBD,YAArB,EAAP;AACD;;AAEDE,EAAAA,aAAa,CAACC,MAAD,EAAiBC,IAAjB,EAA+D;AAAA,QAApBC,UAAoB,uEAAP,KAAO;AAC1E,QAAI,KAAKC,SAAL,IAAkB,CAACF,IAAvB,EAA6B,OAAO,EAAP;;AAC7B,QAAIC,UAAU,KAAK,GAAnB,EAAwB;AACtB,uBAAUF,MAAV,oBAA0BrB,YAAY,CACpCsB,IADoC,EAEpCD,MAFoC,EAGpCE,UAHoC,CAAtC,eAIMF,MAJN;AAKD;;AACD,qBAAUA,MAAV,kBAAwBrB,YAAY,CAClCsB,IADkC,EAElCD,MAFkC,EAGlCE,UAHkC,CAApC,eAIMF,MAJN;AAKD;;AAEDI,EAAAA,WAAW,CAACJ,MAAD,EAAiBK,WAAjB,EAA8C;AACvD,qBAAUL,MAAV,qBAA2BK,WAA3B;AACD;;AAEDC,EAAAA,SAAS,CAACtB,OAAD,EAAkBuB,YAAlB,EAAgD;AACvD,WAAO,EAAP;AACD;;AAMDC,EAAAA,YAAY,CAACC,QAAD,EAAsB;AAChC,QAAMC,SAAS,GAAGD,QAAQ,CAAChB,IAAT,CAAckB,WAAd,EAAlB;AACA,WACE,KAAKC,SAAL,IACAH,QAAQ,CAACI,IAAT,CAAcpB,IAAd,CAAmBkB,WAAnB,OAAqC,QADrC,KAECD,SAAS,KAAK,IAAd,IAAsBA,SAAS,CAACI,QAAV,CAAmB,KAAnB,CAFvB,CADF;AAKD;;AAMDC,EAAAA,KAAK,CAACtB,IAAD,EAAe;AAClB,WAAO,KAAKD,OAAL,CAAa,MAAMC,IAAnB,CAAP;AACD;;AAEDuB,EAAAA,eAAe,CAAChB,MAAD,EAAiBS,QAAjB,EAAsC;AAEnD,QAAMQ,QAAQ,GAAGR,QAAQ,CAACS,QAAT,GAAoB,EAApB,GAAyB,GAA1C;;AACA,QAAIT,QAAQ,CAAChB,IAAT,KAAkBhB,OAAtB,EAA+B;AAE7BgC,MAAAA,QAAQ,CAACI,IAAT,CAAcM,QAAd;AACA,aACE,KAAKpB,aAAL,CACEC,MADF,EAEES,QAAQ,CAACJ,WAAT,IACE,qDAHJ,cAKGL,MALH,iBAKgB,KAAKR,OAAL,CAAaiB,QAAQ,CAAChB,IAAtB,CALhB,eAMEgB,QAAQ,CAACI,IAAT,CAAcpB,IANhB,SAOGwB,QAPH,CADF;AAUD;;AACD,QAAMJ,IAAI,GAAG,KAAKO,OAAL,CAAaX,QAAQ,CAACI,IAAtB,CAAb;AACA,QAAMQ,eAAe,GAAG,KAAKb,YAAL,CAAkBC,QAAlB,CAAxB;AACA,QAAIa,KAAK,GAAG,EAAZ;AACA,QAAIC,WAAW,aAAMvB,MAAN,wBAA0B,KAAKR,OAAL,CAAaiB,QAAQ,CAAChB,IAAtB,CAA1B,eACboB,IAAI,CAACpB,IADQ,SAEZwB,QAFY,OAAf;;AAGA,QAAII,eAAJ,EAAqB;AACnB,UAAMN,KAAK,GAAG,KAAKvB,OAAL,CAAa,MAAMiB,QAAQ,CAAChB,IAA5B,CAAd;AACA,UAAM+B,IAAI,GAAG,KAAKC,MAAL,CAAYzB,MAAZ,CAAb;AACA,UAAM0B,MAAM,GAAGjB,QAAQ,CAACS,QAAT,GACX,0BADW,GAEX,8BAFJ;AAGAI,MAAAA,KAAK,aAAMtB,MAAN,yBAA2Be,KAA3B,wBAA8CE,QAA9C,OAAL;AACAM,MAAAA,WAAW,aAAMvB,MAAN,wBAA0B,KAAKR,OAAL,CAAaiB,QAAQ,CAAChB,IAAtB,CAA1B,eACToB,IAAI,CAACpB,IADI,SAERwB,QAFQ,iBAGfO,IAHe,mBAGFT,KAHE,SAGME,QAHN,uBAIfO,IAJe,mBAIFT,KAJE,gBAISW,MAJT,iBAKf1B,MALe,QAAX;AAMD;;AACD,WACEsB,KAAK,GACL,KAAKvB,aAAL,CAAmBC,MAAnB,EAA2B,KAAK2B,gBAAL,CAAsBlB,QAAtB,CAA3B,CADA,GAEAc,WAHF;AAKD;;AAEDK,EAAAA,YAAY,CAACC,KAAD,EAAoBC,MAApB,EAAyC;AACnD,6BAAkBA,MAAM,CAACrC,IAAzB,eAAkCoC,KAAK,CAACpC,IAAxC,cAAgDoC,KAAK,CAACxB,WAAtD;AACD;;AAED0B,EAAAA,gBAAgB,CAAC/B,MAAD,EAAiBgC,MAAjB,EAAkCH,KAAlC,EAAqD;AACnE,QAAMhB,IAAI,GACRgB,KAAK,CAACI,QAAN,KAAmBxD,OAAnB,GACI,KAAKyD,aAAL,CAAmBL,KAAK,CAAChB,IAAzB,EAA+BmB,MAA/B,KAA0CH,KAAK,CAAChB,IADpD,GAEIgB,KAAK,CAAChB,IAHZ;AAIA,QAAMiB,MAAM,GAAG,KAAKV,OAAL,CAAaP,IAAb,CAAf;AACA,QAAIsB,IAAI,GAAG,EAAX;AACA,QAAIC,IAAI,GAAG,EAAX;;AACA,QAAIP,KAAK,CAACI,QAAN,KAAmBxD,OAAvB,EAAgC;AAC9BqD,MAAAA,MAAM,CAACrC,IAAP,aAAiBqC,MAAM,CAACrC,IAAxB;AACD;;AACD,QAAI,CAACoC,KAAK,CAACX,QAAX,EAAqB;AACnBiB,MAAAA,IAAI,GAAG,GAAP;AACD,KAFD,MAEO;AACLC,MAAAA,IAAI,GAAG,IAAP;AACD;;AACD,WACE,KAAKrC,aAAL,CAAmBC,MAAnB,EAA2B,KAAK4B,YAAL,CAAkBC,KAAlB,EAAyBC,MAAzB,CAA3B,cACG9B,MADH,SACYoC,IADZ,SACmB,KAAK5C,OAAL,CAAaqC,KAAK,CAACpC,IAAnB,CADnB,eACgDqC,MAAM,CAACrC,IADvD,SAC8D0C,IAD9D,KAECN,KAAK,CAACX,QAAN,GAAiB,EAAjB,GAAsBY,MAAM,CAACO,OAAP,gBAAuBP,MAAM,CAACO,OAA9B,IAA0C,EAFjE,CADF;AAKD;;AAEDC,EAAAA,SAAS,CAACtC,MAAD,EAAiBa,IAAjB,EAA8B;AACrC,QAAIA,IAAI,YAAYtC,QAApB,EAA8B,OAAO,EAAP;AAC9ByB,IAAAA,MAAM,GAAG,KAAKyB,MAAL,CAAYzB,MAAZ,CAAT;AACA,QAAMwB,IAAI,GAAG,KAAKC,MAAL,CAAYzB,MAAZ,CAAb;AACA,QAAMuC,IAAc,GAAG,EAAvB;AACA,QAAMC,OAAiB,GAAG,EAA1B;AACA,QAAMC,KAAe,GAAG,EAAxB;AACA,QAAMC,QAAkB,GAAG,EAA3B;AACA,QAAMC,KAAK,GAAG,KAAKC,cAAL,CAAoB/B,IAApB,CAAd;AACA8B,IAAAA,KAAK,CAACE,OAAN,CAAeC,IAAD,IAAU;AACtB,UAAMC,QAAQ,GAAG,KAAKvD,OAAL,CAAasD,IAAI,CAACrD,IAAlB,CAAjB;AACA8C,MAAAA,IAAI,CAACS,IAAL,CAAU,KAAKC,qBAAL,CAA2B,EAA3B,EAA+BH,IAA/B,CAAV;AACAN,MAAAA,OAAO,CAACQ,IAAR,CAAa,KAAKE,oBAAL,CAA0B,EAA1B,EAA8BJ,IAA9B,CAAb;;AACA,UAAI,KAAKtC,YAAL,CAAkBsC,IAAlB,CAAJ,EAA6B;AAC3B,YAAMK,OAAO,GAAG,KAAKpC,KAAL,CAAWgC,QAAX,CAAhB;;AACA,YAAID,IAAI,CAAC5B,QAAT,EAAmB;AACjBuB,UAAAA,KAAK,CAACO,IAAN,WAAcxB,IAAd,SAAqB,KAAK4B,EAAL,CAAQD,OAAR,CAArB,+BAA0DJ,QAA1D;AACD,SAFD,MAEO;AACLN,UAAAA,KAAK,CAACO,IAAN,WACKxB,IADL,SACY,KAAK4B,EAAL,CAAQD,OAAR,CADZ,gBACkCJ,QADlC;AAGD;AACF,OATD,MASO;AACLN,QAAAA,KAAK,CAACO,IAAN,WAAcxB,IAAd,SAAqB,KAAK4B,EAAL,CAAQL,QAAR,CAArB,gBAA4CA,QAA5C;AACD;;AACDL,MAAAA,QAAQ,CAACM,IAAT,WAAiBD,QAAjB,eAA8BA,QAA9B;AACD,KAjBD;AAkBA,QAAMM,SAAS,GACb,UAAGrD,MAAH,8BACGuC,IAAI,CAACe,IAAL,CAAU,KAAKC,YAAf,CADH,aAEAd,KAAK,CAACa,IAAN,CAAW,IAAX,CAFA,eAGKtD,MAHL,MADF;AAKA,QAAIwD,OAAO,GAAG,EAAd;;AACA,QAAIb,KAAK,CAACc,IAAN,CAAYC,CAAD,IAAOA,CAAC,CAACxC,QAApB,CAAJ,EAAmC;AACjCsC,MAAAA,OAAO,GACL,YAAKxD,MAAL,8BACGwC,OAAO,CAACc,IAAR,CAAa,KAAKC,YAAlB,CADH,uBAEG/B,IAFH,SAEU,KAAK4B,EAAL,CAAQ,MAAR,CAFV,cAE6BV,QAAQ,CAACY,IAAT,CAAc,IAAd,CAF7B,qBAGKtD,MAHL,QADF;AAKD;;AACD,uBAAYqD,SAAZ,eAA0BG,OAA1B;AACD;;AAEDN,EAAAA,oBAAoB,CAAClD,MAAD,EAAiBS,QAAjB,EAAsC;AACxD,QAAMkD,UAAU,GAAG,KAAKvC,OAAL,CAAaX,QAAQ,CAACI,IAAtB,CAAnB;AACA,QAAI+C,QAAJ;AACA,QAAIxB,IAAI,GAAG,IAAX;;AACA,QAAI3B,QAAQ,CAACS,QAAb,EAAuB;AACrB0C,MAAAA,QAAQ,GAAGD,UAAU,CAAClE,IAAtB;AACD,KAFD,MAEO;AACL2C,MAAAA,IAAI,GAAG,EAAP;AACAwB,MAAAA,QAAQ,aAAMD,UAAU,CAAClE,IAAjB,iBAA4B,KAAKoE,OAAjC,CAAR;AACD;;AACD,QAAMd,QAAQ,GAAG,KAAKvD,OAAL,CAAaiB,QAAQ,CAAChB,IAAtB,CAAjB;AACA,qBAAUO,MAAV,SAAmBoC,IAAnB,SAA0BW,QAA1B,eAAuCa,QAAvC;AACD;;AAEDX,EAAAA,qBAAqB,CAACjD,MAAD,EAAiBS,QAAjB,EAAsC;AACzD,QAAMkD,UAAU,GAAG,KAAKvC,OAAL,CAAaX,QAAQ,CAACI,IAAtB,CAAnB;AACA,QAAI+C,QAAJ;;AACA,QAAInD,QAAQ,CAACS,QAAb,EAAuB;AACrB0C,MAAAA,QAAQ,GAAGD,UAAU,CAAClE,IAAtB;AACD,KAFD,MAEO;AACLmE,MAAAA,QAAQ,aAAMD,UAAU,CAAClE,IAAjB,iBAA4B,KAAKoE,OAAjC,CAAR;AACD;;AACD,QAAMd,QAAQ,GAAG,KAAKvD,OAAL,CAAaiB,QAAQ,CAAChB,IAAtB,CAAjB;AACA,qBAAUO,MAAV,SAAmB+C,QAAnB,eAAgCa,QAAhC;AACD;;AAEDE,EAAAA,uBAAuB,CAAC9D,MAAD,EAAiBgC,MAAjB,EAAoD;AAAA;;AAAA,QAAlB+B,QAAkB,uEAAP,KAAO;AACzE,QAAMlD,IAAI,GAAG,KAAKO,OAAL,CAAaY,MAAM,CAACnB,IAApB,CAAb;AACA,QAAMmD,UAAU,GAAGD,QAAQ,GAAG,MAAH,GAAYlD,IAAI,CAACpB,IAA5C;AACA,QAAMwE,UAAU,GACdpD,IAAI,CAACpB,IAAL,KAAc,MAAd,GAAuB,UAAvB,yBAAmDuE,UAAnD,gBADF;AAEA,QAAME,IAAI,0BAAGlC,MAAM,CAAC3B,WAAV,wDAAG,oBAAoB8D,IAApB,EAAb;AACA,QAAIC,WAAW,GACb,CAACF,IAAI,aAAMA,IAAN,YAAmB,EAAxB,cACGlC,MAAM,CAACqC,UADV,cACwBrC,MAAM,CAACsC,QAD/B,iBAC8CzD,IAAI,CAACpB,IADnD,CADF;AAGA,QAAI8E,QAAJ;AACA,QAAMC,WAAW,GAAG,KAAKC,eAAL,CAAqBzC,MAArB,CAApB;AACA,QAAMR,IAAI,GAAGxB,MAAM,GAAG,KAAKb,SAA3B;;AAEA,QAAIqF,WAAJ,EAAiB;AAEfD,MAAAA,QAAQ,uBAAgBC,WAAhB,CAAR;AACD,KAHD,MAGO;AACL,UAAME,MAAgB,GAAG,EAAzB;AACA,UAAMnC,IAAI,GAAGP,MAAM,CAAC2C,SAApB;AACA,UAAIpC,IAAI,IAAIA,IAAI,CAACqC,MAAL,GAAc,CAA1B,EACErC,IAAI,CAACM,OAAL,CAAca,CAAD,IAAOgB,MAAM,CAAC1B,IAAP,CAAY,KAAKjB,gBAAL,CAAsBP,IAAtB,EAA4BQ,MAA5B,EAAoC0B,CAApC,CAAZ,CAApB;AACFa,MAAAA,QAAQ,GACNG,MAAM,CAACE,MAAP,GAAgB,CAAhB,eAAyBF,MAAM,CAACpB,IAAP,CAAY,KAAKuB,cAAjB,CAAzB,IAA8D,EADhE;AAED;;AACD,QAAI7C,MAAM,CAAC8C,cAAP,EAAJ,EAA6B;AAC3BV,MAAAA,WAAW,kEAAX;AACD,KAFD,MAEO,IAAIpC,MAAM,CAAC+C,gBAAP,EAAJ,EAA+B;AACpCX,MAAAA,WAAW,gEAAX;AACD;;AACD,QAAMY,MAAM,GACV,KAAKjF,aAAL,CAAmBC,MAAnB,EAA2BoE,WAA3B,cACGpE,MADH,yBACwBgC,MAAM,CAACvC,IAD/B,MADF;AAIA,WACEuF,MAAM,GACNT,QADA,aAGEA,QAAQ,GAAG,GAAH,GAAS,EAHnB,eAIK/C,IAJL,iDAIgDxB,MAJhD,kBAI8DiE,UAJ9D,SADF;AAOD;;AAEDgB,EAAAA,eAAe,CAACjF,MAAD,EAAiBgC,MAAjB,EAAkC;AAC/C,WAAO,KAAK8B,uBAAL,CAA6B9D,MAA7B,EAAqCgC,MAArC,EAA6C,KAA7C,CAAP;AACD;;AAEDkD,EAAAA,gBAAgB,CAAClF,MAAD,EAAiBgC,MAAjB,EAAkC;AAChD,QAAImD,SAAS,GAAG,EAAhB;;AACA,QAAInD,MAAM,CAACoD,UAAP,CAAkBR,MAAlB,GAA2B,CAA/B,EAAkC;AAChC,WAAK,IAAM/C,KAAX,IAAoBG,MAAM,CAACoD,UAA3B,EAAuC;AAErCD,QAAAA,SAAS,cAAOnF,MAAP,sBAAyB6B,KAAK,CAACpC,IAA/B,4BAAqDoC,KAAK,CAACpC,IAA3D,QAAT;AACD;AACF;;AACD,WAAO0F,SAAP;AACD;;AAEDE,EAAAA,aAAa,CAACrF,MAAD,EAAiBgC,MAAjB,EAAkC;AAC7C,QAAMR,IAAI,GAAG,KAAKC,MAAL,CAAYzB,MAAZ,CAAb;AACA,WACE,KAAKiF,eAAL,CAAqBjF,MAArB,EAA6BgC,MAA7B,IACA,KAAKkD,gBAAL,CAAsB1D,IAAtB,EAA4BQ,MAA5B,CADA,GAEA,KAAKsD,QAAL,CAAc9D,IAAd,EAAoBQ,MAApB,CAFA,eAGKhC,MAHL,MADF;AAMD;;AAEDuF,EAAAA,iBAAiB,CAACvF,MAAD,EAAiBgC,MAAjB,EAAkC;AACjD,WAAO,KAAK8B,uBAAL,CAA6B9D,MAA7B,EAAqCgC,MAArC,EAA6C,IAA7C,CAAP;AACD;;AAEDwD,EAAAA,eAAe,CAACxF,MAAD,EAAiBgC,MAAjB,EAAkC;AAC/C,QAAMR,IAAI,GAAG,KAAKC,MAAL,CAAYzB,MAAZ,CAAb;AACA,WACE,KAAKuF,iBAAL,CAAuBvF,MAAvB,EAA+BgC,MAA/B,IACA,KAAKkD,gBAAL,CAAsB1D,IAAtB,EAA4BQ,MAA5B,CADA,GAEA,KAAKyD,UAAL,CAAgBjE,IAAhB,EAAsBQ,MAAtB,CAFA,eAGKhC,MAHL,MADF;AAMD;;AAED0F,EAAAA,UAAU,CAAC1F,MAAD,EAAiBa,IAAjB,EAA8B;AACtC,QAAI8E,OAAO,GAAG,KAAd;AAEA,QAAMC,IAAI,GAAGC,MAAM,CAACC,MAAP,CAAcjF,IAAI,CAACkF,UAAnB,EAA+BC,GAA/B,CAAoCtC,CAAD,IAAO;AACrD,UAAIjE,IAAI,GAAG,KAAKD,OAAL,CAAakE,CAAC,CAACjE,IAAf,CAAX;AACA,UAAIwG,KAAK,GAAG,EAAZ;AACA,UAAMC,KAAK,GAAG,KAAK1F,YAAL,CAAkBkD,CAAlB,CAAd;;AACA,UAAIwC,KAAJ,EAAW;AACTzG,QAAAA,IAAI,GAAG,KAAKsB,KAAL,CAAWtB,IAAX,CAAP;AACAkG,QAAAA,OAAO,GAAG,IAAV;AACAM,QAAAA,KAAK,GAAGvC,CAAC,CAACyC,QAAV;AACD,OAJD,MAIO,IAAIzC,CAAC,CAAC0C,eAAN,EAAuB;AAC5BT,QAAAA,OAAO,GAAG,IAAV;AACAM,QAAAA,KAAK,GAAGvC,CAAC,CAACyC,QAAV;AACD;;AACD,aAAO1G,IAAI,IAAIwG,KAAK,kBAAUA,KAAV,UAAqB,EAA9B,CAAX;AACD,KAbY,CAAb;AAeA,QAAI,CAACN,OAAL,EAAc,OAAO,EAAP;AACd,QAAMnE,IAAI,GAAG,KAAKC,MAAL,CAAYzB,MAAZ,CAAb;AACA,QAAMqG,KAAK,GAAG,KAAK5E,MAAL,CAAYD,IAAZ,CAAd;AACA,QAAM8E,KAAK,GAAGV,IAAI,CAACtC,IAAL,aAAe+C,KAAf,WAAd;AAEA,WACE,YAAK7E,IAAL,iEACK6E,KADL,kBACkBC,KADlB,gBAEK9E,IAFL,QADF;AAKD;;AAKD+E,EAAAA,gBAAgB,CAACvG,MAAD,EAAiBwG,KAAjB,EAAuC;AACrD,QAAMC,KAAK,GAAG,OAAOD,KAAP,KAAiB,QAAjB,GAA4B,KAAKE,SAAjC,GAA6C,EAA3D;AACA,qBAAU1G,MAAV,kBAAwBxB,QAAQ,CAACgI,KAAD,CAAhC,gBAA6CC,KAA7C,SAAqDD,KAArD,SAA6DC,KAA7D;AACD;;AAEDE,EAAAA,aAAa,CAAC3G,MAAD,EAAiBa,IAAjB,EAA8B;AACzC,QAAM+F,SAAS,GAAG/F,IAAI,CAACgG,WAAL,EAAlB;AACA,QAAIC,QAAQ,GAAGF,SAAS,GAAG,OAAH,GAAa,QAArC;AACA,QAAMG,MAAM,GAAGH,SAAS,GAAG,MAAH,GAAY,QAApC;AACA,QAAII,SAAS,GAAG,UAAhB;AACA,QAAMC,MAAM,GAAGpG,IAAI,YAAYtC,QAA/B;;AACA,QAAI0I,MAAJ,EAAY;AACVH,MAAAA,QAAQ,GAAG,MAAX;AACA,UAAMI,GAAG,GAAGrG,IAAZ;;AACA,UAAMiB,OAAM,GAAG,KAAKV,OAAL,CAAa8F,GAAG,CAACC,WAAjB,CAAf;;AACAH,MAAAA,SAAS,aAAMlF,OAAM,CAACrC,IAAb,cAAT;AACD;;AAED,QAAMmG,IAAI,GAAG,KAAKF,UAAL,CAAgB1F,MAAhB,EAAwBa,IAAxB,CAAb;AAEA,QAAMuG,SAAS,GAAGR,SAAS,GACvB,8DADuB,GAEvB,EAFJ;AAGA,QAAM9E,MAAM,GAAG,KAAKV,OAAL,CAAaP,IAAb,CAAf;AACA,WACE,KAAKd,aAAL,CAAmBC,MAAnB,EAA2Ba,IAAI,CAACR,WAAL,GAAmB+G,SAA9C,cACGpH,MADH,SACY+G,MADZ,cACsBD,QADtB,cACkChF,MAAM,CAACrC,IADzC,eACkDuH,SADlD,iBACkEpB,IADlE,CADF;AAID;;AAEDyB,EAAAA,cAAc,CAACrI,OAAD,EAAkBsI,OAAlB,EAAoC;AAKhD,WAAO,UAAP;AACD;;AAEDC,EAAAA,QAAQ,CAACC,IAAD,EAAeC,MAAf,EAAgC;AACtCA,IAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;;AACA,QAAID,IAAI,CAACE,OAAL,CAAa,GAAb,KAAqB,CAAzB,EAA4B;AAC1B,UAAIC,KAAK,GAAGH,IAAI,CAACI,OAAL,CAAa,KAAb,EAAoB,aAAaH,MAAjC,CAAZ;AACAE,MAAAA,KAAK,GAAGA,KAAK,CAACC,OAAN,CAAc,KAAd,EAAqB,GAArB,CAAR;AACA,yBAAWD,KAAX;AACD;;AACD,uBAAWH,IAAX;AACD;;AAEDK,EAAAA,QAAQ,CAAC7H,MAAD,EAAiBuC,IAAjB,EAA8BkF,MAA9B,EAA+C;AACrD,QAAI,CAAClF,IAAD,IAASA,IAAI,CAACqC,MAAL,KAAgB,CAA7B,EAAgC,OAAO,KAAKf,OAAZ;AAChC,QAAMiE,IAAc,GAAG,EAAvB;;AACA,SAAK,IAAMC,GAAX,IAAkBxF,IAAlB,EAAwB;AACtB,UAAIkF,MAAJ,EAAY;AACVK,QAAAA,IAAI,CAAC9E,IAAL,aAAc+E,GAAd,iBAAuBN,MAAvB,SAAgCM,GAAhC;AACD,OAFD,MAEO;AACLD,QAAAA,IAAI,CAAC9E,IAAL,aAAc+E,GAAd,iBAAuBA,GAAvB;AACD;AACF;;AACD,uBAAY/H,MAAZ,cAAsB8H,IAAI,CAACxE,IAAL,CAAU,KAAKC,YAAf,CAAtB;AACD;;AAEDyE,EAAAA,UAAU,CAAChI,MAAD,EAAiBgC,MAAjB,EAAkCyF,MAAlC,EAAmD;AAC3D,QAAM/C,MAAM,GAAG1C,MAAM,CAACiG,SAAP,CAAiB,OAAjB,CAAf;AACA,QAAI,CAACvD,MAAD,IAAWA,MAAM,CAACE,MAAP,KAAkB,CAAjC,EAAoC,OAAO,KAAKf,OAAZ;AACpC,QAAMiE,IAAc,GAAG,EAAvB;;AACA,SAAK,IAAMjG,KAAX,IAAoB6C,MAApB,EAA4B;AAC1B,UAAMqD,GAAG,GAAG,KAAKG,KAAL,CAAWrG,KAAX,CAAZ;;AACA,UAAI4F,MAAJ,EAAY;AACVK,QAAAA,IAAI,CAAC9E,IAAL,aAAcnB,KAAK,CAACpC,IAApB,iBAA8BgI,MAA9B,SAAuCM,GAAvC;AACD,OAFD,MAEO;AACLD,QAAAA,IAAI,CAAC9E,IAAL,aAAcnB,KAAK,CAACpC,IAApB,iBAA8BsI,GAA9B;AACD;AACF;;AACD,uBAAY/H,MAAZ,cAAsB8H,IAAI,CAACxE,IAAL,CAAU,KAAKC,YAAf,CAAtB;AACD;;AAED2E,EAAAA,KAAK,CAACrG,KAAD,EAAyB;AAC5B,QAAIsG,MAAJ;;AACA,QAAItG,KAAK,CAAChB,IAAN,CAAWsG,WAAf,EAA4B;AAC1BgB,MAAAA,MAAM,GAAG,IAAT;AACD,KAFD,MAEO;AACL,UAAMrG,MAAM,GAAG,KAAKV,OAAL,CAAaS,KAAK,CAAChB,IAAnB,CAAf;;AACA,cAAQiB,MAAM,CAACrC,IAAP,CAAYkB,WAAZ,EAAR;AACE,aAAK,MAAL;AACA,aAAK,UAAL;AACA,aAAK,QAAL;AACA,aAAK,MAAL;AACEwH,UAAAA,MAAM,GAAG,IAAT;AACA;;AACF;AACEA,UAAAA,MAAM,GAAG,KAAT;AACA;AATJ;AAWD;;AACD,WAAOtG,KAAK,CAACpC,IAAN,IAAc0I,MAAM,GAAG,UAAH,GAAgB,EAApC,CAAP;AACD;;AAEDC,EAAAA,OAAO,CAACpI,MAAD,EAAiBuC,IAAjB,EAA8BkF,MAA9B,EAA+C;AACpDA,IAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;AACA,WAAOlF,IAAI,IAAIA,IAAI,CAACqC,MAAL,KAAgB,CAAxB,eACE5E,MADF,SACWyH,MADX,SACoBlF,IAAI,CAACe,IAAL,CAAU,KAAKC,YAAL,GAAoBkE,MAA9B,CADpB,IAEH,KAAK5D,OAFT;AAGD;;AAQDwE,EAAAA,OAAO,CAACC,OAAD,EAAkB/F,IAAlB,EAAgC;AACrC,QAAI,CAAC+F,OAAD,IAAY/F,IAAI,CAAC4B,IAAL,OAAgB,KAAKN,OAArC,EAA8C;AAE5C,aAAO,EAAP;AACD;;AACD,qBAAUtB,IAAV,SAAiB+F,OAAO,GAAG,KAAK/E,YAAR,GAAuB,EAA/C,SAAoD+E,OAApD;AACD;;AAeDC,EAAAA,QAAQ,CAACvI,MAAD,EAAiBgC,MAAjB,EAAkC;AACxC,QAAMwG,OAAO,GAAG,KAAKC,UAAL,CAAgBzG,MAAhB,IAA0B,UAA1B,GAAuC,EAAvD;AAIA,QAAI0G,MAAM,GAAG,KAAKL,OAAL,CAAa,EAAb,EAAiB,SAAjB,CAAb;AAGAK,IAAAA,MAAM,GAAG,KAAKL,OAAL,CACPK,MADO,EAEP1G,MAAM,CAAC2G,OAAP,8BACwBH,OADxB,SACkCxG,MAAM,CAAC2G,OADzC,SAEI,KAAK9E,OAJF,CAAT;AAMA6E,IAAAA,MAAM,GAAG,KAAKL,OAAL,CAAaK,MAAb,EAAqB,KAAKV,UAAL,CAAgBhI,MAAhB,EAAwBgC,MAAxB,EAAgCwG,OAAhC,CAArB,CAAT;AACA,WAAOE,MAAP;AACD;;AAEDpD,EAAAA,QAAQ,CAACtF,MAAD,EAAiBgC,MAAjB,EAAkC;AACxC,QAAMwG,OAAO,GAAG,KAAKC,UAAL,CAAgBzG,MAAhB,IAA0B,UAA1B,GAAuC,EAAvD;AACA,QAAMnB,IAAI,GAAG,KAAKO,OAAL,CAAaY,MAAM,CAACnB,IAApB,CAAb;AACA,QAAMW,IAAI,GAAG,KAAKC,MAAL,CAAYzB,MAAZ,CAAb;AACA,QAAMuC,IAAI,GAAG,KAAKgG,QAAL,CAAc/G,IAAd,EAAoBQ,MAApB,CAAb;AACA,QAAM4G,MAAM,GAAG,KAAKvB,cAAL,CAAoBrH,MAApB,EAA4BgC,MAA5B,CAAf;AACA,qBAAUhC,MAAV,qCACEa,IAAI,CAACpB,IADP,eAEKmJ,MAFL,iBAEkB,KAAKxF,EAAL,CAAQpB,MAAM,CAACqC,UAAP,CAAkB1D,WAAlB,EAAR,CAFlB,cAE8D,KAAK4G,QAAL,CAC5DvF,MAAM,CAACsC,QADqD,EAE5DkE,OAF4D,CAF9D,SAKIjG,IAAI,GAAG,OAAOA,IAAV,GAAiB,EALzB,gBAMFvC,MANE;AAOD;;AAEDyF,EAAAA,UAAU,CAACzF,MAAD,EAAiBgC,MAAjB,EAAkC;AAC1C,QAAMwG,OAAO,GAAG,KAAKC,UAAL,CAAgBzG,MAAhB,IAA0B,UAA1B,GAAuC,EAAvD;AAEA,QAAMR,IAAI,GAAGxB,MAAM,GAAG,KAAKb,SAA3B;AACA,QAAMoD,IAAI,GAAG,KAAKgG,QAAL,CAAc/G,IAAd,EAAoBQ,MAApB,CAAb;AACA,QAAM4G,MAAM,GAAG,KAAKvB,cAAL,CAAoBrH,MAApB,EAA4BgC,MAA5B,CAAf;AACA,qBAAUhC,MAAV,2CAAiD4I,MAAjD,iBAA8D,KAAKxF,EAAL,CAC5DpB,MAAM,CAACqC,UAAP,CAAkB1D,WAAlB,EAD4D,CAA9D,cAEK,KAAK4G,QAAL,CAAcvF,MAAM,CAACsC,QAArB,EAA+BkE,OAA/B,CAFL,SAE+CjG,IAAI,GAAG,OAAOA,IAAV,GAAiB,EAFpE,gBAGFvC,MAHE;AAID;;AAED6I,EAAAA,OAAO,CAAC7I,MAAD,EAAiBC,IAAjB,EAA2C;AAChD,WAAO,KAAKF,aAAL,CAAmBC,MAAnB,EAA2BC,IAA3B,CAAP;AACD;;AAGD6I,EAAAA,SAAS,GAAoB;AAAA,QAAnBC,UAAmB,uEAAN,IAAM;AAC3B,QAAMC,KAAe,GAAG,EAAxB;AACA,QAAI,CAAC,KAAKC,GAAV,EAAe,OAAOD,KAAP;;AACf,QAAID,UAAJ,EAAgB;AACd,WAAKE,GAAL,CAASC,KAAT,CAAeC,KAAf,CAAqBhI,QAArB;AACD,KAFD,MAEO;AACL,WAAK8H,GAAL,CAASC,KAAT,CAAeC,KAAf,CAAqBhI,QAArB,GAAgC,CAAhC;AACD;;AACD,QAAM+H,KAAK,GAAG,KAAKD,GAAL,CAASC,KAAvB;AACArD,IAAAA,MAAM,CAACC,MAAP,CAAcoD,KAAd,EACGE,MADH,CACWvI,IAAD,IAAUA,IAAI,CAACM,QAAL,GAAgB,CAAhB,IAAqB,CAACN,IAAI,CAACwI,SAD/C,EAEGxG,OAFH,CAEYhC,IAAD,IAAUmI,KAAK,CAAChG,IAAN,YAAenC,IAAI,CAACpB,IAApB,EAFrB;AAOA,WAAOuJ,KAAP;AACD;;AAED5H,EAAAA,OAAO,CAACP,IAAD,EAA2B;AAChC,UAAMO,OAAN,CAAcP,IAAd;AAGA,QAAMyI,EAAE,GAAG,IAAX;AAEA,QAAMC,UAAuC,GAAG;AAC9CJ,MAAAA,KAAK,EAAE;AAAE9G,QAAAA,OAAO,EAAE,EAAX;AAAe5C,QAAAA,IAAI,YAAK6J,EAAL;AAAnB,OADuC;AAE9CE,MAAAA,KAAK,EAAE;AAAEnH,QAAAA,OAAO,EAAE,EAAX;AAAe5C,QAAAA,IAAI,YAAK6J,EAAL;AAAnB,OAFuC;AAG9CG,MAAAA,MAAM,EAAE;AAAEpH,QAAAA,OAAO,EAAE,EAAX;AAAe5C,QAAAA,IAAI,YAAK6J,EAAL;AAAnB,OAHsC;AAI9CI,MAAAA,GAAG,EAAE;AAAErH,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAJyC;AAK9CkK,MAAAA,OAAO,EAAE;AAAEtH,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OALqC;AAM9CmK,MAAAA,IAAI,EAAE;AAAEvH,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OANwC;AAO9CoK,MAAAA,IAAI,EAAE;AAAExH,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAPwC;AAQ9CqK,MAAAA,QAAQ,EAAE;AAAEzH,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OARoC;AAS9CsK,MAAAA,MAAM,EAAE;AAAE1H,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OATsC;AAU9CuK,MAAAA,KAAK,EAAE;AAAE3H,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAVuC;AAW9CwK,MAAAA,KAAK,EAAE;AAAE5H,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAXuC;AAY9CyK,MAAAA,KAAK,EAAE;AAAE7H,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAZuC;AAa9C0K,MAAAA,OAAO,EAAE;AAAE9H,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAbqC;AAc9C2K,MAAAA,MAAM,EAAE;AAAE/H,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAdsC;AAe9C4K,MAAAA,MAAM,EAAE;AAAEhI,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAfsC;AAgB9C6K,MAAAA,QAAQ,EAAE;AAAEjI,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAhBoC;AAiB9C8K,MAAAA,MAAM,EAAE;AAAElI,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAjBsC;AAkB9C+K,MAAAA,GAAG,EAAE;AAAEnI,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAlByC;AAmB9CgL,MAAAA,GAAG,EAAE;AAAEpI,QAAAA,OAAO,EAAE,KAAKwB,OAAhB;AAAyBpE,QAAAA,IAAI,EAAE;AAA/B,OAnByC;AAoB9CiL,MAAAA,IAAI,EAAE;AAAErI,QAAAA,OAAO,EAAE,EAAX;AAAe5C,QAAAA,IAAI,EAAE;AAArB;AApBwC,KAAhD;;AAuBA,QAAIoB,IAAI,CAACsG,WAAT,EAAsB;AAEpB,UAAMnB,GAAG,GAAG,KAAK5E,OAAL,CAAaP,IAAI,CAACsG,WAAlB,CAAZ;;AACA,cAAQtG,IAAI,CAAC8J,SAAb;AACE,aAAK,WAAL;AACE,iBAAO;AAAEtI,YAAAA,OAAO,EAAE,IAAX;AAAiB5C,YAAAA,IAAI,aAAMuG,GAAG,CAACvG,IAAV;AAArB,WAAP;;AACF,aAAK,UAAL;AAAiB;AACf,gBAAMmL,OAAO,GACX/J,IAAI,CAACsG,WAAL,CAAiB1H,IAAjB,KAA0B,QAA1B,GAAqC,YAArC,GAAoDuG,GAAG,CAACvG,IAD1D;AAGA,mBAAO;AAAE4C,cAAAA,OAAO,EAAE,KAAX;AAAkB5C,cAAAA,IAAI,6BAAsBmL,OAAtB;AAAtB,aAAP;AACD;;AACD,aAAK,gBAAL;AACE,iBAAO;AAAEvI,YAAAA,OAAO,EAAE,KAAX;AAAkB5C,YAAAA,IAAI,uBAAgBuG,GAAG,CAACvG,IAApB;AAAtB,WAAP;;AACF,aAAK,UAAL;AACE,iBAAO;AAAE4C,YAAAA,OAAO,EAAE,KAAX;AAAkB5C,YAAAA,IAAI,EAAEoB,IAAI,CAACpB;AAA7B,WAAP;AAZJ;;AAcA,YAAM,IAAI0J,KAAJ,qCAAuC0B,IAAI,CAACC,SAAL,CAAejK,IAAf,CAAvC,EAAN;AACD;;AAED,QAAIA,IAAI,CAACpB,IAAT,EAAe;AACb,aAAO8J,UAAU,CAAC1I,IAAI,CAACpB,IAAN,CAAV,IAAyB;AAAE4C,QAAAA,OAAO,EAAE,EAAX;AAAe5C,QAAAA,IAAI,YAAKoB,IAAI,CAACpB,IAAV;AAAnB,OAAhC;AACD,KAFD,MAEO;AACL,YAAM,IAAI0J,KAAJ,CAAU,gCAAV,CAAN;AACD;AACF;;AAvtBmC","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type {\n Arg,\n EnumValueType,\n IMethod,\n IParameter,\n IProperty,\n IType,\n} from './sdkModels'\nimport { EnumType, mayQuote, strBody } from './sdkModels'\nimport type { IMappedType } from './codeGen'\nimport { CodeGen, commentBlock } from './codeGen'\n\nexport class SwiftGen extends CodeGen {\n // Use AnyString JSON parser for number or string ids\n anyString = true\n codePath = './swift/'\n packagePath = 'looker'\n itself = 'self'\n fileExtension = '.swift'\n commentStr = '// '\n nullStr = 'nil'\n transport = 'transport'\n\n argDelimiter = ', '\n paramDelimiter = ',\\n'\n propDelimiter = '\\n'\n enumDelimiter = '\\n'\n codeQuote = '\"'\n\n indentStr = ' '\n endTypeStr = `\\n}`\n needsRequestTypes = false\n willItStream = true\n keywords = new Set<string>([\n 'associatedtype',\n 'class',\n 'deinit',\n 'enum',\n 'extension',\n 'fileprivate',\n 'func',\n 'import',\n 'init',\n 'inout',\n 'internal',\n 'let',\n 'open',\n 'operator',\n 'private',\n 'protocol',\n 'public',\n 'static',\n 'struct',\n 'subscript',\n 'typealias',\n 'var',\n 'break',\n 'case',\n 'continue',\n 'default',\n 'defer',\n 'do',\n 'else',\n 'fallthrough',\n 'for',\n 'guard',\n 'if',\n 'in',\n 'repeat',\n 'return',\n 'switch',\n 'where',\n 'while',\n 'as',\n 'Any',\n 'catch',\n 'false',\n 'is',\n 'nil',\n 'rethrows',\n 'super',\n 'self',\n 'Self',\n 'throw',\n 'throws',\n 'true',\n 'try',\n '_',\n '#available',\n '#colorLiteral',\n '#column',\n '#else',\n '#elseif',\n '#endif',\n '#file',\n '#fileLiteral',\n '#function',\n '#if',\n '#imageLiteral',\n '#line',\n '#selector',\n 'and #sourceLocation',\n 'associativity',\n 'convenience',\n 'dynamic',\n 'didSet',\n 'final',\n 'get',\n 'infix',\n 'indirect',\n 'lazy',\n 'left',\n 'mutating',\n 'none',\n 'nonmutating',\n 'optional',\n 'override',\n 'postfix',\n 'precedence',\n 'prefix',\n 'Protocol',\n // 'required', removing this from the list because Swift complains about it being escaped\n 'right',\n 'set',\n 'Type',\n 'unowned',\n 'weak',\n 'willSet',\n ])\n\n supportsMultiApi(): boolean {\n return false\n }\n\n methodsPrologue(_indent: string) {\n return `\n/// ${this.warnEditing()}\n\nimport Foundation\n\n@available(OSX 10.15, *)\nopen class ${this.packageName}: APIMethods {\n\n${this.indentStr}public lazy var stream = ${this.packageName}Stream(authSession)\n`\n }\n\n streamsPrologue(_indent: string): string {\n return `\n/// ${this.warnEditing()}\n\nimport Foundation\n\n@available(OSX 10.15, *)\nopen class ${this.packageName}Stream: APIMethods {\n`\n }\n\n methodsEpilogue(_indent: string) {\n return '\\n}'\n }\n\n modelsPrologue(_indent: string) {\n return `\n/// ${this.warnEditing()}\n\nimport Foundation\n`\n }\n\n modelsEpilogue(_indent: string) {\n return '\\n'\n }\n\n reserve(name: string) {\n if (this.keywords.has(name)) {\n return `\\`${name}\\``\n }\n return name\n }\n\n sdkFileName(baseFileName: string) {\n // return this.fileName(`sdk/${baseFileName}${this.apiRef}`)\n return this.fileName(`sdk/${baseFileName}`)\n }\n\n commentHeader(indent: string, text: string | undefined, commentStr = ' * ') {\n if (this.noComment || !text) return ''\n if (commentStr === ' ') {\n return `${indent}/**\\n\\n${commentBlock(\n text,\n indent,\n commentStr\n )}\\n${indent} */\\n`\n }\n return `${indent}/**\\n${commentBlock(\n text,\n indent,\n commentStr\n )}\\n${indent} */\\n`\n }\n\n beginRegion(indent: string, description: string): string {\n return `${indent}// MARK ${description}`\n }\n\n endRegion(_indent: string, _description: string): string {\n return '' // No end MARK in Swift, and XCode appears to no longer process MARKs anyway\n }\n\n /**\n * true if this property should use AnyString\n * @param property to check\n */\n useAnyString(property: IProperty) {\n const nameCheck = property.name.toLowerCase()\n return (\n this.anyString &&\n property.type.name.toLowerCase() === 'string' &&\n (nameCheck === 'id' || nameCheck.endsWith('_id'))\n )\n }\n\n /**\n * Private version of the name (_ prefix)\n * @param name to privatize\n */\n privy(name: string) {\n return this.reserve('_' + name)\n }\n\n declareProperty(indent: string, property: IProperty) {\n // const optional = (property.nullable || !property.required) ? '?' : ''\n const optional = property.required ? '' : '?'\n if (property.name === strBody) {\n // TODO refactor this hack to track context when the body parameter is created for the request type\n property.type.refCount++\n return (\n this.commentHeader(\n indent,\n property.description ||\n 'body parameter for dynamically created request type'\n ) +\n `${indent}var ${this.reserve(property.name)}: ${\n property.type.name\n }${optional}`\n )\n }\n const type = this.typeMap(property.type)\n const specialHandling = this.useAnyString(property)\n let munge = ''\n let declaration = `${indent}public var ${this.reserve(property.name)}: ${\n type.name\n }${optional}\\n`\n if (specialHandling) {\n const privy = this.reserve('_' + property.name)\n const bump = this.bumper(indent)\n const setter = property.required\n ? 'AnyString.init(newValue)'\n : 'newValue.map(AnyString.init)'\n munge = `${indent}private var ${privy}: AnyString${optional}\\n`\n declaration = `${indent}public var ${this.reserve(property.name)}: ${\n type.name\n }${optional} {\n${bump}get { ${privy}${optional}.value }\n${bump}set { ${privy} = ${setter} }\n${indent}}\\n`\n }\n return (\n munge +\n this.commentHeader(indent, this.describeProperty(property)) +\n declaration\n )\n }\n\n paramComment(param: IParameter, mapped: IMappedType) {\n return `@param {${mapped.name}} ${param.name} ${param.description}`\n }\n\n declareParameter(indent: string, method: IMethod, param: IParameter) {\n const type =\n param.location === strBody\n ? this.writeableType(param.type, method) || param.type\n : param.type\n const mapped = this.typeMap(type)\n let pOpt = ''\n let line = ''\n if (param.location === strBody) {\n mapped.name = `${mapped.name}`\n }\n if (!param.required) {\n pOpt = '?'\n } else {\n line = '_ '\n }\n return (\n this.commentHeader(indent, this.paramComment(param, mapped)) +\n `${indent}${line}${this.reserve(param.name)}: ${mapped.name}${pOpt}` +\n (param.required ? '' : mapped.default ? ` = ${mapped.default}` : '')\n )\n }\n\n construct(indent: string, type: IType) {\n if (type instanceof EnumType) return ''\n indent = this.bumper(indent)\n const bump = this.bumper(indent)\n const args: string[] = []\n const posArgs: string[] = []\n const inits: string[] = []\n const posInits: string[] = []\n const props = this.typeProperties(type)\n props.forEach((prop) => {\n const propName = this.reserve(prop.name)\n args.push(this.declareConstructorArg('', prop))\n posArgs.push(this.declarePositionalArg('', prop))\n if (this.useAnyString(prop)) {\n const varName = this.privy(propName)\n if (prop.required) {\n inits.push(`${bump}${this.it(varName)} = AnyString.init(${propName})`)\n } else {\n inits.push(\n `${bump}${this.it(varName)} = ${propName}.map(AnyString.init)`\n )\n }\n } else {\n inits.push(`${bump}${this.it(propName)} = ${propName}`)\n }\n posInits.push(`${propName}: ${propName}`)\n })\n const namedInit =\n `${indent}public init(` +\n `${args.join(this.argDelimiter)}) {\\n` +\n inits.join('\\n') +\n `\\n${indent}}`\n let posInit = ''\n if (props.some((p) => p.required)) {\n posInit =\n `\\n${indent}public init(` +\n `${posArgs.join(this.argDelimiter)}) {\\n` +\n `${bump}${this.it('init')}(${posInits.join(', ')})` +\n `\\n${indent}}\\n`\n }\n return `\\n${namedInit}\\n${posInit}`\n }\n\n declarePositionalArg(indent: string, property: IProperty) {\n const mappedType = this.typeMap(property.type)\n let propType: string\n let line = '_ '\n if (property.required) {\n propType = mappedType.name\n } else {\n line = ''\n propType = `${mappedType.name}? = ${this.nullStr}`\n }\n const propName = this.reserve(property.name)\n return `${indent}${line}${propName}: ${propType}`\n }\n\n declareConstructorArg(indent: string, property: IProperty) {\n const mappedType = this.typeMap(property.type)\n let propType: string\n if (property.required) {\n propType = mappedType.name\n } else {\n propType = `${mappedType.name}? = ${this.nullStr}`\n }\n const propName = this.reserve(property.name)\n return `${indent}${propName}: ${propType}`\n }\n\n methodHeaderDeclaration(indent: string, method: IMethod, streamer = false) {\n const type = this.typeMap(method.type)\n const resultType = streamer ? 'Data' : type.name\n const returnType =\n type.name === 'Void' ? 'Voidable' : `SDKResponse<${resultType}, SDKError>`\n const head = method.description?.trim()\n let headComment =\n (head ? `${head}\\n\\n` : '') +\n `${method.httpMethod} ${method.endpoint} -> ${type.name}`\n let fragment\n const requestType = this.requestTypeName(method)\n const bump = indent + this.indentStr\n\n if (requestType) {\n // use the request type that will be generated in models.ts\n fragment = `request: I${requestType}`\n } else {\n const params: string[] = []\n const args = method.allParams // get the params in signature order\n if (args && args.length > 0)\n args.forEach((p) => params.push(this.declareParameter(bump, method, p)))\n fragment =\n params.length > 0 ? `\\n${params.join(this.paramDelimiter)}` : ''\n }\n if (method.responseIsBoth()) {\n headComment += `\\n\\n**Note**: Binary content may be returned by this method.`\n } else if (method.responseIsBinary()) {\n headComment += `\\n\\n**Note**: Binary content is returned by this method.\\n`\n }\n const header =\n this.commentHeader(indent, headComment) +\n `${indent}public func ${method.name}(`\n\n return (\n header +\n fragment +\n `${\n fragment ? ',' : ''\n }\\n${bump}options: ITransportSettings? = nil\\n${indent}) -> ${returnType} {\\n`\n )\n }\n\n methodSignature(indent: string, method: IMethod) {\n return this.methodHeaderDeclaration(indent, method, false)\n }\n\n encodePathParams(indent: string, method: IMethod) {\n let encodings = ''\n if (method.pathParams.length > 0) {\n for (const param of method.pathParams) {\n // For swift, just encode all path params because of awkward variable renames\n encodings += `${indent}let path_${param.name} = encodeParam(${param.name})\\n`\n }\n }\n return encodings\n }\n\n declareMethod(indent: string, method: IMethod) {\n const bump = this.bumper(indent)\n return (\n this.methodSignature(indent, method) +\n this.encodePathParams(bump, method) +\n this.httpCall(bump, method) +\n `\\n${indent}}`\n )\n }\n\n streamerSignature(indent: string, method: IMethod) {\n return this.methodHeaderDeclaration(indent, method, true)\n }\n\n declareStreamer(indent: string, method: IMethod) {\n const bump = this.bumper(indent)\n return (\n this.streamerSignature(indent, method) +\n this.encodePathParams(bump, method) +\n this.streamCall(bump, method) +\n `\\n${indent}}`\n )\n }\n\n codingKeys(indent: string, type: IType) {\n let special = false\n\n const keys = Object.values(type.properties).map((p) => {\n let name = this.reserve(p.name)\n let alias = ''\n const useIt = this.useAnyString(p)\n if (useIt) {\n name = this.privy(name)\n special = true\n alias = p.jsonName\n } else if (p.hasSpecialNeeds) {\n special = true\n alias = p.jsonName\n }\n return name + (alias ? ` = \"${alias}\"` : '')\n })\n\n if (!special) return ''\n const bump = this.bumper(indent)\n const bump2 = this.bumper(bump)\n const cases = keys.join(`\\n${bump2}case `)\n\n return (\n `\\n${bump}private enum CodingKeys : String, CodingKey {` +\n `\\n${bump2}case ${cases}` +\n `\\n${bump}}\\n`\n )\n }\n\n // declareType(indent: string, type: IType): string {\n // return super.declareType(this.bumper(indent), type)\n // }\n declareEnumValue(indent: string, value: EnumValueType) {\n const quote = typeof value === 'string' ? this.codeQuote : ''\n return `${indent}case ${mayQuote(value)} = ${quote}${value}${quote}`\n }\n\n typeSignature(indent: string, type: IType) {\n const recursive = type.isRecursive()\n let typeName = recursive ? 'class' : 'struct'\n const access = recursive ? 'open' : 'public'\n let baseClass = 'SDKModel'\n const isEnum = type instanceof EnumType\n if (isEnum) {\n typeName = 'enum'\n const num = type as EnumType\n const mapped = this.typeMap(num.elementType)\n baseClass = `${mapped.name}, Codable`\n }\n\n const keys = this.codingKeys(indent, type)\n\n const needClass = recursive\n ? '\\nRecursive type references must use Class instead of Struct'\n : ''\n const mapped = this.typeMap(type)\n return (\n this.commentHeader(indent, type.description + needClass) +\n `${indent}${access} ${typeName} ${mapped.name}: ${baseClass} {\\n${keys}`\n )\n }\n\n errorResponses(_indent: string, _method: IMethod) {\n // const results: string[] = method.errorResponses\n // .map(r => `${r.type.name}`)\n // return results.join(' | ')\n // TODO figure out how to express Union error type responses\n return 'SDKError'\n }\n\n httpPath(path: string, prefix?: string) {\n prefix = prefix || ''\n if (path.indexOf('{') >= 0) {\n let tweak = path.replace(/{/gi, '\\\\(path_' + prefix)\n tweak = tweak.replace(/}/gi, ')')\n return `\"${tweak}\"`\n }\n return `\"${path}\"`\n }\n\n argGroup(indent: string, args: Arg[], prefix?: string) {\n if (!args || args.length === 0) return this.nullStr\n const hash: string[] = []\n for (const arg of args) {\n if (prefix) {\n hash.push(`\"${arg}\": ${prefix}${arg}`)\n } else {\n hash.push(`\"${arg}\": ${arg}`)\n }\n }\n return `\\n${indent}[${hash.join(this.argDelimiter)}]`\n }\n\n queryGroup(indent: string, method: IMethod, prefix?: string) {\n const params = method.getParams('query')\n if (!params || params.length === 0) return this.nullStr\n const hash: string[] = []\n for (const param of params) {\n const arg = this.asAny(param)\n if (prefix) {\n hash.push(`\"${param.name}\": ${prefix}${arg}`)\n } else {\n hash.push(`\"${param.name}\": ${arg}`)\n }\n }\n return `\\n${indent}[${hash.join(this.argDelimiter)}]`\n }\n\n asAny(param: IParameter): Arg {\n let castIt\n if (param.type.elementType) {\n castIt = true\n } else {\n const mapped = this.typeMap(param.type)\n switch (mapped.name.toLowerCase()) {\n case 'date':\n case 'datetime': // case 'url': case 'uri':\n case 'object':\n case 'bool':\n castIt = true\n break\n default:\n castIt = false\n break\n }\n }\n return param.name + (castIt ? ' as Any?' : '')\n }\n\n argList(indent: string, args: Arg[], prefix?: string) {\n prefix = prefix || ''\n return args && args.length !== 0\n ? `\\n${indent}${prefix}${args.join(this.argDelimiter + prefix)}`\n : this.nullStr\n }\n\n /**\n * this is a builder function to produce arguments with optional null place holders but no extra required optional arguments\n * @param {string} current accumulator\n * @param {string} args names of parameters\n * @returns {string} accumulated argument list\n */\n argFill(current: string, args: string) {\n if (!current && args.trim() === this.nullStr) {\n // Don't append trailing optional arguments if none have been set yet\n return ''\n }\n return `${args}${current ? this.argDelimiter : ''}${current}`\n }\n\n /**\n * build the http argument list from back to front, so trailing undefined arguments\n * can be omitted. Path arguments are resolved as part of the path parameter to general\n * purpose API method call\n * e.g.\n * {queryArgs...}, bodyArg, {headerArgs...}, {cookieArgs...}\n * {queryArgs...}, null, null, {cookieArgs...}\n * null, bodyArg\n * {queryArgs...}\n * @param {string} indent\n * @param {IMethod} method\n * @returns {string}\n */\n httpArgs(indent: string, method: IMethod) {\n const request = this.useRequest(method) ? 'request.' : ''\n // add options at the end of the request calls. this will cause all other arguments to be\n // filled in but there's no way to avoid this for passing in the last optional parameter.\n // Fortunately, this code bloat is minimal and also hidden from the consumer.\n let result = this.argFill('', 'options')\n // let result = this.argFill('', this.argGroup(indent, method.cookieArgs, request))\n // result = this.argFill(result, this.argGroup(indent, method.headerArgs, request))\n result = this.argFill(\n result,\n method.bodyArg\n ? `try! self.encode(${request}${method.bodyArg})`\n : this.nullStr\n )\n result = this.argFill(result, this.queryGroup(indent, method, request))\n return result\n }\n\n httpCall(indent: string, method: IMethod) {\n const request = this.useRequest(method) ? 'request.' : ''\n const type = this.typeMap(method.type)\n const bump = this.bumper(indent)\n const args = this.httpArgs(bump, method)\n const errors = this.errorResponses(indent, method)\n return `${indent}let result: SDKResponse<${\n type.name\n }, ${errors}> = ${this.it(method.httpMethod.toLowerCase())}(${this.httpPath(\n method.endpoint,\n request\n )}${args ? ', ' + args : ''})\n${indent}return result`\n }\n\n streamCall(indent: string, method: IMethod) {\n const request = this.useRequest(method) ? 'request.' : ''\n // const type = this.typeMap(method.type)\n const bump = indent + this.indentStr\n const args = this.httpArgs(bump, method)\n const errors = this.errorResponses(indent, method)\n return `${indent}let result: SDKResponse<Data, ${errors}> = ${this.it(\n method.httpMethod.toLowerCase()\n )}(${this.httpPath(method.endpoint, request)}${args ? ', ' + args : ''})\n${indent}return result`\n }\n\n summary(indent: string, text: string | undefined) {\n return this.commentHeader(indent, text)\n }\n\n // TODO avoid duplicate code\n typeNames(countError = true) {\n const names: string[] = []\n if (!this.api) return names\n if (countError) {\n this.api.types.Error.refCount++\n } else {\n this.api.types.Error.refCount = 0\n }\n const types = this.api.types\n Object.values(types)\n .filter((type) => type.refCount > 0 && !type.intrinsic)\n .forEach((type) => names.push(`I${type.name}`))\n // TODO import default constants if necessary\n // Object.values(types)\n // .filter(type => type instanceof RequestType)\n // .forEach(type => names.push(`${strDefault}${type.name.substring(strRequest.length)}`))\n return names\n }\n\n typeMap(type: IType): IMappedType {\n super.typeMap(type)\n // const ns = `api${this.apiRef}.`\n // const ns = `Looker.`\n const ns = 'Lk'\n\n const swiftTypes: Record<string, IMappedType> = {\n Error: { default: '', name: `${ns}Error` },\n Group: { default: '', name: `${ns}Group` },\n Locale: { default: '', name: `${ns}Locale` },\n any: { default: this.nullStr, name: 'AnyCodable' },\n boolean: { default: this.nullStr, name: 'Bool' },\n byte: { default: this.nullStr, name: 'binary' },\n date: { default: this.nullStr, name: 'Date' },\n datetime: { default: this.nullStr, name: 'Date' },\n double: { default: this.nullStr, name: 'Double' },\n float: { default: this.nullStr, name: 'Float' },\n int32: { default: this.nullStr, name: 'Int32' },\n int64: { default: this.nullStr, name: 'Int64' },\n integer: { default: this.nullStr, name: 'Int' },\n number: { default: this.nullStr, name: 'Double' },\n object: { default: this.nullStr, name: 'Any' },\n password: { default: this.nullStr, name: 'Password' },\n string: { default: this.nullStr, name: 'String' },\n uri: { default: this.nullStr, name: 'URI' },\n url: { default: this.nullStr, name: 'URL' },\n void: { default: '', name: 'Voidable' },\n }\n\n if (type.elementType) {\n // This is a structure with nested types\n const map = this.typeMap(type.elementType)\n switch (type.className) {\n case 'ArrayType':\n return { default: '[]', name: `[${map.name}]` }\n case 'HashType': {\n const mapName =\n type.elementType.name === 'string' ? 'AnyCodable' : map.name // TODO fix bad API spec, like MergeQuery vis_config\n\n return { default: 'nil', name: `StringDictionary<${mapName}>` }\n }\n case 'DelimArrayType':\n return { default: 'nil', name: `DelimArray<${map.name}>` }\n case 'EnumType':\n return { default: 'nil', name: type.name }\n }\n throw new Error(`Don't know how to handle: ${JSON.stringify(type)}`)\n }\n\n if (type.name) {\n return swiftTypes[type.name] || { default: '', name: `${type.name}` } // No null default for complex types\n } else {\n throw new Error('Cannot output a nameless type.')\n }\n }\n}\n"],"file":"swift.gen.js"}
1
+ {"version":3,"sources":["../../src/swift.gen.ts"],"names":["EnumType","mayQuote","strBody","TypeOfType","typeOfType","CodeGen","commentBlock","SwiftGen","Set","supportsMultiApi","methodsPrologue","_indent","warnEditing","packageName","indentStr","streamsPrologue","methodsEpilogue","modelsPrologue","modelsEpilogue","reserve","name","keywords","has","sdkFileName","baseFileName","fileName","commentHeader","indent","text","commentStr","noComment","beginRegion","description","endRegion","_description","isIdProp","_property","itemType","property","type","Array","elementType","useAnyString","typeCheck","toLowerCase","anyString","useAnyInt","privy","replace","getSpecialHandling","declareProperty","optional","required","refCount","typeMap","specialHandling","munge","declaration","ra","bump","bumper","setter","getter","describeProperty","paramComment","param","mapped","declareParameter","method","location","writeableType","pOpt","line","default","initProp","prop","propName","varName","it","construct","args","posArgs","inits","posInits","props","typeProperties","forEach","push","declareConstructorArg","declarePositionalArg","namedInit","join","argDelimiter","posInit","some","p","mappedType","propType","nullStr","methodHeaderDeclaration","streamer","resultType","returnType","head","trim","headComment","httpMethod","endpoint","fragment","requestType","requestTypeName","params","allParams","length","paramDelimiter","responseIsBoth","responseIsBinary","header","methodSignature","encodePathParams","encodings","pathParams","declareMethod","httpCall","streamerSignature","declareStreamer","streamCall","codingKeys","special","keys","Object","values","properties","map","alias","useIt","jsonName","hasSpecialNeeds","bump2","cases","declareEnumValue","value","quote","codeQuote","typeSignature","recursive","isRecursive","typeName","access","baseClass","isEnum","num","needClass","errorResponses","_method","httpPath","path","prefix","indexOf","tweak","argGroup","hash","arg","queryGroup","getParams","asAny","castIt","argList","argFill","current","httpArgs","request","useRequest","result","bodyArg","errors","summary","typeNames","countError","names","api","types","Error","filter","intrinsic","ns","swiftTypes","Group","Locale","any","boolean","byte","date","datetime","double","float","int32","int64","integer","number","object","password","string","uri","url","void","className","mapName","JSON","stringify"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type {\n Arg,\n EnumValueType,\n IMethod,\n IParameter,\n IProperty,\n IType,\n} from './sdkModels'\nimport {\n EnumType,\n mayQuote,\n strBody,\n TypeOfType,\n typeOfType,\n} from './sdkModels'\nimport type { IMappedType } from './codeGen'\nimport { CodeGen, commentBlock } from './codeGen'\n\nexport class SwiftGen extends CodeGen {\n // Use AnyString JSON parser for number or string ids\n anyString = true\n codePath = './swift/'\n packagePath = 'looker'\n itself = 'self'\n fileExtension = '.swift'\n commentStr = '// '\n nullStr = 'nil'\n transport = 'transport'\n\n argDelimiter = ', '\n paramDelimiter = ',\\n'\n propDelimiter = '\\n'\n enumDelimiter = '\\n'\n codeQuote = '\"'\n\n indentStr = ' '\n endTypeStr = `\\n}`\n needsRequestTypes = false\n willItStream = true\n keywords = new Set<string>([\n 'associatedtype',\n 'class',\n 'deinit',\n 'enum',\n 'extension',\n 'fileprivate',\n 'func',\n 'import',\n 'init',\n 'inout',\n 'internal',\n 'let',\n 'open',\n 'operator',\n 'private',\n 'protocol',\n 'public',\n 'static',\n 'struct',\n 'subscript',\n 'typealias',\n 'var',\n 'break',\n 'case',\n 'continue',\n 'default',\n 'defer',\n 'do',\n 'else',\n 'fallthrough',\n 'for',\n 'guard',\n 'if',\n 'in',\n 'repeat',\n 'return',\n 'switch',\n 'where',\n 'while',\n 'as',\n 'Any',\n 'catch',\n 'false',\n 'is',\n 'nil',\n 'rethrows',\n 'super',\n 'self',\n 'Self',\n 'throw',\n 'throws',\n 'true',\n 'try',\n '_',\n '#available',\n '#colorLiteral',\n '#column',\n '#else',\n '#elseif',\n '#endif',\n '#file',\n '#fileLiteral',\n '#function',\n '#if',\n '#imageLiteral',\n '#line',\n '#selector',\n 'and #sourceLocation',\n 'associativity',\n 'convenience',\n 'dynamic',\n 'didSet',\n 'final',\n 'get',\n 'infix',\n 'indirect',\n 'lazy',\n 'left',\n 'mutating',\n 'none',\n 'nonmutating',\n 'optional',\n 'override',\n 'postfix',\n 'precedence',\n 'prefix',\n 'Protocol',\n // 'required', removing this from the list because Swift complains about it being escaped\n 'right',\n 'set',\n 'Type',\n 'unowned',\n 'weak',\n 'willSet',\n ])\n\n supportsMultiApi(): boolean {\n return false\n }\n\n methodsPrologue(_indent: string) {\n return `\n/// ${this.warnEditing()}\n\nimport Foundation\n\n@available(OSX 10.15, *)\nopen class ${this.packageName}: APIMethods {\n\n${this.indentStr}public lazy var stream = ${this.packageName}Stream(authSession)\n`\n }\n\n streamsPrologue(_indent: string): string {\n return `\n/// ${this.warnEditing()}\n\nimport Foundation\n\n@available(OSX 10.15, *)\nopen class ${this.packageName}Stream: APIMethods {\n`\n }\n\n methodsEpilogue(_indent: string) {\n return '\\n}'\n }\n\n modelsPrologue(_indent: string) {\n return `\n/// ${this.warnEditing()}\n\nimport Foundation\n`\n }\n\n modelsEpilogue(_indent: string) {\n return '\\n'\n }\n\n reserve(name: string) {\n if (this.keywords.has(name)) {\n return `\\`${name}\\``\n }\n return name\n }\n\n sdkFileName(baseFileName: string) {\n // return this.fileName(`sdk/${baseFileName}${this.apiRef}`)\n return this.fileName(`sdk/${baseFileName}`)\n }\n\n commentHeader(indent: string, text: string | undefined, commentStr = ' * ') {\n if (this.noComment || !text) return ''\n if (commentStr === ' ') {\n return `${indent}/**\\n\\n${commentBlock(\n text,\n indent,\n commentStr\n )}\\n${indent} */\\n`\n }\n return `${indent}/**\\n${commentBlock(\n text,\n indent,\n commentStr\n )}\\n${indent} */\\n`\n }\n\n beginRegion(indent: string, description: string): string {\n return `${indent}// MARK ${description}`\n }\n\n endRegion(_indent: string, _description: string): string {\n return '' // No end MARK in Swift, and XCode appears to no longer process MARKs anyway\n }\n\n isIdProp(_property: IProperty) {\n // sadly we can't scope fuzzy decoding to only id fields because some \"id\" refs are not named correctly\n // TODO just return true until we figure out a generic solution for fuzzy JSON decoding\n return true\n // const nameCheck = property.name.toLowerCase()\n // return (\n // nameCheck === 'id' ||\n // nameCheck.endsWith('_id') ||\n // nameCheck.endsWith('_ids')\n // )\n }\n\n itemType(property: IProperty) {\n if (\n typeOfType(property.type) === TypeOfType.Array &&\n property.type.elementType\n ) {\n return property.type.elementType\n }\n return property.type\n }\n\n /**\n * true if this property should use AnyString\n * @param property to check\n */\n useAnyString(property: IProperty) {\n const typeCheck = this.itemType(property).name.toLowerCase()\n return this.anyString && typeCheck === 'string' && this.isIdProp(property)\n }\n\n /**\n * true if this property should use AnyInt\n * @param property to check\n */\n useAnyInt(property: IProperty) {\n const typeCheck = this.itemType(property).name.toLowerCase()\n return (\n this.anyString &&\n (typeCheck === 'integer' || typeCheck === 'int64') &&\n this.isIdProp(property)\n )\n }\n\n /**\n * Private version of the name (_ prefix)\n *\n * Strips reserved character markings from the name if present\n *\n * @param name to privatize\n */\n privy(name: string) {\n return this.reserve('_' + name.replace(/`/g, ''))\n }\n\n getSpecialHandling(property: IProperty) {\n return this.useAnyString(property)\n ? 'AnyString'\n : this.useAnyInt(property)\n ? 'AnyInt'\n : ''\n }\n\n declareProperty(indent: string, property: IProperty) {\n // const optional = (property.nullable || !property.required) ? '?' : ''\n const optional = property.required ? '' : '?'\n if (property.name === strBody) {\n // TODO refactor this hack to track context when the body parameter is created for the request type\n property.type.refCount++\n return (\n this.commentHeader(\n indent,\n property.description ||\n 'body parameter for dynamically created request type'\n ) +\n `${indent}var ${this.reserve(property.name)}: ${\n property.type.name\n }${optional}`\n )\n }\n const type = this.typeMap(property.type)\n const specialHandling = this.getSpecialHandling(property)\n let munge = ''\n let declaration = `${indent}public var ${this.reserve(property.name)}: ${\n type.name\n }${optional}\\n`\n if (specialHandling) {\n const ra = typeOfType(property.type) === TypeOfType.Array\n const privy = this.reserve('_' + property.name)\n const bump = this.bumper(indent)\n const setter = property.required\n ? ra\n ? `${privy} = newValue.map { ${specialHandling}.init($0) }`\n : `${privy} = ${specialHandling}.init(newValue)`\n : ra\n ? `if let v = newValue { ${privy} = v.map { ${specialHandling}.init($0) } } else { ${privy} = nil }`\n : `${privy} = newValue.map(${specialHandling}.init)`\n const getter = property.required\n ? ra\n ? `${privy}.map { $0.value }`\n : `${privy}.value`\n : ra\n ? `if let v = ${privy} { return v.map { $0.value } } else { return nil }`\n : `${privy}${optional}.value`\n munge = ra\n ? `${indent}private var ${privy}: [${specialHandling}]${optional}\\n`\n : `${indent}private var ${privy}: ${specialHandling}${optional}\\n`\n declaration = `${indent}public var ${this.reserve(property.name)}: ${\n type.name\n }${optional} {\n${bump}get { ${getter} }\n${bump}set { ${setter} }\n${indent}}\\n`\n }\n return (\n munge +\n this.commentHeader(indent, this.describeProperty(property)) +\n declaration\n )\n }\n\n paramComment(param: IParameter, mapped: IMappedType) {\n return `@param {${mapped.name}} ${param.name} ${param.description}`\n }\n\n declareParameter(indent: string, method: IMethod, param: IParameter) {\n const type =\n param.location === strBody\n ? this.writeableType(param.type, method) || param.type\n : param.type\n const mapped = this.typeMap(type)\n let pOpt = ''\n let line = ''\n if (param.location === strBody) {\n mapped.name = `${mapped.name}`\n }\n if (!param.required) {\n pOpt = '?'\n } else {\n line = '_ '\n }\n return (\n this.commentHeader(indent, this.paramComment(param, mapped)) +\n `${indent}${line}${this.reserve(param.name)}: ${mapped.name}${pOpt}` +\n (param.required ? '' : mapped.default ? ` = ${mapped.default}` : '')\n )\n }\n\n initProp(prop: IProperty) {\n const propName = this.reserve(prop.name)\n const specialHandling = this.getSpecialHandling(prop)\n if (specialHandling) {\n const ra = typeOfType(prop.type) === TypeOfType.Array\n const varName = this.privy(propName)\n if (prop.required) {\n if (ra) {\n return `${this.it(\n varName\n )} = ${propName}.map { ${specialHandling}.init($0) }`\n }\n return `${this.it(varName)} = ${specialHandling}.init(${propName})`\n } else {\n if (ra) {\n return `if let v = ${propName} { ${varName} = v.map { ${specialHandling}.init($0) } } else { ${varName} = nil }`\n }\n return `${this.it(varName)} = ${propName}.map(${specialHandling}.init)`\n }\n }\n return `${this.it(propName)} = ${propName}`\n }\n\n construct(indent: string, type: IType) {\n if (type instanceof EnumType) return ''\n indent = this.bumper(indent)\n const bump = this.bumper(indent)\n const args: string[] = []\n const posArgs: string[] = []\n const inits: string[] = []\n const posInits: string[] = []\n const props = this.typeProperties(type)\n props.forEach((prop) => {\n const propName = this.reserve(prop.name)\n args.push(this.declareConstructorArg('', prop))\n posArgs.push(this.declarePositionalArg('', prop))\n inits.push(`${bump}${this.initProp(prop)}`)\n posInits.push(`${propName}: ${propName}`)\n })\n const namedInit =\n `${indent}public init(` +\n `${args.join(this.argDelimiter)}) {\\n` +\n inits.join('\\n') +\n `\\n${indent}}`\n let posInit = ''\n if (props.some((p) => p.required)) {\n posInit =\n `\\n${indent}public init(` +\n `${posArgs.join(this.argDelimiter)}) {\\n` +\n `${bump}${this.it('init')}(${posInits.join(', ')})` +\n `\\n${indent}}\\n`\n }\n return `\\n${namedInit}\\n${posInit}`\n }\n\n declarePositionalArg(indent: string, property: IProperty) {\n const mappedType = this.typeMap(property.type)\n let propType: string\n let line = '_ '\n if (property.required) {\n propType = mappedType.name\n } else {\n line = ''\n propType = `${mappedType.name}? = ${this.nullStr}`\n }\n const propName = this.reserve(property.name)\n return `${indent}${line}${propName}: ${propType}`\n }\n\n declareConstructorArg(indent: string, property: IProperty) {\n const mappedType = this.typeMap(property.type)\n let propType: string\n if (property.required) {\n propType = mappedType.name\n } else {\n propType = `${mappedType.name}? = ${this.nullStr}`\n }\n const propName = this.reserve(property.name)\n return `${indent}${propName}: ${propType}`\n }\n\n methodHeaderDeclaration(indent: string, method: IMethod, streamer = false) {\n const type = this.typeMap(method.type)\n const resultType = streamer ? 'Data' : type.name\n const returnType =\n type.name === 'Void' ? 'Voidable' : `SDKResponse<${resultType}, SDKError>`\n const head = method.description?.trim()\n let headComment =\n (head ? `${head}\\n\\n` : '') +\n `${method.httpMethod} ${method.endpoint} -> ${type.name}`\n let fragment\n const requestType = this.requestTypeName(method)\n const bump = indent + this.indentStr\n\n if (requestType) {\n // use the request type that will be generated in models.ts\n fragment = `request: I${requestType}`\n } else {\n const params: string[] = []\n const args = method.allParams // get the params in signature order\n if (args && args.length > 0)\n args.forEach((p) => params.push(this.declareParameter(bump, method, p)))\n fragment =\n params.length > 0 ? `\\n${params.join(this.paramDelimiter)}` : ''\n }\n if (method.responseIsBoth()) {\n headComment += `\\n\\n**Note**: Binary content may be returned by this method.`\n } else if (method.responseIsBinary()) {\n headComment += `\\n\\n**Note**: Binary content is returned by this method.\\n`\n }\n const header =\n this.commentHeader(indent, headComment) +\n `${indent}public func ${method.name}(`\n\n return (\n header +\n fragment +\n `${\n fragment ? ',' : ''\n }\\n${bump}options: ITransportSettings? = nil\\n${indent}) -> ${returnType} {\\n`\n )\n }\n\n methodSignature(indent: string, method: IMethod) {\n return this.methodHeaderDeclaration(indent, method, false)\n }\n\n encodePathParams(indent: string, method: IMethod) {\n let encodings = ''\n if (method.pathParams.length > 0) {\n for (const param of method.pathParams) {\n // For swift, just encode all path params because of awkward variable renames\n encodings += `${indent}let path_${param.name} = encodeParam(${param.name})\\n`\n }\n }\n return encodings\n }\n\n declareMethod(indent: string, method: IMethod) {\n const bump = this.bumper(indent)\n return (\n this.methodSignature(indent, method) +\n this.encodePathParams(bump, method) +\n this.httpCall(bump, method) +\n `\\n${indent}}`\n )\n }\n\n streamerSignature(indent: string, method: IMethod) {\n return this.methodHeaderDeclaration(indent, method, true)\n }\n\n declareStreamer(indent: string, method: IMethod) {\n const bump = this.bumper(indent)\n return (\n this.streamerSignature(indent, method) +\n this.encodePathParams(bump, method) +\n this.streamCall(bump, method) +\n `\\n${indent}}`\n )\n }\n\n codingKeys(indent: string, type: IType) {\n let special = false\n\n const keys = Object.values(type.properties).map((p) => {\n let name = this.reserve(p.name)\n let alias = ''\n const useIt = this.useAnyString(p) || this.useAnyInt(p)\n if (useIt) {\n name = this.privy(name)\n special = true\n alias = p.jsonName\n } else if (p.hasSpecialNeeds) {\n special = true\n alias = p.jsonName\n }\n return name + (alias ? ` = \"${alias}\"` : '')\n })\n\n if (!special) return ''\n const bump = this.bumper(indent)\n const bump2 = this.bumper(bump)\n const cases = keys.join(`\\n${bump2}case `)\n\n return (\n `\\n${bump}private enum CodingKeys : String, CodingKey {` +\n `\\n${bump2}case ${cases}` +\n `\\n${bump}}\\n`\n )\n }\n\n // declareType(indent: string, type: IType): string {\n // return super.declareType(this.bumper(indent), type)\n // }\n declareEnumValue(indent: string, value: EnumValueType) {\n const quote = typeof value === 'string' ? this.codeQuote : ''\n return `${indent}case ${mayQuote(value)} = ${quote}${value}${quote}`\n }\n\n typeSignature(indent: string, type: IType) {\n const recursive = type.isRecursive()\n let typeName = recursive ? 'class' : 'struct'\n const access = recursive ? 'open' : 'public'\n let baseClass = 'SDKModel'\n const isEnum = type instanceof EnumType\n if (isEnum) {\n typeName = 'enum'\n const num = type as EnumType\n const mapped = this.typeMap(num.elementType)\n baseClass = `${mapped.name}, Codable`\n }\n\n const keys = this.codingKeys(indent, type)\n\n const needClass = recursive\n ? '\\nRecursive type references must use Class instead of Struct'\n : ''\n const mapped = this.typeMap(type)\n return (\n this.commentHeader(indent, type.description + needClass) +\n `${indent}${access} ${typeName} ${mapped.name}: ${baseClass} {\\n${keys}`\n )\n }\n\n errorResponses(_indent: string, _method: IMethod) {\n // const results: string[] = method.errorResponses\n // .map(r => `${r.type.name}`)\n // return results.join(' | ')\n // TODO figure out how to express Union error type responses\n return 'SDKError'\n }\n\n httpPath(path: string, prefix?: string) {\n prefix = prefix || ''\n if (path.indexOf('{') >= 0) {\n let tweak = path.replace(/{/gi, '\\\\(path_' + prefix)\n tweak = tweak.replace(/}/gi, ')')\n return `\"${tweak}\"`\n }\n return `\"${path}\"`\n }\n\n argGroup(indent: string, args: Arg[], prefix?: string) {\n if (!args || args.length === 0) return this.nullStr\n const hash: string[] = []\n for (const arg of args) {\n if (prefix) {\n hash.push(`\"${arg}\": ${prefix}${arg}`)\n } else {\n hash.push(`\"${arg}\": ${arg}`)\n }\n }\n return `\\n${indent}[${hash.join(this.argDelimiter)}]`\n }\n\n queryGroup(indent: string, method: IMethod, prefix?: string) {\n const params = method.getParams('query')\n if (!params || params.length === 0) return this.nullStr\n const hash: string[] = []\n for (const param of params) {\n const arg = this.asAny(param)\n if (prefix) {\n hash.push(`\"${param.name}\": ${prefix}${arg}`)\n } else {\n hash.push(`\"${param.name}\": ${arg}`)\n }\n }\n return `\\n${indent}[${hash.join(this.argDelimiter)}]`\n }\n\n asAny(param: IParameter): Arg {\n let castIt\n if (param.type.elementType) {\n castIt = true\n } else {\n const mapped = this.typeMap(param.type)\n switch (mapped.name.toLowerCase()) {\n case 'date':\n case 'datetime': // case 'url': case 'uri':\n case 'object':\n case 'bool':\n castIt = true\n break\n default:\n castIt = false\n break\n }\n }\n return param.name + (castIt ? ' as Any?' : '')\n }\n\n argList(indent: string, args: Arg[], prefix?: string) {\n prefix = prefix || ''\n return args && args.length !== 0\n ? `\\n${indent}${prefix}${args.join(this.argDelimiter + prefix)}`\n : this.nullStr\n }\n\n /**\n * this is a builder function to produce arguments with optional null place holders but no extra required optional arguments\n * @param {string} current accumulator\n * @param {string} args names of parameters\n * @returns {string} accumulated argument list\n */\n argFill(current: string, args: string) {\n if (!current && args.trim() === this.nullStr) {\n // Don't append trailing optional arguments if none have been set yet\n return ''\n }\n return `${args}${current ? this.argDelimiter : ''}${current}`\n }\n\n /**\n * build the http argument list from back to front, so trailing undefined arguments\n * can be omitted. Path arguments are resolved as part of the path parameter to general\n * purpose API method call\n * e.g.\n * {queryArgs...}, bodyArg, {headerArgs...}, {cookieArgs...}\n * {queryArgs...}, null, null, {cookieArgs...}\n * null, bodyArg\n * {queryArgs...}\n * @param {string} indent\n * @param {IMethod} method\n * @returns {string}\n */\n httpArgs(indent: string, method: IMethod) {\n const request = this.useRequest(method) ? 'request.' : ''\n // add options at the end of the request calls. this will cause all other arguments to be\n // filled in but there's no way to avoid this for passing in the last optional parameter.\n // Fortunately, this code bloat is minimal and also hidden from the consumer.\n let result = this.argFill('', 'options')\n // let result = this.argFill('', this.argGroup(indent, method.cookieArgs, request))\n // result = this.argFill(result, this.argGroup(indent, method.headerArgs, request))\n result = this.argFill(\n result,\n method.bodyArg\n ? `try! self.encode(${request}${method.bodyArg})`\n : this.nullStr\n )\n result = this.argFill(result, this.queryGroup(indent, method, request))\n return result\n }\n\n httpCall(indent: string, method: IMethod) {\n const request = this.useRequest(method) ? 'request.' : ''\n const type = this.typeMap(method.type)\n const bump = this.bumper(indent)\n const args = this.httpArgs(bump, method)\n const errors = this.errorResponses(indent, method)\n return `${indent}let result: SDKResponse<${\n type.name\n }, ${errors}> = ${this.it(method.httpMethod.toLowerCase())}(${this.httpPath(\n method.endpoint,\n request\n )}${args ? ', ' + args : ''})\n${indent}return result`\n }\n\n streamCall(indent: string, method: IMethod) {\n const request = this.useRequest(method) ? 'request.' : ''\n // const type = this.typeMap(method.type)\n const bump = indent + this.indentStr\n const args = this.httpArgs(bump, method)\n const errors = this.errorResponses(indent, method)\n return `${indent}let result: SDKResponse<Data, ${errors}> = ${this.it(\n method.httpMethod.toLowerCase()\n )}(${this.httpPath(method.endpoint, request)}${args ? ', ' + args : ''})\n${indent}return result`\n }\n\n summary(indent: string, text: string | undefined) {\n return this.commentHeader(indent, text)\n }\n\n // TODO avoid duplicate code\n typeNames(countError = true) {\n const names: string[] = []\n if (!this.api) return names\n if (countError) {\n this.api.types.Error.refCount++\n } else {\n this.api.types.Error.refCount = 0\n }\n const types = this.api.types\n Object.values(types)\n .filter((type) => type.refCount > 0 && !type.intrinsic)\n .forEach((type) => names.push(`I${type.name}`))\n // TODO import default constants if necessary\n // Object.values(types)\n // .filter(type => type instanceof RequestType)\n // .forEach(type => names.push(`${strDefault}${type.name.substring(strRequest.length)}`))\n return names\n }\n\n typeMap(type: IType): IMappedType {\n super.typeMap(type)\n // const ns = `api${this.apiRef}.`\n // const ns = `Looker.`\n const ns = 'Lk'\n\n const swiftTypes: Record<string, IMappedType> = {\n Error: { default: '', name: `${ns}Error` },\n Group: { default: '', name: `${ns}Group` },\n Locale: { default: '', name: `${ns}Locale` },\n any: { default: this.nullStr, name: 'AnyCodable' },\n boolean: { default: this.nullStr, name: 'Bool' },\n byte: { default: this.nullStr, name: 'binary' },\n date: { default: this.nullStr, name: 'Date' },\n datetime: { default: this.nullStr, name: 'Date' },\n double: { default: this.nullStr, name: 'Double' },\n float: { default: this.nullStr, name: 'Float' },\n int32: { default: this.nullStr, name: 'Int32' },\n int64: { default: this.nullStr, name: 'Int64' },\n integer: { default: this.nullStr, name: 'Int' },\n number: { default: this.nullStr, name: 'Double' },\n object: { default: this.nullStr, name: 'Any' },\n password: { default: this.nullStr, name: 'Password' },\n string: { default: this.nullStr, name: 'String' },\n uri: { default: this.nullStr, name: 'URI' },\n url: { default: this.nullStr, name: 'URL' },\n void: { default: '', name: 'Voidable' },\n }\n\n if (type.elementType) {\n // This is a structure with nested types\n const map = this.typeMap(type.elementType)\n switch (type.className) {\n case 'ArrayType':\n return { default: '[]', name: `[${map.name}]` }\n case 'HashType': {\n const mapName =\n type.elementType.name === 'string' ? 'AnyCodable' : map.name // TODO fix bad API spec, like MergeQuery vis_config\n\n return { default: 'nil', name: `StringDictionary<${mapName}>` }\n }\n case 'DelimArrayType':\n return { default: 'nil', name: `DelimArray<${map.name}>` }\n case 'EnumType':\n return { default: 'nil', name: type.name }\n }\n throw new Error(`Don't know how to handle: ${JSON.stringify(type)}`)\n }\n\n if (type.name) {\n return swiftTypes[type.name] || { default: '', name: `${type.name}` } // No null default for complex types\n } else {\n throw new Error('Cannot output a nameless type.')\n }\n }\n}\n"],"file":"swift.gen.js"}
package/lib/go.gen.d.ts CHANGED
@@ -23,6 +23,7 @@ export declare class GoGen extends CodeGen {
23
23
  needsRequestTypes: boolean;
24
24
  keywords: Set<string>;
25
25
  constructor(api: ApiModel, versions?: IVersionInfo | undefined);
26
+ supportsMultiApi(): boolean;
26
27
  reserve(name: string): string;
27
28
  commentHeader(indent: string, text: string | undefined): string;
28
29
  comment(indent: string, description: string): string;
package/lib/go.gen.js CHANGED
@@ -82,6 +82,10 @@ class GoGen extends _codeGen.CodeGen {
82
82
  this.apiVersion = this.packageName;
83
83
  }
84
84
 
85
+ supportsMultiApi() {
86
+ return false;
87
+ }
88
+
85
89
  reserve(name) {
86
90
  if (this.keywords.has(name)) {
87
91
  return "".concat(name, "0");
@@ -250,11 +254,6 @@ class GoGen extends _codeGen.CodeGen {
250
254
 
251
255
  modelsPrologue(_indent) {
252
256
  var goImport = "\nimport (\n \"github.com/looker-open-source/sdk-codegen/go/rtl\"\n \"time\"\n)";
253
-
254
- if (this.packageName === 'v3') {
255
- goImport = "\nimport (\n \"github.com/looker-open-source/sdk-codegen/go/rtl\"\n \"net/url\"\n \"time\"\n)";
256
- }
257
-
258
257
  return "\n// ".concat(this.warnEditing(), "\n\npackage ").concat(this.packageName, "\n").concat(goImport, "\n");
259
258
  }
260
259
 
@@ -328,7 +327,7 @@ class GoGen extends _codeGen.CodeGen {
328
327
  },
329
328
  object: {
330
329
  default: mt,
331
- name: 'struct'
330
+ name: 'interface{}'
332
331
  },
333
332
  password: {
334
333
  default: mt,