From e9e0095678ee338f9346902c0a7bada6a6bd4891 Mon Sep 17 00:00:00 2001 From: JounQin Date: Tue, 26 Dec 2023 11:00:55 +0800 Subject: [PATCH] Create funny-meals-speak.md --- .changeset/funny-meals-speak.md | 55 +++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .changeset/funny-meals-speak.md diff --git a/.changeset/funny-meals-speak.md b/.changeset/funny-meals-speak.md new file mode 100644 index 000000000..1cb65fdd3 --- /dev/null +++ b/.changeset/funny-meals-speak.md @@ -0,0 +1,55 @@ +--- +"synckit": patch +--- + +feat: add new `globalShims` option, what means you can env `SYNCKIT_GLOBAL_SHIMS=1` to enable auto polyfilling for some modules, for example: `fetch` from `node-fetch`, `performance` from `node:perf_hooks`. + +You can also pass a custom `globalShims` option as `GlobalShim` `Array` to custom your own shims: + +````ts +export interface GlobalShim { + moduleName: string + /** + * `undefined` means side effect only + */ + globalName?: string + /** + * 1. `undefined` or empty string means `default`, for example: + * ```js + * import globalName from 'module-name' + * ``` + * + * 2. `null` means namespaced, for example: + * ```js + * import * as globalName from 'module-name' + * ``` + * + */ + named?: string | null + /** + * If not `false`, the shim will only be applied when the original `globalName` unavailable, + * for example you may only want polyfill `globalThis.fetch` when it's unavailable natively: + * ```js + * import fetch from 'node-fetch' + * + * if (!globalThis.fetch) { + * globalThis.fetch = fetch + * } + * ``` + */ + conditional?: boolean +} +```` + +You can aslo reuse the exported `DEFAULT_GLOBAL_SHIMS_PRESET` for extanding: + +```js +import { DEFAULT_GLOBAL_SHIMS_PRESET, createSyncFn } from 'synckit' + +const syncFn = createSyncFn(require.resolve('./worker'), { + globalShims: [ + ...DEFAULT_GLOBAL_SHIMS_PRESET, + // your own shim here + ] +}) +```