@tamagui/static 1.0.1-beta.197 → 1.0.1-beta.199
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/extractor/extractHelpers.js +3 -3
- package/dist/extractor/extractHelpers.js.map +2 -2
- package/dist/extractor/loadTamagui.js +1 -1
- package/dist/extractor/loadTamagui.js.map +2 -2
- package/dist/helpers/memoize.js +46 -0
- package/dist/helpers/memoize.js.map +7 -0
- package/package.json +21 -21
- package/src/extractor/extractHelpers.ts +1 -1
- package/src/extractor/loadTamagui.ts +1 -1
- package/src/helpers/memoize.ts +21 -0
- package/types/helpers/memoize.d.ts +8 -0
|
@@ -43,7 +43,7 @@ var import_path = require("path");
|
|
|
43
43
|
var import_generator = __toESM(require("@babel/generator"));
|
|
44
44
|
var t = __toESM(require("@babel/types"));
|
|
45
45
|
var import_find_root = __toESM(require("find-root"));
|
|
46
|
-
var
|
|
46
|
+
var import_memoize = require("../helpers/memoize.js");
|
|
47
47
|
function isPresent(input) {
|
|
48
48
|
return input != null;
|
|
49
49
|
}
|
|
@@ -171,10 +171,10 @@ const isValidImport = (props, moduleName, componentName) => {
|
|
|
171
171
|
}
|
|
172
172
|
return Boolean(getValidImport(props, moduleName, componentName));
|
|
173
173
|
};
|
|
174
|
-
const getValidComponentPackages = (0,
|
|
174
|
+
const getValidComponentPackages = (0, import_memoize.memoize)((props) => {
|
|
175
175
|
return [.../* @__PURE__ */ new Set(["@tamagui/core", "tamagui", ...props.components])];
|
|
176
176
|
});
|
|
177
|
-
const getValidComponentsPaths = (0,
|
|
177
|
+
const getValidComponentsPaths = (0, import_memoize.memoize)((props) => {
|
|
178
178
|
return getValidComponentPackages(props).map((pkg) => {
|
|
179
179
|
const root = (0, import_find_root.default)(pkg);
|
|
180
180
|
return (0, import_path.basename)(root);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/extractor/extractHelpers.ts"],
|
|
4
|
-
"sourcesContent": ["import { basename, relative } from 'path'\n\nimport generate from '@babel/generator'\nimport type { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport findRoot from 'find-root'\nimport { memoize } from '
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAmC;AAEnC,uBAAqB;AAErB,QAAmB;AACnB,uBAAqB;
|
|
4
|
+
"sourcesContent": ["import { basename, relative } from 'path'\n\nimport generate from '@babel/generator'\nimport type { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport findRoot from 'find-root'\n\nimport { memoize } from '../helpers/memoize.js'\nimport type { ExtractedAttr, TamaguiOptionsWithFileInfo, Ternary } from '../types.js'\n\n// import { astToLiteral } from './literalToAst'\n\nexport function isPresent<T extends Object>(input: null | void | undefined | T): input is T {\n return input != null\n}\n\nexport function isSimpleSpread(node: t.JSXSpreadAttribute) {\n return t.isIdentifier(node.argument) || t.isMemberExpression(node.argument)\n}\n\nexport const attrStr = (attr?: ExtractedAttr) => {\n return !attr\n ? ''\n : attr.type === 'attr'\n ? getNameAttr(attr.value)\n : attr.type === 'ternary'\n ? `...${ternaryStr(attr.value)}`\n : `${attr.type}(${objToStr(attr.value)})`\n}\n\nexport const objToStr = (obj: any, spacer = ', ') => {\n if (!obj) {\n return `${obj}`\n }\n return `{${Object.entries(obj)\n .map(\n ([k, v]) =>\n `${k}:${\n Array.isArray(v)\n ? `[...]`\n : v && typeof v === 'object'\n ? `${objToStr(v, ',')}`\n : JSON.stringify(v)\n }`\n )\n .join(spacer)}}`\n}\n\nconst getNameAttr = (attr: t.JSXAttribute | t.JSXSpreadAttribute) => {\n if (t.isJSXSpreadAttribute(attr)) {\n return `...${attr.argument['name']}`\n }\n return 'name' in attr ? attr.name.name : `unknown-${attr['type']}`\n}\n\nexport const ternaryStr = (x: Ternary) => {\n const conditional = t.isIdentifier(x.test)\n ? x.test.name\n : t.isMemberExpression(x.test)\n ? [x.test.object['name'], x.test.property['name']]\n : generate(x.test as any).code\n return [\n 'ternary(',\n conditional,\n isFilledObj(x.consequent) ? ` ? ${objToStr(x.consequent)}` : ' ? \uD83D\uDEAB',\n isFilledObj(x.alternate) ? ` : ${objToStr(x.alternate)}` : ' : \uD83D\uDEAB',\n ')',\n ]\n .flat()\n .join('')\n}\n\nconst isFilledObj = (obj: any) => obj && Object.keys(obj).length\n\nexport function findComponentName(scope) {\n const componentName = ''\n let cur = scope.path\n while (cur.parentPath && !t.isProgram(cur.parentPath.parent)) {\n cur = cur.parentPath\n }\n let node = cur.parent\n if (t.isExportNamedDeclaration(node)) {\n node = node.declaration\n }\n if (t.isVariableDeclaration(node)) {\n const [dec] = node.declarations\n if (t.isVariableDeclarator(dec) && t.isIdentifier(dec.id)) {\n return dec.id.name\n }\n }\n if (t.isFunctionDeclaration(node)) {\n return node.id?.name\n }\n return componentName\n}\n\nexport function isValidThemeHook(\n props: TamaguiOptionsWithFileInfo,\n jsxPath: NodePath<t.JSXElement>,\n n: t.MemberExpression,\n sourcePath: string\n) {\n if (!t.isIdentifier(n.object) || !t.isIdentifier(n.property)) return false\n const bindings = jsxPath.scope.getAllBindings()\n const binding = bindings[n.object.name]\n if (!binding?.path) return false\n if (!binding.path.isVariableDeclarator()) return false\n const init = binding.path.node.init\n if (!t.isCallExpression(init)) return false\n if (!t.isIdentifier(init.callee)) return false\n // TODO could support renaming useTheme by looking up import first\n if (init.callee.name !== 'useTheme') return false\n const importNode = binding.scope.getBinding('useTheme')?.path.parent\n if (!t.isImportDeclaration(importNode)) return false\n if (!isValidImport(props, sourcePath)) {\n return false\n }\n return true\n}\n\nexport const isInsideComponentPackage = (props: TamaguiOptionsWithFileInfo, moduleName: string) => {\n return getValidComponentsPaths(props).some((path) => {\n return moduleName.startsWith(path)\n })\n}\n\nexport const isComponentPackage = (props: TamaguiOptionsWithFileInfo, srcName: string) => {\n return getValidComponentsPaths(props).some((path) => {\n return srcName.startsWith(path)\n })\n}\n\nexport function getValidComponent(\n props: TamaguiOptionsWithFileInfo,\n moduleName: string,\n componentName: string\n) {\n // must be uppercase of course\n if (componentName[0].toUpperCase() !== componentName[0]) {\n return false\n }\n\n for (const loaded of props.allLoadedComponents) {\n const isInModule = moduleName === '*' || moduleName.startsWith(loaded.moduleName)\n const foundComponent = loaded.nameToInfo[componentName]\n // eslint-disable-next-line no-console\n if (isInModule && foundComponent) {\n return foundComponent\n }\n }\n\n return null\n}\n\nexport const isValidModule = (props: TamaguiOptionsWithFileInfo, moduleName: string) => {\n if (typeof moduleName !== 'string') {\n throw new Error(`No module name`)\n }\n const isLocal = moduleName.startsWith('.')\n return {\n isLocal,\n isValid: isLocal\n ? isInsideComponentPackage(props, moduleName)\n : isComponentPackage(props, moduleName),\n }\n}\n\nexport const getValidImport = (\n props: TamaguiOptionsWithFileInfo,\n moduleName: string,\n componentName?: string\n) => {\n const { isValid, isLocal } = isValidModule(props, moduleName)\n if (!isValid || !componentName) {\n return null\n }\n return getValidComponent(props, isLocal ? '*' : moduleName, componentName) || null\n}\n\nexport const isValidImport = (\n props: TamaguiOptionsWithFileInfo,\n moduleName: string,\n componentName?: string\n) => {\n if (!componentName) {\n return isValidModule(props, moduleName).isValid\n }\n return Boolean(getValidImport(props, moduleName, componentName))\n}\n\nconst getValidComponentPackages = memoize((props: TamaguiOptionsWithFileInfo) => {\n // just always look for `tamagui` and `@tamagui/core`\n return [...new Set(['@tamagui/core', 'tamagui', ...props.components])]\n})\n\nconst getValidComponentsPaths = memoize((props: TamaguiOptionsWithFileInfo) => {\n return getValidComponentPackages(props).map((pkg) => {\n const root = findRoot(pkg)\n return basename(root)\n })\n})\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["generate", "findRoot"]
|
|
7
7
|
}
|
|
@@ -389,7 +389,7 @@ function getComponentStaticConfigByName(name, exported) {
|
|
|
389
389
|
for (const key in exported) {
|
|
390
390
|
const found = getTamaguiComponent(key, exported[key]);
|
|
391
391
|
if (found) {
|
|
392
|
-
const { Component,
|
|
392
|
+
const { Component, ...sc } = found.staticConfig;
|
|
393
393
|
components[key] = { staticConfig: sc };
|
|
394
394
|
}
|
|
395
395
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/extractor/loadTamagui.ts"],
|
|
4
|
-
"sourcesContent": ["import { readFileSync } from 'fs'\n/* eslint-disable no-console */\nimport { basename, dirname, extname, join, relative, sep } from 'path'\n\nimport generate from '@babel/generator'\nimport traverse from '@babel/traverse'\nimport * as t from '@babel/types'\nimport { Color, colorLog } from '@tamagui/cli-color'\nimport { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport type { StaticConfigParsed, TamaguiInternalConfig } from '@tamagui/core-node'\nimport { createTamagui } from '@tamagui/core-node'\nimport esbuild from 'esbuild'\nimport { ensureDir, existsSync, removeSync, writeFileSync } from 'fs-extra'\n\nimport { SHOULD_DEBUG } from '../constants.js'\nimport { getNameToPaths, registerRequire, unregisterRequire } from '../require.js'\nimport { babelParse } from './babelParse'\nimport { bundle } from './bundle'\n\ntype NameToPaths = {\n [key: string]: Set<string>\n}\n\nexport type LoadedComponents = {\n moduleName: string\n nameToInfo: Record<\n string,\n {\n staticConfig: StaticConfigParsed\n }\n >\n}\n\nexport type TamaguiProjectInfo = {\n components: LoadedComponents[]\n tamaguiConfig: TamaguiInternalConfig\n nameToPaths: NameToPaths\n}\n\ntype Props = {\n components: string[]\n config?: string\n forceExports?: boolean\n}\n\nconst cache = {}\n\n// TODO needs a plugin for webpack / vite to run this once at startup and not again until changed...\n\nexport async function loadTamagui(props: Props): Promise<TamaguiProjectInfo> {\n const key = JSON.stringify(props)\n if (cache[key]) {\n if (cache[key] instanceof Promise) {\n return await cache[key]\n }\n return cache[key]\n }\n\n let resolver: Function = () => {}\n cache[key] = new Promise((res) => {\n resolver = res\n })\n\n const tmpDir = join(process.cwd(), '.tamagui', 'tamagui-node')\n const configOutPath = join(tmpDir, `tamagui.config.js`)\n const baseComponents = props.components.filter((x) => x !== '@tamagui/core')\n const componentOutPaths = baseComponents.map((componentModule) =>\n join(\n tmpDir,\n `${componentModule\n .split(sep)\n .join('-')\n .replace(/[^a-z0-9]+/gi, '')}-components.config.js`\n )\n )\n\n const external = ['@tamagui/core', '@tamagui/core-node', 'react', 'react-dom', 'react-native-svg']\n const configEntry = props.config ? join(process.cwd(), props.config) : ''\n\n if (process.env.NODE_ENV === 'development' && process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Building config entry`, configEntry)\n }\n\n // build them to node-compat versions\n try {\n await ensureDir(tmpDir)\n } catch {\n //\n }\n\n colorLog(\n Color.FgYellow,\n `\nTamagui built config and components:`\n )\n colorLog(\n Color.Dim,\n `\n - Config: .${sep}${relative(process.cwd(), configOutPath)}\n - Components: .${sep}${relative(process.cwd(), componentOutPaths.join(', '))}\n`\n )\n\n await Promise.all([\n props.config\n ? bundle({\n entryPoints: [configEntry],\n external,\n outfile: configOutPath,\n })\n : null,\n ...baseComponents.map((componentModule, i) => {\n return bundle({\n entryPoints: [componentModule],\n resolvePlatformSpecificEntries: true,\n external,\n outfile: componentOutPaths[i],\n })\n }),\n ])\n\n try {\n registerRequire()\n const out = require(configOutPath)\n const config = out.default || out\n\n if (!config) {\n throw new Error(`No config: ${config}`)\n }\n\n let components = loadComponents({\n ...props,\n components: componentOutPaths,\n })\n\n if (!components) {\n throw new Error(`No components found: ${componentOutPaths.join(', ')}`)\n }\n\n // map from built back to original module names\n for (const component of components) {\n component.moduleName = baseComponents[componentOutPaths.indexOf(component.moduleName)]\n if (!component.moduleName) {\n throw new Error(`Tamagui internal err`)\n }\n }\n\n // always load core so we can optimize if directly importing\n const coreComponents = loadComponents({\n ...props,\n components: ['@tamagui/core-node'],\n })\n if (coreComponents) {\n coreComponents[0].moduleName = '@tamagui/core'\n components = [...components, ...coreComponents]\n }\n\n if (process.env.NODE_ENV === 'development' && process.env.DEBUG?.startsWith('tamagui')) {\n console.log('Loaded components', components)\n }\n\n cache[key] = {\n components,\n nameToPaths: {},\n tamaguiConfig: config,\n }\n\n // init core-node\n createTamagui(cache[key].tamaguiConfig)\n\n resolver(cache[key])\n\n return cache[key]\n } finally {\n unregisterRequire()\n }\n}\n\nexport function resolveWebOrNativeSpecificEntry(entry: string) {\n const resolved = require.resolve(entry)\n const ext = extname(resolved)\n const fileName = basename(resolved).replace(ext, '')\n const specificExt = process.env.TAMAGUI_TARGET === 'web' ? 'web' : 'native'\n const specificFile = join(dirname(resolved), fileName + '.' + specificExt + ext)\n if (existsSync(specificFile)) {\n return specificFile\n }\n return entry\n}\n\nconst esbuildOptions = {\n loader: 'tsx',\n target: 'es2018',\n format: 'cjs',\n jsx: 'transform',\n platform: 'node',\n} as const\n\n// loads in-process using esbuild-register\nexport function loadTamaguiSync(props: Props): TamaguiProjectInfo {\n const key = JSON.stringify(props)\n if (cache[key]) {\n return cache[key]\n }\n\n const { unregister } = require('esbuild-register/dist/node').register(esbuildOptions)\n\n try {\n registerRequire()\n\n // lets shim require and avoid importing react-native + react-native-web\n // we just need to read the config around them\n process.env.IS_STATIC = 'is_static'\n const devValueOG = globalThis['__DEV__' as any]\n globalThis['__DEV__' as any] = process.env.NODE_ENV === 'development'\n\n try {\n // config\n let tamaguiConfig: TamaguiInternalConfig | null = null\n if (props.config) {\n const configPath = join(process.cwd(), props.config)\n const exp = require(configPath)\n tamaguiConfig = (exp['default'] || exp) as TamaguiInternalConfig\n if (!tamaguiConfig || !tamaguiConfig.parsed) {\n const confPath = require.resolve(configPath)\n throw new Error(`Can't find valid config in ${confPath}:\n \n Be sure you \"export default\" the config.`)\n }\n }\n\n // components\n const components = loadComponents(props)\n if (!components) {\n throw new Error(`No components loaded`)\n }\n if (process.env.DEBUG === 'tamagui') {\n console.log(`components`, components)\n }\n\n // undo shims\n process.env.IS_STATIC = undefined\n globalThis['__DEV__' as any] = devValueOG\n\n // set up core-node\n if (props.config && tamaguiConfig) {\n createTamagui(tamaguiConfig as any)\n }\n\n cache[key] = {\n components,\n tamaguiConfig,\n nameToPaths: getNameToPaths(),\n }\n } catch (err) {\n if (err instanceof Error) {\n console.warn(\n `Error loading tamagui.config.ts (set DEBUG=tamagui to see full stack), running tamagui without custom config`\n )\n console.log(`\\n\\n ${err.message}\\n\\n`)\n if (SHOULD_DEBUG) {\n console.log(err.stack)\n }\n } else {\n console.error(`Error loading tamagui.config.ts`, err)\n }\n return {\n components: [],\n tamaguiConfig: getDefaultTamaguiConfig(),\n nameToPaths: {},\n }\n }\n\n return cache[key]\n } finally {\n unregister()\n unregisterRequire()\n }\n}\n\nfunction interopDefaultExport(mod: any) {\n return mod?.default ?? mod\n}\n\nconst cacheComponents: Record<string, LoadedComponents[]> = {}\n\nfunction transformAddExports(ast: t.File) {\n const usedNames = new Set<string>()\n\n // avoid clobbering\n traverse(ast, {\n ExportNamedDeclaration(nodePath) {\n if (nodePath.node.specifiers) {\n for (const spec of nodePath.node.specifiers) {\n usedNames.add(t.isIdentifier(spec.exported) ? spec.exported.name : spec.exported.value)\n }\n }\n },\n })\n\n traverse(ast, {\n VariableDeclaration(nodePath) {\n // top level only\n if (!t.isProgram(nodePath.parent)) return\n const decs = nodePath.node.declarations\n if (decs.length > 1) return\n const [dec] = decs\n if (!t.isIdentifier(dec.id)) return\n if (!dec.init) return\n if (usedNames.has(dec.id.name)) return\n usedNames.add(dec.id.name)\n nodePath.replaceWith(\n t.exportNamedDeclaration(t.variableDeclaration('let', [dec]), [\n t.exportSpecifier(t.identifier(dec.id.name), t.identifier(dec.id.name)),\n ])\n )\n },\n })\n\n return generate(ast as any, {\n concise: false,\n filename: 'test.tsx',\n retainLines: false,\n sourceMaps: false,\n }).code\n}\n\nfunction loadComponents(props: Props): null | LoadedComponents[] {\n const componentsModules = props.components\n const key = componentsModules.join('')\n if (cacheComponents[key]) {\n return cacheComponents[key]\n }\n try {\n const info: LoadedComponents[] = componentsModules.flatMap((name) => {\n const extension = extname(name)\n const isLocal = Boolean(extension)\n // during props.config pass we are passing in pre-bundled stuff\n const writeTmp = isLocal && !props.config\n const fileContents = writeTmp ? readFileSync(name, 'utf-8') : ''\n const loadModule = writeTmp\n ? join(dirname(name), `.tamagui-dynamic-eval-${basename(name)}.tsx`)\n : name\n let writtenContents = fileContents\n let didBabel = false\n\n const esbuildit = (src: string, target?: 'modern') =>\n esbuild.transformSync(src, {\n ...esbuildOptions,\n ...(target === 'modern' && {\n target: 'es2022',\n jsx: 'transform',\n loader: 'tsx',\n platform: 'neutral',\n format: 'esm',\n }),\n }).code\n\n function attemptLoad({ forceExports = false } = {}) {\n // need to write to tsx to enable reading it properly (:/ esbuild-register)\n if (writeTmp) {\n writtenContents = forceExports\n ? esbuildit(transformAddExports(babelParse(esbuildit(fileContents, 'modern'))))\n : esbuildit(fileContents)\n\n writeFileSync(loadModule, writtenContents)\n }\n return {\n moduleName: name,\n nameToInfo: getComponentStaticConfigByName(\n name,\n interopDefaultExport(require(loadModule))\n ),\n }\n }\n\n const dispose = () => {\n writeTmp && removeSync(loadModule)\n }\n\n try {\n const res = attemptLoad({\n forceExports: true,\n })\n didBabel = true\n return res\n } catch (err) {\n console.log('babel err', err, writtenContents)\n // ok\n writtenContents = fileContents\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Error parsing babel likely`, err)\n }\n } finally {\n dispose()\n }\n\n try {\n return attemptLoad({\n forceExports: false,\n })\n } catch (err) {\n if (!process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD) {\n console.log(`\n\nTamagui attempted but failed to dynamically load components in:\n ${name}\n\nThis will leave some styled() tags unoptimized.\nDisable this file (or dynamic loading altogether):\n\n disableExtractFoundComponents: ['${name}'] | true\n\nQuiet this warning with environment variable:\n \n TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1\n\n`)\n console.log(err)\n console.log(\n `At: ${loadModule}`,\n `\\ndidBabel: ${didBabel}`,\n `\\nIn:`,\n writtenContents,\n `\\nwriteTmp: `,\n writeTmp\n )\n }\n return []\n } finally {\n dispose()\n }\n })\n cacheComponents[key] = info\n return info\n } catch (err: any) {\n console.log(`Tamagui error bundling components`, err.message, err.stack)\n return null\n }\n}\n\nfunction getComponentStaticConfigByName(name: string, exported: any) {\n if (!exported || typeof exported !== 'object' || Array.isArray(exported)) {\n throw new Error(`Invalid export from package ${name}: ${typeof exported}`)\n }\n const components: Record<string, { staticConfig: StaticConfigParsed }> = {}\n try {\n for (const key in exported) {\n const found = getTamaguiComponent(key, exported[key])\n if (found) {\n // remove non-stringifyable\n const { Component, reactNativeWebComponent, ...sc } = found.staticConfig\n components[key] = { staticConfig: sc }\n }\n }\n } catch (err) {\n console.error(`Tamagui failed getting components`)\n if (err instanceof Error) {\n console.error(err.message, err.stack)\n } else {\n console.error(err)\n }\n }\n return components\n}\n\nfunction getTamaguiComponent(\n name: string,\n Component: any\n): undefined | { staticConfig: StaticConfigParsed } {\n if (name[0].toUpperCase() !== name[0]) {\n return\n }\n const staticConfig = Component?.staticConfig as StaticConfigParsed | undefined\n if (staticConfig) {\n return Component\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { readFileSync } from 'fs'\n/* eslint-disable no-console */\nimport { basename, dirname, extname, join, relative, sep } from 'path'\n\nimport generate from '@babel/generator'\nimport traverse from '@babel/traverse'\nimport * as t from '@babel/types'\nimport { Color, colorLog } from '@tamagui/cli-color'\nimport { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport type { StaticConfigParsed, TamaguiInternalConfig } from '@tamagui/core-node'\nimport { createTamagui } from '@tamagui/core-node'\nimport esbuild from 'esbuild'\nimport { ensureDir, existsSync, removeSync, writeFileSync } from 'fs-extra'\n\nimport { SHOULD_DEBUG } from '../constants.js'\nimport { getNameToPaths, registerRequire, unregisterRequire } from '../require.js'\nimport { babelParse } from './babelParse'\nimport { bundle } from './bundle'\n\ntype NameToPaths = {\n [key: string]: Set<string>\n}\n\nexport type LoadedComponents = {\n moduleName: string\n nameToInfo: Record<\n string,\n {\n staticConfig: StaticConfigParsed\n }\n >\n}\n\nexport type TamaguiProjectInfo = {\n components: LoadedComponents[]\n tamaguiConfig: TamaguiInternalConfig\n nameToPaths: NameToPaths\n}\n\ntype Props = {\n components: string[]\n config?: string\n forceExports?: boolean\n}\n\nconst cache = {}\n\n// TODO needs a plugin for webpack / vite to run this once at startup and not again until changed...\n\nexport async function loadTamagui(props: Props): Promise<TamaguiProjectInfo> {\n const key = JSON.stringify(props)\n if (cache[key]) {\n if (cache[key] instanceof Promise) {\n return await cache[key]\n }\n return cache[key]\n }\n\n let resolver: Function = () => {}\n cache[key] = new Promise((res) => {\n resolver = res\n })\n\n const tmpDir = join(process.cwd(), '.tamagui', 'tamagui-node')\n const configOutPath = join(tmpDir, `tamagui.config.js`)\n const baseComponents = props.components.filter((x) => x !== '@tamagui/core')\n const componentOutPaths = baseComponents.map((componentModule) =>\n join(\n tmpDir,\n `${componentModule\n .split(sep)\n .join('-')\n .replace(/[^a-z0-9]+/gi, '')}-components.config.js`\n )\n )\n\n const external = ['@tamagui/core', '@tamagui/core-node', 'react', 'react-dom', 'react-native-svg']\n const configEntry = props.config ? join(process.cwd(), props.config) : ''\n\n if (process.env.NODE_ENV === 'development' && process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Building config entry`, configEntry)\n }\n\n // build them to node-compat versions\n try {\n await ensureDir(tmpDir)\n } catch {\n //\n }\n\n colorLog(\n Color.FgYellow,\n `\nTamagui built config and components:`\n )\n colorLog(\n Color.Dim,\n `\n - Config: .${sep}${relative(process.cwd(), configOutPath)}\n - Components: .${sep}${relative(process.cwd(), componentOutPaths.join(', '))}\n`\n )\n\n await Promise.all([\n props.config\n ? bundle({\n entryPoints: [configEntry],\n external,\n outfile: configOutPath,\n })\n : null,\n ...baseComponents.map((componentModule, i) => {\n return bundle({\n entryPoints: [componentModule],\n resolvePlatformSpecificEntries: true,\n external,\n outfile: componentOutPaths[i],\n })\n }),\n ])\n\n try {\n registerRequire()\n const out = require(configOutPath)\n const config = out.default || out\n\n if (!config) {\n throw new Error(`No config: ${config}`)\n }\n\n let components = loadComponents({\n ...props,\n components: componentOutPaths,\n })\n\n if (!components) {\n throw new Error(`No components found: ${componentOutPaths.join(', ')}`)\n }\n\n // map from built back to original module names\n for (const component of components) {\n component.moduleName = baseComponents[componentOutPaths.indexOf(component.moduleName)]\n if (!component.moduleName) {\n throw new Error(`Tamagui internal err`)\n }\n }\n\n // always load core so we can optimize if directly importing\n const coreComponents = loadComponents({\n ...props,\n components: ['@tamagui/core-node'],\n })\n if (coreComponents) {\n coreComponents[0].moduleName = '@tamagui/core'\n components = [...components, ...coreComponents]\n }\n\n if (process.env.NODE_ENV === 'development' && process.env.DEBUG?.startsWith('tamagui')) {\n console.log('Loaded components', components)\n }\n\n cache[key] = {\n components,\n nameToPaths: {},\n tamaguiConfig: config,\n }\n\n // init core-node\n createTamagui(cache[key].tamaguiConfig)\n\n resolver(cache[key])\n\n return cache[key]\n } finally {\n unregisterRequire()\n }\n}\n\nexport function resolveWebOrNativeSpecificEntry(entry: string) {\n const resolved = require.resolve(entry)\n const ext = extname(resolved)\n const fileName = basename(resolved).replace(ext, '')\n const specificExt = process.env.TAMAGUI_TARGET === 'web' ? 'web' : 'native'\n const specificFile = join(dirname(resolved), fileName + '.' + specificExt + ext)\n if (existsSync(specificFile)) {\n return specificFile\n }\n return entry\n}\n\nconst esbuildOptions = {\n loader: 'tsx',\n target: 'es2018',\n format: 'cjs',\n jsx: 'transform',\n platform: 'node',\n} as const\n\n// loads in-process using esbuild-register\nexport function loadTamaguiSync(props: Props): TamaguiProjectInfo {\n const key = JSON.stringify(props)\n if (cache[key]) {\n return cache[key]\n }\n\n const { unregister } = require('esbuild-register/dist/node').register(esbuildOptions)\n\n try {\n registerRequire()\n\n // lets shim require and avoid importing react-native + react-native-web\n // we just need to read the config around them\n process.env.IS_STATIC = 'is_static'\n const devValueOG = globalThis['__DEV__' as any]\n globalThis['__DEV__' as any] = process.env.NODE_ENV === 'development'\n\n try {\n // config\n let tamaguiConfig: TamaguiInternalConfig | null = null\n if (props.config) {\n const configPath = join(process.cwd(), props.config)\n const exp = require(configPath)\n tamaguiConfig = (exp['default'] || exp) as TamaguiInternalConfig\n if (!tamaguiConfig || !tamaguiConfig.parsed) {\n const confPath = require.resolve(configPath)\n throw new Error(`Can't find valid config in ${confPath}:\n \n Be sure you \"export default\" the config.`)\n }\n }\n\n // components\n const components = loadComponents(props)\n if (!components) {\n throw new Error(`No components loaded`)\n }\n if (process.env.DEBUG === 'tamagui') {\n console.log(`components`, components)\n }\n\n // undo shims\n process.env.IS_STATIC = undefined\n globalThis['__DEV__' as any] = devValueOG\n\n // set up core-node\n if (props.config && tamaguiConfig) {\n createTamagui(tamaguiConfig as any)\n }\n\n cache[key] = {\n components,\n tamaguiConfig,\n nameToPaths: getNameToPaths(),\n }\n } catch (err) {\n if (err instanceof Error) {\n console.warn(\n `Error loading tamagui.config.ts (set DEBUG=tamagui to see full stack), running tamagui without custom config`\n )\n console.log(`\\n\\n ${err.message}\\n\\n`)\n if (SHOULD_DEBUG) {\n console.log(err.stack)\n }\n } else {\n console.error(`Error loading tamagui.config.ts`, err)\n }\n return {\n components: [],\n tamaguiConfig: getDefaultTamaguiConfig(),\n nameToPaths: {},\n }\n }\n\n return cache[key]\n } finally {\n unregister()\n unregisterRequire()\n }\n}\n\nfunction interopDefaultExport(mod: any) {\n return mod?.default ?? mod\n}\n\nconst cacheComponents: Record<string, LoadedComponents[]> = {}\n\nfunction transformAddExports(ast: t.File) {\n const usedNames = new Set<string>()\n\n // avoid clobbering\n traverse(ast, {\n ExportNamedDeclaration(nodePath) {\n if (nodePath.node.specifiers) {\n for (const spec of nodePath.node.specifiers) {\n usedNames.add(t.isIdentifier(spec.exported) ? spec.exported.name : spec.exported.value)\n }\n }\n },\n })\n\n traverse(ast, {\n VariableDeclaration(nodePath) {\n // top level only\n if (!t.isProgram(nodePath.parent)) return\n const decs = nodePath.node.declarations\n if (decs.length > 1) return\n const [dec] = decs\n if (!t.isIdentifier(dec.id)) return\n if (!dec.init) return\n if (usedNames.has(dec.id.name)) return\n usedNames.add(dec.id.name)\n nodePath.replaceWith(\n t.exportNamedDeclaration(t.variableDeclaration('let', [dec]), [\n t.exportSpecifier(t.identifier(dec.id.name), t.identifier(dec.id.name)),\n ])\n )\n },\n })\n\n return generate(ast as any, {\n concise: false,\n filename: 'test.tsx',\n retainLines: false,\n sourceMaps: false,\n }).code\n}\n\nfunction loadComponents(props: Props): null | LoadedComponents[] {\n const componentsModules = props.components\n const key = componentsModules.join('')\n if (cacheComponents[key]) {\n return cacheComponents[key]\n }\n try {\n const info: LoadedComponents[] = componentsModules.flatMap((name) => {\n const extension = extname(name)\n const isLocal = Boolean(extension)\n // during props.config pass we are passing in pre-bundled stuff\n const writeTmp = isLocal && !props.config\n const fileContents = writeTmp ? readFileSync(name, 'utf-8') : ''\n const loadModule = writeTmp\n ? join(dirname(name), `.tamagui-dynamic-eval-${basename(name)}.tsx`)\n : name\n let writtenContents = fileContents\n let didBabel = false\n\n const esbuildit = (src: string, target?: 'modern') =>\n esbuild.transformSync(src, {\n ...esbuildOptions,\n ...(target === 'modern' && {\n target: 'es2022',\n jsx: 'transform',\n loader: 'tsx',\n platform: 'neutral',\n format: 'esm',\n }),\n }).code\n\n function attemptLoad({ forceExports = false } = {}) {\n // need to write to tsx to enable reading it properly (:/ esbuild-register)\n if (writeTmp) {\n writtenContents = forceExports\n ? esbuildit(transformAddExports(babelParse(esbuildit(fileContents, 'modern'))))\n : esbuildit(fileContents)\n\n writeFileSync(loadModule, writtenContents)\n }\n return {\n moduleName: name,\n nameToInfo: getComponentStaticConfigByName(\n name,\n interopDefaultExport(require(loadModule))\n ),\n }\n }\n\n const dispose = () => {\n writeTmp && removeSync(loadModule)\n }\n\n try {\n const res = attemptLoad({\n forceExports: true,\n })\n didBabel = true\n return res\n } catch (err) {\n console.log('babel err', err, writtenContents)\n // ok\n writtenContents = fileContents\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Error parsing babel likely`, err)\n }\n } finally {\n dispose()\n }\n\n try {\n return attemptLoad({\n forceExports: false,\n })\n } catch (err) {\n if (!process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD) {\n console.log(`\n\nTamagui attempted but failed to dynamically load components in:\n ${name}\n\nThis will leave some styled() tags unoptimized.\nDisable this file (or dynamic loading altogether):\n\n disableExtractFoundComponents: ['${name}'] | true\n\nQuiet this warning with environment variable:\n \n TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1\n\n`)\n console.log(err)\n console.log(\n `At: ${loadModule}`,\n `\\ndidBabel: ${didBabel}`,\n `\\nIn:`,\n writtenContents,\n `\\nwriteTmp: `,\n writeTmp\n )\n }\n return []\n } finally {\n dispose()\n }\n })\n cacheComponents[key] = info\n return info\n } catch (err: any) {\n console.log(`Tamagui error bundling components`, err.message, err.stack)\n return null\n }\n}\n\nfunction getComponentStaticConfigByName(name: string, exported: any) {\n if (!exported || typeof exported !== 'object' || Array.isArray(exported)) {\n throw new Error(`Invalid export from package ${name}: ${typeof exported}`)\n }\n const components: Record<string, { staticConfig: StaticConfigParsed }> = {}\n try {\n for (const key in exported) {\n const found = getTamaguiComponent(key, exported[key])\n if (found) {\n // remove non-stringifyable\n const { Component, ...sc } = found.staticConfig\n components[key] = { staticConfig: sc }\n }\n }\n } catch (err) {\n console.error(`Tamagui failed getting components`)\n if (err instanceof Error) {\n console.error(err.message, err.stack)\n } else {\n console.error(err)\n }\n }\n return components\n}\n\nfunction getTamaguiComponent(\n name: string,\n Component: any\n): undefined | { staticConfig: StaticConfigParsed } {\n if (name[0].toUpperCase() !== name[0]) {\n return\n }\n const staticConfig = Component?.staticConfig as StaticConfigParsed | undefined\n if (staticConfig) {\n return Component\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["traverse", "generate", "esbuild"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var memoize_exports = {};
|
|
20
|
+
__export(memoize_exports, {
|
|
21
|
+
memoize: () => memoize
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(memoize_exports);
|
|
24
|
+
function memoize(func, resolver) {
|
|
25
|
+
if (typeof func !== "function" || resolver != null && typeof resolver !== "function") {
|
|
26
|
+
throw new TypeError("Expected a function");
|
|
27
|
+
}
|
|
28
|
+
const memoized = function(...args) {
|
|
29
|
+
const key = resolver ? resolver.apply(this, args) : args[0];
|
|
30
|
+
const cache = memoized.cache;
|
|
31
|
+
if (cache.has(key)) {
|
|
32
|
+
return cache.get(key);
|
|
33
|
+
}
|
|
34
|
+
const result = func.apply(this, args);
|
|
35
|
+
memoized.cache = cache.set(key, result) || cache;
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
memoized.cache = new (memoize.Cache || Map)();
|
|
39
|
+
return memoized;
|
|
40
|
+
}
|
|
41
|
+
memoize.Cache = Map;
|
|
42
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
43
|
+
0 && (module.exports = {
|
|
44
|
+
memoize
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=memoize.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/helpers/memoize.ts"],
|
|
4
|
+
"sourcesContent": ["// @ts-nocheck\nexport function memoize(func?: Function, resolver?: any) {\n if (typeof func !== 'function' || (resolver != null && typeof resolver !== 'function')) {\n throw new TypeError('Expected a function')\n }\n const memoized = function (...args) {\n const key = resolver ? resolver.apply(this, args) : args[0]\n const cache = memoized.cache\n\n if (cache.has(key)) {\n return cache.get(key)\n }\n const result = func.apply(this, args)\n memoized.cache = cache.set(key, result) || cache\n return result\n }\n memoized.cache = new (memoize.Cache || Map)()\n return memoized\n}\n\nmemoize.Cache = Map\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,SAAS,QAAQ,MAAiB,UAAgB;AACvD,MAAI,OAAO,SAAS,cAAe,YAAY,QAAQ,OAAO,aAAa,YAAa;AACtF,UAAM,IAAI,UAAU,qBAAqB;AAAA,EAC3C;AACA,QAAM,WAAW,YAAa,MAAM;AAClC,UAAM,MAAM,WAAW,SAAS,MAAM,MAAM,IAAI,IAAI,KAAK;AACzD,UAAM,QAAQ,SAAS;AAEvB,QAAI,MAAM,IAAI,GAAG,GAAG;AAClB,aAAO,MAAM,IAAI,GAAG;AAAA,IACtB;AACA,UAAM,SAAS,KAAK,MAAM,MAAM,IAAI;AACpC,aAAS,QAAQ,MAAM,IAAI,KAAK,MAAM,KAAK;AAC3C,WAAO;AAAA,EACT;AACA,WAAS,QAAQ,KAAK,QAAQ,SAAS,KAAK;AAC5C,SAAO;AACT;AAEA,QAAQ,QAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/static",
|
|
3
|
-
"version": "1.0.1-beta.
|
|
3
|
+
"version": "1.0.1-beta.199",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"types": "./types/index.d.ts",
|
|
6
6
|
"main": "dist",
|
|
@@ -28,23 +28,23 @@
|
|
|
28
28
|
},
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@babel/core": "^7.
|
|
32
|
-
"@babel/generator": "^7.
|
|
33
|
-
"@babel/helper-plugin-utils": "^7.
|
|
34
|
-
"@babel/parser": "^7.
|
|
35
|
-
"@babel/plugin-transform-react-jsx": "^7.
|
|
36
|
-
"@babel/runtime": "^7.
|
|
37
|
-
"@babel/traverse": "^7.
|
|
31
|
+
"@babel/core": "^7.19.6",
|
|
32
|
+
"@babel/generator": "^7.19.6",
|
|
33
|
+
"@babel/helper-plugin-utils": "^7.19.0",
|
|
34
|
+
"@babel/parser": "^7.19.6",
|
|
35
|
+
"@babel/plugin-transform-react-jsx": "^7.19.0",
|
|
36
|
+
"@babel/runtime": "^7.19.4",
|
|
37
|
+
"@babel/traverse": "^7.19.6",
|
|
38
38
|
"@expo/match-media": "^0.3.0",
|
|
39
|
-
"@tamagui/build": "^1.0.1-beta.
|
|
40
|
-
"@tamagui/cli-color": "^1.0.1-beta.
|
|
41
|
-
"@tamagui/config-default-node": "^1.0.1-beta.
|
|
42
|
-
"@tamagui/core-node": "^1.0.1-beta.
|
|
43
|
-
"@tamagui/fake-react-native": "^1.0.1-beta.
|
|
44
|
-
"@tamagui/helpers": "^1.0.1-beta.
|
|
45
|
-
"@tamagui/helpers-node": "^1.0.1-beta.
|
|
46
|
-
"@tamagui/proxy-worm": "^1.0.1-beta.
|
|
47
|
-
"@tamagui/shorthands": "^1.0.1-beta.
|
|
39
|
+
"@tamagui/build": "^1.0.1-beta.199",
|
|
40
|
+
"@tamagui/cli-color": "^1.0.1-beta.199",
|
|
41
|
+
"@tamagui/config-default-node": "^1.0.1-beta.199",
|
|
42
|
+
"@tamagui/core-node": "^1.0.1-beta.199",
|
|
43
|
+
"@tamagui/fake-react-native": "^1.0.1-beta.199",
|
|
44
|
+
"@tamagui/helpers": "^1.0.1-beta.199",
|
|
45
|
+
"@tamagui/helpers-node": "^1.0.1-beta.199",
|
|
46
|
+
"@tamagui/proxy-worm": "^1.0.1-beta.199",
|
|
47
|
+
"@tamagui/shorthands": "^1.0.1-beta.199",
|
|
48
48
|
"babel-literal-to-ast": "^2.1.0",
|
|
49
49
|
"esbuild": "^0.15.11",
|
|
50
50
|
"esbuild-register": "^3.3.3",
|
|
@@ -53,14 +53,14 @@
|
|
|
53
53
|
"fs-extra": "^10.1.0",
|
|
54
54
|
"invariant": "^2.2.4",
|
|
55
55
|
"lodash": "^4.17.21",
|
|
56
|
-
"react-native-web-internals": "^1.0.1-beta.
|
|
57
|
-
"react-native-web-lite": "^1.0.1-beta.
|
|
56
|
+
"react-native-web-internals": "^1.0.1-beta.199",
|
|
57
|
+
"react-native-web-lite": "^1.0.1-beta.199"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@babel/plugin-syntax-typescript": "^7.18.6",
|
|
61
61
|
"@babel/types": "^7.19.4",
|
|
62
62
|
"@dish/babel-preset": "^0.0.6",
|
|
63
|
-
"@tamagui/test-design-system": "^1.0.1-beta.
|
|
63
|
+
"@tamagui/test-design-system": "^1.0.1-beta.199",
|
|
64
64
|
"@testing-library/react": "^13.3.0",
|
|
65
65
|
"@types/babel__generator": "^7.6.4",
|
|
66
66
|
"@types/babel__traverse": "^7.18.2",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"react-test-renderer": "^18.2.0",
|
|
80
80
|
"style-loader": "^3.3.1",
|
|
81
81
|
"typescript": "^4.7.4",
|
|
82
|
-
"vitest": "^0.
|
|
82
|
+
"vitest": "^0.24.3",
|
|
83
83
|
"webpack": "^5.74.0"
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
@@ -4,8 +4,8 @@ import generate from '@babel/generator'
|
|
|
4
4
|
import type { NodePath } from '@babel/traverse'
|
|
5
5
|
import * as t from '@babel/types'
|
|
6
6
|
import findRoot from 'find-root'
|
|
7
|
-
import { memoize } from 'lodash'
|
|
8
7
|
|
|
8
|
+
import { memoize } from '../helpers/memoize.js'
|
|
9
9
|
import type { ExtractedAttr, TamaguiOptionsWithFileInfo, Ternary } from '../types.js'
|
|
10
10
|
|
|
11
11
|
// import { astToLiteral } from './literalToAst'
|
|
@@ -449,7 +449,7 @@ function getComponentStaticConfigByName(name: string, exported: any) {
|
|
|
449
449
|
const found = getTamaguiComponent(key, exported[key])
|
|
450
450
|
if (found) {
|
|
451
451
|
// remove non-stringifyable
|
|
452
|
-
const { Component,
|
|
452
|
+
const { Component, ...sc } = found.staticConfig
|
|
453
453
|
components[key] = { staticConfig: sc }
|
|
454
454
|
}
|
|
455
455
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
export function memoize(func?: Function, resolver?: any) {
|
|
3
|
+
if (typeof func !== 'function' || (resolver != null && typeof resolver !== 'function')) {
|
|
4
|
+
throw new TypeError('Expected a function')
|
|
5
|
+
}
|
|
6
|
+
const memoized = function (...args) {
|
|
7
|
+
const key = resolver ? resolver.apply(this, args) : args[0]
|
|
8
|
+
const cache = memoized.cache
|
|
9
|
+
|
|
10
|
+
if (cache.has(key)) {
|
|
11
|
+
return cache.get(key)
|
|
12
|
+
}
|
|
13
|
+
const result = func.apply(this, args)
|
|
14
|
+
memoized.cache = cache.set(key, result) || cache
|
|
15
|
+
return result
|
|
16
|
+
}
|
|
17
|
+
memoized.cache = new (memoize.Cache || Map)()
|
|
18
|
+
return memoized
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
memoize.Cache = Map
|