@websolutespa/bom-next 3.0.2 → 4.0.0-next.1
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/CHANGELOG.md +37 -7
- package/README.md +28 -0
- package/dist/_virtual/{_rolldown/runtime.js → rolldown_runtime.js} +7 -4
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +17 -6
- package/dist/client/client.js.map +1 -1
- package/dist/client/extra.d.ts +3 -3
- package/dist/client/extra.d.ts.map +1 -1
- package/dist/client/extra.js +10 -5
- package/dist/client/extra.js.map +1 -1
- package/dist/client/label.d.ts +3 -3
- package/dist/client/label.d.ts.map +1 -1
- package/dist/client/label.js +10 -5
- package/dist/client/label.js.map +1 -1
- package/dist/client/layout.d.ts +3 -3
- package/dist/client/layout.d.ts.map +1 -1
- package/dist/client/layout.js +10 -5
- package/dist/client/layout.js.map +1 -1
- package/dist/client/local.collection.d.ts.map +1 -1
- package/dist/client/local.collection.js +4 -2
- package/dist/client/local.collection.js.map +1 -1
- package/dist/client/metadata.d.ts +3 -3
- package/dist/client/metadata.d.ts.map +1 -1
- package/dist/client/metadata.js +48 -40
- package/dist/client/metadata.js.map +1 -1
- package/dist/client/page.d.ts +3 -3
- package/dist/client/page.d.ts.map +1 -1
- package/dist/client/page.js +10 -5
- package/dist/client/page.js.map +1 -1
- package/dist/client/useApi.d.ts +7 -7
- package/dist/client/useApi.d.ts.map +1 -1
- package/dist/client/useApi.js +2 -1
- package/dist/client/useApi.js.map +1 -1
- package/dist/client/useCollectionApi.d.ts +6 -6
- package/dist/client/useCollectionApi.d.ts.map +1 -1
- package/dist/client/useCollectionApi.js +4 -2
- package/dist/client/useCollectionApi.js.map +1 -1
- package/dist/client/useExtra.d.ts.map +1 -1
- package/dist/client/useExtra.js +5 -2
- package/dist/client/useExtra.js.map +1 -1
- package/dist/client/useHttp.d.ts.map +1 -1
- package/dist/client/useHttp.js +9 -6
- package/dist/client/useHttp.js.map +1 -1
- package/dist/client/useLabel.d.ts.map +1 -1
- package/dist/client/useLabel.js +5 -2
- package/dist/client/useLabel.js.map +1 -1
- package/dist/client/useLayout.d.ts.map +1 -1
- package/dist/client/useLayout.js +5 -2
- package/dist/client/useLayout.js.map +1 -1
- package/dist/client/useLink.d.ts.map +1 -1
- package/dist/client/useLink.js +7 -3
- package/dist/client/useLink.js.map +1 -1
- package/dist/client/useMetaData.d.ts.map +1 -1
- package/dist/client/useMetaData.js +5 -2
- package/dist/client/useMetaData.js.map +1 -1
- package/dist/client/usePage.d.ts.map +1 -1
- package/dist/client/usePage.js +5 -2
- package/dist/client/usePage.js.map +1 -1
- package/dist/client/useUser.d.ts.map +1 -1
- package/dist/client/useUser.js +5 -2
- package/dist/client/useUser.js.map +1 -1
- package/dist/client/user.d.ts.map +1 -1
- package/dist/client/user.js +17 -11
- package/dist/client/user.js.map +1 -1
- package/dist/exports/client.js +2 -1
- package/dist/exports/instrumentation.js +2 -1
- package/dist/exports/proxy.js +2 -1
- package/dist/exports/server.d.ts +5 -4
- package/dist/exports/server.js +7 -5
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -2
- package/dist/instrumentation/client.d.ts.map +1 -1
- package/dist/instrumentation/client.js +2 -1
- package/dist/instrumentation/client.js.map +1 -1
- package/dist/instrumentation/sentry/capture.requestError.js +4 -1
- package/dist/instrumentation/sentry/capture.requestError.js.map +1 -1
- package/dist/instrumentation/sentry/capture.routerTransitionStart.js +2 -1
- package/dist/instrumentation/sentry/capture.routerTransitionStart.js.map +1 -1
- package/dist/instrumentation/sentry/config.client.js +10 -2
- package/dist/instrumentation/sentry/config.client.js.map +1 -0
- package/dist/instrumentation/sentry/config.edge.js +10 -2
- package/dist/instrumentation/sentry/config.edge.js.map +1 -0
- package/dist/instrumentation/sentry/config.server.js +10 -2
- package/dist/instrumentation/sentry/config.server.js.map +1 -0
- package/dist/instrumentation/server.d.ts.map +1 -1
- package/dist/instrumentation/server.js +8 -5
- package/dist/instrumentation/server.js.map +1 -1
- package/dist/instrumentation/types.d.ts.map +1 -1
- package/dist/lib/breadcrumb.d.ts.map +1 -1
- package/dist/lib/breadcrumb.js +6 -1
- package/dist/lib/breadcrumb.js.map +1 -1
- package/dist/lib/const.d.ts +14 -2
- package/dist/lib/const.d.ts.map +1 -1
- package/dist/lib/const.js +24 -2
- package/dist/lib/const.js.map +1 -1
- package/dist/lib/http.d.ts +9 -0
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +27 -4
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/label.d.ts.map +1 -1
- package/dist/lib/label.js +4 -3
- package/dist/lib/label.js.map +1 -1
- package/dist/lib/layout.defaults.d.ts.map +1 -1
- package/dist/lib/layout.defaults.js +1 -1
- package/dist/lib/layout.defaults.js.map +1 -1
- package/dist/lib/link.d.ts.map +1 -1
- package/dist/lib/link.js +2 -1
- package/dist/lib/link.js.map +1 -1
- package/dist/lib/meta-data.d.ts.map +1 -1
- package/dist/lib/open-graph.d.ts.map +1 -1
- package/dist/lib/pagination.d.ts.map +1 -1
- package/dist/lib/pagination.js +4 -2
- package/dist/lib/pagination.js.map +1 -1
- package/dist/lib/route.d.ts.map +1 -1
- package/dist/lib/route.js +9 -3
- package/dist/lib/route.js.map +1 -1
- package/dist/lib/store.d.ts.map +1 -1
- package/dist/lib/store.js +31 -31
- package/dist/lib/store.js.map +1 -1
- package/dist/lib/structured-data.d.ts.map +1 -1
- package/dist/lib/twitter-card.d.ts.map +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +3 -2
- package/dist/lib/utils.js.map +1 -1
- package/dist/mock.d.ts.map +1 -1
- package/dist/node_modules/@selderee/plugin-htmlparser2/lib/hp2-builder.js +3 -2
- package/dist/node_modules/@selderee/plugin-htmlparser2/lib/hp2-builder.js.map +1 -1
- package/dist/node_modules/deepmerge/dist/cjs.js +17 -9
- package/dist/node_modules/deepmerge/dist/cjs.js.map +1 -1
- package/dist/node_modules/dom-serializer/lib/esm/foreignNames.js +2 -2
- package/dist/node_modules/dom-serializer/lib/esm/foreignNames.js.map +1 -1
- package/dist/node_modules/dom-serializer/lib/esm/index.js +10 -15
- package/dist/node_modules/dom-serializer/lib/esm/index.js.map +1 -1
- package/dist/node_modules/domelementtype/lib/esm/index.js +12 -12
- package/dist/node_modules/domelementtype/lib/esm/index.js.map +1 -1
- package/dist/node_modules/domhandler/lib/esm/index.js +4 -3
- package/dist/node_modules/domhandler/lib/esm/index.js.map +1 -1
- package/dist/node_modules/domhandler/lib/esm/node.js +8 -7
- package/dist/node_modules/domhandler/lib/esm/node.js.map +1 -1
- package/dist/node_modules/entities/lib/esm/decode.js +33 -32
- package/dist/node_modules/entities/lib/esm/decode.js.map +1 -1
- package/dist/node_modules/entities/lib/esm/decode_codepoint.js +5 -5
- package/dist/node_modules/entities/lib/esm/decode_codepoint.js.map +1 -1
- package/dist/node_modules/entities/lib/esm/escape.js +14 -6
- package/dist/node_modules/entities/lib/esm/escape.js.map +1 -1
- package/dist/node_modules/entities/lib/esm/generated/decode-data-html.js +2 -2
- package/dist/node_modules/entities/lib/esm/generated/decode-data-html.js.map +1 -1
- package/dist/node_modules/entities/lib/esm/generated/decode-data-xml.js +2 -2
- package/dist/node_modules/entities/lib/esm/generated/decode-data-xml.js.map +1 -1
- package/dist/node_modules/html-to-text/lib/html-to-text.js +45 -33
- package/dist/node_modules/html-to-text/lib/html-to-text.js.map +1 -1
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Parser.js +25 -25
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Parser.js.map +1 -1
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Tokenizer.js +76 -73
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Tokenizer.js.map +1 -1
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/index.js +4 -3
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/index.js.map +1 -1
- package/dist/node_modules/leac/lib/leac.js +72 -72
- package/dist/node_modules/leac/lib/leac.js.map +1 -1
- package/dist/node_modules/parseley/lib/parseley.js +37 -33
- package/dist/node_modules/parseley/lib/parseley.js.map +1 -1
- package/dist/node_modules/peberminta/lib/core.js +4 -4
- package/dist/node_modules/peberminta/lib/core.js.map +1 -1
- package/dist/node_modules/selderee/lib/selderee.js +16 -10
- package/dist/node_modules/selderee/lib/selderee.js.map +1 -1
- package/dist/proxy/protected-route.d.ts.map +1 -1
- package/dist/proxy/protected-route.js +11 -6
- package/dist/proxy/protected-route.js.map +1 -1
- package/dist/proxy/proxy.d.ts +5 -4
- package/dist/proxy/proxy.d.ts.map +1 -1
- package/dist/proxy/proxy.js +26 -6
- package/dist/proxy/proxy.js.map +1 -1
- package/dist/proxy/route-auto-detection.d.ts.map +1 -1
- package/dist/proxy/route-auto-detection.js +26 -14
- package/dist/proxy/route-auto-detection.js.map +1 -1
- package/dist/proxy/route-proxy.d.ts.map +1 -1
- package/dist/proxy/route-proxy.js +22 -5
- package/dist/proxy/route-proxy.js.map +1 -1
- package/dist/server/context.d.ts +31 -15
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js +156 -69
- package/dist/server/context.js.map +1 -1
- package/dist/server/handlers/auth.handler.d.ts.map +1 -1
- package/dist/server/handlers/auth.handler.js +4 -2
- package/dist/server/handlers/auth.handler.js.map +1 -1
- package/dist/server/handlers/captions.handler.d.ts.map +1 -1
- package/dist/server/handlers/captions.handler.js +4 -2
- package/dist/server/handlers/captions.handler.js.map +1 -1
- package/dist/server/handlers/collection.handler.d.ts.map +1 -1
- package/dist/server/handlers/collection.handler.js +2 -1
- package/dist/server/handlers/collection.handler.js.map +1 -1
- package/dist/server/handlers/error-response.js +6 -2
- package/dist/server/handlers/error-response.js.map +1 -1
- package/dist/server/handlers/index.handler.d.ts.map +1 -1
- package/dist/server/handlers/index.handler.js +2 -1
- package/dist/server/handlers/index.handler.js.map +1 -1
- package/dist/server/handlers/preview.handler.d.ts.map +1 -1
- package/dist/server/handlers/preview.handler.js +6 -3
- package/dist/server/handlers/preview.handler.js.map +1 -1
- package/dist/server/handlers/registry.handler.d.ts.map +1 -1
- package/dist/server/handlers/registry.handler.js +14 -9
- package/dist/server/handlers/registry.handler.js.map +1 -1
- package/dist/server/handlers/route.handler.d.ts.map +1 -1
- package/dist/server/handlers/route.handler.js +12 -3
- package/dist/server/handlers/route.handler.js.map +1 -1
- package/dist/server/handlers/sitemap.handler.d.ts.map +1 -1
- package/dist/server/handlers/sitemap.handler.js +12 -9
- package/dist/server/handlers/sitemap.handler.js.map +1 -1
- package/dist/server/handlers/static-params.handler.d.ts.map +1 -1
- package/dist/server/handlers/static-params.handler.js +13 -8
- package/dist/server/handlers/static-params.handler.js.map +1 -1
- package/dist/server/handlers/vars.handler.d.ts.map +1 -1
- package/dist/server/handlers/vars.handler.js +5 -4
- package/dist/server/handlers/vars.handler.js.map +1 -1
- package/dist/server/helpers.d.ts +50 -0
- package/dist/server/helpers.d.ts.map +1 -0
- package/dist/server/helpers.js +60 -0
- package/dist/server/helpers.js.map +1 -0
- package/dist/server/layout.js +69 -34
- package/dist/server/layout.js.map +1 -1
- package/dist/server/lazy.d.ts +1 -0
- package/dist/server/lazy.d.ts.map +1 -1
- package/dist/server/lazy.js +3 -2
- package/dist/server/lazy.js.map +1 -1
- package/dist/server/local-api.d.ts.map +1 -1
- package/dist/server/local-api.js +12 -6
- package/dist/server/local-api.js.map +1 -1
- package/dist/server/metadata.d.ts +8 -5
- package/dist/server/metadata.d.ts.map +1 -1
- package/dist/server/metadata.js +21 -7
- package/dist/server/metadata.js.map +1 -1
- package/dist/server/mixer-payload.d.ts +1 -1
- package/dist/server/mixer-payload.d.ts.map +1 -1
- package/dist/server/mixer.d.ts +48 -6
- package/dist/server/mixer.d.ts.map +1 -1
- package/dist/server/mixer.js +235 -68
- package/dist/server/mixer.js.map +1 -1
- package/dist/server/page.d.ts +21 -5
- package/dist/server/page.d.ts.map +1 -1
- package/dist/server/page.js +74 -15
- package/dist/server/page.js.map +1 -1
- package/dist/server/utils.d.ts.map +1 -1
- package/dist/server/utils.js +4 -2
- package/dist/server/utils.js.map +1 -1
- package/dist/server/utmz.d.ts.map +1 -1
- package/dist/server/utmz.js +1 -1
- package/dist/server/utmz.js.map +1 -1
- package/dist/types.d.ts +79 -8
- package/dist/types.d.ts.map +1 -1
- package/package.json +16 -15
- package/src/exports/server.ts +1 -0
- package/src/lib/const.ts +15 -0
- package/src/lib/http.ts +15 -4
- package/src/proxy/proxy.ts +11 -4
- package/src/server/context.test.ts +467 -0
- package/src/server/context.ts +237 -78
- package/src/server/context.type-test.ts +106 -0
- package/src/server/helpers.ts +58 -0
- package/src/server/layout.ts +45 -39
- package/src/server/lazy.ts +1 -1
- package/src/server/metadata.ts +15 -7
- package/src/server/mixer.ts +57 -9
- package/src/server/page.ts +62 -17
- package/src/types.ts +109 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,37 @@
|
|
|
1
|
-
# @websolutespa/bom-next
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
###
|
|
6
|
-
|
|
7
|
-
-
|
|
1
|
+
# @websolutespa/bom-next
|
|
2
|
+
|
|
3
|
+
## 4.0.0-next.1
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Next: options signature for `createPageContext`, `createLayoutContext`, `createNotFoundContext` and `getMetadata`.
|
|
8
|
+
- New form: `createPageContext(market, locale, slug, id, { config, headers, depth, select, populate, joins, draft, layout })` and `createLayoutContext(market, locale, { config, headers, depth, draft })`. The positional `(config, headers)` form still works, logs a one-time deprecation warning in development.
|
|
9
|
+
- **Behaviour change:** pages are now read at `DEFAULT_PAGE_DEPTH` (2) and the layout at `DEFAULT_LAYOUT_DEPTH` (1), including through the legacy signature. Relationships and uploads (page media, media inside blocks, category, template, markets) are populated objects instead of ids; pass `depth: 0` to keep the previous shape.
|
|
10
|
+
- `select` narrows the page type; envelope fields (`id`, `slug`, `title`, `category`, `markets`, `meta`, `template`) are always read so `href`, alternates and breadcrumb keep working.
|
|
11
|
+
- Draft mode works: `draft: 'auto'` (default) reads Next `draftMode()`, draft reads use the draft mixer/route cache key and the authenticated user. `createNotFoundContext` always reads published content.
|
|
12
|
+
- Page and layout are loaded once per request (React `cache`, serialized key) and in parallel, so `getMetadata` and the page share the same reads. `getLayout` runs its reads in parallel.
|
|
13
|
+
- `getPage` returns `undefined` only for not found / not accessible documents and rethrows other errors.
|
|
14
|
+
- `buildBaseOptions` is deprecated in favour of `buildReadOptions({ user, locale, draft, depth, select, populate, joins })`.
|
|
15
|
+
- `context`, `page`, `layout` and `lazy` modules use `import 'server-only'` instead of `'use server'`, so their exports are no longer exposed as Server Actions. `server-only` is now a dependency; outside Next (scripts, Payload CLI, Vitest) `@websolutespa/bom-next/server` needs the `react-server` condition (`node --conditions=react-server`, Vitest `resolve.conditions`) or a `server-only` mock.
|
|
16
|
+
- `TypedPageContext.layout` follows the `layout` option: `undefined` with `layout: false`.
|
|
17
|
+
- New `createContextHelpers({ config, defaults })` factory and `Populated<T>` type helper.
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- feat: enhance page context options and helpers
|
|
22
|
+
|
|
23
|
+
## 4.0.0-next.0
|
|
24
|
+
|
|
25
|
+
### Major Changes
|
|
26
|
+
|
|
27
|
+
- Next: support of the bom-next app package
|
|
28
|
+
- Updated dependencies
|
|
29
|
+
- @websolutespa/bom-core@4.0.0-next.0
|
|
30
|
+
- @websolutespa/payload-plugin-bowl@4.0.0-next.0
|
|
31
|
+
- @websolutespa/payload-utils@4.0.0-next.0
|
|
32
|
+
|
|
33
|
+
## 3.0.2
|
|
34
|
+
|
|
35
|
+
### Patch Changes
|
|
36
|
+
|
|
37
|
+
- Added: first release
|
package/README.md
CHANGED
|
@@ -9,3 +9,31 @@ Next module of the [BOM Repository](https://github.com/websolutespa/bom) by [web
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
##### *this library is for internal usage and not production ready*
|
|
12
|
+
|
|
13
|
+
## Page context
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { createPageContext, getMetadata } from '@websolutespa/bom-next/server';
|
|
17
|
+
|
|
18
|
+
export const generateMetadata = getMetadata('post_detail', config);
|
|
19
|
+
|
|
20
|
+
const { page, layout, label, link } = await createPageContext(market, locale, 'post_detail', id, {
|
|
21
|
+
config,
|
|
22
|
+
depth: 2, // default DEFAULT_PAGE_DEPTH
|
|
23
|
+
select: { title: true, abstract: true, media: true, components: true },
|
|
24
|
+
populate: { media: { url: true, alt: true, width: true, height: true, type: true } },
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const { layout } = await createLayoutContext(market, locale, { config }); // depth: DEFAULT_LAYOUT_DEPTH (1)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
| option | default | |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| `depth` | `2` | `0` ids only, `1` direct relations/uploads (including those inside blocks), `2` relations of relations |
|
|
33
|
+
| `select` | – | Payload select; envelope fields (`id`, `slug`, `title`, `category`, `markets`, `meta`, `template`) are always read |
|
|
34
|
+
| `populate` | – | per-collection select for populated documents |
|
|
35
|
+
| `draft` | `'auto'` | `true` / `false`, or `'auto'` to read Next `draftMode()` |
|
|
36
|
+
| `layout` | `{ depth: 1 }` | layout options, or `false` to skip the layout |
|
|
37
|
+
|
|
38
|
+
Page and layout reads are memoized per request, so `getMetadata` and the page component share them when called with the same options.
|
|
39
|
+
To bind `config` once: `export const { createPageContext, createLayoutContext, getMetadata } = createContextHelpers({ config, defaults: { depth: 2 } });`
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
//#region
|
|
1
|
+
//#region rolldown:runtime
|
|
2
2
|
var __create = Object.create;
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var
|
|
8
|
+
var __commonJS = (cb, mod) => function() {
|
|
9
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
10
|
+
};
|
|
9
11
|
var __copyProps = (to, from, except, desc) => {
|
|
10
12
|
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
11
13
|
key = keys[i];
|
|
@@ -16,9 +18,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
18
|
}
|
|
17
19
|
return to;
|
|
18
20
|
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
20
22
|
value: mod,
|
|
21
23
|
enumerable: true
|
|
22
24
|
}) : target, mod));
|
|
25
|
+
|
|
23
26
|
//#endregion
|
|
24
|
-
export {
|
|
27
|
+
export { __commonJS, __toESM };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","names":[],"sources":["../../src/client/client.tsx"],"mappings":";;;iBAMgB,MAAA,CAAA,GAAM,MAAA,CAAA,GAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","names":[],"sources":["../../src/client/client.tsx"],"sourcesContent":[],"mappings":";;;iBAMgB,MAAA,CAAA,GAAM,MAAA,CAAA,GAAA,CAAA"}
|
package/dist/client/client.js
CHANGED
|
@@ -1,18 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
|
|
2
4
|
import { useLabel } from "./useLabel.js";
|
|
3
5
|
import { usePage } from "./usePage.js";
|
|
4
6
|
import { getClassNames } from "@websolutespa/bom-core";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
|
|
5
9
|
//#region src/client/client.tsx
|
|
6
10
|
function Client() {
|
|
7
11
|
const label = useLabel();
|
|
8
12
|
const page = usePage();
|
|
9
13
|
const classNames = getClassNames("client");
|
|
10
|
-
return
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
15
|
+
className: classNames,
|
|
16
|
+
children: [/* @__PURE__ */ jsxs("h2", {
|
|
17
|
+
className: "display-2",
|
|
18
|
+
children: [
|
|
19
|
+
page.title,
|
|
20
|
+
" ",
|
|
21
|
+
/* @__PURE__ */ jsx("sup", { children: page.id })
|
|
22
|
+
]
|
|
23
|
+
}), /* @__PURE__ */ jsx("h2", { children: label("label") })]
|
|
24
|
+
});
|
|
14
25
|
}
|
|
26
|
+
|
|
15
27
|
//#endregion
|
|
16
28
|
export { Client };
|
|
17
|
-
|
|
18
29
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":[],"sources":["../../src/client/client.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { getClassNames } from '@websolutespa/bom-core';\r\nimport { useLabel } from './useLabel';\r\nimport { usePage } from './usePage';\r\n\r\nexport function Client() {\r\n const label = useLabel();\r\n const page = usePage();\r\n // console.log('Client', layout, page, label('label'));\r\n const classNames = getClassNames('client');\r\n return (\r\n <div className={classNames}>\r\n <h2 className=\"display-2\">{page.title} <sup>{page.id}</sup></h2>\r\n <h2>{label('label')}</h2>\r\n </div>\r\n );\r\n}\r\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"sources":["../../src/client/client.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { getClassNames } from '@websolutespa/bom-core';\r\nimport { useLabel } from './useLabel';\r\nimport { usePage } from './usePage';\r\n\r\nexport function Client() {\r\n const label = useLabel();\r\n const page = usePage();\r\n // console.log('Client', layout, page, label('label'));\r\n const classNames = getClassNames('client');\r\n return (\r\n <div className={classNames}>\r\n <h2 className=\"display-2\">{page.title} <sup>{page.id}</sup></h2>\r\n <h2>{label('label')}</h2>\r\n </div>\r\n );\r\n}\r\n"],"mappings":";;;;;;;;;AAMA,SAAgB,SAAS;CACvB,MAAM,QAAQ,UAAU;CACxB,MAAM,OAAO,SAAS;CAEtB,MAAM,aAAa,cAAc,SAAS;AAC1C,6BACG;EAAI,WAAW;kCACb;GAAG,WAAU;;IAAa,KAAK;IAAM;wBAAE,mBAAK,KAAK,KAAS;;IAAK,sBAC/D,kBAAI,MAAM,QAAQ,GAAM;GACrB;AAET"}
|
package/dist/client/extra.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react4 from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/client/extra.d.ts
|
|
4
4
|
type IExtraContext = Record<string, any>;
|
|
5
|
-
declare const ExtraContext:
|
|
5
|
+
declare const ExtraContext: react4.Context<IExtraContext | undefined>;
|
|
6
6
|
declare function ExtraProvider({
|
|
7
7
|
extra,
|
|
8
8
|
children
|
|
9
9
|
}: {
|
|
10
10
|
extra?: Record<string, any>;
|
|
11
11
|
children?: React.ReactNode;
|
|
12
|
-
}):
|
|
12
|
+
}): react4.JSX.Element;
|
|
13
13
|
//# sourceMappingURL=extra.d.ts.map
|
|
14
14
|
|
|
15
15
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extra.d.ts","names":[],"sources":["../../src/client/extra.tsx"],"mappings":";;;KAIY,aAAA,GAAgB;cAEf,cAAY,MAAA,CAAA,QAAA;iBAET,aAAA
|
|
1
|
+
{"version":3,"file":"extra.d.ts","names":[],"sources":["../../src/client/extra.tsx"],"sourcesContent":[],"mappings":";;;KAIY,aAAA,GAAgB;cAEf,cAAY,MAAA,CAAA,QAAA;iBAET,aAAA;;;;EAJJ,KAAA,CAAA,EAQF,MARE,CAAA,MAAa,EAAA,GAAA,CAAA;EAEZ,QAAA,CAAA,EAOA,KAAA,CAAM,SAP4D;CAAA,CAAA,EAQ9E,MAAA,CAAA,GAAA,CAAA,OAR8E"}
|
package/dist/client/extra.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
|
|
2
4
|
import { createContext } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
|
|
3
7
|
//#region src/client/extra.tsx
|
|
4
8
|
const ExtraContext = createContext(void 0);
|
|
5
9
|
function ExtraProvider({ extra = {}, children }) {
|
|
6
|
-
return
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
return /* @__PURE__ */ jsx(ExtraContext.Provider, {
|
|
11
|
+
value: extra,
|
|
12
|
+
children
|
|
13
|
+
});
|
|
9
14
|
}
|
|
15
|
+
|
|
10
16
|
//#endregion
|
|
11
17
|
export { ExtraContext, ExtraProvider };
|
|
12
|
-
|
|
13
18
|
//# sourceMappingURL=extra.js.map
|
package/dist/client/extra.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extra.js","names":[],"sources":["../../src/client/extra.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { createContext } from 'react';\r\n\r\nexport type IExtraContext = Record<string, any>;\r\n\r\nexport const ExtraContext = createContext<IExtraContext | undefined>(undefined);\r\n\r\nexport function ExtraProvider({\r\n extra = {},\r\n children,\r\n}: {\r\n extra?: Record<string, any>,\r\n children?: React.ReactNode\r\n}) {\r\n return (\r\n <ExtraContext.Provider value={extra}>\r\n {children}\r\n </ExtraContext.Provider>\r\n );\r\n}\r\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"extra.js","names":[],"sources":["../../src/client/extra.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { createContext } from 'react';\r\n\r\nexport type IExtraContext = Record<string, any>;\r\n\r\nexport const ExtraContext = createContext<IExtraContext | undefined>(undefined);\r\n\r\nexport function ExtraProvider({\r\n extra = {},\r\n children,\r\n}: {\r\n extra?: Record<string, any>,\r\n children?: React.ReactNode\r\n}) {\r\n return (\r\n <ExtraContext.Provider value={extra}>\r\n {children}\r\n </ExtraContext.Provider>\r\n );\r\n}\r\n"],"mappings":";;;;;;;AAMA,MAAa,eAAe,cAAyC,OAAU;AAE/E,SAAgB,cAAc,EAC5B,QAAQ,CAAE,GACV,UAID,EAAE;AACD,4BACG,aAAa;EAAS,OAAO;EAC3B;GACqB;AAE3B"}
|
package/dist/client/label.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react0 from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/client/label.d.ts
|
|
4
4
|
type ILabelContext = (key: string, params?: Record<string, any>) => string;
|
|
5
|
-
declare const LabelContext:
|
|
5
|
+
declare const LabelContext: react0.Context<ILabelContext | undefined>;
|
|
6
6
|
declare function LabelProvider({
|
|
7
7
|
children
|
|
8
8
|
}: {
|
|
9
9
|
children?: React.ReactNode;
|
|
10
|
-
}):
|
|
10
|
+
}): react0.JSX.Element;
|
|
11
11
|
//# sourceMappingURL=label.d.ts.map
|
|
12
12
|
|
|
13
13
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label.d.ts","names":[],"sources":["../../src/client/label.tsx"],"mappings":";;;KAMY,aAAA,0BAAuC;cAEtC,cAAY,MAAA,CAAA,QAAA;iBAET,aAAA;;AAFhB;EAFY,QAAA,CAAA,EAI6C,KAAA,CAAM,SAJtC;AAEzB,CAAA,CAAA,EAE0E,MAAA,CAAA,GAAA,CAAA,OAFK
|
|
1
|
+
{"version":3,"file":"label.d.ts","names":[],"sources":["../../src/client/label.tsx"],"sourcesContent":[],"mappings":";;;KAMY,aAAA,0BAAuC;cAEtC,cAAY,MAAA,CAAA,QAAA;iBAET,aAAA;;AAFhB;EAFY,QAAA,CAAA,EAI6C,KAAA,CAAM,SAJtC;AAEzB,CAAA,CAAA,EAE0E,MAAA,CAAA,GAAA,CAAA,OAFK"}
|
package/dist/client/label.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
|
|
2
4
|
import { LabelService } from "../lib/label.js";
|
|
3
5
|
import { useLayout } from "./useLayout.js";
|
|
4
6
|
import { createContext } from "react";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
|
|
5
9
|
//#region src/client/label.tsx
|
|
6
10
|
const LabelContext = createContext(void 0);
|
|
7
11
|
function LabelProvider({ children }) {
|
|
@@ -10,11 +14,12 @@ function LabelProvider({ children }) {
|
|
|
10
14
|
const getLabel = (key, params) => {
|
|
11
15
|
return labelService.getLabel(key, params);
|
|
12
16
|
};
|
|
13
|
-
return
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
return /* @__PURE__ */ jsx(LabelContext.Provider, {
|
|
18
|
+
value: getLabel,
|
|
19
|
+
children
|
|
20
|
+
});
|
|
16
21
|
}
|
|
22
|
+
|
|
17
23
|
//#endregion
|
|
18
24
|
export { LabelContext, LabelProvider };
|
|
19
|
-
|
|
20
25
|
//# sourceMappingURL=label.js.map
|
package/dist/client/label.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label.js","names":[],"sources":["../../src/client/label.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { createContext } from 'react';\r\nimport { LabelService } from '../lib/label';\r\nimport { useLayout } from './useLayout';\r\n\r\nexport type ILabelContext = (key: string, params?: Record<string, any>) => string;\r\n\r\nexport const LabelContext = createContext<ILabelContext | undefined>(undefined);\r\n\r\nexport function LabelProvider({ children }: { children?: React.ReactNode }) {\r\n const { labels } = useLayout();\r\n // console.log('LabelProvider', labels);\r\n const labelService = new LabelService(labels);\r\n const getLabel = (key: string, params?: Record<string, any>): string => {\r\n return labelService.getLabel(key, params);\r\n };\r\n return (\r\n <LabelContext.Provider value={getLabel}>\r\n {children}\r\n </LabelContext.Provider>\r\n );\r\n}\r\n\r\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"label.js","names":["key: string","params?: Record<string, any>"],"sources":["../../src/client/label.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { createContext } from 'react';\r\nimport { LabelService } from '../lib/label';\r\nimport { useLayout } from './useLayout';\r\n\r\nexport type ILabelContext = (key: string, params?: Record<string, any>) => string;\r\n\r\nexport const LabelContext = createContext<ILabelContext | undefined>(undefined);\r\n\r\nexport function LabelProvider({ children }: { children?: React.ReactNode }) {\r\n const { labels } = useLayout();\r\n // console.log('LabelProvider', labels);\r\n const labelService = new LabelService(labels);\r\n const getLabel = (key: string, params?: Record<string, any>): string => {\r\n return labelService.getLabel(key, params);\r\n };\r\n return (\r\n <LabelContext.Provider value={getLabel}>\r\n {children}\r\n </LabelContext.Provider>\r\n );\r\n}\r\n\r\n"],"mappings":";;;;;;;;;AAQA,MAAa,eAAe,cAAyC,OAAU;AAE/E,SAAgB,cAAc,EAAE,UAA0C,EAAE;CAC1E,MAAM,EAAE,QAAQ,GAAG,WAAW;CAE9B,MAAM,eAAe,IAAI,aAAa;CACtC,MAAM,WAAW,CAACA,KAAaC,WAAyC;AACtE,SAAO,aAAa,SAAS,KAAK,OAAO;CAC1C;AACD,4BACG,aAAa;EAAS,OAAO;EAC3B;GACqB;AAE3B"}
|
package/dist/client/layout.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { ILayout } from "@websolutespa/bom-core";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react2 from "react";
|
|
3
3
|
|
|
4
4
|
//#region src/client/layout.d.ts
|
|
5
5
|
type ILayoutContext = ILayout;
|
|
6
|
-
declare const LayoutContext:
|
|
6
|
+
declare const LayoutContext: react2.Context<ILayoutContext | undefined>;
|
|
7
7
|
declare function LayoutProvider({
|
|
8
8
|
layout,
|
|
9
9
|
children
|
|
10
10
|
}: {
|
|
11
11
|
layout: ILayout;
|
|
12
12
|
children?: React.ReactNode;
|
|
13
|
-
}):
|
|
13
|
+
}): react2.JSX.Element;
|
|
14
14
|
//# sourceMappingURL=layout.d.ts.map
|
|
15
15
|
|
|
16
16
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","names":[],"sources":["../../src/client/layout.tsx"],"mappings":";;;;KAKY,cAAA,GAAiB;cAEhB,eAAa,MAAA,CAAA,QAAA;iBAEV,cAAA
|
|
1
|
+
{"version":3,"file":"layout.d.ts","names":[],"sources":["../../src/client/layout.tsx"],"sourcesContent":[],"mappings":";;;;KAKY,cAAA,GAAiB;cAEhB,eAAa,MAAA,CAAA,QAAA;iBAEV,cAAA;;;;EAJJ,MAAA,EAQF,OARE;EAEC,QAAA,CAAA,EAOA,KAAA,CAAM,SAP8D;CAAA,CAAA,EAQhF,MAAA,CAAA,GAAA,CAAA,OARgF"}
|
package/dist/client/layout.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
|
|
2
4
|
import { createContext } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
|
|
3
7
|
//#region src/client/layout.tsx
|
|
4
8
|
const LayoutContext = createContext(void 0);
|
|
5
9
|
function LayoutProvider({ layout, children }) {
|
|
6
|
-
return
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
return /* @__PURE__ */ jsx(LayoutContext.Provider, {
|
|
11
|
+
value: layout,
|
|
12
|
+
children
|
|
13
|
+
});
|
|
9
14
|
}
|
|
15
|
+
|
|
10
16
|
//#endregion
|
|
11
17
|
export { LayoutContext, LayoutProvider };
|
|
12
|
-
|
|
13
18
|
//# sourceMappingURL=layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","names":[],"sources":["../../src/client/layout.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { ILayout } from '@websolutespa/bom-core';\r\nimport { createContext } from 'react';\r\n\r\nexport type ILayoutContext = ILayout;\r\n\r\nexport const LayoutContext = createContext<ILayoutContext | undefined>(undefined);\r\n\r\nexport function LayoutProvider({\r\n layout,\r\n children,\r\n}: {\r\n layout: ILayout,\r\n children?: React.ReactNode\r\n}) {\r\n return (\r\n <LayoutContext.Provider value={layout}>\r\n {children}\r\n </LayoutContext.Provider>\r\n );\r\n}\r\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"layout.js","names":[],"sources":["../../src/client/layout.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { ILayout } from '@websolutespa/bom-core';\r\nimport { createContext } from 'react';\r\n\r\nexport type ILayoutContext = ILayout;\r\n\r\nexport const LayoutContext = createContext<ILayoutContext | undefined>(undefined);\r\n\r\nexport function LayoutProvider({\r\n layout,\r\n children,\r\n}: {\r\n layout: ILayout,\r\n children?: React.ReactNode\r\n}) {\r\n return (\r\n <LayoutContext.Provider value={layout}>\r\n {children}\r\n </LayoutContext.Provider>\r\n );\r\n}\r\n"],"mappings":";;;;;;;AAOA,MAAa,gBAAgB,cAA0C,OAAU;AAEjF,SAAgB,eAAe,EAC7B,QACA,UAID,EAAE;AACD,4BACG,cAAc;EAAS,OAAO;EAC5B;GACsB;AAE5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.collection.d.ts","names":[],"sources":["../../src/client/local.collection.ts"],"mappings":";;;iBAGsB,8DAA6D,iCAAzC;;EAApB,MAAA,EAAA,MAAA;
|
|
1
|
+
{"version":3,"file":"local.collection.d.ts","names":[],"sources":["../../src/client/local.collection.ts"],"sourcesContent":[],"mappings":";;;iBAGsB,8DAA6D,iCAAzC;;EAApB,MAAA,EAAA,MAAA;CAAoB,CAAA,EAAuH,OAAvH,CAA+H,CAA/H,CAAA;AAAyC,iBAW7D,kBAX6D,CAAA,IAAA,OAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAWP,iBAXO,EAAA,cAAqF,CAArF,EAAA;EAAsB,MAAgE,EAAA,MAAA;EAAC,MAAT,EAAA,MAAA;AAAO,CAAA,CAAA,EAWd,OAXc,CAWN,CAXM,CAAA;AAWlJ,iBAIA,mBAJkB,CAAA,IAAA,OAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAIwD,iBAJxD,EAAA,cAA0D,CAA1D,EAAA;EAAA,MAAA,EAAA,MAAA;EAAA,MAAoC,EAAA,MAAA;CAAsB,CAAA,EAI4E,OAJZ,CAIoB,CAJpB,CAAA;AAAR,iBAQpI,kBARoI,CAAA,IAAA,OAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAQ3D,iBAR2D,EAAA,cAIjH,CAJiH,EAAA;EAAO,MAAA,EAAA,MAAA;EAI3I,MAAA,EAAA,MAAA;CAAmB,CAAA,EAIoI,OAJpI,CAI4I,CAJ5I,CAAA;AAAuD,iBAQ1E,oBAR0E,CAAA,IAAA,OAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAQC,iBARD,EAAA,cAAqF,CAArF,EAAA;EAAsB,MAAgE,EAAA,MAAA;EAAC,MAAT,EAAA,MAAA;AAAO,CAAA,CAAA,EAQN,OARM,CAQE,CARF,CAAA;AAI/J,iBAQA,qBARkB,CAAA,IAAA,OAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAQuC,iBARvC,EAAA,cAA6E,CAA7E,EAAA;EAAA,MAAA,EAAA,MAAA;EAAA,MAAuD,EAAA,MAAA;CAAsB,CAAA,EAQwC,OARwB,CAQhB,CARgB,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getLocalApiRequestOptions, getLocalApiUrl } from "../lib/http.js";
|
|
2
2
|
import { httpFetch, merge } from "@websolutespa/bom-core";
|
|
3
|
+
|
|
3
4
|
//#region src/client/local.collection.ts
|
|
4
5
|
async function localCollectionFetch(pathname, options = {}, serviceOptions) {
|
|
5
6
|
const url = new URL(getLocalApiUrl(pathname));
|
|
@@ -8,7 +9,8 @@ async function localCollectionFetch(pathname, options = {}, serviceOptions) {
|
|
|
8
9
|
url.searchParams.append("market", serviceOptions.market);
|
|
9
10
|
}
|
|
10
11
|
const apiOptions = merge({ ...getLocalApiRequestOptions() }, options);
|
|
11
|
-
|
|
12
|
+
const apiResponse = await httpFetch(url.href, apiOptions);
|
|
13
|
+
return apiResponse;
|
|
12
14
|
}
|
|
13
15
|
async function localCollectionGet(url, options = {}, serviceOptions) {
|
|
14
16
|
return await localCollectionFetch(url, {
|
|
@@ -43,7 +45,7 @@ async function localCollectionDelete(url, options = {}, serviceOptions) {
|
|
|
43
45
|
method: "DELETE"
|
|
44
46
|
}, serviceOptions);
|
|
45
47
|
}
|
|
48
|
+
|
|
46
49
|
//#endregion
|
|
47
50
|
export { localCollectionDelete, localCollectionFetch, localCollectionGet, localCollectionPatch, localCollectionPost, localCollectionPut };
|
|
48
|
-
|
|
49
51
|
//# sourceMappingURL=local.collection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.collection.js","names":[],"sources":["../../src/client/local.collection.ts"],"sourcesContent":["import { httpFetch, merge } from '@websolutespa/bom-core';\r\nimport { ApiRequestOptions, getLocalApiRequestOptions, getLocalApiUrl } from '../lib/http';\r\n\r\nexport async function localCollectionFetch<T = unknown>(pathname: string, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n const url = new URL(getLocalApiUrl(pathname));\r\n if (serviceOptions) {\r\n url.searchParams.append('locale', serviceOptions.locale);\r\n url.searchParams.append('market', serviceOptions.market);\r\n }\r\n const apiOptions = merge({ ...getLocalApiRequestOptions() }, options);\r\n const apiResponse = await httpFetch(url.href, apiOptions);\r\n return apiResponse;\r\n}\r\n\r\nexport async function localCollectionGet<T = unknown>(url: string, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localCollectionFetch<T>(url, { ...options, method: 'GET' }, serviceOptions);\r\n}\r\n\r\nexport async function localCollectionPost<T = unknown>(url: string, payload?: unknown, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localCollectionFetch<T>(url, { ...options, method: 'POST', body: payload ? JSON.stringify(payload) : undefined }, serviceOptions);\r\n}\r\n\r\nexport async function localCollectionPut<T = unknown>(url: string, payload?: unknown, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localCollectionFetch<T>(url, { ...options, method: 'PUT', body: payload ? JSON.stringify(payload) : undefined }, serviceOptions);\r\n}\r\n\r\nexport async function localCollectionPatch<T = unknown>(url: string, payload?: unknown, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localCollectionFetch<T>(url, { ...options, method: 'PATCH', body: payload ? JSON.stringify(payload) : undefined }, serviceOptions);\r\n}\r\n\r\nexport async function localCollectionDelete<T = unknown>(url: string, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localCollectionFetch<T>(url, { ...options, method: 'DELETE' }, serviceOptions);\r\n}\r\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"local.collection.js","names":["pathname: string","options: ApiRequestOptions","serviceOptions?: { locale: string, market: string }","url: string","payload?: unknown"],"sources":["../../src/client/local.collection.ts"],"sourcesContent":["import { httpFetch, merge } from '@websolutespa/bom-core';\r\nimport { ApiRequestOptions, getLocalApiRequestOptions, getLocalApiUrl } from '../lib/http';\r\n\r\nexport async function localCollectionFetch<T = unknown>(pathname: string, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n const url = new URL(getLocalApiUrl(pathname));\r\n if (serviceOptions) {\r\n url.searchParams.append('locale', serviceOptions.locale);\r\n url.searchParams.append('market', serviceOptions.market);\r\n }\r\n const apiOptions = merge({ ...getLocalApiRequestOptions() }, options);\r\n const apiResponse = await httpFetch(url.href, apiOptions);\r\n return apiResponse;\r\n}\r\n\r\nexport async function localCollectionGet<T = unknown>(url: string, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localCollectionFetch<T>(url, { ...options, method: 'GET' }, serviceOptions);\r\n}\r\n\r\nexport async function localCollectionPost<T = unknown>(url: string, payload?: unknown, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localCollectionFetch<T>(url, { ...options, method: 'POST', body: payload ? JSON.stringify(payload) : undefined }, serviceOptions);\r\n}\r\n\r\nexport async function localCollectionPut<T = unknown>(url: string, payload?: unknown, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localCollectionFetch<T>(url, { ...options, method: 'PUT', body: payload ? JSON.stringify(payload) : undefined }, serviceOptions);\r\n}\r\n\r\nexport async function localCollectionPatch<T = unknown>(url: string, payload?: unknown, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localCollectionFetch<T>(url, { ...options, method: 'PATCH', body: payload ? JSON.stringify(payload) : undefined }, serviceOptions);\r\n}\r\n\r\nexport async function localCollectionDelete<T = unknown>(url: string, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localCollectionFetch<T>(url, { ...options, method: 'DELETE' }, serviceOptions);\r\n}\r\n"],"mappings":";;;;AAGA,eAAsB,qBAAkCA,UAAkBC,UAA6B,CAAE,GAAEC,gBAAiE;CAC1K,MAAM,MAAM,IAAI,IAAI,eAAe,SAAS;AAC5C,KAAI,gBAAgB;EAClB,IAAI,aAAa,OAAO,UAAU,eAAe,OAAO;EACxD,IAAI,aAAa,OAAO,UAAU,eAAe,OAAO;CACzD;CACD,MAAM,aAAa,MAAM,EAAE,GAAG,2BAA2B,CAAE,GAAE,QAAQ;CACrE,MAAM,cAAc,MAAM,UAAU,IAAI,MAAM,WAAW;AACzD,QAAO;AACR;AAED,eAAsB,mBAAgCC,KAAaF,UAA6B,CAAE,GAAEC,gBAAiE;AACnK,QAAO,MAAM,qBAAwB,KAAK;EAAE,GAAG;EAAS,QAAQ;CAAO,GAAE,eAAe;AACzF;AAED,eAAsB,oBAAiCC,KAAaC,SAAmBH,UAA6B,CAAE,GAAEC,gBAAiE;AACvL,QAAO,MAAM,qBAAwB,KAAK;EAAE,GAAG;EAAS,QAAQ;EAAQ,MAAM,UAAU,KAAK,UAAU,QAAQ,GAAG;CAAW,GAAE,eAAe;AAC/I;AAED,eAAsB,mBAAgCC,KAAaC,SAAmBH,UAA6B,CAAE,GAAEC,gBAAiE;AACtL,QAAO,MAAM,qBAAwB,KAAK;EAAE,GAAG;EAAS,QAAQ;EAAO,MAAM,UAAU,KAAK,UAAU,QAAQ,GAAG;CAAW,GAAE,eAAe;AAC9I;AAED,eAAsB,qBAAkCC,KAAaC,SAAmBH,UAA6B,CAAE,GAAEC,gBAAiE;AACxL,QAAO,MAAM,qBAAwB,KAAK;EAAE,GAAG;EAAS,QAAQ;EAAS,MAAM,UAAU,KAAK,UAAU,QAAQ,GAAG;CAAW,GAAE,eAAe;AAChJ;AAED,eAAsB,sBAAmCC,KAAaF,UAA6B,CAAE,GAAEC,gBAAiE;AACtK,QAAO,MAAM,qBAAwB,KAAK;EAAE,GAAG;EAAS,QAAQ;CAAU,GAAE,eAAe;AAC5F"}
|
|
@@ -2,7 +2,7 @@ import { OpenGraphType } from "../lib/open-graph.js";
|
|
|
2
2
|
import { StructuredDataType } from "../lib/structured-data.js";
|
|
3
3
|
import { TwitterCardType } from "../lib/twitter-card.js";
|
|
4
4
|
import { IMetaData } from "../lib/meta-data.js";
|
|
5
|
-
import * as
|
|
5
|
+
import * as react8 from "react";
|
|
6
6
|
import { ReactNode } from "react";
|
|
7
7
|
|
|
8
8
|
//#region src/client/metadata.d.ts
|
|
@@ -29,14 +29,14 @@ type IMetaDataOptions = {
|
|
|
29
29
|
twitterCard?: TwitterCardType;
|
|
30
30
|
};
|
|
31
31
|
type IMetaDataContext = IMetaData;
|
|
32
|
-
declare const MetaDataContext:
|
|
32
|
+
declare const MetaDataContext: react8.Context<IMetaData | undefined>;
|
|
33
33
|
declare function MetaDataProvider({
|
|
34
34
|
metaData,
|
|
35
35
|
children
|
|
36
36
|
}: {
|
|
37
37
|
metaData: IMetaDataOptions;
|
|
38
38
|
children?: ReactNode;
|
|
39
|
-
}):
|
|
39
|
+
}): react8.JSX.Element;
|
|
40
40
|
//# sourceMappingURL=metadata.d.ts.map
|
|
41
41
|
//#endregion
|
|
42
42
|
export { IMetaDataContext, IMetaDataOptions, MetaDataContext, MetaDataProvider };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","names":[],"sources":["../../src/client/metadata.tsx"],"mappings":";;;;;;;;KAeY,gBAAA;;;IAAA,IAAA,EAAA,MAAA;IAAgB,YAAA,CAAA,EAAA,MAAA;IAgBf,OAAA,CAAA,EAAA,MAAA;IAEM,GAAA,CAAA,EAAA,MAAA;IACL,KAAA,CAAA,EAAA,MAAA;IACE,SAAA,CAAA,EAAA,MAAA;IAAe,OAAA,CAAA,EAAA,MAAA;IAGnB,OAAA,CAAA,EAAA,MAAgB;IAEf,IAAA,CAAA,EAAA,MAAA;IAAwE,YAAA,CAAA,EAAA,MAAA;IAAzD,WAAA,CAAA,EAAA,MAAA;IAAA,WAAA,CAAA,EAAA,MAAA;IAAA,WAAA,CAAA,EAAA,MAAA;IAEZ,MAAA,CAAA,EAXH,MAWmB,CAAA,MAAA,EAAA,MAAA,CAAA;EAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","names":[],"sources":["../../src/client/metadata.tsx"],"sourcesContent":[],"mappings":";;;;;;;;KAeY,gBAAA;;;IAAA,IAAA,EAAA,MAAA;IAAgB,YAAA,CAAA,EAAA,MAAA;IAgBf,OAAA,CAAA,EAAA,MAAA;IAEM,GAAA,CAAA,EAAA,MAAA;IACL,KAAA,CAAA,EAAA,MAAA;IACE,SAAA,CAAA,EAAA,MAAA;IAAe,OAAA,CAAA,EAAA,MAAA;IAGnB,OAAA,CAAA,EAAA,MAAgB;IAEf,IAAA,CAAA,EAAA,MAAA;IAAwE,YAAA,CAAA,EAAA,MAAA;IAAzD,WAAA,CAAA,EAAA,MAAA;IAAA,WAAA,CAAA,EAAA,MAAA;IAAA,WAAA,CAAA,EAAA,MAAA;IAEZ,MAAA,CAAA,EAXH,MAWmB,CAAA,MAAA,EAAA,MAAA,CAAA;EAAA,CAAA;EAAA,cAC9B,CAAA,EAViB,kBAUjB;EAAQ,SACR,CAAA,EAVY,aAUZ;EAAQ,WAEE,CAAA,EAXI,eAWJ;CAAgB;AAE3B,KAVW,gBAAA,GAAmB,SAU9B;AAAA,cARY,eAQZ,EAR2B,MAAA,CAAA,OAQ3B,CAR2B,SAQ3B,GAAA,SAAA,CAAA;iBANe,gBAAA;;;;YAIJ;aACC;IACZ,MAAA,CAAA,GAAA,CAAA"}
|
package/dist/client/metadata.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
|
|
2
4
|
import { getPublicUrl, resolveHref } from "../lib/utils.js";
|
|
3
5
|
import { useLayout } from "./useLayout.js";
|
|
4
6
|
import { usePage } from "./usePage.js";
|
|
5
7
|
import { convert } from "../node_modules/html-to-text/lib/html-to-text.js";
|
|
6
8
|
import { defaultLocale, defaultMarket } from "@websolutespa/bom-core";
|
|
7
9
|
import { createContext, useMemo } from "react";
|
|
10
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
11
|
import { useRouter } from "next/compat/router";
|
|
12
|
+
|
|
9
13
|
//#region src/client/metadata.tsx
|
|
10
14
|
const MetaDataContext = createContext(void 0);
|
|
11
15
|
function MetaDataProvider({ metaData, children }) {
|
|
@@ -30,26 +34,24 @@ function MetaDataProvider({ metaData, children }) {
|
|
|
30
34
|
if (query.match(/^\?pagination\[page\]=(\d+)$/) && query !== "?pagination[page]=1") canonical = `${canonical}${query}`;
|
|
31
35
|
const url = `${canonical}${query}`;
|
|
32
36
|
const alternates = useMemo(() => {
|
|
33
|
-
const alternates = [];
|
|
37
|
+
const alternates$1 = [];
|
|
34
38
|
(page.alternates || []).forEach((alternate) => {
|
|
35
39
|
const market = layout.markets.find((x) => x.id === alternate.market);
|
|
36
|
-
if (market) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
id: `${alternate.market}-${alternate.locale}-${alpha2Code}`,
|
|
41
|
-
href: resolveHref(alternate.id),
|
|
42
|
-
hrefLang: `${alternate.locale}-${alpha2Code}`
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
else alternates.push({
|
|
46
|
-
id: `${alternate.market}-${alternate.locale}`,
|
|
40
|
+
if (market) if (market.countries && market.countries.length > 0) market.countries.forEach((country) => {
|
|
41
|
+
const alpha2Code = typeof country === "string" ? country : country.alpha2Code;
|
|
42
|
+
alternates$1.push({
|
|
43
|
+
id: `${alternate.market}-${alternate.locale}-${alpha2Code}`,
|
|
47
44
|
href: resolveHref(alternate.id),
|
|
48
|
-
hrefLang: alternate.locale
|
|
45
|
+
hrefLang: `${alternate.locale}-${alpha2Code}`
|
|
49
46
|
});
|
|
50
|
-
}
|
|
47
|
+
});
|
|
48
|
+
else alternates$1.push({
|
|
49
|
+
id: `${alternate.market}-${alternate.locale}`,
|
|
50
|
+
href: resolveHref(alternate.id),
|
|
51
|
+
hrefLang: alternate.locale
|
|
52
|
+
});
|
|
51
53
|
});
|
|
52
|
-
return alternates;
|
|
54
|
+
return alternates$1;
|
|
53
55
|
}, [layout, page]);
|
|
54
56
|
const xDefault = useMemo(() => {
|
|
55
57
|
const xDefaultMarket = layout.markets.find((x) => x.isDefault)?.id || defaultMarket;
|
|
@@ -60,6 +62,7 @@ function MetaDataProvider({ metaData, children }) {
|
|
|
60
62
|
href: resolveHref(alternate.id),
|
|
61
63
|
hrefLang: alternate.locale
|
|
62
64
|
};
|
|
65
|
+
return void 0;
|
|
63
66
|
}, [layout, page]);
|
|
64
67
|
const meta = {
|
|
65
68
|
title,
|
|
@@ -98,8 +101,10 @@ function MetaDataProvider({ metaData, children }) {
|
|
|
98
101
|
},
|
|
99
102
|
url: brand.url
|
|
100
103
|
};
|
|
101
|
-
|
|
102
|
-
if (
|
|
104
|
+
const hasContact = Boolean(brand.email || brand.telephone);
|
|
105
|
+
if (hasContact) organization.contactPoint = contactPoint;
|
|
106
|
+
const hasAddress = Boolean(brand.address || brand.city || brand.zipCode || brand.provinceCode || brand.countryCode);
|
|
107
|
+
if (hasAddress) organization.address = postalAddress;
|
|
103
108
|
if (brand.social) organization.sameAs = Object.values(brand.social);
|
|
104
109
|
const structuredData = metaData.structuredData || {
|
|
105
110
|
"@type": "WebPage",
|
|
@@ -108,39 +113,42 @@ function MetaDataProvider({ metaData, children }) {
|
|
|
108
113
|
description,
|
|
109
114
|
publisher: organization
|
|
110
115
|
};
|
|
116
|
+
const openGraph = metaData.openGraph || {
|
|
117
|
+
type: "website",
|
|
118
|
+
title,
|
|
119
|
+
description,
|
|
120
|
+
url,
|
|
121
|
+
siteName: brand.name,
|
|
122
|
+
image,
|
|
123
|
+
locale: layout.locale
|
|
124
|
+
};
|
|
125
|
+
const twitterCard = metaData.twitterCard || (brand.twitterName ? {
|
|
126
|
+
card: "summary_large_image",
|
|
127
|
+
title,
|
|
128
|
+
description,
|
|
129
|
+
image,
|
|
130
|
+
imageAlt: brand.businessName,
|
|
131
|
+
site: brand.twitterName,
|
|
132
|
+
creator: brand.twitterName
|
|
133
|
+
} : void 0);
|
|
111
134
|
const value = {
|
|
112
135
|
layout,
|
|
113
136
|
page,
|
|
114
137
|
brand,
|
|
115
138
|
contactPoint,
|
|
116
139
|
meta,
|
|
117
|
-
openGraph
|
|
118
|
-
type: "website",
|
|
119
|
-
title,
|
|
120
|
-
description,
|
|
121
|
-
url,
|
|
122
|
-
siteName: brand.name,
|
|
123
|
-
image,
|
|
124
|
-
locale: layout.locale
|
|
125
|
-
},
|
|
140
|
+
openGraph,
|
|
126
141
|
organization,
|
|
127
142
|
postalAddress,
|
|
128
143
|
structuredData,
|
|
129
|
-
twitterCard
|
|
130
|
-
card: "summary_large_image",
|
|
131
|
-
title,
|
|
132
|
-
description,
|
|
133
|
-
image,
|
|
134
|
-
imageAlt: brand.businessName,
|
|
135
|
-
site: brand.twitterName,
|
|
136
|
-
creator: brand.twitterName
|
|
137
|
-
} : void 0)
|
|
144
|
+
twitterCard
|
|
138
145
|
};
|
|
139
|
-
return
|
|
140
|
-
|
|
141
|
-
|
|
146
|
+
return /* @__PURE__ */ jsx(MetaDataContext.Provider, {
|
|
147
|
+
value,
|
|
148
|
+
children
|
|
149
|
+
});
|
|
142
150
|
}
|
|
151
|
+
|
|
143
152
|
//#endregion
|
|
144
153
|
export { MetaDataContext, MetaDataProvider };
|
|
145
|
-
|
|
146
154
|
//# sourceMappingURL=metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","names":["htmlToText"],"sources":["../../src/client/metadata.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { defaultLocale, defaultMarket, IMedia, IRoute } from '@websolutespa/bom-core';\r\nimport { convert as htmlToText } from 'html-to-text';\r\nimport { useRouter } from 'next/compat/router';\r\nimport { createContext, ReactNode, useMemo } from 'react';\r\nimport { ContactPoint, Organization, PostalAddress } from 'schema-dts';\r\nimport { IAlternate, IBrand, IMeta, IMetaData } from '../lib/meta-data';\r\nimport { OpenGraphType } from '../lib/open-graph';\r\nimport { StructuredDataType } from '../lib/structured-data';\r\nimport { TwitterCardType } from '../lib/twitter-card';\r\nimport { getPublicUrl, resolveHref } from '../lib/utils';\r\nimport { useLayout } from './useLayout';\r\nimport { usePage } from './usePage';\r\n\r\nexport type IMetaDataOptions = {\r\n brand: {\r\n name: string;\r\n logo: string;\r\n businessName?: string;\r\n appName?: string;\r\n url?: string;\r\n email?: string;\r\n telephone?: string;\r\n zipCode?: string;\r\n address?: string;\r\n city?: string;\r\n provinceCode?: string;\r\n countryName?: string;\r\n countryCode?: string;\r\n twitterName?: string;\r\n social?: Record<string, string>;\r\n },\r\n structuredData?: StructuredDataType;\r\n openGraph?: OpenGraphType;\r\n twitterCard?: TwitterCardType;\r\n};\r\n\r\nexport type IMetaDataContext = IMetaData;\r\n\r\nexport const MetaDataContext = createContext<IMetaDataContext | undefined>(undefined);\r\n\r\nexport function MetaDataProvider({\r\n metaData,\r\n children,\r\n}: {\r\n metaData: IMetaDataOptions,\r\n children?: ReactNode,\r\n}) {\r\n const router = useRouter();\r\n const layout = useLayout();\r\n const page = usePage();\r\n const brand: IBrand = {\r\n ...metaData.brand,\r\n logo: resolveHref(metaData.brand.logo),\r\n url: getPublicUrl(), // layout.topLevelHrefs.homepage,\r\n businessName: metaData.brand.businessName || metaData.brand.name,\r\n appName: metaData.brand.appName || metaData.brand.name,\r\n };\r\n const title = htmlToText(page.meta?.title || page.title || '');\r\n const description = htmlToText(page.meta?.description || page.abstract || '');\r\n const media = ((page.meta as { image: IMedia } | undefined)?.image || page.media);\r\n const image = media ? resolveHref(media.src || media.url) : brand.logo;\r\n let canonical = resolveHref(page.href);\r\n const asPath = router?.asPath || '';\r\n const queryIndex = asPath.indexOf('?');\r\n const query = queryIndex !== -1 ? asPath.substring(queryIndex) : '';\r\n if (query.match(/^\\?pagination\\[page\\]=(\\d+)$/) && query !== '?pagination[page]=1') {\r\n canonical = `${canonical}${query}`;\r\n // title = `${title} - ${query.replace('?pagination[page]=','')}`;\r\n }\r\n const url = `${canonical}${query}`;\r\n const alternates = useMemo(() => {\r\n const alternates: IAlternate[] = [];\r\n (page.alternates || []).forEach((alternate: IRoute) => {\r\n const market = layout.markets.find(x => x.id === alternate.market);\r\n if (market) {\r\n if (market.countries && market.countries.length > 0) {\r\n market.countries.forEach((country: any) => {\r\n // country: string | { alpha2Code: string };\r\n const alpha2Code = typeof country === 'string' ? country : country.alpha2Code;\r\n alternates.push({\r\n id: `${alternate.market}-${alternate.locale}-${alpha2Code}`,\r\n href: resolveHref(alternate.id),\r\n hrefLang: `${alternate.locale}-${alpha2Code}`,\r\n });\r\n });\r\n } else {\r\n alternates.push({\r\n id: `${alternate.market}-${alternate.locale}`,\r\n href: resolveHref(alternate.id),\r\n hrefLang: alternate.locale,\r\n });\r\n }\r\n }\r\n });\r\n return alternates;\r\n }, [layout, page]);\r\n const xDefault = useMemo(() => {\r\n const xDefaultMarket = layout.markets.find(x => x.isDefault)?.id || defaultMarket;\r\n const xDefaultLocale = layout.locales.find(x => x.isDefault)?.id || defaultLocale;\r\n const alternate = page.alternates.find(x => x.market === xDefaultMarket && x.locale === xDefaultLocale);\r\n if (alternate) {\r\n return {\r\n id: `${alternate.market}-${alternate.locale}`,\r\n href: resolveHref(alternate.id),\r\n hrefLang: alternate.locale,\r\n };\r\n }\r\n return undefined;\r\n }, [layout, page]);\r\n const meta: IMeta = {\r\n title: title,\r\n description: description,\r\n image: image,\r\n keywords: page.meta?.keywords,\r\n robots: page.meta?.robots,\r\n slug: page.href,\r\n url,\r\n canonical,\r\n alternates,\r\n xDefault,\r\n };\r\n const contactPoint: ContactPoint = {\r\n '@type': 'ContactPoint',\r\n telephone: brand.telephone,\r\n email: brand.email,\r\n contactType: 'customer service',\r\n areaServed: layout.locales.map(x => x.id),\r\n availableLanguage: layout.locales.map(x => x.id),\r\n };\r\n const postalAddress: PostalAddress = {\r\n '@type': 'PostalAddress',\r\n streetAddress: brand.address,\r\n addressLocality: brand.city,\r\n postalCode: brand.zipCode,\r\n addressRegion: brand.provinceCode,\r\n addressCountry: brand.countryCode,\r\n };\r\n const organization: Organization = {\r\n '@type': 'Organization',\r\n name: brand.businessName,\r\n logo: {\r\n '@type': 'ImageObject',\r\n url: brand.logo,\r\n },\r\n url: brand.url,\r\n /*\r\n description,\r\n founder,\r\n foundingDate,\r\n numberOfEmployees,\r\n */\r\n /*\r\n foundingDate: '2020-01-01',\r\n numberOfEmployees: {\r\n '@type': 'QuantitativeValue',\r\n value: 150,\r\n },\r\n */\r\n };\r\n const hasContact = Boolean(brand.email || brand.telephone);\r\n if (hasContact) {\r\n organization.contactPoint = contactPoint;\r\n }\r\n const hasAddress = Boolean(brand.address || brand.city || brand.zipCode || brand.provinceCode || brand.countryCode);\r\n if (hasAddress) {\r\n organization.address = postalAddress;\r\n }\r\n if (brand.social) {\r\n organization.sameAs = Object.values(brand.social);\r\n }\r\n const structuredData: StructuredDataType = metaData.structuredData || {\r\n '@type': 'WebPage',\r\n name: title,\r\n url: url,\r\n description: description,\r\n publisher: organization,\r\n };\r\n const openGraph: OpenGraphType = metaData.openGraph || {\r\n type: 'website',\r\n title: title,\r\n description: description,\r\n url: url,\r\n siteName: brand.name,\r\n image: image,\r\n locale: layout.locale,\r\n };\r\n const twitterCard: TwitterCardType | undefined = metaData.twitterCard || (\r\n brand.twitterName ? {\r\n card: 'summary_large_image',\r\n title: title,\r\n description: description,\r\n image: image,\r\n imageAlt: brand.businessName,\r\n site: brand.twitterName,\r\n creator: brand.twitterName,\r\n } : undefined\r\n );\r\n const value: IMetaData = {\r\n layout,\r\n page,\r\n brand,\r\n contactPoint,\r\n meta,\r\n openGraph,\r\n organization,\r\n postalAddress,\r\n structuredData,\r\n twitterCard,\r\n };\r\n return (\r\n <MetaDataContext.Provider value={value}>\r\n {children}\r\n </MetaDataContext.Provider>\r\n );\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metadata.js","names":["brand: IBrand","htmlToText","alternates: IAlternate[]","alternate: IRoute","country: any","alternates","meta: IMeta","contactPoint: ContactPoint","postalAddress: PostalAddress","organization: Organization","structuredData: StructuredDataType","openGraph: OpenGraphType","twitterCard: TwitterCardType | undefined","value: IMetaData"],"sources":["../../src/client/metadata.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { defaultLocale, defaultMarket, IMedia, IRoute } from '@websolutespa/bom-core';\r\nimport { convert as htmlToText } from 'html-to-text';\r\nimport { useRouter } from 'next/compat/router';\r\nimport { createContext, ReactNode, useMemo } from 'react';\r\nimport { ContactPoint, Organization, PostalAddress } from 'schema-dts';\r\nimport { IAlternate, IBrand, IMeta, IMetaData } from '../lib/meta-data';\r\nimport { OpenGraphType } from '../lib/open-graph';\r\nimport { StructuredDataType } from '../lib/structured-data';\r\nimport { TwitterCardType } from '../lib/twitter-card';\r\nimport { getPublicUrl, resolveHref } from '../lib/utils';\r\nimport { useLayout } from './useLayout';\r\nimport { usePage } from './usePage';\r\n\r\nexport type IMetaDataOptions = {\r\n brand: {\r\n name: string;\r\n logo: string;\r\n businessName?: string;\r\n appName?: string;\r\n url?: string;\r\n email?: string;\r\n telephone?: string;\r\n zipCode?: string;\r\n address?: string;\r\n city?: string;\r\n provinceCode?: string;\r\n countryName?: string;\r\n countryCode?: string;\r\n twitterName?: string;\r\n social?: Record<string, string>;\r\n },\r\n structuredData?: StructuredDataType;\r\n openGraph?: OpenGraphType;\r\n twitterCard?: TwitterCardType;\r\n};\r\n\r\nexport type IMetaDataContext = IMetaData;\r\n\r\nexport const MetaDataContext = createContext<IMetaDataContext | undefined>(undefined);\r\n\r\nexport function MetaDataProvider({\r\n metaData,\r\n children,\r\n}: {\r\n metaData: IMetaDataOptions,\r\n children?: ReactNode,\r\n}) {\r\n const router = useRouter();\r\n const layout = useLayout();\r\n const page = usePage();\r\n const brand: IBrand = {\r\n ...metaData.brand,\r\n logo: resolveHref(metaData.brand.logo),\r\n url: getPublicUrl(), // layout.topLevelHrefs.homepage,\r\n businessName: metaData.brand.businessName || metaData.brand.name,\r\n appName: metaData.brand.appName || metaData.brand.name,\r\n };\r\n const title = htmlToText(page.meta?.title || page.title || '');\r\n const description = htmlToText(page.meta?.description || page.abstract || '');\r\n const media = ((page.meta as { image: IMedia } | undefined)?.image || page.media);\r\n const image = media ? resolveHref(media.src || media.url) : brand.logo;\r\n let canonical = resolveHref(page.href);\r\n const asPath = router?.asPath || '';\r\n const queryIndex = asPath.indexOf('?');\r\n const query = queryIndex !== -1 ? asPath.substring(queryIndex) : '';\r\n if (query.match(/^\\?pagination\\[page\\]=(\\d+)$/) && query !== '?pagination[page]=1') {\r\n canonical = `${canonical}${query}`;\r\n // title = `${title} - ${query.replace('?pagination[page]=','')}`;\r\n }\r\n const url = `${canonical}${query}`;\r\n const alternates = useMemo(() => {\r\n const alternates: IAlternate[] = [];\r\n (page.alternates || []).forEach((alternate: IRoute) => {\r\n const market = layout.markets.find(x => x.id === alternate.market);\r\n if (market) {\r\n if (market.countries && market.countries.length > 0) {\r\n market.countries.forEach((country: any) => {\r\n // country: string | { alpha2Code: string };\r\n const alpha2Code = typeof country === 'string' ? country : country.alpha2Code;\r\n alternates.push({\r\n id: `${alternate.market}-${alternate.locale}-${alpha2Code}`,\r\n href: resolveHref(alternate.id),\r\n hrefLang: `${alternate.locale}-${alpha2Code}`,\r\n });\r\n });\r\n } else {\r\n alternates.push({\r\n id: `${alternate.market}-${alternate.locale}`,\r\n href: resolveHref(alternate.id),\r\n hrefLang: alternate.locale,\r\n });\r\n }\r\n }\r\n });\r\n return alternates;\r\n }, [layout, page]);\r\n const xDefault = useMemo(() => {\r\n const xDefaultMarket = layout.markets.find(x => x.isDefault)?.id || defaultMarket;\r\n const xDefaultLocale = layout.locales.find(x => x.isDefault)?.id || defaultLocale;\r\n const alternate = page.alternates.find(x => x.market === xDefaultMarket && x.locale === xDefaultLocale);\r\n if (alternate) {\r\n return {\r\n id: `${alternate.market}-${alternate.locale}`,\r\n href: resolveHref(alternate.id),\r\n hrefLang: alternate.locale,\r\n };\r\n }\r\n return undefined;\r\n }, [layout, page]);\r\n const meta: IMeta = {\r\n title: title,\r\n description: description,\r\n image: image,\r\n keywords: page.meta?.keywords,\r\n robots: page.meta?.robots,\r\n slug: page.href,\r\n url,\r\n canonical,\r\n alternates,\r\n xDefault,\r\n };\r\n const contactPoint: ContactPoint = {\r\n '@type': 'ContactPoint',\r\n telephone: brand.telephone,\r\n email: brand.email,\r\n contactType: 'customer service',\r\n areaServed: layout.locales.map(x => x.id),\r\n availableLanguage: layout.locales.map(x => x.id),\r\n };\r\n const postalAddress: PostalAddress = {\r\n '@type': 'PostalAddress',\r\n streetAddress: brand.address,\r\n addressLocality: brand.city,\r\n postalCode: brand.zipCode,\r\n addressRegion: brand.provinceCode,\r\n addressCountry: brand.countryCode,\r\n };\r\n const organization: Organization = {\r\n '@type': 'Organization',\r\n name: brand.businessName,\r\n logo: {\r\n '@type': 'ImageObject',\r\n url: brand.logo,\r\n },\r\n url: brand.url,\r\n /*\r\n description,\r\n founder,\r\n foundingDate,\r\n numberOfEmployees,\r\n */\r\n /*\r\n foundingDate: '2020-01-01',\r\n numberOfEmployees: {\r\n '@type': 'QuantitativeValue',\r\n value: 150,\r\n },\r\n */\r\n };\r\n const hasContact = Boolean(brand.email || brand.telephone);\r\n if (hasContact) {\r\n organization.contactPoint = contactPoint;\r\n }\r\n const hasAddress = Boolean(brand.address || brand.city || brand.zipCode || brand.provinceCode || brand.countryCode);\r\n if (hasAddress) {\r\n organization.address = postalAddress;\r\n }\r\n if (brand.social) {\r\n organization.sameAs = Object.values(brand.social);\r\n }\r\n const structuredData: StructuredDataType = metaData.structuredData || {\r\n '@type': 'WebPage',\r\n name: title,\r\n url: url,\r\n description: description,\r\n publisher: organization,\r\n };\r\n const openGraph: OpenGraphType = metaData.openGraph || {\r\n type: 'website',\r\n title: title,\r\n description: description,\r\n url: url,\r\n siteName: brand.name,\r\n image: image,\r\n locale: layout.locale,\r\n };\r\n const twitterCard: TwitterCardType | undefined = metaData.twitterCard || (\r\n brand.twitterName ? {\r\n card: 'summary_large_image',\r\n title: title,\r\n description: description,\r\n image: image,\r\n imageAlt: brand.businessName,\r\n site: brand.twitterName,\r\n creator: brand.twitterName,\r\n } : undefined\r\n );\r\n const value: IMetaData = {\r\n layout,\r\n page,\r\n brand,\r\n contactPoint,\r\n meta,\r\n openGraph,\r\n organization,\r\n postalAddress,\r\n structuredData,\r\n twitterCard,\r\n };\r\n return (\r\n <MetaDataContext.Provider value={value}>\r\n {children}\r\n </MetaDataContext.Provider>\r\n );\r\n}\r\n"],"mappings":"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"}
|