@bright.global/arboretum-sdk 0.1.0-rc.2 → 0.1.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/clients/contentful-client/impl/methods/contentful-fetch.js +1 -1
  2. package/dist/es6/clients/contentful-client/impl/methods/contentful-fetch.js +1 -1
  3. package/dist/es6/impl/arboretum-client.impl.js +5 -1
  4. package/dist/es6/impl/constants.js +5 -0
  5. package/dist/es6/impl/sitemap/helpers/build-localized-sitemap.js +22 -19
  6. package/dist/es6/impl/sitemap/methods/orphaned-pages.js +97 -0
  7. package/dist/es6/impl/sitemap/methods/search-orphaned-pages.js +41 -0
  8. package/dist/es6/impl/sitemap/methods/search.js +43 -87
  9. package/dist/es6/utils/phrase-similarity.js +6 -0
  10. package/dist/es6/utils/string-similarity.js +1 -1
  11. package/dist/impl/arboretum-client.impl.js +5 -1
  12. package/dist/impl/constants.js +8 -0
  13. package/dist/impl/sitemap/helpers/build-localized-sitemap.js +24 -20
  14. package/dist/impl/sitemap/methods/orphaned-pages.js +101 -0
  15. package/dist/impl/sitemap/methods/search-orphaned-pages.js +45 -0
  16. package/dist/impl/sitemap/methods/search.js +43 -87
  17. package/dist/types/arboretum-client.d.ts +14 -1
  18. package/dist/types/impl/constants.d.ts +5 -0
  19. package/dist/types/impl/sitemap/helpers/build-localized-sitemap.d.ts +10 -2
  20. package/dist/types/impl/sitemap/methods/orphaned-pages.d.ts +3 -0
  21. package/dist/types/impl/sitemap/methods/search-orphaned-pages.d.ts +3 -0
  22. package/dist/types/impl/sitemap/methods/search.d.ts +3 -3
  23. package/dist/types/utils/phrase-similarity.d.ts +1 -0
  24. package/dist/utils/phrase-similarity.js +10 -0
  25. package/dist/utils/string-similarity.js +1 -1
  26. package/package.json +1 -1
@@ -72,7 +72,7 @@ var contentfulFetchWithRetires = function (p, retryLimit, retry) {
72
72
  if (!(retry < retryLimit &&
73
73
  (res.status === 429 || res.status === 500))) return [3 /*break*/, 3];
74
74
  delay = getRetryDelay(retry);
75
- msg = "Waiting for ".concat(delay, "ms before retrying... (retry: ").concat(delay, "/").concat(retryLimit, ")");
75
+ msg = "Waiting for ".concat(delay, "ms before retrying... (retry: ").concat(retry + 1, "/").concat(retryLimit, ")");
76
76
  if (res.status === 500) {
77
77
  console.log("[warning] Internal server error occurred. ".concat(msg));
78
78
  }
@@ -69,7 +69,7 @@ var contentfulFetchWithRetires = function (p, retryLimit, retry) {
69
69
  if (!(retry < retryLimit &&
70
70
  (res.status === 429 || res.status === 500))) return [3 /*break*/, 3];
71
71
  delay = getRetryDelay(retry);
72
- msg = "Waiting for ".concat(delay, "ms before retrying... (retry: ").concat(delay, "/").concat(retryLimit, ")");
72
+ msg = "Waiting for ".concat(delay, "ms before retrying... (retry: ").concat(retry + 1, "/").concat(retryLimit, ")");
73
73
  if (res.status === 500) {
74
74
  console.log("[warning] Internal server error occurred. ".concat(msg));
75
75
  }
@@ -78,7 +78,6 @@ import { pagesByTagId } from "./sitemap/methods/pages-by-tag-id";
78
78
  import { pagesByIds } from "./sitemap/methods/pages-by-ids";
79
79
  import { pagesByPaths } from "./sitemap/methods/pages-by-paths";
80
80
  import { regenerate } from "./sitemap/methods/regenerate";
81
- import { search } from "./sitemap/methods/search";
82
81
  import { status } from "./sitemap/methods/status";
83
82
  import { right } from "../utils/fp-utils";
84
83
  import { pages } from "./sitemap/methods/pages";
@@ -86,6 +85,9 @@ import { buildSitemapEagerly } from "./sitemap/helpers/build-sitemap-eagerly";
86
85
  import { cachedData } from "./sitemap/methods/cached-data";
87
86
  import { buildPagesByTagEagerly } from "./sitemap/helpers/build-pages-by-tag-eagerly";
88
87
  import { homePage } from "./sitemap/methods/home-page";
88
+ import { orphanedPages } from "./sitemap/methods/orphaned-pages";
89
+ import { searchOrphanedPages } from "./sitemap/methods/search-orphaned-pages";
90
+ import { search } from "./sitemap/methods/search";
89
91
  var pageTagIdPrefix = "page";
90
92
  var pageHomeTagId = "".concat(pageTagIdPrefix, "Home");
91
93
  var localeTagIdPrefix = "locale";
@@ -168,6 +170,8 @@ export var createArboretumClient = function (config) { return __awaiter(void 0,
168
170
  search: search(ctx_1),
169
171
  status: status(ctx_1),
170
172
  cachedData: cachedData(ctx_1),
173
+ orphanedPages: orphanedPages(ctx_1),
174
+ searchOrphanedPages: searchOrphanedPages(ctx_1),
171
175
  },
172
176
  warnings: dataE.right.warnings,
173
177
  }];
@@ -0,0 +1,5 @@
1
+ export var CONSTANTS = {
2
+ search: {
3
+ minSearchScore: 0.4,
4
+ },
5
+ };
@@ -69,6 +69,27 @@ var findPageFieldF = function (data, options, pageContentTypeId) {
69
69
  : undefined;
70
70
  };
71
71
  };
