@tamagui/static 1.2.9 → 1.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/esm/constants.mjs +15 -0
  2. package/dist/esm/constants.mjs.map +7 -0
  3. package/dist/esm/extractor/accessSafe.mjs +19 -0
  4. package/dist/esm/extractor/accessSafe.mjs.map +7 -0
  5. package/dist/esm/extractor/babelParse.mjs +32 -0
  6. package/dist/esm/extractor/babelParse.mjs.map +7 -0
  7. package/dist/esm/extractor/buildClassName.mjs +65 -0
  8. package/dist/esm/extractor/buildClassName.mjs.map +7 -0
  9. package/dist/esm/extractor/bundle.mjs +86 -0
  10. package/dist/esm/extractor/bundle.mjs.map +7 -0
  11. package/dist/esm/extractor/createEvaluator.mjs +52 -0
  12. package/dist/esm/extractor/createEvaluator.mjs.map +7 -0
  13. package/dist/esm/extractor/createExtractor.mjs +1610 -0
  14. package/dist/esm/extractor/createExtractor.mjs.map +7 -0
  15. package/dist/esm/extractor/ensureImportingConcat.mjs +31 -0
  16. package/dist/esm/extractor/ensureImportingConcat.mjs.map +7 -0
  17. package/dist/esm/extractor/evaluateAstNode.mjs +97 -0
  18. package/dist/esm/extractor/evaluateAstNode.mjs.map +7 -0
  19. package/dist/esm/extractor/extractHelpers.mjs +162 -0
  20. package/dist/esm/extractor/extractHelpers.mjs.map +7 -0
  21. package/dist/esm/extractor/extractMediaStyle.mjs +159 -0
  22. package/dist/esm/extractor/extractMediaStyle.mjs.map +7 -0
  23. package/dist/esm/extractor/extractToClassNames.mjs +381 -0
  24. package/dist/esm/extractor/extractToClassNames.mjs.map +7 -0
  25. package/dist/esm/extractor/findTopmostFunction.mjs +20 -0
  26. package/dist/esm/extractor/findTopmostFunction.mjs.map +7 -0
  27. package/dist/esm/extractor/generatedUid.mjs +26 -0
  28. package/dist/esm/extractor/generatedUid.mjs.map +7 -0
  29. package/dist/esm/extractor/getPrefixLogs.mjs +8 -0
  30. package/dist/esm/extractor/getPrefixLogs.mjs.map +7 -0
  31. package/dist/esm/extractor/getPropValueFromAttributes.mjs +56 -0
  32. package/dist/esm/extractor/getPropValueFromAttributes.mjs.map +7 -0
  33. package/dist/esm/extractor/getSourceModule.mjs +70 -0
  34. package/dist/esm/extractor/getSourceModule.mjs.map +7 -0
  35. package/dist/esm/extractor/getStaticBindingsForScope.mjs +191 -0
  36. package/dist/esm/extractor/getStaticBindingsForScope.mjs.map +7 -0
  37. package/dist/esm/extractor/hoistClassNames.mjs +41 -0
  38. package/dist/esm/extractor/hoistClassNames.mjs.map +7 -0
  39. package/dist/esm/extractor/literalToAst.mjs +81 -0
  40. package/dist/esm/extractor/literalToAst.mjs.map +7 -0
  41. package/dist/esm/extractor/loadFile.mjs +20 -0
  42. package/dist/esm/extractor/loadFile.mjs.map +7 -0
  43. package/dist/esm/extractor/loadTamagui.mjs +411 -0
  44. package/dist/esm/extractor/loadTamagui.mjs.map +7 -0
  45. package/dist/esm/extractor/logLines.mjs +20 -0
  46. package/dist/esm/extractor/logLines.mjs.map +7 -0
  47. package/dist/esm/extractor/normalizeTernaries.mjs +52 -0
  48. package/dist/esm/extractor/normalizeTernaries.mjs.map +7 -0
  49. package/dist/esm/extractor/removeUnusedHooks.mjs +76 -0
  50. package/dist/esm/extractor/removeUnusedHooks.mjs.map +7 -0
  51. package/dist/esm/extractor/timer.mjs +29 -0
  52. package/dist/esm/extractor/timer.mjs.map +7 -0
  53. package/dist/esm/extractor/validHTMLAttributes.mjs +102 -0
  54. package/dist/esm/extractor/validHTMLAttributes.mjs.map +7 -0
  55. package/dist/esm/getPragmaOptions.mjs +44 -0
  56. package/dist/esm/getPragmaOptions.mjs.map +7 -0
  57. package/dist/esm/helpers/memoize.mjs +22 -0
  58. package/dist/esm/helpers/memoize.mjs.map +7 -0
  59. package/dist/esm/index.mjs +16 -0
  60. package/dist/esm/index.mjs.map +7 -0
  61. package/dist/esm/require.mjs +61 -0
  62. package/dist/esm/require.mjs.map +7 -0
  63. package/dist/esm/types.mjs +1 -0
  64. package/dist/esm/types.mjs.map +7 -0
  65. package/dist/esm/webpackPlugin.mjs +11 -0
  66. package/dist/esm/webpackPlugin.mjs.map +7 -0
  67. package/package.json +14 -14
