nitrogen 0.2.23 → 0.29.4

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.
Files changed (333) hide show
  1. package/README.md +15 -109
  2. package/lib/Logger.d.ts +10 -0
  3. package/lib/Logger.js +56 -0
  4. package/lib/autolinking/Autolinking.d.ts +8 -0
  5. package/lib/autolinking/Autolinking.js +1 -0
  6. package/lib/autolinking/android/createCMakeExtension.d.ts +6 -0
  7. package/lib/autolinking/android/createCMakeExtension.js +106 -0
  8. package/lib/autolinking/android/createGradleExtension.d.ts +5 -0
  9. package/lib/autolinking/android/createGradleExtension.js +36 -0
  10. package/lib/autolinking/android/createHybridObjectInitializer.d.ts +2 -0
  11. package/lib/autolinking/android/createHybridObjectInitializer.js +159 -0
  12. package/lib/autolinking/createAndroidAutolinking.d.ts +11 -0
  13. package/lib/autolinking/createAndroidAutolinking.js +13 -0
  14. package/lib/autolinking/createIOSAutolinking.d.ts +5 -0
  15. package/lib/autolinking/createIOSAutolinking.js +19 -0
  16. package/lib/autolinking/ios/createHybridObjectInitializer.d.ts +9 -0
  17. package/lib/autolinking/ios/createHybridObjectInitializer.js +97 -0
  18. package/lib/autolinking/ios/createPodspecRubyExtension.d.ts +5 -0
  19. package/lib/autolinking/ios/createPodspecRubyExtension.js +69 -0
  20. package/lib/autolinking/ios/createSwiftCxxBridge.d.ts +2 -0
  21. package/lib/autolinking/ios/createSwiftCxxBridge.js +117 -0
  22. package/lib/autolinking/ios/createSwiftUmbrellaHeader.d.ts +3 -0
  23. package/lib/autolinking/ios/createSwiftUmbrellaHeader.js +74 -0
  24. package/lib/config/NitroConfig.d.ts +52 -0
  25. package/lib/config/NitroConfig.js +112 -0
  26. package/lib/config/NitroUserConfig.d.ts +22 -0
  27. package/lib/config/NitroUserConfig.js +88 -0
  28. package/lib/config/getConfig.d.ts +2 -0
  29. package/lib/config/getConfig.js +84 -0
  30. package/lib/createGitAttributes.d.ts +1 -0
  31. package/lib/createGitAttributes.js +11 -0
  32. package/lib/createPlatformSpec.d.ts +4 -0
  33. package/lib/createPlatformSpec.js +127 -0
  34. package/lib/getFiles.d.ts +1 -0
  35. package/lib/getFiles.js +28 -0
  36. package/lib/getPlatformSpecs.d.ts +17 -0
  37. package/lib/getPlatformSpecs.js +153 -0
  38. package/lib/index.d.ts +2 -0
  39. package/lib/index.js +113 -10
  40. package/lib/init.d.ts +1 -0
  41. package/lib/init.js +123 -0
  42. package/lib/nitrogen.d.ts +11 -0
  43. package/lib/nitrogen.js +165 -0
  44. package/lib/prettifyDirectory.d.ts +1 -0
  45. package/lib/prettifyDirectory.js +27 -0
  46. package/lib/syntax/BridgedType.d.ts +41 -0
  47. package/lib/syntax/BridgedType.js +1 -0
  48. package/lib/syntax/CodeNode.d.ts +23 -0
  49. package/lib/syntax/CodeNode.js +1 -0
  50. package/lib/syntax/HybridObjectSpec.d.ts +13 -0
  51. package/lib/syntax/HybridObjectSpec.js +1 -0
  52. package/lib/syntax/Method.d.ts +41 -0
  53. package/lib/syntax/Method.js +108 -0
  54. package/lib/syntax/Parameter.d.ts +15 -0
  55. package/lib/syntax/Parameter.js +65 -0
  56. package/lib/syntax/Property.d.ts +50 -0
  57. package/lib/syntax/Property.js +147 -0
  58. package/lib/syntax/SourceFile.d.ts +70 -0
  59. package/lib/syntax/SourceFile.js +7 -0
  60. package/lib/syntax/c++/CppEnum.d.ts +6 -0
  61. package/lib/syntax/c++/CppEnum.js +110 -0
  62. package/lib/syntax/c++/CppHybridObject.d.ts +3 -0
  63. package/lib/syntax/c++/CppHybridObject.js +146 -0
  64. package/lib/syntax/c++/CppHybridObjectRegistration.d.ts +17 -0
  65. package/lib/syntax/c++/CppHybridObjectRegistration.js +18 -0
  66. package/lib/syntax/c++/CppStruct.d.ts +3 -0
  67. package/lib/syntax/c++/CppStruct.js +108 -0
  68. package/lib/syntax/c++/CppUnion.d.ts +6 -0
  69. package/lib/syntax/c++/CppUnion.js +88 -0
  70. package/lib/syntax/c++/getForwardDeclaration.d.ts +3 -0
  71. package/lib/syntax/c++/getForwardDeclaration.js +14 -0
  72. package/lib/syntax/c++/includeNitroHeader.d.ts +7 -0
  73. package/lib/syntax/c++/includeNitroHeader.js +34 -0
  74. package/lib/syntax/createType.d.ts +15 -0
  75. package/lib/syntax/createType.js +303 -0
  76. package/lib/syntax/getAllTypes.d.ts +3 -0
  77. package/lib/syntax/getAllTypes.js +11 -0
  78. package/lib/syntax/getCustomTypeConfig.d.ts +8 -0
  79. package/lib/syntax/getCustomTypeConfig.js +53 -0
  80. package/lib/syntax/getHybridObjectName.d.ts +36 -0
  81. package/lib/syntax/getHybridObjectName.js +10 -0
  82. package/lib/syntax/getInterfaceProperties.d.ts +4 -0
  83. package/lib/syntax/getInterfaceProperties.js +9 -0
  84. package/lib/syntax/getReferencedTypes.d.ts +2 -0
  85. package/lib/syntax/getReferencedTypes.js +47 -0
  86. package/lib/syntax/helpers.d.ts +13 -0
  87. package/lib/syntax/helpers.js +53 -0
  88. package/lib/syntax/isCoreType.d.ts +9 -0
  89. package/lib/syntax/isCoreType.js +47 -0
  90. package/lib/syntax/kotlin/FbjniHybridObject.d.ts +3 -0
  91. package/lib/syntax/kotlin/FbjniHybridObject.js +261 -0
  92. package/lib/syntax/kotlin/JNINativeRegistrations.d.ts +8 -0
  93. package/lib/syntax/kotlin/JNINativeRegistrations.js +7 -0
  94. package/lib/syntax/kotlin/KotlinBoxedPrimitive.d.ts +7 -0
  95. package/lib/syntax/kotlin/KotlinBoxedPrimitive.js +17 -0
  96. package/lib/syntax/kotlin/KotlinCxxBridgedType.d.ts +19 -0
  97. package/lib/syntax/kotlin/KotlinCxxBridgedType.js +893 -0
  98. package/lib/syntax/kotlin/KotlinEnum.d.ts +3 -0
  99. package/lib/syntax/kotlin/KotlinEnum.js +113 -0
  100. package/lib/syntax/kotlin/KotlinFunction.d.ts +3 -0
  101. package/lib/syntax/kotlin/KotlinFunction.js +256 -0
  102. package/lib/syntax/kotlin/KotlinHybridObject.d.ts +3 -0
  103. package/lib/syntax/kotlin/KotlinHybridObject.js +177 -0
  104. package/lib/syntax/kotlin/KotlinHybridObjectRegistration.d.ts +17 -0
  105. package/lib/syntax/kotlin/KotlinHybridObjectRegistration.js +26 -0
  106. package/lib/syntax/kotlin/KotlinStruct.d.ts +3 -0
  107. package/lib/syntax/kotlin/KotlinStruct.js +172 -0
  108. package/lib/syntax/kotlin/KotlinVariant.d.ts +3 -0
  109. package/lib/syntax/kotlin/KotlinVariant.js +191 -0
  110. package/lib/syntax/swift/SwiftCxxBridgedType.d.ts +21 -0
  111. package/lib/syntax/swift/SwiftCxxBridgedType.js +819 -0
  112. package/lib/syntax/swift/SwiftCxxTypeHelper.d.ts +17 -0
  113. package/lib/syntax/swift/SwiftCxxTypeHelper.js +613 -0
  114. package/lib/syntax/swift/SwiftEnum.d.ts +3 -0
  115. package/lib/syntax/swift/SwiftEnum.js +52 -0
  116. package/lib/syntax/swift/SwiftFunction.d.ts +3 -0
  117. package/lib/syntax/swift/SwiftFunction.js +83 -0
  118. package/lib/syntax/swift/SwiftHybridObject.d.ts +3 -0
  119. package/lib/syntax/swift/SwiftHybridObject.js +103 -0
  120. package/lib/syntax/swift/SwiftHybridObjectBridge.d.ts +11 -0
  121. package/lib/syntax/swift/SwiftHybridObjectBridge.js +451 -0
  122. package/lib/syntax/swift/SwiftHybridObjectRegistration.d.ts +19 -0
  123. package/lib/syntax/swift/SwiftHybridObjectRegistration.js +42 -0
  124. package/lib/syntax/swift/SwiftStruct.d.ts +3 -0
  125. package/lib/syntax/swift/SwiftStruct.js +75 -0
  126. package/lib/syntax/swift/SwiftVariant.d.ts +3 -0
  127. package/lib/syntax/swift/SwiftVariant.js +58 -0
  128. package/lib/syntax/types/ArrayBufferType.d.ts +10 -0
  129. package/lib/syntax/types/ArrayBufferType.js +37 -0
  130. package/lib/syntax/types/ArrayType.d.ts +12 -0
  131. package/lib/syntax/types/ArrayType.js +52 -0
  132. package/lib/syntax/types/BigIntType.d.ts +10 -0
  133. package/lib/syntax/types/BigIntType.js +27 -0
  134. package/lib/syntax/types/BooleanType.d.ts +10 -0
  135. package/lib/syntax/types/BooleanType.js +27 -0
  136. package/lib/syntax/types/CustomType.d.ts +14 -0
  137. package/lib/syntax/types/CustomType.js +36 -0
  138. package/lib/syntax/types/DateType.d.ts +10 -0
  139. package/lib/syntax/types/DateType.js +35 -0
  140. package/lib/syntax/types/EnumType.d.ts +23 -0
  141. package/lib/syntax/types/EnumType.js +101 -0
  142. package/lib/syntax/types/ErrorType.d.ts +11 -0
  143. package/lib/syntax/types/ErrorType.js +37 -0
  144. package/lib/syntax/types/FunctionType.d.ts +29 -0
  145. package/lib/syntax/types/FunctionType.js +147 -0
  146. package/lib/syntax/types/HybridObjectBaseType.d.ts +11 -0
  147. package/lib/syntax/types/HybridObjectBaseType.js +38 -0
  148. package/lib/syntax/types/HybridObjectType.d.ts +23 -0
  149. package/lib/syntax/types/HybridObjectType.js +131 -0
  150. package/lib/syntax/types/MapType.d.ts +10 -0
  151. package/lib/syntax/types/MapType.js +37 -0
  152. package/lib/syntax/types/NamedWrappingType.d.ts +14 -0
  153. package/lib/syntax/types/NamedWrappingType.js +27 -0
  154. package/lib/syntax/types/NullType.d.ts +10 -0
  155. package/lib/syntax/types/NullType.js +23 -0
  156. package/lib/syntax/types/NumberType.d.ts +10 -0
  157. package/lib/syntax/types/NumberType.js +27 -0
  158. package/lib/syntax/types/OptionalType.d.ts +13 -0
  159. package/lib/syntax/types/OptionalType.js +59 -0
  160. package/lib/syntax/types/PromiseType.d.ts +16 -0
  161. package/lib/syntax/types/PromiseType.js +62 -0
  162. package/lib/syntax/types/RecordType.d.ts +13 -0
  163. package/lib/syntax/types/RecordType.js +47 -0
  164. package/lib/syntax/types/ResultWrappingType.d.ts +13 -0
  165. package/lib/syntax/types/ResultWrappingType.js +44 -0
  166. package/lib/syntax/types/StringType.d.ts +10 -0
  167. package/lib/syntax/types/StringType.js +35 -0
  168. package/lib/syntax/types/StructType.d.ts +14 -0
  169. package/lib/syntax/types/StructType.js +61 -0
  170. package/lib/syntax/types/TupleType.d.ts +12 -0
  171. package/lib/syntax/types/TupleType.js +39 -0
  172. package/lib/syntax/types/Type.d.ts +55 -0
  173. package/lib/syntax/types/Type.js +1 -0
  174. package/lib/syntax/types/VariantType.d.ts +19 -0
  175. package/lib/syntax/types/VariantType.js +75 -0
  176. package/lib/syntax/types/VoidType.d.ts +10 -0
  177. package/lib/syntax/types/VoidType.js +27 -0
  178. package/lib/syntax/types/getTypeAs.d.ts +2 -0
  179. package/lib/syntax/types/getTypeAs.js +12 -0
  180. package/lib/utils.d.ts +22 -0
  181. package/lib/utils.js +126 -0
  182. package/lib/views/CppHybridViewComponent.d.ts +14 -0
  183. package/lib/views/CppHybridViewComponent.js +254 -0
  184. package/lib/views/createHostComponentJs.d.ts +3 -0
  185. package/lib/views/createHostComponentJs.js +27 -0
  186. package/lib/views/kotlin/KotlinHybridViewManager.d.ts +3 -0
  187. package/lib/views/kotlin/KotlinHybridViewManager.js +229 -0
  188. package/lib/views/swift/SwiftHybridViewManager.d.ts +3 -0
  189. package/lib/views/swift/SwiftHybridViewManager.js +131 -0
  190. package/lib/writeFile.d.ts +5 -0
  191. package/lib/writeFile.js +19 -0
  192. package/package.json +58 -29
  193. package/src/Logger.ts +63 -0
  194. package/src/autolinking/Autolinking.ts +9 -0
  195. package/src/autolinking/android/createCMakeExtension.ts +123 -0
  196. package/src/autolinking/android/createGradleExtension.ts +43 -0
  197. package/src/autolinking/android/createHybridObjectInitializer.ts +174 -0
  198. package/src/autolinking/createAndroidAutolinking.ts +28 -0
  199. package/src/autolinking/createIOSAutolinking.ts +24 -0
  200. package/src/autolinking/ios/createHybridObjectInitializer.ts +112 -0
  201. package/src/autolinking/ios/createPodspecRubyExtension.ts +76 -0
  202. package/src/autolinking/ios/createSwiftCxxBridge.ts +137 -0
  203. package/src/autolinking/ios/createSwiftUmbrellaHeader.ts +90 -0
  204. package/src/config/NitroConfig.ts +139 -0
  205. package/src/config/NitroUserConfig.ts +105 -0
  206. package/src/config/getConfig.ts +91 -0
  207. package/src/createGitAttributes.ts +15 -0
  208. package/src/createPlatformSpec.ts +176 -0
  209. package/src/getFiles.ts +31 -0
  210. package/src/getPlatformSpecs.ts +202 -0
  211. package/src/index.ts +146 -0
  212. package/src/init.ts +186 -0
  213. package/src/nitrogen.ts +246 -0
  214. package/src/prettifyDirectory.ts +32 -0
  215. package/src/syntax/BridgedType.ts +59 -0
  216. package/src/syntax/CodeNode.ts +24 -0
  217. package/src/syntax/HybridObjectSpec.ts +14 -0
  218. package/src/syntax/Method.ts +154 -0
  219. package/src/syntax/Parameter.ts +81 -0
  220. package/src/syntax/Property.ts +203 -0
  221. package/src/syntax/SourceFile.ts +80 -0
  222. package/src/syntax/c++/CppEnum.ts +128 -0
  223. package/src/syntax/c++/CppHybridObject.ts +165 -0
  224. package/src/syntax/c++/CppHybridObjectRegistration.ts +39 -0
  225. package/src/syntax/c++/CppStruct.ts +129 -0
  226. package/src/syntax/c++/CppUnion.ts +105 -0
  227. package/src/syntax/c++/getForwardDeclaration.ts +19 -0
  228. package/src/syntax/c++/includeNitroHeader.ts +40 -0
  229. package/src/syntax/createType.ts +365 -0
  230. package/src/syntax/getAllTypes.ts +18 -0
  231. package/src/syntax/getCustomTypeConfig.ts +71 -0
  232. package/src/syntax/getHybridObjectName.ts +48 -0
  233. package/src/syntax/getInterfaceProperties.ts +21 -0
  234. package/src/syntax/getReferencedTypes.ts +57 -0
  235. package/src/syntax/helpers.ts +79 -0
  236. package/src/syntax/isCoreType.ts +60 -0
  237. package/src/syntax/kotlin/FbjniHybridObject.ts +313 -0
  238. package/src/syntax/kotlin/JNINativeRegistrations.ts +19 -0
  239. package/src/syntax/kotlin/KotlinBoxedPrimitive.ts +19 -0
  240. package/src/syntax/kotlin/KotlinCxxBridgedType.ts +942 -0
  241. package/src/syntax/kotlin/KotlinEnum.ts +130 -0
  242. package/src/syntax/kotlin/KotlinFunction.ts +277 -0
  243. package/src/syntax/kotlin/KotlinHybridObject.ts +205 -0
  244. package/src/syntax/kotlin/KotlinHybridObjectRegistration.ts +51 -0
  245. package/src/syntax/kotlin/KotlinStruct.ts +198 -0
  246. package/src/syntax/kotlin/KotlinVariant.ts +212 -0
  247. package/src/syntax/swift/SwiftCxxBridgedType.ts +874 -0
  248. package/src/syntax/swift/SwiftCxxTypeHelper.ts +674 -0
  249. package/src/syntax/swift/SwiftEnum.ts +65 -0
  250. package/src/syntax/swift/SwiftFunction.ts +91 -0
  251. package/src/syntax/swift/SwiftHybridObject.ts +121 -0
  252. package/src/syntax/swift/SwiftHybridObjectBridge.ts +522 -0
  253. package/src/syntax/swift/SwiftHybridObjectRegistration.ts +75 -0
  254. package/src/syntax/swift/SwiftStruct.ts +85 -0
  255. package/src/syntax/swift/SwiftVariant.ts +67 -0
  256. package/src/syntax/types/ArrayBufferType.ts +49 -0
  257. package/src/syntax/types/ArrayType.ts +62 -0
  258. package/src/syntax/types/BigIntType.ts +35 -0
  259. package/src/syntax/types/BooleanType.ts +35 -0
  260. package/src/syntax/types/CustomType.ts +47 -0
  261. package/src/syntax/types/DateType.ts +43 -0
  262. package/src/syntax/types/EnumType.ts +130 -0
  263. package/src/syntax/types/ErrorType.ts +44 -0
  264. package/src/syntax/types/FunctionType.ts +167 -0
  265. package/src/syntax/types/HybridObjectBaseType.ts +54 -0
  266. package/src/syntax/types/HybridObjectType.ts +198 -0
  267. package/src/syntax/types/MapType.ts +49 -0
  268. package/src/syntax/types/NamedWrappingType.ts +33 -0
  269. package/src/syntax/types/NullType.ts +30 -0
  270. package/src/syntax/types/NumberType.ts +34 -0
  271. package/src/syntax/types/OptionalType.ts +66 -0
  272. package/src/syntax/types/PromiseType.ts +72 -0
  273. package/src/syntax/types/RecordType.ts +56 -0
  274. package/src/syntax/types/ResultWrappingType.ts +53 -0
  275. package/src/syntax/types/StringType.ts +44 -0
  276. package/src/syntax/types/StructType.ts +83 -0
  277. package/src/syntax/types/TupleType.ts +53 -0
  278. package/src/syntax/types/Type.ts +82 -0
  279. package/src/syntax/types/VariantType.ts +92 -0
  280. package/src/syntax/types/VoidType.ts +34 -0
  281. package/src/syntax/types/getTypeAs.ts +15 -0
  282. package/src/utils.ts +162 -0
  283. package/src/views/CppHybridViewComponent.ts +301 -0
  284. package/src/views/createHostComponentJs.ts +34 -0
  285. package/src/views/kotlin/KotlinHybridViewManager.ts +258 -0
  286. package/src/views/swift/SwiftHybridViewManager.ts +153 -0
  287. package/src/writeFile.ts +27 -0
  288. package/.jshintignore +0 -6
  289. package/.jshintrc +0 -3
  290. package/.npmignore +0 -3
  291. package/.travis.yml +0 -13
  292. package/LICENSE +0 -13
  293. package/browser/nitrogen-min.js +0 -3
  294. package/browser/nitrogen.js +0 -6369
  295. package/lib/apiKey.js +0 -67
  296. package/lib/blob.js +0 -57
  297. package/lib/commandManager.js +0 -350
  298. package/lib/device.js +0 -19
  299. package/lib/memoryStore.js +0 -24
  300. package/lib/message.js +0 -298
  301. package/lib/permission.js +0 -121
  302. package/lib/principal.js +0 -330
  303. package/lib/service.js +0 -349
  304. package/lib/session.js +0 -494
  305. package/lib/user.js +0 -20
  306. package/publish +0 -2
  307. package/scripts/build-documentation +0 -4
  308. package/scripts/build-module +0 -27
  309. package/scripts/module.js +0 -12
  310. package/scripts/postamble.js +0 -1
  311. package/scripts/preamble.js +0 -2
  312. package/scripts/run-test-server +0 -9
  313. package/test/config.js +0 -12
  314. package/test/fixtures/images/image.jpg +0 -0
  315. package/test/fixtures/images/motion0.jpg +0 -0
  316. package/test/fixtures/images/motion1.jpg +0 -0
  317. package/test/fixtures/images/motion2.jpg +0 -0
  318. package/test/fixtures/index.js +0 -76
  319. package/test/main.js +0 -5
  320. package/test/memoryStore.js +0 -22
  321. package/test/mocha.opts +0 -3
  322. package/test/units/apiKey.js +0 -46
  323. package/test/units/blob.js +0 -35
  324. package/test/units/commandManager.js +0 -67
  325. package/test/units/device.js +0 -26
  326. package/test/units/heartbeat.js +0 -28
  327. package/test/units/message.js +0 -79
  328. package/test/units/permissions.js +0 -43
  329. package/test/units/principal.js +0 -116
  330. package/test/units/service.js +0 -92
  331. package/test/units/session.js +0 -97
  332. package/test/units/user.js +0 -48
  333. package/yuidoc.json +0 -8
