esbuild-plugin-pino
Advanced tools
Comparing version 1.1.6 to 1.1.10
@@ -1,3 +0,594 @@ | ||
import type { Plugin } from 'esbuild'; | ||
type Platform = 'browser' | 'node' | 'neutral'; | ||
type Format = 'iife' | 'cjs' | 'esm'; | ||
type Loader = 'js' | 'jsx' | 'ts' | 'tsx' | 'css' | 'json' | 'text' | 'base64' | 'file' | 'dataurl' | 'binary' | 'copy' | 'default'; | ||
type LogLevel = 'verbose' | 'debug' | 'info' | 'warning' | 'error' | 'silent'; | ||
type Charset = 'ascii' | 'utf8'; | ||
type Drop = 'console' | 'debugger'; | ||
interface CommonOptions { | ||
/** Documentation: https://esbuild.github.io/api/#sourcemap */ | ||
sourcemap?: boolean | 'linked' | '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/#mangle-props */ | ||
mangleProps?: RegExp; | ||
/** Documentation: https://esbuild.github.io/api/#mangle-props */ | ||
reserveProps?: RegExp; | ||
/** Documentation: https://esbuild.github.io/api/#mangle-props */ | ||
mangleQuoted?: boolean; | ||
/** Documentation: https://esbuild.github.io/api/#mangle-props */ | ||
mangleCache?: Record<string, string | false>; | ||
/** Documentation: https://esbuild.github.io/api/#drop */ | ||
drop?: Drop[]; | ||
/** 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; | ||
/** 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; | ||
/** Documentation: https://esbuild.github.io/api/#log-override */ | ||
logOverride?: Record<string, LogLevel>; | ||
} | ||
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; | ||
} | ||
interface WatchMode { | ||
onRebuild?: (error: BuildFailure | null, result: BuildResult | null) => void; | ||
} | ||
interface StdinOptions { | ||
contents: string; | ||
resolveDir?: string; | ||
sourcefile?: string; | ||
loader?: Loader; | ||
} | ||
interface Message { | ||
id: string; | ||
pluginName: string; | ||
text: string; | ||
location: Location | null; | ||
notes: Note[]; | ||
/** | ||
* Optional user-specified data that is passed through unmodified. You can | ||
* use this to stash the original error, for example. | ||
*/ | ||
detail: any; | ||
} | ||
interface Note { | ||
text: string; | ||
location: Location | null; | ||
} | ||
interface Location { | ||
file: string; | ||
namespace: string; | ||
/** 1-based */ | ||
line: number; | ||
/** 0-based, in bytes */ | ||
column: number; | ||
/** in bytes */ | ||
length: number; | ||
lineText: string; | ||
suggestion: string; | ||
} | ||
interface OutputFile { | ||
path: string; | ||
/** "text" as bytes */ | ||
contents: Uint8Array; | ||
/** "contents" as text */ | ||
text: string; | ||
} | ||
interface BuildInvalidate { | ||
(): Promise<BuildIncremental>; | ||
dispose(): void; | ||
} | ||
interface BuildIncremental extends BuildResult { | ||
rebuild: BuildInvalidate; | ||
} | ||
interface BuildResult { | ||
errors: Message[]; | ||
warnings: Message[]; | ||
/** Only when "write: false" */ | ||
outputFiles?: OutputFile[]; | ||
/** Only when "incremental: true" */ | ||
rebuild?: BuildInvalidate; | ||
/** Only when "watch: true" */ | ||
stop?: () => void; | ||
/** Only when "metafile: true" */ | ||
metafile?: Metafile; | ||
/** Only when "mangleCache" is present */ | ||
mangleCache?: Record<string, string | false>; | ||
} | ||
interface BuildFailure extends Error { | ||
errors: Message[]; | ||
warnings: Message[]; | ||
} | ||
/** Documentation: https://esbuild.github.io/api/#serve-arguments */ | ||
interface ServeOptions { | ||
port?: number; | ||
host?: string; | ||
servedir?: string; | ||
onRequest?: (args: ServeOnRequestArgs) => void; | ||
} | ||
interface ServeOnRequestArgs { | ||
remoteAddress: string; | ||
method: string; | ||
path: string; | ||
status: number; | ||
/** The time to generate the response, not to send it */ | ||
timeInMS: number; | ||
} | ||
/** Documentation: https://esbuild.github.io/api/#serve-return-values */ | ||
interface ServeResult { | ||
port: number; | ||
host: string; | ||
wait: Promise<void>; | ||
stop: () => void; | ||
} | ||
interface TransformOptions extends CommonOptions { | ||
tsconfigRaw?: string | { | ||
compilerOptions?: { | ||
jsxFactory?: string, | ||
jsxFragmentFactory?: string, | ||
useDefineForClassFields?: boolean, | ||
importsNotUsedAsValues?: 'remove' | 'preserve' | 'error', | ||
preserveValueImports?: boolean, | ||
}, | ||
}; | ||
sourcefile?: string; | ||
loader?: Loader; | ||
banner?: string; | ||
footer?: string; | ||
} | ||
interface TransformResult { | ||
code: string; | ||
map: string; | ||
warnings: Message[]; | ||
/** Only when "mangleCache" is present */ | ||
mangleCache?: Record<string, string | false>; | ||
} | ||
interface Plugin { | ||
name: string; | ||
setup: (build: PluginBuild) => (void | Promise<void>); | ||
} | ||
interface PluginBuild { | ||
initialOptions: BuildOptions; | ||
resolve(path: string, options?: ResolveOptions): Promise<ResolveResult>; | ||
onStart(callback: () => | ||
(OnStartResult | null | void | Promise<OnStartResult | null | void>)): void; | ||
onEnd(callback: (result: BuildResult) => | ||
(void | Promise<void>)): void; | ||
onResolve(options: OnResolveOptions, callback: (args: OnResolveArgs) => | ||
(OnResolveResult | null | undefined | Promise<OnResolveResult | null | undefined>)): void; | ||
onLoad(options: OnLoadOptions, callback: (args: OnLoadArgs) => | ||
(OnLoadResult | null | undefined | Promise<OnLoadResult | null | undefined>)): void; | ||
// This is a full copy of the esbuild library in case you need it | ||
esbuild: { | ||
serve: typeof serve, | ||
build: typeof build, | ||
buildSync: typeof buildSync, | ||
transform: typeof transform, | ||
transformSync: typeof transformSync, | ||
formatMessages: typeof formatMessages, | ||
formatMessagesSync: typeof formatMessagesSync, | ||
analyzeMetafile: typeof analyzeMetafile, | ||
analyzeMetafileSync: typeof analyzeMetafileSync, | ||
initialize: typeof initialize, | ||
version: typeof version, | ||
}; | ||
} | ||
interface ResolveOptions { | ||
pluginName?: string; | ||
importer?: string; | ||
namespace?: string; | ||
resolveDir?: string; | ||
kind?: ImportKind; | ||
pluginData?: any; | ||
} | ||
interface ResolveResult { | ||
errors: Message[]; | ||
warnings: Message[]; | ||
path: string; | ||
external: boolean; | ||
sideEffects: boolean; | ||
namespace: string; | ||
suffix: string; | ||
pluginData: any; | ||
} | ||
interface OnStartResult { | ||
errors?: PartialMessage[]; | ||
warnings?: PartialMessage[]; | ||
} | ||
interface OnResolveOptions { | ||
filter: RegExp; | ||
namespace?: string; | ||
} | ||
interface OnResolveArgs { | ||
path: string; | ||
importer: string; | ||
namespace: string; | ||
resolveDir: string; | ||
kind: ImportKind; | ||
pluginData: any; | ||
} | ||
type ImportKind = | ||
| 'entry-point' | ||
// JS | ||
| 'import-statement' | ||
| 'require-call' | ||
| 'dynamic-import' | ||
| 'require-resolve' | ||
// CSS | ||
| 'import-rule' | ||
| 'url-token' | ||
interface OnResolveResult { | ||
pluginName?: string; | ||
errors?: PartialMessage[]; | ||
warnings?: PartialMessage[]; | ||
path?: string; | ||
external?: boolean; | ||
sideEffects?: boolean; | ||
namespace?: string; | ||
suffix?: string; | ||
pluginData?: any; | ||
watchFiles?: string[]; | ||
watchDirs?: string[]; | ||
} | ||
interface OnLoadOptions { | ||
filter: RegExp; | ||
namespace?: string; | ||
} | ||
interface OnLoadArgs { | ||
path: string; | ||
namespace: string; | ||
suffix: string; | ||
pluginData: any; | ||
} | ||
interface OnLoadResult { | ||
pluginName?: string; | ||
errors?: PartialMessage[]; | ||
warnings?: PartialMessage[]; | ||
contents?: string | Uint8Array; | ||
resolveDir?: string; | ||
loader?: Loader; | ||
pluginData?: any; | ||
watchFiles?: string[]; | ||
watchDirs?: string[]; | ||
} | ||
interface PartialMessage { | ||
id?: string; | ||
pluginName?: string; | ||
text?: string; | ||
location?: Partial<Location> | null; | ||
notes?: PartialNote[]; | ||
detail?: any; | ||
} | ||
interface PartialNote { | ||
text?: string; | ||
location?: Partial<Location> | null; | ||
} | ||
interface Metafile { | ||
inputs: { | ||
[path: string]: { | ||
bytes: number | ||
imports: { | ||
path: string | ||
kind: ImportKind | ||
}[] | ||
} | ||
} | ||
outputs: { | ||
[path: string]: { | ||
bytes: number | ||
inputs: { | ||
[path: string]: { | ||
bytesInOutput: number | ||
} | ||
} | ||
imports: { | ||
path: string | ||
kind: ImportKind | ||
}[] | ||
exports: string[] | ||
entryPoint?: string | ||
} | ||
} | ||
} | ||
interface FormatMessagesOptions { | ||
kind: 'error' | 'warning'; | ||
color?: boolean; | ||
terminalWidth?: number; | ||
} | ||
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 | ||
*/ | ||
declare function build(options: BuildOptions & { write: false }): Promise<BuildResult & { outputFiles: OutputFile[] }>; | ||
declare function build(options: BuildOptions & { incremental: true, metafile: true }): Promise<BuildIncremental & { metafile: Metafile }>; | ||
declare function build(options: BuildOptions & { incremental: true }): Promise<BuildIncremental>; | ||
declare function build(options: BuildOptions & { metafile: true }): Promise<BuildResult & { metafile: Metafile }>; | ||
declare function build(options: BuildOptions): Promise<BuildResult>; | ||
/** | ||
* 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 | ||
*/ | ||
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 | ||
* | ||
* Documentation: https://esbuild.github.io/api/#transform-api | ||
*/ | ||
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 | ||
*/ | ||
declare function formatMessages(messages: PartialMessage[], options: FormatMessagesOptions): Promise<string[]>; | ||
/** | ||
* 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 | ||
*/ | ||
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 | ||
*/ | ||
declare function buildSync(options: BuildOptions & { write: false }): BuildResult & { outputFiles: OutputFile[] }; | ||
declare function buildSync(options: BuildOptions): BuildResult; | ||
/** | ||
* A synchronous version of "transform". | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: no | ||
* | ||
* Documentation: https://esbuild.github.io/api/#transform-api | ||
*/ | ||
declare function transformSync(input: string, options?: TransformOptions): TransformResult; | ||
/** | ||
* A synchronous version of "formatMessages". | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: no | ||
*/ | ||
declare function formatMessagesSync(messages: PartialMessage[], options: FormatMessagesOptions): string[]; | ||
/** | ||
* A synchronous version of "analyzeMetafile". | ||
* | ||
* - Works in node: yes | ||
* - Works in browser: no | ||
* | ||
* Documentation: https://esbuild.github.io/api/#analyze | ||
*/ | ||
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 | ||
*/ | ||
declare function initialize(options: InitializeOptions): Promise<void>; | ||
interface InitializeOptions { | ||
/** | ||
* The URL of the "esbuild.wasm" file. This must be provided when running | ||
* esbuild in the browser. | ||
*/ | ||
wasmURL?: string | ||
/** | ||
* The result of calling "new WebAssembly.Module(buffer)" where "buffer" | ||
* is a typed array or ArrayBuffer containing the binary code of the | ||
* "esbuild.wasm" file. | ||
* | ||
* You can use this as an alternative to "wasmURL" for environments where it's | ||
* not possible to download the WebAssembly module. | ||
*/ | ||
wasmModule?: WebAssembly.Module | ||
/** | ||
* 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 | ||
} | ||
declare let version: string; | ||
/** | ||
* A pino plugin for esbuild | ||
@@ -33,5 +624,6 @@ * @example | ||
*/ | ||
declare const _default: ({ transports }: { | ||
declare function esbuildPluginPino({ transports }: { | ||
transports: string[]; | ||
}) => Plugin; | ||
export = _default; | ||
}): Plugin; | ||
export { esbuildPluginPino as default }; |
@@ -1,54 +0,77 @@ | ||
"use strict"; | ||
const path_1 = require("path"); | ||
const promises_1 = require("fs/promises"); | ||
module.exports = function esbuildPluginPino({ transports }) { | ||
return { | ||
name: 'pino', | ||
setup(currentBuild) { | ||
const pino = (0, path_1.dirname)(require.resolve('pino')); | ||
const threadStream = (0, path_1.dirname)(require.resolve('thread-stream')); | ||
let entrypoints = currentBuild.initialOptions.entryPoints; | ||
if (Array.isArray(entrypoints)) { | ||
let outbase = currentBuild.initialOptions.outbase; | ||
if (!outbase) { | ||
const hierarchy = entrypoints[0].split(path_1.sep); | ||
let i = 0; | ||
outbase = ''; | ||
let nextOutbase = ''; | ||
do { | ||
outbase = nextOutbase; | ||
i++; | ||
nextOutbase = hierarchy.slice(0, i).join(path_1.sep); | ||
} while (entrypoints.every((e) => e.startsWith(`${nextOutbase}${path_1.sep}`))); | ||
} | ||
const newEntrypoints = {}; | ||
for (const entrypoint of entrypoints) { | ||
const destination = (outbase ? entrypoint.replace(`${outbase}${path_1.sep}`, '') : entrypoint).replace(/.(js|ts)$/, ''); | ||
newEntrypoints[destination] = entrypoint; | ||
} | ||
entrypoints = newEntrypoints; | ||
} | ||
const customEntrypoints = { | ||
'thread-stream-worker': (0, path_1.join)(threadStream, 'lib/worker.js'), | ||
'pino-worker': (0, path_1.join)(pino, 'lib/worker.js'), | ||
'pino-pipeline-worker': (0, path_1.join)(pino, 'lib/worker-pipeline.js'), | ||
'pino-file': (0, path_1.join)(pino, 'file.js') | ||
}; | ||
const transportsEntrypoints = Object.fromEntries((transports || []).map((t) => [t, require.resolve(t)])); | ||
currentBuild.initialOptions.entryPoints = { | ||
...entrypoints, | ||
...customEntrypoints, | ||
...transportsEntrypoints | ||
}; | ||
let pinoBundlerRan = false; | ||
currentBuild.onEnd(() => { | ||
pinoBundlerRan = false; | ||
}); | ||
currentBuild.onLoad({ filter: /pino\.js$/ }, async (args) => { | ||
if (pinoBundlerRan) | ||
return; | ||
pinoBundlerRan = true; | ||
const contents = await (0, promises_1.readFile)(args.path, 'utf8'); | ||
const absoluteOutputPath = (0, path_1.join)((0, path_1.resolve)('./'), currentBuild.initialOptions.outdir || 'dist'); | ||
const functionDeclaration = ` | ||
'use strict'; | ||
var module$1 = require('module'); | ||
var path = require('path'); | ||
var promises = require('fs/promises'); | ||
var require$1 = ( | ||
false | ||
? /* @__PURE__ */ module$1.createRequire((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index.js', document.baseURI).href))) | ||
: require | ||
); | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropSymbols = Object.getOwnPropertySymbols; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __propIsEnum = Object.prototype.propertyIsEnumerable; | ||
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; | ||
var __spreadValues = (a, b) => { | ||
for (var prop in b || (b = {})) | ||
if (__hasOwnProp.call(b, prop)) | ||
__defNormalProp(a, prop, b[prop]); | ||
if (__getOwnPropSymbols) | ||
for (var prop of __getOwnPropSymbols(b)) { | ||
if (__propIsEnum.call(b, prop)) | ||
__defNormalProp(a, prop, b[prop]); | ||
} | ||
return a; | ||
}; | ||
function esbuildPluginPino({ | ||
transports | ||
}) { | ||
return { | ||
name: "pino", | ||
setup(currentBuild) { | ||
const pino = path.dirname(require$1.resolve("pino")); | ||
const threadStream = path.dirname(require$1.resolve("thread-stream")); | ||
let entrypoints = currentBuild.initialOptions.entryPoints; | ||
if (Array.isArray(entrypoints)) { | ||
let outbase = currentBuild.initialOptions.outbase; | ||
if (!outbase) { | ||
const hierarchy = entrypoints[0].split(path.sep); | ||
let i = 0; | ||
outbase = ""; | ||
let nextOutbase = ""; | ||
do { | ||
outbase = nextOutbase; | ||
i++; | ||
nextOutbase = hierarchy.slice(0, i).join(path.sep); | ||
} while (entrypoints.every((e) => e.startsWith(`${nextOutbase}${path.sep}`))); | ||
} | ||
const newEntrypoints = {}; | ||
for (const entrypoint of entrypoints) { | ||
const destination = (outbase ? entrypoint.replace(`${outbase}${path.sep}`, "") : entrypoint).replace(/.(js|ts)$/, ""); | ||
newEntrypoints[destination] = entrypoint; | ||
} | ||
entrypoints = newEntrypoints; | ||
} | ||
const customEntrypoints = { | ||
"thread-stream-worker": path.join(threadStream, "lib/worker.js"), | ||
"pino-worker": path.join(pino, "lib/worker.js"), | ||
"pino-pipeline-worker": path.join(pino, "lib/worker-pipeline.js"), | ||
"pino-file": path.join(pino, "file.js") | ||
}; | ||
const transportsEntrypoints = Object.fromEntries((transports || []).map((t) => [t, require$1.resolve(t)])); | ||
currentBuild.initialOptions.entryPoints = __spreadValues(__spreadValues(__spreadValues({}, entrypoints), customEntrypoints), transportsEntrypoints); | ||
let pinoBundlerRan = false; | ||
currentBuild.onEnd(() => { | ||
pinoBundlerRan = false; | ||
}); | ||
currentBuild.onLoad({ filter: /pino\.js$/ }, async (args) => { | ||
if (pinoBundlerRan) | ||
return; | ||
pinoBundlerRan = true; | ||
const contents = await promises.readFile(args.path, "utf8"); | ||
const absoluteOutputPath = path.join(path.resolve("./"), currentBuild.initialOptions.outdir || "dist"); | ||
const functionDeclaration = ` | ||
function pinoBundlerAbsolutePath(p) { | ||
@@ -63,6 +86,4 @@ try { | ||
`; | ||
const pinoOverrides = Object.keys(customEntrypoints) | ||
.map((id) => `'${id === 'pino-file' ? 'pino/file' : id}': pinoBundlerAbsolutePath('./${id}.js')`) | ||
.join(','); | ||
const globalThisDeclaration = ` | ||
const pinoOverrides = Object.keys(customEntrypoints).map((id) => `'${id === "pino-file" ? "pino/file" : id}': pinoBundlerAbsolutePath('./${id}.js')`).join(","); | ||
const globalThisDeclaration = ` | ||
globalThis.__bundlerPathsOverrides = | ||
@@ -73,9 +94,11 @@ globalThis.__bundlerPathsOverrides | ||
`; | ||
const code = functionDeclaration + globalThisDeclaration; | ||
return { | ||
contents: code + contents | ||
}; | ||
}); | ||
} | ||
}; | ||
}; | ||
const code = functionDeclaration + globalThisDeclaration; | ||
return { | ||
contents: code + contents | ||
}; | ||
}); | ||
} | ||
}; | ||
} | ||
module.exports = esbuildPluginPino; |
{ | ||
"name": "esbuild-plugin-pino", | ||
"version": "1.1.6", | ||
"version": "1.1.10", | ||
"description": "An esbuild plugin to generate extra pino files for bundling", | ||
"main": "dist/index.js", | ||
"module": "dist/index.mjs", | ||
"types": "dist/index.d.ts", | ||
"exports": { | ||
"require": "./dist/index.js", | ||
"import": "./dist/index.mjs", | ||
"types": "./dist/index.d.ts" | ||
}, | ||
"repository": "https://github.com/davipon/esbuild-plugin-pino", | ||
"bugs": "https://github.com/davipon/esbuild-plugin-pino/issues", | ||
"scripts": { | ||
"prepare": "husky install", | ||
"build": "tsc", | ||
"test": "rm -rf dist && tsc && vitest run", | ||
"format": "prettier --write .", | ||
"lint": "prettier --check . && eslint .", | ||
"cz": "cz", | ||
"release": "standard-version --no-verify", | ||
"release:patch": "standard-version --no-verify --release-as patch" | ||
}, | ||
"keywords": [ | ||
@@ -23,3 +19,4 @@ "pino", | ||
"esbuild-plugin", | ||
"pino-plugin" | ||
"pino-transport", | ||
"bundling" | ||
], | ||
@@ -50,2 +47,3 @@ "author": "David Peng <davipondev@gmail.com>", | ||
"pino-pretty": "^8.0.0", | ||
"pkgroll": "^1.3.1", | ||
"prettier": "^2.7.1", | ||
@@ -57,3 +55,12 @@ "standard-version": "^9.5.0", | ||
"vitest": "^0.15.1" | ||
}, | ||
"scripts": { | ||
"build": "pkgroll", | ||
"test": "rm -rf dist && pkgroll && vitest run", | ||
"format": "prettier --write .", | ||
"lint": "prettier --check . && eslint .", | ||
"cz": "cz", | ||
"release": "standard-version --no-verify", | ||
"release:patch": "standard-version --no-verify --release-as patch" | ||
} | ||
} | ||
} |
# esbuild-plugin-pino | ||
[![NPM version](https://img.shields.io/npm/v/esbuild-plugin-pino?logo=NPM)](https://www.npmjs.com/package/esbuild-plugin-pino) | ||
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/) | ||
![npm bundle size](https://img.shields.io/bundlephobia/min/esbuild-plugin-pino) | ||
![dep](https://img.shields.io/librariesio/github/davipon/esbuild-plugin-pino) | ||
![CI](https://github.com/davipon/esbuild-plugin-pino/actions/workflows/ci.yml/badge.svg) | ||
![Release](https://github.com/davipon/esbuild-plugin-pino/actions/workflows/release.yml/badge.svg) | ||
![license](https://img.shields.io/github/license/davipon/esbuild-plugin-pino) | ||
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/) | ||
@@ -32,5 +35,2 @@ An esbuild plugin to generate extra pino files for bundling | ||
> Reference: [Pino Bundling](https://github.com/pinojs/pino/blob/master/docs/bundling.md) | ||
> Inspired by [pino-esbuild.js](https://gist.github.com/ShogunPanda/752cce88659a09bff827ef8d2ecf8c80#gistcomment-4199018) | ||
## Usage | ||
@@ -66,1 +66,6 @@ | ||
``` | ||
## Credits | ||
- Reference: [Pino Bundling](https://github.com/pinojs/pino/blob/master/docs/bundling.md) | ||
- Inspired by [pino-esbuild.js](https://gist.github.com/ShogunPanda/752cce88659a09bff827ef8d2ecf8c80#gistcomment-4199018) and kudos to [@ShogunPanda](https://github.com/ShogunPanda) & [@scorsi](https://github.com/scorsi) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
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
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
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
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
32093
6
755
70
25
8
1