axyseo 2.1.29 → 2.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/build/cjs/scoring/assessments/readability/SentenceBeginningsAssessment.js +0 -2
  2. package/build/cjs/scoring/assessments/readability/SentenceBeginningsAssessment.js.map +1 -1
  3. package/build/cjs/scoring/assessments/readability/SentenceLengthInTextAssessment.js +1 -10
  4. package/build/cjs/scoring/assessments/readability/SentenceLengthInTextAssessment.js.map +1 -1
  5. package/build/cjs/scoring/assessments/seo/FAQsStructureDataAssessment.js +1 -1
  6. package/build/cjs/scoring/assessments/seo/FAQsStructureDataAssessment.js.map +1 -1
  7. package/build/cjs/scoring/assessments/seo/InternalLinksAssessment.js +0 -2
  8. package/build/cjs/scoring/assessments/seo/InternalLinksAssessment.js.map +1 -1
  9. package/build/cjs/scoring/assessments/seo/IntroductionKeywordAssessment.js +0 -2
  10. package/build/cjs/scoring/assessments/seo/IntroductionKeywordAssessment.js.map +1 -1
  11. package/build/cjs/scoring/assessments/seo/KeyphraseLengthAssessment.js +0 -2
  12. package/build/cjs/scoring/assessments/seo/KeyphraseLengthAssessment.js.map +1 -1
  13. package/build/cjs/scoring/assessments/seo/MetaDescriptionKeywordAssessment.js +0 -3
  14. package/build/cjs/scoring/assessments/seo/MetaDescriptionKeywordAssessment.js.map +1 -1
  15. package/build/cjs/scoring/assessments/seo/OutboundLinksAssessment.js +0 -2
  16. package/build/cjs/scoring/assessments/seo/OutboundLinksAssessment.js.map +1 -1
  17. package/build/cjs/scoring/assessments/seo/TextImagesAssessment.js +0 -3
  18. package/build/cjs/scoring/assessments/seo/TextImagesAssessment.js.map +1 -1
  19. package/build/cjs/scoring/assessments/seo/TextLengthAssessment.js +2 -1
  20. package/build/cjs/scoring/assessments/seo/TextLengthAssessment.js.map +1 -1
  21. package/build/cjs/scoring/assessors/assessor.js +16 -7
  22. package/build/cjs/scoring/assessors/assessor.js.map +1 -1
  23. package/build/esm/scoring/assessments/readability/SentenceBeginningsAssessment.js +0 -2
  24. package/build/esm/scoring/assessments/readability/SentenceBeginningsAssessment.js.map +1 -1
  25. package/build/esm/scoring/assessments/readability/SentenceLengthInTextAssessment.js +1 -10
  26. package/build/esm/scoring/assessments/readability/SentenceLengthInTextAssessment.js.map +1 -1
  27. package/build/esm/scoring/assessments/seo/FAQsStructureDataAssessment.js +1 -1
  28. package/build/esm/scoring/assessments/seo/FAQsStructureDataAssessment.js.map +1 -1
  29. package/build/esm/scoring/assessments/seo/InternalLinksAssessment.js +0 -2
  30. package/build/esm/scoring/assessments/seo/InternalLinksAssessment.js.map +1 -1
  31. package/build/esm/scoring/assessments/seo/IntroductionKeywordAssessment.js +0 -2
  32. package/build/esm/scoring/assessments/seo/IntroductionKeywordAssessment.js.map +1 -1
  33. package/build/esm/scoring/assessments/seo/KeyphraseLengthAssessment.js +0 -2
  34. package/build/esm/scoring/assessments/seo/KeyphraseLengthAssessment.js.map +1 -1
  35. package/build/esm/scoring/assessments/seo/MetaDescriptionKeywordAssessment.js +1 -4
  36. package/build/esm/scoring/assessments/seo/MetaDescriptionKeywordAssessment.js.map +1 -1
  37. package/build/esm/scoring/assessments/seo/OutboundLinksAssessment.js +0 -2
  38. package/build/esm/scoring/assessments/seo/OutboundLinksAssessment.js.map +1 -1
  39. package/build/esm/scoring/assessments/seo/TextImagesAssessment.js +0 -3
  40. package/build/esm/scoring/assessments/seo/TextImagesAssessment.js.map +1 -1
  41. package/build/esm/scoring/assessments/seo/TextLengthAssessment.js +2 -1
  42. package/build/esm/scoring/assessments/seo/TextLengthAssessment.js.map +1 -1
  43. package/build/esm/scoring/assessors/assessor.js +16 -7
  44. package/build/esm/scoring/assessors/assessor.js.map +1 -1
  45. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TextLengthAssessment.js","names":["merge","Assessment","AssessmentResult","wordCountInText","MAIN_CONTENT_POINTS","TEXT_LENGTH_ID","TextLengthAssessment","constructor","config","defaultConfig","id","ctaType","docUrl","priority","fixPosition","title","content","good","bad","identifier","_config","getResult","paper","researcher","calculatedResult","calculateResult","assessmentResult","setScore","score","setStatus","status","pageType","getPageType","count","wordCount","rules","product","min","max","badMessage","collection","article","page","rule","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/TextLengthAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport wordCountInText from '@axyseo/languageProcessing/researches/wordCountInText';\nimport {MAIN_CONTENT_POINTS, TEXT_LENGTH_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents an assessment that checks the length of the text and gives feedback accordingly.\n */\n class TextLengthAssessment 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: TEXT_LENGTH_ID,\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#text-length',\n priority: 'high',\n fixPosition: 'description',\n title: 'Content length ',\n content: {\n good: 'Content length on target',\n bad:\n 'Write 300 to 500 words. Cover features, specs, sizing, use, and care. '\n }\n };\n\n this.identifier = TEXT_LENGTH_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n const calculatedResult = this.calculateResult(paper);\n const assessmentResult = new AssessmentResult({config: this._config});\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const pageType = paper.getPageType();\n const { count: wordCount } = wordCountInText(paper);\n\n const rules = {\n product: {\n min: 300,\n max: 500,\n badMessage:\n 'Write 300 to 500 words. Cover features, specs, sizing, use, and care.'\n },\n collection: {\n min: 150,\n max: 300,\n badMessage:\n 'Write 150 to 300 words. Present the range and give quick buying guidance.'\n },\n article: {\n min: 600,\n max: 1000,\n badMessage:\n 'Write 600 to 1000 words. Explain the topic with clear sections and examples.'\n },\n page: {\n min: 600,\n max: 1000,\n badMessage:\n 'Write 600 to 1000 words. Provide clear, well-structured info for the page’s purpose.'\n }\n };\n\n let status = 'good';\n const rule = rules[pageType];\n\n if (rule && (wordCount < rule.min || wordCount > rule.max)) {\n status = 'bad';\n this._config = merge(this._config, {\n content: {\n good: 'Content length on target',\n bad: rule.badMessage\n }\n });\n }\n\n return {\n score: this.getScore(MAIN_CONTENT_POINTS, status),\n status\n };\n }\n\n /**\n * Checks whether the paper has a keyword and a slug.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} True if the paper contains a keyword and a slug, and if the keywordCountInSlug research is available on the researcher.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n}\n\nexport default TextLengthAssessment;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"TextLengthAssessment.js","names":["merge","Assessment","AssessmentResult","wordCountInText","MAIN_CONTENT_POINTS","TEXT_LENGTH_ID","TextLengthAssessment","constructor","config","defaultConfig","id","ctaType","docUrl","priority","fixPosition","title","content","good","bad","identifier","_config","getResult","paper","researcher","calculatedResult","calculateResult","assessmentResult","setScore","score","setStatus","status","pageType","getPageType","count","wordCount","rules","product","min","max","badMessage","collection","article","page","rule","type","getScore","isApplicable"],"sources":["../../../../../src/scoring/assessments/seo/TextLengthAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport wordCountInText from '@axyseo/languageProcessing/researches/wordCountInText';\nimport {MAIN_CONTENT_POINTS, TEXT_LENGTH_ID} from '@axyseo/const/analysis';\n\n/**\n * Represents an assessment that checks the length of the text and gives feedback accordingly.\n */\n class TextLengthAssessment 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: TEXT_LENGTH_ID,\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#text-length',\n priority: 'high',\n fixPosition: 'description',\n title: 'Content length ',\n content: {\n good: 'Content length on target',\n bad:\n 'Write 300 to 500 words. Cover features, specs, sizing, use, and care. '\n }\n };\n\n this.identifier = TEXT_LENGTH_ID;\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher}) {\n const calculatedResult = this.calculateResult(paper);\n const assessmentResult = new AssessmentResult({config: this._config});\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n\n return assessmentResult;\n }\n\n /**\n *\n * @param paper\n * @returns {{score: number, status: string}}\n */\n calculateResult(paper) {\n const pageType = paper.getPageType();\n const { count: wordCount } = wordCountInText(paper);\n\n const rules = {\n product: {\n min: 300,\n max: 500,\n badMessage:\n 'Write 300 to 500 words. Cover features, specs, sizing, use, and care.',\n },\n collection: {\n min: 150,\n max: 300,\n badMessage:\n 'Write 150 to 300 words. Present the range and give quick buying guidance.'\n },\n article: {\n min: 600,\n max: 1000,\n badMessage:\n 'Write 600 to 1000 words. Explain the topic with clear sections and examples.'\n },\n page: {\n min: 600,\n max: 1000,\n badMessage:\n 'Write 600 to 1000 words. Provide clear, well-structured info for the page’s purpose.'\n }\n };\n\n let status = 'good';\n const rule = rules[pageType];\n\n if (rule && (wordCount < rule.min || wordCount > rule.max)) {\n status = 'bad';\n this._config = merge(this._config, {\n content: {\n good: 'Content length on target',\n bad: rule.badMessage\n },\n type: pageType\n });\n }\n\n return {\n score: this.getScore(MAIN_CONTENT_POINTS, status),\n status\n };\n }\n\n /**\n * Checks whether the paper has a keyword and a slug.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} True if the paper contains a keyword and a slug, and if the keywordCountInSlug research is available on the researcher.\n */\n isApplicable(paper, researcher) {\n return true;\n }\n}\n\nexport default TextLengthAssessment;\n"],"mappings":"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","ignoreList":[]}
@@ -7,6 +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 { TEXT_LENGTH_ID } from "../../const/analysis";
10
11
 
11
12
  // The maximum score of individual assessment is 9. This is why we set the "score rating" here to 9.
12
13
  const ScoreRating = 9;
@@ -139,13 +140,6 @@ class Assessor {
139
140
  }) {
140
141
  let result;
141
142
  try {
142
- if (i18n) {
143
- assessment._config.title = i18n.translate(`Axyseo.${assessment._config.id}.title`);
144
- assessment._config.content = {
145
- good: i18n.translate(`Axyseo.${assessment._config.id}.good`),
146
- bad: i18n.translate(`Axyseo.${assessment._config.id}.bad`)
147
- };
148
- }
149
143
  const skippedAssessments = paper.getSkippedAssessments();
150
144
  if (skippedAssessments.includes(assessment._config.id)) {
151
145
  const assessmentResult = new AssessmentResult({
@@ -163,6 +157,21 @@ class Assessor {
163
157
  i18n
164
158
  });
165
159
  }
160
+ if (i18n) {
161
+ assessment._config.title = i18n.translate(`Axyseo.${assessment._config.id}.title`);
162
+ if (assessment._config.id === TEXT_LENGTH_ID && assessment._config.type) {
163
+ assessment._config.content = {
164
+ good: i18n.translate(`Axyseo.${assessment._config.id}.${assessment._config.type}.good`),
165
+ bad: i18n.translate(`Axyseo.${assessment._config.id}.${assessment._config.type}.bad`)
166
+ };
167
+ } else {
168
+ assessment._config.content = {
169
+ good: i18n.translate(`Axyseo.${assessment._config.id}.good`),
170
+ bad: i18n.translate(`Axyseo.${assessment._config.id}.bad`)
171
+ };
172
+ }
173
+ ;
174
+ }
166
175
  result.setIdentifier(assessment._config.id);
167
176
  } catch (assessmentError) {
168
177
  showTrace(assessmentError);
@@ -1 +1 @@
1
- {"version":3,"file":"assessor.js","names":["filter","find","findIndex","isFunction","isUndefined","map","AssessmentResult","build","LanguageProcessor","MissingArgument","showTrace","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","title","translate","content","good","bad","skippedAssessments","getSkippedAssessments","assessmentResult","score","getScore","priority","factor","setScore","setStatus","setTitle","getResult","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';\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 if (i18n) {\n assessment._config.title = i18n.translate(`Axyseo.${assessment._config.id}.title`);\n assessment._config.content = {\n good: i18n.translate(`Axyseo.${assessment._config.id}.good`),\n bad: i18n.translate(`Axyseo.${assessment._config.id}.bad`)\n };\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 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","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","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 {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 assessment._config.title = i18n.translate(`Axyseo.${assessment._config.id}.title`);\n if(assessment._config.id === TEXT_LENGTH_ID && assessment._config.type) {\n assessment._config.content = {\n good: i18n.translate(`Axyseo.${assessment._config.id}.${assessment._config.type}.good`),\n bad: i18n.translate(`Axyseo.${assessment._config.id}.${assessment._config.type}.bad`)\n }\n } else {\n assessment._config.content = {\n good: i18n.translate(`Axyseo.${assessment._config.id}.good`),\n bad: i18n.translate(`Axyseo.${assessment._config.id}.bad`)\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":"AAAA;AACA,SAAQA,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAEC,UAAU,EAAEC,WAAW,EAAEC,GAAG,QAAO,QAAQ;;AAE5E;AACA,OAAOC,gBAAgB;AACvB,SAAQC,KAAK;AACb,OAAOC,iBAAiB;AACxB,OAAOC,eAAe;AACtB,SAAQC,SAAS;AACjB,SAAQC,cAAc;;AAEtB;AACA,MAAMC,WAAW,GAAG,CAAC;;AAErB;AACA;AACA;AACA,MAAMC,QAAQ,CAAC;EACb;AACF;AACA;AACA;AACA;EACEC,WAAWA,CAACC,UAAU,EAAEC,MAAM,EAAE;IAC9B,IAAI,CAACC,IAAI,GAAG,UAAU;IACtB,IAAI,CAACC,aAAa,CAACH,UAAU,CAAC;IAC9B,IAAI,CAACI,YAAY,GAAG,EAAE;EACxB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACED,aAAaA,CAACH,UAAU,EAAE;IACxB,IAAIX,WAAW,CAACW,UAAU,CAAC,EAAE;MAC3B,MAAM,IAAIN,eAAe,CAAC,qCAAqC,CAAC;IAClE;IACA,IAAI,CAACW,WAAW,GAAGL,UAAU;EAC/B;;EAEA;AACF;AACA;AACA;EACEM,uBAAuBA,CAAA,EAAG;IACxB,OAAO,IAAI,CAACF,YAAY;EAC1B;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,YAAYA,CAACC,UAAU,EAAEC,KAAK,EAAET,UAAU,EAAE;IAC1C,MAAMU,iBAAiB,GAAGD,KAAK,CAACE,qBAAqB,CAAC,CAAC;IAEvD,IAAID,iBAAiB,CAACE,QAAQ,CAACJ,UAAU,CAACK,OAAO,CAACC,EAAE,CAAC,EAAE;MACrD,OAAO,KAAK;IACd;IAEA,IACEN,UAAU,CAACO,cAAc,CAAC,cAAc,CAAC,IACzC,OAAOP,UAAU,CAACD,YAAY,KAAK,UAAU,EAC7C;MACA,OAAOC,UAAU,CAACD,YAAY,CAACE,KAAK,EAAET,UAAU,CAAC;IACnD;IAEA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEgB,SAASA,CAACR,UAAU,EAAE;IACpB,OACEpB,UAAU,CAAC,IAAI,CAACyB,OAAO,CAACI,MAAM,CAAC,KAC9BT,UAAU,CAACO,cAAc,CAAC,UAAU,CAAC,IAAI,OAAOP,UAAU,CAACU,QAAQ,KAAK,UAAU,CAAC;EAExF;;EAEA;AACF;AACA;AACA;AACA;EACEC,iBAAiBA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACN,OAAO,CAACI,MAAM;EAC5B;;EAEA;AACF;AACA;AACA;AACA;EACEG,QAAQA,CAAA,EAAG;IACT,OAAO,IAAI,CAACC,UAAU;EACxB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,MAAMA,CAACb,KAAK,EAAEc,IAAI,EAAE;IAClB,IAAI,CAAClB,WAAW,CAACmB,QAAQ,CAACf,KAAK,CAAC;IAEhC,MAAMgB,iBAAiB,GAAG,IAAIhC,iBAAiB,CAAC,IAAI,CAACY,WAAW,CAAC;IACjE,MAAMqB,UAAU,GAAGjB,KAAK,CAACkB,WAAW,IAAIlB,KAAK,CAACkB,WAAW,CAACD,UAAU;IACpEjB,KAAK,CAACmB,OAAO,CAACpC,KAAK,CAACiB,KAAK,EAAEgB,iBAAiB,EAAEC,UAAU,CAAC,CAAC;IAE1D,IAAIG,WAAW,GAAG,IAAI,CAACvB,uBAAuB,CAAC,CAAC;IAEhD,IAAI,CAACwB,OAAO,GAAG,EAAE;IAEjBD,WAAW,GAAG5C,MAAM,CAClB4C,WAAW,EACX,UAASrB,UAAU,EAAE;MACnB,OAAO,IAAI,CAACD,YAAY,CAACC,UAAU,EAAEC,KAAK,EAAE,IAAI,CAACJ,WAAW,CAAC;IAC/D,CAAC,CAAC0B,IAAI,CAAC,IAAI,CACb,CAAC;IAED,IAAI,CAACD,OAAO,GAAGxC,GAAG,CAACuC,WAAW,EAAErB,UAAU,IACxC,IAAI,CAACwB,iBAAiB,CAAC;MACrBvB,KAAK;MACLT,UAAU,EAAE,IAAI,CAACK,WAAW;MAC5BG,UAAU;MACVe;IACF,CAAC,CACH,CAAC;IACD,IAAI,CAACF,UAAU,GAAGZ,KAAK;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEuB,iBAAiBA,CAAC;IAACvB,KAAK;IAAET,UAAU;IAAEQ,UAAU;IAAEe;EAAI,CAAC,EAAE;IACvD,IAAIU,MAAM;IAEV,IAAI;MAGF,MAAMC,kBAAkB,GAAGzB,KAAK,CAAC0B,qBAAqB,CAAC,CAAC;MACxD,IAAID,kBAAkB,CAACtB,QAAQ,CAACJ,UAAU,CAACK,OAAO,CAACC,EAAE,CAAC,EAAE;QACtD,MAAMsB,gBAAgB,GAAG,IAAI7C,gBAAgB,CAAC;UAACU,MAAM,EAAEO,UAAU,CAACK;QAAO,CAAC,CAAC;QAE3E,MAAMwB,KAAK,GAAG7B,UAAU,CAAC8B,QAAQ,CAC/B9B,UAAU,CAACK,OAAO,CAAC0B,QAAQ,EAC3B,MAAM,EACN/B,UAAU,CAACK,OAAO,CAAC2B,MACrB,CAAC;QAEDJ,gBAAgB,CAACK,QAAQ,CAACJ,KAAK,CAAC;QAChCD,gBAAgB,CAACM,SAAS,CAAC,MAAM,CAAC;QAClCN,gBAAgB,CAACO,QAAQ,CAACnC,UAAU,CAACK,OAAO,CAAC+B,KAAK,CAAC;QAEnDX,MAAM,GAAGG,gBAAgB;MAC3B,CAAC,MAAM;QACLH,MAAM,GAAGzB,UAAU,CAACqC,SAAS,CAAC;UAACpC,KAAK;UAAET,UAAU;UAAEuB;QAAI,CAAC,CAAC;MAC1D;MACA,IAAIA,IAAI,EAAE;QACRf,UAAU,CAACK,OAAO,CAAC+B,KAAK,GAAGrB,IAAI,CAACuB,SAAS,CAAC,UAAUtC,UAAU,CAACK,OAAO,CAACC,EAAE,QAAQ,CAAC;QAClF,IAAGN,UAAU,CAACK,OAAO,CAACC,EAAE,KAAKlB,cAAc,IAAIY,UAAU,CAACK,OAAO,CAACX,IAAI,EAAE;UACpEM,UAAU,CAACK,OAAO,CAACkC,OAAO,GAAG;YAC3BC,IAAI,EAAEzB,IAAI,CAACuB,SAAS,CAAC,UAAUtC,UAAU,CAACK,OAAO,CAACC,EAAE,IAAIN,UAAU,CAACK,OAAO,CAACX,IAAI,OAAO,CAAC;YACvF+C,GAAG,EAAE1B,IAAI,CAACuB,SAAS,CAAC,UAAUtC,UAAU,CAACK,OAAO,CAACC,EAAE,IAAIN,UAAU,CAACK,OAAO,CAACX,IAAI,MAAM;UAC1F,CAAC;QACD,CAAC,MAAM;UACPM,UAAU,CAACK,OAAO,CAACkC,OAAO,GAAG;YAC3BC,IAAI,EAAEzB,IAAI,CAACuB,SAAS,CAAC,UAAUtC,UAAU,CAACK,OAAO,CAACC,EAAE,OAAO,CAAC;YAC5DmC,GAAG,EAAE1B,IAAI,CAACuB,SAAS,CAAC,UAAUtC,UAAU,CAACK,OAAO,CAACC,EAAE,MAAM;UAC3D,CAAC;QAAA;QAAC;MACJ;MACAmB,MAAM,CAACiB,aAAa,CAAC1C,UAAU,CAACK,OAAO,CAACC,EAAE,CAAC;IAC7C,CAAC,CAAC,OAAOqC,eAAe,EAAE;MACxBxD,SAAS,CAACwD,eAAe,CAAC;MAE1BlB,MAAM,GAAG,IAAI1C,gBAAgB,CAAC,CAAC;MAE/B0C,MAAM,CAACQ,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB;IAEA,IAAIjC,UAAU,EAAEK,OAAO,EAAE2B,MAAM,EAAE;MAC/BP,MAAM,CAACmB,SAAS,CAAC5C,UAAU,CAACK,OAAO,CAAC2B,MAAM,CAAC;IAC7C;IAEA,OAAOP,MAAM;EACf;;EAEA;AACF;AACA;AACA;AACA;EACEoB,eAAeA,CAAA,EAAG;IAChB,OAAOpE,MAAM,CACX,IAAI,CAAC6C,OAAO,EACZ,UAASG,MAAM,EAAE;MACf,OAAO,IAAI,CAACqB,aAAa,CAACrB,MAAM,CAAC;IACnC,CAAC,CAACF,IAAI,CAAC,IAAI,CACb,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEuB,aAAaA,CAAClB,gBAAgB,EAAE;IAC9B,OAAOA,gBAAgB,CAACmB,QAAQ,CAAC,CAAC,IAAInB,gBAAgB,CAACoB,OAAO,CAAC,CAAC;EAClE;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEC,qBAAqBA,CAAA,EAAG;IACtB,MAAM3B,OAAO,GAAG,IAAI,CAACuB,eAAe,CAAC,CAAC;IAEtC,MAAMK,UAAU,GAAG5B,OAAO,CAAC6B,MAAM,CAC/B,CAACC,KAAK,EAAExB,gBAAgB,KAAKwB,KAAK,GAAGxB,gBAAgB,CAACE,QAAQ,CAAC,CAAC,EAChE,CACF,CAAC;IAED,OAAOuB,IAAI,CAACC,KAAK,CAAEJ,UAAU,IAAI5B,OAAO,CAACiC,MAAM,GAAGlE,WAAW,CAAC,GAAI,GAAG,CAAC,IAAI,CAAC;EAC7E;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEmE,aAAaA,CAACC,IAAI,EAAEzD,UAAU,EAAE;IAC9B,IAAI,CAACA,UAAU,CAACO,cAAc,CAAC,YAAY,CAAC,EAAE;MAC5CP,UAAU,CAAC0D,UAAU,GAAGD,IAAI;IAC9B;IACA;IACA,IAAI,IAAI,CAACE,aAAa,CAAC3D,UAAU,CAAC0D,UAAU,CAAC,EAAE;MAC7C,IAAI,CAACE,gBAAgB,CAAC5D,UAAU,CAAC0D,UAAU,CAAC;IAC9C;IAEA,IAAI,CAAC9D,YAAY,CAACiE,IAAI,CAAC7D,UAAU,CAAC;IAClC,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE4D,gBAAgBA,CAACH,IAAI,EAAE;IACrB,MAAMK,QAAQ,GAAGnF,SAAS,CAAC,IAAI,CAACiB,YAAY,EAAE,UAASI,UAAU,EAAE;MACjE,OAAOA,UAAU,CAACO,cAAc,CAAC,YAAY,CAAC,IAAIkD,IAAI,KAAKzD,UAAU,CAAC0D,UAAU;IAClF,CAAC,CAAC;IAEF,IAAI,CAAC,CAAC,KAAKI,QAAQ,EAAE;MACnB,IAAI,CAAClE,YAAY,CAACmE,MAAM,CAACD,QAAQ,EAAE,CAAC,CAAC;IACvC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEH,aAAaA,CAACD,UAAU,EAAE;IACxB,OAAOhF,IAAI,CAAC,IAAI,CAACkB,YAAY,EAAE,UAASI,UAAU,EAAE;MAClD,OAAOA,UAAU,CAACO,cAAc,CAAC,YAAY,CAAC,IAAImD,UAAU,KAAK1D,UAAU,CAAC0D,UAAU;IACxF,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACEM,wBAAwBA,CAAA,EAAG;IACzB,MAAMC,oBAAoB,GAAG,IAAI,CAACnE,uBAAuB,CAAC,CAAC;IAC3D,OAAOrB,MAAM,CACXwF,oBAAoB,EACpB,UAASC,mBAAmB,EAAE;MAC5B,OAAO,IAAI,CAACnE,YAAY,CAACmE,mBAAmB,EAAE,IAAI,CAACtD,QAAQ,CAAC,CAAC,EAAE,IAAI,CAACf,WAAW,CAAC;IAClF,CAAC,CAAC0B,IAAI,CAAC,IAAI,CACb,CAAC;EACH;AACF;AAEA,eAAejC,QAAQ","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axyseo",
3
- "version": "2.1.29",
3
+ "version": "2.1.30",
4
4
  "main": "build/cjs/index.js",
5
5
  "module": "build/esm/index.js",
6
6
  "exports": {