make specifying a file for cookie-jars optional

This commit is contained in:
jkhsjdhjs 2019-07-20 23:39:15 +02:00
parent d2e88e3b1a
commit a2976d9cf8
Signed by: jkhsjdhjs
GPG Key ID: BAC6ADBAB7D576CC
2 changed files with 6 additions and 4 deletions

View File

@ -33,12 +33,12 @@ A class that stores cookies.
- `file` The path of the cookie jar on the disk. - `file` The path of the cookie jar on the disk.
- `cookies` A [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) mapping cookie names to their properties. - `cookies` A [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) mapping cookie names to their properties.
#### new CookieJar(flags, file[, cookies]) #### new CookieJar(flags[, file, cookies])
- `flags` A string specifying whether cookies should be read and/or written from/to the jar when passing it as parameter to [fetch](#fetchcookiejar-url-options). - `flags` A string specifying whether cookies should be read and/or written from/to the jar when passing it as parameter to [fetch](#fetchcookiejar-url-options).
- `r`: only read from this jar - `r`: only read from this jar
- `w`: only write to this jar - `w`: only write to this jar
- `rw` or `wr`: read/write from/to this jar - `rw` or `wr`: read/write from/to this jar
- `file` A string containing a relative or absolute path to the file on the disk to use. - `file` An optional string containing a relative or absolute path to the file on the disk to use.
- `cookies` An optional initializer for the cookie jar - either an array of [Cookie](#class-cookie) instances or a single Cookie instance. - `cookies` An optional initializer for the cookie jar - either an array of [Cookie](#class-cookie) instances or a single Cookie instance.
#### addCookie(cookie[, url]) #### addCookie(cookie[, url])

View File

@ -8,7 +8,7 @@ export default class CookieJar {
this.flags = flags; this.flags = flags;
if(typeof this.flags !== "string") if(typeof this.flags !== "string")
throw new TypeError("First parameter is not a string!"); throw new TypeError("First parameter is not a string!");
if(typeof this.file !== "string") if(this.file && typeof this.file !== "string")
throw new TypeError("Second parameter is not a string!"); throw new TypeError("Second parameter is not a string!");
if(Array.isArray(cookies)) { if(Array.isArray(cookies)) {
if(!cookies.every(c => c instanceof Cookie)) if(!cookies.every(c => c instanceof Cookie))
@ -20,7 +20,7 @@ export default class CookieJar {
this.cookies.set(cookies.name, cookies); this.cookies.set(cookies.name, cookies);
else if(cookies) else if(cookies)
throw new TypeError("Third parameter is neither an array nor a cookie!"); throw new TypeError("Third parameter is neither an array nor a cookie!");
if(this.cookies.size === 0 && this.file.length !== 0 && fs.existsSync(this.file)) if(this.file && this.cookies.size === 0 && this.file.length !== 0 && fs.existsSync(this.file))
this.cookies = new Map(JSON.parse(fs.readFileSync(this.file)).map(([k, v]) => [k, Cookie.fromObject(v)])); this.cookies = new Map(JSON.parse(fs.readFileSync(this.file)).map(([k, v]) => [k, Cookie.fromObject(v)]));
} }
addCookie(c, fromURL) { addCookie(c, fromURL) {
@ -32,6 +32,8 @@ export default class CookieJar {
this.cookies.forEach(callback); this.cookies.forEach(callback);
} }
save() { save() {
if(typeof this.file !== "string")
throw new Error("No file has been specified for this cookie jar!");
// only save cookies that haven't expired // only save cookies that haven't expired
let cookiesToSave = new Map(); let cookiesToSave = new Map();
this.forEach(cookie => { this.forEach(cookie => {