@enonic/nextjs-adapter 3.0.2 → 3.0.4
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 +27 -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 +33 -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) {
|
|
@@ -21,6 +21,10 @@ export class UrlProcessor {
|
|
|
21
21
|
// NB: will fail if content api is not on the same domain as enonic xp
|
|
22
22
|
const apiUrl = this.getApiUrl(meta);
|
|
23
23
|
normalUrl = this.stripApiUrl(url, apiUrl);
|
|
24
|
+
// if url is still absolute, return it as is
|
|
25
|
+
if (!this.isRelative(normalUrl)) {
|
|
26
|
+
return normalUrl;
|
|
27
|
+
}
|
|
24
28
|
}
|
|
25
29
|
const baseUrl = (meta === null || meta === void 0 ? void 0 : meta.baseUrl) && (meta === null || meta === void 0 ? void 0 : meta.baseUrl) !== '/' ? meta.baseUrl : '';
|
|
26
30
|
let result;
|
|
@@ -74,11 +78,28 @@ export class UrlProcessor {
|
|
|
74
78
|
}
|
|
75
79
|
static stripApiUrl(url, apiUrl) {
|
|
76
80
|
// 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
|
-
|
|
81
|
+
const normalUrl = parseUrl(url.replace(this.localhostPattern, '127.0.0.1'));
|
|
82
|
+
const normalApiUrl = parseUrl(apiUrl.replace(this.localhostPattern, '127.0.0.1'));
|
|
83
|
+
// WARNING! disregarding the protocol (http/https)
|
|
84
|
+
if (normalUrl.hostname !== normalApiUrl.hostname
|
|
85
|
+
|| normalUrl.port !== normalApiUrl.port) {
|
|
86
|
+
// can't strip apiUrl if hostnames or ports are different
|
|
87
|
+
return url;
|
|
88
|
+
}
|
|
89
|
+
const urlPathCrumbs = normalUrl.pathname.split('/');
|
|
90
|
+
const apiUrlPathCrumbs = normalApiUrl.pathname.split('/');
|
|
91
|
+
for (let i = 0; i < Math.min(apiUrlPathCrumbs.length, urlPathCrumbs.length);) {
|
|
92
|
+
const urlPathCrumb = urlPathCrumbs[i];
|
|
93
|
+
const apiUrlPathCrumb = apiUrlPathCrumbs[i];
|
|
94
|
+
if (urlPathCrumb === apiUrlPathCrumb) {
|
|
95
|
+
urlPathCrumbs.shift();
|
|
96
|
+
apiUrlPathCrumbs.shift();
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
i++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return `/${urlPathCrumbs.join('/')}` + normalUrl.search + normalUrl.hash;
|
|
82
103
|
}
|
|
83
104
|
static isAttachmentUrl(url) {
|
|
84
105
|
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.4",
|
|
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 {
|
|
@@ -42,10 +42,15 @@ export class UrlProcessor {
|
|
|
42
42
|
// NB: will fail if content api is not on the same domain as enonic xp
|
|
43
43
|
const apiUrl = this.getApiUrl(meta);
|
|
44
44
|
normalUrl = this.stripApiUrl(url, apiUrl);
|
|
45
|
+
|
|
46
|
+
// if url is still absolute, return it as is
|
|
47
|
+
if (!this.isRelative(normalUrl)) {
|
|
48
|
+
return normalUrl;
|
|
49
|
+
}
|
|
45
50
|
}
|
|
46
|
-
|
|
51
|
+
|
|
47
52
|
const baseUrl = meta?.baseUrl && meta?.baseUrl !== '/' ? meta.baseUrl : '';
|
|
48
|
-
|
|
53
|
+
|
|
49
54
|
let result: string;
|
|
50
55
|
if (meta.renderMode === RENDER_MODE.NEXT) {
|
|
51
56
|
// only add basePath and locale in next mode
|
|
@@ -100,11 +105,31 @@ export class UrlProcessor {
|
|
|
100
105
|
|
|
101
106
|
private static stripApiUrl(url: string, apiUrl: string): string {
|
|
102
107
|
// 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
|
-
|
|
108
|
+
const normalUrl = parseUrl(url.replace(this.localhostPattern, '127.0.0.1'));
|
|
109
|
+
const normalApiUrl = parseUrl(apiUrl.replace(this.localhostPattern, '127.0.0.1'));
|
|
110
|
+
|
|
111
|
+
// WARNING! disregarding the protocol (http/https)
|
|
112
|
+
|
|
113
|
+
if (normalUrl.hostname !== normalApiUrl.hostname
|
|
114
|
+
|| normalUrl.port !== normalApiUrl.port) {
|
|
115
|
+
// can't strip apiUrl if hostnames or ports are different
|
|
116
|
+
return url;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const urlPathCrumbs = normalUrl.pathname.split('/');
|
|
120
|
+
const apiUrlPathCrumbs = normalApiUrl.pathname.split('/');
|
|
121
|
+
for (let i = 0; i < Math.min(apiUrlPathCrumbs.length, urlPathCrumbs.length);) {
|
|
122
|
+
const urlPathCrumb = urlPathCrumbs[i];
|
|
123
|
+
const apiUrlPathCrumb = apiUrlPathCrumbs[i];
|
|
124
|
+
if (urlPathCrumb === apiUrlPathCrumb) {
|
|
125
|
+
urlPathCrumbs.shift();
|
|
126
|
+
apiUrlPathCrumbs.shift();
|
|
127
|
+
} else {
|
|
128
|
+
i++;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return `/${urlPathCrumbs.join('/')}` + normalUrl.search + normalUrl.hash;
|
|
108
133
|
}
|
|
109
134
|
|
|
110
135
|
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() {
|