@lxpack/runtime 0.2.0 → 0.2.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.
Files changed (49) hide show
  1. package/README.md +1 -1
  2. package/dist/client.js +2091 -1813
  3. package/dist/core/completion-evaluator.d.ts +13 -0
  4. package/dist/core/completion-evaluator.d.ts.map +1 -0
  5. package/dist/core/progress-state.d.ts +20 -0
  6. package/dist/core/progress-state.d.ts.map +1 -0
  7. package/dist/flow-conditions.d.ts +4 -0
  8. package/dist/flow-conditions.d.ts.map +1 -0
  9. package/dist/flow.d.ts +2 -2
  10. package/dist/flow.d.ts.map +1 -1
  11. package/dist/lms/bridge.d.ts +11 -0
  12. package/dist/lms/bridge.d.ts.map +1 -0
  13. package/dist/lms/completion-state.d.ts +10 -0
  14. package/dist/lms/completion-state.d.ts.map +1 -0
  15. package/dist/lms/factory.d.ts +5 -0
  16. package/dist/lms/factory.d.ts.map +1 -0
  17. package/dist/lms/local-bridge.d.ts +15 -0
  18. package/dist/lms/local-bridge.d.ts.map +1 -0
  19. package/dist/lms/scorm12-bridge.d.ts +15 -0
  20. package/dist/lms/scorm12-bridge.d.ts.map +1 -0
  21. package/dist/lms/scorm2004-bridge.d.ts +15 -0
  22. package/dist/lms/scorm2004-bridge.d.ts.map +1 -0
  23. package/dist/{progress-persist.d.ts → progress/codec.d.ts} +2 -3
  24. package/dist/progress/codec.d.ts.map +1 -0
  25. package/dist/progress/constants.d.ts +3 -0
  26. package/dist/progress/constants.d.ts.map +1 -0
  27. package/dist/progress/size-policy.d.ts +4 -0
  28. package/dist/progress/size-policy.d.ts.map +1 -0
  29. package/dist/quiz/host.d.ts +9 -0
  30. package/dist/quiz/host.d.ts.map +1 -0
  31. package/dist/quiz/score.d.ts +6 -0
  32. package/dist/quiz/score.d.ts.map +1 -0
  33. package/dist/quiz/types.d.ts +8 -0
  34. package/dist/quiz/types.d.ts.map +1 -0
  35. package/dist/runtime.d.ts +12 -14
  36. package/dist/runtime.d.ts.map +1 -1
  37. package/dist/runtime.js +292 -562
  38. package/dist/scorm-api.d.ts +1 -1
  39. package/dist/scorm-api.d.ts.map +1 -1
  40. package/dist/scorm12.d.ts +3 -0
  41. package/dist/scorm12.d.ts.map +1 -0
  42. package/dist/scorm12.js +247 -0
  43. package/dist/scorm2004-api.d.ts.map +1 -1
  44. package/dist/scorm2004.d.ts +2 -0
  45. package/dist/scorm2004.d.ts.map +1 -0
  46. package/dist/scorm2004.js +155 -0
  47. package/dist/size-policy-BE1zjEBP.js +137 -0
  48. package/package.json +11 -3
  49. package/dist/progress-persist.d.ts.map +0 -1
