next-translate-plugin 2.0.0-canary.5 → 2.0.0
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/index.d.ts +2 -1
- package/lib/cjs/index.js +22 -8
- package/lib/cjs/loader.js +6 -2
- package/lib/cjs/templateAppDir.js +41 -0
- package/lib/esm/index.js +23 -8
- package/lib/esm/loader.js +6 -2
- package/lib/esm/templateAppDir.js +38 -0
- package/package.json +3 -3
- package/templateAppDir.d.ts +7 -0
- package/types.d.ts +1 -0
package/index.d.ts
CHANGED
package/lib/cjs/index.js
CHANGED
|
@@ -21,6 +21,15 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
21
21
|
}
|
|
22
22
|
return t;
|
|
23
23
|
};
|
|
24
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
25
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
26
|
+
if (ar || !(i in from)) {
|
|
27
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
28
|
+
ar[i] = from[i];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
32
|
+
};
|
|
24
33
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
25
34
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
35
|
};
|
|
@@ -28,16 +37,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
28
37
|
var fs_1 = __importDefault(require("fs"));
|
|
29
38
|
var path_1 = __importDefault(require("path"));
|
|
30
39
|
var utils_1 = require("./utils");
|
|
40
|
+
var test = /\.(tsx|ts|js|mjs|jsx)$/;
|
|
41
|
+
var appDirNext13 = ['app', 'src/app'];
|
|
42
|
+
var possiblePageDirs = __spreadArray([
|
|
43
|
+
'pages',
|
|
44
|
+
'src/pages',
|
|
45
|
+
'app/pages',
|
|
46
|
+
'integrations/pages'
|
|
47
|
+
], appDirNext13, true);
|
|
31
48
|
function nextTranslate(nextConfig) {
|
|
32
49
|
if (nextConfig === void 0) { nextConfig = {}; }
|
|
33
|
-
var test = /\.(tsx|ts|js|mjs|jsx)$/;
|
|
34
50
|
var basePath = pkgDir();
|
|
35
|
-
var possiblePageDirs = [
|
|
36
|
-
'pages',
|
|
37
|
-
'src/pages',
|
|
38
|
-
'app/pages',
|
|
39
|
-
'integrations/pages',
|
|
40
|
-
];
|
|
41
51
|
var translationDir = path_1.default.resolve(path_1.default.relative(basePath, process.env.NEXT_TRANSLATE_PATH || '.'));
|
|
42
52
|
var nextConfigI18n = nextConfig.i18n || {};
|
|
43
53
|
var _a = require(path_1.default.join(translationDir, 'i18n')), _b = _a.locales, locales = _b === void 0 ? nextConfigI18n.locales || [] : _b, _c = _a.defaultLocale, defaultLocale = _c === void 0 ? nextConfigI18n.defaultLocale || 'en' : _c, _d = _a.domains, domains = _d === void 0 ? nextConfigI18n.domains : _d, _e = _a.localeDetection, localeDetection = _e === void 0 ? nextConfigI18n.localeDetection : _e, _f = _a.loader, loader = _f === void 0 ? true : _f, pagesInDir = _a.pagesInDir, restI18n = __rest(_a, ["locales", "defaultLocale", "domains", "localeDetection", "loader", "pagesInDir"]);
|
|
@@ -48,11 +58,13 @@ function nextTranslate(nextConfig) {
|
|
|
48
58
|
localeDetection: localeDetection,
|
|
49
59
|
} });
|
|
50
60
|
var hasGetInitialPropsOnAppJs = false;
|
|
61
|
+
var isAppDirNext13 = false;
|
|
51
62
|
if (!pagesInDir) {
|
|
52
63
|
for (var _i = 0, possiblePageDirs_1 = possiblePageDirs; _i < possiblePageDirs_1.length; _i++) {
|
|
53
64
|
var possiblePageDir = possiblePageDirs_1[_i];
|
|
54
65
|
if (fs_1.default.existsSync(path_1.default.join(basePath, possiblePageDir))) {
|
|
55
66
|
pagesInDir = possiblePageDir;
|
|
67
|
+
isAppDirNext13 = appDirNext13.includes(possiblePageDir);
|
|
56
68
|
break;
|
|
57
69
|
}
|
|
58
70
|
}
|
|
@@ -95,13 +107,13 @@ function nextTranslate(nextConfig) {
|
|
|
95
107
|
hasLoadLocaleFrom: typeof restI18n.loadLocaleFrom === 'function',
|
|
96
108
|
extensionsRgx: restI18n.extensionsRgx || test,
|
|
97
109
|
revalidate: restI18n.revalidate || 0,
|
|
110
|
+
isAppDirNext13: isAppDirNext13,
|
|
98
111
|
},
|
|
99
112
|
},
|
|
100
113
|
});
|
|
101
114
|
return config;
|
|
102
115
|
} });
|
|
103
116
|
}
|
|
104
|
-
exports.default = nextTranslate;
|
|
105
117
|
function pkgDir() {
|
|
106
118
|
try {
|
|
107
119
|
return require('pkg-dir').sync() || process.cwd();
|
|
@@ -110,3 +122,5 @@ function pkgDir() {
|
|
|
110
122
|
return process.cwd();
|
|
111
123
|
}
|
|
112
124
|
}
|
|
125
|
+
module.exports = nextTranslate;
|
|
126
|
+
exports.default = nextTranslate;
|
package/lib/cjs/loader.js
CHANGED
|
@@ -6,8 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
var templateWithHoc_1 = __importDefault(require("./templateWithHoc"));
|
|
7
7
|
var templateWithLoader_1 = __importDefault(require("./templateWithLoader"));
|
|
8
8
|
var utils_1 = require("./utils");
|
|
9
|
+
var templateAppDir_1 = __importDefault(require("./templateAppDir"));
|
|
9
10
|
function loader(rawCode) {
|
|
10
|
-
var _a = this.getOptions(), basePath = _a.basePath, pagesPath = _a.pagesPath, hasAppJs = _a.hasAppJs, hasGetInitialPropsOnAppJs = _a.hasGetInitialPropsOnAppJs, hasLoadLocaleFrom = _a.hasLoadLocaleFrom, extensionsRgx = _a.extensionsRgx, revalidate = _a.revalidate;
|
|
11
|
+
var _a = this.getOptions(), basePath = _a.basePath, pagesPath = _a.pagesPath, hasAppJs = _a.hasAppJs, hasGetInitialPropsOnAppJs = _a.hasGetInitialPropsOnAppJs, hasLoadLocaleFrom = _a.hasLoadLocaleFrom, extensionsRgx = _a.extensionsRgx, revalidate = _a.revalidate, isAppDirNext13 = _a.isAppDirNext13;
|
|
11
12
|
var normalizedPagesPath = pagesPath.replace(/\\/g, '/');
|
|
12
13
|
var normalizedResourcePath = this.resourcePath.replace(/\\/g, '/');
|
|
13
14
|
if (normalizedResourcePath.includes('node_modules/next/dist/pages/_app')) {
|
|
@@ -15,7 +16,7 @@ function loader(rawCode) {
|
|
|
15
16
|
return rawCode;
|
|
16
17
|
return (0, utils_1.getDefaultAppJs)(hasLoadLocaleFrom);
|
|
17
18
|
}
|
|
18
|
-
if (!normalizedResourcePath.startsWith(normalizedPagesPath))
|
|
19
|
+
if (!isAppDirNext13 && !normalizedResourcePath.startsWith(normalizedPagesPath))
|
|
19
20
|
return rawCode;
|
|
20
21
|
var page = normalizedResourcePath.replace(normalizedPagesPath, '/');
|
|
21
22
|
var pageNoExt = page.replace(extensionsRgx, '');
|
|
@@ -23,6 +24,9 @@ function loader(rawCode) {
|
|
|
23
24
|
var defaultExport = (0, utils_1.getDefaultExport)(pagePkg);
|
|
24
25
|
if (!defaultExport)
|
|
25
26
|
return rawCode;
|
|
27
|
+
if (isAppDirNext13) {
|
|
28
|
+
return (0, templateAppDir_1.default)(pagePkg, { hasLoadLocaleFrom: hasLoadLocaleFrom, pageNoExt: pageNoExt, normalizedResourcePath: normalizedResourcePath, normalizedPagesPath: normalizedPagesPath });
|
|
29
|
+
}
|
|
26
30
|
if ((0, utils_1.hasExportName)(pagePkg, '__N_SSP') || (0, utils_1.hasExportName)(pagePkg, '__N_SSG')) {
|
|
27
31
|
return rawCode;
|
|
28
32
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var utils_1 = require("./utils");
|
|
4
|
+
var clientLine = ['"use client"', "'use client'"];
|
|
5
|
+
var defaultDynamicExport = "export const dynamic = 'force-dynamic';";
|
|
6
|
+
function templateAppDir(pagePkg, _a) {
|
|
7
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.hasLoadLocaleFrom, hasLoadLocaleFrom = _c === void 0 ? false : _c, _d = _b.pageNoExt, pageNoExt = _d === void 0 ? '/' : _d, _e = _b.normalizedResourcePath, normalizedResourcePath = _e === void 0 ? '' : _e, _f = _b.normalizedPagesPath, normalizedPagesPath = _f === void 0 ? '' : _f;
|
|
8
|
+
var code = pagePkg.getCode();
|
|
9
|
+
var isClientCode = clientLine.some(function (line) { return code.startsWith(line); });
|
|
10
|
+
var isPage = pageNoExt.endsWith('/page') && normalizedResourcePath.startsWith(normalizedPagesPath);
|
|
11
|
+
if (!isPage && !isClientCode)
|
|
12
|
+
return code;
|
|
13
|
+
var hash = Date.now().toString(16);
|
|
14
|
+
var pathname = pageNoExt.replace('/page', '/');
|
|
15
|
+
var pageVariableName = (0, utils_1.interceptExport)(pagePkg, 'default', "__Next_Translate__Page__".concat(hash, "__"));
|
|
16
|
+
var dynamicVariable = (0, utils_1.getNamedExport)(pagePkg, 'dynamic', false);
|
|
17
|
+
var dynamicExport = dynamicVariable ? '' : defaultDynamicExport;
|
|
18
|
+
if (!pageVariableName)
|
|
19
|
+
return code;
|
|
20
|
+
code = pagePkg.getCode();
|
|
21
|
+
if (isClientCode && !isPage)
|
|
22
|
+
return templateAppDirClientComponent({ code: code, hash: hash, pageVariableName: pageVariableName });
|
|
23
|
+
if (isClientCode && isPage)
|
|
24
|
+
return templateAppDirClientPage({ code: code, hash: hash, pageVariableName: pageVariableName, pathname: pathname, hasLoadLocaleFrom: hasLoadLocaleFrom });
|
|
25
|
+
return "\n import __i18nConfig from '@next-translate-root/i18n'\n import __loadNamespaces from 'next-translate/loadNamespaces'\n ".concat(code, "\n\n globalThis.i18nConfig = __i18nConfig\n\n ").concat(dynamicExport, "\n\n export default async function __Next_Translate_new__").concat(hash, "__(props) {\n let config = { \n ...__i18nConfig,\n locale: props.searchParams?.lang,\n loaderName: `${dynamic} (server page)`,\n pathname: '").concat(pathname, "',\n ").concat((0, utils_1.overwriteLoadLocales)(hasLoadLocaleFrom), "\n }\n \n if (!globalThis.__NEXT_TRANSLATE__) {\n globalThis.__NEXT_TRANSLATE__ = {}\n }\n \n const { __lang, __namespaces } = await __loadNamespaces(config)\n globalThis.__NEXT_TRANSLATE__ = { lang: __lang, namespaces: __namespaces, pathname: '").concat(pathname, "' }\n\n return (\n <>\n <div \n id=\"__NEXT_TRANSLATE_DATA__\" \n data-lang={__lang} \n data-ns={JSON.stringify(__namespaces)}\n data-pathname=\"").concat(pathname, "\"\n />\n <").concat(pageVariableName, " {...props} />\n </>\n )\n }\n");
|
|
26
|
+
}
|
|
27
|
+
exports.default = templateAppDir;
|
|
28
|
+
function templateAppDirClientComponent(_a) {
|
|
29
|
+
var code = _a.code, hash = _a.hash, pageVariableName = _a.pageVariableName;
|
|
30
|
+
var clientCode = code;
|
|
31
|
+
var topLine = clientLine[0];
|
|
32
|
+
clientLine.forEach(function (line) { clientCode = clientCode.replace(line, ''); });
|
|
33
|
+
return "".concat(topLine, "\n import __i18nConfig from '@next-translate-root/i18n'\n import * as __react from 'react'\n\n ").concat(clientCode, "\n\n export default function __Next_Translate_new__").concat(hash, "__(props) {\n const forceUpdate = __react.useReducer(() => [])[1]\n const isClient = typeof window !== 'undefined'\n\n if (isClient && !window.__NEXT_TRANSLATE__) {\n window.__NEXT_TRANSLATE__ = { lang: __i18nConfig.defaultLocale, namespaces: {} }\n update(false)\n }\n\n if (isClient && !window.i18nConfig) {\n window.i18nConfig = __i18nConfig\n }\n\n __react.useEffect(update)\n\n function update(rerender = true) {\n const el = document.getElementById('__NEXT_TRANSLATE_DATA__')\n\n if (!el) return\n\n const { lang, ns, pathname } = el.dataset\n const shouldRerender = lang !== window.__NEXT_TRANSLATE__.lang || pathname !== window.__NEXT_TRANSLATE__.pathname\n window.__NEXT_TRANSLATE__ = { lang, namespaces: JSON.parse(ns), pathname }\n if (shouldRerender && rerender) forceUpdate()\n }\n\n return <").concat(pageVariableName, " {...props} />\n }\n ");
|
|
34
|
+
}
|
|
35
|
+
function templateAppDirClientPage(_a) {
|
|
36
|
+
var code = _a.code, hash = _a.hash, pageVariableName = _a.pageVariableName, pathname = _a.pathname, hasLoadLocaleFrom = _a.hasLoadLocaleFrom;
|
|
37
|
+
var clientCode = code;
|
|
38
|
+
var topLine = clientLine[0];
|
|
39
|
+
clientLine.forEach(function (line) { clientCode = clientCode.replace(line, ''); });
|
|
40
|
+
return "".concat(topLine, "\n import __i18nConfig from '@next-translate-root/i18n'\n import __loadNamespaces, { log as __log } from 'next-translate/loadNamespaces'\n import { useSearchParams as __useSearchParams } from 'next/navigation'\n import * as __react from 'react'\n\n ").concat(clientCode, "\n\n export default function __Next_Translate_new__").concat(hash, "__(props) {\n const forceUpdate = __react.useReducer(() => [])[1]\n const lang = __useSearchParams().get('lang')\n const pathname = '").concat(pathname, "'\n const isServer = typeof window === 'undefined'\n const config = { \n ...__i18nConfig,\n locale: lang,\n loaderName: 'useEffect (client page)',\n pathname,\n ").concat((0, utils_1.overwriteLoadLocales)(hasLoadLocaleFrom), "\n }\n\n __react.useEffect(() => {\n const shouldLoad = lang !== window.__NEXT_TRANSLATE__?.lang || pathname !== window.__NEXT_TRANSLATE__?.pathname\n\n if (!shouldLoad) return\n\n __loadNamespaces(config).then(({ __lang, __namespaces }) => {\n window.__NEXT_TRANSLATE__ = { lang: __lang, namespaces: __namespaces, pathname: '").concat(pathname, "' }\n window.i18nConfig = __i18nConfig\n forceUpdate()\n })\n }, [lang])\n\n if (isServer) __log(config, { page: pathname, lang, namespaces: ['calculated in client-side'] })\n if (isServer || !window.__NEXT_TRANSLATE__) return null\n\n return <").concat(pageVariableName, " {...props} />\n }\n ");
|
|
41
|
+
}
|
package/lib/esm/index.js
CHANGED
|
@@ -20,19 +20,29 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
20
20
|
}
|
|
21
21
|
return t;
|
|
22
22
|
};
|
|
23
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
24
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
25
|
+
if (ar || !(i in from)) {
|
|
26
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
27
|
+
ar[i] = from[i];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
31
|
+
};
|
|
23
32
|
import fs from 'fs';
|
|
24
33
|
import path from 'path';
|
|
25
34
|
import { parseFile, getDefaultExport, hasStaticName, hasHOC } from './utils';
|
|
26
|
-
|
|
35
|
+
var test = /\.(tsx|ts|js|mjs|jsx)$/;
|
|
36
|
+
var appDirNext13 = ['app', 'src/app'];
|
|
37
|
+
var possiblePageDirs = __spreadArray([
|
|
38
|
+
'pages',
|
|
39
|
+
'src/pages',
|
|
40
|
+
'app/pages',
|
|
41
|
+
'integrations/pages'
|
|
42
|
+
], appDirNext13, true);
|
|
43
|
+
function nextTranslate(nextConfig) {
|
|
27
44
|
if (nextConfig === void 0) { nextConfig = {}; }
|
|
28
|
-
var test = /\.(tsx|ts|js|mjs|jsx)$/;
|
|
29
45
|
var basePath = pkgDir();
|
|
30
|
-
var possiblePageDirs = [
|
|
31
|
-
'pages',
|
|
32
|
-
'src/pages',
|
|
33
|
-
'app/pages',
|
|
34
|
-
'integrations/pages',
|
|
35
|
-
];
|
|
36
46
|
var translationDir = path.resolve(path.relative(basePath, process.env.NEXT_TRANSLATE_PATH || '.'));
|
|
37
47
|
var nextConfigI18n = nextConfig.i18n || {};
|
|
38
48
|
var _a = require(path.join(translationDir, 'i18n')), _b = _a.locales, locales = _b === void 0 ? nextConfigI18n.locales || [] : _b, _c = _a.defaultLocale, defaultLocale = _c === void 0 ? nextConfigI18n.defaultLocale || 'en' : _c, _d = _a.domains, domains = _d === void 0 ? nextConfigI18n.domains : _d, _e = _a.localeDetection, localeDetection = _e === void 0 ? nextConfigI18n.localeDetection : _e, _f = _a.loader, loader = _f === void 0 ? true : _f, pagesInDir = _a.pagesInDir, restI18n = __rest(_a, ["locales", "defaultLocale", "domains", "localeDetection", "loader", "pagesInDir"]);
|
|
@@ -43,11 +53,13 @@ export default function nextTranslate(nextConfig) {
|
|
|
43
53
|
localeDetection: localeDetection,
|
|
44
54
|
} });
|
|
45
55
|
var hasGetInitialPropsOnAppJs = false;
|
|
56
|
+
var isAppDirNext13 = false;
|
|
46
57
|
if (!pagesInDir) {
|
|
47
58
|
for (var _i = 0, possiblePageDirs_1 = possiblePageDirs; _i < possiblePageDirs_1.length; _i++) {
|
|
48
59
|
var possiblePageDir = possiblePageDirs_1[_i];
|
|
49
60
|
if (fs.existsSync(path.join(basePath, possiblePageDir))) {
|
|
50
61
|
pagesInDir = possiblePageDir;
|
|
62
|
+
isAppDirNext13 = appDirNext13.includes(possiblePageDir);
|
|
51
63
|
break;
|
|
52
64
|
}
|
|
53
65
|
}
|
|
@@ -90,6 +102,7 @@ export default function nextTranslate(nextConfig) {
|
|
|
90
102
|
hasLoadLocaleFrom: typeof restI18n.loadLocaleFrom === 'function',
|
|
91
103
|
extensionsRgx: restI18n.extensionsRgx || test,
|
|
92
104
|
revalidate: restI18n.revalidate || 0,
|
|
105
|
+
isAppDirNext13: isAppDirNext13,
|
|
93
106
|
},
|
|
94
107
|
},
|
|
95
108
|
});
|
|
@@ -104,3 +117,5 @@ function pkgDir() {
|
|
|
104
117
|
return process.cwd();
|
|
105
118
|
}
|
|
106
119
|
}
|
|
120
|
+
module.exports = nextTranslate;
|
|
121
|
+
export default nextTranslate;
|
package/lib/esm/loader.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import templateWithHoc from './templateWithHoc';
|
|
2
2
|
import templateWithLoader from './templateWithLoader';
|
|
3
3
|
import { parseFile, getDefaultAppJs, getDefaultExport, hasExportName, hasStaticName, isPageToIgnore, hasHOC, } from './utils';
|
|
4
|
+
import templateAppDir from './templateAppDir';
|
|
4
5
|
export default function loader(rawCode) {
|
|
5
|
-
var _a = this.getOptions(), basePath = _a.basePath, pagesPath = _a.pagesPath, hasAppJs = _a.hasAppJs, hasGetInitialPropsOnAppJs = _a.hasGetInitialPropsOnAppJs, hasLoadLocaleFrom = _a.hasLoadLocaleFrom, extensionsRgx = _a.extensionsRgx, revalidate = _a.revalidate;
|
|
6
|
+
var _a = this.getOptions(), basePath = _a.basePath, pagesPath = _a.pagesPath, hasAppJs = _a.hasAppJs, hasGetInitialPropsOnAppJs = _a.hasGetInitialPropsOnAppJs, hasLoadLocaleFrom = _a.hasLoadLocaleFrom, extensionsRgx = _a.extensionsRgx, revalidate = _a.revalidate, isAppDirNext13 = _a.isAppDirNext13;
|
|
6
7
|
var normalizedPagesPath = pagesPath.replace(/\\/g, '/');
|
|
7
8
|
var normalizedResourcePath = this.resourcePath.replace(/\\/g, '/');
|
|
8
9
|
if (normalizedResourcePath.includes('node_modules/next/dist/pages/_app')) {
|
|
@@ -10,7 +11,7 @@ export default function loader(rawCode) {
|
|
|
10
11
|
return rawCode;
|
|
11
12
|
return getDefaultAppJs(hasLoadLocaleFrom);
|
|
12
13
|
}
|
|
13
|
-
if (!normalizedResourcePath.startsWith(normalizedPagesPath))
|
|
14
|
+
if (!isAppDirNext13 && !normalizedResourcePath.startsWith(normalizedPagesPath))
|
|
14
15
|
return rawCode;
|
|
15
16
|
var page = normalizedResourcePath.replace(normalizedPagesPath, '/');
|
|
16
17
|
var pageNoExt = page.replace(extensionsRgx, '');
|
|
@@ -18,6 +19,9 @@ export default function loader(rawCode) {
|
|
|
18
19
|
var defaultExport = getDefaultExport(pagePkg);
|
|
19
20
|
if (!defaultExport)
|
|
20
21
|
return rawCode;
|
|
22
|
+
if (isAppDirNext13) {
|
|
23
|
+
return templateAppDir(pagePkg, { hasLoadLocaleFrom: hasLoadLocaleFrom, pageNoExt: pageNoExt, normalizedResourcePath: normalizedResourcePath, normalizedPagesPath: normalizedPagesPath });
|
|
24
|
+
}
|
|
21
25
|
if (hasExportName(pagePkg, '__N_SSP') || hasExportName(pagePkg, '__N_SSG')) {
|
|
22
26
|
return rawCode;
|
|
23
27
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { interceptExport, overwriteLoadLocales, getNamedExport } from "./utils";
|
|
2
|
+
var clientLine = ['"use client"', "'use client'"];
|
|
3
|
+
var defaultDynamicExport = "export const dynamic = 'force-dynamic';";
|
|
4
|
+
export default function templateAppDir(pagePkg, _a) {
|
|
5
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.hasLoadLocaleFrom, hasLoadLocaleFrom = _c === void 0 ? false : _c, _d = _b.pageNoExt, pageNoExt = _d === void 0 ? '/' : _d, _e = _b.normalizedResourcePath, normalizedResourcePath = _e === void 0 ? '' : _e, _f = _b.normalizedPagesPath, normalizedPagesPath = _f === void 0 ? '' : _f;
|
|
6
|
+
var code = pagePkg.getCode();
|
|
7
|
+
var isClientCode = clientLine.some(function (line) { return code.startsWith(line); });
|
|
8
|
+
var isPage = pageNoExt.endsWith('/page') && normalizedResourcePath.startsWith(normalizedPagesPath);
|
|
9
|
+
if (!isPage && !isClientCode)
|
|
10
|
+
return code;
|
|
11
|
+
var hash = Date.now().toString(16);
|
|
12
|
+
var pathname = pageNoExt.replace('/page', '/');
|
|
13
|
+
var pageVariableName = interceptExport(pagePkg, 'default', "__Next_Translate__Page__".concat(hash, "__"));
|
|
14
|
+
var dynamicVariable = getNamedExport(pagePkg, 'dynamic', false);
|
|
15
|
+
var dynamicExport = dynamicVariable ? '' : defaultDynamicExport;
|
|
16
|
+
if (!pageVariableName)
|
|
17
|
+
return code;
|
|
18
|
+
code = pagePkg.getCode();
|
|
19
|
+
if (isClientCode && !isPage)
|
|
20
|
+
return templateAppDirClientComponent({ code: code, hash: hash, pageVariableName: pageVariableName });
|
|
21
|
+
if (isClientCode && isPage)
|
|
22
|
+
return templateAppDirClientPage({ code: code, hash: hash, pageVariableName: pageVariableName, pathname: pathname, hasLoadLocaleFrom: hasLoadLocaleFrom });
|
|
23
|
+
return "\n import __i18nConfig from '@next-translate-root/i18n'\n import __loadNamespaces from 'next-translate/loadNamespaces'\n ".concat(code, "\n\n globalThis.i18nConfig = __i18nConfig\n\n ").concat(dynamicExport, "\n\n export default async function __Next_Translate_new__").concat(hash, "__(props) {\n let config = { \n ...__i18nConfig,\n locale: props.searchParams?.lang,\n loaderName: `${dynamic} (server page)`,\n pathname: '").concat(pathname, "',\n ").concat(overwriteLoadLocales(hasLoadLocaleFrom), "\n }\n \n if (!globalThis.__NEXT_TRANSLATE__) {\n globalThis.__NEXT_TRANSLATE__ = {}\n }\n \n const { __lang, __namespaces } = await __loadNamespaces(config)\n globalThis.__NEXT_TRANSLATE__ = { lang: __lang, namespaces: __namespaces, pathname: '").concat(pathname, "' }\n\n return (\n <>\n <div \n id=\"__NEXT_TRANSLATE_DATA__\" \n data-lang={__lang} \n data-ns={JSON.stringify(__namespaces)}\n data-pathname=\"").concat(pathname, "\"\n />\n <").concat(pageVariableName, " {...props} />\n </>\n )\n }\n");
|
|
24
|
+
}
|
|
25
|
+
function templateAppDirClientComponent(_a) {
|
|
26
|
+
var code = _a.code, hash = _a.hash, pageVariableName = _a.pageVariableName;
|
|
27
|
+
var clientCode = code;
|
|
28
|
+
var topLine = clientLine[0];
|
|
29
|
+
clientLine.forEach(function (line) { clientCode = clientCode.replace(line, ''); });
|
|
30
|
+
return "".concat(topLine, "\n import __i18nConfig from '@next-translate-root/i18n'\n import * as __react from 'react'\n\n ").concat(clientCode, "\n\n export default function __Next_Translate_new__").concat(hash, "__(props) {\n const forceUpdate = __react.useReducer(() => [])[1]\n const isClient = typeof window !== 'undefined'\n\n if (isClient && !window.__NEXT_TRANSLATE__) {\n window.__NEXT_TRANSLATE__ = { lang: __i18nConfig.defaultLocale, namespaces: {} }\n update(false)\n }\n\n if (isClient && !window.i18nConfig) {\n window.i18nConfig = __i18nConfig\n }\n\n __react.useEffect(update)\n\n function update(rerender = true) {\n const el = document.getElementById('__NEXT_TRANSLATE_DATA__')\n\n if (!el) return\n\n const { lang, ns, pathname } = el.dataset\n const shouldRerender = lang !== window.__NEXT_TRANSLATE__.lang || pathname !== window.__NEXT_TRANSLATE__.pathname\n window.__NEXT_TRANSLATE__ = { lang, namespaces: JSON.parse(ns), pathname }\n if (shouldRerender && rerender) forceUpdate()\n }\n\n return <").concat(pageVariableName, " {...props} />\n }\n ");
|
|
31
|
+
}
|
|
32
|
+
function templateAppDirClientPage(_a) {
|
|
33
|
+
var code = _a.code, hash = _a.hash, pageVariableName = _a.pageVariableName, pathname = _a.pathname, hasLoadLocaleFrom = _a.hasLoadLocaleFrom;
|
|
34
|
+
var clientCode = code;
|
|
35
|
+
var topLine = clientLine[0];
|
|
36
|
+
clientLine.forEach(function (line) { clientCode = clientCode.replace(line, ''); });
|
|
37
|
+
return "".concat(topLine, "\n import __i18nConfig from '@next-translate-root/i18n'\n import __loadNamespaces, { log as __log } from 'next-translate/loadNamespaces'\n import { useSearchParams as __useSearchParams } from 'next/navigation'\n import * as __react from 'react'\n\n ").concat(clientCode, "\n\n export default function __Next_Translate_new__").concat(hash, "__(props) {\n const forceUpdate = __react.useReducer(() => [])[1]\n const lang = __useSearchParams().get('lang')\n const pathname = '").concat(pathname, "'\n const isServer = typeof window === 'undefined'\n const config = { \n ...__i18nConfig,\n locale: lang,\n loaderName: 'useEffect (client page)',\n pathname,\n ").concat(overwriteLoadLocales(hasLoadLocaleFrom), "\n }\n\n __react.useEffect(() => {\n const shouldLoad = lang !== window.__NEXT_TRANSLATE__?.lang || pathname !== window.__NEXT_TRANSLATE__?.pathname\n\n if (!shouldLoad) return\n\n __loadNamespaces(config).then(({ __lang, __namespaces }) => {\n window.__NEXT_TRANSLATE__ = { lang: __lang, namespaces: __namespaces, pathname: '").concat(pathname, "' }\n window.i18nConfig = __i18nConfig\n forceUpdate()\n })\n }, [lang])\n\n if (isServer) __log(config, { page: pathname, lang, namespaces: ['calculated in client-side'] })\n if (isServer || !window.__NEXT_TRANSLATE__) return null\n\n return <").concat(pageVariableName, " {...props} />\n }\n ");
|
|
38
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "next-translate-plugin",
|
|
3
|
-
"version": "2.0.0
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Tiny and powerful i18n plugin to translate your Next.js pages.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"repository": {
|
|
22
22
|
"type": "git",
|
|
23
|
-
"url": "https://github.com/aralroca/next-translate.git"
|
|
23
|
+
"url": "https://github.com/aralroca/next-translate-plugin.git"
|
|
24
24
|
},
|
|
25
25
|
"author": {
|
|
26
26
|
"name": "Aral Roca Gòmez",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"prettier": "2.8.3",
|
|
75
75
|
"pretty-quick": "3.1.3",
|
|
76
76
|
"react": "18.2.0",
|
|
77
|
-
"react-dom": "
|
|
77
|
+
"react-dom": "18.2.0",
|
|
78
78
|
"supertest": "6.3.3"
|
|
79
79
|
},
|
|
80
80
|
"peerDependencies": {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ParsedFilePkg } from "./types";
|
|
2
|
+
export default function templateAppDir(pagePkg: ParsedFilePkg, { hasLoadLocaleFrom, pageNoExt, normalizedResourcePath, normalizedPagesPath }?: {
|
|
3
|
+
hasLoadLocaleFrom?: boolean | undefined;
|
|
4
|
+
pageNoExt?: string | undefined;
|
|
5
|
+
normalizedResourcePath?: string | undefined;
|
|
6
|
+
normalizedPagesPath?: string | undefined;
|
|
7
|
+
}): string;
|
package/types.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export interface LoaderOptions {
|
|
|
7
7
|
hasLoadLocaleFrom: boolean;
|
|
8
8
|
extensionsRgx: RegExp;
|
|
9
9
|
revalidate: number;
|
|
10
|
+
isAppDirNext13: boolean;
|
|
10
11
|
}
|
|
11
12
|
export declare type Transformer = (rootNode: ts.SourceFile, context: ts.TransformationContext) => ts.SourceFile;
|
|
12
13
|
export interface ParsedFilePkg {
|