@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.
@@ -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
- const common = commonChars(normalUrl, normalApiUrl);
80
- const remaining = common.length > 0 ? normalUrl.substring(common.length) : normalUrl;
81
- return (remaining.length > 0 && remaining.charAt(0) === '/') ? remaining.substring(1) : remaining;
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":"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"}
1
+ {"version":3,"file":"UrlProcessor.js","sourceRoot":"","sources":["../src/common/UrlProcessor.ts"],"names":[],"mappings":"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"}
@@ -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 {in: {field: \"type\", stringValues: [\"base:shortcut\", \"portal:fragment\", \"portal:template-folder\", \"portal:page-template\"]}}\n {like: {field: \"type\", value: \"media:*\"}}\n ]}}\n ) {\n _name\n _path\n site {_name}\n }\n }\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",
@@ -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: {boolean: {mustNot: [
26
- {in: {field: "type", stringValues: ["base:shortcut", "portal:fragment", "portal:template-folder", "portal:page-template"]}}
27
- {like: {field: "type", value: "media:*"}}
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
@@ -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;;;;;;;;;;;;;;;;;;EAkBpC,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
+ {"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"}
@@ -20,6 +20,7 @@ export function fetchContentPathsForLocale(path_1, config_1) {
20
20
  query,
21
21
  variables: {
22
22
  path,
23
+ pathRegex: `/content${config.site}/*`,
23
24
  count,
24
25
  },
25
26
  };
@@ -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"}
@@ -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) => getPhrase(currentLocale, dictionary, 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;IAEzD,MAAM,SAAS,GAAG,CAAO,MAAc,EAAiB,EAAE;QACtD,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACxC,eAAe,CAAC,OAAO,CAAC,CAAC;YACzB,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,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAErG,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"}
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;IAIN,MAAM,CAAO,SAAS,CAAC,MAAc;;YACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACxC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;gBAC1B,OAAO,OAAO,CAAC;YACnB,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;IAEM,MAAM,CAAC,QAAQ,CAAC,GAAW,EAAE,GAAG,IAAW;QAC9C,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjE,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;;AArBc,WAAM,GAAG,EAAE,CAAC;AACZ,eAAU,GAAS,EAAE,CAAC;AAuBzC,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"}
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.2",
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.3",
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.1",
63
+ "@enonic-types/core": "^7.14.2",
64
64
  "@enonic/eslint-config": "^1.2.1",
65
- "@testing-library/jest-dom": "^6.4.5",
66
- "@testing-library/react": "^15.0.7",
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.12.11",
69
- "@types/react": "^18.3.2",
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.8.0",
72
- "@typescript-eslint/parser": "^7.8.0",
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.1",
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.2",
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
- const common = commonChars(normalUrl, normalApiUrl);
106
- const remaining = common.length > 0 ? normalUrl.substring(common.length) : normalUrl;
107
- return (remaining.length > 0 && remaining.charAt(0) === '/') ? remaining.substring(1) : remaining;
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 {
@@ -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: {boolean: {mustNot: [
28
- {in: {field: "type", stringValues: ["base:shortcut", "portal:fragment", "portal:template-folder", "portal:page-template"]}}
29
- {like: {field: "type", value: "media:*"}}
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
@@ -20,6 +20,7 @@ export async function fetchContentPathsForLocale(
20
20
  query,
21
21
  variables: {
22
22
  path,
23
+ pathRegex: `/content${config.site}/*`,
23
24
  count,
24
25
  },
25
26
  };
@@ -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[]) => getPhrase(currentLocale, dictionary, key, ...args);
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() {