@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,105 @@
1
+ // perf sensitive so doing some weird stuff
2
+
3
+ /**
4
+ * next - take objects:
5
+ *
6
+ * { _shorthand: 'postfix' }
7
+ *
8
+ */
9
+
10
+ export function concatClassName(...args: any[]): any
11
+ export function concatClassName(_cn: Record<string, any> | null | undefined): string {
12
+ const args = arguments
13
+ const usedPrefixes = new Set<string>()
14
+ let final = ''
15
+
16
+ const len = args.length
17
+ let propObjects: any = null
18
+ for (let x = len; x >= 0; x--) {
19
+ const cns = args[x]
20
+
21
+ if (!cns) continue
22
+ if (!Array.isArray(cns) && typeof cns !== 'string') {
23
+ // is prop object
24
+ propObjects = propObjects || []
25
+ propObjects.push(cns)
26
+ continue
27
+ }
28
+
29
+ const names = Array.isArray(cns) ? cns : cns.split(' ')
30
+ const numNames = names.length
31
+ for (let i = numNames - 1; i >= 0; i--) {
32
+ const name = names[i]
33
+
34
+ if (!name || name === ' ') continue
35
+ if (name[0] !== '_') {
36
+ // not snack style (todo slightly stronger heuristic)
37
+ final = name + ' ' + final
38
+ continue
39
+ }
40
+
41
+ const splitIndex = name.indexOf('-')
42
+ if (splitIndex < 1) {
43
+ final = name + ' ' + final
44
+ // if (shouldDebug) console.log('debug exclude:', name, final)
45
+ continue
46
+ }
47
+
48
+ const nextChar = name[splitIndex + 1]
49
+ // synced to static-ui constants
50
+ // MEDIA_SEP
51
+ const isMediaQuery = nextChar === '_'
52
+ // PSEUDO_SEP
53
+ // commenting out three things to make pseudos override properly
54
+ // (leave in for a bit to see if other bugs pop up later):
55
+ // 1. const isPseudoQuery = nextChar === '0'
56
+ const styleKey = name.slice(1, name.indexOf('-'))
57
+ // 2. isMediaQuery || isPseudoQuery
58
+ // extract just the media query name (e.g., 'lg' '_pr-_lg_260px')
59
+ // by finding the underscore after the media key name
60
+ const mediaStart = splitIndex + 2
61
+ const mediaEnd = name.indexOf('_', mediaStart)
62
+ const mediaKey =
63
+ isMediaQuery && mediaEnd > mediaStart ? name.slice(mediaStart, mediaEnd) : null
64
+ const uid = mediaKey ? styleKey + mediaKey : styleKey
65
+ // 3. && !isPseudoQuery
66
+
67
+ if (usedPrefixes.has(uid)) {
68
+ // if (shouldDebug) console.log('debug exclude:', usedPrefixes, name)
69
+ continue
70
+ }
71
+ usedPrefixes.add(uid)
72
+
73
+ // overrides for full safety
74
+ const propName = styleKey
75
+ if (propName && propObjects) {
76
+ if (
77
+ propObjects.some((po) => {
78
+ if (mediaKey) {
79
+ const propKey = pseudoInvert[mediaKey]
80
+ return po && po[propKey] && propName in po[propKey] && po[propKey] !== null
81
+ }
82
+ const res = po && propName in po && po[propName] !== null
83
+ return res
84
+ })
85
+ ) {
86
+ // if (shouldDebug) console.log('debug exclude:', name)
87
+ continue
88
+ }
89
+ }
90
+
91
+ final = name + ' ' + final
92
+ }
93
+ }
94
+
95
+ return final.trim()
96
+ }
97
+
98
+ const pseudoInvert = {
99
+ hover: 'hoverStyle',
100
+ focus: 'focusStyle',
101
+ press: 'pressStyle',
102
+ focusVisible: 'focusVisibleStyle',
103
+ focusWithin: 'focusWithinStyle',
104
+ disabled: 'disabledStyle',
105
+ }
@@ -0,0 +1,82 @@
1
+ import vm from 'node:vm'
2
+
3
+ import generate from '@babel/generator'
4
+ import type { NodePath } from '@babel/traverse'
5
+ import * as t from '@babel/types'
6
+ import esbuild from 'esbuild'
7
+
8
+ import { FAILED_EVAL } from '../constants'
9
+ import type { GuiOptionsWithFileInfo } from '../types'
10
+ import { evaluateAstNode } from './evaluateAstNode'
11
+
12
+ export function createEvaluator({
13
+ props,
14
+ staticNamespace,
15
+ sourcePath,
16
+ traversePath,
17
+ shouldPrintDebug,
18
+ }: {
19
+ props: GuiOptionsWithFileInfo
20
+ staticNamespace: Record<string, any>
21
+ sourcePath?: string
22
+ traversePath?: NodePath<t.JSXElement>
23
+ shouldPrintDebug: boolean | 'verbose'
24
+ }) {
25
+ // called when evaluateAstNode encounters a dynamic-looking prop
26
+ const evalFn = (n: t.Node) => {
27
+ // variable
28
+ if (t.isIdentifier(n) && typeof staticNamespace[n.name] !== 'undefined') {
29
+ return staticNamespace[n.name]
30
+ }
31
+
32
+ const evalContext = vm.createContext(staticNamespace)
33
+ // @ts-ignore
34
+ const codeWithTypescriptAnnotations = `(${generate(n as any).code})`
35
+ const code = esbuild
36
+ .transformSync(codeWithTypescriptAnnotations, { loader: 'tsx' })
37
+ .code.replace(/;\n$/, '')
38
+
39
+ if (shouldPrintDebug) {
40
+ console.info('evaluating', code)
41
+ }
42
+
43
+ const result1 = vm.runInContext(code, evalContext)
44
+ const result2 = vm.runInContext(code, evalContext)
45
+
46
+ const isDeterministic =
47
+ Object.is(result1, result2) ||
48
+ (typeof result1 === 'object' &&
49
+ typeof result2 === 'object' &&
50
+ JSON.stringify(result1) === JSON.stringify(result2))
51
+
52
+ if (!isDeterministic) {
53
+ if (shouldPrintDebug) {
54
+ console.info(
55
+ 'Bailing on non-deterministic expression:',
56
+ code,
57
+ '\nFirst result:',
58
+ result1,
59
+ 'Second result:',
60
+ result2
61
+ )
62
+ }
63
+ throw new Error(`Non-deterministic value, bailing`)
64
+ }
65
+
66
+ return result1
67
+ }
68
+
69
+ return (n: t.Node) => {
70
+ return evaluateAstNode(n, evalFn)
71
+ }
72
+ }
73
+
74
+ export function createSafeEvaluator(attemptEval: (n: t.Node) => any) {
75
+ return (n: t.Node) => {
76
+ try {
77
+ return attemptEval(n)
78
+ } catch (err) {
79
+ return FAILED_EVAL
80
+ }
81
+ }
82
+ }