@hanzogui/static 2.0.0-rc.41-hanzoai.5

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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/check-dep-versions.cjs +372 -0
  4. package/dist/checkDeps.cjs +271 -0
  5. package/dist/constants.cjs +51 -0
  6. package/dist/exports.cjs +46 -0
  7. package/dist/extractor/accessSafe.cjs +48 -0
  8. package/dist/extractor/babelParse.cjs +56 -0
  9. package/dist/extractor/buildClassName.cjs +86 -0
  10. package/dist/extractor/bundle.cjs +224 -0
  11. package/dist/extractor/bundleConfig.cjs +716 -0
  12. package/dist/extractor/concatClassName.cjs +92 -0
  13. package/dist/extractor/createEvaluator.cjs +88 -0
  14. package/dist/extractor/createExtractor.cjs +1827 -0
  15. package/dist/extractor/createLogger.cjs +50 -0
  16. package/dist/extractor/detectModuleFormat.cjs +55 -0
  17. package/dist/extractor/ensureImportingConcat.cjs +54 -0
  18. package/dist/extractor/errors.cjs +28 -0
  19. package/dist/extractor/esbuildAliasPlugin.cjs +56 -0
  20. package/dist/extractor/esbuildTsconfigPaths.cjs +108 -0
  21. package/dist/extractor/evaluateAstNode.cjs +128 -0
  22. package/dist/extractor/extractHelpers.cjs +182 -0
  23. package/dist/extractor/extractMediaStyle.cjs +169 -0
  24. package/dist/extractor/extractToClassNames.cjs +427 -0
  25. package/dist/extractor/extractToNative.cjs +361 -0
  26. package/dist/extractor/findTopmostFunction.cjs +43 -0
  27. package/dist/extractor/generatedUid.cjs +58 -0
  28. package/dist/extractor/getHanzoguiConfigPathFromOptionsConfig.cjs +41 -0
  29. package/dist/extractor/getPrefixLogs.cjs +31 -0
  30. package/dist/extractor/getPropValueFromAttributes.cjs +85 -0
  31. package/dist/extractor/getSourceModule.cjs +100 -0
  32. package/dist/extractor/getStaticBindingsForScope.cjs +213 -0
  33. package/dist/extractor/hasTopLevelAwait.cjs +62 -0
  34. package/dist/extractor/hoistClassNames.cjs +76 -0
  35. package/dist/extractor/literalToAst.cjs +109 -0
  36. package/dist/extractor/loadFile.cjs +17 -0
  37. package/dist/extractor/loadHanzogui.cjs +367 -0
  38. package/dist/extractor/logLines.cjs +43 -0
  39. package/dist/extractor/normalizeTernaries.cjs +95 -0
  40. package/dist/extractor/propsToFontFamilyCache.cjs +42 -0
  41. package/dist/extractor/regenerateConfig.cjs +178 -0
  42. package/dist/extractor/removeUnusedHooks.cjs +108 -0
  43. package/dist/extractor/timer.cjs +52 -0
  44. package/dist/extractor/validHTMLAttributes.cjs +79 -0
  45. package/dist/extractor/watchHanzoguiConfig.cjs +70 -0
  46. package/dist/getPragmaOptions.cjs +73 -0
  47. package/dist/helpers/memoize.cjs +45 -0
  48. package/dist/helpers/requireHanzoguiCore.cjs +40 -0
  49. package/dist/index.cjs +42 -0
  50. package/dist/registerRequire.cjs +208 -0
  51. package/dist/server.cjs +82 -0
  52. package/dist/setup.cjs +0 -0
  53. package/dist/types.cjs +18 -0
  54. package/dist/worker.cjs +111 -0
  55. package/package.json +101 -0
  56. package/src/check-dep-versions.ts +738 -0
  57. package/src/checkDeps.ts +371 -0
  58. package/src/constants.ts +14 -0
  59. package/src/exports.ts +15 -0
  60. package/src/extractor/accessSafe.ts +22 -0
  61. package/src/extractor/babelParse.ts +38 -0
  62. package/src/extractor/buildClassName.ts +76 -0
  63. package/src/extractor/bundle.ts +277 -0
  64. package/src/extractor/bundleConfig.ts +958 -0
  65. package/src/extractor/concatClassName.ts +105 -0
  66. package/src/extractor/createEvaluator.ts +82 -0
  67. package/src/extractor/createExtractor.ts +2680 -0
  68. package/src/extractor/createLogger.ts +41 -0
  69. package/src/extractor/detectModuleFormat.ts +42 -0
  70. package/src/extractor/ensureImportingConcat.ts +36 -0
  71. package/src/extractor/errors.ts +1 -0
  72. package/src/extractor/esbuildAliasPlugin.ts +40 -0
  73. package/src/extractor/esbuildTsconfigPaths.ts +103 -0
  74. package/src/extractor/evaluateAstNode.ts +136 -0
  75. package/src/extractor/extractHelpers.ts +211 -0
  76. package/src/extractor/extractMediaStyle.ts +194 -0
  77. package/src/extractor/extractToClassNames.ts +631 -0
  78. package/src/extractor/extractToNative.ts +489 -0
  79. package/src/extractor/findTopmostFunction.ts +24 -0
  80. package/src/extractor/generatedUid.ts +41 -0
  81. package/src/extractor/getHanzoguiConfigPathFromOptionsConfig.ts +24 -0
  82. package/src/extractor/getPrefixLogs.ts +9 -0
  83. package/src/extractor/getPropValueFromAttributes.ts +95 -0
  84. package/src/extractor/getSourceModule.ts +96 -0
  85. package/src/extractor/getStaticBindingsForScope.ts +237 -0
  86. package/src/extractor/hasTopLevelAwait.ts +28 -0
  87. package/src/extractor/hoistClassNames.ts +52 -0
  88. package/src/extractor/literalToAst.ts +85 -0
  89. package/src/extractor/loadFile.ts +17 -0
  90. package/src/extractor/loadHanzogui.ts +487 -0
  91. package/src/extractor/logLines.ts +16 -0
  92. package/src/extractor/normalizeTernaries.ts +75 -0
  93. package/src/extractor/propsToFontFamilyCache.ts +18 -0
  94. package/src/extractor/regenerateConfig.ts +186 -0
  95. package/src/extractor/removeUnusedHooks.ts +83 -0
  96. package/src/extractor/timer.ts +25 -0
  97. package/src/extractor/validHTMLAttributes.ts +52 -0
  98. package/src/extractor/watchHanzoguiConfig.ts +57 -0
  99. package/src/getPragmaOptions.ts +57 -0
  100. package/src/helpers/memoize.ts +24 -0
  101. package/src/helpers/requireHanzoguiCore.ts +28 -0
  102. package/src/index.ts +4 -0
  103. package/src/registerRequire.ts +283 -0
  104. package/src/server.ts +43 -0
  105. package/src/setup.ts +0 -0
  106. package/src/types.ts +109 -0
  107. package/src/worker.ts +142 -0
  108. package/types/check-dep-versions.d.ts +37 -0
  109. package/types/check-dep-versions.d.ts.map +1 -0
  110. package/types/checkDeps.d.ts +19 -0
  111. package/types/checkDeps.d.ts.map +1 -0
  112. package/types/constants.d.ts +6 -0
  113. package/types/constants.d.ts.map +1 -0
  114. package/types/exports.d.ts +16 -0
  115. package/types/exports.d.ts.map +1 -0
  116. package/types/extractor/accessSafe.d.ts +3 -0
  117. package/types/extractor/accessSafe.d.ts.map +1 -0
  118. package/types/extractor/babelParse.d.ts +5 -0
  119. package/types/extractor/babelParse.d.ts.map +1 -0
  120. package/types/extractor/buildClassName.d.ts +7 -0
  121. package/types/extractor/buildClassName.d.ts.map +1 -0
  122. package/types/extractor/bundle.d.ts +121 -0
  123. package/types/extractor/bundle.d.ts.map +1 -0
  124. package/types/extractor/bundleConfig.d.ts +49 -0
  125. package/types/extractor/bundleConfig.d.ts.map +1 -0
  126. package/types/extractor/concatClassName.d.ts +8 -0
  127. package/types/extractor/concatClassName.d.ts.map +1 -0
  128. package/types/extractor/createEvaluator.d.ts +12 -0
  129. package/types/extractor/createEvaluator.d.ts.map +1 -0
  130. package/types/extractor/createExtractor.d.ts +32 -0
  131. package/types/extractor/createExtractor.d.ts.map +1 -0
  132. package/types/extractor/createLogger.d.ts +3 -0
  133. package/types/extractor/createLogger.d.ts.map +1 -0
  134. package/types/extractor/detectModuleFormat.d.ts +5 -0
  135. package/types/extractor/detectModuleFormat.d.ts.map +1 -0
  136. package/types/extractor/ensureImportingConcat.d.ts +4 -0
  137. package/types/extractor/ensureImportingConcat.d.ts.map +1 -0
  138. package/types/extractor/errors.d.ts +3 -0
  139. package/types/extractor/errors.d.ts.map +1 -0
  140. package/types/extractor/esbuildAliasPlugin.d.ts +18 -0
  141. package/types/extractor/esbuildAliasPlugin.d.ts.map +1 -0
  142. package/types/extractor/esbuildTsconfigPaths.d.ts +11 -0
  143. package/types/extractor/esbuildTsconfigPaths.d.ts.map +1 -0
  144. package/types/extractor/evaluateAstNode.d.ts +3 -0
  145. package/types/extractor/evaluateAstNode.d.ts.map +1 -0
  146. package/types/extractor/extractHelpers.d.ts +28 -0
  147. package/types/extractor/extractHelpers.d.ts.map +1 -0
  148. package/types/extractor/extractMediaStyle.d.ts +11 -0
  149. package/types/extractor/extractMediaStyle.d.ts.map +1 -0
  150. package/types/extractor/extractToClassNames.d.ts +25 -0
  151. package/types/extractor/extractToClassNames.d.ts.map +1 -0
  152. package/types/extractor/extractToNative.d.ts +13 -0
  153. package/types/extractor/extractToNative.d.ts.map +1 -0
  154. package/types/extractor/findTopmostFunction.d.ts +4 -0
  155. package/types/extractor/findTopmostFunction.d.ts.map +1 -0
  156. package/types/extractor/generatedUid.d.ts +5 -0
  157. package/types/extractor/generatedUid.d.ts.map +1 -0
  158. package/types/extractor/getHanzoguiConfigPathFromOptionsConfig.d.ts +3 -0
  159. package/types/extractor/getHanzoguiConfigPathFromOptionsConfig.d.ts.map +1 -0
  160. package/types/extractor/getPrefixLogs.d.ts +3 -0
  161. package/types/extractor/getPrefixLogs.d.ts.map +1 -0
  162. package/types/extractor/getPropValueFromAttributes.d.ts +19 -0
  163. package/types/extractor/getPropValueFromAttributes.d.ts.map +1 -0
  164. package/types/extractor/getSourceModule.d.ts +16 -0
  165. package/types/extractor/getSourceModule.d.ts.map +1 -0
  166. package/types/extractor/getStaticBindingsForScope.d.ts +5 -0
  167. package/types/extractor/getStaticBindingsForScope.d.ts.map +1 -0
  168. package/types/extractor/hasTopLevelAwait.d.ts +2 -0
  169. package/types/extractor/hasTopLevelAwait.d.ts.map +1 -0
  170. package/types/extractor/hoistClassNames.d.ts +6 -0
  171. package/types/extractor/hoistClassNames.d.ts.map +1 -0
  172. package/types/extractor/literalToAst.d.ts +4 -0
  173. package/types/extractor/literalToAst.d.ts.map +1 -0
  174. package/types/extractor/loadFile.d.ts +1 -0
  175. package/types/extractor/loadFile.d.ts.map +1 -0
  176. package/types/extractor/loadHanzogui.d.ts +22 -0
  177. package/types/extractor/loadHanzogui.d.ts.map +1 -0
  178. package/types/extractor/logLines.d.ts +2 -0
  179. package/types/extractor/logLines.d.ts.map +1 -0
  180. package/types/extractor/normalizeTernaries.d.ts +3 -0
  181. package/types/extractor/normalizeTernaries.d.ts.map +1 -0
  182. package/types/extractor/propsToFontFamilyCache.d.ts +4 -0
  183. package/types/extractor/propsToFontFamilyCache.d.ts.map +1 -0
  184. package/types/extractor/regenerateConfig.d.ts +9 -0
  185. package/types/extractor/regenerateConfig.d.ts.map +1 -0
  186. package/types/extractor/removeUnusedHooks.d.ts +3 -0
  187. package/types/extractor/removeUnusedHooks.d.ts.map +1 -0
  188. package/types/extractor/timer.d.ts +5 -0
  189. package/types/extractor/timer.d.ts.map +1 -0
  190. package/types/extractor/validHTMLAttributes.d.ts +52 -0
  191. package/types/extractor/validHTMLAttributes.d.ts.map +1 -0
  192. package/types/extractor/watchHanzoguiConfig.d.ts +5 -0
  193. package/types/extractor/watchHanzoguiConfig.d.ts.map +1 -0
  194. package/types/getPragmaOptions.d.ts +8 -0
  195. package/types/getPragmaOptions.d.ts.map +1 -0
  196. package/types/helpers/memoize.d.ts +8 -0
  197. package/types/helpers/memoize.d.ts.map +1 -0
  198. package/types/helpers/requireHanzoguiCore.d.ts +3 -0
  199. package/types/helpers/requireHanzoguiCore.d.ts.map +1 -0
  200. package/types/index.d.ts +4 -0
  201. package/types/index.d.ts.map +1 -0
  202. package/types/registerRequire.d.ts +10 -0
  203. package/types/registerRequire.d.ts.map +1 -0
  204. package/types/server.d.ts +3 -0
  205. package/types/server.d.ts.map +1 -0
  206. package/types/setup.d.ts +1 -0
  207. package/types/setup.d.ts.map +1 -0
  208. package/types/types.d.ts +92 -0
  209. package/types/types.d.ts.map +1 -0
  210. package/types/worker.d.ts +46 -0
  211. package/types/worker.d.ts.map +1 -0
