one
Version:
One is a React framework for web, iOS, and Android apps.
1 lines • 6.18 kB
Source Map (JSON)
{"version":3,"file":"swiftPackageModule.js","names":[],"sources":["esm/vite/plugins/swiftPackageModule.js"],"sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { swiftPackageDirOf, swiftPackageId } from \"vxrn/swift-package-id\";\nimport { methodSubscribed, methodWired, renderMethodCall, renderViewWires, toNativeSourceStructs } from \"./nativeSourceWires\";\nfunction renderSwiftPackageModule(id, platform, root) {\n if (platform !== \"ios\") {\n throw new Error(\n `[one] ${id} is Swift source and cannot be imported into an Android build; use an .android.ts entry`\n );\n }\n const appManifest = join(root, \"package.json\");\n const app = existsSync(appManifest) ? JSON.parse(readFileSync(appManifest, \"utf8\")) : {};\n const packageDir = swiftPackageDirOf(id);\n if (!packageDir) {\n throw new Error(\n `[one] ${id} is not inside a swift package (no Package.swift above it)`\n );\n }\n const packageName = swiftPackageId(packageDir);\n if (Object.hasOwn(app.dependencies ?? {}, \"expo\") || Object.hasOwn(app.devDependencies ?? {}, \"expo\")) {\n const podspec = join(root, \"ios\", \"OneSwiftPackages\", packageName, `${packageName}.podspec`);\n if (!existsSync(podspec)) {\n throw new Error(\n `[one] ${id} needs one prebuild, or Expo prebuild with nativeSource enabled in the vxrn config plugin and ios generated`\n );\n }\n }\n const requireFromFile = createRequire(id);\n const { writeNativeSourceDeclaration, writeSwiftPackageArtifacts } = requireFromFile(\n \"vxrn/native-source-contract\"\n );\n const contract = writeNativeSourceDeclaration(id);\n const artifacts = writeSwiftPackageArtifacts(packageDir);\n const hash = artifacts.hash;\n const watchFiles = Object.keys(artifacts.files).map((file) => join(packageDir, file));\n const fill = /@main\\s+struct\\s+\\w+\\s*:\\s*(SwiftUI\\.)?App\\b/.test(\n readFileSync(id, \"utf8\")\n );\n const oneRoot = dirname(requireFromFile.resolve(\"one/package.json\"));\n const swiftHost = join(oneRoot, \"dist/esm/platform/swift/index.native.js\");\n const nativeSource = join(oneRoot, \"dist/esm/platform/native-source/index.native.js\");\n const wireModule = join(oneRoot, \"dist/esm/platform/native-source/wire.native.js\");\n const eventsModule = join(oneRoot, \"dist/esm/platform/native-source/events.native.js\");\n const needsWire = contract.modules.some((module) => module.methods.some(methodWired));\n const needsEvents = contract.modules.some((module) => module.methods.some(methodSubscribed));\n const structs = needsWire || needsEvents ? `\nconst nativeSourceStructs = ${JSON.stringify(toNativeSourceStructs(contract.structs))}\n` : \"\";\n const exports = contract.modules.map(\n (module) => `export const ${module.name} = Object.freeze({${module.methods.map((method) => renderMethodCall(`${packageName}.${module.name}`, method, hash)).join(\",\")}})`\n ).join(\"\\n\");\n const views = contract.views.map(\n (view) => `export function ${view.name}(props) { return createElement(SwiftPackageView, { packageName: ${JSON.stringify(packageName)}, view: ${JSON.stringify(view.name)}, contractHash: ${JSON.stringify(hash)}, props, fill: false${renderViewWires(view, contract.structs)} }) }`\n ).join(\"\\n\");\n const code = `${contract.modules.length > 0 ? `import { callNativeSource } from ${JSON.stringify(nativeSource)}\n` : \"\"}${needsWire ? `import { encodeNativeSourceArgs, decodeNativeSourceResult } from ${JSON.stringify(wireModule)}\n` : \"\"}${needsEvents ? `import { subscribeNativeSourceEvent } from ${JSON.stringify(eventsModule)}\n` : \"\"}${contract.defaultView || views ? `import { createElement } from 'react'\nimport { SwiftPackageView } from ${JSON.stringify(swiftHost)}\n` : \"\"}${structs}${contract.defaultView ? `export default function SwiftPackage(props) {\n return createElement(SwiftPackageView, { packageName: ${JSON.stringify(packageName)}, view: '', contractHash: '', props, fill: ${fill} })\n}\n` : \"\"}${exports}\n${views}\n`;\n return { code, watchFiles };\n}\nexport {\n renderSwiftPackageModule\n};\n//# sourceMappingURL=swiftPackageModule.js.map\n"],"mappings":";;;;;;;AAKA,SAAS,yBAAyB,IAAI,UAAU,MAAM;CACpD,IAAI,aAAa,OAAO;EACtB,MAAM,IAAI,MACR,SAAS,GAAG,wFACd;CACF;CACA,MAAM,cAAc,KAAK,MAAM,cAAc;CAC7C,MAAM,MAAM,WAAW,WAAW,IAAI,KAAK,MAAM,aAAa,aAAa,MAAM,CAAC,IAAI,CAAC;CACvF,MAAM,aAAa,kBAAkB,EAAE;CACvC,IAAI,CAAC,YAAY;EACf,MAAM,IAAI,MACR,SAAS,GAAG,2DACd;CACF;CACA,MAAM,cAAc,eAAe,UAAU;CAC7C,IAAI,OAAO,OAAO,IAAI,gBAAgB,CAAC,GAAG,MAAM,KAAK,OAAO,OAAO,IAAI,mBAAmB,CAAC,GAAG,MAAM,GAAG;EACrG,MAAM,UAAU,KAAK,MAAM,OAAO,oBAAoB,aAAa,GAAG,YAAY,SAAS;EAC3F,IAAI,CAAC,WAAW,OAAO,GAAG;GACxB,MAAM,IAAI,MACR,SAAS,GAAG,4GACd;EACF;CACF;CACA,MAAM,kBAAkB,cAAc,EAAE;CACxC,MAAM,EAAE,8BAA8B,+BAA+B,gBACnE,6BACF;CACA,MAAM,WAAW,6BAA6B,EAAE;CAChD,MAAM,YAAY,2BAA2B,UAAU;CACvD,MAAM,OAAO,UAAU;CACvB,MAAM,aAAa,OAAO,KAAK,UAAU,KAAK,CAAC,CAAC,KAAK,SAAS,KAAK,YAAY,IAAI,CAAC;CACpF,MAAM,OAAO,+CAA+C,KAC1D,aAAa,IAAI,MAAM,CACzB;CACA,MAAM,UAAU,QAAQ,gBAAgB,QAAQ,kBAAkB,CAAC;CACnE,MAAM,YAAY,KAAK,SAAS,yCAAyC;CACzE,MAAM,eAAe,KAAK,SAAS,iDAAiD;CACpF,MAAM,aAAa,KAAK,SAAS,gDAAgD;CACjF,MAAM,eAAe,KAAK,SAAS,kDAAkD;CACrF,MAAM,YAAY,SAAS,QAAQ,MAAM,WAAW,OAAO,QAAQ,KAAK,WAAW,CAAC;CACpF,MAAM,cAAc,SAAS,QAAQ,MAAM,WAAW,OAAO,QAAQ,KAAK,gBAAgB,CAAC;CAC3F,MAAM,UAAU,aAAa,cAAc;8BACf,KAAK,UAAU,sBAAsB,SAAS,OAAO,CAAC,EAAE;IAClF;CACF,MAAM,UAAU,SAAS,QAAQ,KAC9B,WAAW,gBAAgB,OAAO,KAAK,oBAAoB,OAAO,QAAQ,KAAK,WAAW,iBAAiB,GAAG,YAAY,GAAG,OAAO,QAAQ,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,GACxK,CAAC,CAAC,KAAK,IAAI;CACX,MAAM,QAAQ,SAAS,MAAM,KAC1B,SAAS,mBAAmB,KAAK,KAAK,kEAAkE,KAAK,UAAU,WAAW,EAAE,UAAU,KAAK,UAAU,KAAK,IAAI,EAAE,kBAAkB,KAAK,UAAU,IAAI,EAAE,sBAAsB,gBAAgB,MAAM,SAAS,OAAO,EAAE,MAChR,CAAC,CAAC,KAAK,IAAI;CACX,MAAM,OAAO,GAAG,SAAS,QAAQ,SAAS,IAAI,oCAAoC,KAAK,UAAU,YAAY,EAAE;IAC7G,KAAK,YAAY,oEAAoE,KAAK,UAAU,UAAU,EAAE;IAChH,KAAK,cAAc,8CAA8C,KAAK,UAAU,YAAY,EAAE;IAC9F,KAAK,SAAS,eAAe,QAAQ;mCACN,KAAK,UAAU,SAAS,EAAE;IACzD,KAAK,UAAU,SAAS,cAAc;0DACgB,KAAK,UAAU,WAAW,EAAE,6CAA6C,KAAK;;IAEpI,KAAK,QAAQ;EACf,MAAM;;CAEN,OAAO;EAAE;EAAM;CAAW;AAC5B"}