forked from external-repos/squoosh
Address review comments
* Updated import to contain file extension `js` * Separated WebAssembly definitions from missing-types * Converted resizer.resize result to Uint8ClampedArray * Moved ResizeInstantiateOptions to an interface
This commit is contained in:
132
libsquoosh/src/WebAssembly.d.ts
vendored
Normal file
132
libsquoosh/src/WebAssembly.d.ts
vendored
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
/**
|
||||||
|
* WebAssembly definitions are not available in `@types/node` yet,
|
||||||
|
* so these are copied from `lib.dom.d.ts`
|
||||||
|
*/
|
||||||
|
declare namespace WebAssembly {
|
||||||
|
interface CompileError {}
|
||||||
|
|
||||||
|
var CompileError: {
|
||||||
|
prototype: CompileError;
|
||||||
|
new (): CompileError;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface Global {
|
||||||
|
value: any;
|
||||||
|
valueOf(): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
var Global: {
|
||||||
|
prototype: Global;
|
||||||
|
new (descriptor: GlobalDescriptor, v?: any): Global;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface Instance {
|
||||||
|
readonly exports: Exports;
|
||||||
|
}
|
||||||
|
|
||||||
|
var Instance: {
|
||||||
|
prototype: Instance;
|
||||||
|
new (module: Module, importObject?: Imports): Instance;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface LinkError {}
|
||||||
|
|
||||||
|
var LinkError: {
|
||||||
|
prototype: LinkError;
|
||||||
|
new (): LinkError;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface Memory {
|
||||||
|
readonly buffer: ArrayBuffer;
|
||||||
|
grow(delta: number): number;
|
||||||
|
}
|
||||||
|
|
||||||
|
var Memory: {
|
||||||
|
prototype: Memory;
|
||||||
|
new (descriptor: MemoryDescriptor): Memory;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface Module {}
|
||||||
|
|
||||||
|
var Module: {
|
||||||
|
prototype: Module;
|
||||||
|
new (bytes: BufferSource): Module;
|
||||||
|
customSections(moduleObject: Module, sectionName: string): ArrayBuffer[];
|
||||||
|
exports(moduleObject: Module): ModuleExportDescriptor[];
|
||||||
|
imports(moduleObject: Module): ModuleImportDescriptor[];
|
||||||
|
};
|
||||||
|
|
||||||
|
interface RuntimeError {}
|
||||||
|
|
||||||
|
var RuntimeError: {
|
||||||
|
prototype: RuntimeError;
|
||||||
|
new (): RuntimeError;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface Table {
|
||||||
|
readonly length: number;
|
||||||
|
get(index: number): Function | null;
|
||||||
|
grow(delta: number): number;
|
||||||
|
set(index: number, value: Function | null): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
var Table: {
|
||||||
|
prototype: Table;
|
||||||
|
new (descriptor: TableDescriptor): Table;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface GlobalDescriptor {
|
||||||
|
mutable?: boolean;
|
||||||
|
value: ValueType;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface MemoryDescriptor {
|
||||||
|
initial: number;
|
||||||
|
maximum?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ModuleExportDescriptor {
|
||||||
|
kind: ImportExportKind;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ModuleImportDescriptor {
|
||||||
|
kind: ImportExportKind;
|
||||||
|
module: string;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TableDescriptor {
|
||||||
|
element: TableKind;
|
||||||
|
initial: number;
|
||||||
|
maximum?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface WebAssemblyInstantiatedSource {
|
||||||
|
instance: Instance;
|
||||||
|
module: Module;
|
||||||
|
}
|
||||||
|
|
||||||
|
type ImportExportKind = 'function' | 'global' | 'memory' | 'table';
|
||||||
|
type TableKind = 'anyfunc';
|
||||||
|
type ValueType = 'f32' | 'f64' | 'i32' | 'i64';
|
||||||
|
type ExportValue = Function | Global | Memory | Table;
|
||||||
|
type Exports = Record<string, ExportValue>;
|
||||||
|
type ImportValue = ExportValue | number;
|
||||||
|
type ModuleImports = Record<string, ImportValue>;
|
||||||
|
type Imports = Record<string, ModuleImports>;
|
||||||
|
function compile(bytes: BufferSource): Promise<Module>;
|
||||||
|
// `compileStreaming` does not exist in NodeJS
|
||||||
|
// function compileStreaming(source: Response | Promise<Response>): Promise<Module>;
|
||||||
|
function instantiate(
|
||||||
|
bytes: BufferSource,
|
||||||
|
importObject?: Imports,
|
||||||
|
): Promise<WebAssemblyInstantiatedSource>;
|
||||||
|
function instantiate(
|
||||||
|
moduleObject: Module,
|
||||||
|
importObject?: Imports,
|
||||||
|
): Promise<Instance>;
|
||||||
|
// `instantiateStreaming` does not exist in NodeJS
|
||||||
|
// function instantiateStreaming(response: Response | PromiseLike<Response>, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;
|
||||||
|
function validate(bytes: BufferSource): boolean;
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { promises as fsp } from 'fs';
|
import { promises as fsp } from 'fs';
|
||||||
import { instantiateEmscriptenWasm, pathify } from './emscripten-utils';
|
import { instantiateEmscriptenWasm, pathify } from './emscripten-utils.js';
|
||||||
|
|
||||||
interface RotateModuleInstance {
|
interface RotateModuleInstance {
|
||||||
exports: {
|
exports: {
|
||||||
@@ -15,6 +15,14 @@ interface ResizeWithAspectParams {
|
|||||||
target_height: number;
|
target_height: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ResizeInstantiateOptions {
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
method: string;
|
||||||
|
premultiply: boolean;
|
||||||
|
linearRGB: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
// Needed for being able to use ImageData as type in codec types
|
// Needed for being able to use ImageData as type in codec types
|
||||||
type ImageData = typeof import('./image_data');
|
type ImageData = typeof import('./image_data');
|
||||||
@@ -147,13 +155,7 @@ export const preprocessors = {
|
|||||||
method,
|
method,
|
||||||
premultiply,
|
premultiply,
|
||||||
linearRGB,
|
linearRGB,
|
||||||
}: {
|
}: ResizeInstantiateOptions,
|
||||||
width: number;
|
|
||||||
height: number;
|
|
||||||
method: string;
|
|
||||||
premultiply: boolean;
|
|
||||||
linearRGB: boolean;
|
|
||||||
},
|
|
||||||
) => {
|
) => {
|
||||||
({ width, height } = resizeWithAspect({
|
({ width, height } = resizeWithAspect({
|
||||||
input_width,
|
input_width,
|
||||||
@@ -161,17 +163,19 @@ export const preprocessors = {
|
|||||||
target_width: width,
|
target_width: width,
|
||||||
target_height: height,
|
target_height: height,
|
||||||
}));
|
}));
|
||||||
|
const resizeResult = resize.resize(
|
||||||
|
buffer,
|
||||||
|
input_width,
|
||||||
|
input_height,
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
resizeNameToIndex(method),
|
||||||
|
premultiply,
|
||||||
|
linearRGB,
|
||||||
|
);
|
||||||
return new ImageData(
|
return new ImageData(
|
||||||
resize.resize(
|
// ImageData does not accept Uint8Array so we convert it to a clamped array
|
||||||
buffer,
|
new Uint8ClampedArray(resizeResult),
|
||||||
input_width,
|
|
||||||
input_height,
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
resizeNameToIndex(method),
|
|
||||||
premultiply,
|
|
||||||
linearRGB,
|
|
||||||
),
|
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
export default class ImageData {
|
export default class ImageData {
|
||||||
readonly data: Uint8ClampedArray | Uint8Array;
|
readonly data: Uint8ClampedArray;
|
||||||
readonly width: number;
|
readonly width: number;
|
||||||
readonly height: number;
|
readonly height: number;
|
||||||
|
|
||||||
constructor(
|
constructor(data: Uint8ClampedArray, width: number, height: number) {
|
||||||
data: Uint8ClampedArray | Uint8Array,
|
|
||||||
width: number,
|
|
||||||
height: number,
|
|
||||||
) {
|
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
|
|||||||
133
libsquoosh/src/missing-types.d.ts
vendored
133
libsquoosh/src/missing-types.d.ts
vendored
@@ -31,136 +31,3 @@ type MessageEvent = never;
|
|||||||
|
|
||||||
type BufferSource = ArrayBufferView | ArrayBuffer;
|
type BufferSource = ArrayBufferView | ArrayBuffer;
|
||||||
type URL = import('url').URL;
|
type URL = import('url').URL;
|
||||||
|
|
||||||
/**
|
|
||||||
* WebAssembly definitions are not available in `@types/node` yet,
|
|
||||||
* so these are copied from `lib.dom.d.ts`
|
|
||||||
*/
|
|
||||||
declare namespace WebAssembly {
|
|
||||||
interface CompileError {}
|
|
||||||
|
|
||||||
var CompileError: {
|
|
||||||
prototype: CompileError;
|
|
||||||
new (): CompileError;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface Global {
|
|
||||||
value: any;
|
|
||||||
valueOf(): any;
|
|
||||||
}
|
|
||||||
|
|
||||||
var Global: {
|
|
||||||
prototype: Global;
|
|
||||||
new (descriptor: GlobalDescriptor, v?: any): Global;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface Instance {
|
|
||||||
readonly exports: Exports;
|
|
||||||
}
|
|
||||||
|
|
||||||
var Instance: {
|
|
||||||
prototype: Instance;
|
|
||||||
new (module: Module, importObject?: Imports): Instance;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface LinkError {}
|
|
||||||
|
|
||||||
var LinkError: {
|
|
||||||
prototype: LinkError;
|
|
||||||
new (): LinkError;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface Memory {
|
|
||||||
readonly buffer: ArrayBuffer;
|
|
||||||
grow(delta: number): number;
|
|
||||||
}
|
|
||||||
|
|
||||||
var Memory: {
|
|
||||||
prototype: Memory;
|
|
||||||
new (descriptor: MemoryDescriptor): Memory;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface Module {}
|
|
||||||
|
|
||||||
var Module: {
|
|
||||||
prototype: Module;
|
|
||||||
new (bytes: BufferSource): Module;
|
|
||||||
customSections(moduleObject: Module, sectionName: string): ArrayBuffer[];
|
|
||||||
exports(moduleObject: Module): ModuleExportDescriptor[];
|
|
||||||
imports(moduleObject: Module): ModuleImportDescriptor[];
|
|
||||||
};
|
|
||||||
|
|
||||||
interface RuntimeError {}
|
|
||||||
|
|
||||||
var RuntimeError: {
|
|
||||||
prototype: RuntimeError;
|
|
||||||
new (): RuntimeError;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface Table {
|
|
||||||
readonly length: number;
|
|
||||||
get(index: number): Function | null;
|
|
||||||
grow(delta: number): number;
|
|
||||||
set(index: number, value: Function | null): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
var Table: {
|
|
||||||
prototype: Table;
|
|
||||||
new (descriptor: TableDescriptor): Table;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface GlobalDescriptor {
|
|
||||||
mutable?: boolean;
|
|
||||||
value: ValueType;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface MemoryDescriptor {
|
|
||||||
initial: number;
|
|
||||||
maximum?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ModuleExportDescriptor {
|
|
||||||
kind: ImportExportKind;
|
|
||||||
name: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ModuleImportDescriptor {
|
|
||||||
kind: ImportExportKind;
|
|
||||||
module: string;
|
|
||||||
name: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface TableDescriptor {
|
|
||||||
element: TableKind;
|
|
||||||
initial: number;
|
|
||||||
maximum?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface WebAssemblyInstantiatedSource {
|
|
||||||
instance: Instance;
|
|
||||||
module: Module;
|
|
||||||
}
|
|
||||||
|
|
||||||
type ImportExportKind = 'function' | 'global' | 'memory' | 'table';
|
|
||||||
type TableKind = 'anyfunc';
|
|
||||||
type ValueType = 'f32' | 'f64' | 'i32' | 'i64';
|
|
||||||
type ExportValue = Function | Global | Memory | Table;
|
|
||||||
type Exports = Record<string, ExportValue>;
|
|
||||||
type ImportValue = ExportValue | number;
|
|
||||||
type ModuleImports = Record<string, ImportValue>;
|
|
||||||
type Imports = Record<string, ModuleImports>;
|
|
||||||
function compile(bytes: BufferSource): Promise<Module>;
|
|
||||||
// `compileStreaming` does not exist in NodeJS
|
|
||||||
// function compileStreaming(source: Response | Promise<Response>): Promise<Module>;
|
|
||||||
function instantiate(
|
|
||||||
bytes: BufferSource,
|
|
||||||
importObject?: Imports,
|
|
||||||
): Promise<WebAssemblyInstantiatedSource>;
|
|
||||||
function instantiate(
|
|
||||||
moduleObject: Module,
|
|
||||||
importObject?: Imports,
|
|
||||||
): Promise<Instance>;
|
|
||||||
// `instantiateStreaming` does not exist in NodeJS
|
|
||||||
// function instantiateStreaming(response: Response | PromiseLike<Response>, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;
|
|
||||||
function validate(bytes: BufferSource): boolean;
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user