72
+ export var buildPage = function (data, options, childrenRefsByPageId, locale, parent, pageEntry) {
73
+ var _a;
74
+ var pageContentTypeConfig = options.pageContentTypes[pageEntry.sys.contentType.sys.id];
75
+ var findPageField = findPageFieldF(data, options, pageEntry.sys.contentType.sys.id);
76
+ var slugField = findPageField(pageContentTypeConfig.slugFieldId);
77
+ var titleField = pageContentTypeConfig.titleFieldId
78
+ ? findPageField(pageContentTypeConfig.titleFieldId)
79
+ : undefined;
80
+ var childPagesField = pageContentTypeConfig.childPagesFieldId
81
+ ? findPageField(pageContentTypeConfig.childPagesFieldId)
82
+ : undefined;
83
+ var fieldValue = localizeField(data, locale);
84
+ var childrenRefs = childrenRefsByPageId
85
+ ? childrenRefsByPageId.get(pageEntry.sys.id) || []
86
+ : childPagesField
87
+ ? ((_a = fieldValue(childPagesField.localized, pageEntry.fields[childPagesField.id])) === null || _a === void 0 ? void 0 : _a.flatMap(function (childPage) { var _a; return ((_a = childPage === null || childPage === void 0 ? void 0 : childPage.sys) === null || _a === void 0 ? void 0 : _a.id) ? [{ sys: { id: childPage === null || childPage === void 0 ? void 0 : childPage.sys.id } }] : []; })) || []
88
+ : [];
89
+ return slugField
90
+ ? pageEntryAdapter(data, options, slugField, titleField, childrenRefs, locale, parent, pageEntry)
91
+ : undefined;
92
+ };
72
93
  var getChildrenRefsByParentId = function (data, locale, options) {
73
94
  var pages = data.pages;
74
95
  var acc = new Map();
@@ -98,26 +119,8 @@ var getChildrenRefsByParentId = function (data, locale, options) {
98
119
  return acc;
99
120
  };
100
121
  var buildLocalizedSitemapArrRecursively = function (data, options, locale, parent, childrenRefsByPageId, pageEntry, acc) {
101
- var _a;
102
122
  var pages = data.pages;
103
- var pageContentTypeConfig = options.pageContentTypes[pageEntry.sys.contentType.sys.id];
104
- var findPageField = findPageFieldF(data, options, pageEntry.sys.contentType.sys.id);
105
- var slugField = findPageField(pageContentTypeConfig.slugFieldId);
106
- var titleField = pageContentTypeConfig.titleFieldId
107
- ? findPageField(pageContentTypeConfig.titleFieldId)
108
- : undefined;
109
- var childPagesField = pageContentTypeConfig.childPagesFieldId
110
- ? findPageField(pageContentTypeConfig.childPagesFieldId)
111
- : undefined;
112
- var fieldValue = localizeField(data, locale);
113
- var childrenRefs = childrenRefsByPageId
114
- ? childrenRefsByPageId.get(pageEntry.sys.id) || []
115
- : childPagesField
116
- ? ((_a = fieldValue(childPagesField.localized, pageEntry.fields[childPagesField.id])) === null || _a === void 0 ? void 0 : _a.flatMap(function (childPage) { var _a; return ((_a = childPage === null || childPage === void 0 ? void 0 : childPage.sys) === null || _a === void 0 ? void 0 : _a.id) ? [{ sys: { id: childPage === null || childPage === void 0 ? void 0 : childPage.sys.id } }] : []; })) || []
117
- : [];
118
- var page = slugField
119
- ? pageEntryAdapter(data, options, slugField, titleField, childrenRefs, locale, parent, pageEntry)
120
- : undefined;
123
+ var page = buildPage(data, options, childrenRefsByPageId, locale, parent, pageEntry);
121
124
  if (page) {
122
125
  var validChildPages_1 = page.childPages.filter(function (c) { return pages.get(c.sys.id) && !acc.get(c.sys.id); });
123
126
  var redirectChildPages = isRoot(page) && options.redirectContentType
@@ -0,0 +1,97 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __read = (this && this.__read) || function (o, n) {
13
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
14
+ if (!m) return o;
15
+ var i = m.call(o), r, ar = [], e;
16
+ try {
17
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
18
+ }
19
+ catch (error) { e = { error: error }; }
20
+ finally {
21
+ try {
22
+ if (r && !r.done && (m = i["return"])) m.call(i);
23
+ }
24
+ finally { if (e) throw e.error; }
25
+ }
26
+ return ar;
27
+ };
28
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
29
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
30
+ if (ar || !(i in from)) {
31
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
32
+ ar[i] = from[i];
33
+ }
34
+ }
35
+ return to.concat(ar || Array.prototype.slice.call(from));
36
+ };
37
+ import { left, right } from "../../../utils/fp-utils";
38
+ import { buildPage, localizedSitemapFromCacheOrBuildEff, } from "../helpers/build-localized-sitemap";
39
+ import { toArboretumPage } from "../adapters/to-arboretum-page-adapter";
40
+ var singleOrAllLocalesE = function (locales) {
41
+ return function (localeCode) {
42
+ if (localeCode) {
43
+ var locale = locales.get(localeCode);
44
+ return locale
45
+ ? right([locale])
46
+ : left("Failed to find locale by code: ".concat(localeCode));
47
+ }
48
+ else {
49
+ return right(__spreadArray([], __read(locales.values()), false));
50
+ }
51
+ };
52
+ };
53
+ export var orphanedPages = function (ctx) {
54
+ return function (options) {
55
+ var localeCode = options === null || options === void 0 ? void 0 : options.localeCode;
56
+ var localesE = singleOrAllLocalesE(ctx.data.locales)(localeCode);
57
+ var skip = typeof (options === null || options === void 0 ? void 0 : options.skip) !== "undefined" ? options.skip : 0;
58
+ if (localesE._tag === "Right") {
59
+ var pages = localesE.right
60
+ .flatMap(function (locale) {
61
+ var localizedSitemapE = localizedSitemapFromCacheOrBuildEff(ctx, locale);
62
+ var pages = localizedSitemapE._tag === "Right"
63
+ ? __spreadArray([], __read(ctx.data.pages.values()), false).flatMap(function (p) {
64
+ var sitemapPage = localizedSitemapE.right.sitemap.get(p.sys.id);
65
+ if (sitemapPage) {
66
+ return [];
67
+ }
68
+ else {
69
+ var page = buildPage(ctx.data, ctx.options, undefined, locale, undefined, p);
70
+ var arboretumPage = page
71
+ ? toArboretumPage(localizedSitemapE.right, locale.code, {})(page)
72
+ : undefined;
73
+ return arboretumPage
74
+ ? [
75
+ __assign(__assign({}, arboretumPage), { path: undefined, totalDirectChildrenCount: undefined, ancestors: undefined, children: undefined }),
76
+ ]
77
+ : [];
78
+ }
79
+ })
80
+ : [];
81
+ return pages;
82
+ })
83
+ .sort(function (p1, p2) {
84
+ if (p1.id < p2.id)
85
+ return -1;
86
+ if (p1.id > p2.id)
87
+ return 1;
88
+ return 0;
89
+ })
90
+ .slice(skip, options === null || options === void 0 ? void 0 : options.limit);
91
+ return right(pages);
92
+ }
93
+ else {
94
+ return localesE;
95
+ }
96
+ };
97
+ };
@@ -0,0 +1,41 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { phraseSimilarity } from "../../../utils/phrase-similarity";
13
+ import { CONSTANTS } from "../../constants";
14
+ import { orphanedPages } from "./orphaned-pages";
15
+ var orphanedPagePhraseSimilarity = function (page, phrase) {
16
+ var slugSimilarity = phraseSimilarity(phrase, page.slug);
17
+ var idSimilarity = phraseSimilarity(phrase, page.id);
18
+ var titleSimilarity = page.title ? phraseSimilarity(phrase, page.title) : 0;
19
+ return Math.max(slugSimilarity, idSimilarity, titleSimilarity);
20
+ };
21
+ export var searchOrphanedPages = function (ctx) {
22
+ return function (phrase, localeCode, limit) {
23
+ var pages = orphanedPages(ctx)({ localeCode: localeCode });
24
+ if (pages._tag === "Right") {
25
+ return pages.right
26
+ .map(function (page) {
27
+ var searchScore = orphanedPagePhraseSimilarity(page, phrase);
28
+ return __assign(__assign({}, page), { searchScore: searchScore });
29
+ })
30
+ .filter(function (_a) {
31
+ var searchScore = _a.searchScore;
32
+ return searchScore >= CONSTANTS.search.minSearchScore;
33
+ })
34
+ .sort(function (a, b) { return b.searchScore - a.searchScore; })
35
+ .slice(0, limit);
36
+ }
37
+ else {
38
+ return [];
39
+ }
40
+ };
41
+ };
@@ -1,97 +1,53 @@
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);
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
12
7
  }
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));
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
25
11
  };
