@everipedia/iq-utils 0.2.11 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/build/main/data/constants.d.ts +6 -0
- package/build/main/data/constants.js +10 -0
- package/build/main/index.d.ts +5 -4
- package/build/main/index.js +2 -1
- package/build/main/lib/checkWikiValidity.d.ts +19 -0
- package/build/main/lib/checkWikiValidity.js +198 -0
- package/build/main/lib/isDeepEqual.d.ts +2 -1
- package/build/main/lib/isDeepEqual.js +40 -34
- package/build/main/lib/wikiScore.d.ts +1 -1
- package/build/main/lib/wikiScore.js +16 -15
- package/build/module/data/constants.d.ts +6 -0
- package/build/module/data/constants.js +7 -0
- package/build/module/index.d.ts +5 -4
- package/build/module/index.js +6 -5
- package/build/module/lib/checkWikiValidity.d.ts +19 -0
- package/build/module/lib/checkWikiValidity.js +189 -0
- package/build/module/lib/isDeepEqual.d.ts +2 -1
- package/build/module/lib/isDeepEqual.js +40 -34
- package/build/module/lib/wikiScore.d.ts +1 -1
- package/build/module/lib/wikiScore.js +17 -16
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
## 0.2.8
|
|
2
2
|
|
|
3
|
+
## 0.3.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 3add847: Add export for wiki validation
|
|
8
|
+
|
|
9
|
+
## 0.3.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- a38f82b: Adds is deep equal refactor
|
|
14
|
+
- 7c28dbb: Adds is valid wiki checks
|
|
15
|
+
|
|
3
16
|
## 0.2.11
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const WIKI_SUMMARY_MAX_LENGTH = 255;
|
|
2
|
+
export declare const WIKI_CONTENT_MIN_WORDS = 100;
|
|
3
|
+
export declare const WIKI_TITLE_MAX_LENGTH = 60;
|
|
4
|
+
export declare const MEDIA_UPLOAD_PENDING_SUFFIX = "default";
|
|
5
|
+
export declare const MAX_MEDIA_COUNT = 25;
|
|
6
|
+
export declare const IPFS_HASH_LENGTH = 46;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IPFS_HASH_LENGTH = exports.MAX_MEDIA_COUNT = exports.MEDIA_UPLOAD_PENDING_SUFFIX = exports.WIKI_TITLE_MAX_LENGTH = exports.WIKI_CONTENT_MIN_WORDS = exports.WIKI_SUMMARY_MAX_LENGTH = void 0;
|
|
4
|
+
exports.WIKI_SUMMARY_MAX_LENGTH = 255;
|
|
5
|
+
exports.WIKI_CONTENT_MIN_WORDS = 100;
|
|
6
|
+
exports.WIKI_TITLE_MAX_LENGTH = 60;
|
|
7
|
+
exports.MEDIA_UPLOAD_PENDING_SUFFIX = "default";
|
|
8
|
+
exports.MAX_MEDIA_COUNT = 25;
|
|
9
|
+
exports.IPFS_HASH_LENGTH = 46;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQzlCLFFBQUEsc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQzdCLFFBQUEscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQUEsMkJBQTJCLEdBQUcsU0FBUyxDQUFDO0FBQ3hDLFFBQUEsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUNyQixRQUFBLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyJ9
|
package/build/main/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from "./lib/wikiScore";
|
|
2
|
+
export * from "./lib/isDeepEqual";
|
|
3
|
+
export * from "./lib/checkWikiValidity";
|
|
4
|
+
export * from "./types/wiki";
|
|
5
|
+
export * from "./types/wikiBuilder";
|
package/build/main/index.js
CHANGED
|
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./lib/wikiScore"), exports);
|
|
18
18
|
__exportStar(require("./lib/isDeepEqual"), exports);
|
|
19
|
+
__exportStar(require("./lib/checkWikiValidity"), exports);
|
|
19
20
|
__exportStar(require("./types/wiki"), exports);
|
|
20
21
|
__exportStar(require("./types/wikiBuilder"), exports);
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQztBQUNoQyxvREFBa0M7QUFDbEMsMERBQXdDO0FBQ3hDLCtDQUE2QjtBQUM3QixzREFBb0MifQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Wiki } from "../types/wiki";
|
|
2
|
+
/**
|
|
3
|
+
* Checks if all content links in the given text are verified.
|
|
4
|
+
* @param content - The content to check for links.
|
|
5
|
+
* @returns True if all links are verified, false otherwise.
|
|
6
|
+
*/
|
|
7
|
+
export declare const areContentLinksVerified: (content: string) => boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Validates a wiki object and returns the validation result.
|
|
10
|
+
* @param wiki - The wiki object to validate.
|
|
11
|
+
* @returns An object containing the validation result and an error message if applicable.
|
|
12
|
+
*/
|
|
13
|
+
export declare const validateWiki: (wiki: Wiki) => {
|
|
14
|
+
isValid: boolean;
|
|
15
|
+
error: string;
|
|
16
|
+
} | {
|
|
17
|
+
isValid: boolean;
|
|
18
|
+
error?: undefined;
|
|
19
|
+
};
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateWiki = exports.areContentLinksVerified = void 0;
|
|
4
|
+
const constants_1 = require("../data/constants");
|
|
5
|
+
const wiki_1 = require("../types/wiki");
|
|
6
|
+
/**
|
|
7
|
+
* Counts the number of words in a given string.
|
|
8
|
+
* @param text - The input string to count words from.
|
|
9
|
+
* @returns The number of words in the string.
|
|
10
|
+
*/
|
|
11
|
+
const countWords = (text) => text.split(" ").filter((word) => word !== "").length;
|
|
12
|
+
/**
|
|
13
|
+
* Checks if a given string is a valid URL.
|
|
14
|
+
* @param urlString - The string to check.
|
|
15
|
+
* @returns True if the string is a valid URL, false otherwise.
|
|
16
|
+
*/
|
|
17
|
+
const isValidUrl = (urlString) => {
|
|
18
|
+
try {
|
|
19
|
+
return Boolean(new URL(urlString));
|
|
20
|
+
}
|
|
21
|
+
catch (_e) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Checks if all content links in the given text are verified.
|
|
27
|
+
* @param content - The content to check for links.
|
|
28
|
+
* @returns True if all links are verified, false otherwise.
|
|
29
|
+
*/
|
|
30
|
+
const areContentLinksVerified = (content) => {
|
|
31
|
+
var _a;
|
|
32
|
+
const markdownLinks = content.match(/\[(.*?)\]\((.*?)\)/g);
|
|
33
|
+
return ((_a = markdownLinks === null || markdownLinks === void 0 ? void 0 : markdownLinks.every((link) => {
|
|
34
|
+
const [, linkText, linkUrl] = RegExp(/\[(.*?)\]\((.*?)\)/).exec(link) || [];
|
|
35
|
+
if (linkText &&
|
|
36
|
+
linkUrl &&
|
|
37
|
+
wiki_1.whiteListedLinkNames.includes(linkText) &&
|
|
38
|
+
!isValidUrl(linkUrl)) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (linkUrl && !linkUrl.startsWith("#")) {
|
|
42
|
+
const validDomainPattern = new RegExp(`^https?://(www\\.)?(${wiki_1.whiteListedDomains.join("|")})`);
|
|
43
|
+
return validDomainPattern.test(linkUrl);
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
})) !== null && _a !== void 0 ? _a : true);
|
|
47
|
+
};
|
|
48
|
+
exports.areContentLinksVerified = areContentLinksVerified;
|
|
49
|
+
/**
|
|
50
|
+
* Checks if the media in the wiki is valid.
|
|
51
|
+
* @param wiki - The wiki object to check.
|
|
52
|
+
* @returns True if the media is valid, false otherwise.
|
|
53
|
+
*/
|
|
54
|
+
const isMediaValid = (wiki) => {
|
|
55
|
+
if (!wiki.media)
|
|
56
|
+
return true;
|
|
57
|
+
const isMediaContentValid = wiki.media.every((media) => {
|
|
58
|
+
if (media.source === wiki_1.MediaSource.IPFS_IMG ||
|
|
59
|
+
media.source === wiki_1.MediaSource.IPFS_VID) {
|
|
60
|
+
return media.id.length === constants_1.IPFS_HASH_LENGTH;
|
|
61
|
+
}
|
|
62
|
+
if (media.source === wiki_1.MediaSource.YOUTUBE) {
|
|
63
|
+
const youtubePattern = /^.*(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/|shorts\/|watch\?v=)([^#&?]*).*/;
|
|
64
|
+
return (media.id === `https://www.youtube.com/watch?v=${media.name}` &&
|
|
65
|
+
youtubePattern.test(media.id));
|
|
66
|
+
}
|
|
67
|
+
if (media.source === wiki_1.MediaSource.VIMEO) {
|
|
68
|
+
return media.id === `https://vimeo.com/${media.name}`;
|
|
69
|
+
}
|
|
70
|
+
return media.type ? Object.values(wiki_1.MediaType).includes(media.type) : true;
|
|
71
|
+
});
|
|
72
|
+
const iconMediaCount = wiki.media.filter((media) => media.type === wiki_1.MediaType.ICON).length;
|
|
73
|
+
return (wiki.media.length <= constants_1.MAX_MEDIA_COUNT &&
|
|
74
|
+
isMediaContentValid &&
|
|
75
|
+
iconMediaCount <= 1);
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Checks if any media in the wiki is still uploading.
|
|
79
|
+
* @param wiki - The wiki object to check.
|
|
80
|
+
* @returns True if any media is still uploading, false otherwise.
|
|
81
|
+
*/
|
|
82
|
+
const isAnyMediaUploading = (wiki) => {
|
|
83
|
+
var _a, _b;
|
|
84
|
+
return (_b = (_a = wiki.media) === null || _a === void 0 ? void 0 : _a.some((media) => media.id.endsWith(constants_1.MEDIA_UPLOAD_PENDING_SUFFIX))) !== null && _b !== void 0 ? _b : false;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Checks if the event URL is missing for an event wiki.
|
|
88
|
+
* @param wiki - The wiki object to check.
|
|
89
|
+
* @returns True if the event URL is missing, false otherwise.
|
|
90
|
+
*/
|
|
91
|
+
const isEventUrlMissing = (wiki) => {
|
|
92
|
+
var _a;
|
|
93
|
+
if (wiki.tags.some((tag) => tag.id === "Events")) {
|
|
94
|
+
const referencesData = ((_a = wiki.metadata.find((meta) => meta.id === wiki_1.CommonMetaIds.REFERENCES)) === null || _a === void 0 ? void 0 : _a.value) || "[]";
|
|
95
|
+
const references = JSON.parse(referencesData);
|
|
96
|
+
return !references.some((item) => item.description.toLowerCase() === "event link");
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Checks if the event date is missing for an event wiki.
|
|
102
|
+
* @param wiki - The wiki object to check.
|
|
103
|
+
* @returns True if the event date is missing, false otherwise.
|
|
104
|
+
*/
|
|
105
|
+
const isEventDateMissing = (wiki) => { var _a; return wiki.tags.some((tag) => tag.id === "Events") && ((_a = wiki.events) === null || _a === void 0 ? void 0 : _a.length) === 0; };
|
|
106
|
+
/**
|
|
107
|
+
* Checks if the wiki summary exceeds the maximum length.
|
|
108
|
+
* @param wiki - The wiki object to check.
|
|
109
|
+
* @returns True if the summary exceeds the limit, false otherwise.
|
|
110
|
+
*/
|
|
111
|
+
const isSummaryTooLong = (wiki) => !!(wiki.summary && wiki.summary.length > constants_1.WIKI_SUMMARY_MAX_LENGTH);
|
|
112
|
+
/**
|
|
113
|
+
* Checks if the wiki has no citations.
|
|
114
|
+
* @param wiki - The wiki object to check.
|
|
115
|
+
* @returns True if there are no citations, false otherwise.
|
|
116
|
+
*/
|
|
117
|
+
const hasNoCitations = (wiki) => {
|
|
118
|
+
const references = wiki.metadata.find((meta) => meta.id === wiki_1.CommonMetaIds.REFERENCES);
|
|
119
|
+
return !(references === null || references === void 0 ? void 0 : references.value) || references.value.length === 0;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Validates a wiki object and returns the validation result.
|
|
123
|
+
* @param wiki - The wiki object to validate.
|
|
124
|
+
* @returns An object containing the validation result and an error message if applicable.
|
|
125
|
+
*/
|
|
126
|
+
const validateWiki = (wiki) => {
|
|
127
|
+
var _a;
|
|
128
|
+
const wordCount = countWords(wiki.content || "");
|
|
129
|
+
if (!wiki.title) {
|
|
130
|
+
return {
|
|
131
|
+
isValid: false,
|
|
132
|
+
error: "Add a Title at the top for this Wiki to continue",
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (wiki.title.length > constants_1.WIKI_TITLE_MAX_LENGTH) {
|
|
136
|
+
return {
|
|
137
|
+
isValid: false,
|
|
138
|
+
error: `Title should be less than ${constants_1.WIKI_TITLE_MAX_LENGTH} characters`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (!wiki.content) {
|
|
142
|
+
return { isValid: false, error: "Add a Content section to continue" };
|
|
143
|
+
}
|
|
144
|
+
if (wordCount < constants_1.WIKI_CONTENT_MIN_WORDS) {
|
|
145
|
+
return {
|
|
146
|
+
isValid: false,
|
|
147
|
+
error: `Add a minimum of ${constants_1.WIKI_CONTENT_MIN_WORDS} words in the content section to continue. You have written ${wordCount}`,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
if (!(0, exports.areContentLinksVerified)(wiki.content)) {
|
|
151
|
+
return {
|
|
152
|
+
isValid: false,
|
|
153
|
+
error: "Please remove all external links from the content",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
if (!((_a = wiki.images) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
157
|
+
return {
|
|
158
|
+
isValid: false,
|
|
159
|
+
error: "Add a main image on the right column to continue",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
if (wiki.categories.length === 0) {
|
|
163
|
+
return { isValid: false, error: "Add one category to continue" };
|
|
164
|
+
}
|
|
165
|
+
if (isSummaryTooLong(wiki)) {
|
|
166
|
+
return {
|
|
167
|
+
isValid: false,
|
|
168
|
+
error: `Summary exceeds maximum limit of ${constants_1.WIKI_SUMMARY_MAX_LENGTH}`,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
if (isAnyMediaUploading(wiki)) {
|
|
172
|
+
return {
|
|
173
|
+
isValid: false,
|
|
174
|
+
error: "Some media are still uploading, please wait",
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
if (hasNoCitations(wiki)) {
|
|
178
|
+
return { isValid: false, error: "Please add at least one citation" };
|
|
179
|
+
}
|
|
180
|
+
if (isEventUrlMissing(wiki)) {
|
|
181
|
+
return {
|
|
182
|
+
isValid: false,
|
|
183
|
+
error: "Please cite the event official website with 'Event Link' description",
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (isEventDateMissing(wiki)) {
|
|
187
|
+
return {
|
|
188
|
+
isValid: false,
|
|
189
|
+
error: 'Please open the "Edit Wiki Details Modal" and enter a valid event date',
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
if (!isMediaValid(wiki)) {
|
|
193
|
+
return { isValid: false, error: "Media is invalid" };
|
|
194
|
+
}
|
|
195
|
+
return { isValid: true };
|
|
196
|
+
};
|
|
197
|
+
exports.validateWiki = validateWiki;
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tXaWtpVmFsaWRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NoZWNrV2lraVZhbGlkaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQU8yQjtBQUMzQix3Q0FPdUI7QUFFdkI7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFFdEQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxHQUFHLENBQUMsU0FBaUIsRUFBRSxFQUFFO0lBQ3hDLElBQUk7UUFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQ25DO0lBQUMsT0FBTyxFQUFFLEVBQUU7UUFDWixPQUFPLEtBQUssQ0FBQztLQUNiO0FBQ0YsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNJLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTs7SUFDMUQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzNELE9BQU8sQ0FDTixNQUFBLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUM3QixNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQzFCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFL0MsSUFDQyxRQUFRO1lBQ1IsT0FBTztZQUNQLDJCQUFvQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDdkMsQ0FBQyxVQUFVLENB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
|
|
@@ -1,47 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
function isDeepEqual(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// Check if they are the same reference or both null/undefined
|
|
9
|
-
if (obj1 === obj2) {
|
|
3
|
+
function isDeepEqual(baseObject, comparisonObject) {
|
|
4
|
+
return compareValues(baseObject, comparisonObject);
|
|
5
|
+
}
|
|
6
|
+
function compareValues(base, comparison) {
|
|
7
|
+
if (base === comparison) {
|
|
10
8
|
return true;
|
|
11
9
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
obj2 === null) {
|
|
10
|
+
if (base == null || comparison == null) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
if (typeof base !== typeof comparison) {
|
|
17
14
|
return false;
|
|
18
15
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
if (typeof base === "string") {
|
|
17
|
+
return compareStrings(base, comparison);
|
|
18
|
+
}
|
|
19
|
+
if (base instanceof Date && comparison instanceof Date) {
|
|
20
|
+
return base.getTime() === comparison.getTime();
|
|
21
|
+
}
|
|
22
|
+
if (base instanceof RegExp && comparison instanceof RegExp) {
|
|
23
|
+
return base.toString() === comparison.toString();
|
|
24
|
+
}
|
|
25
|
+
if (typeof base === "object") {
|
|
26
|
+
return compareObjects(base, comparison);
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
function compareStrings(base, comparison) {
|
|
31
|
+
return base.replace(/\s+/g, "") === comparison.replace(/\s+/g, "");
|
|
32
|
+
}
|
|
33
|
+
function compareObjects(base, comparison) {
|
|
34
|
+
const baseKeys = Object.keys(base);
|
|
35
|
+
const comparisonKeys = Object.keys(comparison);
|
|
36
|
+
if (baseKeys.length !== comparisonKeys.length) {
|
|
24
37
|
return false;
|
|
25
38
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (!keysB.includes(key)) {
|
|
39
|
+
return baseKeys.every((key) => {
|
|
40
|
+
if (!Object.prototype.hasOwnProperty.call(comparison, key)) {
|
|
29
41
|
return false;
|
|
30
42
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
// Recursive call for nested objects or arrays
|
|
39
|
-
if (!isDeepEqual(obj1[key], obj2[key])) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
43
|
+
const baseValue = base[key];
|
|
44
|
+
const comparisonValue = comparison[key];
|
|
45
|
+
if (typeof baseValue === "function" &&
|
|
46
|
+
typeof comparisonValue === "function") {
|
|
47
|
+
return baseValue.toString() === comparisonValue.toString();
|
|
42
48
|
}
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
return compareValues(baseValue, comparisonValue);
|
|
50
|
+
});
|
|
45
51
|
}
|
|
46
52
|
exports.default = isDeepEqual;
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNEZWVwRXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lzRGVlcEVxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsU0FBUyxXQUFXLENBQ25CLFVBQTBCLEVBQzFCLGdCQUFnQztJQUVoQyxPQUFPLGFBQWEsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ3JCLElBQW9CLEVBQ3BCLFVBQTBCO0lBRTFCLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUN4QixPQUFPLElBQUksQ0FBQztLQUNaO0lBRUQsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDdkMsT0FBTyxLQUFLLENBQUM7S0FDYjtJQUVELElBQUksT0FBTyxJQUFJLEtBQUssT0FBTyxVQUFVLEVBQUU7UUFDdEMsT0FBTyxLQUFLLENBQUM7S0FDYjtJQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxVQUFvQixDQUFDLENBQUM7S0FDbEQ7SUFFRCxJQUFJLElBQUksWUFBWSxJQUFJLElBQUksVUFBVSxZQUFZLElBQUksRUFBRTtRQUN2RCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDL0M7SUFFRCxJQUFJLElBQUksWUFBWSxNQUFNLElBQUksVUFBVSxZQUFZLE1BQU0sRUFBRTtRQUMzRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDakQ7SUFFRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBb0IsQ0FBQyxDQUFDO0tBQ2xEO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsSUFBWSxFQUFFLFVBQWtCO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLElBQVksRUFBRSxVQUFrQjtJQUN2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFL0MsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUU7UUFDOUMsT0FBTyxLQUFLLENBQUM7S0FDYjtJQUVELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzNELE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFFRCxNQUFNLFNBQVMsR0FBSSxJQUF1QyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sZUFBZSxHQUFJLFVBQTZDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUUsSUFDQyxPQUFPLFNBQVMsS0FBSyxVQUFVO1lBQy9CLE9BQU8sZUFBZSxLQUFLLFVBQVUsRUFDcEM7WUFDRCxPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDM0Q7UUFFRCxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsa0JBQWUsV0FBVyxDQUFDIn0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Wiki } from
|
|
1
|
+
import { type Wiki } from "../types/wiki";
|
|
2
2
|
export declare const calculateWikiScore: (wiki: Wiki) => number;
|
|
@@ -63,23 +63,24 @@ const countQuality = (idealCount, realCount) => {
|
|
|
63
63
|
};
|
|
64
64
|
const getHostnameFromRegex = (url) => {
|
|
65
65
|
const matches = url.match(/^https?:\/\/([^/?#]+)(?:[/?#]|$)/i);
|
|
66
|
-
return matches
|
|
66
|
+
return matches === null || matches === void 0 ? void 0 : matches[1];
|
|
67
67
|
};
|
|
68
68
|
const getWikiInternalLinks = (content) => {
|
|
69
|
-
const
|
|
69
|
+
const markdownLinkRegex = /\[(.*?)\]\((.*?)\)/g;
|
|
70
70
|
let internalLinksCount = 0;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const url =
|
|
74
|
-
if (url && url.
|
|
71
|
+
let match = markdownLinkRegex.exec(content);
|
|
72
|
+
while (match !== null) {
|
|
73
|
+
const url = match[2];
|
|
74
|
+
if (url && !url.startsWith("#")) {
|
|
75
75
|
const hostname = getHostnameFromRegex(url);
|
|
76
|
-
if (hostname ===
|
|
77
|
-
hostname ===
|
|
78
|
-
(hostname === null || hostname === void 0 ? void 0 : hostname.endsWith(
|
|
79
|
-
internalLinksCount
|
|
76
|
+
if (hostname === "everipedia.org" ||
|
|
77
|
+
hostname === "iq.wiki" ||
|
|
78
|
+
(hostname === null || hostname === void 0 ? void 0 : hostname.endsWith(".everipedia.org"))) {
|
|
79
|
+
internalLinksCount++;
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
-
|
|
82
|
+
match = markdownLinkRegex.exec(content); // Move assignment here
|
|
83
|
+
}
|
|
83
84
|
return internalLinksCount;
|
|
84
85
|
};
|
|
85
86
|
const getWikiCitationLinks = (wiki) => {
|
|
@@ -94,18 +95,18 @@ const getWikiCitationLinks = (wiki) => {
|
|
|
94
95
|
};
|
|
95
96
|
const getSocialsCount = (wiki) => {
|
|
96
97
|
let socialsCount = 0;
|
|
97
|
-
wiki.metadata
|
|
98
|
+
for (const meta of wiki.metadata) {
|
|
98
99
|
if (wiki_1.WikiPossibleSocialsList.includes(meta.id)) {
|
|
99
100
|
if (meta.value) {
|
|
100
101
|
socialsCount += 1;
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
|
-
}
|
|
104
|
+
}
|
|
104
105
|
return socialsCount;
|
|
105
106
|
};
|
|
106
107
|
const calculateWikiScore = (wiki) => {
|
|
107
108
|
var _a, _b, _c;
|
|
108
|
-
const wordCount = wiki.content.split(
|
|
109
|
+
const wordCount = wiki.content.split(" ").length;
|
|
109
110
|
const internalLinksCount = getWikiInternalLinks(wiki.content);
|
|
110
111
|
const citationCount = getWikiCitationLinks(wiki);
|
|
111
112
|
const mediaCount = ((_a = wiki.media) === null || _a === void 0 ? void 0 : _a.length) || 0;
|
|
@@ -138,4 +139,4 @@ const calculateWikiScore = (wiki) => {
|
|
|
138
139
|
return percentScore;
|
|
139
140
|
};
|
|
140
141
|
exports.calculateWikiScore = calculateWikiScore;
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lraVNjb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93aWtpU2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0NBSXVCO0FBRXZCLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sMkJBQTJCLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQ25DLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBQzlCLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBRWhDLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBRW5DLE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBaUIsRUFBVSxFQUFFO0lBQ3BELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUNyQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFFckIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRWQsSUFBSSxTQUFTLEdBQUcsc0JBQXNCLEVBQUU7UUFDdkMsT0FBTyxRQUFRLENBQUM7S0FDaEI7SUFFRCxJQUNDLFNBQVMsSUFBSSxzQkFBc0I7UUFDbkMsU0FBUyxJQUFJLHVC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
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const WIKI_SUMMARY_MAX_LENGTH = 255;
|
|
2
|
+
export declare const WIKI_CONTENT_MIN_WORDS = 100;
|
|
3
|
+
export declare const WIKI_TITLE_MAX_LENGTH = 60;
|
|
4
|
+
export declare const MEDIA_UPLOAD_PENDING_SUFFIX = "default";
|
|
5
|
+
export declare const MAX_MEDIA_COUNT = 25;
|
|
6
|
+
export declare const IPFS_HASH_LENGTH = 46;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const WIKI_SUMMARY_MAX_LENGTH = 255;
|
|
2
|
+
export const WIKI_CONTENT_MIN_WORDS = 100;
|
|
3
|
+
export const WIKI_TITLE_MAX_LENGTH = 60;
|
|
4
|
+
export const MEDIA_UPLOAD_PENDING_SUFFIX = "default";
|
|
5
|
+
export const MAX_MEDIA_COUNT = 25;
|
|
6
|
+
export const IPFS_HASH_LENGTH = 46;
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUMzQyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFDMUMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLFNBQVMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyJ9
|
package/build/module/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from "./lib/wikiScore";
|
|
2
|
+
export * from "./lib/isDeepEqual";
|
|
3
|
+
export * from "./lib/checkWikiValidity";
|
|
4
|
+
export * from "./types/wiki";
|
|
5
|
+
export * from "./types/wikiBuilder";
|
package/build/module/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
|
|
1
|
+
export * from "./lib/wikiScore";
|
|
2
|
+
export * from "./lib/isDeepEqual";
|
|
3
|
+
export * from "./lib/checkWikiValidity";
|
|
4
|
+
export * from "./types/wiki";
|
|
5
|
+
export * from "./types/wikiBuilder";
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQyJ9
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Wiki } from "../types/wiki";
|
|
2
|
+
/**
|
|
3
|
+
* Checks if all content links in the given text are verified.
|
|
4
|
+
* @param content - The content to check for links.
|
|
5
|
+
* @returns True if all links are verified, false otherwise.
|
|
6
|
+
*/
|
|
7
|
+
export declare const areContentLinksVerified: (content: string) => boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Validates a wiki object and returns the validation result.
|
|
10
|
+
* @param wiki - The wiki object to validate.
|
|
11
|
+
* @returns An object containing the validation result and an error message if applicable.
|
|
12
|
+
*/
|
|
13
|
+
export declare const validateWiki: (wiki: Wiki) => {
|
|
14
|
+
isValid: boolean;
|
|
15
|
+
error: string;
|
|
16
|
+
} | {
|
|
17
|
+
isValid: boolean;
|
|
18
|
+
error?: undefined;
|
|
19
|
+
};
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { IPFS_HASH_LENGTH, MAX_MEDIA_COUNT, MEDIA_UPLOAD_PENDING_SUFFIX, WIKI_CONTENT_MIN_WORDS, WIKI_SUMMARY_MAX_LENGTH, WIKI_TITLE_MAX_LENGTH, } from "../data/constants";
|
|
2
|
+
import { CommonMetaIds, MediaSource, MediaType, whiteListedDomains, whiteListedLinkNames, } from "../types/wiki";
|
|
3
|
+
/**
|
|
4
|
+
* Counts the number of words in a given string.
|
|
5
|
+
* @param text - The input string to count words from.
|
|
6
|
+
* @returns The number of words in the string.
|
|
7
|
+
*/
|
|
8
|
+
const countWords = (text) => text.split(" ").filter((word) => word !== "").length;
|
|
9
|
+
/**
|
|
10
|
+
* Checks if a given string is a valid URL.
|
|
11
|
+
* @param urlString - The string to check.
|
|
12
|
+
* @returns True if the string is a valid URL, false otherwise.
|
|
13
|
+
*/
|
|
14
|
+
const isValidUrl = (urlString) => {
|
|
15
|
+
try {
|
|
16
|
+
return Boolean(new URL(urlString));
|
|
17
|
+
}
|
|
18
|
+
catch (_e) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Checks if all content links in the given text are verified.
|
|
24
|
+
* @param content - The content to check for links.
|
|
25
|
+
* @returns True if all links are verified, false otherwise.
|
|
26
|
+
*/
|
|
27
|
+
export const areContentLinksVerified = (content) => {
|
|
28
|
+
const markdownLinks = content.match(/\[(.*?)\]\((.*?)\)/g);
|
|
29
|
+
return (markdownLinks?.every((link) => {
|
|
30
|
+
const [, linkText, linkUrl] = RegExp(/\[(.*?)\]\((.*?)\)/).exec(link) || [];
|
|
31
|
+
if (linkText &&
|
|
32
|
+
linkUrl &&
|
|
33
|
+
whiteListedLinkNames.includes(linkText) &&
|
|
34
|
+
!isValidUrl(linkUrl)) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
if (linkUrl && !linkUrl.startsWith("#")) {
|
|
38
|
+
const validDomainPattern = new RegExp(`^https?://(www\\.)?(${whiteListedDomains.join("|")})`);
|
|
39
|
+
return validDomainPattern.test(linkUrl);
|
|
40
|
+
}
|
|
41
|
+
return true;
|
|
42
|
+
}) ?? true);
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Checks if the media in the wiki is valid.
|
|
46
|
+
* @param wiki - The wiki object to check.
|
|
47
|
+
* @returns True if the media is valid, false otherwise.
|
|
48
|
+
*/
|
|
49
|
+
const isMediaValid = (wiki) => {
|
|
50
|
+
if (!wiki.media)
|
|
51
|
+
return true;
|
|
52
|
+
const isMediaContentValid = wiki.media.every((media) => {
|
|
53
|
+
if (media.source === MediaSource.IPFS_IMG ||
|
|
54
|
+
media.source === MediaSource.IPFS_VID) {
|
|
55
|
+
return media.id.length === IPFS_HASH_LENGTH;
|
|
56
|
+
}
|
|
57
|
+
if (media.source === MediaSource.YOUTUBE) {
|
|
58
|
+
const youtubePattern = /^.*(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/|shorts\/|watch\?v=)([^#&?]*).*/;
|
|
59
|
+
return (media.id === `https://www.youtube.com/watch?v=${media.name}` &&
|
|
60
|
+
youtubePattern.test(media.id));
|
|
61
|
+
}
|
|
62
|
+
if (media.source === MediaSource.VIMEO) {
|
|
63
|
+
return media.id === `https://vimeo.com/${media.name}`;
|
|
64
|
+
}
|
|
65
|
+
return media.type ? Object.values(MediaType).includes(media.type) : true;
|
|
66
|
+
});
|
|
67
|
+
const iconMediaCount = wiki.media.filter((media) => media.type === MediaType.ICON).length;
|
|
68
|
+
return (wiki.media.length <= MAX_MEDIA_COUNT &&
|
|
69
|
+
isMediaContentValid &&
|
|
70
|
+
iconMediaCount <= 1);
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Checks if any media in the wiki is still uploading.
|
|
74
|
+
* @param wiki - The wiki object to check.
|
|
75
|
+
* @returns True if any media is still uploading, false otherwise.
|
|
76
|
+
*/
|
|
77
|
+
const isAnyMediaUploading = (wiki) => wiki.media?.some((media) => media.id.endsWith(MEDIA_UPLOAD_PENDING_SUFFIX)) ??
|
|
78
|
+
false;
|
|
79
|
+
/**
|
|
80
|
+
* Checks if the event URL is missing for an event wiki.
|
|
81
|
+
* @param wiki - The wiki object to check.
|
|
82
|
+
* @returns True if the event URL is missing, false otherwise.
|
|
83
|
+
*/
|
|
84
|
+
const isEventUrlMissing = (wiki) => {
|
|
85
|
+
if (wiki.tags.some((tag) => tag.id === "Events")) {
|
|
86
|
+
const referencesData = wiki.metadata.find((meta) => meta.id === CommonMetaIds.REFERENCES)
|
|
87
|
+
?.value || "[]";
|
|
88
|
+
const references = JSON.parse(referencesData);
|
|
89
|
+
return !references.some((item) => item.description.toLowerCase() === "event link");
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Checks if the event date is missing for an event wiki.
|
|
95
|
+
* @param wiki - The wiki object to check.
|
|
96
|
+
* @returns True if the event date is missing, false otherwise.
|
|
97
|
+
*/
|
|
98
|
+
const isEventDateMissing = (wiki) => wiki.tags.some((tag) => tag.id === "Events") && wiki.events?.length === 0;
|
|
99
|
+
/**
|
|
100
|
+
* Checks if the wiki summary exceeds the maximum length.
|
|
101
|
+
* @param wiki - The wiki object to check.
|
|
102
|
+
* @returns True if the summary exceeds the limit, false otherwise.
|
|
103
|
+
*/
|
|
104
|
+
const isSummaryTooLong = (wiki) => !!(wiki.summary && wiki.summary.length > WIKI_SUMMARY_MAX_LENGTH);
|
|
105
|
+
/**
|
|
106
|
+
* Checks if the wiki has no citations.
|
|
107
|
+
* @param wiki - The wiki object to check.
|
|
108
|
+
* @returns True if there are no citations, false otherwise.
|
|
109
|
+
*/
|
|
110
|
+
const hasNoCitations = (wiki) => {
|
|
111
|
+
const references = wiki.metadata.find((meta) => meta.id === CommonMetaIds.REFERENCES);
|
|
112
|
+
return !references?.value || references.value.length === 0;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Validates a wiki object and returns the validation result.
|
|
116
|
+
* @param wiki - The wiki object to validate.
|
|
117
|
+
* @returns An object containing the validation result and an error message if applicable.
|
|
118
|
+
*/
|
|
119
|
+
export const validateWiki = (wiki) => {
|
|
120
|
+
const wordCount = countWords(wiki.content || "");
|
|
121
|
+
if (!wiki.title) {
|
|
122
|
+
return {
|
|
123
|
+
isValid: false,
|
|
124
|
+
error: "Add a Title at the top for this Wiki to continue",
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (wiki.title.length > WIKI_TITLE_MAX_LENGTH) {
|
|
128
|
+
return {
|
|
129
|
+
isValid: false,
|
|
130
|
+
error: `Title should be less than ${WIKI_TITLE_MAX_LENGTH} characters`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
if (!wiki.content) {
|
|
134
|
+
return { isValid: false, error: "Add a Content section to continue" };
|
|
135
|
+
}
|
|
136
|
+
if (wordCount < WIKI_CONTENT_MIN_WORDS) {
|
|
137
|
+
return {
|
|
138
|
+
isValid: false,
|
|
139
|
+
error: `Add a minimum of ${WIKI_CONTENT_MIN_WORDS} words in the content section to continue. You have written ${wordCount}`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
if (!areContentLinksVerified(wiki.content)) {
|
|
143
|
+
return {
|
|
144
|
+
isValid: false,
|
|
145
|
+
error: "Please remove all external links from the content",
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (!wiki.images?.length) {
|
|
149
|
+
return {
|
|
150
|
+
isValid: false,
|
|
151
|
+
error: "Add a main image on the right column to continue",
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (wiki.categories.length === 0) {
|
|
155
|
+
return { isValid: false, error: "Add one category to continue" };
|
|
156
|
+
}
|
|
157
|
+
if (isSummaryTooLong(wiki)) {
|
|
158
|
+
return {
|
|
159
|
+
isValid: false,
|
|
160
|
+
error: `Summary exceeds maximum limit of ${WIKI_SUMMARY_MAX_LENGTH}`,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (isAnyMediaUploading(wiki)) {
|
|
164
|
+
return {
|
|
165
|
+
isValid: false,
|
|
166
|
+
error: "Some media are still uploading, please wait",
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
if (hasNoCitations(wiki)) {
|
|
170
|
+
return { isValid: false, error: "Please add at least one citation" };
|
|
171
|
+
}
|
|
172
|
+
if (isEventUrlMissing(wiki)) {
|
|
173
|
+
return {
|
|
174
|
+
isValid: false,
|
|
175
|
+
error: "Please cite the event official website with 'Event Link' description",
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
if (isEventDateMissing(wiki)) {
|
|
179
|
+
return {
|
|
180
|
+
isValid: false,
|
|
181
|
+
error: 'Please open the "Edit Wiki Details Modal" and enter a valid event date',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
if (!isMediaValid(wiki)) {
|
|
185
|
+
return { isValid: false, error: "Media is invalid" };
|
|
186
|
+
}
|
|
187
|
+
return { isValid: true };
|
|
188
|
+
};
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tXaWtpVmFsaWRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NoZWNrV2lraVZhbGlkaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLDJCQUEyQixFQUMzQixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLHFCQUFxQixHQUNyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFDTixhQUFhLEVBQ2IsV0FBVyxFQUNYLFNBQVMsRUFFVCxrQkFBa0IsRUFDbEIsb0JBQW9CLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBRXREOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtJQUN4QyxJQUFJO1FBQ0gsT0FBTyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUNuQztJQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ1osT0FBTyxLQUFLLENBQUM7S0FDYjtBQUNGLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO0lBQzFELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMzRCxPQUFPLENBQ04sYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzdCLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMs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
|
|
@@ -1,45 +1,51 @@
|
|
|
1
|
-
function isDeepEqual(
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// Check if they are the same reference or both null/undefined
|
|
7
|
-
if (obj1 === obj2) {
|
|
1
|
+
function isDeepEqual(baseObject, comparisonObject) {
|
|
2
|
+
return compareValues(baseObject, comparisonObject);
|
|
3
|
+
}
|
|
4
|
+
function compareValues(base, comparison) {
|
|
5
|
+
if (base === comparison) {
|
|
8
6
|
return true;
|
|
9
7
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
obj2 === null) {
|
|
8
|
+
if (base == null || comparison == null) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
if (typeof base !== typeof comparison) {
|
|
15
12
|
return false;
|
|
16
13
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
if (typeof base === "string") {
|
|
15
|
+
return compareStrings(base, comparison);
|
|
16
|
+
}
|
|
17
|
+
if (base instanceof Date && comparison instanceof Date) {
|
|
18
|
+
return base.getTime() === comparison.getTime();
|
|
19
|
+
}
|
|
20
|
+
if (base instanceof RegExp && comparison instanceof RegExp) {
|
|
21
|
+
return base.toString() === comparison.toString();
|
|
22
|
+
}
|
|
23
|
+
if (typeof base === "object") {
|
|
24
|
+
return compareObjects(base, comparison);
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
function compareStrings(base, comparison) {
|
|
29
|
+
return base.replace(/\s+/g, "") === comparison.replace(/\s+/g, "");
|
|
30
|
+
}
|
|
31
|
+
function compareObjects(base, comparison) {
|
|
32
|
+
const baseKeys = Object.keys(base);
|
|
33
|
+
const comparisonKeys = Object.keys(comparison);
|
|
34
|
+
if (baseKeys.length !== comparisonKeys.length) {
|
|
22
35
|
return false;
|
|
23
36
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (!keysB.includes(key)) {
|
|
37
|
+
return baseKeys.every((key) => {
|
|
38
|
+
if (!Object.prototype.hasOwnProperty.call(comparison, key)) {
|
|
27
39
|
return false;
|
|
28
40
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
// Recursive call for nested objects or arrays
|
|
37
|
-
if (!isDeepEqual(obj1[key], obj2[key])) {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
41
|
+
const baseValue = base[key];
|
|
42
|
+
const comparisonValue = comparison[key];
|
|
43
|
+
if (typeof baseValue === "function" &&
|
|
44
|
+
typeof comparisonValue === "function") {
|
|
45
|
+
return baseValue.toString() === comparisonValue.toString();
|
|
40
46
|
}
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
return compareValues(baseValue, comparisonValue);
|
|
48
|
+
});
|
|
43
49
|
}
|
|
44
50
|
export default isDeepEqual;
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNEZWVwRXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lzRGVlcEVxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQVMsV0FBVyxDQUNuQixVQUEwQixFQUMxQixnQkFBZ0M7SUFFaEMsT0FBTyxhQUFhLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUNyQixJQUFvQixFQUNwQixVQUEwQjtJQUUxQixJQUFJLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDeEIsT0FBTyxJQUFJLENBQUM7S0FDWjtJQUVELElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDO0tBQ2I7SUFFRCxJQUFJLE9BQU8sSUFBSSxLQUFLLE9BQU8sVUFBVSxFQUFFO1FBQ3RDLE9BQU8sS0FBSyxDQUFDO0tBQ2I7SUFFRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBb0IsQ0FBQyxDQUFDO0tBQ2xEO0lBRUQsSUFBSSxJQUFJLFlBQVksSUFBSSxJQUFJLFVBQVUsWUFBWSxJQUFJLEVBQUU7UUFDdkQsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQy9DO0lBRUQsSUFBSSxJQUFJLFlBQVksTUFBTSxJQUFJLFVBQVUsWUFBWSxNQUFNLEVBQUU7UUFDM0QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ2pEO0lBRUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQW9CLENBQUMsQ0FBQztLQUNsRDtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLElBQVksRUFBRSxVQUFrQjtJQUN2RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUFZLEVBQUUsVUFBa0I7SUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRS9DLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFO1FBQzlDLE9BQU8sS0FBSyxDQUFDO0tBQ2I7SUFFRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMzRCxPQUFPLEtBQUssQ0FBQztTQUNiO1FBRUQsTUFBTSxTQUFTLEdBQUksSUFBdUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRSxNQUFNLGVBQWUsR0FBSSxVQUE2QyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVFLElBQ0MsT0FBTyxTQUFTLEtBQUssVUFBVTtZQUMvQixPQUFPLGVBQWUsS0FBSyxVQUFVLEVBQ3BDO1lBQ0QsT0FBTyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzNEO1FBRUQsT0FBTyxhQUFhLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELGVBQWUsV0FBVyxDQUFDIn0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Wiki } from
|
|
1
|
+
import { type Wiki } from "../types/wiki";
|
|
2
2
|
export declare const calculateWikiScore: (wiki: Wiki) => number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CommonMetaIds, WikiPossibleSocialsList } from
|
|
1
|
+
import { CommonMetaIds, WikiPossibleSocialsList, } from "../types/wiki";
|
|
2
2
|
const MIN_CONTENT_WORD_COUNT = 10;
|
|
3
3
|
const GOOD_CONTENT_WORD_COUNT = 500;
|
|
4
4
|
const IDEAL_CONTENT_WORD_COUNT = 1500;
|
|
@@ -60,23 +60,24 @@ const countQuality = (idealCount, realCount) => {
|
|
|
60
60
|
};
|
|
61
61
|
const getHostnameFromRegex = (url) => {
|
|
62
62
|
const matches = url.match(/^https?:\/\/([^/?#]+)(?:[/?#]|$)/i);
|
|
63
|
-
return matches
|
|
63
|
+
return matches?.[1];
|
|
64
64
|
};
|
|
65
65
|
const getWikiInternalLinks = (content) => {
|
|
66
|
-
const
|
|
66
|
+
const markdownLinkRegex = /\[(.*?)\]\((.*?)\)/g;
|
|
67
67
|
let internalLinksCount = 0;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const url =
|
|
71
|
-
if (url && url.
|
|
68
|
+
let match = markdownLinkRegex.exec(content);
|
|
69
|
+
while (match !== null) {
|
|
70
|
+
const url = match[2];
|
|
71
|
+
if (url && !url.startsWith("#")) {
|
|
72
72
|
const hostname = getHostnameFromRegex(url);
|
|
73
|
-
if (hostname ===
|
|
74
|
-
hostname ===
|
|
75
|
-
hostname?.endsWith(
|
|
76
|
-
internalLinksCount
|
|
73
|
+
if (hostname === "everipedia.org" ||
|
|
74
|
+
hostname === "iq.wiki" ||
|
|
75
|
+
hostname?.endsWith(".everipedia.org")) {
|
|
76
|
+
internalLinksCount++;
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
match = markdownLinkRegex.exec(content); // Move assignment here
|
|
80
|
+
}
|
|
80
81
|
return internalLinksCount;
|
|
81
82
|
};
|
|
82
83
|
const getWikiCitationLinks = (wiki) => {
|
|
@@ -90,17 +91,17 @@ const getWikiCitationLinks = (wiki) => {
|
|
|
90
91
|
};
|
|
91
92
|
const getSocialsCount = (wiki) => {
|
|
92
93
|
let socialsCount = 0;
|
|
93
|
-
wiki.metadata
|
|
94
|
+
for (const meta of wiki.metadata) {
|
|
94
95
|
if (WikiPossibleSocialsList.includes(meta.id)) {
|
|
95
96
|
if (meta.value) {
|
|
96
97
|
socialsCount += 1;
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
|
-
}
|
|
100
|
+
}
|
|
100
101
|
return socialsCount;
|
|
101
102
|
};
|
|
102
103
|
export const calculateWikiScore = (wiki) => {
|
|
103
|
-
const wordCount = wiki.content.split(
|
|
104
|
+
const wordCount = wiki.content.split(" ").length;
|
|
104
105
|
const internalLinksCount = getWikiInternalLinks(wiki.content);
|
|
105
106
|
const citationCount = getWikiCitationLinks(wiki);
|
|
106
107
|
const mediaCount = wiki.media?.length || 0;
|
|
@@ -132,4 +133,4 @@ export const calculateWikiScore = (wiki) => {
|
|
|
132
133
|
const percentScore = Math.floor(score * 100);
|
|
133
134
|
return percentScore;
|
|
134
135
|
};
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lraVNjb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93aWtpU2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGFBQWEsRUFFYix1QkFBdUIsR0FDdkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDbEMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFDcEMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUM7QUFFdEMsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUM7QUFDeEMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFDbkMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFDOUIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFFaEMsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFDdEMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFDakMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFFbkMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxTQUFpQixFQUFVLEVBQUU7SUFDcEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUVyQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFZCxJQUFJLFNBQVMsR0FBRyxzQkFBc0IsRUFBRTtRQUN2QyxPQUFPLFFBQVEsQ0FBQztLQUNoQjtJQUVELElB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
|