{"_id":"learn-content-engine","_rev":"50-cbfccb664ac262908c05cb162d1e718f","name":"learn-content-engine","dist-tags":{"latest":"0.36.0"},"versions":{"0.2.0":{"name":"learn-content-engine","version":"0.2.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.2.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"dist":{"shasum":"944d152654e43532855420e1f615ba9ca5321e45","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.2.0.tgz","fileCount":23,"integrity":"sha512-lgUHKbUjOTdKz/5wppo5WWTTRCpJbMOVyt+O+T1b4+Zz+O97oH5SXVRKRNmrRvSF1cqKs6xejsvixaMtuKLr4g==","signatures":[{"sig":"MEYCIQCYm0EmeIgjUMdscnnwhY+bk+OO2mE+oaYFLiPjGSrLMAIhAPeDxk5L8P1TfqVF6olOJ1A+RjfqUwogPSsfz9ZtadVq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69946},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"8379b6d410013f83d09ad78b8d4d762553b8be5d","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.2.0_1783334451600_0.4579638573062621","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"learn-content-engine","version":"0.3.1","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.3.1","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"dist":{"shasum":"8d73a93b9ea04e3fbf07e124e2824199842faa4f","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.3.1.tgz","fileCount":29,"integrity":"sha512-Olo3a+/kviPaAHyWsq+LHeNOgIC/HvhmxNvfosjRmIVsvvbMO18JFuT3/CpI2dc1XUu7W1bU72vLKAcG9hfrvg==","signatures":[{"sig":"MEUCIQCESAthOOXM4NeHzTYVtaZZLpx/mhH/29F5v6DaijdfBQIgb1KCjmdphVnYT3p9q1DzTomew9FiSaY+AH1tvPfsrgQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142866},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"ce6ce2ca23cf52103c8a086b4e05b480041ccbc6","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.3.1_1783337836788_0.7495923871805692","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"learn-content-engine","version":"0.4.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.4.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"dist":{"shasum":"3895967621f774691f13f9e1f16146cf62a949b0","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.4.0.tgz","fileCount":30,"integrity":"sha512-pYVVyQJ/HfM76afgieS4DdX51PO/v+aqoy0Ani9n7bMIfb7ZCwI/+Pb52EAPbJbF/QABCpltjIxRng/oSInIKA==","signatures":[{"sig":"MEUCIQCigZOFbyPlDKUSZjR9yFKXqdLrXmlGyPr7VTkRC2mOvQIgfX3sIffxd2VkM5dmd9OLzucj6VHQ9IMXNA9SCjPggdY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144423},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"b26033754d2f75eedd49005a9bb4eb80a771ea6c","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.4.0_1783407449479_0.8074645028658638","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"learn-content-engine","version":"0.5.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.5.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"c6cdc3a5f6271b97818fac8dfb7c10e2449524dd","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.5.0.tgz","fileCount":35,"integrity":"sha512-6D/D2yXgVT/HtjvKDBNPz4Df9KYpDkbAe8SXm5oPtCiSzWWLHgDW870b4+HB31WWn19QaS+oTR/nbb6dFApUmQ==","signatures":[{"sig":"MEYCIQDDl0hjVTybOEEgvR6djwp4SEClO5Y38DFrPFxh9n88vwIhAIuKCH4I6G80HnS+4j/YD0Cq5zonTlJ4ddPIoXhCs4dU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160619},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"59790dc9e25273b351756d751b9e516fda8fc1a4","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.5.0_1783666736049_0.39657397190974386","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"learn-content-engine","version":"0.6.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.6.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"f3d9d5ae84d66cef35958c4e979fa6b240d3976e","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.6.0.tgz","fileCount":35,"integrity":"sha512-Kla0pqsKphoL9E4E7Bwq3lGZj7cRoDl8OySHkyFdEOaAoLO/BLZicRDm754NRKJ6EdxDmcwrsbjf+A+yx+Fntg==","signatures":[{"sig":"MEUCIGjemInYtuHEobccrHMGsAwRFVU4Xs4y7k62twJB27ttAiEA3ClGm9D0ZaGewzSL887la8qCSvh4cao6iBWBiiasxgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160436},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"b18937d9377ce4265ec18f7d16cdd3467c92a819","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.6.0_1783668755867_0.4374551811178038","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"learn-content-engine","version":"0.6.1","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.6.1","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"52d4724eb4cdd6c98468b02b4173c00fc048cca6","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.6.1.tgz","fileCount":35,"integrity":"sha512-j2d+D0j6gxN2eKf7smeY4A/3XNOPexLfjMsV59REa0wcVqlKZJVjxc91g7+jrdt+X2P0fx1OvdsTGPO1jjkIkg==","signatures":[{"sig":"MEQCIC/br8ePUwP7QbQHCgSCIE1o+Qd69+X3XdSGlrWgW9RqAiBVKpRplEUp/HRU24gitncLpTK+vHUgxh2bEM4oGVpIsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160894},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"276a8e6be050fa2f896f46bdea846223d18e53d4","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.6.1_1783680475476_0.5913547477600472","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"learn-content-engine","version":"0.7.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.7.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"aee9898e79c4eff76d762fa3643ebb6899d9979c","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.7.0.tgz","fileCount":35,"integrity":"sha512-kOqI0cEZIQUgK9/PTCQiB5f5eZHxtEWJJqvufgDKLZW5jSlpdef2s3tWDWFHPPrNkmKklfGtXJHc9Bog3UqKUg==","signatures":[{"sig":"MEYCIQCe0ncxhsK9TnoxYlu13krYLebDRYlR912RLtPdC6SJbgIhAJU/CrFnz04G09WWQ+hJqWPtlNwI7pHgOudKnvBpIECt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165249},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"034a8962c9daef412c90c0680b4b9691c3c3f828","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.7.0_1783681350638_0.6279752102844316","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"learn-content-engine","version":"0.8.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.8.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"94e09ec2e693a4b9be10332b69cd47f0b0124d48","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.8.0.tgz","fileCount":35,"integrity":"sha512-NdfBWQ+kHe4/Qy17IuAJ0rp9z6ZVRY/A1+X+JgKOkp1BR9tsQW4Cl9wd4QOqLghZqpoyA8xI3T1Ol/ebLGxeng==","signatures":[{"sig":"MEQCIHrpRBFdrwel4DzxQiAD7lj0wqZjTzD8qQDmO2lD8W24AiAWpIEFkeQaiL9u1QM62eJO6Zlz1hEwBZUdytU7GI3kMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172354},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"b638f092eba67122d30d05b3e6d658a05bd48f2d","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.8.0_1783683946862_0.2246581599058195","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"learn-content-engine","version":"0.8.1","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.8.1","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"778089372bb5ee608be5202666aa89f7fdb83d17","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.8.1.tgz","fileCount":35,"integrity":"sha512-JRwXxePaM1RIL3nxFLH38bV3NnSss46vlv7l/+8yFtW6TK1+7YWFIP8J796VbXAx5FYBeguilU4zSnOP4dqLlg==","signatures":[{"sig":"MEQCIHVua4tx0d6cJkH1eM+QM+Id5VlMXjaKDicSoJi6MAueAiAYuODVVxtpOlnND4VWClhxT5Hl7LH6POA2sCEIxnNcSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172639},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"b9ef18999dde55ef7021109c9f1465eb6848673e","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.8.1_1783684392379_0.41698922618714107","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"learn-content-engine","version":"0.8.2","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.8.2","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"12cc1092debe1c67d78d568a7bb007400c718626","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.8.2.tgz","fileCount":35,"integrity":"sha512-x01/z8/VhmIra1WOGGkHhAD20k94V46URvC16I3lmgdTcmFpfuEE06/CNN9onBRJa9fsxR+dNSSKwfGzdIbYqQ==","signatures":[{"sig":"MEYCIQClMw+i8IzohTapixiyoOnDXaNXKW2AebE0Ac2gl0BZeAIhAPmK08QyUlSnRT1WKKeAs+oswULduX9UIdA84FlLVjOJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173347},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"0aef0c09310045f34443894e82fa219747ef8e42","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.8.2_1783706111182_0.73744145216211","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"learn-content-engine","version":"0.9.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.9.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"5d4434b33f471a1ab1bfcdb5c2b443800eda533b","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.9.0.tgz","fileCount":39,"integrity":"sha512-7P+7suSVkvvjnBuH9qG+w0bJZDzzu99uBAM4You4EevkNJWEALjKnbQsMZCItjRD8oZEi66Y1MauruZYgrzeLA==","signatures":[{"sig":"MEUCIQDxrtSkijw5yuwH2WcLyKJrAgN2/tVZWTvl6Bp/B9c7swIgJ4k6O+pF7Z1g/7IMqwEKSW767D2MlyP8Z0iLrXsPHHQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":195828},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"03d82ad5613eb74b12c678d587260ac5b04a2dfb","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.10.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.9.0_1783766696526_0.9804070579266193","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"learn-content-engine","version":"0.11.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.11.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"59b6bb179b8bc4a1c0d19376b6dc80875271c877","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.11.0.tgz","fileCount":63,"integrity":"sha512-DRx2C5Z3qaTzECxO72x6KULTbNXWlumkxp6a7/ziKxT1uUDifTWKlw3M03qa1MdtBBS1UcCknSeIQ7AKGExLDg==","signatures":[{"sig":"MEYCIQCiuVYUunsqrlOfct+/66tRvQzSd/3UxHMO0tjBwk8TuAIhAN21ej1cfvO4pNbLFiB+Bka3Eb9RvBXun+w02BSgIXLH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257053},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"3cbec3aef77e4adb8387464963ede2f23f663668","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.11.0_1783786936849_0.2143553608705202","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"learn-content-engine","version":"0.11.1","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.11.1","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"a6a5fc9ed487969b7d79f1401bb3c044f86744ce","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.11.1.tgz","fileCount":63,"integrity":"sha512-4i8pHaWeOpwnD99IfRSMX36//FSZ5NWTue4VFvn0ZrAdxoR4yL/ORp6z/AaWYMauXvDcZg7dJBbPuE/t6aIhYQ==","signatures":[{"sig":"MEYCIQDenhAc4vKTAg1NhfkqM0wYrYTXy6jwrSHIW/pS76TyegIhAL5+aKDVx3R/zDHQi/P5K4ShsNHgLEruBlsuVhtXp6EX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257551},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"4036267ca6fd9cb126dbed2f18d5002f2e133a41","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.11.1_1783787805616_0.3069155749146535","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"learn-content-engine","version":"0.12.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.12.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"6566a895be74a960b2a9854e92d01502a05db698","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.12.0.tgz","fileCount":67,"integrity":"sha512-c49CEa38zQZYjKQWcxYPb1I2wFRkHoGL8YwrX+AqrETi6UoqmQTV280pxOmNLn3LEf6e8RZIFal2rrip+MHCNg==","signatures":[{"sig":"MEYCIQC8tuorfBpBSgsN4CNhsiaHQjh+W0lSz4fZDBWZbfd4UAIhALvMe5s+tOOYwy6L5Lb+2011B6PAIGAKxNaLyxO97U2/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290673},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"90a9f34759634b7699a4be959befa344cc4d0f6e","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.12.0_1783793226140_0.21217068016905816","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"learn-content-engine","version":"0.12.1","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.12.1","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"6a9ace4849c43612ac06a06f0bd2aedf02b29d73","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.12.1.tgz","fileCount":67,"integrity":"sha512-hfqnM7N02ZsUJ5A8nWf3u5HuITolpD9da6oA2ESPsh01zOWNQQBY+nuQUeeDLNV7pkkgUW1TOrdCXXKoAYskAw==","signatures":[{"sig":"MEYCIQDyxd5F/X52xdq7xlscokVnzeUAyIQbkFHywitXex+pPgIhALlTiD/Lrbu8EbZnqSqeL0omqsvA+cw1ESFnnzAJIW6V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":283738},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"4cd82ad2273b3c0e39089e43d18231338f5ecaf7","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.12.1_1784022054898_0.5001989287606046","host":"s3://npm-registry-packages-npm-production"}},"0.12.2":{"name":"learn-content-engine","version":"0.12.2","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.12.2","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"417f39059857b0d938eba5620dbf0ed7a26a831f","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.12.2.tgz","fileCount":67,"integrity":"sha512-4TBSLu1hxTjC/HO1OaJYxW08CMHgKyCs/JsYnnlVVbd5vyiVj1MSLL3rxaOTlpEVk4AsdNAhAhigH92oF5OaXw==","signatures":[{"sig":"MEUCIQC/aJvzHzCAJR9/ClQsAQp0O+L7e2S1SJ1DfTP5eFFUVwIgVvHTVX74KozmQl4/a+Xh8cQXSdsl1vQIY8zUCnm5KUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":285617},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"0955ab9f8dfee0a8a1428c8b983607315910c678","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.12.2_1784042520054_0.7316854512632296","host":"s3://npm-registry-packages-npm-production"}},"0.12.3":{"name":"learn-content-engine","version":"0.12.3","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.12.3","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"6af253ff192bacc257953aabb64d0fe957a38180","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.12.3.tgz","fileCount":67,"integrity":"sha512-CB6Wy14cIxe8+YqwlCLfJLeYXAdMdonKvIkMm0PmDnpluOrRyXlwhKMn7NM5qg7vOsxmKfm5zcvrx+6EcpQb9w==","signatures":[{"sig":"MEYCIQChG1sutjnIDrIn2KsQWpylHpHeFSQxS77ttq3uVPGk3AIhAP47ckyyRpOGld96+uPd4at981Dov4MjTVFPixul1Tyh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286697},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"2715cb9623d8fdc1d1d087e16cc3ed25c8e4b382","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.12.3_1784110218907_0.6967214636235335","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"learn-content-engine","version":"0.13.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.13.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"03c8f12c8090f457bd778f0365eb6c4229e1ad2f","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.13.0.tgz","fileCount":67,"integrity":"sha512-biLdHGKfn8KOOEEmyMqFrf70pNtYWcM4SmUYXYjWiO7ndONOJk+fedg5E9fp10vX6NwkY0bnSXoWlwNjPHip1w==","signatures":[{"sig":"MEUCIA3zAjB4lja5EWj2B69v5ssCf1sq5nwYtmqnu5jzrv43AiEAgRhj4njfonuAWWkt/vi0j6NRTmBy/k4ZoPkqL7EiJak=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288814},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"c35401ce9880f289984ae69328785459a1e39b1d","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.13.0_1784294061972_0.7206223634510551","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"learn-content-engine","version":"0.13.1","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.13.1","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"70fc79f01bb1aae252a32db0141fc435bd11b5f9","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.13.1.tgz","fileCount":71,"integrity":"sha512-XeR75dYk/uyLsNeqJLfMA91z9zky3D1ud8eOzantg8BMcISX7mjPQCBrZUXhK+qhrHikJ4BJMZl3m+bGTOINaw==","signatures":[{"sig":"MEQCIEqJR1/Ta3D+OHWFBhmkTa8FiqSWw21fyf0K5K/vsRlWAiAQJ/INwNJLA7J1zEW+MN6NuJpt4KeY06GyBa1FvLdo2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":294610},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"30bb73cdb9a68caa6bb03d3069e69c7460f77cd9","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.13.1_1784566525652_0.48531733822717404","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"learn-content-engine","version":"0.13.2","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.13.2","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"96e998d86b00b13ea2abc627210eac434e5cb1e3","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.13.2.tgz","fileCount":75,"integrity":"sha512-QEWbGag1L+LqXcZSV/fUzCXmN6Fwl2+yArRAn810nAA1ZcgWdpJ34AFIW/YQnHmaGFBNLWRopyWXFJ4P3G+dyQ==","signatures":[{"sig":"MEUCIB4EOt9XcsWZ9wRO68xK1Ev8zBLjtcwjg6KddhQOZnSiAiEAvOvEmSyBmNpqVGKD62o8AHqjm/jBBQnk3z26/gRttYI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":305815},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"3e5a7e64c65315c8a26bef5708fa46bac9d6cfb3","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.13.2_1784712113462_0.38864452330911625","host":"s3://npm-registry-packages-npm-production"}},"0.13.3":{"name":"learn-content-engine","version":"0.13.3","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.13.3","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"8b9bf713a24b5bbfe5e234ab4a3fd9b94ed5a2f9","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.13.3.tgz","fileCount":75,"integrity":"sha512-zdQQElTC6qVDEaMP8lxi24I+NckPqUCMBdlv+pflK3FOmVRbr0ZExSFYvGlJOR0iEe/bZRz8bhRmn9koOxv4jQ==","signatures":[{"sig":"MEYCIQDgOb3VCdpaEENRAK9e38EA0gAmujt+6BC0hQz2v7+2kQIhAMl842xRvinR9ScdOH97wx3HKBhhmNVDbh8Dfa1XtcZY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":313952},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"49057391a39d3c62de016dd2974a5606ef25575a","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.13.3_1784716725675_0.3642942911609406","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"learn-content-engine","version":"0.14.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.14.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"2f6c840c83a4325f0baf09c7ae9c4152b49e1050","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.14.0.tgz","fileCount":75,"integrity":"sha512-vhacqOg7xA6amEmPey7evw6fNajlqiYCNIk/Q1S10Sn6lStQew5+R1FxwOeGn6GG5qfZFcoxcBAf7jUSe7VJQA==","signatures":[{"sig":"MEYCIQCdZQH191jg6+G4lYCuuhkmLs8wpK6T5+5fhBWtr6KQ5gIhAKmnAQIsn5aWukFmKZPNZSoE6f7OgyVwtdN62jVWQrj2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":315804},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"81131f1499f3f881ef5a714efc88c1107f7bd151","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"11.16.0","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.14.0_1784821646644_0.7705417141103017","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"learn-content-engine","version":"0.15.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.15.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"c967f97955c56e35a94709234b562fb61e0bc4ec","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.15.0.tgz","fileCount":75,"integrity":"sha512-vO1i0VBXO4P1uvOZzcEXEtgfpZtOXVmY5Qkb84JXlH68R+7M9zx3zG3uF04wpcpLJCESHW2w9dGOBd5+eEv0LA==","signatures":[{"sig":"MEUCIQCe98/G7b2cpxFfJOElPHqx11pMWMMfSzKIYN0IIGGohwIgKz+tNVhb54+Cx5FsTrTCXKE4mcYm4xF6EDC/KDNTW04=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":315804},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"9b9b786027919ec45e6c0c638bf4d4dfc01ba783","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.15.0_1785252673342_0.6810857050442551","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"learn-content-engine","version":"0.16.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.16.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"97284f0b5dd6edbfacba34e4a1e360afa0b20583","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.16.0.tgz","fileCount":87,"integrity":"sha512-/pRgnPpTMAIzVb1Q2LubOJc6QZ16j+cQccOgUIyPYk4uDq9Q2MP0SPGDF7/xZGWYOAZymgaqOrveg+LMKiJ7lg==","signatures":[{"sig":"MEQCID+I+AUvmcVx4xKvDgkB9jsbzKN7uL/aW4+odBVx7lpxAiBrV0es3CnokSEfQOzT84FRPPiT5mEYkfwpa+CULaSnwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378075},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"6369ca11613a3ece8090a876d941b94db0f1a2b3","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.16.0_1785511849248_0.5452943462940492","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"learn-content-engine","version":"0.16.1","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.16.1","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"c53b3443f94f745382177c1295b5d90d73f925ca","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.16.1.tgz","fileCount":87,"integrity":"sha512-QXG9dP1z3L4mO6WFSQeHpIhvj9jFKdSgMjrBVtfCYKZYvCxZOsvtn/pY/4fL14dNwCTJRtlh6v5G7iFd1XuvlQ==","signatures":[{"sig":"MEUCIHWevJ6PnVtJiiglcuLlzQrLHtBwJvpwZPvt1Mv4daGPAiEA+vWPLU+ItmlEm4BctZJGROIsaCJgW65huVMiFq84byY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378723},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"af2b0f045e2849a7da6c7127712cc386c4f504fe","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.16.1_1785512351445_0.2713807993125352","host":"s3://npm-registry-packages-npm-production"}},"0.16.2":{"name":"learn-content-engine","version":"0.16.2","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.16.2","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"da6325ea11e7f15995b1d42c4199a04a28fd7846","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.16.2.tgz","fileCount":87,"integrity":"sha512-mwKVCQkPGkARiYpY1ppCkcmaXrLpw+c6uVL3al+d0+HkDAwRprMU74/tikuCKQ2JxbAFXVE6QH6h0sz3j/7cfw==","signatures":[{"sig":"MEUCIQDunS5jyP4nRe7B84cdZgHLAsyOoY28/vl8zQVn/WPrtQIgQ890i3SHnvZ25fX0/A+96D/SGNg++ibH40m5VgEslZM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":381845},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"0590878d3d558a1692412913c3f80bca76a89b63","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.16.2_1785512954483_0.8604802069814323","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"learn-content-engine","version":"0.17.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.17.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"9f78510078d6fbd1f90dd57d74bc28ee25d06900","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.17.0.tgz","fileCount":91,"integrity":"sha512-VM0Lc78gj6qWf0mnJU9MdNop8bQ7a2FScW8flMj0UhF1tbNdZnrYgRj+l2HWtV3P+4rLZ0Qj+En3ZvIR5IGvYw==","signatures":[{"sig":"MEQCIEnTl31Itk3p1+IJaSQqG1bQZUe/ijHALQOUtlAvUqoXAiAVOraqonds7JhpIRz6oo15N9DLr1+IY4wleh8vGWHmFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398029},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"1fe6c91568b515559cef7468d5dda6b3d3218cb8","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.17.0_1785570892010_0.2649520089861137","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"learn-content-engine","version":"0.18.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.18.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"b7c9384ca81c40ff4fca4d92be554d53d09be318","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.18.0.tgz","fileCount":95,"integrity":"sha512-/6vdMCa5fmYF759EOTKAywCPkC8KP38Rx2DYNjAeto+1bCV7eR0FiCPsmDrUwXSW9fXbtSZ2BkY9wvmcn49yJQ==","signatures":[{"sig":"MEUCIE9sArBTaTIZ00D8XiOb1luFxjhlTKwHmbmgxeZR1T+NAiEAgI6f58u2yxYeTL7EfzvH+6EDXJZjNJ1MeXaGwp0LC6w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":413053},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"e79301429b46c8993cf66d79940d7cb45401ca8e","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.18.0_1785913446496_0.11114362318770699","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"learn-content-engine","version":"0.19.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.19.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"20158eaa20edea10af9d9f550ecc9d17f90c80d0","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.19.0.tgz","fileCount":101,"integrity":"sha512-NiK+2zx8UhkikM1K21XEbNlGCj33jdTKABUkDmUcNxF53R2+Y6yeYNCm2+DItomKSilZox2plPkW4wG0YlqQ+A==","signatures":[{"sig":"MEUCIBeP9suHyphoEc9t/iWSDClskhDQ5a/zkdABS8YIDPJOAiEAnWIApfPL/iNZz02l2wvbSFcUd6Xj6RrT+VRFbKJQF50=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":425472},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"c9dc35d2e963a782e7b04792e9836fcd1222c80d","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.19.0_1785927582445_0.6672634126603778","host":"s3://npm-registry-packages-npm-production"}},"0.19.1":{"name":"learn-content-engine","version":"0.19.1","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.19.1","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"cf72b2889e796a7aca7ec700a189804e6f462e41","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.19.1.tgz","fileCount":100,"integrity":"sha512-lEIFrmd75FsLfIJzOVplVjW9SOJEe3EaQsY1o4EZdXEC7YQg8kExOJ85Z/5emTTWy0+wKm0D/CdRGG0MsKlp9Q==","signatures":[{"sig":"MEUCIQCsbHdDWbv0MGn/baqWQA1hM/gYN6myyTD1S/7/v9cM4QIgbINvyOaIyZZgfwQF3/kbdbPwA+2iCVCo1zoLV+onCF0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421291},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"d8b0d02ef133e1ee1da32881d50d380051516d12","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.19.1_1785927835957_0.0024126047301449294","host":"s3://npm-registry-packages-npm-production"}},"0.19.2":{"name":"learn-content-engine","version":"0.19.2","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.19.2","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"6959e8cc2b3da876ed5d864c3561f852fc57fbaf","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.19.2.tgz","fileCount":100,"integrity":"sha512-17BbnteQze3cQrTFvlfNzrJXc/XVhVfenB/lzZ+Og/tUY2pQyRPzWTZYM2INrEU8g+OIxTRyI9He8uJpS4a/Bg==","signatures":[{"sig":"MEYCIQCqYPQV2O2WU84PZ6qZ6dQtfagc1dxgVy8MSq1TesfIowIhAMbBALzUYcR3NmnZm94c3vO64riUHm18V+4LrctAN2gr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421947},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"ed723c68782915acc76dde0d5935104c7426f669","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.19.2_1785933512736_0.6161633297958955","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"learn-content-engine","version":"0.20.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.20.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"7b848a24f4cd3db653d5e8668499ffc9cc8c10b1","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.20.0.tgz","fileCount":104,"integrity":"sha512-Ztv2c3m+8ahCDtR+tXMBQ+KbnTHjxgmym8zWLDZoDUY2WrHKJ62QtyvYXvB8Apbmf2ejHZmLLn1CBPx7KgwS6g==","signatures":[{"sig":"MEQCID8SMkwX5WvAsXMlUIXvvxRRbZnjK5qpfGSlfpHX5ViAAiBBFQbkCT+X48UH/i4ubOY+d2FdeEXNvlkXjUEJ8rr4Ew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":433611},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.20.0_1786007477741_0.6544616472128448","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"learn-content-engine","version":"0.21.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.21.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"7bef533f5f4c8c25ca5e083c12122b81e53f6e6f","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.21.0.tgz","fileCount":104,"integrity":"sha512-fUT4PAcGXN9ctpcrug0o0TWVS0gBF7rkarj49U3AVxLMAzPuuehJ1KTSdAr9OY6WYITXb0W1rtzdmEGm3MTm2Q==","signatures":[{"sig":"MEUCIQDMNQFy5OI4qC0Gh8a5dYZkrIRGycpy8mb4QZwVMpW1FAIgWiOHfYcX/0Jsg8BMaGBq8YcECCXaDh4Afn91HLD18L4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440695},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"8e29eddda7f053cefdeaa81ad49b2a833d07198a","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.21.0_1786021063660_0.28776237173997377","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"learn-content-engine","version":"0.22.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.22.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"6a4ce287e9850fa1b7cdec6f68f24c1677776b4b","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.22.0.tgz","fileCount":104,"integrity":"sha512-tPURVhQusVj4G6KyRbut8JTQBWTAb/IhYWmEraSNjWJJp/tFnVg76Y2mZ6sZ46uh3Mi19fNhyFAoZKPmJ8m5RA==","signatures":[{"sig":"MEUCIQD4/R8drl7jpNMFjNnAS1E/9SfG8eNAYGBId3OPhjKkoQIgNEkmORbutZpGBJ/uON8Yrfve405i7+e6erk9p6WfEOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":454042},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"3c37e58483924436ba7497e678a1419b3fcc3130","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.22.0_1786467149656_0.8758331010196727","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"learn-content-engine","version":"0.23.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.23.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"63b440c83d7b0349bdd3e7a553a583e5f2b7a1e3","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.23.0.tgz","fileCount":104,"integrity":"sha512-Z5H7n4b8Z2ZgA4W2rmwzFg8wtr5HoG7113R2oF+R0PRNybxrQQkLq74DsKwvPU+rWjc459vqq1F0bCwbXXn0sQ==","signatures":[{"sig":"MEQCIDJnuaFJZVDifJwr1wWeNRRlDK95O902pdMhSlC2/DvAAiBn10/kjdkU3jqSwpkdbredSygWnAnrIJaVUfAwpZGluQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":456993},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"96cdc97c430d31af304d65eeedd26c44f3df8115","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.23.0_1788175852705_0.5957395104824332","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"learn-content-engine","version":"0.24.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.24.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"7c7b407f73023710f363cbe0c78e4392c196b469","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.24.0.tgz","fileCount":108,"integrity":"sha512-x55zITBUs6doALu6UYN8Q1sTE2QkSZHh+ILcwMxyJUzAOF1UN0hLLsAg/7bNsTFbCJ1drtKIv0giPkDrHCeIBw==","signatures":[{"sig":"MEYCIQC6eJsnHuhiBYChj0G/9yVwAFbtIQMZQAfEfvR+zXdekgIhAN5HgkPxhyR9JONUgDrLpLqs3S6amSfEx9WNLq1H11Ry","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCB9nAMS5sTQw0CLZrDadnGEvYyPhQ9pRvdvmNkELI/pgIgEUXYSf2+dNpJfnPDfKmg6MaKm37zIjRNR0aU2qFUung=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":486125},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"a4a34784bbca21ef69dd468899f26a2e419b6a40","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.24.0_1789484119526_0.6236925237835003","host":"s3://npm-registry-packages-npm-production"}},"0.24.1":{"name":"learn-content-engine","version":"0.24.1","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.24.1","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"9bf2897259d2ad022d6d21ac8b86c14fa52d5d2c","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.24.1.tgz","fileCount":108,"integrity":"sha512-FHI93987I5hbyz8rhCRFG45nhaiuDxBLqDN7SPHVivlVfZr3a/414OCcxOF0akXdRz0sb2OxbuJdvGU3GsJ1kg==","signatures":[{"sig":"MEUCIQDokOKh6pedcURpzEVBenlHTRLEwlLnViy/8qDiDJx2bwIgLxIvpCeytMC/ss4hhvyf/8YR1weY0cVbL18kAx9+dhs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDjdSKhh7mXMqkcnME1niagbTEuak6IR/IfXjs+NaCOBAIgV7zVXCqp51vxLHvxfNuoKIE2yD+DXCUD+Xs3xmlRRUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":486805},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"bb036306f0ac5c1c556ea285236ac9ce4a627a3e","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.24.1_1789485278412_0.16253090818382643","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"learn-content-engine","version":"0.25.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.25.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"3271d84781bf89756ab46e7dc36dfffc01d2b53b","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.25.0.tgz","fileCount":112,"integrity":"sha512-84GpTMbtqfr/IgQLcBS+Yq5nStX6yiLjzVuFAM/tHLcHBAAUIqYaVCXn7raZ+yJP8Oea7s+yzl1DI/xJ0iJPtQ==","signatures":[{"sig":"MEUCICHTPIjH0SlodU3GC1k8tUyFPXtQ4T3ub2OGUv1/j9IZAiEA0k8GXb9Y0SfATQP/20lWF4o/jYd7P2wEoP7erHPcI60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDvDVTmGBQXqTpmqONT4MunkLMI8bbYXxmFYEAdDxUADwIgCcsZDdyCyP7uOQ0BoIb7/ivkYKWPjWZy3RUzWCO2sKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":499842},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"4ebb34e2d499c2cbc972ededffa27464d0c02e37","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.25.0_1789538038329_0.28361735939440824","host":"s3://npm-registry-packages-npm-production"}},"0.25.1":{"name":"learn-content-engine","version":"0.25.1","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.25.1","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"860661ec1ac92b78898cbcea55d479e70ce21896","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.25.1.tgz","fileCount":112,"integrity":"sha512-Bukvg/ZjVrM78SP6Ho9SwWZXOKIBlYF/DjPCmb0HSlaq2CZ4GBe83Vo0vR9J5lgCpgq2uLdAxeopKaWgnB815A==","signatures":[{"sig":"MEYCIQDpiizk9TuUF1vyq9maOzF4OwhnX+tZ8w8jqB9tS22kpgIhAJ5pPzh/cMbpfKvN/IKZj0j1frUR+h+zCx0kytz1BlN9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIC8nQQoD6hsFnS+UVn/mfPLEGWZkTek1MWfNoOpKackNAiEA/CzHn8XZN3EjyyPFeRFiRclkOF8KfRvviGGp6Vk4hu8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":500081},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"5af8c73db9bfe0cf9c5b83c1cb808fde9077e573","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.25.1_1789540721749_0.12377652811951512","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"learn-content-engine","version":"0.26.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.26.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"5d5ab9d100ded4459eaf91ce16360852f5c22112","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.26.0.tgz","fileCount":116,"integrity":"sha512-VFORIDy46Q4knreJQVwy+WqhY5utQOQYoZP7CgIYlDV6dwNgaFVT39iiEIzQSgKc6+Ft868rbXDxQIK3csUPpg==","signatures":[{"sig":"MEUCIQCRBaiaJOAg8QnhtvMBAtcU6Px1MZF1N9Za8aNFDVaOjgIgOsFVRcMhSJcmKpZyG2YX6DHiv0EW/GFrPUVB7XuZDvc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCoDuP8EziqyGJTBpwILARy/QKNF+TxSnVEq/1uRZy64AIgJQFPvfC01KqkpDProTaTQamu/fAYTfdhNBn+neCZmRg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":513766},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"f326da45176764b624bfcdac209e998026882936","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.26.0_1789543228049_0.9424135507744476","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"learn-content-engine","version":"0.27.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.27.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"ded6699927cadbc35f0377d6892a98c9a33e9086","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.27.0.tgz","fileCount":116,"integrity":"sha512-rNrvfew+rbbixDzVUGeH86dGkTrhJV7GfSGNU5W3AWgnn2Xga3qEiwcEN1H7FY2JWN8Wo9ewV6MfLOhfPGGn3Q==","signatures":[{"sig":"MEYCIQCQe6cuFDUuZg2YDDMrDoIjk0ylyekxNY+8s3gB0vkZgQIhAPeG40P5AmGHoHjHcffZKR2L6K+4kf8sB6k8da5ivWlH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFg1n+Nq+xfDki554MHVycG7cf075+z9sXf56RcNaqxxAiA5cBKGMg0MUKhb2wMwwPFJ6bff5F/gJyoG/EXkOJ33yw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":528182},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"8fefb08e2d3ebd46e8e90428861c57c612b10f5a","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.27.0_1790157441035_0.8419466061216974","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"learn-content-engine","version":"0.28.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.28.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"247ba71e558b15efaa2a2f87de0b10b786f07814","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.28.0.tgz","fileCount":116,"integrity":"sha512-dx2H5OYiTNRNK5jmdIV5h21T5z/lxkovsIq1L9pm47lEiGCLPUgEaxM/0CqOFnqZ2YGmF44PQEZFJxwkDHpagg==","signatures":[{"sig":"MEUCIEy0Ir3A/1HZbSR5b0eFfVIrx6hIJ3/PGPvO0dd9KfDMAiEA1XIQE62Q5OTPGpjxqO9/IMpvNszFmVpBI8XRQP6Woqc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICA5ijWHgwGkg/yXS0X7QuBKdDdXSC+m7g3Rk2Pb65vqAiEAuZnwA7akRwGLsz7dwcASX7gpNPaKmY2c7NxERKSgRj8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":529736},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"497018c4e3f0713e90659ddf4e4dba4d70a6b85f","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.28.0_1790167108607_0.7907045722748789","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"learn-content-engine","version":"0.29.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.29.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"fd605429a495b56bdaaf147c814a93fcfeff0a41","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.29.0.tgz","fileCount":125,"integrity":"sha512-s9m4EOdsi4MqqsFKQp9XSadtcmPiaOcOvRfPofugLjlNu0uLrFbc2EypClGQhXhbjQZHAFNv7pDvrOayEXEFSw==","signatures":[{"sig":"MEQCIDf97bKeih5lUfmnHd/3WCx5oscwewychelpJhUi1Ko0AiB6nqDJlOBIiHD1i00jmEQB2MTmw3cVv/sEcDg4orbL4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCfMGo+L+UOzvn7xy5f4zRKZoiWs/54o/Lz2SkOkghlNQIgYu4X9E9A2rCt0DYCaf111nySdizIeBeve5brffjDFKA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":613410},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/grading-presets.json":"./schema/grading-presets.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"f14f83be269a1bcefa53a71b018e3ba559f83b6e","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.29.0_1790251040622_0.13352075615739634","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"learn-content-engine","version":"0.30.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.30.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"5f95c39d0ac6657fddb7ad3efd9c55d758bafa4e","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.30.0.tgz","fileCount":125,"integrity":"sha512-Gs8f7P3K9+cv8CEXMBMrCFeBhI5EA/FgMgGmnpzY/MP1b9GRr4WcnF/yaS9sU4Oba0Ky2P8JPP9qpowW0qigDg==","signatures":[{"sig":"MEYCIQDJeTkVBytZLMXEfSwA9DD6tiuDiBZg2hXo6Y3PLCZCPgIhAPti/jbVcFXislN/6zLTY5RSR3Q6nXwn1slnP9t1GYcn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDqqXRDUxvMuoeo7E4w16v/9YvKVQ4KFRAx6+maYe6yNwIgV71sXMjdPMIu42jOCpRxzc60UBLO/umfdojFNXYZqOQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":621280},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/grading-presets.json":"./schema/grading-presets.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"3c70ab5ac937397c566d91030b699e622376e028","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.30.0_1790320589764_0.4371304808004728","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"learn-content-engine","version":"0.31.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.31.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"9fe0a75b6708eebd42bcbe4b008b0dc22976fd86","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.31.0.tgz","fileCount":129,"integrity":"sha512-p6rju3qGD5tHybcLK2i+fw7uhNyLGk42lU2+VvSIRELpgh2+0yYAzQwWYbGqmJ785hHKhfWbra2eXrSj4bB5zg==","signatures":[{"sig":"MEUCIDbkYDWPceEoPktQdU2mVLyVAm/td++RENc9s/pvp/crAiEAqv0SdV0s9Vz4wt2JBnyCvWe7UITg77LXE8kXnsSd/SI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC3ln0fmgBY6ZKDKUak41UUNGUREOUJhjSnl8cLuI5mSAIgOobbRX2m597lwq8UaD6YoU20jvD4AP/CdmmwWDJiQks=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":636231},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/grading-presets.json":"./schema/grading-presets.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"f366ac3c1e8b711d46b1210ee80523c519b7fddf","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.31.0_1790345221637_0.8242580992653645","host":"s3://npm-registry-packages-npm-production"}},"0.32.0":{"name":"learn-content-engine","version":"0.32.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.32.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"4133f33acaa46a831b9154ff8665d4b038f5eb03","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.32.0.tgz","fileCount":133,"integrity":"sha512-Fn3oxBvcuW9K8Wn8B+dfUDXrZlt3uWUYgwKmAwRROw/0+2fuys6b+SYREpUAmpAcrZ4+lX28fBymBASRnO9dpQ==","signatures":[{"sig":"MEUCIEJdmmSww4f27Wc2b6sJax0TZazPrSzGynDxVS+SMWj3AiEAjnkZsk1HvHl8qf0t25t8RITD6FhsEzmAL+FRELtq3ns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIB70uKUlIQ1OSn+VKVpMTgj4swGzA4iJYFbkAnXNI4JQAiAi4E9Ka0kh7loGSLRc+iNiOT2Tg3CIsiPRZvnqQMRbIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":708150},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/grading-presets.json":"./schema/grading-presets.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"1d5dca0c321535199fc617ba74b469742044726b","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.32.0_1790346904245_0.668978959939905","host":"s3://npm-registry-packages-npm-production"}},"0.33.0":{"name":"learn-content-engine","version":"0.33.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.33.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"81554cd242ef5cdc13ec8d85e2a66d3ef61dbce6","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.33.0.tgz","fileCount":137,"integrity":"sha512-UDaWWKmKBBD60FDTrYf74CyOFlX0h8k1xMA+wIi0LUv2gsk+h6Pqx2/1oLYkH6VgFb8OD0eeJ2OifZVzLOZdaw==","signatures":[{"sig":"MEYCIQDb30rAqtn35NxJLvvANuHWNd+nY6JOzZ874Y98MaxmgwIhAPnnwI0nxwrPz7X8f0QFZmVrPOOYA+wwHgBK+m7VK2px","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD0v4EPhBJKkpZcChlSY9OHp8MDBEs1u4oThEZ3h+mUUAIgTisjywfLkCqlg+Ma4dIQG7h4Moni088JiFntmshediw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":725682},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/grading-presets.json":"./schema/grading-presets.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"c071b4ac200988b251b36b2ff2dcec4b9686450d","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.33.0_1790348923219_0.27051845844911315","host":"s3://npm-registry-packages-npm-production"}},"0.34.0":{"name":"learn-content-engine","version":"0.34.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.34.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"422d025439a5c46ee3bc07b28878e5824987e4bb","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.34.0.tgz","fileCount":141,"integrity":"sha512-UAPHK/jZ46CSNtYV8Xf3OI/l7BvCIv3AkPVUPfdCr7sl3IEhYLX3Bo8tlWzQmQVsg6pEGpSNBJbm2++JzIw11w==","signatures":[{"sig":"MEUCIDiSWHvwxS0jLrsamGaMqzS8ZRFUSZGZvRu3GOyPesG+AiEAzwWXhj8kaeSl8A1UrlIryVGcWpKha+LCBv4xbuZX96U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIB4BdDY5n4/AIiQCrgLRTiMYNyD3knWeluEf5XX8rZKdAiEAlcDKvjVpUjV+8xUfT3C3jygcO2RSG+e6R4g9y0ZK9lw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":747730},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/grading-presets.json":"./schema/grading-presets.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"22b87e22f1e6daaa75824c369f2a4afd8b30c272","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.34.0_1790351242176_0.9801128027905264","host":"s3://npm-registry-packages-npm-production"}},"0.35.0":{"name":"learn-content-engine","version":"0.35.0","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"author":{"name":"Asterios Raptis"},"license":"MIT","_id":"learn-content-engine@0.35.0","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"homepage":"https://github.com/astrapi69/learn-content-engine#readme","bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"dist":{"shasum":"a4c44c9f53c46fd299a64aaa15a188a56373db43","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.35.0.tgz","fileCount":141,"integrity":"sha512-h1ODxhie1/kQFOFjj+VpMeBIDPdGtFN43eS1blLwm5VFf7TIpe4HysOopLKXWni1KtEiN3yWbPkYq7SNrmk/QQ==","signatures":[{"sig":"MEUCIB9xU6qy/ClCwkvi4Qx6ufUkfvR8SMDLAUAtGDxuc0HdAiEApQtSnHFNpzJybZRNZXazwtmU77iG4ydrdKNnDMDRDlE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCk5IgyNaL7LRtTW3OaWgsQZaPdbjcZR1wGwiCoyx5siAIhALKCcdmD0uT1tkV+eotX8QzXQY+heVWT49hsKSceyl9m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":749593},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/grading-presets.json":"./schema/grading-presets.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"40f471605cae0cda1d814cdd88b4003b5b72cef2","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/learn-content-engine_0.35.0_1790854124863_0.9320511738653261","host":"s3://npm-registry-packages-npm-production"}},"0.36.0":{"_id":"learn-content-engine@0.36.0","bin":{"learn-content-engine":"bin/learn-content-engine.mjs"},"bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"dist":{"shasum":"3412da04e871a286a3af4f3820566394453f3a3e","tarball":"https://registry.npmjs.org/learn-content-engine/-/learn-content-engine-0.36.0.tgz","fileCount":141,"integrity":"sha512-+aS7nwQrvritYBkFzYLx2FBlJcB+5rKxZr/1G1zKwaa//Zf2UxU9QFNOB33BQtoLUT6B4kQHLkPxRHigLS+kHA==","signatures":[{"sig":"MEYCIQDt6WBrAelzgweZ9qGBA6Gh5RqOyXvrxqqjX9zyqa8V7gIhANcuePUMiUe/zn06QGyc2QUVIWzDhItN8AKq3oQw8WsE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD7pQ3J4eY7940BOO00Eklnh9AiS9n++rQmNGWlVNwfSgIhAJ5acZAB6/MUx0t/eOQL7KcMzhFw4e77pXpaZNYSiIlX"}],"unpackedSize":753635},"main":"./dist/index.js","name":"learn-content-engine","type":"module","types":"./dist/index.d.ts","author":{"name":"Asterios Raptis"},"module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./qti":{"types":"./dist/qti/index.d.ts","import":"./dist/qti/index.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./package.json":"./package.json","./schema/lesson.schema.json":"./schema/lesson.schema.json","./schema/quality-rules.json":"./schema/quality-rules.json","./schema/grading-presets.json":"./schema/grading-presets.json","./schema/content-manifest.schema.json":"./schema/content-manifest.schema.json"},"gitHead":"1cb19444310ecebfd061fc5ca94d25a84b9f88ce","license":"MIT","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"npm run build","docs:api":"typedoc","docs:site":"node scripts/build-docs-site.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:api:check":"typedoc --emit none","prepublishOnly":"npm run build"},"version":"0.36.0","_npmUser":{"name":"astrapi69","email":"asterios.raptis@gmx.net"},"homepage":"https://github.com/astrapi69/learn-content-engine#readme","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"_npmVersion":"12.0.1","description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","directories":{},"maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.20.0","yaml":"^2.9.0","@rgrove/parse-xml":"^4.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","eslint":"^9.13.0","marked":"^18.0.13","vitest":"^2.1.0","esbuild":"^0.21.5","mermaid":"^11.16.1","typedoc":"^0.28.20","@eslint/js":"^9.13.0","typescript":"^6.0.0","@types/node":"^22.7.0","typescript-eslint":"^8.63.0","@vitest/coverage-v8":"^2.1.9","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/learn-content-engine_0.36.0_1790857717596_0.7486356038823627"}}},"time":{"created":"2026-07-06T10:40:51.385Z","modified":"2026-10-01T12:28:37.858Z","0.2.0":"2026-07-06T10:40:51.727Z","0.3.1":"2026-07-06T11:37:16.951Z","0.4.0":"2026-07-07T06:57:29.657Z","0.5.0":"2026-07-10T06:58:56.203Z","0.6.0":"2026-07-10T07:32:36.007Z","0.6.1":"2026-07-10T10:47:55.655Z","0.7.0":"2026-07-10T11:02:30.790Z","0.8.0":"2026-07-10T11:45:47.022Z","0.8.1":"2026-07-10T11:53:12.535Z","0.8.2":"2026-07-10T17:55:11.338Z","0.9.0":"2026-07-11T10:44:56.665Z","0.11.0":"2026-07-11T16:22:17.037Z","0.11.1":"2026-07-11T16:36:45.749Z","0.12.0":"2026-07-11T18:07:06.293Z","0.12.1":"2026-07-14T09:40:55.023Z","0.12.2":"2026-07-14T15:22:00.181Z","0.12.3":"2026-07-15T10:10:19.081Z","0.13.0":"2026-07-17T13:14:22.161Z","0.13.1":"2026-07-20T16:55:25.838Z","0.13.2":"2026-07-22T09:21:53.601Z","0.13.3":"2026-07-22T10:38:45.829Z","0.14.0":"2026-07-23T15:47:26.818Z","0.15.0":"2026-07-28T15:31:13.484Z","0.16.0":"2026-07-31T15:30:49.404Z","0.16.1":"2026-07-31T15:39:11.607Z","0.16.2":"2026-07-31T15:49:14.643Z","0.17.0":"2026-08-01T07:54:52.165Z","0.18.0":"2026-08-05T07:04:06.632Z","0.19.0":"2026-08-05T10:59:42.596Z","0.19.1":"2026-08-05T11:03:56.095Z","0.19.2":"2026-08-05T12:38:32.891Z","0.20.0":"2026-08-06T09:11:17.898Z","0.21.0":"2026-08-06T12:57:43.813Z","0.22.0":"2026-08-11T16:52:29.825Z","0.23.0":"2026-08-31T11:30:52.876Z","0.24.0":"2026-09-15T14:55:19.633Z","0.24.1":"2026-09-15T15:14:38.521Z","0.25.0":"2026-09-16T05:53:58.411Z","0.25.1":"2026-09-16T06:38:41.856Z","0.26.0":"2026-09-16T07:20:28.144Z","0.27.0":"2026-09-23T09:57:21.148Z","0.28.0":"2026-09-23T12:38:28.701Z","0.29.0":"2026-09-24T11:57:20.725Z","0.30.0":"2026-09-25T07:16:29.850Z","0.31.0":"2026-09-25T14:07:01.735Z","0.32.0":"2026-09-25T14:35:04.361Z","0.33.0":"2026-09-25T15:08:43.323Z","0.34.0":"2026-09-25T15:47:22.283Z","0.35.0":"2026-10-01T11:28:44.981Z","0.36.0":"2026-10-01T12:28:37.710Z"},"bugs":{"url":"https://github.com/astrapi69/learn-content-engine/issues"},"author":{"name":"Asterios Raptis"},"license":"MIT","homepage":"https://github.com/astrapi69/learn-content-engine#readme","keywords":["adaptive-learner","content","lesson","parser","content-engine","spaced-repetition","typescript"],"repository":{"url":"git+https://github.com/astrapi69/learn-content-engine.git","type":"git"},"description":"Framework-agnostic TypeScript engine that parses lesson content from pluggable sources into a canonical lesson object.","maintainers":[{"name":"astrapi69","email":"asterios.raptis@gmx.net"}],"readme":"# learn-content-engine\n\n[![npm version](https://img.shields.io/npm/v/learn-content-engine)](https://www.npmjs.com/package/learn-content-engine)\n[![CI](https://github.com/astrapi69/learn-content-engine/actions/workflows/ci.yml/badge.svg)](https://github.com/astrapi69/learn-content-engine/actions/workflows/ci.yml)\n\nFramework-agnostic TypeScript engine that parses **and validates** lesson\ncontent from pluggable sources into a canonical lesson object.\n\nIt takes raw content (a **single-JSON** lesson plus a `manifest.yaml`) and a set\ncontext, and produces canonical lesson / set-entry objects. It contains **no**\nnetwork, storage, or UI code - you supply the bytes and keep fetch +\npersistence. The bundled, strict JSON-Schema makes it a self-contained **format\nreference**: you can author and validate lessons without the application the\nformat originated in ([Adaptive Learner](https://github.com/astrapi69/adaptive-learner)).\nBeyond validity it checks a lesson against the shared quality minimums\n(`validateLessonQuality`) and turns a parametric exercise into a concrete\ninstance (`resolveExerciseVariables`), so every consumer gets the same answer.\nTracks the lesson schema, currently **v1.19**.\n\n## Install\n\n```bash\nnpm install learn-content-engine\n```\n\nESM, ships TypeScript declarations, Node >= 18.\n\n### As a git dependency\n\nFor development loops against an unreleased revision, or when consuming a fork,\ninstall straight from GitHub, pinned to a commit or tag for reproducibility:\n\n```jsonc\n// package.json of the host app\n{\n  \"dependencies\": {\n    \"learn-content-engine\": \"github:astrapi69/learn-content-engine#<commit-or-tag>\"\n  }\n}\n```\n\n`dist/` is not committed, so on install npm runs the package's `prepare` script\n(`npm run build`) to compile `dist/` (JS + `.d.ts`) from source in the checkout.\nNo extra step is needed in the host - a plain `npm install` builds the engine.\n\n## Quick example\n\n```ts\nimport { parseLesson, validateLesson, type LessonSetContext } from \"learn-content-engine\";\n\nconst context: LessonSetContext = {\n  language: \"fr\", target_language: \"fr\", source_language: \"en\", domain: \"language\",\n};\nconst raw = `{ \"id\": \"01\", \"title\": \"Greetings\", \"steps\": [\n  { \"id\": \"s1\", \"type\": \"exercise\",\n    \"exercise\": { \"id\": \"e1\", \"type\": \"free_text\", \"prompt\": \"Say hello.\", \"accept\": [\"bonjour\"] } }\n] }`;\n\nconst lesson = parseLesson(raw, context);        // canonical ContentLesson (set context injected)\nconst result = validateLesson(JSON.parse(raw));  // explicit, opt-in validation\nif (!result.valid) console.error(result.errors); // [{ path, message, id, severity, docAnchor, params? }, …]\n```\n\n## Documentation\n\n- [**Getting started**](docs/getting-started.md) - install, the 5-minute pipeline example.\n- [**Concepts**](docs/concepts.md) - the pipeline, context inheritance, the legacy alias, schema policy.\n- [**Lesson format reference**](docs/lesson-format.md) - every field and exercise type, with tested examples.\n- [**Schema diagrams**](docs/schema-diagrams.md) - four pictures of the format; the two schema-derived ones are generated and drift-gated.\n- [**Authoring patterns**](docs/authoring-patterns.md) - expressing common exercise ideas (true/false, conjugation, synonyms, collocations, word order, sung chunks) with the existing types.\n- [**Validation**](docs/validation.md) - the strict schema, the semantic rules, the quality minimums, the error model, and the `/rules` entry for browser consumers.\n- [**Extensions**](docs/extensions.md) - opt-in `ext:` exercise types, the portability contract, the registry.\n- [**QTI interop**](docs/qti.md) - the optional QTI import/export adapter (2.x and 3.0 dialects) and its `qti import` / `qti export` command, mapping table, fidelity limits.\n- [**Architecture**](docs/architecture.md) - the engine boundary, consumer parity, roadmap.\n- [**Comparative analysis**](docs/comparative-analysis.md) - exercise types benchmarked against Moodle, H5P, QTI 3.0, Canvas and Duolingo; the core / extension / adoption tiers, why not QTI or H5P as the native format, what is still open.\n- [**API reference**](https://astrapi69.github.io/learn-content-engine/api/) - generated TypeDoc for the core, `/rules` and `/qti` entry points.\n- [**Contributing**](CONTRIBUTING.md) - TDD workflow, release gate, adding an exercise type.\n- [**Security policy**](SECURITY.md) - supported versions, private vulnerability reports.\n- [**Code of conduct**](CODE_OF_CONDUCT.md) - Contributor Covenant 2.1.\n\n### Reference extensions\n\nThe core enum has six exercise types. Twelve more are worked out as\nreference extensions under `src/examples/ext-ref-*`, each with an engine half\n(payload validation), a consumer half (minimal render and grade), tests, and a\ndoc-gated example lesson in [Extensions](docs/extensions.md). They are\nexcluded from the published package; a consumer adopts one under its own\nvendor namespace (adaptive-learner runs `ext:ref-categorization` as\n`ext:al-categorization`). Before concluding a type is missing, look here:\n\n| Extension | Works out |\n|---|---|\n| [`ext:ref-ordering`](docs/extensions.md#reference-extension-extref-ordering) | put these items in the correct order |\n| [`ext:ref-categorization`](docs/extensions.md#example-extension-extref-categorization) | sort items into their buckets (1:n) |\n| [`ext:ref-error-correction`](docs/extensions.md#example-extension-extref-error-correction) | one token in the sentence is wrong: mark it, correct it |\n| [`ext:ref-reading-comprehension`](docs/extensions.md#example-extension-extref-reading-comprehension) | a passage bound to N sub-questions (stimulus with questions) |\n| [`ext:ref-graded-quiz`](docs/extensions.md#example-extension-extref-graded-quiz) | scored question set with points, partial credit, pass threshold |\n| [`ext:ref-dictation`](docs/extensions.md#example-extension-extref-dictation) | hear a clip, type what you heard |\n| [`ext:ref-image-description`](docs/extensions.md#example-extension-extref-image-description) | look at the picture, answer in free text |\n| [`ext:ref-audio-choice`](docs/extensions.md#example-extension-extref-audio-choice) | gapped sentence, pick the audio clip that fills it |\n| [`ext:ref-audio-tiles`](docs/extensions.md#example-extension-extref-audio-tiles) | hear a sentence, build its translation from word tiles |\n| [`ext:ref-speak-and-record`](docs/extensions.md#example-extension-extref-speak-and-record) | hear, reveal, record yourself (ungraded) |\n| [`ext:ref-hotspot`](docs/extensions.md#example-extension-extref-hotspot) | click the correct region of an image (rect and circle zones) |\n| [`ext:ref-parsons`](docs/extensions.md#example-extension-extref-parsons) | arrange scrambled code lines by order and indentation |\n\nParametric exercises (sampled variables, computed answers) are not an\nextension but a core field since schema 1.14: `variables` on any exercise\n(engine#151, see [Variables](docs/lesson-format.md#variables-parametric-exercises)).\nThe gap analysis behind this list is\n[docs/comparative-analysis.md](docs/comparative-analysis.md).\n\n## Public API\n\n| Export | Kind | Purpose |\n|---|---|---|\n| `parseLesson` | fn | raw source + context → canonical `ContentLesson` (via an adapter) |\n| `singleJsonLessonAdapter` | fn | the built-in single-JSON source adapter |\n| `parseManifest` | fn | raw `manifest.yaml` text → `ParsedManifest` |\n| `asContentSetEntry` | fn | raw parsed set → canonical `ContentSetEntry` |\n| `resolveLanguagePair` | fn | language-pair resolution (legacy alias + `en` default) |\n| `setBasePath` | fn | repo-relative base dir for a set |\n| `asContentSetBook` | fn | project a manifest book block → `ContentSetBook \\| null` |\n| `validateLesson` | fn | validate a lesson against the bundled schema + semantic rules → `ValidationResult` |\n| `validateManifest` | fn | validate a manifest against the bundled schema (legacy alias normalized) |\n| `validateLessonQuality` | fn | check a shape-valid lesson against the quality minimums, keyed to its `purpose` (`practice`, `bridge`, `quiz`) → `ValidationResult` of `E-QUALITY-*` shortfalls; a publication threshold, not validity ([Quality minimums](docs/lesson-format.md#quality-minimums)) |\n| `resolveExerciseVariables` | fn | resolve a parametric exercise into a concrete instance: sample, evaluate in declaration order, round, substitute every `{{name}}`; returns the exercise, the values (to persist and replay) and the tolerances of pure-reference accepted answers ([Variables](docs/lesson-format.md#variables-parametric-exercises)) |\n| `evaluateExpression` | fn | evaluate a computed variable's expression with values for its names, on the parser the validator uses |\n| `QUALITY_MINIMUMS` | const | the numbers of `schema/quality-rules.json` that `validateLessonQuality` applies |\n| `collectStableIds` | fn | set-wide `stable_id` view over several lessons: total count + duplicates with locations (the cross-lesson half the schema cannot see) |\n| `buildStableIdInventory`, `compareStableIdInventories`, `formatStabilityResult` | fn | the pure core of the shipped `check-stable-ids` gate: published-state vs head, violations V1-V6 (V5/V6 read each tree's declared `retired_ids`, engine#131) |\n| `computeStableIdCoverage`, `gateStableIdCoverage`, `formatCoverageResult` | fn | the pure core of the shipped `check-stable-id-coverage` gate: how many listed sets are fully minted, judged against the repo-local baseline |\n| `isBaseCredible` | fn | whether a comparison base is a plausible predecessor: an empty history is a broken run, not a clean one (the floor under the stability gate) |\n| `lessonIdOrderingIssues` | fn | set-level ordering check over a set's lesson ids: mixed `NN-` prefixes, inconsistent widths, lexicographic-vs-numeric divergence (`validateManifest` runs it over `metadata.lessons`) |\n| `KNOWN_CONTENT_DOMAINS` | const | the canonical domain vocabulary of the known-values-plus-other contract (engine#127); consumers group their subject facet on it instead of keeping a copy |\n| `CEFR_LEVELS` | const | the CEFR proficiency bands (`A1`..`C2`) a language set declares as its `level` |\n| `LEVEL_NONE` | const | the explicit no-level sentinel (`\"none\"`) a deliberately level-less non-language set declares (engine#127) |\n| `isKnownContentDomain` | fn | whether a `domain` value is in the canonical vocabulary (case-insensitive; absent counts as the `language` default) - the `W-DOMAIN-UNKNOWN` lint's predicate |\n| `isKnownLevel` | fn | whether a `level` is a CEFR band or, for a non-language set, the `none` sentinel - the `W-LEVEL-UNKNOWN` lint's predicate |\n| `ContentLesson`, `ContentSetEntry`, `ContentSetBook`, `ContentSetSource`, … | types | the canonical internal format |\n| `ContentLessonInlineExample` | type | one inline worked example (schema v1.5) on a theory step or exercise |\n| `ContentLessonCard`, `ContentLessonExercise`, `ContentLessonStep`, `ContentLessonResource`, `ContentLessonClozeBlank`, `ContentLessonCardTokenRole`, `ContentLessonCardTokenRoleName` | types | the rest of the `ContentLesson` field family (cards, exercises, steps, cloze blanks, token roles) |\n| `ContentCardMediaType`, `ContentExerciseDirection`, `SetStatus`, `SetVisibility` | types | enum-like fields on the canonical types above |\n| `SetReviewStatus`, `SetAttribution` | types | the set entry's review standing (schema v1.9) and attribution block |\n| `StableIdReport`, `StableIdDuplicate` | types | the `collectStableIds` return shape |\n| `StabilityResult`, `StabilityViolation`, `StableIdElement`, `StableIdInventory` | types | the `buildStableIdInventory`/`compareStableIdInventories` return + input shapes |\n| `StableIdCoverage`, `CoverageVerdict`, `CoverageSet`, `CoverageFailure` | types | the `computeStableIdCoverage` return shape |\n| `ResolvedExerciseVariables`, `ResolveExerciseVariablesOptions` | types | the `resolveExerciseVariables` return shape and its options (`random`, `values`) |\n| `ValidationResult`, `ValidationIssue`, `ValidationSeverity`, `ValidationParams`, `ValidationParamValue` | types | the `validate*` return shape (`{ valid, errors[], warnings[] }`), its issue-severity enum, and the optional `params` an issue carries when its message names a value |\n| `ExerciseExtension`, `ExtensionRegistry` | types | the `ext:` extension registry contract (schema 1.7, see [Extensions](docs/extensions.md)) |\n| `LessonSetContext`, `LessonSourceAdapter`, `ParsedManifest`, `ParsedSet`, `ParsedSetAsset`, `ParsedSetBook` | types | adapter + manifest surface |\n| `Card`, `CardTokenRole`, `ClozeBlank`, `Direction`, `Exercise`, `ExerciseType`, `InlineExample`, `Lesson`, `LessonPurpose`, `LessonResource`, `LessonStep`, `MediaType`, `Pair`, `PictureImage`, `StepType`, `TokenRole` | types | the underlying generated schema element types (one per `schema/lesson.schema.json` `$defs` entry `ContentLesson*` wraps) |\n\nThe bundled JSON-Schema ships too, so a content repo can mirror against it\ndirectly: `import schema from \"learn-content-engine/schema/lesson.schema.json\"`.\nThe same holds for `quality-rules.json` (the numbers `validateLessonQuality`\napplies) and `grading-presets.json` (the\n[grading presets](docs/lesson-format.md#grading-presets) catalog).\n\nTwo subpath entries sit next to the package root:\n\n| Entry | Exports | Purpose |\n|---|---|---|\n| `learn-content-engine/rules` | `validateLessonRules`, `validateManifestRules`, `validateLessonQuality`, `QUALITY_MINIMUMS`, `isSlugId`, `SLUG_ID_PATTERN`, `SLUG_ID_MAX_LENGTH`, plus two helpers the structural layer composes: `unusedCardIds` (the detection core of `W-CARD-UNUSED`) and `normalizeManifestAliases` (maps the legacy `language` alias to `target_language` before validation) | the semantic rules and author lints without the structural layer: no ajv, no `node:*`, for a browser consumer that has already shape-checked its input ([Validation](docs/validation.md#the-rules-without-the-structural-layer-learn-content-enginerules)) |\n| `learn-content-engine/qti` | `importQti`, `exportQti`, `qtiLessonAdapter`, ... | the optional QTI adapter and its XML parser ([QTI interop](docs/qti.md)) |\n\n## Scope\n\nBy design, this package contains **only** parse / transform /\nvalidate / types + the single-JSON source adapter - **no** fetch, storage, or\nUI; those stay in the consumer. See [architecture.md](docs/architecture.md). The\n[adaptive-learner](https://github.com/astrapi69/adaptive-learner) app **consumes\nthis library** (pinned in its `frontend/package.json`) as the reference\nconsumer, so parse/validate/types live here once. As of **v0.6.0 this engine is\nthe canonical source of the lesson schema** (schema authority moved here,\n[roadmap](docs/architecture.md#roadmap) stage 4); consumers - adaptive-learner\nand the content repos - mirror it. See [Schema authority](#schema-authority).\n\n### What this is NOT\n\nThis is a **language-learning-shaped lesson engine**: the format is built\naround cards, drill-style exercise types, and a target/source language pair\n(see [concepts.md](docs/concepts.md)). The shape carries more than languages,\nthough - a `domain` field (`language`, `programming`, `psychology`, ...;\nknown values plus other, see\n[content domains](docs/lesson-format.md#content-domains)) lets the same\nformat hold knowledge-domain sets (tech courses, driving-test prep, dog\ntraining in the dedicated domain repos below); there, `target_language` is\nsimply the language the content is written in. It is\ndeliberately **not**:\n\n- **a general assessment standard** - the CORE schema covers the exercise types\n  its consumers render and grows additively when a consumer needs a new core\n  type. A consumer needing a bespoke type can add one via the opt-in\n  [extension tier](docs/extensions.md) (`ext:` types) without touching the core\n  enum; the core stays the portable authority.\n- **a runtime** - no rendering, grading, scheduling/SRS, persistence, or\n  networking; consumers own all of that. What it computes, it computes as pure\n  functions of what the format defines: `resolveExerciseVariables` (since\n  0.34.0) turns a parametric exercise into one instance from the random\n  source the consumer passes in, and the\n  [grading presets](docs/lesson-format.md#grading-presets) are a catalog the\n  consumer applies, not grading code.\n- **a content repository** - it ships the format, the validator, and the\n  author tooling, not lessons.\n\n### Example repositories\n\nThe engine is used in the wild - these repos show the full consumer setup\n(pinned engine version, byte-mirrored schema artifacts, `make lint` running\nthe same validator locally that CI enforces):\n\n- [**adaptive-learner-content-template**](https://github.com/astrapi69/adaptive-learner-content-template) -\n  fork-and-go scaffold with one example set, the validator wiring, CI gates\n  and docs; the fastest way to see the engine used end to end.\n- [**adaptive-learner-content-test**](https://github.com/astrapi69/adaptive-learner-content-test) -\n  the test/starter repo and a conformance target of the engine's\n  `make conformance-real`, plus the full author-tooling setup.\n- [**adaptive-learner-content**](https://github.com/astrapi69/adaptive-learner-content) -\n  the production content repo: the language sets plus the app tutorial\n  (28 sets and counting).\n- **the `alc-*` domain repos** - one repo per knowledge domain, all created\n  from the template and registered in the app's repo registry:\n  [psychology](https://github.com/astrapi69/alc-psychology),\n  [programming](https://github.com/astrapi69/alc-programming),\n  [technology](https://github.com/astrapi69/alc-technology),\n  [ai](https://github.com/astrapi69/alc-ai),\n  [traffic-knowledge](https://github.com/astrapi69/alc-traffic-knowledge),\n  [dog-training](https://github.com/astrapi69/alc-dog-training),\n  [die-waehrung-des-geistes](https://github.com/astrapi69/alc-die-waehrung-des-geistes)\n  and [books](https://github.com/astrapi69/alc-books) (one set per book).\n\n## Schema authority\n\nThe **canonical source** of the lesson schema is this engine's\n[`schema/lesson.schema.json`](schema/lesson.schema.json) (+\n`content-manifest.schema.json`, `quality-rules.json`, `grading-presets.json`). It is an **authored**\nartifact here; consumers mirror the schema shipped in each pinned engine release:\n\n- **[adaptive-learner](https://github.com/astrapi69/adaptive-learner)** (the\n  reference consumer) keeps its Pydantic models as an *editorial tool* for its\n  own runtime types, but its generated schema must be **byte-identical** to the\n  engine's - its parity gate treats the engine as the reference (the consumer\n  conforms to the engine, not the reverse).\n- **Content repos** mirror the schema from the pinned engine release via their\n  drift tool (`schema/engine-version.txt`).\n\nThe lesson schema's `$id` is engine-owned:\n`https://astrapi69.github.io/learn-content-engine/schema/lesson.schema.json`.\n\nTo evolve the schema, edit the artifact here (the frozen byte baseline in\n`src/schema-baseline.test.ts` guards against accidental content drift), run\n`make sync-types` to regenerate `src/types/lesson-schema.generated.ts` from it,\nmirror any new cross-field rule in `src/rules.ts`, extend the fixtures + rule\ncatalog, and bump the version; consumers then re-pin. The TypeScript types are\ngenerated here (in-engine, `scripts/generate-lesson-types.mjs`), so they cannot\ndrift from the schema; the drift gate runs in `release-check` + CI.\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) - one dated section per release, from the\ncurrent release back to 0.1.0.\n\n## License\n\nMIT © Asterios Raptis\n","readmeFilename":"README.md"}