26
- import { stringSimilarity } from '../../../utils/string-similarity';
27
- import { localizedSitemapFromCacheOrBuildEff } from '../helpers/build-localized-sitemap';
28
- import { toArboretumPageWithMissingData } from '../adapters/to-arboretum-page-with-missing-data-adapter';
29
- import { redirectToArboretumPage } from '../adapters/redirect-to-arboretum-page-adapter';
30
- var minPhraseSimilarity = 0.4;
31
- var defaultLimit = 20;
32
- var pagePhraseSimilarity = function (page, path, phrase) {
33
- var slugSimilarity = stringSimilarity(phrase, page.slug);
34
- var pathSimilarity = stringSimilarity(phrase, path);
35
- var idSimilarity = stringSimilarity(phrase, page.sys.id);
36
- return Math.max.apply(Math, [slugSimilarity, pathSimilarity, idSimilarity]);
12
+ import { phraseSimilarity } from "../../../utils/phrase-similarity";
13
+ import { CONSTANTS } from "../../constants";
14
+ import { pages } from "./pages";
15
+ var pagePhraseSimilarity = function (page, phrase) {
16
+ var slugSimilarity = phraseSimilarity(phrase, page.slug);
17
+ var pathSimilarity = phraseSimilarity(phrase, page.path);
18
+ var idSimilarity = phraseSimilarity(phrase, page.id);
19
+ var titleSimilarity = page.title ? phraseSimilarity(phrase, page.title) : 0;
20
+ return Math.max(slugSimilarity, pathSimilarity, idSimilarity, titleSimilarity);
37
21
  };
38
22
  var redirectPhraseSimilarity = function (redirect, phrase) {
39
- var pathSimilarity = stringSimilarity(phrase, redirect.path);
40
- var idSimilarity = stringSimilarity(phrase, redirect.sys.id);
41
- return Math.max.apply(Math, [pathSimilarity, idSimilarity]);
42
- };
43
- var localizedRecursiveSearch = function (localeCode, localizedSitemap, phrase, parentPath, currentPage) {
44
- var getPath = function (page) {
45
- return page.sys.id === localizedSitemap.root.sys.id
46
- ? parentPath
47
- : parentPath + '/' + page.slug;
48
- };
49
- var phraseSimilarity = currentPage.type === 'page'
50
- ? pagePhraseSimilarity(currentPage, getPath(currentPage), phrase)
51
- : redirectPhraseSimilarity(currentPage, phrase);
52
- var childrenResults = currentPage.type === 'page'
53
- ? currentPage.childPages.flatMap(function (_a) {
54
- var id = _a.sys.id;
55
- var childPage = localizedSitemap.sitemap.get(id);
56
- var path = getPath(currentPage);
57
- return childPage
58
- ? localizedRecursiveSearch(localeCode, localizedSitemap, phrase, path, childPage)
59
- : [];
60
- })
61
- : [];
62
- var res = [];
63
- if (phraseSimilarity >= minPhraseSimilarity) {
64
- res.push({
65
- phraseSimilarity: phraseSimilarity,
66
- page: currentPage.type === 'page'
67
- ? toArboretumPageWithMissingData(localeCode)(currentPage, undefined, undefined)
68
- : redirectToArboretumPage(localeCode)(currentPage),
69
- });
70
- }
71
- res.push.apply(res, __spreadArray([], __read(childrenResults), false));
72
- return res;
23
+ var pathSimilarity = phraseSimilarity(phrase, redirect.path);
24
+ var idSimilarity = phraseSimilarity(phrase, redirect.id);
25
+ var titleSimilarity = redirect.title
26
+ ? phraseSimilarity(phrase, redirect.title)
27
+ : 0;
28
+ return Math.max(pathSimilarity, idSimilarity, titleSimilarity);
73
29
  };
74
30
  // Primitive implementation that can be inefficient for large sitemaps
75
31
  export var search = function (ctx) {
76
32
  return function (phrase, localeCode, limit) {
77
- return __spreadArray([], __read(ctx.data.locales.values()), false).filter(function (locale) { return (localeCode ? locale.code === localeCode : true); })
78
- .flatMap(function (locale) {
79
- var sitemap = localizedSitemapFromCacheOrBuildEff(ctx, locale);
80
- var homePage = sitemap._tag === 'Right'
81
- ? sitemap.right.sitemap.get(sitemap.right.root.sys.id)
82
- : undefined;
83
- if (sitemap._tag === 'Right' && homePage) {
84
- return localizedRecursiveSearch(locale.code, sitemap.right, phrase, "/".concat(locale.code), homePage);
85
- }
86
- else {
87
- return [];
88
- }
89
- })
90
- .sort(function (a, b) { return b.phraseSimilarity - a.phraseSimilarity; })
91
- .slice(0, limit || defaultLimit)
92
- .map(function (_a) {
93
- var page = _a.page;
94
- return page;
95
- });
33
+ var allPages = pages(ctx)({ localeCode: localeCode });
34
+ if (allPages._tag === "Right") {
35
+ return allPages.right
36
+ .map(function (page) {
37
+ var searchScore = page.type === "page"
38
+ ? pagePhraseSimilarity(page, phrase)
39
+ : redirectPhraseSimilarity(page, phrase);
40
+ return __assign(__assign({}, page), { searchScore: searchScore });
41
+ })
42
+ .filter(function (_a) {
43
+ var searchScore = _a.searchScore;
44
+ return searchScore >= CONSTANTS.search.minSearchScore;
45
+ })
46
+ .sort(function (a, b) { return b.searchScore - a.searchScore; })
47
+ .slice(0, limit);
48
+ }
49
+ else {
50
+ return [];
51
+ }
96
52
  };
97
53
  };
@@ -0,0 +1,6 @@
1
+ import { stringSimilarity } from "./string-similarity";
2
+ export var phraseSimilarity = function (phrase, value) {
3
+ var s1 = stringSimilarity(phrase, value);
4
+ var s2 = stringSimilarity(phrase, value.slice(0, phrase.length));
5
+ return s1 > s2 ? s1 : s2;
6
+ };
@@ -21,7 +21,7 @@ export function stringSimilarity(str1, str2, gramSize) {
21
21
  var e_1, _a;
22
22
  if (gramSize === void 0) { gramSize = 2; }
23
23
  function getNGrams(s, len) {
24
- s = ' '.repeat(len - 1) + s.toLowerCase() + ' '.repeat(len - 1);
24
+ s = " ".repeat(len - 1) + s.toLowerCase() + " ".repeat(len - 1);
25
25
  var v = new Array(s.length - len + 1);
26
26
  for (var i = 0; i < v.length; i++) {
27
27
  v[i] = s.slice(i, i + len);
@@ -81,7 +81,6 @@ var pages_by_tag_id_1 = require("./sitemap/methods/pages-by-tag-id");
81
81
  var pages_by_ids_1 = require("./sitemap/methods/pages-by-ids");
82
82
  var pages_by_paths_1 = require("./sitemap/methods/pages-by-paths");
83
83
  var regenerate_1 = require("./sitemap/methods/regenerate");
84
- var search_1 = require("./sitemap/methods/search");
85
84
  var status_1 = require("./sitemap/methods/status");
86
85
  var fp_utils_1 = require("../utils/fp-utils");
87
86
  var pages_1 = require("./sitemap/methods/pages");
@@ -89,6 +88,9 @@ var build_sitemap_eagerly_1 = require("./sitemap/helpers/build-sitemap-eagerly")
89
88
  var cached_data_1 = require("./sitemap/methods/cached-data");
90
89
  var build_pages_by_tag_eagerly_1 = require("./sitemap/helpers/build-pages-by-tag-eagerly");
91
90
  var home_page_1 = require("./sitemap/methods/home-page");
91
+ var orphaned_pages_1 = require("./sitemap/methods/orphaned-pages");
92
+ var search_orphaned_pages_1 = require("./sitemap/methods/search-orphaned-pages");
93
+ var search_1 = require("./sitemap/methods/search");
92
94
  var pageTagIdPrefix = "page";
93
95
  var pageHomeTagId = "".concat(pageTagIdPrefix, "Home");
94
96
  var localeTagIdPrefix = "locale";
@@ -171,6 +173,8 @@ var createArboretumClient = function (config) { return __awaiter(void 0, void 0,
171
173
  search: (0, search_1.search)(ctx_1),
172
174
  status: (0, status_1.status)(ctx_1),
173
175
  cachedData: (0, cached_data_1.cachedData)(ctx_1),
176
+ orphanedPages: (0, orphaned_pages_1.orphanedPages)(ctx_1),
177
+ searchOrphanedPages: (0, search_orphaned_pages_1.searchOrphanedPages)(ctx_1),
174
178
  },
175
179
  warnings: dataE.right.warnings,
176
180
  }];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONSTANTS = void 0;
4
+ exports.CONSTANTS = {
5
+ search: {
6
+ minSearchScore: 0.4,
7
+ },
8
+ };
@@ -36,7 +36,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
36
36
  return to.concat(ar || Array.prototype.slice.call(from));
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.localizedSitemapFromCacheOrBuildEff = exports.buildLocalizedSitemap = void 0;
39
+ exports.localizedSitemapFromCacheOrBuildEff = exports.buildLocalizedSitemap = exports.buildPage = void 0;
40
40
  var fp_utils_1 = require("../../../utils/fp-utils");
41
41
  var page_entry_adapter_1 = require("../adapters/page-entry-adapter");
42
42
  var redirect_entry_adapter_1 = require("../adapters/redirect-entry-adapter");
@@ -72,6 +72,28 @@ var findPageFieldF = function (data, options, pageContentTypeId) {
72
72
  : undefined;
73
73
  };
74
74
  };
75
+ var buildPage = function (data, options, childrenRefsByPageId, locale, parent, pageEntry) {
76
+ var _a;
77
+ var pageContentTypeConfig = options.pageContentTypes[pageEntry.sys.contentType.sys.id];
78
+ var findPageField = findPageFieldF(data, options, pageEntry.sys.contentType.sys.id);
79
+ var slugField = findPageField(pageContentTypeConfig.slugFieldId);
80
+ var titleField = pageContentTypeConfig.titleFieldId
81
+ ? findPageField(pageContentTypeConfig.titleFieldId)
82
+ : undefined;
83
+ var childPagesField = pageContentTypeConfig.childPagesFieldId
84
+ ? findPageField(pageContentTypeConfig.childPagesFieldId)
85
+ : undefined;
86
+ var fieldValue = (0, localize_contentful_field_1.localizeField)(data, locale);
87
+ var childrenRefs = childrenRefsByPageId
88
+ ? childrenRefsByPageId.get(pageEntry.sys.id) || []
89
+ : childPagesField
90
+ ? ((_a = fieldValue(childPagesField.localized, pageEntry.fields[childPagesField.id])) === null || _a === void 0 ? void 0 : _a.flatMap(function (childPage) { var _a; return ((_a = childPage === null || childPage === void 0 ? void 0 : childPage.sys) === null || _a === void 0 ? void 0 : _a.id) ? [{ sys: { id: childPage === null || childPage === void 0 ? void 0 : childPage.sys.id } }] : []; })) || []
91
+ : [];
92
+ return slugField
93
+ ? (0, page_entry_adapter_1.pageEntryAdapter)(data, options, slugField, titleField, childrenRefs, locale, parent, pageEntry)
94
+ : undefined;
95
+ };
96
+ exports.buildPage = buildPage;
75
97
  var getChildrenRefsByParentId = function (data, locale, options) {
76
98
  var pages = data.pages;
77
99
  var acc = new Map();
@@ -101,26 +123,8 @@ var getChildrenRefsByParentId = function (data, locale, options) {
101
123
  return acc;
102
124
  };
103
125
  var buildLocalizedSitemapArrRecursively = function (data, options, locale, parent, childrenRefsByPageId, pageEntry, acc) {
104
- var _a;
105
126
  var pages = data.pages;
106
- var pageContentTypeConfig = options.pageContentTypes[pageEntry.sys.contentType.sys.id];
107
- var findPageField = findPageFieldF(data, options, pageEntry.sys.contentType.sys.id);
108
- var slugField = findPageField(pageContentTypeConfig.slugFieldId);
109
- var titleField = pageContentTypeConfig.titleFieldId
110
- ? findPageField(pageContentTypeConfig.titleFieldId)
111
- : undefined;
112
- var childPagesField = pageContentTypeConfig.childPagesFieldId
113
- ? findPageField(pageContentTypeConfig.childPagesFieldId)
114
- : undefined;
115
- var fieldValue = (0, localize_contentful_field_1.localizeField)(data, locale);
116
- var childrenRefs = childrenRefsByPageId
117
- ? childrenRefsByPageId.get(pageEntry.sys.id) || []
118
- : childPagesField
119
- ? ((_a = fieldValue(childPagesField.localized, pageEntry.fields[childPagesField.id])) === null || _a === void 0 ? void 0 : _a.flatMap(function (childPage) { var _a; return ((_a = childPage === null || childPage === void 0 ? void 0 : childPage.sys) === null || _a === void 0 ? void 0 : _a.id) ? [{ sys: { id: childPage === null || childPage === void 0 ? void 0 : childPage.sys.id } }] : []; })) || []
120
- : [];
121
- var page = slugField
122
- ? (0, page_entry_adapter_1.pageEntryAdapter)(data, options, slugField, titleField, childrenRefs, locale, parent, pageEntry)
123
- : undefined;
127
+ var page = (0, exports.buildPage)(data, options, childrenRefsByPageId, locale, parent, pageEntry);
124
128
  if (page) {
125
129
  var validChildPages_1 = page.childPages.filter(function (c) { return pages.get(c.sys.id) && !acc.get(c.sys.id); });
126
130
  var redirectChildPages = (0, is_root_1.isRoot)(page) && options.redirectContentType
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
30
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
31
+ if (ar || !(i in from)) {
32
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
33
+ ar[i] = from[i];
34
+ }
35
+ }
36
+ return to.concat(ar || Array.prototype.slice.call(from));
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.orphanedPages = void 0;
40
+ var fp_utils_1 = require("../../../utils/fp-utils");
41
+ var build_localized_sitemap_1 = require("../helpers/build-localized-sitemap");
42
+ var to_arboretum_page_adapter_1 = require("../adapters/to-arboretum-page-adapter");
43
+ var singleOrAllLocalesE = function (locales) {
44
+ return function (localeCode) {
45
+ if (localeCode) {
46
+ var locale = locales.get(localeCode);
47
+ return locale
48
+ ? (0, fp_utils_1.right)([locale])
49
+ : (0, fp_utils_1.left)("Failed to find locale by code: ".concat(localeCode));
50
+ }
51
+ else {
52
+ return (0, fp_utils_1.right)(__spreadArray([], __read(locales.values()), false));
53
+ }
54
+ };
55
+ };
56
+ var orphanedPages = function (ctx) {
57
+ return function (options) {
58
+ var localeCode = options === null || options === void 0 ? void 0 : options.localeCode;
59
+ var localesE = singleOrAllLocalesE(ctx.data.locales)(localeCode);
60
+ var skip = typeof (options === null || options === void 0 ? void 0 : options.skip) !== "undefined" ? options.skip : 0;
61
+ if (localesE._tag === "Right") {
62
+ var pages = localesE.right
63
+ .flatMap(function (locale) {
64
+ var localizedSitemapE = (0, build_localized_sitemap_1.localizedSitemapFromCacheOrBuildEff)(ctx, locale);
65
+ var pages = localizedSitemapE._tag === "Right"
66
+ ? __spreadArray([], __read(ctx.data.pages.values()), false).flatMap(function (p) {
67
+ var sitemapPage = localizedSitemapE.right.sitemap.get(p.sys.id);
68
+ if (sitemapPage) {
69
+ return [];
70
+ }
71
+ else {
72
+ var page = (0, build_localized_sitemap_1.buildPage)(ctx.data, ctx.options, undefined, locale, undefined, p);
73
+ var arboretumPage = page
74
+ ? (0, to_arboretum_page_adapter_1.toArboretumPage)(localizedSitemapE.right, locale.code, {})(page)
75
+ : undefined;
76
+ return arboretumPage
77
+ ? [
78
+ __assign(__assign({}, arboretumPage), { path: undefined, totalDirectChildrenCount: undefined, ancestors: undefined, children: undefined }),
79
+ ]
80
+ : [];
81
+ }
82
+ })
83
+ : [];
84
+ return pages;
85
+ })
86
+ .sort(function (p1, p2) {
87
+ if (p1.id < p2.id)
88
+ return -1;
89
+ if (p1.id > p2.id)
90
+ return 1;
91
+ return 0;
92
+ })
93
+ .slice(skip, options === null || options === void 0 ? void 0 : options.limit);
94
+ return (0, fp_utils_1.right)(pages);
95
+ }
96
+ else {
97
+ return localesE;
98
+ }
99
+ };
100
+ };
101
+ exports.orphanedPages = orphanedPages;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.searchOrphanedPages = void 0;
15
+ var phrase_similarity_1 = require("../../../utils/phrase-similarity");
16
+ var constants_1 = require("../../constants");
17
+ var orphaned_pages_1 = require("./orphaned-pages");
18
+ var orphanedPagePhraseSimilarity = function (page, phrase) {
19
+ var slugSimilarity = (0, phrase_similarity_1.phraseSimilarity)(phrase, page.slug);
20
+ var idSimilarity = (0, phrase_similarity_1.phraseSimilarity)(phrase, page.id);
21
+ var titleSimilarity = page.title ? (0, phrase_similarity_1.phraseSimilarity)(phrase, page.title) : 0;
22
+ return Math.max(slugSimilarity, idSimilarity, titleSimilarity);
23
+ };
24
+ var searchOrphanedPages = function (ctx) {
25
+ return function (phrase, localeCode, limit) {
26
+ var pages = (0, orphaned_pages_1.orphanedPages)(ctx)({ localeCode: localeCode });
27
+ if (pages._tag === "Right") {
28
+ return pages.right
29
+ .map(function (page) {
30
+ var searchScore = orphanedPagePhraseSimilarity(page, phrase);
31
+ return __assign(__assign({}, page), { searchScore: searchScore });
32
+ })
33
+ .filter(function (_a) {
34
+ var searchScore = _a.searchScore;
35
+ return searchScore >= constants_1.CONSTANTS.search.minSearchScore;
36
+ })
37
+ .sort(function (a, b) { return b.searchScore - a.searchScore; })
38
+ .slice(0, limit);
39
+ }
40
+ else {
41
+ return [];
42
+ }
43
+ };
44
+ };
45
+ exports.searchOrphanedPages = searchOrphanedPages;
@@ -1,101 +1,57 @@
1
1
  "use strict";
2
- var __read = (this && this.__read) || function (o, n) {
3
- var m = typeof Symbol === "function" && o[Symbol.iterator];
4
- if (!m) return o;
5
- var i = m.call(o), r, ar = [], e;
6
- try {
7
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
- }
9
- catch (error) { e = { error: error }; }
10
- finally {
11
- try {
12
- if (r && !r.done && (m = i["return"])) m.call(i);
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
13
8
  }
14
- finally { if (e) throw e.error; }
15
- }
16
- return ar;
17
- };
18
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
- if (ar || !(i in from)) {
21
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
- ar[i] = from[i];
23
- }
24
- }
25
- return to.concat(ar || Array.prototype.slice.call(from));
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
26
12
  };
27
13
  Object.defineProperty(exports, "__esModule", { value: true });
28
14
  exports.search = void 0;
29
- var string_similarity_1 = require("../../../utils/string-similarity");
30
- var build_localized_sitemap_1 = require("../helpers/build-localized-sitemap");
31
- var to_arboretum_page_with_missing_data_adapter_1 = require("../adapters/to-arboretum-page-with-missing-data-adapter");
32
- var redirect_to_arboretum_page_adapter_1 = require("../adapters/redirect-to-arboretum-page-adapter");
33
- var minPhraseSimilarity = 0.4;
34
- var defaultLimit = 20;
35
- var pagePhraseSimilarity = function (page, path, phrase) {
36
- var slugSimilarity = (0, string_similarity_1.stringSimilarity)(phrase, page.slug);
37
- var pathSimilarity = (0, string_similarity_1.stringSimilarity)(phrase, path);
38
- var idSimilarity = (0, string_similarity_1.stringSimilarity)(phrase, page.sys.id);
39
- return Math.max.apply(Math, [slugSimilarity, pathSimilarity, idSimilarity]);
15
+ var phrase_similarity_1 = require("../../../utils/phrase-similarity");
16
+ var constants_1 = require("../../constants");
17
+ var pages_1 = require("./pages");
18
+ var pagePhraseSimilarity = function (page, phrase) {
19
+ var slugSimilarity = (0, phrase_similarity_1.phraseSimilarity)(phrase, page.slug);
20
+ var pathSimilarity = (0, phrase_similarity_1.phraseSimilarity)(phrase, page.path);
21
+ var idSimilarity = (0, phrase_similarity_1.phraseSimilarity)(phrase, page.id);
22
+ var titleSimilarity = page.title ? (0, phrase_similarity_1.phraseSimilarity)(phrase, page.title) : 0;
23
+ return Math.max(slugSimilarity, pathSimilarity, idSimilarity, titleSimilarity);
40
24
  };
41
25
  var redirectPhraseSimilarity = function (redirect, phrase) {
42
- var pathSimilarity = (0, string_similarity_1.stringSimilarity)(phrase, redirect.path);
43
- var idSimilarity = (0, string_similarity_1.stringSimilarity)(phrase, redirect.sys.id);
44
- return Math.max.apply(Math, [pathSimilarity, idSimilarity]);
45
- };
46
- var localizedRecursiveSearch = function (localeCode, localizedSitemap, phrase, parentPath, currentPage) {
47
- var getPath = function (page) {
48
- return page.sys.id === localizedSitemap.root.sys.id
49
- ? parentPath
50
- : parentPath + '/' + page.slug;
51
- };
52
- var phraseSimilarity = currentPage.type === 'page'
53
- ? pagePhraseSimilarity(currentPage, getPath(currentPage), phrase)
54
- : redirectPhraseSimilarity(currentPage, phrase);
55
- var childrenResults = currentPage.type === 'page'
56
- ? currentPage.childPages.flatMap(function (_a) {
57
- var id = _a.sys.id;
58
- var childPage = localizedSitemap.sitemap.get(id);
59
- var path = getPath(currentPage);
60
- return childPage
61
- ? localizedRecursiveSearch(localeCode, localizedSitemap, phrase, path, childPage)
62
- : [];
63
- })
64
- : [];
65
- var res = [];
66
- if (phraseSimilarity >= minPhraseSimilarity) {
67
- res.push({
68
- phraseSimilarity: phraseSimilarity,
69
- page: currentPage.type === 'page'
70
- ? (0, to_arboretum_page_with_missing_data_adapter_1.toArboretumPageWithMissingData)(localeCode)(currentPage, undefined, undefined)
71
- : (0, redirect_to_arboretum_page_adapter_1.redirectToArboretumPage)(localeCode)(currentPage),
72
- });
73
- }
74
- res.push.apply(res, __spreadArray([], __read(childrenResults), false));
75
- return res;
26
+ var pathSimilarity = (0, phrase_similarity_1.phraseSimilarity)(phrase, redirect.path);
27
+ var idSimilarity = (0, phrase_similarity_1.phraseSimilarity)(phrase, redirect.id);
28
+ var titleSimilarity = redirect.title
29
+ ? (0, phrase_similarity_1.phraseSimilarity)(phrase, redirect.title)
30
+ : 0;
31
+ return Math.max(pathSimilarity, idSimilarity, titleSimilarity);
76
32
  };
77
33
  // Primitive implementation that can be inefficient for large sitemaps
78
34
  var search = function (ctx) {
79
35
  return function (phrase, localeCode, limit) {
80
- return __spreadArray([], __read(ctx.data.locales.values()), false).filter(function (locale) { return (localeCode ? locale.code === localeCode : true); })
81
- .flatMap(function (locale) {
82
- var sitemap = (0, build_localized_sitemap_1.localizedSitemapFromCacheOrBuildEff)(ctx, locale);
83
- var homePage = sitemap._tag === 'Right'
84
- ? sitemap.right.sitemap.get(sitemap.right.root.sys.id)
85
- : undefined;
86
- if (sitemap._tag === 'Right' && homePage) {
87
- return localizedRecursiveSearch(locale.code, sitemap.right, phrase, "/".concat(locale.code), homePage);
88
- }
89
- else {
90
- return [];
91
- }
92
- })
93
- .sort(function (a, b) { return b.phraseSimilarity - a.phraseSimilarity; })
94
- .slice(0, limit || defaultLimit)
95
- .map(function (_a) {
96
- var page = _a.page;
97
- return page;
98
- });
36
+ var allPages = (0, pages_1.pages)(ctx)({ localeCode: localeCode });
37
+ if (allPages._tag === "Right") {
38
+ return allPages.right
39
+ .map(function (page) {
40
+ var searchScore = page.type === "page"
41
+ ? pagePhraseSimilarity(page, phrase)
42
+ : redirectPhraseSimilarity(page, phrase);
43
+ return __assign(__assign({}, page), { searchScore: searchScore });
44
+ })
45
+ .filter(function (_a) {
46
+ var searchScore = _a.searchScore;
47
+ return searchScore >= constants_1.CONSTANTS.search.minSearchScore;
48
+ })
49
+ .sort(function (a, b) { return b.searchScore - a.searchScore; })
50
+ .slice(0, limit);
51
+ }
52
+ else {
53
+ return [];
54
+ }
99
55
  };
100
56
  };
101
57
  exports.search = search;
@@ -109,7 +109,14 @@ export type ArboretumPageT = ArboretumPageBaseT & {
109
109
  [key: string]: any;
110
110
  };
111
111
  };
112
+ export type OrphanedArboretumPageT = Omit<ArboretumPageT, "path" | "totalDirectChildrenCount" | "ancestors" | "children">;
113
+ export type OrphanedArboretumPageSearchResultT = OrphanedArboretumPageT & {
114
+ searchScore: number;
115
+ };
112
116
  export type ArboretumPageNodeT = ArboretumPageT | ArboretumRedirectT | ArboretumAliasT;
117
+ export type ArboretumPageSearchResultNodeT = ArboretumPageNodeT & {
118
+ searchScore: number;
119
+ };
113
120
  export type OptionsT = {
114
121
  withChildren?: boolean;
115
122
  withAncestors?: boolean;
@@ -132,7 +139,7 @@ export type ArboretumClientT = {
132
139
  status: "OK";
133
140
  warnings?: Array<string>;
134
141
  }>;
135
- search: (phrase: string, localeCode?: string, limit?: number) => Array<ArboretumPageNodeT>;
142
+ search: (phrase: string, localeCode?: string, limit?: number) => Array<ArboretumPageSearchResultNodeT>;
136
143
  status: () => {
137
144
  lastUpdatedAt: string;
138
145
  pagesCount: number;
@@ -141,5 +148,11 @@ export type ArboretumClientT = {
141
148
  regenerationInProgress: boolean;
142
149
  };
143
150
  cachedData: () => CachedDataT;
151
+ orphanedPages: (options?: {
152
+ limit?: number;
153
+ skip?: number;
154
+ localeCode?: string;
155
+ }) => Either<string, Array<OrphanedArboretumPageT>>;
156
+ searchOrphanedPages: (phrase: string, localeCode?: string, limit?: number) => Array<OrphanedArboretumPageSearchResultT>;
144
157
  };
145
158
  export {};
@@ -0,0 +1,5 @@
1
+ export declare const CONSTANTS: {
2
+ search: {
3
+ minSearchScore: number;
4
+ };
5
+ };
@@ -1,5 +1,13 @@
1
1
  import { Either } from "../../../utils/fp-utils";
2
- import { ArboretumClientCtx, LocalizedSitemapT } from "../../arboretum-client.impl";
3
- import { LocaleT } from "../../../clients/contentful-client/contentful-client";
2
+ import { ArboretumClientCtx, LocalizedSitemapT, PageT } from "../../arboretum-client.impl";
3
+ import { EntryT, LocaleT } from "../../../clients/contentful-client/contentful-client";
4
+ import { SitemapDataT } from "../../data/sitemap-data";
5
+ export declare const buildPage: (data: Pick<SitemapDataT, "locales" | "defaultLocaleCode" | "pages" | "contentTypes">, options: ArboretumClientCtx["options"], childrenRefsByPageId: Map<string, Array<{
6
+ sys: {
7
+ id: string;
8
+ };
9
+ }>> | undefined, locale: LocaleT, parent: (NonNullable<PageT["parent"]> & {
10
+ path: string;
11
+ }) | undefined, pageEntry: EntryT) => PageT | undefined;
4
12
  export declare const buildLocalizedSitemap: (data: Pick<ArboretumClientCtx["data"], "homePagesByTagId" | "pages" | "contentTypes" | "defaultLocaleCode" | "locales" | "redirects">, options: ArboretumClientCtx["options"], pageHomeTagId: ArboretumClientCtx["pageHomeTagId"], locale: LocaleT) => Either<string, LocalizedSitemapT>;
5
13
  export declare const localizedSitemapFromCacheOrBuildEff: (ctx: Pick<ArboretumClientCtx, "options" | "data" | "pageHomeTagId" | "sitemap">, locale: LocaleT) => Either<string, LocalizedSitemapT>;
@@ -0,0 +1,3 @@
1
+ import { ArboretumClientT } from "../../../arboretum-client";
2
+ import { ArboretumClientCtx } from "../../arboretum-client.impl";
3
+ export declare const orphanedPages: (ctx: Pick<ArboretumClientCtx, "data" | "sitemap" | "options" | "pageHomeTagId">) => ArboretumClientT["orphanedPages"];
@@ -0,0 +1,3 @@
1
+ import { ArboretumClientT } from "../../../arboretum-client";
2
+ import { ArboretumClientCtx } from "../../arboretum-client.impl";
3
+ export declare const searchOrphanedPages: (ctx: Pick<ArboretumClientCtx, "data" | "sitemap" | "options" | "pageHomeTagId">) => ArboretumClientT["searchOrphanedPages"];
@@ -1,3 +1,3 @@
1
- import { ArboretumClientT } from '../../../arboretum-client';
2
- import { ArboretumClientCtx } from '../../arboretum-client.impl';
3
- export declare const search: (ctx: Pick<ArboretumClientCtx, 'data' | 'sitemap' | 'options' | 'pageHomeTagId'>) => ArboretumClientT['search'];
1
+ import { ArboretumClientT } from "../../../arboretum-client";
2
+ import { ArboretumClientCtx } from "../../arboretum-client.impl";
3
+ export declare const search: (ctx: Pick<ArboretumClientCtx, "data" | "sitemap" | "options" | "pageHomeTagId">) => ArboretumClientT["search"];
@@ -0,0 +1 @@
1
+ export declare const phraseSimilarity: (phrase: string, value: string) => number;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.phraseSimilarity = void 0;
4
+ var string_similarity_1 = require("./string-similarity");
5
+ var phraseSimilarity = function (phrase, value) {
6
+ var s1 = (0, string_similarity_1.stringSimilarity)(phrase, value);
7
+ var s2 = (0, string_similarity_1.stringSimilarity)(phrase, value.slice(0, phrase.length));
8
+ return s1 > s2 ? s1 : s2;
9
+ };
10
+ exports.phraseSimilarity = phraseSimilarity;
@@ -24,7 +24,7 @@ function stringSimilarity(str1, str2, gramSize) {
24
24
  var e_1, _a;
25
25
  if (gramSize === void 0) { gramSize = 2; }
26
26
  function getNGrams(s, len) {
27
- s = ' '.repeat(len - 1) + s.toLowerCase() + ' '.repeat(len - 1);
27
+ s = " ".repeat(len - 1) + s.toLowerCase() + " ".repeat(len - 1);
28
28
  var v = new Array(s.length - len + 1);
29
29
  for (var i = 0; i < v.length; i++) {
30
30
  v[i] = s.slice(i, i + len);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bright.global/arboretum-sdk",
3
- "version": "0.1.0-rc.2",
3
+ "version": "0.1.0-rc.4",
4
4
  "license": "MIT",
5
5
  "description": "The sitemap for contentful",
6
6
  "dependencies": {},