refactor!: cleanup platform support (#306)

* refactor!: cleanup platform support

* chore: lint

* fix: web platform

* feat: provide UniversalCache

Provide UniversalCache as a wrapper around Platform.shim.Cache.

* fix: invalid import

* refactor: remove isolated-vm support

* fix: type info

* refactor: cleanup exports

* fix: mark jintr as external dependency

In the bundled CJS node build, mark jintr as external.

* chore: add additional exports

web exports provide a way to select web implementation manually without
relying on the bundler to select it correctly from the "exports" field

web points to src/platform/web.js
web.bundle points to bundle/browser.js
web.bundle.browser points to bundle/browser.min.js

agnostic exports provide users of the library to provide their own
platform implementation without first importing the default one.

agnostic points to src/platform/lib.ts

* fix: toDash on web

* revert: eval is synchronous

* fix: use serializeDOM in FormatUtils

* ci: automate releases with `release-please`

* chore: clean up workflow files

* ci: fix NPM publish action

---------

Co-authored-by: LuanRT <luan.lrt4@gmail.com>
This commit is contained in:
Daniel Wykerd
2023-02-12 09:21:44 +02:00
committed by GitHub
parent a69e43bf3a
commit 2ccbe2ce62
504 changed files with 11184 additions and 6279 deletions

10
src/types/Cache.ts Normal file
View File

@@ -0,0 +1,10 @@
export interface ICache {
cache_dir: string;
get(key: string): Promise<ArrayBuffer | undefined>;
set(key: string, value: ArrayBuffer): Promise<void>;
remove(key: string): Promise<void>;
}
export interface ICacheConstructor {
new (persistent: boolean, persistent_directory?: string): ICache;
}

32
src/types/PlatformShim.ts Normal file
View File

@@ -0,0 +1,32 @@
import { ICacheConstructor } from './Cache.js';
export type Runtime = 'deno' | 'node' | 'browser' | 'unknown';
export type FetchFunction = typeof fetch;
export type VMPrimative = string | number | boolean | null | undefined;
interface PlatformShim {
runtime: Runtime;
info: {
version: string,
bugs_url: string,
repo_url: string
},
server: boolean;
Cache: ICacheConstructor;
sha1Hash(data: string): Promise<string>;
uuidv4(): string;
eval(code: string, env: Record<string, VMPrimative>): unknown;
DOMParser: typeof globalThis.DOMParser;
serializeDOM: (document: Document) => string;
fetch: FetchFunction;
Request: typeof Request;
Response: typeof Response;
Headers: typeof Headers;
FormData: typeof FormData;
File: typeof File;
ReadableStream: typeof ReadableStream;
}
export default PlatformShim;

4
src/types/index.ts Normal file
View File

@@ -0,0 +1,4 @@
export * from './Cache.js';
export type { default as PlatformShim } from './PlatformShim.js';
export * from './PlatformShim.js';