CREAR / TOOLKIT

Toolkit para creación por código

Toolkit es la opción de autoría cuando el curso se genera desde código, una integración de servidor o un proceso automatizado. Si estás creando manualmente, Studio suele ser el recorrido más directo.

1. Antes de empezar

Toolkit se instala mediante NPM y requiere Node.js 22 o posterior. La prerelease pública actual es 0.5.0-alpha.11 bajo el dist-tag next.

Terminal
npm install @p2lrn/toolkit@0.5.0-alpha.11

Subpaths públicos: @p2lrn/toolkit/core, /reader, /creator, /authoring, /host y /document-reader.

2. Recorrido habitual

El flujo de creación por código tiene cuatro pasos: crear un workspace, añadir estructura y recursos, aplicar reglas opcionales y construir el paquete final.

TypeScript
import { P2LRNAuthoringWorkspace } from '@p2lrn/toolkit/authoring';

const workspace = P2LRNAuthoringWorkspace.create('./workspace', {
  title: 'Curso de seguridad básica',
  language: 'es',
});

workspace.addUnit({
  key: 'unidad-1',
  title: 'Fundamentos',
});

workspace.addFile({
  source: './material/intro.html',
  key: 'intro',
  title: 'Introducción',
  parent: 'unidad-1',
  mediaType: 'text/html',
});

workspace.build('./curso.p2lrn', {
  strictProfiles: true,
});

El workspace es el proyecto editable; curso.p2lrn es el archivo portable que entregarás al Player.

3. Operaciones de autoría

create / open / load

P2LRNAuthoringWorkspace y los aliases createAuthoringWorkspace(), openAuthoringWorkspace(), loadAuthoringWorkspace() gestionan el proyecto editable.

addUnit

Añade una unidad dentro del curso u otra unidad.

addFile / addUrl / addWebContent

Incorpora recursos locales, URLs o contenido web.

addQuestionnaire / addComponent / addComposite

Crea evaluación y contenido nativo.

setCourseMetadata / setEntityText / setChildren

Actualiza metadatos/texto y orden explícito.

setCourseRights

Guarda author, createdAt, license y copyrightHolder en la extensión portable de derechos.

setProgression

Aplica obligatoriedad, bloqueos, finalización, nota mínima y prerrequisitos.

build

Construye y valida el paquete final.

4. Leer documentos antes de convertirlos en curso

Reader extrae estructura; no decide por ti qué parte del documento debe convertirse en una lección, actividad o recurso. Esa decisión permanece en Studio, en tu código o en la lógica de tu aplicación.

DOCUMENTO→reader()→estructura→decisión de autoría→contenido P2LRN
DOCX / PPTX

Extrae estructura y contenido interno.

PDF

Lee texto cuando está disponible; necesita pdfjs-dist como dependencia opcional.

ODT / EPUB

Lee el contenido del contenedor.

TXT / Markdown / HTML / RTF / TEX / XML / YAML

Realiza lectura estructural ligera.

5. Progresión y cuestionarios

Las reglas de navegación se añaden al mismo workspace. Consulta Progresión para required, gateFollowing, nota mínima y prerrequisitos. Para evaluaciones y juegos consulta Cuestionarios y juegos; esas guías incluyen ejemplos válidos y los identificadores técnicos exactos.

6. Cuándo usar la CLI en lugar de la API

La API encaja mejor dentro de una aplicación TypeScript. La CLI es útil en scripts, terminales, procesos de integración o comprobaciones manuales. Ambas trabajan sobre el mismo formato.

7. Herramientas avanzadas

Multipart

Divide recursos grandes en partes verificadas. Ver guía.

Cambios incrementales (Delta)

Crea y aplica diferencias entre paquetes cuando necesitas transportar cambios.

Firma y confianza (Trust)

Genera claves, firma y verifica paquetes mediante firmas separadas.

Inspect / Reader

Permiten revisar estructura, planes y contenido antes o después del build.

8. Host autoritativo de referencia

El subpath @p2lrn/toolkit/host incorpora una implementación server-side para probar y construir la frontera autoritativa del host.

createReferenceAuthoritativeHost()

Expone un Host Adapter v1 con partición definida por el servidor, estado, eventos, recursos y calificación autoritativa.

createMemoryAuthoritativeHostStore()

Store de referencia para tests/procesos efímeros.

createJsonFileAuthoritativeHostStore(path)

Persistencia JSON atómica de referencia para un único proceso.

reportScore() exige un grade() del servidor que devuelva authoritative:true; no eleva automáticamente una nota procedente del navegador.