@websolutespa/bom-mixer-store 1.7.9 → 1.8.0

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 CHANGED
@@ -1,5 +1,16 @@
1
1
  # @websolutespa/bom-mixer-store
2
2
 
3
+ ## 1.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - f8a1d97: Modified: extracted all website sample components & features
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [f8a1d97]
12
+ - @websolutespa/bom-core@1.8.0
13
+
3
14
  ## 1.7.9
4
15
 
5
16
  ### Patch Changes
package/dist/index.js CHANGED
@@ -476,7 +476,9 @@ function decorateMenuRoute_(item) {
476
476
  return decoratedItem;
477
477
  }
478
478
  async function decorateMenuPage_(item, routes, store, params = {}) {
479
- const id = (0, import_bom_core3.isEquatable)(item.page.value) ? item.page.value : item.page.value.id;
479
+ const values = Array.isArray(item.page.value) ? item.page.value : [item.page.value];
480
+ const value = values[0];
481
+ const id = (0, import_bom_core3.isEquatable)(value) ? value : value.id;
480
482
  const route = routes.find(
481
483
  (x) => x.schema === item.page.relationTo && x.page === id
482
484
  );
@@ -562,17 +564,12 @@ function decorateNav__(item, routes) {
562
564
  }
563
565
 
564
566
  // src/decorators/optimize.ts
565
- var import_bom_core5 = require("@websolutespa/bom-core");
566
567
  async function optimizeOne_(item) {
567
568
  const validEntries = Object.entries(item).filter(([key, value]) => {
568
569
  switch (key) {
569
570
  case "components":
570
571
  case "meta":
571
572
  return false;
572
- default:
573
- if ((0, import_bom_core5.isUnresolvedRelation)(value) || Array.isArray(value) && value.reduce((p, c) => p && (0, import_bom_core5.isUnresolvedRelation)(c), true)) {
574
- return false;
575
- }
576
573
  }
577
574
  return true;
578
575
  });
@@ -588,7 +585,7 @@ async function optimizeMany_(items) {
588
585
  }
589
586
 
590
587
  // src/decorators/relation.ts
591
- var import_bom_core6 = require("@websolutespa/bom-core");
588
+ var import_bom_core5 = require("@websolutespa/bom-core");
592
589
  var SERVICE_DEFAULT_DEPTH = 3;
593
590
  async function decorateRelation_(store, item, params = {}) {
594
591
  const depth = params.depth != null ? params.depth : SERVICE_DEFAULT_DEPTH;
@@ -605,7 +602,7 @@ async function decorateRelations_(store, items, params = {}) {
605
602
  return items;
606
603
  }
607
604
  async function collectRelations_(context, item, relations = []) {
608
- if ((0, import_bom_core6.isUnresolvedRelation)(item)) {
605
+ if ((0, import_bom_core5.isUnresolvedRelation)(item)) {
609
606
  const index = relations.findIndex(
610
607
  (x) => x.relationTo === item.relationTo && x.value === item.value
611
608
  );
@@ -634,13 +631,13 @@ async function collectRelations_(context, item, relations = []) {
634
631
  } else {
635
632
  return relations[index].resolvedValue;
636
633
  }
637
- } else if ((0, import_bom_core6.isArray)(item)) {
634
+ } else if ((0, import_bom_core5.isArray)(item)) {
638
635
  const items = [];
639
636
  for (let i = 0; i < item.length; i++) {
640
637
  items[i] = await collectRelations_(context, item[i], relations);
641
638
  }
642
639
  return items;
643
- } else if ((0, import_bom_core6.isObject)(item)) {
640
+ } else if ((0, import_bom_core5.isObject)(item)) {
644
641
  for (const [key, value] of Object.entries(item)) {
645
642
  item[key] = await collectRelations_(context, value, relations);
646
643
  }
@@ -659,12 +656,12 @@ async function decorateSchemas_(store, items, schema) {
659
656
  }
660
657
 
661
658
  // src/local/local.api.ts
662
- var import_bom_core7 = require("@websolutespa/bom-core");
659
+ var import_bom_core6 = require("@websolutespa/bom-core");
663
660
  var API_URL = process.env.NEXT_PUBLIC_URL === "https://" ? process.env.NEXT_PUBLIC_MOCK_FALLBACK_URL : process.env.NEXT_PUBLIC_URL;
664
661
  var API_BASE = process.env.NEXT_PUBLIC_API || "/api";
665
662
  function getLocalApiUrl(pathname) {
666
- let url = `${import_bom_core7.isBrowser ? window.location.origin : API_URL}${API_BASE}${pathname}`;
667
- url = import_bom_core7.isBrowser ? url : url.replace("://localhost", "://127.0.0.1");
663
+ let url = `${import_bom_core6.isBrowser ? window.location.origin : API_URL}${API_BASE}${pathname}`;
664
+ url = import_bom_core6.isBrowser ? url : url.replace("://localhost", "://127.0.0.1");
668
665
  return url;
669
666
  }
670
667
  async function localApiFetch(pathname, options = {}, serviceOptions) {
@@ -673,9 +670,9 @@ async function localApiFetch(pathname, options = {}, serviceOptions) {
673
670
  url.searchParams.append("locale", serviceOptions.locale);
674
671
  url.searchParams.append("market", serviceOptions.market);
675
672
  }
676
- const apiOptions = (0, import_bom_core7.merge)({ ...getLocalApiRequestOptions() }, options);
673
+ const apiOptions = (0, import_bom_core6.merge)({ ...getLocalApiRequestOptions() }, options);
677
674
  console.log("localApiFetch", apiOptions.method, url.href);
678
- const apiResponse = await (0, import_bom_core7.httpFetch)(url.href, apiOptions);
675
+ const apiResponse = await (0, import_bom_core6.httpFetch)(url.href, apiOptions);
679
676
  return apiResponse;
680
677
  }
681
678
  async function localApiGet(url, options = {}, serviceOptions) {
@@ -714,8 +711,8 @@ function isApiRequest(request) {
714
711
  }
715
712
 
716
713
  // src/mock/mock.service.ts
717
- var import_bom_core8 = require("@websolutespa/bom-core");
718
- var MockService = class extends import_bom_core8.JsonService {
714
+ var import_bom_core7 = require("@websolutespa/bom-core");
715
+ var MockService = class extends import_bom_core7.JsonService {
719
716
  constructor(items, store) {
720
717
  super(items);
721
718
  this.store = store;
@@ -795,24 +792,29 @@ var MockPageService = class extends MockService {
795
792
  decoratedItems = await decorateCategories_(store, decoratedItems, params);
796
793
  decoratedItems = await decorateLocalizables_(decoratedItems, params);
797
794
  decoratedItems = await decorateHrefs_(store, decoratedItems, params);
795
+ decoratedItems = await decorateRelations_(store, decoratedItems, {
796
+ market: params.market,
797
+ locale: params.locale,
798
+ depth: params.depth
799
+ });
798
800
  return decoratedItems;
799
801
  }
800
802
  };
801
803
 
802
804
  // src/mock/mock.api.ts
803
- var import_bom_core9 = require("@websolutespa/bom-core");
805
+ var import_bom_core8 = require("@websolutespa/bom-core");
804
806
  var API_URL2 = process.env.NEXT_PUBLIC_URL;
805
807
  var API_BASE3 = process.env.NEXT_PUBLIC_API || "/api";
806
808
  function getMockApiUrl(pathname) {
807
809
  let url = `${API_URL2}${API_BASE3}/_mock${pathname}`;
808
- url = import_bom_core9.isBrowser ? url : url.replace("://localhost", "://127.0.0.1");
810
+ url = import_bom_core8.isBrowser ? url : url.replace("://localhost", "://127.0.0.1");
809
811
  return url;
810
812
  }
811
813
  async function mockApiFetch(pathname, options = {}) {
812
814
  const url = getMockApiUrl(pathname);
813
- const apiOptions = (0, import_bom_core9.merge)({ ...getLocalApiRequestOptions() }, options);
815
+ const apiOptions = (0, import_bom_core8.merge)({ ...getLocalApiRequestOptions() }, options);
814
816
  console.log("mockApiFetch", apiOptions.method, url);
815
- const apiResponse = await (0, import_bom_core9.httpFetch)(url, apiOptions);
817
+ const apiResponse = await (0, import_bom_core8.httpFetch)(url, apiOptions);
816
818
  return apiResponse;
817
819
  }
818
820
  async function mockApiGet(url, options = {}) {
@@ -832,7 +834,7 @@ async function mockApiDelete(url, options = {}) {
832
834
  }
833
835
 
834
836
  // src/store/store.handler.ts
835
- var import_bom_core15 = require("@websolutespa/bom-core");
837
+ var import_bom_core14 = require("@websolutespa/bom-core");
836
838
 
837
839
  // src/static/static.ts
838
840
  var staticCollections = [{
@@ -905,6 +907,28 @@ var staticCollections = [{
905
907
  type: "text"
906
908
  }
907
909
  ]
910
+ }, {
911
+ src: "https://actarian.github.io/cms-i18n-react/api/language.json",
912
+ slug: "i18n_country_zone",
913
+ fields: [
914
+ {
915
+ name: "id",
916
+ type: "text"
917
+ },
918
+ {
919
+ name: "name",
920
+ type: "text",
921
+ localized: true
922
+ },
923
+ {
924
+ name: "englishName",
925
+ type: "text"
926
+ },
927
+ {
928
+ name: "nativeName",
929
+ type: "text"
930
+ }
931
+ ]
908
932
  }, {
909
933
  src: "https://actarian.github.io/cms-i18n-react/api/municipality.json",
910
934
  slug: "i18n_municipality",
@@ -1107,7 +1131,7 @@ var KNOWN_COLLECTIONS = [
1107
1131
  var COLLECTIONS = [...ENV_COLLECTIONS, ...KNOWN_COLLECTIONS];
1108
1132
 
1109
1133
  // src/mock/mock.store.ts
1110
- var import_bom_core11 = require("@websolutespa/bom-core");
1134
+ var import_bom_core10 = require("@websolutespa/bom-core");
1111
1135
 
1112
1136
  // src/fs/fs.service.ts
1113
1137
  var fs = __toESM(require("fs"));
@@ -1135,8 +1159,8 @@ async function fsReadJson(pathname) {
1135
1159
  }
1136
1160
 
1137
1161
  // src/static/static.service.ts
1138
- var import_bom_core10 = require("@websolutespa/bom-core");
1139
- var StaticService = class extends import_bom_core10.JsonService {
1162
+ var import_bom_core9 = require("@websolutespa/bom-core");
1163
+ var StaticService = class extends import_bom_core9.JsonService {
1140
1164
  constructor(config, store) {
1141
1165
  super([]);
1142
1166
  this.loaded = false;
@@ -1164,7 +1188,7 @@ var StaticService = class extends import_bom_core10.JsonService {
1164
1188
  const config = this.config;
1165
1189
  const src = config.src;
1166
1190
  if (typeof src === "string") {
1167
- const response = await (0, import_bom_core10.httpGet)(src, {});
1191
+ const response = await (0, import_bom_core9.httpGet)(src, {});
1168
1192
  items = response.items;
1169
1193
  } else if (typeof src === "function") {
1170
1194
  if (src instanceof Promise) {
@@ -1280,7 +1304,7 @@ function getMockStoreFromData_(data) {
1280
1304
  return store;
1281
1305
  }
1282
1306
  async function getStoreData_() {
1283
- if (import_bom_core11.isDevelopment) {
1307
+ if (import_bom_core10.isDevelopment) {
1284
1308
  const path = require("path");
1285
1309
  const pathname = path.join(process.cwd(), ".mixer", "store.json");
1286
1310
  return await fsReadJson(pathname) || {};
@@ -1296,17 +1320,17 @@ async function getMockStore_() {
1296
1320
  }
1297
1321
  async function getMockStore() {
1298
1322
  return fromCache(async () => {
1299
- if (!import_bom_core11.isDevelopment) {
1323
+ if (!import_bom_core10.isDevelopment) {
1300
1324
  console.warn("getMockStore");
1301
1325
  }
1302
1326
  const store = await getMockStore_();
1303
1327
  return store;
1304
- }, import_bom_core11.isDevelopment ? void 0 : "STORE_MOCK_");
1328
+ }, import_bom_core10.isDevelopment ? void 0 : "STORE_MOCK_");
1305
1329
  }
1306
1330
 
1307
1331
  // src/cached/cached.service.ts
1308
- var import_bom_core12 = require("@websolutespa/bom-core");
1309
- var CachedService = class extends import_bom_core12.JsonService {
1332
+ var import_bom_core11 = require("@websolutespa/bom-core");
1333
+ var CachedService = class extends import_bom_core11.JsonService {
1310
1334
  constructor(service, options = {}) {
1311
1335
  super([]);
1312
1336
  this.cache_ = /* @__PURE__ */ new Map();
@@ -1345,7 +1369,7 @@ var CachedService = class extends import_bom_core12.JsonService {
1345
1369
  });
1346
1370
  }
1347
1371
  async findOne(id, params = {}) {
1348
- const serializedParams = (0, import_bom_core12.qsSerialize)(params);
1372
+ const serializedParams = (0, import_bom_core11.qsSerialize)(params);
1349
1373
  const key = `findOne[${id}]?${serializedParams}`;
1350
1374
  return await this.fromCache_(async () => {
1351
1375
  return await this.service_.findOne(id, params);
@@ -1354,7 +1378,7 @@ var CachedService = class extends import_bom_core12.JsonService {
1354
1378
  async findMany(params = {}) {
1355
1379
  if (storeStrategy === "decoratedApi" /* DecoratedApi */) {
1356
1380
  const { market, locale, ...otherParams } = params;
1357
- const serializedParams = (0, import_bom_core12.qsSerialize)({ market, locale });
1381
+ const serializedParams = (0, import_bom_core11.qsSerialize)({ market, locale });
1358
1382
  const key = `findMany?${serializedParams}`;
1359
1383
  let items = await this.fromCache_(async () => {
1360
1384
  return await this.service_.findMany({ market, locale });
@@ -1367,7 +1391,7 @@ var CachedService = class extends import_bom_core12.JsonService {
1367
1391
  }
1368
1392
  return items;
1369
1393
  } else {
1370
- const serializedParams = (0, import_bom_core12.qsSerialize)(params);
1394
+ const serializedParams = (0, import_bom_core11.qsSerialize)(params);
1371
1395
  const key = `findMany?${serializedParams}`;
1372
1396
  return await this.fromCache_(async () => {
1373
1397
  return await this.service_.findMany(params);
@@ -1375,7 +1399,7 @@ var CachedService = class extends import_bom_core12.JsonService {
1375
1399
  }
1376
1400
  }
1377
1401
  async findPaged(params = {}) {
1378
- const serializedParams = (0, import_bom_core12.qsSerialize)(params);
1402
+ const serializedParams = (0, import_bom_core11.qsSerialize)(params);
1379
1403
  const key = `findPaged?${serializedParams}`;
1380
1404
  return await this.fromCache_(async () => {
1381
1405
  return await this.service_.findPaged(params);
@@ -1393,22 +1417,22 @@ var CachedService = class extends import_bom_core12.JsonService {
1393
1417
  };
1394
1418
 
1395
1419
  // src/remote/remote.service.ts
1396
- var import_bom_core14 = require("@websolutespa/bom-core");
1420
+ var import_bom_core13 = require("@websolutespa/bom-core");
1397
1421
 
1398
1422
  // src/remote/remote.api.ts
1399
- var import_bom_core13 = require("@websolutespa/bom-core");
1423
+ var import_bom_core12 = require("@websolutespa/bom-core");
1400
1424
  var API_URL3 = process.env.STORE_URL;
1401
1425
  var API_BASE4 = process.env.STORE_API || "/api";
1402
1426
  function getRemoteApiUrl(pathname) {
1403
1427
  let url = `${API_URL3}${API_BASE4}${pathname}`;
1404
- url = import_bom_core13.isBrowser ? url : url.replace("://localhost", "://127.0.0.1");
1428
+ url = import_bom_core12.isBrowser ? url : url.replace("://localhost", "://127.0.0.1");
1405
1429
  return url;
1406
1430
  }
1407
1431
  async function remoteApiFetch(pathname, options = {}) {
1408
1432
  const url = getRemoteApiUrl(pathname);
1409
- const apiOptions = (0, import_bom_core13.merge)({ ...getRemoteApiRequestOptions() }, options);
1433
+ const apiOptions = (0, import_bom_core12.merge)({ ...getRemoteApiRequestOptions() }, options);
1410
1434
  console.log("remoteApiFetch", apiOptions.method, url);
1411
- const apiResponse = await (0, import_bom_core13.httpFetch)(url, apiOptions);
1435
+ const apiResponse = await (0, import_bom_core12.httpFetch)(url, apiOptions);
1412
1436
  return apiResponse;
1413
1437
  }
1414
1438
  async function remoteApiGet(url, options = {}) {
@@ -1445,7 +1469,7 @@ var RemoteService = class {
1445
1469
  async findOne(id, params = {}) {
1446
1470
  params.richText = String(params.richText) === "true" ? true : false;
1447
1471
  params.draft = RemoteServiceStrategy.draft;
1448
- const query = (0, import_bom_core14.qsSerialize)(params);
1472
+ const query = (0, import_bom_core13.qsSerialize)(params);
1449
1473
  const search = query ? `?${query}` : "";
1450
1474
  const url = `/${this.key}/${encodeURIComponent(id)}${search}`;
1451
1475
  const item = await remoteApiGet(url);
@@ -1458,7 +1482,7 @@ var RemoteService = class {
1458
1482
  params.richText = String(params.richText) === "true" ? true : false;
1459
1483
  params.draft = RemoteServiceStrategy.draft;
1460
1484
  params.pagination = false;
1461
- const query = (0, import_bom_core14.qsSerialize)(params);
1485
+ const query = (0, import_bom_core13.qsSerialize)(params);
1462
1486
  const search = query ? `?${query}` : "";
1463
1487
  const url = `/${this.key}${search}`;
1464
1488
  const response = await remoteApiGet(url);
@@ -1469,7 +1493,7 @@ var RemoteService = class {
1469
1493
  params.richText = String(params.richText) === "true" ? true : false;
1470
1494
  params.draft = RemoteServiceStrategy.draft;
1471
1495
  params.pagination = true;
1472
- const query = (0, import_bom_core14.qsSerialize)(params);
1496
+ const query = (0, import_bom_core13.qsSerialize)(params);
1473
1497
  const search = query ? `?${query}` : "";
1474
1498
  const url = `/${this.key}${search}`;
1475
1499
  const response = await remoteApiGet(url);
@@ -1498,7 +1522,7 @@ var RemoteService = class {
1498
1522
  }
1499
1523
  }
1500
1524
  };
1501
- const query = (0, import_bom_core14.qsSerialize)(params);
1525
+ const query = (0, import_bom_core13.qsSerialize)(params);
1502
1526
  const search = query ? `?${query}` : "";
1503
1527
  const url = `/${this.key}${search}`;
1504
1528
  const item = await remoteApiDelete(url);
@@ -1678,7 +1702,7 @@ function collectionGet(storePromise) {
1678
1702
  const collection = collections[0];
1679
1703
  const id = collections[1];
1680
1704
  const qs = Object.entries(query).map((kv) => kv.join("=")).join("&");
1681
- const params = (0, import_bom_core15.qsDeserialize)(qs);
1705
+ const params = (0, import_bom_core14.qsDeserialize)(qs);
1682
1706
  if (!COLLECTIONS.includes(collection)) {
1683
1707
  console.error("storeHandler.collectionGet", "method not allowed", collection);
1684
1708
  return response.status(405).send("method not allowed");
@@ -1690,7 +1714,7 @@ function collectionGet(storePromise) {
1690
1714
  return response.status(405).send("method not allowed");
1691
1715
  }
1692
1716
  if (id) {
1693
- const item = await service.findOne((0, import_bom_core15.asEquatable)(id), params);
1717
+ const item = await service.findOne((0, import_bom_core14.asEquatable)(id), params);
1694
1718
  if (item) {
1695
1719
  return response.status(200).json(item);
1696
1720
  } else {
@@ -1810,8 +1834,8 @@ function storeIndexHandler() {
1810
1834
  return apiHandler({
1811
1835
  get: async (request, response) => {
1812
1836
  try {
1813
- const market = import_bom_core15.defaultMarket;
1814
- const locale = import_bom_core15.defaultLocale;
1837
+ const market = import_bom_core14.defaultMarket;
1838
+ const locale = import_bom_core14.defaultLocale;
1815
1839
  if (!Array.isArray(COLLECTIONS) || COLLECTIONS?.length === 0) {
1816
1840
  console.error("apiHome.collectionGet", "collections not found", COLLECTIONS);
1817
1841
  return response.status(405).send("method not allowed");
@@ -2078,10 +2102,38 @@ async function storeApiDelete(url, options = {}) {
2078
2102
  }
2079
2103
 
2080
2104
  // src/vars/vars.handler.ts
2081
- var import_bom_core17 = require("@websolutespa/bom-core");
2105
+ var import_bom_core16 = require("@websolutespa/bom-core");
2106
+
2107
+ // ../models/src/label/label.service.ts
2108
+ async function getLabels(params = {}) {
2109
+ const store = await getStore();
2110
+ const items = await store.label.findMany(params);
2111
+ return items;
2112
+ }
2113
+
2114
+ // ../models/src/locale/locale.service.ts
2115
+ async function getLocales(params = {}) {
2116
+ const store = await getStore();
2117
+ const items = await store.locale.findMany(params);
2118
+ return items;
2119
+ }
2120
+
2121
+ // ../models/src/market/market.service.ts
2122
+ async function getMarkets(params = {}) {
2123
+ const store = await getStore();
2124
+ const items = await store.market.findMany(params);
2125
+ return items;
2126
+ }
2127
+
2128
+ // ../models/src/menu/menu.service.ts
2129
+ async function getMenus(params = {}) {
2130
+ const store = await getStore();
2131
+ const items = await store.menu.findMany(params);
2132
+ return items;
2133
+ }
2082
2134
 
2083
2135
  // ../models/src/route/route.service.ts
2084
- var import_bom_core16 = require("@websolutespa/bom-core");
2136
+ var import_bom_core15 = require("@websolutespa/bom-core");
2085
2137
  async function getRouteLinkTree(market, locale) {
2086
2138
  const store = await getStore();
2087
2139
  const routes = await store.route.findMany({
@@ -2095,7 +2147,7 @@ async function getRouteLinkTree(market, locale) {
2095
2147
  }
2096
2148
  });
2097
2149
  const categories = await store.category.findMany({ market, locale });
2098
- const rootCategory = (0, import_bom_core16.getRootCategory)(categories);
2150
+ const rootCategory = (0, import_bom_core15.getRootCategory)(categories);
2099
2151
  if (rootCategory) {
2100
2152
  const root = categoryToRouteLink(routes, categories, rootCategory, locale);
2101
2153
  return root;
@@ -2103,13 +2155,13 @@ async function getRouteLinkTree(market, locale) {
2103
2155
  return void 0;
2104
2156
  }
2105
2157
  function categoryToRouteLink(routes, categories, category, locale) {
2106
- const route = (0, import_bom_core16.findRouteOfCategory)(routes, category.id);
2158
+ const route = (0, import_bom_core15.findRouteOfCategory)(routes, category.id);
2107
2159
  if (!route) {
2108
2160
  return void 0;
2109
2161
  }
2110
- const rootCategory = (0, import_bom_core16.getRootCategory)(categories);
2162
+ const rootCategory = (0, import_bom_core15.getRootCategory)(categories);
2111
2163
  const childCategories = categories.filter((x) => {
2112
- const parentId = (0, import_bom_core16.asCategoryId)(x.category);
2164
+ const parentId = (0, import_bom_core15.asCategoryId)(x.category);
2113
2165
  return rootCategory && rootCategory.id === category.id ? x.id !== rootCategory.id && (parentId === category.id || !parentId) : parentId === category.id;
2114
2166
  });
2115
2167
  const routeLink = newRouteLink(category, route, locale);
@@ -2121,7 +2173,7 @@ function newRouteLink(category, route, locale) {
2121
2173
  const id = route?.page || category.id;
2122
2174
  const media = category.media || route?.media;
2123
2175
  const schema = route?.schema || category?.schema || "unknown";
2124
- const title = (0, import_bom_core16.localize)(category.title || route?.title || "untitled", locale);
2176
+ const title = (0, import_bom_core15.localize)(category.title || route?.title || "untitled", locale);
2125
2177
  const routeLink = {
2126
2178
  category: category.id,
2127
2179
  href,
@@ -2134,34 +2186,6 @@ function newRouteLink(category, route, locale) {
2134
2186
  return routeLink;
2135
2187
  }
2136
2188
 
2137
- // ../models/src/label/label.service.ts
2138
- async function getLabels(params = {}) {
2139
- const store = await getStore();
2140
- const items = await store.label.findMany(params);
2141
- return items;
2142
- }
2143
-
2144
- // ../models/src/locale/locale.service.ts
2145
- async function getLocales(params = {}) {
2146
- const store = await getStore();
2147
- const items = await store.locale.findMany(params);
2148
- return items;
2149
- }
2150
-
2151
- // ../models/src/market/market.service.ts
2152
- async function getMarkets(params = {}) {
2153
- const store = await getStore();
2154
- const items = await store.market.findMany(params);
2155
- return items;
2156
- }
2157
-
2158
- // ../models/src/menu/menu.service.ts
2159
- async function getMenus(params = {}) {
2160
- const store = await getStore();
2161
- const items = await store.menu.findMany(params);
2162
- return items;
2163
- }
2164
-
2165
2189
  // ../models/src/layout/layout.service.ts
2166
2190
  async function getLayout(market, locale) {
2167
2191
  const markets = await getMarkets({ locale });
@@ -2171,11 +2195,13 @@ async function getLayout(market, locale) {
2171
2195
  const firstLevelRoutes = tree?.items || [];
2172
2196
  const flatTopLevelRoutes = tree ? [tree, ...firstLevelRoutes] : [];
2173
2197
  const topLevelRoutes = flatTopLevelRoutes.reduce((object, routeLink) => {
2174
- object[routeLink.schema] = routeLink;
2198
+ if (!object[routeLink.schema] || routeLink.schema === routeLink.category) {
2199
+ object[routeLink.schema] = routeLink;
2200
+ }
2175
2201
  return object;
2176
2202
  }, {});
2177
2203
  const topLevelHrefs = flatTopLevelRoutes.reduce((object, routeLink) => {
2178
- if (routeLink.href) {
2204
+ if (routeLink.href && !object[routeLink.schema] || routeLink.schema === routeLink.category) {
2179
2205
  object[routeLink.schema] = routeLink.href;
2180
2206
  }
2181
2207
  return object;
@@ -2224,10 +2250,10 @@ function varsHandler() {
2224
2250
  const { locale = defaultLocale3, market = defaultMaket } = request.query || {};
2225
2251
  const layout = typeof locale === "string" && typeof market === "string" ? await getLayout(market, locale) : void 0;
2226
2252
  const info = {
2227
- production: import_bom_core17.isProduction,
2228
- development: import_bom_core17.isDevelopment,
2229
- origin: (0, import_bom_core17.getOrigin)(request.headers),
2230
- host: (0, import_bom_core17.getHost)(request.headers),
2253
+ production: import_bom_core16.isProduction,
2254
+ development: import_bom_core16.isDevelopment,
2255
+ origin: (0, import_bom_core16.getOrigin)(request.headers),
2256
+ host: (0, import_bom_core16.getHost)(request.headers),
2231
2257
  headers: { ...sortKeys(request.headers) },
2232
2258
  env: { ...getFilteredEnv(process.env) },
2233
2259
  layout: { ...sortKeys(layout) }
package/dist/index.mjs CHANGED
@@ -372,7 +372,9 @@ function decorateMenuRoute_(item) {
372
372
  return decoratedItem;
373
373
  }
374
374
  async function decorateMenuPage_(item, routes, store, params = {}) {
375
- const id = isEquatable(item.page.value) ? item.page.value : item.page.value.id;
375
+ const values = Array.isArray(item.page.value) ? item.page.value : [item.page.value];
376
+ const value = values[0];
377
+ const id = isEquatable(value) ? value : value.id;
376
378
  const route = routes.find(
377
379
  (x) => x.schema === item.page.relationTo && x.page === id
378
380
  );
@@ -458,17 +460,12 @@ function decorateNav__(item, routes) {
458
460
  }
459
461
 
460
462
  // src/decorators/optimize.ts
461
- import { isUnresolvedRelation } from "@websolutespa/bom-core";
462
463
  async function optimizeOne_(item) {
463
464
  const validEntries = Object.entries(item).filter(([key, value]) => {
464
465
  switch (key) {
465
466
  case "components":
466
467
  case "meta":
467
468
  return false;
468
- default:
469
- if (isUnresolvedRelation(value) || Array.isArray(value) && value.reduce((p, c) => p && isUnresolvedRelation(c), true)) {
470
- return false;
471
- }
472
469
  }
473
470
  return true;
474
471
  });
@@ -484,7 +481,7 @@ async function optimizeMany_(items) {
484
481
  }
485
482
 
486
483
  // src/decorators/relation.ts
487
- import { isArray as isArray2, isObject as isObject2, isUnresolvedRelation as isUnresolvedRelation2 } from "@websolutespa/bom-core";
484
+ import { isArray as isArray2, isObject as isObject2, isUnresolvedRelation } from "@websolutespa/bom-core";
488
485
  var SERVICE_DEFAULT_DEPTH = 3;
489
486
  async function decorateRelation_(store, item, params = {}) {
490
487
  const depth = params.depth != null ? params.depth : SERVICE_DEFAULT_DEPTH;
@@ -501,7 +498,7 @@ async function decorateRelations_(store, items, params = {}) {
501
498
  return items;
502
499
  }
503
500
  async function collectRelations_(context, item, relations = []) {
504
- if (isUnresolvedRelation2(item)) {
501
+ if (isUnresolvedRelation(item)) {
505
502
  const index = relations.findIndex(
506
503
  (x) => x.relationTo === item.relationTo && x.value === item.value
507
504
  );
@@ -691,6 +688,11 @@ var MockPageService = class extends MockService {
691
688
  decoratedItems = await decorateCategories_(store, decoratedItems, params);
692
689
  decoratedItems = await decorateLocalizables_(decoratedItems, params);
693
690
  decoratedItems = await decorateHrefs_(store, decoratedItems, params);
691
+ decoratedItems = await decorateRelations_(store, decoratedItems, {
692
+ market: params.market,
693
+ locale: params.locale,
694
+ depth: params.depth
695
+ });
694
696
  return decoratedItems;
695
697
  }
696
698
  };
@@ -801,6 +803,28 @@ var staticCollections = [{
801
803
  type: "text"
802
804
  }
803
805
  ]
806
+ }, {
807
+ src: "https://actarian.github.io/cms-i18n-react/api/language.json",
808
+ slug: "i18n_country_zone",
809
+ fields: [
810
+ {
811
+ name: "id",
812
+ type: "text"
813
+ },
814
+ {
815
+ name: "name",
816
+ type: "text",
817
+ localized: true
818
+ },
819
+ {
820
+ name: "englishName",
821
+ type: "text"
822
+ },
823
+ {
824
+ name: "nativeName",
825
+ type: "text"
826
+ }
827
+ ]
804
828
  }, {
805
829
  src: "https://actarian.github.io/cms-i18n-react/api/municipality.json",
806
830
  slug: "i18n_municipality",
@@ -1976,6 +2000,34 @@ async function storeApiDelete(url, options = {}) {
1976
2000
  // src/vars/vars.handler.ts
1977
2001
  import { getHost, getOrigin, isDevelopment as isDevelopment2, isProduction } from "@websolutespa/bom-core";
1978
2002
 
2003
+ // ../models/src/label/label.service.ts
2004
+ async function getLabels(params = {}) {
2005
+ const store = await getStore();
2006
+ const items = await store.label.findMany(params);
2007
+ return items;
2008
+ }
2009
+
2010
+ // ../models/src/locale/locale.service.ts
2011
+ async function getLocales(params = {}) {
2012
+ const store = await getStore();
2013
+ const items = await store.locale.findMany(params);
2014
+ return items;
2015
+ }
2016
+
2017
+ // ../models/src/market/market.service.ts
2018
+ async function getMarkets(params = {}) {
2019
+ const store = await getStore();
2020
+ const items = await store.market.findMany(params);
2021
+ return items;
2022
+ }
2023
+
2024
+ // ../models/src/menu/menu.service.ts
2025
+ async function getMenus(params = {}) {
2026
+ const store = await getStore();
2027
+ const items = await store.menu.findMany(params);
2028
+ return items;
2029
+ }
2030
+
1979
2031
  // ../models/src/route/route.service.ts
1980
2032
  import { asCategoryId as asCategoryId2, defaultLocale as defaultLocale2, defaultMarket as defaultMarket2, findRouteOfCategory as findRouteOfCategory3, getRootCategory, localize } from "@websolutespa/bom-core";
1981
2033
  async function getRouteLinkTree(market, locale) {
@@ -2030,34 +2082,6 @@ function newRouteLink(category, route, locale) {
2030
2082
  return routeLink;
2031
2083
  }
2032
2084
 
2033
- // ../models/src/label/label.service.ts
2034
- async function getLabels(params = {}) {
2035
- const store = await getStore();
2036
- const items = await store.label.findMany(params);
2037
- return items;
2038
- }
2039
-
2040
- // ../models/src/locale/locale.service.ts
2041
- async function getLocales(params = {}) {
2042
- const store = await getStore();
2043
- const items = await store.locale.findMany(params);
2044
- return items;
2045
- }
2046
-
2047
- // ../models/src/market/market.service.ts
2048
- async function getMarkets(params = {}) {
2049
- const store = await getStore();
2050
- const items = await store.market.findMany(params);
2051
- return items;
2052
- }
2053
-
2054
- // ../models/src/menu/menu.service.ts
2055
- async function getMenus(params = {}) {
2056
- const store = await getStore();
2057
- const items = await store.menu.findMany(params);
2058
- return items;
2059
- }
2060
-
2061
2085
  // ../models/src/layout/layout.service.ts
2062
2086
  async function getLayout(market, locale) {
2063
2087
  const markets = await getMarkets({ locale });
@@ -2067,11 +2091,13 @@ async function getLayout(market, locale) {
2067
2091
  const firstLevelRoutes = tree?.items || [];
2068
2092
  const flatTopLevelRoutes = tree ? [tree, ...firstLevelRoutes] : [];
2069
2093
  const topLevelRoutes = flatTopLevelRoutes.reduce((object, routeLink) => {
2070
- object[routeLink.schema] = routeLink;
2094
+ if (!object[routeLink.schema] || routeLink.schema === routeLink.category) {
2095
+ object[routeLink.schema] = routeLink;
2096
+ }
2071
2097
  return object;
2072
2098
  }, {});
2073
2099
  const topLevelHrefs = flatTopLevelRoutes.reduce((object, routeLink) => {
2074
- if (routeLink.href) {
2100
+ if (routeLink.href && !object[routeLink.schema] || routeLink.schema === routeLink.category) {
2075
2101
  object[routeLink.schema] = routeLink.href;
2076
2102
  }
2077
2103
  return object;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@websolutespa/bom-mixer-store",
3
- "version": "1.7.9",
3
+ "version": "1.8.0",
4
4
  "description": "Mixer Store module of the BOM Repository",
5
5
  "keywords": [
6
6
  "bom",
@@ -341,7 +341,9 @@ async function decorateMenuPage_(
341
341
  store: IStore,
342
342
  params: QueryParams = {}
343
343
  ): Promise<IMenuItem> {
344
- const id = (isEquatable(item.page.value) ? item.page.value : item.page.value.id);
344
+ const values = Array.isArray(item.page.value) ? item.page.value : [item.page.value];
345
+ const value = values[0]; // !!!
346
+ const id = isEquatable(value) ? value : value.id;
345
347
  const route = routes.find(x =>
346
348
  x.schema === item.page.relationTo &&
347
349
  x.page === id
@@ -1,4 +1,4 @@
1
- import { ICategorized, isUnresolvedRelation } from '@websolutespa/bom-core';
1
+ import { ICategorized } from '@websolutespa/bom-core';
2
2
 
3
3
  export async function optimizeOne_<T extends ICategorized = ICategorized>(item: T): Promise<T> {
4
4
  const validEntries = Object.entries(item).filter(([key, value]) => {
@@ -6,6 +6,7 @@ export async function optimizeOne_<T extends ICategorized = ICategorized>(item:
6
6
  case 'components':
7
7
  case 'meta':
8
8
  return false;
9
+ /*
9
10
  default:
10
11
  if (
11
12
  isUnresolvedRelation(value) ||
@@ -16,6 +17,7 @@ export async function optimizeOne_<T extends ICategorized = ICategorized>(item:
16
17
  ) {
17
18
  return false;
18
19
  }
20
+ */
19
21
  }
20
22
  return true;
21
23
  });
@@ -1,5 +1,5 @@
1
1
  import { ICategorized, QueryParams } from '@websolutespa/bom-core';
2
- import { decorateCategories_, decorateCategory_, decorateHref_, decorateHrefs_, decorateLocalizable_, decorateLocalizables_, decorateNav_, decorateRelation_, optimizeMany_ } from '../decorators';
2
+ import { decorateCategories_, decorateCategory_, decorateHref_, decorateHrefs_, decorateLocalizable_, decorateLocalizables_, decorateNav_, decorateRelation_, decorateRelations_, optimizeMany_ } from '../decorators';
3
3
  import { MockService } from './mock.service';
4
4
 
5
5
  export class MockPageService<T extends ICategorized = ICategorized> extends MockService<T> {
@@ -26,14 +26,14 @@ export class MockPageService<T extends ICategorized = ICategorized> extends Mock
26
26
  decoratedItems = await decorateCategories_<B>(store, decoratedItems, params);
27
27
  decoratedItems = await decorateLocalizables_<B>(decoratedItems, params);
28
28
  decoratedItems = await decorateHrefs_<B>(store, decoratedItems, params);
29
- /*
30
- // !!! optimization for index listing
31
- decoratedItems = await decorateNavs_<B>(store, decoratedItems, params);
32
29
  decoratedItems = await decorateRelations_<B>(store, decoratedItems, {
33
30
  market: params.market,
34
31
  locale: params.locale,
35
32
  depth: params.depth,
36
33
  });
34
+ /*
35
+ // !!! optimization for index listing
36
+ decoratedItems = await decorateNavs_<B>(store, decoratedItems, params);
37
37
  */
38
38
  return decoratedItems;
39
39
  }
@@ -90,6 +90,28 @@ export const staticCollections: StaticServiceConfig[] = [{
90
90
  type: 'text',
91
91
  },
92
92
  ],
93
+ }, {
94
+ src: 'https://actarian.github.io/cms-i18n-react/api/language.json',
95
+ slug: 'i18n_country_zone',
96
+ fields: [
97
+ {
98
+ name: 'id',
99
+ type: 'text',
100
+ },
101
+ {
102
+ name: 'name',
103
+ type: 'text',
104
+ localized: true,
105
+ },
106
+ {
107
+ name: 'englishName',
108
+ type: 'text',
109
+ },
110
+ {
111
+ name: 'nativeName',
112
+ type: 'text',
113
+ },
114
+ ],
93
115
  }, {
94
116
  src: 'https://actarian.github.io/cms-i18n-react/api/municipality.json',
95
117
  slug: 'i18n_municipality',