@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.
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/dist/check-dep-versions.cjs +267 -0
- package/dist/checkDeps.cjs +200 -0
- package/dist/constants.cjs +49 -0
- package/dist/exports.cjs +44 -0
- package/dist/extractor/accessSafe.cjs +46 -0
- package/dist/extractor/babelParse.cjs +54 -0
- package/dist/extractor/buildClassName.cjs +62 -0
- package/dist/extractor/bundle.cjs +185 -0
- package/dist/extractor/bundleConfig.cjs +513 -0
- package/dist/extractor/concatClassName.cjs +80 -0
- package/dist/extractor/createEvaluator.cjs +75 -0
- package/dist/extractor/createExtractor.cjs +1150 -0
- package/dist/extractor/createLogger.cjs +45 -0
- package/dist/extractor/detectModuleFormat.cjs +49 -0
- package/dist/extractor/ensureImportingConcat.cjs +48 -0
- package/dist/extractor/errors.cjs +26 -0
- package/dist/extractor/esbuildAliasPlugin.cjs +44 -0
- package/dist/extractor/esbuildTsconfigPaths.cjs +86 -0
- package/dist/extractor/evaluateAstNode.cjs +83 -0
- package/dist/extractor/extractHelpers.cjs +119 -0
- package/dist/extractor/extractMediaStyle.cjs +128 -0
- package/dist/extractor/extractToClassNames.cjs +321 -0
- package/dist/extractor/extractToNative.cjs +266 -0
- package/dist/extractor/findTopmostFunction.cjs +34 -0
- package/dist/extractor/generatedUid.cjs +47 -0
- package/dist/extractor/getGuiConfigPathFromOptionsConfig.cjs +35 -0
- package/dist/extractor/getPrefixLogs.cjs +29 -0
- package/dist/extractor/getPropValueFromAttributes.cjs +67 -0
- package/dist/extractor/getSourceModule.cjs +64 -0
- package/dist/extractor/getStaticBindingsForScope.cjs +150 -0
- package/dist/extractor/hoistClassNames.cjs +62 -0
- package/dist/extractor/literalToAst.cjs +84 -0
- package/dist/extractor/loadFile.cjs +11 -0
- package/dist/extractor/loadGui.cjs +322 -0
- package/dist/extractor/logLines.cjs +35 -0
- package/dist/extractor/normalizeTernaries.cjs +73 -0
- package/dist/extractor/propsToFontFamilyCache.cjs +38 -0
- package/dist/extractor/regenerateConfig.cjs +150 -0
- package/dist/extractor/removeUnusedHooks.cjs +76 -0
- package/dist/extractor/timer.cjs +43 -0
- package/dist/extractor/validHTMLAttributes.cjs +77 -0
- package/dist/extractor/watchGuiConfig.cjs +58 -0
- package/dist/getPragmaOptions.cjs +58 -0
- package/dist/helpers/memoize.cjs +37 -0
- package/dist/helpers/requireGuiCore.cjs +33 -0
- package/dist/index.cjs +40 -0
- package/dist/registerRequire.cjs +115 -0
- package/dist/server.cjs +75 -0
- package/dist/setup.cjs +0 -0
- package/dist/types.cjs +16 -0
- package/dist/worker.cjs +89 -0
- package/package.json +101 -0
- package/src/check-dep-versions.ts +738 -0
- package/src/checkDeps.ts +371 -0
- package/src/constants.ts +14 -0
- package/src/exports.ts +15 -0
- package/src/extractor/accessSafe.ts +22 -0
- package/src/extractor/babelParse.ts +37 -0
- package/src/extractor/buildClassName.ts +76 -0
- package/src/extractor/bundle.ts +277 -0
- package/src/extractor/bundleConfig.ts +958 -0
- package/src/extractor/concatClassName.ts +105 -0
- package/src/extractor/createEvaluator.ts +82 -0
- package/src/extractor/createExtractor.ts +2665 -0
- package/src/extractor/createLogger.ts +41 -0
- package/src/extractor/detectModuleFormat.ts +42 -0
- package/src/extractor/ensureImportingConcat.ts +36 -0
- package/src/extractor/errors.ts +1 -0
- package/src/extractor/esbuildAliasPlugin.ts +40 -0
- package/src/extractor/esbuildTsconfigPaths.ts +103 -0
- package/src/extractor/evaluateAstNode.ts +136 -0
- package/src/extractor/extractHelpers.ts +211 -0
- package/src/extractor/extractMediaStyle.ts +194 -0
- package/src/extractor/extractToClassNames.ts +631 -0
- package/src/extractor/extractToNative.ts +463 -0
- package/src/extractor/findTopmostFunction.ts +24 -0
- package/src/extractor/generatedUid.ts +41 -0
- package/src/extractor/getGuiConfigPathFromOptionsConfig.ts +24 -0
- package/src/extractor/getPrefixLogs.ts +9 -0
- package/src/extractor/getPropValueFromAttributes.ts +95 -0
- package/src/extractor/getSourceModule.ts +96 -0
- package/src/extractor/getStaticBindingsForScope.ts +237 -0
- package/src/extractor/hoistClassNames.ts +52 -0
- package/src/extractor/literalToAst.ts +85 -0
- package/src/extractor/loadFile.ts +17 -0
- package/src/extractor/loadGui.ts +487 -0
- package/src/extractor/logLines.ts +16 -0
- package/src/extractor/normalizeTernaries.ts +75 -0
- package/src/extractor/propsToFontFamilyCache.ts +18 -0
- package/src/extractor/regenerateConfig.ts +186 -0
- package/src/extractor/removeUnusedHooks.ts +83 -0
- package/src/extractor/timer.ts +25 -0
- package/src/extractor/validHTMLAttributes.ts +52 -0
- package/src/extractor/watchGuiConfig.ts +57 -0
- package/src/getPragmaOptions.ts +57 -0
- package/src/helpers/memoize.ts +24 -0
- package/src/helpers/requireGuiCore.ts +28 -0
- package/src/index.ts +4 -0
- package/src/registerRequire.ts +236 -0
- package/src/server.ts +43 -0
- package/src/setup.ts +0 -0
- package/src/types.ts +109 -0
- package/src/worker.ts +142 -0
- package/types/check-dep-versions.d.ts +37 -0
- package/types/check-dep-versions.d.ts.map +1 -0
- package/types/checkDeps.d.ts +19 -0
- package/types/checkDeps.d.ts.map +1 -0
- package/types/constants.d.ts +6 -0
- package/types/constants.d.ts.map +1 -0
- package/types/exports.d.ts +16 -0
- package/types/exports.d.ts.map +1 -0
- package/types/extractor/accessSafe.d.ts +3 -0
- package/types/extractor/accessSafe.d.ts.map +1 -0
- package/types/extractor/babelParse.d.ts +5 -0
- package/types/extractor/babelParse.d.ts.map +1 -0
- package/types/extractor/buildClassName.d.ts +7 -0
- package/types/extractor/buildClassName.d.ts.map +1 -0
- package/types/extractor/bundle.d.ts +121 -0
- package/types/extractor/bundle.d.ts.map +1 -0
- package/types/extractor/bundleConfig.d.ts +49 -0
- package/types/extractor/bundleConfig.d.ts.map +1 -0
- package/types/extractor/concatClassName.d.ts +8 -0
- package/types/extractor/concatClassName.d.ts.map +1 -0
- package/types/extractor/createEvaluator.d.ts +12 -0
- package/types/extractor/createEvaluator.d.ts.map +1 -0
- package/types/extractor/createExtractor.d.ts +32 -0
- package/types/extractor/createExtractor.d.ts.map +1 -0
- package/types/extractor/createLogger.d.ts +3 -0
- package/types/extractor/createLogger.d.ts.map +1 -0
- package/types/extractor/detectModuleFormat.d.ts +5 -0
- package/types/extractor/detectModuleFormat.d.ts.map +1 -0
- package/types/extractor/ensureImportingConcat.d.ts +4 -0
- package/types/extractor/ensureImportingConcat.d.ts.map +1 -0
- package/types/extractor/errors.d.ts +3 -0
- package/types/extractor/errors.d.ts.map +1 -0
- package/types/extractor/esbuildAliasPlugin.d.ts +18 -0
- package/types/extractor/esbuildAliasPlugin.d.ts.map +1 -0
- package/types/extractor/esbuildTsconfigPaths.d.ts +11 -0
- package/types/extractor/esbuildTsconfigPaths.d.ts.map +1 -0
- package/types/extractor/evaluateAstNode.d.ts +3 -0
- package/types/extractor/evaluateAstNode.d.ts.map +1 -0
- package/types/extractor/extractHelpers.d.ts +28 -0
- package/types/extractor/extractHelpers.d.ts.map +1 -0
- package/types/extractor/extractMediaStyle.d.ts +11 -0
- package/types/extractor/extractMediaStyle.d.ts.map +1 -0
- package/types/extractor/extractToClassNames.d.ts +25 -0
- package/types/extractor/extractToClassNames.d.ts.map +1 -0
- package/types/extractor/extractToNative.d.ts +13 -0
- package/types/extractor/extractToNative.d.ts.map +1 -0
- package/types/extractor/findTopmostFunction.d.ts +4 -0
- package/types/extractor/findTopmostFunction.d.ts.map +1 -0
- package/types/extractor/generatedUid.d.ts +5 -0
- package/types/extractor/generatedUid.d.ts.map +1 -0
- package/types/extractor/getGuiConfigPathFromOptionsConfig.d.ts +3 -0
- package/types/extractor/getGuiConfigPathFromOptionsConfig.d.ts.map +1 -0
- package/types/extractor/getPrefixLogs.d.ts +3 -0
- package/types/extractor/getPrefixLogs.d.ts.map +1 -0
- package/types/extractor/getPropValueFromAttributes.d.ts +19 -0
- package/types/extractor/getPropValueFromAttributes.d.ts.map +1 -0
- package/types/extractor/getSourceModule.d.ts +16 -0
- package/types/extractor/getSourceModule.d.ts.map +1 -0
- package/types/extractor/getStaticBindingsForScope.d.ts +5 -0
- package/types/extractor/getStaticBindingsForScope.d.ts.map +1 -0
- package/types/extractor/hoistClassNames.d.ts +6 -0
- package/types/extractor/hoistClassNames.d.ts.map +1 -0
- package/types/extractor/literalToAst.d.ts +4 -0
- package/types/extractor/literalToAst.d.ts.map +1 -0
- package/types/extractor/loadFile.d.ts +1 -0
- package/types/extractor/loadFile.d.ts.map +1 -0
- package/types/extractor/loadGui.d.ts +22 -0
- package/types/extractor/loadGui.d.ts.map +1 -0
- package/types/extractor/logLines.d.ts +2 -0
- package/types/extractor/logLines.d.ts.map +1 -0
- package/types/extractor/normalizeTernaries.d.ts +3 -0
- package/types/extractor/normalizeTernaries.d.ts.map +1 -0
- package/types/extractor/propsToFontFamilyCache.d.ts +4 -0
- package/types/extractor/propsToFontFamilyCache.d.ts.map +1 -0
- package/types/extractor/regenerateConfig.d.ts +9 -0
- package/types/extractor/regenerateConfig.d.ts.map +1 -0
- package/types/extractor/removeUnusedHooks.d.ts +3 -0
- package/types/extractor/removeUnusedHooks.d.ts.map +1 -0
- package/types/extractor/timer.d.ts +5 -0
- package/types/extractor/timer.d.ts.map +1 -0
- package/types/extractor/validHTMLAttributes.d.ts +52 -0
- package/types/extractor/validHTMLAttributes.d.ts.map +1 -0
- package/types/extractor/watchGuiConfig.d.ts +5 -0
- package/types/extractor/watchGuiConfig.d.ts.map +1 -0
- package/types/getPragmaOptions.d.ts +8 -0
- package/types/getPragmaOptions.d.ts.map +1 -0
- package/types/helpers/memoize.d.ts +8 -0
- package/types/helpers/memoize.d.ts.map +1 -0
- package/types/helpers/requireGuiCore.d.ts +3 -0
- package/types/helpers/requireGuiCore.d.ts.map +1 -0
- package/types/index.d.ts +4 -0
- package/types/index.d.ts.map +1 -0
- package/types/registerRequire.d.ts +10 -0
- package/types/registerRequire.d.ts.map +1 -0
- package/types/server.d.ts +3 -0
- package/types/server.d.ts.map +1 -0
- package/types/setup.d.ts +1 -0
- package/types/setup.d.ts.map +1 -0
- package/types/types.d.ts +92 -0
- package/types/types.d.ts.map +1 -0
- package/types/worker.d.ts +46 -0
- 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
|
+
}
|