playcademy 0.30.0 → 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 +302 -18
- package/dist/runtime/dashboard-runtime/manifest.json +4 -4
- package/dist/runtime/game-runtime/index.js +568 -49
- package/dist/runtime/game-runtime/manifest.json +4 -4
- package/dist/utils.js +302 -18
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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,135 @@ 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
|
+
}
|
|
21749
|
+
var MATCH_CORRECT_TEMPLATES = new Set([
|
|
21750
|
+
"http://www.imsglobal.org/question/qti_v3p0/rptemplates/match_correct",
|
|
21751
|
+
"https://www.imsglobal.org/question/qti_v3p0/rptemplates/match_correct",
|
|
21752
|
+
"https://purl.imsglobal.org/spec/qti/v3p0/rptemplates/match_correct"
|
|
21753
|
+
].flatMap((template) => [template, `${template}.xml`]));
|
|
21625
21754
|
var COMMON_CORE_MATH_FRAMEWORK_ALIASES = /* @__PURE__ */ new Set([
|
|
21626
21755
|
"ccssm",
|
|
21627
21756
|
"ccssmath",
|
|
@@ -22557,12 +22686,30 @@ function isFixtureReviewBank(value, assessment) {
|
|
|
22557
22686
|
}
|
|
22558
22687
|
return indexedItems.size === expectedItems.size;
|
|
22559
22688
|
}
|
|
22560
|
-
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) {
|
|
22561
22704
|
if (!isRecord2(item) || typeof item.identifier !== "string" || !Array.isArray(item.interactions)) {
|
|
22562
22705
|
return false;
|
|
22563
22706
|
}
|
|
22564
22707
|
const itemCorrectResponses = correctResponses[item.identifier];
|
|
22565
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
|
+
}
|
|
22566
22713
|
return item.interactions.length > 0 && item.interactions.every((interaction) => {
|
|
22567
22714
|
if (!isRecord2(interaction) || typeof interaction.responseIdentifier !== "string") {
|
|
22568
22715
|
return false;
|
|
@@ -22571,13 +22718,13 @@ function fixtureItemSupportsDeterminateBinaryGrading(item, correctResponses, res
|
|
|
22571
22718
|
return isRecord2(itemCorrectResponses) && isAssessmentResponseValue(itemCorrectResponses[identifier]) || isRecord2(itemResponseAreas) && Array.isArray(itemResponseAreas[identifier]) && itemResponseAreas[identifier].length > 0;
|
|
22572
22719
|
});
|
|
22573
22720
|
}
|
|
22574
|
-
function isFixtureDiagnosticRouting(value, assessment, correctResponses, responseAreas) {
|
|
22721
|
+
function isFixtureDiagnosticRouting(value, assessment, correctResponses, responseAreas, scoring) {
|
|
22575
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)) {
|
|
22576
22723
|
return false;
|
|
22577
22724
|
}
|
|
22578
22725
|
const capabilities = assessment.items.map((item) => ({
|
|
22579
22726
|
itemIdentifier: isRecord2(item) && typeof item.identifier === "string" ? item.identifier : "",
|
|
22580
|
-
supportsDeterminateBinaryGrading: fixtureItemSupportsDeterminateBinaryGrading(item, correctResponses, responseAreas)
|
|
22727
|
+
supportsDeterminateBinaryGrading: fixtureItemSupportsDeterminateBinaryGrading(item, correctResponses, responseAreas, scoring)
|
|
22581
22728
|
}));
|
|
22582
22729
|
const validation = validateDiagnosticRoutingManifest(value.routingManifest, capabilities, {
|
|
22583
22730
|
analyzeBounds: false
|
|
@@ -22597,7 +22744,7 @@ function isAssessmentRuntimeFixtureBundle(value) {
|
|
|
22597
22744
|
return false;
|
|
22598
22745
|
}
|
|
22599
22746
|
const validTests = catalog.tests.every((test) => {
|
|
22600
|
-
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)) {
|
|
22601
22748
|
return false;
|
|
22602
22749
|
}
|
|
22603
22750
|
const standard = isRecord2(test.standard) && typeof test.standard.framework === "string" && typeof test.standard.identifier === "string" ? canonicalReviewStandardRef({
|
|
@@ -22611,10 +22758,17 @@ function isAssessmentRuntimeFixtureBundle(value) {
|
|
|
22611
22758
|
if (!validReviewBank) {
|
|
22612
22759
|
return false;
|
|
22613
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
|
+
}
|
|
22614
22768
|
if (test.diagnostic === void 0) {
|
|
22615
22769
|
return true;
|
|
22616
22770
|
}
|
|
22617
|
-
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);
|
|
22618
22772
|
});
|
|
22619
22773
|
if (!validTests || catalog.purpose !== "diagnostic") {
|
|
22620
22774
|
return validTests;
|
|
@@ -22632,6 +22786,133 @@ function isAssessmentRuntimeFixtureBundle(value) {
|
|
|
22632
22786
|
return true;
|
|
22633
22787
|
});
|
|
22634
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();
|
|
22635
22916
|
var RuntimeSubjectSchema = external_exports.enum(TIMEBACK_SUBJECTS);
|
|
22636
22917
|
var RuntimeGradeSchema = external_exports.number().refine(isTimebackGrade, {
|
|
22637
22918
|
message: `Grade must be one of: ${TIMEBACK_GRADES.join(", ")}`
|
|
@@ -22642,14 +22923,14 @@ var OptionalQueryGradeSchema = external_exports.preprocess((value) => {
|
|
|
22642
22923
|
}
|
|
22643
22924
|
return typeof value === "string" && value.trim() !== "" ? Number(value) : Number.NaN;
|
|
22644
22925
|
}, RuntimeGradeSchema.optional());
|
|
22645
|
-
var
|
|
22926
|
+
var AssessmentResponseValueSchema2 = external_exports.custom(isAssessmentResponseValue, {
|
|
22646
22927
|
message: `Response values are non-empty text, at most ${TIMEBACK_ASSESSMENT_RESPONSE_VALUE_MAX_LENGTH} characters each`
|
|
22647
22928
|
});
|
|
22648
22929
|
var AssessmentRuntimeIdentitySchema = external_exports.object({
|
|
22649
22930
|
gameId: external_exports.string().uuid(),
|
|
22650
22931
|
studentId: external_exports.string().trim().min(1)
|
|
22651
22932
|
});
|
|
22652
|
-
var
|
|
22933
|
+
var ResponseKeySchema2 = external_exports.string().refine((key) => key.length > 0 && key.trim() === key, {
|
|
22653
22934
|
message: "Response keys must be non-empty without surrounding whitespace"
|
|
22654
22935
|
});
|
|
22655
22936
|
var StartAssessmentBaseSchema = external_exports.object({
|
|
@@ -22657,7 +22938,7 @@ var StartAssessmentBaseSchema = external_exports.object({
|
|
|
22657
22938
|
subject: RuntimeSubjectSchema.optional(),
|
|
22658
22939
|
grade: RuntimeGradeSchema.optional()
|
|
22659
22940
|
});
|
|
22660
|
-
var
|
|
22941
|
+
var AssessmentStandardRefSchema2 = external_exports.object({
|
|
22661
22942
|
framework: external_exports.string().trim().min(1).max(TIMEBACK_ASSESSMENT_REVIEW_REQUEST_LIMITS.standardFieldLength),
|
|
22662
22943
|
identifier: external_exports.string().trim().min(1).max(TIMEBACK_ASSESSMENT_REVIEW_REQUEST_LIMITS.standardFieldLength)
|
|
22663
22944
|
}).refine((standard) => {
|
|
@@ -22674,7 +22955,7 @@ var LatestAssessmentFiltersSchema = external_exports.discriminatedUnion("purpose
|
|
|
22674
22955
|
}),
|
|
22675
22956
|
LatestAssessmentFilterBaseSchema.extend({
|
|
22676
22957
|
purpose: external_exports.literal("mastery"),
|
|
22677
|
-
standard:
|
|
22958
|
+
standard: AssessmentStandardRefSchema2
|
|
22678
22959
|
})
|
|
22679
22960
|
]);
|
|
22680
22961
|
var LatestRuntimeAssessmentQuerySchema = external_exports.intersection(AssessmentRuntimeIdentitySchema, LatestAssessmentFiltersSchema);
|
|
@@ -22688,24 +22969,26 @@ var StartAssessmentBodySchema = external_exports.discriminatedUnion("purpose", [
|
|
|
22688
22969
|
}),
|
|
22689
22970
|
StartAssessmentBaseSchema.extend({
|
|
22690
22971
|
purpose: external_exports.literal("review"),
|
|
22691
|
-
standards: external_exports.array(
|
|
22972
|
+
standards: external_exports.array(AssessmentStandardRefSchema2).min(1).max(TIMEBACK_ASSESSMENT_REVIEW_REQUEST_LIMITS.standards),
|
|
22692
22973
|
candidateItemsPerStandard: external_exports.number().int().positive().max(TIMEBACK_ASSESSMENT_REVIEW_REQUEST_LIMITS.candidateItemsPerStandard).optional()
|
|
22693
22974
|
}),
|
|
22694
22975
|
StartAssessmentBaseSchema.extend({
|
|
22695
22976
|
purpose: external_exports.literal("mastery"),
|
|
22696
|
-
standard:
|
|
22977
|
+
standard: AssessmentStandardRefSchema2
|
|
22697
22978
|
})
|
|
22698
22979
|
]);
|
|
22980
|
+
var AssessmentPreparationReceiptSchema = external_exports.string().max(32e3);
|
|
22981
|
+
var StartAssessmentRequestBodySchema = external_exports.intersection(StartAssessmentBodySchema, external_exports.object({ preparationReceipt: AssessmentPreparationReceiptSchema.optional() }));
|
|
22699
22982
|
var SaveAssessmentBodySchema = external_exports.object({
|
|
22700
22983
|
expectedResponseVersion: external_exports.number().int().nonnegative(),
|
|
22701
|
-
responses: external_exports.record(
|
|
22984
|
+
responses: external_exports.record(ResponseKeySchema2, external_exports.record(ResponseKeySchema2, AssessmentResponseValueSchema2.nullable()))
|
|
22702
22985
|
});
|
|
22703
22986
|
var SubmitAssessmentItemBodySchema = external_exports.object({
|
|
22704
22987
|
expectedResponseVersion: external_exports.number().int().nonnegative(),
|
|
22705
22988
|
submissionId: external_exports.string().trim().min(1),
|
|
22706
|
-
itemIdentifier:
|
|
22707
|
-
routingNodeKey:
|
|
22708
|
-
responses: external_exports.record(
|
|
22989
|
+
itemIdentifier: ResponseKeySchema2,
|
|
22990
|
+
routingNodeKey: ResponseKeySchema2.optional(),
|
|
22991
|
+
responses: external_exports.record(ResponseKeySchema2, AssessmentResponseValueSchema2.nullable())
|
|
22709
22992
|
});
|
|
22710
22993
|
var SubmitAssessmentBodySchema = external_exports.object({
|
|
22711
22994
|
expectedResponseVersion: external_exports.number().int().nonnegative(),
|
|
@@ -22723,7 +23006,8 @@ var FinalizeAssessmentBodySchema = external_exports.object({
|
|
|
22723
23006
|
message: "Provide either masteredUnits or masteredUnitsAbsolute, not both",
|
|
22724
23007
|
path: ["masteredUnits"]
|
|
22725
23008
|
});
|
|
22726
|
-
var
|
|
23009
|
+
var PrepareRuntimeAssessmentRequestSchema = AssessmentRuntimeIdentitySchema.and(StartAssessmentBodySchema);
|
|
23010
|
+
var StartRuntimeAssessmentRequestSchema = AssessmentRuntimeIdentitySchema.and(StartAssessmentRequestBodySchema);
|
|
22727
23011
|
var SaveRuntimeAssessmentRequestSchema = AssessmentRuntimeIdentitySchema.extend(SaveAssessmentBodySchema.shape);
|
|
22728
23012
|
var SubmitAssessmentItemRuntimeRequestSchema = AssessmentRuntimeIdentitySchema.extend(SubmitAssessmentItemBodySchema.shape);
|
|
22729
23013
|
var SubmitRuntimeAssessmentRequestSchema = AssessmentRuntimeIdentitySchema.extend(SubmitAssessmentBodySchema.shape).extend({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cliVersion": "0.30.
|
|
3
|
-
"sdkVersion": "0.18.
|
|
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
|
}
|