Skip to content

Commit ea73deb

Browse files
config handling ready for review
1 parent 3fdac52 commit ea73deb

File tree

4 files changed

+258
-85
lines changed

4 files changed

+258
-85
lines changed

src/connection_string.ts

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ import {
2323
ServerApiVersion
2424
} from './mongo_client';
2525
import {
26+
MongoLoggableComponent,
2627
MongoLogger,
2728
type MongoLoggerEnvOptions,
28-
type MongoLoggerMongoClientOptions
29+
type MongoLoggerMongoClientOptions,
30+
SeverityLevel
2931
} from './mongo_logger';
3032
import { ReadConcern, type ReadConcernLevel } from './read_concern';
3133
import { ReadPreference, type ReadPreferenceMode } from './read_preference';
@@ -1243,12 +1245,53 @@ export const OPTIONS = {
12431245
* @internal
12441246
* TODO: NODE-5671 - remove internal flag
12451247
*/
1246-
mongodbLogPath: { type: 'any' },
1248+
mongodbLogPath: {
1249+
transform({ values: [value] }) {
1250+
if (
1251+
!(
1252+
(typeof value === 'string' && ['stderr', 'stdout'].includes(value)) ||
1253+
(value &&
1254+
typeof value === 'object' &&
1255+
Object.keys(value).indexOf('write') >= 0 &&
1256+
typeof Object.values(value)[Object.keys(value).indexOf('write')] === 'function')
1257+
)
1258+
) {
1259+
throw new MongoAPIError(
1260+
`Option 'mongodbLogPath' must be of type 'stderr' | 'stdout' | MongoDBLogWritable`
1261+
);
1262+
}
1263+
return value;
1264+
}
1265+
},
12471266
/**
12481267
* @internal
12491268
* TODO: NODE-5671 - remove internal flag
12501269
*/
1251-
mongodbLogComponentSeverities: { type: 'any' },
1270+
mongodbLogComponentSeverities: {
1271+
transform({ values: [value] }) {
1272+
if (typeof value !== 'object' || !value) {
1273+
throw new MongoAPIError(`Option 'mongodbLogComponentSeverities' must be a non-null object`);
1274+
}
1275+
for (const [k, v] of Object.entries(value)) {
1276+
if (typeof v !== 'string' || typeof k !== 'string') {
1277+
throw new MongoAPIError(
1278+
`User input for option 'mongodbLogComponentSeverities' object cannot include a non-string key or value`
1279+
);
1280+
}
1281+
if (!Object.values(MongoLoggableComponent).some(val => val === k) && k !== 'default') {
1282+
throw new MongoAPIError(
1283+
`User input for option 'mongodbLogComponentSeverities' contains invalid key: ${k}`
1284+
);
1285+
}
1286+
if (!Object.values(SeverityLevel).some(val => val === v)) {
1287+
throw new MongoAPIError(
1288+
`Option 'mongodbLogComponentSeverities' does not support ${v} as a value for ${k}`
1289+
);
1290+
}
1291+
}
1292+
return value;
1293+
}
1294+
},
12521295
/**
12531296
* @internal
12541297
* TODO: NODE-5671 - remove internal flag

src/mongo_logger.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,10 @@ export interface Log extends Record<string, any> {
283283
message?: string;
284284
}
285285

286-
/** @internal */
286+
/**
287+
* @internal
288+
* TODO: NODE-5671 - remove internal flag and add API comments
289+
*/
287290
export interface MongoDBLogWritable {
288291
write(log: Log): void;
289292
}

test/unit/connection_string.test.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -912,13 +912,11 @@ describe('Connection String', function () {
912912
});
913913

914914
context('when option is invalid', function () {
915-
it('it defaults to stderr', function () {
916-
const client = new MongoClient('mongodb://a/?mongodbLogPath=stdnothing', {
917-
[loggerFeatureFlag]: true
918-
});
919-
const log: Log = { t: new Date(), c: 'ConnectionStringInvalidOption', s: 'error' };
920-
client.options.mongoLoggerOptions.logDestination.write(log);
921-
expect(stderrStub.write).calledWith(inspect(log, { breakLength: Infinity, compact: true }));
915+
it('should throw error at construction', function () {
916+
expect(
917+
() =>
918+
new MongoClient('mongodb://a/?mongodbLogPath=stdnothing', { [loggerFeatureFlag]: true })
919+
).to.throw(MongoAPIError);
922920
});
923921
});
924922
});

0 commit comments

Comments
 (0)