From 9b55b3b88e2703b3016caee176d6d4506e2b04b0 Mon Sep 17 00:00:00 2001 From: wanxp <977741432@qq.com> Date: Sun, 5 Jun 2022 17:05:35 +0800 Subject: [PATCH] add douban movie handler and settings --- douban/Douban.ts | 31 +- douban/DoubanSettingTab.ts | 170 ++- douban/handler/DoubanAbstractLoadHandler.ts | 43 +- douban/handler/DoubanExtractHandler.ts | 51 +- douban/handler/DoubanMovieLoadHandler.ts | 95 +- douban/handler/DoubanOtherLoadHandler.ts | 26 +- douban/handler/DoubanSubjectLoadHandler.ts | 7 +- douban/model/DoubanMoveSubject.ts | 6 - douban/model/DoubanMovieSubject.ts | 12 + .../search/DoubanSearchFuzzySuggestModal.ts | 19 +- douban/search/DoubanSearchModal.ts | 4 +- douban/search/Search.ts | 1 - douban/search/SearchParser.ts | 7 +- lang/helper.ts | 23 + lang/locale/en.ts | 34 + lang/locale/zh-cn.ts | 37 + main.ts | 72 +- package-lock.json | 1249 +---------------- package.json | 4 +- styles.css | 15 +- utils/HttpUtil.ts | 33 + utils/logutil.ts | 4 +- 22 files changed, 504 insertions(+), 1439 deletions(-) delete mode 100644 douban/model/DoubanMoveSubject.ts create mode 100644 douban/model/DoubanMovieSubject.ts create mode 100644 lang/helper.ts create mode 100644 lang/locale/en.ts create mode 100644 lang/locale/zh-cn.ts create mode 100644 utils/HttpUtil.ts diff --git a/douban/Douban.ts b/douban/Douban.ts index 10cc5b9..eb38c2d 100644 --- a/douban/Douban.ts +++ b/douban/Douban.ts @@ -1,9 +1,11 @@ import { type } from "os"; interface DoubanPluginSettings { - template:string, + movieTemplate:string, + dateFormat:string, searchUrl:string, - searchHeaders?:string + arraySpilt:string, + searchHeaders?:string, } @@ -14,16 +16,31 @@ export const doubanHeadrs = { }; export const DEFAULT_SETTINGS:DoubanPluginSettings = { - template: + movieTemplate: "---\n" + - "title: {{title}}" + - "cast: {{cast}}" + + "doubanId: {{id}}\n" + + "title: {{title}}\n" + + "type: {{type}}\n" + "score: {{score}}\n" + - "---", + "datePublished: {{datePublished}}\n" + + "director: {{director}}\n" + + "actor: {{actor}}\n" + + "author: {{author}}\n" + + "url: {{url}}\n" + + "image: {{image}}\n" + + "---\n", searchUrl: 'https://www.douban.com/search?q=', - searchHeaders: JSON.stringify(doubanHeadrs) + searchHeaders: JSON.stringify(doubanHeadrs), + dateFormat: "yyyy_MM_DD", + arraySpilt: ", " + + } +export class DefaultSettingsContent { + +} + export type {DoubanPluginSettings} \ No newline at end of file diff --git a/douban/DoubanSettingTab.ts b/douban/DoubanSettingTab.ts index cc627ad..ed4cd21 100644 --- a/douban/DoubanSettingTab.ts +++ b/douban/DoubanSettingTab.ts @@ -1,6 +1,9 @@ -import DoubanPlugin from "main"; import { App, PluginSettingTab, Setting } from "obsidian"; +import { DEFAULT_SETTINGS } from "./Douban"; +import DoubanPlugin from "main"; +import { i18nHelper } from "lang/helper"; + export class DoubanSettingTab extends PluginSettingTab { plugin: DoubanPlugin; @@ -14,46 +17,143 @@ export class DoubanSettingTab extends PluginSettingTab { containerEl.empty(); - containerEl.createEl("h2", { text: "Obsidian Wikipedia" }); - - new Setting(containerEl) - .setName("Douban Search Url") - .setDesc(`full search url with https ahead `) + containerEl.createEl("h2", { text: "Obsidian Douban" }); + + new Setting(containerEl).setName(i18nHelper.getMessage('douban search url')) + .then((setting) => { + setting.addText((textField) => { + setting.descEl.appendChild( + createFragment((frag) => { + frag.appendText(i18nHelper.getMessage('douban search url desc 1')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('douban search url desc 2')); + frag.createEl( + 'a', + { + text: i18nHelper.getMessage('Douban'), + href: 'https://www.douban.com', + }, + (a) => { + a.setAttr('target', '_blank'); + } + ); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('douban search url desc 3')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('douban search url desc 4')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('douban search url desc 5')); + frag.createEl('br'); + }) + ); + textField.inputEl.addClass("settings_textField"); + textField + .setPlaceholder(DEFAULT_SETTINGS.searchUrl) + .setValue(this.plugin.settings.searchUrl) + .onChange(async (value) => { + this.plugin.settings.searchUrl = value; + await this.plugin.saveSettings(); + }); + + }); + }); + + new Setting(containerEl).setName(i18nHelper.getMessage("movie content template")).then((setting) => { + setting.addTextArea((textarea) => { + setting.descEl.appendChild( + createFragment((frag) => { + frag.appendText(i18nHelper.getMessage('movie content template desc 1')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('movie content template desc 2')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('movie content template desc 3')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('movie content template desc 4')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('movie content template desc 5')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('movie content template desc 6')); + frag.createEl('br'); + }) + ); + textarea.inputEl.addClass("settings_area"); + textarea.inputEl.setAttr("rows", 10); + textarea.setPlaceholder(DEFAULT_SETTINGS.movieTemplate) + .setValue(this.plugin.settings.movieTemplate) + .onChange(async (value) => { + this.plugin.settings.movieTemplate = value; + await this.plugin.saveSettings(); + }); + }); + }); + + + + + new Setting(containerEl).setName(i18nHelper.getMessage('Date format')).then((setting) => { + setting.addMomentFormat((mf) => { + setting.descEl.appendChild( + createFragment((frag) => { + frag.appendText( + i18nHelper.getMessage('This format will be used when available template variables contain date.') + ); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('For more syntax, refer to') + ' '); + frag.createEl( + 'a', + { + text: i18nHelper.getMessage('format reference'), + href: 'https://momentjs.com/docs/#/displaying/format/', + }, + (a) => { + a.setAttr('target', '_blank'); + } + ); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('Your current syntax looks like this') + ': '); + mf.setSampleEl(frag.createEl('b', { cls: 'u-pop' })); + frag.createEl('br'); + }) + ); + mf.setPlaceholder(DEFAULT_SETTINGS.dateFormat); + mf.setValue(this.plugin.settings.dateFormat) + mf.onChange(async (value) => { + this.plugin.settings.dateFormat = value; + await this.plugin.saveSettings(); + }); + + }); + }); + + + new Setting(containerEl) + .setName(i18nHelper.getMessage("Array Spilt String")) + .setDesc(i18nHelper.getMessage(`string to join between array type, such as author, actor`)) .addText((textField) => { - textField - .setValue(this.plugin.settings.searchUrl) + textField.setPlaceholder(DEFAULT_SETTINGS.arraySpilt) + .setValue(this.plugin.settings.arraySpilt) .onChange(async (value) => { - this.plugin.settings.searchUrl = value; + this.plugin.settings.arraySpilt = value; await this.plugin.saveSettings(); }); }); - new Setting(containerEl) - .setName("Douban Request Headers") - .setDesc(`full search url with https ahead `) - .addText((textField) => { - textField - .setValue(this.plugin.settings.searchHeaders) - .onChange(async (value) => { - this.plugin.settings.searchHeaders = value; - await this.plugin.saveSettings(); - }); - }); + + + // new Setting(containerEl) + // .setName("Douban Request Headers") + // .setDesc(`if can not fetch data from douban,\n + // please go to douban.com\n and copy headers to this text area `) + // .addTextArea((textField) => { + // textField + // .setPlaceholder(DEFAULT_SETTINGS.searchHeaders) + // .setValue(this.plugin.settings.searchHeaders) + // .onChange(async (value) => { + // this.plugin.settings.searchHeaders = value; + // await this.plugin.saveSettings(); + // }); + // }); - new Setting(containerEl) - .setName("Content Template") - .setDesc( - `Set markdown template for extract to be inserted.\n - Available template variables are {{id}}, {{type}}, {{title}}, {{score}}, {{cast}}, {{desc}} and {{url}}. - ` - ) - .addTextArea((textarea) => - textarea - .setValue(this.plugin.settings.template) - .onChange(async (value) => { - this.plugin.settings.template = value; - await this.plugin.saveSettings(); - }) - ); + } } \ No newline at end of file diff --git a/douban/handler/DoubanAbstractLoadHandler.ts b/douban/handler/DoubanAbstractLoadHandler.ts index 45297e9..f997a97 100644 --- a/douban/handler/DoubanAbstractLoadHandler.ts +++ b/douban/handler/DoubanAbstractLoadHandler.ts @@ -1,39 +1,44 @@ -import { DoubanPluginSettings } from "douban/Douban"; -import DoubanSubject from "douban/model/DoubanSubject"; import cheerio, { CheerioAPI } from "cheerio"; import { get, readStream } from "tiny-network"; -import { log } from "utils/logutil"; -import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler"; + import DoubanPlugin from "main"; +import { DoubanPluginSettings } from "douban/Douban"; +import DoubanSubject from "douban/model/DoubanSubject"; +import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler"; +import { Editor } from "obsidian"; +import HttpUtil from "utils/HttpUtil"; +import { log } from "utils/logutil"; export default abstract class DoubanAbstractLoadHandler implements DoubanSubjectLoadHandler { - doubanPlugin:DoubanPlugin; + public doubanPlugin:DoubanPlugin; constructor(doubanPlugin:DoubanPlugin) { this.doubanPlugin = doubanPlugin; } + + abstract parseText(template: string, arraySpilt:string, extract: T): string; + + abstract support(extract: DoubanSubject): boolean; - handle(url:string):void { - Promise - .resolve() - .then(() => get(url, JSON.parse(this.doubanPlugin.settings.searchHeaders))) + handle(url:string, editor:Editor):void { + Promise.resolve().then(() => get(url + "/", {headers: JSON.parse(this.doubanPlugin.settings.searchHeaders)})) .then(readStream) - .then(log.info) - .then(cheerio.load) - .then(this.parseSubjectFromHtml); + .then(cheerio.load) + .then(this.parseSubjectFromHtml) + .then(content => this.toEditor(editor, content)) + // .then(content => content ? editor.replaceSelection(content) : content) + ; } + abstract parseSubjectFromHtml(data:CheerioAPI):T | undefined; - - abstract getType(): string | undefined; - - - support(extract: DoubanSubject): boolean { - return extract && (this.getType() == extract.type); + toEditor(editor:Editor, extract: T):T { + this.doubanPlugin.putToEditor(editor, extract); + return extract; } - + } \ No newline at end of file diff --git a/douban/handler/DoubanExtractHandler.ts b/douban/handler/DoubanExtractHandler.ts index 697fda4..d02c7af 100644 --- a/douban/handler/DoubanExtractHandler.ts +++ b/douban/handler/DoubanExtractHandler.ts @@ -1,30 +1,63 @@ -import DoubanPlugin from "main"; -import { App } from "obsidian"; +import { App, Editor } from "obsidian"; + import DoubanMovieLoadHandler from "./DoubanMovieLoadHandler"; import DoubanOtherLoadHandler from "./DoubanOtherLoadHandler"; -import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler"; +import DoubanPlugin from "main"; +import { DoubanPluginSettings } from "douban/Douban"; import DoubanSubject from "../model/DoubanSubject"; +import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler"; export class DoubanEtractHandler { private _app:App; private _doubanPlugin:DoubanPlugin; private _doubanSubjectHandlers:DoubanSubjectLoadHandler[]; + private _doubanSubjectHandlerDefault:DoubanSubjectLoadHandler; + + constructor(app:App, doubanPlugin:DoubanPlugin) { this._app = app; this._doubanPlugin = doubanPlugin; - this._doubanSubjectHandlers = [new DoubanMovieLoadHandler(this._doubanPlugin), - new DoubanOtherLoadHandler(this._doubanPlugin)]; + this._doubanSubjectHandlerDefault = new DoubanOtherLoadHandler(doubanPlugin); + this._doubanSubjectHandlers = [new DoubanMovieLoadHandler(doubanPlugin), + this._doubanSubjectHandlerDefault]; + } - public handle(searchExtract:DoubanSubject):void{ + public handle(searchExtract:DoubanSubject, editor: Editor):void{ if(!searchExtract) { return; } - this._doubanSubjectHandlers - .filter(h => h.support) - .forEach(h => h.handle(searchExtract.url)); + var doubanSubjectHandlers:DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers + .filter(h => h.support); + if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) { + var result = doubanSubjectHandlers.map(h => h.handle(searchExtract.url, editor)) + if(result && result.length > 0) { + return result[0]; + } + }else { + this._doubanSubjectHandlerDefault.handle(searchExtract.url, editor); + } + } + + public parseText(template: string, arraySpilt:string, extract:DoubanSubject):string { + if(!template) { + return ""; + } + var doubanSubjectHandlers:DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers + .filter(h => h.support); + if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) { + var result = doubanSubjectHandlers.map(h => h.parseText(template, arraySpilt, extract)); + if(result && result.length > 0) { + return result[0]; + }else { + return ""; + } + }else { + return this._doubanSubjectHandlerDefault.parseText(template, arraySpilt, extract); + } + } } diff --git a/douban/handler/DoubanMovieLoadHandler.ts b/douban/handler/DoubanMovieLoadHandler.ts index 8c581ce..9cf8982 100644 --- a/douban/handler/DoubanMovieLoadHandler.ts +++ b/douban/handler/DoubanMovieLoadHandler.ts @@ -1,51 +1,68 @@ -import DoubanMovieSubject from "douban/model/DoubanMoveSubject"; -import { get, readStream } from "tiny-network"; -import { log } from "utils/logutil"; -import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; +import { Editor, renderResults } from "obsidian"; import cheerio, { CheerioAPI } from 'cheerio'; -import { DoubanPluginSettings } from "douban/Douban"; -import DoubanPlugin from "main"; +import { get, readStream } from "tiny-network"; +import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; +import DoubanMovieSubject from "douban/model/DoubanMovieSubject"; +import DoubanPlugin from "main"; +import { DoubanPluginSettings } from "douban/Douban"; +import DoubanSubject from "douban/model/DoubanSubject"; +import { log } from "utils/logutil"; export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler { + parseText(template: string, arraySpilt:string, extract: DoubanMovieSubject): string { + return template ? template.replace("{{id}}", extract.id) + .replace("{{type}}", extract.type ? extract.type : "") + .replace("{{title}}", extract.title ? extract.title : "") + .replace("{{desc}}", extract.desc ? extract.desc : "") + .replace("{{image}}", extract.image ? extract.image : "") + .replace("{{director}}", extract.director ? extract.director.join(arraySpilt) : "") + .replace("{{actor}}", extract.actor ? extract.actor.join(arraySpilt) : "") + .replace("{{author}}", extract.author ? extract.author.join(arraySpilt) : "") + .replace("{{datePublished}}", extract.datePublished ? extract.datePublished : "") + .replace("{{url}}", extract.url ? extract.url : "") + .replace("{{score}}", extract.aggregateRating && extract.aggregateRating.ratingValue ? extract.aggregateRating.ratingValue + "" : "") + : undefined; } + support(extract: DoubanSubject): boolean { + return extract && ('[电影]'==extract.type || 'Movie' == extract.type); + } + + + constructor(doubanPlugin:DoubanPlugin) { super(doubanPlugin); } parseSubjectFromHtml(data: CheerioAPI): DoubanMovieSubject { - return data('.result') - .get() - .map((i:any) => { - const item = data(i); - var idPattern = /(\d){5,10}/g; - var urlPattern = /(https%3A%2F%2F)\S+(\d){5,10}/g; - var linkValue = item.find("div.content > div > h3 > a").text(); - var ececResult = idPattern.exec(linkValue); - var urlResult = urlPattern.exec(linkValue); - var cast = item.find(".subject-cast").text(); - const result:DoubanMovieSubject = { - id: ececResult?ececResult[0]:'', - title: item.find("div.content > div > h3 > a").text(), - score: item.find(".rating_nums").text(), - // duration: item.attr('data-duration'), - // region: item.attr('data-region'), - // director: item.attr('data-director'), - // actors: item.attr('data-actors'), - // poster: item.find('.poster img').attr('src'), - cast: cast, - type: item.find("div.content > div > h3 > span").text(), - desc: item.find("div.content > p").text(), - url: urlResult?decodeURIComponent(urlResult[0]):'https://www.douban.com', - }; - return result; - })[0]; - } - - getType(): string |undefined { - throw new Error("Method not implemented."); - } - + return data('script') + .get() + .filter(scd => "application/ld+json" == data(scd).attr("type")) + .map(i => { + var item = data(i).text(); + var obj = JSON.parse(item); + var idPattern = /(\d){5,10}/g; + var id = idPattern.exec(obj.url); + log.info(item); + const result:DoubanMovieSubject = { + id: id?id[0]:'', + type: 'Movie', + title: obj.name, + desc: obj.description, + url: "https://movie.douban.com" + obj.url, + director: obj.director, + author: obj.author, + actor: obj.actor, + aggregateRating: obj.aggregateRating, + datePublished:obj.datePublished, + image:obj.image + } + log.info(result); + return result; + })[0]; +} + + +} -} \ No newline at end of file diff --git a/douban/handler/DoubanOtherLoadHandler.ts b/douban/handler/DoubanOtherLoadHandler.ts index 87f71f8..cd8670d 100644 --- a/douban/handler/DoubanOtherLoadHandler.ts +++ b/douban/handler/DoubanOtherLoadHandler.ts @@ -1,14 +1,26 @@ -import { CheerioAPI } from "cheerio"; -import DoubanSubject from "douban/model/DoubanSubject"; -import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; +import { Editor, Notice } from "obsidian"; +import { CheerioAPI } from "cheerio"; +import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; +import DoubanSubject from "douban/model/DoubanSubject"; +import { i18nHelper } from "lang/helper"; +import { log } from "utils/logutil"; + +/** + * 默认的处理器 + */ export default class DoubanOtherLoadHandler extends DoubanAbstractLoadHandler { - parseSubjectFromHtml(data: CheerioAPI): DoubanSubject | undefined{ - return undefined; + parseText(template: string, arraySpilt: string, extract: DoubanSubject): string { + log.warn(i18nHelper.getMessage('current version not support type')); + return ""; } - getType(): string | undefined{ - return undefined + support(extract: DoubanSubject): boolean { + return false; } + parseSubjectFromHtml(data: CheerioAPI): DoubanSubject { + return undefined; + } + diff --git a/douban/handler/DoubanSubjectLoadHandler.ts b/douban/handler/DoubanSubjectLoadHandler.ts index 9d92402..cfa9c13 100644 --- a/douban/handler/DoubanSubjectLoadHandler.ts +++ b/douban/handler/DoubanSubjectLoadHandler.ts @@ -1,12 +1,13 @@ import DoubanSubject from "douban/model/DoubanSubject"; +import { Editor } from "obsidian"; export default interface DoubanSubjectLoadHandler { - - getType():string | undefined; + + parseText(template: string, arraySpilt:string, extract: DoubanSubject): string; support(extract:DoubanSubject):boolean; - handle(url:string):void; + handle(url:string, editor: Editor):void; } \ No newline at end of file diff --git a/douban/model/DoubanMoveSubject.ts b/douban/model/DoubanMoveSubject.ts deleted file mode 100644 index 46e2fa9..0000000 --- a/douban/model/DoubanMoveSubject.ts +++ /dev/null @@ -1,6 +0,0 @@ -import DoubanSubject from "./DoubanSubject"; - -export default class DoubanMovieSubject extends DoubanSubject { - cast:string; - score:string; -} diff --git a/douban/model/DoubanMovieSubject.ts b/douban/model/DoubanMovieSubject.ts new file mode 100644 index 0000000..e552b00 --- /dev/null +++ b/douban/model/DoubanMovieSubject.ts @@ -0,0 +1,12 @@ +import DoubanSubject from "./DoubanSubject"; +import {AggregateRating, Person, WithContext} from 'schema-dts'; + + +export default class DoubanMovieSubject extends DoubanSubject { + director:Person[]; + author:Person[]; + actor:Person[]; + aggregateRating:AggregateRating; + datePublished:string; + image:string +} diff --git a/douban/search/DoubanSearchFuzzySuggestModal.ts b/douban/search/DoubanSearchFuzzySuggestModal.ts index c4ae11c..c855693 100644 --- a/douban/search/DoubanSearchFuzzySuggestModal.ts +++ b/douban/search/DoubanSearchFuzzySuggestModal.ts @@ -1,6 +1,6 @@ import DoubanSearchResultSubject from "douban/model/DoubanSearchResultSubject"; import DoubanPlugin from "main"; -import { FuzzySuggestModal,App } from "obsidian"; +import { FuzzySuggestModal,App, Editor } from "obsidian"; import { log } from "utils/logutil"; @@ -9,13 +9,13 @@ export {DoubanFuzzySuggester} class DoubanFuzzySuggester extends FuzzySuggestModal { - public app: App; + public editor: Editor; private plugin: DoubanPlugin; private doubanSearchResultExtract:DoubanSearchResultSubject[] - constructor(app: App, plugin: DoubanPlugin) { + constructor(plugin: DoubanPlugin, editor: Editor) { super(app); - this.app = app; + this.editor = editor; this.plugin = plugin; this.setPlaceholder("Choose an item..."); @@ -28,12 +28,7 @@ class DoubanFuzzySuggester extends FuzzySuggestModal } - async reloadSearch() { - if(this.inputEl.value) { - log.info("reload search") - this.doubanSearchResultExtract = await this.plugin.getDoubanSearchList(this.inputEl.value); - } - } + getItems(): DoubanSearchResultSubject[] { return this.doubanSearchResultExtract; @@ -45,12 +40,12 @@ class DoubanFuzzySuggester extends FuzzySuggestModal } onChooseItem(item: DoubanSearchResultSubject, evt: MouseEvent | KeyboardEvent): void { - this.plugin.doubanEtractHandler.handle(item); + log.warn(`choose itme ${JSON.stringify(item)}`); + this.plugin.doubanEtractHandler.handle(item, this.editor); } public showSearchList(doubanSearchResultExtractList:DoubanSearchResultSubject[]) { this.doubanSearchResultExtract = doubanSearchResultExtractList; - log.info("show search result" ); this.start(); } diff --git a/douban/search/DoubanSearchModal.ts b/douban/search/DoubanSearchModal.ts index 41a1eb6..58d9e43 100644 --- a/douban/search/DoubanSearchModal.ts +++ b/douban/search/DoubanSearchModal.ts @@ -44,13 +44,11 @@ export class DoubanSearchModal extends Modal { cancelButton.addEventListener("click", this.close.bind(this)); } async search() { - log.info("start search :" + this.searchTerm); let { contentEl } = this; contentEl.empty(); if (this.searchTerm) { this.close(); - await this.plugin.search(this.searchTerm); - // await this.plugin.pasteIntoEditor(this.editor, null); + await this.plugin.search(this.searchTerm, this.editor); } } diff --git a/douban/search/Search.ts b/douban/search/Search.ts index a9b3218..e13ee28 100644 --- a/douban/search/Search.ts +++ b/douban/search/Search.ts @@ -16,7 +16,6 @@ export default class Searcher { .then(() => get(doubanSettings.searchUrl + searchItem, JSON.parse(doubanSettings.searchHeaders))) .then(ensureStatusCode(200)) .then(readStream) - .then(log.info) .then(cheerio.load) .then(SearchParserHandler.parseSearch); }; diff --git a/douban/search/SearchParser.ts b/douban/search/SearchParser.ts index e622c99..a4da63c 100644 --- a/douban/search/SearchParser.ts +++ b/douban/search/SearchParser.ts @@ -9,7 +9,7 @@ export default class SearchParserHandler { const item = dataHtml(i); var idPattern = /(\d){5,10}/g; var urlPattern = /(https%3A%2F%2F)\S+(\d){5,10}/g; - var linkValue = item.find("div.content > div > h3 > a").text(); + var linkValue = item.find("div.content > div > h3 > a").attr("href"); var ececResult = idPattern.exec(linkValue); var urlResult = urlPattern.exec(linkValue); var cast = item.find(".subject-cast").text(); @@ -17,11 +17,6 @@ export default class SearchParserHandler { id: ececResult?ececResult[0]:'', title: item.find("div.content > div > h3 > a").text(), score: item.find(".rating_nums").text(), - // duration: item.attr('data-duration'), - // region: item.attr('data-region'), - // director: item.attr('data-director'), - // actors: item.attr('data-actors'), - // poster: item.find('.poster img').attr('src'), cast: cast, type: item.find("div.content > div > h3 > span").text(), desc: item.find("div.content > p").text(), diff --git a/lang/helper.ts b/lang/helper.ts new file mode 100644 index 0000000..91f44ab --- /dev/null +++ b/lang/helper.ts @@ -0,0 +1,23 @@ +import en from './locale/en'; +import zhCN from './locale/zh-cn'; + +const localeMap: { [k: string]: Partial } = { + en, + zh: zhCN, +}; + +const lang = window.localStorage.getItem('language'); +const locale = localeMap[lang || 'en']; + + +export default class I18nHelper { + public getMessage(str: keyof typeof en): string { + if (!locale) { + console.error('Error: obsidian douban locale not found', lang); + } + + return (locale && locale[str]) || en[str]; + } +} + +export const i18nHelper:I18nHelper = new I18nHelper(); \ No newline at end of file diff --git a/lang/locale/en.ts b/lang/locale/en.ts new file mode 100644 index 0000000..e67dbe2 --- /dev/null +++ b/lang/locale/en.ts @@ -0,0 +1,34 @@ +//简体中文 +export default { + //main.ts + 'search douban by current file name':'search douban by current file name', + 'search douban and input current file':'search douban and input current file', + //DoubanSettingTab + 'douban search url': `Douban Search Url`, + 'douban search url desc 1': `Douban search page request address. `, + 'douban search url desc 2': `First go to:`, + 'douban search url desc 3': `Don't enter anything in the search input box, just click Search,`, + 'douban search url desc 4': `The redirected web page address is the search address,`, + 'douban search url desc 5': `Just copy the web address to the current input box.`, + + 'movie content template': `Movie Content Template`, + 'movie content template desc 1': `Set markdown template for extract to be inserted.`, + 'movie content template desc 2': `Available template variables are :`, + 'movie content template desc 3': `{{id}}, {{type}}, {{title}},`, + 'movie content template desc 4': `{{score}}, {{datePublished}}, {{director}},`, + 'movie content template desc 5': `{{author}}, {{autor}}, {{desc}},`, + 'movie content template desc 6': `{{image}}, {{url}}`, + + 'Date format': `Date Format`, + 'This format will be used when available template variables contain date.': + `This format will be used when available template variables contain date.`, + 'For more syntax, refer to': `For more syntax, refer to`, + 'Your current syntax looks like this':`Your current syntax looks like this`, + 'format reference': `format reference`, + 'Array Spilt String':`Array Spilt String`, + 'string to join between array type, such as author, actor':`string to join between array type, such as author, actor`, + 'Douban Request Headers':`Douban Request Headers`, + 'current version not support type': `This type of import is not supported temporarily, please go to github to submit issues for help`, + 'Douban': `Douban`, + +} \ No newline at end of file diff --git a/lang/locale/zh-cn.ts b/lang/locale/zh-cn.ts new file mode 100644 index 0000000..dc196f1 --- /dev/null +++ b/lang/locale/zh-cn.ts @@ -0,0 +1,37 @@ +//简体中文 +export default { + //main.ts + 'search in douban by current file name':'用当前文档名搜索豆瓣并写入当前文档', + 'search douban and input current file':'在豆瓣搜索并写入到当前文档', + //DoubanSettingTab + 'douban search url': `豆瓣搜索地址`, + 'douban search url desc 1': `豆瓣搜索页面请求地址, 通常是网页搜索的地址. `, + 'douban search url desc 2': `先访问:`, + 'douban search url desc 3': `然后在搜索输入框不输入任何内容,直接点击搜索,`, + 'douban search url desc 4': `所跳转的网页地址即是搜索地址,`, + 'douban search url desc 5': `将网页地址复制到当前输入框即可,`, + + 'movie content template': `电影文本模板`, + 'movie content template desc 1': `设置选择电影后导入的文本内容模板,`, + 'movie content template desc 2': `支持以下参数名称 :`, + 'movie content template desc 3': `{{id}}, {{type}}, {{title}},`, + 'movie content template desc 4': `{{score}}, {{datePublished}}, {{director}},`, + 'movie content template desc 5': `{{author}}, {{autor}}, {{desc}},`, + 'movie content template desc 6': `{{image}}, {{url}}`, + + 'Date format': `参数日期格式`, + 'This format will be used when available template variables contain date.': + `这个格式是给上面获取到的参数进行格式化时显示的内容 .`, + 'For more syntax, refer to': `详细介绍请参考`, + 'Your current syntax looks like this':`时间参数时间格式预览`, + 'format reference': `格式参考`, + 'Array Spilt String':`数组分割字符串`, + 'string to join between array type, such as author, actor':`当模板中的变量存在数组, 则需要设定数组元素中的分割符号,比如 演员列表等`, + 'Douban Request Headers':`豆瓣HTTP请求头`, + 'Douban Request Headers Desc': `如果豆瓣搜索或者获取数据失败,请尝试修改这个参数,\n + 参数获取方式为:\n + 1. 访问http://www.douban.com + 2. 复制请求头,仅复制以下请求头 `, + 'current version not support type': `暂时不支持该类型导入,请至github提交issuess获取帮助`, + 'Douban': `豆瓣网` +} \ No newline at end of file diff --git a/main.ts b/main.ts index 2d02e79..d783e99 100644 --- a/main.ts +++ b/main.ts @@ -1,59 +1,31 @@ +import { DEFAULT_SETTINGS, DoubanPluginSettings } from "./douban/Douban"; +import { Editor, Plugin } from "obsidian"; + import { DoubanEtractHandler } from "douban/handler/DoubanExtractHandler"; +import { DoubanFuzzySuggester } from "douban/search/DoubanSearchFuzzySuggestModal"; +import DoubanMovieSubject from "douban/model/DoubanMovieSubject"; import { DoubanSearchModal } from "douban/search/DoubanSearchModal"; import { DoubanSettingTab } from "douban/DoubanSettingTab"; -import { DoubanFuzzySuggester } from "douban/search/DoubanSearchFuzzySuggestModal"; -import { Editor, Notice, Plugin} from "obsidian"; -import { log } from "utils/logutil"; -import { DEFAULT_SETTINGS, DoubanPluginSettings } from "./douban/Douban"; import DoubanSubject from "douban/model/DoubanSubject"; -import DoubanSearchResultSubject from "douban/model/DoubanSearchResultSubject"; import Searcher from "douban/search/Search"; +import { i18nHelper } from './lang/helper'; export default class DoubanPlugin extends Plugin { public settings: DoubanPluginSettings; - public fuzzySuggester: DoubanFuzzySuggester; public doubanEtractHandler: DoubanEtractHandler; - - formatExtractText(extract: DoubanSubject): string { - return this.settings.template ? - this.settings.template.replace("{{id}}", extract.id) - .replace("{{type}}", extract.type) - .replace("{{title}}", extract.title) - .replace("{{desc}}", extract.desc) - .replace("{{url}}", extract.url) : ""; - } - - handleNotFound(searchTerm: string) { - log.error(`${searchTerm} not found on Wikipedia.`); - } - - handleCouldntResolveDisambiguation() { - log.error(`Could not automatically resolve disambiguation.`); - } - - async getDoubanSearchList(title: string): Promise { - return Searcher.search(title, this.settings); - } - - - - async pasteIntoEditor(editor: Editor, extract: DoubanSubject) { - if (!extract) { - this.handleNotFound("Not Found Subject"); - return; - } - editor.replaceSelection(this.formatExtractText(extract)); + async putToEditor(editor:Editor, extract:DoubanSubject) { + var content:string = this.doubanEtractHandler.parseText(this.settings.movieTemplate, + this.settings.arraySpilt, extract) + if(content) { + editor.replaceSelection(content); + } } - async search(searchTerm:string) { - log.info("plugin search :" + searchTerm); - const resultListPromise = this.getDoubanSearchList(searchTerm); - const resultList = await resultListPromise; - // const result = this.parseSearchList(resultList); - log.info("plugin search result:" + JSON.stringify(resultList)); - this.fuzzySuggester.showSearchList(resultList); + async search(searchTerm:string, editor: Editor) { + const resultList = await Searcher.search(searchTerm, this.settings); + new DoubanFuzzySuggester(this, editor).showSearchList(resultList); } async getDoubanMovieTextForActiveFile(editor: Editor) { @@ -61,13 +33,12 @@ export default class DoubanPlugin extends Plugin { if (activeFile) { const searchTerm = activeFile.basename; if (searchTerm) { - await this.search(searchTerm); + await this.search(searchTerm, editor); } } } async geDoubanMovieTextForSearchTerm(editor: Editor) { - log.info("start open search windows"); new DoubanSearchModal(this.app, this, editor).open(); } @@ -75,27 +46,26 @@ export default class DoubanPlugin extends Plugin { await this.loadSettings(); this.addCommand({ - id: "douban-movie-for-current-file", - name: "get dou ban movie", + id: "search-douban-by-current-file-name", + name: i18nHelper.getMessage("search douban by current file name"), editorCallback: (editor: Editor) => this.getDoubanMovieTextForActiveFile(editor), }); this.addCommand({ - id: "douban-movie-for-search", - name: "douban-movie-for-search", + id: "search-douban-and-input-current-file", + name: i18nHelper.getMessage("search douban and input current file"), editorCallback: (editor: Editor) => this.geDoubanMovieTextForSearchTerm(editor), }); this.addSettingTab(new DoubanSettingTab(this.app, this)); - this.fuzzySuggester = new DoubanFuzzySuggester(this.app, this); - this.doubanEtractHandler = new DoubanEtractHandler(this.app, this); } async loadSettings() { this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + this.doubanEtractHandler = new DoubanEtractHandler(this.app, this); } async saveSettings() { diff --git a/package-lock.json b/package-lock.json index a8f4a7b..875f774 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1239 +1,8 @@ { "name": "obsidian-sample-plugin", "version": "1.0.1", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "obsidian-sample-plugin", - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "axios": "^0.27.2", - "cheerio": "^1.0.0-rc.11", - "douban-search-crack": "^1.0.6", - "tiny-network": "0.0.6" - }, - "devDependencies": { - "@types/node": "^16.11.6", - "@typescript-eslint/eslint-plugin": "^5.2.0", - "@typescript-eslint/parser": "^5.2.0", - "builtin-modules": "^3.2.0", - "esbuild": "0.13.12", - "obsidian": "latest", - "tslib": "2.3.1", - "typescript": "4.4.4" - } - }, - "node_modules/@codemirror/rangeset": { - "version": "0.19.9", - "resolved": "https://registry.npmmirror.com/@codemirror/rangeset/-/rangeset-0.19.9.tgz", - "integrity": "sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==", - "dev": true, - "dependencies": { - "@codemirror/state": "^0.19.0" - } - }, - "node_modules/@codemirror/state": { - "version": "0.19.9", - "resolved": "https://registry.npmmirror.com/@codemirror/state/-/state-0.19.9.tgz", - "integrity": "sha512-psOzDolKTZkx4CgUqhBQ8T8gBc0xN5z4gzed109aF6x7D7umpDRoimacI/O6d9UGuyl4eYuDCZmDFr2Rq7aGOw==", - "dev": true, - "dependencies": { - "@codemirror/text": "^0.19.0" - } - }, - "node_modules/@codemirror/text": { - "version": "0.19.6", - "resolved": "https://registry.npmmirror.com/@codemirror/text/-/text-0.19.6.tgz", - "integrity": "sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA==", - "dev": true - }, - "node_modules/@codemirror/view": { - "version": "0.19.48", - "resolved": "https://registry.npmmirror.com/@codemirror/view/-/view-0.19.48.tgz", - "integrity": "sha512-0eg7D2Nz4S8/caetCTz61rK0tkHI17V/d15Jy0kLOT8dTLGGNJUponDnW28h2B6bERmPlVHKh8MJIr5OCp1nGw==", - "dev": true, - "dependencies": { - "@codemirror/rangeset": "^0.19.5", - "@codemirror/state": "^0.19.3", - "@codemirror/text": "^0.19.0", - "style-mod": "^4.0.0", - "w3c-keyname": "^2.2.4" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/codemirror": { - "version": "0.0.108", - "resolved": "https://registry.npmmirror.com/@types/codemirror/-/codemirror-0.0.108.tgz", - "integrity": "sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw==", - "dev": true, - "dependencies": { - "@types/tern": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.11.36", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-16.11.36.tgz", - "integrity": "sha512-FR5QJe+TaoZ2GsMHkjuwoNabr+UrJNRr2HNOo+r/7vhcuntM6Ee/pRPOnRhhL2XE9OOvX9VLEq+BcXl3VjNoWA==", - "dev": true - }, - "node_modules/@types/tern": { - "version": "0.23.4", - "resolved": "https://registry.npmmirror.com/@types/tern/-/tern-0.23.4.tgz", - "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.25.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.25.0.tgz", - "integrity": "sha512-icYrFnUzvm+LhW0QeJNKkezBu6tJs9p/53dpPLFH8zoM9w1tfaKzVurkPotEpAqQ8Vf8uaFyL5jHd0Vs6Z0ZQg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.25.0", - "@typescript-eslint/type-utils": "5.25.0", - "@typescript-eslint/utils": "5.25.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.25.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.25.0.tgz", - "integrity": "sha512-r3hwrOWYbNKP1nTcIw/aZoH+8bBnh/Lh1iDHoFpyG4DnCpvEdctrSl6LOo19fZbzypjQMHdajolxs6VpYoChgA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.25.0", - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/typescript-estree": "5.25.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.25.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.25.0.tgz", - "integrity": "sha512-p4SKTFWj+2VpreUZ5xMQsBMDdQ9XdRvODKXN4EksyBjFp2YvQdLkyHqOffakYZPuWJUDNu3jVXtHALDyTv3cww==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/visitor-keys": "5.25.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.25.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.25.0.tgz", - "integrity": "sha512-B6nb3GK3Gv1Rsb2pqalebe/RyQoyG/WDy9yhj8EE0Ikds4Xa8RR28nHz+wlt4tMZk5bnAr0f3oC8TuDAd5CPrw==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.25.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.25.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.25.0.tgz", - "integrity": "sha512-7fWqfxr0KNHj75PFqlGX24gWjdV/FDBABXL5dyvBOWHpACGyveok8Uj4ipPX/1fGU63fBkzSIycEje4XsOxUFA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.25.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.25.0.tgz", - "integrity": "sha512-MrPODKDych/oWs/71LCnuO7NyR681HuBly2uLnX3r5i4ME7q/yBqC4hW33kmxtuauLTM0OuBOhhkFaxCCOjEEw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/visitor-keys": "5.25.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.25.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.25.0.tgz", - "integrity": "sha512-qNC9bhnz/n9Kba3yI6HQgQdBLuxDoMgdjzdhSInZh6NaDnFpTUlwNGxplUFWfY260Ya0TRPvkg9dd57qxrJI9g==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.25.0", - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/typescript-estree": "5.25.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.25.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.25.0.tgz", - "integrity": "sha512-yd26vFgMsC4h2dgX4+LR+GeicSKIfUvZREFLf3DDjZPtqgLx5AJZr6TetMNwFP9hcKreTTeztQYBTNbNoOycwA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.25.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmmirror.com/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.11.tgz", - "integrity": "sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "node_modules/cheerio/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "node_modules/douban-search-crack": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/douban-search-crack/-/douban-search-crack-1.0.6.tgz", - "integrity": "sha512-IchjtqsemiJH0x7xo/7/QjEVa0khKMfY0KMtA9GMXXSQRJFPtiedi5Z0htB/xq0Thpo6SsbLXYJIkdVX3n3Qng==", - "dependencies": { - "xxhashjs": "^0.2.2" - } - }, - "node_modules/entities": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/entities/-/entities-4.3.0.tgz", - "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/esbuild": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.13.12.tgz", - "integrity": "sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "optionalDependencies": { - "esbuild-android-arm64": "0.13.12", - "esbuild-darwin-64": "0.13.12", - "esbuild-darwin-arm64": "0.13.12", - "esbuild-freebsd-64": "0.13.12", - "esbuild-freebsd-arm64": "0.13.12", - "esbuild-linux-32": "0.13.12", - "esbuild-linux-64": "0.13.12", - "esbuild-linux-arm": "0.13.12", - "esbuild-linux-arm64": "0.13.12", - "esbuild-linux-mips64le": "0.13.12", - "esbuild-linux-ppc64le": "0.13.12", - "esbuild-netbsd-64": "0.13.12", - "esbuild-openbsd-64": "0.13.12", - "esbuild-sunos-64": "0.13.12", - "esbuild-windows-32": "0.13.12", - "esbuild-windows-64": "0.13.12", - "esbuild-windows-arm64": "0.13.12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.12.tgz", - "integrity": "sha512-TSVZVrb4EIXz6KaYjXfTzPyyRpXV5zgYIADXtQsIenjZ78myvDGaPi11o4ZSaHIwFHsuwkB6ne5SZRBwAQ7maw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/esbuild-darwin-64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz", - "integrity": "sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.12.tgz", - "integrity": "sha512-JvAMtshP45Hd8A8wOzjkY1xAnTKTYuP/QUaKp5eUQGX+76GIie3fCdUUr2ZEKdvpSImNqxiZSIMziEiGB5oUmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.12.tgz", - "integrity": "sha512-r6On/Skv9f0ZjTu6PW5o7pdXr8aOgtFOEURJZYf1XAJs0IQ+gW+o1DzXjVkIoT+n1cm3N/t1KRJfX71MPg/ZUA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.12.tgz", - "integrity": "sha512-F6LmI2Q1gii073kmBE3NOTt/6zLL5zvZsxNLF8PMAwdHc+iBhD1vzfI8uQZMJA1IgXa3ocr3L3DJH9fLGXy6Yw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/esbuild-linux-32": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.13.12.tgz", - "integrity": "sha512-U1UZwG3UIwF7/V4tCVAo/nkBV9ag5KJiJTt+gaCmLVWH3bPLX7y+fNlhIWZy8raTMnXhMKfaTvWZ9TtmXzvkuQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.13.12.tgz", - "integrity": "sha512-YpXSwtu2NxN3N4ifJxEdsgd6Q5d8LYqskrAwjmoCT6yQnEHJSF5uWcxv783HWN7lnGpJi9KUtDvYsnMdyGw71Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-arm": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.12.tgz", - "integrity": "sha512-SyiT/JKxU6J+DY2qUiSLZJqCAftIt3uoGejZ0HDnUM2MGJqEGSGh7p1ecVL2gna3PxS4P+j6WAehCwgkBPXNIw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.12.tgz", - "integrity": "sha512-sgDNb8kb3BVodtAlcFGgwk+43KFCYjnFOaOfJibXnnIojNWuJHpL6aQJ4mumzNWw8Rt1xEtDQyuGK9f+Y24jGA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.12.tgz", - "integrity": "sha512-qQJHlZBG+QwVIA8AbTEtbvF084QgDi4DaUsUnA+EolY1bxrG+UyOuGflM2ZritGhfS/k7THFjJbjH2wIeoKA2g==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.12.tgz", - "integrity": "sha512-2dSnm1ldL7Lppwlo04CGQUpwNn5hGqXI38OzaoPOkRsBRWFBozyGxTFSee/zHFS+Pdh3b28JJbRK3owrrRgWNw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.12.tgz", - "integrity": "sha512-D4raxr02dcRiQNbxOLzpqBzcJNFAdsDNxjUbKkDMZBkL54Z0vZh4LRndycdZAMcIdizC/l/Yp/ZsBdAFxc5nbA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ] - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.12.tgz", - "integrity": "sha512-KuLCmYMb2kh05QuPJ+va60bKIH5wHL8ypDkmpy47lzwmdxNsuySeCMHuTv5o2Af1RUn5KLO5ZxaZeq4GEY7DaQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/esbuild-sunos-64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.12.tgz", - "integrity": "sha512-jBsF+e0woK3miKI8ufGWKG3o3rY9DpHvCVRn5eburMIIE+2c+y3IZ1srsthKyKI6kkXLvV4Cf/E7w56kLipMXw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ] - }, - "node_modules/esbuild-windows-32": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.13.12.tgz", - "integrity": "sha512-L9m4lLFQrFeR7F+eLZXG82SbXZfUhyfu6CexZEil6vm+lc7GDCE0Q8DiNutkpzjv1+RAbIGVva9muItQ7HVTkQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/esbuild-windows-64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.13.12.tgz", - "integrity": "sha512-k4tX4uJlSbSkfs78W5d9+I9gpd+7N95W7H2bgOMFPsYREVJs31+Q2gLLHlsnlY95zBoPQMIzHooUIsixQIBjaQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.13.12", - "resolved": "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.12.tgz", - "integrity": "sha512-2tTv/BpYRIvuwHpp2M960nG7uvL+d78LFW/ikPItO+2GfK51CswIKSetSpDii+cjz8e9iSPgs+BU4o8nWICBwQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.0", - "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.0.tgz", - "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/moment": { - "version": "2.29.2", - "resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dependencies": { - "boolbase": "^1.0.0" - } - }, - "node_modules/obsidian": { - "version": "0.14.8", - "resolved": "https://registry.npmmirror.com/obsidian/-/obsidian-0.14.8.tgz", - "integrity": "sha512-CQz+B2HSbhGVEBwZBL3rPl29ruOBmEhCbBmW7PIILnnRh6fFFvYy3kZLHVTUidzvRGZnEW/mQ7n9LXeJCp2a/Q==", - "dev": true, - "dependencies": { - "@codemirror/state": "^0.19.6", - "@codemirror/view": "^0.19.31", - "@types/codemirror": "0.0.108", - "moment": "2.29.2" - } - }, - "node_modules/parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", - "dependencies": { - "entities": "^4.3.0" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/style-mod": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.0.0.tgz", - "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==", - "dev": true - }, - "node_modules/tiny-network": { - "version": "0.0.6", - "resolved": "https://registry.npmmirror.com/tiny-network/-/tiny-network-0.0.6.tgz", - "integrity": "sha512-fYNn6nnbKZFch5nd1aWtwVwJG7zJc5dcyypKx1PgJvv1EFr/tUhQPSFx5Tw6lKTVqemxZystG8mkbQuu/P/R5g==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/w3c-keyname": { - "version": "2.2.4", - "resolved": "https://registry.npmmirror.com/w3c-keyname/-/w3c-keyname-2.2.4.tgz", - "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==", - "dev": true - }, - "node_modules/xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dependencies": { - "cuint": "^0.2.2" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - }, "dependencies": { "@codemirror/rangeset": { "version": "0.19.9", @@ -1966,6 +735,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, "nth-check": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.0.1.tgz", @@ -2042,6 +816,11 @@ "queue-microtask": "^1.2.2" } }, + "schema-dts": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/schema-dts/-/schema-dts-1.1.0.tgz", + "integrity": "sha512-vdmbs/5ycj4zyKpZIDqTcy+IZi4s7c38RVAYuDmRi7zgxUT8wRWPMLzg0jr7FjdVunYu9yZ00F3+XcZTTFcTOQ==" + }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", @@ -2101,9 +880,9 @@ } }, "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "version": "4.7.2", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.7.2.tgz", + "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==", "dev": true }, "w3c-keyname": { diff --git a/package.json b/package.json index 7798b4d..d35ed15 100644 --- a/package.json +++ b/package.json @@ -19,12 +19,14 @@ "esbuild": "0.13.12", "obsidian": "latest", "tslib": "2.3.1", - "typescript": "4.4.4" + "typescript": "4.7.2" }, "dependencies": { "axios": "^0.27.2", "cheerio": "^1.0.0-rc.11", "douban-search-crack": "^1.0.6", + "node-fetch": "^2.6.1", + "schema-dts": "^1.1.0", "tiny-network": "0.0.6" } } diff --git a/styles.css b/styles.css index cfd0fd7..8b19241 100644 --- a/styles.css +++ b/styles.css @@ -1,4 +1,13 @@ -/* Sets all the text color to red! */ -body { - color: red; +.settings_area { + margin-left: 5px; + margin-right: 5px; + font-size: 14px; + width: 100%; } + +.settings_textField { + margin-left: 5px; + margin-right: 5px; + font-size: 14px; + width: 100%; +} \ No newline at end of file diff --git a/utils/HttpUtil.ts b/utils/HttpUtil.ts new file mode 100644 index 0000000..951e4ec --- /dev/null +++ b/utils/HttpUtil.ts @@ -0,0 +1,33 @@ +import * as https from 'https'; +import { get } from 'tiny-network'; +import { log } from './logutil'; + +export default class HttpUtil { + + static getHttps(url:string, options:any):Promise { + return new Promise( + function (resolve, reject) { + https.get(url + '/', options, (response) => { + console.log('url:', url + '/'); + console.log('statusCode:', response.statusCode); + console.log('headers:', response.headers); + if (response.statusCode === 200) { + response.on('data', (d) => { + resolve(d); + }); + } if (response.statusCode === 301 || response.statusCode === 302 || response.statusCode == 303) { + resolve(response.headers.location); + } else { + reject(new Error(response.statusMessage)); + } + response.on('data', (d) => { + process.stdout.write(d); + }); + + }).on('error', (e) => { + reject(new Error('XMLHttpRequest Error: ' + e.message)); + }); + + }); + } +} \ No newline at end of file diff --git a/utils/logutil.ts b/utils/logutil.ts index 605bbd9..49d6fc7 100644 --- a/utils/logutil.ts +++ b/utils/logutil.ts @@ -8,12 +8,12 @@ class Logger { } public warn(e:any):any { - new Notice("Douban Plugin Warn: " + e); + new Notice("Obsidian Douban Plugin Warn: " + e); return e; } public info(e:any):any { - console.log("Douban Plugin Warn: " + e); + console.log("Douban Plugin Info: " + e); return e; } }