Spaces:
Running
Running
Download core/packs.mjs from fivetech/Core-Agentic-ERP: direct link, hf CLI and curl.
- Browser
- Download file 2.55 kB
-
https://huggingface.co/spaces/fivetech/Core-Agentic-ERP/resolve/main/core/packs.mjs
- Command line
-
hf download hf://spaces/fivetech/Core-Agentic-ERP/core/packs.mjs
-
curl -L -o packs.mjs https://huggingface.co/spaces/fivetech/Core-Agentic-ERP/resolve/main/core/packs.mjs
2.55 kB
| export const APPacks = { | |
| registry: [], | |
| migrations: [], | |
| async load(){ | |
| const idx = await fetch('packs/index.json'); | |
| if(!idx.ok)throw Error('No se pudo cargar packs/index.json'); | |
| const reg = await idx.json(); | |
| if(!reg||!Array.isArray(reg.countries))throw Error('Registro de packs inv谩lido'); | |
| const plan = await fetch('data/migrations/index.json'); | |
| APPacks.migrations = plan.ok ? ((await plan.json()).migrations || []) : []; | |
| APPacks.registry = []; | |
| for(const entry of reg.countries)APPacks.register(entry); | |
| return APPacks.registry; | |
| }, | |
| register(entry){ | |
| const e = entry || {}; | |
| if(!/^[A-Z]{2}$/.test(e.code||''))throw Error('C贸digo de pack inv谩lido'); | |
| if(typeof e.name!=='string'||!e.name.trim())throw Error('Pack sin nombre: '+e.code); | |
| if(!['borrador','en_revision','validado'].includes(e.status))throw Error('Estado de pack inv谩lido: '+e.code); | |
| if(typeof e.runtime_enabled!=='boolean')throw Error('runtime_enabled inv谩lido: '+e.code); | |
| const files = e.files || {}; | |
| const list = (v) => Array.isArray(v) ? v.filter((x) => typeof x === 'string') : []; | |
| const rec = { | |
| code: e.code, name: e.name, status: e.status, runtime_enabled: e.runtime_enabled, | |
| maintainer: typeof e.maintainer === 'string' ? e.maintainer : '', | |
| scope: list(e.scope), data: list(files.data), locale: list(files.locale), tests: list(files.tests), | |
| }; | |
| const at = APPacks.registry.findIndex((p) => p.code === rec.code); | |
| if(at < 0)APPacks.registry.push(rec); else APPacks.registry[at] = rec; | |
| return rec; | |
| }, | |
| migrationOf(code){ | |
| return APPacks.migrations.find((m) => typeof m.file === 'string' && m.file.endsWith('_pack_' + code + '.sql')) || null; | |
| }, | |
| gate(code){ | |
| const pack = APPacks.registry.find((p) => p.code === code); | |
| if(!pack)return { code, registered: false, eligible: false, reasons: ['pack no registrado en el kernel'] }; | |
| const reasons = []; | |
| if(pack.status !== 'validado')reasons.push('estado ' + pack.status + ': falta revisi贸n humana'); | |
| if(!pack.tests.length)reasons.push('sin pruebas adjuntas'); | |
| const mig = APPacks.migrationOf(pack.code); | |
| if(!mig)reasons.push('sin migraci贸n asociada _pack_' + pack.code + '.sql'); | |
| if(!pack.data.length)reasons.push('sin datos declarados'); | |
| if(!pack.runtime_enabled)reasons.push('runtime_enabled=false'); | |
| return { code: pack.code, registered: true, eligible: reasons.length === 0, reasons, migration: mig && mig.file, status: pack.status }; | |
| }, | |
| }; | |
| globalThis.APPacks = APPacks; | |