@builder.io/mitosis 0.0.56-2 → 0.0.56-22

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 (298) hide show
  1. package/dist/src/__tests__/angular.test.js +2 -13
  2. package/dist/src/__tests__/builder.test.js +3 -3
  3. package/dist/src/__tests__/data/basic-child-component.raw.d.ts +1 -0
  4. package/dist/src/__tests__/data/basic-child-component.raw.jsx +21 -0
  5. package/dist/src/__tests__/data/basic-context.raw.d.ts +1 -0
  6. package/dist/src/__tests__/data/basic-context.raw.jsx +29 -0
  7. package/dist/src/__tests__/data/basic-custom-mitosis-package.raw.d.ts +1 -0
  8. package/dist/src/__tests__/data/basic-custom-mitosis-package.raw.jsx +10 -0
  9. package/dist/src/__tests__/data/basic-for-show.raw.d.ts +1 -0
  10. package/dist/src/__tests__/data/basic-for-show.raw.jsx +20 -0
  11. package/dist/src/__tests__/data/basic-for.raw.d.ts +1 -0
  12. package/dist/src/__tests__/data/basic-for.raw.jsx +23 -0
  13. package/dist/src/__tests__/data/basic-forwardRef-metadata.raw.d.ts +5 -0
  14. package/dist/src/__tests__/data/basic-forwardRef-metadata.raw.jsx +17 -0
  15. package/dist/src/__tests__/data/basic-forwardRef.raw.d.ts +5 -0
  16. package/dist/src/__tests__/data/basic-forwardRef.raw.jsx +14 -0
  17. package/dist/src/__tests__/data/basic-onChange.raw.d.ts +1 -0
  18. package/dist/src/__tests__/data/basic-onChange.raw.jsx +17 -0
  19. package/dist/src/__tests__/data/basic-onMount-update.raw.d.ts +5 -0
  20. package/dist/src/__tests__/data/basic-onMount-update.raw.jsx +17 -0
  21. package/dist/src/__tests__/data/basic-onUpdate-return.raw.d.ts +1 -0
  22. package/dist/src/__tests__/data/basic-onUpdate-return.raw.jsx +24 -0
  23. package/dist/src/__tests__/data/basic-outputs-meta.raw.d.ts +1 -0
  24. package/dist/src/__tests__/data/basic-outputs-meta.raw.jsx +17 -0
  25. package/dist/src/__tests__/data/basic-outputs.raw.d.ts +1 -0
  26. package/dist/src/__tests__/data/basic-outputs.raw.jsx +14 -0
  27. package/dist/src/__tests__/data/basic-preserve-export-or-local-statement.raw.d.ts +6 -0
  28. package/dist/src/__tests__/data/basic-preserve-export-or-local-statement.raw.jsx +14 -0
  29. package/dist/src/__tests__/data/basic-props-destructure.raw.d.ts +6 -0
  30. package/dist/src/__tests__/data/basic-props-destructure.raw.jsx +14 -0
  31. package/dist/src/__tests__/data/basic-props.raw.d.ts +6 -0
  32. package/dist/src/__tests__/data/basic-props.raw.jsx +13 -0
  33. package/dist/src/__tests__/data/basic-ref-assignment.raw.d.ts +4 -0
  34. package/dist/src/__tests__/data/basic-ref-assignment.raw.jsx +15 -0
  35. package/dist/src/__tests__/data/basic-ref-usePrevious.raw.d.ts +5 -0
  36. package/dist/src/__tests__/data/basic-ref-usePrevious.raw.jsx +35 -0
  37. package/dist/src/__tests__/data/basic-ref.raw.d.ts +4 -0
  38. package/dist/src/__tests__/data/basic-ref.raw.jsx +36 -0
  39. package/dist/src/__tests__/data/basic.raw.d.ts +6 -1
  40. package/dist/src/__tests__/data/basic.raw.jsx +13 -4
  41. package/dist/src/__tests__/data/blocks/button-with-metadata.raw.d.ts +1 -1
  42. package/dist/src/__tests__/data/blocks/button.raw.d.ts +1 -1
  43. package/dist/src/__tests__/data/blocks/classname-jsx.raw.d.ts +7 -0
  44. package/dist/src/__tests__/data/blocks/classname-jsx.raw.jsx +15 -0
  45. package/dist/src/__tests__/data/blocks/columns.raw.d.ts +1 -1
  46. package/dist/src/__tests__/data/blocks/columns.raw.jsx +1 -1
  47. package/dist/src/__tests__/data/blocks/content-slot-html.raw.d.ts +7 -0
  48. package/dist/src/__tests__/data/blocks/content-slot-html.raw.jsx +15 -0
  49. package/dist/src/__tests__/data/blocks/content-slot-jsx.raw.d.ts +6 -0
  50. package/dist/src/__tests__/data/blocks/content-slot-jsx.raw.jsx +12 -0
  51. package/dist/src/__tests__/data/blocks/custom-code.raw.d.ts +1 -1
  52. package/dist/src/__tests__/data/blocks/custom-code.raw.jsx +3 -7
  53. package/dist/src/__tests__/data/blocks/embed.raw.d.ts +1 -1
  54. package/dist/src/__tests__/data/blocks/embed.raw.jsx +3 -7
  55. package/dist/src/__tests__/data/blocks/form.raw.d.ts +1 -1
  56. package/dist/src/__tests__/data/blocks/form.raw.jsx +3 -3
  57. package/dist/src/__tests__/data/blocks/image.raw.d.ts +1 -1
  58. package/dist/src/__tests__/data/blocks/image.raw.jsx +8 -9
  59. package/dist/src/__tests__/data/blocks/img-state.raw.d.ts +1 -0
  60. package/dist/src/__tests__/data/blocks/img-state.raw.jsx +17 -0
  61. package/dist/src/__tests__/data/blocks/img.raw.d.ts +1 -1
  62. package/dist/src/__tests__/data/blocks/input.raw.d.ts +1 -1
  63. package/dist/src/__tests__/data/blocks/input.raw.jsx +1 -3
  64. package/dist/src/__tests__/data/blocks/multiple-onUpdate.raw.d.ts +1 -1
  65. package/dist/src/__tests__/data/blocks/multiple-onUpdateWithDeps.raw.d.ts +1 -1
  66. package/dist/src/__tests__/data/blocks/multiple-onUpdateWithDeps.raw.jsx +7 -1
  67. package/dist/src/__tests__/data/blocks/onInit-onMount.raw.d.ts +1 -0
  68. package/dist/src/__tests__/data/blocks/onInit-onMount.raw.jsx +13 -0
  69. package/dist/src/__tests__/data/blocks/onInit.raw.d.ts +8 -0
  70. package/dist/src/__tests__/data/blocks/onInit.raw.jsx +20 -0
  71. package/dist/src/__tests__/data/blocks/onMount.raw.d.ts +1 -1
  72. package/dist/src/__tests__/data/blocks/onUpdate.raw.d.ts +1 -1
  73. package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.d.ts +1 -1
  74. package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.jsx +1 -1
  75. package/dist/src/__tests__/data/blocks/raw-text.raw.d.ts +1 -1
  76. package/dist/src/__tests__/data/blocks/rootShow.raw.d.ts +1 -1
  77. package/dist/src/__tests__/data/blocks/section-state.raw.d.ts +6 -0
  78. package/dist/src/__tests__/data/blocks/section-state.raw.jsx +17 -0
  79. package/dist/src/__tests__/data/blocks/section.raw.d.ts +1 -1
  80. package/dist/src/__tests__/data/blocks/select.raw.d.ts +1 -1
  81. package/dist/src/__tests__/data/blocks/select.raw.jsx +1 -3
  82. package/dist/src/__tests__/data/blocks/self-referencing-component-with-children.raw.d.ts +1 -1
  83. package/dist/src/__tests__/data/blocks/self-referencing-component.raw.d.ts +1 -1
  84. package/dist/src/__tests__/data/blocks/shadow-dom.raw.d.ts +1 -1
  85. package/dist/src/__tests__/data/blocks/shadow-dom.raw.jsx +2 -4
  86. package/dist/src/__tests__/data/blocks/slot-html.raw.d.ts +5 -0
  87. package/dist/src/__tests__/data/blocks/slot-html.raw.jsx +15 -0
  88. package/dist/src/__tests__/data/blocks/slot-jsx.raw.d.ts +5 -0
  89. package/dist/src/__tests__/data/blocks/slot-jsx.raw.jsx +12 -0
  90. package/dist/src/__tests__/data/blocks/stamped-io.raw.d.ts +1 -1
  91. package/dist/src/__tests__/data/blocks/stamped-io.raw.jsx +2 -4
  92. package/dist/src/__tests__/data/blocks/submit-button.raw.d.ts +1 -1
  93. package/dist/src/__tests__/data/blocks/text.raw.d.ts +1 -1
  94. package/dist/src/__tests__/data/blocks/text.raw.jsx +3 -1
  95. package/dist/src/__tests__/data/blocks/textarea.raw.d.ts +1 -1
  96. package/dist/src/__tests__/data/blocks/video.raw.d.ts +1 -1
  97. package/dist/src/__tests__/data/blocks/video.raw.jsx +1 -1
  98. package/dist/src/__tests__/data/context/component-with-context.lite.d.ts +3 -1
  99. package/dist/src/__tests__/data/context/component-with-context.lite.jsx +7 -2
  100. package/dist/src/__tests__/data/styles/class-and-className.raw.d.ts +1 -0
  101. package/dist/src/__tests__/data/styles/class-and-className.raw.jsx +10 -0
  102. package/dist/src/__tests__/data/styles/class.raw.d.ts +1 -0
  103. package/dist/src/__tests__/data/styles/class.raw.jsx +10 -0
  104. package/dist/src/__tests__/data/styles/className.raw.d.ts +1 -0
  105. package/dist/src/__tests__/data/styles/className.raw.jsx +10 -0
  106. package/dist/src/__tests__/data/styles/classState.raw.d.ts +1 -0
  107. package/dist/src/__tests__/data/styles/classState.raw.jsx +12 -0
  108. package/dist/src/__tests__/data/types/component-props-interface.raw.d.ts +6 -0
  109. package/dist/src/__tests__/data/types/component-props-interface.raw.jsx +6 -0
  110. package/dist/src/__tests__/data/types/component-props-type.raw.d.ts +6 -0
  111. package/dist/src/__tests__/data/types/component-props-type.raw.jsx +6 -0
  112. package/dist/src/__tests__/data/types/preserve-typing.raw.d.ts +8 -0
  113. package/dist/src/__tests__/data/types/preserve-typing.raw.jsx +6 -0
  114. package/dist/src/__tests__/html.test.js +2 -13
  115. package/dist/src/__tests__/liquid.test.js +2 -103
  116. package/dist/src/__tests__/parse-jsx.test.js +22 -0
  117. package/dist/src/__tests__/qwik/convertMethodToFunction.test.d.ts +1 -0
  118. package/dist/src/__tests__/qwik/convertMethodToFunction.test.js +34 -0
  119. package/dist/src/__tests__/qwik/src-generator.test.d.ts +1 -0
  120. package/dist/src/__tests__/qwik/src-generator.test.js +65 -0
  121. package/dist/src/__tests__/qwik.directive.test.js +1 -0
  122. package/dist/src/__tests__/qwik.test.js +54 -23
  123. package/dist/src/__tests__/react-native.test.js +3 -136
  124. package/dist/src/__tests__/react.test.js +5 -135
  125. package/dist/src/__tests__/shared.d.ts +3 -0
  126. package/dist/src/__tests__/shared.js +232 -0
  127. package/dist/src/__tests__/solid.test.js +2 -97
  128. package/dist/src/__tests__/stencil.test.js +3 -98
  129. package/dist/src/__tests__/styles.test.d.ts +1 -0
  130. package/dist/src/__tests__/styles.test.js +23 -0
  131. package/dist/src/__tests__/svelte.test.js +2 -31
  132. package/dist/src/__tests__/vue.test.js +2 -134
  133. package/dist/src/__tests__/webcomponent.test.js +8 -5
  134. package/dist/src/constants/hooks.d.ts +6 -0
  135. package/dist/src/constants/hooks.js +9 -0
  136. package/dist/src/flow.d.ts +6 -0
  137. package/dist/src/flow.js +6 -2
  138. package/dist/src/generators/angular.d.ts +8 -2
  139. package/dist/src/generators/angular.js +202 -44
  140. package/dist/src/generators/builder.d.ts +2 -2
  141. package/dist/src/generators/builder.js +19 -26
  142. package/dist/src/generators/context/{react copy.d.ts → qwik.d.ts} +2 -2
  143. package/dist/src/generators/context/{react copy.js → qwik.js} +4 -5
  144. package/dist/src/generators/context/svelte.d.ts +1 -1
  145. package/dist/src/generators/helpers/context.js +1 -2
  146. package/dist/src/generators/html.d.ts +1 -1
  147. package/dist/src/generators/html.js +365 -108
  148. package/dist/src/generators/liquid.d.ts +1 -1
  149. package/dist/src/generators/liquid.js +18 -25
  150. package/dist/src/generators/mitosis.d.ts +1 -1
  151. package/dist/src/generators/mitosis.js +37 -35
  152. package/dist/src/generators/qwik/component-generator.d.ts +4 -0
  153. package/dist/src/generators/qwik/component-generator.js +276 -0
  154. package/dist/src/generators/qwik/component.js +21 -25
  155. package/dist/src/generators/qwik/convertMethodToFunction.d.ts +1 -0
  156. package/dist/src/generators/qwik/convertMethodToFunction.js +161 -0
  157. package/dist/src/generators/qwik/directives.js +27 -22
  158. package/dist/src/generators/qwik/handlers.js +3 -19
  159. package/dist/src/generators/qwik/index.d.ts +3 -1
  160. package/dist/src/generators/qwik/index.js +3 -1
  161. package/dist/src/generators/qwik/jsx.js +33 -13
  162. package/dist/src/generators/qwik/src-generator.d.ts +21 -8
  163. package/dist/src/generators/qwik/src-generator.js +163 -42
  164. package/dist/src/generators/qwik/styles.js +3 -3
  165. package/dist/src/generators/react-native.d.ts +2 -2
  166. package/dist/src/generators/react-native.js +8 -10
  167. package/dist/src/generators/react.d.ts +4 -2
  168. package/dist/src/generators/react.js +152 -80
  169. package/dist/src/generators/solid.d.ts +1 -1
  170. package/dist/src/generators/solid.js +41 -35
  171. package/dist/src/generators/stencil/collect-class-string.js +5 -8
  172. package/dist/src/generators/stencil/generate.d.ts +1 -1
  173. package/dist/src/generators/stencil/generate.js +16 -21
  174. package/dist/src/generators/svelte.d.ts +2 -2
  175. package/dist/src/generators/svelte.js +97 -43
  176. package/dist/src/generators/swift-ui.d.ts +1 -1
  177. package/dist/src/generators/swift-ui.js +17 -19
  178. package/dist/src/generators/template.d.ts +1 -1
  179. package/dist/src/generators/template.js +11 -18
  180. package/dist/src/generators/vue.d.ts +12 -8
  181. package/dist/src/generators/vue.js +111 -63
  182. package/dist/src/helpers/babel-transform.js +3 -8
  183. package/dist/src/helpers/create-mitosis-component.d.ts +1 -1
  184. package/dist/src/helpers/create-mitosis-component.js +1 -1
  185. package/dist/src/helpers/create-mitosis-node.js +1 -1
  186. package/dist/src/helpers/fast-clone.js +1 -3
  187. package/dist/src/helpers/filter-empty-text-nodes.js +1 -2
  188. package/dist/src/helpers/get-bindings.d.ts +2 -0
  189. package/dist/src/helpers/get-bindings.js +18 -0
  190. package/dist/src/helpers/get-prop-functions.d.ts +5 -0
  191. package/dist/src/helpers/get-prop-functions.js +29 -0
  192. package/dist/src/helpers/get-props-ref.d.ts +2 -0
  193. package/dist/src/helpers/get-props-ref.js +32 -0
  194. package/dist/src/helpers/get-refs.js +3 -2
  195. package/dist/src/helpers/get-state-object-string.d.ts +4 -3
  196. package/dist/src/helpers/get-state-object-string.js +23 -20
  197. package/dist/src/helpers/get-styles.js +4 -3
  198. package/dist/src/helpers/getters-to-functions.d.ts +1 -1
  199. package/dist/src/helpers/getters-to-functions.js +1 -1
  200. package/dist/src/helpers/has-bindings-text.d.ts +2 -0
  201. package/dist/src/helpers/has-bindings-text.js +21 -0
  202. package/dist/src/helpers/has-stateful-dom.d.ts +2 -0
  203. package/dist/src/helpers/has-stateful-dom.js +21 -0
  204. package/dist/src/helpers/is-children.js +2 -1
  205. package/dist/src/helpers/is-component.js +1 -3
  206. package/dist/src/helpers/is-html-attribute.d.ts +4 -0
  207. package/dist/src/helpers/is-html-attribute.js +380 -0
  208. package/dist/src/helpers/map-refs.js +17 -3
  209. package/dist/src/helpers/parsers.js +1 -2
  210. package/dist/src/helpers/render-imports.d.ts +18 -2
  211. package/dist/src/helpers/render-imports.js +100 -54
  212. package/dist/src/helpers/render-imports.test.d.ts +1 -0
  213. package/dist/src/helpers/render-imports.test.js +19 -0
  214. package/dist/src/helpers/replace-idenifiers.js +5 -7
  215. package/dist/src/helpers/strip-state-and-props-refs.d.ts +4 -1
  216. package/dist/src/helpers/strip-state-and-props-refs.js +24 -6
  217. package/dist/src/helpers/styles/collect-css.d.ts +6 -0
  218. package/dist/src/helpers/styles/collect-css.js +87 -0
  219. package/dist/src/helpers/styles/collect-css.test.d.ts +1 -0
  220. package/dist/src/helpers/styles/collect-css.test.js +18 -0
  221. package/dist/src/helpers/styles/collect-styled-components.d.ts +2 -0
  222. package/dist/src/helpers/styles/collect-styled-components.js +61 -0
  223. package/dist/src/helpers/{collect-styles.d.ts → styles/helpers.d.ts} +5 -10
  224. package/dist/src/helpers/styles/helpers.js +61 -0
  225. package/dist/src/helpers/typescript.d.ts +2 -0
  226. package/dist/src/{jsx-types.js → helpers/typescript.js} +0 -0
  227. package/dist/src/index.d.ts +7 -4
  228. package/dist/src/index.js +24 -8
  229. package/dist/src/modules/plugins.d.ts +1 -1
  230. package/dist/src/parsers/angular.js +22 -34
  231. package/dist/src/parsers/builder.d.ts +25 -23
  232. package/dist/src/parsers/builder.js +59 -67
  233. package/dist/src/parsers/jsx.d.ts +2 -1
  234. package/dist/src/parsers/jsx.js +300 -93
  235. package/dist/src/parsers/liquid.js +51 -149
  236. package/dist/src/plugins/compile-away-builder-components.js +158 -115
  237. package/dist/src/symbols/symbol-processor.js +10 -7
  238. package/dist/src/targets.d.ts +7 -5
  239. package/dist/src/targets.js +7 -1
  240. package/dist/src/types/config.d.ts +42 -13
  241. package/dist/src/types/mitosis-component.d.ts +31 -10
  242. package/dist/src/types/mitosis-node.d.ts +15 -9
  243. package/dist/src/types/transpiler.d.ts +14 -0
  244. package/dist/src/types/transpiler.js +2 -0
  245. package/dist/test/qwik/Accordion/low.jsx +9 -3
  246. package/dist/test/qwik/Accordion/med.jsx +2 -8
  247. package/dist/test/qwik/For/low.jsx +29 -25
  248. package/dist/test/qwik/For/med.jsx +2 -8
  249. package/dist/test/qwik/Image/high.js +1 -1
  250. package/dist/test/qwik/Image/med.js +15 -13
  251. package/dist/test/qwik/Image.slow/high.js +1 -1
  252. package/dist/test/qwik/Image.slow/med.js +15 -13
  253. package/dist/test/qwik/bindings/low.cjs +12 -3
  254. package/dist/test/qwik/bindings/med.cjs +1 -10
  255. package/dist/test/qwik/button/high.js +1 -1
  256. package/dist/test/qwik/button/low.js +9 -3
  257. package/dist/test/qwik/button/med.js +2 -8
  258. package/dist/test/qwik/component/bindings/low.jsx +48 -5
  259. package/dist/test/qwik/component/bindings/med.jsx +3 -49
  260. package/dist/test/qwik/component/component/inputs/high.cjsx +1 -1
  261. package/dist/test/qwik/component/component/inputs/med.cjsx +8 -9
  262. package/dist/test/qwik/for-loop.bindings/high.cjs +0 -0
  263. package/dist/test/qwik/for-loop.bindings/low.cjs +46 -0
  264. package/dist/test/qwik/for-loop.bindings/med.cjs +5 -0
  265. package/dist/test/qwik/hello_world/stylesheet/low.jsx +9 -3
  266. package/dist/test/qwik/hello_world/stylesheet/med.jsx +2 -8
  267. package/dist/test/qwik/mount/high.cjs +0 -0
  268. package/dist/test/qwik/mount/low.cjs +45 -0
  269. package/dist/test/qwik/mount/med.cjs +3 -0
  270. package/dist/test/qwik/page-with-symbol/low.js +9 -3
  271. package/dist/test/qwik/page-with-symbol/med.js +2 -8
  272. package/dist/test/qwik/show-hide/high.jsx +1 -1
  273. package/dist/test/qwik/show-hide/med.jsx +15 -13
  274. package/dist/test/qwik/svg/low.js +9 -3
  275. package/dist/test/qwik/svg/med.js +2 -8
  276. package/dist/test/qwik/todo/Todo.cjs/high.cjs +6 -10
  277. package/dist/test/qwik/todo/Todo.cjs/med.cjs +9 -9
  278. package/dist/test/qwik/todo/Todo.js/high.js +7 -10
  279. package/dist/test/qwik/todo/Todo.js/med.js +9 -9
  280. package/dist/test/qwik/todo/Todo.tsx/high.tsx +7 -10
  281. package/dist/test/qwik/todo/Todo.tsx/med.tsx +9 -9
  282. package/dist/test/qwik/todos/Todo.tsx/high.tsx +1 -1
  283. package/dist/test/qwik/todos/Todo.tsx/low.tsx +15 -12
  284. package/dist/test/qwik/todos/Todo.tsx/med.tsx +1 -6
  285. package/dist/tsconfig.build.tsbuildinfo +1 -1
  286. package/dist/tsconfig.tsbuildinfo +1 -1
  287. package/package.json +11 -6
  288. package/README.md +0 -239
  289. package/dist/src/__tests__/data/blocks/onUpdate.raw copy.d.ts +0 -1
  290. package/dist/src/__tests__/data/blocks/onUpdate.raw copy.jsx +0 -10
  291. package/dist/src/__tests__/data/blocks/slot.raw.d.ts +0 -5
  292. package/dist/src/__tests__/data/blocks/slot.raw.jsx +0 -6
  293. package/dist/src/__tests__/data/blocks/styles.raw.d.ts +0 -1
  294. package/dist/src/__tests__/data/blocks/styles.raw.jsx +0 -10
  295. package/dist/src/helpers/babel-transform copy.d.ts +0 -8
  296. package/dist/src/helpers/babel-transform copy.js +0 -138
  297. package/dist/src/helpers/collect-styles.js +0 -178
  298. package/dist/src/jsx-types.d.ts +0 -1171