@@ -0,0 +1,277 @@
1
+ import { readFileSync } from 'node:fs'
2
+ import esbuild from 'esbuild'
3
+ import * as FS from 'fs-extra'
4
+ import type { HanzoguiPlatform } from '../types'
5
+ import { detectModuleFormat } from './detectModuleFormat'
6
+ import { esbuildAliasPlugin } from './esbuildAliasPlugin'
7
+ import { hasTopLevelAwait } from './hasTopLevelAwait'
8
+ import { resolveWebOrNativeSpecificEntry } from './loadHanzogui'
9
+ import { TsconfigPathsPlugin } from './esbuildTsconfigPaths'
10
+
11
+ export const esbuildLoaderConfig = {
12
+ '.js': 'jsx',
13
+ '.png': 'dataurl',
14
+ '.jpg': 'dataurl',
15
+ '.jpeg': 'dataurl',
16
+ '.svg': 'dataurl',
17
+ '.gif': 'dataurl',
18
+ '.webp': 'dataurl',
19
+ '.woff2': 'dataurl',
20
+ '.woff': 'dataurl',
21
+ '.eot': 'dataurl',
22
+ '.otf': 'dataurl',
23
+ '.ttf': 'dataurl',
24
+ '.mp4': 'file',
25
+ '.mpeg4': 'file',
26
+ '.mov': 'file',
27
+ '.avif': 'file',
28
+ '.wmv': 'file',
29
+ '.webm': 'file',
30
+ '.wav': 'file',
31
+ '.aac': 'file',
32
+ '.ogg': 'file',
33
+ '.flac': 'file',
34
+ '.node': 'empty',
35
+ } as const
36
+
37
+ const dataExtensions = Object.keys(esbuildLoaderConfig)
38
+ .filter(
39
+ (k) => esbuildLoaderConfig[k] === 'file' || esbuildLoaderConfig[k] === 'dataurl'
40
+ )
41
+ .map((k) => k.slice(1))
42
+
43
+ export const esbuildIgnoreFilesRegex = new RegExp(`.(${dataExtensions.join('|')})$`, 'i')
44
+
45
+ /**
46
+ * For internal loading of new files
47
+ */
48
+
49
+ type Props = Omit<Partial<esbuild.BuildOptions>, 'entryPoints'> & {
50
+ outfile: string
51
+ entryPoints: string[]
52
+ resolvePlatformSpecificEntries?: boolean
53
+ }
54
+
55
+ function getESBuildConfig(
56
+ { entryPoints, resolvePlatformSpecificEntries, ...options }: Props,
57
+ platform: HanzoguiPlatform,
58
+ aliases?: Record<string, string>
59
+ ) {
60
+ if (process.env.DEBUG?.startsWith('hanzogui')) {
61
+ console.info(`Building`, entryPoints)
62
+ }
63
+
64
+ const resolvedEntryPoints = !resolvePlatformSpecificEntries
65
+ ? entryPoints
66
+ : entryPoints.map(resolveWebOrNativeSpecificEntry)
67
+
68
+ // detect format from entry points if not explicitly provided by caller
69
+ const detectedFormat = options.format || detectEntryFormat(resolvedEntryPoints[0])
70
+
71
+ const res: esbuild.BuildOptions = {
72
+ bundle: true,
73
+ entryPoints: resolvedEntryPoints,
74
+ format: detectedFormat,
75
+ // for ESM: prefer "module" field for resolution, add require() shim for bundled CJS deps
76
+ ...(detectedFormat === 'esm'
77
+ ? {
78
+ mainFields: ['module', 'main'],
79
+ banner: {
80
+ js: 'import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);',
81
+ },
82
+ }
83
+ : {}),
84
+ target: 'node24',
85
+ jsx: 'transform',
86
+ jsxFactory: 'react',
87
+ allowOverwrite: true,
88
+ keepNames: true,
89
+ resolveExtensions: [
90
+ ...(process.env.TAMAGUI_TARGET === 'web'
91
+ ? ['.web.tsx', '.web.ts', '.web.jsx', '.web.js']
92
+ : ['.native.tsx', '.native.ts', '.native.jsx', '.native.js']),
93
+ '.tsx',
94
+ '.ts',
95
+ '.jsx',
96
+ '.js',
97
+ ],
98
+ platform: 'node',
99
+ tsconfigRaw: {
100
+ compilerOptions: {
101
+ jsx: 'react-jsx',
102
+ },
103
+ },
104
+ loader: esbuildLoaderConfig,
105
+ logLevel: 'warning',
106
+ plugins: [
107
+ TsconfigPathsPlugin(),
108
+
109
+ // handle ESM-only features that can't be used with CJS output
110
+ {
111
+ name: 'handle-esm-features',
112
+ setup(build) {
113
+ // only apply transforms for CJS output - ESM supports these natively
114
+ const isCjs =
115
+ build.initialOptions.format === 'cjs' || !build.initialOptions.format
116
+
117
+ build.onLoad({ filter: /\.(ts|tsx|js|jsx|mjs)$/ }, (args) => {
118
+ // skip if ESM output - import.meta and top-level await work natively
119
+ if (!isCjs) {
120
+ return null
121
+ }
122
+
123
+ // skip most node_modules
124
+ if (args.path.includes('node_modules') && !args.path.includes('@hanzogui')) {
125
+ return null
126
+ }
127
+
128
+ let contents = readFileSync(args.path, 'utf8')
129
+ let modified = false
130
+
131
+ // transform import.meta.env -> process.env (Vite-style env vars)
132
+ if (contents.includes('import.meta.env')) {
133
+ contents = contents.replace(/import\.meta\.env/g, 'process.env')
134
+ modified = true
135
+ }
136
+
137
+ // transform import.meta.url -> "" (not needed for static extraction)
138
+ if (contents.includes('import.meta.url')) {
139
+ contents = contents.replace(/import\.meta\.url/g, '""')
140
+ modified = true
141
+ }
142
+
143
+ // transform import.meta.main -> false
144
+ if (contents.includes('import.meta.main')) {
145
+ contents = contents.replace(/import\.meta\.main/g, 'false')
146
+ modified = true
147
+ }
148
+
149
+ // stub files with top-level await - they're typically runtime-only
150
+ if (hasTopLevelAwait(contents, args.path)) {
151
+ if (process.env.DEBUG?.startsWith('hanzogui')) {
152
+ console.info(`[hanzogui] stubbing file with top-level await: ${args.path}`)
153
+ }
154
+ return {
155
+ // Keep this as an ESM-shaped stub so esbuild doesn't inline a
156
+ // top-level `module.exports = {}` into the parent bundle.
157
+ contents: `// stubbed - contains top-level await\nexport default {}`,
158
+ loader: 'js',
159
+ }
160
+ }
161
+
162
+ if (modified) {
163
+ return {
164
+ contents,
165
+ loader: args.path.endsWith('.tsx')
166
+ ? 'tsx'
167
+ : args.path.endsWith('.ts')
168
+ ? 'ts'
169
+ : args.path.endsWith('.jsx')
170
+ ? 'jsx'
171
+ : 'js',
172
+ }
173
+ }
174
+
175
+ return null
176
+ })
177
+ },
178
+ },
179
+
180
+ {
181
+ name: 'external',
182
+ setup(build) {
183
+ const proxyWormPath = require.resolve('@hanzogui/proxy-worm')
184
+
185
+ // only externalize @hanzogui/core and @hanzogui/web - these are provided at runtime
186
+ // other @hanzogui/* packages (like @hanzogui/config/v3) must be bundled in to avoid
187
+ // ESM race conditions when multiple threads require() them concurrently
188
+ build.onResolve({ filter: /^@hanzogui\/(core|web)$/ }, (args) => {
189
+ if (args.kind === 'entry-point') {
190
+ return null
191
+ }
192
+ return {
193
+ path: platform === 'native' ? '@hanzogui/core/native' : args.path,
194
+ external: true,
195
+ }
196
+ })
197
+
198
+ build.onResolve({ filter: /react-native\/package.json$/ }, () => {
199
+ return {
200
+ path: 'react-native/package.json',
201
+ external: true,
202
+ }
203
+ })
204
+
205
+ build.onResolve({ filter: /^(react-native|react-native\/.*)$/ }, () => {
206
+ return {
207
+ path: '@hanzogui/react-native-web-lite',
208
+ external: true,
209
+ }
210
+ })
211
+
212
+ build.onResolve({ filter: /^react-native-reanimated(?:\/.*)?$/ }, () => {
213
+ return {
214
+ path: proxyWormPath,
215
+ }
216
+ })
217
+
218
+ build.onResolve({ filter: /^react-native-worklets(?:\/.*)?$/ }, () => {
219
+ return {
220
+ path: proxyWormPath,
221
+ }
222
+ })
223
+
224
+ // externalize animation libraries - not needed for static extraction
225
+ build.onResolve({ filter: /^(framer-motion|motion)/ }, (args) => {
226
+ return {
227
+ path: args.path,
228
+ external: true,
229
+ }
230
+ })
231
+ },
232
+ },
233
+ esbuildAliasPlugin({
234
+ ...aliases,
235
+ }),
236
+ ],
237
+ ...options,
238
+ }
239
+
240
+ return res
241
+ }
242
+
243
+ function detectEntryFormat(entryPoint: string): esbuild.BuildOptions['format'] {
244
+ // file path - detect from file/package.json
245
+ if (entryPoint.startsWith('/') || entryPoint.startsWith('.')) {
246
+ return detectModuleFormat(entryPoint)
247
+ }
248
+ // bare module specifier - check package.json type field
249
+ try {
250
+ const pkgJsonPath = require.resolve(entryPoint + '/package.json')
251
+ const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'))
252
+ return pkg.type === 'module' ? 'esm' : 'cjs'
253
+ } catch {
254
+ return 'cjs'
255
+ }
256
+ }
257
+
258
+ export async function esbundleHanzoguiConfig(
259
+ props: Props,
260
+ platform: HanzoguiPlatform,
261
+ aliases?: Record<string, string>
262
+ ) {
263
+ const config = getESBuildConfig(props, platform, aliases)
264
+
265
+ // build to memory first, then write atomically (temp file + rename)
266
+ // to prevent other threads from reading partially-written files
267
+ const tmpFile = props.outfile + '.tmp.' + process.pid
268
+ const result = await esbuild.build({
269
+ ...config,
270
+ outfile: tmpFile,
271
+ })
272
+
273
+ // atomic rename prevents other threads from reading partial files
274
+ await FS.rename(tmpFile, props.outfile)
275
+
276
+ return result
277
+ }