Skip to content

Commit def8f94

Browse files
committed
Make config argument optional
1 parent cc6d917 commit def8f94

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

nodejs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"@types/node-fetch": "^2.5.6",
2626
"@types/tough-cookie": "^4.0.0",
2727
"@types/tough-cookie-filestore": "^0.0.0",
28+
"ts-node": "^8.8.2",
2829
"typescript": "^3.8.3"
2930
},
3031
"dependencies": {

nodejs/src/index.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,22 @@
11
import cheerio from 'cheerio'
22
import * as fs from 'fs-extra'
3+
import {homedir} from 'os'
4+
import * as path from 'path'
35
import nodeFetch from 'node-fetch'
46
import tough = require('tough-cookie')
57
import FileCookieStore from 'tough-cookie-filestore'
68
import * as url from 'url'
79

10+
import { defaults } from './utils'
11+
12+
const defaultCookiePath = path.join(homedir(), '.hackmd', 'cookies.json')
13+
14+
const defaultConfig = {
15+
cookiePath: defaultCookiePath,
16+
serverUrl: 'https://hackmd.io',
17+
enterprise: true
18+
}
19+
820
interface APIOptions {
921
serverUrl: string
1022
cookiePath: string,
@@ -39,8 +51,8 @@ class API {
3951
private readonly enterprise: boolean
4052
private readonly _fetch: nodeFetchType
4153

42-
constructor(config: APIOptions) {
43-
const {serverUrl, cookiePath, enterprise} = config
54+
constructor(config: Partial<APIOptions> = {}) {
55+
const {serverUrl, cookiePath, enterprise} = defaults(config, defaultConfig)
4456

4557
fs.ensureFileSync(cookiePath)
4658

nodejs/src/utils.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export function defaults (defaultObject: any, ...mergeObjects: any[]) {
2+
return mergeObjects.reduce((acc, cur) => {
3+
return Object.entries(cur).reduce((accc, [key, value]) => {
4+
if (typeof accc[key] === 'undefined') {
5+
return {
6+
...accc,
7+
[key]: value
8+
}
9+
} else {
10+
return accc
11+
}
12+
}, {...acc})
13+
}, {...defaultObject})
14+
}

nodejs/yarn.lock

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
version "4.0.0"
3434
resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.0.tgz#fef1904e4668b6e5ecee60c52cc6a078ffa6697d"
3535

36+
arg@^4.1.0:
37+
version "4.1.3"
38+
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
39+
3640
asynckit@^0.4.0:
3741
version "0.4.0"
3842
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@@ -45,6 +49,10 @@ boolbase@~1.0.0:
4549
version "1.0.0"
4650
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
4751

52+
buffer-from@^1.0.0:
53+
version "1.1.1"
54+
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
55+
4856
cheerio@^1.0.0-rc.3:
4957
version "1.0.0-rc.3"
5058
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
@@ -79,6 +87,10 @@ delayed-stream@~1.0.0:
7987
version "1.0.0"
8088
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
8189

90+
diff@^4.0.1:
91+
version "4.0.2"
92+
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
93+
8294
dom-serializer@0:
8395
version "0.2.2"
8496
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
@@ -183,6 +195,10 @@ lodash@^4.15.0:
183195
version "4.17.15"
184196
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
185197

198+
make-error@^1.1.1:
199+
version "1.3.6"
200+
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
201+
186202
mime-db@1.43.0:
187203
version "1.43.0"
188204
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
@@ -229,6 +245,17 @@ safe-buffer@~5.2.0:
229245
version "5.2.0"
230246
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
231247

248+
source-map-support@^0.5.6:
249+
version "0.5.16"
250+
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
251+
dependencies:
252+
buffer-from "^1.0.0"
253+
source-map "^0.6.0"
254+
255+
source-map@^0.6.0:
256+
version "0.6.1"
257+
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
258+
232259
string_decoder@^1.1.1:
233260
version "1.3.0"
234261
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
@@ -255,6 +282,16 @@ tough-cookie@~0.12.1:
255282
dependencies:
256283
punycode ">=0.2.0"
257284

285+
ts-node@^8.8.2:
286+
version "8.8.2"
287+
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.8.2.tgz#0b39e690bee39ea5111513a9d2bcdc0bc121755f"
288+
dependencies:
289+
arg "^4.1.0"
290+
diff "^4.0.1"
291+
make-error "^1.1.1"
292+
source-map-support "^0.5.6"
293+
yn "3.1.1"
294+
258295
tslib@^1.11.1:
259296
version "1.11.1"
260297
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
@@ -274,3 +311,7 @@ universalify@^1.0.0:
274311
util-deprecate@^1.0.1:
275312
version "1.0.2"
276313
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
314+
315+
yn@3.1.1:
316+
version "3.1.1"
317+
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"

0 commit comments

Comments
 (0)