Skip to content

Commit

Permalink
Merge pull request #453 from Belphemur/develop
Browse files Browse the repository at this point in the history
Release
  • Loading branch information
kodiakhq[bot] authored Aug 8, 2022
2 parents e32f2bb + b0e2911 commit 6511cb8
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 61 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/nodejs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node: [ '14', '16' ]
node: [ '14', '16', '18' ]
steps:
- uses: actions/checkout@v3
- name: Set yarn cache
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
"devDependencies": {
"@semantic-release/changelog": "^6.0.0",
"@semantic-release/git": "^10.0.0",
"@types/jest": "^27.0.0",
"@types/jest": "^28.1.6",
"@types/mkdirp": "^1.0.1",
"@types/node": "^18.0.0",
"@types/safe-regex": "^1.1.2",
Expand Down
18 changes: 15 additions & 3 deletions src/adapter/data/JsonAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,40 @@ export class JsonAdapter implements IAdapter<any> {

private readonly adapter: IAdapter<string>;
private readonly humanReadable: boolean;
private readonly dateRegex = new RegExp('^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}', 'm')


constructor(adapter: IAdapter<string>, humanReadable: boolean = false) {
this.adapter = adapter;
this.humanReadable = humanReadable;
}

private replacer(key: string, value: any): any {
return value;
}

private reviver(key: string, value: any): any {
if (typeof value == "string" && this.dateRegex.exec(value) != null) {
return new Date(value);
}
return value;
}

async readAsync(): Promise<any> {
const data = await this.adapter.readAsync();
if (data == null) {
await this.writeAsync({});
return {};
}
return JSON.parse(data);
return JSON.parse(data, this.reviver.bind(this));
}

writeAsync(data: any): Promise<void> {
let stringify = '';
if (this.humanReadable) {
stringify = JSON.stringify(data, null, 4)
stringify = JSON.stringify(data, this.replacer.bind(this), 4)
} else {
stringify = JSON.stringify(data)
stringify = JSON.stringify(data, this.replacer.bind(this))
}
return this.adapter.writeAsync(stringify);
}
Expand Down
2 changes: 1 addition & 1 deletion src/lib/JsonDBConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export class ConfigWithAdapter implements JsonDBConfig {
readonly separator: string;


constructor(adapter: IAdapter<any>, humanReadable: boolean, saveOnPush: boolean, separator: string) {
constructor(adapter: IAdapter<any>, saveOnPush: boolean = true, separator: string = '/') {
this.adapter = adapter;
this.saveOnPush = saveOnPush;
this.separator = separator;
Expand Down
31 changes: 31 additions & 0 deletions test/adapter/adapters.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,37 @@ describe('Adapter', () => {
expect(fileExists).toBeTruthy();

})

test('should serialize and deserialize dates', async () => {
const adapter = new JsonAdapter(new MemoryAdapter(), false);
const data = {
myDate: new Date()
}

await adapter.writeAsync(data);
const readObject = await adapter.readAsync();
expect(readObject).not.toBeNaN();
expect(readObject.myDate).toBeInstanceOf(Date);
expect(readObject.myDate.toString()).toBe(data.myDate.toString())
})


test('should serialize and deserialize date and other types', async () => {
const adapter = new JsonAdapter(new MemoryAdapter(), false);
const data = {
myDate: new Date(),
hello: "world",
test: 1215484
}

await adapter.writeAsync(data);
const readObject = await adapter.readAsync();
expect(readObject).not.toBeNaN();
expect(readObject.myDate).toBeInstanceOf(Date);
expect(readObject.myDate.toString()).toBe(data.myDate.toString());
expect(readObject.hello).toBe(data.hello);
expect(readObject.test).toBe(data.test);
})
})
});
describe('Config', () => {
Expand Down
66 changes: 11 additions & 55 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2083,13 +2083,13 @@
dependencies:
"@types/istanbul-lib-report" "*"

"@types/jest@^27.0.0":
version "27.5.0"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.0.tgz#e04ed1824ca6b1dd0438997ba60f99a7405d4c7b"
integrity sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g==
"@types/jest@^28.1.6":
version "28.1.6"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.6.tgz#d6a9cdd38967d2d746861fb5be6b120e38284dd4"
integrity sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ==
dependencies:
jest-matcher-utils "^27.0.0"
pretty-format "^27.0.0"
jest-matcher-utils "^28.0.0"
pretty-format "^28.0.0"

"@types/minimist@^1.2.0":
version "1.2.2"
Expand All @@ -2104,9 +2104,9 @@
"@types/node" "*"

"@types/node@*", "@types/node@^18.0.0":
version "18.6.3"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.3.tgz#4e4a95b6fe44014563ceb514b2598b3e623d1c98"
integrity sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==
version "18.6.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.4.tgz#fd26723a8a3f8f46729812a7f9b4fc2d1608ed39"
integrity sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg==

"@types/normalize-package-data@^2.4.0":
version "2.4.1"
Expand Down Expand Up @@ -3246,11 +3246,6 @@ dezalgo@^1.0.0:
asap "^2.0.0"
wrappy "1"

diff-sequences@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==

diff-sequences@^28.1.1:
version "28.1.1"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6"
Expand Down Expand Up @@ -4469,16 +4464,6 @@ jest-config@^28.1.3:
slash "^3.0.0"
strip-json-comments "^3.1.1"

jest-diff@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def"
integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==
dependencies:
chalk "^4.0.0"
diff-sequences "^27.5.1"
jest-get-type "^27.5.1"
pretty-format "^27.5.1"

jest-diff@^28.1.3:
version "28.1.3"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f"
Expand Down Expand Up @@ -4519,11 +4504,6 @@ jest-environment-node@^28.1.3:
jest-mock "^28.1.3"
jest-util "^28.1.3"

jest-get-type@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==

jest-get-type@^28.0.2:
version "28.0.2"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203"
Expand Down Expand Up @@ -4556,17 +4536,7 @@ jest-leak-detector@^28.1.3:
jest-get-type "^28.0.2"
pretty-format "^28.1.3"

jest-matcher-utils@^27.0.0:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==
dependencies:
chalk "^4.0.0"
jest-diff "^27.5.1"
jest-get-type "^27.5.1"
pretty-format "^27.5.1"

jest-matcher-utils@^28.1.3:
jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.3:
version "28.1.3"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e"
integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==
Expand Down Expand Up @@ -6167,16 +6137,7 @@ prepend-http@^2.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=

pretty-format@^27.0.0, pretty-format@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
dependencies:
ansi-regex "^5.0.1"
ansi-styles "^5.0.0"
react-is "^17.0.1"

pretty-format@^28.1.3:
pretty-format@^28.0.0, pretty-format@^28.1.3:
version "28.1.3"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5"
integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==
Expand Down Expand Up @@ -6277,11 +6238,6 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.8:
minimist "^1.2.0"
strip-json-comments "~2.0.1"

react-is@^17.0.1:
version "17.0.2"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==

react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
Expand Down

0 comments on commit 6511cb8

Please sign in to comment.