@mongodb-js/compass-logging
Advanced tools
Comparing version
@@ -1,3 +0,3 @@ | ||
export { createLoggerAndTelemetry } from './ipc-logger'; | ||
export type { LoggerAndTelemetry } from './logger'; | ||
export { createLogger } from './ipc-logger'; | ||
export type { Logger } from './logger'; | ||
export { mongoLogId } from 'mongodb-log-writer'; | ||
@@ -4,0 +4,0 @@ import createDebug from 'debug'; |
@@ -6,5 +6,5 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.debug = exports.mongoLogId = exports.createLoggerAndTelemetry = void 0; | ||
exports.debug = exports.mongoLogId = exports.createLogger = void 0; | ||
var ipc_logger_1 = require("./ipc-logger"); | ||
Object.defineProperty(exports, "createLoggerAndTelemetry", { enumerable: true, get: function () { return ipc_logger_1.createLoggerAndTelemetry; } }); | ||
Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return ipc_logger_1.createLogger; } }); | ||
var mongodb_log_writer_1 = require("mongodb-log-writer"); | ||
@@ -11,0 +11,0 @@ Object.defineProperty(exports, "mongoLogId", { enumerable: true, get: function () { return mongodb_log_writer_1.mongoLogId; } }); |
@@ -1,2 +0,2 @@ | ||
export declare function createLoggerAndTelemetry(component: string): import("./logger").LoggerAndTelemetry; | ||
export declare function createLogger(component: string): import("./logger").Logger; | ||
//# sourceMappingURL=ipc-logger.d.ts.map |
@@ -6,6 +6,8 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createLoggerAndTelemetry = void 0; | ||
exports.createLogger = void 0; | ||
const is_electron_renderer_1 = __importDefault(require("is-electron-renderer")); | ||
const logger_1 = require("./logger"); | ||
function emit(ipc, event, data) { | ||
// We use ipc.callQuiet instead of ipc.call because we already | ||
// print debugging messages below | ||
void ipc?.callQuiet?.(event, data); | ||
@@ -16,10 +18,11 @@ if (typeof process !== 'undefined' && typeof process.emit === 'function') { | ||
} | ||
function createLoggerAndTelemetry(component) { | ||
function createLogger(component) { | ||
// This application may not be running in an Node.js/Electron context. | ||
const ipc = is_electron_renderer_1.default | ||
? | ||
? // eslint-disable-next-line @typescript-eslint/no-var-requires | ||
require('hadron-ipc').ipcRenderer | ||
: null; | ||
return (0, logger_1.createGenericLoggerAndTelemetry)(component, emit.bind(null, ipc)); | ||
return (0, logger_1.createGenericLogger)(component, emit.bind(null, ipc)); | ||
} | ||
exports.createLoggerAndTelemetry = createLoggerAndTelemetry; | ||
exports.createLogger = createLogger; | ||
//# sourceMappingURL=ipc-logger.js.map |
import { MongoLogWriter, mongoLogId } from 'mongodb-log-writer'; | ||
import createDebug from 'debug'; | ||
type TrackProps = Record<string, any> | (() => Record<string, any>); | ||
type TrackFunction = (event: string, properties?: TrackProps) => void; | ||
export type LoggerAndTelemetry = { | ||
export type Logger = { | ||
log: ReturnType<MongoLogWriter['bindComponent']>; | ||
mongoLogId: typeof mongoLogId; | ||
debug: ReturnType<typeof createDebug>; | ||
track: TrackFunction; | ||
}; | ||
export declare function createGenericLoggerAndTelemetry(component: string, emit: (event: string, arg: any) => void): LoggerAndTelemetry; | ||
export {}; | ||
export declare function createGenericLogger(component: string, emit: (event: string, arg: any) => void): Logger; | ||
//# sourceMappingURL=logger.d.ts.map |
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
var desc = Object.getOwnPropertyDescriptor(m, k); | ||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
desc = { enumerable: true, get: function() { return m[k]; } }; | ||
} | ||
Object.defineProperty(o, k2, desc); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
}) : function(o, v) { | ||
o["default"] = v; | ||
}); | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
__setModuleDefault(result, mod); | ||
return result; | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
@@ -29,7 +6,10 @@ return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createGenericLoggerAndTelemetry = void 0; | ||
exports.createGenericLogger = void 0; | ||
const mongodb_log_writer_1 = require("mongodb-log-writer"); | ||
const debug_1 = __importDefault(require("debug")); | ||
let preferences; | ||
function createGenericLoggerAndTelemetry(component, emit) { | ||
function createGenericLogger(component, emit) { | ||
// Do not create an actual Writable stream here, since the callback | ||
// logic in Node.js streams would mean that two writes from the | ||
// same event loop tick would not be written synchronously, | ||
// allowing another logger's write to be written out-of-order. | ||
const target = { | ||
@@ -46,47 +26,2 @@ write(line, callback) { | ||
const log = writer.bindComponent(component); | ||
const track = (...args) => { | ||
void Promise.resolve() | ||
.then(() => trackAsync(...args)) | ||
.catch((error) => debug('track failed', error)); | ||
}; | ||
const trackAsync = async (event, properties = {}) => { | ||
try { | ||
preferences ??= (await Promise.resolve().then(() => __importStar(require('compass-preferences-model')))) | ||
.preferencesAccess; | ||
} | ||
catch { | ||
preferences ??= { | ||
getPreferences() { | ||
return { trackUsageStatistics: true }; | ||
}, | ||
}; | ||
} | ||
const { trackUsageStatistics = true } = preferences?.getPreferences(); | ||
if (!trackUsageStatistics) { | ||
return; | ||
} | ||
const data = { | ||
event, | ||
properties, | ||
}; | ||
if (typeof properties === 'function') { | ||
try { | ||
data.properties = await properties(); | ||
} | ||
catch (error) { | ||
emit('compass:track', { | ||
event: 'Error Fetching Attributes', | ||
properties: { | ||
event_name: event, | ||
}, | ||
}); | ||
log.error((0, mongodb_log_writer_1.mongoLogId)(1001000190), 'Telemetry', 'Error computing event properties for telemetry', { | ||
event, | ||
error: error.stack, | ||
}); | ||
return; | ||
} | ||
} | ||
emit('compass:track', data); | ||
}; | ||
const debug = (0, debug_1.default)(`mongodb-compass:${component.toLowerCase()}`); | ||
@@ -105,6 +40,5 @@ writer.on('log', ({ s, ctx, msg, attr }) => { | ||
debug, | ||
track, | ||
}; | ||
} | ||
exports.createGenericLoggerAndTelemetry = createGenericLoggerAndTelemetry; | ||
exports.createGenericLogger = createGenericLogger; | ||
//# sourceMappingURL=logger.js.map |
import React from 'react'; | ||
import type { LoggerAndTelemetry } from './logger'; | ||
export type { LoggerAndTelemetry } from './logger'; | ||
export declare const LoggerAndTelemetryProvider: React.Provider<(component: string) => LoggerAndTelemetry>; | ||
export declare function createLoggerAndTelemetryLocator(component: string): () => LoggerAndTelemetry; | ||
export declare function useLoggerAndTelemetry(component: string): LoggerAndTelemetry; | ||
export declare function useTrackOnChange(component: string, onChange: (track: LoggerAndTelemetry['track']) => void, dependencies: unknown[], options?: { | ||
skipOnMount: boolean; | ||
}): void; | ||
import type { Logger } from './logger'; | ||
import type { MongoLogId } from 'mongodb-log-writer'; | ||
export type { Logger } from './logger'; | ||
export declare function createNoopLogger(component?: string): Logger; | ||
export declare const LoggerProvider: React.Provider<{ | ||
createLogger(component: string): Logger; | ||
}>; | ||
export declare function createLoggerLocator(component: string): () => Logger; | ||
export declare function useLogger(component: string): Logger; | ||
type FirstArgument<F> = F extends (...args: [infer A, ...any]) => any ? A : F extends { | ||
new (...args: [infer A, ...any]): any; | ||
} ? A : never; | ||
export declare function withLoggerAndTelemetry<T extends ((...args: any[]) => any) | { | ||
export declare function withLogger<T extends ((...args: any[]) => any) | { | ||
new (...args: any[]): any; | ||
}>(ReactComponent: T, component: string): React.FunctionComponent<Omit<FirstArgument<T>, 'logger'>>; | ||
export declare function mongoLogId(id: number): MongoLogId; | ||
export type { MongoLogWriter } from 'mongodb-log-writer'; | ||
//# sourceMappingURL=provider.d.ts.map |
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
var desc = Object.getOwnPropertyDescriptor(m, k); | ||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
desc = { enumerable: true, get: function() { return m[k]; } }; | ||
} | ||
Object.defineProperty(o, k2, desc); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
}) : function(o, v) { | ||
o["default"] = v; | ||
}); | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
__setModuleDefault(result, mod); | ||
return result; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.withLoggerAndTelemetry = exports.useTrackOnChange = exports.useLoggerAndTelemetry = exports.createLoggerAndTelemetryLocator = exports.LoggerAndTelemetryProvider = void 0; | ||
const react_1 = __importDefault(require("react")); | ||
function defaultCreateLoggerAndTelemetry(component) { | ||
return require('./logger').createGenericLoggerAndTelemetry(component, () => { | ||
}); | ||
exports.mongoLogId = exports.withLogger = exports.useLogger = exports.createLoggerLocator = exports.LoggerProvider = exports.createNoopLogger = void 0; | ||
const react_1 = __importStar(require("react")); | ||
const hadron_app_registry_1 = require("hadron-app-registry"); | ||
const noop = () => { | ||
// noop | ||
}; | ||
function createNoopLogger(component = 'NOOP-LOGGER') { | ||
return { | ||
log: { | ||
component, | ||
get unbound() { | ||
return this; | ||
}, | ||
write: () => true, | ||
info: noop, | ||
warn: noop, | ||
error: noop, | ||
fatal: noop, | ||
debug: noop, | ||
}, | ||
debug: noop, | ||
mongoLogId, | ||
}; | ||
} | ||
const LoggerAndTelemetryContext = react_1.default.createContext(defaultCreateLoggerAndTelemetry); | ||
exports.LoggerAndTelemetryProvider = LoggerAndTelemetryContext.Provider; | ||
function createLoggerAndTelemetryLocator(component) { | ||
return useLoggerAndTelemetry.bind(null, component); | ||
exports.createNoopLogger = createNoopLogger; | ||
const LoggerContext = react_1.default.createContext({ createLogger: createNoopLogger }); | ||
exports.LoggerProvider = LoggerContext.Provider; | ||
function createLoggerLocator(component) { | ||
return (0, hadron_app_registry_1.createServiceLocator)(useLogger.bind(null, component), 'createLoggerLocator'); | ||
} | ||
exports.createLoggerAndTelemetryLocator = createLoggerAndTelemetryLocator; | ||
function useLoggerAndTelemetry(component) { | ||
const createLoggerAndTelemetry = react_1.default.useContext(LoggerAndTelemetryContext); | ||
if (!createLoggerAndTelemetry) { | ||
throw new Error('LoggerAndTelemetry service is missing from React context'); | ||
exports.createLoggerLocator = createLoggerLocator; | ||
function useLogger(component) { | ||
const context = react_1.default.useContext(LoggerContext); | ||
if (!context) { | ||
throw new Error('Logger service is missing from React context'); | ||
} | ||
const loggerRef = react_1.default.createRef(); | ||
const loggerRef = (0, react_1.useRef)(); | ||
if (!loggerRef.current) { | ||
loggerRef.current = createLoggerAndTelemetry(component); | ||
loggerRef.current = context.createLogger(component); | ||
} | ||
return loggerRef.current; | ||
} | ||
exports.useLoggerAndTelemetry = useLoggerAndTelemetry; | ||
function useTrackOnChange(component, onChange, dependencies, options = { skipOnMount: false }) { | ||
const onChangeRef = react_1.default.useRef(onChange); | ||
onChangeRef.current = onChange; | ||
const { track } = useLoggerAndTelemetry(component); | ||
let initial = true; | ||
react_1.default.useEffect(() => { | ||
if (options.skipOnMount && initial) { | ||
initial = false; | ||
return; | ||
} | ||
onChangeRef.current(track); | ||
}, [...dependencies, track]); | ||
} | ||
exports.useTrackOnChange = useTrackOnChange; | ||
function withLoggerAndTelemetry(ReactComponent, component) { | ||
const WithLoggerAndTelemetry = (props) => { | ||
const logger = useLoggerAndTelemetry(component); | ||
exports.useLogger = useLogger; | ||
function withLogger(ReactComponent, component) { | ||
const WithLogger = (props) => { | ||
const logger = useLogger(component); | ||
return react_1.default.createElement(ReactComponent, { ...props, logger }); | ||
}; | ||
return WithLoggerAndTelemetry; | ||
return WithLogger; | ||
} | ||
exports.withLoggerAndTelemetry = withLoggerAndTelemetry; | ||
exports.withLogger = withLogger; | ||
// To avoid dependency on mongodb-log-writer that will pull in a lot of Node.js | ||
// specific code we re-implement mongoLogId in the provider to re-export | ||
// | ||
// Disable prettier so that dupedLogId stays on the same line to be ignored by | ||
// the check-logids script | ||
// prettier-ignore | ||
function mongoLogId(id) { | ||
return { __value: id }; | ||
} | ||
exports.mongoLogId = mongoLogId; | ||
//# sourceMappingURL=provider.js.map |
@@ -16,3 +16,3 @@ { | ||
"homepage": "https://github.com/mongodb-js/compass", | ||
"version": "0.0.0-next-d6f3df0b6003bde4b59866fd4aceaa6e80fa6592", | ||
"version": "0.0.0-next-d82bfb543d377c0ddab79defb4a01ced9c39d565", | ||
"repository": { | ||
@@ -24,8 +24,5 @@ "type": "git", | ||
"dist", | ||
"provier.js" | ||
"provider.js" | ||
], | ||
"license": "SSPL", | ||
"peerDependencies": { | ||
"hadron-ipc": "0.0.0-next-d6f3df0b6003bde4b59866fd4aceaa6e80fa6592" | ||
}, | ||
"main": "dist/index.js", | ||
@@ -49,3 +46,3 @@ "exports": { | ||
"lint": "npm run eslint . && npm run prettier -- --check .", | ||
"depcheck": "depcheck", | ||
"depcheck": "compass-scripts check-peer-deps && depcheck", | ||
"check": "npm run lint && npm run depcheck", | ||
@@ -61,11 +58,13 @@ "check-ci": "npm run check", | ||
"debug": "^4.3.4", | ||
"hadron-app-registry": "0.0.0-next-d82bfb543d377c0ddab79defb4a01ced9c39d565", | ||
"hadron-ipc": "0.0.0-next-d82bfb543d377c0ddab79defb4a01ced9c39d565", | ||
"is-electron-renderer": "^2.0.1", | ||
"mongodb-log-writer": "^1.3.0", | ||
"mongodb-log-writer": "^1.4.2", | ||
"react": "^17.0.2" | ||
}, | ||
"devDependencies": { | ||
"@mongodb-js/eslint-config-compass": "0.0.0-next-d6f3df0b6003bde4b59866fd4aceaa6e80fa6592", | ||
"@mongodb-js/mocha-config-compass": "0.0.0-next-d6f3df0b6003bde4b59866fd4aceaa6e80fa6592", | ||
"@mongodb-js/prettier-config-compass": "0.0.0-next-d6f3df0b6003bde4b59866fd4aceaa6e80fa6592", | ||
"@mongodb-js/tsconfig-compass": "0.0.0-next-d6f3df0b6003bde4b59866fd4aceaa6e80fa6592", | ||
"@mongodb-js/eslint-config-compass": "0.0.0-next-d82bfb543d377c0ddab79defb4a01ced9c39d565", | ||
"@mongodb-js/mocha-config-compass": "0.0.0-next-d82bfb543d377c0ddab79defb4a01ced9c39d565", | ||
"@mongodb-js/prettier-config-compass": "0.0.0-next-d82bfb543d377c0ddab79defb4a01ced9c39d565", | ||
"@mongodb-js/tsconfig-compass": "0.0.0-next-d82bfb543d377c0ddab79defb4a01ced9c39d565", | ||
"@types/chai": "^4.2.21", | ||
@@ -78,3 +77,2 @@ "@types/debug": "^4.1.9", | ||
"eslint": "^7.25.0", | ||
"hadron-ipc": "0.0.0-next-d6f3df0b6003bde4b59866fd4aceaa6e80fa6592", | ||
"mocha": "^10.2.0", | ||
@@ -89,3 +87,3 @@ "nyc": "^15.1.0", | ||
}, | ||
"gitHead": "d6f3df0b6003bde4b59866fd4aceaa6e80fa6592" | ||
"gitHead": "d82bfb543d377c0ddab79defb4a01ced9c39d565" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
16
-5.88%47388
-5.72%6
20%195
-12.95%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
Updated