@@ -0,0 +1,65 @@
1
+ import { NitroConfig } from '../../config/NitroConfig.js'
2
+ import { indent, toLowerCamelCase } from '../../utils.js'
3
+ import { createFileMetadataString } from '../helpers.js'
4
+ import type { SourceFile } from '../SourceFile.js'
5
+ import type { EnumType } from '../types/EnumType.js'
6
+
7
+ export function createSwiftEnumBridge(enumType: EnumType): SourceFile {
8
+ const fullName = NitroConfig.current.getCxxNamespace(
9
+ 'swift',
10
+ enumType.enumName
11
+ )
12
+
13
+ const initializeCases = enumType.enumMembers.map((m) =>
14
+ `
15
+ case "${m.stringValue}":
16
+ self = .${toLowerCamelCase(m.name)}
17
+ `.trim()
18
+ )
19
+ const toStringCases = enumType.enumMembers.map((m) =>
20
+ `
21
+ case .${toLowerCamelCase(m.name)}:
22
+ return "${m.stringValue}"
23
+ `.trim()
24
+ )
25
+
26
+ const code = `
27
+ ${createFileMetadataString(`${enumType.enumName}.swift`)}
28
+
29
+ /**
30
+ * Represents the JS ${enumType.jsType} \`${enumType.enumName}\`, backed by a C++ enum.
31
+ */
32
+ public typealias ${enumType.enumName} = ${fullName}
33
+
34
+ public extension ${enumType.enumName} {
35
+ /**
36
+ * Get a ${enumType.enumName} for the given String value, or
37
+ * return \`nil\` if the given value was invalid/unknown.
38
+ */
39
+ init?(fromString string: String) {
40
+ switch string {
41
+ ${indent(initializeCases.join('\n'), ' ')}
42
+ default:
43
+ return nil
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Get the String value this ${enumType.enumName} represents.
49
+ */
50
+ var stringValue: String {
51
+ switch self {
52
+ ${indent(toStringCases.join('\n'), ' ')}
53
+ }
54
+ }
55
+ }
56
+ `.trim()
57
+
58
+ return {
59
+ content: code,
60
+ language: 'swift',
61
+ name: `${enumType.enumName}.swift`,
62
+ platform: 'ios',
63
+ subdirectory: [],
64
+ }
65
+ }
@@ -0,0 +1,91 @@
1
+ import { NitroConfig } from '../../config/NitroConfig.js'
2
+ import { indent } from '../../utils.js'
3
+ import { createFileMetadataString } from '../helpers.js'
4
+ import type { SourceFile } from '../SourceFile.js'
5
+ import type { FunctionType } from '../types/FunctionType.js'
6
+ import { SwiftCxxBridgedType } from './SwiftCxxBridgedType.js'
7
+
8
+ export function createSwiftFunctionBridge(
9
+ functionType: FunctionType
10
+ ): SourceFile {
11
+ const swiftClassName = functionType.specializationName
12
+ const bridgeNamespace = NitroConfig.current.getSwiftBridgeNamespace('swift')
13
+ const argsTypes = functionType.parameters.map((p) => {
14
+ const bridged = new SwiftCxxBridgedType(p)
15
+ return `${p.escapedName}: ${bridged.getTypeCode('swift')}`
16
+ })
17
+ const returnType = new SwiftCxxBridgedType(functionType.returnType)
18
+ const argsForward = functionType.parameters.map((p) => {
19
+ const bridged = new SwiftCxxBridgedType(p)
20
+ return bridged.parseFromCppToSwift(p.escapedName, 'swift')
21
+ })
22
+
23
+ let body: string
24
+ if (functionType.returnType.kind === 'void') {
25
+ body = `
26
+ self.closure(${argsForward.join(', ')})
27
+ `.trim()
28
+ } else {
29
+ body = `
30
+ let __result: ${functionType.returnType.getCode('swift')} = self.closure(${argsForward.join(', ')})
31
+ return ${returnType.parseFromSwiftToCpp('__result', 'swift')}
32
+ `.trim()
33
+ }
34
+
35
+ const extraImports = functionType
36
+ .getRequiredImports('swift')
37
+ .map((i) => `import ${i.name}`)
38
+
39
+ const code = `
40
+ ${createFileMetadataString(`${swiftClassName}.swift`)}
41
+
42
+ import NitroModules
43
+ ${extraImports.join('\n')}
44
+
45
+ /**
46
+ * Wraps a Swift \`${functionType.getCode('swift')}\` as a class.
47
+ * This class can be used from C++, e.g. to wrap the Swift closure as a \`std::function\`.
48
+ */
49
+ public final class ${swiftClassName} {
50
+ public typealias bridge = ${bridgeNamespace}
51
+
52
+ private let closure: ${functionType.getCode('swift')}
53
+
54
+ public init(_ closure: @escaping ${functionType.getCode('swift')}) {
55
+ self.closure = closure
56
+ }
57
+
58
+ @inline(__always)
59
+ public func call(${argsTypes.join(', ')}) -> ${returnType.getTypeCode('swift')} {
60
+ ${indent(body, ' ')}
61
+ }
62
+
63
+ /**
64
+ * Casts this instance to a retained unsafe raw pointer.
65
+ * This acquires one additional strong reference on the object!
66
+ */
67
+ @inline(__always)
68
+ public func toUnsafe() -> UnsafeMutableRawPointer {
69
+ return Unmanaged.passRetained(self).toOpaque()
70
+ }
71
+
72
+ /**
73
+ * Casts an unsafe pointer to a \`${swiftClassName}\`.
74
+ * The pointer has to be a retained opaque \`Unmanaged<${swiftClassName}>\`.
75
+ * This removes one strong reference from the object!
76
+ */
77
+ @inline(__always)
78
+ public static func fromUnsafe(_ pointer: UnsafeMutableRawPointer) -> ${swiftClassName} {
79
+ return Unmanaged<${swiftClassName}>.fromOpaque(pointer).takeRetainedValue()
80
+ }
81
+ }
82
+ `.trim()
83
+
84
+ return {
85
+ content: code,
86
+ language: 'swift',
87
+ name: `${swiftClassName}.swift`,
88
+ platform: 'ios',
89
+ subdirectory: [],
90
+ }
91
+ }
@@ -0,0 +1,121 @@
1
+ import { indent } from '../../utils.js'
2
+ import { createSwiftHybridViewManager } from '../../views/swift/SwiftHybridViewManager.js'
3
+ import { getHybridObjectName } from '../getHybridObjectName.js'
4
+ import { createFileMetadataString, isNotDuplicate } from '../helpers.js'
5
+ import type { HybridObjectSpec } from '../HybridObjectSpec.js'
6
+ import type { SourceFile } from '../SourceFile.js'
7
+ import { HybridObjectType } from '../types/HybridObjectType.js'
8
+ import { createSwiftHybridObjectCxxBridge } from './SwiftHybridObjectBridge.js'
9
+
10
+ export function createSwiftHybridObject(spec: HybridObjectSpec): SourceFile[] {
11
+ const name = getHybridObjectName(spec.name)
12
+ const protocolName = name.HybridTSpec
13
+ const properties = spec.properties.map((p) => p.getCode('swift')).join('\n')
14
+ const methods = spec.methods.map((p) => p.getCode('swift')).join('\n')
15
+ const extraImports = [
16
+ ...spec.properties.flatMap((p) => p.getRequiredImports('swift')),
17
+ ...spec.methods.flatMap((m) => m.getRequiredImports('swift')),
18
+ ...spec.baseTypes.flatMap((b) =>
19
+ new HybridObjectType(b).getRequiredImports('swift')
20
+ ),
21
+ ]
22
+
23
+ const protocolBaseClasses = ['HybridObject']
24
+ const classBaseClasses: string[] = []
25
+ if (spec.baseTypes.length > 0) {
26
+ if (spec.baseTypes.length > 1) {
27
+ throw new Error(
28
+ `${name.T}: Inheriting from multiple HybridObject bases is not yet supported in Swift!`
29
+ )
30
+ }
31
+ const base = spec.baseTypes[0]!
32
+ const baseName = getHybridObjectName(base.name)
33
+ protocolBaseClasses.push(`${baseName.HybridTSpec}_protocol`)
34
+ classBaseClasses.push(`${baseName.HybridTSpec}_base`)
35
+ }
36
+ if (spec.isHybridView) {
37
+ protocolBaseClasses.push('HybridView')
38
+ }
39
+
40
+ const hasBaseClass = classBaseClasses.length > 0
41
+ const baseMembers: string[] = []
42
+ baseMembers.push(`private weak var cxxWrapper: ${name.HybridTSpecCxx}? = nil`)
43
+ if (hasBaseClass) {
44
+ baseMembers.push(`public override init() { super.init() }`)
45
+ } else {
46
+ baseMembers.push(`public init() { }`)
47
+ }
48
+ baseMembers.push(
49
+ `
50
+ public ${hasBaseClass ? 'override func' : 'func'} getCxxWrapper() -> ${name.HybridTSpecCxx} {
51
+ #if DEBUG
52
+ guard self is ${name.HybridTSpec} else {
53
+ fatalError("\`self\` is not a \`${name.HybridTSpec}\`! Did you accidentally inherit from \`${name.HybridTSpec}_base\` instead of \`${name.HybridTSpec}\`?")
54
+ }
55
+ #endif
56
+ if let cxxWrapper = self.cxxWrapper {
57
+ return cxxWrapper
58
+ } else {
59
+ let cxxWrapper = ${name.HybridTSpecCxx}(self as! ${name.HybridTSpec})
60
+ self.cxxWrapper = cxxWrapper
61
+ return cxxWrapper
62
+ }
63
+ }`.trim()
64
+ )
65
+
66
+ const imports = ['import NitroModules']
67
+ imports.push(
68
+ ...extraImports.map((i) => `import ${i.name}`).filter(isNotDuplicate)
69
+ )
70
+
71
+ const protocolCode = `
72
+ ${createFileMetadataString(`${protocolName}.swift`)}
73
+
74
+ import Foundation
75
+ ${imports.join('\n')}
76
+
77
+ /// See \`\`${protocolName}\`\`
78
+ public protocol ${protocolName}_protocol: ${protocolBaseClasses.join(', ')} {
79
+ // Properties
80
+ ${indent(properties, ' ')}
81
+
82
+ // Methods
83
+ ${indent(methods, ' ')}
84
+ }
85
+
86
+ /// See \`\`${protocolName}\`\`
87
+ open class ${protocolName}_base${classBaseClasses.length > 0 ? `: ${classBaseClasses.join(',')}` : ''} {
88
+ ${indent(baseMembers.join('\n'), ' ')}
89
+ }
90
+
91
+ /**
92
+ * A Swift base-protocol representing the ${spec.name} HybridObject.
93
+ * Implement this protocol to create Swift-based instances of ${spec.name}.
94
+ * \`\`\`swift
95
+ * class ${name.HybridT} : ${protocolName} {
96
+ * // ...
97
+ * }
98
+ * \`\`\`
99
+ */
100
+ public typealias ${protocolName} = ${protocolName}_protocol & ${protocolName}_base
101
+ `
102
+
103
+ const swiftBridge = createSwiftHybridObjectCxxBridge(spec)
104
+
105
+ const files: SourceFile[] = []
106
+ files.push({
107
+ content: protocolCode,
108
+ language: 'swift',
109
+ name: `${protocolName}.swift`,
110
+ subdirectory: [],
111
+ platform: 'ios',
112
+ })
113
+ files.push(...swiftBridge)
114
+
115
+ if (spec.isHybridView) {
116
+ const viewFiles = createSwiftHybridViewManager(spec)
117
+ files.push(...viewFiles)
118
+ }
119
+
120
+ return files
121
+ }