scorm-again 3.1.4 → 3.1.5

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 (32) hide show
  1. package/dist/esm/scorm-again.js +1080 -187
  2. package/dist/esm/scorm-again.js.map +1 -1
  3. package/dist/esm/scorm-again.min.js +1 -1
  4. package/dist/esm/scorm-again.min.js.map +1 -1
  5. package/dist/esm/scorm12.js +14 -3
  6. package/dist/esm/scorm12.js.map +1 -1
  7. package/dist/esm/scorm12.min.js +1 -1
  8. package/dist/esm/scorm12.min.js.map +1 -1
  9. package/dist/esm/scorm2004.js +1080 -187
  10. package/dist/esm/scorm2004.js.map +1 -1
  11. package/dist/esm/scorm2004.min.js +1 -1
  12. package/dist/esm/scorm2004.min.js.map +1 -1
  13. package/dist/scorm-again.js +1406 -410
  14. package/dist/scorm-again.js.map +1 -1
  15. package/dist/scorm-again.min.js +1 -1
  16. package/dist/scorm12.js +54 -14
  17. package/dist/scorm12.js.map +1 -1
  18. package/dist/scorm12.min.js +1 -1
  19. package/dist/scorm2004.js +1401 -405
  20. package/dist/scorm2004.js.map +1 -1
  21. package/dist/scorm2004.min.js +1 -1
  22. package/dist/types/Scorm2004API.d.ts +11 -0
  23. package/dist/types/cmi/scorm2004/sequencing/activity.d.ts +47 -5
  24. package/dist/types/cmi/scorm2004/sequencing/handlers/rte_data_transfer.d.ts +1 -0
  25. package/dist/types/cmi/scorm2004/sequencing/objectives/global_objective_synchronizer.d.ts +17 -1
  26. package/dist/types/cmi/scorm2004/sequencing/sequencing_rules.d.ts +6 -1
  27. package/dist/types/cmi/scorm2004/sequencing/traversal/flow_traversal_service.d.ts +5 -2
  28. package/dist/types/constants/regex.d.ts +1 -0
  29. package/dist/types/types/api_types.d.ts +12 -0
  30. package/dist/types/types/sequencing_types.d.ts +7 -0
  31. package/dist/types/utilities/core.d.ts +4 -1
  32. package/package.json +1 -1
@@ -149,12 +149,18 @@ function stringMatches(str, tester) {
149
149
  }
150
150
  return new RegExp(tester).test(str);
151
151
  }
152
- function memoize(fn, keyFn) {
152
+ function memoize(fn, keyFn, options) {
153
153
  const cache = /* @__PURE__ */ new Map();
154
154
  return ((...args) => {
155
155
  const key = keyFn ? keyFn(...args) : JSON.stringify(args);
156
+ if (options?.maxKeyLength !== void 0 && key.length > options.maxKeyLength) {
157
+ return fn(...args);
158
+ }
156
159
  return cache.has(key) ? cache.get(key) : (() => {
157
160
  const result = fn(...args);
161
+ if (options?.maxEntries !== void 0 && cache.size >= options.maxEntries) {
162
+ cache.delete(cache.keys().next().value);
163
+ }
158
164
  cache.set(key, result);
159
165
  return result;
160
166
  })();
@@ -819,6 +825,8 @@ const scorm2004_regex = {
819
825
  CMILang: "^([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?$|^$",
820
826
  /** CMILangString250 - String with optional language tag, max 250 chars (RTE C.1.3) */
821
827
  CMILangString250: "^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,250}$)?$",
828
+ /** CMILangString - Optional language tag, no length cap; RTE C.1.3 SPM is a floor and is deliberately not enforced */
829
+ CMILangString: "^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).*$)?$",
822
830
  /** CMILangcr - Language tag pattern with content */
823
831
  CMILangcr: "^(({lang=([a-zA-Z]{1,8}|i|x)?(-[a-zA-Z0-9-]{2,8})?}))(.*?)$",
824
832
  /** CMILangString250cr - String with optional language tag (carriage return variant) */
@@ -2424,7 +2432,9 @@ const checkValidFormat = memoize(
2424
2432
  (CMIElement, value, regexPattern, errorCode, _errorClass, allowEmptyString) => {
2425
2433
  const valueKey = typeof value === "string" ? value : `[${typeof value}]`;
2426
2434
  return `${CMIElement}:${valueKey}:${regexPattern}:${errorCode}:${allowEmptyString || false}`;
2427
- }
2435
+ },
2436
+ // Normal capped CMI values and regexes fit within 2000 characters; large uncapped values bypass caching.
2437
+ { maxEntries: 1e3, maxKeyLength: 2e3 }
2428
2438
  );
2429
2439
  const checkValidRange = memoize(
2430
2440
  (CMIElement, value, rangePattern, errorCode, errorClass) => {
@@ -2447,7 +2457,8 @@ const checkValidRange = memoize(
2447
2457
  },
2448
2458
  // Custom key function that excludes the error class from the cache key
2449
2459
  // since it can't be stringified and doesn't affect the validation result
2450
- (CMIElement, value, rangePattern, errorCode, _errorClass) => `${CMIElement}:${value}:${rangePattern}:${errorCode}`
2460
+ (CMIElement, value, rangePattern, errorCode, _errorClass) => `${CMIElement}:${value}:${rangePattern}:${errorCode}`,
2461
+ { maxEntries: 1e3 }
2451
2462
  );
2452
2463
 
2453
2464
  class SerializationService {