@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 +11 -0
- package/dist/index.js +115 -89
- package/dist/index.mjs +64 -38
- package/package.json +1 -1
- package/src/decorators/menu.ts +3 -1
- package/src/decorators/optimize.ts +3 -1
- package/src/mock/mock-page.service.ts +4 -4
- package/src/static/static.ts +22 -0
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
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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 = `${
|
|
667
|
-
url =
|
|
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,
|
|
673
|
+
const apiOptions = (0, import_bom_core6.merge)({ ...getLocalApiRequestOptions() }, options);
|
|
677
674
|
console.log("localApiFetch", apiOptions.method, url.href);
|
|
678
|
-
const apiResponse = await (0,
|
|
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
|
|
718
|
-
var MockService = class extends
|
|
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
|
|
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 =
|
|
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,
|
|
815
|
+
const apiOptions = (0, import_bom_core8.merge)({ ...getLocalApiRequestOptions() }, options);
|
|
814
816
|
console.log("mockApiFetch", apiOptions.method, url);
|
|
815
|
-
const apiResponse = await (0,
|
|
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
|
|
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
|
|
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
|
|
1139
|
-
var StaticService = class extends
|
|
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,
|
|
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 (
|
|
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 (!
|
|
1323
|
+
if (!import_bom_core10.isDevelopment) {
|
|
1300
1324
|
console.warn("getMockStore");
|
|
1301
1325
|
}
|
|
1302
1326
|
const store = await getMockStore_();
|
|
1303
1327
|
return store;
|
|
1304
|
-
},
|
|
1328
|
+
}, import_bom_core10.isDevelopment ? void 0 : "STORE_MOCK_");
|
|
1305
1329
|
}
|
|
1306
1330
|
|
|
1307
1331
|
// src/cached/cached.service.ts
|
|
1308
|
-
var
|
|
1309
|
-
var CachedService = class extends
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
1420
|
+
var import_bom_core13 = require("@websolutespa/bom-core");
|
|
1397
1421
|
|
|
1398
1422
|
// src/remote/remote.api.ts
|
|
1399
|
-
var
|
|
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 =
|
|
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,
|
|
1433
|
+
const apiOptions = (0, import_bom_core12.merge)({ ...getRemoteApiRequestOptions() }, options);
|
|
1410
1434
|
console.log("remoteApiFetch", apiOptions.method, url);
|
|
1411
|
-
const apiResponse = await (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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 =
|
|
1814
|
-
const locale =
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
2162
|
+
const rootCategory = (0, import_bom_core15.getRootCategory)(categories);
|
|
2111
2163
|
const childCategories = categories.filter((x) => {
|
|
2112
|
-
const parentId = (0,
|
|
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,
|
|
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]
|
|
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:
|
|
2228
|
-
development:
|
|
2229
|
-
origin: (0,
|
|
2230
|
-
host: (0,
|
|
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
|
|
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
|
|
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 (
|
|
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]
|
|
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
package/src/decorators/menu.ts
CHANGED
|
@@ -341,7 +341,9 @@ async function decorateMenuPage_(
|
|
|
341
341
|
store: IStore,
|
|
342
342
|
params: QueryParams = {}
|
|
343
343
|
): Promise<IMenuItem> {
|
|
344
|
-
const
|
|
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
|
|
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
|
}
|
package/src/static/static.ts
CHANGED
|
@@ -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',
|