From fc8d1b9917887e067ca3644c1c8a301fb72d183a Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Fri, 25 Jun 2021 11:20:28 +0200 Subject: [PATCH 01/14] build: restructure project --- .editorconfig | 22 ++++++ .gitattributes | 1 + .npmrc | 4 + packages/keyv-postgres/LICENSE => LICENSE.md | 12 +-- {packages/keyv/media => media}/logo.svg | 0 package.json | 8 -- packages/keyv-mongo/.gitignore | 73 ------------------ packages/keyv-mongo/LICENSE | 21 ----- packages/keyv-mongo/package.json | 52 +++++++------ packages/keyv-mysql/.gitignore | 76 ------------------- packages/keyv-mysql/LICENSE | 21 ----- packages/keyv-mysql/package.json | 56 ++++++++------ packages/keyv-postgres/.gitignore | 75 ------------------ packages/keyv-postgres/package.json | 54 +++++++------ packages/keyv-redis/.gitignore | 76 ------------------- packages/keyv-redis/.npmignore | 2 - packages/keyv-redis/LICENSE | 21 ----- packages/keyv-redis/package.json | 56 ++++++++------ packages/keyv-sql/.gitignore | 74 ------------------ packages/keyv-sql/.npmignore | 2 - packages/keyv-sql/LICENSE | 21 ----- packages/keyv-sql/package.json | 48 +++++++----- packages/keyv-sqlite/.gitignore | 77 ------------------- packages/keyv-sqlite/LICENSE | 21 ----- packages/keyv-sqlite/package.json | 56 ++++++++------ packages/keyv-test-suite/.gitignore | 78 ------------------- packages/keyv-test-suite/.npmignore | 2 - packages/keyv-test-suite/LICENSE | 21 ----- packages/keyv-test-suite/package.json | 50 ++++++------ packages/keyv/.github/FUNDING.yml | 7 -- packages/keyv/.gitignore | 80 -------------------- packages/keyv/.npmignore | 2 - packages/keyv/LICENSE | 21 ----- packages/keyv/package.json | 38 ++++++---- 34 files changed, 262 insertions(+), 966 deletions(-) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .npmrc rename packages/keyv-postgres/LICENSE => LICENSE.md (83%) rename {packages/keyv/media => media}/logo.svg (100%) delete mode 100644 packages/keyv-mongo/.gitignore delete mode 100644 packages/keyv-mongo/LICENSE delete mode 100644 packages/keyv-mysql/.gitignore delete mode 100644 packages/keyv-mysql/LICENSE delete mode 100644 packages/keyv-postgres/.gitignore delete mode 100644 packages/keyv-redis/.gitignore delete mode 100644 packages/keyv-redis/.npmignore delete mode 100644 packages/keyv-redis/LICENSE delete mode 100644 packages/keyv-sql/.gitignore delete mode 100644 packages/keyv-sql/.npmignore delete mode 100644 packages/keyv-sql/LICENSE delete mode 100644 packages/keyv-sqlite/.gitignore delete mode 100644 packages/keyv-sqlite/LICENSE delete mode 100644 packages/keyv-test-suite/.gitignore delete mode 100644 packages/keyv-test-suite/.npmignore delete mode 100644 packages/keyv-test-suite/LICENSE delete mode 100644 packages/keyv/.github/FUNDING.yml delete mode 100644 packages/keyv/.gitignore delete mode 100644 packages/keyv/.npmignore delete mode 100644 packages/keyv/LICENSE diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..0d8138e0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# http://editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 80 +indent_brace_style = 1TBS +spaces_around_operators = true +quote_type = auto + +[package.json] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..176a458f --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..e03e941f --- /dev/null +++ b/.npmrc @@ -0,0 +1,4 @@ +unsafe-perm=true +save-prefix=~ +shrinkwrap=false +save=false diff --git a/packages/keyv-postgres/LICENSE b/LICENSE.md similarity index 83% rename from packages/keyv-postgres/LICENSE rename to LICENSE.md index f27ee9b4..39364311 100644 --- a/packages/keyv-postgres/LICENSE +++ b/LICENSE.md @@ -1,6 +1,6 @@ -MIT License +The MIT License (MIT) -Copyright (c) 2017 Luke Childs +Copyright © 2021 Kiko Beats (httpss://kikobeats.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -9,13 +9,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/packages/keyv/media/logo.svg b/media/logo.svg similarity index 100% rename from packages/keyv/media/logo.svg rename to media/logo.svg diff --git a/package.json b/package.json index ea404394..7b2544d1 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,6 @@ "name": "@keyvhq/mono", "private": "true", "devDependencies": { - "@keyvhq/keyv": "file:./packages/keyv", - "@keyvhq/keyv-mongo": "file:packages/keyv-mongo", - "@keyvhq/keyv-mysql": "file:packages/keyv-mysql", - "@keyvhq/keyv-postgres": "file:packages/keyv-postgres", - "@keyvhq/keyv-redis": "file:packages/keyv-redis", - "@keyvhq/keyv-sql": "file:packages/keyv-sql", - "@keyvhq/keyv-sqlite": "file:packages/keyv-sqlite", - "@keyvhq/keyv-test-suite": "file:packages/keyv-test-suite", "ava": "^3.15.0", "coveralls": "^3.0.0", "delay": "^4.3.0", diff --git a/packages/keyv-mongo/.gitignore b/packages/keyv-mongo/.gitignore deleted file mode 100644 index 2e3391d6..00000000 --- a/packages/keyv-mongo/.gitignore +++ /dev/null @@ -1,73 +0,0 @@ -## Node -.env - -#npm5 -package-lock.json - -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -## OS X - -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/packages/keyv-mongo/LICENSE b/packages/keyv-mongo/LICENSE deleted file mode 100644 index f27ee9b4..00000000 --- a/packages/keyv-mongo/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Luke Childs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/keyv-mongo/package.json b/packages/keyv-mongo/package.json index 5ca5ae3c..b96a20fe 100644 --- a/packages/keyv-mongo/package.json +++ b/packages/keyv-mongo/package.json @@ -1,40 +1,46 @@ { "name": "@keyvhq/keyv-mongo", - "version": "0.2.0", "description": "MongoDB storage adapter for Keyv", + "homepage": "https://github.com/keyvhq/keyv", + "version": "0.2.0", "main": "src/index.js", - "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + "author": { + "email": "lukechilds123@gmail.com", + "name": "Luke Childs", + "url": "http://lukechilds.co.uk" }, - "xo": { - "extends": "xo-lukechilds" - }, - "ava": { - "require": [ - "requirable" - ] + "bugs": { + "url": "https://github.com/keyvhq/keyv/issues" }, "keywords": [ + "adapter", + "cache", + "key", + "keyv", "mongo", "mongodb", - "keyv", "storage", - "adapter", - "key", - "value", "store", - "cache", - "ttl" + "ttl", + "value" ], - "author": "Luke Childs (http://lukechilds.co.uk)", - "license": "MIT", - "bugs": { - "url": "https://github.com/keyvhq/keyv/issues" - }, - "homepage": "https://github.com/keyvhq/keyv", "dependencies": { "mongodb": "^3.6.5", "pify": "^5.0.0" }, - "gitHead": "a4e2c1f285236a753de13eb8a42d9a98690526cc" + "files": [ + "src" + ], + "scripts": { + "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + }, + "license": "MIT", + "ava": { + "require": [ + "requirable" + ] + }, + "xo": { + "extends": "xo-lukechilds" + } } diff --git a/packages/keyv-mysql/.gitignore b/packages/keyv-mysql/.gitignore deleted file mode 100644 index ca30fc64..00000000 --- a/packages/keyv-mysql/.gitignore +++ /dev/null @@ -1,76 +0,0 @@ -## Node -.env - -#npm5 -package-lock.json - -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -## OS X - -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/packages/keyv-mysql/LICENSE b/packages/keyv-mysql/LICENSE deleted file mode 100644 index f27ee9b4..00000000 --- a/packages/keyv-mysql/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Luke Childs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/keyv-mysql/package.json b/packages/keyv-mysql/package.json index a8d40347..c81c656d 100644 --- a/packages/keyv-mysql/package.json +++ b/packages/keyv-mysql/package.json @@ -1,41 +1,47 @@ { "name": "@keyvhq/keyv-mysql", - "version": "0.2.0", "description": "MySQL/MariaDB storage adapter for Keyv", + "homepage": "https://github.com/keyvhq/keyv", + "version": "0.2.0", "main": "src/index.js", - "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + "author": { + "email": "lukechilds123@gmail.com", + "name": "Luke Childs", + "url": "http://lukechilds.co.uk" }, - "xo": { - "extends": "xo-lukechilds" - }, - "ava": { - "require": [ - "requirable" - ] + "bugs": { + "url": "https://github.com/keyvhq/keyv/issues" }, "keywords": [ - "mysql", + "adapter", + "cache", + "key", + "keyv", "mariadb", + "mysql", "sql", - "keyv", "storage", - "adapter", - "key", - "value", "store", - "cache", - "ttl" + "ttl", + "value" ], - "author": "Luke Childs (http://lukechilds.co.uk)", - "license": "MIT", - "bugs": { - "url": "https://github.com/keyvhq/keyv/issues" - }, - "homepage": "https://github.com/keyvhq/keyv", "dependencies": { - "@keyvhq/keyv-sql": "file:../keyv-sql", + "@keyvhq/keyv-sql": "~0.2.0", "mysql2": "2.2.5" }, - "gitHead": "a4e2c1f285236a753de13eb8a42d9a98690526cc" + "files": [ + "src" + ], + "scripts": { + "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + }, + "license": "MIT", + "ava": { + "require": [ + "requirable" + ] + }, + "xo": { + "extends": "xo-lukechilds" + } } diff --git a/packages/keyv-postgres/.gitignore b/packages/keyv-postgres/.gitignore deleted file mode 100644 index c501f33a..00000000 --- a/packages/keyv-postgres/.gitignore +++ /dev/null @@ -1,75 +0,0 @@ -## Node - -#npm5 -package-lock.json - -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -## OS X - -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/packages/keyv-postgres/package.json b/packages/keyv-postgres/package.json index eefa409b..6b46f8fd 100644 --- a/packages/keyv-postgres/package.json +++ b/packages/keyv-postgres/package.json @@ -1,41 +1,47 @@ { "name": "@keyvhq/keyv-postgres", - "version": "0.2.0", "description": "PostgreSQL storage adapter for Keyv", + "homepage": "https://github.com/keyvhq/keyv", + "version": "0.2.0", "main": "src/index.js", - "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava --serial" + "author": { + "email": "lukechilds123@gmail.com", + "name": "Luke Childs", + "url": "http://lukechilds.co.uk" }, - "xo": { - "extends": "xo-lukechilds" - }, - "ava": { - "require": [ - "requirable" - ] + "bugs": { + "url": "https://github.com/keyvhq/keyv/issues" }, "keywords": [ + "adapter", + "cache", + "key", + "keyv", "postgres", "postgresql", "sql", - "keyv", "storage", - "adapter", - "key", - "value", "store", - "cache", - "ttl" + "ttl", + "value" ], - "author": "Luke Childs (http://lukechilds.co.uk)", - "license": "MIT", - "bugs": { - "url": "https://github.com/keyvhq/keyv/issues" - }, - "homepage": "https://github.com/keyvhq/keyv", "dependencies": { - "@keyvhq/keyv-sql": "file:../keyv-sql", + "@keyvhq/keyv-sql": "~0.2.0", "pg": "8.6.0" }, - "gitHead": "a4e2c1f285236a753de13eb8a42d9a98690526cc" + "files": [ + "src" + ], + "scripts": { + "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava --serial" + }, + "license": "MIT", + "ava": { + "require": [ + "requirable" + ] + }, + "xo": { + "extends": "xo-lukechilds" + } } diff --git a/packages/keyv-redis/.gitignore b/packages/keyv-redis/.gitignore deleted file mode 100644 index ca30fc64..00000000 --- a/packages/keyv-redis/.gitignore +++ /dev/null @@ -1,76 +0,0 @@ -## Node -.env - -#npm5 -package-lock.json - -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -## OS X - -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/packages/keyv-redis/.npmignore b/packages/keyv-redis/.npmignore deleted file mode 100644 index 7a1eba35..00000000 --- a/packages/keyv-redis/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!src diff --git a/packages/keyv-redis/LICENSE b/packages/keyv-redis/LICENSE deleted file mode 100644 index f27ee9b4..00000000 --- a/packages/keyv-redis/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Luke Childs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/keyv-redis/package.json b/packages/keyv-redis/package.json index 770b97e8..663f0ed8 100644 --- a/packages/keyv-redis/package.json +++ b/packages/keyv-redis/package.json @@ -1,41 +1,47 @@ { "name": "@keyvhq/keyv-redis", - "version": "0.2.0", "description": "Redis storage adapter for Keyv", + "homepage": "https://github.com/keyvhq/keyv", + "version": "0.2.0", "main": "src/index.js", - "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava", - "test:docker": "docker-compose up --build --abort-on-container-exit --exit-code-from test", - "posttest:docker": "docker-compose down --rmi local" + "author": { + "email": "lukechilds123@gmail.com", + "name": "Luke Childs", + "url": "http://lukechilds.co.uk" }, - "xo": { - "extends": "xo-lukechilds" - }, - "ava": { - "require": [ - "requirable" - ] + "bugs": { + "url": "https://github.com/keyvhq/keyv/issues" }, "keywords": [ - "redis", - "keyv", - "storage", "adapter", + "cache", "key", - "value", + "keyv", + "redis", + "storage", "store", - "cache", - "ttl" + "ttl", + "value" ], - "author": "Luke Childs (http://lukechilds.co.uk)", - "license": "MIT", - "bugs": { - "url": "https://github.com/keyvhq/keyv/issues" - }, - "homepage": "https://github.com/keyvhq/keyv", "dependencies": { "ioredis": "~4.17.1", "p-event": "~4.2.0" }, - "gitHead": "a4e2c1f285236a753de13eb8a42d9a98690526cc" + "files": [ + "src" + ], + "scripts": { + "posttest:docker": "docker-compose down --rmi local", + "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava", + "test:docker": "docker-compose up --build --abort-on-container-exit --exit-code-from test" + }, + "license": "MIT", + "ava": { + "require": [ + "requirable" + ] + }, + "xo": { + "extends": "xo-lukechilds" + } } diff --git a/packages/keyv-sql/.gitignore b/packages/keyv-sql/.gitignore deleted file mode 100644 index e1ce58af..00000000 --- a/packages/keyv-sql/.gitignore +++ /dev/null @@ -1,74 +0,0 @@ -test/testdb.sqlite - -## Node - -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -## OS X - -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/packages/keyv-sql/.npmignore b/packages/keyv-sql/.npmignore deleted file mode 100644 index e23258e6..00000000 --- a/packages/keyv-sql/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!src/**/* diff --git a/packages/keyv-sql/LICENSE b/packages/keyv-sql/LICENSE deleted file mode 100644 index f27ee9b4..00000000 --- a/packages/keyv-sql/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Luke Childs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/keyv-sql/package.json b/packages/keyv-sql/package.json index 59d9d7d1..0b6d28d8 100644 --- a/packages/keyv-sql/package.json +++ b/packages/keyv-sql/package.json @@ -1,35 +1,41 @@ { "name": "@keyvhq/keyv-sql", - "version": "0.2.0", "description": "Parent class for SQL based Keyv storage adapters", + "homepage": "https://github.com/keyvhq/keyv", + "version": "0.2.0", "main": "src/index.js", - "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + "author": { + "email": "lukechilds123@gmail.com", + "name": "Luke Childs", + "url": "http://lukechilds.co.uk" }, - "xo": { - "extends": "xo-lukechilds" - }, - "ava": { - "require": [ - "requirable" - ] + "bugs": { + "url": "https://github.com/keyvhq/keyv/issues" }, "keywords": [ - "sql", - "keyv", - "storage", "adapter", + "cache", "key", - "value", + "keyv", + "sql", + "storage", "store", - "cache", - "ttl" + "ttl", + "value" + ], + "files": [ + "src" ], - "author": "Luke Childs (http://lukechilds.co.uk)", + "scripts": { + "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + }, "license": "MIT", - "bugs": { - "url": "https://github.com/keyvhq/keyv/issues" + "ava": { + "require": [ + "requirable" + ] }, - "homepage": "https://github.com/keyvhq/keyv", - "gitHead": "a4e2c1f285236a753de13eb8a42d9a98690526cc" + "xo": { + "extends": "xo-lukechilds" + } } diff --git a/packages/keyv-sqlite/.gitignore b/packages/keyv-sqlite/.gitignore deleted file mode 100644 index 67dcb0c5..00000000 --- a/packages/keyv-sqlite/.gitignore +++ /dev/null @@ -1,77 +0,0 @@ -test/testdb.sqlite - -## Node - -#npm5 -package-lock.json - -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -## OS X - -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/packages/keyv-sqlite/LICENSE b/packages/keyv-sqlite/LICENSE deleted file mode 100644 index f27ee9b4..00000000 --- a/packages/keyv-sqlite/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Luke Childs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/keyv-sqlite/package.json b/packages/keyv-sqlite/package.json index 428356c7..629e9ab8 100644 --- a/packages/keyv-sqlite/package.json +++ b/packages/keyv-sqlite/package.json @@ -1,41 +1,47 @@ { "name": "@keyvhq/keyv-sqlite", - "version": "0.2.0", "description": "SQLite storage adapter for Keyv", + "homepage": "https://github.com/keyvhq/keyv", + "version": "0.2.0", "main": "src/index.js", - "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + "author": { + "email": "lukechilds123@gmail.com", + "name": "Luke Childs", + "url": "http://lukechilds.co.uk" }, - "xo": { - "extends": "xo-lukechilds" - }, - "ava": { - "require": [ - "requirable" - ] + "bugs": { + "url": "https://github.com/keyvhq/keyv/issues" }, "keywords": [ - "sqlite", - "sql", - "keyv", - "storage", "adapter", + "cache", "key", - "value", + "keyv", + "sql", + "sqlite", + "storage", "store", - "cache", - "ttl" + "ttl", + "value" ], - "author": "Luke Childs (http://lukechilds.co.uk)", - "license": "MIT", - "bugs": { - "url": "https://github.com/keyvhq/keyv/issues" - }, - "homepage": "https://github.com/keyvhq/keyv", "dependencies": { - "@keyvhq/keyv-sql": "file:../keyv-sql", + "@keyvhq/keyv-sql": "~0.2.0", "pify": "5.0.0", "sqlite3": "^5.0.2" }, - "gitHead": "a4e2c1f285236a753de13eb8a42d9a98690526cc" + "files": [ + "src" + ], + "scripts": { + "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + }, + "license": "MIT", + "ava": { + "require": [ + "requirable" + ] + }, + "xo": { + "extends": "xo-lukechilds" + } } diff --git a/packages/keyv-test-suite/.gitignore b/packages/keyv-test-suite/.gitignore deleted file mode 100644 index d646c01a..00000000 --- a/packages/keyv-test-suite/.gitignore +++ /dev/null @@ -1,78 +0,0 @@ -test/testdb.sqlite -dist - -## Node - -#npm5 -package-lock.json - -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -## OS X - -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/packages/keyv-test-suite/.npmignore b/packages/keyv-test-suite/.npmignore deleted file mode 100644 index e23258e6..00000000 --- a/packages/keyv-test-suite/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!src/**/* diff --git a/packages/keyv-test-suite/LICENSE b/packages/keyv-test-suite/LICENSE deleted file mode 100644 index f27ee9b4..00000000 --- a/packages/keyv-test-suite/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Luke Childs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/keyv-test-suite/package.json b/packages/keyv-test-suite/package.json index 5128ca5c..021bba81 100644 --- a/packages/keyv-test-suite/package.json +++ b/packages/keyv-test-suite/package.json @@ -1,37 +1,43 @@ { "name": "@keyvhq/keyv-test-suite", - "version": "0.2.0", "description": "Test suite for Keyv API compliancy", + "homepage": "https://github.com/keyvhq/keyv", + "version": "0.2.0", "main": "src/index.js", - "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava", - "coverage": "nyc report --reporter=text-lcov | coveralls", - "release:major": "npm test && npm version major -m \"chore: release\" && git push origin master --tags && npm publish --access public", - "release:minor": "npm test && npm version minor -m \"chore: release\" && git push origin master --tags && npm publish --access public", - "release:patch": "npm test && npm version patch -m \"chore: release\" && git push origin master --tags && npm publish --access public" + "author": { + "email": "lukechilds123@gmail.com", + "name": "Luke Childs", + "url": "http://lukechilds.co.uk" }, - "xo": { - "extends": "xo-lukechilds" + "bugs": { + "url": "https://github.com/keyvhq/keyv/issues" }, "keywords": [ - "test", - "suite", - "tests", + "cache", "key", - "value", "store", - "cache", - "ttl" + "suite", + "test", + "tests", + "ttl", + "value" ], - "author": "Luke Childs (http://lukechilds.co.uk)", - "license": "MIT", - "bugs": { - "url": "https://github.com/keyvhq/keyv/issues" - }, - "homepage": "https://github.com/keyvhq/keyv", "dependencies": { "delay": "^5.0.0", "timekeeper": "^2.0.0" }, - "gitHead": "a4e2c1f285236a753de13eb8a42d9a98690526cc" + "files": [ + "src" + ], + "scripts": { + "coverage": "nyc report --reporter=text-lcov | coveralls", + "release:major": "npm test && npm version major -m \"chore: release\" && git push origin master --tags && npm publish --access public", + "release:minor": "npm test && npm version minor -m \"chore: release\" && git push origin master --tags && npm publish --access public", + "release:patch": "npm test && npm version patch -m \"chore: release\" && git push origin master --tags && npm publish --access public", + "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + }, + "license": "MIT", + "xo": { + "extends": "xo-lukechilds" + } } diff --git a/packages/keyv/.github/FUNDING.yml b/packages/keyv/.github/FUNDING.yml deleted file mode 100644 index 0c2e22a6..00000000 --- a/packages/keyv/.github/FUNDING.yml +++ /dev/null @@ -1,7 +0,0 @@ -github: - - 'lukechilds' -custom: - - 'https://blockstream.info/address/1LukeQU5jwebXbMLDVydeH4vFSobRV9rkj' - - 'https://blockstream.info/address/3Luke2qRn5iLj4NiFrvLBu2jaEj7JeMR6w' - - 'https://blockstream.info/address/bc1qlukeyq0c69v97uss68fet26kjkcsrymd2kv6d4' - - 'https://tippin.me/@lukechilds' diff --git a/packages/keyv/.gitignore b/packages/keyv/.gitignore deleted file mode 100644 index cfc9334e..00000000 --- a/packages/keyv/.gitignore +++ /dev/null @@ -1,80 +0,0 @@ -test/testdb.sqlite - -## Node - -#npm5 -package-lock.json - -#yarn -yarn.lock - -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -## OS X - -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/packages/keyv/.npmignore b/packages/keyv/.npmignore deleted file mode 100644 index 7a1eba35..00000000 --- a/packages/keyv/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!src diff --git a/packages/keyv/LICENSE b/packages/keyv/LICENSE deleted file mode 100644 index f27ee9b4..00000000 --- a/packages/keyv/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Luke Childs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/keyv/package.json b/packages/keyv/package.json index fec96033..bab3552c 100644 --- a/packages/keyv/package.json +++ b/packages/keyv/package.json @@ -1,30 +1,36 @@ { "name": "@keyvhq/keyv", - "version": "0.2.3", "description": "Simple key-value storage with support for multiple backends", + "homepage": "https://github.com/keyvhq/keyv", + "version": "0.2.3", "main": "src/index.js", - "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava test/keyv.js", - "test:full": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava --serial" + "author": { + "email": "lukechilds123@gmail.com", + "name": "Luke Childs", + "url": "http://lukechilds.co.uk" }, - "xo": { - "extends": "xo-lukechilds" + "bugs": { + "url": "https://github.com/keyvhq/keyv/issues" }, "keywords": [ + "cache", "key", - "value", "store", - "cache", - "ttl" + "ttl", + "value" ], - "author": "Luke Childs (http://lukechilds.co.uk)", - "license": "MIT", - "bugs": { - "url": "https://github.com/keyvhq/keyv/issues" - }, - "homepage": "https://github.com/keyvhq/keyv", "dependencies": { "json-buffer": "3.0.1" }, - "gitHead": "a4e2c1f285236a753de13eb8a42d9a98690526cc" + "files": [ + "src" + ], + "scripts": { + "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava test/keyv.js", + "test:full": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava --serial" + }, + "license": "MIT", + "xo": { + "extends": "xo-lukechilds" + } } From 19fddc7b678079a2e4bdbf3d199b5e8c4ea7aeac Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Fri, 25 Jun 2021 11:24:33 +0200 Subject: [PATCH 02/14] build: add dependabot --- .github/dependabot.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..2578409e --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: npm + directory: "/" + schedule: + interval: daily + - package-ecosystem: "github-actions" + directory: "/" + schedule: + # Check for updates to GitHub Actions every weekday + interval: "daily" From 222ada2aac5f39a918b8517c50c9ed8fbaaf6497 Mon Sep 17 00:00:00 2001 From: Jytesh <44925963+Jytesh@users.noreply.github.com> Date: Fri, 25 Jun 2021 19:24:57 +0530 Subject: [PATCH 03/14] Fix: Ignored some files generated by tests Signed-off-by: Jytesh <44925963+Jytesh@users.noreply.github.com> --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index cf9fbd85..9b1f6d03 100644 --- a/.gitignore +++ b/.gitignore @@ -79,3 +79,7 @@ Icon Network Trash Folder Temporary Items .apdisk + +**/*.env + +*.sqlite \ No newline at end of file From 1536a940529c00d4cacf689747d94bd225cae5e9 Mon Sep 17 00:00:00 2001 From: Jytesh <44925963+Jytesh@users.noreply.github.com> Date: Fri, 25 Jun 2021 19:29:12 +0530 Subject: [PATCH 04/14] Chore: swapped xo for standard Signed-off-by: Jytesh <44925963+Jytesh@users.noreply.github.com> --- package.json | 5 +- packages/keyv-mongo/package.json | 5 +- packages/keyv-mongo/src/index.js | 214 +++++++-------- packages/keyv-mongo/test/test.js | 57 ++-- packages/keyv-mysql/package.json | 5 +- packages/keyv-mysql/src/index.js | 40 +-- packages/keyv-mysql/test/test.js | 16 +- packages/keyv-postgres/package.json | 5 +- packages/keyv-postgres/src/index.js | 40 +-- packages/keyv-postgres/test/test.js | 12 +- packages/keyv-redis/package.json | 5 +- packages/keyv-redis/src/index.js | 126 ++++----- packages/keyv-redis/test/test.js | 38 +-- packages/keyv-sql/package.json | 5 +- packages/keyv-sql/src/index.js | 186 ++++++------- packages/keyv-sql/test/test.js | 52 ++-- packages/keyv-sqlite/package.json | 5 +- packages/keyv-sqlite/src/index.js | 52 ++-- packages/keyv-sqlite/test/test.js | 12 +- packages/keyv-test-suite/package.json | 6 +- packages/keyv-test-suite/src/api.js | 248 ++++++++--------- packages/keyv-test-suite/src/index.js | 30 +- packages/keyv-test-suite/src/iteration.js | 50 ++-- packages/keyv-test-suite/src/namespace.js | 114 ++++---- packages/keyv-test-suite/src/values.js | 108 ++++---- packages/keyv-test-suite/test/unit.js | 10 +- packages/keyv/package.json | 9 +- packages/keyv/src/index.js | 258 +++++++++--------- packages/keyv/test/keyv.js | 244 ++++++++--------- .../keyv/test/storage-adapters/mongodb.js | 12 +- packages/keyv/test/storage-adapters/mysql.js | 12 +- .../keyv/test/storage-adapters/postgresql.js | 12 +- packages/keyv/test/storage-adapters/redis.js | 12 +- packages/keyv/test/storage-adapters/sqlite.js | 12 +- 34 files changed, 995 insertions(+), 1022 deletions(-) diff --git a/package.json b/package.json index 7b2544d1..be76adb6 100644 --- a/package.json +++ b/package.json @@ -6,16 +6,15 @@ "coveralls": "^3.0.0", "delay": "^4.3.0", "dotenv": "^8.2.0", - "eslint-config-xo-lukechilds": "^1.0.0", "knex": "^0.95.4", "lerna": "^4.0.0", "nyc": "^15.1.0", "pify": "^5.0.0", "requirable": "^1.0.1", "sqlite3": "^5.0.2", + "standard": "^16.0.3", "this": "^1.0.2", - "timekeeper": "^2.0.0", - "xo": "^0.38.2" + "timekeeper": "^2.0.0" }, "author": "Jytesh & Kikobeats", "scripts": { diff --git a/packages/keyv-mongo/package.json b/packages/keyv-mongo/package.json index b96a20fe..aec2636b 100644 --- a/packages/keyv-mongo/package.json +++ b/packages/keyv-mongo/package.json @@ -32,15 +32,12 @@ "src" ], "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava" }, "license": "MIT", "ava": { "require": [ "requirable" ] - }, - "xo": { - "extends": "xo-lukechilds" } } diff --git a/packages/keyv-mongo/src/index.js b/packages/keyv-mongo/src/index.js index 14525598..5df0fb78 100644 --- a/packages/keyv-mongo/src/index.js +++ b/packages/keyv-mongo/src/index.js @@ -1,111 +1,111 @@ -'use strict'; +'use strict' -const EventEmitter = require('events'); -const mongodb = require('mongodb'); -const pify = require('pify'); +const EventEmitter = require('events') +const mongodb = require('mongodb') +const pify = require('pify') class KeyvMongo extends EventEmitter { - constructor(url, options) { - super(); - this.ttlSupport = false; - url = url || {}; - if (typeof url === 'string') { - url = { url }; - } - - if (url.uri) { - url = Object.assign({ url: url.uri }, url); - } - - this.options = Object.assign({ - url: 'mongodb://127.0.0.1:27017', - collection: 'keyv' - }, url, options); - - this.options.mongoOptions = Object.assign({ - useNewUrlParser: true, - useUnifiedTopology: true - }, this.options.mongoOptions); - - try { - this.client = new mongodb.MongoClient(this.options.url, this.options.mongoOptions); - } catch (error) { - this.emit('error', error); - } - - this.mongo = {}; - let listeningEvents = false; - // Implementation from sql by lukechilds, - this.connect = new Promise(resolve => { - this.client.connect() - .then(client => { - this.db = client.db(this.options.db); - this.store = this.db.collection(this.options.collection); - this.store.createIndex({ key: 1 }, { - unique: true, - background: true - }); - this.store.createIndex({ expiresAt: 1 }, { - expireAfterSeconds: 0, - background: true - }); - for (const method of ['updateOne', 'findOne', 'deleteOne', 'deleteMany']) { - this.store[method] = pify(this.store[method].bind(this.store)); - } - - if (!listeningEvents) { - this.client.on('error', error => this.emit('error', error)); - listeningEvents = true; - } - - resolve(this.store); - }) - .catch(error => this.emit('error', error)); - }); - } - - get(key) { - return this.connect - .then(store => store.findOne({ key: { $eq: key } }) - .then(doc => { - if (doc === null) { - return undefined; - } - - return doc.value; - }) - ); - } - - set(key, value, ttl) { - const expiresAt = (typeof ttl === 'number') ? new Date(Date.now() + ttl) : null; - return this.connect - .then(store => store.updateOne({ key: { $eq: key } }, { $set: { key, value, expiresAt } }, { upsert: true })); - } - - delete(key) { - if (typeof key !== 'string') { - return Promise.resolve(false); - } - - return this.connect - .then(store => store.deleteOne({ key: { $eq: key } }) - .then(object => object.deletedCount > 0) - ); - } - - clear() { - return this.connect - .then(store => store.deleteMany({ key: new RegExp(`^${this.namespace + ':'}`) }) - .then(() => undefined)); - } - - async * iterator() { - const iterator = await this.connect - .then(store => store.find({ key: new RegExp(`^${this.namespace ? this.namespace + ':' : '.*'}`) }).map(x => { - return [x.key, x.value]; - })); - yield * iterator; - } + constructor (url, options) { + super() + this.ttlSupport = false + url = url || {} + if (typeof url === 'string') { + url = { url } + } + + if (url.uri) { + url = Object.assign({ url: url.uri }, url) + } + + this.options = Object.assign({ + url: 'mongodb://127.0.0.1:27017', + collection: 'keyv' + }, url, options) + + this.options.mongoOptions = Object.assign({ + useNewUrlParser: true, + useUnifiedTopology: true + }, this.options.mongoOptions) + + try { + this.client = new mongodb.MongoClient(this.options.url, this.options.mongoOptions) + } catch (error) { + this.emit('error', error) + } + + this.mongo = {} + let listeningEvents = false + // Implementation from sql by lukechilds, + this.connect = new Promise(resolve => { + this.client.connect() + .then(client => { + this.db = client.db(this.options.db) + this.store = this.db.collection(this.options.collection) + this.store.createIndex({ key: 1 }, { + unique: true, + background: true + }) + this.store.createIndex({ expiresAt: 1 }, { + expireAfterSeconds: 0, + background: true + }) + for (const method of ['updateOne', 'findOne', 'deleteOne', 'deleteMany']) { + this.store[method] = pify(this.store[method].bind(this.store)) + } + + if (!listeningEvents) { + this.client.on('error', error => this.emit('error', error)) + listeningEvents = true + } + + resolve(this.store) + }) + .catch(error => this.emit('error', error)) + }) + } + + get (key) { + return this.connect + .then(store => store.findOne({ key: { $eq: key } }) + .then(doc => { + if (doc === null) { + return undefined + } + + return doc.value + }) + ) + } + + set (key, value, ttl) { + const expiresAt = (typeof ttl === 'number') ? new Date(Date.now() + ttl) : null + return this.connect + .then(store => store.updateOne({ key: { $eq: key } }, { $set: { key, value, expiresAt } }, { upsert: true })) + } + + delete (key) { + if (typeof key !== 'string') { + return Promise.resolve(false) + } + + return this.connect + .then(store => store.deleteOne({ key: { $eq: key } }) + .then(object => object.deletedCount > 0) + ) + } + + clear () { + return this.connect + .then(store => store.deleteMany({ key: new RegExp(`^${this.namespace + ':'}`) }) + .then(() => undefined)) + } + + async * iterator () { + const iterator = await this.connect + .then(store => store.find({ key: new RegExp(`^${this.namespace ? this.namespace + ':' : '.*'}`) }).map(x => { + return [x.key, x.value] + })) + yield * iterator + } } -module.exports = KeyvMongo; +module.exports = KeyvMongo diff --git a/packages/keyv-mongo/test/test.js b/packages/keyv-mongo/test/test.js index f77b4dac..e53c265d 100644 --- a/packages/keyv-mongo/test/test.js +++ b/packages/keyv-mongo/test/test.js @@ -1,33 +1,32 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('@keyvhq/keyv'); -const KeyvMongo = require('this'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('@keyvhq/keyv') +const KeyvMongo = require('this') -require('dotenv').config(); -const mongoURL = process.env.MONGO_URL || 'mongodb://127.0.0.1:27017'; -const store = () => new KeyvMongo(mongoURL); -keyvTestSuite(test, Keyv, store); +require('dotenv').config() +const mongoURL = process.env.MONGO_URL || 'mongodb://127.0.0.1:27017' +const store = () => new KeyvMongo(mongoURL) +keyvTestSuite(test, Keyv, store) test('Collection option merges into default options', t => { - const store = new KeyvMongo({ collection: 'foo' }); - t.deepEqual(store.options, { - url: 'mongodb://127.0.0.1:27017', - mongoOptions: { - useNewUrlParser: true, - useUnifiedTopology: true - }, - collection: 'foo' - }); -}); + const store = new KeyvMongo({ collection: 'foo' }) + t.deepEqual(store.options, { + url: 'mongodb://127.0.0.1:27017', + mongoOptions: { + useNewUrlParser: true, + useUnifiedTopology: true + }, + collection: 'foo' + }) +}) test('Collection option merges into default options if URL is passed', t => { - const store = new KeyvMongo(mongoURL, { collection: 'foo' }); - t.deepEqual(store.options, { - url: mongoURL, - mongoOptions: { - useNewUrlParser: true, - useUnifiedTopology: true - }, - collection: 'foo' - }); -}); - + const store = new KeyvMongo(mongoURL, { collection: 'foo' }) + t.deepEqual(store.options, { + url: mongoURL, + mongoOptions: { + useNewUrlParser: true, + useUnifiedTopology: true + }, + collection: 'foo' + }) +}) diff --git a/packages/keyv-mysql/package.json b/packages/keyv-mysql/package.json index c81c656d..dfa85320 100644 --- a/packages/keyv-mysql/package.json +++ b/packages/keyv-mysql/package.json @@ -33,15 +33,12 @@ "src" ], "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava" }, "license": "MIT", "ava": { "require": [ "requirable" ] - }, - "xo": { - "extends": "xo-lukechilds" } } diff --git a/packages/keyv-mysql/src/index.js b/packages/keyv-mysql/src/index.js index 017389d3..ba854b91 100644 --- a/packages/keyv-mysql/src/index.js +++ b/packages/keyv-mysql/src/index.js @@ -1,28 +1,28 @@ -'use strict'; +'use strict' -const KeyvSql = require('@keyvhq/keyv-sql'); -const mysql = require('mysql2/promise'); +const KeyvSql = require('@keyvhq/keyv-sql') +const mysql = require('mysql2/promise') class KeyvMysql extends KeyvSql { - constructor(options) { - if (typeof options === 'string') { - options = { uri: options }; - } + constructor (options) { + if (typeof options === 'string') { + options = { uri: options } + } - options = Object.assign({ - dialect: 'mysql', - uri: 'mysql://localhost' - }, options); + options = Object.assign({ + dialect: 'mysql', + uri: 'mysql://localhost' + }, options) - options.connect = () => Promise.resolve() - .then(() => mysql.createConnection(options.uri)) - .then(connection => { - return sql => connection.execute(sql) - .then(data => data[0]); - }); + options.connect = () => Promise.resolve() + .then(() => mysql.createConnection(options.uri)) + .then(connection => { + return sql => connection.execute(sql) + .then(data => data[0]) + }) - super(options); - } + super(options) + } } -module.exports = KeyvMysql; +module.exports = KeyvMysql diff --git a/packages/keyv-mysql/test/test.js b/packages/keyv-mysql/test/test.js index 13f318ee..329552fc 100644 --- a/packages/keyv-mysql/test/test.js +++ b/packages/keyv-mysql/test/test.js @@ -1,9 +1,9 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('@keyvhq/keyv'); -const KeyvMysql = require('this'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('@keyvhq/keyv') +const KeyvMysql = require('this') -require('dotenv').config(); -const dbUrl = process.env.MYSQL_URL || 'mysql://root:root@localhost/keyv_test'; -const store = () => new KeyvMysql(dbUrl); -keyvTestSuite(test, Keyv, store); +require('dotenv').config() +const dbUrl = process.env.MYSQL_URL || 'mysql://root:root@localhost/keyv_test' +const store = () => new KeyvMysql(dbUrl) +keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv-postgres/package.json b/packages/keyv-postgres/package.json index 6b46f8fd..f1366aad 100644 --- a/packages/keyv-postgres/package.json +++ b/packages/keyv-postgres/package.json @@ -33,15 +33,12 @@ "src" ], "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava --serial" + "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava --serial" }, "license": "MIT", "ava": { "require": [ "requirable" ] - }, - "xo": { - "extends": "xo-lukechilds" } } diff --git a/packages/keyv-postgres/src/index.js b/packages/keyv-postgres/src/index.js index 8f590fa2..ce4952c3 100644 --- a/packages/keyv-postgres/src/index.js +++ b/packages/keyv-postgres/src/index.js @@ -1,27 +1,27 @@ -'use strict'; +'use strict' -const KeyvSql = require('@keyvhq/keyv-sql'); -const Pool = require('pg').Pool; +const KeyvSql = require('@keyvhq/keyv-sql') +const Pool = require('pg').Pool class KeyvPostgres extends KeyvSql { - constructor(options) { - options = Object.assign({ - dialect: 'postgres', - uri: 'postgresql://localhost:5432' - }, options); + constructor (options) { + options = Object.assign({ + dialect: 'postgres', + uri: 'postgresql://localhost:5432' + }, options) - options.connect = () => Promise.resolve() - .then(() => { - const pool = new Pool({ - connectionString: options.uri, - ssl: options.ssl - }); - return sql => pool.query(sql) - .then(data => data.rows); - }); + options.connect = () => Promise.resolve() + .then(() => { + const pool = new Pool({ + connectionString: options.uri, + ssl: options.ssl + }) + return sql => pool.query(sql) + .then(data => data.rows) + }) - super(options); - } + super(options) + } } -module.exports = KeyvPostgres; +module.exports = KeyvPostgres diff --git a/packages/keyv-postgres/test/test.js b/packages/keyv-postgres/test/test.js index fe3001c8..3e959447 100644 --- a/packages/keyv-postgres/test/test.js +++ b/packages/keyv-postgres/test/test.js @@ -1,7 +1,7 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('@keyvhq/keyv'); -const KeyvPostgres = require('this'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('@keyvhq/keyv') +const KeyvPostgres = require('this') -const store = () => new KeyvPostgres({ uri: 'postgresql://postgres:postgres@localhost:5432/keyv_test' }); -keyvTestSuite(test, Keyv, store); +const store = () => new KeyvPostgres({ uri: 'postgresql://postgres:postgres@localhost:5432/keyv_test' }) +keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv-redis/package.json b/packages/keyv-redis/package.json index 663f0ed8..2e244d74 100644 --- a/packages/keyv-redis/package.json +++ b/packages/keyv-redis/package.json @@ -32,7 +32,7 @@ ], "scripts": { "posttest:docker": "docker-compose down --rmi local", - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava", + "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava", "test:docker": "docker-compose up --build --abort-on-container-exit --exit-code-from test" }, "license": "MIT", @@ -40,8 +40,5 @@ "require": [ "requirable" ] - }, - "xo": { - "extends": "xo-lukechilds" } } diff --git a/packages/keyv-redis/src/index.js b/packages/keyv-redis/src/index.js index 3de5c143..0e09c8f1 100644 --- a/packages/keyv-redis/src/index.js +++ b/packages/keyv-redis/src/index.js @@ -1,79 +1,79 @@ -'use strict'; +'use strict' -const EventEmitter = require('events'); -const pEvent = require('p-event'); -const Redis = require('ioredis'); +const EventEmitter = require('events') +const pEvent = require('p-event') +const Redis = require('ioredis') class KeyvRedis extends EventEmitter { - constructor(uri, options) { - super(); + constructor (uri, options) { + super() - if (uri instanceof Redis) { - this.redis = uri; - } else { - options = Object.assign( - {}, - typeof uri === 'string' ? { uri } : uri, - options - ); - this.redis = new Redis(options.uri, options); - } + if (uri instanceof Redis) { + this.redis = uri + } else { + options = Object.assign( + {}, + typeof uri === 'string' ? { uri } : uri, + options + ) + this.redis = new Redis(options.uri, options) + } - this.redis.on('error', error => this.emit('error', error)); - } + this.redis.on('error', error => this.emit('error', error)) + } - async get(key) { - const value = await this.redis.get(key); - return value === null ? undefined : value; - } + async get (key) { + const value = await this.redis.get(key) + return value === null ? undefined : value + } - async set(key, value, ttl) { - if (typeof value === 'undefined') { - return undefined; - } + async set (key, value, ttl) { + if (typeof value === 'undefined') { + return undefined + } - return typeof ttl === 'number' ? - this.redis.set(key, value, 'PX', ttl) : - this.redis.set(key, value); - } + return typeof ttl === 'number' + ? this.redis.set(key, value, 'PX', ttl) + : this.redis.set(key, value) + } - async delete(key) { - const result = await this.redis.unlink(key); - return result > 0; - } + async delete (key) { + const result = await this.redis.unlink(key) + return result > 0 + } - async clear() { - const stream = this.redis.scanStream({ match: `${this.namespace}:*` }); + async clear () { + const stream = this.redis.scanStream({ match: `${this.namespace}:*` }) - const keys = []; - stream.on('data', matchedKeys => keys.push(...matchedKeys)); - await pEvent(stream, 'end'); - if (keys.length > 0) { - await this.redis.unlink(keys); - } - } + const keys = [] + stream.on('data', matchedKeys => keys.push(...matchedKeys)) + await pEvent(stream, 'end') + if (keys.length > 0) { + await this.redis.unlink(keys) + } + } - async * iterator() { - const scan = this.redis.scan.bind(this.redis); - const get = this.redis.mget.bind(this.redis); - async function * iterate(curs, pattern) { - const [cursor, keys] = await scan(curs, 'MATCH', pattern); - const values = await get(keys); - for (const i in keys) { - if (Object.prototype.hasOwnProperty.call(keys, i)) { - const key = keys[i]; - const value = values[i]; - yield [key, value]; - } - } + async * iterator () { + const scan = this.redis.scan.bind(this.redis) + const get = this.redis.mget.bind(this.redis) + async function * iterate (curs, pattern) { + const [cursor, keys] = await scan(curs, 'MATCH', pattern) + const values = await get(keys) + for (const i in keys) { + if (Object.prototype.hasOwnProperty.call(keys, i)) { + const key = keys[i] + const value = values[i] + yield [key, value] + } + } - if (cursor !== '0') { - yield * iterate(cursor, pattern); - } - } + if (cursor !== '0') { + yield * iterate(cursor, pattern) + } + } - yield * iterate(0, `${this.namespace ? this.namespace + ':' : ''}*`); - } + yield * iterate(0, `${this.namespace ? this.namespace + ':' : ''}*`) + } } -module.exports = KeyvRedis; +module.exports = KeyvRedis diff --git a/packages/keyv-redis/test/test.js b/packages/keyv-redis/test/test.js index ee10c8bc..19ecbd2a 100644 --- a/packages/keyv-redis/test/test.js +++ b/packages/keyv-redis/test/test.js @@ -1,24 +1,24 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('@keyvhq/keyv'); -const KeyvRedis = require('this'); -const Redis = require('ioredis'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('@keyvhq/keyv') +const KeyvRedis = require('this') +const Redis = require('ioredis') -require('dotenv').config(); -const { REDIS_HOST = 'localhost' } = process.env; -const redisURI = `redis://${REDIS_HOST}`; +require('dotenv').config() +const { REDIS_HOST = 'localhost' } = process.env +const redisURI = `redis://${REDIS_HOST}` -const store = () => new KeyvRedis(redisURI); -keyvTestSuite(test, Keyv, store); +const store = () => new KeyvRedis(redisURI) +keyvTestSuite(test, Keyv, store) test('reuse a redis instance', async t => { - const redis = new Redis(redisURI); - redis.foo = 'bar'; - const keyv = new KeyvRedis(redis); - t.is(keyv.redis.foo, 'bar'); + const redis = new Redis(redisURI) + redis.foo = 'bar' + const keyv = new KeyvRedis(redis) + t.is(keyv.redis.foo, 'bar') - await keyv.set('foo', 'bar'); - const value = await redis.get('foo'); - t.true(value === 'bar'); - t.true(await keyv.get('foo') === value); -}); + await keyv.set('foo', 'bar') + const value = await redis.get('foo') + t.true(value === 'bar') + t.true(await keyv.get('foo') === value) +}) diff --git a/packages/keyv-sql/package.json b/packages/keyv-sql/package.json index 0b6d28d8..dda35ad4 100644 --- a/packages/keyv-sql/package.json +++ b/packages/keyv-sql/package.json @@ -27,15 +27,12 @@ "src" ], "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava" }, "license": "MIT", "ava": { "require": [ "requirable" ] - }, - "xo": { - "extends": "xo-lukechilds" } } diff --git a/packages/keyv-sql/src/index.js b/packages/keyv-sql/src/index.js index 54c0e668..0f130919 100644 --- a/packages/keyv-sql/src/index.js +++ b/packages/keyv-sql/src/index.js @@ -1,96 +1,96 @@ -'use strict'; +'use strict' -const EventEmitter = require('events'); +const EventEmitter = require('events') class KeyvSql extends EventEmitter { - constructor(options) { - super(); - this.ttlSupport = false; - - this.options = Object.assign({ - table: 'keyv', - keySize: 255, - iterationLimit: 10 - }, options); - - const createTable = this.options.dialect === 'mysql' ? `CREATE TABLE IF NOT EXISTS \`${this.options.table}\` (\`key\` VARCHAR(${this.options.keySize}) PRIMARY KEY, \`value\` TEXT)` : `CREATE TABLE IF NOT EXISTS "${this.options.table}" ("key" VARCHAR(${this.options.keySize}) PRIMARY KEY, "value" TEXT)`; - - const connected = this.options.connect() - .then(query => query(createTable).then(() => query)) - .catch(error => this.emit('error', error)); - - this.query = sqlString => connected - .then(query => query(sqlString)); - } - - get(key) { - const select = this.options.dialect === 'mysql' ? `SELECT \`${this.options.table}\`.* FROM \`${this.options.table}\` WHERE (\`${this.options.table}\`.\`key\` = '${key}')` : `SELECT "${this.options.table}".* FROM "${this.options.table}" WHERE ("${this.options.table}"."key" = '${key}')`; - return this.query(select) - .then(rows => { - const row = rows[0]; - if (row === undefined) { - return undefined; - } - - return row.value; - }); - } - - set(key, value) { - if (this.options.dialect === 'mysql') { - value = value.replace(/\\/g, '\\\\'); - } - - const upsert = this.options.dialect === 'postgres' ? - `INSERT INTO "${this.options.table}" ("key", "value") VALUES ('${key}', '${value}') ON CONFLICT ("key") DO UPDATE SET "value" = EXCLUDED."value"` : - (this.options.dialect === 'mysql' ? - `REPLACE INTO \`${this.options.table}\` (\`key\`, \`value\`) VALUES ('${key}', '${value}')` : - `REPLACE INTO "${this.options.table}" ("key", "value") VALUES ('${key}', '${value}')`); - - return this.query(upsert); - } - - delete(key) { - const select = this.options.dialect === 'mysql' ? `SELECT \`${this.options.table}\`.* FROM \`${this.options.table}\` WHERE (\`${this.options.table}\`.\`key\` = '${key}')` : `SELECT "${this.options.table}".* FROM "${this.options.table}" WHERE ("${this.options.table}"."key" = '${key}')`; - const del = this.options.dialect === 'mysql' ? `DELETE FROM \`${this.options.table}\` WHERE (\`${this.options.table}\`.\`key\` = '${key}')` : `DELETE FROM "${this.options.table}" WHERE ("${this.options.table}"."key" = '${key}')`; - return this.query(select) - .then(rows => { - const row = rows[0]; - if (row === undefined) { - return false; - } - - return this.query(del) - .then(() => true); - }); - } - - clear() { - const del = this.options.dialect === 'mysql' ? `DELETE FROM \`${this.options.table}\` WHERE (\`${this.options.table}\`.\`key\` LIKE '${this.namespace ? this.namespace + ':' : ''}%')` : `DELETE FROM "${this.options.table}" WHERE ("${this.options.table}"."key" LIKE '${this.namespace ? this.namespace + ':' : ''}%')`; - return this.query(del) - .then(() => undefined); - } - - async * iterator() { - const limit = Number.parseInt(this.options.iterationLimit, 10); - const selectChunk = this.options.dialect === 'mysql' ? `SELECT * FROM \`${this.options.table}\` WHERE (\`${this.options.table}\`.\`key\` LIKE '${this.namespace ? this.namespace + ':' : ''}%') LIMIT ${limit} OFFSET ` : `SELECT * FROM "${this.options.table}" WHERE ("${this.options.table}"."key" LIKE '${this.namespace ? this.namespace + ':' : ''}%') LIMIT ${limit} OFFSET `; - - async function * iterate(offset, query) { - const entries = await query(selectChunk + offset); - if (entries.length === 0) { - return; - } - - for (const entry of entries) { - offset += 1; - yield [entry.key, entry.value]; - } - - if (offset !== '0') { - yield * iterate(offset, query); - } - } - - yield * iterate(0, this.query); - } + constructor (options) { + super() + this.ttlSupport = false + + this.options = Object.assign({ + table: 'keyv', + keySize: 255, + iterationLimit: 10 + }, options) + + const createTable = this.options.dialect === 'mysql' ? `CREATE TABLE IF NOT EXISTS \`${this.options.table}\` (\`key\` VARCHAR(${this.options.keySize}) PRIMARY KEY, \`value\` TEXT)` : `CREATE TABLE IF NOT EXISTS "${this.options.table}" ("key" VARCHAR(${this.options.keySize}) PRIMARY KEY, "value" TEXT)` + + const connected = this.options.connect() + .then(query => query(createTable).then(() => query)) + .catch(error => this.emit('error', error)) + + this.query = sqlString => connected + .then(query => query(sqlString)) + } + + get (key) { + const select = this.options.dialect === 'mysql' ? `SELECT \`${this.options.table}\`.* FROM \`${this.options.table}\` WHERE (\`${this.options.table}\`.\`key\` = '${key}')` : `SELECT "${this.options.table}".* FROM "${this.options.table}" WHERE ("${this.options.table}"."key" = '${key}')` + return this.query(select) + .then(rows => { + const row = rows[0] + if (row === undefined) { + return undefined + } + + return row.value + }) + } + + set (key, value) { + if (this.options.dialect === 'mysql') { + value = value.replace(/\\/g, '\\\\') + } + + const upsert = this.options.dialect === 'postgres' + ? `INSERT INTO "${this.options.table}" ("key", "value") VALUES ('${key}', '${value}') ON CONFLICT ("key") DO UPDATE SET "value" = EXCLUDED."value"` + : (this.options.dialect === 'mysql' + ? `REPLACE INTO \`${this.options.table}\` (\`key\`, \`value\`) VALUES ('${key}', '${value}')` + : `REPLACE INTO "${this.options.table}" ("key", "value") VALUES ('${key}', '${value}')`) + + return this.query(upsert) + } + + delete (key) { + const select = this.options.dialect === 'mysql' ? `SELECT \`${this.options.table}\`.* FROM \`${this.options.table}\` WHERE (\`${this.options.table}\`.\`key\` = '${key}')` : `SELECT "${this.options.table}".* FROM "${this.options.table}" WHERE ("${this.options.table}"."key" = '${key}')` + const del = this.options.dialect === 'mysql' ? `DELETE FROM \`${this.options.table}\` WHERE (\`${this.options.table}\`.\`key\` = '${key}')` : `DELETE FROM "${this.options.table}" WHERE ("${this.options.table}"."key" = '${key}')` + return this.query(select) + .then(rows => { + const row = rows[0] + if (row === undefined) { + return false + } + + return this.query(del) + .then(() => true) + }) + } + + clear () { + const del = this.options.dialect === 'mysql' ? `DELETE FROM \`${this.options.table}\` WHERE (\`${this.options.table}\`.\`key\` LIKE '${this.namespace ? this.namespace + ':' : ''}%')` : `DELETE FROM "${this.options.table}" WHERE ("${this.options.table}"."key" LIKE '${this.namespace ? this.namespace + ':' : ''}%')` + return this.query(del) + .then(() => undefined) + } + + async * iterator () { + const limit = Number.parseInt(this.options.iterationLimit, 10) + const selectChunk = this.options.dialect === 'mysql' ? `SELECT * FROM \`${this.options.table}\` WHERE (\`${this.options.table}\`.\`key\` LIKE '${this.namespace ? this.namespace + ':' : ''}%') LIMIT ${limit} OFFSET ` : `SELECT * FROM "${this.options.table}" WHERE ("${this.options.table}"."key" LIKE '${this.namespace ? this.namespace + ':' : ''}%') LIMIT ${limit} OFFSET ` + + async function * iterate (offset, query) { + const entries = await query(selectChunk + offset) + if (entries.length === 0) { + return + } + + for (const entry of entries) { + offset += 1 + yield [entry.key, entry.value] + } + + if (offset !== '0') { + yield * iterate(offset, query) + } + } + + yield * iterate(0, this.query) + } } -module.exports = KeyvSql; +module.exports = KeyvSql diff --git a/packages/keyv-sql/test/test.js b/packages/keyv-sql/test/test.js index de0c9b33..f61bbcb5 100644 --- a/packages/keyv-sql/test/test.js +++ b/packages/keyv-sql/test/test.js @@ -1,33 +1,33 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('@keyvhq/keyv'); -const KeyvSql = require('this'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('@keyvhq/keyv') +const KeyvSql = require('this') -const sqlite3 = require('sqlite3'); -const pify = require('pify'); +const sqlite3 = require('sqlite3') +const pify = require('pify') class TestSqlite extends KeyvSql { - constructor(options) { - options = Object.assign({ - dialect: 'sqlite', - db: 'test/testdb.sqlite' - }, options); + constructor (options) { + options = Object.assign({ + dialect: 'sqlite', + db: 'test/testdb.sqlite' + }, options) - options.connect = () => new Promise((resolve, reject) => { - const db = new sqlite3.Database(options.db, error => { - if (error) { - reject(error); - } else { - db.configure('busyTimeout', 30000); - resolve(db); - } - }); - }) - .then(db => pify(db.all).bind(db)); + options.connect = () => new Promise((resolve, reject) => { + const db = new sqlite3.Database(options.db, error => { + if (error) { + reject(error) + } else { + db.configure('busyTimeout', 30000) + resolve(db) + } + }) + }) + .then(db => pify(db.all).bind(db)) - super(options); - } + super(options) + } } -const store = () => new TestSqlite(); -keyvTestSuite(test, Keyv, store); +const store = () => new TestSqlite() +keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv-sqlite/package.json b/packages/keyv-sqlite/package.json index 629e9ab8..8292874f 100644 --- a/packages/keyv-sqlite/package.json +++ b/packages/keyv-sqlite/package.json @@ -33,15 +33,12 @@ "src" ], "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" + "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava" }, "license": "MIT", "ava": { "require": [ "requirable" ] - }, - "xo": { - "extends": "xo-lukechilds" } } diff --git a/packages/keyv-sqlite/src/index.js b/packages/keyv-sqlite/src/index.js index b8692fef..5da1f971 100644 --- a/packages/keyv-sqlite/src/index.js +++ b/packages/keyv-sqlite/src/index.js @@ -1,34 +1,34 @@ -'use strict'; +'use strict' -const KeyvSql = require('@keyvhq/keyv-sql'); -const sqlite3 = require('sqlite3'); -const pify = require('pify'); +const KeyvSql = require('@keyvhq/keyv-sql') +const sqlite3 = require('sqlite3') +const pify = require('pify') class KeyvSqlite extends KeyvSql { - constructor(options) { - options = Object.assign({ - dialect: 'sqlite', - uri: 'sqlite://:memory:' - }, options); - options.db = options.uri.replace(/^sqlite:\/\//, ''); + constructor (options) { + options = Object.assign({ + dialect: 'sqlite', + uri: 'sqlite://:memory:' + }, options) + options.db = options.uri.replace(/^sqlite:\/\//, '') - options.connect = () => new Promise((resolve, reject) => { - const db = new sqlite3.Database(options.db, error => { - if (error) { - reject(error); - } else { - if (options.busyTimeout) { - db.configure('busyTimeout', options.busyTimeout); - } + options.connect = () => new Promise((resolve, reject) => { + const db = new sqlite3.Database(options.db, error => { + if (error) { + reject(error) + } else { + if (options.busyTimeout) { + db.configure('busyTimeout', options.busyTimeout) + } - resolve(db); - } - }); - }) - .then(db => pify(db.all).bind(db)); + resolve(db) + } + }) + }) + .then(db => pify(db.all).bind(db)) - super(options); - } + super(options) + } } -module.exports = KeyvSqlite; +module.exports = KeyvSqlite diff --git a/packages/keyv-sqlite/test/test.js b/packages/keyv-sqlite/test/test.js index 1783f4bd..ff36eb24 100644 --- a/packages/keyv-sqlite/test/test.js +++ b/packages/keyv-sqlite/test/test.js @@ -1,7 +1,7 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('@keyvhq/keyv'); -const KeyvSqlite = require('../src/index.js'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('@keyvhq/keyv') +const KeyvSqlite = require('../src/index.js') -const store = () => new KeyvSqlite({ uri: 'sqlite://test/testdb.sqlite', busyTimeout: 30000 }); -keyvTestSuite(test, Keyv, store); +const store = () => new KeyvSqlite({ uri: 'sqlite://test/testdb.sqlite', busyTimeout: 30000 }) +keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv-test-suite/package.json b/packages/keyv-test-suite/package.json index 021bba81..cc2553e8 100644 --- a/packages/keyv-test-suite/package.json +++ b/packages/keyv-test-suite/package.json @@ -34,10 +34,6 @@ "release:major": "npm test && npm version major -m \"chore: release\" && git push origin master --tags && npm publish --access public", "release:minor": "npm test && npm version minor -m \"chore: release\" && git push origin master --tags && npm publish --access public", "release:patch": "npm test && npm version patch -m \"chore: release\" && git push origin master --tags && npm publish --access public", - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava" - }, - "license": "MIT", - "xo": { - "extends": "xo-lukechilds" + "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava" } } diff --git a/packages/keyv-test-suite/src/api.js b/packages/keyv-test-suite/src/api.js index 014c823c..dcb42dfa 100644 --- a/packages/keyv-test-suite/src/api.js +++ b/packages/keyv-test-suite/src/api.js @@ -1,126 +1,126 @@ -const tk = require('timekeeper'); -const delay = require('delay'); +const tk = require('timekeeper') +const delay = require('delay') const keyvApiTests = (test, Keyv, store) => { - test.beforeEach(async () => { - const keyv = new Keyv({ store: store() }); - await keyv.clear(); - }); - - test.serial('.set(key, value) returns a Promise', t => { - const keyv = new Keyv({ store: store() }); - t.true(keyv.set('foo', 'bar') instanceof Promise); - }); - - test.serial('.set(key, value) resolves to true', async t => { - const keyv = new Keyv({ store: store() }); - t.is(await keyv.set('foo', 'bar'), true); - }); - - test.serial('.set(key, value) sets a value', async t => { - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', 'bar'); - t.is(await keyv.get('foo'), 'bar'); - }); - - test.serial('.set(key, value, ttl) sets a value that expires', async t => { - const ttl = 1000; - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', 'bar', ttl); - t.is(await keyv.get('foo'), 'bar'); - if (keyv.store.ttlSupport === true) { - await delay(ttl + 1); - } else { - tk.freeze(Date.now() + ttl + 1); - } - - t.is(await keyv.get('foo'), undefined); - tk.reset(); - }); - - test.serial('.get(key) returns a Promise', t => { - const keyv = new Keyv({ store: store() }); - t.true(keyv.get('foo') instanceof Promise); - }); - - test.serial('.get(key) resolves to value', async t => { - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', 'bar'); - t.is(await keyv.get('foo'), 'bar'); - }); - - test.serial('.get(key) with nonexistent key resolves to undefined', async t => { - const keyv = new Keyv({ store: store() }); - t.is(await keyv.get('foo'), undefined); - }); - - test.serial('.delete(key) returns a Promise', t => { - const keyv = new Keyv({ store: store() }); - t.true(keyv.delete('foo') instanceof Promise); - }); - - test.serial('.delete(key) resolves to true', async t => { - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', 'bar'); - t.is(await keyv.delete('foo'), true); - }); - - test.serial('.delete(key) with nonexistent key resolves to false', async t => { - const keyv = new Keyv({ store: store() }); - t.is(await keyv.delete(), false); - t.is(await keyv.delete('foo'), false); - }); - - test.serial('.delete(key) deletes a key', async t => { - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', 'bar'); - t.is(await keyv.delete('foo'), true); - t.is(await keyv.get('foo'), undefined); - }); - - test.serial('.clear() returns a Promise', async t => { - const keyv = new Keyv({ store: store() }); - const returnValue = keyv.clear(); - t.true(returnValue instanceof Promise); - await returnValue; - }); - - test.serial('.clear() resolves to undefined', async t => { - const keyv = new Keyv({ store: store() }); - t.is(await keyv.clear(), undefined); - await keyv.set('foo', 'bar'); - t.is(await keyv.clear(), undefined); - }); - - test.serial('.clear() deletes all key/value pairs', async t => { - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', 'bar'); - await keyv.set('fizz', 'buzz'); - await keyv.clear(); - t.is(await keyv.get('foo'), undefined); - t.is(await keyv.get('fizz'), undefined); - }); - - test.serial('.has(key) returns a Promise', t => { - const keyv = new Keyv({ store: store() }); - t.true(keyv.has('foo') instanceof Promise); - }); - - test.serial('.has(key) resolves to true', async t => { - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', 'bar'); - t.is(await keyv.has('foo'), true); - }); - - test.serial('.has(key) with nonexistent key resolves to false', async t => { - const keyv = new Keyv({ store: store() }); - t.is(await keyv.has('foo'), false); - }); - - test.after.always(async () => { - const keyv = new Keyv({ store: store() }); - await keyv.clear(); - }); -}; - -module.exports = keyvApiTests; + test.beforeEach(async () => { + const keyv = new Keyv({ store: store() }) + await keyv.clear() + }) + + test.serial('.set(key, value) returns a Promise', t => { + const keyv = new Keyv({ store: store() }) + t.true(keyv.set('foo', 'bar') instanceof Promise) + }) + + test.serial('.set(key, value) resolves to true', async t => { + const keyv = new Keyv({ store: store() }) + t.is(await keyv.set('foo', 'bar'), true) + }) + + test.serial('.set(key, value) sets a value', async t => { + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', 'bar') + t.is(await keyv.get('foo'), 'bar') + }) + + test.serial('.set(key, value, ttl) sets a value that expires', async t => { + const ttl = 1000 + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', 'bar', ttl) + t.is(await keyv.get('foo'), 'bar') + if (keyv.store.ttlSupport === true) { + await delay(ttl + 1) + } else { + tk.freeze(Date.now() + ttl + 1) + } + + t.is(await keyv.get('foo'), undefined) + tk.reset() + }) + + test.serial('.get(key) returns a Promise', t => { + const keyv = new Keyv({ store: store() }) + t.true(keyv.get('foo') instanceof Promise) + }) + + test.serial('.get(key) resolves to value', async t => { + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', 'bar') + t.is(await keyv.get('foo'), 'bar') + }) + + test.serial('.get(key) with nonexistent key resolves to undefined', async t => { + const keyv = new Keyv({ store: store() }) + t.is(await keyv.get('foo'), undefined) + }) + + test.serial('.delete(key) returns a Promise', t => { + const keyv = new Keyv({ store: store() }) + t.true(keyv.delete('foo') instanceof Promise) + }) + + test.serial('.delete(key) resolves to true', async t => { + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', 'bar') + t.is(await keyv.delete('foo'), true) + }) + + test.serial('.delete(key) with nonexistent key resolves to false', async t => { + const keyv = new Keyv({ store: store() }) + t.is(await keyv.delete(), false) + t.is(await keyv.delete('foo'), false) + }) + + test.serial('.delete(key) deletes a key', async t => { + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', 'bar') + t.is(await keyv.delete('foo'), true) + t.is(await keyv.get('foo'), undefined) + }) + + test.serial('.clear() returns a Promise', async t => { + const keyv = new Keyv({ store: store() }) + const returnValue = keyv.clear() + t.true(returnValue instanceof Promise) + await returnValue + }) + + test.serial('.clear() resolves to undefined', async t => { + const keyv = new Keyv({ store: store() }) + t.is(await keyv.clear(), undefined) + await keyv.set('foo', 'bar') + t.is(await keyv.clear(), undefined) + }) + + test.serial('.clear() deletes all key/value pairs', async t => { + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', 'bar') + await keyv.set('fizz', 'buzz') + await keyv.clear() + t.is(await keyv.get('foo'), undefined) + t.is(await keyv.get('fizz'), undefined) + }) + + test.serial('.has(key) returns a Promise', t => { + const keyv = new Keyv({ store: store() }) + t.true(keyv.has('foo') instanceof Promise) + }) + + test.serial('.has(key) resolves to true', async t => { + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', 'bar') + t.is(await keyv.has('foo'), true) + }) + + test.serial('.has(key) with nonexistent key resolves to false', async t => { + const keyv = new Keyv({ store: store() }) + t.is(await keyv.has('foo'), false) + }) + + test.after.always(async () => { + const keyv = new Keyv({ store: store() }) + await keyv.clear() + }) +} + +module.exports = keyvApiTests diff --git a/packages/keyv-test-suite/src/index.js b/packages/keyv-test-suite/src/index.js index b27f40a8..94bb72f8 100644 --- a/packages/keyv-test-suite/src/index.js +++ b/packages/keyv-test-suite/src/index.js @@ -1,20 +1,20 @@ -const keyvApiTests = require('./api.js'); -const keyvValueTests = require('./values.js'); -const keyvNamespaceTests = require('./namespace.js'); -const keyvIteratorTests = require('./iteration.js'); +const keyvApiTests = require('./api.js') +const keyvValueTests = require('./values.js') +const keyvNamespaceTests = require('./namespace.js') +const keyvIteratorTests = require('./iteration.js') const keyvTestSuite = (test, Keyv, store) => { - keyvIteratorTests(test, Keyv, store); - keyvApiTests(test, Keyv, store); - keyvValueTests(test, Keyv, store); - keyvNamespaceTests(test, Keyv, store); -}; + keyvIteratorTests(test, Keyv, store) + keyvApiTests(test, Keyv, store) + keyvValueTests(test, Keyv, store) + keyvNamespaceTests(test, Keyv, store) +} Object.assign(keyvTestSuite, { - keyvApiTests, - keyvValueTests, - keyvNamespaceTests, - keyvIteratorTests -}); + keyvApiTests, + keyvValueTests, + keyvNamespaceTests, + keyvIteratorTests +}) -module.exports = keyvTestSuite; +module.exports = keyvTestSuite diff --git a/packages/keyv-test-suite/src/iteration.js b/packages/keyv-test-suite/src/iteration.js index ba5b260b..35661d78 100644 --- a/packages/keyv-test-suite/src/iteration.js +++ b/packages/keyv-test-suite/src/iteration.js @@ -1,30 +1,30 @@ const keyvIteratorTests = (test, Keyv, store) => { - test.beforeEach(async () => { - const keyv = new Keyv({ store: store() }); - await keyv.clear(); - }); + test.beforeEach(async () => { + const keyv = new Keyv({ store: store() }) + await keyv.clear() + }) - test.serial('.iterator() returns an asyncIterator', t => { - const keyv = new Keyv({ store: store() }); - t.true(typeof keyv.iterator()[Symbol.asyncIterator] === 'function'); - }); + test.serial('.iterator() returns an asyncIterator', t => { + const keyv = new Keyv({ store: store() }) + t.true(typeof keyv.iterator()[Symbol.asyncIterator] === 'function') + }) - test.serial('iterator() iterates over all values', async t => { - const keyv = new Keyv({ store: store() }); - const map = new Map(Array.from({ length: 5 }).fill(0).map((x, i) => [String(i), String(i + 10)])); - const toResolve = []; - for (const [key, value] of map) { - toResolve.push(keyv.set(key, value)); - } + test.serial('iterator() iterates over all values', async t => { + const keyv = new Keyv({ store: store() }) + const map = new Map(Array.from({ length: 5 }).fill(0).map((x, i) => [String(i), String(i + 10)])) + const toResolve = [] + for (const [key, value] of map) { + toResolve.push(keyv.set(key, value)) + } - await Promise.all(toResolve); - t.plan(map.size); - for await (const [key, value] of keyv.iterator()) { - const doesKeyExist = map.has(key); - const isValueSame = map.get(key) === value; - t.true(doesKeyExist && isValueSame); - } - }); -}; + await Promise.all(toResolve) + t.plan(map.size) + for await (const [key, value] of keyv.iterator()) { + const doesKeyExist = map.has(key) + const isValueSame = map.get(key) === value + t.true(doesKeyExist && isValueSame) + } + }) +} -module.exports = keyvIteratorTests; +module.exports = keyvIteratorTests diff --git a/packages/keyv-test-suite/src/namespace.js b/packages/keyv-test-suite/src/namespace.js index 4e4bc5c0..016fe21e 100644 --- a/packages/keyv-test-suite/src/namespace.js +++ b/packages/keyv-test-suite/src/namespace.js @@ -1,64 +1,64 @@ const keyvNamepsaceTests = (test, Keyv, store) => { - test.beforeEach(async () => { - const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }); - const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }); - await keyv1.clear(); - await keyv2.clear(); - }); + test.beforeEach(async () => { + const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }) + const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }) + await keyv1.clear() + await keyv2.clear() + }) - test.serial('namespaced set/get don\'t collide', async t => { - const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }); - const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }); - await keyv1.set('foo', 'keyv1'); - await keyv2.set('foo', 'keyv2'); - t.is(await keyv1.get('foo'), 'keyv1'); - t.is(await keyv2.get('foo'), 'keyv2'); - }); + test.serial('namespaced set/get don\'t collide', async t => { + const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }) + const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }) + await keyv1.set('foo', 'keyv1') + await keyv2.set('foo', 'keyv2') + t.is(await keyv1.get('foo'), 'keyv1') + t.is(await keyv2.get('foo'), 'keyv2') + }) - test.serial('namespaced delete only deletes from current namespace', async t => { - const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }); - const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }); - await keyv1.set('foo', 'keyv1'); - await keyv2.set('foo', 'keyv2'); - t.is(await keyv1.delete('foo'), true); - t.is(await keyv1.get('foo'), undefined); - t.is(await keyv2.get('foo'), 'keyv2'); - }); + test.serial('namespaced delete only deletes from current namespace', async t => { + const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }) + const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }) + await keyv1.set('foo', 'keyv1') + await keyv2.set('foo', 'keyv2') + t.is(await keyv1.delete('foo'), true) + t.is(await keyv1.get('foo'), undefined) + t.is(await keyv2.get('foo'), 'keyv2') + }) - test.serial('namespaced clear only clears current namespace', async t => { - const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }); - const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }); - await keyv1.set('foo', 'keyv1'); - await keyv1.set('bar', 'keyv1'); - await keyv2.set('foo', 'keyv2'); - await keyv2.set('bar', 'keyv2'); - await keyv1.clear(); - t.is(await keyv1.get('foo'), undefined); - t.is(await keyv1.get('bar'), undefined); - t.is(await keyv2.get('foo'), 'keyv2'); - t.is(await keyv2.get('bar'), 'keyv2'); - }); + test.serial('namespaced clear only clears current namespace', async t => { + const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }) + const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }) + await keyv1.set('foo', 'keyv1') + await keyv1.set('bar', 'keyv1') + await keyv2.set('foo', 'keyv2') + await keyv2.set('bar', 'keyv2') + await keyv1.clear() + t.is(await keyv1.get('foo'), undefined) + t.is(await keyv1.get('bar'), undefined) + t.is(await keyv2.get('foo'), 'keyv2') + t.is(await keyv2.get('bar'), 'keyv2') + }) - test.serial('no namespaced clear doesn\'t clears all stores', async t => { - const keyv1 = new Keyv({ store: store(), namespace: false }); - const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }); - await keyv1.set('foo', 'keyv1'); - await keyv1.set('bar', 'keyv1'); - await keyv2.set('foo', 'keyv2'); - await keyv2.set('bar', 'keyv2'); - await keyv1.clear(); - t.is(await keyv1.get('foo'), 'keyv1'); - t.is(await keyv1.get('bar'), 'keyv1'); - t.is(await keyv2.get('foo'), 'keyv2'); - t.is(await keyv2.get('bar'), 'keyv2'); - }); + test.serial('no namespaced clear doesn\'t clears all stores', async t => { + const keyv1 = new Keyv({ store: store(), namespace: false }) + const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }) + await keyv1.set('foo', 'keyv1') + await keyv1.set('bar', 'keyv1') + await keyv2.set('foo', 'keyv2') + await keyv2.set('bar', 'keyv2') + await keyv1.clear() + t.is(await keyv1.get('foo'), 'keyv1') + t.is(await keyv1.get('bar'), 'keyv1') + t.is(await keyv2.get('foo'), 'keyv2') + t.is(await keyv2.get('bar'), 'keyv2') + }) - test.after.always(async () => { - const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }); - const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }); - await keyv1.clear(); - await keyv2.clear(); - }); -}; + test.after.always(async () => { + const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }) + const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }) + await keyv1.clear() + await keyv2.clear() + }) +} -module.exports = keyvNamepsaceTests; +module.exports = keyvNamepsaceTests diff --git a/packages/keyv-test-suite/src/values.js b/packages/keyv-test-suite/src/values.js index ffe5fead..7fcd79cf 100644 --- a/packages/keyv-test-suite/src/values.js +++ b/packages/keyv-test-suite/src/values.js @@ -1,65 +1,65 @@ const keyvValueTests = (test, Keyv, store) => { - test.beforeEach(async () => { - const keyv = new Keyv({ store: store() }); - await keyv.clear(); - }); + test.beforeEach(async () => { + const keyv = new Keyv({ store: store() }) + await keyv.clear() + }) - test.serial('value can be false', async t => { - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', false); - t.is(await keyv.get('foo'), false); - }); + test.serial('value can be false', async t => { + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', false) + t.is(await keyv.get('foo'), false) + }) - test.serial('value can be null', async t => { - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', null); - t.is(await keyv.get('foo'), null); - }); + test.serial('value can be null', async t => { + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', null) + t.is(await keyv.get('foo'), null) + }) - test.serial('value can be undefined', async t => { - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', undefined); - t.is(await keyv.get('foo'), undefined); - }); + test.serial('value can be undefined', async t => { + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', undefined) + t.is(await keyv.get('foo'), undefined) + }) - test.serial('value can be a number', async t => { - const keyv = new Keyv({ store: store() }); - await keyv.set('foo', 0); - t.is(await keyv.get('foo'), 0); - }); + test.serial('value can be a number', async t => { + const keyv = new Keyv({ store: store() }) + await keyv.set('foo', 0) + t.is(await keyv.get('foo'), 0) + }) - test.serial('value can be an object', async t => { - const keyv = new Keyv({ store: store() }); - const value = { fizz: 'buzz' }; - await keyv.set('foo', value); - t.deepEqual(await keyv.get('foo'), value); - }); + test.serial('value can be an object', async t => { + const keyv = new Keyv({ store: store() }) + const value = { fizz: 'buzz' } + await keyv.set('foo', value) + t.deepEqual(await keyv.get('foo'), value) + }) - test.serial('value can be a buffer', async t => { - const keyv = new Keyv({ store: store() }); - const buf = Buffer.from('bar'); - await keyv.set('foo', buf); - t.true(buf.equals(await keyv.get('foo'))); - }); + test.serial('value can be a buffer', async t => { + const keyv = new Keyv({ store: store() }) + const buf = Buffer.from('bar') + await keyv.set('foo', buf) + t.true(buf.equals(await keyv.get('foo'))) + }) - test.serial('value can be an object containing a buffer', async t => { - const keyv = new Keyv({ store: store() }); - const value = { buff: Buffer.from('buzz') }; - await keyv.set('foo', value); - t.deepEqual(await keyv.get('foo'), value); - }); + test.serial('value can be an object containing a buffer', async t => { + const keyv = new Keyv({ store: store() }) + const value = { buff: Buffer.from('buzz') } + await keyv.set('foo', value) + t.deepEqual(await keyv.get('foo'), value) + }) - test.serial('value can contain quotes', async t => { - const keyv = new Keyv({ store: store() }); - const value = '"'; - await keyv.set('foo', value); - t.deepEqual(await keyv.get('foo'), value); - }); + test.serial('value can contain quotes', async t => { + const keyv = new Keyv({ store: store() }) + const value = '"' + await keyv.set('foo', value) + t.deepEqual(await keyv.get('foo'), value) + }) - test.after.always(async () => { - const keyv = new Keyv({ store: store() }); - await keyv.clear(); - }); -}; + test.after.always(async () => { + const keyv = new Keyv({ store: store() }) + await keyv.clear() + }) +} -module.exports = keyvValueTests; +module.exports = keyvValueTests diff --git a/packages/keyv-test-suite/test/unit.js b/packages/keyv-test-suite/test/unit.js index 542c30c7..6cb0b3ef 100644 --- a/packages/keyv-test-suite/test/unit.js +++ b/packages/keyv-test-suite/test/unit.js @@ -1,6 +1,6 @@ -const test = require('ava'); -const Keyv = require('@keyvhq/keyv'); -const keyvTestSuite = require('this'); +const test = require('ava') +const Keyv = require('@keyvhq/keyv') +const keyvTestSuite = require('this') -const store = () => new Map(); -keyvTestSuite(test, Keyv, store); +const store = () => new Map() +keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/package.json b/packages/keyv/package.json index bab3552c..03d71281 100644 --- a/packages/keyv/package.json +++ b/packages/keyv/package.json @@ -26,11 +26,8 @@ "src" ], "scripts": { - "test": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava test/keyv.js", - "test:full": "xo && nyc --no-clean --temp-dir ../../.nyc_output ava --serial" + "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava test/keyv.js", + "test:full": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava --serial" }, - "license": "MIT", - "xo": { - "extends": "xo-lukechilds" - } + "license": "MIT" } diff --git a/packages/keyv/src/index.js b/packages/keyv/src/index.js index 7c68ba33..d6b8e0d3 100644 --- a/packages/keyv/src/index.js +++ b/packages/keyv/src/index.js @@ -1,133 +1,133 @@ -'use strict'; +'use strict' -const EventEmitter = require('events'); -const JSONB = require('json-buffer'); +const EventEmitter = require('events') +const JSONB = require('json-buffer') class Keyv extends EventEmitter { - constructor(options) { - super(); - this.options = Object.assign( - { - namespace: 'keyv', - serialize: JSONB.stringify, - deserialize: JSONB.parse - }, - options - ); - - this.store = this.options.store || new Map(); - - this.store.namespace = this.options.namespace; - - if (typeof this.store.on === 'function') { - this.store.on('error', error => this.emit('error', error)); - } - - const generateIterator = iterator => async function * () { - for await (const [key, raw] of (typeof iterator === 'function' ? iterator() : iterator)) { - const data = (typeof raw === 'string') ? this.options.deserialize(raw) : raw; - if (!key.includes(this.options.namespace) || typeof data !== 'object') { - continue; - } - - if (typeof data.expires === 'number' && Date.now() > data.expires) { - this.delete(key); - continue; - } - - yield [this._getKeyUnprefix(key), data.value]; - } - }; - - // Attach iterators - if (typeof this.store[Symbol.iterator] === 'function' && this.store instanceof Map) { - this.iterator = generateIterator(this.store); - } else if (typeof this.store.iterator === 'function') { - this.iterator = generateIterator(this.store.iterator.bind(this.store)); - } else { - this.iteratorSupport = false; - } - } - - _getKeyPrefix(key) { - return this.options.namespace ? `${this.options.namespace}:${key}` : key; - } - - _getKeyUnprefix(key) { - return this.options.namespace ? key.split(':').splice(1).join(':') : key; - } - - get(key, options) { - const keyPrefixed = this._getKeyPrefix(key); - const store = this.store; - return Promise.resolve() - .then(() => store.get(keyPrefixed)) - .then(data => { - return (typeof data === 'string') ? this.options.deserialize(data) : data; - }) - .then(data => { - if (data === undefined) { - return undefined; - } - - if (typeof data.expires === 'number' && Date.now() > data.expires) { - this.delete(key); - return undefined; - } - - return (options && options.raw) ? data : data.value; - }); - } - - has(key) { - const keyPrefixed = this._getKeyPrefix(key); - const store = this.store; - if (typeof store.has === 'function') { - return Promise.resolve() - .then(() => store.has(keyPrefixed)); - } - - return Promise.resolve() - .then(() => store.get(keyPrefixed)) - .then(data => data !== undefined); - } - - set(key, value, ttl) { - const keyPrefixed = this._getKeyPrefix(key); - if (typeof ttl === 'undefined') { - ttl = this.options.ttl; - } - - if (ttl === 0) { - ttl = undefined; - } - - const store = this.store; - return Promise.resolve() - .then(() => { - const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null; - value = { value, expires }; - return this.options.serialize(value); - }) - .then(value => store.set(keyPrefixed, value, ttl)) - .then(() => true); - } - - delete(key) { - const keyPrefixed = this._getKeyPrefix(key); - const store = this.store; - return Promise.resolve() - .then(() => store.delete(keyPrefixed)); - } - - clear() { - if (!this.options.namespace) { - return Promise.resolve().then(() => undefined); - } - - const store = this.store; - return Promise.resolve() - .then(() => store.clear()); - } + constructor (options) { + super() + this.options = Object.assign( + { + namespace: 'keyv', + serialize: JSONB.stringify, + deserialize: JSONB.parse + }, + options + ) + + this.store = this.options.store || new Map() + + this.store.namespace = this.options.namespace + + if (typeof this.store.on === 'function') { + this.store.on('error', error => this.emit('error', error)) + } + + const generateIterator = iterator => async function * () { + for await (const [key, raw] of (typeof iterator === 'function' ? iterator() : iterator)) { + const data = (typeof raw === 'string') ? this.options.deserialize(raw) : raw + if (!key.includes(this.options.namespace) || typeof data !== 'object') { + continue + } + + if (typeof data.expires === 'number' && Date.now() > data.expires) { + this.delete(key) + continue + } + + yield [this._getKeyUnprefix(key), data.value] + } + } + + // Attach iterators + if (typeof this.store[Symbol.iterator] === 'function' && this.store instanceof Map) { + this.iterator = generateIterator(this.store) + } else if (typeof this.store.iterator === 'function') { + this.iterator = generateIterator(this.store.iterator.bind(this.store)) + } else { + this.iteratorSupport = false + } + } + + _getKeyPrefix (key) { + return this.options.namespace ? `${this.options.namespace}:${key}` : key + } + + _getKeyUnprefix (key) { + return this.options.namespace ? key.split(':').splice(1).join(':') : key + } + + get (key, options) { + const keyPrefixed = this._getKeyPrefix(key) + const store = this.store + return Promise.resolve() + .then(() => store.get(keyPrefixed)) + .then(data => { + return (typeof data === 'string') ? this.options.deserialize(data) : data + }) + .then(data => { + if (data === undefined) { + return undefined + } + + if (typeof data.expires === 'number' && Date.now() > data.expires) { + this.delete(key) + return undefined + } + + return (options && options.raw) ? data : data.value + }) + } + + has (key) { + const keyPrefixed = this._getKeyPrefix(key) + const store = this.store + if (typeof store.has === 'function') { + return Promise.resolve() + .then(() => store.has(keyPrefixed)) + } + + return Promise.resolve() + .then(() => store.get(keyPrefixed)) + .then(data => data !== undefined) + } + + set (key, value, ttl) { + const keyPrefixed = this._getKeyPrefix(key) + if (typeof ttl === 'undefined') { + ttl = this.options.ttl + } + + if (ttl === 0) { + ttl = undefined + } + + const store = this.store + return Promise.resolve() + .then(() => { + const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null + value = { value, expires } + return this.options.serialize(value) + }) + .then(value => store.set(keyPrefixed, value, ttl)) + .then(() => true) + } + + delete (key) { + const keyPrefixed = this._getKeyPrefix(key) + const store = this.store + return Promise.resolve() + .then(() => store.delete(keyPrefixed)) + } + + clear () { + if (!this.options.namespace) { + return Promise.resolve().then(() => undefined) + } + + const store = this.store + return Promise.resolve() + .then(() => store.clear()) + } } -module.exports = Keyv; +module.exports = Keyv diff --git a/packages/keyv/test/keyv.js b/packages/keyv/test/keyv.js index 6c0865d9..75d85cce 100644 --- a/packages/keyv/test/keyv.js +++ b/packages/keyv/test/keyv.js @@ -1,149 +1,149 @@ -const test = require('ava'); -const tk = require('timekeeper'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('this'); +const test = require('ava') +const tk = require('timekeeper') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('this') test.serial('Keyv is a class', t => { - t.is(typeof Keyv, 'function'); - t.throws(() => Keyv()); // eslint-disable-line new-cap - t.notThrows(() => new Keyv()); -}); + t.is(typeof Keyv, 'function') + t.throws(() => Keyv()) // eslint-disable-line new-cap + t.notThrows(() => new Keyv()) +}) test.serial('Keyv accepts storage adapters', async t => { - const store = new Map(); - const keyv = new Keyv({ store }); - t.is(store.size, 0); - await keyv.set('foo', 'bar'); - t.is(await keyv.get('foo'), 'bar'); - t.is(store.size, 1); -}); + const store = new Map() + const keyv = new Keyv({ store }) + t.is(store.size, 0) + await keyv.set('foo', 'bar') + t.is(await keyv.get('foo'), 'bar') + t.is(store.size, 1) +}) test.serial('Keyv passes tll info to stores', async t => { - t.plan(1); - const store = new Map(); - const storeSet = store.set; - store.set = (key, value, ttl) => { - t.is(ttl, 100); - storeSet.call(store, key, value, ttl); - }; - - const keyv = new Keyv({ store }); - await keyv.set('foo', 'bar', 100); -}); + t.plan(1) + const store = new Map() + const storeSet = store.set + store.set = (key, value, ttl) => { + t.is(ttl, 100) + storeSet.call(store, key, value, ttl) + } + + const keyv = new Keyv({ store }) + await keyv.set('foo', 'bar', 100) +}) test.serial('Keyv respects default tll option', async t => { - const store = new Map(); - const keyv = new Keyv({ store, ttl: 100 }); - await keyv.set('foo', 'bar'); - t.is(await keyv.get('foo'), 'bar'); - tk.freeze(Date.now() + 150); - t.is(await keyv.get('foo'), undefined); - t.is(store.size, 0); - tk.reset(); -}); + const store = new Map() + const keyv = new Keyv({ store, ttl: 100 }) + await keyv.set('foo', 'bar') + t.is(await keyv.get('foo'), 'bar') + tk.freeze(Date.now() + 150) + t.is(await keyv.get('foo'), undefined) + t.is(store.size, 0) + tk.reset() +}) test.serial('.set(key, value, ttl) overwrites default tll option', async t => { - const startTime = Date.now(); - tk.freeze(startTime); - const store = new Map(); - const keyv = new Keyv({ store, ttl: 200 }); - await keyv.set('foo', 'bar'); - await keyv.set('fizz', 'buzz', 100); - await keyv.set('ping', 'pong', 300); - t.is(await keyv.get('foo'), 'bar'); - t.is(await keyv.get('fizz'), 'buzz'); - t.is(await keyv.get('ping'), 'pong'); - tk.freeze(startTime + 150); - t.is(await keyv.get('foo'), 'bar'); - t.is(await keyv.get('fizz'), undefined); - t.is(await keyv.get('ping'), 'pong'); - tk.freeze(startTime + 250); - t.is(await keyv.get('foo'), undefined); - t.is(await keyv.get('ping'), 'pong'); - tk.freeze(startTime + 350); - t.is(await keyv.get('ping'), undefined); - tk.reset(); -}); + const startTime = Date.now() + tk.freeze(startTime) + const store = new Map() + const keyv = new Keyv({ store, ttl: 200 }) + await keyv.set('foo', 'bar') + await keyv.set('fizz', 'buzz', 100) + await keyv.set('ping', 'pong', 300) + t.is(await keyv.get('foo'), 'bar') + t.is(await keyv.get('fizz'), 'buzz') + t.is(await keyv.get('ping'), 'pong') + tk.freeze(startTime + 150) + t.is(await keyv.get('foo'), 'bar') + t.is(await keyv.get('fizz'), undefined) + t.is(await keyv.get('ping'), 'pong') + tk.freeze(startTime + 250) + t.is(await keyv.get('foo'), undefined) + t.is(await keyv.get('ping'), 'pong') + tk.freeze(startTime + 350) + t.is(await keyv.get('ping'), undefined) + tk.reset() +}) test.serial('.set(key, value, ttl) where ttl is "0" overwrites default tll option and sets key to never expire', async t => { - const startTime = Date.now(); - tk.freeze(startTime); - const store = new Map(); - const keyv = new Keyv({ store, ttl: 200 }); - await keyv.set('foo', 'bar', 0); - t.is(await keyv.get('foo'), 'bar'); - tk.freeze(startTime + 250); - t.is(await keyv.get('foo'), 'bar'); - tk.reset(); -}); + const startTime = Date.now() + tk.freeze(startTime) + const store = new Map() + const keyv = new Keyv({ store, ttl: 200 }) + await keyv.set('foo', 'bar', 0) + t.is(await keyv.get('foo'), 'bar') + tk.freeze(startTime + 250) + t.is(await keyv.get('foo'), 'bar') + tk.reset() +}) test.serial('.get(key, {raw: true}) returns the raw object instead of the value', async t => { - const store = new Map(); - const keyv = new Keyv({ store }); - await keyv.set('foo', 'bar'); - const value = await keyv.get('foo'); - const rawObject = await keyv.get('foo', { raw: true }); - t.is(value, 'bar'); - t.is(rawObject.value, 'bar'); -}); + const store = new Map() + const keyv = new Keyv({ store }) + await keyv.set('foo', 'bar') + const value = await keyv.get('foo') + const rawObject = await keyv.get('foo', { raw: true }) + t.is(value, 'bar') + t.is(rawObject.value, 'bar') +}) test.serial('Keyv uses custom serializer when provided instead of json-buffer', async t => { - t.plan(3); - const store = new Map(); - const serialize = data => { - t.pass(); - return JSON.stringify(data); - }; - - const deserialize = data => { - t.pass(); - return JSON.parse(data); - }; - - const keyv = new Keyv({ store, serialize, deserialize }); - await keyv.set('foo', 'bar'); - t.is(await keyv.get('foo'), 'bar'); -}); + t.plan(3) + const store = new Map() + const serialize = data => { + t.pass() + return JSON.stringify(data) + } + + const deserialize = data => { + t.pass() + return JSON.parse(data) + } + + const keyv = new Keyv({ store, serialize, deserialize }) + await keyv.set('foo', 'bar') + t.is(await keyv.get('foo'), 'bar') +}) test.serial('Keyv supports async serializer/deserializer', async t => { - t.plan(3); - const store = new Map(); + t.plan(3) + const store = new Map() - const serialize = async data => { - t.pass(); - return JSON.stringify(data); - }; + const serialize = async data => { + t.pass() + return JSON.stringify(data) + } - const deserialize = async data => { - t.pass(); - return JSON.parse(data); - }; + const deserialize = async data => { + t.pass() + return JSON.parse(data) + } - const keyv = new Keyv({ store, serialize, deserialize }); - await keyv.set('foo', 'bar'); - t.is(await keyv.get('foo'), 'bar'); -}); + const keyv = new Keyv({ store, serialize, deserialize }) + await keyv.set('foo', 'bar') + t.is(await keyv.get('foo'), 'bar') +}) test.serial('Keyv uses a default namespace', async t => { - const store = new Map(); - const keyv = new Keyv({ store }); - await keyv.set('foo', 'bar'); - t.is([...store.keys()][0], 'keyv:foo'); -}); + const store = new Map() + const keyv = new Keyv({ store }) + await keyv.set('foo', 'bar') + t.is([...store.keys()][0], 'keyv:foo') +}) test.serial('Default namespace can be overridden', async t => { - const store = new Map(); - const keyv = new Keyv({ store, namespace: 'magic' }); - await keyv.set('foo', 'bar'); - t.is([...store.keys()][0], 'magic:foo'); -}); + const store = new Map() + const keyv = new Keyv({ store, namespace: 'magic' }) + await keyv.set('foo', 'bar') + t.is([...store.keys()][0], 'magic:foo') +}) test.serial('An empty namespace stores the key as-is', async t => { - const store = new Map(); - const keyv = new Keyv({ store, namespace: '' }); - await keyv.set(42, 'foo'); - t.is([...store.keys()][0], 42); -}); - -const store = () => new Map(); -keyvTestSuite(test, Keyv, store); + const store = new Map() + const keyv = new Keyv({ store, namespace: '' }) + await keyv.set(42, 'foo') + t.is([...store.keys()][0], 42) +}) + +const store = () => new Map() +keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/test/storage-adapters/mongodb.js b/packages/keyv/test/storage-adapters/mongodb.js index 519b74c3..72ebea74 100644 --- a/packages/keyv/test/storage-adapters/mongodb.js +++ b/packages/keyv/test/storage-adapters/mongodb.js @@ -1,7 +1,7 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('this'); -const KeyvMongo = require('@keyvhq/keyv-mongo'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('this') +const KeyvMongo = require('@keyvhq/keyv-mongo') -const store = () => new KeyvMongo('mongodb://127.0.0.1:27017'); -keyvTestSuite(test, Keyv, store); +const store = () => new KeyvMongo('mongodb://127.0.0.1:27017') +keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/test/storage-adapters/mysql.js b/packages/keyv/test/storage-adapters/mysql.js index b1b47177..cadded22 100644 --- a/packages/keyv/test/storage-adapters/mysql.js +++ b/packages/keyv/test/storage-adapters/mysql.js @@ -1,7 +1,7 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('this'); -const KeyvMysql = require('@keyvhq/keyv-mysql'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('this') +const KeyvMysql = require('@keyvhq/keyv-mysql') -const store = () => new KeyvMysql('mysql://mysql@localhost/keyv_test'); -keyvTestSuite(test, Keyv, store); +const store = () => new KeyvMysql('mysql://mysql@localhost/keyv_test') +keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/test/storage-adapters/postgresql.js b/packages/keyv/test/storage-adapters/postgresql.js index c2551487..5e0497e0 100644 --- a/packages/keyv/test/storage-adapters/postgresql.js +++ b/packages/keyv/test/storage-adapters/postgresql.js @@ -1,7 +1,7 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('this'); -const KeyvPostgres = require('postgres'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('this') +const KeyvPostgres = require('postgres') -const store = () => new KeyvPostgres('postgresql://postgres@localhost:5432/keyv_test'); -keyvTestSuite(test, Keyv, store); +const store = () => new KeyvPostgres('postgresql://postgres@localhost:5432/keyv_test') +keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/test/storage-adapters/redis.js b/packages/keyv/test/storage-adapters/redis.js index 6c7cdb4d..85956923 100644 --- a/packages/keyv/test/storage-adapters/redis.js +++ b/packages/keyv/test/storage-adapters/redis.js @@ -1,7 +1,7 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('this'); -const KeyvRedis = require('redis'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('this') +const KeyvRedis = require('redis') -const store = () => new KeyvRedis('redis://localhost'); -keyvTestSuite(test, Keyv, store); +const store = () => new KeyvRedis('redis://localhost') +keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/test/storage-adapters/sqlite.js b/packages/keyv/test/storage-adapters/sqlite.js index 9046a7da..ae116fbf 100644 --- a/packages/keyv/test/storage-adapters/sqlite.js +++ b/packages/keyv/test/storage-adapters/sqlite.js @@ -1,7 +1,7 @@ -const test = require('ava'); -const keyvTestSuite = require('@keyvhq/keyv-test-suite'); -const Keyv = require('this'); -const KeyvSqlite = require('sqlite'); +const test = require('ava') +const keyvTestSuite = require('@keyvhq/keyv-test-suite') +const Keyv = require('this') +const KeyvSqlite = require('sqlite') -const store = () => new KeyvSqlite('sqlite://test/testdb.sqlite'); -keyvTestSuite(test, Keyv, store); +const store = () => new KeyvSqlite('sqlite://test/testdb.sqlite') +keyvTestSuite(test, Keyv, store) From 15369ec7bd79e0e19f04f0bddc1fe3e1ae07492c Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Tue, 29 Jun 2021 18:06:05 +0200 Subject: [PATCH 05/14] ci: remove xo --- package.json | 15 +++++++++++---- packages/keyv-mongo/package.json | 2 +- packages/keyv-mysql/package.json | 2 +- packages/keyv-postgres/package.json | 4 ++-- packages/keyv-redis/package.json | 2 +- packages/keyv-sql/package.json | 2 +- packages/keyv-sqlite/package.json | 2 +- packages/keyv-test-suite/package.json | 5 +++-- packages/keyv/package.json | 4 ++-- 9 files changed, 23 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index be76adb6..1a9a895b 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,8 @@ { - "name": "@keyvhq/mono", + "name": "@keyvhq/monorepo", "private": "true", "devDependencies": { "ava": "^3.15.0", - "coveralls": "^3.0.0", "delay": "^4.3.0", "dotenv": "^8.2.0", "knex": "^0.95.4", @@ -18,8 +17,16 @@ }, "author": "Jytesh & Kikobeats", "scripts": { - "test": "lerna run test", - "coverage": "nyc report --reporter=text-lcov | npx coveralls" + "clean": "lerna clean --yes && rm -rf node_modules", + "contributors": "(lerna exec finepack --parallel && git-authors-cli && finepack && git add package.json && git commit -m 'build: contributors' --no-verify) || true", + "install": "lerna bootstrap --no-ci --force-local", + "lint": "standard-markdown README.md && standard", + "prerelease": "npm run contributors", + "pretest": "npm run lint", + "release": "lerna publish --yes --sort --conventional-commits -m \"chore(release): %s\" --create-release github", + "test": "lerna exec npm run test", + "update": "lerna exec ncu -- --upgrade && ncu -- --upgrade", + "update:check": "lerna exec ncu -- --errorLevel 2 && ncu -- --errorLevel 2" }, "repository": { "type": "git", diff --git a/packages/keyv-mongo/package.json b/packages/keyv-mongo/package.json index aec2636b..91436cb7 100644 --- a/packages/keyv-mongo/package.json +++ b/packages/keyv-mongo/package.json @@ -32,7 +32,7 @@ "src" ], "scripts": { - "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava" + "test": "nyc --temp-dir ../../.nyc_output ava" }, "license": "MIT", "ava": { diff --git a/packages/keyv-mysql/package.json b/packages/keyv-mysql/package.json index dfa85320..aed4c605 100644 --- a/packages/keyv-mysql/package.json +++ b/packages/keyv-mysql/package.json @@ -33,7 +33,7 @@ "src" ], "scripts": { - "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava" + "test": "nyc --temp-dir ../../.nyc_output ava" }, "license": "MIT", "ava": { diff --git a/packages/keyv-postgres/package.json b/packages/keyv-postgres/package.json index f1366aad..31df0112 100644 --- a/packages/keyv-postgres/package.json +++ b/packages/keyv-postgres/package.json @@ -33,12 +33,12 @@ "src" ], "scripts": { - "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava --serial" + "test": "nyc --temp-dir ../../.nyc_output ava --serial" }, "license": "MIT", "ava": { "require": [ "requirable" ] - } + }, } diff --git a/packages/keyv-redis/package.json b/packages/keyv-redis/package.json index 2e244d74..6563f411 100644 --- a/packages/keyv-redis/package.json +++ b/packages/keyv-redis/package.json @@ -32,7 +32,7 @@ ], "scripts": { "posttest:docker": "docker-compose down --rmi local", - "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava", + "test": "nyc --temp-dir ../../.nyc_output ava", "test:docker": "docker-compose up --build --abort-on-container-exit --exit-code-from test" }, "license": "MIT", diff --git a/packages/keyv-sql/package.json b/packages/keyv-sql/package.json index dda35ad4..b946bced 100644 --- a/packages/keyv-sql/package.json +++ b/packages/keyv-sql/package.json @@ -27,7 +27,7 @@ "src" ], "scripts": { - "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava" + "test": "nyc --temp-dir ../../.nyc_output ava" }, "license": "MIT", "ava": { diff --git a/packages/keyv-sqlite/package.json b/packages/keyv-sqlite/package.json index 8292874f..0057c970 100644 --- a/packages/keyv-sqlite/package.json +++ b/packages/keyv-sqlite/package.json @@ -33,7 +33,7 @@ "src" ], "scripts": { - "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava" + "test": "nyc --temp-dir ../../.nyc_output ava" }, "license": "MIT", "ava": { diff --git a/packages/keyv-test-suite/package.json b/packages/keyv-test-suite/package.json index cc2553e8..6e94c9f5 100644 --- a/packages/keyv-test-suite/package.json +++ b/packages/keyv-test-suite/package.json @@ -34,6 +34,7 @@ "release:major": "npm test && npm version major -m \"chore: release\" && git push origin master --tags && npm publish --access public", "release:minor": "npm test && npm version minor -m \"chore: release\" && git push origin master --tags && npm publish --access public", "release:patch": "npm test && npm version patch -m \"chore: release\" && git push origin master --tags && npm publish --access public", - "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava" - } + "test": "nyc --temp-dir ../../.nyc_output ava" + }, + "license": "MIT" } diff --git a/packages/keyv/package.json b/packages/keyv/package.json index 03d71281..5c8f5bce 100644 --- a/packages/keyv/package.json +++ b/packages/keyv/package.json @@ -26,8 +26,8 @@ "src" ], "scripts": { - "test": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava test/keyv.js", - "test:full": "standard && nyc --no-clean --temp-dir ../../.nyc_output ava --serial" + "test": "nyc --temp-dir ../../.nyc_output ava test/keyv.js", + "test:full": "nyc --temp-dir ../../.nyc_output ava --serial" }, "license": "MIT" } From 19cb328133c15574be083bd2f6e30c7dcb57a174 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Tue, 29 Jun 2021 18:13:18 +0200 Subject: [PATCH 06/14] build: setup missing metadata --- package.json | 80 +++++++++++++++++++-------- packages/keyv-mongo/package.json | 11 ++-- packages/keyv-mysql/package.json | 11 ++-- packages/keyv-postgres/package.json | 13 +++-- packages/keyv-redis/package.json | 11 ++-- packages/keyv-sql/package.json | 11 ++-- packages/keyv-sqlite/package.json | 11 ++-- packages/keyv-test-suite/package.json | 11 ++-- packages/keyv/package.json | 11 ++-- 9 files changed, 113 insertions(+), 57 deletions(-) diff --git a/package.json b/package.json index 1a9a895b..5e8f5512 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,54 @@ { "name": "@keyvhq/monorepo", - "private": "true", + "description": "", + "homepage": "https://github.com/keyvhq/keyv#readme", + "version": "Simple key-value storage with support for multiple backends", + "author": { + "email": "lukechilds123@gmail.com", + "name": "Luke Childs", + "url": "http://lukechilds.co.uk" + }, + "contributors": [ + "Casey Webb ", + "Dan Dascalescu ", + "Dušan Simić ", + "Jared Wray ", + "Jitendra Adhikari ", + "Jérôme Desboeufs ", + "Kent C. Dodds ", + "Kiko Beats ", + "Mateu Aguiló Bosch ", + "MySidesTheyAreGone ", + "Paul Morgan III ", + "Romuald Quantin ", + "Roney Rao ", + "chocolateboy " + ], + "repository": { + "type": "git", + "url": "git+https://github.com/keyvhq/keyv.git" + }, + "bugs": { + "url": "https://github.com/keyvhq/keyv/issues" + }, + "keywords": [ + "adapter", + "cache", + "key", + "keyv", + "mongo", + "mongodb", + "mysql", + "pgsql", + "redis", + "sql", + "sqlite", + "sqlite3", + "storage", + "store", + "ttl", + "value" + ], "devDependencies": { "ava": "^3.15.0", "delay": "^4.3.0", @@ -15,7 +63,12 @@ "this": "^1.0.2", "timekeeper": "^2.0.0" }, - "author": "Jytesh & Kikobeats", + "engines": { + "node": ">= 12" + }, + "files": [ + "packages/**" + ], "scripts": { "clean": "lerna clean --yes && rm -rf node_modules", "contributors": "(lerna exec finepack --parallel && git-authors-cli && finepack && git add package.json && git commit -m 'build: contributors' --no-verify) || true", @@ -28,28 +81,7 @@ "update": "lerna exec ncu -- --upgrade && ncu -- --upgrade", "update:check": "lerna exec ncu -- --errorLevel 2 && ncu -- --errorLevel 2" }, - "repository": { - "type": "git", - "url": "git+https://github.com/keyvhq/keyv.git" - }, - "keywords": [ - "keyv", - "cache", - "storage", - "adapter", - "key", - "value", - "store", - "ttl", - "mongo", - "mongodb", - "redis", - "sql", - "sqlite", - "sqlite3", - "mysql", - "pgsql" - ], + "private": "true", "workspaces": [ "packages/*" ] diff --git a/packages/keyv-mongo/package.json b/packages/keyv-mongo/package.json index 91436cb7..b4721134 100644 --- a/packages/keyv-mongo/package.json +++ b/packages/keyv-mongo/package.json @@ -4,10 +4,10 @@ "homepage": "https://github.com/keyvhq/keyv", "version": "0.2.0", "main": "src/index.js", - "author": { - "email": "lukechilds123@gmail.com", - "name": "Luke Childs", - "url": "http://lukechilds.co.uk" + "repository": { + "directory": "packages/keyv-mongo", + "type": "git", + "url": "git+https://github.com/keyvhq/keyv.git" }, "bugs": { "url": "https://github.com/keyvhq/keyv/issues" @@ -28,6 +28,9 @@ "mongodb": "^3.6.5", "pify": "^5.0.0" }, + "engines": { + "node": ">= 12" + }, "files": [ "src" ], diff --git a/packages/keyv-mysql/package.json b/packages/keyv-mysql/package.json index aed4c605..bbfa4aa0 100644 --- a/packages/keyv-mysql/package.json +++ b/packages/keyv-mysql/package.json @@ -4,10 +4,10 @@ "homepage": "https://github.com/keyvhq/keyv", "version": "0.2.0", "main": "src/index.js", - "author": { - "email": "lukechilds123@gmail.com", - "name": "Luke Childs", - "url": "http://lukechilds.co.uk" + "repository": { + "directory": "packages/keyv-mysql", + "type": "git", + "url": "git+https://github.com/keyvhq/keyv.git" }, "bugs": { "url": "https://github.com/keyvhq/keyv/issues" @@ -29,6 +29,9 @@ "@keyvhq/keyv-sql": "~0.2.0", "mysql2": "2.2.5" }, + "engines": { + "node": ">= 12" + }, "files": [ "src" ], diff --git a/packages/keyv-postgres/package.json b/packages/keyv-postgres/package.json index 31df0112..3519d254 100644 --- a/packages/keyv-postgres/package.json +++ b/packages/keyv-postgres/package.json @@ -4,10 +4,10 @@ "homepage": "https://github.com/keyvhq/keyv", "version": "0.2.0", "main": "src/index.js", - "author": { - "email": "lukechilds123@gmail.com", - "name": "Luke Childs", - "url": "http://lukechilds.co.uk" + "repository": { + "directory": "packages/postgres", + "type": "git", + "url": "git+https://github.com/keyvhq/keyv.git" }, "bugs": { "url": "https://github.com/keyvhq/keyv/issues" @@ -29,6 +29,9 @@ "@keyvhq/keyv-sql": "~0.2.0", "pg": "8.6.0" }, + "engines": { + "node": ">= 12" + }, "files": [ "src" ], @@ -40,5 +43,5 @@ "require": [ "requirable" ] - }, + } } diff --git a/packages/keyv-redis/package.json b/packages/keyv-redis/package.json index 6563f411..27d90ca6 100644 --- a/packages/keyv-redis/package.json +++ b/packages/keyv-redis/package.json @@ -4,10 +4,10 @@ "homepage": "https://github.com/keyvhq/keyv", "version": "0.2.0", "main": "src/index.js", - "author": { - "email": "lukechilds123@gmail.com", - "name": "Luke Childs", - "url": "http://lukechilds.co.uk" + "repository": { + "directory": "packages/keyv-redis", + "type": "git", + "url": "git+https://github.com/keyvhq/keyv.git" }, "bugs": { "url": "https://github.com/keyvhq/keyv/issues" @@ -27,6 +27,9 @@ "ioredis": "~4.17.1", "p-event": "~4.2.0" }, + "engines": { + "node": ">= 12" + }, "files": [ "src" ], diff --git a/packages/keyv-sql/package.json b/packages/keyv-sql/package.json index b946bced..2798d2eb 100644 --- a/packages/keyv-sql/package.json +++ b/packages/keyv-sql/package.json @@ -4,10 +4,10 @@ "homepage": "https://github.com/keyvhq/keyv", "version": "0.2.0", "main": "src/index.js", - "author": { - "email": "lukechilds123@gmail.com", - "name": "Luke Childs", - "url": "http://lukechilds.co.uk" + "repository": { + "directory": "packages/keyv-sql", + "type": "git", + "url": "git+https://github.com/keyvhq/keyv.git" }, "bugs": { "url": "https://github.com/keyvhq/keyv/issues" @@ -23,6 +23,9 @@ "ttl", "value" ], + "engines": { + "node": ">= 12" + }, "files": [ "src" ], diff --git a/packages/keyv-sqlite/package.json b/packages/keyv-sqlite/package.json index 0057c970..05bf65b0 100644 --- a/packages/keyv-sqlite/package.json +++ b/packages/keyv-sqlite/package.json @@ -4,10 +4,10 @@ "homepage": "https://github.com/keyvhq/keyv", "version": "0.2.0", "main": "src/index.js", - "author": { - "email": "lukechilds123@gmail.com", - "name": "Luke Childs", - "url": "http://lukechilds.co.uk" + "repository": { + "directory": "packages/keyv-sqlite", + "type": "git", + "url": "git+https://github.com/keyvhq/keyv.git" }, "bugs": { "url": "https://github.com/keyvhq/keyv/issues" @@ -29,6 +29,9 @@ "pify": "5.0.0", "sqlite3": "^5.0.2" }, + "engines": { + "node": ">= 12" + }, "files": [ "src" ], diff --git a/packages/keyv-test-suite/package.json b/packages/keyv-test-suite/package.json index 6e94c9f5..871e510b 100644 --- a/packages/keyv-test-suite/package.json +++ b/packages/keyv-test-suite/package.json @@ -4,10 +4,10 @@ "homepage": "https://github.com/keyvhq/keyv", "version": "0.2.0", "main": "src/index.js", - "author": { - "email": "lukechilds123@gmail.com", - "name": "Luke Childs", - "url": "http://lukechilds.co.uk" + "repository": { + "directory": "packages/keyv-test-suite", + "type": "git", + "url": "git+https://github.com/keyvhq/keyv.git" }, "bugs": { "url": "https://github.com/keyvhq/keyv/issues" @@ -26,6 +26,9 @@ "delay": "^5.0.0", "timekeeper": "^2.0.0" }, + "engines": { + "node": ">= 12" + }, "files": [ "src" ], diff --git a/packages/keyv/package.json b/packages/keyv/package.json index 5c8f5bce..7b179dbd 100644 --- a/packages/keyv/package.json +++ b/packages/keyv/package.json @@ -4,10 +4,10 @@ "homepage": "https://github.com/keyvhq/keyv", "version": "0.2.3", "main": "src/index.js", - "author": { - "email": "lukechilds123@gmail.com", - "name": "Luke Childs", - "url": "http://lukechilds.co.uk" + "repository": { + "directory": "packages/keyv", + "type": "git", + "url": "git+https://github.com/keyvhq/keyv.git" }, "bugs": { "url": "https://github.com/keyvhq/keyv/issues" @@ -22,6 +22,9 @@ "dependencies": { "json-buffer": "3.0.1" }, + "engines": { + "node": ">= 12" + }, "files": [ "src" ], From 80e7da7ef990f8ae1ae2ff40f6aa6c8a53fb65a2 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Tue, 29 Jun 2021 18:14:04 +0200 Subject: [PATCH 07/14] ci: mark devDependencies as latest --- package.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 5e8f5512..d995c472 100644 --- a/package.json +++ b/package.json @@ -50,18 +50,18 @@ "value" ], "devDependencies": { - "ava": "^3.15.0", - "delay": "^4.3.0", - "dotenv": "^8.2.0", - "knex": "^0.95.4", - "lerna": "^4.0.0", - "nyc": "^15.1.0", - "pify": "^5.0.0", - "requirable": "^1.0.1", - "sqlite3": "^5.0.2", - "standard": "^16.0.3", - "this": "^1.0.2", - "timekeeper": "^2.0.0" + "ava": "latest", + "delay": "latest", + "dotenv": "latest", + "knex": "latest", + "lerna": "latest", + "nyc": "latest", + "pify": "latest", + "requirable": "latest", + "sqlite3": "latest", + "standard": "latest", + "this": "latest", + "timekeeper": "latest" }, "engines": { "node": ">= 12" From bba02f9562d0959441aa848a260b25c2bc26b179 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Tue, 29 Jun 2021 18:15:58 +0200 Subject: [PATCH 08/14] ci: prefer npm over yarn --- .github/workflows/test.yml | 6 +-- lerna.json | 11 +++--- package.json | 75 ++++++++++++++++++++++++++++++-------- 3 files changed, 68 insertions(+), 24 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 935a6bf9..a2b3f58c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -59,11 +59,11 @@ jobs: sudo systemctl restart postgresql.service pg_isready - - run: yarn install - - run: yarn test + - run: npm install --no-package-lock + - run: npm test - name: Report run: mkdir -p coverage && yarn run nyc report --reporter=text-lcov > coverage/lcov.info - name: Coverage uses: coverallsapp/github-action@master with: - github-token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/lerna.json b/lerna.json index f0bf4538..9c81435b 100644 --- a/lerna.json +++ b/lerna.json @@ -3,10 +3,11 @@ "packages/*" ], "version": "0.2.0", - "npmClient": "yarn", - "useWorkspaces": "true", - "stream": "true", - "publishConfig": { - "access": "public" + "command": { + "bootstrap": { + "npmClientArgs": [ + "--no-package-lock" + ] + } } } diff --git a/package.json b/package.json index d995c472..7c2b1685 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,70 @@ { "name": "@keyvhq/monorepo", - "description": "", + "description": "Simple key-value storage with support for multiple backends", "homepage": "https://github.com/keyvhq/keyv#readme", - "version": "Simple key-value storage with support for multiple backends", + "version": "", "author": { "email": "lukechilds123@gmail.com", "name": "Luke Childs", "url": "http://lukechilds.co.uk" }, "contributors": [ - "Casey Webb ", - "Dan Dascalescu ", - "Dušan Simić ", - "Jared Wray ", - "Jitendra Adhikari ", - "Jérôme Desboeufs ", - "Kent C. Dodds ", - "Kiko Beats ", - "Mateu Aguiló Bosch ", - "MySidesTheyAreGone ", - "Paul Morgan III ", - "Romuald Quantin ", - "Roney Rao ", - "chocolateboy " + { + "name": "Casey Webb", + "email": "notcaseywebb@gmail.com" + }, + { + "name": "Dan Dascalescu", + "email": "ddascalescu+github@gmail.com" + }, + { + "name": "Dušan Simić", + "email": "dusan.simic1810@gmail.com" + }, + { + "name": "Jared Wray", + "email": "jaredwray@gmail.com" + }, + { + "name": "Jitendra Adhikari", + "email": "jiten.adhikary@gmail.com" + }, + { + "name": "Jérôme Desboeufs", + "email": "jerome.desboeufs@gmail.com" + }, + { + "name": "Kent C. Dodds", + "email": "me+github@kentcdodds.com" + }, + { + "name": "Kiko Beats", + "email": "josefrancisco.verdu@gmail.com" + }, + { + "name": "Mateu Aguiló Bosch", + "email": "mateu@lullabot.com" + }, + { + "name": "MySidesTheyAreGone", + "email": "mysidestheyaregone@protonmail.com" + }, + { + "name": "Paul Morgan III", + "email": "pmorgan3@gmail.com" + }, + { + "name": "Romuald Quantin", + "email": "romu@soundstep.com" + }, + { + "name": "Roney Rao", + "email": "roneyrao@hotmail.com" + }, + { + "name": "chocolateboy", + "email": "chocolate@cpan.org" + } ], "repository": { "type": "git", @@ -60,6 +102,7 @@ "requirable": "latest", "sqlite3": "latest", "standard": "latest", + "standard-markdown": "latest", "this": "latest", "timekeeper": "latest" }, From 3b878acbf13e5ab5a708e9466a2d148236865e56 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Tue, 29 Jun 2021 18:28:53 +0200 Subject: [PATCH 09/14] docs: add copy --- README.md | 17 ++++++++------- package.json | 3 +-- packages/keyv-mongo/README.md | 11 +++++----- packages/keyv-mysql/README.md | 11 +++++----- packages/keyv-postgres/README.md | 11 +++++----- packages/keyv-redis/README.md | 31 +++++++++++++------------- packages/keyv-sql/README.md | 3 ++- packages/keyv-sqlite/README.md | 11 +++++----- packages/keyv-test-suite/README.md | 15 +++++++------ packages/keyv/README.md | 35 +++++++++++++++--------------- 10 files changed, 78 insertions(+), 70 deletions(-) diff --git a/README.md b/README.md index 99b51b01..b5a80833 100644 --- a/README.md +++ b/README.md @@ -156,13 +156,13 @@ Inside your module: ```js class AwesomeModule { - constructor(opts) { - this.cache = new Keyv({ - uri: typeof opts.cache === 'string' && opts.cache, - store: typeof opts.cache !== 'string' && opts.cache, - namespace: 'awesome-module' - }); - } + constructor (opts) { + this.cache = new Keyv({ + uri: typeof opts.cache === 'string' && opts.cache, + store: typeof opts.cache !== 'string' && opts.cache, + namespace: 'awesome-module' + }) + } } ``` @@ -285,4 +285,5 @@ Returns a promise which is resolved when the entries have been cleared. ## License -MIT © Luke Childs +**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.
+Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/keyvhq/keyv/contributors). diff --git a/package.json b/package.json index 7c2b1685..c67e0b84 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,6 @@ "requirable": "latest", "sqlite3": "latest", "standard": "latest", - "standard-markdown": "latest", "this": "latest", "timekeeper": "latest" }, @@ -116,7 +115,7 @@ "clean": "lerna clean --yes && rm -rf node_modules", "contributors": "(lerna exec finepack --parallel && git-authors-cli && finepack && git add package.json && git commit -m 'build: contributors' --no-verify) || true", "install": "lerna bootstrap --no-ci --force-local", - "lint": "standard-markdown README.md && standard", + "lint": "standard", "prerelease": "npm run contributors", "pretest": "npm run lint", "release": "lerna publish --yes --sort --conventional-commits -m \"chore(release): %s\" --create-release github", diff --git a/packages/keyv-mongo/README.md b/packages/keyv-mongo/README.md index 93302f00..a0367e1b 100644 --- a/packages/keyv-mongo/README.md +++ b/packages/keyv-mongo/README.md @@ -19,10 +19,10 @@ npm install --save keyv @keyv/mongo ## Usage ```js -const Keyv = require('keyv'); +const Keyv = require('keyv') -const keyv = new Keyv('mongodb://user:pass@localhost:27017/dbname'); -keyv.on('error', handleConnectionError); +const keyv = new Keyv('mongodb://user:pass@localhost:27017/dbname') +keyv.on('error', handleConnectionError) ``` You can specify the collection name, by default `'keyv'` is used. @@ -30,9 +30,10 @@ You can specify the collection name, by default `'keyv'` is used. e.g: ```js -const keyv = new Keyv('mongodb://user:pass@localhost:27017/dbname', { collection: 'cache' }); +const keyv = new Keyv('mongodb://user:pass@localhost:27017/dbname', { collection: 'cache' }) ``` ## License -MIT © Luke Childs +**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.
+Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/keyvhq/keyv/contributors). diff --git a/packages/keyv-mysql/README.md b/packages/keyv-mysql/README.md index 610e92be..9b7f8520 100644 --- a/packages/keyv-mysql/README.md +++ b/packages/keyv-mysql/README.md @@ -17,10 +17,10 @@ npm install --save keyv @keyv/mysql ## Usage ```js -const Keyv = require('keyv'); +const Keyv = require('keyv') -const keyv = new Keyv('mysql://user:pass@localhost:3306/dbname'); -keyv.on('error', handleConnectionError); +const keyv = new Keyv('mysql://user:pass@localhost:3306/dbname') +keyv.on('error', handleConnectionError) ``` You can specify a custom table with the `table` option and the primary key size with `keySize`. @@ -31,11 +31,12 @@ e.g: const keyv = new Keyv('mysql://user:pass@localhost:3306/dbname', { table: 'cache', keySize: 255 -}); +}) ``` **Note:** Some MySQL/MariaDB installations won't allow a key size longer than 767 bytes. If you get an error on table creation try reducing `keySize` to 191 or lower. [#5](https://github.com/lukechilds/keyv-sql/issues/5) ## License -MIT © Luke Childs +**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.
+Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/keyvhq/keyv/contributors). diff --git a/packages/keyv-postgres/README.md b/packages/keyv-postgres/README.md index 94878d0d..42c50bc1 100644 --- a/packages/keyv-postgres/README.md +++ b/packages/keyv-postgres/README.md @@ -19,10 +19,10 @@ npm install --save keyv @keyv/postgres ## Usage ```js -const Keyv = require('keyv'); +const Keyv = require('keyv') -const keyv = new Keyv('postgresql://user:pass@localhost:5432/dbname'); -keyv.on('error', handleConnectionError); +const keyv = new Keyv('postgresql://user:pass@localhost:5432/dbname') +keyv.on('error', handleConnectionError) ``` You can specify the `table` option. @@ -30,9 +30,10 @@ You can specify the `table` option. e.g: ```js -const keyv = new Keyv('postgresql://user:pass@localhost:5432/dbname', { table: 'cache' }); +const keyv = new Keyv('postgresql://user:pass@localhost:5432/dbname', { table: 'cache' }) ``` ## License -MIT © Luke Childs +**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.
+Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/keyvhq/keyv/contributors). diff --git a/packages/keyv-redis/README.md b/packages/keyv-redis/README.md index 24c91f38..a20faf44 100644 --- a/packages/keyv-redis/README.md +++ b/packages/keyv-redis/README.md @@ -19,10 +19,10 @@ npm install --save keyv @keyv/redis ## Usage ```js -const Keyv = require('keyv'); +const Keyv = require('keyv') -const keyv = new Keyv('redis://user:pass@localhost:6379'); -keyv.on('error', handleConnectionError); +const keyv = new Keyv('redis://user:pass@localhost:6379') +keyv.on('error', handleConnectionError) ``` Any valid [`Redis`](https://github.com/luin/ioredis#connect-to-redis) options will be passed directly through. @@ -30,31 +30,32 @@ Any valid [`Redis`](https://github.com/luin/ioredis#connect-to-redis) options wi e.g: ```js -const keyv = new Keyv('redis://user:pass@localhost:6379', { disable_resubscribing: true }); +const keyv = new Keyv('redis://user:pass@localhost:6379', { disable_resubscribing: true }) ``` Or you can manually create a storage adapter instance and pass it to Keyv: ```js -const KeyvRedis = require('@keyv/redis'); -const Keyv = require('keyv'); +const KeyvRedis = require('@keyv/redis') +const Keyv = require('keyv') -const keyvRedis = new KeyvRedis('redis://user:pass@localhost:6379'); -const keyv = new Keyv({ store: keyvRedis }); +const keyvRedis = new KeyvRedis('redis://user:pass@localhost:6379') +const keyv = new Keyv({ store: keyvRedis }) ``` Or reuse a previous Redis instance: ```js -const KeyvRedis = require('@keyv/redis'); -const Redis = require('ioredis'); -const Keyv = require('keyv'); +const KeyvRedis = require('@keyv/redis') +const Redis = require('ioredis') +const Keyv = require('keyv') -const redis = new Redis('redis://user:pass@localhost:6379'); -const keyvRedis = new KeyvRedis(redis); -const keyv = new Keyv({ store: keyvRedis }); +const redis = new Redis('redis://user:pass@localhost:6379') +const keyvRedis = new KeyvRedis(redis) +const keyv = new Keyv({ store: keyvRedis }) ``` ## License -MIT © Luke Childs +**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.
+Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/keyvhq/keyv/contributors). diff --git a/packages/keyv-sql/README.md b/packages/keyv-sql/README.md index f01dc25b..97a59c8c 100644 --- a/packages/keyv-sql/README.md +++ b/packages/keyv-sql/README.md @@ -14,4 +14,5 @@ Parent class containing the common logic for SQL based Keyv storage adapters: ## License -MIT © Luke Childs +**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.
+Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/keyvhq/keyv/contributors). diff --git a/packages/keyv-sqlite/README.md b/packages/keyv-sqlite/README.md index 16277a83..623159ed 100644 --- a/packages/keyv-sqlite/README.md +++ b/packages/keyv-sqlite/README.md @@ -17,10 +17,10 @@ npm install --save keyv @keyv/sqlite ## Usage ```js -const Keyv = require('keyv'); +const Keyv = require('keyv') -const keyv = new Keyv('sqlite://path/to/database.sqlite'); -keyv.on('error', handleConnectionError); +const keyv = new Keyv('sqlite://path/to/database.sqlite') +keyv.on('error', handleConnectionError) ``` You can specify the `table` and [`busyTimeout`](https://sqlite.org/c3ref/busy_timeout.html) option. @@ -31,9 +31,10 @@ e.g: const keyv = new Keyv('sqlite://path/to/database.sqlite', { table: 'cache', busyTimeout: 10000 -}); +}) ``` ## License -MIT © Luke Childs +**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.
+Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/keyvhq/keyv/contributors). diff --git a/packages/keyv-test-suite/README.md b/packages/keyv-test-suite/README.md index a6fc22eb..5fc8b1d6 100644 --- a/packages/keyv-test-suite/README.md +++ b/packages/keyv-test-suite/README.md @@ -25,13 +25,13 @@ Then update `keyv` and `@keyv/test-suite` versions to `*` in `package.json` to e `test.js` ```js -import test from 'ava'; -import keyvTestSuite from '@keyv/test-suite'; -import Keyv from 'keyv'; -import KeyvStore from './'; +import test from 'ava' +import keyvTestSuite from '@keyv/test-suite' +import Keyv from 'keyv' +import KeyvStore from './' -const store = () => new KeyvStore(); -keyvTestSuite(test, Keyv, store); +const store = () => new KeyvStore() +keyvTestSuite(test, Keyv, store) ``` Where `KeyvStore` is your storage adapter. @@ -64,4 +64,5 @@ Take a look at [keyv-redis](https://github.com/lukechilds/keyv-redis) for an exa ## License -MIT © Luke Childs +**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.
+Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/keyvhq/keyv/contributors). diff --git a/packages/keyv/README.md b/packages/keyv/README.md index 1829d096..a5cca4fd 100644 --- a/packages/keyv/README.md +++ b/packages/keyv/README.md @@ -93,7 +93,7 @@ Keyv uses [`json-buffer`](https://github.com/dominictarr/json-buffer) for data s You can optionally provide your own serialization functions to support extra data types or to serialize to something other than JSON. ```js -const keyv = new Keyv({ serialize: JSON.stringify, deserialize: JSON.parse }); +const keyv = new Keyv({ serialize: JSON.stringify, deserialize: JSON.parse }) ``` **Warning:** Using custom serializers means you lose any guarantee of data consistency. You should do extensive testing with your serialisation functions and chosen storage engine. @@ -115,26 +115,26 @@ MySQL | [@keyv/mysql](https://github.com/lukechilds/keyv-mysql) | No | [![Build You can also use third-party storage adapters or build your own. Keyv will wrap these storage adapters in TTL functionality and handle complex types internally. ```js -const Keyv = require('keyv'); -const myAdapter = require('./my-storage-adapter'); +const Keyv = require('keyv') +const myAdapter = require('./my-storage-adapter') -const keyv = new Keyv({ store: myAdapter }); +const keyv = new Keyv({ store: myAdapter }) ``` Any store that follows the [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) api will work. ```js -new Keyv({ store: new Map() }); +new Keyv({ store: new Map() }) ``` For example, [`quick-lru`](https://github.com/sindresorhus/quick-lru) is a completely unrelated module that implements the Map API. ```js -const Keyv = require('keyv'); -const QuickLRU = require('quick-lru'); +const Keyv = require('keyv') +const QuickLRU = require('quick-lru') -const lru = new QuickLRU({ maxSize: 1000 }); -const keyv = new Keyv({ store: lru }); +const lru = new QuickLRU({ maxSize: 1000 }) +const keyv = new Keyv({ store: lru }) ``` The following are third-party storage adapters compatible with Keyv: @@ -156,13 +156,13 @@ Inside your module: ```js class AwesomeModule { - constructor(opts) { - this.cache = new Keyv({ - uri: typeof opts.cache === 'string' && opts.cache, - store: typeof opts.cache !== 'string' && opts.cache, - namespace: 'awesome-module' - }); - } + constructor (opts) { + this.cache = new Keyv({ + uri: typeof opts.cache === 'string' && opts.cache, + store: typeof opts.cache !== 'string' && opts.cache, + namespace: 'awesome-module' + }) + } } ``` @@ -285,4 +285,5 @@ Returns a promise which is resolved when the entries have been cleared. ## License -MIT © Luke Childs +**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.
+Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/keyvhq/keyv/contributors). From a3fdd5711ef44e6988c33cfcecb8075d51240ed9 Mon Sep 17 00:00:00 2001 From: Jytesh <44925963+Jytesh@users.noreply.github.com> Date: Wed, 30 Jun 2021 11:14:02 +0530 Subject: [PATCH 10/14] Test: Removed this and requirable Signed-off-by: Jytesh <44925963+Jytesh@users.noreply.github.com> --- package.json | 2 -- packages/keyv-mongo/package.json | 7 +------ packages/keyv-mongo/test/test.js | 2 +- packages/keyv-mysql/package.json | 7 +------ packages/keyv-mysql/test/test.js | 2 +- packages/keyv-postgres/package.json | 7 +------ packages/keyv-postgres/test/test.js | 2 +- packages/keyv-redis/package.json | 7 +------ packages/keyv-redis/test/test.js | 2 +- packages/keyv-sql/package.json | 7 +------ packages/keyv-sql/test/test.js | 2 +- packages/keyv-sqlite/package.json | 7 +------ packages/keyv-sqlite/test/test.js | 2 +- packages/keyv-test-suite/test/unit.js | 2 +- packages/keyv/test/keyv.js | 2 +- packages/keyv/test/storage-adapters/mongodb.js | 2 +- packages/keyv/test/storage-adapters/mysql.js | 2 +- packages/keyv/test/storage-adapters/postgresql.js | 2 +- packages/keyv/test/storage-adapters/redis.js | 2 +- packages/keyv/test/storage-adapters/sqlite.js | 2 +- 20 files changed, 19 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index c67e0b84..af07f4cb 100644 --- a/package.json +++ b/package.json @@ -95,11 +95,9 @@ "ava": "latest", "delay": "latest", "dotenv": "latest", - "knex": "latest", "lerna": "latest", "nyc": "latest", "pify": "latest", - "requirable": "latest", "sqlite3": "latest", "standard": "latest", "this": "latest", diff --git a/packages/keyv-mongo/package.json b/packages/keyv-mongo/package.json index b4721134..a2a9ec7e 100644 --- a/packages/keyv-mongo/package.json +++ b/packages/keyv-mongo/package.json @@ -37,10 +37,5 @@ "scripts": { "test": "nyc --temp-dir ../../.nyc_output ava" }, - "license": "MIT", - "ava": { - "require": [ - "requirable" - ] - } + "license": "MIT" } diff --git a/packages/keyv-mongo/test/test.js b/packages/keyv-mongo/test/test.js index e53c265d..96734c67 100644 --- a/packages/keyv-mongo/test/test.js +++ b/packages/keyv-mongo/test/test.js @@ -1,7 +1,7 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvMongo = require('this') +const KeyvMongo = require('../') require('dotenv').config() const mongoURL = process.env.MONGO_URL || 'mongodb://127.0.0.1:27017' diff --git a/packages/keyv-mysql/package.json b/packages/keyv-mysql/package.json index bbfa4aa0..0c199bc0 100644 --- a/packages/keyv-mysql/package.json +++ b/packages/keyv-mysql/package.json @@ -38,10 +38,5 @@ "scripts": { "test": "nyc --temp-dir ../../.nyc_output ava" }, - "license": "MIT", - "ava": { - "require": [ - "requirable" - ] - } + "license": "MIT" } diff --git a/packages/keyv-mysql/test/test.js b/packages/keyv-mysql/test/test.js index 329552fc..4f7ee06d 100644 --- a/packages/keyv-mysql/test/test.js +++ b/packages/keyv-mysql/test/test.js @@ -1,7 +1,7 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvMysql = require('this') +const KeyvMysql = require('../') require('dotenv').config() const dbUrl = process.env.MYSQL_URL || 'mysql://root:root@localhost/keyv_test' diff --git a/packages/keyv-postgres/package.json b/packages/keyv-postgres/package.json index 3519d254..01830b07 100644 --- a/packages/keyv-postgres/package.json +++ b/packages/keyv-postgres/package.json @@ -38,10 +38,5 @@ "scripts": { "test": "nyc --temp-dir ../../.nyc_output ava --serial" }, - "license": "MIT", - "ava": { - "require": [ - "requirable" - ] - } + "license": "MIT" } diff --git a/packages/keyv-postgres/test/test.js b/packages/keyv-postgres/test/test.js index 3e959447..37a52a8f 100644 --- a/packages/keyv-postgres/test/test.js +++ b/packages/keyv-postgres/test/test.js @@ -1,7 +1,7 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvPostgres = require('this') +const KeyvPostgres = require('../') const store = () => new KeyvPostgres({ uri: 'postgresql://postgres:postgres@localhost:5432/keyv_test' }) keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv-redis/package.json b/packages/keyv-redis/package.json index 27d90ca6..d4785fab 100644 --- a/packages/keyv-redis/package.json +++ b/packages/keyv-redis/package.json @@ -38,10 +38,5 @@ "test": "nyc --temp-dir ../../.nyc_output ava", "test:docker": "docker-compose up --build --abort-on-container-exit --exit-code-from test" }, - "license": "MIT", - "ava": { - "require": [ - "requirable" - ] - } + "license": "MIT" } diff --git a/packages/keyv-redis/test/test.js b/packages/keyv-redis/test/test.js index 19ecbd2a..04c461d8 100644 --- a/packages/keyv-redis/test/test.js +++ b/packages/keyv-redis/test/test.js @@ -1,7 +1,7 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvRedis = require('this') +const KeyvRedis = require('../') const Redis = require('ioredis') require('dotenv').config() diff --git a/packages/keyv-sql/package.json b/packages/keyv-sql/package.json index 2798d2eb..d47099e8 100644 --- a/packages/keyv-sql/package.json +++ b/packages/keyv-sql/package.json @@ -32,10 +32,5 @@ "scripts": { "test": "nyc --temp-dir ../../.nyc_output ava" }, - "license": "MIT", - "ava": { - "require": [ - "requirable" - ] - } + "license": "MIT" } diff --git a/packages/keyv-sql/test/test.js b/packages/keyv-sql/test/test.js index f61bbcb5..4104e8e3 100644 --- a/packages/keyv-sql/test/test.js +++ b/packages/keyv-sql/test/test.js @@ -1,7 +1,7 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvSql = require('this') +const KeyvSql = require('../') const sqlite3 = require('sqlite3') const pify = require('pify') diff --git a/packages/keyv-sqlite/package.json b/packages/keyv-sqlite/package.json index 05bf65b0..e1286bb5 100644 --- a/packages/keyv-sqlite/package.json +++ b/packages/keyv-sqlite/package.json @@ -38,10 +38,5 @@ "scripts": { "test": "nyc --temp-dir ../../.nyc_output ava" }, - "license": "MIT", - "ava": { - "require": [ - "requirable" - ] - } + "license": "MIT" } diff --git a/packages/keyv-sqlite/test/test.js b/packages/keyv-sqlite/test/test.js index ff36eb24..e2310c58 100644 --- a/packages/keyv-sqlite/test/test.js +++ b/packages/keyv-sqlite/test/test.js @@ -1,7 +1,7 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvSqlite = require('../src/index.js') +const KeyvSqlite = require('../') const store = () => new KeyvSqlite({ uri: 'sqlite://test/testdb.sqlite', busyTimeout: 30000 }) keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv-test-suite/test/unit.js b/packages/keyv-test-suite/test/unit.js index 6cb0b3ef..8cc08bd5 100644 --- a/packages/keyv-test-suite/test/unit.js +++ b/packages/keyv-test-suite/test/unit.js @@ -1,6 +1,6 @@ const test = require('ava') const Keyv = require('@keyvhq/keyv') -const keyvTestSuite = require('this') +const keyvTestSuite = require('../') const store = () => new Map() keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/test/keyv.js b/packages/keyv/test/keyv.js index 75d85cce..f4851c48 100644 --- a/packages/keyv/test/keyv.js +++ b/packages/keyv/test/keyv.js @@ -1,7 +1,7 @@ const test = require('ava') const tk = require('timekeeper') const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('this') +const Keyv = require('../') test.serial('Keyv is a class', t => { t.is(typeof Keyv, 'function') diff --git a/packages/keyv/test/storage-adapters/mongodb.js b/packages/keyv/test/storage-adapters/mongodb.js index 72ebea74..716f2e70 100644 --- a/packages/keyv/test/storage-adapters/mongodb.js +++ b/packages/keyv/test/storage-adapters/mongodb.js @@ -1,6 +1,6 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('this') +const Keyv = require('../../') const KeyvMongo = require('@keyvhq/keyv-mongo') const store = () => new KeyvMongo('mongodb://127.0.0.1:27017') diff --git a/packages/keyv/test/storage-adapters/mysql.js b/packages/keyv/test/storage-adapters/mysql.js index cadded22..b5397ea9 100644 --- a/packages/keyv/test/storage-adapters/mysql.js +++ b/packages/keyv/test/storage-adapters/mysql.js @@ -1,6 +1,6 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('this') +const Keyv = require('../../') const KeyvMysql = require('@keyvhq/keyv-mysql') const store = () => new KeyvMysql('mysql://mysql@localhost/keyv_test') diff --git a/packages/keyv/test/storage-adapters/postgresql.js b/packages/keyv/test/storage-adapters/postgresql.js index 5e0497e0..21381819 100644 --- a/packages/keyv/test/storage-adapters/postgresql.js +++ b/packages/keyv/test/storage-adapters/postgresql.js @@ -1,6 +1,6 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('this') +const Keyv = require('../../') const KeyvPostgres = require('postgres') const store = () => new KeyvPostgres('postgresql://postgres@localhost:5432/keyv_test') diff --git a/packages/keyv/test/storage-adapters/redis.js b/packages/keyv/test/storage-adapters/redis.js index 85956923..83362267 100644 --- a/packages/keyv/test/storage-adapters/redis.js +++ b/packages/keyv/test/storage-adapters/redis.js @@ -1,6 +1,6 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('this') +const Keyv = require('../../') const KeyvRedis = require('redis') const store = () => new KeyvRedis('redis://localhost') diff --git a/packages/keyv/test/storage-adapters/sqlite.js b/packages/keyv/test/storage-adapters/sqlite.js index ae116fbf..8b1b097e 100644 --- a/packages/keyv/test/storage-adapters/sqlite.js +++ b/packages/keyv/test/storage-adapters/sqlite.js @@ -1,6 +1,6 @@ const test = require('ava') const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('this') +const Keyv = require('../../') const KeyvSqlite = require('sqlite') const store = () => new KeyvSqlite('sqlite://test/testdb.sqlite') From 4377345c5b5d45ea65fa49c2ee32125220a89a0a Mon Sep 17 00:00:00 2001 From: Jytesh <44925963+Jytesh@users.noreply.github.com> Date: Wed, 30 Jun 2021 11:24:04 +0530 Subject: [PATCH 11/14] deps: Fixed devdeps Signed-off-by: Jytesh <44925963+Jytesh@users.noreply.github.com> --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index af07f4cb..fd3ee09e 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,8 @@ "value" ], "devDependencies": { + "@keyvhq/keyv": "file:./packages/keyv", + "@keyvhq/keyv-test-suite": "file:packages/keyv-test-suite", "ava": "latest", "delay": "latest", "dotenv": "latest", From 88bdf52a4d146e140c36758485354f8d03b2a5e1 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Wed, 30 Jun 2021 19:21:57 +0200 Subject: [PATCH 12/14] ci: setup dependencies properly --- package.json | 12 +----------- packages/keyv-mongo/package.json | 6 ++++++ packages/keyv-mongo/test/test.js | 1 - packages/keyv-mysql/package.json | 4 ++++ packages/keyv-mysql/test/test.js | 1 - packages/keyv-postgres/package.json | 4 ++++ packages/keyv-redis/package.json | 6 ++++++ packages/keyv-redis/test/test.js | 3 +-- packages/keyv-sql/package.json | 10 ++++++++++ packages/keyv-sqlite/package.json | 4 ++++ packages/keyv-test-suite/package.json | 12 ++++-------- packages/keyv-test-suite/test/unit.js | 6 ------ packages/keyv/package.json | 8 +++++++- 13 files changed, 47 insertions(+), 30 deletions(-) delete mode 100644 packages/keyv-test-suite/test/unit.js diff --git a/package.json b/package.json index fd3ee09e..4f970cb4 100644 --- a/package.json +++ b/package.json @@ -92,18 +92,8 @@ "value" ], "devDependencies": { - "@keyvhq/keyv": "file:./packages/keyv", - "@keyvhq/keyv-test-suite": "file:packages/keyv-test-suite", - "ava": "latest", - "delay": "latest", - "dotenv": "latest", "lerna": "latest", - "nyc": "latest", - "pify": "latest", - "sqlite3": "latest", - "standard": "latest", - "this": "latest", - "timekeeper": "latest" + "standard": "latest" }, "engines": { "node": ">= 12" diff --git a/packages/keyv-mongo/package.json b/packages/keyv-mongo/package.json index a2a9ec7e..220fef36 100644 --- a/packages/keyv-mongo/package.json +++ b/packages/keyv-mongo/package.json @@ -28,6 +28,12 @@ "mongodb": "^3.6.5", "pify": "^5.0.0" }, + "devDependencies": { + "@keyvhq/keyv": "latest", + "@keyvhq/keyv-test-suite": "latest", + "ava": "latest", + "nyc": "latest" + }, "engines": { "node": ">= 12" }, diff --git a/packages/keyv-mongo/test/test.js b/packages/keyv-mongo/test/test.js index 96734c67..2661b11f 100644 --- a/packages/keyv-mongo/test/test.js +++ b/packages/keyv-mongo/test/test.js @@ -3,7 +3,6 @@ const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') const KeyvMongo = require('../') -require('dotenv').config() const mongoURL = process.env.MONGO_URL || 'mongodb://127.0.0.1:27017' const store = () => new KeyvMongo(mongoURL) keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv-mysql/package.json b/packages/keyv-mysql/package.json index 0c199bc0..0dc47af2 100644 --- a/packages/keyv-mysql/package.json +++ b/packages/keyv-mysql/package.json @@ -29,6 +29,10 @@ "@keyvhq/keyv-sql": "~0.2.0", "mysql2": "2.2.5" }, + "devDependencies": { + "ava": "latest", + "nyc": "latest" + }, "engines": { "node": ">= 12" }, diff --git a/packages/keyv-mysql/test/test.js b/packages/keyv-mysql/test/test.js index 4f7ee06d..4bdd1230 100644 --- a/packages/keyv-mysql/test/test.js +++ b/packages/keyv-mysql/test/test.js @@ -3,7 +3,6 @@ const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') const KeyvMysql = require('../') -require('dotenv').config() const dbUrl = process.env.MYSQL_URL || 'mysql://root:root@localhost/keyv_test' const store = () => new KeyvMysql(dbUrl) keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv-postgres/package.json b/packages/keyv-postgres/package.json index 01830b07..af1ac176 100644 --- a/packages/keyv-postgres/package.json +++ b/packages/keyv-postgres/package.json @@ -29,6 +29,10 @@ "@keyvhq/keyv-sql": "~0.2.0", "pg": "8.6.0" }, + "devDependencies": { + "ava": "latest", + "nyc": "latest" + }, "engines": { "node": ">= 12" }, diff --git a/packages/keyv-redis/package.json b/packages/keyv-redis/package.json index d4785fab..31e8ea77 100644 --- a/packages/keyv-redis/package.json +++ b/packages/keyv-redis/package.json @@ -27,6 +27,12 @@ "ioredis": "~4.17.1", "p-event": "~4.2.0" }, + "devDependencies": { + "@keyvhq/keyv": "latest", + "@keyvhq/keyv-test-suite": "latest", + "ava": "latest", + "nyc": "latest" + }, "engines": { "node": ">= 12" }, diff --git a/packages/keyv-redis/test/test.js b/packages/keyv-redis/test/test.js index 04c461d8..1c6c5768 100644 --- a/packages/keyv-redis/test/test.js +++ b/packages/keyv-redis/test/test.js @@ -4,7 +4,6 @@ const Keyv = require('@keyvhq/keyv') const KeyvRedis = require('../') const Redis = require('ioredis') -require('dotenv').config() const { REDIS_HOST = 'localhost' } = process.env const redisURI = `redis://${REDIS_HOST}` @@ -20,5 +19,5 @@ test('reuse a redis instance', async t => { await keyv.set('foo', 'bar') const value = await redis.get('foo') t.true(value === 'bar') - t.true(await keyv.get('foo') === value) + t.true((await keyv.get('foo')) === value) }) diff --git a/packages/keyv-sql/package.json b/packages/keyv-sql/package.json index d47099e8..cb2083ec 100644 --- a/packages/keyv-sql/package.json +++ b/packages/keyv-sql/package.json @@ -23,6 +23,16 @@ "ttl", "value" ], + "dependencies": { + "pify": "^5.0.0", + "sqlite3": "^5.0.2" + }, + "devDependencies": { + "@keyvhq/keyv": "latest", + "@keyvhq/keyv-test-suite": "latest", + "ava": "latest", + "nyc": "latest" + }, "engines": { "node": ">= 12" }, diff --git a/packages/keyv-sqlite/package.json b/packages/keyv-sqlite/package.json index e1286bb5..b4bd9fc5 100644 --- a/packages/keyv-sqlite/package.json +++ b/packages/keyv-sqlite/package.json @@ -29,6 +29,10 @@ "pify": "5.0.0", "sqlite3": "^5.0.2" }, + "devDependencies": { + "ava": "latest", + "nyc": "latest" + }, "engines": { "node": ">= 12" }, diff --git a/packages/keyv-test-suite/package.json b/packages/keyv-test-suite/package.json index 871e510b..1fc187b5 100644 --- a/packages/keyv-test-suite/package.json +++ b/packages/keyv-test-suite/package.json @@ -22,9 +22,9 @@ "ttl", "value" ], - "dependencies": { - "delay": "^5.0.0", - "timekeeper": "^2.0.0" + "devDependencies": { + "delay": "latest", + "timekeeper": "latest" }, "engines": { "node": ">= 12" @@ -33,11 +33,7 @@ "src" ], "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "release:major": "npm test && npm version major -m \"chore: release\" && git push origin master --tags && npm publish --access public", - "release:minor": "npm test && npm version minor -m \"chore: release\" && git push origin master --tags && npm publish --access public", - "release:patch": "npm test && npm version patch -m \"chore: release\" && git push origin master --tags && npm publish --access public", - "test": "nyc --temp-dir ../../.nyc_output ava" + "test": "exit 0" }, "license": "MIT" } diff --git a/packages/keyv-test-suite/test/unit.js b/packages/keyv-test-suite/test/unit.js deleted file mode 100644 index 8cc08bd5..00000000 --- a/packages/keyv-test-suite/test/unit.js +++ /dev/null @@ -1,6 +0,0 @@ -const test = require('ava') -const Keyv = require('@keyvhq/keyv') -const keyvTestSuite = require('../') - -const store = () => new Map() -keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/package.json b/packages/keyv/package.json index 7b179dbd..bb5e3fa5 100644 --- a/packages/keyv/package.json +++ b/packages/keyv/package.json @@ -20,7 +20,13 @@ "value" ], "dependencies": { - "json-buffer": "3.0.1" + "json-buffer": "~3.0.1" + }, + "devDependencies": { + "@keyvhq/keyv-test-suite": "latest", + "ava": "latest", + "nyc": "latest", + "timekeeper": "latest" }, "engines": { "node": ">= 12" From 02d15129f3ceb5db59a56c53f155a2f376848c61 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Wed, 30 Jun 2021 19:55:36 +0200 Subject: [PATCH 13/14] build: add git hooks and commit lint --- package.json | 24 ++++++++++++++++++++++++ packages/keyv-postgres/package.json | 1 + 2 files changed, 25 insertions(+) diff --git a/package.json b/package.json index 4f970cb4..b9828464 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,11 @@ "value" ], "devDependencies": { + "@commitlint/cli": "latest", + "@commitlint/config-conventional": "latest", "lerna": "latest", + "lint-staged": "latest", + "simple-git-hooks": "latest", "standard": "latest" }, "engines": { @@ -114,6 +118,26 @@ "update:check": "lerna exec ncu -- --errorLevel 2 && ncu -- --errorLevel 2" }, "private": "true", + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "lint-staged": { + "*.js": [ + "prettier-standard" + ], + "*.md": [ + "standard-markdown" + ], + "package.json": [ + "finepack" + ] + }, + "simple-git-hooks": { + "commit-msg": "npx commitlint --edit", + "pre-commit": "npx lint-staged" + }, "workspaces": [ "packages/*" ] diff --git a/packages/keyv-postgres/package.json b/packages/keyv-postgres/package.json index af1ac176..9067c4d7 100644 --- a/packages/keyv-postgres/package.json +++ b/packages/keyv-postgres/package.json @@ -30,6 +30,7 @@ "pg": "8.6.0" }, "devDependencies": { + "@keyvhq/keyv-test-suite": "latest", "ava": "latest", "nyc": "latest" }, From 2ee650702130a8161eabcedca79bdea82cc578e3 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Thu, 1 Jul 2021 09:48:48 +0200 Subject: [PATCH 14/14] chore: lint --- .github/workflows/test.yml | 2 +- packages/keyv-mongo/src/index.js | 121 +++++++++++------- packages/keyv-mongo/test/test.js | 8 +- packages/keyv-mysql/package.json | 2 + packages/keyv-mysql/src/index.js | 23 ++-- packages/keyv-mysql/test/test.js | 7 +- packages/keyv-postgres/package.json | 1 + packages/keyv-postgres/src/index.js | 18 +-- packages/keyv-postgres/test/test.js | 13 +- packages/keyv-redis/test/test.js | 7 +- packages/keyv-sql/test/test.js | 41 +++--- packages/keyv-sqlite/package.json | 2 + packages/keyv-sqlite/src/index.js | 37 +++--- packages/keyv-sqlite/test/test.js | 10 +- packages/keyv-test-suite/src/api.js | 26 ++-- packages/keyv-test-suite/src/index.js | 10 +- packages/keyv-test-suite/src/iteration.js | 8 +- packages/keyv-test-suite/src/namespace.js | 27 ++-- packages/keyv-test-suite/src/values.js | 2 + packages/keyv/src/index.js | 60 +++++---- packages/keyv/test/keyv.js | 92 +++++++------ .../keyv/test/storage-adapters/mongodb.js | 7 +- packages/keyv/test/storage-adapters/mysql.js | 7 +- .../keyv/test/storage-adapters/postgresql.js | 10 +- packages/keyv/test/storage-adapters/redis.js | 7 +- packages/keyv/test/storage-adapters/sqlite.js | 7 +- 26 files changed, 346 insertions(+), 209 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a2b3f58c..9fd1d55e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -62,7 +62,7 @@ jobs: - run: npm install --no-package-lock - run: npm test - name: Report - run: mkdir -p coverage && yarn run nyc report --reporter=text-lcov > coverage/lcov.info + run: mkdir -p coverage && npx nyc report --reporter=text-lcov > coverage/lcov.info - name: Coverage uses: coverallsapp/github-action@master with: diff --git a/packages/keyv-mongo/src/index.js b/packages/keyv-mongo/src/index.js index 5df0fb78..ff808d2f 100644 --- a/packages/keyv-mongo/src/index.js +++ b/packages/keyv-mongo/src/index.js @@ -17,18 +17,28 @@ class KeyvMongo extends EventEmitter { url = Object.assign({ url: url.uri }, url) } - this.options = Object.assign({ - url: 'mongodb://127.0.0.1:27017', - collection: 'keyv' - }, url, options) - - this.options.mongoOptions = Object.assign({ - useNewUrlParser: true, - useUnifiedTopology: true - }, this.options.mongoOptions) + this.options = Object.assign( + { + url: 'mongodb://127.0.0.1:27017', + collection: 'keyv' + }, + url, + options + ) + + this.options.mongoOptions = Object.assign( + { + useNewUrlParser: true, + useUnifiedTopology: true + }, + this.options.mongoOptions + ) try { - this.client = new mongodb.MongoClient(this.options.url, this.options.mongoOptions) + this.client = new mongodb.MongoClient( + this.options.url, + this.options.mongoOptions + ) } catch (error) { this.emit('error', error) } @@ -37,19 +47,31 @@ class KeyvMongo extends EventEmitter { let listeningEvents = false // Implementation from sql by lukechilds, this.connect = new Promise(resolve => { - this.client.connect() + this.client + .connect() .then(client => { this.db = client.db(this.options.db) this.store = this.db.collection(this.options.collection) - this.store.createIndex({ key: 1 }, { - unique: true, - background: true - }) - this.store.createIndex({ expiresAt: 1 }, { - expireAfterSeconds: 0, - background: true - }) - for (const method of ['updateOne', 'findOne', 'deleteOne', 'deleteMany']) { + this.store.createIndex( + { key: 1 }, + { + unique: true, + background: true + } + ) + this.store.createIndex( + { expiresAt: 1 }, + { + expireAfterSeconds: 0, + background: true + } + ) + for (const method of [ + 'updateOne', + 'findOne', + 'deleteOne', + 'deleteMany' + ]) { this.store[method] = pify(this.store[method].bind(this.store)) } @@ -65,22 +87,27 @@ class KeyvMongo extends EventEmitter { } get (key) { - return this.connect - .then(store => store.findOne({ key: { $eq: key } }) - .then(doc => { - if (doc === null) { - return undefined - } - - return doc.value - }) - ) + return this.connect.then(store => + store.findOne({ key: { $eq: key } }).then(doc => { + if (doc === null) { + return undefined + } + + return doc.value + }) + ) } set (key, value, ttl) { - const expiresAt = (typeof ttl === 'number') ? new Date(Date.now() + ttl) : null - return this.connect - .then(store => store.updateOne({ key: { $eq: key } }, { $set: { key, value, expiresAt } }, { upsert: true })) + const expiresAt = + typeof ttl === 'number' ? new Date(Date.now() + ttl) : null + return this.connect.then(store => + store.updateOne( + { key: { $eq: key } }, + { $set: { key, value, expiresAt } }, + { upsert: true } + ) + ) } delete (key) { @@ -88,23 +115,31 @@ class KeyvMongo extends EventEmitter { return Promise.resolve(false) } - return this.connect - .then(store => store.deleteOne({ key: { $eq: key } }) + return this.connect.then(store => + store + .deleteOne({ key: { $eq: key } }) .then(object => object.deletedCount > 0) - ) + ) } clear () { - return this.connect - .then(store => store.deleteMany({ key: new RegExp(`^${this.namespace + ':'}`) }) - .then(() => undefined)) + return this.connect.then(store => + store + .deleteMany({ key: new RegExp(`^${this.namespace + ':'}`) }) + .then(() => undefined) + ) } async * iterator () { - const iterator = await this.connect - .then(store => store.find({ key: new RegExp(`^${this.namespace ? this.namespace + ':' : '.*'}`) }).map(x => { - return [x.key, x.value] - })) + const iterator = await this.connect.then(store => + store + .find({ + key: new RegExp(`^${this.namespace ? this.namespace + ':' : '.*'}`) + }) + .map(x => { + return [x.key, x.value] + }) + ) yield * iterator } } diff --git a/packages/keyv-mongo/test/test.js b/packages/keyv-mongo/test/test.js index 2661b11f..15d0c5c2 100644 --- a/packages/keyv-mongo/test/test.js +++ b/packages/keyv-mongo/test/test.js @@ -1,11 +1,15 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvMongo = require('../') +const test = require('ava') + +const KeyvMongo = require('..') const mongoURL = process.env.MONGO_URL || 'mongodb://127.0.0.1:27017' const store = () => new KeyvMongo(mongoURL) keyvTestSuite(test, Keyv, store) + test('Collection option merges into default options', t => { const store = new KeyvMongo({ collection: 'foo' }) t.deepEqual(store.options, { diff --git a/packages/keyv-mysql/package.json b/packages/keyv-mysql/package.json index 0dc47af2..78daa0dd 100644 --- a/packages/keyv-mysql/package.json +++ b/packages/keyv-mysql/package.json @@ -30,6 +30,8 @@ "mysql2": "2.2.5" }, "devDependencies": { + "@keyvhq/keyv-test-suite": "latest", + "@keyvhq/keyv": "latest", "ava": "latest", "nyc": "latest" }, diff --git a/packages/keyv-mysql/src/index.js b/packages/keyv-mysql/src/index.js index ba854b91..c774fae7 100644 --- a/packages/keyv-mysql/src/index.js +++ b/packages/keyv-mysql/src/index.js @@ -9,17 +9,20 @@ class KeyvMysql extends KeyvSql { options = { uri: options } } - options = Object.assign({ - dialect: 'mysql', - uri: 'mysql://localhost' - }, options) + options = Object.assign( + { + dialect: 'mysql', + uri: 'mysql://localhost' + }, + options + ) - options.connect = () => Promise.resolve() - .then(() => mysql.createConnection(options.uri)) - .then(connection => { - return sql => connection.execute(sql) - .then(data => data[0]) - }) + options.connect = () => + Promise.resolve() + .then(() => mysql.createConnection(options.uri)) + .then(connection => { + return sql => connection.execute(sql).then(data => data[0]) + }) super(options) } diff --git a/packages/keyv-mysql/test/test.js b/packages/keyv-mysql/test/test.js index 4bdd1230..52da28d9 100644 --- a/packages/keyv-mysql/test/test.js +++ b/packages/keyv-mysql/test/test.js @@ -1,7 +1,10 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvMysql = require('../') +const test = require('ava') + +const KeyvMysql = require('..') const dbUrl = process.env.MYSQL_URL || 'mysql://root:root@localhost/keyv_test' const store = () => new KeyvMysql(dbUrl) diff --git a/packages/keyv-postgres/package.json b/packages/keyv-postgres/package.json index 9067c4d7..28f2e1f9 100644 --- a/packages/keyv-postgres/package.json +++ b/packages/keyv-postgres/package.json @@ -31,6 +31,7 @@ }, "devDependencies": { "@keyvhq/keyv-test-suite": "latest", + "@keyvhq/keyv": "latest", "ava": "latest", "nyc": "latest" }, diff --git a/packages/keyv-postgres/src/index.js b/packages/keyv-postgres/src/index.js index ce4952c3..1b04acee 100644 --- a/packages/keyv-postgres/src/index.js +++ b/packages/keyv-postgres/src/index.js @@ -5,19 +5,21 @@ const Pool = require('pg').Pool class KeyvPostgres extends KeyvSql { constructor (options) { - options = Object.assign({ - dialect: 'postgres', - uri: 'postgresql://localhost:5432' - }, options) + options = Object.assign( + { + dialect: 'postgres', + uri: 'postgresql://localhost:5432' + }, + options + ) - options.connect = () => Promise.resolve() - .then(() => { + options.connect = () => + Promise.resolve().then(() => { const pool = new Pool({ connectionString: options.uri, ssl: options.ssl }) - return sql => pool.query(sql) - .then(data => data.rows) + return sql => pool.query(sql).then(data => data.rows) }) super(options) diff --git a/packages/keyv-postgres/test/test.js b/packages/keyv-postgres/test/test.js index 37a52a8f..5c44f898 100644 --- a/packages/keyv-postgres/test/test.js +++ b/packages/keyv-postgres/test/test.js @@ -1,7 +1,14 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvPostgres = require('../') +const test = require('ava') + +const KeyvPostgres = require('..') + +const store = () => + new KeyvPostgres({ + uri: 'postgresql://postgres:postgres@localhost:5432/keyv_test' + }) -const store = () => new KeyvPostgres({ uri: 'postgresql://postgres:postgres@localhost:5432/keyv_test' }) keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv-redis/test/test.js b/packages/keyv-redis/test/test.js index 1c6c5768..a83986ba 100644 --- a/packages/keyv-redis/test/test.js +++ b/packages/keyv-redis/test/test.js @@ -1,8 +1,11 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvRedis = require('../') const Redis = require('ioredis') +const test = require('ava') + +const KeyvRedis = require('..') const { REDIS_HOST = 'localhost' } = process.env const redisURI = `redis://${REDIS_HOST}` diff --git a/packages/keyv-sql/test/test.js b/packages/keyv-sql/test/test.js index 4104e8e3..4902780c 100644 --- a/packages/keyv-sql/test/test.js +++ b/packages/keyv-sql/test/test.js @@ -1,29 +1,34 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvSql = require('../') - const sqlite3 = require('sqlite3') const pify = require('pify') +const test = require('ava') + +const KeyvSql = require('..') class TestSqlite extends KeyvSql { constructor (options) { - options = Object.assign({ - dialect: 'sqlite', - db: 'test/testdb.sqlite' - }, options) + options = Object.assign( + { + dialect: 'sqlite', + db: 'test/testdb.sqlite' + }, + options + ) - options.connect = () => new Promise((resolve, reject) => { - const db = new sqlite3.Database(options.db, error => { - if (error) { - reject(error) - } else { - db.configure('busyTimeout', 30000) - resolve(db) - } - }) - }) - .then(db => pify(db.all).bind(db)) + options.connect = () => + new Promise((resolve, reject) => { + const db = new sqlite3.Database(options.db, error => { + if (error) { + reject(error) + } else { + db.configure('busyTimeout', 30000) + resolve(db) + } + }) + }).then(db => pify(db.all).bind(db)) super(options) } diff --git a/packages/keyv-sqlite/package.json b/packages/keyv-sqlite/package.json index b4bd9fc5..a63b2683 100644 --- a/packages/keyv-sqlite/package.json +++ b/packages/keyv-sqlite/package.json @@ -30,6 +30,8 @@ "sqlite3": "^5.0.2" }, "devDependencies": { + "@keyvhq/keyv-test-suite": "latest", + "@keyvhq/keyv": "latest", "ava": "latest", "nyc": "latest" }, diff --git a/packages/keyv-sqlite/src/index.js b/packages/keyv-sqlite/src/index.js index 5da1f971..c05562c9 100644 --- a/packages/keyv-sqlite/src/index.js +++ b/packages/keyv-sqlite/src/index.js @@ -6,26 +6,29 @@ const pify = require('pify') class KeyvSqlite extends KeyvSql { constructor (options) { - options = Object.assign({ - dialect: 'sqlite', - uri: 'sqlite://:memory:' - }, options) + options = Object.assign( + { + dialect: 'sqlite', + uri: 'sqlite://:memory:' + }, + options + ) options.db = options.uri.replace(/^sqlite:\/\//, '') - options.connect = () => new Promise((resolve, reject) => { - const db = new sqlite3.Database(options.db, error => { - if (error) { - reject(error) - } else { - if (options.busyTimeout) { - db.configure('busyTimeout', options.busyTimeout) - } + options.connect = () => + new Promise((resolve, reject) => { + const db = new sqlite3.Database(options.db, error => { + if (error) { + reject(error) + } else { + if (options.busyTimeout) { + db.configure('busyTimeout', options.busyTimeout) + } - resolve(db) - } - }) - }) - .then(db => pify(db.all).bind(db)) + resolve(db) + } + }) + }).then(db => pify(db.all).bind(db)) super(options) } diff --git a/packages/keyv-sqlite/test/test.js b/packages/keyv-sqlite/test/test.js index e2310c58..cea3744c 100644 --- a/packages/keyv-sqlite/test/test.js +++ b/packages/keyv-sqlite/test/test.js @@ -1,7 +1,11 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') const Keyv = require('@keyvhq/keyv') -const KeyvSqlite = require('../') +const test = require('ava') + +const KeyvSqlite = require('..') -const store = () => new KeyvSqlite({ uri: 'sqlite://test/testdb.sqlite', busyTimeout: 30000 }) +const store = () => + new KeyvSqlite({ uri: 'sqlite://test/testdb.sqlite', busyTimeout: 30000 }) keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv-test-suite/src/api.js b/packages/keyv-test-suite/src/api.js index dcb42dfa..ad6ad089 100644 --- a/packages/keyv-test-suite/src/api.js +++ b/packages/keyv-test-suite/src/api.js @@ -1,3 +1,5 @@ +'use strict' + const tk = require('timekeeper') const delay = require('delay') @@ -49,10 +51,13 @@ const keyvApiTests = (test, Keyv, store) => { t.is(await keyv.get('foo'), 'bar') }) - test.serial('.get(key) with nonexistent key resolves to undefined', async t => { - const keyv = new Keyv({ store: store() }) - t.is(await keyv.get('foo'), undefined) - }) + test.serial( + '.get(key) with nonexistent key resolves to undefined', + async t => { + const keyv = new Keyv({ store: store() }) + t.is(await keyv.get('foo'), undefined) + } + ) test.serial('.delete(key) returns a Promise', t => { const keyv = new Keyv({ store: store() }) @@ -65,11 +70,14 @@ const keyvApiTests = (test, Keyv, store) => { t.is(await keyv.delete('foo'), true) }) - test.serial('.delete(key) with nonexistent key resolves to false', async t => { - const keyv = new Keyv({ store: store() }) - t.is(await keyv.delete(), false) - t.is(await keyv.delete('foo'), false) - }) + test.serial( + '.delete(key) with nonexistent key resolves to false', + async t => { + const keyv = new Keyv({ store: store() }) + t.is(await keyv.delete(), false) + t.is(await keyv.delete('foo'), false) + } + ) test.serial('.delete(key) deletes a key', async t => { const keyv = new Keyv({ store: store() }) diff --git a/packages/keyv-test-suite/src/index.js b/packages/keyv-test-suite/src/index.js index 94bb72f8..f6665d1f 100644 --- a/packages/keyv-test-suite/src/index.js +++ b/packages/keyv-test-suite/src/index.js @@ -1,7 +1,9 @@ -const keyvApiTests = require('./api.js') -const keyvValueTests = require('./values.js') -const keyvNamespaceTests = require('./namespace.js') -const keyvIteratorTests = require('./iteration.js') +'use strict' + +const keyvNamespaceTests = require('./namespace') +const keyvIteratorTests = require('./iteration') +const keyvValueTests = require('./values') +const keyvApiTests = require('./api') const keyvTestSuite = (test, Keyv, store) => { keyvIteratorTests(test, Keyv, store) diff --git a/packages/keyv-test-suite/src/iteration.js b/packages/keyv-test-suite/src/iteration.js index 35661d78..f44f291e 100644 --- a/packages/keyv-test-suite/src/iteration.js +++ b/packages/keyv-test-suite/src/iteration.js @@ -1,3 +1,5 @@ +'use strict' + const keyvIteratorTests = (test, Keyv, store) => { test.beforeEach(async () => { const keyv = new Keyv({ store: store() }) @@ -11,7 +13,11 @@ const keyvIteratorTests = (test, Keyv, store) => { test.serial('iterator() iterates over all values', async t => { const keyv = new Keyv({ store: store() }) - const map = new Map(Array.from({ length: 5 }).fill(0).map((x, i) => [String(i), String(i + 10)])) + const map = new Map( + Array.from({ length: 5 }) + .fill(0) + .map((x, i) => [String(i), String(i + 10)]) + ) const toResolve = [] for (const [key, value] of map) { toResolve.push(keyv.set(key, value)) diff --git a/packages/keyv-test-suite/src/namespace.js b/packages/keyv-test-suite/src/namespace.js index 016fe21e..7c2a8874 100644 --- a/packages/keyv-test-suite/src/namespace.js +++ b/packages/keyv-test-suite/src/namespace.js @@ -1,3 +1,5 @@ +'use strict' + const keyvNamepsaceTests = (test, Keyv, store) => { test.beforeEach(async () => { const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }) @@ -6,7 +8,7 @@ const keyvNamepsaceTests = (test, Keyv, store) => { await keyv2.clear() }) - test.serial('namespaced set/get don\'t collide', async t => { + test.serial("namespaced set/get don't collide", async t => { const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }) const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }) await keyv1.set('foo', 'keyv1') @@ -15,15 +17,18 @@ const keyvNamepsaceTests = (test, Keyv, store) => { t.is(await keyv2.get('foo'), 'keyv2') }) - test.serial('namespaced delete only deletes from current namespace', async t => { - const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }) - const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }) - await keyv1.set('foo', 'keyv1') - await keyv2.set('foo', 'keyv2') - t.is(await keyv1.delete('foo'), true) - t.is(await keyv1.get('foo'), undefined) - t.is(await keyv2.get('foo'), 'keyv2') - }) + test.serial( + 'namespaced delete only deletes from current namespace', + async t => { + const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }) + const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }) + await keyv1.set('foo', 'keyv1') + await keyv2.set('foo', 'keyv2') + t.is(await keyv1.delete('foo'), true) + t.is(await keyv1.get('foo'), undefined) + t.is(await keyv2.get('foo'), 'keyv2') + } + ) test.serial('namespaced clear only clears current namespace', async t => { const keyv1 = new Keyv({ store: store(), namespace: 'keyv1' }) @@ -39,7 +44,7 @@ const keyvNamepsaceTests = (test, Keyv, store) => { t.is(await keyv2.get('bar'), 'keyv2') }) - test.serial('no namespaced clear doesn\'t clears all stores', async t => { + test.serial("no namespaced clear doesn't clears all stores", async t => { const keyv1 = new Keyv({ store: store(), namespace: false }) const keyv2 = new Keyv({ store: store(), namespace: 'keyv2' }) await keyv1.set('foo', 'keyv1') diff --git a/packages/keyv-test-suite/src/values.js b/packages/keyv-test-suite/src/values.js index 7fcd79cf..333dda37 100644 --- a/packages/keyv-test-suite/src/values.js +++ b/packages/keyv-test-suite/src/values.js @@ -1,3 +1,5 @@ +'use strict' + const keyvValueTests = (test, Keyv, store) => { test.beforeEach(async () => { const keyv = new Keyv({ store: store() }) diff --git a/packages/keyv/src/index.js b/packages/keyv/src/index.js index d6b8e0d3..0e69d726 100644 --- a/packages/keyv/src/index.js +++ b/packages/keyv/src/index.js @@ -23,24 +23,34 @@ class Keyv extends EventEmitter { this.store.on('error', error => this.emit('error', error)) } - const generateIterator = iterator => async function * () { - for await (const [key, raw] of (typeof iterator === 'function' ? iterator() : iterator)) { - const data = (typeof raw === 'string') ? this.options.deserialize(raw) : raw - if (!key.includes(this.options.namespace) || typeof data !== 'object') { - continue + const generateIterator = iterator => + async function * () { + for await (const [key, raw] of typeof iterator === 'function' + ? iterator() + : iterator) { + const data = + typeof raw === 'string' ? this.options.deserialize(raw) : raw + if ( + !key.includes(this.options.namespace) || + typeof data !== 'object' + ) { + continue + } + + if (typeof data.expires === 'number' && Date.now() > data.expires) { + this.delete(key) + continue + } + + yield [this._getKeyUnprefix(key), data.value] } - - if (typeof data.expires === 'number' && Date.now() > data.expires) { - this.delete(key) - continue - } - - yield [this._getKeyUnprefix(key), data.value] } - } // Attach iterators - if (typeof this.store[Symbol.iterator] === 'function' && this.store instanceof Map) { + if ( + typeof this.store[Symbol.iterator] === 'function' && + this.store instanceof Map + ) { this.iterator = generateIterator(this.store) } else if (typeof this.store.iterator === 'function') { this.iterator = generateIterator(this.store.iterator.bind(this.store)) @@ -54,7 +64,12 @@ class Keyv extends EventEmitter { } _getKeyUnprefix (key) { - return this.options.namespace ? key.split(':').splice(1).join(':') : key + return this.options.namespace + ? key + .split(':') + .splice(1) + .join(':') + : key } get (key, options) { @@ -63,7 +78,7 @@ class Keyv extends EventEmitter { return Promise.resolve() .then(() => store.get(keyPrefixed)) .then(data => { - return (typeof data === 'string') ? this.options.deserialize(data) : data + return typeof data === 'string' ? this.options.deserialize(data) : data }) .then(data => { if (data === undefined) { @@ -75,7 +90,7 @@ class Keyv extends EventEmitter { return undefined } - return (options && options.raw) ? data : data.value + return options && options.raw ? data : data.value }) } @@ -83,8 +98,7 @@ class Keyv extends EventEmitter { const keyPrefixed = this._getKeyPrefix(key) const store = this.store if (typeof store.has === 'function') { - return Promise.resolve() - .then(() => store.has(keyPrefixed)) + return Promise.resolve().then(() => store.has(keyPrefixed)) } return Promise.resolve() @@ -105,7 +119,7 @@ class Keyv extends EventEmitter { const store = this.store return Promise.resolve() .then(() => { - const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null + const expires = typeof ttl === 'number' ? Date.now() + ttl : null value = { value, expires } return this.options.serialize(value) }) @@ -116,8 +130,7 @@ class Keyv extends EventEmitter { delete (key) { const keyPrefixed = this._getKeyPrefix(key) const store = this.store - return Promise.resolve() - .then(() => store.delete(keyPrefixed)) + return Promise.resolve().then(() => store.delete(keyPrefixed)) } clear () { @@ -126,8 +139,7 @@ class Keyv extends EventEmitter { } const store = this.store - return Promise.resolve() - .then(() => store.clear()) + return Promise.resolve().then(() => store.clear()) } } module.exports = Keyv diff --git a/packages/keyv/test/keyv.js b/packages/keyv/test/keyv.js index f4851c48..ea66037d 100644 --- a/packages/keyv/test/keyv.js +++ b/packages/keyv/test/keyv.js @@ -1,7 +1,10 @@ -const test = require('ava') -const tk = require('timekeeper') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('../') +const tk = require('timekeeper') +const test = require('ava') + +const Keyv = require('..') test.serial('Keyv is a class', t => { t.is(typeof Keyv, 'function') @@ -65,45 +68,54 @@ test.serial('.set(key, value, ttl) overwrites default tll option', async t => { tk.reset() }) -test.serial('.set(key, value, ttl) where ttl is "0" overwrites default tll option and sets key to never expire', async t => { - const startTime = Date.now() - tk.freeze(startTime) - const store = new Map() - const keyv = new Keyv({ store, ttl: 200 }) - await keyv.set('foo', 'bar', 0) - t.is(await keyv.get('foo'), 'bar') - tk.freeze(startTime + 250) - t.is(await keyv.get('foo'), 'bar') - tk.reset() -}) - -test.serial('.get(key, {raw: true}) returns the raw object instead of the value', async t => { - const store = new Map() - const keyv = new Keyv({ store }) - await keyv.set('foo', 'bar') - const value = await keyv.get('foo') - const rawObject = await keyv.get('foo', { raw: true }) - t.is(value, 'bar') - t.is(rawObject.value, 'bar') -}) - -test.serial('Keyv uses custom serializer when provided instead of json-buffer', async t => { - t.plan(3) - const store = new Map() - const serialize = data => { - t.pass() - return JSON.stringify(data) +test.serial( + '.set(key, value, ttl) where ttl is "0" overwrites default tll option and sets key to never expire', + async t => { + const startTime = Date.now() + tk.freeze(startTime) + const store = new Map() + const keyv = new Keyv({ store, ttl: 200 }) + await keyv.set('foo', 'bar', 0) + t.is(await keyv.get('foo'), 'bar') + tk.freeze(startTime + 250) + t.is(await keyv.get('foo'), 'bar') + tk.reset() } - - const deserialize = data => { - t.pass() - return JSON.parse(data) +) + +test.serial( + '.get(key, {raw: true}) returns the raw object instead of the value', + async t => { + const store = new Map() + const keyv = new Keyv({ store }) + await keyv.set('foo', 'bar') + const value = await keyv.get('foo') + const rawObject = await keyv.get('foo', { raw: true }) + t.is(value, 'bar') + t.is(rawObject.value, 'bar') } - - const keyv = new Keyv({ store, serialize, deserialize }) - await keyv.set('foo', 'bar') - t.is(await keyv.get('foo'), 'bar') -}) +) + +test.serial( + 'Keyv uses custom serializer when provided instead of json-buffer', + async t => { + t.plan(3) + const store = new Map() + const serialize = data => { + t.pass() + return JSON.stringify(data) + } + + const deserialize = data => { + t.pass() + return JSON.parse(data) + } + + const keyv = new Keyv({ store, serialize, deserialize }) + await keyv.set('foo', 'bar') + t.is(await keyv.get('foo'), 'bar') + } +) test.serial('Keyv supports async serializer/deserializer', async t => { t.plan(3) diff --git a/packages/keyv/test/storage-adapters/mongodb.js b/packages/keyv/test/storage-adapters/mongodb.js index 716f2e70..e8b9bec0 100644 --- a/packages/keyv/test/storage-adapters/mongodb.js +++ b/packages/keyv/test/storage-adapters/mongodb.js @@ -1,7 +1,10 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('../../') const KeyvMongo = require('@keyvhq/keyv-mongo') +const test = require('ava') + +const Keyv = require('../..') const store = () => new KeyvMongo('mongodb://127.0.0.1:27017') keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/test/storage-adapters/mysql.js b/packages/keyv/test/storage-adapters/mysql.js index b5397ea9..0283bb59 100644 --- a/packages/keyv/test/storage-adapters/mysql.js +++ b/packages/keyv/test/storage-adapters/mysql.js @@ -1,7 +1,10 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('../../') const KeyvMysql = require('@keyvhq/keyv-mysql') +const test = require('ava') + +const Keyv = require('../..') const store = () => new KeyvMysql('mysql://mysql@localhost/keyv_test') keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/test/storage-adapters/postgresql.js b/packages/keyv/test/storage-adapters/postgresql.js index 21381819..c17edc70 100644 --- a/packages/keyv/test/storage-adapters/postgresql.js +++ b/packages/keyv/test/storage-adapters/postgresql.js @@ -1,7 +1,11 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('../../') const KeyvPostgres = require('postgres') +const test = require('ava') + +const Keyv = require('../..') -const store = () => new KeyvPostgres('postgresql://postgres@localhost:5432/keyv_test') +const store = () => + new KeyvPostgres('postgresql://postgres@localhost:5432/keyv_test') keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/test/storage-adapters/redis.js b/packages/keyv/test/storage-adapters/redis.js index 83362267..83151d47 100644 --- a/packages/keyv/test/storage-adapters/redis.js +++ b/packages/keyv/test/storage-adapters/redis.js @@ -1,7 +1,10 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('../../') const KeyvRedis = require('redis') +const test = require('ava') + +const Keyv = require('../..') const store = () => new KeyvRedis('redis://localhost') keyvTestSuite(test, Keyv, store) diff --git a/packages/keyv/test/storage-adapters/sqlite.js b/packages/keyv/test/storage-adapters/sqlite.js index 8b1b097e..0975543e 100644 --- a/packages/keyv/test/storage-adapters/sqlite.js +++ b/packages/keyv/test/storage-adapters/sqlite.js @@ -1,7 +1,10 @@ -const test = require('ava') +'use strict' + const keyvTestSuite = require('@keyvhq/keyv-test-suite') -const Keyv = require('../../') const KeyvSqlite = require('sqlite') +const test = require('ava') + +const Keyv = require('../..') const store = () => new KeyvSqlite('sqlite://test/testdb.sqlite') keyvTestSuite(test, Keyv, store)