@@ -0,0 +1,13 @@
1
+ import type { CourseManifest } from "@lxpack/validators";
2
+ import type { AssessmentRuntimeConfig } from "@lxpack/validators";
3
+ import type { CourseProgress } from "../types.js";
4
+ import type { CompletionState } from "../lms/completion-state.js";
5
+ export interface CompletionEvaluatorOptions {
6
+ manifest: CourseManifest;
7
+ completionThreshold: number;
8
+ assessmentConfigs: Record<string, AssessmentRuntimeConfig>;
9
+ defaultPassingScores: Record<string, number>;
10
+ passedAssessments: Set<string>;
11
+ }
12
+ export declare function buildCompletionState(progress: CourseProgress, options: CompletionEvaluatorOptions): CompletionState;
13
+ //# sourceMappingURL=completion-evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-evaluator.d.ts","sourceRoot":"","sources":["../../src/core/completion-evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,cAAc,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAC3D,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAChC;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,0BAA0B,GAClC,eAAe,CAoCjB"}
@@ -0,0 +1,20 @@
1
+ import type { CourseManifest } from "@lxpack/validators";
2
+ import type { CourseProgress } from "../types.js";
3
+ export declare class ProgressState {
4
+ private readonly manifest;
5
+ private readonly defaultPassingScores;
6
+ progress: CourseProgress;
7
+ readonly passedAssessments: Set<string>;
8
+ constructor(initial: CourseProgress, manifest: CourseManifest, defaultPassingScores: Record<string, number>);
9
+ private getAssessmentPassingScore;
10
+ syncPassedAssessments(): void;
11
+ applyAssessmentResult(assessmentId: string, score: number, passingScore: number): void;
12
+ recordAssessmentAttempt(assessmentId: string): number;
13
+ getAssessmentAttemptCount(assessmentId: string): number;
14
+ completeLesson(lessonId: string): void;
15
+ setCurrentLesson(lessonId: string): void;
16
+ isLessonComplete(lessonId: string): boolean;
17
+ isAssessmentPassed(assessmentId: string): boolean;
18
+ getAssessmentPassingScoreForTrack(assessmentId: string): number;
19
+ }
20
+ //# sourceMappingURL=progress-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-state.d.ts","sourceRoot":"","sources":["../../src/core/progress-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,qBAAa,aAAa;IAMtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IANvC,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,iBAAiB,cAAqB;gBAG7C,OAAO,EAAE,cAAc,EACN,QAAQ,EAAE,cAAc,EACxB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAM/D,OAAO,CAAC,yBAAyB;IASjC,qBAAqB,IAAI,IAAI;IAS7B,qBAAqB,CACnB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,IAAI;IAWP,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAIrD,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAIvD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQtC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIxC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI3C,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAIjD,iCAAiC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;CAGhE"}
@@ -0,0 +1,4 @@
1
+ import type { Condition } from "@lxpack/validators";
2
+ import type { FlowContext } from "./flow.js";
3
+ export declare function evaluateCondition(condition: Condition, ctx: FlowContext): boolean;
4
+ //# sourceMappingURL=flow-conditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-conditions.d.ts","sourceRoot":"","sources":["../src/flow-conditions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAsC7C,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,WAAW,GACf,OAAO,CAQT"}
package/dist/flow.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import type { Condition, CourseManifest, FlowRule } from "@lxpack/validators";
1
+ import type { CourseManifest, FlowRule } from "@lxpack/validators";
2
2
  export interface FlowContext {
3
3
  getVariable: (name: string) => unknown;
4
4
  isAssessmentPassed: (id: string) => boolean;
5
5
  isInteractionDone: (id: string) => boolean;
6
6
  }
7
- export declare function evaluateCondition(condition: Condition, ctx: FlowContext): boolean;
7
+ export { evaluateCondition } from "./flow-conditions.js";
8
8
  export declare function resolveFlowGoto(manifest: CourseManifest, ctx: FlowContext): string | null;
9
9
  export declare function buildActivityOrder(manifest: CourseManifest): string[];
10
10
  export declare function resolveLinearAdjacent(manifest: CourseManifest, currentId: string, direction: 1 | -1): string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../src/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9E,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,WAAW,GACf,OAAO,CAkBT;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,WAAW,GACf,MAAM,GAAG,IAAI,CAUf;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE,CAMrE;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAChB,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,WAAW,GACf,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAEf;AAED,YAAY,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../src/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnE,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,WAAW,GACf,MAAM,GAAG,IAAI,CAUf;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE,CAMrE;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAChB,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,WAAW,GACf,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAEf;AAED,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { CourseProgress } from "../types.js";
