@enonic/nextjs-adapter 3.0.2 → 3.0.3
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/common/UrlProcessor.js +23 -6
- package/common/UrlProcessor.js.map +1 -1
- package/common/constants.d.ts +1 -1
- package/common/constants.js +12 -5
- package/common/constants.js.map +1 -1
- package/guillotine/fetchContentPathsForLocale.js +1 -0
- package/guillotine/fetchContentPathsForLocale.js.map +1 -1
- package/i18n/LocaleContext.jsx +6 -1
- package/i18n/LocaleContext.jsx.map +1 -1
- package/i18n/i18n.d.ts +1 -0
- package/i18n/i18n.js +4 -1
- package/i18n/i18n.js.map +1 -1
- package/package.json +11 -11
- package/src/common/UrlProcessor.ts +28 -8
- package/src/common/constants.ts +12 -5
- package/src/guillotine/fetchContentPathsForLocale.ts +1 -0
- package/src/i18n/LocaleContext.tsx +6 -1
- package/src/i18n/i18n.ts +4 -1
package/common/UrlProcessor.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { RENDER_MODE } from './constants';
|
|
2
2
|
import { fixDoubleSlashes } from '../utils/fixDoubleSlashes';
|
|
3
3
|
import { getLocaleMappingByProjectId } from '../utils/getLocaleMappingByProjectId';
|
|
4
|
-
import { commonChars } from '../utils/commonChars';
|
|
5
4
|
import { addBasePath } from 'next/dist/client/add-base-path';
|
|
5
|
+
import { parseUrl } from 'next/dist/shared/lib/router/utils/parse-url';
|
|
6
6
|
export class UrlProcessor {
|
|
7
7
|
static process(url, meta, serverSide = false, isResource = false) {
|
|
8
8
|
if (this.startsWithHash(url) || !meta || (this.isAttachmentUrl(url)) && meta.renderMode === RENDER_MODE.NEXT) {
|
|
@@ -74,11 +74,28 @@ export class UrlProcessor {
|
|
|
74
74
|
}
|
|
75
75
|
static stripApiUrl(url, apiUrl) {
|
|
76
76
|
// normalise localhost-127.0.0.1 if present in urls
|
|
77
|
-
const normalUrl = url.replace(this.localhostPattern, '127.0.0.1');
|
|
78
|
-
const normalApiUrl = apiUrl.replace(this.localhostPattern, '127.0.0.1');
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
77
|
+
const normalUrl = parseUrl(url.replace(this.localhostPattern, '127.0.0.1'));
|
|
78
|
+
const normalApiUrl = parseUrl(apiUrl.replace(this.localhostPattern, '127.0.0.1'));
|
|
79
|
+
// WARNING! disregarding the protocol (http/https)
|
|
80
|
+
if (normalUrl.hostname !== normalApiUrl.hostname
|
|
81
|
+
|| normalUrl.port !== normalApiUrl.port) {
|
|
82
|
+
// can't strip apiUrl if hostnames or ports are different
|
|
83
|
+
return url;
|
|
84
|
+
}
|
|
85
|
+
const urlPathCrumbs = normalUrl.pathname.split('/');
|
|
86
|
+
const apiUrlPathCrumbs = normalApiUrl.pathname.split('/');
|
|
87
|
+
for (let i = 0; i < Math.min(apiUrlPathCrumbs.length, urlPathCrumbs.length);) {
|
|
88
|
+
const urlPathCrumb = urlPathCrumbs[i];
|
|
89
|
+
const apiUrlPathCrumb = apiUrlPathCrumbs[i];
|
|
90
|
+
if (urlPathCrumb === apiUrlPathCrumb) {
|
|
91
|
+
urlPathCrumbs.shift();
|
|
92
|
+
apiUrlPathCrumbs.shift();
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
i++;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return `/${urlPathCrumbs.join('/')}` + normalUrl.search + normalUrl.hash;
|
|
82
99
|
}
|
|
83
100
|
static isAttachmentUrl(url) {
|
|
84
101
|
return this.IMG_ATMT_REGEXP.test(url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UrlProcessor.js","sourceRoot":"","sources":["../src/common/UrlProcessor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAC,2BAA2B,EAAC,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAC,WAAW,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"UrlProcessor.js","sourceRoot":"","sources":["../src/common/UrlProcessor.ts"],"names":[],"mappings":"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"}
|
package/common/constants.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare const FRAGMENT_DEFAULT_REGION_NAME = "fragment";
|
|
|
13
13
|
* - media
|
|
14
14
|
* - paths with '/_' in them
|
|
15
15
|
*/
|
|
16
|
-
export declare const GET_STATIC_PATHS_QUERY = "query ($count: Int) {\n guillotine {\n queryDsl(\n first: $count,\n sort: {\n field: \"modifiedTime\",\n direction: DESC\n }\n query: {boolean: {mustNot: [\n
|
|
16
|
+
export declare const GET_STATIC_PATHS_QUERY = "query ($pathRegex: String!, $count: Int) {\n guillotine {\n queryDsl(\n first: $count,\n sort: {\n field: \"modifiedTime\",\n direction: DESC\n }\n query: {\n boolean: {\n mustNot: [\n {in: {field: \"type\", stringValues: [\"base:shortcut\", \"portal:fragment\", \"portal:template-folder\", \"portal:page-template\"]}}\n {like: {field: \"type\", value: \"media:*\"}}\n ]\n must: [\n {like: {field:\"_path\", value: $pathRegex}}\n ]\n }\n }\n ) {\n _name\n _path\n site {_name}\n }\n }\n}";
|
|
17
17
|
export declare enum GUILLOTINE_REQUEST_HEADERS {
|
|
18
18
|
COOKIE = "Cookie",
|
|
19
19
|
LOCALE = "locale",
|
package/common/constants.js
CHANGED
|
@@ -14,7 +14,7 @@ export const FRAGMENT_DEFAULT_REGION_NAME = 'fragment';
|
|
|
14
14
|
* - media
|
|
15
15
|
* - paths with '/_' in them
|
|
16
16
|
*/
|
|
17
|
-
export const GET_STATIC_PATHS_QUERY = `query ($count: Int) {
|
|
17
|
+
export const GET_STATIC_PATHS_QUERY = `query ($pathRegex: String!, $count: Int) {
|
|
18
18
|
guillotine {
|
|
19
19
|
queryDsl(
|
|
20
20
|
first: $count,
|
|
@@ -22,10 +22,17 @@ export const GET_STATIC_PATHS_QUERY = `query ($count: Int) {
|
|
|
22
22
|
field: "modifiedTime",
|
|
23
23
|
direction: DESC
|
|
24
24
|
}
|
|
25
|
-
query: {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
query: {
|
|
26
|
+
boolean: {
|
|
27
|
+
mustNot: [
|
|
28
|
+
{in: {field: "type", stringValues: ["base:shortcut", "portal:fragment", "portal:template-folder", "portal:page-template"]}}
|
|
29
|
+
{like: {field: "type", value: "media:*"}}
|
|
30
|
+
]
|
|
31
|
+
must: [
|
|
32
|
+
{like: {field:"_path", value: $pathRegex}}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
29
36
|
) {
|
|
30
37
|
_name
|
|
31
38
|
_path
|
package/common/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/common/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC;AAE7B,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,wCAA4B,CAAA;IAC5B,kCAAsB,CAAA;IACtB,wCAA4B,CAAA;IAC5B,kCAAsB,CAAA;AAC1B,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AAC3D,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/common/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC;AAE7B,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,wCAA4B,CAAA;IAC5B,kCAAsB,CAAA;IACtB,wCAA4B,CAAA;IAC5B,kCAAsB,CAAA;AAC1B,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AAC3D,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;EAyBpC,CAAC;AAEH,8EAA8E;AAC9E,qBAAqB;AACrB,MAAM,CAAN,IAAY,0BAKX;AALD,WAAY,0BAA0B;IAClC,+CAAiB,CAAA;IACjB,+CAAiB,CAAA;IACjB,iDAAmB,CAAA;IACnB,+DAAiC,CAAA;AACrC,CAAC,EALW,0BAA0B,KAA1B,0BAA0B,QAKrC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAE9C,MAAM,CAAC,MAAM,8BAA8B,GAAG,sBAAsB,CAAC;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC7D,MAAM,CAAC,MAAM,0BAA0B,GAAG,4BAA4B,CAAC;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAE1D,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACnB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,kCAAmB,CAAA;IACnB,4BAAa,CAAA;IACb,8BAAe,CAAA;IACf,4BAAa,CAAA,CAAO,mEAAmE;AAC3F,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAExD,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAEnD,oHAAoH;AACpH,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAE9C,0DAA0D;AAC1D,MAAM,CAAN,IAAY,iBAMX;AAND,WAAY,iBAAiB;IACzB,kCAAa,CAAA;IACb,sCAAiB,CAAA;IACjB,kCAAa,CAAA;IACb,0CAAqB,CAAA;IACrB,kCAAa,CAAA;AACjB,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,QAM5B;AAED,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACvB,0CAAuB,CAAA;IACvB,gCAAa,CAAA;IACb,gCAAa,CAAA;AACjB,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchContentPathsForLocale.js","sourceRoot":"","sources":["../src/guillotine/fetchContentPathsForLocale.ts"],"names":[],"mappings":";;;;;;;;;AAGA,OAAO,EAAC,sBAAsB,EAAC,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGlD,MAAM,UAAgB,0BAA0B;yDAC5C,IAAY,EACZ,MAAqB,EACrB,QAAgB,sBAAsB,EACtC,KAAK,GAAG,GAAG;QAEX,MAAM,aAAa,GAAG,gBAAgB,CAAC;YACnC,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;SACxB,CAAC,CAAC;QACH,MAAM,IAAI,GAAuB;YAC7B,KAAK;YACL,SAAS,EAAE;gBACP,IAAI;gBACJ,KAAK;aACR;SACJ,CAAC;QACF,OAAO,eAAe,CAAoB,aAAa,EAAE,MAAM,EAAE,EAAC,IAAI,EAAC,CAAC,CAAC,IAAI,CAAC,CAC1E,OAAyB,EAC3B,EAAE;YACA,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CACtC,IAAuB,EACvB,KAAU,EACZ,EAAE;;gBACA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,KAAK,EAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnF,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACpD,IAAI,CAAC,IAAI,CAAC;oBACN,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;oBACnC,MAAM,EAAE,MAAM,CAAC,MAAM;iBACxB,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;CAAA"}
|
|
1
|
+
{"version":3,"file":"fetchContentPathsForLocale.js","sourceRoot":"","sources":["../src/guillotine/fetchContentPathsForLocale.ts"],"names":[],"mappings":";;;;;;;;;AAGA,OAAO,EAAC,sBAAsB,EAAC,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGlD,MAAM,UAAgB,0BAA0B;yDAC5C,IAAY,EACZ,MAAqB,EACrB,QAAgB,sBAAsB,EACtC,KAAK,GAAG,GAAG;QAEX,MAAM,aAAa,GAAG,gBAAgB,CAAC;YACnC,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;SACxB,CAAC,CAAC;QACH,MAAM,IAAI,GAAuB;YAC7B,KAAK;YACL,SAAS,EAAE;gBACP,IAAI;gBACJ,SAAS,EAAE,WAAW,MAAM,CAAC,IAAI,IAAI;gBACrC,KAAK;aACR;SACJ,CAAC;QACF,OAAO,eAAe,CAAoB,aAAa,EAAE,MAAM,EAAE,EAAC,IAAI,EAAC,CAAC,CAAC,IAAI,CAAC,CAC1E,OAAyB,EAC3B,EAAE;YACA,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CACtC,IAAuB,EACvB,KAAU,EACZ,EAAE;;gBACA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,KAAK,EAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnF,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACpD,IAAI,CAAC,IAAI,CAAC;oBACN,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;oBACnC,MAAM,EAAE,MAAM,CAAC,MAAM;iBACxB,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;CAAA"}
|
package/i18n/LocaleContext.jsx
CHANGED
|
@@ -20,10 +20,13 @@ export const useLocaleContext = () => useContext(LocaleContext);
|
|
|
20
20
|
export const LocaleContextProvider = ({ children, locale: localeProps = '', }) => {
|
|
21
21
|
const [currentLocale, setLocaleState] = useState(localeProps);
|
|
22
22
|
const [dictionary, setPhrasesState] = useState({});
|
|
23
|
+
const [isLoaded, setLoadedState] = useState(false);
|
|
23
24
|
const setLocale = (locale) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
25
|
setLocaleState(locale);
|
|
26
|
+
setLoadedState(false);
|
|
25
27
|
return loadPhrases(locale).then((phrases) => {
|
|
26
28
|
setPhrasesState(phrases);
|
|
29
|
+
setLoadedState(true);
|
|
27
30
|
return phrases;
|
|
28
31
|
});
|
|
29
32
|
});
|
|
@@ -32,7 +35,9 @@ export const LocaleContextProvider = ({ children, locale: localeProps = '', }) =
|
|
|
32
35
|
void setLocale(localeProps); // void to avoid @typescript-eslint/no-floating-promises
|
|
33
36
|
}
|
|
34
37
|
}, []);
|
|
35
|
-
const localize = (key, ...args) =>
|
|
38
|
+
const localize = (key, ...args) => {
|
|
39
|
+
return isLoaded ? getPhrase(currentLocale, dictionary, key, ...args) : key;
|
|
40
|
+
};
|
|
36
41
|
return (<LocaleContext.Provider value={{
|
|
37
42
|
setLocale,
|
|
38
43
|
locale: currentLocale,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocaleContext.jsx","sourceRoot":"","sources":["../src/i18n/LocaleContext.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;AAGb,OAAO,KAAK,EAAE,EAAC,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC5E,OAAO,EAAC,SAAS,EAAE,WAAW,EAAC,MAAM,QAAQ,CAAC;AAG9C,MAAM,aAAa,GAAG,aAAa,CAAoB;IACnD,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,GAAG;IAC9C,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAClC,QAAQ,EACR,MAAM,EAAE,WAAW,GAAG,EAAE,GAI3B,EAAE,EAAE;IACD,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAO,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"LocaleContext.jsx","sourceRoot":"","sources":["../src/i18n/LocaleContext.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;AAGb,OAAO,KAAK,EAAE,EAAC,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC5E,OAAO,EAAC,SAAS,EAAE,WAAW,EAAC,MAAM,QAAQ,CAAC;AAG9C,MAAM,aAAa,GAAG,aAAa,CAAoB;IACnD,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,GAAG;IAC9C,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAClC,QAAQ,EACR,MAAM,EAAE,WAAW,GAAG,EAAE,GAI3B,EAAE,EAAE;IACD,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAO,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEnD,MAAM,SAAS,GAAG,CAAO,MAAc,EAAiB,EAAE;QACtD,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACxC,eAAe,CAAC,OAAO,CAAC,CAAC;YACzB,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC,CAAA,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,WAAW,EAAE,CAAC;YACd,KAAK,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,wDAAwD;QACzF,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE;QAC7C,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/E,CAAC,CAAC;IAEF,OAAO,CACH,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3B,SAAS;YACT,MAAM,EAAE,aAAa;YACrB,UAAU;YACV,QAAQ;SACX,CAAC,CACE;YAAA,CAAC,QAAQ,CACb;QAAA,EAAE,aAAa,CAAC,QAAQ,CAAC,CAC5B,CAAC;AACN,CAAC,CAAC"}
|
package/i18n/i18n.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { Dict } from '../types';
|
|
|
2
2
|
export declare class I18n {
|
|
3
3
|
private static locale;
|
|
4
4
|
private static dictionary;
|
|
5
|
+
private static isLoaded;
|
|
5
6
|
static setLocale(locale: string): Promise<Dict>;
|
|
6
7
|
static localize(key: string, ...args: any[]): string;
|
|
7
8
|
static getLocale(): string;
|
package/i18n/i18n.js
CHANGED
|
@@ -11,14 +11,16 @@ export class I18n {
|
|
|
11
11
|
static setLocale(locale) {
|
|
12
12
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13
13
|
this.locale = locale;
|
|
14
|
+
this.isLoaded = false;
|
|
14
15
|
return loadPhrases(locale).then((phrases) => {
|
|
15
16
|
this.dictionary = phrases;
|
|
17
|
+
this.isLoaded = true;
|
|
16
18
|
return phrases;
|
|
17
19
|
});
|
|
18
20
|
});
|
|
19
21
|
}
|
|
20
22
|
static localize(key, ...args) {
|
|
21
|
-
return getPhrase(this.locale, this.dictionary, key, ...args);
|
|
23
|
+
return this.isLoaded ? getPhrase(this.locale, this.dictionary, key, ...args) : key;
|
|
22
24
|
}
|
|
23
25
|
static getLocale() {
|
|
24
26
|
return this.locale;
|
|
@@ -29,6 +31,7 @@ export class I18n {
|
|
|
29
31
|
}
|
|
30
32
|
I18n.locale = '';
|
|
31
33
|
I18n.dictionary = {};
|
|
34
|
+
I18n.isLoaded = false;
|
|
32
35
|
export const loadPhrases = (locale) => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
36
|
return import(`@phrases/${locale}.json`)
|
|
34
37
|
.then((module) => module.default)
|
package/i18n/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n/i18n.ts"],"names":[],"mappings":";;;;;;;;;AAGA,MAAM,OAAO,IAAI;
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n/i18n.ts"],"names":[],"mappings":";;;;;;;;;AAGA,MAAM,OAAO,IAAI;IAKN,MAAM,CAAO,SAAS,CAAC,MAAc;;YACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACxC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;gBAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,OAAO,OAAO,CAAC;YACnB,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;IAEM,MAAM,CAAC,QAAQ,CAAC,GAAW,EAAE,GAAG,IAAW;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACvF,CAAC;IAEM,MAAM,CAAC,SAAS;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,MAAM,CAAC,aAAa;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;;AAxBc,WAAM,GAAG,EAAE,CAAC;AACZ,eAAU,GAAS,EAAE,CAAC;AACtB,aAAQ,GAAG,KAAK,CAAC;AAyBpC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAO,MAAc,EAAiB,EAAE;IAC/D,OAAO,MAAM,CAAC,YAAY,MAAM,OAAO,CAAC;SACnC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;SAChC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,OAAO,CAAC,KAAK,CAAC,sCAAsC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACX,CAAC,CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,IAAU,EAAE,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE;IACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,2CAA2C,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC;QAC7E,OAAO,IAAI,GAAG,GAAG,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;;YAClD,KAAK,EAAE,CAAC;YACR,OAAO,MAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,mCAAI,KAAK,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enonic/nextjs-adapter",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"author": "Pavel Milkevich <pmi@enonic.com>",
|
|
@@ -53,33 +53,33 @@
|
|
|
53
53
|
"@formatjs/intl-localematcher": "^0.5.4",
|
|
54
54
|
"html-react-parser": "^5.1.10",
|
|
55
55
|
"negotiator": "^0.6.3",
|
|
56
|
-
"next": "^14.2.
|
|
56
|
+
"next": "^14.2.4",
|
|
57
57
|
"react": "18.3.1",
|
|
58
58
|
"react-dom": "18.3.1",
|
|
59
59
|
"unescape": "^1.0.1"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@edge-runtime/jest-environment": "^2.3.10",
|
|
63
|
-
"@enonic-types/core": "^7.14.
|
|
63
|
+
"@enonic-types/core": "^7.14.2",
|
|
64
64
|
"@enonic/eslint-config": "^1.2.1",
|
|
65
|
-
"@testing-library/jest-dom": "^6.4.
|
|
66
|
-
"@testing-library/react": "^
|
|
65
|
+
"@testing-library/jest-dom": "^6.4.6",
|
|
66
|
+
"@testing-library/react": "^16.0.0",
|
|
67
67
|
"@types/negotiator": "^0.6.3",
|
|
68
|
-
"@types/node": "^20.
|
|
69
|
-
"@types/react": "^18.3.
|
|
68
|
+
"@types/node": "^20.14.2",
|
|
69
|
+
"@types/react": "^18.3.3",
|
|
70
70
|
"@types/react-dom": "^18.3.0",
|
|
71
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
72
|
-
"@typescript-eslint/parser": "^7.
|
|
71
|
+
"@typescript-eslint/eslint-plugin": "^7.13.0",
|
|
72
|
+
"@typescript-eslint/parser": "^7.13.0",
|
|
73
73
|
"concurrently": "^8.2.2",
|
|
74
74
|
"cpy-cli": "^5.0.0",
|
|
75
75
|
"del-cli": "^5.1.0",
|
|
76
76
|
"eslint": "^8.57.0",
|
|
77
|
-
"eslint-plugin-react": "^7.34.
|
|
77
|
+
"eslint-plugin-react": "^7.34.2",
|
|
78
78
|
"jest": "^29.7.0",
|
|
79
79
|
"jest-environment-jsdom": "^29.7.0",
|
|
80
80
|
"madge": "^7.0.0",
|
|
81
81
|
"mkdirp": "^3.0.1",
|
|
82
|
-
"ts-jest": "^29.1.
|
|
82
|
+
"ts-jest": "^29.1.5",
|
|
83
83
|
"ts-node": "^10.9.2",
|
|
84
84
|
"typescript": "^5.4.5"
|
|
85
85
|
},
|
|
@@ -4,8 +4,8 @@ import type {ImageData, LinkData, MetaData} from '../types';
|
|
|
4
4
|
import {RENDER_MODE} from './constants';
|
|
5
5
|
import {fixDoubleSlashes} from '../utils/fixDoubleSlashes';
|
|
6
6
|
import {getLocaleMappingByProjectId} from '../utils/getLocaleMappingByProjectId';
|
|
7
|
-
import {commonChars} from '../utils/commonChars';
|
|
8
7
|
import {addBasePath} from 'next/dist/client/add-base-path';
|
|
8
|
+
import {parseUrl} from 'next/dist/shared/lib/router/utils/parse-url';
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
export class UrlProcessor {
|
|
@@ -43,9 +43,9 @@ export class UrlProcessor {
|
|
|
43
43
|
const apiUrl = this.getApiUrl(meta);
|
|
44
44
|
normalUrl = this.stripApiUrl(url, apiUrl);
|
|
45
45
|
}
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
const baseUrl = meta?.baseUrl && meta?.baseUrl !== '/' ? meta.baseUrl : '';
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
let result: string;
|
|
50
50
|
if (meta.renderMode === RENDER_MODE.NEXT) {
|
|
51
51
|
// only add basePath and locale in next mode
|
|
@@ -100,11 +100,31 @@ export class UrlProcessor {
|
|
|
100
100
|
|
|
101
101
|
private static stripApiUrl(url: string, apiUrl: string): string {
|
|
102
102
|
// normalise localhost-127.0.0.1 if present in urls
|
|
103
|
-
const normalUrl = url.replace(this.localhostPattern, '127.0.0.1');
|
|
104
|
-
const normalApiUrl = apiUrl.replace(this.localhostPattern, '127.0.0.1');
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
103
|
+
const normalUrl = parseUrl(url.replace(this.localhostPattern, '127.0.0.1'));
|
|
104
|
+
const normalApiUrl = parseUrl(apiUrl.replace(this.localhostPattern, '127.0.0.1'));
|
|
105
|
+
|
|
106
|
+
// WARNING! disregarding the protocol (http/https)
|
|
107
|
+
|
|
108
|
+
if (normalUrl.hostname !== normalApiUrl.hostname
|
|
109
|
+
|| normalUrl.port !== normalApiUrl.port) {
|
|
110
|
+
// can't strip apiUrl if hostnames or ports are different
|
|
111
|
+
return url;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const urlPathCrumbs = normalUrl.pathname.split('/');
|
|
115
|
+
const apiUrlPathCrumbs = normalApiUrl.pathname.split('/');
|
|
116
|
+
for (let i = 0; i < Math.min(apiUrlPathCrumbs.length, urlPathCrumbs.length);) {
|
|
117
|
+
const urlPathCrumb = urlPathCrumbs[i];
|
|
118
|
+
const apiUrlPathCrumb = apiUrlPathCrumbs[i];
|
|
119
|
+
if (urlPathCrumb === apiUrlPathCrumb) {
|
|
120
|
+
urlPathCrumbs.shift();
|
|
121
|
+
apiUrlPathCrumbs.shift();
|
|
122
|
+
} else {
|
|
123
|
+
i++;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return `/${urlPathCrumbs.join('/')}` + normalUrl.search + normalUrl.hash;
|
|
108
128
|
}
|
|
109
129
|
|
|
110
130
|
private static isAttachmentUrl(url: string): boolean {
|
package/src/common/constants.ts
CHANGED
|
@@ -16,7 +16,7 @@ export const FRAGMENT_DEFAULT_REGION_NAME = 'fragment';
|
|
|
16
16
|
* - media
|
|
17
17
|
* - paths with '/_' in them
|
|
18
18
|
*/
|
|
19
|
-
export const GET_STATIC_PATHS_QUERY = `query ($count: Int) {
|
|
19
|
+
export const GET_STATIC_PATHS_QUERY = `query ($pathRegex: String!, $count: Int) {
|
|
20
20
|
guillotine {
|
|
21
21
|
queryDsl(
|
|
22
22
|
first: $count,
|
|
@@ -24,10 +24,17 @@ export const GET_STATIC_PATHS_QUERY = `query ($count: Int) {
|
|
|
24
24
|
field: "modifiedTime",
|
|
25
25
|
direction: DESC
|
|
26
26
|
}
|
|
27
|
-
query: {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
query: {
|
|
28
|
+
boolean: {
|
|
29
|
+
mustNot: [
|
|
30
|
+
{in: {field: "type", stringValues: ["base:shortcut", "portal:fragment", "portal:template-folder", "portal:page-template"]}}
|
|
31
|
+
{like: {field: "type", value: "media:*"}}
|
|
32
|
+
]
|
|
33
|
+
must: [
|
|
34
|
+
{like: {field:"_path", value: $pathRegex}}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
31
38
|
) {
|
|
32
39
|
_name
|
|
33
40
|
_path
|
|
@@ -23,11 +23,14 @@ export const LocaleContextProvider = ({
|
|
|
23
23
|
}) => {
|
|
24
24
|
const [currentLocale, setLocaleState] = useState(localeProps);
|
|
25
25
|
const [dictionary, setPhrasesState] = useState<Dict>({});
|
|
26
|
+
const [isLoaded, setLoadedState] = useState(false);
|
|
26
27
|
|
|
27
28
|
const setLocale = async (locale: string): Promise<Dict> => {
|
|
28
29
|
setLocaleState(locale);
|
|
30
|
+
setLoadedState(false);
|
|
29
31
|
return loadPhrases(locale).then((phrases) => {
|
|
30
32
|
setPhrasesState(phrases);
|
|
33
|
+
setLoadedState(true);
|
|
31
34
|
return phrases;
|
|
32
35
|
});
|
|
33
36
|
};
|
|
@@ -38,7 +41,9 @@ export const LocaleContextProvider = ({
|
|
|
38
41
|
}
|
|
39
42
|
}, []);
|
|
40
43
|
|
|
41
|
-
const localize = (key: string, ...args: any[]) =>
|
|
44
|
+
const localize = (key: string, ...args: any[]) => {
|
|
45
|
+
return isLoaded ? getPhrase(currentLocale, dictionary, key, ...args) : key;
|
|
46
|
+
};
|
|
42
47
|
|
|
43
48
|
return (
|
|
44
49
|
<LocaleContext.Provider value={{
|
package/src/i18n/i18n.ts
CHANGED
|
@@ -4,17 +4,20 @@ import type {Dict} from '../types';
|
|
|
4
4
|
export class I18n {
|
|
5
5
|
private static locale = '';
|
|
6
6
|
private static dictionary: Dict = {};
|
|
7
|
+
private static isLoaded = false;
|
|
7
8
|
|
|
8
9
|
public static async setLocale(locale: string): Promise<Dict> {
|
|
9
10
|
this.locale = locale;
|
|
11
|
+
this.isLoaded = false;
|
|
10
12
|
return loadPhrases(locale).then((phrases) => {
|
|
11
13
|
this.dictionary = phrases;
|
|
14
|
+
this.isLoaded = true;
|
|
12
15
|
return phrases;
|
|
13
16
|
});
|
|
14
17
|
}
|
|
15
18
|
|
|
16
19
|
public static localize(key: string, ...args: any[]): string {
|
|
17
|
-
return getPhrase(this.locale, this.dictionary, key, ...args);
|
|
20
|
+
return this.isLoaded ? getPhrase(this.locale, this.dictionary, key, ...args) : key;
|
|
18
21
|
}
|
|
19
22
|
|
|
20
23
|
public static getLocale() {
|