@playcademy/vite-plugin 1.3.1-beta.2 → 1.3.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/index.js +17 -104
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -24317,7 +24317,7 @@ import path2 from "node:path";
|
|
|
24317
24317
|
// package.json
|
|
24318
24318
|
var package_default = {
|
|
24319
24319
|
name: "@playcademy/vite-plugin",
|
|
24320
|
-
version: "1.3.1
|
|
24320
|
+
version: "1.3.1",
|
|
24321
24321
|
type: "module",
|
|
24322
24322
|
exports: {
|
|
24323
24323
|
".": {
|
|
@@ -25934,7 +25934,7 @@ var package_default2;
|
|
|
25934
25934
|
var init_package = __esm(() => {
|
|
25935
25935
|
package_default2 = {
|
|
25936
25936
|
name: "@playcademy/sandbox",
|
|
25937
|
-
version: "0.8.
|
|
25937
|
+
version: "0.8.0",
|
|
25938
25938
|
description: "Local development server for Playcademy game development",
|
|
25939
25939
|
type: "module",
|
|
25940
25940
|
exports: {
|
|
@@ -35697,39 +35697,21 @@ function compareNewestCompletedAssessmentAttempt(left, right) {
|
|
|
35697
35697
|
return newestAttempt(left, right, "scoreDate");
|
|
35698
35698
|
}
|
|
35699
35699
|
function compareAssessmentCatalogOrder(left, right) {
|
|
35700
|
-
if (left.sortOrder !== null || right.sortOrder !== null) {
|
|
35701
|
-
if (left.sortOrder === null) {
|
|
35702
|
-
return 1;
|
|
35703
|
-
}
|
|
35704
|
-
if (right.sortOrder === null) {
|
|
35705
|
-
return -1;
|
|
35706
|
-
}
|
|
35707
|
-
const orderDifference = left.sortOrder - right.sortOrder;
|
|
35708
|
-
if (orderDifference) {
|
|
35709
|
-
return orderDifference;
|
|
35710
|
-
}
|
|
35711
|
-
}
|
|
35712
|
-
const leftUpdatedAt = Date.parse(left.updatedAt);
|
|
35713
|
-
const rightUpdatedAt = Date.parse(right.updatedAt);
|
|
35714
|
-
const leftHasValidDate = Number.isFinite(leftUpdatedAt);
|
|
35715
|
-
const rightHasValidDate = Number.isFinite(rightUpdatedAt);
|
|
35716
|
-
if (leftHasValidDate && rightHasValidDate) {
|
|
35717
|
-
const updatedDifference = leftUpdatedAt - rightUpdatedAt;
|
|
35718
|
-
if (updatedDifference) {
|
|
35719
|
-
return updatedDifference;
|
|
35720
|
-
}
|
|
35721
|
-
} else if (leftHasValidDate !== rightHasValidDate) {
|
|
35722
|
-
return leftHasValidDate ? -1 : 1;
|
|
35723
|
-
}
|
|
35724
35700
|
if (left.assessmentKey !== null && right.assessmentKey !== null) {
|
|
35725
|
-
const keyDifference = left.assessmentKey
|
|
35701
|
+
const keyDifference = compareCodePoints(left.assessmentKey, right.assessmentKey);
|
|
35726
35702
|
if (keyDifference) {
|
|
35727
35703
|
return keyDifference;
|
|
35728
35704
|
}
|
|
35729
35705
|
} else if (left.assessmentKey !== null || right.assessmentKey !== null) {
|
|
35730
35706
|
return left.assessmentKey === null ? 1 : -1;
|
|
35731
35707
|
}
|
|
35732
|
-
return left.qtiTestIdentifier
|
|
35708
|
+
return compareCodePoints(left.qtiTestIdentifier, right.qtiTestIdentifier);
|
|
35709
|
+
}
|
|
35710
|
+
function compareCodePoints(left, right) {
|
|
35711
|
+
if (left === right) {
|
|
35712
|
+
return 0;
|
|
35713
|
+
}
|
|
35714
|
+
return left < right ? -1 : 1;
|
|
35733
35715
|
}
|
|
35734
35716
|
function orderRuntimeAssessmentTests(tests) {
|
|
35735
35717
|
return [...tests].toSorted(compareAssessmentCatalogOrder);
|
|
@@ -36574,7 +36556,7 @@ var REVIEW_SELECTION_POLICY_VERSION = "unseen-first-least-recently-delivered-v1"
|
|
|
36574
36556
|
var PLAYCADEMY_REVIEW_BANK_MANIFEST_METADATA_KEY = "playcademyReviewBank";
|
|
36575
36557
|
var PLAYCADEMY_REVIEW_BANK_MANIFEST_VERSION = 1;
|
|
36576
36558
|
var DEFAULT_REVIEW_SELECTION_POLICY;
|
|
36577
|
-
var ASSESSMENT_RUNTIME_FIXTURE_BUNDLE_VERSION =
|
|
36559
|
+
var ASSESSMENT_RUNTIME_FIXTURE_BUNDLE_VERSION = 8;
|
|
36578
36560
|
var RuntimeSubjectSchema;
|
|
36579
36561
|
var RuntimeGradeSchema;
|
|
36580
36562
|
var OptionalQueryGradeSchema;
|
|
@@ -71716,7 +71698,6 @@ var UpdateAssessmentRequestSchema;
|
|
|
71716
71698
|
var CopyAssessmentRequestSchema;
|
|
71717
71699
|
var AssessmentAssociationImportEntrySchema;
|
|
71718
71700
|
var AttachExistingAssessmentsRequestSchema;
|
|
71719
|
-
var ReorderAssessmentsRequestSchema;
|
|
71720
71701
|
var ReorderQuestionsRequestSchema;
|
|
71721
71702
|
var init_schemas4 = __esm(() => {
|
|
71722
71703
|
init_esm();
|
|
@@ -72004,8 +71985,7 @@ var init_schemas4 = __esm(() => {
|
|
|
72004
71985
|
assessmentKey: AssessmentKeySchema,
|
|
72005
71986
|
qtiTestIdentifier: exports_external.string().trim().min(1, "Assessment identifier is required"),
|
|
72006
71987
|
purpose: AssessmentPurposeSchema,
|
|
72007
|
-
standard: AssessmentStandardRefSchema2.optional()
|
|
72008
|
-
sortOrder: exports_external.number().int().nonnegative().nullable()
|
|
71988
|
+
standard: AssessmentStandardRefSchema2.optional()
|
|
72009
71989
|
}).superRefine((input, context2) => {
|
|
72010
71990
|
requireMasteryStandard(input, context2);
|
|
72011
71991
|
rejectSystemManagedReview(input, context2);
|
|
@@ -72055,10 +72035,6 @@ var init_schemas4 = __esm(() => {
|
|
|
72055
72035
|
seenKeys.add(assessment.assessmentKey);
|
|
72056
72036
|
});
|
|
72057
72037
|
});
|
|
72058
|
-
ReorderAssessmentsRequestSchema = exports_external.object({
|
|
72059
|
-
purpose: AssessmentPurposeSchema,
|
|
72060
|
-
testIdentifiers: exports_external.array(exports_external.string().trim().min(1, "Assessment identifier is required")).min(1, "At least one assessment is required")
|
|
72061
|
-
}).superRefine(rejectSystemManagedReview);
|
|
72062
72038
|
ReorderQuestionsRequestSchema = exports_external.object({
|
|
72063
72039
|
items: exports_external.array(exports_external.object({
|
|
72064
72040
|
identifier: exports_external.string().min(1),
|
|
@@ -126748,9 +126724,6 @@ function buildAssessmentAssociationUpdates(row, input) {
|
|
|
126748
126724
|
updates.standardFramework = null;
|
|
126749
126725
|
updates.standardIdentifier = null;
|
|
126750
126726
|
}
|
|
126751
|
-
if (row.status === "live" && input.purpose !== row.purpose) {
|
|
126752
|
-
updates.sortOrder = null;
|
|
126753
|
-
}
|
|
126754
126727
|
}
|
|
126755
126728
|
if (input.standard !== undefined) {
|
|
126756
126729
|
updates.standardFramework = input.standard.framework;
|
|
@@ -126758,9 +126731,6 @@ function buildAssessmentAssociationUpdates(row, input) {
|
|
|
126758
126731
|
}
|
|
126759
126732
|
if (input.status !== undefined) {
|
|
126760
126733
|
updates.status = input.status;
|
|
126761
|
-
if (input.status === "archived") {
|
|
126762
|
-
updates.sortOrder = null;
|
|
126763
|
-
}
|
|
126764
126734
|
}
|
|
126765
126735
|
return updates;
|
|
126766
126736
|
}
|
|
@@ -126769,24 +126739,8 @@ function assessmentStandardForRow(row) {
|
|
|
126769
126739
|
}
|
|
126770
126740
|
function validateUniqueAssessmentIdentifiers(testIdentifiers) {
|
|
126771
126741
|
if (new Set(testIdentifiers).size !== testIdentifiers.length) {
|
|
126772
|
-
throw new ValidationError("Assessment
|
|
126773
|
-
}
|
|
126774
|
-
}
|
|
126775
|
-
function assertAssessmentOrderUpdateSucceeded(updatedRow) {
|
|
126776
|
-
if (!updatedRow) {
|
|
126777
|
-
throw new ValidationError("Assessment order changed while it was being saved. Refresh and try again.");
|
|
126742
|
+
throw new ValidationError("Assessment manifests must contain unique QTI test identifiers");
|
|
126778
126743
|
}
|
|
126779
|
-
return updatedRow;
|
|
126780
|
-
}
|
|
126781
|
-
function lockOrderAssessmentRows(rows) {
|
|
126782
|
-
return rows.toSorted((left, right) => left.id.localeCompare(right.id));
|
|
126783
|
-
}
|
|
126784
|
-
function orderLiveAssessmentRows(liveRows, purpose, testIdentifiers) {
|
|
126785
|
-
const rowsByIdentifier = new Map(liveRows.map((row) => [row.qtiTestIdentifier, row]));
|
|
126786
|
-
if (liveRows.length !== testIdentifiers.length || testIdentifiers.some((identifier) => !rowsByIdentifier.has(identifier))) {
|
|
126787
|
-
throw new ValidationError(`Assessment order must include every live ${purpose} assessment exactly once`);
|
|
126788
|
-
}
|
|
126789
|
-
return testIdentifiers.map((identifier) => rowsByIdentifier.get(identifier));
|
|
126790
126744
|
}
|
|
126791
126745
|
var init_timeback_assessment_rules_util = __esm(() => {
|
|
126792
126746
|
init_errors2();
|
|
@@ -128291,8 +128245,6 @@ var init_timeback_assessment_runtime_service = __esm(async () => {
|
|
|
128291
128245
|
id: row.id,
|
|
128292
128246
|
assessmentKey: row.assessmentKey,
|
|
128293
128247
|
qtiTestIdentifier: row.qtiTestIdentifier,
|
|
128294
|
-
sortOrder: row.sortOrder,
|
|
128295
|
-
updatedAt: row.updatedAt.toISOString(),
|
|
128296
128248
|
standard: assessmentStandardForRow(row)
|
|
128297
128249
|
})).filter((test) => !matchesMasteryStandard || matchesMasteryStandard(test.standard));
|
|
128298
128250
|
}
|
|
@@ -129903,7 +129855,6 @@ class TimebackAssessmentsService {
|
|
|
129903
129855
|
...test ? { title: test.title } : {},
|
|
129904
129856
|
purpose: entry2.purpose,
|
|
129905
129857
|
...entry2.standard ? { standard: entry2.standard } : {},
|
|
129906
|
-
sourceSortOrder: entry2.sortOrder,
|
|
129907
129858
|
...test && gameSlug ? { editable: isQtiTestOwnedByGame(test, gameSlug) } : {}
|
|
129908
129859
|
};
|
|
129909
129860
|
}
|
|
@@ -129963,7 +129914,6 @@ class TimebackAssessmentsService {
|
|
|
129963
129914
|
qtiTestIdentifier: entry2.qtiTestIdentifier,
|
|
129964
129915
|
purpose: entry2.purpose,
|
|
129965
129916
|
status: input.targetStatus,
|
|
129966
|
-
sortOrder: entry2.sortOrder,
|
|
129967
129917
|
standardFramework: entry2.standard?.framework,
|
|
129968
129918
|
standardIdentifier: entry2.standard?.identifier
|
|
129969
129919
|
}).onConflictDoNothing().returning();
|
|
@@ -130096,7 +130046,7 @@ class TimebackAssessmentsService {
|
|
|
130096
130046
|
if (plan.kind === "delete") {
|
|
130097
130047
|
await tx.delete(gameTimebackAssessmentTests).where(eq(gameTimebackAssessmentTests.id, row.id));
|
|
130098
130048
|
} else if (plan.kind === "archive") {
|
|
130099
|
-
await tx.update(gameTimebackAssessmentTests).set({ status: "archived",
|
|
130049
|
+
await tx.update(gameTimebackAssessmentTests).set({ status: "archived", updatedAt: new Date }).where(eq(gameTimebackAssessmentTests.id, row.id));
|
|
130100
130050
|
}
|
|
130101
130051
|
if (plan.kind !== "none") {
|
|
130102
130052
|
setAttribute("app.assessment.operation", plan.operation);
|
|
@@ -130104,27 +130054,6 @@ class TimebackAssessmentsService {
|
|
|
130104
130054
|
return { action: plan.action };
|
|
130105
130055
|
});
|
|
130106
130056
|
}
|
|
130107
|
-
async reorderAssessments(integrationId, purpose, testIdentifiers) {
|
|
130108
|
-
if (purpose === "review") {
|
|
130109
|
-
throw new ValidationError("The review bank is system-managed and cannot be reordered.");
|
|
130110
|
-
}
|
|
130111
|
-
await this.requireIntegration(integrationId);
|
|
130112
|
-
validateUniqueAssessmentIdentifiers(testIdentifiers);
|
|
130113
|
-
const updatedAt = new Date;
|
|
130114
|
-
await this.deps.db.transaction(async (tx) => {
|
|
130115
|
-
const liveRows = await tx.query.gameTimebackAssessmentTests.findMany({
|
|
130116
|
-
where: and(eq(gameTimebackAssessmentTests.integrationId, integrationId), eq(gameTimebackAssessmentTests.purpose, purpose), eq(gameTimebackAssessmentTests.status, "live"))
|
|
130117
|
-
});
|
|
130118
|
-
const orderedRows = orderLiveAssessmentRows(liveRows, purpose, testIdentifiers);
|
|
130119
|
-
const positionByRowId = new Map(orderedRows.map((row, index2) => [row.id, index2 + 1]));
|
|
130120
|
-
for (const row of lockOrderAssessmentRows(orderedRows)) {
|
|
130121
|
-
const testIdentifier = row.qtiTestIdentifier;
|
|
130122
|
-
const [updatedRow] = await tx.update(gameTimebackAssessmentTests).set({ sortOrder: positionByRowId.get(row.id), updatedAt }).where(and(eq(gameTimebackAssessmentTests.id, row.id), eq(gameTimebackAssessmentTests.integrationId, integrationId), eq(gameTimebackAssessmentTests.qtiTestIdentifier, testIdentifier), eq(gameTimebackAssessmentTests.purpose, purpose), eq(gameTimebackAssessmentTests.status, "live"))).returning({ id: gameTimebackAssessmentTests.id });
|
|
130123
|
-
assertAssessmentOrderUpdateSucceeded(updatedRow);
|
|
130124
|
-
}
|
|
130125
|
-
});
|
|
130126
|
-
setAttribute("app.assessment.operation", "reorder_live_assessments");
|
|
130127
|
-
}
|
|
130128
130057
|
async listQuestions(integrationId, qtiTestIdentifier) {
|
|
130129
130058
|
const client2 = this.requireClient();
|
|
130130
130059
|
await this.requireAssessmentRow(integrationId, qtiTestIdentifier);
|
|
@@ -130587,15 +130516,14 @@ class TimebackAssessmentsService {
|
|
|
130587
130516
|
if (reservedKeyOwner && reservedKeyOwner.purpose !== "review") {
|
|
130588
130517
|
throw new ValidationError("The reserved review-bank assessment key is already in use.");
|
|
130589
130518
|
}
|
|
130590
|
-
const singletonCurrent = Boolean(singleton && singleton.assessmentKey === input.sinkIdentifier && singleton.status === "live" && singleton.
|
|
130591
|
-
const legacyCurrent = legacyReviews.every((association) => association.status === "archived" && association.
|
|
130519
|
+
const singletonCurrent = Boolean(singleton && singleton.assessmentKey === input.sinkIdentifier && singleton.status === "live" && singleton.standardFramework === null && singleton.standardIdentifier === null && singleton.diagnosticKey === null && singleton.diagnosticRoutingManifest === null);
|
|
130520
|
+
const legacyCurrent = legacyReviews.every((association) => association.status === "archived" && association.assessmentKey !== input.sinkIdentifier);
|
|
130592
130521
|
const changed = !singletonCurrent || !legacyCurrent;
|
|
130593
130522
|
await input.beforeInstall();
|
|
130594
130523
|
for (const legacy of legacyReviews) {
|
|
130595
|
-
if (legacy.status !== "archived" || legacy.
|
|
130524
|
+
if (legacy.status !== "archived" || legacy.assessmentKey === input.sinkIdentifier) {
|
|
130596
130525
|
await input.tx.update(gameTimebackAssessmentTests).set({
|
|
130597
130526
|
status: "archived",
|
|
130598
|
-
sortOrder: null,
|
|
130599
130527
|
...legacy.assessmentKey === input.sinkIdentifier ? { assessmentKey: null } : {},
|
|
130600
130528
|
updatedAt: new Date
|
|
130601
130529
|
}).where(eq(gameTimebackAssessmentTests.id, legacy.id));
|
|
@@ -130609,7 +130537,6 @@ class TimebackAssessmentsService {
|
|
|
130609
130537
|
assessmentKey: input.sinkIdentifier,
|
|
130610
130538
|
purpose: "review",
|
|
130611
130539
|
status: "live",
|
|
130612
|
-
sortOrder: null,
|
|
130613
130540
|
standardFramework: null,
|
|
130614
130541
|
standardIdentifier: null,
|
|
130615
130542
|
diagnosticKey: null,
|
|
@@ -130624,7 +130551,6 @@ class TimebackAssessmentsService {
|
|
|
130624
130551
|
qtiTestIdentifier: input.sinkIdentifier,
|
|
130625
130552
|
purpose: "review",
|
|
130626
130553
|
status: "live",
|
|
130627
|
-
sortOrder: null,
|
|
130628
130554
|
standardFramework: null,
|
|
130629
130555
|
standardIdentifier: null,
|
|
130630
130556
|
diagnosticKey: null,
|
|
@@ -130827,7 +130753,6 @@ class TimebackAssessmentsService {
|
|
|
130827
130753
|
qtiTestIdentifier: row.qtiTestIdentifier,
|
|
130828
130754
|
purpose: row.purpose,
|
|
130829
130755
|
status: row.status,
|
|
130830
|
-
sortOrder: row.sortOrder,
|
|
130831
130756
|
standard: assessmentStandardForRow(row),
|
|
130832
130757
|
diagnostic: diagnosticDefinitionForRow(row),
|
|
130833
130758
|
createdAt: row.createdAt,
|
|
@@ -193561,7 +193486,6 @@ var createAssessment;
|
|
|
193561
193486
|
var attachExistingAssessments;
|
|
193562
193487
|
var updateAssessment;
|
|
193563
193488
|
var synchronizeReviewBank;
|
|
193564
|
-
var reorderAssessments;
|
|
193565
193489
|
var reorderQuestions;
|
|
193566
193490
|
var removeAssessment;
|
|
193567
193491
|
var listQuestions;
|
|
@@ -194277,16 +194201,6 @@ var init_timeback_controller = __esm(() => {
|
|
|
194277
194201
|
const integrationId = await ctx.services.timebackAssessments.resolveIntegrationId(gameId, courseId, ctx.user);
|
|
194278
194202
|
return ctx.services.timebackAssessments.synchronizeReviewBank(integrationId);
|
|
194279
194203
|
});
|
|
194280
|
-
reorderAssessments = requireDeveloper(async (ctx) => {
|
|
194281
|
-
const { gameId, courseId } = ctx.params;
|
|
194282
|
-
if (!gameId || !courseId) {
|
|
194283
|
-
throw ApiError.badRequest("Missing gameId or courseId parameter");
|
|
194284
|
-
}
|
|
194285
|
-
const body2 = await parseRequestBody(ctx.request, ReorderAssessmentsRequestSchema);
|
|
194286
|
-
const integrationId = await ctx.services.timebackAssessments.resolveIntegrationId(gameId, courseId, ctx.user);
|
|
194287
|
-
await ctx.services.timebackAssessments.reorderAssessments(integrationId, body2.purpose, body2.testIdentifiers);
|
|
194288
|
-
return { success: true };
|
|
194289
|
-
});
|
|
194290
194204
|
reorderQuestions = requireDeveloper(async (ctx) => {
|
|
194291
194205
|
const { gameId, courseId, testIdentifier } = ctx.params;
|
|
194292
194206
|
if (!gameId || !courseId || !testIdentifier) {
|
|
@@ -194427,7 +194341,6 @@ var init_timeback_controller = __esm(() => {
|
|
|
194427
194341
|
attachExistingAssessments,
|
|
194428
194342
|
updateAssessment,
|
|
194429
194343
|
synchronizeReviewBank,
|
|
194430
|
-
reorderAssessments,
|
|
194431
194344
|
removeAssessment,
|
|
194432
194345
|
reorderQuestions,
|
|
194433
194346
|
listQuestions,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@playcademy/vite-plugin",
|
|
3
|
-
"version": "1.3.1
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -19,14 +19,14 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"archiver": "^7.0.1",
|
|
21
21
|
"picocolors": "^1.1.1",
|
|
22
|
-
"playcademy": "0.
|
|
22
|
+
"playcademy": "0.30.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@electric-sql/pglite": "^0.3.16",
|
|
26
26
|
"@inquirer/prompts": "^7.8.6",
|
|
27
27
|
"@playcademy/constants": "0.0.1",
|
|
28
|
-
"@playcademy/sandbox": "0.8.
|
|
29
|
-
"@playcademy/sdk": "0.
|
|
28
|
+
"@playcademy/sandbox": "0.8.0",
|
|
29
|
+
"@playcademy/sdk": "0.18.0",
|
|
30
30
|
"@playcademy/types": "0.0.1",
|
|
31
31
|
"@playcademy/utils": "0.0.1",
|
|
32
32
|
"@types/archiver": "^6.0.3",
|