playcademy 0.30.1-beta.1 → 0.30.1-beta.2
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/bucket.js +1 -1
- package/dist/cli.js +2 -2
- package/dist/constants.js +1 -1
- package/dist/db.js +1 -1
- package/dist/index.js +293 -17
- package/dist/runtime/dashboard-runtime/manifest.json +4 -4
- package/dist/runtime/game-runtime/index.js +492 -43
- package/dist/runtime/game-runtime/manifest.json +4 -4
- package/dist/utils.js +293 -17
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/bucket.js
CHANGED
|
@@ -42,7 +42,7 @@ var GAME_API_ROUTES_DIRECTORY = `${GAME_SERVER_ROOT_DIRECTORY}/api`;
|
|
|
42
42
|
// ../better-auth/package.json
|
|
43
43
|
var package_default = {
|
|
44
44
|
name: "@playcademy/better-auth",
|
|
45
|
-
version: "0.0.23-beta.
|
|
45
|
+
version: "0.0.23-beta.2",
|
|
46
46
|
type: "module",
|
|
47
47
|
exports: {
|
|
48
48
|
"./server": {
|
package/dist/cli.js
CHANGED
|
@@ -1208,7 +1208,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
1208
1208
|
// ../better-auth/package.json
|
|
1209
1209
|
var package_default = {
|
|
1210
1210
|
name: "@playcademy/better-auth",
|
|
1211
|
-
version: "0.0.23-beta.
|
|
1211
|
+
version: "0.0.23-beta.2",
|
|
1212
1212
|
type: "module",
|
|
1213
1213
|
exports: {
|
|
1214
1214
|
"./server": {
|
|
@@ -3045,7 +3045,7 @@ import { existsSync as existsSync11, mkdirSync as mkdirSync5, readFileSync as re
|
|
|
3045
3045
|
import { join as join12 } from "node:path";
|
|
3046
3046
|
|
|
3047
3047
|
// src/version.ts
|
|
3048
|
-
var cliVersion = false ? "0.0.0-dev" : "0.30.1-beta.
|
|
3048
|
+
var cliVersion = false ? "0.0.0-dev" : "0.30.1-beta.2";
|
|
3049
3049
|
|
|
3050
3050
|
// src/lib/init/database.ts
|
|
3051
3051
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
package/dist/constants.js
CHANGED
package/dist/db.js
CHANGED
|
@@ -2333,7 +2333,7 @@ var GAME_API_ROUTES_DIRECTORY = `${GAME_SERVER_ROOT_DIRECTORY}/api`;
|
|
|
2333
2333
|
// ../better-auth/package.json
|
|
2334
2334
|
var package_default = {
|
|
2335
2335
|
name: "@playcademy/better-auth",
|
|
2336
|
-
version: "0.0.23-beta.
|
|
2336
|
+
version: "0.0.23-beta.2",
|
|
2337
2337
|
type: "module",
|
|
2338
2338
|
exports: {
|
|
2339
2339
|
"./server": {
|
package/dist/index.js
CHANGED
|
@@ -2345,7 +2345,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
2345
2345
|
// ../better-auth/package.json
|
|
2346
2346
|
var package_default = {
|
|
2347
2347
|
name: "@playcademy/better-auth",
|
|
2348
|
-
version: "0.0.23-beta.
|
|
2348
|
+
version: "0.0.23-beta.2",
|
|
2349
2349
|
type: "module",
|
|
2350
2350
|
exports: {
|
|
2351
2351
|
"./server": {
|
|
@@ -6486,7 +6486,7 @@ import { existsSync as existsSync11, mkdirSync as mkdirSync2, readFileSync as re
|
|
|
6486
6486
|
import { join as join12 } from "node:path";
|
|
6487
6487
|
|
|
6488
6488
|
// src/version.ts
|
|
6489
|
-
var cliVersion = false ? "0.0.0-dev" : "0.30.1-beta.
|
|
6489
|
+
var cliVersion = false ? "0.0.0-dev" : "0.30.1-beta.2";
|
|
6490
6490
|
|
|
6491
6491
|
// src/lib/init/database.ts
|
|
6492
6492
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
|
@@ -21622,6 +21622,130 @@ var RESPONSE_PROCESSING_TEMPLATES = /* @__PURE__ */ new Set([
|
|
|
21622
21622
|
"https://purl.imsglobal.org/spec/qti/v3p0/rptemplates/match_correct",
|
|
21623
21623
|
"https://purl.imsglobal.org/spec/qti/v3p0/rptemplates/map_response_point"
|
|
21624
21624
|
]);
|
|
21625
|
+
var PRIVATE_PLAYABLE_KEYS = /* @__PURE__ */ new Set([
|
|
21626
|
+
"answer",
|
|
21627
|
+
"answerkey",
|
|
21628
|
+
"correctanswer",
|
|
21629
|
+
"correctresponse",
|
|
21630
|
+
"correctresponses",
|
|
21631
|
+
"correct",
|
|
21632
|
+
"correctvalue",
|
|
21633
|
+
"correctvalues",
|
|
21634
|
+
"iscorrect",
|
|
21635
|
+
"responseprocessing",
|
|
21636
|
+
"rule",
|
|
21637
|
+
"rules",
|
|
21638
|
+
"scoring",
|
|
21639
|
+
"scoringrules",
|
|
21640
|
+
"solution",
|
|
21641
|
+
"expected",
|
|
21642
|
+
"expectedanswer",
|
|
21643
|
+
"expectedvalue",
|
|
21644
|
+
"expectedvalues"
|
|
21645
|
+
]);
|
|
21646
|
+
var trimmedNonEmptyString = external_exports.string().min(1).refine((value) => value === value.trim());
|
|
21647
|
+
var finiteNumber2 = external_exports.number().finite();
|
|
21648
|
+
var positiveFiniteNumber = finiteNumber2.positive();
|
|
21649
|
+
var IDENTIFIER_VALUE = /^[A-Za-z_][\w.-]*$/;
|
|
21650
|
+
var DIRECTED_PAIR_VALUE = /^[A-Za-z_][\w.-]* [A-Za-z_][\w.-]*$/;
|
|
21651
|
+
var scoringMatchComparisonSchema = external_exports.object({
|
|
21652
|
+
kind: external_exports.literal("match"),
|
|
21653
|
+
correctValues: external_exports.array(trimmedNonEmptyString).min(1).refine((values) => new Set(values).size === values.length)
|
|
21654
|
+
}).strict();
|
|
21655
|
+
var scoringNumericEqualComparisonSchema = external_exports.object({ kind: external_exports.literal("numeric-equal"), correctValue: finiteNumber2 }).strict();
|
|
21656
|
+
var scoringNumericEqualRoundedComparisonSchema = external_exports.object({
|
|
21657
|
+
kind: external_exports.literal("numeric-equal-rounded"),
|
|
21658
|
+
correctValue: finiteNumber2,
|
|
21659
|
+
roundingMode: external_exports.enum(["decimalPlaces", "significantFigures"]),
|
|
21660
|
+
figures: external_exports.number().int().safe().nonnegative()
|
|
21661
|
+
}).strict();
|
|
21662
|
+
function validNumericMatchValue(value, baseType) {
|
|
21663
|
+
const syntax = baseType === "integer" ? /^[+-]?\d+$/ : /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i;
|
|
21664
|
+
if (!syntax.test(value.trim())) {
|
|
21665
|
+
return false;
|
|
21666
|
+
}
|
|
21667
|
+
const numeric = Number(value);
|
|
21668
|
+
return Number.isFinite(numeric) && (baseType === "float" || Number.isSafeInteger(numeric));
|
|
21669
|
+
}
|
|
21670
|
+
function sameScore(left, right) {
|
|
21671
|
+
return Number.isFinite(left) && Number.isFinite(right) && Math.abs(left - right) <= Number.EPSILON * Math.max(1, Math.abs(left), Math.abs(right));
|
|
21672
|
+
}
|
|
21673
|
+
var scoringRuleSchema = external_exports.object({
|
|
21674
|
+
responseIdentifier: trimmedNonEmptyString,
|
|
21675
|
+
cardinality: external_exports.enum(["single", "multiple", "ordered"]),
|
|
21676
|
+
baseType: external_exports.enum(["string", "identifier", "integer", "float", "directedPair"]),
|
|
21677
|
+
points: positiveFiniteNumber,
|
|
21678
|
+
comparison: external_exports.discriminatedUnion("kind", [
|
|
21679
|
+
scoringMatchComparisonSchema,
|
|
21680
|
+
scoringNumericEqualComparisonSchema,
|
|
21681
|
+
scoringNumericEqualRoundedComparisonSchema
|
|
21682
|
+
])
|
|
21683
|
+
}).strict().refine((rule) => rule.comparison.kind === "match" || rule.cardinality === "single" && (rule.baseType === "integer" || rule.baseType === "float")).refine((rule) => rule.baseType !== "directedPair" || rule.cardinality === "multiple" && rule.comparison.kind === "match").refine((rule) => rule.comparison.kind !== "match" || rule.cardinality !== "single" || rule.baseType === "string" || rule.comparison.correctValues.length === 1).refine((rule) => rule.comparison.kind !== "numeric-equal-rounded" || rule.comparison.roundingMode === "decimalPlaces" || rule.comparison.figures > 0).refine((rule) => {
|
|
21684
|
+
if (rule.comparison.kind !== "match") {
|
|
21685
|
+
return rule.baseType !== "integer" || Number.isSafeInteger(rule.comparison.correctValue);
|
|
21686
|
+
}
|
|
21687
|
+
if (rule.baseType === "integer" || rule.baseType === "float") {
|
|
21688
|
+
return rule.comparison.correctValues.every((value) => validNumericMatchValue(value, rule.baseType));
|
|
21689
|
+
}
|
|
21690
|
+
if (rule.baseType === "identifier") {
|
|
21691
|
+
return rule.comparison.correctValues.every((value) => IDENTIFIER_VALUE.test(value));
|
|
21692
|
+
}
|
|
21693
|
+
return rule.baseType !== "directedPair" || rule.comparison.correctValues.every((value) => DIRECTED_PAIR_VALUE.test(value));
|
|
21694
|
+
});
|
|
21695
|
+
var scoringRulesSchema = external_exports.array(scoringRuleSchema).min(1).refine((rules) => new Set(rules.map((rule) => rule.responseIdentifier)).size === rules.length);
|
|
21696
|
+
var scoringItemSchema = external_exports.discriminatedUnion("strategy", [
|
|
21697
|
+
external_exports.object({
|
|
21698
|
+
strategy: external_exports.literal("qti"),
|
|
21699
|
+
itemIdentifier: trimmedNonEmptyString,
|
|
21700
|
+
maxScore: positiveFiniteNumber,
|
|
21701
|
+
reason: external_exports.enum([
|
|
21702
|
+
"response-mapping",
|
|
21703
|
+
"area-mapping",
|
|
21704
|
+
"unsupported-base-type",
|
|
21705
|
+
"unsupported-cardinality",
|
|
21706
|
+
"invalid-correct-response",
|
|
21707
|
+
"no-scorable-response",
|
|
21708
|
+
"unsupported-processing-template",
|
|
21709
|
+
"unsupported-response-processing",
|
|
21710
|
+
"cross-response-processing",
|
|
21711
|
+
"inconsistent-max-score"
|
|
21712
|
+
])
|
|
21713
|
+
}).strict(),
|
|
21714
|
+
external_exports.object({
|
|
21715
|
+
strategy: external_exports.literal("platform"),
|
|
21716
|
+
itemIdentifier: trimmedNonEmptyString,
|
|
21717
|
+
maxScore: positiveFiniteNumber,
|
|
21718
|
+
rules: scoringRulesSchema
|
|
21719
|
+
}).strict()
|
|
21720
|
+
]).refine((item) => item.strategy === "qti" || sameScore(item.rules.reduce((total, rule) => total + rule.points, 0), item.maxScore));
|
|
21721
|
+
var assessmentScoringArtifactItemsSchema = external_exports.array(scoringItemSchema).refine((items) => new Set(items.map((item) => item.itemIdentifier)).size === items.length);
|
|
21722
|
+
var assessmentScoringArtifactSchema = external_exports.object({ items: assessmentScoringArtifactItemsSchema }).strict();
|
|
21723
|
+
function isAssessmentScoringArtifact(value) {
|
|
21724
|
+
return assessmentScoringArtifactSchema.safeParse(value).success;
|
|
21725
|
+
}
|
|
21726
|
+
function scoringItemMatchesPlayableItem(scoringItem, item) {
|
|
21727
|
+
if (!sameScore(scoringItem.maxScore, item.maxScore)) {
|
|
21728
|
+
return false;
|
|
21729
|
+
}
|
|
21730
|
+
if (scoringItem.strategy === "qti") {
|
|
21731
|
+
return true;
|
|
21732
|
+
}
|
|
21733
|
+
const playableResponses = new Set(item.interactions.map((interaction) => interaction.responseIdentifier));
|
|
21734
|
+
const scoringResponses = new Set(scoringItem.rules.map((rule) => rule.responseIdentifier));
|
|
21735
|
+
return playableResponses.size === item.interactions.length && scoringResponses.size === scoringItem.rules.length && playableResponses.size === scoringResponses.size && [...playableResponses].every((identifier) => scoringResponses.has(identifier));
|
|
21736
|
+
}
|
|
21737
|
+
function normalizedKey(key) {
|
|
21738
|
+
return key.replaceAll(/[^a-z0-9]/gi, "").toLowerCase();
|
|
21739
|
+
}
|
|
21740
|
+
function containsPrivatePlayableAssessmentData(value) {
|
|
21741
|
+
if (Array.isArray(value)) {
|
|
21742
|
+
return value.some(containsPrivatePlayableAssessmentData);
|
|
21743
|
+
}
|
|
21744
|
+
if (!isRecord2(value)) {
|
|
21745
|
+
return false;
|
|
21746
|
+
}
|
|
21747
|
+
return Object.entries(value).some(([key, entry]) => PRIVATE_PLAYABLE_KEYS.has(normalizedKey(key)) || containsPrivatePlayableAssessmentData(entry));
|
|
21748
|
+
}
|
|
21625
21749
|
var MATCH_CORRECT_TEMPLATES = new Set([
|
|
21626
21750
|
"http://www.imsglobal.org/question/qti_v3p0/rptemplates/match_correct",
|
|
21627
21751
|
"https://www.imsglobal.org/question/qti_v3p0/rptemplates/match_correct",
|
|
@@ -22562,12 +22686,30 @@ function isFixtureReviewBank(value, assessment) {
|
|
|
22562
22686
|
}
|
|
22563
22687
|
return indexedItems.size === expectedItems.size;
|
|
22564
22688
|
}
|
|
22565
|
-
function
|
|
22689
|
+
function isFixturePlayableItem(value) {
|
|
22690
|
+
return isRecord2(value) && typeof value.identifier === "string" && typeof value.maxScore === "number" && Array.isArray(value.interactions) && value.interactions.every((interaction) => isRecord2(interaction) && typeof interaction.responseIdentifier === "string");
|
|
22691
|
+
}
|
|
22692
|
+
function isFixtureScoringArtifact(value, assessment) {
|
|
22693
|
+
if (!isAssessmentScoringArtifact(value) || !Array.isArray(assessment.items)) {
|
|
22694
|
+
return false;
|
|
22695
|
+
}
|
|
22696
|
+
const assessmentItems = assessment.items.filter(isFixturePlayableItem);
|
|
22697
|
+
const assessmentItemsByIdentifier = new Map(assessmentItems.map((item) => [item.identifier, item]));
|
|
22698
|
+
return assessmentItems.length === assessment.items.length && assessmentItemsByIdentifier.size === assessmentItems.length && value.items.length === assessmentItems.length && value.items.every((scoringItem) => {
|
|
22699
|
+
const assessmentItem = assessmentItemsByIdentifier.get(scoringItem.itemIdentifier);
|
|
22700
|
+
return scoringItem.strategy === "platform" && assessmentItem !== void 0 && scoringItemMatchesPlayableItem(scoringItem, assessmentItem);
|
|
22701
|
+
});
|
|
22702
|
+
}
|
|
22703
|
+
function fixtureItemSupportsDeterminateBinaryGrading(item, correctResponses, responseAreas, scoring) {
|
|
22566
22704
|
if (!isRecord2(item) || typeof item.identifier !== "string" || !Array.isArray(item.interactions)) {
|
|
22567
22705
|
return false;
|
|
22568
22706
|
}
|
|
22569
22707
|
const itemCorrectResponses = correctResponses[item.identifier];
|
|
22570
22708
|
const itemResponseAreas = responseAreas?.[item.identifier];
|
|
22709
|
+
const scoringItem = scoring?.items.find((candidate) => candidate.itemIdentifier === item.identifier);
|
|
22710
|
+
if (scoringItem) {
|
|
22711
|
+
return scoringItem.strategy === "platform";
|
|
22712
|
+
}
|
|
22571
22713
|
return item.interactions.length > 0 && item.interactions.every((interaction) => {
|
|
22572
22714
|
if (!isRecord2(interaction) || typeof interaction.responseIdentifier !== "string") {
|
|
22573
22715
|
return false;
|
|
@@ -22576,13 +22718,13 @@ function fixtureItemSupportsDeterminateBinaryGrading(item, correctResponses, res
|
|
|
22576
22718
|
return isRecord2(itemCorrectResponses) && isAssessmentResponseValue(itemCorrectResponses[identifier]) || isRecord2(itemResponseAreas) && Array.isArray(itemResponseAreas[identifier]) && itemResponseAreas[identifier].length > 0;
|
|
22577
22719
|
});
|
|
22578
22720
|
}
|
|
22579
|
-
function isFixtureDiagnosticRouting(value, assessment, correctResponses, responseAreas) {
|
|
22721
|
+
function isFixtureDiagnosticRouting(value, assessment, correctResponses, responseAreas, scoring) {
|
|
22580
22722
|
if (!isRecord2(value) || typeof value.diagnosticKey !== "string" || value.diagnosticKey.trim().length === 0 || value.diagnosticKey !== value.diagnosticKey.trim() || typeof value.routingRevision !== "string" || value.routingRevision.trim().length === 0 || value.routingRevision !== value.routingRevision.trim() || !Array.isArray(assessment.items)) {
|
|
22581
22723
|
return false;
|
|
22582
22724
|
}
|
|
22583
22725
|
const capabilities = assessment.items.map((item) => ({
|
|
22584
22726
|
itemIdentifier: isRecord2(item) && typeof item.identifier === "string" ? item.identifier : "",
|
|
22585
|
-
supportsDeterminateBinaryGrading: fixtureItemSupportsDeterminateBinaryGrading(item, correctResponses, responseAreas)
|
|
22727
|
+
supportsDeterminateBinaryGrading: fixtureItemSupportsDeterminateBinaryGrading(item, correctResponses, responseAreas, scoring)
|
|
22586
22728
|
}));
|
|
22587
22729
|
const validation = validateDiagnosticRoutingManifest(value.routingManifest, capabilities, {
|
|
22588
22730
|
analyzeBounds: false
|
|
@@ -22602,7 +22744,7 @@ function isAssessmentRuntimeFixtureBundle(value) {
|
|
|
22602
22744
|
return false;
|
|
22603
22745
|
}
|
|
22604
22746
|
const validTests = catalog.tests.every((test) => {
|
|
22605
|
-
if (!isRecord2(test) || typeof test.id !== "string" || typeof test.assessmentKey !== "string" || typeof test.qtiTestIdentifier !== "string" || typeof test.live !== "boolean" || !isRecord2(test.assessment) || typeof test.assessment.identifier !== "string" || !Number.isInteger(test.assessment.contractVersion) || typeof test.assessment.contentRevision !== "string" || !Array.isArray(test.assessment.items) || !isRecord2(test.correctResponses)) {
|
|
22747
|
+
if (!isRecord2(test) || typeof test.id !== "string" || typeof test.assessmentKey !== "string" || typeof test.qtiTestIdentifier !== "string" || typeof test.live !== "boolean" || !isRecord2(test.assessment) || typeof test.assessment.identifier !== "string" || !Number.isInteger(test.assessment.contractVersion) || typeof test.assessment.contentRevision !== "string" || !Array.isArray(test.assessment.items) || !test.assessment.items.every((item) => isRecord2(item) && typeof item.maxScore === "number" && Number.isFinite(item.maxScore) && item.maxScore > 0) || containsPrivatePlayableAssessmentData(test.assessment) || !isRecord2(test.correctResponses)) {
|
|
22606
22748
|
return false;
|
|
22607
22749
|
}
|
|
22608
22750
|
const standard = isRecord2(test.standard) && typeof test.standard.framework === "string" && typeof test.standard.identifier === "string" ? canonicalReviewStandardRef({
|
|
@@ -22616,10 +22758,17 @@ function isAssessmentRuntimeFixtureBundle(value) {
|
|
|
22616
22758
|
if (!validReviewBank) {
|
|
22617
22759
|
return false;
|
|
22618
22760
|
}
|
|
22761
|
+
let scoring;
|
|
22762
|
+
if (test.scoring !== void 0) {
|
|
22763
|
+
if (!isFixtureScoringArtifact(test.scoring, test.assessment)) {
|
|
22764
|
+
return false;
|
|
22765
|
+
}
|
|
22766
|
+
scoring = test.scoring;
|
|
22767
|
+
}
|
|
22619
22768
|
if (test.diagnostic === void 0) {
|
|
22620
22769
|
return true;
|
|
22621
22770
|
}
|
|
22622
|
-
return catalog.purpose === "diagnostic" && isFixtureDiagnosticRouting(test.diagnostic, test.assessment, test.correctResponses, isRecord2(test.responseAreas) ? test.responseAreas : void 0);
|
|
22771
|
+
return catalog.purpose === "diagnostic" && isFixtureDiagnosticRouting(test.diagnostic, test.assessment, test.correctResponses, isRecord2(test.responseAreas) ? test.responseAreas : void 0, scoring);
|
|
22623
22772
|
});
|
|
22624
22773
|
if (!validTests || catalog.purpose !== "diagnostic") {
|
|
22625
22774
|
return validTests;
|
|
@@ -22637,6 +22786,133 @@ function isAssessmentRuntimeFixtureBundle(value) {
|
|
|
22637
22786
|
return true;
|
|
22638
22787
|
});
|
|
22639
22788
|
}
|
|
22789
|
+
var ASSESSMENT_CHILD_RESULT_KIND = "assessment-child-result";
|
|
22790
|
+
var ASSESSMENT_CHILD_RESULT_VERSION = 1;
|
|
22791
|
+
var IdentitySchema = external_exports.string().min(1).refine((value) => value.trim() === value, {
|
|
22792
|
+
message: "Identifiers must not contain surrounding whitespace"
|
|
22793
|
+
});
|
|
22794
|
+
var RecordedAtSchema = external_exports.string().datetime().refine((value) => new Date(value).toISOString() === value, {
|
|
22795
|
+
message: "recordedAt must be a canonical UTC timestamp"
|
|
22796
|
+
});
|
|
22797
|
+
var ResponseKeySchema = IdentitySchema;
|
|
22798
|
+
var AssessmentResponseValueSchema = external_exports.custom(isAssessmentResponseValue, {
|
|
22799
|
+
message: `Response values are non-empty text, at most ${TIMEBACK_ASSESSMENT_RESPONSE_VALUE_MAX_LENGTH} characters each`
|
|
22800
|
+
});
|
|
22801
|
+
var AssessmentScoreSchema = external_exports.object({
|
|
22802
|
+
earned: external_exports.number().finite().nonnegative(),
|
|
22803
|
+
possible: external_exports.number().finite().nonnegative(),
|
|
22804
|
+
normalized: external_exports.number().finite().min(0).max(1)
|
|
22805
|
+
}).strict().superRefine((score, context2) => {
|
|
22806
|
+
const expectedNormalized = score.possible === 0 ? 0 : score.earned / score.possible;
|
|
22807
|
+
if (score.earned > score.possible) {
|
|
22808
|
+
context2.addIssue({
|
|
22809
|
+
code: external_exports.ZodIssueCode.custom,
|
|
22810
|
+
message: "Earned score must not exceed possible score",
|
|
22811
|
+
path: ["earned"]
|
|
22812
|
+
});
|
|
22813
|
+
}
|
|
22814
|
+
if (score.normalized !== expectedNormalized) {
|
|
22815
|
+
context2.addIssue({
|
|
22816
|
+
code: external_exports.ZodIssueCode.custom,
|
|
22817
|
+
message: "Normalized score must equal earned divided by possible",
|
|
22818
|
+
path: ["normalized"]
|
|
22819
|
+
});
|
|
22820
|
+
}
|
|
22821
|
+
});
|
|
22822
|
+
var AssessmentStandardRefSchema = external_exports.object({
|
|
22823
|
+
framework: IdentitySchema,
|
|
22824
|
+
identifier: IdentitySchema
|
|
22825
|
+
}).strict();
|
|
22826
|
+
var DiagnosticRoutingLedgerEntryV1Schema = external_exports.object({
|
|
22827
|
+
stageKey: IdentitySchema,
|
|
22828
|
+
trackKey: IdentitySchema,
|
|
22829
|
+
routingNodeKey: IdentitySchema,
|
|
22830
|
+
itemIdentifier: IdentitySchema,
|
|
22831
|
+
isCorrect: external_exports.boolean()
|
|
22832
|
+
}).strict();
|
|
22833
|
+
var AssessmentChildResultAttemptV1Schema = external_exports.object({
|
|
22834
|
+
attemptId: IdentitySchema,
|
|
22835
|
+
gameId: IdentitySchema,
|
|
22836
|
+
studentId: IdentitySchema,
|
|
22837
|
+
activityId: IdentitySchema,
|
|
22838
|
+
courseId: IdentitySchema,
|
|
22839
|
+
integrationId: IdentitySchema,
|
|
22840
|
+
enrollmentId: IdentitySchema,
|
|
22841
|
+
selectedTest: external_exports.object({
|
|
22842
|
+
assessmentKey: IdentitySchema,
|
|
22843
|
+
identifier: IdentitySchema,
|
|
22844
|
+
contentRevision: IdentitySchema
|
|
22845
|
+
}).strict()
|
|
22846
|
+
}).strict();
|
|
22847
|
+
var AssessmentChildResultAdministrationV1Schema = external_exports.object({
|
|
22848
|
+
submissionId: IdentitySchema,
|
|
22849
|
+
responseVersion: external_exports.number().int().positive(),
|
|
22850
|
+
itemIdentifier: IdentitySchema
|
|
22851
|
+
}).strict();
|
|
22852
|
+
var AssessmentChildResultGradingV1Schema = external_exports.discriminatedUnion("source", [
|
|
22853
|
+
external_exports.object({
|
|
22854
|
+
source: external_exports.literal("timeback-qti"),
|
|
22855
|
+
graderVersion: IdentitySchema
|
|
22856
|
+
}).strict(),
|
|
22857
|
+
external_exports.object({
|
|
22858
|
+
source: external_exports.literal("platform-qti-adapter"),
|
|
22859
|
+
graderVersion: IdentitySchema,
|
|
22860
|
+
qtiGraderVersion: IdentitySchema
|
|
22861
|
+
}).strict(),
|
|
22862
|
+
external_exports.object({
|
|
22863
|
+
source: external_exports.literal("platform-artifact"),
|
|
22864
|
+
artifactVersion: IdentitySchema,
|
|
22865
|
+
graderVersion: IdentitySchema
|
|
22866
|
+
}).strict()
|
|
22867
|
+
]);
|
|
22868
|
+
var ReviewChildResultContextV1Schema = external_exports.object({
|
|
22869
|
+
kind: external_exports.literal("review"),
|
|
22870
|
+
bankRevision: IdentitySchema,
|
|
22871
|
+
standard: AssessmentStandardRefSchema
|
|
22872
|
+
}).strict();
|
|
22873
|
+
var DiagnosticChildResultContextV1Schema = external_exports.object({
|
|
22874
|
+
kind: external_exports.literal("platform-routed-diagnostic"),
|
|
22875
|
+
definitionId: IdentitySchema,
|
|
22876
|
+
diagnosticKey: IdentitySchema,
|
|
22877
|
+
routingRevision: IdentitySchema,
|
|
22878
|
+
transition: DiagnosticRoutingLedgerEntryV1Schema
|
|
22879
|
+
}).strict();
|
|
22880
|
+
var CommonPayloadShape = {
|
|
22881
|
+
attempt: AssessmentChildResultAttemptV1Schema,
|
|
22882
|
+
administration: AssessmentChildResultAdministrationV1Schema,
|
|
22883
|
+
responses: external_exports.record(ResponseKeySchema, AssessmentResponseValueSchema),
|
|
22884
|
+
score: AssessmentScoreSchema,
|
|
22885
|
+
grading: AssessmentChildResultGradingV1Schema
|
|
22886
|
+
};
|
|
22887
|
+
var ReviewChildResultPayloadV1Schema = external_exports.object({
|
|
22888
|
+
...CommonPayloadShape,
|
|
22889
|
+
isCorrect: external_exports.boolean().optional(),
|
|
22890
|
+
context: ReviewChildResultContextV1Schema
|
|
22891
|
+
}).strict();
|
|
22892
|
+
var DiagnosticChildResultPayloadV1Schema = external_exports.object({
|
|
22893
|
+
...CommonPayloadShape,
|
|
22894
|
+
isCorrect: external_exports.boolean(),
|
|
22895
|
+
context: DiagnosticChildResultContextV1Schema
|
|
22896
|
+
}).strict().superRefine((payload, context2) => {
|
|
22897
|
+
if (payload.context.transition.itemIdentifier !== payload.administration.itemIdentifier || payload.context.transition.isCorrect !== payload.isCorrect) {
|
|
22898
|
+
context2.addIssue({
|
|
22899
|
+
code: external_exports.ZodIssueCode.custom,
|
|
22900
|
+
message: "Diagnostic transition must match the administered item and correctness",
|
|
22901
|
+
path: ["context", "transition"]
|
|
22902
|
+
});
|
|
22903
|
+
}
|
|
22904
|
+
});
|
|
22905
|
+
var AssessmentChildResultPayloadV1Schema = external_exports.union([
|
|
22906
|
+
ReviewChildResultPayloadV1Schema,
|
|
22907
|
+
DiagnosticChildResultPayloadV1Schema
|
|
22908
|
+
]);
|
|
22909
|
+
var AssessmentChildResultCommandV1Schema = external_exports.object({
|
|
22910
|
+
kind: external_exports.literal(ASSESSMENT_CHILD_RESULT_KIND),
|
|
22911
|
+
version: external_exports.literal(ASSESSMENT_CHILD_RESULT_VERSION),
|
|
22912
|
+
recordedAt: RecordedAtSchema,
|
|
22913
|
+
payloadHash: external_exports.string().regex(/^[a-f0-9]{64}$/),
|
|
22914
|
+
payload: AssessmentChildResultPayloadV1Schema
|
|
22915
|
+
}).strict();
|
|
22640
22916
|
var RuntimeSubjectSchema = external_exports.enum(TIMEBACK_SUBJECTS);
|
|
22641
22917
|
var RuntimeGradeSchema = external_exports.number().refine(isTimebackGrade, {
|
|
22642
22918
|
message: `Grade must be one of: ${TIMEBACK_GRADES.join(", ")}`
|
|
@@ -22647,14 +22923,14 @@ var OptionalQueryGradeSchema = external_exports.preprocess((value) => {
|
|
|
22647
22923
|
}
|
|
22648
22924
|
return typeof value === "string" && value.trim() !== "" ? Number(value) : Number.NaN;
|
|
22649
22925
|
}, RuntimeGradeSchema.optional());
|
|
22650
|
-
var
|
|
22926
|
+
var AssessmentResponseValueSchema2 = external_exports.custom(isAssessmentResponseValue, {
|
|
22651
22927
|
message: `Response values are non-empty text, at most ${TIMEBACK_ASSESSMENT_RESPONSE_VALUE_MAX_LENGTH} characters each`
|
|
22652
22928
|
});
|
|
22653
22929
|
var AssessmentRuntimeIdentitySchema = external_exports.object({
|
|
22654
22930
|
gameId: external_exports.string().uuid(),
|
|
22655
22931
|
studentId: external_exports.string().trim().min(1)
|
|
22656
22932
|
});
|
|
22657
|
-
var
|
|
22933
|
+
var ResponseKeySchema2 = external_exports.string().refine((key) => key.length > 0 && key.trim() === key, {
|
|
22658
22934
|
message: "Response keys must be non-empty without surrounding whitespace"
|
|
22659
22935
|
});
|
|
22660
22936
|
var StartAssessmentBaseSchema = external_exports.object({
|
|
@@ -22662,7 +22938,7 @@ var StartAssessmentBaseSchema = external_exports.object({
|
|
|
22662
22938
|
subject: RuntimeSubjectSchema.optional(),
|
|
22663
22939
|
grade: RuntimeGradeSchema.optional()
|
|
22664
22940
|
});
|
|
22665
|
-
var
|
|
22941
|
+
var AssessmentStandardRefSchema2 = external_exports.object({
|
|
22666
22942
|
framework: external_exports.string().trim().min(1).max(TIMEBACK_ASSESSMENT_REVIEW_REQUEST_LIMITS.standardFieldLength),
|
|
22667
22943
|
identifier: external_exports.string().trim().min(1).max(TIMEBACK_ASSESSMENT_REVIEW_REQUEST_LIMITS.standardFieldLength)
|
|
22668
22944
|
}).refine((standard) => {
|
|
@@ -22679,7 +22955,7 @@ var LatestAssessmentFiltersSchema = external_exports.discriminatedUnion("purpose
|
|
|
22679
22955
|
}),
|
|
22680
22956
|
LatestAssessmentFilterBaseSchema.extend({
|
|
22681
22957
|
purpose: external_exports.literal("mastery"),
|
|
22682
|
-
standard:
|
|
22958
|
+
standard: AssessmentStandardRefSchema2
|
|
22683
22959
|
})
|
|
22684
22960
|
]);
|
|
22685
22961
|
var LatestRuntimeAssessmentQuerySchema = external_exports.intersection(AssessmentRuntimeIdentitySchema, LatestAssessmentFiltersSchema);
|
|
@@ -22693,26 +22969,26 @@ var StartAssessmentBodySchema = external_exports.discriminatedUnion("purpose", [
|
|
|
22693
22969
|
}),
|
|
22694
22970
|
StartAssessmentBaseSchema.extend({
|
|
22695
22971
|
purpose: external_exports.literal("review"),
|
|
22696
|
-
standards: external_exports.array(
|
|
22972
|
+
standards: external_exports.array(AssessmentStandardRefSchema2).min(1).max(TIMEBACK_ASSESSMENT_REVIEW_REQUEST_LIMITS.standards),
|
|
22697
22973
|
candidateItemsPerStandard: external_exports.number().int().positive().max(TIMEBACK_ASSESSMENT_REVIEW_REQUEST_LIMITS.candidateItemsPerStandard).optional()
|
|
22698
22974
|
}),
|
|
22699
22975
|
StartAssessmentBaseSchema.extend({
|
|
22700
22976
|
purpose: external_exports.literal("mastery"),
|
|
22701
|
-
standard:
|
|
22977
|
+
standard: AssessmentStandardRefSchema2
|
|
22702
22978
|
})
|
|
22703
22979
|
]);
|
|
22704
22980
|
var AssessmentPreparationReceiptSchema = external_exports.string().max(32e3);
|
|
22705
22981
|
var StartAssessmentRequestBodySchema = external_exports.intersection(StartAssessmentBodySchema, external_exports.object({ preparationReceipt: AssessmentPreparationReceiptSchema.optional() }));
|
|
22706
22982
|
var SaveAssessmentBodySchema = external_exports.object({
|
|
22707
22983
|
expectedResponseVersion: external_exports.number().int().nonnegative(),
|
|
22708
|
-
responses: external_exports.record(
|
|
22984
|
+
responses: external_exports.record(ResponseKeySchema2, external_exports.record(ResponseKeySchema2, AssessmentResponseValueSchema2.nullable()))
|
|
22709
22985
|
});
|
|
22710
22986
|
var SubmitAssessmentItemBodySchema = external_exports.object({
|
|
22711
22987
|
expectedResponseVersion: external_exports.number().int().nonnegative(),
|
|
22712
22988
|
submissionId: external_exports.string().trim().min(1),
|
|
22713
|
-
itemIdentifier:
|
|
22714
|
-
routingNodeKey:
|
|
22715
|
-
responses: external_exports.record(
|
|
22989
|
+
itemIdentifier: ResponseKeySchema2,
|
|
22990
|
+
routingNodeKey: ResponseKeySchema2.optional(),
|
|
22991
|
+
responses: external_exports.record(ResponseKeySchema2, AssessmentResponseValueSchema2.nullable())
|
|
22716
22992
|
});
|
|
22717
22993
|
var SubmitAssessmentBodySchema = external_exports.object({
|
|
22718
22994
|
expectedResponseVersion: external_exports.number().int().nonnegative(),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cliVersion": "0.30.1-beta.
|
|
3
|
-
"sdkVersion": "0.18.1-beta.
|
|
4
|
-
"runtimeBuildId": "
|
|
5
|
-
"inputFingerprint": "
|
|
2
|
+
"cliVersion": "0.30.1-beta.2",
|
|
3
|
+
"sdkVersion": "0.18.1-beta.2",
|
|
4
|
+
"runtimeBuildId": "8b1482f218dd",
|
|
5
|
+
"inputFingerprint": "8b1482f218dd002569f3f20a70065dfe243d473fcee598817a8085a3b72f64aa",
|
|
6
6
|
"entry": "index.js"
|
|
7
7
|
}
|