@tamagui/next-plugin 1.0.1-rc.5.1 → 1.0.1-rc.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/withTamagui.js +14 -40
- package/dist/cjs/withTamagui.js.map +3 -3
- package/dist/esm/withTamagui.js +14 -40
- package/dist/esm/withTamagui.js.map +2 -2
- package/package.json +8 -11
- package/src/withTamagui.ts +24 -46
- package/types/withTamagui.d.ts +0 -1
- package/dist/jsx/index.js +0 -2
- package/dist/jsx/index.js.map +0 -7
- package/dist/jsx/withTamagui.js +0 -320
- package/dist/jsx/withTamagui.js.map +0 -7
package/dist/cjs/withTamagui.js
CHANGED
|
@@ -30,9 +30,7 @@ module.exports = __toCommonJS(withTamagui_exports);
|
|
|
30
30
|
var import_fs = require("fs");
|
|
31
31
|
var import_path = __toESM(require("path"));
|
|
32
32
|
var import_browserslist = __toESM(require("browserslist"));
|
|
33
|
-
var import_css_minimizer_webpack_plugin = __toESM(require("css-minimizer-webpack-plugin"));
|
|
34
33
|
var import_esm_resolve = __toESM(require("esm-resolve"));
|
|
35
|
-
var import_mini_css_extract_plugin = __toESM(require("mini-css-extract-plugin"));
|
|
36
34
|
var import_css = require("next/dist/build/webpack/config/blocks/css");
|
|
37
35
|
var import_loaders = require("next/dist/build/webpack/config/blocks/css/loaders");
|
|
38
36
|
var import_tamagui_loader = require("tamagui-loader");
|
|
@@ -107,7 +105,9 @@ const withTamagui = (tamaguiOptions) => {
|
|
|
107
105
|
throw new Error(`Couldn't find package.json in any path above: ${fullPath}`);
|
|
108
106
|
});
|
|
109
107
|
function isInComponentModule(fullPath) {
|
|
110
|
-
return componentsBaseDirs.some(
|
|
108
|
+
return componentsBaseDirs.some(
|
|
109
|
+
(componentDir) => fullPath.startsWith(componentDir)
|
|
110
|
+
);
|
|
111
111
|
}
|
|
112
112
|
const shouldExclude = (path2, projectRoot) => {
|
|
113
113
|
var _a2;
|
|
@@ -165,14 +165,21 @@ const withTamagui = (tamaguiOptions) => {
|
|
|
165
165
|
const excludeExports = tamaguiOptions.excludeReactNativeWebExports;
|
|
166
166
|
if (Array.isArray(excludeExports)) {
|
|
167
167
|
try {
|
|
168
|
-
const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join(
|
|
168
|
+
const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join(
|
|
169
|
+
"|"
|
|
170
|
+
)}).*js`;
|
|
169
171
|
const regex = new RegExp(regexStr);
|
|
170
172
|
webpackConfig.plugins.push(
|
|
171
|
-
new import_webpack.default.NormalModuleReplacementPlugin(
|
|
173
|
+
new import_webpack.default.NormalModuleReplacementPlugin(
|
|
174
|
+
regex,
|
|
175
|
+
resolveEsm("@tamagui/proxy-worm")
|
|
176
|
+
)
|
|
172
177
|
);
|
|
173
178
|
} catch (err) {
|
|
174
179
|
console.warn(
|
|
175
|
-
`Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(
|
|
180
|
+
`Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(
|
|
181
|
+
", "
|
|
182
|
+
)}`
|
|
176
183
|
);
|
|
177
184
|
}
|
|
178
185
|
}
|
|
@@ -185,18 +192,6 @@ const withTamagui = (tamaguiOptions) => {
|
|
|
185
192
|
delete webpackConfig.resolve.plugins[0].paths["tamagui"];
|
|
186
193
|
}
|
|
187
194
|
}
|
|
188
|
-
if (!dev && tamaguiOptions.enableCSSOptimizations) {
|
|
189
|
-
const cssMin = webpackConfig.optimization.minimizer.find(
|
|
190
|
-
(x) => x.toString().includes("css-minimizer-plugin")
|
|
191
|
-
);
|
|
192
|
-
if (cssMin) {
|
|
193
|
-
webpackConfig.optimization.minimizer = webpackConfig.optimization.minimizer.slice(
|
|
194
|
-
cssMin.index,
|
|
195
|
-
1
|
|
196
|
-
);
|
|
197
|
-
}
|
|
198
|
-
webpackConfig.optimization.minimizer.push(new import_css_minimizer_webpack_plugin.default());
|
|
199
|
-
}
|
|
200
195
|
if (isServer) {
|
|
201
196
|
const externalize = (context, request) => {
|
|
202
197
|
const fullPath = request[0] === "." ? import_path.default.join(context, request) : request;
|
|
@@ -290,29 +285,8 @@ const withTamagui = (tamaguiOptions) => {
|
|
|
290
285
|
() => (0, import_css.lazyPostCSS)(dir, getSupportedBrowsers(dir, dev)),
|
|
291
286
|
[]
|
|
292
287
|
);
|
|
293
|
-
const cssTest = tamaguiOptions.includeCSSTest ?? /\.tamagui\.css$/;
|
|
294
|
-
if (!dev && tamaguiOptions.enableCSSOptimizations) {
|
|
295
|
-
const postCSSLoader = cssLoader[cssLoader.length - 1];
|
|
296
|
-
cssRules.unshift({
|
|
297
|
-
test: cssTest,
|
|
298
|
-
use: [import_mini_css_extract_plugin.default.loader, "css-loader", postCSSLoader],
|
|
299
|
-
sideEffects: true
|
|
300
|
-
});
|
|
301
|
-
webpackConfig.plugins.push(
|
|
302
|
-
new import_mini_css_extract_plugin.default({
|
|
303
|
-
filename: "static/css/[contenthash].css",
|
|
304
|
-
ignoreOrder: true
|
|
305
|
-
})
|
|
306
|
-
);
|
|
307
|
-
} else {
|
|
308
|
-
cssRules.unshift({
|
|
309
|
-
test: cssTest,
|
|
310
|
-
sideEffects: true,
|
|
311
|
-
use: cssLoader
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
288
|
cssRules.unshift({
|
|
315
|
-
test:
|
|
289
|
+
test: tamaguiOptions.includeCSSTest ?? /\.tamagui\.css$/,
|
|
316
290
|
sideEffects: true,
|
|
317
291
|
use: cssLoader
|
|
318
292
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/withTamagui.ts"],
|
|
4
|
-
"sourcesContent": ["import { existsSync, fstat } from 'fs'\nimport path, { dirname, join } from 'path'\n\nimport type { TamaguiOptions } from '@tamagui/static'\nimport browserslist from 'browserslist'\nimport CssMinimizerPlugin from 'css-minimizer-webpack-plugin'\nimport buildResolver from 'esm-resolve'\nimport MiniCSSExtractPlugin from 'mini-css-extract-plugin'\nimport { lazyPostCSS } from 'next/dist/build/webpack/config/blocks/css'\nimport { getGlobalCssLoader } from 'next/dist/build/webpack/config/blocks/css/loaders'\nimport { TamaguiPlugin, shouldExclude as shouldExcludeDefault } from 'tamagui-loader'\nimport webpack from 'webpack'\n\nexport type WithTamaguiProps = TamaguiOptions & {\n useReactNativeWebLite: boolean\n disableFontSupport?: boolean\n enableCSSOptimizations?: boolean\n aliasReactPackages?: boolean\n includeCSSTest?: RegExp | ((path: string) => boolean)\n shouldExtract?: (path: string, projectRoot: string) => boolean | undefined\n shouldExcludeFromServer?: (props: {\n context: string\n request: string\n fullPath: string\n }) => boolean | string | undefined\n}\n\nexport const withTamagui = (tamaguiOptions: WithTamaguiProps) => {\n return (nextConfig: any = {}) => {\n return {\n ...nextConfig,\n webpack: (webpackConfig: any, options: any) => {\n const { dir, config, dev, isServer } = options\n\n const resolver = buildResolver(join(dir, 'index.js'), {\n constraints: 'node',\n })\n\n // @ts-ignore\n if (typeof globalThis['__DEV__'] === 'undefined') {\n // @ts-ignore\n globalThis['__DEV__'] = dev\n }\n\n const isNext12 = typeof options.config?.swcMinify === 'boolean'\n if (!isNext12) {\n throw new Error(`Next.js 12 only supported`)\n }\n\n const prefix = `${isServer ? ' ssr ' : ' web '} |`\n\n const safeResolves = (resolves: [string, string][], multiple = false) => {\n const res: string[][] = []\n for (const [out, mod] of resolves) {\n if (out.endsWith('$')) {\n res.push([out, mod])\n continue\n }\n try {\n res.push([out, resolveEsm(mod)])\n if (multiple) {\n res.push([out, resolveEsm(mod, true)])\n }\n } catch (err) {\n if (out.includes(`@gorhom/bottom-sheet`)) {\n continue\n }\n if (process.env.DEBUG?.startsWith('tamagui')) {\n // eslint-disable-next-line no-console\n console.log(prefix, `withTamagui skipping resolving ${out}`, err)\n }\n }\n }\n return res\n }\n\n const resolveEsm = (relativePath: string, onlyRequire = false) => {\n if (isServer || onlyRequire) {\n return require.resolve(relativePath)\n }\n const esm = resolver(relativePath)\n return esm ? path.join(dir, esm) : require.resolve(relativePath)\n }\n\n const SEP = path.sep\n\n // automatically compile our given components\n const componentsFullPaths = safeResolves(\n tamaguiOptions.components.map(\n (moduleName) => [moduleName, moduleName] as [string, string]\n ),\n true\n )\n\n const componentsBaseDirs = componentsFullPaths.map(([_, fullPath]) => {\n let rootPath = dirname(fullPath as string)\n while (rootPath.length > 1) {\n const pkg = join(rootPath, 'package.json')\n const hasPkg = existsSync(pkg)\n if (hasPkg) {\n return rootPath\n } else {\n rootPath = join(rootPath, '..')\n }\n }\n throw new Error(`Couldn't find package.json in any path above: ${fullPath}`)\n })\n\n function isInComponentModule(fullPath: string) {\n return componentsBaseDirs.some((componentDir) => fullPath.startsWith(componentDir))\n }\n\n // allows configuration\n const shouldExclude = (path: string, projectRoot: string) => {\n const res = tamaguiOptions.shouldExtract?.(path, projectRoot)\n if (typeof res === 'boolean') {\n return !res\n }\n if (isInComponentModule(path)) {\n return false\n }\n return shouldExcludeDefault(path, projectRoot)\n }\n\n const rnw = tamaguiOptions.useReactNativeWebLite\n ? 'react-native-web-lite'\n : 'react-native-web'\n\n const tamaguiAliases = Object.fromEntries(\n safeResolves([\n ['@tamagui/core/reset.css', '@tamagui/core/reset.css'],\n ['@tamagui/core', '@tamagui/core'],\n // web specific light react-native-svg, optional, can use svgs but had issues with compat\n ['react-native-svg', '@tamagui/react-native-svg'],\n // fixes https://github.com/kentcdodds/mdx-bundler/issues/143\n ['react/jsx-runtime.js', 'react/jsx-runtime'],\n ['react/jsx-runtime', 'react/jsx-runtime'],\n ['react/jsx-dev-runtime.js', 'react/jsx-dev-runtime'],\n ['react/jsx-dev-runtime', 'react/jsx-dev-runtime'],\n ['react-native-reanimated', 'react-native-reanimated'],\n ['react-native$', rnw],\n ['react-native-web$', rnw],\n ['@testing-library/react-native', '@tamagui/proxy-worm'],\n ['@gorhom/bottom-sheet$', '@gorhom/bottom-sheet'],\n // fix reanimated 3\n ['react-native/Libraries/Renderer/shims/ReactFabric', '@tamagui/proxy-worm'],\n ...(tamaguiOptions.aliasReactPackages\n ? ([\n ['react', 'react'],\n ['react-dom', 'react-dom'],\n ] as any)\n : []),\n ])\n )\n\n const alias = {\n ...(webpackConfig.resolve.alias || {}),\n ...tamaguiAliases,\n }\n\n if (process.env.DEBUG) {\n // eslint-disable-next-line no-console\n console.log('Tamagui alias:', alias)\n }\n\n if (process.env.ANALYZE === 'true') {\n Object.assign(webpackConfig.optimization, {\n concatenateModules: false,\n })\n }\n\n webpackConfig.resolve.alias = alias\n\n webpackConfig.plugins.push(\n new webpack.DefinePlugin({\n 'process.env.IS_STATIC': '\"\"',\n 'process.env.TAMAGUI_TARGET': '\"web\"',\n __DEV__: JSON.stringify(dev),\n })\n )\n\n const excludeExports = tamaguiOptions.excludeReactNativeWebExports\n if (Array.isArray(excludeExports)) {\n try {\n const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join('|')}).*js`\n const regex = new RegExp(regexStr)\n // console.log(prefix, 'exclude', regexStr)\n webpackConfig.plugins.push(\n new webpack.NormalModuleReplacementPlugin(regex, resolveEsm('@tamagui/proxy-worm'))\n )\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(\n `Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(', ')}`\n )\n }\n }\n\n if (process.env.IGNORE_TS_CONFIG_PATHS) {\n if (process.env.DEBUG) {\n // eslint-disable-next-line no-console\n console.log(prefix, 'ignoring tsconfig paths')\n }\n if (webpackConfig.resolve.plugins[0]) {\n delete webpackConfig.resolve.plugins[0].paths['@tamagui/*']\n delete webpackConfig.resolve.plugins[0].paths['tamagui']\n }\n }\n\n if (!dev && tamaguiOptions.enableCSSOptimizations) {\n const cssMin = webpackConfig.optimization.minimizer.find((x) =>\n x.toString().includes('css-minimizer-plugin')\n )\n if (cssMin) {\n webpackConfig.optimization.minimizer = webpackConfig.optimization.minimizer.slice(\n cssMin.index,\n 1\n )\n }\n webpackConfig.optimization.minimizer.push(new CssMinimizerPlugin())\n }\n\n /**\n * Server react-native compat\n */\n if (isServer) {\n const externalize = (context: string, request: string) => {\n const fullPath = request[0] === '.' ? path.join(context, request) : request\n\n if (tamaguiOptions.shouldExcludeFromServer) {\n const userRes = tamaguiOptions.shouldExcludeFromServer({\n context,\n request,\n fullPath,\n })\n if (userRes !== undefined) {\n return userRes\n }\n }\n\n if (isInComponentModule(fullPath)) {\n return false\n }\n\n if (fullPath.includes('react-native-web-lite')) {\n // always inline react-native-web-lite due to errors where next.js resolved the path to esm\n return false\n }\n\n // must inline react-native so we can alias to react-native-web\n if (fullPath === 'react-native' || fullPath.startsWith(`react-native${SEP}`)) {\n return false\n }\n\n if (\n // feather icons uses react-native-svg which needs to be aliased\n // fullPath.includes('/lucide-icons/') ||\n fullPath.startsWith('react-native-web') ||\n fullPath.includes(`node_modules${SEP}react-native-web`) ||\n new RegExp(`^(react-dom|react)${SEP}$`).test(fullPath)\n ) {\n return `commonjs ${fullPath}`\n }\n if (\n fullPath.startsWith('moti') ||\n fullPath.startsWith('solito') ||\n fullPath === 'tamagui' ||\n fullPath.startsWith('@tamagui') ||\n fullPath === 'react-native-safe-area-context' ||\n fullPath === 'expo-linear-gradient' ||\n fullPath.startsWith('@react-navigation') ||\n fullPath.startsWith('@gorhom')\n ) {\n return\n }\n if (/^@?react-native-/.test(request)) {\n return false\n }\n return true\n }\n\n // externalize react native things from bundle\n webpackConfig.externals = [\n ...webpackConfig.externals.map((external) => {\n if (typeof external !== 'function') {\n return external\n }\n // only runs on server\n return (ctx, cb) => {\n const isCb = typeof cb === 'function'\n const res = externalize(ctx.context, ctx.request)\n if (isCb) {\n if (typeof res === 'string') {\n return cb(null, res)\n }\n if (res) {\n return external(ctx, cb)\n }\n return cb()\n }\n return !res\n ? Promise.resolve(undefined)\n : typeof res === 'string'\n ? Promise.resolve(res)\n : external(ctx)\n }\n }),\n ]\n }\n\n const cssRules = webpackConfig.module.rules.find(\n (rule) =>\n Array.isArray(rule.oneOf) &&\n rule.oneOf.some(\n ({ test }) =>\n typeof test === 'object' &&\n typeof test.test === 'function' &&\n test.test('filename.css')\n )\n ).oneOf\n\n /**\n * Font Support\n */\n if (cssRules) {\n if (!tamaguiOptions.disableFontSupport) {\n // fonts support\n cssRules.unshift({\n test: /\\.(woff(2)?|eot|ttf|otf)(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n use: [\n {\n loader: require.resolve('url-loader'),\n options: {\n limit: nextConfig.inlineFontLimit || 1024,\n fallback: require.resolve('file-loader'),\n publicPath: `${nextConfig.assetPrefix || ''}/_next/static/chunks/fonts/`,\n outputPath: `${isServer ? '../' : ''}static/chunks/fonts/`,\n name: '[name].[ext]',\n },\n },\n ],\n })\n }\n\n /**\n * CSS Support\n */\n const cssLoader = getGlobalCssLoader(\n // @ts-ignore\n {\n assetPrefix: options.config.assetPrefix || config.assetPrefix,\n future: nextConfig.future,\n experimental: nextConfig.experimental || {},\n isEdgeRuntime: true,\n isProduction: !dev,\n targetWeb: true,\n isClient: !isServer,\n isServer,\n isDevelopment: dev,\n },\n // @ts-ignore\n () => lazyPostCSS(dir, getSupportedBrowsers(dir, dev)),\n []\n )\n\n const cssTest = tamaguiOptions.includeCSSTest ?? /\\.tamagui\\.css$/\n\n if (!dev && tamaguiOptions.enableCSSOptimizations) {\n const postCSSLoader = cssLoader[cssLoader.length - 1]\n // replace nextjs picky style rules with simple minicssextract\n cssRules.unshift({\n test: cssTest,\n use: [MiniCSSExtractPlugin.loader, 'css-loader', postCSSLoader],\n sideEffects: true,\n })\n webpackConfig.plugins.push(\n new MiniCSSExtractPlugin({\n filename: 'static/css/[contenthash].css',\n ignoreOrder: true,\n })\n )\n } else {\n cssRules.unshift({\n test: cssTest,\n sideEffects: true,\n use: cssLoader,\n })\n }\n cssRules.unshift({\n test: cssTest,\n sideEffects: true,\n use: cssLoader,\n })\n }\n\n webpackConfig.plugins.push(\n new TamaguiPlugin({\n commonjs: isServer,\n exclude: (path: string) => {\n const res = shouldExclude(path, options.dir)\n // console.log(`shouldExclude`, res, path)\n return res\n },\n ...tamaguiOptions,\n })\n )\n\n if (typeof nextConfig.webpack === 'function') {\n return nextConfig.webpack(webpackConfig, options)\n }\n\n return webpackConfig\n },\n }\n }\n}\n\nfunction getSupportedBrowsers(dir, isDevelopment) {\n let browsers\n try {\n browsers = browserslist.loadConfig({\n path: dir,\n env: isDevelopment ? 'development' : 'production',\n })\n } catch {\n //\n }\n return browsers\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAkC;AAClC,kBAAoC;AAGpC,0BAAyB;AACzB,
|
|
6
|
-
"names": ["buildResolver", "_a", "path", "shouldExcludeDefault", "webpack", "
|
|
4
|
+
"sourcesContent": ["import { existsSync, fstat } from 'fs'\nimport path, { dirname, join } from 'path'\n\nimport type { TamaguiOptions } from '@tamagui/static'\nimport browserslist from 'browserslist'\nimport buildResolver from 'esm-resolve'\nimport { lazyPostCSS } from 'next/dist/build/webpack/config/blocks/css'\nimport { getGlobalCssLoader } from 'next/dist/build/webpack/config/blocks/css/loaders'\nimport { TamaguiPlugin, shouldExclude as shouldExcludeDefault } from 'tamagui-loader'\nimport webpack from 'webpack'\n\nexport type WithTamaguiProps = TamaguiOptions & {\n useReactNativeWebLite: boolean\n disableFontSupport?: boolean\n aliasReactPackages?: boolean\n includeCSSTest?: RegExp | ((path: string) => boolean)\n shouldExtract?: (path: string, projectRoot: string) => boolean | undefined\n shouldExcludeFromServer?: (props: {\n context: string\n request: string\n fullPath: string\n }) => boolean | string | undefined\n}\n\nexport const withTamagui = (tamaguiOptions: WithTamaguiProps) => {\n return (nextConfig: any = {}) => {\n return {\n ...nextConfig,\n webpack: (webpackConfig: any, options: any) => {\n const { dir, config, dev, isServer } = options\n\n const resolver = buildResolver(join(dir, 'index.js'), {\n constraints: 'node',\n })\n\n // @ts-ignore\n if (typeof globalThis['__DEV__'] === 'undefined') {\n // @ts-ignore\n globalThis['__DEV__'] = dev\n }\n\n const isNext12 = typeof options.config?.swcMinify === 'boolean'\n if (!isNext12) {\n throw new Error(`Next.js 12 only supported`)\n }\n\n const prefix = `${isServer ? ' ssr ' : ' web '} |`\n\n const safeResolves = (resolves: [string, string][], multiple = false) => {\n const res: string[][] = []\n for (const [out, mod] of resolves) {\n if (out.endsWith('$')) {\n res.push([out, mod])\n continue\n }\n try {\n res.push([out, resolveEsm(mod)])\n if (multiple) {\n res.push([out, resolveEsm(mod, true)])\n }\n } catch (err) {\n if (out.includes(`@gorhom/bottom-sheet`)) {\n continue\n }\n if (process.env.DEBUG?.startsWith('tamagui')) {\n // eslint-disable-next-line no-console\n console.log(prefix, `withTamagui skipping resolving ${out}`, err)\n }\n }\n }\n return res\n }\n\n const resolveEsm = (relativePath: string, onlyRequire = false) => {\n if (isServer || onlyRequire) {\n return require.resolve(relativePath)\n }\n const esm = resolver(relativePath)\n return esm ? path.join(dir, esm) : require.resolve(relativePath)\n }\n\n const SEP = path.sep\n\n // automatically compile our given components\n const componentsFullPaths = safeResolves(\n tamaguiOptions.components.map(\n (moduleName) => [moduleName, moduleName] as [string, string]\n ),\n true\n )\n\n const componentsBaseDirs = componentsFullPaths.map(([_, fullPath]) => {\n let rootPath = dirname(fullPath as string)\n while (rootPath.length > 1) {\n const pkg = join(rootPath, 'package.json')\n const hasPkg = existsSync(pkg)\n if (hasPkg) {\n return rootPath\n } else {\n rootPath = join(rootPath, '..')\n }\n }\n throw new Error(`Couldn't find package.json in any path above: ${fullPath}`)\n })\n\n function isInComponentModule(fullPath: string) {\n return componentsBaseDirs.some((componentDir) =>\n fullPath.startsWith(componentDir)\n )\n }\n\n // allows configuration\n const shouldExclude = (path: string, projectRoot: string) => {\n const res = tamaguiOptions.shouldExtract?.(path, projectRoot)\n if (typeof res === 'boolean') {\n return !res\n }\n if (isInComponentModule(path)) {\n return false\n }\n return shouldExcludeDefault(path, projectRoot)\n }\n\n const rnw = tamaguiOptions.useReactNativeWebLite\n ? 'react-native-web-lite'\n : 'react-native-web'\n\n const tamaguiAliases = Object.fromEntries(\n safeResolves([\n ['@tamagui/core/reset.css', '@tamagui/core/reset.css'],\n ['@tamagui/core', '@tamagui/core'],\n // web specific light react-native-svg, optional, can use svgs but had issues with compat\n ['react-native-svg', '@tamagui/react-native-svg'],\n // fixes https://github.com/kentcdodds/mdx-bundler/issues/143\n ['react/jsx-runtime.js', 'react/jsx-runtime'],\n ['react/jsx-runtime', 'react/jsx-runtime'],\n ['react/jsx-dev-runtime.js', 'react/jsx-dev-runtime'],\n ['react/jsx-dev-runtime', 'react/jsx-dev-runtime'],\n ['react-native-reanimated', 'react-native-reanimated'],\n ['react-native$', rnw],\n ['react-native-web$', rnw],\n ['@testing-library/react-native', '@tamagui/proxy-worm'],\n ['@gorhom/bottom-sheet$', '@gorhom/bottom-sheet'],\n // fix reanimated 3\n ['react-native/Libraries/Renderer/shims/ReactFabric', '@tamagui/proxy-worm'],\n ...(tamaguiOptions.aliasReactPackages\n ? ([\n ['react', 'react'],\n ['react-dom', 'react-dom'],\n ] as any)\n : []),\n ])\n )\n\n const alias = {\n ...(webpackConfig.resolve.alias || {}),\n ...tamaguiAliases,\n }\n\n if (process.env.DEBUG) {\n // eslint-disable-next-line no-console\n console.log('Tamagui alias:', alias)\n }\n\n if (process.env.ANALYZE === 'true') {\n Object.assign(webpackConfig.optimization, {\n concatenateModules: false,\n })\n }\n\n webpackConfig.resolve.alias = alias\n\n webpackConfig.plugins.push(\n new webpack.DefinePlugin({\n 'process.env.IS_STATIC': '\"\"',\n 'process.env.TAMAGUI_TARGET': '\"web\"',\n __DEV__: JSON.stringify(dev),\n })\n )\n\n const excludeExports = tamaguiOptions.excludeReactNativeWebExports\n if (Array.isArray(excludeExports)) {\n try {\n const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join(\n '|'\n )}).*js`\n const regex = new RegExp(regexStr)\n // console.log(prefix, 'exclude', regexStr)\n webpackConfig.plugins.push(\n new webpack.NormalModuleReplacementPlugin(\n regex,\n resolveEsm('@tamagui/proxy-worm')\n )\n )\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(\n `Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(\n ', '\n )}`\n )\n }\n }\n\n if (process.env.IGNORE_TS_CONFIG_PATHS) {\n if (process.env.DEBUG) {\n // eslint-disable-next-line no-console\n console.log(prefix, 'ignoring tsconfig paths')\n }\n if (webpackConfig.resolve.plugins[0]) {\n delete webpackConfig.resolve.plugins[0].paths['@tamagui/*']\n delete webpackConfig.resolve.plugins[0].paths['tamagui']\n }\n }\n\n /**\n * Server react-native compat\n */\n if (isServer) {\n const externalize = (context: string, request: string) => {\n const fullPath = request[0] === '.' ? path.join(context, request) : request\n\n if (tamaguiOptions.shouldExcludeFromServer) {\n const userRes = tamaguiOptions.shouldExcludeFromServer({\n context,\n request,\n fullPath,\n })\n if (userRes !== undefined) {\n return userRes\n }\n }\n\n if (isInComponentModule(fullPath)) {\n return false\n }\n\n if (fullPath.includes('react-native-web-lite')) {\n // always inline react-native-web-lite due to errors where next.js resolved the path to esm\n return false\n }\n\n // must inline react-native so we can alias to react-native-web\n if (\n fullPath === 'react-native' ||\n fullPath.startsWith(`react-native${SEP}`)\n ) {\n return false\n }\n\n if (\n // feather icons uses react-native-svg which needs to be aliased\n // fullPath.includes('/lucide-icons/') ||\n fullPath.startsWith('react-native-web') ||\n fullPath.includes(`node_modules${SEP}react-native-web`) ||\n new RegExp(`^(react-dom|react)${SEP}$`).test(fullPath)\n ) {\n return `commonjs ${fullPath}`\n }\n if (\n fullPath.startsWith('moti') ||\n fullPath.startsWith('solito') ||\n fullPath === 'tamagui' ||\n fullPath.startsWith('@tamagui') ||\n fullPath === 'react-native-safe-area-context' ||\n fullPath === 'expo-linear-gradient' ||\n fullPath.startsWith('@react-navigation') ||\n fullPath.startsWith('@gorhom')\n ) {\n return\n }\n if (/^@?react-native-/.test(request)) {\n return false\n }\n return true\n }\n\n // externalize react native things from bundle\n webpackConfig.externals = [\n ...webpackConfig.externals.map((external) => {\n if (typeof external !== 'function') {\n return external\n }\n // only runs on server\n return (ctx, cb) => {\n const isCb = typeof cb === 'function'\n const res = externalize(ctx.context, ctx.request)\n if (isCb) {\n if (typeof res === 'string') {\n return cb(null, res)\n }\n if (res) {\n return external(ctx, cb)\n }\n return cb()\n }\n return !res\n ? Promise.resolve(undefined)\n : typeof res === 'string'\n ? Promise.resolve(res)\n : external(ctx)\n }\n }),\n ]\n }\n\n /**\n * Non-server support\n */\n const cssRules = webpackConfig.module.rules.find(\n (rule) =>\n Array.isArray(rule.oneOf) &&\n rule.oneOf.some(\n ({ test }) =>\n typeof test === 'object' &&\n typeof test.test === 'function' &&\n test.test('filename.css')\n )\n ).oneOf\n\n /**\n * Font Support\n */\n if (cssRules) {\n if (!tamaguiOptions.disableFontSupport) {\n // fonts support\n cssRules.unshift({\n test: /\\.(woff(2)?|eot|ttf|otf)(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n use: [\n {\n loader: require.resolve('url-loader'),\n options: {\n limit: nextConfig.inlineFontLimit || 1024,\n fallback: require.resolve('file-loader'),\n publicPath: `${\n nextConfig.assetPrefix || ''\n }/_next/static/chunks/fonts/`,\n outputPath: `${isServer ? '../' : ''}static/chunks/fonts/`,\n name: '[name].[ext]',\n },\n },\n ],\n })\n }\n\n /**\n * CSS Support\n */\n const cssLoader = getGlobalCssLoader(\n // @ts-ignore\n {\n assetPrefix: options.config.assetPrefix || config.assetPrefix,\n future: nextConfig.future,\n experimental: nextConfig.experimental || {},\n isEdgeRuntime: true,\n isProduction: !dev,\n targetWeb: true,\n isClient: !isServer,\n isServer,\n isDevelopment: dev,\n },\n // @ts-ignore\n () => lazyPostCSS(dir, getSupportedBrowsers(dir, dev)),\n []\n )\n\n cssRules.unshift({\n test: tamaguiOptions.includeCSSTest ?? /\\.tamagui\\.css$/,\n sideEffects: true,\n use: cssLoader,\n })\n }\n\n webpackConfig.plugins.push(\n new TamaguiPlugin({\n commonjs: isServer,\n exclude: (path: string) => {\n const res = shouldExclude(path, options.dir)\n // console.log(`shouldExclude`, res, path)\n return res\n },\n ...tamaguiOptions,\n })\n )\n\n if (typeof nextConfig.webpack === 'function') {\n return nextConfig.webpack(webpackConfig, options)\n }\n\n return webpackConfig\n },\n }\n }\n}\n\nfunction getSupportedBrowsers(dir, isDevelopment) {\n let browsers\n try {\n browsers = browserslist.loadConfig({\n path: dir,\n env: isDevelopment ? 'development' : 'production',\n })\n } catch {\n //\n }\n return browsers\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["buildResolver", "_a", "path", "shouldExcludeDefault", "webpack", "browserslist"]
|
|
7
7
|
}
|
package/dist/esm/withTamagui.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { existsSync } from "fs";
|
|
2
2
|
import path, { dirname, join } from "path";
|
|
3
3
|
import browserslist from "browserslist";
|
|
4
|
-
import CssMinimizerPlugin from "css-minimizer-webpack-plugin";
|
|
5
4
|
import buildResolver from "esm-resolve";
|
|
6
|
-
import MiniCSSExtractPlugin from "mini-css-extract-plugin";
|
|
7
5
|
import { lazyPostCSS } from "next/dist/build/webpack/config/blocks/css";
|
|
8
6
|
import { getGlobalCssLoader } from "next/dist/build/webpack/config/blocks/css/loaders";
|
|
9
7
|
import { TamaguiPlugin, shouldExclude as shouldExcludeDefault } from "tamagui-loader";
|
|
@@ -78,7 +76,9 @@ const withTamagui = (tamaguiOptions) => {
|
|
|
78
76
|
throw new Error(`Couldn't find package.json in any path above: ${fullPath}`);
|
|
79
77
|
});
|
|
80
78
|
function isInComponentModule(fullPath) {
|
|
81
|
-
return componentsBaseDirs.some(
|
|
79
|
+
return componentsBaseDirs.some(
|
|
80
|
+
(componentDir) => fullPath.startsWith(componentDir)
|
|
81
|
+
);
|
|
82
82
|
}
|
|
83
83
|
const shouldExclude = (path2, projectRoot) => {
|
|
84
84
|
var _a2;
|
|
@@ -136,14 +136,21 @@ const withTamagui = (tamaguiOptions) => {
|
|
|
136
136
|
const excludeExports = tamaguiOptions.excludeReactNativeWebExports;
|
|
137
137
|
if (Array.isArray(excludeExports)) {
|
|
138
138
|
try {
|
|
139
|
-
const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join(
|
|
139
|
+
const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join(
|
|
140
|
+
"|"
|
|
141
|
+
)}).*js`;
|
|
140
142
|
const regex = new RegExp(regexStr);
|
|
141
143
|
webpackConfig.plugins.push(
|
|
142
|
-
new webpack.NormalModuleReplacementPlugin(
|
|
144
|
+
new webpack.NormalModuleReplacementPlugin(
|
|
145
|
+
regex,
|
|
146
|
+
resolveEsm("@tamagui/proxy-worm")
|
|
147
|
+
)
|
|
143
148
|
);
|
|
144
149
|
} catch (err) {
|
|
145
150
|
console.warn(
|
|
146
|
-
`Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(
|
|
151
|
+
`Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(
|
|
152
|
+
", "
|
|
153
|
+
)}`
|
|
147
154
|
);
|
|
148
155
|
}
|
|
149
156
|
}
|
|
@@ -156,18 +163,6 @@ const withTamagui = (tamaguiOptions) => {
|
|
|
156
163
|
delete webpackConfig.resolve.plugins[0].paths["tamagui"];
|
|
157
164
|
}
|
|
158
165
|
}
|
|
159
|
-
if (!dev && tamaguiOptions.enableCSSOptimizations) {
|
|
160
|
-
const cssMin = webpackConfig.optimization.minimizer.find(
|
|
161
|
-
(x) => x.toString().includes("css-minimizer-plugin")
|
|
162
|
-
);
|
|
163
|
-
if (cssMin) {
|
|
164
|
-
webpackConfig.optimization.minimizer = webpackConfig.optimization.minimizer.slice(
|
|
165
|
-
cssMin.index,
|
|
166
|
-
1
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
webpackConfig.optimization.minimizer.push(new CssMinimizerPlugin());
|
|
170
|
-
}
|
|
171
166
|
if (isServer) {
|
|
172
167
|
const externalize = (context, request) => {
|
|
173
168
|
const fullPath = request[0] === "." ? path.join(context, request) : request;
|
|
@@ -261,29 +256,8 @@ const withTamagui = (tamaguiOptions) => {
|
|
|
261
256
|
() => lazyPostCSS(dir, getSupportedBrowsers(dir, dev)),
|
|
262
257
|
[]
|
|
263
258
|
);
|
|
264
|
-
const cssTest = tamaguiOptions.includeCSSTest ?? /\.tamagui\.css$/;
|
|
265
|
-
if (!dev && tamaguiOptions.enableCSSOptimizations) {
|
|
266
|
-
const postCSSLoader = cssLoader[cssLoader.length - 1];
|
|
267
|
-
cssRules.unshift({
|
|
268
|
-
test: cssTest,
|
|
269
|
-
use: [MiniCSSExtractPlugin.loader, "css-loader", postCSSLoader],
|
|
270
|
-
sideEffects: true
|
|
271
|
-
});
|
|
272
|
-
webpackConfig.plugins.push(
|
|
273
|
-
new MiniCSSExtractPlugin({
|
|
274
|
-
filename: "static/css/[contenthash].css",
|
|
275
|
-
ignoreOrder: true
|
|
276
|
-
})
|
|
277
|
-
);
|
|
278
|
-
} else {
|
|
279
|
-
cssRules.unshift({
|
|
280
|
-
test: cssTest,
|
|
281
|
-
sideEffects: true,
|
|
282
|
-
use: cssLoader
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
259
|
cssRules.unshift({
|
|
286
|
-
test:
|
|
260
|
+
test: tamaguiOptions.includeCSSTest ?? /\.tamagui\.css$/,
|
|
287
261
|
sideEffects: true,
|
|
288
262
|
use: cssLoader
|
|
289
263
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/withTamagui.ts"],
|
|
4
|
-
"sourcesContent": ["import { existsSync, fstat } from 'fs'\nimport path, { dirname, join } from 'path'\n\nimport type { TamaguiOptions } from '@tamagui/static'\nimport browserslist from 'browserslist'\nimport CssMinimizerPlugin from 'css-minimizer-webpack-plugin'\nimport buildResolver from 'esm-resolve'\nimport MiniCSSExtractPlugin from 'mini-css-extract-plugin'\nimport { lazyPostCSS } from 'next/dist/build/webpack/config/blocks/css'\nimport { getGlobalCssLoader } from 'next/dist/build/webpack/config/blocks/css/loaders'\nimport { TamaguiPlugin, shouldExclude as shouldExcludeDefault } from 'tamagui-loader'\nimport webpack from 'webpack'\n\nexport type WithTamaguiProps = TamaguiOptions & {\n useReactNativeWebLite: boolean\n disableFontSupport?: boolean\n enableCSSOptimizations?: boolean\n aliasReactPackages?: boolean\n includeCSSTest?: RegExp | ((path: string) => boolean)\n shouldExtract?: (path: string, projectRoot: string) => boolean | undefined\n shouldExcludeFromServer?: (props: {\n context: string\n request: string\n fullPath: string\n }) => boolean | string | undefined\n}\n\nexport const withTamagui = (tamaguiOptions: WithTamaguiProps) => {\n return (nextConfig: any = {}) => {\n return {\n ...nextConfig,\n webpack: (webpackConfig: any, options: any) => {\n const { dir, config, dev, isServer } = options\n\n const resolver = buildResolver(join(dir, 'index.js'), {\n constraints: 'node',\n })\n\n // @ts-ignore\n if (typeof globalThis['__DEV__'] === 'undefined') {\n // @ts-ignore\n globalThis['__DEV__'] = dev\n }\n\n const isNext12 = typeof options.config?.swcMinify === 'boolean'\n if (!isNext12) {\n throw new Error(`Next.js 12 only supported`)\n }\n\n const prefix = `${isServer ? ' ssr ' : ' web '} |`\n\n const safeResolves = (resolves: [string, string][], multiple = false) => {\n const res: string[][] = []\n for (const [out, mod] of resolves) {\n if (out.endsWith('$')) {\n res.push([out, mod])\n continue\n }\n try {\n res.push([out, resolveEsm(mod)])\n if (multiple) {\n res.push([out, resolveEsm(mod, true)])\n }\n } catch (err) {\n if (out.includes(`@gorhom/bottom-sheet`)) {\n continue\n }\n if (process.env.DEBUG?.startsWith('tamagui')) {\n // eslint-disable-next-line no-console\n console.log(prefix, `withTamagui skipping resolving ${out}`, err)\n }\n }\n }\n return res\n }\n\n const resolveEsm = (relativePath: string, onlyRequire = false) => {\n if (isServer || onlyRequire) {\n return require.resolve(relativePath)\n }\n const esm = resolver(relativePath)\n return esm ? path.join(dir, esm) : require.resolve(relativePath)\n }\n\n const SEP = path.sep\n\n // automatically compile our given components\n const componentsFullPaths = safeResolves(\n tamaguiOptions.components.map(\n (moduleName) => [moduleName, moduleName] as [string, string]\n ),\n true\n )\n\n const componentsBaseDirs = componentsFullPaths.map(([_, fullPath]) => {\n let rootPath = dirname(fullPath as string)\n while (rootPath.length > 1) {\n const pkg = join(rootPath, 'package.json')\n const hasPkg = existsSync(pkg)\n if (hasPkg) {\n return rootPath\n } else {\n rootPath = join(rootPath, '..')\n }\n }\n throw new Error(`Couldn't find package.json in any path above: ${fullPath}`)\n })\n\n function isInComponentModule(fullPath: string) {\n return componentsBaseDirs.some((componentDir) => fullPath.startsWith(componentDir))\n }\n\n // allows configuration\n const shouldExclude = (path: string, projectRoot: string) => {\n const res = tamaguiOptions.shouldExtract?.(path, projectRoot)\n if (typeof res === 'boolean') {\n return !res\n }\n if (isInComponentModule(path)) {\n return false\n }\n return shouldExcludeDefault(path, projectRoot)\n }\n\n const rnw = tamaguiOptions.useReactNativeWebLite\n ? 'react-native-web-lite'\n : 'react-native-web'\n\n const tamaguiAliases = Object.fromEntries(\n safeResolves([\n ['@tamagui/core/reset.css', '@tamagui/core/reset.css'],\n ['@tamagui/core', '@tamagui/core'],\n // web specific light react-native-svg, optional, can use svgs but had issues with compat\n ['react-native-svg', '@tamagui/react-native-svg'],\n // fixes https://github.com/kentcdodds/mdx-bundler/issues/143\n ['react/jsx-runtime.js', 'react/jsx-runtime'],\n ['react/jsx-runtime', 'react/jsx-runtime'],\n ['react/jsx-dev-runtime.js', 'react/jsx-dev-runtime'],\n ['react/jsx-dev-runtime', 'react/jsx-dev-runtime'],\n ['react-native-reanimated', 'react-native-reanimated'],\n ['react-native$', rnw],\n ['react-native-web$', rnw],\n ['@testing-library/react-native', '@tamagui/proxy-worm'],\n ['@gorhom/bottom-sheet$', '@gorhom/bottom-sheet'],\n // fix reanimated 3\n ['react-native/Libraries/Renderer/shims/ReactFabric', '@tamagui/proxy-worm'],\n ...(tamaguiOptions.aliasReactPackages\n ? ([\n ['react', 'react'],\n ['react-dom', 'react-dom'],\n ] as any)\n : []),\n ])\n )\n\n const alias = {\n ...(webpackConfig.resolve.alias || {}),\n ...tamaguiAliases,\n }\n\n if (process.env.DEBUG) {\n // eslint-disable-next-line no-console\n console.log('Tamagui alias:', alias)\n }\n\n if (process.env.ANALYZE === 'true') {\n Object.assign(webpackConfig.optimization, {\n concatenateModules: false,\n })\n }\n\n webpackConfig.resolve.alias = alias\n\n webpackConfig.plugins.push(\n new webpack.DefinePlugin({\n 'process.env.IS_STATIC': '\"\"',\n 'process.env.TAMAGUI_TARGET': '\"web\"',\n __DEV__: JSON.stringify(dev),\n })\n )\n\n const excludeExports = tamaguiOptions.excludeReactNativeWebExports\n if (Array.isArray(excludeExports)) {\n try {\n const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join('|')}).*js`\n const regex = new RegExp(regexStr)\n // console.log(prefix, 'exclude', regexStr)\n webpackConfig.plugins.push(\n new webpack.NormalModuleReplacementPlugin(regex, resolveEsm('@tamagui/proxy-worm'))\n )\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(\n `Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(', ')}`\n )\n }\n }\n\n if (process.env.IGNORE_TS_CONFIG_PATHS) {\n if (process.env.DEBUG) {\n // eslint-disable-next-line no-console\n console.log(prefix, 'ignoring tsconfig paths')\n }\n if (webpackConfig.resolve.plugins[0]) {\n delete webpackConfig.resolve.plugins[0].paths['@tamagui/*']\n delete webpackConfig.resolve.plugins[0].paths['tamagui']\n }\n }\n\n if (!dev && tamaguiOptions.enableCSSOptimizations) {\n const cssMin = webpackConfig.optimization.minimizer.find((x) =>\n x.toString().includes('css-minimizer-plugin')\n )\n if (cssMin) {\n webpackConfig.optimization.minimizer = webpackConfig.optimization.minimizer.slice(\n cssMin.index,\n 1\n )\n }\n webpackConfig.optimization.minimizer.push(new CssMinimizerPlugin())\n }\n\n /**\n * Server react-native compat\n */\n if (isServer) {\n const externalize = (context: string, request: string) => {\n const fullPath = request[0] === '.' ? path.join(context, request) : request\n\n if (tamaguiOptions.shouldExcludeFromServer) {\n const userRes = tamaguiOptions.shouldExcludeFromServer({\n context,\n request,\n fullPath,\n })\n if (userRes !== undefined) {\n return userRes\n }\n }\n\n if (isInComponentModule(fullPath)) {\n return false\n }\n\n if (fullPath.includes('react-native-web-lite')) {\n // always inline react-native-web-lite due to errors where next.js resolved the path to esm\n return false\n }\n\n // must inline react-native so we can alias to react-native-web\n if (fullPath === 'react-native' || fullPath.startsWith(`react-native${SEP}`)) {\n return false\n }\n\n if (\n // feather icons uses react-native-svg which needs to be aliased\n // fullPath.includes('/lucide-icons/') ||\n fullPath.startsWith('react-native-web') ||\n fullPath.includes(`node_modules${SEP}react-native-web`) ||\n new RegExp(`^(react-dom|react)${SEP}$`).test(fullPath)\n ) {\n return `commonjs ${fullPath}`\n }\n if (\n fullPath.startsWith('moti') ||\n fullPath.startsWith('solito') ||\n fullPath === 'tamagui' ||\n fullPath.startsWith('@tamagui') ||\n fullPath === 'react-native-safe-area-context' ||\n fullPath === 'expo-linear-gradient' ||\n fullPath.startsWith('@react-navigation') ||\n fullPath.startsWith('@gorhom')\n ) {\n return\n }\n if (/^@?react-native-/.test(request)) {\n return false\n }\n return true\n }\n\n // externalize react native things from bundle\n webpackConfig.externals = [\n ...webpackConfig.externals.map((external) => {\n if (typeof external !== 'function') {\n return external\n }\n // only runs on server\n return (ctx, cb) => {\n const isCb = typeof cb === 'function'\n const res = externalize(ctx.context, ctx.request)\n if (isCb) {\n if (typeof res === 'string') {\n return cb(null, res)\n }\n if (res) {\n return external(ctx, cb)\n }\n return cb()\n }\n return !res\n ? Promise.resolve(undefined)\n : typeof res === 'string'\n ? Promise.resolve(res)\n : external(ctx)\n }\n }),\n ]\n }\n\n const cssRules = webpackConfig.module.rules.find(\n (rule) =>\n Array.isArray(rule.oneOf) &&\n rule.oneOf.some(\n ({ test }) =>\n typeof test === 'object' &&\n typeof test.test === 'function' &&\n test.test('filename.css')\n )\n ).oneOf\n\n /**\n * Font Support\n */\n if (cssRules) {\n if (!tamaguiOptions.disableFontSupport) {\n // fonts support\n cssRules.unshift({\n test: /\\.(woff(2)?|eot|ttf|otf)(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n use: [\n {\n loader: require.resolve('url-loader'),\n options: {\n limit: nextConfig.inlineFontLimit || 1024,\n fallback: require.resolve('file-loader'),\n publicPath: `${nextConfig.assetPrefix || ''}/_next/static/chunks/fonts/`,\n outputPath: `${isServer ? '../' : ''}static/chunks/fonts/`,\n name: '[name].[ext]',\n },\n },\n ],\n })\n }\n\n /**\n * CSS Support\n */\n const cssLoader = getGlobalCssLoader(\n // @ts-ignore\n {\n assetPrefix: options.config.assetPrefix || config.assetPrefix,\n future: nextConfig.future,\n experimental: nextConfig.experimental || {},\n isEdgeRuntime: true,\n isProduction: !dev,\n targetWeb: true,\n isClient: !isServer,\n isServer,\n isDevelopment: dev,\n },\n // @ts-ignore\n () => lazyPostCSS(dir, getSupportedBrowsers(dir, dev)),\n []\n )\n\n const cssTest = tamaguiOptions.includeCSSTest ?? /\\.tamagui\\.css$/\n\n if (!dev && tamaguiOptions.enableCSSOptimizations) {\n const postCSSLoader = cssLoader[cssLoader.length - 1]\n // replace nextjs picky style rules with simple minicssextract\n cssRules.unshift({\n test: cssTest,\n use: [MiniCSSExtractPlugin.loader, 'css-loader', postCSSLoader],\n sideEffects: true,\n })\n webpackConfig.plugins.push(\n new MiniCSSExtractPlugin({\n filename: 'static/css/[contenthash].css',\n ignoreOrder: true,\n })\n )\n } else {\n cssRules.unshift({\n test: cssTest,\n sideEffects: true,\n use: cssLoader,\n })\n }\n cssRules.unshift({\n test: cssTest,\n sideEffects: true,\n use: cssLoader,\n })\n }\n\n webpackConfig.plugins.push(\n new TamaguiPlugin({\n commonjs: isServer,\n exclude: (path: string) => {\n const res = shouldExclude(path, options.dir)\n // console.log(`shouldExclude`, res, path)\n return res\n },\n ...tamaguiOptions,\n })\n )\n\n if (typeof nextConfig.webpack === 'function') {\n return nextConfig.webpack(webpackConfig, options)\n }\n\n return webpackConfig\n },\n }\n }\n}\n\nfunction getSupportedBrowsers(dir, isDevelopment) {\n let browsers\n try {\n browsers = browserslist.loadConfig({\n path: dir,\n env: isDevelopment ? 'development' : 'production',\n })\n } catch {\n //\n }\n return browsers\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,kBAAyB;AAClC,OAAO,QAAQ,SAAS,YAAY;AAGpC,OAAO,kBAAkB;AACzB,OAAO,
|
|
4
|
+
"sourcesContent": ["import { existsSync, fstat } from 'fs'\nimport path, { dirname, join } from 'path'\n\nimport type { TamaguiOptions } from '@tamagui/static'\nimport browserslist from 'browserslist'\nimport buildResolver from 'esm-resolve'\nimport { lazyPostCSS } from 'next/dist/build/webpack/config/blocks/css'\nimport { getGlobalCssLoader } from 'next/dist/build/webpack/config/blocks/css/loaders'\nimport { TamaguiPlugin, shouldExclude as shouldExcludeDefault } from 'tamagui-loader'\nimport webpack from 'webpack'\n\nexport type WithTamaguiProps = TamaguiOptions & {\n useReactNativeWebLite: boolean\n disableFontSupport?: boolean\n aliasReactPackages?: boolean\n includeCSSTest?: RegExp | ((path: string) => boolean)\n shouldExtract?: (path: string, projectRoot: string) => boolean | undefined\n shouldExcludeFromServer?: (props: {\n context: string\n request: string\n fullPath: string\n }) => boolean | string | undefined\n}\n\nexport const withTamagui = (tamaguiOptions: WithTamaguiProps) => {\n return (nextConfig: any = {}) => {\n return {\n ...nextConfig,\n webpack: (webpackConfig: any, options: any) => {\n const { dir, config, dev, isServer } = options\n\n const resolver = buildResolver(join(dir, 'index.js'), {\n constraints: 'node',\n })\n\n // @ts-ignore\n if (typeof globalThis['__DEV__'] === 'undefined') {\n // @ts-ignore\n globalThis['__DEV__'] = dev\n }\n\n const isNext12 = typeof options.config?.swcMinify === 'boolean'\n if (!isNext12) {\n throw new Error(`Next.js 12 only supported`)\n }\n\n const prefix = `${isServer ? ' ssr ' : ' web '} |`\n\n const safeResolves = (resolves: [string, string][], multiple = false) => {\n const res: string[][] = []\n for (const [out, mod] of resolves) {\n if (out.endsWith('$')) {\n res.push([out, mod])\n continue\n }\n try {\n res.push([out, resolveEsm(mod)])\n if (multiple) {\n res.push([out, resolveEsm(mod, true)])\n }\n } catch (err) {\n if (out.includes(`@gorhom/bottom-sheet`)) {\n continue\n }\n if (process.env.DEBUG?.startsWith('tamagui')) {\n // eslint-disable-next-line no-console\n console.log(prefix, `withTamagui skipping resolving ${out}`, err)\n }\n }\n }\n return res\n }\n\n const resolveEsm = (relativePath: string, onlyRequire = false) => {\n if (isServer || onlyRequire) {\n return require.resolve(relativePath)\n }\n const esm = resolver(relativePath)\n return esm ? path.join(dir, esm) : require.resolve(relativePath)\n }\n\n const SEP = path.sep\n\n // automatically compile our given components\n const componentsFullPaths = safeResolves(\n tamaguiOptions.components.map(\n (moduleName) => [moduleName, moduleName] as [string, string]\n ),\n true\n )\n\n const componentsBaseDirs = componentsFullPaths.map(([_, fullPath]) => {\n let rootPath = dirname(fullPath as string)\n while (rootPath.length > 1) {\n const pkg = join(rootPath, 'package.json')\n const hasPkg = existsSync(pkg)\n if (hasPkg) {\n return rootPath\n } else {\n rootPath = join(rootPath, '..')\n }\n }\n throw new Error(`Couldn't find package.json in any path above: ${fullPath}`)\n })\n\n function isInComponentModule(fullPath: string) {\n return componentsBaseDirs.some((componentDir) =>\n fullPath.startsWith(componentDir)\n )\n }\n\n // allows configuration\n const shouldExclude = (path: string, projectRoot: string) => {\n const res = tamaguiOptions.shouldExtract?.(path, projectRoot)\n if (typeof res === 'boolean') {\n return !res\n }\n if (isInComponentModule(path)) {\n return false\n }\n return shouldExcludeDefault(path, projectRoot)\n }\n\n const rnw = tamaguiOptions.useReactNativeWebLite\n ? 'react-native-web-lite'\n : 'react-native-web'\n\n const tamaguiAliases = Object.fromEntries(\n safeResolves([\n ['@tamagui/core/reset.css', '@tamagui/core/reset.css'],\n ['@tamagui/core', '@tamagui/core'],\n // web specific light react-native-svg, optional, can use svgs but had issues with compat\n ['react-native-svg', '@tamagui/react-native-svg'],\n // fixes https://github.com/kentcdodds/mdx-bundler/issues/143\n ['react/jsx-runtime.js', 'react/jsx-runtime'],\n ['react/jsx-runtime', 'react/jsx-runtime'],\n ['react/jsx-dev-runtime.js', 'react/jsx-dev-runtime'],\n ['react/jsx-dev-runtime', 'react/jsx-dev-runtime'],\n ['react-native-reanimated', 'react-native-reanimated'],\n ['react-native$', rnw],\n ['react-native-web$', rnw],\n ['@testing-library/react-native', '@tamagui/proxy-worm'],\n ['@gorhom/bottom-sheet$', '@gorhom/bottom-sheet'],\n // fix reanimated 3\n ['react-native/Libraries/Renderer/shims/ReactFabric', '@tamagui/proxy-worm'],\n ...(tamaguiOptions.aliasReactPackages\n ? ([\n ['react', 'react'],\n ['react-dom', 'react-dom'],\n ] as any)\n : []),\n ])\n )\n\n const alias = {\n ...(webpackConfig.resolve.alias || {}),\n ...tamaguiAliases,\n }\n\n if (process.env.DEBUG) {\n // eslint-disable-next-line no-console\n console.log('Tamagui alias:', alias)\n }\n\n if (process.env.ANALYZE === 'true') {\n Object.assign(webpackConfig.optimization, {\n concatenateModules: false,\n })\n }\n\n webpackConfig.resolve.alias = alias\n\n webpackConfig.plugins.push(\n new webpack.DefinePlugin({\n 'process.env.IS_STATIC': '\"\"',\n 'process.env.TAMAGUI_TARGET': '\"web\"',\n __DEV__: JSON.stringify(dev),\n })\n )\n\n const excludeExports = tamaguiOptions.excludeReactNativeWebExports\n if (Array.isArray(excludeExports)) {\n try {\n const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join(\n '|'\n )}).*js`\n const regex = new RegExp(regexStr)\n // console.log(prefix, 'exclude', regexStr)\n webpackConfig.plugins.push(\n new webpack.NormalModuleReplacementPlugin(\n regex,\n resolveEsm('@tamagui/proxy-worm')\n )\n )\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(\n `Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(\n ', '\n )}`\n )\n }\n }\n\n if (process.env.IGNORE_TS_CONFIG_PATHS) {\n if (process.env.DEBUG) {\n // eslint-disable-next-line no-console\n console.log(prefix, 'ignoring tsconfig paths')\n }\n if (webpackConfig.resolve.plugins[0]) {\n delete webpackConfig.resolve.plugins[0].paths['@tamagui/*']\n delete webpackConfig.resolve.plugins[0].paths['tamagui']\n }\n }\n\n /**\n * Server react-native compat\n */\n if (isServer) {\n const externalize = (context: string, request: string) => {\n const fullPath = request[0] === '.' ? path.join(context, request) : request\n\n if (tamaguiOptions.shouldExcludeFromServer) {\n const userRes = tamaguiOptions.shouldExcludeFromServer({\n context,\n request,\n fullPath,\n })\n if (userRes !== undefined) {\n return userRes\n }\n }\n\n if (isInComponentModule(fullPath)) {\n return false\n }\n\n if (fullPath.includes('react-native-web-lite')) {\n // always inline react-native-web-lite due to errors where next.js resolved the path to esm\n return false\n }\n\n // must inline react-native so we can alias to react-native-web\n if (\n fullPath === 'react-native' ||\n fullPath.startsWith(`react-native${SEP}`)\n ) {\n return false\n }\n\n if (\n // feather icons uses react-native-svg which needs to be aliased\n // fullPath.includes('/lucide-icons/') ||\n fullPath.startsWith('react-native-web') ||\n fullPath.includes(`node_modules${SEP}react-native-web`) ||\n new RegExp(`^(react-dom|react)${SEP}$`).test(fullPath)\n ) {\n return `commonjs ${fullPath}`\n }\n if (\n fullPath.startsWith('moti') ||\n fullPath.startsWith('solito') ||\n fullPath === 'tamagui' ||\n fullPath.startsWith('@tamagui') ||\n fullPath === 'react-native-safe-area-context' ||\n fullPath === 'expo-linear-gradient' ||\n fullPath.startsWith('@react-navigation') ||\n fullPath.startsWith('@gorhom')\n ) {\n return\n }\n if (/^@?react-native-/.test(request)) {\n return false\n }\n return true\n }\n\n // externalize react native things from bundle\n webpackConfig.externals = [\n ...webpackConfig.externals.map((external) => {\n if (typeof external !== 'function') {\n return external\n }\n // only runs on server\n return (ctx, cb) => {\n const isCb = typeof cb === 'function'\n const res = externalize(ctx.context, ctx.request)\n if (isCb) {\n if (typeof res === 'string') {\n return cb(null, res)\n }\n if (res) {\n return external(ctx, cb)\n }\n return cb()\n }\n return !res\n ? Promise.resolve(undefined)\n : typeof res === 'string'\n ? Promise.resolve(res)\n : external(ctx)\n }\n }),\n ]\n }\n\n /**\n * Non-server support\n */\n const cssRules = webpackConfig.module.rules.find(\n (rule) =>\n Array.isArray(rule.oneOf) &&\n rule.oneOf.some(\n ({ test }) =>\n typeof test === 'object' &&\n typeof test.test === 'function' &&\n test.test('filename.css')\n )\n ).oneOf\n\n /**\n * Font Support\n */\n if (cssRules) {\n if (!tamaguiOptions.disableFontSupport) {\n // fonts support\n cssRules.unshift({\n test: /\\.(woff(2)?|eot|ttf|otf)(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n use: [\n {\n loader: require.resolve('url-loader'),\n options: {\n limit: nextConfig.inlineFontLimit || 1024,\n fallback: require.resolve('file-loader'),\n publicPath: `${\n nextConfig.assetPrefix || ''\n }/_next/static/chunks/fonts/`,\n outputPath: `${isServer ? '../' : ''}static/chunks/fonts/`,\n name: '[name].[ext]',\n },\n },\n ],\n })\n }\n\n /**\n * CSS Support\n */\n const cssLoader = getGlobalCssLoader(\n // @ts-ignore\n {\n assetPrefix: options.config.assetPrefix || config.assetPrefix,\n future: nextConfig.future,\n experimental: nextConfig.experimental || {},\n isEdgeRuntime: true,\n isProduction: !dev,\n targetWeb: true,\n isClient: !isServer,\n isServer,\n isDevelopment: dev,\n },\n // @ts-ignore\n () => lazyPostCSS(dir, getSupportedBrowsers(dir, dev)),\n []\n )\n\n cssRules.unshift({\n test: tamaguiOptions.includeCSSTest ?? /\\.tamagui\\.css$/,\n sideEffects: true,\n use: cssLoader,\n })\n }\n\n webpackConfig.plugins.push(\n new TamaguiPlugin({\n commonjs: isServer,\n exclude: (path: string) => {\n const res = shouldExclude(path, options.dir)\n // console.log(`shouldExclude`, res, path)\n return res\n },\n ...tamaguiOptions,\n })\n )\n\n if (typeof nextConfig.webpack === 'function') {\n return nextConfig.webpack(webpackConfig, options)\n }\n\n return webpackConfig\n },\n }\n }\n}\n\nfunction getSupportedBrowsers(dir, isDevelopment) {\n let browsers\n try {\n browsers = browserslist.loadConfig({\n path: dir,\n env: isDevelopment ? 'development' : 'production',\n })\n } catch {\n //\n }\n return browsers\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["_a", "path"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/next-plugin",
|
|
3
|
-
"version": "1.0.1-rc.
|
|
3
|
+
"version": "1.0.1-rc.7",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"types": "./types/index.d.ts",
|
|
@@ -14,32 +14,29 @@
|
|
|
14
14
|
"scripts": {
|
|
15
15
|
"build": "tamagui-build",
|
|
16
16
|
"watch": "tamagui-build --watch",
|
|
17
|
-
"lint": "
|
|
18
|
-
"lint:fix": "
|
|
17
|
+
"lint": "../../node_modules/.bin/rome check src",
|
|
18
|
+
"lint:fix": "../../node_modules/.bin/rome check --apply-suggested src",
|
|
19
19
|
"clean": "tamagui-build clean",
|
|
20
20
|
"clean:build": "tamagui-build clean:build"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@babel/preset-react": "^7.18.6",
|
|
24
|
-
"@tamagui/proxy-worm": "^1.0.1-rc.
|
|
25
|
-
"@tamagui/react-native-svg": "^1.0.1-rc.
|
|
26
|
-
"@tamagui/static": "^1.0.1-rc.
|
|
24
|
+
"@tamagui/proxy-worm": "^1.0.1-rc.7",
|
|
25
|
+
"@tamagui/react-native-svg": "^1.0.1-rc.7",
|
|
26
|
+
"@tamagui/static": "^1.0.1-rc.7",
|
|
27
27
|
"babel-loader": "^8.2.5",
|
|
28
28
|
"browserslist": "^4.21.1",
|
|
29
29
|
"css-loader": "^5.2.4",
|
|
30
|
-
"css-minimizer-webpack-plugin": "^4.2.2",
|
|
31
30
|
"esbuild-loader": "^2.19.0",
|
|
32
31
|
"esm-resolve": "^1.0.8",
|
|
33
32
|
"file-loader": "^6.2.0",
|
|
34
|
-
"html-inline-css-webpack-plugin": "^1.11.1",
|
|
35
33
|
"html-webpack-plugin": "^5.5.0",
|
|
36
|
-
"
|
|
37
|
-
"tamagui-loader": "^1.0.1-rc.5.1",
|
|
34
|
+
"tamagui-loader": "^1.0.1-rc.7",
|
|
38
35
|
"thread-loader": "^3.0.4",
|
|
39
36
|
"url-loader": "^4.1.1"
|
|
40
37
|
},
|
|
41
38
|
"devDependencies": {
|
|
42
|
-
"@tamagui/build": "^1.0.1-rc.
|
|
39
|
+
"@tamagui/build": "^1.0.1-rc.7",
|
|
43
40
|
"next": "^13.0.6"
|
|
44
41
|
},
|
|
45
42
|
"peerDependencies": {
|
package/src/withTamagui.ts
CHANGED
|
@@ -3,9 +3,7 @@ import path, { dirname, join } from 'path'
|
|
|
3
3
|
|
|
4
4
|
import type { TamaguiOptions } from '@tamagui/static'
|
|
5
5
|
import browserslist from 'browserslist'
|
|
6
|
-
import CssMinimizerPlugin from 'css-minimizer-webpack-plugin'
|
|
7
6
|
import buildResolver from 'esm-resolve'
|
|
8
|
-
import MiniCSSExtractPlugin from 'mini-css-extract-plugin'
|
|
9
7
|
import { lazyPostCSS } from 'next/dist/build/webpack/config/blocks/css'
|
|
10
8
|
import { getGlobalCssLoader } from 'next/dist/build/webpack/config/blocks/css/loaders'
|
|
11
9
|
import { TamaguiPlugin, shouldExclude as shouldExcludeDefault } from 'tamagui-loader'
|
|
@@ -14,7 +12,6 @@ import webpack from 'webpack'
|
|
|
14
12
|
export type WithTamaguiProps = TamaguiOptions & {
|
|
15
13
|
useReactNativeWebLite: boolean
|
|
16
14
|
disableFontSupport?: boolean
|
|
17
|
-
enableCSSOptimizations?: boolean
|
|
18
15
|
aliasReactPackages?: boolean
|
|
19
16
|
includeCSSTest?: RegExp | ((path: string) => boolean)
|
|
20
17
|
shouldExtract?: (path: string, projectRoot: string) => boolean | undefined
|
|
@@ -107,7 +104,9 @@ export const withTamagui = (tamaguiOptions: WithTamaguiProps) => {
|
|
|
107
104
|
})
|
|
108
105
|
|
|
109
106
|
function isInComponentModule(fullPath: string) {
|
|
110
|
-
return componentsBaseDirs.some((componentDir) =>
|
|
107
|
+
return componentsBaseDirs.some((componentDir) =>
|
|
108
|
+
fullPath.startsWith(componentDir)
|
|
109
|
+
)
|
|
111
110
|
}
|
|
112
111
|
|
|
113
112
|
// allows configuration
|
|
@@ -182,16 +181,23 @@ export const withTamagui = (tamaguiOptions: WithTamaguiProps) => {
|
|
|
182
181
|
const excludeExports = tamaguiOptions.excludeReactNativeWebExports
|
|
183
182
|
if (Array.isArray(excludeExports)) {
|
|
184
183
|
try {
|
|
185
|
-
const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join(
|
|
184
|
+
const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join(
|
|
185
|
+
'|'
|
|
186
|
+
)}).*js`
|
|
186
187
|
const regex = new RegExp(regexStr)
|
|
187
188
|
// console.log(prefix, 'exclude', regexStr)
|
|
188
189
|
webpackConfig.plugins.push(
|
|
189
|
-
new webpack.NormalModuleReplacementPlugin(
|
|
190
|
+
new webpack.NormalModuleReplacementPlugin(
|
|
191
|
+
regex,
|
|
192
|
+
resolveEsm('@tamagui/proxy-worm')
|
|
193
|
+
)
|
|
190
194
|
)
|
|
191
195
|
} catch (err) {
|
|
192
196
|
// eslint-disable-next-line no-console
|
|
193
197
|
console.warn(
|
|
194
|
-
`Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(
|
|
198
|
+
`Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(
|
|
199
|
+
', '
|
|
200
|
+
)}`
|
|
195
201
|
)
|
|
196
202
|
}
|
|
197
203
|
}
|
|
@@ -207,19 +213,6 @@ export const withTamagui = (tamaguiOptions: WithTamaguiProps) => {
|
|
|
207
213
|
}
|
|
208
214
|
}
|
|
209
215
|
|
|
210
|
-
if (!dev && tamaguiOptions.enableCSSOptimizations) {
|
|
211
|
-
const cssMin = webpackConfig.optimization.minimizer.find((x) =>
|
|
212
|
-
x.toString().includes('css-minimizer-plugin')
|
|
213
|
-
)
|
|
214
|
-
if (cssMin) {
|
|
215
|
-
webpackConfig.optimization.minimizer = webpackConfig.optimization.minimizer.slice(
|
|
216
|
-
cssMin.index,
|
|
217
|
-
1
|
|
218
|
-
)
|
|
219
|
-
}
|
|
220
|
-
webpackConfig.optimization.minimizer.push(new CssMinimizerPlugin())
|
|
221
|
-
}
|
|
222
|
-
|
|
223
216
|
/**
|
|
224
217
|
* Server react-native compat
|
|
225
218
|
*/
|
|
@@ -248,7 +241,10 @@ export const withTamagui = (tamaguiOptions: WithTamaguiProps) => {
|
|
|
248
241
|
}
|
|
249
242
|
|
|
250
243
|
// must inline react-native so we can alias to react-native-web
|
|
251
|
-
if (
|
|
244
|
+
if (
|
|
245
|
+
fullPath === 'react-native' ||
|
|
246
|
+
fullPath.startsWith(`react-native${SEP}`)
|
|
247
|
+
) {
|
|
252
248
|
return false
|
|
253
249
|
}
|
|
254
250
|
|
|
@@ -308,6 +304,9 @@ export const withTamagui = (tamaguiOptions: WithTamaguiProps) => {
|
|
|
308
304
|
]
|
|
309
305
|
}
|
|
310
306
|
|
|
307
|
+
/**
|
|
308
|
+
* Non-server support
|
|
309
|
+
*/
|
|
311
310
|
const cssRules = webpackConfig.module.rules.find(
|
|
312
311
|
(rule) =>
|
|
313
312
|
Array.isArray(rule.oneOf) &&
|
|
@@ -333,7 +332,9 @@ export const withTamagui = (tamaguiOptions: WithTamaguiProps) => {
|
|
|
333
332
|
options: {
|
|
334
333
|
limit: nextConfig.inlineFontLimit || 1024,
|
|
335
334
|
fallback: require.resolve('file-loader'),
|
|
336
|
-
publicPath: `${
|
|
335
|
+
publicPath: `${
|
|
336
|
+
nextConfig.assetPrefix || ''
|
|
337
|
+
}/_next/static/chunks/fonts/`,
|
|
337
338
|
outputPath: `${isServer ? '../' : ''}static/chunks/fonts/`,
|
|
338
339
|
name: '[name].[ext]',
|
|
339
340
|
},
|
|
@@ -363,31 +364,8 @@ export const withTamagui = (tamaguiOptions: WithTamaguiProps) => {
|
|
|
363
364
|
[]
|
|
364
365
|
)
|
|
365
366
|
|
|
366
|
-
const cssTest = tamaguiOptions.includeCSSTest ?? /\.tamagui\.css$/
|
|
367
|
-
|
|
368
|
-
if (!dev && tamaguiOptions.enableCSSOptimizations) {
|
|
369
|
-
const postCSSLoader = cssLoader[cssLoader.length - 1]
|
|
370
|
-
// replace nextjs picky style rules with simple minicssextract
|
|
371
|
-
cssRules.unshift({
|
|
372
|
-
test: cssTest,
|
|
373
|
-
use: [MiniCSSExtractPlugin.loader, 'css-loader', postCSSLoader],
|
|
374
|
-
sideEffects: true,
|
|
375
|
-
})
|
|
376
|
-
webpackConfig.plugins.push(
|
|
377
|
-
new MiniCSSExtractPlugin({
|
|
378
|
-
filename: 'static/css/[contenthash].css',
|
|
379
|
-
ignoreOrder: true,
|
|
380
|
-
})
|
|
381
|
-
)
|
|
382
|
-
} else {
|
|
383
|
-
cssRules.unshift({
|
|
384
|
-
test: cssTest,
|
|
385
|
-
sideEffects: true,
|
|
386
|
-
use: cssLoader,
|
|
387
|
-
})
|
|
388
|
-
}
|
|
389
367
|
cssRules.unshift({
|
|
390
|
-
test:
|
|
368
|
+
test: tamaguiOptions.includeCSSTest ?? /\.tamagui\.css$/,
|
|
391
369
|
sideEffects: true,
|
|
392
370
|
use: cssLoader,
|
|
393
371
|
})
|
package/types/withTamagui.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import type { TamaguiOptions } from '@tamagui/static';
|
|
|
2
2
|
export type WithTamaguiProps = TamaguiOptions & {
|
|
3
3
|
useReactNativeWebLite: boolean;
|
|
4
4
|
disableFontSupport?: boolean;
|
|
5
|
-
enableCSSOptimizations?: boolean;
|
|
6
5
|
aliasReactPackages?: boolean;
|
|
7
6
|
includeCSSTest?: RegExp | ((path: string) => boolean);
|
|
8
7
|
shouldExtract?: (path: string, projectRoot: string) => boolean | undefined;
|
package/dist/jsx/index.js
DELETED
package/dist/jsx/index.js.map
DELETED
package/dist/jsx/withTamagui.js
DELETED
|
@@ -1,320 +0,0 @@
|
|
|
1
|
-
import { existsSync } from "fs";
|
|
2
|
-
import path, { dirname, join } from "path";
|
|
3
|
-
import browserslist from "browserslist";
|
|
4
|
-
import CssMinimizerPlugin from "css-minimizer-webpack-plugin";
|
|
5
|
-
import buildResolver from "esm-resolve";
|
|
6
|
-
import MiniCSSExtractPlugin from "mini-css-extract-plugin";
|
|
7
|
-
import { lazyPostCSS } from "next/dist/build/webpack/config/blocks/css";
|
|
8
|
-
import { getGlobalCssLoader } from "next/dist/build/webpack/config/blocks/css/loaders";
|
|
9
|
-
import { TamaguiPlugin, shouldExclude as shouldExcludeDefault } from "tamagui-loader";
|
|
10
|
-
import webpack from "webpack";
|
|
11
|
-
const withTamagui = (tamaguiOptions) => {
|
|
12
|
-
return (nextConfig = {}) => {
|
|
13
|
-
return {
|
|
14
|
-
...nextConfig,
|
|
15
|
-
webpack: (webpackConfig, options) => {
|
|
16
|
-
const { dir, config, dev, isServer } = options;
|
|
17
|
-
const resolver = buildResolver(join(dir, "index.js"), {
|
|
18
|
-
constraints: "node"
|
|
19
|
-
});
|
|
20
|
-
if (typeof globalThis["__DEV__"] === "undefined") {
|
|
21
|
-
globalThis["__DEV__"] = dev;
|
|
22
|
-
}
|
|
23
|
-
const isNext12 = typeof options.config?.swcMinify === "boolean";
|
|
24
|
-
if (!isNext12) {
|
|
25
|
-
throw new Error(`Next.js 12 only supported`);
|
|
26
|
-
}
|
|
27
|
-
const prefix = `${isServer ? " ssr " : " web "} |`;
|
|
28
|
-
const safeResolves = (resolves, multiple = false) => {
|
|
29
|
-
const res = [];
|
|
30
|
-
for (const [out, mod] of resolves) {
|
|
31
|
-
if (out.endsWith("$")) {
|
|
32
|
-
res.push([out, mod]);
|
|
33
|
-
continue;
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
res.push([out, resolveEsm(mod)]);
|
|
37
|
-
if (multiple) {
|
|
38
|
-
res.push([out, resolveEsm(mod, true)]);
|
|
39
|
-
}
|
|
40
|
-
} catch (err) {
|
|
41
|
-
if (out.includes(`@gorhom/bottom-sheet`)) {
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
if (process.env.DEBUG?.startsWith("tamagui")) {
|
|
45
|
-
console.log(prefix, `withTamagui skipping resolving ${out}`, err);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return res;
|
|
50
|
-
};
|
|
51
|
-
const resolveEsm = (relativePath, onlyRequire = false) => {
|
|
52
|
-
if (isServer || onlyRequire) {
|
|
53
|
-
return require.resolve(relativePath);
|
|
54
|
-
}
|
|
55
|
-
const esm = resolver(relativePath);
|
|
56
|
-
return esm ? path.join(dir, esm) : require.resolve(relativePath);
|
|
57
|
-
};
|
|
58
|
-
const SEP = path.sep;
|
|
59
|
-
const componentsFullPaths = safeResolves(
|
|
60
|
-
tamaguiOptions.components.map(
|
|
61
|
-
(moduleName) => [moduleName, moduleName]
|
|
62
|
-
),
|
|
63
|
-
true
|
|
64
|
-
);
|
|
65
|
-
const componentsBaseDirs = componentsFullPaths.map(([_, fullPath]) => {
|
|
66
|
-
let rootPath = dirname(fullPath);
|
|
67
|
-
while (rootPath.length > 1) {
|
|
68
|
-
const pkg = join(rootPath, "package.json");
|
|
69
|
-
const hasPkg = existsSync(pkg);
|
|
70
|
-
if (hasPkg) {
|
|
71
|
-
return rootPath;
|
|
72
|
-
} else {
|
|
73
|
-
rootPath = join(rootPath, "..");
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
throw new Error(`Couldn't find package.json in any path above: ${fullPath}`);
|
|
77
|
-
});
|
|
78
|
-
function isInComponentModule(fullPath) {
|
|
79
|
-
return componentsBaseDirs.some((componentDir) => fullPath.startsWith(componentDir));
|
|
80
|
-
}
|
|
81
|
-
const shouldExclude = (path2, projectRoot) => {
|
|
82
|
-
const res = tamaguiOptions.shouldExtract?.(path2, projectRoot);
|
|
83
|
-
if (typeof res === "boolean") {
|
|
84
|
-
return !res;
|
|
85
|
-
}
|
|
86
|
-
if (isInComponentModule(path2)) {
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
return shouldExcludeDefault(path2, projectRoot);
|
|
90
|
-
};
|
|
91
|
-
const rnw = tamaguiOptions.useReactNativeWebLite ? "react-native-web-lite" : "react-native-web";
|
|
92
|
-
const tamaguiAliases = Object.fromEntries(
|
|
93
|
-
safeResolves([
|
|
94
|
-
["@tamagui/core/reset.css", "@tamagui/core/reset.css"],
|
|
95
|
-
["@tamagui/core", "@tamagui/core"],
|
|
96
|
-
["react-native-svg", "@tamagui/react-native-svg"],
|
|
97
|
-
["react/jsx-runtime.js", "react/jsx-runtime"],
|
|
98
|
-
["react/jsx-runtime", "react/jsx-runtime"],
|
|
99
|
-
["react/jsx-dev-runtime.js", "react/jsx-dev-runtime"],
|
|
100
|
-
["react/jsx-dev-runtime", "react/jsx-dev-runtime"],
|
|
101
|
-
["react-native-reanimated", "react-native-reanimated"],
|
|
102
|
-
["react-native$", rnw],
|
|
103
|
-
["react-native-web$", rnw],
|
|
104
|
-
["@testing-library/react-native", "@tamagui/proxy-worm"],
|
|
105
|
-
["@gorhom/bottom-sheet$", "@gorhom/bottom-sheet"],
|
|
106
|
-
["react-native/Libraries/Renderer/shims/ReactFabric", "@tamagui/proxy-worm"],
|
|
107
|
-
...tamaguiOptions.aliasReactPackages ? [
|
|
108
|
-
["react", "react"],
|
|
109
|
-
["react-dom", "react-dom"]
|
|
110
|
-
] : []
|
|
111
|
-
])
|
|
112
|
-
);
|
|
113
|
-
const alias = {
|
|
114
|
-
...webpackConfig.resolve.alias || {},
|
|
115
|
-
...tamaguiAliases
|
|
116
|
-
};
|
|
117
|
-
if (process.env.DEBUG) {
|
|
118
|
-
console.log("Tamagui alias:", alias);
|
|
119
|
-
}
|
|
120
|
-
if (process.env.ANALYZE === "true") {
|
|
121
|
-
Object.assign(webpackConfig.optimization, {
|
|
122
|
-
concatenateModules: false
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
webpackConfig.resolve.alias = alias;
|
|
126
|
-
webpackConfig.plugins.push(
|
|
127
|
-
new webpack.DefinePlugin({
|
|
128
|
-
"process.env.IS_STATIC": '""',
|
|
129
|
-
"process.env.TAMAGUI_TARGET": '"web"',
|
|
130
|
-
__DEV__: JSON.stringify(dev)
|
|
131
|
-
})
|
|
132
|
-
);
|
|
133
|
-
const excludeExports = tamaguiOptions.excludeReactNativeWebExports;
|
|
134
|
-
if (Array.isArray(excludeExports)) {
|
|
135
|
-
try {
|
|
136
|
-
const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join("|")}).*js`;
|
|
137
|
-
const regex = new RegExp(regexStr);
|
|
138
|
-
webpackConfig.plugins.push(
|
|
139
|
-
new webpack.NormalModuleReplacementPlugin(regex, resolveEsm("@tamagui/proxy-worm"))
|
|
140
|
-
);
|
|
141
|
-
} catch (err) {
|
|
142
|
-
console.warn(
|
|
143
|
-
`Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(", ")}`
|
|
144
|
-
);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
if (process.env.IGNORE_TS_CONFIG_PATHS) {
|
|
148
|
-
if (process.env.DEBUG) {
|
|
149
|
-
console.log(prefix, "ignoring tsconfig paths");
|
|
150
|
-
}
|
|
151
|
-
if (webpackConfig.resolve.plugins[0]) {
|
|
152
|
-
delete webpackConfig.resolve.plugins[0].paths["@tamagui/*"];
|
|
153
|
-
delete webpackConfig.resolve.plugins[0].paths["tamagui"];
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
if (!dev && tamaguiOptions.enableCSSOptimizations) {
|
|
157
|
-
const cssMin = webpackConfig.optimization.minimizer.find(
|
|
158
|
-
(x) => x.toString().includes("css-minimizer-plugin")
|
|
159
|
-
);
|
|
160
|
-
if (cssMin) {
|
|
161
|
-
webpackConfig.optimization.minimizer = webpackConfig.optimization.minimizer.slice(
|
|
162
|
-
cssMin.index,
|
|
163
|
-
1
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
webpackConfig.optimization.minimizer.push(new CssMinimizerPlugin());
|
|
167
|
-
}
|
|
168
|
-
if (isServer) {
|
|
169
|
-
const externalize = (context, request) => {
|
|
170
|
-
const fullPath = request[0] === "." ? path.join(context, request) : request;
|
|
171
|
-
if (tamaguiOptions.shouldExcludeFromServer) {
|
|
172
|
-
const userRes = tamaguiOptions.shouldExcludeFromServer({
|
|
173
|
-
context,
|
|
174
|
-
request,
|
|
175
|
-
fullPath
|
|
176
|
-
});
|
|
177
|
-
if (userRes !== void 0) {
|
|
178
|
-
return userRes;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
if (isInComponentModule(fullPath)) {
|
|
182
|
-
return false;
|
|
183
|
-
}
|
|
184
|
-
if (fullPath.includes("react-native-web-lite")) {
|
|
185
|
-
return false;
|
|
186
|
-
}
|
|
187
|
-
if (fullPath === "react-native" || fullPath.startsWith(`react-native${SEP}`)) {
|
|
188
|
-
return false;
|
|
189
|
-
}
|
|
190
|
-
if (fullPath.startsWith("react-native-web") || fullPath.includes(`node_modules${SEP}react-native-web`) || new RegExp(`^(react-dom|react)${SEP}$`).test(fullPath)) {
|
|
191
|
-
return `commonjs ${fullPath}`;
|
|
192
|
-
}
|
|
193
|
-
if (fullPath.startsWith("moti") || fullPath.startsWith("solito") || fullPath === "tamagui" || fullPath.startsWith("@tamagui") || fullPath === "react-native-safe-area-context" || fullPath === "expo-linear-gradient" || fullPath.startsWith("@react-navigation") || fullPath.startsWith("@gorhom")) {
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
if (/^@?react-native-/.test(request)) {
|
|
197
|
-
return false;
|
|
198
|
-
}
|
|
199
|
-
return true;
|
|
200
|
-
};
|
|
201
|
-
webpackConfig.externals = [
|
|
202
|
-
...webpackConfig.externals.map((external) => {
|
|
203
|
-
if (typeof external !== "function") {
|
|
204
|
-
return external;
|
|
205
|
-
}
|
|
206
|
-
return (ctx, cb) => {
|
|
207
|
-
const isCb = typeof cb === "function";
|
|
208
|
-
const res = externalize(ctx.context, ctx.request);
|
|
209
|
-
if (isCb) {
|
|
210
|
-
if (typeof res === "string") {
|
|
211
|
-
return cb(null, res);
|
|
212
|
-
}
|
|
213
|
-
if (res) {
|
|
214
|
-
return external(ctx, cb);
|
|
215
|
-
}
|
|
216
|
-
return cb();
|
|
217
|
-
}
|
|
218
|
-
return !res ? Promise.resolve(void 0) : typeof res === "string" ? Promise.resolve(res) : external(ctx);
|
|
219
|
-
};
|
|
220
|
-
})
|
|
221
|
-
];
|
|
222
|
-
}
|
|
223
|
-
const cssRules = webpackConfig.module.rules.find(
|
|
224
|
-
(rule) => Array.isArray(rule.oneOf) && rule.oneOf.some(
|
|
225
|
-
({ test }) => typeof test === "object" && typeof test.test === "function" && test.test("filename.css")
|
|
226
|
-
)
|
|
227
|
-
).oneOf;
|
|
228
|
-
if (cssRules) {
|
|
229
|
-
if (!tamaguiOptions.disableFontSupport) {
|
|
230
|
-
cssRules.unshift({
|
|
231
|
-
test: /\.(woff(2)?|eot|ttf|otf)(\?v=\d+\.\d+\.\d+)?$/,
|
|
232
|
-
use: [
|
|
233
|
-
{
|
|
234
|
-
loader: require.resolve("url-loader"),
|
|
235
|
-
options: {
|
|
236
|
-
limit: nextConfig.inlineFontLimit || 1024,
|
|
237
|
-
fallback: require.resolve("file-loader"),
|
|
238
|
-
publicPath: `${nextConfig.assetPrefix || ""}/_next/static/chunks/fonts/`,
|
|
239
|
-
outputPath: `${isServer ? "../" : ""}static/chunks/fonts/`,
|
|
240
|
-
name: "[name].[ext]"
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
]
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
const cssLoader = getGlobalCssLoader(
|
|
247
|
-
{
|
|
248
|
-
assetPrefix: options.config.assetPrefix || config.assetPrefix,
|
|
249
|
-
future: nextConfig.future,
|
|
250
|
-
experimental: nextConfig.experimental || {},
|
|
251
|
-
isEdgeRuntime: true,
|
|
252
|
-
isProduction: !dev,
|
|
253
|
-
targetWeb: true,
|
|
254
|
-
isClient: !isServer,
|
|
255
|
-
isServer,
|
|
256
|
-
isDevelopment: dev
|
|
257
|
-
},
|
|
258
|
-
() => lazyPostCSS(dir, getSupportedBrowsers(dir, dev)),
|
|
259
|
-
[]
|
|
260
|
-
);
|
|
261
|
-
const cssTest = tamaguiOptions.includeCSSTest ?? /\.css$/;
|
|
262
|
-
if (!dev && tamaguiOptions.enableCSSOptimizations) {
|
|
263
|
-
const postCSSLoader = cssLoader[cssLoader.length - 1];
|
|
264
|
-
cssRules.unshift({
|
|
265
|
-
test: cssTest,
|
|
266
|
-
use: [MiniCSSExtractPlugin.loader, "css-loader", postCSSLoader],
|
|
267
|
-
sideEffects: true
|
|
268
|
-
});
|
|
269
|
-
webpackConfig.plugins.push(
|
|
270
|
-
new MiniCSSExtractPlugin({
|
|
271
|
-
filename: "static/css/[contenthash].css",
|
|
272
|
-
ignoreOrder: true
|
|
273
|
-
})
|
|
274
|
-
);
|
|
275
|
-
} else {
|
|
276
|
-
cssRules.unshift({
|
|
277
|
-
test: cssTest,
|
|
278
|
-
sideEffects: true,
|
|
279
|
-
use: cssLoader
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
cssRules.unshift({
|
|
283
|
-
test: cssTest,
|
|
284
|
-
sideEffects: true,
|
|
285
|
-
use: cssLoader
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
webpackConfig.plugins.push(
|
|
289
|
-
new TamaguiPlugin({
|
|
290
|
-
commonjs: isServer,
|
|
291
|
-
exclude: (path2) => {
|
|
292
|
-
const res = shouldExclude(path2, options.dir);
|
|
293
|
-
return res;
|
|
294
|
-
},
|
|
295
|
-
...tamaguiOptions
|
|
296
|
-
})
|
|
297
|
-
);
|
|
298
|
-
if (typeof nextConfig.webpack === "function") {
|
|
299
|
-
return nextConfig.webpack(webpackConfig, options);
|
|
300
|
-
}
|
|
301
|
-
return webpackConfig;
|
|
302
|
-
}
|
|
303
|
-
};
|
|
304
|
-
};
|
|
305
|
-
};
|
|
306
|
-
function getSupportedBrowsers(dir, isDevelopment) {
|
|
307
|
-
let browsers;
|
|
308
|
-
try {
|
|
309
|
-
browsers = browserslist.loadConfig({
|
|
310
|
-
path: dir,
|
|
311
|
-
env: isDevelopment ? "development" : "production"
|
|
312
|
-
});
|
|
313
|
-
} catch {
|
|
314
|
-
}
|
|
315
|
-
return browsers;
|
|
316
|
-
}
|
|
317
|
-
export {
|
|
318
|
-
withTamagui
|
|
319
|
-
};
|
|
320
|
-
//# sourceMappingURL=withTamagui.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/withTamagui.ts"],
|
|
4
|
-
"sourcesContent": ["import { existsSync, fstat } from 'fs'\nimport path, { dirname, join } from 'path'\n\nimport type { TamaguiOptions } from '@tamagui/static'\nimport browserslist from 'browserslist'\nimport CssMinimizerPlugin from 'css-minimizer-webpack-plugin'\nimport buildResolver from 'esm-resolve'\nimport MiniCSSExtractPlugin from 'mini-css-extract-plugin'\nimport { lazyPostCSS } from 'next/dist/build/webpack/config/blocks/css'\nimport { getGlobalCssLoader } from 'next/dist/build/webpack/config/blocks/css/loaders'\nimport { TamaguiPlugin, shouldExclude as shouldExcludeDefault } from 'tamagui-loader'\nimport webpack from 'webpack'\n\nexport type WithTamaguiProps = TamaguiOptions & {\n useReactNativeWebLite: boolean\n disableFontSupport?: boolean\n enableCSSOptimizations?: boolean\n aliasReactPackages?: boolean\n includeCSSTest?: RegExp | ((path: string) => boolean)\n shouldExtract?: (path: string, projectRoot: string) => boolean | undefined\n shouldExcludeFromServer?: (props: {\n context: string\n request: string\n fullPath: string\n }) => boolean | string | undefined\n}\n\nexport const withTamagui = (tamaguiOptions: WithTamaguiProps) => {\n return (nextConfig: any = {}) => {\n return {\n ...nextConfig,\n webpack: (webpackConfig: any, options: any) => {\n const { dir, config, dev, isServer } = options\n\n const resolver = buildResolver(join(dir, 'index.js'), {\n constraints: 'node',\n })\n\n // @ts-ignore\n if (typeof globalThis['__DEV__'] === 'undefined') {\n // @ts-ignore\n globalThis['__DEV__'] = dev\n }\n\n const isNext12 = typeof options.config?.swcMinify === 'boolean'\n if (!isNext12) {\n throw new Error(`Next.js 12 only supported`)\n }\n\n const prefix = `${isServer ? ' ssr ' : ' web '} |`\n\n const safeResolves = (resolves: [string, string][], multiple = false) => {\n const res: string[][] = []\n for (const [out, mod] of resolves) {\n if (out.endsWith('$')) {\n res.push([out, mod])\n continue\n }\n try {\n res.push([out, resolveEsm(mod)])\n if (multiple) {\n res.push([out, resolveEsm(mod, true)])\n }\n } catch (err) {\n if (out.includes(`@gorhom/bottom-sheet`)) {\n continue\n }\n if (process.env.DEBUG?.startsWith('tamagui')) {\n // eslint-disable-next-line no-console\n console.log(prefix, `withTamagui skipping resolving ${out}`, err)\n }\n }\n }\n return res\n }\n\n const resolveEsm = (relativePath: string, onlyRequire = false) => {\n if (isServer || onlyRequire) {\n return require.resolve(relativePath)\n }\n const esm = resolver(relativePath)\n return esm ? path.join(dir, esm) : require.resolve(relativePath)\n }\n\n const SEP = path.sep\n\n // automatically compile our given components\n const componentsFullPaths = safeResolves(\n tamaguiOptions.components.map(\n (moduleName) => [moduleName, moduleName] as [string, string]\n ),\n true\n )\n\n const componentsBaseDirs = componentsFullPaths.map(([_, fullPath]) => {\n let rootPath = dirname(fullPath as string)\n while (rootPath.length > 1) {\n const pkg = join(rootPath, 'package.json')\n const hasPkg = existsSync(pkg)\n if (hasPkg) {\n return rootPath\n } else {\n rootPath = join(rootPath, '..')\n }\n }\n throw new Error(`Couldn't find package.json in any path above: ${fullPath}`)\n })\n\n function isInComponentModule(fullPath: string) {\n return componentsBaseDirs.some((componentDir) => fullPath.startsWith(componentDir))\n }\n\n // allows configuration\n const shouldExclude = (path: string, projectRoot: string) => {\n const res = tamaguiOptions.shouldExtract?.(path, projectRoot)\n if (typeof res === 'boolean') {\n return !res\n }\n if (isInComponentModule(path)) {\n return false\n }\n return shouldExcludeDefault(path, projectRoot)\n }\n\n const rnw = tamaguiOptions.useReactNativeWebLite\n ? 'react-native-web-lite'\n : 'react-native-web'\n\n const tamaguiAliases = Object.fromEntries(\n safeResolves([\n ['@tamagui/core/reset.css', '@tamagui/core/reset.css'],\n ['@tamagui/core', '@tamagui/core'],\n ['react-native-svg', '@tamagui/react-native-svg'],\n // fixes https://github.com/kentcdodds/mdx-bundler/issues/143\n ['react/jsx-runtime.js', 'react/jsx-runtime'],\n ['react/jsx-runtime', 'react/jsx-runtime'],\n ['react/jsx-dev-runtime.js', 'react/jsx-dev-runtime'],\n ['react/jsx-dev-runtime', 'react/jsx-dev-runtime'],\n ['react-native-reanimated', 'react-native-reanimated'],\n ['react-native$', rnw],\n ['react-native-web$', rnw],\n ['@testing-library/react-native', '@tamagui/proxy-worm'],\n ['@gorhom/bottom-sheet$', '@gorhom/bottom-sheet'],\n // fix reanimated 3\n ['react-native/Libraries/Renderer/shims/ReactFabric', '@tamagui/proxy-worm'],\n ...(tamaguiOptions.aliasReactPackages\n ? ([\n ['react', 'react'],\n ['react-dom', 'react-dom'],\n ] as any)\n : []),\n ])\n )\n\n const alias = {\n ...(webpackConfig.resolve.alias || {}),\n ...tamaguiAliases,\n }\n\n if (process.env.DEBUG) {\n // eslint-disable-next-line no-console\n console.log('Tamagui alias:', alias)\n }\n\n if (process.env.ANALYZE === 'true') {\n Object.assign(webpackConfig.optimization, {\n concatenateModules: false,\n })\n }\n\n webpackConfig.resolve.alias = alias\n\n webpackConfig.plugins.push(\n new webpack.DefinePlugin({\n 'process.env.IS_STATIC': '\"\"',\n 'process.env.TAMAGUI_TARGET': '\"web\"',\n __DEV__: JSON.stringify(dev),\n })\n )\n\n const excludeExports = tamaguiOptions.excludeReactNativeWebExports\n if (Array.isArray(excludeExports)) {\n try {\n const regexStr = `react-native-web(-lite)?/.*(${excludeExports.join('|')}).*js`\n const regex = new RegExp(regexStr)\n // console.log(prefix, 'exclude', regexStr)\n webpackConfig.plugins.push(\n new webpack.NormalModuleReplacementPlugin(regex, resolveEsm('@tamagui/proxy-worm'))\n )\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(\n `Invalid names provided to excludeReactNativeWebExports: ${excludeExports.join(', ')}`\n )\n }\n }\n\n if (process.env.IGNORE_TS_CONFIG_PATHS) {\n if (process.env.DEBUG) {\n // eslint-disable-next-line no-console\n console.log(prefix, 'ignoring tsconfig paths')\n }\n if (webpackConfig.resolve.plugins[0]) {\n delete webpackConfig.resolve.plugins[0].paths['@tamagui/*']\n delete webpackConfig.resolve.plugins[0].paths['tamagui']\n }\n }\n\n if (!dev && tamaguiOptions.enableCSSOptimizations) {\n const cssMin = webpackConfig.optimization.minimizer.find((x) =>\n x.toString().includes('css-minimizer-plugin')\n )\n if (cssMin) {\n webpackConfig.optimization.minimizer = webpackConfig.optimization.minimizer.slice(\n cssMin.index,\n 1\n )\n }\n webpackConfig.optimization.minimizer.push(new CssMinimizerPlugin())\n }\n\n /**\n * Server react-native compat\n */\n if (isServer) {\n const externalize = (context: string, request: string) => {\n const fullPath = request[0] === '.' ? path.join(context, request) : request\n\n if (tamaguiOptions.shouldExcludeFromServer) {\n const userRes = tamaguiOptions.shouldExcludeFromServer({\n context,\n request,\n fullPath,\n })\n if (userRes !== undefined) {\n return userRes\n }\n }\n\n if (isInComponentModule(fullPath)) {\n return false\n }\n\n if (fullPath.includes('react-native-web-lite')) {\n // always inline react-native-web-lite due to errors where next.js resolved the path to esm\n return false\n }\n\n // must inline react-native so we can alias to react-native-web\n if (fullPath === 'react-native' || fullPath.startsWith(`react-native${SEP}`)) {\n return false\n }\n\n if (\n // feather icons uses react-native-svg which needs to be aliased\n // fullPath.includes('/lucide-icons/') ||\n fullPath.startsWith('react-native-web') ||\n fullPath.includes(`node_modules${SEP}react-native-web`) ||\n new RegExp(`^(react-dom|react)${SEP}$`).test(fullPath)\n ) {\n return `commonjs ${fullPath}`\n }\n if (\n fullPath.startsWith('moti') ||\n fullPath.startsWith('solito') ||\n fullPath === 'tamagui' ||\n fullPath.startsWith('@tamagui') ||\n fullPath === 'react-native-safe-area-context' ||\n fullPath === 'expo-linear-gradient' ||\n fullPath.startsWith('@react-navigation') ||\n fullPath.startsWith('@gorhom')\n ) {\n return\n }\n if (/^@?react-native-/.test(request)) {\n return false\n }\n return true\n }\n\n // externalize react native things from bundle\n webpackConfig.externals = [\n ...webpackConfig.externals.map((external) => {\n if (typeof external !== 'function') {\n return external\n }\n // only runs on server\n return (ctx, cb) => {\n const isCb = typeof cb === 'function'\n const res = externalize(ctx.context, ctx.request)\n if (isCb) {\n if (typeof res === 'string') {\n return cb(null, res)\n }\n if (res) {\n return external(ctx, cb)\n }\n return cb()\n }\n return !res\n ? Promise.resolve(undefined)\n : typeof res === 'string'\n ? Promise.resolve(res)\n : external(ctx)\n }\n }),\n ]\n }\n\n const cssRules = webpackConfig.module.rules.find(\n (rule) =>\n Array.isArray(rule.oneOf) &&\n rule.oneOf.some(\n ({ test }) =>\n typeof test === 'object' &&\n typeof test.test === 'function' &&\n test.test('filename.css')\n )\n ).oneOf\n\n /**\n * Font Support\n */\n if (cssRules) {\n if (!tamaguiOptions.disableFontSupport) {\n // fonts support\n cssRules.unshift({\n test: /\\.(woff(2)?|eot|ttf|otf)(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n use: [\n {\n loader: require.resolve('url-loader'),\n options: {\n limit: nextConfig.inlineFontLimit || 1024,\n fallback: require.resolve('file-loader'),\n publicPath: `${nextConfig.assetPrefix || ''}/_next/static/chunks/fonts/`,\n outputPath: `${isServer ? '../' : ''}static/chunks/fonts/`,\n name: '[name].[ext]',\n },\n },\n ],\n })\n }\n\n /**\n * CSS Support\n */\n const cssLoader = getGlobalCssLoader(\n // @ts-ignore\n {\n assetPrefix: options.config.assetPrefix || config.assetPrefix,\n future: nextConfig.future,\n experimental: nextConfig.experimental || {},\n isEdgeRuntime: true,\n isProduction: !dev,\n targetWeb: true,\n isClient: !isServer,\n isServer,\n isDevelopment: dev,\n },\n // @ts-ignore\n () => lazyPostCSS(dir, getSupportedBrowsers(dir, dev)),\n []\n )\n\n const cssTest = tamaguiOptions.includeCSSTest ?? /\\.css$/\n\n if (!dev && tamaguiOptions.enableCSSOptimizations) {\n const postCSSLoader = cssLoader[cssLoader.length - 1]\n // replace nextjs picky style rules with simple minicssextract\n cssRules.unshift({\n test: cssTest,\n use: [MiniCSSExtractPlugin.loader, 'css-loader', postCSSLoader],\n sideEffects: true,\n })\n webpackConfig.plugins.push(\n new MiniCSSExtractPlugin({\n filename: 'static/css/[contenthash].css',\n ignoreOrder: true,\n })\n )\n } else {\n cssRules.unshift({\n test: cssTest,\n sideEffects: true,\n use: cssLoader,\n })\n }\n cssRules.unshift({\n test: cssTest,\n sideEffects: true,\n use: cssLoader,\n })\n }\n\n webpackConfig.plugins.push(\n new TamaguiPlugin({\n commonjs: isServer,\n exclude: (path: string) => {\n const res = shouldExclude(path, options.dir)\n // console.log(`shouldExclude`, res, path)\n return res\n },\n ...tamaguiOptions,\n })\n )\n\n if (typeof nextConfig.webpack === 'function') {\n return nextConfig.webpack(webpackConfig, options)\n }\n\n return webpackConfig\n },\n }\n }\n}\n\nfunction getSupportedBrowsers(dir, isDevelopment) {\n let browsers\n try {\n browsers = browserslist.loadConfig({\n path: dir,\n env: isDevelopment ? 'development' : 'production',\n })\n } catch {\n //\n }\n return browsers\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["path"]
|
|
7
|
-
}
|