@tamagui/static 2.7.7 → 3.0.0-beta.1097.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 +354 -0
- package/dist/cjs/checkDeps.cjs +301 -0
- package/dist/cjs/compiler.cjs +349 -0
- package/dist/cjs/compilerHost.cjs +2287 -0
- package/dist/cjs/componentDiscovery.cjs +94 -0
- package/dist/cjs/constants.cjs +32 -0
- package/dist/cjs/domStructuralPass.cjs +121 -0
- package/dist/cjs/exports.cjs +44 -0
- package/dist/cjs/extractor/addLocalExports.cjs +63 -0
- package/dist/cjs/extractor/bundle.cjs +229 -0
- package/dist/cjs/extractor/bundleConfig.cjs +769 -0
- package/dist/cjs/extractor/concatClassName.cjs +120 -0
- package/dist/cjs/extractor/detectModuleFormat.cjs +53 -0
- package/dist/cjs/extractor/esbuildAliasPlugin.cjs +46 -0
- package/dist/cjs/extractor/esbuildTsconfigPaths.cjs +91 -0
- package/dist/cjs/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +42 -0
- package/dist/cjs/extractor/loadTamagui.cjs +394 -0
- package/dist/cjs/extractor/regenerateConfig.cjs +160 -0
- package/dist/cjs/extractor/watchTamaguiConfig.cjs +63 -0
- package/dist/cjs/getPragmaOptions.cjs +66 -0
- package/dist/cjs/helpers/memoize.cjs +41 -0
- package/dist/cjs/helpers/requireTamaguiCore.cjs +39 -0
- package/dist/cjs/index.cjs +33 -0
- package/dist/cjs/registerRequire.cjs +219 -0
- package/dist/cjs/server.cjs +65 -0
- package/dist/cjs/staticEvaluationIgnoredModules.cjs +85 -0
- package/dist/cjs/types.cjs +16 -0
- package/dist/cjs/zero/artifact.cjs +144 -0
- package/dist/cjs/zero/graph.cjs +208 -0
- package/dist/cjs/zero/identity.cjs +60 -0
- package/dist/cjs/zero/index.cjs +33 -0
- package/dist/cjs/zero/islands.cjs +235 -0
- package/dist/cjs/zero/options.cjs +162 -0
- package/dist/cjs/zero/ownership.cjs +78 -0
- package/dist/cjs/zero/theme.cjs +337 -0
- package/dist/cjs/zero/transform.cjs +207 -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 +319 -0
- package/dist/esm/compiler.mjs.map +1 -0
- package/dist/esm/compilerHost.mjs +2265 -0
- package/dist/esm/compilerHost.mjs.map +1 -0
- package/dist/esm/componentDiscovery.mjs +69 -0
- package/dist/esm/componentDiscovery.mjs.map +1 -0
- package/dist/esm/constants.mjs +7 -0
- package/dist/esm/constants.mjs.map +1 -0
- package/dist/esm/domStructuralPass.mjs +102 -0
- package/dist/esm/domStructuralPass.mjs.map +1 -0
- package/dist/esm/exports.mjs +29 -0
- package/dist/esm/extractor/addLocalExports.mjs +44 -0
- package/dist/esm/extractor/addLocalExports.mjs.map +1 -0
- package/dist/esm/extractor/bundle.mjs +199 -0
- package/dist/esm/extractor/bundle.mjs.map +1 -0
- package/dist/esm/extractor/bundleConfig.mjs +728 -0
- package/dist/esm/extractor/bundleConfig.mjs.map +1 -0
- package/dist/esm/extractor/concatClassName.mjs +100 -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 +23 -0
- package/dist/esm/extractor/getTamaguiConfigPathFromOptionsConfig.mjs.map +1 -0
- package/dist/esm/extractor/loadTamagui.mjs +357 -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 +19 -0
- package/dist/esm/zero/islands.mjs +201 -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 +313 -0
- package/dist/esm/zero/theme.mjs.map +1 -0
- package/dist/esm/zero/transform.mjs +182 -0
- package/dist/esm/zero/transform.mjs.map +1 -0
- package/package.json +38 -47
- package/src/check-dep-versions.ts +2 -2
- package/src/checkDeps.ts +3 -2
- package/src/compiler.ts +506 -0
- package/src/compilerHost.ts +3739 -0
- package/src/componentDiscovery.ts +105 -0
- package/src/constants.ts +0 -5
- package/src/domStructuralPass.ts +190 -0
- package/src/exports.ts +5 -6
- package/src/extractor/addLocalExports.ts +49 -0
- package/src/extractor/bundle.ts +38 -40
- package/src/extractor/bundleConfig.ts +368 -187
- package/src/extractor/concatClassName.ts +21 -24
- package/src/extractor/getTamaguiConfigPathFromOptionsConfig.ts +13 -5
- 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 +9 -0
- package/src/zero/islands.ts +266 -0
- package/src/zero/options.ts +239 -0
- package/src/zero/ownership.ts +113 -0
- package/src/zero/theme.ts +526 -0
- package/src/zero/transform.ts +329 -0
- package/types/check-dep-versions.d.ts.map +1 -1
- package/types/checkDeps.d.ts.map +1 -1
- package/types/compiler.d.ts +134 -0
- package/types/compiler.d.ts.map +1 -0
- package/types/compilerHost.d.ts +38 -0
- package/types/compilerHost.d.ts.map +1 -0
- package/types/componentDiscovery.d.ts +27 -0
- package/types/componentDiscovery.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 +5 -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 +26 -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 +10 -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 +85 -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
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ATTRIBUTES, EVENTS, NATIVE_BACKING, TAGS } from "@tamagui/dom";
|
|
2
|
+
import { localBailout } from "@tamagui/compiler-core";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
|
|
5
|
+
const DOM_FRONTENDS = /* @__PURE__ */ new Set([
|
|
6
|
+
"tamagui",
|
|
7
|
+
"tamagui/dom",
|
|
8
|
+
"@tamagui/core",
|
|
9
|
+
"@tamagui/core/dom",
|
|
10
|
+
"@tamagui/tailwind"
|
|
11
|
+
]);
|
|
12
|
+
const RUNTIME_STYLE_FRONTENDS = /* @__PURE__ */ new Set([
|
|
13
|
+
"tamagui",
|
|
14
|
+
"@tamagui/core",
|
|
15
|
+
"@tamagui/web"
|
|
16
|
+
]);
|
|
17
|
+
const acceptsTag = (accepted, tag) => accepted === "*" || accepted.includes(tag);
|
|
18
|
+
function isDOMElement(element) {
|
|
19
|
+
const provenance = element.component.provenance;
|
|
20
|
+
return provenance?.importedName === "html" && DOM_FRONTENDS.has(provenance.specifier);
|
|
21
|
+
}
|
|
22
|
+
const versionHash = createHash("sha256").update(JSON.stringify({
|
|
23
|
+
ATTRIBUTES,
|
|
24
|
+
EVENTS,
|
|
25
|
+
NATIVE_BACKING,
|
|
26
|
+
TAGS
|
|
27
|
+
})).digest("hex");
|
|
28
|
+
const domStructuralPass = {
|
|
29
|
+
versionHash: `dom-structural-v4-${versionHash}`,
|
|
30
|
+
transform({ module, source, target }) {
|
|
31
|
+
const edits = [];
|
|
32
|
+
const diagnostics = [];
|
|
33
|
+
const domElements = module.elements.filter(isDOMElement);
|
|
34
|
+
const supportedDOMElements = domElements.filter((element) => element.component.name in TAGS);
|
|
35
|
+
const domBySpan = new Map(supportedDOMElements.map((element) => [`${element.span.start}:${element.span.end}`, element]));
|
|
36
|
+
for (const element of domElements) {
|
|
37
|
+
const tagName = element.component.name;
|
|
38
|
+
if (!(tagName in TAGS)) {
|
|
39
|
+
diagnostics.push(localBailout("local/unsupported-target", element.component.span, `html.${element.component.name} is not part of the Tamagui DOM contract`));
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const tag = TAGS[tagName];
|
|
43
|
+
if (target === "native" && tag.native === "none") {
|
|
44
|
+
diagnostics.push(localBailout("local/unsupported-target", element.component.span, `html.${tagName} is not supported on native: ${tag.note ?? "no native backing"}`));
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
for (const entry of element.entries) {
|
|
48
|
+
if (entry.kind !== "prop") continue;
|
|
49
|
+
const attribute = (entry.name in ATTRIBUTES ? ATTRIBUTES[entry.name] : void 0) ?? (entry.name.startsWith("data-") ? ATTRIBUTES["data-*"] : void 0);
|
|
50
|
+
const event = entry.name in EVENTS ? EVENTS[entry.name] : void 0;
|
|
51
|
+
const row = attribute ?? event;
|
|
52
|
+
if (!row) continue;
|
|
53
|
+
if (!acceptsTag(row.tags, tagName)) {
|
|
54
|
+
diagnostics.push(localBailout("local/unsupported-prop-key", entry.span, `${entry.name} is not supported on html.${tagName}`));
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (target === "native" && row.native === "none") {
|
|
58
|
+
if (event) continue;
|
|
59
|
+
diagnostics.push(localBailout("local/unsupported-prop-key", entry.span, `${entry.name} is not supported on native html.${tagName}: ${row.note ?? "no native equivalent"}`));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
for (const entry of element.entries) {
|
|
63
|
+
if (entry.kind !== "child" || entry.value.kind !== "element") continue;
|
|
64
|
+
const child = domBySpan.get(`${entry.value.span.start}:${entry.value.span.end}`);
|
|
65
|
+
if (!child) continue;
|
|
66
|
+
const childTag = child.component.name;
|
|
67
|
+
const invalid = tag.content === "void" || tag.content === "text" || tag.content === "phrasing" && TAGS[childTag].display === "block" || tag.content === "tags" && !tag.childTags?.includes(childTag);
|
|
68
|
+
if (invalid) {
|
|
69
|
+
diagnostics.push(localBailout("local/unsupported-child", child.component.span, `html.${childTag} cannot be nested directly inside html.${tagName}`));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
for (const definition of module.domStyleDefinitions) {
|
|
74
|
+
if (definition.value.kind !== "static") {
|
|
75
|
+
diagnostics.push(localBailout("local/dynamic-style-value", definition.value.span, `style() definition ${definition.name} must be statically evaluable`));
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const isRuntimeStyle = RUNTIME_STYLE_FRONTENDS.has(definition.factory.specifier);
|
|
79
|
+
if (isRuntimeStyle && (!definition.value.value || typeof definition.value.value !== "object" || Array.isArray(definition.value.value))) {
|
|
80
|
+
diagnostics.push(localBailout("local/dynamic-style-value", definition.value.span, `style() definition ${definition.name} must be an object literal`));
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
edits.push({
|
|
84
|
+
start: definition.span.start,
|
|
85
|
+
end: definition.span.end,
|
|
86
|
+
content: isRuntimeStyle ? `({ className: "", [Symbol.for("tamagui.stylePiece")]: { byKey: {}, styleObject: ${JSON.stringify(definition.value.value)} } })` : "undefined",
|
|
87
|
+
origin: definition.span
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const nextModule = module;
|
|
91
|
+
return {
|
|
92
|
+
module: nextModule,
|
|
93
|
+
edits,
|
|
94
|
+
imports: [],
|
|
95
|
+
diagnostics,
|
|
96
|
+
dependencies: []
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export { domStructuralPass };
|
|
102
|
+
//# sourceMappingURL=domStructuralPass.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domStructuralPass.js","names":[],"sources":["esm/domStructuralPass.js"],"sourcesContent":["import {\n ATTRIBUTES,\n EVENTS,\n NATIVE_BACKING,\n TAGS\n} from \"@tamagui/dom\";\nimport {\n localBailout\n} from \"@tamagui/compiler-core\";\nimport { createHash } from \"node:crypto\";\nconst DOM_FRONTENDS = /* @__PURE__ */ new Set([\n \"tamagui\",\n \"tamagui/dom\",\n \"@tamagui/core\",\n \"@tamagui/core/dom\",\n \"@tamagui/tailwind\"\n]);\nconst RUNTIME_STYLE_FRONTENDS = /* @__PURE__ */ new Set([\"tamagui\", \"@tamagui/core\", \"@tamagui/web\"]);\nconst acceptsTag = (accepted, tag) => accepted === \"*\" || accepted.includes(tag);\nfunction isDOMElement(element) {\n const provenance = element.component.provenance;\n return provenance?.importedName === \"html\" && DOM_FRONTENDS.has(provenance.specifier);\n}\nconst versionHash = createHash(\"sha256\").update(\n JSON.stringify({\n ATTRIBUTES,\n EVENTS,\n NATIVE_BACKING,\n TAGS\n })\n).digest(\"hex\");\nconst domStructuralPass = {\n versionHash: `dom-structural-v4-${versionHash}`,\n transform({ module, source, target }) {\n const edits = [];\n const diagnostics = [];\n const domElements = module.elements.filter(isDOMElement);\n const supportedDOMElements = domElements.filter(\n (element) => element.component.name in TAGS\n );\n const domBySpan = new Map(\n supportedDOMElements.map((element) => [\n `${element.span.start}:${element.span.end}`,\n element\n ])\n );\n for (const element of domElements) {\n const tagName = element.component.name;\n if (!(tagName in TAGS)) {\n diagnostics.push(\n localBailout(\n \"local/unsupported-target\",\n element.component.span,\n `html.${element.component.name} is not part of the Tamagui DOM contract`\n )\n );\n continue;\n }\n const tag = TAGS[tagName];\n if (target === \"native\" && tag.native === \"none\") {\n diagnostics.push(\n localBailout(\n \"local/unsupported-target\",\n element.component.span,\n `html.${tagName} is not supported on native: ${tag.note ?? \"no native backing\"}`\n )\n );\n continue;\n }\n for (const entry of element.entries) {\n if (entry.kind !== \"prop\") continue;\n const attribute = (entry.name in ATTRIBUTES ? ATTRIBUTES[entry.name] : void 0) ?? (entry.name.startsWith(\"data-\") ? ATTRIBUTES[\"data-*\"] : void 0);\n const event = entry.name in EVENTS ? EVENTS[entry.name] : void 0;\n const row = attribute ?? event;\n if (!row) continue;\n if (!acceptsTag(row.tags, tagName)) {\n diagnostics.push(\n localBailout(\n \"local/unsupported-prop-key\",\n entry.span,\n `${entry.name} is not supported on html.${tagName}`\n )\n );\n continue;\n }\n if (target === \"native\" && row.native === \"none\") {\n if (event) continue;\n diagnostics.push(\n localBailout(\n \"local/unsupported-prop-key\",\n entry.span,\n `${entry.name} is not supported on native html.${tagName}: ${row.note ?? \"no native equivalent\"}`\n )\n );\n }\n }\n for (const entry of element.entries) {\n if (entry.kind !== \"child\" || entry.value.kind !== \"element\") continue;\n const child = domBySpan.get(`${entry.value.span.start}:${entry.value.span.end}`);\n if (!child) continue;\n const childTag = child.component.name;\n const invalid = tag.content === \"void\" || tag.content === \"text\" || tag.content === \"phrasing\" && TAGS[childTag].display === \"block\" || tag.content === \"tags\" && !tag.childTags?.includes(childTag);\n if (invalid) {\n diagnostics.push(\n localBailout(\n \"local/unsupported-child\",\n child.component.span,\n `html.${childTag} cannot be nested directly inside html.${tagName}`\n )\n );\n }\n }\n }\n for (const definition of module.domStyleDefinitions) {\n if (definition.value.kind !== \"static\") {\n diagnostics.push(\n localBailout(\n \"local/dynamic-style-value\",\n definition.value.span,\n `style() definition ${definition.name} must be statically evaluable`\n )\n );\n continue;\n }\n const isRuntimeStyle = RUNTIME_STYLE_FRONTENDS.has(definition.factory.specifier);\n if (isRuntimeStyle && (!definition.value.value || typeof definition.value.value !== \"object\" || Array.isArray(definition.value.value))) {\n diagnostics.push(\n localBailout(\n \"local/dynamic-style-value\",\n definition.value.span,\n `style() definition ${definition.name} must be an object literal`\n )\n );\n continue;\n }\n edits.push({\n start: definition.span.start,\n end: definition.span.end,\n content: isRuntimeStyle ? `({ className: \"\", [Symbol.for(\"tamagui.stylePiece\")]: { byKey: {}, styleObject: ${JSON.stringify(definition.value.value)} } })` : \"undefined\",\n origin: definition.span\n });\n }\n const nextModule = module;\n return {\n module: nextModule,\n edits,\n imports: [],\n diagnostics,\n dependencies: []\n };\n }\n};\nexport {\n domStructuralPass\n};\n//# sourceMappingURL=domStructuralPass.js.map\n"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { evaluateComponentModule } from "./extractor/bundleConfig.mjs";
|
|
2
|
+
import { clearFormatCache, detectModuleFormat } from "./extractor/detectModuleFormat.mjs";
|
|
3
|
+
import { esbundleTamaguiConfig } from "./extractor/bundle.mjs";
|
|
4
|
+
|
|
5
|
+
export * from "./checkDeps.mjs"
|
|
6
|
+
|
|
7
|
+
export * from "./compilerHost.mjs"
|
|
8
|
+
|
|
9
|
+
export * from "./compiler.mjs"
|
|
10
|
+
|
|
11
|
+
export * from "./types.mjs"
|
|
12
|
+
|
|
13
|
+
export * from "./constants.mjs"
|
|
14
|
+
|
|
15
|
+
export * from "./extractor/concatClassName.mjs"
|
|
16
|
+
|
|
17
|
+
export * from "./extractor/loadTamagui.mjs"
|
|
18
|
+
|
|
19
|
+
export * from "./componentDiscovery.mjs"
|
|
20
|
+
|
|
21
|
+
export * from "./extractor/watchTamaguiConfig.mjs"
|
|
22
|
+
|
|
23
|
+
export * from "./registerRequire.mjs"
|
|
24
|
+
|
|
25
|
+
export * from "./getPragmaOptions.mjs"
|
|
26
|
+
|
|
27
|
+
export * from "./zero/index.mjs"
|
|
28
|
+
|
|
29
|
+
export { clearFormatCache, detectModuleFormat, esbundleTamaguiConfig, evaluateComponentModule };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { childNode, childNodes, identifierName, parseModuleAst } from "@tamagui/compiler-core";
|
|
2
|
+
|
|
3
|
+
function declarationName(node) {
|
|
4
|
+
return identifierName(node ? childNode(node, "id") : null);
|
|
5
|
+
}
|
|
6
|
+
function addLocalExports(source, id) {
|
|
7
|
+
const program = parseModuleAst(source, id);
|
|
8
|
+
const usedNames = /* @__PURE__ */ new Set();
|
|
9
|
+
const candidates = [];
|
|
10
|
+
for (const statement of childNodes(program, "body")) {
|
|
11
|
+
if (statement.type === "ExportNamedDeclaration") {
|
|
12
|
+
for (const specifier of childNodes(statement, "specifiers")) {
|
|
13
|
+
const exported = childNode(specifier, "exported");
|
|
14
|
+
const name2 = identifierName(exported);
|
|
15
|
+
if (name2) usedNames.add(name2);
|
|
16
|
+
}
|
|
17
|
+
const declaration2 = childNode(statement, "declaration");
|
|
18
|
+
if (declaration2?.type === "VariableDeclaration") {
|
|
19
|
+
for (const declarator of childNodes(declaration2, "declarations")) {
|
|
20
|
+
const name2 = declarationName(declarator);
|
|
21
|
+
if (name2) usedNames.add(name2);
|
|
22
|
+
}
|
|
23
|
+
} else {
|
|
24
|
+
const name2 = declarationName(declaration2);
|
|
25
|
+
if (name2) usedNames.add(name2);
|
|
26
|
+
}
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (statement.type !== "VariableDeclaration") continue;
|
|
30
|
+
const declarations = childNodes(statement, "declarations");
|
|
31
|
+
if (declarations.length !== 1) continue;
|
|
32
|
+
const declaration = declarations[0];
|
|
33
|
+
const name = declarationName(declaration);
|
|
34
|
+
if (!name || !childNode(declaration, "init") || usedNames.has(name)) continue;
|
|
35
|
+
candidates.push(name);
|
|
36
|
+
}
|
|
37
|
+
const names = candidates.filter((name) => !usedNames.has(name));
|
|
38
|
+
return names.length ? `${source}
|
|
39
|
+
export { ${names.join(", ")} }
|
|
40
|
+
` : source;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { addLocalExports };
|
|
44
|
+
//# sourceMappingURL=addLocalExports.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addLocalExports.js","names":[],"sources":["esm/extractor/addLocalExports.js"],"sourcesContent":["import {\n childNode,\n childNodes,\n identifierName,\n parseModuleAst\n} from \"@tamagui/compiler-core\";\nfunction declarationName(node) {\n return identifierName(node ? childNode(node, \"id\") : null);\n}\nfunction addLocalExports(source, id) {\n const program = parseModuleAst(source, id);\n const usedNames = /* @__PURE__ */ new Set();\n const candidates = [];\n for (const statement of childNodes(program, \"body\")) {\n if (statement.type === \"ExportNamedDeclaration\") {\n for (const specifier of childNodes(statement, \"specifiers\")) {\n const exported = childNode(specifier, \"exported\");\n const name2 = identifierName(exported);\n if (name2) usedNames.add(name2);\n }\n const declaration2 = childNode(statement, \"declaration\");\n if (declaration2?.type === \"VariableDeclaration\") {\n for (const declarator of childNodes(declaration2, \"declarations\")) {\n const name2 = declarationName(declarator);\n if (name2) usedNames.add(name2);\n }\n } else {\n const name2 = declarationName(declaration2);\n if (name2) usedNames.add(name2);\n }\n continue;\n }\n if (statement.type !== \"VariableDeclaration\") continue;\n const declarations = childNodes(statement, \"declarations\");\n if (declarations.length !== 1) continue;\n const declaration = declarations[0];\n const name = declarationName(declaration);\n if (!name || !childNode(declaration, \"init\") || usedNames.has(name)) continue;\n candidates.push(name);\n }\n const names = candidates.filter((name) => !usedNames.has(name));\n return names.length ? `${source}\nexport { ${names.join(\", \")} }\n` : source;\n}\nexport {\n addLocalExports\n};\n//# sourceMappingURL=addLocalExports.js.map\n"],"mappings":";;;AAMA,SAAS,gBAAgB,MAAM;CAC7B,OAAO,eAAe,OAAO,UAAU,MAAM,IAAI,IAAI,IAAI;AAC3D;AACA,SAAS,gBAAgB,QAAQ,IAAI;CACnC,MAAM,UAAU,eAAe,QAAQ,EAAE;CACzC,MAAM,4BAA4B,IAAI,IAAI;CAC1C,MAAM,aAAa,CAAC;CACpB,KAAK,MAAM,aAAa,WAAW,SAAS,MAAM,GAAG;EACnD,IAAI,UAAU,SAAS,0BAA0B;GAC/C,KAAK,MAAM,aAAa,WAAW,WAAW,YAAY,GAAG;IAC3D,MAAM,WAAW,UAAU,WAAW,UAAU;IAChD,MAAM,QAAQ,eAAe,QAAQ;IACrC,IAAI,OAAO,UAAU,IAAI,KAAK;GAChC;GACA,MAAM,eAAe,UAAU,WAAW,aAAa;GACvD,IAAI,cAAc,SAAS,uBAAuB;IAChD,KAAK,MAAM,cAAc,WAAW,cAAc,cAAc,GAAG;KACjE,MAAM,QAAQ,gBAAgB,UAAU;KACxC,IAAI,OAAO,UAAU,IAAI,KAAK;IAChC;GACF,OAAO;IACL,MAAM,QAAQ,gBAAgB,YAAY;IAC1C,IAAI,OAAO,UAAU,IAAI,KAAK;GAChC;GACA;EACF;EACA,IAAI,UAAU,SAAS,uBAAuB;EAC9C,MAAM,eAAe,WAAW,WAAW,cAAc;EACzD,IAAI,aAAa,WAAW,GAAG;EAC/B,MAAM,cAAc,aAAa;EACjC,MAAM,OAAO,gBAAgB,WAAW;EACxC,IAAI,CAAC,QAAQ,CAAC,UAAU,aAAa,MAAM,KAAK,UAAU,IAAI,IAAI,GAAG;EACrE,WAAW,KAAK,IAAI;CACtB;CACA,MAAM,QAAQ,WAAW,QAAQ,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC;CAC9D,OAAO,MAAM,SAAS,GAAG,OAAO;WACvB,MAAM,KAAK,IAAI,EAAE;IACxB;AACJ"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import esbuild from "esbuild";
|
|
5
|
+
import FS from "fs-extra";
|
|
6
|
+
import { staticEvaluationIgnorePlugin } from "../staticEvaluationIgnoredModules.mjs";
|
|
7
|
+
import { detectModuleFormat } from "./detectModuleFormat.mjs";
|
|
8
|
+
import { esbuildAliasPlugin } from "./esbuildAliasPlugin.mjs";
|
|
9
|
+
import { resolveWebOrNativeSpecificEntry } from "./loadTamagui.mjs";
|
|
10
|
+
import { TsconfigPathsPlugin } from "./esbuildTsconfigPaths.mjs";
|
|
11
|
+
|
|
12
|
+
const nodeRequire = createRequire(typeof __filename === "string" ? __filename : import.meta.url);
|
|
13
|
+
const esbuildLoaderConfig = {
|
|
14
|
+
".js": "jsx",
|
|
15
|
+
".png": "dataurl",
|
|
16
|
+
".jpg": "dataurl",
|
|
17
|
+
".jpeg": "dataurl",
|
|
18
|
+
".svg": "dataurl",
|
|
19
|
+
".gif": "dataurl",
|
|
20
|
+
".webp": "dataurl",
|
|
21
|
+
".woff2": "dataurl",
|
|
22
|
+
".woff": "dataurl",
|
|
23
|
+
".eot": "dataurl",
|
|
24
|
+
".otf": "dataurl",
|
|
25
|
+
".ttf": "dataurl",
|
|
26
|
+
".mp4": "file",
|
|
27
|
+
".mpeg4": "file",
|
|
28
|
+
".mov": "file",
|
|
29
|
+
".avif": "file",
|
|
30
|
+
".wmv": "file",
|
|
31
|
+
".webm": "file",
|
|
32
|
+
".wav": "file",
|
|
33
|
+
".aac": "file",
|
|
34
|
+
".ogg": "file",
|
|
35
|
+
".flac": "file",
|
|
36
|
+
".node": "empty"
|
|
37
|
+
};
|
|
38
|
+
const dataExtensions = Object.keys(esbuildLoaderConfig).filter((k) => esbuildLoaderConfig[k] === "file" || esbuildLoaderConfig[k] === "dataurl").map((k) => k.slice(1));
|
|
39
|
+
const esbuildIgnoreFilesRegex = new RegExp(`.(${dataExtensions.join("|")})$`, "i");
|
|
40
|
+
function getESBuildConfig({ entryPoints, resolvePlatformSpecificEntries, dangerouslyIgnoreStaticEvaluationModules = [], define: callerDefine, ...options }, platform, aliases) {
|
|
41
|
+
if (process.env.DEBUG?.startsWith("tamagui")) {
|
|
42
|
+
console.info(`Building`, entryPoints);
|
|
43
|
+
}
|
|
44
|
+
const resolvedEntryPoints = !resolvePlatformSpecificEntries ? entryPoints : entryPoints.map((entry) => resolveWebOrNativeSpecificEntry(entry, platform));
|
|
45
|
+
const detectedFormat = options.format || detectEntryFormat(resolvedEntryPoints[0]);
|
|
46
|
+
const platformDefines = platform === "web" ? {
|
|
47
|
+
"process.env.TAMAGUI_TARGET": "\"web\"",
|
|
48
|
+
"process.env.EXPO_OS": "\"web\""
|
|
49
|
+
} : { "process.env.TAMAGUI_TARGET": "\"native\"" };
|
|
50
|
+
const res = {
|
|
51
|
+
bundle: true,
|
|
52
|
+
entryPoints: resolvedEntryPoints,
|
|
53
|
+
format: detectedFormat,
|
|
54
|
+
define: {
|
|
55
|
+
...platformDefines,
|
|
56
|
+
...callerDefine
|
|
57
|
+
},
|
|
58
|
+
...platform === "native" ? {
|
|
59
|
+
conditions: ["react-native"],
|
|
60
|
+
mainFields: [
|
|
61
|
+
"react-native",
|
|
62
|
+
"module",
|
|
63
|
+
"main"
|
|
64
|
+
]
|
|
65
|
+
} : {},
|
|
66
|
+
...detectedFormat === "esm" ? {
|
|
67
|
+
...platform === "web" ? { mainFields: ["module", "main"] } : {},
|
|
68
|
+
banner: { js: "import { createRequire as __cr } from \"module\"; const require = __cr(import.meta.url);" }
|
|
69
|
+
} : {},
|
|
70
|
+
target: "node24",
|
|
71
|
+
jsx: "transform",
|
|
72
|
+
jsxFactory: "react",
|
|
73
|
+
allowOverwrite: true,
|
|
74
|
+
keepNames: true,
|
|
75
|
+
resolveExtensions: [
|
|
76
|
+
...platform === "web" ? [
|
|
77
|
+
".web.tsx",
|
|
78
|
+
".web.ts",
|
|
79
|
+
".web.jsx",
|
|
80
|
+
".web.js"
|
|
81
|
+
] : [
|
|
82
|
+
".native.tsx",
|
|
83
|
+
".native.ts",
|
|
84
|
+
".native.jsx",
|
|
85
|
+
".native.js"
|
|
86
|
+
],
|
|
87
|
+
".tsx",
|
|
88
|
+
".ts",
|
|
89
|
+
".jsx",
|
|
90
|
+
".js"
|
|
91
|
+
],
|
|
92
|
+
platform: "node",
|
|
93
|
+
tsconfigRaw: { compilerOptions: { jsx: "react-jsx" } },
|
|
94
|
+
loader: esbuildLoaderConfig,
|
|
95
|
+
logLevel: "warning",
|
|
96
|
+
plugins: [
|
|
97
|
+
TsconfigPathsPlugin(),
|
|
98
|
+
staticEvaluationIgnorePlugin(dangerouslyIgnoreStaticEvaluationModules),
|
|
99
|
+
{
|
|
100
|
+
name: "handle-esm-features",
|
|
101
|
+
setup(build) {
|
|
102
|
+
const isCjs = build.initialOptions.format === "cjs" || !build.initialOptions.format;
|
|
103
|
+
build.onLoad({ filter: /\.(ts|tsx|js|jsx|mjs)$/ }, (args) => {
|
|
104
|
+
if (!isCjs) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
if (args.path.includes("node_modules") && !args.path.includes("@tamagui")) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
let contents = readFileSync(args.path, "utf8");
|
|
111
|
+
let modified = false;
|
|
112
|
+
if (contents.includes("import.meta.env")) {
|
|
113
|
+
contents = contents.replace(/import\.meta\.env/g, "process.env");
|
|
114
|
+
modified = true;
|
|
115
|
+
}
|
|
116
|
+
if (contents.includes("import.meta.url")) {
|
|
117
|
+
contents = contents.replace(/import\.meta\.url/g, "\"\"");
|
|
118
|
+
modified = true;
|
|
119
|
+
}
|
|
120
|
+
if (contents.includes("import.meta.main")) {
|
|
121
|
+
contents = contents.replace(/import\.meta\.main/g, "false");
|
|
122
|
+
modified = true;
|
|
123
|
+
}
|
|
124
|
+
if (modified) {
|
|
125
|
+
return {
|
|
126
|
+
contents,
|
|
127
|
+
loader: args.path.endsWith(".tsx") ? "tsx" : args.path.endsWith(".ts") ? "ts" : args.path.endsWith(".jsx") ? "jsx" : "js"
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return null;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: "external",
|
|
136
|
+
setup(build) {
|
|
137
|
+
build.onResolve({ filter: /^@tamagui\/(core|web)$/ }, (args) => {
|
|
138
|
+
if (args.kind === "entry-point") {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
path: platform === "native" ? "@tamagui/core/native" : args.path,
|
|
143
|
+
external: true
|
|
144
|
+
};
|
|
145
|
+
});
|
|
146
|
+
build.onResolve({ filter: /react-native\/package.json$/ }, () => {
|
|
147
|
+
return {
|
|
148
|
+
path: "react-native/package.json",
|
|
149
|
+
external: true
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
build.onResolve({ filter: /^(react-native|react-native\/.*)$/ }, (args) => {
|
|
153
|
+
return {
|
|
154
|
+
path: args.path.replace(/^react-native/, "@tamagui/react-native-web-lite"),
|
|
155
|
+
external: true
|
|
156
|
+
};
|
|
157
|
+
});
|
|
158
|
+
build.onResolve({ filter: /^(framer-motion|motion)/ }, (args) => {
|
|
159
|
+
return {
|
|
160
|
+
path: args.path,
|
|
161
|
+
external: true
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
esbuildAliasPlugin({ ...aliases })
|
|
167
|
+
],
|
|
168
|
+
...options
|
|
169
|
+
};
|
|
170
|
+
return res;
|
|
171
|
+
}
|
|
172
|
+
function detectEntryFormat(entryPoint) {
|
|
173
|
+
if (entryPoint.startsWith("/") || entryPoint.startsWith(".")) {
|
|
174
|
+
return detectModuleFormat(entryPoint);
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
const pkgJsonPath = nodeRequire.resolve(entryPoint + "/package.json");
|
|
178
|
+
const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
|
|
179
|
+
return pkg.type === "module" ? "esm" : "cjs";
|
|
180
|
+
} catch {
|
|
181
|
+
return "cjs";
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async function esbundleTamaguiConfig(props, platform, aliases) {
|
|
185
|
+
const config = getESBuildConfig(props, platform, aliases);
|
|
186
|
+
const tmpFile = `${props.outfile}.tmp.${process.pid}-${randomBytes(6).toString("hex")}`;
|
|
187
|
+
const result = await esbuild.build({
|
|
188
|
+
...config,
|
|
189
|
+
outfile: tmpFile
|
|
190
|
+
}).catch(async (err) => {
|
|
191
|
+
await FS.remove(tmpFile).catch(() => {});
|
|
192
|
+
throw err;
|
|
193
|
+
});
|
|
194
|
+
await FS.rename(tmpFile, props.outfile);
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export { esbuildIgnoreFilesRegex, esbuildLoaderConfig, esbundleTamaguiConfig };
|
|
199
|
+
//# sourceMappingURL=bundle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","names":[],"sources":["esm/extractor/bundle.js"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport esbuild from \"esbuild\";\nimport FS from \"fs-extra\";\nimport { staticEvaluationIgnorePlugin } from \"../staticEvaluationIgnoredModules\";\nimport { detectModuleFormat } from \"./detectModuleFormat\";\nimport { esbuildAliasPlugin } from \"./esbuildAliasPlugin\";\nimport { resolveWebOrNativeSpecificEntry } from \"./loadTamagui\";\nimport { TsconfigPathsPlugin } from \"./esbuildTsconfigPaths\";\nconst nodeRequire = createRequire(\n typeof __filename === \"string\" ? __filename : import.meta.url\n);\nconst esbuildLoaderConfig = {\n \".js\": \"jsx\",\n \".png\": \"dataurl\",\n \".jpg\": \"dataurl\",\n \".jpeg\": \"dataurl\",\n \".svg\": \"dataurl\",\n \".gif\": \"dataurl\",\n \".webp\": \"dataurl\",\n \".woff2\": \"dataurl\",\n \".woff\": \"dataurl\",\n \".eot\": \"dataurl\",\n \".otf\": \"dataurl\",\n \".ttf\": \"dataurl\",\n \".mp4\": \"file\",\n \".mpeg4\": \"file\",\n \".mov\": \"file\",\n \".avif\": \"file\",\n \".wmv\": \"file\",\n \".webm\": \"file\",\n \".wav\": \"file\",\n \".aac\": \"file\",\n \".ogg\": \"file\",\n \".flac\": \"file\",\n \".node\": \"empty\"\n};\nconst dataExtensions = Object.keys(esbuildLoaderConfig).filter(\n (k) => esbuildLoaderConfig[k] === \"file\" || esbuildLoaderConfig[k] === \"dataurl\"\n).map((k) => k.slice(1));\nconst esbuildIgnoreFilesRegex = new RegExp(`.(${dataExtensions.join(\"|\")})$`, \"i\");\nfunction getESBuildConfig({\n entryPoints,\n resolvePlatformSpecificEntries,\n dangerouslyIgnoreStaticEvaluationModules = [],\n define: callerDefine,\n ...options\n}, platform, aliases) {\n if (process.env.DEBUG?.startsWith(\"tamagui\")) {\n console.info(`Building`, entryPoints);\n }\n const resolvedEntryPoints = !resolvePlatformSpecificEntries ? entryPoints : entryPoints.map((entry) => resolveWebOrNativeSpecificEntry(entry, platform));\n const detectedFormat = options.format || detectEntryFormat(resolvedEntryPoints[0]);\n const platformDefines = platform === \"web\" ? {\n \"process.env.TAMAGUI_TARGET\": '\"web\"',\n \"process.env.EXPO_OS\": '\"web\"'\n } : {\n \"process.env.TAMAGUI_TARGET\": '\"native\"'\n // EXPO_OS doesn't have a useful \"native\" value (it's ios/android),\n // so leave it alone here and let the consumer set it if needed.\n };\n const res = {\n bundle: true,\n entryPoints: resolvedEntryPoints,\n format: detectedFormat,\n define: {\n ...platformDefines,\n ...callerDefine\n },\n ...platform === \"native\" ? {\n conditions: [\"react-native\"],\n mainFields: [\"react-native\", \"module\", \"main\"]\n } : {},\n // for ESM: prefer \"module\" field for resolution, add require() shim for bundled CJS deps\n ...detectedFormat === \"esm\" ? {\n ...platform === \"web\" ? { mainFields: [\"module\", \"main\"] } : {},\n banner: {\n js: 'import { createRequire as __cr } from \"module\"; const require = __cr(import.meta.url);'\n }\n } : {},\n target: \"node24\",\n jsx: \"transform\",\n jsxFactory: \"react\",\n allowOverwrite: true,\n keepNames: true,\n resolveExtensions: [\n ...platform === \"web\" ? [\".web.tsx\", \".web.ts\", \".web.jsx\", \".web.js\"] : [\".native.tsx\", \".native.ts\", \".native.jsx\", \".native.js\"],\n \".tsx\",\n \".ts\",\n \".jsx\",\n \".js\"\n ],\n platform: \"node\",\n tsconfigRaw: {\n compilerOptions: {\n jsx: \"react-jsx\"\n }\n },\n loader: esbuildLoaderConfig,\n logLevel: \"warning\",\n plugins: [\n TsconfigPathsPlugin(),\n staticEvaluationIgnorePlugin(dangerouslyIgnoreStaticEvaluationModules),\n // handle ESM-only features that can't be used with CJS output\n {\n name: \"handle-esm-features\",\n setup(build) {\n const isCjs = build.initialOptions.format === \"cjs\" || !build.initialOptions.format;\n build.onLoad({ filter: /\\.(ts|tsx|js|jsx|mjs)$/ }, (args) => {\n if (!isCjs) {\n return null;\n }\n if (args.path.includes(\"node_modules\") && !args.path.includes(\"@tamagui\")) {\n return null;\n }\n let contents = readFileSync(args.path, \"utf8\");\n let modified = false;\n if (contents.includes(\"import.meta.env\")) {\n contents = contents.replace(/import\\.meta\\.env/g, \"process.env\");\n modified = true;\n }\n if (contents.includes(\"import.meta.url\")) {\n contents = contents.replace(/import\\.meta\\.url/g, '\"\"');\n modified = true;\n }\n if (contents.includes(\"import.meta.main\")) {\n contents = contents.replace(/import\\.meta\\.main/g, \"false\");\n modified = true;\n }\n if (modified) {\n return {\n contents,\n loader: args.path.endsWith(\".tsx\") ? \"tsx\" : args.path.endsWith(\".ts\") ? \"ts\" : args.path.endsWith(\".jsx\") ? \"jsx\" : \"js\"\n };\n }\n return null;\n });\n }\n },\n {\n name: \"external\",\n setup(build) {\n build.onResolve({ filter: /^@tamagui\\/(core|web)$/ }, (args) => {\n if (args.kind === \"entry-point\") {\n return null;\n }\n return {\n path: platform === \"native\" ? \"@tamagui/core/native\" : args.path,\n external: true\n };\n });\n build.onResolve({ filter: /react-native\\/package.json$/ }, () => {\n return {\n path: \"react-native/package.json\",\n external: true\n };\n });\n build.onResolve({ filter: /^(react-native|react-native\\/.*)$/ }, (args) => {\n return {\n path: args.path.replace(/^react-native/, \"@tamagui/react-native-web-lite\"),\n external: true\n };\n });\n build.onResolve({ filter: /^(framer-motion|motion)/ }, (args) => {\n return {\n path: args.path,\n external: true\n };\n });\n }\n },\n esbuildAliasPlugin({\n ...aliases\n })\n ],\n ...options\n };\n return res;\n}\nfunction detectEntryFormat(entryPoint) {\n if (entryPoint.startsWith(\"/\") || entryPoint.startsWith(\".\")) {\n return detectModuleFormat(entryPoint);\n }\n try {\n const pkgJsonPath = nodeRequire.resolve(entryPoint + \"/package.json\");\n const pkg = JSON.parse(readFileSync(pkgJsonPath, \"utf-8\"));\n return pkg.type === \"module\" ? \"esm\" : \"cjs\";\n } catch {\n return \"cjs\";\n }\n}\nasync function esbundleTamaguiConfig(props, platform, aliases) {\n const config = getESBuildConfig(props, platform, aliases);\n const tmpFile = `${props.outfile}.tmp.${process.pid}-${randomBytes(6).toString(\"hex\")}`;\n const result = await esbuild.build({\n ...config,\n outfile: tmpFile\n }).catch(async (err) => {\n await FS.remove(tmpFile).catch(() => {\n });\n throw err;\n });\n await FS.rename(tmpFile, props.outfile);\n return result;\n}\nexport {\n esbuildIgnoreFilesRegex,\n esbuildLoaderConfig,\n esbundleTamaguiConfig\n};\n//# sourceMappingURL=bundle.js.map\n"],"mappings":"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"}
|