diff --git a/deps.edn b/deps.edn index f154c0fa16..bfbca8f77a 100755 --- a/deps.edn +++ b/deps.edn @@ -18,7 +18,7 @@ cljs-http/cljs-http {:mvn/version "0.1.46"} org.babashka/sci {:mvn/version "0.3.2"} hickory/hickory {:git/url "https://github.com/logseq/hickory" - :sha "9c2c2f1fc2c45efaad906e0faabc3201278deeaa"} + :sha "86baee0319a66b7921719a5d2345e09734b23650"} hiccups/hiccups {:mvn/version "0.3.0"} tongue/tongue {:mvn/version "0.4.4"} org.clojure/core.async {:mvn/version "1.3.610"} diff --git a/deps/graph-parser/.clj-kondo/config.edn b/deps/graph-parser/.clj-kondo/config.edn index b90675ee75..5621d41915 100644 --- a/deps/graph-parser/.clj-kondo/config.edn +++ b/deps/graph-parser/.clj-kondo/config.edn @@ -1,6 +1,7 @@ {:linters {:consistent-alias - {:aliases {datascript.core d + {:aliases {clojure.string string + datascript.core d logseq.graph-parser graph-parser logseq.graph-parser.text text logseq.graph-parser.block gp-block diff --git a/deps/graph-parser/src/logseq/graph_parser.cljs b/deps/graph-parser/src/logseq/graph_parser.cljs index 994b1b5e91..fc71717d6b 100644 --- a/deps/graph-parser/src/logseq/graph_parser.cljs +++ b/deps/graph-parser/src/logseq/graph_parser.cljs @@ -24,14 +24,15 @@ (db-set-file-content! conn file content) (let [format (gp-util/get-format file) file-content [{:file/path file}] - tx (if (contains? gp-config/mldoc-support-formats format) + {:keys [tx ast]} + (if (contains? gp-config/mldoc-support-formats format) (let [extract-options' (merge {:block-pattern (gp-config/get-block-pattern format) :date-formatter "MMM do, yyyy" :supported-formats (gp-config/supported-formats)} extract-options {:db @conn}) - [pages blocks] - (extract/extract-blocks-pages file content extract-options') + {:keys [pages blocks ast]} + (extract/extract file content extract-options') delete-blocks (delete-blocks-fn (first pages) file) block-ids (map (fn [block] {:block/uuid (:block/uuid block)}) blocks) block-refs-ids (->> (mapcat :block/refs blocks) @@ -44,13 +45,16 @@ pages (extract/with-ref-pages pages blocks) pages-index (map #(select-keys % [:block/name]) pages)] ;; does order matter? - (concat file-content pages-index delete-blocks pages block-ids blocks)) - file-content) + {:tx (concat file-content pages-index delete-blocks pages block-ids blocks) + :ast ast}) + {:tx file-content}) tx (concat tx [(cond-> {:file/path file} new? ;; TODO: use file system timestamp? (assoc :file/created-at (date-time-util/time-ms)))])] - (d/transact! conn (gp-util/remove-nils tx) (select-keys options [:new-graph? :from-disk?])))) + {:tx + (d/transact! conn (gp-util/remove-nils tx) (select-keys options [:new-graph? :from-disk?])) + :ast ast})) (defn filter-files "Filters files in preparation for parsing. Only includes files that are diff --git a/deps/graph-parser/src/logseq/graph_parser/cli.cljs b/deps/graph-parser/src/logseq/graph_parser/cli.cljs index 281f8a0ad9..f2961994a9 100644 --- a/deps/graph-parser/src/logseq/graph_parser/cli.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/cli.cljs @@ -46,8 +46,12 @@ TODO: Fail fast when process exits 1" [conn files {:keys [config] :as options}] (let [extract-options (merge {:date-formatter (gp-config/get-date-formatter config)} (select-keys options [:verbose]))] - (doseq [{:file/keys [path content]} files] - (graph-parser/parse-file conn path content {:extract-options extract-options})))) + (mapv + (fn [{:file/keys [path content]}] + (let [{:keys [ast]} + (graph-parser/parse-file conn path content {:extract-options extract-options})] + {:file path :ast ast})) + files))) (defn parse-graph "Parses a given graph directory and returns a datascript connection and all @@ -61,8 +65,9 @@ TODO: Fail fast when process exits 1" ([dir options] (let [files (or (:files options) (build-graph-files dir)) conn (ldb/start-conn) - config (read-config dir)] - (when-not (:files options) (println "Parsing" (count files) "files...")) - (parse-files conn files (merge options {:config config})) + config (read-config dir) + _ (when-not (:files options) (println "Parsing" (count files) "files...")) + asts (parse-files conn files (merge options {:config config}))] {:conn conn - :files (map :file/path files)}))) + :files (map :file/path files) + :asts asts}))) diff --git a/deps/graph-parser/src/logseq/graph_parser/extract.cljc b/deps/graph-parser/src/logseq/graph_parser/extract.cljc index 4b46698d09..518fda5c2f 100644 --- a/deps/graph-parser/src/logseq/graph_parser/extract.cljc +++ b/deps/graph-parser/src/logseq/graph_parser/extract.cljc @@ -138,16 +138,17 @@ (catch :default e (log/error :exception e)))) -(defn extract-blocks-pages +(defn extract + "Extracts pages, blocks and ast from given file" [file content {:keys [user-config verbose] :or {verbose true} :as options}] (if (string/blank? content) [] (let [format (gp-util/get-format file) _ (when verbose (println "Parsing start: " file)) ast (gp-mldoc/->edn content (gp-mldoc/default-config format - ;; {:parse_outline_only? true} - ) - user-config)] + ;; {:parse_outline_only? true} + ) + user-config)] (when verbose (println "Parsing finished: " file)) (let [first-block (ffirst ast) properties (let [properties (and (gp-property/properties-ast? first-block) @@ -165,10 +166,11 @@ (update properties :filters (fn [v] (string/replace (or v "") "\\" ""))) - properties)))] - (extract-pages-and-blocks - format ast properties - file content options))))) + properties))) + [pages blocks] (extract-pages-and-blocks format ast properties file content options)] + {:pages pages + :blocks blocks + :ast ast})))) (defn- with-block-uuid [pages] diff --git a/deps/graph-parser/test/logseq/graph_parser/cli_test.cljs b/deps/graph-parser/test/logseq/graph_parser/cli_test.cljs index 16ee5de53b..cab27e4457 100644 --- a/deps/graph-parser/test/logseq/graph_parser/cli_test.cljs +++ b/deps/graph-parser/test/logseq/graph_parser/cli_test.cljs @@ -1,13 +1,25 @@ (ns logseq.graph-parser.cli-test - (:require [cljs.test :refer [deftest]] + (:require [cljs.test :refer [deftest is testing]] [logseq.graph-parser.cli :as gp-cli] - [logseq.graph-parser.test.docs-graph-helper :as docs-graph-helper])) + [logseq.graph-parser.test.docs-graph-helper :as docs-graph-helper] + [clojure.string :as string])) ;; Integration test that test parsing a large graph like docs (deftest ^:integration parse-graph (let [graph-dir "test/docs" _ (docs-graph-helper/clone-docs-repo-if-not-exists graph-dir) - {:keys [conn files]} (gp-cli/parse-graph graph-dir) - db @conn] + {:keys [conn files asts]} (gp-cli/parse-graph graph-dir)] - (docs-graph-helper/docs-graph-assertions db files))) + (docs-graph-helper/docs-graph-assertions @conn files) + + (testing "Asts" + (is (seq asts) "Asts returned are non-zero") + (is (= files (map :file asts)) + "There's an ast returned for every file processed") + (is (empty? (remove #(or + (seq (:ast %)) + ;; logseq files don't have ast + ;; could also used gp-config but API isn't public yet + (string/includes? (:file %) (str graph-dir "/logseq/"))) + asts)) + "Parsed files shouldn't have empty asts")))) diff --git a/deps/graph-parser/test/logseq/graph_parser/extract_test.cljs b/deps/graph-parser/test/logseq/graph_parser/extract_test.cljs index 5265df41a8..605d9ad9d3 100644 --- a/deps/graph-parser/test/logseq/graph_parser/extract_test.cljs +++ b/deps/graph-parser/test/logseq/graph_parser/extract_test.cljs @@ -5,16 +5,15 @@ (defn- extract [text] - (let [result (extract/extract-blocks-pages "a.md" text {:block-pattern "-"}) - result (last result) - lefts (map (juxt :block/parent :block/left) result)] + (let [{:keys [blocks]} (extract/extract "a.md" text {:block-pattern "-"}) + lefts (map (juxt :block/parent :block/left) blocks)] (if (not= (count lefts) (count (distinct lefts))) (do - (pprint/pprint (map (fn [x] (select-keys x [:block/uuid :block/level :block/content :block/left])) result)) + (pprint/pprint (map (fn [x] (select-keys x [:block/uuid :block/level :block/content :block/left])) blocks)) (throw (js/Error. ":block/parent && :block/left conflicts"))) - (mapv :block/content result)))) + (mapv :block/content blocks)))) -(deftest test-extract-blocks-pages +(deftest test-extract [] (is (= ["a" "b" "c"] (extract diff --git a/e2e-tests/basic.spec.ts b/e2e-tests/basic.spec.ts index 8541715a62..687a6ee04a 100644 --- a/e2e-tests/basic.spec.ts +++ b/e2e-tests/basic.spec.ts @@ -223,5 +223,5 @@ test('invalid page props #3944', async ({ page, block }) => { await block.mustFill('public:: true\nsize:: 65535') await page.press('textarea >> nth=0', 'Enter') // Force rendering property block - await block.clickNext() + await block.enterNext() }) diff --git a/e2e-tests/dnd.spec.ts b/e2e-tests/dnd.spec.ts index ec784b6329..f17dadab3e 100644 --- a/e2e-tests/dnd.spec.ts +++ b/e2e-tests/dnd.spec.ts @@ -33,21 +33,21 @@ test('drop to left center', async ({ page }) => { }) -test('drop to upper left', async ({ page }) => { +test('drop to upper left', async ({ page, block }) => { await createRandomPage(page) - await page.fill('textarea >> nth=0', 'block a') - await enterNextBlock(page) + await block.mustFill('block a') + await block.enterNext() - await page.fill('textarea >> nth=0', 'block b') - await page.press('textarea >> nth=0', 'Escape') + await block.mustFill('block b') + await block.escapeEditing() const bullet = page.locator('span.bullet-container >> nth=-1') const where = page.locator('.ls-block >> nth=0') await bullet.dragTo(where, { targetPosition: { - x: 30, - y: 5 + x: 0, + y: 0 } }) diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index c2fc42f039..17fc17927b 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -14,8 +14,6 @@ 504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; }; 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; }; 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; }; - 5FD5BB71278579F5008E6875 /* DownloadiCloudFiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FD5BB70278579F5008E6875 /* DownloadiCloudFiles.swift */; }; - 5FD5BB73278579FF008E6875 /* DownloadiCloudFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FD5BB72278579FF008E6875 /* DownloadiCloudFiles.m */; }; 5FF8632A283B5ADB0047731B /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FF86329283B5ADB0047731B /* Utils.swift */; }; 5FF8632C283B5BFD0047731B /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FF8632B283B5BFD0047731B /* Utils.m */; }; 5FFF7D6D27E343FA00B00DA8 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FFF7D6C27E343FA00B00DA8 /* ShareViewController.swift */; }; @@ -70,8 +68,6 @@ 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = ""; }; - 5FD5BB70278579F5008E6875 /* DownloadiCloudFiles.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DownloadiCloudFiles.swift; sourceTree = ""; }; - 5FD5BB72278579FF008E6875 /* DownloadiCloudFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DownloadiCloudFiles.m; sourceTree = ""; }; 5FF86329283B5ADB0047731B /* Utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; }; 5FF8632B283B5BFD0047731B /* Utils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Utils.m; sourceTree = ""; }; 5FFF7D6A27E343FA00B00DA8 /* ShareViewController.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ShareViewController.appex; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -144,8 +140,6 @@ children = ( 5FF86329283B5ADB0047731B /* Utils.swift */, 5FF8632B283B5BFD0047731B /* Utils.m */, - 5FD5BB72278579FF008E6875 /* DownloadiCloudFiles.m */, - 5FD5BB70278579F5008E6875 /* DownloadiCloudFiles.swift */, D32752BF2754C5AB0039291C /* AppDebug.entitlements */, D32752BC275496A60039291C /* App.entitlements */, 50379B222058CBB4000EE86E /* capacitor.config.json */, @@ -359,13 +353,11 @@ buildActionMask = 2147483647; files = ( 504EC3081FED79650016851F /* AppDelegate.swift in Sources */, - 5FD5BB71278579F5008E6875 /* DownloadiCloudFiles.swift in Sources */, FE443F1E27FF54AA007ECE65 /* Payload.swift in Sources */, 5FF8632C283B5BFD0047731B /* Utils.m in Sources */, FE8C946B27FD762700C8017B /* FileSync.swift in Sources */, FE647FF427BDFEDE00F3206B /* FsWatcher.swift in Sources */, 5FF8632A283B5ADB0047731B /* Utils.swift in Sources */, - 5FD5BB73278579FF008E6875 /* DownloadiCloudFiles.m in Sources */, D3D62A0A275C92880003FBDC /* FileContainer.swift in Sources */, D3D62A0C275C928F0003FBDC /* FileContainer.m in Sources */, FE443F1C27FF5420007ECE65 /* Extensions.swift in Sources */, diff --git a/ios/App/App/DownloadiCloudFiles.m b/ios/App/App/DownloadiCloudFiles.m deleted file mode 100644 index 39cb95e30b..0000000000 --- a/ios/App/App/DownloadiCloudFiles.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// DownloadiCloudFiles.m -// Logseq -// -// Created by leizhe on 2021/12/29. -// - -#import -#import - -CAP_PLUGIN(DownloadiCloudFiles, "DownloadiCloudFiles", - CAP_PLUGIN_METHOD(syncGraph, CAPPluginReturnPromise); - ) diff --git a/ios/App/App/DownloadiCloudFiles.swift b/ios/App/App/DownloadiCloudFiles.swift deleted file mode 100644 index 62f43aab9e..0000000000 --- a/ios/App/App/DownloadiCloudFiles.swift +++ /dev/null @@ -1,109 +0,0 @@ -// -// DownloadiCloudFiles.swift -// Logseq -// -// Created by leizhe on 2021/12/29. -// - -import Foundation -import Capacitor - -@objc(DownloadiCloudFiles) -public class DownloadiCloudFiles: CAPPlugin, UIDocumentPickerDelegate { - - public var _call: CAPPluginCall? = nil - - let fileManager = FileManager.default - var filesNeededToDownload = Set() - let extensions = [ - "md", - "org", - "css", - "edn", - "excalidraw" - ] - - var containerUrl: URL? { - return fileManager.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") - } - - var isDirectory: ObjCBool = false - var downloaded = false - - @objc func syncGraph(_ call: CAPPluginCall) { - - guard let graph = call.options["graph"] as? String else { - call.reject("Missing graph name") - return - } - - let ignores = [".git", ".trash", "bak", ".recycle"] - - if let url = self.containerUrl?.appendingPathComponent(graph) { - do { - downloaded = try self.downloadAllFilesFromCloud(at: url, ignorePattern: ignores) - handleDownloadFolderLoop() - } catch { - print(error.localizedDescription) - } - } - call.resolve(["success": downloaded]) - } - - func appendUndownloadedFile(at url: URL){ - var lastPathComponent = url.lastPathComponent - lastPathComponent.removeFirst() - let dirPath = url.deletingLastPathComponent().path - let filePath = dirPath + "/" + lastPathComponent.replacingOccurrences(of: ".icloud", with: "") - let neededToHandle = !extensions.allSatisfy{ !filePath.hasSuffix($0) } - - if neededToHandle { - filesNeededToDownload.insert(filePath) - } - } - - func downloadAllFilesFromCloud(at url: URL, ignorePattern ignores: [String] = []) throws -> Bool { - - let files = try fileManager.contentsOfDirectory(at: url, includingPropertiesForKeys: nil, options: []) - - for file in files { - if file.pathExtension.lowercased() == "icloud" { - do { - try fileManager.startDownloadingUbiquitousItem(at: file) - appendUndownloadedFile(at: file) - } catch { - print("Unexpected error: \(error).") - } - - } else { - if fileManager.fileExists(atPath: file.path, isDirectory:&isDirectory) { - if isDirectory.boolValue && !ignores.contains(file.lastPathComponent) { - if try downloadAllFilesFromCloud(at: file, ignorePattern: ignores) { - downloaded = true - } - } - } - } - } - - return downloaded - } - - - func handleDownloadFolder() { - for file in filesNeededToDownload { - if fileManager.fileExists(atPath: file) { - filesNeededToDownload.remove(file) - } - } - } - - func handleDownloadFolderLoop () { - while !filesNeededToDownload.isEmpty { - let count = filesNeededToDownload.count - let interval = min(Double(count) * 0.1, 2) - Thread.sleep(forTimeInterval: interval) - handleDownloadFolder() - } - } -} diff --git a/ios/App/App/FileContainer.swift b/ios/App/App/FileContainer.swift index 6e8fbd0dc5..3260a13823 100644 --- a/ios/App/App/FileContainer.swift +++ b/ios/App/App/FileContainer.swift @@ -11,17 +11,26 @@ import MobileCoreServices @objc(FileContainer) public class FileContainer: CAPPlugin, UIDocumentPickerDelegate { - public var _call: CAPPluginCall? = nil - - var containerUrl: URL? { + var iCloudContainerUrl: URL? { return FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") } + + var localContainerUrl: URL? { + return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first + } @objc func ensureDocuments(_ call: CAPPluginCall) { - self._call = call - - // check for container existence - if let url = self.containerUrl, !FileManager.default.fileExists(atPath: url.path, isDirectory: nil) { + + validateDocuments(at: self.iCloudContainerUrl!) + validateDocuments(at: self.localContainerUrl!) + + call.resolve(["path": [self.iCloudContainerUrl?.path as Any, + self.localContainerUrl?.path as Any]]) + } + + func validateDocuments(at url: URL) { + + if !FileManager.default.fileExists(atPath: url.path, isDirectory: nil) { do { print("the url = " + url.path) try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil) @@ -31,20 +40,19 @@ public class FileContainer: CAPPlugin, UIDocumentPickerDelegate { print(error.localizedDescription) } } + let str = "" - guard let filename = self.containerUrl?.appendingPathComponent(".logseq") else { - return - } + let filename = url.appendingPathComponent(".logseq", isDirectory: false) if !FileManager.default.fileExists(atPath: filename.path) { do { try str.write(to: filename, atomically: true, encoding: String.Encoding.utf8) } catch { - // failed to write file – bad permissions, bad filename, missing permissions, or more likely it can't be converted to the encoding + print("write .logseq failed") + print(error.localizedDescription) } } - self._call?.resolve(["path": self.containerUrl?.path as Any]) } } diff --git a/libs/package.json b/libs/package.json index 0ad0b4254a..0872aea22c 100644 --- a/libs/package.json +++ b/libs/package.json @@ -1,6 +1,6 @@ { "name": "@logseq/libs", - "version": "0.0.6", + "version": "0.0.7", "description": "Logseq SDK libraries", "main": "dist/lsplugin.user.js", "typings": "index.d.ts", @@ -15,9 +15,9 @@ "fix": "prettier --write \"src/**/*.{ts, js}\"" }, "dependencies": { - "csstype": "3.0.8", - "debug": "4.3.1", - "dompurify": "2.3.1", + "csstype": "3.1.0", + "debug": "4.3.4", + "dompurify": "2.3.8", "eventemitter3": "4.0.7", "fast-deep-equal": "3.1.3", "lodash-es": "4.17.21", @@ -26,14 +26,14 @@ }, "devDependencies": { "@types/debug": "^4.1.5", - "@types/dompurify": "^2.2.1", - "@types/lodash-es": "^4.17.4", + "@types/dompurify": "2.3.3", + "@types/lodash-es": "4.17.6", "prettier": "^2.6.2", "prettier-config-standard": "^5.0.0", - "ts-loader": "^8.0.17", - "typescript": "^4.2.2", - "webpack": "^5.24.3", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-cli": "^4.5.0" + "ts-loader": "9.3.0", + "typescript": "4.7.3", + "webpack": "5.73.0", + "webpack-bundle-analyzer": "4.5.0", + "webpack-cli": "4.9.2" } } diff --git a/libs/src/LSPlugin.caller.ts b/libs/src/LSPlugin.caller.ts index cf607ed06f..8d57550593 100644 --- a/libs/src/LSPlugin.caller.ts +++ b/libs/src/LSPlugin.caller.ts @@ -281,7 +281,7 @@ class LSPluginCaller extends EventEmitter { }) this._call = async (...args: any) => { - // parent all will get message before handshaked + // parent all will get message before handshake await refChild.call(LSPMSGFn(pl.id), { type: args[0], payload: Object.assign(args[1] || {}, { diff --git a/libs/src/LSPlugin.core.ts b/libs/src/LSPlugin.core.ts index 69ece824b9..2da1f5da5c 100644 --- a/libs/src/LSPlugin.core.ts +++ b/libs/src/LSPlugin.core.ts @@ -1126,7 +1126,7 @@ class LSPluginCore | 'registered' | 'error' | 'unregistered' - | 'theme-changed' + | 'themes-changed' | 'theme-selected' | 'reset-custom-theme' | 'settings-changed' @@ -1510,7 +1510,7 @@ class LSPluginCore } themes.push(opt) - this.emit('theme-changed', this.themes, { id, ...opt }) + this.emit('themes-changed', this.themes, { id, ...opt }) } async selectTheme( @@ -1571,7 +1571,7 @@ class LSPluginCore } this._registeredThemes.delete(id) - this.emit('theme-changed', this.themes, { id }) + this.emit('themes-changed', this.themes, { id }) if (effect && this._currentTheme?.pid === id) { this._currentTheme.eject() this._currentTheme = null diff --git a/libs/src/LSPlugin.ts b/libs/src/LSPlugin.ts index a93664d450..79df97694c 100644 --- a/libs/src/LSPlugin.ts +++ b/libs/src/LSPlugin.ts @@ -4,6 +4,9 @@ import EventEmitter from 'eventemitter3' import { LSPluginCaller } from './LSPlugin.caller' import { LSPluginExperiments } from './modules/LSPlugin.Experiments' import { LSPluginFileStorage } from './modules/LSPlugin.Storage' +import { LSPluginRequest } from './modules/LSPlugin.Request' + +export type WithOptional = Omit & Partial>; export type PluginLocalIdentity = string @@ -407,6 +410,7 @@ export interface IAppProxy { // hook events onCurrentGraphChanged: IUserHook onThemeModeChanged: IUserHook<{ mode: 'dark' | 'light' }> + onThemeChanged: IUserHook> onBlockRendererSlotted: IUserSlotHook<{ uuid: BlockUUID }> /** @@ -948,6 +952,7 @@ export interface ILSPluginUser extends EventEmitter { Git: IGitProxy UI: IUIProxy + Request: LSPluginRequest FileStorage: LSPluginFileStorage Experiments: LSPluginExperiments } diff --git a/libs/src/LSPlugin.user.ts b/libs/src/LSPlugin.user.ts index 6dcd3ae967..cb86e22cb6 100644 --- a/libs/src/LSPlugin.user.ts +++ b/libs/src/LSPlugin.user.ts @@ -39,6 +39,7 @@ import * as CSS from 'csstype' import EventEmitter from 'eventemitter3' import { LSPluginFileStorage } from './modules/LSPlugin.Storage' import { LSPluginExperiments } from './modules/LSPlugin.Experiments' +import { LSPluginRequest } from './modules/LSPlugin.Request' declare global { interface Window { @@ -318,8 +319,7 @@ const KEY_MAIN_UI = 0 */ export class LSPluginUser extends EventEmitter - implements ILSPluginUser -{ + implements ILSPluginUser { // @ts-ignore private _version: string = LIB_VERSION private _debugTag: string = '' @@ -333,6 +333,7 @@ export class LSPluginUser private _ui = new Map() private _mFileStorage: LSPluginFileStorage + private _mRequest: LSPluginRequest private _mExperiments: LSPluginExperiments /** @@ -673,6 +674,12 @@ export class LSPluginUser return m } + get Request(): LSPluginRequest { + let m = this._mRequest + if (!m) m = this._mRequest = new LSPluginRequest(this) + return m + } + get Experiments(): LSPluginExperiments { let m = this._mExperiments if (!m) m = this._mExperiments = new LSPluginExperiments(this) diff --git a/libs/src/modules/LSPlugin.Experiments.ts b/libs/src/modules/LSPlugin.Experiments.ts index b1bea9af7e..4e32bf370c 100644 --- a/libs/src/modules/LSPlugin.Experiments.ts +++ b/libs/src/modules/LSPlugin.Experiments.ts @@ -24,7 +24,7 @@ export class LSPluginExperiments { ) } - private invokeExperMethod(type: string, ...args: Array) { + public invokeExperMethod(type: string, ...args: Array) { const host = this.ensureHostScope() type = safeSnakeCase(type)?.toLowerCase() return host.logseq.api['exper_' + type]?.apply(host, args) diff --git a/libs/src/modules/LSPlugin.Request.ts b/libs/src/modules/LSPlugin.Request.ts new file mode 100644 index 0000000000..b2ba039e98 --- /dev/null +++ b/libs/src/modules/LSPlugin.Request.ts @@ -0,0 +1,145 @@ +import { LSPluginUser, WithOptional } from '../LSPlugin.user' +import { EventEmitter } from 'eventemitter3' + +export type IRequestOptions = { + url: string + abortable: boolean + headers: Record + method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' + data: Object | ArrayBuffer + timeout: number + returnType: 'json' | 'text' | 'base64' | 'arraybuffer' + success: (result: R) => void + fail: (err: any) => void + final: () => void +} + +export type RequestTaskID = string | number + +const CLIENT_MSG_CALLBACK = '#lsp#request#callback' +const genTaskCallbackType = (id: RequestTaskID) => `task_callback_${id}` + +/** + * Request task + */ +export class LSPluginRequestTask { + private readonly _promise: Promise + private _aborted: boolean = false + + constructor( + private _client: LSPluginRequest, + private _requestId: RequestTaskID, + private _requestOptions: Partial = {} + ) { + + this._promise = new Promise((resolve, reject) => { + if (!this._requestId) { + return reject(null) + } + + // task result listener + this._client.once( + genTaskCallbackType(this._requestId), + (e) => { + if (e && e instanceof Error) { + reject(e) + } else { + resolve(e) + } + } + ) + }) + + const { success, fail, final } = this._requestOptions + + this._promise + .then((res) => { + success?.(res) + }) + .catch((e) => { + fail?.(e) + }) + .finally(() => { + final?.() + }) + } + + abort() { + if ( + !this._requestOptions.abortable || + this._aborted + ) return + + this._client.ctx._execCallableAPI( + 'http_request_abort', + this._requestId + ) + + this._aborted = true + } + + get promise(): Promise { + return this._promise + } + + get client(): LSPluginRequest { + return this._client + } + + get requestId(): RequestTaskID { + return this._requestId + } +} + +/** + * A simple request client + */ +export class LSPluginRequest extends EventEmitter { + constructor(private _ctx: LSPluginUser) { + super() + + // request callback listener + this.ctx.caller.on( + CLIENT_MSG_CALLBACK, + (e: any) => { + const reqId = e?.requestId + if (!reqId) return + + this.emit(genTaskCallbackType(reqId), e?.payload) + } + ) + } + + static createRequestTask( + client: LSPluginRequest, + requestID: RequestTaskID, + requestOptions: Partial + ) { + return new LSPluginRequestTask( + client, requestID, requestOptions + ) + } + + async _request, keyof Omit>>(options: T): + Promise ? LSPluginRequestTask : R> { + const pid = this.ctx.baseInfo.id + const { success, fail, final, ...requestOptions } = options + const reqID = this.ctx.Experiments.invokeExperMethod('request', pid, requestOptions) + + const task = LSPluginRequest.createRequestTask( + this.ctx.Request, + reqID, options + ) + + if (!requestOptions.abortable) { + return task.promise + } + + return task as any + } + + get ctx(): LSPluginUser { + return this._ctx + } +} \ No newline at end of file diff --git a/libs/yarn.lock b/libs/yarn.lock index 63350b01b5..24cac4217d 100644 --- a/libs/yarn.lock +++ b/libs/yarn.lock @@ -19,17 +19,17 @@ dependencies: "@types/ms" "*" -"@types/dompurify@^2.2.1": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.2.3.tgz#6e89677a07902ac1b6821c345f34bd85da239b08" - integrity sha512-CLtc2mZK8+axmrz1JqtpklO/Kvn38arGc8o1l3UVopZaXXuer9ONdZwJ/9f226GrhRLtUmLr9WrvZsRSNpS8og== +"@types/dompurify@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.3.3.tgz#c24c92f698f77ed9cc9d9fa7888f90cf2bfaa23f" + integrity sha512-nnVQSgRVuZ/843oAfhA25eRSNzUFcBPk/LOiw5gm8mD9/X7CNcbRkQu/OsjCewO8+VIYfPxUnXvPEVGenw14+w== dependencies: "@types/trusted-types" "*" -"@types/eslint-scope@^3.7.0": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" - integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g== +"@types/eslint-scope@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" + integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== dependencies: "@types/eslint" "*" "@types/estree" "*" @@ -42,20 +42,25 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^0.0.50": +"@types/estree@*": version "0.0.50" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + "@types/json-schema@*", "@types/json-schema@^7.0.8": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== -"@types/lodash-es@^4.17.4": - version "4.17.4" - resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.4.tgz#b2e440d2bf8a93584a9fd798452ec497986c9b97" - integrity sha512-BBz79DCJbD2CVYZH67MBeHZRX++HF+5p8Mo5MzjZi64Wac39S3diedJYHZtScbRVf4DjZyN6LzA0SB0zy+HSSQ== +"@types/lodash-es@4.17.6": + version "4.17.6" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" + integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== dependencies: "@types/lodash" "*" @@ -200,22 +205,22 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.4.tgz#f03ce6311c0883a83d04569e2c03c6238316d2aa" - integrity sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ== +"@webpack-cli/configtest@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356" + integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg== -"@webpack-cli/info@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.3.0.tgz#9d78a31101a960997a4acd41ffd9b9300627fe2b" - integrity sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w== +"@webpack-cli/info@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea" + integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA== dependencies: envinfo "^7.7.3" -"@webpack-cli/serve@^1.5.2": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.5.2.tgz#ea584b637ff63c5a477f6f21604b5a205b72c9ec" - integrity sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw== +"@webpack-cli/serve@^1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" + integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -264,11 +269,6 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - braces@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -331,31 +331,26 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1, colorette@^1.3.0: +colorette@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== +colorette@^2.0.14: + version "2.0.17" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.17.tgz#5dd4c0d15e2984b7433cb4a9f2ead45063b80c47" + integrity sha512-hJo+3Bkn0NCHybn9Tu35fIeoOKGOk5OCC32y4Hz2It+qlCO2Q3DeQ1hRn/tDDMQKRYUEzqsl7jbF6dYKjlE60g== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -commander@^7.0.0: +commander@^7.0.0, commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -365,22 +360,22 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -csstype@3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" - integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== +csstype@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== -debug@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== +debug@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -dompurify@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.1.tgz#a47059ca21fd1212d3c8f71fdea6943b8bfbdf6a" - integrity sha512-xGWt+NHAQS+4tpgbOAI08yxW0Pr256Gu/FNE2frZVTbgrBUn8M7tz7/ktS/LZ2MHeGqz6topj0/xY+y8R5FBFw== +dompurify@2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.8.tgz#224fe9ae57d7ebd9a1ae1ac18c1c1ca3f532226f" + integrity sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw== dot-case@^3.0.4: version "3.0.4" @@ -400,24 +395,10 @@ electron-to-chromium@^1.3.811: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.814.tgz#418fad80c3276a46103ca72a21a8290620d83c4a" integrity sha512-0mH03cyjh6OzMlmjauGg0TLd87ErIJqWiYxMcOLKf5w6p0YEOl7DJAj7BDlXEFmCguY5CQaKVOiMjAMODO2XDw== -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -enhanced-resolve@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enhanced-resolve@^5.8.0: - version "5.8.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" - integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== +enhanced-resolve@^5.0.0, enhanced-resolve@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" + integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -427,17 +408,10 @@ envinfo@^7.7.3: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== -errno@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -es-module-lexer@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.7.1.tgz#c2c8e0f46f2df06274cdaf0dd3f3b33e0a0b267d" - integrity sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw== +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== escalade@^3.1.1: version "3.1.1" @@ -544,6 +518,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + gzip-size@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" @@ -581,11 +560,6 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - interpret@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" @@ -615,11 +589,6 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -639,23 +608,16 @@ jest-worker@^27.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -666,15 +628,6 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -706,14 +659,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -749,11 +694,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimist@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -867,21 +807,11 @@ prettier@^2.6.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - process@^0.11.1: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -894,19 +824,6 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -readable-stream@^2.0.1: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - rechoir@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" @@ -939,11 +856,6 @@ safe-buffer@^5.1.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - schema-utils@^3.0.0, schema-utils@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" @@ -1026,13 +938,6 @@ source-map@~0.7.2: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -1052,11 +957,6 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - tapable@^2.1.1, tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" @@ -1095,14 +995,13 @@ totalist@^1.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== -ts-loader@^8.0.17: - version "8.3.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.3.0.tgz#83360496d6f8004fab35825279132c93412edf33" - integrity sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag== +ts-loader@9.3.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.3.0.tgz#980f4dbfb60e517179e15e10ed98e454b132159f" + integrity sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog== dependencies: chalk "^4.1.0" - enhanced-resolve "^4.0.0" - loader-utils "^2.0.0" + enhanced-resolve "^5.0.0" micromatch "^4.0.0" semver "^7.3.4" @@ -1111,10 +1010,10 @@ tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -typescript@^4.2.2: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== +typescript@4.7.3: + version "4.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d" + integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA== uri-js@^4.2.2: version "4.4.1" @@ -1123,11 +1022,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - util@^0.10.3: version "0.10.4" resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" @@ -1135,51 +1029,45 @@ util@^0.10.3: dependencies: inherits "2.0.3" -v8-compile-cache@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -watchpack@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" - integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== +watchpack@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webpack-bundle-analyzer@^4.4.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz#39898cf6200178240910d629705f0f3493f7d666" - integrity sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ== +webpack-bundle-analyzer@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" + integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== dependencies: acorn "^8.0.4" acorn-walk "^8.0.0" chalk "^4.1.0" - commander "^6.2.0" + commander "^7.2.0" gzip-size "^6.0.0" lodash "^4.17.20" opener "^1.5.2" sirv "^1.0.7" ws "^7.3.1" -webpack-cli@^4.5.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.8.0.tgz#5fc3c8b9401d3c8a43e2afceacfa8261962338d1" - integrity sha512-+iBSWsX16uVna5aAYN6/wjhJy1q/GKk4KjKvfg90/6hykCTSgozbfz5iRgDTSJt/LgSbYxdBX3KBHeobIs+ZEw== +webpack-cli@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d" + integrity sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.4" - "@webpack-cli/info" "^1.3.0" - "@webpack-cli/serve" "^1.5.2" - colorette "^1.2.1" + "@webpack-cli/configtest" "^1.1.1" + "@webpack-cli/info" "^1.4.1" + "@webpack-cli/serve" "^1.6.1" + colorette "^2.0.14" commander "^7.0.0" execa "^5.0.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" interpret "^2.2.0" rechoir "^0.7.0" - v8-compile-cache "^2.2.0" webpack-merge "^5.7.3" webpack-merge@^5.7.3: @@ -1190,18 +1078,18 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.0.tgz#b16973bcf844ebcdb3afde32eda1c04d0b90f89d" - integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.24.3: - version "5.51.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.51.1.tgz#41bebf38dccab9a89487b16dbe95c22e147aac57" - integrity sha512-xsn3lwqEKoFvqn4JQggPSRxE4dhsRcysWTqYABAZlmavcoTmwlOb9b1N36Inbt/eIispSkuHa80/FJkDTPos1A== +webpack@5.73.0: + version "5.73.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" + integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.50" + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" @@ -1209,21 +1097,21 @@ webpack@^5.24.3: acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.0" - es-module-lexer "^0.7.1" + enhanced-resolve "^5.9.3" + es-module-lexer "^0.9.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" - json-parse-better-errors "^1.0.2" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" schema-utils "^3.1.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.3" - watchpack "^2.2.0" - webpack-sources "^3.2.0" + watchpack "^2.3.1" + webpack-sources "^3.2.3" which@^2.0.1: version "2.0.2" diff --git a/resources/js/lsplugin.core.js b/resources/js/lsplugin.core.js index e1abc0f0d1..a4c621253c 100644 --- a/resources/js/lsplugin.core.js +++ b/resources/js/lsplugin.core.js @@ -1,2 +1,2 @@ /*! For license information please see lsplugin.core.js.LICENSE.txt */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.LSPlugin=t():e.LSPlugin=t()}(self,(function(){return(()=>{var e={227:(e,t,n)=>{var r=n(155);t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let r=0,i=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(r++,"%c"===e&&(i=r))})),t.splice(i,0,n)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&void 0!==r&&"env"in r&&(e=r.env.DEBUG),e},t.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=n(447)(t);const{formatters:i}=e.exports;i.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},447:(e,t,n)=>{e.exports=function(e){function t(e){let n,i=null;function o(...e){if(!o.enabled)return;const r=o,i=Number(new Date),s=i-(n||i);r.diff=s,r.prev=n,r.curr=i,n=i,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let a=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,i)=>{if("%%"===n)return"%";a++;const o=t.formatters[i];if("function"==typeof o){const t=e[a];n=o.call(r,t),e.splice(a,1),a--}return n})),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return o.namespace=e,o.useColors=t.useColors(),o.color=t.selectColor(e),o.extend=r,o.destroy=t.destroy,Object.defineProperty(o,"enabled",{enumerable:!0,configurable:!1,get:()=>null===i?t.enabled(e):i,set:e=>{i=e}}),"function"==typeof t.init&&t.init(o),o}function r(e,n){const r=t(this.namespace+(void 0===n?":":n)+e);return r.log=this.log,r}function i(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){const e=[...t.names.map(i),...t.skips.map(i).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let n;t.save(e),t.names=[],t.skips=[];const r=("string"==typeof e?e:"").split(/[\s,]+/),i=r.length;for(n=0;n{t[n]=e[n]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let n=0;for(let t=0;t1?n-1:0),i=1;i/gm),U=s(/^data-[\-\w.\u00B7-\uFFFF]/),$=s(/^aria-[\-\w]+$/),z=s(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),H=s(/^(?:\w+script|data):/i),B=s(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:G(),n=function(t){return e(t)};if(n.version="2.3.1",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var r=t.document,i=t.document,s=t.DocumentFragment,a=t.HTMLTemplateElement,c=t.Node,l=t.Element,u=t.NodeFilter,d=t.NamedNodeMap,x=void 0===d?t.NamedNodeMap||t.MozNamedAttrMap:d,Z=t.Text,K=t.Comment,V=t.DOMParser,Y=t.trustedTypes,X=l.prototype,Q=O(X,"cloneNode"),ee=O(X,"nextSibling"),te=O(X,"childNodes"),ne=O(X,"parentNode");if("function"==typeof a){var re=i.createElement("template");re.content&&re.content.ownerDocument&&(i=re.content.ownerDocument)}var ie=J(Y,r),oe=ie&&De?ie.createHTML(""):"",se=i,ae=se.implementation,ce=se.createNodeIterator,le=se.createDocumentFragment,ue=se.getElementsByTagName,de=r.importNode,he={};try{he=C(i).documentMode?i.documentMode:{}}catch(e){}var pe={};n.isSupported="function"==typeof ne&&ae&&void 0!==ae.createHTMLDocument&&9!==he;var fe=D,ge=N,me=U,ye=$,_e=H,ve=B,be=z,we=null,xe=S({},[].concat(q(A),q(E),q(j),q(k),q(I))),Se=null,Ce=S({},[].concat(q(F),q(P),q(R),q(M))),Oe=null,Ae=null,Ee=!0,je=!0,Te=!1,ke=!1,Le=!1,Ie=!1,Fe=!1,Pe=!1,Re=!1,Me=!0,De=!1,Ne=!0,Ue=!0,$e=!1,ze={},He=null,Be=S({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),We=null,qe=S({},["audio","video","img","source","image","track"]),Ge=null,Je=S({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ze="http://www.w3.org/1998/Math/MathML",Ke="http://www.w3.org/2000/svg",Ve="http://www.w3.org/1999/xhtml",Ye=Ve,Xe=!1,Qe=null,et=i.createElement("form"),tt=function(e){Qe&&Qe===e||(e&&"object"===(void 0===e?"undefined":W(e))||(e={}),e=C(e),we="ALLOWED_TAGS"in e?S({},e.ALLOWED_TAGS):xe,Se="ALLOWED_ATTR"in e?S({},e.ALLOWED_ATTR):Ce,Ge="ADD_URI_SAFE_ATTR"in e?S(C(Je),e.ADD_URI_SAFE_ATTR):Je,We="ADD_DATA_URI_TAGS"in e?S(C(qe),e.ADD_DATA_URI_TAGS):qe,He="FORBID_CONTENTS"in e?S({},e.FORBID_CONTENTS):Be,Oe="FORBID_TAGS"in e?S({},e.FORBID_TAGS):{},Ae="FORBID_ATTR"in e?S({},e.FORBID_ATTR):{},ze="USE_PROFILES"in e&&e.USE_PROFILES,Ee=!1!==e.ALLOW_ARIA_ATTR,je=!1!==e.ALLOW_DATA_ATTR,Te=e.ALLOW_UNKNOWN_PROTOCOLS||!1,ke=e.SAFE_FOR_TEMPLATES||!1,Le=e.WHOLE_DOCUMENT||!1,Pe=e.RETURN_DOM||!1,Re=e.RETURN_DOM_FRAGMENT||!1,Me=!1!==e.RETURN_DOM_IMPORT,De=e.RETURN_TRUSTED_TYPE||!1,Fe=e.FORCE_BODY||!1,Ne=!1!==e.SANITIZE_DOM,Ue=!1!==e.KEEP_CONTENT,$e=e.IN_PLACE||!1,be=e.ALLOWED_URI_REGEXP||be,Ye=e.NAMESPACE||Ve,ke&&(je=!1),Re&&(Pe=!0),ze&&(we=S({},[].concat(q(I))),Se=[],!0===ze.html&&(S(we,A),S(Se,F)),!0===ze.svg&&(S(we,E),S(Se,P),S(Se,M)),!0===ze.svgFilters&&(S(we,j),S(Se,P),S(Se,M)),!0===ze.mathMl&&(S(we,k),S(Se,R),S(Se,M))),e.ADD_TAGS&&(we===xe&&(we=C(we)),S(we,e.ADD_TAGS)),e.ADD_ATTR&&(Se===Ce&&(Se=C(Se)),S(Se,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&S(Ge,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&(He===Be&&(He=C(He)),S(He,e.FORBID_CONTENTS)),Ue&&(we["#text"]=!0),Le&&S(we,["html","head","body"]),we.table&&(S(we,["tbody"]),delete Oe.tbody),o&&o(e),Qe=e)},nt=S({},["mi","mo","mn","ms","mtext"]),rt=S({},["foreignobject","desc","title","annotation-xml"]),it=S({},E);S(it,j),S(it,T);var ot=S({},k);S(ot,L);var st=function(e){var t=ne(e);t&&t.tagName||(t={namespaceURI:Ve,tagName:"template"});var n=g(e.tagName),r=g(t.tagName);if(e.namespaceURI===Ke)return t.namespaceURI===Ve?"svg"===n:t.namespaceURI===Ze?"svg"===n&&("annotation-xml"===r||nt[r]):Boolean(it[n]);if(e.namespaceURI===Ze)return t.namespaceURI===Ve?"math"===n:t.namespaceURI===Ke?"math"===n&&rt[r]:Boolean(ot[n]);if(e.namespaceURI===Ve){if(t.namespaceURI===Ke&&!rt[r])return!1;if(t.namespaceURI===Ze&&!nt[r])return!1;var i=S({},["title","style","font","a","script"]);return!ot[n]&&(i[n]||!it[n])}return!1},at=function(e){f(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=oe}catch(t){e.remove()}}},ct=function(e,t){try{f(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){f(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!Se[e])if(Pe||Re)try{at(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},lt=function(e){var t=void 0,n=void 0;if(Fe)e=""+e;else{var r=m(e,/^[\r\n\t ]+/);n=r&&r[0]}var o=ie?ie.createHTML(e):e;if(Ye===Ve)try{t=(new V).parseFromString(o,"text/html")}catch(e){}if(!t||!t.documentElement){t=ae.createDocument(Ye,"template",null);try{t.documentElement.innerHTML=Xe?"":o}catch(e){}}var s=t.body||t.documentElement;return e&&n&&s.insertBefore(i.createTextNode(n),s.childNodes[0]||null),Ye===Ve?ue.call(t,Le?"html":"body")[0]:Le?t.documentElement:s},ut=function(e){return ce.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT,null,!1)},dt=function(e){return!(e instanceof Z||e instanceof K||"string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof x&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute&&"string"==typeof e.namespaceURI&&"function"==typeof e.insertBefore)},ht=function(e){return"object"===(void 0===c?"undefined":W(c))?e instanceof c:e&&"object"===(void 0===e?"undefined":W(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},pt=function(e,t,r){pe[e]&&h(pe[e],(function(e){e.call(n,t,r,Qe)}))},ft=function(e){var t=void 0;if(pt("beforeSanitizeElements",e,null),dt(e))return at(e),!0;if(m(e.nodeName,/[\u0080-\uFFFF]/))return at(e),!0;var r=g(e.nodeName);if(pt("uponSanitizeElement",e,{tagName:r,allowedTags:we}),!ht(e.firstElementChild)&&(!ht(e.content)||!ht(e.content.firstElementChild))&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return at(e),!0;if("select"===r&&b(/