@@ -0,0 +1,15 @@
1
+ var _a;
2
+ import findCacheDir from "find-cache-dir";
3
+ const CSS_FILE_NAME = "__snack.css";
4
+ const MEDIA_SEP = "_";
5
+ const cacheDir = findCacheDir({ name: "tamagui", create: true });
6
+ const FAILED_EVAL = Symbol("failed_style_eval");
7
+ const SHOULD_DEBUG = process.env.DEBUG === "*" || ((_a = process.env.DEBUG) == null ? void 0 : _a.startsWith("tamagui"));
8
+ export {
9
+ CSS_FILE_NAME,
10
+ FAILED_EVAL,
11
+ MEDIA_SEP,
12
+ SHOULD_DEBUG,
13
+ cacheDir
14
+ };
15
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/constants.ts"],
4
+ "sourcesContent": ["import findCacheDir from 'find-cache-dir'\n\nexport const CSS_FILE_NAME = '__snack.css'\n\n// ENSURE THIS ISNT THE SAME AS THE SEPARATOR USED FOR STYLE KEYS\nexport const MEDIA_SEP = '_'\n\n// ensure cache dir\nexport const cacheDir = findCacheDir({ name: 'tamagui', create: true })\n\nexport const FAILED_EVAL = Symbol('failed_style_eval')\n\nexport const SHOULD_DEBUG = process.env.DEBUG === '*' || process.env.DEBUG?.startsWith('tamagui')\n"],
5
+ "mappings": "AAAA;AAAA,OAAO,kBAAkB;AAElB,MAAM,gBAAgB;AAGtB,MAAM,YAAY;AAGlB,MAAM,WAAW,aAAa,EAAE,MAAM,WAAW,QAAQ,KAAK,CAAC;AAE/D,MAAM,cAAc,OAAO,mBAAmB;AAE9C,MAAM,eAAe,QAAQ,IAAI,UAAU,SAAO,aAAQ,IAAI,UAAZ,mBAAmB,WAAW;",
6
+ "names": []
7
+ }
@@ -0,0 +1,19 @@
1
+ import * as t from "@babel/types";
2
+ function accessSafe(obj, member) {
3
+ return t.logicalExpression(
4
+ "&&",
5
+ t.logicalExpression(
6
+ "&&",
7
+ // typeof obj === 'object
8
+ t.binaryExpression("===", t.unaryExpression("typeof", obj), t.stringLiteral("object")),
9
+ // obj !== null
10
+ t.binaryExpression("!==", obj, t.nullLiteral())
11
+ ),
12
+ // obj.member
13
+ t.memberExpression(obj, t.identifier(member), false)
14
+ );
15
+ }
16
+ export {
17
+ accessSafe
18
+ };
19
+ //# sourceMappingURL=accessSafe.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extractor/accessSafe.ts"],
4
+ "sourcesContent": ["import * as t from '@babel/types'\n\n// accessSafe wraps memberExpressions in object/null checks\n// TODO: inject this as a function? this gets pretty repetitive\nexport function accessSafe(obj: t.Expression, member: string): t.LogicalExpression {\n return t.logicalExpression(\n '&&',\n t.logicalExpression(\n '&&',\n // typeof obj === 'object\n t.binaryExpression('===', t.unaryExpression('typeof', obj), t.stringLiteral('object')),\n // obj !== null\n t.binaryExpression('!==', obj, t.nullLiteral())\n ),\n // obj.member\n t.memberExpression(obj, t.identifier(member), false)\n )\n}\n"],
5
+ "mappings": "AAAA,YAAY,OAAO;AAIZ,SAAS,WAAW,KAAmB,QAAqC;AACjF,SAAO,EAAE;AAAA,IACP;AAAA,IACA,EAAE;AAAA,MACA;AAAA;AAAA,MAEA,EAAE,iBAAiB,OAAO,EAAE,gBAAgB,UAAU,GAAG,GAAG,EAAE,cAAc,QAAQ,CAAC;AAAA;AAAA,MAErF,EAAE,iBAAiB,OAAO,KAAK,EAAE,YAAY,CAAC;AAAA,IAChD;AAAA;AAAA,IAEA,EAAE,iBAAiB,KAAK,EAAE,WAAW,MAAM,GAAG,KAAK;AAAA,EACrD;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,32 @@
1
+ import * as babelParser from "@babel/parser";
2
+ const plugins = [
3
+ "asyncGenerators",
4
+ "classProperties",
5
+ "dynamicImport",
6
+ "functionBind",
7
+ "jsx",
8
+ "numericSeparator",
9
+ "objectRestSpread",
10
+ "optionalCatchBinding",
11
+ "decorators-legacy",
12
+ "typescript",
13
+ "optionalChaining",
14
+ "nullishCoalescingOperator"
15
+ ];
16
+ const parserOptions = Object.freeze({
17
+ plugins,
18
+ sourceType: "module"
19
+ });
20
+ const parser = babelParser.parse.bind(babelParser);
21
+ function babelParse(code) {
22
+ try {
23
+ return parser(code.toString(), parserOptions);
24
+ } catch (err) {
25
+ throw new Error(`Error parsing babel: ${err} in code`);
26
+ }
27
+ }
28
+ export {
29
+ babelParse,
30
+ parserOptions
31
+ };
32
+ //# sourceMappingURL=babelParse.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extractor/babelParse.ts"],
4
+ "sourcesContent": ["import * as babelParser from '@babel/parser'\nimport * as t from '@babel/types'\n\nconst plugins: babelParser.ParserPlugin[] = [\n 'asyncGenerators',\n 'classProperties',\n 'dynamicImport',\n 'functionBind',\n 'jsx',\n 'numericSeparator',\n 'objectRestSpread',\n 'optionalCatchBinding',\n 'decorators-legacy',\n 'typescript',\n 'optionalChaining',\n 'nullishCoalescingOperator',\n]\n\nexport const parserOptions: babelParser.ParserOptions = Object.freeze({\n plugins,\n sourceType: 'module',\n})\n\nconst parser = babelParser.parse.bind(babelParser)\n\nexport function babelParse(code: string | Buffer): t.File {\n try {\n return parser(code.toString(), parserOptions) as any\n } catch (err) {\n throw new Error(`Error parsing babel: ${err} in code`)\n }\n}\n"],
5
+ "mappings": "AAAA,YAAY,iBAAiB;AAG7B,MAAM,UAAsC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,gBAA2C,OAAO,OAAO;AAAA,EACpE;AAAA,EACA,YAAY;AACd,CAAC;AAED,MAAM,SAAS,YAAY,MAAM,KAAK,WAAW;AAE1C,SAAS,WAAW,MAA+B;AACxD,MAAI;AACF,WAAO,OAAO,KAAK,SAAS,GAAG,aAAa;AAAA,EAC9C,SAAS,KAAP;AACA,UAAM,IAAI,MAAM,wBAAwB,aAAa;AAAA,EACvD;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,65 @@
1
+ import * as t from "@babel/types";
2
+ const buildClassName = (objectsIn, extras = "") => {
3
+ let objects = buildClassNameLogic(objectsIn);
4
+ if (!objects)
5
+ return null;
6
+ if (t.isStringLiteral(objects)) {
7
+ objects.value = `${extras} ${objects.value}`;
8
+ } else {
9
+ objects = t.binaryExpression("+", t.stringLiteral(extras), objects);
10
+ }
11
+ return objects;
12
+ };
13
+ const buildClassNameLogic = (objects) => {
14
+ return objects.reduce((acc, val) => {
15
+ if (acc == null) {
16
+ if (
17
+ // pass conditional expressions through
18
+ t.isConditionalExpression(val) || // pass non-null literals through
19
+ t.isStringLiteral(val) || t.isNumericLiteral(val)
20
+ ) {
21
+ return val;
22
+ }
23
+ return t.logicalExpression("||", val, t.stringLiteral(""));
24
+ }
25
+ let inner;
26
+ if (t.isStringLiteral(val)) {
27
+ if (t.isStringLiteral(acc)) {
28
+ return t.stringLiteral(`${acc.value} ${val.value}`);
29
+ }
30
+ inner = t.stringLiteral(` ${val.value}`);
31
+ } else if (t.isLiteral(val)) {
32
+ inner = t.binaryExpression("+", t.stringLiteral(" "), val);
33
+ } else if (t.isConditionalExpression(val) || t.isBinaryExpression(val)) {
34
+ if (t.isStringLiteral(acc)) {
35
+ return t.binaryExpression("+", t.stringLiteral(`${acc.value} `), val);
36
+ }
37
+ inner = t.binaryExpression("+", t.stringLiteral(" "), val);
38
+ } else if (t.isIdentifier(val) || t.isMemberExpression(val)) {
39
+ inner = t.conditionalExpression(
40
+ val,
41
+ t.binaryExpression("+", t.stringLiteral(" "), val),
42
+ t.stringLiteral("")
43
+ );
44
+ } else {
45
+ if (t.isStringLiteral(acc)) {
46
+ return t.binaryExpression(
47
+ "+",
48
+ t.stringLiteral(`${acc.value} `),
49
+ t.logicalExpression("||", val, t.stringLiteral(""))
50
+ );
51
+ }
52
+ inner = t.binaryExpression(
53
+ "+",
54
+ t.stringLiteral(" "),
55
+ t.logicalExpression("||", val, t.stringLiteral(""))
56
+ );
57
+ }
58
+ return t.binaryExpression("+", acc, inner);
59
+ }, null);
60
+ };
61
+ export {
62
+ buildClassName,
63
+ buildClassNameLogic
64
+ };
65
+ //# sourceMappingURL=buildClassName.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extractor/buildClassName.ts"],
4
+ "sourcesContent": ["import * as t from '@babel/types'\n\nimport type { ClassNameObject } from '../types.js'\n\ntype Builder = (\n objects: ClassNameObject[],\n extras?: string\n) => t.Expression | t.StringLiteral | null\n\nexport const buildClassName: Builder = (objectsIn, extras = '') => {\n let objects = buildClassNameLogic(objectsIn)\n if (!objects) return null\n if (t.isStringLiteral(objects)) {\n // objects.value = objects.value\n objects.value = `${extras} ${objects.value}`\n } else {\n objects = t.binaryExpression('+', t.stringLiteral(extras), objects)\n }\n return objects\n}\n\nexport const buildClassNameLogic: Builder = (objects) => {\n return objects.reduce<t.Expression | null>((acc, val) => {\n if (acc == null) {\n if (\n // pass conditional expressions through\n t.isConditionalExpression(val) ||\n // pass non-null literals through\n t.isStringLiteral(val) ||\n t.isNumericLiteral(val)\n ) {\n return val\n }\n return t.logicalExpression('||', val, t.stringLiteral(''))\n }\n\n let inner: t.Expression\n if (t.isStringLiteral(val)) {\n if (t.isStringLiteral(acc)) {\n // join adjacent string literals\n return t.stringLiteral(`${acc.value} ${val.value}`)\n }\n inner = t.stringLiteral(` ${val.value}`)\n } else if (t.isLiteral(val)) {\n inner = t.binaryExpression('+', t.stringLiteral(' '), val)\n } else if (t.isConditionalExpression(val) || t.isBinaryExpression(val)) {\n if (t.isStringLiteral(acc)) {\n return t.binaryExpression('+', t.stringLiteral(`${acc.value} `), val)\n }\n inner = t.binaryExpression('+', t.stringLiteral(' '), val)\n } else if (t.isIdentifier(val) || t.isMemberExpression(val)) {\n // identifiers and member expressions make for reasonable ternaries\n inner = t.conditionalExpression(\n val,\n t.binaryExpression('+', t.stringLiteral(' '), val),\n t.stringLiteral('')\n )\n } else {\n if (t.isStringLiteral(acc)) {\n return t.binaryExpression(\n '+',\n t.stringLiteral(`${acc.value} `),\n t.logicalExpression('||', val, t.stringLiteral(''))\n )\n }\n // use a logical expression for more complex prop values\n inner = t.binaryExpression(\n '+',\n t.stringLiteral(' '),\n t.logicalExpression('||', val, t.stringLiteral(''))\n )\n }\n\n return t.binaryExpression('+', acc, inner)\n }, null)\n}\n"],
5
+ "mappings": "AAAA,YAAY,OAAO;AASZ,MAAM,iBAA0B,CAAC,WAAW,SAAS,OAAO;AACjE,MAAI,UAAU,oBAAoB,SAAS;AAC3C,MAAI,CAAC;AAAS,WAAO;AACrB,MAAI,EAAE,gBAAgB,OAAO,GAAG;AAE9B,YAAQ,QAAQ,GAAG,UAAU,QAAQ;AAAA,EACvC,OAAO;AACL,cAAU,EAAE,iBAAiB,KAAK,EAAE,cAAc,MAAM,GAAG,OAAO;AAAA,EACpE;AACA,SAAO;AACT;AAEO,MAAM,sBAA+B,CAAC,YAAY;AACvD,SAAO,QAAQ,OAA4B,CAAC,KAAK,QAAQ;AACvD,QAAI,OAAO,MAAM;AACf;AAAA;AAAA,QAEE,EAAE,wBAAwB,GAAG;AAAA,QAE7B,EAAE,gBAAgB,GAAG,KACrB,EAAE,iBAAiB,GAAG;AAAA,QACtB;AACA,eAAO;AAAA,MACT;AACA,aAAO,EAAE,kBAAkB,MAAM,KAAK,EAAE,cAAc,EAAE,CAAC;AAAA,IAC3D;AAEA,QAAI;AACJ,QAAI,EAAE,gBAAgB,GAAG,GAAG;AAC1B,UAAI,EAAE,gBAAgB,GAAG,GAAG;AAE1B,eAAO,EAAE,cAAc,GAAG,IAAI,SAAS,IAAI,OAAO;AAAA,MACpD;AACA,cAAQ,EAAE,cAAc,IAAI,IAAI,OAAO;AAAA,IACzC,WAAW,EAAE,UAAU,GAAG,GAAG;AAC3B,cAAQ,EAAE,iBAAiB,KAAK,EAAE,cAAc,GAAG,GAAG,GAAG;AAAA,IAC3D,WAAW,EAAE,wBAAwB,GAAG,KAAK,EAAE,mBAAmB,GAAG,GAAG;AACtE,UAAI,EAAE,gBAAgB,GAAG,GAAG;AAC1B,eAAO,EAAE,iBAAiB,KAAK,EAAE,cAAc,GAAG,IAAI,QAAQ,GAAG,GAAG;AAAA,MACtE;AACA,cAAQ,EAAE,iBAAiB,KAAK,EAAE,cAAc,GAAG,GAAG,GAAG;AAAA,IAC3D,WAAW,EAAE,aAAa,GAAG,KAAK,EAAE,mBAAmB,GAAG,GAAG;AAE3D,cAAQ,EAAE;AAAA,QACR;AAAA,QACA,EAAE,iBAAiB,KAAK,EAAE,cAAc,GAAG,GAAG,GAAG;AAAA,QACjD,EAAE,cAAc,EAAE;AAAA,MACpB;AAAA,IACF,OAAO;AACL,UAAI,EAAE,gBAAgB,GAAG,GAAG;AAC1B,eAAO,EAAE;AAAA,UACP;AAAA,UACA,EAAE,cAAc,GAAG,IAAI,QAAQ;AAAA,UAC/B,EAAE,kBAAkB,MAAM,KAAK,EAAE,cAAc,EAAE,CAAC;AAAA,QACpD;AAAA,MACF;AAEA,cAAQ,EAAE;AAAA,QACR;AAAA,QACA,EAAE,cAAc,GAAG;AAAA,QACnB,EAAE,kBAAkB,MAAM,KAAK,EAAE,cAAc,EAAE,CAAC;AAAA,MACpD;AAAA,IACF;AAEA,WAAO,EAAE,iBAAiB,KAAK,KAAK,KAAK;AAAA,EAC3C,GAAG,IAAI;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,86 @@
1
+ import { basename, dirname, join } from "path";
2
+ import esbuild from "esbuild";
3
+ import { pathExists, stat, writeFile } from "fs-extra";
4
+ import { resolveWebOrNativeSpecificEntry } from "./loadTamagui.js";
5
+ function getESBuildConfig({ entryPoints, resolvePlatformSpecificEntries, ...options }, aliases) {
6
+ var _a;
7
+ const alias = require("@tamagui/core-node").aliasPlugin;
8
+ if ((_a = process.env.DEBUG) == null ? void 0 : _a.startsWith("tamagui")) {
9
+ console.log(`Building`, entryPoints);
10
+ }
11
+ const tsconfig = join(__dirname, "..", "..", "..", "tamagui.tsconfig.json");
12
+ const resolvedEntryPoints = !resolvePlatformSpecificEntries ? entryPoints : entryPoints.map(resolveWebOrNativeSpecificEntry);
13
+ const res = {
14
+ bundle: true,
15
+ entryPoints: resolvedEntryPoints,
16
+ format: "cjs",
17
+ target: "node18",
18
+ jsx: "transform",
19
+ jsxFactory: "react",
20
+ allowOverwrite: true,
21
+ keepNames: true,
22
+ platform: "node",
23
+ tsconfig,
24
+ loader: {
25
+ ".js": "jsx"
26
+ },
27
+ logLevel: "warning",
28
+ plugins: [
29
+ {
30
+ name: "external",
31
+ setup(build) {
32
+ build.onResolve({ filter: /@tamagui\/core/ }, (args) => {
33
+ return {
34
+ path: "@tamagui/core-node",
35
+ external: true
36
+ };
37
+ });
38
+ build.onResolve({ filter: /^(react-native|react-native\/.*)$/ }, (args) => {
39
+ return {
40
+ path: "react-native-web-lite",
41
+ external: true
42
+ };
43
+ });
44
+ }
45
+ },
46
+ alias({
47
+ ...aliases
48
+ })
49
+ ],
50
+ ...options
51
+ };
52
+ return res;
53
+ }
54
+ async function bundle(props, aliases) {
55
+ await asyncLock(props);
56
+ return esbuild.build(getESBuildConfig(props, aliases));
57
+ }
58
+ function bundleSync(props, aliases) {
59
+ return esbuild.buildSync(getESBuildConfig(props, aliases));
60
+ }
61
+ async function asyncLock(props) {
62
+ var _a;
63
+ const lockFile = join(dirname(props.outfile), basename(props.outfile, ".lock"));
64
+ const lockStat = await stat(lockFile).catch(() => {
65
+ });
66
+ const lockedMsAgo = !lockStat ? Infinity : (/* @__PURE__ */ new Date()).getTime() - new Date(lockStat.mtime).getTime();
67
+ if (lockedMsAgo < 500) {
68
+ if ((_a = process.env.DEBUG) == null ? void 0 : _a.startsWith("tamagui")) {
69
+ console.log(`Waiting for existing build`, props.entryPoints);
70
+ }
71
+ let tries = 5;
72
+ while (tries--) {
73
+ if (await pathExists(props.outfile)) {
74
+ return;
75
+ } else {
76
+ await new Promise((res) => setTimeout(res, 50));
77
+ }
78
+ }
79
+ }
80
+ void writeFile(lockFile, "");
81
+ }
82
+ export {
83
+ bundle,
84
+ bundleSync
85
+ };
86
+ //# sourceMappingURL=bundle.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extractor/bundle.ts"],
4
+ "sourcesContent": ["import { basename, dirname, join } from 'path'\n\nimport esbuild from 'esbuild'\nimport { pathExists, stat, writeFile } from 'fs-extra'\n\nimport { resolveWebOrNativeSpecificEntry } from './loadTamagui.js'\n\n/**\n * For internal loading of new files\n */\n\ntype Props = Omit<Partial<esbuild.BuildOptions>, 'entryPoints'> & {\n outfile: string\n entryPoints: string[]\n resolvePlatformSpecificEntries?: boolean\n}\n\nfunction getESBuildConfig(\n { entryPoints, resolvePlatformSpecificEntries, ...options }: Props,\n aliases?: Record<string, string>\n) {\n const alias = require('@tamagui/core-node').aliasPlugin\n if (process.env.DEBUG?.startsWith('tamagui')) {\n // eslint-disable-next-line no-console\n console.log(`Building`, entryPoints)\n }\n const tsconfig = join(__dirname, '..', '..', '..', 'tamagui.tsconfig.json')\n\n const resolvedEntryPoints = !resolvePlatformSpecificEntries\n ? entryPoints\n : entryPoints.map(resolveWebOrNativeSpecificEntry)\n\n const res: esbuild.BuildOptions = {\n bundle: true,\n entryPoints: resolvedEntryPoints,\n format: 'cjs',\n target: 'node18',\n jsx: 'transform',\n jsxFactory: 'react',\n allowOverwrite: true,\n keepNames: true,\n platform: 'node',\n tsconfig,\n loader: {\n '.js': 'jsx',\n },\n logLevel: 'warning',\n plugins: [\n {\n name: 'external',\n setup(build) {\n build.onResolve({ filter: /@tamagui\\/core/ }, (args) => {\n return {\n path: '@tamagui/core-node',\n external: true,\n }\n })\n\n build.onResolve({ filter: /^(react-native|react-native\\/.*)$/ }, (args) => {\n return {\n path: 'react-native-web-lite',\n external: true,\n }\n })\n },\n },\n alias({\n ...aliases,\n }),\n ],\n ...options,\n }\n\n return res\n}\n\nexport async function bundle(props: Props, aliases?: Record<string, string>) {\n await asyncLock(props)\n return esbuild.build(getESBuildConfig(props, aliases))\n}\n\nexport function bundleSync(props: Props, aliases?: Record<string, string>) {\n return esbuild.buildSync(getESBuildConfig(props, aliases))\n}\n\n// until i do fancier things w plugins:\nasync function asyncLock(props: Props) {\n const lockFile = join(dirname(props.outfile), basename(props.outfile, '.lock'))\n const lockStat = await stat(lockFile).catch(() => {\n /* ok */\n })\n const lockedMsAgo = !lockStat\n ? Infinity\n : new Date().getTime() - new Date(lockStat.mtime).getTime()\n if (lockedMsAgo < 500) {\n if (process.env.DEBUG?.startsWith('tamagui')) {\n // eslint-disable-next-line no-console\n console.log(`Waiting for existing build`, props.entryPoints)\n }\n let tries = 5\n while (tries--) {\n if (await pathExists(props.outfile)) {\n return\n } else {\n await new Promise((res) => setTimeout(res, 50))\n }\n }\n }\n void writeFile(lockFile, '')\n}\n"],
5
+ "mappings": "AAAA,SAAS,UAAU,SAAS,YAAY;AAExC,OAAO,aAAa;AACpB,SAAS,YAAY,MAAM,iBAAiB;AAE5C,SAAS,uCAAuC;AAYhD,SAAS,iBACP,EAAE,aAAa,gCAAgC,GAAG,QAAQ,GAC1D,SACA;AApBF;AAqBE,QAAM,QAAQ,QAAQ,oBAAoB,EAAE;AAC5C,OAAI,aAAQ,IAAI,UAAZ,mBAAmB,WAAW,YAAY;AAE5C,YAAQ,IAAI,YAAY,WAAW;AAAA,EACrC;AACA,QAAM,WAAW,KAAK,WAAW,MAAM,MAAM,MAAM,uBAAuB;AAE1E,QAAM,sBAAsB,CAAC,iCACzB,cACA,YAAY,IAAI,+BAA+B;AAEnD,QAAM,MAA4B;AAAA,IAChC,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,UAAU;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,IACV,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM,OAAO;AACX,gBAAM,UAAU,EAAE,QAAQ,iBAAiB,GAAG,CAAC,SAAS;AACtD,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,UAAU;AAAA,YACZ;AAAA,UACF,CAAC;AAED,gBAAM,UAAU,EAAE,QAAQ,oCAAoC,GAAG,CAAC,SAAS;AACzE,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,UAAU;AAAA,YACZ;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IACA,GAAG;AAAA,EACL;AAEA,SAAO;AACT;AAEA,eAAsB,OAAO,OAAc,SAAkC;AAC3E,QAAM,UAAU,KAAK;AACrB,SAAO,QAAQ,MAAM,iBAAiB,OAAO,OAAO,CAAC;AACvD;AAEO,SAAS,WAAW,OAAc,SAAkC;AACzE,SAAO,QAAQ,UAAU,iBAAiB,OAAO,OAAO,CAAC;AAC3D;AAGA,eAAe,UAAU,OAAc;AAtFvC;AAuFE,QAAM,WAAW,KAAK,QAAQ,MAAM,OAAO,GAAG,SAAS,MAAM,SAAS,OAAO,CAAC;AAC9E,QAAM,WAAW,MAAM,KAAK,QAAQ,EAAE,MAAM,MAAM;AAAA,EAElD,CAAC;AACD,QAAM,cAAc,CAAC,WACjB,YACA,oBAAI,KAAK,GAAE,QAAQ,IAAI,IAAI,KAAK,SAAS,KAAK,EAAE,QAAQ;AAC5D,MAAI,cAAc,KAAK;AACrB,SAAI,aAAQ,IAAI,UAAZ,mBAAmB,WAAW,YAAY;AAE5C,cAAQ,IAAI,8BAA8B,MAAM,WAAW;AAAA,IAC7D;AACA,QAAI,QAAQ;AACZ,WAAO,SAAS;AACd,UAAI,MAAM,WAAW,MAAM,OAAO,GAAG;AACnC;AAAA,MACF,OAAO;AACL,cAAM,IAAI,QAAQ,CAAC,QAAQ,WAAW,KAAK,EAAE,CAAC;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AACA,OAAK,UAAU,UAAU,EAAE;AAC7B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,52 @@
1
+ import vm from "vm";
2
+ import generate from "@babel/generator";
3
+ import * as t from "@babel/types";
4
+ import { createCSSVariable } from "@tamagui/core-node";
5
+ import esbuild from "esbuild";
6
+ import { FAILED_EVAL } from "../constants.js";
7
+ import { evaluateAstNode } from "./evaluateAstNode.js";
8
+ import { isValidThemeHook } from "./extractHelpers.js";
9
+ function createEvaluator({
10
+ props,
11
+ staticNamespace,
12
+ sourcePath,
13
+ traversePath,
14
+ shouldPrintDebug
15
+ }) {
16
+ const evalFn = (n) => {
17
+ if (t.isMemberExpression(n) && t.isIdentifier(n.property) && traversePath && isValidThemeHook(props, traversePath, n, sourcePath)) {
18
+ const key = n.property.name;
19
+ if (shouldPrintDebug) {
20
+ console.log(" > found theme prop", key);
21
+ }
22
+ return createCSSVariable(key);
23
+ }
24
+ if (t.isIdentifier(n) && typeof staticNamespace[n.name] !== "undefined") {
25
+ return staticNamespace[n.name];
26
+ }
27
+ const evalContext = vm.createContext(staticNamespace);
28
+ const codeWithTypescriptAnnotations = `(${generate(n).code})`;
29
+ const code = esbuild.transformSync(codeWithTypescriptAnnotations, { loader: "tsx" }).code.replace(/;\n$/, "");
30
+ if (shouldPrintDebug) {
31
+ console.log("evaluating", code);
32
+ }
33
+ return vm.runInContext(code, evalContext);
34
+ };
35
+ return (n) => {
36
+ return evaluateAstNode(n, evalFn);
37
+ };
38
+ }
39
+ function createSafeEvaluator(attemptEval) {
40
+ return (n) => {
41
+ try {
42
+ return attemptEval(n);
43
+ } catch (err) {
44
+ return FAILED_EVAL;
45
+ }
46
+ };
47
+ }
48
+ export {
49
+ createEvaluator,
50
+ createSafeEvaluator
51
+ };
52
+ //# sourceMappingURL=createEvaluator.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extractor/createEvaluator.ts"],
4
+ "sourcesContent": ["import vm from 'vm'\n\nimport generate from '@babel/generator'\nimport { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport { createCSSVariable } from '@tamagui/core-node'\nimport esbuild from 'esbuild'\n\nimport { FAILED_EVAL } from '../constants.js'\nimport { TamaguiOptionsWithFileInfo } from '../types.js'\nimport { evaluateAstNode } from './evaluateAstNode.js'\nimport { isValidThemeHook } from './extractHelpers.js'\n\nexport function createEvaluator({\n props,\n staticNamespace,\n sourcePath,\n traversePath,\n shouldPrintDebug,\n}: {\n props: TamaguiOptionsWithFileInfo\n staticNamespace: Record<string, any>\n sourcePath?: string\n traversePath?: NodePath<t.JSXElement>\n shouldPrintDebug: boolean | 'verbose'\n}) {\n // called when evaluateAstNode encounters a dynamic-looking prop\n const evalFn = (n: t.Node) => {\n // themes\n if (\n t.isMemberExpression(n) &&\n t.isIdentifier(n.property) &&\n traversePath &&\n isValidThemeHook(props, traversePath, n, sourcePath)\n ) {\n const key = n.property.name\n if (shouldPrintDebug) {\n // eslint-disable-next-line no-console\n console.log(' > found theme prop', key)\n }\n return createCSSVariable(key)\n }\n // variable\n if (t.isIdentifier(n) && typeof staticNamespace[n.name] !== 'undefined') {\n return staticNamespace[n.name]\n }\n const evalContext = vm.createContext(staticNamespace)\n // @ts-ignore\n const codeWithTypescriptAnnotations = `(${generate(n as any).code})`\n const code = esbuild\n .transformSync(codeWithTypescriptAnnotations, { loader: 'tsx' })\n .code.replace(/;\\n$/, '')\n\n if (shouldPrintDebug) {\n // eslint-disable-next-line no-console\n console.log('evaluating', code)\n }\n return vm.runInContext(code, evalContext)\n }\n\n return (n: t.Node) => {\n return evaluateAstNode(n, evalFn)\n }\n}\n\nexport function createSafeEvaluator(attemptEval: (n: t.Node) => any) {\n return (n: t.Node) => {\n try {\n return attemptEval(n)\n } catch (err) {\n return FAILED_EVAL\n }\n }\n}\n"],
5
+ "mappings": "AAAA,OAAO,QAAQ;AAEf,OAAO,cAAc;AAErB,YAAY,OAAO;AACnB,SAAS,yBAAyB;AAClC,OAAO,aAAa;AAEpB,SAAS,mBAAmB;AAE5B,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AAE1B,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AAED,QAAM,SAAS,CAAC,MAAc;AAE5B,QACE,EAAE,mBAAmB,CAAC,KACtB,EAAE,aAAa,EAAE,QAAQ,KACzB,gBACA,iBAAiB,OAAO,cAAc,GAAG,UAAU,GACnD;AACA,YAAM,MAAM,EAAE,SAAS;AACvB,UAAI,kBAAkB;AAEpB,gBAAQ,IAAI,0BAA0B,GAAG;AAAA,MAC3C;AACA,aAAO,kBAAkB,GAAG;AAAA,IAC9B;AAEA,QAAI,EAAE,aAAa,CAAC,KAAK,OAAO,gBAAgB,EAAE,IAAI,MAAM,aAAa;AACvE,aAAO,gBAAgB,EAAE,IAAI;AAAA,IAC/B;AACA,UAAM,cAAc,GAAG,cAAc,eAAe;AAEpD,UAAM,gCAAgC,IAAI,SAAS,CAAQ,EAAE;AAC7D,UAAM,OAAO,QACV,cAAc,+BAA+B,EAAE,QAAQ,MAAM,CAAC,EAC9D,KAAK,QAAQ,QAAQ,EAAE;AAE1B,QAAI,kBAAkB;AAEpB,cAAQ,IAAI,cAAc,IAAI;AAAA,IAChC;AACA,WAAO,GAAG,aAAa,MAAM,WAAW;AAAA,EAC1C;AAEA,SAAO,CAAC,MAAc;AACpB,WAAO,gBAAgB,GAAG,MAAM;AAAA,EAClC;AACF;AAEO,SAAS,oBAAoB,aAAiC;AACnE,SAAO,CAAC,MAAc;AACpB,QAAI;AACF,aAAO,YAAY,CAAC;AAAA,IACtB,SAAS,KAAP;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }