@netlify/esbuild
Advanced tools
Comparing version 0.13.6 to 0.13.13
339
install.js
@@ -0,5 +1,9 @@ | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __defProps = Object.defineProperties; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropDescs = Object.getOwnPropertyDescriptors; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getOwnPropSymbols = Object.getOwnPropertySymbols; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
@@ -20,100 +24,83 @@ var __propIsEnum = Object.prototype.propertyIsEnumerable; | ||
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); | ||
const fs = require("fs"); | ||
const os = require("os"); | ||
const path = require("path"); | ||
const zlib = require("zlib"); | ||
const https = require("https"); | ||
const child_process = require("child_process"); | ||
const version = "0.13.6"; | ||
const binPath = path.join(__dirname, "bin", "esbuild"); | ||
async function installBinaryFromPackage(name, fromPath, toPath) { | ||
const cachePath = getCachePath(name); | ||
try { | ||
fs.copyFileSync(cachePath, toPath); | ||
fs.chmodSync(toPath, 493); | ||
validateBinaryVersion(toPath); | ||
const now = new Date(); | ||
fs.utimesSync(cachePath, now, now); | ||
return; | ||
} catch (e) { | ||
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); | ||
var __reExport = (target, module2, desc) => { | ||
if (module2 && typeof module2 === "object" || typeof module2 === "function") { | ||
for (let key of __getOwnPropNames(module2)) | ||
if (!__hasOwnProp.call(target, key) && key !== "default") | ||
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); | ||
} | ||
let buffer; | ||
let didFail = false; | ||
try { | ||
buffer = installUsingNPM(name, fromPath); | ||
} catch (err) { | ||
didFail = true; | ||
console.error(`Trying to install "${name}" using npm`); | ||
console.error(`Failed to install "${name}" using npm: ${err && err.message || err}`); | ||
return target; | ||
}; | ||
var __toModule = (module2) => { | ||
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); | ||
}; | ||
// lib/npm/node-platform.ts | ||
var fs = require("fs"); | ||
var os = require("os"); | ||
var path = require("path"); | ||
var ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH; | ||
var knownWindowsPackages = { | ||
"win32 arm64 LE": "esbuild-windows-arm64", | ||
"win32 ia32 LE": "esbuild-windows-32", | ||
"win32 x64 LE": "esbuild-windows-64" | ||
}; | ||
var knownUnixlikePackages = { | ||
"android arm64 LE": "esbuild-android-arm64", | ||
"darwin arm64 LE": "esbuild-darwin-arm64", | ||
"darwin x64 LE": "esbuild-darwin-64", | ||
"freebsd arm64 LE": "esbuild-freebsd-arm64", | ||
"freebsd x64 LE": "esbuild-freebsd-64", | ||
"linux arm LE": "esbuild-linux-arm", | ||
"linux arm64 LE": "esbuild-linux-arm64", | ||
"linux ia32 LE": "esbuild-linux-32", | ||
"linux mips64el LE": "esbuild-linux-mips64le", | ||
"linux ppc64 LE": "esbuild-linux-ppc64le", | ||
"linux x64 LE": "esbuild-linux-64", | ||
"netbsd x64 LE": "esbuild-netbsd-64", | ||
"openbsd x64 LE": "esbuild-openbsd-64", | ||
"sunos x64 LE": "esbuild-sunos-64" | ||
}; | ||
function pkgAndSubpathForCurrentPlatform() { | ||
let pkg; | ||
let subpath; | ||
let platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`; | ||
if (platformKey in knownWindowsPackages) { | ||
pkg = knownWindowsPackages[platformKey]; | ||
subpath = "esbuild.exe"; | ||
} else if (platformKey in knownUnixlikePackages) { | ||
pkg = knownUnixlikePackages[platformKey]; | ||
subpath = "bin/esbuild"; | ||
} else { | ||
throw new Error(`Unsupported platform: ${platformKey}`); | ||
} | ||
if (!buffer) { | ||
const canonicalName = name.split("/").pop(); | ||
const url = `https://registry.npmjs.org/${name}/-/${canonicalName}-${version}.tgz`; | ||
console.error(`Trying to download ${JSON.stringify(url)}`); | ||
try { | ||
buffer = extractFileFromTarGzip(await fetch(url), fromPath); | ||
} catch (err) { | ||
console.error(`Failed to download ${JSON.stringify(url)}: ${err && err.message || err}`); | ||
} | ||
} | ||
if (!buffer) { | ||
console.error(`Install unsuccessful`); | ||
process.exit(1); | ||
} | ||
fs.writeFileSync(toPath, buffer, { mode: 493 }); | ||
try { | ||
validateBinaryVersion(toPath); | ||
} catch (err) { | ||
console.error(`The version of the downloaded binary is incorrect: ${err && err.message || err}`); | ||
console.error(`Install unsuccessful`); | ||
process.exit(1); | ||
} | ||
try { | ||
fs.mkdirSync(path.dirname(cachePath), { | ||
recursive: true, | ||
mode: 448 | ||
}); | ||
fs.copyFileSync(toPath, cachePath); | ||
cleanCacheLRU(cachePath); | ||
} catch (e) { | ||
} | ||
if (didFail) | ||
console.error(`Install successful`); | ||
return { pkg, subpath }; | ||
} | ||
function validateBinaryVersion(binaryPath) { | ||
const stdout = child_process.execFileSync(binaryPath, ["--version"]).toString().trim(); | ||
if (stdout !== version) { | ||
throw new Error(`Expected ${JSON.stringify(version)} but got ${JSON.stringify(stdout)}`); | ||
function downloadedBinPath(pkg, subpath) { | ||
const esbuildLibDir = path.dirname(require.resolve("esbuild")); | ||
return path.join(esbuildLibDir, `downloaded-${pkg}-${path.basename(subpath)}`); | ||
} | ||
// lib/npm/node-install.ts | ||
var fs2 = require("fs"); | ||
var os2 = require("os"); | ||
var path2 = require("path"); | ||
var zlib = require("zlib"); | ||
var https = require("https"); | ||
var child_process = require("child_process"); | ||
var toPath = path2.join(__dirname, "bin", "esbuild"); | ||
var isToPathJS = true; | ||
function validateBinaryVersion(...command) { | ||
command.push("--version"); | ||
const stdout = child_process.execFileSync(command.shift(), command).toString().trim(); | ||
if (stdout !== "0.13.13") { | ||
throw new Error(`Expected ${JSON.stringify("0.13.13")} but got ${JSON.stringify(stdout)}`); | ||
} | ||
} | ||
function getCachePath(name) { | ||
const home = os.homedir(); | ||
const common = ["esbuild", "bin", `${name}@${version}`]; | ||
if (process.platform === "darwin") | ||
return path.join(home, "Library", "Caches", ...common); | ||
if (process.platform === "win32") | ||
return path.join(home, "AppData", "Local", "Cache", ...common); | ||
const XDG_CACHE_HOME = process.env.XDG_CACHE_HOME; | ||
if (process.platform === "linux" && XDG_CACHE_HOME && path.isAbsolute(XDG_CACHE_HOME)) | ||
return path.join(XDG_CACHE_HOME, ...common); | ||
return path.join(home, ".cache", ...common); | ||
} | ||
function cleanCacheLRU(fileToKeep) { | ||
const dir = path.dirname(fileToKeep); | ||
const entries = []; | ||
for (const entry of fs.readdirSync(dir)) { | ||
const entryPath = path.join(dir, entry); | ||
try { | ||
const stats = fs.statSync(entryPath); | ||
entries.push({ path: entryPath, mtime: stats.mtime }); | ||
} catch (e) { | ||
} | ||
function isYarn() { | ||
const { npm_config_user_agent } = process.env; | ||
if (npm_config_user_agent) { | ||
return /\byarn\//.test(npm_config_user_agent); | ||
} | ||
entries.sort((a, b) => +b.mtime - +a.mtime); | ||
for (const entry of entries.slice(5)) { | ||
try { | ||
fs.unlinkSync(entry.path); | ||
} catch (e) { | ||
} | ||
} | ||
return false; | ||
} | ||
@@ -133,3 +120,3 @@ function fetch(url) { | ||
} | ||
function extractFileFromTarGzip(buffer, file) { | ||
function extractFileFromTarGzip(buffer, subpath) { | ||
try { | ||
@@ -142,3 +129,3 @@ buffer = zlib.unzipSync(buffer); | ||
let offset = 0; | ||
file = `package/${file}`; | ||
subpath = `package/${subpath}`; | ||
while (offset < buffer.length) { | ||
@@ -149,3 +136,3 @@ let name = str(offset, 100); | ||
if (!isNaN(size)) { | ||
if (name === file) | ||
if (name === subpath) | ||
return buffer.subarray(offset, offset + size); | ||
@@ -155,23 +142,27 @@ offset += size + 511 & ~511; | ||
} | ||
throw new Error(`Could not find ${JSON.stringify(file)} in archive`); | ||
throw new Error(`Could not find ${JSON.stringify(subpath)} in archive`); | ||
} | ||
function installUsingNPM(name, file) { | ||
const installDir = path.join(os.tmpdir(), "esbuild-" + Math.random().toString(36).slice(2)); | ||
fs.mkdirSync(installDir, { recursive: true }); | ||
fs.writeFileSync(path.join(installDir, "package.json"), "{}"); | ||
function installUsingNPM(pkg, subpath, binPath) { | ||
const env = __spreadProps(__spreadValues({}, process.env), { npm_config_global: void 0 }); | ||
child_process.execSync(`npm install --loglevel=error --prefer-offline --no-audit --progress=false ${name}@${version}`, { cwd: installDir, stdio: "pipe", env }); | ||
const buffer = fs.readFileSync(path.join(installDir, "node_modules", name, file)); | ||
const esbuildLibDir = path2.dirname(require.resolve("esbuild")); | ||
const installDir = path2.join(esbuildLibDir, "npm-install"); | ||
fs2.mkdirSync(installDir); | ||
try { | ||
removeRecursive(installDir); | ||
} catch (e) { | ||
fs2.writeFileSync(path2.join(installDir, "package.json"), "{}"); | ||
child_process.execSync(`npm install --loglevel=error --prefer-offline --no-audit --progress=false ${pkg}@${"0.13.13"}`, { cwd: installDir, stdio: "pipe", env }); | ||
const installedBinPath = path2.join(installDir, "node_modules", pkg, subpath); | ||
fs2.renameSync(installedBinPath, binPath); | ||
} finally { | ||
try { | ||
removeRecursive(installDir); | ||
} catch (e) { | ||
} | ||
} | ||
return buffer; | ||
} | ||
function removeRecursive(dir) { | ||
for (const entry of fs.readdirSync(dir)) { | ||
const entryPath = path.join(dir, entry); | ||
for (const entry of fs2.readdirSync(dir)) { | ||
const entryPath = path2.join(dir, entry); | ||
let stats; | ||
try { | ||
stats = fs.lstatSync(entryPath); | ||
stats = fs2.lstatSync(entryPath); | ||
} catch (e) { | ||
@@ -183,81 +174,77 @@ continue; | ||
else | ||
fs.unlinkSync(entryPath); | ||
fs2.unlinkSync(entryPath); | ||
} | ||
fs.rmdirSync(dir); | ||
fs2.rmdirSync(dir); | ||
} | ||
function isYarnBerryOrNewer() { | ||
const { npm_config_user_agent } = process.env; | ||
if (npm_config_user_agent) { | ||
const match = npm_config_user_agent.match(/yarn\/(\d+)/); | ||
if (match && match[1]) { | ||
return parseInt(match[1], 10) >= 2; | ||
function applyManualBinaryPathOverride(overridePath) { | ||
const pathString = JSON.stringify(overridePath); | ||
fs2.writeFileSync(toPath, `#!/usr/bin/env node | ||
require('child_process').execFileSync(${pathString}, process.argv.slice(2), { stdio: 'inherit' }); | ||
`); | ||
const libMain = path2.join(__dirname, "lib", "main.js"); | ||
const code = fs2.readFileSync(libMain, "utf8"); | ||
fs2.writeFileSync(libMain, `var ESBUILD_BINARY_PATH = ${pathString}; | ||
${code}`); | ||
} | ||
function maybeOptimizePackage(binPath) { | ||
if (os2.platform() !== "win32" && !isYarn()) { | ||
const tempPath = path2.join(__dirname, "bin-esbuild"); | ||
try { | ||
fs2.linkSync(binPath, tempPath); | ||
fs2.renameSync(tempPath, toPath); | ||
isToPathJS = false; | ||
fs2.unlinkSync(tempPath); | ||
} catch (e) { | ||
} | ||
} | ||
return false; | ||
} | ||
function installDirectly(name) { | ||
if (process.env.ESBUILD_BINARY_PATH) { | ||
fs.copyFileSync(process.env.ESBUILD_BINARY_PATH, binPath); | ||
validateBinaryVersion(binPath); | ||
} else { | ||
const tempBinPath = binPath + "__"; | ||
installBinaryFromPackage(name, "bin/esbuild", tempBinPath).then(() => fs.renameSync(tempBinPath, binPath)).catch((e) => setImmediate(() => { | ||
throw e; | ||
})); | ||
async function downloadDirectlyFromNPM(pkg, subpath, binPath) { | ||
const url = `https://registry.npmjs.org/${pkg}/-/${pkg}-${"0.13.13"}.tgz`; | ||
console.error(`[esbuild] Trying to download ${JSON.stringify(url)}`); | ||
try { | ||
fs2.writeFileSync(binPath, extractFileFromTarGzip(await fetch(url), subpath)); | ||
fs2.chmodSync(binPath, 493); | ||
} catch (e) { | ||
console.error(`[esbuild] Failed to download ${JSON.stringify(url)}: ${e && e.message || e}`); | ||
throw e; | ||
} | ||
} | ||
function installWithWrapper(name, fromPath, toPath) { | ||
fs.writeFileSync(binPath, `#!/usr/bin/env node | ||
const path = require('path'); | ||
const esbuild_exe = path.join(__dirname, '..', ${JSON.stringify(toPath)}); | ||
const child_process = require('child_process'); | ||
const { status } = child_process.spawnSync(esbuild_exe, process.argv.slice(2), { stdio: 'inherit' }); | ||
process.exitCode = status === null ? 1 : status; | ||
async function checkAndPreparePackage() { | ||
if (ESBUILD_BINARY_PATH) { | ||
applyManualBinaryPathOverride(ESBUILD_BINARY_PATH); | ||
return; | ||
} | ||
const { pkg, subpath } = pkgAndSubpathForCurrentPlatform(); | ||
let binPath; | ||
try { | ||
binPath = require.resolve(`${pkg}/${subpath}`); | ||
} catch (e) { | ||
console.error(`[esbuild] Failed to find package "${pkg}" on the file system | ||
This can happen if you use the "--no-optional" flag. The "optionalDependencies" | ||
package.json feature is used by esbuild to install the correct binary executable | ||
for your current platform. This install script will now attempt to work around | ||
this. If that fails, you need to remove the "--no-optional" flag to use esbuild. | ||
`); | ||
const absToPath = path.join(__dirname, toPath); | ||
if (process.env.ESBUILD_BINARY_PATH) { | ||
fs.copyFileSync(process.env.ESBUILD_BINARY_PATH, absToPath); | ||
validateBinaryVersion(absToPath); | ||
} else { | ||
installBinaryFromPackage(name, fromPath, absToPath).catch((e) => setImmediate(() => { | ||
throw e; | ||
})); | ||
binPath = downloadedBinPath(pkg, subpath); | ||
try { | ||
console.error(`[esbuild] Trying to install package "${pkg}" using npm`); | ||
installUsingNPM(pkg, subpath, binPath); | ||
} catch (e2) { | ||
console.error(`[esbuild] Failed to install package "${pkg}" using npm: ${e2 && e2.message || e2}`); | ||
try { | ||
await downloadDirectlyFromNPM(pkg, subpath, binPath); | ||
} catch (e3) { | ||
throw new Error(`Failed to install package "${pkg}"`); | ||
} | ||
} | ||
} | ||
maybeOptimizePackage(binPath); | ||
} | ||
function installOnUnix(name) { | ||
if (isYarnBerryOrNewer()) { | ||
installWithWrapper(name, "bin/esbuild", "esbuild"); | ||
checkAndPreparePackage().then(() => { | ||
if (isToPathJS) { | ||
validateBinaryVersion("node", toPath); | ||
} else { | ||
installDirectly(name); | ||
validateBinaryVersion(toPath); | ||
} | ||
} | ||
function installOnWindows(name) { | ||
installWithWrapper(name, "esbuild.exe", "esbuild.exe"); | ||
} | ||
const platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`; | ||
const knownWindowsPackages = { | ||
"win32 ia32 LE": "@netlify/esbuild-windows-32", | ||
"win32 x64 LE": "@netlify/esbuild-windows-64" | ||
}; | ||
const knownUnixlikePackages = { | ||
"android arm64 LE": "@netlify/esbuild-android-arm64", | ||
"darwin arm64 LE": "@netlify/esbuild-darwin-arm64", | ||
"darwin x64 LE": "@netlify/esbuild-darwin-64", | ||
"freebsd arm64 LE": "@netlify/esbuild-freebsd-arm64", | ||
"freebsd x64 LE": "@netlify/esbuild-freebsd-64", | ||
"openbsd x64 LE": "@netlify/esbuild-openbsd-64", | ||
"linux arm LE": "@netlify/esbuild-linux-arm", | ||
"linux arm64 LE": "@netlify/esbuild-linux-arm64", | ||
"linux ia32 LE": "@netlify/esbuild-linux-32", | ||
"linux mips64el LE": "@netlify/esbuild-linux-mips64le", | ||
"linux ppc64 LE": "@netlify/esbuild-linux-ppc64le", | ||
"linux x64 LE": "@netlify/esbuild-linux-64" | ||
}; | ||
if (platformKey in knownWindowsPackages) { | ||
installOnWindows(knownWindowsPackages[platformKey]); | ||
} else if (platformKey in knownUnixlikePackages) { | ||
installOnUnix(knownUnixlikePackages[platformKey]); | ||
} else { | ||
console.error(`Unsupported platform: ${platformKey}`); | ||
process.exit(1); | ||
} | ||
}); |
@@ -6,31 +6,54 @@ export type Platform = 'browser' | 'node' | 'neutral'; | ||
export type Charset = 'ascii' | 'utf8'; | ||
export type TreeShaking = true | 'ignore-annotations'; | ||
interface CommonOptions { | ||
/** Documentation: https://esbuild.github.io/api/#sourcemap */ | ||
sourcemap?: boolean | 'inline' | 'external' | 'both'; | ||
/** Documentation: https://esbuild.github.io/api/#legal-comments */ | ||
legalComments?: 'none' | 'inline' | 'eof' | 'linked' | 'external'; | ||
/** Documentation: https://esbuild.github.io/api/#source-root */ | ||
sourceRoot?: string; | ||
/** Documentation: https://esbuild.github.io/api/#sources-content */ | ||
sourcesContent?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#format */ | ||
format?: Format; | ||
/** Documentation: https://esbuild.github.io/api/#globalName */ | ||
globalName?: string; | ||
/** Documentation: https://esbuild.github.io/api/#target */ | ||
target?: string | string[]; | ||
/** Documentation: https://esbuild.github.io/api/#minify */ | ||
minify?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#minify */ | ||
minifyWhitespace?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#minify */ | ||
minifyIdentifiers?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#minify */ | ||
minifySyntax?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#charset */ | ||
charset?: Charset; | ||
treeShaking?: TreeShaking; | ||
/** Documentation: https://esbuild.github.io/api/#tree-shaking */ | ||
treeShaking?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#ignore-annotations */ | ||
ignoreAnnotations?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#jsx */ | ||
jsx?: 'transform' | 'preserve'; | ||
/** Documentation: https://esbuild.github.io/api/#jsx-factory */ | ||
jsxFactory?: string; | ||
/** Documentation: https://esbuild.github.io/api/#jsx-fragment */ | ||
jsxFragment?: string; | ||
/** Documentation: https://esbuild.github.io/api/#define */ | ||
define?: { [key: string]: string }; | ||
/** Documentation: https://esbuild.github.io/api/#pure */ | ||
pure?: string[]; | ||
/** Documentation: https://esbuild.github.io/api/#keep-names */ | ||
keepNames?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#color */ | ||
color?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#log-level */ | ||
logLevel?: LogLevel; | ||
/** Documentation: https://esbuild.github.io/api/#log-limit */ | ||
logLimit?: number; | ||
@@ -40,32 +63,63 @@ } | ||
export interface BuildOptions extends CommonOptions { | ||
/** Documentation: https://esbuild.github.io/api/#bundle */ | ||
bundle?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#splitting */ | ||
splitting?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#preserve-symlinks */ | ||
preserveSymlinks?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#outfile */ | ||
outfile?: string; | ||
/** Documentation: https://esbuild.github.io/api/#metafile */ | ||
metafile?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#outdir */ | ||
outdir?: string; | ||
/** Documentation: https://esbuild.github.io/api/#outbase */ | ||
outbase?: string; | ||
/** Documentation: https://esbuild.github.io/api/#platform */ | ||
platform?: Platform; | ||
/** Documentation: https://esbuild.github.io/api/#external */ | ||
external?: string[]; | ||
/** Documentation: https://esbuild.github.io/api/#loader */ | ||
loader?: { [ext: string]: Loader }; | ||
/** Documentation: https://esbuild.github.io/api/#resolve-extensions */ | ||
resolveExtensions?: string[]; | ||
/** Documentation: https://esbuild.github.io/api/#mainFields */ | ||
mainFields?: string[]; | ||
/** Documentation: https://esbuild.github.io/api/#conditions */ | ||
conditions?: string[]; | ||
/** Documentation: https://esbuild.github.io/api/#write */ | ||
write?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#allow-overwrite */ | ||
allowOverwrite?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#tsconfig */ | ||
tsconfig?: string; | ||
/** Documentation: https://esbuild.github.io/api/#out-extension */ | ||
outExtension?: { [ext: string]: string }; | ||
/** Documentation: https://esbuild.github.io/api/#public-path */ | ||
publicPath?: string; | ||
/** Documentation: https://esbuild.github.io/api/#entry-names */ | ||
entryNames?: string; | ||
/** Documentation: https://esbuild.github.io/api/#chunk-names */ | ||
chunkNames?: string; | ||
/** Documentation: https://esbuild.github.io/api/#asset-names */ | ||
assetNames?: string; | ||
/** Documentation: https://esbuild.github.io/api/#inject */ | ||
inject?: string[]; | ||
/** Documentation: https://esbuild.github.io/api/#banner */ | ||
banner?: { [type: string]: string }; | ||
/** Documentation: https://esbuild.github.io/api/#footer */ | ||
footer?: { [type: string]: string }; | ||
/** Documentation: https://esbuild.github.io/api/#incremental */ | ||
incremental?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#entry-points */ | ||
entryPoints?: string[] | Record<string, string>; | ||
/** Documentation: https://esbuild.github.io/api/#stdin */ | ||
stdin?: StdinOptions; | ||
/** Documentation: https://esbuild.github.io/plugins/ */ | ||
plugins?: Plugin[]; | ||
/** Documentation: https://esbuild.github.io/api/#working-directory */ | ||
absWorkingDir?: string; | ||
/** Documentation: https://esbuild.github.io/api/#node-paths */ | ||
nodePaths?: string[]; // The "NODE_PATH" variable from Node.js | ||
/** Documentation: https://esbuild.github.io/api/#watch */ | ||
watch?: boolean | WatchMode; | ||
@@ -91,4 +145,6 @@ } | ||
// Optional user-specified data that is passed through unmodified. You can | ||
// use this to stash the original error, for example. | ||
/** | ||
* Optional user-specified data that is passed through unmodified. You can | ||
* use this to stash the original error, for example. | ||
*/ | ||
detail: any; | ||
@@ -105,5 +161,8 @@ } | ||
namespace: string; | ||
line: number; // 1-based | ||
column: number; // 0-based, in bytes | ||
length: number; // in bytes | ||
/** 1-based */ | ||
line: number; | ||
/** 0-based, in bytes */ | ||
column: number; | ||
/** in bytes */ | ||
length: number; | ||
lineText: string; | ||
@@ -115,4 +174,6 @@ suggestion: string; | ||
path: string; | ||
contents: Uint8Array; // "text" as bytes | ||
text: string; // "contents" as text | ||
/** "text" as bytes */ | ||
contents: Uint8Array; | ||
/** "contents" as text */ | ||
text: string; | ||
} | ||
@@ -132,6 +193,10 @@ | ||
warnings: Message[]; | ||
outputFiles?: OutputFile[]; // Only when "write: false" | ||
rebuild?: BuildInvalidate; // Only when "incremental: true" | ||
stop?: () => void; // Only when "watch: true" | ||
metafile?: Metafile; // Only when "metafile: true" | ||
/** Only when "write: false" */ | ||
outputFiles?: OutputFile[]; | ||
/** Only when "incremental: true" */ | ||
rebuild?: BuildInvalidate; | ||
/** Only when "watch: true" */ | ||
stop?: () => void; | ||
/** Only when "metafile: true" */ | ||
metafile?: Metafile; | ||
} | ||
@@ -144,2 +209,3 @@ | ||
/** Documentation: https://esbuild.github.io/api/#serve-arguments */ | ||
export interface ServeOptions { | ||
@@ -157,5 +223,7 @@ port?: number; | ||
status: number; | ||
timeInMS: number; // The time to generate the response, not to send it | ||
/** The time to generate the response, not to send it */ | ||
timeInMS: number; | ||
} | ||
/** Documentation: https://esbuild.github.io/api/#serve-return-values */ | ||
export interface ServeResult { | ||
@@ -363,8 +431,17 @@ port: number; | ||
// This function invokes the "esbuild" command-line tool for you. It returns a | ||
// promise that either resolves with a "BuildResult" object or rejects with a | ||
// "BuildFailure" object. | ||
// | ||
// Works in node: yes | ||
// Works in browser: yes | ||
export interface AnalyzeMetafileOptions { | ||
color?: boolean; | ||
verbose?: boolean; | ||
} | ||
/** | ||
* This function invokes the "esbuild" command-line tool for you. It returns a | ||
* promise that either resolves with a "BuildResult" object or rejects with a | ||
* "BuildFailure" object. | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: yes | ||
* | ||
* Documentation: https://esbuild.github.io/api/#build-api | ||
*/ | ||
export declare function build(options: BuildOptions & { write: false }): Promise<BuildResult & { outputFiles: OutputFile[] }>; | ||
@@ -374,61 +451,111 @@ export declare function build(options: BuildOptions & { incremental: true }): Promise<BuildIncremental>; | ||
// This function is similar to "build" but it serves the resulting files over | ||
// HTTP on a localhost address with the specified port. | ||
// | ||
// Works in node: yes | ||
// Works in browser: no | ||
/** | ||
* This function is similar to "build" but it serves the resulting files over | ||
* HTTP on a localhost address with the specified port. | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: no | ||
* | ||
* Documentation: https://esbuild.github.io/api/#serve | ||
*/ | ||
export declare function serve(serveOptions: ServeOptions, buildOptions: BuildOptions): Promise<ServeResult>; | ||
// This function transforms a single JavaScript file. It can be used to minify | ||
// JavaScript, convert TypeScript/JSX to JavaScript, or convert newer JavaScript | ||
// to older JavaScript. It returns a promise that is either resolved with a | ||
// "TransformResult" object or rejected with a "TransformFailure" object. | ||
// | ||
// Works in node: yes | ||
// Works in browser: yes | ||
/** | ||
* This function transforms a single JavaScript file. It can be used to minify | ||
* JavaScript, convert TypeScript/JSX to JavaScript, or convert newer JavaScript | ||
* to older JavaScript. It returns a promise that is either resolved with a | ||
* "TransformResult" object or rejected with a "TransformFailure" object. | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: yes | ||
* | ||
* Documentation: https://esbuild.github.io/api/#transform-api | ||
*/ | ||
export declare function transform(input: string, options?: TransformOptions): Promise<TransformResult>; | ||
// Converts log messages to formatted message strings suitable for printing in | ||
// the terminal. This allows you to reuse the built-in behavior of esbuild's | ||
// log message formatter. This is a batch-oriented API for efficiency. | ||
// | ||
// Works in node: yes | ||
// Works in browser: yes | ||
/** | ||
* Converts log messages to formatted message strings suitable for printing in | ||
* the terminal. This allows you to reuse the built-in behavior of esbuild's | ||
* log message formatter. This is a batch-oriented API for efficiency. | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: yes | ||
*/ | ||
export declare function formatMessages(messages: PartialMessage[], options: FormatMessagesOptions): Promise<string[]>; | ||
// A synchronous version of "build". | ||
// | ||
// Works in node: yes | ||
// Works in browser: no | ||
/** | ||
* Pretty-prints an analysis of the metafile JSON to a string. This is just for | ||
* convenience to be able to match esbuild's pretty-printing exactly. If you want | ||
* to customize it, you can just inspect the data in the metafile yourself. | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: yes | ||
* | ||
* Documentation: https://esbuild.github.io/api/#analyze | ||
*/ | ||
export declare function analyzeMetafile(metafile: Metafile | string, options?: AnalyzeMetafileOptions): Promise<string>; | ||
/** | ||
* A synchronous version of "build". | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: no | ||
* | ||
* Documentation: https://esbuild.github.io/api/#build-api | ||
*/ | ||
export declare function buildSync(options: BuildOptions & { write: false }): BuildResult & { outputFiles: OutputFile[] }; | ||
export declare function buildSync(options: BuildOptions): BuildResult; | ||
// A synchronous version of "transform". | ||
// | ||
// Works in node: yes | ||
// Works in browser: no | ||
/** | ||
* A synchronous version of "transform". | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: no | ||
* | ||
* Documentation: https://esbuild.github.io/api/#transform-api | ||
*/ | ||
export declare function transformSync(input: string, options?: TransformOptions): TransformResult; | ||
// A synchronous version of "formatMessages". | ||
// | ||
// Works in node: yes | ||
// Works in browser: no | ||
/** | ||
* A synchronous version of "formatMessages". | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: no | ||
*/ | ||
export declare function formatMessagesSync(messages: PartialMessage[], options: FormatMessagesOptions): string[]; | ||
// This configures the browser-based version of esbuild. It is necessary to | ||
// call this first and wait for the returned promise to be resolved before | ||
// making other API calls when using esbuild in the browser. | ||
// | ||
// Works in node: yes | ||
// Works in browser: yes ("options" is required) | ||
/** | ||
* A synchronous version of "analyzeMetafile". | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: no | ||
* | ||
* Documentation: https://esbuild.github.io/api/#analyze | ||
*/ | ||
export declare function analyzeMetafileSync(metafile: Metafile | string, options?: AnalyzeMetafileOptions): string; | ||
/** | ||
* This configures the browser-based version of esbuild. It is necessary to | ||
* call this first and wait for the returned promise to be resolved before | ||
* making other API calls when using esbuild in the browser. | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: yes ("options" is required) | ||
* | ||
* Documentation: https://esbuild.github.io/api/#running-in-the-browser | ||
*/ | ||
export declare function initialize(options: InitializeOptions): Promise<void>; | ||
export interface InitializeOptions { | ||
// The URL of the "esbuild.wasm" file. This must be provided when running | ||
// esbuild in the browser. | ||
/** | ||
* The URL of the "esbuild.wasm" file. This must be provided when running | ||
* esbuild in the browser. | ||
*/ | ||
wasmURL?: string | ||
// By default esbuild runs the WebAssembly-based browser API in a web worker | ||
// to avoid blocking the UI thread. This can be disabled by setting "worker" | ||
// to false. | ||
/** | ||
* By default esbuild runs the WebAssembly-based browser API in a web worker | ||
* to avoid blocking the UI thread. This can be disabled by setting "worker" | ||
* to false. | ||
*/ | ||
worker?: boolean | ||
@@ -435,0 +562,0 @@ } |
{ | ||
"name": "@netlify/esbuild", | ||
"version": "0.13.6", | ||
"description": "An extremely fast JavaScript bundler and minifier.", | ||
"repository": "https://github.com/netlify/esbuild", | ||
"scripts": { | ||
"postinstall": "node install.js" | ||
}, | ||
"main": "lib/main.js", | ||
"types": "lib/main.d.ts", | ||
"bin": { | ||
"esbuild": "bin/esbuild" | ||
}, | ||
"license": "MIT" | ||
"name": "@netlify/esbuild", | ||
"version": "0.13.13", | ||
"description": "An extremely fast JavaScript and CSS bundler and minifier.", | ||
"repository": "https://github.com/netlify/esbuild", | ||
"scripts": { | ||
"postinstall": "node install.js" | ||
}, | ||
"main": "lib/main.js", | ||
"types": "lib/main.d.ts", | ||
"bin": { | ||
"esbuild": "bin/esbuild" | ||
}, | ||
"optionalDependencies": { | ||
"esbuild-android-arm64": "0.13.13", | ||
"esbuild-darwin-64": "0.13.13", | ||
"esbuild-darwin-arm64": "0.13.13", | ||
"esbuild-freebsd-64": "0.13.13", | ||
"esbuild-freebsd-arm64": "0.13.13", | ||
"esbuild-linux-32": "0.13.13", | ||
"esbuild-linux-64": "0.13.13", | ||
"esbuild-linux-arm": "0.13.13", | ||
"esbuild-linux-arm64": "0.13.13", | ||
"esbuild-linux-mips64le": "0.13.13", | ||
"esbuild-linux-ppc64le": "0.13.13", | ||
"esbuild-netbsd-64": "0.13.13", | ||
"esbuild-openbsd-64": "0.13.13", | ||
"esbuild-sunos-64": "0.13.13", | ||
"esbuild-windows-32": "0.13.13", | ||
"esbuild-windows-64": "0.13.13", | ||
"esbuild-windows-arm64": "0.13.13" | ||
}, | ||
"license": "MIT" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
108857
2900
14
17
6