@everipedia/iq-utils 0.4.4 → 1.0.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 +12 -0
- package/build/main/data/constants.d.ts +18 -0
- package/build/main/data/constants.js +20 -2
- package/build/main/index.d.ts +1 -0
- package/build/main/index.js +2 -1
- package/build/main/lib/checkWikiValidity.d.ts +1 -1
- package/build/main/lib/checkWikiValidity.js +12 -9
- package/build/main/lib/helpers/wiki.helpers.d.ts +32 -0
- package/build/main/lib/helpers/wiki.helpers.js +86 -0
- package/build/main/lib/wikiScore.d.ts +1 -1
- package/build/main/lib/wikiScore.js +34 -49
- package/build/main/schema/wiki.schema.d.ts +798 -0
- package/build/main/schema/wiki.schema.js +289 -0
- package/build/main/types/wiki.d.ts +5 -205
- package/build/main/types/wiki.js +10 -172
- package/build/main/types/wikiBuilder.d.ts +1 -1
- package/build/module/data/constants.d.ts +18 -0
- package/build/module/data/constants.js +19 -1
- package/build/module/index.d.ts +1 -0
- package/build/module/index.js +2 -1
- package/build/module/lib/checkWikiValidity.d.ts +1 -1
- package/build/module/lib/checkWikiValidity.js +13 -13
- package/build/module/lib/helpers/wiki.helpers.d.ts +32 -0
- package/build/module/lib/helpers/wiki.helpers.js +75 -0
- package/build/module/lib/wikiScore.d.ts +1 -1
- package/build/module/lib/wikiScore.js +4 -19
- package/build/module/schema/wiki.schema.d.ts +798 -0
- package/build/module/schema/wiki.schema.js +286 -0
- package/build/module/types/wiki.d.ts +5 -205
- package/build/module/types/wiki.js +9 -171
- package/build/module/types/wikiBuilder.d.ts +1 -1
- package/package.json +52 -51
package/CHANGELOG.md
CHANGED
|
@@ -4,3 +4,21 @@ export declare const WIKI_TITLE_MAX_LENGTH = 60;
|
|
|
4
4
|
export declare const MEDIA_UPLOAD_PENDING_SUFFIX = "default";
|
|
5
5
|
export declare const MAX_MEDIA_COUNT = 25;
|
|
6
6
|
export declare const IPFS_HASH_LENGTH = 46;
|
|
7
|
+
export declare const EditorContentOverride = "%OVERRIDE@EDITOR@MARKDOWN%";
|
|
8
|
+
export declare const CreateNewWikiSlug = "/*CREATE+NEW+WIKI*/";
|
|
9
|
+
export declare const MIN_CONTENT_WORD_COUNT = 10;
|
|
10
|
+
export declare const GOOD_CONTENT_WORD_COUNT = 500;
|
|
11
|
+
export declare const IDEAL_CONTENT_WORD_COUNT = 1500;
|
|
12
|
+
export declare const CONTENT_SCORE_WEIGHT = 0.8;
|
|
13
|
+
export declare const INTERNAL_LINKS_SCORE_WEIGHT = 0.5;
|
|
14
|
+
export declare const CITATIONS_SCORE_WEIGHT = 0.5;
|
|
15
|
+
export declare const MEDIA_SCORE_WEIGHT = 0.3;
|
|
16
|
+
export declare const TAGS_SCORE_WEIGHT = 0.3;
|
|
17
|
+
export declare const SUMMARY_SCORE_WEIGHT = 0.5;
|
|
18
|
+
export declare const SOCIAL_SCORE_WEIGHT = 0.5;
|
|
19
|
+
export declare const IDEAL_INTERNAL_LINKS_COUNT = 10;
|
|
20
|
+
export declare const IDEAL_CITATIONS_COUNT = 10;
|
|
21
|
+
export declare const IDEAL_MEDIA_COUNT = 5;
|
|
22
|
+
export declare const IDEAL_TAGS_COUNT = 3;
|
|
23
|
+
export declare const IDEAL_SUMMARY_LENGTH = 100;
|
|
24
|
+
export declare const IDEAL_SOCIAL_MEDIA_COUNT = 4;
|
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
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;
|
|
3
|
+
exports.IDEAL_SOCIAL_MEDIA_COUNT = exports.IDEAL_SUMMARY_LENGTH = exports.IDEAL_TAGS_COUNT = exports.IDEAL_MEDIA_COUNT = exports.IDEAL_CITATIONS_COUNT = exports.IDEAL_INTERNAL_LINKS_COUNT = exports.SOCIAL_SCORE_WEIGHT = exports.SUMMARY_SCORE_WEIGHT = exports.TAGS_SCORE_WEIGHT = exports.MEDIA_SCORE_WEIGHT = exports.CITATIONS_SCORE_WEIGHT = exports.INTERNAL_LINKS_SCORE_WEIGHT = exports.CONTENT_SCORE_WEIGHT = exports.IDEAL_CONTENT_WORD_COUNT = exports.GOOD_CONTENT_WORD_COUNT = exports.MIN_CONTENT_WORD_COUNT = exports.CreateNewWikiSlug = exports.EditorContentOverride = 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
4
|
exports.WIKI_SUMMARY_MAX_LENGTH = 255;
|
|
5
5
|
exports.WIKI_CONTENT_MIN_WORDS = 100;
|
|
6
6
|
exports.WIKI_TITLE_MAX_LENGTH = 60;
|
|
7
7
|
exports.MEDIA_UPLOAD_PENDING_SUFFIX = "default";
|
|
8
8
|
exports.MAX_MEDIA_COUNT = 25;
|
|
9
9
|
exports.IPFS_HASH_LENGTH = 46;
|
|
10
|
-
|
|
10
|
+
exports.EditorContentOverride = "%OVERRIDE@EDITOR@MARKDOWN%";
|
|
11
|
+
exports.CreateNewWikiSlug = "/*CREATE+NEW+WIKI*/";
|
|
12
|
+
exports.MIN_CONTENT_WORD_COUNT = 10;
|
|
13
|
+
exports.GOOD_CONTENT_WORD_COUNT = 500;
|
|
14
|
+
exports.IDEAL_CONTENT_WORD_COUNT = 1500;
|
|
15
|
+
exports.CONTENT_SCORE_WEIGHT = 0.8;
|
|
16
|
+
exports.INTERNAL_LINKS_SCORE_WEIGHT = 0.5;
|
|
17
|
+
exports.CITATIONS_SCORE_WEIGHT = 0.5;
|
|
18
|
+
exports.MEDIA_SCORE_WEIGHT = 0.3;
|
|
19
|
+
exports.TAGS_SCORE_WEIGHT = 0.3;
|
|
20
|
+
exports.SUMMARY_SCORE_WEIGHT = 0.5;
|
|
21
|
+
exports.SOCIAL_SCORE_WEIGHT = 0.5;
|
|
22
|
+
exports.IDEAL_INTERNAL_LINKS_COUNT = 10;
|
|
23
|
+
exports.IDEAL_CITATIONS_COUNT = 10;
|
|
24
|
+
exports.IDEAL_MEDIA_COUNT = 5;
|
|
25
|
+
exports.IDEAL_TAGS_COUNT = 3;
|
|
26
|
+
exports.IDEAL_SUMMARY_LENGTH = 100;
|
|
27
|
+
exports.IDEAL_SOCIAL_MEDIA_COUNT = 4;
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQzlCLFFBQUEsc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQzdCLFFBQUEscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQUEsMkJBQTJCLEdBQUcsU0FBUyxDQUFDO0FBQ3hDLFFBQUEsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUNyQixRQUFBLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFBLHFCQUFxQixHQUFHLDRCQUE0QixDQUFDO0FBQ3JELFFBQUEsaUJBQWlCLEdBQUcscUJBQXFCLENBQUM7QUFFMUMsUUFBQSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDNUIsUUFBQSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFDOUIsUUFBQSx3QkFBd0IsR0FBRyxJQUFJLENBQUM7QUFFaEMsUUFBQSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDM0IsUUFBQSwyQkFBMkIsR0FBRyxHQUFHLENBQUM7QUFDbEMsUUFBQSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFDN0IsUUFBQSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFDekIsUUFBQSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFDeEIsUUFBQSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDM0IsUUFBQSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFFMUIsUUFBQSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBQSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDdEIsUUFBQSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBQSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDM0IsUUFBQSx3QkFBd0IsR0FBRyxDQUFDLENBQUMifQ==
|
package/build/main/index.d.ts
CHANGED
package/build/main/index.js
CHANGED
|
@@ -20,4 +20,5 @@ __exportStar(require("./lib/checkWikiValidity"), exports);
|
|
|
20
20
|
__exportStar(require("./types/wiki"), exports);
|
|
21
21
|
__exportStar(require("./types/wikiBuilder"), exports);
|
|
22
22
|
__exportStar(require("./data/constants"), exports);
|
|
23
|
-
|
|
23
|
+
__exportStar(require("./schema/wiki.schema"), exports);
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQztBQUNoQyxvREFBa0M7QUFDbEMsMERBQXdDO0FBQ3hDLCtDQUE2QjtBQUM3QixzREFBb0M7QUFDcEMsbURBQWlDO0FBQ2pDLHVEQUFvQyJ9
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.validateWiki = exports.hasNoCitations = exports.isSummaryTooLong = exports.isEventDateMissing = exports.isEventUrlMissing = exports.isAnyMediaUploading = exports.isMediaValid = exports.areContentLinksVerified = exports.isValidUrl = exports.countWords = void 0;
|
|
4
4
|
const constants_1 = require("../data/constants");
|
|
5
|
+
const wiki_schema_1 = require("../schema/wiki.schema");
|
|
5
6
|
const wiki_1 = require("../types/wiki");
|
|
6
7
|
/**
|
|
7
8
|
* Counts the number of words in a given string.
|
|
@@ -57,21 +58,23 @@ const isMediaValid = (wiki) => {
|
|
|
57
58
|
if (!wiki.media)
|
|
58
59
|
return true;
|
|
59
60
|
const isMediaContentValid = wiki.media.every((media) => {
|
|
60
|
-
if (media.source ===
|
|
61
|
-
media.source ===
|
|
61
|
+
if (media.source === wiki_schema_1.MediaSourceEnum.Enum.IPFS_IMG ||
|
|
62
|
+
media.source === wiki_schema_1.MediaSourceEnum.Enum.IPFS_VID) {
|
|
62
63
|
return media.id.length === constants_1.IPFS_HASH_LENGTH;
|
|
63
64
|
}
|
|
64
|
-
if (media.source ===
|
|
65
|
+
if (media.source === wiki_schema_1.MediaSourceEnum.Enum.YOUTUBE) {
|
|
65
66
|
const youtubePattern = /^.*(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/|shorts\/|watch\?v=)([^#&?]*).*/;
|
|
66
67
|
return (media.id === `https://www.youtube.com/watch?v=${media.name}` &&
|
|
67
68
|
youtubePattern.test(media.id));
|
|
68
69
|
}
|
|
69
|
-
if (media.source ===
|
|
70
|
+
if (media.source === wiki_schema_1.MediaSourceEnum.Enum.VIMEO) {
|
|
70
71
|
return media.id === `https://vimeo.com/${media.name}`;
|
|
71
72
|
}
|
|
72
|
-
return media.type
|
|
73
|
+
return media.type
|
|
74
|
+
? Object.values(wiki_schema_1.MediaTypeEnum).includes(media.type)
|
|
75
|
+
: true;
|
|
73
76
|
});
|
|
74
|
-
const iconMediaCount = wiki.media.filter((media) => media.type ===
|
|
77
|
+
const iconMediaCount = wiki.media.filter((media) => media.type === wiki_schema_1.MediaTypeEnum.Enum.ICON).length;
|
|
75
78
|
return (wiki.media.length <= constants_1.MAX_MEDIA_COUNT &&
|
|
76
79
|
isMediaContentValid &&
|
|
77
80
|
iconMediaCount <= 1);
|
|
@@ -95,7 +98,7 @@ exports.isAnyMediaUploading = isAnyMediaUploading;
|
|
|
95
98
|
const isEventUrlMissing = (wiki) => {
|
|
96
99
|
var _a;
|
|
97
100
|
if (wiki.tags.some((tag) => tag.id === "Events")) {
|
|
98
|
-
const referencesData = ((_a = wiki.metadata.find((meta) => meta.id ===
|
|
101
|
+
const referencesData = ((_a = wiki.metadata.find((meta) => meta.id === wiki_schema_1.CommonMetaIdsEnum.Enum.references)) === null || _a === void 0 ? void 0 : _a.value) || "[]";
|
|
99
102
|
const references = JSON.parse(referencesData);
|
|
100
103
|
return !references.some((item) => item.description.toLowerCase() === "event link");
|
|
101
104
|
}
|
|
@@ -122,7 +125,7 @@ exports.isSummaryTooLong = isSummaryTooLong;
|
|
|
122
125
|
* @returns True if there are no citations, false otherwise.
|
|
123
126
|
*/
|
|
124
127
|
const hasNoCitations = (wiki) => {
|
|
125
|
-
const references = wiki.metadata.find((meta) => meta.id ===
|
|
128
|
+
const references = wiki.metadata.find((meta) => meta.id === wiki_schema_1.CommonMetaIdsEnum.Enum.references);
|
|
126
129
|
return !(references === null || references === void 0 ? void 0 : references.value) || references.value.length === 0;
|
|
127
130
|
};
|
|
128
131
|
exports.hasNoCitations = hasNoCitations;
|
|
@@ -203,4 +206,4 @@ const validateWiki = (wiki) => {
|
|
|
203
206
|
return { isValid: true };
|
|
204
207
|
};
|
|
205
208
|
exports.validateWiki = validateWiki;
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tXaWtpVmFsaWRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NoZWNrV2lraVZhbGlkaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQU8yQjtBQUMzQix1REFLK0I7QUFDL0Isd0NBQXlFO0FBRXpFOzs7O0dBSUc7QUFDSSxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBRHpDLFFBQUEsVUFBVSxjQUMrQjtBQUV0RDs7OztHQUlHO0FBQ0ksTUFBTSxVQUFVLEdBQUcsQ0FBQyxTQUFpQixFQUFFLEVBQUU7SUFDL0MsSUFBSTtRQUNILE9BQU8sT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDbkM7SUFBQyxPQUFPLEVBQUUsRUFBRTtRQUNaLE9BQU8sS0FBSyxDQUFDO0tBQ2I7QUFDRixDQUFDLENBQUM7QUFOVyxRQUFBLFVBQVUsY0FNckI7QUFFRjs7OztHQUlHO0FBQ0ksTUFBTSx1QkFBdUIsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFOztJQUMxRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDM0QsT0FBTyxDQUNOLE1BQUEsYUFBYSxhQUFiLGFBQWEsdUJBQWIsYUFBYSxDQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzdCLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FDMUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUvQyxJQUNDLFFBQVE7WUFDUixPQUFP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
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import { type Media, type TagEnum } from "../../schema/wiki.schema";
|
|
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
|
+
export declare const countWords: (text: string) => number;
|
|
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
|
+
export declare const isValidUrl: (urlString: string) => boolean;
|
|
15
|
+
export declare const validateMediaContent: (media: Media[]) => boolean;
|
|
16
|
+
export declare const validateMediaCount: (media: Media[]) => boolean;
|
|
17
|
+
export declare const validateEventWiki: (wiki: {
|
|
18
|
+
tags: {
|
|
19
|
+
id: z.infer<typeof TagEnum>;
|
|
20
|
+
}[];
|
|
21
|
+
metadata: {
|
|
22
|
+
id: string;
|
|
23
|
+
value?: string;
|
|
24
|
+
}[];
|
|
25
|
+
events?: unknown[];
|
|
26
|
+
}) => boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Checks if all content links in the given text are verified.
|
|
29
|
+
* @param content - The content to check for links.
|
|
30
|
+
* @returns True if all links are verified, false otherwise.
|
|
31
|
+
*/
|
|
32
|
+
export declare const areContentLinksVerified: (content: string) => boolean;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.areContentLinksVerified = exports.validateEventWiki = exports.validateMediaCount = exports.validateMediaContent = exports.isValidUrl = exports.countWords = void 0;
|
|
4
|
+
const constants_1 = require("../../data/constants");
|
|
5
|
+
const wiki_schema_1 = require("../../schema/wiki.schema");
|
|
6
|
+
const wiki_1 = require("../../types/wiki");
|
|
7
|
+
/**
|
|
8
|
+
* Counts the number of words in a given string.
|
|
9
|
+
* @param text - The input string to count words from.
|
|
10
|
+
* @returns The number of words in the string.
|
|
11
|
+
*/
|
|
12
|
+
const countWords = (text) => text.split(" ").filter((word) => word !== "").length;
|
|
13
|
+
exports.countWords = countWords;
|
|
14
|
+
/**
|
|
15
|
+
* Checks if a given string is a valid URL.
|
|
16
|
+
* @param urlString - The string to check.
|
|
17
|
+
* @returns True if the string is a valid URL, false otherwise.
|
|
18
|
+
*/
|
|
19
|
+
const isValidUrl = (urlString) => {
|
|
20
|
+
try {
|
|
21
|
+
return Boolean(new URL(urlString));
|
|
22
|
+
}
|
|
23
|
+
catch (_e) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.isValidUrl = isValidUrl;
|
|
28
|
+
const validateMediaContent = (media) => {
|
|
29
|
+
return media.every((item) => {
|
|
30
|
+
if (item.source === wiki_schema_1.MediaSourceEnum.Enum.IPFS_IMG ||
|
|
31
|
+
item.source === wiki_schema_1.MediaSourceEnum.Enum.IPFS_VID) {
|
|
32
|
+
return item.id.length === constants_1.IPFS_HASH_LENGTH;
|
|
33
|
+
}
|
|
34
|
+
if (item.source === wiki_schema_1.MediaSourceEnum.Enum.YOUTUBE) {
|
|
35
|
+
const youtubePattern = /^.*(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/|shorts\/|watch\?v=)([^#&?]*).*/;
|
|
36
|
+
return (item.id === `https://www.youtube.com/watch?v=${item.name}` &&
|
|
37
|
+
youtubePattern.test(item.id));
|
|
38
|
+
}
|
|
39
|
+
if (item.source === wiki_schema_1.MediaSourceEnum.Enum.VIMEO) {
|
|
40
|
+
return item.id === `https://vimeo.com/${item.name}`;
|
|
41
|
+
}
|
|
42
|
+
return item.type ? item.type in wiki_schema_1.MediaTypeEnum : true;
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
exports.validateMediaContent = validateMediaContent;
|
|
46
|
+
const validateMediaCount = (media) => {
|
|
47
|
+
const iconMediaCount = media.filter((item) => item.type === wiki_schema_1.MediaTypeEnum.Enum.ICON).length;
|
|
48
|
+
return media.length <= constants_1.MAX_MEDIA_COUNT && iconMediaCount <= 1;
|
|
49
|
+
};
|
|
50
|
+
exports.validateMediaCount = validateMediaCount;
|
|
51
|
+
const validateEventWiki = (wiki) => {
|
|
52
|
+
var _a;
|
|
53
|
+
if (wiki.tags.some((tag) => tag.id === "Events")) {
|
|
54
|
+
const referencesData = ((_a = wiki.metadata.find((meta) => meta.id === wiki_schema_1.CommonMetaIdsEnum.Enum.references)) === null || _a === void 0 ? void 0 : _a.value) || "[]";
|
|
55
|
+
const references = JSON.parse(referencesData);
|
|
56
|
+
const hasEventLink = references.some((item) => item.description.toLowerCase() === "event link");
|
|
57
|
+
return hasEventLink && Array.isArray(wiki.events) && wiki.events.length > 0;
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
};
|
|
61
|
+
exports.validateEventWiki = validateEventWiki;
|
|
62
|
+
/**
|
|
63
|
+
* Checks if all content links in the given text are verified.
|
|
64
|
+
* @param content - The content to check for links.
|
|
65
|
+
* @returns True if all links are verified, false otherwise.
|
|
66
|
+
*/
|
|
67
|
+
const areContentLinksVerified = (content) => {
|
|
68
|
+
var _a;
|
|
69
|
+
const markdownLinks = content.match(/\[(.*?)\]\((.*?)\)/g);
|
|
70
|
+
return ((_a = markdownLinks === null || markdownLinks === void 0 ? void 0 : markdownLinks.every((link) => {
|
|
71
|
+
const [, linkText, linkUrl] = RegExp(/\[(.*?)\]\((.*?)\)/).exec(link) || [];
|
|
72
|
+
if (linkText &&
|
|
73
|
+
linkUrl &&
|
|
74
|
+
wiki_1.whiteListedLinkNames.includes(linkText) &&
|
|
75
|
+
!(0, exports.isValidUrl)(linkUrl)) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
if (linkUrl && !linkUrl.startsWith("#")) {
|
|
79
|
+
const validDomainPattern = new RegExp(`^https?://(www\\.)?(${wiki_1.whiteListedDomains.join("|")})`);
|
|
80
|
+
return validDomainPattern.test(linkUrl);
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
})) !== null && _a !== void 0 ? _a : true);
|
|
84
|
+
};
|
|
85
|
+
exports.areContentLinksVerified = areContentLinksVerified;
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lraS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9oZWxwZXJzL3dpa2kuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxvREFBeUU7QUFDekUsMERBTWtDO0FBQ2xDLDJDQUE0RTtBQUM1RTs7OztHQUlHO0FBRUksTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUR6QyxRQUFBLFVBQVUsY0FDK0I7QUFFdEQ7Ozs7R0FJRztBQUNJLE1BQU0sVUFBVSxHQUFHLENBQUMsU0FBaUIsRUFBRSxFQUFFO0lBQy9DLElBQUk7UUFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQ25DO0lBQUMsT0FBTyxFQUFFLEVBQUU7UUFDWixPQUFPLEtBQUssQ0FBQztLQUNiO0FBQ0YsQ0FBQyxDQUFDO0FBTlcsUUFBQSxVQUFVLGNBTXJCO0FBRUssTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO0lBQ3RELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzNCLElBQ0MsSUFBSSxDQUFDLE1BQU0sS0FBSyw2QkFBZSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQzdDLElBQUksQ0FBQyxNQUFNLEtBQUssNkJBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUM1QztZQUNELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssNEJBQWdCLENBQUM7U0FDM0M7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssNkJBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lB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
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { type Wiki } from "../
|
|
1
|
+
import { type Wiki } from "../schema/wiki.schema";
|
|
2
2
|
export declare const calculateWikiScore: (wiki: Wiki) => number;
|
|
@@ -1,44 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.calculateWikiScore = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const GOOD_CONTENT_WORD_COUNT = 500;
|
|
7
|
-
const IDEAL_CONTENT_WORD_COUNT = 1500;
|
|
8
|
-
const CONTENT_SCORE_WEIGHT = 0.8;
|
|
9
|
-
const INTERNAL_LINKS_SCORE_WEIGHT = 0.5;
|
|
10
|
-
const CITATIONS_SCORE_WEIGHT = 0.5;
|
|
11
|
-
const MEDIA_SCORE_WEIGHT = 0.3;
|
|
12
|
-
const TAGS_SCORE_WEIGHT = 0.3;
|
|
13
|
-
const SUMMARY_SCORE_WEIGHT = 0.5;
|
|
14
|
-
const SOCIAL_SCORE_WEIGHT = 0.5;
|
|
15
|
-
const IDEAL_INTERNAL_LINKS_COUNT = 10;
|
|
16
|
-
const IDEAL_CITATIONS_COUNT = 10;
|
|
17
|
-
const IDEAL_MEDIA_COUNT = 5;
|
|
18
|
-
const IDEAL_TAGS_COUNT = 3;
|
|
19
|
-
const IDEAL_SUMMARY_LENGTH = 100;
|
|
20
|
-
const IDEAL_SOCIAL_MEDIA_COUNT = 4;
|
|
4
|
+
const constants_1 = require("../data/constants");
|
|
5
|
+
const wiki_schema_1 = require("../schema/wiki.schema");
|
|
21
6
|
const contentQuality = (wordCount) => {
|
|
22
7
|
const scoreMin = 0.0;
|
|
23
8
|
const scoreMax = 1.0;
|
|
24
9
|
let score = 0;
|
|
25
|
-
if (wordCount < MIN_CONTENT_WORD_COUNT) {
|
|
10
|
+
if (wordCount < constants_1.MIN_CONTENT_WORD_COUNT) {
|
|
26
11
|
return scoreMin;
|
|
27
12
|
}
|
|
28
|
-
if (wordCount >= MIN_CONTENT_WORD_COUNT &&
|
|
29
|
-
wordCount <= GOOD_CONTENT_WORD_COUNT) {
|
|
30
|
-
score = wordCount / GOOD_CONTENT_WORD_COUNT;
|
|
13
|
+
if (wordCount >= constants_1.MIN_CONTENT_WORD_COUNT &&
|
|
14
|
+
wordCount <= constants_1.GOOD_CONTENT_WORD_COUNT) {
|
|
15
|
+
score = wordCount / constants_1.GOOD_CONTENT_WORD_COUNT;
|
|
31
16
|
score *= 0.8;
|
|
32
17
|
}
|
|
33
|
-
if (wordCount > GOOD_CONTENT_WORD_COUNT &&
|
|
34
|
-
wordCount < IDEAL_CONTENT_WORD_COUNT) {
|
|
18
|
+
if (wordCount > constants_1.GOOD_CONTENT_WORD_COUNT &&
|
|
19
|
+
wordCount < constants_1.IDEAL_CONTENT_WORD_COUNT) {
|
|
35
20
|
const baseScore = 0.8;
|
|
36
|
-
const wordCountAboveGood = wordCount - GOOD_CONTENT_WORD_COUNT;
|
|
37
|
-
const extraScoreFactor = wordCountAboveGood / (IDEAL_CONTENT_WORD_COUNT - GOOD_CONTENT_WORD_COUNT);
|
|
21
|
+
const wordCountAboveGood = wordCount - constants_1.GOOD_CONTENT_WORD_COUNT;
|
|
22
|
+
const extraScoreFactor = wordCountAboveGood / (constants_1.IDEAL_CONTENT_WORD_COUNT - constants_1.GOOD_CONTENT_WORD_COUNT);
|
|
38
23
|
const extraScore = Math.sqrt(extraScoreFactor) * 0.2;
|
|
39
24
|
score = baseScore + extraScore;
|
|
40
25
|
}
|
|
41
|
-
if (wordCount >= IDEAL_CONTENT_WORD_COUNT) {
|
|
26
|
+
if (wordCount >= constants_1.IDEAL_CONTENT_WORD_COUNT) {
|
|
42
27
|
return scoreMax;
|
|
43
28
|
}
|
|
44
29
|
if (score < scoreMin) {
|
|
@@ -85,7 +70,7 @@ const getWikiInternalLinks = (content) => {
|
|
|
85
70
|
};
|
|
86
71
|
const getWikiCitationLinks = (wiki) => {
|
|
87
72
|
var _a;
|
|
88
|
-
const rawWikiReferences = (_a = wiki.metadata.find((m) => m.id ===
|
|
73
|
+
const rawWikiReferences = (_a = wiki.metadata.find((m) => m.id === wiki_schema_1.CommonMetaIdsEnum.Enum.references)) === null || _a === void 0 ? void 0 : _a.value;
|
|
89
74
|
if (rawWikiReferences === undefined ||
|
|
90
75
|
(rawWikiReferences === null || rawWikiReferences === void 0 ? void 0 : rawWikiReferences.trim().length) === 0) {
|
|
91
76
|
return 0;
|
|
@@ -96,7 +81,7 @@ const getWikiCitationLinks = (wiki) => {
|
|
|
96
81
|
const getSocialsCount = (wiki) => {
|
|
97
82
|
let socialsCount = 0;
|
|
98
83
|
for (const meta of wiki.metadata) {
|
|
99
|
-
if (
|
|
84
|
+
if (wiki_schema_1.WikiPossibleSocialsList.includes(meta.id)) {
|
|
100
85
|
if (meta.value) {
|
|
101
86
|
socialsCount += 1;
|
|
102
87
|
}
|
|
@@ -114,29 +99,29 @@ const calculateWikiScore = (wiki) => {
|
|
|
114
99
|
const summaryWordCount = ((_c = wiki.summary) === null || _c === void 0 ? void 0 : _c.length) || 0;
|
|
115
100
|
const socialsCount = getSocialsCount(wiki);
|
|
116
101
|
const contentScore = contentQuality(wordCount);
|
|
117
|
-
const internalLinksScore = countQuality(IDEAL_INTERNAL_LINKS_COUNT, internalLinksCount);
|
|
118
|
-
const citationScore = countQuality(IDEAL_CITATIONS_COUNT, citationCount);
|
|
119
|
-
const mediaScore = countQuality(IDEAL_MEDIA_COUNT, mediaCount);
|
|
120
|
-
const tagsScore = countQuality(IDEAL_TAGS_COUNT, tagsCount);
|
|
121
|
-
const summaryScore = countQuality(IDEAL_SUMMARY_LENGTH, summaryWordCount);
|
|
122
|
-
const socialsScore = countQuality(IDEAL_SOCIAL_MEDIA_COUNT, socialsCount);
|
|
123
|
-
const sumOfWeights = CONTENT_SCORE_WEIGHT +
|
|
124
|
-
INTERNAL_LINKS_SCORE_WEIGHT +
|
|
125
|
-
CITATIONS_SCORE_WEIGHT +
|
|
126
|
-
MEDIA_SCORE_WEIGHT +
|
|
127
|
-
TAGS_SCORE_WEIGHT +
|
|
128
|
-
SUMMARY_SCORE_WEIGHT +
|
|
129
|
-
SOCIAL_SCORE_WEIGHT;
|
|
130
|
-
const score = (contentScore * CONTENT_SCORE_WEIGHT +
|
|
131
|
-
internalLinksScore * INTERNAL_LINKS_SCORE_WEIGHT +
|
|
132
|
-
citationScore * CITATIONS_SCORE_WEIGHT +
|
|
133
|
-
mediaScore * MEDIA_SCORE_WEIGHT +
|
|
134
|
-
tagsScore * TAGS_SCORE_WEIGHT +
|
|
135
|
-
summaryScore * SUMMARY_SCORE_WEIGHT +
|
|
136
|
-
socialsScore * SOCIAL_SCORE_WEIGHT) /
|
|
102
|
+
const internalLinksScore = countQuality(constants_1.IDEAL_INTERNAL_LINKS_COUNT, internalLinksCount);
|
|
103
|
+
const citationScore = countQuality(constants_1.IDEAL_CITATIONS_COUNT, citationCount);
|
|
104
|
+
const mediaScore = countQuality(constants_1.IDEAL_MEDIA_COUNT, mediaCount);
|
|
105
|
+
const tagsScore = countQuality(constants_1.IDEAL_TAGS_COUNT, tagsCount);
|
|
106
|
+
const summaryScore = countQuality(constants_1.IDEAL_SUMMARY_LENGTH, summaryWordCount);
|
|
107
|
+
const socialsScore = countQuality(constants_1.IDEAL_SOCIAL_MEDIA_COUNT, socialsCount);
|
|
108
|
+
const sumOfWeights = constants_1.CONTENT_SCORE_WEIGHT +
|
|
109
|
+
constants_1.INTERNAL_LINKS_SCORE_WEIGHT +
|
|
110
|
+
constants_1.CITATIONS_SCORE_WEIGHT +
|
|
111
|
+
constants_1.MEDIA_SCORE_WEIGHT +
|
|
112
|
+
constants_1.TAGS_SCORE_WEIGHT +
|
|
113
|
+
constants_1.SUMMARY_SCORE_WEIGHT +
|
|
114
|
+
constants_1.SOCIAL_SCORE_WEIGHT;
|
|
115
|
+
const score = (contentScore * constants_1.CONTENT_SCORE_WEIGHT +
|
|
116
|
+
internalLinksScore * constants_1.INTERNAL_LINKS_SCORE_WEIGHT +
|
|
117
|
+
citationScore * constants_1.CITATIONS_SCORE_WEIGHT +
|
|
118
|
+
mediaScore * constants_1.MEDIA_SCORE_WEIGHT +
|
|
119
|
+
tagsScore * constants_1.TAGS_SCORE_WEIGHT +
|
|
120
|
+
summaryScore * constants_1.SUMMARY_SCORE_WEIGHT +
|
|
121
|
+
socialsScore * constants_1.SOCIAL_SCORE_WEIGHT) /
|
|
137
122
|
sumOfWeights;
|
|
138
123
|
const percentScore = Math.floor(score * 100);
|
|
139
124
|
return percentScore;
|
|
140
125
|
};
|
|
141
126
|
exports.calculateWikiScore = calculateWikiScore;
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lraVNjb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93aWtpU2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBaUIyQjtBQUMzQix1REFJK0I7QUFFL0IsTUFBTSxjQUFjLEdBQUcsQ0FBQyxTQUFpQixFQUFVLEVBQUU7SUFDcEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUVyQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFZCxJQUFJLFNBQVMsR0FBRyxrQ0FBc0IsRUFBRTtRQUN2QyxPQUFPLFFBQVEsQ0FBQztLQUNoQjtJQUVELElBQ0MsU0FBUyxJQUFJLGtDQUFzQjtRQUNuQyxTQUFTLElBQUksbUNBQXVCLEVBQ25DO1FBQ0QsS0FBSyxHQUFHLFNBQVMsR0FBRyxtQ0FBdUIsQ0FBQztRQUM1QyxLQUFLLElBQUksR0FBRyxDQUFDO0tBQ2I7SUFFRCxJQUNDLFNBQVMsR0FBRyxtQ0FBdUI7UUFDbkMsU0FBUyxHQUFHLG9DQUF3QixFQUNuQztRQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUN0QixNQUFNLGtCQUFrQixHQUFHLFNBQVMsR0FBRyxtQ0FBdUIsQ0FBQztRQUMvRCxNQUFNLGdCQUFnQixHQUNyQixrQkFBa0IsR0FBRyxDQUFDLG9DQUF3QixHQUFHLG1DQUF1QixDQUFDLENBQUM7UUFDM0UsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNyRCxLQUFLLEdBQUcsU0FBUyxHQUFHLFVBQVUsQ0FBQztLQUMvQjtJQUVELElBQUksU0FBUyxJQUFJLG9DQUF3QixFQUFFO1FBQzFDLE9BQU8sUUFBUSxDQUFDO0tBQ2hCO0lBRUQsSUFBSSxLQUFLLEdBQUcsUUFBUSxFQUFFO1FBQ3JCLE9BQU8sUUFBUSxDQUFDO0tBQ2hCO0lBRUQsSUFB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
|