2
+ import type { CompletionState } from "./completion-state.js";
3
+ export interface LmsBridge {
4
+ init(): void;
5
+ restoreProgress(defaults: CourseProgress): CourseProgress;
6
+ persist(progress: CourseProgress, serialized: string): void;
7
+ setLocation(lessonId: string): void;
8
+ applyCompletion(state: CompletionState): void;
9
+ terminate(): void;
10
+ }
11
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/lms/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,SAAS;IACxB,IAAI,IAAI,IAAI,CAAC;IACb,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,CAAC;IAC1D,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9C,SAAS,IAAI,IAAI,CAAC;CACnB"}
@@ -0,0 +1,10 @@
1
+ export interface CompletionState {
2
+ ratio: number;
3
+ scorePercent: number;
4
+ allLessonsComplete: boolean;
5
+ allAssessmentsPassed: boolean;
6
+ anyAssessmentFailed: boolean;
7
+ hasAssessments: boolean;
8
+ completionThreshold: number;
9
+ }
10
+ //# sourceMappingURL=completion-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-state.d.ts","sourceRoot":"","sources":["../../src/lms/completion-state.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,5 @@
1
+ import type { RuntimeConfig } from "../types.js";
2
+ import type { LmsBridge } from "./bridge.js";
3
+ export declare function progressStorageKey(title: string, version: string): string;
4
+ export declare function createLmsBridge(mode: RuntimeConfig["mode"], storageKey: string): LmsBridge;
5
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/lms/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM,CAQR;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,UAAU,EAAE,MAAM,GACjB,SAAS,CAWX"}
@@ -0,0 +1,15 @@
1
+ import type { CourseProgress } from "../types.js";
2
+ import type { CompletionState } from "./completion-state.js";
3
+ import type { LmsBridge } from "./bridge.js";
4
+ /** Preview / standalone: localStorage only, no LMS CMI. */
5
+ export declare class LocalBridge implements LmsBridge {
6
+ private readonly storageKey;
7
+ constructor(storageKey: string);
8
+ init(): void;
9
+ restoreProgress(defaults: CourseProgress): CourseProgress;
10
+ persist(_progress: CourseProgress, serialized: string): void;
11
+ setLocation(_lessonId: string): void;
12
+ applyCompletion(_state: CompletionState): void;
13
+ terminate(): void;
14
+ }
15
+ //# sourceMappingURL=local-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-bridge.d.ts","sourceRoot":"","sources":["../../src/lms/local-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,2DAA2D;AAC3D,qBAAa,WAAY,YAAW,SAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,MAAM;IAE/C,IAAI,IAAI,IAAI;IAIZ,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc;IAazD,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ5D,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIpC,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAI9C,SAAS,IAAI,IAAI;CAGlB"}
@@ -0,0 +1,15 @@
1
+ import type { CourseProgress } from "../types.js";
2
+ import type { ScormConnection } from "../scorm-api.js";
3
+ import type { CompletionState } from "./completion-state.js";
4
+ import type { LmsBridge } from "./bridge.js";
5
+ export declare class Scorm12Bridge implements LmsBridge {
6
+ private readonly connection;
7
+ constructor(connection: ScormConnection);
8
+ init(): void;
9
+ restoreProgress(defaults: CourseProgress): CourseProgress;
10
+ persist(_progress: CourseProgress, serialized: string): void;
11
+ setLocation(lessonId: string): void;
12
+ applyCompletion(state: CompletionState): void;
13
+ terminate(): void;
14
+ }
15
+ //# sourceMappingURL=scorm12-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scorm12-bridge.d.ts","sourceRoot":"","sources":["../../src/lms/scorm12-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,aAAc,YAAW,SAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,eAAe;IAExD,IAAI,IAAI,IAAI;IAIZ,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc;IAkBzD,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAK5D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAiB7C,SAAS,IAAI,IAAI;CAGlB"}
@@ -0,0 +1,15 @@
1
+ import type { CourseProgress } from "../types.js";
2
+ import type { Scorm2004Connection } from "../scorm2004-api.js";
3
+ import type { CompletionState } from "./completion-state.js";
4
+ import type { LmsBridge } from "./bridge.js";
5
+ export declare class Scorm2004Bridge implements LmsBridge {
6
+ private readonly connection;
7
+ constructor(connection: Scorm2004Connection);
8
+ init(): void;
9
+ restoreProgress(defaults: CourseProgress): CourseProgress;
10
+ persist(_progress: CourseProgress, serialized: string): void;
11
+ setLocation(lessonId: string): void;
12
+ applyCompletion(state: CompletionState): void;
13
+ terminate(): void;
14
+ }
15
+ //# sourceMappingURL=scorm2004-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scorm2004-bridge.d.ts","sourceRoot":"","sources":["../../src/lms/scorm2004-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,eAAgB,YAAW,SAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,mBAAmB;IAE5D,IAAI,IAAI,IAAI;IAIZ,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc;IAkBzD,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAK5D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAkB7C,SAAS,IAAI,IAAI;CAGlB"}
@@ -1,4 +1,4 @@
1
- import type { CourseProgress } from "./types.js";
1
+ import type { CourseProgress } from "../types.js";
2
2
  interface CompactProgress {
3
3
  c?: string;
4
4
  l?: string[];
@@ -7,11 +7,10 @@ interface CompactProgress {
7
7
  }
8
8
  export declare function compactProgress(progress: CourseProgress): CompactProgress;
9
9
  export declare function expandProgress(compact: CompactProgress, defaults: CourseProgress): CourseProgress;
10
- export declare function serializeProgressForStorage(progress: CourseProgress): string;
11
10
  export declare function expandLegacyProgress(saved: Partial<CourseProgress>, defaults: CourseProgress): CourseProgress;
12
11
  export declare function parseStoredProgress(raw: string, defaults: CourseProgress): {
13
12
  progress: CourseProgress;
14
13
  parsed: boolean;
15
14
  };
16
15
  export {};
17
- //# sourceMappingURL=progress-persist.d.ts.map
16
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/progress/codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,UAAU,eAAe;IACvB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,eAAe,CAWzE;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,cAAc,GACvB,cAAc,CAahB;AAYD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,EAC9B,QAAQ,EAAE,cAAc,GACvB,cAAc,CAehB;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,GACvB;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAa/C"}
@@ -0,0 +1,3 @@
1
+ /** SCORM 1.2 suspend_data character limit (cmi.suspend_data). */
2
+ export declare const SCORM_SUSPEND_DATA_MAX = 4096;
3
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/progress/constants.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,OAAO,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CourseProgress } from "../types.js";
2
+ export declare function serializeProgressForStorage(progress: CourseProgress, maxBytes?: number): string;
3
+ export declare function trimSuspendData(data: string, maxBytes?: number): string;
4
+ //# sourceMappingURL=size-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"size-policy.d.ts","sourceRoot":"","sources":["../../src/progress/size-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAkHlD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,cAAc,EACxB,QAAQ,SAAyB,GAChC,MAAM,CAmBR;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAyB,GAChC,MAAM,CAmBR"}
@@ -0,0 +1,9 @@
1
+ import type { CourseProgress } from "../types.js";
2
+ /** Minimal surface for quiz UI (ISP). */
3
+ export interface AssessmentHost {
4
+ getProgress(): CourseProgress;
5
+ getAssessmentAttemptCount(assessmentId: string): number;
6
+ isAssessmentPassed(assessmentId: string): boolean;
7
+ submitAssessment(assessmentId: string, score: number, passingScore: number): void;
8
+ }
9
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/quiz/host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,WAAW,IAAI,cAAc,CAAC;IAC9B,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IACxD,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IAClD,gBAAgB,CACd,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,IAAI,CAAC;CACT"}
@@ -0,0 +1,6 @@
1
+ import type { LearnerAssessment } from "@lxpack/validators";
2
+ export declare function scoreAssessmentForm(assessment: LearnerAssessment, answerKey: Record<string, string>, form: HTMLFormElement): number;
3
+ export declare function shuffleQuestions<T>(items: T[]): T[];
4
+ export declare function getAttemptCount(suspendData: Record<string, unknown>, assessmentId: string): number;
5
+ export declare function incrementAttemptCount(suspendData: Record<string, unknown>, assessmentId: string): number;
6
+ //# sourceMappingURL=score.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../src/quiz/score.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,iBAAiB,EAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,IAAI,EAAE,eAAe,GACpB,MAAM,CAYR;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAOnD;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,YAAY,EAAE,MAAM,GACnB,MAAM,CASR;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,YAAY,EAAE,MAAM,GACnB,MAAM,CAIR"}
@@ -0,0 +1,8 @@
1
+ import type { AssessmentRuntimeConfig, LearnerAssessment, QuestionFeedback } from "@lxpack/validators";
2
+ export type { AssessmentRuntimeConfig, QuestionFeedback };
3
+ export declare const DEFAULT_ASSESSMENT_CONFIG: AssessmentRuntimeConfig;
4
+ export interface RuntimeAssessmentPayload extends LearnerAssessment {
5
+ config?: Partial<AssessmentRuntimeConfig>;
6
+ feedback?: QuestionFeedback;
7
+ }
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/quiz/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,CAAC;AAE1D,eAAO,MAAM,yBAAyB,EAAE,uBAIvC,CAAC;AAEF,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B"}
package/dist/runtime.d.ts CHANGED
@@ -1,29 +1,24 @@
1
1
  import type { CourseManifest, CourseProgress, LxpackAPI, RuntimeConfig, TrackEvent } from "./types.js";
