@hanzogui/static 2.0.0

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 (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/check-dep-versions.cjs +267 -0
  4. package/dist/checkDeps.cjs +200 -0
  5. package/dist/constants.cjs +49 -0
  6. package/dist/exports.cjs +44 -0
  7. package/dist/extractor/accessSafe.cjs +46 -0
  8. package/dist/extractor/babelParse.cjs +54 -0
  9. package/dist/extractor/buildClassName.cjs +62 -0
  10. package/dist/extractor/bundle.cjs +185 -0
  11. package/dist/extractor/bundleConfig.cjs +513 -0
  12. package/dist/extractor/concatClassName.cjs +80 -0
  13. package/dist/extractor/createEvaluator.cjs +75 -0
  14. package/dist/extractor/createExtractor.cjs +1150 -0
  15. package/dist/extractor/createLogger.cjs +45 -0
  16. package/dist/extractor/detectModuleFormat.cjs +49 -0
  17. package/dist/extractor/ensureImportingConcat.cjs +48 -0
  18. package/dist/extractor/errors.cjs +26 -0
  19. package/dist/extractor/esbuildAliasPlugin.cjs +44 -0
  20. package/dist/extractor/esbuildTsconfigPaths.cjs +86 -0
  21. package/dist/extractor/evaluateAstNode.cjs +83 -0
  22. package/dist/extractor/extractHelpers.cjs +119 -0
  23. package/dist/extractor/extractMediaStyle.cjs +128 -0
  24. package/dist/extractor/extractToClassNames.cjs +321 -0
  25. package/dist/extractor/extractToNative.cjs +266 -0
  26. package/dist/extractor/findTopmostFunction.cjs +34 -0
  27. package/dist/extractor/generatedUid.cjs +47 -0
  28. package/dist/extractor/getGuiConfigPathFromOptionsConfig.cjs +35 -0
  29. package/dist/extractor/getPrefixLogs.cjs +29 -0
  30. package/dist/extractor/getPropValueFromAttributes.cjs +67 -0
  31. package/dist/extractor/getSourceModule.cjs +64 -0
  32. package/dist/extractor/getStaticBindingsForScope.cjs +150 -0
  33. package/dist/extractor/hoistClassNames.cjs +62 -0
  34. package/dist/extractor/literalToAst.cjs +84 -0
  35. package/dist/extractor/loadFile.cjs +11 -0
  36. package/dist/extractor/loadGui.cjs +322 -0
  37. package/dist/extractor/logLines.cjs +35 -0
  38. package/dist/extractor/normalizeTernaries.cjs +73 -0
  39. package/dist/extractor/propsToFontFamilyCache.cjs +38 -0
  40. package/dist/extractor/regenerateConfig.cjs +150 -0
  41. package/dist/extractor/removeUnusedHooks.cjs +76 -0
  42. package/dist/extractor/timer.cjs +43 -0
  43. package/dist/extractor/validHTMLAttributes.cjs +77 -0
  44. package/dist/extractor/watchGuiConfig.cjs +58 -0
  45. package/dist/getPragmaOptions.cjs +58 -0
  46. package/dist/helpers/memoize.cjs +37 -0
  47. package/dist/helpers/requireGuiCore.cjs +33 -0
  48. package/dist/index.cjs +40 -0
  49. package/dist/registerRequire.cjs +115 -0
  50. package/dist/server.cjs +75 -0
  51. package/dist/setup.cjs +0 -0
  52. package/dist/types.cjs +16 -0
  53. package/dist/worker.cjs +89 -0
  54. package/package.json +101 -0
  55. package/src/check-dep-versions.ts +738 -0
  56. package/src/checkDeps.ts +371 -0
  57. package/src/constants.ts +14 -0
  58. package/src/exports.ts +15 -0
  59. package/src/extractor/accessSafe.ts +22 -0
  60. package/src/extractor/babelParse.ts +37 -0
  61. package/src/extractor/buildClassName.ts +76 -0
  62. package/src/extractor/bundle.ts +277 -0
  63. package/src/extractor/bundleConfig.ts +958 -0
  64. package/src/extractor/concatClassName.ts +105 -0
  65. package/src/extractor/createEvaluator.ts +82 -0
  66. package/src/extractor/createExtractor.ts +2665 -0
  67. package/src/extractor/createLogger.ts +41 -0
  68. package/src/extractor/detectModuleFormat.ts +42 -0
  69. package/src/extractor/ensureImportingConcat.ts +36 -0
  70. package/src/extractor/errors.ts +1 -0
  71. package/src/extractor/esbuildAliasPlugin.ts +40 -0
  72. package/src/extractor/esbuildTsconfigPaths.ts +103 -0
  73. package/src/extractor/evaluateAstNode.ts +136 -0
  74. package/src/extractor/extractHelpers.ts +211 -0
  75. package/src/extractor/extractMediaStyle.ts +194 -0
  76. package/src/extractor/extractToClassNames.ts +631 -0
  77. package/src/extractor/extractToNative.ts +463 -0
  78. package/src/extractor/findTopmostFunction.ts +24 -0
  79. package/src/extractor/generatedUid.ts +41 -0
  80. package/src/extractor/getGuiConfigPathFromOptionsConfig.ts +24 -0
  81. package/src/extractor/getPrefixLogs.ts +9 -0
  82. package/src/extractor/getPropValueFromAttributes.ts +95 -0
  83. package/src/extractor/getSourceModule.ts +96 -0
  84. package/src/extractor/getStaticBindingsForScope.ts +237 -0
  85. package/src/extractor/hoistClassNames.ts +52 -0
  86. package/src/extractor/literalToAst.ts +85 -0
  87. package/src/extractor/loadFile.ts +17 -0
  88. package/src/extractor/loadGui.ts +487 -0
  89. package/src/extractor/logLines.ts +16 -0
  90. package/src/extractor/normalizeTernaries.ts +75 -0
  91. package/src/extractor/propsToFontFamilyCache.ts +18 -0
  92. package/src/extractor/regenerateConfig.ts +186 -0
  93. package/src/extractor/removeUnusedHooks.ts +83 -0
  94. package/src/extractor/timer.ts +25 -0
  95. package/src/extractor/validHTMLAttributes.ts +52 -0
  96. package/src/extractor/watchGuiConfig.ts +57 -0
  97. package/src/getPragmaOptions.ts +57 -0
  98. package/src/helpers/memoize.ts +24 -0
  99. package/src/helpers/requireGuiCore.ts +28 -0
  100. package/src/index.ts +4 -0
  101. package/src/registerRequire.ts +236 -0
  102. package/src/server.ts +43 -0
  103. package/src/setup.ts +0 -0
  104. package/src/types.ts +109 -0
  105. package/src/worker.ts +142 -0
  106. package/types/check-dep-versions.d.ts +37 -0
  107. package/types/check-dep-versions.d.ts.map +1 -0
  108. package/types/checkDeps.d.ts +19 -0
  109. package/types/checkDeps.d.ts.map +1 -0
  110. package/types/constants.d.ts +6 -0
  111. package/types/constants.d.ts.map +1 -0
  112. package/types/exports.d.ts +16 -0
  113. package/types/exports.d.ts.map +1 -0
  114. package/types/extractor/accessSafe.d.ts +3 -0
  115. package/types/extractor/accessSafe.d.ts.map +1 -0
  116. package/types/extractor/babelParse.d.ts +5 -0
  117. package/types/extractor/babelParse.d.ts.map +1 -0
  118. package/types/extractor/buildClassName.d.ts +7 -0
  119. package/types/extractor/buildClassName.d.ts.map +1 -0
  120. package/types/extractor/bundle.d.ts +121 -0
  121. package/types/extractor/bundle.d.ts.map +1 -0
  122. package/types/extractor/bundleConfig.d.ts +49 -0
  123. package/types/extractor/bundleConfig.d.ts.map +1 -0
  124. package/types/extractor/concatClassName.d.ts +8 -0
  125. package/types/extractor/concatClassName.d.ts.map +1 -0
  126. package/types/extractor/createEvaluator.d.ts +12 -0
  127. package/types/extractor/createEvaluator.d.ts.map +1 -0
  128. package/types/extractor/createExtractor.d.ts +32 -0
  129. package/types/extractor/createExtractor.d.ts.map +1 -0
  130. package/types/extractor/createLogger.d.ts +3 -0
  131. package/types/extractor/createLogger.d.ts.map +1 -0
  132. package/types/extractor/detectModuleFormat.d.ts +5 -0
  133. package/types/extractor/detectModuleFormat.d.ts.map +1 -0
  134. package/types/extractor/ensureImportingConcat.d.ts +4 -0
  135. package/types/extractor/ensureImportingConcat.d.ts.map +1 -0
  136. package/types/extractor/errors.d.ts +3 -0
  137. package/types/extractor/errors.d.ts.map +1 -0
  138. package/types/extractor/esbuildAliasPlugin.d.ts +18 -0
  139. package/types/extractor/esbuildAliasPlugin.d.ts.map +1 -0
  140. package/types/extractor/esbuildTsconfigPaths.d.ts +11 -0
  141. package/types/extractor/esbuildTsconfigPaths.d.ts.map +1 -0
  142. package/types/extractor/evaluateAstNode.d.ts +3 -0
  143. package/types/extractor/evaluateAstNode.d.ts.map +1 -0
  144. package/types/extractor/extractHelpers.d.ts +28 -0
  145. package/types/extractor/extractHelpers.d.ts.map +1 -0
  146. package/types/extractor/extractMediaStyle.d.ts +11 -0
  147. package/types/extractor/extractMediaStyle.d.ts.map +1 -0
  148. package/types/extractor/extractToClassNames.d.ts +25 -0
  149. package/types/extractor/extractToClassNames.d.ts.map +1 -0
  150. package/types/extractor/extractToNative.d.ts +13 -0
  151. package/types/extractor/extractToNative.d.ts.map +1 -0
  152. package/types/extractor/findTopmostFunction.d.ts +4 -0
  153. package/types/extractor/findTopmostFunction.d.ts.map +1 -0
  154. package/types/extractor/generatedUid.d.ts +5 -0
  155. package/types/extractor/generatedUid.d.ts.map +1 -0
  156. package/types/extractor/getGuiConfigPathFromOptionsConfig.d.ts +3 -0
  157. package/types/extractor/getGuiConfigPathFromOptionsConfig.d.ts.map +1 -0
  158. package/types/extractor/getPrefixLogs.d.ts +3 -0
  159. package/types/extractor/getPrefixLogs.d.ts.map +1 -0
  160. package/types/extractor/getPropValueFromAttributes.d.ts +19 -0
  161. package/types/extractor/getPropValueFromAttributes.d.ts.map +1 -0
  162. package/types/extractor/getSourceModule.d.ts +16 -0
  163. package/types/extractor/getSourceModule.d.ts.map +1 -0
  164. package/types/extractor/getStaticBindingsForScope.d.ts +5 -0
  165. package/types/extractor/getStaticBindingsForScope.d.ts.map +1 -0
  166. package/types/extractor/hoistClassNames.d.ts +6 -0
  167. package/types/extractor/hoistClassNames.d.ts.map +1 -0
  168. package/types/extractor/literalToAst.d.ts +4 -0
  169. package/types/extractor/literalToAst.d.ts.map +1 -0
  170. package/types/extractor/loadFile.d.ts +1 -0
  171. package/types/extractor/loadFile.d.ts.map +1 -0
  172. package/types/extractor/loadGui.d.ts +22 -0
  173. package/types/extractor/loadGui.d.ts.map +1 -0
  174. package/types/extractor/logLines.d.ts +2 -0
  175. package/types/extractor/logLines.d.ts.map +1 -0
  176. package/types/extractor/normalizeTernaries.d.ts +3 -0
  177. package/types/extractor/normalizeTernaries.d.ts.map +1 -0
  178. package/types/extractor/propsToFontFamilyCache.d.ts +4 -0
  179. package/types/extractor/propsToFontFamilyCache.d.ts.map +1 -0
  180. package/types/extractor/regenerateConfig.d.ts +9 -0
  181. package/types/extractor/regenerateConfig.d.ts.map +1 -0
  182. package/types/extractor/removeUnusedHooks.d.ts +3 -0
  183. package/types/extractor/removeUnusedHooks.d.ts.map +1 -0
  184. package/types/extractor/timer.d.ts +5 -0
  185. package/types/extractor/timer.d.ts.map +1 -0
  186. package/types/extractor/validHTMLAttributes.d.ts +52 -0
  187. package/types/extractor/validHTMLAttributes.d.ts.map +1 -0
  188. package/types/extractor/watchGuiConfig.d.ts +5 -0
  189. package/types/extractor/watchGuiConfig.d.ts.map +1 -0
  190. package/types/getPragmaOptions.d.ts +8 -0
  191. package/types/getPragmaOptions.d.ts.map +1 -0
  192. package/types/helpers/memoize.d.ts +8 -0
  193. package/types/helpers/memoize.d.ts.map +1 -0
  194. package/types/helpers/requireGuiCore.d.ts +3 -0
  195. package/types/helpers/requireGuiCore.d.ts.map +1 -0
  196. package/types/index.d.ts +4 -0
  197. package/types/index.d.ts.map +1 -0
  198. package/types/registerRequire.d.ts +10 -0
  199. package/types/registerRequire.d.ts.map +1 -0
  200. package/types/server.d.ts +3 -0
  201. package/types/server.d.ts.map +1 -0
  202. package/types/setup.d.ts +1 -0
  203. package/types/setup.d.ts.map +1 -0
  204. package/types/types.d.ts +92 -0
  205. package/types/types.d.ts.map +1 -0
  206. package/types/worker.d.ts +46 -0
  207. package/types/worker.d.ts.map +1 -0
@@ -0,0 +1,194 @@
1
+ import type { NodePath } from '@babel/traverse'
2
+ import * as t from '@babel/types'
3
+ import type { GuiInternalConfig } from '@hanzogui/core'
4
+ import * as core from '@hanzogui/core'
5
+ import type { ViewStyle } from 'react-native'
6
+
7
+ import { requireGuiCore } from '../helpers/requireGuiCore'
8
+ import type { StyleObject, GuiOptionsWithFileInfo, Ternary } from '../types'
9
+ import { isPresent, isValidImport } from './extractHelpers'
10
+
11
+ export function extractMediaStyle(
12
+ props: GuiOptionsWithFileInfo,
13
+ ternary: Ternary,
14
+ jsxPath: NodePath<t.JSXElement>,
15
+ guiConfig: GuiInternalConfig,
16
+ sourcePath: string,
17
+ importance = 0,
18
+ shouldPrintDebug: boolean | 'verbose' = false
19
+ ) {
20
+ const { getCSSStylesAtomic } = requireGuiCore('web')
21
+ const mt = getMediaQueryTernary(props, ternary, jsxPath, sourcePath)
22
+ if (!mt) {
23
+ return null
24
+ }
25
+ const { key } = mt
26
+ const mq = guiConfig.media[key]
27
+ if (!mq) {
28
+ console.error(`Media query "${key}" not found: ${Object.keys(guiConfig.media)}`)
29
+ return null
30
+ }
31
+ const getStyleObj = (styleObj: ViewStyle | null, negate = false) => {
32
+ return styleObj ? { styleObj, negate } : null
33
+ }
34
+ const styleOpts = [
35
+ getStyleObj(ternary.consequent, false),
36
+ getStyleObj(ternary.alternate, true),
37
+ ].filter(isPresent)
38
+ if (shouldPrintDebug && !styleOpts.length) {
39
+ console.info(' media query, no styles?')
40
+ return null
41
+ }
42
+ // for now order first strongest
43
+ const mediaKeys = Object.keys(guiConfig.media)
44
+ const mediaKeyPrecendence = mediaKeys.reduce((acc, cur, i) => {
45
+ acc[cur] = new Array(importance + 1).fill(':root').join('')
46
+ return acc
47
+ }, {})
48
+ let mediaStyles: StyleObject[] = []
49
+
50
+ // TODO this should NOT be here
51
+ // this should be done using the same logic as createMediaStyle
52
+
53
+ for (const { styleObj, negate } of styleOpts) {
54
+ const styles = getCSSStylesAtomic(styleObj as any)
55
+
56
+ const singleMediaStyles = styles.map((style) => {
57
+ const mediaStyle = core.createMediaStyle(
58
+ style,
59
+ key,
60
+ guiConfig.media,
61
+ true,
62
+ negate
63
+ )
64
+ const className = `.${mediaStyle[core.StyleObjectIdentifier]}`
65
+ return {
66
+ ...mediaStyle,
67
+ className,
68
+ }
69
+ })
70
+
71
+ if (shouldPrintDebug === 'verbose') {
72
+ console.info(
73
+ ' media styles:',
74
+ importance,
75
+ styleObj,
76
+ singleMediaStyles.map((x) => x[core.StyleObjectIdentifier]).join(', ')
77
+ )
78
+ }
79
+ // add to output
80
+ mediaStyles = [...mediaStyles, ...singleMediaStyles]
81
+ }
82
+ // filter out
83
+ ternary.remove()
84
+ return { mediaStyles, ternaryWithoutMedia: mt.ternaryWithoutMedia }
85
+ }
86
+
87
+ function getMediaQueryTernary(
88
+ props: GuiOptionsWithFileInfo,
89
+ ternary: Ternary,
90
+ jsxPath: NodePath<t.JSXElement>,
91
+ sourcePath: string
92
+ ): null | {
93
+ key: string
94
+ bindingName: string
95
+ ternaryWithoutMedia: Ternary | null
96
+ } {
97
+ // this handles unwrapping logical && media query ternarys
98
+ // first, unwrap if it has media logicalExpression
99
+ if (t.isLogicalExpression(ternary.test) && ternary.test.operator === '&&') {
100
+ // *should* be normalized to always be on left side
101
+ const mediaLeft = getMediaInfoFromExpression(
102
+ props,
103
+ ternary.test.left,
104
+ jsxPath,
105
+ sourcePath,
106
+ ternary.inlineMediaQuery
107
+ )
108
+ if (mediaLeft) {
109
+ return {
110
+ ...mediaLeft,
111
+ ternaryWithoutMedia: {
112
+ ...ternary,
113
+ test: ternary.test.right,
114
+ },
115
+ }
116
+ }
117
+ }
118
+ // const media = useMedia()
119
+ // ... media.sm
120
+ const result = getMediaInfoFromExpression(
121
+ props,
122
+ ternary.test,
123
+ jsxPath,
124
+ sourcePath,
125
+ ternary.inlineMediaQuery
126
+ )
127
+ if (result) {
128
+ return {
129
+ ...result,
130
+ ternaryWithoutMedia: null,
131
+ }
132
+ }
133
+ return null
134
+ }
135
+
136
+ function getMediaInfoFromExpression(
137
+ props: GuiOptionsWithFileInfo,
138
+ test: t.Expression,
139
+ jsxPath: NodePath<t.JSXElement>,
140
+ sourcePath: string,
141
+ inlineMediaQuery?: string
142
+ ) {
143
+ if (inlineMediaQuery) {
144
+ return {
145
+ key: inlineMediaQuery,
146
+ bindingName: inlineMediaQuery,
147
+ }
148
+ }
149
+ if (
150
+ t.isMemberExpression(test) &&
151
+ t.isIdentifier(test.object) &&
152
+ t.isIdentifier(test.property)
153
+ ) {
154
+ const name = test.object['name']
155
+ const key = test.property['name']
156
+ const bindings = jsxPath.scope.getAllBindings()
157
+ const binding = bindings[name]
158
+ if (!binding) return false
159
+ const bindingNode = binding.path?.node
160
+ if (!t.isVariableDeclarator(bindingNode) || !bindingNode.init) return false
161
+ if (!isValidMediaCall(props, jsxPath, bindingNode.init, sourcePath)) return false
162
+ return { key, bindingName: name }
163
+ }
164
+ if (t.isIdentifier(test)) {
165
+ const key = test.name
166
+ const node = jsxPath.scope.getBinding(test.name)?.path?.node
167
+ if (!t.isVariableDeclarator(node)) return false
168
+ if (!node.init || !isValidMediaCall(props, jsxPath, node.init, sourcePath))
169
+ return false
170
+ return { key, bindingName: key }
171
+ }
172
+ return null
173
+ }
174
+
175
+ export function isValidMediaCall(
176
+ props: GuiOptionsWithFileInfo,
177
+ jsxPath: NodePath<t.JSXElement>,
178
+ init: t.Expression,
179
+ sourcePath: string
180
+ ) {
181
+ if (!init || !t.isCallExpression(init)) return false
182
+ if (!t.isIdentifier(init.callee)) return false
183
+ // TODO could support renaming useMedia by looking up import first
184
+ if (init.callee.name !== 'useMedia') return false
185
+ const bindings = jsxPath.scope.getAllBindings()
186
+ const mediaBinding = bindings['useMedia']
187
+ if (!mediaBinding) return false
188
+ const useMediaImport = mediaBinding.path.parent
189
+ if (!t.isImportDeclaration(useMediaImport)) return false
190
+ if (!isValidImport(props, sourcePath)) {
191
+ return false
192
+ }
193
+ return true
194
+ }