package/package.json CHANGED
@@ -25,12 +25,13 @@
25
25
  "engines": {
26
26
  "npm": "99999999.9.9"
27
27
  },
28
- "version": "0.0.56-2",
28
+ "version": "0.0.56-22",
29
29
  "homepage": "https://github.com/BuilderIO/mitosis",
30
30
  "main": "./dist/src/index.js",
31
31
  "exports": {
32
32
  ".": "./dist/src/index.js",
33
- "./lib/*": "./dist/src/*"
33
+ "./lib/*": "./dist/src/*",
34
+ "./jsx-runtime": "./jsx-runtime.d.ts"
34
35
  },
35
36
  "types": "./dist/src/index.d.ts",
36
37
  "license": "MIT",
@@ -40,11 +41,12 @@
40
41
  },
41
42
  "scripts": {
42
43
  "test": "jest",
44
+ "snapupdate": "jest --updateSnapshot",
43
45
  "build": "tsc --build tsconfig.build.json",
44
46
  "clean": "tsc --build --clean tsconfig.build.json",
45
47
  "remove-stableVersion": "./scripts/remove-stableVersion.sh",
46
- "release:dev": "yarn build && yarn run remove-stableVersion && yarn version prerelease && ALLOW_PUBLISH=true yarn npm publish --tag dev",
47
- "release:patch": "yarn build && yarn run remove-stableVersion && yarn version patch && ALLOW_PUBLISH=true yarn npm publish",
48
+ "release:dev": "yarn build && yarn run remove-stableVersion && yarn version prerelease && yarn npm publish --tag dev",
49
+ "release:patch": "yarn build && yarn run remove-stableVersion && yarn version patch && yarn npm publish",
48
50
  "mitosis-save-artifacts": "node -r esbuild-register ../../scripts/mitosis-save-artifacts.ts",
49
51
  "start": "yarn build --watch",
50
52
  "script": "ts-node -O '{\"module\": \"commonjs\"}'"
@@ -76,9 +78,12 @@
76
78
  "prettier-plugin-svelte": "^1.4.1",
77
79
  "svelte": "^3.30.0",
78
80
  "traverse": "^0.6.6",
81
+ "typescript": "^4.7.3",
82
+ "vue": "^2",
79
83
  "vue-template-compiler": "^2.6.12"
80
84
  },
