diff --git a/.gitignore b/.gitignore index fb9831c..7b8fce0 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,5 @@ dist # Local Netlify folder .netlify - -tmp/ \ No newline at end of file +tmp/ +./node-aseprite \ No newline at end of file diff --git a/lib.d.ts b/lib.d.ts index 8a82902..079f7bc 100644 --- a/lib.d.ts +++ b/lib.d.ts @@ -76,7 +76,7 @@ declare module "aseprite" { RGBA = 32, } - enum ChunkType { + export enum ChunkType { PALETTE_OLD_1 = 4, PALETTE_OLD_2 = 17, LAYER = 8196, @@ -89,6 +89,7 @@ declare module "aseprite" { PALETTE = 8217, USERDATA = 8224, SLICE = 8226, + TILESET = 8227, } interface FlagsBitset { @@ -122,10 +123,11 @@ declare module "aseprite" { numChunks: number; } & KaitaiProperties, Aseprite>; - enum CelType { + export enum CelType { RAW = 0, LINKED = 1, COMPRESSED = 2, + COMPRESSED_TILEMAP = 3, } type CelChunkData = { layerIndex: number; @@ -150,8 +152,47 @@ declare module "aseprite" { pixelsCompressed: Uint8Array; pixels: I extends true ? Buffer : undefined; } + | { + type: CelType.COMPRESSED_TILEMAP; + tilesWidth: number; + tilesHeight: number; + bitsPerTile: number; + tileIdBitmask: number; + xFlipBitmask: number; + yFlipBitmask: number; + dFlipBitmask: number; + tilesCompressed: Uint8Array; + tiles: I extends true ? Buffer : undefined; + } ) & KaitaiProperties, Aseprite>; + type TilesetChunkData = { + tilesetId: number; + numTiles: number; + tileWidth: number; + tileHeight: number; + baseIndex: number; + name: string; + pixelsCompressed: Uint8Array; + pixels: I extends true ? Buffer : undefined; + }; + export enum LayerType { + IMAGE = 0, + GROUP = 1, + TILEMAP = 2, + } + type LayerChunkData = { + blendMode: number; // TODO enum + opacity: number; + name: string; + } & ( + | { type: LayerType.IMAGE } + | { type: LayerType.GROUP } + | { + type: LayerType.TILEMAP; + tilesetIndex: number; + } + ); type Color = { r: number; g: number; b: number }; type Packet = { skip: number; numColors: number; colors: Color[] }; type PaletteOldChunkData = { @@ -175,13 +216,17 @@ declare module "aseprite" { }; type CelExtraChunk = { type: ChunkType.CEL_EXTRA }; type UserdataChunk = { type: ChunkType.USERDATA }; - type LayerChunk = { type: ChunkType.LAYER }; + type LayerChunk = { type: ChunkType.LAYER; data: LayerChunkData }; type TagsChunk = { type: ChunkType.TAGS }; type PaletteChunk = { type: ChunkType.PALETTE; data: PaletteChunkData; }; type MaskChunk = { type: ChunkType.MASK }; + type TilesetChunk = { + type: ChunkType.TILESET; + data: TilesetChunkData; + }; type Chunk = { size: number } & ( | ColorProfileChunk | PaletteOld1Chunk @@ -193,6 +238,7 @@ declare module "aseprite" { | TagsChunk | PaletteChunk | MaskChunk + | TilesetChunk ) & KaitaiProperties, Aseprite>; @@ -201,7 +247,7 @@ declare module "aseprite" { chunks: Chunk[]; } & KaitaiProperties, Aseprite>; - type Aseprite = { + export type Aseprite = { header: Header; frames: Frame[]; } & KaitaiProperties; @@ -218,6 +264,9 @@ declare module "aseprite" { CelChunk: { CelTypeEnum: typeof CelType; }; + LayerChunk: { + TypeEnum: typeof LayerType; + }; }; }; } diff --git a/netlify.toml b/netlify.toml index 1adf2c9..d482639 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,3 +1,6 @@ +[build] + command = "pnpm run build:aseprite && pnpm run build" + [functions] node_bundler = "esbuild" external_node_modules = ["@cornerstonejs/codec-libjpeg-turbo-8bit"] diff --git a/netlify/functions/counter.ts b/netlify/functions/counter.ts index d4a0994..b0911e4 100644 --- a/netlify/functions/counter.ts +++ b/netlify/functions/counter.ts @@ -53,7 +53,7 @@ function counterTemplate(digits: string[], align: string | null) {