2
2
  import type { FlowContext } from "./flow.js";
3
- export declare class LxpackRuntime {
3
+ import type { AssessmentHost } from "./quiz/host.js";
4
+ export declare class LxpackRuntime implements AssessmentHost {
4
5
  private manifest;
5
- private progress;
6
- private scorm;
7
- private scorm2004;
6
+ private state;
7
+ private bridge;
8
8
  private completionThreshold;
9
- private storageKey;
10
- private mode;
11
- private passedAssessments;
9
+ private assessmentConfigs;
12
10
  private defaultPassingScores;
13
11
  private terminated;
14
12
  constructor(config: RuntimeConfig);
15
- private restoreLessonLocation;
16
- private restoreScorm2004Progress;
17
- private restoreScormProgress;
18
- private restoreLocalProgress;
19
- private syncPassedAssessments;
20
- private getAssessmentPassingScore;
21
13
  getAPI(): LxpackAPI;
22
14
  track(event: TrackEvent, options?: {
23
15
  persist?: boolean;
24
16
  }): void;
25
- private applyAssessmentResult;
17
+ recordAssessmentAttempt(assessmentId: string): number;
18
+ getAssessmentAttemptCount(assessmentId: string): number;
26
19
  submitAssessment(assessmentId: string, score: number, passingScore: number): void;
20
+ private getMaxAttempts;
21
+ private canAcceptAssessmentSubmission;
27
22
  completeLesson(lessonId: string): void;
28
23
  setCurrentLesson(lessonId: string): void;
29
24
  getProgress(): CourseProgress;
@@ -39,5 +34,8 @@ export declare class LxpackRuntime {
39
34
  terminate(): void;
40
35
  }
41
36
  export { createScormConnection, findLmsApi, Scorm12Adapter, Scorm12Simulator, Scorm12API, installScormAPI, trimSuspendData, } from "./scorm-api.js";
37
+ export { SCORM_SUSPEND_DATA_MAX } from "./progress/constants.js";
42
38
  export type { CourseManifest, CourseProgress, LxpackAPI, RuntimeConfig, TrackEvent };
39
+ export type { LmsBridge } from "./lms/bridge.js";
40
+ export type { AssessmentHost } from "./quiz/host.js";
43
41
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAkBpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAa7C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,oBAAoB,CAAyB;IACrD,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,aAAa;IAuCjC,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,yBAAyB;IASjC,MAAM,IAAI,SAAS;IA6BnB,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IA2B/D,OAAO,CAAC,qBAAqB;IAe7B,gBAAgB,CACd,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,IAAI;IAMP,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAWtC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAWxC,WAAW,IAAI,cAAc;IAI7B,WAAW,IAAI,cAAc;IAI7B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI3C,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAIjD,aAAa,IAAI,MAAM;IAKvB,kBAAkB,IAAI,MAAM;IAc5B,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,CAAC,OAAO;IAqBf,cAAc,IAAI,WAAW;IAS7B,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,SAAS,IAAI,IAAI;CAUlB;AAED,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAOpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAQ7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,oBAAoB,CAAyB;IACrD,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,aAAa;IA0CjC,MAAM,IAAI,SAAS;IAwBnB,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAuB/D,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAIrD,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAIvD,gBAAgB,CACd,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,IAAI;IAUP,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,6BAA6B;IAQrC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMtC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,WAAW,IAAI,cAAc;IAU7B,WAAW,IAAI,cAAc;IAI7B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI3C,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAIjD,aAAa,IAAI,MAAM;IAKvB,kBAAkB,IAAI,MAAM;IAU5B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,OAAO;IAKf,cAAc,IAAI,WAAW;IAU7B,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,SAAS,IAAI,IAAI;CAKlB;AAED,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACrF,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}