@decohere/scribe-pino 0.0.1-dev.9 → 0.0.1-dev.90
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/commonjs/src/index.js +2 -1
- package/commonjs/src/pino.adapater.js +123 -1
- package/commonjs/src/pino.recipe.js +108 -0
- package/commonjs/src/pino.transport-guard.js +70 -0
- package/commonjs/src/scribe-pino.js +131 -28
- package/es6/src/index.js +2 -1
- package/es6/src/pino.adapater.js +124 -2
- package/es6/src/pino.recipe.js +98 -0
- package/es6/src/pino.transport-guard.js +63 -0
- package/es6/src/scribe-pino.js +113 -25
- package/package.json +16 -4
- package/types/src/index.d.ts +1 -0
- package/types/src/pino.adapater.d.ts +8 -0
- package/types/src/pino.recipe.d.ts +45 -0
- package/types/src/pino.transport-guard.d.ts +10 -0
- package/types/src/scribe-pino.d.ts +55 -7
package/es6/src/scribe-pino.js
CHANGED
|
@@ -10,30 +10,39 @@ function _ts_metadata(k, v) {
|
|
|
10
10
|
import { extension } from "@decohere/nexus/extensibility";
|
|
11
11
|
import { DefaultEnvironment } from "@decohere/nexus/system";
|
|
12
12
|
import { LoggingConfigurationError, scribe } from "@decohere/scribe";
|
|
13
|
+
import pino from "pino";
|
|
13
14
|
import { PinoAdapter } from "./pino.adapater.js";
|
|
15
|
+
import { pinoRecipe } from "./pino.recipe.js";
|
|
16
|
+
import { guardTransport } from "./pino.transport-guard.js";
|
|
17
|
+
export { guardTransport } from "./pino.transport-guard.js";
|
|
14
18
|
export class PinoExtensions {
|
|
15
19
|
static withPino(factory, config, logLevel) {
|
|
16
|
-
return configureScribe(factory, {
|
|
20
|
+
return configureScribe(factory, logLevel != null ? {
|
|
17
21
|
logLevel
|
|
18
|
-
}, config);
|
|
22
|
+
} : undefined, config);
|
|
19
23
|
}
|
|
20
|
-
static withPinoPretty(factory,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
static withPinoPretty(factory, logLevelOrOptions) {
|
|
25
|
+
const pretty = parsePrettyArg(logLevelOrOptions);
|
|
26
|
+
return attachRecipe(factory, {
|
|
27
|
+
pretty,
|
|
28
|
+
logLevel: pretty.logLevel
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
static withPinoRoll(factory, options) {
|
|
32
|
+
return attachRecipe(factory, {
|
|
33
|
+
roll: options,
|
|
34
|
+
logLevel: options.logLevel
|
|
35
|
+
});
|
|
29
36
|
}
|
|
30
37
|
static withPinoCustom(factory, options) {
|
|
31
|
-
const { scribe, transports } = options;
|
|
38
|
+
const { scribe, transports } = options ?? {};
|
|
32
39
|
return configureScribe(factory, scribe, transports);
|
|
33
40
|
}
|
|
34
41
|
}
|
|
35
42
|
_ts_decorate([
|
|
36
|
-
extension(scribe
|
|
43
|
+
extension(scribe, {
|
|
44
|
+
static: true
|
|
45
|
+
}),
|
|
37
46
|
_ts_metadata("design:type", Function),
|
|
38
47
|
_ts_metadata("design:paramtypes", [
|
|
39
48
|
typeof scribe === "undefined" ? Object : scribe,
|
|
@@ -43,7 +52,9 @@ _ts_decorate([
|
|
|
43
52
|
_ts_metadata("design:returntype", void 0)
|
|
44
53
|
], PinoExtensions, "withPino", null);
|
|
45
54
|
_ts_decorate([
|
|
46
|
-
extension(scribe
|
|
55
|
+
extension(scribe, {
|
|
56
|
+
static: true
|
|
57
|
+
}),
|
|
47
58
|
_ts_metadata("design:type", Function),
|
|
48
59
|
_ts_metadata("design:paramtypes", [
|
|
49
60
|
typeof scribe === "undefined" ? Object : scribe,
|
|
@@ -52,7 +63,20 @@ _ts_decorate([
|
|
|
52
63
|
_ts_metadata("design:returntype", void 0)
|
|
53
64
|
], PinoExtensions, "withPinoPretty", null);
|
|
54
65
|
_ts_decorate([
|
|
55
|
-
extension(scribe
|
|
66
|
+
extension(scribe, {
|
|
67
|
+
static: true
|
|
68
|
+
}),
|
|
69
|
+
_ts_metadata("design:type", Function),
|
|
70
|
+
_ts_metadata("design:paramtypes", [
|
|
71
|
+
typeof scribe === "undefined" ? Object : scribe,
|
|
72
|
+
typeof PinoRollRecipeOptions === "undefined" ? Object : PinoRollRecipeOptions
|
|
73
|
+
]),
|
|
74
|
+
_ts_metadata("design:returntype", void 0)
|
|
75
|
+
], PinoExtensions, "withPinoRoll", null);
|
|
76
|
+
_ts_decorate([
|
|
77
|
+
extension(scribe, {
|
|
78
|
+
static: true
|
|
79
|
+
}),
|
|
56
80
|
_ts_metadata("design:type", Function),
|
|
57
81
|
_ts_metadata("design:paramtypes", [
|
|
58
82
|
typeof scribe === "undefined" ? Object : scribe,
|
|
@@ -60,23 +84,87 @@ _ts_decorate([
|
|
|
60
84
|
]),
|
|
61
85
|
_ts_metadata("design:returntype", void 0)
|
|
62
86
|
], PinoExtensions, "withPinoCustom", null);
|
|
87
|
+
function parsePrettyArg(logLevelOrOptions) {
|
|
88
|
+
if (logLevelOrOptions == null) {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
if (typeof logLevelOrOptions === "string") {
|
|
92
|
+
return {
|
|
93
|
+
logLevel: logLevelOrOptions
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return logLevelOrOptions;
|
|
97
|
+
}
|
|
98
|
+
function attachRecipe(factory, plan) {
|
|
99
|
+
const loggerFactory = applyRecipe(factory, plan);
|
|
100
|
+
const chain = {
|
|
101
|
+
withPinoPretty (logLevelOrOptions) {
|
|
102
|
+
const pretty = parsePrettyArg(logLevelOrOptions);
|
|
103
|
+
return attachRecipe(factory, {
|
|
104
|
+
...plan,
|
|
105
|
+
pretty: {
|
|
106
|
+
...plan.pretty,
|
|
107
|
+
...pretty
|
|
108
|
+
},
|
|
109
|
+
logLevel: pretty.logLevel ?? plan.logLevel
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
withPinoRoll (options) {
|
|
113
|
+
return attachRecipe(factory, {
|
|
114
|
+
...plan,
|
|
115
|
+
roll: options,
|
|
116
|
+
logLevel: options.logLevel ?? plan.logLevel
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
return Object.assign(loggerFactory, chain, {
|
|
121
|
+
and: chain
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Guard a worker transport so failures (roll EEXIST, worker exit) neither
|
|
126
|
+
* crash the process nor spam stderr on every subsequent log write.
|
|
127
|
+
*/ function createSafeTransport(options) {
|
|
128
|
+
return guardTransport(pino.transport(options));
|
|
129
|
+
}
|
|
130
|
+
function adapterForTransport(transport) {
|
|
131
|
+
if (transport == null) {
|
|
132
|
+
return new PinoAdapter({});
|
|
133
|
+
}
|
|
134
|
+
return new PinoAdapter({}, createSafeTransport(transport));
|
|
135
|
+
}
|
|
136
|
+
function applyRecipe(factory, plan) {
|
|
137
|
+
const adapter = adapterForTransport(pinoRecipe.transport(plan));
|
|
138
|
+
// Omit logLevel when unset so mergeDefaults can read LOG_LEVEL / SCRIBE_LOG_LEVEL.
|
|
139
|
+
return factory.configure({
|
|
140
|
+
options: plan.logLevel != null ? {
|
|
141
|
+
logLevel: plan.logLevel
|
|
142
|
+
} : {},
|
|
143
|
+
adapter
|
|
144
|
+
});
|
|
145
|
+
}
|
|
63
146
|
function configureScribe(factory, options, config) {
|
|
64
147
|
const environment = process.env.NODE_ENV ?? DefaultEnvironment;
|
|
65
|
-
const configs = Array.isArray(config) ? config : [
|
|
148
|
+
const configs = (Array.isArray(config) ? config : config != null ? [
|
|
66
149
|
config
|
|
67
|
-
];
|
|
68
|
-
|
|
69
|
-
if (transports.length > 1) {
|
|
150
|
+
] : []).filter((item)=>item.environment == null || item.environment === environment);
|
|
151
|
+
if (configs.length > 1) {
|
|
70
152
|
throw new LoggingConfigurationError(`There should only be one configuration per environment for logging`);
|
|
71
153
|
}
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
transport
|
|
75
|
-
});
|
|
154
|
+
const adapter = adapterForTransport(configs.at(0)?.transports);
|
|
155
|
+
// Do not force DefaultLogLevel — that would shadow env resolution in mergeDefaults.
|
|
76
156
|
return factory.configure({
|
|
77
|
-
options,
|
|
157
|
+
options: options ?? {},
|
|
78
158
|
adapter
|
|
79
159
|
});
|
|
80
160
|
}
|
|
161
|
+
/** @deprecated Use {@link guardTransport} — kept for callers/tests from the silence-only era. */ function silenceErrors(transport) {
|
|
162
|
+
return guardTransport(transport);
|
|
163
|
+
}
|
|
164
|
+
export const pinoTransport = {
|
|
165
|
+
createSafeTransport,
|
|
166
|
+
guardTransport,
|
|
167
|
+
silenceErrors
|
|
168
|
+
};
|
|
81
169
|
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHR0eXBlIExvZ2dlcixcblx0TG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxuXHRzY3JpYmUsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFRyYW5zcG9ydE11bHRpT3B0aW9ucyxcblx0VHJhbnNwb3J0UGlwZWxpbmVPcHRpb25zLFxuXHRUcmFuc3BvcnRTaW5nbGVPcHRpb25zLFxufSBmcm9tIFwicGlub1wiO1xuXG5pbXBvcnQgeyBQaW5vQWRhcHRlciB9IGZyb20gXCIuL3Bpbm8uYWRhcGF0ZXIuanNcIjtcblxudHlwZSBUcmFuc3BvcnRDb25maWcgPSB7XG5cdGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG5cdHRyYW5zcG9ydHM6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMgfCBUcmFuc3BvcnRNdWx0aU9wdGlvbnMgfCBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbUxldmVsT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPiA9IHtcblx0c2NyaWJlPzogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pjtcblx0dHJhbnNwb3J0cz86IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdO1xufTtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjb2hlcmUvc2NyaWJlXCIge1xuXHRpbnRlcmZhY2Ugc2NyaWJlIHtcblx0XHR3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IChuYW1lPzogc3RyaW5nKSA9PiBMb2dnZXI7XG5cdFx0d2l0aFBpbm9QcmV0dHkobG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nKTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjtcblx0XHR3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgUGlub0V4dGVuc2lvbnMge1xuXHRAZXh0ZW5zaW9uKHNjcmliZSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlubyhcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0Y29uZmlnOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcsXG5cdCkge1xuXHRcdHJldHVybiBjb25maWd1cmVTY3JpYmUoZmFjdG9yeSwgeyBsb2dMZXZlbCB9LCBjb25maWcpO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUpXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9QcmV0dHkoZmFjdG9yeTogc2NyaWJlLCBsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gUGlub0V4dGVuc2lvbnMud2l0aFBpbm8oXG5cdFx0XHRmYWN0b3J5LFxuXHRcdFx0eyB0cmFuc3BvcnRzOiB7IHRhcmdldDogXCJwaW5vLXByZXR0eVwiLCBvcHRpb25zOiB7IGNvbG9yaXplOiB0cnVlIH0gfSB9LFxuXHRcdFx0bG9nTGV2ZWwsXG5cdFx0KTtcblx0fVxuXG5cdEBleHRlbnNpb24oc2NyaWJlKVxuXHRwdWJsaWMgc3RhdGljIHdpdGhQaW5vQ3VzdG9tPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgPSB1bmRlZmluZWQ+KFxuXHRcdGZhY3Rvcnk6IHNjcmliZSxcblx0XHRvcHRpb25zPzogQ3VzdG9tTGV2ZWxPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHQpIHtcblx0XHRjb25zdCB7IHNjcmliZSwgdHJhbnNwb3J0cyB9ID0gb3B0aW9ucztcblx0XHRyZXR1cm4gY29uZmlndXJlU2NyaWJlKGZhY3RvcnksIHNjcmliZSwgdHJhbnNwb3J0cyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29uZmlndXJlU2NyaWJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0ZmFjdG9yeTogc2NyaWJlLFxuXHRvcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRjb25maWc6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuKSB7XG5cdGNvbnN0IGVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gRGVmYXVsdEVudmlyb25tZW50O1xuXHRjb25zdCBjb25maWdzID0gQXJyYXkuaXNBcnJheShjb25maWcpID8gY29uZmlnIDogW2NvbmZpZ107XG5cdGNvbnN0IHRyYW5zcG9ydHMgPSBjb25maWdzLmZpbHRlcihcblx0XHQoY29uZmlnKSA9PiAoY29uZmlnLmVudmlyb25tZW50ICYmIGNvbmZpZy5lbnZpcm9ubWVudCA9PT0gZW52aXJvbm1lbnQpIHx8IHRydWUsXG5cdCk7XG5cblx0aWYgKHRyYW5zcG9ydHMubGVuZ3RoID4gMSkge1xuXHRcdHRocm93IG5ldyBMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yKFxuXHRcdFx0YFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb25maWd1cmF0aW9uIHBlciBlbnZpcm9ubWVudCBmb3IgbG9nZ2luZ2AsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuYXQoMCk/LnRyYW5zcG9ydHM7XG5cdGNvbnN0IGFkYXB0ZXIgPSBuZXcgUGlub0FkYXB0ZXIoeyB0cmFuc3BvcnQgfSk7XG5cdHJldHVybiBmYWN0b3J5LmNvbmZpZ3VyZSh7XG5cdFx0b3B0aW9ucyxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cbiJdLCJuYW1lcyI6WyJleHRlbnNpb24iLCJEZWZhdWx0RW52aXJvbm1lbnQiLCJMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yIiwic2NyaWJlIiwiUGlub0FkYXB0ZXIiLCJQaW5vRXh0ZW5zaW9ucyIsIndpdGhQaW5vIiwiZmFjdG9yeSIsImNvbmZpZyIsImxvZ0xldmVsIiwiY29uZmlndXJlU2NyaWJlIiwid2l0aFBpbm9QcmV0dHkiLCJ0cmFuc3BvcnRzIiwidGFyZ2V0Iiwib3B0aW9ucyIsImNvbG9yaXplIiwid2l0aFBpbm9DdXN0b20iLCJlbnZpcm9ubWVudCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJsZW5ndGgiLCJ0cmFuc3BvcnQiLCJhdCIsImFkYXB0ZXIiLCJjb25maWd1cmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLFNBQVNBLFNBQVMsUUFBUSxnQ0FBZ0M7QUFDMUQsU0FBU0Msa0JBQWtCLFFBQTBCLHlCQUF5QjtBQUM5RSxTQUdDQyx5QkFBeUIsRUFFekJDLE1BQU0sUUFDQSxtQkFBbUI7QUFPMUIsU0FBU0MsV0FBVyxRQUFRLHFCQUFxQjtBQXlCakQsT0FBTyxNQUFNQztJQUNaLE9BQ2NDLFNBQ2JDLE9BQWUsRUFDZkMsTUFBMkMsRUFDM0NDLFFBQWlDLEVBQ2hDO1FBQ0QsT0FBT0MsZ0JBQWdCSCxTQUFTO1lBQUVFO1FBQVMsR0FBR0Q7SUFDL0M7SUFFQSxPQUNjRyxlQUFlSixPQUFlLEVBQUVFLFFBQWlDLEVBQUU7UUFDaEYsT0FBT0osZUFBZUMsUUFBUSxDQUM3QkMsU0FDQTtZQUFFSyxZQUFZO2dCQUFFQyxRQUFRO2dCQUFlQyxTQUFTO29CQUFFQyxVQUFVO2dCQUFLO1lBQUU7UUFBRSxHQUNyRU47SUFFRjtJQUVBLE9BQ2NPLGVBQ2JULE9BQWUsRUFDZk8sT0FBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVYLE1BQU0sRUFBRVMsVUFBVSxFQUFFLEdBQUdFO1FBQy9CLE9BQU9KLGdCQUFnQkgsU0FBU0osUUFBUVM7SUFDekM7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTRixnQkFDUkgsT0FBZSxFQUNmTyxPQUFxQyxFQUNyQ04sTUFBMkM7SUFFM0MsTUFBTVMsY0FBY0MsUUFBUUMsR0FBRyxDQUFDQyxRQUFRLElBQUluQjtJQUM1QyxNQUFNb0IsVUFBVUMsTUFBTUMsT0FBTyxDQUFDZixVQUFVQSxTQUFTO1FBQUNBO0tBQU87SUFDekQsTUFBTUksYUFBYVMsUUFBUUcsTUFBTSxDQUNoQyxDQUFDaEIsU0FBVyxBQUFDQSxPQUFPUyxXQUFXLElBQUlULE9BQU9TLFdBQVcsS0FBS0EsZUFBZ0I7SUFHM0UsSUFBSUwsV0FBV2EsTUFBTSxHQUFHLEdBQUc7UUFDMUIsTUFBTSxJQUFJdkIsMEJBQ1QsQ0FBQyxrRUFBa0UsQ0FBQztJQUV0RTtJQUVBLE1BQU13QixZQUFZZCxXQUFXZSxFQUFFLENBQUMsSUFBSWY7SUFDcEMsTUFBTWdCLFVBQVUsSUFBSXhCLFlBQVk7UUFBRXNCO0lBQVU7SUFDNUMsT0FBT25CLFFBQVFzQixTQUFTLENBQUM7UUFDeEJmO1FBQ0FjO0lBQ0Q7QUFDRCJ9
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHR0eXBlIExvZ2dlcixcblx0TG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxuXHRzY3JpYmUsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgcGlubywge1xuXHR0eXBlIERlc3RpbmF0aW9uU3RyZWFtLFxuXHR0eXBlIFRyYW5zcG9ydE11bHRpT3B0aW9ucyxcblx0dHlwZSBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnMsXG5cdHR5cGUgVHJhbnNwb3J0U2luZ2xlT3B0aW9ucyxcbn0gZnJvbSBcInBpbm9cIjtcblxuaW1wb3J0IHsgUGlub0FkYXB0ZXIgfSBmcm9tIFwiLi9waW5vLmFkYXBhdGVyLmpzXCI7XG5pbXBvcnQge1xuXHR0eXBlIFBpbm9QcmV0dHlSZWNpcGVPcHRpb25zLFxuXHR0eXBlIFBpbm9SZWNpcGVQbGFuLFxuXHR0eXBlIFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyxcblx0cGlub1JlY2lwZSxcbn0gZnJvbSBcIi4vcGluby5yZWNpcGUuanNcIjtcbmltcG9ydCB7IHR5cGUgR3VhcmRlZFRyYW5zcG9ydCwgZ3VhcmRUcmFuc3BvcnQgfSBmcm9tIFwiLi9waW5vLnRyYW5zcG9ydC1ndWFyZC5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IEd1YXJkZWRUcmFuc3BvcnQgfSBmcm9tIFwiLi9waW5vLnRyYW5zcG9ydC1ndWFyZC5qc1wiO1xuZXhwb3J0IHsgZ3VhcmRUcmFuc3BvcnQgfSBmcm9tIFwiLi9waW5vLnRyYW5zcG9ydC1ndWFyZC5qc1wiO1xuXG50eXBlIFRyYW5zcG9ydE9wdGlvbnMgPVxuXHR8IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnNcblx0fCBUcmFuc3BvcnRNdWx0aU9wdGlvbnNcblx0fCBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnM7XG5cbnR5cGUgVHJhbnNwb3J0Q29uZmlnID0ge1xuXHRlbnZpcm9ubWVudD86IEVudmlyb25tZW50O1xuXHR0cmFuc3BvcnRzOiBUcmFuc3BvcnRPcHRpb25zO1xufTtcblxudHlwZSBDdXN0b21MZXZlbE9wdGlvbnM8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSA9IHVuZGVmaW5lZD4gPSB7XG5cdHNjcmliZT86IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT47XG5cdHRyYW5zcG9ydHM/OiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFBpbm9Mb2dnZXJGYWN0b3J5ID0gKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjtcblxuZXhwb3J0IHR5cGUgUGlub1JlY2lwZUNoYWluID0ge1xuXHR3aXRoUGlub1ByZXR0eShcblx0XHRsb2dMZXZlbE9yT3B0aW9ucz86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcgfCBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyxcblx0KTogUGlub1JlY2lwZTtcblx0d2l0aFBpbm9Sb2xsKG9wdGlvbnM6IFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyk6IFBpbm9SZWNpcGU7XG59O1xuXG5leHBvcnQgdHlwZSBQaW5vUmVjaXBlID0gUGlub0xvZ2dlckZhY3RvcnkgJlxuXHRQaW5vUmVjaXBlQ2hhaW4gJiB7XG5cdFx0cmVhZG9ubHkgYW5kOiBQaW5vUmVjaXBlQ2hhaW47XG5cdH07XG5cbmRlY2xhcmUgbW9kdWxlIFwiQGRlY29oZXJlL3NjcmliZVwiIHtcblx0aW50ZXJmYWNlIHNjcmliZSB7XG5cdFx0d2l0aFBpbm8oXG5cdFx0XHR0cmFuc3BvcnRzOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRcdGxvZ2xldmVsPzogRGVmYXVsdExldmVscyB8IHN0cmluZyxcblx0XHQpOiBQaW5vTG9nZ2VyRmFjdG9yeTtcblx0XHQvKipcblx0XHQgKiBDb2xvcml6ZWQgcHJldHR5IHRyYW5zcG9ydC4gRGV2ZWxvcG1lbnQgb25seSB1bmxlc3MgYHsgd2hlbjogXCJhbHdheXNcIiB9YC5cblx0XHQgKiBDaGFpbiB3aXRoIGAuYW5kLndpdGhQaW5vUm9sbCh7IGZpbGUgfSlgLiBQcm9kdWN0aW9uIHdyaXRlcyBKU09OIHRvIHN0ZG91dFxuXHRcdCAqIHNvIGxvZyBzaGlwcGluZyBzdGF5cyBvdXRzaWRlIHRoZSBwcm9jZXNzLlxuXHRcdCAqL1xuXHRcdHdpdGhQaW5vUHJldHR5KFxuXHRcdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdFx0KTogUGlub1JlY2lwZTtcblx0XHQvKipcblx0XHQgKiBSb2xsaW5nIGxvZyBmaWxlcy4gRGV2ZWxvcG1lbnQgb25seSB1bmxlc3MgYHsgd2hlbjogXCJhbHdheXNcIiB9YC5cblx0XHQgKiBEbyBub3QgZW5hYmxlIGluIHByb2R1Y3Rpb24g4oCUIHNoaXAgc3Rkb3V0IGZyb20gYSBzaWRlY2FyIG9yIHBsYXRmb3JtIGFnZW50LlxuXHRcdCAqIGBzeW1saW5rYCBkZWZhdWx0cyBvZmY7IGVuYWJsaW5nIGl0IGNhbiByYWNlIHVuZGVyIG11bHRpLXdvcmtlciAvIEhNUi5cblx0XHQgKiBPcHMgbWF5IG92ZXJyaWRlIHBhdGgvc2l6ZS9mcmVxdWVuY3kva2VlcCB2aWEgYFNDUklCRV9MT0dfRklMRWAsXG5cdFx0ICogYFNDUklCRV9MT0dfU0laRWAsIGBTQ1JJQkVfTE9HX0ZSRVFVRU5DWWAsIGFuZCBgU0NSSUJFX0xPR19LRUVQYFxuXHRcdCAqIChmaWxlIGVudiB3aW5zIG92ZXIgYG9wdGlvbnMuZmlsZWA7IG90aGVyIGV4cGxpY2l0IG9wdGlvbnMgYmVhdCBlbnYpLlxuXHRcdCAqL1xuXHRcdHdpdGhQaW5vUm9sbChvcHRpb25zOiBQaW5vUm9sbFJlY2lwZU9wdGlvbnMpOiBQaW5vUmVjaXBlO1xuXHRcdHdpdGhQaW5vQ3VzdG9tPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgPSB1bmRlZmluZWQ+KFxuXHRcdFx0b3B0aW9ucz86IEN1c3RvbUxldmVsT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0XHQpOiBQaW5vTG9nZ2VyRmFjdG9yeTtcblx0fVxuXHRuYW1lc3BhY2Ugc2NyaWJlIHtcblx0XHRmdW5jdGlvbiB3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IFBpbm9Mb2dnZXJGYWN0b3J5O1xuXHRcdGZ1bmN0aW9uIHdpdGhQaW5vUHJldHR5KFxuXHRcdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdFx0KTogUGlub1JlY2lwZTtcblx0XHRmdW5jdGlvbiB3aXRoUGlub1JvbGwob3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKTogUGlub1JlY2lwZTtcblx0XHRmdW5jdGlvbiB3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogUGlub0xvZ2dlckZhY3Rvcnk7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpbm9FeHRlbnNpb25zIHtcblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm8oXG5cdFx0ZmFjdG9yeTogc2NyaWJlLFxuXHRcdGNvbmZpZzogVHJhbnNwb3J0Q29uZmlnIHwgVHJhbnNwb3J0Q29uZmlnW10sXG5cdFx0bG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHQpIHtcblx0XHRyZXR1cm4gY29uZmlndXJlU2NyaWJlKGZhY3RvcnksIGxvZ0xldmVsICE9IG51bGwgPyB7IGxvZ0xldmVsIH0gOiB1bmRlZmluZWQsIGNvbmZpZyk7XG5cdH1cblxuXHRAZXh0ZW5zaW9uKHNjcmliZSwgeyBzdGF0aWM6IHRydWUgfSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlub1ByZXR0eShcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdCkge1xuXHRcdGNvbnN0IHByZXR0eSA9IHBhcnNlUHJldHR5QXJnKGxvZ0xldmVsT3JPcHRpb25zKTtcblx0XHRyZXR1cm4gYXR0YWNoUmVjaXBlKGZhY3RvcnksIHsgcHJldHR5LCBsb2dMZXZlbDogcHJldHR5LmxvZ0xldmVsIH0pO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9Sb2xsKGZhY3Rvcnk6IHNjcmliZSwgb3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKSB7XG5cdFx0cmV0dXJuIGF0dGFjaFJlY2lwZShmYWN0b3J5LCB7IHJvbGw6IG9wdGlvbnMsIGxvZ0xldmVsOiBvcHRpb25zLmxvZ0xldmVsIH0pO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9DdXN0b208VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSA9IHVuZGVmaW5lZD4oXG5cdFx0ZmFjdG9yeTogc2NyaWJlLFxuXHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdCkge1xuXHRcdGNvbnN0IHsgc2NyaWJlLCB0cmFuc3BvcnRzIH0gPSBvcHRpb25zID8/IHt9O1xuXHRcdHJldHVybiBjb25maWd1cmVTY3JpYmUoZmFjdG9yeSwgc2NyaWJlLCB0cmFuc3BvcnRzKTtcblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZVByZXR0eUFyZyhcblx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG4pOiBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyB7XG5cdGlmIChsb2dMZXZlbE9yT3B0aW9ucyA9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGlmICh0eXBlb2YgbG9nTGV2ZWxPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4geyBsb2dMZXZlbDogbG9nTGV2ZWxPck9wdGlvbnMgfTtcblx0fVxuXHRyZXR1cm4gbG9nTGV2ZWxPck9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFJlY2lwZShmYWN0b3J5OiBzY3JpYmUsIHBsYW46IFBpbm9SZWNpcGVQbGFuKTogUGlub1JlY2lwZSB7XG5cdGNvbnN0IGxvZ2dlckZhY3RvcnkgPSBhcHBseVJlY2lwZShmYWN0b3J5LCBwbGFuKTtcblx0Y29uc3QgY2hhaW46IFBpbm9SZWNpcGVDaGFpbiA9IHtcblx0XHR3aXRoUGlub1ByZXR0eShsb2dMZXZlbE9yT3B0aW9ucykge1xuXHRcdFx0Y29uc3QgcHJldHR5ID0gcGFyc2VQcmV0dHlBcmcobG9nTGV2ZWxPck9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuIGF0dGFjaFJlY2lwZShmYWN0b3J5LCB7XG5cdFx0XHRcdC4uLnBsYW4sXG5cdFx0XHRcdHByZXR0eTogeyAuLi5wbGFuLnByZXR0eSwgLi4ucHJldHR5IH0sXG5cdFx0XHRcdGxvZ0xldmVsOiBwcmV0dHkubG9nTGV2ZWwgPz8gcGxhbi5sb2dMZXZlbCxcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0d2l0aFBpbm9Sb2xsKG9wdGlvbnMpIHtcblx0XHRcdHJldHVybiBhdHRhY2hSZWNpcGUoZmFjdG9yeSwge1xuXHRcdFx0XHQuLi5wbGFuLFxuXHRcdFx0XHRyb2xsOiBvcHRpb25zLFxuXHRcdFx0XHRsb2dMZXZlbDogb3B0aW9ucy5sb2dMZXZlbCA/PyBwbGFuLmxvZ0xldmVsLFxuXHRcdFx0fSk7XG5cdFx0fSxcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obG9nZ2VyRmFjdG9yeSwgY2hhaW4sIHsgYW5kOiBjaGFpbiB9KTtcbn1cblxuLyoqXG4gKiBHdWFyZCBhIHdvcmtlciB0cmFuc3BvcnQgc28gZmFpbHVyZXMgKHJvbGwgRUVYSVNULCB3b3JrZXIgZXhpdCkgbmVpdGhlclxuICogY3Jhc2ggdGhlIHByb2Nlc3Mgbm9yIHNwYW0gc3RkZXJyIG9uIGV2ZXJ5IHN1YnNlcXVlbnQgbG9nIHdyaXRlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTYWZlVHJhbnNwb3J0KG9wdGlvbnM6IFRyYW5zcG9ydE9wdGlvbnMpOiBEZXN0aW5hdGlvblN0cmVhbSB7XG5cdHJldHVybiBndWFyZFRyYW5zcG9ydChwaW5vLnRyYW5zcG9ydChvcHRpb25zKSk7XG59XG5cbmZ1bmN0aW9uIGFkYXB0ZXJGb3JUcmFuc3BvcnQodHJhbnNwb3J0PzogVHJhbnNwb3J0T3B0aW9ucyk6IFBpbm9BZGFwdGVyIHtcblx0aWYgKHRyYW5zcG9ydCA9PSBudWxsKSB7XG5cdFx0cmV0dXJuIG5ldyBQaW5vQWRhcHRlcih7fSk7XG5cdH1cblx0cmV0dXJuIG5ldyBQaW5vQWRhcHRlcih7fSwgY3JlYXRlU2FmZVRyYW5zcG9ydCh0cmFuc3BvcnQpKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlSZWNpcGUoZmFjdG9yeTogc2NyaWJlLCBwbGFuOiBQaW5vUmVjaXBlUGxhbik6IFBpbm9Mb2dnZXJGYWN0b3J5IHtcblx0Y29uc3QgYWRhcHRlciA9IGFkYXB0ZXJGb3JUcmFuc3BvcnQocGlub1JlY2lwZS50cmFuc3BvcnQocGxhbikpO1xuXHQvLyBPbWl0IGxvZ0xldmVsIHdoZW4gdW5zZXQgc28gbWVyZ2VEZWZhdWx0cyBjYW4gcmVhZCBMT0dfTEVWRUwgLyBTQ1JJQkVfTE9HX0xFVkVMLlxuXHRyZXR1cm4gZmFjdG9yeS5jb25maWd1cmUoe1xuXHRcdG9wdGlvbnM6IHBsYW4ubG9nTGV2ZWwgIT0gbnVsbCA/IHsgbG9nTGV2ZWw6IHBsYW4ubG9nTGV2ZWwgfSA6IHt9LFxuXHRcdGFkYXB0ZXIsXG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjb25maWd1cmVTY3JpYmU8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRmYWN0b3J5OiBzY3JpYmUsXG5cdG9wdGlvbnM6IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT4gfCB1bmRlZmluZWQsXG5cdGNvbmZpZz86IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuKSB7XG5cdGNvbnN0IGVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gRGVmYXVsdEVudmlyb25tZW50O1xuXHRjb25zdCBjb25maWdzID0gKEFycmF5LmlzQXJyYXkoY29uZmlnKSA/IGNvbmZpZyA6IGNvbmZpZyAhPSBudWxsID8gW2NvbmZpZ10gOiBbXSkuZmlsdGVyKFxuXHRcdChpdGVtKSA9PiBpdGVtLmVudmlyb25tZW50ID09IG51bGwgfHwgaXRlbS5lbnZpcm9ubWVudCA9PT0gZW52aXJvbm1lbnQsXG5cdCk7XG5cblx0aWYgKGNvbmZpZ3MubGVuZ3RoID4gMSkge1xuXHRcdHRocm93IG5ldyBMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yKFxuXHRcdFx0YFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb25maWd1cmF0aW9uIHBlciBlbnZpcm9ubWVudCBmb3IgbG9nZ2luZ2AsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVyRm9yVHJhbnNwb3J0KGNvbmZpZ3MuYXQoMCk/LnRyYW5zcG9ydHMpO1xuXHQvLyBEbyBub3QgZm9yY2UgRGVmYXVsdExvZ0xldmVsIOKAlCB0aGF0IHdvdWxkIHNoYWRvdyBlbnYgcmVzb2x1dGlvbiBpbiBtZXJnZURlZmF1bHRzLlxuXHRyZXR1cm4gZmFjdG9yeS5jb25maWd1cmUoe1xuXHRcdG9wdGlvbnM6IG9wdGlvbnMgPz8ge30sXG5cdFx0YWRhcHRlcixcblx0fSk7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIGd1YXJkVHJhbnNwb3J0fSDigJQga2VwdCBmb3IgY2FsbGVycy90ZXN0cyBmcm9tIHRoZSBzaWxlbmNlLW9ubHkgZXJhLiAqL1xuZnVuY3Rpb24gc2lsZW5jZUVycm9ycyh0cmFuc3BvcnQ6IHtcblx0b24oZXZlbnQ6IFwiZXJyb3JcIiwgbGlzdGVuZXI6IChlcnI6IEVycm9yKSA9PiB2b2lkKTogdW5rbm93bjtcblx0d3JpdGU/OiAoLi4uYXJnczogbmV2ZXJbXSkgPT4gdW5rbm93bjtcbn0pOiBHdWFyZGVkVHJhbnNwb3J0IHtcblx0cmV0dXJuIGd1YXJkVHJhbnNwb3J0KHRyYW5zcG9ydCBhcyBEZXN0aW5hdGlvblN0cmVhbSk7XG59XG5cbmV4cG9ydCBjb25zdCBwaW5vVHJhbnNwb3J0ID0geyBjcmVhdGVTYWZlVHJhbnNwb3J0LCBndWFyZFRyYW5zcG9ydCwgc2lsZW5jZUVycm9ycyB9O1xuIl0sIm5hbWVzIjpbImV4dGVuc2lvbiIsIkRlZmF1bHRFbnZpcm9ubWVudCIsIkxvZ2dpbmdDb25maWd1cmF0aW9uRXJyb3IiLCJzY3JpYmUiLCJwaW5vIiwiUGlub0FkYXB0ZXIiLCJwaW5vUmVjaXBlIiwiZ3VhcmRUcmFuc3BvcnQiLCJQaW5vRXh0ZW5zaW9ucyIsIndpdGhQaW5vIiwiZmFjdG9yeSIsImNvbmZpZyIsImxvZ0xldmVsIiwiY29uZmlndXJlU2NyaWJlIiwidW5kZWZpbmVkIiwid2l0aFBpbm9QcmV0dHkiLCJsb2dMZXZlbE9yT3B0aW9ucyIsInByZXR0eSIsInBhcnNlUHJldHR5QXJnIiwiYXR0YWNoUmVjaXBlIiwid2l0aFBpbm9Sb2xsIiwib3B0aW9ucyIsInJvbGwiLCJ3aXRoUGlub0N1c3RvbSIsInRyYW5zcG9ydHMiLCJzdGF0aWMiLCJwbGFuIiwibG9nZ2VyRmFjdG9yeSIsImFwcGx5UmVjaXBlIiwiY2hhaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJhbmQiLCJjcmVhdGVTYWZlVHJhbnNwb3J0IiwidHJhbnNwb3J0IiwiYWRhcHRlckZvclRyYW5zcG9ydCIsImFkYXB0ZXIiLCJjb25maWd1cmUiLCJlbnZpcm9ubWVudCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJpdGVtIiwibGVuZ3RoIiwiYXQiLCJzaWxlbmNlRXJyb3JzIiwicGlub1RyYW5zcG9ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsU0FBU0EsU0FBUyxRQUFRLGdDQUFnQztBQUMxRCxTQUFTQyxrQkFBa0IsUUFBMEIseUJBQXlCO0FBQzlFLFNBR0NDLHlCQUF5QixFQUV6QkMsTUFBTSxRQUNBLG1CQUFtQjtBQUMxQixPQUFPQyxVQUtBLE9BQU87QUFFZCxTQUFTQyxXQUFXLFFBQVEscUJBQXFCO0FBQ2pELFNBSUNDLFVBQVUsUUFDSixtQkFBbUI7QUFDMUIsU0FBZ0NDLGNBQWMsUUFBUSw0QkFBNEI7QUFHbEYsU0FBU0EsY0FBYyxRQUFRLDRCQUE0QjtBQXlFM0QsT0FBTyxNQUFNQztJQUNaLE9BQ2NDLFNBQ2JDLE9BQWUsRUFDZkMsTUFBMkMsRUFDM0NDLFFBQWlDLEVBQ2hDO1FBQ0QsT0FBT0MsZ0JBQWdCSCxTQUFTRSxZQUFZLE9BQU87WUFBRUE7UUFBUyxJQUFJRSxXQUFXSDtJQUM5RTtJQUVBLE9BQ2NJ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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decohere/scribe-pino",
|
|
3
|
-
"version": "0.0.1-dev.
|
|
3
|
+
"version": "0.0.1-dev.90",
|
|
4
4
|
"description": "Pino adapter for @decohere/scribe",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -23,9 +23,21 @@
|
|
|
23
23
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@decohere/nexus": "0.0.1-dev.
|
|
27
|
-
"@decohere/scribe": "0.0.1-dev.
|
|
26
|
+
"@decohere/nexus": "0.0.1-dev.90",
|
|
27
|
+
"@decohere/scribe": "0.0.1-dev.90",
|
|
28
28
|
"pino": "^10.3.0"
|
|
29
29
|
},
|
|
30
|
-
"devDependencies": {}
|
|
30
|
+
"devDependencies": {},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"pino-pretty": "^13.0.0",
|
|
33
|
+
"pino-roll": "^4.0.0"
|
|
34
|
+
},
|
|
35
|
+
"peerDependenciesMeta": {
|
|
36
|
+
"pino-pretty": {
|
|
37
|
+
"optional": true
|
|
38
|
+
},
|
|
39
|
+
"pino-roll": {
|
|
40
|
+
"optional": true
|
|
41
|
+
}
|
|
42
|
+
}
|
|
31
43
|
}
|
package/types/src/index.d.ts
CHANGED
|
@@ -8,8 +8,16 @@ export declare class PinoAdapter extends LogAdapter {
|
|
|
8
8
|
private _pino;
|
|
9
9
|
private readonly options;
|
|
10
10
|
private readonly stream;
|
|
11
|
+
private disposed;
|
|
12
|
+
private retired;
|
|
11
13
|
constructor(options: pino.LoggerOptions, stream?: pino.DestinationStream);
|
|
12
14
|
configure<T extends string = never, CustomOnly extends true | false = false>(scribeOptions: ScribeOptions<T, CustomOnly>): void;
|
|
13
15
|
getLogger<T extends string = never, CustomOnly extends true | false = false>(name: string): Logger<T, CustomOnly>;
|
|
14
16
|
flush(cb?: () => void): void;
|
|
17
|
+
/**
|
|
18
|
+
* Immediately stop accepting writes into the destination (ThreadStream).
|
|
19
|
+
* Does not wait for flush — use `stop()` for async drain after retire.
|
|
20
|
+
*/
|
|
21
|
+
retire(): void;
|
|
22
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
15
23
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type Environment } from "@decohere/nexus/system";
|
|
2
|
+
import type { TransportMultiOptions, TransportSingleOptions } from "pino";
|
|
3
|
+
/** Pretty and roll are local-dev conveniences. Production ships JSON on stdout. */
|
|
4
|
+
export type PinoWhen = "development" | "always";
|
|
5
|
+
export type PinoPrettyRecipeOptions = {
|
|
6
|
+
colorize?: boolean;
|
|
7
|
+
logLevel?: string;
|
|
8
|
+
when?: PinoWhen;
|
|
9
|
+
};
|
|
10
|
+
export type PinoRollRecipeOptions = {
|
|
11
|
+
/** Default roll path. Overridden at runtime by `SCRIBE_LOG_FILE` when set. */
|
|
12
|
+
file: string;
|
|
13
|
+
size?: string;
|
|
14
|
+
frequency?: string | number;
|
|
15
|
+
keep?: number;
|
|
16
|
+
mkdir?: boolean;
|
|
17
|
+
symlink?: boolean;
|
|
18
|
+
logLevel?: string;
|
|
19
|
+
when?: PinoWhen;
|
|
20
|
+
};
|
|
21
|
+
export type PinoRecipePlan = {
|
|
22
|
+
pretty?: PinoPrettyRecipeOptions;
|
|
23
|
+
roll?: PinoRollRecipeOptions;
|
|
24
|
+
logLevel?: string;
|
|
25
|
+
};
|
|
26
|
+
declare function currentEnvironment(): Environment;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve roll options. `SCRIBE_LOG_FILE` overrides `file` so ops can redirect
|
|
29
|
+
* without touching app code. Size / frequency / keep: explicit > env > default.
|
|
30
|
+
*/
|
|
31
|
+
declare function resolveRoll(options: PinoRollRecipeOptions): {
|
|
32
|
+
file: string;
|
|
33
|
+
size: string;
|
|
34
|
+
frequency: string | number;
|
|
35
|
+
keep: number;
|
|
36
|
+
mkdir: boolean;
|
|
37
|
+
symlink: boolean;
|
|
38
|
+
};
|
|
39
|
+
declare function transport(plan: PinoRecipePlan, environment?: Environment): TransportSingleOptions | TransportMultiOptions | undefined;
|
|
40
|
+
export declare const pinoRecipe: {
|
|
41
|
+
transport: typeof transport;
|
|
42
|
+
currentEnvironment: typeof currentEnvironment;
|
|
43
|
+
resolveRoll: typeof resolveRoll;
|
|
44
|
+
};
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DestinationStream } from "pino";
|
|
2
|
+
export type GuardedTransport = DestinationStream & {
|
|
3
|
+
readonly retired: boolean;
|
|
4
|
+
retire(reason?: string): void;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Wrap a pino worker transport so a dead ThreadStream cannot spam or crash.
|
|
8
|
+
* On first error / write throw: report once, destroy, no-op further writes.
|
|
9
|
+
*/
|
|
10
|
+
export declare function guardTransport(transport: DestinationStream): GuardedTransport;
|
|
@@ -1,24 +1,72 @@
|
|
|
1
1
|
import { type Environment } from "@decohere/nexus/system";
|
|
2
2
|
import { type DefaultLevels, type Logger, type ScribeOptions, scribe } from "@decohere/scribe";
|
|
3
|
-
import type
|
|
3
|
+
import { type DestinationStream, type TransportMultiOptions, type TransportPipelineOptions, type TransportSingleOptions } from "pino";
|
|
4
|
+
import { type PinoPrettyRecipeOptions, type PinoRollRecipeOptions } from "./pino.recipe.js";
|
|
5
|
+
import { type GuardedTransport, guardTransport } from "./pino.transport-guard.js";
|
|
6
|
+
export type { GuardedTransport } from "./pino.transport-guard.js";
|
|
7
|
+
export { guardTransport } from "./pino.transport-guard.js";
|
|
8
|
+
type TransportOptions = TransportSingleOptions | TransportMultiOptions | TransportPipelineOptions;
|
|
4
9
|
type TransportConfig = {
|
|
5
10
|
environment?: Environment;
|
|
6
|
-
transports:
|
|
11
|
+
transports: TransportOptions;
|
|
7
12
|
};
|
|
8
13
|
type CustomLevelOptions<T extends string = never, CustomOnly extends true = undefined> = {
|
|
9
14
|
scribe?: ScribeOptions<T, CustomOnly>;
|
|
10
15
|
transports?: TransportConfig | TransportConfig[];
|
|
11
16
|
};
|
|
17
|
+
export type PinoLoggerFactory = (name?: string) => Logger;
|
|
18
|
+
export type PinoRecipeChain = {
|
|
19
|
+
withPinoPretty(logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
|
|
20
|
+
withPinoRoll(options: PinoRollRecipeOptions): PinoRecipe;
|
|
21
|
+
};
|
|
22
|
+
export type PinoRecipe = PinoLoggerFactory & PinoRecipeChain & {
|
|
23
|
+
readonly and: PinoRecipeChain;
|
|
24
|
+
};
|
|
12
25
|
declare module "@decohere/scribe" {
|
|
13
26
|
interface scribe {
|
|
14
|
-
withPino(transports: TransportConfig | TransportConfig[], loglevel?: DefaultLevels | string):
|
|
15
|
-
|
|
16
|
-
|
|
27
|
+
withPino(transports: TransportConfig | TransportConfig[], loglevel?: DefaultLevels | string): PinoLoggerFactory;
|
|
28
|
+
/**
|
|
29
|
+
* Colorized pretty transport. Development only unless `{ when: "always" }`.
|
|
30
|
+
* Chain with `.and.withPinoRoll({ file })`. Production writes JSON to stdout
|
|
31
|
+
* so log shipping stays outside the process.
|
|
32
|
+
*/
|
|
33
|
+
withPinoPretty(logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
|
|
34
|
+
/**
|
|
35
|
+
* Rolling log files. Development only unless `{ when: "always" }`.
|
|
36
|
+
* Do not enable in production — ship stdout from a sidecar or platform agent.
|
|
37
|
+
* `symlink` defaults off; enabling it can race under multi-worker / HMR.
|
|
38
|
+
* Ops may override path/size/frequency/keep via `SCRIBE_LOG_FILE`,
|
|
39
|
+
* `SCRIBE_LOG_SIZE`, `SCRIBE_LOG_FREQUENCY`, and `SCRIBE_LOG_KEEP`
|
|
40
|
+
* (file env wins over `options.file`; other explicit options beat env).
|
|
41
|
+
*/
|
|
42
|
+
withPinoRoll(options: PinoRollRecipeOptions): PinoRecipe;
|
|
43
|
+
withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(options?: CustomLevelOptions<T, CustomOnly>): PinoLoggerFactory;
|
|
44
|
+
}
|
|
45
|
+
namespace scribe {
|
|
46
|
+
function withPino(transports: TransportConfig | TransportConfig[], loglevel?: DefaultLevels | string): PinoLoggerFactory;
|
|
47
|
+
function withPinoPretty(logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
|
|
48
|
+
function withPinoRoll(options: PinoRollRecipeOptions): PinoRecipe;
|
|
49
|
+
function withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(options?: CustomLevelOptions<T, CustomOnly>): PinoLoggerFactory;
|
|
17
50
|
}
|
|
18
51
|
}
|
|
19
52
|
export declare class PinoExtensions {
|
|
20
53
|
static withPino(factory: scribe, config: TransportConfig | TransportConfig[], logLevel?: DefaultLevels | string): (name?: string) => Logger<never, false>;
|
|
21
|
-
static withPinoPretty(factory: scribe,
|
|
54
|
+
static withPinoPretty(factory: scribe, logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
|
|
55
|
+
static withPinoRoll(factory: scribe, options: PinoRollRecipeOptions): PinoRecipe;
|
|
22
56
|
static withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(factory: scribe, options?: CustomLevelOptions<T, CustomOnly>): (name?: string) => Logger<T, CustomOnly>;
|
|
23
57
|
}
|
|
24
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Guard a worker transport so failures (roll EEXIST, worker exit) neither
|
|
60
|
+
* crash the process nor spam stderr on every subsequent log write.
|
|
61
|
+
*/
|
|
62
|
+
declare function createSafeTransport(options: TransportOptions): DestinationStream;
|
|
63
|
+
/** @deprecated Use {@link guardTransport} — kept for callers/tests from the silence-only era. */
|
|
64
|
+
declare function silenceErrors(transport: {
|
|
65
|
+
on(event: "error", listener: (err: Error) => void): unknown;
|
|
66
|
+
write?: (...args: never[]) => unknown;
|
|
67
|
+
}): GuardedTransport;
|
|
68
|
+
export declare const pinoTransport: {
|
|
69
|
+
createSafeTransport: typeof createSafeTransport;
|
|
70
|
+
guardTransport: typeof guardTransport;
|
|
71
|
+
silenceErrors: typeof silenceErrors;
|
|
72
|
+
};
|