Closed yunsii closed 1 year ago
Could you elaborate on this a bit? because i dind't get the problem from you reproduction link
@thekip The key issue is next page route with catch-all segments, like /test/[...param].page.ts
(I use page.ts
as page extension), it can not works as expected like my reproduction. First test case should print ar
too, but got undefined
.
I will provide a Next.js demo laterly.
But how it's related to lingui? It seems a nextjs issue, not lingui.
But how it's related to lingui? It seems a nextjs issue, not lingui.
getCatalogForFile
with micromatch
ref: https://github.dev/lingui/js-lingui/blob/04b7cef9876168bc376b55424ecc0b0ebde976c1/packages/cli/src/api/catalog/getCatalogs.ts#L135-L138So I think getCatalogForFile
with micromatch
should cover Next.js catch-all segments routes. Now I patched @lingui/cli
with:
diff --git a/dist/api/catalog/getCatalogs.js b/dist/api/catalog/getCatalogs.js
index ecfc08388fa90c7efc4e826a0683488ea124734d..fbcbbe726220119687552d0f148f9da6fca48625 100644
--- a/dist/api/catalog/getCatalogs.js
+++ b/dist/api/catalog/getCatalogs.js
@@ -93,7 +93,7 @@ function getCatalogForFile(file, catalogs) {
for (const catalog of catalogs) {
const catalogFile = `${catalog.path}${catalog.format.getCatalogExtension()}`;
const catalogGlob = (0, utils_1.replacePlaceholders)(catalogFile, { locale: "*" });
- const match = micromatch_1.default.capture((0, utils_1.normalizeRelativePath)(path_1.default.relative(catalog.config.rootDir, catalogGlob)), (0, utils_1.normalizeRelativePath)(file));
+ const match = micromatch_1.default.capture(((0, utils_1.normalizeRelativePath)(path_1.default.relative(catalog.config.rootDir, catalogGlob))).replace(/\[/g, '\\[').replace(/\]/g, '\\]'), (0, utils_1.normalizeRelativePath)(file));
if (match) {
return {
locale: match[0],
diff --git a/dist/extract-experimental/buildExternalizeFilter.js b/dist/extract-experimental/buildExternalizeFilter.js
index f836f0f9840a4ec6f382695bb42706fb9ef4292a..ffabcfc8f60e128dd3a855e930d9cb6b86c507c1 100644
--- a/dist/extract-experimental/buildExternalizeFilter.js
+++ b/dist/extract-experimental/buildExternalizeFilter.js
@@ -1,6 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPackageJson = exports.buildExternalizeFilter = void 0;
+
+const fs = require('node:fs')
+
function createPackageRegExp(packageName) {
return new RegExp("^" + packageName + "(?:\\/.+)?");
}
@@ -33,6 +36,15 @@ async function getPackageJson(rootDir) {
throw new Error("We could not able to find your package.json file. " +
"Check that `rootDir` is pointing to the folder with package.json");
}
- return await import(packageJsonPath);
+
+ try {
+ return JSON.parse(await fs.promises.readFile(packageJsonPath, "utf-8"))
+ } catch (e) {
+ throw new Error(
+ `Unable to read package.json file at path ${packageJsonPath}. \n\n Error: ${
+ e.message
+ }`
+ )
+ }
}
exports.getPackageJson = getPackageJson;
Okay, now i've got your point. So it's somehow related to compiling/extracting with CLI and path with "[]" symbols processed incorrectly.
If you provide a nexts repro repo it would be much easier to understand the case.
After investigation, with Runkit demo I find out the key issue, so I use the demo directly, it's my fault.
@thekip v4.8.0-next.1 still not fixed the issue...
You can fix it yourself and share with community via PR
I had thought you closed the issue and fix it later, okey, I will create a PR right now.
Describe the bug
To Reproduce
https://runkit.com/embed/f22cw4gsf94y
Expected behavior
Work with Next.js routing with catch-all segments
4.5.0
@lingui/swc-plugin
babel-macro-plugin