Azion unenv Preset
A preset configuration for unenv that provides polyfills and environment compatibility for Azion Edge Runtime.
Go to Azion Libraries OverviewUsage
The preset can be used with unenv to provide compatibility between Node.js and Azion Edge Runtime environments:
import { preset } from '@azion/unenv-preset'// Use with unenvexport default { preset: preset}
Features
Node.js Polyfills
This preset provides polyfills for common Node.js APIs to ensure compatibility when running code in the Azion Edge Runtime environment. The following modules are polyfilled:
Module | Description |
---|---|
crypto | Complete cryptographic functionality including hashing, encryption, and UUID generation. |
events | Event handling through events/events.js . |
http | HTTP client functionality via stream-http . |
module | Basic module system compatibility (limited functionality). |
stream | Stream implementations via stream-browserify . |
string_decoder | String decoding utilities. |
url | URL parsing and formatting. |
util | Utility functions. |
timers | Timer functions via timers-browserify . |
vm | Virtual Machine functionality via vm-browserify . |
zlib | Compression functionality via browserify-zlib . |
Example:
This exemple is using the crypto
polyfill.
import { createHash, randomUUID } from '@azion/unenv-preset/polyfills/node/crypto'
// Create a hashconst hash = createHash('sha256')hash.update('some data')console.log(hash.digest('hex'))
// Generate a UUIDconst uuid = randomUUID()
File System Polyfills
The preset includes comprehensive file system polyfills that mirror Node.js’s fs
module functionality. These polyfills work with an in-memory file system when running in the Edge Runtime.
Basic File Operations
import { readFileSync, writeFileSync } from '@azion/unenv-preset/polyfills/node/fs'// Read a fileconst content = readFileSync('/path/to/file.txt', 'utf8')// Write to a filewriteFileSync('/path/to/new-file.txt', 'Hello World', 'utf8')
Directory Operations
import { readdirSync, mkdirSync } from '@azion/unenv-preset/polyfills/node/fs'
// List directory contentsconst files = readdirSync('/path/to/dir')
// Create a directorymkdirSync('/path/to/new-dir')
File Stats and Information
import { statSync, existsSync } from '@azion/unenv-preset/polyfills/node/fs'
// Check if file existsif (existsSync('/path/to/file.txt')) { // Get file stats const stats = statSync('/path/to/file.txt') console.log(`File size: ${stats.size}`) console.log(`Is directory: ${stats.isDirectory()}`) console.log(`Is file: ${stats.isFile()}`)}
File Descriptors
import { openSync, closeSync, readSync } from '@azion/unenv-preset/polyfills/node/fs'
// Open file and get file descriptorconst fd = openSync('/path/to/file.txt', 'r')
// Read from file descriptorconst buffer = Buffer.alloc(1024)readSync(fd, buffer, 0, 1024, 0)
// Close file descriptorcloseSync(fd)
Global Polyfills
The preset also provides polyfills for Node.js global variables and objects:
Global Object | Description |
---|---|
__dirname | Current directory name. |
__filename | Current file name. |
process | Process information and environment (including env variables). |
performance | Performance timing functionality. |
navigator | Browser-compatible navigator object. |
The preset also handles injection of these globals through the unenv configuration:
import { preset } from '@azion/unenv-preset'
// Preset configuration automatically injects globalsexport default { inject: { __dirname: preset.inject.__dirname, __filename: preset.inject.__filename, process: preset.inject.process, performance: preset.inject.performance, navigator: preset.inject.navigator }}
API Reference
getFileContent
Decodes file content and returns it as either a Buffer or string.
Parameters:
Parameter | Description | Values |
---|---|---|
file | The file object containing content in base64 format. | — |
returnBuffer | Determines return type (default: true ). | true → Returns a Buffer,false → Returns a string. |
Returns:
Return Type | Description |
---|---|
Buffer | string | The decoded file content. |
Example:
const fileBuffer = getFileContent(file) // returns Bufferconst fileString = getFileContent(file, false) // returns string
closeSync
Synchronously closes the file descriptor.
Parameters:
Parameter | Description |
---|---|
fd | The file descriptor to close. |
Example:
closeSync(fd)
openSync
Synchronously opens a file.
Parameters:
Parameter | Description |
---|---|
path | The path to the file. |
flags | The opening mode (for example, ‘r’, ‘w’). |
mode | (Optional) The file mode. |
Returns:
Return Type | Description |
---|---|
number | The file descriptor. |
Example:
const fd = openSync('/path/to/file.txt', 'r')
statSync
Synchronously retrieves the fs.Stats
for the specified path.
Parameters:
Parameter | Description |
---|---|
path | The path to the file or directory. |
options | (Optional) Options for the stat call. |
Returns:
Return Type | Description |
---|---|
fs.Stats | The stats object for the file or directory. |
Example:
const stats = statSync('/path/to/file.txt')
readFileSync
Synchronously reads the entire contents of a file.
Parameters:
Parameter | Description |
---|---|
path | The file path. |
options | (Optional) Options for reading the file. |
Returns:
Return Type | Description |
---|---|
string | Buffer | The file contents. |
Example:
const content = readFileSync('/path/to/file.txt', 'utf8')
readdirSync
Synchronously reads the contents of a directory.
Parameters:
Parameter | Description |
---|---|
path | The directory path. |
options | (Optional) Options for reading the directory. |
Returns:
Return Type | Description |
---|---|
string[] | An array of file names in the directory. |
Example:
const files = readdirSync('/path/to/dir')
Contributors