axyseo 2.1.36 → 2.1.38

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.
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.urlsRate = exports.technicalSeoRate = exports.technicalSEOCategory = exports.statusRate = exports.priorityRate = exports.metaTagRate = exports.mainContentRate = exports.linkRecommendRate = exports.keywordRate = exports.faqsRate = exports.contentSEOCategory = exports.URL_LENGTH_ID = exports.URLS_POINTS = exports.TITLE_WIDTH_ID = exports.TITLE_KEYWORD_ID = exports.TEXT_TRANSITION_WORDS_ID = exports.TEXT_SENTENCE_LENGTH_ID = exports.TEXT_PARAGRAPH_TOO_LONG_ID = exports.TEXT_LENGTH_ID = exports.TEXT_IMAGES_ID = exports.TECHNICAL_SEO_POINTS = exports.SUBHEADINGS_KEYWORD_ID = exports.SLUG_KEYWORD_ID = exports.SINGLE_TITLE_ID = exports.SINGLE_H1_ID = exports.SENTENCE_BEGINNINGS_ID = exports.SCHEMA_ID = exports.RELATED_KEYWORDS_ID = exports.RELATED_KEYWORDS_DENSITY_ID = exports.POINT = exports.NUMBER_TITLE_ID = exports.META_TAG_POINTS = exports.META_DESCRIPTION_LENGTH_ID = exports.META_DESCRIPTION_KEYWORD_ID = exports.MEDIA_ID = exports.MAIN_CONTENT_POINTS = exports.LINK_RECOMMEND_POINTS = exports.KEYWORD_POINTS = exports.KEYWORD_FAQs_ASSESSMENT_ID = exports.KEYPHRASE_LENGTH_ID = exports.KEYPHRASE_ID = exports.KEYPHRASE_DENSITY_ID = exports.INTRODUCTION_KEYWORD_ID = exports.INTERNAL_LINKS_ID = exports.IMAGES_ID = exports.FAQs_STRUCTURE_DATA_ID = exports.FAQs_ASSESSMENT_ID = exports.FAQS_POINTS = exports.EXTERNAL_LINKS_ID = exports.CHARACTERS_URL = void 0;
6
+ exports.urlsRate = exports.technicalSeoRate = exports.technicalSEOCategory = exports.statusRate = exports.priorityRate = exports.metaTagRate = exports.mainContentRate = exports.linkRecommendRate = exports.keywordRate = exports.idPointsMap = exports.faqsRate = exports.contentSEOCategory = exports.URL_LENGTH_ID = exports.URLS_POINTS = exports.TITLE_WIDTH_ID = exports.TITLE_KEYWORD_ID = exports.TEXT_TRANSITION_WORDS_ID = exports.TEXT_SENTENCE_LENGTH_ID = exports.TEXT_PARAGRAPH_TOO_LONG_ID = exports.TEXT_LENGTH_ID = exports.TEXT_IMAGES_ID = exports.TECHNICAL_SEO_POINTS = exports.SUBHEADINGS_KEYWORD_ID = exports.SLUG_KEYWORD_ID = exports.SINGLE_TITLE_ID = exports.SINGLE_H1_ID = exports.SENTENCE_BEGINNINGS_ID = exports.SCHEMA_ID = exports.RELATED_KEYWORDS_ID = exports.RELATED_KEYWORDS_DENSITY_ID = exports.POINT = exports.NUMBER_TITLE_ID = exports.META_TAG_POINTS = exports.META_DESCRIPTION_LENGTH_ID = exports.META_DESCRIPTION_KEYWORD_ID = exports.MEDIA_ID = exports.MAIN_CONTENT_POINTS = exports.LINK_RECOMMEND_POINTS = exports.KEYWORD_POINTS = exports.KEYWORD_FAQs_ASSESSMENT_ID = exports.KEYPHRASE_LENGTH_ID = exports.KEYPHRASE_ID = exports.KEYPHRASE_DENSITY_ID = exports.INTRODUCTION_KEYWORD_ID = exports.INTERNAL_LINKS_ID = exports.IMAGES_ID = exports.FAQs_STRUCTURE_DATA_ID = exports.FAQs_ASSESSMENT_ID = exports.FAQS_POINTS = exports.EXTERNAL_LINKS_ID = exports.CHARACTERS_URL = void 0;
7
7
  const POINT = exports.POINT = 100;
