UNPKG

brick-codegen

Version:

Better React Native native module development

121 lines (119 loc) 4.85 kB
import { a as IOSPlatformGenerator, c as Generator, i as isIOSPlatformGenerator, n as PlatformRegistry, o as AndroidPlatformGenerator, r as isAndroidPlatformGenerator, s as Parser, t as Scanner } from "./scanner-DT8NcN4x.js"; //#region src/utils/type-mapping.ts const TYPE_MAPPINGS = { string: { typescript: "string", swift: "String", objectiveC: "NSString *", java: "String", kotlin: "String" }, number: { typescript: "number", swift: "Double", objectiveC: "double", java: "double", kotlin: "Double" }, boolean: { typescript: "boolean", swift: "Bool", objectiveC: "BOOL", java: "boolean", kotlin: "Boolean" }, void: { typescript: "void", swift: "Void", objectiveC: "void", java: "void", kotlin: "Unit" }, any: { typescript: "any", swift: "Any", objectiveC: "id", java: "Object", kotlin: "Any" } }; function mapTypeScriptType(tsType, platform) { if (tsType.startsWith("Promise<") && tsType.endsWith(">")) return mapTypeScriptType(tsType.slice(8, -1), platform); if (tsType.endsWith("[]")) { const elementType = tsType.slice(0, -2); if (elementType.startsWith("{") && elementType.endsWith("}")) switch (platform) { case "swift": return `[${elementType}]`; case "objectiveC": return "NSArray *"; case "java": return "ReadableArray"; case "kotlin": return `List<ReadableMap>`; default: return "Array"; } const mappedElementType = mapTypeScriptType(elementType, platform); switch (platform) { case "swift": return `[${mappedElementType}]`; case "objectiveC": return "NSArray *"; case "java": return "ReadableArray"; case "kotlin": return `List<${mappedElementType}>`; default: return "Array"; } } if (tsType.startsWith("{") && tsType.endsWith("}")) switch (platform) { case "swift": return tsType; case "objectiveC": return "id"; case "java": return "ReadableMap"; case "kotlin": return "ReadableMap"; default: return "Object"; } const mapping = TYPE_MAPPINGS[tsType]; if (mapping) return mapping[platform]; if (tsType.match(/^[A-Z][a-zA-Z0-9]*$/)) { console.log(`[type-mapping] Converting interface type '${tsType}' for platform '${platform}'`); switch (platform) { case "swift": return tsType; case "objectiveC": return "id"; case "java": return "ReadableMap"; case "kotlin": return "ReadableMap"; default: return "Object"; } } return TYPE_MAPPINGS.any?.[platform] || "Object"; } function generateMethodSignature(methodName, params, returnType, platform, isAsync = false) { switch (platform) { case "swift": return generateSwiftSignature(methodName, params, returnType, isAsync); case "objectiveC": return generateObjCSignature(methodName, params, returnType, isAsync); case "java": return generateJavaSignature(methodName, params, returnType, isAsync); case "kotlin": return generateKotlinSignature(methodName, params, returnType, isAsync); default: throw new Error(`Unsupported platform: ${platform}`); } } function generateSwiftSignature(methodName, params, returnType, isAsync) { return `func ${methodName}(${params.map((p) => `${p.name}: ${mapTypeScriptType(p.type, "swift")}`).join(", ")}) ${isAsync ? "async " : ""}throws -> ${mapTypeScriptType(returnType, "swift")}`; } function generateObjCSignature(methodName, params, returnType, isAsync) { let signature = `- (${isAsync ? "void" : mapTypeScriptType(returnType, "objectiveC")})${methodName}`; if (params.length > 0) { const paramStrings = params.map((param, index) => { const objcType = mapTypeScriptType(param.type, "objectiveC"); return index === 0 ? `:(${objcType})${param.name}` : `${param.name}:(${objcType})${param.name}`; }); signature += paramStrings.join(" "); } if (isAsync) signature += " resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject"; return signature; } function generateJavaSignature(methodName, params, returnType, isAsync) { const mappedReturnType = isAsync ? "void" : mapTypeScriptType(returnType, "java"); const paramList = params.map((p) => `${mapTypeScriptType(p.type, "java")} ${p.name}`); if (isAsync) paramList.push("Promise promise"); return `public ${mappedReturnType} ${methodName}(${paramList.join(", ")})`; } function generateKotlinSignature(methodName, params, returnType, isAsync) { const mappedReturnType = isAsync ? "Unit" : mapTypeScriptType(returnType, "kotlin"); const paramList = params.map((p) => `${p.name}: ${mapTypeScriptType(p.type, "kotlin")}`); if (isAsync) paramList.push("promise: Promise"); return `fun ${methodName}(${paramList.join(", ")}): ${mappedReturnType}`; } //#endregion export { AndroidPlatformGenerator, Generator, IOSPlatformGenerator, Parser, PlatformRegistry, Scanner, TYPE_MAPPINGS, generateMethodSignature, isAndroidPlatformGenerator, isIOSPlatformGenerator, mapTypeScriptType }; //# sourceMappingURL=index.js.map