@nocha/generated-sprites
v0.1.0
Published
Bounded SVG validation, rasterization and pixel palettes for standalone Nocha experiences.
Readme
@nocha/generated-sprites
Browser primitives extracted from Cabas, Canevas 2000 and Canva Ultra. The package validates a restrictive SVG subset, rasterizes at 24 or 32 pixels, and converts RGBA data into a deterministic palette and digit rows. It has no runtime dependencies, SDK calls, network requests or persistence.
import { extractSvg, rasterizeSvg, pixelsToSprite } from '@nocha/generated-sprites';
const svg = extractSvg(providerText);
const pixels = await rasterizeSvg(svg, 32, abortSignal);
const sprite = pixelsToSprite(pixels, {
size: 32,
paletteSize: 6,
minOpaquePixels: 16,
maxOpaquePixels: 32 * 32 * 0.88,
});Callers retain their generated artwork names, gameplay types, consent, provider calls and retry policy. Canevas 2000 uses its historical maximum of 900 opaque cells; Cabas and Canva Ultra use 88 percent of the grid. Canva Ultra uses three palette colors for its 24-pixel equipment and six for its 32-pixel companion.
The SVG validator preserves the existing 8,000-character limit, namespace and element/attribute allowlists, bounded coordinates, nesting and complexity limits. External resources, scripts, CSS, entities and nested SVG are refused. Raster decoding has a five-second timeout and honors cancellation. Alpha values below 128 produce transparent cells. Palette rows use 0 for transparency and 1–6 for palette entries. Failures carry code: "svg_conversion_failed".
Rasterization and XML validation require browser DOM/Canvas APIs. Pass ImageData of the configured dimensions to pure pixel conversion. Importing the package itself performs no DOM work.
Run npm run typecheck and npm run build here. npm pack includes only compiled JavaScript, declarations, this README. Consumers must lock a published version available to their archive build; sibling/workspace links do not form portable experience dependencies.
