diff --git a/package.json b/package.json index e3fea28ceb..e2e23f5b8e 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "jsdoc-fresh": "^1.0.1", "linkinator": "^1.5.0", "mocha": "^6.0.0", - "nock": "^11.0.0", + "nock": "~11.0.0", "node-fetch": "^2.2.0", "normalize-newline": "^3.0.0", "nyc": "^14.0.0", diff --git a/src/file.ts b/src/file.ts index 3de579d226..7067fb48c5 100644 --- a/src/file.ts +++ b/src/file.ts @@ -291,6 +291,7 @@ export interface FileOptions { generation?: number | string; kmsKeyName?: string; userProject?: string; + keepLeadingSlashes?: boolean; } export interface CopyOptions { @@ -497,7 +498,9 @@ class File extends ServiceObject { * const file = myBucket.file('my-file'); */ constructor(bucket: Bucket, name: string, options: FileOptions = {}) { - name = name.replace(/^\/+/, ''); + if (options.keepLeadingSlashes !== true) { + name = name.replace(/^\/+/, ''); + } const requestQueryObject: {generation?: number; userProject?: string} = {}; diff --git a/test/file.ts b/test/file.ts index fb6535e5b2..c6f2e02d8c 100644 --- a/test/file.ts +++ b/test/file.ts @@ -244,6 +244,17 @@ describe('File', () => { assert.strictEqual(file.name, 'name'); }); + it('should strip two leading slashes', () => { + const file = new File(BUCKET, '//name'); + assert.strictEqual(file.name, 'name'); + }); + + it('should keep leading slashes when specified in options', () => { + const keepLeadingSlashes = true; + const file = new File(BUCKET, '/name', {keepLeadingSlashes}); + assert.strictEqual(file.name, '/name'); + }) + it('should assign KMS key name', () => { const kmsKeyName = 'kms-key-name'; const file = new File(BUCKET, '/name', {kmsKeyName});