UNPKG

coldstitch

Version:

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

1 lines 3.67 kB
{"version":3,"file":"swift.cjs","sources":["../../src/language/swift.ts"],"sourcesContent":["import { Code, CodeImpl } from \"../code\";\nimport { formatOptionsForLanguage } from \"../format\";\nimport { CustomFormatter, ImportResolver, TypeRef } from \"../types\";\nimport { escapeStringQuotes, groupTypesByNamespace, stringify } from \"../utils\";\n\ntype TypeRefTraits = {\n module?: string;\n};\n\ninterface SwiftTypeRef extends TypeRef {\n module?: string;\n language: \"swift\";\n}\n\nexport function typeRef(typeName: string, { module }: TypeRefTraits = {}): SwiftTypeRef {\n return {\n namespace: module ?? \"\",\n name: typeName,\n language: \"swift\",\n toString: () => typeName,\n };\n}\n\ntype DictOptions = {\n formatter?: CustomFormatter;\n};\n\nexport function dict<T extends object>(value: T, options: DictOptions = {}): Code {\n const { formatter } = options;\n const obj = stringify(\n value,\n {\n objectTokens: [\"[\", \"]\"],\n arrayTokens: [\"[\", \"]\"],\n assignToken: \": \",\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 \"nil\";\n }\n if (typeof value === \"string\") {\n return `\"${escapeStringQuotes(value)}\"`;\n }\n if (typeof value === \"number\" || typeof value === \"bigint\") {\n return value.toString();\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(\"swift\"),\n );\n return CodeImpl.fromString(obj);\n}\n\nexport function list<T extends object>(value: T[]): Code {\n return dict(value);\n}\n\nclass SwiftImportResolver extends ImportResolver<SwiftTypeRef> {\n resolve(types: SwiftTypeRef[]): string {\n const packages = groupTypesByNamespace(types);\n const packageKeys = Object.keys(packages).sort();\n return packageKeys.map((packageName) => `import ${packageName}`).join(\"\\n\");\n }\n}\n\nexport function imports(): ImportResolver {\n return new SwiftImportResolver();\n}\n"],"names":["typeRef","typeName","module","dict","value","options","formatter","obj","stringify","key","formatted","escapeStringQuotes","formatOptionsForLanguage","CodeImpl","list","SwiftImportResolver","ImportResolver","types","packages","groupTypesByNamespace","packageName","imports"],"mappings":"yHAcO,SAASA,EAAQC,EAAkB,CAAE,OAAAC,CAAO,EAAmB,CAAA,EAAkB,CAC/E,MAAA,CACL,UAAWA,GAAU,GACrB,KAAMD,EACN,SAAU,QACV,SAAU,IAAMA,CAAA,CAEpB,CAMO,SAASE,EAAuBC,EAAUC,EAAuB,GAAU,CAC1E,KAAA,CAAE,UAAAC,CAAc,EAAAD,EAChBE,EAAMC,EAAA,UACVJ,EACA,CACE,aAAc,CAAC,IAAK,GAAG,EACvB,YAAa,CAAC,IAAK,GAAG,EACtB,YAAa,KACb,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,MAEL,GAAA,OAAOA,GAAU,SACZ,MAAA,IAAIO,EAAAA,mBAAmBP,CAAK,CAAC,IAEtC,GAAI,OAAOA,GAAU,UAAY,OAAOA,GAAU,SAChD,OAAOA,EAAM,WAEX,GAAA,OAAOA,GAAU,UACnB,OAAOA,EAAQ,OAAS,QAE1B,MAAM,IAAI,MAAM,2BAA2B,OAAOA,CAAK,EAAE,CAC3D,CACF,EACAQ,EAAAA,yBAAyB,OAAO,CAAA,EAE3B,OAAAC,EAAA,SAAS,WAAWN,CAAG,CAChC,CAEO,SAASO,EAAuBV,EAAkB,CACvD,OAAOD,EAAKC,CAAK,CACnB,CAEA,MAAMW,UAA4BC,EAAAA,cAA6B,CAC7D,QAAQC,EAA+B,CAC/B,MAAAC,EAAWC,wBAAsBF,CAAK,EAErC,OADa,OAAO,KAAKC,CAAQ,EAAE,KAAK,EAC5B,IAAKE,GAAgB,UAAUA,CAAW,EAAE,EAAE,KAAK;AAAA,CAAI,CAC5E,CACF,CAEO,SAASC,GAA0B,CACxC,OAAO,IAAIN,CACb"}