react-native-unistyles 3.0.0-alpha.2 → 3.0.0-alpha.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. package/Unistyles.podspec +3 -2
  2. package/cxx/common/Constants.h +2 -0
  3. package/cxx/common/Helpers.h +97 -5
  4. package/cxx/core/HostStyle.cpp +19 -13
  5. package/cxx/core/HostStyle.h +4 -0
  6. package/cxx/core/StyleSheet.h +0 -2
  7. package/cxx/core/StyleSheetRegistry.cpp +10 -13
  8. package/cxx/core/StyleSheetRegistry.h +4 -4
  9. package/cxx/core/Unistyle.h +7 -10
  10. package/cxx/core/UnistyleData.h +23 -0
  11. package/cxx/core/UnistyleWrapper.h +78 -10
  12. package/cxx/core/UnistylesCommitHook.cpp +22 -13
  13. package/cxx/core/UnistylesCommitHook.h +8 -1
  14. package/cxx/core/UnistylesCommitShadowNode.h +13 -0
  15. package/cxx/core/UnistylesMountHook.cpp +37 -0
  16. package/cxx/core/UnistylesMountHook.h +31 -0
  17. package/cxx/core/UnistylesRegistry.cpp +56 -81
  18. package/cxx/core/UnistylesRegistry.h +15 -13
  19. package/cxx/core/UnistylesState.cpp +14 -8
  20. package/cxx/core/UnistylesState.h +1 -0
  21. package/cxx/hybridObjects/HybridShadowRegistry.cpp +15 -9
  22. package/cxx/hybridObjects/HybridStyleSheet.cpp +43 -38
  23. package/cxx/hybridObjects/HybridStyleSheet.h +10 -7
  24. package/cxx/hybridObjects/HybridUnistylesRuntime.cpp +35 -16
  25. package/cxx/hybridObjects/HybridUnistylesRuntime.h +2 -0
  26. package/cxx/parser/Parser.cpp +105 -164
  27. package/cxx/parser/Parser.h +8 -14
  28. package/cxx/shadowTree/ShadowLeafUpdate.h +1 -1
  29. package/cxx/shadowTree/ShadowTrafficController.h +33 -0
  30. package/cxx/shadowTree/ShadowTreeManager.cpp +13 -11
  31. package/cxx/shadowTree/ShadowTreeManager.h +1 -0
  32. package/ios/Unistyles.h +1 -0
  33. package/ios/UnistylesModuleOnLoad.h +2 -0
  34. package/ios/UnistylesModuleOnLoad.mm +8 -1
  35. package/lib/commonjs/index.js +4 -0
  36. package/lib/commonjs/index.js.map +1 -1
  37. package/lib/commonjs/specs/NavigtionBar/index.js +1 -1
  38. package/lib/commonjs/specs/NavigtionBar/index.js.map +1 -1
  39. package/lib/commonjs/specs/ShadowRegistry/index.js +7 -6
  40. package/lib/commonjs/specs/ShadowRegistry/index.js.map +1 -1
  41. package/lib/commonjs/specs/StatusBar/index.js +1 -1
  42. package/lib/commonjs/specs/StatusBar/index.js.map +1 -1
  43. package/lib/commonjs/specs/StyleSheet/index.js.map +1 -1
  44. package/lib/commonjs/specs/UnistylesRuntime/index.js +1 -1
  45. package/lib/commonjs/specs/UnistylesRuntime/index.js.map +1 -1
  46. package/lib/commonjs/specs/index.web.js +1 -1
  47. package/lib/commonjs/web/convert/boxShadow.js +77 -0
  48. package/lib/commonjs/web/convert/boxShadow.js.map +1 -0
  49. package/lib/commonjs/web/convert/breakpoint.js +25 -0
  50. package/lib/commonjs/web/convert/breakpoint.js.map +1 -0
  51. package/lib/commonjs/web/convert/index.js +76 -0
  52. package/lib/commonjs/web/convert/index.js.map +1 -0
  53. package/lib/commonjs/web/convert/module.d.js +2 -0
  54. package/lib/commonjs/web/convert/module.d.js.map +1 -0
  55. package/lib/commonjs/web/convert/shadow.js +68 -0
  56. package/lib/commonjs/web/convert/shadow.js.map +1 -0
  57. package/lib/commonjs/web/convert/style.js +89 -0
  58. package/lib/commonjs/web/convert/style.js.map +1 -0
  59. package/lib/commonjs/web/convert/textShadow.js +73 -0
  60. package/lib/commonjs/web/convert/textShadow.js.map +1 -0
  61. package/lib/commonjs/web/convert/transform.js +72 -0
  62. package/lib/commonjs/web/convert/transform.js.map +1 -0
  63. package/lib/commonjs/web/convert/types.js +9 -0
  64. package/lib/commonjs/web/convert/types.js.map +1 -0
  65. package/lib/commonjs/web/convert/utils.js +55 -0
  66. package/lib/commonjs/web/convert/utils.js.map +1 -0
  67. package/lib/commonjs/web/create.js +51 -0
  68. package/lib/commonjs/web/create.js.map +1 -0
  69. package/lib/commonjs/web/createUnistylesComponent.js +61 -0
  70. package/lib/commonjs/web/createUnistylesComponent.js.map +1 -0
  71. package/lib/commonjs/web/index.js +60 -0
  72. package/lib/commonjs/web/index.js.map +1 -0
  73. package/lib/commonjs/web/listener/index.js +20 -0
  74. package/lib/commonjs/web/listener/index.js.map +1 -0
  75. package/lib/commonjs/web/listener/listenToDependencies.js +38 -0
  76. package/lib/commonjs/web/listener/listenToDependencies.js.map +1 -0
  77. package/lib/commonjs/web/listener/listener.js +35 -0
  78. package/lib/commonjs/web/listener/listener.js.map +1 -0
  79. package/lib/commonjs/web/mock.js +28 -0
  80. package/lib/commonjs/web/mock.js.map +1 -0
  81. package/lib/commonjs/web/mq.js +23 -0
  82. package/lib/commonjs/web/mq.js.map +1 -0
  83. package/lib/commonjs/web/pseudo.js +10 -0
  84. package/lib/commonjs/web/pseudo.js.map +1 -0
  85. package/lib/commonjs/web/registry.js +50 -0
  86. package/lib/commonjs/web/registry.js.map +1 -0
  87. package/lib/commonjs/web/runtime.js +163 -0
  88. package/lib/commonjs/web/runtime.js.map +1 -0
  89. package/lib/commonjs/web/shadowRegistry.js +123 -0
  90. package/lib/commonjs/web/shadowRegistry.js.map +1 -0
  91. package/lib/commonjs/web/state.js +81 -0
  92. package/lib/commonjs/web/state.js.map +1 -0
  93. package/lib/commonjs/web/utils.js +130 -0
  94. package/lib/commonjs/web/utils.js.map +1 -0
  95. package/lib/commonjs/web/variants/getVariants.js +39 -0
  96. package/lib/commonjs/web/variants/getVariants.js.map +1 -0
  97. package/lib/commonjs/web/variants/index.js +28 -0
  98. package/lib/commonjs/web/variants/index.js.map +1 -0
  99. package/lib/commonjs/web/variants/useVariants.js +59 -0
  100. package/lib/commonjs/web/variants/useVariants.js.map +1 -0
  101. package/lib/module/index.js +4 -0
  102. package/lib/module/index.js.map +1 -1
  103. package/lib/module/specs/NavigtionBar/index.js +1 -1
  104. package/lib/module/specs/NavigtionBar/index.js.map +1 -1
  105. package/lib/module/specs/ShadowRegistry/index.js +7 -6
  106. package/lib/module/specs/ShadowRegistry/index.js.map +1 -1
  107. package/lib/module/specs/StatusBar/index.js +1 -1
  108. package/lib/module/specs/StatusBar/index.js.map +1 -1
  109. package/lib/module/specs/StyleSheet/index.js.map +1 -1
  110. package/lib/module/specs/UnistylesRuntime/index.js +1 -1
  111. package/lib/module/specs/UnistylesRuntime/index.js.map +1 -1
  112. package/lib/module/specs/index.web.js +1 -1
  113. package/lib/module/specs/index.web.js.map +1 -1
  114. package/lib/module/web/convert/boxShadow.js +72 -0
  115. package/lib/module/web/convert/boxShadow.js.map +1 -0
  116. package/lib/module/web/convert/breakpoint.js +20 -0
  117. package/lib/module/web/convert/breakpoint.js.map +1 -0
  118. package/lib/module/web/convert/index.js +71 -0
  119. package/lib/module/web/convert/index.js.map +1 -0
  120. package/lib/module/web/convert/module.d.js +2 -0
  121. package/lib/module/web/convert/module.d.js.map +1 -0
  122. package/lib/module/web/convert/shadow.js +63 -0
  123. package/lib/module/web/convert/shadow.js.map +1 -0
  124. package/lib/module/web/convert/style.js +84 -0
  125. package/lib/module/web/convert/style.js.map +1 -0
  126. package/lib/module/web/convert/textShadow.js +68 -0
  127. package/lib/module/web/convert/textShadow.js.map +1 -0
  128. package/lib/module/web/convert/transform.js +67 -0
  129. package/lib/module/web/convert/transform.js.map +1 -0
  130. package/lib/module/web/convert/types.js +5 -0
  131. package/lib/module/web/convert/types.js.map +1 -0
  132. package/lib/module/web/convert/utils.js +43 -0
  133. package/lib/module/web/convert/utils.js.map +1 -0
  134. package/lib/module/web/create.js +46 -0
  135. package/lib/module/web/create.js.map +1 -0
  136. package/lib/module/web/createUnistylesComponent.js +54 -0
  137. package/lib/module/web/createUnistylesComponent.js.map +1 -0
  138. package/lib/module/web/index.js +26 -0
  139. package/lib/module/web/index.js.map +1 -0
  140. package/lib/module/web/listener/index.js +5 -0
  141. package/lib/module/web/listener/index.js.map +1 -0
  142. package/lib/module/web/listener/listenToDependencies.js +33 -0
  143. package/lib/module/web/listener/listenToDependencies.js.map +1 -0
  144. package/lib/module/web/listener/listener.js +31 -0
  145. package/lib/module/web/listener/listener.js.map +1 -0
  146. package/lib/module/web/mock.js +24 -0
  147. package/lib/module/web/mock.js.map +1 -0
  148. package/lib/module/web/mq.js +17 -0
  149. package/lib/module/web/mq.js.map +1 -0
  150. package/lib/module/web/pseudo.js +5 -0
  151. package/lib/module/web/pseudo.js.map +1 -0
  152. package/lib/module/web/registry.js +46 -0
  153. package/lib/module/web/registry.js.map +1 -0
  154. package/lib/module/web/runtime.js +159 -0
  155. package/lib/module/web/runtime.js.map +1 -0
  156. package/lib/module/web/shadowRegistry.js +119 -0
  157. package/lib/module/web/shadowRegistry.js.map +1 -0
  158. package/lib/module/web/state.js +77 -0
  159. package/lib/module/web/state.js.map +1 -0
  160. package/lib/module/web/utils.js +112 -0
  161. package/lib/module/web/utils.js.map +1 -0
  162. package/lib/module/web/variants/getVariants.js +34 -0
  163. package/lib/module/web/variants/getVariants.js.map +1 -0
  164. package/lib/module/web/variants/index.js +5 -0
  165. package/lib/module/web/variants/index.js.map +1 -0
  166. package/lib/module/web/variants/useVariants.js +54 -0
  167. package/lib/module/web/variants/useVariants.js.map +1 -0
  168. package/lib/typescript/example/App.d.ts.map +1 -1
  169. package/lib/typescript/example/Typography.d.ts +12 -0
  170. package/lib/typescript/example/Typography.d.ts.map +1 -0
  171. package/lib/typescript/src/specs/ShadowRegistry/index.d.ts +3 -3
  172. package/lib/typescript/src/specs/ShadowRegistry/index.d.ts.map +1 -1
  173. package/lib/typescript/src/specs/StyleSheet/index.d.ts +2 -1
  174. package/lib/typescript/src/specs/StyleSheet/index.d.ts.map +1 -1
  175. package/lib/typescript/src/specs/index.web.d.ts +1 -1
  176. package/lib/typescript/src/specs/index.web.d.ts.map +1 -1
  177. package/lib/typescript/src/types/stylesheet.d.ts +2 -2
  178. package/lib/typescript/src/types/stylesheet.d.ts.map +1 -1
  179. package/lib/typescript/src/web/convert/boxShadow.d.ts.map +1 -0
  180. package/lib/typescript/src/web/convert/breakpoint.d.ts.map +1 -0
  181. package/lib/typescript/{web → src/web}/convert/index.d.ts +1 -1
  182. package/lib/typescript/src/web/convert/index.d.ts.map +1 -0
  183. package/lib/typescript/src/web/convert/shadow.d.ts.map +1 -0
  184. package/lib/typescript/src/web/convert/style.d.ts.map +1 -0
  185. package/lib/typescript/src/web/convert/textShadow.d.ts.map +1 -0
  186. package/lib/typescript/src/web/convert/transform.d.ts.map +1 -0
  187. package/lib/typescript/{web → src/web}/convert/types.d.ts +1 -1
  188. package/lib/typescript/src/web/convert/types.d.ts.map +1 -0
  189. package/lib/typescript/src/web/convert/utils.d.ts.map +1 -0
  190. package/lib/typescript/{web → src/web}/create.d.ts +11 -11
  191. package/lib/typescript/{web → src/web}/create.d.ts.map +1 -1
  192. package/lib/typescript/src/web/createUnistylesComponent.d.ts +3 -0
  193. package/lib/typescript/src/web/createUnistylesComponent.d.ts.map +1 -0
  194. package/lib/typescript/{web → src/web}/index.d.ts +14 -13
  195. package/lib/typescript/{web → src/web}/index.d.ts.map +1 -1
  196. package/lib/typescript/src/web/listener/index.d.ts +3 -0
  197. package/lib/typescript/src/web/listener/index.d.ts.map +1 -0
  198. package/lib/typescript/src/web/listener/listenToDependencies.d.ts +12 -0
  199. package/lib/typescript/src/web/listener/listenToDependencies.d.ts.map +1 -0
  200. package/lib/typescript/{web → src/web}/listener/listener.d.ts +3 -2
  201. package/lib/typescript/src/web/listener/listener.d.ts.map +1 -0
  202. package/lib/typescript/src/web/mock.d.ts +5 -0
  203. package/lib/typescript/src/web/mock.d.ts.map +1 -0
  204. package/lib/typescript/src/web/mq.d.ts.map +1 -0
  205. package/lib/typescript/src/web/pseudo.d.ts +6 -0
  206. package/lib/typescript/src/web/pseudo.d.ts.map +1 -0
  207. package/lib/typescript/src/web/registry.d.ts +15 -0
  208. package/lib/typescript/src/web/registry.d.ts.map +1 -0
  209. package/lib/typescript/{web → src/web}/runtime.d.ts +6 -7
  210. package/lib/typescript/src/web/runtime.d.ts.map +1 -0
  211. package/lib/typescript/src/web/shadowRegistry.d.ts +17 -0
  212. package/lib/typescript/src/web/shadowRegistry.d.ts.map +1 -0
  213. package/lib/typescript/{web → src/web}/state.d.ts +4 -9
  214. package/lib/typescript/src/web/state.d.ts.map +1 -0
  215. package/lib/typescript/src/web/utils.d.ts +35 -0
  216. package/lib/typescript/src/web/utils.d.ts.map +1 -0
  217. package/lib/typescript/src/web/variants/getVariants.d.ts +3 -0
  218. package/lib/typescript/src/web/variants/getVariants.d.ts.map +1 -0
  219. package/lib/typescript/src/web/variants/index.d.ts +3 -0
  220. package/lib/typescript/src/web/variants/index.d.ts.map +1 -0
  221. package/lib/typescript/src/web/variants/useVariants.d.ts +3 -0
  222. package/lib/typescript/src/web/variants/useVariants.d.ts.map +1 -0
  223. package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.hpp +6 -3
  224. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/HybridNativePlatformSpec.kt +8 -3
  225. package/nitrogen/generated/ios/c++/HybridNativePlatformSpecSwift.hpp +1 -1
  226. package/nitrogen/generated/ios/swift/HybridNativePlatformSpec.swift +1 -1
  227. package/nitrogen/generated/ios/swift/HybridNativePlatformSpecCxx.swift +14 -2
  228. package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.hpp +3 -0
  229. package/nitrogen/generated/shared/c++/HybridUnistylesNavigationBarSpec.hpp +3 -0
  230. package/nitrogen/generated/shared/c++/HybridUnistylesRuntimeSpec.hpp +3 -0
  231. package/nitrogen/generated/shared/c++/HybridUnistylesShadowRegistrySpec.hpp +3 -0
  232. package/nitrogen/generated/shared/c++/HybridUnistylesStatusBarSpec.hpp +3 -0
  233. package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.cpp +1 -1
  234. package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.hpp +4 -1
  235. package/package.json +3 -3
  236. package/plugin/__tests__/dependencies.spec.js +199 -111
  237. package/plugin/__tests__/ref.spec.js +638 -202
  238. package/plugin/__tests__/stylesheet.spec.js +182 -71
  239. package/plugin/index.js +110 -23
  240. package/plugin/ref.js +64 -13
  241. package/plugin/style.js +82 -22
  242. package/plugin/stylesheet.js +44 -1
  243. package/plugin/variants.js +33 -0
  244. package/src/index.ts +3 -0
  245. package/src/specs/NavigtionBar/index.ts +1 -1
  246. package/src/specs/ShadowRegistry/index.ts +10 -9
  247. package/src/specs/StatusBar/index.ts +1 -1
  248. package/src/specs/StyleSheet/index.ts +3 -1
  249. package/src/specs/UnistylesRuntime/index.ts +1 -1
  250. package/src/specs/index.web.ts +1 -1
  251. package/src/types/stylesheet.ts +2 -2
  252. package/{web → src/web}/convert/breakpoint.ts +1 -1
  253. package/{web → src/web}/convert/index.ts +2 -2
  254. package/{web → src/web}/convert/types.ts +1 -1
  255. package/src/web/create.ts +50 -0
  256. package/src/web/createUnistylesComponent.tsx +54 -0
  257. package/{web → src/web}/index.ts +3 -2
  258. package/src/web/listener/index.ts +2 -0
  259. package/src/web/listener/listenToDependencies.ts +45 -0
  260. package/{web → src/web}/listener/listener.ts +2 -2
  261. package/{web → src/web}/mock.ts +2 -12
  262. package/src/web/pseudo.ts +137 -0
  263. package/src/web/registry.ts +60 -0
  264. package/{web → src/web}/runtime.ts +4 -6
  265. package/src/web/shadowRegistry.ts +124 -0
  266. package/{web → src/web}/state.ts +5 -49
  267. package/{web → src/web}/utils.ts +91 -17
  268. package/src/web/variants/getVariants.ts +42 -0
  269. package/src/web/variants/index.ts +2 -0
  270. package/src/web/variants/useVariants.ts +65 -0
  271. package/lib/typescript/web/convert/boxShadow.d.ts.map +0 -1
  272. package/lib/typescript/web/convert/breakpoint.d.ts.map +0 -1
  273. package/lib/typescript/web/convert/index.d.ts.map +0 -1
  274. package/lib/typescript/web/convert/shadow.d.ts.map +0 -1
  275. package/lib/typescript/web/convert/style.d.ts.map +0 -1
  276. package/lib/typescript/web/convert/textShadow.d.ts.map +0 -1
  277. package/lib/typescript/web/convert/transform.d.ts.map +0 -1
  278. package/lib/typescript/web/convert/types.d.ts.map +0 -1
  279. package/lib/typescript/web/convert/utils.d.ts.map +0 -1
  280. package/lib/typescript/web/listener/index.d.ts +0 -2
  281. package/lib/typescript/web/listener/index.d.ts.map +0 -1
  282. package/lib/typescript/web/listener/listener.d.ts.map +0 -1
  283. package/lib/typescript/web/mock.d.ts +0 -14
  284. package/lib/typescript/web/mock.d.ts.map +0 -1
  285. package/lib/typescript/web/mq.d.ts.map +0 -1
  286. package/lib/typescript/web/pseudo.d.ts +0 -4
  287. package/lib/typescript/web/pseudo.d.ts.map +0 -1
  288. package/lib/typescript/web/registry.d.ts +0 -12
  289. package/lib/typescript/web/registry.d.ts.map +0 -1
  290. package/lib/typescript/web/runtime.d.ts.map +0 -1
  291. package/lib/typescript/web/state.d.ts.map +0 -1
  292. package/lib/typescript/web/useVariants.d.ts +0 -3
  293. package/lib/typescript/web/useVariants.d.ts.map +0 -1
  294. package/lib/typescript/web/utils.d.ts +0 -18
  295. package/lib/typescript/web/utils.d.ts.map +0 -1
  296. package/web/create.ts +0 -102
  297. package/web/listener/index.ts +0 -1
  298. package/web/pseudo.ts +0 -11
  299. package/web/registry.ts +0 -41
  300. package/web/useVariants.ts +0 -99
  301. /package/lib/typescript/{web → src/web}/convert/boxShadow.d.ts +0 -0
  302. /package/lib/typescript/{web → src/web}/convert/breakpoint.d.ts +0 -0
  303. /package/lib/typescript/{web → src/web}/convert/shadow.d.ts +0 -0
  304. /package/lib/typescript/{web → src/web}/convert/style.d.ts +0 -0
  305. /package/lib/typescript/{web → src/web}/convert/textShadow.d.ts +0 -0
  306. /package/lib/typescript/{web → src/web}/convert/transform.d.ts +0 -0
  307. /package/lib/typescript/{web → src/web}/convert/utils.d.ts +0 -0
  308. /package/lib/typescript/{web → src/web}/mq.d.ts +0 -0
  309. /package/{web → src/web}/convert/boxShadow.ts +0 -0
  310. /package/{web → src/web}/convert/module.d.ts +0 -0
  311. /package/{web → src/web}/convert/shadow.ts +0 -0
  312. /package/{web → src/web}/convert/style.ts +0 -0
  313. /package/{web → src/web}/convert/textShadow.ts +0 -0
  314. /package/{web → src/web}/convert/transform.ts +0 -0
  315. /package/{web → src/web}/convert/utils.ts +0 -0
  316. /package/{web → src/web}/mq.ts +0 -0
