veloce-ts 0.2.6 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +501 -240
- package/README.md +141 -1
- package/dist/cjs/src/cli/index.js +125 -74
- package/dist/cjs/src/cli/index.js.map +4 -4
- package/dist/cjs/src/index.js +66 -25
- package/dist/cjs/src/index.js.map +112 -10
- package/dist/cjs/src/middleware/index.js +28 -2
- package/dist/cjs/src/middleware/index.js.map +79 -4
- package/dist/cjs/src/plugins/index.js +49 -23
- package/dist/cjs/src/plugins/index.js.map +74 -4
- package/dist/cjs/src/testing/index.js +30 -4
- package/dist/cjs/src/testing/index.js.map +80 -7
- package/dist/cjs/src/websocket/index.js +3 -3
- package/dist/cjs/src/websocket/index.js.map +1 -1
- package/dist/esm/src/cli/index.js +561 -22
- package/dist/esm/src/cli/index.js.map +8 -4
- package/dist/esm/src/docs/index.js +6 -6
- package/dist/esm/src/docs/index.js.map +10 -3
- package/dist/esm/src/errors/index.js +3 -2
- package/dist/esm/src/errors/index.js.map +7 -3
- package/dist/esm/src/graphql/index.js +82 -2
- package/dist/esm/src/graphql/index.js.map +18 -3
- package/dist/esm/src/index.js +165 -3
- package/dist/esm/src/index.js.map +202 -6
- package/dist/esm/src/middleware/index.js +28 -2
- package/dist/esm/src/middleware/index.js.map +81 -3
- package/dist/esm/src/plugins/index.js +113 -3
- package/dist/esm/src/plugins/index.js.map +131 -4
- package/dist/esm/src/testing/index.js +42 -2
- package/dist/esm/src/testing/index.js.map +97 -7
- package/dist/esm/src/types/index.js +2 -2
- package/dist/esm/src/types/index.js.map +10 -3
- package/dist/esm/src/validation/index.js +2 -2
- package/dist/esm/src/validation/index.js.map +13 -3
- package/dist/esm/src/websocket/index.js +15 -2
- package/dist/esm/src/websocket/index.js.map +9 -4
- package/dist/types/adapters/base.d.ts +10 -2
- package/dist/types/adapters/base.d.ts.map +1 -1
- package/dist/types/adapters/hono.d.ts +2 -2
- package/dist/types/adapters/hono.d.ts.map +1 -1
- package/dist/types/auth/permissions.d.ts +10 -10
- package/dist/types/auth/session.d.ts +2 -2
- package/dist/types/cache/index.d.ts +9 -0
- package/dist/types/cache/index.d.ts.map +1 -0
- package/dist/types/cache/manager.d.ts +75 -0
- package/dist/types/cache/manager.d.ts.map +1 -0
- package/dist/types/cache/memory-store.d.ts +55 -0
- package/dist/types/cache/memory-store.d.ts.map +1 -0
- package/dist/types/cache/redis-store.d.ts +55 -0
- package/dist/types/cache/redis-store.d.ts.map +1 -0
- package/dist/types/cache/types.d.ts +92 -0
- package/dist/types/cache/types.d.ts.map +1 -0
- package/dist/types/cli/commands/new.d.ts.map +1 -1
- package/dist/types/context/request-context.d.ts +66 -0
- package/dist/types/context/request-context.d.ts.map +1 -0
- package/dist/types/core/application.d.ts +11 -0
- package/dist/types/core/application.d.ts.map +1 -1
- package/dist/types/core/router-compiler.d.ts +1 -1
- package/dist/types/core/router-compiler.d.ts.map +1 -1
- package/dist/types/decorators/cache.d.ts +56 -0
- package/dist/types/decorators/cache.d.ts.map +1 -0
- package/dist/types/decorators/params.d.ts +24 -0
- package/dist/types/decorators/params.d.ts.map +1 -1
- package/dist/types/dependencies/container.d.ts +1 -1
- package/dist/types/dependencies/container.d.ts.map +1 -1
- package/dist/types/index.d.ts +7 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/logging/index.d.ts +10 -0
- package/dist/types/logging/index.d.ts.map +1 -0
- package/dist/types/logging/logger.d.ts +25 -0
- package/dist/types/logging/logger.d.ts.map +1 -0
- package/dist/types/logging/middleware.d.ts +15 -0
- package/dist/types/logging/middleware.d.ts.map +1 -0
- package/dist/types/logging/types.d.ts +22 -0
- package/dist/types/logging/types.d.ts.map +1 -0
- package/dist/types/middleware/cache.d.ts +54 -0
- package/dist/types/middleware/cache.d.ts.map +1 -0
- package/dist/types/middleware/index.d.ts +3 -0
- package/dist/types/middleware/index.d.ts.map +1 -1
- package/dist/types/middleware/request-context.d.ts +55 -0
- package/dist/types/middleware/request-context.d.ts.map +1 -0
- package/dist/types/orm/base-repository.d.ts +77 -0
- package/dist/types/orm/base-repository.d.ts.map +1 -0
- package/dist/types/orm/decorators.d.ts +35 -0
- package/dist/types/orm/decorators.d.ts.map +1 -0
- package/dist/types/orm/drizzle/index.d.ts +6 -0
- package/dist/types/orm/drizzle/index.d.ts.map +1 -0
- package/dist/types/orm/drizzle/plugin.d.ts +165 -0
- package/dist/types/orm/drizzle/plugin.d.ts.map +1 -0
- package/dist/types/orm/drizzle/repository.d.ts +61 -0
- package/dist/types/orm/drizzle/repository.d.ts.map +1 -0
- package/dist/types/orm/drizzle/schema-converter.d.ts +53 -0
- package/dist/types/orm/drizzle/schema-converter.d.ts.map +1 -0
- package/dist/types/orm/drizzle/transaction-manager.d.ts +58 -0
- package/dist/types/orm/drizzle/transaction-manager.d.ts.map +1 -0
- package/dist/types/orm/drizzle/types.d.ts +121 -0
- package/dist/types/orm/drizzle/types.d.ts.map +1 -0
- package/dist/types/orm/index.d.ts +16 -0
- package/dist/types/orm/index.d.ts.map +1 -0
- package/dist/types/orm/pagination.d.ts +147 -0
- package/dist/types/orm/pagination.d.ts.map +1 -0
- package/dist/types/orm/prisma/index.d.ts +6 -0
- package/dist/types/orm/prisma/index.d.ts.map +1 -0
- package/dist/types/orm/prisma/plugin.d.ts +68 -0
- package/dist/types/orm/prisma/plugin.d.ts.map +1 -0
- package/dist/types/orm/prisma/repository.d.ts +70 -0
- package/dist/types/orm/prisma/repository.d.ts.map +1 -0
- package/dist/types/orm/prisma/schema-generator.d.ts +45 -0
- package/dist/types/orm/prisma/schema-generator.d.ts.map +1 -0
- package/dist/types/orm/prisma/transaction-manager.d.ts +32 -0
- package/dist/types/orm/prisma/transaction-manager.d.ts.map +1 -0
- package/dist/types/orm/prisma/types.d.ts +67 -0
- package/dist/types/orm/prisma/types.d.ts.map +1 -0
- package/dist/types/orm/query-builder.d.ts +129 -0
- package/dist/types/orm/query-builder.d.ts.map +1 -0
- package/dist/types/orm/repository-factory.d.ts +130 -0
- package/dist/types/orm/repository-factory.d.ts.map +1 -0
- package/dist/types/orm/transaction-events.d.ts +122 -0
- package/dist/types/orm/transaction-events.d.ts.map +1 -0
- package/dist/types/orm/transaction-interceptor.d.ts +30 -0
- package/dist/types/orm/transaction-interceptor.d.ts.map +1 -0
- package/dist/types/orm/transaction-manager.d.ts +64 -0
- package/dist/types/orm/transaction-manager.d.ts.map +1 -0
- package/dist/types/orm/transaction-plugin.d.ts +117 -0
- package/dist/types/orm/transaction-plugin.d.ts.map +1 -0
- package/dist/types/orm/transaction-propagation.d.ts +49 -0
- package/dist/types/orm/transaction-propagation.d.ts.map +1 -0
- package/dist/types/orm/typeorm/decorators.d.ts +40 -0
- package/dist/types/orm/typeorm/decorators.d.ts.map +1 -0
- package/dist/types/orm/typeorm/index.d.ts +6 -0
- package/dist/types/orm/typeorm/index.d.ts.map +1 -0
- package/dist/types/orm/typeorm/plugin.d.ts +100 -0
- package/dist/types/orm/typeorm/plugin.d.ts.map +1 -0
- package/dist/types/orm/typeorm/repository.d.ts +58 -0
- package/dist/types/orm/typeorm/repository.d.ts.map +1 -0
- package/dist/types/orm/typeorm/transaction-manager.d.ts +48 -0
- package/dist/types/orm/typeorm/transaction-manager.d.ts.map +1 -0
- package/dist/types/orm/typeorm/types.d.ts +139 -0
- package/dist/types/orm/typeorm/types.d.ts.map +1 -0
- package/dist/types/plugins/health.d.ts +75 -0
- package/dist/types/plugins/health.d.ts.map +1 -0
- package/dist/types/plugins/index.d.ts +2 -0
- package/dist/types/plugins/index.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +15 -2
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/websocket/index.d.ts +1 -1
- package/dist/types/websocket/index.d.ts.map +1 -1
- package/package.json +22 -2
- package/dist/esm/chunk-2100y16g.js +0 -5
- package/dist/esm/chunk-2100y16g.js.map +0 -10
- package/dist/esm/chunk-5q75d71c.js +0 -4
- package/dist/esm/chunk-5q75d71c.js.map +0 -16
- package/dist/esm/chunk-8dpc6an2.js +0 -7
- package/dist/esm/chunk-8dpc6an2.js.map +0 -10
- package/dist/esm/chunk-9v7atckx.js +0 -5
- package/dist/esm/chunk-9v7atckx.js.map +0 -10
- package/dist/esm/chunk-bvstdn0t.js +0 -60
- package/dist/esm/chunk-bvstdn0t.js.map +0 -10
- package/dist/esm/chunk-ctwpr5gr.js +0 -430
- package/dist/esm/chunk-ctwpr5gr.js.map +0 -10
- package/dist/esm/chunk-dtw2tbsd.js +0 -5
- package/dist/esm/chunk-dtw2tbsd.js.map +0 -12
- package/dist/esm/chunk-ef0vfd27.js +0 -72
- package/dist/esm/chunk-ef0vfd27.js.map +0 -13
- package/dist/esm/chunk-k66rn4fj.js +0 -18
- package/dist/esm/chunk-k66rn4fj.js.map +0 -10
- package/dist/esm/chunk-mky5qqg0.js +0 -5
- package/dist/esm/chunk-mky5qqg0.js.map +0 -10
- package/dist/esm/chunk-mznkhz9c.js +0 -5
- package/dist/esm/chunk-mznkhz9c.js.map +0 -12
- package/dist/esm/chunk-s5z0wb7e.js +0 -5
- package/dist/esm/chunk-s5z0wb7e.js.map +0 -10
- package/dist/esm/chunk-vh4sxcpe.js +0 -6
- package/dist/esm/chunk-vh4sxcpe.js.map +0 -10
- package/dist/esm/chunk-xa333k40.js +0 -7
- package/dist/esm/chunk-xa333k40.js.map +0 -10
- package/dist/esm/chunk-y262e56g.js +0 -5
- package/dist/esm/chunk-y262e56g.js.map +0 -9
- package/dist/esm/chunk-yq3gf9ts.js +0 -5
- package/dist/esm/chunk-yq3gf9ts.js.map +0 -10
|
@@ -1,12 +1,87 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["..\\..\\src\\middleware\\cors.ts", "..\\..\\src\\middleware\\rate-limit.ts", "..\\..\\src\\middleware\\compression.ts"],
|
|
3
|
+
"sources": ["..\\..\\src\\context\\request-context.ts", "..\\..\\node_modules\\pino-std-serializers\\lib\\err-helpers.js", "..\\..\\node_modules\\pino-std-serializers\\lib\\err-proto.js", "..\\..\\node_modules\\pino-std-serializers\\lib\\err.js", "..\\..\\node_modules\\pino-std-serializers\\lib\\err-with-cause.js", "..\\..\\node_modules\\pino-std-serializers\\lib\\req.js", "..\\..\\node_modules\\pino-std-serializers\\lib\\res.js", "..\\..\\node_modules\\pino-std-serializers\\index.js", "..\\..\\node_modules\\pino\\lib\\caller.js", "..\\..\\node_modules\\@pinojs\\redact\\index.js", "..\\..\\node_modules\\pino\\lib\\symbols.js", "..\\..\\node_modules\\pino\\lib\\redaction.js", "..\\..\\node_modules\\pino\\lib\\time.js", "..\\..\\node_modules\\quick-format-unescaped\\index.js", "..\\..\\node_modules\\atomic-sleep\\index.js", "..\\..\\node_modules\\sonic-boom\\index.js", "..\\..\\node_modules\\on-exit-leak-free\\index.js", "..\\..\\node_modules\\thread-stream\\lib\\wait.js", "..\\..\\node_modules\\thread-stream\\lib\\indexes.js", "..\\..\\node_modules\\thread-stream\\index.js", "..\\..\\node_modules\\pino\\lib\\transport.js", "..\\..\\node_modules\\pino\\lib\\tools.js", "..\\..\\node_modules\\pino\\lib\\constants.js", "..\\..\\node_modules\\pino\\lib\\levels.js", "..\\..\\node_modules\\pino\\lib\\meta.js", "..\\..\\node_modules\\pino\\lib\\proto.js", "..\\..\\node_modules\\safe-stable-stringify\\index.js", "..\\..\\node_modules\\pino\\lib\\multistream.js", "..\\..\\node_modules\\pino\\pino.js", "..\\..\\node_modules\\colorette\\index.cjs", "..\\..\\node_modules\\wrappy\\wrappy.js", "..\\..\\node_modules\\once\\once.js", "..\\..\\node_modules\\end-of-stream\\index.js", "..\\..\\node_modules\\pump\\index.js", "..\\..\\node_modules\\split2\\index.js", "..\\..\\node_modules\\pino-abstract-transport\\index.js", "..\\..\\node_modules\\pino-pretty\\lib\\constants.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\get-level-label-data.js", "..\\..\\node_modules\\pino-pretty\\lib\\colors.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\noop.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\build-safe-sonic-boom.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\is-valid-date.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\create-date.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\split-property-key.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\get-property-value.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\delete-log-property.js", "..\\..\\node_modules\\fast-copy\\dist\\cjs\\index.cjs", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\filter-log.js", "..\\..\\node_modules\\dateformat\\lib\\dateformat.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\format-time.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\handle-custom-levels-names-opts.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\handle-custom-levels-opts.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\interpret-conditionals.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\is-object.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\join-lines-with-indentation.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\parse-factory-options.js", "..\\..\\node_modules\\fast-safe-stringify\\index.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-error.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-object.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-error-log.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-level.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-message.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-metadata.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-time.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\index.js", "..\\..\\node_modules\\secure-json-parse\\index.js", "..\\..\\node_modules\\pino-pretty\\lib\\pretty.js", "..\\..\\node_modules\\pino-pretty\\index.js", "..\\..\\src\\cache\\types.ts", "..\\..\\src\\cache\\memory-store.ts", "..\\..\\src\\cache\\manager.ts", "..\\..\\src\\middleware\\cors.ts", "..\\..\\src\\middleware\\rate-limit.ts", "..\\..\\src\\middleware\\compression.ts", "..\\..\\src\\logging\\logger.ts", "..\\..\\src\\logging\\middleware.ts", "..\\..\\src\\middleware\\request-context.ts", "..\\..\\src\\middleware\\cache.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
+
"/**\r\n * Request Context for tracking request lifecycle\r\n * Provides Request ID, AbortSignal, timeouts, and shared context across middleware and handlers\r\n */\r\n\r\nimport type { Context } from '../types';\r\n\r\n/**\r\n * Request Context stored in Hono's context\r\n */\r\nexport interface RequestContext {\r\n requestId: string;\r\n startTime: number;\r\n abortSignal: AbortSignal;\r\n abortController: AbortController;\r\n timeout?: number;\r\n timeoutId?: ReturnType<typeof setTimeout>;\r\n metadata: Record<string, any>;\r\n}\r\n\r\nconst REQUEST_CONTEXT_KEY = 'veloce:request-context';\r\n\r\n/**\r\n * Generate a unique request ID\r\n */\r\nexport function generateRequestId(): string {\r\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\r\n return crypto.randomUUID();\r\n }\r\n // Fallback for environments without crypto.randomUUID\r\n return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}-${Math.random().toString(36).substring(2, 15)}`;\r\n}\r\n\r\n/**\r\n * Get request context from Hono context\r\n */\r\nexport function getRequestContext(c: Context): RequestContext | null {\r\n return c.get(REQUEST_CONTEXT_KEY) || null;\r\n}\r\n\r\n/**\r\n * Set request context in Hono context\r\n */\r\nexport function setRequestContext(c: Context, context: RequestContext): void {\r\n c.set(REQUEST_CONTEXT_KEY, context);\r\n}\r\n\r\n/**\r\n * Initialize request context for a new request\r\n * Creates a UUID, AbortSignal, and optionally sets up timeout\r\n */\r\nexport function initializeRequestContext(\r\n c: Context,\r\n options?: {\r\n requestId?: string;\r\n timeout?: number;\r\n }\r\n): RequestContext {\r\n const requestId = options?.requestId || generateRequestId();\r\n const abortController = new AbortController();\r\n \r\n const context: RequestContext = {\r\n requestId,\r\n startTime: Date.now(),\r\n abortSignal: abortController.signal,\r\n abortController,\r\n timeout: options?.timeout,\r\n metadata: {}\r\n };\r\n\r\n // Set up timeout if provided\r\n if (options?.timeout && options.timeout > 0) {\r\n context.timeoutId = setTimeout(() => {\r\n abortController.abort();\r\n }, options.timeout);\r\n }\r\n\r\n setRequestContext(c, context);\r\n return context;\r\n}\r\n\r\n/**\r\n * Get request ID from context\r\n */\r\nexport function getRequestId(c: Context): string | null {\r\n const ctx = getRequestContext(c);\r\n return ctx?.requestId || null;\r\n}\r\n\r\n/**\r\n * Get AbortSignal from context\r\n */\r\nexport function getAbortSignal(c: Context): AbortSignal | null {\r\n const ctx = getRequestContext(c);\r\n return ctx?.abortSignal || null;\r\n}\r\n\r\n/**\r\n * Abort the current request\r\n */\r\nexport function abortRequest(c: Context): void {\r\n const ctx = getRequestContext(c);\r\n if (ctx?.abortController && !ctx.abortSignal.aborted) {\r\n ctx.abortController.abort();\r\n }\r\n}\r\n\r\n/**\r\n * Set metadata in request context\r\n */\r\nexport function setRequestMetadata(c: Context, key: string, value: any): void {\r\n const ctx = getRequestContext(c);\r\n if (ctx) {\r\n ctx.metadata[key] = value;\r\n }\r\n}\r\n\r\n/**\r\n * Get metadata from request context\r\n */\r\nexport function getRequestMetadata(c: Context, key: string): any {\r\n const ctx = getRequestContext(c);\r\n return ctx?.metadata[key];\r\n}\r\n\r\n/**\r\n * Get request duration in milliseconds\r\n */\r\nexport function getRequestDuration(c: Context): number | null {\r\n const ctx = getRequestContext(c);\r\n if (!ctx) return null;\r\n return Date.now() - ctx.startTime;\r\n}\r\n\r\n/**\r\n * Clean up request context (clear timeout, etc.)\r\n */\r\nexport function cleanupRequestContext(c: Context): void {\r\n const ctx = getRequestContext(c);\r\n if (ctx?.timeoutId) {\r\n clearTimeout(ctx.timeoutId);\r\n }\r\n}\r\n",
|
|
6
|
+
"'use strict'\n\n// **************************************************************\n// * Code initially copied/adapted from \"pony-cause\" npm module *\n// * Please upstream improvements there *\n// **************************************************************\n\nconst isErrorLike = (err) => {\n return err && typeof err.message === 'string'\n}\n\n/**\n * @param {Error|{ cause?: unknown|(()=>err)}} err\n * @returns {Error|Object|undefined}\n */\nconst getErrorCause = (err) => {\n if (!err) return\n\n /** @type {unknown} */\n // @ts-ignore\n const cause = err.cause\n\n // VError / NError style causes\n if (typeof cause === 'function') {\n // @ts-ignore\n const causeResult = err.cause()\n\n return isErrorLike(causeResult)\n ? causeResult\n : undefined\n } else {\n return isErrorLike(cause)\n ? cause\n : undefined\n }\n}\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @returns {string}\n */\nconst _stackWithCauses = (err, seen) => {\n if (!isErrorLike(err)) return ''\n\n const stack = err.stack || ''\n\n // Ensure we don't go circular or crazily deep\n if (seen.has(err)) {\n return stack + '\\ncauses have become circular...'\n }\n\n const cause = getErrorCause(err)\n\n if (cause) {\n seen.add(err)\n return (stack + '\\ncaused by: ' + _stackWithCauses(cause, seen))\n } else {\n return stack\n }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst stackWithCauses = (err) => _stackWithCauses(err, new Set())\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @param {boolean} [skip]\n * @returns {string}\n */\nconst _messageWithCauses = (err, seen, skip) => {\n if (!isErrorLike(err)) return ''\n\n const message = skip ? '' : (err.message || '')\n\n // Ensure we don't go circular or crazily deep\n if (seen.has(err)) {\n return message + ': ...'\n }\n\n const cause = getErrorCause(err)\n\n if (cause) {\n seen.add(err)\n\n // @ts-ignore\n const skipIfVErrorStyleCause = typeof err.cause === 'function'\n\n return (message +\n (skipIfVErrorStyleCause ? '' : ': ') +\n _messageWithCauses(cause, seen, skipIfVErrorStyleCause))\n } else {\n return message\n }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst messageWithCauses = (err) => _messageWithCauses(err, new Set())\n\nmodule.exports = {\n isErrorLike,\n getErrorCause,\n stackWithCauses,\n messageWithCauses\n}\n",
|
|
7
|
+
"'use strict'\n\nconst seen = Symbol('circular-ref-tag')\nconst rawSymbol = Symbol('pino-raw-err-ref')\n\nconst pinoErrProto = Object.create({}, {\n type: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n message: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n stack: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n aggregateErrors: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoErrProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nmodule.exports = {\n pinoErrProto,\n pinoErrorSymbols: {\n seen,\n rawSymbol\n }\n}\n",
|
|
8
|
+
"'use strict'\n\nmodule.exports = errSerializer\n\nconst { messageWithCauses, stackWithCauses, isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errSerializer (err) {\n if (!isErrorLike(err)) {\n return err\n }\n\n err[seen] = undefined // tag to prevent re-looking at this\n const _err = Object.create(pinoErrProto)\n _err.type = toString.call(err.constructor) === '[object Function]'\n ? err.constructor.name\n : err.name\n _err.message = messageWithCauses(err)\n _err.stack = stackWithCauses(err)\n\n if (Array.isArray(err.errors)) {\n _err.aggregateErrors = err.errors.map(err => errSerializer(err))\n }\n\n for (const key in err) {\n if (_err[key] === undefined) {\n const val = err[key]\n if (isErrorLike(val)) {\n // We append cause messages and stacks to _err, therefore skipping causes here\n if (key !== 'cause' && !Object.prototype.hasOwnProperty.call(val, seen)) {\n _err[key] = errSerializer(val)\n }\n } else {\n _err[key] = val\n }\n }\n }\n\n delete err[seen] // clean up tag in case err is serialized again later\n _err.raw = err\n return _err\n}\n",
|
|
9
|
+
"'use strict'\n\nmodule.exports = errWithCauseSerializer\n\nconst { isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errWithCauseSerializer (err) {\n if (!isErrorLike(err)) {\n return err\n }\n\n err[seen] = undefined // tag to prevent re-looking at this\n const _err = Object.create(pinoErrProto)\n _err.type = toString.call(err.constructor) === '[object Function]'\n ? err.constructor.name\n : err.name\n _err.message = err.message\n _err.stack = err.stack\n\n if (Array.isArray(err.errors)) {\n _err.aggregateErrors = err.errors.map(err => errWithCauseSerializer(err))\n }\n\n if (isErrorLike(err.cause) && !Object.prototype.hasOwnProperty.call(err.cause, seen)) {\n _err.cause = errWithCauseSerializer(err.cause)\n }\n\n for (const key in err) {\n if (_err[key] === undefined) {\n const val = err[key]\n if (isErrorLike(val)) {\n if (!Object.prototype.hasOwnProperty.call(val, seen)) {\n _err[key] = errWithCauseSerializer(val)\n }\n } else {\n _err[key] = val\n }\n }\n }\n\n delete err[seen] // clean up tag in case err is serialized again later\n _err.raw = err\n return _err\n}\n",
|
|
10
|
+
"'use strict'\n\nmodule.exports = {\n mapHttpRequest,\n reqSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-req-ref')\nconst pinoReqProto = Object.create({}, {\n id: {\n enumerable: true,\n writable: true,\n value: ''\n },\n method: {\n enumerable: true,\n writable: true,\n value: ''\n },\n url: {\n enumerable: true,\n writable: true,\n value: ''\n },\n query: {\n enumerable: true,\n writable: true,\n value: ''\n },\n params: {\n enumerable: true,\n writable: true,\n value: ''\n },\n headers: {\n enumerable: true,\n writable: true,\n value: {}\n },\n remoteAddress: {\n enumerable: true,\n writable: true,\n value: ''\n },\n remotePort: {\n enumerable: true,\n writable: true,\n value: ''\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoReqProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nfunction reqSerializer (req) {\n // req.info is for hapi compat.\n const connection = req.info || req.socket\n const _req = Object.create(pinoReqProto)\n _req.id = (typeof req.id === 'function' ? req.id() : (req.id || (req.info ? req.info.id : undefined)))\n _req.method = req.method\n // req.originalUrl is for expressjs compat.\n if (req.originalUrl) {\n _req.url = req.originalUrl\n } else {\n const path = req.path\n // path for safe hapi compat.\n _req.url = typeof path === 'string' ? path : (req.url ? req.url.path || req.url : undefined)\n }\n\n if (req.query) {\n _req.query = req.query\n }\n\n if (req.params) {\n _req.params = req.params\n }\n\n _req.headers = req.headers\n _req.remoteAddress = connection && connection.remoteAddress\n _req.remotePort = connection && connection.remotePort\n // req.raw is for hapi compat/equivalence\n _req.raw = req.raw || req\n return _req\n}\n\nfunction mapHttpRequest (req) {\n return {\n req: reqSerializer(req)\n }\n}\n",
|
|
11
|
+
"'use strict'\n\nmodule.exports = {\n mapHttpResponse,\n resSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-res-ref')\nconst pinoResProto = Object.create({}, {\n statusCode: {\n enumerable: true,\n writable: true,\n value: 0\n },\n headers: {\n enumerable: true,\n writable: true,\n value: ''\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoResProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nfunction resSerializer (res) {\n const _res = Object.create(pinoResProto)\n _res.statusCode = res.headersSent ? res.statusCode : null\n _res.headers = res.getHeaders ? res.getHeaders() : res._headers\n _res.raw = res\n return _res\n}\n\nfunction mapHttpResponse (res) {\n return {\n res: resSerializer(res)\n }\n}\n",
|
|
12
|
+
"'use strict'\n\nconst errSerializer = require('./lib/err')\nconst errWithCauseSerializer = require('./lib/err-with-cause')\nconst reqSerializers = require('./lib/req')\nconst resSerializers = require('./lib/res')\n\nmodule.exports = {\n err: errSerializer,\n errWithCause: errWithCauseSerializer,\n mapHttpRequest: reqSerializers.mapHttpRequest,\n mapHttpResponse: resSerializers.mapHttpResponse,\n req: reqSerializers.reqSerializer,\n res: resSerializers.resSerializer,\n\n wrapErrorSerializer: function wrapErrorSerializer (customSerializer) {\n if (customSerializer === errSerializer) return customSerializer\n return function wrapErrSerializer (err) {\n return customSerializer(errSerializer(err))\n }\n },\n\n wrapRequestSerializer: function wrapRequestSerializer (customSerializer) {\n if (customSerializer === reqSerializers.reqSerializer) return customSerializer\n return function wrappedReqSerializer (req) {\n return customSerializer(reqSerializers.reqSerializer(req))\n }\n },\n\n wrapResponseSerializer: function wrapResponseSerializer (customSerializer) {\n if (customSerializer === resSerializers.resSerializer) return customSerializer\n return function wrappedResSerializer (res) {\n return customSerializer(resSerializers.resSerializer(res))\n }\n }\n}\n",
|
|
13
|
+
"'use strict'\n\nfunction noOpPrepareStackTrace (_, stack) {\n return stack\n}\n\nmodule.exports = function getCallers () {\n const originalPrepare = Error.prepareStackTrace\n Error.prepareStackTrace = noOpPrepareStackTrace\n const stack = new Error().stack\n Error.prepareStackTrace = originalPrepare\n\n if (!Array.isArray(stack)) {\n return undefined\n }\n\n const entries = stack.slice(2)\n\n const fileNames = []\n\n for (const entry of entries) {\n if (!entry) {\n continue\n }\n\n fileNames.push(entry.getFileName())\n }\n\n return fileNames\n}\n",
|
|
14
|
+
"'use strict'\n\nfunction deepClone (obj) {\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime())\n }\n\n if (obj instanceof Array) {\n const cloned = []\n for (let i = 0; i < obj.length; i++) {\n cloned[i] = deepClone(obj[i])\n }\n return cloned\n }\n\n if (typeof obj === 'object') {\n const cloned = Object.create(Object.getPrototypeOf(obj))\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cloned[key] = deepClone(obj[key])\n }\n }\n return cloned\n }\n\n return obj\n}\n\nfunction parsePath (path) {\n const parts = []\n let current = ''\n let inBrackets = false\n let inQuotes = false\n let quoteChar = ''\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i]\n\n if (!inBrackets && char === '.') {\n if (current) {\n parts.push(current)\n current = ''\n }\n } else if (char === '[') {\n if (current) {\n parts.push(current)\n current = ''\n }\n inBrackets = true\n } else if (char === ']' && inBrackets) {\n // Always push the current value when closing brackets, even if it's an empty string\n parts.push(current)\n current = ''\n inBrackets = false\n inQuotes = false\n } else if ((char === '\"' || char === \"'\") && inBrackets) {\n if (!inQuotes) {\n inQuotes = true\n quoteChar = char\n } else if (char === quoteChar) {\n inQuotes = false\n quoteChar = ''\n } else {\n current += char\n }\n } else {\n current += char\n }\n }\n\n if (current) {\n parts.push(current)\n }\n\n return parts\n}\n\nfunction setValue (obj, parts, value) {\n let current = obj\n\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current !== 'object' || current === null || !(key in current)) {\n return false // Path doesn't exist, don't create it\n }\n if (typeof current[key] !== 'object' || current[key] === null) {\n return false // Path doesn't exist properly\n }\n current = current[key]\n }\n\n const lastKey = parts[parts.length - 1]\n if (lastKey === '*') {\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n current[i] = value\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n current[key] = value\n }\n }\n }\n } else {\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n current[lastKey] = value\n }\n }\n return true\n}\n\nfunction removeKey (obj, parts) {\n let current = obj\n\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current !== 'object' || current === null || !(key in current)) {\n return false // Path doesn't exist, don't create it\n }\n if (typeof current[key] !== 'object' || current[key] === null) {\n return false // Path doesn't exist properly\n }\n current = current[key]\n }\n\n const lastKey = parts[parts.length - 1]\n if (lastKey === '*') {\n if (Array.isArray(current)) {\n // For arrays, we can't really \"remove\" all items as that would change indices\n // Instead, we set them to undefined which will be omitted by JSON.stringify\n for (let i = 0; i < current.length; i++) {\n current[i] = undefined\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n delete current[key]\n }\n }\n }\n } else {\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n delete current[lastKey]\n }\n }\n return true\n}\n\n// Sentinel object to distinguish between undefined value and non-existent path\nconst PATH_NOT_FOUND = Symbol('PATH_NOT_FOUND')\n\nfunction getValueIfExists (obj, parts) {\n let current = obj\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return PATH_NOT_FOUND\n }\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) {\n return PATH_NOT_FOUND\n }\n // Check if the property exists before accessing it\n if (!(part in current)) {\n return PATH_NOT_FOUND\n }\n current = current[part]\n }\n\n return current\n}\n\nfunction getValue (obj, parts) {\n let current = obj\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return undefined\n }\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) {\n return undefined\n }\n current = current[part]\n }\n\n return current\n}\n\nfunction redactPaths (obj, paths, censor, remove = false) {\n for (const path of paths) {\n const parts = parsePath(path)\n\n if (parts.includes('*')) {\n redactWildcardPath(obj, parts, censor, path, remove)\n } else {\n if (remove) {\n removeKey(obj, parts)\n } else {\n // Get value only if path exists - single traversal\n const value = getValueIfExists(obj, parts)\n if (value === PATH_NOT_FOUND) {\n continue\n }\n\n const actualCensor = typeof censor === 'function'\n ? censor(value, parts)\n : censor\n setValue(obj, parts, actualCensor)\n }\n }\n }\n}\n\nfunction redactWildcardPath (obj, parts, censor, originalPath, remove = false) {\n const wildcardIndex = parts.indexOf('*')\n\n if (wildcardIndex === parts.length - 1) {\n const parentParts = parts.slice(0, -1)\n let current = obj\n\n for (const part of parentParts) {\n if (current === null || current === undefined) return\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) return\n current = current[part]\n }\n\n if (Array.isArray(current)) {\n if (remove) {\n // For arrays, set all items to undefined which will be omitted by JSON.stringify\n for (let i = 0; i < current.length; i++) {\n current[i] = undefined\n }\n } else {\n for (let i = 0; i < current.length; i++) {\n const indexPath = [...parentParts, i.toString()]\n const actualCensor = typeof censor === 'function'\n ? censor(current[i], indexPath)\n : censor\n current[i] = actualCensor\n }\n }\n } else if (typeof current === 'object' && current !== null) {\n if (remove) {\n // Collect keys to delete to avoid issues with deleting during iteration\n const keysToDelete = []\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n keysToDelete.push(key)\n }\n }\n for (const key of keysToDelete) {\n delete current[key]\n }\n } else {\n for (const key in current) {\n const keyPath = [...parentParts, key]\n const actualCensor = typeof censor === 'function'\n ? censor(current[key], keyPath)\n : censor\n current[key] = actualCensor\n }\n }\n }\n } else {\n redactIntermediateWildcard(obj, parts, censor, wildcardIndex, originalPath, remove)\n }\n}\n\nfunction redactIntermediateWildcard (obj, parts, censor, wildcardIndex, originalPath, remove = false) {\n const beforeWildcard = parts.slice(0, wildcardIndex)\n const afterWildcard = parts.slice(wildcardIndex + 1)\n const pathArray = [] // Cached array to avoid allocations\n\n function traverse (current, pathLength) {\n if (pathLength === beforeWildcard.length) {\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n pathArray[pathLength] = i.toString()\n traverse(current[i], pathLength + 1)\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n pathArray[pathLength] = key\n traverse(current[key], pathLength + 1)\n }\n }\n } else if (pathLength < beforeWildcard.length) {\n const nextKey = beforeWildcard[pathLength]\n // Type safety: Check if current is an object before using 'in' operator\n if (current && typeof current === 'object' && current !== null && nextKey in current) {\n pathArray[pathLength] = nextKey\n traverse(current[nextKey], pathLength + 1)\n }\n } else {\n // Check if afterWildcard contains more wildcards\n if (afterWildcard.includes('*')) {\n // Recursively handle remaining wildcards\n // Wrap censor to prepend current path context\n const wrappedCensor = typeof censor === 'function'\n ? (value, path) => {\n const fullPath = [...pathArray.slice(0, pathLength), ...path]\n return censor(value, fullPath)\n }\n : censor\n redactWildcardPath(current, afterWildcard, wrappedCensor, originalPath, remove)\n } else {\n // No more wildcards, apply the redaction directly\n if (remove) {\n removeKey(current, afterWildcard)\n } else {\n const actualCensor = typeof censor === 'function'\n ? censor(getValue(current, afterWildcard), [...pathArray.slice(0, pathLength), ...afterWildcard])\n : censor\n setValue(current, afterWildcard, actualCensor)\n }\n }\n }\n }\n\n if (beforeWildcard.length === 0) {\n traverse(obj, 0)\n } else {\n let current = obj\n for (let i = 0; i < beforeWildcard.length; i++) {\n const part = beforeWildcard[i]\n if (current === null || current === undefined) return\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) return\n current = current[part]\n pathArray[i] = part\n }\n if (current !== null && current !== undefined) {\n traverse(current, beforeWildcard.length)\n }\n }\n}\n\nfunction buildPathStructure (pathsToClone) {\n if (pathsToClone.length === 0) {\n return null // No paths to redact\n }\n\n // Parse all paths and organize by depth\n const pathStructure = new Map()\n for (const path of pathsToClone) {\n const parts = parsePath(path)\n let current = pathStructure\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (!current.has(part)) {\n current.set(part, new Map())\n }\n current = current.get(part)\n }\n }\n return pathStructure\n}\n\nfunction selectiveClone (obj, pathStructure) {\n if (!pathStructure) {\n return obj // No paths to redact, return original\n }\n\n function cloneSelectively (source, pathMap, depth = 0) {\n if (!pathMap || pathMap.size === 0) {\n return source // No more paths to clone, return reference\n }\n\n if (source === null || typeof source !== 'object') {\n return source\n }\n\n if (source instanceof Date) {\n return new Date(source.getTime())\n }\n\n if (Array.isArray(source)) {\n const cloned = []\n for (let i = 0; i < source.length; i++) {\n const indexStr = i.toString()\n if (pathMap.has(indexStr) || pathMap.has('*')) {\n cloned[i] = cloneSelectively(source[i], pathMap.get(indexStr) || pathMap.get('*'))\n } else {\n cloned[i] = source[i] // Share reference for non-redacted items\n }\n }\n return cloned\n }\n\n // Handle objects\n const cloned = Object.create(Object.getPrototypeOf(source))\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (pathMap.has(key) || pathMap.has('*')) {\n cloned[key] = cloneSelectively(source[key], pathMap.get(key) || pathMap.get('*'))\n } else {\n cloned[key] = source[key] // Share reference for non-redacted properties\n }\n }\n }\n return cloned\n }\n\n return cloneSelectively(obj, pathStructure)\n}\n\nfunction validatePath (path) {\n if (typeof path !== 'string') {\n throw new Error('Paths must be (non-empty) strings')\n }\n\n if (path === '') {\n throw new Error('Invalid redaction path ()')\n }\n\n // Check for double dots\n if (path.includes('..')) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n\n // Check for comma-separated paths (invalid syntax)\n if (path.includes(',')) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n\n // Check for unmatched brackets\n let bracketCount = 0\n let inQuotes = false\n let quoteChar = ''\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i]\n\n if ((char === '\"' || char === \"'\") && bracketCount > 0) {\n if (!inQuotes) {\n inQuotes = true\n quoteChar = char\n } else if (char === quoteChar) {\n inQuotes = false\n quoteChar = ''\n }\n } else if (char === '[' && !inQuotes) {\n bracketCount++\n } else if (char === ']' && !inQuotes) {\n bracketCount--\n if (bracketCount < 0) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n }\n }\n\n if (bracketCount !== 0) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n}\n\nfunction validatePaths (paths) {\n if (!Array.isArray(paths)) {\n throw new TypeError('paths must be an array')\n }\n\n for (const path of paths) {\n validatePath(path)\n }\n}\n\nfunction slowRedact (options = {}) {\n const {\n paths = [],\n censor = '[REDACTED]',\n serialize = JSON.stringify,\n strict = true,\n remove = false\n } = options\n\n // Validate paths upfront to match fast-redact behavior\n validatePaths(paths)\n\n // Build path structure once during setup, not on every call\n const pathStructure = buildPathStructure(paths)\n\n return function redact (obj) {\n if (strict && (obj === null || typeof obj !== 'object')) {\n if (obj === null || obj === undefined) {\n return serialize ? serialize(obj) : obj\n }\n if (typeof obj !== 'object') {\n return serialize ? serialize(obj) : obj\n }\n }\n\n // Only clone paths that need redaction\n const cloned = selectiveClone(obj, pathStructure)\n const original = obj // Keep reference to original for restore\n\n let actualCensor = censor\n if (typeof censor === 'function') {\n actualCensor = censor\n }\n\n redactPaths(cloned, paths, actualCensor, remove)\n\n if (serialize === false) {\n cloned.restore = function () {\n return deepClone(original) // Full clone only when restore is called\n }\n return cloned\n }\n\n if (typeof serialize === 'function') {\n return serialize(cloned)\n }\n\n return JSON.stringify(cloned)\n }\n}\n\nmodule.exports = slowRedact\n",
|
|
15
|
+
"'use strict'\n\nconst setLevelSym = Symbol('pino.setLevel')\nconst getLevelSym = Symbol('pino.getLevel')\nconst levelValSym = Symbol('pino.levelVal')\nconst levelCompSym = Symbol('pino.levelComp')\nconst useLevelLabelsSym = Symbol('pino.useLevelLabels')\nconst useOnlyCustomLevelsSym = Symbol('pino.useOnlyCustomLevels')\nconst mixinSym = Symbol('pino.mixin')\n\nconst lsCacheSym = Symbol('pino.lsCache')\nconst chindingsSym = Symbol('pino.chindings')\n\nconst asJsonSym = Symbol('pino.asJson')\nconst writeSym = Symbol('pino.write')\nconst redactFmtSym = Symbol('pino.redactFmt')\n\nconst timeSym = Symbol('pino.time')\nconst timeSliceIndexSym = Symbol('pino.timeSliceIndex')\nconst streamSym = Symbol('pino.stream')\nconst stringifySym = Symbol('pino.stringify')\nconst stringifySafeSym = Symbol('pino.stringifySafe')\nconst stringifiersSym = Symbol('pino.stringifiers')\nconst endSym = Symbol('pino.end')\nconst formatOptsSym = Symbol('pino.formatOpts')\nconst messageKeySym = Symbol('pino.messageKey')\nconst errorKeySym = Symbol('pino.errorKey')\nconst nestedKeySym = Symbol('pino.nestedKey')\nconst nestedKeyStrSym = Symbol('pino.nestedKeyStr')\nconst mixinMergeStrategySym = Symbol('pino.mixinMergeStrategy')\nconst msgPrefixSym = Symbol('pino.msgPrefix')\n\nconst wildcardFirstSym = Symbol('pino.wildcardFirst')\n\n// public symbols, no need to use the same pino\n// version for these\nconst serializersSym = Symbol.for('pino.serializers')\nconst formattersSym = Symbol.for('pino.formatters')\nconst hooksSym = Symbol.for('pino.hooks')\nconst needsMetadataGsym = Symbol.for('pino.metadata')\n\nmodule.exports = {\n setLevelSym,\n getLevelSym,\n levelValSym,\n levelCompSym,\n useLevelLabelsSym,\n mixinSym,\n lsCacheSym,\n chindingsSym,\n asJsonSym,\n writeSym,\n serializersSym,\n redactFmtSym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n stringifySym,\n stringifySafeSym,\n stringifiersSym,\n endSym,\n formatOptsSym,\n messageKeySym,\n errorKeySym,\n nestedKeySym,\n wildcardFirstSym,\n needsMetadataGsym,\n useOnlyCustomLevelsSym,\n formattersSym,\n hooksSym,\n nestedKeyStrSym,\n mixinMergeStrategySym,\n msgPrefixSym\n}\n",
|
|
16
|
+
"'use strict'\n\nconst Redact = require('@pinojs/redact')\nconst { redactFmtSym, wildcardFirstSym } = require('./symbols')\n\n// Custom rx regex equivalent to fast-redact's rx\nconst rx = /[^.[\\]]+|\\[([^[\\]]*?)\\]/g\n\nconst CENSOR = '[Redacted]'\nconst strict = false // TODO should this be configurable?\n\nfunction redaction (opts, serialize) {\n const { paths, censor, remove } = handle(opts)\n\n const shape = paths.reduce((o, str) => {\n rx.lastIndex = 0\n const first = rx.exec(str)\n const next = rx.exec(str)\n\n // ns is the top-level path segment, brackets + quoting removed.\n let ns = first[1] !== undefined\n ? first[1].replace(/^(?:\"|'|`)(.*)(?:\"|'|`)$/, '$1')\n : first[0]\n\n if (ns === '*') {\n ns = wildcardFirstSym\n }\n\n // top level key:\n if (next === null) {\n o[ns] = null\n return o\n }\n\n // path with at least two segments:\n // if ns is already redacted at the top level, ignore lower level redactions\n if (o[ns] === null) {\n return o\n }\n\n const { index } = next\n const nextPath = `${str.substr(index, str.length - 1)}`\n\n o[ns] = o[ns] || []\n\n // shape is a mix of paths beginning with literal values and wildcard\n // paths [ \"a.b.c\", \"*.b.z\" ] should reduce to a shape of\n // { \"a\": [ \"b.c\", \"b.z\" ], *: [ \"b.z\" ] }\n // note: \"b.z\" is in both \"a\" and * arrays because \"a\" matches the wildcard.\n // (* entry has wildcardFirstSym as key)\n if (ns !== wildcardFirstSym && o[ns].length === 0) {\n // first time ns's get all '*' redactions so far\n o[ns].push(...(o[wildcardFirstSym] || []))\n }\n\n if (ns === wildcardFirstSym) {\n // new * path gets added to all previously registered literal ns's.\n Object.keys(o).forEach(function (k) {\n if (o[k]) {\n o[k].push(nextPath)\n }\n })\n }\n\n o[ns].push(nextPath)\n return o\n }, {})\n\n // the redactor assigned to the format symbol key\n // provides top level redaction for instances where\n // an object is interpolated into the msg string\n const result = {\n [redactFmtSym]: Redact({ paths, censor, serialize, strict, remove })\n }\n\n const topCensor = (...args) => {\n return typeof censor === 'function' ? serialize(censor(...args)) : serialize(censor)\n }\n\n return [...Object.keys(shape), ...Object.getOwnPropertySymbols(shape)].reduce((o, k) => {\n // top level key:\n if (shape[k] === null) {\n o[k] = (value) => topCensor(value, [k])\n } else {\n const wrappedCensor = typeof censor === 'function'\n ? (value, path) => {\n return censor(value, [k, ...path])\n }\n : censor\n o[k] = Redact({\n paths: shape[k],\n censor: wrappedCensor,\n serialize,\n strict,\n remove\n })\n }\n return o\n }, result)\n}\n\nfunction handle (opts) {\n if (Array.isArray(opts)) {\n opts = { paths: opts, censor: CENSOR }\n return opts\n }\n let { paths, censor = CENSOR, remove } = opts\n if (Array.isArray(paths) === false) { throw Error('pino – redact must contain an array of strings') }\n if (remove === true) censor = undefined\n\n return { paths, censor, remove }\n}\n\nmodule.exports = redaction\n",
|
|
17
|
+
"'use strict'\n\nconst nullTime = () => ''\n\nconst epochTime = () => `,\"time\":${Date.now()}`\n\nconst unixTime = () => `,\"time\":${Math.round(Date.now() / 1000.0)}`\n\nconst isoTime = () => `,\"time\":\"${new Date(Date.now()).toISOString()}\"` // using Date.now() for testability\n\nconst NS_PER_MS = 1_000_000n\nconst NS_PER_SEC = 1_000_000_000n\n\nconst startWallTimeNs = BigInt(Date.now()) * NS_PER_MS\nconst startHrTime = process.hrtime.bigint()\n\nconst isoTimeNano = () => {\n const elapsedNs = process.hrtime.bigint() - startHrTime\n const currentTimeNs = startWallTimeNs + elapsedNs\n\n const secondsSinceEpoch = currentTimeNs / NS_PER_SEC\n const nanosWithinSecond = currentTimeNs % NS_PER_SEC\n\n const msSinceEpoch = Number(secondsSinceEpoch * 1000n + nanosWithinSecond / 1_000_000n)\n const date = new Date(msSinceEpoch)\n\n const year = date.getUTCFullYear()\n const month = (date.getUTCMonth() + 1).toString().padStart(2, '0')\n const day = date.getUTCDate().toString().padStart(2, '0')\n const hours = date.getUTCHours().toString().padStart(2, '0')\n const minutes = date.getUTCMinutes().toString().padStart(2, '0')\n const seconds = date.getUTCSeconds().toString().padStart(2, '0')\n\n return `,\"time\":\"${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${nanosWithinSecond\n .toString()\n .padStart(9, '0')}Z\"`\n}\n\nmodule.exports = { nullTime, epochTime, unixTime, isoTime, isoTimeNano }\n",
|
|
18
|
+
"'use strict'\nfunction tryStringify (o) {\n try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n var ss = (opts && opts.stringify) || tryStringify\n var offset = 1\n if (typeof f === 'object' && f !== null) {\n var len = args.length + offset\n if (len === 1) return f\n var objects = new Array(len)\n objects[0] = ss(f)\n for (var index = 1; index < len; index++) {\n objects[index] = ss(args[index])\n }\n return objects.join(' ')\n }\n if (typeof f !== 'string') {\n return f\n }\n var argLen = args.length\n if (argLen === 0) return f\n var str = ''\n var a = 1 - offset\n var lastPos = -1\n var flen = (f && f.length) || 0\n for (var i = 0; i < flen;) {\n if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n lastPos = lastPos > -1 ? lastPos : 0\n switch (f.charCodeAt(i + 1)) {\n case 100: // 'd'\n case 102: // 'f'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Number(args[a])\n lastPos = i + 2\n i++\n break\n case 105: // 'i'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Math.floor(Number(args[a]))\n lastPos = i + 2\n i++\n break\n case 79: // 'O'\n case 111: // 'o'\n case 106: // 'j'\n if (a >= argLen)\n break\n if (args[a] === undefined) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n var type = typeof args[a]\n if (type === 'string') {\n str += '\\'' + args[a] + '\\''\n lastPos = i + 2\n i++\n break\n }\n if (type === 'function') {\n str += args[a].name || '<anonymous>'\n lastPos = i + 2\n i++\n break\n }\n str += ss(args[a])\n lastPos = i + 2\n i++\n break\n case 115: // 's'\n if (a >= argLen)\n break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += String(args[a])\n lastPos = i + 2\n i++\n break\n case 37: // '%'\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += '%'\n lastPos = i + 2\n i++\n a--\n break\n }\n ++a\n }\n ++i\n }\n if (lastPos === -1)\n return f\n else if (lastPos < flen) {\n str += f.slice(lastPos)\n }\n\n return str\n}\n",
|
|
19
|
+
"'use strict'\n\n/* global SharedArrayBuffer, Atomics */\n\nif (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n const nil = new Int32Array(new SharedArrayBuffer(4))\n\n function sleep (ms) {\n // also filters out NaN, non-number types, including empty strings, but allows bigints\n const valid = ms > 0 && ms < Infinity \n if (valid === false) {\n if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n throw TypeError('sleep: ms must be a number')\n }\n throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n }\n\n Atomics.wait(nil, 0, 0, Number(ms))\n }\n module.exports = sleep\n} else {\n\n function sleep (ms) {\n // also filters out NaN, non-number types, including empty strings, but allows bigints\n const valid = ms > 0 && ms < Infinity \n if (valid === false) {\n if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n throw TypeError('sleep: ms must be a number')\n }\n throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n }\n const target = Date.now() + Number(ms)\n while (target > Date.now()){}\n }\n\n module.exports = sleep\n\n}\n",
|
|
20
|
+
"'use strict'\n\nconst fs = require('fs')\nconst EventEmitter = require('events')\nconst inherits = require('util').inherits\nconst path = require('path')\nconst sleep = require('atomic-sleep')\nconst assert = require('assert')\n\nconst BUSY_WRITE_TIMEOUT = 100\nconst kEmptyBuffer = Buffer.allocUnsafe(0)\n\n// 16 KB. Don't write more than docker buffer size.\n// https://github.com/moby/moby/blob/513ec73831269947d38a644c278ce3cac36783b2/daemon/logger/copier.go#L13\nconst MAX_WRITE = 16 * 1024\n\nconst kContentModeBuffer = 'buffer'\nconst kContentModeUtf8 = 'utf8'\n\nconst [major, minor] = (process.versions.node || '0.0').split('.').map(Number)\nconst kCopyBuffer = major >= 22 && minor >= 7\n\nfunction openFile (file, sonic) {\n sonic._opening = true\n sonic._writing = true\n sonic._asyncDrainScheduled = false\n\n // NOTE: 'error' and 'ready' events emitted below only relevant when sonic.sync===false\n // for sync mode, there is no way to add a listener that will receive these\n\n function fileOpened (err, fd) {\n if (err) {\n sonic._reopening = false\n sonic._writing = false\n sonic._opening = false\n\n if (sonic.sync) {\n process.nextTick(() => {\n if (sonic.listenerCount('error') > 0) {\n sonic.emit('error', err)\n }\n })\n } else {\n sonic.emit('error', err)\n }\n return\n }\n\n const reopening = sonic._reopening\n\n sonic.fd = fd\n sonic.file = file\n sonic._reopening = false\n sonic._opening = false\n sonic._writing = false\n\n if (sonic.sync) {\n process.nextTick(() => sonic.emit('ready'))\n } else {\n sonic.emit('ready')\n }\n\n if (sonic.destroyed) {\n return\n }\n\n // start\n if ((!sonic._writing && sonic._len > sonic.minLength) || sonic._flushPending) {\n sonic._actualWrite()\n } else if (reopening) {\n process.nextTick(() => sonic.emit('drain'))\n }\n }\n\n const flags = sonic.append ? 'a' : 'w'\n const mode = sonic.mode\n\n if (sonic.sync) {\n try {\n if (sonic.mkdir) fs.mkdirSync(path.dirname(file), { recursive: true })\n const fd = fs.openSync(file, flags, mode)\n fileOpened(null, fd)\n } catch (err) {\n fileOpened(err)\n throw err\n }\n } else if (sonic.mkdir) {\n fs.mkdir(path.dirname(file), { recursive: true }, (err) => {\n if (err) return fileOpened(err)\n fs.open(file, flags, mode, fileOpened)\n })\n } else {\n fs.open(file, flags, mode, fileOpened)\n }\n}\n\nfunction SonicBoom (opts) {\n if (!(this instanceof SonicBoom)) {\n return new SonicBoom(opts)\n }\n\n let { fd, dest, minLength, maxLength, maxWrite, periodicFlush, sync, append = true, mkdir, retryEAGAIN, fsync, contentMode, mode } = opts || {}\n\n fd = fd || dest\n\n this._len = 0\n this.fd = -1\n this._bufs = []\n this._lens = []\n this._writing = false\n this._ending = false\n this._reopening = false\n this._asyncDrainScheduled = false\n this._flushPending = false\n this._hwm = Math.max(minLength || 0, 16387)\n this.file = null\n this.destroyed = false\n this.minLength = minLength || 0\n this.maxLength = maxLength || 0\n this.maxWrite = maxWrite || MAX_WRITE\n this._periodicFlush = periodicFlush || 0\n this._periodicFlushTimer = undefined\n this.sync = sync || false\n this.writable = true\n this._fsync = fsync || false\n this.append = append || false\n this.mode = mode\n this.retryEAGAIN = retryEAGAIN || (() => true)\n this.mkdir = mkdir || false\n\n let fsWriteSync\n let fsWrite\n if (contentMode === kContentModeBuffer) {\n this._writingBuf = kEmptyBuffer\n this.write = writeBuffer\n this.flush = flushBuffer\n this.flushSync = flushBufferSync\n this._actualWrite = actualWriteBuffer\n fsWriteSync = () => fs.writeSync(this.fd, this._writingBuf)\n fsWrite = () => fs.write(this.fd, this._writingBuf, this.release)\n } else if (contentMode === undefined || contentMode === kContentModeUtf8) {\n this._writingBuf = ''\n this.write = write\n this.flush = flush\n this.flushSync = flushSync\n this._actualWrite = actualWrite\n fsWriteSync = () => fs.writeSync(this.fd, this._writingBuf, 'utf8')\n fsWrite = () => fs.write(this.fd, this._writingBuf, 'utf8', this.release)\n } else {\n throw new Error(`SonicBoom supports \"${kContentModeUtf8}\" and \"${kContentModeBuffer}\", but passed ${contentMode}`)\n }\n\n if (typeof fd === 'number') {\n this.fd = fd\n process.nextTick(() => this.emit('ready'))\n } else if (typeof fd === 'string') {\n openFile(fd, this)\n } else {\n throw new Error('SonicBoom supports only file descriptors and files')\n }\n if (this.minLength >= this.maxWrite) {\n throw new Error(`minLength should be smaller than maxWrite (${this.maxWrite})`)\n }\n\n this.release = (err, n) => {\n if (err) {\n if ((err.code === 'EAGAIN' || err.code === 'EBUSY') && this.retryEAGAIN(err, this._writingBuf.length, this._len - this._writingBuf.length)) {\n if (this.sync) {\n // This error code should not happen in sync mode, because it is\n // not using the underlining operating system asynchronous functions.\n // However it happens, and so we handle it.\n // Ref: https://github.com/pinojs/pino/issues/783\n try {\n sleep(BUSY_WRITE_TIMEOUT)\n this.release(undefined, 0)\n } catch (err) {\n this.release(err)\n }\n } else {\n // Let's give the destination some time to process the chunk.\n setTimeout(fsWrite, BUSY_WRITE_TIMEOUT)\n }\n } else {\n this._writing = false\n\n this.emit('error', err)\n }\n return\n }\n\n this.emit('write', n)\n const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n this._len = releasedBufObj.len\n this._writingBuf = releasedBufObj.writingBuf\n\n if (this._writingBuf.length) {\n if (!this.sync) {\n fsWrite()\n return\n }\n\n try {\n do {\n const n = fsWriteSync()\n const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n this._len = releasedBufObj.len\n this._writingBuf = releasedBufObj.writingBuf\n } while (this._writingBuf.length)\n } catch (err) {\n this.release(err)\n return\n }\n }\n\n if (this._fsync) {\n fs.fsyncSync(this.fd)\n }\n\n const len = this._len\n if (this._reopening) {\n this._writing = false\n this._reopening = false\n this.reopen()\n } else if (len > this.minLength) {\n this._actualWrite()\n } else if (this._ending) {\n if (len > 0) {\n this._actualWrite()\n } else {\n this._writing = false\n actualClose(this)\n }\n } else {\n this._writing = false\n if (this.sync) {\n if (!this._asyncDrainScheduled) {\n this._asyncDrainScheduled = true\n process.nextTick(emitDrain, this)\n }\n } else {\n this.emit('drain')\n }\n }\n }\n\n this.on('newListener', function (name) {\n if (name === 'drain') {\n this._asyncDrainScheduled = false\n }\n })\n\n if (this._periodicFlush !== 0) {\n this._periodicFlushTimer = setInterval(() => this.flush(null), this._periodicFlush)\n this._periodicFlushTimer.unref()\n }\n}\n\n/**\n * Release the writingBuf after fs.write n bytes data\n * @param {string | Buffer} writingBuf - currently writing buffer, usually be instance._writingBuf.\n * @param {number} len - currently buffer length, usually be instance._len.\n * @param {number} n - number of bytes fs already written\n * @returns {{writingBuf: string | Buffer, len: number}} released writingBuf and length\n */\nfunction releaseWritingBuf (writingBuf, len, n) {\n // if Buffer.byteLength is equal to n, that means writingBuf contains no multi-byte character\n if (typeof writingBuf === 'string' && Buffer.byteLength(writingBuf) !== n) {\n // Since the fs.write callback parameter `n` means how many bytes the passed of string\n // We calculate the original string length for avoiding the multi-byte character issue\n n = Buffer.from(writingBuf).subarray(0, n).toString().length\n }\n len = Math.max(len - n, 0)\n writingBuf = writingBuf.slice(n)\n return { writingBuf, len }\n}\n\nfunction emitDrain (sonic) {\n const hasListeners = sonic.listenerCount('drain') > 0\n if (!hasListeners) return\n sonic._asyncDrainScheduled = false\n sonic.emit('drain')\n}\n\ninherits(SonicBoom, EventEmitter)\n\nfunction mergeBuf (bufs, len) {\n if (bufs.length === 0) {\n return kEmptyBuffer\n }\n\n if (bufs.length === 1) {\n return bufs[0]\n }\n\n return Buffer.concat(bufs, len)\n}\n\nfunction write (data) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n const len = this._len + data.length\n const bufs = this._bufs\n\n if (this.maxLength && len > this.maxLength) {\n this.emit('drop', data)\n return this._len < this._hwm\n }\n\n if (\n bufs.length === 0 ||\n bufs[bufs.length - 1].length + data.length > this.maxWrite\n ) {\n bufs.push('' + data)\n } else {\n bufs[bufs.length - 1] += data\n }\n\n this._len = len\n\n if (!this._writing && this._len >= this.minLength) {\n this._actualWrite()\n }\n\n return this._len < this._hwm\n}\n\nfunction writeBuffer (data) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n const len = this._len + data.length\n const bufs = this._bufs\n const lens = this._lens\n\n if (this.maxLength && len > this.maxLength) {\n this.emit('drop', data)\n return this._len < this._hwm\n }\n\n if (\n bufs.length === 0 ||\n lens[lens.length - 1] + data.length > this.maxWrite\n ) {\n bufs.push([data])\n lens.push(data.length)\n } else {\n bufs[bufs.length - 1].push(data)\n lens[lens.length - 1] += data.length\n }\n\n this._len = len\n\n if (!this._writing && this._len >= this.minLength) {\n this._actualWrite()\n }\n\n return this._len < this._hwm\n}\n\nfunction callFlushCallbackOnDrain (cb) {\n this._flushPending = true\n const onDrain = () => {\n // only if _fsync is false to avoid double fsync\n if (!this._fsync) {\n try {\n fs.fsync(this.fd, (err) => {\n this._flushPending = false\n cb(err)\n })\n } catch (err) {\n cb(err)\n }\n } else {\n this._flushPending = false\n cb()\n }\n this.off('error', onError)\n }\n const onError = (err) => {\n this._flushPending = false\n cb(err)\n this.off('drain', onDrain)\n }\n\n this.once('drain', onDrain)\n this.once('error', onError)\n}\n\nfunction flush (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw new Error('flush cb must be a function')\n }\n\n if (this.destroyed) {\n const error = new Error('SonicBoom destroyed')\n if (cb) {\n cb(error)\n return\n }\n\n throw error\n }\n\n if (this.minLength <= 0) {\n cb?.()\n return\n }\n\n if (cb) {\n callFlushCallbackOnDrain.call(this, cb)\n }\n\n if (this._writing) {\n return\n }\n\n if (this._bufs.length === 0) {\n this._bufs.push('')\n }\n\n this._actualWrite()\n}\n\nfunction flushBuffer (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw new Error('flush cb must be a function')\n }\n\n if (this.destroyed) {\n const error = new Error('SonicBoom destroyed')\n if (cb) {\n cb(error)\n return\n }\n\n throw error\n }\n\n if (this.minLength <= 0) {\n cb?.()\n return\n }\n\n if (cb) {\n callFlushCallbackOnDrain.call(this, cb)\n }\n\n if (this._writing) {\n return\n }\n\n if (this._bufs.length === 0) {\n this._bufs.push([])\n this._lens.push(0)\n }\n\n this._actualWrite()\n}\n\nSonicBoom.prototype.reopen = function (file) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this._opening) {\n this.once('ready', () => {\n this.reopen(file)\n })\n return\n }\n\n if (this._ending) {\n return\n }\n\n if (!this.file) {\n throw new Error('Unable to reopen a file descriptor, you must pass a file to SonicBoom')\n }\n\n if (file) {\n this.file = file\n }\n this._reopening = true\n\n if (this._writing) {\n return\n }\n\n const fd = this.fd\n this.once('ready', () => {\n if (fd !== this.fd) {\n fs.close(fd, (err) => {\n if (err) {\n return this.emit('error', err)\n }\n })\n }\n })\n\n openFile(this.file, this)\n}\n\nSonicBoom.prototype.end = function () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this._opening) {\n this.once('ready', () => {\n this.end()\n })\n return\n }\n\n if (this._ending) {\n return\n }\n\n this._ending = true\n\n if (this._writing) {\n return\n }\n\n if (this._len > 0 && this.fd >= 0) {\n this._actualWrite()\n } else {\n actualClose(this)\n }\n}\n\nfunction flushSync () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this.fd < 0) {\n throw new Error('sonic boom is not ready yet')\n }\n\n if (!this._writing && this._writingBuf.length > 0) {\n this._bufs.unshift(this._writingBuf)\n this._writingBuf = ''\n }\n\n let buf = ''\n while (this._bufs.length || buf) {\n if (buf.length <= 0) {\n buf = this._bufs[0]\n }\n try {\n const n = fs.writeSync(this.fd, buf, 'utf8')\n const releasedBufObj = releaseWritingBuf(buf, this._len, n)\n buf = releasedBufObj.writingBuf\n this._len = releasedBufObj.len\n if (buf.length <= 0) {\n this._bufs.shift()\n }\n } catch (err) {\n const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n throw err\n }\n\n sleep(BUSY_WRITE_TIMEOUT)\n }\n }\n\n try {\n fs.fsyncSync(this.fd)\n } catch {\n // Skip the error. The fd might not support fsync.\n }\n}\n\nfunction flushBufferSync () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this.fd < 0) {\n throw new Error('sonic boom is not ready yet')\n }\n\n if (!this._writing && this._writingBuf.length > 0) {\n this._bufs.unshift([this._writingBuf])\n this._writingBuf = kEmptyBuffer\n }\n\n let buf = kEmptyBuffer\n while (this._bufs.length || buf.length) {\n if (buf.length <= 0) {\n buf = mergeBuf(this._bufs[0], this._lens[0])\n }\n try {\n const n = fs.writeSync(this.fd, buf)\n buf = buf.subarray(n)\n this._len = Math.max(this._len - n, 0)\n if (buf.length <= 0) {\n this._bufs.shift()\n this._lens.shift()\n }\n } catch (err) {\n const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n throw err\n }\n\n sleep(BUSY_WRITE_TIMEOUT)\n }\n }\n}\n\nSonicBoom.prototype.destroy = function () {\n if (this.destroyed) {\n return\n }\n actualClose(this)\n}\n\nfunction actualWrite () {\n const release = this.release\n this._writing = true\n this._writingBuf = this._writingBuf || this._bufs.shift() || ''\n\n if (this.sync) {\n try {\n const written = fs.writeSync(this.fd, this._writingBuf, 'utf8')\n release(null, written)\n } catch (err) {\n release(err)\n }\n } else {\n fs.write(this.fd, this._writingBuf, 'utf8', release)\n }\n}\n\nfunction actualWriteBuffer () {\n const release = this.release\n this._writing = true\n this._writingBuf = this._writingBuf.length ? this._writingBuf : mergeBuf(this._bufs.shift(), this._lens.shift())\n\n if (this.sync) {\n try {\n const written = fs.writeSync(this.fd, this._writingBuf)\n release(null, written)\n } catch (err) {\n release(err)\n }\n } else {\n // fs.write will need to copy string to buffer anyway so\n // we do it here to avoid the overhead of calculating the buffer size\n // in releaseWritingBuf.\n if (kCopyBuffer) {\n this._writingBuf = Buffer.from(this._writingBuf)\n }\n fs.write(this.fd, this._writingBuf, release)\n }\n}\n\nfunction actualClose (sonic) {\n if (sonic.fd === -1) {\n sonic.once('ready', actualClose.bind(null, sonic))\n return\n }\n\n if (sonic._periodicFlushTimer !== undefined) {\n clearInterval(sonic._periodicFlushTimer)\n }\n\n sonic.destroyed = true\n sonic._bufs = []\n sonic._lens = []\n\n assert(typeof sonic.fd === 'number', `sonic.fd must be a number, got ${typeof sonic.fd}`)\n try {\n fs.fsync(sonic.fd, closeWrapped)\n } catch {\n }\n\n function closeWrapped () {\n // We skip errors in fsync\n\n if (sonic.fd !== 1 && sonic.fd !== 2) {\n fs.close(sonic.fd, done)\n } else {\n done()\n }\n }\n\n function done (err) {\n if (err) {\n sonic.emit('error', err)\n return\n }\n\n if (sonic._ending && !sonic._writing) {\n sonic.emit('finish')\n }\n sonic.emit('close')\n }\n}\n\n/**\n * These export configurations enable JS and TS developers\n * to consumer SonicBoom in whatever way best suits their needs.\n * Some examples of supported import syntax includes:\n * - `const SonicBoom = require('SonicBoom')`\n * - `const { SonicBoom } = require('SonicBoom')`\n * - `import * as SonicBoom from 'SonicBoom'`\n * - `import { SonicBoom } from 'SonicBoom'`\n * - `import SonicBoom from 'SonicBoom'`\n */\nSonicBoom.SonicBoom = SonicBoom\nSonicBoom.default = SonicBoom\nmodule.exports = SonicBoom\n",
|
|
21
|
+
"'use strict'\n\nconst refs = {\n exit: [],\n beforeExit: []\n}\nconst functions = {\n exit: onExit,\n beforeExit: onBeforeExit\n}\n\nlet registry\n\nfunction ensureRegistry () {\n if (registry === undefined) {\n registry = new FinalizationRegistry(clear)\n }\n}\n\nfunction install (event) {\n if (refs[event].length > 0) {\n return\n }\n\n process.on(event, functions[event])\n}\n\nfunction uninstall (event) {\n if (refs[event].length > 0) {\n return\n }\n process.removeListener(event, functions[event])\n if (refs.exit.length === 0 && refs.beforeExit.length === 0) {\n registry = undefined\n }\n}\n\nfunction onExit () {\n callRefs('exit')\n}\n\nfunction onBeforeExit () {\n callRefs('beforeExit')\n}\n\nfunction callRefs (event) {\n for (const ref of refs[event]) {\n const obj = ref.deref()\n const fn = ref.fn\n\n // This should always happen, however GC is\n // undeterministic so it might not happen.\n /* istanbul ignore else */\n if (obj !== undefined) {\n fn(obj, event)\n }\n }\n refs[event] = []\n}\n\nfunction clear (ref) {\n for (const event of ['exit', 'beforeExit']) {\n const index = refs[event].indexOf(ref)\n refs[event].splice(index, index + 1)\n uninstall(event)\n }\n}\n\nfunction _register (event, obj, fn) {\n if (obj === undefined) {\n throw new Error('the object can\\'t be undefined')\n }\n install(event)\n const ref = new WeakRef(obj)\n ref.fn = fn\n\n ensureRegistry()\n registry.register(obj, ref)\n refs[event].push(ref)\n}\n\nfunction register (obj, fn) {\n _register('exit', obj, fn)\n}\n\nfunction registerBeforeExit (obj, fn) {\n _register('beforeExit', obj, fn)\n}\n\nfunction unregister (obj) {\n if (registry === undefined) {\n return\n }\n registry.unregister(obj)\n for (const event of ['exit', 'beforeExit']) {\n refs[event] = refs[event].filter((ref) => {\n const _obj = ref.deref()\n return _obj && _obj !== obj\n })\n uninstall(event)\n }\n}\n\nmodule.exports = {\n register,\n registerBeforeExit,\n unregister\n}\n",
|
|
22
|
+
"'use strict'\n\nconst MAX_TIMEOUT = 1000\n\nfunction wait (state, index, expected, timeout, done) {\n const max = Date.now() + timeout\n let current = Atomics.load(state, index)\n if (current === expected) {\n done(null, 'ok')\n return\n }\n let prior = current\n const check = (backoff) => {\n if (Date.now() > max) {\n done(null, 'timed-out')\n } else {\n setTimeout(() => {\n prior = current\n current = Atomics.load(state, index)\n if (current === prior) {\n check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2)\n } else {\n if (current === expected) done(null, 'ok')\n else done(null, 'not-equal')\n }\n }, backoff)\n }\n }\n check(1)\n}\n\n// let waitDiffCount = 0\nfunction waitDiff (state, index, expected, timeout, done) {\n // const id = waitDiffCount++\n // process._rawDebug(`>>> waitDiff ${id}`)\n const max = Date.now() + timeout\n let current = Atomics.load(state, index)\n if (current !== expected) {\n done(null, 'ok')\n return\n }\n const check = (backoff) => {\n // process._rawDebug(`${id} ${index} current ${current} expected ${expected}`)\n // process._rawDebug('' + backoff)\n if (Date.now() > max) {\n done(null, 'timed-out')\n } else {\n setTimeout(() => {\n current = Atomics.load(state, index)\n if (current !== expected) {\n done(null, 'ok')\n } else {\n check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2)\n }\n }, backoff)\n }\n }\n check(1)\n}\n\nmodule.exports = { wait, waitDiff }\n",
|
|
23
|
+
"'use strict'\n\nconst WRITE_INDEX = 4\nconst READ_INDEX = 8\n\nmodule.exports = {\n WRITE_INDEX,\n READ_INDEX\n}\n",
|
|
24
|
+
"'use strict'\n\nconst { version } = require('./package.json')\nconst { EventEmitter } = require('events')\nconst { Worker } = require('worker_threads')\nconst { join } = require('path')\nconst { pathToFileURL } = require('url')\nconst { wait } = require('./lib/wait')\nconst {\n WRITE_INDEX,\n READ_INDEX\n} = require('./lib/indexes')\nconst buffer = require('buffer')\nconst assert = require('assert')\n\nconst kImpl = Symbol('kImpl')\n\n// V8 limit for string size\nconst MAX_STRING = buffer.constants.MAX_STRING_LENGTH\n\nclass FakeWeakRef {\n constructor (value) {\n this._value = value\n }\n\n deref () {\n return this._value\n }\n}\n\nclass FakeFinalizationRegistry {\n register () {}\n\n unregister () {}\n}\n\n// Currently using FinalizationRegistry with code coverage breaks the world\n// Ref: https://github.com/nodejs/node/issues/49344\nconst FinalizationRegistry = process.env.NODE_V8_COVERAGE ? FakeFinalizationRegistry : global.FinalizationRegistry || FakeFinalizationRegistry\nconst WeakRef = process.env.NODE_V8_COVERAGE ? FakeWeakRef : global.WeakRef || FakeWeakRef\n\nconst registry = new FinalizationRegistry((worker) => {\n if (worker.exited) {\n return\n }\n worker.terminate()\n})\n\nfunction createWorker (stream, opts) {\n const { filename, workerData } = opts\n\n const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n const toExecute = bundlerOverrides['thread-stream-worker'] || join(__dirname, 'lib', 'worker.js')\n\n const worker = new Worker(toExecute, {\n ...opts.workerOpts,\n trackUnmanagedFds: false,\n workerData: {\n filename: filename.indexOf('file://') === 0\n ? filename\n : pathToFileURL(filename).href,\n dataBuf: stream[kImpl].dataBuf,\n stateBuf: stream[kImpl].stateBuf,\n workerData: {\n $context: {\n threadStreamVersion: version\n },\n ...workerData\n }\n }\n })\n\n // We keep a strong reference for now,\n // we need to start writing first\n worker.stream = new FakeWeakRef(stream)\n\n worker.on('message', onWorkerMessage)\n worker.on('exit', onWorkerExit)\n registry.register(stream, worker)\n\n return worker\n}\n\nfunction drain (stream) {\n assert(!stream[kImpl].sync)\n if (stream[kImpl].needDrain) {\n stream[kImpl].needDrain = false\n stream.emit('drain')\n }\n}\n\nfunction nextFlush (stream) {\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n let leftover = stream[kImpl].data.length - writeIndex\n\n if (leftover > 0) {\n if (stream[kImpl].buf.length === 0) {\n stream[kImpl].flushing = false\n\n if (stream[kImpl].ending) {\n end(stream)\n } else if (stream[kImpl].needDrain) {\n process.nextTick(drain, stream)\n }\n\n return\n }\n\n let toWrite = stream[kImpl].buf.slice(0, leftover)\n let toWriteBytes = Buffer.byteLength(toWrite)\n if (toWriteBytes <= leftover) {\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n // process._rawDebug('writing ' + toWrite.length)\n write(stream, toWrite, nextFlush.bind(null, stream))\n } else {\n // multi-byte utf-8\n stream.flush(() => {\n // err is already handled in flush()\n if (stream.destroyed) {\n return\n }\n\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n\n // Find a toWrite length that fits the buffer\n // it must exists as the buffer is at least 4 bytes length\n // and the max utf-8 length for a char is 4 bytes.\n while (toWriteBytes > stream[kImpl].data.length) {\n leftover = leftover / 2\n toWrite = stream[kImpl].buf.slice(0, leftover)\n toWriteBytes = Buffer.byteLength(toWrite)\n }\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n write(stream, toWrite, nextFlush.bind(null, stream))\n })\n }\n } else if (leftover === 0) {\n if (writeIndex === 0 && stream[kImpl].buf.length === 0) {\n // we had a flushSync in the meanwhile\n return\n }\n stream.flush(() => {\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n nextFlush(stream)\n })\n } else {\n // This should never happen\n destroy(stream, new Error('overwritten'))\n }\n}\n\nfunction onWorkerMessage (msg) {\n const stream = this.stream.deref()\n if (stream === undefined) {\n this.exited = true\n // Terminate the worker.\n this.terminate()\n return\n }\n\n switch (msg.code) {\n case 'READY':\n // Replace the FakeWeakRef with a\n // proper one.\n this.stream = new WeakRef(stream)\n\n stream.flush(() => {\n stream[kImpl].ready = true\n stream.emit('ready')\n })\n break\n case 'ERROR':\n destroy(stream, msg.err)\n break\n case 'EVENT':\n if (Array.isArray(msg.args)) {\n stream.emit(msg.name, ...msg.args)\n } else {\n stream.emit(msg.name, msg.args)\n }\n break\n case 'WARNING':\n process.emitWarning(msg.err)\n break\n default:\n destroy(stream, new Error('this should not happen: ' + msg.code))\n }\n}\n\nfunction onWorkerExit (code) {\n const stream = this.stream.deref()\n if (stream === undefined) {\n // Nothing to do, the worker already exit\n return\n }\n registry.unregister(stream)\n stream.worker.exited = true\n stream.worker.off('exit', onWorkerExit)\n destroy(stream, code !== 0 ? new Error('the worker thread exited') : null)\n}\n\nclass ThreadStream extends EventEmitter {\n constructor (opts = {}) {\n super()\n\n if (opts.bufferSize < 4) {\n throw new Error('bufferSize must at least fit a 4-byte utf-8 char')\n }\n\n this[kImpl] = {}\n this[kImpl].stateBuf = new SharedArrayBuffer(128)\n this[kImpl].state = new Int32Array(this[kImpl].stateBuf)\n this[kImpl].dataBuf = new SharedArrayBuffer(opts.bufferSize || 4 * 1024 * 1024)\n this[kImpl].data = Buffer.from(this[kImpl].dataBuf)\n this[kImpl].sync = opts.sync || false\n this[kImpl].ending = false\n this[kImpl].ended = false\n this[kImpl].needDrain = false\n this[kImpl].destroyed = false\n this[kImpl].flushing = false\n this[kImpl].ready = false\n this[kImpl].finished = false\n this[kImpl].errored = null\n this[kImpl].closed = false\n this[kImpl].buf = ''\n\n // TODO (fix): Make private?\n this.worker = createWorker(this, opts) // TODO (fix): make private\n this.on('message', (message, transferList) => {\n this.worker.postMessage(message, transferList)\n })\n }\n\n write (data) {\n if (this[kImpl].destroyed) {\n error(this, new Error('the worker has exited'))\n return false\n }\n\n if (this[kImpl].ending) {\n error(this, new Error('the worker is ending'))\n return false\n }\n\n if (this[kImpl].flushing && this[kImpl].buf.length + data.length >= MAX_STRING) {\n try {\n writeSync(this)\n this[kImpl].flushing = true\n } catch (err) {\n destroy(this, err)\n return false\n }\n }\n\n this[kImpl].buf += data\n\n if (this[kImpl].sync) {\n try {\n writeSync(this)\n return true\n } catch (err) {\n destroy(this, err)\n return false\n }\n }\n\n if (!this[kImpl].flushing) {\n this[kImpl].flushing = true\n setImmediate(nextFlush, this)\n }\n\n this[kImpl].needDrain = this[kImpl].data.length - this[kImpl].buf.length - Atomics.load(this[kImpl].state, WRITE_INDEX) <= 0\n return !this[kImpl].needDrain\n }\n\n end () {\n if (this[kImpl].destroyed) {\n return\n }\n\n this[kImpl].ending = true\n end(this)\n }\n\n flush (cb) {\n if (this[kImpl].destroyed) {\n if (typeof cb === 'function') {\n process.nextTick(cb, new Error('the worker has exited'))\n }\n return\n }\n\n // TODO write all .buf\n const writeIndex = Atomics.load(this[kImpl].state, WRITE_INDEX)\n // process._rawDebug(`(flush) readIndex (${Atomics.load(this.state, READ_INDEX)}) writeIndex (${Atomics.load(this.state, WRITE_INDEX)})`)\n wait(this[kImpl].state, READ_INDEX, writeIndex, Infinity, (err, res) => {\n if (err) {\n destroy(this, err)\n process.nextTick(cb, err)\n return\n }\n if (res === 'not-equal') {\n // TODO handle deadlock\n this.flush(cb)\n return\n }\n process.nextTick(cb)\n })\n }\n\n flushSync () {\n if (this[kImpl].destroyed) {\n return\n }\n\n writeSync(this)\n flushSync(this)\n }\n\n unref () {\n this.worker.unref()\n }\n\n ref () {\n this.worker.ref()\n }\n\n get ready () {\n return this[kImpl].ready\n }\n\n get destroyed () {\n return this[kImpl].destroyed\n }\n\n get closed () {\n return this[kImpl].closed\n }\n\n get writable () {\n return !this[kImpl].destroyed && !this[kImpl].ending\n }\n\n get writableEnded () {\n return this[kImpl].ending\n }\n\n get writableFinished () {\n return this[kImpl].finished\n }\n\n get writableNeedDrain () {\n return this[kImpl].needDrain\n }\n\n get writableObjectMode () {\n return false\n }\n\n get writableErrored () {\n return this[kImpl].errored\n }\n}\n\nfunction error (stream, err) {\n setImmediate(() => {\n stream.emit('error', err)\n })\n}\n\nfunction destroy (stream, err) {\n if (stream[kImpl].destroyed) {\n return\n }\n stream[kImpl].destroyed = true\n\n if (err) {\n stream[kImpl].errored = err\n error(stream, err)\n }\n\n if (!stream.worker.exited) {\n stream.worker.terminate()\n .catch(() => {})\n .then(() => {\n stream[kImpl].closed = true\n stream.emit('close')\n })\n } else {\n setImmediate(() => {\n stream[kImpl].closed = true\n stream.emit('close')\n })\n }\n}\n\nfunction write (stream, data, cb) {\n // data is smaller than the shared buffer length\n const current = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n const length = Buffer.byteLength(data)\n stream[kImpl].data.write(data, current)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, current + length)\n Atomics.notify(stream[kImpl].state, WRITE_INDEX)\n cb()\n return true\n}\n\nfunction end (stream) {\n if (stream[kImpl].ended || !stream[kImpl].ending || stream[kImpl].flushing) {\n return\n }\n stream[kImpl].ended = true\n\n try {\n stream.flushSync()\n\n let readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n // process._rawDebug('writing index')\n Atomics.store(stream[kImpl].state, WRITE_INDEX, -1)\n // process._rawDebug(`(end) readIndex (${Atomics.load(stream.state, READ_INDEX)}) writeIndex (${Atomics.load(stream.state, WRITE_INDEX)})`)\n Atomics.notify(stream[kImpl].state, WRITE_INDEX)\n\n // Wait for the process to complete\n let spins = 0\n while (readIndex !== -1) {\n // process._rawDebug(`read = ${read}`)\n Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n if (readIndex === -2) {\n destroy(stream, new Error('end() failed'))\n return\n }\n\n if (++spins === 10) {\n destroy(stream, new Error('end() took too long (10s)'))\n return\n }\n }\n\n process.nextTick(() => {\n stream[kImpl].finished = true\n stream.emit('finish')\n })\n } catch (err) {\n destroy(stream, err)\n }\n // process._rawDebug('end finished...')\n}\n\nfunction writeSync (stream) {\n const cb = () => {\n if (stream[kImpl].ending) {\n end(stream)\n } else if (stream[kImpl].needDrain) {\n process.nextTick(drain, stream)\n }\n }\n stream[kImpl].flushing = false\n\n while (stream[kImpl].buf.length !== 0) {\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n let leftover = stream[kImpl].data.length - writeIndex\n if (leftover === 0) {\n flushSync(stream)\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n continue\n } else if (leftover < 0) {\n // stream should never happen\n throw new Error('overwritten')\n }\n\n let toWrite = stream[kImpl].buf.slice(0, leftover)\n let toWriteBytes = Buffer.byteLength(toWrite)\n if (toWriteBytes <= leftover) {\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n // process._rawDebug('writing ' + toWrite.length)\n write(stream, toWrite, cb)\n } else {\n // multi-byte utf-8\n flushSync(stream)\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n\n // Find a toWrite length that fits the buffer\n // it must exists as the buffer is at least 4 bytes length\n // and the max utf-8 length for a char is 4 bytes.\n while (toWriteBytes > stream[kImpl].buf.length) {\n leftover = leftover / 2\n toWrite = stream[kImpl].buf.slice(0, leftover)\n toWriteBytes = Buffer.byteLength(toWrite)\n }\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n write(stream, toWrite, cb)\n }\n }\n}\n\nfunction flushSync (stream) {\n if (stream[kImpl].flushing) {\n throw new Error('unable to flush while flushing')\n }\n\n // process._rawDebug('flushSync started')\n\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n\n let spins = 0\n\n // TODO handle deadlock\n while (true) {\n const readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n if (readIndex === -2) {\n throw Error('_flushSync failed')\n }\n\n // process._rawDebug(`(flushSync) readIndex (${readIndex}) writeIndex (${writeIndex})`)\n if (readIndex !== writeIndex) {\n // TODO stream timeouts for some reason.\n Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n } else {\n break\n }\n\n if (++spins === 10) {\n throw new Error('_flushSync took too long (10s)')\n }\n }\n // process._rawDebug('flushSync finished')\n}\n\nmodule.exports = ThreadStream\n",
|
|
25
|
+
"'use strict'\n\nconst { createRequire } = require('module')\nconst getCallers = require('./caller')\nconst { join, isAbsolute, sep } = require('node:path')\nconst sleep = require('atomic-sleep')\nconst onExit = require('on-exit-leak-free')\nconst ThreadStream = require('thread-stream')\n\nfunction setupOnExit (stream) {\n // This is leak free, it does not leave event handlers\n onExit.register(stream, autoEnd)\n onExit.registerBeforeExit(stream, flush)\n\n stream.on('close', function () {\n onExit.unregister(stream)\n })\n}\n\nfunction buildStream (filename, workerData, workerOpts, sync) {\n const stream = new ThreadStream({\n filename,\n workerData,\n workerOpts,\n sync\n })\n\n stream.on('ready', onReady)\n stream.on('close', function () {\n process.removeListener('exit', onExit)\n })\n\n process.on('exit', onExit)\n\n function onReady () {\n process.removeListener('exit', onExit)\n stream.unref()\n\n if (workerOpts.autoEnd !== false) {\n setupOnExit(stream)\n }\n }\n\n function onExit () {\n /* istanbul ignore next */\n if (stream.closed) {\n return\n }\n stream.flushSync()\n // Apparently there is a very sporadic race condition\n // that in certain OS would prevent the messages to be flushed\n // because the thread might not have been created still.\n // Unfortunately we need to sleep(100) in this case.\n sleep(100)\n stream.end()\n }\n\n return stream\n}\n\nfunction autoEnd (stream) {\n stream.ref()\n stream.flushSync()\n stream.end()\n stream.once('close', function () {\n stream.unref()\n })\n}\n\nfunction flush (stream) {\n stream.flushSync()\n}\n\nfunction transport (fullOptions) {\n const { pipeline, targets, levels, dedupe, worker = {}, caller = getCallers(), sync = false } = fullOptions\n\n const options = {\n ...fullOptions.options\n }\n\n // Backwards compatibility\n const callers = typeof caller === 'string' ? [caller] : caller\n\n // This will be eventually modified by bundlers\n const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n\n let target = fullOptions.target\n\n if (target && targets) {\n throw new Error('only one of target or targets can be specified')\n }\n\n if (targets) {\n target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n options.targets = targets.filter(dest => dest.target).map((dest) => {\n return {\n ...dest,\n target: fixTarget(dest.target)\n }\n })\n options.pipelines = targets.filter(dest => dest.pipeline).map((dest) => {\n return dest.pipeline.map((t) => {\n return {\n ...t,\n level: dest.level, // duplicate the pipeline `level` property defined in the upper level\n target: fixTarget(t.target)\n }\n })\n })\n } else if (pipeline) {\n target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n options.pipelines = [pipeline.map((dest) => {\n return {\n ...dest,\n target: fixTarget(dest.target)\n }\n })]\n }\n\n if (levels) {\n options.levels = levels\n }\n\n if (dedupe) {\n options.dedupe = dedupe\n }\n\n options.pinoWillSendConfig = true\n\n return buildStream(fixTarget(target), options, worker, sync)\n\n function fixTarget (origin) {\n origin = bundlerOverrides[origin] || origin\n\n if (isAbsolute(origin) || origin.indexOf('file://') === 0) {\n return origin\n }\n\n if (origin === 'pino/file') {\n return join(__dirname, '..', 'file.js')\n }\n\n let fixTarget\n\n for (const filePath of callers) {\n try {\n const context = filePath === 'node:repl'\n ? process.cwd() + sep\n : filePath\n\n fixTarget = createRequire(context).resolve(origin)\n break\n } catch (err) {\n // Silent catch\n continue\n }\n }\n\n if (!fixTarget) {\n throw new Error(`unable to determine transport target for \"${origin}\"`)\n }\n\n return fixTarget\n }\n}\n\nmodule.exports = transport\n",
|
|
26
|
+
"'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst diagChan = require('node:diagnostics_channel')\nconst format = require('quick-format-unescaped')\nconst { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers')\nconst SonicBoom = require('sonic-boom')\nconst onExit = require('on-exit-leak-free')\nconst {\n lsCacheSym,\n chindingsSym,\n writeSym,\n serializersSym,\n formatOptsSym,\n endSym,\n stringifiersSym,\n stringifySym,\n stringifySafeSym,\n wildcardFirstSym,\n nestedKeySym,\n formattersSym,\n messageKeySym,\n errorKeySym,\n nestedKeyStrSym,\n msgPrefixSym\n} = require('./symbols')\nconst { isMainThread } = require('worker_threads')\nconst transport = require('./transport')\n\nconst asJsonChan = diagChan.tracingChannel('pino_asJson')\n\nfunction noop () {\n}\n\nfunction genLog (level, hook) {\n if (!hook) return LOG\n\n return function hookWrappedLog (...args) {\n hook.call(this, args, LOG, level)\n }\n\n function LOG (o, ...n) {\n if (typeof o === 'object') {\n let msg = o\n if (o !== null) {\n if (o.method && o.headers && o.socket) {\n o = mapHttpRequest(o)\n } else if (typeof o.setHeader === 'function') {\n o = mapHttpResponse(o)\n }\n }\n let formatParams\n if (msg === null && n.length === 0) {\n formatParams = [null]\n } else {\n msg = n.shift()\n formatParams = n\n }\n // We do not use a coercive check for `msg` as it is\n // measurably slower than the explicit checks.\n if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n msg = this[msgPrefixSym] + msg\n }\n this[writeSym](o, format(msg, formatParams, this[formatOptsSym]), level)\n } else {\n let msg = o === undefined ? n.shift() : o\n\n // We do not use a coercive check for `msg` as it is\n // measurably slower than the explicit checks.\n if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n msg = this[msgPrefixSym] + msg\n }\n this[writeSym](null, format(msg, n, this[formatOptsSym]), level)\n }\n }\n}\n\n// magically escape strings for json\n// relying on their charCodeAt\n// everything below 32 needs JSON.stringify()\n// 34 and 92 happens all the time, so we\n// have a fast case for them\nfunction asString (str) {\n let result = ''\n let last = 0\n let found = false\n let point = 255\n const l = str.length\n if (l > 100) {\n return JSON.stringify(str)\n }\n for (var i = 0; i < l && point >= 32; i++) {\n point = str.charCodeAt(i)\n if (point === 34 || point === 92) {\n result += str.slice(last, i) + '\\\\'\n last = i\n found = true\n }\n }\n if (!found) {\n result = str\n } else {\n result += str.slice(last)\n }\n return point < 32 ? JSON.stringify(str) : '\"' + result + '\"'\n}\n\n/**\n * `asJson` wraps `_asJson` in order to facilitate generating diagnostics.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string}\n */\nfunction asJson (obj, msg, num, time) {\n if (asJsonChan.hasSubscribers === false) {\n return _asJson.call(this, obj, msg, num, time)\n }\n\n const store = { instance: this, arguments }\n return asJsonChan.traceSync(_asJson, store, this, obj, msg, num, time)\n}\n\n/**\n * `_asJson` parses all collected data and generates the finalized newline\n * delimited JSON string.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string} The finalized log string terminated with a newline.\n * @private\n */\nfunction _asJson (obj, msg, num, time) {\n const stringify = this[stringifySym]\n const stringifySafe = this[stringifySafeSym]\n const stringifiers = this[stringifiersSym]\n const end = this[endSym]\n const chindings = this[chindingsSym]\n const serializers = this[serializersSym]\n const formatters = this[formattersSym]\n const messageKey = this[messageKeySym]\n const errorKey = this[errorKeySym]\n let data = this[lsCacheSym][num] + time\n\n // we need the child bindings added to the output first so instance logged\n // objects can take precedence when JSON.parse-ing the resulting log line\n data = data + chindings\n\n let value\n if (formatters.log) {\n obj = formatters.log(obj)\n }\n const wildcardStringifier = stringifiers[wildcardFirstSym]\n let propStr = ''\n for (const key in obj) {\n value = obj[key]\n if (Object.prototype.hasOwnProperty.call(obj, key) && value !== undefined) {\n if (serializers[key]) {\n value = serializers[key](value)\n } else if (key === errorKey && serializers.err) {\n value = serializers.err(value)\n }\n\n const stringifier = stringifiers[key] || wildcardStringifier\n\n switch (typeof value) {\n case 'undefined':\n case 'function':\n continue\n case 'number':\n /* eslint no-fallthrough: \"off\" */\n if (Number.isFinite(value) === false) {\n value = null\n }\n // this case explicitly falls through to the next one\n case 'boolean':\n if (stringifier) value = stringifier(value)\n break\n case 'string':\n value = (stringifier || asString)(value)\n break\n default:\n value = (stringifier || stringify)(value, stringifySafe)\n }\n if (value === undefined) continue\n const strKey = asString(key)\n propStr += ',' + strKey + ':' + value\n }\n }\n\n let msgStr = ''\n if (msg !== undefined) {\n value = serializers[messageKey] ? serializers[messageKey](msg) : msg\n const stringifier = stringifiers[messageKey] || wildcardStringifier\n\n switch (typeof value) {\n case 'function':\n break\n case 'number':\n if (Number.isFinite(value) === false) {\n value = null\n }\n // this case explicitly falls through to the next one\n case 'boolean':\n if (stringifier) value = stringifier(value)\n msgStr = ',\"' + messageKey + '\":' + value\n break\n case 'string':\n value = (stringifier || asString)(value)\n msgStr = ',\"' + messageKey + '\":' + value\n break\n default:\n value = (stringifier || stringify)(value, stringifySafe)\n msgStr = ',\"' + messageKey + '\":' + value\n }\n }\n\n if (this[nestedKeySym] && propStr) {\n // place all the obj properties under the specified key\n // the nested key is already formatted from the constructor\n return data + this[nestedKeyStrSym] + propStr.slice(1) + '}' + msgStr + end\n } else {\n return data + propStr + msgStr + end\n }\n}\n\nfunction asChindings (instance, bindings) {\n let value\n let data = instance[chindingsSym]\n const stringify = instance[stringifySym]\n const stringifySafe = instance[stringifySafeSym]\n const stringifiers = instance[stringifiersSym]\n const wildcardStringifier = stringifiers[wildcardFirstSym]\n const serializers = instance[serializersSym]\n const formatter = instance[formattersSym].bindings\n bindings = formatter(bindings)\n\n for (const key in bindings) {\n value = bindings[key]\n const valid = (key.length < 5 || (key !== 'level' &&\n key !== 'serializers' &&\n key !== 'formatters' &&\n key !== 'customLevels')) &&\n bindings.hasOwnProperty(key) &&\n value !== undefined\n if (valid === true) {\n value = serializers[key] ? serializers[key](value) : value\n value = (stringifiers[key] || wildcardStringifier || stringify)(value, stringifySafe)\n if (value === undefined) continue\n data += ',\"' + key + '\":' + value\n }\n }\n return data\n}\n\nfunction hasBeenTampered (stream) {\n return stream.write !== stream.constructor.prototype.write\n}\n\nfunction buildSafeSonicBoom (opts) {\n const stream = new SonicBoom(opts)\n stream.on('error', filterBrokenPipe)\n // If we are sync: false, we must flush on exit\n if (!opts.sync && isMainThread) {\n onExit.register(stream, autoEnd)\n\n stream.on('close', function () {\n onExit.unregister(stream)\n })\n }\n return stream\n\n function filterBrokenPipe (err) {\n // Impossible to replicate across all operating systems\n /* istanbul ignore next */\n if (err.code === 'EPIPE') {\n // If we get EPIPE, we should stop logging here\n // however we have no control to the consumer of\n // SonicBoom, so we just overwrite the write method\n stream.write = noop\n stream.end = noop\n stream.flushSync = noop\n stream.destroy = noop\n return\n }\n stream.removeListener('error', filterBrokenPipe)\n stream.emit('error', err)\n }\n}\n\nfunction autoEnd (stream, eventName) {\n // This check is needed only on some platforms\n /* istanbul ignore next */\n if (stream.destroyed) {\n return\n }\n\n if (eventName === 'beforeExit') {\n // We still have an event loop, let's use it\n stream.flush()\n stream.on('drain', function () {\n stream.end()\n })\n } else {\n // For some reason istanbul is not detecting this, but it's there\n /* istanbul ignore next */\n // We do not have an event loop, so flush synchronously\n stream.flushSync()\n }\n}\n\nfunction createArgsNormalizer (defaultOptions) {\n return function normalizeArgs (instance, caller, opts = {}, stream) {\n // support stream as a string\n if (typeof opts === 'string') {\n stream = buildSafeSonicBoom({ dest: opts })\n opts = {}\n } else if (typeof stream === 'string') {\n if (opts && opts.transport) {\n throw Error('only one of option.transport or stream can be specified')\n }\n stream = buildSafeSonicBoom({ dest: stream })\n } else if (opts instanceof SonicBoom || opts.writable || opts._writableState) {\n stream = opts\n opts = {}\n } else if (opts.transport) {\n if (opts.transport instanceof SonicBoom || opts.transport.writable || opts.transport._writableState) {\n throw Error('option.transport do not allow stream, please pass to option directly. e.g. pino(transport)')\n }\n if (opts.transport.targets && opts.transport.targets.length && opts.formatters && typeof opts.formatters.level === 'function') {\n throw Error('option.transport.targets do not allow custom level formatters')\n }\n\n let customLevels\n if (opts.customLevels) {\n customLevels = opts.useOnlyCustomLevels ? opts.customLevels : Object.assign({}, opts.levels, opts.customLevels)\n }\n stream = transport({ caller, ...opts.transport, levels: customLevels })\n }\n opts = Object.assign({}, defaultOptions, opts)\n opts.serializers = Object.assign({}, defaultOptions.serializers, opts.serializers)\n opts.formatters = Object.assign({}, defaultOptions.formatters, opts.formatters)\n\n if (opts.prettyPrint) {\n throw new Error('prettyPrint option is no longer supported, see the pino-pretty package (https://github.com/pinojs/pino-pretty)')\n }\n\n const { enabled, onChild } = opts\n if (enabled === false) opts.level = 'silent'\n if (!onChild) opts.onChild = noop\n if (!stream) {\n if (!hasBeenTampered(process.stdout)) {\n // If process.stdout.fd is undefined, it means that we are running\n // in a worker thread. Let's assume we are logging to file descriptor 1.\n stream = buildSafeSonicBoom({ fd: process.stdout.fd || 1 })\n } else {\n stream = process.stdout\n }\n }\n return { opts, stream }\n }\n}\n\nfunction stringify (obj, stringifySafeFn) {\n try {\n return JSON.stringify(obj)\n } catch (_) {\n try {\n const stringify = stringifySafeFn || this[stringifySafeSym]\n return stringify(obj)\n } catch (_) {\n return '\"[unable to serialize, circular reference is too complex to analyze]\"'\n }\n }\n}\n\nfunction buildFormatters (level, bindings, log) {\n return {\n level,\n bindings,\n log\n }\n}\n\n/**\n * Convert a string integer file descriptor to a proper native integer\n * file descriptor.\n *\n * @param {string} destination The file descriptor string to attempt to convert.\n *\n * @returns {Number}\n */\nfunction normalizeDestFileDescriptor (destination) {\n const fd = Number(destination)\n if (typeof destination === 'string' && Number.isFinite(fd)) {\n return fd\n }\n // destination could be undefined if we are in a worker\n if (destination === undefined) {\n // This is stdout in UNIX systems\n return 1\n }\n return destination\n}\n\nmodule.exports = {\n noop,\n buildSafeSonicBoom,\n asChindings,\n asJson,\n genLog,\n createArgsNormalizer,\n stringify,\n buildFormatters,\n normalizeDestFileDescriptor\n}\n",
|
|
27
|
+
"/**\n * Represents default log level values\n *\n * @enum {number}\n */\nconst DEFAULT_LEVELS = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60\n}\n\n/**\n * Represents sort order direction: `ascending` or `descending`\n *\n * @enum {string}\n */\nconst SORTING_ORDER = {\n ASC: 'ASC',\n DESC: 'DESC'\n}\n\nmodule.exports = {\n DEFAULT_LEVELS,\n SORTING_ORDER\n}\n",
|
|
28
|
+
"'use strict'\n/* eslint no-prototype-builtins: 0 */\nconst {\n lsCacheSym,\n levelValSym,\n useOnlyCustomLevelsSym,\n streamSym,\n formattersSym,\n hooksSym,\n levelCompSym\n} = require('./symbols')\nconst { noop, genLog } = require('./tools')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./constants')\n\nconst levelMethods = {\n fatal: (hook) => {\n const logFatal = genLog(DEFAULT_LEVELS.fatal, hook)\n return function (...args) {\n const stream = this[streamSym]\n logFatal.call(this, ...args)\n if (typeof stream.flushSync === 'function') {\n try {\n stream.flushSync()\n } catch (e) {\n // https://github.com/pinojs/pino/pull/740#discussion_r346788313\n }\n }\n }\n },\n error: (hook) => genLog(DEFAULT_LEVELS.error, hook),\n warn: (hook) => genLog(DEFAULT_LEVELS.warn, hook),\n info: (hook) => genLog(DEFAULT_LEVELS.info, hook),\n debug: (hook) => genLog(DEFAULT_LEVELS.debug, hook),\n trace: (hook) => genLog(DEFAULT_LEVELS.trace, hook)\n}\n\nconst nums = Object.keys(DEFAULT_LEVELS).reduce((o, k) => {\n o[DEFAULT_LEVELS[k]] = k\n return o\n}, {})\n\nconst initialLsCache = Object.keys(nums).reduce((o, k) => {\n o[k] = '{\"level\":' + Number(k)\n return o\n}, {})\n\nfunction genLsCache (instance) {\n const formatter = instance[formattersSym].level\n const { labels } = instance.levels\n const cache = {}\n for (const label in labels) {\n const level = formatter(labels[label], Number(label))\n cache[label] = JSON.stringify(level).slice(0, -1)\n }\n instance[lsCacheSym] = cache\n return instance\n}\n\nfunction isStandardLevel (level, useOnlyCustomLevels) {\n if (useOnlyCustomLevels) {\n return false\n }\n\n switch (level) {\n case 'fatal':\n case 'error':\n case 'warn':\n case 'info':\n case 'debug':\n case 'trace':\n return true\n default:\n return false\n }\n}\n\nfunction setLevel (level) {\n const { labels, values } = this.levels\n if (typeof level === 'number') {\n if (labels[level] === undefined) throw Error('unknown level value' + level)\n level = labels[level]\n }\n if (values[level] === undefined) throw Error('unknown level ' + level)\n const preLevelVal = this[levelValSym]\n const levelVal = this[levelValSym] = values[level]\n const useOnlyCustomLevelsVal = this[useOnlyCustomLevelsSym]\n const levelComparison = this[levelCompSym]\n const hook = this[hooksSym].logMethod\n\n for (const key in values) {\n if (levelComparison(values[key], levelVal) === false) {\n this[key] = noop\n continue\n }\n this[key] = isStandardLevel(key, useOnlyCustomLevelsVal) ? levelMethods[key](hook) : genLog(values[key], hook)\n }\n\n this.emit(\n 'level-change',\n level,\n levelVal,\n labels[preLevelVal],\n preLevelVal,\n this\n )\n}\n\nfunction getLevel (level) {\n const { levels, levelVal } = this\n // protection against potential loss of Pino scope from serializers (edge case with circular refs - https://github.com/pinojs/pino/issues/833)\n return (levels && levels.labels) ? levels.labels[levelVal] : ''\n}\n\nfunction isLevelEnabled (logLevel) {\n const { values } = this.levels\n const logLevelVal = values[logLevel]\n return logLevelVal !== undefined && this[levelCompSym](logLevelVal, this[levelValSym])\n}\n\n/**\n * Determine if the given `current` level is enabled by comparing it\n * against the current threshold (`expected`).\n *\n * @param {SORTING_ORDER} direction comparison direction \"ASC\" or \"DESC\"\n * @param {number} current current log level number representation\n * @param {number} expected threshold value to compare with\n * @returns {boolean}\n */\nfunction compareLevel (direction, current, expected) {\n if (direction === SORTING_ORDER.DESC) {\n return current <= expected\n }\n\n return current >= expected\n}\n\n/**\n * Create a level comparison function based on `levelComparison`\n * it could a default function which compares levels either in \"ascending\" or \"descending\" order or custom comparison function\n *\n * @param {SORTING_ORDER | Function} levelComparison sort levels order direction or custom comparison function\n * @returns Function\n */\nfunction genLevelComparison (levelComparison) {\n if (typeof levelComparison === 'string') {\n return compareLevel.bind(null, levelComparison)\n }\n\n return levelComparison\n}\n\nfunction mappings (customLevels = null, useOnlyCustomLevels = false) {\n const customNums = customLevels\n /* eslint-disable */\n ? Object.keys(customLevels).reduce((o, k) => {\n o[customLevels[k]] = k\n return o\n }, {})\n : null\n /* eslint-enable */\n\n const labels = Object.assign(\n Object.create(Object.prototype, { Infinity: { value: 'silent' } }),\n useOnlyCustomLevels ? null : nums,\n customNums\n )\n const values = Object.assign(\n Object.create(Object.prototype, { silent: { value: Infinity } }),\n useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n customLevels\n )\n return { labels, values }\n}\n\nfunction assertDefaultLevelFound (defaultLevel, customLevels, useOnlyCustomLevels) {\n if (typeof defaultLevel === 'number') {\n const values = [].concat(\n Object.keys(customLevels || {}).map(key => customLevels[key]),\n useOnlyCustomLevels ? [] : Object.keys(nums).map(level => +level),\n Infinity\n )\n if (!values.includes(defaultLevel)) {\n throw Error(`default level:${defaultLevel} must be included in custom levels`)\n }\n return\n }\n\n const labels = Object.assign(\n Object.create(Object.prototype, { silent: { value: Infinity } }),\n useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n customLevels\n )\n if (!(defaultLevel in labels)) {\n throw Error(`default level:${defaultLevel} must be included in custom levels`)\n }\n}\n\nfunction assertNoLevelCollisions (levels, customLevels) {\n const { labels, values } = levels\n for (const k in customLevels) {\n if (k in values) {\n throw Error('levels cannot be overridden')\n }\n if (customLevels[k] in labels) {\n throw Error('pre-existing level values cannot be used for new levels')\n }\n }\n}\n\n/**\n * Validates whether `levelComparison` is correct\n *\n * @throws Error\n * @param {SORTING_ORDER | Function} levelComparison - value to validate\n * @returns\n */\nfunction assertLevelComparison (levelComparison) {\n if (typeof levelComparison === 'function') {\n return\n }\n\n if (typeof levelComparison === 'string' && Object.values(SORTING_ORDER).includes(levelComparison)) {\n return\n }\n\n throw new Error('Levels comparison should be one of \"ASC\", \"DESC\" or \"function\" type')\n}\n\nmodule.exports = {\n initialLsCache,\n genLsCache,\n levelMethods,\n getLevel,\n setLevel,\n isLevelEnabled,\n mappings,\n assertNoLevelCollisions,\n assertDefaultLevelFound,\n genLevelComparison,\n assertLevelComparison\n}\n",
|
|
29
|
+
"'use strict'\n\nmodule.exports = { version: '10.1.0' }\n",
|
|
30
|
+
"'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst { EventEmitter } = require('node:events')\nconst {\n lsCacheSym,\n levelValSym,\n setLevelSym,\n getLevelSym,\n chindingsSym,\n mixinSym,\n asJsonSym,\n writeSym,\n mixinMergeStrategySym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n serializersSym,\n formattersSym,\n errorKeySym,\n messageKeySym,\n useOnlyCustomLevelsSym,\n needsMetadataGsym,\n redactFmtSym,\n stringifySym,\n formatOptsSym,\n stringifiersSym,\n msgPrefixSym,\n hooksSym\n} = require('./symbols')\nconst {\n getLevel,\n setLevel,\n isLevelEnabled,\n mappings,\n initialLsCache,\n genLsCache,\n assertNoLevelCollisions\n} = require('./levels')\nconst {\n asChindings,\n asJson,\n buildFormatters,\n stringify,\n noop\n} = require('./tools')\nconst {\n version\n} = require('./meta')\nconst redaction = require('./redaction')\n\n// note: use of class is satirical\n// https://github.com/pinojs/pino/pull/433#pullrequestreview-127703127\nconst constructor = class Pino {}\nconst prototype = {\n constructor,\n child,\n bindings,\n setBindings,\n flush,\n isLevelEnabled,\n version,\n get level () { return this[getLevelSym]() },\n set level (lvl) { this[setLevelSym](lvl) },\n get levelVal () { return this[levelValSym] },\n set levelVal (n) { throw Error('levelVal is read-only') },\n get msgPrefix () { return this[msgPrefixSym] },\n get [Symbol.toStringTag] () { return 'Pino' },\n [lsCacheSym]: initialLsCache,\n [writeSym]: write,\n [asJsonSym]: asJson,\n [getLevelSym]: getLevel,\n [setLevelSym]: setLevel\n}\n\nObject.setPrototypeOf(prototype, EventEmitter.prototype)\n\n// exporting and consuming the prototype object using factory pattern fixes scoping issues with getters when serializing\nmodule.exports = function () {\n return Object.create(prototype)\n}\n\nconst resetChildingsFormatter = bindings => bindings\nfunction child (bindings, options) {\n if (!bindings) {\n throw Error('missing bindings for child Pino')\n }\n const serializers = this[serializersSym]\n const formatters = this[formattersSym]\n const instance = Object.create(this)\n\n // If an `options` object was not supplied, we can improve\n // the performance of child creation by skipping\n // the checks for set options and simply return\n // a baseline instance.\n if (options == null) {\n if (instance[formattersSym].bindings !== resetChildingsFormatter) {\n instance[formattersSym] = buildFormatters(\n formatters.level,\n resetChildingsFormatter,\n formatters.log\n )\n }\n\n instance[chindingsSym] = asChindings(instance, bindings)\n\n if (this.onChild !== noop) {\n this.onChild(instance)\n }\n\n return instance\n }\n\n if (options.hasOwnProperty('serializers') === true) {\n instance[serializersSym] = Object.create(null)\n\n for (const k in serializers) {\n instance[serializersSym][k] = serializers[k]\n }\n const parentSymbols = Object.getOwnPropertySymbols(serializers)\n /* eslint no-var: off */\n for (var i = 0; i < parentSymbols.length; i++) {\n const ks = parentSymbols[i]\n instance[serializersSym][ks] = serializers[ks]\n }\n\n for (const bk in options.serializers) {\n instance[serializersSym][bk] = options.serializers[bk]\n }\n const bindingsSymbols = Object.getOwnPropertySymbols(options.serializers)\n for (var bi = 0; bi < bindingsSymbols.length; bi++) {\n const bks = bindingsSymbols[bi]\n instance[serializersSym][bks] = options.serializers[bks]\n }\n } else instance[serializersSym] = serializers\n if (options.hasOwnProperty('formatters')) {\n const { level, bindings: chindings, log } = options.formatters\n instance[formattersSym] = buildFormatters(\n level || formatters.level,\n chindings || resetChildingsFormatter,\n log || formatters.log\n )\n } else {\n instance[formattersSym] = buildFormatters(\n formatters.level,\n resetChildingsFormatter,\n formatters.log\n )\n }\n if (options.hasOwnProperty('customLevels') === true) {\n assertNoLevelCollisions(this.levels, options.customLevels)\n instance.levels = mappings(options.customLevels, instance[useOnlyCustomLevelsSym])\n genLsCache(instance)\n }\n\n // redact must place before asChindings and only replace if exist\n if ((typeof options.redact === 'object' && options.redact !== null) || Array.isArray(options.redact)) {\n instance.redact = options.redact // replace redact directly\n const stringifiers = redaction(instance.redact, stringify)\n const formatOpts = { stringify: stringifiers[redactFmtSym] }\n instance[stringifySym] = stringify\n instance[stringifiersSym] = stringifiers\n instance[formatOptsSym] = formatOpts\n }\n\n if (typeof options.msgPrefix === 'string') {\n instance[msgPrefixSym] = (this[msgPrefixSym] || '') + options.msgPrefix\n }\n\n instance[chindingsSym] = asChindings(instance, bindings)\n if ((options.level !== undefined && options.level !== this.level) || options.hasOwnProperty('customLevels')) {\n const childLevel = options.level || this.level\n instance[setLevelSym](childLevel)\n }\n this.onChild(instance)\n return instance\n}\n\nfunction bindings () {\n const chindings = this[chindingsSym]\n const chindingsJson = `{${chindings.substr(1)}}` // at least contains ,\"pid\":7068,\"hostname\":\"myMac\"\n const bindingsFromJson = JSON.parse(chindingsJson)\n delete bindingsFromJson.pid\n delete bindingsFromJson.hostname\n return bindingsFromJson\n}\n\nfunction setBindings (newBindings) {\n const chindings = asChindings(this, newBindings)\n this[chindingsSym] = chindings\n}\n\n/**\n * Default strategy for creating `mergeObject` from arguments and the result from `mixin()`.\n * Fields from `mergeObject` have higher priority in this strategy.\n *\n * @param {Object} mergeObject The object a user has supplied to the logging function.\n * @param {Object} mixinObject The result of the `mixin` method.\n * @return {Object}\n */\nfunction defaultMixinMergeStrategy (mergeObject, mixinObject) {\n return Object.assign(mixinObject, mergeObject)\n}\n\nfunction write (_obj, msg, num) {\n const t = this[timeSym]()\n const mixin = this[mixinSym]\n const errorKey = this[errorKeySym]\n const messageKey = this[messageKeySym]\n const mixinMergeStrategy = this[mixinMergeStrategySym] || defaultMixinMergeStrategy\n let obj\n const streamWriteHook = this[hooksSym].streamWrite\n\n if (_obj === undefined || _obj === null) {\n obj = {}\n } else if (_obj instanceof Error) {\n obj = { [errorKey]: _obj }\n if (msg === undefined) {\n msg = _obj.message\n }\n } else {\n obj = _obj\n if (msg === undefined && _obj[messageKey] === undefined && _obj[errorKey]) {\n msg = _obj[errorKey].message\n }\n }\n\n if (mixin) {\n obj = mixinMergeStrategy(obj, mixin(obj, num, this))\n }\n\n const s = this[asJsonSym](obj, msg, num, t)\n\n const stream = this[streamSym]\n if (stream[needsMetadataGsym] === true) {\n stream.lastLevel = num\n stream.lastObj = obj\n stream.lastMsg = msg\n stream.lastTime = t.slice(this[timeSliceIndexSym])\n stream.lastLogger = this // for child loggers\n }\n stream.write(streamWriteHook ? streamWriteHook(s) : s)\n}\n\nfunction flush (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw Error('callback must be a function')\n }\n\n const stream = this[streamSym]\n\n if (typeof stream.flush === 'function') {\n stream.flush(cb || noop)\n } else if (cb) cb()\n}\n",
|
|
31
|
+
"'use strict'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst stringify = configure()\n\n// @ts-expect-error\nstringify.configure = configure\n// @ts-expect-error\nstringify.stringify = stringify\n\n// @ts-expect-error\nstringify.default = stringify\n\n// @ts-expect-error used for named export\nexports.stringify = stringify\n// @ts-expect-error used for named export\nexports.configure = configure\n\nmodule.exports = stringify\n\n// eslint-disable-next-line no-control-regex\nconst strEscapeSequencesRegExp = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/\n\n// Escape C0 control characters, double quotes, the backslash and every code\n// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF.\nfunction strEscape (str) {\n // Some magic numbers that worked out fine while benchmarking with v8 8.0\n if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) {\n return `\"${str}\"`\n }\n return JSON.stringify(str)\n}\n\nfunction sort (array, comparator) {\n // Insertion sort is very efficient for small input sizes, but it has a bad\n // worst case complexity. Thus, use native array sort for bigger values.\n if (array.length > 2e2 || comparator) {\n return array.sort(comparator)\n }\n for (let i = 1; i < array.length; i++) {\n const currentValue = array[i]\n let position = i\n while (position !== 0 && array[position - 1] > currentValue) {\n array[position] = array[position - 1]\n position--\n }\n array[position] = currentValue\n }\n return array\n}\n\nconst typedArrayPrototypeGetSymbolToStringTag =\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(\n Object.getPrototypeOf(\n new Int8Array()\n )\n ),\n Symbol.toStringTag\n ).get\n\nfunction isTypedArrayWithEntries (value) {\n return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0\n}\n\nfunction stringifyTypedArray (array, separator, maximumBreadth) {\n if (array.length < maximumBreadth) {\n maximumBreadth = array.length\n }\n const whitespace = separator === ',' ? '' : ' '\n let res = `\"0\":${whitespace}${array[0]}`\n for (let i = 1; i < maximumBreadth; i++) {\n res += `${separator}\"${i}\":${whitespace}${array[i]}`\n }\n return res\n}\n\nfunction getCircularValueOption (options) {\n if (hasOwnProperty.call(options, 'circularValue')) {\n const circularValue = options.circularValue\n if (typeof circularValue === 'string') {\n return `\"${circularValue}\"`\n }\n if (circularValue == null) {\n return circularValue\n }\n if (circularValue === Error || circularValue === TypeError) {\n return {\n toString () {\n throw new TypeError('Converting circular structure to JSON')\n }\n }\n }\n throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')\n }\n return '\"[Circular]\"'\n}\n\nfunction getDeterministicOption (options) {\n let value\n if (hasOwnProperty.call(options, 'deterministic')) {\n value = options.deterministic\n if (typeof value !== 'boolean' && typeof value !== 'function') {\n throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getBooleanOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'boolean') {\n throw new TypeError(`The \"${key}\" argument must be of type boolean`)\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getPositiveIntegerOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'number') {\n throw new TypeError(`The \"${key}\" argument must be of type number`)\n }\n if (!Number.isInteger(value)) {\n throw new TypeError(`The \"${key}\" argument must be an integer`)\n }\n if (value < 1) {\n throw new RangeError(`The \"${key}\" argument must be >= 1`)\n }\n }\n return value === undefined ? Infinity : value\n}\n\nfunction getItemCount (number) {\n if (number === 1) {\n return '1 item'\n }\n return `${number} items`\n}\n\nfunction getUniqueReplacerSet (replacerArray) {\n const replacerSet = new Set()\n for (const value of replacerArray) {\n if (typeof value === 'string' || typeof value === 'number') {\n replacerSet.add(String(value))\n }\n }\n return replacerSet\n}\n\nfunction getStrictOption (options) {\n if (hasOwnProperty.call(options, 'strict')) {\n const value = options.strict\n if (typeof value !== 'boolean') {\n throw new TypeError('The \"strict\" argument must be of type boolean')\n }\n if (value) {\n return (value) => {\n let message = `Object can not safely be stringified. Received type ${typeof value}`\n if (typeof value !== 'function') message += ` (${value.toString()})`\n throw new Error(message)\n }\n }\n }\n}\n\nfunction configure (options) {\n options = { ...options }\n const fail = getStrictOption(options)\n if (fail) {\n if (options.bigint === undefined) {\n options.bigint = false\n }\n if (!('circularValue' in options)) {\n options.circularValue = Error\n }\n }\n const circularValue = getCircularValueOption(options)\n const bigint = getBooleanOption(options, 'bigint')\n const deterministic = getDeterministicOption(options)\n const comparator = typeof deterministic === 'function' ? deterministic : undefined\n const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth')\n const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth')\n\n function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) {\n let value = parent[key]\n\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n value = replacer.call(parent, key, value)\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n let join = ','\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let whitespace = ''\n let separator = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (deterministic && !isTypedArrayWithEntries(value)) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":${whitespace}\"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) {\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n const originalIndentation = indentation\n let res = ''\n let join = ','\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n stack.push(value)\n let whitespace = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n let separator = ''\n for (const key of replacer) {\n const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyIndent (key, value, stack, spacer, indentation) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again.\n if (typeof value !== 'object') {\n return stringifyIndent(key, value, stack, spacer, indentation)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n indentation += spacer\n let res = `\\n${indentation}`\n const join = `,\\n${indentation}`\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n res += `\\n${originalIndentation}`\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n indentation += spacer\n const join = `,\\n${indentation}`\n let res = ''\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, join, maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = join\n }\n if (deterministic) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyIndent(key, value[key], stack, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}: ${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\": \"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (separator !== '') {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifySimple (key, value, stack) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again\n if (typeof value !== 'object') {\n return stringifySimple(key, value, stack)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n\n const hasLength = value.length !== undefined\n if (hasLength && Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n res += ','\n }\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `,\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (hasLength && isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, ',', maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = ','\n }\n if (deterministic) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifySimple(key, value[key], stack)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${tmp}`\n separator = ','\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":\"${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringify (value, replacer, space) {\n if (arguments.length > 1) {\n let spacer = ''\n if (typeof space === 'number') {\n spacer = ' '.repeat(Math.min(space, 10))\n } else if (typeof space === 'string') {\n spacer = space.slice(0, 10)\n }\n if (replacer != null) {\n if (typeof replacer === 'function') {\n return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '')\n }\n if (Array.isArray(replacer)) {\n return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '')\n }\n }\n if (spacer.length !== 0) {\n return stringifyIndent('', value, [], spacer, '')\n }\n }\n return stringifySimple('', value, [])\n }\n\n return stringify\n}\n",
|
|
32
|
+
"'use strict'\n\nconst metadata = Symbol.for('pino.metadata')\nconst { DEFAULT_LEVELS } = require('./constants')\n\nconst DEFAULT_INFO_LEVEL = DEFAULT_LEVELS.info\n\nfunction multistream (streamsArray, opts) {\n streamsArray = streamsArray || []\n opts = opts || { dedupe: false }\n\n const streamLevels = Object.create(DEFAULT_LEVELS)\n streamLevels.silent = Infinity\n if (opts.levels && typeof opts.levels === 'object') {\n Object.keys(opts.levels).forEach(i => {\n streamLevels[i] = opts.levels[i]\n })\n }\n\n const res = {\n write,\n add,\n remove,\n emit,\n flushSync,\n end,\n minLevel: 0,\n lastId: 0,\n streams: [],\n clone,\n [metadata]: true,\n streamLevels\n }\n\n if (Array.isArray(streamsArray)) {\n streamsArray.forEach(add, res)\n } else {\n add.call(res, streamsArray)\n }\n\n // clean this object up\n // or it will stay allocated forever\n // as it is closed on the following closures\n streamsArray = null\n\n return res\n\n // we can exit early because the streams are ordered by level\n function write (data) {\n let dest\n const level = this.lastLevel\n const { streams } = this\n // for handling situation when several streams has the same level\n let recordedLevel = 0\n let stream\n\n // if dedupe set to true we send logs to the stream with the highest level\n // therefore, we have to change sorting order\n for (let i = initLoopVar(streams.length, opts.dedupe); checkLoopVar(i, streams.length, opts.dedupe); i = adjustLoopVar(i, opts.dedupe)) {\n dest = streams[i]\n if (dest.level <= level) {\n if (recordedLevel !== 0 && recordedLevel !== dest.level) {\n break\n }\n stream = dest.stream\n if (stream[metadata]) {\n const { lastTime, lastMsg, lastObj, lastLogger } = this\n stream.lastLevel = level\n stream.lastTime = lastTime\n stream.lastMsg = lastMsg\n stream.lastObj = lastObj\n stream.lastLogger = lastLogger\n }\n stream.write(data)\n if (opts.dedupe) {\n recordedLevel = dest.level\n }\n } else if (!opts.dedupe) {\n break\n }\n }\n }\n\n function emit (...args) {\n for (const { stream } of this.streams) {\n if (typeof stream.emit === 'function') {\n stream.emit(...args)\n }\n }\n }\n\n function flushSync () {\n for (const { stream } of this.streams) {\n if (typeof stream.flushSync === 'function') {\n stream.flushSync()\n }\n }\n }\n\n function add (dest) {\n if (!dest) {\n return res\n }\n\n // Check that dest implements either StreamEntry or DestinationStream\n const isStream = typeof dest.write === 'function' || dest.stream\n const stream_ = dest.write ? dest : dest.stream\n // This is necessary to provide a meaningful error message, otherwise it throws somewhere inside write()\n if (!isStream) {\n throw Error('stream object needs to implement either StreamEntry or DestinationStream interface')\n }\n\n const { streams, streamLevels } = this\n\n let level\n if (typeof dest.levelVal === 'number') {\n level = dest.levelVal\n } else if (typeof dest.level === 'string') {\n level = streamLevels[dest.level]\n } else if (typeof dest.level === 'number') {\n level = dest.level\n } else {\n level = DEFAULT_INFO_LEVEL\n }\n\n const dest_ = {\n stream: stream_,\n level,\n levelVal: undefined,\n id: ++res.lastId\n }\n\n streams.unshift(dest_)\n streams.sort(compareByLevel)\n\n this.minLevel = streams[0].level\n\n return res\n }\n\n function remove (id) {\n const { streams } = this\n const index = streams.findIndex(s => s.id === id)\n\n if (index >= 0) {\n streams.splice(index, 1)\n streams.sort(compareByLevel)\n this.minLevel = streams.length > 0 ? streams[0].level : -1\n }\n\n return res\n }\n\n function end () {\n for (const { stream } of this.streams) {\n if (typeof stream.flushSync === 'function') {\n stream.flushSync()\n }\n stream.end()\n }\n }\n\n function clone (level) {\n const streams = new Array(this.streams.length)\n\n for (let i = 0; i < streams.length; i++) {\n streams[i] = {\n level,\n stream: this.streams[i].stream\n }\n }\n\n return {\n write,\n add,\n remove,\n minLevel: level,\n streams,\n clone,\n emit,\n flushSync,\n [metadata]: true\n }\n }\n}\n\nfunction compareByLevel (a, b) {\n return a.level - b.level\n}\n\nfunction initLoopVar (length, dedupe) {\n return dedupe ? length - 1 : 0\n}\n\nfunction adjustLoopVar (i, dedupe) {\n return dedupe ? i - 1 : i + 1\n}\n\nfunction checkLoopVar (i, length, dedupe) {\n return dedupe ? i >= 0 : i < length\n}\n\nmodule.exports = multistream\n",
|
|
33
|
+
"'use strict'\n\nconst os = require('node:os')\nconst stdSerializers = require('pino-std-serializers')\nconst caller = require('./lib/caller')\nconst redaction = require('./lib/redaction')\nconst time = require('./lib/time')\nconst proto = require('./lib/proto')\nconst symbols = require('./lib/symbols')\nconst { configure } = require('safe-stable-stringify')\nconst { assertDefaultLevelFound, mappings, genLsCache, genLevelComparison, assertLevelComparison } = require('./lib/levels')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./lib/constants')\nconst {\n createArgsNormalizer,\n asChindings,\n buildSafeSonicBoom,\n buildFormatters,\n stringify,\n normalizeDestFileDescriptor,\n noop\n} = require('./lib/tools')\nconst { version } = require('./lib/meta')\nconst {\n chindingsSym,\n redactFmtSym,\n serializersSym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n stringifySym,\n stringifySafeSym,\n stringifiersSym,\n setLevelSym,\n endSym,\n formatOptsSym,\n messageKeySym,\n errorKeySym,\n nestedKeySym,\n mixinSym,\n levelCompSym,\n useOnlyCustomLevelsSym,\n formattersSym,\n hooksSym,\n nestedKeyStrSym,\n mixinMergeStrategySym,\n msgPrefixSym\n} = symbols\nconst { epochTime, nullTime } = time\nconst { pid } = process\nconst hostname = os.hostname()\nconst defaultErrorSerializer = stdSerializers.err\nconst defaultOptions = {\n level: 'info',\n levelComparison: SORTING_ORDER.ASC,\n levels: DEFAULT_LEVELS,\n messageKey: 'msg',\n errorKey: 'err',\n nestedKey: null,\n enabled: true,\n base: { pid, hostname },\n serializers: Object.assign(Object.create(null), {\n err: defaultErrorSerializer\n }),\n formatters: Object.assign(Object.create(null), {\n bindings (bindings) {\n return bindings\n },\n level (label, number) {\n return { level: number }\n }\n }),\n hooks: {\n logMethod: undefined,\n streamWrite: undefined\n },\n timestamp: epochTime,\n name: undefined,\n redact: null,\n customLevels: null,\n useOnlyCustomLevels: false,\n depthLimit: 5,\n edgeLimit: 100\n}\n\nconst normalize = createArgsNormalizer(defaultOptions)\n\nconst serializers = Object.assign(Object.create(null), stdSerializers)\n\nfunction pino (...args) {\n const instance = {}\n const { opts, stream } = normalize(instance, caller(), ...args)\n\n if (opts.level && typeof opts.level === 'string' && DEFAULT_LEVELS[opts.level.toLowerCase()] !== undefined) opts.level = opts.level.toLowerCase()\n\n const {\n redact,\n crlf,\n serializers,\n timestamp,\n messageKey,\n errorKey,\n nestedKey,\n base,\n name,\n level,\n customLevels,\n levelComparison,\n mixin,\n mixinMergeStrategy,\n useOnlyCustomLevels,\n formatters,\n hooks,\n depthLimit,\n edgeLimit,\n onChild,\n msgPrefix\n } = opts\n\n const stringifySafe = configure({\n maximumDepth: depthLimit,\n maximumBreadth: edgeLimit\n })\n\n const allFormatters = buildFormatters(\n formatters.level,\n formatters.bindings,\n formatters.log\n )\n\n const stringifyFn = stringify.bind({\n [stringifySafeSym]: stringifySafe\n })\n const stringifiers = redact ? redaction(redact, stringifyFn) : {}\n const formatOpts = redact\n ? { stringify: stringifiers[redactFmtSym] }\n : { stringify: stringifyFn }\n const end = '}' + (crlf ? '\\r\\n' : '\\n')\n const coreChindings = asChindings.bind(null, {\n [chindingsSym]: '',\n [serializersSym]: serializers,\n [stringifiersSym]: stringifiers,\n [stringifySym]: stringify,\n [stringifySafeSym]: stringifySafe,\n [formattersSym]: allFormatters\n })\n\n let chindings = ''\n if (base !== null) {\n if (name === undefined) {\n chindings = coreChindings(base)\n } else {\n chindings = coreChindings(Object.assign({}, base, { name }))\n }\n }\n\n const time = (timestamp instanceof Function)\n ? timestamp\n : (timestamp ? epochTime : nullTime)\n const timeSliceIndex = time().indexOf(':') + 1\n\n if (useOnlyCustomLevels && !customLevels) throw Error('customLevels is required if useOnlyCustomLevels is set true')\n if (mixin && typeof mixin !== 'function') throw Error(`Unknown mixin type \"${typeof mixin}\" - expected \"function\"`)\n if (msgPrefix && typeof msgPrefix !== 'string') throw Error(`Unknown msgPrefix type \"${typeof msgPrefix}\" - expected \"string\"`)\n\n assertDefaultLevelFound(level, customLevels, useOnlyCustomLevels)\n const levels = mappings(customLevels, useOnlyCustomLevels)\n\n if (typeof stream.emit === 'function') {\n stream.emit('message', { code: 'PINO_CONFIG', config: { levels, messageKey, errorKey } })\n }\n\n assertLevelComparison(levelComparison)\n const levelCompFunc = genLevelComparison(levelComparison)\n\n Object.assign(instance, {\n levels,\n [levelCompSym]: levelCompFunc,\n [useOnlyCustomLevelsSym]: useOnlyCustomLevels,\n [streamSym]: stream,\n [timeSym]: time,\n [timeSliceIndexSym]: timeSliceIndex,\n [stringifySym]: stringify,\n [stringifySafeSym]: stringifySafe,\n [stringifiersSym]: stringifiers,\n [endSym]: end,\n [formatOptsSym]: formatOpts,\n [messageKeySym]: messageKey,\n [errorKeySym]: errorKey,\n [nestedKeySym]: nestedKey,\n // protect against injection\n [nestedKeyStrSym]: nestedKey ? `,${JSON.stringify(nestedKey)}:{` : '',\n [serializersSym]: serializers,\n [mixinSym]: mixin,\n [mixinMergeStrategySym]: mixinMergeStrategy,\n [chindingsSym]: chindings,\n [formattersSym]: allFormatters,\n [hooksSym]: hooks,\n silent: noop,\n onChild,\n [msgPrefixSym]: msgPrefix\n })\n\n Object.setPrototypeOf(instance, proto())\n\n genLsCache(instance)\n\n instance[setLevelSym](level)\n\n return instance\n}\n\nmodule.exports = pino\n\nmodule.exports.destination = (dest = process.stdout.fd) => {\n if (typeof dest === 'object') {\n dest.dest = normalizeDestFileDescriptor(dest.dest || process.stdout.fd)\n return buildSafeSonicBoom(dest)\n } else {\n return buildSafeSonicBoom({ dest: normalizeDestFileDescriptor(dest), minLength: 0 })\n }\n}\n\nmodule.exports.transport = require('./lib/transport')\nmodule.exports.multistream = require('./lib/multistream')\n\nmodule.exports.levels = mappings()\nmodule.exports.stdSerializers = serializers\nmodule.exports.stdTimeFunctions = Object.assign({}, time)\nmodule.exports.symbols = symbols\nmodule.exports.version = version\n\n// Enables default and name export with TypeScript and Babel\nmodule.exports.default = pino\nmodule.exports.pino = pino\n",
|
|
34
|
+
"'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar tty = require('tty');\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar tty__namespace = /*#__PURE__*/_interopNamespace(tty);\n\nconst {\n env = {},\n argv = [],\n platform = \"\",\n} = typeof process === \"undefined\" ? {} : process;\n\nconst isDisabled = \"NO_COLOR\" in env || argv.includes(\"--no-color\");\nconst isForced = \"FORCE_COLOR\" in env || argv.includes(\"--color\");\nconst isWindows = platform === \"win32\";\nconst isDumbTerminal = env.TERM === \"dumb\";\n\nconst isCompatibleTerminal =\n tty__namespace && tty__namespace.isatty && tty__namespace.isatty(1) && env.TERM && !isDumbTerminal;\n\nconst isCI =\n \"CI\" in env &&\n (\"GITHUB_ACTIONS\" in env || \"GITLAB_CI\" in env || \"CIRCLECI\" in env);\n\nconst isColorSupported =\n !isDisabled &&\n (isForced || (isWindows && !isDumbTerminal) || isCompatibleTerminal || isCI);\n\nconst replaceClose = (\n index,\n string,\n close,\n replace,\n head = string.substring(0, index) + replace,\n tail = string.substring(index + close.length),\n next = tail.indexOf(close)\n) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace));\n\nconst clearBleed = (index, string, open, close, replace) =>\n index < 0\n ? open + string + close\n : open + replaceClose(index, string, close, replace) + close;\n\nconst filterEmpty =\n (open, close, replace = open, at = open.length + 1) =>\n (string) =>\n string || !(string === \"\" || string === undefined)\n ? clearBleed(\n (\"\" + string).indexOf(close, at),\n string,\n open,\n close,\n replace\n )\n : \"\";\n\nconst init = (open, close, replace) =>\n filterEmpty(`\\x1b[${open}m`, `\\x1b[${close}m`, replace);\n\nconst colors = {\n reset: init(0, 0),\n bold: init(1, 22, \"\\x1b[22m\\x1b[1m\"),\n dim: init(2, 22, \"\\x1b[22m\\x1b[2m\"),\n italic: init(3, 23),\n underline: init(4, 24),\n inverse: init(7, 27),\n hidden: init(8, 28),\n strikethrough: init(9, 29),\n black: init(30, 39),\n red: init(31, 39),\n green: init(32, 39),\n yellow: init(33, 39),\n blue: init(34, 39),\n magenta: init(35, 39),\n cyan: init(36, 39),\n white: init(37, 39),\n gray: init(90, 39),\n bgBlack: init(40, 49),\n bgRed: init(41, 49),\n bgGreen: init(42, 49),\n bgYellow: init(43, 49),\n bgBlue: init(44, 49),\n bgMagenta: init(45, 49),\n bgCyan: init(46, 49),\n bgWhite: init(47, 49),\n blackBright: init(90, 39),\n redBright: init(91, 39),\n greenBright: init(92, 39),\n yellowBright: init(93, 39),\n blueBright: init(94, 39),\n magentaBright: init(95, 39),\n cyanBright: init(96, 39),\n whiteBright: init(97, 39),\n bgBlackBright: init(100, 49),\n bgRedBright: init(101, 49),\n bgGreenBright: init(102, 49),\n bgYellowBright: init(103, 49),\n bgBlueBright: init(104, 49),\n bgMagentaBright: init(105, 49),\n bgCyanBright: init(106, 49),\n bgWhiteBright: init(107, 49),\n};\n\nconst createColors = ({ useColor = isColorSupported } = {}) =>\n useColor\n ? colors\n : Object.keys(colors).reduce(\n (colors, key) => ({ ...colors, [key]: String }),\n {}\n );\n\nconst {\n reset,\n bold,\n dim,\n italic,\n underline,\n inverse,\n hidden,\n strikethrough,\n black,\n red,\n green,\n yellow,\n blue,\n magenta,\n cyan,\n white,\n gray,\n bgBlack,\n bgRed,\n bgGreen,\n bgYellow,\n bgBlue,\n bgMagenta,\n bgCyan,\n bgWhite,\n blackBright,\n redBright,\n greenBright,\n yellowBright,\n blueBright,\n magentaBright,\n cyanBright,\n whiteBright,\n bgBlackBright,\n bgRedBright,\n bgGreenBright,\n bgYellowBright,\n bgBlueBright,\n bgMagentaBright,\n bgCyanBright,\n bgWhiteBright,\n} = createColors();\n\nexports.bgBlack = bgBlack;\nexports.bgBlackBright = bgBlackBright;\nexports.bgBlue = bgBlue;\nexports.bgBlueBright = bgBlueBright;\nexports.bgCyan = bgCyan;\nexports.bgCyanBright = bgCyanBright;\nexports.bgGreen = bgGreen;\nexports.bgGreenBright = bgGreenBright;\nexports.bgMagenta = bgMagenta;\nexports.bgMagentaBright = bgMagentaBright;\nexports.bgRed = bgRed;\nexports.bgRedBright = bgRedBright;\nexports.bgWhite = bgWhite;\nexports.bgWhiteBright = bgWhiteBright;\nexports.bgYellow = bgYellow;\nexports.bgYellowBright = bgYellowBright;\nexports.black = black;\nexports.blackBright = blackBright;\nexports.blue = blue;\nexports.blueBright = blueBright;\nexports.bold = bold;\nexports.createColors = createColors;\nexports.cyan = cyan;\nexports.cyanBright = cyanBright;\nexports.dim = dim;\nexports.gray = gray;\nexports.green = green;\nexports.greenBright = greenBright;\nexports.hidden = hidden;\nexports.inverse = inverse;\nexports.isColorSupported = isColorSupported;\nexports.italic = italic;\nexports.magenta = magenta;\nexports.magentaBright = magentaBright;\nexports.red = red;\nexports.redBright = redBright;\nexports.reset = reset;\nexports.strikethrough = strikethrough;\nexports.underline = underline;\nexports.white = white;\nexports.whiteBright = whiteBright;\nexports.yellow = yellow;\nexports.yellowBright = yellowBright;\n",
|
|
35
|
+
"// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n",
|
|
36
|
+
"var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n",
|
|
37
|
+
"var once = require('once');\n\nvar noop = function() {};\n\nvar qnt = global.Bare ? queueMicrotask : process.nextTick.bind(process);\n\nvar isRequest = function(stream) {\n\treturn stream.setHeader && typeof stream.abort === 'function';\n};\n\nvar isChildProcess = function(stream) {\n\treturn stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3\n};\n\nvar eos = function(stream, opts, callback) {\n\tif (typeof opts === 'function') return eos(stream, null, opts);\n\tif (!opts) opts = {};\n\n\tcallback = once(callback || noop);\n\n\tvar ws = stream._writableState;\n\tvar rs = stream._readableState;\n\tvar readable = opts.readable || (opts.readable !== false && stream.readable);\n\tvar writable = opts.writable || (opts.writable !== false && stream.writable);\n\tvar cancelled = false;\n\n\tvar onlegacyfinish = function() {\n\t\tif (!stream.writable) onfinish();\n\t};\n\n\tvar onfinish = function() {\n\t\twritable = false;\n\t\tif (!readable) callback.call(stream);\n\t};\n\n\tvar onend = function() {\n\t\treadable = false;\n\t\tif (!writable) callback.call(stream);\n\t};\n\n\tvar onexit = function(exitCode) {\n\t\tcallback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);\n\t};\n\n\tvar onerror = function(err) {\n\t\tcallback.call(stream, err);\n\t};\n\n\tvar onclose = function() {\n\t\tqnt(onclosenexttick);\n\t};\n\n\tvar onclosenexttick = function() {\n\t\tif (cancelled) return;\n\t\tif (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));\n\t\tif (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));\n\t};\n\n\tvar onrequest = function() {\n\t\tstream.req.on('finish', onfinish);\n\t};\n\n\tif (isRequest(stream)) {\n\t\tstream.on('complete', onfinish);\n\t\tstream.on('abort', onclose);\n\t\tif (stream.req) onrequest();\n\t\telse stream.on('request', onrequest);\n\t} else if (writable && !ws) { // legacy streams\n\t\tstream.on('end', onlegacyfinish);\n\t\tstream.on('close', onlegacyfinish);\n\t}\n\n\tif (isChildProcess(stream)) stream.on('exit', onexit);\n\n\tstream.on('end', onend);\n\tstream.on('finish', onfinish);\n\tif (opts.error !== false) stream.on('error', onerror);\n\tstream.on('close', onclose);\n\n\treturn function() {\n\t\tcancelled = true;\n\t\tstream.removeListener('complete', onfinish);\n\t\tstream.removeListener('abort', onclose);\n\t\tstream.removeListener('request', onrequest);\n\t\tif (stream.req) stream.req.removeListener('finish', onfinish);\n\t\tstream.removeListener('end', onlegacyfinish);\n\t\tstream.removeListener('close', onlegacyfinish);\n\t\tstream.removeListener('finish', onfinish);\n\t\tstream.removeListener('exit', onexit);\n\t\tstream.removeListener('end', onend);\n\t\tstream.removeListener('error', onerror);\n\t\tstream.removeListener('close', onclose);\n\t};\n};\n\nmodule.exports = eos;\n",
|
|
38
|
+
"var once = require('once')\nvar eos = require('end-of-stream')\nvar fs\n\ntry {\n fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes\n} catch (e) {}\n\nvar noop = function () {}\nvar ancient = typeof process === 'undefined' ? false : /^v?\\.0/.test(process.version)\n\nvar isFn = function (fn) {\n return typeof fn === 'function'\n}\n\nvar isFS = function (stream) {\n if (!ancient) return false // newer node version do not need to care about fs is a special way\n if (!fs) return false // browser\n return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)\n}\n\nvar isRequest = function (stream) {\n return stream.setHeader && isFn(stream.abort)\n}\n\nvar destroyer = function (stream, reading, writing, callback) {\n callback = once(callback)\n\n var closed = false\n stream.on('close', function () {\n closed = true\n })\n\n eos(stream, {readable: reading, writable: writing}, function (err) {\n if (err) return callback(err)\n closed = true\n callback()\n })\n\n var destroyed = false\n return function (err) {\n if (closed) return\n if (destroyed) return\n destroyed = true\n\n if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks\n if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want\n\n if (isFn(stream.destroy)) return stream.destroy()\n\n callback(err || new Error('stream was destroyed'))\n }\n}\n\nvar call = function (fn) {\n fn()\n}\n\nvar pipe = function (from, to) {\n return from.pipe(to)\n}\n\nvar pump = function () {\n var streams = Array.prototype.slice.call(arguments)\n var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop\n\n if (Array.isArray(streams[0])) streams = streams[0]\n if (streams.length < 2) throw new Error('pump requires two streams per minimum')\n\n var error\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1\n var writing = i > 0\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err\n if (err) destroys.forEach(call)\n if (reading) return\n destroys.forEach(call)\n callback(error)\n })\n })\n\n return streams.reduce(pipe)\n}\n\nmodule.exports = pump\n",
|
|
39
|
+
"/*\nCopyright (c) 2014-2021, Matteo Collina <hello@matteocollina.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\n'use strict'\n\nconst { Transform } = require('stream')\nconst { StringDecoder } = require('string_decoder')\nconst kLast = Symbol('last')\nconst kDecoder = Symbol('decoder')\n\nfunction transform (chunk, enc, cb) {\n let list\n if (this.overflow) { // Line buffer is full. Skip to start of next line.\n const buf = this[kDecoder].write(chunk)\n list = buf.split(this.matcher)\n\n if (list.length === 1) return cb() // Line ending not found. Discard entire chunk.\n\n // Line ending found. Discard trailing fragment of previous line and reset overflow state.\n list.shift()\n this.overflow = false\n } else {\n this[kLast] += this[kDecoder].write(chunk)\n list = this[kLast].split(this.matcher)\n }\n\n this[kLast] = list.pop()\n\n for (let i = 0; i < list.length; i++) {\n try {\n push(this, this.mapper(list[i]))\n } catch (error) {\n return cb(error)\n }\n }\n\n this.overflow = this[kLast].length > this.maxLength\n if (this.overflow && !this.skipOverflow) {\n cb(new Error('maximum buffer reached'))\n return\n }\n\n cb()\n}\n\nfunction flush (cb) {\n // forward any gibberish left in there\n this[kLast] += this[kDecoder].end()\n\n if (this[kLast]) {\n try {\n push(this, this.mapper(this[kLast]))\n } catch (error) {\n return cb(error)\n }\n }\n\n cb()\n}\n\nfunction push (self, val) {\n if (val !== undefined) {\n self.push(val)\n }\n}\n\nfunction noop (incoming) {\n return incoming\n}\n\nfunction split (matcher, mapper, options) {\n // Set defaults for any arguments not supplied.\n matcher = matcher || /\\r?\\n/\n mapper = mapper || noop\n options = options || {}\n\n // Test arguments explicitly.\n switch (arguments.length) {\n case 1:\n // If mapper is only argument.\n if (typeof matcher === 'function') {\n mapper = matcher\n matcher = /\\r?\\n/\n // If options is only argument.\n } else if (typeof matcher === 'object' && !(matcher instanceof RegExp) && !matcher[Symbol.split]) {\n options = matcher\n matcher = /\\r?\\n/\n }\n break\n\n case 2:\n // If mapper and options are arguments.\n if (typeof matcher === 'function') {\n options = mapper\n mapper = matcher\n matcher = /\\r?\\n/\n // If matcher and options are arguments.\n } else if (typeof mapper === 'object') {\n options = mapper\n mapper = noop\n }\n }\n\n options = Object.assign({}, options)\n options.autoDestroy = true\n options.transform = transform\n options.flush = flush\n options.readableObjectMode = true\n\n const stream = new Transform(options)\n\n stream[kLast] = ''\n stream[kDecoder] = new StringDecoder('utf8')\n stream.matcher = matcher\n stream.mapper = mapper\n stream.maxLength = options.maxLength\n stream.skipOverflow = options.skipOverflow || false\n stream.overflow = false\n stream._destroy = function (err, cb) {\n // Weird Node v12 bug that we need to work around\n this._writableState.errorEmitted = false\n cb(err)\n }\n\n return stream\n}\n\nmodule.exports = split\n",
|
|
40
|
+
"'use strict'\n\nconst metadata = Symbol.for('pino.metadata')\nconst split = require('split2')\nconst { Duplex } = require('stream')\nconst { parentPort, workerData } = require('worker_threads')\n\nfunction createDeferred () {\n let resolve\n let reject\n const promise = new Promise((_resolve, _reject) => {\n resolve = _resolve\n reject = _reject\n })\n promise.resolve = resolve\n promise.reject = reject\n return promise\n}\n\nmodule.exports = function build (fn, opts = {}) {\n const waitForConfig = opts.expectPinoConfig === true && workerData?.workerData?.pinoWillSendConfig === true\n const parseLines = opts.parse === 'lines'\n const parseLine = typeof opts.parseLine === 'function' ? opts.parseLine : JSON.parse\n const close = opts.close || defaultClose\n const stream = split(function (line) {\n let value\n\n try {\n value = parseLine(line)\n } catch (error) {\n this.emit('unknown', line, error)\n return\n }\n\n if (value === null) {\n this.emit('unknown', line, 'Null value ignored')\n return\n }\n\n if (typeof value !== 'object') {\n value = {\n data: value,\n time: Date.now()\n }\n }\n\n if (stream[metadata]) {\n stream.lastTime = value.time\n stream.lastLevel = value.level\n stream.lastObj = value\n }\n\n if (parseLines) {\n return line\n }\n\n return value\n }, { autoDestroy: true })\n\n stream._destroy = function (err, cb) {\n const promise = close(err, cb)\n if (promise && typeof promise.then === 'function') {\n promise.then(cb, cb)\n }\n }\n\n if (opts.expectPinoConfig === true && workerData?.workerData?.pinoWillSendConfig !== true) {\n setImmediate(() => {\n stream.emit('error', new Error('This transport is not compatible with the current version of pino. Please upgrade pino to the latest version.'))\n })\n }\n\n if (opts.metadata !== false) {\n stream[metadata] = true\n stream.lastTime = 0\n stream.lastLevel = 0\n stream.lastObj = null\n }\n\n if (waitForConfig) {\n let pinoConfig = {}\n const configReceived = createDeferred()\n parentPort.on('message', function handleMessage (message) {\n if (message.code === 'PINO_CONFIG') {\n pinoConfig = message.config\n configReceived.resolve()\n parentPort.off('message', handleMessage)\n }\n })\n\n Object.defineProperties(stream, {\n levels: {\n get () { return pinoConfig.levels }\n },\n messageKey: {\n get () { return pinoConfig.messageKey }\n },\n errorKey: {\n get () { return pinoConfig.errorKey }\n }\n })\n\n return configReceived.then(finish)\n }\n\n return finish()\n\n function finish () {\n let res = fn(stream)\n\n if (res && typeof res.catch === 'function') {\n res.catch((err) => {\n stream.destroy(err)\n })\n\n // set it to null to not retain a reference to the promise\n res = null\n } else if (opts.enablePipelining && res) {\n return Duplex.from({ writable: stream, readable: res })\n }\n\n return stream\n }\n}\n\nfunction defaultClose (err, cb) {\n process.nextTick(cb, err)\n}\n",
|
|
41
|
+
"'use strict'\n\n/**\n * A set of property names that indicate the value represents an error object.\n *\n * @typedef {string[]} K_ERROR_LIKE_KEYS\n */\n\nmodule.exports = {\n DATE_FORMAT: 'yyyy-mm-dd HH:MM:ss.l o',\n DATE_FORMAT_SIMPLE: 'HH:MM:ss.l',\n\n /**\n * @type {K_ERROR_LIKE_KEYS}\n */\n ERROR_LIKE_KEYS: ['err', 'error'],\n\n MESSAGE_KEY: 'msg',\n\n LEVEL_KEY: 'level',\n\n LEVEL_LABEL: 'levelLabel',\n\n TIMESTAMP_KEY: 'time',\n\n LEVELS: {\n default: 'USERLVL',\n 60: 'FATAL',\n 50: 'ERROR',\n 40: 'WARN',\n 30: 'INFO',\n 20: 'DEBUG',\n 10: 'TRACE'\n },\n\n LEVEL_NAMES: {\n fatal: 60,\n error: 50,\n warn: 40,\n info: 30,\n debug: 20,\n trace: 10\n },\n\n // Object keys that probably came from a logger like Pino or Bunyan.\n LOGGER_KEYS: [\n 'pid',\n 'hostname',\n 'name',\n 'level',\n 'time',\n 'timestamp',\n 'caller'\n ]\n}\n",
|
|
42
|
+
"'use strict'\n\nmodule.exports = getLevelLabelData\nconst { LEVELS, LEVEL_NAMES } = require('../constants')\n\n/**\n * Given initial settings for custom levels/names and use of only custom props\n * get the level label that corresponds with a given level number\n *\n * @param {boolean} useOnlyCustomProps\n * @param {object} customLevels\n * @param {object} customLevelNames\n *\n * @returns {function} A function that takes a number level and returns the level's label string\n */\nfunction getLevelLabelData (useOnlyCustomProps, customLevels, customLevelNames) {\n const levels = useOnlyCustomProps ? customLevels || LEVELS : Object.assign({}, LEVELS, customLevels)\n const levelNames = useOnlyCustomProps ? customLevelNames || LEVEL_NAMES : Object.assign({}, LEVEL_NAMES, customLevelNames)\n return function (level) {\n let levelNum = 'default'\n if (Number.isInteger(+level)) {\n levelNum = Object.prototype.hasOwnProperty.call(levels, level) ? level : levelNum\n } else {\n levelNum = Object.prototype.hasOwnProperty.call(levelNames, level.toLowerCase()) ? levelNames[level.toLowerCase()] : levelNum\n }\n\n return [levels[levelNum], levelNum]\n }\n}\n",
|
|
43
|
+
"'use strict'\n\nconst nocolor = input => input\nconst plain = {\n default: nocolor,\n 60: nocolor,\n 50: nocolor,\n 40: nocolor,\n 30: nocolor,\n 20: nocolor,\n 10: nocolor,\n message: nocolor,\n greyMessage: nocolor,\n property: nocolor\n}\n\nconst { createColors } = require('colorette')\nconst getLevelLabelData = require('./utils/get-level-label-data')\nconst availableColors = createColors({ useColor: true })\nconst { white, bgRed, red, yellow, green, blue, gray, cyan, magenta } = availableColors\n\nconst colored = {\n default: white,\n 60: bgRed,\n 50: red,\n 40: yellow,\n 30: green,\n 20: blue,\n 10: gray,\n message: cyan,\n greyMessage: gray,\n property: magenta\n}\n\nfunction resolveCustomColoredColorizer (customColors) {\n return customColors.reduce(\n function (agg, [level, color]) {\n agg[level] = typeof availableColors[color] === 'function' ? availableColors[color] : white\n\n return agg\n },\n { default: white, message: cyan, greyMessage: gray, property: magenta }\n )\n}\n\nfunction colorizeLevel (useOnlyCustomProps) {\n return function (level, colorizer, { customLevels, customLevelNames } = {}) {\n const [levelStr, levelNum] = getLevelLabelData(useOnlyCustomProps, customLevels, customLevelNames)(level)\n\n return Object.prototype.hasOwnProperty.call(colorizer, levelNum) ? colorizer[levelNum](levelStr) : colorizer.default(levelStr)\n }\n}\n\nfunction plainColorizer (useOnlyCustomProps) {\n const newPlainColorizer = colorizeLevel(useOnlyCustomProps)\n const customColoredColorizer = function (level, opts) {\n return newPlainColorizer(level, plain, opts)\n }\n customColoredColorizer.message = plain.message\n customColoredColorizer.greyMessage = plain.greyMessage\n customColoredColorizer.property = plain.property\n customColoredColorizer.colors = createColors({ useColor: false })\n return customColoredColorizer\n}\n\nfunction coloredColorizer (useOnlyCustomProps) {\n const newColoredColorizer = colorizeLevel(useOnlyCustomProps)\n const customColoredColorizer = function (level, opts) {\n return newColoredColorizer(level, colored, opts)\n }\n customColoredColorizer.message = colored.message\n customColoredColorizer.property = colored.property\n customColoredColorizer.greyMessage = colored.greyMessage\n customColoredColorizer.colors = availableColors\n return customColoredColorizer\n}\n\nfunction customColoredColorizerFactory (customColors, useOnlyCustomProps) {\n const onlyCustomColored = resolveCustomColoredColorizer(customColors)\n const customColored = useOnlyCustomProps ? onlyCustomColored : Object.assign({}, colored, onlyCustomColored)\n const colorizeLevelCustom = colorizeLevel(useOnlyCustomProps)\n\n const customColoredColorizer = function (level, opts) {\n return colorizeLevelCustom(level, customColored, opts)\n }\n customColoredColorizer.colors = availableColors\n customColoredColorizer.message = customColoredColorizer.message || customColored.message\n customColoredColorizer.property = customColoredColorizer.property || customColored.property\n customColoredColorizer.greyMessage = customColoredColorizer.greyMessage || customColored.greyMessage\n\n return customColoredColorizer\n}\n\n/**\n * Applies colorization, if possible, to a string representing the passed in\n * `level`. For example, the default colorizer will return a \"green\" colored\n * string for the \"info\" level.\n *\n * @typedef {function} ColorizerFunc\n * @param {string|number} level In either case, the input will map to a color\n * for the specified level or to the color for `USERLVL` if the level is not\n * recognized.\n * @property {function} message Accepts one string parameter that will be\n * colorized to a predefined color.\n * @property {Colorette.Colorette} colors Available color functions based on `useColor` (or `colorize`) context\n */\n\n/**\n * Factory function get a function to colorized levels. The returned function\n * also includes a `.message(str)` method to colorize strings.\n *\n * @param {boolean} [useColors=false] When `true` a function that applies standard\n * terminal colors is returned.\n * @param {array[]} [customColors] Tuple where first item of each array is the\n * level index and the second item is the color\n * @param {boolean} [useOnlyCustomProps] When `true`, only use the provided\n * custom colors provided and not fallback to default\n *\n * @returns {ColorizerFunc} `function (level) {}` has a `.message(str)` method to\n * apply colorization to a string. The core function accepts either an integer\n * `level` or a `string` level. The integer level will map to a known level\n * string or to `USERLVL` if not known. The string `level` will map to the same\n * colors as the integer `level` and will also default to `USERLVL` if the given\n * string is not a recognized level name.\n */\nmodule.exports = function getColorizer (useColors = false, customColors, useOnlyCustomProps) {\n if (useColors && customColors !== undefined) {\n return customColoredColorizerFactory(customColors, useOnlyCustomProps)\n } else if (useColors) {\n return coloredColorizer(useOnlyCustomProps)\n }\n\n return plainColorizer(useOnlyCustomProps)\n}\n",
|
|
44
|
+
"'use strict'\n\nmodule.exports = function noop () {}\n",
|
|
45
|
+
"'use strict'\n\nmodule.exports = buildSafeSonicBoom\n\nconst { isMainThread } = require('node:worker_threads')\nconst SonicBoom = require('sonic-boom')\nconst noop = require('./noop')\n\n/**\n * Creates a safe SonicBoom instance\n *\n * @param {object} opts Options for SonicBoom\n *\n * @returns {object} A new SonicBoom stream\n */\nfunction buildSafeSonicBoom (opts) {\n const stream = new SonicBoom(opts)\n stream.on('error', filterBrokenPipe)\n // if we are sync: false, we must flush on exit\n if (!opts.sync && isMainThread) {\n setupOnExit(stream)\n }\n return stream\n\n function filterBrokenPipe (err) {\n if (err.code === 'EPIPE') {\n stream.write = noop\n stream.end = noop\n stream.flushSync = noop\n stream.destroy = noop\n return\n }\n stream.removeListener('error', filterBrokenPipe)\n }\n}\n\nfunction setupOnExit (stream) {\n /* istanbul ignore next */\n if (global.WeakRef && global.WeakMap && global.FinalizationRegistry) {\n // This is leak free, it does not leave event handlers\n const onExit = require('on-exit-leak-free')\n\n onExit.register(stream, autoEnd)\n\n stream.on('close', function () {\n onExit.unregister(stream)\n })\n }\n}\n\n/* istanbul ignore next */\nfunction autoEnd (stream, eventName) {\n // This check is needed only on some platforms\n\n if (stream.destroyed) {\n return\n }\n\n if (eventName === 'beforeExit') {\n // We still have an event loop, let's use it\n stream.flush()\n stream.on('drain', function () {\n stream.end()\n })\n } else {\n // We do not have an event loop, so flush synchronously\n stream.flushSync()\n }\n}\n",
|
|
46
|
+
"'use strict'\n\nmodule.exports = isValidDate\n\n/**\n * Checks if the argument is a JS Date and not 'Invalid Date'.\n *\n * @param {Date} date The date to check.\n *\n * @returns {boolean} true if the argument is a JS Date and not 'Invalid Date'.\n */\nfunction isValidDate (date) {\n return date instanceof Date && !Number.isNaN(date.getTime())\n}\n",
|
|
47
|
+
"'use strict'\n\nmodule.exports = createDate\n\nconst isValidDate = require('./is-valid-date')\n\n/**\n * Constructs a JS Date from a number or string. Accepts any single number\n * or single string argument that is valid for the Date() constructor,\n * or an epoch as a string.\n *\n * @param {string|number} epoch The representation of the Date.\n *\n * @returns {Date} The constructed Date.\n */\nfunction createDate (epoch) {\n // If epoch is already a valid argument, return the valid Date\n let date = new Date(epoch)\n if (isValidDate(date)) {\n return date\n }\n\n // Convert to a number to permit epoch as a string\n date = new Date(+epoch)\n return date\n}\n",
|
|
48
|
+
"'use strict'\n\nmodule.exports = splitPropertyKey\n\n/**\n * Splits the property key delimited by a dot character but not when it is preceded\n * by a backslash.\n *\n * @param {string} key A string identifying the property.\n *\n * @returns {string[]} Returns a list of string containing each delimited property.\n * e.g. `'prop2\\.domain\\.corp.prop2'` should return [ 'prop2.domain.com', 'prop2' ]\n */\nfunction splitPropertyKey (key) {\n const result = []\n let backslash = false\n let segment = ''\n\n for (let i = 0; i < key.length; i++) {\n const c = key.charAt(i)\n\n if (c === '\\\\') {\n backslash = true\n continue\n }\n\n if (backslash) {\n backslash = false\n segment += c\n continue\n }\n\n /* Non-escaped dot, push to result */\n if (c === '.') {\n result.push(segment)\n segment = ''\n continue\n }\n\n segment += c\n }\n\n /* Push last entry to result */\n if (segment.length) {\n result.push(segment)\n }\n\n return result\n}\n",
|
|
49
|
+
"'use strict'\n\nmodule.exports = getPropertyValue\n\nconst splitPropertyKey = require('./split-property-key')\n\n/**\n * Gets a specified property from an object if it exists.\n *\n * @param {object} obj The object to be searched.\n * @param {string|string[]} property A string, or an array of strings, identifying\n * the property to be retrieved from the object.\n * Accepts nested properties delimited by a `.`.\n * Delimiter can be escaped to preserve property names that contain the delimiter.\n * e.g. `'prop1.prop2'` or `'prop2\\.domain\\.corp.prop2'`.\n *\n * @returns {*}\n */\nfunction getPropertyValue (obj, property) {\n const props = Array.isArray(property) ? property : splitPropertyKey(property)\n\n for (const prop of props) {\n if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n return\n }\n obj = obj[prop]\n }\n\n return obj\n}\n",
|
|
50
|
+
"'use strict'\n\nmodule.exports = deleteLogProperty\n\nconst getPropertyValue = require('./get-property-value')\nconst splitPropertyKey = require('./split-property-key')\n\n/**\n * Deletes a specified property from a log object if it exists.\n * This function mutates the passed in `log` object.\n *\n * @param {object} log The log object to be modified.\n * @param {string} property A string identifying the property to be deleted from\n * the log object. Accepts nested properties delimited by a `.`\n * Delimiter can be escaped to preserve property names that contain the delimiter.\n * e.g. `'prop1.prop2'` or `'prop2\\.domain\\.corp.prop2'`\n */\nfunction deleteLogProperty (log, property) {\n const props = splitPropertyKey(property)\n const propToDelete = props.pop()\n\n log = getPropertyValue(log, props)\n\n /* istanbul ignore else */\n if (log !== null && typeof log === 'object' && Object.prototype.hasOwnProperty.call(log, propToDelete)) {\n delete log[propToDelete]\n }\n}\n",
|
|
51
|
+
"'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar toStringFunction = Function.prototype.toString;\nvar create = Object.create;\nvar toStringObject = Object.prototype.toString;\n/**\n * @classdesc Fallback cache for when WeakMap is not natively supported\n */\nvar LegacyCache = /** @class */ (function () {\n function LegacyCache() {\n this._keys = [];\n this._values = [];\n }\n LegacyCache.prototype.has = function (key) {\n return !!~this._keys.indexOf(key);\n };\n LegacyCache.prototype.get = function (key) {\n return this._values[this._keys.indexOf(key)];\n };\n LegacyCache.prototype.set = function (key, value) {\n this._keys.push(key);\n this._values.push(value);\n };\n return LegacyCache;\n}());\nfunction createCacheLegacy() {\n return new LegacyCache();\n}\nfunction createCacheModern() {\n return new WeakMap();\n}\n/**\n * Get a new cache object to prevent circular references.\n */\nvar createCache = typeof WeakMap !== 'undefined' ? createCacheModern : createCacheLegacy;\n/**\n * Get an empty version of the object with the same prototype it has.\n */\nfunction getCleanClone(prototype) {\n if (!prototype) {\n return create(null);\n }\n var Constructor = prototype.constructor;\n if (Constructor === Object) {\n return prototype === Object.prototype ? {} : create(prototype);\n }\n if (Constructor &&\n ~toStringFunction.call(Constructor).indexOf('[native code]')) {\n try {\n return new Constructor();\n }\n catch (_a) { }\n }\n return create(prototype);\n}\nfunction getRegExpFlagsLegacy(regExp) {\n var flags = '';\n if (regExp.global) {\n flags += 'g';\n }\n if (regExp.ignoreCase) {\n flags += 'i';\n }\n if (regExp.multiline) {\n flags += 'm';\n }\n if (regExp.unicode) {\n flags += 'u';\n }\n if (regExp.sticky) {\n flags += 'y';\n }\n return flags;\n}\nfunction getRegExpFlagsModern(regExp) {\n return regExp.flags;\n}\n/**\n * Get the flags to apply to the copied regexp.\n */\nvar getRegExpFlags = /test/g.flags === 'g' ? getRegExpFlagsModern : getRegExpFlagsLegacy;\nfunction getTagLegacy(value) {\n var type = toStringObject.call(value);\n return type.substring(8, type.length - 1);\n}\nfunction getTagModern(value) {\n return value[Symbol.toStringTag] || getTagLegacy(value);\n}\n/**\n * Get the tag of the value passed, so that the correct copier can be used.\n */\nvar getTag = typeof Symbol !== 'undefined' ? getTagModern : getTagLegacy;\n\nvar defineProperty = Object.defineProperty, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor, getOwnPropertyNames = Object.getOwnPropertyNames, getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar _a = Object.prototype, hasOwnProperty = _a.hasOwnProperty, propertyIsEnumerable = _a.propertyIsEnumerable;\nvar SUPPORTS_SYMBOL = typeof getOwnPropertySymbols === 'function';\nfunction getStrictPropertiesModern(object) {\n return getOwnPropertyNames(object).concat(getOwnPropertySymbols(object));\n}\n/**\n * Get the properites used when copying objects strictly. This includes both keys and symbols.\n */\nvar getStrictProperties = SUPPORTS_SYMBOL\n ? getStrictPropertiesModern\n : getOwnPropertyNames;\n/**\n * Striclty copy all properties contained on the object.\n */\nfunction copyOwnPropertiesStrict(value, clone, state) {\n var properties = getStrictProperties(value);\n for (var index = 0, length_1 = properties.length, property = void 0, descriptor = void 0; index < length_1; ++index) {\n property = properties[index];\n if (property === 'callee' || property === 'caller') {\n continue;\n }\n descriptor = getOwnPropertyDescriptor(value, property);\n if (!descriptor) {\n // In extra edge cases where the property descriptor cannot be retrived, fall back to\n // the loose assignment.\n clone[property] = state.copier(value[property], state);\n continue;\n }\n // Only clone the value if actually a value, not a getter / setter.\n if (!descriptor.get && !descriptor.set) {\n descriptor.value = state.copier(descriptor.value, state);\n }\n try {\n defineProperty(clone, property, descriptor);\n }\n catch (error) {\n // Tee above can fail on node in edge cases, so fall back to the loose assignment.\n clone[property] = descriptor.value;\n }\n }\n return clone;\n}\n/**\n * Deeply copy the indexed values in the array.\n */\nfunction copyArrayLoose(array, state) {\n var clone = new state.Constructor();\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(array, clone);\n for (var index = 0, length_2 = array.length; index < length_2; ++index) {\n clone[index] = state.copier(array[index], state);\n }\n return clone;\n}\n/**\n * Deeply copy the indexed values in the array, as well as any custom properties.\n */\nfunction copyArrayStrict(array, state) {\n var clone = new state.Constructor();\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(array, clone);\n return copyOwnPropertiesStrict(array, clone, state);\n}\n/**\n * Copy the contents of the ArrayBuffer.\n */\nfunction copyArrayBuffer(arrayBuffer, _state) {\n return arrayBuffer.slice(0);\n}\n/**\n * Create a new Blob with the contents of the original.\n */\nfunction copyBlob(blob, _state) {\n return blob.slice(0, blob.size, blob.type);\n}\n/**\n * Create a new DataView with the contents of the original.\n */\nfunction copyDataView(dataView, state) {\n return new state.Constructor(copyArrayBuffer(dataView.buffer));\n}\n/**\n * Create a new Date based on the time of the original.\n */\nfunction copyDate(date, state) {\n return new state.Constructor(date.getTime());\n}\n/**\n * Deeply copy the keys and values of the original.\n */\nfunction copyMapLoose(map, state) {\n var clone = new state.Constructor();\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(map, clone);\n map.forEach(function (value, key) {\n clone.set(key, state.copier(value, state));\n });\n return clone;\n}\n/**\n * Deeply copy the keys and values of the original, as well as any custom properties.\n */\nfunction copyMapStrict(map, state) {\n return copyOwnPropertiesStrict(map, copyMapLoose(map, state), state);\n}\nfunction copyObjectLooseLegacy(object, state) {\n var clone = getCleanClone(state.prototype);\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(object, clone);\n for (var key in object) {\n if (hasOwnProperty.call(object, key)) {\n clone[key] = state.copier(object[key], state);\n }\n }\n return clone;\n}\nfunction copyObjectLooseModern(object, state) {\n var clone = getCleanClone(state.prototype);\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(object, clone);\n for (var key in object) {\n if (hasOwnProperty.call(object, key)) {\n clone[key] = state.copier(object[key], state);\n }\n }\n var symbols = getOwnPropertySymbols(object);\n for (var index = 0, length_3 = symbols.length, symbol = void 0; index < length_3; ++index) {\n symbol = symbols[index];\n if (propertyIsEnumerable.call(object, symbol)) {\n clone[symbol] = state.copier(object[symbol], state);\n }\n }\n return clone;\n}\n/**\n * Deeply copy the properties (keys and symbols) and values of the original.\n */\nvar copyObjectLoose = SUPPORTS_SYMBOL\n ? copyObjectLooseModern\n : copyObjectLooseLegacy;\n/**\n * Deeply copy the properties (keys and symbols) and values of the original, as well\n * as any hidden or non-enumerable properties.\n */\nfunction copyObjectStrict(object, state) {\n var clone = getCleanClone(state.prototype);\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(object, clone);\n return copyOwnPropertiesStrict(object, clone, state);\n}\n/**\n * Create a new primitive wrapper from the value of the original.\n */\nfunction copyPrimitiveWrapper(primitiveObject, state) {\n return new state.Constructor(primitiveObject.valueOf());\n}\n/**\n * Create a new RegExp based on the value and flags of the original.\n */\nfunction copyRegExp(regExp, state) {\n var clone = new state.Constructor(regExp.source, getRegExpFlags(regExp));\n clone.lastIndex = regExp.lastIndex;\n return clone;\n}\n/**\n * Return the original value (an identity function).\n *\n * @note\n * THis is used for objects that cannot be copied, such as WeakMap.\n */\nfunction copySelf(value, _state) {\n return value;\n}\n/**\n * Deeply copy the values of the original.\n */\nfunction copySetLoose(set, state) {\n var clone = new state.Constructor();\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(set, clone);\n set.forEach(function (value) {\n clone.add(state.copier(value, state));\n });\n return clone;\n}\n/**\n * Deeply copy the values of the original, as well as any custom properties.\n */\nfunction copySetStrict(set, state) {\n return copyOwnPropertiesStrict(set, copySetLoose(set, state), state);\n}\n\nvar isArray = Array.isArray;\nvar assign = Object.assign;\nvar getPrototypeOf = Object.getPrototypeOf || (function (obj) { return obj.__proto__; });\nvar DEFAULT_LOOSE_OPTIONS = {\n array: copyArrayLoose,\n arrayBuffer: copyArrayBuffer,\n blob: copyBlob,\n dataView: copyDataView,\n date: copyDate,\n error: copySelf,\n map: copyMapLoose,\n object: copyObjectLoose,\n regExp: copyRegExp,\n set: copySetLoose,\n};\nvar DEFAULT_STRICT_OPTIONS = assign({}, DEFAULT_LOOSE_OPTIONS, {\n array: copyArrayStrict,\n map: copyMapStrict,\n object: copyObjectStrict,\n set: copySetStrict,\n});\n/**\n * Get the copiers used for each specific object tag.\n */\nfunction getTagSpecificCopiers(options) {\n return {\n Arguments: options.object,\n Array: options.array,\n ArrayBuffer: options.arrayBuffer,\n Blob: options.blob,\n Boolean: copyPrimitiveWrapper,\n DataView: options.dataView,\n Date: options.date,\n Error: options.error,\n Float32Array: options.arrayBuffer,\n Float64Array: options.arrayBuffer,\n Int8Array: options.arrayBuffer,\n Int16Array: options.arrayBuffer,\n Int32Array: options.arrayBuffer,\n Map: options.map,\n Number: copyPrimitiveWrapper,\n Object: options.object,\n Promise: copySelf,\n RegExp: options.regExp,\n Set: options.set,\n String: copyPrimitiveWrapper,\n WeakMap: copySelf,\n WeakSet: copySelf,\n Uint8Array: options.arrayBuffer,\n Uint8ClampedArray: options.arrayBuffer,\n Uint16Array: options.arrayBuffer,\n Uint32Array: options.arrayBuffer,\n Uint64Array: options.arrayBuffer,\n };\n}\n/**\n * Create a custom copier based on the object-specific copy methods passed.\n */\nfunction createCopier(options) {\n var normalizedOptions = assign({}, DEFAULT_LOOSE_OPTIONS, options);\n var tagSpecificCopiers = getTagSpecificCopiers(normalizedOptions);\n var array = tagSpecificCopiers.Array, object = tagSpecificCopiers.Object;\n function copier(value, state) {\n state.prototype = state.Constructor = undefined;\n if (!value || typeof value !== 'object') {\n return value;\n }\n if (state.cache.has(value)) {\n return state.cache.get(value);\n }\n state.prototype = getPrototypeOf(value);\n state.Constructor = state.prototype && state.prototype.constructor;\n // plain objects\n if (!state.Constructor || state.Constructor === Object) {\n return object(value, state);\n }\n // arrays\n if (isArray(value)) {\n return array(value, state);\n }\n var tagSpecificCopier = tagSpecificCopiers[getTag(value)];\n if (tagSpecificCopier) {\n return tagSpecificCopier(value, state);\n }\n return typeof value.then === 'function' ? value : object(value, state);\n }\n return function copy(value) {\n return copier(value, {\n Constructor: undefined,\n cache: createCache(),\n copier: copier,\n prototype: undefined,\n });\n };\n}\n/**\n * Create a custom copier based on the object-specific copy methods passed, defaulting to the\n * same internals as `copyStrict`.\n */\nfunction createStrictCopier(options) {\n return createCopier(assign({}, DEFAULT_STRICT_OPTIONS, options));\n}\n/**\n * Copy an value deeply as much as possible, where strict recreation of object properties\n * are maintained. All properties (including non-enumerable ones) are copied with their\n * original property descriptors on both objects and arrays.\n */\nvar copyStrict = createStrictCopier({});\n/**\n * Copy an value deeply as much as possible.\n */\nvar index = createCopier({});\n\nexports.copyStrict = copyStrict;\nexports.createCopier = createCopier;\nexports.createStrictCopier = createStrictCopier;\nexports.default = index;\n//# sourceMappingURL=index.cjs.map\n",
|
|
52
|
+
"'use strict'\n\nmodule.exports = filterLog\n\nconst { createCopier } = require('fast-copy')\nconst fastCopy = createCopier({})\n\nconst deleteLogProperty = require('./delete-log-property')\n\n/**\n * @typedef {object} FilterLogParams\n * @property {object} log The log object to be modified.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Filter a log object by removing or including keys accordingly.\n * When `includeKeys` is passed, `ignoredKeys` will be ignored.\n * One of ignoreKeys or includeKeys must be pass in.\n *\n * @param {FilterLogParams} input\n *\n * @returns {object} A new `log` object instance that\n * either only includes the keys in ignoreKeys\n * or does not include those in ignoredKeys.\n */\nfunction filterLog ({ log, context }) {\n const { ignoreKeys, includeKeys } = context\n const logCopy = fastCopy(log)\n\n if (includeKeys) {\n const logIncluded = {}\n\n includeKeys.forEach((key) => {\n logIncluded[key] = logCopy[key]\n })\n return logIncluded\n }\n\n ignoreKeys.forEach((ignoreKey) => {\n deleteLogProperty(logCopy, ignoreKey)\n })\n return logCopy\n}\n",
|
|
53
|
+
"\"use strict\";function _typeof(obj){\"@babel/helpers - typeof\";if(typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj}}return _typeof(obj)}(function(global){var _arguments=arguments;var dateFormat=function(){var token=/d{1,4}|D{3,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|W{1,2}|[LlopSZN]|\"[^\"]*\"|'[^']*'/g;var timezone=/\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g;var timezoneClip=/[^-+\\dA-Z]/g;return function(date,mask,utc,gmt){if(_arguments.length===1&&kindOf(date)===\"string\"&&!/\\d/.test(date)){mask=date;date=undefined}date=date||date===0?date:new Date;if(!(date instanceof Date)){date=new Date(date)}if(isNaN(date)){throw TypeError(\"Invalid date\")}mask=String(dateFormat.masks[mask]||mask||dateFormat.masks[\"default\"]);var maskSlice=mask.slice(0,4);if(maskSlice===\"UTC:\"||maskSlice===\"GMT:\"){mask=mask.slice(4);utc=true;if(maskSlice===\"GMT:\"){gmt=true}}var _=function _(){return utc?\"getUTC\":\"get\"};var _d=function d(){return date[_()+\"Date\"]()};var D=function D(){return date[_()+\"Day\"]()};var _m=function m(){return date[_()+\"Month\"]()};var y=function y(){return date[_()+\"FullYear\"]()};var _H=function H(){return date[_()+\"Hours\"]()};var _M=function M(){return date[_()+\"Minutes\"]()};var _s=function s(){return date[_()+\"Seconds\"]()};var _L=function L(){return date[_()+\"Milliseconds\"]()};var _o=function o(){return utc?0:date.getTimezoneOffset()};var _W=function W(){return getWeek(date)};var _N=function N(){return getDayOfWeek(date)};var flags={d:function d(){return _d()},dd:function dd(){return pad(_d())},ddd:function ddd(){return dateFormat.i18n.dayNames[D()]},DDD:function DDD(){return getDayName({y:y(),m:_m(),d:_d(),_:_(),dayName:dateFormat.i18n.dayNames[D()],short:true})},dddd:function dddd(){return dateFormat.i18n.dayNames[D()+7]},DDDD:function DDDD(){return getDayName({y:y(),m:_m(),d:_d(),_:_(),dayName:dateFormat.i18n.dayNames[D()+7]})},m:function m(){return _m()+1},mm:function mm(){return pad(_m()+1)},mmm:function mmm(){return dateFormat.i18n.monthNames[_m()]},mmmm:function mmmm(){return dateFormat.i18n.monthNames[_m()+12]},yy:function yy(){return String(y()).slice(2)},yyyy:function yyyy(){return pad(y(),4)},h:function h(){return _H()%12||12},hh:function hh(){return pad(_H()%12||12)},H:function H(){return _H()},HH:function HH(){return pad(_H())},M:function M(){return _M()},MM:function MM(){return pad(_M())},s:function s(){return _s()},ss:function ss(){return pad(_s())},l:function l(){return pad(_L(),3)},L:function L(){return pad(Math.floor(_L()/10))},t:function t(){return _H()<12?dateFormat.i18n.timeNames[0]:dateFormat.i18n.timeNames[1]},tt:function tt(){return _H()<12?dateFormat.i18n.timeNames[2]:dateFormat.i18n.timeNames[3]},T:function T(){return _H()<12?dateFormat.i18n.timeNames[4]:dateFormat.i18n.timeNames[5]},TT:function TT(){return _H()<12?dateFormat.i18n.timeNames[6]:dateFormat.i18n.timeNames[7]},Z:function Z(){return gmt?\"GMT\":utc?\"UTC\":(String(date).match(timezone)||[\"\"]).pop().replace(timezoneClip,\"\").replace(/GMT\\+0000/g,\"UTC\")},o:function o(){return(_o()>0?\"-\":\"+\")+pad(Math.floor(Math.abs(_o())/60)*100+Math.abs(_o())%60,4)},p:function p(){return(_o()>0?\"-\":\"+\")+pad(Math.floor(Math.abs(_o())/60),2)+\":\"+pad(Math.floor(Math.abs(_o())%60),2)},S:function S(){return[\"th\",\"st\",\"nd\",\"rd\"][_d()%10>3?0:(_d()%100-_d()%10!=10)*_d()%10]},W:function W(){return _W()},WW:function WW(){return pad(_W())},N:function N(){return _N()}};return mask.replace(token,function(match){if(match in flags){return flags[match]()}return match.slice(1,match.length-1)})}}();dateFormat.masks={default:\"ddd mmm dd yyyy HH:MM:ss\",shortDate:\"m/d/yy\",paddedShortDate:\"mm/dd/yyyy\",mediumDate:\"mmm d, yyyy\",longDate:\"mmmm d, yyyy\",fullDate:\"dddd, mmmm d, yyyy\",shortTime:\"h:MM TT\",mediumTime:\"h:MM:ss TT\",longTime:\"h:MM:ss TT Z\",isoDate:\"yyyy-mm-dd\",isoTime:\"HH:MM:ss\",isoDateTime:\"yyyy-mm-dd'T'HH:MM:sso\",isoUtcDateTime:\"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\",expiresHeaderFormat:\"ddd, dd mmm yyyy HH:MM:ss Z\"};dateFormat.i18n={dayNames:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],monthNames:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],timeNames:[\"a\",\"p\",\"am\",\"pm\",\"A\",\"P\",\"AM\",\"PM\"]};var pad=function pad(val,len){val=String(val);len=len||2;while(val.length<len){val=\"0\"+val}return val};var getDayName=function getDayName(_ref){var y=_ref.y,m=_ref.m,d=_ref.d,_=_ref._,dayName=_ref.dayName,_ref$short=_ref[\"short\"],_short=_ref$short===void 0?false:_ref$short;var today=new Date;var yesterday=new Date;yesterday.setDate(yesterday[_+\"Date\"]()-1);var tomorrow=new Date;tomorrow.setDate(tomorrow[_+\"Date\"]()+1);var today_d=function today_d(){return today[_+\"Date\"]()};var today_m=function today_m(){return today[_+\"Month\"]()};var today_y=function today_y(){return today[_+\"FullYear\"]()};var yesterday_d=function yesterday_d(){return yesterday[_+\"Date\"]()};var yesterday_m=function yesterday_m(){return yesterday[_+\"Month\"]()};var yesterday_y=function yesterday_y(){return yesterday[_+\"FullYear\"]()};var tomorrow_d=function tomorrow_d(){return tomorrow[_+\"Date\"]()};var tomorrow_m=function tomorrow_m(){return tomorrow[_+\"Month\"]()};var tomorrow_y=function tomorrow_y(){return tomorrow[_+\"FullYear\"]()};if(today_y()===y&&today_m()===m&&today_d()===d){return _short?\"Tdy\":\"Today\"}else if(yesterday_y()===y&&yesterday_m()===m&&yesterday_d()===d){return _short?\"Ysd\":\"Yesterday\"}else if(tomorrow_y()===y&&tomorrow_m()===m&&tomorrow_d()===d){return _short?\"Tmw\":\"Tomorrow\"}return dayName};var getWeek=function getWeek(date){var targetThursday=new Date(date.getFullYear(),date.getMonth(),date.getDate());targetThursday.setDate(targetThursday.getDate()-(targetThursday.getDay()+6)%7+3);var firstThursday=new Date(targetThursday.getFullYear(),0,4);firstThursday.setDate(firstThursday.getDate()-(firstThursday.getDay()+6)%7+3);var ds=targetThursday.getTimezoneOffset()-firstThursday.getTimezoneOffset();targetThursday.setHours(targetThursday.getHours()-ds);var weekDiff=(targetThursday-firstThursday)/(864e5*7);return 1+Math.floor(weekDiff)};var getDayOfWeek=function getDayOfWeek(date){var dow=date.getDay();if(dow===0){dow=7}return dow};var kindOf=function kindOf(val){if(val===null){return\"null\"}if(val===undefined){return\"undefined\"}if(_typeof(val)!==\"object\"){return _typeof(val)}if(Array.isArray(val)){return\"array\"}return{}.toString.call(val).slice(8,-1).toLowerCase()};if(typeof define===\"function\"&&define.amd){define(function(){return dateFormat})}else if((typeof exports===\"undefined\"?\"undefined\":_typeof(exports))===\"object\"){module.exports=dateFormat}else{global.dateFormat=dateFormat}})(void 0);",
|
|
54
|
+
"'use strict'\n\nmodule.exports = formatTime\n\nconst {\n DATE_FORMAT,\n DATE_FORMAT_SIMPLE\n} = require('../constants')\n\nconst dateformat = require('dateformat')\nconst createDate = require('./create-date')\nconst isValidDate = require('./is-valid-date')\n\n/**\n * Converts a given `epoch` to a desired display format.\n *\n * @param {number|string} epoch The time to convert. May be any value that is\n * valid for `new Date()`.\n * @param {boolean|string} [translateTime=false] When `false`, the given `epoch`\n * will simply be returned. When `true`, the given `epoch` will be converted\n * to a string at UTC using the `DATE_FORMAT` constant. If `translateTime` is\n * a string, the following rules are available:\n *\n * - `<format string>`: The string is a literal format string. This format\n * string will be used to interpret the `epoch` and return a display string\n * at UTC.\n * - `SYS:STANDARD`: The returned display string will follow the `DATE_FORMAT`\n * constant at the system's local timezone.\n * - `SYS:<format string>`: The returned display string will follow the given\n * `<format string>` at the system's local timezone.\n * - `UTC:<format string>`: The returned display string will follow the given\n * `<format string>` at UTC.\n *\n * @returns {number|string} The formatted time.\n */\nfunction formatTime (epoch, translateTime = false) {\n if (translateTime === false) {\n return epoch\n }\n\n const instant = createDate(epoch)\n\n // If the Date is invalid, do not attempt to format\n if (!isValidDate(instant)) {\n return epoch\n }\n\n if (translateTime === true) {\n return dateformat(instant, DATE_FORMAT_SIMPLE)\n }\n\n const upperFormat = translateTime.toUpperCase()\n if (upperFormat === 'SYS:STANDARD') {\n return dateformat(instant, DATE_FORMAT)\n }\n\n const prefix = upperFormat.substr(0, 4)\n if (prefix === 'SYS:' || prefix === 'UTC:') {\n if (prefix === 'UTC:') {\n return dateformat(instant, translateTime)\n }\n return dateformat(instant, translateTime.slice(4))\n }\n\n return dateformat(instant, `UTC:${translateTime}`)\n}\n",
|
|
55
|
+
"'use strict'\n\nmodule.exports = handleCustomLevelsNamesOpts\n\n/**\n * Parse a CSV string or options object that maps level\n * labels to level values.\n *\n * @param {string|object} cLevels An object mapping level\n * names to level values, e.g. `{ info: 30, debug: 65 }`, or a\n * CSV string in the format `level_name:level_value`, e.g.\n * `info:30,debug:65`.\n *\n * @returns {object} An object mapping levels names to level values\n * e.g. `{ info: 30, debug: 65 }`.\n */\nfunction handleCustomLevelsNamesOpts (cLevels) {\n if (!cLevels) return {}\n\n if (typeof cLevels === 'string') {\n return cLevels\n .split(',')\n .reduce((agg, value, idx) => {\n const [levelName, levelNum = idx] = value.split(':')\n agg[levelName.toLowerCase()] = levelNum\n return agg\n }, {})\n } else if (Object.prototype.toString.call(cLevels) === '[object Object]') {\n return Object\n .keys(cLevels)\n .reduce((agg, levelName) => {\n agg[levelName.toLowerCase()] = cLevels[levelName]\n return agg\n }, {})\n } else {\n return {}\n }\n}\n",
|
|
56
|
+
"'use strict'\n\nmodule.exports = handleCustomLevelsOpts\n\n/**\n * Parse a CSV string or options object that specifies\n * configuration for custom levels.\n *\n * @param {string|object} cLevels An object mapping level\n * names to values, e.g. `{ info: 30, debug: 65 }`, or a\n * CSV string in the format `level_name:level_value`, e.g.\n * `info:30,debug:65`.\n *\n * @returns {object} An object mapping levels to labels that\n * appear in logs, e.g. `{ '30': 'INFO', '65': 'DEBUG' }`.\n */\nfunction handleCustomLevelsOpts (cLevels) {\n if (!cLevels) return {}\n\n if (typeof cLevels === 'string') {\n return cLevels\n .split(',')\n .reduce((agg, value, idx) => {\n const [levelName, levelNum = idx] = value.split(':')\n agg[levelNum] = levelName.toUpperCase()\n return agg\n },\n { default: 'USERLVL' })\n } else if (Object.prototype.toString.call(cLevels) === '[object Object]') {\n return Object\n .keys(cLevels)\n .reduce((agg, levelName) => {\n agg[cLevels[levelName]] = levelName.toUpperCase()\n return agg\n }, { default: 'USERLVL' })\n } else {\n return {}\n }\n}\n",
|
|
57
|
+
"'use strict'\n\nmodule.exports = interpretConditionals\n\nconst getPropertyValue = require('./get-property-value')\n\n/**\n * Translates all conditional blocks from within the messageFormat. Translates\n * any matching {if key}{key}{end} statements and returns everything between\n * if and else blocks if the key provided was found in log.\n *\n * @param {MessageFormatString|MessageFormatFunction} messageFormat A format\n * string or function that defines how the logged message should be\n * conditionally formatted.\n * @param {object} log The log object to be modified.\n *\n * @returns {string} The parsed messageFormat.\n */\nfunction interpretConditionals (messageFormat, log) {\n messageFormat = messageFormat.replace(/{if (.*?)}(.*?){end}/g, replacer)\n\n // Remove non-terminated if blocks\n messageFormat = messageFormat.replace(/{if (.*?)}/g, '')\n // Remove floating end blocks\n messageFormat = messageFormat.replace(/{end}/g, '')\n\n return messageFormat.replace(/\\s+/g, ' ').trim()\n\n function replacer (_, key, value) {\n const propertyValue = getPropertyValue(log, key)\n if (propertyValue && value.includes(key)) {\n return value.replace(new RegExp('{' + key + '}', 'g'), propertyValue)\n } else {\n return ''\n }\n }\n}\n",
|
|
58
|
+
"'use strict'\n\nmodule.exports = isObject\n\nfunction isObject (input) {\n return Object.prototype.toString.apply(input) === '[object Object]'\n}\n",
|
|
59
|
+
"'use strict'\n\nmodule.exports = joinLinesWithIndentation\n\n/**\n * @typedef {object} JoinLinesWithIndentationParams\n * @property {string} input The string to split and reformat.\n * @property {string} [ident] The indentation string. Default: ` ` (4 spaces).\n * @property {string} [eol] The end of line sequence to use when rejoining\n * the lines. Default: `'\\n'`.\n */\n\n/**\n * Given a string with line separators, either `\\r\\n` or `\\n`, add indentation\n * to all lines subsequent to the first line and rejoin the lines using an\n * end of line sequence.\n *\n * @param {JoinLinesWithIndentationParams} input\n *\n * @returns {string} A string with lines subsequent to the first indented\n * with the given indentation sequence.\n */\nfunction joinLinesWithIndentation ({ input, ident = ' ', eol = '\\n' }) {\n const lines = input.split(/\\r?\\n/)\n for (let i = 1; i < lines.length; i += 1) {\n lines[i] = ident + lines[i]\n }\n return lines.join(eol)\n}\n",
|
|
60
|
+
"'use strict'\n\nmodule.exports = parseFactoryOptions\n\nconst {\n LEVEL_NAMES\n} = require('../constants')\nconst colors = require('../colors')\nconst handleCustomLevelsOpts = require('./handle-custom-levels-opts')\nconst handleCustomLevelsNamesOpts = require('./handle-custom-levels-names-opts')\nconst handleLevelLabelData = require('./get-level-label-data')\n\n/**\n * A `PrettyContext` is an object to be used by the various functions that\n * process log data. It is derived from the provided {@link PinoPrettyOptions}.\n * It may be used as a `this` context.\n *\n * @typedef {object} PrettyContext\n * @property {string} EOL The escape sequence chosen as the line terminator.\n * @property {string} IDENT The string to use as the indentation sequence.\n * @property {ColorizerFunc} colorizer A configured colorizer function.\n * @property {Array[Array<number, string>]} customColors A set of custom color\n * names associated with level numbers.\n * @property {object} customLevelNames A hash of level numbers to level names,\n * e.g. `{ 30: \"info\" }`.\n * @property {object} customLevels A hash of level names to level numbers,\n * e.g. `{ info: 30 }`.\n * @property {CustomPrettifiers} customPrettifiers A hash of custom prettifier\n * functions.\n * @property {object} customProperties Comprised of `customLevels` and\n * `customLevelNames` if such options are provided.\n * @property {string[]} errorLikeObjectKeys The key names in the log data that\n * should be considered as holding error objects.\n * @property {string[]} errorProps A list of error object keys that should be\n * included in the output.\n * @property {function} getLevelLabelData Pass a numeric level to return [levelLabelString,levelNum]\n * @property {boolean} hideObject Indicates the prettifier should omit objects\n * in the output.\n * @property {string[]} ignoreKeys Set of log data keys to omit.\n * @property {string[]} includeKeys Opposite of `ignoreKeys`.\n * @property {boolean} levelFirst Indicates the level should be printed first.\n * @property {string} levelKey Name of the key in the log data that contains\n * the message.\n * @property {string} levelLabel Format token to represent the position of the\n * level name in the output string.\n * @property {MessageFormatString|MessageFormatFunction} messageFormat\n * @property {string} messageKey Name of the key in the log data that contains\n * the message.\n * @property {string|number} minimumLevel The minimum log level to process\n * and output.\n * @property {ColorizerFunc} objectColorizer\n * @property {boolean} singleLine Indicates objects should be printed on a\n * single output line.\n * @property {string} timestampKey The name of the key in the log data that\n * contains the log timestamp.\n * @property {boolean} translateTime Indicates if timestamps should be\n * translated to a human-readable string.\n * @property {boolean} useOnlyCustomProps\n */\n\n/**\n * @param {PinoPrettyOptions} options The user supplied object of options.\n *\n * @returns {PrettyContext}\n */\nfunction parseFactoryOptions (options) {\n const EOL = options.crlf ? '\\r\\n' : '\\n'\n const IDENT = ' '\n const {\n customPrettifiers,\n errorLikeObjectKeys,\n hideObject,\n levelFirst,\n levelKey,\n levelLabel,\n messageFormat,\n messageKey,\n minimumLevel,\n singleLine,\n timestampKey,\n translateTime\n } = options\n const errorProps = options.errorProps.split(',')\n const useOnlyCustomProps = typeof options.useOnlyCustomProps === 'boolean'\n ? options.useOnlyCustomProps\n : (options.useOnlyCustomProps === 'true')\n const customLevels = handleCustomLevelsOpts(options.customLevels)\n const customLevelNames = handleCustomLevelsNamesOpts(options.customLevels)\n const getLevelLabelData = handleLevelLabelData(useOnlyCustomProps, customLevels, customLevelNames)\n\n let customColors\n if (options.customColors) {\n if (typeof options.customColors === 'string') {\n customColors = options.customColors.split(',').reduce((agg, value) => {\n const [level, color] = value.split(':')\n const condition = useOnlyCustomProps\n ? options.customLevels\n : customLevelNames[level] !== undefined\n const levelNum = condition\n ? customLevelNames[level]\n : LEVEL_NAMES[level]\n const colorIdx = levelNum !== undefined\n ? levelNum\n : level\n agg.push([colorIdx, color])\n return agg\n }, [])\n } else if (typeof options.customColors === 'object') {\n customColors = Object.keys(options.customColors).reduce((agg, value) => {\n const [level, color] = [value, options.customColors[value]]\n const condition = useOnlyCustomProps\n ? options.customLevels\n : customLevelNames[level] !== undefined\n const levelNum = condition\n ? customLevelNames[level]\n : LEVEL_NAMES[level]\n const colorIdx = levelNum !== undefined\n ? levelNum\n : level\n agg.push([colorIdx, color])\n return agg\n }, [])\n } else {\n throw new Error('options.customColors must be of type string or object.')\n }\n }\n\n const customProperties = { customLevels, customLevelNames }\n if (useOnlyCustomProps === true && !options.customLevels) {\n customProperties.customLevels = undefined\n customProperties.customLevelNames = undefined\n }\n\n const includeKeys = options.include !== undefined\n ? new Set(options.include.split(','))\n : undefined\n const ignoreKeys = (!includeKeys && options.ignore)\n ? new Set(options.ignore.split(','))\n : undefined\n\n const colorizer = colors(options.colorize, customColors, useOnlyCustomProps)\n const objectColorizer = options.colorizeObjects\n ? colorizer\n : colors(false, [], false)\n\n return {\n EOL,\n IDENT,\n colorizer,\n customColors,\n customLevelNames,\n customLevels,\n customPrettifiers,\n customProperties,\n errorLikeObjectKeys,\n errorProps,\n getLevelLabelData,\n hideObject,\n ignoreKeys,\n includeKeys,\n levelFirst,\n levelKey,\n levelLabel,\n messageFormat,\n messageKey,\n minimumLevel,\n objectColorizer,\n singleLine,\n timestampKey,\n translateTime,\n useOnlyCustomProps\n }\n}\n",
|
|
61
|
+
"module.exports = stringify\nstringify.default = stringify\nstringify.stable = deterministicStringify\nstringify.stableStringify = deterministicStringify\n\nvar LIMIT_REPLACE_NODE = '[...]'\nvar CIRCULAR_REPLACE_NODE = '[Circular]'\n\nvar arr = []\nvar replacerStack = []\n\nfunction defaultOptions () {\n return {\n depthLimit: Number.MAX_SAFE_INTEGER,\n edgesLimit: Number.MAX_SAFE_INTEGER\n }\n}\n\n// Regular stringify\nfunction stringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n decirc(obj, '', 0, [], undefined, 0, options)\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(obj, replacer, spacer)\n } else {\n res = JSON.stringify(obj, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction setReplace (replace, val, k, parent) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k)\n if (propertyDescriptor.get !== undefined) {\n if (propertyDescriptor.configurable) {\n Object.defineProperty(parent, k, { value: replace })\n arr.push([parent, k, val, propertyDescriptor])\n } else {\n replacerStack.push([val, k, replace])\n }\n } else {\n parent[k] = replace\n arr.push([parent, k, val])\n }\n}\n\nfunction decirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n decirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n var keys = Object.keys(val)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n decirc(val[key], key, i, stack, val, depth, options)\n }\n }\n stack.pop()\n }\n}\n\n// Stable-stringify\nfunction compareFunction (a, b) {\n if (a < b) {\n return -1\n }\n if (a > b) {\n return 1\n }\n return 0\n}\n\nfunction deterministicStringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(tmp, replacer, spacer)\n } else {\n res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n // Ensure that we restore the object as it was.\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction deterministicDecirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n try {\n if (typeof val.toJSON === 'function') {\n return\n }\n } catch (_) {\n return\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n deterministicDecirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n // Create a temporary object in the required way\n var tmp = {}\n var keys = Object.keys(val).sort(compareFunction)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n deterministicDecirc(val[key], key, i, stack, val, depth, options)\n tmp[key] = val[key]\n }\n if (typeof parent !== 'undefined') {\n arr.push([parent, k, val])\n parent[k] = tmp\n } else {\n return tmp\n }\n }\n stack.pop()\n }\n}\n\n// wraps replacer function to handle values we couldn't replace\n// and mark them as replaced value\nfunction replaceGetterValues (replacer) {\n replacer =\n typeof replacer !== 'undefined'\n ? replacer\n : function (k, v) {\n return v\n }\n return function (key, val) {\n if (replacerStack.length > 0) {\n for (var i = 0; i < replacerStack.length; i++) {\n var part = replacerStack[i]\n if (part[1] === key && part[0] === val) {\n val = part[2]\n replacerStack.splice(i, 1)\n break\n }\n }\n }\n return replacer.call(this, key, val)\n }\n}\n",
|
|
62
|
+
"'use strict'\n\nmodule.exports = prettifyError\n\nconst joinLinesWithIndentation = require('./join-lines-with-indentation')\n\n/**\n * @typedef {object} PrettifyErrorParams\n * @property {string} keyName The key assigned to this error in the log object.\n * @property {string} lines The STRINGIFIED error. If the error field has a\n * custom prettifier, that should be pre-applied as well.\n * @property {string} ident The indentation sequence to use.\n * @property {string} eol The EOL sequence to use.\n */\n\n/**\n * Prettifies an error string into a multi-line format.\n *\n * @param {PrettifyErrorParams} input\n *\n * @returns {string}\n */\nfunction prettifyError ({ keyName, lines, eol, ident }) {\n let result = ''\n const joinedLines = joinLinesWithIndentation({ input: lines, ident, eol })\n const splitLines = `${ident}${keyName}: ${joinedLines}${eol}`.split(eol)\n\n for (let j = 0; j < splitLines.length; j += 1) {\n if (j !== 0) result += eol\n\n const line = splitLines[j]\n if (/^\\s*\"stack\"/.test(line)) {\n const matches = /^(\\s*\"stack\":)\\s*(\".*\"),?$/.exec(line)\n /* istanbul ignore else */\n if (matches && matches.length === 3) {\n const indentSize = /^\\s*/.exec(line)[0].length + 4\n const indentation = ' '.repeat(indentSize)\n const stackMessage = matches[2]\n result += matches[1] + eol + indentation + JSON.parse(stackMessage).replace(/\\n/g, eol + indentation)\n } else {\n result += line\n }\n } else {\n result += line\n }\n }\n\n return result\n}\n",
|
|
63
|
+
"'use strict'\n\nmodule.exports = prettifyObject\n\nconst {\n LOGGER_KEYS\n} = require('../constants')\n\nconst stringifySafe = require('fast-safe-stringify')\nconst joinLinesWithIndentation = require('./join-lines-with-indentation')\nconst prettifyError = require('./prettify-error')\n\n/**\n * @typedef {object} PrettifyObjectParams\n * @property {object} log The object to prettify.\n * @property {boolean} [excludeLoggerKeys] Indicates if known logger specific\n * keys should be excluded from prettification. Default: `true`.\n * @property {string[]} [skipKeys] A set of object keys to exclude from the\n * * prettified result. Default: `[]`.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Prettifies a standard object. Special care is taken when processing the object\n * to handle child objects that are attached to keys known to contain error\n * objects.\n *\n * @param {PrettifyObjectParams} input\n *\n * @returns {string} The prettified string. This can be as little as `''` if\n * there was nothing to prettify.\n */\nfunction prettifyObject ({\n log,\n excludeLoggerKeys = true,\n skipKeys = [],\n context\n}) {\n const {\n EOL: eol,\n IDENT: ident,\n customPrettifiers,\n errorLikeObjectKeys: errorLikeKeys,\n objectColorizer,\n singleLine,\n colorizer\n } = context\n const keysToIgnore = [].concat(skipKeys)\n\n /* istanbul ignore else */\n if (excludeLoggerKeys === true) Array.prototype.push.apply(keysToIgnore, LOGGER_KEYS)\n\n let result = ''\n\n // Split object keys into two categories: error and non-error\n const { plain, errors } = Object.entries(log).reduce(({ plain, errors }, [k, v]) => {\n if (keysToIgnore.includes(k) === false) {\n // Pre-apply custom prettifiers, because all 3 cases below will need this\n const pretty = typeof customPrettifiers[k] === 'function'\n ? customPrettifiers[k](v, k, log, { colors: colorizer.colors })\n : v\n if (errorLikeKeys.includes(k)) {\n errors[k] = pretty\n } else {\n plain[k] = pretty\n }\n }\n return { plain, errors }\n }, { plain: {}, errors: {} })\n\n if (singleLine) {\n // Stringify the entire object as a single JSON line\n /* istanbul ignore else */\n if (Object.keys(plain).length > 0) {\n result += objectColorizer.greyMessage(stringifySafe(plain))\n }\n result += eol\n // Avoid printing the escape character on escaped backslashes.\n result = result.replace(/\\\\\\\\/gi, '\\\\')\n } else {\n // Put each object entry on its own line\n Object.entries(plain).forEach(([keyName, keyValue]) => {\n // custom prettifiers are already applied above, so we can skip it now\n let lines = typeof customPrettifiers[keyName] === 'function'\n ? keyValue\n : stringifySafe(keyValue, null, 2)\n\n if (lines === undefined) return\n\n // Avoid printing the escape character on escaped backslashes.\n lines = lines.replace(/\\\\\\\\/gi, '\\\\')\n\n const joinedLines = joinLinesWithIndentation({ input: lines, ident, eol })\n result += `${ident}${objectColorizer.property(keyName)}:${joinedLines.startsWith(eol) ? '' : ' '}${joinedLines}${eol}`\n })\n }\n\n // Errors\n Object.entries(errors).forEach(([keyName, keyValue]) => {\n // custom prettifiers are already applied above, so we can skip it now\n const lines = typeof customPrettifiers[keyName] === 'function'\n ? keyValue\n : stringifySafe(keyValue, null, 2)\n\n if (lines === undefined) return\n\n result += prettifyError({ keyName, lines, eol, ident })\n })\n\n return result\n}\n",
|
|
64
|
+
"'use strict'\n\nmodule.exports = prettifyErrorLog\n\nconst {\n LOGGER_KEYS\n} = require('../constants')\n\nconst isObject = require('./is-object')\nconst joinLinesWithIndentation = require('./join-lines-with-indentation')\nconst prettifyObject = require('./prettify-object')\n\n/**\n * @typedef {object} PrettifyErrorLogParams\n * @property {object} log The error log to prettify.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Given a log object that has a `type: 'Error'` key, prettify the object and\n * return the result. In other\n *\n * @param {PrettifyErrorLogParams} input\n *\n * @returns {string} A string that represents the prettified error log.\n */\nfunction prettifyErrorLog ({ log, context }) {\n const {\n EOL: eol,\n IDENT: ident,\n errorProps: errorProperties,\n messageKey\n } = context\n const stack = log.stack\n const joinedLines = joinLinesWithIndentation({ input: stack, ident, eol })\n let result = `${ident}${joinedLines}${eol}`\n\n if (errorProperties.length > 0) {\n const excludeProperties = LOGGER_KEYS.concat(messageKey, 'type', 'stack')\n let propertiesToPrint\n if (errorProperties[0] === '*') {\n // Print all sibling properties except for the standard exclusions.\n propertiesToPrint = Object.keys(log).filter(k => excludeProperties.includes(k) === false)\n } else {\n // Print only specified properties unless the property is a standard exclusion.\n propertiesToPrint = errorProperties.filter(k => excludeProperties.includes(k) === false)\n }\n\n for (let i = 0; i < propertiesToPrint.length; i += 1) {\n const key = propertiesToPrint[i]\n if (key in log === false) continue\n if (isObject(log[key])) {\n // The nested object may have \"logger\" type keys but since they are not\n // at the root level of the object being processed, we want to print them.\n // Thus, we invoke with `excludeLoggerKeys: false`.\n const prettifiedObject = prettifyObject({\n log: log[key],\n excludeLoggerKeys: false,\n context: {\n ...context,\n IDENT: ident + ident\n }\n })\n result = `${result}${ident}${key}: {${eol}${prettifiedObject}${ident}}${eol}`\n continue\n }\n result = `${result}${ident}${key}: ${log[key]}${eol}`\n }\n }\n\n return result\n}\n",
|
|
65
|
+
"'use strict'\n\nmodule.exports = prettifyLevel\n\nconst getPropertyValue = require('./get-property-value')\n\n/**\n * @typedef {object} PrettifyLevelParams\n * @property {object} log The log object.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Checks if the passed in log has a `level` value and returns a prettified\n * string for that level if so.\n *\n * @param {PrettifyLevelParams} input\n *\n * @returns {undefined|string} If `log` does not have a `level` property then\n * `undefined` will be returned. Otherwise, a string from the specified\n * `colorizer` is returned.\n */\nfunction prettifyLevel ({ log, context }) {\n const {\n colorizer,\n customLevels,\n customLevelNames,\n levelKey,\n getLevelLabelData\n } = context\n const prettifier = context.customPrettifiers?.level\n const output = getPropertyValue(log, levelKey)\n if (output === undefined) return undefined\n const labelColorized = colorizer(output, { customLevels, customLevelNames })\n if (prettifier) {\n const [label] = getLevelLabelData(output)\n return prettifier(output, levelKey, log, { label, labelColorized, colors: colorizer.colors })\n }\n return labelColorized\n}\n",
|
|
66
|
+
"'use strict'\n\nmodule.exports = prettifyMessage\n\nconst {\n LEVELS\n} = require('../constants')\n\nconst getPropertyValue = require('./get-property-value')\nconst interpretConditionals = require('./interpret-conditionals')\n\n/**\n * @typedef {object} PrettifyMessageParams\n * @property {object} log The log object with the message to colorize.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Prettifies a message string if the given `log` has a message property.\n *\n * @param {PrettifyMessageParams} input\n *\n * @returns {undefined|string} If the message key is not found, or the message\n * key is not a string, then `undefined` will be returned. Otherwise, a string\n * that is the prettified message.\n */\nfunction prettifyMessage ({ log, context }) {\n const {\n colorizer,\n customLevels,\n levelKey,\n levelLabel,\n messageFormat,\n messageKey,\n useOnlyCustomProps\n } = context\n if (messageFormat && typeof messageFormat === 'string') {\n const parsedMessageFormat = interpretConditionals(messageFormat, log)\n\n const message = String(parsedMessageFormat).replace(\n /{([^{}]+)}/g,\n function (match, p1) {\n // return log level as string instead of int\n let level\n if (p1 === levelLabel && (level = getPropertyValue(log, levelKey)) !== undefined) {\n const condition = useOnlyCustomProps ? customLevels === undefined : customLevels[level] === undefined\n return condition ? LEVELS[level] : customLevels[level]\n }\n\n // Parse nested key access, e.g. `{keyA.subKeyB}`.\n return getPropertyValue(log, p1) || ''\n })\n return colorizer.message(message)\n }\n if (messageFormat && typeof messageFormat === 'function') {\n const msg = messageFormat(log, messageKey, levelLabel, { colors: colorizer.colors })\n return colorizer.message(msg)\n }\n if (messageKey in log === false) return undefined\n if (typeof log[messageKey] !== 'string' && typeof log[messageKey] !== 'number' && typeof log[messageKey] !== 'boolean') return undefined\n return colorizer.message(log[messageKey])\n}\n",
|
|
67
|
+
"'use strict'\n\nmodule.exports = prettifyMetadata\n\n/**\n * @typedef {object} PrettifyMetadataParams\n * @property {object} log The log that may or may not contain metadata to\n * be prettified.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Prettifies metadata that is usually present in a Pino log line. It looks for\n * fields `name`, `pid`, `hostname`, and `caller` and returns a formatted string using\n * the fields it finds.\n *\n * @param {PrettifyMetadataParams} input\n *\n * @returns {undefined|string} If no metadata is found then `undefined` is\n * returned. Otherwise, a string of prettified metadata is returned.\n */\nfunction prettifyMetadata ({ log, context }) {\n const { customPrettifiers: prettifiers, colorizer } = context\n let line = ''\n\n if (log.name || log.pid || log.hostname) {\n line += '('\n\n if (log.name) {\n line += prettifiers.name\n ? prettifiers.name(log.name, 'name', log, { colors: colorizer.colors })\n : log.name\n }\n\n if (log.pid) {\n const prettyPid = prettifiers.pid\n ? prettifiers.pid(log.pid, 'pid', log, { colors: colorizer.colors })\n : log.pid\n if (log.name && log.pid) {\n line += '/' + prettyPid\n } else {\n line += prettyPid\n }\n }\n\n if (log.hostname) {\n // If `pid` and `name` were in the ignore keys list then we don't need\n // the leading space.\n const prettyHostname = prettifiers.hostname\n ? prettifiers.hostname(log.hostname, 'hostname', log, { colors: colorizer.colors })\n : log.hostname\n\n line += `${line === '(' ? 'on' : ' on'} ${prettyHostname}`\n }\n\n line += ')'\n }\n\n if (log.caller) {\n const prettyCaller = prettifiers.caller\n ? prettifiers.caller(log.caller, 'caller', log, { colors: colorizer.colors })\n : log.caller\n\n line += `${line === '' ? '' : ' '}<${prettyCaller}>`\n }\n\n if (line === '') {\n return undefined\n } else {\n return line\n }\n}\n",
|
|
68
|
+
"'use strict'\n\nmodule.exports = prettifyTime\n\nconst formatTime = require('./format-time')\n\n/**\n * @typedef {object} PrettifyTimeParams\n * @property {object} log The log object with the timestamp to be prettified.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Prettifies a timestamp if the given `log` has either `time`, `timestamp` or custom specified timestamp\n * property.\n *\n * @param {PrettifyTimeParams} input\n *\n * @returns {undefined|string} If a timestamp property cannot be found then\n * `undefined` is returned. Otherwise, the prettified time is returned as a\n * string.\n */\nfunction prettifyTime ({ log, context }) {\n const {\n timestampKey,\n translateTime: translateFormat\n } = context\n const prettifier = context.customPrettifiers?.time\n let time = null\n\n if (timestampKey in log) {\n time = log[timestampKey]\n } else if ('timestamp' in log) {\n time = log.timestamp\n }\n\n if (time === null) return undefined\n const output = translateFormat ? formatTime(time, translateFormat) : time\n\n return prettifier ? prettifier(output) : `[${output}]`\n}\n",
|
|
69
|
+
"'use strict'\n\nmodule.exports = {\n buildSafeSonicBoom: require('./build-safe-sonic-boom.js'),\n createDate: require('./create-date.js'),\n deleteLogProperty: require('./delete-log-property.js'),\n filterLog: require('./filter-log.js'),\n formatTime: require('./format-time.js'),\n getPropertyValue: require('./get-property-value.js'),\n handleCustomLevelsNamesOpts: require('./handle-custom-levels-names-opts.js'),\n handleCustomLevelsOpts: require('./handle-custom-levels-opts.js'),\n interpretConditionals: require('./interpret-conditionals.js'),\n isObject: require('./is-object.js'),\n isValidDate: require('./is-valid-date.js'),\n joinLinesWithIndentation: require('./join-lines-with-indentation.js'),\n noop: require('./noop.js'),\n parseFactoryOptions: require('./parse-factory-options.js'),\n prettifyErrorLog: require('./prettify-error-log.js'),\n prettifyError: require('./prettify-error.js'),\n prettifyLevel: require('./prettify-level.js'),\n prettifyMessage: require('./prettify-message.js'),\n prettifyMetadata: require('./prettify-metadata.js'),\n prettifyObject: require('./prettify-object.js'),\n prettifyTime: require('./prettify-time.js'),\n splitPropertyKey: require('./split-property-key.js'),\n getLevelLabelData: require('./get-level-label-data')\n}\n\n// The remainder of this file consists of jsdoc blocks that are difficult to\n// determine a more appropriate \"home\" for. As an example, the blocks associated\n// with custom prettifiers could live in either the `prettify-level`,\n// `prettify-metadata`, or `prettify-time` files since they are the primary\n// files where such code is used. But we want a central place to define common\n// doc blocks, so we are picking this file as the answer.\n\n/**\n * A hash of log property names mapped to prettifier functions. When the\n * incoming log data is being processed for prettification, any key on the log\n * that matches a key in a custom prettifiers hash will be prettified using\n * that matching custom prettifier. The value passed to the custom prettifier\n * will the value associated with the corresponding log key.\n *\n * The hash may contain any arbitrary keys for arbitrary log properties, but it\n * may also contain a set of predefined key names that map to well-known log\n * properties. These keys are:\n *\n * + `time` (for the timestamp field)\n * + `level` (for the level label field; value may be a level number instead\n * of a level label)\n * + `hostname`\n * + `pid`\n * + `name`\n * + `caller`\n *\n * @typedef {Object.<string, CustomPrettifierFunc>} CustomPrettifiers\n */\n\n/**\n * A synchronous function to be used for prettifying a log property. It must\n * return a string.\n *\n * @typedef {function} CustomPrettifierFunc\n * @param {any} value The value to be prettified for the key associated with\n * the prettifier.\n * @returns {string}\n */\n\n/**\n * A tokenized string that indicates how the prettified log line should be\n * formatted. Tokens are either log properties enclosed in curly braces, e.g.\n * `{levelLabel}`, `{pid}`, or `{req.url}`, or conditional directives in curly\n * braces. The only conditional directives supported are `if` and `end`, e.g.\n * `{if pid}{pid}{end}`; every `if` must have a matching `end`. Nested\n * conditions are not supported.\n *\n * @typedef {string} MessageFormatString\n *\n * @example\n * `{levelLabel} - {if pid}{pid} - {end}url:{req.url}`\n */\n\n/**\n * @typedef {object} PrettifyMessageExtras\n * @property {object} colors Available color functions based on `useColor` (or `colorize`) context\n * the options.\n */\n\n/**\n * A function that accepts a log object, name of the message key, and name of\n * the level label key and returns a formatted log line.\n *\n * Note: this function must be synchronous.\n *\n * @typedef {function} MessageFormatFunction\n * @param {object} log The log object to be processed.\n * @param {string} messageKey The name of the key in the `log` object that\n * contains the log message.\n * @param {string} levelLabel The name of the key in the `log` object that\n * contains the log level name.\n * @param {PrettifyMessageExtras} extras Additional data available for message context\n * @returns {string}\n *\n * @example\n * function (log, messageKey, levelLabel) {\n * return `${log[levelLabel]} - ${log[messageKey]}`\n * }\n */\n",
|
|
70
|
+
"'use strict'\n\nconst hasBuffer = typeof Buffer !== 'undefined'\nconst suspectProtoRx = /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/\nconst suspectConstructorRx = /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/\n\n/**\n * @description Internal parse function that parses JSON text with security checks.\n * @private\n * @param {string|Buffer} text - The JSON text string or Buffer to parse.\n * @param {Function} [reviver] - The JSON.parse() optional reviver argument.\n * @param {import('./types').ParseOptions} [options] - Optional configuration object.\n * @returns {*} The parsed object.\n * @throws {SyntaxError} If a forbidden prototype property is found and `options.protoAction` or\n * `options.constructorAction` is `'error'`.\n */\nfunction _parse (text, reviver, options) {\n // Normalize arguments\n if (options == null) {\n if (reviver !== null && typeof reviver === 'object') {\n options = reviver\n reviver = undefined\n }\n }\n\n if (hasBuffer && Buffer.isBuffer(text)) {\n text = text.toString()\n }\n\n // BOM checker\n if (text && text.charCodeAt(0) === 0xFEFF) {\n text = text.slice(1)\n }\n\n // Parse normally, allowing exceptions\n const obj = JSON.parse(text, reviver)\n\n // Ignore null and non-objects\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n const protoAction = (options && options.protoAction) || 'error'\n const constructorAction = (options && options.constructorAction) || 'error'\n\n // options: 'error' (default) / 'remove' / 'ignore'\n if (protoAction === 'ignore' && constructorAction === 'ignore') {\n return obj\n }\n\n if (protoAction !== 'ignore' && constructorAction !== 'ignore') {\n if (suspectProtoRx.test(text) === false && suspectConstructorRx.test(text) === false) {\n return obj\n }\n } else if (protoAction !== 'ignore' && constructorAction === 'ignore') {\n if (suspectProtoRx.test(text) === false) {\n return obj\n }\n } else {\n if (suspectConstructorRx.test(text) === false) {\n return obj\n }\n }\n\n // Scan result for proto keys\n return filter(obj, { protoAction, constructorAction, safe: options && options.safe })\n}\n\n/**\n * @description Scans and filters an object for forbidden prototype properties.\n * @param {Object} obj - The object being scanned.\n * @param {import('./types').ParseOptions} [options] - Optional configuration object.\n * @returns {Object|null} The filtered object, or `null` if safe mode is enabled and issues are found.\n * @throws {SyntaxError} If a forbidden prototype property is found and `options.protoAction` or\n * `options.constructorAction` is `'error'`.\n */\nfunction filter (obj, { protoAction = 'error', constructorAction = 'error', safe } = {}) {\n let next = [obj]\n\n while (next.length) {\n const nodes = next\n next = []\n\n for (const node of nodes) {\n if (protoAction !== 'ignore' && Object.prototype.hasOwnProperty.call(node, '__proto__')) { // Avoid calling node.hasOwnProperty directly\n if (safe === true) {\n return null\n } else if (protoAction === 'error') {\n throw new SyntaxError('Object contains forbidden prototype property')\n }\n\n delete node.__proto__ // eslint-disable-line no-proto\n }\n\n if (constructorAction !== 'ignore' &&\n Object.prototype.hasOwnProperty.call(node, 'constructor') &&\n node.constructor !== null &&\n typeof node.constructor === 'object' &&\n Object.prototype.hasOwnProperty.call(node.constructor, 'prototype')) { // Avoid calling node.hasOwnProperty directly\n if (safe === true) {\n return null\n } else if (constructorAction === 'error') {\n throw new SyntaxError('Object contains forbidden prototype property')\n }\n\n delete node.constructor\n }\n\n for (const key in node) {\n const value = node[key]\n if (value && typeof value === 'object') {\n next.push(value)\n }\n }\n }\n }\n return obj\n}\n\n/**\n * @description Parses a given JSON-formatted text into an object.\n * @param {string|Buffer} text - The JSON text string or Buffer to parse.\n * @param {Function} [reviver] - The `JSON.parse()` optional reviver argument, or options object.\n * @param {import('./types').ParseOptions} [options] - Optional configuration object.\n * @returns {*} The parsed object.\n * @throws {SyntaxError} If the JSON text is malformed or contains forbidden prototype properties\n * when `options.protoAction` or `options.constructorAction` is `'error'`.\n */\nfunction parse (text, reviver, options) {\n const { stackTraceLimit } = Error\n Error.stackTraceLimit = 0\n try {\n return _parse(text, reviver, options)\n } finally {\n Error.stackTraceLimit = stackTraceLimit\n }\n}\n\n/**\n * @description Safely parses a given JSON-formatted text into an object.\n * @param {string|Buffer} text - The JSON text string or Buffer to parse.\n * @param {Function} [reviver] - The `JSON.parse()` optional reviver argument.\n * @returns {*|null|undefined} The parsed object, `null` if security issues found, or `undefined` on parse error.\n */\nfunction safeParse (text, reviver) {\n const { stackTraceLimit } = Error\n Error.stackTraceLimit = 0\n try {\n return _parse(text, reviver, { safe: true })\n } catch {\n return undefined\n } finally {\n Error.stackTraceLimit = stackTraceLimit\n }\n}\n\nmodule.exports = parse\nmodule.exports.default = parse\nmodule.exports.parse = parse\nmodule.exports.safeParse = safeParse\nmodule.exports.scan = filter\n",
|
|
71
|
+
"'use strict'\n\nmodule.exports = pretty\n\nconst sjs = require('secure-json-parse')\n\nconst isObject = require('./utils/is-object')\nconst prettifyErrorLog = require('./utils/prettify-error-log')\nconst prettifyLevel = require('./utils/prettify-level')\nconst prettifyMessage = require('./utils/prettify-message')\nconst prettifyMetadata = require('./utils/prettify-metadata')\nconst prettifyObject = require('./utils/prettify-object')\nconst prettifyTime = require('./utils/prettify-time')\nconst filterLog = require('./utils/filter-log')\n\nconst {\n LEVELS,\n LEVEL_KEY,\n LEVEL_NAMES\n} = require('./constants')\n\nconst jsonParser = input => {\n try {\n return { value: sjs.parse(input, { protoAction: 'remove' }) }\n } catch (err) {\n return { err }\n }\n}\n\n/**\n * Orchestrates processing the received log data according to the provided\n * configuration and returns a prettified log string.\n *\n * @typedef {function} LogPrettifierFunc\n * @param {string|object} inputData A log string or a log-like object.\n * @returns {string} A string that represents the prettified log data.\n */\nfunction pretty (inputData) {\n let log\n if (!isObject(inputData)) {\n const parsed = jsonParser(inputData)\n if (parsed.err || !isObject(parsed.value)) {\n // pass through\n return inputData + this.EOL\n }\n log = parsed.value\n } else {\n log = inputData\n }\n\n if (this.minimumLevel) {\n // We need to figure out if the custom levels has the desired minimum\n // level & use that one if found. If not, determine if the level exists\n // in the standard levels. In both cases, make sure we have the level\n // number instead of the level name.\n let condition\n if (this.useOnlyCustomProps) {\n condition = this.customLevels\n } else {\n condition = this.customLevelNames[this.minimumLevel] !== undefined\n }\n let minimum\n if (condition) {\n minimum = this.customLevelNames[this.minimumLevel]\n } else {\n minimum = LEVEL_NAMES[this.minimumLevel]\n }\n if (!minimum) {\n minimum = typeof this.minimumLevel === 'string'\n ? LEVEL_NAMES[this.minimumLevel]\n : LEVEL_NAMES[LEVELS[this.minimumLevel].toLowerCase()]\n }\n\n const level = log[this.levelKey === undefined ? LEVEL_KEY : this.levelKey]\n if (level < minimum) return\n }\n\n const prettifiedMessage = prettifyMessage({ log, context: this.context })\n\n if (this.ignoreKeys || this.includeKeys) {\n log = filterLog({ log, context: this.context })\n }\n\n const prettifiedLevel = prettifyLevel({\n log,\n context: {\n ...this.context,\n // This is odd. The colorizer ends up relying on the value of\n // `customProperties` instead of the original `customLevels` and\n // `customLevelNames`.\n ...this.context.customProperties\n }\n })\n const prettifiedMetadata = prettifyMetadata({ log, context: this.context })\n const prettifiedTime = prettifyTime({ log, context: this.context })\n\n let line = ''\n if (this.levelFirst && prettifiedLevel) {\n line = `${prettifiedLevel}`\n }\n\n if (prettifiedTime && line === '') {\n line = `${prettifiedTime}`\n } else if (prettifiedTime) {\n line = `${line} ${prettifiedTime}`\n }\n\n if (!this.levelFirst && prettifiedLevel) {\n if (line.length > 0) {\n line = `${line} ${prettifiedLevel}`\n } else {\n line = prettifiedLevel\n }\n }\n\n if (prettifiedMetadata) {\n if (line.length > 0) {\n line = `${line} ${prettifiedMetadata}:`\n } else {\n line = prettifiedMetadata\n }\n }\n\n if (line.endsWith(':') === false && line !== '') {\n line += ':'\n }\n\n if (prettifiedMessage !== undefined) {\n if (line.length > 0) {\n line = `${line} ${prettifiedMessage}`\n } else {\n line = prettifiedMessage\n }\n }\n\n if (line.length > 0 && !this.singleLine) {\n line += this.EOL\n }\n\n // pino@7+ does not log this anymore\n if (log.type === 'Error' && typeof log.stack === 'string') {\n const prettifiedErrorLog = prettifyErrorLog({ log, context: this.context })\n if (this.singleLine) line += this.EOL\n line += prettifiedErrorLog\n } else if (this.hideObject === false) {\n const skipKeys = [\n this.messageKey,\n this.levelKey,\n this.timestampKey\n ]\n .map((key) => key.replaceAll(/\\\\/g, ''))\n .filter(key => {\n return typeof log[key] === 'string' ||\n typeof log[key] === 'number' ||\n typeof log[key] === 'boolean'\n })\n const prettifiedObject = prettifyObject({\n log,\n skipKeys,\n context: this.context\n })\n\n // In single line mode, include a space only if prettified version isn't empty\n if (this.singleLine && !/^\\s$/.test(prettifiedObject)) {\n line += ' '\n }\n line += prettifiedObject\n }\n\n return line\n}\n",
|
|
72
|
+
"'use strict'\n\nconst { isColorSupported } = require('colorette')\nconst pump = require('pump')\nconst { Transform } = require('node:stream')\nconst abstractTransport = require('pino-abstract-transport')\nconst colors = require('./lib/colors')\nconst {\n ERROR_LIKE_KEYS,\n LEVEL_KEY,\n LEVEL_LABEL,\n MESSAGE_KEY,\n TIMESTAMP_KEY\n} = require('./lib/constants')\nconst {\n buildSafeSonicBoom,\n parseFactoryOptions\n} = require('./lib/utils')\nconst pretty = require('./lib/pretty')\n\n/**\n * @typedef {object} PinoPrettyOptions\n * @property {boolean} [colorize] Indicates if colors should be used when\n * prettifying. The default will be determined by the terminal capabilities at\n * run time.\n * @property {boolean} [colorizeObjects=true] Apply coloring to rendered objects\n * when coloring is enabled.\n * @property {boolean} [crlf=false] End lines with `\\r\\n` instead of `\\n`.\n * @property {string|null} [customColors=null] A comma separated list of colors\n * to use for specific level labels, e.g. `err:red,info:blue`.\n * @property {string|null} [customLevels=null] A comma separated list of user\n * defined level names and numbers, e.g. `err:99,info:1`.\n * @property {CustomPrettifiers} [customPrettifiers={}] A set of prettifier\n * functions to apply to keys defined in this object.\n * @property {K_ERROR_LIKE_KEYS} [errorLikeObjectKeys] A list of string property\n * names to consider as error objects.\n * @property {string} [errorProps=''] A comma separated list of properties on\n * error objects to include in the output.\n * @property {boolean} [hideObject=false] When `true`, data objects will be\n * omitted from the output (except for error objects).\n * @property {string} [ignore='hostname'] A comma separated list of log keys\n * to omit when outputting the prettified log information.\n * @property {undefined|string} [include=undefined] A comma separated list of\n * log keys to include in the prettified log information. Only the keys in this\n * list will be included in the output.\n * @property {boolean} [levelFirst=false] When true, the log level will be the\n * first field in the prettified output.\n * @property {string} [levelKey='level'] The key name in the log data that\n * contains the level value for the log.\n * @property {string} [levelLabel='levelLabel'] Token name to use in\n * `messageFormat` to represent the name of the logged level.\n * @property {null|MessageFormatString|MessageFormatFunction} [messageFormat=null]\n * When a string, defines how the prettified line should be formatted according\n * to defined tokens. When a function, a synchronous function that returns a\n * formatted string.\n * @property {string} [messageKey='msg'] Defines the key in incoming logs that\n * contains the message of the log, if present.\n * @property {undefined|string|number} [minimumLevel=undefined] The minimum\n * level for logs that should be processed. Any logs below this level will\n * be omitted.\n * @property {object} [outputStream=process.stdout] The stream to write\n * prettified log lines to.\n * @property {boolean} [singleLine=false] When `true` any objects, except error\n * objects, in the log data will be printed as a single line instead as multiple\n * lines.\n * @property {string} [timestampKey='time'] Defines the key in incoming logs\n * that contains the timestamp of the log, if present.\n * @property {boolean|string} [translateTime=true] When true, will translate a\n * JavaScript date integer into a human-readable string. If set to a string,\n * it must be a format string.\n * @property {boolean} [useOnlyCustomProps=true] When true, only custom levels\n * and colors will be used if they have been provided.\n */\n\n/**\n * The default options that will be used when prettifying log lines.\n *\n * @type {PinoPrettyOptions}\n */\nconst defaultOptions = {\n colorize: isColorSupported,\n colorizeObjects: true,\n crlf: false,\n customColors: null,\n customLevels: null,\n customPrettifiers: {},\n errorLikeObjectKeys: ERROR_LIKE_KEYS,\n errorProps: '',\n hideObject: false,\n ignore: 'hostname',\n include: undefined,\n levelFirst: false,\n levelKey: LEVEL_KEY,\n levelLabel: LEVEL_LABEL,\n messageFormat: null,\n messageKey: MESSAGE_KEY,\n minimumLevel: undefined,\n outputStream: process.stdout,\n singleLine: false,\n timestampKey: TIMESTAMP_KEY,\n translateTime: true,\n useOnlyCustomProps: true\n}\n\n/**\n * Processes the supplied options and returns a function that accepts log data\n * and produces a prettified log string.\n *\n * @param {PinoPrettyOptions} options Configuration for the prettifier.\n * @returns {LogPrettifierFunc}\n */\nfunction prettyFactory (options) {\n const context = parseFactoryOptions(Object.assign({}, defaultOptions, options))\n return pretty.bind({ ...context, context })\n}\n\n/**\n * @typedef {PinoPrettyOptions} BuildStreamOpts\n * @property {object|number|string} [destination] A destination stream, file\n * descriptor, or target path to a file.\n * @property {boolean} [append]\n * @property {boolean} [mkdir]\n * @property {boolean} [sync=false]\n */\n\n/**\n * Constructs a {@link LogPrettifierFunc} and a stream to which the produced\n * prettified log data will be written.\n *\n * @param {BuildStreamOpts} opts\n * @returns {Transform | (Transform & OnUnknown)}\n */\nfunction build (opts = {}) {\n let pretty = prettyFactory(opts)\n let destination\n return abstractTransport(function (source) {\n source.on('message', function pinoConfigListener (message) {\n if (!message || message.code !== 'PINO_CONFIG') return\n Object.assign(opts, {\n messageKey: message.config.messageKey,\n errorLikeObjectKeys: Array.from(new Set([...(opts.errorLikeObjectKeys || ERROR_LIKE_KEYS), message.config.errorKey])),\n customLevels: message.config.levels.values\n })\n pretty = prettyFactory(opts)\n source.off('message', pinoConfigListener)\n })\n const stream = new Transform({\n objectMode: true,\n autoDestroy: true,\n transform (chunk, enc, cb) {\n const line = pretty(chunk)\n cb(null, line)\n }\n })\n\n if (typeof opts.destination === 'object' && typeof opts.destination.write === 'function') {\n destination = opts.destination\n } else {\n destination = buildSafeSonicBoom({\n dest: opts.destination || 1,\n append: opts.append,\n mkdir: opts.mkdir,\n sync: opts.sync // by default sonic will be async\n })\n }\n\n source.on('unknown', function (line) {\n destination.write(line + '\\n')\n })\n\n pump(source, stream, destination)\n return stream\n }, {\n parse: 'lines',\n close (err, cb) {\n destination.on('close', () => {\n cb(err)\n })\n }\n })\n}\n\nmodule.exports = build\nmodule.exports.build = build\nmodule.exports.PinoPretty = build\nmodule.exports.prettyFactory = prettyFactory\nmodule.exports.colorizerFactory = colors\nmodule.exports.isColorSupported = isColorSupported\nmodule.exports.default = build\n",
|
|
73
|
+
"/**\r\n * Cache system types\r\n */\r\n\r\n/**\r\n * Cache entry with data and expiration\r\n */\r\nexport interface CacheEntry<T = any> {\r\n data: T;\r\n expiresAt: number;\r\n createdAt: number;\r\n}\r\n\r\n/**\r\n * Cache store interface\r\n * Implement this interface to create custom cache backends\r\n */\r\nexport interface CacheStore {\r\n /**\r\n * Get a value from the cache\r\n * Returns null if the key doesn't exist or has expired\r\n */\r\n get<T = any>(key: string): Promise<T | null>;\r\n\r\n /**\r\n * Set a value in the cache with optional TTL\r\n * @param key - Cache key\r\n * @param value - Value to store\r\n * @param ttl - Time to live in seconds (0 = no expiration)\r\n */\r\n set<T = any>(key: string, value: T, ttl?: number): Promise<void>;\r\n\r\n /**\r\n * Delete a value from the cache\r\n */\r\n delete(key: string): Promise<boolean>;\r\n\r\n /**\r\n * Check if a key exists in the cache\r\n */\r\n has(key: string): Promise<boolean>;\r\n\r\n /**\r\n * Clear all values from the cache\r\n */\r\n clear(): Promise<void>;\r\n\r\n /**\r\n * Delete all keys matching a pattern\r\n * @param pattern - Pattern to match (supports wildcards like 'user:*')\r\n */\r\n deletePattern(pattern: string): Promise<number>;\r\n\r\n /**\r\n * Get all keys matching a pattern\r\n */\r\n keys(pattern?: string): Promise<string[]>;\r\n}\r\n\r\n/**\r\n * Cache configuration for decorators and middleware\r\n */\r\nexport interface CacheOptions {\r\n /**\r\n * Time to live in seconds\r\n * Can be a number or a string like '5m', '1h', '1d'\r\n */\r\n ttl: number | string;\r\n\r\n /**\r\n * Cache key\r\n * Can include placeholders like {id}, {userId}\r\n * If not provided, generates key from route and params\r\n */\r\n key?: string;\r\n\r\n /**\r\n * Key prefix for namespacing\r\n */\r\n prefix?: string;\r\n\r\n /**\r\n * Whether to include query parameters in cache key\r\n */\r\n includeQuery?: boolean;\r\n\r\n /**\r\n * Whether to vary cache by specific headers\r\n */\r\n varyByHeaders?: string[];\r\n\r\n /**\r\n * Custom condition to determine if response should be cached\r\n */\r\n condition?: (result: any) => boolean;\r\n\r\n /**\r\n * Cache store to use (defaults to global store)\r\n */\r\n store?: CacheStore;\r\n}\r\n\r\n/**\r\n * Parse TTL string to seconds\r\n * Supports: '5s', '5m', '5h', '5d'\r\n */\r\nexport function parseTTL(ttl: number | string): number {\r\n if (typeof ttl === 'number') {\r\n return ttl;\r\n }\r\n\r\n const match = ttl.match(/^(\\d+)([smhd])$/);\r\n if (!match) {\r\n throw new Error(`Invalid TTL format: ${ttl}. Use format like '5s', '5m', '5h', '5d' or a number`);\r\n }\r\n\r\n const value = parseInt(match[1], 10);\r\n const unit = match[2];\r\n\r\n switch (unit) {\r\n case 's': return value;\r\n case 'm': return value * 60;\r\n case 'h': return value * 3600;\r\n case 'd': return value * 86400;\r\n default: throw new Error(`Unknown TTL unit: ${unit}`);\r\n }\r\n}\r\n\r\n",
|
|
74
|
+
"/**\r\n * In-memory cache store implementation\r\n * Suitable for single-instance applications\r\n * For distributed systems, use Redis store\r\n */\r\n\r\nimport type { CacheStore, CacheEntry } from './types';\r\n\r\nexport class MemoryCacheStore implements CacheStore {\r\n private cache: Map<string, CacheEntry> = new Map();\r\n private cleanupInterval?: ReturnType<typeof setInterval>;\r\n private maxSize: number;\r\n\r\n constructor(options: {\r\n /**\r\n * Maximum number of entries (default: 1000)\r\n * When exceeded, oldest entries are removed (LRU)\r\n */\r\n maxSize?: number;\r\n \r\n /**\r\n * Cleanup interval in milliseconds (default: 60000 = 1 minute)\r\n * Set to 0 to disable automatic cleanup\r\n */\r\n cleanupInterval?: number;\r\n } = {}) {\r\n this.maxSize = options.maxSize || 1000;\r\n\r\n // Set up automatic cleanup of expired entries\r\n const intervalMs = options.cleanupInterval ?? 60000;\r\n if (intervalMs > 0) {\r\n this.cleanupInterval = setInterval(() => {\r\n this.cleanup();\r\n }, intervalMs);\r\n }\r\n }\r\n\r\n async get<T = any>(key: string): Promise<T | null> {\r\n const entry = this.cache.get(key);\r\n \r\n if (!entry) {\r\n return null;\r\n }\r\n\r\n // Check if expired\r\n if (entry.expiresAt > 0 && Date.now() > entry.expiresAt) {\r\n this.cache.delete(key);\r\n return null;\r\n }\r\n\r\n return entry.data as T;\r\n }\r\n\r\n async set<T = any>(key: string, value: T, ttl: number = 0): Promise<void> {\r\n // Check size limit and remove oldest if necessary\r\n if (this.cache.size >= this.maxSize && !this.cache.has(key)) {\r\n this.removeOldest();\r\n }\r\n\r\n const now = Date.now();\r\n const entry: CacheEntry<T> = {\r\n data: value,\r\n createdAt: now,\r\n expiresAt: ttl > 0 ? now + (ttl * 1000) : 0\r\n };\r\n\r\n this.cache.set(key, entry);\r\n }\r\n\r\n async delete(key: string): Promise<boolean> {\r\n return this.cache.delete(key);\r\n }\r\n\r\n async has(key: string): Promise<boolean> {\r\n const entry = this.cache.get(key);\r\n \r\n if (!entry) {\r\n return false;\r\n }\r\n\r\n // Check if expired\r\n if (entry.expiresAt > 0 && Date.now() > entry.expiresAt) {\r\n this.cache.delete(key);\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n async clear(): Promise<void> {\r\n this.cache.clear();\r\n }\r\n\r\n async deletePattern(pattern: string): Promise<number> {\r\n const regex = this.patternToRegex(pattern);\r\n let deleted = 0;\r\n\r\n for (const key of this.cache.keys()) {\r\n if (regex.test(key)) {\r\n this.cache.delete(key);\r\n deleted++;\r\n }\r\n }\r\n\r\n return deleted;\r\n }\r\n\r\n async keys(pattern?: string): Promise<string[]> {\r\n const allKeys = Array.from(this.cache.keys());\r\n \r\n if (!pattern) {\r\n return allKeys;\r\n }\r\n\r\n const regex = this.patternToRegex(pattern);\r\n return allKeys.filter(key => regex.test(key));\r\n }\r\n\r\n /**\r\n * Get cache statistics\r\n */\r\n getStats(): {\r\n size: number;\r\n maxSize: number;\r\n hitRate?: number;\r\n } {\r\n return {\r\n size: this.cache.size,\r\n maxSize: this.maxSize\r\n };\r\n }\r\n\r\n /**\r\n * Clean up expired entries\r\n */\r\n private cleanup(): void {\r\n const now = Date.now();\r\n \r\n for (const [key, entry] of this.cache.entries()) {\r\n if (entry.expiresAt > 0 && now > entry.expiresAt) {\r\n this.cache.delete(key);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove oldest entry (LRU eviction)\r\n */\r\n private removeOldest(): void {\r\n let oldestKey: string | null = null;\r\n let oldestTime = Infinity;\r\n\r\n for (const [key, entry] of this.cache.entries()) {\r\n if (entry.createdAt < oldestTime) {\r\n oldestTime = entry.createdAt;\r\n oldestKey = key;\r\n }\r\n }\r\n\r\n if (oldestKey) {\r\n this.cache.delete(oldestKey);\r\n }\r\n }\r\n\r\n /**\r\n * Convert glob pattern to regex\r\n */\r\n private patternToRegex(pattern: string): RegExp {\r\n // Escape special regex characters except *\r\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n // Convert * to .*\r\n const regex = escaped.replace(/\\*/g, '.*');\r\n return new RegExp(`^${regex}$`);\r\n }\r\n\r\n /**\r\n * Stop cleanup interval\r\n */\r\n destroy(): void {\r\n if (this.cleanupInterval) {\r\n clearInterval(this.cleanupInterval);\r\n }\r\n }\r\n}\r\n\r\n",
|
|
75
|
+
"/**\r\n * Cache manager for managing cache stores and providing utilities\r\n */\r\n\r\nimport type { CacheStore, CacheOptions } from './types';\r\nimport { parseTTL } from './types';\r\nimport { MemoryCacheStore } from './memory-store';\r\n\r\n/**\r\n * Global cache manager\r\n */\r\nexport class CacheManager {\r\n private static defaultStore: CacheStore = new MemoryCacheStore();\r\n private static stores: Map<string, CacheStore> = new Map();\r\n\r\n /**\r\n * Set the default cache store\r\n */\r\n static setDefaultStore(store: CacheStore): void {\r\n this.defaultStore = store;\r\n }\r\n\r\n /**\r\n * Get the default cache store\r\n */\r\n static getDefaultStore(): CacheStore {\r\n return this.defaultStore;\r\n }\r\n\r\n /**\r\n * Register a named cache store\r\n */\r\n static registerStore(name: string, store: CacheStore): void {\r\n this.stores.set(name, store);\r\n }\r\n\r\n /**\r\n * Get a named cache store\r\n */\r\n static getStore(name: string): CacheStore | undefined {\r\n return this.stores.get(name);\r\n }\r\n\r\n /**\r\n * Generate cache key from route and parameters\r\n */\r\n static generateKey(\r\n method: string,\r\n path: string,\r\n params?: Record<string, any>,\r\n query?: Record<string, any>,\r\n options?: Pick<CacheOptions, 'key' | 'prefix' | 'includeQuery'>\r\n ): string {\r\n const parts: string[] = [];\r\n\r\n // Add prefix if provided\r\n if (options?.prefix) {\r\n parts.push(options.prefix);\r\n }\r\n\r\n // Use custom key if provided\r\n if (options?.key) {\r\n let key = options.key;\r\n \r\n // Replace placeholders like {id}, {userId}\r\n if (params) {\r\n for (const [paramKey, paramValue] of Object.entries(params)) {\r\n key = key.replace(`{${paramKey}}`, String(paramValue));\r\n }\r\n }\r\n \r\n parts.push(key);\r\n } else {\r\n // Generate key from route\r\n parts.push(method.toLowerCase());\r\n parts.push(path.replace(/\\//g, ':'));\r\n\r\n // Add params to key\r\n if (params && Object.keys(params).length > 0) {\r\n parts.push(JSON.stringify(params));\r\n }\r\n }\r\n\r\n // Add query parameters if requested\r\n if (options?.includeQuery && query && Object.keys(query).length > 0) {\r\n const sortedQuery = Object.keys(query)\r\n .sort()\r\n .reduce((acc, key) => {\r\n acc[key] = query[key];\r\n return acc;\r\n }, {} as Record<string, any>);\r\n parts.push(JSON.stringify(sortedQuery));\r\n }\r\n\r\n return parts.join(':');\r\n }\r\n\r\n /**\r\n * Get value from cache\r\n */\r\n static async get<T = any>(\r\n key: string,\r\n store?: CacheStore\r\n ): Promise<T | null> {\r\n const cacheStore = store || this.defaultStore;\r\n return await cacheStore.get<T>(key);\r\n }\r\n\r\n /**\r\n * Set value in cache\r\n */\r\n static async set<T = any>(\r\n key: string,\r\n value: T,\r\n ttl?: number | string,\r\n store?: CacheStore\r\n ): Promise<void> {\r\n const cacheStore = store || this.defaultStore;\r\n const ttlSeconds = ttl ? parseTTL(ttl) : 0;\r\n await cacheStore.set(key, value, ttlSeconds);\r\n }\r\n\r\n /**\r\n * Delete value from cache\r\n */\r\n static async delete(\r\n key: string,\r\n store?: CacheStore\r\n ): Promise<boolean> {\r\n const cacheStore = store || this.defaultStore;\r\n return await cacheStore.delete(key);\r\n }\r\n\r\n /**\r\n * Delete all keys matching pattern\r\n */\r\n static async invalidate(\r\n pattern: string,\r\n store?: CacheStore\r\n ): Promise<number> {\r\n const cacheStore = store || this.defaultStore;\r\n return await cacheStore.deletePattern(pattern);\r\n }\r\n\r\n /**\r\n * Clear all cache\r\n */\r\n static async clear(store?: CacheStore): Promise<void> {\r\n const cacheStore = store || this.defaultStore;\r\n await cacheStore.clear();\r\n }\r\n}\r\n\r\n/**\r\n * Convenience functions for cache operations\r\n */\r\n\r\n/**\r\n * Get value from cache\r\n */\r\nexport async function getCache<T = any>(key: string): Promise<T | null> {\r\n return await CacheManager.get<T>(key);\r\n}\r\n\r\n/**\r\n * Set value in cache\r\n */\r\nexport async function setCache<T = any>(\r\n key: string,\r\n value: T,\r\n ttl?: number | string\r\n): Promise<void> {\r\n await CacheManager.set(key, value, ttl);\r\n}\r\n\r\n/**\r\n * Delete value from cache\r\n */\r\nexport async function deleteCache(key: string): Promise<boolean> {\r\n return await CacheManager.delete(key);\r\n}\r\n\r\n/**\r\n * Invalidate cache by pattern\r\n */\r\nexport async function invalidateCache(pattern: string): Promise<number> {\r\n return await CacheManager.invalidate(pattern);\r\n}\r\n\r\n/**\r\n * Clear all cache\r\n */\r\nexport async function clearCache(): Promise<void> {\r\n await CacheManager.clear();\r\n}\r\n\r\n",
|
|
5
76
|
"import type { Context, Middleware, CorsOptions } from '../types';\r\n\r\n/**\r\n * Create CORS middleware with configurable options\r\n * Handles preflight requests and adds appropriate CORS headers\r\n */\r\nexport function createCorsMiddleware(options?: CorsOptions): Middleware {\r\n const {\r\n origin = '*',\r\n methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\r\n allowedHeaders = ['Content-Type', 'Authorization'],\r\n exposedHeaders = [],\r\n credentials = false,\r\n maxAge = 86400 // 24 hours default\r\n } = options || {};\r\n\r\n return async (c: Context, next) => {\r\n const requestOrigin = c.req.header('origin');\r\n const requestMethod = c.req.method;\r\n\r\n // Determine if origin is allowed\r\n let allowedOrigin: string | null = null;\r\n\r\n if (typeof origin === 'string') {\r\n allowedOrigin = origin;\r\n } else if (Array.isArray(origin)) {\r\n if (requestOrigin && origin.includes(requestOrigin)) {\r\n allowedOrigin = requestOrigin;\r\n }\r\n } else if (typeof origin === 'function') {\r\n if (requestOrigin && origin(requestOrigin)) {\r\n allowedOrigin = requestOrigin;\r\n }\r\n }\r\n\r\n // Set CORS headers\r\n if (allowedOrigin) {\r\n c.header('Access-Control-Allow-Origin', allowedOrigin);\r\n }\r\n\r\n if (credentials) {\r\n c.header('Access-Control-Allow-Credentials', 'true');\r\n }\r\n\r\n if (exposedHeaders.length > 0) {\r\n c.header('Access-Control-Expose-Headers', exposedHeaders.join(', '));\r\n }\r\n\r\n // Handle preflight requests\r\n if (requestMethod === 'OPTIONS') {\r\n c.header('Access-Control-Allow-Methods', methods.join(', '));\r\n c.header('Access-Control-Allow-Headers', allowedHeaders.join(', '));\r\n c.header('Access-Control-Max-Age', maxAge.toString());\r\n \r\n return c.body(null, 204);\r\n }\r\n\r\n // Continue to next middleware/handler\r\n await next();\r\n };\r\n}\r\n",
|
|
6
77
|
"import type { Context, Middleware, RateLimitOptions } from '../types';\r\n\r\n/**\r\n * Rate limit record for tracking requests\r\n */\r\ninterface RateLimitRecord {\r\n count: number;\r\n resetTime: number;\r\n}\r\n\r\n/**\r\n * Create rate limiting middleware\r\n * Tracks requests per IP/key and returns 429 when limit exceeded\r\n */\r\nexport function createRateLimitMiddleware(options: RateLimitOptions): Middleware {\r\n const {\r\n windowMs = 60000, // 1 minute default\r\n max = 100, // 100 requests per window default\r\n keyGenerator = (c: Context) => {\r\n // Default: use X-Forwarded-For header or fallback to 'unknown'\r\n return c.req.header('x-forwarded-for') || \r\n c.req.header('x-real-ip') || \r\n 'unknown';\r\n }\r\n } = options;\r\n\r\n // In-memory storage for rate limit records\r\n const requests = new Map<string, RateLimitRecord>();\r\n\r\n // Cleanup old entries periodically to prevent memory leaks\r\n const cleanupInterval = setInterval(() => {\r\n const now = Date.now();\r\n for (const [key, record] of requests.entries()) {\r\n if (now > record.resetTime) {\r\n requests.delete(key);\r\n }\r\n }\r\n }, windowMs);\r\n\r\n // Cleanup on process exit (if supported)\r\n if (typeof process !== 'undefined' && process.on) {\r\n process.on('exit', () => clearInterval(cleanupInterval));\r\n }\r\n\r\n return async (c: Context, next) => {\r\n const key = keyGenerator(c);\r\n const now = Date.now();\r\n const record = requests.get(key);\r\n\r\n if (!record || now > record.resetTime) {\r\n // New window - reset counter\r\n requests.set(key, { \r\n count: 1, \r\n resetTime: now + windowMs \r\n });\r\n\r\n // Add rate limit headers\r\n c.header('X-RateLimit-Limit', max.toString());\r\n c.header('X-RateLimit-Remaining', (max - 1).toString());\r\n c.header('X-RateLimit-Reset', new Date(now + windowMs).toISOString());\r\n\r\n await next();\r\n } else if (record.count < max) {\r\n // Within limit - increment counter\r\n record.count++;\r\n\r\n // Add rate limit headers\r\n c.header('X-RateLimit-Limit', max.toString());\r\n c.header('X-RateLimit-Remaining', (max - record.count).toString());\r\n c.header('X-RateLimit-Reset', new Date(record.resetTime).toISOString());\r\n\r\n await next();\r\n } else {\r\n // Rate limit exceeded\r\n const retryAfter = Math.ceil((record.resetTime - now) / 1000);\r\n\r\n c.header('X-RateLimit-Limit', max.toString());\r\n c.header('X-RateLimit-Remaining', '0');\r\n c.header('X-RateLimit-Reset', new Date(record.resetTime).toISOString());\r\n c.header('Retry-After', retryAfter.toString());\r\n\r\n return c.json(\r\n {\r\n error: 'Too Many Requests',\r\n message: `Rate limit exceeded. Please try again in ${retryAfter} seconds.`,\r\n retryAfter\r\n },\r\n 429\r\n );\r\n }\r\n };\r\n}\r\n",
|
|
7
|
-
"import type { Context, Middleware, CompressionOptions } from '../types';\r\n\r\n/**\r\n * Create compression middleware\r\n * Compresses responses with gzip or brotli based on Accept-Encoding header\r\n */\r\nexport function createCompressionMiddleware(options?: CompressionOptions): Middleware {\r\n const {\r\n threshold = 1024, // Only compress responses larger than 1KB\r\n level = 6 // Compression level (1-9 for gzip, 0-11 for brotli)\r\n } = options || {};\r\n\r\n return async (c: Context, next) => {\r\n // Continue to next middleware/handler first\r\n await next();\r\n\r\n // Get the response\r\n const response = c.res;\r\n if (!response) {\r\n return;\r\n }\r\n\r\n // Check if response should be compressed\r\n const contentType = response.headers.get('content-type') || '';\r\n const contentLength = response.headers.get('content-length');\r\n const acceptEncoding = c.req.header('accept-encoding') || '';\r\n\r\n // Skip compression for certain content types\r\n const compressibleTypes = [\r\n 'text/',\r\n 'application/json',\r\n 'application/javascript',\r\n 'application/xml',\r\n 'application/x-www-form-urlencoded'\r\n ];\r\n\r\n const isCompressible = compressibleTypes.some(type => \r\n contentType.toLowerCase().includes(type)\r\n );\r\n\r\n if (!isCompressible) {\r\n return;\r\n }\r\n\r\n // Skip if response is too small\r\n if (contentLength && parseInt(contentLength) < threshold) {\r\n return;\r\n }\r\n\r\n // Skip if already encoded\r\n if (response.headers.get('content-encoding')) {\r\n return;\r\n }\r\n\r\n // Get response body\r\n const body = await response.arrayBuffer();\r\n \r\n // Skip if body is too small\r\n if (body.byteLength < threshold) {\r\n return;\r\n }\r\n\r\n // Determine compression method\r\n let compressed: Uint8Array | null = null;\r\n let encoding: string | null = null;\r\n\r\n // Try brotli first (better compression)\r\n if (acceptEncoding.includes('br') && typeof CompressionStream !== 'undefined') {\r\n try {\r\n const stream = new CompressionStream('deflate');\r\n const writer = stream.writable.getWriter();\r\n writer.write(new Uint8Array(body));\r\n writer.close();\r\n \r\n const reader = stream.readable.getReader();\r\n const chunks: Uint8Array[] = [];\r\n \r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n chunks.push(value);\r\n }\r\n \r\n const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const chunk of chunks) {\r\n result.set(chunk, offset);\r\n offset += chunk.length;\r\n }\r\n \r\n compressed = result;\r\n encoding = 'deflate';\r\n } catch (error) {\r\n // Fallback to gzip\r\n compressed = null;\r\n }\r\n }\r\n\r\n // Try gzip if brotli not available or failed\r\n if (!compressed && acceptEncoding.includes('gzip') && typeof CompressionStream !== 'undefined') {\r\n try {\r\n const stream = new CompressionStream('gzip');\r\n const writer = stream.writable.getWriter();\r\n writer.write(new Uint8Array(body));\r\n writer.close();\r\n \r\n const reader = stream.readable.getReader();\r\n const chunks: Uint8Array[] = [];\r\n \r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n chunks.push(value);\r\n }\r\n \r\n const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const chunk of chunks) {\r\n result.set(chunk, offset);\r\n offset += chunk.length;\r\n }\r\n \r\n compressed = result;\r\n encoding = 'gzip';\r\n } catch (error) {\r\n // Compression failed, use original\r\n compressed = null;\r\n }\r\n }\r\n\r\n // If compression succeeded and resulted in smaller size, use it\r\n if (compressed && encoding && compressed.byteLength < body.byteLength) {\r\n // Create new response with compressed body\r\n const headers = new Headers(response.headers);\r\n headers.set('content-encoding', encoding);\r\n headers.set('content-length', compressed.byteLength.toString());\r\n headers.delete('content-length'); // Let the runtime set it\r\n \r\n // Update the response\r\n const newResponse = new Response(compressed, {\r\n status: response.status,\r\n statusText: response.statusText,\r\n headers\r\n });\r\n\r\n // Replace the response in context\r\n // Note: This is a workaround since Hono's context doesn't allow direct response replacement\r\n // In practice, this middleware should be used with Hono's compress middleware\r\n return newResponse;\r\n }\r\n };\r\n}\r\n"
|
|
78
|
+
"import type { Context, Middleware, CompressionOptions } from '../types';\r\n\r\n/**\r\n * Create compression middleware\r\n * Compresses responses with gzip or brotli based on Accept-Encoding header\r\n */\r\nexport function createCompressionMiddleware(options?: CompressionOptions): Middleware {\r\n const {\r\n threshold = 1024, // Only compress responses larger than 1KB\r\n level = 6 // Compression level (1-9 for gzip, 0-11 for brotli)\r\n } = options || {};\r\n\r\n return async (c: Context, next) => {\r\n // Continue to next middleware/handler first\r\n await next();\r\n\r\n // Get the response\r\n const response = c.res;\r\n if (!response) {\r\n return;\r\n }\r\n\r\n // Check if response should be compressed\r\n const contentType = response.headers.get('content-type') || '';\r\n const contentLength = response.headers.get('content-length');\r\n const acceptEncoding = c.req.header('accept-encoding') || '';\r\n\r\n // Skip compression for certain content types\r\n const compressibleTypes = [\r\n 'text/',\r\n 'application/json',\r\n 'application/javascript',\r\n 'application/xml',\r\n 'application/x-www-form-urlencoded'\r\n ];\r\n\r\n const isCompressible = compressibleTypes.some(type => \r\n contentType.toLowerCase().includes(type)\r\n );\r\n\r\n if (!isCompressible) {\r\n return;\r\n }\r\n\r\n // Skip if response is too small\r\n if (contentLength && parseInt(contentLength) < threshold) {\r\n return;\r\n }\r\n\r\n // Skip if already encoded\r\n if (response.headers.get('content-encoding')) {\r\n return;\r\n }\r\n\r\n // Get response body\r\n const body = await response.arrayBuffer();\r\n \r\n // Skip if body is too small\r\n if (body.byteLength < threshold) {\r\n return;\r\n }\r\n\r\n // Determine compression method\r\n let compressed: Uint8Array | null = null;\r\n let encoding: string | null = null;\r\n\r\n // Try brotli first (better compression)\r\n if (acceptEncoding.includes('br') && typeof CompressionStream !== 'undefined') {\r\n try {\r\n const stream = new CompressionStream('deflate');\r\n const writer = stream.writable.getWriter();\r\n writer.write(new Uint8Array(body));\r\n writer.close();\r\n \r\n const reader = stream.readable.getReader();\r\n const chunks: Uint8Array[] = [];\r\n \r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n chunks.push(value);\r\n }\r\n \r\n const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const chunk of chunks) {\r\n result.set(chunk, offset);\r\n offset += chunk.length;\r\n }\r\n \r\n compressed = result;\r\n encoding = 'deflate';\r\n } catch (error) {\r\n // Fallback to gzip\r\n compressed = null;\r\n }\r\n }\r\n\r\n // Try gzip if brotli not available or failed\r\n if (!compressed && acceptEncoding.includes('gzip') && typeof CompressionStream !== 'undefined') {\r\n try {\r\n const stream = new CompressionStream('gzip');\r\n const writer = stream.writable.getWriter();\r\n writer.write(new Uint8Array(body));\r\n writer.close();\r\n \r\n const reader = stream.readable.getReader();\r\n const chunks: Uint8Array[] = [];\r\n \r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n chunks.push(value);\r\n }\r\n \r\n const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const chunk of chunks) {\r\n result.set(chunk, offset);\r\n offset += chunk.length;\r\n }\r\n \r\n compressed = result;\r\n encoding = 'gzip';\r\n } catch (error) {\r\n // Compression failed, use original\r\n compressed = null;\r\n }\r\n }\r\n\r\n // If compression succeeded and resulted in smaller size, use it\r\n if (compressed && encoding && compressed.byteLength < body.byteLength) {\r\n // Create new response with compressed body\r\n const headers = new Headers(response.headers);\r\n headers.set('content-encoding', encoding);\r\n headers.set('content-length', compressed.byteLength.toString());\r\n headers.delete('content-length'); // Let the runtime set it\r\n \r\n // Update the response\r\n const newResponse = new Response(compressed, {\r\n status: response.status,\r\n statusText: response.statusText,\r\n headers\r\n });\r\n\r\n // Replace the response in context\r\n // Note: This is a workaround since Hono's context doesn't allow direct response replacement\r\n // In practice, this middleware should be used with Hono's compress middleware\r\n return newResponse;\r\n }\r\n };\r\n}\r\n",
|
|
79
|
+
"/**\r\n * Logger para Veloce-TS usando Pino\r\n * \r\n * Pino es el logger más rápido para Node.js con excelente rendimiento\r\n * y formato JSON estructurado ideal para producción.\r\n */\r\n\r\nimport type { Logger, LoggerConfig, LogContext } from './types';\r\n\r\n// Lazy import para Pino\r\nlet pino: any;\r\nlet pinoPretty: any;\r\n\r\nfunction loadPino() {\r\n if (!pino) {\r\n pino = require('pino');\r\n pinoPretty = require('pino-pretty');\r\n }\r\n return { pino, pinoPretty };\r\n}\r\n\r\n// Implementación de Logger con Pino\r\nclass PinoLogger implements Logger {\r\n private logger: any;\r\n\r\n constructor(config?: LoggerConfig) {\r\n const { pino } = loadPino();\r\n \r\n const isDev = process.env.NODE_ENV !== 'production';\r\n const pretty = config?.pretty !== undefined ? config.pretty : isDev;\r\n \r\n this.logger = pino({\r\n level: config?.level || (isDev ? 'debug' : 'info'),\r\n transport: pretty ? {\r\n target: 'pino-pretty',\r\n options: {\r\n colorize: true,\r\n translateTime: 'SYS:HH:MM:ss',\r\n ignore: 'pid,hostname',\r\n singleLine: false\r\n }\r\n } : undefined\r\n });\r\n }\r\n\r\n trace(message: string, context?: LogContext): void {\r\n this.logger.trace(context || {}, message);\r\n }\r\n\r\n debug(message: string, context?: LogContext): void {\r\n this.logger.debug(context || {}, message);\r\n }\r\n\r\n info(message: string, context?: LogContext): void {\r\n this.logger.info(context || {}, message);\r\n }\r\n\r\n warn(message: string, context?: LogContext): void {\r\n this.logger.warn(context || {}, message);\r\n }\r\n\r\n error(message: string, error?: Error, context?: LogContext): void {\r\n this.logger.error({ err: error, ...context }, message);\r\n }\r\n\r\n fatal(message: string, error?: Error, context?: LogContext): void {\r\n this.logger.fatal({ err: error, ...context }, message);\r\n }\r\n\r\n child(context: LogContext): Logger {\r\n return new PinoLoggerWrapper(this.logger.child(context));\r\n }\r\n}\r\n\r\n// Wrapper para child loggers de Pino\r\nclass PinoLoggerWrapper implements Logger {\r\n constructor(private logger: any) {}\r\n\r\n trace(message: string, context?: LogContext): void {\r\n this.logger.trace(context || {}, message);\r\n }\r\n\r\n debug(message: string, context?: LogContext): void {\r\n this.logger.debug(context || {}, message);\r\n }\r\n\r\n info(message: string, context?: LogContext): void {\r\n this.logger.info(context || {}, message);\r\n }\r\n\r\n warn(message: string, context?: LogContext): void {\r\n this.logger.warn(context || {}, message);\r\n }\r\n\r\n error(message: string, error?: Error, context?: LogContext): void {\r\n this.logger.error({ err: error, ...context }, message);\r\n }\r\n\r\n fatal(message: string, error?: Error, context?: LogContext): void {\r\n this.logger.fatal({ err: error, ...context }, message);\r\n }\r\n\r\n child(context: LogContext): Logger {\r\n return new PinoLoggerWrapper(this.logger.child(context));\r\n }\r\n}\r\n\r\n/**\r\n * Create a Pino logger instance\r\n */\r\nexport function createLogger(config?: LoggerConfig): Logger {\r\n return new PinoLogger(config);\r\n}\r\n\r\n/**\r\n * Logger singleton instance\r\n */\r\nlet loggerInstance: Logger | null = null;\r\n\r\n/**\r\n * Initialize the global logger\r\n */\r\nexport function initializeLogger(config?: LoggerConfig): Logger {\r\n loggerInstance = createLogger(config);\r\n return loggerInstance;\r\n}\r\n\r\n/**\r\n * Get the global logger instance\r\n * Defaults to Pino with pretty printing enabled for development\r\n */\r\nexport function getLogger(): Logger {\r\n if (!loggerInstance) {\r\n const isDev = process.env.NODE_ENV !== 'production';\r\n loggerInstance = createLogger({ pretty: isDev, level: isDev ? 'debug' : 'info' });\r\n }\r\n return loggerInstance;\r\n}\r\n\r\n/**\r\n * Create a child logger with context\r\n */\r\nexport function createChildLogger(context: LogContext): Logger {\r\n return getLogger().child(context);\r\n}\r\n",
|
|
80
|
+
"/**\r\n * Logging middleware para Veloce-TS\r\n */\r\n\r\nimport type { Context, Middleware } from '../types';\r\nimport { createChildLogger } from './logger';\r\n\r\n/**\r\n * Request logging middleware\r\n * Logs todas las peticiones HTTP con contexto\r\n */\r\nexport function requestLoggingMiddleware(): Middleware {\r\n return async (c: Context, next: () => Promise<void>) => {\r\n const logger = createChildLogger({\r\n context: 'request',\r\n method: c.req.method,\r\n path: c.req.path,\r\n ip: c.req.header('x-forwarded-for') || c.req.header('x-real-ip') || 'unknown'\r\n });\r\n\r\n const start = Date.now();\r\n\r\n logger.info('Incoming request');\r\n\r\n try {\r\n await next();\r\n\r\n const duration = Date.now() - start;\r\n logger.info('Request completed', {\r\n status: c.res.status,\r\n duration: `${duration}ms`\r\n });\r\n } catch (error) {\r\n const duration = Date.now() - start;\r\n \r\n logger.error('Request failed', error as Error, {\r\n status: (error as any).status || 500,\r\n duration: `${duration}ms`\r\n });\r\n\r\n throw error;\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Error logging middleware\r\n * Captura y loguea errores no manejados\r\n */\r\nexport function errorLoggingMiddleware(): Middleware {\r\n return async (c: Context, next: () => Promise<void>) => {\r\n try {\r\n await next();\r\n } catch (error) {\r\n const logger = createChildLogger({ context: 'error' });\r\n \r\n logger.error('Unhandled error', error as Error, {\r\n method: c.req.method,\r\n path: c.req.path,\r\n query: c.req.query(),\r\n headers: Object.fromEntries(new Map(c.req.raw.headers))\r\n });\r\n\r\n throw error;\r\n }\r\n };\r\n}\r\n\r\n\r\n",
|
|
81
|
+
"/**\r\n * Request Context Middleware\r\n * Automatically initializes request context with UUID and integrates with logging\r\n */\r\n\r\nimport type { Context, Middleware } from '../types';\r\nimport { initializeRequestContext, cleanupRequestContext, getRequestId, getRequestDuration } from '../context/request-context';\r\nimport { getLogger } from '../logging';\r\n\r\nexport interface RequestContextMiddlewareOptions {\r\n /**\r\n * Default timeout for requests in milliseconds\r\n */\r\n timeout?: number;\r\n \r\n /**\r\n * Whether to log request start/end\r\n */\r\n logging?: boolean;\r\n \r\n /**\r\n * Custom request ID generator\r\n */\r\n requestIdGenerator?: () => string;\r\n \r\n /**\r\n * Headers to include in logs\r\n */\r\n logHeaders?: string[];\r\n}\r\n\r\n/**\r\n * Create request context middleware\r\n * \r\n * This middleware:\r\n * - Generates a unique request ID for each request\r\n * - Sets up AbortSignal for request cancellation\r\n * - Optionally configures request timeout\r\n * - Integrates with logging system\r\n * - Propagates request ID through all logs\r\n * \r\n * @example\r\n * ```typescript\r\n * const app = new VeloceTS();\r\n * \r\n * // Basic usage\r\n * app.use(createRequestContextMiddleware());\r\n * \r\n * // With options\r\n * app.use(createRequestContextMiddleware({\r\n * timeout: 30000, // 30 seconds\r\n * logging: true,\r\n * logHeaders: ['user-agent', 'referer']\r\n * }));\r\n * ```\r\n */\r\nexport function createRequestContextMiddleware(\r\n options: RequestContextMiddlewareOptions = {}\r\n): Middleware {\r\n const {\r\n timeout,\r\n logging = true,\r\n requestIdGenerator,\r\n logHeaders = []\r\n } = options;\r\n\r\n return async (c: Context, next: () => Promise<void>) => {\r\n // Generate or extract request ID\r\n const requestId = requestIdGenerator?.() || \r\n c.req.header('x-request-id') ||\r\n undefined;\r\n\r\n // Initialize request context\r\n const context = initializeRequestContext(c, {\r\n requestId,\r\n timeout\r\n });\r\n\r\n // Create logger with request ID context\r\n const logger = logging ? getLogger().child({ requestId: context.requestId }) : null;\r\n\r\n // Log request start\r\n if (logger) {\r\n const logData: any = {\r\n method: c.req.method,\r\n path: c.req.path,\r\n url: c.req.url\r\n };\r\n\r\n // Add specified headers to log\r\n if (logHeaders.length > 0) {\r\n logData.headers = {};\r\n for (const headerName of logHeaders) {\r\n const headerValue = c.req.header(headerName);\r\n if (headerValue) {\r\n logData.headers[headerName] = headerValue;\r\n }\r\n }\r\n }\r\n\r\n logger.info('Request started', logData);\r\n }\r\n\r\n try {\r\n // Set request ID in response header\r\n c.header('x-request-id', context.requestId);\r\n\r\n // Execute next middleware/handler\r\n await next();\r\n\r\n // Log request completion\r\n if (logger) {\r\n const duration = getRequestDuration(c);\r\n logger.info('Request completed', {\r\n status: c.res.status,\r\n duration: `${duration}ms`\r\n });\r\n }\r\n } catch (error) {\r\n // Log request error\r\n if (logger) {\r\n const duration = getRequestDuration(c);\r\n logger.error('Request failed', error as Error, {\r\n duration: `${duration}ms`\r\n });\r\n }\r\n \r\n throw error;\r\n } finally {\r\n // Clean up request context (clear timeouts, etc.)\r\n cleanupRequestContext(c);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Create a simple request ID middleware without logging\r\n * Useful if you want to manage logging separately\r\n */\r\nexport function createSimpleRequestIdMiddleware(): Middleware {\r\n return async (c: Context, next: () => Promise<void>) => {\r\n const requestId = c.req.header('x-request-id') || \r\n initializeRequestContext(c).requestId;\r\n \r\n c.header('x-request-id', requestId);\r\n \r\n try {\r\n await next();\r\n } finally {\r\n cleanupRequestContext(c);\r\n }\r\n };\r\n}\r\n\r\n",
|
|
82
|
+
"/**\r\n * Cache middleware for functional API routes\r\n */\r\n\r\nimport type { Context, Middleware } from '../types';\r\nimport type { CacheOptions } from '../cache/types';\r\nimport { CacheManager } from '../cache/manager';\r\nimport { parseTTL } from '../cache/types';\r\n\r\nexport interface CacheMiddlewareOptions extends CacheOptions {\r\n /**\r\n * Whether to cache only successful responses (2xx)\r\n */\r\n onlySuccess?: boolean;\r\n}\r\n\r\n/**\r\n * Create cache middleware for functional API routes\r\n * \r\n * @example\r\n * ```typescript\r\n * app.get('/products', {\r\n * middleware: [createCacheMiddleware({ ttl: '5m' })],\r\n * handler: async () => {\r\n * return await db.products.findAll();\r\n * }\r\n * });\r\n * \r\n * // With custom key\r\n * app.get('/user/:id/posts', {\r\n * middleware: [createCacheMiddleware({ \r\n * ttl: 300, \r\n * key: 'user:{id}:posts' \r\n * })],\r\n * handler: async (c) => {\r\n * const id = c.req.param('id');\r\n * return await db.posts.findByUser(id);\r\n * }\r\n * });\r\n * ```\r\n */\r\nexport function createCacheMiddleware(options: CacheMiddlewareOptions): Middleware {\r\n const {\r\n ttl,\r\n key: customKey,\r\n prefix,\r\n includeQuery = false,\r\n varyByHeaders,\r\n condition,\r\n store,\r\n onlySuccess = true\r\n } = options;\r\n\r\n const ttlSeconds = parseTTL(ttl);\r\n\r\n return async (c: Context, next: () => Promise<void>) => {\r\n // Generate cache key\r\n const method = c.req.method;\r\n const path = c.req.path;\r\n const params = c.req.param();\r\n const query = includeQuery ? c.req.query() : undefined;\r\n\r\n // Add header variations to key\r\n let headerSuffix = '';\r\n if (varyByHeaders && varyByHeaders.length > 0) {\r\n const headerValues = varyByHeaders\r\n .map(h => `${h}:${c.req.header(h) || ''}`)\r\n .join('|');\r\n headerSuffix = `:${headerValues}`;\r\n }\r\n\r\n const cacheKey = CacheManager.generateKey(\r\n method,\r\n path,\r\n params,\r\n query,\r\n { key: customKey, prefix, includeQuery }\r\n ) + headerSuffix;\r\n\r\n // Try to get from cache\r\n const cacheStore = store || CacheManager.getDefaultStore();\r\n const cached = await cacheStore.get(cacheKey);\r\n\r\n if (cached !== null) {\r\n // Cache hit - return cached response\r\n c.header('X-Cache', 'HIT');\r\n return c.json(cached);\r\n }\r\n\r\n // Cache miss - execute handler\r\n c.header('X-Cache', 'MISS');\r\n\r\n // Capture the response\r\n await next();\r\n\r\n // Get the response\r\n const response = c.res;\r\n\r\n // Check if we should cache this response\r\n if (onlySuccess && response.status >= 300) {\r\n return;\r\n }\r\n\r\n // Try to extract JSON body\r\n try {\r\n const clonedResponse = response.clone();\r\n const body = await clonedResponse.json();\r\n\r\n // Check custom condition\r\n if (condition && !condition(body)) {\r\n return;\r\n }\r\n\r\n // Store in cache\r\n await cacheStore.set(cacheKey, body, ttlSeconds);\r\n } catch {\r\n // Response is not JSON or already consumed, skip caching\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Create cache invalidation middleware\r\n * Useful for mutations that should clear related cache\r\n * \r\n * @example\r\n * ```typescript\r\n * app.post('/products', {\r\n * middleware: [createCacheInvalidationMiddleware('products:*')],\r\n * handler: async (c) => {\r\n * const body = await c.req.json();\r\n * return await db.products.create(body);\r\n * }\r\n * });\r\n * ```\r\n */\r\nexport function createCacheInvalidationMiddleware(\r\n pattern: string | string[],\r\n store?: import('../cache/types').CacheStore\r\n): Middleware {\r\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\r\n\r\n return async (c: Context, next: () => Promise<void>) => {\r\n // Execute handler first\r\n await next();\r\n\r\n // Invalidate cache after successful request\r\n const cacheStore = store || CacheManager.getDefaultStore();\r\n \r\n for (const pat of patterns) {\r\n // Replace placeholders with actual values from params\r\n let resolvedPattern = pat;\r\n const params = c.req.param();\r\n \r\n if (params) {\r\n for (const [key, value] of Object.entries(params)) {\r\n resolvedPattern = resolvedPattern.replace(`{${key}}`, String(value));\r\n }\r\n }\r\n\r\n await cacheStore.deletePattern(resolvedPattern);\r\n }\r\n };\r\n}\r\n\r\n"
|
|
8
83
|
],
|
|
9
|
-
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
84
|
+
"mappings": "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",
|
|
85
|
+
"debugId": "622092719CFA2F9B64756E2164756E21",
|
|
11
86
|
"names": []
|
|
12
87
|
}
|