@looker/sdk-codegen 21.10.3 → 21.11.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.
package/CHANGELOG.md CHANGED
@@ -89,6 +89,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
89
89
  * devDependencies
90
90
  * @looker/sdk-codegen-utils bumped from 21.0.27 to 21.0.28
91
91
 
92
+ ### Dependencies
93
+
94
+ * The following workspace dependencies were updated
95
+ * devDependencies
96
+ * @looker/sdk-codegen-utils bumped from 21.0.28 to 21.0.29
97
+
98
+ ## [21.11.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-v21.10.4...sdk-codegen-v21.11.0) (2026-03-11)
99
+
100
+
101
+ ### Features
102
+
103
+ * **api-explorer:** render and format form-urlencoded queries as body parameters ([#1648](https://github.com/looker-open-source/sdk-codegen/issues/1648)) ([46eb5c9](https://github.com/looker-open-source/sdk-codegen/commit/46eb5c968098417fe3cfb6cce3adf8bffd21d663))
104
+ * refactor SDK generator for form-urlencoded params ([#1647](https://github.com/looker-open-source/sdk-codegen/issues/1647)) ([2197c17](https://github.com/looker-open-source/sdk-codegen/commit/2197c17df142df2de748aaddcdc4815d16724bff)), closes [#1646](https://github.com/looker-open-source/sdk-codegen/issues/1646)
105
+
106
+
107
+ ### Dependencies
108
+
109
+ * The following workspace dependencies were updated
110
+ * devDependencies
111
+ * @looker/sdk-codegen-utils bumped from 21.0.29 to 21.0.30
112
+
92
113
  ## [21.10.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-v21.9.13...sdk-codegen-v21.10.0) (2025-09-17)
93
114
 
94
115
 
package/lib/codeGen.d.ts CHANGED
@@ -220,6 +220,10 @@ export declare abstract class CodeGen implements ICodeGen {
220
220
  argList(indent: string, args: Arg[], prefix?: string): string;
221
221
  argFill(current: string, args: string): string;
222
222
  httpPath(path: string, _prefix?: string): string;
223
+ assignFormArgs(method: IMethod, body: string, query: string): {
224
+ body: string;
225
+ query: string;
226
+ };
223
227
  httpArgs(indent: string, method: IMethod): string;
224
228
  errorResponses(_indent: string, method: IMethod): string;
225
229
  httpCall(indent: string, method: IMethod): string;
package/lib/codeGen.js CHANGED
@@ -402,11 +402,28 @@ class CodeGen {
402
402
  httpPath(path, _prefix) {
403
403
  return path;
404
404
  }
405
+ assignFormArgs(method, body, query) {
406
+ if (method.isFormUrlEncoded) {
407
+ return {
408
+ body: query,
409
+ query: this.nullStr
410
+ };
411
+ }
412
+ return {
413
+ body,
414
+ query
415
+ };
416
+ }
405
417
  httpArgs(indent, method) {
406
418
  var result = this.argFill('', this.argGroup(indent, method.cookieArgs));
407
419
  result = this.argFill(result, this.argGroup(indent, method.headerArgs));
408
- result = this.argFill(result, method.bodyArg ? method.bodyArg : this.nullStr);
409
- result = this.argFill(result, this.argGroup(indent, method.queryArgs));
420
+ var body = method.bodyArg ? method.bodyArg : this.nullStr;
421
+ var query = this.argGroup(indent, method.queryArgs);
422
+ var formArgs = this.assignFormArgs(method, body, query);
423
+ body = formArgs.body;
424
+ query = formArgs.query;
425
+ result = this.argFill(result, body);
426
+ result = this.argFill(result, query);
410
427
  return result;
411
428
  }
412
429
  errorResponses(_indent, method) {
@@ -1 +1 @@
1
- {"version":3,"file":"codeGen.js","names":["_sdkRtl","require","_sdkModels","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","commentBlock","exports","text","indent","arguments","length","undefined","commentStr","trim","indentation","lines","split","map","x","concat","trimRight","join","trimInputs","inputs","keepBody","depth","isEmpty","Array","isArray","keys","result","DelimArray","values","forEach","v","push","entries","_ref","trimmed","CodeGen","constructor","api","versions","packageName","toUpperCase","_","toString","spec","apiVersion","version","apiPath","apiRef","replace","supportsMultiApi","packagePath","reset","functionsPrologue","_indent","functionsEpilogue","hooksPrologue","hooksEpilogue","mocksPrologue","mocksEpilogue","interfacesPrologue","reserve","name","streamsPrologue","quote","codeQuote","declareEnumValue","mayQuote","functionSignature","_method","declareFunction","declareHook","declareMock","declareInterface","argIndent","args","opener","closer","bump","bumper","open","close","delim","argDelimiter","argValue","arg","val","argType","writeableType","type","mt","typeMap","argVal","asVal","ArrayType","arrayValue","HashType","hashValue","intrinsic","assignType","defaultAsVal","assignParams","method","hasComplexArg","requestType","useNamedArguments","getRequestType","indentStr","params","allParams","p","argSet","sep","exp","props","properties","argSetSep","useModelClassForTypes","typeOpen","nl","joined","typeClose","ra","et","elementType","arrayOpen","arrayClose","arrayValDelimiter","anyValue","Type","vals","_ref2","hashKeyQuote","hashSetSep","hashOpen","hashClose","paramMappedType","param","location","strBody","makeTheCall","_inputs","commentHeader","beginRegion","description","endRegion","warnEditing","streamerSignature","declareStreamer","initArg","_property","construct","_type","describeProperty","property","readOnly","sdkFileName","baseFileName","fileName","sdkPath","base","codePath","fileExtension","comment","noComment","_commentStr","declareParameters","items","declareParameter","paramDelimiter","declareConstructorArg","nullable","nullStr","it","itself","typeProperties","declareType","propertyValues","EnumType","num","enumDelimiter","prop","declareProperty","propDelimiter","_unused","Error","JSON","stringify","typeSignature","endTypeStr","argGroup","prefix","argList","argFill","current","httpPath","path","_prefix","httpArgs","cookieArgs","headerArgs","bodyArg","queryArgs","errorResponses","results","httpCall","errors","transport","httpMethod","toLowerCase","endpoint","streamCall","useRequest","useNamedParameters","eligibleForRequestType","requestTypeName","request","refCount","addType","writer","mayGetWriteableType","typeNames","_countError","types","filter","default"],"sources":["../src/codeGen.ts"],"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 { ArgValues } from '@looker/sdk-rtl';\nimport { DelimArray } from '@looker/sdk-rtl';\nimport type {\n ApiModel,\n Arg,\n EnumValueType,\n IMethod,\n IParameter,\n IProperty,\n IType,\n} from './sdkModels';\nimport {\n ArrayType,\n EnumType,\n HashType,\n Type,\n mayQuote,\n strBody,\n} from './sdkModels';\nimport type { SpecItem } from './specConverter';\n\nexport const commentBlock = (\n text: string | undefined,\n indent = '',\n commentStr = '// '\n) => {\n if (!text || !text.trim()) return '';\n const indentation = indent + commentStr;\n const lines = text.split('\\n').map(x => `${indentation}${x}`.trimRight());\n return lines.join('\\n');\n};\n\n/** Version and spec references for the generator */\nexport interface IVersionInfo {\n /** Server release version (Not the API version) */\n lookerVersion: string;\n /** API specification for generating the SDK */\n spec: SpecItem;\n}\n\n/**\n * Removes all empty input values\n * @param inputs current inputs\n * @param keepBody true to send body as is. false trims body values (default)\n * @param depth recursion depth\n * @returns inputs with all \"empty\" values removed so the key no longer exists\n */\nexport const trimInputs = (inputs: any, keepBody = false, depth = 0): any => {\n function isEmpty(value: any, depth: number): boolean {\n if (Array.isArray(value)) return value.length === 0;\n if (value === undefined) return true;\n if (value === null) return true;\n if (value === '') return true;\n if (value instanceof Object) {\n if (depth === 1) {\n // Top level empty objects are kept. i.e { one: {} } is left unchanged.\n return false;\n }\n return Object.keys(value).length === 0;\n }\n return false;\n }\n\n let result: any;\n if (inputs instanceof DelimArray) return inputs;\n if (Array.isArray(inputs)) {\n result = [];\n Object.values(inputs).forEach((v: any) =>\n result.push(trimInputs(v, keepBody, depth + 1))\n );\n } else if (inputs instanceof Object) {\n if (keepBody && depth > 0) {\n result = inputs;\n } else {\n result = {};\n Object.entries(inputs).forEach(([key, value]) => {\n const trimmed = trimInputs(value, keepBody, depth + 1);\n if (!isEmpty(trimmed, depth + 1)) {\n result[key] = trimmed;\n }\n });\n }\n } else {\n // Scalar or preserved \"body\" value\n result = inputs;\n }\n return result;\n};\n\n/**\n * Function pattern for creating source code assignment expressions\n */\nexport type CodeAssignment = (indent: string, value: any) => string;\n\n/** Language-specific type mapping */\nexport interface IMappedType {\n /** language's name for the type */\n name: string;\n /** default value expression */\n default: string;\n /** assignment expression of value */\n asVal?: CodeAssignment;\n /** expression to use as the type's optional default */\n optional?: string;\n}\n\nexport interface ICodeGen {\n /**\n * root path for generated source code files\n * e.g. 'python' for Python\n */\n codePath: string;\n\n /**\n * folder for the Looker SDK reference\n * e.g. 'looker_sdk' for Python. All python source would end up under `python/looker_sdk`\n */\n packagePath: string;\n\n /**\n * Name of the SDK package\n * e.g. 'Looker40SDK' for API 4.0. This package name is currently determined by the base `CodeGen` class\n */\n packageName: string;\n\n /**\n * relative folder path for sdk file generation\n * e.g. 'sdk` for python\n */\n sdkPath: string;\n\n /** use special handling for a JSON value that can be a string or a number. Introduced for Swift. */\n anyString: boolean;\n\n /** current version of the Api being generated */\n apiVersion: string;\n\n /**\n * beginning name pattern for all environment variables\n * e.g. LOOKERSDK\n */\n environmentPrefix: string;\n\n /**\n * name of api request instance variable\n * e.g. _rtl for Python, transport for TypeScript\n */\n transport: string;\n\n /** reference to self. e.g self, this, it, etc. */\n itself: string;\n\n /** file extension for generated files */\n fileExtension: string;\n\n /**\n * comment string\n * e.g. Python=# C#=// TypeScript=//\n */\n commentStr: string;\n\n /** Generate comments in source code? */\n noComment: boolean;\n\n /**\n * string representation of null value\n * e.g. Python None, C# null, Delphi nil\n */\n nullStr: string;\n\n /** indentation string. Typically two spaces ' ' */\n indentStr: string;\n\n /** end type string. For C# and TypeScript, usually '}\\n' */\n endTypeStr: string;\n\n /** argument separator string. Typically ', ' */\n argDelimiter: string;\n\n /** type properties/args expression separator. E.g ': ' for TypeScript */\n argSetSep: string;\n\n /** hash type properties/args expression separator. E.g ': ' for TypeScript */\n hashSetSep: string;\n\n /** hash key quotes E.g '' for TypeScript and '\"' for Python */\n hashKeyQuote: string;\n\n /** parameter delimiter. Typically \",\\n\" */\n paramDelimiter: string;\n\n /** property delimiter. Typically, \"\\n\" or \",\\n\" */\n propDelimiter: string;\n\n /** enum value delimiter. Typically, \",\\n\" */\n enumDelimiter: string;\n\n /** quote character/string to use for quoted strings. Typically, '\"' or \"'\" */\n codeQuote: string;\n\n /**\n * Does this language support named parameters with default values? Otherwise\n * request types for sdk method signatures may be generated:\n * see IMethod.eligibleForRequestType\n */\n useNamedParameters: boolean;\n\n /** Use named/keyword arguments in calling syntax */\n useNamedArguments: boolean;\n\n /** Mainly for TypeScript SDK tree-shaking support. True produces slices.ext */\n useSlices: boolean;\n\n /** Mainly for TypeScript SDK tree-shaking support. True produces funcs.ext */\n useFunctions: boolean;\n\n /** Does this language implement interfaces? True produces methodInterfaces.ext */\n useInterfaces: boolean;\n\n /** Does this language have streaming methods? */\n willItStream: boolean;\n\n /** versions info used for generating the SDK */\n versions?: IVersionInfo;\n\n /** array open string */\n arrayOpen: string;\n\n /** array close string */\n arrayClose: string;\n\n /** hash open string */\n hashOpen: string;\n\n /** hash close string */\n hashClose: string;\n\n /** type open string */\n typeOpen: string;\n\n /** type close string */\n typeClose: string;\n\n /** Do type declarations use a class definition */\n useModelClassForTypes: boolean;\n\n /**\n * Resets the generator for a new emission\n */\n reset(): void;\n\n /**\n * Quote a string value for the language\n * @param value to quote\n */\n quote(value: any): string;\n\n /**\n * Returns true if the SDK supports multiple API versions of models\n * @returns True if multi-API is supported\n */\n supportsMultiApi(): boolean;\n\n /**\n * Returns the name of the RequestType if this language AND method require it.\n * Otherwise return empty string.\n * @param {IMethod} method\n * @returns {string}\n */\n requestTypeName(method: IMethod): string;\n\n /**\n * Formats argument assignment expressions for source code\n * @param indent code indentation\n * @param args argument assignments as string expressions\n * @param opener structure opener. e.g. { for hash, [ for array\n * @param closer structure closer. e.g. } for hash, ] for array\n */\n argIndent(\n indent: string,\n args: string[],\n opener: string,\n closer: string\n ): string;\n\n /**\n * Generate the assignment value of an argument for this language\n * @param indent code indentation\n * @param arg parameter or property to receive value\n * @param inputs values to find assignment in\n */\n argValue(\n indent: string,\n arg: IParameter | IProperty,\n inputs: ArgValues\n ): string;\n\n /**\n * Maps input values into type\n * @param indent starting indent level\n * @param type that receives assignments\n * @param inputs to assign to type\n */\n assignType(indent: string, type: IType, inputs: ArgValues): string;\n\n /**\n * Generate assignment statement for parameters of a method\n * @param method to assign values to\n * @param inputs to assign to method parameters\n */\n assignParams(method: IMethod, inputs: ArgValues): string;\n\n /**\n * Argument value setter code expression\n * @param name of argument/property\n * @param sep spacing to separate value. Could be newline or single space or something else\n * @param exp expression (as valid code fragment) to assign\n *\n * @example `foo: bar` for TypeScript where `name` is \"foo\", `sep` is \": \" and `exp` is \"bar\"\n */\n argSet(name: string, sep: string, exp: string): string;\n\n /**\n * Converts val to an array value expression\n * @param indent code indentation\n * @param type of array to create\n * @param val value(s) to convert to a code assignment\n */\n arrayValue(indent: string, type: IType, val: any): string;\n\n /**\n * Converts any value to its code expression\n * @param indent code indentation\n * @param val value(s) to convert to a code assignment\n */\n anyValue(indent: string, val: any): string;\n\n /** Increase indent */\n bumper(indent: string): string;\n\n /**\n * Converts val to a dictionary/hash code expression\n * @param indent code indentation\n * @param val value(s) to convert to a code assignment\n */\n hashValue(indent: string, val: any): any;\n\n /**\n * Generate the SDK calling syntax for the method with the provided inputs\n * @param method to convert to SDK call\n * @param inputs to assign to parameters of the method\n */\n makeTheCall(method: IMethod, inputs: ArgValues): string;\n\n /**\n * Returns the WriteType if the passed type has any readOnly properties or types\n *\n * If the writeable type exists, a reference to it is added to the method\n * @param {IType} type\n * @param method to track writeable type conversion\n * @returns {IType | undefined}\n */\n writeableType(type: IType, method?: IMethod): IType | undefined;\n\n /**\n * standard code to insert at the top of the generated \"methods\" file(s)\n * @param indent code indentation\n */\n methodsPrologue(indent: string): string;\n\n /**\n * standard code to insert at the top of the generated \"funcs\" file(s)\n * @param indent code indentation\n */\n functionsPrologue(indent: string): string;\n\n /**\n * standard code to insert at the top of the generated \"hooks\" file(s)\n * @param indent code indentation\n */\n hooksPrologue(indent: string): string;\n\n /**\n * standard code to insert at the top of the generated \"mocks\" file(s)\n * @param indent code indentation\n */\n mocksPrologue(indent: string): string;\n\n /**\n * standard code to insert at the top of the generated \"methodsInterface\" file(s)\n * @param indent code indentation\n */\n interfacesPrologue(indent: string): string;\n\n /**\n * standard code to append to the bottom of the generated \"methods\" file(s)\n * @param indent code indentation\n */\n methodsEpilogue(indent: string): string;\n\n /**\n * standard code to append to the bottom of the generated \"funcs\" file(s)\n * @param indent code indentation\n */\n functionsEpilogue(indent: string): string;\n\n /**\n * generated code to append to the bottom of the generated \"hooks\" file(s)\n * @param indent code indentation\n */\n hooksEpilogue(indent: string): string;\n\n /**\n * generated code to append to the bottom of the generated \"mocks\" file(s)\n * @param indent code indentation\n */\n mocksEpilogue(indent: string): string;\n\n /**\n * standard code to insert at the top of the generated \"streams\" file(s)\n * @param indent code indentation\n */\n streamsPrologue(indent: string): string;\n\n /**\n * aliases or escapes names that are the language's reserved words, or must be treated specially, like hyphenate names\n * @param name symbol name to reserve\n * @returns either the original name, or the transformed \"reserved\" version of it\n */\n reserve(name: string): string;\n\n /**\n * standard code to insert at the top of the generated \"models\" file(s)\n * @param {string} indent code indentation\n * @returns {string} generated code\n */\n modelsPrologue(indent: string): string;\n\n /**\n * standard code to append to the bottom of the generated \"models\" file(s)\n * @param {string} indent code indentation\n * @returns {string} generated code\n */\n modelsEpilogue(indent: string): string;\n\n /**\n * Get the name of an SDK file complete with API version\n * @param {string} baseFileName e.g. \"methods\" or \"models\"\n * @returns {string} fully specified, API-version-specific file name\n */\n sdkFileName(baseFileName: string): string;\n\n /**\n * provide the name for a file with the appropriate language code extension\n * @param {string} base eg \"methods\" or \"models\"\n * @returns {string} full sdk file name complete with extension\n */\n fileName(base: string): string;\n\n /**\n * generate an optional comment header if the comment is not empty\n * @param indent code indentation\n * @param text of comment, can be multi-line\n * @param commentStr comment character for multi-line comments\n * @returns comment (or not)\n */\n commentHeader(\n indent: string,\n text: string | undefined,\n commentStr?: string\n ): string;\n\n /**\n * group argument names together\n * e.g.\n * [ row_size, page_offset ]\n * @param {string} indent code indentation\n * @param {Arg[]} args list of argument names\n * @param {string} prefix \"namespace\" for argument names\n * @returns {string} source code\n */\n argGroup(indent: string, args: Arg[], prefix?: string): string;\n\n /**\n * list arguments by name\n * e.g.\n * row_size, page_offset\n * @param {string} indent code indentation\n * @param {Arg[]} args list of argument names\n * @param {string} prefix \"namespace\" for argument names\n * @returns {string} source code\n */\n argList(indent: string, args: Arg[], prefix?: string): string;\n\n /**\n * generate a comment block\n * e.g.\n * # this is a\n * # multi-line comment block\n * @param indent code indentation\n * @param description as comment\n * @returns comment block\n */\n comment(indent: string, description: string): string;\n\n /**\n * Generate a #region comment equivalent for the language\n * @param indent code indentation\n * @param description as comment\n * @returns region comment\n */\n beginRegion(indent: string, description: string): string;\n\n /**\n * Generate an #endregion comment equivalent for the language\n * @param indent code indentation\n * @param description as comment\n * @returns region comment\n */\n endRegion(indent: string, description: string): string;\n\n /**\n * generates the method signature including parameter list and return type.\n * @param indent code indentation\n * @param method to declare\n */\n methodSignature(indent: string, method: IMethod): string;\n\n /**\n * generates the function signature including parameter list and return type.\n * @param indent code indentation\n * @param method to declare\n */\n functionSignature(indent: string, method: IMethod): string;\n\n /**\n * convert endpoint pattern to platform-specific string template\n * @param {string} path endpoint path template\n * @param {string} prefix namespace prefix\n * @returns {string} string template\n */\n httpPath(path: string, prefix?: string): string;\n\n /**\n * generate a call to the http API abstraction\n * includes http method, path, body, query, headers, cookie arguments\n * @param {string} indent code indentation\n * @param {IMethod} method to call\n * @returns {string} source code\n */\n httpCall(indent: string, method: IMethod): string;\n\n /**\n * generate a call to the stream API abstraction\n * includes http method, path, body, query, headers, cookie arguments\n * @param {string} indent code indentation\n * @param {IMethod} method to call\n * @returns {string} source code\n */\n streamCall(indent: string, method: IMethod): string;\n\n /**\n * generates the type declaration signature for the start of the type definition\n * @param {string} indent code indentation\n * @param {IType} type to declare\n * @returns {string} source code\n */\n typeSignature(indent: string, type: IType): string;\n\n /**\n * generates summary text\n * e.g, for Python:\n * '''This is the method summary'''\n * @param {string} indent code indentation\n * @param {string} text comment\n * @returns {string} source code\n */\n summary(indent: string, text: string): string;\n\n /**\n *\n * produces the declaration block for a parameter\n * e.g.\n * # ID of the query to run\n * query_id: str\n *\n * and\n *\n * # size description of parameter\n * row_limit: int = None\n * @param {string} indent code indentation\n * @param {IMethod} method method containing the parameter\n * @param {IParameter} param parameter to declare\n * @returns {string} the parameter declaration\n */\n declareParameter(indent: string, method: IMethod, param: IParameter): string;\n\n /**\n * Handles the encoding call for path parameters within method declarations\n * @param {string} indent code indentation\n * @param {IMethod} method structure of method to declare\n * @returns {string} the resolved API endpoint path\n */\n encodePathParams(indent: string, method: IMethod): string;\n\n /**\n * generates the entire method\n * @param indent code indentation\n * @param method structure of method to declare\n * @returns the declaration code for the method\n */\n declareMethod(indent: string, method: IMethod): string;\n\n /**\n * generates the entire function\n * @param indent code indentation\n * @param method structure of method to declare\n * @returns the declaration code for the function\n */\n declareFunction(indent: string, method: IMethod): string;\n\n /**\n * declares the hook/slice for a function\n * @param indent code indentation\n * @param method structure of method to declare\n * @returns the declaration code for the hook\n */\n declareHook(indent: string, method: IMethod): string;\n\n /**\n * declares the mock handler for a method\n * @param indent code indentation\n * @param method structure of method to declare\n * @returns the declaration code for the mock method\n */\n declareMock(indent: string, method: IMethod): string;\n\n /**\n * generates the method's interface declaration\n * @param indent code indentation\n * @param method structure of method to declare\n * @returns the declaration code for the method's interface\n */\n declareInterface(indent: string, method: IMethod): string;\n\n /**\n * generates the streaming method signature including parameter list and return type.\n * @param {string} indent code indentation\n * @param {IMethod} method\n * @returns {string}\n */\n streamerSignature(indent: string, method: IMethod): string;\n\n /**\n * Generates the entire streaming method\n * @param {string} indent code indentation\n * @param {IMethod} method method to declare\n * @returns {string} source code\n */\n declareStreamer(indent: string, method: IMethod): string;\n\n /**\n * generates the list of parameters for a method signature\n * e.g.\n * # ID of the query to run\n * query_id: str,\n * # size description of parameter\n * row_limit: int = None\n * @param {string} indent code indentation\n * @param {IMethod} method containing parameters to declare\n * @returns {string} source code\n */\n declareParameters(indent: string, method: IMethod): string;\n\n /**\n * generates the syntax for a constructor argument\n * @param {string} indent code indentation\n * @param {IProperty} property of constructor\n * @returns {string} source code\n */\n declareConstructorArg(indent: string, property: IProperty): string;\n\n /**\n * produces the code for the type constructor\n * @param {string} indent code indentation\n * @param {IType} type to generate\n * @returns {string} source code\n */\n construct(indent: string, type: IType): string;\n\n /**\n * produces list of properties for declareType\n * @param {IType} type to generate\n * @returns {PropertyList} list of properties\n */\n typeProperties(type: IType): IProperty[];\n\n /**\n * generates entire type declaration\n * @param {string} indent code indentation\n * @param {IType} type to generate\n * @returns {string} source code\n */\n declareType(indent: string, type: IType): string;\n\n /**\n * generates a textual description for the property's comment header\n * @param {IProperty} property to describe\n * @returns {string} source code\n */\n describeProperty(property: IProperty): string;\n\n /**\n * generates type property declaration\n * @param {string} indent code indentation\n * @param {IProperty} property to declare\n * @returns {string} source code\n */\n declareProperty(indent: string, property: IProperty): string;\n\n /**\n * generates an enum value declaration\n * @param {string} indent code indentation\n * @param {EnumValueType} value to declare\n * @returns {string} source code\n */\n declareEnumValue(indent: string, value: EnumValueType): string;\n\n /**\n * if countError is false, no import reference to Error or IError should be included\n * @param {boolean} countError\n * @returns {string[]}\n */\n typeNames(countError: boolean): string[];\n\n /**\n * Type mapping for a parameter with special handling for body params\n * @param param to map\n * @param method containing param\n */\n paramMappedType(param: IParameter, method: IMethod): IMappedType;\n\n /**\n * Language-specific type conversion\n * @param {IType} type to potentially convert\n * @returns {IMappedType} converted type\n */\n typeMap(type: IType): IMappedType;\n}\n\nexport abstract class CodeGen implements ICodeGen {\n willItStream = false;\n anyString = false;\n codePath = './';\n packagePath = 'looker';\n sdkPath = 'sdk';\n packageName = 'LookerSDK';\n environmentPrefix = this.packageName.toUpperCase();\n itself = '';\n fileExtension = '.code';\n argDelimiter = ', ';\n paramDelimiter = ',\\n';\n propDelimiter = '\\n';\n enumDelimiter = ',\\n';\n codeQuote = `'`;\n useNamedParameters = true;\n useNamedArguments = true;\n useFunctions = false;\n useSlices = false;\n useInterfaces = false;\n\n // makeTheCall definitions\n argSetSep = ': ';\n hashSetSep = ': ';\n arrayOpen = '[';\n arrayClose = ']';\n hashOpen = '{';\n hashClose = '}';\n hashKeyQuote = '';\n typeOpen = '{';\n typeClose = '}';\n useModelClassForTypes = false;\n\n indentStr = ' ';\n commentStr = '// ';\n noComment = false;\n nullStr = 'null';\n endTypeStr = '';\n transport = 'rtl';\n\n apiVersion = '';\n apiRef = '';\n apiPath = '';\n\n constructor(public api: ApiModel, public versions?: IVersionInfo) {\n if (versions && versions.spec) {\n this.apiVersion = versions.spec.version;\n this.apiPath = `/${versions.spec.key}`;\n this.apiRef = versions.spec.key.replace('.', '');\n this.packageName = this.supportsMultiApi()\n ? `Looker${this.apiRef}SDK`\n : `LookerSDK`;\n this.packagePath += this.apiPath;\n }\n }\n\n /** base level reset does nothing */\n reset() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Returns true if the SDK supports multiple API versions of models\n * @returns True if multi-API is supported\n */\n supportsMultiApi() {\n // Currently, all but Swift support multiple APIs\n return true;\n }\n\n /**\n * beginning of the \"methods\" file for a language\n * @param {string} indent\n * @returns {string}\n */\n abstract methodsPrologue(indent: string): string;\n\n functionsPrologue(_indent: string): string {\n // usually, nothing to \"close\" atomic function declarations\n return '';\n }\n\n functionsEpilogue(_indent: string): string {\n return '';\n }\n\n hooksPrologue(_indent: string): string {\n return '';\n }\n\n hooksEpilogue(_indent: string): string {\n return '';\n }\n\n mocksPrologue(_indent: string): string {\n return '';\n }\n\n mocksEpilogue(_indent: string): string {\n return '';\n }\n\n interfacesPrologue(_indent: string): string {\n return '';\n }\n\n /**\n * ending of the \"methods\" file for a language\n * @param {string} indent\n * @returns {string}\n */\n abstract methodsEpilogue(indent: string): string;\n\n reserve(name: string) {\n return name;\n }\n\n streamsPrologue(_indent: string) {\n return '';\n }\n\n /**\n * beginning of the \"models\" file for a language\n * @param {string} indent\n * @returns {string}\n */\n abstract modelsPrologue(indent: string): string;\n\n /**\n * ending of the \"models\" file for a language\n * @param {string} indent\n * @returns {string}\n */\n abstract modelsEpilogue(indent: string): string;\n\n abstract declareParameter(\n indent: string,\n method: IMethod,\n param: IParameter\n ): string;\n\n /**\n * Quote a string value for the language\n * @param value to quote\n */\n quote(value: any) {\n return `${this.codeQuote}${value}${this.codeQuote}`;\n }\n\n declareEnumValue(indent: string, value: EnumValueType) {\n const quote = typeof value === 'string' ? this.codeQuote : '';\n return `${indent}${mayQuote(value)} = ${quote}${value}${quote}`;\n }\n\n abstract declareProperty(indent: string, property: IProperty): string;\n\n abstract typeSignature(indent: string, type: IType): string;\n\n abstract methodSignature(indent: string, method: IMethod): string;\n\n functionSignature(_indent: string, _method: IMethod): string {\n return '';\n }\n\n abstract declareMethod(indent: string, method: IMethod): string;\n\n declareFunction(_indent: string, _method: IMethod): string {\n return '';\n }\n\n declareHook(_indent: string, _method: IMethod): string {\n return '';\n }\n\n declareMock(_indent: string, _method: IMethod): string {\n return '';\n }\n\n declareInterface(_indent: string, _method: IMethod): string {\n return '';\n }\n\n argIndent(indent: string, args: string[], opener: string, closer: string) {\n const bump = this.bumper(indent);\n let open = opener;\n let close = closer;\n let delim = this.argDelimiter;\n if (args.length > 1) {\n open = `${opener}\\n${bump}`;\n close = `\\n${indent}${closer}`;\n delim = `${this.argDelimiter.trim()}\\n${bump}`;\n }\n return `${open}${args.join(delim)}${close}`;\n }\n\n defaultAsVal: CodeAssignment = (_, v) => v.toString();\n\n argValue(\n indent: string,\n arg: IParameter | IProperty,\n inputs: ArgValues\n ): string {\n // TODO handle required positional arguments that are not provided?\n if (!(arg.name in inputs)) return '';\n const val = inputs[arg.name];\n const argType = this.writeableType(arg.type) || arg.type;\n const mt = this.typeMap(argType);\n let argVal: string;\n if (mt.asVal) {\n argVal = mt.asVal(indent, val);\n } else if (argType instanceof ArrayType) {\n argVal = this.arrayValue(indent, argType, val);\n // } else if (argType instanceof DelimArrayType) {\n // argVal = this.delimArrayValue(indent, argType, val)\n } else if (argType instanceof HashType) {\n argVal = this.hashValue(indent, val);\n } else if (!argType.intrinsic) {\n argVal = this.assignType(indent, argType, val);\n } else {\n argVal = this.defaultAsVal(indent, val);\n }\n return argVal;\n }\n\n assignParams(method: IMethod, inputs: ArgValues): string {\n const args: string[] = [];\n let hasComplexArg = false;\n if (Object.keys(inputs).length > 0) {\n let requestType: IType | undefined;\n if (\n !this.useNamedArguments &&\n (requestType = this.api.getRequestType(method))\n ) {\n args.push(this.assignType(this.indentStr, requestType, inputs));\n hasComplexArg = true;\n } else {\n const params = method.allParams;\n params.forEach(p => {\n const v = this.argValue(this.indentStr, p, inputs);\n if (v !== '') {\n const arg = this.useNamedArguments ? `${p.name}=${v}` : v;\n args.push(arg);\n if (!p.type.intrinsic) {\n hasComplexArg = true;\n }\n }\n });\n }\n }\n let open = '';\n if (args.length > 1 || hasComplexArg) {\n open = `\\n${this.indentStr}`;\n }\n return args.length > 0 ? `${open}${args.join(this.argDelimiter)}` : '';\n }\n\n argSet(name: string, sep: string, exp: string) {\n return `${name}${sep}${exp}`;\n }\n\n /**\n * Maps input values into type\n * @param indent starting indent level\n * @param type that receives assignments\n * @param inputs to assign to type\n */\n assignType(indent: string, type: IType, inputs: ArgValues): string {\n const mt = this.typeMap(type);\n const args: string[] = [];\n // child properties are indented one level\n const bump = this.bumper(indent);\n const props = Object.values(type.properties);\n props.forEach(p => {\n const v = this.argValue(bump, p, inputs);\n if (v) args.push(this.argSet(p.name, this.argSetSep, v));\n });\n\n const open = this.useModelClassForTypes\n ? `${mt.name}${this.typeOpen}`\n : this.typeOpen;\n const nl = `,\\n${bump}`;\n let joined = `\\n${bump}${args.join(nl)}\\n${indent}`;\n if (joined.trim().length === 0) {\n // trim the structure new lines if there are no arguments\n joined = '';\n }\n // need a bump after `open` to account for the first argument\n // not getting the proper bump from args.join()\n return `${open}${joined}${this.typeClose}`;\n }\n\n /**\n * Constructs array of ArrayType elements\n *\n * It is rendered on a single line if the array has only one element\n * and it is an IntrinsicType. Otherwise the array is rendered on\n * multiple lines with elements appropriately further indented\n *\n * @param indent starting indent level\n * @param type that receives assignments\n * @param val elements for this array\n */\n arrayValue(indent: string, type: IType, val: any) {\n const ra = type as ArrayType;\n const et = ra.elementType;\n const bump = this.bumper(indent);\n // single intrinsic element array renders single line\n let open = this.arrayOpen;\n let close = this.arrayClose;\n let arrayValDelimiter = this.argDelimiter;\n // multiple intrinsic elements or 1 or more non-intrinsic element array\n // renders multiple lines\n if (val.length > 1 || !et.intrinsic) {\n // the opener uses bump to account for the first argument\n // not getting the proper bump from args.join()\n open = `${open}\\n${bump}`;\n close = `\\n${indent}${close}`;\n // bump elements one level in from array declaration\n arrayValDelimiter = `${arrayValDelimiter.trim()}\\n${bump}`;\n }\n const args: string[] = [];\n let asVal = this.defaultAsVal;\n const mt = this.typeMap(et);\n if (et.intrinsic) {\n asVal = mt.asVal || asVal;\n } else {\n asVal = (i: string, v: any) => this.assignType(i, et, v);\n }\n // passing `bump` to `asVal` - typically intrinsic asVal ignores\n // indentation but certainly for the assignType case we want the\n // nested object to be indented a level further\n val.forEach((v: any) => args.push(asVal(bump, v)));\n return open + args.join(arrayValDelimiter) + close;\n }\n\n anyValue(indent: string, val: any): string {\n if (val instanceof Type) return this.assignType(indent, val as Type, val);\n switch (typeof val) {\n case 'bigint':\n case 'number':\n return val.toString();\n case 'boolean':\n return val ? 'true' : 'false';\n case 'string':\n return this.quote(val);\n case 'undefined':\n return '';\n case 'function':\n return '';\n case 'object': {\n if (Array.isArray(val)) {\n const vals: string[] = [];\n Object.values(val).forEach(v => {\n vals.push(this.anyValue(this.bumper(indent), v));\n });\n return this.argIndent(indent, vals, this.arrayOpen, this.arrayClose);\n } else {\n return this.hashValue(indent, val);\n }\n }\n case 'symbol':\n return val.toString();\n }\n return val.toString();\n }\n\n // indent represents the starting level of indentation for this hash\n // the key/value pairs are further indented one bump\n hashValue(indent: string, val: any) {\n const args: string[] = [];\n const bump = this.bumper(indent);\n Object.entries(val).forEach(([name, v]) => {\n const exp = this.anyValue(bump, v);\n const key = `${this.hashKeyQuote}${name}${this.hashKeyQuote}`;\n args.push(this.argSet(key, this.hashSetSep, exp));\n });\n return this.argIndent(indent, args, this.hashOpen, this.hashClose);\n }\n\n paramMappedType(param: IParameter, method: IMethod) {\n const type =\n param.location === strBody\n ? this.writeableType(param.type, method) || param.type\n : param.type;\n return this.typeMap(type);\n }\n\n makeTheCall(_method: IMethod, _inputs: ArgValues) {\n return this.commentHeader('', `Not yet available`);\n }\n\n abstract encodePathParams(indent: string, method: IMethod): string;\n\n beginRegion(indent: string, description: string): string {\n return `${indent}#region ${description}`;\n }\n\n endRegion(indent: string, description: string): string {\n return `${indent}#endregion ${description}`;\n }\n\n warnEditing() {\n return (\n 'NOTE: Do not edit this file generated by Looker SDK Codegen' +\n (this.apiVersion ? ` for API ${this.apiVersion}` : '')\n );\n }\n\n streamerSignature(_indent: string, _method: IMethod) {\n return '';\n }\n\n // Only implement this method for languages that have explicit streaming methods declared\n declareStreamer(_indent: string, _method: IMethod) {\n return '';\n }\n\n abstract summary(indent: string, text: string | undefined): string;\n\n initArg(_indent: string, _property: IProperty): string {\n return '';\n }\n\n construct(_indent: string, _type: IType): string {\n return '';\n }\n\n bumper(indent: string) {\n return indent + this.indentStr;\n }\n\n describeProperty(property: IProperty) {\n return `${property.description}${property.readOnly ? ' (read-only)' : ''}`;\n }\n\n sdkFileName(baseFileName: string) {\n return this.fileName(`${this.sdkPath}/${this.apiVersion}/${baseFileName}`);\n }\n\n fileName(base: string) {\n return `${this.codePath}${this.packagePath}/${base}${this.fileExtension}`;\n }\n\n comment(indent: string, description: string) {\n if (this.noComment) return '';\n return commentBlock(description, indent, this.commentStr);\n }\n\n commentHeader(\n indent: string,\n text: string | undefined,\n _commentStr?: string\n ) {\n if (this.noComment) return '';\n return text ? `${this.comment(indent, text)}\\n` : '';\n }\n\n declareParameters(indent: string, method: IMethod) {\n const params = method.allParams;\n const items: string[] = [];\n if (params)\n params.forEach(p => items.push(this.declareParameter(indent, method, p)));\n return items.join(this.paramDelimiter);\n }\n\n declareConstructorArg(indent: string, property: IProperty) {\n return `${indent}${property.name}${\n property.nullable ? ' = ' + this.nullStr : ''\n }`;\n }\n\n it(value: string) {\n return this.itself ? `${this.itself}.${value}` : value;\n }\n\n typeProperties(type: IType) {\n return Object.values(type.properties);\n }\n\n declareType(indent: string, type: IType) {\n const bump = this.bumper(indent);\n const props: string[] = [];\n let propertyValues = '';\n try {\n if (type instanceof EnumType) {\n const num = type as EnumType;\n num.values.forEach(value =>\n props.push(this.declareEnumValue(bump, value))\n );\n propertyValues = props.join(this.enumDelimiter);\n } else {\n this.typeProperties(type).forEach(prop =>\n props.push(this.declareProperty(bump, prop))\n );\n propertyValues = props.join(this.propDelimiter);\n }\n } catch {\n throw new Error(JSON.stringify(type, null, 2));\n }\n return (\n this.typeSignature(indent, type) +\n propertyValues +\n this.construct(indent, type) +\n `${this.endTypeStr ? indent : ''}${this.endTypeStr}`\n );\n }\n\n argGroup(indent: string, args: Arg[], prefix?: string) {\n prefix = prefix || '';\n return args && args.length !== 0\n ? `${indent}[${prefix}${args.join(this.argDelimiter + prefix)}]`\n : this.nullStr;\n }\n\n argList(indent: string, args: Arg[], prefix?: string) {\n prefix = prefix || '';\n return args && args.length !== 0\n ? `${indent}${prefix}${args.join(this.argDelimiter + prefix)}`\n : this.nullStr;\n }\n\n // this is a builder function to produce arguments with optional null place holders but no extra required optional arguments\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 httpPath(path: string, _prefix?: string) {\n return path;\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 httpArgs(indent: string, method: IMethod) {\n let result = this.argFill('', this.argGroup(indent, method.cookieArgs));\n result = this.argFill(result, this.argGroup(indent, method.headerArgs));\n result = this.argFill(\n result,\n method.bodyArg ? method.bodyArg : this.nullStr\n );\n result = this.argFill(result, this.argGroup(indent, method.queryArgs));\n return result;\n }\n\n errorResponses(_indent: string, method: IMethod) {\n const results: string[] = method.errorResponses.map(r => `${r.type.name}`);\n return results.join(', ');\n }\n\n httpCall(indent: string, method: IMethod) {\n const bump = indent + this.indentStr;\n const args = this.httpArgs(bump, method);\n const errors = `(${this.errorResponses(indent, method)})`;\n return `${indent}return ${this.it(\n this.transport\n )}.${method.httpMethod.toLowerCase()}(${errors}, \"${method.endpoint}\"${\n args ? ', ' + args : ''\n })`;\n }\n\n streamCall(_indent: string, _method: IMethod) {\n return '';\n }\n\n useRequest(method: IMethod) {\n if (this.useNamedParameters) return false;\n return method.eligibleForRequestType();\n }\n\n // Looks up or dynamically creates the request type for this method based\n // on rules for creating request types at the IApiModel implementation level\n // If no request type is required, no request type is created or referenced\n requestTypeName(method: IMethod): string {\n if (!this.useRequest(method)) return '';\n const request = this.api.getRequestType(method);\n // PB: determines if there is a request object vs flat list\n if (!request) return '';\n request.refCount++;\n method.addType(this.api, request);\n return request.name;\n }\n\n // Looks up or dynamically creates the writeable type for this method based\n // on rules for creating writable types at the IApiModel implementation level\n // If no writeable type is required, no writeable type is created or referenced\n writeableType(type: IType, method?: IMethod): IType | undefined {\n if (!type) return undefined;\n const writer = this.api.mayGetWriteableType(type);\n if (!writer) return undefined;\n writer.refCount++;\n if (method) method.addType(this.api, writer);\n return writer;\n }\n\n typeNames(_countError = true) {\n const items: string[] = [];\n if (!this.api) return items;\n Object.values(this.api.types)\n .filter(type => type.refCount > 0 && !type.intrinsic)\n .forEach(type => items.push(type.name));\n return items;\n }\n\n /**\n * Gets the type mapping to use for generation\n *\n * Also tracks refCounts for the type for generators that need explicit type imports\n *\n * @param type to map for generation\n */\n typeMap(type: IType): IMappedType {\n type.refCount++; // increment refcount\n return { default: this.nullStr || '', name: type.name || '' };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"codeGen.js","names":["_sdkRtl","require","_sdkModels","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","commentBlock","exports","text","indent","arguments","length","undefined","commentStr","trim","indentation","lines","split","map","x","concat","trimRight","join","trimInputs","inputs","keepBody","depth","isEmpty","Array","isArray","keys","result","DelimArray","values","forEach","v","push","entries","_ref","trimmed","CodeGen","constructor","api","versions","packageName","toUpperCase","_","toString","spec","apiVersion","version","apiPath","apiRef","replace","supportsMultiApi","packagePath","reset","functionsPrologue","_indent","functionsEpilogue","hooksPrologue","hooksEpilogue","mocksPrologue","mocksEpilogue","interfacesPrologue","reserve","name","streamsPrologue","quote","codeQuote","declareEnumValue","mayQuote","functionSignature","_method","declareFunction","declareHook","declareMock","declareInterface","argIndent","args","opener","closer","bump","bumper","open","close","delim","argDelimiter","argValue","arg","val","argType","writeableType","type","mt","typeMap","argVal","asVal","ArrayType","arrayValue","HashType","hashValue","intrinsic","assignType","defaultAsVal","assignParams","method","hasComplexArg","requestType","useNamedArguments","getRequestType","indentStr","params","allParams","p","argSet","sep","exp","props","properties","argSetSep","useModelClassForTypes","typeOpen","nl","joined","typeClose","ra","et","elementType","arrayOpen","arrayClose","arrayValDelimiter","anyValue","Type","vals","_ref2","hashKeyQuote","hashSetSep","hashOpen","hashClose","paramMappedType","param","location","strBody","makeTheCall","_inputs","commentHeader","beginRegion","description","endRegion","warnEditing","streamerSignature","declareStreamer","initArg","_property","construct","_type","describeProperty","property","readOnly","sdkFileName","baseFileName","fileName","sdkPath","base","codePath","fileExtension","comment","noComment","_commentStr","declareParameters","items","declareParameter","paramDelimiter","declareConstructorArg","nullable","nullStr","it","itself","typeProperties","declareType","propertyValues","EnumType","num","enumDelimiter","prop","declareProperty","propDelimiter","_unused","Error","JSON","stringify","typeSignature","endTypeStr","argGroup","prefix","argList","argFill","current","httpPath","path","_prefix","assignFormArgs","body","query","isFormUrlEncoded","httpArgs","cookieArgs","headerArgs","bodyArg","queryArgs","formArgs","errorResponses","results","httpCall","errors","transport","httpMethod","toLowerCase","endpoint","streamCall","useRequest","useNamedParameters","eligibleForRequestType","requestTypeName","request","refCount","addType","writer","mayGetWriteableType","typeNames","_countError","types","filter","default"],"sources":["../src/codeGen.ts"],"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 { ArgValues } from '@looker/sdk-rtl';\nimport { DelimArray } from '@looker/sdk-rtl';\nimport type {\n ApiModel,\n Arg,\n EnumValueType,\n IMethod,\n IParameter,\n IProperty,\n IType,\n} from './sdkModels';\nimport {\n ArrayType,\n EnumType,\n HashType,\n Type,\n mayQuote,\n strBody,\n} from './sdkModels';\nimport type { SpecItem } from './specConverter';\n\nexport const commentBlock = (\n text: string | undefined,\n indent = '',\n commentStr = '// '\n) => {\n if (!text || !text.trim()) return '';\n const indentation = indent + commentStr;\n const lines = text.split('\\n').map(x => `${indentation}${x}`.trimRight());\n return lines.join('\\n');\n};\n\n/** Version and spec references for the generator */\nexport interface IVersionInfo {\n /** Server release version (Not the API version) */\n lookerVersion: string;\n /** API specification for generating the SDK */\n spec: SpecItem;\n}\n\n/**\n * Removes all empty input values\n * @param inputs current inputs\n * @param keepBody true to send body as is. false trims body values (default)\n * @param depth recursion depth\n * @returns inputs with all \"empty\" values removed so the key no longer exists\n */\nexport const trimInputs = (inputs: any, keepBody = false, depth = 0): any => {\n function isEmpty(value: any, depth: number): boolean {\n if (Array.isArray(value)) return value.length === 0;\n if (value === undefined) return true;\n if (value === null) return true;\n if (value === '') return true;\n if (value instanceof Object) {\n if (depth === 1) {\n // Top level empty objects are kept. i.e { one: {} } is left unchanged.\n return false;\n }\n return Object.keys(value).length === 0;\n }\n return false;\n }\n\n let result: any;\n if (inputs instanceof DelimArray) return inputs;\n if (Array.isArray(inputs)) {\n result = [];\n Object.values(inputs).forEach((v: any) =>\n result.push(trimInputs(v, keepBody, depth + 1))\n );\n } else if (inputs instanceof Object) {\n if (keepBody && depth > 0) {\n result = inputs;\n } else {\n result = {};\n Object.entries(inputs).forEach(([key, value]) => {\n const trimmed = trimInputs(value, keepBody, depth + 1);\n if (!isEmpty(trimmed, depth + 1)) {\n result[key] = trimmed;\n }\n });\n }\n } else {\n // Scalar or preserved \"body\" value\n result = inputs;\n }\n return result;\n};\n\n/**\n * Function pattern for creating source code assignment expressions\n */\nexport type CodeAssignment = (indent: string, value: any) => string;\n\n/** Language-specific type mapping */\nexport interface IMappedType {\n /** language's name for the type */\n name: string;\n /** default value expression */\n default: string;\n /** assignment expression of value */\n asVal?: CodeAssignment;\n /** expression to use as the type's optional default */\n optional?: string;\n}\n\nexport interface ICodeGen {\n /**\n * root path for generated source code files\n * e.g. 'python' for Python\n */\n codePath: string;\n\n /**\n * folder for the Looker SDK reference\n * e.g. 'looker_sdk' for Python. All python source would end up under `python/looker_sdk`\n */\n packagePath: string;\n\n /**\n * Name of the SDK package\n * e.g. 'Looker40SDK' for API 4.0. This package name is currently determined by the base `CodeGen` class\n */\n packageName: string;\n\n /**\n * relative folder path for sdk file generation\n * e.g. 'sdk` for python\n */\n sdkPath: string;\n\n /** use special handling for a JSON value that can be a string or a number. Introduced for Swift. */\n anyString: boolean;\n\n /** current version of the Api being generated */\n apiVersion: string;\n\n /**\n * beginning name pattern for all environment variables\n * e.g. LOOKERSDK\n */\n environmentPrefix: string;\n\n /**\n * name of api request instance variable\n * e.g. _rtl for Python, transport for TypeScript\n */\n transport: string;\n\n /** reference to self. e.g self, this, it, etc. */\n itself: string;\n\n /** file extension for generated files */\n fileExtension: string;\n\n /**\n * comment string\n * e.g. Python=# C#=// TypeScript=//\n */\n commentStr: string;\n\n /** Generate comments in source code? */\n noComment: boolean;\n\n /**\n * string representation of null value\n * e.g. Python None, C# null, Delphi nil\n */\n nullStr: string;\n\n /** indentation string. Typically two spaces ' ' */\n indentStr: string;\n\n /** end type string. For C# and TypeScript, usually '}\\n' */\n endTypeStr: string;\n\n /** argument separator string. Typically ', ' */\n argDelimiter: string;\n\n /** type properties/args expression separator. E.g ': ' for TypeScript */\n argSetSep: string;\n\n /** hash type properties/args expression separator. E.g ': ' for TypeScript */\n hashSetSep: string;\n\n /** hash key quotes E.g '' for TypeScript and '\"' for Python */\n hashKeyQuote: string;\n\n /** parameter delimiter. Typically \",\\n\" */\n paramDelimiter: string;\n\n /** property delimiter. Typically, \"\\n\" or \",\\n\" */\n propDelimiter: string;\n\n /** enum value delimiter. Typically, \",\\n\" */\n enumDelimiter: string;\n\n /** quote character/string to use for quoted strings. Typically, '\"' or \"'\" */\n codeQuote: string;\n\n /**\n * Does this language support named parameters with default values? Otherwise\n * request types for sdk method signatures may be generated:\n * see IMethod.eligibleForRequestType\n */\n useNamedParameters: boolean;\n\n /** Use named/keyword arguments in calling syntax */\n useNamedArguments: boolean;\n\n /** Mainly for TypeScript SDK tree-shaking support. True produces slices.ext */\n useSlices: boolean;\n\n /** Mainly for TypeScript SDK tree-shaking support. True produces funcs.ext */\n useFunctions: boolean;\n\n /** Does this language implement interfaces? True produces methodInterfaces.ext */\n useInterfaces: boolean;\n\n /** Does this language have streaming methods? */\n willItStream: boolean;\n\n /** versions info used for generating the SDK */\n versions?: IVersionInfo;\n\n /** array open string */\n arrayOpen: string;\n\n /** array close string */\n arrayClose: string;\n\n /** hash open string */\n hashOpen: string;\n\n /** hash close string */\n hashClose: string;\n\n /** type open string */\n typeOpen: string;\n\n /** type close string */\n typeClose: string;\n\n /** Do type declarations use a class definition */\n useModelClassForTypes: boolean;\n\n /**\n * Resets the generator for a new emission\n */\n reset(): void;\n\n /**\n * Quote a string value for the language\n * @param value to quote\n */\n quote(value: any): string;\n\n /**\n * Returns true if the SDK supports multiple API versions of models\n * @returns True if multi-API is supported\n */\n supportsMultiApi(): boolean;\n\n /**\n * Returns the name of the RequestType if this language AND method require it.\n * Otherwise return empty string.\n * @param {IMethod} method\n * @returns {string}\n */\n requestTypeName(method: IMethod): string;\n\n /**\n * Formats argument assignment expressions for source code\n * @param indent code indentation\n * @param args argument assignments as string expressions\n * @param opener structure opener. e.g. { for hash, [ for array\n * @param closer structure closer. e.g. } for hash, ] for array\n */\n argIndent(\n indent: string,\n args: string[],\n opener: string,\n closer: string\n ): string;\n\n /**\n * Generate the assignment value of an argument for this language\n * @param indent code indentation\n * @param arg parameter or property to receive value\n * @param inputs values to find assignment in\n */\n argValue(\n indent: string,\n arg: IParameter | IProperty,\n inputs: ArgValues\n ): string;\n\n /**\n * Maps input values into type\n * @param indent starting indent level\n * @param type that receives assignments\n * @param inputs to assign to type\n */\n assignType(indent: string, type: IType, inputs: ArgValues): string;\n\n /**\n * Generate assignment statement for parameters of a method\n * @param method to assign values to\n * @param inputs to assign to method parameters\n */\n assignParams(method: IMethod, inputs: ArgValues): string;\n\n /**\n * Argument value setter code expression\n * @param name of argument/property\n * @param sep spacing to separate value. Could be newline or single space or something else\n * @param exp expression (as valid code fragment) to assign\n *\n * @example `foo: bar` for TypeScript where `name` is \"foo\", `sep` is \": \" and `exp` is \"bar\"\n */\n argSet(name: string, sep: string, exp: string): string;\n\n /**\n * Converts val to an array value expression\n * @param indent code indentation\n * @param type of array to create\n * @param val value(s) to convert to a code assignment\n */\n arrayValue(indent: string, type: IType, val: any): string;\n\n /**\n * Converts any value to its code expression\n * @param indent code indentation\n * @param val value(s) to convert to a code assignment\n */\n anyValue(indent: string, val: any): string;\n\n /** Increase indent */\n bumper(indent: string): string;\n\n /**\n * Converts val to a dictionary/hash code expression\n * @param indent code indentation\n * @param val value(s) to convert to a code assignment\n */\n hashValue(indent: string, val: any): any;\n\n /**\n * Generate the SDK calling syntax for the method with the provided inputs\n * @param method to convert to SDK call\n * @param inputs to assign to parameters of the method\n */\n makeTheCall(method: IMethod, inputs: ArgValues): string;\n\n /**\n * Returns the WriteType if the passed type has any readOnly properties or types\n *\n * If the writeable type exists, a reference to it is added to the method\n * @param {IType} type\n * @param method to track writeable type conversion\n * @returns {IType | undefined}\n */\n writeableType(type: IType, method?: IMethod): IType | undefined;\n\n /**\n * standard code to insert at the top of the generated \"methods\" file(s)\n * @param indent code indentation\n */\n methodsPrologue(indent: string): string;\n\n /**\n * standard code to insert at the top of the generated \"funcs\" file(s)\n * @param indent code indentation\n */\n functionsPrologue(indent: string): string;\n\n /**\n * standard code to insert at the top of the generated \"hooks\" file(s)\n * @param indent code indentation\n */\n hooksPrologue(indent: string): string;\n\n /**\n * standard code to insert at the top of the generated \"mocks\" file(s)\n * @param indent code indentation\n */\n mocksPrologue(indent: string): string;\n\n /**\n * standard code to insert at the top of the generated \"methodsInterface\" file(s)\n * @param indent code indentation\n */\n interfacesPrologue(indent: string): string;\n\n /**\n * standard code to append to the bottom of the generated \"methods\" file(s)\n * @param indent code indentation\n */\n methodsEpilogue(indent: string): string;\n\n /**\n * standard code to append to the bottom of the generated \"funcs\" file(s)\n * @param indent code indentation\n */\n functionsEpilogue(indent: string): string;\n\n /**\n * generated code to append to the bottom of the generated \"hooks\" file(s)\n * @param indent code indentation\n */\n hooksEpilogue(indent: string): string;\n\n /**\n * generated code to append to the bottom of the generated \"mocks\" file(s)\n * @param indent code indentation\n */\n mocksEpilogue(indent: string): string;\n\n /**\n * standard code to insert at the top of the generated \"streams\" file(s)\n * @param indent code indentation\n */\n streamsPrologue(indent: string): string;\n\n /**\n * aliases or escapes names that are the language's reserved words, or must be treated specially, like hyphenate names\n * @param name symbol name to reserve\n * @returns either the original name, or the transformed \"reserved\" version of it\n */\n reserve(name: string): string;\n\n /**\n * standard code to insert at the top of the generated \"models\" file(s)\n * @param {string} indent code indentation\n * @returns {string} generated code\n */\n modelsPrologue(indent: string): string;\n\n /**\n * standard code to append to the bottom of the generated \"models\" file(s)\n * @param {string} indent code indentation\n * @returns {string} generated code\n */\n modelsEpilogue(indent: string): string;\n\n /**\n * Get the name of an SDK file complete with API version\n * @param {string} baseFileName e.g. \"methods\" or \"models\"\n * @returns {string} fully specified, API-version-specific file name\n */\n sdkFileName(baseFileName: string): string;\n\n /**\n * provide the name for a file with the appropriate language code extension\n * @param {string} base eg \"methods\" or \"models\"\n * @returns {string} full sdk file name complete with extension\n */\n fileName(base: string): string;\n\n /**\n * generate an optional comment header if the comment is not empty\n * @param indent code indentation\n * @param text of comment, can be multi-line\n * @param commentStr comment character for multi-line comments\n * @returns comment (or not)\n */\n commentHeader(\n indent: string,\n text: string | undefined,\n commentStr?: string\n ): string;\n\n /**\n * group argument names together\n * e.g.\n * [ row_size, page_offset ]\n * @param {string} indent code indentation\n * @param {Arg[]} args list of argument names\n * @param {string} prefix \"namespace\" for argument names\n * @returns {string} source code\n */\n argGroup(indent: string, args: Arg[], prefix?: string): string;\n\n /**\n * list arguments by name\n * e.g.\n * row_size, page_offset\n * @param {string} indent code indentation\n * @param {Arg[]} args list of argument names\n * @param {string} prefix \"namespace\" for argument names\n * @returns {string} source code\n */\n argList(indent: string, args: Arg[], prefix?: string): string;\n\n /**\n * generate a comment block\n * e.g.\n * # this is a\n * # multi-line comment block\n * @param indent code indentation\n * @param description as comment\n * @returns comment block\n */\n comment(indent: string, description: string): string;\n\n /**\n * Generate a #region comment equivalent for the language\n * @param indent code indentation\n * @param description as comment\n * @returns region comment\n */\n beginRegion(indent: string, description: string): string;\n\n /**\n * Generate an #endregion comment equivalent for the language\n * @param indent code indentation\n * @param description as comment\n * @returns region comment\n */\n endRegion(indent: string, description: string): string;\n\n /**\n * generates the method signature including parameter list and return type.\n * @param indent code indentation\n * @param method to declare\n */\n methodSignature(indent: string, method: IMethod): string;\n\n /**\n * generates the function signature including parameter list and return type.\n * @param indent code indentation\n * @param method to declare\n */\n functionSignature(indent: string, method: IMethod): string;\n\n /**\n * convert endpoint pattern to platform-specific string template\n * @param {string} path endpoint path template\n * @param {string} prefix namespace prefix\n * @returns {string} string template\n */\n httpPath(path: string, prefix?: string): string;\n\n /**\n * generate a call to the http API abstraction\n * includes http method, path, body, query, headers, cookie arguments\n * @param {string} indent code indentation\n * @param {IMethod} method to call\n * @returns {string} source code\n */\n httpCall(indent: string, method: IMethod): string;\n\n /**\n * generate a call to the stream API abstraction\n * includes http method, path, body, query, headers, cookie arguments\n * @param {string} indent code indentation\n * @param {IMethod} method to call\n * @returns {string} source code\n */\n streamCall(indent: string, method: IMethod): string;\n\n /**\n * generates the type declaration signature for the start of the type definition\n * @param {string} indent code indentation\n * @param {IType} type to declare\n * @returns {string} source code\n */\n typeSignature(indent: string, type: IType): string;\n\n /**\n * generates summary text\n * e.g, for Python:\n * '''This is the method summary'''\n * @param {string} indent code indentation\n * @param {string} text comment\n * @returns {string} source code\n */\n summary(indent: string, text: string): string;\n\n /**\n *\n * produces the declaration block for a parameter\n * e.g.\n * # ID of the query to run\n * query_id: str\n *\n * and\n *\n * # size description of parameter\n * row_limit: int = None\n * @param {string} indent code indentation\n * @param {IMethod} method method containing the parameter\n * @param {IParameter} param parameter to declare\n * @returns {string} the parameter declaration\n */\n declareParameter(indent: string, method: IMethod, param: IParameter): string;\n\n /**\n * Handles the encoding call for path parameters within method declarations\n * @param {string} indent code indentation\n * @param {IMethod} method structure of method to declare\n * @returns {string} the resolved API endpoint path\n */\n encodePathParams(indent: string, method: IMethod): string;\n\n /**\n * generates the entire method\n * @param indent code indentation\n * @param method structure of method to declare\n * @returns the declaration code for the method\n */\n declareMethod(indent: string, method: IMethod): string;\n\n /**\n * generates the entire function\n * @param indent code indentation\n * @param method structure of method to declare\n * @returns the declaration code for the function\n */\n declareFunction(indent: string, method: IMethod): string;\n\n /**\n * declares the hook/slice for a function\n * @param indent code indentation\n * @param method structure of method to declare\n * @returns the declaration code for the hook\n */\n declareHook(indent: string, method: IMethod): string;\n\n /**\n * declares the mock handler for a method\n * @param indent code indentation\n * @param method structure of method to declare\n * @returns the declaration code for the mock method\n */\n declareMock(indent: string, method: IMethod): string;\n\n /**\n * generates the method's interface declaration\n * @param indent code indentation\n * @param method structure of method to declare\n * @returns the declaration code for the method's interface\n */\n declareInterface(indent: string, method: IMethod): string;\n\n /**\n * generates the streaming method signature including parameter list and return type.\n * @param {string} indent code indentation\n * @param {IMethod} method\n * @returns {string}\n */\n streamerSignature(indent: string, method: IMethod): string;\n\n /**\n * Generates the entire streaming method\n * @param {string} indent code indentation\n * @param {IMethod} method method to declare\n * @returns {string} source code\n */\n declareStreamer(indent: string, method: IMethod): string;\n\n /**\n * generates the list of parameters for a method signature\n * e.g.\n * # ID of the query to run\n * query_id: str,\n * # size description of parameter\n * row_limit: int = None\n * @param {string} indent code indentation\n * @param {IMethod} method containing parameters to declare\n * @returns {string} source code\n */\n declareParameters(indent: string, method: IMethod): string;\n\n /**\n * generates the syntax for a constructor argument\n * @param {string} indent code indentation\n * @param {IProperty} property of constructor\n * @returns {string} source code\n */\n declareConstructorArg(indent: string, property: IProperty): string;\n\n /**\n * produces the code for the type constructor\n * @param {string} indent code indentation\n * @param {IType} type to generate\n * @returns {string} source code\n */\n construct(indent: string, type: IType): string;\n\n /**\n * produces list of properties for declareType\n * @param {IType} type to generate\n * @returns {PropertyList} list of properties\n */\n typeProperties(type: IType): IProperty[];\n\n /**\n * generates entire type declaration\n * @param {string} indent code indentation\n * @param {IType} type to generate\n * @returns {string} source code\n */\n declareType(indent: string, type: IType): string;\n\n /**\n * generates a textual description for the property's comment header\n * @param {IProperty} property to describe\n * @returns {string} source code\n */\n describeProperty(property: IProperty): string;\n\n /**\n * generates type property declaration\n * @param {string} indent code indentation\n * @param {IProperty} property to declare\n * @returns {string} source code\n */\n declareProperty(indent: string, property: IProperty): string;\n\n /**\n * generates an enum value declaration\n * @param {string} indent code indentation\n * @param {EnumValueType} value to declare\n * @returns {string} source code\n */\n declareEnumValue(indent: string, value: EnumValueType): string;\n\n /**\n * if countError is false, no import reference to Error or IError should be included\n * @param {boolean} countError\n * @returns {string[]}\n */\n typeNames(countError: boolean): string[];\n\n /**\n * Type mapping for a parameter with special handling for body params\n * @param param to map\n * @param method containing param\n */\n paramMappedType(param: IParameter, method: IMethod): IMappedType;\n\n /**\n * Language-specific type conversion\n * @param {IType} type to potentially convert\n * @returns {IMappedType} converted type\n */\n typeMap(type: IType): IMappedType;\n}\n\nexport abstract class CodeGen implements ICodeGen {\n willItStream = false;\n anyString = false;\n codePath = './';\n packagePath = 'looker';\n sdkPath = 'sdk';\n packageName = 'LookerSDK';\n environmentPrefix = this.packageName.toUpperCase();\n itself = '';\n fileExtension = '.code';\n argDelimiter = ', ';\n paramDelimiter = ',\\n';\n propDelimiter = '\\n';\n enumDelimiter = ',\\n';\n codeQuote = `'`;\n useNamedParameters = true;\n useNamedArguments = true;\n useFunctions = false;\n useSlices = false;\n useInterfaces = false;\n\n // makeTheCall definitions\n argSetSep = ': ';\n hashSetSep = ': ';\n arrayOpen = '[';\n arrayClose = ']';\n hashOpen = '{';\n hashClose = '}';\n hashKeyQuote = '';\n typeOpen = '{';\n typeClose = '}';\n useModelClassForTypes = false;\n\n indentStr = ' ';\n commentStr = '// ';\n noComment = false;\n nullStr = 'null';\n endTypeStr = '';\n transport = 'rtl';\n\n apiVersion = '';\n apiRef = '';\n apiPath = '';\n\n constructor(public api: ApiModel, public versions?: IVersionInfo) {\n if (versions && versions.spec) {\n this.apiVersion = versions.spec.version;\n this.apiPath = `/${versions.spec.key}`;\n this.apiRef = versions.spec.key.replace('.', '');\n this.packageName = this.supportsMultiApi()\n ? `Looker${this.apiRef}SDK`\n : `LookerSDK`;\n this.packagePath += this.apiPath;\n }\n }\n\n /** base level reset does nothing */\n reset() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Returns true if the SDK supports multiple API versions of models\n * @returns True if multi-API is supported\n */\n supportsMultiApi() {\n // Currently, all but Swift support multiple APIs\n return true;\n }\n\n /**\n * beginning of the \"methods\" file for a language\n * @param {string} indent\n * @returns {string}\n */\n abstract methodsPrologue(indent: string): string;\n\n functionsPrologue(_indent: string): string {\n // usually, nothing to \"close\" atomic function declarations\n return '';\n }\n\n functionsEpilogue(_indent: string): string {\n return '';\n }\n\n hooksPrologue(_indent: string): string {\n return '';\n }\n\n hooksEpilogue(_indent: string): string {\n return '';\n }\n\n mocksPrologue(_indent: string): string {\n return '';\n }\n\n mocksEpilogue(_indent: string): string {\n return '';\n }\n\n interfacesPrologue(_indent: string): string {\n return '';\n }\n\n /**\n * ending of the \"methods\" file for a language\n * @param {string} indent\n * @returns {string}\n */\n abstract methodsEpilogue(indent: string): string;\n\n reserve(name: string) {\n return name;\n }\n\n streamsPrologue(_indent: string) {\n return '';\n }\n\n /**\n * beginning of the \"models\" file for a language\n * @param {string} indent\n * @returns {string}\n */\n abstract modelsPrologue(indent: string): string;\n\n /**\n * ending of the \"models\" file for a language\n * @param {string} indent\n * @returns {string}\n */\n abstract modelsEpilogue(indent: string): string;\n\n abstract declareParameter(\n indent: string,\n method: IMethod,\n param: IParameter\n ): string;\n\n /**\n * Quote a string value for the language\n * @param value to quote\n */\n quote(value: any) {\n return `${this.codeQuote}${value}${this.codeQuote}`;\n }\n\n declareEnumValue(indent: string, value: EnumValueType) {\n const quote = typeof value === 'string' ? this.codeQuote : '';\n return `${indent}${mayQuote(value)} = ${quote}${value}${quote}`;\n }\n\n abstract declareProperty(indent: string, property: IProperty): string;\n\n abstract typeSignature(indent: string, type: IType): string;\n\n abstract methodSignature(indent: string, method: IMethod): string;\n\n functionSignature(_indent: string, _method: IMethod): string {\n return '';\n }\n\n abstract declareMethod(indent: string, method: IMethod): string;\n\n declareFunction(_indent: string, _method: IMethod): string {\n return '';\n }\n\n declareHook(_indent: string, _method: IMethod): string {\n return '';\n }\n\n declareMock(_indent: string, _method: IMethod): string {\n return '';\n }\n\n declareInterface(_indent: string, _method: IMethod): string {\n return '';\n }\n\n argIndent(indent: string, args: string[], opener: string, closer: string) {\n const bump = this.bumper(indent);\n let open = opener;\n let close = closer;\n let delim = this.argDelimiter;\n if (args.length > 1) {\n open = `${opener}\\n${bump}`;\n close = `\\n${indent}${closer}`;\n delim = `${this.argDelimiter.trim()}\\n${bump}`;\n }\n return `${open}${args.join(delim)}${close}`;\n }\n\n defaultAsVal: CodeAssignment = (_, v) => v.toString();\n\n argValue(\n indent: string,\n arg: IParameter | IProperty,\n inputs: ArgValues\n ): string {\n // TODO handle required positional arguments that are not provided?\n if (!(arg.name in inputs)) return '';\n const val = inputs[arg.name];\n const argType = this.writeableType(arg.type) || arg.type;\n const mt = this.typeMap(argType);\n let argVal: string;\n if (mt.asVal) {\n argVal = mt.asVal(indent, val);\n } else if (argType instanceof ArrayType) {\n argVal = this.arrayValue(indent, argType, val);\n // } else if (argType instanceof DelimArrayType) {\n // argVal = this.delimArrayValue(indent, argType, val)\n } else if (argType instanceof HashType) {\n argVal = this.hashValue(indent, val);\n } else if (!argType.intrinsic) {\n argVal = this.assignType(indent, argType, val);\n } else {\n argVal = this.defaultAsVal(indent, val);\n }\n return argVal;\n }\n\n assignParams(method: IMethod, inputs: ArgValues): string {\n const args: string[] = [];\n let hasComplexArg = false;\n if (Object.keys(inputs).length > 0) {\n let requestType: IType | undefined;\n if (\n !this.useNamedArguments &&\n (requestType = this.api.getRequestType(method))\n ) {\n args.push(this.assignType(this.indentStr, requestType, inputs));\n hasComplexArg = true;\n } else {\n const params = method.allParams;\n params.forEach(p => {\n const v = this.argValue(this.indentStr, p, inputs);\n if (v !== '') {\n const arg = this.useNamedArguments ? `${p.name}=${v}` : v;\n args.push(arg);\n if (!p.type.intrinsic) {\n hasComplexArg = true;\n }\n }\n });\n }\n }\n let open = '';\n if (args.length > 1 || hasComplexArg) {\n open = `\\n${this.indentStr}`;\n }\n return args.length > 0 ? `${open}${args.join(this.argDelimiter)}` : '';\n }\n\n argSet(name: string, sep: string, exp: string) {\n return `${name}${sep}${exp}`;\n }\n\n /**\n * Maps input values into type\n * @param indent starting indent level\n * @param type that receives assignments\n * @param inputs to assign to type\n */\n assignType(indent: string, type: IType, inputs: ArgValues): string {\n const mt = this.typeMap(type);\n const args: string[] = [];\n // child properties are indented one level\n const bump = this.bumper(indent);\n const props = Object.values(type.properties);\n props.forEach(p => {\n const v = this.argValue(bump, p, inputs);\n if (v) args.push(this.argSet(p.name, this.argSetSep, v));\n });\n\n const open = this.useModelClassForTypes\n ? `${mt.name}${this.typeOpen}`\n : this.typeOpen;\n const nl = `,\\n${bump}`;\n let joined = `\\n${bump}${args.join(nl)}\\n${indent}`;\n if (joined.trim().length === 0) {\n // trim the structure new lines if there are no arguments\n joined = '';\n }\n // need a bump after `open` to account for the first argument\n // not getting the proper bump from args.join()\n return `${open}${joined}${this.typeClose}`;\n }\n\n /**\n * Constructs array of ArrayType elements\n *\n * It is rendered on a single line if the array has only one element\n * and it is an IntrinsicType. Otherwise the array is rendered on\n * multiple lines with elements appropriately further indented\n *\n * @param indent starting indent level\n * @param type that receives assignments\n * @param val elements for this array\n */\n arrayValue(indent: string, type: IType, val: any) {\n const ra = type as ArrayType;\n const et = ra.elementType;\n const bump = this.bumper(indent);\n // single intrinsic element array renders single line\n let open = this.arrayOpen;\n let close = this.arrayClose;\n let arrayValDelimiter = this.argDelimiter;\n // multiple intrinsic elements or 1 or more non-intrinsic element array\n // renders multiple lines\n if (val.length > 1 || !et.intrinsic) {\n // the opener uses bump to account for the first argument\n // not getting the proper bump from args.join()\n open = `${open}\\n${bump}`;\n close = `\\n${indent}${close}`;\n // bump elements one level in from array declaration\n arrayValDelimiter = `${arrayValDelimiter.trim()}\\n${bump}`;\n }\n const args: string[] = [];\n let asVal = this.defaultAsVal;\n const mt = this.typeMap(et);\n if (et.intrinsic) {\n asVal = mt.asVal || asVal;\n } else {\n asVal = (i: string, v: any) => this.assignType(i, et, v);\n }\n // passing `bump` to `asVal` - typically intrinsic asVal ignores\n // indentation but certainly for the assignType case we want the\n // nested object to be indented a level further\n val.forEach((v: any) => args.push(asVal(bump, v)));\n return open + args.join(arrayValDelimiter) + close;\n }\n\n anyValue(indent: string, val: any): string {\n if (val instanceof Type) return this.assignType(indent, val as Type, val);\n switch (typeof val) {\n case 'bigint':\n case 'number':\n return val.toString();\n case 'boolean':\n return val ? 'true' : 'false';\n case 'string':\n return this.quote(val);\n case 'undefined':\n return '';\n case 'function':\n return '';\n case 'object': {\n if (Array.isArray(val)) {\n const vals: string[] = [];\n Object.values(val).forEach(v => {\n vals.push(this.anyValue(this.bumper(indent), v));\n });\n return this.argIndent(indent, vals, this.arrayOpen, this.arrayClose);\n } else {\n return this.hashValue(indent, val);\n }\n }\n case 'symbol':\n return val.toString();\n }\n return val.toString();\n }\n\n // indent represents the starting level of indentation for this hash\n // the key/value pairs are further indented one bump\n hashValue(indent: string, val: any) {\n const args: string[] = [];\n const bump = this.bumper(indent);\n Object.entries(val).forEach(([name, v]) => {\n const exp = this.anyValue(bump, v);\n const key = `${this.hashKeyQuote}${name}${this.hashKeyQuote}`;\n args.push(this.argSet(key, this.hashSetSep, exp));\n });\n return this.argIndent(indent, args, this.hashOpen, this.hashClose);\n }\n\n paramMappedType(param: IParameter, method: IMethod) {\n const type =\n param.location === strBody\n ? this.writeableType(param.type, method) || param.type\n : param.type;\n return this.typeMap(type);\n }\n\n makeTheCall(_method: IMethod, _inputs: ArgValues) {\n return this.commentHeader('', `Not yet available`);\n }\n\n abstract encodePathParams(indent: string, method: IMethod): string;\n\n beginRegion(indent: string, description: string): string {\n return `${indent}#region ${description}`;\n }\n\n endRegion(indent: string, description: string): string {\n return `${indent}#endregion ${description}`;\n }\n\n warnEditing() {\n return (\n 'NOTE: Do not edit this file generated by Looker SDK Codegen' +\n (this.apiVersion ? ` for API ${this.apiVersion}` : '')\n );\n }\n\n streamerSignature(_indent: string, _method: IMethod) {\n return '';\n }\n\n // Only implement this method for languages that have explicit streaming methods declared\n declareStreamer(_indent: string, _method: IMethod) {\n return '';\n }\n\n abstract summary(indent: string, text: string | undefined): string;\n\n initArg(_indent: string, _property: IProperty): string {\n return '';\n }\n\n construct(_indent: string, _type: IType): string {\n return '';\n }\n\n bumper(indent: string) {\n return indent + this.indentStr;\n }\n\n describeProperty(property: IProperty) {\n return `${property.description}${property.readOnly ? ' (read-only)' : ''}`;\n }\n\n sdkFileName(baseFileName: string) {\n return this.fileName(`${this.sdkPath}/${this.apiVersion}/${baseFileName}`);\n }\n\n fileName(base: string) {\n return `${this.codePath}${this.packagePath}/${base}${this.fileExtension}`;\n }\n\n comment(indent: string, description: string) {\n if (this.noComment) return '';\n return commentBlock(description, indent, this.commentStr);\n }\n\n commentHeader(\n indent: string,\n text: string | undefined,\n _commentStr?: string\n ) {\n if (this.noComment) return '';\n return text ? `${this.comment(indent, text)}\\n` : '';\n }\n\n declareParameters(indent: string, method: IMethod) {\n const params = method.allParams;\n const items: string[] = [];\n if (params)\n params.forEach(p => items.push(this.declareParameter(indent, method, p)));\n return items.join(this.paramDelimiter);\n }\n\n declareConstructorArg(indent: string, property: IProperty) {\n return `${indent}${property.name}${\n property.nullable ? ' = ' + this.nullStr : ''\n }`;\n }\n\n it(value: string) {\n return this.itself ? `${this.itself}.${value}` : value;\n }\n\n typeProperties(type: IType) {\n return Object.values(type.properties);\n }\n\n declareType(indent: string, type: IType) {\n const bump = this.bumper(indent);\n const props: string[] = [];\n let propertyValues = '';\n try {\n if (type instanceof EnumType) {\n const num = type as EnumType;\n num.values.forEach(value =>\n props.push(this.declareEnumValue(bump, value))\n );\n propertyValues = props.join(this.enumDelimiter);\n } else {\n this.typeProperties(type).forEach(prop =>\n props.push(this.declareProperty(bump, prop))\n );\n propertyValues = props.join(this.propDelimiter);\n }\n } catch {\n throw new Error(JSON.stringify(type, null, 2));\n }\n return (\n this.typeSignature(indent, type) +\n propertyValues +\n this.construct(indent, type) +\n `${this.endTypeStr ? indent : ''}${this.endTypeStr}`\n );\n }\n\n argGroup(indent: string, args: Arg[], prefix?: string) {\n prefix = prefix || '';\n return args && args.length !== 0\n ? `${indent}[${prefix}${args.join(this.argDelimiter + prefix)}]`\n : this.nullStr;\n }\n\n argList(indent: string, args: Arg[], prefix?: string) {\n prefix = prefix || '';\n return args && args.length !== 0\n ? `${indent}${prefix}${args.join(this.argDelimiter + prefix)}`\n : this.nullStr;\n }\n\n // this is a builder function to produce arguments with optional null place holders but no extra required optional arguments\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 httpPath(path: string, _prefix?: string) {\n return path;\n }\n\n /**\n * Reassigns body and query arguments for form-urlencoded requests\n * @param method method definition\n * @param body current body argument\n * @param query current query argument\n */\n assignFormArgs(\n method: IMethod,\n body: string,\n query: string\n ): { body: string; query: string } {\n if (method.isFormUrlEncoded) {\n return { body: query, query: this.nullStr };\n }\n return { body, query };\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 httpArgs(indent: string, method: IMethod) {\n let result = this.argFill('', this.argGroup(indent, method.cookieArgs));\n result = this.argFill(result, this.argGroup(indent, method.headerArgs));\n let body = method.bodyArg ? method.bodyArg : this.nullStr;\n let query = this.argGroup(indent, method.queryArgs);\n const formArgs = this.assignFormArgs(method, body, query);\n body = formArgs.body;\n query = formArgs.query;\n result = this.argFill(result, body);\n result = this.argFill(result, query);\n return result;\n }\n\n errorResponses(_indent: string, method: IMethod) {\n const results: string[] = method.errorResponses.map(r => `${r.type.name}`);\n return results.join(', ');\n }\n\n httpCall(indent: string, method: IMethod) {\n const bump = indent + this.indentStr;\n const args = this.httpArgs(bump, method);\n const errors = `(${this.errorResponses(indent, method)})`;\n return `${indent}return ${this.it(\n this.transport\n )}.${method.httpMethod.toLowerCase()}(${errors}, \"${method.endpoint}\"${\n args ? ', ' + args : ''\n })`;\n }\n\n streamCall(_indent: string, _method: IMethod) {\n return '';\n }\n\n useRequest(method: IMethod) {\n if (this.useNamedParameters) return false;\n return method.eligibleForRequestType();\n }\n\n // Looks up or dynamically creates the request type for this method based\n // on rules for creating request types at the IApiModel implementation level\n // If no request type is required, no request type is created or referenced\n requestTypeName(method: IMethod): string {\n if (!this.useRequest(method)) return '';\n const request = this.api.getRequestType(method);\n // PB: determines if there is a request object vs flat list\n if (!request) return '';\n request.refCount++;\n method.addType(this.api, request);\n return request.name;\n }\n\n // Looks up or dynamically creates the writeable type for this method based\n // on rules for creating writable types at the IApiModel implementation level\n // If no writeable type is required, no writeable type is created or referenced\n writeableType(type: IType, method?: IMethod): IType | undefined {\n if (!type) return undefined;\n const writer = this.api.mayGetWriteableType(type);\n if (!writer) return undefined;\n writer.refCount++;\n if (method) method.addType(this.api, writer);\n return writer;\n }\n\n typeNames(_countError = true) {\n const items: string[] = [];\n if (!this.api) return items;\n Object.values(this.api.types)\n .filter(type => type.refCount > 0 && !type.intrinsic)\n .forEach(type => items.push(type.name));\n return items;\n }\n\n /**\n * Gets the type mapping to use for generation\n *\n * Also tracks refCounts for the type for generators that need explicit type imports\n *\n * @param type to map for generation\n */\n typeMap(type: IType): IMappedType {\n type.refCount++; // increment refcount\n return { default: this.nullStr || '', name: type.name || '' };\n }\n}\n"],"mappings":"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"}
package/lib/csharp.gen.js CHANGED
@@ -149,8 +149,13 @@ class CSharpGen extends _codeGen.CodeGen {
149
149
  }
150
150
  httpArgs(indent, method) {
151
151
  var result = this.argFill('', 'options');
152
- result = this.argFill(result, method.bodyArg ? method.bodyArg : this.nullStr);
153
- result = this.argFill(result, this.argGroup(indent, method.queryArgs));
152
+ var body = method.bodyArg ? method.bodyArg : this.nullStr;
153
+ var query = this.argGroup(indent, method.queryArgs);
154
+ var formArgs = this.assignFormArgs(method, body, query);
155
+ body = formArgs.body;
156
+ query = formArgs.query;
157
+ result = this.argFill(result, body);
158
+ result = this.argFill(result, query);
154
159
  return result;
155
160
  }
156
161
  httpCall(indent, method) {
@@ -1 +1 @@
1
- {"version":3,"file":"csharp.gen.js","names":["_codeGen","require","_sdkModels","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","reservedWords","Set","CSharpGen","CodeGen","constructor","arguments","commentHeader","indent","text","noComment","concat","commentBlock","modelsPrologue","_indent","warnEditing","apiRef","modelsEpilogue","methodsPrologue","packageName","apiVersion","methodsEpilogue","reserve","name","has","declareParameter","method","param","type","location","strBody","writeableType","mapped","typeMap","arg","pOpt","required","defaulting","optional","declareProperty","property","getset","default","attr","EnumType","hasSpecialNeeds","jsonName","summary","describeProperty","methodHeader","_method$description","head","description","trim","headComment","httpMethod","endpoint","responseIsBoth","responseIsBinary","returnComment","params","forEach","paramComment","dep","deprecated","genericBits","success","generic","constraint","returnType","ret","methodHeaderDeclaration","streamer","length","undefined","bump","indentStr","args","allParams","p","push","fragment","join","paramDelimiter","callback","bits","header","methodSignature","httpPath","path","prefix","indexOf","replace","declareMethod","bumper","encodePathParams","httpCall","errorResponses","_method","argGroup","values","map","argDelimiter","nullStr","httpArgs","result","argFill","bodyArg","queryArgs","dollah","pathArgs","firstCase","encodings","pathParams","doEncode","nl","describeParam","mediaType","desc","okResponses","lines","declareEnumValue","toString","typeSignature","isEnum","kind","parent","mt","quotes","csTypes","any","boolean","byte","date","datetime","double","float","int32","int64","integer","number","object","password","string","uri","url","void","elementType","className","Error","JSON","stringify","exports"],"sources":["../src/csharp.gen.ts"],"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 { IMappedType } from './codeGen';\nimport { CodeGen, commentBlock } from './codeGen';\nimport type {\n Arg,\n EnumValueType,\n IMethod,\n IParameter,\n IProperty,\n IType,\n} from './sdkModels';\nimport { EnumType, describeParam, firstCase, strBody } from './sdkModels';\n\n// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/\nconst reservedWords = new Set<string>([\n 'abstract',\n 'as',\n 'base',\n 'bool',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'checked',\n 'class',\n 'const',\n 'continue',\n 'decimal',\n 'default',\n 'delegate',\n 'do ',\n 'double',\n 'else',\n 'enum',\n 'event',\n 'explicit',\n 'extern',\n 'false',\n 'finally',\n 'fixed',\n 'float',\n 'for',\n 'foreach',\n 'goto',\n 'if',\n 'implicit',\n 'in',\n 'int',\n 'interface',\n 'internal',\n 'is',\n 'lock',\n 'long',\n 'namespace',\n 'new',\n 'null',\n 'object',\n 'operator',\n 'out',\n 'override',\n 'params',\n 'private',\n 'protected',\n 'public',\n 'readonly',\n 'ref',\n 'return',\n 'sbyte',\n 'sealed',\n 'short',\n 'sizeof',\n 'stackalloc',\n 'static',\n 'string',\n 'struct',\n 'switch',\n 'this',\n 'throw',\n 'true',\n 'try',\n 'typeof',\n 'uint',\n 'ulong',\n 'unchecked',\n 'unsafe',\n 'ushort',\n 'using',\n 'virtual',\n 'void',\n 'volatile',\n 'while',\n]);\n\n/**\n * C# code generator\n */\nexport class CSharpGen extends CodeGen {\n codePath = './csharp';\n packagePath = '';\n itself = 'this';\n fileExtension = '.cs';\n commentStr = '// ';\n nullStr = 'null';\n transport = 'Transport';\n\n argDelimiter = ',';\n paramDelimiter = ',\\n';\n propDelimiter = '\\n';\n\n indentStr = ' ';\n endTypeStr = '\\n}';\n needsRequestTypes = false;\n willItStream = false;\n codeQuote = '\"';\n\n commentHeader(indent: string, text: string | undefined) {\n if (this.noComment) return '';\n return text ? `${commentBlock(text, indent, '/// ')}\\n` : '';\n }\n\n modelsPrologue(_indent: string) {\n return `#nullable enable\nusing System;\nusing System.Runtime.Serialization;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Converters;\nusing Looker.RTL;\nusing Url = System.String;\nusing Password = System.String;\n// ReSharper disable InconsistentNaming\n\n${this.commentHeader('', this.warnEditing())}\nnamespace Looker.SDK.API${this.apiRef}\n{\n\n`;\n }\n\n modelsEpilogue(_indent: string) {\n return '\\n}';\n }\n\n methodsPrologue(_indent: string) {\n return `#nullable enable\nusing System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Looker.RTL;\n// ReSharper disable InconsistentNaming\n\n${this.commentHeader('', this.warnEditing())}\nnamespace Looker.SDK.API${this.apiRef}\n{\n\n public class ${this.packageName}: ApiMethods\n {\n public ${this.packageName}(IAuthSession authSession): base(authSession, \"${\n this.apiVersion\n }\") { }\n`;\n }\n\n methodsEpilogue(indent: string) {\n return `${indent}}\n}\n`;\n }\n\n reserve(name: string) {\n if (reservedWords.has(name)) {\n return '@' + name;\n }\n return name;\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 const arg = this.reserve(param.name);\n const pOpt = param.required ? '' : '?';\n const defaulting = param.required\n ? ''\n : mapped.optional\n ? ` = ${mapped.optional}`\n : '';\n return `${indent}${mapped.name}${pOpt} ${arg}${defaulting}`;\n }\n\n declareProperty(indent: string, property: IProperty): string {\n const type = this.typeMap(property.type);\n // TODO notation for readonly support\n // let getset = property.readOnly ? '{ get; }' : '{ get; set; }'\n let getset = '{ get; set; }';\n if (property.required) {\n if (type.default) {\n getset += ` = ${type.default};`;\n }\n } else {\n if (type.optional) {\n getset += ` = ${type.optional};`;\n }\n }\n\n const arg = this.reserve(property.name);\n const pOpt = property.required ? '' : '?';\n let attr =\n property.type instanceof EnumType\n ? `${indent}[JsonConverter(typeof(StringEnumConverter))]\\n`\n : '';\n if (property.hasSpecialNeeds) {\n attr += `${indent}[JsonProperty(\"${property.jsonName}\")]\\n`;\n }\n return (\n this.summary(indent, this.describeProperty(property)) +\n attr +\n `${indent}public ${type.name}${pOpt} ${arg} ${getset}`\n );\n }\n\n methodHeader(indent: string, method: IMethod) {\n const type = this.typeMap(method.type);\n const head = method.description?.trim();\n let headComment =\n (head ? `${head}\\n\\n` : '') +\n `${method.httpMethod} ${method.endpoint} -> ${type.name}`;\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 headComment += this.returnComment(method);\n method.params.forEach(param => (headComment += this.paramComment(param)));\n const dep = method.deprecated ? `${indent}[Obsolete(\"Deprecated\")]\\n` : '';\n return this.commentHeader(indent, headComment) + dep;\n }\n\n genericBits(method: IMethod) {\n let success = 'TSuccess';\n let generic = '<TSuccess>';\n let constraint = ' where TSuccess : class';\n if (method.returnType) {\n const ret = method.returnType;\n const type = this.typeMap(ret.type);\n success = type.name === 'void' ? 'string' : type.name;\n generic = '';\n constraint = '';\n }\n return { success, generic, constraint };\n }\n\n methodHeaderDeclaration(indent: string, method: IMethod, streamer = false) {\n const type = this.typeMap(method.type);\n const bump = indent + this.indentStr;\n\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 const fragment =\n params.length > 0 ? `\\n${params.join(this.paramDelimiter)}` : '';\n const callback = `callback: (readable: Readable) => Promise<${type.name}>,`;\n const bits = this.genericBits(method);\n const header =\n this.methodHeader(indent, method) +\n `${indent}public async Task<SdkResponse<${bits.success}, Exception>> ${method.name}${bits.generic}(` +\n (streamer ? `\\n${bump}${callback}` : '');\n\n return (\n header +\n fragment +\n `${fragment ? ',' : ''}\\n${bump}ITransportSettings? options = null)${\n bits.constraint\n }\\n{${indent}\\n`\n );\n }\n\n methodSignature(indent: string, method: IMethod): string {\n return this.methodHeaderDeclaration(indent, method, false);\n }\n\n httpPath(path: string, prefix?: string) {\n prefix = prefix || '';\n if (path.indexOf('{') >= 0) {\n return `$\"${path.replace(/{/gi, '{' + prefix)}\"`;\n }\n return `'${path}'`;\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 errorResponses(_indent: string, _method: IMethod) {\n return 'Exception';\n }\n\n argGroup(_indent: string, args: Arg[], prefix?: string) {\n prefix = prefix || '';\n const values = args.map(arg => `{ \"${arg}\", ${this.reserve(arg)} }`);\n const bump = this.bumper(this.indentStr) + this.indentStr;\n return args && args.length !== 0\n ? `new Values {\\n${bump}${values.join(\n `${this.argDelimiter.trim()}\\n${bump}${prefix}`\n )}}`\n : this.nullStr;\n }\n\n httpArgs(indent: string, method: IMethod) {\n let result = this.argFill('', 'options');\n // result = this.argFill(result, this.argGroup(indent, method.cookieArgs))\n // result = this.argFill(result, this.argGroup(indent, method.headerArgs))\n result = this.argFill(\n result,\n method.bodyArg ? method.bodyArg : this.nullStr\n );\n result = this.argFill(result, this.argGroup(indent, method.queryArgs));\n return result;\n }\n\n httpCall(indent: string, method: IMethod) {\n const bump = indent + this.indentStr;\n const args = this.httpArgs(bump, method);\n const dollah = method.pathArgs.length ? '$' : '';\n // const errors = `(${this.errorResponses(indent, method)})`\n const bits = this.genericBits(method);\n const fragment = `AuthRequest<${\n bits.success\n }, Exception>(HttpMethod.${firstCase(method.httpMethod)}, ${dollah}\"${\n method.endpoint\n }\"${args ? ', ' + args : ''})`;\n return `${indent}return await ${fragment};`;\n }\n\n encodePathParams(indent: string, method: IMethod): string {\n const bump = indent + this.indentStr;\n let encodings = '';\n if (method.pathParams.length > 0) {\n for (const param of method.pathParams) {\n if (param.doEncode()) {\n encodings += `${bump}${param.name} = SdkUtils.EncodeParam(${param.name});\\n`;\n }\n }\n }\n return encodings;\n }\n\n summary(indent: string, summary: string) {\n if (this.noComment || !summary) return '';\n const nl = summary.indexOf('\\n') >= 0 ? '\\n' : '';\n return this.commentHeader(\n indent,\n `<summary>${nl}${summary}${nl}</summary>`\n );\n }\n\n paramComment(param: IParameter) {\n return param.description\n ? `\\n<param name=\"${param.name}\">${describeParam(param)}</param>`\n : '';\n }\n\n returnComment(method: IMethod) {\n const type = method.returnType;\n if (type) {\n const mapped = this.typeMap(type.type);\n return `\\n\\n<returns><c>${mapped.name}</c> ${type.description} (${type.mediaType})</returns>\\n`;\n }\n const desc: string[] = [];\n method.okResponses.forEach(r => {\n const mapped = this.typeMap(r.type);\n desc.push(`<c>${mapped.name}</c> ${r.description} (${r.mediaType})`);\n });\n const lines = desc.join('\\n');\n return `\\n\\n<returns>\\n${lines}\\n</returns>\\n`;\n }\n\n declareEnumValue(indent: string, value: EnumValueType) {\n return `${indent}[EnumMember(Value = \"${value}\")]\n${indent}${this.reserve(value.toString())}`;\n }\n\n // TODO document properties in `typeHeader()` instead of inline\n // TODO create class constructor for all required parameters\n typeSignature(indent: string, type: IType) {\n const isEnum = type instanceof EnumType;\n const kind = isEnum ? 'enum' : 'class';\n const parent = isEnum ? '' : ' : SdkModel';\n return (\n this.commentHeader(indent, type.description) +\n `${indent}public ${kind} ${this.reserve(type.name)}${parent}\\n{\\n`\n );\n }\n\n typeMap(type: IType): IMappedType {\n super.typeMap(type);\n // all optional types are Nullable<T> and should have a \"default value\" of null\n // see https://stackoverflow.com/a/29153833 for discussion\n const mt = '';\n const quotes = '\"\"';\n const optional = this.nullStr;\n\n const csTypes: Record<string, IMappedType> = {\n any: { default: this.nullStr, name: 'object', optional },\n boolean: { default: mt, name: 'bool', optional },\n byte: { default: mt, name: 'byte', optional },\n date: { default: mt, name: 'DateTime', optional },\n datetime: { default: mt, name: 'DateTime', optional },\n double: { default: mt, name: 'double', optional },\n float: { default: mt, name: 'float', optional },\n int32: { default: mt, name: 'int', optional },\n int64: { default: mt, name: 'long', optional },\n integer: { default: mt, name: 'int', optional },\n number: { default: mt, name: 'double', optional },\n object: { default: this.nullStr, name: 'object', optional },\n password: { default: quotes, name: 'Password', optional },\n string: { default: quotes, name: 'string', optional },\n uri: { default: quotes, name: 'Url', optional },\n url: { default: quotes, name: 'Url', optional },\n void: { default: mt, name: 'void' },\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: this.nullStr, name: `${map.name}[]`, optional };\n case 'HashType':\n return {\n default: this.nullStr,\n name: `StringDictionary<${map.name}>`,\n optional,\n };\n case 'DelimArrayType':\n return {\n default: this.nullStr,\n name: `DelimArray<${map.name}>`,\n optional,\n };\n case 'EnumType':\n return { default: '', 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 (\n csTypes[type.name] || { default: this.nullStr, name: `${type.name}` }\n );\n } else {\n throw new Error('Cannot output a nameless type.');\n }\n }\n}\n"],"mappings":";;;;;;AA2BA,IAAAA,QAAA,GAAAC,OAAA;AASA,IAAAC,UAAA,GAAAD,OAAA;AAA0E,SAAAE,gBAAAC,GAAA,EAAAC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAD,GAAA,IAAAI,MAAA,CAAAC,cAAA,CAAAL,GAAA,EAAAC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAR,GAAA,CAAAC,GAAA,IAAAC,KAAA,WAAAF,GAAA;AAAA,SAAAG,eAAAM,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAF,CAAA,uCAAAC,CAAA,GAAAA,CAAA,GAAAE,MAAA,CAAAF,CAAA;AAAA,SAAAC,aAAAF,CAAA,EAAAI,CAAA,2BAAAJ,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAK,CAAA,GAAAL,CAAA,CAAAM,MAAA,CAAAC,WAAA,kBAAAF,CAAA,QAAAJ,CAAA,GAAAI,CAAA,CAAAG,IAAA,CAAAR,CAAA,EAAAI,CAAA,uCAAAH,CAAA,SAAAA,CAAA,YAAAQ,SAAA,yEAAAL,CAAA,GAAAD,MAAA,GAAAO,MAAA,EAAAV,CAAA;AAG1E,IAAMW,aAAa,GAAG,IAAIC,GAAG,CAAS,CACpC,UAAU,EACV,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,MAAM,EACN,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,KAAK,EACL,WAAW,EACX,UAAU,EACV,IAAI,EACJ,MAAM,EACN,MAAM,EACN,WAAW,EACX,KAAK,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EACV,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,KAAK,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,OAAO,EACP,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,SAAS,EACT,MAAM,EACN,UAAU,EACV,OAAO,CACR,CAAC;AAKK,MAAMC,SAAS,SAASC,gBAAO,CAAC;EAAAC,YAAA;IAAA,SAAAC,SAAA;IAAA1B,eAAA,mBAC1B,UAAU;IAAAA,eAAA,sBACP,EAAE;IAAAA,eAAA,iBACP,MAAM;IAAAA,eAAA,wBACC,KAAK;IAAAA,eAAA,qBACR,KAAK;IAAAA,eAAA,kBACR,MAAM;IAAAA,eAAA,oBACJ,WAAW;IAAAA,eAAA,uBAER,GAAG;IAAAA,eAAA,yBACD,KAAK;IAAAA,eAAA,wBACN,IAAI;IAAAA,eAAA,oBAER,IAAI;IAAAA,eAAA,qBACH,KAAK;IAAAA,eAAA,4BACE,KAAK;IAAAA,eAAA,uBACV,KAAK;IAAAA,eAAA,oBACR,GAAG;EAAA;EAEf2B,aAAaA,CAACC,MAAc,EAAEC,IAAwB,EAAE;IACtD,IAAI,IAAI,CAACC,SAAS,EAAE,OAAO,EAAE;IAC7B,OAAOD,IAAI,MAAAE,MAAA,CAAM,IAAAC,qBAAY,EAACH,IAAI,EAAED,MAAM,EAAE,MAAM,CAAC,UAAO,EAAE;EAC9D;EAEAK,cAAcA,CAACC,OAAe,EAAE;IAC9B,sQAAAH,MAAA,CAUF,IAAI,CAACJ,aAAa,CAAC,EAAE,EAAE,IAAI,CAACQ,WAAW,CAAC,CAAC,CAAC,gCAAAJ,MAAA,CAClB,IAAI,CAACK,MAAM;EAInC;EAEAC,cAAcA,CAACH,OAAe,EAAE;IAC9B,OAAO,KAAK;EACd;EAEAI,eAAeA,CAACJ,OAAe,EAAE;IAC/B,gKAAAH,MAAA,CAOF,IAAI,CAACJ,aAAa,CAAC,EAAE,EAAE,IAAI,CAACQ,WAAW,CAAC,CAAC,CAAC,gCAAAJ,MAAA,CAClB,IAAI,CAACK,MAAM,4BAAAL,MAAA,CAGpB,IAAI,CAACQ,WAAW,oCAAAR,MAAA,CAEpB,IAAI,CAACQ,WAAW,sDAAAR,MAAA,CACvB,IAAI,CAACS,UAAU;EAGnB;EAEAC,eAAeA,CAACb,MAAc,EAAE;IAC9B,UAAAG,MAAA,CAAUH,MAAM;EAGlB;EAEAc,OAAOA,CAACC,IAAY,EAAE;IACpB,IAAItB,aAAa,CAACuB,GAAG,CAACD,IAAI,CAAC,EAAE;MAC3B,OAAO,GAAG,GAAGA,IAAI;IACnB;IACA,OAAOA,IAAI;EACb;EAEAE,gBAAgBA,CAACjB,MAAc,EAAEkB,MAAe,EAAEC,KAAiB,EAAE;IACnE,IAAMC,IAAI,GACRD,KAAK,CAACE,QAAQ,KAAKC,kBAAO,GACtB,IAAI,CAACC,aAAa,CAACJ,KAAK,CAACC,IAAI,EAAEF,MAAM,CAAC,IAAIC,KAAK,CAACC,IAAI,GACpDD,KAAK,CAACC,IAAI;IAChB,IAAMI,MAAM,GAAG,IAAI,CAACC,OAAO,CAACL,IAAI,CAAC;IACjC,IAAMM,GAAG,GAAG,IAAI,CAACZ,OAAO,CAACK,KAAK,CAACJ,IAAI,CAAC;IACpC,IAAMY,IAAI,GAAGR,KAAK,CAACS,QAAQ,GAAG,EAAE,GAAG,GAAG;IACtC,IAAMC,UAAU,GAAGV,KAAK,CAACS,QAAQ,GAC7B,EAAE,GACFJ,MAAM,CAACM,QAAQ,SAAA3B,MAAA,CACTqB,MAAM,CAACM,QAAQ,IACrB,EAAE;IACN,UAAA3B,MAAA,CAAUH,MAAM,EAAAG,MAAA,CAAGqB,MAAM,CAACT,IAAI,EAAAZ,MAAA,CAAGwB,IAAI,OAAAxB,MAAA,CAAIuB,GAAG,EAAAvB,MAAA,CAAG0B,UAAU;EAC3D;EAEAE,eAAeA,CAAC/B,MAAc,EAAEgC,QAAmB,EAAU;IAC3D,IAAMZ,IAAI,GAAG,IAAI,CAACK,OAAO,CAACO,QAAQ,CAACZ,IAAI,CAAC;IAGxC,IAAIa,MAAM,GAAG,eAAe;IAC5B,IAAID,QAAQ,CAACJ,QAAQ,EAAE;MACrB,IAAIR,IAAI,CAACc,OAAO,EAAE;QAChBD,MAAM,UAAA9B,MAAA,CAAUiB,IAAI,CAACc,OAAO,MAAG;MACjC;IACF,CAAC,MAAM;MACL,IAAId,IAAI,CAACU,QAAQ,EAAE;QACjBG,MAAM,UAAA9B,MAAA,CAAUiB,IAAI,CAACU,QAAQ,MAAG;MAClC;IACF;IAEA,IAAMJ,GAAG,GAAG,IAAI,CAACZ,OAAO,CAACkB,QAAQ,CAACjB,IAAI,CAAC;IACvC,IAAMY,IAAI,GAAGK,QAAQ,CAACJ,QAAQ,GAAG,EAAE,GAAG,GAAG;IACzC,IAAIO,IAAI,GACNH,QAAQ,CAACZ,IAAI,YAAYgB,mBAAQ,MAAAjC,MAAA,CAC1BH,MAAM,sDACT,EAAE;IACR,IAAIgC,QAAQ,CAACK,eAAe,EAAE;MAC5BF,IAAI,OAAAhC,MAAA,CAAOH,MAAM,sBAAAG,MAAA,CAAkB6B,QAAQ,CAACM,QAAQ,WAAO;IAC7D;IACA,OACE,IAAI,CAACC,OAAO,CAACvC,MAAM,EAAE,IAAI,CAACwC,gBAAgB,CAACR,QAAQ,CAAC,CAAC,GACrDG,IAAI,MAAAhC,MAAA,CACDH,MAAM,aAAAG,MAAA,CAAUiB,IAAI,CAACL,IAAI,EAAAZ,MAAA,CAAGwB,IAAI,OAAAxB,MAAA,CAAIuB,GAAG,OAAAvB,MAAA,CAAI8B,MAAM,CAAE;EAE1D;EAEAQ,YAAYA,CAACzC,MAAc,EAAEkB,MAAe,EAAE;IAAA,IAAAwB,mBAAA;IAC5C,IAAMtB,IAAI,GAAG,IAAI,CAACK,OAAO,CAACP,MAAM,CAACE,IAAI,CAAC;IACtC,IAAMuB,IAAI,IAAAD,mBAAA,GAAGxB,MAAM,CAAC0B,WAAW,cAAAF,mBAAA,uBAAlBA,mBAAA,CAAoBG,IAAI,CAAC,CAAC;IACvC,IAAIC,WAAW,GACb,CAACH,IAAI,MAAAxC,MAAA,CAAMwC,IAAI,YAAS,EAAE,OAAAxC,MAAA,CACvBe,MAAM,CAAC6B,UAAU,OAAA5C,MAAA,CAAIe,MAAM,CAAC8B,QAAQ,UAAA7C,MAAA,CAAOiB,IAAI,CAACL,IAAI,CAAE;IAC3D,IAAIG,MAAM,CAAC+B,cAAc,CAAC,CAAC,EAAE;MAC3BH,WAAW,kEAAkE;IAC/E,CAAC,MAAM,IAAI5B,MAAM,CAACgC,gBAAgB,CAAC,CAAC,EAAE;MACpCJ,WAAW,8DAA8D;IAC3E;IAEAA,WAAW,IAAI,IAAI,CAACK,aAAa,CAACjC,MAAM,CAAC;IACzCA,MAAM,CAACkC,MAAM,CAACC,OAAO,CAAClC,KAAK,IAAK2B,WAAW,IAAI,IAAI,CAACQ,YAAY,CAACnC,KAAK,CAAE,CAAC;IACzE,IAAMoC,GAAG,GAAGrC,MAAM,CAACsC,UAAU,MAAArD,MAAA,CAAMH,MAAM,oCAA+B,EAAE;IAC1E,OAAO,IAAI,CAACD,aAAa,CAACC,MAAM,EAAE8C,WAAW,CAAC,GAAGS,GAAG;EACtD;EAEAE,WAAWA,CAACvC,MAAe,EAAE;IAC3B,IAAIwC,OAAO,GAAG,UAAU;IACxB,IAAIC,OAAO,GAAG,YAAY;IAC1B,IAAIC,UAAU,GAAG,yBAAyB;IAC1C,IAAI1C,MAAM,CAAC2C,UAAU,EAAE;MACrB,IAAMC,GAAG,GAAG5C,MAAM,CAAC2C,UAAU;MAC7B,IAAMzC,IAAI,GAAG,IAAI,CAACK,OAAO,CAACqC,GAAG,CAAC1C,IAAI,CAAC;MACnCsC,OAAO,GAAGtC,IAAI,CAACL,IAAI,KAAK,MAAM,GAAG,QAAQ,GAAGK,IAAI,CAACL,IAAI;MACrD4C,OAAO,GAAG,EAAE;MACZC,UAAU,GAAG,EAAE;IACjB;IACA,OAAO;MAAEF,OAAO;MAAEC,OAAO;MAAEC;IAAW,CAAC;EACzC;EAEAG,uBAAuBA,CAAC/D,MAAc,EAAEkB,MAAe,EAAoB;IAAA,IAAlB8C,QAAQ,GAAAlE,SAAA,CAAAmE,MAAA,QAAAnE,SAAA,QAAAoE,SAAA,GAAApE,SAAA,MAAG,KAAK;IACvE,IAAMsB,IAAI,GAAG,IAAI,CAACK,OAAO,CAACP,MAAM,CAACE,IAAI,CAAC;IACtC,IAAM+C,IAAI,GAAGnE,MAAM,GAAG,IAAI,CAACoE,SAAS;IAEpC,IAAMhB,MAAgB,GAAG,EAAE;IAC3B,IAAMiB,IAAI,GAAGnD,MAAM,CAACoD,SAAS;IAC7B,IAAID,IAAI,IAAIA,IAAI,CAACJ,MAAM,GAAG,CAAC,EACzBI,IAAI,CAAChB,OAAO,CAACkB,CAAC,IAAInB,MAAM,CAACoB,IAAI,CAAC,IAAI,CAACvD,gBAAgB,CAACkD,IAAI,EAAEjD,MAAM,EAAEqD,CAAC,CAAC,CAAC,CAAC;IACxE,IAAME,QAAQ,GACZrB,MAAM,CAACa,MAAM,GAAG,CAAC,QAAA9D,MAAA,CAAQiD,MAAM,CAACsB,IAAI,CAAC,IAAI,CAACC,cAAc,CAAC,IAAK,EAAE;IAClE,IAAMC,QAAQ,gDAAAzE,MAAA,CAAgDiB,IAAI,CAACL,IAAI,OAAI;IAC3E,IAAM8D,IAAI,GAAG,IAAI,CAACpB,WAAW,CAACvC,MAAM,CAAC;IACrC,IAAM4D,MAAM,GACV,IAAI,CAACrC,YAAY,CAACzC,MAAM,EAAEkB,MAAM,CAAC,MAAAf,MAAA,CAC9BH,MAAM,oCAAAG,MAAA,CAAiC0E,IAAI,CAACnB,OAAO,oBAAAvD,MAAA,CAAiBe,MAAM,CAACH,IAAI,EAAAZ,MAAA,CAAG0E,IAAI,CAAClB,OAAO,MAAG,IACnGK,QAAQ,QAAA7D,MAAA,CAAQgE,IAAI,EAAAhE,MAAA,CAAGyE,QAAQ,IAAK,EAAE,CAAC;IAE1C,OACEE,MAAM,GACNL,QAAQ,MAAAtE,MAAA,CACLsE,QAAQ,GAAG,GAAG,GAAG,EAAE,QAAAtE,MAAA,CAAKgE,IAAI,yCAAAhE,MAAA,CAC7B0E,IAAI,CAACjB,UAAU,SAAAzD,MAAA,CACXH,MAAM,OAAI;EAEpB;EAEA+E,eAAeA,CAAC/E,MAAc,EAAEkB,MAAe,EAAU;IACvD,OAAO,IAAI,CAAC6C,uBAAuB,CAAC/D,MAAM,EAAEkB,MAAM,EAAE,KAAK,CAAC;EAC5D;EAEA8D,QAAQA,CAACC,IAAY,EAAEC,MAAe,EAAE;IACtCA,MAAM,GAAGA,MAAM,IAAI,EAAE;IACrB,IAAID,IAAI,CAACE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;MAC1B,aAAAhF,MAAA,CAAY8E,IAAI,CAACG,OAAO,CAAC,KAAK,EAAE,GAAG,GAAGF,MAAM,CAAC;IAC/C;IACA,WAAA/E,MAAA,CAAW8E,IAAI;EACjB;EAEAI,aAAaA,CAACrF,MAAc,EAAEkB,MAAe,EAAE;IAC7C,IAAMiD,IAAI,GAAG,IAAI,CAACmB,MAAM,CAACtF,MAAM,CAAC;IAChC,OACE,IAAI,CAAC+E,eAAe,CAAC/E,MAAM,EAAEkB,MAAM,CAAC,GACpC,IAAI,CAACqE,gBAAgB,CAACpB,IAAI,EAAEjD,MAAM,CAAC,GACnC,IAAI,CAACsE,QAAQ,CAACrB,IAAI,EAAEjD,MAAM,CAAC,QAAAf,MAAA,CACtBH,MAAM,MAAG;EAElB;EAEAyF,cAAcA,CAACnF,OAAe,EAAEoF,OAAgB,EAAE;IAChD,OAAO,WAAW;EACpB;EAEAC,QAAQA,CAACrF,OAAe,EAAE+D,IAAW,EAAEa,MAAe,EAAE;IACtDA,MAAM,GAAGA,MAAM,IAAI,EAAE;IACrB,IAAMU,MAAM,GAAGvB,IAAI,CAACwB,GAAG,CAACnE,GAAG,WAAAvB,MAAA,CAAUuB,GAAG,UAAAvB,MAAA,CAAM,IAAI,CAACW,OAAO,CAACY,GAAG,CAAC,OAAI,CAAC;IACpE,IAAMyC,IAAI,GAAG,IAAI,CAACmB,MAAM,CAAC,IAAI,CAAClB,SAAS,CAAC,GAAG,IAAI,CAACA,SAAS;IACzD,OAAOC,IAAI,IAAIA,IAAI,CAACJ,MAAM,KAAK,CAAC,oBAAA9D,MAAA,CACXgE,IAAI,EAAAhE,MAAA,CAAGyF,MAAM,CAAClB,IAAI,IAAAvE,MAAA,CAC9B,IAAI,CAAC2F,YAAY,CAACjD,IAAI,CAAC,CAAC,QAAA1C,MAAA,CAAKgE,IAAI,EAAAhE,MAAA,CAAG+E,MAAM,CAC/C,CAAC,SACD,IAAI,CAACa,OAAO;EAClB;EAEAC,QAAQA,CAAChG,MAAc,EAAEkB,MAAe,EAAE;IACxC,IAAI+E,MAAM,GAAG,IAAI,CAACC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC;IAGxCD,MAAM,GAAG,IAAI,CAACC,OAAO,CACnBD,MAAM,EACN/E,MAAM,CAACiF,OAAO,GAAGjF,MAAM,CAACiF,OAAO,GAAG,IAAI,CAACJ,OACzC,CAAC;IACDE,MAAM,GAAG,IAAI,CAACC,OAAO,CAACD,MAAM,EAAE,IAAI,CAACN,QAAQ,CAAC3F,MAAM,EAAEkB,MAAM,CAACkF,SAAS,CAAC,CAAC;IACtE,OAAOH,MAAM;EACf;EAEAT,QAAQA,CAACxF,MAAc,EAAEkB,MAAe,EAAE;IACxC,IAAMiD,IAAI,GAAGnE,MAAM,GAAG,IAAI,CAACoE,SAAS;IACpC,IAAMC,IAAI,GAAG,IAAI,CAAC2B,QAAQ,CAAC7B,IAAI,EAAEjD,MAAM,CAAC;IACxC,IAAMmF,MAAM,GAAGnF,MAAM,CAACoF,QAAQ,CAACrC,MAAM,GAAG,GAAG,GAAG,EAAE;IAEhD,IAAMY,IAAI,GAAG,IAAI,CAACpB,WAAW,CAACvC,MAAM,CAAC;IACrC,IAAMuD,QAAQ,kBAAAtE,MAAA,CACZ0E,IAAI,CAACnB,OAAO,8BAAAvD,MAAA,CACa,IAAAoG,oBAAS,EAACrF,MAAM,CAAC6B,UAAU,CAAC,QAAA5C,MAAA,CAAKkG,MAAM,QAAAlG,MAAA,CAChEe,MAAM,CAAC8B,QAAQ,QAAA7C,MAAA,CACbkE,IAAI,GAAG,IAAI,GAAGA,IAAI,GAAG,EAAE,MAAG;IAC9B,UAAAlE,MAAA,CAAUH,MAAM,mBAAAG,MAAA,CAAgBsE,QAAQ;EAC1C;EAEAc,gBAAgBA,CAACvF,MAAc,EAAEkB,MAAe,EAAU;IACxD,IAAMiD,IAAI,GAAGnE,MAAM,GAAG,IAAI,CAACoE,SAAS;IACpC,IAAIoC,SAAS,GAAG,EAAE;IAClB,IAAItF,MAAM,CAACuF,UAAU,CAACxC,MAAM,GAAG,CAAC,EAAE;MAChC,KAAK,IAAM9C,KAAK,IAAID,MAAM,CAACuF,UAAU,EAAE;QACrC,IAAItF,KAAK,CAACuF,QAAQ,CAAC,CAAC,EAAE;UACpBF,SAAS,OAAArG,MAAA,CAAOgE,IAAI,EAAAhE,MAAA,CAAGgB,KAAK,CAACJ,IAAI,8BAAAZ,MAAA,CAA2BgB,KAAK,CAACJ,IAAI,SAAM;QAC9E;MACF;IACF;IACA,OAAOyF,SAAS;EAClB;EAEAjE,OAAOA,CAACvC,MAAc,EAAEuC,OAAe,EAAE;IACvC,IAAI,IAAI,CAACrC,SAAS,IAAI,CAACqC,OAAO,EAAE,OAAO,EAAE;IACzC,IAAMoE,EAAE,GAAGpE,OAAO,CAAC4C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;IACjD,OAAO,IAAI,CAACpF,aAAa,CACvBC,MAAM,cAAAG,MAAA,CACMwG,EAAE,EAAAxG,MAAA,CAAGoC,OAAO,EAAApC,MAAA,CAAGwG,EAAE,eAC/B,CAAC;EACH;EAEArD,YAAYA,CAACnC,KAAiB,EAAE;IAC9B,OAAOA,KAAK,CAACyB,WAAW,sBAAAzC,MAAA,CACFgB,KAAK,CAACJ,IAAI,SAAAZ,MAAA,CAAK,IAAAyG,wBAAa,EAACzF,KAAK,CAAC,gBACrD,EAAE;EACR;EAEAgC,aAAaA,CAACjC,MAAe,EAAE;IAC7B,IAAME,IAAI,GAAGF,MAAM,CAAC2C,UAAU;IAC9B,IAAIzC,IAAI,EAAE;MACR,IAAMI,MAAM,GAAG,IAAI,CAACC,OAAO,CAACL,IAAI,CAACA,IAAI,CAAC;MACtC,0BAAAjB,MAAA,CAA0BqB,MAAM,CAACT,IAAI,WAAAZ,MAAA,CAAQiB,IAAI,CAACwB,WAAW,QAAAzC,MAAA,CAAKiB,IAAI,CAACyF,SAAS;IAClF;IACA,IAAMC,IAAc,GAAG,EAAE;IACzB5F,MAAM,CAAC6F,WAAW,CAAC1D,OAAO,CAACnE,CAAC,IAAI;MAC9B,IAAMsC,MAAM,GAAG,IAAI,CAACC,OAAO,CAACvC,CAAC,CAACkC,IAAI,CAAC;MACnC0F,IAAI,CAACtC,IAAI,OAAArE,MAAA,CAAOqB,MAAM,CAACT,IAAI,WAAAZ,MAAA,CAAQjB,CAAC,CAAC0D,WAAW,QAAAzC,MAAA,CAAKjB,CAAC,CAAC2H,SAAS,MAAG,CAAC;IACtE,CAAC,CAAC;IACF,IAAMG,KAAK,GAAGF,IAAI,CAACpC,IAAI,CAAC,IAAI,CAAC;IAC7B,yBAAAvE,MAAA,CAAyB6G,KAAK;EAChC;EAEAC,gBAAgBA,CAACjH,MAAc,EAAEzB,KAAoB,EAAE;IACrD,UAAA4B,MAAA,CAAUH,MAAM,4BAAAG,MAAA,CAAwB5B,KAAK,YAAA4B,MAAA,CAC/CH,MAAM,EAAAG,MAAA,CAAG,IAAI,CAACW,OAAO,CAACvC,KAAK,CAAC2I,QAAQ,CAAC,CAAC,CAAC;EACvC;EAIAC,aAAaA,CAACnH,MAAc,EAAEoB,IAAW,EAAE;IACzC,IAAMgG,MAAM,GAAGhG,IAAI,YAAYgB,mBAAQ;IACvC,IAAMiF,IAAI,GAAGD,MAAM,GAAG,MAAM,GAAG,OAAO;IACtC,IAAME,MAAM,GAAGF,MAAM,GAAG,EAAE,GAAG,aAAa;IAC1C,OACE,IAAI,CAACrH,aAAa,CAACC,MAAM,EAAEoB,IAAI,CAACwB,WAAW,CAAC,MAAAzC,MAAA,CACzCH,MAAM,aAAAG,MAAA,CAAUkH,IAAI,OAAAlH,MAAA,CAAI,IAAI,CAACW,OAAO,CAACM,IAAI,CAACL,IAAI,CAAC,EAAAZ,MAAA,CAAGmH,MAAM,UAAO;EAEtE;EAEA7F,OAAOA,CAACL,IAAW,EAAe;IAChC,KAAK,CAACK,OAAO,CAACL,IAAI,CAAC;IAGnB,IAAMmG,EAAE,GAAG,EAAE;IACb,IAAMC,MAAM,GAAG,IAAI;IACnB,IAAM1F,QAAQ,GAAG,IAAI,CAACiE,OAAO;IAE7B,IAAM0B,OAAoC,GAAG;MAC3CC,GAAG,EAAE;QAAExF,OAAO,EAAE,IAAI,CAAC6D,OAAO;QAAEhF,IAAI,EAAE,QAAQ;QAAEe;MAAS,CAAC;MACxD6F,OAAO,EAAE;QAAEzF,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE,MAAM;QAAEe;MAAS,CAAC;MAChD8F,IAAI,EAAE;QAAE1F,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE,MAAM;QAAEe;MAAS,CAAC;MAC7C+F,IAAI,EAAE;QAAE3F,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE,UAAU;QAAEe;MAAS,CAAC;MACjDgG,QAAQ,EAAE;QAAE5F,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE,UAAU;QAAEe;MAAS,CAAC;MACrDiG,MAAM,EAAE;QAAE7F,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE,QAAQ;QAAEe;MAAS,CAAC;MACjDkG,KAAK,EAAE;QAAE9F,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE,OAAO;QAAEe;MAAS,CAAC;MAC/CmG,KAAK,EAAE;QAAE/F,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE,KAAK;QAAEe;MAAS,CAAC;MAC7CoG,KAAK,EAAE;QAAEhG,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE,MAAM;QAAEe;MAAS,CAAC;MAC9CqG,OAAO,EAAE;QAAEjG,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE,KAAK;QAAEe;MAAS,CAAC;MAC/CsG,MAAM,EAAE;QAAElG,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE,QAAQ;QAAEe;MAAS,CAAC;MACjDuG,MAAM,EAAE;QAAEnG,OAAO,EAAE,IAAI,CAAC6D,OAAO;QAAEhF,IAAI,EAAE,QAAQ;QAAEe;MAAS,CAAC;MAC3DwG,QAAQ,EAAE;QAAEpG,OAAO,EAAEsF,MAAM;QAAEzG,IAAI,EAAE,UAAU;QAAEe;MAAS,CAAC;MACzDyG,MAAM,EAAE;QAAErG,OAAO,EAAEsF,MAAM;QAAEzG,IAAI,EAAE,QAAQ;QAAEe;MAAS,CAAC;MACrD0G,GAAG,EAAE;QAAEtG,OAAO,EAAEsF,MAAM;QAAEzG,IAAI,EAAE,KAAK;QAAEe;MAAS,CAAC;MAC/C2G,GAAG,EAAE;QAAEvG,OAAO,EAAEsF,MAAM;QAAEzG,IAAI,EAAE,KAAK;QAAEe;MAAS,CAAC;MAC/C4G,IAAI,EAAE;QAAExG,OAAO,EAAEqF,EAAE;QAAExG,IAAI,EAAE;MAAO;IACpC,CAAC;IAED,IAAIK,IAAI,CAACuH,WAAW,EAAE;MAEpB,IAAM9C,GAAG,GAAG,IAAI,CAACpE,OAAO,CAACL,IAAI,CAACuH,WAAW,CAAC;MAC1C,QAAQvH,IAAI,CAACwH,SAAS;QACpB,KAAK,WAAW;UACd,OAAO;YAAE1G,OAAO,EAAE,IAAI,CAAC6D,OAAO;YAAEhF,IAAI,KAAAZ,MAAA,CAAK0F,GAAG,CAAC9E,IAAI,OAAI;YAAEe;UAAS,CAAC;QACnE,KAAK,UAAU;UACb,OAAO;YACLI,OAAO,EAAE,IAAI,CAAC6D,OAAO;YACrBhF,IAAI,sBAAAZ,MAAA,CAAsB0F,GAAG,CAAC9E,IAAI,MAAG;YACrCe;UACF,CAAC;QACH,KAAK,gBAAgB;UACnB,OAAO;YACLI,OAAO,EAAE,IAAI,CAAC6D,OAAO;YACrBhF,IAAI,gBAAAZ,MAAA,CAAgB0F,GAAG,CAAC9E,IAAI,MAAG;YAC/Be;UACF,CAAC;QACH,KAAK,UAAU;UACb,OAAO;YAAEI,OAAO,EAAE,EAAE;YAAEnB,IAAI,EAAEK,IAAI,CAACL;UAAK,CAAC;MAC3C;MACA,MAAM,IAAI8H,KAAK,8BAAA1I,MAAA,CAA8B2I,IAAI,CAACC,SAAS,CAAC3H,IAAI,CAAC,CAAE,CAAC;IACtE;IAEA,IAAIA,IAAI,CAACL,IAAI,EAAE;MACb,OACE0G,OAAO,CAACrG,IAAI,CAACL,IAAI,CAAC,IAAI;QAAEmB,OAAO,EAAE,IAAI,CAAC6D,OAAO;QAAEhF,IAAI,KAAAZ,MAAA,CAAKiB,IAAI,CAACL,IAAI;MAAG,CAAC;IAEzE,CAAC,MAAM;MACL,MAAM,IAAI8H,KAAK,CAAC,gCAAgC,CAAC;IACnD;EACF;AACF;AAACG,OAAA,CAAArJ,SAAA,GAAAA,SAAA"}
1
+ {"version":3,"file":"csharp.gen.js","names":["_codeGen","require","_sdkModels","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","reservedWords","Set","CSharpGen","CodeGen","constructor","arguments","commentHeader","indent","text","noComment","concat","commentBlock","modelsPrologue","_indent","warnEditing","apiRef","modelsEpilogue","methodsPrologue","packageName","apiVersion","methodsEpilogue","reserve","name","has","declareParameter","method","param","type","location","strBody","writeableType","mapped","typeMap","arg","pOpt","required","defaulting","optional","declareProperty","property","getset","default","attr","EnumType","hasSpecialNeeds","jsonName","summary","describeProperty","methodHeader","_method$description","head","description","trim","headComment","httpMethod","endpoint","responseIsBoth","responseIsBinary","returnComment","params","forEach","paramComment","dep","deprecated","genericBits","success","generic","constraint","returnType","ret","methodHeaderDeclaration","streamer","length","undefined","bump","indentStr","args","allParams","p","push","fragment","join","paramDelimiter","callback","bits","header","methodSignature","httpPath","path","prefix","indexOf","replace","declareMethod","bumper","encodePathParams","httpCall","errorResponses","_method","argGroup","values","map","argDelimiter","nullStr","httpArgs","result","argFill","body","bodyArg","query","queryArgs","formArgs","assignFormArgs","dollah","pathArgs","firstCase","encodings","pathParams","doEncode","nl","describeParam","mediaType","desc","okResponses","lines","declareEnumValue","toString","typeSignature","isEnum","kind","parent","mt","quotes","csTypes","any","boolean","byte","date","datetime","double","float","int32","int64","integer","number","object","password","string","uri","url","void","elementType","className","Error","JSON","stringify","exports"],"sources":["../src/csharp.gen.ts"],"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 { IMappedType } from './codeGen';\nimport { CodeGen, commentBlock } from './codeGen';\nimport type {\n Arg,\n EnumValueType,\n IMethod,\n IParameter,\n IProperty,\n IType,\n} from './sdkModels';\nimport { EnumType, describeParam, firstCase, strBody } from './sdkModels';\n\n// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/\nconst reservedWords = new Set<string>([\n 'abstract',\n 'as',\n 'base',\n 'bool',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'checked',\n 'class',\n 'const',\n 'continue',\n 'decimal',\n 'default',\n 'delegate',\n 'do ',\n 'double',\n 'else',\n 'enum',\n 'event',\n 'explicit',\n 'extern',\n 'false',\n 'finally',\n 'fixed',\n 'float',\n 'for',\n 'foreach',\n 'goto',\n 'if',\n 'implicit',\n 'in',\n 'int',\n 'interface',\n 'internal',\n 'is',\n 'lock',\n 'long',\n 'namespace',\n 'new',\n 'null',\n 'object',\n 'operator',\n 'out',\n 'override',\n 'params',\n 'private',\n 'protected',\n 'public',\n 'readonly',\n 'ref',\n 'return',\n 'sbyte',\n 'sealed',\n 'short',\n 'sizeof',\n 'stackalloc',\n 'static',\n 'string',\n 'struct',\n 'switch',\n 'this',\n 'throw',\n 'true',\n 'try',\n 'typeof',\n 'uint',\n 'ulong',\n 'unchecked',\n 'unsafe',\n 'ushort',\n 'using',\n 'virtual',\n 'void',\n 'volatile',\n 'while',\n]);\n\n/**\n * C# code generator\n */\nexport class CSharpGen extends CodeGen {\n codePath = './csharp';\n packagePath = '';\n itself = 'this';\n fileExtension = '.cs';\n commentStr = '// ';\n nullStr = 'null';\n transport = 'Transport';\n\n argDelimiter = ',';\n paramDelimiter = ',\\n';\n propDelimiter = '\\n';\n\n indentStr = ' ';\n endTypeStr = '\\n}';\n needsRequestTypes = false;\n willItStream = false;\n codeQuote = '\"';\n\n commentHeader(indent: string, text: string | undefined) {\n if (this.noComment) return '';\n return text ? `${commentBlock(text, indent, '/// ')}\\n` : '';\n }\n\n modelsPrologue(_indent: string) {\n return `#nullable enable\nusing System;\nusing System.Runtime.Serialization;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Converters;\nusing Looker.RTL;\nusing Url = System.String;\nusing Password = System.String;\n// ReSharper disable InconsistentNaming\n\n${this.commentHeader('', this.warnEditing())}\nnamespace Looker.SDK.API${this.apiRef}\n{\n\n`;\n }\n\n modelsEpilogue(_indent: string) {\n return '\\n}';\n }\n\n methodsPrologue(_indent: string) {\n return `#nullable enable\nusing System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Looker.RTL;\n// ReSharper disable InconsistentNaming\n\n${this.commentHeader('', this.warnEditing())}\nnamespace Looker.SDK.API${this.apiRef}\n{\n\n public class ${this.packageName}: ApiMethods\n {\n public ${this.packageName}(IAuthSession authSession): base(authSession, \"${\n this.apiVersion\n }\") { }\n`;\n }\n\n methodsEpilogue(indent: string) {\n return `${indent}}\n}\n`;\n }\n\n reserve(name: string) {\n if (reservedWords.has(name)) {\n return '@' + name;\n }\n return name;\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 const arg = this.reserve(param.name);\n const pOpt = param.required ? '' : '?';\n const defaulting = param.required\n ? ''\n : mapped.optional\n ? ` = ${mapped.optional}`\n : '';\n return `${indent}${mapped.name}${pOpt} ${arg}${defaulting}`;\n }\n\n declareProperty(indent: string, property: IProperty): string {\n const type = this.typeMap(property.type);\n // TODO notation for readonly support\n // let getset = property.readOnly ? '{ get; }' : '{ get; set; }'\n let getset = '{ get; set; }';\n if (property.required) {\n if (type.default) {\n getset += ` = ${type.default};`;\n }\n } else {\n if (type.optional) {\n getset += ` = ${type.optional};`;\n }\n }\n\n const arg = this.reserve(property.name);\n const pOpt = property.required ? '' : '?';\n let attr =\n property.type instanceof EnumType\n ? `${indent}[JsonConverter(typeof(StringEnumConverter))]\\n`\n : '';\n if (property.hasSpecialNeeds) {\n attr += `${indent}[JsonProperty(\"${property.jsonName}\")]\\n`;\n }\n return (\n this.summary(indent, this.describeProperty(property)) +\n attr +\n `${indent}public ${type.name}${pOpt} ${arg} ${getset}`\n );\n }\n\n methodHeader(indent: string, method: IMethod) {\n const type = this.typeMap(method.type);\n const head = method.description?.trim();\n let headComment =\n (head ? `${head}\\n\\n` : '') +\n `${method.httpMethod} ${method.endpoint} -> ${type.name}`;\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 headComment += this.returnComment(method);\n method.params.forEach(param => (headComment += this.paramComment(param)));\n const dep = method.deprecated ? `${indent}[Obsolete(\"Deprecated\")]\\n` : '';\n return this.commentHeader(indent, headComment) + dep;\n }\n\n genericBits(method: IMethod) {\n let success = 'TSuccess';\n let generic = '<TSuccess>';\n let constraint = ' where TSuccess : class';\n if (method.returnType) {\n const ret = method.returnType;\n const type = this.typeMap(ret.type);\n success = type.name === 'void' ? 'string' : type.name;\n generic = '';\n constraint = '';\n }\n return { success, generic, constraint };\n }\n\n methodHeaderDeclaration(indent: string, method: IMethod, streamer = false) {\n const type = this.typeMap(method.type);\n const bump = indent + this.indentStr;\n\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 const fragment =\n params.length > 0 ? `\\n${params.join(this.paramDelimiter)}` : '';\n const callback = `callback: (readable: Readable) => Promise<${type.name}>,`;\n const bits = this.genericBits(method);\n const header =\n this.methodHeader(indent, method) +\n `${indent}public async Task<SdkResponse<${bits.success}, Exception>> ${method.name}${bits.generic}(` +\n (streamer ? `\\n${bump}${callback}` : '');\n\n return (\n header +\n fragment +\n `${fragment ? ',' : ''}\\n${bump}ITransportSettings? options = null)${\n bits.constraint\n }\\n{${indent}\\n`\n );\n }\n\n methodSignature(indent: string, method: IMethod): string {\n return this.methodHeaderDeclaration(indent, method, false);\n }\n\n httpPath(path: string, prefix?: string) {\n prefix = prefix || '';\n if (path.indexOf('{') >= 0) {\n return `$\"${path.replace(/{/gi, '{' + prefix)}\"`;\n }\n return `'${path}'`;\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 errorResponses(_indent: string, _method: IMethod) {\n return 'Exception';\n }\n\n argGroup(_indent: string, args: Arg[], prefix?: string) {\n prefix = prefix || '';\n const values = args.map(arg => `{ \"${arg}\", ${this.reserve(arg)} }`);\n const bump = this.bumper(this.indentStr) + this.indentStr;\n return args && args.length !== 0\n ? `new Values {\\n${bump}${values.join(\n `${this.argDelimiter.trim()}\\n${bump}${prefix}`\n )}}`\n : this.nullStr;\n }\n\n httpArgs(indent: string, method: IMethod) {\n let result = this.argFill('', 'options');\n // result = this.argFill(result, this.argGroup(indent, method.cookieArgs))\n // result = this.argFill(result, this.argGroup(indent, method.headerArgs))\n let body = method.bodyArg ? method.bodyArg : this.nullStr;\n let query = this.argGroup(indent, method.queryArgs);\n const formArgs = this.assignFormArgs(method, body, query);\n body = formArgs.body;\n query = formArgs.query;\n result = this.argFill(result, body);\n result = this.argFill(result, query);\n return result;\n }\n\n httpCall(indent: string, method: IMethod) {\n const bump = indent + this.indentStr;\n const args = this.httpArgs(bump, method);\n const dollah = method.pathArgs.length ? '$' : '';\n // const errors = `(${this.errorResponses(indent, method)})`\n const bits = this.genericBits(method);\n const fragment = `AuthRequest<${\n bits.success\n }, Exception>(HttpMethod.${firstCase(method.httpMethod)}, ${dollah}\"${\n method.endpoint\n }\"${args ? ', ' + args : ''})`;\n return `${indent}return await ${fragment};`;\n }\n\n encodePathParams(indent: string, method: IMethod): string {\n const bump = indent + this.indentStr;\n let encodings = '';\n if (method.pathParams.length > 0) {\n for (const param of method.pathParams) {\n if (param.doEncode()) {\n encodings += `${bump}${param.name} = SdkUtils.EncodeParam(${param.name});\\n`;\n }\n }\n }\n return encodings;\n }\n\n summary(indent: string, summary: string) {\n if (this.noComment || !summary) return '';\n const nl = summary.indexOf('\\n') >= 0 ? '\\n' : '';\n return this.commentHeader(\n indent,\n `<summary>${nl}${summary}${nl}</summary>`\n );\n }\n\n paramComment(param: IParameter) {\n return param.description\n ? `\\n<param name=\"${param.name}\">${describeParam(param)}</param>`\n : '';\n }\n\n returnComment(method: IMethod) {\n const type = method.returnType;\n if (type) {\n const mapped = this.typeMap(type.type);\n return `\\n\\n<returns><c>${mapped.name}</c> ${type.description} (${type.mediaType})</returns>\\n`;\n }\n const desc: string[] = [];\n method.okResponses.forEach(r => {\n const mapped = this.typeMap(r.type);\n desc.push(`<c>${mapped.name}</c> ${r.description} (${r.mediaType})`);\n });\n const lines = desc.join('\\n');\n return `\\n\\n<returns>\\n${lines}\\n</returns>\\n`;\n }\n\n declareEnumValue(indent: string, value: EnumValueType) {\n return `${indent}[EnumMember(Value = \"${value}\")]\n${indent}${this.reserve(value.toString())}`;\n }\n\n // TODO document properties in `typeHeader()` instead of inline\n // TODO create class constructor for all required parameters\n typeSignature(indent: string, type: IType) {\n const isEnum = type instanceof EnumType;\n const kind = isEnum ? 'enum' : 'class';\n const parent = isEnum ? '' : ' : SdkModel';\n return (\n this.commentHeader(indent, type.description) +\n `${indent}public ${kind} ${this.reserve(type.name)}${parent}\\n{\\n`\n );\n }\n\n typeMap(type: IType): IMappedType {\n super.typeMap(type);\n // all optional types are Nullable<T> and should have a \"default value\" of null\n // see https://stackoverflow.com/a/29153833 for discussion\n const mt = '';\n const quotes = '\"\"';\n const optional = this.nullStr;\n\n const csTypes: Record<string, IMappedType> = {\n any: { default: this.nullStr, name: 'object', optional },\n boolean: { default: mt, name: 'bool', optional },\n byte: { default: mt, name: 'byte', optional },\n date: { default: mt, name: 'DateTime', optional },\n datetime: { default: mt, name: 'DateTime', optional },\n double: { default: mt, name: 'double', optional },\n float: { default: mt, name: 'float', optional },\n int32: { default: mt, name: 'int', optional },\n int64: { default: mt, name: 'long', optional },\n integer: { default: mt, name: 'int', optional },\n number: { default: mt, name: 'double', optional },\n object: { default: this.nullStr, name: 'object', optional },\n password: { default: quotes, name: 'Password', optional },\n string: { default: quotes, name: 'string', optional },\n uri: { default: quotes, name: 'Url', optional },\n url: { default: quotes, name: 'Url', optional },\n void: { default: mt, name: 'void' },\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: this.nullStr, name: `${map.name}[]`, optional };\n case 'HashType':\n return {\n default: this.nullStr,\n name: `StringDictionary<${map.name}>`,\n optional,\n };\n case 'DelimArrayType':\n return {\n default: this.nullStr,\n name: `DelimArray<${map.name}>`,\n optional,\n };\n case 'EnumType':\n return { default: '', 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 (\n csTypes[type.name] || { default: this.nullStr, name: `${type.name}` }\n );\n } else {\n throw new Error('Cannot output a nameless type.');\n }\n }\n}\n"],"mappings":"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"}