Skip to content
This repository was archived by the owner on Mar 11, 2026. It is now read-only.

Commit 2496d2a

Browse files
authored
chore(deps): remove snakecase-keys dependency (#1038)
Before: **Total dependencies size: 22.49M** After: **Total dependencies size: 22.46M** improvement: ~30kB Part of #1037
1 parent 02e8bb4 commit 2496d2a

3 files changed

Lines changed: 26 additions & 9 deletions

File tree

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
"google-gax": "^2.9.2",
6161
"on-finished": "^2.3.0",
6262
"pumpify": "^2.0.1",
63-
"snakecase-keys": "^3.1.2",
6463
"stream-events": "^1.0.5"
6564
},
6665
"devDependencies": {

src/log.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@ import {Entry, EntryJson, LogEntry} from './entry';
2626
import {getDefaultResource} from './metadata';
2727
import {GoogleAuth} from 'google-auth-library/build/src/auth/googleauth';
2828

29-
// eslint-disable-next-line @typescript-eslint/no-var-requires
30-
const snakeCaseKeys = require('snakecase-keys');
31-
3229
export interface GetEntriesRequest {
3330
autoPaginate?: boolean;
3431
filter?: string;
@@ -891,9 +888,7 @@ class Log implements LogSeverityFunctions {
891888
// eslint-disable-next-line @typescript-eslint/no-this-alias
892889
const self = this;
893890
if (options.resource) {
894-
if (options.resource.labels) {
895-
options.resource.labels = snakeCaseKeys(options.resource.labels);
896-
}
891+
if (options.resource.labels) snakecaseKeys(options.resource.labels);
897892
return writeWithResource(options.resource);
898893
} else if (this.logging.detectedResource) {
899894
return writeWithResource(this.logging.detectedResource);
@@ -928,6 +923,17 @@ class Log implements LogSeverityFunctions {
928923
options.gaxOptions
929924
);
930925
}
926+
// snakecaseKeys turns label keys from camel case to snake case.
927+
function snakecaseKeys(labels: {[p: string]: string} | null | undefined) {
928+
for (const key in labels) {
929+
Object.defineProperty(
930+
labels,
931+
key.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`),
932+
Object.getOwnPropertyDescriptor(labels, key) as PropertyDescriptor
933+
);
934+
delete labels[key];
935+
}
936+
}
931937
}
932938

933939
// TODO proper signature of `private decorateEntries` (sans underscore suffix)

test/log.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,14 @@ describe('Log', () => {
395395
});
396396

397397
it('should forward options.resource to request', async () => {
398-
const CUSTOM_RESOURCE = 'custom-resource';
398+
// Also check it should snakecase resource labels, as many sources & docs
399+
// wrongly instruct users to use camelcase.
400+
const CUSTOM_RESOURCE = {
401+
labels: {
402+
projectId: 'fake-project',
403+
regionZone: 'us-west-1',
404+
},
405+
};
399406
const optionsWithResource = extend({}, OPTIONS, {
400407
resource: CUSTOM_RESOURCE,
401408
}) as WriteOptions;
@@ -406,7 +413,12 @@ describe('Log', () => {
406413
{
407414
logName: log.formattedName_,
408415
entries: ENTRIES,
409-
resource: CUSTOM_RESOURCE,
416+
resource: {
417+
labels: {
418+
project_id: 'fake-project',
419+
region_zone: 'us-west-1',
420+
},
421+
},
410422
},
411423
undefined
412424
)

0 commit comments

Comments
 (0)