@tamagui/static 3.0.0-beta.661.1 → 3.0.0-beta.719.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 +0 -1
- package/dist/cjs/checkDeps.cjs +0 -1
- package/dist/cjs/compiler.cjs +0 -1
- package/dist/cjs/compilerHost.cjs +5 -6
- package/dist/cjs/constants.cjs +0 -1
- package/dist/cjs/domStructuralPass.cjs +0 -1
- package/dist/cjs/exports.cjs +0 -1
- package/dist/cjs/extractor/addLocalExports.cjs +0 -1
- package/dist/cjs/extractor/bundle.cjs +0 -1
- package/dist/cjs/extractor/bundleConfig.cjs +0 -1
- package/dist/cjs/extractor/concatClassName.cjs +0 -1
- package/dist/cjs/extractor/detectModuleFormat.cjs +0 -1
- package/dist/cjs/extractor/esbuildAliasPlugin.cjs +0 -1
- package/dist/cjs/extractor/esbuildTsconfigPaths.cjs +0 -1
- package/dist/cjs/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +0 -1
- package/dist/cjs/extractor/loadTamagui.cjs +0 -1
- package/dist/cjs/extractor/regenerateConfig.cjs +2 -3
- package/dist/cjs/extractor/watchTamaguiConfig.cjs +0 -1
- package/dist/cjs/getPragmaOptions.cjs +0 -1
- package/dist/cjs/helpers/memoize.cjs +0 -1
- package/dist/cjs/helpers/requireTamaguiCore.cjs +0 -1
- package/dist/cjs/index.cjs +0 -1
- package/dist/cjs/registerRequire.cjs +0 -1
- package/dist/cjs/server.cjs +0 -1
- package/dist/cjs/staticEvaluationIgnoredModules.cjs +0 -1
- package/dist/cjs/types.cjs +0 -1
- package/dist/cjs/zero/artifact.cjs +0 -1
- package/dist/cjs/zero/graph.cjs +0 -1
- package/dist/cjs/zero/identity.cjs +0 -1
- package/dist/cjs/zero/index.cjs +8 -1
- package/dist/cjs/zero/islands.cjs +5 -3
- package/dist/cjs/zero/options.cjs +0 -1
- package/dist/cjs/zero/ownership.cjs +0 -1
- package/dist/cjs/zero/theme.cjs +35 -14
- package/dist/cjs/zero/transform.cjs +7 -3
- package/dist/esm/check-dep-versions.mjs.map +1 -1
- package/dist/esm/checkDeps.mjs.map +1 -1
- package/dist/esm/compiler.mjs.map +1 -1
- package/dist/esm/compilerHost.mjs +2 -3
- package/dist/esm/compilerHost.mjs.map +1 -1
- package/dist/esm/domStructuralPass.mjs.map +1 -1
- package/dist/esm/extractor/bundle.mjs.map +1 -1
- package/dist/esm/extractor/bundleConfig.mjs.map +1 -1
- package/dist/esm/extractor/esbuildAliasPlugin.mjs.map +1 -1
- package/dist/esm/extractor/esbuildTsconfigPaths.mjs.map +1 -1
- package/dist/esm/extractor/getTamaguiConfigPathFromOptionsConfig.mjs.map +1 -1
- package/dist/esm/extractor/loadTamagui.mjs.map +1 -1
- package/dist/esm/extractor/regenerateConfig.mjs +1 -1
- package/dist/esm/extractor/regenerateConfig.mjs.map +1 -1
- package/dist/esm/extractor/watchTamaguiConfig.mjs.map +1 -1
- package/dist/esm/getPragmaOptions.mjs.map +1 -1
- package/dist/esm/helpers/requireTamaguiCore.mjs.map +1 -1
- package/dist/esm/registerRequire.mjs.map +1 -1
- package/dist/esm/server.mjs.map +1 -1
- package/dist/esm/zero/artifact.mjs.map +1 -1
- package/dist/esm/zero/graph.mjs.map +1 -1
- package/dist/esm/zero/identity.mjs.map +1 -1
- package/dist/esm/zero/index.mjs +4 -0
- package/dist/esm/zero/islands.mjs +5 -2
- package/dist/esm/zero/islands.mjs.map +1 -1
- package/dist/esm/zero/options.mjs.map +1 -1
- package/dist/esm/zero/ownership.mjs.map +1 -1
- package/dist/esm/zero/theme.mjs +35 -13
- package/dist/esm/zero/theme.mjs.map +1 -1
- package/dist/esm/zero/transform.mjs +7 -2
- package/dist/esm/zero/transform.mjs.map +1 -1
- package/package.json +19 -19
- package/src/compilerHost.ts +1 -1
- package/src/extractor/regenerateConfig.ts +1 -1
- package/src/zero/index.ts +1 -0
- package/src/zero/islands.ts +5 -2
- package/src/zero/theme.ts +49 -17
- package/src/zero/transform.ts +13 -4
- package/types/zero/index.d.ts +1 -0
- package/types/zero/index.d.ts.map +1 -1
- package/types/zero/islands.d.ts.map +1 -1
- package/types/zero/theme.d.ts +2 -1
- package/types/zero/theme.d.ts.map +1 -1
- package/types/zero/transform.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerRequire.js","names":[],"sources":["esm/registerRequire.js"],"sourcesContent":["import { dirname } from \"node:path\";\nimport { buildSync } from \"esbuild\";\nimport { register } from \"esbuild-register/dist/node\";\nimport { createRequire } from \"node:module\";\nimport { esbuildIgnoreFilesRegex } from \"./extractor/bundle\";\nimport { requireTamaguiCore } from \"./helpers/requireTamaguiCore\";\nimport {\n getStaticEvaluationModuleReplacement,\n isIgnoredStaticEvaluationModule\n} from \"./staticEvaluationIgnoredModules\";\nconst nameToPaths = {};\nconst nodeRequire = createRequire(\n typeof __filename === \"string\" ? __filename : import.meta.url\n);\nconst getNameToPaths = () => nameToPaths;\nconst Module = nodeRequire(\"node:module\");\nlet isRegistered = false;\nlet og;\nclass StaticEvaluationError extends Error {\n constructor(moduleName, importer, failedModule, reason, options) {\n super(\n `[tamagui] Failed to evaluate module \"${failedModule}\" imported from \"${importer}\" while loading the Tamagui config and configured components.\nReason: ${reason}\nFix the module so it can run in Node during the build. If it is runtime-only and none of its exports create your Tamagui config or components, add \"${moduleName}\" to dangerouslyIgnoreStaticEvaluationModules in tamagui.build.ts.`,\n options\n );\n this.moduleName = moduleName;\n this.importer = importer;\n this.failedModule = failedModule;\n this.reason = reason;\n }\n moduleName;\n importer;\n failedModule;\n reason;\n code = \"TAMAGUI_STATIC_EVALUATION_ERROR\";\n}\nconst compiled = {};\nfunction setRequireResult(name, result) {\n compiled[name] = result;\n}\nfunction getStaticExtractionStub(path) {\n switch (path) {\n case \"expo-constants\":\n return {\n __esModule: true,\n default: {\n executionEnvironment: null\n },\n ExecutionEnvironment: {\n Bare: \"bare\",\n Standalone: \"standalone\",\n StoreClient: \"storeClient\"\n }\n };\n case \"expo-updates\":\n return {\n __esModule: true,\n default: {\n isEnabled: false,\n isUsingEmbeddedAssets: true\n },\n checkForUpdateAsync: async () => ({ isAvailable: false }),\n fetchUpdateAsync: async () => ({ isNew: false }),\n reloadAsync: async () => {\n }\n };\n case \"react-native-reanimated\": {\n const identity = (value) => value;\n const sharedValue = (value) => ({\n value,\n get: () => value,\n set: (next) => {\n value = typeof next === \"function\" ? next(value) : next;\n }\n });\n const Animated = {\n createAnimatedComponent: identity,\n View: () => null,\n Text: () => null\n };\n return {\n __esModule: true,\n default: Animated,\n cancelAnimation: () => {\n },\n runOnJS: identity,\n runOnUI: identity,\n useAnimatedReaction: () => {\n },\n useAnimatedStyle: (callback) => callback(),\n useDerivedValue: (callback) => sharedValue(callback()),\n useSharedValue: sharedValue,\n withDelay: (_delay, animation) => animation,\n withSpring: identity,\n withTiming: identity\n };\n }\n default:\n return null;\n }\n}\nfunction registerRequire(platform, { ignoredModules = [] } = {\n ignoredModules: []\n}) {\n if (isRegistered) {\n return {\n tamaguiRequire: nodeRequire,\n unregister: () => {\n }\n };\n }\n const originalResolveFilename = Module._resolveFilename;\n const { unregister } = register({\n hookIgnoreNodeModules: false,\n // don't transform @tamagui packages - they have pre-built dist files\n hookMatcher: (filename) => {\n if (filename.includes(\"@tamagui\") || /\\/tamagui\\/code\\/(core|ui|packages)\\//.test(filename)) {\n return false;\n }\n return true;\n }\n });\n const tsconfigPatchedResolve = Module._resolveFilename;\n Module._resolveFilename = function(request, ...args) {\n if (request.startsWith(\"@tamagui/\")) {\n return originalResolveFilename.call(this, request, ...args);\n }\n return tsconfigPatchedResolve.call(this, request, ...args);\n };\n if (!og) {\n og = Module.prototype.require;\n }\n isRegistered = true;\n Module.prototype.require = tamaguiRequire;\n function tamaguiRequire(path) {\n const staticExtractionStub = getStaticExtractionStub(path);\n if (staticExtractionStub) {\n return staticExtractionStub;\n }\n if (path === \"tamagui\" && platform === \"native\") {\n return og.apply(this, [\"tamagui/native\"]);\n }\n if (path === \"@tamagui/core\") {\n return requireTamaguiCore(platform, (path2) => {\n return og.apply(this, [path2]);\n });\n }\n const staticEvaluationReplacement = getStaticEvaluationModuleReplacement(path);\n if (staticEvaluationReplacement) {\n if (!(path in compiled)) {\n const replacementPath = nodeRequire.resolve(staticEvaluationReplacement);\n const output = buildSync({\n entryPoints: [replacementPath],\n bundle: true,\n format: \"cjs\",\n platform: \"node\",\n write: false\n }).outputFiles[0].text;\n const replacementModule = new Module(replacementPath, this);\n replacementModule.filename = replacementPath;\n replacementModule.paths = Module._nodeModulePaths(dirname(replacementPath));\n replacementModule._compile(output, replacementPath);\n compiled[path] = replacementModule.exports;\n }\n return compiled[path];\n }\n if (staticEvaluationReplacement === null || isIgnoredStaticEvaluationModule(path, ignoredModules)) {\n return {};\n }\n if (esbuildIgnoreFilesRegex.test(path)) {\n return {};\n }\n if (path in compiled) {\n return compiled[path];\n }\n if (path === \"react-native-svg\") {\n return og.apply(this, [\"@tamagui/react-native-svg\"]);\n }\n if (path === \"react-native/package.json\") {\n return og.apply(this, [\"react-native-web/package.json\"]);\n }\n if (path === \"@tamagui/react-native-web-lite\" || path === \"react-native\" || path.startsWith(\"react-native/\") || path === \"react-native-web\" || path.startsWith(\"react-native-web/\")) {\n try {\n return og.apply(\"react-native\");\n } catch {\n return og.apply(this, [\"@tamagui/react-native-web-lite\"]);\n }\n }\n try {\n const out = og.apply(this, arguments);\n return out;\n } catch (err) {\n if (err?.code === \"TAMAGUI_STATIC_EVALUATION_ERROR\") {\n throw err;\n }\n const importer = this?.filename || this?.id || \"<unknown module>\";\n const reason = err instanceof Error ? err.message : String(err);\n const failedModule = reason.match(/Cannot find native module ['\"]([^'\"]+)['\"]/)?.[1] || path;\n throw new StaticEvaluationError(path, importer, failedModule, reason, {\n cause: err\n });\n }\n }\n return {\n tamaguiRequire,\n unregister: () => {\n unregister();\n isRegistered = false;\n Module.prototype.require = og;\n }\n };\n}\nexport {\n getNameToPaths,\n registerRequire,\n setRequireResult\n};\n//# sourceMappingURL=registerRequire.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerRequire.js","names":[],"sources":["esm/registerRequire.js"],"sourcesContent":["import { dirname } from \"node:path\";\nimport { buildSync } from \"esbuild\";\nimport { register } from \"esbuild-register/dist/node\";\nimport { createRequire } from \"node:module\";\nimport { esbuildIgnoreFilesRegex } from \"./extractor/bundle\";\nimport { requireTamaguiCore } from \"./helpers/requireTamaguiCore\";\nimport {\n getStaticEvaluationModuleReplacement,\n isIgnoredStaticEvaluationModule\n} from \"./staticEvaluationIgnoredModules\";\nconst nameToPaths = {};\nconst nodeRequire = createRequire(\n typeof __filename === \"string\" ? __filename : import.meta.url\n);\nconst getNameToPaths = () => nameToPaths;\nconst Module = nodeRequire(\"node:module\");\nlet isRegistered = false;\nlet og;\nclass StaticEvaluationError extends Error {\n constructor(moduleName, importer, failedModule, reason, options) {\n super(\n `[tamagui] Failed to evaluate module \"${failedModule}\" imported from \"${importer}\" while loading the Tamagui config and configured components.\nReason: ${reason}\nFix the module so it can run in Node during the build. If it is runtime-only and none of its exports create your Tamagui config or components, add \"${moduleName}\" to dangerouslyIgnoreStaticEvaluationModules in tamagui.build.ts.`,\n options\n );\n this.moduleName = moduleName;\n this.importer = importer;\n this.failedModule = failedModule;\n this.reason = reason;\n }\n moduleName;\n importer;\n failedModule;\n reason;\n code = \"TAMAGUI_STATIC_EVALUATION_ERROR\";\n}\nconst compiled = {};\nfunction setRequireResult(name, result) {\n compiled[name] = result;\n}\nfunction getStaticExtractionStub(path) {\n switch (path) {\n case \"expo-constants\":\n return {\n __esModule: true,\n default: {\n executionEnvironment: null\n },\n ExecutionEnvironment: {\n Bare: \"bare\",\n Standalone: \"standalone\",\n StoreClient: \"storeClient\"\n }\n };\n case \"expo-updates\":\n return {\n __esModule: true,\n default: {\n isEnabled: false,\n isUsingEmbeddedAssets: true\n },\n checkForUpdateAsync: async () => ({ isAvailable: false }),\n fetchUpdateAsync: async () => ({ isNew: false }),\n reloadAsync: async () => {\n }\n };\n case \"react-native-reanimated\": {\n const identity = (value) => value;\n const sharedValue = (value) => ({\n value,\n get: () => value,\n set: (next) => {\n value = typeof next === \"function\" ? next(value) : next;\n }\n });\n const Animated = {\n createAnimatedComponent: identity,\n View: () => null,\n Text: () => null\n };\n return {\n __esModule: true,\n default: Animated,\n cancelAnimation: () => {\n },\n runOnJS: identity,\n runOnUI: identity,\n useAnimatedReaction: () => {\n },\n useAnimatedStyle: (callback) => callback(),\n useDerivedValue: (callback) => sharedValue(callback()),\n useSharedValue: sharedValue,\n withDelay: (_delay, animation) => animation,\n withSpring: identity,\n withTiming: identity\n };\n }\n default:\n return null;\n }\n}\nfunction registerRequire(platform, { ignoredModules = [] } = {\n ignoredModules: []\n}) {\n if (isRegistered) {\n return {\n tamaguiRequire: nodeRequire,\n unregister: () => {\n }\n };\n }\n const originalResolveFilename = Module._resolveFilename;\n const { unregister } = register({\n hookIgnoreNodeModules: false,\n // don't transform @tamagui packages - they have pre-built dist files\n hookMatcher: (filename) => {\n if (filename.includes(\"@tamagui\") || /\\/tamagui\\/code\\/(core|ui|packages)\\//.test(filename)) {\n return false;\n }\n return true;\n }\n });\n const tsconfigPatchedResolve = Module._resolveFilename;\n Module._resolveFilename = function(request, ...args) {\n if (request.startsWith(\"@tamagui/\")) {\n return originalResolveFilename.call(this, request, ...args);\n }\n return tsconfigPatchedResolve.call(this, request, ...args);\n };\n if (!og) {\n og = Module.prototype.require;\n }\n isRegistered = true;\n Module.prototype.require = tamaguiRequire;\n function tamaguiRequire(path) {\n const staticExtractionStub = getStaticExtractionStub(path);\n if (staticExtractionStub) {\n return staticExtractionStub;\n }\n if (path === \"tamagui\" && platform === \"native\") {\n return og.apply(this, [\"tamagui/native\"]);\n }\n if (path === \"@tamagui/core\") {\n return requireTamaguiCore(platform, (path2) => {\n return og.apply(this, [path2]);\n });\n }\n const staticEvaluationReplacement = getStaticEvaluationModuleReplacement(path);\n if (staticEvaluationReplacement) {\n if (!(path in compiled)) {\n const replacementPath = nodeRequire.resolve(staticEvaluationReplacement);\n const output = buildSync({\n entryPoints: [replacementPath],\n bundle: true,\n format: \"cjs\",\n platform: \"node\",\n write: false\n }).outputFiles[0].text;\n const replacementModule = new Module(replacementPath, this);\n replacementModule.filename = replacementPath;\n replacementModule.paths = Module._nodeModulePaths(dirname(replacementPath));\n replacementModule._compile(output, replacementPath);\n compiled[path] = replacementModule.exports;\n }\n return compiled[path];\n }\n if (staticEvaluationReplacement === null || isIgnoredStaticEvaluationModule(path, ignoredModules)) {\n return {};\n }\n if (esbuildIgnoreFilesRegex.test(path)) {\n return {};\n }\n if (path in compiled) {\n return compiled[path];\n }\n if (path === \"react-native-svg\") {\n return og.apply(this, [\"@tamagui/react-native-svg\"]);\n }\n if (path === \"react-native/package.json\") {\n return og.apply(this, [\"react-native-web/package.json\"]);\n }\n if (path === \"@tamagui/react-native-web-lite\" || path === \"react-native\" || path.startsWith(\"react-native/\") || path === \"react-native-web\" || path.startsWith(\"react-native-web/\")) {\n try {\n return og.apply(\"react-native\");\n } catch {\n return og.apply(this, [\"@tamagui/react-native-web-lite\"]);\n }\n }\n try {\n const out = og.apply(this, arguments);\n return out;\n } catch (err) {\n if (err?.code === \"TAMAGUI_STATIC_EVALUATION_ERROR\") {\n throw err;\n }\n const importer = this?.filename || this?.id || \"<unknown module>\";\n const reason = err instanceof Error ? err.message : String(err);\n const failedModule = reason.match(/Cannot find native module ['\"]([^'\"]+)['\"]/)?.[1] || path;\n throw new StaticEvaluationError(path, importer, failedModule, reason, {\n cause: err\n });\n }\n }\n return {\n tamaguiRequire,\n unregister: () => {\n unregister();\n isRegistered = false;\n Module.prototype.require = og;\n }\n };\n}\nexport {\n getNameToPaths,\n registerRequire,\n setRequireResult\n};\n//# sourceMappingURL=registerRequire.js.map\n"],"mappings":"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"}
|
package/dist/esm/server.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","names":[],"sources":["esm/server.js"],"sourcesContent":["import net from \"node:net\";\nasync function startServer(options) {\n const port = await getAvailablePort();\n const server = net.createServer();\n server.unref();\n await new Promise((resolve, reject) => {\n server.on(\"error\", reject);\n server.on(\"connection\", (conn) => {\n conn.on(\"data\", (data) => {\n console.info(\"got\", data.toString());\n });\n });\n server.listen({ port }, () => {\n const { port: port2 } = server.address();\n server.close(() => {\n resolve(port2);\n });\n });\n });\n}\nasync function getAvailablePort(port = 8089) {\n return checkAvailablePort(port).catch(() => getAvailablePort(port + 1));\n}\nfunction checkAvailablePort(port) {\n return new Promise((resolve, reject) => {\n const server = net.createServer();\n server.unref();\n server.on(\"error\", reject);\n server.listen({ port }, () => {\n const { port: port2 } = server.address();\n server.close(() => {\n resolve(port2);\n });\n });\n });\n}\nexport {\n startServer\n};\n//# sourceMappingURL=server.js.map\n"],"mappings":";;;AACA,eAAe,YAAY,SAAS;CAClC,MAAM,OAAO,MAAM,iBAAiB;CACpC,MAAM,SAAS,IAAI,aAAa;CAChC,OAAO,MAAM;CACb,MAAM,IAAI,SAAS,SAAS,WAAW;EACrC,OAAO,GAAG,SAAS,MAAM;EACzB,OAAO,GAAG,eAAe,SAAS;GAChC,KAAK,GAAG,SAAS,SAAS;IACxB,QAAQ,KAAK,OAAO,KAAK,SAAS,CAAC;GACrC,CAAC;EACH,CAAC;EACD,OAAO,OAAO,EAAE,KAAK,SAAS;GAC5B,MAAM,EAAE,MAAM,UAAU,OAAO,QAAQ;GACvC,OAAO,YAAY;IACjB,QAAQ,KAAK;GACf,CAAC;EACH,CAAC;CACH,CAAC;AACH;AACA,eAAe,iBAAiB,OAAO,MAAM;CAC3C,OAAO,mBAAmB,IAAI,
|
|
1
|
+
{"version":3,"file":"server.js","names":[],"sources":["esm/server.js"],"sourcesContent":["import net from \"node:net\";\nasync function startServer(options) {\n const port = await getAvailablePort();\n const server = net.createServer();\n server.unref();\n await new Promise((resolve, reject) => {\n server.on(\"error\", reject);\n server.on(\"connection\", (conn) => {\n conn.on(\"data\", (data) => {\n console.info(\"got\", data.toString());\n });\n });\n server.listen({ port }, () => {\n const { port: port2 } = server.address();\n server.close(() => {\n resolve(port2);\n });\n });\n });\n}\nasync function getAvailablePort(port = 8089) {\n return checkAvailablePort(port).catch(() => getAvailablePort(port + 1));\n}\nfunction checkAvailablePort(port) {\n return new Promise((resolve, reject) => {\n const server = net.createServer();\n server.unref();\n server.on(\"error\", reject);\n server.listen({ port }, () => {\n const { port: port2 } = server.address();\n server.close(() => {\n resolve(port2);\n });\n });\n });\n}\nexport {\n startServer\n};\n//# sourceMappingURL=server.js.map\n"],"mappings":";;;AACA,eAAe,YAAY,SAAS;CAClC,MAAM,OAAO,MAAM,iBAAiB;CACpC,MAAM,SAAS,IAAI,aAAa;CAChC,OAAO,MAAM;CACb,MAAM,IAAI,SAAS,SAAS,WAAW;EACrC,OAAO,GAAG,SAAS,MAAM;EACzB,OAAO,GAAG,eAAe,SAAS;GAChC,KAAK,GAAG,SAAS,SAAS;IACxB,QAAQ,KAAK,OAAO,KAAK,SAAS,CAAC;GACrC,CAAC;EACH,CAAC;EACD,OAAO,OAAO,EAAE,KAAK,SAAS;GAC5B,MAAM,EAAE,MAAM,UAAU,OAAO,QAAQ;GACvC,OAAO,YAAY;IACjB,QAAQ,KAAK;GACf,CAAC;EACH,CAAC;CACH,CAAC;AACH;AACA,eAAe,iBAAiB,OAAO,MAAM;CAC3C,OAAO,mBAAmB,IAAI,CAAC,CAAC,YAAY,iBAAiB,OAAO,CAAC,CAAC;AACxE;AACA,SAAS,mBAAmB,MAAM;CAChC,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,SAAS,IAAI,aAAa;EAChC,OAAO,MAAM;EACb,OAAO,GAAG,SAAS,MAAM;EACzB,OAAO,OAAO,EAAE,KAAK,SAAS;GAC5B,MAAM,EAAE,MAAM,UAAU,OAAO,QAAQ;GACvC,OAAO,YAAY;IACjB,QAAQ,KAAK;GACf,CAAC;EACH,CAAC;CACH,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact.js","names":["#cssPath","#expectedIslands","#config","#zero","#islands","#bridges"],"sources":["esm/zero/artifact.js"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nclass ZeroCSSArtifact {\n #config = null;\n #zero = /* @__PURE__ */ new Map();\n #islands = /* @__PURE__ */ new Map();\n #bridges = /* @__PURE__ */ new Map();\n #expectedIslands = [];\n #cssPath;\n constructor(cssPath) {\n this.#cssPath = cssPath;\n }\n get cssPath() {\n return this.#cssPath;\n }\n expectIslands(ids) {\n this.#expectedIslands = [...ids].sort();\n }\n setConfigCSS(css) {\n this.#config = css;\n }\n setZeroModuleCSS(moduleId, css) {\n if (css) this.#zero.set(moduleId, css);\n else this.#zero.delete(moduleId);\n }\n setIslandModuleCSS(islandId, moduleId, css) {\n let bucket = this.#islands.get(islandId);\n if (!bucket) {\n bucket = /* @__PURE__ */ new Map();\n this.#islands.set(islandId, bucket);\n }\n if (css) bucket.set(moduleId, css);\n else bucket.delete(moduleId);\n }\n /** This island's collected rules, in deterministic module order. */\n islandCSS(islandId) {\n const bucket = this.#islands.get(islandId);\n if (!bucket) return [];\n return [...bucket.keys()].sort().map((moduleId) => bucket.get(moduleId));\n }\n /** Marks an island as compiled even when it contributed no atomic rules. */\n markIslandComplete(islandId) {\n if (!this.#islands.has(islandId)) this.#islands.set(islandId, /* @__PURE__ */ new Map());\n }\n /** Collected zero-graph module CSS, for an integration that persists it. */\n zeroModuleEntries() {\n return [...this.#zero.entries()].sort(([left], [right]) => left < right ? -1 : 1);\n }\n bridgeEntries() {\n return [...this.#bridges.entries()].sort(([left], [right]) => left < right ? -1 : 1);\n }\n setBridgeRules(bridgeId, css) {\n if (css) this.#bridges.set(bridgeId, css);\n else this.#bridges.delete(bridgeId);\n }\n clearGraphs() {\n this.#zero.clear();\n this.#islands.clear();\n this.#bridges.clear();\n }\n /** The missing pieces that block deriving TAMAGUI_DID_OUTPUT_CSS. */\n missing() {\n const missing = [];\n if (this.#config === null) missing.push(\"config CSS\");\n for (const id of this.#expectedIslands) {\n if (!this.#islands.has(id)) missing.push(`island ${id}`);\n }\n return missing;\n }\n isComplete() {\n return this.missing().length === 0;\n }\n /** Deterministic order: config, zero atomic, island atomic, bridge classes. */\n css() {\n const parts = [];\n if (this.#config) parts.push(this.#config);\n for (const moduleId of [...this.#zero.keys()].sort()) {\n parts.push(this.#zero.get(moduleId));\n }\n for (const islandId of [...this.#islands.keys()].sort()) {\n const bucket = this.#islands.get(islandId);\n for (const moduleId of [...bucket.keys()].sort()) parts.push(bucket.get(moduleId));\n }\n for (const bridgeId of [...this.#bridges.keys()].sort()) {\n parts.push(this.#bridges.get(bridgeId));\n }\n return parts.join(\"\\n\");\n }\n hash() {\n return createHash(\"sha256\").update(this.css()).digest(\"hex\").slice(0, 16);\n }\n /**\n * Writes the artifact and returns whether the derived\n * `TAMAGUI_DID_OUTPUT_CSS='1'` claim is now legal.\n */\n write() {\n const missing = this.missing();\n const css = this.css();\n mkdirSync(path.dirname(this.#cssPath), { recursive: true });\n let existing = null;\n try {\n existing = readFileSync(this.#cssPath, \"utf8\");\n } catch {\n existing = null;\n }\n if (existing !== css) writeFileSync(this.#cssPath, css);\n return {\n path: this.#cssPath,\n hash: this.hash(),\n complete: missing.length === 0,\n missing\n };\n }\n}\nexport {\n ZeroCSSArtifact\n};\n//# sourceMappingURL=artifact.js.map\n"],"mappings":";;;;;AAGA,IAAM,kBAAN,MAAsB;CACpB,UAAU;CACV,wBAAwB,IAAI,IAAI;CAChC,2BAA2B,IAAI,IAAI;CACnC,2BAA2B,IAAI,IAAI;CACnC,mBAAmB,CAAC;CACpB;CACA,YAAY,SAAS;EACnB,KAAKA,WAAW;CAClB;CACA,IAAI,UAAU;EACZ,OAAO,KAAKA;CACd;CACA,cAAc,KAAK;EACjB,KAAKC,mBAAmB,CAAC,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"artifact.js","names":["#cssPath","#expectedIslands","#config","#zero","#islands","#bridges"],"sources":["esm/zero/artifact.js"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nclass ZeroCSSArtifact {\n #config = null;\n #zero = /* @__PURE__ */ new Map();\n #islands = /* @__PURE__ */ new Map();\n #bridges = /* @__PURE__ */ new Map();\n #expectedIslands = [];\n #cssPath;\n constructor(cssPath) {\n this.#cssPath = cssPath;\n }\n get cssPath() {\n return this.#cssPath;\n }\n expectIslands(ids) {\n this.#expectedIslands = [...ids].sort();\n }\n setConfigCSS(css) {\n this.#config = css;\n }\n setZeroModuleCSS(moduleId, css) {\n if (css) this.#zero.set(moduleId, css);\n else this.#zero.delete(moduleId);\n }\n setIslandModuleCSS(islandId, moduleId, css) {\n let bucket = this.#islands.get(islandId);\n if (!bucket) {\n bucket = /* @__PURE__ */ new Map();\n this.#islands.set(islandId, bucket);\n }\n if (css) bucket.set(moduleId, css);\n else bucket.delete(moduleId);\n }\n /** This island's collected rules, in deterministic module order. */\n islandCSS(islandId) {\n const bucket = this.#islands.get(islandId);\n if (!bucket) return [];\n return [...bucket.keys()].sort().map((moduleId) => bucket.get(moduleId));\n }\n /** Marks an island as compiled even when it contributed no atomic rules. */\n markIslandComplete(islandId) {\n if (!this.#islands.has(islandId)) this.#islands.set(islandId, /* @__PURE__ */ new Map());\n }\n /** Collected zero-graph module CSS, for an integration that persists it. */\n zeroModuleEntries() {\n return [...this.#zero.entries()].sort(([left], [right]) => left < right ? -1 : 1);\n }\n bridgeEntries() {\n return [...this.#bridges.entries()].sort(([left], [right]) => left < right ? -1 : 1);\n }\n setBridgeRules(bridgeId, css) {\n if (css) this.#bridges.set(bridgeId, css);\n else this.#bridges.delete(bridgeId);\n }\n clearGraphs() {\n this.#zero.clear();\n this.#islands.clear();\n this.#bridges.clear();\n }\n /** The missing pieces that block deriving TAMAGUI_DID_OUTPUT_CSS. */\n missing() {\n const missing = [];\n if (this.#config === null) missing.push(\"config CSS\");\n for (const id of this.#expectedIslands) {\n if (!this.#islands.has(id)) missing.push(`island ${id}`);\n }\n return missing;\n }\n isComplete() {\n return this.missing().length === 0;\n }\n /** Deterministic order: config, zero atomic, island atomic, bridge classes. */\n css() {\n const parts = [];\n if (this.#config) parts.push(this.#config);\n for (const moduleId of [...this.#zero.keys()].sort()) {\n parts.push(this.#zero.get(moduleId));\n }\n for (const islandId of [...this.#islands.keys()].sort()) {\n const bucket = this.#islands.get(islandId);\n for (const moduleId of [...bucket.keys()].sort()) parts.push(bucket.get(moduleId));\n }\n for (const bridgeId of [...this.#bridges.keys()].sort()) {\n parts.push(this.#bridges.get(bridgeId));\n }\n return parts.join(\"\\n\");\n }\n hash() {\n return createHash(\"sha256\").update(this.css()).digest(\"hex\").slice(0, 16);\n }\n /**\n * Writes the artifact and returns whether the derived\n * `TAMAGUI_DID_OUTPUT_CSS='1'` claim is now legal.\n */\n write() {\n const missing = this.missing();\n const css = this.css();\n mkdirSync(path.dirname(this.#cssPath), { recursive: true });\n let existing = null;\n try {\n existing = readFileSync(this.#cssPath, \"utf8\");\n } catch {\n existing = null;\n }\n if (existing !== css) writeFileSync(this.#cssPath, css);\n return {\n path: this.#cssPath,\n hash: this.hash(),\n complete: missing.length === 0,\n missing\n };\n }\n}\nexport {\n ZeroCSSArtifact\n};\n//# sourceMappingURL=artifact.js.map\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","names":[],"sources":["esm/zero/graph.js"],"sourcesContent":["import { ZERO_FAILURE_FOOTER } from \"@tamagui/compiler-core\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nconst ALLOWED_ZERO_MODULE = /animated-number/;\nconst owningPackageCache = /* @__PURE__ */ new Map();\nfunction owningPackageOf(id) {\n const clean = id.split(/[?#]/, 1)[0];\n if (!clean || clean.startsWith(\"\\0\") || !path.isAbsolute(clean)) return null;\n return owningPackageOfDir(path.dirname(clean));\n}\nfunction owningPackageOfDir(from) {\n if (!from || !path.isAbsolute(from)) return null;\n let dir = from;\n const visited = [];\n while (true) {\n const cached = owningPackageCache.get(dir);\n if (cached !== void 0) {\n for (const seen of visited) owningPackageCache.set(seen, cached);\n return cached;\n }\n visited.push(dir);\n const manifest = path.join(dir, \"package.json\");\n if (existsSync(manifest)) {\n let owner = null;\n try {\n owner = {\n name: JSON.parse(readFileSync(manifest, \"utf8\")).name ?? null,\n manifest\n };\n } catch {\n owner = { name: null, manifest };\n }\n for (const seen of visited) owningPackageCache.set(seen, owner);\n return owner;\n }\n const parent = path.dirname(dir);\n if (parent === dir) {\n for (const seen of visited) owningPackageCache.set(seen, null);\n return null;\n }\n dir = parent;\n }\n}\nfunction isTamaguiModuleId(id, ownManifest) {\n const owner = owningPackageOf(id);\n if (!owner?.name) return false;\n if (ownManifest && owner.manifest === ownManifest) return false;\n return owner.name === \"tamagui\" || owner.name.startsWith(\"@tamagui/\");\n}\nfunction isForbiddenZeroModuleId(id, ownManifest) {\n if (!isTamaguiModuleId(id, ownManifest)) return false;\n return !ALLOWED_ZERO_MODULE.test(id);\n}\nfunction shortestChain(target, entries, importersOf) {\n const entrySet = new Set(entries);\n const seen = /* @__PURE__ */ new Set([target]);\n const queue = [[target]];\n let longest = [target];\n while (queue.length) {\n const chain = queue.shift();\n const head = chain[0];\n if (entrySet.has(head)) return chain;\n if (chain.length > longest.length) longest = chain;\n for (const importer of importersOf.get(head) ?? []) {\n if (seen.has(importer)) continue;\n seen.add(importer);\n queue.push([importer, ...chain]);\n }\n }\n return longest;\n}\nfunction checkZeroGraph(input) {\n const importersOf = new Map(input.importerEdges);\n for (const module of input.modules) {\n if (!importersOf.has(module.id)) importersOf.set(module.id, module.importers ?? []);\n }\n const ownManifest = input.root ? owningPackageOfDir(input.root)?.manifest ?? null : null;\n const tamaguiModules = input.modules.map((module) => module.id).filter((id) => isTamaguiModuleId(id, ownManifest)).sort();\n const forbidden = tamaguiModules.filter((id) => isForbiddenZeroModuleId(id, ownManifest)).map((id) => ({\n id,\n chain: shortestChain(id, input.entries, importersOf),\n owner: owningPackageOf(id)?.name ?? \"\"\n }));\n return { tamaguiModules, forbidden };\n}\nfunction formatZeroGraphFailure(receipt) {\n const lines = [\n `[tamagui zero-runtime] ${receipt.integration} zero entry graph contains ${receipt.forbidden.length} forbidden Tamagui module(s)`,\n \"\"\n ];\n for (const entry of receipt.forbidden) {\n lines.push(entry.owner ? `${entry.id} (package ${entry.owner})` : entry.id);\n lines.push(\n entry.chain.length > 1 ? ` ${entry.chain.join(\"\\n -> \")}` : ` (this bundler exposed no importer edges for that module)`\n );\n }\n lines.push(\"\");\n lines.push(ZERO_FAILURE_FOOTER);\n return lines.join(\"\\n\");\n}\nfunction writeZeroGraphReceipt(outDir, name, receipt) {\n mkdirSync(outDir, { recursive: true });\n const file = path.join(outDir, `${name}.graph.json`);\n writeFileSync(file, `${JSON.stringify(receipt, null, 2)}\n`);\n return file;\n}\nfunction sortZeroViolations(sites) {\n return [...sites].sort(\n (left, right) => (left.file < right.file ? -1 : left.file > right.file ? 1 : 0) || left.line - right.line || left.column - right.column || left.rule - right.rule || (left.message < right.message ? -1 : left.message > right.message ? 1 : 0)\n );\n}\nfunction formatZeroViolations(sites) {\n const sorted = sortZeroViolations(sites);\n const lines = [\n `[tamagui zero-runtime] build failed with ${sorted.length} violations`,\n \"\"\n ];\n for (const site of sorted) {\n lines.push(`Rule ${site.rule} ${site.code}`);\n lines.push(\n `${site.file}:${site.line}:${site.column}${site.component ? ` ${site.component}` : \"\"}`\n );\n lines.push(` ${site.message}`);\n lines.push(\"\");\n }\n lines.push(ZERO_FAILURE_FOOTER);\n return lines.join(\"\\n\");\n}\nfunction writeZeroViolationReport(outDir, name, report) {\n mkdirSync(outDir, { recursive: true });\n const file = path.join(outDir, `${name}.violations.json`);\n writeFileSync(\n file,\n `${JSON.stringify(\n {\n integration: report.integration,\n mode: report.mode,\n count: report.violations.length,\n violations: sortZeroViolations(report.violations)\n },\n null,\n 2\n )}\n`\n );\n return file;\n}\nfunction erasedExportEscape(input) {\n for (const [moduleId, names] of input.erasedExports) {\n if (names.length === 0) continue;\n if (!input.importersOf.has(moduleId)) {\n return `[tamagui zero-runtime] ${input.integration} erased the exported definition(s) ${names.join(\n \", \"\n )} from ${moduleId}, and then could not find that module in its own graph, so nothing proved the erasure was safe.\n\n${ZERO_FAILURE_FOOTER}`;\n }\n const untransformed = (input.importersOf.get(moduleId) ?? []).filter(\n (importer) => !input.transformed.has(importer)\n );\n if (untransformed.length === 0) continue;\n return `[tamagui zero-runtime] ${input.integration} erased the exported definition(s) ${names.join(\n \", \"\n )} from ${moduleId}, but ${untransformed.length} importer(s) in this entry graph were never zero-transformed and may still reference them:\n ${untransformed.join(\n \"\\n \"\n )}\n\n${ZERO_FAILURE_FOOTER}`;\n }\n return null;\n}\nfunction offsetToLineColumn(source, offset) {\n let line = 1;\n let lineStart = 0;\n for (let index = 0; index < offset && index < source.length; index++) {\n if (source.charCodeAt(index) === 10) {\n line++;\n lineStart = index + 1;\n }\n }\n return { line, column: offset - lineStart + 1 };\n}\nexport {\n checkZeroGraph,\n erasedExportEscape,\n formatZeroGraphFailure,\n formatZeroViolations,\n isForbiddenZeroModuleId,\n isTamaguiModuleId,\n offsetToLineColumn,\n owningPackageOf,\n owningPackageOfDir,\n sortZeroViolations,\n writeZeroGraphReceipt,\n writeZeroViolationReport\n};\n//# sourceMappingURL=graph.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"graph.js","names":[],"sources":["esm/zero/graph.js"],"sourcesContent":["import { ZERO_FAILURE_FOOTER } from \"@tamagui/compiler-core\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nconst ALLOWED_ZERO_MODULE = /animated-number/;\nconst owningPackageCache = /* @__PURE__ */ new Map();\nfunction owningPackageOf(id) {\n const clean = id.split(/[?#]/, 1)[0];\n if (!clean || clean.startsWith(\"\\0\") || !path.isAbsolute(clean)) return null;\n return owningPackageOfDir(path.dirname(clean));\n}\nfunction owningPackageOfDir(from) {\n if (!from || !path.isAbsolute(from)) return null;\n let dir = from;\n const visited = [];\n while (true) {\n const cached = owningPackageCache.get(dir);\n if (cached !== void 0) {\n for (const seen of visited) owningPackageCache.set(seen, cached);\n return cached;\n }\n visited.push(dir);\n const manifest = path.join(dir, \"package.json\");\n if (existsSync(manifest)) {\n let owner = null;\n try {\n owner = {\n name: JSON.parse(readFileSync(manifest, \"utf8\")).name ?? null,\n manifest\n };\n } catch {\n owner = { name: null, manifest };\n }\n for (const seen of visited) owningPackageCache.set(seen, owner);\n return owner;\n }\n const parent = path.dirname(dir);\n if (parent === dir) {\n for (const seen of visited) owningPackageCache.set(seen, null);\n return null;\n }\n dir = parent;\n }\n}\nfunction isTamaguiModuleId(id, ownManifest) {\n const owner = owningPackageOf(id);\n if (!owner?.name) return false;\n if (ownManifest && owner.manifest === ownManifest) return false;\n return owner.name === \"tamagui\" || owner.name.startsWith(\"@tamagui/\");\n}\nfunction isForbiddenZeroModuleId(id, ownManifest) {\n if (!isTamaguiModuleId(id, ownManifest)) return false;\n return !ALLOWED_ZERO_MODULE.test(id);\n}\nfunction shortestChain(target, entries, importersOf) {\n const entrySet = new Set(entries);\n const seen = /* @__PURE__ */ new Set([target]);\n const queue = [[target]];\n let longest = [target];\n while (queue.length) {\n const chain = queue.shift();\n const head = chain[0];\n if (entrySet.has(head)) return chain;\n if (chain.length > longest.length) longest = chain;\n for (const importer of importersOf.get(head) ?? []) {\n if (seen.has(importer)) continue;\n seen.add(importer);\n queue.push([importer, ...chain]);\n }\n }\n return longest;\n}\nfunction checkZeroGraph(input) {\n const importersOf = new Map(input.importerEdges);\n for (const module of input.modules) {\n if (!importersOf.has(module.id)) importersOf.set(module.id, module.importers ?? []);\n }\n const ownManifest = input.root ? owningPackageOfDir(input.root)?.manifest ?? null : null;\n const tamaguiModules = input.modules.map((module) => module.id).filter((id) => isTamaguiModuleId(id, ownManifest)).sort();\n const forbidden = tamaguiModules.filter((id) => isForbiddenZeroModuleId(id, ownManifest)).map((id) => ({\n id,\n chain: shortestChain(id, input.entries, importersOf),\n owner: owningPackageOf(id)?.name ?? \"\"\n }));\n return { tamaguiModules, forbidden };\n}\nfunction formatZeroGraphFailure(receipt) {\n const lines = [\n `[tamagui zero-runtime] ${receipt.integration} zero entry graph contains ${receipt.forbidden.length} forbidden Tamagui module(s)`,\n \"\"\n ];\n for (const entry of receipt.forbidden) {\n lines.push(entry.owner ? `${entry.id} (package ${entry.owner})` : entry.id);\n lines.push(\n entry.chain.length > 1 ? ` ${entry.chain.join(\"\\n -> \")}` : ` (this bundler exposed no importer edges for that module)`\n );\n }\n lines.push(\"\");\n lines.push(ZERO_FAILURE_FOOTER);\n return lines.join(\"\\n\");\n}\nfunction writeZeroGraphReceipt(outDir, name, receipt) {\n mkdirSync(outDir, { recursive: true });\n const file = path.join(outDir, `${name}.graph.json`);\n writeFileSync(file, `${JSON.stringify(receipt, null, 2)}\n`);\n return file;\n}\nfunction sortZeroViolations(sites) {\n return [...sites].sort(\n (left, right) => (left.file < right.file ? -1 : left.file > right.file ? 1 : 0) || left.line - right.line || left.column - right.column || left.rule - right.rule || (left.message < right.message ? -1 : left.message > right.message ? 1 : 0)\n );\n}\nfunction formatZeroViolations(sites) {\n const sorted = sortZeroViolations(sites);\n const lines = [\n `[tamagui zero-runtime] build failed with ${sorted.length} violations`,\n \"\"\n ];\n for (const site of sorted) {\n lines.push(`Rule ${site.rule} ${site.code}`);\n lines.push(\n `${site.file}:${site.line}:${site.column}${site.component ? ` ${site.component}` : \"\"}`\n );\n lines.push(` ${site.message}`);\n lines.push(\"\");\n }\n lines.push(ZERO_FAILURE_FOOTER);\n return lines.join(\"\\n\");\n}\nfunction writeZeroViolationReport(outDir, name, report) {\n mkdirSync(outDir, { recursive: true });\n const file = path.join(outDir, `${name}.violations.json`);\n writeFileSync(\n file,\n `${JSON.stringify(\n {\n integration: report.integration,\n mode: report.mode,\n count: report.violations.length,\n violations: sortZeroViolations(report.violations)\n },\n null,\n 2\n )}\n`\n );\n return file;\n}\nfunction erasedExportEscape(input) {\n for (const [moduleId, names] of input.erasedExports) {\n if (names.length === 0) continue;\n if (!input.importersOf.has(moduleId)) {\n return `[tamagui zero-runtime] ${input.integration} erased the exported definition(s) ${names.join(\n \", \"\n )} from ${moduleId}, and then could not find that module in its own graph, so nothing proved the erasure was safe.\n\n${ZERO_FAILURE_FOOTER}`;\n }\n const untransformed = (input.importersOf.get(moduleId) ?? []).filter(\n (importer) => !input.transformed.has(importer)\n );\n if (untransformed.length === 0) continue;\n return `[tamagui zero-runtime] ${input.integration} erased the exported definition(s) ${names.join(\n \", \"\n )} from ${moduleId}, but ${untransformed.length} importer(s) in this entry graph were never zero-transformed and may still reference them:\n ${untransformed.join(\n \"\\n \"\n )}\n\n${ZERO_FAILURE_FOOTER}`;\n }\n return null;\n}\nfunction offsetToLineColumn(source, offset) {\n let line = 1;\n let lineStart = 0;\n for (let index = 0; index < offset && index < source.length; index++) {\n if (source.charCodeAt(index) === 10) {\n line++;\n lineStart = index + 1;\n }\n }\n return { line, column: offset - lineStart + 1 };\n}\nexport {\n checkZeroGraph,\n erasedExportEscape,\n formatZeroGraphFailure,\n formatZeroViolations,\n isForbiddenZeroModuleId,\n isTamaguiModuleId,\n offsetToLineColumn,\n owningPackageOf,\n owningPackageOfDir,\n sortZeroViolations,\n writeZeroGraphReceipt,\n writeZeroViolationReport\n};\n//# sourceMappingURL=graph.js.map\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","names":[],"sources":["esm/zero/identity.js"],"sourcesContent":["import { LOWERED_MODULE_PLAN_VERSION } from \"@tamagui/compiler-core\";\nimport { createHash } from \"node:crypto\";\nconst ZERO_COMPILER_VERSION = `zero-1/plan-${LOWERED_MODULE_PLAN_VERSION}`;\nfunction hashZeroIdentity(identity) {\n const canonical = {\n runtimeLiteral: identity.runtimeLiteral,\n target: identity.target,\n configGeneration: identity.configGeneration,\n cssHash: identity.cssHash,\n compilerVersion: identity.compilerVersion,\n islandEntries: [...identity.islandEntries].sort(),\n bridgeManifestHash: identity.bridgeManifestHash,\n islandOutputHashes: Object.fromEntries(\n Object.entries(identity.islandOutputHashes).sort(\n ([left], [right]) => left < right ? -1 : left > right ? 1 : 0\n )\n )\n };\n return createHash(\"sha256\").update(JSON.stringify(canonical)).digest(\"hex\").slice(0, 24);\n}\nfunction canonicalizeBridgeManifest(manifest) {\n if (Array.isArray(manifest)) {\n return manifest.map((entry) => canonicalizeBridgeManifest(entry));\n }\n if (manifest && typeof manifest === \"object\") {\n const sorted = {};\n for (const key of Object.keys(manifest).sort()) {\n sorted[key] = canonicalizeBridgeManifest(manifest[key]);\n }\n return sorted;\n }\n return manifest;\n}\nfunction hashBridgeManifest(manifest) {\n return createHash(\"sha256\").update(JSON.stringify(canonicalizeBridgeManifest(manifest))).digest(\"hex\").slice(0, 16);\n}\nexport {\n ZERO_COMPILER_VERSION,\n canonicalizeBridgeManifest,\n hashBridgeManifest,\n hashZeroIdentity\n};\n//# sourceMappingURL=identity.js.map\n"],"mappings":";;;;AAEA,MAAM,wBAAwB,eAAe;AAC7C,SAAS,iBAAiB,UAAU;CAClC,MAAM,YAAY;EAChB,gBAAgB,SAAS;EACzB,QAAQ,SAAS;EACjB,kBAAkB,SAAS;EAC3B,SAAS,SAAS;EAClB,iBAAiB,SAAS;EAC1B,eAAe,CAAC,GAAG,SAAS,aAAa,
|
|
1
|
+
{"version":3,"file":"identity.js","names":[],"sources":["esm/zero/identity.js"],"sourcesContent":["import { LOWERED_MODULE_PLAN_VERSION } from \"@tamagui/compiler-core\";\nimport { createHash } from \"node:crypto\";\nconst ZERO_COMPILER_VERSION = `zero-1/plan-${LOWERED_MODULE_PLAN_VERSION}`;\nfunction hashZeroIdentity(identity) {\n const canonical = {\n runtimeLiteral: identity.runtimeLiteral,\n target: identity.target,\n configGeneration: identity.configGeneration,\n cssHash: identity.cssHash,\n compilerVersion: identity.compilerVersion,\n islandEntries: [...identity.islandEntries].sort(),\n bridgeManifestHash: identity.bridgeManifestHash,\n islandOutputHashes: Object.fromEntries(\n Object.entries(identity.islandOutputHashes).sort(\n ([left], [right]) => left < right ? -1 : left > right ? 1 : 0\n )\n )\n };\n return createHash(\"sha256\").update(JSON.stringify(canonical)).digest(\"hex\").slice(0, 24);\n}\nfunction canonicalizeBridgeManifest(manifest) {\n if (Array.isArray(manifest)) {\n return manifest.map((entry) => canonicalizeBridgeManifest(entry));\n }\n if (manifest && typeof manifest === \"object\") {\n const sorted = {};\n for (const key of Object.keys(manifest).sort()) {\n sorted[key] = canonicalizeBridgeManifest(manifest[key]);\n }\n return sorted;\n }\n return manifest;\n}\nfunction hashBridgeManifest(manifest) {\n return createHash(\"sha256\").update(JSON.stringify(canonicalizeBridgeManifest(manifest))).digest(\"hex\").slice(0, 16);\n}\nexport {\n ZERO_COMPILER_VERSION,\n canonicalizeBridgeManifest,\n hashBridgeManifest,\n hashZeroIdentity\n};\n//# sourceMappingURL=identity.js.map\n"],"mappings":";;;;AAEA,MAAM,wBAAwB,eAAe;AAC7C,SAAS,iBAAiB,UAAU;CAClC,MAAM,YAAY;EAChB,gBAAgB,SAAS;EACzB,QAAQ,SAAS;EACjB,kBAAkB,SAAS;EAC3B,SAAS,SAAS;EAClB,iBAAiB,SAAS;EAC1B,eAAe,CAAC,GAAG,SAAS,aAAa,CAAC,CAAC,KAAK;EAChD,oBAAoB,SAAS;EAC7B,oBAAoB,OAAO,YACzB,OAAO,QAAQ,SAAS,kBAAkB,CAAC,CAAC,MACzC,CAAC,OAAO,CAAC,WAAW,OAAO,QAAQ,CAAC,IAAI,OAAO,QAAQ,IAAI,CAC9D,CACF;CACF;CACA,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,KAAK,UAAU,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;AACzF;AACA,SAAS,2BAA2B,UAAU;CAC5C,IAAI,MAAM,QAAQ,QAAQ,GAAG;EAC3B,OAAO,SAAS,KAAK,UAAU,2BAA2B,KAAK,CAAC;CAClE;CACA,IAAI,YAAY,OAAO,aAAa,UAAU;EAC5C,MAAM,SAAS,CAAC;EAChB,KAAK,MAAM,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,KAAK,GAAG;GAC9C,OAAO,OAAO,2BAA2B,SAAS,IAAI;EACxD;EACA,OAAO;CACT;CACA,OAAO;AACT;AACA,SAAS,mBAAmB,UAAU;CACpC,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,KAAK,UAAU,2BAA2B,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;AACpH"}
|
package/dist/esm/zero/index.mjs
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { isTamaguiSpecifier } from "@tamagui/compiler-core";
|
|
2
|
+
|
|
1
3
|
export * from "./artifact.mjs"
|
|
2
4
|
|
|
3
5
|
export * from "./graph.mjs"
|
|
@@ -13,3 +15,5 @@ export * from "./ownership.mjs"
|
|
|
13
15
|
export * from "./theme.mjs"
|
|
14
16
|
|
|
15
17
|
export * from "./transform.mjs"
|
|
18
|
+
|
|
19
|
+
export { isTamaguiSpecifier };
|
|
@@ -128,6 +128,7 @@ function generateIslandEntrySource(input) {
|
|
|
128
128
|
return `// generated by @tamagui/static zero-runtime. do not edit.
|
|
129
129
|
import * as React from 'react'
|
|
130
130
|
import { TamaguiProvider, Theme } from 'tamagui'
|
|
131
|
+
import { createThemeUpdateState } from '@tamagui/web/theme-update'
|
|
131
132
|
import config from ${JSON.stringify(importPath(entry, input.configPath))}
|
|
132
133
|
import IslandRoot from ${JSON.stringify(importPath(entry, input.island.module))}
|
|
133
134
|
|
|
@@ -143,8 +144,10 @@ export function Island(props) {
|
|
|
143
144
|
node = React.createElement(
|
|
144
145
|
Theme,
|
|
145
146
|
{
|
|
146
|
-
|
|
147
|
-
|
|
147
|
+
_themeUpdate: createThemeUpdateState(
|
|
148
|
+
layers[index].inlineValues,
|
|
149
|
+
layers[index].inlineClassName
|
|
150
|
+
),
|
|
148
151
|
forceClassName: true,
|
|
149
152
|
},
|
|
150
153
|
node
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"islands.js","names":[],"sources":["esm/zero/islands.js"],"sourcesContent":["import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nconst ISLAND_RUNTIME_KEY = \"__tamagui_island_runtime__\";\nconst ISLAND_REGISTRY_KEY = \"__tamagui_islands__\";\nfunction writeIfChanged(file, content) {\n mkdirSync(path.dirname(file), { recursive: true });\n let existing = null;\n try {\n existing = readFileSync(file, \"utf8\");\n } catch {\n existing = null;\n }\n if (existing !== content) writeFileSync(file, content);\n}\nfunction importPath(from, to) {\n const relative = path.relative(path.dirname(from), to).replace(/\\\\/g, \"/\");\n return relative.startsWith(\".\") ? relative : `./${relative}`;\n}\nfunction generateIslandLoaderSource(input) {\n return `// generated by @tamagui/static zero-runtime. do not edit.\nimport * as React from 'react'\nimport * as ReactDOM from 'react-dom'\nimport * as JSXRuntime from 'react/jsx-runtime'\n\nconst ISLAND_ID = ${JSON.stringify(input.island.id)}\nconst ISLAND_SRC = ${JSON.stringify(input.scriptUrl)}\nconst CSS_HREF = ${JSON.stringify(input.cssHref)}\nconst INTEGRATION = ${JSON.stringify(input.integration)}\n\nfunction sharedRuntime() {\n const scope = globalThis\n if (!scope[${JSON.stringify(ISLAND_RUNTIME_KEY)}]) {\n scope[${JSON.stringify(ISLAND_RUNTIME_KEY)}] = {\n react: React,\n reactDom: ReactDOM,\n jsxRuntime: JSXRuntime,\n }\n }\n if (!scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}]) {\n scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}] = {}\n }\n return scope\n}\n\n// The one accepted runtime recovery in zero-runtime mode, and it is loud on\n// purpose. \"Unimported\" is not decidable at build time for a published zero\n// artifact on Next or Metro, so the loader still guarantees the island has its\n// styles; on a correct build this never runs.\nfunction ensureZeroStylesheet() {\n const links = document.querySelectorAll('link[rel=\"stylesheet\"]')\n for (let index = 0; index < links.length; index++) {\n const href = links[index].getAttribute('href') || ''\n if (href === CSS_HREF || href.split('?')[0].endsWith(CSS_HREF)) return\n }\n console.error(\n '[tamagui zero-runtime] the page did not link the generated CSS artifact ' +\n CSS_HREF +\n ', so island \"' +\n ISLAND_ID +\n '\" (' +\n INTEGRATION +\n ') is loading it at runtime. On a correct build this never happens: the ' +\n 'artifact is generated by the build and must be linked by the document ' +\n 'that mounts the island. Fix the document, not this recovery.'\n )\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = CSS_HREF\n link.setAttribute('data-tamagui-zero-css', '1')\n document.head.appendChild(link)\n}\n\nlet pending = null\n\nfunction loadIsland() {\n const scope = sharedRuntime()\n const registered = scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][ISLAND_ID]\n if (registered) return Promise.resolve(registered)\n if (!pending) {\n pending = new Promise((resolve, reject) => {\n ensureZeroStylesheet()\n const script = document.createElement('script')\n script.src = ISLAND_SRC\n script.async = true\n script.onload = () => {\n const mod = scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][ISLAND_ID]\n if (mod) resolve(mod)\n else reject(new Error('tamagui island ' + ISLAND_ID + ' did not register'))\n }\n script.onerror = () => reject(new Error('tamagui island ' + ISLAND_ID + ' failed to load ' + ISLAND_SRC))\n document.head.appendChild(script)\n })\n }\n return pending\n}\n\nexport default function TamaguiIsland(props) {\n const bridgeId = props['data-tamagui-bridge'] || 'root'\n const [Loaded, setLoaded] = React.useState(null)\n\n React.useEffect(() => {\n let cancelled = false\n loadIsland().then((mod) => {\n if (!cancelled) setLoaded(() => mod.Island)\n })\n return () => {\n cancelled = true\n }\n }, [])\n\n if (!Loaded) {\n return React.createElement('div', {\n 'data-tamagui-island': ISLAND_ID,\n 'data-tamagui-bridge': bridgeId,\n })\n }\n\n const forwarded = {}\n for (const key in props) forwarded[key] = props[key]\n forwarded['data-tamagui-island'] = ISLAND_ID\n return React.createElement(Loaded, forwarded)\n}\n`;\n}\nfunction generateIslandEntrySource(input) {\n const entry = input.island.entry;\n return `// generated by @tamagui/static zero-runtime. do not edit.\nimport * as React from 'react'\nimport { TamaguiProvider, Theme } from 'tamagui'\nimport config from ${JSON.stringify(importPath(entry, input.configPath))}\nimport IslandRoot from ${JSON.stringify(importPath(entry, input.island.module))}\n\nexport function Island(props) {\n const bridge = props.__tamaguiBridge\n const inner = {}\n for (const key in props) {\n if (key !== '__tamaguiBridge') inner[key] = props[key]\n }\n let node = React.createElement(IslandRoot, inner)\n const layers = (bridge && bridge.layers) || []\n for (let index = layers.length - 1; index >= 0; index--) {\n node = React.createElement(\n Theme,\n {\n
|
|
1
|
+
{"version":3,"file":"islands.js","names":[],"sources":["esm/zero/islands.js"],"sourcesContent":["import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nconst ISLAND_RUNTIME_KEY = \"__tamagui_island_runtime__\";\nconst ISLAND_REGISTRY_KEY = \"__tamagui_islands__\";\nfunction writeIfChanged(file, content) {\n mkdirSync(path.dirname(file), { recursive: true });\n let existing = null;\n try {\n existing = readFileSync(file, \"utf8\");\n } catch {\n existing = null;\n }\n if (existing !== content) writeFileSync(file, content);\n}\nfunction importPath(from, to) {\n const relative = path.relative(path.dirname(from), to).replace(/\\\\/g, \"/\");\n return relative.startsWith(\".\") ? relative : `./${relative}`;\n}\nfunction generateIslandLoaderSource(input) {\n return `// generated by @tamagui/static zero-runtime. do not edit.\nimport * as React from 'react'\nimport * as ReactDOM from 'react-dom'\nimport * as JSXRuntime from 'react/jsx-runtime'\n\nconst ISLAND_ID = ${JSON.stringify(input.island.id)}\nconst ISLAND_SRC = ${JSON.stringify(input.scriptUrl)}\nconst CSS_HREF = ${JSON.stringify(input.cssHref)}\nconst INTEGRATION = ${JSON.stringify(input.integration)}\n\nfunction sharedRuntime() {\n const scope = globalThis\n if (!scope[${JSON.stringify(ISLAND_RUNTIME_KEY)}]) {\n scope[${JSON.stringify(ISLAND_RUNTIME_KEY)}] = {\n react: React,\n reactDom: ReactDOM,\n jsxRuntime: JSXRuntime,\n }\n }\n if (!scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}]) {\n scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}] = {}\n }\n return scope\n}\n\n// The one accepted runtime recovery in zero-runtime mode, and it is loud on\n// purpose. \"Unimported\" is not decidable at build time for a published zero\n// artifact on Next or Metro, so the loader still guarantees the island has its\n// styles; on a correct build this never runs.\nfunction ensureZeroStylesheet() {\n const links = document.querySelectorAll('link[rel=\"stylesheet\"]')\n for (let index = 0; index < links.length; index++) {\n const href = links[index].getAttribute('href') || ''\n if (href === CSS_HREF || href.split('?')[0].endsWith(CSS_HREF)) return\n }\n console.error(\n '[tamagui zero-runtime] the page did not link the generated CSS artifact ' +\n CSS_HREF +\n ', so island \"' +\n ISLAND_ID +\n '\" (' +\n INTEGRATION +\n ') is loading it at runtime. On a correct build this never happens: the ' +\n 'artifact is generated by the build and must be linked by the document ' +\n 'that mounts the island. Fix the document, not this recovery.'\n )\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = CSS_HREF\n link.setAttribute('data-tamagui-zero-css', '1')\n document.head.appendChild(link)\n}\n\nlet pending = null\n\nfunction loadIsland() {\n const scope = sharedRuntime()\n const registered = scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][ISLAND_ID]\n if (registered) return Promise.resolve(registered)\n if (!pending) {\n pending = new Promise((resolve, reject) => {\n ensureZeroStylesheet()\n const script = document.createElement('script')\n script.src = ISLAND_SRC\n script.async = true\n script.onload = () => {\n const mod = scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][ISLAND_ID]\n if (mod) resolve(mod)\n else reject(new Error('tamagui island ' + ISLAND_ID + ' did not register'))\n }\n script.onerror = () => reject(new Error('tamagui island ' + ISLAND_ID + ' failed to load ' + ISLAND_SRC))\n document.head.appendChild(script)\n })\n }\n return pending\n}\n\nexport default function TamaguiIsland(props) {\n const bridgeId = props['data-tamagui-bridge'] || 'root'\n const [Loaded, setLoaded] = React.useState(null)\n\n React.useEffect(() => {\n let cancelled = false\n loadIsland().then((mod) => {\n if (!cancelled) setLoaded(() => mod.Island)\n })\n return () => {\n cancelled = true\n }\n }, [])\n\n if (!Loaded) {\n return React.createElement('div', {\n 'data-tamagui-island': ISLAND_ID,\n 'data-tamagui-bridge': bridgeId,\n })\n }\n\n const forwarded = {}\n for (const key in props) forwarded[key] = props[key]\n forwarded['data-tamagui-island'] = ISLAND_ID\n return React.createElement(Loaded, forwarded)\n}\n`;\n}\nfunction generateIslandEntrySource(input) {\n const entry = input.island.entry;\n return `// generated by @tamagui/static zero-runtime. do not edit.\nimport * as React from 'react'\nimport { TamaguiProvider, Theme } from 'tamagui'\nimport { createThemeUpdateState } from '@tamagui/web/theme-update'\nimport config from ${JSON.stringify(importPath(entry, input.configPath))}\nimport IslandRoot from ${JSON.stringify(importPath(entry, input.island.module))}\n\nexport function Island(props) {\n const bridge = props.__tamaguiBridge\n const inner = {}\n for (const key in props) {\n if (key !== '__tamaguiBridge') inner[key] = props[key]\n }\n let node = React.createElement(IslandRoot, inner)\n const layers = (bridge && bridge.layers) || []\n for (let index = layers.length - 1; index >= 0; index--) {\n node = React.createElement(\n Theme,\n {\n _themeUpdate: createThemeUpdateState(\n layers[index].inlineValues,\n layers[index].inlineClassName\n ),\n forceClassName: true,\n },\n node\n )\n }\n // isSubtreeRoot: the island shares a document with a zero page that already\n // has its own compiled theme spans, so its provider must not write a theme\n // class onto html or body and must carry its own theme on its own node.\n return React.createElement(\n TamaguiProvider,\n {\n config,\n defaultTheme: (bridge && bridge.name) || 'light',\n disableInjectCSS: true,\n isSubtreeRoot: true,\n },\n node\n )\n}\n\nconst scope = globalThis\nif (!scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}]) scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}] = {}\nscope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][${JSON.stringify(input.island.id)}] = { Island }\n`;\n}\nfunction writeIslandModules(input) {\n writeIfChanged(input.island.loader, generateIslandLoaderSource(input));\n writeIfChanged(input.island.entry, generateIslandEntrySource(input));\n}\nconst ISLAND_EXTERNAL_GLOBAL_PATHS = {\n react: [ISLAND_RUNTIME_KEY, \"react\"],\n \"react-dom\": [ISLAND_RUNTIME_KEY, \"reactDom\"],\n \"react/jsx-runtime\": [ISLAND_RUNTIME_KEY, \"jsxRuntime\"]\n};\nconst ISLAND_EXTERNAL_GLOBALS = Object.fromEntries(\n Object.entries(ISLAND_EXTERNAL_GLOBAL_PATHS).map(([name, segments]) => [\n name,\n `globalThis.${segments.join(\".\")}`\n ])\n);\nfunction mergeIslandBridges(target, incoming) {\n for (const [islandId, bridges] of incoming) {\n const list = target.get(islandId) ?? [];\n for (const bridge of bridges) {\n const index = list.findIndex((existing) => existing.id === bridge.id);\n if (index >= 0) list[index] = bridge;\n else list.push(bridge);\n }\n list.sort((left, right) => left.id < right.id ? -1 : left.id > right.id ? 1 : 0);\n target.set(islandId, list);\n }\n}\nexport {\n ISLAND_EXTERNAL_GLOBALS,\n ISLAND_EXTERNAL_GLOBAL_PATHS,\n ISLAND_REGISTRY_KEY,\n ISLAND_RUNTIME_KEY,\n generateIslandEntrySource,\n generateIslandLoaderSource,\n mergeIslandBridges,\n writeIslandModules\n};\n//# sourceMappingURL=islands.js.map\n"],"mappings":";;;;AAEA,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,SAAS,eAAe,MAAM,SAAS;CACrC,UAAU,KAAK,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;CACjD,IAAI,WAAW;CACf,IAAI;EACF,WAAW,aAAa,MAAM,MAAM;CACtC,QAAQ;EACN,WAAW;CACb;CACA,IAAI,aAAa,SAAS,cAAc,MAAM,OAAO;AACvD;AACA,SAAS,WAAW,MAAM,IAAI;CAC5B,MAAM,WAAW,KAAK,SAAS,KAAK,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC,QAAQ,OAAO,GAAG;CACzE,OAAO,SAAS,WAAW,GAAG,IAAI,WAAW,KAAK;AACpD;AACA,SAAS,2BAA2B,OAAO;CACzC,OAAO;;;;;oBAKW,KAAK,UAAU,MAAM,OAAO,EAAE,EAAE;qBAC/B,KAAK,UAAU,MAAM,SAAS,EAAE;mBAClC,KAAK,UAAU,MAAM,OAAO,EAAE;sBAC3B,KAAK,UAAU,MAAM,WAAW,EAAE;;;;eAIzC,KAAK,UAAU,kBAAkB,EAAE;YACtC,KAAK,UAAU,kBAAkB,EAAE;;;;;;eAMhC,KAAK,UAAU,mBAAmB,EAAE;YACvC,KAAK,UAAU,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAqCnB,KAAK,UAAU,mBAAmB,EAAE;;;;;;;;;4BASrC,KAAK,UAAU,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsChE;AACA,SAAS,0BAA0B,OAAO;CACxC,MAAM,QAAQ,MAAM,OAAO;CAC3B,OAAO;;;;qBAIY,KAAK,UAAU,WAAW,OAAO,MAAM,UAAU,CAAC,EAAE;yBAChD,KAAK,UAAU,WAAW,OAAO,MAAM,OAAO,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuCnE,KAAK,UAAU,mBAAmB,EAAE,WAAW,KAAK,UAAU,mBAAmB,EAAE;QACxF,KAAK,UAAU,mBAAmB,EAAE,IAAI,KAAK,UAAU,MAAM,OAAO,EAAE,EAAE;;AAEhF;AACA,SAAS,mBAAmB,OAAO;CACjC,eAAe,MAAM,OAAO,QAAQ,2BAA2B,KAAK,CAAC;CACrE,eAAe,MAAM,OAAO,OAAO,0BAA0B,KAAK,CAAC;AACrE;AACA,MAAM,+BAA+B;CACnC,OAAO,CAAC,oBAAoB,OAAO;CACnC,aAAa,CAAC,oBAAoB,UAAU;CAC5C,qBAAqB,CAAC,oBAAoB,YAAY;AACxD;AACA,MAAM,0BAA0B,OAAO,YACrC,OAAO,QAAQ,4BAA4B,CAAC,CAAC,KAAK,CAAC,MAAM,cAAc,CACrE,MACA,cAAc,SAAS,KAAK,GAAG,GACjC,CAAC,CACH;AACA,SAAS,mBAAmB,QAAQ,UAAU;CAC5C,KAAK,MAAM,CAAC,UAAU,YAAY,UAAU;EAC1C,MAAM,OAAO,OAAO,IAAI,QAAQ,KAAK,CAAC;EACtC,KAAK,MAAM,UAAU,SAAS;GAC5B,MAAM,QAAQ,KAAK,WAAW,aAAa,SAAS,OAAO,OAAO,EAAE;GACpE,IAAI,SAAS,GAAG,KAAK,SAAS;QACzB,KAAK,KAAK,MAAM;EACvB;EACA,KAAK,MAAM,MAAM,UAAU,KAAK,KAAK,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,KAAK,IAAI,CAAC;EAC/E,OAAO,IAAI,UAAU,IAAI;CAC3B;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","names":[],"sources":["esm/zero/options.js"],"sourcesContent":["import { zeroConfigDriverMessage } from \"@tamagui/compiler-core\";\nimport glob from \"fast-glob\";\nimport path from \"node:path\";\nconst ZERO_OUT_DIRNAME = \".tamagui/zero\";\nfunction islandIdFor(moduleId) {\n return path.basename(moduleId).replace(/\\.[jt]sx?$/, \"\");\n}\nasync function resolveZeroRuntime(options, root) {\n const early = resolveZeroRuntimeEarly(options, root);\n if (early.done) return early.resolved;\n return finishZeroRuntime(\n options,\n root,\n early.islandGlobs,\n early.islandGlobs.length ? await glob(early.islandGlobs, { cwd: root, absolute: true, dot: false }) : []\n );\n}\nfunction resolveZeroRuntimeSync(options, root) {\n const early = resolveZeroRuntimeEarly(options, root);\n if (early.done) return early.resolved;\n return finishZeroRuntime(\n options,\n root,\n early.islandGlobs,\n early.islandGlobs.length ? glob.sync(early.islandGlobs, { cwd: root, absolute: true, dot: false }) : []\n );\n}\nfunction resolveZeroRuntimeEarly(options, root) {\n const requested = options.experimental?.zeroRuntime;\n const outDir = path.join(root, ZERO_OUT_DIRNAME);\n const off = {\n mode: \"off\",\n root,\n islandGlobs: [],\n islands: [],\n outDir,\n cssPath: \"\"\n };\n if (!requested) return { done: true, resolved: off };\n if (options.platform === \"native\" && requested === \"report\") {\n return { done: true, resolved: { ...off, mode: \"report\" } };\n }\n if (options.platform === \"native\") {\n throw new Error(\n `[tamagui zero-runtime] experimental.zeroRuntime is web only. A native build always receives TAMAGUI_RUNTIME=\"full\".`\n );\n }\n if (requested !== \"report\" && !options.outputCSS) {\n throw new Error(\n `[tamagui zero-runtime] experimental.zeroRuntime requires outputCSS. The bundler owns one generated CSS artifact and derives TAMAGUI_DID_OUTPUT_CSS from it.`\n );\n }\n if (requested !== \"report\" && process.env.TAMAGUI_DOES_SSR_CSS === \"mutates-themes\") {\n throw new Error(\n `[tamagui zero-runtime] Rule 4: TAMAGUI_DOES_SSR_CSS=\"mutates-themes\" declares runtime theme mutation. Zero-runtime themes are build-time data. Remove runtime mutation or move that surface to a full-runtime island.`\n );\n }\n return {\n done: false,\n islandGlobs: requested === true || requested === \"report\" ? [] : requested.islands\n };\n}\nfunction finishZeroRuntime(options, root, islandGlobs, matches) {\n const outDir = path.join(root, ZERO_OUT_DIRNAME);\n const outputCSS = options.outputCSS ?? \"\";\n const islands = [...new Set(matches.map((match) => path.normalize(match)))].sort().map((module) => {\n const id = islandIdFor(module);\n return {\n id,\n module,\n loader: path.join(outDir, `${id}.loader.js`),\n entry: path.join(outDir, `${id}.entry.js`)\n };\n });\n const seen = /* @__PURE__ */ new Set();\n for (const island of islands) {\n if (seen.has(island.id)) {\n throw new Error(\n `[tamagui zero-runtime] two declared islands share the basename \"${island.id}\". Island ids are their module basename because that is also the generated loader's filename.`\n );\n }\n seen.add(island.id);\n }\n if (islandGlobs.length && islands.length === 0) {\n throw new Error(\n `[tamagui zero-runtime] experimental.zeroRuntime.islands matched no module for ${JSON.stringify(\n islandGlobs\n )}`\n );\n }\n return {\n mode: options.experimental?.zeroRuntime === \"report\" ? \"report\" : \"enforce\",\n root,\n islandGlobs,\n islands,\n outDir,\n cssPath: !outputCSS ? \"\" : path.isAbsolute(outputCSS) ? outputCSS : path.resolve(root, outputCSS)\n };\n}\nfunction assertZeroConfigDrivers(config) {\n const drivers = config.animationDrivers ? Object.entries(config.animationDrivers) : [[\"default\", config.animations]];\n for (const [name, driver] of drivers) {\n if (!driver || driver.outputStyle === \"css\") continue;\n throw new Error(zeroConfigDriverMessage(name, driver.outputStyle));\n }\n}\nconst ZERO_INTEGRATION_SUPPORT = {\n vite: { base: true, islands: true },\n \"next-webpack\": { base: true, islands: true },\n \"metro-web\": { base: true, islands: true }\n};\nfunction assertZeroIntegrationSupport(integration, resolved) {\n if (resolved.mode !== \"enforce\") return;\n const support = ZERO_INTEGRATION_SUPPORT[integration];\n if (!support.base) {\n throw new Error(\n `[tamagui zero-runtime] ${integration} has not qualified for zero-runtime output in this version. Use zeroRuntime: \"report\" or choose a qualified integration.`\n );\n }\n if (resolved.islands.length && !support.islands) {\n throw new Error(\n `[tamagui zero-runtime] ${integration} does not support experimental.zeroRuntime islands in this version. Use zeroRuntime: true without islands or choose an integration with island support.`\n );\n }\n}\nexport {\n ZERO_INTEGRATION_SUPPORT,\n ZERO_OUT_DIRNAME,\n assertZeroConfigDrivers,\n assertZeroIntegrationSupport,\n islandIdFor,\n resolveZeroRuntime,\n resolveZeroRuntimeSync\n};\n//# sourceMappingURL=options.js.map\n"],"mappings":";;;;;AAGA,MAAM,mBAAmB;AACzB,SAAS,YAAY,UAAU;CAC7B,OAAO,KAAK,SAAS,QAAQ,
|
|
1
|
+
{"version":3,"file":"options.js","names":[],"sources":["esm/zero/options.js"],"sourcesContent":["import { zeroConfigDriverMessage } from \"@tamagui/compiler-core\";\nimport glob from \"fast-glob\";\nimport path from \"node:path\";\nconst ZERO_OUT_DIRNAME = \".tamagui/zero\";\nfunction islandIdFor(moduleId) {\n return path.basename(moduleId).replace(/\\.[jt]sx?$/, \"\");\n}\nasync function resolveZeroRuntime(options, root) {\n const early = resolveZeroRuntimeEarly(options, root);\n if (early.done) return early.resolved;\n return finishZeroRuntime(\n options,\n root,\n early.islandGlobs,\n early.islandGlobs.length ? await glob(early.islandGlobs, { cwd: root, absolute: true, dot: false }) : []\n );\n}\nfunction resolveZeroRuntimeSync(options, root) {\n const early = resolveZeroRuntimeEarly(options, root);\n if (early.done) return early.resolved;\n return finishZeroRuntime(\n options,\n root,\n early.islandGlobs,\n early.islandGlobs.length ? glob.sync(early.islandGlobs, { cwd: root, absolute: true, dot: false }) : []\n );\n}\nfunction resolveZeroRuntimeEarly(options, root) {\n const requested = options.experimental?.zeroRuntime;\n const outDir = path.join(root, ZERO_OUT_DIRNAME);\n const off = {\n mode: \"off\",\n root,\n islandGlobs: [],\n islands: [],\n outDir,\n cssPath: \"\"\n };\n if (!requested) return { done: true, resolved: off };\n if (options.platform === \"native\" && requested === \"report\") {\n return { done: true, resolved: { ...off, mode: \"report\" } };\n }\n if (options.platform === \"native\") {\n throw new Error(\n `[tamagui zero-runtime] experimental.zeroRuntime is web only. A native build always receives TAMAGUI_RUNTIME=\"full\".`\n );\n }\n if (requested !== \"report\" && !options.outputCSS) {\n throw new Error(\n `[tamagui zero-runtime] experimental.zeroRuntime requires outputCSS. The bundler owns one generated CSS artifact and derives TAMAGUI_DID_OUTPUT_CSS from it.`\n );\n }\n if (requested !== \"report\" && process.env.TAMAGUI_DOES_SSR_CSS === \"mutates-themes\") {\n throw new Error(\n `[tamagui zero-runtime] Rule 4: TAMAGUI_DOES_SSR_CSS=\"mutates-themes\" declares runtime theme mutation. Zero-runtime themes are build-time data. Remove runtime mutation or move that surface to a full-runtime island.`\n );\n }\n return {\n done: false,\n islandGlobs: requested === true || requested === \"report\" ? [] : requested.islands\n };\n}\nfunction finishZeroRuntime(options, root, islandGlobs, matches) {\n const outDir = path.join(root, ZERO_OUT_DIRNAME);\n const outputCSS = options.outputCSS ?? \"\";\n const islands = [...new Set(matches.map((match) => path.normalize(match)))].sort().map((module) => {\n const id = islandIdFor(module);\n return {\n id,\n module,\n loader: path.join(outDir, `${id}.loader.js`),\n entry: path.join(outDir, `${id}.entry.js`)\n };\n });\n const seen = /* @__PURE__ */ new Set();\n for (const island of islands) {\n if (seen.has(island.id)) {\n throw new Error(\n `[tamagui zero-runtime] two declared islands share the basename \"${island.id}\". Island ids are their module basename because that is also the generated loader's filename.`\n );\n }\n seen.add(island.id);\n }\n if (islandGlobs.length && islands.length === 0) {\n throw new Error(\n `[tamagui zero-runtime] experimental.zeroRuntime.islands matched no module for ${JSON.stringify(\n islandGlobs\n )}`\n );\n }\n return {\n mode: options.experimental?.zeroRuntime === \"report\" ? \"report\" : \"enforce\",\n root,\n islandGlobs,\n islands,\n outDir,\n cssPath: !outputCSS ? \"\" : path.isAbsolute(outputCSS) ? outputCSS : path.resolve(root, outputCSS)\n };\n}\nfunction assertZeroConfigDrivers(config) {\n const drivers = config.animationDrivers ? Object.entries(config.animationDrivers) : [[\"default\", config.animations]];\n for (const [name, driver] of drivers) {\n if (!driver || driver.outputStyle === \"css\") continue;\n throw new Error(zeroConfigDriverMessage(name, driver.outputStyle));\n }\n}\nconst ZERO_INTEGRATION_SUPPORT = {\n vite: { base: true, islands: true },\n \"next-webpack\": { base: true, islands: true },\n \"metro-web\": { base: true, islands: true }\n};\nfunction assertZeroIntegrationSupport(integration, resolved) {\n if (resolved.mode !== \"enforce\") return;\n const support = ZERO_INTEGRATION_SUPPORT[integration];\n if (!support.base) {\n throw new Error(\n `[tamagui zero-runtime] ${integration} has not qualified for zero-runtime output in this version. Use zeroRuntime: \"report\" or choose a qualified integration.`\n );\n }\n if (resolved.islands.length && !support.islands) {\n throw new Error(\n `[tamagui zero-runtime] ${integration} does not support experimental.zeroRuntime islands in this version. Use zeroRuntime: true without islands or choose an integration with island support.`\n );\n }\n}\nexport {\n ZERO_INTEGRATION_SUPPORT,\n ZERO_OUT_DIRNAME,\n assertZeroConfigDrivers,\n assertZeroIntegrationSupport,\n islandIdFor,\n resolveZeroRuntime,\n resolveZeroRuntimeSync\n};\n//# sourceMappingURL=options.js.map\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ownership.js","names":[],"sources":["esm/zero/ownership.js"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { resolveZeroRuntimeSync } from \"./options\";\nconst hashCSS = (css) => createHash(\"sha256\").update(css).digest(\"hex\").slice(0, 16);\nconst normalize = (value) => value.split(/[?#]/, 1)[0].replace(/\\\\/g, \"/\");\nconst declaresRuntimeThemeMutation = () => process.env.TAMAGUI_DOES_SSR_CSS === \"mutates-themes\";\nfunction resolveGlobalCSSOwnership(options, root) {\n if (options.disable) return null;\n if (options.platform === \"native\") return null;\n if (!options.outputCSS) return null;\n if (declaresRuntimeThemeMutation()) return null;\n if (resolveZeroRuntimeSync(options, root).mode === \"enforce\") return null;\n return {\n cssPath: path.isAbsolute(options.outputCSS) ? options.outputCSS : path.resolve(root, options.outputCSS)\n };\n}\nfunction checkGlobalCSSArtifact(input) {\n const { cssPath, expectedCSS } = input;\n let onDisk;\n try {\n onDisk = readFileSync(cssPath, \"utf8\");\n } catch {\n return {\n kind: \"missing\",\n cssPath,\n message: `[tamagui] the generated CSS artifact ${cssPath} does not exist, so this build cannot claim TAMAGUI_DID_OUTPUT_CSS. The design-system, :root, font and theme rules would be stripped from JavaScript and put nowhere.`\n };\n }\n if (onDisk !== expectedCSS) {\n return {\n kind: \"stale\",\n cssPath,\n message: `[tamagui] the generated CSS artifact ${cssPath} is stale: it hashes ${hashCSS(\n onDisk\n )} but this build's config generates ${hashCSS(\n expectedCSS\n )}. Deriving TAMAGUI_DID_OUTPUT_CSS from it would ship rules that do not match the build.`\n };\n }\n const wanted = normalize(cssPath);\n for (const id of input.loadedModuleIds) {\n if (normalize(id) === wanted) return null;\n }\n return {\n kind: \"unimported\",\n cssPath,\n message: `[tamagui] the generated CSS artifact ${cssPath} exists but the entry graph never loads it. ${input.importHint}`\n };\n}\nexport {\n checkGlobalCSSArtifact,\n declaresRuntimeThemeMutation,\n hashCSS,\n resolveGlobalCSSOwnership\n};\n//# sourceMappingURL=ownership.js.map\n"],"mappings":";;;;;;AAIA,MAAM,WAAW,QAAQ,WAAW,QAAQ,
|
|
1
|
+
{"version":3,"file":"ownership.js","names":[],"sources":["esm/zero/ownership.js"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { resolveZeroRuntimeSync } from \"./options\";\nconst hashCSS = (css) => createHash(\"sha256\").update(css).digest(\"hex\").slice(0, 16);\nconst normalize = (value) => value.split(/[?#]/, 1)[0].replace(/\\\\/g, \"/\");\nconst declaresRuntimeThemeMutation = () => process.env.TAMAGUI_DOES_SSR_CSS === \"mutates-themes\";\nfunction resolveGlobalCSSOwnership(options, root) {\n if (options.disable) return null;\n if (options.platform === \"native\") return null;\n if (!options.outputCSS) return null;\n if (declaresRuntimeThemeMutation()) return null;\n if (resolveZeroRuntimeSync(options, root).mode === \"enforce\") return null;\n return {\n cssPath: path.isAbsolute(options.outputCSS) ? options.outputCSS : path.resolve(root, options.outputCSS)\n };\n}\nfunction checkGlobalCSSArtifact(input) {\n const { cssPath, expectedCSS } = input;\n let onDisk;\n try {\n onDisk = readFileSync(cssPath, \"utf8\");\n } catch {\n return {\n kind: \"missing\",\n cssPath,\n message: `[tamagui] the generated CSS artifact ${cssPath} does not exist, so this build cannot claim TAMAGUI_DID_OUTPUT_CSS. The design-system, :root, font and theme rules would be stripped from JavaScript and put nowhere.`\n };\n }\n if (onDisk !== expectedCSS) {\n return {\n kind: \"stale\",\n cssPath,\n message: `[tamagui] the generated CSS artifact ${cssPath} is stale: it hashes ${hashCSS(\n onDisk\n )} but this build's config generates ${hashCSS(\n expectedCSS\n )}. Deriving TAMAGUI_DID_OUTPUT_CSS from it would ship rules that do not match the build.`\n };\n }\n const wanted = normalize(cssPath);\n for (const id of input.loadedModuleIds) {\n if (normalize(id) === wanted) return null;\n }\n return {\n kind: \"unimported\",\n cssPath,\n message: `[tamagui] the generated CSS artifact ${cssPath} exists but the entry graph never loads it. ${input.importHint}`\n };\n}\nexport {\n checkGlobalCSSArtifact,\n declaresRuntimeThemeMutation,\n hashCSS,\n resolveGlobalCSSOwnership\n};\n//# sourceMappingURL=ownership.js.map\n"],"mappings":";;;;;;AAIA,MAAM,WAAW,QAAQ,WAAW,QAAQ,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;AACnF,MAAM,aAAa,UAAU,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,OAAO,GAAG;AACzE,MAAM,qCAAqC,QAAQ,IAAI,yBAAyB;AAChF,SAAS,0BAA0B,SAAS,MAAM;CAChD,IAAI,QAAQ,SAAS,OAAO;CAC5B,IAAI,QAAQ,aAAa,UAAU,OAAO;CAC1C,IAAI,CAAC,QAAQ,WAAW,OAAO;CAC/B,IAAI,6BAA6B,GAAG,OAAO;CAC3C,IAAI,uBAAuB,SAAS,IAAI,CAAC,CAAC,SAAS,WAAW,OAAO;CACrE,OAAO,EACL,SAAS,KAAK,WAAW,QAAQ,SAAS,IAAI,QAAQ,YAAY,KAAK,QAAQ,MAAM,QAAQ,SAAS,EACxG;AACF;AACA,SAAS,uBAAuB,OAAO;CACrC,MAAM,EAAE,SAAS,gBAAgB;CACjC,IAAI;CACJ,IAAI;EACF,SAAS,aAAa,SAAS,MAAM;CACvC,QAAQ;EACN,OAAO;GACL,MAAM;GACN;GACA,SAAS,wCAAwC,QAAQ;EAC3D;CACF;CACA,IAAI,WAAW,aAAa;EAC1B,OAAO;GACL,MAAM;GACN;GACA,SAAS,wCAAwC,QAAQ,uBAAuB,QAC9E,MACF,EAAE,qCAAqC,QACrC,WACF,EAAE;EACJ;CACF;CACA,MAAM,SAAS,UAAU,OAAO;CAChC,KAAK,MAAM,MAAM,MAAM,iBAAiB;EACtC,IAAI,UAAU,EAAE,MAAM,QAAQ,OAAO;CACvC;CACA,OAAO;EACL,MAAM;EACN;EACA,SAAS,wCAAwC,QAAQ,8CAA8C,MAAM;CAC/G;AACF"}
|
package/dist/esm/zero/theme.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { childNode, childNodes, resolvedModuleId, walkAst, zeroRuleMessage } from "@tamagui/compiler-core";
|
|
2
2
|
import { getThemeClassNames, reservedThemeProps } from "@tamagui/helpers";
|
|
3
|
-
import {
|
|
3
|
+
import { resolveThemeName, variableToString } from "@tamagui/web";
|
|
4
|
+
import { getInlineValuesFromProps, getVariablesCSSRules } from "@tamagui/web/theme-update";
|
|
4
5
|
|
|
5
6
|
const MAX_THEME_BRANCHES = 8;
|
|
6
7
|
const LOWERABLE_RESERVED_PROPS = /* @__PURE__ */ new Set([
|
|
@@ -83,7 +84,7 @@ function resolveThemeChain(chain, rootThemeName, config) {
|
|
|
83
84
|
}
|
|
84
85
|
return branches;
|
|
85
86
|
}
|
|
86
|
-
function readStaticTheme(element, id, source, config) {
|
|
87
|
+
function readStaticTheme(element, id, source, config, kind = "Theme") {
|
|
87
88
|
const moduleId = resolvedModuleId(id);
|
|
88
89
|
const violations = [];
|
|
89
90
|
const css = /* @__PURE__ */ new Map();
|
|
@@ -107,8 +108,8 @@ function readStaticTheme(element, id, source, config) {
|
|
|
107
108
|
rule: 1,
|
|
108
109
|
code: "local/unsafe-style-spread",
|
|
109
110
|
span: span(attribute),
|
|
110
|
-
component:
|
|
111
|
-
message: zeroRuleMessage(1, { component:
|
|
111
|
+
component: kind,
|
|
112
|
+
message: zeroRuleMessage(1, { component: kind })
|
|
112
113
|
});
|
|
113
114
|
continue;
|
|
114
115
|
}
|
|
@@ -116,7 +117,17 @@ function readStaticTheme(element, id, source, config) {
|
|
|
116
117
|
if (!key) continue;
|
|
117
118
|
const rawValue = childNode(attribute, "value");
|
|
118
119
|
const value = rawValue && rawValue.type === "JSXExpressionContainer" ? childNode(rawValue, "expression") : rawValue;
|
|
119
|
-
if (
|
|
120
|
+
if (kind === "ThemeUpdate" && reservedThemeProps[key]) {
|
|
121
|
+
violations.push({
|
|
122
|
+
rule: 4,
|
|
123
|
+
code: "local/unsupported-target",
|
|
124
|
+
span: span(attribute),
|
|
125
|
+
component: kind,
|
|
126
|
+
message: zeroRuleMessage(4, { detail: `the <ThemeUpdate ${key}> prop, which belongs on <Theme>,` })
|
|
127
|
+
});
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (kind === "Theme" && key === "name") {
|
|
120
131
|
const read = value ? readNameOptions(value, source, []) : null;
|
|
121
132
|
if (!read) {
|
|
122
133
|
violations.push({
|
|
@@ -131,7 +142,7 @@ function readStaticTheme(element, id, source, config) {
|
|
|
131
142
|
options = read;
|
|
132
143
|
continue;
|
|
133
144
|
}
|
|
134
|
-
if (reservedThemeProps[key]) {
|
|
145
|
+
if (kind === "Theme" && reservedThemeProps[key]) {
|
|
135
146
|
if (!LOWERABLE_RESERVED_PROPS.has(key)) {
|
|
136
147
|
violations.push({
|
|
137
148
|
rule: 4,
|
|
@@ -157,16 +168,26 @@ function readStaticTheme(element, id, source, config) {
|
|
|
157
168
|
if (key === "contain") contain = literal2;
|
|
158
169
|
continue;
|
|
159
170
|
}
|
|
171
|
+
if (kind === "Theme") {
|
|
172
|
+
violations.push({
|
|
173
|
+
rule: 4,
|
|
174
|
+
code: "local/unsupported-target",
|
|
175
|
+
span: span(attribute),
|
|
176
|
+
component: "Theme",
|
|
177
|
+
message: zeroRuleMessage(4, { detail: `the removed <Theme ${key}> inline-value spelling. Use <ThemeUpdate ${key}> around the subtree instead,` })
|
|
178
|
+
});
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
160
181
|
const literal = value ? literalOf(value) : void 0;
|
|
161
182
|
if (typeof literal !== "string" && typeof literal !== "number") {
|
|
162
183
|
violations.push({
|
|
163
184
|
rule: 3,
|
|
164
185
|
code: "local/dynamic-style-value",
|
|
165
186
|
span: span(attribute),
|
|
166
|
-
component:
|
|
187
|
+
component: kind,
|
|
167
188
|
message: zeroRuleMessage(3, {
|
|
168
189
|
prop: key,
|
|
169
|
-
component:
|
|
190
|
+
component: kind,
|
|
170
191
|
detail: value ? "a theme value must be a string or number literal at build time" : "a theme key needs a value"
|
|
171
192
|
})
|
|
172
193
|
});
|
|
@@ -174,7 +195,7 @@ function readStaticTheme(element, id, source, config) {
|
|
|
174
195
|
}
|
|
175
196
|
themeKeyProps[key] = literal;
|
|
176
197
|
}
|
|
177
|
-
if (reset && options.some((option) => option.name !== void 0)) {
|
|
198
|
+
if (kind === "Theme" && reset && options.some((option) => option.name !== void 0)) {
|
|
178
199
|
violations.push({
|
|
179
200
|
rule: 4,
|
|
180
201
|
code: "local/unsupported-target",
|
|
@@ -189,20 +210,20 @@ function readStaticTheme(element, id, source, config) {
|
|
|
189
210
|
code: "local/unsupported-target",
|
|
190
211
|
span: span(element),
|
|
191
212
|
component: "Theme",
|
|
192
|
-
message: zeroRuleMessage(4, { detail:
|
|
213
|
+
message: zeroRuleMessage(4, { detail: `a self-closing <${kind}>, which has no subtree to theme,` })
|
|
193
214
|
});
|
|
194
215
|
}
|
|
195
216
|
const issues = [];
|
|
196
|
-
const inlineValues = Object.keys(themeKeyProps).length ? getInlineValuesFromProps(themeKeyProps, config, (issue) => issues.push(issue)) : null;
|
|
217
|
+
const inlineValues = kind === "ThemeUpdate" && Object.keys(themeKeyProps).length ? getInlineValuesFromProps(themeKeyProps, config, (issue) => issues.push(issue)) : null;
|
|
197
218
|
for (const issue of issues) {
|
|
198
219
|
violations.push({
|
|
199
220
|
rule: 3,
|
|
200
221
|
code: "local/dynamic-style-value",
|
|
201
222
|
span: span(opening),
|
|
202
|
-
component:
|
|
223
|
+
component: kind,
|
|
203
224
|
message: zeroRuleMessage(3, {
|
|
204
225
|
prop: issue.key,
|
|
205
|
-
component:
|
|
226
|
+
component: kind,
|
|
206
227
|
detail: issue.message
|
|
207
228
|
})
|
|
208
229
|
});
|
|
@@ -216,6 +237,7 @@ function readStaticTheme(element, id, source, config) {
|
|
|
216
237
|
};
|
|
217
238
|
return {
|
|
218
239
|
node: {
|
|
240
|
+
kind,
|
|
219
241
|
element,
|
|
220
242
|
opening,
|
|
221
243
|
closing,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","names":[],"sources":["esm/zero/theme.js"],"sourcesContent":["import {\n childNode,\n childNodes,\n resolvedModuleId,\n walkAst,\n zeroRuleMessage\n} from \"@tamagui/compiler-core\";\nimport { getThemeClassNames, reservedThemeProps } from \"@tamagui/helpers\";\nimport {\n getInlineValuesFromProps,\n getVariablesCSSRules,\n resolveThemeName,\n variableToString\n} from \"@tamagui/web\";\nconst MAX_THEME_BRANCHES = 8;\nconst LOWERABLE_RESERVED_PROPS = /* @__PURE__ */ new Set([\"name\", \"reset\", \"contain\"]);\nfunction jsxAttributeName(attribute) {\n const name = childNode(attribute, \"name\");\n return name && typeof name.name === \"string\" ? name.name : null;\n}\nfunction literalOf(node) {\n if (!node) return void 0;\n if (node.type === \"Literal\" && typeof node.value !== \"object\") {\n return node.value;\n }\n return void 0;\n}\nfunction hasSideEffects(node) {\n let found = false;\n walkAst(node, (child) => {\n if (child.type === \"CallExpression\" || child.type === \"OptionalCallExpression\" || child.type === \"NewExpression\" || child.type === \"AwaitExpression\" || child.type === \"YieldExpression\" || child.type === \"AssignmentExpression\" || child.type === \"UpdateExpression\" || child.type === \"TaggedTemplateExpression\") {\n found = true;\n }\n });\n return found;\n}\nfunction readNameOptions(value, source, guards) {\n const literal = literalOf(value);\n if (typeof literal === \"string\") {\n return [{ test: guards.length ? guards.join(\" && \") : null, name: literal }];\n }\n if (value.type === \"ConditionalExpression\") {\n const test = childNode(value, \"test\");\n const consequent = childNode(value, \"consequent\");\n const alternate = childNode(value, \"alternate\");\n if (!test || !consequent || !alternate) return null;\n if (hasSideEffects(test)) return null;\n const testText = source.slice(test.start, test.end).replace(/\\s+/g, \" \").trim();\n const left = readNameOptions(consequent, source, [...guards, `(${testText})`]);\n const right = readNameOptions(alternate, source, [...guards, `!(${testText})`]);\n if (!left || !right) return null;\n return [...left, ...right];\n }\n return null;\n}\nfunction foldBranches(branches) {\n const last = branches[branches.length - 1];\n if (new Set(branches.map((branch) => branch.value)).size === 1) return last.value;\n let expression = last.value;\n for (let index = branches.length - 2; index >= 0; index--) {\n const branch = branches[index];\n expression = branch.test === null ? branch.value : `${branch.test} ? ${branch.value} : ${expression}`;\n }\n return expression;\n}\nfunction resolveThemeChain(chain, rootThemeName, config) {\n let branches = [{ test: null, name: rootThemeName, isNew: false }];\n for (const node of chain) {\n const next = [];\n for (const parent of branches) {\n for (const option of node.options) {\n const resolved = resolveThemeName(\n parent.name,\n option.name,\n node.reset,\n config.themes\n );\n const tests = [parent.test, option.test].filter(Boolean);\n next.push({\n test: tests.length ? tests.join(\" && \") : null,\n name: resolved ?? parent.name,\n isNew: resolved !== null\n });\n }\n }\n branches = next;\n }\n return branches;\n}\nfunction readStaticTheme(element, id, source, config) {\n const moduleId = resolvedModuleId(id);\n const violations = [];\n const css = /* @__PURE__ */ new Map();\n const opening = childNode(element, \"openingElement\");\n const closing = childNode(element, \"closingElement\");\n const span = (node) => ({ id: moduleId, start: node.start, end: node.end });\n let options = [{ test: null, name: void 0 }];\n let reset = false;\n let contain = false;\n const themeKeyProps = {};\n for (const attribute of childNodes(opening, \"attributes\")) {\n if (attribute.type !== \"JSXAttribute\") {\n violations.push({\n rule: 1,\n code: \"local/unsafe-style-spread\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(1, { component: \"Theme\" })\n });\n continue;\n }\n const key = jsxAttributeName(attribute);\n if (!key) continue;\n const rawValue = childNode(attribute, \"value\");\n const value = rawValue && rawValue.type === \"JSXExpressionContainer\" ? childNode(rawValue, \"expression\") : rawValue;\n if (key === \"name\") {\n const read = value ? readNameOptions(value, source, []) : null;\n if (!read) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `the <Theme name> value ${source.slice(attribute.start, attribute.end).replace(/\\s+/g, \" \").trim()}, which is not a literal theme name or a conditional over literal theme names,`\n })\n });\n continue;\n }\n options = read;\n continue;\n }\n if (reservedThemeProps[key]) {\n if (!LOWERABLE_RESERVED_PROPS.has(key)) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `the <Theme ${key}> prop, which has no compiled form,`\n })\n });\n continue;\n }\n const literal2 = value ? literalOf(value) : true;\n if (typeof literal2 !== \"boolean\") {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `a non-literal <Theme ${key}> value,`\n })\n });\n continue;\n }\n if (key === \"reset\") reset = literal2;\n if (key === \"contain\") contain = literal2;\n continue;\n }\n const literal = value ? literalOf(value) : void 0;\n if (typeof literal !== \"string\" && typeof literal !== \"number\") {\n violations.push({\n rule: 3,\n code: \"local/dynamic-style-value\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(3, {\n prop: key,\n component: \"Theme\",\n detail: value ? \"a theme value must be a string or number literal at build time\" : \"a theme key needs a value\"\n })\n });\n continue;\n }\n themeKeyProps[key] = literal;\n }\n if (reset && options.some((option) => option.name !== void 0)) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(opening),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: \"a <Theme> with both name and reset, which cannot mean one theme,\"\n })\n });\n }\n if (!closing) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(element),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: \"a self-closing <Theme>, which has no subtree to theme,\"\n })\n });\n }\n const issues = [];\n const inlineValues = Object.keys(themeKeyProps).length ? getInlineValuesFromProps(themeKeyProps, config, (issue) => issues.push(issue)) : null;\n for (const issue of issues) {\n violations.push({\n rule: 3,\n code: \"local/dynamic-style-value\",\n span: span(opening),\n component: \"Theme\",\n message: zeroRuleMessage(3, {\n prop: issue.key,\n component: \"Theme\",\n detail: issue.message\n })\n });\n }\n const inlineCSS = inlineValues ? getVariablesCSSRules(inlineValues, config) : null;\n if (inlineCSS) css.set(inlineCSS.identifier, inlineCSS.rules.join(\"\"));\n if (violations.length) return { node: null, violations, css };\n return {\n node: {\n element,\n opening,\n closing,\n options,\n reset,\n contain,\n layer: inlineValues && inlineCSS ? {\n inlineValues,\n inlineClassName: inlineCSS.identifier\n } : null\n },\n violations,\n css\n };\n}\nfunction lowerStaticTheme(node, chain, rootThemeName, config, id) {\n const moduleId = resolvedModuleId(id);\n const branches = resolveThemeChain(chain, rootThemeName, config);\n if (branches.length > MAX_THEME_BRANCHES) {\n return {\n edits: [],\n violations: [\n {\n rule: 4,\n code: \"local/unsupported-target\",\n span: { id: moduleId, start: node.element.start, end: node.element.end },\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `a <Theme> chain that enumerates ${branches.length} theme names, past the ${MAX_THEME_BRANCHES} this lowers,`\n })\n }\n ]\n };\n }\n const inlineClass = node.layer?.inlineClassName ?? \"\";\n const classBranches = branches.map((branch) => ({\n test: branch.test,\n value: JSON.stringify(\n [branch.isNew ? getThemeClassNames(branch.name) : \"\", \"is_Theme\", inlineClass].filter(Boolean).join(\" \").replace(/\\s+/g, \" \").trim()\n )\n }));\n const baseStyle = node.contain ? `display:\"contents\",contain:\"strict\"` : `display:\"contents\"`;\n const styleBranches = branches.map((branch) => {\n const theme = config.themes[branch.name];\n const color = branch.isNew && theme ? variableToString(theme.color) : \"\";\n return {\n test: branch.test,\n value: color ? `{color:${JSON.stringify(color)},${baseStyle}}` : `{${baseStyle}}`\n };\n });\n const className = foldBranches(classBranches);\n const style = foldBranches(styleBranches);\n const classAttribute = className.startsWith('\"') ? `className=${className}` : `className={${className}}`;\n const edits = [\n {\n start: node.opening.start,\n end: node.opening.end,\n content: `<span ${classAttribute} style={${style}}>`,\n origin: { id: moduleId, start: node.opening.start, end: node.opening.end }\n }\n ];\n if (node.closing) {\n edits.push({\n start: node.closing.start,\n end: node.closing.end,\n content: `</span>`,\n origin: { id: moduleId, start: node.closing.start, end: node.closing.end }\n });\n }\n return { edits, violations: [] };\n}\nexport {\n foldBranches,\n lowerStaticTheme,\n readStaticTheme,\n resolveThemeChain\n};\n//# sourceMappingURL=theme.js.map\n"],"mappings":";;;;;AAcA,MAAM,qBAAqB;AAC3B,MAAM,2CAA2C,IAAI,IAAI;CAAC;CAAQ;CAAS;AAAS,CAAC;AACrF,SAAS,iBAAiB,WAAW;CACnC,MAAM,OAAO,UAAU,WAAW,MAAM;CACxC,OAAO,QAAQ,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAC7D;AACA,SAAS,UAAU,MAAM;CACvB,IAAI,CAAC,MAAM,OAAO,KAAK;CACvB,IAAI,KAAK,SAAS,aAAa,OAAO,KAAK,UAAU,UAAU;EAC7D,OAAO,KAAK;CACd;CACA,OAAO,KAAK;AACd;AACA,SAAS,eAAe,MAAM;CAC5B,IAAI,QAAQ;CACZ,QAAQ,OAAO,UAAU;EACvB,IAAI,MAAM,SAAS,oBAAoB,MAAM,SAAS,4BAA4B,MAAM,SAAS,mBAAmB,MAAM,SAAS,qBAAqB,MAAM,SAAS,qBAAqB,MAAM,SAAS,0BAA0B,MAAM,SAAS,sBAAsB,MAAM,SAAS,4BAA4B;GACnT,QAAQ;EACV;CACF,CAAC;CACD,OAAO;AACT;AACA,SAAS,gBAAgB,OAAO,QAAQ,QAAQ;CAC9C,MAAM,UAAU,UAAU,KAAK;CAC/B,IAAI,OAAO,YAAY,UAAU;EAC/B,OAAO,CAAC;GAAE,MAAM,OAAO,SAAS,OAAO,KAAK,MAAM,IAAI;GAAM,MAAM;EAAQ,CAAC;CAC7E;CACA,IAAI,MAAM,SAAS,yBAAyB;EAC1C,MAAM,OAAO,UAAU,OAAO,MAAM;EACpC,MAAM,aAAa,UAAU,OAAO,YAAY;EAChD,MAAM,YAAY,UAAU,OAAO,WAAW;EAC9C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,OAAO;EAC/C,IAAI,eAAe,IAAI,GAAG,OAAO;EACjC,MAAM,WAAW,OAAO,MAAM,KAAK,OAAO,KAAK,GAAG,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK;EAC9E,MAAM,OAAO,gBAAgB,YAAY,QAAQ,CAAC,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;EAC7E,MAAM,QAAQ,gBAAgB,WAAW,QAAQ,CAAC,GAAG,QAAQ,KAAK,SAAS,EAAE,CAAC;EAC9E,IAAI,CAAC,QAAQ,CAAC,OAAO,OAAO;EAC5B,OAAO,CAAC,GAAG,MAAM,GAAG,KAAK;CAC3B;CACA,OAAO;AACT;AACA,SAAS,aAAa,UAAU;CAC9B,MAAM,OAAO,SAAS,SAAS,SAAS;CACxC,IAAI,IAAI,IAAI,SAAS,KAAK,WAAW,OAAO,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,KAAK;CAC5E,IAAI,aAAa,KAAK;CACtB,KAAK,IAAI,QAAQ,SAAS,SAAS,GAAG,SAAS,GAAG,SAAS;EACzD,MAAM,SAAS,SAAS;EACxB,aAAa,OAAO,SAAS,OAAO,OAAO,QAAQ,GAAG,OAAO,KAAK,KAAK,OAAO,MAAM,KAAK;CAC3F;CACA,OAAO;AACT;AACA,SAAS,kBAAkB,OAAO,eAAe,QAAQ;CACvD,IAAI,WAAW,CAAC;EAAE,MAAM;EAAM,MAAM;EAAe,OAAO;CAAM,CAAC;CACjE,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,OAAO,CAAC;EACd,KAAK,MAAM,UAAU,UAAU;GAC7B,KAAK,MAAM,UAAU,KAAK,SAAS;IACjC,MAAM,WAAW,iBACf,OAAO,MACP,OAAO,MACP,KAAK,OACL,OAAO,MACT;IACA,MAAM,QAAQ,CAAC,OAAO,MAAM,OAAO,IAAI,EAAE,OAAO,OAAO;IACvD,KAAK,KAAK;KACR,MAAM,MAAM,SAAS,MAAM,KAAK,MAAM,IAAI;KAC1C,MAAM,YAAY,OAAO;KACzB,OAAO,aAAa;IACtB,CAAC;GACH;EACF;EACA,WAAW;CACb;CACA,OAAO;AACT;AACA,SAAS,gBAAgB,SAAS,IAAI,QAAQ,QAAQ;CACpD,MAAM,WAAW,iBAAiB,EAAE;CACpC,MAAM,aAAa,CAAC;CACpB,MAAM,sBAAsB,IAAI,IAAI;CACpC,MAAM,UAAU,UAAU,SAAS,gBAAgB;CACnD,MAAM,UAAU,UAAU,SAAS,gBAAgB;CACnD,MAAM,QAAQ,UAAU;EAAE,IAAI;EAAU,OAAO,KAAK;EAAO,KAAK,KAAK;CAAI;CACzE,IAAI,UAAU,CAAC;EAAE,MAAM;EAAM,MAAM,KAAK;CAAE,CAAC;CAC3C,IAAI,QAAQ;CACZ,IAAI,UAAU;CACd,MAAM,gBAAgB,CAAC;CACvB,KAAK,MAAM,aAAa,WAAW,SAAS,YAAY,GAAG;EACzD,IAAI,UAAU,SAAS,gBAAgB;GACrC,WAAW,KAAK;IACd,MAAM;IACN,MAAM;IACN,MAAM,KAAK,SAAS;IACpB,WAAW;IACX,SAAS,gBAAgB,GAAG,EAAE,WAAW,QAAQ,CAAC;GACpD,CAAC;GACD;EACF;EACA,MAAM,MAAM,iBAAiB,SAAS;EACtC,IAAI,CAAC,KAAK;EACV,MAAM,WAAW,UAAU,WAAW,OAAO;EAC7C,MAAM,QAAQ,YAAY,SAAS,SAAS,2BAA2B,UAAU,UAAU,YAAY,IAAI;EAC3G,IAAI,QAAQ,QAAQ;GAClB,MAAM,OAAO,QAAQ,gBAAgB,OAAO,QAAQ,CAAC,CAAC,IAAI;GAC1D,IAAI,CAAC,MAAM;IACT,WAAW,KAAK;KACd,MAAM;KACN,MAAM;KACN,MAAM,KAAK,SAAS;KACpB,WAAW;KACX,SAAS,gBAAgB,GAAG,EAC1B,QAAQ,0BAA0B,OAAO,MAAM,UAAU,OAAO,UAAU,GAAG,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK,EAAE,gFAC7G,CAAC;IACH,CAAC;IACD;GACF;GACA,UAAU;GACV;EACF;EACA,IAAI,mBAAmB,MAAM;GAC3B,IAAI,CAAC,yBAAyB,IAAI,GAAG,GAAG;IACtC,WAAW,KAAK;KACd,MAAM;KACN,MAAM;KACN,MAAM,KAAK,SAAS;KACpB,WAAW;KACX,SAAS,gBAAgB,GAAG,EAC1B,QAAQ,cAAc,IAAI,qCAC5B,CAAC;IACH,CAAC;IACD;GACF;GACA,MAAM,WAAW,QAAQ,UAAU,KAAK,IAAI;GAC5C,IAAI,OAAO,aAAa,WAAW;IACjC,WAAW,KAAK;KACd,MAAM;KACN,MAAM;KACN,MAAM,KAAK,SAAS;KACpB,WAAW;KACX,SAAS,gBAAgB,GAAG,EAC1B,QAAQ,wBAAwB,IAAI,UACtC,CAAC;IACH,CAAC;IACD;GACF;GACA,IAAI,QAAQ,SAAS,QAAQ;GAC7B,IAAI,QAAQ,WAAW,UAAU;GACjC;EACF;EACA,MAAM,UAAU,QAAQ,UAAU,KAAK,IAAI,KAAK;EAChD,IAAI,OAAO,YAAY,YAAY,OAAO,YAAY,UAAU;GAC9D,WAAW,KAAK;IACd,MAAM;IACN,MAAM;IACN,MAAM,KAAK,SAAS;IACpB,WAAW;IACX,SAAS,gBAAgB,GAAG;KAC1B,MAAM;KACN,WAAW;KACX,QAAQ,QAAQ,mEAAmE;IACrF,CAAC;GACH,CAAC;GACD;EACF;EACA,cAAc,OAAO;CACvB;CACA,IAAI,SAAS,QAAQ,MAAM,WAAW,OAAO,SAAS,KAAK,CAAC,GAAG;EAC7D,WAAW,KAAK;GACd,MAAM;GACN,MAAM;GACN,MAAM,KAAK,OAAO;GAClB,WAAW;GACX,SAAS,gBAAgB,GAAG,EAC1B,QAAQ,mEACV,CAAC;EACH,CAAC;CACH;CACA,IAAI,CAAC,SAAS;EACZ,WAAW,KAAK;GACd,MAAM;GACN,MAAM;GACN,MAAM,KAAK,OAAO;GAClB,WAAW;GACX,SAAS,gBAAgB,GAAG,EAC1B,QAAQ,yDACV,CAAC;EACH,CAAC;CACH;CACA,MAAM,SAAS,CAAC;CAChB,MAAM,eAAe,OAAO,KAAK,aAAa,EAAE,SAAS,yBAAyB,eAAe,SAAS,UAAU,OAAO,KAAK,KAAK,CAAC,IAAI;CAC1I,KAAK,MAAM,SAAS,QAAQ;EAC1B,WAAW,KAAK;GACd,MAAM;GACN,MAAM;GACN,MAAM,KAAK,OAAO;GAClB,WAAW;GACX,SAAS,gBAAgB,GAAG;IAC1B,MAAM,MAAM;IACZ,WAAW;IACX,QAAQ,MAAM;GAChB,CAAC;EACH,CAAC;CACH;CACA,MAAM,YAAY,eAAe,qBAAqB,cAAc,MAAM,IAAI;CAC9E,IAAI,WAAW,IAAI,IAAI,UAAU,YAAY,UAAU,MAAM,KAAK,EAAE,CAAC;CACrE,IAAI,WAAW,QAAQ,OAAO;EAAE,MAAM;EAAM;EAAY;CAAI;CAC5D,OAAO;EACL,MAAM;GACJ;GACA;GACA;GACA;GACA;GACA;GACA,OAAO,gBAAgB,YAAY;IACjC;IACA,iBAAiB,UAAU;GAC7B,IAAI;EACN;EACA;EACA;CACF;AACF;AACA,SAAS,iBAAiB,MAAM,OAAO,eAAe,QAAQ,IAAI;CAChE,MAAM,WAAW,iBAAiB,EAAE;CACpC,MAAM,WAAW,kBAAkB,OAAO,eAAe,MAAM;CAC/D,IAAI,SAAS,SAAS,oBAAoB;EACxC,OAAO;GACL,OAAO,CAAC;GACR,YAAY,CACV;IACE,MAAM;IACN,MAAM;IACN,MAAM;KAAE,IAAI;KAAU,OAAO,KAAK,QAAQ;KAAO,KAAK,KAAK,QAAQ;IAAI;IACvE,WAAW;IACX,SAAS,gBAAgB,GAAG,EAC1B,QAAQ,mCAAmC,SAAS,OAAO,yBAAyB,mBAAmB,eACzG,CAAC;GACH,CACF;EACF;CACF;CACA,MAAM,cAAc,KAAK,OAAO,mBAAmB;CACnD,MAAM,gBAAgB,SAAS,KAAK,YAAY;EAC9C,MAAM,OAAO;EACb,OAAO,KAAK,UACV;GAAC,OAAO,QAAQ,mBAAmB,OAAO,IAAI,IAAI;GAAI;GAAY;EAAW,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK,CACrI;CACF,EAAE;CACF,MAAM,YAAY,KAAK,UAAU,wCAAwC;CACzE,MAAM,gBAAgB,SAAS,KAAK,WAAW;EAC7C,MAAM,QAAQ,OAAO,OAAO,OAAO;EACnC,MAAM,QAAQ,OAAO,SAAS,QAAQ,iBAAiB,MAAM,KAAK,IAAI;EACtE,OAAO;GACL,MAAM,OAAO;GACb,OAAO,QAAQ,UAAU,KAAK,UAAU,KAAK,EAAE,GAAG,UAAU,KAAK,IAAI,UAAU;EACjF;CACF,CAAC;CACD,MAAM,YAAY,aAAa,aAAa;CAC5C,MAAM,QAAQ,aAAa,aAAa;CACxC,MAAM,iBAAiB,UAAU,WAAW,IAAG,IAAI,aAAa,cAAc,cAAc,UAAU;CACtG,MAAM,QAAQ,CACZ;EACE,OAAO,KAAK,QAAQ;EACpB,KAAK,KAAK,QAAQ;EAClB,SAAS,SAAS,eAAe,UAAU,MAAM;EACjD,QAAQ;GAAE,IAAI;GAAU,OAAO,KAAK,QAAQ;GAAO,KAAK,KAAK,QAAQ;EAAI;CAC3E,CACF;CACA,IAAI,KAAK,SAAS;EAChB,MAAM,KAAK;GACT,OAAO,KAAK,QAAQ;GACpB,KAAK,KAAK,QAAQ;GAClB,SAAS;GACT,QAAQ;IAAE,IAAI;IAAU,OAAO,KAAK,QAAQ;IAAO,KAAK,KAAK,QAAQ;GAAI;EAC3E,CAAC;CACH;CACA,OAAO;EAAE;EAAO,YAAY,CAAC;CAAE;AACjC"}
|
|
1
|
+
{"version":3,"file":"theme.js","names":[],"sources":["esm/zero/theme.js"],"sourcesContent":["import {\n childNode,\n childNodes,\n resolvedModuleId,\n walkAst,\n zeroRuleMessage\n} from \"@tamagui/compiler-core\";\nimport { getThemeClassNames, reservedThemeProps } from \"@tamagui/helpers\";\nimport {\n resolveThemeName,\n variableToString\n} from \"@tamagui/web\";\nimport {\n getInlineValuesFromProps,\n getVariablesCSSRules\n} from \"@tamagui/web/theme-update\";\nconst MAX_THEME_BRANCHES = 8;\nconst LOWERABLE_RESERVED_PROPS = /* @__PURE__ */ new Set([\"name\", \"reset\", \"contain\"]);\nfunction jsxAttributeName(attribute) {\n const name = childNode(attribute, \"name\");\n return name && typeof name.name === \"string\" ? name.name : null;\n}\nfunction literalOf(node) {\n if (!node) return void 0;\n if (node.type === \"Literal\" && typeof node.value !== \"object\") {\n return node.value;\n }\n return void 0;\n}\nfunction hasSideEffects(node) {\n let found = false;\n walkAst(node, (child) => {\n if (child.type === \"CallExpression\" || child.type === \"OptionalCallExpression\" || child.type === \"NewExpression\" || child.type === \"AwaitExpression\" || child.type === \"YieldExpression\" || child.type === \"AssignmentExpression\" || child.type === \"UpdateExpression\" || child.type === \"TaggedTemplateExpression\") {\n found = true;\n }\n });\n return found;\n}\nfunction readNameOptions(value, source, guards) {\n const literal = literalOf(value);\n if (typeof literal === \"string\") {\n return [{ test: guards.length ? guards.join(\" && \") : null, name: literal }];\n }\n if (value.type === \"ConditionalExpression\") {\n const test = childNode(value, \"test\");\n const consequent = childNode(value, \"consequent\");\n const alternate = childNode(value, \"alternate\");\n if (!test || !consequent || !alternate) return null;\n if (hasSideEffects(test)) return null;\n const testText = source.slice(test.start, test.end).replace(/\\s+/g, \" \").trim();\n const left = readNameOptions(consequent, source, [...guards, `(${testText})`]);\n const right = readNameOptions(alternate, source, [...guards, `!(${testText})`]);\n if (!left || !right) return null;\n return [...left, ...right];\n }\n return null;\n}\nfunction foldBranches(branches) {\n const last = branches[branches.length - 1];\n if (new Set(branches.map((branch) => branch.value)).size === 1) return last.value;\n let expression = last.value;\n for (let index = branches.length - 2; index >= 0; index--) {\n const branch = branches[index];\n expression = branch.test === null ? branch.value : `${branch.test} ? ${branch.value} : ${expression}`;\n }\n return expression;\n}\nfunction resolveThemeChain(chain, rootThemeName, config) {\n let branches = [{ test: null, name: rootThemeName, isNew: false }];\n for (const node of chain) {\n const next = [];\n for (const parent of branches) {\n for (const option of node.options) {\n const resolved = resolveThemeName(\n parent.name,\n option.name,\n node.reset,\n config.themes\n );\n const tests = [parent.test, option.test].filter(Boolean);\n next.push({\n test: tests.length ? tests.join(\" && \") : null,\n name: resolved ?? parent.name,\n isNew: resolved !== null\n });\n }\n }\n branches = next;\n }\n return branches;\n}\nfunction readStaticTheme(element, id, source, config, kind = \"Theme\") {\n const moduleId = resolvedModuleId(id);\n const violations = [];\n const css = /* @__PURE__ */ new Map();\n const opening = childNode(element, \"openingElement\");\n const closing = childNode(element, \"closingElement\");\n const span = (node) => ({ id: moduleId, start: node.start, end: node.end });\n let options = [{ test: null, name: void 0 }];\n let reset = false;\n let contain = false;\n const themeKeyProps = {};\n for (const attribute of childNodes(opening, \"attributes\")) {\n if (attribute.type !== \"JSXAttribute\") {\n violations.push({\n rule: 1,\n code: \"local/unsafe-style-spread\",\n span: span(attribute),\n component: kind,\n message: zeroRuleMessage(1, { component: kind })\n });\n continue;\n }\n const key = jsxAttributeName(attribute);\n if (!key) continue;\n const rawValue = childNode(attribute, \"value\");\n const value = rawValue && rawValue.type === \"JSXExpressionContainer\" ? childNode(rawValue, \"expression\") : rawValue;\n if (kind === \"ThemeUpdate\" && reservedThemeProps[key]) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: kind,\n message: zeroRuleMessage(4, {\n detail: `the <ThemeUpdate ${key}> prop, which belongs on <Theme>,`\n })\n });\n continue;\n }\n if (kind === \"Theme\" && key === \"name\") {\n const read = value ? readNameOptions(value, source, []) : null;\n if (!read) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `the <Theme name> value ${source.slice(attribute.start, attribute.end).replace(/\\s+/g, \" \").trim()}, which is not a literal theme name or a conditional over literal theme names,`\n })\n });\n continue;\n }\n options = read;\n continue;\n }\n if (kind === \"Theme\" && reservedThemeProps[key]) {\n if (!LOWERABLE_RESERVED_PROPS.has(key)) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `the <Theme ${key}> prop, which has no compiled form,`\n })\n });\n continue;\n }\n const literal2 = value ? literalOf(value) : true;\n if (typeof literal2 !== \"boolean\") {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `a non-literal <Theme ${key}> value,`\n })\n });\n continue;\n }\n if (key === \"reset\") reset = literal2;\n if (key === \"contain\") contain = literal2;\n continue;\n }\n if (kind === \"Theme\") {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `the removed <Theme ${key}> inline-value spelling. Use <ThemeUpdate ${key}> around the subtree instead,`\n })\n });\n continue;\n }\n const literal = value ? literalOf(value) : void 0;\n if (typeof literal !== \"string\" && typeof literal !== \"number\") {\n violations.push({\n rule: 3,\n code: \"local/dynamic-style-value\",\n span: span(attribute),\n component: kind,\n message: zeroRuleMessage(3, {\n prop: key,\n component: kind,\n detail: value ? \"a theme value must be a string or number literal at build time\" : \"a theme key needs a value\"\n })\n });\n continue;\n }\n themeKeyProps[key] = literal;\n }\n if (kind === \"Theme\" && reset && options.some((option) => option.name !== void 0)) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(opening),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: \"a <Theme> with both name and reset, which cannot mean one theme,\"\n })\n });\n }\n if (!closing) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(element),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `a self-closing <${kind}>, which has no subtree to theme,`\n })\n });\n }\n const issues = [];\n const inlineValues = kind === \"ThemeUpdate\" && Object.keys(themeKeyProps).length ? getInlineValuesFromProps(themeKeyProps, config, (issue) => issues.push(issue)) : null;\n for (const issue of issues) {\n violations.push({\n rule: 3,\n code: \"local/dynamic-style-value\",\n span: span(opening),\n component: kind,\n message: zeroRuleMessage(3, {\n prop: issue.key,\n component: kind,\n detail: issue.message\n })\n });\n }\n const inlineCSS = inlineValues ? getVariablesCSSRules(inlineValues, config) : null;\n if (inlineCSS) css.set(inlineCSS.identifier, inlineCSS.rules.join(\"\"));\n if (violations.length) return { node: null, violations, css };\n return {\n node: {\n kind,\n element,\n opening,\n closing,\n options,\n reset,\n contain,\n layer: inlineValues && inlineCSS ? {\n inlineValues,\n inlineClassName: inlineCSS.identifier\n } : null\n },\n violations,\n css\n };\n}\nfunction lowerStaticTheme(node, chain, rootThemeName, config, id) {\n const moduleId = resolvedModuleId(id);\n const branches = resolveThemeChain(chain, rootThemeName, config);\n if (branches.length > MAX_THEME_BRANCHES) {\n return {\n edits: [],\n violations: [\n {\n rule: 4,\n code: \"local/unsupported-target\",\n span: { id: moduleId, start: node.element.start, end: node.element.end },\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `a <Theme> chain that enumerates ${branches.length} theme names, past the ${MAX_THEME_BRANCHES} this lowers,`\n })\n }\n ]\n };\n }\n const inlineClass = node.layer?.inlineClassName ?? \"\";\n const classBranches = branches.map((branch) => ({\n test: branch.test,\n value: JSON.stringify(\n [branch.isNew ? getThemeClassNames(branch.name) : \"\", \"is_Theme\", inlineClass].filter(Boolean).join(\" \").replace(/\\s+/g, \" \").trim()\n )\n }));\n const baseStyle = node.contain ? `display:\"contents\",contain:\"strict\"` : `display:\"contents\"`;\n const styleBranches = branches.map((branch) => {\n const theme = config.themes[branch.name];\n const color = branch.isNew && theme ? variableToString(theme.color) : \"\";\n return {\n test: branch.test,\n value: color ? `{color:${JSON.stringify(color)},${baseStyle}}` : `{${baseStyle}}`\n };\n });\n const className = foldBranches(classBranches);\n const style = foldBranches(styleBranches);\n const classAttribute = className.startsWith('\"') ? `className=${className}` : `className={${className}}`;\n const edits = [\n {\n start: node.opening.start,\n end: node.opening.end,\n content: `<span ${classAttribute} style={${style}}>`,\n origin: { id: moduleId, start: node.opening.start, end: node.opening.end }\n }\n ];\n if (node.closing) {\n edits.push({\n start: node.closing.start,\n end: node.closing.end,\n content: `</span>`,\n origin: { id: moduleId, start: node.closing.start, end: node.closing.end }\n });\n }\n return { edits, violations: [] };\n}\nexport {\n foldBranches,\n lowerStaticTheme,\n readStaticTheme,\n resolveThemeChain\n};\n//# sourceMappingURL=theme.js.map\n"],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ function transformZeroModule(input) {
|
|
|
21
21
|
const bridges = /* @__PURE__ */ new Map();
|
|
22
22
|
const bridgeCSS = /* @__PURE__ */ new Map();
|
|
23
23
|
let themeLocal = null;
|
|
24
|
+
let themeUpdateLocal = null;
|
|
24
25
|
const islandLocals = /* @__PURE__ */ new Map();
|
|
25
26
|
for (const statement of childNodes(program, "body")) {
|
|
26
27
|
if (statement.type !== "ImportDeclaration") continue;
|
|
@@ -38,6 +39,7 @@ function transformZeroModule(input) {
|
|
|
38
39
|
if (!input.isTamaguiSpecifier(specifier)) continue;
|
|
39
40
|
const imported = childNode(importSpecifier, "imported");
|
|
40
41
|
if (imported && imported.name === "Theme") themeLocal = local;
|
|
42
|
+
if (imported && imported.name === "ThemeUpdate") themeUpdateLocal = local;
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
const parents = /* @__PURE__ */ new Map();
|
|
@@ -46,10 +48,13 @@ function transformZeroModule(input) {
|
|
|
46
48
|
if (parent) parents.set(node, parent);
|
|
47
49
|
if (node.type === "JSXElement") elements.push(node);
|
|
48
50
|
});
|
|
49
|
-
const themeElements =
|
|
51
|
+
const themeElements = elements.filter((element) => {
|
|
52
|
+
const name = jsxNameOf(element);
|
|
53
|
+
return name === themeLocal || name === themeUpdateLocal;
|
|
54
|
+
});
|
|
50
55
|
const themeNodes = /* @__PURE__ */ new Map();
|
|
51
56
|
for (const element of themeElements) {
|
|
52
|
-
const read = readStaticTheme(element, id, source, config);
|
|
57
|
+
const read = readStaticTheme(element, id, source, config, jsxNameOf(element) === themeUpdateLocal ? "ThemeUpdate" : "Theme");
|
|
53
58
|
for (const [identifier, rules] of read.css) bridgeCSS.set(identifier, rules);
|
|
54
59
|
violations.push(...read.violations);
|
|
55
60
|
if (read.node) themeNodes.set(element, read.node);
|