2.0.1 • Published 2 years ago

fetch-with-file-support v2.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

fetch() with file: support

šŸ“‚ fetch() but with support for file:///my/file.txt URLs

// Native Node.js fetch
const response = await fetch(import.meta.resolve("./data.txt"));
const text = await response.text();
console.log(text);
// šŸ›‘ TypeError: fetch failed
//   cause: Error: not implemented... yet...
// Using fetch-with-file-support in Node.js
import { fetch } from "fetch-with-file-support";
const response = await fetch(import.meta.resolve("./data.txt"));
const text = await response.text();
console.log(text);
// 'Hello from data.txt!'

šŸ”Ž Works great for writing isomorphic fetch(import.meta.resolve()) code \ 🌊 Uses fs.createReadStream() for streaming reads \ šŸ¦• Mirrors Deno's implementation of fetch() for file: URLs

Installation

npm pnpm Yarn Bun Deno

You can install this package using your favorite npm package manager like npm, Yarn, pnpm, or Bun.

npm install fetch-with-file-support

ℹ Deno already supports fetch()-ing file: URLs. This package will delegate to the native fetch() implementation.

šŸ›‘ In browsers this will delegate to the global fetch() function. Some browsers support fetch()-ing file: URLs while others do not. Some support file: URLs only under special circumstances.

Usage

Node.js Deno Bun

The quickest way to get started is to import the fetch() function straight from the module:

import { fetch } from "fetch-with-file-support";

const response = await fetch(import.meta.resolve("./package.json"));
const json = await response.json();

This is very useful when writing code that imports configuration, data, or other information from a file located right next to the .js source file. WASM is a good example.

import { fetch } from "fetch-with-file-support";

// Normally 'fetch("file:///mypkg/app_bg.wasm")' would fail in Node.js!
const { module, instance } = await WebAssembly.instantiateStreaming(
  fetch(import.meta.resolve("./app_bg.wasm")),
  imports,
);

šŸŒŽ If you prefer global polyfills, you can import fetch-with-file-support/auto.

import "fetch-with-file-support/auto";
const response = await fetch(import.meta.resolve("./data.json"));
const json = await response.json();

Development

Node.js TypeScript

npm.io

2.0.1

2 years ago

2.0.0

2 years ago

1.2.0

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.0

2 years ago