@khanacademy/perseus-core 20.2.0 → 20.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/index.js +4 -2
- package/dist/es/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/make-safe-url.d.ts +13 -0
- package/package.json +7 -4
package/dist/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export * as GrapherUtil from "./utils/grapher-util";
|
|
|
17
17
|
export { generateTestPerseusItem, generateTestPerseusRenderer, } from "./utils/test-utils";
|
|
18
18
|
export { itemHasRationales } from "./utils/item-has-rationales";
|
|
19
19
|
export { itemHasHints } from "./utils/item-has-hints";
|
|
20
|
+
export { makeSafeUrl } from "./utils/make-safe-url";
|
|
20
21
|
export { parsePerseusItem, parseAndMigratePerseusItem, parseAndMigratePerseusArticle, parseAndMigrateUserInputMap, type ParseFailureDetail, } from "./parse-perseus-json";
|
|
21
22
|
export { isSuccess, isFailure, type Result, type Success, type Failure, } from "./parse-perseus-json/result";
|
|
22
23
|
export { libVersion } from "./version";
|
package/dist/index.js
CHANGED
|
@@ -60,6 +60,8 @@ const itemHasRationales=item=>widgetsHaveRationales(item.question.widgets);const
|
|
|
60
60
|
|
|
61
61
|
const itemHasHints=item=>{return item.hints.length>0};
|
|
62
62
|
|
|
63
|
+
const makeSafeUrl=(urlString,locale,expectedOrigin)=>{if(!URL.canParse(urlString)){return null}const url=new URL(urlString);if(url.origin!==expectedOrigin){return null}url.searchParams.set("locale",locale);return url};
|
|
64
|
+
|
|
63
65
|
function isRealJSONParse(jsonParse){const randomPhrase=buildRandomPhrase();const randomHintPhrase=buildRandomPhrase();const randomString=buildRandomString();const testingObject=JSON.stringify({answerArea:{calculator:false,financialCalculatorMonthlyPayment:false,financialCalculatorTimeToPayOff:false,financialCalculatorTotalAmount:false,periodicTable:false,periodicTableWithKey:false},hints:[randomHintPhrase,`=${Math.floor(Math.random()*50)+1}`],question:{content:`${randomPhrase}`,images:{},widgets:{expression1:{alignment:"default",graded:false,options:{answerForms:[{considered:"wrong",form:false,key:0,simplify:false,value:`${randomString}`}],ariaLabel:"Answer",buttonSets:["basic"],functions:["f","g","h"],static:true,times:false,visibleLabel:"Answer"},static:true,type:"expression",version:{major:1,minor:0}}}}});const testJSON=buildTestData(testingObject.replace(/"/g,'\\"'));const parsedTestJSON=jsonParse(testJSON);const parsedTestItemData=parsedTestJSON.data.assessmentItem.item.itemData;return approximateDeepEqual(parsedTestItemData,testingObject)}function buildRandomString(capitalize=false){let randomString="";const randomLength=Math.floor(Math.random()*8)+3;for(let i=0;i<randomLength;i++){const randomLetter=String.fromCharCode(97+Math.floor(Math.random()*26));randomString+=capitalize&&i===0?randomLetter.toUpperCase():randomLetter;}return randomString}function buildRandomPhrase(){const phrases=[];const randomLength=Math.floor(Math.random()*10)+5;for(let i=0;i<randomLength;i++){phrases.push(buildRandomString(i===0));}const modifierStart=["**","$"];const modifierEnd=["**","$"];const modifierIndex=Math.floor(Math.random()*modifierStart.length);return `${modifierStart[modifierIndex]}${phrases.join(" ")}${modifierEnd[modifierIndex]}`}function buildTestData(testObject){return `{"data":{"assessmentItem":{"__typename":"AssessmentItemOrError","error":null,"item":{"__typename":"AssessmentItem","id":"x890b3c70f3e8f4a6","itemData":"${testObject}","problemType":"Type 1","sha":"c7284a3ad65214b4e62bccce236d92f7f5d35941"}}}}`}
|
|
64
66
|
|
|
65
67
|
function success(value){return {type:"success",value}}function failure(detail){return {type:"failure",detail}}function isFailure(result){return result.type==="failure"}function isSuccess(result){return result.type==="success"}function all(results,combineFailureDetails=a=>a){const values=[];const failureDetails=[];for(const result of results){if(result.type==="success"){values.push(result.value);}else {failureDetails.push(result.detail);}}if(failureDetails.length>0){return failure(failureDetails.reduce(combineFailureDetails))}return success(values)}
|
|
@@ -256,7 +258,7 @@ const parseUserInputMap=(rawValue,ctx)=>{if(!isPlainObject(rawValue)){return ctx
|
|
|
256
258
|
|
|
257
259
|
function parsePerseusItem(json){if(isRealJSONParse(JSON.parse)){return JSON.parse(json)}throw new Error("Something went wrong.")}function parseAndMigratePerseusItem(data){throwErrorIfCheatingDetected();const object=typeof data==="string"?JSON.parse(data):data;const result=parse(object,parsePerseusItem$1);if(isFailure(result)){return failure({message:result.detail,invalidObject:object})}return result}function parseAndMigratePerseusArticle(data){throwErrorIfCheatingDetected();const object=typeof data==="string"?JSON.parse(data):data;const result=parse(object,parsePerseusArticle);if(isFailure(result)){return failure({message:result.detail,invalidObject:object})}return result}function parseAndMigrateUserInputMap(data){const object=typeof data==="string"?JSON.parse(data):data;const result=parse(object,parseUserInputMap);if(isFailure(result)){return failure({message:result.detail,invalidObject:object})}return result}function throwErrorIfCheatingDetected(){if(!isRealJSONParse(JSON.parse)){throw new Error("Something went wrong.")}}
|
|
258
260
|
|
|
259
|
-
const libName="@khanacademy/perseus-core";const libVersion="20.2.
|
|
261
|
+
const libName="@khanacademy/perseus-core";const libVersion="20.2.1";perseusUtils.addLibraryVersionToPerseusDebug(libName,libVersion);
|
|
260
262
|
|
|
261
263
|
const Errors=Object.freeze({Unknown:"Unknown",Internal:"Internal",InvalidInput:"InvalidInput",NotAllowed:"NotAllowed",TransientService:"TransientService",Service:"Service"});
|
|
262
264
|
|
|
@@ -495,6 +497,7 @@ exports.libVersion = libVersion;
|
|
|
495
497
|
exports.lockedFigureColorNames = lockedFigureColorNames;
|
|
496
498
|
exports.lockedFigureColors = lockedFigureColors;
|
|
497
499
|
exports.lockedFigureFillStyles = lockedFigureFillStyles;
|
|
500
|
+
exports.makeSafeUrl = makeSafeUrl;
|
|
498
501
|
exports.mapObject = mapObject;
|
|
499
502
|
exports.matcherLogic = matcherWidgetLogic;
|
|
500
503
|
exports.matrixLogic = matrixWidgetLogic;
|