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,10 +1,137 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["..\\..\\src\\plugins\\openapi.ts"],
|
|
3
|
+
"sources": ["..\\..\\node_modules\\reflect-metadata\\Reflect.js", "..\\..\\src\\errors\\exceptions.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", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\Options.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\Refs.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\errorMessages.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\getRelativePath.js", "..\\..\\node_modules\\zod\\v3\\helpers\\util.js", "..\\..\\node_modules\\zod\\v3\\ZodError.js", "..\\..\\node_modules\\zod\\v3\\locales\\en.js", "..\\..\\node_modules\\zod\\v3\\errors.js", "..\\..\\node_modules\\zod\\v3\\helpers\\parseUtil.js", "..\\..\\node_modules\\zod\\v3\\helpers\\errorUtil.js", "..\\..\\node_modules\\zod\\v3\\types.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\any.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\array.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\bigint.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\boolean.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\branded.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\catch.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\date.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\default.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\effects.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\enum.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\intersection.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\literal.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\string.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\record.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\map.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\nativeEnum.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\never.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\null.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\union.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\nullable.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\number.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\object.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\optional.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\pipeline.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\promise.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\set.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\tuple.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\undefined.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\unknown.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\readonly.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\selectParser.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parseDef.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\zodToJsonSchema.js", "..\\..\\src\\docs\\zod-to-json-schema.ts", "..\\..\\src\\docs\\openapi-generator.ts", "..\\..\\src\\plugins\\openapi.ts", "..\\..\\src\\websocket\\connection.ts", "..\\..\\src\\websocket\\manager.ts", "..\\..\\src\\websocket\\plugin.ts", "..\\..\\src\\decorators\\graphql.ts", "..\\..\\src\\graphql\\zod-to-graphql.ts", "..\\..\\src\\validation\\exceptions.ts", "..\\..\\src\\validation\\validator.ts", "..\\..\\src\\graphql\\schema-builder.ts", "..\\..\\src\\graphql\\plugin.ts", "..\\..\\src\\logging\\logger.ts", "..\\..\\src\\logging\\middleware.ts", "..\\..\\src\\plugins\\health.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"// OpenAPI Plugin - Generates OpenAPI 3.0 specification and serves Swagger UI\r\nimport type { Plugin } from '../core/plugin';\r\nimport type { VeloceTS } from '../core/application';\r\nimport type { OpenAPIOptions } from '../types';\r\nimport { OpenAPIGenerator } from '../docs';\r\n\r\n/**\r\n * OpenAPIPlugin generates OpenAPI 3.0 specification from route metadata\r\n * and serves Swagger UI for interactive API documentation\r\n */\r\nexport class OpenAPIPlugin implements Plugin {\r\n name = 'openapi';\r\n version = '1.0.0';\r\n\r\n private options: Required<OpenAPIOptions>;\r\n\r\n constructor(options?: OpenAPIOptions) {\r\n this.options = {\r\n title: options?.title || 'Veloce-TS API',\r\n version: options?.version || '1.0.0',\r\n description: options?.description || 'API built with Veloce-TS',\r\n path: options?.path || '/openapi.json',\r\n docsPath: options?.docsPath || '/docs',\r\n docs: options?.docs !== false\r\n };\r\n }\r\n\r\n async install(app: VeloceTS): Promise<void> {\r\n // Get app config to merge with plugin options\r\n const appConfig = app.getConfig();\r\n if (appConfig.title) this.options.title = appConfig.title;\r\n if (appConfig.version) this.options.version = appConfig.version;\r\n if (appConfig.description) this.options.description = appConfig.description;\r\n\r\n // Register OpenAPI spec endpoint\r\n app.get(this.options.path, {\r\n handler: async () => {\r\n const spec = this.generateSpec(app);\r\n return spec;\r\n },\r\n docs: {\r\n summary: 'Get OpenAPI specification',\r\n description: 'Returns the OpenAPI 3.0 specification for this API',\r\n tags: ['Documentation']\r\n }\r\n });\r\n\r\n // Note: Swagger UI HTML is served via static files (public/docs.html)\r\n // This is more reliable than serving HTML from the plugin\r\n // The OpenAPI JSON spec is available at the configured path\r\n }\r\n\r\n /**\r\n * Generate OpenAPI 3.0 specification from application metadata\r\n */\r\n private generateSpec(app: VeloceTS) {\r\n const metadata = app.getMetadata();\r\n const generator = new OpenAPIGenerator(metadata, this.options);\r\n return generator.generate();\r\n }\r\n\r\n /**\r\n * Render Swagger UI HTML\r\n */\r\n private renderSwaggerUI(): string {\r\n return `<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n <meta charset=\"UTF-8\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <title>${this.options.title} - API Documentation</title>\r\n <link rel=\"stylesheet\" href=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui.css\" />\r\n <style>\r\n body {\r\n margin: 0;\r\n padding: 0;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n <div id=\"swagger-ui\"></div>\r\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-bundle.js\" crossorigin></script>\r\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-standalone-preset.js\" crossorigin></script>\r\n <script>\r\n window.onload = function() {\r\n window.ui = SwaggerUIBundle({\r\n url: '${this.options.path}',\r\n dom_id: '#swagger-ui',\r\n deepLinking: true,\r\n presets: [\r\n SwaggerUIBundle.presets.apis,\r\n SwaggerUIStandalonePreset\r\n ],\r\n plugins: [\r\n SwaggerUIBundle.plugins.DownloadUrl\r\n ],\r\n layout: \"StandaloneLayout\"\r\n });\r\n };\r\n </script>\r\n</body>\r\n</html>`;\r\n }\r\n}\r\n"
|
|
5
|
+
"/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof globalThis === \"object\" ? globalThis :\n typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n sloppyModeThis();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect !== \"undefined\") {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter, root);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n function makeExporter(target, previous) {\n return function (key, value) {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n if (previous)\n previous(key, value);\n };\n }\n function functionThis() {\n try {\n return Function(\"return this;\")();\n }\n catch (_) { }\n }\n function indirectEvalThis() {\n try {\n return (void 0, eval)(\"(function() { return this; })()\");\n }\n catch (_) { }\n }\n function sloppyModeThis() {\n return functionThis() || indirectEvalThis();\n }\n })(function (exporter, root) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var _Map = typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n var registrySymbol = supportsSymbol ? Symbol.for(\"@reflect-metadata:registry\") : undefined;\n var metadataRegistry = GetOrCreateMetadataRegistry();\n var metadataProvider = CreateMetadataProvider(metadataRegistry);\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var provider = GetMetadataProvider(target, propertyKey, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return provider.OrdinaryDeleteMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return ToBoolean(provider.OrdinaryHasOwnMetadata(MetadataKey, O, P));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return;\n return provider.OrdinaryGetOwnMetadata(MetadataKey, O, P);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ true);\n provider.OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var provider = GetMetadataProvider(O, P, /*create*/ false);\n if (!provider) {\n return [];\n }\n return provider.OrdinaryOwnMetadataKeys(O, P);\n }\n // 6 ECMAScript Data Types and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n function SameValueZero(x, y) {\n return x === y || x !== x && y !== y;\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // Global metadata registry\n // - Allows `import \"reflect-metadata\"` and `import \"reflect-metadata/no-conflict\"` to interoperate.\n // - Uses isolated metadata if `Reflect` is frozen before the registry can be installed.\n /**\n * Creates a registry used to allow multiple `reflect-metadata` providers.\n */\n function CreateMetadataRegistry() {\n var fallback;\n if (!IsUndefined(registrySymbol) &&\n typeof root.Reflect !== \"undefined\" &&\n !(registrySymbol in root.Reflect) &&\n typeof root.Reflect.defineMetadata === \"function\") {\n // interoperate with older version of `reflect-metadata` that did not support a registry.\n fallback = CreateFallbackProvider(root.Reflect);\n }\n var first;\n var second;\n var rest;\n var targetProviderMap = new _WeakMap();\n var registry = {\n registerProvider: registerProvider,\n getProvider: getProvider,\n setProvider: setProvider,\n };\n return registry;\n function registerProvider(provider) {\n if (!Object.isExtensible(registry)) {\n throw new Error(\"Cannot add provider to a frozen registry.\");\n }\n switch (true) {\n case fallback === provider: break;\n case IsUndefined(first):\n first = provider;\n break;\n case first === provider: break;\n case IsUndefined(second):\n second = provider;\n break;\n case second === provider: break;\n default:\n if (rest === undefined)\n rest = new _Set();\n rest.add(provider);\n break;\n }\n }\n function getProviderNoCache(O, P) {\n if (!IsUndefined(first)) {\n if (first.isProviderFor(O, P))\n return first;\n if (!IsUndefined(second)) {\n if (second.isProviderFor(O, P))\n return first;\n if (!IsUndefined(rest)) {\n var iterator = GetIterator(rest);\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n return undefined;\n }\n var provider = IteratorValue(next);\n if (provider.isProviderFor(O, P)) {\n IteratorClose(iterator);\n return provider;\n }\n }\n }\n }\n }\n if (!IsUndefined(fallback) && fallback.isProviderFor(O, P)) {\n return fallback;\n }\n return undefined;\n }\n function getProvider(O, P) {\n var providerMap = targetProviderMap.get(O);\n var provider;\n if (!IsUndefined(providerMap)) {\n provider = providerMap.get(P);\n }\n if (!IsUndefined(provider)) {\n return provider;\n }\n provider = getProviderNoCache(O, P);\n if (!IsUndefined(provider)) {\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return provider;\n }\n function hasProvider(provider) {\n if (IsUndefined(provider))\n throw new TypeError();\n return first === provider || second === provider || !IsUndefined(rest) && rest.has(provider);\n }\n function setProvider(O, P, provider) {\n if (!hasProvider(provider)) {\n throw new Error(\"Metadata provider not registered.\");\n }\n var existingProvider = getProvider(O, P);\n if (existingProvider !== provider) {\n if (!IsUndefined(existingProvider)) {\n return false;\n }\n var providerMap = targetProviderMap.get(O);\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return true;\n }\n }\n /**\n * Gets or creates the shared registry of metadata providers.\n */\n function GetOrCreateMetadataRegistry() {\n var metadataRegistry;\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n metadataRegistry = root.Reflect[registrySymbol];\n }\n if (IsUndefined(metadataRegistry)) {\n metadataRegistry = CreateMetadataRegistry();\n }\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n Object.defineProperty(root.Reflect, registrySymbol, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: metadataRegistry\n });\n }\n return metadataRegistry;\n }\n function CreateMetadataProvider(registry) {\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var metadata = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var targetMetadata = metadata.get(O);\n if (IsUndefined(targetMetadata))\n return false;\n return targetMetadata.has(P);\n },\n OrdinaryDefineOwnMetadata: OrdinaryDefineOwnMetadata,\n OrdinaryHasOwnMetadata: OrdinaryHasOwnMetadata,\n OrdinaryGetOwnMetadata: OrdinaryGetOwnMetadata,\n OrdinaryOwnMetadataKeys: OrdinaryOwnMetadataKeys,\n OrdinaryDeleteMetadata: OrdinaryDeleteMetadata,\n };\n metadataRegistry.registerProvider(provider);\n return provider;\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = metadata.get(O);\n var createdTargetMetadata = false;\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n metadata.set(O, targetMetadata);\n createdTargetMetadata = true;\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n if (!registry.setProvider(O, P, provider)) {\n targetMetadata.delete(P);\n if (createdTargetMetadata) {\n metadata.delete(O);\n }\n throw new Error(\"Wrong provider for target.\");\n }\n }\n return metadataMap;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n function OrdinaryDeleteMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(MetadataKey))\n return false;\n if (metadataMap.size === 0) {\n var targetMetadata = metadata.get(O);\n if (!IsUndefined(targetMetadata)) {\n targetMetadata.delete(P);\n if (targetMetadata.size === 0) {\n metadata.delete(targetMetadata);\n }\n }\n }\n return true;\n }\n }\n function CreateFallbackProvider(reflect) {\n var defineMetadata = reflect.defineMetadata, hasOwnMetadata = reflect.hasOwnMetadata, getOwnMetadata = reflect.getOwnMetadata, getOwnMetadataKeys = reflect.getOwnMetadataKeys, deleteMetadata = reflect.deleteMetadata;\n var metadataOwner = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var metadataPropertySet = metadataOwner.get(O);\n if (!IsUndefined(metadataPropertySet) && metadataPropertySet.has(P)) {\n return true;\n }\n if (getOwnMetadataKeys(O, P).length) {\n if (IsUndefined(metadataPropertySet)) {\n metadataPropertySet = new _Set();\n metadataOwner.set(O, metadataPropertySet);\n }\n metadataPropertySet.add(P);\n return true;\n }\n return false;\n },\n OrdinaryDefineOwnMetadata: defineMetadata,\n OrdinaryHasOwnMetadata: hasOwnMetadata,\n OrdinaryGetOwnMetadata: getOwnMetadata,\n OrdinaryOwnMetadataKeys: getOwnMetadataKeys,\n OrdinaryDeleteMetadata: deleteMetadata,\n };\n return provider;\n }\n /**\n * Gets the metadata provider for an object. If the object has no metadata provider and this is for a create operation,\n * then this module's metadata provider is assigned to the object.\n */\n function GetMetadataProvider(O, P, Create) {\n var registeredProvider = metadataRegistry.getProvider(O, P);\n if (!IsUndefined(registeredProvider)) {\n return registeredProvider;\n }\n if (Create) {\n if (metadataRegistry.setProvider(O, P, metadataProvider)) {\n return metadataProvider;\n }\n throw new Error(\"Illegal state.\");\n }\n return undefined;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n var Map = /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (SameValueZero(key, this._cacheKey)) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (!SameValueZero(this._cacheKey, key)) {\n this._cacheIndex = -1;\n for (var i = 0; i < this._keys.length; i++) {\n if (SameValueZero(this._keys[i], key)) {\n this._cacheIndex = i;\n break;\n }\n }\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n return Map;\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n var Set = /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.keys(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n return Set;\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n var array = new Uint8Array(size);\n if (typeof crypto !== \"undefined\") {\n crypto.getRandomValues(array);\n }\n else if (typeof msCrypto !== \"undefined\") {\n msCrypto.getRandomValues(array);\n }\n else {\n FillRandomBytes(array, size);\n }\n return array;\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n",
|
|
6
|
+
"/**\r\n * Base HTTP exception class\r\n * All HTTP exceptions should extend this class\r\n * Provides consistent error response format\r\n */\r\nexport class HTTPException extends Error {\r\n constructor(\r\n public statusCode: number,\r\n message: string,\r\n public details?: any\r\n ) {\r\n super(message);\r\n this.name = 'HTTPException';\r\n \r\n // Maintains proper stack trace for where error was thrown (V8 only)\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n /**\r\n * Convert exception to JSON format for HTTP response\r\n * @returns Object with error details\r\n */\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 404 Not Found exception\r\n * Thrown when a requested resource cannot be found\r\n */\r\nexport class NotFoundException extends HTTPException {\r\n constructor(message: string = 'Not Found', details?: any) {\r\n super(404, message, details);\r\n this.name = 'NotFoundException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 401 Unauthorized exception\r\n * Thrown when authentication is required but not provided or invalid\r\n */\r\nexport class UnauthorizedException extends HTTPException {\r\n constructor(message: string = 'Unauthorized', details?: any) {\r\n super(401, message, details);\r\n this.name = 'UnauthorizedException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 403 Forbidden exception\r\n * Thrown when user is authenticated but doesn't have permission\r\n */\r\nexport class ForbiddenException extends HTTPException {\r\n constructor(message: string = 'Forbidden', details?: any) {\r\n super(403, message, details);\r\n this.name = 'ForbiddenException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 400 Bad Request exception\r\n * Thrown when the request is malformed or invalid\r\n */\r\nexport class BadRequestException extends HTTPException {\r\n constructor(message: string = 'Bad Request', details?: any) {\r\n super(400, message, details);\r\n this.name = 'BadRequestException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n",
|
|
7
|
+
"'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",
|
|
8
|
+
"'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",
|
|
9
|
+
"'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",
|
|
10
|
+
"'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",
|
|
11
|
+
"'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",
|
|
12
|
+
"'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",
|
|
13
|
+
"'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",
|
|
14
|
+
"'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",
|
|
15
|
+
"'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",
|
|
16
|
+
"'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",
|
|
17
|
+
"'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",
|
|
18
|
+
"'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",
|
|
19
|
+
"'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",
|
|
20
|
+
"'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",
|
|
21
|
+
"'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",
|
|
22
|
+
"'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",
|
|
23
|
+
"'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",
|
|
24
|
+
"'use strict'\n\nconst WRITE_INDEX = 4\nconst READ_INDEX = 8\n\nmodule.exports = {\n WRITE_INDEX,\n READ_INDEX\n}\n",
|
|
25
|
+
"'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",
|
|
26
|
+
"'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",
|
|
27
|
+
"'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",
|
|
28
|
+
"/**\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",
|
|
29
|
+
"'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",
|
|
30
|
+
"'use strict'\n\nmodule.exports = { version: '10.1.0' }\n",
|
|
31
|
+
"'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",
|
|
32
|
+
"'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",
|
|
33
|
+
"'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",
|
|
34
|
+
"'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",
|
|
35
|
+
"'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",
|
|
36
|
+
"// 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",
|
|
37
|
+
"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",
|
|
38
|
+
"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",
|
|
39
|
+
"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",
|
|
40
|
+
"/*\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",
|
|
41
|
+
"'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",
|
|
42
|
+
"'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",
|
|
43
|
+
"'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",
|
|
44
|
+
"'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",
|
|
45
|
+
"'use strict'\n\nmodule.exports = function noop () {}\n",
|
|
46
|
+
"'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",
|
|
47
|
+
"'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",
|
|
48
|
+
"'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",
|
|
49
|
+
"'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",
|
|
50
|
+
"'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",
|
|
51
|
+
"'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",
|
|
52
|
+
"'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",
|
|
53
|
+
"'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",
|
|
54
|
+
"\"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);",
|
|
55
|
+
"'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",
|
|
56
|
+
"'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",
|
|
57
|
+
"'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",
|
|
58
|
+
"'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",
|
|
59
|
+
"'use strict'\n\nmodule.exports = isObject\n\nfunction isObject (input) {\n return Object.prototype.toString.apply(input) === '[object Object]'\n}\n",
|
|
60
|
+
"'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",
|
|
61
|
+
"'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",
|
|
62
|
+
"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",
|
|
63
|
+
"'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",
|
|
64
|
+
"'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",
|
|
65
|
+
"'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",
|
|
66
|
+
"'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",
|
|
67
|
+
"'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",
|
|
68
|
+
"'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",
|
|
69
|
+
"'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",
|
|
70
|
+
"'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",
|
|
71
|
+
"'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",
|
|
72
|
+
"'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",
|
|
73
|
+
"'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",
|
|
74
|
+
"export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n if (def.description) {\n try {\n return {\n ...jsonSchema,\n ...JSON.parse(def.description),\n };\n }\n catch { }\n }\n return jsonSchema;\n};\nexport const defaultOptions = {\n name: undefined,\n $refStrategy: \"root\",\n basePath: [\"#\"],\n effectStrategy: \"input\",\n pipeStrategy: \"all\",\n dateStrategy: \"format:date-time\",\n mapStrategy: \"entries\",\n removeAdditionalStrategy: \"passthrough\",\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: \"definitions\",\n target: \"jsonSchema7\",\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n markdownDescription: false,\n patternStrategy: \"escape\",\n applyRegexFlags: false,\n emailStrategy: \"format:email\",\n base64Strategy: \"contentEncoding:base64\",\n nameStrategy: \"ref\",\n openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n ? {\n ...defaultOptions,\n name: options,\n }\n : {\n ...defaultOptions,\n ...options,\n });\n",
|
|
75
|
+
"import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n const _options = getDefaultOptions(options);\n const currentPath = _options.name !== undefined\n ? [..._options.basePath, _options.definitionPath, _options.name]\n : _options.basePath;\n return {\n ..._options,\n flags: { hasReferencedOpenAiAnyType: false },\n currentPath: currentPath,\n propertyPath: undefined,\n seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: undefined,\n },\n ])),\n };\n};\n",
|
|
76
|
+
"export function addErrorMessage(res, key, errorMessage, refs) {\n if (!refs?.errorMessages)\n return;\n if (errorMessage) {\n res.errorMessage = {\n ...res.errorMessage,\n [key]: errorMessage,\n };\n }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n res[key] = value;\n addErrorMessage(res, key, errorMessage, refs);\n}\n",
|
|
77
|
+
"export const getRelativePath = (pathA, pathB) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i])\n break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n",
|
|
78
|
+
"export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n",
|
|
79
|
+
"import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n",
|
|
80
|
+
"import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n",
|
|
81
|
+
"import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n",
|
|
82
|
+
"import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n",
|
|
83
|
+
"export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n",
|
|
84
|
+
"import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n",
|
|
85
|
+
"import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n if (refs.target !== \"openAi\") {\n return {};\n }\n const anyDefinitionPath = [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ];\n refs.flags.hasReferencedOpenAiAnyType = true;\n return {\n $ref: refs.$refStrategy === \"relative\"\n ? getRelativePath(anyDefinitionPath, refs.currentPath)\n : anyDefinitionPath.join(\"/\"),\n };\n}\n",
|
|
86
|
+
"import { ZodFirstPartyTypeKind } from \"zod\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n const res = {\n type: \"array\",\n };\n if (def.type?._def &&\n def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n }\n if (def.minLength) {\n setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n }\n if (def.maxLength) {\n setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n }\n if (def.exactLength) {\n setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n }\n return res;\n}\n",
|
|
87
|
+
"import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n const res = {\n type: \"integer\",\n format: \"int64\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n",
|
|
88
|
+
"export function parseBooleanDef() {\n return {\n type: \"boolean\",\n };\n}\n",
|
|
89
|
+
"import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n return parseDef(_def.type._def, refs);\n}\n",
|
|
90
|
+
"import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n",
|
|
91
|
+
"import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n const strategy = overrideDateStrategy ?? refs.dateStrategy;\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n };\n }\n switch (strategy) {\n case \"string\":\n case \"format:date-time\":\n return {\n type: \"string\",\n format: \"date-time\",\n };\n case \"format:date\":\n return {\n type: \"string\",\n format: \"date\",\n };\n case \"integer\":\n return integerDateParser(def, refs);\n }\n}\nconst integerDateParser = (def, refs) => {\n const res = {\n type: \"integer\",\n format: \"unix-time\",\n };\n if (refs.target === \"openApi3\") {\n return res;\n }\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n }\n }\n return res;\n};\n",
|
|
92
|
+
"import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue(),\n };\n}\n",
|
|
93
|
+
"import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n return refs.effectStrategy === \"input\"\n ? parseDef(_def.schema._def, refs)\n : parseAnyDef(refs);\n}\n",
|
|
94
|
+
"export function parseEnumDef(def) {\n return {\n type: \"string\",\n enum: Array.from(def.values),\n };\n}\n",
|
|
95
|
+
"import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n if (\"type\" in type && type.type === \"string\")\n return false;\n return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n const allOf = [\n parseDef(def.left._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n }),\n parseDef(def.right._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n }),\n ].filter((x) => !!x);\n let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n ? { unevaluatedProperties: false }\n : undefined;\n const mergedAllOf = [];\n // If either of the schemas is an allOf, merge them into a single allOf\n allOf.forEach((schema) => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n if (schema.unevaluatedProperties === undefined) {\n // If one of the schemas has no unevaluatedProperties set,\n // the merged schema should also have no unevaluatedProperties set\n unevaluatedProperties = undefined;\n }\n }\n else {\n let nestedSchema = schema;\n if (\"additionalProperties\" in schema &&\n schema.additionalProperties === false) {\n const { additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n else {\n // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n unevaluatedProperties = undefined;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length\n ? {\n allOf: mergedAllOf,\n ...unevaluatedProperties,\n }\n : undefined;\n}\n",
|
|
96
|
+
"export function parseLiteralDef(def, refs) {\n const parsedType = typeof def.value;\n if (parsedType !== \"bigint\" &&\n parsedType !== \"number\" &&\n parsedType !== \"boolean\" &&\n parsedType !== \"string\") {\n return {\n type: Array.isArray(def.value) ? \"array\" : \"object\",\n };\n }\n if (refs.target === \"openApi3\") {\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n enum: [def.value],\n };\n }\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n const: def.value,\n };\n}\n",
|
|
97
|
+
"import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n /* c8 ignore next */\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n",
|
|
98
|
+
"import { ZodFirstPartyTypeKind, } from \"zod\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n if (refs.target === \"openAi\") {\n console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n }\n if (refs.target === \"openApi3\" &&\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n type: \"object\",\n required: def.keyType._def.values,\n properties: def.keyType._def.values.reduce((acc, key) => ({\n ...acc,\n [key]: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", key],\n }) ?? parseAnyDef(refs),\n }), {}),\n additionalProperties: refs.rejectedAdditionalProperties,\n };\n }\n const schema = {\n type: \"object\",\n additionalProperties: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n }) ?? refs.allowedAdditionalProperties,\n };\n if (refs.target === \"openApi3\") {\n return schema;\n }\n if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.checks?.length) {\n const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values,\n },\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.type._def.checks?.length) {\n const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n return schema;\n}\n",
|
|
99
|
+
"import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n if (refs.mapStrategy === \"record\") {\n return parseRecordDef(def, refs);\n }\n const keys = parseDef(def.keyType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n }) || parseAnyDef(refs);\n const values = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n }) || parseAnyDef(refs);\n return {\n type: \"array\",\n maxItems: 125,\n items: {\n type: \"array\",\n items: [keys, values],\n minItems: 2,\n maxItems: 2,\n },\n };\n}\n",
|
|
100
|
+
"export function parseNativeEnumDef(def) {\n const object = def.values;\n const actualKeys = Object.keys(def.values).filter((key) => {\n return typeof object[object[key]] !== \"number\";\n });\n const actualValues = actualKeys.map((key) => object[key]);\n const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n return {\n type: parsedTypes.length === 1\n ? parsedTypes[0] === \"string\"\n ? \"string\"\n : \"number\"\n : [\"string\", \"number\"],\n enum: actualValues,\n };\n}\n",
|
|
101
|
+
"import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n return refs.target === \"openAi\"\n ? undefined\n : {\n not: parseAnyDef({\n ...refs,\n currentPath: [...refs.currentPath, \"not\"],\n }),\n };\n}\n",
|
|
102
|
+
"export function parseNullDef(refs) {\n return refs.target === \"openApi3\"\n ? {\n enum: [\"null\"],\n nullable: true,\n }\n : {\n type: \"null\",\n };\n}\n",
|
|
103
|
+
"import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n ZodString: \"string\",\n ZodNumber: \"number\",\n ZodBigInt: \"integer\",\n ZodBoolean: \"boolean\",\n ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n if (refs.target === \"openApi3\")\n return asAnyOf(def, refs);\n const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n if (options.every((x) => x._def.typeName in primitiveMappings &&\n (!x._def.checks || !x._def.checks.length))) {\n // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n const types = options.reduce((types, x) => {\n const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n return type && !types.includes(type) ? [...types, type] : types;\n }, []);\n return {\n type: types.length > 1 ? types : types[0],\n };\n }\n else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n // all options literals\n const types = options.reduce((acc, x) => {\n const type = typeof x._def.value;\n switch (type) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return [...acc, type];\n case \"bigint\":\n return [...acc, \"integer\"];\n case \"object\":\n if (x._def.value === null)\n return [...acc, \"null\"];\n case \"symbol\":\n case \"undefined\":\n case \"function\":\n default:\n return acc;\n }\n }, []);\n if (types.length === options.length) {\n // all the literals are primitive, as far as null can be considered primitive\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce((acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n }, []),\n };\n }\n }\n else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n return {\n type: \"string\",\n enum: options.reduce((acc, x) => [\n ...acc,\n ...x._def.values.filter((x) => !acc.includes(x)),\n ], []),\n };\n }\n return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n const anyOf = (def.options instanceof Map\n ? Array.from(def.options.values())\n : def.options)\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n }))\n .filter((x) => !!x &&\n (!refs.strictUnions ||\n (typeof x === \"object\" && Object.keys(x).length > 0)));\n return anyOf.length ? { anyOf } : undefined;\n};\n",
|
|
104
|
+
"import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n if (refs.target === \"openApi3\") {\n return {\n type: primitiveMappings[def.innerType._def.typeName],\n nullable: true,\n };\n }\n return {\n type: [\n primitiveMappings[def.innerType._def.typeName],\n \"null\",\n ],\n };\n }\n if (refs.target === \"openApi3\") {\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath],\n });\n if (base && \"$ref\" in base)\n return { allOf: [base], nullable: true };\n return base && { ...base, nullable: true };\n }\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n });\n return base && { anyOf: [base, { type: \"null\" }] };\n}\n",
|
|
105
|
+
"import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n const res = {\n type: \"number\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"int\":\n res.type = \"integer\";\n addErrorMessage(res, \"type\", check.message, refs);\n break;\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n",
|
|
106
|
+
"import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n const forceOptionalIntoNullable = refs.target === \"openAi\";\n const result = {\n type: \"object\",\n properties: {},\n };\n const required = [];\n const shape = def.shape();\n for (const propName in shape) {\n let propDef = shape[propName];\n if (propDef === undefined || propDef._def === undefined) {\n continue;\n }\n let propOptional = safeIsOptional(propDef);\n if (propOptional && forceOptionalIntoNullable) {\n if (propDef._def.typeName === \"ZodOptional\") {\n propDef = propDef._def.innerType;\n }\n if (!propDef.isNullable()) {\n propDef = propDef.nullable();\n }\n propOptional = false;\n }\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", propName],\n propertyPath: [...refs.currentPath, \"properties\", propName],\n });\n if (parsedDef === undefined) {\n continue;\n }\n result.properties[propName] = parsedDef;\n if (!propOptional) {\n required.push(propName);\n }\n }\n if (required.length) {\n result.required = required;\n }\n const additionalProperties = decideAdditionalProperties(def, refs);\n if (additionalProperties !== undefined) {\n result.additionalProperties = additionalProperties;\n }\n return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n if (def.catchall._def.typeName !== \"ZodNever\") {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n });\n }\n switch (def.unknownKeys) {\n case \"passthrough\":\n return refs.allowedAdditionalProperties;\n case \"strict\":\n return refs.rejectedAdditionalProperties;\n case \"strip\":\n return refs.removeAdditionalStrategy === \"strict\"\n ? refs.allowedAdditionalProperties\n : refs.rejectedAdditionalProperties;\n }\n}\nfunction safeIsOptional(schema) {\n try {\n return schema.isOptional();\n }\n catch {\n return true;\n }\n}\n",
|
|
107
|
+
"import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n return parseDef(def.innerType._def, refs);\n }\n const innerSchema = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n });\n return innerSchema\n ? {\n anyOf: [\n {\n not: parseAnyDef(refs),\n },\n innerSchema,\n ],\n }\n : parseAnyDef(refs);\n};\n",
|
|
108
|
+
"import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n if (refs.pipeStrategy === \"input\") {\n return parseDef(def.in._def, refs);\n }\n else if (refs.pipeStrategy === \"output\") {\n return parseDef(def.out._def, refs);\n }\n const a = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n });\n const b = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n });\n return {\n allOf: [a, b].filter((x) => x !== undefined),\n };\n};\n",
|
|
109
|
+
"import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n return parseDef(def.type._def, refs);\n}\n",
|
|
110
|
+
"import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n const items = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n const schema = {\n type: \"array\",\n uniqueItems: true,\n items,\n };\n if (def.minSize) {\n setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n }\n if (def.maxSize) {\n setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n }\n return schema;\n}\n",
|
|
111
|
+
"import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n if (def.rest) {\n return {\n type: \"array\",\n minItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalItems\"],\n }),\n };\n }\n else {\n return {\n type: \"array\",\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n };\n }\n}\n",
|
|
112
|
+
"import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n return {\n not: parseAnyDef(refs),\n };\n}\n",
|
|
113
|
+
"import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n return parseAnyDef(refs);\n}\n",
|
|
114
|
+
"import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n",
|
|
115
|
+
"import { ZodFirstPartyTypeKind } from \"zod\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n switch (typeName) {\n case ZodFirstPartyTypeKind.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNumber:\n return parseNumberDef(def, refs);\n case ZodFirstPartyTypeKind.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBigInt:\n return parseBigintDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUndefined:\n return parseUndefinedDef(refs);\n case ZodFirstPartyTypeKind.ZodNull:\n return parseNullDef(refs);\n case ZodFirstPartyTypeKind.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUnion:\n case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLiteral:\n return parseLiteralDef(def, refs);\n case ZodFirstPartyTypeKind.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLazy:\n return () => def.getter()._def;\n case ZodFirstPartyTypeKind.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNaN:\n case ZodFirstPartyTypeKind.ZodNever:\n return parseNeverDef(refs);\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef(refs);\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef(refs);\n case ZodFirstPartyTypeKind.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind.ZodFunction:\n case ZodFirstPartyTypeKind.ZodVoid:\n case ZodFirstPartyTypeKind.ZodSymbol:\n return undefined;\n default:\n /* c8 ignore next */\n return ((_) => undefined)(typeName);\n }\n};\n",
|
|
116
|
+
"import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n const seenItem = refs.seen.get(def);\n if (refs.override) {\n const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n if (seenSchema !== undefined) {\n return seenSchema;\n }\n }\n const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n refs.seen.set(def, newItem);\n const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n ? parseDef(jsonSchemaOrGetter(), refs)\n : jsonSchemaOrGetter;\n if (jsonSchema) {\n addMeta(def, refs, jsonSchema);\n }\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n newItem.jsonSchema = jsonSchema;\n return postProcessResult;\n }\n newItem.jsonSchema = jsonSchema;\n return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n switch (refs.$refStrategy) {\n case \"root\":\n return { $ref: item.path.join(\"/\") };\n case \"relative\":\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case \"none\":\n case \"seen\": {\n if (item.path.length < refs.currentPath.length &&\n item.path.every((value, index) => refs.currentPath[index] === value)) {\n console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n return parseAnyDef(refs);\n }\n return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n }\n }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n if (def.description) {\n jsonSchema.description = def.description;\n if (refs.markdownDescription) {\n jsonSchema.markdownDescription = def.description;\n }\n }\n return jsonSchema;\n};\n",
|
|
117
|
+
"import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n const refs = getRefs(options);\n let definitions = typeof options === \"object\" && options.definitions\n ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n ...acc,\n [name]: parseDef(schema._def, {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, true) ?? parseAnyDef(refs),\n }), {})\n : undefined;\n const name = typeof options === \"string\"\n ? options\n : options?.nameStrategy === \"title\"\n ? undefined\n : options?.name;\n const main = parseDef(schema._def, name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, false) ?? parseAnyDef(refs);\n const title = typeof options === \"object\" &&\n options.name !== undefined &&\n options.nameStrategy === \"title\"\n ? options.name\n : undefined;\n if (title !== undefined) {\n main.title = title;\n }\n if (refs.flags.hasReferencedOpenAiAnyType) {\n if (!definitions) {\n definitions = {};\n }\n if (!definitions[refs.openAiAnyTypeName]) {\n definitions[refs.openAiAnyTypeName] = {\n // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n items: {\n $ref: refs.$refStrategy === \"relative\"\n ? \"1\"\n : [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ].join(\"/\"),\n },\n };\n }\n }\n const combined = name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join(\"/\"),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n if (refs.target === \"jsonSchema7\") {\n combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n }\n if (refs.target === \"openAi\" &&\n (\"anyOf\" in combined ||\n \"oneOf\" in combined ||\n \"allOf\" in combined ||\n (\"type\" in combined && Array.isArray(combined.type)))) {\n console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n }\n return combined;\n};\nexport { zodToJsonSchema };\n",
|
|
118
|
+
"// Zod to JSON Schema converter with support for reusable schemas\r\nimport type { ZodSchema } from 'zod';\r\nimport type { OpenAPISpec } from '../types';\r\nimport { zodToJsonSchema as baseZodToJsonSchema } from 'zod-to-json-schema';\r\n\r\n/**\r\n * Schema cache to track schemas that should be reusable components\r\n */\r\nconst schemaCache = new WeakMap<ZodSchema, string>();\r\nlet schemaCounter = 0;\r\n\r\n/**\r\n * Convert Zod schema to JSON Schema format\r\n * Handles primitive types, objects, arrays, unions, and generates reusable schemas\r\n */\r\nexport class ZodToJsonSchemaConverter {\r\n private spec: OpenAPISpec;\r\n private generatedSchemas: Set<string> = new Set();\r\n\r\n constructor(spec: OpenAPISpec) {\r\n this.spec = spec;\r\n }\r\n\r\n /**\r\n * Convert a Zod schema to JSON Schema\r\n * Automatically generates reusable schemas in components/schemas for complex types\r\n */\r\n convert(schema: ZodSchema, options?: { name?: string; reusable?: boolean }): any {\r\n try {\r\n // Check if this schema should be a reusable component\r\n if (options?.reusable || this.shouldBeReusable(schema)) {\r\n return this.convertToReusableSchema(schema, options?.name);\r\n }\r\n\r\n // Convert inline\r\n return this.convertInline(schema);\r\n } catch (error) {\r\n console.warn('Failed to convert Zod schema to JSON Schema:', error);\r\n return { type: 'object' };\r\n }\r\n }\r\n\r\n /**\r\n * Convert schema inline (not as a reusable component)\r\n */\r\n private convertInline(schema: ZodSchema): any {\r\n const jsonSchema = baseZodToJsonSchema(schema, {\r\n target: 'openApi3',\r\n $refStrategy: 'none'\r\n });\r\n\r\n // Remove $schema property as it's not needed in OpenAPI\r\n if (jsonSchema && typeof jsonSchema === 'object') {\r\n delete (jsonSchema as any).$schema;\r\n }\r\n\r\n return jsonSchema;\r\n }\r\n\r\n /**\r\n * Convert schema to a reusable component and return a $ref\r\n */\r\n private convertToReusableSchema(schema: ZodSchema, name?: string): any {\r\n // Check if we've already converted this schema\r\n const cachedName = schemaCache.get(schema);\r\n if (cachedName && this.generatedSchemas.has(cachedName)) {\r\n return { $ref: `#/components/schemas/${cachedName}` };\r\n }\r\n\r\n // Generate a name for the schema\r\n const schemaName = name || cachedName || this.generateSchemaName();\r\n schemaCache.set(schema, schemaName);\r\n this.generatedSchemas.add(schemaName);\r\n\r\n // Convert the schema\r\n const jsonSchema = this.convertInline(schema);\r\n\r\n // Store in components/schemas\r\n if (!this.spec.components) {\r\n this.spec.components = { schemas: {} };\r\n }\r\n if (!this.spec.components.schemas) {\r\n this.spec.components.schemas = {};\r\n }\r\n\r\n this.spec.components.schemas[schemaName] = jsonSchema;\r\n\r\n // Return a reference\r\n return { $ref: `#/components/schemas/${schemaName}` };\r\n }\r\n\r\n /**\r\n * Determine if a schema should be converted to a reusable component\r\n * Complex objects and arrays should be reusable\r\n */\r\n private shouldBeReusable(schema: ZodSchema): boolean {\r\n // Convert to JSON Schema to inspect structure\r\n const jsonSchema = this.convertInline(schema);\r\n\r\n // Objects with properties should be reusable\r\n if (jsonSchema.type === 'object' && jsonSchema.properties) {\r\n const propertyCount = Object.keys(jsonSchema.properties).length;\r\n return propertyCount > 2; // More than 2 properties = reusable\r\n }\r\n\r\n // Arrays with complex items should be reusable\r\n if (jsonSchema.type === 'array' && jsonSchema.items) {\r\n const items = jsonSchema.items;\r\n if (items.type === 'object' && items.properties) {\r\n return true;\r\n }\r\n }\r\n\r\n // Unions/anyOf should be reusable\r\n if (jsonSchema.anyOf || jsonSchema.oneOf || jsonSchema.allOf) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Generate a unique schema name\r\n */\r\n private generateSchemaName(): string {\r\n return `Schema${++schemaCounter}`;\r\n }\r\n\r\n /**\r\n * Reset the schema counter (useful for testing)\r\n */\r\n static resetCounter(): void {\r\n schemaCounter = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Helper function to convert Zod schema to JSON Schema\r\n * This is a simpler interface for one-off conversions\r\n */\r\nexport function zodToJsonSchema(schema: ZodSchema, spec?: OpenAPISpec): any {\r\n if (spec) {\r\n const converter = new ZodToJsonSchemaConverter(spec);\r\n return converter.convert(schema);\r\n }\r\n\r\n // Fallback to inline conversion without spec\r\n try {\r\n const jsonSchema = baseZodToJsonSchema(schema, {\r\n target: 'openApi3',\r\n $refStrategy: 'none'\r\n });\r\n\r\n if (jsonSchema && typeof jsonSchema === 'object') {\r\n delete (jsonSchema as any).$schema;\r\n }\r\n\r\n return jsonSchema;\r\n } catch (error) {\r\n console.warn('Failed to convert Zod schema to JSON Schema:', error);\r\n return { type: 'object' };\r\n }\r\n}\r\n",
|
|
119
|
+
"// OpenAPI Generator - Generates OpenAPI 3.0 specification from metadata\r\nimport type { \r\n OpenAPISpec, \r\n RouteMetadata, \r\n ParameterMetadata,\r\n ResponseMetadata,\r\n OpenAPIOptions \r\n} from '../types';\r\nimport type { MetadataRegistry } from '../core/metadata';\r\nimport type { ZodSchema } from 'zod';\r\nimport { ZodToJsonSchemaConverter } from './zod-to-json-schema';\r\n\r\n/**\r\n * OpenAPIGenerator generates OpenAPI 3.0 specification from route metadata\r\n */\r\nexport class OpenAPIGenerator {\r\n private options: Required<OpenAPIOptions>;\r\n private converter?: ZodToJsonSchemaConverter;\r\n\r\n constructor(\r\n private metadata: MetadataRegistry,\r\n options?: OpenAPIOptions\r\n ) {\r\n this.options = {\r\n title: options?.title || 'Veloce-TS API',\r\n version: options?.version || '1.0.0',\r\n description: options?.description || 'API built with Veloce-TS',\r\n path: options?.path || '/openapi.json',\r\n docsPath: options?.docsPath || '/docs',\r\n docs: options?.docs !== false\r\n };\r\n }\r\n\r\n /**\r\n * Generate complete OpenAPI 3.0 specification\r\n */\r\n generate(): OpenAPISpec {\r\n const routes = this.metadata.getRoutes();\r\n\r\n const spec: OpenAPISpec = {\r\n openapi: '3.0.0',\r\n info: {\r\n title: this.options.title,\r\n version: this.options.version,\r\n description: this.options.description\r\n },\r\n paths: {},\r\n components: {\r\n schemas: {}\r\n }\r\n };\r\n\r\n // Initialize converter with spec reference\r\n this.converter = new ZodToJsonSchemaConverter(spec);\r\n\r\n // Process each route and add to spec\r\n for (const route of routes) {\r\n this.addRouteToSpec(spec, route);\r\n }\r\n\r\n return spec;\r\n }\r\n\r\n /**\r\n * Add a single route to the OpenAPI specification\r\n */\r\n private addRouteToSpec(spec: OpenAPISpec, route: RouteMetadata): void {\r\n const path = this.convertPathToOpenAPI(route.path);\r\n const method = route.method.toLowerCase();\r\n\r\n // Skip if method is 'all' or 'options' (not standard OpenAPI methods)\r\n if (method === 'all' || method === 'options') {\r\n return;\r\n }\r\n\r\n // Initialize path object if it doesn't exist\r\n if (!spec.paths[path]) {\r\n spec.paths[path] = {};\r\n }\r\n\r\n // Build operation object\r\n const operation: any = {\r\n summary: route.docs?.summary,\r\n description: route.docs?.description,\r\n tags: route.docs?.tags || [],\r\n deprecated: route.docs?.deprecated || false,\r\n parameters: this.extractParameters(route, spec),\r\n responses: this.extractResponses(route, spec)\r\n };\r\n\r\n // Extract request body if present\r\n const requestBody = this.extractRequestBody(route, spec);\r\n if (requestBody) {\r\n operation.requestBody = requestBody;\r\n }\r\n\r\n // Remove empty arrays/objects\r\n if (operation.parameters.length === 0) {\r\n delete operation.parameters;\r\n }\r\n if (operation.tags.length === 0) {\r\n delete operation.tags;\r\n }\r\n\r\n // Add operation to spec\r\n spec.paths[path][method] = operation;\r\n }\r\n\r\n /**\r\n * Extract parameters (query, path, header, cookie) from route metadata\r\n */\r\n private extractParameters(route: RouteMetadata, spec: OpenAPISpec): any[] {\r\n const parameters: any[] = [];\r\n\r\n for (const param of route.parameters) {\r\n if (param.type === 'query' || param.type === 'param' || param.type === 'header' || param.type === 'cookie') {\r\n const paramSpec = this.parameterToOpenAPI(param, route.path, spec);\r\n if (paramSpec) {\r\n parameters.push(paramSpec);\r\n }\r\n }\r\n }\r\n\r\n return parameters;\r\n }\r\n\r\n /**\r\n * Extract request body from @Body parameters\r\n */\r\n private extractRequestBody(route: RouteMetadata, spec: OpenAPISpec): any | null {\r\n const bodyParam = route.parameters.find(p => p.type === 'body');\r\n\r\n if (!bodyParam || !bodyParam.schema) {\r\n return null;\r\n }\r\n\r\n return {\r\n required: bodyParam.required,\r\n content: {\r\n 'application/json': {\r\n schema: this.zodToOpenAPISchema(bodyParam.schema, spec)\r\n }\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Extract responses from route metadata\r\n */\r\n private extractResponses(route: RouteMetadata, spec: OpenAPISpec): Record<string, any> {\r\n const responses: Record<string, any> = {};\r\n\r\n // Add documented responses\r\n if (route.responses && route.responses.length > 0) {\r\n for (const response of route.responses) {\r\n responses[response.statusCode.toString()] = {\r\n description: response.description || this.getDefaultResponseDescription(response.statusCode),\r\n content: response.schema ? {\r\n 'application/json': {\r\n schema: this.zodToOpenAPISchema(response.schema, spec)\r\n }\r\n } : undefined\r\n };\r\n }\r\n } else {\r\n // Add default 200 response if no responses are documented\r\n responses['200'] = {\r\n description: 'Successful response',\r\n content: {\r\n 'application/json': {\r\n schema: { type: 'object' }\r\n }\r\n }\r\n };\r\n }\r\n\r\n // Always add 422 validation error response\r\n if (!responses['422']) {\r\n responses['422'] = {\r\n description: 'Validation error',\r\n content: {\r\n 'application/json': {\r\n schema: {\r\n type: 'object',\r\n properties: {\r\n error: { type: 'string' },\r\n details: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n properties: {\r\n path: { type: 'string' },\r\n message: { type: 'string' },\r\n code: { type: 'string' }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n return responses;\r\n }\r\n\r\n /**\r\n * Convert FastAPI-TS path format to OpenAPI format\r\n * Converts :param to {param}\r\n */\r\n private convertPathToOpenAPI(path: string): string {\r\n return path.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, '{$1}');\r\n }\r\n\r\n /**\r\n * Convert parameter metadata to OpenAPI parameter object\r\n */\r\n private parameterToOpenAPI(param: ParameterMetadata, routePath: string, spec: OpenAPISpec): any | null {\r\n let inValue: string;\r\n let name: string;\r\n\r\n switch (param.type) {\r\n case 'query':\r\n inValue = 'query';\r\n name = param.name || 'query';\r\n break;\r\n case 'param':\r\n inValue = 'path';\r\n // Extract parameter name from route path if not specified\r\n if (param.name) {\r\n name = param.name;\r\n } else {\r\n // Try to extract from path\r\n const match = routePath.match(/:([a-zA-Z_][a-zA-Z0-9_]*)/);\r\n name = match ? match[1] : 'id';\r\n }\r\n break;\r\n case 'header':\r\n inValue = 'header';\r\n name = param.name || 'X-Custom-Header';\r\n break;\r\n case 'cookie':\r\n inValue = 'cookie';\r\n name = param.name || 'session';\r\n break;\r\n default:\r\n return null;\r\n }\r\n\r\n const paramSpec: any = {\r\n name,\r\n in: inValue,\r\n required: param.required || inValue === 'path', // Path params are always required\r\n schema: param.schema \r\n ? this.zodToOpenAPISchema(param.schema, spec)\r\n : { type: 'string' }\r\n };\r\n\r\n return paramSpec;\r\n }\r\n\r\n /**\r\n * Convert Zod schema to OpenAPI schema\r\n * Uses our custom converter that handles reusable schemas\r\n */\r\n private zodToOpenAPISchema(schema: ZodSchema, spec: OpenAPISpec): any {\r\n if (!this.converter) {\r\n this.converter = new ZodToJsonSchemaConverter(spec);\r\n }\r\n return this.converter.convert(schema);\r\n }\r\n\r\n /**\r\n * Get default response description for status code\r\n */\r\n private getDefaultResponseDescription(statusCode: number): string {\r\n const descriptions: Record<number, string> = {\r\n 200: 'Successful response',\r\n 201: 'Created',\r\n 204: 'No content',\r\n 400: 'Bad request',\r\n 401: 'Unauthorized',\r\n 403: 'Forbidden',\r\n 404: 'Not found',\r\n 422: 'Validation error',\r\n 500: 'Internal server error'\r\n };\r\n\r\n return descriptions[statusCode] || 'Response';\r\n }\r\n}\r\n",
|
|
120
|
+
"// OpenAPI Plugin - Generates OpenAPI 3.0 specification and serves Swagger UI\r\nimport type { Plugin } from '../core/plugin';\r\nimport type { VeloceTS } from '../core/application';\r\nimport type { OpenAPIOptions } from '../types';\r\nimport { OpenAPIGenerator } from '../docs';\r\n\r\n/**\r\n * OpenAPIPlugin generates OpenAPI 3.0 specification from route metadata\r\n * and serves Swagger UI for interactive API documentation\r\n */\r\nexport class OpenAPIPlugin implements Plugin {\r\n name = 'openapi';\r\n version = '1.0.0';\r\n\r\n private options: Required<OpenAPIOptions>;\r\n\r\n constructor(options?: OpenAPIOptions) {\r\n this.options = {\r\n title: options?.title || 'Veloce-TS API',\r\n version: options?.version || '1.0.0',\r\n description: options?.description || 'API built with Veloce-TS',\r\n path: options?.path || '/openapi.json',\r\n docsPath: options?.docsPath || '/docs',\r\n docs: options?.docs !== false\r\n };\r\n }\r\n\r\n async install(app: VeloceTS): Promise<void> {\r\n // Get app config to merge with plugin options\r\n const appConfig = app.getConfig();\r\n if (appConfig.title) this.options.title = appConfig.title;\r\n if (appConfig.version) this.options.version = appConfig.version;\r\n if (appConfig.description) this.options.description = appConfig.description;\r\n\r\n // Register OpenAPI spec endpoint\r\n app.get(this.options.path, {\r\n handler: async () => {\r\n const spec = this.generateSpec(app);\r\n return spec;\r\n },\r\n docs: {\r\n summary: 'Get OpenAPI specification',\r\n description: 'Returns the OpenAPI 3.0 specification for this API',\r\n tags: ['Documentation']\r\n }\r\n });\r\n\r\n // Note: Swagger UI HTML is served via static files (public/docs.html)\r\n // This is more reliable than serving HTML from the plugin\r\n // The OpenAPI JSON spec is available at the configured path\r\n }\r\n\r\n /**\r\n * Generate OpenAPI 3.0 specification from application metadata\r\n */\r\n private generateSpec(app: VeloceTS) {\r\n const metadata = app.getMetadata();\r\n const generator = new OpenAPIGenerator(metadata, this.options);\r\n return generator.generate();\r\n }\r\n\r\n /**\r\n * Render Swagger UI HTML\r\n */\r\n private renderSwaggerUI(): string {\r\n return `<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n <meta charset=\"UTF-8\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <title>${this.options.title} - API Documentation</title>\r\n <link rel=\"stylesheet\" href=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui.css\" />\r\n <style>\r\n body {\r\n margin: 0;\r\n padding: 0;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n <div id=\"swagger-ui\"></div>\r\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-bundle.js\" crossorigin></script>\r\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-standalone-preset.js\" crossorigin></script>\r\n <script>\r\n window.onload = function() {\r\n window.ui = SwaggerUIBundle({\r\n url: '${this.options.path}',\r\n dom_id: '#swagger-ui',\r\n deepLinking: true,\r\n presets: [\r\n SwaggerUIBundle.presets.apis,\r\n SwaggerUIStandalonePreset\r\n ],\r\n plugins: [\r\n SwaggerUIBundle.plugins.DownloadUrl\r\n ],\r\n layout: \"StandaloneLayout\"\r\n });\r\n };\r\n </script>\r\n</body>\r\n</html>`;\r\n }\r\n}\r\n",
|
|
121
|
+
"// WebSocket connection wrapper\r\nimport type { WebSocketManager } from './manager';\r\n\r\n/**\r\n * WebSocketConnection wraps a native WebSocket with helper methods\r\n * for sending messages, broadcasting, and managing rooms\r\n */\r\nexport class WebSocketConnection {\r\n public readonly id: string;\r\n private _ws: WebSocket | null;\r\n\r\n constructor(\r\n ws: WebSocket,\r\n private manager: WebSocketManager,\r\n id?: string\r\n ) {\r\n this._ws = ws;\r\n this.id = id || crypto.randomUUID();\r\n }\r\n\r\n /**\r\n * Send a message to this specific connection\r\n * @param data - Data to send (will be JSON stringified)\r\n */\r\n send(data: any): void {\r\n if (!this._ws || this._ws.readyState !== WebSocket.OPEN) {\r\n return;\r\n }\r\n\r\n const message = typeof data === 'string' ? data : JSON.stringify(data);\r\n this._ws.send(message);\r\n }\r\n\r\n /**\r\n * Broadcast a message to all connections in a room (or all connections if no room specified)\r\n * @param data - Data to broadcast\r\n * @param room - Optional room name to broadcast to\r\n */\r\n broadcast(data: any, room?: string): void {\r\n this.manager.broadcast(data, room);\r\n }\r\n\r\n /**\r\n * Join a room\r\n * @param room - Room name to join\r\n */\r\n join(room: string): void {\r\n this.manager.joinRoom(this.id, room);\r\n }\r\n\r\n /**\r\n * Leave a room\r\n * @param room - Room name to leave\r\n */\r\n leave(room: string): void {\r\n this.manager.leaveRoom(this.id, room);\r\n }\r\n\r\n /**\r\n * Close the WebSocket connection\r\n * @param code - Optional close code\r\n * @param reason - Optional close reason\r\n */\r\n close(code?: number, reason?: string): void {\r\n if (this._ws && this._ws.readyState === WebSocket.OPEN) {\r\n this._ws.close(code, reason);\r\n }\r\n }\r\n\r\n /**\r\n * Get the native WebSocket instance\r\n */\r\n get native(): WebSocket | null {\r\n return this._ws;\r\n }\r\n\r\n /**\r\n * Check if the connection is open\r\n */\r\n get isOpen(): boolean {\r\n return this._ws !== null && this._ws.readyState === WebSocket.OPEN;\r\n }\r\n\r\n /**\r\n * Internal method to mark connection as closed\r\n */\r\n _markClosed(): void {\r\n this._ws = null;\r\n }\r\n}\r\n",
|
|
122
|
+
"// WebSocket manager for connection tracking and room management\r\nimport type { WebSocketMetadata, Class } from '../types';\r\nimport { WebSocketConnection } from './connection';\r\n\r\n/**\r\n * WebSocketManager handles WebSocket connection lifecycle,\r\n * connection tracking, and room-based broadcasting\r\n */\r\nexport class WebSocketManager {\r\n private connections: Map<string, WebSocketConnection> = new Map();\r\n private rooms: Map<string, Set<string>> = new Map();\r\n private connectionsByRoom: Map<string, Set<WebSocketConnection>> = new Map();\r\n\r\n /**\r\n * Register a new WebSocket connection\r\n * @param ws - Native WebSocket instance\r\n * @param metadata - WebSocket route metadata\r\n * @returns The created WebSocketConnection\r\n */\r\n handleConnection(ws: WebSocket, metadata: WebSocketMetadata): WebSocketConnection {\r\n const connection = new WebSocketConnection(ws, this);\r\n this.connections.set(connection.id, connection);\r\n\r\n // Execute onConnect handler if defined\r\n if (metadata.onConnect) {\r\n this.executeHandler(metadata, metadata.onConnect, connection);\r\n }\r\n\r\n // Set up message handler\r\n ws.addEventListener('message', async (event) => {\r\n await this.handleMessage(event, connection, metadata);\r\n });\r\n\r\n // Set up close handler\r\n ws.addEventListener('close', () => {\r\n this.handleDisconnect(connection, metadata);\r\n });\r\n\r\n // Set up error handler\r\n ws.addEventListener('error', (error) => {\r\n console.error(`WebSocket error for connection ${connection.id}:`, error);\r\n });\r\n\r\n return connection;\r\n }\r\n\r\n /**\r\n * Handle incoming WebSocket message\r\n */\r\n private async handleMessage(\r\n event: MessageEvent,\r\n connection: WebSocketConnection,\r\n metadata: WebSocketMetadata\r\n ): Promise<void> {\r\n if (!metadata.onMessage) {\r\n return;\r\n }\r\n\r\n let data: any;\r\n\r\n try {\r\n // Parse message data\r\n data = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\r\n\r\n // Validate with schema if provided\r\n if (metadata.messageSchema) {\r\n data = await metadata.messageSchema.parseAsync(data);\r\n }\r\n\r\n // Execute onMessage handler\r\n await this.executeHandler(metadata, metadata.onMessage, connection, data);\r\n } catch (error) {\r\n // Send error back to client without closing connection\r\n connection.send({\r\n error: 'Invalid message format',\r\n details: error instanceof Error ? error.message : 'Unknown error'\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Handle WebSocket disconnection\r\n */\r\n private handleDisconnect(connection: WebSocketConnection, metadata: WebSocketMetadata): void {\r\n // Remove from all rooms\r\n Array.from(this.connectionsByRoom.entries()).forEach(([room, connections]) => {\r\n connections.delete(connection);\r\n if (connections.size === 0) {\r\n this.connectionsByRoom.delete(room);\r\n }\r\n });\r\n\r\n // Remove from rooms tracking\r\n Array.from(this.rooms.entries()).forEach(([room, connectionIds]) => {\r\n connectionIds.delete(connection.id);\r\n if (connectionIds.size === 0) {\r\n this.rooms.delete(room);\r\n }\r\n });\r\n\r\n // Remove from connections map\r\n this.connections.delete(connection.id);\r\n connection._markClosed();\r\n\r\n // Execute onDisconnect handler if defined\r\n if (metadata.onDisconnect) {\r\n this.executeHandler(metadata, metadata.onDisconnect, connection);\r\n }\r\n }\r\n\r\n /**\r\n * Execute a handler method on the target class\r\n */\r\n private async executeHandler(\r\n metadata: WebSocketMetadata,\r\n methodName: string,\r\n connection: WebSocketConnection,\r\n data?: any\r\n ): Promise<void> {\r\n try {\r\n const instance = new metadata.target();\r\n const method = (instance as any)[methodName];\r\n\r\n if (typeof method === 'function') {\r\n if (data !== undefined) {\r\n await method.call(instance, connection, data);\r\n } else {\r\n await method.call(instance, connection);\r\n }\r\n }\r\n } catch (error) {\r\n console.error(`Error executing WebSocket handler ${methodName}:`, error);\r\n }\r\n }\r\n\r\n /**\r\n * Broadcast a message to all connections or connections in a specific room\r\n * @param message - Message to broadcast\r\n * @param room - Optional room name\r\n */\r\n broadcast(message: any, room?: string): void {\r\n const connections = room\r\n ? this.getConnectionsInRoom(room)\r\n : Array.from(this.connections.values());\r\n\r\n const data = typeof message === 'string' ? message : JSON.stringify(message);\r\n\r\n for (const connection of connections) {\r\n if (connection.isOpen) {\r\n connection.send(data);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add a connection to a room\r\n * @param connectionId - Connection ID\r\n * @param room - Room name\r\n */\r\n joinRoom(connectionId: string, room: string): void {\r\n const connection = this.connections.get(connectionId);\r\n if (!connection) {\r\n return;\r\n }\r\n\r\n // Add to rooms map (connectionId -> room)\r\n if (!this.rooms.has(room)) {\r\n this.rooms.set(room, new Set());\r\n }\r\n this.rooms.get(room)!.add(connectionId);\r\n\r\n // Add to connectionsByRoom map (room -> connections)\r\n if (!this.connectionsByRoom.has(room)) {\r\n this.connectionsByRoom.set(room, new Set());\r\n }\r\n this.connectionsByRoom.get(room)!.add(connection);\r\n }\r\n\r\n /**\r\n * Remove a connection from a room\r\n * @param connectionId - Connection ID\r\n * @param room - Room name\r\n */\r\n leaveRoom(connectionId: string, room: string): void {\r\n const connection = this.connections.get(connectionId);\r\n if (!connection) {\r\n return;\r\n }\r\n\r\n // Remove from rooms map\r\n const roomConnections = this.rooms.get(room);\r\n if (roomConnections) {\r\n roomConnections.delete(connectionId);\r\n if (roomConnections.size === 0) {\r\n this.rooms.delete(room);\r\n }\r\n }\r\n\r\n // Remove from connectionsByRoom map\r\n const connections = this.connectionsByRoom.get(room);\r\n if (connections) {\r\n connections.delete(connection);\r\n if (connections.size === 0) {\r\n this.connectionsByRoom.delete(room);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get all connections in a specific room\r\n * @param room - Room name\r\n * @returns Array of connections in the room\r\n */\r\n private getConnectionsInRoom(room: string): WebSocketConnection[] {\r\n const connections = this.connectionsByRoom.get(room);\r\n return connections ? Array.from(connections) : [];\r\n }\r\n\r\n /**\r\n * Get a connection by ID\r\n * @param connectionId - Connection ID\r\n * @returns The connection or undefined\r\n */\r\n getConnection(connectionId: string): WebSocketConnection | undefined {\r\n return this.connections.get(connectionId);\r\n }\r\n\r\n /**\r\n * Get all active connections\r\n * @returns Array of all connections\r\n */\r\n getAllConnections(): WebSocketConnection[] {\r\n return Array.from(this.connections.values());\r\n }\r\n\r\n /**\r\n * Get the number of active connections\r\n * @returns Number of connections\r\n */\r\n getConnectionCount(): number {\r\n return this.connections.size;\r\n }\r\n\r\n /**\r\n * Get all room names\r\n * @returns Array of room names\r\n */\r\n getRooms(): string[] {\r\n return Array.from(this.rooms.keys());\r\n }\r\n\r\n /**\r\n * Get the number of connections in a room\r\n * @param room - Room name\r\n * @returns Number of connections in the room\r\n */\r\n getRoomSize(room: string): number {\r\n return this.rooms.get(room)?.size || 0;\r\n }\r\n}\r\n",
|
|
123
|
+
"// WebSocket Plugin\r\nimport type { Plugin } from '../core/plugin';\r\nimport type { VeloceTS } from '../core/application';\r\nimport { WebSocketManager } from './manager';\r\n\r\n/**\r\n * WebSocketPlugin adds WebSocket support to Veloce-TS\r\n * Registers WebSocket routes and handles connection upgrades\r\n */\r\nexport class WebSocketPlugin implements Plugin {\r\n name = 'websocket';\r\n version = '1.0.0';\r\n\r\n private manager: WebSocketManager;\r\n\r\n constructor() {\r\n this.manager = new WebSocketManager();\r\n }\r\n\r\n async install(app: VeloceTS): Promise<void> {\r\n const metadata = app.getMetadata();\r\n const websockets = metadata.getWebSockets();\r\n\r\n // Register each WebSocket handler\r\n for (const ws of websockets) {\r\n this.registerWebSocket(app, ws);\r\n }\r\n }\r\n\r\n /**\r\n * Register a WebSocket route with the application\r\n */\r\n private registerWebSocket(app: VeloceTS, metadata: any): void {\r\n const hono = app.getHono();\r\n\r\n // Register WebSocket upgrade endpoint\r\n hono.get(metadata.path, async (c) => {\r\n // Check if this is a WebSocket upgrade request\r\n const upgrade = c.req.header('upgrade');\r\n \r\n if (upgrade?.toLowerCase() !== 'websocket') {\r\n return c.text('Expected WebSocket upgrade', 426);\r\n }\r\n\r\n // Handle WebSocket upgrade based on runtime\r\n return this.handleUpgrade(c, metadata);\r\n });\r\n }\r\n\r\n /**\r\n * Handle WebSocket upgrade for different runtimes\r\n */\r\n private handleUpgrade(c: any, metadata: any): Response {\r\n // Detect runtime and handle accordingly\r\n if (typeof Bun !== 'undefined') {\r\n return this.handleBunUpgrade(c, metadata);\r\n } else if (typeof (globalThis as any).Deno !== 'undefined') {\r\n return this.handleDenoUpgrade(c, metadata);\r\n } else {\r\n // Node.js or other runtimes\r\n return this.handleNodeUpgrade(c, metadata);\r\n }\r\n }\r\n\r\n /**\r\n * Handle WebSocket upgrade for Bun runtime\r\n */\r\n private handleBunUpgrade(c: any, metadata: any): Response {\r\n const success = (c.env as any)?.upgrade?.(c.req.raw);\r\n \r\n if (!success) {\r\n return c.text('WebSocket upgrade failed', 500);\r\n }\r\n\r\n return new Response(null, { status: 101 });\r\n }\r\n\r\n /**\r\n * Handle WebSocket upgrade for Deno runtime\r\n */\r\n private handleDenoUpgrade(c: any, metadata: any): Response {\r\n const Deno = (globalThis as any).Deno;\r\n const { socket, response } = Deno.upgradeWebSocket(c.req.raw);\r\n \r\n // Set up WebSocket handlers\r\n socket.onopen = () => {\r\n this.manager.handleConnection(socket as any, metadata);\r\n };\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Handle WebSocket upgrade for Node.js runtime\r\n */\r\n private handleNodeUpgrade(c: any, metadata: any): Response {\r\n // For Node.js, we need to handle this differently\r\n // This is a simplified version - in production, you'd use a library like 'ws'\r\n return c.text('WebSocket support requires Bun or Deno runtime', 501);\r\n }\r\n\r\n /**\r\n * Get the WebSocket manager instance\r\n */\r\n getManager(): WebSocketManager {\r\n return this.manager;\r\n }\r\n\r\n /**\r\n * Broadcast a message to all connections or a specific room\r\n */\r\n broadcast(message: any, room?: string): void {\r\n this.manager.broadcast(message, room);\r\n }\r\n\r\n /**\r\n * Get connection count\r\n */\r\n getConnectionCount(): number {\r\n return this.manager.getConnectionCount();\r\n }\r\n\r\n /**\r\n * Get all active rooms\r\n */\r\n getRooms(): string[] {\r\n return this.manager.getRooms();\r\n }\r\n}\r\n",
|
|
124
|
+
"// GraphQL decorators for Veloce-TS\r\nimport 'reflect-metadata';\r\nimport type { ZodSchema } from 'zod';\r\nimport type {\r\n GraphQLResolverMetadata,\r\n GraphQLFieldMetadata,\r\n GraphQLArgumentMetadata,\r\n GraphQLOperationType\r\n} from '../types';\r\n\r\n// Metadata keys for reflect-metadata\r\nconst GRAPHQL_RESOLVER_KEY = Symbol('graphql:resolver');\r\nconst GRAPHQL_FIELD_KEY = Symbol('graphql:field');\r\nconst GRAPHQL_ARGS_KEY = Symbol('graphql:args');\r\n\r\n/**\r\n * @Resolver decorator - Marks a class as a GraphQL resolver\r\n * \r\n * @example\r\n * ```typescript\r\n * @Resolver()\r\n * class UserResolver {\r\n * @Query()\r\n * async getUser(@Arg('id', z.string()) id: string) {\r\n * return { id, name: 'John' };\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function Resolver(name?: string): ClassDecorator {\r\n return (target: any) => {\r\n const metadata: GraphQLResolverMetadata = {\r\n target,\r\n name: name || target.name\r\n };\r\n\r\n Reflect.defineMetadata(GRAPHQL_RESOLVER_KEY, metadata, target);\r\n };\r\n}\r\n\r\n/**\r\n * @GQLQuery decorator - Marks a method as a GraphQL query\r\n * \r\n * @example\r\n * ```typescript\r\n * @GQLQuery()\r\n * async getUser(@Arg('id', z.string()) id: string) {\r\n * return { id, name: 'John' };\r\n * }\r\n * ```\r\n */\r\nexport function GQLQuery(name?: string, options?: {\r\n description?: string;\r\n deprecated?: boolean;\r\n deprecationReason?: string;\r\n}): MethodDecorator {\r\n return createFieldDecorator('query', name, options);\r\n}\r\n\r\n// Alias for convenience\r\nexport { GQLQuery as GraphQLQuery };\r\n\r\n/**\r\n * @GQLMutation decorator - Marks a method as a GraphQL mutation\r\n * \r\n * @example\r\n * ```typescript\r\n * @GQLMutation()\r\n * async createUser(@Arg('input', CreateUserSchema) input: CreateUserInput) {\r\n * return { id: '1', ...input };\r\n * }\r\n * ```\r\n */\r\nexport function GQLMutation(name?: string, options?: {\r\n description?: string;\r\n deprecated?: boolean;\r\n deprecationReason?: string;\r\n}): MethodDecorator {\r\n return createFieldDecorator('mutation', name, options);\r\n}\r\n\r\n// Alias for convenience\r\nexport { GQLMutation as GraphQLMutation };\r\nexport { GQLMutation as Mutation };\r\n\r\n/**\r\n * @GQLSubscription decorator - Marks a method as a GraphQL subscription\r\n * \r\n * @example\r\n * ```typescript\r\n * @GQLSubscription()\r\n * async onUserCreated() {\r\n * return pubsub.asyncIterator('USER_CREATED');\r\n * }\r\n * ```\r\n */\r\nexport function GQLSubscription(name?: string, options?: {\r\n description?: string;\r\n deprecated?: boolean;\r\n deprecationReason?: string;\r\n}): MethodDecorator {\r\n return createFieldDecorator('subscription', name, options);\r\n}\r\n\r\n// Alias for convenience\r\nexport { GQLSubscription as GraphQLSubscription };\r\nexport { GQLSubscription as Subscription };\r\n\r\n/**\r\n * Helper function to create field decorators\r\n */\r\nfunction createFieldDecorator(\r\n type: GraphQLOperationType,\r\n name?: string,\r\n options?: {\r\n description?: string;\r\n deprecated?: boolean;\r\n deprecationReason?: string;\r\n }\r\n): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata: GraphQLFieldMetadata = {\r\n target: target.constructor,\r\n propertyKey: propertyKey as string,\r\n type,\r\n name: name || (propertyKey as string),\r\n description: options?.description,\r\n deprecated: options?.deprecated,\r\n deprecationReason: options?.deprecationReason\r\n };\r\n\r\n // Store field metadata\r\n const existingFields = Reflect.getMetadata(GRAPHQL_FIELD_KEY, target.constructor) || [];\r\n existingFields.push(metadata);\r\n Reflect.defineMetadata(GRAPHQL_FIELD_KEY, existingFields, target.constructor);\r\n\r\n // Also store on the method itself for easy access\r\n Reflect.defineMetadata(GRAPHQL_FIELD_KEY, metadata, target, propertyKey);\r\n };\r\n}\r\n\r\n/**\r\n * @Arg decorator - Marks a parameter as a GraphQL argument with validation\r\n * \r\n * @example\r\n * ```typescript\r\n * @Query()\r\n * async getUser(\r\n * @Arg('id', z.string().uuid()) id: string,\r\n * @Arg('includeProfile', z.boolean().optional()) includeProfile?: boolean\r\n * ) {\r\n * return { id, name: 'John' };\r\n * }\r\n * ```\r\n */\r\nexport function Arg<T extends ZodSchema>(\r\n name: string,\r\n schema?: T,\r\n options?: {\r\n description?: string;\r\n defaultValue?: any;\r\n nullable?: boolean;\r\n }\r\n): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n \r\n const existingArgs = Reflect.getMetadata(GRAPHQL_ARGS_KEY, target, propertyKey) || [];\r\n\r\n const metadata: GraphQLArgumentMetadata = {\r\n index: parameterIndex,\r\n name,\r\n schema,\r\n description: options?.description,\r\n defaultValue: options?.defaultValue,\r\n nullable: options?.nullable\r\n };\r\n\r\n existingArgs[parameterIndex] = metadata;\r\n Reflect.defineMetadata(GRAPHQL_ARGS_KEY, existingArgs, target, propertyKey);\r\n };\r\n}\r\n\r\n/**\r\n * @GQLContext decorator - Injects GraphQL context into a parameter\r\n * \r\n * @example\r\n * ```typescript\r\n * @GQLQuery()\r\n * async getCurrentUser(@GQLContext() ctx: GraphQLContext) {\r\n * return ctx.user;\r\n * }\r\n * ```\r\n */\r\nexport function GQLContext(): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n \r\n const existingArgs = Reflect.getMetadata(GRAPHQL_ARGS_KEY, target, propertyKey) || [];\r\n\r\n const metadata: GraphQLArgumentMetadata = {\r\n index: parameterIndex,\r\n name: '__context__', // Special marker for context injection\r\n nullable: false\r\n };\r\n\r\n existingArgs[parameterIndex] = metadata;\r\n Reflect.defineMetadata(GRAPHQL_ARGS_KEY, existingArgs, target, propertyKey);\r\n };\r\n}\r\n\r\n// Alias for convenience (note: GraphQLContext type is exported from graphql module)\r\nexport { GQLContext as GraphQLCtx };\r\n\r\n// ============================================================================\r\n// Helper functions to retrieve metadata\r\n// ============================================================================\r\n\r\n/**\r\n * Get resolver metadata from a class\r\n */\r\nexport function getResolverMetadata(target: any): GraphQLResolverMetadata | undefined {\r\n return Reflect.getMetadata(GRAPHQL_RESOLVER_KEY, target);\r\n}\r\n\r\n/**\r\n * Get all field metadata from a resolver class\r\n */\r\nexport function getFieldsMetadata(target: any): GraphQLFieldMetadata[] {\r\n return Reflect.getMetadata(GRAPHQL_FIELD_KEY, target) || [];\r\n}\r\n\r\n/**\r\n * Get field metadata from a specific method\r\n */\r\nexport function getFieldMetadata(target: any, propertyKey: string): GraphQLFieldMetadata | undefined {\r\n return Reflect.getMetadata(GRAPHQL_FIELD_KEY, target, propertyKey);\r\n}\r\n\r\n/**\r\n * Get argument metadata from a method\r\n */\r\nexport function getArgumentsMetadata(target: any, propertyKey: string): GraphQLArgumentMetadata[] {\r\n return Reflect.getMetadata(GRAPHQL_ARGS_KEY, target, propertyKey) || [];\r\n}\r\n\r\n/**\r\n * Check if a class has resolver metadata\r\n */\r\nexport function hasResolverMetadata(target: any): boolean {\r\n return Reflect.hasMetadata(GRAPHQL_RESOLVER_KEY, target);\r\n}\r\n\r\n/**\r\n * Check if a method has field metadata\r\n */\r\nexport function hasFieldMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(GRAPHQL_FIELD_KEY, target, propertyKey);\r\n}\r\n",
|
|
125
|
+
"// Convert Zod schemas to GraphQL types\r\nimport type { ZodSchema, ZodTypeAny } from 'zod';\r\nimport { z } from 'zod';\r\n\r\n/**\r\n * Convert a Zod schema to a GraphQL type string\r\n */\r\nexport function zodToGraphQLType(schema: ZodSchema): string {\r\n const zodType = (schema as any)._def.typeName;\r\n\r\n // Handle ZodString\r\n if (zodType === 'ZodString') {\r\n return 'String';\r\n }\r\n\r\n // Handle ZodNumber\r\n if (zodType === 'ZodNumber') {\r\n const def = (schema as any)._def;\r\n if (def.checks?.some((check: any) => check.kind === 'int')) {\r\n return 'Int';\r\n }\r\n return 'Float';\r\n }\r\n\r\n // Handle ZodBoolean\r\n if (zodType === 'ZodBoolean') {\r\n return 'Boolean';\r\n }\r\n\r\n // Handle ZodArray\r\n if (zodType === 'ZodArray') {\r\n const elementType = zodToGraphQLType((schema as any)._def.type);\r\n return `[${elementType}]`;\r\n }\r\n\r\n // Handle ZodObject\r\n if (zodType === 'ZodObject') {\r\n // For objects, we'll need to generate a custom type\r\n // Return a placeholder that will be replaced with the actual type name\r\n return 'JSON'; // GraphQL scalar for generic objects\r\n }\r\n\r\n // Handle ZodOptional\r\n if (zodType === 'ZodOptional') {\r\n return zodToGraphQLType((schema as any)._def.innerType);\r\n }\r\n\r\n // Handle ZodNullable\r\n if (zodType === 'ZodNullable') {\r\n return zodToGraphQLType((schema as any)._def.innerType);\r\n }\r\n\r\n // Handle ZodDefault\r\n if (zodType === 'ZodDefault') {\r\n return zodToGraphQLType((schema as any)._def.innerType);\r\n }\r\n\r\n // Handle ZodEnum\r\n if (zodType === 'ZodEnum') {\r\n // For enums, we'll need to generate a custom enum type\r\n return 'String'; // Fallback to String\r\n }\r\n\r\n // Handle ZodUnion\r\n if (zodType === 'ZodUnion') {\r\n // GraphQL doesn't support unions of scalars directly\r\n // We'll use the first option as fallback\r\n const options = (schema as any)._def.options;\r\n if (options && options.length > 0) {\r\n return zodToGraphQLType(options[0]);\r\n }\r\n }\r\n\r\n // Handle ZodLiteral\r\n if (zodType === 'ZodLiteral') {\r\n const value = (schema as any)._def.value;\r\n if (typeof value === 'string') return 'String';\r\n if (typeof value === 'number') return 'Float';\r\n if (typeof value === 'boolean') return 'Boolean';\r\n }\r\n\r\n // Handle ZodDate\r\n if (zodType === 'ZodDate') {\r\n return 'String'; // ISO date string\r\n }\r\n\r\n // Default fallback\r\n return 'String';\r\n}\r\n\r\n/**\r\n * Check if a Zod schema is nullable/optional\r\n */\r\nexport function isNullable(schema: ZodSchema): boolean {\r\n const zodType = (schema as any)._def.typeName;\r\n \r\n if (zodType === 'ZodOptional' || zodType === 'ZodNullable') {\r\n return true;\r\n }\r\n\r\n if (zodType === 'ZodDefault') {\r\n return isNullable((schema as any)._def.innerType);\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Get the default value from a Zod schema\r\n */\r\nexport function getDefaultValue(schema: ZodSchema): any {\r\n const zodType = (schema as any)._def.typeName;\r\n\r\n if (zodType === 'ZodDefault') {\r\n return (schema as any)._def.defaultValue();\r\n }\r\n\r\n if (zodType === 'ZodOptional' || zodType === 'ZodNullable') {\r\n const innerType = (schema as any)._def.innerType;\r\n if (innerType) {\r\n return getDefaultValue(innerType);\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Generate GraphQL object type definition from Zod object schema\r\n */\r\nexport function zodObjectToGraphQLType(name: string, schema: ZodSchema): string {\r\n const zodType = (schema as any)._def.typeName;\r\n\r\n if (zodType !== 'ZodObject') {\r\n throw new Error('Schema must be a ZodObject');\r\n }\r\n\r\n const shape = (schema as any)._def.shape();\r\n const fields: string[] = [];\r\n\r\n for (const [key, value] of Object.entries(shape)) {\r\n const fieldSchema = value as ZodTypeAny;\r\n const fieldType = zodToGraphQLType(fieldSchema);\r\n const nullable = isNullable(fieldSchema);\r\n const typeString = nullable ? fieldType : `${fieldType}!`;\r\n fields.push(` ${key}: ${typeString}`);\r\n }\r\n\r\n return `type ${name} {\\n${fields.join('\\n')}\\n}`;\r\n}\r\n\r\n/**\r\n * Generate GraphQL input type definition from Zod object schema\r\n */\r\nexport function zodObjectToGraphQLInput(name: string, schema: ZodSchema): string {\r\n const zodType = (schema as any)._def.typeName;\r\n\r\n if (zodType !== 'ZodObject') {\r\n throw new Error('Schema must be a ZodObject');\r\n }\r\n\r\n const shape = (schema as any)._def.shape();\r\n const fields: string[] = [];\r\n\r\n for (const [key, value] of Object.entries(shape)) {\r\n const fieldSchema = value as ZodTypeAny;\r\n const fieldType = zodToGraphQLType(fieldSchema);\r\n const nullable = isNullable(fieldSchema);\r\n const defaultValue = getDefaultValue(fieldSchema);\r\n \r\n let typeString = nullable ? fieldType : `${fieldType}!`;\r\n \r\n if (defaultValue !== undefined) {\r\n const defaultStr = JSON.stringify(defaultValue);\r\n typeString += ` = ${defaultStr}`;\r\n }\r\n \r\n fields.push(` ${key}: ${typeString}`);\r\n }\r\n\r\n return `input ${name} {\\n${fields.join('\\n')}\\n}`;\r\n}\r\n",
|
|
126
|
+
"import { ZodError } from 'zod';\r\nimport { HTTPException } from '../errors/exceptions.js';\r\n\r\n/**\r\n * ValidationException is thrown when Zod validation fails\r\n * Extends HTTPException with 422 Unprocessable Entity status\r\n * Provides detailed validation error information\r\n */\r\nexport class ValidationException extends HTTPException {\r\n constructor(public zodError: ZodError) {\r\n super(422, 'Validation failed');\r\n this.name = 'ValidationException';\r\n }\r\n\r\n /**\r\n * Converts the validation error to a user-friendly JSON format\r\n * @returns Object with error message and detailed validation errors\r\n */\r\n toJSON() {\r\n return {\r\n error: 'Validation Error',\r\n statusCode: this.statusCode,\r\n details: this.zodError.errors.map(err => ({\r\n path: err.path.join('.'),\r\n message: err.message,\r\n code: err.code\r\n }))\r\n };\r\n }\r\n}\r\n",
|
|
127
|
+
"import { ZodSchema, ZodError } from 'zod';\r\nimport { ValidationException } from './exceptions.js';\r\n\r\n/**\r\n * Cached schema wrapper that stores parsed schema and validation results\r\n */\r\ninterface CachedSchema<T = any> {\r\n schema: ZodSchema<T>;\r\n // Cache for successful validation results (optional optimization)\r\n // Using WeakMap to allow garbage collection of validated data\r\n resultCache?: WeakMap<any, T>;\r\n}\r\n\r\n/**\r\n * ValidationEngine handles validation of data against Zod schemas\r\n * with built-in caching for performance optimization\r\n * \r\n * Performance optimizations:\r\n * - WeakMap-based schema caching to reuse parsed schemas\r\n * - Optional result caching for identical input objects\r\n * - Efficient error handling with minimal overhead\r\n */\r\nexport class ValidationEngine {\r\n // Primary schema cache using WeakMap for automatic garbage collection\r\n private schemaCache: WeakMap<ZodSchema, CachedSchema> = new WeakMap();\r\n \r\n // Statistics for monitoring cache effectiveness (optional, for debugging)\r\n private stats = {\r\n hits: 0,\r\n misses: 0,\r\n validations: 0\r\n };\r\n\r\n /**\r\n * Validates data asynchronously against a Zod schema\r\n * Uses cached schema for improved performance on repeated validations\r\n * \r\n * @param data - The data to validate\r\n * @param schema - The Zod schema to validate against\r\n * @returns The validated and typed data\r\n * @throws ValidationException if validation fails\r\n */\r\n async validate<T>(data: unknown, schema: ZodSchema<T>): Promise<T> {\r\n this.stats.validations++;\r\n \r\n try {\r\n // Get or create cached schema\r\n let cached = this.schemaCache.get(schema);\r\n \r\n if (!cached) {\r\n this.stats.misses++;\r\n // First time seeing this schema - cache it\r\n cached = {\r\n schema: schema,\r\n resultCache: new WeakMap()\r\n };\r\n this.schemaCache.set(schema, cached);\r\n } else {\r\n this.stats.hits++;\r\n }\r\n \r\n // Use the cached schema for validation\r\n return await cached.schema.parseAsync(data);\r\n } catch (error) {\r\n if (error instanceof ZodError) {\r\n throw new ValidationException(error);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Validates data synchronously against a Zod schema\r\n * Uses cached schema for improved performance on repeated validations\r\n * \r\n * @param data - The data to validate\r\n * @param schema - The Zod schema to validate against\r\n * @returns The validated and typed data\r\n * @throws ValidationException if validation fails\r\n */\r\n validateSync<T>(data: unknown, schema: ZodSchema<T>): T {\r\n this.stats.validations++;\r\n \r\n try {\r\n // Get or create cached schema\r\n let cached = this.schemaCache.get(schema);\r\n \r\n if (!cached) {\r\n this.stats.misses++;\r\n // First time seeing this schema - cache it\r\n cached = {\r\n schema: schema,\r\n resultCache: new WeakMap()\r\n };\r\n this.schemaCache.set(schema, cached);\r\n } else {\r\n this.stats.hits++;\r\n }\r\n \r\n // Use the cached schema for validation\r\n return cached.schema.parse(data);\r\n } catch (error) {\r\n if (error instanceof ZodError) {\r\n throw new ValidationException(error);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Get cache statistics (useful for monitoring and debugging)\r\n * Returns hit rate and total validations performed\r\n */\r\n getCacheStats(): { hits: number; misses: number; validations: number; hitRate: number } {\r\n const hitRate = this.stats.validations > 0 \r\n ? (this.stats.hits / this.stats.validations) * 100 \r\n : 0;\r\n \r\n return {\r\n ...this.stats,\r\n hitRate: Math.round(hitRate * 100) / 100 // Round to 2 decimal places\r\n };\r\n }\r\n\r\n /**\r\n * Reset cache statistics (useful for testing)\r\n */\r\n resetStats(): void {\r\n this.stats = {\r\n hits: 0,\r\n misses: 0,\r\n validations: 0\r\n };\r\n }\r\n\r\n /**\r\n * Clear the schema cache (useful for testing or memory management)\r\n * Note: WeakMap doesn't have a clear method, so we create a new instance\r\n */\r\n clearCache(): void {\r\n this.schemaCache = new WeakMap();\r\n this.resetStats();\r\n }\r\n}\r\n",
|
|
128
|
+
"// GraphQL Schema Builder for Veloce-TS\r\nimport type { MetadataRegistry } from '../core/metadata';\r\nimport type { DIContainer } from '../dependencies/container';\r\nimport type { GraphQLFieldMetadata, GraphQLArgumentMetadata, Context } from '../types';\r\nimport { getArgumentsMetadata } from '../decorators/graphql';\r\nimport { zodToGraphQLType, isNullable } from './zod-to-graphql';\r\nimport { ValidationEngine } from '../validation/validator';\r\n\r\n/**\r\n * GraphQL Schema Builder\r\n * Generates GraphQL schema from decorator metadata\r\n */\r\nexport class GraphQLSchemaBuilder {\r\n private validationEngine: ValidationEngine;\r\n private customTypes: Map<string, string> = new Map();\r\n\r\n constructor(\r\n private metadata: MetadataRegistry,\r\n private container: DIContainer\r\n ) {\r\n this.validationEngine = new ValidationEngine();\r\n }\r\n\r\n /**\r\n * Build the complete GraphQL schema\r\n */\r\n build(): GraphQLSchemaDefinition {\r\n const resolvers = this.metadata.getGraphQLResolvers();\r\n \r\n const queries: string[] = [];\r\n const mutations: string[] = [];\r\n const subscriptions: string[] = [];\r\n const types: string[] = [];\r\n\r\n // Process each resolver\r\n for (const resolver of resolvers) {\r\n const fields = this.metadata.getGraphQLFieldsByResolver(resolver.target);\r\n\r\n for (const field of fields) {\r\n const fieldDef = this.buildFieldDefinition(field);\r\n\r\n switch (field.type) {\r\n case 'query':\r\n queries.push(fieldDef);\r\n break;\r\n case 'mutation':\r\n mutations.push(fieldDef);\r\n break;\r\n case 'subscription':\r\n subscriptions.push(fieldDef);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Build type definitions\r\n let typeDefs = '';\r\n\r\n // Add custom types\r\n if (this.customTypes.size > 0) {\r\n typeDefs += Array.from(this.customTypes.values()).join('\\n\\n') + '\\n\\n';\r\n }\r\n\r\n // Add Query type\r\n if (queries.length > 0) {\r\n typeDefs += 'type Query {\\n';\r\n typeDefs += queries.map(q => ` ${q}`).join('\\n');\r\n typeDefs += '\\n}\\n\\n';\r\n }\r\n\r\n // Add Mutation type\r\n if (mutations.length > 0) {\r\n typeDefs += 'type Mutation {\\n';\r\n typeDefs += mutations.map(m => ` ${m}`).join('\\n');\r\n typeDefs += '\\n}\\n\\n';\r\n }\r\n\r\n // Add Subscription type\r\n if (subscriptions.length > 0) {\r\n typeDefs += 'type Subscription {\\n';\r\n typeDefs += subscriptions.map(s => ` ${s}`).join('\\n');\r\n typeDefs += '\\n}\\n';\r\n }\r\n\r\n // Build resolvers object\r\n const resolversObj = this.buildResolvers();\r\n\r\n return {\r\n typeDefs: typeDefs.trim(),\r\n resolvers: resolversObj\r\n };\r\n }\r\n\r\n /**\r\n * Build a field definition string\r\n */\r\n private buildFieldDefinition(field: GraphQLFieldMetadata): string {\r\n const args = getArgumentsMetadata(field.target.prototype, field.propertyKey);\r\n const argStrings: string[] = [];\r\n\r\n // Build arguments\r\n for (const arg of args) {\r\n if (arg.name === '__context__') continue; // Skip context injection\r\n\r\n let argType = 'String'; // Default type\r\n \r\n if (arg.schema) {\r\n argType = zodToGraphQLType(arg.schema);\r\n const nullable = isNullable(arg.schema);\r\n if (!nullable && !arg.nullable) {\r\n argType += '!';\r\n }\r\n }\r\n\r\n let argStr = `${arg.name}: ${argType}`;\r\n \r\n if (arg.defaultValue !== undefined) {\r\n argStr += ` = ${JSON.stringify(arg.defaultValue)}`;\r\n }\r\n\r\n argStrings.push(argStr);\r\n }\r\n\r\n const argsStr = argStrings.length > 0 ? `(${argStrings.join(', ')})` : '';\r\n \r\n // For now, default return type to String (can be enhanced with type inference)\r\n const returnType = 'String';\r\n\r\n let fieldStr = `${field.name}${argsStr}: ${returnType}`;\r\n\r\n // Add deprecation\r\n if (field.deprecated) {\r\n const reason = field.deprecationReason || 'No longer supported';\r\n fieldStr += ` @deprecated(reason: \"${reason}\")`;\r\n }\r\n\r\n return fieldStr;\r\n }\r\n\r\n /**\r\n * Build resolvers object with validation and DI\r\n */\r\n private buildResolvers(): GraphQLResolvers {\r\n const resolvers = this.metadata.getGraphQLResolvers();\r\n const resolversObj: GraphQLResolvers = {\r\n Query: {},\r\n Mutation: {},\r\n Subscription: {}\r\n };\r\n\r\n for (const resolver of resolvers) {\r\n const fields = this.metadata.getGraphQLFieldsByResolver(resolver.target);\r\n\r\n for (const field of fields) {\r\n const resolverFn = this.createResolverFunction(resolver.target, field);\r\n\r\n switch (field.type) {\r\n case 'query':\r\n resolversObj.Query![field.name!] = resolverFn;\r\n break;\r\n case 'mutation':\r\n resolversObj.Mutation![field.name!] = resolverFn;\r\n break;\r\n case 'subscription':\r\n resolversObj.Subscription![field.name!] = resolverFn;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return resolversObj;\r\n }\r\n\r\n /**\r\n * Create a resolver function with validation and DI\r\n */\r\n private createResolverFunction(\r\n target: any,\r\n field: GraphQLFieldMetadata\r\n ): GraphQLResolverFn {\r\n return async (parent: any, args: any, context: GraphQLContext, info: any) => {\r\n try {\r\n // Get argument metadata\r\n const argsMetadata = getArgumentsMetadata(target.prototype, field.propertyKey);\r\n const resolvedArgs: any[] = [];\r\n\r\n // Validate and resolve arguments\r\n for (const argMeta of argsMetadata) {\r\n if (argMeta.name === '__context__') {\r\n // Inject context\r\n resolvedArgs[argMeta.index] = context;\r\n } else {\r\n let value = args[argMeta.name];\r\n\r\n // Apply default value if not provided\r\n if (value === undefined && argMeta.defaultValue !== undefined) {\r\n value = argMeta.defaultValue;\r\n }\r\n\r\n // Validate with Zod schema\r\n if (argMeta.schema) {\r\n value = await this.validationEngine.validate(value, argMeta.schema);\r\n }\r\n\r\n resolvedArgs[argMeta.index] = value;\r\n }\r\n }\r\n\r\n // Resolve the resolver instance (with DI support)\r\n const instance: any = await this.container.resolve(target, {\r\n scope: 'request',\r\n context: context.request\r\n });\r\n\r\n // Execute the resolver method\r\n const result = await instance[field.propertyKey](...resolvedArgs);\r\n\r\n return result;\r\n } catch (error) {\r\n // Re-throw for GraphQL error handling\r\n throw error;\r\n }\r\n };\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\nexport interface GraphQLSchemaDefinition {\r\n typeDefs: string;\r\n resolvers: GraphQLResolvers;\r\n}\r\n\r\nexport interface GraphQLResolvers {\r\n Query?: Record<string, GraphQLResolverFn>;\r\n Mutation?: Record<string, GraphQLResolverFn>;\r\n Subscription?: Record<string, GraphQLResolverFn>;\r\n}\r\n\r\nexport type GraphQLResolverFn = (\r\n parent: any,\r\n args: any,\r\n context: GraphQLContext,\r\n info: any\r\n) => any | Promise<any>;\r\n\r\nexport interface GraphQLContext {\r\n request: Context;\r\n user?: any;\r\n [key: string]: any;\r\n}\r\n",
|
|
129
|
+
"// GraphQL Plugin - Enables GraphQL support for Veloce-TS\r\nimport type { Plugin } from '../core/plugin';\r\nimport type { VeloceTS } from '../core/application';\r\nimport { GraphQLSchemaBuilder } from './schema-builder';\r\nimport type { GraphQLContext } from './schema-builder';\r\n\r\n/**\r\n * GraphQL Plugin Options\r\n */\r\nexport interface GraphQLPluginOptions {\r\n /** Path to serve GraphQL endpoint (default: /graphql) */\r\n path?: string;\r\n \r\n /** Path to serve GraphQL Playground (default: /graphql/playground) */\r\n playgroundPath?: string;\r\n \r\n /** Enable GraphQL Playground in development (default: true) */\r\n playground?: boolean;\r\n \r\n /** Custom context factory function */\r\n context?: (request: any) => Promise<any> | any;\r\n}\r\n\r\n/**\r\n * GraphQLPlugin enables GraphQL support with decorators and Zod validation\r\n * \r\n * @example\r\n * ```typescript\r\n * const app = new VeloceTS();\r\n * app.usePlugin(new GraphQLPlugin({\r\n * path: '/graphql',\r\n * playground: true\r\n * }));\r\n * ```\r\n */\r\nexport class GraphQLPlugin implements Plugin {\r\n name = 'graphql';\r\n version = '1.0.0';\r\n\r\n private options: Required<GraphQLPluginOptions>;\r\n private schema?: { typeDefs: string; resolvers: any };\r\n\r\n constructor(options?: GraphQLPluginOptions) {\r\n this.options = {\r\n path: options?.path || '/graphql',\r\n playgroundPath: options?.playgroundPath || '/graphql/playground',\r\n playground: options?.playground !== false,\r\n context: options?.context || ((request: any) => ({ request }))\r\n };\r\n }\r\n\r\n async install(app: VeloceTS): Promise<void> {\r\n // Build GraphQL schema from metadata\r\n const metadata = app.getMetadata();\r\n const container = app.getContainer();\r\n \r\n const schemaBuilder = new GraphQLSchemaBuilder(metadata, container);\r\n this.schema = schemaBuilder.build();\r\n\r\n // Register GraphQL endpoint\r\n app.post(this.options.path, {\r\n handler: async (c) => {\r\n return this.handleGraphQLRequest(c);\r\n },\r\n docs: {\r\n summary: 'GraphQL endpoint',\r\n description: 'Execute GraphQL queries and mutations',\r\n tags: ['GraphQL']\r\n }\r\n });\r\n\r\n // Also support GET for queries (useful for GraphQL Playground)\r\n app.get(this.options.path, {\r\n handler: async (c) => {\r\n const query = c.req.query('query');\r\n const variables = c.req.query('variables');\r\n const operationName = c.req.query('operationName');\r\n\r\n if (!query) {\r\n return c.json({ error: 'Query parameter is required' }, 400);\r\n }\r\n\r\n return this.executeGraphQL(c, {\r\n query,\r\n variables: variables ? JSON.parse(variables) : undefined,\r\n operationName\r\n });\r\n },\r\n docs: {\r\n summary: 'GraphQL endpoint (GET)',\r\n description: 'Execute GraphQL queries via GET request',\r\n tags: ['GraphQL']\r\n }\r\n });\r\n\r\n // Register GraphQL Playground endpoint if enabled\r\n if (this.options.playground) {\r\n app.get(this.options.playgroundPath, {\r\n handler: async (c) => {\r\n return c.html(this.renderPlayground());\r\n },\r\n docs: {\r\n summary: 'GraphQL Playground',\r\n description: 'Interactive GraphQL IDE',\r\n tags: ['GraphQL']\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Handle GraphQL POST request\r\n */\r\n private async handleGraphQLRequest(c: any) {\r\n try {\r\n const body = await c.req.json();\r\n return this.executeGraphQL(c, body);\r\n } catch (error) {\r\n return c.json({\r\n errors: [{\r\n message: 'Invalid JSON in request body',\r\n extensions: { code: 'BAD_REQUEST' }\r\n }]\r\n }, 400);\r\n }\r\n }\r\n\r\n /**\r\n * Execute a GraphQL operation\r\n */\r\n private async executeGraphQL(c: any, request: GraphQLRequest) {\r\n if (!this.schema) {\r\n return c.json({\r\n errors: [{\r\n message: 'GraphQL schema not initialized',\r\n extensions: { code: 'INTERNAL_SERVER_ERROR' }\r\n }]\r\n }, 500);\r\n }\r\n\r\n try {\r\n // Parse the query (simple implementation - in production use graphql-js)\r\n const { query, variables, operationName } = request;\r\n\r\n // Create context\r\n const context: GraphQLContext = await this.options.context(c);\r\n\r\n // Execute the operation\r\n const result = await this.executeOperation(\r\n query,\r\n variables,\r\n context,\r\n operationName\r\n );\r\n\r\n return c.json(result);\r\n } catch (error: any) {\r\n return c.json({\r\n errors: [{\r\n message: error.message || 'Internal server error',\r\n extensions: {\r\n code: 'INTERNAL_SERVER_ERROR',\r\n ...(process.env.NODE_ENV === 'development' && { stack: error.stack })\r\n }\r\n }]\r\n }, 500);\r\n }\r\n }\r\n\r\n /**\r\n * Execute a GraphQL operation (simplified implementation)\r\n * In production, this should use graphql-js or similar library\r\n */\r\n private async executeOperation(\r\n query: string,\r\n variables: any,\r\n context: GraphQLContext,\r\n operationName?: string\r\n ): Promise<GraphQLResponse> {\r\n // This is a simplified implementation\r\n // In a real implementation, you would use graphql-js to parse and execute\r\n \r\n // For now, return a placeholder response\r\n // The actual execution would happen through the resolvers we built\r\n return {\r\n data: null,\r\n errors: [{\r\n message: 'GraphQL execution not fully implemented. Use a GraphQL library like graphql-js for full support.',\r\n extensions: { code: 'NOT_IMPLEMENTED' }\r\n }]\r\n };\r\n }\r\n\r\n /**\r\n * Render GraphQL Playground HTML\r\n */\r\n private renderPlayground(): string {\r\n return `\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n <meta charset=\"UTF-8\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <title>GraphQL Playground</title>\r\n <link rel=\"stylesheet\" href=\"https://unpkg.com/graphql-playground-react/build/static/css/index.css\" />\r\n <link rel=\"shortcut icon\" href=\"https://unpkg.com/graphql-playground-react/build/favicon.png\" />\r\n <script src=\"https://unpkg.com/graphql-playground-react/build/static/js/middleware.js\"></script>\r\n <style>\r\n body {\r\n margin: 0;\r\n padding: 0;\r\n font-family: 'Open Sans', sans-serif;\r\n overflow: hidden;\r\n }\r\n #root {\r\n height: 100vh;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n <div id=\"root\"></div>\r\n <script>\r\n window.addEventListener('load', function (event) {\r\n GraphQLPlayground.init(document.getElementById('root'), {\r\n endpoint: '${this.options.path}',\r\n settings: {\r\n 'editor.theme': 'light',\r\n 'editor.cursorShape': 'line',\r\n 'editor.reuseHeaders': true,\r\n 'tracing.hideTracingResponse': true,\r\n 'queryPlan.hideQueryPlanResponse': true,\r\n 'editor.fontSize': 14,\r\n 'editor.fontFamily': \"'Source Code Pro', 'Consolas', 'Inconsolata', 'Droid Sans Mono', 'Monaco', monospace\",\r\n 'request.credentials': 'include'\r\n }\r\n })\r\n })\r\n </script>\r\n</body>\r\n</html>\r\n `.trim();\r\n }\r\n\r\n /**\r\n * Get the generated schema (useful for testing)\r\n */\r\n getSchema() {\r\n return this.schema;\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\ninterface GraphQLRequest {\r\n query: string;\r\n variables?: Record<string, any>;\r\n operationName?: string;\r\n}\r\n\r\ninterface GraphQLResponse {\r\n data?: any;\r\n errors?: Array<{\r\n message: string;\r\n locations?: Array<{ line: number; column: number }>;\r\n path?: Array<string | number>;\r\n extensions?: Record<string, any>;\r\n }>;\r\n}\r\n",
|
|
130
|
+
"/**\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",
|
|
131
|
+
"/**\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",
|
|
132
|
+
"/**\r\n * Health Check Plugin for Veloce-TS\r\n * \r\n * Adds health check endpoints for monitoring and orchestration\r\n */\r\n\r\nimport type { Plugin } from '../core/plugin';\r\nimport type { VeloceTS } from '../core/application';\r\nimport type { Context } from '../types';\r\nimport { getLogger } from '../logging';\r\n\r\nexport interface HealthCheckOptions {\r\n path?: string;\r\n readyPath?: string;\r\n livePath?: string;\r\n checks?: HealthChecker[];\r\n}\r\n\r\nexport interface HealthCheckResult {\r\n status: 'healthy' | 'unhealthy';\r\n timestamp: string;\r\n uptime: number;\r\n checks?: Record<string, CheckResult>;\r\n}\r\n\r\nexport interface CheckResult {\r\n status: 'healthy' | 'unhealthy' | 'degraded';\r\n message?: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport type HealthChecker = {\r\n (): Promise<CheckResult> | CheckResult;\r\n name?: string;\r\n};\r\n\r\n/**\r\n * Health Check Plugin\r\n * Adds /health, /ready, and /live endpoints\r\n */\r\nexport class HealthCheckPlugin implements Plugin {\r\n name = 'health';\r\n version = '1.0.0';\r\n\r\n private options: Required<Omit<HealthCheckOptions, 'checks'>> & { checks: HealthChecker[] };\r\n private startTime: number;\r\n private logger = getLogger().child({ plugin: 'health' });\r\n\r\n constructor(options?: HealthCheckOptions) {\r\n this.options = {\r\n path: options?.path || '/health',\r\n readyPath: options?.readyPath || '/ready',\r\n livePath: options?.livePath || '/live',\r\n checks: options?.checks || []\r\n };\r\n this.startTime = Date.now();\r\n }\r\n\r\n async install(app: VeloceTS): Promise<void> {\r\n // Health endpoint - comprehensive health check\r\n app.get(this.options.path, {\r\n handler: async (c: Context) => {\r\n return this.handleHealth(c);\r\n },\r\n docs: {\r\n summary: 'Health Check',\r\n description: 'Comprehensive health check endpoint',\r\n tags: ['Health']\r\n }\r\n });\r\n\r\n // Readiness endpoint - checks if app is ready to serve traffic\r\n app.get(this.options.readyPath, {\r\n handler: async (c: Context) => {\r\n return this.handleReady(c);\r\n },\r\n docs: {\r\n summary: 'Readiness Check',\r\n description: 'Check if the application is ready to serve traffic',\r\n tags: ['Health']\r\n }\r\n });\r\n\r\n // Liveness endpoint - checks if app is alive\r\n app.get(this.options.livePath, {\r\n handler: async (c: Context) => {\r\n return this.handleLive(c);\r\n },\r\n docs: {\r\n summary: 'Liveness Check',\r\n description: 'Check if the application is alive',\r\n tags: ['Health']\r\n }\r\n });\r\n\r\n this.logger.info('Health check endpoints registered', {\r\n health: this.options.path,\r\n ready: this.options.readyPath,\r\n live: this.options.livePath\r\n });\r\n }\r\n\r\n /**\r\n * Handle comprehensive health check\r\n */\r\n private async handleHealth(c: Context): Promise<any> {\r\n const uptime = Date.now() - this.startTime;\r\n const checks: Record<string, CheckResult> = {};\r\n \r\n let allHealthy = true;\r\n\r\n // Run all custom checks\r\n for (const check of this.options.checks) {\r\n try {\r\n const result = await Promise.resolve(check());\r\n checks[check.name || 'unknown'] = result;\r\n \r\n if (result.status === 'unhealthy') {\r\n allHealthy = false;\r\n }\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\r\n checks[check.name || 'unknown'] = {\r\n status: 'unhealthy',\r\n message: errorMessage\r\n };\r\n allHealthy = false;\r\n }\r\n }\r\n\r\n const result: HealthCheckResult = {\r\n status: allHealthy ? 'healthy' : 'unhealthy',\r\n timestamp: new Date().toISOString(),\r\n uptime,\r\n checks: Object.keys(checks).length > 0 ? checks : undefined\r\n };\r\n\r\n return c.json(result, allHealthy ? 200 : 503);\r\n }\r\n\r\n /**\r\n * Handle readiness check\r\n */\r\n private async handleReady(c: Context): Promise<any> {\r\n const uptime = Date.now() - this.startTime;\r\n \r\n // Run readiness checks (only critical checks)\r\n const criticalChecks = this.options.checks.filter(check => \r\n check.name?.includes('database') || \r\n check.name?.includes('cache') ||\r\n check.name?.includes('ready')\r\n );\r\n\r\n let isReady = true;\r\n const checks: Record<string, CheckResult> = {};\r\n\r\n for (const check of criticalChecks) {\r\n try {\r\n const result = await Promise.resolve(check());\r\n checks[check.name || 'unknown'] = result;\r\n \r\n if (result.status === 'unhealthy') {\r\n isReady = false;\r\n }\r\n } catch (error) {\r\n isReady = false;\r\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\r\n checks[check.name || 'unknown'] = {\r\n status: 'unhealthy',\r\n message: errorMessage\r\n };\r\n }\r\n }\r\n\r\n const result = {\r\n status: isReady ? 'ready' : 'not_ready',\r\n timestamp: new Date().toISOString(),\r\n uptime,\r\n checks: Object.keys(checks).length > 0 ? checks : undefined\r\n };\r\n\r\n return c.json(result, isReady ? 200 : 503);\r\n }\r\n\r\n /**\r\n * Handle liveness check (simple ping)\r\n */\r\n private handleLive(c: Context): any {\r\n const uptime = Date.now() - this.startTime;\r\n \r\n return c.json({\r\n status: 'alive',\r\n timestamp: new Date().toISOString(),\r\n uptime\r\n }, 200);\r\n }\r\n}\r\n\r\n/**\r\n * Create common health checkers\r\n */\r\nexport const HealthCheckers = {\r\n /**\r\n * Always healthy checker (for testing)\r\n */\r\n alwaysHealthy(): CheckResult {\r\n return { status: 'healthy', message: 'OK' };\r\n },\r\n\r\n /**\r\n * Database connectivity checker\r\n */\r\n database(pingFn: () => Promise<boolean> | boolean): HealthChecker {\r\n const checker: HealthChecker = async () => {\r\n try {\r\n const isHealthy = await Promise.resolve(pingFn());\r\n return {\r\n status: isHealthy ? 'healthy' : 'unhealthy',\r\n message: isHealthy ? 'Database connection OK' : 'Database connection failed'\r\n };\r\n } catch (error) {\r\n return {\r\n status: 'unhealthy',\r\n message: error instanceof Error ? error.message : 'Database check failed'\r\n };\r\n }\r\n };\r\n checker.name = 'database';\r\n return checker;\r\n },\r\n\r\n /**\r\n * Memory usage checker\r\n */\r\n memory(maxUsageMB: number = 512): HealthChecker {\r\n const checker: HealthChecker = () => {\r\n if (typeof process === 'undefined' || !process.memoryUsage) {\r\n return { status: 'healthy', message: 'Memory check not available' };\r\n }\r\n\r\n const usage = process.memoryUsage();\r\n const heapUsedMB = usage.heapUsed / 1024 / 1024;\r\n const isHealthy = heapUsedMB < maxUsageMB;\r\n\r\n return {\r\n status: isHealthy ? 'healthy' : 'unhealthy',\r\n message: `Heap usage: ${heapUsedMB.toFixed(2)}MB / ${maxUsageMB}MB`,\r\n heapUsedMB: heapUsedMB.toFixed(2),\r\n maxUsageMB\r\n };\r\n };\r\n checker.name = 'memory';\r\n return checker;\r\n },\r\n\r\n /**\r\n * Disk space checker\r\n */\r\n disk(maxUsagePercent: number = 90): HealthChecker {\r\n const checker: HealthChecker = () => {\r\n // This would require additional dependencies\r\n return {\r\n status: 'healthy',\r\n message: 'Disk check not implemented (requires additional dependencies)'\r\n };\r\n };\r\n checker.name = 'disk';\r\n return checker;\r\n }\r\n};\r\n\r\n"
|
|
6
133
|
],
|
|
7
|
-
"mappings": ";qVAUO,HAAM,DAAgC,DAC3C,GAAO,QACP,MAAU,MAEF,MAER,WAAW,CAAC,EAA0B,CACpC,KAAK,QAAU,CACb,MAAO,GAAS,OAAS,gBACzB,QAAS,GAAS,SAAW,QAC7B,YAAa,GAAS,aAAe,2BACrC,KAAM,GAAS,MAAQ,gBACvB,SAAU,GAAS,UAAY,QAC/B,KAAM,GAAS,OAAS,EAC1B,OAGI,QAAO,CAAC,EAA8B,CAE1C,IAAM,EAAY,EAAI,UAAU,EAChC,GAAI,EAAU,MAAO,KAAK,QAAQ,MAAQ,EAAU,MACpD,GAAI,EAAU,QAAS,KAAK,QAAQ,QAAU,EAAU,QACxD,GAAI,EAAU,YAAa,KAAK,QAAQ,YAAc,EAAU,YAGhE,EAAI,IAAI,KAAK,QAAQ,KAAM,CACzB,QAAS,SAAY,CAEnB,OADa,KAAK,aAAa,CAAG,GAGpC,KAAM,CACJ,QAAS,4BACT,YAAa,qDACb,KAAM,CAAC,eAAe,CACxB,CACF,CAAC,EAUK,YAAY,CAAC,EAAe,CAClC,IAAM,EAAW,EAAI,YAAY,EAEjC,OADkB,IAAI,EAAiB,EAAU,KAAK,OAAO,EAC5C,SAAS,EAMpB,eAAe,EAAW,CAChC,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,WAKA,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAgBR,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAiB7B",
|
|
8
|
-
"debugId": "
|
|
134
|
+
"mappings": "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",
|
|
135
|
+
"debugId": "1D02473AB192AEC264756E2164756E21",
|
|
9
136
|
"names": []
|
|
10
137
|
}
|