@bright.global/arboretum-sdk 0.0.6
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/README.md +223 -0
- package/dist/arboretum-client.js +2 -0
- package/dist/clients/contentful-client/contentful-client.js +2 -0
- package/dist/clients/contentful-client/impl/contentful-client-impl.js +54 -0
- package/dist/es6/arboretum-client.js +1 -0
- package/dist/es6/clients/contentful-client/contentful-client.js +1 -0
- package/dist/es6/clients/contentful-client/impl/contentful-client-impl.js +50 -0
- package/dist/es6/impl/arboretum-client.impl.js +182 -0
- package/dist/es6/impl/data/content-types.js +136 -0
- package/dist/es6/impl/data/helpers/__mocks__/mocked-contentful-entries-client-api.js +66 -0
- package/dist/es6/impl/data/helpers/entry-status.js +19 -0
- package/dist/es6/impl/data/helpers/get-all-entries-recursively.js +113 -0
- package/dist/es6/impl/data/helpers/get-all-entries-recursively.test.js +114 -0
- package/dist/es6/impl/data/helpers/home-pages-by-tag-id.js +66 -0
- package/dist/es6/impl/data/helpers/home-pages-by-tag-id.test.js +105 -0
- package/dist/es6/impl/data/helpers/locale-codes-from-metadata.js +7 -0
- package/dist/es6/impl/data/helpers/locale-codes-from-metadata.test.js +52 -0
- package/dist/es6/impl/data/helpers/parse-locale-tag.js +24 -0
- package/dist/es6/impl/data/helpers/parse-locale-tag.test.js +19 -0
- package/dist/es6/impl/data/helpers/validate-content-types.js +112 -0
- package/dist/es6/impl/data/helpers/validate-content-types.test.js +103 -0
- package/dist/es6/impl/data/home-page.js +75 -0
- package/dist/es6/impl/data/locales.js +60 -0
- package/dist/es6/impl/data/page-entries.js +169 -0
- package/dist/es6/impl/data/page-entries.test.js +170 -0
- package/dist/es6/impl/data/redirect-entries.js +163 -0
- package/dist/es6/impl/data/sitemap-data.js +109 -0
- package/dist/es6/impl/sitemap/adapters/page-entry-adapter.js +27 -0
- package/dist/es6/impl/sitemap/adapters/redirect-entry-adapter.js +26 -0
- package/dist/es6/impl/sitemap/adapters/redirect-to-arboretum-page-adapter.js +11 -0
- package/dist/es6/impl/sitemap/adapters/to-arboretum-page-adapter.js +14 -0
- package/dist/es6/impl/sitemap/adapters/to-arboretum-page-adapter.test.js +100 -0
- package/dist/es6/impl/sitemap/adapters/to-arboretum-page-with-missing-data-adapter.js +16 -0
- package/dist/es6/impl/sitemap/helpers/__mocks__/mocked-localized-sitemap.js +186 -0
- package/dist/es6/impl/sitemap/helpers/build-localized-sitemap.js +128 -0
- package/dist/es6/impl/sitemap/helpers/build-localized-sitemap.test.js +208 -0
- package/dist/es6/impl/sitemap/helpers/build-pages-by-tag-eagerly.js +7 -0
- package/dist/es6/impl/sitemap/helpers/build-sitemap-eagerly.js +32 -0
- package/dist/es6/impl/sitemap/helpers/find-ancestors.js +42 -0
- package/dist/es6/impl/sitemap/helpers/find-ancestors.test.js +33 -0
- package/dist/es6/impl/sitemap/helpers/find-children.js +9 -0
- package/dist/es6/impl/sitemap/helpers/find-children.test.js +39 -0
- package/dist/es6/impl/sitemap/helpers/is-root.js +1 -0
- package/dist/es6/impl/sitemap/helpers/localize-contentful-field.js +22 -0
- package/dist/es6/impl/sitemap/helpers/localize-contentful-field.test.js +137 -0
- package/dist/es6/impl/sitemap/helpers/localized-pages-by-tag-id.js +79 -0
- package/dist/es6/impl/sitemap/helpers/localized-path.js +4 -0
- package/dist/es6/impl/sitemap/helpers/page-ancestors.js +8 -0
- package/dist/es6/impl/sitemap/helpers/page-children.js +10 -0
- package/dist/es6/impl/sitemap/methods/cached-data.js +7 -0
- package/dist/es6/impl/sitemap/methods/home-page.js +27 -0
- package/dist/es6/impl/sitemap/methods/page-by-id.js +29 -0
- package/dist/es6/impl/sitemap/methods/page-by-path.js +52 -0
- package/dist/es6/impl/sitemap/methods/pages-by-ids.js +6 -0
- package/dist/es6/impl/sitemap/methods/pages-by-paths.js +6 -0
- package/dist/es6/impl/sitemap/methods/pages-by-tag-id.js +37 -0
- package/dist/es6/impl/sitemap/methods/pages.js +75 -0
- package/dist/es6/impl/sitemap/methods/regenerate.js +64 -0
- package/dist/es6/impl/sitemap/methods/search.js +97 -0
- package/dist/es6/impl/sitemap/methods/status.js +47 -0
- package/dist/es6/index.js +2 -0
- package/dist/es6/utils/array-to-map.js +7 -0
- package/dist/es6/utils/fp-utils.js +5 -0
- package/dist/es6/utils/group-by.js +13 -0
- package/dist/es6/utils/json-stringify-map-replacer.js +6 -0
- package/dist/es6/utils/string-similarity.js +59 -0
- package/dist/impl/arboretum-client.impl.js +189 -0
- package/dist/impl/data/content-types.js +140 -0
- package/dist/impl/data/helpers/__mocks__/mocked-contentful-entries-client-api.js +72 -0
- package/dist/impl/data/helpers/entry-status.js +23 -0
- package/dist/impl/data/helpers/get-all-entries-recursively.js +117 -0
- package/dist/impl/data/helpers/get-all-entries-recursively.test.js +116 -0
- package/dist/impl/data/helpers/home-pages-by-tag-id.js +70 -0
- package/dist/impl/data/helpers/home-pages-by-tag-id.test.js +107 -0
- package/dist/impl/data/helpers/locale-codes-from-metadata.js +11 -0
- package/dist/impl/data/helpers/locale-codes-from-metadata.test.js +54 -0
- package/dist/impl/data/helpers/parse-locale-tag.js +28 -0
- package/dist/impl/data/helpers/parse-locale-tag.test.js +21 -0
- package/dist/impl/data/helpers/validate-content-types.js +117 -0
- package/dist/impl/data/helpers/validate-content-types.test.js +105 -0
- package/dist/impl/data/home-page.js +79 -0
- package/dist/impl/data/locales.js +64 -0
- package/dist/impl/data/page-entries.js +173 -0
- package/dist/impl/data/page-entries.test.js +172 -0
- package/dist/impl/data/redirect-entries.js +168 -0
- package/dist/impl/data/sitemap-data.js +113 -0
- package/dist/impl/sitemap/adapters/page-entry-adapter.js +31 -0
- package/dist/impl/sitemap/adapters/redirect-entry-adapter.js +30 -0
- package/dist/impl/sitemap/adapters/redirect-to-arboretum-page-adapter.js +15 -0
- package/dist/impl/sitemap/adapters/to-arboretum-page-adapter.js +18 -0
- package/dist/impl/sitemap/adapters/to-arboretum-page-adapter.test.js +102 -0
- package/dist/impl/sitemap/adapters/to-arboretum-page-with-missing-data-adapter.js +20 -0
- package/dist/impl/sitemap/helpers/__mocks__/mocked-localized-sitemap.js +189 -0
- package/dist/impl/sitemap/helpers/build-localized-sitemap.js +133 -0
- package/dist/impl/sitemap/helpers/build-localized-sitemap.test.js +210 -0
- package/dist/impl/sitemap/helpers/build-pages-by-tag-eagerly.js +11 -0
- package/dist/impl/sitemap/helpers/build-sitemap-eagerly.js +36 -0
- package/dist/impl/sitemap/helpers/find-ancestors.js +46 -0
- package/dist/impl/sitemap/helpers/find-ancestors.test.js +35 -0
- package/dist/impl/sitemap/helpers/find-children.js +13 -0
- package/dist/impl/sitemap/helpers/find-children.test.js +41 -0
- package/dist/impl/sitemap/helpers/is-root.js +5 -0
- package/dist/impl/sitemap/helpers/localize-contentful-field.js +26 -0
- package/dist/impl/sitemap/helpers/localize-contentful-field.test.js +139 -0
- package/dist/impl/sitemap/helpers/localized-pages-by-tag-id.js +84 -0
- package/dist/impl/sitemap/helpers/localized-path.js +8 -0
- package/dist/impl/sitemap/helpers/page-ancestors.js +12 -0
- package/dist/impl/sitemap/helpers/page-children.js +14 -0
- package/dist/impl/sitemap/methods/cached-data.js +11 -0
- package/dist/impl/sitemap/methods/home-page.js +31 -0
- package/dist/impl/sitemap/methods/page-by-id.js +33 -0
- package/dist/impl/sitemap/methods/page-by-path.js +56 -0
- package/dist/impl/sitemap/methods/pages-by-ids.js +10 -0
- package/dist/impl/sitemap/methods/pages-by-paths.js +10 -0
- package/dist/impl/sitemap/methods/pages-by-tag-id.js +41 -0
- package/dist/impl/sitemap/methods/pages.js +79 -0
- package/dist/impl/sitemap/methods/regenerate.js +68 -0
- package/dist/impl/sitemap/methods/search.js +101 -0
- package/dist/impl/sitemap/methods/status.js +51 -0
- package/dist/index.js +8 -0
- package/dist/types/arboretum-client.d.ts +110 -0
- package/dist/types/clients/contentful-client/contentful-client.d.ts +95 -0
- package/dist/types/clients/contentful-client/impl/contentful-client-impl.d.ts +3 -0
- package/dist/types/impl/arboretum-client.impl.d.ts +107 -0
- package/dist/types/impl/data/content-types.d.ts +11 -0
- package/dist/types/impl/data/helpers/__mocks__/mocked-contentful-entries-client-api.d.ts +7 -0
- package/dist/types/impl/data/helpers/entry-status.d.ts +2 -0
- package/dist/types/impl/data/helpers/get-all-entries-recursively.d.ts +6 -0
- package/dist/types/impl/data/helpers/get-all-entries-recursively.test.d.ts +1 -0
- package/dist/types/impl/data/helpers/home-pages-by-tag-id.d.ts +15 -0
- package/dist/types/impl/data/helpers/home-pages-by-tag-id.test.d.ts +1 -0
- package/dist/types/impl/data/helpers/locale-codes-from-metadata.d.ts +2 -0
- package/dist/types/impl/data/helpers/locale-codes-from-metadata.test.d.ts +1 -0
- package/dist/types/impl/data/helpers/parse-locale-tag.d.ts +3 -0
- package/dist/types/impl/data/helpers/parse-locale-tag.test.d.ts +1 -0
- package/dist/types/impl/data/helpers/validate-content-types.d.ts +5 -0
- package/dist/types/impl/data/helpers/validate-content-types.test.d.ts +1 -0
- package/dist/types/impl/data/home-page.d.ts +3 -0
- package/dist/types/impl/data/locales.d.ts +10 -0
- package/dist/types/impl/data/page-entries.d.ts +3 -0
- package/dist/types/impl/data/page-entries.test.d.ts +1 -0
- package/dist/types/impl/data/redirect-entries.d.ts +4 -0
- package/dist/types/impl/data/sitemap-data.d.ts +17 -0
- package/dist/types/impl/sitemap/adapters/page-entry-adapter.d.ts +6 -0
- package/dist/types/impl/sitemap/adapters/redirect-entry-adapter.d.ts +4 -0
- package/dist/types/impl/sitemap/adapters/redirect-to-arboretum-page-adapter.d.ts +3 -0
- package/dist/types/impl/sitemap/adapters/to-arboretum-page-adapter.d.ts +3 -0
- package/dist/types/impl/sitemap/adapters/to-arboretum-page-adapter.test.d.ts +1 -0
- package/dist/types/impl/sitemap/adapters/to-arboretum-page-with-missing-data-adapter.d.ts +3 -0
- package/dist/types/impl/sitemap/helpers/__mocks__/mocked-localized-sitemap.d.ts +16 -0
- package/dist/types/impl/sitemap/helpers/build-localized-sitemap.d.ts +5 -0
- package/dist/types/impl/sitemap/helpers/build-localized-sitemap.test.d.ts +1 -0
- package/dist/types/impl/sitemap/helpers/build-pages-by-tag-eagerly.d.ts +3 -0
- package/dist/types/impl/sitemap/helpers/build-sitemap-eagerly.d.ts +3 -0
- package/dist/types/impl/sitemap/helpers/find-ancestors.d.ts +2 -0
- package/dist/types/impl/sitemap/helpers/find-ancestors.test.d.ts +1 -0
- package/dist/types/impl/sitemap/helpers/find-children.d.ts +2 -0
- package/dist/types/impl/sitemap/helpers/find-children.test.d.ts +1 -0
- package/dist/types/impl/sitemap/helpers/is-root.d.ts +2 -0
- package/dist/types/impl/sitemap/helpers/localize-contentful-field.d.ts +4 -0
- package/dist/types/impl/sitemap/helpers/localize-contentful-field.test.d.ts +1 -0
- package/dist/types/impl/sitemap/helpers/localized-pages-by-tag-id.d.ts +4 -0
- package/dist/types/impl/sitemap/helpers/localized-path.d.ts +1 -0
- package/dist/types/impl/sitemap/helpers/page-ancestors.d.ts +3 -0
- package/dist/types/impl/sitemap/helpers/page-children.d.ts +5 -0
- package/dist/types/impl/sitemap/methods/cached-data.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/home-page.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/page-by-id.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/page-by-path.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/pages-by-ids.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/pages-by-paths.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/pages-by-tag-id.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/pages.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/regenerate.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/search.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/status.d.ts +3 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/utils/array-to-map.d.ts +1 -0
- package/dist/types/utils/fp-utils.d.ts +11 -0
- package/dist/types/utils/group-by.d.ts +1 -0
- package/dist/types/utils/json-stringify-map-replacer.d.ts +1 -0
- package/dist/types/utils/string-similarity.d.ts +9 -0
- package/dist/utils/array-to-map.js +11 -0
- package/dist/utils/fp-utils.js +10 -0
- package/dist/utils/group-by.js +17 -0
- package/dist/utils/json-stringify-map-replacer.js +10 -0
- package/dist/utils/string-similarity.js +63 -0
- package/docs/.nojekyll +1 -0
- package/docs/assets/highlight.css +78 -0
- package/docs/assets/main.js +58 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1367 -0
- package/docs/functions/createArboretumClient.html +72 -0
- package/docs/functions/createArboretumClientFromCdaClient.html +72 -0
- package/docs/functions/createArboretumClientFromCdaParams.html +72 -0
- package/docs/functions/createArboretumClientFromCma.html +72 -0
- package/docs/index.html +228 -0
- package/docs/modules.html +88 -0
- package/docs/types/ArboretumAliasT.html +70 -0
- package/docs/types/ArboretumClientConfigFromCdaParamsT.html +74 -0
- package/docs/types/ArboretumClientConfigFromCdaT.html +79 -0
- package/docs/types/ArboretumClientConfigFromCmaT.html +79 -0
- package/docs/types/ArboretumClientConfigT.html +63 -0
- package/docs/types/ArboretumClientContentfulConfigOptionsT.html +93 -0
- package/docs/types/ArboretumClientOptions.html +72 -0
- package/docs/types/ArboretumClientOptionsT.html +63 -0
- package/docs/types/ArboretumClientT.html +235 -0
- package/docs/types/ArboretumPageNodeT.html +63 -0
- package/docs/types/ArboretumPageT.html +76 -0
- package/docs/types/ArboretumRedirectT.html +70 -0
- package/docs/types/CachedDataT.html +63 -0
- package/docs/types/Either.html +70 -0
- package/docs/types/EitherL.html +75 -0
- package/docs/types/EitherR.html +75 -0
- package/docs/types/LocaleT.html +63 -0
- package/docs/types/OptionsT.html +70 -0
- package/logo.svg +12 -0
- package/package.json +47 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
2
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
3
|
+
if (!m) return o;
|
|
4
|
+
var i = m.call(o), r, ar = [], e;
|
|
5
|
+
try {
|
|
6
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
7
|
+
}
|
|
8
|
+
catch (error) { e = { error: error }; }
|
|
9
|
+
finally {
|
|
10
|
+
try {
|
|
11
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
12
|
+
}
|
|
13
|
+
finally { if (e) throw e.error; }
|
|
14
|
+
}
|
|
15
|
+
return ar;
|
|
16
|
+
};
|
|
17
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
18
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
19
|
+
if (ar || !(i in from)) {
|
|
20
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
21
|
+
ar[i] = from[i];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
25
|
+
};
|
|
26
|
+
var defaultLimit = 100;
|
|
27
|
+
var defaultSkip = 0;
|
|
28
|
+
export var mockedEntrySysId = function (contentType, idx) {
|
|
29
|
+
return "".concat(contentType).concat(idx);
|
|
30
|
+
};
|
|
31
|
+
export var mockedContentfulEntriesClientApi = function (contentType, total) { return ({
|
|
32
|
+
getEntries: function (query) {
|
|
33
|
+
var limit = typeof (query === null || query === void 0 ? void 0 : query.limit) !== 'undefined' ? query.limit : defaultLimit;
|
|
34
|
+
var skip = typeof (query === null || query === void 0 ? void 0 : query.skip) !== 'undefined' ? query.skip : defaultSkip;
|
|
35
|
+
var remaining = total - skip;
|
|
36
|
+
var contentTypeId = (query === null || query === void 0 ? void 0 : query.content_type) || contentType;
|
|
37
|
+
var items = __spreadArray([], __read(Array(remaining >= limit ? limit : remaining).keys()), false).map(function (_, idx) { return ({
|
|
38
|
+
sys: {
|
|
39
|
+
id: mockedEntrySysId(contentTypeId, skip + idx),
|
|
40
|
+
contentType: {
|
|
41
|
+
sys: { id: contentTypeId },
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
fields: [],
|
|
45
|
+
}); });
|
|
46
|
+
return Promise.resolve({
|
|
47
|
+
items: items,
|
|
48
|
+
limit: limit,
|
|
49
|
+
skip: skip,
|
|
50
|
+
total: total,
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
}); };
|
|
54
|
+
export var multipleContentTypesMockedContentfulEntriesClientApi = function (contentTypes) { return ({
|
|
55
|
+
getEntries: function (query) {
|
|
56
|
+
var contentType = contentTypes.find(function (ct) { return ct.contentType === (query === null || query === void 0 ? void 0 : query.content_type); });
|
|
57
|
+
return contentType
|
|
58
|
+
? mockedContentfulEntriesClientApi(contentType.contentType, contentType.total).getEntries(query)
|
|
59
|
+
: Promise.resolve({
|
|
60
|
+
items: [],
|
|
61
|
+
limit: (query === null || query === void 0 ? void 0 : query.limit) || defaultLimit,
|
|
62
|
+
skip: (query === null || query === void 0 ? void 0 : query.skip) || defaultSkip,
|
|
63
|
+
total: 0,
|
|
64
|
+
});
|
|
65
|
+
},
|
|
66
|
+
}); };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// https://www.contentful.com/developers/docs/tutorials/general/determine-entry-asset-state/
|
|
2
|
+
export var entryStatus = function (sys) {
|
|
3
|
+
if (!sys) {
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
else if (!!sys.publishedVersion && sys.version === sys.publishedVersion + 1)
|
|
7
|
+
return "published";
|
|
8
|
+
else if (!sys.publishedVersion)
|
|
9
|
+
return "draft";
|
|
10
|
+
else if (!!sys.publishedVersion &&
|
|
11
|
+
sys.version &&
|
|
12
|
+
sys.version >= sys.publishedVersion + 2)
|
|
13
|
+
return "changed";
|
|
14
|
+
else if (!!sys.archivedVersion)
|
|
15
|
+
return "archived";
|
|
16
|
+
else {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
38
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
39
|
+
if (!m) return o;
|
|
40
|
+
var i = m.call(o), r, ar = [], e;
|
|
41
|
+
try {
|
|
42
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
43
|
+
}
|
|
44
|
+
catch (error) { e = { error: error }; }
|
|
45
|
+
finally {
|
|
46
|
+
try {
|
|
47
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
48
|
+
}
|
|
49
|
+
finally { if (e) throw e.error; }
|
|
50
|
+
}
|
|
51
|
+
return ar;
|
|
52
|
+
};
|
|
53
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
54
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
55
|
+
if (ar || !(i in from)) {
|
|
56
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
57
|
+
ar[i] = from[i];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
61
|
+
};
|
|
62
|
+
/*
|
|
63
|
+
Even if you define flag "include: 0" in contentful client the references (at least some of them) are resolved.
|
|
64
|
+
This results in a large amount of data being stored in memory unnecessarily.
|
|
65
|
+
The purpose of this function is to filter out all redundant data and keep the references (sys field) only.
|
|
66
|
+
*/
|
|
67
|
+
var filterOutNestedEntriesFieldsOtherThanSysEff = function (entry) {
|
|
68
|
+
return function (field) {
|
|
69
|
+
Object.keys(entry.fields[field] || {}).forEach(function (localeCode) {
|
|
70
|
+
var nestedEntry = entry.fields[field][localeCode];
|
|
71
|
+
if (Array.isArray(nestedEntry)) {
|
|
72
|
+
nestedEntry.forEach(function (e, idx) {
|
|
73
|
+
nestedEntry[idx] = { sys: e === null || e === void 0 ? void 0 : e.sys };
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
nestedEntry = { sys: nestedEntry === null || nestedEntry === void 0 ? void 0 : nestedEntry.sys };
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return entry;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
export var getAllEntriesRecursively = function (_a, contentType, skip, acc, select, refFieldsToFilterOut, limit) {
|
|
84
|
+
var getEntries = _a.getEntries;
|
|
85
|
+
if (refFieldsToFilterOut === void 0) { refFieldsToFilterOut = []; }
|
|
86
|
+
if (limit === void 0) { limit = 1000; }
|
|
87
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
88
|
+
var items;
|
|
89
|
+
return __generator(this, function (_b) {
|
|
90
|
+
switch (_b.label) {
|
|
91
|
+
case 0: return [4 /*yield*/, getEntries({
|
|
92
|
+
limit: limit,
|
|
93
|
+
skip: skip,
|
|
94
|
+
content_type: contentType,
|
|
95
|
+
include: 0,
|
|
96
|
+
select: select,
|
|
97
|
+
locale: "*",
|
|
98
|
+
})];
|
|
99
|
+
case 1:
|
|
100
|
+
items = (_b.sent()).items;
|
|
101
|
+
items.forEach(function (i) {
|
|
102
|
+
refFieldsToFilterOut.forEach(function (field) {
|
|
103
|
+
filterOutNestedEntriesFieldsOtherThanSysEff(i)(field);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
acc.push.apply(acc, __spreadArray([], __read(items), false));
|
|
107
|
+
return [2 /*return*/, items.length >= limit
|
|
108
|
+
? getAllEntriesRecursively({ getEntries: getEntries }, contentType, skip + limit, acc, select)
|
|
109
|
+
: acc];
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
38
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
39
|
+
if (!m) return o;
|
|
40
|
+
var i = m.call(o), r, ar = [], e;
|
|
41
|
+
try {
|
|
42
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
43
|
+
}
|
|
44
|
+
catch (error) { e = { error: error }; }
|
|
45
|
+
finally {
|
|
46
|
+
try {
|
|
47
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
48
|
+
}
|
|
49
|
+
finally { if (e) throw e.error; }
|
|
50
|
+
}
|
|
51
|
+
return ar;
|
|
52
|
+
};
|
|
53
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
54
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
55
|
+
if (ar || !(i in from)) {
|
|
56
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
57
|
+
ar[i] = from[i];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
61
|
+
};
|
|
62
|
+
import { getAllEntriesRecursively } from "./get-all-entries-recursively";
|
|
63
|
+
import { mockedContentfulEntriesClientApi, mockedEntrySysId, } from "./__mocks__/mocked-contentful-entries-client-api";
|
|
64
|
+
var testContentTypeId = "test";
|
|
65
|
+
describe(getAllEntriesRecursively, function () {
|
|
66
|
+
test("Handle case where there are no entries", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
67
|
+
var entries;
|
|
68
|
+
return __generator(this, function (_a) {
|
|
69
|
+
switch (_a.label) {
|
|
70
|
+
case 0: return [4 /*yield*/, getAllEntriesRecursively(mockedContentfulEntriesClientApi(testContentTypeId, 0), testContentTypeId, 0, [], undefined, [], 10)];
|
|
71
|
+
case 1:
|
|
72
|
+
entries = _a.sent();
|
|
73
|
+
expect(entries.length).toBe(0);
|
|
74
|
+
return [2 /*return*/];
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}); });
|
|
78
|
+
test("Handle case where entries can be fetched with single request ", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
79
|
+
var total, entries, entriesIds, expectedEntriesIds;
|
|
80
|
+
return __generator(this, function (_a) {
|
|
81
|
+
switch (_a.label) {
|
|
82
|
+
case 0:
|
|
83
|
+
total = 10;
|
|
84
|
+
return [4 /*yield*/, getAllEntriesRecursively(mockedContentfulEntriesClientApi(testContentTypeId, total), testContentTypeId, 0, [], undefined, [], 10)];
|
|
85
|
+
case 1:
|
|
86
|
+
entries = _a.sent();
|
|
87
|
+
entriesIds = entries.map(function (e) { return e.sys.id; });
|
|
88
|
+
expectedEntriesIds = __spreadArray([], __read(Array(total).keys()), false).map(function (_, idx) {
|
|
89
|
+
return mockedEntrySysId(testContentTypeId, idx);
|
|
90
|
+
});
|
|
91
|
+
expect(entriesIds).toEqual(expectedEntriesIds);
|
|
92
|
+
return [2 /*return*/];
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}); });
|
|
96
|
+
test("Handle case where entries must be fetched with multiple requests ", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
97
|
+
var total, entries, entriesIds, expectedEntriesIds;
|
|
98
|
+
return __generator(this, function (_a) {
|
|
99
|
+
switch (_a.label) {
|
|
100
|
+
case 0:
|
|
101
|
+
total = 101;
|
|
102
|
+
return [4 /*yield*/, getAllEntriesRecursively(mockedContentfulEntriesClientApi(testContentTypeId, total), testContentTypeId, 0, [], undefined, [], 10)];
|
|
103
|
+
case 1:
|
|
104
|
+
entries = _a.sent();
|
|
105
|
+
entriesIds = entries.map(function (e) { return e.sys.id; });
|
|
106
|
+
expectedEntriesIds = __spreadArray([], __read(Array(total).keys()), false).map(function (_, idx) {
|
|
107
|
+
return mockedEntrySysId(testContentTypeId, idx);
|
|
108
|
+
});
|
|
109
|
+
expect(entriesIds).toEqual(expectedEntriesIds);
|
|
110
|
+
return [2 /*return*/];
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}); });
|
|
114
|
+
});
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
2
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
3
|
+
if (!m) return o;
|
|
4
|
+
var i = m.call(o), r, ar = [], e;
|
|
5
|
+
try {
|
|
6
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
7
|
+
}
|
|
8
|
+
catch (error) { e = { error: error }; }
|
|
9
|
+
finally {
|
|
10
|
+
try {
|
|
11
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
12
|
+
}
|
|
13
|
+
finally { if (e) throw e.error; }
|
|
14
|
+
}
|
|
15
|
+
return ar;
|
|
16
|
+
};
|
|
17
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
18
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
19
|
+
if (ar || !(i in from)) {
|
|
20
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
21
|
+
ar[i] = from[i];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
25
|
+
};
|
|
26
|
+
import { localeCodesFromMetadata } from './locale-codes-from-metadata';
|
|
27
|
+
export var homePagesByTagId = function (ctx, locales, entries) {
|
|
28
|
+
var seed = { homePagesByTagId: new Map() };
|
|
29
|
+
return entries
|
|
30
|
+
.filter(function (entry) { var _a; return !!((_a = entry.metadata) === null || _a === void 0 ? void 0 : _a.tags.find(function (t) { return t.sys.id === ctx.pageHomeTagId; })); })
|
|
31
|
+
.reduce(function (acc, entry) {
|
|
32
|
+
var entryRef = { sys: { id: entry.sys.id } };
|
|
33
|
+
/*
|
|
34
|
+
Currently we don't support contentful locales fallback mechanism in tags.
|
|
35
|
+
It means that if you want to customize home pages per locale you should add
|
|
36
|
+
locale tag for every locale
|
|
37
|
+
*/
|
|
38
|
+
var tagBasedLocaleCodes = localeCodesFromMetadata(ctx.localeTagIdPrefix, entry.metadata).filter(function (code) { return !!locales.locales.get(code); });
|
|
39
|
+
var localeCodes = tagBasedLocaleCodes.length > 0
|
|
40
|
+
? tagBasedLocaleCodes
|
|
41
|
+
: __spreadArray([], __read(locales.locales.keys()), false);
|
|
42
|
+
localeCodes.forEach(function (localeCode) {
|
|
43
|
+
var localizedPagesByTagId = acc.homePagesByTagId.get(localeCode);
|
|
44
|
+
if (localizedPagesByTagId) {
|
|
45
|
+
var localizedPages = localizedPagesByTagId.get(ctx.pageHomeTagId);
|
|
46
|
+
if (localizedPages) {
|
|
47
|
+
var warning = "More than one page is tagged as home page (tagLocaleCode: ".concat(localeCode, ", entryId: ").concat(entry.sys.id, ")");
|
|
48
|
+
localizedPages.push(entryRef);
|
|
49
|
+
localizedPagesByTagId.set(ctx.pageHomeTagId, localizedPages);
|
|
50
|
+
if (acc.warnings)
|
|
51
|
+
acc.warnings.push(warning);
|
|
52
|
+
else {
|
|
53
|
+
acc.warnings = [warning];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
localizedPagesByTagId.set(ctx.pageHomeTagId, [entryRef]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
acc.homePagesByTagId.set(localeCode, new Map([[ctx.pageHomeTagId, [entryRef]]]));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return acc;
|
|
65
|
+
}, seed);
|
|
66
|
+
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { jsonStrigifyMapReplacer } from '../../../utils/json-stringify-map-replacer';
|
|
2
|
+
import { homePagesByTagId } from './home-pages-by-tag-id';
|
|
3
|
+
var ctx = {
|
|
4
|
+
localeTagIdPrefix: 'locale',
|
|
5
|
+
pageHomeTagId: 'pageHome',
|
|
6
|
+
};
|
|
7
|
+
var locales = {
|
|
8
|
+
defaultLocaleCode: 'en',
|
|
9
|
+
locales: new Map([
|
|
10
|
+
['en', { code: 'en', default: true, fallbackCode: null, name: 'English' }],
|
|
11
|
+
['de', { code: 'de', default: false, fallbackCode: null, name: 'German' }],
|
|
12
|
+
[
|
|
13
|
+
'en-AT',
|
|
14
|
+
{ code: 'en-AT', default: false, fallbackCode: 'en', name: 'English' },
|
|
15
|
+
],
|
|
16
|
+
]),
|
|
17
|
+
};
|
|
18
|
+
var emptyHomePagesByTagId = {
|
|
19
|
+
homePagesByTagId: new Map(),
|
|
20
|
+
};
|
|
21
|
+
describe(homePagesByTagId, function () {
|
|
22
|
+
test('Home pages of empty entries', function () {
|
|
23
|
+
expect(homePagesByTagId(ctx, locales, [])).toMatchObject(emptyHomePagesByTagId);
|
|
24
|
+
});
|
|
25
|
+
test('Home pages of entries without metadata', function () {
|
|
26
|
+
var entries = [
|
|
27
|
+
{ sys: { id: 'test1' }, metadata: undefined },
|
|
28
|
+
{ sys: { id: 'test2' }, metadata: undefined },
|
|
29
|
+
];
|
|
30
|
+
expect(homePagesByTagId(ctx, locales, entries)).toMatchObject(emptyHomePagesByTagId);
|
|
31
|
+
});
|
|
32
|
+
test('Home pages of entries with home page metadata', function () {
|
|
33
|
+
var test1SysId = 'test1';
|
|
34
|
+
var entries = [
|
|
35
|
+
{
|
|
36
|
+
sys: { id: test1SysId },
|
|
37
|
+
metadata: { tags: [{ sys: { id: ctx.pageHomeTagId } }] },
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
sys: { id: 'test2' },
|
|
41
|
+
metadata: { tags: [{ sys: { id: 'someOtherTag' } }] },
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
var r = {
|
|
45
|
+
homePagesByTagId: new Map([
|
|
46
|
+
['en', new Map([[ctx.pageHomeTagId, [{ sys: { id: test1SysId } }]]])],
|
|
47
|
+
['de', new Map([[ctx.pageHomeTagId, [{ sys: { id: test1SysId } }]]])],
|
|
48
|
+
[
|
|
49
|
+
'en-AT',
|
|
50
|
+
new Map([[ctx.pageHomeTagId, [{ sys: { id: test1SysId } }]]]),
|
|
51
|
+
],
|
|
52
|
+
]),
|
|
53
|
+
};
|
|
54
|
+
expect(JSON.stringify(homePagesByTagId(ctx, locales, entries), jsonStrigifyMapReplacer)).toBe(JSON.stringify(r, jsonStrigifyMapReplacer));
|
|
55
|
+
});
|
|
56
|
+
test('Home pages of entries with home page and locales metadata', function () {
|
|
57
|
+
var test1SysId = 'test1';
|
|
58
|
+
var test3SysId = 'test3';
|
|
59
|
+
var test4SysId = 'test4';
|
|
60
|
+
var entries = [
|
|
61
|
+
{
|
|
62
|
+
sys: { id: test1SysId },
|
|
63
|
+
metadata: {
|
|
64
|
+
tags: [
|
|
65
|
+
{ sys: { id: ctx.pageHomeTagId } },
|
|
66
|
+
{ sys: { id: "".concat(ctx.localeTagIdPrefix, "EnAt") } },
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
sys: { id: 'test2' },
|
|
72
|
+
metadata: { tags: [{ sys: { id: 'someOtherTag' } }] },
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
sys: { id: test3SysId },
|
|
76
|
+
metadata: {
|
|
77
|
+
tags: [
|
|
78
|
+
{ sys: { id: ctx.pageHomeTagId } },
|
|
79
|
+
{ sys: { id: "".concat(ctx.localeTagIdPrefix, "De") } },
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
sys: { id: test4SysId },
|
|
85
|
+
metadata: {
|
|
86
|
+
tags: [
|
|
87
|
+
{ sys: { id: ctx.pageHomeTagId } },
|
|
88
|
+
{ sys: { id: "".concat(ctx.localeTagIdPrefix, "En") } },
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
var r = {
|
|
94
|
+
homePagesByTagId: new Map([
|
|
95
|
+
[
|
|
96
|
+
'en-AT',
|
|
97
|
+
new Map([[ctx.pageHomeTagId, [{ sys: { id: test1SysId } }]]]),
|
|
98
|
+
],
|
|
99
|
+
['de', new Map([[ctx.pageHomeTagId, [{ sys: { id: test3SysId } }]]])],
|
|
100
|
+
['en', new Map([[ctx.pageHomeTagId, [{ sys: { id: test4SysId } }]]])],
|
|
101
|
+
]),
|
|
102
|
+
};
|
|
103
|
+
expect(JSON.stringify(homePagesByTagId(ctx, locales, entries), jsonStrigifyMapReplacer)).toBe(JSON.stringify(r, jsonStrigifyMapReplacer));
|
|
104
|
+
});
|
|
105
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { parseLocaleTag } from './parse-locale-tag';
|
|
2
|
+
export var localeCodesFromMetadata = function (localeTagIdPrefix, metadata) {
|
|
3
|
+
return (metadata === null || metadata === void 0 ? void 0 : metadata.tags.flatMap(function (t) {
|
|
4
|
+
var maybeLocaleCode = parseLocaleTag(localeTagIdPrefix)(t.sys.id);
|
|
5
|
+
return maybeLocaleCode ? [maybeLocaleCode.localeCode] : [];
|
|
6
|
+
})) || [];
|
|
7
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
2
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
3
|
+
if (!m) return o;
|
|
4
|
+
var i = m.call(o), r, ar = [], e;
|
|
5
|
+
try {
|
|
6
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
7
|
+
}
|
|
8
|
+
catch (error) { e = { error: error }; }
|
|
9
|
+
finally {
|
|
10
|
+
try {
|
|
11
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
12
|
+
}
|
|
13
|
+
finally { if (e) throw e.error; }
|
|
14
|
+
}
|
|
15
|
+
return ar;
|
|
16
|
+
};
|
|
17
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
18
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
19
|
+
if (ar || !(i in from)) {
|
|
20
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
21
|
+
ar[i] = from[i];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
25
|
+
};
|
|
26
|
+
import { localeCodesFromMetadata } from './locale-codes-from-metadata';
|
|
27
|
+
var localeTagIdPrefix = 'locale';
|
|
28
|
+
var emptyMetadata = { tags: [] };
|
|
29
|
+
var nonEmptyMetadata = {
|
|
30
|
+
tags: [{ sys: { id: 'someTagId' } }],
|
|
31
|
+
};
|
|
32
|
+
var nonEmptyMetadataWithValidLocales = {
|
|
33
|
+
tags: __spreadArray(__spreadArray([
|
|
34
|
+
{ sys: { id: 'localeEn' } }
|
|
35
|
+
], __read(nonEmptyMetadata.tags), false), [
|
|
36
|
+
{ sys: { id: 'localeDe' } },
|
|
37
|
+
], false),
|
|
38
|
+
};
|
|
39
|
+
describe(localeCodesFromMetadata, function () {
|
|
40
|
+
test('Locale codes from empty metadata', function () {
|
|
41
|
+
expect(localeCodesFromMetadata(localeTagIdPrefix, emptyMetadata).length).toEqual(0);
|
|
42
|
+
});
|
|
43
|
+
test('Locale codes from metadata (without valid locales)', function () {
|
|
44
|
+
expect(localeCodesFromMetadata(localeTagIdPrefix, nonEmptyMetadata).length).toEqual(0);
|
|
45
|
+
});
|
|
46
|
+
test('Locale codes from metadata (without valid locales)', function () {
|
|
47
|
+
expect(localeCodesFromMetadata(localeTagIdPrefix, nonEmptyMetadata).length).toEqual(0);
|
|
48
|
+
});
|
|
49
|
+
test('Locale codes from metadata (with valid locales)', function () {
|
|
50
|
+
expect(localeCodesFromMetadata(localeTagIdPrefix, nonEmptyMetadataWithValidLocales)).toEqual(['en', 'de']);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export var parseLocaleTag = function (localeTagIdPrefix) {
|
|
2
|
+
return function (tagId) {
|
|
3
|
+
if (tagId.startsWith(localeTagIdPrefix)) {
|
|
4
|
+
var codes = tagId
|
|
5
|
+
.substring(localeTagIdPrefix.length, tagId.length)
|
|
6
|
+
.split(/(?=[A-Z])/)
|
|
7
|
+
.flatMap(function (code) { return (code ? [code] : []); });
|
|
8
|
+
if (codes.length === 1) {
|
|
9
|
+
return { localeCode: codes[0].toLowerCase() };
|
|
10
|
+
}
|
|
11
|
+
else if (codes.length === 2) {
|
|
12
|
+
return {
|
|
13
|
+
localeCode: "".concat(codes[0].toLowerCase(), "-").concat(codes[1].toUpperCase()),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { parseLocaleTag } from './parse-locale-tag';
|
|
2
|
+
var localeTagIdPrefix = 'locale';
|
|
3
|
+
var parseTag = parseLocaleTag(localeTagIdPrefix);
|
|
4
|
+
describe(parseLocaleTag, function () {
|
|
5
|
+
test('Invalid locale tag is handled properly', function () {
|
|
6
|
+
var _a, _b, _c;
|
|
7
|
+
expect((_a = parseTag('locale')) === null || _a === void 0 ? void 0 : _a.localeCode).toBeUndefined();
|
|
8
|
+
expect((_b = parseTag('test')) === null || _b === void 0 ? void 0 : _b.localeCode).toBeUndefined();
|
|
9
|
+
expect((_c = parseTag('localeEnAtEn')) === null || _c === void 0 ? void 0 : _c.localeCode).toBeUndefined();
|
|
10
|
+
});
|
|
11
|
+
test('Locale country tag is parsed properly', function () {
|
|
12
|
+
var _a;
|
|
13
|
+
expect((_a = parseTag('localeEn')) === null || _a === void 0 ? void 0 : _a.localeCode).toBe('en');
|
|
14
|
+
});
|
|
15
|
+
test('Locale language-country tag is parsed properly', function () {
|
|
16
|
+
var _a;
|
|
17
|
+
expect((_a = parseTag('localeEnAt')) === null || _a === void 0 ? void 0 : _a.localeCode).toBe('en-AT');
|
|
18
|
+
});
|
|
19
|
+
});
|