From 6ba4f4d9834fcdf6a7990f807ea45dd990f2c121 Mon Sep 17 00:00:00 2001 From: Brian Zinn Date: Tue, 20 Aug 2019 21:31:06 -0700 Subject: [PATCH] fix: allow leading slashes in filename allow interop with other languages and current storage files with leading slash --- package.json | 2 +- src/file.ts | 5 ++++- test/file.ts | 11 +++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e3fea28ce..e2e23f5b8 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 3de579d22..7067fb48c 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 fb6535e5b..c6f2e02d8 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});