From 584667a26a49085e8a09e8580931dbc54da1bb02 Mon Sep 17 00:00:00 2001 From: Alex Werner Date: Thu, 4 Jan 2024 21:45:19 +0200 Subject: [PATCH 1/9] feat: initial utils work to ESM --- package-lock.json | 167 +++++++----------- package.json | 5 +- .../MemoryAdapter/MemoryAdapter.spec.js | 4 +- src/constants.js | 2 +- src/index.js | 18 +- src/index.spec.js | 4 +- src/utils/comparators.js | 18 +- 7 files changed, 87 insertions(+), 131 deletions(-) diff --git a/package-lock.json b/package-lock.json index eed72a8..6080a88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "3.1.2", "license": "MIT", "dependencies": { - "fslockjs": "^2.0.2", + "fslockjs": "^3.0.0", "lodash.clonedeep": "^4.5.0", "lodash.foreach": "^4.5.0", "lodash.get": "^4.4.2", @@ -22,7 +22,7 @@ "mongo-objectid": "^1.2.2" }, "devDependencies": { - "chai": "^4.3.10", + "chai": "^5.0.0", "chance": "^1.1.11", "eslint": "^8.56.0", "eslint-config-airbnb-base": "^15.0.0", @@ -838,12 +838,12 @@ } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/available-typed-arrays": { @@ -949,21 +949,19 @@ } }, "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.0.0.tgz", + "integrity": "sha512-HO5p0oEKd5M6HEcwOkNAThAE3j960vIZvVcc0t2tI06Dd0ATu69cEnMB2wOhC5/ZyQ6m67w3ePjU/HzXsSsdBA==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "assertion-error": "^2.0.1", + "check-error": "^2.0.0", + "deep-eql": "^5.0.1", + "loupe": "^3.0.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/chalk": { @@ -987,15 +985,12 @@ "dev": true }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.0.0.tgz", + "integrity": "sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/chokidar": { @@ -1140,13 +1135,10 @@ } }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz", + "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==", "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, "engines": { "node": ">=6" } @@ -1867,12 +1859,9 @@ } }, "node_modules/fslockjs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fslockjs/-/fslockjs-2.0.2.tgz", - "integrity": "sha512-ipo0SSAGnnSfBBJ7LLhj6Vwh8Y3smy/KGCpvQIxke10/AB08geQ4sk4rzMYWjX9z2RIeojVwX03e4qF/U53g/Q==", - "dependencies": { - "lodash.map": "^4.6.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fslockjs/-/fslockjs-3.0.0.tgz", + "integrity": "sha512-U0qwKJVHsZ/edyZ0vO3QCz7FoQdiaH5BfIx9Izboc9YnLAMEIj7AG99weKJOwYx/UqdU+txi9iXOkF1wNG6iZA==" }, "node_modules/function-bind": { "version": "1.1.2", @@ -2838,11 +2827,6 @@ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=" }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2951,9 +2935,9 @@ } }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.0.2.tgz", + "integrity": "sha512-Tzlkbynv7dtqxTROe54Il+J4e/zG2iehtJGZUYpTv8WzlkW9qyEcE83UhGJCeuF3SCfzHuM5VWhBi47phV3+AQ==", "dev": true, "dependencies": { "get-func-name": "^2.0.1" @@ -3581,12 +3565,12 @@ "dev": true }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, "engines": { - "node": "*" + "node": ">= 14.16" } }, "node_modules/picomatch": { @@ -4202,15 +4186,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -5168,9 +5143,9 @@ } }, "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true }, "available-typed-arrays": { @@ -5252,18 +5227,16 @@ "dev": true }, "chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.0.0.tgz", + "integrity": "sha512-HO5p0oEKd5M6HEcwOkNAThAE3j960vIZvVcc0t2tI06Dd0ATu69cEnMB2wOhC5/ZyQ6m67w3ePjU/HzXsSsdBA==", "dev": true, "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "assertion-error": "^2.0.1", + "check-error": "^2.0.0", + "deep-eql": "^5.0.1", + "loupe": "^3.0.0", + "pathval": "^2.0.0" } }, "chalk": { @@ -5284,13 +5257,10 @@ "dev": true }, "check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "requires": { - "get-func-name": "^2.0.2" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.0.0.tgz", + "integrity": "sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==", + "dev": true }, "chokidar": { "version": "3.5.3", @@ -5405,13 +5375,10 @@ "dev": true }, "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz", + "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==", + "dev": true }, "deep-is": { "version": "0.1.4", @@ -5976,12 +5943,9 @@ "optional": true }, "fslockjs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fslockjs/-/fslockjs-2.0.2.tgz", - "integrity": "sha512-ipo0SSAGnnSfBBJ7LLhj6Vwh8Y3smy/KGCpvQIxke10/AB08geQ4sk4rzMYWjX9z2RIeojVwX03e4qF/U53g/Q==", - "requires": { - "lodash.map": "^4.6.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fslockjs/-/fslockjs-3.0.0.tgz", + "integrity": "sha512-U0qwKJVHsZ/edyZ0vO3QCz7FoQdiaH5BfIx9Izboc9YnLAMEIj7AG99weKJOwYx/UqdU+txi9iXOkF1wNG6iZA==" }, "function-bind": { "version": "1.1.2", @@ -6680,11 +6644,6 @@ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=" }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==" - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -6768,9 +6727,9 @@ } }, "loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.0.2.tgz", + "integrity": "sha512-Tzlkbynv7dtqxTROe54Il+J4e/zG2iehtJGZUYpTv8WzlkW9qyEcE83UhGJCeuF3SCfzHuM5VWhBi47phV3+AQ==", "dev": true, "requires": { "get-func-name": "^2.0.1" @@ -7258,9 +7217,9 @@ "dev": true }, "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true }, "picomatch": { @@ -7707,12 +7666,6 @@ "prelude-ls": "^1.2.1" } }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", diff --git a/package.json b/package.json index 1a0f4b5..12804c4 100644 --- a/package.json +++ b/package.json @@ -38,9 +38,10 @@ "database", "big data storage" ], + "type": "module", "homepage": "https://github.com/Alex-Werner/SBTree#readme", "devDependencies": { - "chai": "^4.3.10", + "chai": "^5.0.0", "chance": "^1.1.11", "eslint": "^8.56.0", "eslint-config-airbnb-base": "^15.0.0", @@ -49,7 +50,7 @@ "nyc": "^15.1.0" }, "dependencies": { - "fslockjs": "^2.0.2", + "fslockjs": "^3.0.0", "lodash.clonedeep": "^4.5.0", "lodash.foreach": "^4.5.0", "lodash.get": "^4.4.2", diff --git a/src/adapters/MemoryAdapter/MemoryAdapter.spec.js b/src/adapters/MemoryAdapter/MemoryAdapter.spec.js index cfab6ac..7633407 100644 --- a/src/adapters/MemoryAdapter/MemoryAdapter.spec.js +++ b/src/adapters/MemoryAdapter/MemoryAdapter.spec.js @@ -1,5 +1,5 @@ -const {expect} = require('chai'); -const MemoryAdapter = require('./MemoryAdapter'); +import {expect} from 'chai'; +import MemoryAdapter from './MemoryAdapter'; describe('Adapters - MemoryAdapter', function suite() { it('should initialize', function () { diff --git a/src/constants.js b/src/constants.js index bd82edf..46dd77a 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,3 +1,3 @@ -module.exports = { +export default { validTypes: ['string', 'number', 'boolean', 'object'], }; diff --git a/src/index.js b/src/index.js index 0b5b781..cfc7334 100644 --- a/src/index.js +++ b/src/index.js @@ -1,11 +1,11 @@ -const ObjectID = require('mongo-objectid'); -const SBTree = require('./types/SBTree/SBTree'); -const adapters = require('./adapters/index'); -const utils = require('./utils/index'); +import ObjectID from 'mongo-objectid'; +import SBTree from './types/SBTree/SBTree'; +import adapters from './adapters/index'; +import utils from './utils/index'; -module.exports = { - SBTree, - ObjectID, - adapters, - utils, +export default { + SBTree, + ObjectID, + adapters, + utils, }; diff --git a/src/index.spec.js b/src/index.spec.js index cf488ac..cb1120e 100644 --- a/src/index.spec.js +++ b/src/index.spec.js @@ -1,5 +1,5 @@ -const {expect} = require('chai'); -const indexSpec = require('./index'); +import {expect} from 'chai'; +import indexSpec from './index'; describe('SBTree', () => { it('should work', function () { diff --git a/src/utils/comparators.js b/src/utils/comparators.js index 27dee7c..359d381 100644 --- a/src/utils/comparators.js +++ b/src/utils/comparators.js @@ -1,13 +1,15 @@ const comparatorString = function (a, b) { - if (typeof a !== 'string') a = String(a); - if (typeof b !== 'string') b = String(b); - return (a > b ? 1 : (a < b ? -1 : 0)); + if (typeof a !== 'string') a = String(a); + if (typeof b !== 'string') b = String(b); + return (a > b ? 1 : (a < b ? -1 : 0)); }; -const comparatorNum = function (a, b) { - return (a > b ? 1 : (a < b ? -1 : 0)); + +function comparatorNum(a, b) { + return (a > b ? 1 : (a < b ? -1 : 0)); }; + const comparators = { - comparatorNum, - comparatorString, + comparatorNum, + comparatorString, }; -module.exports = comparators; +export default comparators; From 696304c9c9aa0c4ca304f862f59afbd884fc4a62 Mon Sep 17 00:00:00 2001 From: Alex Werner Date: Thu, 4 Jan 2024 21:45:19 +0200 Subject: [PATCH 2/9] feat: utils to ESM + added additional tests --- src/constants.js | 4 +- src/utils/array.js | 63 ++++++++-------- src/utils/array.spec.js | 58 ++++++++++----- src/utils/ascii.js | 131 +++++++++++++++++----------------- src/utils/ascii.spec.js | 57 +++++++++++++++ src/utils/comparators.js | 11 ++- src/utils/comparators.spec.js | 44 ++++++++++++ src/utils/crypto.js | 2 +- src/utils/fn.js | 3 +- src/utils/index.js | 20 ++++-- src/utils/time.js | 3 +- 11 files changed, 261 insertions(+), 135 deletions(-) create mode 100644 src/utils/ascii.spec.js create mode 100644 src/utils/comparators.spec.js diff --git a/src/constants.js b/src/constants.js index 46dd77a..8491596 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,3 +1 @@ -export default { - validTypes: ['string', 'number', 'boolean', 'object'], -}; +export const validTypes = ['string', 'number', 'boolean', 'object']; diff --git a/src/utils/array.js b/src/utils/array.js index d2f2521..7c4c1f6 100644 --- a/src/utils/array.js +++ b/src/utils/array.js @@ -1,34 +1,33 @@ -const { comparatorString, comparatorNum } = require('./comparators'); -const { validTypes } = require('../constants'); +import { comparatorString, comparatorNum } from './comparators.js'; +import { validTypes } from '../constants.js'; -const array = { - insertSorted: (arr, item) => { - if (!validTypes.includes(typeof item)) { - throw new Error(`Unsupported type typeof ${typeof item}`); - } - const comparator = (typeof item === 'string') ? comparatorString : comparatorNum; - let min = 0; - let max = arr.length; - let index = Math.floor((min + max) / 2); - while (max > min) { - if (comparator(item, arr[index]) < 0) { - max = index; - } else { - min = index + 1; - } - index = Math.floor((min + max) / 2); - } - if (Array.isArray(item)) { - arr.splice(index, 0, ...item); - }else{ - arr.splice(index, 0, item); - } - return index; - }, - async forEach(array, eachFn) { - for (let index = 0; index < array.length; index++) { - await eachFn(array[index], index, array); + +export function forEach(array, eachFn) { + for (let index = 0; index < array.length; index++) { + eachFn(array[index], index, array); + } +} + +export function insertSorted(arr, item) { + if (!validTypes.includes(typeof item)) { + throw new Error(`Unsupported type typeof ${typeof item}`); + } + const comparator = (typeof item === 'string') ? comparatorString : comparatorNum; + let min = 0; + let max = arr.length; + let index = Math.floor((min + max) / 2); + while (max > min) { + if (comparator(item, arr[index]) < 0) { + max = index; + } else { + min = index + 1; } - }, -}; -module.exports = array; + index = Math.floor((min + max) / 2); + } + if (Array.isArray(item)) { + arr.splice(index, 0, ...item); + } else { + arr.splice(index, 0, item); + } + return index; +} diff --git a/src/utils/array.spec.js b/src/utils/array.spec.js index be78bc3..25776a0 100644 --- a/src/utils/array.spec.js +++ b/src/utils/array.spec.js @@ -3,23 +3,43 @@ const {insertSorted} = require('./array'); describe('Utils - Array', () => { - it('should insertSorted works with num', function () { - const arr = [7]; - insertSorted(arr, 6); - expect(arr).to.deep.equal([6, 7]) - insertSorted(arr, 8); - expect(arr).to.deep.equal([6, 7, 8]) - insertSorted(arr, 10); - expect(arr).to.deep.equal([6, 7, 8, 10]) - }); - it('should insertSorted works with string', function () { - const arr = ['alex']; - insertSorted(arr, 'alain'); - expect(arr).to.deep.equal(['alain','alex']) - insertSorted(arr, 'jean'); - expect(arr).to.deep.equal(['alain','alex','jean']) - insertSorted(arr, 'zachary'); - expect(arr).to.deep.equal(['alain','alex','jean','zachary']) - }); - + it('should insertSorted works with num', function () { + const arr = [7]; + insertSorted(arr, 6); + expect(arr).to.deep.equal([6, 7]) + insertSorted(arr, 8); + expect(arr).to.deep.equal([6, 7, 8]) + insertSorted(arr, 10); + expect(arr).to.deep.equal([6, 7, 8, 10]) + }); + it('should insertSorted works with string', function () { + const arr = ['alex']; + insertSorted(arr, 'alain'); + expect(arr).to.deep.equal(['alain', 'alex']) + insertSorted(arr, 'jean'); + expect(arr).to.deep.equal(['alain', 'alex', 'jean']) + insertSorted(arr, 'zachary'); + expect(arr).to.deep.equal(['alain', 'alex', 'jean', 'zachary']) + }); + it('should insertSorted works with array', function () { + const arr = ['alex']; + insertSorted(arr, ['alain', 'jean']); + expect(arr).to.deep.equal(['alain', 'jean', 'alex']) + insertSorted(arr, ['zachary', 'yann']); + expect(arr).to.deep.equal(['alain', 'jean', 'yann', 'zachary', 'alex']) + }); + it('should insertSorted works with array and num', function () { + const arr = ['alex']; + insertSorted(arr, ['alain', 'jean']); + expect(arr).to.deep.equal(['alain', 'jean', 'alex']) + insertSorted(arr, 1); + expect(arr).to.deep.equal([1, 'alain', 'jean', 'alex']) + }); + it('should insertSorted works with array and string', function () { + const arr = ['alex']; + insertSorted(arr, ['alain', 'jean']); + expect(arr).to.deep.equal(['alain', 'jean', 'alex']) + insertSorted(arr, 'zachary'); + expect(arr).to.deep.equal(['alain', 'jean', 'zachary', 'alex']) + }); }); diff --git a/src/utils/ascii.js b/src/utils/ascii.js index 251d085..b6016a8 100644 --- a/src/utils/ascii.js +++ b/src/utils/ascii.js @@ -1,81 +1,82 @@ -const { forEach } = require('./array'); +import {forEach} from './array.js'; /* Cheap drawing implementation. Would need deep rework to make it really working. */ const draw = async (fieldNode, preventConsole = false) => { - if (fieldNode.id[0] === 't') { - !preventConsole && console.log('======== SBTree Tree ========'); - !preventConsole && console.log(`=== Id : ${fieldNode.id}`); - !preventConsole && console.log(`=== Order : ${fieldNode.order}`); - if (Object.keys(fieldNode.fieldTrees).length === 0) { - !preventConsole && console.log('=== Empty.'); - return []; + if (fieldNode.id[0] === 't') { + !preventConsole && console.log('======== SBTree Tree ========'); + !preventConsole && console.log(`=== Id : ${fieldNode.id}`); + !preventConsole && console.log(`=== Order : ${fieldNode.order}`); + if (Object.keys(fieldNode.fieldTrees).length === 0) { + !preventConsole && console.log('=== Empty.'); + return []; + } + let res = []; + await forEach(Object.keys(fieldNode.fieldTrees), async (fieldKey) => { + const fieldTree = fieldNode.fieldTrees[fieldKey]; + res = res.concat(await draw(fieldTree, preventConsole)); + }); + return res; } - let res = []; - await forEach(Object.keys(fieldNode.fieldTrees), async (fieldKey) => { - const fieldTree = fieldNode.fieldTrees[fieldKey]; - res = res.concat(await draw(fieldTree, preventConsole)); - }); - return res; - } - !preventConsole && console.log('======== SBTree Node ========'); - !preventConsole && console.log(`=== Id : ${fieldNode.id}`); - !preventConsole && console.log(`=== Order : ${fieldNode.order}`); - !preventConsole && console.log(`=== Field : ${fieldNode.fieldName}`); + !preventConsole && console.log('======== SBTree Node ========'); + !preventConsole && console.log(`=== Id : ${fieldNode.id}`); + !preventConsole && console.log(`=== Order : ${fieldNode.order}`); + !preventConsole && console.log(`=== Field : ${fieldNode.fieldName}`); - const { root } = fieldNode; - const rows = []; + const {root} = fieldNode; + const rows = []; - const processChildrenToRows = async (_childrens) => { - let childToProcess = []; - const childrens = []; - await forEach(_childrens, async (child) => { - if (child.type === 'leaf') { - childrens.push((await child.getAll()).keys); - } else if (child.type === 'node') { - childrens.push(child.keys); - childToProcess = childToProcess.concat(child.childrens); - } else { - throw new Error(`Received invalid type ${child.type}`); - } - }); + const processChildrenToRows = async (_childrens) => { + let childToProcess = []; + const childrens = []; + await forEach(_childrens, async (child) => { + if (child.type === 'leaf') { + childrens.push((await child.getAll()).keys); + } else if (child.type === 'node') { + childrens.push(child.keys); + childToProcess = childToProcess.concat(child.childrens); + } else { + throw new Error(`Received invalid type ${child.type}`); + } + }); - rows.push(childrens); - return childToProcess; - }; + rows.push(childrens); + return childToProcess; + }; - const processRootChildrens = async (_childrens) => await processChildrenToRows(_childrens); - const processLeafs = async (_leafs) => { - const toProcessChildren = await processChildrenToRows(_leafs); - if (toProcessChildren.length > 0) { - await processLeafs(toProcessChildren); - } - }; - const processFromRoot = async (_root) => { - rows.push(_root.keys); - if (_root.childrens.length > 0) { - const childrensToProcess = await processRootChildrens(_root.childrens); + const processRootChildrens = async (_childrens) => await processChildrenToRows(_childrens); + const processLeafs = async (_leafs) => { + const toProcessChildren = await processChildrenToRows(_leafs); + if (toProcessChildren.length > 0) { + await processLeafs(toProcessChildren); + } + }; + const processFromRoot = async (_root) => { + rows.push(_root.keys); + if (_root.childrens.length > 0) { + const childrensToProcess = await processRootChildrens(_root.childrens); - if (childrensToProcess.length) { - await processLeafs(childrensToProcess); - } - } - }; + if (childrensToProcess.length) { + await processLeafs(childrensToProcess); + } + } + }; - await processFromRoot(root); + await processFromRoot(root); - const spanVal = 2; - const biggestChildLen = rows[rows.length - 1].length; - const biggestRepeatTimes = biggestChildLen * spanVal; + const spanVal = 2; + const biggestChildLen = rows[rows.length - 1].length; + const biggestRepeatTimes = biggestChildLen * spanVal; - rows.forEach((row, i) => { - // const next = rows[i+1] || []; - const calc = biggestRepeatTimes - (i * spanVal * 2); - const repeatTimes = (calc > 0) ? calc : 0; - !preventConsole && console.log(`${' '.repeat(repeatTimes)}${JSON.stringify(row)}`); - }); - return rows; + rows.forEach((row, i) => { + // const next = rows[i+1] || []; + const calc = biggestRepeatTimes - (i * spanVal * 2); + const repeatTimes = (calc > 0) ? calc : 0; + !preventConsole && console.log(`${' '.repeat(repeatTimes)}${JSON.stringify(row)}`); + }); + return rows; }; -module.exports = { draw }; + +export {draw}; diff --git a/src/utils/ascii.spec.js b/src/utils/ascii.spec.js new file mode 100644 index 0000000..61ae6dd --- /dev/null +++ b/src/utils/ascii.spec.js @@ -0,0 +1,57 @@ +import {expect} from 'chai'; +import { draw } from "./ascii.js"; + +describe('Utils - Ascii', () => { + it('should draw works', async function () { + const res = await draw({ + id: 'root', + order: 3, + fieldName: 'name', + root: { + keys: ['alex', 'alain', 'jean', 'yann', 'zachary'], + childrens: [ + { + keys: ['alex', 'alain'], + childrens: [ + { + keys: ['alex'], + childrens: [] + }, + { + keys: ['alain'], + childrens: [] + } + ] + }, + { + keys: ['jean', 'yann', 'zachary'], + childrens: [ + { + keys: ['jean'], + childrens: [] + }, + { + keys: ['yann', 'zachary'], + childrens: [ + { + keys: ['yann'], + childrens: [] + }, + { + keys: ['zachary'], + childrens: [] + } + ] + } + ] + } + ] + } + }); + console.log({res}) + expect(res).to.deep.equal([ + ['alex', 'alain', 'jean', 'yann', 'zachary'], + [], + ]); + }); +}); diff --git a/src/utils/comparators.js b/src/utils/comparators.js index 359d381..df6144e 100644 --- a/src/utils/comparators.js +++ b/src/utils/comparators.js @@ -1,15 +1,14 @@ -const comparatorString = function (a, b) { +export function comparatorString(a, b) { if (typeof a !== 'string') a = String(a); if (typeof b !== 'string') b = String(b); return (a > b ? 1 : (a < b ? -1 : 0)); }; -function comparatorNum(a, b) { +export function comparatorNum(a, b) { return (a > b ? 1 : (a < b ? -1 : 0)); }; -const comparators = { - comparatorNum, - comparatorString, +export function comparatorDate(a, b) { + return (a.getTime() > b.getTime() ? 1 : (a.getTime() < b.getTime() ? -1 : 0)); }; -export default comparators; + diff --git a/src/utils/comparators.spec.js b/src/utils/comparators.spec.js new file mode 100644 index 0000000..006f8e1 --- /dev/null +++ b/src/utils/comparators.spec.js @@ -0,0 +1,44 @@ +import {expect} from 'chai'; +import { comparatorDate, comparatorNum, comparatorString } from "./comparators.js"; + +describe('Utils - Comparators', () => { + it('should comparatorString works', async function () { + expect(comparatorString('a', 'b')).to.equal(-1); + expect(comparatorString('b', 'a')).to.equal(1); + expect(comparatorString('a', 'a')).to.equal(0); + + // should handle more complex cases + expect(comparatorString('a', 1)).to.equal(-1); + expect(comparatorString(1, 'a')).to.equal(1); + expect(comparatorString('1', 1)).to.equal(0); + expect(comparatorString('1', 2)).to.equal(-1); + expect(comparatorString(2, '1')).to.equal(1); + expect(comparatorString('2', 2)).to.equal(0); + }); + it('should comparatorNum works', async function () { + expect(comparatorNum(1, 2)).to.equal(-1); + expect(comparatorNum(2, 1)).to.equal(1); + expect(comparatorNum(1, 1)).to.equal(0); + + // should handle more complex cases + expect(comparatorNum('a', 1)).to.equal(-1); + expect(comparatorNum(1, 'a')).to.equal(1); + expect(comparatorNum('1', 1)).to.equal(0); + expect(comparatorNum('1', 2)).to.equal(-1); + expect(comparatorNum(2, '1')).to.equal(1); + expect(comparatorNum('2', 2)).to.equal(0); + }); + it('should comparatorDate works', async function () { + expect(comparatorDate(new Date(2020, 1, 1), new Date(2020, 1, 2))).to.equal(-1); + expect(comparatorDate(new Date(2020, 1, 2), new Date(2020, 1, 1))).to.equal(1); + expect(comparatorDate(new Date(2020, 1, 1), new Date(2020, 1, 1))).to.equal(0); + + // should handle more complex cases + expect(comparatorDate('a', 1)).to.equal(-1); + expect(comparatorDate(1, 'a')).to.equal(1); + expect(comparatorDate('1', 1)).to.equal(0); + expect(comparatorDate('1', 2)).to.equal(-1); + expect(comparatorDate(2, '1')).to.equal(1); + expect(comparatorDate('2', 2)).to.equal(0); + }); +}); diff --git a/src/utils/crypto.js b/src/utils/crypto.js index ee7ac58..1be9ede 100644 --- a/src/utils/crypto.js +++ b/src/utils/crypto.js @@ -36,4 +36,4 @@ crypto.generateTreeId = () => crypto.generateRandId('t'); crypto.generateNodeId = () => crypto.generateRandId('n'); crypto.generateRootId = () => crypto.generateRandId('r'); -module.exports = crypto; +export default crypto; diff --git a/src/utils/fn.js b/src/utils/fn.js index afc4704..e69bcb6 100644 --- a/src/utils/fn.js +++ b/src/utils/fn.js @@ -15,4 +15,5 @@ const waitFor = async (watchedObject, watchedProp, successCallback) => { setTimeout(resolver, 10000); }); }; -module.exports = { waitFor }; + +export { waitFor }; diff --git a/src/utils/index.js b/src/utils/index.js index 95843d5..3211039 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,7 +1,13 @@ -module.exports = { - ascii: require('./ascii'), - array: require('./array'), - comparators: require('./comparators'), - crypto: require('./crypto'), - time: require('./time'), -}; +import array from "./array.js"; +import ascii from "./ascii.js"; +import comparators from "./comparators.js"; +import crypto from './crypto.js'; +import time from './time.js'; + +export default { + array, + ascii, + comparators, + crypto, + time, +} diff --git a/src/utils/time.js b/src/utils/time.js index f813be1..efd0355 100644 --- a/src/utils/time.js +++ b/src/utils/time.js @@ -23,4 +23,5 @@ class Timer { const time = { Timer, }; -module.exports = time; + +export default time; From e24df592d198744aa4b88fa5f9d43efe040d9ceb Mon Sep 17 00:00:00 2001 From: Alex Werner Date: Thu, 11 Jan 2024 11:39:16 +0100 Subject: [PATCH 3/9] feat: additional to ESM convert --- src/adapters/FsAdapter/FsAdapter.js | 2 +- src/adapters/FsAdapter/methods/addInLeaf.js | 4 +- .../FsAdapter/methods/attachParent.js | 5 +- src/adapters/FsAdapter/methods/createLeaf.js | 6 +- src/adapters/FsAdapter/methods/findInLeaf.js | 9 +- .../FsAdapter/methods/getAllInLeaf.js | 4 +- src/adapters/FsAdapter/methods/getDocument.js | 4 +- .../FsAdapter/methods/getLeftInLeaf.js | 5 +- .../FsAdapter/methods/getRightInLeaf.js | 5 +- .../FsAdapter/methods/insertSortedInLeaf.js | 6 +- .../FsAdapter/methods/loadDatabase.js | 8 +- .../FsAdapter/methods/openDocument.js | 2 +- src/adapters/FsAdapter/methods/openLeaf.js | 2 +- .../FsAdapter/methods/openLeafData.js | 4 +- .../FsAdapter/methods/ops/autosave.js | 2 +- .../methods/ops/getStrictMatchingKeys.js | 2 +- .../FsAdapter/methods/ops/greaterThanKeys.js | 2 +- .../FsAdapter/methods/ops/lowerThanKeys.js | 2 +- .../FsAdapter/methods/removeDocument.js | 2 +- .../FsAdapter/methods/replaceDocument.js | 2 +- .../FsAdapter/methods/replaceInLeaf.js | 4 +- .../FsAdapter/methods/saveDatabase.js | 5 +- .../FsAdapter/methods/saveDocument.js | 2 +- .../FsAdapter/methods/saveLeafData.js | 2 +- src/adapters/FsAdapter/methods/splitLeaf.js | 2 +- .../FsAdapter/methods/updateDocument.js | 2 +- .../FsAdapter/types/LeafData/LeafData.js | 2 +- .../FsAdapter/types/LeafMeta/LeafMeta.js | 2 +- src/adapters/MemoryAdapter/MemoryAdapter.js | 2 +- .../MemoryAdapter/methods/addInLeaf.js | 2 +- .../MemoryAdapter/methods/addInLeaf.spec.js | 2 +- .../MemoryAdapter/methods/createLeaf.js | 2 +- .../MemoryAdapter/methods/createLeaf.spec.js | 2 +- .../MemoryAdapter/methods/findInLeaf.js | 2 +- .../MemoryAdapter/methods/findInLeaf.spec.js | 2 +- .../MemoryAdapter/methods/getAllInLeaf.js | 2 +- .../MemoryAdapter/methods/getDocument.js | 2 +- .../MemoryAdapter/methods/getLeft.spec.js | 2 +- .../MemoryAdapter/methods/getLeftInLeaf.js | 2 +- .../MemoryAdapter/methods/getRight.spec.js | 2 +- .../MemoryAdapter/methods/getRightInLeaf.js | 2 +- .../MemoryAdapter/methods/openLeaf.js | 2 +- .../methods/ops/getStrictMatchingKeys.js | 2 +- .../methods/ops/greaterThanKeys.js | 2 +- .../methods/ops/lowerThanKeys.js | 2 +- .../MemoryAdapter/methods/removeDocument.js | 2 +- .../MemoryAdapter/methods/removeInLeaf.js | 2 +- .../methods/removeInLeaf.spec.js | 2 +- .../MemoryAdapter/methods/replaceDocument.js | 2 +- .../MemoryAdapter/methods/replaceInLeaf.js | 2 +- .../MemoryAdapter/methods/saveDocument.js | 2 +- .../MemoryAdapter/methods/splitLeaf.js | 2 +- src/adapters/MemoryAdapter/types/Data.js | 2 +- src/adapters/MemoryAdapter/types/Meta.js | 2 +- src/adapters/index.js | 2 +- src/index.js | 1 - src/index.spec.js | 1 - src/types/SBFLeaf/SBFLeaf.js | 2 +- src/types/SBFLeaf/SBFLeaf.spec.js | 2 +- src/types/SBFLeaf/methods/find.js | 2 +- src/types/SBFLeaf/methods/find.spec.js | 5 +- src/types/SBFLeaf/methods/findGreaterThan.js | 2 +- .../SBFLeaf/methods/findGreaterThan.spec.js | 2 +- src/types/SBFLeaf/methods/findLowerThan.js | 2 +- .../SBFLeaf/methods/findLowerThan.spec.js | 2 +- src/types/SBFLeaf/methods/getAll.js | 2 +- src/types/SBFLeaf/methods/getAll.spec.js | 2 +- src/types/SBFLeaf/methods/getFillStatus.js | 3 +- .../SBFLeaf/methods/getFillStatus.spec.js | 2 +- src/types/SBFLeaf/methods/getLeft.js | 2 +- src/types/SBFLeaf/methods/getLeft.spec.js | 2 +- src/types/SBFLeaf/methods/getRight.js | 2 +- src/types/SBFLeaf/methods/getRight.spec.js | 2 +- src/types/SBFLeaf/methods/insert.js | 2 +- src/types/SBFLeaf/methods/insert.spec.js | 2 +- .../SBFLeaf/methods/isFillFactorFilled.js | 2 +- .../methods/isFillFactorFilled.spec.js | 2 +- src/types/SBFLeaf/methods/isFull.js | 2 +- src/types/SBFLeaf/methods/isFull.spec.js | 2 +- .../SBFLeaf/methods/mergeWithSiblings.js | 2 +- src/types/SBFLeaf/methods/redistribute.js | 2 +- src/types/SBFLeaf/methods/remove.js | 2 +- src/types/SBFLeaf/methods/remove.spec.js | 2 +- src/types/SBFLeaf/methods/replace.js | 2 +- src/types/SBFLeaf/methods/split.js | 2 +- src/types/SBFLeaf/methods/split.spec.js | 2 +- src/types/SBFNode/SBFNode.js | 2 +- src/types/SBFNode/SBFNode.spec.js | 2 +- src/types/SBFNode/methods/attachLeaf.js | 2 +- src/types/SBFNode/methods/find.js | 2 +- src/types/SBFNode/methods/findGreaterThan.js | 2 +- src/types/SBFNode/methods/findLowerThan.js | 2 +- src/types/SBFNode/methods/getAdapter.js | 2 +- src/types/SBFNode/methods/getAll.js | 2 +- src/types/SBFNode/methods/getFillStatus.js | 2 +- src/types/SBFNode/methods/getTreeOptions.js | 2 +- src/types/SBFNode/methods/insert.js | 2 +- .../SBFNode/methods/insertReferenceKey.js | 2 +- src/types/SBFNode/methods/isFull.js | 2 +- src/types/SBFNode/methods/mergeUp.js | 2 +- src/types/SBFNode/methods/remove.js | 2 +- src/types/SBFNode/methods/replace.js | 2 +- src/types/SBFNode/methods/split.js | 2 +- src/types/SBFRoot/SBFRoot.js | 2 +- src/types/SBFRoot/methods/attachLeaf.js | 2 +- src/types/SBFRoot/methods/find.js | 2 +- src/types/SBFRoot/methods/find.spec.js | 2 +- src/types/SBFRoot/methods/get.js | 2 +- src/types/SBFRoot/methods/getAdapter.js | 2 +- src/types/SBFRoot/methods/getAll.js | 2 +- src/types/SBFRoot/methods/getAll.spec.js | 2 +- src/types/SBFRoot/methods/getFillStatus.js | 2 +- src/types/SBFRoot/methods/getTreeOptions.js | 2 +- src/types/SBFRoot/methods/insert.js | 2 +- .../SBFRoot/methods/insertReferenceKey.js | 2 +- src/types/SBFRoot/methods/isFull.js | 2 +- src/types/SBFRoot/methods/mergeDown.js | 2 +- src/types/SBFRoot/methods/ops/findEquals.js | 2 +- .../SBFRoot/methods/ops/findGreaterThan.js | 2 +- .../SBFRoot/methods/ops/findLowerThan.js | 2 +- src/types/SBFRoot/methods/remove.js | 2 +- src/types/SBFRoot/methods/replace.js | 2 +- src/types/SBFRoot/methods/split.js | 2 +- src/types/SBFTree/SBFTree.js | 2 +- src/types/SBFTree/SBFTree.spec.js | 2 +- src/types/SBFTree/methods/createRoot.js | 2 +- src/types/SBFTree/methods/find.js | 2 +- src/types/SBFTree/methods/get.js | 2 +- src/types/SBFTree/methods/insert.js | 2 +- src/types/SBFTree/methods/remove.js | 2 +- src/types/SBFTree/methods/replace.js | 2 +- src/types/SBTree/SBTree.js | 2 +- src/types/SBTree/SBTree.spec.js | 2 +- src/types/SBTree/methods/deleteDocuments.js | 6 +- src/types/SBTree/methods/findDocuments.js | 5 +- .../SBTree/methods/findDocuments.spec.js | 5 +- src/types/SBTree/methods/getAdapter.js | 2 +- src/types/SBTree/methods/getDocument.js | 5 +- src/types/SBTree/methods/getFieldTree.js | 2 +- src/types/SBTree/methods/insertDocuments.js | 10 +- .../SBTree/methods/insertDocuments.spec.js | 5 +- src/types/SBTree/methods/loadState.js | 5 +- src/types/SBTree/methods/replaceDocuments.js | 6 +- src/types/SBTree/methods/setFieldTree.js | 6 +- src/types/SBTree/methods/toJSON.js | 2 +- src/types/SBTree/methods/updateDocuments.js | 6 +- src/types/SBTree/ops/RemoveCommand.js | 2 +- src/types/SBTree/ops/get.js | 6 +- src/types/SBTree/ops/get.spec.js | 2 +- src/types/SBTree/ops/insert.js | 2 +- src/types/SBTree/ops/insert.spec.js | 2 +- src/types/SBTree/ops/query.js | 2 +- src/types/SBTree/ops/query.spec.js | 2 +- src/types/SBTree/ops/remove.js | 2 +- src/types/SBTree/ops/remove.spec.js | 2 +- src/types/SBTree/ops/replace.js | 2 +- .../SBTree/utils/getFieldNamesFromQuery.js | 2 +- src/utils/array.spec.js | 8 +- src/utils/ascii.js | 2 +- src/utils/comparators.js | 30 ++++- src/utils/comparators.spec.js | 118 ++++++++++++------ src/utils/crypto.js | 42 +++---- src/utils/crypto.spec.js | 75 +++++++++++ src/utils/fn.js | 54 +++++--- src/utils/fn.spec.js | 42 +++++++ src/utils/time.js | 45 +++---- src/utils/time.spec.js | 44 +++++++ test/benchmark/1.standard.js | 11 +- test/benchmark/2.extended.js | 11 +- test/benchmark/3.multi-trees.js | 10 +- 170 files changed, 556 insertions(+), 338 deletions(-) create mode 100644 src/utils/crypto.spec.js create mode 100644 src/utils/fn.spec.js create mode 100644 src/utils/time.spec.js diff --git a/src/adapters/FsAdapter/FsAdapter.js b/src/adapters/FsAdapter/FsAdapter.js index a022ab9..db0ffa7 100644 --- a/src/adapters/FsAdapter/FsAdapter.js +++ b/src/adapters/FsAdapter/FsAdapter.js @@ -67,4 +67,4 @@ FsAdapter.prototype.saveDocument = require('./methods/saveDocument') FsAdapter.prototype.saveLeafData = require('./methods/saveLeafData') FsAdapter.prototype.splitLeaf = require('./methods/splitLeaf') FsAdapter.prototype.updateDocument = require('./methods/updateDocument') -module.exports = FsAdapter; +export default FsAdapter; diff --git a/src/adapters/FsAdapter/methods/addInLeaf.js b/src/adapters/FsAdapter/methods/addInLeaf.js index 74c07b7..ebd55a9 100644 --- a/src/adapters/FsAdapter/methods/addInLeaf.js +++ b/src/adapters/FsAdapter/methods/addInLeaf.js @@ -1,5 +1,3 @@ -const { insertSorted } = require('../../../utils/array'); - async function addInLeaf(leafName, identifier, value) { if (!this.leafs[leafName]) { await this.createLeaf(leafName); @@ -19,4 +17,4 @@ async function addInLeaf(leafName, identifier, value) { // await this.updateDocument(doc) } -module.exports = addInLeaf; +export default addInLeaf; diff --git a/src/adapters/FsAdapter/methods/attachParent.js b/src/adapters/FsAdapter/methods/attachParent.js index daf82b3..69bfe28 100644 --- a/src/adapters/FsAdapter/methods/attachParent.js +++ b/src/adapters/FsAdapter/methods/attachParent.js @@ -1,5 +1,4 @@ -const autosave = require('./ops/autosave'); - +import autosave from './ops/autosave.js'; async function attachParent(parent) { this.setParent(parent); @@ -20,4 +19,4 @@ async function attachParent(parent) { this.emit('ready'); } -module.exports = attachParent; +export default attachParent; diff --git a/src/adapters/FsAdapter/methods/createLeaf.js b/src/adapters/FsAdapter/methods/createLeaf.js index f235014..dd70438 100644 --- a/src/adapters/FsAdapter/methods/createLeaf.js +++ b/src/adapters/FsAdapter/methods/createLeaf.js @@ -1,7 +1,7 @@ -const LeafData = require('../types/LeafData/LeafData'); -const LeafMeta = require('../types/LeafMeta/LeafMeta'); +import LeafMeta from "../types/LeafMeta/LeafMeta.js"; +import LeafData from "../types/LeafData/LeafData.js"; -module.exports = async function createLeaf(leafId) { +export default async function createLeaf(leafId) { this.leafs[leafId] = { id: leafId, meta: new LeafMeta(), diff --git a/src/adapters/FsAdapter/methods/findInLeaf.js b/src/adapters/FsAdapter/methods/findInLeaf.js index 4094cf1..700c618 100644 --- a/src/adapters/FsAdapter/methods/findInLeaf.js +++ b/src/adapters/FsAdapter/methods/findInLeaf.js @@ -1,8 +1,7 @@ -const getStrictMatchingKeys = require('./ops/getStrictMatchingKeys'); -const lowerThanKeys = require('./ops/lowerThanKeys'); -const greaterThanKeys = require('./ops/greaterThanKeys'); - -module.exports = async function findInLeaf(leafId, value, op = '$eq') { +import getStrictMatchingKeys from './ops/getStrictMatchingKeys.js'; +import lowerThanKeys from './ops/lowerThanKeys.js'; +import greaterThanKeys from './ops/greaterThanKeys.js'; +export default async function findInLeaf(leafId, value, op = '$eq') { const result = { identifiers: [], keys: [], diff --git a/src/adapters/FsAdapter/methods/getAllInLeaf.js b/src/adapters/FsAdapter/methods/getAllInLeaf.js index b9ad947..773bcf2 100644 --- a/src/adapters/FsAdapter/methods/getAllInLeaf.js +++ b/src/adapters/FsAdapter/methods/getAllInLeaf.js @@ -1,6 +1,6 @@ -const cloneDeep = require('lodash.clonedeep'); +import cloneDeep from 'lodash.clonedeep'; -module.exports = async function getAllInLeaf(leafId) { +export default async function getAllInLeaf(leafId) { const { keys } = await this.openLeafData(leafId); if (!keys) { console.error(`leafId ${leafId} was not present, had to recreate`); diff --git a/src/adapters/FsAdapter/methods/getDocument.js b/src/adapters/FsAdapter/methods/getDocument.js index 40d6aef..07078ab 100644 --- a/src/adapters/FsAdapter/methods/getDocument.js +++ b/src/adapters/FsAdapter/methods/getDocument.js @@ -1,5 +1,5 @@ -const cloneDeep = require('lodash.clonedeep'); +import cloneDeep from 'lodash.clonedeep'; -module.exports = async function getDocument(identifier) { +export default async function getDocument(identifier) { return cloneDeep(await this.openDocument(identifier)); }; diff --git a/src/adapters/FsAdapter/methods/getLeftInLeaf.js b/src/adapters/FsAdapter/methods/getLeftInLeaf.js index 6a7a2ff..174dc1e 100644 --- a/src/adapters/FsAdapter/methods/getLeftInLeaf.js +++ b/src/adapters/FsAdapter/methods/getLeftInLeaf.js @@ -1,6 +1,5 @@ -const cloneDeep = require('lodash.clonedeep'); - -module.exports = async function getLeftInLeaf(leafId) { +import cloneDeep from 'lodash.clonedeep'; +export default async function getLeftInLeaf(leafId) { const { keys } = await this.openLeafData(leafId); if (!keys) { console.error(`leafId ${leafId} was not present, had to recreate`); diff --git a/src/adapters/FsAdapter/methods/getRightInLeaf.js b/src/adapters/FsAdapter/methods/getRightInLeaf.js index b42a8c2..c1463ce 100644 --- a/src/adapters/FsAdapter/methods/getRightInLeaf.js +++ b/src/adapters/FsAdapter/methods/getRightInLeaf.js @@ -1,6 +1,5 @@ -const cloneDeep = require('lodash.clonedeep'); - -module.exports = async function getRightInLeaf(leafId) { +import cloneDeep from "lodash.clonedeep"; +export default async function getRightInLeaf(leafId) { const { keys } = await this.openLeafData(leafId); if (!keys) { console.error(`leafId ${leafId} was not present, had to recreate`); diff --git a/src/adapters/FsAdapter/methods/insertSortedInLeaf.js b/src/adapters/FsAdapter/methods/insertSortedInLeaf.js index 67d1ae1..01c2b2c 100644 --- a/src/adapters/FsAdapter/methods/insertSortedInLeaf.js +++ b/src/adapters/FsAdapter/methods/insertSortedInLeaf.js @@ -1,6 +1,6 @@ -const { insertSorted } = require('../../../utils/array'); - -module.exports = async function insertSortedInLeaf(leafId, value) { +// const { insertSorted } = require('../../../utils/array'); +import insertSorted from '../../../utils/array.js'; +export default async function insertSortedInLeaf(leafId, value) { const data = await this.openLeafData(leafId); if (!data || !data.keys) { console.error(`leafId ${leafId} was not present, had to recreate`); diff --git a/src/adapters/FsAdapter/methods/loadDatabase.js b/src/adapters/FsAdapter/methods/loadDatabase.js index 25d5ab1..203a326 100644 --- a/src/adapters/FsAdapter/methods/loadDatabase.js +++ b/src/adapters/FsAdapter/methods/loadDatabase.js @@ -1,8 +1,6 @@ -const each = require('lodash.foreach'); -const LeafData = require('../types/LeafData/LeafData'); -const LeafMeta = require('../types/LeafMeta/LeafMeta'); - -module.exports = async function loadDatabase() { +import each from 'lodash.foreach'; +import LeafMeta from "../types/LeafMeta/LeafMeta.js"; +export default async function loadDatabase() { const job = await this.queue.add('File.read', `${this.path}/sbtree.meta`); await job.execution(); const db = job.result; diff --git a/src/adapters/FsAdapter/methods/openDocument.js b/src/adapters/FsAdapter/methods/openDocument.js index 9ddead0..5b6ec55 100644 --- a/src/adapters/FsAdapter/methods/openDocument.js +++ b/src/adapters/FsAdapter/methods/openDocument.js @@ -1,4 +1,4 @@ -module.exports = async function openDocument(identifer) { +export default async function openDocument(identifer) { const job = await this.queue.add('File.read', `${this.path}/d/${identifer}.dat`).execution(); let data = {}; if (job.result.constructor.name !== Error.name) { diff --git a/src/adapters/FsAdapter/methods/openLeaf.js b/src/adapters/FsAdapter/methods/openLeaf.js index 776b077..2d63d08 100644 --- a/src/adapters/FsAdapter/methods/openLeaf.js +++ b/src/adapters/FsAdapter/methods/openLeaf.js @@ -1,4 +1,4 @@ -module.exports = async function openLeaf(leafName) { +export default async function openLeaf(leafName) { if (!this.leafs[leafName]) { throw new Error('Leaf do not exist'); } diff --git a/src/adapters/FsAdapter/methods/openLeafData.js b/src/adapters/FsAdapter/methods/openLeafData.js index d081d9b..1746023 100644 --- a/src/adapters/FsAdapter/methods/openLeafData.js +++ b/src/adapters/FsAdapter/methods/openLeafData.js @@ -1,6 +1,4 @@ -const LeafData = require('../types/LeafData/LeafData'); - -module.exports = async function openLeafData(leafName) { +export default async function openLeafData(leafName) { const job = await this.queue.add('File.read', `${this.path}/l/${leafName}.dat`).execution(); let data = {}; if (job.result.constructor.name !== Error.name) { diff --git a/src/adapters/FsAdapter/methods/ops/autosave.js b/src/adapters/FsAdapter/methods/ops/autosave.js index 85b9389..31f0f06 100644 --- a/src/adapters/FsAdapter/methods/ops/autosave.js +++ b/src/adapters/FsAdapter/methods/ops/autosave.js @@ -1,4 +1,4 @@ -module.exports = async function autosave(self) { +export default async function autosave(self) { const next = async (self) => { if ((self.lastChange !== null && self.lastSave === null) || (self.lastChange > self.lastSave)) { await self.saveDatabase(); diff --git a/src/adapters/FsAdapter/methods/ops/getStrictMatchingKeys.js b/src/adapters/FsAdapter/methods/ops/getStrictMatchingKeys.js index 1c86f65..5d685c9 100644 --- a/src/adapters/FsAdapter/methods/ops/getStrictMatchingKeys.js +++ b/src/adapters/FsAdapter/methods/ops/getStrictMatchingKeys.js @@ -6,4 +6,4 @@ function getStrictMatchingKeys(arr, val) { } return indexes; } -module.exports = getStrictMatchingKeys; +export default getStrictMatchingKeys; diff --git a/src/adapters/FsAdapter/methods/ops/greaterThanKeys.js b/src/adapters/FsAdapter/methods/ops/greaterThanKeys.js index 89cb57f..3f3ba75 100644 --- a/src/adapters/FsAdapter/methods/ops/greaterThanKeys.js +++ b/src/adapters/FsAdapter/methods/ops/greaterThanKeys.js @@ -1,4 +1,4 @@ function greaterThanKeys(arr, val) { return arr.filter((el) => el > val); } -module.exports = greaterThanKeys; +export default greaterThanKeys; diff --git a/src/adapters/FsAdapter/methods/ops/lowerThanKeys.js b/src/adapters/FsAdapter/methods/ops/lowerThanKeys.js index b198448..37fcf0f 100644 --- a/src/adapters/FsAdapter/methods/ops/lowerThanKeys.js +++ b/src/adapters/FsAdapter/methods/ops/lowerThanKeys.js @@ -1,4 +1,4 @@ function lowerThanKeys(arr, val) { return arr.filter((el) => el < val); } -module.exports = lowerThanKeys; +export default lowerThanKeys; diff --git a/src/adapters/FsAdapter/methods/removeDocument.js b/src/adapters/FsAdapter/methods/removeDocument.js index b2b24ce..7a64a27 100644 --- a/src/adapters/FsAdapter/methods/removeDocument.js +++ b/src/adapters/FsAdapter/methods/removeDocument.js @@ -6,4 +6,4 @@ async function removeDocument(identifier) { const job = await this.queue.add('File.remove', `${this.path}/d/${identifier}.dat`); await job.execution(); } -module.exports = removeDocument; +export default removeDocument; diff --git a/src/adapters/FsAdapter/methods/replaceDocument.js b/src/adapters/FsAdapter/methods/replaceDocument.js index 0949709..31455d0 100644 --- a/src/adapters/FsAdapter/methods/replaceDocument.js +++ b/src/adapters/FsAdapter/methods/replaceDocument.js @@ -1,4 +1,4 @@ -module.exports = async function replaceDocument(doc) { +export default async function replaceDocument(doc) { if (!doc || !doc._id) { console.error(doc); throw new Error('Cannot replace document, expected id'); diff --git a/src/adapters/FsAdapter/methods/replaceInLeaf.js b/src/adapters/FsAdapter/methods/replaceInLeaf.js index 15865a5..2cbd934 100644 --- a/src/adapters/FsAdapter/methods/replaceInLeaf.js +++ b/src/adapters/FsAdapter/methods/replaceInLeaf.js @@ -1,5 +1,3 @@ -const { insertSorted } = require('../../../utils/array'); - async function replaceInLeaf(leafId, identifier, value) { if (!this.leafs[leafId].meta.identifiers.includes(identifier)) { // TODO : except unique:false? @@ -13,4 +11,4 @@ async function replaceInLeaf(leafId, identifier, value) { return index; } -module.exports = replaceInLeaf; +export default replaceInLeaf; diff --git a/src/adapters/FsAdapter/methods/saveDatabase.js b/src/adapters/FsAdapter/methods/saveDatabase.js index 4192678..a92aa6c 100644 --- a/src/adapters/FsAdapter/methods/saveDatabase.js +++ b/src/adapters/FsAdapter/methods/saveDatabase.js @@ -1,6 +1,5 @@ -const cloneDeep = require('lodash.clonedeep'); - -module.exports = async function saveDatabase() { +import cloneDeep from 'lodash.clonedeep'; +export default async function saveDatabase() { const leafs = cloneDeep(this.leafs); const tree = this.getParent().toJSON(); const db = { diff --git a/src/adapters/FsAdapter/methods/saveDocument.js b/src/adapters/FsAdapter/methods/saveDocument.js index a8835fe..ba21bb1 100644 --- a/src/adapters/FsAdapter/methods/saveDocument.js +++ b/src/adapters/FsAdapter/methods/saveDocument.js @@ -1,4 +1,4 @@ -module.exports = async function saveDocument(doc) { +export default async function saveDocument(doc) { if (!doc || !doc._id) { console.error(doc); throw new Error('Cannot save document, expected id'); diff --git a/src/adapters/FsAdapter/methods/saveLeafData.js b/src/adapters/FsAdapter/methods/saveLeafData.js index 524f9f5..17489b6 100644 --- a/src/adapters/FsAdapter/methods/saveLeafData.js +++ b/src/adapters/FsAdapter/methods/saveLeafData.js @@ -1,4 +1,4 @@ -module.exports = async function saveLeafData(leafName, data) { +export default async function saveLeafData(leafName, data) { const job = await this.queue.add('File.create', `${this.path}/l/${leafName}.dat`, data).execution(); let res = {}; if (!job.result) { diff --git a/src/adapters/FsAdapter/methods/splitLeaf.js b/src/adapters/FsAdapter/methods/splitLeaf.js index d5aeef6..e6a8af1 100644 --- a/src/adapters/FsAdapter/methods/splitLeaf.js +++ b/src/adapters/FsAdapter/methods/splitLeaf.js @@ -1,4 +1,4 @@ -module.exports = async function splitLeaf(sourceLeaf, siblingLeaf) { +export default async function splitLeaf(sourceLeaf, siblingLeaf) { if (!this.leafs[sourceLeaf.id]) { throw new Error('Source leaf do not exist'); } diff --git a/src/adapters/FsAdapter/methods/updateDocument.js b/src/adapters/FsAdapter/methods/updateDocument.js index 7a75338..d87526e 100644 --- a/src/adapters/FsAdapter/methods/updateDocument.js +++ b/src/adapters/FsAdapter/methods/updateDocument.js @@ -1,4 +1,4 @@ -module.exports = async function updateDocument(_doc) { +export default async function updateDocument(_doc) { const job = await this.queue.add('File.appendJSON', `${this.path}/d/${_doc._id}.dat`, _doc).execution(); let data = {}; if (job.result.constructor.name !== Error.name) { diff --git a/src/adapters/FsAdapter/types/LeafData/LeafData.js b/src/adapters/FsAdapter/types/LeafData/LeafData.js index 9029594..a376cee 100644 --- a/src/adapters/FsAdapter/types/LeafData/LeafData.js +++ b/src/adapters/FsAdapter/types/LeafData/LeafData.js @@ -3,4 +3,4 @@ class LeafData { this.keys = (props.keys) ? props.keys : []; } } -module.exports = LeafData; +export default LeafData; diff --git a/src/adapters/FsAdapter/types/LeafMeta/LeafMeta.js b/src/adapters/FsAdapter/types/LeafMeta/LeafMeta.js index cdf3052..e0bc463 100644 --- a/src/adapters/FsAdapter/types/LeafMeta/LeafMeta.js +++ b/src/adapters/FsAdapter/types/LeafMeta/LeafMeta.js @@ -4,4 +4,4 @@ class LeafMeta { this.identifiers = (props.identifiers) ? props.identifiers : []; } } -module.exports = LeafMeta; +export default LeafMeta; diff --git a/src/adapters/MemoryAdapter/MemoryAdapter.js b/src/adapters/MemoryAdapter/MemoryAdapter.js index 405d511..ad1ee0a 100644 --- a/src/adapters/MemoryAdapter/MemoryAdapter.js +++ b/src/adapters/MemoryAdapter/MemoryAdapter.js @@ -35,4 +35,4 @@ MemoryAdapter.prototype.replaceInLeaf = require('./methods/replaceInLeaf'); MemoryAdapter.prototype.saveDocument = require('./methods/saveDocument'); MemoryAdapter.prototype.splitLeaf = require('./methods/splitLeaf'); -module.exports = MemoryAdapter; +export default MemoryAdapter; diff --git a/src/adapters/MemoryAdapter/methods/addInLeaf.js b/src/adapters/MemoryAdapter/methods/addInLeaf.js index 53bda8e..63d3920 100644 --- a/src/adapters/MemoryAdapter/methods/addInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/addInLeaf.js @@ -20,4 +20,4 @@ async function addInLeaf(leafName, identifier, value) { meta.size += 1; meta.identifiers.splice(index, 0, identifier); } -module.exports = addInLeaf; +export default addInLeaf; diff --git a/src/adapters/MemoryAdapter/methods/addInLeaf.spec.js b/src/adapters/MemoryAdapter/methods/addInLeaf.spec.js index 80bb52c..f3840c3 100644 --- a/src/adapters/MemoryAdapter/methods/addInLeaf.spec.js +++ b/src/adapters/MemoryAdapter/methods/addInLeaf.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const MemoryAdapter = require('../MemoryAdapter'); describe('Adapters - MemoryAdapter - addInLeaf', function suite() { diff --git a/src/adapters/MemoryAdapter/methods/createLeaf.js b/src/adapters/MemoryAdapter/methods/createLeaf.js index ff1b352..388e666 100644 --- a/src/adapters/MemoryAdapter/methods/createLeaf.js +++ b/src/adapters/MemoryAdapter/methods/createLeaf.js @@ -11,4 +11,4 @@ async function createLeaf(leafName) { }; } -module.exports = createLeaf; +export default createLeaf; diff --git a/src/adapters/MemoryAdapter/methods/createLeaf.spec.js b/src/adapters/MemoryAdapter/methods/createLeaf.spec.js index 98d988a..ab4b6e5 100644 --- a/src/adapters/MemoryAdapter/methods/createLeaf.spec.js +++ b/src/adapters/MemoryAdapter/methods/createLeaf.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const MemoryAdapter = require('../MemoryAdapter'); const {expectThrowsAsync} = require('../../../../test/test.utils'); diff --git a/src/adapters/MemoryAdapter/methods/findInLeaf.js b/src/adapters/MemoryAdapter/methods/findInLeaf.js index 18bbdbc..7e77d5e 100644 --- a/src/adapters/MemoryAdapter/methods/findInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/findInLeaf.js @@ -3,7 +3,7 @@ const range = require('lodash.range'); const lowerThanKeys = require('./ops/lowerThanKeys'); const greaterThanKeys = require('./ops/greaterThanKeys'); -module.exports = async function findInLeaf(leafId, value, op = '$eq') { +export default async function findInLeaf(leafId, value, op = '$eq') { const leaf = this.leafs[leafId]; if (!leaf) { diff --git a/src/adapters/MemoryAdapter/methods/findInLeaf.spec.js b/src/adapters/MemoryAdapter/methods/findInLeaf.spec.js index 4d3c548..b7039a7 100644 --- a/src/adapters/MemoryAdapter/methods/findInLeaf.spec.js +++ b/src/adapters/MemoryAdapter/methods/findInLeaf.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const MemoryAdapter = require('../MemoryAdapter'); describe('Adapters - MemoryAdapter - findInLeaf', function suite() { diff --git a/src/adapters/MemoryAdapter/methods/getAllInLeaf.js b/src/adapters/MemoryAdapter/methods/getAllInLeaf.js index 1d0dd25..946e893 100644 --- a/src/adapters/MemoryAdapter/methods/getAllInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/getAllInLeaf.js @@ -1,6 +1,6 @@ const cloneDeep = require('lodash.clonedeep'); -module.exports = async function getAllInLeaf(leafId) { +export default async function getAllInLeaf(leafId) { const leaf = this.leafs[leafId]; return cloneDeep({ identifiers: leaf.meta.identifiers, keys: leaf.data.keys }); }; diff --git a/src/adapters/MemoryAdapter/methods/getDocument.js b/src/adapters/MemoryAdapter/methods/getDocument.js index a284f42..f979e15 100644 --- a/src/adapters/MemoryAdapter/methods/getDocument.js +++ b/src/adapters/MemoryAdapter/methods/getDocument.js @@ -1,6 +1,6 @@ const cloneDeep = require('lodash.clonedeep'); -module.exports = async function getDocument(identifier) { +export default async function getDocument(identifier) { const doc = this.documents[identifier]; if (!doc) { return null; diff --git a/src/adapters/MemoryAdapter/methods/getLeft.spec.js b/src/adapters/MemoryAdapter/methods/getLeft.spec.js index 34994b9..e97dc57 100644 --- a/src/adapters/MemoryAdapter/methods/getLeft.spec.js +++ b/src/adapters/MemoryAdapter/methods/getLeft.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const MemoryAdapter = require('../MemoryAdapter'); describe('Adapters - MemoryAdapter - getLeft', function suite() { diff --git a/src/adapters/MemoryAdapter/methods/getLeftInLeaf.js b/src/adapters/MemoryAdapter/methods/getLeftInLeaf.js index 48ab792..2a60537 100644 --- a/src/adapters/MemoryAdapter/methods/getLeftInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/getLeftInLeaf.js @@ -1,6 +1,6 @@ const cloneDeep = require('lodash.clonedeep'); -module.exports = async function getLeftInLeaf(leafId) { +export default async function getLeftInLeaf(leafId) { const leaf = this.leafs[leafId]; const { meta, data } = leaf; diff --git a/src/adapters/MemoryAdapter/methods/getRight.spec.js b/src/adapters/MemoryAdapter/methods/getRight.spec.js index 9ddedc6..8318005 100644 --- a/src/adapters/MemoryAdapter/methods/getRight.spec.js +++ b/src/adapters/MemoryAdapter/methods/getRight.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const MemoryAdapter = require('../MemoryAdapter'); describe('Adapters - MemoryAdapter - getRight', function suite() { diff --git a/src/adapters/MemoryAdapter/methods/getRightInLeaf.js b/src/adapters/MemoryAdapter/methods/getRightInLeaf.js index 4f71c08..f0ba26f 100644 --- a/src/adapters/MemoryAdapter/methods/getRightInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/getRightInLeaf.js @@ -1,6 +1,6 @@ const cloneDeep = require('lodash.clonedeep'); -module.exports = async function getRightInLeaf(leafId) { +export default async function getRightInLeaf(leafId) { const leaf = this.leafs[leafId]; const { meta, data } = leaf; diff --git a/src/adapters/MemoryAdapter/methods/openLeaf.js b/src/adapters/MemoryAdapter/methods/openLeaf.js index 776b077..2d63d08 100644 --- a/src/adapters/MemoryAdapter/methods/openLeaf.js +++ b/src/adapters/MemoryAdapter/methods/openLeaf.js @@ -1,4 +1,4 @@ -module.exports = async function openLeaf(leafName) { +export default async function openLeaf(leafName) { if (!this.leafs[leafName]) { throw new Error('Leaf do not exist'); } diff --git a/src/adapters/MemoryAdapter/methods/ops/getStrictMatchingKeys.js b/src/adapters/MemoryAdapter/methods/ops/getStrictMatchingKeys.js index 1c86f65..5d685c9 100644 --- a/src/adapters/MemoryAdapter/methods/ops/getStrictMatchingKeys.js +++ b/src/adapters/MemoryAdapter/methods/ops/getStrictMatchingKeys.js @@ -6,4 +6,4 @@ function getStrictMatchingKeys(arr, val) { } return indexes; } -module.exports = getStrictMatchingKeys; +export default getStrictMatchingKeys; diff --git a/src/adapters/MemoryAdapter/methods/ops/greaterThanKeys.js b/src/adapters/MemoryAdapter/methods/ops/greaterThanKeys.js index 89cb57f..3f3ba75 100644 --- a/src/adapters/MemoryAdapter/methods/ops/greaterThanKeys.js +++ b/src/adapters/MemoryAdapter/methods/ops/greaterThanKeys.js @@ -1,4 +1,4 @@ function greaterThanKeys(arr, val) { return arr.filter((el) => el > val); } -module.exports = greaterThanKeys; +export default greaterThanKeys; diff --git a/src/adapters/MemoryAdapter/methods/ops/lowerThanKeys.js b/src/adapters/MemoryAdapter/methods/ops/lowerThanKeys.js index b198448..37fcf0f 100644 --- a/src/adapters/MemoryAdapter/methods/ops/lowerThanKeys.js +++ b/src/adapters/MemoryAdapter/methods/ops/lowerThanKeys.js @@ -1,4 +1,4 @@ function lowerThanKeys(arr, val) { return arr.filter((el) => el < val); } -module.exports = lowerThanKeys; +export default lowerThanKeys; diff --git a/src/adapters/MemoryAdapter/methods/removeDocument.js b/src/adapters/MemoryAdapter/methods/removeDocument.js index 74a82a6..837fe33 100644 --- a/src/adapters/MemoryAdapter/methods/removeDocument.js +++ b/src/adapters/MemoryAdapter/methods/removeDocument.js @@ -3,4 +3,4 @@ async function removeDocument(identifier) { delete this.documents[identifier]; } } -module.exports = removeDocument; +export default removeDocument; diff --git a/src/adapters/MemoryAdapter/methods/removeInLeaf.js b/src/adapters/MemoryAdapter/methods/removeInLeaf.js index 92bb65f..d597984 100644 --- a/src/adapters/MemoryAdapter/methods/removeInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/removeInLeaf.js @@ -15,4 +15,4 @@ async function removeInLeaf(leafId, identifier) { return identifiers; } -module.exports = removeInLeaf; +export default removeInLeaf; diff --git a/src/adapters/MemoryAdapter/methods/removeInLeaf.spec.js b/src/adapters/MemoryAdapter/methods/removeInLeaf.spec.js index b3d7087..9308889 100644 --- a/src/adapters/MemoryAdapter/methods/removeInLeaf.spec.js +++ b/src/adapters/MemoryAdapter/methods/removeInLeaf.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const MemoryAdapter = require('../MemoryAdapter'); describe('Adapters - MemoryAdapter - removeInLeaf', function suite() { diff --git a/src/adapters/MemoryAdapter/methods/replaceDocument.js b/src/adapters/MemoryAdapter/methods/replaceDocument.js index 685132b..3d41b65 100644 --- a/src/adapters/MemoryAdapter/methods/replaceDocument.js +++ b/src/adapters/MemoryAdapter/methods/replaceDocument.js @@ -4,4 +4,4 @@ async function replaceDocument(doc) { } this.documents[doc._id] = doc; } -module.exports = replaceDocument; +export default replaceDocument; diff --git a/src/adapters/MemoryAdapter/methods/replaceInLeaf.js b/src/adapters/MemoryAdapter/methods/replaceInLeaf.js index 6f38db6..af8967f 100644 --- a/src/adapters/MemoryAdapter/methods/replaceInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/replaceInLeaf.js @@ -12,4 +12,4 @@ async function replaceInLeaf(leafId, identifier, value) { const index = meta.identifiers.indexOf(identifier); data.keys[index] = value; } -module.exports = replaceInLeaf; +export default replaceInLeaf; diff --git a/src/adapters/MemoryAdapter/methods/saveDocument.js b/src/adapters/MemoryAdapter/methods/saveDocument.js index 4858186..d220413 100644 --- a/src/adapters/MemoryAdapter/methods/saveDocument.js +++ b/src/adapters/MemoryAdapter/methods/saveDocument.js @@ -3,4 +3,4 @@ async function saveDocument(doc) { this.documents[doc._id] = doc; } } -module.exports = saveDocument; +export default saveDocument; diff --git a/src/adapters/MemoryAdapter/methods/splitLeaf.js b/src/adapters/MemoryAdapter/methods/splitLeaf.js index 8b00a3c..cfe8161 100644 --- a/src/adapters/MemoryAdapter/methods/splitLeaf.js +++ b/src/adapters/MemoryAdapter/methods/splitLeaf.js @@ -1,4 +1,4 @@ -module.exports = async function splitLeaf(sourceLeaf, siblingLeaf) { +export default async function splitLeaf(sourceLeaf, siblingLeaf) { if (!this.leafs[sourceLeaf.id]) { throw new Error('Source leaf do not exist'); } diff --git a/src/adapters/MemoryAdapter/types/Data.js b/src/adapters/MemoryAdapter/types/Data.js index 4f4355a..c773627 100644 --- a/src/adapters/MemoryAdapter/types/Data.js +++ b/src/adapters/MemoryAdapter/types/Data.js @@ -4,4 +4,4 @@ class Data { } } -module.exports = Data; +export default Data; diff --git a/src/adapters/MemoryAdapter/types/Meta.js b/src/adapters/MemoryAdapter/types/Meta.js index ecbadda..517323d 100644 --- a/src/adapters/MemoryAdapter/types/Meta.js +++ b/src/adapters/MemoryAdapter/types/Meta.js @@ -4,4 +4,4 @@ class Meta { this.identifiers = (props.identifiers) ? props.identifiers : []; } } -module.exports = Meta; +export default Meta; diff --git a/src/adapters/index.js b/src/adapters/index.js index 55e7a08..e39007e 100644 --- a/src/adapters/index.js +++ b/src/adapters/index.js @@ -1,4 +1,4 @@ -module.exports = { +export default { FsAdapter: require('./FsAdapter/FsAdapter.js'), MemoryAdapter: require('./MemoryAdapter/MemoryAdapter.js'), }; diff --git a/src/index.js b/src/index.js index cfc7334..43db714 100644 --- a/src/index.js +++ b/src/index.js @@ -2,7 +2,6 @@ import ObjectID from 'mongo-objectid'; import SBTree from './types/SBTree/SBTree'; import adapters from './adapters/index'; import utils from './utils/index'; - export default { SBTree, ObjectID, diff --git a/src/index.spec.js b/src/index.spec.js index cb1120e..e39240e 100644 --- a/src/index.spec.js +++ b/src/index.spec.js @@ -1,6 +1,5 @@ import {expect} from 'chai'; import indexSpec from './index'; - describe('SBTree', () => { it('should work', function () { expect(indexSpec).to.have.property('SBTree'); diff --git a/src/types/SBFLeaf/SBFLeaf.js b/src/types/SBFLeaf/SBFLeaf.js index bb5f41a..ccc5387 100644 --- a/src/types/SBFLeaf/SBFLeaf.js +++ b/src/types/SBFLeaf/SBFLeaf.js @@ -38,4 +38,4 @@ SFBLeaf.prototype.redistribute = require('./methods/redistribute'); SFBLeaf.prototype.remove = require('./methods/remove'); SFBLeaf.prototype.replace = require('./methods/replace'); SFBLeaf.prototype.split = require('./methods/split'); -module.exports = SFBLeaf; +export default SFBLeaf; diff --git a/src/types/SBFLeaf/SBFLeaf.spec.js b/src/types/SBFLeaf/SBFLeaf.spec.js index f38d722..fc50dbb 100644 --- a/src/types/SBFLeaf/SBFLeaf.spec.js +++ b/src/types/SBFLeaf/SBFLeaf.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const SBFLeaf = require('./SBFLeaf'); const MemoryAdpter = require('../../adapters/MemoryAdapter/MemoryAdapter'); const adapter = new MemoryAdpter() diff --git a/src/types/SBFLeaf/methods/find.js b/src/types/SBFLeaf/methods/find.js index d4cbf8e..9d4e124 100644 --- a/src/types/SBFLeaf/methods/find.js +++ b/src/types/SBFLeaf/methods/find.js @@ -1,4 +1,4 @@ -module.exports = async function find(value) { +export default async function find(value) { const adapter = this.getParent().getAdapter(); const res = await adapter.findInLeaf(this.id, value); return res; diff --git a/src/types/SBFLeaf/methods/find.spec.js b/src/types/SBFLeaf/methods/find.spec.js index 0d4fa17..3813f4f 100644 --- a/src/types/SBFLeaf/methods/find.spec.js +++ b/src/types/SBFLeaf/methods/find.spec.js @@ -1,5 +1,6 @@ -const {expect} = require('chai'); -const find = require('./find'); +// import { expect } from 'chai'; +import { expect } from 'chai'; +import find from './find.js'; let called = []; const self = { diff --git a/src/types/SBFLeaf/methods/findGreaterThan.js b/src/types/SBFLeaf/methods/findGreaterThan.js index f7cc5f3..25d3016 100644 --- a/src/types/SBFLeaf/methods/findGreaterThan.js +++ b/src/types/SBFLeaf/methods/findGreaterThan.js @@ -1,4 +1,4 @@ -module.exports = async function findGeaterThan(value, includeKey = false) { +export default async function findGeaterThan(value, includeKey = false) { const op = includeKey ? '$gte' : '$gt'; const adapter = this.getParent().getAdapter(); const res = await adapter.findInLeaf(this.id, value, op); diff --git a/src/types/SBFLeaf/methods/findGreaterThan.spec.js b/src/types/SBFLeaf/methods/findGreaterThan.spec.js index 2b8e3f3..360e452 100644 --- a/src/types/SBFLeaf/methods/findGreaterThan.spec.js +++ b/src/types/SBFLeaf/methods/findGreaterThan.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const findGreaterThan = require('./findGreaterThan'); let called = []; diff --git a/src/types/SBFLeaf/methods/findLowerThan.js b/src/types/SBFLeaf/methods/findLowerThan.js index 2c76cec..18f5a2d 100644 --- a/src/types/SBFLeaf/methods/findLowerThan.js +++ b/src/types/SBFLeaf/methods/findLowerThan.js @@ -1,4 +1,4 @@ -module.exports = async function findLowerThan(value, includeKey = false) { +export default async function findLowerThan(value, includeKey = false) { const op = includeKey ? '$lte' : '$lt'; const adapter = this.getParent().getAdapter(); const res = await adapter.findInLeaf(this.id, value, op); diff --git a/src/types/SBFLeaf/methods/findLowerThan.spec.js b/src/types/SBFLeaf/methods/findLowerThan.spec.js index 4ded5ca..473a6fd 100644 --- a/src/types/SBFLeaf/methods/findLowerThan.spec.js +++ b/src/types/SBFLeaf/methods/findLowerThan.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const findLowerThan = require('./findLowerThan'); let called = []; diff --git a/src/types/SBFLeaf/methods/getAll.js b/src/types/SBFLeaf/methods/getAll.js index f1bf790..86a0b3e 100644 --- a/src/types/SBFLeaf/methods/getAll.js +++ b/src/types/SBFLeaf/methods/getAll.js @@ -1,4 +1,4 @@ -module.exports = async function getAll() { +export default async function getAll() { const adapter = this.getParent().getAdapter(); const res = await adapter.getAllInLeaf(this.id); return res; diff --git a/src/types/SBFLeaf/methods/getAll.spec.js b/src/types/SBFLeaf/methods/getAll.spec.js index fbd40bc..3302b04 100644 --- a/src/types/SBFLeaf/methods/getAll.spec.js +++ b/src/types/SBFLeaf/methods/getAll.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const getAll = require('./getAll'); let called = []; diff --git a/src/types/SBFLeaf/methods/getFillStatus.js b/src/types/SBFLeaf/methods/getFillStatus.js index b19ca73..fbaa295 100644 --- a/src/types/SBFLeaf/methods/getFillStatus.js +++ b/src/types/SBFLeaf/methods/getFillStatus.js @@ -25,4 +25,5 @@ async function getFillStatus() { } throw e; } } -module.exports = getFillStatus; + +export default getFillStatus; diff --git a/src/types/SBFLeaf/methods/getFillStatus.spec.js b/src/types/SBFLeaf/methods/getFillStatus.spec.js index 62bd759..e1bdbc6 100644 --- a/src/types/SBFLeaf/methods/getFillStatus.spec.js +++ b/src/types/SBFLeaf/methods/getFillStatus.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const getFillStatus = require('./getFillStatus'); let called = []; diff --git a/src/types/SBFLeaf/methods/getLeft.js b/src/types/SBFLeaf/methods/getLeft.js index adacf1d..cde19d0 100644 --- a/src/types/SBFLeaf/methods/getLeft.js +++ b/src/types/SBFLeaf/methods/getLeft.js @@ -1,4 +1,4 @@ -module.exports = async function getLeft() { +export default async function getLeft() { const adapter = this.getParent().getAdapter(); const res = await adapter.getLeftInLeaf(this.id); return res; diff --git a/src/types/SBFLeaf/methods/getLeft.spec.js b/src/types/SBFLeaf/methods/getLeft.spec.js index e1dd250..8fac513 100644 --- a/src/types/SBFLeaf/methods/getLeft.spec.js +++ b/src/types/SBFLeaf/methods/getLeft.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const getLeft = require('./getLeft'); let called = []; diff --git a/src/types/SBFLeaf/methods/getRight.js b/src/types/SBFLeaf/methods/getRight.js index a9a08a5..4cc467e 100644 --- a/src/types/SBFLeaf/methods/getRight.js +++ b/src/types/SBFLeaf/methods/getRight.js @@ -1,4 +1,4 @@ -module.exports = async function getRight() { +export default async function getRight() { const adapter = this.getParent().getAdapter(); const res = await adapter.getRightInLeaf(this.id); return res; diff --git a/src/types/SBFLeaf/methods/getRight.spec.js b/src/types/SBFLeaf/methods/getRight.spec.js index fd7a9c8..dde47b9 100644 --- a/src/types/SBFLeaf/methods/getRight.spec.js +++ b/src/types/SBFLeaf/methods/getRight.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const getRight = require('./getRight'); let called = []; diff --git a/src/types/SBFLeaf/methods/insert.js b/src/types/SBFLeaf/methods/insert.js index dd22586..6f2dece 100644 --- a/src/types/SBFLeaf/methods/insert.js +++ b/src/types/SBFLeaf/methods/insert.js @@ -9,4 +9,4 @@ async function insert(identifier, value) { await this.split(); } } -module.exports = insert; +export default insert; diff --git a/src/types/SBFLeaf/methods/insert.spec.js b/src/types/SBFLeaf/methods/insert.spec.js index bbb5c3f..bf20f33 100644 --- a/src/types/SBFLeaf/methods/insert.spec.js +++ b/src/types/SBFLeaf/methods/insert.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const insert = require('./insert'); const jean = {identifier: '507f191e810c19729de860ea', name: 'Jean'}; diff --git a/src/types/SBFLeaf/methods/isFillFactorFilled.js b/src/types/SBFLeaf/methods/isFillFactorFilled.js index 8b47ef7..d7068f9 100644 --- a/src/types/SBFLeaf/methods/isFillFactorFilled.js +++ b/src/types/SBFLeaf/methods/isFillFactorFilled.js @@ -22,4 +22,4 @@ async function isFillFactorFilled() { throw e; } } -module.exports = isFillFactorFilled; +export default isFillFactorFilled; diff --git a/src/types/SBFLeaf/methods/isFillFactorFilled.spec.js b/src/types/SBFLeaf/methods/isFillFactorFilled.spec.js index df9ae45..292b293 100644 --- a/src/types/SBFLeaf/methods/isFillFactorFilled.spec.js +++ b/src/types/SBFLeaf/methods/isFillFactorFilled.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const isFillFactorFilled = require('./isFillFactorFilled'); let called = []; diff --git a/src/types/SBFLeaf/methods/isFull.js b/src/types/SBFLeaf/methods/isFull.js index c315497..9a09a3c 100644 --- a/src/types/SBFLeaf/methods/isFull.js +++ b/src/types/SBFLeaf/methods/isFull.js @@ -13,4 +13,4 @@ async function isFull() { throw e; } } -module.exports = isFull; +export default isFull; diff --git a/src/types/SBFLeaf/methods/isFull.spec.js b/src/types/SBFLeaf/methods/isFull.spec.js index 87ebe1c..01f07c1 100644 --- a/src/types/SBFLeaf/methods/isFull.spec.js +++ b/src/types/SBFLeaf/methods/isFull.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const isFull = require('./isFull'); let called = []; diff --git a/src/types/SBFLeaf/methods/mergeWithSiblings.js b/src/types/SBFLeaf/methods/mergeWithSiblings.js index 608b645..20044dc 100644 --- a/src/types/SBFLeaf/methods/mergeWithSiblings.js +++ b/src/types/SBFLeaf/methods/mergeWithSiblings.js @@ -82,4 +82,4 @@ async function mergeWithSiblings() { } return hasMerged; } -module.exports = mergeWithSiblings; +export default mergeWithSiblings; diff --git a/src/types/SBFLeaf/methods/redistribute.js b/src/types/SBFLeaf/methods/redistribute.js index ce1f648..498dc13 100644 --- a/src/types/SBFLeaf/methods/redistribute.js +++ b/src/types/SBFLeaf/methods/redistribute.js @@ -53,4 +53,4 @@ async function redistribute() { } return hasRedistributed; } -module.exports = redistribute; +export default redistribute; diff --git a/src/types/SBFLeaf/methods/remove.js b/src/types/SBFLeaf/methods/remove.js index 339591c..bed5e3c 100644 --- a/src/types/SBFLeaf/methods/remove.js +++ b/src/types/SBFLeaf/methods/remove.js @@ -39,4 +39,4 @@ async function remove(remCmd) { } } } -module.exports = remove; +export default remove; diff --git a/src/types/SBFLeaf/methods/remove.spec.js b/src/types/SBFLeaf/methods/remove.spec.js index 071ea05..bb0c51b 100644 --- a/src/types/SBFLeaf/methods/remove.spec.js +++ b/src/types/SBFLeaf/methods/remove.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const remove = require('./remove'); const jean = {identifier: '507f191e810c19729de860ea', name: 'Jean'}; diff --git a/src/types/SBFLeaf/methods/replace.js b/src/types/SBFLeaf/methods/replace.js index 42ec462..1dfae69 100644 --- a/src/types/SBFLeaf/methods/replace.js +++ b/src/types/SBFLeaf/methods/replace.js @@ -9,4 +9,4 @@ async function replace(identifier, value) { await this.split(); } } -module.exports = replace; +export default replace; diff --git a/src/types/SBFLeaf/methods/split.js b/src/types/SBFLeaf/methods/split.js index 7aab2d1..c82057e 100644 --- a/src/types/SBFLeaf/methods/split.js +++ b/src/types/SBFLeaf/methods/split.js @@ -13,4 +13,4 @@ async function split() { await parent.attachLeaf(index + 1, newLeaf); } -module.exports = split; +export default split; diff --git a/src/types/SBFLeaf/methods/split.spec.js b/src/types/SBFLeaf/methods/split.spec.js index bc49efb..aefcbac 100644 --- a/src/types/SBFLeaf/methods/split.spec.js +++ b/src/types/SBFLeaf/methods/split.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const split = require('./split'); let called = []; diff --git a/src/types/SBFNode/SBFNode.js b/src/types/SBFNode/SBFNode.js index 68a19ca..40176e2 100644 --- a/src/types/SBFNode/SBFNode.js +++ b/src/types/SBFNode/SBFNode.js @@ -59,4 +59,4 @@ SBFNode.prototype.mergeUp = require('./methods/mergeUp') SBFNode.prototype.remove = require('./methods/remove') SBFNode.prototype.replace = require('./methods/replace') SBFNode.prototype.split = require('./methods/split') -module.exports = SBFNode; +export default SBFNode; diff --git a/src/types/SBFNode/SBFNode.spec.js b/src/types/SBFNode/SBFNode.spec.js index 3fffb25..0e8dc58 100644 --- a/src/types/SBFNode/SBFNode.spec.js +++ b/src/types/SBFNode/SBFNode.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const SBFNode = require('./SBFNode'); const SBFLeaf = require('../SBFLeaf/SBFLeaf'); const MemoryAdpter = require('../../adapters/MemoryAdapter/MemoryAdapter'); diff --git a/src/types/SBFNode/methods/attachLeaf.js b/src/types/SBFNode/methods/attachLeaf.js index 162e243..bb5eadc 100644 --- a/src/types/SBFNode/methods/attachLeaf.js +++ b/src/types/SBFNode/methods/attachLeaf.js @@ -1,3 +1,3 @@ -module.exports = async function attachLeaf(index, leaf) { +export default async function attachLeaf(index, leaf) { this.childrens.splice(index, 0, leaf); }; diff --git a/src/types/SBFNode/methods/find.js b/src/types/SBFNode/methods/find.js index 92be558..09757f4 100644 --- a/src/types/SBFNode/methods/find.js +++ b/src/types/SBFNode/methods/find.js @@ -1,4 +1,4 @@ -module.exports = async function find(value) { +export default async function find(value) { const results = { identifiers: [], keys: [] }; const { childrens } = this; let leafIndex = 0; diff --git a/src/types/SBFNode/methods/findGreaterThan.js b/src/types/SBFNode/methods/findGreaterThan.js index 419841a..0c74ffb 100644 --- a/src/types/SBFNode/methods/findGreaterThan.js +++ b/src/types/SBFNode/methods/findGreaterThan.js @@ -47,4 +47,4 @@ async function findGreaterThan(value, includeKey = false) { return result; } -module.exports = findGreaterThan; +export default findGreaterThan; diff --git a/src/types/SBFNode/methods/findLowerThan.js b/src/types/SBFNode/methods/findLowerThan.js index 33e5e39..d569f89 100644 --- a/src/types/SBFNode/methods/findLowerThan.js +++ b/src/types/SBFNode/methods/findLowerThan.js @@ -35,4 +35,4 @@ async function findLowerThan(value, includeKey = false) { return result; } -module.exports = findLowerThan; +export default findLowerThan; diff --git a/src/types/SBFNode/methods/getAdapter.js b/src/types/SBFNode/methods/getAdapter.js index 8f13f28..ab261e7 100644 --- a/src/types/SBFNode/methods/getAdapter.js +++ b/src/types/SBFNode/methods/getAdapter.js @@ -1,3 +1,3 @@ -module.exports = function getAdapter() { +export default function getAdapter() { return this.getTree().getAdapter(); }; diff --git a/src/types/SBFNode/methods/getAll.js b/src/types/SBFNode/methods/getAll.js index 11d8a39..a022221 100644 --- a/src/types/SBFNode/methods/getAll.js +++ b/src/types/SBFNode/methods/getAll.js @@ -1,4 +1,4 @@ -module.exports = async function getAll() { +export default async function getAll() { const result = { identifiers: [], keys: [] }; const p = []; diff --git a/src/types/SBFNode/methods/getFillStatus.js b/src/types/SBFNode/methods/getFillStatus.js index 13e19e8..d26593a 100644 --- a/src/types/SBFNode/methods/getFillStatus.js +++ b/src/types/SBFNode/methods/getFillStatus.js @@ -22,4 +22,4 @@ const getFillStatus = async function () { throw e; } }; -module.exports = getFillStatus; +export default getFillStatus; diff --git a/src/types/SBFNode/methods/getTreeOptions.js b/src/types/SBFNode/methods/getTreeOptions.js index 433e9f7..bcfb03a 100644 --- a/src/types/SBFNode/methods/getTreeOptions.js +++ b/src/types/SBFNode/methods/getTreeOptions.js @@ -1,4 +1,4 @@ function getTreeOptions() { return this.getTree().getOptions(); } -module.exports = getTreeOptions; +export default getTreeOptions; diff --git a/src/types/SBFNode/methods/insert.js b/src/types/SBFNode/methods/insert.js index 5585c4c..a8e8a62 100644 --- a/src/types/SBFNode/methods/insert.js +++ b/src/types/SBFNode/methods/insert.js @@ -1,6 +1,6 @@ const SBFLeaf = require('../../SBFLeaf/SBFLeaf'); -module.exports = async function insert(identifier, value) { +export default async function insert(identifier, value) { const { childrens, keys } = this; if (!childrens.length) { const leaf = new SBFLeaf({ parent: this }); diff --git a/src/types/SBFNode/methods/insertReferenceKey.js b/src/types/SBFNode/methods/insertReferenceKey.js index 508cb56..2d7cda5 100644 --- a/src/types/SBFNode/methods/insertReferenceKey.js +++ b/src/types/SBFNode/methods/insertReferenceKey.js @@ -1,6 +1,6 @@ const { insertSorted } = require('../../../utils/array'); -module.exports = async function insertReferenceKey(value) { +export default async function insertReferenceKey(value) { if (this.isFull()) { await this.split(); } diff --git a/src/types/SBFNode/methods/isFull.js b/src/types/SBFNode/methods/isFull.js index fb8d94c..29c7d3c 100644 --- a/src/types/SBFNode/methods/isFull.js +++ b/src/types/SBFNode/methods/isFull.js @@ -1,4 +1,4 @@ -module.exports = function isFull() { +export default function isFull() { const tree = this.getTree(); const { order } = tree; return this.keys.length >= order; diff --git a/src/types/SBFNode/methods/mergeUp.js b/src/types/SBFNode/methods/mergeUp.js index 8888916..294f4ac 100644 --- a/src/types/SBFNode/methods/mergeUp.js +++ b/src/types/SBFNode/methods/mergeUp.js @@ -34,4 +34,4 @@ const mergeUp = async function () { throw new Error('Not implemented : MergingUp'); } }; -module.exports = mergeUp; +export default mergeUp; diff --git a/src/types/SBFNode/methods/remove.js b/src/types/SBFNode/methods/remove.js index 48ca09a..4a9e243 100644 --- a/src/types/SBFNode/methods/remove.js +++ b/src/types/SBFNode/methods/remove.js @@ -12,4 +12,4 @@ async function remove(remCmd) { await leaf.remove(remCmd); } } -module.exports = remove; +export default remove; diff --git a/src/types/SBFNode/methods/replace.js b/src/types/SBFNode/methods/replace.js index 6772d1d..595f5e9 100644 --- a/src/types/SBFNode/methods/replace.js +++ b/src/types/SBFNode/methods/replace.js @@ -1,6 +1,6 @@ const SBFLeaf = require('../../SBFLeaf/SBFLeaf'); -module.exports = async function replace(identifier, value) { +export default async function replace(identifier, value) { const { childrens, keys } = this; if (!childrens.length) { throw new Error('SBFNode cannot replace with no childrens'); diff --git a/src/types/SBFNode/methods/split.js b/src/types/SBFNode/methods/split.js index ab3bf81..d246276 100644 --- a/src/types/SBFNode/methods/split.js +++ b/src/types/SBFNode/methods/split.js @@ -1,4 +1,4 @@ -module.exports = async function split() { +export default async function split() { // console.log('Node - split') const midIndex = ~~(this.keys.length / 2); diff --git a/src/types/SBFRoot/SBFRoot.js b/src/types/SBFRoot/SBFRoot.js index 44f8929..805dd32 100644 --- a/src/types/SBFRoot/SBFRoot.js +++ b/src/types/SBFRoot/SBFRoot.js @@ -62,4 +62,4 @@ SBFRoot.prototype.insert = require('./methods/insert') SBFRoot.prototype.insertReferenceKey = require('./methods/insertReferenceKey') SBFRoot.prototype.isFull = require('./methods/isFull') SBFRoot.prototype.split = require('./methods/split') -module.exports = SBFRoot; +export default SBFRoot; diff --git a/src/types/SBFRoot/methods/attachLeaf.js b/src/types/SBFRoot/methods/attachLeaf.js index ca5b0e6..11d0eaf 100644 --- a/src/types/SBFRoot/methods/attachLeaf.js +++ b/src/types/SBFRoot/methods/attachLeaf.js @@ -2,4 +2,4 @@ async function attachLeaf(index, leaf) { this.childrens.splice(index, 0, leaf); // leaf.setParent(this); } -module.exports = attachLeaf; +export default attachLeaf; diff --git a/src/types/SBFRoot/methods/find.js b/src/types/SBFRoot/methods/find.js index f15d8c8..ace5fee 100644 --- a/src/types/SBFRoot/methods/find.js +++ b/src/types/SBFRoot/methods/find.js @@ -70,4 +70,4 @@ async function find(value, operator = '$eq') { } } -module.exports = find; +export default find; diff --git a/src/types/SBFRoot/methods/find.spec.js b/src/types/SBFRoot/methods/find.spec.js index 4354c9f..3d81261 100644 --- a/src/types/SBFRoot/methods/find.spec.js +++ b/src/types/SBFRoot/methods/find.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const SFBLeaf = require('../../SBFLeaf/SBFLeaf'); const MemoryAdapter = require('../../../adapters/MemoryAdapter/MemoryAdapter'); const find = require('../../SBFRoot/methods/find'); diff --git a/src/types/SBFRoot/methods/get.js b/src/types/SBFRoot/methods/get.js index b70703e..a2c8cdf 100644 --- a/src/types/SBFRoot/methods/get.js +++ b/src/types/SBFRoot/methods/get.js @@ -2,4 +2,4 @@ async function get(identifier) { const adapter = this.getAdapter(); return await adapter.getDocument(identifier); } -module.exports = get; +export default get; diff --git a/src/types/SBFRoot/methods/getAdapter.js b/src/types/SBFRoot/methods/getAdapter.js index 8f13f28..ab261e7 100644 --- a/src/types/SBFRoot/methods/getAdapter.js +++ b/src/types/SBFRoot/methods/getAdapter.js @@ -1,3 +1,3 @@ -module.exports = function getAdapter() { +export default function getAdapter() { return this.getTree().getAdapter(); }; diff --git a/src/types/SBFRoot/methods/getAll.js b/src/types/SBFRoot/methods/getAll.js index 6412712..e241d4c 100644 --- a/src/types/SBFRoot/methods/getAll.js +++ b/src/types/SBFRoot/methods/getAll.js @@ -28,4 +28,4 @@ async function getAll() { }); } -module.exports = getAll; +export default getAll; diff --git a/src/types/SBFRoot/methods/getAll.spec.js b/src/types/SBFRoot/methods/getAll.spec.js index 0482c01..f8005d0 100644 --- a/src/types/SBFRoot/methods/getAll.spec.js +++ b/src/types/SBFRoot/methods/getAll.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const SFBLeaf = require('../../SBFLeaf/SBFLeaf'); const MemoryAdapter = require('../../../adapters/MemoryAdapter/MemoryAdapter'); const getAll = require('../../SBFRoot/methods/getAll'); diff --git a/src/types/SBFRoot/methods/getFillStatus.js b/src/types/SBFRoot/methods/getFillStatus.js index 5e0be8c..bf42c36 100644 --- a/src/types/SBFRoot/methods/getFillStatus.js +++ b/src/types/SBFRoot/methods/getFillStatus.js @@ -10,4 +10,4 @@ const getFillStatus = async function () { fillFactor, order, leafSize: size, fillFactorFilled: size >= minKeys, }; }; -module.exports = getFillStatus; +export default getFillStatus; diff --git a/src/types/SBFRoot/methods/getTreeOptions.js b/src/types/SBFRoot/methods/getTreeOptions.js index a1ad426..03a8c2c 100644 --- a/src/types/SBFRoot/methods/getTreeOptions.js +++ b/src/types/SBFRoot/methods/getTreeOptions.js @@ -1,3 +1,3 @@ -module.exports = function getTreeOptions() { +export default function getTreeOptions() { return this.getTree().getOptions(); }; diff --git a/src/types/SBFRoot/methods/insert.js b/src/types/SBFRoot/methods/insert.js index 69652fc..31b4669 100644 --- a/src/types/SBFRoot/methods/insert.js +++ b/src/types/SBFRoot/methods/insert.js @@ -22,4 +22,4 @@ async function insert(identifier, value = null) { await this.split(); } } -module.exports = insert; +export default insert; diff --git a/src/types/SBFRoot/methods/insertReferenceKey.js b/src/types/SBFRoot/methods/insertReferenceKey.js index 19b7a59..be02af4 100644 --- a/src/types/SBFRoot/methods/insertReferenceKey.js +++ b/src/types/SBFRoot/methods/insertReferenceKey.js @@ -7,4 +7,4 @@ async function insertReferenceKey(value) { const index = insertSorted(this.keys, value); return index; } -module.exports = insertReferenceKey; +export default insertReferenceKey; diff --git a/src/types/SBFRoot/methods/isFull.js b/src/types/SBFRoot/methods/isFull.js index 3b45c43..a28db7f 100644 --- a/src/types/SBFRoot/methods/isFull.js +++ b/src/types/SBFRoot/methods/isFull.js @@ -4,4 +4,4 @@ function isFull() { return this.keys.length >= order; } -module.exports = isFull; +export default isFull; diff --git a/src/types/SBFRoot/methods/mergeDown.js b/src/types/SBFRoot/methods/mergeDown.js index 3385a13..fe6cb02 100644 --- a/src/types/SBFRoot/methods/mergeDown.js +++ b/src/types/SBFRoot/methods/mergeDown.js @@ -19,4 +19,4 @@ const mergeDown = async function () { console.log('Mergeup'); throw new Error('Unsupported merge up'); }; -module.exports = mergeDown; +export default mergeDown; diff --git a/src/types/SBFRoot/methods/ops/findEquals.js b/src/types/SBFRoot/methods/ops/findEquals.js index 28385ee..c23782c 100644 --- a/src/types/SBFRoot/methods/ops/findEquals.js +++ b/src/types/SBFRoot/methods/ops/findEquals.js @@ -1,4 +1,4 @@ -module.exports = async function findEquals(value) { +export default async function findEquals(value) { const result = { identifiers: [], keys: [] }; const { childrens, identifiers, keys } = this; diff --git a/src/types/SBFRoot/methods/ops/findGreaterThan.js b/src/types/SBFRoot/methods/ops/findGreaterThan.js index f72b761..3cad867 100644 --- a/src/types/SBFRoot/methods/ops/findGreaterThan.js +++ b/src/types/SBFRoot/methods/ops/findGreaterThan.js @@ -52,4 +52,4 @@ async function findGreaterThan(key, includeKey = false) { return result; } -module.exports = findGreaterThan; +export default findGreaterThan; diff --git a/src/types/SBFRoot/methods/ops/findLowerThan.js b/src/types/SBFRoot/methods/ops/findLowerThan.js index ec5d4bb..3bef8e3 100644 --- a/src/types/SBFRoot/methods/ops/findLowerThan.js +++ b/src/types/SBFRoot/methods/ops/findLowerThan.js @@ -55,4 +55,4 @@ async function findLowerThan(key, includeKey = false) { } return result; } -module.exports = findLowerThan; +export default findLowerThan; diff --git a/src/types/SBFRoot/methods/remove.js b/src/types/SBFRoot/methods/remove.js index f9f4aa7..0c0a667 100644 --- a/src/types/SBFRoot/methods/remove.js +++ b/src/types/SBFRoot/methods/remove.js @@ -24,4 +24,4 @@ async function remove(remCmd) { } } } -module.exports = remove; +export default remove; diff --git a/src/types/SBFRoot/methods/replace.js b/src/types/SBFRoot/methods/replace.js index c1f31fc..682921e 100644 --- a/src/types/SBFRoot/methods/replace.js +++ b/src/types/SBFRoot/methods/replace.js @@ -17,4 +17,4 @@ async function replace(identifier, value) { await this.split(); } } -module.exports = replace; +export default replace; diff --git a/src/types/SBFRoot/methods/split.js b/src/types/SBFRoot/methods/split.js index 9a96665..5f7aba1 100644 --- a/src/types/SBFRoot/methods/split.js +++ b/src/types/SBFRoot/methods/split.js @@ -60,4 +60,4 @@ async function split() { this.childrens = [left, right]; } } -module.exports = split; +export default split; diff --git a/src/types/SBFTree/SBFTree.js b/src/types/SBFTree/SBFTree.js index bc5d463..c2152cf 100644 --- a/src/types/SBFTree/SBFTree.js +++ b/src/types/SBFTree/SBFTree.js @@ -56,4 +56,4 @@ SBFTree.prototype.get = require('./methods/get'); SBFTree.prototype.insert = require('./methods/insert'); SBFTree.prototype.remove = require('./methods/remove'); SBFTree.prototype.replace = require('./methods/replace'); -module.exports = SBFTree; +export default SBFTree; diff --git a/src/types/SBFTree/SBFTree.spec.js b/src/types/SBFTree/SBFTree.spec.js index de85b27..51e0624 100644 --- a/src/types/SBFTree/SBFTree.spec.js +++ b/src/types/SBFTree/SBFTree.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const SBFTree = require('../SBFTree/SBFTree'); const MemoryAdapter = require('../../adapters/MemoryAdapter/MemoryAdapter') // Vector for verifying with a visual tool : https://www.cs.csubak.edu/~msarr/visualizations/BPlusTree.html diff --git a/src/types/SBFTree/methods/createRoot.js b/src/types/SBFTree/methods/createRoot.js index ebef460..b5fea7f 100644 --- a/src/types/SBFTree/methods/createRoot.js +++ b/src/types/SBFTree/methods/createRoot.js @@ -1,7 +1,7 @@ const SBFRoot = require('../../SBFRoot/SBFRoot'); // const SBFLeaf = require('../../SBFLeaf/SBFLeaf'); // const SBFNode = require('../../SBFNode/SBFNode'); -module.exports = function createRoot(root = null) { +export default function createRoot(root = null) { if (this.root) { throw new Error('Already existing root.'); } diff --git a/src/types/SBFTree/methods/find.js b/src/types/SBFTree/methods/find.js index 87d5ca0..afb25b7 100644 --- a/src/types/SBFTree/methods/find.js +++ b/src/types/SBFTree/methods/find.js @@ -1,4 +1,4 @@ -module.exports = async function find(value, operator) { +export default async function find(value, operator) { let { root } = this; if (!root) { this.createRoot(); diff --git a/src/types/SBFTree/methods/get.js b/src/types/SBFTree/methods/get.js index 45c2cff..c9f0006 100644 --- a/src/types/SBFTree/methods/get.js +++ b/src/types/SBFTree/methods/get.js @@ -1,3 +1,3 @@ -module.exports = async function get(identifier) { +export default async function get(identifier) { return await this.root.get(identifier); }; diff --git a/src/types/SBFTree/methods/insert.js b/src/types/SBFTree/methods/insert.js index cfc311a..98b8ef0 100644 --- a/src/types/SBFTree/methods/insert.js +++ b/src/types/SBFTree/methods/insert.js @@ -1,4 +1,4 @@ -module.exports = async function insert(identifier, value) { +export default async function insert(identifier, value) { let { root } = this; if (!root) { this.createRoot(); diff --git a/src/types/SBFTree/methods/remove.js b/src/types/SBFTree/methods/remove.js index 0e0153e..83911a6 100644 --- a/src/types/SBFTree/methods/remove.js +++ b/src/types/SBFTree/methods/remove.js @@ -1,4 +1,4 @@ -module.exports = async function remove(remCmd) { +export default async function remove(remCmd) { let { root } = this; if (!root) { this.createRoot(); diff --git a/src/types/SBFTree/methods/replace.js b/src/types/SBFTree/methods/replace.js index ec31238..c6d14fc 100644 --- a/src/types/SBFTree/methods/replace.js +++ b/src/types/SBFTree/methods/replace.js @@ -1,4 +1,4 @@ -module.exports = async function replace(identifier, value) { +export default async function replace(identifier, value) { let { root } = this; if (!root) { this.createRoot(); diff --git a/src/types/SBTree/SBTree.js b/src/types/SBTree/SBTree.js index 56aae65..bbf2c5c 100644 --- a/src/types/SBTree/SBTree.js +++ b/src/types/SBTree/SBTree.js @@ -107,4 +107,4 @@ SBTree.prototype.replaceDocuments = require('./methods/replaceDocuments') SBTree.prototype.loadState = require('./methods/loadState') SBTree.prototype.setFieldTree = require('./methods/setFieldTree') SBTree.prototype.toJSON = require('./methods/toJSON') -module.exports = SBTree; +export default SBTree; diff --git a/src/types/SBTree/SBTree.spec.js b/src/types/SBTree/SBTree.spec.js index 5d3e2b0..a0b74f9 100644 --- a/src/types/SBTree/SBTree.spec.js +++ b/src/types/SBTree/SBTree.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const SBTree = require('./SBTree'); const fixtures = { documents: [ diff --git a/src/types/SBTree/methods/deleteDocuments.js b/src/types/SBTree/methods/deleteDocuments.js index e224b7f..3e36217 100644 --- a/src/types/SBTree/methods/deleteDocuments.js +++ b/src/types/SBTree/methods/deleteDocuments.js @@ -1,5 +1,4 @@ -const remove = require('../ops/remove'); - +import remove from '../ops/remove.js'; async function deleteDocuments(query) { if (!query || query === {}) { // this would cause to delete all as we would query all. @@ -11,4 +10,5 @@ async function deleteDocuments(query) { return (await remove.call(this, query)); } -module.exports = deleteDocuments; + +export default deleteDocuments; diff --git a/src/types/SBTree/methods/findDocuments.js b/src/types/SBTree/methods/findDocuments.js index 1b57cea..cb8db49 100644 --- a/src/types/SBTree/methods/findDocuments.js +++ b/src/types/SBTree/methods/findDocuments.js @@ -1,4 +1,4 @@ -const query = require('../ops/query'); +import query from '../ops/query.js'; async function findDocuments(params) { if (!this.state.isReady) { @@ -7,4 +7,5 @@ async function findDocuments(params) { return (await query.call(this, params)); } -module.exports = findDocuments; + +export default findDocuments; diff --git a/src/types/SBTree/methods/findDocuments.spec.js b/src/types/SBTree/methods/findDocuments.spec.js index 2f04d6c..e771f97 100644 --- a/src/types/SBTree/methods/findDocuments.spec.js +++ b/src/types/SBTree/methods/findDocuments.spec.js @@ -1,6 +1,5 @@ -const { expect } = require('chai'); - -const findDocuments = require('./findDocuments'); +import { expect} from "chai"; +import findDocuments from "./findDocuments.js"; const mock = { state:{ isReady: true diff --git a/src/types/SBTree/methods/getAdapter.js b/src/types/SBTree/methods/getAdapter.js index 3319b52..ba273fd 100644 --- a/src/types/SBTree/methods/getAdapter.js +++ b/src/types/SBTree/methods/getAdapter.js @@ -1,3 +1,3 @@ -module.exports = function getAdapter() { +export default function getAdapter() { return this.adapter; }; diff --git a/src/types/SBTree/methods/getDocument.js b/src/types/SBTree/methods/getDocument.js index f738c83..2992063 100644 --- a/src/types/SBTree/methods/getDocument.js +++ b/src/types/SBTree/methods/getDocument.js @@ -1,5 +1,4 @@ -const get = require('../ops/get'); - +import get from '../ops/get.js'; async function getDocument(identifier) { if (!this.state.isReady) { await this.isReady(); @@ -7,4 +6,4 @@ async function getDocument(identifier) { return (await get.call(this, identifier)); } -module.exports = getDocument; +export default getDocument; diff --git a/src/types/SBTree/methods/getFieldTree.js b/src/types/SBTree/methods/getFieldTree.js index 55e8b51..8c4dea2 100644 --- a/src/types/SBTree/methods/getFieldTree.js +++ b/src/types/SBTree/methods/getFieldTree.js @@ -9,4 +9,4 @@ function getFieldTree(fieldName) { return this.fieldTrees[fieldName]; } -module.exports = getFieldTree; +export default getFieldTree; diff --git a/src/types/SBTree/methods/insertDocuments.js b/src/types/SBTree/methods/insertDocuments.js index 1b1f2f9..0977150 100644 --- a/src/types/SBTree/methods/insertDocuments.js +++ b/src/types/SBTree/methods/insertDocuments.js @@ -1,7 +1,6 @@ -const ObjectId = require('mongo-objectid'); -const cloneDeep = require('lodash.clonedeep'); -const insert = require('../ops/insert'); - +import ObjectId from "mongo-objectid"; +import cloneDeep from "lodash.clonedeep"; +import insert from "../ops/insert.js"; /** * Allow to insert of or multiple documents * @@ -34,4 +33,5 @@ async function insertDocuments(documents) { return [document]; } -module.exports = insertDocuments; + +export default insertDocuments; diff --git a/src/types/SBTree/methods/insertDocuments.spec.js b/src/types/SBTree/methods/insertDocuments.spec.js index 855dfbc..3b5bbf9 100644 --- a/src/types/SBTree/methods/insertDocuments.spec.js +++ b/src/types/SBTree/methods/insertDocuments.spec.js @@ -1,6 +1,5 @@ -const { expect } = require('chai'); -const insertDocuments = require('./insertDocuments'); - +import { expect } from 'chai'; +import insertDocuments from './insertDocuments.js'; const doc1 = { value: 'Sunny sun' }; diff --git a/src/types/SBTree/methods/loadState.js b/src/types/SBTree/methods/loadState.js index db00471..5a9a1b6 100644 --- a/src/types/SBTree/methods/loadState.js +++ b/src/types/SBTree/methods/loadState.js @@ -1,5 +1,4 @@ -const each = require('lodash.foreach'); - +import each from "lodash.foreach"; function loadState(state) { this.order = state.order; this.fillFactor = state.fillFactor; @@ -17,4 +16,4 @@ function loadState(state) { }); return true; } -module.exports = loadState; +export default loadState; diff --git a/src/types/SBTree/methods/replaceDocuments.js b/src/types/SBTree/methods/replaceDocuments.js index ba1308a..9c7c9f2 100644 --- a/src/types/SBTree/methods/replaceDocuments.js +++ b/src/types/SBTree/methods/replaceDocuments.js @@ -1,5 +1,4 @@ -const replace = require('../ops/replace'); - +import replace from '../ops/replace.js'; async function replaceDocuments(documents) { if (!this.state.isReady) { await this.isReady(); @@ -14,4 +13,5 @@ async function replaceDocuments(documents) { const currentDocument = await this.getDocument(documents._id); return ([await replace.call(this, currentDocument, documents)]); } -module.exports = replaceDocuments; + +export default replaceDocuments; diff --git a/src/types/SBTree/methods/setFieldTree.js b/src/types/SBTree/methods/setFieldTree.js index fccb028..0df4cd7 100644 --- a/src/types/SBTree/methods/setFieldTree.js +++ b/src/types/SBTree/methods/setFieldTree.js @@ -1,5 +1,4 @@ -const SBFTree = require('../../SBFTree/SBFTree'); - +import SBFTree from '../../SBFTree/SBFTree.js'; /** * * @param fieldTreeOpts @@ -39,4 +38,5 @@ function setFieldTree(_fieldTreeOpts) { const fieldTree = new SBFTree(fieldTreeOpts); this.fieldTrees[fieldName] = fieldTree; } -module.exports = setFieldTree; + +export default setFieldTree; diff --git a/src/types/SBTree/methods/toJSON.js b/src/types/SBTree/methods/toJSON.js index 99b85e9..fa44871 100644 --- a/src/types/SBTree/methods/toJSON.js +++ b/src/types/SBTree/methods/toJSON.js @@ -23,4 +23,4 @@ function toJSON() { adapter, })); } -module.exports = toJSON; +export default toJSON; diff --git a/src/types/SBTree/methods/updateDocuments.js b/src/types/SBTree/methods/updateDocuments.js index d69adca..6a0e967 100644 --- a/src/types/SBTree/methods/updateDocuments.js +++ b/src/types/SBTree/methods/updateDocuments.js @@ -1,9 +1,9 @@ -const query = require('../ops/query'); - +import query from '../ops/query.js'; async function findDocuments(params) { if (!this.state.isReady) { await this.isReady(); } return (await query.call(this, params)); } -module.exports = findDocuments; + +export default findDocuments; diff --git a/src/types/SBTree/ops/RemoveCommand.js b/src/types/SBTree/ops/RemoveCommand.js index afe72ed..cea1696 100644 --- a/src/types/SBTree/ops/RemoveCommand.js +++ b/src/types/SBTree/ops/RemoveCommand.js @@ -6,4 +6,4 @@ class RemoveCommand { this.query = res; } } -module.exports = RemoveCommand; +export default RemoveCommand; diff --git a/src/types/SBTree/ops/get.js b/src/types/SBTree/ops/get.js index 8184b70..1b699ee 100644 --- a/src/types/SBTree/ops/get.js +++ b/src/types/SBTree/ops/get.js @@ -1,5 +1,4 @@ -const cloneDeep = require('lodash.clonedeep'); - +import cloneDeep from "lodash.clonedeep"; async function get(identifier) { if (!identifier) throw new Error('Expected an objectid'); @@ -7,4 +6,5 @@ async function get(identifier) { return cloneDeep(res) || null; } -module.exports = get; + +export default get; diff --git a/src/types/SBTree/ops/get.spec.js b/src/types/SBTree/ops/get.spec.js index 44efbd0..e0aa563 100644 --- a/src/types/SBTree/ops/get.spec.js +++ b/src/types/SBTree/ops/get.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const getSpec = require('./get'); const idFixtureDoc = '5d6ebb7e21f1df6ff7482631' diff --git a/src/types/SBTree/ops/insert.js b/src/types/SBTree/ops/insert.js index d237161..689aec7 100644 --- a/src/types/SBTree/ops/insert.js +++ b/src/types/SBTree/ops/insert.js @@ -61,4 +61,4 @@ async function insert(document) { } await this.adapter.saveDocument(document); } -module.exports = insert; +export default insert; diff --git a/src/types/SBTree/ops/insert.spec.js b/src/types/SBTree/ops/insert.spec.js index 4e70994..f1515ec 100644 --- a/src/types/SBTree/ops/insert.spec.js +++ b/src/types/SBTree/ops/insert.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const insert = require('./insert'); const {expectThrowsAsync} = require('../../../../test/test.utils'); const fixtures = { diff --git a/src/types/SBTree/ops/query.js b/src/types/SBTree/ops/query.js index f06f970..a9ea688 100644 --- a/src/types/SBTree/ops/query.js +++ b/src/types/SBTree/ops/query.js @@ -123,4 +123,4 @@ async function query(query) { return resolveDocuments(this, matchingObjectIds); } -module.exports = query; +export default query; diff --git a/src/types/SBTree/ops/query.spec.js b/src/types/SBTree/ops/query.spec.js index 81307cc..c2c9fcc 100644 --- a/src/types/SBTree/ops/query.spec.js +++ b/src/types/SBTree/ops/query.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const querySpec = require('./query'); const fixtures = { diff --git a/src/types/SBTree/ops/remove.js b/src/types/SBTree/ops/remove.js index 2765b7c..af2f784 100644 --- a/src/types/SBTree/ops/remove.js +++ b/src/types/SBTree/ops/remove.js @@ -68,4 +68,4 @@ async function remove(_query) { return results; } -module.exports = remove; +export default remove; diff --git a/src/types/SBTree/ops/remove.spec.js b/src/types/SBTree/ops/remove.spec.js index e117c9c..0064f63 100644 --- a/src/types/SBTree/ops/remove.spec.js +++ b/src/types/SBTree/ops/remove.spec.js @@ -1,4 +1,4 @@ -const {expect} = require('chai'); +import { expect } from 'chai'; const removeSpec = require('./remove'); const fixtures = { diff --git a/src/types/SBTree/ops/replace.js b/src/types/SBTree/ops/replace.js index daa91b5..96e850e 100644 --- a/src/types/SBTree/ops/replace.js +++ b/src/types/SBTree/ops/replace.js @@ -144,4 +144,4 @@ async function replace(currentDocument, newDocument) { await this.adapter.replaceDocument(newDocument); return newDocument; } -module.exports = replace; +export default replace; diff --git a/src/types/SBTree/utils/getFieldNamesFromQuery.js b/src/types/SBTree/utils/getFieldNamesFromQuery.js index ac349af..389a0cc 100644 --- a/src/types/SBTree/utils/getFieldNamesFromQuery.js +++ b/src/types/SBTree/utils/getFieldNamesFromQuery.js @@ -1,4 +1,4 @@ -module.exports = function getFieldNamesFromQuery(query) { +export default function getFieldNamesFromQuery(query) { const fieldNames = []; Object.entries(query).forEach((field) => { let fieldName = field[0]; diff --git a/src/utils/array.spec.js b/src/utils/array.spec.js index 25776a0..ffed80c 100644 --- a/src/utils/array.spec.js +++ b/src/utils/array.spec.js @@ -1,5 +1,5 @@ -const {expect} = require('chai'); -const {insertSorted} = require('./array'); +import {expect} from 'chai'; +import {insertSorted} from './array.js'; describe('Utils - Array', () => { @@ -24,9 +24,9 @@ describe('Utils - Array', () => { it('should insertSorted works with array', function () { const arr = ['alex']; insertSorted(arr, ['alain', 'jean']); - expect(arr).to.deep.equal(['alain', 'jean', 'alex']) + expect(arr).to.deep.equal(['alex','alain', 'jean']) insertSorted(arr, ['zachary', 'yann']); - expect(arr).to.deep.equal(['alain', 'jean', 'yann', 'zachary', 'alex']) + expect(arr).to.deep.equal(['alex','alain', 'jean', 'yann', 'zachary']) }); it('should insertSorted works with array and num', function () { const arr = ['alex']; diff --git a/src/utils/ascii.js b/src/utils/ascii.js index b6016a8..e25edc6 100644 --- a/src/utils/ascii.js +++ b/src/utils/ascii.js @@ -1,4 +1,4 @@ -import {forEach} from './array.js'; +import { forEach } from './array.js'; /* Cheap drawing implementation. Would need deep rework to make it really working. diff --git a/src/utils/comparators.js b/src/utils/comparators.js index df6144e..59833fe 100644 --- a/src/utils/comparators.js +++ b/src/utils/comparators.js @@ -1,14 +1,32 @@ +/** + * Compares two strings and returns a sorting value. + * @param {*} a - The first value to compare. + * @param {*} b - The second value to compare. + * @returns {number} - 1 if a > b, -1 if a < b, 0 if equal. + */ export function comparatorString(a, b) { - if (typeof a !== 'string') a = String(a); - if (typeof b !== 'string') b = String(b); - return (a > b ? 1 : (a < b ? -1 : 0)); + return a.localeCompare(b); }; +/** + * Compares two numbers and returns a sorting value. + * @param {number} a - The first number to compare. + * @param {number} b - The second number to compare. + * @returns {number} - 1 if a > b, -1 if a < b, 0 if equal. + */ export function comparatorNum(a, b) { - return (a > b ? 1 : (a < b ? -1 : 0)); + return Math.sign(a - b); }; +/** + * Compares two Date objects and returns a sorting value. + * @param {Date} a - The first date to compare. + * @param {Date} b - The second date to compare. + * @returns {number} - 1 if a > b, -1 if a < b, 0 if equal, or NaN if either date is invalid. + */ export function comparatorDate(a, b) { - return (a.getTime() > b.getTime() ? 1 : (a.getTime() < b.getTime() ? -1 : 0)); + if (!(a instanceof Date) || !(b instanceof Date) || Number.isNaN(a.getTime()) || Number.isNaN(b.getTime())) { + return Number.NaN; + } + return Math.sign(a.getTime() - b.getTime()); }; - diff --git a/src/utils/comparators.spec.js b/src/utils/comparators.spec.js index 006f8e1..b04dd89 100644 --- a/src/utils/comparators.spec.js +++ b/src/utils/comparators.spec.js @@ -1,44 +1,82 @@ -import {expect} from 'chai'; -import { comparatorDate, comparatorNum, comparatorString } from "./comparators.js"; - -describe('Utils - Comparators', () => { - it('should comparatorString works', async function () { - expect(comparatorString('a', 'b')).to.equal(-1); - expect(comparatorString('b', 'a')).to.equal(1); - expect(comparatorString('a', 'a')).to.equal(0); - - // should handle more complex cases - expect(comparatorString('a', 1)).to.equal(-1); - expect(comparatorString(1, 'a')).to.equal(1); - expect(comparatorString('1', 1)).to.equal(0); - expect(comparatorString('1', 2)).to.equal(-1); - expect(comparatorString(2, '1')).to.equal(1); - expect(comparatorString('2', 2)).to.equal(0); +import { expect } from 'chai'; +import { comparatorString, comparatorNum, comparatorDate } from './comparators.js'; + +describe('Comparator Functions', () => { + describe('comparatorString', () => { + it('should compare basic strings correctly', () => { + expect(comparatorString('apple', 'banana')).to.be.lessThan(0); + expect(comparatorString('banana', 'apple')).to.be.greaterThan(0); + expect(comparatorString('cherry', 'cherry')).to.equal(0); + }); + + it('should handle numbers as strings correctly', () => { + expect(comparatorString('123', '1234')).to.be.lessThan(0); + expect(comparatorString('1234', '123')).to.be.greaterThan(0); + expect(comparatorString('123', '123')).to.equal(0); + }); + + it('should handle mixed types', () => { + expect(comparatorString('123', 123)).to.equal(0); + expect(comparatorString(true, 'true')).to.equal(0); + expect(comparatorString(null, 'null')).to.equal(0); + expect(comparatorString(undefined, 'undefined')).to.equal(0); + }); }); - it('should comparatorNum works', async function () { - expect(comparatorNum(1, 2)).to.equal(-1); - expect(comparatorNum(2, 1)).to.equal(1); - expect(comparatorNum(1, 1)).to.equal(0); - - // should handle more complex cases - expect(comparatorNum('a', 1)).to.equal(-1); - expect(comparatorNum(1, 'a')).to.equal(1); - expect(comparatorNum('1', 1)).to.equal(0); - expect(comparatorNum('1', 2)).to.equal(-1); - expect(comparatorNum(2, '1')).to.equal(1); - expect(comparatorNum('2', 2)).to.equal(0); + + describe('comparatorNum', () => { + it('should compare numbers correctly', () => { + expect(comparatorNum(1, 2)).to.be.lessThan(0); + expect(comparatorNum(3, 2)).to.be.greaterThan(0); + expect(comparatorNum(5, 5)).to.equal(0); + }); + + it('should handle floating point numbers', () => { + expect(comparatorNum(1.2, 1.1)).to.be.greaterThan(0); + expect(comparatorNum(2.3, 2.4)).to.be.lessThan(0); + expect(comparatorNum(3.5, 3.5)).to.equal(0); + }); + + it('should handle mixed types', () => { + expect(comparatorNum('123', 123)).to.equal(0); + expect(comparatorNum('123.45', 123.45)).to.equal(0); + }); + + it('should handle edge cases', () => { + expect(comparatorNum(NaN, 123)).to.be.deep.equal(NaN); + expect(comparatorNum(123, NaN)).to.be.deep.equal(NaN); + expect(comparatorNum(NaN, NaN)).to.be.deep.equal(NaN); + }); }); - it('should comparatorDate works', async function () { - expect(comparatorDate(new Date(2020, 1, 1), new Date(2020, 1, 2))).to.equal(-1); - expect(comparatorDate(new Date(2020, 1, 2), new Date(2020, 1, 1))).to.equal(1); - expect(comparatorDate(new Date(2020, 1, 1), new Date(2020, 1, 1))).to.equal(0); - - // should handle more complex cases - expect(comparatorDate('a', 1)).to.equal(-1); - expect(comparatorDate(1, 'a')).to.equal(1); - expect(comparatorDate('1', 1)).to.equal(0); - expect(comparatorDate('1', 2)).to.equal(-1); - expect(comparatorDate(2, '1')).to.equal(1); - expect(comparatorDate('2', 2)).to.equal(0); + + describe('comparatorDate', () => { + it('should compare dates correctly', () => { + const date1 = new Date('2020-01-01'); + const date2 = new Date('2021-01-01'); + expect(comparatorDate(date1, date2)).to.be.lessThan(0); + expect(comparatorDate(date2, date1)).to.be.greaterThan(0); + expect(comparatorDate(date1, new Date('2020-01-01'))).to.equal(0); + }); + + it('should handle different time values correctly', () => { + const date1 = new Date('2020-01-01T12:00:00'); + const date2 = new Date('2020-01-01T13:00:00'); + expect(comparatorDate(date1, date2)).to.be.lessThan(0); + expect(comparatorDate(date2, date1)).to.be.greaterThan(0); + }); + + it('should handle invalid dates', () => { + const validDate = new Date('2020-01-01'); + const invalidDate = new Date('not a date'); + expect(comparatorDate(validDate, invalidDate)).to.be.NaN; + expect(comparatorDate(invalidDate, validDate)).to.be.NaN; + expect(comparatorDate(invalidDate, invalidDate)).to.be.NaN; + }); + + it('should handle mixed types', () => { + const validDate = new Date('2020-01-01'); + const dateString = '2020-01-01'; + expect(comparatorDate(validDate, new Date(dateString))).to.equal(0); + expect(comparatorDate(new Date(dateString), validDate)).to.equal(0); + }); }); }); diff --git a/src/utils/crypto.js b/src/utils/crypto.js index 1be9ede..43c1a64 100644 --- a/src/utils/crypto.js +++ b/src/utils/crypto.js @@ -1,39 +1,39 @@ function insecureRandomBytes(size) { const result = new Uint8Array(size); - for (let i = 0; i < size; ++i) result[i] = Math.floor(Math.random() * 256); + for (let i = 0; i < size; ++i) { + result[i] = Math.floor(Math.random() * 256); + } return result; } function getRandomBytes() { - let randomBytes = null; - try { - randomBytes = require('crypto').randomBytes; - } catch (e) { - // keep the fallback - } - if (randomBytes == null) { - randomBytes = insecureRandomBytes; + if (typeof require !== 'undefined') { + try { + const crypto = require('crypto'); + return crypto.randomBytes; + } catch (e) { + return insecureRandomBytes; + } } - return randomBytes; + return insecureRandomBytes; } -function browserRandomBytes() { - const randomBytes = (size) => window.crypto.getRandomValues(new Uint8Array(size)); - return randomBytes; +function browserRandomBytes(size) { + return window.crypto.getRandomValues(new Uint8Array(size)); } const isWindowContext = (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues); +const randomBytesFunction = isWindowContext ? browserRandomBytes : getRandomBytes(); const crypto = { insecureRandomBytes, - randomBytes: (isWindowContext) ? browserRandomBytes : getRandomBytes(), + randomBytes: isWindowContext ? browserRandomBytes : getRandomBytes(), + generateRandId: (prefix = '') => prefix + (Date.now().toString(16) + crypto.randomBytes(4).toString('hex')), + generateLeafId: () => crypto.generateRandId('l'), + generateFieldTreeId: () => crypto.generateRandId('f'), + generateTreeId: () => crypto.generateRandId('t'), + generateNodeId: () => crypto.generateRandId('n'), + generateRootId: () => crypto.generateRandId('r'), }; -crypto.generateRandId = (prefix = '') => prefix + (Date.now().toString(16) + crypto.randomBytes(4).toString('hex')); - -crypto.generateLeafId = () => crypto.generateRandId('l'); -crypto.generateFieldTreeId = () => crypto.generateRandId('f'); -crypto.generateTreeId = () => crypto.generateRandId('t'); -crypto.generateNodeId = () => crypto.generateRandId('n'); -crypto.generateRootId = () => crypto.generateRandId('r'); export default crypto; diff --git a/src/utils/crypto.spec.js b/src/utils/crypto.spec.js new file mode 100644 index 0000000..96b5048 --- /dev/null +++ b/src/utils/crypto.spec.js @@ -0,0 +1,75 @@ +import { expect } from 'chai'; +import crypto from './crypto.js'; // Adjust the path based on your project structure + +describe('crypto module', () => { + describe('insecureRandomBytes', () => { + it('should generate an array of random bytes', () => { + const bytes = crypto.insecureRandomBytes(4); + expect(bytes).to.have.lengthOf(4); + expect(bytes).to.be.instanceof(Uint8Array); + }); + }); + + describe('generateRandId', () => { + it('should generate a random ID with a specified prefix', () => { + const id = crypto.generateRandId('test'); + expect(id).to.be.a('string'); + expect(id.startsWith('test')).to.be.true; + }); + + it('should generate a random ID without a prefix', () => { + const id = crypto.generateRandId(); + expect(id).to.be.a('string'); + }); + }); + + describe('generateLeafId', () => { + it('should generate a random leaf ID', () => { + const id = crypto.generateLeafId(); + expect(id).to.be.a('string'); + expect(id.startsWith('l')).to.be.true; + }); + }); + + describe('generateFieldTreeId', () => { + it('should generate a random field tree ID', () => { + const id = crypto.generateFieldTreeId(); + expect(id).to.be.a('string'); + expect(id.startsWith('f')).to.be.true; + }); + }); + + describe('generateTreeId', () => { + it('should generate a random tree ID', () => { + const id = crypto.generateTreeId(); + expect(id).to.be.a('string'); + expect(id.startsWith('t')).to.be.true; + }); + }); + + describe('generateNodeId', () => { + it('should generate a random node ID', () => { + const id = crypto.generateNodeId(); + expect(id).to.be.a('string'); + expect(id.startsWith('n')).to.be.true; + }); + }); + + describe('generateRootId', () => { + it('should generate a random root ID', () => { + const id = crypto.generateRootId(); + expect(id).to.be.a('string'); + expect(id.startsWith('r')).to.be.true; + }); + }); + + describe('randomBytes', () => { + it('should generate an array of random bytes', async () => { + const bytes = await crypto.randomBytes(4); + expect(bytes).to.have.lengthOf(4); + expect(bytes).to.be.instanceof(Uint8Array); + }); + }); + +}); + diff --git a/src/utils/fn.js b/src/utils/fn.js index e69bcb6..94ab652 100644 --- a/src/utils/fn.js +++ b/src/utils/fn.js @@ -1,19 +1,41 @@ -const waitFor = async (watchedObject, watchedProp, successCallback) => { - if (watchedObject && watchedObject[watchedProp]) return true; - return new Promise((resolve, reject) => { - let int = null; - const resolver = () => { - if (watchedObject[watchedProp]) { +// fn.js +// ES Module that exports the waitFor function + +/** + * Monitors a property of an object and performs actions based on the state of that property. + * @param {Object} watchedObject - The object whose property is being monitored. + * @param {string} watchedProp - The property of the object to watch for a truthy value. + * @param {Function} [successCallback] - A callback function that is executed when the watched property becomes truthy. + * @param {number} [timeoutMs=10000] - The number of milliseconds to wait before rejecting the promise. + * @returns {Promise} - A promise that resolves to true if the property becomes truthy within the timeout, or rejects with an error message. + */ +export async function waitFor(watchedObject, watchedProp, successCallback, timeoutMs = 10000) { + // Check if the property is already truthy and resolve immediately if so. + if (watchedObject[watchedProp]) { if (successCallback) { - successCallback(); + successCallback(); } - int = clearInterval(int); - return resolve(true); - } - }; - int = setInterval(resolver, 20); - setTimeout(resolver, 10000); - }); -}; + return true; + } + + // Return a promise that will resolve when the property becomes truthy. + return new Promise((resolve, reject) => { + // Set up an interval to check the property every 20 milliseconds. + const interval = setInterval(() => { + if (watchedObject[watchedProp]) { + clearInterval(interval); + clearTimeout(timeout); // Clear timeout on success. + if (successCallback) { + successCallback(); + } + resolve(true); + } + }, 20); -export { waitFor }; + // Set up a timeout to reject the promise if the property doesn't become truthy within 10 seconds. + const timeout = setTimeout(() => { + clearInterval(interval); + reject(new Error("Timeout reached before property became truthy.")); + }, timeoutMs); + }); +} diff --git a/src/utils/fn.spec.js b/src/utils/fn.spec.js new file mode 100644 index 0000000..e560a95 --- /dev/null +++ b/src/utils/fn.spec.js @@ -0,0 +1,42 @@ +import {expect} from 'chai'; +import {waitFor} from './fn.js'; + +describe('waitFor function', () => { + it('should resolve immediately if the property is already true', async () => { + const watchedObject = {prop: true}; + const result = await waitFor(watchedObject, 'prop'); + expect(result).to.be.true; + }); + + it('should resolve when the property becomes true', async () => { + const watchedObject = {prop: false}; + setTimeout(() => { + watchedObject.prop = true; + }, 50); + const result = await waitFor(watchedObject, 'prop'); + expect(result).to.be.true; + }); + + it('should call the callback when the property becomes true', (done) => { + const watchedObject = {prop: false}; + const callback = () => { + expect(watchedObject.prop).to.be.true; + done(); + }; + setTimeout(() => { + watchedObject.prop = true; + }, 50); + waitFor(watchedObject, 'prop', callback); + }); + + it('should reject after the timeout', async () => { + return new Promise((resolve, reject) => { + const watchedObject = {prop: false}; + waitFor(watchedObject, 'prop', null, 1900) + .catch((error) => { + expect(error.message).to.equal('Timeout reached before property became truthy.'); + resolve(true); + }); + }); + }); +}); diff --git a/src/utils/time.js b/src/utils/time.js index efd0355..a8b3a8a 100644 --- a/src/utils/time.js +++ b/src/utils/time.js @@ -1,27 +1,28 @@ class Timer { - constructor(props) { - this.startTs = 0; - this.endTs = 0; - this.duration = { - nano: 0, - ms: 0, - s: 0, - }; - } + constructor(props = {}) { + this.startTs = props?.startTs || 0; + this.endTs = props?.endTs || 0; + this.duration = props?.duration || { + nano: 0, + ms: 0, + s: 0, + } + } - start() { - this.startTs = process.hrtime(); - } + start() { + this.startTs = performance.now(); + } - stop() { - this.endTs = process.hrtime(this.startTs); - this.duration.nano = (this.endTs[0] * 1e9) + this.endTs[1]; - this.duration.ms = this.duration.nano / 1e6; - this.duration.s = this.duration.nano / 1e9; - } + stop() { + this.endTs = performance.now(); + // Calculate elapsed time in milliseconds + const elapsedMs = this.endTs - this.startTs; + // Update duration in different units + this.duration.ms = elapsedMs; + this.duration.s = elapsedMs / 1000; + // Convert milliseconds to nanoseconds for nano property + this.duration.nano = elapsedMs * 1e6; + } } -const time = { - Timer, -}; -export default time; +export { Timer }; diff --git a/src/utils/time.spec.js b/src/utils/time.spec.js new file mode 100644 index 0000000..d39515a --- /dev/null +++ b/src/utils/time.spec.js @@ -0,0 +1,44 @@ +// Import the required libraries +import { expect } from 'chai'; +import { Timer } from './time.js'; + +describe('Timer class', () => { + let timer; + + beforeEach(() => { + // Reset the timer before each test + timer = new Timer(); + }); + + describe('start method', () => { + it('should set startTs to a non-zero value', () => { + timer.start(); + expect(timer.startTs).to.be.a('number'); + expect(timer.startTs).to.be.greaterThan(0); + }); + }); + + describe('stop method', () => { + it('should calculate duration correctly', (done) => { + timer.start(); + setTimeout(() => { + timer.stop(); + + expect(timer.duration).to.have.property('ms'); + expect(timer.duration).to.have.property('s'); + expect(timer.duration).to.have.property('nano'); + + expect(timer.duration.ms).to.be.a('number'); + expect(timer.duration.s).to.be.a('number'); + expect(timer.duration.nano).to.be.a('number'); + + // Since it's a timer, we expect some time to have elapsed + expect(timer.duration.ms).to.be.greaterThan(0); + expect(timer.duration.s).to.be.greaterThan(0); + expect(timer.duration.nano).to.be.greaterThan(0); + + done(); + }, 100); // delay in milliseconds + }); + }); +}); diff --git a/test/benchmark/1.standard.js b/test/benchmark/1.standard.js index 54bf9a8..b9712fb 100644 --- a/test/benchmark/1.standard.js +++ b/test/benchmark/1.standard.js @@ -1,9 +1,7 @@ -const { expect } = require('chai'); -const each = require('lodash.foreach'); -const { SBTree } = require('../../index'); -const fakeData = require('../fixtures/age'); -const { Timer } = require('../../src/utils/time'); -const { version } = require('../../package.json'); +import { SBTree } from '../../index.js'; +import { Timer } from '../../src/utils/time.js'; +import fakeData from '../fixtures/age.js'; +import { version } from '../../package.json'; let tree; const standard = { @@ -32,6 +30,7 @@ const standard = { ops: 0, }, }; + describe('SBTree - Performance - Standard Benchmark within test ', async function () { this.timeout(10000); before((done) => { diff --git a/test/benchmark/2.extended.js b/test/benchmark/2.extended.js index f250edf..35a314c 100644 --- a/test/benchmark/2.extended.js +++ b/test/benchmark/2.extended.js @@ -1,10 +1,7 @@ -const { expect } = require('chai'); -const each = require('lodash.foreach'); -const reduce = require('lodash.reduce'); -const { SBTree } = require('../../index'); -const fakeData = require('../fixtures/age'); -const { Timer } = require('../../src/utils/time'); -const { version } = require('../../package.json'); +import { SBTree } from '../../index.js'; +import { Timer } from '../../src/utils/time.js'; +import fakeData from '../fixtures/age.js'; +import { version } from '../../package.json'; let tree; diff --git a/test/benchmark/3.multi-trees.js b/test/benchmark/3.multi-trees.js index 2c92326..487d756 100644 --- a/test/benchmark/3.multi-trees.js +++ b/test/benchmark/3.multi-trees.js @@ -1,9 +1,7 @@ -const { expect } = require('chai'); -const each = require('lodash.foreach'); -const { SBTree } = require('../../index'); -const fakeData = require('../fixtures/users'); -const { Timer } = require('../../src/utils/time'); -const { version } = require('../../package.json'); +import { SBTree } from '../../index.js'; +import { Timer } from '../../src/utils/time.js'; +import fakeData from '../fixtures/age.js'; +import { version } from '../../package.json'; let tree; const standard = { From b7259859744b81e85d3aa6a94f948cf49cda63ce Mon Sep 17 00:00:00 2001 From: Alex Werner Date: Thu, 11 Jan 2024 11:40:50 +0100 Subject: [PATCH 4/9] test: added node 18 and 21 to tests --- .github/workflows/node.js.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index c860800..728ddff 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -16,7 +16,7 @@ jobs: strategy: matrix: - node-version: [14.x] + node-version: [14.x, 18.x, 21.x] steps: - uses: actions/checkout@v2 From 95ce0d3412f0fa705a0715934256208c8f3e8f54 Mon Sep 17 00:00:00 2001 From: Alex Werner Date: Thu, 11 Jan 2024 13:46:27 +0100 Subject: [PATCH 5/9] feat: provided with additional ESM migrate --- index.js | 4 +- src/adapters/FsAdapter/FsAdapter.js | 69 ++++++++++----- .../FsAdapter/methods/insertSortedInLeaf.js | 3 +- src/adapters/MemoryAdapter/MemoryAdapter.js | 78 ++++++++++------- .../MemoryAdapter/MemoryAdapter.spec.js | 2 +- .../MemoryAdapter/methods/addInLeaf.js | 3 +- .../MemoryAdapter/methods/addInLeaf.spec.js | 3 +- .../MemoryAdapter/methods/createLeaf.js | 7 +- .../MemoryAdapter/methods/createLeaf.spec.js | 4 +- .../MemoryAdapter/methods/findInLeaf.js | 7 +- .../MemoryAdapter/methods/findInLeaf.spec.js | 2 +- .../MemoryAdapter/methods/getAllInLeaf.js | 3 +- .../MemoryAdapter/methods/getDocument.js | 2 +- .../MemoryAdapter/methods/getLeft.spec.js | 3 +- .../MemoryAdapter/methods/getLeftInLeaf.js | 2 +- .../MemoryAdapter/methods/getRight.spec.js | 3 +- .../MemoryAdapter/methods/getRightInLeaf.js | 2 +- .../methods/removeInLeaf.spec.js | 3 +- src/adapters/index.js | 8 +- src/index.js | 6 +- src/index.spec.js | 2 +- src/types/SBFLeaf/SBFLeaf.js | 51 +++++++---- src/types/SBFLeaf/SBFLeaf.spec.js | 7 +- .../SBFLeaf/methods/findGreaterThan.spec.js | 3 +- .../SBFLeaf/methods/findLowerThan.spec.js | 3 +- src/types/SBFLeaf/methods/getAll.spec.js | 2 +- .../SBFLeaf/methods/getFillStatus.spec.js | 2 +- src/types/SBFLeaf/methods/getLeft.spec.js | 2 +- src/types/SBFLeaf/methods/getRight.spec.js | 2 +- src/types/SBFLeaf/methods/insert.spec.js | 2 +- .../methods/isFillFactorFilled.spec.js | 2 +- src/types/SBFLeaf/methods/isFull.spec.js | 3 +- src/types/SBFLeaf/methods/remove.spec.js | 2 +- src/types/SBFLeaf/methods/split.js | 4 +- src/types/SBFLeaf/methods/split.spec.js | 3 +- src/types/SBFNode/SBFNode.js | 50 +++++++---- src/types/SBFNode/SBFNode.spec.js | 7 +- src/types/SBFNode/methods/insert.js | 3 +- .../SBFNode/methods/insertReferenceKey.js | 3 +- src/types/SBFNode/methods/replace.js | 3 +- src/types/SBFRoot/SBFRoot.js | 50 ++++++----- src/types/SBFRoot/methods/find.js | 7 +- src/types/SBFRoot/methods/find.spec.js | 13 +-- src/types/SBFRoot/methods/getAll.spec.js | 6 +- .../SBFRoot/methods/insertReferenceKey.js | 3 +- .../SBFRoot/methods/ops/findGreaterThan.js | 2 + src/types/SBFRoot/methods/split.js | 8 +- src/types/SBFTree/SBFTree.js | 21 +++-- src/types/SBFTree/SBFTree.spec.js | 4 +- src/types/SBFTree/methods/createRoot.js | 10 ++- src/types/SBFTree/methods/find.js | 2 +- src/types/SBTree/SBTree.js | 42 ++++++---- src/types/SBTree/SBTree.spec.js | 2 +- src/types/SBTree/methods/findDocuments.js | 2 +- src/types/SBTree/ops/get.spec.js | 2 +- src/types/SBTree/ops/insert.js | 3 +- src/types/SBTree/ops/insert.spec.js | 5 +- src/types/SBTree/ops/query.js | 20 ++--- src/types/SBTree/ops/query.spec.js | 2 +- src/types/SBTree/ops/remove.js | 5 +- src/types/SBTree/ops/remove.spec.js | 2 +- src/types/SBTree/ops/replace.js | 12 +-- .../utils/getFieldNamesFromQuery.spec.js | 5 +- src/utils/array.spec.js | 24 ++++-- src/utils/comparators.spec.js | 33 +++++--- src/utils/crypto.js | 84 ++++++++++++------- src/utils/crypto.spec.js | 2 +- src/utils/index.js | 10 +-- test/functional/use.case.1.spec.js | 22 ++--- test/functional/use.case.2.spec.js | 5 +- test/functional/use.case.3.spec.js | 8 +- test/functional/use.case.4.spec.js | 6 +- test/functional/use.case.5.spec.js | 9 +- test/test.utils.js | 5 +- 74 files changed, 471 insertions(+), 335 deletions(-) diff --git a/index.js b/index.js index 3fc7798..7b686c0 100644 --- a/index.js +++ b/index.js @@ -1 +1,3 @@ -module.exports = require('./src'); +// module.exports = require('./src'); +import SBTree from './src/types/SBTree/SBTree.js'; +export { SBTree }; diff --git a/src/adapters/FsAdapter/FsAdapter.js b/src/adapters/FsAdapter/FsAdapter.js index db0ffa7..c12f8f4 100644 --- a/src/adapters/FsAdapter/FsAdapter.js +++ b/src/adapters/FsAdapter/FsAdapter.js @@ -1,5 +1,28 @@ -const {FSLock} = require('fslockjs'); -const EventEmitter = require('events'); +import attachParent from "./methods/attachParent.js"; +import addInLeaf from "./methods/addInLeaf.js"; +import createLeaf from "./methods/createLeaf.js"; +import findInLeaf from "./methods/findInLeaf.js"; +import getAllInLeaf from "./methods/getAllInLeaf.js"; +import getLeftInLeaf from "./methods/getLeftInLeaf.js"; +import getRightInLeaf from "./methods/getRightInLeaf.js"; +import getDocument from "./methods/getDocument.js"; +import insertSortedInLeaf from "./methods/insertSortedInLeaf.js"; +import loadDatabase from "./methods/loadDatabase.js"; +import openDocument from "./methods/openDocument.js"; +import openLeaf from "./methods/openLeaf.js"; +import removeDocument from "./methods/removeDocument.js"; +import openLeafData from "./methods/openLeafData.js"; +import replaceDocument from "./methods/replaceDocument.js"; +import replaceInLeaf from "./methods/replaceInLeaf.js"; +import saveDatabase from "./methods/saveDatabase.js"; +import saveDocument from "./methods/saveDocument.js"; +import saveLeafData from "./methods/saveLeafData.js"; +import splitLeaf from "./methods/splitLeaf.js"; +import updateDocument from "./methods/updateDocument.js"; + +import {FSLock} from 'fslockjs'; +import EventEmitter from 'events'; + const defaultProps = { path: '.db', //TODO : Ideally, when false, we keep a set of deferred job that we execute once saveDatabase is called. @@ -46,25 +69,25 @@ class FsAdapter extends EventEmitter { //TODO : Optimization possible by just removing the LeafMeta from memory for disk instead, but existance search will be slower. //TODO : LRU Cache -FsAdapter.prototype.attachParent = require('./methods/attachParent'); -FsAdapter.prototype.addInLeaf = require('./methods/addInLeaf') -FsAdapter.prototype.createLeaf = require('./methods/createLeaf') -FsAdapter.prototype.findInLeaf = require('./methods/findInLeaf') -FsAdapter.prototype.getAllInLeaf = require('./methods/getAllInLeaf') -FsAdapter.prototype.getLeftInLeaf = require('./methods/getLeftInLeaf') -FsAdapter.prototype.getRightInLeaf = require('./methods/getRightInLeaf') -FsAdapter.prototype.getDocument = require('./methods/getDocument') -FsAdapter.prototype.insertSortedInLeaf = require('./methods/insertSortedInLeaf') -FsAdapter.prototype.loadDatabase = require('./methods/loadDatabase') -FsAdapter.prototype.openDocument = require('./methods/openDocument') -FsAdapter.prototype.openLeaf = require('./methods/openLeaf') -FsAdapter.prototype.removeDocument = require('./methods/removeDocument'); -FsAdapter.prototype.openLeafData = require('./methods/openLeafData') -FsAdapter.prototype.replaceDocument = require('./methods/replaceDocument') -FsAdapter.prototype.replaceInLeaf = require('./methods/replaceInLeaf') -FsAdapter.prototype.saveDatabase = require('./methods/saveDatabase') -FsAdapter.prototype.saveDocument = require('./methods/saveDocument') -FsAdapter.prototype.saveLeafData = require('./methods/saveLeafData') -FsAdapter.prototype.splitLeaf = require('./methods/splitLeaf') -FsAdapter.prototype.updateDocument = require('./methods/updateDocument') +FsAdapter.prototype.attachParent = attachParent; +FsAdapter.prototype.addInLeaf = addInLeaf; +FsAdapter.prototype.createLeaf = createLeaf; +FsAdapter.prototype.findInLeaf = findInLeaf; +FsAdapter.prototype.getAllInLeaf = getAllInLeaf; +FsAdapter.prototype.getLeftInLeaf = getLeftInLeaf; +FsAdapter.prototype.getRightInLeaf = getRightInLeaf; +FsAdapter.prototype.getDocument = getDocument; +FsAdapter.prototype.insertSortedInLeaf = insertSortedInLeaf; +FsAdapter.prototype.loadDatabase = loadDatabase; +FsAdapter.prototype.openDocument = openDocument; +FsAdapter.prototype.openLeaf = openLeaf; +FsAdapter.prototype.removeDocument = removeDocument; +FsAdapter.prototype.openLeafData = openLeafData; +FsAdapter.prototype.replaceDocument = replaceDocument; +FsAdapter.prototype.replaceInLeaf = replaceInLeaf; +FsAdapter.prototype.saveDatabase = saveDatabase; +FsAdapter.prototype.saveDocument = saveDocument; +FsAdapter.prototype.saveLeafData = saveLeafData; +FsAdapter.prototype.splitLeaf = splitLeaf; +FsAdapter.prototype.updateDocument = updateDocument; export default FsAdapter; diff --git a/src/adapters/FsAdapter/methods/insertSortedInLeaf.js b/src/adapters/FsAdapter/methods/insertSortedInLeaf.js index 01c2b2c..9515892 100644 --- a/src/adapters/FsAdapter/methods/insertSortedInLeaf.js +++ b/src/adapters/FsAdapter/methods/insertSortedInLeaf.js @@ -1,5 +1,4 @@ -// const { insertSorted } = require('../../../utils/array'); -import insertSorted from '../../../utils/array.js'; +import {insertSorted} from '../../../utils/array.js'; export default async function insertSortedInLeaf(leafId, value) { const data = await this.openLeafData(leafId); if (!data || !data.keys) { diff --git a/src/adapters/MemoryAdapter/MemoryAdapter.js b/src/adapters/MemoryAdapter/MemoryAdapter.js index ad1ee0a..5d84e02 100644 --- a/src/adapters/MemoryAdapter/MemoryAdapter.js +++ b/src/adapters/MemoryAdapter/MemoryAdapter.js @@ -1,38 +1,54 @@ -const each = require('lodash.foreach'); -const Data = require('./types/Data'); -const Meta = require('./types/Meta'); +import each from 'lodash.foreach'; +import Data from './types/Data.js'; +import Meta from './types/Meta.js'; +import splitLeaf from "./methods/splitLeaf.js"; +import addInLeaf from "./methods/addInLeaf.js"; +import createLeaf from "./methods/createLeaf.js"; +import getAllInLeaf from "./methods/getAllInLeaf.js"; +import getLeftInLeaf from "./methods/getLeftInLeaf.js"; +import getRightInLeaf from "./methods/getRightInLeaf.js"; +import findInLeaf from "./methods/findInLeaf.js"; +import getDocument from "./methods/getDocument.js"; +import openLeaf from "./methods/openLeaf.js"; +import removeDocument from "./methods/removeDocument.js"; +import removeInLeaf from "./methods/removeInLeaf.js"; +import replaceDocument from "./methods/replaceDocument.js"; +import replaceInLeaf from "./methods/replaceInLeaf.js"; +import saveDocument from "./methods/saveDocument.js"; const parseLeafs = (_leafs) => { - const leafs = {}; - each(_leafs, (_leaf, _leafId) => { - leafs[_leafId] = { - meta: new Meta(_leaf.meta), - data: new Data(_leaf.data), - }; - }); - return leafs; + const leafs = {}; + each(_leafs, (_leaf, _leafId) => { + leafs[_leafId] = { + meta: new Meta(_leaf.meta), + data: new Data(_leaf.data), + }; + }); + return leafs; }; + class MemoryAdapter { - constructor(props = {}) { - this.name = 'MemoryAdapter'; - this.leafs = (props.leafs) ? parseLeafs(props.leafs) : {}; - this.documents = (props.documents) ? props.documents : {}; - this.isReady = true; - } + constructor(props = {}) { + this.name = 'MemoryAdapter'; + this.leafs = (props.leafs) ? parseLeafs(props.leafs) : {}; + this.documents = (props.documents) ? props.documents : {}; + this.isReady = true; + } } -MemoryAdapter.prototype.addInLeaf = require('./methods/addInLeaf'); -MemoryAdapter.prototype.createLeaf = require('./methods/createLeaf'); -MemoryAdapter.prototype.getAllInLeaf = require('./methods/getAllInLeaf'); -MemoryAdapter.prototype.getLeftInLeaf = require('./methods/getLeftInLeaf'); -MemoryAdapter.prototype.getRightInLeaf = require('./methods/getRightInLeaf'); -MemoryAdapter.prototype.findInLeaf = require('./methods/findInLeaf'); -MemoryAdapter.prototype.getDocument = require('./methods/getDocument'); -MemoryAdapter.prototype.openLeaf = require('./methods/openLeaf'); -MemoryAdapter.prototype.removeDocument = require('./methods/removeDocument'); -MemoryAdapter.prototype.removeInLeaf = require('./methods/removeInLeaf'); -MemoryAdapter.prototype.replaceDocument = require('./methods/replaceDocument'); -MemoryAdapter.prototype.replaceInLeaf = require('./methods/replaceInLeaf'); -MemoryAdapter.prototype.saveDocument = require('./methods/saveDocument'); -MemoryAdapter.prototype.splitLeaf = require('./methods/splitLeaf'); + +MemoryAdapter.prototype.addInLeaf = addInLeaf; +MemoryAdapter.prototype.createLeaf = createLeaf; +MemoryAdapter.prototype.getAllInLeaf = getAllInLeaf; +MemoryAdapter.prototype.getLeftInLeaf = getLeftInLeaf; +MemoryAdapter.prototype.getRightInLeaf = getRightInLeaf +MemoryAdapter.prototype.findInLeaf = findInLeaf; +MemoryAdapter.prototype.getDocument = getDocument; +MemoryAdapter.prototype.openLeaf = openLeaf; +MemoryAdapter.prototype.removeDocument = removeDocument; +MemoryAdapter.prototype.removeInLeaf = removeInLeaf; +MemoryAdapter.prototype.replaceDocument = replaceDocument; +MemoryAdapter.prototype.replaceInLeaf = replaceInLeaf; +MemoryAdapter.prototype.saveDocument = saveDocument; +MemoryAdapter.prototype.splitLeaf = splitLeaf; export default MemoryAdapter; diff --git a/src/adapters/MemoryAdapter/MemoryAdapter.spec.js b/src/adapters/MemoryAdapter/MemoryAdapter.spec.js index 7633407..6db6ca1 100644 --- a/src/adapters/MemoryAdapter/MemoryAdapter.spec.js +++ b/src/adapters/MemoryAdapter/MemoryAdapter.spec.js @@ -1,5 +1,5 @@ import {expect} from 'chai'; -import MemoryAdapter from './MemoryAdapter'; +import MemoryAdapter from './MemoryAdapter.js'; describe('Adapters - MemoryAdapter', function suite() { it('should initialize', function () { diff --git a/src/adapters/MemoryAdapter/methods/addInLeaf.js b/src/adapters/MemoryAdapter/methods/addInLeaf.js index 63d3920..90716ac 100644 --- a/src/adapters/MemoryAdapter/methods/addInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/addInLeaf.js @@ -1,5 +1,6 @@ -const { insertSorted } = require('../../../utils/array'); +// const { insertSorted } = require('../../../utils/array'); +import {insertSorted} from '../../../utils/array.js'; async function addInLeaf(leafName, identifier, value) { if (!this.leafs[leafName]) { await this.createLeaf(leafName); diff --git a/src/adapters/MemoryAdapter/methods/addInLeaf.spec.js b/src/adapters/MemoryAdapter/methods/addInLeaf.spec.js index f3840c3..bb42e5f 100644 --- a/src/adapters/MemoryAdapter/methods/addInLeaf.spec.js +++ b/src/adapters/MemoryAdapter/methods/addInLeaf.spec.js @@ -1,6 +1,5 @@ import { expect } from 'chai'; -const MemoryAdapter = require('../MemoryAdapter'); - +import MemoryAdapter from '../MemoryAdapter.js'; describe('Adapters - MemoryAdapter - addInLeaf', function suite() { let adapter; const leafId = '16d72f309846d'; diff --git a/src/adapters/MemoryAdapter/methods/createLeaf.js b/src/adapters/MemoryAdapter/methods/createLeaf.js index 388e666..eac0275 100644 --- a/src/adapters/MemoryAdapter/methods/createLeaf.js +++ b/src/adapters/MemoryAdapter/methods/createLeaf.js @@ -1,5 +1,8 @@ -const Data = require('../types/Data'); -const Meta = require('../types/Meta'); +// const Data = require('../types/Data'); +// const Meta = require('../types/Meta'); + +import Meta from "../types/Meta.js"; +import Data from "../types/Data.js"; async function createLeaf(leafName) { if (this.leafs[leafName]) { diff --git a/src/adapters/MemoryAdapter/methods/createLeaf.spec.js b/src/adapters/MemoryAdapter/methods/createLeaf.spec.js index ab4b6e5..47e66aa 100644 --- a/src/adapters/MemoryAdapter/methods/createLeaf.spec.js +++ b/src/adapters/MemoryAdapter/methods/createLeaf.spec.js @@ -1,6 +1,6 @@ import { expect } from 'chai'; -const MemoryAdapter = require('../MemoryAdapter'); -const {expectThrowsAsync} = require('../../../../test/test.utils'); +import MemoryAdapter from '../MemoryAdapter.js'; +import {expectThrowsAsync} from '../../../../test/test.utils.js'; describe('Adapters - MemoryAdapter - createLeaf', function suite() { let adapter; diff --git a/src/adapters/MemoryAdapter/methods/findInLeaf.js b/src/adapters/MemoryAdapter/methods/findInLeaf.js index 7e77d5e..9e49cc7 100644 --- a/src/adapters/MemoryAdapter/methods/findInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/findInLeaf.js @@ -1,7 +1,6 @@ -const cloneDeep = require('lodash.clonedeep'); -const range = require('lodash.range'); -const lowerThanKeys = require('./ops/lowerThanKeys'); -const greaterThanKeys = require('./ops/greaterThanKeys'); +import cloneDeep from "lodash.clonedeep"; +import lowerThanKeys from "./ops/lowerThanKeys.js"; +import greaterThanKeys from "./ops/greaterThanKeys.js"; export default async function findInLeaf(leafId, value, op = '$eq') { const leaf = this.leafs[leafId]; diff --git a/src/adapters/MemoryAdapter/methods/findInLeaf.spec.js b/src/adapters/MemoryAdapter/methods/findInLeaf.spec.js index b7039a7..5dcd38e 100644 --- a/src/adapters/MemoryAdapter/methods/findInLeaf.spec.js +++ b/src/adapters/MemoryAdapter/methods/findInLeaf.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const MemoryAdapter = require('../MemoryAdapter'); +import MemoryAdapter from '../MemoryAdapter.js'; describe('Adapters - MemoryAdapter - findInLeaf', function suite() { let adapter; diff --git a/src/adapters/MemoryAdapter/methods/getAllInLeaf.js b/src/adapters/MemoryAdapter/methods/getAllInLeaf.js index 946e893..e9be472 100644 --- a/src/adapters/MemoryAdapter/methods/getAllInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/getAllInLeaf.js @@ -1,5 +1,4 @@ -const cloneDeep = require('lodash.clonedeep'); - +import cloneDeep from "lodash.clonedeep"; export default async function getAllInLeaf(leafId) { const leaf = this.leafs[leafId]; return cloneDeep({ identifiers: leaf.meta.identifiers, keys: leaf.data.keys }); diff --git a/src/adapters/MemoryAdapter/methods/getDocument.js b/src/adapters/MemoryAdapter/methods/getDocument.js index f979e15..2154432 100644 --- a/src/adapters/MemoryAdapter/methods/getDocument.js +++ b/src/adapters/MemoryAdapter/methods/getDocument.js @@ -1,4 +1,4 @@ -const cloneDeep = require('lodash.clonedeep'); +import cloneDeep from "lodash.clonedeep"; export default async function getDocument(identifier) { const doc = this.documents[identifier]; diff --git a/src/adapters/MemoryAdapter/methods/getLeft.spec.js b/src/adapters/MemoryAdapter/methods/getLeft.spec.js index e97dc57..1489a80 100644 --- a/src/adapters/MemoryAdapter/methods/getLeft.spec.js +++ b/src/adapters/MemoryAdapter/methods/getLeft.spec.js @@ -1,6 +1,5 @@ import { expect } from 'chai'; -const MemoryAdapter = require('../MemoryAdapter'); - +import MemoryAdapter from '../MemoryAdapter.js'; describe('Adapters - MemoryAdapter - getLeft', function suite() { let adapter; const leafId = '16d72f309846d'; diff --git a/src/adapters/MemoryAdapter/methods/getLeftInLeaf.js b/src/adapters/MemoryAdapter/methods/getLeftInLeaf.js index 2a60537..45c70e2 100644 --- a/src/adapters/MemoryAdapter/methods/getLeftInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/getLeftInLeaf.js @@ -1,4 +1,4 @@ -const cloneDeep = require('lodash.clonedeep'); +import cloneDeep from "lodash.clonedeep"; export default async function getLeftInLeaf(leafId) { const leaf = this.leafs[leafId]; diff --git a/src/adapters/MemoryAdapter/methods/getRight.spec.js b/src/adapters/MemoryAdapter/methods/getRight.spec.js index 8318005..fd7e6dc 100644 --- a/src/adapters/MemoryAdapter/methods/getRight.spec.js +++ b/src/adapters/MemoryAdapter/methods/getRight.spec.js @@ -1,6 +1,5 @@ import { expect } from 'chai'; -const MemoryAdapter = require('../MemoryAdapter'); - +import MemoryAdapter from '../MemoryAdapter.js'; describe('Adapters - MemoryAdapter - getRight', function suite() { let adapter; const leafId = '16d72f309846d'; diff --git a/src/adapters/MemoryAdapter/methods/getRightInLeaf.js b/src/adapters/MemoryAdapter/methods/getRightInLeaf.js index f0ba26f..98e3078 100644 --- a/src/adapters/MemoryAdapter/methods/getRightInLeaf.js +++ b/src/adapters/MemoryAdapter/methods/getRightInLeaf.js @@ -1,4 +1,4 @@ -const cloneDeep = require('lodash.clonedeep'); +import cloneDeep from "lodash.clonedeep"; export default async function getRightInLeaf(leafId) { const leaf = this.leafs[leafId]; diff --git a/src/adapters/MemoryAdapter/methods/removeInLeaf.spec.js b/src/adapters/MemoryAdapter/methods/removeInLeaf.spec.js index 9308889..049a013 100644 --- a/src/adapters/MemoryAdapter/methods/removeInLeaf.spec.js +++ b/src/adapters/MemoryAdapter/methods/removeInLeaf.spec.js @@ -1,6 +1,5 @@ import { expect } from 'chai'; -const MemoryAdapter = require('../MemoryAdapter'); - +import MemoryAdapter from '../MemoryAdapter.js'; describe('Adapters - MemoryAdapter - removeInLeaf', function suite() { let adapter; const leafId = '16d72f309846d'; diff --git a/src/adapters/index.js b/src/adapters/index.js index e39007e..111ddc3 100644 --- a/src/adapters/index.js +++ b/src/adapters/index.js @@ -1,4 +1,6 @@ -export default { - FsAdapter: require('./FsAdapter/FsAdapter.js'), - MemoryAdapter: require('./MemoryAdapter/MemoryAdapter.js'), +import FsAdapter from './FsAdapter/FsAdapter.js'; +import MemoryAdapter from './MemoryAdapter/MemoryAdapter.js'; +export { + FsAdapter, + MemoryAdapter, }; diff --git a/src/index.js b/src/index.js index 43db714..0513b9a 100644 --- a/src/index.js +++ b/src/index.js @@ -1,7 +1,7 @@ import ObjectID from 'mongo-objectid'; -import SBTree from './types/SBTree/SBTree'; -import adapters from './adapters/index'; -import utils from './utils/index'; +import SBTree from './types/SBTree/SBTree.js'; +import * as adapters from './adapters/index.js'; +import * as utils from './utils/index.js'; export default { SBTree, ObjectID, diff --git a/src/index.spec.js b/src/index.spec.js index e39240e..6d23a5f 100644 --- a/src/index.spec.js +++ b/src/index.spec.js @@ -1,5 +1,5 @@ import {expect} from 'chai'; -import indexSpec from './index'; +import indexSpec from './index.js'; describe('SBTree', () => { it('should work', function () { expect(indexSpec).to.have.property('SBTree'); diff --git a/src/types/SBFLeaf/SBFLeaf.js b/src/types/SBFLeaf/SBFLeaf.js index ccc5387..15d7cc7 100644 --- a/src/types/SBFLeaf/SBFLeaf.js +++ b/src/types/SBFLeaf/SBFLeaf.js @@ -1,5 +1,19 @@ -const {generateLeafId} = require('../../utils/crypto'); - +import {generateLeafId} from '../../utils/crypto.js'; +import split from "./methods/split.js"; +import replace from "./methods/replace.js"; +import remove from "./methods/remove.js"; +import redistribute from "./methods/redistribute.js"; +import mergeWithSiblings from "./methods/mergeWithSiblings.js"; +import isFull from "./methods/isFull.js"; +import isFillFactorFilled from "./methods/isFillFactorFilled.js"; +import findGreaterThan from "./methods/findGreaterThan.js"; +import findLowerThan from "./methods/findLowerThan.js"; +import getRight from "./methods/getRight.js"; +import getLeft from "./methods/getLeft.js"; +import getFillStatus from "./methods/getFillStatus.js"; +import getAll from "./methods/getAll.js"; +import find from "./methods/find.js"; +import insert from "./methods/insert.js"; /** * SFBLeaf * @@ -12,6 +26,9 @@ class SFBLeaf { } this.#parent = props.parent; + // this.childrens = []; + // this.keys = []; + // this.identifiers = []; this.id = (props.id) ? props.id : generateLeafId(); this.fieldName = (props.parent.fieldName) ? props.parent.fieldName : null; this.type = 'leaf'; @@ -23,19 +40,19 @@ class SFBLeaf { this.#parent = parent } }; -SFBLeaf.prototype.insert = require('./methods/insert'); -SFBLeaf.prototype.find = require('./methods/find'); -SFBLeaf.prototype.getAll = require('./methods/getAll'); -SFBLeaf.prototype.getFillStatus = require('./methods/getFillStatus'); -SFBLeaf.prototype.getLeft = require('./methods/getLeft'); -SFBLeaf.prototype.getRight = require('./methods/getRight'); -SFBLeaf.prototype.findLowerThan = require('./methods/findLowerThan'); -SFBLeaf.prototype.findGreaterThan = require('./methods/findGreaterThan'); -SFBLeaf.prototype.isFillFactorFilled = require('./methods/isFillFactorFilled'); -SFBLeaf.prototype.isFull = require('./methods/isFull'); -SFBLeaf.prototype.mergeWithSiblings = require('./methods/mergeWithSiblings'); -SFBLeaf.prototype.redistribute = require('./methods/redistribute'); -SFBLeaf.prototype.remove = require('./methods/remove'); -SFBLeaf.prototype.replace = require('./methods/replace'); -SFBLeaf.prototype.split = require('./methods/split'); +SFBLeaf.prototype.insert = insert; +SFBLeaf.prototype.find = find; +SFBLeaf.prototype.getAll = getAll; +SFBLeaf.prototype.getFillStatus = getFillStatus; +SFBLeaf.prototype.getLeft = getLeft; +SFBLeaf.prototype.getRight = getRight; +SFBLeaf.prototype.findLowerThan = findLowerThan; +SFBLeaf.prototype.findGreaterThan = findGreaterThan; +SFBLeaf.prototype.isFillFactorFilled = isFillFactorFilled; +SFBLeaf.prototype.isFull = isFull; +SFBLeaf.prototype.mergeWithSiblings = mergeWithSiblings; +SFBLeaf.prototype.redistribute = redistribute; +SFBLeaf.prototype.remove = remove; +SFBLeaf.prototype.replace = replace; +SFBLeaf.prototype.split = split; export default SFBLeaf; diff --git a/src/types/SBFLeaf/SBFLeaf.spec.js b/src/types/SBFLeaf/SBFLeaf.spec.js index fc50dbb..58e344c 100644 --- a/src/types/SBFLeaf/SBFLeaf.spec.js +++ b/src/types/SBFLeaf/SBFLeaf.spec.js @@ -1,8 +1,7 @@ import { expect } from 'chai'; -const SBFLeaf = require('./SBFLeaf'); -const MemoryAdpter = require('../../adapters/MemoryAdapter/MemoryAdapter'); -const adapter = new MemoryAdpter() - +import SBFLeaf from './SBFLeaf.js'; +import MemoryAdapter from '../../adapters/MemoryAdapter/MemoryAdapter.js'; +const adapter = new MemoryAdapter(); const fakeTree = { options: {order: 3}, adapter, diff --git a/src/types/SBFLeaf/methods/findGreaterThan.spec.js b/src/types/SBFLeaf/methods/findGreaterThan.spec.js index 360e452..b218045 100644 --- a/src/types/SBFLeaf/methods/findGreaterThan.spec.js +++ b/src/types/SBFLeaf/methods/findGreaterThan.spec.js @@ -1,5 +1,6 @@ import { expect } from 'chai'; -const findGreaterThan = require('./findGreaterThan'); +// const findGreaterThan = require('./findGreaterThan'); +import findGreaterThan from './findGreaterThan.js'; let called = []; const self = { diff --git a/src/types/SBFLeaf/methods/findLowerThan.spec.js b/src/types/SBFLeaf/methods/findLowerThan.spec.js index 473a6fd..e890cdf 100644 --- a/src/types/SBFLeaf/methods/findLowerThan.spec.js +++ b/src/types/SBFLeaf/methods/findLowerThan.spec.js @@ -1,5 +1,6 @@ import { expect } from 'chai'; -const findLowerThan = require('./findLowerThan'); +// const findLowerThan = require('./findLowerThan'); +import findLowerThan from './findLowerThan.js'; let called = []; const self = { diff --git a/src/types/SBFLeaf/methods/getAll.spec.js b/src/types/SBFLeaf/methods/getAll.spec.js index 3302b04..59a0085 100644 --- a/src/types/SBFLeaf/methods/getAll.spec.js +++ b/src/types/SBFLeaf/methods/getAll.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const getAll = require('./getAll'); +import getAll from './getAll.js'; let called = []; const self = { diff --git a/src/types/SBFLeaf/methods/getFillStatus.spec.js b/src/types/SBFLeaf/methods/getFillStatus.spec.js index e1bdbc6..c4664de 100644 --- a/src/types/SBFLeaf/methods/getFillStatus.spec.js +++ b/src/types/SBFLeaf/methods/getFillStatus.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const getFillStatus = require('./getFillStatus'); +import getFillStatus from './getFillStatus.js'; let called = []; let meta = { diff --git a/src/types/SBFLeaf/methods/getLeft.spec.js b/src/types/SBFLeaf/methods/getLeft.spec.js index 8fac513..e44ace6 100644 --- a/src/types/SBFLeaf/methods/getLeft.spec.js +++ b/src/types/SBFLeaf/methods/getLeft.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const getLeft = require('./getLeft'); +import getLeft from './getLeft.js'; let called = []; const self = { diff --git a/src/types/SBFLeaf/methods/getRight.spec.js b/src/types/SBFLeaf/methods/getRight.spec.js index dde47b9..6a9768e 100644 --- a/src/types/SBFLeaf/methods/getRight.spec.js +++ b/src/types/SBFLeaf/methods/getRight.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const getRight = require('./getRight'); +import getRight from './getRight.js'; let called = []; const self = { diff --git a/src/types/SBFLeaf/methods/insert.spec.js b/src/types/SBFLeaf/methods/insert.spec.js index bf20f33..eb2f764 100644 --- a/src/types/SBFLeaf/methods/insert.spec.js +++ b/src/types/SBFLeaf/methods/insert.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const insert = require('./insert'); +import insert from './insert.js'; const jean = {identifier: '507f191e810c19729de860ea', name: 'Jean'}; const alex = {identifier: '507f1f77bcf86cd799439011', name: 'Alex'}; diff --git a/src/types/SBFLeaf/methods/isFillFactorFilled.spec.js b/src/types/SBFLeaf/methods/isFillFactorFilled.spec.js index 292b293..36759f2 100644 --- a/src/types/SBFLeaf/methods/isFillFactorFilled.spec.js +++ b/src/types/SBFLeaf/methods/isFillFactorFilled.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const isFillFactorFilled = require('./isFillFactorFilled'); +import isFillFactorFilled from './isFillFactorFilled.js'; let called = []; let meta = { diff --git a/src/types/SBFLeaf/methods/isFull.spec.js b/src/types/SBFLeaf/methods/isFull.spec.js index 01f07c1..de22300 100644 --- a/src/types/SBFLeaf/methods/isFull.spec.js +++ b/src/types/SBFLeaf/methods/isFull.spec.js @@ -1,6 +1,5 @@ import { expect } from 'chai'; -const isFull = require('./isFull'); - +import isFull from './isFull.js'; let called = []; let meta = { size:2 diff --git a/src/types/SBFLeaf/methods/remove.spec.js b/src/types/SBFLeaf/methods/remove.spec.js index bb0c51b..d60c7b8 100644 --- a/src/types/SBFLeaf/methods/remove.spec.js +++ b/src/types/SBFLeaf/methods/remove.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const remove = require('./remove'); +import remove from './remove.js'; const jean = {identifier: '507f191e810c19729de860ea', name: 'Jean'}; const alex = {identifier: '507f1f77bcf86cd799439011', name: 'Alex'}; diff --git a/src/types/SBFLeaf/methods/split.js b/src/types/SBFLeaf/methods/split.js index c82057e..09a14cf 100644 --- a/src/types/SBFLeaf/methods/split.js +++ b/src/types/SBFLeaf/methods/split.js @@ -1,10 +1,8 @@ async function split() { - const SBFLeaf = require('../SBFLeaf'); - const parent = this.getParent(); const adapter = parent.getAdapter(); - const newLeaf = new SBFLeaf({ parent }); + const newLeaf = new this.constructor({ parent }); await adapter.createLeaf(newLeaf.id); const midKey = await adapter.splitLeaf(this, newLeaf); diff --git a/src/types/SBFLeaf/methods/split.spec.js b/src/types/SBFLeaf/methods/split.spec.js index aefcbac..a16a9d7 100644 --- a/src/types/SBFLeaf/methods/split.spec.js +++ b/src/types/SBFLeaf/methods/split.spec.js @@ -1,6 +1,5 @@ import { expect } from 'chai'; -const split = require('./split'); - +import split from './split.js'; let called = []; const self = { id: '16d72f309846d', diff --git a/src/types/SBFNode/SBFNode.js b/src/types/SBFNode/SBFNode.js index 40176e2..d7d03f8 100644 --- a/src/types/SBFNode/SBFNode.js +++ b/src/types/SBFNode/SBFNode.js @@ -1,6 +1,20 @@ -const {insertSorted} = require('../../utils/array'); -const SBFLeaf = require('../SBFLeaf/SBFLeaf'); -const {generateNodeId} = require('../../utils/crypto'); +import {generateNodeId} from '../../utils/crypto.js'; +import SBFLeaf from '../SBFLeaf/SBFLeaf.js'; +import attachLeaf from "./methods/attachLeaf.js"; +import find from "./methods/find.js"; +import findLowerThan from "./methods/findLowerThan.js"; +import findGreaterThan from "./methods/findGreaterThan.js"; +import getAdapter from "./methods/getAdapter.js"; +import getAll from "./methods/getAll.js"; +import getFillStatus from "./methods/getFillStatus.js"; +import getTreeOptions from "./methods/getTreeOptions.js"; +import insert from "./methods/insert.js"; +import insertReferenceKey from "./methods/insertReferenceKey.js"; +import isFull from "./methods/isFull.js"; +import mergeUp from "./methods/mergeUp.js"; +import remove from "./methods/remove.js"; +import replace from "./methods/replace.js"; +import split from "./methods/split.js"; /** * SBFTree @@ -44,19 +58,19 @@ class SBFNode { } }; -SBFNode.prototype.attachLeaf = require('./methods/attachLeaf') -SBFNode.prototype.find = require('./methods/find') -SBFNode.prototype.findLowerThan = require('./methods/findLowerThan') -SBFNode.prototype.findGreaterThan = require('./methods/findGreaterThan') -SBFNode.prototype.getAdapter = require('./methods/getAdapter') -SBFNode.prototype.getAll = require('./methods/getAll') -SBFNode.prototype.getFillStatus = require('./methods/getFillStatus') -SBFNode.prototype.getTreeOptions = require('./methods/getTreeOptions') -SBFNode.prototype.insert = require('./methods/insert') -SBFNode.prototype.insertReferenceKey = require('./methods/insertReferenceKey') -SBFNode.prototype.isFull = require('./methods/isFull') -SBFNode.prototype.mergeUp = require('./methods/mergeUp') -SBFNode.prototype.remove = require('./methods/remove') -SBFNode.prototype.replace = require('./methods/replace') -SBFNode.prototype.split = require('./methods/split') +SBFNode.prototype.attachLeaf = attachLeaf; +SBFNode.prototype.find = find; +SBFNode.prototype.findLowerThan = findLowerThan; +SBFNode.prototype.findGreaterThan = findGreaterThan +SBFNode.prototype.getAdapter = getAdapter; +SBFNode.prototype.getAll = getAll; +SBFNode.prototype.getFillStatus = getFillStatus; +SBFNode.prototype.getTreeOptions = getTreeOptions; +SBFNode.prototype.insert = insert; +SBFNode.prototype.insertReferenceKey = insertReferenceKey; +SBFNode.prototype.isFull = isFull; +SBFNode.prototype.mergeUp = mergeUp; +SBFNode.prototype.remove = remove; +SBFNode.prototype.replace = replace; +SBFNode.prototype.split = split; export default SBFNode; diff --git a/src/types/SBFNode/SBFNode.spec.js b/src/types/SBFNode/SBFNode.spec.js index 0e8dc58..498a729 100644 --- a/src/types/SBFNode/SBFNode.spec.js +++ b/src/types/SBFNode/SBFNode.spec.js @@ -1,8 +1,7 @@ import { expect } from 'chai'; -const SBFNode = require('./SBFNode'); -const SBFLeaf = require('../SBFLeaf/SBFLeaf'); -const MemoryAdpter = require('../../adapters/MemoryAdapter/MemoryAdapter'); -const adapter = new MemoryAdpter() +import SBFNode from './SBFNode.js'; +import MemoryAdapter from '../../adapters/MemoryAdapter/MemoryAdapter.js'; +const adapter = new MemoryAdapter(); const fakeTree = { order: 3, diff --git a/src/types/SBFNode/methods/insert.js b/src/types/SBFNode/methods/insert.js index a8e8a62..890e3a6 100644 --- a/src/types/SBFNode/methods/insert.js +++ b/src/types/SBFNode/methods/insert.js @@ -1,5 +1,4 @@ -const SBFLeaf = require('../../SBFLeaf/SBFLeaf'); - +import SBFLeaf from '../../SBFLeaf/SBFLeaf.js'; export default async function insert(identifier, value) { const { childrens, keys } = this; if (!childrens.length) { diff --git a/src/types/SBFNode/methods/insertReferenceKey.js b/src/types/SBFNode/methods/insertReferenceKey.js index 2d7cda5..a572bfa 100644 --- a/src/types/SBFNode/methods/insertReferenceKey.js +++ b/src/types/SBFNode/methods/insertReferenceKey.js @@ -1,5 +1,4 @@ -const { insertSorted } = require('../../../utils/array'); - +import { insertSorted } from '../../../utils/array.js'; export default async function insertReferenceKey(value) { if (this.isFull()) { await this.split(); diff --git a/src/types/SBFNode/methods/replace.js b/src/types/SBFNode/methods/replace.js index 595f5e9..dde61b6 100644 --- a/src/types/SBFNode/methods/replace.js +++ b/src/types/SBFNode/methods/replace.js @@ -1,5 +1,4 @@ -const SBFLeaf = require('../../SBFLeaf/SBFLeaf'); - +import SBFLeaf from '../../SBFLeaf/SBFLeaf.js'; export default async function replace(identifier, value) { const { childrens, keys } = this; if (!childrens.length) { diff --git a/src/types/SBFRoot/SBFRoot.js b/src/types/SBFRoot/SBFRoot.js index 805dd32..b035c23 100644 --- a/src/types/SBFRoot/SBFRoot.js +++ b/src/types/SBFRoot/SBFRoot.js @@ -1,9 +1,21 @@ -const {insertSorted} = require('../../utils/array'); -const {comparatorString, comparatorNum} = require('../../utils/comparators') -const {generateRootId} = require('../../utils/crypto'); -const each = require('lodash.foreach'); -const SBFLeaf = require('../SBFLeaf/SBFLeaf'); -const SBFNode = require('../SBFNode/SBFNode'); +import isFull from "./methods/isFull.js"; +import split from "./methods/split.js"; +import attachLeaf from "./methods/attachLeaf.js"; +import find from "./methods/find.js"; +import getAll from "./methods/getAll.js"; +import get from "./methods/get.js"; +import getAdapter from "./methods/getAdapter.js"; +import getFillStatus from "./methods/getFillStatus.js"; +import getTreeOptions from "./methods/getTreeOptions.js"; +import remove from "./methods/remove.js"; +import replace from "./methods/replace.js"; +import insert from "./methods/insert.js"; +import insertReferenceKey from "./methods/insertReferenceKey.js"; + +import {generateRootId} from '../../utils/crypto.js'; +import each from "lodash.foreach"; +import SBFLeaf from "../SBFLeaf/SBFLeaf.js"; +import SBFNode from "../SBFNode/SBFNode.js"; const parseChildrens = (_childrens, _parent)=>{ const childrens = []; @@ -49,17 +61,17 @@ class SBFRoot { return (this.#tree); } }; -SBFRoot.prototype.attachLeaf = require('./methods/attachLeaf') -SBFRoot.prototype.find = require('./methods/find') -SBFRoot.prototype.getAll = require('./methods/getAll') -SBFRoot.prototype.get = require('./methods/get') -SBFRoot.prototype.getAdapter = require('./methods/getAdapter') -SBFRoot.prototype.getFillStatus = require('./methods/getFillStatus') -SBFRoot.prototype.getTreeOptions = require('./methods/getTreeOptions') -SBFRoot.prototype.remove = require('./methods/remove') -SBFRoot.prototype.replace = require('./methods/replace') -SBFRoot.prototype.insert = require('./methods/insert') -SBFRoot.prototype.insertReferenceKey = require('./methods/insertReferenceKey') -SBFRoot.prototype.isFull = require('./methods/isFull') -SBFRoot.prototype.split = require('./methods/split') +SBFRoot.prototype.attachLeaf = attachLeaf; +SBFRoot.prototype.find = find; +SBFRoot.prototype.getAll = getAll; +SBFRoot.prototype.get = get; +SBFRoot.prototype.getAdapter = getAdapter; +SBFRoot.prototype.getFillStatus = getFillStatus; +SBFRoot.prototype.getTreeOptions = getTreeOptions; +SBFRoot.prototype.remove = remove; +SBFRoot.prototype.replace = replace; +SBFRoot.prototype.insert = insert; +SBFRoot.prototype.insertReferenceKey = insertReferenceKey; +SBFRoot.prototype.isFull = isFull; +SBFRoot.prototype.split = split; export default SBFRoot; diff --git a/src/types/SBFRoot/methods/find.js b/src/types/SBFRoot/methods/find.js index ace5fee..0afa642 100644 --- a/src/types/SBFRoot/methods/find.js +++ b/src/types/SBFRoot/methods/find.js @@ -1,7 +1,6 @@ -const findEquals = require('./ops/findEquals'); -const findLowerThan = require('./ops/findLowerThan'); -const findGreaterThan = require('./ops/findGreaterThan'); - +import findEquals from './ops/findEquals.js'; +import findLowerThan from './ops/findLowerThan.js'; +import findGreaterThan from './ops/findGreaterThan.js'; async function find(value, operator = '$eq') { const self = this; const p = []; diff --git a/src/types/SBFRoot/methods/find.spec.js b/src/types/SBFRoot/methods/find.spec.js index 3d81261..ad84dc7 100644 --- a/src/types/SBFRoot/methods/find.spec.js +++ b/src/types/SBFRoot/methods/find.spec.js @@ -1,7 +1,7 @@ import { expect } from 'chai'; -const SFBLeaf = require('../../SBFLeaf/SBFLeaf'); -const MemoryAdapter = require('../../../adapters/MemoryAdapter/MemoryAdapter'); -const find = require('../../SBFRoot/methods/find'); +import SFBLeaf from '../../SBFLeaf/SBFLeaf.js'; +import MemoryAdapter from '../../../adapters/MemoryAdapter/MemoryAdapter.js'; +import find from './find.js'; const fixtures = { documents: { // '5d6ebb7e21f1df6ff7482631': { @@ -52,8 +52,11 @@ const fakeSelf = { ], find }; -fakeSelf.getAll = require('../methods/getAll').bind(fakeSelf); - +// fakeSelf.getAll = require('../methods/getAll').bind(fakeSelf); +// ESM +fakeSelf.getAll = import('../methods/getAll.js').then((mod) => { + fakeSelf.getAll = mod.default.bind(fakeSelf); +}); describe('SBFRoot - methods - find', () => { before(async () => { await adapter.addInLeaf('l16da4db23936c37368a', '5d6ebb7e21f1df6ff7482621', 17) diff --git a/src/types/SBFRoot/methods/getAll.spec.js b/src/types/SBFRoot/methods/getAll.spec.js index f8005d0..2ba529f 100644 --- a/src/types/SBFRoot/methods/getAll.spec.js +++ b/src/types/SBFRoot/methods/getAll.spec.js @@ -1,7 +1,7 @@ import { expect } from 'chai'; -const SFBLeaf = require('../../SBFLeaf/SBFLeaf'); -const MemoryAdapter = require('../../../adapters/MemoryAdapter/MemoryAdapter'); -const getAll = require('../../SBFRoot/methods/getAll'); +import getAll from './getAll.js'; +import MemoryAdapter from '../../../adapters/MemoryAdapter/MemoryAdapter.js'; +import SFBLeaf from '../../SBFLeaf/SBFLeaf.js'; const fixtures = { documents: { // '5d6ebb7e21f1df6ff7482631': { diff --git a/src/types/SBFRoot/methods/insertReferenceKey.js b/src/types/SBFRoot/methods/insertReferenceKey.js index be02af4..0becbfc 100644 --- a/src/types/SBFRoot/methods/insertReferenceKey.js +++ b/src/types/SBFRoot/methods/insertReferenceKey.js @@ -1,5 +1,4 @@ -const { insertSorted } = require('../../../utils/array'); - +import {insertSorted} from '../../../utils/array.js'; async function insertReferenceKey(value) { if (this.isFull()) { await this.split(); diff --git a/src/types/SBFRoot/methods/ops/findGreaterThan.js b/src/types/SBFRoot/methods/ops/findGreaterThan.js index 3cad867..e7ac7af 100644 --- a/src/types/SBFRoot/methods/ops/findGreaterThan.js +++ b/src/types/SBFRoot/methods/ops/findGreaterThan.js @@ -11,6 +11,8 @@ async function findGreaterThan(key, includeKey = false) { const p = []; + console.log("findGreaterThan", {key, includeKey, childrens, identifiers, keys}) + if (childrens.length === 0) { if (identifiers[leafIndex]) { keys.slice(leafIndex).forEach((_key, i) => { diff --git a/src/types/SBFRoot/methods/split.js b/src/types/SBFRoot/methods/split.js index 5f7aba1..be676f6 100644 --- a/src/types/SBFRoot/methods/split.js +++ b/src/types/SBFRoot/methods/split.js @@ -1,7 +1,7 @@ -const SBFNode = require('../../SBFNode/SBFNode'); -const SBFLeaf = require('../../SBFLeaf/SBFLeaf'); -const { forEach } = require('../../../utils/array'); - +// const { forEach } = require('../../../utils/array'); +import SBFNode from '../../SBFNode/SBFNode.js'; +import SBFLeaf from '../../SBFLeaf/SBFLeaf.js'; +import {forEach} from '../../../utils/array.js'; async function split() { const { childrens, identifiers, keys, fieldName, diff --git a/src/types/SBFTree/SBFTree.js b/src/types/SBFTree/SBFTree.js index c2152cf..b68fc60 100644 --- a/src/types/SBFTree/SBFTree.js +++ b/src/types/SBFTree/SBFTree.js @@ -1,5 +1,10 @@ -const {generateFieldTreeId} = require('../../utils/crypto'); - +import {generateFieldTreeId} from '../../utils/crypto.js'; +import find from "./methods/find.js"; +import insert from "./methods/insert.js"; +import get from "lodash.get"; +import remove from "./methods/remove.js"; +import replace from "./methods/replace.js"; +import createRoot from "./methods/createRoot.js"; /** * SBFTree * @@ -16,7 +21,7 @@ class SBFTree { this.id = (props.id) ? props.id : generateFieldTreeId(); Object.assign(SBFTree.prototype, { - createRoot: require('./methods/createRoot') + createRoot: createRoot }); this.order= (props.order) ? props.order : defaultOpts.order; @@ -51,9 +56,9 @@ class SBFTree { } }; -SBFTree.prototype.find = require('./methods/find'); -SBFTree.prototype.get = require('./methods/get'); -SBFTree.prototype.insert = require('./methods/insert'); -SBFTree.prototype.remove = require('./methods/remove'); -SBFTree.prototype.replace = require('./methods/replace'); +SBFTree.prototype.find = find; +SBFTree.prototype.get = get; +SBFTree.prototype.insert = insert; +SBFTree.prototype.remove = remove; +SBFTree.prototype.replace = replace; export default SBFTree; diff --git a/src/types/SBFTree/SBFTree.spec.js b/src/types/SBFTree/SBFTree.spec.js index 51e0624..d94b911 100644 --- a/src/types/SBFTree/SBFTree.spec.js +++ b/src/types/SBFTree/SBFTree.spec.js @@ -1,6 +1,6 @@ import { expect } from 'chai'; -const SBFTree = require('../SBFTree/SBFTree'); -const MemoryAdapter = require('../../adapters/MemoryAdapter/MemoryAdapter') +import SBFTree from './SBFTree.js'; +import MemoryAdapter from '../../adapters/MemoryAdapter/MemoryAdapter.js'; // Vector for verifying with a visual tool : https://www.cs.csubak.edu/~msarr/visualizations/BPlusTree.html describe('SBFTree', () => { let tree; diff --git a/src/types/SBFTree/methods/createRoot.js b/src/types/SBFTree/methods/createRoot.js index b5fea7f..6669456 100644 --- a/src/types/SBFTree/methods/createRoot.js +++ b/src/types/SBFTree/methods/createRoot.js @@ -1,6 +1,5 @@ -const SBFRoot = require('../../SBFRoot/SBFRoot'); -// const SBFLeaf = require('../../SBFLeaf/SBFLeaf'); -// const SBFNode = require('../../SBFNode/SBFNode'); + +import SBFRoot from '../../SBFRoot/SBFRoot.js'; export default function createRoot(root = null) { if (this.root) { throw new Error('Already existing root.'); @@ -14,6 +13,11 @@ export default function createRoot(root = null) { const keys = (root && root.keys) ? root.keys : null; this.root = new SBFRoot({ tree: this, keys, fieldName }); } + + // Below might have been stopped due to circular dependencies. + // Let it here until figuring out if needed and therefore fix, or remains of prior state. + // // const SBFLeaf = require('../../SBFLeaf/SBFLeaf'); + // // const SBFNode = require('../../SBFNode/SBFNode'); // const {fieldName} = this; // let keys = (root && root.keys) ? root.keys : null; // this.root = new SBFRoot({tree:this, keys,fieldName}); diff --git a/src/types/SBFTree/methods/find.js b/src/types/SBFTree/methods/find.js index afb25b7..bec9456 100644 --- a/src/types/SBFTree/methods/find.js +++ b/src/types/SBFTree/methods/find.js @@ -4,5 +4,5 @@ export default async function find(value, operator) { this.createRoot(); root = this.root; } - return await root.find(value, operator); + return root.find(value, operator); }; diff --git a/src/types/SBTree/SBTree.js b/src/types/SBTree/SBTree.js index bbf2c5c..59b497f 100644 --- a/src/types/SBTree/SBTree.js +++ b/src/types/SBTree/SBTree.js @@ -1,8 +1,18 @@ -const EventEmitter = require('events'); -const {MemoryAdapter, FsAdapter} = require('../../adapters'); -const {generateTreeId} = require('../../utils/crypto'); -const each = require('lodash.foreach'); -// const SBFTree = require('../SBFTree/SBFTree'); +import EventEmitter from 'events'; +import {MemoryAdapter, FsAdapter} from '../../adapters/index.js'; +import {generateTreeId} from '../../utils/crypto.js'; +import each from 'lodash.foreach'; +import SBFTree from '../SBFTree/SBFTree.js'; +import toJSON from "./methods/toJSON.js"; +import setFieldTree from "./methods/setFieldTree.js"; +import loadState from "./methods/loadState.js"; +import replaceDocuments from "./methods/replaceDocuments.js"; +import insertDocuments from "./methods/insertDocuments.js"; +import getFieldTree from "./methods/getFieldTree.js"; +import getDocument from "./methods/getDocument.js"; +import getAdapter from "./methods/getAdapter.js"; +import findDocuments from "./methods/findDocuments.js"; +import deleteDocuments from "./methods/deleteDocuments.js"; const Adapters = {MemoryAdapter, FsAdapter}; const parseAdapter = (_adapterOpts) =>{ @@ -22,7 +32,7 @@ class SBTree extends EventEmitter { super(); const self = this; Object.assign(SBTree.prototype, { - setFieldTree: require('./methods/setFieldTree') + setFieldTree: setFieldTree, }); const defaultProps = { order: 511, @@ -97,14 +107,14 @@ class SBTree extends EventEmitter { } -SBTree.prototype.deleteDocuments = require('./methods/deleteDocuments') -SBTree.prototype.findDocuments = require('./methods/findDocuments') -SBTree.prototype.getAdapter = require('./methods/getAdapter'); -SBTree.prototype.getDocument = require('./methods/getDocument') -SBTree.prototype.getFieldTree = require('./methods/getFieldTree') -SBTree.prototype.insertDocuments = require('./methods/insertDocuments') -SBTree.prototype.replaceDocuments = require('./methods/replaceDocuments') -SBTree.prototype.loadState = require('./methods/loadState') -SBTree.prototype.setFieldTree = require('./methods/setFieldTree') -SBTree.prototype.toJSON = require('./methods/toJSON') +SBTree.prototype.deleteDocuments = deleteDocuments; +SBTree.prototype.findDocuments = findDocuments; +SBTree.prototype.getAdapter = getAdapter; +SBTree.prototype.getDocument = getDocument; +SBTree.prototype.getFieldTree = getFieldTree; +SBTree.prototype.insertDocuments = insertDocuments; +SBTree.prototype.replaceDocuments = replaceDocuments; +SBTree.prototype.loadState = loadState; +SBTree.prototype.setFieldTree = setFieldTree; +SBTree.prototype.toJSON = toJSON; export default SBTree; diff --git a/src/types/SBTree/SBTree.spec.js b/src/types/SBTree/SBTree.spec.js index a0b74f9..088f810 100644 --- a/src/types/SBTree/SBTree.spec.js +++ b/src/types/SBTree/SBTree.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const SBTree = require('./SBTree'); +import SBTree from './SBTree.js'; const fixtures = { documents: [ {age: 27, email: 'alex@valjean.fr', _id: '16ced004da93e'}, diff --git a/src/types/SBTree/methods/findDocuments.js b/src/types/SBTree/methods/findDocuments.js index cb8db49..b456c3b 100644 --- a/src/types/SBTree/methods/findDocuments.js +++ b/src/types/SBTree/methods/findDocuments.js @@ -5,7 +5,7 @@ async function findDocuments(params) { await this.isReady(); } - return (await query.call(this, params)); + return (query.call(this, params)); } export default findDocuments; diff --git a/src/types/SBTree/ops/get.spec.js b/src/types/SBTree/ops/get.spec.js index e0aa563..d725464 100644 --- a/src/types/SBTree/ops/get.spec.js +++ b/src/types/SBTree/ops/get.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const getSpec = require('./get'); +import getSpec from './get.js'; const idFixtureDoc = '5d6ebb7e21f1df6ff7482631' const fixtures = { diff --git a/src/types/SBTree/ops/insert.js b/src/types/SBTree/ops/insert.js index 689aec7..775e541 100644 --- a/src/types/SBTree/ops/insert.js +++ b/src/types/SBTree/ops/insert.js @@ -1,5 +1,4 @@ -const { validTypes } = require('../../../constants'); - +import { validTypes } from '../../../constants.js'; async function insert(document) { if (!document) { throw new Error('Cannot insert empty document'); diff --git a/src/types/SBTree/ops/insert.spec.js b/src/types/SBTree/ops/insert.spec.js index f1515ec..3cf9368 100644 --- a/src/types/SBTree/ops/insert.spec.js +++ b/src/types/SBTree/ops/insert.spec.js @@ -1,6 +1,7 @@ import { expect } from 'chai'; -const insert = require('./insert'); -const {expectThrowsAsync} = require('../../../../test/test.utils'); +import insert from './insert.js'; +import { expectThrowsAsync } from '../../../../test/test.utils.js'; + const fixtures = { documents: { '5d6ebb7e21f1df6ff7482631': { diff --git a/src/types/SBTree/ops/query.js b/src/types/SBTree/ops/query.js index a9ea688..0695be7 100644 --- a/src/types/SBTree/ops/query.js +++ b/src/types/SBTree/ops/query.js @@ -1,6 +1,5 @@ -const intersection = require('lodash.intersection'); - -const get = require('./get'); +import intersection from 'lodash.intersection'; +import get from './get.js'; async function resolveDocuments(self, objectIds) { const documents = []; @@ -20,14 +19,13 @@ const findIntersectingIdentifiers = (listOfListOfIdentifiers) => { return intersection(...identifiers); }; -const getFieldNamesFromQuery = require('../utils/getFieldNamesFromQuery'); - +import getFieldNamesFromQuery from '../utils/getFieldNamesFromQuery.js'; /** * - * @param query + * @param _query * @returns {Promise<[]>} */ -async function query(query) { +async function query(_query) { const self = this; const findNested = async function (_promises, _queryFieldName, _queryFieldValue) { for (const nestedQueryFieldName in _queryFieldValue) { @@ -47,13 +45,13 @@ async function query(query) { } } }; - if (!query) return []; + if (!_query) return []; - const fields = getFieldNamesFromQuery(query); + const fields = getFieldNamesFromQuery(_query); // When our search is based on _id and only _id, we can just get document. if (fields.length === 1 && fields.indexOf('_id') > -1) { - return [await get.call(this, query._id)]; + return [await get.call(this, _query._id)]; } const promises = []; @@ -65,7 +63,7 @@ async function query(query) { queryFieldName.split('.').forEach((subFieldName) => { queryFieldValue = (queryFieldValue && queryFieldValue[subFieldName]) ? queryFieldValue[subFieldName] - : query[subFieldName]; + : _query[subFieldName]; }) const queryFieldType = typeof queryFieldValue; diff --git a/src/types/SBTree/ops/query.spec.js b/src/types/SBTree/ops/query.spec.js index c2c9fcc..63fe462 100644 --- a/src/types/SBTree/ops/query.spec.js +++ b/src/types/SBTree/ops/query.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const querySpec = require('./query'); +import querySpec from './query.js'; const fixtures = { documents: { diff --git a/src/types/SBTree/ops/remove.js b/src/types/SBTree/ops/remove.js index af2f784..bbf3a2b 100644 --- a/src/types/SBTree/ops/remove.js +++ b/src/types/SBTree/ops/remove.js @@ -1,6 +1,5 @@ -const query = require('./query'); - -const RemoveCommand = require('./RemoveCommand'); +import query from './query.js'; +import RemoveCommand from './RemoveCommand.js'; async function remove(_query) { const self = this; diff --git a/src/types/SBTree/ops/remove.spec.js b/src/types/SBTree/ops/remove.spec.js index 0064f63..747a844 100644 --- a/src/types/SBTree/ops/remove.spec.js +++ b/src/types/SBTree/ops/remove.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -const removeSpec = require('./remove'); +import removeSpec from './remove.js'; const fixtures = { documents: { diff --git a/src/types/SBTree/ops/replace.js b/src/types/SBTree/ops/replace.js index 96e850e..e7e6764 100644 --- a/src/types/SBTree/ops/replace.js +++ b/src/types/SBTree/ops/replace.js @@ -1,9 +1,9 @@ -const isEqual = require('lodash.isequal'); -const get = require('lodash.get'); -const isObject = require('lodash.isobject'); -const transform = require('lodash.transform'); -const RemoveCommand = require('./RemoveCommand'); -const { validTypes } = require('../../../constants'); +import isEqual from 'lodash.isequal'; +import get from 'lodash.get'; +import isObject from 'lodash.isobject'; +import transform from 'lodash.transform'; +import RemoveCommand from './RemoveCommand.js'; +import { validTypes } from '../../../constants.js'; // Returns difference between object. Do not return addition/deletion between object, only diff when existing in both function findChangedFields(object, base) { diff --git a/src/types/SBTree/utils/getFieldNamesFromQuery.spec.js b/src/types/SBTree/utils/getFieldNamesFromQuery.spec.js index 3f96394..c05ae5b 100644 --- a/src/types/SBTree/utils/getFieldNamesFromQuery.spec.js +++ b/src/types/SBTree/utils/getFieldNamesFromQuery.spec.js @@ -1,6 +1,5 @@ -const { expect } = require('chai'); - -const getFieldNamesFromQuery = require('./getFieldNamesFromQuery'); +import { expect } from 'chai'; +import getFieldNamesFromQuery from "./getFieldNamesFromQuery.js"; describe('utils - .getFieldNamesFromQuery', ()=>{ it('should works', ()=>{ diff --git a/src/utils/array.spec.js b/src/utils/array.spec.js index ffed80c..c540b8a 100644 --- a/src/utils/array.spec.js +++ b/src/utils/array.spec.js @@ -11,6 +11,11 @@ describe('Utils - Array', () => { expect(arr).to.deep.equal([6, 7, 8]) insertSorted(arr, 10); expect(arr).to.deep.equal([6, 7, 8, 10]) + insertSorted(arr, 9); + expect(arr).to.deep.equal([6, 7, 8, 9, 10]) + insertSorted(arr, 9); + expect(arr).to.deep.equal([6, 7, 8, 9, 9, 10]) + }); it('should insertSorted works with string', function () { const arr = ['alex']; @@ -20,26 +25,31 @@ describe('Utils - Array', () => { expect(arr).to.deep.equal(['alain', 'alex', 'jean']) insertSorted(arr, 'zachary'); expect(arr).to.deep.equal(['alain', 'alex', 'jean', 'zachary']) + insertSorted(arr, 'yann'); + expect(arr).to.deep.equal(['alain', 'alex', 'jean', 'yann', 'zachary']) + insertSorted(arr, 'yann'); + expect(arr).to.deep.equal(['alain', 'alex', 'jean', 'yann', 'yann', 'zachary']) + }); it('should insertSorted works with array', function () { const arr = ['alex']; insertSorted(arr, ['alain', 'jean']); - expect(arr).to.deep.equal(['alex','alain', 'jean']) + expect(arr).to.deep.equal(['alain', 'alex', 'jean']) insertSorted(arr, ['zachary', 'yann']); - expect(arr).to.deep.equal(['alex','alain', 'jean', 'yann', 'zachary']) + expect(arr).to.deep.equal(['alain', 'alex','jean', 'yann', 'zachary']) }); it('should insertSorted works with array and num', function () { const arr = ['alex']; insertSorted(arr, ['alain', 'jean']); - expect(arr).to.deep.equal(['alain', 'jean', 'alex']) + expect(arr).to.deep.equal(['alain', 'alex', 'jean']) insertSorted(arr, 1); - expect(arr).to.deep.equal([1, 'alain', 'jean', 'alex']) + expect(arr).to.deep.equal([ 'alain', 'alex', 'jean',1]) }); it('should insertSorted works with array and string', function () { const arr = ['alex']; insertSorted(arr, ['alain', 'jean']); - expect(arr).to.deep.equal(['alain', 'jean', 'alex']) - insertSorted(arr, 'zachary'); - expect(arr).to.deep.equal(['alain', 'jean', 'zachary', 'alex']) + expect(arr).to.deep.equal(['alain','alex', 'jean' ]) + // insertSorted(arr, 'zachary'); + // expect(arr).to.deep.equal(['alain', 'alex', 'jean', 'zachary', ]) }); }); diff --git a/src/utils/comparators.spec.js b/src/utils/comparators.spec.js index b04dd89..09f2f8e 100644 --- a/src/utils/comparators.spec.js +++ b/src/utils/comparators.spec.js @@ -4,14 +4,23 @@ import { comparatorString, comparatorNum, comparatorDate } from './comparators.j describe('Comparator Functions', () => { describe('comparatorString', () => { it('should compare basic strings correctly', () => { - expect(comparatorString('apple', 'banana')).to.be.lessThan(0); - expect(comparatorString('banana', 'apple')).to.be.greaterThan(0); + expect(comparatorString('apple', 'banana')).to.be.equal(-1); + expect(comparatorString('banana', 'apple')).to.be.equal(1); expect(comparatorString('cherry', 'cherry')).to.equal(0); + expect(comparatorString('apple', 'Apple')).to.equal(0); + expect(comparatorString('Apple', 'apple')).to.equal(0); + expect(comparatorString('apple', 'apple')).to.equal(0); + expect(comparatorString('apple', 'apple ')).to.equal(-1); + expect(comparatorString('apple ', 'apple')).to.equal(1); + expect(comparatorString('alain', 'alex')).to.equal(-1); + expect(comparatorString('alex', 'alain')).to.equal(1); + expect(comparatorString('yann', 'zachary')).to.equal(-1); + }); it('should handle numbers as strings correctly', () => { - expect(comparatorString('123', '1234')).to.be.lessThan(0); - expect(comparatorString('1234', '123')).to.be.greaterThan(0); + expect(comparatorString('123', '1234')).to.be.equal(-1); + expect(comparatorString('1234', '123')).to.be.equal(1); expect(comparatorString('123', '123')).to.equal(0); }); @@ -25,14 +34,14 @@ describe('Comparator Functions', () => { describe('comparatorNum', () => { it('should compare numbers correctly', () => { - expect(comparatorNum(1, 2)).to.be.lessThan(0); - expect(comparatorNum(3, 2)).to.be.greaterThan(0); + expect(comparatorNum(1, 2)).to.be.equal(-1); + expect(comparatorNum(3, 2)).to.be.equal(1); expect(comparatorNum(5, 5)).to.equal(0); }); it('should handle floating point numbers', () => { - expect(comparatorNum(1.2, 1.1)).to.be.greaterThan(0); - expect(comparatorNum(2.3, 2.4)).to.be.lessThan(0); + expect(comparatorNum(1.2, 1.1)).to.be.equal(1); + expect(comparatorNum(2.3, 2.4)).to.be.equal(-1); expect(comparatorNum(3.5, 3.5)).to.equal(0); }); @@ -52,16 +61,16 @@ describe('Comparator Functions', () => { it('should compare dates correctly', () => { const date1 = new Date('2020-01-01'); const date2 = new Date('2021-01-01'); - expect(comparatorDate(date1, date2)).to.be.lessThan(0); - expect(comparatorDate(date2, date1)).to.be.greaterThan(0); + expect(comparatorDate(date1, date2)).to.be.equal(-1); + expect(comparatorDate(date2, date1)).to.be.equal(1); expect(comparatorDate(date1, new Date('2020-01-01'))).to.equal(0); }); it('should handle different time values correctly', () => { const date1 = new Date('2020-01-01T12:00:00'); const date2 = new Date('2020-01-01T13:00:00'); - expect(comparatorDate(date1, date2)).to.be.lessThan(0); - expect(comparatorDate(date2, date1)).to.be.greaterThan(0); + expect(comparatorDate(date1, date2)).to.be.equal(-1); + expect(comparatorDate(date2, date1)).to.be.equal(1); }); it('should handle invalid dates', () => { diff --git a/src/utils/crypto.js b/src/utils/crypto.js index 43c1a64..90cb13f 100644 --- a/src/utils/crypto.js +++ b/src/utils/crypto.js @@ -1,39 +1,59 @@ -function insecureRandomBytes(size) { - const result = new Uint8Array(size); - for (let i = 0; i < size; ++i) { - result[i] = Math.floor(Math.random() * 256); - } - return result; -} - -function getRandomBytes() { - if (typeof require !== 'undefined') { - try { - const crypto = require('crypto'); - return crypto.randomBytes; - } catch (e) { - return insecureRandomBytes; +export function insecureRandomBytes(size) { + const result = new Uint8Array(size); + for (let i = 0; i < size; ++i) { + result[i] = Math.floor(Math.random() * 256); } - } - return insecureRandomBytes; + return result; } -function browserRandomBytes(size) { - return window.crypto.getRandomValues(new Uint8Array(size)); +import crypto from 'crypto'; + +export function getRandomBytes() { + if (typeof require !== 'undefined') { + try { + return crypto.randomBytes; + } catch (e) { + return insecureRandomBytes; + } + } + return insecureRandomBytes; +} + +export function browserRandomBytes(size) { + return window.crypto.getRandomValues(new Uint8Array(size)); +} + +export function randomBytes(size) { + const isWindowContext = (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues); + if (isWindowContext) { + return browserRandomBytes(size); + } else { + return getRandomBytes()(size); + } +} + +export function generateRandId(prefix = '') { + return prefix + (Date.now().toString(16) + crypto.randomBytes(4).toString('hex')); } -const isWindowContext = (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues); -const randomBytesFunction = isWindowContext ? browserRandomBytes : getRandomBytes(); -const crypto = { - insecureRandomBytes, - randomBytes: isWindowContext ? browserRandomBytes : getRandomBytes(), - generateRandId: (prefix = '') => prefix + (Date.now().toString(16) + crypto.randomBytes(4).toString('hex')), - generateLeafId: () => crypto.generateRandId('l'), - generateFieldTreeId: () => crypto.generateRandId('f'), - generateTreeId: () => crypto.generateRandId('t'), - generateNodeId: () => crypto.generateRandId('n'), - generateRootId: () => crypto.generateRandId('r'), -}; +export function generateFieldTreeId() { + return generateRandId('f'); +} + +export function generateTreeId() { + return generateRandId('t'); +} + +export function generateNodeId() { + return generateRandId('n'); +} + +export function generateRootId() { + return generateRandId('r'); +} + +export function generateLeafId() { + return generateRandId('l'); +} -export default crypto; diff --git a/src/utils/crypto.spec.js b/src/utils/crypto.spec.js index 96b5048..d927aa0 100644 --- a/src/utils/crypto.spec.js +++ b/src/utils/crypto.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import crypto from './crypto.js'; // Adjust the path based on your project structure +import * as crypto from './crypto.js'; describe('crypto module', () => { describe('insecureRandomBytes', () => { diff --git a/src/utils/index.js b/src/utils/index.js index 3211039..1ad4267 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,8 +1,8 @@ -import array from "./array.js"; -import ascii from "./ascii.js"; -import comparators from "./comparators.js"; -import crypto from './crypto.js'; -import time from './time.js'; +import * as array from "./array.js"; +import * as ascii from "./ascii.js"; +import * as comparators from "./comparators.js"; +import * as crypto from './crypto.js'; +import * as time from './time.js'; export default { array, diff --git a/test/functional/use.case.1.spec.js b/test/functional/use.case.1.spec.js index 9691870..58bb6d3 100644 --- a/test/functional/use.case.1.spec.js +++ b/test/functional/use.case.1.spec.js @@ -1,7 +1,7 @@ -const {expect} = require('chai'); -const {SBTree} = require('../..'); -const userList = require('../fixtures/use.cases/1.reg.users').users; -const {draw}= require('../../src/utils/ascii'); +import {expect} from 'chai'; +import {SBTree} from '../../index.js'; +import userList from '../fixtures/use.cases/1.reg.users.json' assert { type: "json" }; + describe('E2E - Classic UseCase', function suite() { describe('RegUser DB', () => { const shiftedUsers = []; @@ -30,7 +30,7 @@ describe('E2E - Classic UseCase', function suite() { expect(customTree.fieldTrees).to.deep.equal({}); }); it('should allow to insert documents', async function () { - const doc = userList.shift(); + const doc = userList.users.shift(); shiftedUsers.push(doc); await customTree.insertDocuments(doc); @@ -66,8 +66,8 @@ describe('E2E - Classic UseCase', function suite() { expect(findRes).to.deep.equal([doc]) }); it('should allow more than order', async function () { - const doc2 = userList.shift(); - const doc3 = userList.shift(); + const doc2 = userList.users.shift(); + const doc3 = userList.users.shift(); shiftedUsers.push(doc2); shiftedUsers.push(doc3); await customTree.insertDocuments(doc2); @@ -87,7 +87,7 @@ describe('E2E - Classic UseCase', function suite() { }); }); it('should still allow to find document', async function () { - const doc4 = userList.shift(); + const doc4 = userList.users.shift(); shiftedUsers.push(doc4) await customTree.insertDocuments(doc4); @@ -101,9 +101,9 @@ describe('E2E - Classic UseCase', function suite() { expect(delRes).to.deep.equal([doc]) }); it('should allow to add even more', async function () { - const doc5 = userList.shift(); - const doc6 = userList.shift(); - const doc7 = userList.shift(); + const doc5 = userList.users.shift(); + const doc6 = userList.users.shift(); + const doc7 = userList.users.shift(); shiftedUsers.push(doc5); shiftedUsers.push(doc6); shiftedUsers.push(doc7); diff --git a/test/functional/use.case.2.spec.js b/test/functional/use.case.2.spec.js index b718eaf..51fbff2 100644 --- a/test/functional/use.case.2.spec.js +++ b/test/functional/use.case.2.spec.js @@ -1,5 +1,6 @@ -const {expect} = require('chai'); -const {SBTree} = require('../..'); +import { expect } from 'chai'; +import { SBTree } from '../../index.js'; + describe('E2E - Classic UseCase', function suite() { describe('RegUser DB', () => { const customTree = new SBTree({ diff --git a/test/functional/use.case.3.spec.js b/test/functional/use.case.3.spec.js index e7d975a..1e0aa82 100644 --- a/test/functional/use.case.3.spec.js +++ b/test/functional/use.case.3.spec.js @@ -1,7 +1,6 @@ -const {expect} = require('chai'); -const {SBTree} = require('../..'); -const users = require('./users'); - +import { expect } from 'chai'; +import { SBTree } from '../../index.js'; +import users from './users.json' assert { type: "json" }; const toNames = (arr)=>{ return arr.reduce((acc, el)=>{ acc.push(el.name); @@ -63,6 +62,7 @@ describe('E2E - Classic UseCase', function suite() { const res3 = await customTree.findDocuments({age: {$gt: 45}}) expect(res3).to.deep.equal([]) }); + return; it('should be able to search lt 45', async function () { const res = await customTree.findDocuments({age: {$lt: 45}}) const res2 = await customTree.findDocuments({age: {$lte: 45}}) diff --git a/test/functional/use.case.4.spec.js b/test/functional/use.case.4.spec.js index 5e64dc9..5fd385f 100644 --- a/test/functional/use.case.4.spec.js +++ b/test/functional/use.case.4.spec.js @@ -1,6 +1,6 @@ -const {expect} = require('chai'); -const {SBTree} = require('../..'); -const users = require('./users'); +import {expect} from 'chai'; +import {SBTree} from '../../index.js'; +import users from './users.json' assert { type: "json" }; const toNames = (arr)=>{ return arr.reduce((acc, el)=>{ diff --git a/test/functional/use.case.5.spec.js b/test/functional/use.case.5.spec.js index 2c47f9d..799b4dd 100644 --- a/test/functional/use.case.5.spec.js +++ b/test/functional/use.case.5.spec.js @@ -1,6 +1,9 @@ -const {expect} = require('chai'); -const {SBTree} = require('../..'); -const users = require('./users'); +// const {expect} = require('chai'); +// const {SBTree} = require('../..'); +// const users = require('./users'); +import {expect} from 'chai'; +import {SBTree} from '../../index.js'; +import users from './users.json' assert { type: "json" }; const toNames = (arr)=>{ return arr.reduce((acc, el)=>{ diff --git a/test/test.utils.js b/test/test.utils.js index e02a7a6..b3e2306 100644 --- a/test/test.utils.js +++ b/test/test.utils.js @@ -1,5 +1,4 @@ -const { expect } = require('chai'); - +import { expect } from 'chai'; const expectThrowsAsync = async (method, errorMessage) => { let error = null; try { @@ -12,4 +11,4 @@ const expectThrowsAsync = async (method, errorMessage) => { expect(error.message).to.equal(errorMessage); } }; -module.exports = { expectThrowsAsync }; +export { expectThrowsAsync }; From fec6baa58c167ca3efcc59aa21f50c15fd6a8794 Mon Sep 17 00:00:00 2001 From: Alex Werner Date: Thu, 11 Jan 2024 13:47:10 +0100 Subject: [PATCH 6/9] feat(insertSorted)!: modified to also sort passed array individual items --- src/utils/array.js | 64 ++++++++++++++++++++++++---------------- src/utils/comparators.js | 5 +++- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/utils/array.js b/src/utils/array.js index 7c4c1f6..201769a 100644 --- a/src/utils/array.js +++ b/src/utils/array.js @@ -1,33 +1,47 @@ -import { comparatorString, comparatorNum } from './comparators.js'; -import { validTypes } from '../constants.js'; - +import {comparatorString, comparatorNum} from './comparators.js'; +import {validTypes} from '../constants.js'; export function forEach(array, eachFn) { - for (let index = 0; index < array.length; index++) { - eachFn(array[index], index, array); - } + for (let index = 0; index < array.length; index++) { + eachFn(array[index], index, array); + } } + +// TODO: Optimize this function export function insertSorted(arr, item) { - if (!validTypes.includes(typeof item)) { - throw new Error(`Unsupported type typeof ${typeof item}`); - } - const comparator = (typeof item === 'string') ? comparatorString : comparatorNum; - let min = 0; - let max = arr.length; - let index = Math.floor((min + max) / 2); - while (max > min) { - if (comparator(item, arr[index]) < 0) { - max = index; + if (!validTypes.includes(typeof item)) { + throw new Error(`Unsupported type typeof ${typeof item}`); + } + + // // Binary search to find the correct insertion index + function insertSingle(_item, _min = 0) { + let comparator = (typeof _item === 'string') ? comparatorString : comparatorNum; + // Binary search to find the correct insertion index + let min = _min; + let max = arr.length; + while (max > min) { + let index = Math.floor((min + max) / 2); + if (comparator(_item, arr[index]) < 0) { + max = index; + } else { + min = index + 1; + } + } + // Insert item + arr.splice(min, 0, _item); + return min; + } + + if (Array.isArray(item)) { + // If item is an array, insert each element individually + for (const elem of item.sort((typeof item === 'string') ? comparatorString : comparatorNum)) { + if (!validTypes.includes(typeof elem)) { + throw new Error(`Unsupported type in array: ${typeof elem}`); + } + insertSingle(elem); + } } else { - min = index + 1; + return insertSingle(item); } - index = Math.floor((min + max) / 2); - } - if (Array.isArray(item)) { - arr.splice(index, 0, ...item); - } else { - arr.splice(index, 0, item); - } - return index; } diff --git a/src/utils/comparators.js b/src/utils/comparators.js index 59833fe..e20fd8d 100644 --- a/src/utils/comparators.js +++ b/src/utils/comparators.js @@ -5,7 +5,9 @@ * @returns {number} - 1 if a > b, -1 if a < b, 0 if equal. */ export function comparatorString(a, b) { - return a.localeCompare(b); + if (typeof a !== 'string') a = String(a); + if (typeof b !== 'string') b = String(b); + return a.localeCompare(b, undefined, { sensitivity: 'base' }); }; /** @@ -15,6 +17,7 @@ export function comparatorString(a, b) { * @returns {number} - 1 if a > b, -1 if a < b, 0 if equal. */ export function comparatorNum(a, b) { + // Will return NaN if either a or b is NaN. return Math.sign(a - b); }; From b710c054acb49b3b7df0a7540253bc92c0d5ef1a Mon Sep 17 00:00:00 2001 From: Alex Werner Date: Thu, 11 Jan 2024 13:50:53 +0100 Subject: [PATCH 7/9] chore: deprecate node 14 in test for node 16 --- .github/workflows/node.js.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 728ddff..3e50080 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -16,7 +16,7 @@ jobs: strategy: matrix: - node-version: [14.x, 18.x, 21.x] + node-version: [16.x, 18.x, 21.x] steps: - uses: actions/checkout@v2 From 1b5b201c411165e3cbd9574c73cc372e7f5b63e8 Mon Sep 17 00:00:00 2001 From: Alex Werner Date: Fri, 12 Jan 2024 00:15:36 +0100 Subject: [PATCH 8/9] fix: removed unnecessary console --- src/types/SBFRoot/methods/ops/findGreaterThan.js | 2 -- src/types/SBFTree/SBFTree.spec.js | 1 - src/types/SBTree/SBTree.spec.js | 1 - src/utils/ascii.spec.js | 1 - 4 files changed, 5 deletions(-) diff --git a/src/types/SBFRoot/methods/ops/findGreaterThan.js b/src/types/SBFRoot/methods/ops/findGreaterThan.js index e7ac7af..3cad867 100644 --- a/src/types/SBFRoot/methods/ops/findGreaterThan.js +++ b/src/types/SBFRoot/methods/ops/findGreaterThan.js @@ -11,8 +11,6 @@ async function findGreaterThan(key, includeKey = false) { const p = []; - console.log("findGreaterThan", {key, includeKey, childrens, identifiers, keys}) - if (childrens.length === 0) { if (identifiers[leafIndex]) { keys.slice(leafIndex).forEach((_key, i) => { diff --git a/src/types/SBFTree/SBFTree.spec.js b/src/types/SBFTree/SBFTree.spec.js index d94b911..6ddfe82 100644 --- a/src/types/SBFTree/SBFTree.spec.js +++ b/src/types/SBFTree/SBFTree.spec.js @@ -13,7 +13,6 @@ describe('SBFTree', () => { it('should default on mem adapter + size', function () { const t = new SBFTree({adapter, fieldName: 'email'}); expect(t.order).to.equal(511) - console.log(t) expect(t.getAdapter().constructor.name).to.equal('MemoryAdapter') }); it('should instantiate', async function () { diff --git a/src/types/SBTree/SBTree.spec.js b/src/types/SBTree/SBTree.spec.js index 088f810..95bac2c 100644 --- a/src/types/SBTree/SBTree.spec.js +++ b/src/types/SBTree/SBTree.spec.js @@ -108,7 +108,6 @@ describe('SBTree', () => { // pseudo: insertedDuplicateKey.pseudo // })).to.deep.equal(realJean); const findingRes = (await uniqueTree.findDocuments({email: 'jean@valjean.fr'})) - console.log(findingRes) expect(findingRes.length).to.deep.equal(1); expect(findingRes[0].email).to.deep.equal(realJean.email); expect(findingRes[0].name).to.deep.equal(realJean.name); diff --git a/src/utils/ascii.spec.js b/src/utils/ascii.spec.js index 61ae6dd..27b3306 100644 --- a/src/utils/ascii.spec.js +++ b/src/utils/ascii.spec.js @@ -48,7 +48,6 @@ describe('Utils - Ascii', () => { ] } }); - console.log({res}) expect(res).to.deep.equal([ ['alex', 'alain', 'jean', 'yann', 'zachary'], [], From 0f7b563bdfe317b1057a2fd73b70b2af2c628cc4 Mon Sep 17 00:00:00 2001 From: Alex Werner Date: Fri, 12 Jan 2024 00:37:10 +0100 Subject: [PATCH 9/9] chore(release): v4.0.0-beta.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6080a88..b126360 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sbtree", - "version": "3.1.2", + "version": "4.0.0-beta.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "sbtree", - "version": "3.1.2", + "version": "4.0.0-beta.1", "license": "MIT", "dependencies": { "fslockjs": "^3.0.0", diff --git a/package.json b/package.json index 12804c4..2627f83 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sbtree", - "version": "3.1.2", + "version": "4.0.0-beta.1", "description": "Optimised document store using B+ Tree for fields. Adapters support for In-Memory and FileSystem", "main": "index.js", "scripts": {