@bright.global/arboretum-sdk 0.1.0-rc.3 → 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.
- package/dist/es6/impl/arboretum-client.impl.js +3 -1
- package/dist/es6/impl/constants.js +5 -0
- package/dist/es6/impl/sitemap/methods/search-orphaned-pages.js +41 -0
- package/dist/es6/impl/sitemap/methods/search.js +43 -87
- package/dist/es6/utils/phrase-similarity.js +6 -0
- package/dist/es6/utils/string-similarity.js +1 -1
- package/dist/impl/arboretum-client.impl.js +3 -1
- package/dist/impl/constants.js +8 -0
- package/dist/impl/sitemap/methods/search-orphaned-pages.js +45 -0
- package/dist/impl/sitemap/methods/search.js +43 -87
- package/dist/types/arboretum-client.d.ts +10 -2
- package/dist/types/impl/constants.d.ts +5 -0
- package/dist/types/impl/sitemap/methods/search-orphaned-pages.d.ts +3 -0
- package/dist/types/impl/sitemap/methods/search.d.ts +3 -3
- package/dist/types/utils/phrase-similarity.d.ts +1 -0
- package/dist/utils/phrase-similarity.js +10 -0
- package/dist/utils/string-similarity.js +1 -1
- package/package.json +1 -1
|
@@ -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";
|
|
@@ -87,6 +86,8 @@ 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";
|
|
89
88
|
import { orphanedPages } from "./sitemap/methods/orphaned-pages";
|
|
89
|
+
import { searchOrphanedPages } from "./sitemap/methods/search-orphaned-pages";
|
|
90
|
+
import { search } from "./sitemap/methods/search";
|
|
90
91
|
var pageTagIdPrefix = "page";
|
|
91
92
|
var pageHomeTagId = "".concat(pageTagIdPrefix, "Home");
|
|
92
93
|
var localeTagIdPrefix = "locale";
|
|
@@ -170,6 +171,7 @@ export var createArboretumClient = function (config) { return __awaiter(void 0,
|
|
|
170
171
|
status: status(ctx_1),
|
|
171
172
|
cachedData: cachedData(ctx_1),
|
|
172
173
|
orphanedPages: orphanedPages(ctx_1),
|
|
174
|
+
searchOrphanedPages: searchOrphanedPages(ctx_1),
|
|
173
175
|
},
|
|
174
176
|
warnings: dataE.right.warnings,
|
|
175
177
|
}];
|
|
@@ -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
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
14
|
-
}
|
|
15
|
-
return
|
|
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 {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
|
|
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 =
|
|
40
|
-
var idSimilarity =
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return
|
|
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
|
};
|
|
@@ -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 =
|
|
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");
|
|
@@ -90,6 +89,8 @@ 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");
|
|
92
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");
|
|
93
94
|
var pageTagIdPrefix = "page";
|
|
94
95
|
var pageHomeTagId = "".concat(pageTagIdPrefix, "Home");
|
|
95
96
|
var localeTagIdPrefix = "locale";
|
|
@@ -173,6 +174,7 @@ var createArboretumClient = function (config) { return __awaiter(void 0, void 0,
|
|
|
173
174
|
status: (0, status_1.status)(ctx_1),
|
|
174
175
|
cachedData: (0, cached_data_1.cachedData)(ctx_1),
|
|
175
176
|
orphanedPages: (0, orphaned_pages_1.orphanedPages)(ctx_1),
|
|
177
|
+
searchOrphanedPages: (0, search_orphaned_pages_1.searchOrphanedPages)(ctx_1),
|
|
176
178
|
},
|
|
177
179
|
warnings: dataE.right.warnings,
|
|
178
180
|
}];
|
|
@@ -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
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
15
|
-
}
|
|
16
|
-
return
|
|
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
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
|
|
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,
|
|
43
|
-
var idSimilarity = (0,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
return
|
|
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<
|
|
142
|
+
search: (phrase: string, localeCode?: string, limit?: number) => Array<ArboretumPageSearchResultNodeT>;
|
|
136
143
|
status: () => {
|
|
137
144
|
lastUpdatedAt: string;
|
|
138
145
|
pagesCount: number;
|
|
@@ -145,6 +152,7 @@ export type ArboretumClientT = {
|
|
|
145
152
|
limit?: number;
|
|
146
153
|
skip?: number;
|
|
147
154
|
localeCode?: string;
|
|
148
|
-
}) => Either<string, Array<
|
|
155
|
+
}) => Either<string, Array<OrphanedArboretumPageT>>;
|
|
156
|
+
searchOrphanedPages: (phrase: string, localeCode?: string, limit?: number) => Array<OrphanedArboretumPageSearchResultT>;
|
|
149
157
|
};
|
|
150
158
|
export {};
|
|
@@ -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
|
|
2
|
-
import { ArboretumClientCtx } from
|
|
3
|
-
export declare const search: (ctx: Pick<ArboretumClientCtx,
|
|
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 =
|
|
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);
|