@tamagui/static 1.1.7 → 1.1.9

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 (155) hide show
  1. package/dist/{constants.js → cjs/constants.js} +4 -0
  2. package/dist/{constants.js.map → cjs/constants.js.map} +2 -2
  3. package/dist/{extractor → cjs/extractor}/accessSafe.js +7 -0
  4. package/dist/cjs/extractor/accessSafe.js.map +7 -0
  5. package/dist/{extractor → cjs/extractor}/babelParse.js +4 -0
  6. package/dist/cjs/extractor/babelParse.js.map +7 -0
  7. package/dist/{extractor → cjs/extractor}/buildClassName.js +9 -1
  8. package/dist/cjs/extractor/buildClassName.js.map +7 -0
  9. package/dist/{extractor → cjs/extractor}/bundle.js +7 -3
  10. package/dist/cjs/extractor/bundle.js.map +7 -0
  11. package/dist/{extractor → cjs/extractor}/createEvaluator.js +4 -0
  12. package/dist/cjs/extractor/createEvaluator.js.map +7 -0
  13. package/dist/{extractor → cjs/extractor}/createExtractor.js +34 -6
  14. package/dist/cjs/extractor/createExtractor.js.map +7 -0
  15. package/dist/{extractor → cjs/extractor}/ensureImportingConcat.js +4 -0
  16. package/dist/cjs/extractor/ensureImportingConcat.js.map +7 -0
  17. package/dist/{extractor → cjs/extractor}/evaluateAstNode.js +4 -0
  18. package/dist/cjs/extractor/evaluateAstNode.js.map +7 -0
  19. package/dist/{extractor → cjs/extractor}/extractHelpers.js +8 -1
  20. package/dist/cjs/extractor/extractHelpers.js.map +7 -0
  21. package/dist/{extractor → cjs/extractor}/extractMediaStyle.js +4 -0
  22. package/dist/cjs/extractor/extractMediaStyle.js.map +7 -0
  23. package/dist/{extractor → cjs/extractor}/extractToClassNames.js +6 -3
  24. package/dist/cjs/extractor/extractToClassNames.js.map +7 -0
  25. package/dist/{extractor → cjs/extractor}/findTopmostFunction.js +0 -0
  26. package/dist/{extractor → cjs/extractor}/findTopmostFunction.js.map +1 -1
  27. package/dist/{extractor → cjs/extractor}/generatedUid.js +4 -0
  28. package/dist/cjs/extractor/generatedUid.js.map +7 -0
  29. package/dist/{extractor → cjs/extractor}/getPrefixLogs.js +0 -0
  30. package/dist/{extractor → cjs/extractor}/getPrefixLogs.js.map +1 -1
  31. package/dist/{extractor → cjs/extractor}/getPropValueFromAttributes.js +8 -1
  32. package/dist/cjs/extractor/getPropValueFromAttributes.js.map +7 -0
  33. package/dist/{extractor → cjs/extractor}/getSourceModule.js +9 -1
  34. package/dist/cjs/extractor/getSourceModule.js.map +7 -0
  35. package/dist/{extractor → cjs/extractor}/getStaticBindingsForScope.js +4 -0
  36. package/dist/cjs/extractor/getStaticBindingsForScope.js.map +7 -0
  37. package/dist/{extractor → cjs/extractor}/hoistClassNames.js +5 -0
  38. package/dist/cjs/extractor/hoistClassNames.js.map +7 -0
  39. package/dist/{extractor → cjs/extractor}/literalToAst.js +5 -0
  40. package/dist/cjs/extractor/literalToAst.js.map +7 -0
  41. package/dist/{extractor → cjs/extractor}/loadFile.js +0 -0
  42. package/dist/{extractor → cjs/extractor}/loadFile.js.map +1 -1
  43. package/dist/{extractor → cjs/extractor}/loadTamagui.js +12 -5
  44. package/dist/cjs/extractor/loadTamagui.js.map +7 -0
  45. package/dist/{extractor → cjs/extractor}/logLines.js +0 -0
  46. package/dist/{extractor → cjs/extractor}/logLines.js.map +2 -2
  47. package/dist/{extractor → cjs/extractor}/normalizeTernaries.js +4 -0
  48. package/dist/cjs/extractor/normalizeTernaries.js.map +7 -0
  49. package/dist/{extractor → cjs/extractor}/removeUnusedHooks.js +4 -0
  50. package/dist/cjs/extractor/removeUnusedHooks.js.map +7 -0
  51. package/dist/{extractor → cjs/extractor}/timer.js +0 -0
  52. package/dist/{extractor → cjs/extractor}/timer.js.map +1 -1
  53. package/dist/{extractor → cjs/extractor}/validHTMLAttributes.js +0 -0
  54. package/dist/{extractor → cjs/extractor}/validHTMLAttributes.js.map +1 -1
  55. package/dist/{getPragmaOptions.js → cjs/getPragmaOptions.js} +0 -0
  56. package/dist/{getPragmaOptions.js.map → cjs/getPragmaOptions.js.map} +2 -2
  57. package/dist/{helpers → cjs/helpers}/memoize.js +0 -0
  58. package/dist/{helpers → cjs/helpers}/memoize.js.map +2 -2
  59. package/dist/{index.js → cjs/index.js} +0 -0
  60. package/dist/{index.js.map → cjs/index.js.map} +1 -1
  61. package/dist/{require.js → cjs/require.js} +2 -1
  62. package/dist/{require.js.map → cjs/require.js.map} +2 -2
  63. package/dist/{types.js → cjs/types.js} +0 -0
  64. package/dist/cjs/types.js.map +7 -0
  65. package/dist/{webpackPlugin.js → cjs/webpackPlugin.js} +0 -0
  66. package/dist/{webpackPlugin.js.map → cjs/webpackPlugin.js.map} +1 -1
  67. package/dist/esm/constants.js +15 -0
  68. package/dist/esm/constants.js.map +7 -0
  69. package/dist/esm/extractor/accessSafe.js +19 -0
  70. package/dist/{extractor → esm/extractor}/accessSafe.js.map +2 -2
  71. package/dist/esm/extractor/babelParse.js +32 -0
  72. package/dist/{extractor → esm/extractor}/babelParse.js.map +2 -2
  73. package/dist/esm/extractor/buildClassName.js +65 -0
  74. package/dist/{extractor → esm/extractor}/buildClassName.js.map +2 -2
  75. package/dist/esm/extractor/bundle.js +86 -0
  76. package/dist/esm/extractor/bundle.js.map +7 -0
  77. package/dist/esm/extractor/createEvaluator.js +52 -0
  78. package/dist/esm/extractor/createEvaluator.js.map +7 -0
  79. package/dist/esm/extractor/createExtractor.js +1612 -0
  80. package/dist/esm/extractor/createExtractor.js.map +7 -0
  81. package/dist/esm/extractor/ensureImportingConcat.js +31 -0
  82. package/dist/{extractor → esm/extractor}/ensureImportingConcat.js.map +2 -2
  83. package/dist/esm/extractor/evaluateAstNode.js +97 -0
  84. package/dist/{extractor → esm/extractor}/evaluateAstNode.js.map +2 -2
  85. package/dist/esm/extractor/extractHelpers.js +162 -0
  86. package/dist/esm/extractor/extractHelpers.js.map +7 -0
  87. package/dist/esm/extractor/extractMediaStyle.js +159 -0
  88. package/dist/{extractor → esm/extractor}/extractMediaStyle.js.map +2 -2
  89. package/dist/esm/extractor/extractToClassNames.js +381 -0
  90. package/dist/esm/extractor/extractToClassNames.js.map +7 -0
  91. package/dist/esm/extractor/findTopmostFunction.js +20 -0
  92. package/dist/esm/extractor/findTopmostFunction.js.map +7 -0
  93. package/dist/esm/extractor/generatedUid.js +26 -0
  94. package/dist/{extractor → esm/extractor}/generatedUid.js.map +2 -2
  95. package/dist/esm/extractor/getPrefixLogs.js +8 -0
  96. package/dist/esm/extractor/getPrefixLogs.js.map +7 -0
  97. package/dist/esm/extractor/getPropValueFromAttributes.js +56 -0
  98. package/dist/{extractor → esm/extractor}/getPropValueFromAttributes.js.map +4 -4
  99. package/dist/esm/extractor/getSourceModule.js +70 -0
  100. package/dist/{extractor → esm/extractor}/getSourceModule.js.map +2 -2
  101. package/dist/esm/extractor/getStaticBindingsForScope.js +191 -0
  102. package/dist/{extractor → esm/extractor}/getStaticBindingsForScope.js.map +2 -2
  103. package/dist/esm/extractor/hoistClassNames.js +41 -0
  104. package/dist/{extractor → esm/extractor}/hoistClassNames.js.map +2 -2
  105. package/dist/esm/extractor/literalToAst.js +81 -0
  106. package/dist/{extractor → esm/extractor}/literalToAst.js.map +2 -2
  107. package/dist/esm/extractor/loadFile.js +20 -0
  108. package/dist/esm/extractor/loadFile.js.map +7 -0
  109. package/dist/esm/extractor/loadTamagui.js +411 -0
  110. package/dist/esm/extractor/loadTamagui.js.map +7 -0
  111. package/dist/esm/extractor/logLines.js +20 -0
  112. package/dist/esm/extractor/logLines.js.map +7 -0
  113. package/dist/esm/extractor/normalizeTernaries.js +52 -0
  114. package/dist/esm/extractor/normalizeTernaries.js.map +7 -0
  115. package/dist/esm/extractor/removeUnusedHooks.js +76 -0
  116. package/dist/{extractor → esm/extractor}/removeUnusedHooks.js.map +2 -2
  117. package/dist/esm/extractor/timer.js +29 -0
  118. package/dist/esm/extractor/timer.js.map +7 -0
  119. package/dist/esm/extractor/validHTMLAttributes.js +102 -0
  120. package/dist/esm/extractor/validHTMLAttributes.js.map +7 -0
  121. package/dist/esm/getPragmaOptions.js +44 -0
  122. package/dist/esm/getPragmaOptions.js.map +7 -0
  123. package/dist/esm/helpers/memoize.js +22 -0
  124. package/dist/esm/helpers/memoize.js.map +7 -0
  125. package/dist/esm/index.js +16 -0
  126. package/dist/esm/index.js.map +7 -0
  127. package/dist/esm/require.js +61 -0
  128. package/dist/esm/require.js.map +7 -0
  129. package/dist/esm/types.js +1 -0
  130. package/dist/esm/types.js.map +7 -0
  131. package/dist/esm/webpackPlugin.js +11 -0
  132. package/dist/esm/webpackPlugin.js.map +7 -0
  133. package/package.json +18 -18
  134. package/src/extractor/bundle.ts +2 -2
  135. package/src/extractor/createEvaluator.ts +1 -0
  136. package/src/extractor/createExtractor.ts +1 -0
  137. package/src/extractor/extractHelpers.ts +14 -5
  138. package/src/extractor/extractToClassNames.ts +2 -2
  139. package/src/extractor/getPropValueFromAttributes.ts +4 -1
  140. package/src/extractor/loadTamagui.ts +12 -7
  141. package/src/extractor/normalizeTernaries.ts +1 -0
  142. package/src/types.ts +7 -4
  143. package/types/extractor/bundle.d.ts +2 -2
  144. package/types/extractor/createExtractor.d.ts +1 -1
  145. package/types/extractor/extractHelpers.d.ts +2 -6
  146. package/types/extractor/getPrefixLogs.d.ts +1 -1
  147. package/types/types.d.ts +3 -3
  148. package/dist/extractor/bundle.js.map +0 -7
  149. package/dist/extractor/createEvaluator.js.map +0 -7
  150. package/dist/extractor/createExtractor.js.map +0 -7
  151. package/dist/extractor/extractHelpers.js.map +0 -7
  152. package/dist/extractor/extractToClassNames.js.map +0 -7
  153. package/dist/extractor/loadTamagui.js.map +0 -7
  154. package/dist/extractor/normalizeTernaries.js.map +0 -7
  155. package/dist/types.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/extractor/accessSafe.ts"],
