@tamagui/static 2.7.7 → 3.0.0-beta.643.1
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/dist/cjs/check-dep-versions.cjs +355 -0
- package/dist/cjs/checkDeps.cjs +302 -0
- package/dist/cjs/compiler.cjs +286 -0
- package/dist/cjs/compilerHost.cjs +1695 -0
- package/dist/cjs/constants.cjs +33 -0
- package/dist/cjs/domStructuralPass.cjs +112 -0
- package/dist/cjs/exports.cjs +42 -0
- package/dist/cjs/extractor/addLocalExports.cjs +64 -0
- package/dist/cjs/extractor/bundle.cjs +203 -0
- package/dist/cjs/extractor/bundleConfig.cjs +747 -0
- package/dist/cjs/extractor/concatClassName.cjs +117 -0
- package/dist/cjs/extractor/detectModuleFormat.cjs +54 -0
- package/dist/cjs/extractor/esbuildAliasPlugin.cjs +47 -0
- package/dist/cjs/extractor/esbuildTsconfigPaths.cjs +92 -0
- package/dist/cjs/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +38 -0
- package/dist/cjs/extractor/loadTamagui.cjs +344 -0
- package/dist/cjs/extractor/regenerateConfig.cjs +161 -0
- package/dist/cjs/extractor/watchTamaguiConfig.cjs +64 -0
- package/dist/cjs/getPragmaOptions.cjs +67 -0
- package/dist/cjs/helpers/memoize.cjs +42 -0
- package/dist/cjs/helpers/requireTamaguiCore.cjs +40 -0
- package/dist/cjs/index.cjs +34 -0
- package/dist/cjs/registerRequire.cjs +220 -0
- package/dist/cjs/server.cjs +66 -0
- package/dist/cjs/staticEvaluationIgnoredModules.cjs +86 -0
- package/dist/cjs/types.cjs +17 -0
- package/dist/cjs/zero/artifact.cjs +145 -0
- package/dist/cjs/zero/graph.cjs +209 -0
- package/dist/cjs/zero/identity.cjs +61 -0
- package/dist/cjs/zero/index.cjs +26 -0
- package/dist/cjs/zero/islands.cjs +232 -0
- package/dist/cjs/zero/options.cjs +163 -0
- package/dist/cjs/zero/ownership.cjs +79 -0
- package/dist/cjs/zero/theme.cjs +328 -0
- package/dist/cjs/zero/transform.cjs +203 -0
- package/dist/esm/check-dep-versions.mjs +329 -0
- package/dist/esm/check-dep-versions.mjs.map +1 -0
- package/dist/esm/checkDeps.mjs +279 -0
- package/dist/esm/checkDeps.mjs.map +1 -0
- package/dist/esm/compiler.mjs +255 -0
- package/dist/esm/compiler.mjs.map +1 -0
- package/dist/esm/compilerHost.mjs +1675 -0
- package/dist/esm/compilerHost.mjs.map +1 -0
- package/dist/esm/constants.mjs +7 -0
- package/dist/esm/constants.mjs.map +1 -0
- package/dist/esm/domStructuralPass.mjs +92 -0
- package/dist/esm/domStructuralPass.mjs.map +1 -0
- package/dist/esm/exports.mjs +26 -0
- package/dist/esm/extractor/addLocalExports.mjs +44 -0
- package/dist/esm/extractor/addLocalExports.mjs.map +1 -0
- package/dist/esm/extractor/bundle.mjs +173 -0
- package/dist/esm/extractor/bundle.mjs.map +1 -0
- package/dist/esm/extractor/bundleConfig.mjs +706 -0
- package/dist/esm/extractor/bundleConfig.mjs.map +1 -0
- package/dist/esm/extractor/concatClassName.mjs +96 -0
- package/dist/esm/extractor/concatClassName.mjs.map +1 -0
- package/dist/esm/extractor/detectModuleFormat.mjs +31 -0
- package/dist/esm/extractor/detectModuleFormat.mjs.map +1 -0
- package/dist/esm/extractor/esbuildAliasPlugin.mjs +26 -0
- package/dist/esm/extractor/esbuildAliasPlugin.mjs.map +1 -0
- package/dist/esm/extractor/esbuildTsconfigPaths.mjs +63 -0
- package/dist/esm/extractor/esbuildTsconfigPaths.mjs.map +1 -0
- package/dist/esm/extractor/getTamaguiConfigPathFromOptionsConfig.mjs +18 -0
- package/dist/esm/extractor/getTamaguiConfigPathFromOptionsConfig.mjs.map +1 -0
- package/dist/esm/extractor/loadTamagui.mjs +306 -0
- package/dist/esm/extractor/loadTamagui.mjs.map +1 -0
- package/dist/esm/extractor/regenerateConfig.mjs +131 -0
- package/dist/esm/extractor/regenerateConfig.mjs.map +1 -0
- package/dist/esm/extractor/watchTamaguiConfig.mjs +43 -0
- package/dist/esm/extractor/watchTamaguiConfig.mjs.map +1 -0
- package/dist/esm/getPragmaOptions.mjs +46 -0
- package/dist/esm/getPragmaOptions.mjs.map +1 -0
- package/dist/esm/helpers/memoize.mjs +21 -0
- package/dist/esm/helpers/memoize.mjs.map +1 -0
- package/dist/esm/helpers/requireTamaguiCore.mjs +19 -0
- package/dist/esm/helpers/requireTamaguiCore.mjs.map +1 -0
- package/dist/esm/index.mjs +8 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/registerRequire.mjs +195 -0
- package/dist/esm/registerRequire.mjs.map +1 -0
- package/dist/esm/server.mjs +40 -0
- package/dist/esm/server.mjs.map +1 -0
- package/dist/esm/setup.mjs +0 -0
- package/dist/esm/staticEvaluationIgnoredModules.mjs +61 -0
- package/dist/esm/staticEvaluationIgnoredModules.mjs.map +1 -0
- package/dist/esm/types.mjs +0 -0
- package/dist/esm/zero/artifact.mjs +119 -0
- package/dist/esm/zero/artifact.mjs.map +1 -0
- package/dist/esm/zero/graph.mjs +170 -0
- package/dist/esm/zero/graph.mjs.map +1 -0
- package/dist/esm/zero/identity.mjs +36 -0
- package/dist/esm/zero/identity.mjs.map +1 -0
- package/dist/esm/zero/index.mjs +15 -0
- package/dist/esm/zero/islands.mjs +197 -0
- package/dist/esm/zero/islands.mjs.map +1 -0
- package/dist/esm/zero/options.mjs +129 -0
- package/dist/esm/zero/options.mjs.map +1 -0
- package/dist/esm/zero/ownership.mjs +48 -0
- package/dist/esm/zero/ownership.mjs.map +1 -0
- package/dist/esm/zero/theme.mjs +303 -0
- package/dist/esm/zero/theme.mjs.map +1 -0
- package/dist/esm/zero/transform.mjs +177 -0
- package/dist/esm/zero/transform.mjs.map +1 -0
- package/package.json +33 -43
- package/src/check-dep-versions.ts +2 -2
- package/src/checkDeps.ts +3 -2
- package/src/compiler.ts +425 -0
- package/src/compilerHost.ts +3125 -0
- package/src/constants.ts +0 -5
- package/src/domStructuralPass.ts +170 -0
- package/src/exports.ts +3 -6
- package/src/extractor/addLocalExports.ts +49 -0
- package/src/extractor/bundle.ts +20 -35
- package/src/extractor/bundleConfig.ts +334 -187
- package/src/extractor/concatClassName.ts +13 -20
- package/src/extractor/getTamaguiConfigPathFromOptionsConfig.ts +5 -4
- package/src/extractor/loadTamagui.ts +196 -143
- package/src/extractor/regenerateConfig.ts +65 -13
- package/src/extractor/watchTamaguiConfig.ts +6 -1
- package/src/helpers/requireTamaguiCore.ts +6 -1
- package/src/registerRequire.ts +94 -132
- package/src/staticEvaluationIgnoredModules.ts +74 -0
- package/src/types.ts +2 -107
- package/src/zero/artifact.ts +142 -0
- package/src/zero/graph.ts +359 -0
- package/src/zero/identity.ts +73 -0
- package/src/zero/index.ts +8 -0
- package/src/zero/islands.ts +262 -0
- package/src/zero/options.ts +239 -0
- package/src/zero/ownership.ts +113 -0
- package/src/zero/theme.ts +478 -0
- package/src/zero/transform.ts +320 -0
- package/types/check-dep-versions.d.ts.map +1 -1
- package/types/checkDeps.d.ts.map +1 -1
- package/types/compiler.d.ts +117 -0
- package/types/compiler.d.ts.map +1 -0
- package/types/compilerHost.d.ts +25 -0
- package/types/compilerHost.d.ts.map +1 -0
- package/types/constants.d.ts +0 -1
- package/types/constants.d.ts.map +1 -1
- package/types/domStructuralPass.d.ts +3 -0
- package/types/domStructuralPass.d.ts.map +1 -0
- package/types/exports.d.ts +3 -6
- package/types/exports.d.ts.map +1 -1
- package/types/extractor/addLocalExports.d.ts +3 -0
- package/types/extractor/addLocalExports.d.ts.map +1 -0
- package/types/extractor/bundle.d.ts +66 -65
- package/types/extractor/bundle.d.ts.map +1 -1
- package/types/extractor/bundleConfig.d.ts +19 -4
- package/types/extractor/bundleConfig.d.ts.map +1 -1
- package/types/extractor/esbuildAliasPlugin.d.ts.map +1 -1
- package/types/extractor/getTamaguiConfigPathFromOptionsConfig.d.ts +1 -1
- package/types/extractor/getTamaguiConfigPathFromOptionsConfig.d.ts.map +1 -1
- package/types/extractor/loadTamagui.d.ts +26 -3
- package/types/extractor/loadTamagui.d.ts.map +1 -1
- package/types/extractor/regenerateConfig.d.ts +1 -1
- package/types/extractor/regenerateConfig.d.ts.map +1 -1
- package/types/extractor/watchTamaguiConfig.d.ts.map +1 -1
- package/types/getPragmaOptions.d.ts +1 -1
- package/types/helpers/memoize.d.ts +1 -1
- package/types/helpers/memoize.d.ts.map +1 -1
- package/types/helpers/requireTamaguiCore.d.ts.map +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/registerRequire.d.ts +2 -2
- package/types/registerRequire.d.ts.map +1 -1
- package/types/staticEvaluationIgnoredModules.d.ts +9 -0
- package/types/staticEvaluationIgnoredModules.d.ts.map +1 -0
- package/types/types.d.ts +2 -90
- package/types/types.d.ts.map +1 -1
- package/types/zero/artifact.d.ts +44 -0
- package/types/zero/artifact.d.ts.map +1 -0
- package/types/zero/graph.d.ts +139 -0
- package/types/zero/graph.d.ts.map +1 -0
- package/types/zero/identity.d.ts +33 -0
- package/types/zero/identity.d.ts.map +1 -0
- package/types/zero/index.d.ts +9 -0
- package/types/zero/index.d.ts.map +1 -0
- package/types/zero/islands.d.ts +56 -0
- package/types/zero/islands.d.ts.map +1 -0
- package/types/zero/options.d.ts +58 -0
- package/types/zero/options.d.ts.map +1 -0
- package/types/zero/ownership.d.ts +51 -0
- package/types/zero/ownership.d.ts.map +1 -0
- package/types/zero/theme.d.ts +83 -0
- package/types/zero/theme.d.ts.map +1 -0
- package/types/zero/transform.d.ts +53 -0
- package/types/zero/transform.d.ts.map +1 -0
- package/dist/check-dep-versions.cjs +0 -372
- package/dist/checkDeps.cjs +0 -271
- package/dist/constants.cjs +0 -51
- package/dist/exports.cjs +0 -48
- package/dist/extractor/accessSafe.cjs +0 -48
- package/dist/extractor/babelParse.cjs +0 -56
- package/dist/extractor/buildClassName.cjs +0 -86
- package/dist/extractor/bundle.cjs +0 -234
- package/dist/extractor/bundleConfig.cjs +0 -729
- package/dist/extractor/concatClassName.cjs +0 -129
- package/dist/extractor/createEvaluator.cjs +0 -88
- package/dist/extractor/createExtractor.cjs +0 -1968
- package/dist/extractor/createLogger.cjs +0 -50
- package/dist/extractor/detectModuleFormat.cjs +0 -55
- package/dist/extractor/ensureImportingConcat.cjs +0 -54
- package/dist/extractor/errors.cjs +0 -28
- package/dist/extractor/esbuildAliasPlugin.cjs +0 -56
- package/dist/extractor/esbuildTsconfigPaths.cjs +0 -108
- package/dist/extractor/evaluateAstNode.cjs +0 -128
- package/dist/extractor/extractHelpers.cjs +0 -182
- package/dist/extractor/extractMediaStyle.cjs +0 -169
- package/dist/extractor/extractToClassNames.cjs +0 -475
- package/dist/extractor/extractToNative.cjs +0 -369
- package/dist/extractor/findTopmostFunction.cjs +0 -43
- package/dist/extractor/generatedUid.cjs +0 -58
- package/dist/extractor/getPrefixLogs.cjs +0 -31
- package/dist/extractor/getPropValueFromAttributes.cjs +0 -85
- package/dist/extractor/getSourceModule.cjs +0 -100
- package/dist/extractor/getStaticBindingsForScope.cjs +0 -213
- package/dist/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +0 -41
- package/dist/extractor/hasTopLevelAwait.cjs +0 -62
- package/dist/extractor/hoistClassNames.cjs +0 -76
- package/dist/extractor/literalToAst.cjs +0 -109
- package/dist/extractor/loadFile.cjs +0 -17
- package/dist/extractor/loadTamagui.cjs +0 -373
- package/dist/extractor/logLines.cjs +0 -43
- package/dist/extractor/normalizeTernaries.cjs +0 -100
- package/dist/extractor/propsToFontFamilyCache.cjs +0 -42
- package/dist/extractor/regenerateConfig.cjs +0 -178
- package/dist/extractor/removeUnusedHooks.cjs +0 -108
- package/dist/extractor/timer.cjs +0 -52
- package/dist/extractor/validHTMLAttributes.cjs +0 -79
- package/dist/extractor/watchTamaguiConfig.cjs +0 -70
- package/dist/getPragmaOptions.cjs +0 -73
- package/dist/helpers/memoize.cjs +0 -45
- package/dist/helpers/requireTamaguiCore.cjs +0 -40
- package/dist/index.cjs +0 -42
- package/dist/registerRequire.cjs +0 -209
- package/dist/server.cjs +0 -82
- package/dist/types.cjs +0 -18
- package/dist/worker.cjs +0 -111
- package/src/extractor/accessSafe.ts +0 -22
- package/src/extractor/babelParse.ts +0 -38
- package/src/extractor/buildClassName.ts +0 -76
- package/src/extractor/createEvaluator.ts +0 -82
- package/src/extractor/createExtractor.ts +0 -2970
- package/src/extractor/createLogger.ts +0 -41
- package/src/extractor/ensureImportingConcat.ts +0 -36
- package/src/extractor/errors.ts +0 -1
- package/src/extractor/evaluateAstNode.ts +0 -136
- package/src/extractor/extractHelpers.ts +0 -211
- package/src/extractor/extractMediaStyle.ts +0 -194
- package/src/extractor/extractToClassNames.ts +0 -733
- package/src/extractor/extractToNative.ts +0 -506
- package/src/extractor/findTopmostFunction.ts +0 -24
- package/src/extractor/generatedUid.ts +0 -41
- package/src/extractor/getPrefixLogs.ts +0 -9
- package/src/extractor/getPropValueFromAttributes.ts +0 -95
- package/src/extractor/getSourceModule.ts +0 -96
- package/src/extractor/getStaticBindingsForScope.ts +0 -237
- package/src/extractor/hasTopLevelAwait.ts +0 -28
- package/src/extractor/hoistClassNames.ts +0 -52
- package/src/extractor/literalToAst.ts +0 -85
- package/src/extractor/loadFile.ts +0 -17
- package/src/extractor/logLines.ts +0 -16
- package/src/extractor/normalizeTernaries.ts +0 -89
- package/src/extractor/propsToFontFamilyCache.ts +0 -18
- package/src/extractor/removeUnusedHooks.ts +0 -83
- package/src/extractor/timer.ts +0 -25
- package/src/extractor/validHTMLAttributes.ts +0 -52
- package/src/worker.ts +0 -142
- package/types/extractor/accessSafe.d.ts +0 -3
- package/types/extractor/accessSafe.d.ts.map +0 -1
- package/types/extractor/babelParse.d.ts +0 -5
- package/types/extractor/babelParse.d.ts.map +0 -1
- package/types/extractor/buildClassName.d.ts +0 -7
- package/types/extractor/buildClassName.d.ts.map +0 -1
- package/types/extractor/createEvaluator.d.ts +0 -12
- package/types/extractor/createEvaluator.d.ts.map +0 -1
- package/types/extractor/createExtractor.d.ts +0 -32
- package/types/extractor/createExtractor.d.ts.map +0 -1
- package/types/extractor/createLogger.d.ts +0 -3
- package/types/extractor/createLogger.d.ts.map +0 -1
- package/types/extractor/ensureImportingConcat.d.ts +0 -4
- package/types/extractor/ensureImportingConcat.d.ts.map +0 -1
- package/types/extractor/errors.d.ts +0 -3
- package/types/extractor/errors.d.ts.map +0 -1
- package/types/extractor/evaluateAstNode.d.ts +0 -3
- package/types/extractor/evaluateAstNode.d.ts.map +0 -1
- package/types/extractor/extractHelpers.d.ts +0 -28
- package/types/extractor/extractHelpers.d.ts.map +0 -1
- package/types/extractor/extractMediaStyle.d.ts +0 -11
- package/types/extractor/extractMediaStyle.d.ts.map +0 -1
- package/types/extractor/extractToClassNames.d.ts +0 -25
- package/types/extractor/extractToClassNames.d.ts.map +0 -1
- package/types/extractor/extractToNative.d.ts +0 -13
- package/types/extractor/extractToNative.d.ts.map +0 -1
- package/types/extractor/findTopmostFunction.d.ts +0 -4
- package/types/extractor/findTopmostFunction.d.ts.map +0 -1
- package/types/extractor/generatedUid.d.ts +0 -5
- package/types/extractor/generatedUid.d.ts.map +0 -1
- package/types/extractor/getPrefixLogs.d.ts +0 -3
- package/types/extractor/getPrefixLogs.d.ts.map +0 -1
- package/types/extractor/getPropValueFromAttributes.d.ts +0 -19
- package/types/extractor/getPropValueFromAttributes.d.ts.map +0 -1
- package/types/extractor/getSourceModule.d.ts +0 -16
- package/types/extractor/getSourceModule.d.ts.map +0 -1
- package/types/extractor/getStaticBindingsForScope.d.ts +0 -5
- package/types/extractor/getStaticBindingsForScope.d.ts.map +0 -1
- package/types/extractor/hasTopLevelAwait.d.ts +0 -2
- package/types/extractor/hasTopLevelAwait.d.ts.map +0 -1
- package/types/extractor/hoistClassNames.d.ts +0 -6
- package/types/extractor/hoistClassNames.d.ts.map +0 -1
- package/types/extractor/literalToAst.d.ts +0 -4
- package/types/extractor/literalToAst.d.ts.map +0 -1
- package/types/extractor/loadFile.d.ts +0 -1
- package/types/extractor/loadFile.d.ts.map +0 -1
- package/types/extractor/logLines.d.ts +0 -2
- package/types/extractor/logLines.d.ts.map +0 -1
- package/types/extractor/normalizeTernaries.d.ts +0 -5
- package/types/extractor/normalizeTernaries.d.ts.map +0 -1
- package/types/extractor/propsToFontFamilyCache.d.ts +0 -4
- package/types/extractor/propsToFontFamilyCache.d.ts.map +0 -1
- package/types/extractor/removeUnusedHooks.d.ts +0 -3
- package/types/extractor/removeUnusedHooks.d.ts.map +0 -1
- package/types/extractor/timer.d.ts +0 -5
- package/types/extractor/timer.d.ts.map +0 -1
- package/types/extractor/validHTMLAttributes.d.ts +0 -52
- package/types/extractor/validHTMLAttributes.d.ts.map +0 -1
- package/types/worker.d.ts +0 -46
- package/types/worker.d.ts.map +0 -1
- /package/dist/{setup.cjs → cjs/setup.cjs} +0 -0
package/src/constants.ts
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
import findCacheDir from 'find-cache-dir'
|
|
2
|
-
|
|
3
1
|
export const CSS_FILE_NAME = '__snack.css'
|
|
4
2
|
|
|
5
3
|
// ENSURE THIS ISNT THE SAME AS THE SEPARATOR USED FOR STYLE KEYS
|
|
6
4
|
export const MEDIA_SEP = '_'
|
|
7
5
|
|
|
8
|
-
// ensure cache dir
|
|
9
|
-
export const cacheDir = findCacheDir({ name: 'tamagui', create: true })
|
|
10
|
-
|
|
11
6
|
export const FAILED_EVAL = Symbol('failed_style_eval')
|
|
12
7
|
|
|
13
8
|
export const SHOULD_DEBUG =
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ATTRIBUTES,
|
|
3
|
+
EVENTS,
|
|
4
|
+
NATIVE_BACKING,
|
|
5
|
+
TAGS,
|
|
6
|
+
type PropTags,
|
|
7
|
+
type TagName,
|
|
8
|
+
} from '@tamagui/dom'
|
|
9
|
+
import {
|
|
10
|
+
localBailout,
|
|
11
|
+
type BailoutReason,
|
|
12
|
+
type MaterializedElement,
|
|
13
|
+
type MaterializedModule,
|
|
14
|
+
type SourceEdit,
|
|
15
|
+
type StructuralModulePass,
|
|
16
|
+
} from '@tamagui/compiler-core'
|
|
17
|
+
import { createHash } from 'node:crypto'
|
|
18
|
+
|
|
19
|
+
const DOM_FRONTENDS = new Set([
|
|
20
|
+
'tamagui',
|
|
21
|
+
'tamagui/dom',
|
|
22
|
+
'@tamagui/core',
|
|
23
|
+
'@tamagui/core/dom',
|
|
24
|
+
'@tamagui/tailwind',
|
|
25
|
+
])
|
|
26
|
+
|
|
27
|
+
const acceptsTag = (accepted: PropTags, tag: TagName) =>
|
|
28
|
+
accepted === '*' || accepted.includes(tag)
|
|
29
|
+
|
|
30
|
+
function isDOMElement(element: MaterializedElement) {
|
|
31
|
+
const provenance = element.component.provenance
|
|
32
|
+
return provenance?.importedName === 'html' && DOM_FRONTENDS.has(provenance.specifier)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const versionHash = createHash('sha256')
|
|
36
|
+
.update(
|
|
37
|
+
JSON.stringify({
|
|
38
|
+
ATTRIBUTES,
|
|
39
|
+
EVENTS,
|
|
40
|
+
NATIVE_BACKING,
|
|
41
|
+
TAGS,
|
|
42
|
+
})
|
|
43
|
+
)
|
|
44
|
+
.digest('hex')
|
|
45
|
+
|
|
46
|
+
export const domStructuralPass: StructuralModulePass = {
|
|
47
|
+
versionHash: `dom-structural-v3-${versionHash}`,
|
|
48
|
+
transform({ module, source, target }) {
|
|
49
|
+
const edits: SourceEdit[] = []
|
|
50
|
+
const diagnostics: BailoutReason[] = []
|
|
51
|
+
const domElements = module.elements.filter(isDOMElement)
|
|
52
|
+
const supportedDOMElements = domElements.filter(
|
|
53
|
+
(
|
|
54
|
+
element
|
|
55
|
+
): element is MaterializedElement & {
|
|
56
|
+
component: MaterializedElement['component'] & { name: TagName }
|
|
57
|
+
} => Object.hasOwn(TAGS, element.component.name)
|
|
58
|
+
)
|
|
59
|
+
const domBySpan = new Map(
|
|
60
|
+
supportedDOMElements.map((element) => [
|
|
61
|
+
`${element.span.start}:${element.span.end}`,
|
|
62
|
+
element,
|
|
63
|
+
])
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
for (const element of domElements) {
|
|
67
|
+
const tagName = element.component.name as TagName
|
|
68
|
+
if (!Object.hasOwn(TAGS, tagName)) {
|
|
69
|
+
diagnostics.push(
|
|
70
|
+
localBailout(
|
|
71
|
+
'local/unsupported-target',
|
|
72
|
+
element.component.span,
|
|
73
|
+
`html.${element.component.name} is not part of the Tamagui DOM contract`
|
|
74
|
+
)
|
|
75
|
+
)
|
|
76
|
+
continue
|
|
77
|
+
}
|
|
78
|
+
const tag = TAGS[tagName]
|
|
79
|
+
if (target === 'native' && tag.native === 'none') {
|
|
80
|
+
diagnostics.push(
|
|
81
|
+
localBailout(
|
|
82
|
+
'local/unsupported-target',
|
|
83
|
+
element.component.span,
|
|
84
|
+
`html.${tagName} is not supported on native: ${tag.note ?? 'no native backing'}`
|
|
85
|
+
)
|
|
86
|
+
)
|
|
87
|
+
continue
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
for (const entry of element.entries) {
|
|
91
|
+
if (entry.kind !== 'prop') continue
|
|
92
|
+
const attribute =
|
|
93
|
+
(Object.hasOwn(ATTRIBUTES, entry.name) ? ATTRIBUTES[entry.name] : undefined) ??
|
|
94
|
+
(entry.name.startsWith('data-') ? ATTRIBUTES['data-*'] : undefined)
|
|
95
|
+
const event = Object.hasOwn(EVENTS, entry.name) ? EVENTS[entry.name] : undefined
|
|
96
|
+
const row = attribute ?? event
|
|
97
|
+
if (!row) continue
|
|
98
|
+
if (!acceptsTag(row.tags, tagName)) {
|
|
99
|
+
diagnostics.push(
|
|
100
|
+
localBailout(
|
|
101
|
+
'local/unsupported-prop-key',
|
|
102
|
+
entry.span,
|
|
103
|
+
`${entry.name} is not supported on html.${tagName}`
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
continue
|
|
107
|
+
}
|
|
108
|
+
if (target === 'native' && row.native === 'none') {
|
|
109
|
+
if (event) continue
|
|
110
|
+
diagnostics.push(
|
|
111
|
+
localBailout(
|
|
112
|
+
'local/unsupported-prop-key',
|
|
113
|
+
entry.span,
|
|
114
|
+
`${entry.name} is not supported on native html.${tagName}: ${row.note ?? 'no native equivalent'}`
|
|
115
|
+
)
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
for (const entry of element.entries) {
|
|
121
|
+
if (entry.kind !== 'child' || entry.value.kind !== 'element') continue
|
|
122
|
+
const child = domBySpan.get(`${entry.value.span.start}:${entry.value.span.end}`)
|
|
123
|
+
if (!child) continue
|
|
124
|
+
const childTag = child.component.name
|
|
125
|
+
const invalid =
|
|
126
|
+
tag.content === 'void' ||
|
|
127
|
+
tag.content === 'text' ||
|
|
128
|
+
(tag.content === 'phrasing' && TAGS[childTag].display === 'block') ||
|
|
129
|
+
(tag.content === 'tags' && !tag.childTags?.includes(childTag))
|
|
130
|
+
if (invalid) {
|
|
131
|
+
diagnostics.push(
|
|
132
|
+
localBailout(
|
|
133
|
+
'local/unsupported-child',
|
|
134
|
+
child.component.span,
|
|
135
|
+
`html.${childTag} cannot be nested directly inside html.${tagName}`
|
|
136
|
+
)
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
for (const definition of module.domStyleDefinitions) {
|
|
143
|
+
if (definition.value.kind !== 'static') {
|
|
144
|
+
diagnostics.push(
|
|
145
|
+
localBailout(
|
|
146
|
+
'local/dynamic-style-value',
|
|
147
|
+
definition.value.span,
|
|
148
|
+
`style() definition ${definition.name} must be statically evaluable`
|
|
149
|
+
)
|
|
150
|
+
)
|
|
151
|
+
continue
|
|
152
|
+
}
|
|
153
|
+
edits.push({
|
|
154
|
+
start: definition.span.start,
|
|
155
|
+
end: definition.span.end,
|
|
156
|
+
content: 'undefined',
|
|
157
|
+
origin: definition.span,
|
|
158
|
+
})
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const nextModule: MaterializedModule = module
|
|
162
|
+
return {
|
|
163
|
+
module: nextModule,
|
|
164
|
+
edits,
|
|
165
|
+
imports: [],
|
|
166
|
+
diagnostics,
|
|
167
|
+
dependencies: [],
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
}
|
package/src/exports.ts
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
export * from './checkDeps'
|
|
2
|
+
export * from './compilerHost'
|
|
3
|
+
export * from './compiler'
|
|
2
4
|
export * from './types'
|
|
3
|
-
export { createExtractor } from './extractor/createExtractor'
|
|
4
|
-
export { literalToAst } from './extractor/literalToAst'
|
|
5
5
|
export * from './constants'
|
|
6
|
-
export * from './extractor/extractToClassNames'
|
|
7
6
|
export * from './extractor/concatClassName'
|
|
8
|
-
export * from './extractor/extractToNative'
|
|
9
|
-
export * from './extractor/extractHelpers'
|
|
10
7
|
export * from './extractor/loadTamagui'
|
|
11
8
|
export * from './extractor/watchTamaguiConfig'
|
|
12
|
-
export * from './extractor/createLogger'
|
|
13
9
|
export * from './registerRequire'
|
|
14
10
|
export { detectModuleFormat, clearFormatCache } from './extractor/detectModuleFormat'
|
|
15
11
|
export { esbundleTamaguiConfig } from './extractor/bundle'
|
|
16
12
|
export * from './getPragmaOptions'
|
|
13
|
+
export * from './zero'
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import {
|
|
2
|
+
childNode,
|
|
3
|
+
childNodes,
|
|
4
|
+
identifierName,
|
|
5
|
+
parseModuleAst,
|
|
6
|
+
} from '@tamagui/compiler-core'
|
|
7
|
+
|
|
8
|
+
function declarationName(node: ReturnType<typeof childNode>): string | null {
|
|
9
|
+
return identifierName(node ? childNode(node, 'id') : null)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Adds exports used only while evaluating local component modules. */
|
|
13
|
+
export function addLocalExports(source: string, id?: string): string {
|
|
14
|
+
const program = parseModuleAst(source, id)
|
|
15
|
+
const usedNames = new Set<string>()
|
|
16
|
+
const candidates: string[] = []
|
|
17
|
+
|
|
18
|
+
for (const statement of childNodes(program, 'body')) {
|
|
19
|
+
if (statement.type === 'ExportNamedDeclaration') {
|
|
20
|
+
for (const specifier of childNodes(statement, 'specifiers')) {
|
|
21
|
+
const exported = childNode(specifier, 'exported')
|
|
22
|
+
const name = identifierName(exported)
|
|
23
|
+
if (name) usedNames.add(name)
|
|
24
|
+
}
|
|
25
|
+
const declaration = childNode(statement, 'declaration')
|
|
26
|
+
if (declaration?.type === 'VariableDeclaration') {
|
|
27
|
+
for (const declarator of childNodes(declaration, 'declarations')) {
|
|
28
|
+
const name = declarationName(declarator)
|
|
29
|
+
if (name) usedNames.add(name)
|
|
30
|
+
}
|
|
31
|
+
} else {
|
|
32
|
+
const name = declarationName(declaration)
|
|
33
|
+
if (name) usedNames.add(name)
|
|
34
|
+
}
|
|
35
|
+
continue
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (statement.type !== 'VariableDeclaration') continue
|
|
39
|
+
const declarations = childNodes(statement, 'declarations')
|
|
40
|
+
if (declarations.length !== 1) continue
|
|
41
|
+
const declaration = declarations[0]!
|
|
42
|
+
const name = declarationName(declaration)
|
|
43
|
+
if (!name || !childNode(declaration, 'init') || usedNames.has(name)) continue
|
|
44
|
+
candidates.push(name)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const names = candidates.filter((name) => !usedNames.has(name))
|
|
48
|
+
return names.length ? `${source}\nexport { ${names.join(', ')} }\n` : source
|
|
49
|
+
}
|
package/src/extractor/bundle.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto'
|
|
1
2
|
import { readFileSync } from 'node:fs'
|
|
3
|
+
import { createRequire } from 'node:module'
|
|
2
4
|
import esbuild from 'esbuild'
|
|
3
|
-
import
|
|
5
|
+
import FS from 'fs-extra'
|
|
4
6
|
import type { TamaguiPlatform } from '../types'
|
|
7
|
+
import { staticEvaluationIgnorePlugin } from '../staticEvaluationIgnoredModules'
|
|
5
8
|
import { detectModuleFormat } from './detectModuleFormat'
|
|
6
9
|
import { esbuildAliasPlugin } from './esbuildAliasPlugin'
|
|
7
|
-
import { hasTopLevelAwait } from './hasTopLevelAwait'
|
|
8
10
|
import { resolveWebOrNativeSpecificEntry } from './loadTamagui'
|
|
9
11
|
import { TsconfigPathsPlugin } from './esbuildTsconfigPaths'
|
|
10
12
|
|
|
13
|
+
const nodeRequire = createRequire(
|
|
14
|
+
typeof __filename === 'string' ? __filename : import.meta.url
|
|
15
|
+
)
|
|
16
|
+
|
|
11
17
|
export const esbuildLoaderConfig = {
|
|
12
18
|
'.js': 'jsx',
|
|
13
19
|
'.png': 'dataurl',
|
|
@@ -50,12 +56,14 @@ type Props = Omit<Partial<esbuild.BuildOptions>, 'entryPoints'> & {
|
|
|
50
56
|
outfile: string
|
|
51
57
|
entryPoints: string[]
|
|
52
58
|
resolvePlatformSpecificEntries?: boolean
|
|
59
|
+
dangerouslyIgnoreStaticEvaluationModules?: string[]
|
|
53
60
|
}
|
|
54
61
|
|
|
55
62
|
function getESBuildConfig(
|
|
56
63
|
{
|
|
57
64
|
entryPoints,
|
|
58
65
|
resolvePlatformSpecificEntries,
|
|
66
|
+
dangerouslyIgnoreStaticEvaluationModules = [],
|
|
59
67
|
define: callerDefine,
|
|
60
68
|
...options
|
|
61
69
|
}: Props,
|
|
@@ -134,6 +142,7 @@ function getESBuildConfig(
|
|
|
134
142
|
logLevel: 'warning',
|
|
135
143
|
plugins: [
|
|
136
144
|
TsconfigPathsPlugin(),
|
|
145
|
+
staticEvaluationIgnorePlugin(dangerouslyIgnoreStaticEvaluationModules),
|
|
137
146
|
|
|
138
147
|
// handle ESM-only features that can't be used with CJS output
|
|
139
148
|
{
|
|
@@ -175,19 +184,6 @@ function getESBuildConfig(
|
|
|
175
184
|
modified = true
|
|
176
185
|
}
|
|
177
186
|
|
|
178
|
-
// stub files with top-level await - they're typically runtime-only
|
|
179
|
-
if (hasTopLevelAwait(contents, args.path)) {
|
|
180
|
-
if (process.env.DEBUG?.startsWith('tamagui')) {
|
|
181
|
-
console.info(`[tamagui] stubbing file with top-level await: ${args.path}`)
|
|
182
|
-
}
|
|
183
|
-
return {
|
|
184
|
-
// Keep this as an ESM-shaped stub so esbuild doesn't inline a
|
|
185
|
-
// top-level `module.exports = {}` into the parent bundle.
|
|
186
|
-
contents: `// stubbed - contains top-level await\nexport default {}`,
|
|
187
|
-
loader: 'js',
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
187
|
if (modified) {
|
|
192
188
|
return {
|
|
193
189
|
contents,
|
|
@@ -209,10 +205,8 @@ function getESBuildConfig(
|
|
|
209
205
|
{
|
|
210
206
|
name: 'external',
|
|
211
207
|
setup(build) {
|
|
212
|
-
const proxyWormPath = require.resolve('@tamagui/proxy-worm')
|
|
213
|
-
|
|
214
208
|
// only externalize @tamagui/core and @tamagui/web - these are provided at runtime
|
|
215
|
-
// other @tamagui/* packages (like @tamagui/config/
|
|
209
|
+
// other @tamagui/* packages (like @tamagui/config/v6) must be bundled in to avoid
|
|
216
210
|
// ESM race conditions when multiple threads require() them concurrently
|
|
217
211
|
build.onResolve({ filter: /^@tamagui\/(core|web)$/ }, (args) => {
|
|
218
212
|
if (args.kind === 'entry-point') {
|
|
@@ -231,25 +225,13 @@ function getESBuildConfig(
|
|
|
231
225
|
}
|
|
232
226
|
})
|
|
233
227
|
|
|
234
|
-
build.onResolve({ filter: /^(react-native|react-native\/.*)$/ }, () => {
|
|
228
|
+
build.onResolve({ filter: /^(react-native|react-native\/.*)$/ }, (args) => {
|
|
235
229
|
return {
|
|
236
|
-
path: '@tamagui/react-native-web-lite',
|
|
230
|
+
path: args.path.replace(/^react-native/, '@tamagui/react-native-web-lite'),
|
|
237
231
|
external: true,
|
|
238
232
|
}
|
|
239
233
|
})
|
|
240
234
|
|
|
241
|
-
build.onResolve({ filter: /^react-native-reanimated(?:\/.*)?$/ }, () => {
|
|
242
|
-
return {
|
|
243
|
-
path: proxyWormPath,
|
|
244
|
-
}
|
|
245
|
-
})
|
|
246
|
-
|
|
247
|
-
build.onResolve({ filter: /^react-native-worklets(?:\/.*)?$/ }, () => {
|
|
248
|
-
return {
|
|
249
|
-
path: proxyWormPath,
|
|
250
|
-
}
|
|
251
|
-
})
|
|
252
|
-
|
|
253
235
|
// externalize animation libraries - not needed for static extraction
|
|
254
236
|
build.onResolve({ filter: /^(framer-motion|motion)/ }, (args) => {
|
|
255
237
|
return {
|
|
@@ -276,7 +258,7 @@ function detectEntryFormat(entryPoint: string): esbuild.BuildOptions['format'] {
|
|
|
276
258
|
}
|
|
277
259
|
// bare module specifier - check package.json type field
|
|
278
260
|
try {
|
|
279
|
-
const pkgJsonPath =
|
|
261
|
+
const pkgJsonPath = nodeRequire.resolve(entryPoint + '/package.json')
|
|
280
262
|
const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'))
|
|
281
263
|
return pkg.type === 'module' ? 'esm' : 'cjs'
|
|
282
264
|
} catch {
|
|
@@ -292,8 +274,11 @@ export async function esbundleTamaguiConfig(
|
|
|
292
274
|
const config = getESBuildConfig(props, platform, aliases)
|
|
293
275
|
|
|
294
276
|
// build to memory first, then write atomically (temp file + rename)
|
|
295
|
-
// to prevent other threads from reading partially-written files
|
|
296
|
-
|
|
277
|
+
// to prevent other threads from reading partially-written files.
|
|
278
|
+
// The suffix is per call, not per process: two bundles of the same config in
|
|
279
|
+
// one process shared a temp path, and whichever renamed first left the other
|
|
280
|
+
// renaming a file that no longer existed.
|
|
281
|
+
const tmpFile = `${props.outfile}.tmp.${process.pid}-${randomBytes(6).toString('hex')}`
|
|
297
282
|
const result = await esbuild.build({
|
|
298
283
|
...config,
|
|
299
284
|
outfile: tmpFile,
|