UNPKG

coldstitch

Version:

A code generation library, that helps you craft code snippets in code for multiple languages

1 lines 4.88 kB
{"version":3,"file":"kotlin.cjs","sources":["../../src/language/kotlin.ts"],"sourcesContent":["import { CodeImpl, type Code } from \"../code\";\nimport { formatOptionsForLanguage } from \"../format\";\nimport { CustomFormatter, ImportResolver, TypeRef } from \"../types\";\nimport { escapeStringQuotes, groupTypesByNamespace, stringify } from \"../utils\";\n\ntype TypeRefTraits = {\n packageName?: string;\n alias?: string;\n};\n\ninterface KotlinTypeRef extends TypeRef {\n qualifiedName: string;\n alias?: string;\n}\n\nexport function typeRef(typeName: string, { packageName, alias }: TypeRefTraits = {}): KotlinTypeRef {\n const parts = typeName.split(\".\");\n const name = parts[parts.length - 1];\n const namespace = packageName ?? parts.slice(0, -1).join(\".\");\n return {\n namespace,\n name,\n qualifiedName: packageName ? `${packageName}.${name}` : typeName,\n alias,\n language: \"kotlin\",\n toString: () => alias || name,\n };\n}\n\ntype FormatOptions = {\n formatter?: CustomFormatter;\n};\n\nexport function mapOf<T extends object>(value: T, options: FormatOptions = {}): Code {\n const { formatter } = options;\n const obj = stringify(\n value,\n {\n objectTokens: [\"mapOf<String, Any>(\", \")\"],\n arrayTokens: [\"arrayOf(\", \")\"],\n assignToken: \" to \",\n formatKey: (key) => `\"${key}\"`,\n formatValue: (value) => {\n if (formatter) {\n const formatted = formatter(value);\n if (formatted !== undefined) {\n return formatted;\n }\n }\n if (value === null || value === undefined) {\n return \"null\";\n }\n if (typeof value === \"string\") {\n return `\"${escapeStringQuotes(value)}\"`;\n }\n if (typeof value === \"number\") {\n return value.toString();\n }\n if (typeof value === \"bigint\") {\n return `${typeRef(\"java.math.BigInteger\")}(\"${value}\")`;\n }\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n throw new Error(`Unsupported value type: ${typeof value}`);\n },\n },\n formatOptionsForLanguage(\"kotlin\"),\n );\n return CodeImpl.fromString(obj);\n}\n\nexport function arrayOf<T>(value: T[], options: FormatOptions = {}): Code {\n // despite of the name, mapOf can handle array as top-level value\n // so we can just call mapOf with the array value\n return mapOf(value, options);\n}\n\nclass KotlinImportResolver extends ImportResolver<KotlinTypeRef> {\n resolve(types: KotlinTypeRef[]): string {\n const groups = groupTypesByNamespace(types);\n return Object.entries(groups)\n .map(([namespace, types]) => {\n const imports = types.map((type) => {\n const { alias, name } = type;\n return alias ? `import ${namespace}.${name} as ${alias}` : `import ${namespace}.${name}`;\n });\n return imports.join(\"\\n\");\n })\n .join(\"\\n\");\n }\n}\n\nexport function imports(): ImportResolver {\n return new KotlinImportResolver();\n}\n"],"names":["typeRef","typeName","packageName","alias","parts","name","mapOf","value","options","formatter","obj","stringify","key","formatted","escapeStringQuotes","formatOptionsForLanguage","CodeImpl","arrayOf","KotlinImportResolver","ImportResolver","types","groups","groupTypesByNamespace","namespace","type","imports"],"mappings":"yHAeO,SAASA,EAAQC,EAAkB,CAAE,YAAAC,EAAa,MAAAC,CAAM,EAAmB,CAAA,EAAmB,CAC7F,MAAAC,EAAQH,EAAS,MAAM,GAAG,EAC1BI,EAAOD,EAAMA,EAAM,OAAS,CAAC,EAE5B,MAAA,CACL,UAFgBF,GAAeE,EAAM,MAAM,EAAG,EAAE,EAAE,KAAK,GAAG,EAG1D,KAAAC,EACA,cAAeH,EAAc,GAAGA,CAAW,IAAIG,CAAI,GAAKJ,EACxD,MAAAE,EACA,SAAU,SACV,SAAU,IAAMA,GAASE,CAAA,CAE7B,CAMO,SAASC,EAAwBC,EAAUC,EAAyB,GAAU,CAC7E,KAAA,CAAE,UAAAC,CAAc,EAAAD,EAChBE,EAAMC,EAAA,UACVJ,EACA,CACE,aAAc,CAAC,sBAAuB,GAAG,EACzC,YAAa,CAAC,WAAY,GAAG,EAC7B,YAAa,OACb,UAAYK,GAAQ,IAAIA,CAAG,IAC3B,YAAcL,GAAU,CACtB,GAAIE,EAAW,CACP,MAAAI,EAAYJ,EAAUF,CAAK,EACjC,GAAIM,IAAc,OACT,OAAAA,CAEX,CACIN,GAAAA,GAAU,KACL,MAAA,OAEL,GAAA,OAAOA,GAAU,SACZ,MAAA,IAAIO,EAAAA,mBAAmBP,CAAK,CAAC,IAElC,GAAA,OAAOA,GAAU,SACnB,OAAOA,EAAM,WAEX,GAAA,OAAOA,GAAU,SACnB,MAAO,GAAGP,EAAQ,sBAAsB,CAAC,KAAKO,CAAK,KAEjD,GAAA,OAAOA,GAAU,UACnB,OAAOA,EAAQ,OAAS,QAE1B,MAAM,IAAI,MAAM,2BAA2B,OAAOA,CAAK,EAAE,CAC3D,CACF,EACAQ,EAAAA,yBAAyB,QAAQ,CAAA,EAE5B,OAAAC,EAAA,SAAS,WAAWN,CAAG,CAChC,CAEO,SAASO,EAAWV,EAAYC,EAAyB,GAAU,CAGjE,OAAAF,EAAMC,EAAOC,CAAO,CAC7B,CAEA,MAAMU,UAA6BC,EAAAA,cAA8B,CAC/D,QAAQC,EAAgC,CAChC,MAAAC,EAASC,wBAAsBF,CAAK,EACnC,OAAA,OAAO,QAAQC,CAAM,EACzB,IAAI,CAAC,CAACE,EAAWH,CAAK,IACLA,EAAM,IAAKI,GAAS,CAC5B,KAAA,CAAE,MAAArB,EAAO,KAAAE,CAAS,EAAAmB,EACjB,OAAArB,EAAQ,UAAUoB,CAAS,IAAIlB,CAAI,OAAOF,CAAK,GAAK,UAAUoB,CAAS,IAAIlB,CAAI,EAAA,CACvF,EACc,KAAK;AAAA,CAAI,CACzB,EACA,KAAK;AAAA,CAAI,CACd,CACF,CAEO,SAASoB,GAA0B,CACxC,OAAO,IAAIP,CACb"}