3
+ "sources": ["../../../src/extractor/accessSafe.ts"],
4
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;AAAA;AAAA;AAAA;AAAA;AAAA,QAAmB;AAIZ,SAAS,WAAW,KAAmB,QAAqC;AACjF,SAAO,EAAE;AAAA,IACP;AAAA,IACA,EAAE;AAAA,MACA;AAAA,MAEA,EAAE,iBAAiB,OAAO,EAAE,gBAAgB,UAAU,GAAG,GAAG,EAAE,cAAc,QAAQ,CAAC;AAAA,MAErF,EAAE,iBAAiB,OAAO,KAAK,EAAE,YAAY,CAAC;AAAA,IAChD;AAAA,IAEA,EAAE,iBAAiB,KAAK,EAAE,WAAW,MAAM,GAAG,KAAK;AAAA,EACrD;AACF;",
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
6
  "names": []
7
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.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/extractor/babelParse.ts"],
3
+ "sources": ["../../../src/extractor/babelParse.ts"],
4
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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA6B;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;",
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
6
  "names": []
7
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.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/extractor/buildClassName.ts"],
3
+ "sources": ["../../../src/extractor/buildClassName.ts"],
4
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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAmB;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,UAEE,EAAE,wBAAwB,GAAG,KAE7B,EAAE,gBAAgB,GAAG,KACrB,EAAE,iBAAiB,GAAG,GACtB;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;",
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
6
  "names": []
7
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.js.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.js.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
+ }