81
85
  "devDependencies": {
86
+ "@babel/preset-env": "^7.6.0",
82
87
  "@builder.io/sdk": "^1.1.26",
83
88
  "@rollup/plugin-node-resolve": "^11.2.1",
84
89
  "@rollup/plugin-virtual": "^2.1.0",
@@ -102,8 +107,8 @@
102
107
  "rollup": "^2.70.1",
103
108
  "ts-jest": "^26.4.4",
104
109
  "ts-node": "^9.1.1",
105
- "typescript": "4.7.0-dev.20220325",
110
+ "typescript": "^4",
106
111
  "universalify": "^2.0.0"
107
112
  },
108
- "stableVersion": "0.0.56-1"
113
+ "stableVersion": "0.0.56-21"
109
114
  }
package/README.md DELETED
@@ -1,239 +0,0 @@
1
- <p align="center"><img width="400" src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fbd8709e610d44cde8f623ebcc960e7dd"></p>
2
-
3
- <p align="center">
4
- Write components once, run everywhere. Compiles to Vue, React, Solid, Angular, Svelte, and Liquid.
5
- </p>
6
-
7
- <p align="center">
8
- <a href="https://github.com/prettier/prettier"><img alt="code style: prettier" src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg" /></a>
9
- <a href="https://github.com/BuilderIO/mitosis/pulls"><img alt="PRs Welcome" src="https://img.shields.io/badghttps://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fbd8709e610d44cde8f623ebcc960e7dde/PRs-welcome-brightgreen.svg" /></a>
10
- <a href="https://github.com/BuilderIO/mitosis"><img alt="License" src="https://img.shields.io/github/license/BuilderIO/mitosis" /></a>
11
- <a href="https://www.npmjs.com/package/@builder.io/mitosis"><img alt="Types" src="https://img.shields.io/npm/types/@builder.io/mitosis" /></a>
12
- <a href="https://www.npmjs.com/package/@builder.io/mitosis" rel="nofollow"><img src="https://img.shields.io/npm/v/@builder.io/mitosis.svg?sanitize=true"></a>
13
- </p>
14
-
15
- <br />
16
- <h3 align="center">Try it out</h2>
17
-
18
- <table>
19
- <tbody>
20
- <tr>
21
- <td>
22
- <p>&nbsp;</p> <!-- spacer -->
23
- <p align="center">
24
- <img height="50" src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ffb77e93c28e044178e4694cc939bf4cf" />
25
- </p>
26
- <p align="center">
27
- Use our <a href="https://github.com/builderio/figma-html"><b>Figma plugin</b></a> to turn designs into code!
28
- </p>
29
- </td>
30
- <td>
31
- <p>&nbsp;</p> <!-- spacer -->
32
- <p align="center">
33
- <img height="50" src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F467c9b604d4e486abfc39d27a2fddc12" />
34
- </p>
35
- <p align="center">
36
- Try our <a href="https://jsx-lite.builder.io/"><b>interactive fiddle</b></a>
37
- </p>
38
- </td>
39
- </tr>
40
- <tr>
41
- <td>
42
- <a href="https://github.com/builderio/figma-html"><img width="400" alt="Figma plugin" src="https://i.imgur.com/BoKsLFs.gif" /></a>
43
- </td>
44
- <td>
45
- <a href="https://jsx-lite.builder.io/"><img width="400" alt="Fiddle" src="https://imgur.com/H1WTtGe.gif" /></a>
46
- </td>
47
- </tr>
48
- <tr>
49
- <td>
50
- <p>&nbsp;</p> <!-- spacer -->
51
- <p align="center">
52
- <img height="50" src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff83e94a9c504427cbc8a557f682efec3" />
53
- </p>
54
- <p align="center">
55
- Try our <a href="https://github.com/BuilderIO/vscode"><b>VS Code extension</b></a> for in-IDE visual coding
56
- </p>
57
- </td>
58
- <td>
59
- <p>&nbsp;</p> <!-- spacer -->
60
- <p align="center">
61
- <img height="50" src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0f577e84eb4e4aa4a69d602dd376aa11" />
62
- </p>
63
- <p align="center">
64
- Try our <a href="https://apps.shopify.com/builder-2"><b>Shopify app</b></a> for visual Shopify store building
65
- </td>
66
- </tr>
67
- <tr>
68
- <td>
69
- <a href="https://github.com/BuilderIO/vscode"><img width="400" alt="Vscode plugin" src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F1d59909e2a214c79ad2b1e8ad3fb8245" /></a>
70
- </td>
71
- <td>
72
- <a href="https://apps.shopify.com/builder-2"><img width="400" alt="Vscode plugin" src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F97c87a29d88e463b9c1ad22b0329b2f7" /></a>
73
- </td>
74
- </tr>
75
- <tr>
76
- <td>
77
- <p>&nbsp;</p> <!-- spacer -->
78
- <p align="center">
79
- <img height="50" src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F084b1ebc3de4422185f9d36a409f3a24" />
80
- </p>
81
- <p align="center">
82
- Try our <a href="https://github.com/builderio/builder"><b>headless CMS</b></a> for no-code APIs for all sites and apps
83
- </p>
84
- </td>
85
- <td>
86
- <p>&nbsp;</p> <!-- spacer -->
87
- <p align="center">
88
- <img height="50" src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2025f53be0ab472ca8fbb87381bfbc00" />
89
- </p>
90
- <p align="center">
91
- View our upcoming ecommerce integrations
92
- </p>
93
- </td>
94
- </tr>
95
- <tr>
96
- <td>
97
- <a href="https://github.com/builderio/builder"><img width="400" alt="Vscode plugin" src="https://cdn.builder.io/api/v1/image/assets%2F444142b2cae54a19aeb8b5ba245feffe%2F8c2699f47fea48b296b43dbb422336e8" /></a>
98
- </td>
99
- <td>
100
- <a href="https://headlessapp.store"><img width="400" alt="Vscode plugin" src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd416b330ae7543089f70af8b930d8d85" /></a>
101
- </td>
102
- </tr>
103
- </tbody>
104
- </table>
105
-
106
- ## Why
107
-
108
- ### Component libraries
109
-
110
- Managing support for libraries that provide UI components across frameworks is a _pain_, esp when webcomponents are not an option (e.g. for server side rendering, best performance, etc). With Mitosis you can write once, and run everywhere with full compatibilty
111
-
112
- ### Modern workflows for all platforms
113
-
114
- JSX lite allows you to incrementally adopt modern and familiar workflows for many different platforms, for for Shopify instance you can server side render to liquid and hydrate with React
115
-
116
- ### JS framework fatigue
117
-
118
- If you have ever had to migrate a huge codebase from one framework to another, it's an absolute nightmare. Writing at a higher level of abstraction allows you to move from one to another with ease
119
-
120
- ### Design to code
121
-
122
- With JSX lite, you can convert designs from [Figma](https://github.com/BuilderIO/html-to-figma) or Sketch and convert it to clean code for the framework of your choice. You can even use [Builder.io](https://github.com/builderio/builder) to visually drag/drop to build UIs and edit the code _side by side_
123
-
124
- <p align="center">
125
- <img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F28066781f8584569b131fb4bffd893eb" />
126
- </p>
127
-
128
- ## How does it work
129
-
130
- Mitosis uses a static subset of JSX, inspired by [Solid](https://github.com/ryansolid/solid/blob/master/documentation/rendering.md). This means we can parse it to a simple JSON structure that it is easy easy to build stringifers off of for various frameworks and implementations
131
-
132
- ```tsx
133
- export function MyComponent() {
134
- const state = useState({
135
- name: 'Steve',
136
- });
137
-
138
- return (
139
- <div>
140
- <input
141
- value={state.name}
142
- onChange={(e) => (state.name = e.target.value)}
143
- />
144
- </div>
145
- );
146
- }
147
- ```
148
-
149
- becomes:
150
-
151
- ```json
152
- {
153
- "@type": "@builder.io/mitosis/component",
154
- "state": {
155
- "name": "Steve"
156
- },
157
- "nodes": [
158
- {
159
- "@type": "@builder.io/mitosis/node",
160
- "name": "div",
161
- "children": [
162
- {
163
- "@type": "@builder.io/mitosis/node",
164
- "bindings": {
165
- "value": "state.name",
166
- "onChange": "state.name = event.target.value"
167
- }
168
- }
169
- ]
170
- }
171
- ]
172
- }
173
- ```
174
-
175
- Which can be reserialized into many languges and framworks. For instance, to support angular, we just make a serializer that loops over the json and produces:
176
-
177
- ```ts
178
- @Component({
179
- template: `
180
- <div>
181
- <input [value]="name" (change)="name = $event.target.value" />
182
- </div>
183
- `,
184
- })
185
- class MyComponent {
186
- name = 'Steve';
187
- }
188
- ```
189
-
190
- Adding framework support is surprisingly easy with our plugins (docs coming soon!)
191
-
192
- ## No-code tooling
193
-
194
- Mitosis's static JSON format also enables no-code tooling for visual code editing and importing, for instance with [Builder.io](https://github.com/builderio/builder) or [Figma](https://github.com/BuilderIO/html-to-figma)
195
-
196
- <img src="https://imgur.com/3TjfY2H.gif" >
197
-
198
- <img src="https://i.imgur.com/vsAKt7f.gif" >
199
-
200
- ## Formatting options
201
-
202
- Mitosis supports settings for generating code to match your preferred formatting, libraries, etc. These output options will be customizable and extensible with plugins soon too
203
-
204
- <img src="https://imgur.com/hWXfNF3.gif "/>
205
-
206
- ## Who uses it
207
-
208
- - [Builder.io](https://github.com/builderio/builder)
209
- - [Snap](https://github.com/builderio/snap)
210
- - [HTML <> Figma](https://github.com/builderio/html-to-figma)
211
- - [Build.](https://github.com/builderio/build.) (coming soon)
212
-
213
- ## Status
214
-
215
- | Framework | Status |
216
- | ------------- | ------------ |
217
- | React | Alpha |
218
- | Vue | Alpha |
219
- | Liquid | Alpha |
220
- | Builder.io | Alpha |
221
- | Solid | Alpha |
222
- | Figma | Alpha |
223
- | Angular | Alpha |
224
- | Svelte | Alpha |
225
- | HTML/CSS/JS | Alpha |
226
- | Webcomponents | Alpha |
227
- | React Native | Alpha |
228
- | SwiftUI | Experimental |
229
-
230
- ## Coming soon
231
-
232
- - Stable (v1) release
233
- - Plugin API docs for custom syntaxes and extensions
234
- - VS code plugin
235
-
236
- <br />
237
- <p align="center">
238
- Made with ❤️ by <a target="_blank" href="https://www.builder.io/">Builder.io</a>
239
- </p>
@@ -1 +0,0 @@
1
- export default function OnUpdate(): JSX.Element;
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var mitosis_1 = require("@builder.io/mitosis");
4
- function OnUpdate() {
5
- (0, mitosis_1.onUpdate)(function () {
6
- console.log('Runs on every update/rerender');
7
- });
8
- return <div />;
9
- }
10
- exports.default = OnUpdate;
@@ -1,5 +0,0 @@
1
- declare type Props = {
2
- [key: string]: string;
3
- };
4
- export default function SlotCode(props: Props): JSX.Element;
5
- export {};
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function SlotCode(props) {
4
- return <div>{props.children}</div>;
5
- }
6
- exports.default = SlotCode;
@@ -1 +0,0 @@
1
- export default function OnUpdate(): JSX.Element;
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var mitosis_1 = require("@builder.io/mitosis");
4
- function OnUpdate() {
5
- (0, mitosis_1.onUpdate)(function () {
6
- console.log('Runs on every update/rerender');
7
- });
8
- return <div />;
9
- }
10
- exports.default = OnUpdate;
@@ -1,8 +0,0 @@
1
- import * as babel from '@babel/core';
2
- declare type Visitor<ContextType = any> = {
3
- [key: string]: (path: any, context: ContextType) => void;
4
- };
5
- export declare const babelTransform: <VisitorContextType = any>(code: string, visitor?: Visitor<VisitorContextType> | undefined) => babel.BabelFileResult | null;
6
- export declare const babelTransformCode: <VisitorContextType = any>(code: string, visitor?: Visitor<VisitorContextType> | undefined) => string;
7
- export declare const babelTransformExpression: <VisitorContextType = any>(code: string, visitor: Visitor<VisitorContextType>, type?: 'expression' | 'unknown' | 'block' | 'functionBody') => string;
8
- export {};
@@ -1,138 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
26
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
27
- if (ar || !(i in from)) {
28
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
29
- ar[i] = from[i];
30
- }
31
- }
32
- return to.concat(ar || Array.prototype.slice.call(from));
33
- };
34
- Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.babelTransformExpression = exports.babelTransformCode = exports.babelTransform = void 0;
36
- var babel = __importStar(require("@babel/core"));
37
- var lodash_1 = require("lodash");
38
- var jsxPlugin = require('@babel/plugin-syntax-jsx');
39
- var tsPreset = require('@babel/preset-typescript');
40
- var decorators = require('@babel/plugin-syntax-decorators');
41
- var babelTransform = function (code, visitor) {
42
- return babel.transform(code, {
43
- sourceFileName: 'file.tsx',
44
- configFile: false,
45
- babelrc: false,
46
- presets: [[tsPreset, { isTSX: true, allExtensions: true }]],
47
- plugins: __spreadArray([
48
- [decorators, { legacy: true }],
49
- jsxPlugin
50
- ], (visitor ? [function () { return ({ visitor: visitor }); }] : []), true),
51
- });
52
- };
53
- exports.babelTransform = babelTransform;
54
- var babelTransformCode = function (code, visitor) {
55
- var _a;
56
- return ((_a = (0, exports.babelTransform)(code, visitor)) === null || _a === void 0 ? void 0 : _a.code) || '';
57
- };
58
- exports.babelTransformCode = babelTransformCode;
59
- var babelTransformExpression = function (code, visitor, type) {
60
- var _a;
61
- if (type === void 0) { type = 'unknown'; }
62
- if (!code) {
63
- return '';
64
- }
65
- // match for object literal like { foo: ... }
66
- if (type === 'unknown' && code.trim().match(/^\s*{\s*[a-z0-9]+:/i)) {
67
- type = 'expression';
68
- }
69
- // For Builder content
70
- if (type === 'unknown' &&
71
- (code.includes('return _virtual_index') ||
72
- code.trim().startsWith('return ')) &&
73
- !code.trim().startsWith('function')) {
74
- type = 'functionBody';
75
- }
76
- var useCode = code;
77
- if (type === 'functionBody') {
78
- useCode = "function(){".concat(useCode, "}");
79
- }
80
- var result = type === 'expression'
81
- ? null
82
- : (0, lodash_1.attempt)(function () {
83
- var _a;
84
- var result = ((_a = (0, exports.babelTransform)(useCode, visitor)) === null || _a === void 0 ? void 0 : _a.code) || '';
85
- if (type === 'functionBody') {
86
- return result.replace(/^function\(\)\{/, '').replace(/\};$/, '');
87
- }
88
- else {
89
- // Babel addes trailing semicolons, but for expressions we need those gone
90
- // TODO: maybe detect if the original code ended with one, and keep it if so, for the case
91
- // of appending several fragements
92
- return result.replace(/;$/, '');
93
- }
94
- });
95
- if ((0, lodash_1.isError)(result) || type === 'expression') {
96
- try {
97
- // If it can't, e.g. this is an expression or code fragment, modify the code below and try again
98
- // Detect method fragments. These get passed sometimes and otherwise
99
- // generate compile errors. They are of the form `foo() { ... }`
100
- var isMethod = Boolean(!code.startsWith('function') &&
101
- code.match(/^[a-z0-9]+\s*\([^\)]*\)\s*[\{:]/i));
102
- if (isMethod) {
103
- useCode = "function ".concat(useCode);
104
- }
105
- // Parse the code as an expression (instead of the default, a block) by giving it a fake variable assignment
106
- // e.g. if the code parsed is { ... } babel will treat that as a block by deafult, unless processed as an expression
107
- // that is an object
108
- useCode = "let _ = ".concat(useCode);
109
- result = (((_a = (0, exports.babelTransform)(useCode, visitor)) === null || _a === void 0 ? void 0 : _a.code) || '')
110
- // Babel addes trailing semicolons, but for expressions we need those gone
111
- .replace(/;$/, '')
112
- // Remove our fake variable assignment
113
- .replace(/let _ =\s/, '');
114
- if (isMethod) {
115
- result = result.replace('function', '');
116
- }
117
- }
118
- catch (err) {
119
- console.error('Error parsing code:\n', code, '\n', result);
120
- try {
121
- return (0, exports.babelTransformExpression)(code, visitor, 'functionBody');
122
- }
123
- catch (err) {
124
- throw err;
125
- }
126
- }
127
- }
128
- if (type === 'functionBody') {
129
- return result.replace(/^function\s*\(\)\s*\{/, '').replace(/\};?$/, '');
130
- }
131
- else {
132
- // Babel addes trailing semicolons, but for expressions we need those gone
133
- // TODO: maybe detect if the original code ended with one, and keep it if so, for the case
134
- // of appending several fragements
135
- return result.replace(/;$/, '');
136
- }
137
- };
138
- exports.babelTransformExpression = babelTransformExpression;
@@ -1,178 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.styleMapToCss = exports.collectCss = exports.collectStyles = exports.parseCssObject = exports.collectStyledComponents = exports.hasStyles = exports.nodeHasStyles = void 0;
7
- var json5_1 = __importDefault(require("json5"));
8
- var lodash_1 = require("lodash");
9
- var traverse_1 = __importDefault(require("traverse"));
10
- var capitalize_1 = require("./capitalize");
11
- var dash_case_1 = require("./dash-case");
12
- var is_mitosis_node_1 = require("./is-mitosis-node");
13
- var is_upper_case_1 = require("./is-upper-case");
14
- var object_hash_1 = __importDefault(require("object-hash"));
15
- var nodeHasStyles = function (node) {
16
- return Boolean(typeof node.bindings.css === 'string' &&
17
- node.bindings.css.trim().length > 6);
18
- };
19
- exports.nodeHasStyles = nodeHasStyles;
20
- var hasStyles = function (component) {
21
- var hasStyles = false;
22
- (0, traverse_1.default)(component).forEach(function (item) {
23
- if ((0, is_mitosis_node_1.isMitosisNode)(item)) {
24
- if ((0, exports.nodeHasStyles)(item)) {
25
- hasStyles = true;
26
- this.stop();
27
- }
28
- }
29
- });
30
- return hasStyles;
31
- };
32
- exports.hasStyles = hasStyles;
33
- var collectStyledComponents = function (json) {
34
- var styledComponentsCode = '';
35
- var componentIndexes = {};
36
- var componentHashes = {};
37
- (0, traverse_1.default)(json).forEach(function (item) {
38
- if ((0, is_mitosis_node_1.isMitosisNode)(item)) {
39
- if ((0, exports.nodeHasStyles)(item)) {
40
- var value = (0, exports.parseCssObject)(item.bindings.css);
41
- delete item.bindings.css;
42
- var normalizedNameProperty = item.properties.$name
43
- ? (0, capitalize_1.capitalize)((0, lodash_1.camelCase)(item.properties.$name.replace(/[^a-z]/gi, '')))
44
- : null;
45
- var componentName = normalizedNameProperty
46
- ? normalizedNameProperty
47
- : /^h\d$/.test(item.name || '')
48
- ? item.name
49
- : (0, capitalize_1.capitalize)((0, lodash_1.camelCase)(item.name || 'div'));
50
- var index = (componentIndexes[componentName] =
51
- (componentIndexes[componentName] || 0) + 1);
52
- var className = "".concat(componentName).concat(componentName !== item.name && index === 1 ? '' : index);
53
- var str = '';
54
- var styles = getStylesOnly(value);
55
- var stylesHash = (0, object_hash_1.default)(styles);
56
- if (stylesHash === componentHashes[componentName]) {
57
- return;
58
- }
59
- if (!componentHashes[componentName]) {
60
- componentHashes[componentName] = stylesHash;
61
- }
62
- str += "".concat((0, exports.styleMapToCss)(styles), "\n");
63
- var nestedSelectors = getNestedSelectors(value);
64
- for (var nestedSelector in nestedSelectors) {
65
- var value_1 = nestedSelectors[nestedSelector];
66
- str += "".concat(nestedSelector, " { ").concat((0, exports.styleMapToCss)(value_1), " }");
67
- }
68
- var prefix = (0, is_upper_case_1.isUpperCase)(item.name[0])
69
- ? "styled(".concat(item.name, ")`")
70
- : "styled.".concat(item.name, "`");
71
- item.name = className;
72
- styledComponentsCode += "\n const ".concat(className, " = ").concat(prefix).concat(str, "`\n ");
73
- }
74
- delete item.bindings.css;
75
- }
76
- });
77
- return styledComponentsCode;
78
- };
79
- exports.collectStyledComponents = collectStyledComponents;
80
- var parseCssObject = function (css) {
81
- try {
82
- return json5_1.default.parse(css);
83
- }
84
- catch (e) {
85
- console.warn('Could not parse CSS object', css);
86
- throw e;
87
- }
88
- };
89
- exports.parseCssObject = parseCssObject;
90
- var collectStyles = function (json, options) {
91
- if (options === void 0) { options = {}; }
92
- var styleMap = {};
93
- var classProperty = options.classProperty || 'class';
94
- var componentIndexes = {};
95
- var componentHashes = {};
96
- (0, traverse_1.default)(json).forEach(function (item) {
97
- if ((0, is_mitosis_node_1.isMitosisNode)(item)) {
98
- if ((0, exports.nodeHasStyles)(item)) {
99
- var value = (0, exports.parseCssObject)(item.bindings.css);
100
- delete item.bindings.css;
101
- var componentName = item.properties.$name
102
- ? (0, dash_case_1.dashCase)(item.properties.$name)
103
- : /^h\d$/.test(item.name || '') // don't dashcase h1 into h-1
104
- ? item.name
105
- : (0, dash_case_1.dashCase)(item.name || 'div');
106
- var stylesHash = (0, object_hash_1.default)(value);
107
- if (componentHashes[componentName] === stylesHash) {
108
- var className_1 = "".concat(componentName).concat(options.prefix ? "-".concat(options.prefix) : '');
109
- item.properties[classProperty] = "".concat(item.properties[classProperty] || '', " ").concat(className_1)
110
- .trim()
111
- .replace(/\s{2,}/g, ' ');
112
- return;
113
- }
114
- if (!componentHashes[componentName]) {
115
- componentHashes[componentName] = stylesHash;
116
- }
117
- var index = (componentIndexes[componentName] =
118
- (componentIndexes[componentName] || 0) + 1);
119
- var className = "".concat(componentName).concat(options.prefix ? "-".concat(options.prefix) : '').concat(index === 1 ? '' : "-".concat(index));
120
- item.properties[classProperty] = "".concat(item.properties[classProperty] || '', " ").concat(className)
121
- .trim()
122
- .replace(/\s{2,}/g, ' ');
123
- styleMap[className] = value;
124
- }
125
- delete item.bindings.css;
126
- }
127
- });
128
- return styleMap;
129
- };
130
- exports.collectStyles = collectStyles;
131
- var collectCss = function (json, options) {
132
- if (options === void 0) { options = {}; }
133
- var styles = (0, exports.collectStyles)(json, options);
134
- // TODO create and use a root selector
135
- return classStyleMapToCss(styles);
136
- };
137
- exports.collectCss = collectCss;
138
- var getNestedSelectors = function (map) {
139
- return (0, lodash_1.pickBy)(map, function (value) { return typeof value === 'object'; });
140
- };
141
- var getStylesOnly = function (map) {
142
- return (0, lodash_1.pickBy)(map, function (value) { return typeof value === 'string'; });
143
- };
144
- var classStyleMapToCss = function (map) {
145
- var str = '';
146
- for (var key in map) {
147
- var styles = getStylesOnly(map[key]);
148
- str += ".".concat(key, " { ").concat((0, exports.styleMapToCss)(styles), " }");
149
- var nestedSelectors = getNestedSelectors(map[key]);
150
- for (var nestedSelector in nestedSelectors) {
151
- var value = nestedSelectors[nestedSelector];
152
- if (nestedSelector.startsWith('@')) {
153
- str += "".concat(nestedSelector, " { .").concat(key, " { ").concat((0, exports.styleMapToCss)(value), " } }");
154
- }
155
- else {
156
- var useSelector = nestedSelector.includes('&')
157
- ? nestedSelector.replace(/&/g, ".".concat(key))
158
- : ".".concat(key, " ").concat(nestedSelector);
159
- str += "".concat(useSelector, " { ").concat((0, exports.styleMapToCss)(value), " }");
160
- }
161
- }
162
- }
163
- return str;
164
- };
165
- var styleMapToCss = function (map) {
166
- var str = '';
167
- for (var key in map) {
168
- var value = map[key];
169
- if (typeof value === 'string') {
170
- str += "\n".concat((0, dash_case_1.dashCase)(key), ": ").concat(value, ";");
171
- }
172
- else {
173
- // TODO: do nothing
174
- }
175
- }
176
- return str;
177
- };
178
- exports.styleMapToCss = styleMapToCss;