@@ -16,6 +16,7 @@ pluginTester({
16
16
  {
17
17
  title: 'Should not add dependencies to StyleSheet if user is not using theme or miniRuntime',
18
18
  code: `
19
+ import { View, Text } from 'react-native'
19
20
  import { StyleSheet } from 'react-native-unistyles'
20
21
 
21
22
  export const Example = () => {
@@ -34,15 +35,16 @@ pluginTester({
34
35
  `,
35
36
  output: `
36
37
  import { UnistylesShadowRegistry } from 'react-native-unistyles'
38
+ import { View, Text } from 'react-native'
37
39
  import { StyleSheet } from 'react-native-unistyles'
38
40
 
39
41
  export const Example = () => {
40
42
  return (
41
43
  <View
42
- style={styles.container}
44
+ style={[styles.container]}
43
45
  ref={ref => {
44
- UnistylesShadowRegistry.add(ref, styles.container)
45
- return () => UnistylesShadowRegistry.remove(ref, styles.container)
46
+ UnistylesShadowRegistry.add(ref, styles.container, undefined, undefined)
47
+ return () => UnistylesShadowRegistry.remove(ref)
46
48
  }}
47
49
  >
48
50
  <Text>Hello world</Text>
@@ -50,16 +52,20 @@ pluginTester({
50
52
  )
51
53
  }
52
54
 
53
- const styles = StyleSheet.create({
54
- container: {
55
- backgroundColor: 'red'
56
- }
57
- })
55
+ const styles = StyleSheet.create(
56
+ {
57
+ container: {
58
+ backgroundColor: 'red'
59
+ }
60
+ },
61
+ 793953373
62
+ )
58
63
  `
59
64
  },
60
65
  {
61
66
  title: 'Should add dependencies to StyleSheet if user is using theme',
62
67
  code: `
68
+ import { View, Text } from 'react-native'
63
69
  import { StyleSheet } from 'react-native-unistyles'
64
70
 
65
71
  export const Example = () => {
@@ -78,15 +84,16 @@ pluginTester({
78
84
  `,
79
85
  output: `
80
86
  import { UnistylesShadowRegistry } from 'react-native-unistyles'
87
+ import { View, Text } from 'react-native'
81
88
  import { StyleSheet } from 'react-native-unistyles'
82
89
 
83
90
  export const Example = () => {
84
91
  return (
85
92
  <View
86
- style={styles.container}
93
+ style={[styles.container]}
87
94
  ref={ref => {
88
- UnistylesShadowRegistry.add(ref, styles.container)
89
- return () => UnistylesShadowRegistry.remove(ref, styles.container)
95
+ UnistylesShadowRegistry.add(ref, styles.container, undefined, undefined)
96
+ return () => UnistylesShadowRegistry.remove(ref)
90
97
  }}
91
98
  >
92
99
  <Text>Hello world</Text>
@@ -94,17 +101,21 @@ pluginTester({
94
101
  )
95
102
  }
96
103
 
97
- const styles = StyleSheet.create(theme => ({
98
- container: {
99
- backgroundColor: theme.colors.background,
100
- uni__dependencies: [0]
101
- }
102
- }))
104
+ const styles = StyleSheet.create(
105
+ theme => ({
106
+ container: {
107
+ backgroundColor: theme.colors.background,
108
+ uni__dependencies: [0]
109
+ }
110
+ }),
111
+ 793953373
112
+ )
103
113
  `
104
114
  },
105
115
  {
106
116
  title: 'Should add dependencies to StyleSheet even if user did rename import',
107
117
  code: `
118
+ import { View, Text } from 'react-native'
108
119
  import { StyleSheet as ST } from 'react-native-unistyles'
109
120
 
110
121
  export const Example = () => {
@@ -123,15 +134,16 @@ pluginTester({
123
134
  `,
124
135
  output: `
125
136
  import { UnistylesShadowRegistry } from 'react-native-unistyles'
137
+ import { View, Text } from 'react-native'
126
138
  import { StyleSheet as ST } from 'react-native-unistyles'
127
139
 
128
140
  export const Example = () => {
129
141
  return (
130
142
  <View
131
- style={styles.container}
143
+ style={[styles.container]}
132
144
  ref={ref => {
133
- UnistylesShadowRegistry.add(ref, styles.container)
134
- return () => UnistylesShadowRegistry.remove(ref, styles.container)
145
+ UnistylesShadowRegistry.add(ref, styles.container, undefined, undefined)
146
+ return () => UnistylesShadowRegistry.remove(ref)
135
147
  }}
136
148
  >
137
149
  <Text>Hello world</Text>
@@ -139,17 +151,21 @@ pluginTester({
139
151
  )
140
152
  }
141
153
 
142
- const styles = ST.create(theme => ({
143
- container: {
144
- backgroundColor: theme.colors.background,
145
- uni__dependencies: [0]
146
- }
147
- }))
154
+ const styles = ST.create(
155
+ theme => ({
156
+ container: {
157
+ backgroundColor: theme.colors.background,
158
+ uni__dependencies: [0]
159
+ }
160
+ }),
161
+ 793953373
162
+ )
148
163
  `
149
164
  },
150
165
  {
151
166
  title: 'Should detect variants for object StyleSheet',
152
167
  code: `
168
+ import { View, Text } from 'react-native'
153
169
  import { StyleSheet } from 'react-native-unistyles'
154
170
 
155
171
  export const Example = () => {
@@ -169,15 +185,16 @@ pluginTester({
169
185
  `,
170
186
  output: `
171
187
  import { UnistylesShadowRegistry } from 'react-native-unistyles'
188
+ import { View, Text } from 'react-native'
172
189
  import { StyleSheet } from 'react-native-unistyles'
173
190
 
174
191
  export const Example = () => {
175
192
  return (
176
193
  <View
177
- style={styles.container}
194
+ style={[styles.container]}
178
195
  ref={ref => {
179
- UnistylesShadowRegistry.add(ref, styles.container)
180
- return () => UnistylesShadowRegistry.remove(ref, styles.container)
196
+ UnistylesShadowRegistry.add(ref, styles.container, undefined, undefined)
197
+ return () => UnistylesShadowRegistry.remove(ref)
181
198
  }}
182
199
  >
183
200
  <Text>Hello world</Text>
@@ -185,18 +202,22 @@ pluginTester({
185
202
  )
186
203
  }
187
204
 
188
- const styles = StyleSheet.create({
189
- container: {
190
- backgroundColor: 'red',
191
- variants: {},
192
- uni__dependencies: [4]
193
- }
194
- })
205
+ const styles = StyleSheet.create(
206
+ {
207
+ container: {
208
+ backgroundColor: 'red',
209
+ variants: {},
210
+ uni__dependencies: [4]
211
+ }
212
+ },
213
+ 793953373
214
+ )
195
215
  `
196
216
  },
197
217
  {
198
218
  title: 'Should detect variants for object StyleSheet and dynamic function',
199
219
  code: `
220
+ import { View, Text } from 'react-native'
200
221
  import { StyleSheet } from 'react-native-unistyles'
201
222
 
202
223
  export const Example = () => {
@@ -216,15 +237,16 @@ pluginTester({
216
237
  `,
217
238
  output: `
218
239
  import { UnistylesShadowRegistry } from 'react-native-unistyles'
240
+ import { View, Text } from 'react-native'
219
241
  import { StyleSheet } from 'react-native-unistyles'
220
242
 
221
243
  export const Example = () => {
222
244
  return (
223
245
  <View
224
- style={styles.container}
246
+ style={[styles.container]}
225
247
  ref={ref => {
226
- UnistylesShadowRegistry.add(ref, styles.container)
227
- return () => UnistylesShadowRegistry.remove(ref, styles.container)
248
+ UnistylesShadowRegistry.add(ref, styles.container, undefined, undefined)
249
+ return () => UnistylesShadowRegistry.remove(ref)
228
250
  }}
229
251
  >
230
252
  <Text>Hello world</Text>
@@ -232,18 +254,22 @@ pluginTester({
232
254
  )
233
255
  }
234
256
 
235
- const styles = StyleSheet.create({
236
- container: () => ({
237
- backgroundColor: 'red',
238
- variants: {},
239
- uni__dependencies: [4]
240
- })
241
- })
257
+ const styles = StyleSheet.create(
258
+ {
259
+ container: () => ({
260
+ backgroundColor: 'red',
261
+ variants: {},
262
+ uni__dependencies: [4]
263
+ })
264
+ },
265
+ 793953373
266
+ )
242
267
  `
243
268
  },
244
269
  {
245
270
  title: 'Should detect miniRuntime dependency',
246
271
  code: `
272
+ import { View, Text } from 'react-native'
247
273
  import { StyleSheet } from 'react-native-unistyles'
248
274
 
249
275
  export const Example = () => {
@@ -264,15 +290,16 @@ pluginTester({
264
290
  `,
265
291
  output: `
266
292
  import { UnistylesShadowRegistry } from 'react-native-unistyles'
293
+ import { View, Text } from 'react-native'
267
294
  import { StyleSheet } from 'react-native-unistyles'
268
295
 
269
296
  export const Example = () => {
270
297
  return (
271
298
  <View
272
- style={styles.container}
299
+ style={[styles.container]}
273
300
  ref={ref => {
274
- UnistylesShadowRegistry.add(ref, styles.container)
275
- return () => UnistylesShadowRegistry.remove(ref, styles.container)
301
+ UnistylesShadowRegistry.add(ref, styles.container, undefined, undefined)
302
+ return () => UnistylesShadowRegistry.remove(ref)
276
303
  }}
277
304
  >
278
305
  <Text>Hello world</Text>
@@ -280,19 +307,23 @@ pluginTester({
280
307
  )
281
308
  }
282
309
 
283
- const styles = StyleSheet.create((_, rt) => ({
284
- container: () => ({
285
- backgroundColor: 'red',
286
- variants: {},
287
- paddingTop: rt.insets.top,
288
- uni__dependencies: [4, 9]
289
- })
290
- }))
310
+ const styles = StyleSheet.create(
311
+ (_, rt) => ({
312
+ container: () => ({
313
+ backgroundColor: 'red',
314
+ variants: {},
315
+ paddingTop: rt.insets.top,
316
+ uni__dependencies: [4, 9]
317
+ })
318
+ }),
319
+ 793953373
320
+ )
291
321
  `
292
322
  },
293
323
  {
294
324
  title: 'Should detect miniRuntime and theme dependencies even if user renamed it\'s names',
295
325
  code: `
326
+ import { View, Text } from 'react-native'
296
327
  import { StyleSheet } from 'react-native-unistyles'
297
328
 
298
329
  export const Example = () => {
@@ -313,15 +344,16 @@ pluginTester({
313
344
  `,
314
345
  output: `
315
346
  import { UnistylesShadowRegistry } from 'react-native-unistyles'
347
+ import { View, Text } from 'react-native'
316
348
  import { StyleSheet } from 'react-native-unistyles'
317
349
 
318
350
  export const Example = () => {
319
351
  return (
320
352
  <View
321
- style={styles.container}
353
+ style={[styles.container]}
322
354
  ref={ref => {
323
- UnistylesShadowRegistry.add(ref, styles.container)
324
- return () => UnistylesShadowRegistry.remove(ref, styles.container)
355
+ UnistylesShadowRegistry.add(ref, styles.container, undefined, undefined)
356
+ return () => UnistylesShadowRegistry.remove(ref)
325
357
  }}
326
358
  >
327
359
  <Text>Hello world</Text>
@@ -329,19 +361,23 @@ pluginTester({
329
361
  )
330
362
  }
331
363
 
332
- const styles = StyleSheet.create((hhsa, dee) => ({
333
- container: () => ({
334
- backgroundColor: hhsa.colors.background,
335
- variants: {},
336
- paddingTop: dee.colorScheme === 'dark' ? 0 : 10,
337
- uni__dependencies: [0, 4, 5]
338
- })
339
- }))
364
+ const styles = StyleSheet.create(
365
+ (hhsa, dee) => ({
366
+ container: () => ({
367
+ backgroundColor: hhsa.colors.background,
368
+ variants: {},
369
+ paddingTop: dee.colorScheme === 'dark' ? 0 : 10,
370
+ uni__dependencies: [0, 4, 5]
371
+ })
372
+ }),
373
+ 793953373
374
+ )
340
375
  `
341
376
  },
342
377
  {
343
378
  title: 'Should detect dependencies in function',
344
379
  code: `
380
+ import { View, Text } from 'react-native'
345
381
  import { StyleSheet } from 'react-native-unistyles'
346
382
 
347
383
  export const Example = () => {
@@ -364,15 +400,16 @@ pluginTester({
364
400
  `,
365
401
  output: `
366
402
  import { UnistylesShadowRegistry } from 'react-native-unistyles'
403
+ import { View, Text } from 'react-native'
367
404
  import { StyleSheet } from 'react-native-unistyles'
368
405
 
369
406
  export const Example = () => {
370
407
  return (
371
408
  <View
372
- style={styles.container}
409
+ style={[styles.container]}
373
410
  ref={ref => {
374
- UnistylesShadowRegistry.add(ref, styles.container)
375
- return () => UnistylesShadowRegistry.remove(ref, styles.container)
411
+ UnistylesShadowRegistry.add(ref, styles.container, undefined, undefined)
412
+ return () => UnistylesShadowRegistry.remove(ref)
376
413
  }}
377
414
  >
378
415
  <Text>Hello world</Text>
@@ -389,7 +426,81 @@ pluginTester({
389
426
  uni__dependencies: [0, 4, 9]
390
427
  })
391
428
  }
429
+ }, 793953373)
430
+ `
431
+ },
432
+ {
433
+ title: 'Should generates two different ids for 2 stylesheets in the same file',
434
+ code: `
435
+ import { View, Text } from 'react-native'
436
+ import { StyleSheet } from 'react-native-unistyles'
437
+
438
+ export const Example = () => {
439
+ return (
440
+ <View style={styles.container}>
441
+ <Text>Hello world</Text>
442
+ </View>
443
+ )
444
+ }
445
+
446
+ const styles = StyleSheet.create((theme, rt) => {
447
+ return {
448
+ container: () => ({
449
+ backgroundColor: theme.colors.background,
450
+ variants: {},
451
+ paddingTop: rt.insets.top
452
+ })
453
+ }
454
+ })
455
+ const styles2 = StyleSheet.create((theme, rt) => {
456
+ return {
457
+ container: () => ({
458
+ backgroundColor: theme.colors.background,
459
+ variants: {},
460
+ paddingTop: rt.insets.top
461
+ })
462
+ }
392
463
  })
464
+ `,
465
+ output: `
466
+ import { UnistylesShadowRegistry } from 'react-native-unistyles'
467
+ import { View, Text } from 'react-native'
468
+ import { StyleSheet } from 'react-native-unistyles'
469
+
470
+ export const Example = () => {
471
+ return (
472
+ <View
473
+ style={[styles.container]}
474
+ ref={ref => {
475
+ UnistylesShadowRegistry.add(ref, styles.container, undefined, undefined)
476
+ return () => UnistylesShadowRegistry.remove(ref)
477
+ }}
478
+ >
479
+ <Text>Hello world</Text>
480
+ </View>
481
+ )
482
+ }
483
+
484
+ const styles = StyleSheet.create((theme, rt) => {
485
+ return {
486
+ container: () => ({
487
+ backgroundColor: theme.colors.background,
488
+ variants: {},
489
+ paddingTop: rt.insets.top,
490
+ uni__dependencies: [0, 4, 9]
491
+ })
492
+ }
493
+ }, 793953373)
494
+ const styles2 = StyleSheet.create((theme, rt) => {
495
+ return {
496
+ container: () => ({
497
+ backgroundColor: theme.colors.background,
498
+ variants: {},
499
+ paddingTop: rt.insets.top,
500
+ uni__dependencies: [0, 4, 9]
501
+ })
502
+ }
503
+ }, 793953374)
393
504
  `
394
505
  },
395
506
  ]
package/plugin/index.js CHANGED
@@ -1,7 +1,28 @@
1
1
  const addShadowRegistryImport = require('./import')
2
- const { getStyleObjectPath, getStyleAttribute } = require('./style')
2
+ const { getStyleMetadata, getStyleAttribute, styleAttributeToArray } = require('./style')
3
3
  const { getRefProp, addRef, overrideRef, hasStringRef } = require('./ref')
4
- const { isUnistylesStyleSheet, analyzeDependencies } = require('./stylesheet')
4
+ const { isUnistylesStyleSheet, analyzeDependencies, addStyleSheetTag, getUnistyle } = require('./stylesheet')
5
+ const { isUsingVariants, extractVariants } = require('./variants')
6
+
7
+ const reactNativeComponentNames = [
8
+ 'View',
9
+ 'Text',
10
+ 'Image',
11
+ 'ImageBackground',
12
+ 'KeyboardAvoidingView',
13
+ 'Modal',
14
+ 'Pressable',
15
+ 'ScrollView',
16
+ 'FlatList',
17
+ 'SectionList',
18
+ 'Switch',
19
+ 'Text',
20
+ 'TextInput',
21
+ 'TouchableHighlight',
22
+ 'TouchableOpacity',
23
+ 'TouchableWithoutFeedback',
24
+ 'VirtualizedList'
25
+ ]
5
26
 
6
27
  module.exports = function ({ types: t }) {
7
28
  return {
@@ -12,7 +33,9 @@ module.exports = function ({ types: t }) {
12
33
  state.file.hasAnyUnistyle = false
13
34
  state.file.hasUnistylesImport = false
14
35
  state.file.styleSheetLocalName = ''
15
- state.file.webDynamicFunctions = {}
36
+ state.file.tagNumber = 0
37
+ state.file.isClassComponent = false
38
+ state.reactNativeImports = {}
16
39
  },
17
40
  exit(path, state) {
18
41
  if (state.file.hasAnyUnistyle) {
@@ -20,6 +43,38 @@ module.exports = function ({ types: t }) {
20
43
  }
21
44
  }
22
45
  },
46
+ FunctionDeclaration(path, state) {
47
+ const componentName = path.node.id
48
+ ? path.node.id.name
49
+ : null
50
+
51
+ if (componentName) {
52
+ state.file.hasVariants = false
53
+ }
54
+ },
55
+ ClassDeclaration(path, state) {
56
+ const componentName = path.node.id
57
+ ? path.node.id.name
58
+ : null
59
+
60
+ if (componentName) {
61
+ state.file.hasVariants = false
62
+ state.file.isClassComponent = true
63
+ }
64
+ },
65
+ VariableDeclaration(path, state) {
66
+ path.node.declarations.forEach((declaration) => {
67
+ if (t.isArrowFunctionExpression(declaration.init) || t.isFunctionExpression(declaration.init)) {
68
+ const componentName = declaration.id
69
+ ? declaration.id.name
70
+ : null
71
+
72
+ if (componentName) {
73
+ state.file.hasVariants = false
74
+ }
75
+ }
76
+ })
77
+ },
23
78
  ImportDeclaration(path, state) {
24
79
  const importSource = path.node.source.value
25
80
 
@@ -32,9 +87,30 @@ module.exports = function ({ types: t }) {
32
87
  }
33
88
  })
34
89
  }
90
+
91
+ if (importSource.includes('react-native')) {
92
+ path.node.specifiers.forEach(specifier => {
93
+ if (specifier.imported && reactNativeComponentNames.includes(specifier.imported.name)) {
94
+ state.reactNativeImports[specifier.local.name] = true
95
+ }
96
+ })
97
+ }
35
98
  },
