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,28 @@
1
+ import type { SourceFile, SourceImport } from '../syntax/SourceFile.js'
2
+ import { createCMakeExtension } from './android/createCMakeExtension.js'
3
+ import { createGradleExtension } from './android/createGradleExtension.js'
4
+ import { createHybridObjectIntializer } from './android/createHybridObjectInitializer.js'
5
+ import type { Autolinking } from './Autolinking.js'
6
+
7
+ interface JNIHybridRegistration {
8
+ sourceImport: SourceImport
9
+ registrationCode: string
10
+ }
11
+
12
+ interface AndroidAutolinking extends Autolinking {
13
+ jniHybridRegistrations: JNIHybridRegistration[]
14
+ }
15
+
16
+ export function createAndroidAutolinking(
17
+ allFiles: SourceFile[]
18
+ ): AndroidAutolinking {
19
+ const cmakeExtension = createCMakeExtension(allFiles)
20
+ const gradleExtension = createGradleExtension()
21
+ const hybridObjectInitializer = createHybridObjectIntializer()
22
+
23
+ return {
24
+ platform: 'android',
25
+ jniHybridRegistrations: [],
26
+ sourceFiles: [cmakeExtension, gradleExtension, ...hybridObjectInitializer],
27
+ }
28
+ }
@@ -0,0 +1,24 @@
1
+ import type { Autolinking } from './Autolinking.js'
2
+ import { createHybridObjectIntializer } from './ios/createHybridObjectInitializer.js'
3
+ import { createPodspecRubyExtension } from './ios/createPodspecRubyExtension.js'
4
+ import { createSwiftCxxBridge } from './ios/createSwiftCxxBridge.js'
5
+ import { createSwiftUmbrellaHeader } from './ios/createSwiftUmbrellaHeader.js'
6
+
7
+ interface IOSAutolinking extends Autolinking {}
8
+
9
+ export function createIOSAutolinking(): IOSAutolinking {
10
+ const podspecExtension = createPodspecRubyExtension()
11
+ const swiftCxxBridge = createSwiftCxxBridge()
12
+ const swiftUmbrellaHeader = createSwiftUmbrellaHeader()
13
+ const hybridObjectInitializer = createHybridObjectIntializer()
14
+
15
+ return {
16
+ platform: 'ios',
17
+ sourceFiles: [
18
+ podspecExtension,
19
+ ...swiftCxxBridge,
20
+ swiftUmbrellaHeader,
21
+ ...hybridObjectInitializer,
22
+ ],
23
+ }
24
+ }
@@ -0,0 +1,112 @@
1
+ import { NitroConfig } from '../../config/NitroConfig.js'
2
+ import { createCppHybridObjectRegistration } from '../../syntax/c++/CppHybridObjectRegistration.js'
3
+ import { includeHeader } from '../../syntax/c++/includeNitroHeader.js'
4
+ import { createFileMetadataString } from '../../syntax/helpers.js'
5
+ import type { SourceFile, SourceImport } from '../../syntax/SourceFile.js'
6
+ import { createSwiftHybridObjectRegistration } from '../../syntax/swift/SwiftHybridObjectRegistration.js'
7
+ import { indent } from '../../utils.js'
8
+ import { getUmbrellaHeaderName } from './createSwiftUmbrellaHeader.js'
9
+
10
+ type ObjcFile = Omit<SourceFile, 'language'> & { language: 'objective-c++' }
11
+ type SwiftFile = Omit<SourceFile, 'language'> & { language: 'swift' }
12
+
13
+ export function createHybridObjectIntializer(): [ObjcFile, SwiftFile] | [] {
14
+ const autolinkingClassName = `${NitroConfig.current.getIosModuleName()}Autolinking`
15
+ const umbrellaHeaderName = getUmbrellaHeaderName()
16
+ const bridgeNamespace = NitroConfig.current.getSwiftBridgeNamespace('swift')
17
+
18
+ const autolinkedHybridObjects =
19
+ NitroConfig.current.getAutolinkedHybridObjects()
20
+
21
+ const swiftFunctions: string[] = []
22
+ const cppRegistrations: string[] = []
23
+ const cppImports: SourceImport[] = []
24
+ let containsSwiftObjects = false
25
+ for (const hybridObjectName of Object.keys(autolinkedHybridObjects)) {
26
+ const config = autolinkedHybridObjects[hybridObjectName]
27
+
28
+ if (config?.cpp != null) {
29
+ // Autolink a C++ HybridObject!
30
+ const { cppCode, requiredImports } = createCppHybridObjectRegistration({
31
+ hybridObjectName: hybridObjectName,
32
+ cppClassName: config.cpp,
33
+ })
34
+ cppImports.push(...requiredImports)
35
+ cppRegistrations.push(cppCode)
36
+ }
37
+ if (config?.swift != null) {
38
+ // Autolink a Swift HybridObject!
39
+ containsSwiftObjects = true
40
+ const { cppCode, requiredImports, swiftFunction } =
41
+ createSwiftHybridObjectRegistration({
42
+ hybridObjectName: hybridObjectName,
43
+ swiftClassName: config.swift,
44
+ })
45
+ cppImports.push(...requiredImports)
46
+ cppRegistrations.push(cppCode)
47
+ swiftFunctions.push(swiftFunction)
48
+ }
49
+ }
50
+
51
+ if (cppRegistrations.length === 0) {
52
+ // Nothing to autolink!
53
+ return []
54
+ }
55
+
56
+ const umbrellaImport = containsSwiftObjects
57
+ ? `#import "${umbrellaHeaderName}"`
58
+ : ''
59
+ const imports = cppImports.map((i) => includeHeader(i, true)).join('\n')
60
+
61
+ const objcCode = `
62
+ ${createFileMetadataString(`${autolinkingClassName}.mm`)}
63
+
64
+ #import <Foundation/Foundation.h>
65
+ #import <NitroModules/HybridObjectRegistry.hpp>
66
+ ${umbrellaImport}
67
+ #import <type_traits>
68
+
69
+ ${imports}
70
+
71
+ @interface ${autolinkingClassName} : NSObject
72
+ @end
73
+
74
+ @implementation ${autolinkingClassName}
75
+
76
+ + (void) load {
77
+ using namespace margelo::nitro;
78
+ using namespace ${NitroConfig.current.getCxxNamespace('c++')};
79
+
80
+ ${indent(cppRegistrations.join('\n'), ' ')}
81
+ }
82
+
83
+ @end
84
+ `.trim()
85
+
86
+ const swiftCode = `
87
+ ${createFileMetadataString(`${autolinkingClassName}.swift`)}
88
+
89
+ public final class ${autolinkingClassName} {
90
+ public typealias bridge = ${bridgeNamespace}
91
+
92
+ ${indent(swiftFunctions.join('\n\n'), ' ')}
93
+ }
94
+ `.trim()
95
+
96
+ return [
97
+ {
98
+ content: objcCode,
99
+ language: 'objective-c++',
100
+ name: `${autolinkingClassName}.mm`,
101
+ platform: 'ios',
102
+ subdirectory: [],
103
+ },
104
+ {
105
+ content: swiftCode,
106
+ language: 'swift',
107
+ name: `${autolinkingClassName}.swift`,
108
+ platform: 'ios',
109
+ subdirectory: [],
110
+ },
111
+ ]
112
+ }
@@ -0,0 +1,76 @@
1
+ import { NitroConfig } from '../../config/NitroConfig.js'
2
+ import { createFileMetadataString } from '../../syntax/helpers.js'
3
+ import type { SourceFile } from '../../syntax/SourceFile.js'
4
+
5
+ export interface RubyFile extends Omit<SourceFile, 'language'> {
6
+ language: 'ruby'
7
+ }
8
+
9
+ export function createPodspecRubyExtension(): RubyFile {
10
+ const name = NitroConfig.current.getIosModuleName()
11
+
12
+ const code = `
13
+ ${createFileMetadataString(`${name}+autolinking.rb`, '#')}
14
+
15
+ # This is a Ruby script that adds all files generated by Nitrogen
16
+ # to the given podspec.
17
+ #
18
+ # To use it, add this to your .podspec:
19
+ # \`\`\`ruby
20
+ # Pod::Spec.new do |spec|
21
+ # # ...
22
+ #
23
+ # # Add all files generated by Nitrogen
24
+ # load 'nitrogen/generated/ios/${name}+autolinking.rb'
25
+ # add_nitrogen_files(spec)
26
+ # end
27
+ # \`\`\`
28
+
29
+ def add_nitrogen_files(spec)
30
+ Pod::UI.puts "[NitroModules] 🔥 ${name} is boosted by nitro!"
31
+
32
+ spec.dependency "NitroModules"
33
+
34
+ current_source_files = Array(spec.attributes_hash['source_files'])
35
+ spec.source_files = current_source_files + [
36
+ # Generated cross-platform specs
37
+ "nitrogen/generated/shared/**/*.{h,hpp,c,cpp,swift}",
38
+ # Generated bridges for the cross-platform specs
39
+ "nitrogen/generated/ios/**/*.{h,hpp,c,cpp,mm,swift}",
40
+ ]
41
+
42
+ current_public_header_files = Array(spec.attributes_hash['public_header_files'])
43
+ spec.public_header_files = current_public_header_files + [
44
+ # Generated specs
45
+ "nitrogen/generated/shared/**/*.{h,hpp}",
46
+ # Swift to C++ bridging helpers
47
+ "nitrogen/generated/ios/${name}-Swift-Cxx-Bridge.hpp"
48
+ ]
49
+
50
+ current_private_header_files = Array(spec.attributes_hash['private_header_files'])
51
+ spec.private_header_files = current_private_header_files + [
52
+ # iOS specific specs
53
+ "nitrogen/generated/ios/c++/**/*.{h,hpp}",
54
+ # Views are framework-specific and should be private
55
+ "nitrogen/generated/shared/**/views/**/*"
56
+ ]
57
+
58
+ current_pod_target_xcconfig = spec.attributes_hash['pod_target_xcconfig'] || {}
59
+ spec.pod_target_xcconfig = current_pod_target_xcconfig.merge({
60
+ # Use C++ 20
61
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
62
+ # Enables C++ <-> Swift interop (by default it's only C)
63
+ "SWIFT_OBJC_INTEROP_MODE" => "objcxx",
64
+ # Enables stricter modular headers
65
+ "DEFINES_MODULE" => "YES",
66
+ })
67
+ end
68
+ `.trim()
69
+ return {
70
+ content: code,
71
+ language: 'ruby',
72
+ name: `${name}+autolinking.rb`,
73
+ platform: 'ios',
74
+ subdirectory: [],
75
+ }
76
+ }
@@ -0,0 +1,137 @@
1
+ import { NitroConfig } from '../../config/NitroConfig.js'
2
+ import { includeHeader } from '../../syntax/c++/includeNitroHeader.js'
3
+ import { getAllKnownTypes } from '../../syntax/createType.js'
4
+ import {
5
+ createFileMetadataString,
6
+ isNotDuplicate,
7
+ } from '../../syntax/helpers.js'
8
+ import type { SourceFile } from '../../syntax/SourceFile.js'
9
+ import { getReferencedTypes } from '../../syntax/getReferencedTypes.js'
10
+ import { SwiftCxxBridgedType } from '../../syntax/swift/SwiftCxxBridgedType.js'
11
+ import { filterDuplicateHelperBridges, indent } from '../../utils.js'
12
+ import { getTypeAs } from '../../syntax/types/getTypeAs.js'
13
+ import { HybridObjectType } from '../../syntax/types/HybridObjectType.js'
14
+ import { getForwardDeclaration } from '../../syntax/c++/getForwardDeclaration.js'
15
+ import { getHybridObjectName } from '../../syntax/getHybridObjectName.js'
16
+
17
+ export function createSwiftCxxBridge(): SourceFile[] {
18
+ const bridgeName = NitroConfig.current.getSwiftBridgeHeaderName()
19
+ const bridgeNamespace = NitroConfig.current.getSwiftBridgeNamespace('c++')
20
+
21
+ const types = getAllKnownTypes('swift').map((t) => new SwiftCxxBridgedType(t))
22
+
23
+ const bridges = types
24
+ .flatMap((t) => {
25
+ const referenced = getReferencedTypes(t.type)
26
+ return referenced.map((r) => {
27
+ const bridge = new SwiftCxxBridgedType(r)
28
+ return bridge.getRequiredBridge()
29
+ })
30
+ })
31
+ .filter((b) => b != null)
32
+ .flatMap((b) => [b, ...b?.dependencies])
33
+ .filter(filterDuplicateHelperBridges)
34
+ const headerHelperFunctions = bridges
35
+ .map((b) => `// pragma MARK: ${b.cxxType}\n${b.cxxHeader.code}`)
36
+ .filter(isNotDuplicate)
37
+ .join('\n\n')
38
+ const implementationHelperFunctions = bridges
39
+ .map((b) => {
40
+ if (b.cxxImplementation == null) return undefined
41
+ else return `// pragma MARK: ${b.cxxType}\n${b.cxxImplementation.code}`
42
+ })
43
+ .filter((c) => c != null)
44
+ .filter(isNotDuplicate)
45
+ .join('\n\n')
46
+
47
+ const requiredImportsHeader = bridges.flatMap(
48
+ (b) => b.cxxHeader.requiredIncludes
49
+ )
50
+ const includesHeader = requiredImportsHeader
51
+ .map((i) => includeHeader(i, true))
52
+ .filter(isNotDuplicate)
53
+ const forwardDeclarationsHeader = requiredImportsHeader
54
+ .map((i) => i.forwardDeclaration)
55
+ .filter((f) => f != null)
56
+ .filter(isNotDuplicate)
57
+
58
+ const includesImplementation = bridges
59
+ .flatMap((b) => b.cxxImplementation?.requiredIncludes)
60
+ .filter((i) => i != null)
61
+ .map((i) => includeHeader(i, true))
62
+ .filter(isNotDuplicate)
63
+
64
+ const forwardDeclaredSwiftTypes = types
65
+ .filter((t) => t.type.kind === 'hybrid-object')
66
+ .map((t) => {
67
+ const hybridObject = getTypeAs(t.type, HybridObjectType)
68
+ const hybridObjectModuleName =
69
+ hybridObject.sourceConfig.getIosModuleName()
70
+ const { HybridTSpecCxx } = getHybridObjectName(
71
+ hybridObject.hybridObjectName
72
+ )
73
+ return getForwardDeclaration(
74
+ 'class',
75
+ HybridTSpecCxx,
76
+ hybridObjectModuleName
77
+ )
78
+ })
79
+ .filter(isNotDuplicate)
80
+
81
+ const header = `
82
+ ${createFileMetadataString(`${bridgeName}.hpp`)}
83
+
84
+ #pragma once
85
+
86
+ // Forward declarations of C++ defined types
87
+ ${forwardDeclarationsHeader.sort().join('\n')}
88
+
89
+ // Forward declarations of Swift defined types
90
+ ${forwardDeclaredSwiftTypes.sort().join('\n')}
91
+
92
+ // Include C++ defined types
93
+ ${includesHeader.sort().join('\n')}
94
+
95
+ /**
96
+ * Contains specialized versions of C++ templated types so they can be accessed from Swift,
97
+ * as well as helper functions to interact with those C++ types from Swift.
98
+ */
99
+ namespace ${bridgeNamespace} {
100
+
101
+ ${indent(headerHelperFunctions, ' ')}
102
+
103
+ } // namespace ${bridgeNamespace}
104
+ `
105
+
106
+ const source = `
107
+ ${createFileMetadataString(`${bridgeName}.cpp`)}
108
+
109
+ #include "${bridgeName}.hpp"
110
+
111
+ // Include C++ implementation defined types
112
+ ${includesImplementation.sort().join('\n')}
113
+
114
+ namespace ${bridgeNamespace} {
115
+
116
+ ${indent(implementationHelperFunctions, ' ')}
117
+
118
+ } // namespace ${bridgeNamespace}
119
+ `
120
+
121
+ const files: SourceFile[] = []
122
+ files.push({
123
+ content: header,
124
+ language: 'c++',
125
+ name: `${bridgeName}.hpp`,
126
+ platform: 'ios',
127
+ subdirectory: [],
128
+ })
129
+ files.push({
130
+ content: source,
131
+ language: 'c++',
132
+ name: `${bridgeName}.cpp`,
133
+ platform: 'ios',
134
+ subdirectory: [],
135
+ })
136
+ return files
137
+ }
@@ -0,0 +1,90 @@
1
+ import { NitroConfig } from '../../config/NitroConfig.js'
2
+ import { getForwardDeclaration } from '../../syntax/c++/getForwardDeclaration.js'
3
+ import { includeHeader } from '../../syntax/c++/includeNitroHeader.js'
4
+ import { getAllKnownTypes } from '../../syntax/createType.js'
5
+ import { getHybridObjectName } from '../../syntax/getHybridObjectName.js'
6
+ import {
7
+ createFileMetadataString,
8
+ isNotDuplicate,
9
+ } from '../../syntax/helpers.js'
10
+ import type { SourceFile } from '../../syntax/SourceFile.js'
11
+ import { getTypeAs } from '../../syntax/types/getTypeAs.js'
12
+ import { HybridObjectType } from '../../syntax/types/HybridObjectType.js'
13
+
14
+ export function getUmbrellaHeaderName(): string {
15
+ const moduleName = NitroConfig.current.getIosModuleName()
16
+ return `${moduleName}-Swift-Cxx-Umbrella.hpp`
17
+ }
18
+
19
+ export function createSwiftUmbrellaHeader(): SourceFile {
20
+ const moduleName = NitroConfig.current.getIosModuleName()
21
+ const filename = getUmbrellaHeaderName()
22
+
23
+ const types = getAllKnownTypes('swift')
24
+
25
+ const swiftForwardDeclares = types
26
+ .filter((t) => t.kind === 'hybrid-object')
27
+ .map((t) => {
28
+ const hybridObjectType = getTypeAs(t, HybridObjectType)
29
+ const hybridObjectModuleName =
30
+ hybridObjectType.sourceConfig.getIosModuleName()
31
+ const name = getHybridObjectName(hybridObjectType.hybridObjectName)
32
+ return getForwardDeclaration(
33
+ 'class',
34
+ name.HybridTSpecCxx,
35
+ hybridObjectModuleName
36
+ )
37
+ })
38
+ .filter(isNotDuplicate)
39
+
40
+ const imports = types.flatMap((t) => t.getRequiredImports('c++'))
41
+ const forwardDeclarations = imports
42
+ .map((i) => i.forwardDeclaration)
43
+ .filter((f) => f != null)
44
+ .filter(isNotDuplicate)
45
+ const includes = imports.map((i) => includeHeader(i)).filter(isNotDuplicate)
46
+
47
+ const code = `
48
+ ${createFileMetadataString(filename, '///')}
49
+
50
+ #pragma once
51
+
52
+ // Forward declarations of C++ defined types
53
+ ${forwardDeclarations.sort().join('\n')}
54
+
55
+ // Include C++ defined types
56
+ ${includes.sort().join('\n')}
57
+
58
+ // C++ helpers for Swift
59
+ #include "${moduleName}-Swift-Cxx-Bridge.hpp"
60
+
61
+ // Common C++ types used in Swift
62
+ #include <NitroModules/ArrayBufferHolder.hpp>
63
+ #include <NitroModules/AnyMapUtils.hpp>
64
+ #include <NitroModules/RuntimeError.hpp>
65
+ #include <NitroModules/DateToChronoDate.hpp>
66
+
67
+ // Forward declarations of Swift defined types
68
+ ${swiftForwardDeclares.sort().join('\n')}
69
+
70
+ // Include Swift defined types
71
+ #if __has_include("${moduleName}-Swift.h")
72
+ // This header is generated by Xcode/Swift on every app build.
73
+ // If it cannot be found, make sure the Swift module's name (= podspec name) is actually "${moduleName}".
74
+ #include "${moduleName}-Swift.h"
75
+ // Same as above, but used when building with frameworks (\`use_frameworks\`)
76
+ #elif __has_include(<${moduleName}/${moduleName}-Swift.h>)
77
+ #include <${moduleName}/${moduleName}-Swift.h>
78
+ #else
79
+ #error ${moduleName}'s autogenerated Swift header cannot be found! Make sure the Swift module's name (= podspec name) is actually "${moduleName}", and try building the app first.
80
+ #endif
81
+ `
82
+
83
+ return {
84
+ content: code,
85
+ language: 'c++',
86
+ name: filename,
87
+ platform: 'ios',
88
+ subdirectory: [],
89
+ }
90
+ }
@@ -0,0 +1,139 @@
1
+ import chalk from 'chalk'
2
+ import { readUserConfig } from './getConfig.js'
3
+ import type { NitroUserConfig } from './NitroUserConfig.js'
4
+
5
+ const CXX_BASE_NAMESPACE = ['margelo', 'nitro']
6
+ const ANDROID_BASE_NAMESPACE = ['com', 'margelo', 'nitro']
7
+
8
+ /**
9
+ * Represents the properly parsed `nitro.json` config of the current executing directory.
10
+ */
11
+ export class NitroConfig {
12
+ private readonly config: NitroUserConfig
13
+ private static singleton: NitroConfig | undefined
14
+
15
+ constructor(config: NitroUserConfig) {
16
+ this.config = config
17
+ }
18
+
19
+ static get current(): NitroConfig {
20
+ if (this.singleton == null) {
21
+ console.log(
22
+ chalk.reset(`🔧 Loading ${chalk.underline('nitro.json')} config...`)
23
+ )
24
+ const defaultConfigPath = './nitro.json'
25
+ const config = readUserConfig(defaultConfigPath)
26
+ this.singleton = new NitroConfig(config)
27
+ }
28
+ return this.singleton
29
+ }
30
+
31
+ /**
32
+ * Returns the name of the Android C++ library (aka name in CMakeLists.txt `add_library(..)`).
33
+ * This will be loaded via `System.loadLibrary(...)`.
34
+ * @example `NitroTest`
35
+ */
36
+ getAndroidCxxLibName(): string {
37
+ return this.config.android.androidCxxLibName
38
+ }
39
+
40
+ /**
41
+ * Returns the iOS module name (aka Pod name) of the module that will be generated.
42
+ * @example `NitroTest`
43
+ */
44
+ getIosModuleName(): string {
45
+ return this.config.ios.iosModuleName
46
+ }
47
+
48
+ /**
49
+ * Represents the C++ namespace of the module that will be generated.
50
+ * This can have multiple sub-namespaces, and is always relative to `margelo::nitro`.
51
+ * @example `['image']` -> `margelo::nitro::image`
52
+ */
53
+ getCxxNamespace(
54
+ language: 'c++' | 'swift',
55
+ ...subDefinitionName: string[]
56
+ ): string {
57
+ const userNamespace = this.config.cxxNamespace
58
+ const namespace = [
59
+ ...CXX_BASE_NAMESPACE,
60
+ ...userNamespace,
61
+ ...subDefinitionName,
62
+ ]
63
+ switch (language) {
64
+ case 'c++':
65
+ return namespace.join('::')
66
+ case 'swift':
67
+ return namespace.join('.')
68
+ default:
69
+ throw new Error(`Invalid language for getCxxNamespace: ${language}`)
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Represents the Android namespace of the module that will be generated.
75
+ * This can have multiple sub-namespaces, and is always relative to `com.margelo.nitro`.
76
+ * @example `['image']` -> `com.margelo.nitro.image`
77
+ */
78
+ getAndroidPackage(
79
+ language: 'java/kotlin' | 'c++/jni',
80
+ ...subPackage: string[]
81
+ ): string {
82
+ const userPackage = this.config.android.androidNamespace
83
+ const namespace = [...ANDROID_BASE_NAMESPACE, ...userPackage, ...subPackage]
84
+
85
+ switch (language) {
86
+ case 'java/kotlin':
87
+ return namespace.join('.')
88
+ case 'c++/jni':
89
+ return namespace.join('/')
90
+ default:
91
+ throw new Error(`Invalid language for getAndroidPackage: ${language}`)
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Return the directory of the android package, and a given sub-package.
97
+ * This will be used on android to put files from a package in their respective package folder.
98
+ */
99
+ getAndroidPackageDirectory(...subPackage: string[]): string[] {
100
+ const userPackage = this.config.android.androidNamespace
101
+ return [...ANDROID_BASE_NAMESPACE, ...userPackage, ...subPackage]
102
+ }
103
+
104
+ /**
105
+ * Get the autolinking configuration of all HybridObjects.
106
+ * Those will be generated and default-constructed.
107
+ */
108
+ getAutolinkedHybridObjects(): NitroUserConfig['autolinking'] {
109
+ return this.config.autolinking
110
+ }
111
+
112
+ /**
113
+ * Get the paths that will be ignored when loading the TypeScript project.
114
+ * In most cases, this just contains `node_modules/`.
115
+ */
116
+ getIgnorePaths(): string[] {
117
+ return this.config.ignorePaths ?? []
118
+ }
119
+
120
+ getGitAttributesGeneratedFlag(): boolean {
121
+ return this.config.gitAttributesGeneratedFlag ?? false
122
+ }
123
+
124
+ get isExternalConfig(): boolean {
125
+ // If the C++ namespaces are NOT equal, we are an external config.
126
+ return (
127
+ this.getCxxNamespace('c++') !== NitroConfig.current.getCxxNamespace('c++')
128
+ )
129
+ }
130
+
131
+ getSwiftBridgeHeaderName(): string {
132
+ const moduleName = this.getIosModuleName()
133
+ return `${moduleName}-Swift-Cxx-Bridge`
134
+ }
135
+
136
+ getSwiftBridgeNamespace(language: 'c++' | 'swift'): string {
137
+ return this.getCxxNamespace(language, 'bridge', 'swift')
138
+ }
139
+ }