@lxpack/runtime 0.2.1 → 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.
- package/README.md +1 -1
- package/dist/client.js +1489 -1452
- package/dist/progress/size-policy.d.ts.map +1 -1
- package/dist/quiz/score.d.ts.map +1 -1
- package/dist/quiz/types.d.ts +8 -0
- package/dist/quiz/types.d.ts.map +1 -0
- package/dist/runtime.d.ts +2 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +67 -51
- package/dist/scorm12.js +245 -9
- package/dist/scorm2004-api.d.ts.map +1 -1
- package/dist/scorm2004.js +25 -23
- package/dist/size-policy-BE1zjEBP.js +137 -0
- package/package.json +2 -2
- package/dist/scorm12-DpGWvsHb.js +0 -375
|
@@ -1 +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;
|
|
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"}
|
package/dist/quiz/score.d.ts.map
CHANGED
|
@@ -1 +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,
|
|
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
|
@@ -17,6 +17,8 @@ export declare class LxpackRuntime implements AssessmentHost {
|
|
|
17
17
|
recordAssessmentAttempt(assessmentId: string): number;
|
|
18
18
|
getAssessmentAttemptCount(assessmentId: string): number;
|
|
19
19
|
submitAssessment(assessmentId: string, score: number, passingScore: number): void;
|
|
20
|
+
private getMaxAttempts;
|
|
21
|
+
private canAcceptAssessmentSubmission;
|
|
20
22
|
completeLesson(lessonId: string): void;
|
|
21
23
|
setCurrentLesson(lessonId: string): void;
|
|
22
24
|
getProgress(): CourseProgress;
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -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;AAOpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,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"}
|
package/dist/runtime.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
var
|
|
2
|
-
var T = (t, s, e) => s in t ?
|
|
1
|
+
var F = Object.defineProperty;
|
|
2
|
+
var T = (t, s, e) => s in t ? F(t, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : t[s] = e;
|
|
3
3
|
var a = (t, s, e) => T(t, typeof s != "symbol" ? s + "" : s, e);
|
|
4
|
-
import { p as f,
|
|
5
|
-
import { S as
|
|
6
|
-
import {
|
|
7
|
-
|
|
4
|
+
import { p as f, s as N } from "./size-policy-BE1zjEBP.js";
|
|
5
|
+
import { S as Y } from "./size-policy-BE1zjEBP.js";
|
|
6
|
+
import { createScormConnection as V } from "./scorm12.js";
|
|
7
|
+
import { Scorm12API as ss, Scorm12Adapter as es, Scorm12Simulator as ts, findLmsApi as ns, installScormAPI as is, trimSuspendData as rs } from "./scorm12.js";
|
|
8
|
+
import { createScorm2004Connection as v } from "./scorm2004.js";
|
|
9
|
+
const I = "v:";
|
|
8
10
|
function g(t) {
|
|
9
|
-
return `${
|
|
11
|
+
return `${I}${t}`;
|
|
10
12
|
}
|
|
11
13
|
function y(t, s) {
|
|
12
14
|
for (const [e, n] of Object.entries(t.variables ?? {})) {
|
|
@@ -20,7 +22,7 @@ function _(t, s) {
|
|
|
20
22
|
function $(t, s, e) {
|
|
21
23
|
t[g(s)] = e;
|
|
22
24
|
}
|
|
23
|
-
const
|
|
25
|
+
const G = [
|
|
24
26
|
(t, s) => {
|
|
25
27
|
var e;
|
|
26
28
|
if ("variable" in t && ((e = t.variable) != null && e.eq)) {
|
|
@@ -41,7 +43,7 @@ const R = [
|
|
|
41
43
|
(t, s) => "any" in t && t.any ? t.any.some((e) => d(e, s)) : null
|
|
42
44
|
];
|
|
43
45
|
function d(t, s) {
|
|
44
|
-
for (const e of
|
|
46
|
+
for (const e of G) {
|
|
45
47
|
const n = e(t, s);
|
|
46
48
|
if (n !== null)
|
|
47
49
|
return n;
|
|
@@ -56,7 +58,10 @@ function k(t, s) {
|
|
|
56
58
|
return n.goto;
|
|
57
59
|
return null;
|
|
58
60
|
}
|
|
59
|
-
|
|
61
|
+
const R = {
|
|
62
|
+
maxAttempts: 1
|
|
63
|
+
};
|
|
64
|
+
class B {
|
|
60
65
|
constructor(s) {
|
|
61
66
|
this.connection = s;
|
|
62
67
|
}
|
|
@@ -89,7 +94,7 @@ class G {
|
|
|
89
94
|
this.connection.LMSFinish();
|
|
90
95
|
}
|
|
91
96
|
}
|
|
92
|
-
class
|
|
97
|
+
class E {
|
|
93
98
|
constructor(s) {
|
|
94
99
|
this.connection = s;
|
|
95
100
|
}
|
|
@@ -157,15 +162,16 @@ function K(t, s) {
|
|
|
157
162
|
n = (n << 5) - n + e.charCodeAt(i), n |= 0;
|
|
158
163
|
return `lxpack_progress_${Math.abs(n)}`;
|
|
159
164
|
}
|
|
160
|
-
function
|
|
161
|
-
return t === "scorm12" ? new
|
|
165
|
+
function O(t, s) {
|
|
166
|
+
return t === "scorm12" ? new B(V("scorm12")) : t === "scorm2004" ? new E(v("scorm2004")) : t === "preview" || t === "standalone" ? new D(s) : new D(s);
|
|
162
167
|
}
|
|
163
|
-
function
|
|
168
|
+
function A(t, s) {
|
|
164
169
|
const e = t[`assessment_attempts_${s}`];
|
|
165
|
-
|
|
170
|
+
let n = 0;
|
|
171
|
+
return typeof e == "number" ? n = e : typeof e == "string" && e !== "" && !Number.isNaN(Number(e)) && (n = Number(e)), !Number.isFinite(n) || n < 0 ? 0 : Math.floor(n);
|
|
166
172
|
}
|
|
167
|
-
function
|
|
168
|
-
const e =
|
|
173
|
+
function z(t, s) {
|
|
174
|
+
const e = A(t, s) + 1;
|
|
169
175
|
return t[`assessment_attempts_${s}`] = e, e;
|
|
170
176
|
}
|
|
171
177
|
class j {
|
|
@@ -187,10 +193,10 @@ class j {
|
|
|
187
193
|
this.progress.assessmentScores[s] = e, this.progress.suspendData[`assessment_passing_${s}`] = n, e >= n ? this.passedAssessments.add(s) : this.passedAssessments.delete(s);
|
|
188
194
|
}
|
|
189
195
|
recordAssessmentAttempt(s) {
|
|
190
|
-
return
|
|
196
|
+
return z(this.progress.suspendData, s);
|
|
191
197
|
}
|
|
192
198
|
getAssessmentAttemptCount(s) {
|
|
193
|
-
return
|
|
199
|
+
return A(this.progress.suspendData, s);
|
|
194
200
|
}
|
|
195
201
|
completeLesson(s) {
|
|
196
202
|
new Set(this.manifest.lessons.map((n) => n.id)).has(s) && (this.progress.completedLessons.includes(s) || this.progress.completedLessons.push(s));
|
|
@@ -208,29 +214,29 @@ class j {
|
|
|
208
214
|
return this.getAssessmentPassingScore(s);
|
|
209
215
|
}
|
|
210
216
|
}
|
|
211
|
-
function
|
|
212
|
-
var
|
|
213
|
-
const { manifest: e, completionThreshold: n, passedAssessments: i } = s, c = e.lessons.length, r = ((
|
|
214
|
-
(o) => e.lessons.some((
|
|
215
|
-
).length, u =
|
|
217
|
+
function x(t, s) {
|
|
218
|
+
var S, L, C, P;
|
|
219
|
+
const { manifest: e, completionThreshold: n, passedAssessments: i } = s, c = e.lessons.length, r = ((S = e.assessments) == null ? void 0 : S.length) ?? 0, m = c + r, l = t.completedLessons.filter(
|
|
220
|
+
(o) => e.lessons.some((h) => h.id === o)
|
|
221
|
+
).length, u = m === 0 ? 0 : (l + i.size) / m, p = e.lessons.every(
|
|
216
222
|
(o) => t.completedLessons.includes(o.id)
|
|
217
|
-
),
|
|
223
|
+
), M = !((L = e.assessments) != null && L.length) || e.assessments.every((o) => i.has(o.id)), w = (C = e.assessments) == null ? void 0 : C.some((o) => {
|
|
218
224
|
var b;
|
|
219
225
|
if (!(o.id in t.assessmentScores) || i.has(o.id)) return !1;
|
|
220
|
-
const
|
|
221
|
-
return
|
|
226
|
+
const h = ((b = s.assessmentConfigs[o.id]) == null ? void 0 : b.maxAttempts) ?? 1;
|
|
227
|
+
return A(t.suspendData, o.id) >= h;
|
|
222
228
|
});
|
|
223
229
|
return {
|
|
224
230
|
ratio: u,
|
|
225
231
|
scorePercent: Math.round(u * 100),
|
|
226
|
-
allLessonsComplete:
|
|
227
|
-
allAssessmentsPassed:
|
|
228
|
-
anyAssessmentFailed: !!
|
|
232
|
+
allLessonsComplete: p,
|
|
233
|
+
allAssessmentsPassed: M,
|
|
234
|
+
anyAssessmentFailed: !!w,
|
|
229
235
|
hasAssessments: (((P = e.assessments) == null ? void 0 : P.length) ?? 0) > 0,
|
|
230
236
|
completionThreshold: n
|
|
231
237
|
};
|
|
232
238
|
}
|
|
233
|
-
class
|
|
239
|
+
class J {
|
|
234
240
|
constructor(s) {
|
|
235
241
|
a(this, "manifest");
|
|
236
242
|
a(this, "state");
|
|
@@ -239,17 +245,17 @@ class X {
|
|
|
239
245
|
a(this, "assessmentConfigs");
|
|
240
246
|
a(this, "defaultPassingScores");
|
|
241
247
|
a(this, "terminated", !1);
|
|
242
|
-
var r,
|
|
243
|
-
this.manifest = s.manifest, this.completionThreshold = ((
|
|
248
|
+
var r, m, l;
|
|
249
|
+
this.manifest = s.manifest, this.completionThreshold = ((m = (r = s.manifest.tracking) == null ? void 0 : r.completion) == null ? void 0 : m.threshold) ?? 0.9;
|
|
244
250
|
const e = K(
|
|
245
251
|
s.manifest.title,
|
|
246
252
|
s.manifest.version
|
|
247
253
|
);
|
|
248
|
-
this.bridge =
|
|
249
|
-
for (const [u,
|
|
250
|
-
this.defaultPassingScores[u] =
|
|
254
|
+
this.bridge = O(s.mode, e), this.defaultPassingScores = {};
|
|
255
|
+
for (const [u, p] of Object.entries(s.assessments ?? {}))
|
|
256
|
+
this.defaultPassingScores[u] = p.passingScore;
|
|
251
257
|
this.assessmentConfigs = s.assessmentConfigs ?? {};
|
|
252
|
-
const n = s.activityId ?? ((
|
|
258
|
+
const n = s.activityId ?? ((l = s.manifest.lessons[0]) == null ? void 0 : l.id) ?? "", i = s.progress ?? {
|
|
253
259
|
currentLessonId: n,
|
|
254
260
|
completedLessons: [],
|
|
255
261
|
assessmentScores: {},
|
|
@@ -280,7 +286,7 @@ class X {
|
|
|
280
286
|
if (s.type === "interaction" && s.id && (this.state.progress.suspendData[`interaction_${s.id}`] = s.data ?? !0, console.debug("[lxpack] interaction:", s.id, s.data)), s.type === "assessment" && s.id) {
|
|
281
287
|
const c = typeof ((n = s.data) == null ? void 0 : n.passingScore) == "number" ? Number(s.data.passingScore) : this.state.getAssessmentPassingScoreForTrack(s.id), r = ((i = s.data) == null ? void 0 : i.score) != null ? Number(s.data.score) : void 0;
|
|
282
288
|
if (r != null && !Number.isNaN(r)) {
|
|
283
|
-
this.
|
|
289
|
+
this.submitAssessment(s.id, r, c);
|
|
284
290
|
return;
|
|
285
291
|
}
|
|
286
292
|
}
|
|
@@ -293,7 +299,17 @@ class X {
|
|
|
293
299
|
return this.state.getAssessmentAttemptCount(s);
|
|
294
300
|
}
|
|
295
301
|
submitAssessment(s, e, n) {
|
|
296
|
-
this.state.recordAssessmentAttempt(s), this.state.applyAssessmentResult(s, e, n), this.updateCompletion(), this.persist();
|
|
302
|
+
this.canAcceptAssessmentSubmission(s) && (this.state.recordAssessmentAttempt(s), this.state.applyAssessmentResult(s, e, n), this.updateCompletion(), this.persist());
|
|
303
|
+
}
|
|
304
|
+
getMaxAttempts(s) {
|
|
305
|
+
const e = this.assessmentConfigs[s];
|
|
306
|
+
return (e == null ? void 0 : e.maxAttempts) ?? R.maxAttempts;
|
|
307
|
+
}
|
|
308
|
+
canAcceptAssessmentSubmission(s) {
|
|
309
|
+
if (this.isAssessmentPassed(s))
|
|
310
|
+
return !1;
|
|
311
|
+
const e = this.getMaxAttempts(s);
|
|
312
|
+
return this.getAssessmentAttemptCount(s) < e;
|
|
297
313
|
}
|
|
298
314
|
completeLesson(s) {
|
|
299
315
|
this.state.completeLesson(s), this.updateCompletion(), this.persist();
|
|
@@ -325,7 +341,7 @@ class X {
|
|
|
325
341
|
return this.manifest.lessons.length + s;
|
|
326
342
|
}
|
|
327
343
|
getCompletionRatio() {
|
|
328
|
-
return
|
|
344
|
+
return x(this.state.progress, {
|
|
329
345
|
manifest: this.manifest,
|
|
330
346
|
completionThreshold: this.completionThreshold,
|
|
331
347
|
assessmentConfigs: this.assessmentConfigs,
|
|
@@ -334,7 +350,7 @@ class X {
|
|
|
334
350
|
}).ratio;
|
|
335
351
|
}
|
|
336
352
|
updateCompletion() {
|
|
337
|
-
const s =
|
|
353
|
+
const s = x(this.state.progress, {
|
|
338
354
|
manifest: this.manifest,
|
|
339
355
|
completionThreshold: this.completionThreshold,
|
|
340
356
|
assessmentConfigs: this.assessmentConfigs,
|
|
@@ -344,7 +360,7 @@ class X {
|
|
|
344
360
|
this.bridge.applyCompletion(s);
|
|
345
361
|
}
|
|
346
362
|
persist() {
|
|
347
|
-
const s =
|
|
363
|
+
const s = N(this.state.progress);
|
|
348
364
|
this.bridge.persist(this.state.progress, s);
|
|
349
365
|
}
|
|
350
366
|
getFlowContext() {
|
|
@@ -362,13 +378,13 @@ class X {
|
|
|
362
378
|
}
|
|
363
379
|
}
|
|
364
380
|
export {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
381
|
+
J as LxpackRuntime,
|
|
382
|
+
Y as SCORM_SUSPEND_DATA_MAX,
|
|
383
|
+
ss as Scorm12API,
|
|
384
|
+
es as Scorm12Adapter,
|
|
385
|
+
ts as Scorm12Simulator,
|
|
386
|
+
V as createScormConnection,
|
|
387
|
+
ns as findLmsApi,
|
|
388
|
+
is as installScormAPI,
|
|
389
|
+
rs as trimSuspendData
|
|
374
390
|
};
|
package/dist/scorm12.js
CHANGED
|
@@ -1,11 +1,247 @@
|
|
|
1
|
-
|
|
1
|
+
var u = Object.defineProperty;
|
|
2
|
+
var d = (r, t, e) => t in r ? u(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
|
|
3
|
+
var s = (r, t, e) => d(r, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
+
import { t as S } from "./size-policy-BE1zjEBP.js";
|
|
5
|
+
import { S as T } from "./size-policy-BE1zjEBP.js";
|
|
6
|
+
const i = "0", a = "301", n = "302", h = "lxpack_scorm12_preview";
|
|
7
|
+
function m(r = 500) {
|
|
8
|
+
let t = window, e = 0;
|
|
9
|
+
for (; t && e < r; ) {
|
|
10
|
+
try {
|
|
11
|
+
const c = t.API;
|
|
12
|
+
if (c && typeof c.LMSInitialize == "function")
|
|
13
|
+
return c;
|
|
14
|
+
} catch {
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
if (t.parent && t.parent !== t)
|
|
18
|
+
t = t.parent;
|
|
19
|
+
else if (t.opener && !t.opener.closed)
|
|
20
|
+
t = t.opener;
|
|
21
|
+
else
|
|
22
|
+
break;
|
|
23
|
+
} catch {
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
e++;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
class f {
|
|
31
|
+
constructor(t) {
|
|
32
|
+
s(this, "api");
|
|
33
|
+
s(this, "initialized", !1);
|
|
34
|
+
s(this, "terminated", !1);
|
|
35
|
+
s(this, "lastError", i);
|
|
36
|
+
this.api = t;
|
|
37
|
+
}
|
|
38
|
+
LMSInitialize() {
|
|
39
|
+
if (this.initialized)
|
|
40
|
+
return this.lastError = a, "false";
|
|
41
|
+
const t = this.api.LMSInitialize("");
|
|
42
|
+
return t === "true" && (this.initialized = !0, this.terminated = !1, this.lastError = i), t;
|
|
43
|
+
}
|
|
44
|
+
LMSFinish() {
|
|
45
|
+
if (!this.initialized || this.terminated)
|
|
46
|
+
return this.lastError = n, "false";
|
|
47
|
+
const t = this.api.LMSFinish("");
|
|
48
|
+
return t === "true" && (this.terminated = !0, this.lastError = i), t;
|
|
49
|
+
}
|
|
50
|
+
LMSGetValue(t) {
|
|
51
|
+
return !this.initialized || this.terminated ? (this.lastError = a, "") : (this.lastError = i, this.api.LMSGetValue(t));
|
|
52
|
+
}
|
|
53
|
+
LMSSetValue(t, e) {
|
|
54
|
+
return !this.initialized || this.terminated ? (this.lastError = a, "false") : (this.lastError = i, this.api.LMSSetValue(t, e));
|
|
55
|
+
}
|
|
56
|
+
LMSCommit() {
|
|
57
|
+
return !this.initialized || this.terminated ? (this.lastError = a, "false") : (this.lastError = i, this.api.LMSCommit(""));
|
|
58
|
+
}
|
|
59
|
+
LMSGetLastError() {
|
|
60
|
+
return this.lastError;
|
|
61
|
+
}
|
|
62
|
+
LMSGetErrorString(t) {
|
|
63
|
+
const e = t ?? this.lastError;
|
|
64
|
+
return e === a ? "Not initialized" : e === n ? "Already terminated" : this.api.LMSGetErrorString(e);
|
|
65
|
+
}
|
|
66
|
+
LMSGetDiagnostic(t) {
|
|
67
|
+
return this.api.LMSGetDiagnostic(t ?? this.lastError);
|
|
68
|
+
}
|
|
69
|
+
setLessonStatus(t) {
|
|
70
|
+
this.LMSSetValue("cmi.core.lesson_status", t);
|
|
71
|
+
}
|
|
72
|
+
setScore(t, e = 100) {
|
|
73
|
+
this.LMSSetValue("cmi.core.score.raw", String(t)), this.LMSSetValue("cmi.core.score.max", String(e)), this.LMSSetValue("cmi.core.score.min", "0");
|
|
74
|
+
}
|
|
75
|
+
setSuspendData(t) {
|
|
76
|
+
const e = l(t);
|
|
77
|
+
this.LMSSetValue("cmi.suspend_data", e);
|
|
78
|
+
}
|
|
79
|
+
setLessonLocation(t) {
|
|
80
|
+
this.LMSSetValue("cmi.core.lesson_location", t);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
class o {
|
|
84
|
+
constructor(t = {}) {
|
|
85
|
+
s(this, "data", {
|
|
86
|
+
lessonStatus: "not attempted",
|
|
87
|
+
scoreRaw: 0,
|
|
88
|
+
scoreMin: 0,
|
|
89
|
+
scoreMax: 100,
|
|
90
|
+
suspendData: "",
|
|
91
|
+
lessonLocation: "",
|
|
92
|
+
entry: "ab-initio",
|
|
93
|
+
exit: "",
|
|
94
|
+
sessionTime: "00:00:00"
|
|
95
|
+
});
|
|
96
|
+
s(this, "initialized", !1);
|
|
97
|
+
s(this, "terminated", !1);
|
|
98
|
+
s(this, "lastError", i);
|
|
99
|
+
s(this, "persistToStorage");
|
|
100
|
+
this.persistToStorage = t.persistToStorage ?? !1, t.initialData && (this.data = { ...this.data, ...t.initialData }), this.persistToStorage && this.loadFromStorage();
|
|
101
|
+
}
|
|
102
|
+
LMSInitialize() {
|
|
103
|
+
return this.initialized ? (this.lastError = a, "false") : (this.initialized = !0, this.terminated = !1, this.lastError = i, "true");
|
|
104
|
+
}
|
|
105
|
+
LMSFinish() {
|
|
106
|
+
return !this.initialized || this.terminated ? (this.lastError = n, "false") : (this.data.exit = "suspend", this.terminated = !0, this.saveToStorage(), this.lastError = i, "true");
|
|
107
|
+
}
|
|
108
|
+
LMSGetValue(t) {
|
|
109
|
+
if (!this.initialized || this.terminated)
|
|
110
|
+
return this.lastError = a, "";
|
|
111
|
+
switch (this.lastError = i, t) {
|
|
112
|
+
case "cmi.core.lesson_status":
|
|
113
|
+
return this.data.lessonStatus;
|
|
114
|
+
case "cmi.core.score.raw":
|
|
115
|
+
return String(this.data.scoreRaw);
|
|
116
|
+
case "cmi.core.score.min":
|
|
117
|
+
return String(this.data.scoreMin);
|
|
118
|
+
case "cmi.core.score.max":
|
|
119
|
+
return String(this.data.scoreMax);
|
|
120
|
+
case "cmi.suspend_data":
|
|
121
|
+
return this.data.suspendData;
|
|
122
|
+
case "cmi.core.lesson_location":
|
|
123
|
+
return this.data.lessonLocation;
|
|
124
|
+
case "cmi.core.student_id":
|
|
125
|
+
return "lxpack-learner";
|
|
126
|
+
case "cmi.core.student_name":
|
|
127
|
+
return "LXPack Learner";
|
|
128
|
+
case "cmi.core.entry":
|
|
129
|
+
return this.data.entry;
|
|
130
|
+
case "cmi.core.exit":
|
|
131
|
+
return this.data.exit;
|
|
132
|
+
case "cmi.core.session_time":
|
|
133
|
+
return this.data.sessionTime;
|
|
134
|
+
default:
|
|
135
|
+
return "";
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
LMSSetValue(t, e) {
|
|
139
|
+
if (!this.initialized || this.terminated)
|
|
140
|
+
return this.lastError = a, "false";
|
|
141
|
+
switch (this.lastError = i, t) {
|
|
142
|
+
case "cmi.core.lesson_status":
|
|
143
|
+
this.data.lessonStatus = e;
|
|
144
|
+
break;
|
|
145
|
+
case "cmi.core.score.raw":
|
|
146
|
+
this.data.scoreRaw = Number(e);
|
|
147
|
+
break;
|
|
148
|
+
case "cmi.core.score.min":
|
|
149
|
+
this.data.scoreMin = Number(e);
|
|
150
|
+
break;
|
|
151
|
+
case "cmi.core.score.max":
|
|
152
|
+
this.data.scoreMax = Number(e);
|
|
153
|
+
break;
|
|
154
|
+
case "cmi.suspend_data":
|
|
155
|
+
this.data.suspendData = l(e);
|
|
156
|
+
break;
|
|
157
|
+
case "cmi.core.lesson_location":
|
|
158
|
+
this.data.lessonLocation = e;
|
|
159
|
+
break;
|
|
160
|
+
case "cmi.core.exit":
|
|
161
|
+
this.data.exit = e;
|
|
162
|
+
break;
|
|
163
|
+
case "cmi.core.session_time":
|
|
164
|
+
this.data.sessionTime = e;
|
|
165
|
+
break;
|
|
166
|
+
default:
|
|
167
|
+
return "false";
|
|
168
|
+
}
|
|
169
|
+
return this.saveToStorage(), "true";
|
|
170
|
+
}
|
|
171
|
+
LMSCommit() {
|
|
172
|
+
return !this.initialized || this.terminated ? (this.lastError = a, "false") : (this.saveToStorage(), this.lastError = i, "true");
|
|
173
|
+
}
|
|
174
|
+
LMSGetLastError() {
|
|
175
|
+
return this.lastError;
|
|
176
|
+
}
|
|
177
|
+
LMSGetErrorString(t) {
|
|
178
|
+
const e = t ?? this.lastError;
|
|
179
|
+
return e === a ? "Not initialized" : e === n ? "Already terminated" : "No error";
|
|
180
|
+
}
|
|
181
|
+
LMSGetDiagnostic() {
|
|
182
|
+
return "";
|
|
183
|
+
}
|
|
184
|
+
setLessonStatus(t) {
|
|
185
|
+
this.data.lessonStatus = t, this.saveToStorage();
|
|
186
|
+
}
|
|
187
|
+
setScore(t, e = 100) {
|
|
188
|
+
this.data.scoreRaw = t, this.data.scoreMax = e, this.data.scoreMin = 0, this.saveToStorage();
|
|
189
|
+
}
|
|
190
|
+
setSuspendData(t) {
|
|
191
|
+
this.data.suspendData = l(t), this.saveToStorage();
|
|
192
|
+
}
|
|
193
|
+
setLessonLocation(t) {
|
|
194
|
+
this.data.lessonLocation = t, this.saveToStorage();
|
|
195
|
+
}
|
|
196
|
+
loadFromStorage() {
|
|
197
|
+
try {
|
|
198
|
+
const t = localStorage.getItem(h);
|
|
199
|
+
t && (this.data = { ...this.data, ...JSON.parse(t) });
|
|
200
|
+
} catch {
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
saveToStorage() {
|
|
204
|
+
if (this.persistToStorage)
|
|
205
|
+
try {
|
|
206
|
+
localStorage.setItem(h, JSON.stringify(this.data));
|
|
207
|
+
} catch {
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
class E extends o {
|
|
212
|
+
constructor() {
|
|
213
|
+
super({ persistToStorage: !0 });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function l(r) {
|
|
217
|
+
return S(r);
|
|
218
|
+
}
|
|
219
|
+
function p(r) {
|
|
220
|
+
if (r === "preview")
|
|
221
|
+
return new o({ persistToStorage: !0 });
|
|
222
|
+
if (r === "scorm12") {
|
|
223
|
+
const t = m();
|
|
224
|
+
return t ? new f(t) : (console.warn(
|
|
225
|
+
"[lxpack] No LMS SCORM API found; using in-memory simulator (progress will not persist to LMS)"
|
|
226
|
+
), new o({ persistToStorage: !1 }));
|
|
227
|
+
}
|
|
228
|
+
return new o({ persistToStorage: !1 });
|
|
229
|
+
}
|
|
230
|
+
function g(r = "preview") {
|
|
231
|
+
const t = p(r);
|
|
232
|
+
if (r === "preview") {
|
|
233
|
+
const e = window;
|
|
234
|
+
e.API = t;
|
|
235
|
+
}
|
|
236
|
+
return t;
|
|
237
|
+
}
|
|
2
238
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
239
|
+
T as SCORM_SUSPEND_DATA_MAX,
|
|
240
|
+
E as Scorm12API,
|
|
241
|
+
f as Scorm12Adapter,
|
|
242
|
+
o as Scorm12Simulator,
|
|
243
|
+
p as createScormConnection,
|
|
244
|
+
m as findLmsApi,
|
|
245
|
+
g as installScormAPI,
|
|
246
|
+
l as trimSuspendData
|
|
11
247
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scorm2004-api.d.ts","sourceRoot":"","sources":["../src/scorm2004-api.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"scorm2004-api.d.ts","sourceRoot":"","sources":["../src/scorm2004-api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACjD,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,YAAY,IAAI,MAAM,CAAC;IACvB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3C,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3C;AAKD,wBAAgB,gBAAgB,CAAC,QAAQ,SAAM,GAAG,gBAAgB,GAAG,IAAI,CA8BxE;AAED,qBAAa,kBAAmB,YAAW,gBAAgB;IACzD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAOV;IACF,OAAO,CAAC,gBAAgB,CAAU;gBAEtB,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE;IAcpD,OAAO,CAAC,IAAI;IASZ,UAAU,IAAI,MAAM;IAOpB,SAAS,IAAI,MAAM;IAOnB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAKjC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAQhD,MAAM,IAAI,MAAM;IAMhB,YAAY,IAAI,MAAM;IAItB,cAAc,IAAI,MAAM;IAIxB,aAAa,IAAI,MAAM;IAIvB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIzC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAGrC;AAED,qBAAa,gBAAiB,YAAW,gBAAgB;IACvD,OAAO,CAAC,GAAG,CAAmB;gBAElB,GAAG,EAAE,gBAAgB;IAIjC,UAAU,IAAI,MAAM;IAIpB,SAAS,IAAI,MAAM;IAInB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIjC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAMhD,MAAM,IAAI,MAAM;IAIhB,YAAY,IAAI,MAAM;IAItB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAI1C,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAIzC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIzC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAGrC;AAED,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;AAExE,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,SAAS,GAAG,WAAW,GAC5B,mBAAmB,CAarB"}
|
package/dist/scorm2004.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var a = (i, t, e) =>
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var c = Object.defineProperty;
|
|
2
|
+
var u = (i, t, e) => t in i ? c(i, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[t] = e;
|
|
3
|
+
var a = (i, t, e) => u(i, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
+
import { t as s } from "./size-policy-BE1zjEBP.js";
|
|
5
|
+
const l = "0", n = "lxpack_scorm2004_preview";
|
|
6
|
+
function m(i = 500) {
|
|
6
7
|
let t = window, e = 0;
|
|
7
8
|
for (; t && e < i; ) {
|
|
8
9
|
try {
|
|
@@ -25,7 +26,7 @@ function u(i = 500) {
|
|
|
25
26
|
}
|
|
26
27
|
return null;
|
|
27
28
|
}
|
|
28
|
-
class
|
|
29
|
+
class o {
|
|
29
30
|
constructor(t) {
|
|
30
31
|
a(this, "initialized", !1);
|
|
31
32
|
a(this, "terminated", !1);
|
|
@@ -40,7 +41,7 @@ class n {
|
|
|
40
41
|
a(this, "persistToStorage");
|
|
41
42
|
if (this.persistToStorage = (t == null ? void 0 : t.persistToStorage) ?? !1, this.persistToStorage)
|
|
42
43
|
try {
|
|
43
|
-
const e = localStorage.getItem(
|
|
44
|
+
const e = localStorage.getItem(n);
|
|
44
45
|
e && (this.data = { ...this.data, ...JSON.parse(e) });
|
|
45
46
|
} catch {
|
|
46
47
|
}
|
|
@@ -48,7 +49,7 @@ class n {
|
|
|
48
49
|
save() {
|
|
49
50
|
if (this.persistToStorage)
|
|
50
51
|
try {
|
|
51
|
-
localStorage.setItem(
|
|
52
|
+
localStorage.setItem(n, JSON.stringify(this.data));
|
|
52
53
|
} catch {
|
|
53
54
|
}
|
|
54
55
|
}
|
|
@@ -62,13 +63,13 @@ class n {
|
|
|
62
63
|
return !this.initialized || this.terminated ? "" : this.data[t] ?? "";
|
|
63
64
|
}
|
|
64
65
|
SetValue(t, e) {
|
|
65
|
-
return !this.initialized || this.terminated ? "false" : (this.data[t] = e, this.save(), "true");
|
|
66
|
+
return !this.initialized || this.terminated ? "false" : (this.data[t] = t === "cmi.suspend_data" ? s(e) : e, this.save(), "true");
|
|
66
67
|
}
|
|
67
68
|
Commit() {
|
|
68
69
|
return !this.initialized || this.terminated ? "false" : (this.save(), "true");
|
|
69
70
|
}
|
|
70
71
|
GetLastError() {
|
|
71
|
-
return
|
|
72
|
+
return l;
|
|
72
73
|
}
|
|
73
74
|
GetErrorString() {
|
|
74
75
|
return "No error";
|
|
@@ -77,7 +78,7 @@ class n {
|
|
|
77
78
|
return "";
|
|
78
79
|
}
|
|
79
80
|
setSuspendData(t) {
|
|
80
|
-
this.data["cmi.suspend_data"] = t;
|
|
81
|
+
this.data["cmi.suspend_data"] = s(t);
|
|
81
82
|
}
|
|
82
83
|
setLocation(t) {
|
|
83
84
|
this.data["cmi.location"] = t;
|
|
@@ -92,7 +93,7 @@ class n {
|
|
|
92
93
|
this.data["cmi.score.scaled"] = String(Math.max(0, Math.min(1, t)));
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
|
-
class
|
|
96
|
+
class d {
|
|
96
97
|
constructor(t) {
|
|
97
98
|
a(this, "api");
|
|
98
99
|
this.api = t;
|
|
@@ -107,7 +108,8 @@ class l {
|
|
|
107
108
|
return this.api.GetValue(t);
|
|
108
109
|
}
|
|
109
110
|
SetValue(t, e) {
|
|
110
|
-
|
|
111
|
+
const r = t === "cmi.suspend_data" ? s(e) : e;
|
|
112
|
+
return this.api.SetValue(t, r);
|
|
111
113
|
}
|
|
112
114
|
Commit() {
|
|
113
115
|
return this.api.Commit("");
|
|
@@ -122,7 +124,7 @@ class l {
|
|
|
122
124
|
return this.api.GetDiagnostic(t);
|
|
123
125
|
}
|
|
124
126
|
setSuspendData(t) {
|
|
125
|
-
this.api.SetValue("cmi.suspend_data", t);
|
|
127
|
+
this.api.SetValue("cmi.suspend_data", s(t));
|
|
126
128
|
}
|
|
127
129
|
setLocation(t) {
|
|
128
130
|
this.api.SetValue("cmi.location", t);
|
|
@@ -137,17 +139,17 @@ class l {
|
|
|
137
139
|
this.api.SetValue("cmi.score.scaled", String(Math.max(0, Math.min(1, t))));
|
|
138
140
|
}
|
|
139
141
|
}
|
|
140
|
-
function
|
|
142
|
+
function S(i) {
|
|
141
143
|
if (i === "preview")
|
|
142
|
-
return new
|
|
143
|
-
const t =
|
|
144
|
-
return t ? new
|
|
144
|
+
return new o({ persistToStorage: !0 });
|
|
145
|
+
const t = m();
|
|
146
|
+
return t ? new d(t) : (console.warn(
|
|
145
147
|
"[lxpack] No SCORM 2004 API found; using in-memory simulator"
|
|
146
|
-
), new
|
|
148
|
+
), new o({ persistToStorage: !1 }));
|
|
147
149
|
}
|
|
148
150
|
export {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
d as Scorm2004Adapter,
|
|
152
|
+
o as Scorm2004Simulator,
|
|
153
|
+
S as createScorm2004Connection,
|
|
154
|
+
m as findScorm2004Api
|
|
153
155
|
};
|