36
99
  JSXElement(path, state) {
37
- if (!state.file.hasUnistylesImport) {
100
+ if (state.file.isClassComponent) {
101
+ return
102
+ }
103
+
104
+ const openingElement = path.node.openingElement
105
+ const openingElementName = openingElement.name.name
106
+ const isReactNativeComponent = Boolean(state.reactNativeImports[openingElementName])
107
+ const isAnimatedComponent = (
108
+ !isReactNativeComponent &&
109
+ openingElement.name.object &&
110
+ openingElement.name.object.name === 'Animated'
111
+ )
112
+
113
+ if (!isReactNativeComponent && !isAnimatedComponent) {
38
114
  return
39
115
  }
40
116
 
@@ -45,43 +121,52 @@ module.exports = function ({ types: t }) {
45
121
  return
46
122
  }
47
123
 
48
- const stylePath = getStyleObjectPath(t, styleAttr.value.expression, state)
124
+ const metadata = getStyleMetadata(t, styleAttr.value.expression)
49
125
 
50
- // style prop is not using object expression
51
- if (stylePath.length !== 2) {
126
+ // style prop is using unexpected expression
127
+ if (metadata.length === 0) {
52
128
  return
53
129
  }
54
130
 
131
+ styleAttributeToArray(t, path)
132
+
55
133
  // to add import
56
134
  state.file.hasAnyUnistyle = true
57
135
 
58
- const refProp = getRefProp(t, path)
136
+ metadata.forEach(meta => {
137
+ const refProp = getRefProp(t, path)
59
138
 
60
- if (!refProp && hasStringRef(t, path)) {
61
- throw new Error("Detected string based ref which is not supported by Unistyles.")
62
- }
63
-
64
- const styleObj = stylePath[0]
65
- const styleProp = stylePath[1]
139
+ if (!refProp && hasStringRef(t, path)) {
140
+ throw new Error("Detected string based ref which is not supported by Unistyles.")
141
+ }
66
142
 
67
- refProp
68
- ? overrideRef(t, path, refProp, styleObj, styleProp)
69
- : addRef(t, path, styleObj, styleProp)
143
+ refProp
144
+ ? overrideRef(t, path, refProp, meta, state)
145
+ : addRef(t, path, meta, state)
146
+ })
70
147
  },
71
148
  CallExpression(path, state) {
149
+ if (isUsingVariants(t, path)) {
150
+ extractVariants(t, path, state)
151
+ }
152
+
72
153
  if (!isUnistylesStyleSheet(t, path, state)) {
73
154
  return
74
155
  }
75
156
 
157
+ addStyleSheetTag(t, path, state)
158
+
76
159
  const arg = path.node.arguments[0]
77
160
 
78
161
  // Object passed to StyleSheet.create
79
162
  if (t.isObjectExpression(arg)) {
80
163
  arg.properties.forEach(property => {
81
164
  if (t.isObjectProperty(property)) {
82
- const propertyValue = t.isArrowFunctionExpression(property.value)
83
- ? property.value.body
84
- : property.value
165
+ const propertyValue = getUnistyle(t, property)
166
+
167
+ if (!propertyValue) {
168
+ return
169
+ }
85
170
 
86
171
  analyzeDependencies(t, state, property.key.name, propertyValue)
87
172
  }
@@ -107,9 +192,11 @@ module.exports = function ({ types: t }) {
107
192
  if (t.isObjectExpression(body)) {
108
193
  body.properties.forEach(property => {
109
194
  if (t.isObjectProperty(property)) {
110
- const propertyValue = t.isArrowFunctionExpression(property.value)
111
- ? property.value.body
112
- : property.value
195
+ const propertyValue = getUnistyle(t, property)
196
+
197
+ if (!propertyValue) {
198
+ return
199
+ }
113
200
 
114
201
  analyzeDependencies(t, state, property.key.name, propertyValue, themeLocalName, miniRuntimeLocalName)
115
202
  }