@tamagui/static 1.2.9 → 1.2.11
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/esm/constants.mjs +15 -0
- package/dist/esm/constants.mjs.map +7 -0
- package/dist/esm/extractor/accessSafe.mjs +19 -0
- package/dist/esm/extractor/accessSafe.mjs.map +7 -0
- package/dist/esm/extractor/babelParse.mjs +32 -0
- package/dist/esm/extractor/babelParse.mjs.map +7 -0
- package/dist/esm/extractor/buildClassName.mjs +65 -0
- package/dist/esm/extractor/buildClassName.mjs.map +7 -0
- package/dist/esm/extractor/bundle.mjs +86 -0
- package/dist/esm/extractor/bundle.mjs.map +7 -0
- package/dist/esm/extractor/createEvaluator.mjs +52 -0
- package/dist/esm/extractor/createEvaluator.mjs.map +7 -0
- package/dist/esm/extractor/createExtractor.mjs +1610 -0
- package/dist/esm/extractor/createExtractor.mjs.map +7 -0
- package/dist/esm/extractor/ensureImportingConcat.mjs +31 -0
- package/dist/esm/extractor/ensureImportingConcat.mjs.map +7 -0
- package/dist/esm/extractor/evaluateAstNode.mjs +97 -0
- package/dist/esm/extractor/evaluateAstNode.mjs.map +7 -0
- package/dist/esm/extractor/extractHelpers.mjs +162 -0
- package/dist/esm/extractor/extractHelpers.mjs.map +7 -0
- package/dist/esm/extractor/extractMediaStyle.mjs +159 -0
- package/dist/esm/extractor/extractMediaStyle.mjs.map +7 -0
- package/dist/esm/extractor/extractToClassNames.mjs +381 -0
- package/dist/esm/extractor/extractToClassNames.mjs.map +7 -0
- package/dist/esm/extractor/findTopmostFunction.mjs +20 -0
- package/dist/esm/extractor/findTopmostFunction.mjs.map +7 -0
- package/dist/esm/extractor/generatedUid.mjs +26 -0
- package/dist/esm/extractor/generatedUid.mjs.map +7 -0
- package/dist/esm/extractor/getPrefixLogs.mjs +8 -0
- package/dist/esm/extractor/getPrefixLogs.mjs.map +7 -0
- package/dist/esm/extractor/getPropValueFromAttributes.mjs +56 -0
- package/dist/esm/extractor/getPropValueFromAttributes.mjs.map +7 -0
- package/dist/esm/extractor/getSourceModule.mjs +70 -0
- package/dist/esm/extractor/getSourceModule.mjs.map +7 -0
- package/dist/esm/extractor/getStaticBindingsForScope.mjs +191 -0
- package/dist/esm/extractor/getStaticBindingsForScope.mjs.map +7 -0
- package/dist/esm/extractor/hoistClassNames.mjs +41 -0
- package/dist/esm/extractor/hoistClassNames.mjs.map +7 -0
- package/dist/esm/extractor/literalToAst.mjs +81 -0
- package/dist/esm/extractor/literalToAst.mjs.map +7 -0
- package/dist/esm/extractor/loadFile.mjs +20 -0
- package/dist/esm/extractor/loadFile.mjs.map +7 -0
- package/dist/esm/extractor/loadTamagui.mjs +411 -0
- package/dist/esm/extractor/loadTamagui.mjs.map +7 -0
- package/dist/esm/extractor/logLines.mjs +20 -0
- package/dist/esm/extractor/logLines.mjs.map +7 -0
- package/dist/esm/extractor/normalizeTernaries.mjs +52 -0
- package/dist/esm/extractor/normalizeTernaries.mjs.map +7 -0
- package/dist/esm/extractor/removeUnusedHooks.mjs +76 -0
- package/dist/esm/extractor/removeUnusedHooks.mjs.map +7 -0
- package/dist/esm/extractor/timer.mjs +29 -0
- package/dist/esm/extractor/timer.mjs.map +7 -0
- package/dist/esm/extractor/validHTMLAttributes.mjs +102 -0
- package/dist/esm/extractor/validHTMLAttributes.mjs.map +7 -0
- package/dist/esm/getPragmaOptions.mjs +44 -0
- package/dist/esm/getPragmaOptions.mjs.map +7 -0
- package/dist/esm/helpers/memoize.mjs +22 -0
- package/dist/esm/helpers/memoize.mjs.map +7 -0
- package/dist/esm/index.mjs +16 -0
- package/dist/esm/index.mjs.map +7 -0
- package/dist/esm/require.mjs +61 -0
- package/dist/esm/require.mjs.map +7 -0
- package/dist/esm/types.mjs +1 -0
- package/dist/esm/types.mjs.map +7 -0
- package/dist/esm/webpackPlugin.mjs +11 -0
- package/dist/esm/webpackPlugin.mjs.map +7 -0
- 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
|
+
}
|