From 70f470de04ed89b78481caa5210c70aa39eaf740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Lenon?= Date: Thu, 17 Feb 2022 23:59:50 -0300 Subject: [PATCH 1/2] feat: init refactor --- README.md | 55 +--- package-lock.json | 568 +++++++++++++++++++++++++++++++++++- package.json | 4 +- src/Storage.ts | 138 ++------- tests/build-storage.spec.ts | 6 +- tests/storage-gcs.spec.ts | 2 +- tests/storage-local.spec.ts | 14 +- tests/storage-s3.spec.ts | 2 +- 8 files changed, 609 insertions(+), 180 deletions(-) diff --git a/README.md b/README.md index 835d6f4..0a10f96 100644 --- a/README.md +++ b/README.md @@ -155,24 +155,23 @@ await storage.move('folder/DASdsakdjas912831jhdasnm.txt', 'folder/test/move.txt' ### Subscribing configs of disks in runtime -> You can subscribe the disks configs in runtime using addConfig, removeConfig and resetConfig methods +> You can subscribe the disks configs in runtime using in Storage constructor or disk method ```ts +// Using disk method approach // File created on storage/newAppFolder/file.txt storage - .addConfig('root', Path.noBuild().storage('newAppFolder')) + .disk('local', { root: Path.noBuild().storage('newAppFolder') }) .put('file.txt', Buffer.from('Hello World')) -// Will use the default: storage/app/file.txt -storage - .removeConfig('root') - .put('file.txt', Buffer.from('Hello World')) +// Using constructor method approach +const newStorage = new Storage({ root: Path.noBuild().storage('newAppFolder') }) -// resetConfig removes all the configs from the Storage instance -// Will use the default: storage/app/file.txt -storage - .resetConfigs() - .put('file.txt', Buffer.from('Hello World')) +// File created on storage/newAppFolder/file2.txt +newStorage.put('file2.txt', Buffer.from('Hello World')) + +// You can reset configs using an empty object in the disk method +storage.disk('local', {}) // Clear the runtime configuration ``` ### Using S3 or GCS disk @@ -180,38 +179,10 @@ storage > You can use **s3** or **gcs** disk to make all this actions inside buckets ```ts +// Saves to S3 storage.disk('s3').put('folder/file.txt', Buffer.from('Hello world!')) -``` - -> It could be a little repetitive calling disk all the time, so you can change the default disk for that storage instance - -```ts -storage.changeDefaultDisk('gcs') - -// All storage actions of this instance will use gcs from now on -storage.put('folder/file.txt', Buffer.from('Hello world!')) -``` - -> Be careful with **addConfig**, **removeConfig** and **resetConfig** because they create a new instance -> of the default driver you are using, if you want to subscribe some config and use a different disk, -> use this methods first, example: - -```ts -proccess.env.FILESYSTEM_DISK = 'local' - -// BAD!!!!! -// This will create the file using local disk -storage - .disk('s3') - .addConfig('bucket', 'test-bucket') - .put('file.txt', Buffer.from('Hello World')) - -// GOOD!!!!! -// This will create the file using s3 disk -storage - .addConfig('bucket', 'test-bucket') - .disk('s3') - .put('file.txt', Buffer.from('Hello World')) +// Saves to GCS +storage.disk('gcs').put('folder/file.txt', Buffer.from('Hello world!')) ``` ### Extending disks and drivers diff --git a/package-lock.json b/package-lock.json index 35f8c6c..8a587e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@secjs/storage", - "version": "1.0.2", + "version": "1.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@secjs/storage", - "version": "1.0.2", + "version": "1.0.3", "license": "MIT", "dependencies": { "@google-cloud/storage": "^5.16.1", @@ -18,7 +18,7 @@ "@secjs/env": "1.2.5", "@secjs/exceptions": "1.0.4", "@secjs/logger": "1.2.2", - "@secjs/utils": "1.5.8", + "@secjs/utils": "1.6.9", "@types/jest": "27.0.1", "@types/mime-types": "2.1.1", "@types/node": "14.17.0", @@ -1980,12 +1980,97 @@ } }, "node_modules/@secjs/utils": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@secjs/utils/-/utils-1.5.8.tgz", - "integrity": "sha512-PZ9xHS8M1390XP4HKXw0mVOcc/UzYX5By28XppnBJglMbWAZ9zwhB9Ftf+w33nqRoxDmjaOYFa9cMIVF8TWnbA==", + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@secjs/utils/-/utils-1.6.9.tgz", + "integrity": "sha512-e/IKeX0sF8YlTZnOJWMTuFYLGtSAGqx3Mxh2PKXbRrwA5OeCMOTzQMswGiaTNpL3YHeC34GtrfofukGApn0Teg==", "dev": true, "dependencies": { - "mime-types": "2.1.34" + "bytes": "3.1.2", + "chalk": "4.1.2", + "change-case": "4.1.2", + "http-status-codes": "2.2.0", + "kind-of": "6.0.3", + "mime-types": "2.1.34", + "ms": "2.1.3", + "pluralize": "8.0.0", + "uuid": "8.3.2", + "validator-brazil": "1.2.2" + } + }, + "node_modules/@secjs/utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@secjs/utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@secjs/utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@secjs/utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@secjs/utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@secjs/utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@secjs/utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/@sinonjs/commons": { @@ -3240,6 +3325,15 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cachedir": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", @@ -3304,6 +3398,16 @@ "node": ">=6" } }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -3323,6 +3427,17 @@ "url": "https://opencollective.com/browserslist" } }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3337,6 +3452,26 @@ "node": ">=4" } }, + "node_modules/change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", @@ -3686,6 +3821,17 @@ "node": ">=8" } }, + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, "node_modules/conventional-commit-types": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", @@ -4016,6 +4162,16 @@ "node": ">=8" } }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -5722,6 +5878,16 @@ "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz", "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==" }, + "node_modules/header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -5772,6 +5938,12 @@ "node": ">= 6" } }, + "node_modules/http-status-codes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.2.0.tgz", + "integrity": "sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng==", + "dev": true + }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -8613,6 +8785,15 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -9098,6 +9279,15 @@ "node": ">=0.10.0" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -9267,6 +9457,16 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-fetch": { "version": "2.6.6", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", @@ -9563,6 +9763,16 @@ "node": ">=4" } }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -9608,6 +9818,26 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -9722,6 +9952,15 @@ "semver-compare": "^1.0.0" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -10252,6 +10491,17 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, + "node_modules/sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -10326,6 +10576,16 @@ "node": ">=0.10.0" } }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/snakeize": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", @@ -11248,8 +11508,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true, - "optional": true + "dev": true }, "node_modules/type-check": { "version": "0.4.0", @@ -11340,6 +11599,24 @@ "node": ">= 4.0.0" } }, + "node_modules/upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -11415,6 +11692,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validator-brazil": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/validator-brazil/-/validator-brazil-1.2.2.tgz", + "integrity": "sha512-AsquEjcOQxol7IWshCaqzvOEEsdDE9gANueXQbtWUUaozAxZN4tYnL0vreMsuApK/IvltMP2T09VQpVgaV1QYw==", + "dev": true + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -13269,12 +13552,78 @@ } }, "@secjs/utils": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@secjs/utils/-/utils-1.5.8.tgz", - "integrity": "sha512-PZ9xHS8M1390XP4HKXw0mVOcc/UzYX5By28XppnBJglMbWAZ9zwhB9Ftf+w33nqRoxDmjaOYFa9cMIVF8TWnbA==", + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@secjs/utils/-/utils-1.6.9.tgz", + "integrity": "sha512-e/IKeX0sF8YlTZnOJWMTuFYLGtSAGqx3Mxh2PKXbRrwA5OeCMOTzQMswGiaTNpL3YHeC34GtrfofukGApn0Teg==", "dev": true, "requires": { - "mime-types": "2.1.34" + "bytes": "3.1.2", + "chalk": "4.1.2", + "change-case": "4.1.2", + "http-status-codes": "2.2.0", + "kind-of": "6.0.3", + "mime-types": "2.1.34", + "ms": "2.1.3", + "pluralize": "8.0.0", + "uuid": "8.3.2", + "validator-brazil": "1.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@sinonjs/commons": { @@ -14286,6 +14635,12 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, "cachedir": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", @@ -14334,6 +14689,16 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -14346,6 +14711,17 @@ "integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg==", "dev": true }, + "capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -14357,6 +14733,26 @@ "supports-color": "^5.3.0" } }, + "change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", @@ -14635,6 +15031,17 @@ "xdg-basedir": "^4.0.0" } }, + "constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, "conventional-commit-types": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", @@ -14898,6 +15305,16 @@ } } }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -16183,6 +16600,16 @@ "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz", "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==" }, + "header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "requires": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -16224,6 +16651,12 @@ "debug": "4" } }, + "http-status-codes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.2.0.tgz", + "integrity": "sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng==", + "dev": true + }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -18330,6 +18763,12 @@ "safe-buffer": "^5.0.1" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -18706,6 +19145,15 @@ "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=", "dev": true }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -18841,6 +19289,16 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node-fetch": { "version": "2.6.6", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", @@ -19071,6 +19529,16 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -19104,6 +19572,26 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -19188,6 +19676,12 @@ "semver-compare": "^1.0.0" } }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -19569,6 +20063,17 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, + "sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -19628,6 +20133,16 @@ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, + "snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "snakeize": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", @@ -20293,8 +20808,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true, - "optional": true + "dev": true }, "type-check": { "version": "0.4.0", @@ -20357,6 +20871,24 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, + "upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -20427,6 +20959,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "validator-brazil": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/validator-brazil/-/validator-brazil-1.2.2.tgz", + "integrity": "sha512-AsquEjcOQxol7IWshCaqzvOEEsdDE9gANueXQbtWUUaozAxZN4tYnL0vreMsuApK/IvltMP2T09VQpVgaV1QYw==", + "dev": true + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", diff --git a/package.json b/package.json index 360f59c..b115c9b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@secjs/storage", - "version": "1.0.2", + "version": "1.0.3", "description": "Handle your application files in Node.js", "license": "MIT", "author": "João Lenon ", @@ -24,7 +24,7 @@ "@secjs/env": "1.2.5", "@secjs/exceptions": "1.0.4", "@secjs/logger": "1.2.2", - "@secjs/utils": "1.5.8", + "@secjs/utils": "1.6.9", "@types/jest": "27.0.1", "@types/mime-types": "2.1.1", "@types/node": "14.17.0", diff --git a/src/Storage.ts b/src/Storage.ts index dd789a0..d18bb78 100644 --- a/src/Storage.ts +++ b/src/Storage.ts @@ -21,9 +21,9 @@ import { Drivers } from './Drivers/Drivers' import { DriverContract } from './Contracts/DriverContract' export class Storage { - private configs: any = {} - private _tempDriver: DriverContract | null = null - private _defaultDriver: DriverContract | null = null + private runtimeConfig: any + private diskName: string + private driver: DriverContract static build( name: string, @@ -39,87 +39,37 @@ export class Storage { return Object.keys(Drivers) } - constructor() { - const defaultDisk = Config.get('filesystem.default') - const diskConfig = Config.get(`filesystem.disks.${defaultDisk}`) + private createDriverInstance(diskName?: string) { + diskName = diskName || Config.get('filesystem.default') - this._defaultDriver = new Drivers[diskConfig.driver](defaultDisk) - } - - resetConfigs(): Storage { - this.configs = {} - - const defaultDisk = Config.get('filesystem.default') - const diskConfig = Config.get(`filesystem.disks.${defaultDisk}`) - - this._defaultDriver = new Drivers[diskConfig.driver]( - defaultDisk, - this.configs, - ) - - return this - } - - removeConfig(key: string): Storage { - delete this.configs[key] - - const defaultDisk = Config.get('filesystem.default') - const diskConfig = Config.get(`filesystem.disks.${defaultDisk}`) - - this._defaultDriver = new Drivers[diskConfig.driver]( - defaultDisk, - this.configs, - ) - - return this - } - - addConfig(key: string, value: any): Storage { - this.configs[key] = value - - const defaultDisk = Config.get('filesystem.default') - const diskConfig = Config.get(`filesystem.disks.${defaultDisk}`) - - this._defaultDriver = new Drivers[diskConfig.driver]( - defaultDisk, - this.configs, - ) - - return this - } + const diskConfig = Config.get(`filesystem.disks.${diskName}`) - changeDefaultDisk(disk: string): Storage { - const diskConfig = Config.get(`filesystem.disks.${disk}`) - - if (!diskConfig) + if (!diskConfig) { throw new NotImplementedException( - `Disk ${disk} is not configured inside filesystem.disks object from config/filesystem file`, + `Disk ${diskName} is not configured inside filesystem.disks object from config/filesystem file`, ) + } - if (!Drivers[diskConfig.driver]) + if (!Drivers[diskConfig.driver]) { throw new NotImplementedException( `Driver ${diskConfig.driver} does not exist, use Storage.build method to create a new driver`, ) + } - this._defaultDriver = new Drivers[diskConfig.driver](disk, this.configs) + this.diskName = diskName - return this + return new Drivers[diskConfig.driver](diskName, this.runtimeConfig) } - disk(disk: string): Storage { - const diskConfig = Config.get(`filesystem.disks.${disk}`) - - if (!diskConfig) - throw new NotImplementedException( - `Disk ${disk} is not configured inside filesystem.disks object from config/filesystem file`, - ) + constructor(runtimeConfig: any = {}) { + this.runtimeConfig = runtimeConfig + this.driver = this.createDriverInstance() + } - if (!Drivers[diskConfig.driver]) - throw new NotImplementedException( - `Driver ${diskConfig.driver} does not exist, use Storage.build method to create a new driver`, - ) + disk(disk: string, runtimeConfig?: any): Storage { + if (runtimeConfig) this.runtimeConfig = runtimeConfig - this._tempDriver = new Drivers[diskConfig.driver](disk, this.configs) + this.driver = this.createDriverInstance(disk) return this } @@ -127,9 +77,7 @@ export class Storage { async put(name: string, content: any): Promise { Storage.verifyAbsolute(name) - await this._driver.put(name, content) - - this._tempDriver = null + await this.driver.put(name, content) } async putFile( @@ -147,86 +95,60 @@ export class Storage { true, ).create() - const path = await this._driver.putFile(folder, file) + const path = await this.driver.putFile(folder, file) await file.remove() - this._tempDriver = null - return path } async exists(name: string): Promise { Storage.verifyAbsolute(name) - const exists = await this._driver.exists(name) - - this._tempDriver = null - return exists + return this.driver.exists(name) } async missing(name: string): Promise { Storage.verifyAbsolute(name) - const missing = await this._driver.missing(name) - - this._tempDriver = null - return missing + return this.driver.missing(name) } async get(name: string): Promise { Storage.verifyAbsolute(name) - const buffer = await this._driver.get(name) - this._tempDriver = null - - return buffer + return this.driver.get(name) } async url(name: string): Promise { Storage.verifyAbsolute(name) - const url = await this._driver.url(name) - - this._tempDriver = null - return url + return this.driver.url(name) } async temporaryUrl(name: string, time = 90000): Promise { Storage.verifyAbsolute(name) - const tempUrl = await this._driver.temporaryUrl(name, time) - this._tempDriver = null - - return tempUrl + return this.driver.temporaryUrl(name, time) } async delete(name: string, force?: boolean): Promise { Storage.verifyAbsolute(name) - await this._driver.delete(name, force) - this._tempDriver = null + await this.driver.delete(name, force) } async copy(oldFileName: string, newFileName: string) { Storage.verifyAbsolute(oldFileName) Storage.verifyAbsolute(newFileName) - await this._driver.copy(oldFileName, newFileName) - this._tempDriver = null + await this.driver.copy(oldFileName, newFileName) } async move(oldFileName: string, newFileName: string) { Storage.verifyAbsolute(oldFileName) Storage.verifyAbsolute(newFileName) - await this._driver.move(oldFileName, newFileName) - - this._tempDriver = null - } - - private get _driver(): DriverContract { - if (this._tempDriver) return this._tempDriver - return this._defaultDriver + await this.driver.move(oldFileName, newFileName) } private static verifyAbsolute(name: string) { diff --git a/tests/build-storage.spec.ts b/tests/build-storage.spec.ts index ea4bf83..170e0a1 100644 --- a/tests/build-storage.spec.ts +++ b/tests/build-storage.spec.ts @@ -1,7 +1,7 @@ -import { existsSync, promises } from 'fs' +import { existsSync } from 'fs' import { Config } from '@secjs/config' import { Storage } from '../src/Storage' -import { Path } from '@secjs/utils' +import { Folder, Path } from '@secjs/utils' import { LocalDriver } from '../src/Drivers/LocalDriver' describe('\n Build Drive Storage Class', () => { @@ -54,6 +54,6 @@ describe('\n Build Drive Storage Class', () => { }) afterEach(async () => { - await promises.rmdir(Path.storage('app/lib'), { recursive: true }) + await Folder.safeRemove(Path.storage('app/lib')) }) }) diff --git a/tests/storage-gcs.spec.ts b/tests/storage-gcs.spec.ts index fca3095..1d30657 100644 --- a/tests/storage-gcs.spec.ts +++ b/tests/storage-gcs.spec.ts @@ -13,7 +13,7 @@ describe('\n Storage GCS Class', () => { beforeEach(async () => { await new Config().load() - storage = new Storage().changeDefaultDisk('gcs') + storage = new Storage().disk('gcs') }) it('should store a brand new file', async () => { diff --git a/tests/storage-local.spec.ts b/tests/storage-local.spec.ts index b0b805a..1785998 100644 --- a/tests/storage-local.spec.ts +++ b/tests/storage-local.spec.ts @@ -1,6 +1,6 @@ import { Config } from '@secjs/config' import { Storage } from '../src/Storage' -import { Path, sleep } from '@secjs/utils' +import { Folder, Path, sleep } from '@secjs/utils' import { existsSync, promises, readdirSync } from 'fs' import { join } from 'path' import { tmpdir } from 'os' @@ -111,21 +111,19 @@ describe('\n Storage Local Class', () => { expect(existsSync(copyPath)).toBe(true) }) - it('should add, remove and reset new configs to drivers', async () => { - storage.addConfig('root', Path.storage('newApp/local')) - - await storage.put('local.txt', bigContent) + it('should be able to recreate driver instance with runtime configs', async () => { + await storage.disk('local', { root: Path.storage('newApp/local') }).put('local.txt', bigContent) expect(existsSync(Path.storage('newApp/local/local.txt'))).toBe(true) - await storage.removeConfig('root').put('local.txt', bigContent) + await storage.disk('local', {}).put('local.txt', bigContent) expect(existsSync(Path.storage('app/local/local.txt'))).toBe(true) - await promises.rmdir(Path.storage('newApp'), { recursive: true }) + await Folder.safeRemove(Path.storage('newApp')) }) afterEach(async () => { - await promises.rmdir(Path.storage('app/local'), { recursive: true }) + await Folder.safeRemove(Path.storage('app/local')) }) }) diff --git a/tests/storage-s3.spec.ts b/tests/storage-s3.spec.ts index 2d59740..5b71ab5 100644 --- a/tests/storage-s3.spec.ts +++ b/tests/storage-s3.spec.ts @@ -13,7 +13,7 @@ describe('\n Storage S3 Class', () => { beforeEach(async () => { await new Config().load() - storage = new Storage().changeDefaultDisk('s3') + storage = new Storage().disk('s3') }) it('should store a file in the s3 bucket disk', async () => { From aa8c83a97a863e05858e3e42979ae71f2eaf6c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Lenon?= Date: Fri, 18 Feb 2022 00:04:56 -0300 Subject: [PATCH 2/2] refactor: remove config methods, tempDriver and changeDefaultDisk --- README.md | 2 +- src/Contracts/DriverContract.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0a10f96..e6992ff 100644 --- a/README.md +++ b/README.md @@ -187,7 +187,7 @@ storage.disk('gcs').put('folder/file.txt', Buffer.from('Hello world!')) ### Extending disks and drivers -> Nowadays, @secjs/storage has only LocalDriver and S3Driver support, but you can extend the drivers for Storage class if you implement DriverContract interface +> Nowadays, @secjs/storage has only LocalDriver, S3Driver and GCSDriver support, but you can extend the drivers for Storage class if you implement DriverContract interface ```ts import { DriverContract } from '@secjs/storage' diff --git a/src/Contracts/DriverContract.ts b/src/Contracts/DriverContract.ts index a417578..67ce840 100644 --- a/src/Contracts/DriverContract.ts +++ b/src/Contracts/DriverContract.ts @@ -88,7 +88,7 @@ export interface DriverContract { } interface DriverConstructor { - new (disk: string, ...args): DriverContract + new (disk: string, configs: any, ...args): DriverContract } declare let DriverContract: DriverConstructor