8
8
  const keywordRate = exports.keywordRate = {
9
9
  rate: 15,
@@ -82,4 +82,37 @@ const RELATED_KEYWORDS_ID = exports.RELATED_KEYWORDS_ID = 'relatedKeywords';
82
82
  const RELATED_KEYWORDS_DENSITY_ID = exports.RELATED_KEYWORDS_DENSITY_ID = 'relatedKeywordsDensity';
83
83
  const MEDIA_ID = exports.MEDIA_ID = 'media';
84
84
  const contentSEOCategory = exports.contentSEOCategory = [INTRODUCTION_KEYWORD_ID, FAQs_ASSESSMENT_ID, SENTENCE_BEGINNINGS_ID, TEXT_SENTENCE_LENGTH_ID, TEXT_LENGTH_ID, TITLE_KEYWORD_ID, KEYPHRASE_LENGTH_ID, TEXT_TRANSITION_WORDS_ID, KEYPHRASE_DENSITY_ID, SLUG_KEYWORD_ID, KEYPHRASE_ID, TEXT_PARAGRAPH_TOO_LONG_ID, SUBHEADINGS_KEYWORD_ID, IMAGES_ID, NUMBER_TITLE_ID, META_DESCRIPTION_KEYWORD_ID, KEYWORD_FAQs_ASSESSMENT_ID, RELATED_KEYWORDS_ID, RELATED_KEYWORDS_DENSITY_ID, MEDIA_ID, CHARACTERS_URL, FAQs_STRUCTURE_DATA_ID];
85
+ const idPointsMap = exports.idPointsMap = {
86
+ // keyword (15pts / 2 items = 7.5)
87
+ [KEYPHRASE_ID]: KEYWORD_POINTS,
88
+ [RELATED_KEYWORDS_ID]: KEYWORD_POINTS,
89
+ // technicalSeo (20pts / 3 items ≈ 6.67)
90
+ [SINGLE_H1_ID]: TECHNICAL_SEO_POINTS,
91
+ [SINGLE_TITLE_ID]: TECHNICAL_SEO_POINTS,
92
+ [SCHEMA_ID]: TECHNICAL_SEO_POINTS,
93
+ // mainContent (25pts / 7 items ≈ 3.57)
94
+ [KEYPHRASE_DENSITY_ID]: MAIN_CONTENT_POINTS,
95
+ [TEXT_PARAGRAPH_TOO_LONG_ID]: MAIN_CONTENT_POINTS,
96
+ [RELATED_KEYWORDS_DENSITY_ID]: MAIN_CONTENT_POINTS,
97
+ [TEXT_SENTENCE_LENGTH_ID]: MAIN_CONTENT_POINTS,
98
+ [INTRODUCTION_KEYWORD_ID]: MAIN_CONTENT_POINTS,
99
+ [SUBHEADINGS_KEYWORD_ID]: MAIN_CONTENT_POINTS,
100
+ [TEXT_LENGTH_ID]: MAIN_CONTENT_POINTS,
101
+ // metaTags (15pts / 4 items = 3.75)
102
+ [TITLE_WIDTH_ID]: META_TAG_POINTS,
103
+ [META_DESCRIPTION_LENGTH_ID]: META_TAG_POINTS,
104
+ [META_DESCRIPTION_KEYWORD_ID]: META_TAG_POINTS,
105
+ [TITLE_KEYWORD_ID]: META_TAG_POINTS,
106
+ // linkRecommend (10pts / 2 items = 5)
107
+ [INTERNAL_LINKS_ID]: LINK_RECOMMEND_POINTS,
108
+ [EXTERNAL_LINKS_ID]: LINK_RECOMMEND_POINTS,
109
+ // faqs (10pts / 3 items ≈ 3.33)
110
+ [FAQs_ASSESSMENT_ID]: FAQS_POINTS,
111
+ [KEYWORD_FAQs_ASSESSMENT_ID]: FAQS_POINTS,
112
+ [FAQs_STRUCTURE_DATA_ID]: FAQS_POINTS,
113
+ // urls (5pts / 3 items ≈ 1.67)
114
+ [URL_LENGTH_ID]: URLS_POINTS,
115
+ [SLUG_KEYWORD_ID]: URLS_POINTS,
116
+ [CHARACTERS_URL]: URLS_POINTS
117
+ };
85
118
  //# sourceMappingURL=analysis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.js","names":["POINT","exports","keywordRate","rate","items","technicalSeoRate","mainContentRate","metaTagRate","linkRecommendRate","faqsRate","urlsRate","priorityRate","high","medium","low","statusRate","good","bad","KEYWORD_POINTS","TECHNICAL_SEO_POINTS","MAIN_CONTENT_POINTS","META_TAG_POINTS","LINK_RECOMMEND_POINTS","FAQS_POINTS","URLS_POINTS","SINGLE_H1_ID","META_DESCRIPTION_LENGTH_ID","URL_LENGTH_ID","INTERNAL_LINKS_ID","EXTERNAL_LINKS_ID","TITLE_WIDTH_ID","TEXT_IMAGES_ID","SCHEMA_ID","SINGLE_TITLE_ID","technicalSEOCategory","INTRODUCTION_KEYWORD_ID","SENTENCE_BEGINNINGS_ID","TEXT_SENTENCE_LENGTH_ID","TEXT_LENGTH_ID","FAQs_ASSESSMENT_ID","FAQs_STRUCTURE_DATA_ID","KEYWORD_FAQs_ASSESSMENT_ID","TITLE_KEYWORD_ID","KEYPHRASE_LENGTH_ID","TEXT_TRANSITION_WORDS_ID","KEYPHRASE_DENSITY_ID","SLUG_KEYWORD_ID","CHARACTERS_URL","KEYPHRASE_ID","TEXT_PARAGRAPH_TOO_LONG_ID","SUBHEADINGS_KEYWORD_ID","IMAGES_ID","NUMBER_TITLE_ID","META_DESCRIPTION_KEYWORD_ID","RELATED_KEYWORDS_ID","RELATED_KEYWORDS_DENSITY_ID","MEDIA_ID","contentSEOCategory"],"sources":["../../../src/const/analysis.js"],"sourcesContent":["export const POINT = 100;\nexport const keywordRate = {\n rate: 15,\n items: 2\n}\nexport const technicalSeoRate = {\n rate: 20,\n items: 3\n}\nexport const mainContentRate = {\n rate: 25,\n items: 7\n}\nexport const metaTagRate = {\n rate: 15,\n items: 4\n}\nexport const linkRecommendRate = {\n rate: 10,\n items: 2\n}\nexport const faqsRate = {\n rate: 10,\n items: 3\n}\nexport const urlsRate = {\n rate: 5,\n items: 3\n}\n\nexport const priorityRate = {\n high: 1,\n medium: 0.75,\n low: 0.5\n};\nexport const statusRate = {\n good: 1,\n bad: 0\n};\nexport const KEYWORD_POINTS = (keywordRate.rate / keywordRate.items);\nexport const TECHNICAL_SEO_POINTS = (technicalSeoRate.rate / technicalSeoRate.items);\nexport const MAIN_CONTENT_POINTS = (mainContentRate.rate / mainContentRate.items);\nexport const META_TAG_POINTS = (metaTagRate.rate / metaTagRate.items);\nexport const LINK_RECOMMEND_POINTS = (linkRecommendRate.rate / linkRecommendRate.items);\nexport const FAQS_POINTS = (faqsRate .rate / faqsRate .items);\nexport const URLS_POINTS = (urlsRate.rate / urlsRate.items);\n\n\n\nexport const SINGLE_H1_ID = 'singleH1';\nexport const META_DESCRIPTION_LENGTH_ID = 'metaDescriptionLength';\nexport const URL_LENGTH_ID = 'urlLength';\nexport const INTERNAL_LINKS_ID = 'internalLinks';\nexport const EXTERNAL_LINKS_ID = 'externalLinks';\nexport const TITLE_WIDTH_ID = 'titleWidth';\nexport const TEXT_IMAGES_ID = 'textImages';\nexport const SCHEMA_ID = 'schema';\nexport const SINGLE_TITLE_ID = 'singleTitle';\n\nexport const technicalSEOCategory = [\n SINGLE_H1_ID,\n META_DESCRIPTION_LENGTH_ID,\n URL_LENGTH_ID,\n INTERNAL_LINKS_ID,\n EXTERNAL_LINKS_ID,\n TITLE_WIDTH_ID,\n TEXT_IMAGES_ID,\n SCHEMA_ID,\n SINGLE_TITLE_ID\n];\n\nexport const INTRODUCTION_KEYWORD_ID = 'introductionKeyword';\nexport const SENTENCE_BEGINNINGS_ID = 'sentenceBeginnings';\nexport const TEXT_SENTENCE_LENGTH_ID = 'textSentenceLength';\nexport const TEXT_LENGTH_ID = 'textLength';\nexport const FAQs_ASSESSMENT_ID = 'faqs';\nexport const FAQs_STRUCTURE_DATA_ID = 'faqsStructuredData';\nexport const KEYWORD_FAQs_ASSESSMENT_ID = 'keywordFaqs';\nexport const TITLE_KEYWORD_ID = 'titleKeyword';\nexport const KEYPHRASE_LENGTH_ID = 'keyphraseLength';\nexport const TEXT_TRANSITION_WORDS_ID = 'textTransitionWords';\nexport const KEYPHRASE_DENSITY_ID = 'keyphraseDensity';\nexport const SLUG_KEYWORD_ID = 'slugKeyword';\nexport const CHARACTERS_URL = 'charactersUrl';\nexport const KEYPHRASE_ID = 'keyphrase';\nexport const TEXT_PARAGRAPH_TOO_LONG_ID = 'textParagraphTooLong';\nexport const SUBHEADINGS_KEYWORD_ID = 'subheadingsKeyword';\nexport const IMAGES_ID = 'images';\nexport const NUMBER_TITLE_ID = 'numberTitle';\nexport const META_DESCRIPTION_KEYWORD_ID = 'metaDescriptionKeyword';\nexport const RELATED_KEYWORDS_ID = 'relatedKeywords';\nexport const RELATED_KEYWORDS_DENSITY_ID = 'relatedKeywordsDensity';\nexport const MEDIA_ID = 'media';\n\nexport const contentSEOCategory = [\n INTRODUCTION_KEYWORD_ID,\n FAQs_ASSESSMENT_ID,\n SENTENCE_BEGINNINGS_ID,\n TEXT_SENTENCE_LENGTH_ID,\n TEXT_LENGTH_ID,\n TITLE_KEYWORD_ID,\n KEYPHRASE_LENGTH_ID,\n TEXT_TRANSITION_WORDS_ID,\n KEYPHRASE_DENSITY_ID,\n SLUG_KEYWORD_ID,\n KEYPHRASE_ID,\n TEXT_PARAGRAPH_TOO_LONG_ID,\n SUBHEADINGS_KEYWORD_ID,\n IMAGES_ID,\n NUMBER_TITLE_ID,\n META_DESCRIPTION_KEYWORD_ID,\n KEYWORD_FAQs_ASSESSMENT_ID,\n RELATED_KEYWORDS_ID,\n RELATED_KEYWORDS_DENSITY_ID,\n MEDIA_ID,\n CHARACTERS_URL,\n FAQs_STRUCTURE_DATA_ID,\n];\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"analysis.js","names":["POINT","exports","keywordRate","rate","items","technicalSeoRate","mainContentRate","metaTagRate","linkRecommendRate","faqsRate","urlsRate","priorityRate","high","medium","low","statusRate","good","bad","KEYWORD_POINTS","TECHNICAL_SEO_POINTS","MAIN_CONTENT_POINTS","META_TAG_POINTS","LINK_RECOMMEND_POINTS","FAQS_POINTS","URLS_POINTS","SINGLE_H1_ID","META_DESCRIPTION_LENGTH_ID","URL_LENGTH_ID","INTERNAL_LINKS_ID","EXTERNAL_LINKS_ID","TITLE_WIDTH_ID","TEXT_IMAGES_ID","SCHEMA_ID","SINGLE_TITLE_ID","technicalSEOCategory","INTRODUCTION_KEYWORD_ID","SENTENCE_BEGINNINGS_ID","TEXT_SENTENCE_LENGTH_ID","TEXT_LENGTH_ID","FAQs_ASSESSMENT_ID","FAQs_STRUCTURE_DATA_ID","KEYWORD_FAQs_ASSESSMENT_ID","TITLE_KEYWORD_ID","KEYPHRASE_LENGTH_ID","TEXT_TRANSITION_WORDS_ID","KEYPHRASE_DENSITY_ID","SLUG_KEYWORD_ID","CHARACTERS_URL","KEYPHRASE_ID","TEXT_PARAGRAPH_TOO_LONG_ID","SUBHEADINGS_KEYWORD_ID","IMAGES_ID","NUMBER_TITLE_ID","META_DESCRIPTION_KEYWORD_ID","RELATED_KEYWORDS_ID","RELATED_KEYWORDS_DENSITY_ID","MEDIA_ID","contentSEOCategory","idPointsMap"],"sources":["../../../src/const/analysis.js"],"sourcesContent":["export const POINT = 100;\nexport const keywordRate = {\n rate: 15,\n items: 2\n}\nexport const technicalSeoRate = {\n rate: 20,\n items: 3\n}\nexport const mainContentRate = {\n rate: 25,\n items: 7\n}\nexport const metaTagRate = {\n rate: 15,\n items: 4\n}\nexport const linkRecommendRate = {\n rate: 10,\n items: 2\n}\nexport const faqsRate = {\n rate: 10,\n items: 3\n}\nexport const urlsRate = {\n rate: 5,\n items: 3\n}\n\nexport const priorityRate = {\n high: 1,\n medium: 0.75,\n low: 0.5\n};\nexport const statusRate = {\n good: 1,\n bad: 0\n};\nexport const KEYWORD_POINTS = (keywordRate.rate / keywordRate.items);\nexport const TECHNICAL_SEO_POINTS = (technicalSeoRate.rate / technicalSeoRate.items);\nexport const MAIN_CONTENT_POINTS = (mainContentRate.rate / mainContentRate.items);\nexport const META_TAG_POINTS = (metaTagRate.rate / metaTagRate.items);\nexport const LINK_RECOMMEND_POINTS = (linkRecommendRate.rate / linkRecommendRate.items);\nexport const FAQS_POINTS = (faqsRate .rate / faqsRate .items);\nexport const URLS_POINTS = (urlsRate.rate / urlsRate.items);\n\n\n\nexport const SINGLE_H1_ID = 'singleH1';\nexport const META_DESCRIPTION_LENGTH_ID = 'metaDescriptionLength';\nexport const URL_LENGTH_ID = 'urlLength';\nexport const INTERNAL_LINKS_ID = 'internalLinks';\nexport const EXTERNAL_LINKS_ID = 'externalLinks';\nexport const TITLE_WIDTH_ID = 'titleWidth';\nexport const TEXT_IMAGES_ID = 'textImages';\nexport const SCHEMA_ID = 'schema';\nexport const SINGLE_TITLE_ID = 'singleTitle';\n\nexport const technicalSEOCategory = [\n SINGLE_H1_ID,\n META_DESCRIPTION_LENGTH_ID,\n URL_LENGTH_ID,\n INTERNAL_LINKS_ID,\n EXTERNAL_LINKS_ID,\n TITLE_WIDTH_ID,\n TEXT_IMAGES_ID,\n SCHEMA_ID,\n SINGLE_TITLE_ID\n];\n\nexport const INTRODUCTION_KEYWORD_ID = 'introductionKeyword';\nexport const SENTENCE_BEGINNINGS_ID = 'sentenceBeginnings';\nexport const TEXT_SENTENCE_LENGTH_ID = 'textSentenceLength';\nexport const TEXT_LENGTH_ID = 'textLength';\nexport const FAQs_ASSESSMENT_ID = 'faqs';\nexport const FAQs_STRUCTURE_DATA_ID = 'faqsStructuredData';\nexport const KEYWORD_FAQs_ASSESSMENT_ID = 'keywordFaqs';\nexport const TITLE_KEYWORD_ID = 'titleKeyword';\nexport const KEYPHRASE_LENGTH_ID = 'keyphraseLength';\nexport const TEXT_TRANSITION_WORDS_ID = 'textTransitionWords';\nexport const KEYPHRASE_DENSITY_ID = 'keyphraseDensity';\nexport const SLUG_KEYWORD_ID = 'slugKeyword';\nexport const CHARACTERS_URL = 'charactersUrl';\nexport const KEYPHRASE_ID = 'keyphrase';\nexport const TEXT_PARAGRAPH_TOO_LONG_ID = 'textParagraphTooLong';\nexport const SUBHEADINGS_KEYWORD_ID = 'subheadingsKeyword';\nexport const IMAGES_ID = 'images';\nexport const NUMBER_TITLE_ID = 'numberTitle';\nexport const META_DESCRIPTION_KEYWORD_ID = 'metaDescriptionKeyword';\nexport const RELATED_KEYWORDS_ID = 'relatedKeywords';\nexport const RELATED_KEYWORDS_DENSITY_ID = 'relatedKeywordsDensity';\nexport const MEDIA_ID = 'media';\n\nexport const contentSEOCategory = [\n INTRODUCTION_KEYWORD_ID,\n FAQs_ASSESSMENT_ID,\n SENTENCE_BEGINNINGS_ID,\n TEXT_SENTENCE_LENGTH_ID,\n TEXT_LENGTH_ID,\n TITLE_KEYWORD_ID,\n KEYPHRASE_LENGTH_ID,\n TEXT_TRANSITION_WORDS_ID,\n KEYPHRASE_DENSITY_ID,\n SLUG_KEYWORD_ID,\n KEYPHRASE_ID,\n TEXT_PARAGRAPH_TOO_LONG_ID,\n SUBHEADINGS_KEYWORD_ID,\n IMAGES_ID,\n NUMBER_TITLE_ID,\n META_DESCRIPTION_KEYWORD_ID,\n KEYWORD_FAQs_ASSESSMENT_ID,\n RELATED_KEYWORDS_ID,\n RELATED_KEYWORDS_DENSITY_ID,\n MEDIA_ID,\n CHARACTERS_URL,\n FAQs_STRUCTURE_DATA_ID,\n];\n\n\nexport const idPointsMap = {\n // keyword (15pts / 2 items = 7.5)\n [KEYPHRASE_ID]: KEYWORD_POINTS,\n [RELATED_KEYWORDS_ID]: KEYWORD_POINTS,\n // technicalSeo (20pts / 3 items ≈ 6.67)\n [SINGLE_H1_ID]: TECHNICAL_SEO_POINTS,\n [SINGLE_TITLE_ID]: TECHNICAL_SEO_POINTS,\n [SCHEMA_ID]: TECHNICAL_SEO_POINTS,\n // mainContent (25pts / 7 items ≈ 3.57)\n [KEYPHRASE_DENSITY_ID]: MAIN_CONTENT_POINTS,\n [TEXT_PARAGRAPH_TOO_LONG_ID]: MAIN_CONTENT_POINTS,\n [RELATED_KEYWORDS_DENSITY_ID]: MAIN_CONTENT_POINTS,\n [TEXT_SENTENCE_LENGTH_ID]: MAIN_CONTENT_POINTS,\n [INTRODUCTION_KEYWORD_ID]: MAIN_CONTENT_POINTS,\n [SUBHEADINGS_KEYWORD_ID]: MAIN_CONTENT_POINTS,\n [TEXT_LENGTH_ID]: MAIN_CONTENT_POINTS,\n // metaTags (15pts / 4 items = 3.75)\n [TITLE_WIDTH_ID]: META_TAG_POINTS,\n [META_DESCRIPTION_LENGTH_ID]: META_TAG_POINTS,\n [META_DESCRIPTION_KEYWORD_ID]: META_TAG_POINTS,\n [TITLE_KEYWORD_ID]: META_TAG_POINTS,\n // linkRecommend (10pts / 2 items = 5)\n [INTERNAL_LINKS_ID]: LINK_RECOMMEND_POINTS,\n [EXTERNAL_LINKS_ID]: LINK_RECOMMEND_POINTS,\n // faqs (10pts / 3 items ≈ 3.33)\n [FAQs_ASSESSMENT_ID]: FAQS_POINTS,\n [KEYWORD_FAQs_ASSESSMENT_ID]: FAQS_POINTS,\n [FAQs_STRUCTURE_DATA_ID]: FAQS_POINTS,\n // urls (5pts / 3 items ≈ 1.67)\n [URL_LENGTH_ID]: URLS_POINTS,\n [SLUG_KEYWORD_ID]: URLS_POINTS,\n [CHARACTERS_URL]: URLS_POINTS,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -120,7 +120,7 @@ class SentenceLengthInTextAssessment extends _assessment.default {
120
120
  */
121
121
  calculateResult(percentage, hasDescription) {
122
122
  let status = 'bad';
123
- if (percentage && hasDescription && percentage <= this._config.recommendedLength) {
123
+ if (hasDescription && percentage <= this._config.slightlyTooMany) {
124
124
  status = 'good';
125
125
  }
126
126
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"SentenceLengthInTextAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_checkForTooLongSentences","_formatNumber","_AssessmentResult","_analysis","e","__esModule","default","SentenceLengthInTextAssessment","Assessment","constructor","config","defaultConfig","id","TEXT_SENTENCE_LENGTH_ID","priority","docUrl","ctaType","fixPosition","recommendedLength","slightlyTooMany","farTooMany","title","content","improve","bad","good","_config","merge","identifier","getResult","paper","researcher","sentences","getResearch","hasDescription","getConfig","getLanguageSpecificConfig","percentage","calculatePercentage","result","calculateResult","assessmentResult","AssessmentResult","setScore","score","setStatus","status","isApplicable","currentConfig","languageSpecificConfig","hasOwnProperty","length","tooLongTotal","countTooLongSentences","formatNumber","parseInt","getScore","MAIN_CONTENT_POINTS","getTooLongSentences","_default","exports"],"sources":["../../../../../src/scoring/assessments/readability/SentenceLengthInTextAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport getTooLongSentences from '../../helpers/assessments/checkForTooLongSentences';\nimport formatNumber from '../../../helpers/formatNumber';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {MAIN_CONTENT_POINTS, TEXT_SENTENCE_LENGTH_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that will calculate the length of sentences in the text.\n */\nclass SentenceLengthInTextAssessment extends Assessment {\n /**\n\t * Sets the identifier and the config.\n\t *\n\t * @param {object} config\t\t\tThe scoring configuration that should be used.\n\n\t * @returns {void}\n\t */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: TEXT_SENTENCE_LENGTH_ID,\n priority: 'high',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#sentence-length',\n ctaType: 'fix',\n fixPosition: 'sentenceLength',\n recommendedLength: 20,\n slightlyTooMany: 25,\n farTooMany: 30,\n title: 'Text Sentence Length',\n content: {\n improve: '',\n bad:\n 'Sentence too long. Keep sentence length less than 20 words to improve readability and flow.',\n good: 'Sentence length is optimized for readability, less than 20 words.'\n }\n };\n\n this._config = merge(defaultConfig, config);\n this.identifier = TEXT_SENTENCE_LENGTH_ID;\n }\n\n /**\n * Scores the percentage of sentences including more than the recommended number of words.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling research.\n *\n * @returns {AssessmentResult} The Assessment result.\n */\n getResult({paper, researcher}) {\n const sentences = researcher.getResearch('countSentencesFromText');\n const hasDescription = paper.hasDescription();\n if (researcher.getConfig('sentenceLength')) {\n this._config = this.getLanguageSpecificConfig(researcher);\n }\n const percentage = this.calculatePercentage(sentences);\n\n const result = this.calculateResult(percentage, hasDescription);\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n assessmentResult.setScore(result.score);\n assessmentResult.setStatus(result.status);\n\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true;\n }\n\n /**\n * Check if there is language-specific config, and if so, overwrite the current config with it.\n *\n * @param {Researcher} researcher The researcher to use.\n *\n * @returns {Object} The config that should be used.\n */\n getLanguageSpecificConfig(researcher) {\n const currentConfig = this._config;\n const languageSpecificConfig = researcher.getConfig('sentenceLength');\n\n if (languageSpecificConfig.hasOwnProperty('recommendedLength')) {\n currentConfig.recommendedLength = languageSpecificConfig.recommendedLength;\n }\n\n return currentConfig;\n }\n\n /**\n * Calculates the percentage of sentences that are too long.\n *\n * @param {Array} sentences The sentences to calculate the percentage for.\n * @returns {number} The calculates percentage of too long sentences.\n */\n calculatePercentage(sentences) {\n let percentage = 0;\n\n if (sentences.length !== 0) {\n const tooLongTotal = this.countTooLongSentences(sentences);\n percentage = formatNumber((tooLongTotal / sentences.length) * 100);\n }\n\n return percentage;\n }\n\n /**\n *\n * @param percentage\n * @param hasDescription\n * @returns {{score: number, status: string}}\n */\n calculateResult(percentage, hasDescription) {\n let status = 'bad';\n if (percentage && hasDescription && percentage <= this._config.recommendedLength) {\n status = 'good';\n }\n return {\n score: parseInt(this.getScore(MAIN_CONTENT_POINTS, status)) || 0,\n status\n };\n }\n\n /**\n * Gets the sentences that are qualified as being too long.\n *\n * @param {array} sentences The sentences to filter through.\n * @returns {array} Array with all the sentences considered to be too long.\n */\n getTooLongSentences(sentences) {\n return getTooLongSentences(sentences, this._config.recommendedLength);\n }\n\n /**\n * Get the total amount of sentences that are qualified as being too long.\n *\n * @param {Array} sentences The sentences to filter through.\n * @returns {Number} The amount of sentences that are considered too long.\n */\n countTooLongSentences(sentences) {\n return this.getTooLongSentences(sentences).length;\n }\n}\n\nexport default SentenceLengthInTextAssessment;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SentenceLengthInTextAssessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_checkForTooLongSentences","_formatNumber","_AssessmentResult","_analysis","e","__esModule","default","SentenceLengthInTextAssessment","Assessment","constructor","config","defaultConfig","id","TEXT_SENTENCE_LENGTH_ID","priority","docUrl","ctaType","fixPosition","recommendedLength","slightlyTooMany","farTooMany","title","content","improve","bad","good","_config","merge","identifier","getResult","paper","researcher","sentences","getResearch","hasDescription","getConfig","getLanguageSpecificConfig","percentage","calculatePercentage","result","calculateResult","assessmentResult","AssessmentResult","setScore","score","setStatus","status","isApplicable","currentConfig","languageSpecificConfig","hasOwnProperty","length","tooLongTotal","countTooLongSentences","formatNumber","parseInt","getScore","MAIN_CONTENT_POINTS","getTooLongSentences","_default","exports"],"sources":["../../../../../src/scoring/assessments/readability/SentenceLengthInTextAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport getTooLongSentences from '../../helpers/assessments/checkForTooLongSentences';\nimport formatNumber from '../../../helpers/formatNumber';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {MAIN_CONTENT_POINTS, TEXT_SENTENCE_LENGTH_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that will calculate the length of sentences in the text.\n */\nclass SentenceLengthInTextAssessment extends Assessment {\n /**\n\t * Sets the identifier and the config.\n\t *\n\t * @param {object} config\t\t\tThe scoring configuration that should be used.\n\n\t * @returns {void}\n\t */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: TEXT_SENTENCE_LENGTH_ID,\n priority: 'high',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#sentence-length',\n ctaType: 'fix',\n fixPosition: 'sentenceLength',\n recommendedLength: 20,\n slightlyTooMany: 25,\n farTooMany: 30,\n title: 'Text Sentence Length',\n content: {\n improve: '',\n bad:\n 'Sentence too long. Keep sentence length less than 20 words to improve readability and flow.',\n good: 'Sentence length is optimized for readability, less than 20 words.'\n }\n };\n\n this._config = merge(defaultConfig, config);\n this.identifier = TEXT_SENTENCE_LENGTH_ID;\n }\n\n /**\n * Scores the percentage of sentences including more than the recommended number of words.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling research.\n *\n * @returns {AssessmentResult} The Assessment result.\n */\n getResult({paper, researcher}) {\n const sentences = researcher.getResearch('countSentencesFromText');\n const hasDescription = paper.hasDescription();\n if (researcher.getConfig('sentenceLength')) {\n this._config = this.getLanguageSpecificConfig(researcher);\n }\n const percentage = this.calculatePercentage(sentences);\n\n const result = this.calculateResult(percentage, hasDescription);\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n assessmentResult.setScore(result.score);\n assessmentResult.setStatus(result.status);\n\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true;\n }\n\n /**\n * Check if there is language-specific config, and if so, overwrite the current config with it.\n *\n * @param {Researcher} researcher The researcher to use.\n *\n * @returns {Object} The config that should be used.\n */\n getLanguageSpecificConfig(researcher) {\n const currentConfig = this._config;\n const languageSpecificConfig = researcher.getConfig('sentenceLength');\n\n if (languageSpecificConfig.hasOwnProperty('recommendedLength')) {\n currentConfig.recommendedLength = languageSpecificConfig.recommendedLength;\n }\n\n return currentConfig;\n }\n\n /**\n * Calculates the percentage of sentences that are too long.\n *\n * @param {Array} sentences The sentences to calculate the percentage for.\n * @returns {number} The calculates percentage of too long sentences.\n */\n calculatePercentage(sentences) {\n let percentage = 0;\n\n if (sentences.length !== 0) {\n const tooLongTotal = this.countTooLongSentences(sentences);\n percentage = formatNumber((tooLongTotal / sentences.length) * 100);\n }\n\n return percentage;\n }\n\n /**\n *\n * @param percentage\n * @param hasDescription\n * @returns {{score: number, status: string}}\n */\n calculateResult(percentage, hasDescription) {\n let status = 'bad';\n\n if (hasDescription && percentage <= this._config.slightlyTooMany) {\n status = 'good';\n }\n return {\n score: parseInt(this.getScore(MAIN_CONTENT_POINTS, status)) || 0,\n status\n };\n }\n\n /**\n * Gets the sentences that are qualified as being too long.\n *\n * @param {array} sentences The sentences to filter through.\n * @returns {array} Array with all the sentences considered to be too long.\n */\n getTooLongSentences(sentences) {\n return getTooLongSentences(sentences, this._config.recommendedLength);\n }\n\n /**\n * Get the total amount of sentences that are qualified as being too long.\n *\n * @param {Array} sentences The sentences to filter through.\n * @returns {Number} The amount of sentences that are considered too long.\n */\n countTooLongSentences(sentences) {\n return this.getTooLongSentences(sentences).length;\n }\n}\n\nexport default SentenceLengthInTextAssessment;\n"],"mappings":"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","ignoreList":[]}
@@ -69,9 +69,9 @@ class SingleH1Assessment extends _assessment.default {
69
69
  * @returns {{score: number, status: string}}
70
70
  */
71
71
  calculateResult(paper) {
72
+ let status = 'bad';
72
73
  const htmlString = paper.getText();
73
74
  const desHasH1Tag = htmlString.includes('<h1>');
74
- let status = 'bad';
75
75
  if (this._h1Count === 1) {
76
76
  status = 'good';
77
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SingleH1Assessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","e","__esModule","default","SingleH1Assessment","Assessment","constructor","config","defaultConfig","id","SINGLE_H1_ID","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","merge","getResult","paper","researcher","_h1Count","getResearch","assessmentResult","AssessmentResult","calculatedResult","calculateResult","isUndefined","setScore","score","setStatus","status","htmlString","getText","desHasH1Tag","includes","getScore","TECHNICAL_SEO_POINTS","isApplicable","_default","exports"],"sources":["../../../../../src/scoring/assessments/seo/SingleH1Assessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_H1_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleH1Assessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_H1_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n fixPosition: 'description',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'H1 tag',\n content: {\n good: 'H1 tag is optimized.',\n improve: 'You should use only one H1 tag',\n bad: 'Missing H1 tag. Add one H1 to clearly define your page`s topic.'\n }\n };\n\n this.identifier = SINGLE_H1_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n this._h1Count = researcher.getResearch('h1s');\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const htmlString = paper.getText();\n const desHasH1Tag = htmlString.includes('<h1>');\n\n let status = 'bad';\n if (this._h1Count === 1) {\n status = 'good';\n }\n\n if (this._h1Count === 0 && !desHasH1Tag) {\n status = 'good';\n }\n\n if (this._h1Count > 1) {\n status = 'bad';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true\n }\n}\n\nexport default SingleH1Assessment;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAA0E,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE1E;AACA;AACA;AACA;AACA,MAAMG,kBAAkB,SAASC,mBAAU,CAAC;EAC1C;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEC,sBAAY;MAChBC,MAAM,EAAE,yCAAyC;MACjDC,WAAW,EAAE,aAAa;MAC1BC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,QAAQ;MACfC,OAAO,EAAE;QACPC,IAAI,EAAE,sBAAsB;QAC5BC,OAAO,EAAE,gCAAgC;QACzCC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGV,sBAAY;IAC9B,IAAI,CAACW,OAAO,GAAG,IAAAC,aAAK,EAACd,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEgB,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,IAAI,CAACC,QAAQ,GAAGD,UAAU,CAACE,WAAW,CAAC,KAAK,CAAC;IAC7C,MAAMC,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAACtB,MAAM,EAAE,IAAI,CAACc;IAAO,CAAC,CAAC;IAErE,MAAMS,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACP,KAAK,CAAC;IAEpD,IAAI,CAAC,IAAAQ,mBAAW,EAACF,gBAAgB,CAAC,EAAE;MAClCF,gBAAgB,CAACK,QAAQ,CAACH,gBAAgB,CAACI,KAAK,CAAC;MACjDN,gBAAgB,CAACO,SAAS,CAACL,gBAAgB,CAACM,MAAM,CAAC;IACrD;IAEA,OAAOR,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEG,eAAeA,CAACP,KAAK,EAAE;IACrB,MAAMa,UAAU,GAAGb,KAAK,CAACc,OAAO,CAAC,CAAC;IAClC,MAAMC,WAAW,GAAGF,UAAU,CAACG,QAAQ,CAAC,MAAM,CAAC;IAE/C,IAAIJ,MAAM,GAAG,KAAK;IAClB,IAAI,IAAI,CAACV,QAAQ,KAAK,CAAC,EAAE;MACvBU,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACV,QAAQ,KAAK,CAAC,IAAI,CAACa,WAAW,EAAE;MACvCH,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACV,QAAQ,GAAG,CAAC,EAAE;MACrBU,MAAM,GAAG,KAAK;IAChB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACO,QAAQ,CAACC,8BAAoB,EAAEN,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEO,YAAYA,CAACnB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAAC,IAAAoB,QAAA,GAAAC,OAAA,CAAA1C,OAAA,GAEcC,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"SingleH1Assessment.js","names":["_lodash","require","_assessment","_interopRequireDefault","_AssessmentResult","_analysis","e","__esModule","default","SingleH1Assessment","Assessment","constructor","config","defaultConfig","id","SINGLE_H1_ID","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","merge","getResult","paper","researcher","_h1Count","getResearch","assessmentResult","AssessmentResult","calculatedResult","calculateResult","isUndefined","setScore","score","setStatus","status","htmlString","getText","desHasH1Tag","includes","getScore","TECHNICAL_SEO_POINTS","isApplicable","_default","exports"],"sources":["../../../../../src/scoring/assessments/seo/SingleH1Assessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_H1_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleH1Assessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_H1_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n fixPosition: 'description',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'H1 tag',\n content: {\n good: 'H1 tag is optimized.',\n improve: 'You should use only one H1 tag',\n bad: 'Missing H1 tag. Add one H1 to clearly define your page`s topic.'\n }\n };\n\n this.identifier = SINGLE_H1_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n this._h1Count = researcher.getResearch('h1s');\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n let status = 'bad';\n const htmlString = paper.getText();\n const desHasH1Tag = htmlString.includes('<h1>');\n\n if (this._h1Count === 1) {\n status = 'good';\n }\n\n if (this._h1Count === 0 && !desHasH1Tag) {\n status = 'good';\n }\n\n if (this._h1Count > 1) {\n status = 'bad';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true\n }\n}\n\nexport default SingleH1Assessment;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAA0E,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE1E;AACA;AACA;AACA;AACA,MAAMG,kBAAkB,SAASC,mBAAU,CAAC;EAC1C;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEC,sBAAY;MAChBC,MAAM,EAAE,yCAAyC;MACjDC,WAAW,EAAE,aAAa;MAC1BC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,QAAQ;MACfC,OAAO,EAAE;QACPC,IAAI,EAAE,sBAAsB;QAC5BC,OAAO,EAAE,gCAAgC;QACzCC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGV,sBAAY;IAC9B,IAAI,CAACW,OAAO,GAAG,IAAAC,aAAK,EAACd,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEgB,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,IAAI,CAACC,QAAQ,GAAGD,UAAU,CAACE,WAAW,CAAC,KAAK,CAAC;IAC7C,MAAMC,gBAAgB,GAAG,IAAIC,yBAAgB,CAAC;MAACtB,MAAM,EAAE,IAAI,CAACc;IAAO,CAAC,CAAC;IAErE,MAAMS,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACP,KAAK,CAAC;IAEpD,IAAI,CAAC,IAAAQ,mBAAW,EAACF,gBAAgB,CAAC,EAAE;MAClCF,gBAAgB,CAACK,QAAQ,CAACH,gBAAgB,CAACI,KAAK,CAAC;MACjDN,gBAAgB,CAACO,SAAS,CAACL,gBAAgB,CAACM,MAAM,CAAC;IACrD;IAEA,OAAOR,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEG,eAAeA,CAACP,KAAK,EAAE;IACrB,IAAIY,MAAM,GAAG,KAAK;IAClB,MAAMC,UAAU,GAAGb,KAAK,CAACc,OAAO,CAAC,CAAC;IAClC,MAAMC,WAAW,GAAGF,UAAU,CAACG,QAAQ,CAAC,MAAM,CAAC;IAE/C,IAAI,IAAI,CAACd,QAAQ,KAAK,CAAC,EAAE;MACvBU,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACV,QAAQ,KAAK,CAAC,IAAI,CAACa,WAAW,EAAE;MACvCH,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACV,QAAQ,GAAG,CAAC,EAAE;MACrBU,MAAM,GAAG,KAAK;IAChB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACO,QAAQ,CAACC,8BAAoB,EAAEN,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEO,YAAYA,CAACnB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAAC,IAAAoB,QAAA,GAAAC,OAAA,CAAA1C,OAAA,GAEcC,kBAAkB","ignoreList":[]}
@@ -152,7 +152,7 @@ class Assessor {
152
152
  const assessmentResult = new _AssessmentResult.default({
153
153
  config: assessment._config
154
154
  });
155
- const score = assessment.getScore(assessment._config.priority, 'good', assessment._config.factor);
155
+ const score = _analysis.idPointsMap[assessment._config.id];
156
156
  assessmentResult.setScore(score);
157
157
  assessmentResult.setStatus('good');
158
158
  assessmentResult.setTitle(assessment._config.title);
@@ -1 +1 @@
1
- {"version":3,"file":"assessor.js","names":["_lodash","require","_AssessmentResult","_interopRequireDefault","_build","_LanguageProcessor","_missingArgument","_errors","_analysis","e","__esModule","default","ScoreRating","Assessor","constructor","researcher","config","type","setResearcher","_assessments","isUndefined","MissingArgument","_researcher","getAvailableAssessments","isApplicable","assessment","paper","ignoreAssessments","getIgnoredAssessments","includes","_config","id","hasOwnProperty","hasMarker","isFunction","marker","getMarks","getSpecificMarker","getPaper","_lastPaper","assess","i18n","setPaper","languageProcessor","LanguageProcessor","shortcodes","_attributes","setTree","build","assessments","results","filter","bind","map","executeAssessment","result","skippedAssessments","getSkippedAssessments","assessmentResult","AssessmentResult","score","getScore","priority","factor","setScore","setStatus","setTitle","title","getResult","roundedDensity","prefix","SCHEMA_ID","translate","KEYPHRASE_DENSITY_ID","TEXT_LENGTH_ID","content","good","bad","setIdentifier","assessmentError","showTrace","setFactor","getValidResults","isValidResult","hasScore","hasText","calculateOverallScore","totalScore","reduce","total","Math","round","length","addAssessment","name","identifier","getAssessment","removeAssessment","push","toDelete","findIndex","splice","find","getApplicableAssessments","availableAssessments","availableAssessment","_default","exports"],"sources":["../../../../src/scoring/assessors/assessor.js"],"sourcesContent":["// External dependencies.\nimport {filter, find, findIndex, isFunction, isUndefined, map} from 'lodash';\n\n// Internal dependencies.\nimport AssessmentResult from '../../values/AssessmentResult.js';\nimport {build} from '../../parse/build';\nimport LanguageProcessor from '../../parse/language/LanguageProcessor.js';\nimport MissingArgument from '../../errors/missingArgument.js';\nimport {showTrace} from '../../helpers/errors.js';\nimport {KEYPHRASE_DENSITY_ID, SCHEMA_ID, TEXT_LENGTH_ID} from '@axyseo/const/analysis';\n\n// The maximum score of individual assessment is 9. This is why we set the \"score rating\" here to 9.\nconst ScoreRating = 9;\n\n/**\n * The Assessor is a base class for all assessors.\n */\nclass Assessor {\n /**\n * Creates a new Assessor instance.\n * @param {Researcher}\tresearcher\tThe researcher to use.\n * @param {Object}\t\t[config]\tThe assessor config.\n */\n constructor(researcher, config) {\n this.type = 'assessor';\n this.setResearcher(researcher);\n this._assessments = [];\n }\n\n /**\n * Checks if the researcher is defined and sets it.\n *\n * @param {Researcher} researcher The researcher to use in the assessor.\n *\n * @throws {MissingArgument} Parameter needs to be a valid researcher object.\n * @returns {void}\n */\n setResearcher(researcher) {\n if (isUndefined(researcher)) {\n throw new MissingArgument('The assessor requires a researcher.');\n }\n this._researcher = researcher;\n }\n\n /**\n * Gets all available assessments.\n * @returns {Assessment[]} assessment\n */\n getAvailableAssessments() {\n return this._assessments;\n }\n\n /**\n * Checks whether the Assessment is applicable.\n *\n * @param {Assessment} assessment The Assessment object that needs to be checked.\n * @param {Paper} paper The Paper object to check against.\n * @param {Researcher} [researcher] The Researcher object containing additional information.\n * @returns {boolean} Whether or not the Assessment is applicable.\n */\n isApplicable(assessment, paper, researcher) {\n const ignoreAssessments = paper.getIgnoredAssessments();\n\n if (ignoreAssessments.includes(assessment._config.id)) {\n return false;\n }\n\n if (\n assessment.hasOwnProperty('isApplicable') ||\n typeof assessment.isApplicable === 'function'\n ) {\n return assessment.isApplicable(paper, researcher);\n }\n\n return true;\n }\n\n /**\n * Determines whether an assessment has a marker.\n *\n * @param {Assessment} assessment The assessment to check for.\n * @returns {boolean} Whether or not the assessment has a marker.\n */\n hasMarker(assessment) {\n return (\n isFunction(this._config.marker) &&\n (assessment.hasOwnProperty('getMarks') || typeof assessment.getMarks === 'function')\n );\n }\n\n /**\n * Returns the specific marker for this assessor.\n *\n * @returns {Function} The specific marker for this assessor.\n */\n getSpecificMarker() {\n return this._config.marker;\n }\n\n /**\n * Returns the paper that was most recently assessed.\n *\n * @returns {Paper} The paper that was most recently assessed.\n */\n getPaper() {\n return this._lastPaper;\n }\n\n /**\n * Runs the researches defined in the task list or the default researches.\n *\n * @param {Paper} paper The paper to run assessments on.\n * @param i18n\n * @returns {void}\n */\n assess(paper, i18n) {\n this._researcher.setPaper(paper);\n\n const languageProcessor = new LanguageProcessor(this._researcher);\n const shortcodes = paper._attributes && paper._attributes.shortcodes;\n paper.setTree(build(paper, languageProcessor, shortcodes));\n\n let assessments = this.getAvailableAssessments();\n\n this.results = [];\n\n assessments = filter(\n assessments,\n function(assessment) {\n return this.isApplicable(assessment, paper, this._researcher);\n }.bind(this)\n );\n\n this.results = map(assessments, assessment =>\n this.executeAssessment({\n paper,\n researcher: this._researcher,\n assessment,\n i18n\n })\n );\n this._lastPaper = paper;\n }\n\n /**\n * Executes an assessment and returns the AssessmentResult.\n *\n * @param {Paper} paper The paper to pass to the assessment.\n * @param {Researcher} researcher The researcher to pass to the assessment.\n * @param {Assessment} assessment The assessment to execute.\n * @param i18n\n * @returns {AssessmentResult} The result of the assessment.\n */\n executeAssessment({paper, researcher, assessment, i18n}) {\n let result;\n\n try {\n\n\n const skippedAssessments = paper.getSkippedAssessments();\n if (skippedAssessments.includes(assessment._config.id)) {\n const assessmentResult = new AssessmentResult({config: assessment._config});\n\n const score = assessment.getScore(\n assessment._config.priority,\n 'good',\n assessment._config.factor\n );\n\n assessmentResult.setScore(score);\n assessmentResult.setStatus('good');\n assessmentResult.setTitle(assessment._config.title);\n\n result = assessmentResult;\n } else {\n result = assessment.getResult({paper, researcher, i18n});\n }\n if (i18n) {\n const { id, type, roundedDensity } = assessment._config;\n const prefix = `Axyseo.${id}`;\n\n if (id === SCHEMA_ID) {\n assessment._config.title = `${i18n.translate(`${prefix}.${type}.title`)}`;\n } else if (id === KEYPHRASE_DENSITY_ID) {\n assessment._config.title = `${i18n.translate(`${prefix}.title`)} ${roundedDensity}%`;\n } else {\n assessment._config.title = i18n.translate(`${prefix}.title`);\n }\n\n if ((id === TEXT_LENGTH_ID || id === SCHEMA_ID) && type) {\n assessment._config.content = {\n good: i18n.translate(`${prefix}.${type}.good`),\n bad: i18n.translate(`${prefix}.${type}.bad`),\n };\n } else {\n assessment._config.content = {\n good: i18n.translate(`${prefix}.good`),\n bad: i18n.translate(`${prefix}.bad`),\n };\n }\n }\n result.setIdentifier(assessment._config.id);\n } catch (assessmentError) {\n showTrace(assessmentError);\n\n result = new AssessmentResult();\n\n result.setScore(-1);\n }\n\n if (assessment?._config?.factor) {\n result.setFactor(assessment._config.factor);\n }\n\n return result;\n }\n\n /**\n * Filters out all assessment results that have no score and no text.\n *\n * @returns {AssessmentResult[]} The array with all the valid assessments.\n */\n getValidResults() {\n return filter(\n this.results,\n function(result) {\n return this.isValidResult(result);\n }.bind(this)\n );\n }\n\n /**\n * Returns if an assessmentResult is valid.\n *\n * @param {AssessmentResult} assessmentResult The assessmentResult to validate.\n * @returns {boolean} whether or not the result is valid.\n */\n isValidResult(assessmentResult) {\n return assessmentResult.hasScore() && assessmentResult.hasText();\n }\n\n /**\n * Returns the overall score. Calculates the total score by adding all scores and dividing these\n * by the number of results times the ScoreRating.\n *\n * @returns {number} The overall score.\n */\n calculateOverallScore() {\n const results = this.getValidResults();\n\n const totalScore = results.reduce(\n (total, assessmentResult) => total + assessmentResult.getScore(),\n 0\n );\n\n return Math.round((totalScore / (results.length * ScoreRating)) * 100) || 0;\n }\n\n /**\n * Registers an assessment and adds it to the internal assessments object.\n *\n * @param {string} name The name of the assessment.\n * @param {Assessment} assessment The object containing function to run as an assessment and it's requirements.\n * @returns {boolean} Whether registering the assessment was successful.\n */\n addAssessment(name, assessment) {\n if (!assessment.hasOwnProperty('identifier')) {\n assessment.identifier = name;\n }\n // If the assessor already has the same assessment, remove it and replace it with the new assessment with the same identifier.\n if (this.getAssessment(assessment.identifier)) {\n this.removeAssessment(assessment.identifier);\n }\n\n this._assessments.push(assessment);\n return true;\n }\n\n /**\n * Removes a specific Assessment from the list of Assessments.\n *\n * @param {string} name The Assessment to remove from the list of assessments.\n * @returns {void}\n */\n removeAssessment(name) {\n const toDelete = findIndex(this._assessments, function(assessment) {\n return assessment.hasOwnProperty('identifier') && name === assessment.identifier;\n });\n\n if (-1 !== toDelete) {\n this._assessments.splice(toDelete, 1);\n }\n }\n\n /**\n * Returns an assessment by identifier\n *\n * @param {string} identifier The identifier of the assessment.\n * @returns {undefined|Assessment} The object if found, otherwise undefined.\n */\n getAssessment(identifier) {\n return find(this._assessments, function(assessment) {\n return assessment.hasOwnProperty('identifier') && identifier === assessment.identifier;\n });\n }\n\n /**\n * Checks which of the available assessments are applicable and returns an array with applicable assessments.\n *\n * @returns {Assessment[]} The array with applicable assessments.\n */\n getApplicableAssessments() {\n const availableAssessments = this.getAvailableAssessments();\n return filter(\n availableAssessments,\n function(availableAssessment) {\n return this.isApplicable(availableAssessment, this.getPaper(), this._researcher);\n }.bind(this)\n );\n }\n}\n\nexport default Assessor;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"assessor.js","names":["_lodash","require","_AssessmentResult","_interopRequireDefault","_build","_LanguageProcessor","_missingArgument","_errors","_analysis","e","__esModule","default","ScoreRating","Assessor","constructor","researcher","config","type","setResearcher","_assessments","isUndefined","MissingArgument","_researcher","getAvailableAssessments","isApplicable","assessment","paper","ignoreAssessments","getIgnoredAssessments","includes","_config","id","hasOwnProperty","hasMarker","isFunction","marker","getMarks","getSpecificMarker","getPaper","_lastPaper","assess","i18n","setPaper","languageProcessor","LanguageProcessor","shortcodes","_attributes","setTree","build","assessments","results","filter","bind","map","executeAssessment","result","skippedAssessments","getSkippedAssessments","assessmentResult","AssessmentResult","score","idPointsMap","setScore","setStatus","setTitle","title","getResult","roundedDensity","prefix","SCHEMA_ID","translate","KEYPHRASE_DENSITY_ID","TEXT_LENGTH_ID","content","good","bad","setIdentifier","assessmentError","showTrace","factor","setFactor","getValidResults","isValidResult","hasScore","hasText","calculateOverallScore","totalScore","reduce","total","getScore","Math","round","length","addAssessment","name","identifier","getAssessment","removeAssessment","push","toDelete","findIndex","splice","find","getApplicableAssessments","availableAssessments","availableAssessment","_default","exports"],"sources":["../../../../src/scoring/assessors/assessor.js"],"sourcesContent":["// External dependencies.\nimport {filter, find, findIndex, isFunction, isUndefined, map} from 'lodash';\n\n// Internal dependencies.\nimport AssessmentResult from '../../values/AssessmentResult.js';\nimport {build} from '../../parse/build';\nimport LanguageProcessor from '../../parse/language/LanguageProcessor.js';\nimport MissingArgument from '../../errors/missingArgument.js';\nimport {showTrace} from '../../helpers/errors.js';\nimport {idPointsMap, KEYPHRASE_DENSITY_ID, SCHEMA_ID, TEXT_LENGTH_ID} from '@axyseo/const/analysis';\n\n// The maximum score of individual assessment is 9. This is why we set the \"score rating\" here to 9.\nconst ScoreRating = 9;\n\n/**\n * The Assessor is a base class for all assessors.\n */\nclass Assessor {\n /**\n * Creates a new Assessor instance.\n * @param {Researcher}\tresearcher\tThe researcher to use.\n * @param {Object}\t\t[config]\tThe assessor config.\n */\n constructor(researcher, config) {\n this.type = 'assessor';\n this.setResearcher(researcher);\n this._assessments = [];\n }\n\n /**\n * Checks if the researcher is defined and sets it.\n *\n * @param {Researcher} researcher The researcher to use in the assessor.\n *\n * @throws {MissingArgument} Parameter needs to be a valid researcher object.\n * @returns {void}\n */\n setResearcher(researcher) {\n if (isUndefined(researcher)) {\n throw new MissingArgument('The assessor requires a researcher.');\n }\n this._researcher = researcher;\n }\n\n /**\n * Gets all available assessments.\n * @returns {Assessment[]} assessment\n */\n getAvailableAssessments() {\n return this._assessments;\n }\n\n /**\n * Checks whether the Assessment is applicable.\n *\n * @param {Assessment} assessment The Assessment object that needs to be checked.\n * @param {Paper} paper The Paper object to check against.\n * @param {Researcher} [researcher] The Researcher object containing additional information.\n * @returns {boolean} Whether or not the Assessment is applicable.\n */\n isApplicable(assessment, paper, researcher) {\n const ignoreAssessments = paper.getIgnoredAssessments();\n\n if (ignoreAssessments.includes(assessment._config.id)) {\n return false;\n }\n\n if (\n assessment.hasOwnProperty('isApplicable') ||\n typeof assessment.isApplicable === 'function'\n ) {\n return assessment.isApplicable(paper, researcher);\n }\n\n return true;\n }\n\n /**\n * Determines whether an assessment has a marker.\n *\n * @param {Assessment} assessment The assessment to check for.\n * @returns {boolean} Whether or not the assessment has a marker.\n */\n hasMarker(assessment) {\n return (\n isFunction(this._config.marker) &&\n (assessment.hasOwnProperty('getMarks') || typeof assessment.getMarks === 'function')\n );\n }\n\n /**\n * Returns the specific marker for this assessor.\n *\n * @returns {Function} The specific marker for this assessor.\n */\n getSpecificMarker() {\n return this._config.marker;\n }\n\n /**\n * Returns the paper that was most recently assessed.\n *\n * @returns {Paper} The paper that was most recently assessed.\n */\n getPaper() {\n return this._lastPaper;\n }\n\n /**\n * Runs the researches defined in the task list or the default researches.\n *\n * @param {Paper} paper The paper to run assessments on.\n * @param i18n\n * @returns {void}\n */\n assess(paper, i18n) {\n this._researcher.setPaper(paper);\n\n const languageProcessor = new LanguageProcessor(this._researcher);\n const shortcodes = paper._attributes && paper._attributes.shortcodes;\n paper.setTree(build(paper, languageProcessor, shortcodes));\n\n let assessments = this.getAvailableAssessments();\n\n this.results = [];\n\n assessments = filter(\n assessments,\n function(assessment) {\n return this.isApplicable(assessment, paper, this._researcher);\n }.bind(this)\n );\n\n this.results = map(assessments, assessment =>\n this.executeAssessment({\n paper,\n researcher: this._researcher,\n assessment,\n i18n\n })\n );\n this._lastPaper = paper;\n }\n\n /**\n * Executes an assessment and returns the AssessmentResult.\n *\n * @param {Paper} paper The paper to pass to the assessment.\n * @param {Researcher} researcher The researcher to pass to the assessment.\n * @param {Assessment} assessment The assessment to execute.\n * @param i18n\n * @returns {AssessmentResult} The result of the assessment.\n */\n executeAssessment({paper, researcher, assessment, i18n}) {\n let result;\n\n try {\n\n\n const skippedAssessments = paper.getSkippedAssessments();\n if (skippedAssessments.includes(assessment._config.id)) {\n const assessmentResult = new AssessmentResult({config: assessment._config});\n\n const score = idPointsMap[assessment._config.id]\n\n assessmentResult.setScore(score);\n assessmentResult.setStatus('good');\n assessmentResult.setTitle(assessment._config.title);\n\n result = assessmentResult;\n } else {\n result = assessment.getResult({paper, researcher, i18n});\n }\n if (i18n) {\n const { id, type, roundedDensity } = assessment._config;\n const prefix = `Axyseo.${id}`;\n\n if (id === SCHEMA_ID) {\n assessment._config.title = `${i18n.translate(`${prefix}.${type}.title`)}`;\n } else if (id === KEYPHRASE_DENSITY_ID) {\n assessment._config.title = `${i18n.translate(`${prefix}.title`)} ${roundedDensity}%`;\n } else {\n assessment._config.title = i18n.translate(`${prefix}.title`);\n }\n\n if ((id === TEXT_LENGTH_ID || id === SCHEMA_ID) && type) {\n assessment._config.content = {\n good: i18n.translate(`${prefix}.${type}.good`),\n bad: i18n.translate(`${prefix}.${type}.bad`),\n };\n } else {\n assessment._config.content = {\n good: i18n.translate(`${prefix}.good`),\n bad: i18n.translate(`${prefix}.bad`),\n };\n }\n }\n result.setIdentifier(assessment._config.id);\n } catch (assessmentError) {\n showTrace(assessmentError);\n\n result = new AssessmentResult();\n\n result.setScore(-1);\n }\n\n if (assessment?._config?.factor) {\n result.setFactor(assessment._config.factor);\n }\n\n return result;\n }\n\n /**\n * Filters out all assessment results that have no score and no text.\n *\n * @returns {AssessmentResult[]} The array with all the valid assessments.\n */\n getValidResults() {\n return filter(\n this.results,\n function(result) {\n return this.isValidResult(result);\n }.bind(this)\n );\n }\n\n /**\n * Returns if an assessmentResult is valid.\n *\n * @param {AssessmentResult} assessmentResult The assessmentResult to validate.\n * @returns {boolean} whether or not the result is valid.\n */\n isValidResult(assessmentResult) {\n return assessmentResult.hasScore() && assessmentResult.hasText();\n }\n\n /**\n * Returns the overall score. Calculates the total score by adding all scores and dividing these\n * by the number of results times the ScoreRating.\n *\n * @returns {number} The overall score.\n */\n calculateOverallScore() {\n const results = this.getValidResults();\n\n const totalScore = results.reduce(\n (total, assessmentResult) => total + assessmentResult.getScore(),\n 0\n );\n\n return Math.round((totalScore / (results.length * ScoreRating)) * 100) || 0;\n }\n\n /**\n * Registers an assessment and adds it to the internal assessments object.\n *\n * @param {string} name The name of the assessment.\n * @param {Assessment} assessment The object containing function to run as an assessment and it's requirements.\n * @returns {boolean} Whether registering the assessment was successful.\n */\n addAssessment(name, assessment) {\n if (!assessment.hasOwnProperty('identifier')) {\n assessment.identifier = name;\n }\n // If the assessor already has the same assessment, remove it and replace it with the new assessment with the same identifier.\n if (this.getAssessment(assessment.identifier)) {\n this.removeAssessment(assessment.identifier);\n }\n\n this._assessments.push(assessment);\n return true;\n }\n\n /**\n * Removes a specific Assessment from the list of Assessments.\n *\n * @param {string} name The Assessment to remove from the list of assessments.\n * @returns {void}\n */\n removeAssessment(name) {\n const toDelete = findIndex(this._assessments, function(assessment) {\n return assessment.hasOwnProperty('identifier') && name === assessment.identifier;\n });\n\n if (-1 !== toDelete) {\n this._assessments.splice(toDelete, 1);\n }\n }\n\n /**\n * Returns an assessment by identifier\n *\n * @param {string} identifier The identifier of the assessment.\n * @returns {undefined|Assessment} The object if found, otherwise undefined.\n */\n getAssessment(identifier) {\n return find(this._assessments, function(assessment) {\n return assessment.hasOwnProperty('identifier') && identifier === assessment.identifier;\n });\n }\n\n /**\n * Checks which of the available assessments are applicable and returns an array with applicable assessments.\n *\n * @returns {Assessment[]} The array with applicable assessments.\n */\n getApplicableAssessments() {\n const availableAssessments = this.getAvailableAssessments();\n return filter(\n availableAssessments,\n function(availableAssessment) {\n return this.isApplicable(availableAssessment, this.getPaper(), this._researcher);\n }.bind(this)\n );\n }\n}\n\nexport default Assessor;\n"],"mappings":"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","ignoreList":[]}
@@ -52,7 +52,6 @@ class AvadaAssessor {
52
52
  this.seoAssessor.assess(paper, i18n);
53
53
  this.contentAssessor.assess(paper, i18n);
54
54
  let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];
55
- console.log('assessments', assessments);
56
55
  assessments = assessments.map(assessment => ({
57
56
  ...assessment.config,
58
57
  status: assessment.status,
@@ -1 +1 @@
1
- {"version":3,"file":"avadaAssessor.js","names":["_index","require","_helpers","AvadaAssessor","constructor","researcher","config","seoAssessor","SEOAssessor","contentAssessor","ContentAssessor","assess","paper","i18n","assessments","results","console","log","map","assessment","status","score","data","title","assessBackEnd","getResult","groupBy","getScore","groupAssessmentsByCategory","groupAssessmentsByStatus","point","forEach","Math","round","exports","default"],"sources":["../../../../src/scoring/assessors/avadaAssessor.js"],"sourcesContent":["import {ContentAssessor, SEOAssessor} from '@axyseo/scoring/assessors/index';\nimport {groupAssessmentsByCategory, groupAssessmentsByStatus} from '../helpers';\n\n/**\n * The AvadaAssessor class is used for the general SEO analysis.\n */\nexport default class AvadaAssessor {\n /**\n * Creates a new AvadaAssessor instance.\n * @param {Researcher} researcher The researcher to use.\n * @param {Object} [config] The assessor config.\n * @param {Object} [config.textParagraphTooLong]\n * @param {Object} [config.textSentenceLength]\n * @param {Object} [config.textTransitionWords]\n * @param {Object} [config.sentenceBeginnings]\n * @param {Object} [config.relatedKeywords]\n * @param {Object} [config.titleKeyword]\n * @param {Object} [config.textImages]\n * @param {Object} [config.numberTitle]\n * @param {Object} [config.introductionKeyword]\n * @param {Object} [config.keyphraseLength]\n * @param {Object} [config.metaDescriptionKeyword]\n * @param {Object} [config.metaDescriptionLength]\n * @param {Object} [config.subheadingsKeyword]\n * @param {Object} [config.externalLinks]\n * @param {Object} [config.keyphraseDensity]\n * @param {Object} [config.media]\n * @param {Object} [config.urlLength]\n * @param {Object} [config.textLength]\n * @param {Object} [config.singleTitle]\n * @param {Object} [config.keyphrase]\n * @param {Object} [config.internalLinks]\n * @param {Object} [config.titleWidth]\n * @param {Object} [config.slugKeyword]\n * @param {Object} [config.singleH1]\n * @param {Object} [config.schema]\n */\n constructor(researcher, config = {}) {\n const seoAssessor = new SEOAssessor(researcher, config);\n const contentAssessor = new ContentAssessor(researcher, config);\n this.seoAssessor = seoAssessor;\n this.contentAssessor = contentAssessor;\n this.researcher = researcher;\n this.config = config;\n }\n\n assess(paper, i18n) {\n this.seoAssessor.assess(paper, i18n);\n this.contentAssessor.assess(paper, i18n);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n console.log('assessments', assessments);\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n assessBackEnd(paper) {\n this.seoAssessor.assess(paper);\n this.contentAssessor.assess(paper);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n getResult(groupBy = 'category', getScore = true) {\n let assessments = [];\n switch (groupBy) {\n case 'category':\n assessments = groupAssessmentsByCategory(this.assessments);\n break;\n case 'status':\n assessments = groupAssessmentsByStatus(this.assessments);\n break;\n }\n\n return {\n assessments,\n ...(getScore ? {score: this.getScore()} : {})\n };\n }\n\n getScore() {\n let point = 0;\n this.assessments.forEach(assessment => {\n point += assessment.score || 0;\n });\n return Math.round((point));\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"avadaAssessor.js","names":["_index","require","_helpers","AvadaAssessor","constructor","researcher","config","seoAssessor","SEOAssessor","contentAssessor","ContentAssessor","assess","paper","i18n","assessments","results","map","assessment","status","score","data","title","assessBackEnd","getResult","groupBy","getScore","groupAssessmentsByCategory","groupAssessmentsByStatus","point","forEach","Math","round","exports","default"],"sources":["../../../../src/scoring/assessors/avadaAssessor.js"],"sourcesContent":["import {ContentAssessor, SEOAssessor} from '@axyseo/scoring/assessors/index';\nimport {groupAssessmentsByCategory, groupAssessmentsByStatus} from '../helpers';\n\n/**\n * The AvadaAssessor class is used for the general SEO analysis.\n */\nexport default class AvadaAssessor {\n /**\n * Creates a new AvadaAssessor instance.\n * @param {Researcher} researcher The researcher to use.\n * @param {Object} [config] The assessor config.\n * @param {Object} [config.textParagraphTooLong]\n * @param {Object} [config.textSentenceLength]\n * @param {Object} [config.textTransitionWords]\n * @param {Object} [config.sentenceBeginnings]\n * @param {Object} [config.relatedKeywords]\n * @param {Object} [config.titleKeyword]\n * @param {Object} [config.textImages]\n * @param {Object} [config.numberTitle]\n * @param {Object} [config.introductionKeyword]\n * @param {Object} [config.keyphraseLength]\n * @param {Object} [config.metaDescriptionKeyword]\n * @param {Object} [config.metaDescriptionLength]\n * @param {Object} [config.subheadingsKeyword]\n * @param {Object} [config.externalLinks]\n * @param {Object} [config.keyphraseDensity]\n * @param {Object} [config.media]\n * @param {Object} [config.urlLength]\n * @param {Object} [config.textLength]\n * @param {Object} [config.singleTitle]\n * @param {Object} [config.keyphrase]\n * @param {Object} [config.internalLinks]\n * @param {Object} [config.titleWidth]\n * @param {Object} [config.slugKeyword]\n * @param {Object} [config.singleH1]\n * @param {Object} [config.schema]\n */\n constructor(researcher, config = {}) {\n const seoAssessor = new SEOAssessor(researcher, config);\n const contentAssessor = new ContentAssessor(researcher, config);\n this.seoAssessor = seoAssessor;\n this.contentAssessor = contentAssessor;\n this.researcher = researcher;\n this.config = config;\n }\n\n assess(paper, i18n) {\n this.seoAssessor.assess(paper, i18n);\n this.contentAssessor.assess(paper, i18n);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n assessBackEnd(paper) {\n this.seoAssessor.assess(paper);\n this.contentAssessor.assess(paper);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n getResult(groupBy = 'category', getScore = true) {\n let assessments = [];\n switch (groupBy) {\n case 'category':\n assessments = groupAssessmentsByCategory(this.assessments);\n break;\n case 'status':\n assessments = groupAssessmentsByStatus(this.assessments);\n break;\n }\n\n return {\n assessments,\n ...(getScore ? {score: this.getScore()} : {})\n };\n }\n\n getScore() {\n let point = 0;\n this.assessments.forEach(assessment => {\n point += assessment.score || 0;\n });\n return Math.round((point));\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -76,4 +76,37 @@ export const RELATED_KEYWORDS_ID = 'relatedKeywords';
76
76
  export const RELATED_KEYWORDS_DENSITY_ID = 'relatedKeywordsDensity';
77
77
  export const MEDIA_ID = 'media';
78
78
  export const contentSEOCategory = [INTRODUCTION_KEYWORD_ID, FAQs_ASSESSMENT_ID, SENTENCE_BEGINNINGS_ID, TEXT_SENTENCE_LENGTH_ID, TEXT_LENGTH_ID, TITLE_KEYWORD_ID, KEYPHRASE_LENGTH_ID, TEXT_TRANSITION_WORDS_ID, KEYPHRASE_DENSITY_ID, SLUG_KEYWORD_ID, KEYPHRASE_ID, TEXT_PARAGRAPH_TOO_LONG_ID, SUBHEADINGS_KEYWORD_ID, IMAGES_ID, NUMBER_TITLE_ID, META_DESCRIPTION_KEYWORD_ID, KEYWORD_FAQs_ASSESSMENT_ID, RELATED_KEYWORDS_ID, RELATED_KEYWORDS_DENSITY_ID, MEDIA_ID, CHARACTERS_URL, FAQs_STRUCTURE_DATA_ID];
79
+ export const idPointsMap = {
80
+ // keyword (15pts / 2 items = 7.5)
81
+ [KEYPHRASE_ID]: KEYWORD_POINTS,
82
+ [RELATED_KEYWORDS_ID]: KEYWORD_POINTS,
83
+ // technicalSeo (20pts / 3 items ≈ 6.67)
84
+ [SINGLE_H1_ID]: TECHNICAL_SEO_POINTS,
85
+ [SINGLE_TITLE_ID]: TECHNICAL_SEO_POINTS,
86
+ [SCHEMA_ID]: TECHNICAL_SEO_POINTS,
87
+ // mainContent (25pts / 7 items ≈ 3.57)
88
+ [KEYPHRASE_DENSITY_ID]: MAIN_CONTENT_POINTS,
89
+ [TEXT_PARAGRAPH_TOO_LONG_ID]: MAIN_CONTENT_POINTS,
90
+ [RELATED_KEYWORDS_DENSITY_ID]: MAIN_CONTENT_POINTS,
91
+ [TEXT_SENTENCE_LENGTH_ID]: MAIN_CONTENT_POINTS,
92
+ [INTRODUCTION_KEYWORD_ID]: MAIN_CONTENT_POINTS,
93
+ [SUBHEADINGS_KEYWORD_ID]: MAIN_CONTENT_POINTS,
94
+ [TEXT_LENGTH_ID]: MAIN_CONTENT_POINTS,
95
+ // metaTags (15pts / 4 items = 3.75)
96
+ [TITLE_WIDTH_ID]: META_TAG_POINTS,
97
+ [META_DESCRIPTION_LENGTH_ID]: META_TAG_POINTS,
98
+ [META_DESCRIPTION_KEYWORD_ID]: META_TAG_POINTS,
99
+ [TITLE_KEYWORD_ID]: META_TAG_POINTS,
100
+ // linkRecommend (10pts / 2 items = 5)
101
+ [INTERNAL_LINKS_ID]: LINK_RECOMMEND_POINTS,
102
+ [EXTERNAL_LINKS_ID]: LINK_RECOMMEND_POINTS,
103
+ // faqs (10pts / 3 items ≈ 3.33)
104
+ [FAQs_ASSESSMENT_ID]: FAQS_POINTS,
105
+ [KEYWORD_FAQs_ASSESSMENT_ID]: FAQS_POINTS,
106
+ [FAQs_STRUCTURE_DATA_ID]: FAQS_POINTS,
107
+ // urls (5pts / 3 items ≈ 1.67)
108
+ [URL_LENGTH_ID]: URLS_POINTS,
109
+ [SLUG_KEYWORD_ID]: URLS_POINTS,
110
+ [CHARACTERS_URL]: URLS_POINTS
111
+ };
79
112
  //# sourceMappingURL=analysis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.js","names":["POINT","keywordRate","rate","items","technicalSeoRate","mainContentRate","metaTagRate","linkRecommendRate","faqsRate","urlsRate","priorityRate","high","medium","low","statusRate","good","bad","KEYWORD_POINTS","TECHNICAL_SEO_POINTS","MAIN_CONTENT_POINTS","META_TAG_POINTS","LINK_RECOMMEND_POINTS","FAQS_POINTS","URLS_POINTS","SINGLE_H1_ID","META_DESCRIPTION_LENGTH_ID","URL_LENGTH_ID","INTERNAL_LINKS_ID","EXTERNAL_LINKS_ID","TITLE_WIDTH_ID","TEXT_IMAGES_ID","SCHEMA_ID","SINGLE_TITLE_ID","technicalSEOCategory","INTRODUCTION_KEYWORD_ID","SENTENCE_BEGINNINGS_ID","TEXT_SENTENCE_LENGTH_ID","TEXT_LENGTH_ID","FAQs_ASSESSMENT_ID","FAQs_STRUCTURE_DATA_ID","KEYWORD_FAQs_ASSESSMENT_ID","TITLE_KEYWORD_ID","KEYPHRASE_LENGTH_ID","TEXT_TRANSITION_WORDS_ID","KEYPHRASE_DENSITY_ID","SLUG_KEYWORD_ID","CHARACTERS_URL","KEYPHRASE_ID","TEXT_PARAGRAPH_TOO_LONG_ID","SUBHEADINGS_KEYWORD_ID","IMAGES_ID","NUMBER_TITLE_ID","META_DESCRIPTION_KEYWORD_ID","RELATED_KEYWORDS_ID","RELATED_KEYWORDS_DENSITY_ID","MEDIA_ID","contentSEOCategory"],"sources":["../../../src/const/analysis.js"],"sourcesContent":["export const POINT = 100;\nexport const keywordRate = {\n rate: 15,\n items: 2\n}\nexport const technicalSeoRate = {\n rate: 20,\n items: 3\n}\nexport const mainContentRate = {\n rate: 25,\n items: 7\n}\nexport const metaTagRate = {\n rate: 15,\n items: 4\n}\nexport const linkRecommendRate = {\n rate: 10,\n items: 2\n}\nexport const faqsRate = {\n rate: 10,\n items: 3\n}\nexport const urlsRate = {\n rate: 5,\n items: 3\n}\n\nexport const priorityRate = {\n high: 1,\n medium: 0.75,\n low: 0.5\n};\nexport const statusRate = {\n good: 1,\n bad: 0\n};\nexport const KEYWORD_POINTS = (keywordRate.rate / keywordRate.items);\nexport const TECHNICAL_SEO_POINTS = (technicalSeoRate.rate / technicalSeoRate.items);\nexport const MAIN_CONTENT_POINTS = (mainContentRate.rate / mainContentRate.items);\nexport const META_TAG_POINTS = (metaTagRate.rate / metaTagRate.items);\nexport const LINK_RECOMMEND_POINTS = (linkRecommendRate.rate / linkRecommendRate.items);\nexport const FAQS_POINTS = (faqsRate .rate / faqsRate .items);\nexport const URLS_POINTS = (urlsRate.rate / urlsRate.items);\n\n\n\nexport const SINGLE_H1_ID = 'singleH1';\nexport const META_DESCRIPTION_LENGTH_ID = 'metaDescriptionLength';\nexport const URL_LENGTH_ID = 'urlLength';\nexport const INTERNAL_LINKS_ID = 'internalLinks';\nexport const EXTERNAL_LINKS_ID = 'externalLinks';\nexport const TITLE_WIDTH_ID = 'titleWidth';\nexport const TEXT_IMAGES_ID = 'textImages';\nexport const SCHEMA_ID = 'schema';\nexport const SINGLE_TITLE_ID = 'singleTitle';\n\nexport const technicalSEOCategory = [\n SINGLE_H1_ID,\n META_DESCRIPTION_LENGTH_ID,\n URL_LENGTH_ID,\n INTERNAL_LINKS_ID,\n EXTERNAL_LINKS_ID,\n TITLE_WIDTH_ID,\n TEXT_IMAGES_ID,\n SCHEMA_ID,\n SINGLE_TITLE_ID\n];\n\nexport const INTRODUCTION_KEYWORD_ID = 'introductionKeyword';\nexport const SENTENCE_BEGINNINGS_ID = 'sentenceBeginnings';\nexport const TEXT_SENTENCE_LENGTH_ID = 'textSentenceLength';\nexport const TEXT_LENGTH_ID = 'textLength';\nexport const FAQs_ASSESSMENT_ID = 'faqs';\nexport const FAQs_STRUCTURE_DATA_ID = 'faqsStructuredData';\nexport const KEYWORD_FAQs_ASSESSMENT_ID = 'keywordFaqs';\nexport const TITLE_KEYWORD_ID = 'titleKeyword';\nexport const KEYPHRASE_LENGTH_ID = 'keyphraseLength';\nexport const TEXT_TRANSITION_WORDS_ID = 'textTransitionWords';\nexport const KEYPHRASE_DENSITY_ID = 'keyphraseDensity';\nexport const SLUG_KEYWORD_ID = 'slugKeyword';\nexport const CHARACTERS_URL = 'charactersUrl';\nexport const KEYPHRASE_ID = 'keyphrase';\nexport const TEXT_PARAGRAPH_TOO_LONG_ID = 'textParagraphTooLong';\nexport const SUBHEADINGS_KEYWORD_ID = 'subheadingsKeyword';\nexport const IMAGES_ID = 'images';\nexport const NUMBER_TITLE_ID = 'numberTitle';\nexport const META_DESCRIPTION_KEYWORD_ID = 'metaDescriptionKeyword';\nexport const RELATED_KEYWORDS_ID = 'relatedKeywords';\nexport const RELATED_KEYWORDS_DENSITY_ID = 'relatedKeywordsDensity';\nexport const MEDIA_ID = 'media';\n\nexport const contentSEOCategory = [\n INTRODUCTION_KEYWORD_ID,\n FAQs_ASSESSMENT_ID,\n SENTENCE_BEGINNINGS_ID,\n TEXT_SENTENCE_LENGTH_ID,\n TEXT_LENGTH_ID,\n TITLE_KEYWORD_ID,\n KEYPHRASE_LENGTH_ID,\n TEXT_TRANSITION_WORDS_ID,\n KEYPHRASE_DENSITY_ID,\n SLUG_KEYWORD_ID,\n KEYPHRASE_ID,\n TEXT_PARAGRAPH_TOO_LONG_ID,\n SUBHEADINGS_KEYWORD_ID,\n IMAGES_ID,\n NUMBER_TITLE_ID,\n META_DESCRIPTION_KEYWORD_ID,\n KEYWORD_FAQs_ASSESSMENT_ID,\n RELATED_KEYWORDS_ID,\n RELATED_KEYWORDS_DENSITY_ID,\n MEDIA_ID,\n CHARACTERS_URL,\n FAQs_STRUCTURE_DATA_ID,\n];\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"analysis.js","names":["POINT","keywordRate","rate","items","technicalSeoRate","mainContentRate","metaTagRate","linkRecommendRate","faqsRate","urlsRate","priorityRate","high","medium","low","statusRate","good","bad","KEYWORD_POINTS","TECHNICAL_SEO_POINTS","MAIN_CONTENT_POINTS","META_TAG_POINTS","LINK_RECOMMEND_POINTS","FAQS_POINTS","URLS_POINTS","SINGLE_H1_ID","META_DESCRIPTION_LENGTH_ID","URL_LENGTH_ID","INTERNAL_LINKS_ID","EXTERNAL_LINKS_ID","TITLE_WIDTH_ID","TEXT_IMAGES_ID","SCHEMA_ID","SINGLE_TITLE_ID","technicalSEOCategory","INTRODUCTION_KEYWORD_ID","SENTENCE_BEGINNINGS_ID","TEXT_SENTENCE_LENGTH_ID","TEXT_LENGTH_ID","FAQs_ASSESSMENT_ID","FAQs_STRUCTURE_DATA_ID","KEYWORD_FAQs_ASSESSMENT_ID","TITLE_KEYWORD_ID","KEYPHRASE_LENGTH_ID","TEXT_TRANSITION_WORDS_ID","KEYPHRASE_DENSITY_ID","SLUG_KEYWORD_ID","CHARACTERS_URL","KEYPHRASE_ID","TEXT_PARAGRAPH_TOO_LONG_ID","SUBHEADINGS_KEYWORD_ID","IMAGES_ID","NUMBER_TITLE_ID","META_DESCRIPTION_KEYWORD_ID","RELATED_KEYWORDS_ID","RELATED_KEYWORDS_DENSITY_ID","MEDIA_ID","contentSEOCategory","idPointsMap"],"sources":["../../../src/const/analysis.js"],"sourcesContent":["export const POINT = 100;\nexport const keywordRate = {\n rate: 15,\n items: 2\n}\nexport const technicalSeoRate = {\n rate: 20,\n items: 3\n}\nexport const mainContentRate = {\n rate: 25,\n items: 7\n}\nexport const metaTagRate = {\n rate: 15,\n items: 4\n}\nexport const linkRecommendRate = {\n rate: 10,\n items: 2\n}\nexport const faqsRate = {\n rate: 10,\n items: 3\n}\nexport const urlsRate = {\n rate: 5,\n items: 3\n}\n\nexport const priorityRate = {\n high: 1,\n medium: 0.75,\n low: 0.5\n};\nexport const statusRate = {\n good: 1,\n bad: 0\n};\nexport const KEYWORD_POINTS = (keywordRate.rate / keywordRate.items);\nexport const TECHNICAL_SEO_POINTS = (technicalSeoRate.rate / technicalSeoRate.items);\nexport const MAIN_CONTENT_POINTS = (mainContentRate.rate / mainContentRate.items);\nexport const META_TAG_POINTS = (metaTagRate.rate / metaTagRate.items);\nexport const LINK_RECOMMEND_POINTS = (linkRecommendRate.rate / linkRecommendRate.items);\nexport const FAQS_POINTS = (faqsRate .rate / faqsRate .items);\nexport const URLS_POINTS = (urlsRate.rate / urlsRate.items);\n\n\n\nexport const SINGLE_H1_ID = 'singleH1';\nexport const META_DESCRIPTION_LENGTH_ID = 'metaDescriptionLength';\nexport const URL_LENGTH_ID = 'urlLength';\nexport const INTERNAL_LINKS_ID = 'internalLinks';\nexport const EXTERNAL_LINKS_ID = 'externalLinks';\nexport const TITLE_WIDTH_ID = 'titleWidth';\nexport const TEXT_IMAGES_ID = 'textImages';\nexport const SCHEMA_ID = 'schema';\nexport const SINGLE_TITLE_ID = 'singleTitle';\n\nexport const technicalSEOCategory = [\n SINGLE_H1_ID,\n META_DESCRIPTION_LENGTH_ID,\n URL_LENGTH_ID,\n INTERNAL_LINKS_ID,\n EXTERNAL_LINKS_ID,\n TITLE_WIDTH_ID,\n TEXT_IMAGES_ID,\n SCHEMA_ID,\n SINGLE_TITLE_ID\n];\n\nexport const INTRODUCTION_KEYWORD_ID = 'introductionKeyword';\nexport const SENTENCE_BEGINNINGS_ID = 'sentenceBeginnings';\nexport const TEXT_SENTENCE_LENGTH_ID = 'textSentenceLength';\nexport const TEXT_LENGTH_ID = 'textLength';\nexport const FAQs_ASSESSMENT_ID = 'faqs';\nexport const FAQs_STRUCTURE_DATA_ID = 'faqsStructuredData';\nexport const KEYWORD_FAQs_ASSESSMENT_ID = 'keywordFaqs';\nexport const TITLE_KEYWORD_ID = 'titleKeyword';\nexport const KEYPHRASE_LENGTH_ID = 'keyphraseLength';\nexport const TEXT_TRANSITION_WORDS_ID = 'textTransitionWords';\nexport const KEYPHRASE_DENSITY_ID = 'keyphraseDensity';\nexport const SLUG_KEYWORD_ID = 'slugKeyword';\nexport const CHARACTERS_URL = 'charactersUrl';\nexport const KEYPHRASE_ID = 'keyphrase';\nexport const TEXT_PARAGRAPH_TOO_LONG_ID = 'textParagraphTooLong';\nexport const SUBHEADINGS_KEYWORD_ID = 'subheadingsKeyword';\nexport const IMAGES_ID = 'images';\nexport const NUMBER_TITLE_ID = 'numberTitle';\nexport const META_DESCRIPTION_KEYWORD_ID = 'metaDescriptionKeyword';\nexport const RELATED_KEYWORDS_ID = 'relatedKeywords';\nexport const RELATED_KEYWORDS_DENSITY_ID = 'relatedKeywordsDensity';\nexport const MEDIA_ID = 'media';\n\nexport const contentSEOCategory = [\n INTRODUCTION_KEYWORD_ID,\n FAQs_ASSESSMENT_ID,\n SENTENCE_BEGINNINGS_ID,\n TEXT_SENTENCE_LENGTH_ID,\n TEXT_LENGTH_ID,\n TITLE_KEYWORD_ID,\n KEYPHRASE_LENGTH_ID,\n TEXT_TRANSITION_WORDS_ID,\n KEYPHRASE_DENSITY_ID,\n SLUG_KEYWORD_ID,\n KEYPHRASE_ID,\n TEXT_PARAGRAPH_TOO_LONG_ID,\n SUBHEADINGS_KEYWORD_ID,\n IMAGES_ID,\n NUMBER_TITLE_ID,\n META_DESCRIPTION_KEYWORD_ID,\n KEYWORD_FAQs_ASSESSMENT_ID,\n RELATED_KEYWORDS_ID,\n RELATED_KEYWORDS_DENSITY_ID,\n MEDIA_ID,\n CHARACTERS_URL,\n FAQs_STRUCTURE_DATA_ID,\n];\n\n\nexport const idPointsMap = {\n // keyword (15pts / 2 items = 7.5)\n [KEYPHRASE_ID]: KEYWORD_POINTS,\n [RELATED_KEYWORDS_ID]: KEYWORD_POINTS,\n // technicalSeo (20pts / 3 items ≈ 6.67)\n [SINGLE_H1_ID]: TECHNICAL_SEO_POINTS,\n [SINGLE_TITLE_ID]: TECHNICAL_SEO_POINTS,\n [SCHEMA_ID]: TECHNICAL_SEO_POINTS,\n // mainContent (25pts / 7 items ≈ 3.57)\n [KEYPHRASE_DENSITY_ID]: MAIN_CONTENT_POINTS,\n [TEXT_PARAGRAPH_TOO_LONG_ID]: MAIN_CONTENT_POINTS,\n [RELATED_KEYWORDS_DENSITY_ID]: MAIN_CONTENT_POINTS,\n [TEXT_SENTENCE_LENGTH_ID]: MAIN_CONTENT_POINTS,\n [INTRODUCTION_KEYWORD_ID]: MAIN_CONTENT_POINTS,\n [SUBHEADINGS_KEYWORD_ID]: MAIN_CONTENT_POINTS,\n [TEXT_LENGTH_ID]: MAIN_CONTENT_POINTS,\n // metaTags (15pts / 4 items = 3.75)\n [TITLE_WIDTH_ID]: META_TAG_POINTS,\n [META_DESCRIPTION_LENGTH_ID]: META_TAG_POINTS,\n [META_DESCRIPTION_KEYWORD_ID]: META_TAG_POINTS,\n [TITLE_KEYWORD_ID]: META_TAG_POINTS,\n // linkRecommend (10pts / 2 items = 5)\n [INTERNAL_LINKS_ID]: LINK_RECOMMEND_POINTS,\n [EXTERNAL_LINKS_ID]: LINK_RECOMMEND_POINTS,\n // faqs (10pts / 3 items ≈ 3.33)\n [FAQs_ASSESSMENT_ID]: FAQS_POINTS,\n [KEYWORD_FAQs_ASSESSMENT_ID]: FAQS_POINTS,\n [FAQs_STRUCTURE_DATA_ID]: FAQS_POINTS,\n // urls (5pts / 3 items ≈ 1.67)\n [URL_LENGTH_ID]: URLS_POINTS,\n [SLUG_KEYWORD_ID]: URLS_POINTS,\n [CHARACTERS_URL]: URLS_POINTS,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -114,7 +114,7 @@ class SentenceLengthInTextAssessment extends Assessment {
114
114
  */
115
115
  calculateResult(percentage, hasDescription) {
116
116
  let status = 'bad';
117
- if (percentage && hasDescription && percentage <= this._config.recommendedLength) {
117
+ if (hasDescription && percentage <= this._config.slightlyTooMany) {
118
118
  status = 'good';
119
119
  }
120
120
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"SentenceLengthInTextAssessment.js","names":["merge","Assessment","getTooLongSentences","formatNumber","AssessmentResult","MAIN_CONTENT_POINTS","TEXT_SENTENCE_LENGTH_ID","SentenceLengthInTextAssessment","constructor","config","defaultConfig","id","priority","docUrl","ctaType","fixPosition","recommendedLength","slightlyTooMany","farTooMany","title","content","improve","bad","good","_config","identifier","getResult","paper","researcher","sentences","getResearch","hasDescription","getConfig","getLanguageSpecificConfig","percentage","calculatePercentage","result","calculateResult","assessmentResult","setScore","score","setStatus","status","isApplicable","currentConfig","languageSpecificConfig","hasOwnProperty","length","tooLongTotal","countTooLongSentences","parseInt","getScore"],"sources":["../../../../../src/scoring/assessments/readability/SentenceLengthInTextAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport getTooLongSentences from '../../helpers/assessments/checkForTooLongSentences';\nimport formatNumber from '../../../helpers/formatNumber';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {MAIN_CONTENT_POINTS, TEXT_SENTENCE_LENGTH_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that will calculate the length of sentences in the text.\n */\nclass SentenceLengthInTextAssessment extends Assessment {\n /**\n\t * Sets the identifier and the config.\n\t *\n\t * @param {object} config\t\t\tThe scoring configuration that should be used.\n\n\t * @returns {void}\n\t */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: TEXT_SENTENCE_LENGTH_ID,\n priority: 'high',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#sentence-length',\n ctaType: 'fix',\n fixPosition: 'sentenceLength',\n recommendedLength: 20,\n slightlyTooMany: 25,\n farTooMany: 30,\n title: 'Text Sentence Length',\n content: {\n improve: '',\n bad:\n 'Sentence too long. Keep sentence length less than 20 words to improve readability and flow.',\n good: 'Sentence length is optimized for readability, less than 20 words.'\n }\n };\n\n this._config = merge(defaultConfig, config);\n this.identifier = TEXT_SENTENCE_LENGTH_ID;\n }\n\n /**\n * Scores the percentage of sentences including more than the recommended number of words.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling research.\n *\n * @returns {AssessmentResult} The Assessment result.\n */\n getResult({paper, researcher}) {\n const sentences = researcher.getResearch('countSentencesFromText');\n const hasDescription = paper.hasDescription();\n if (researcher.getConfig('sentenceLength')) {\n this._config = this.getLanguageSpecificConfig(researcher);\n }\n const percentage = this.calculatePercentage(sentences);\n\n const result = this.calculateResult(percentage, hasDescription);\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n assessmentResult.setScore(result.score);\n assessmentResult.setStatus(result.status);\n\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true;\n }\n\n /**\n * Check if there is language-specific config, and if so, overwrite the current config with it.\n *\n * @param {Researcher} researcher The researcher to use.\n *\n * @returns {Object} The config that should be used.\n */\n getLanguageSpecificConfig(researcher) {\n const currentConfig = this._config;\n const languageSpecificConfig = researcher.getConfig('sentenceLength');\n\n if (languageSpecificConfig.hasOwnProperty('recommendedLength')) {\n currentConfig.recommendedLength = languageSpecificConfig.recommendedLength;\n }\n\n return currentConfig;\n }\n\n /**\n * Calculates the percentage of sentences that are too long.\n *\n * @param {Array} sentences The sentences to calculate the percentage for.\n * @returns {number} The calculates percentage of too long sentences.\n */\n calculatePercentage(sentences) {\n let percentage = 0;\n\n if (sentences.length !== 0) {\n const tooLongTotal = this.countTooLongSentences(sentences);\n percentage = formatNumber((tooLongTotal / sentences.length) * 100);\n }\n\n return percentage;\n }\n\n /**\n *\n * @param percentage\n * @param hasDescription\n * @returns {{score: number, status: string}}\n */\n calculateResult(percentage, hasDescription) {\n let status = 'bad';\n if (percentage && hasDescription && percentage <= this._config.recommendedLength) {\n status = 'good';\n }\n return {\n score: parseInt(this.getScore(MAIN_CONTENT_POINTS, status)) || 0,\n status\n };\n }\n\n /**\n * Gets the sentences that are qualified as being too long.\n *\n * @param {array} sentences The sentences to filter through.\n * @returns {array} Array with all the sentences considered to be too long.\n */\n getTooLongSentences(sentences) {\n return getTooLongSentences(sentences, this._config.recommendedLength);\n }\n\n /**\n * Get the total amount of sentences that are qualified as being too long.\n *\n * @param {Array} sentences The sentences to filter through.\n * @returns {Number} The amount of sentences that are considered too long.\n */\n countTooLongSentences(sentences) {\n return this.getTooLongSentences(sentences).length;\n }\n}\n\nexport default SentenceLengthInTextAssessment;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SentenceLengthInTextAssessment.js","names":["merge","Assessment","getTooLongSentences","formatNumber","AssessmentResult","MAIN_CONTENT_POINTS","TEXT_SENTENCE_LENGTH_ID","SentenceLengthInTextAssessment","constructor","config","defaultConfig","id","priority","docUrl","ctaType","fixPosition","recommendedLength","slightlyTooMany","farTooMany","title","content","improve","bad","good","_config","identifier","getResult","paper","researcher","sentences","getResearch","hasDescription","getConfig","getLanguageSpecificConfig","percentage","calculatePercentage","result","calculateResult","assessmentResult","setScore","score","setStatus","status","isApplicable","currentConfig","languageSpecificConfig","hasOwnProperty","length","tooLongTotal","countTooLongSentences","parseInt","getScore"],"sources":["../../../../../src/scoring/assessments/readability/SentenceLengthInTextAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport getTooLongSentences from '../../helpers/assessments/checkForTooLongSentences';\nimport formatNumber from '../../../helpers/formatNumber';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport {MAIN_CONTENT_POINTS, TEXT_SENTENCE_LENGTH_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents the assessment that will calculate the length of sentences in the text.\n */\nclass SentenceLengthInTextAssessment extends Assessment {\n /**\n\t * Sets the identifier and the config.\n\t *\n\t * @param {object} config\t\t\tThe scoring configuration that should be used.\n\n\t * @returns {void}\n\t */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: TEXT_SENTENCE_LENGTH_ID,\n priority: 'high',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#sentence-length',\n ctaType: 'fix',\n fixPosition: 'sentenceLength',\n recommendedLength: 20,\n slightlyTooMany: 25,\n farTooMany: 30,\n title: 'Text Sentence Length',\n content: {\n improve: '',\n bad:\n 'Sentence too long. Keep sentence length less than 20 words to improve readability and flow.',\n good: 'Sentence length is optimized for readability, less than 20 words.'\n }\n };\n\n this._config = merge(defaultConfig, config);\n this.identifier = TEXT_SENTENCE_LENGTH_ID;\n }\n\n /**\n * Scores the percentage of sentences including more than the recommended number of words.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling research.\n *\n * @returns {AssessmentResult} The Assessment result.\n */\n getResult({paper, researcher}) {\n const sentences = researcher.getResearch('countSentencesFromText');\n const hasDescription = paper.hasDescription();\n if (researcher.getConfig('sentenceLength')) {\n this._config = this.getLanguageSpecificConfig(researcher);\n }\n const percentage = this.calculatePercentage(sentences);\n\n const result = this.calculateResult(percentage, hasDescription);\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n assessmentResult.setScore(result.score);\n assessmentResult.setStatus(result.status);\n\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true;\n }\n\n /**\n * Check if there is language-specific config, and if so, overwrite the current config with it.\n *\n * @param {Researcher} researcher The researcher to use.\n *\n * @returns {Object} The config that should be used.\n */\n getLanguageSpecificConfig(researcher) {\n const currentConfig = this._config;\n const languageSpecificConfig = researcher.getConfig('sentenceLength');\n\n if (languageSpecificConfig.hasOwnProperty('recommendedLength')) {\n currentConfig.recommendedLength = languageSpecificConfig.recommendedLength;\n }\n\n return currentConfig;\n }\n\n /**\n * Calculates the percentage of sentences that are too long.\n *\n * @param {Array} sentences The sentences to calculate the percentage for.\n * @returns {number} The calculates percentage of too long sentences.\n */\n calculatePercentage(sentences) {\n let percentage = 0;\n\n if (sentences.length !== 0) {\n const tooLongTotal = this.countTooLongSentences(sentences);\n percentage = formatNumber((tooLongTotal / sentences.length) * 100);\n }\n\n return percentage;\n }\n\n /**\n *\n * @param percentage\n * @param hasDescription\n * @returns {{score: number, status: string}}\n */\n calculateResult(percentage, hasDescription) {\n let status = 'bad';\n\n if (hasDescription && percentage <= this._config.slightlyTooMany) {\n status = 'good';\n }\n return {\n score: parseInt(this.getScore(MAIN_CONTENT_POINTS, status)) || 0,\n status\n };\n }\n\n /**\n * Gets the sentences that are qualified as being too long.\n *\n * @param {array} sentences The sentences to filter through.\n * @returns {array} Array with all the sentences considered to be too long.\n */\n getTooLongSentences(sentences) {\n return getTooLongSentences(sentences, this._config.recommendedLength);\n }\n\n /**\n * Get the total amount of sentences that are qualified as being too long.\n *\n * @param {Array} sentences The sentences to filter through.\n * @returns {Number} The amount of sentences that are considered too long.\n */\n countTooLongSentences(sentences) {\n return this.getTooLongSentences(sentences).length;\n }\n}\n\nexport default SentenceLengthInTextAssessment;\n"],"mappings":"AAAA,SAAQA,KAAK,QAAO,QAAQ;AAC5B,OAAOC,UAAU;AACjB,OAAOC,mBAAmB;AAC1B,OAAOC,YAAY;AACnB,OAAOC,gBAAgB;AACvB,SAAQC,mBAAmB,EAAEC,uBAAuB;;AAEpD;AACA;AACA;AACA,MAAMC,8BAA8B,SAASN,UAAU,CAAC;EACtD;AACF;AACA;AACA;AACA;AACA;EAEEO,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEL,uBAAuB;MAC3BM,QAAQ,EAAE,MAAM;MAChBC,MAAM,EACJ,6FAA6F;MAC/FC,OAAO,EAAE,KAAK;MACdC,WAAW,EAAE,gBAAgB;MAC7BC,iBAAiB,EAAE,EAAE;MACrBC,eAAe,EAAE,EAAE;MACnBC,UAAU,EAAE,EAAE;MACdC,KAAK,EAAE,sBAAsB;MAC7BC,OAAO,EAAE;QACPC,OAAO,EAAE,EAAE;QACXC,GAAG,EACD,6FAA6F;QAC/FC,IAAI,EAAE;MACR;IACF,CAAC;IAED,IAAI,CAACC,OAAO,GAAGxB,KAAK,CAACU,aAAa,EAAED,MAAM,CAAC;IAC3C,IAAI,CAACgB,UAAU,GAAGnB,uBAAuB;EAC3C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEoB,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,MAAMC,SAAS,GAAGD,UAAU,CAACE,WAAW,CAAC,wBAAwB,CAAC;IAClE,MAAMC,cAAc,GAAGJ,KAAK,CAACI,cAAc,CAAC,CAAC;IAC7C,IAAIH,UAAU,CAACI,SAAS,CAAC,gBAAgB,CAAC,EAAE;MAC1C,IAAI,CAACR,OAAO,GAAG,IAAI,CAACS,yBAAyB,CAACL,UAAU,CAAC;IAC3D;IACA,MAAMM,UAAU,GAAG,IAAI,CAACC,mBAAmB,CAACN,SAAS,CAAC;IAEtD,MAAMO,MAAM,GAAG,IAAI,CAACC,eAAe,CAACH,UAAU,EAAEH,cAAc,CAAC;IAE/D,MAAMO,gBAAgB,GAAG,IAAIlC,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACe;IAAO,CAAC,CAAC;IAErEc,gBAAgB,CAACC,QAAQ,CAACH,MAAM,CAACI,KAAK,CAAC;IACvCF,gBAAgB,CAACG,SAAS,CAACL,MAAM,CAACM,MAAM,CAAC;IAEzC,OAAOJ,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,YAAYA,CAAChB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEM,yBAAyBA,CAACL,UAAU,EAAE;IACpC,MAAMgB,aAAa,GAAG,IAAI,CAACpB,OAAO;IAClC,MAAMqB,sBAAsB,GAAGjB,UAAU,CAACI,SAAS,CAAC,gBAAgB,CAAC;IAErE,IAAIa,sBAAsB,CAACC,cAAc,CAAC,mBAAmB,CAAC,EAAE;MAC9DF,aAAa,CAAC5B,iBAAiB,GAAG6B,sBAAsB,CAAC7B,iBAAiB;IAC5E;IAEA,OAAO4B,aAAa;EACtB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACET,mBAAmBA,CAACN,SAAS,EAAE;IAC7B,IAAIK,UAAU,GAAG,CAAC;IAElB,IAAIL,SAAS,CAACkB,MAAM,KAAK,CAAC,EAAE;MAC1B,MAAMC,YAAY,GAAG,IAAI,CAACC,qBAAqB,CAACpB,SAAS,CAAC;MAC1DK,UAAU,GAAG/B,YAAY,CAAE6C,YAAY,GAAGnB,SAAS,CAACkB,MAAM,GAAI,GAAG,CAAC;IACpE;IAEA,OAAOb,UAAU;EACnB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEG,eAAeA,CAACH,UAAU,EAAEH,cAAc,EAAE;IAC1C,IAAIW,MAAM,GAAG,KAAK;IAElB,IAAIX,cAAc,IAAIG,UAAU,IAAI,IAAI,CAACV,OAAO,CAACP,eAAe,EAAE;MAChEyB,MAAM,GAAG,MAAM;IACjB;IACA,OAAO;MACLF,KAAK,EAAEU,QAAQ,CAAC,IAAI,CAACC,QAAQ,CAAC9C,mBAAmB,EAAEqC,MAAM,CAAC,CAAC,IAAI,CAAC;MAChEA;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACExC,mBAAmBA,CAAC2B,SAAS,EAAE;IAC7B,OAAO3B,mBAAmB,CAAC2B,SAAS,EAAE,IAAI,CAACL,OAAO,CAACR,iBAAiB,CAAC;EACvE;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEiC,qBAAqBA,CAACpB,SAAS,EAAE;IAC/B,OAAO,IAAI,CAAC3B,mBAAmB,CAAC2B,SAAS,CAAC,CAACkB,MAAM;EACnD;AACF;AAEA,eAAexC,8BAA8B","ignoreList":[]}
@@ -63,9 +63,9 @@ class SingleH1Assessment extends Assessment {
63
63
  * @returns {{score: number, status: string}}
64
64
  */
65
65
  calculateResult(paper) {
66
+ let status = 'bad';
66
67
  const htmlString = paper.getText();
67
68
  const desHasH1Tag = htmlString.includes('<h1>');
68
- let status = 'bad';
69
69
  if (this._h1Count === 1) {
70
70
  status = 'good';
71
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SingleH1Assessment.js","names":["isUndefined","merge","Assessment","AssessmentResult","SINGLE_H1_ID","TECHNICAL_SEO_POINTS","SingleH1Assessment","constructor","config","defaultConfig","id","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","getResult","paper","researcher","_h1Count","getResearch","assessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","htmlString","getText","desHasH1Tag","includes","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/SingleH1Assessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_H1_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleH1Assessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_H1_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n fixPosition: 'description',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'H1 tag',\n content: {\n good: 'H1 tag is optimized.',\n improve: 'You should use only one H1 tag',\n bad: 'Missing H1 tag. Add one H1 to clearly define your page`s topic.'\n }\n };\n\n this.identifier = SINGLE_H1_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n this._h1Count = researcher.getResearch('h1s');\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const htmlString = paper.getText();\n const desHasH1Tag = htmlString.includes('<h1>');\n\n let status = 'bad';\n if (this._h1Count === 1) {\n status = 'good';\n }\n\n if (this._h1Count === 0 && !desHasH1Tag) {\n status = 'good';\n }\n\n if (this._h1Count > 1) {\n status = 'bad';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true\n }\n}\n\nexport default SingleH1Assessment;\n"],"mappings":"AAAA,SAAQA,WAAW,EAAEC,KAAK,QAAO,QAAQ;AACzC,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,YAAY,EAAEC,oBAAoB;;AAE1C;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,SAASJ,UAAU,CAAC;EAC1C;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEN,YAAY;MAChBO,MAAM,EAAE,yCAAyC;MACjDC,WAAW,EAAE,aAAa;MAC1BC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,QAAQ;MACfC,OAAO,EAAE;QACPC,IAAI,EAAE,sBAAsB;QAC5BC,OAAO,EAAE,gCAAgC;QACzCC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGhB,YAAY;IAC9B,IAAI,CAACiB,OAAO,GAAGpB,KAAK,CAACQ,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEc,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,IAAI,CAACC,QAAQ,GAAGD,UAAU,CAACE,WAAW,CAAC,KAAK,CAAC;IAC7C,MAAMC,gBAAgB,GAAG,IAAIxB,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IAErE,MAAMO,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACN,KAAK,CAAC;IAEpD,IAAI,CAACvB,WAAW,CAAC4B,gBAAgB,CAAC,EAAE;MAClCD,gBAAgB,CAACG,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;MACjDJ,gBAAgB,CAACK,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IACrD;IAEA,OAAON,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEE,eAAeA,CAACN,KAAK,EAAE;IACrB,MAAMW,UAAU,GAAGX,KAAK,CAACY,OAAO,CAAC,CAAC;IAClC,MAAMC,WAAW,GAAGF,UAAU,CAACG,QAAQ,CAAC,MAAM,CAAC;IAE/C,IAAIJ,MAAM,GAAG,KAAK;IAClB,IAAI,IAAI,CAACR,QAAQ,KAAK,CAAC,EAAE;MACvBQ,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACR,QAAQ,KAAK,CAAC,IAAI,CAACW,WAAW,EAAE;MACvCH,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACR,QAAQ,GAAG,CAAC,EAAE;MACrBQ,MAAM,GAAG,KAAK;IAChB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACO,QAAQ,CAACjC,oBAAoB,EAAE4B,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEM,YAAYA,CAAChB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAEA,eAAejB,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"SingleH1Assessment.js","names":["isUndefined","merge","Assessment","AssessmentResult","SINGLE_H1_ID","TECHNICAL_SEO_POINTS","SingleH1Assessment","constructor","config","defaultConfig","id","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","getResult","paper","researcher","_h1Count","getResearch","assessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","htmlString","getText","desHasH1Tag","includes","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/SingleH1Assessment.js"],"sourcesContent":["import {isUndefined, merge} from 'lodash';\nimport Assessment from '../assessment.js';\nimport AssessmentResult from '../../../values/AssessmentResult.js';\nimport {SINGLE_H1_ID, TECHNICAL_SEO_POINTS} from '@axyseo/const/analysis';\n\n/**\n * Assessment to check whether the body of the text contains more than 1 H1s in the body.\n * This assessment doesn't penalize H1 that is not in the very beginning of the body.\n */\nclass SingleH1Assessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: SINGLE_H1_ID,\n docUrl: 'https://help.seoon.io/seo/seo-checklist',\n fixPosition: 'description',\n ctaType: 'contactUs',\n priority: 'high',\n title: 'H1 tag',\n content: {\n good: 'H1 tag is optimized.',\n improve: 'You should use only one H1 tag',\n bad: 'Missing H1 tag. Add one H1 to clearly define your page`s topic.'\n }\n };\n\n this.identifier = SINGLE_H1_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Runs the h1 research and based on this returns an assessment result with a score.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher used for calling the research.\n * @returns {AssessmentResult} The assessment result.\n */\n getResult({paper, researcher}) {\n this._h1Count = researcher.getResearch('h1s');\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(paper);\n\n if (!isUndefined(calculatedResult)) {\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n }\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n let status = 'bad';\n const htmlString = paper.getText();\n const desHasH1Tag = htmlString.includes('<h1>');\n\n if (this._h1Count === 1) {\n status = 'good';\n }\n\n if (this._h1Count === 0 && !desHasH1Tag) {\n status = 'good';\n }\n\n if (this._h1Count > 1) {\n status = 'bad';\n }\n\n const score = this.getScore(TECHNICAL_SEO_POINTS, status);\n\n return {\n score,\n status\n };\n }\n\n /**\n * Checks whether the paper has a text.\n *\n * @param {Paper} paper The paper to use for the assessment.\n *\n * @returns {boolean} True when there is text.\n */\n isApplicable(paper) {\n return true\n }\n}\n\nexport default SingleH1Assessment;\n"],"mappings":"AAAA,SAAQA,WAAW,EAAEC,KAAK,QAAO,QAAQ;AACzC,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;AACvB,SAAQC,YAAY,EAAEC,oBAAoB;;AAE1C;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,SAASJ,UAAU,CAAC;EAC1C;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAEN,YAAY;MAChBO,MAAM,EAAE,yCAAyC;MACjDC,WAAW,EAAE,aAAa;MAC1BC,OAAO,EAAE,WAAW;MACpBC,QAAQ,EAAE,MAAM;MAChBC,KAAK,EAAE,QAAQ;MACfC,OAAO,EAAE;QACPC,IAAI,EAAE,sBAAsB;QAC5BC,OAAO,EAAE,gCAAgC;QACzCC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAGhB,YAAY;IAC9B,IAAI,CAACiB,OAAO,GAAGpB,KAAK,CAACQ,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEc,SAASA,CAAC;IAACC,KAAK;IAAEC;EAAU,CAAC,EAAE;IAC7B,IAAI,CAACC,QAAQ,GAAGD,UAAU,CAACE,WAAW,CAAC,KAAK,CAAC;IAC7C,MAAMC,gBAAgB,GAAG,IAAIxB,gBAAgB,CAAC;MAACK,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IAErE,MAAMO,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACN,KAAK,CAAC;IAEpD,IAAI,CAACvB,WAAW,CAAC4B,gBAAgB,CAAC,EAAE;MAClCD,gBAAgB,CAACG,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;MACjDJ,gBAAgB,CAACK,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IACrD;IAEA,OAAON,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEE,eAAeA,CAACN,KAAK,EAAE;IACrB,IAAIU,MAAM,GAAG,KAAK;IAClB,MAAMC,UAAU,GAAGX,KAAK,CAACY,OAAO,CAAC,CAAC;IAClC,MAAMC,WAAW,GAAGF,UAAU,CAACG,QAAQ,CAAC,MAAM,CAAC;IAE/C,IAAI,IAAI,CAACZ,QAAQ,KAAK,CAAC,EAAE;MACvBQ,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACR,QAAQ,KAAK,CAAC,IAAI,CAACW,WAAW,EAAE;MACvCH,MAAM,GAAG,MAAM;IACjB;IAEA,IAAI,IAAI,CAACR,QAAQ,GAAG,CAAC,EAAE;MACrBQ,MAAM,GAAG,KAAK;IAChB;IAEA,MAAMF,KAAK,GAAG,IAAI,CAACO,QAAQ,CAACjC,oBAAoB,EAAE4B,MAAM,CAAC;IAEzD,OAAO;MACLF,KAAK;MACLE;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEM,YAAYA,CAAChB,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;AACF;AAEA,eAAejB,kBAAkB","ignoreList":[]}
@@ -7,7 +7,7 @@ import { build } from "../../parse/build";
7
7
  import LanguageProcessor from "../../parse/language/LanguageProcessor.js";
8
8
  import MissingArgument from "../../errors/missingArgument.js";
9
9
  import { showTrace } from "../../helpers/errors.js";
10
- import { KEYPHRASE_DENSITY_ID, SCHEMA_ID, TEXT_LENGTH_ID } from "../../const/analysis";
10
+ import { idPointsMap, KEYPHRASE_DENSITY_ID, SCHEMA_ID, TEXT_LENGTH_ID } from "../../const/analysis";
11
11
 
12
12
  // The maximum score of individual assessment is 9. This is why we set the "score rating" here to 9.
13
13
  const ScoreRating = 9;
@@ -145,7 +145,7 @@ class Assessor {
145
145
  const assessmentResult = new AssessmentResult({
146
146
  config: assessment._config
147
147
  });
148
- const score = assessment.getScore(assessment._config.priority, 'good', assessment._config.factor);
148
+ const score = idPointsMap[assessment._config.id];
149
149
  assessmentResult.setScore(score);
150
150
  assessmentResult.setStatus('good');
151
151
  assessmentResult.setTitle(assessment._config.title);
@@ -1 +1 @@
1
- {"version":3,"file":"assessor.js","names":["filter","find","findIndex","isFunction","isUndefined","map","AssessmentResult","build","LanguageProcessor","MissingArgument","showTrace","KEYPHRASE_DENSITY_ID","SCHEMA_ID","TEXT_LENGTH_ID","ScoreRating","Assessor","constructor","researcher","config","type","setResearcher","_assessments","_researcher","getAvailableAssessments","isApplicable","assessment","paper","ignoreAssessments","getIgnoredAssessments","includes","_config","id","hasOwnProperty","hasMarker","marker","getMarks","getSpecificMarker","getPaper","_lastPaper","assess","i18n","setPaper","languageProcessor","shortcodes","_attributes","setTree","assessments","results","bind","executeAssessment","result","skippedAssessments","getSkippedAssessments","assessmentResult","score","getScore","priority","factor","setScore","setStatus","setTitle","title","getResult","roundedDensity","prefix","translate","content","good","bad","setIdentifier","assessmentError","setFactor","getValidResults","isValidResult","hasScore","hasText","calculateOverallScore","totalScore","reduce","total","Math","round","length","addAssessment","name","identifier","getAssessment","removeAssessment","push","toDelete","splice","getApplicableAssessments","availableAssessments","availableAssessment"],"sources":["../../../../src/scoring/assessors/assessor.js"],"sourcesContent":["// External dependencies.\nimport {filter, find, findIndex, isFunction, isUndefined, map} from 'lodash';\n\n// Internal dependencies.\nimport AssessmentResult from '../../values/AssessmentResult.js';\nimport {build} from '../../parse/build';\nimport LanguageProcessor from '../../parse/language/LanguageProcessor.js';\nimport MissingArgument from '../../errors/missingArgument.js';\nimport {showTrace} from '../../helpers/errors.js';\nimport {KEYPHRASE_DENSITY_ID, SCHEMA_ID, TEXT_LENGTH_ID} from '@axyseo/const/analysis';\n\n// The maximum score of individual assessment is 9. This is why we set the \"score rating\" here to 9.\nconst ScoreRating = 9;\n\n/**\n * The Assessor is a base class for all assessors.\n */\nclass Assessor {\n /**\n * Creates a new Assessor instance.\n * @param {Researcher}\tresearcher\tThe researcher to use.\n * @param {Object}\t\t[config]\tThe assessor config.\n */\n constructor(researcher, config) {\n this.type = 'assessor';\n this.setResearcher(researcher);\n this._assessments = [];\n }\n\n /**\n * Checks if the researcher is defined and sets it.\n *\n * @param {Researcher} researcher The researcher to use in the assessor.\n *\n * @throws {MissingArgument} Parameter needs to be a valid researcher object.\n * @returns {void}\n */\n setResearcher(researcher) {\n if (isUndefined(researcher)) {\n throw new MissingArgument('The assessor requires a researcher.');\n }\n this._researcher = researcher;\n }\n\n /**\n * Gets all available assessments.\n * @returns {Assessment[]} assessment\n */\n getAvailableAssessments() {\n return this._assessments;\n }\n\n /**\n * Checks whether the Assessment is applicable.\n *\n * @param {Assessment} assessment The Assessment object that needs to be checked.\n * @param {Paper} paper The Paper object to check against.\n * @param {Researcher} [researcher] The Researcher object containing additional information.\n * @returns {boolean} Whether or not the Assessment is applicable.\n */\n isApplicable(assessment, paper, researcher) {\n const ignoreAssessments = paper.getIgnoredAssessments();\n\n if (ignoreAssessments.includes(assessment._config.id)) {\n return false;\n }\n\n if (\n assessment.hasOwnProperty('isApplicable') ||\n typeof assessment.isApplicable === 'function'\n ) {\n return assessment.isApplicable(paper, researcher);\n }\n\n return true;\n }\n\n /**\n * Determines whether an assessment has a marker.\n *\n * @param {Assessment} assessment The assessment to check for.\n * @returns {boolean} Whether or not the assessment has a marker.\n */\n hasMarker(assessment) {\n return (\n isFunction(this._config.marker) &&\n (assessment.hasOwnProperty('getMarks') || typeof assessment.getMarks === 'function')\n );\n }\n\n /**\n * Returns the specific marker for this assessor.\n *\n * @returns {Function} The specific marker for this assessor.\n */\n getSpecificMarker() {\n return this._config.marker;\n }\n\n /**\n * Returns the paper that was most recently assessed.\n *\n * @returns {Paper} The paper that was most recently assessed.\n */\n getPaper() {\n return this._lastPaper;\n }\n\n /**\n * Runs the researches defined in the task list or the default researches.\n *\n * @param {Paper} paper The paper to run assessments on.\n * @param i18n\n * @returns {void}\n */\n assess(paper, i18n) {\n this._researcher.setPaper(paper);\n\n const languageProcessor = new LanguageProcessor(this._researcher);\n const shortcodes = paper._attributes && paper._attributes.shortcodes;\n paper.setTree(build(paper, languageProcessor, shortcodes));\n\n let assessments = this.getAvailableAssessments();\n\n this.results = [];\n\n assessments = filter(\n assessments,\n function(assessment) {\n return this.isApplicable(assessment, paper, this._researcher);\n }.bind(this)\n );\n\n this.results = map(assessments, assessment =>\n this.executeAssessment({\n paper,\n researcher: this._researcher,\n assessment,\n i18n\n })\n );\n this._lastPaper = paper;\n }\n\n /**\n * Executes an assessment and returns the AssessmentResult.\n *\n * @param {Paper} paper The paper to pass to the assessment.\n * @param {Researcher} researcher The researcher to pass to the assessment.\n * @param {Assessment} assessment The assessment to execute.\n * @param i18n\n * @returns {AssessmentResult} The result of the assessment.\n */\n executeAssessment({paper, researcher, assessment, i18n}) {\n let result;\n\n try {\n\n\n const skippedAssessments = paper.getSkippedAssessments();\n if (skippedAssessments.includes(assessment._config.id)) {\n const assessmentResult = new AssessmentResult({config: assessment._config});\n\n const score = assessment.getScore(\n assessment._config.priority,\n 'good',\n assessment._config.factor\n );\n\n assessmentResult.setScore(score);\n assessmentResult.setStatus('good');\n assessmentResult.setTitle(assessment._config.title);\n\n result = assessmentResult;\n } else {\n result = assessment.getResult({paper, researcher, i18n});\n }\n if (i18n) {\n const { id, type, roundedDensity } = assessment._config;\n const prefix = `Axyseo.${id}`;\n\n if (id === SCHEMA_ID) {\n assessment._config.title = `${i18n.translate(`${prefix}.${type}.title`)}`;\n } else if (id === KEYPHRASE_DENSITY_ID) {\n assessment._config.title = `${i18n.translate(`${prefix}.title`)} ${roundedDensity}%`;\n } else {\n assessment._config.title = i18n.translate(`${prefix}.title`);\n }\n\n if ((id === TEXT_LENGTH_ID || id === SCHEMA_ID) && type) {\n assessment._config.content = {\n good: i18n.translate(`${prefix}.${type}.good`),\n bad: i18n.translate(`${prefix}.${type}.bad`),\n };\n } else {\n assessment._config.content = {\n good: i18n.translate(`${prefix}.good`),\n bad: i18n.translate(`${prefix}.bad`),\n };\n }\n }\n result.setIdentifier(assessment._config.id);\n } catch (assessmentError) {\n showTrace(assessmentError);\n\n result = new AssessmentResult();\n\n result.setScore(-1);\n }\n\n if (assessment?._config?.factor) {\n result.setFactor(assessment._config.factor);\n }\n\n return result;\n }\n\n /**\n * Filters out all assessment results that have no score and no text.\n *\n * @returns {AssessmentResult[]} The array with all the valid assessments.\n */\n getValidResults() {\n return filter(\n this.results,\n function(result) {\n return this.isValidResult(result);\n }.bind(this)\n );\n }\n\n /**\n * Returns if an assessmentResult is valid.\n *\n * @param {AssessmentResult} assessmentResult The assessmentResult to validate.\n * @returns {boolean} whether or not the result is valid.\n */\n isValidResult(assessmentResult) {\n return assessmentResult.hasScore() && assessmentResult.hasText();\n }\n\n /**\n * Returns the overall score. Calculates the total score by adding all scores and dividing these\n * by the number of results times the ScoreRating.\n *\n * @returns {number} The overall score.\n */\n calculateOverallScore() {\n const results = this.getValidResults();\n\n const totalScore = results.reduce(\n (total, assessmentResult) => total + assessmentResult.getScore(),\n 0\n );\n\n return Math.round((totalScore / (results.length * ScoreRating)) * 100) || 0;\n }\n\n /**\n * Registers an assessment and adds it to the internal assessments object.\n *\n * @param {string} name The name of the assessment.\n * @param {Assessment} assessment The object containing function to run as an assessment and it's requirements.\n * @returns {boolean} Whether registering the assessment was successful.\n */\n addAssessment(name, assessment) {\n if (!assessment.hasOwnProperty('identifier')) {\n assessment.identifier = name;\n }\n // If the assessor already has the same assessment, remove it and replace it with the new assessment with the same identifier.\n if (this.getAssessment(assessment.identifier)) {\n this.removeAssessment(assessment.identifier);\n }\n\n this._assessments.push(assessment);\n return true;\n }\n\n /**\n * Removes a specific Assessment from the list of Assessments.\n *\n * @param {string} name The Assessment to remove from the list of assessments.\n * @returns {void}\n */\n removeAssessment(name) {\n const toDelete = findIndex(this._assessments, function(assessment) {\n return assessment.hasOwnProperty('identifier') && name === assessment.identifier;\n });\n\n if (-1 !== toDelete) {\n this._assessments.splice(toDelete, 1);\n }\n }\n\n /**\n * Returns an assessment by identifier\n *\n * @param {string} identifier The identifier of the assessment.\n * @returns {undefined|Assessment} The object if found, otherwise undefined.\n */\n getAssessment(identifier) {\n return find(this._assessments, function(assessment) {\n return assessment.hasOwnProperty('identifier') && identifier === assessment.identifier;\n });\n }\n\n /**\n * Checks which of the available assessments are applicable and returns an array with applicable assessments.\n *\n * @returns {Assessment[]} The array with applicable assessments.\n */\n getApplicableAssessments() {\n const availableAssessments = this.getAvailableAssessments();\n return filter(\n availableAssessments,\n function(availableAssessment) {\n return this.isApplicable(availableAssessment, this.getPaper(), this._researcher);\n }.bind(this)\n );\n }\n}\n\nexport default Assessor;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"assessor.js","names":["filter","find","findIndex","isFunction","isUndefined","map","AssessmentResult","build","LanguageProcessor","MissingArgument","showTrace","idPointsMap","KEYPHRASE_DENSITY_ID","SCHEMA_ID","TEXT_LENGTH_ID","ScoreRating","Assessor","constructor","researcher","config","type","setResearcher","_assessments","_researcher","getAvailableAssessments","isApplicable","assessment","paper","ignoreAssessments","getIgnoredAssessments","includes","_config","id","hasOwnProperty","hasMarker","marker","getMarks","getSpecificMarker","getPaper","_lastPaper","assess","i18n","setPaper","languageProcessor","shortcodes","_attributes","setTree","assessments","results","bind","executeAssessment","result","skippedAssessments","getSkippedAssessments","assessmentResult","score","setScore","setStatus","setTitle","title","getResult","roundedDensity","prefix","translate","content","good","bad","setIdentifier","assessmentError","factor","setFactor","getValidResults","isValidResult","hasScore","hasText","calculateOverallScore","totalScore","reduce","total","getScore","Math","round","length","addAssessment","name","identifier","getAssessment","removeAssessment","push","toDelete","splice","getApplicableAssessments","availableAssessments","availableAssessment"],"sources":["../../../../src/scoring/assessors/assessor.js"],"sourcesContent":["// External dependencies.\nimport {filter, find, findIndex, isFunction, isUndefined, map} from 'lodash';\n\n// Internal dependencies.\nimport AssessmentResult from '../../values/AssessmentResult.js';\nimport {build} from '../../parse/build';\nimport LanguageProcessor from '../../parse/language/LanguageProcessor.js';\nimport MissingArgument from '../../errors/missingArgument.js';\nimport {showTrace} from '../../helpers/errors.js';\nimport {idPointsMap, KEYPHRASE_DENSITY_ID, SCHEMA_ID, TEXT_LENGTH_ID} from '@axyseo/const/analysis';\n\n// The maximum score of individual assessment is 9. This is why we set the \"score rating\" here to 9.\nconst ScoreRating = 9;\n\n/**\n * The Assessor is a base class for all assessors.\n */\nclass Assessor {\n /**\n * Creates a new Assessor instance.\n * @param {Researcher}\tresearcher\tThe researcher to use.\n * @param {Object}\t\t[config]\tThe assessor config.\n */\n constructor(researcher, config) {\n this.type = 'assessor';\n this.setResearcher(researcher);\n this._assessments = [];\n }\n\n /**\n * Checks if the researcher is defined and sets it.\n *\n * @param {Researcher} researcher The researcher to use in the assessor.\n *\n * @throws {MissingArgument} Parameter needs to be a valid researcher object.\n * @returns {void}\n */\n setResearcher(researcher) {\n if (isUndefined(researcher)) {\n throw new MissingArgument('The assessor requires a researcher.');\n }\n this._researcher = researcher;\n }\n\n /**\n * Gets all available assessments.\n * @returns {Assessment[]} assessment\n */\n getAvailableAssessments() {\n return this._assessments;\n }\n\n /**\n * Checks whether the Assessment is applicable.\n *\n * @param {Assessment} assessment The Assessment object that needs to be checked.\n * @param {Paper} paper The Paper object to check against.\n * @param {Researcher} [researcher] The Researcher object containing additional information.\n * @returns {boolean} Whether or not the Assessment is applicable.\n */\n isApplicable(assessment, paper, researcher) {\n const ignoreAssessments = paper.getIgnoredAssessments();\n\n if (ignoreAssessments.includes(assessment._config.id)) {\n return false;\n }\n\n if (\n assessment.hasOwnProperty('isApplicable') ||\n typeof assessment.isApplicable === 'function'\n ) {\n return assessment.isApplicable(paper, researcher);\n }\n\n return true;\n }\n\n /**\n * Determines whether an assessment has a marker.\n *\n * @param {Assessment} assessment The assessment to check for.\n * @returns {boolean} Whether or not the assessment has a marker.\n */\n hasMarker(assessment) {\n return (\n isFunction(this._config.marker) &&\n (assessment.hasOwnProperty('getMarks') || typeof assessment.getMarks === 'function')\n );\n }\n\n /**\n * Returns the specific marker for this assessor.\n *\n * @returns {Function} The specific marker for this assessor.\n */\n getSpecificMarker() {\n return this._config.marker;\n }\n\n /**\n * Returns the paper that was most recently assessed.\n *\n * @returns {Paper} The paper that was most recently assessed.\n */\n getPaper() {\n return this._lastPaper;\n }\n\n /**\n * Runs the researches defined in the task list or the default researches.\n *\n * @param {Paper} paper The paper to run assessments on.\n * @param i18n\n * @returns {void}\n */\n assess(paper, i18n) {\n this._researcher.setPaper(paper);\n\n const languageProcessor = new LanguageProcessor(this._researcher);\n const shortcodes = paper._attributes && paper._attributes.shortcodes;\n paper.setTree(build(paper, languageProcessor, shortcodes));\n\n let assessments = this.getAvailableAssessments();\n\n this.results = [];\n\n assessments = filter(\n assessments,\n function(assessment) {\n return this.isApplicable(assessment, paper, this._researcher);\n }.bind(this)\n );\n\n this.results = map(assessments, assessment =>\n this.executeAssessment({\n paper,\n researcher: this._researcher,\n assessment,\n i18n\n })\n );\n this._lastPaper = paper;\n }\n\n /**\n * Executes an assessment and returns the AssessmentResult.\n *\n * @param {Paper} paper The paper to pass to the assessment.\n * @param {Researcher} researcher The researcher to pass to the assessment.\n * @param {Assessment} assessment The assessment to execute.\n * @param i18n\n * @returns {AssessmentResult} The result of the assessment.\n */\n executeAssessment({paper, researcher, assessment, i18n}) {\n let result;\n\n try {\n\n\n const skippedAssessments = paper.getSkippedAssessments();\n if (skippedAssessments.includes(assessment._config.id)) {\n const assessmentResult = new AssessmentResult({config: assessment._config});\n\n const score = idPointsMap[assessment._config.id]\n\n assessmentResult.setScore(score);\n assessmentResult.setStatus('good');\n assessmentResult.setTitle(assessment._config.title);\n\n result = assessmentResult;\n } else {\n result = assessment.getResult({paper, researcher, i18n});\n }\n if (i18n) {\n const { id, type, roundedDensity } = assessment._config;\n const prefix = `Axyseo.${id}`;\n\n if (id === SCHEMA_ID) {\n assessment._config.title = `${i18n.translate(`${prefix}.${type}.title`)}`;\n } else if (id === KEYPHRASE_DENSITY_ID) {\n assessment._config.title = `${i18n.translate(`${prefix}.title`)} ${roundedDensity}%`;\n } else {\n assessment._config.title = i18n.translate(`${prefix}.title`);\n }\n\n if ((id === TEXT_LENGTH_ID || id === SCHEMA_ID) && type) {\n assessment._config.content = {\n good: i18n.translate(`${prefix}.${type}.good`),\n bad: i18n.translate(`${prefix}.${type}.bad`),\n };\n } else {\n assessment._config.content = {\n good: i18n.translate(`${prefix}.good`),\n bad: i18n.translate(`${prefix}.bad`),\n };\n }\n }\n result.setIdentifier(assessment._config.id);\n } catch (assessmentError) {\n showTrace(assessmentError);\n\n result = new AssessmentResult();\n\n result.setScore(-1);\n }\n\n if (assessment?._config?.factor) {\n result.setFactor(assessment._config.factor);\n }\n\n return result;\n }\n\n /**\n * Filters out all assessment results that have no score and no text.\n *\n * @returns {AssessmentResult[]} The array with all the valid assessments.\n */\n getValidResults() {\n return filter(\n this.results,\n function(result) {\n return this.isValidResult(result);\n }.bind(this)\n );\n }\n\n /**\n * Returns if an assessmentResult is valid.\n *\n * @param {AssessmentResult} assessmentResult The assessmentResult to validate.\n * @returns {boolean} whether or not the result is valid.\n */\n isValidResult(assessmentResult) {\n return assessmentResult.hasScore() && assessmentResult.hasText();\n }\n\n /**\n * Returns the overall score. Calculates the total score by adding all scores and dividing these\n * by the number of results times the ScoreRating.\n *\n * @returns {number} The overall score.\n */\n calculateOverallScore() {\n const results = this.getValidResults();\n\n const totalScore = results.reduce(\n (total, assessmentResult) => total + assessmentResult.getScore(),\n 0\n );\n\n return Math.round((totalScore / (results.length * ScoreRating)) * 100) || 0;\n }\n\n /**\n * Registers an assessment and adds it to the internal assessments object.\n *\n * @param {string} name The name of the assessment.\n * @param {Assessment} assessment The object containing function to run as an assessment and it's requirements.\n * @returns {boolean} Whether registering the assessment was successful.\n */\n addAssessment(name, assessment) {\n if (!assessment.hasOwnProperty('identifier')) {\n assessment.identifier = name;\n }\n // If the assessor already has the same assessment, remove it and replace it with the new assessment with the same identifier.\n if (this.getAssessment(assessment.identifier)) {\n this.removeAssessment(assessment.identifier);\n }\n\n this._assessments.push(assessment);\n return true;\n }\n\n /**\n * Removes a specific Assessment from the list of Assessments.\n *\n * @param {string} name The Assessment to remove from the list of assessments.\n * @returns {void}\n */\n removeAssessment(name) {\n const toDelete = findIndex(this._assessments, function(assessment) {\n return assessment.hasOwnProperty('identifier') && name === assessment.identifier;\n });\n\n if (-1 !== toDelete) {\n this._assessments.splice(toDelete, 1);\n }\n }\n\n /**\n * Returns an assessment by identifier\n *\n * @param {string} identifier The identifier of the assessment.\n * @returns {undefined|Assessment} The object if found, otherwise undefined.\n */\n getAssessment(identifier) {\n return find(this._assessments, function(assessment) {\n return assessment.hasOwnProperty('identifier') && identifier === assessment.identifier;\n });\n }\n\n /**\n * Checks which of the available assessments are applicable and returns an array with applicable assessments.\n *\n * @returns {Assessment[]} The array with applicable assessments.\n */\n getApplicableAssessments() {\n const availableAssessments = this.getAvailableAssessments();\n return filter(\n availableAssessments,\n function(availableAssessment) {\n return this.isApplicable(availableAssessment, this.getPaper(), this._researcher);\n }.bind(this)\n );\n }\n}\n\nexport default Assessor;\n"],"mappings":"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","ignoreList":[]}
@@ -47,7 +47,6 @@ export default class AvadaAssessor {
47
47
  this.seoAssessor.assess(paper, i18n);
48
48
  this.contentAssessor.assess(paper, i18n);
49
49
  let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];
50
- console.log('assessments', assessments);
51
50
  assessments = assessments.map(assessment => ({
52
51
  ...assessment.config,
53
52
  status: assessment.status,
@@ -1 +1 @@
1
- {"version":3,"file":"avadaAssessor.js","names":["ContentAssessor","SEOAssessor","groupAssessmentsByCategory","groupAssessmentsByStatus","AvadaAssessor","constructor","researcher","config","seoAssessor","contentAssessor","assess","paper","i18n","assessments","results","console","log","map","assessment","status","score","data","title","assessBackEnd","getResult","groupBy","getScore","point","forEach","Math","round"],"sources":["../../../../src/scoring/assessors/avadaAssessor.js"],"sourcesContent":["import {ContentAssessor, SEOAssessor} from '@axyseo/scoring/assessors/index';\nimport {groupAssessmentsByCategory, groupAssessmentsByStatus} from '../helpers';\n\n/**\n * The AvadaAssessor class is used for the general SEO analysis.\n */\nexport default class AvadaAssessor {\n /**\n * Creates a new AvadaAssessor instance.\n * @param {Researcher} researcher The researcher to use.\n * @param {Object} [config] The assessor config.\n * @param {Object} [config.textParagraphTooLong]\n * @param {Object} [config.textSentenceLength]\n * @param {Object} [config.textTransitionWords]\n * @param {Object} [config.sentenceBeginnings]\n * @param {Object} [config.relatedKeywords]\n * @param {Object} [config.titleKeyword]\n * @param {Object} [config.textImages]\n * @param {Object} [config.numberTitle]\n * @param {Object} [config.introductionKeyword]\n * @param {Object} [config.keyphraseLength]\n * @param {Object} [config.metaDescriptionKeyword]\n * @param {Object} [config.metaDescriptionLength]\n * @param {Object} [config.subheadingsKeyword]\n * @param {Object} [config.externalLinks]\n * @param {Object} [config.keyphraseDensity]\n * @param {Object} [config.media]\n * @param {Object} [config.urlLength]\n * @param {Object} [config.textLength]\n * @param {Object} [config.singleTitle]\n * @param {Object} [config.keyphrase]\n * @param {Object} [config.internalLinks]\n * @param {Object} [config.titleWidth]\n * @param {Object} [config.slugKeyword]\n * @param {Object} [config.singleH1]\n * @param {Object} [config.schema]\n */\n constructor(researcher, config = {}) {\n const seoAssessor = new SEOAssessor(researcher, config);\n const contentAssessor = new ContentAssessor(researcher, config);\n this.seoAssessor = seoAssessor;\n this.contentAssessor = contentAssessor;\n this.researcher = researcher;\n this.config = config;\n }\n\n assess(paper, i18n) {\n this.seoAssessor.assess(paper, i18n);\n this.contentAssessor.assess(paper, i18n);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n console.log('assessments', assessments);\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n assessBackEnd(paper) {\n this.seoAssessor.assess(paper);\n this.contentAssessor.assess(paper);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n getResult(groupBy = 'category', getScore = true) {\n let assessments = [];\n switch (groupBy) {\n case 'category':\n assessments = groupAssessmentsByCategory(this.assessments);\n break;\n case 'status':\n assessments = groupAssessmentsByStatus(this.assessments);\n break;\n }\n\n return {\n assessments,\n ...(getScore ? {score: this.getScore()} : {})\n };\n }\n\n getScore() {\n let point = 0;\n this.assessments.forEach(assessment => {\n point += assessment.score || 0;\n });\n return Math.round((point));\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"avadaAssessor.js","names":["ContentAssessor","SEOAssessor","groupAssessmentsByCategory","groupAssessmentsByStatus","AvadaAssessor","constructor","researcher","config","seoAssessor","contentAssessor","assess","paper","i18n","assessments","results","map","assessment","status","score","data","title","assessBackEnd","getResult","groupBy","getScore","point","forEach","Math","round"],"sources":["../../../../src/scoring/assessors/avadaAssessor.js"],"sourcesContent":["import {ContentAssessor, SEOAssessor} from '@axyseo/scoring/assessors/index';\nimport {groupAssessmentsByCategory, groupAssessmentsByStatus} from '../helpers';\n\n/**\n * The AvadaAssessor class is used for the general SEO analysis.\n */\nexport default class AvadaAssessor {\n /**\n * Creates a new AvadaAssessor instance.\n * @param {Researcher} researcher The researcher to use.\n * @param {Object} [config] The assessor config.\n * @param {Object} [config.textParagraphTooLong]\n * @param {Object} [config.textSentenceLength]\n * @param {Object} [config.textTransitionWords]\n * @param {Object} [config.sentenceBeginnings]\n * @param {Object} [config.relatedKeywords]\n * @param {Object} [config.titleKeyword]\n * @param {Object} [config.textImages]\n * @param {Object} [config.numberTitle]\n * @param {Object} [config.introductionKeyword]\n * @param {Object} [config.keyphraseLength]\n * @param {Object} [config.metaDescriptionKeyword]\n * @param {Object} [config.metaDescriptionLength]\n * @param {Object} [config.subheadingsKeyword]\n * @param {Object} [config.externalLinks]\n * @param {Object} [config.keyphraseDensity]\n * @param {Object} [config.media]\n * @param {Object} [config.urlLength]\n * @param {Object} [config.textLength]\n * @param {Object} [config.singleTitle]\n * @param {Object} [config.keyphrase]\n * @param {Object} [config.internalLinks]\n * @param {Object} [config.titleWidth]\n * @param {Object} [config.slugKeyword]\n * @param {Object} [config.singleH1]\n * @param {Object} [config.schema]\n */\n constructor(researcher, config = {}) {\n const seoAssessor = new SEOAssessor(researcher, config);\n const contentAssessor = new ContentAssessor(researcher, config);\n this.seoAssessor = seoAssessor;\n this.contentAssessor = contentAssessor;\n this.researcher = researcher;\n this.config = config;\n }\n\n assess(paper, i18n) {\n this.seoAssessor.assess(paper, i18n);\n this.contentAssessor.assess(paper, i18n);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n assessBackEnd(paper) {\n this.seoAssessor.assess(paper);\n this.contentAssessor.assess(paper);\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n status: assessment.status,\n score: assessment.score,\n data: assessment.data,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n getResult(groupBy = 'category', getScore = true) {\n let assessments = [];\n switch (groupBy) {\n case 'category':\n assessments = groupAssessmentsByCategory(this.assessments);\n break;\n case 'status':\n assessments = groupAssessmentsByStatus(this.assessments);\n break;\n }\n\n return {\n assessments,\n ...(getScore ? {score: this.getScore()} : {})\n };\n }\n\n getScore() {\n let point = 0;\n this.assessments.forEach(assessment => {\n point += assessment.score || 0;\n });\n return Math.round((point));\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axyseo",
3
- "version": "2.1.36",
3
+ "version": "2.1.38",
4
4
  "main": "build/cjs/index.js",
5
5
  "module": "build/esm/index.js",
6
6
  "exports": {