diff --git a/projects/kiss-vscode-api/src/KissUtil.kiss b/projects/kiss-vscode-api/src/KissUtil.kiss new file mode 100644 index 00000000..024bc1bf --- /dev/null +++ b/projects/kiss-vscode-api/src/KissUtil.kiss @@ -0,0 +1,20 @@ +(var interp (new kiss.KissInterp)) + +(function :Void prepareInterp [] + (set .printStr (dictGet interp.variables "Prelude") ->s (infoMessage s)) + (interp.variables.set "Vscode" Vscode) + (interp.variables.set "Std" + (object + parseInt Std.parseInt + string Std.string + random Std.random + int Std.int))) + +// TODO pass macros and aliases from Util.kiss to the KissState of "eval kiss expression" +(function :Dynamic evalString [:String kissStr] + (once (prepareInterp)) + (try + (interp.evalKiss kissStr) + (catch [e] + (errorMessage "Error `${e}` from $kissStr") + null))) \ No newline at end of file diff --git a/projects/kiss-vscode-api/src/Util.kiss b/projects/kiss-vscode-api/src/Util.kiss index eeb9e465..b5fca90b 100644 --- a/projects/kiss-vscode-api/src/Util.kiss +++ b/projects/kiss-vscode-api/src/Util.kiss @@ -19,207 +19,283 @@ (,onError "result status is null from $command ${args}: $result.stdout $result.stderr") null))))) -(#unless test - /** - * Aliases - */ +/** +* Aliases +*/ - // output - (defAlias &call infoMessage Vscode.window.showInformationMessage) - (defAlias &call warningMessage Vscode.window.showWarningMessage) - (defAlias &call errorMessage Vscode.window.showErrorMessage) +// output +(defAlias &call infoMessage Vscode.window.showInformationMessage) +(defAlias &call warningMessage Vscode.window.showWarningMessage) +(defAlias &call errorMessage Vscode.window.showErrorMessage) - // input - (defAlias &call inputBox Vscode.window.showInputBox) - (defAlias &call _quickPick Vscode.window.showQuickPick) +// input +(defAlias &call inputBox Vscode.window.showInputBox) +(defAlias &call _quickPick Vscode.window.showQuickPick) - (function quickPickItem [label &opt description] - (object - label label - description description - detail null - picked null - alwaysShow null)) +(function quickPickItem [label &opt description] + (object + label label + description description + detail null + picked null + alwaysShow null)) - (function quickPick [:Array strings] - (awaitLet [chosenItem (_quickPick (for string strings (quickPickItem string)))] - (when chosenItem chosenItem.label))) +(function quickPick [:Array strings] + (awaitLet [chosenItem (_quickPick (for string strings (quickPickItem string)))] + (when chosenItem chosenItem.label))) - // thanks https://stackoverflow.com/a/69842249 - (function autoSuggestPick [:Array strings] - (new js.lib.Promise - ->[resolve reject] (let [qp (Vscode.window.createQuickPick) - :Array items (for string strings (quickPickItem string))] - (set qp.items items) - (qp.onDidChangeValue - ->v (unlessLet [(Some _) (indexOf strings v)] - (set qp.items (concat [(quickPickItem v)] items)))) - (qp.onDidAccept - ->_ { - (resolve .label (first qp.activeItems)) - (qp.hide) - }) - (qp.show)))) +// thanks https://stackoverflow.com/a/69842249 +(function autoSuggestPick [:Array strings] + (new js.lib.Promise + ->[resolve reject] (let [qp (Vscode.window.createQuickPick) + :Array items (for string strings (quickPickItem string))] + (set qp.items items) + (qp.onDidChangeValue + ->v (unlessLet [(Some _) (indexOf strings v)] + (set qp.items (concat [(quickPickItem v)] items)))) + (qp.onDidAccept + ->_ { + (resolve .label (first qp.activeItems)) + (qp.hide) + }) + (qp.show)))) - (function :js.lib.Promise.Thenable quickPickMap [:Map stringMap] - (awaitLet [chosenItem (_quickPick (for =>key value stringMap (quickPickItem key (Std.string value))))] - (when chosenItem (dictGet stringMap chosenItem.label)))) +(function :js.lib.Promise.Thenable quickPickMap [:Map stringMap] + (awaitLet [chosenItem (_quickPick (for =>key value stringMap (quickPickItem key (Std.string value))))] + (when chosenItem (dictGet stringMap chosenItem.label)))) - (defAlias &call openDialog Vscode.window.showOpenDialog) +(defAlias &call openDialog Vscode.window.showOpenDialog) - // commands - (defAlias &call executeCommand Vscode.commands.executeCommand) - (function repeatCommand [command times] - (let [iteration - ->[&opt _] (executeCommand command) - &mut promise - (iteration)] - (doFor i (range (- times 1)) - (set promise (promise.then iteration))) - promise)) +// commands +(defAlias &call executeCommand Vscode.commands.executeCommand) +(function repeatCommand [command times] + (let [iteration + ->[&opt _] (executeCommand command) + &mut promise + (iteration)] + (doFor i (range (- times 1)) + (set promise (promise.then iteration))) + promise)) - (defMacro awaitCommands [commandsAndArgs &builder b &body body] - (let [commandsAndArgs - (if (isListExp commandsAndArgs) - (.copy (expList commandsAndArgs)) - (throw (CompileError.fromExp commandsAndArgs "First argument to awaitCommands should be a list of commands with optional argument arrays"))) - bindings []] - (while commandsAndArgs - (bindings.push (b.symbol "_")) - (let [nextCommand (commandsAndArgs.shift)] - (bindings.push (b.callSymbol "executeCommand" - (concat [nextCommand] (if (and commandsAndArgs (isListExp (first commandsAndArgs))) (expList (commandsAndArgs.shift)) [])))))) - `(awaitLet ,bindings ,@body))) +(defMacro awaitCommands [commandsAndArgs &builder b &body body] + (let [commandsAndArgs + (if (isListExp commandsAndArgs) + (.copy (expList commandsAndArgs)) + (throw (CompileError.fromExp commandsAndArgs "First argument to awaitCommands should be a list of commands with optional argument arrays"))) + bindings []] + (while commandsAndArgs + (bindings.push (b.symbol "_")) + (let [nextCommand (commandsAndArgs.shift)] + (bindings.push (b.callSymbol "executeCommand" + (concat [nextCommand] (if (and commandsAndArgs (isListExp (first commandsAndArgs))) (expList (commandsAndArgs.shift)) [])))))) + `(awaitLet ,bindings ,@body))) - // Other +// Other - (defAlias &call showTextDocument Vscode.window.showTextDocument) - (defAlias &call openTextDocument Vscode.workspace.openTextDocument) +(defAlias &call showTextDocument Vscode.window.showTextDocument) +(defAlias &call openTextDocument Vscode.workspace.openTextDocument) - // Macros for implementing commands in Kiss +// Macros for implementing commands in Kiss - (defMacro withValueOrInputBox [v &body body] - `{ - (if ,v - {,@body} - (awaitLet [,v (inputBox)] - ,@body)) - null - }) - - (defMacro withValueOrQuickPick [v options &body body] - `(if ,v +(defMacro withValueOrInputBox [v &body body] + `{ + (if ,v {,@body} - (awaitLet [,v (quickPick ,options)] - ,@body))) + (awaitLet [,v (inputBox)] + ,@body)) + null + }) - (defMacro withValueOrQuickPickMap [v options &body body] - `(if ,v +(defMacro withValueOrInputEditor [v filename prompt &body body] + `{ + (if ,v {,@body} - (awaitLet [,v (quickPickMap ,options)] - ,@body))) + (awaitLet [,v (inputEditor ,filename ,prompt)] + ,@body)) + null + }) - (function :Void chooseFileInDir [:String->Void openFile :Bool allowNew &opt :String dir] - (withValueOrInputBox dir - (set dir (dir.replace "\\" "/")) - (when (dir.endsWith "/") (set dir (substr dir 0 -1))) - (awaitLet [dirOrFile ((if allowNew autoSuggestPick quickPick) (cast (concat [".."] (sys.FileSystem.readDirectory dir))))] - (let [dirOrFile - (case dirOrFile - (".." - (substr dir 0 (dir.lastIndexOf "/"))) - (otherwise (joinPath dir dirOrFile)))] - (cond - ((sys.FileSystem.isDirectory dirOrFile) - (chooseFileInDir openFile allowNew dirOrFile)) - (true - (openFile dirOrFile))))))) +(defMacro withValueOrQuickPick [v options &body body] + `(if ,v + {,@body} + (awaitLet [,v (quickPick ,options)] + ,@body))) - (function :Void showCompileError [errorMessage] - (ifLet [compileErrors (R.distinctMatches - (R.group - (R.namedGroup "file" - (R.repeat (R.oneOf R.anyLetter R.anyDigit (R.escape "/")) 1) // filename - (R.escape ".kiss:") - (R.repeat R.anyDigit 1) // line - (R.escape ":") - (R.optional - (R.group - (R.repeat R.anyDigit 1) // column - (R.escape ":")))) - (R.repeat R.anyChar 1)) - errorMessage)] - { - (Vscode.window.showErrorMessage errorMessage) - (awaitLet [chosen (quickPickMap (for match compileErrors =>match.match match))] - (Vscode.window.showErrorMessage chosen.match) - (executeCommand "workbench.action.quickOpen" (substr (chosen.namedGroup "file") 0 -1))) - } - (Vscode.window.showErrorMessage errorMessage))) - - // Example: - /* - (defCommand myExt.customCommand "Custom command that does something" "C-; C-c" [] ) - */ - (defMacro defCommand [context id description shortcut argList &body body] - (let [id (symbolNameValue id) - description (eval description) - shortcut (eval shortcut) - shortcutWithHyphensProcessed - (StringTools.replace +(defMacro withValueOrQuickPickMap [v options &body body] + `(if ,v + {,@body} + (awaitLet [,v (quickPickMap ,options)] + ,@body))) + +(function :Void chooseFileInDir [:String->Void openFile :Bool allowNew &opt :String dir] + (withValueOrInputBox dir + (set dir (dir.replace "\\" "/")) + (when (dir.endsWith "/") (set dir (substr dir 0 -1))) + (awaitLet [dirOrFile ((if allowNew autoSuggestPick quickPick) (cast (concat [".."] (sys.FileSystem.readDirectory dir))))] + (let [dirOrFile + (case dirOrFile + (".." + (substr dir 0 (dir.lastIndexOf "/"))) + (otherwise (joinPath dir dirOrFile)))] + (cond + ((sys.FileSystem.isDirectory dirOrFile) + (chooseFileInDir openFile allowNew dirOrFile)) + (true + (openFile dirOrFile))))))) + +(function :Void showCompileError [errorMessage] + (ifLet [compileErrors (R.distinctMatches + (R.group + (R.namedGroup "file" + (R.repeat (R.oneOf R.anyLetter R.anyDigit (R.escape "/")) 1) // filename + (R.escape ".kiss:") + (R.repeat R.anyDigit 1) // line + (R.escape ":") + (R.optional + (R.group + (R.repeat R.anyDigit 1) // column + (R.escape ":")))) + (R.repeat R.anyChar 1)) + errorMessage)] + { + (Vscode.window.showErrorMessage errorMessage) + (awaitLet [chosen (quickPickMap (for match compileErrors =>match.match match))] + (Vscode.window.showErrorMessage chosen.match) + (executeCommand "workbench.action.quickOpen" (substr (chosen.namedGroup "file") 0 -1))) + } + (Vscode.window.showErrorMessage errorMessage))) + +// Example: +/* + (defCommand myExt.customCommand "Custom command that does something" "C-; C-c" [] ) +*/ +(defMacroVar extensionName "Kiss-Vscode") +(defMacro defCommand [context id description shortcut argList &body body] + (let [id (symbolNameValue id) + description (eval description) + shortcut (eval shortcut) + shortcutWithHyphensProcessed + (StringTools.replace + (StringTools.replace (StringTools.replace (StringTools.replace (StringTools.replace - (StringTools.replace - shortcut - "Cmd" "C") - "Ctrl" "C") - "--" "++") - "-" "+") - "++" "-+") - packageJson - (Json.parse (File.getContent "package.json")) - keybindings - packageJson.contributes.keybindings - commands - packageJson.contributes.commands - functionName - (symbol (StringTools.replace id "." "_")) - &mut keyBindingIndex null - &mut commandIndex null] - (doFor [idx binding] (enumerate keybindings) - (when (= binding.command id) - (set keyBindingIndex idx) - (break))) - (doFor [idx command] (enumerate commands) - (when (= command.command id) - (set commandIndex idx) - (break))) - // Manage the command entry in JSON - (unless commandIndex (set commandIndex commands.length)) - (setNth commands commandIndex - (object - command id - title description)) - // Manage the keybinding entry in JSON - (cond - (shortcut - (unless keyBindingIndex (set keyBindingIndex keybindings.length)) - (setNth keybindings keyBindingIndex - (object - command id - mac (StringTools.replace shortcutWithHyphensProcessed "C" "Cmd") - key (StringTools.replace shortcutWithHyphensProcessed "C" "Ctrl")))) - - // A binding element is in the JSON that needs to be removed: - (keyBindingIndex - (keybindings.splice keyBindingIndex 1))) - (File.saveContent "package.json" (Json.stringify packageJson null "\t")) - `{ - (function ,functionName ,argList - ,@body) - (.push .subscriptions ,context - (Vscode.commands.registerCommand - ,(ReaderExp.StrExp id ) - ,functionName)) - }))) \ No newline at end of file + shortcut + "Cmd" "C") + "Ctrl" "C") + "--" "++") + "-" "+") + "++" "-+") + packageJson + (Json.parse (File.getContent "package.json")) + keybindings + packageJson.contributes.keybindings + commands + packageJson.contributes.commands + functionName + (symbol (StringTools.replace id "." "_")) + &mut keyBindingIndex null + &mut commandIndex null] + (doFor [idx binding] (enumerate keybindings) + (when (= binding.command id) + (set keyBindingIndex idx) + (break))) + (doFor [idx command] (enumerate commands) + (when (= command.command id) + (set commandIndex idx) + (break))) + // Manage the command entry in JSON + (unless commandIndex (set commandIndex commands.length)) + (setNth commands commandIndex + (object + command id + title "${extensionName}: ${description}")) + // Manage the keybinding entry in JSON + (cond + (shortcut + (unless keyBindingIndex (set keyBindingIndex keybindings.length)) + (setNth keybindings keyBindingIndex + (object + command id + mac (StringTools.replace shortcutWithHyphensProcessed "C" "Cmd") + key (StringTools.replace shortcutWithHyphensProcessed "C" "Ctrl")))) + + // A binding element is in the JSON that needs to be removed: + (keyBindingIndex + (keybindings.splice keyBindingIndex 1))) + (File.saveContent "package.json" (Json.stringify packageJson null "\t")) + `{ + (function ,functionName ,argList + ,@body) + (.push .subscriptions ,context + (Vscode.commands.registerCommand + ,(ReaderExp.StrExp id ) + ,functionName)) + })) + +// ui +(defAlias &ident activeTextEditor Vscode.window.activeTextEditor) + +/** +* Helper functions +*/ +(function selectedText [] + (if (and activeTextEditor activeTextEditor.selection) + (let [document + activeTextEditor.document + selection + activeTextEditor.selection + range (new Range selection.start selection.end)] + (document.getText range)) + "")) + +(function insertAt [:vscode.Position pos text] + (activeTextEditor.edit + (lambda [e] + (e.insert pos text)))) + +(function insert [text] + (insertAt activeTextEditor.selection.active text)) + +// Way to more forgivingly get long text inputs +(function :js.lib.Promise inputEditor [:String filename :String prompt] + (let [previousEditor activeTextEditor + tempFile (joinPath (userHome) "Documents" filename) + uri (if (FileSystem.exists tempFile) + (Uri.parse "file:$tempFile") + (Uri.parse "untitled:$tempFile"))] + (new js.lib.Promise + ->[resolve reject] + (awaitLet [doc (openTextDocument uri) + _ (doc.save) + editor (showTextDocument doc)] + (print "Enter ${prompt}, then save and close this editor.") + (let [&mut :Disposable closeEvent null] + (set closeEvent + (Vscode.workspace.onDidCloseTextDocument + ->closedDoc + (when (= closedDoc.fileName doc.fileName) + (closeEvent.dispose) + (awaitLet [_ (showTextDocument previousEditor.document)] + (if editor.document.isDirty (let [error "Input editor for $prompt was closed without saving."] (warningMessage error) (reject error)) (resolve (editor.document.getText)))))))))))) + +// Open any folder in a fresh VSCode instance. +(function openFolder [folder] + (executeCommand "vscode.openFolder" (Uri.file folder))) + +// Open any file in the current VSCode window. +(function openFile [file] + (awaitLet [doc (Vscode.workspace.openTextDocument (Uri.file file))] + (Vscode.window.showTextDocument doc))) + +// Open any file through the operating system's default program. +(function :Void osOpenFile [&opt :String file] + (withValueOrInputBox file + (case (Sys.systemName) + ("Windows" (assertProcess "cmd.exe" ["/C" "start" file])) + ("Mac" (assertProcess "open" [file])) + ("Linux" (assertProcess "xdg-open" [file])) + (otherwise (throw "Unsupported operating system"))))) + +(function :Void osOpenFileInDir [&opt :String dir] + (chooseFileInDir osOpenFile false dir)) \ No newline at end of file diff --git a/projects/kiss-vscode/src/JSDomExterns.hx b/projects/kiss-vscode-api/src/kiss_vscode_api/JSDomExterns.hx similarity index 100% rename from projects/kiss-vscode/src/JSDomExterns.hx rename to projects/kiss-vscode-api/src/kiss_vscode_api/JSDomExterns.hx diff --git a/projects/kiss-vscode-api/src/kiss_vscode_api/QuickWebview.hx b/projects/kiss-vscode-api/src/kiss_vscode_api/QuickWebview.hx new file mode 100644 index 00000000..910ec7bd --- /dev/null +++ b/projects/kiss-vscode-api/src/kiss_vscode_api/QuickWebview.hx @@ -0,0 +1,11 @@ +package kiss_vscode_api; + +import js.html.Document; +import js.node.Timers; +import JSDomExterns; + +typedef QuickWebviewSetup = (Document) -> Void; +typedef QuickWebviewUpdate = (Document, Float, Function) -> Void; + +@:build(kiss.Kiss.build()) +class QuickWebview {} diff --git a/projects/kiss-vscode-api/src/kiss_vscode_api/QuickWebview.kiss b/projects/kiss-vscode-api/src/kiss_vscode_api/QuickWebview.kiss new file mode 100644 index 00000000..1719c24a --- /dev/null +++ b/projects/kiss-vscode-api/src/kiss_vscode_api/QuickWebview.kiss @@ -0,0 +1,16 @@ +// TODO provide for passing messages between webview and VSCode API +(function :WebviewPanel quickWebview [:String title :QuickWebviewSetup setup :QuickWebviewUpdate update &opt :ViewColumn column :Int fps] + (let [dom (new JSDOM "${title}") + document dom.window.document] + (setup document) + (let [panel (Vscode.window.createWebviewPanel "kissVscodeQuickWebview" title (or column ViewColumn.Beside) (object))] + (set panel.webview.html document.documentElement.innerHTML) + + // setInterval of the update function and allow for stopping it by disposing the panel or calling a close function passed to update + (let [&mut :Function close null + deltaMilli (/ 1000.0 (or fps 30)) + deltaSec (/ deltaMilli 1000) + interval (Timers.setInterval ->{(update document deltaSec close) (set panel.webview.html document.documentElement.innerHTML)}deltaMilli)] + (panel.onDidDispose ->e (Timers.clearInterval interval)) + (set close ->(panel.dispose))) + panel))) \ No newline at end of file diff --git a/projects/kiss-vscode/.gitignore b/projects/kiss-vscode/.gitignore index 9c5c2d02..9a4e1f73 100644 --- a/projects/kiss-vscode/.gitignore +++ b/projects/kiss-vscode/.gitignore @@ -1,5 +1,3 @@ -bin +bin/ *.vsix -_activeConfig/ -_lastActiveConfig/ node_modules/ \ No newline at end of file diff --git a/projects/kiss-vscode/.vscodeignore b/projects/kiss-vscode/.vscodeignore index 338fdf5b..ac846bcb 100644 --- a/projects/kiss-vscode/.vscodeignore +++ b/projects/kiss-vscode/.vscodeignore @@ -1,9 +1,6 @@ .vscode bin/*.map src -node_modules/ -!node_modules/monaco-editor/min/ build.hxml -_activeConfig/ -_lastActiveConfig/ -haxelib.json \ No newline at end of file +haxelib.json +test.sh \ No newline at end of file diff --git a/projects/kiss-vscode/build.hxml b/projects/kiss-vscode/build.hxml index 1f326399..5ffdf504 100644 --- a/projects/kiss-vscode/build.hxml +++ b/projects/kiss-vscode/build.hxml @@ -7,14 +7,9 @@ -lib kiss-tools -cp src -js bin/extension.js +-dce full -D analyzer-optimize -D js-es=6 -debug ---main Main ---next --lib kiss --lib kiss-vscode --lib re-flex --cp src --js bin/ktxt2editor.js ---main ktxt2.KTxt2Editor \ No newline at end of file +Main +-cmd npx vsce package \ No newline at end of file diff --git a/projects/kiss-vscode/config/KissConfig.hx b/projects/kiss-vscode/config/KissConfig.hx deleted file mode 100644 index 8bc608a8..00000000 --- a/projects/kiss-vscode/config/KissConfig.hx +++ /dev/null @@ -1,33 +0,0 @@ -package; - -import kiss.Kiss; -import kiss.Prelude; -import kiss.Stream; -import vscode.*; -import js.lib.Promise; -import js.node.ChildProcess; -import hscript.Parser; -import hscript.Interp; -import hscript.Expr; -import haxe.io.Path; -import sys.io.File; -import sys.FileSystem; -import ktxt2.KTxt2; -import re_flex.R; -import kiss_tools.KeyShortcutHandler; -import JSDomExterns; -import haxe.Constraints; -import js.html.Document; -import js.node.Timers; - -using haxe.io.Path; -using StringTools; - -typedef Command = (String) -> Void; - -typedef QuickWebviewSetup = (Document) -> Void; -typedef QuickWebviewUpdate = (Document, Float, Function) -> Void; - -@:expose -@:build(kiss.Kiss.buildAll(["KissConfig.kiss", "Config.kiss"])) -class KissConfig {} diff --git a/projects/kiss-vscode/config/KissConfig.kiss b/projects/kiss-vscode/config/KissConfig.kiss deleted file mode 100644 index b776ed3f..00000000 --- a/projects/kiss-vscode/config/KissConfig.kiss +++ /dev/null @@ -1,278 +0,0 @@ -(loadFrom "kiss-vscode-api" "src/Util.kiss") - -// ui -(defAlias &ident activeTextEditor Vscode.window.activeTextEditor) - -/** - * Helper functions - */ -(function selectedText [] - (if (and activeTextEditor activeTextEditor.selection) - (let [document - activeTextEditor.document - selection - activeTextEditor.selection - range (new Range selection.start selection.end)] - (document.getText range)) - "")) - -(function insertAt [:vscode.Position pos text] - (activeTextEditor.edit - (lambda [e] - (e.insert pos text)))) - -(function insert [text] - (insertAt activeTextEditor.selection.active text)) - -/** - * State - */ - -(var :Map commands (new Map)) -(var :KeyShortcutHandler shortcutHandler (new KeyShortcutHandler)) - -(var &mut :String lastCommand null) -(var parser (new Parser)) -(var interp (new Interp)) -(var &mut :String extensionPath "") - -/** - * Functionality - */ - -// TODO pass macros and aliases from Util.kiss to the KissState of "eval kiss expression" -(function :Dynamic evalString [:String kissStr] - (try - (interp.execute - (parser.parseString - (Prelude.convertToHScript kissStr))) - (catch [e] - (errorMessage "Error `${e}` from $kissStr") - null))) - -(function :Void runCommand [&opt command] (_runCommand command)) - -(defMacro _runCommandFunc [commandName] - `(let [command ,commandName] - (set lastCommand command) - (try ((dictGet commands command) inputText) - (catch [error] (errorMessage "error from ${command}: $error") (return))))) - -(function :Void _runCommand [&opt command inputText] - (unless inputText (set inputText (selectedText))) - (if command - (_runCommandFunc command) - (awaitLet [chosenCommand (quickPick (collect (commands.keys)))] - (when chosenCommand - (_runCommandFunc chosenCommand))))) - -(function :Void runLastCommand [&opt _] - (if lastCommand - (runCommand lastCommand) - (errorMessage "No Kiss command was run previously."))) - -(var &mut :vscode.WebviewPanel shortcutPanel null) -(var &mut :vscode.TextDocument documentBeforeShortcut null) -(var &mut :String selectedTextBeforeShortcut null) -(var &mut :Disposable keyListener null) - -(function :Void cancelOrFinishShortcutPanel [] - (set documentBeforeShortcut null) - (set selectedTextBeforeShortcut null) - (closeShortcutPanel)) - -(function :Void closeShortcutPanel [] - (when shortcutPanel - (keyListener.dispose) - (shortcutPanel.dispose) - (set shortcutPanel null))) - -(function :Void runChosenCommand [:String command] - (if documentBeforeShortcut - (awaitLet [_ (Vscode.window.showTextDocument documentBeforeShortcut)] - (_runCommand command selectedTextBeforeShortcut)) - (_runCommand command selectedTextBeforeShortcut))) - -(function :Void showShortcutPanel [:PrefixMap prefixMap :Map strings] - // Preserve the selected text and focused document before opening the webview: - (whenLet [text (selectedText)] (set selectedTextBeforeShortcut text)) - (when activeTextEditor - (set documentBeforeShortcut activeTextEditor.document)) - - (closeShortcutPanel) - (set shortcutPanel (Vscode.window.createWebviewPanel - "kissShortcut" - "Kiss Shortcuts" - vscode.ViewColumn.Two - (object - enableScripts true))) - (set keyListener - (shortcutPanel.webview.onDidReceiveMessage - ->:Void key (shortcutHandler.handleKey (the String key)))) - (set shortcutPanel.webview.html (shortcutPanelHtml strings)) - (shortcutPanel.webview.postMessage (object command "focus"))) - -(function shortcutPanelHtml [:Map keys] - (let [&mut unusedKeys "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-/" - shortcutParagraphs - (for =>key rep keys - (set unusedKeys (unusedKeys.replace key "")) - "

${key} - ${rep}

")] - " - - - - - Kiss Shortcuts - - - $(shortcutParagraphs.join "") -

unused: ${unusedKeys}

- - - ")) - -(function :Void runKeyboardShortcut [&opt _] - (shortcutHandler.start)) - -// Register a VSCode command (built-in, or from an extension) -(function registerExistingCommand [description command] - (registerCommand description (lambda :Void [&opt _] (executeCommand command)))) - -(loadFrom "kiss-vscode" "src/commands/KissTools.kiss") -(loadFrom "kiss-vscode" "src/commands/ExtensionTools.kiss") -(loadFrom "kiss-vscode" "src/commands/KTxt2Tools.kiss") -(loadFrom "kiss-vscode" "src/commands/Vscode.kiss") - -// Provided from Main.kiss via (set): -(var &mut :Command tryLoadConfig) - -(function :Void registerBuiltins [&opt leaderKeys] - // Set up the KeyShortcutHandler - (set shortcutHandler.cancelKey "Escape") - (set shortcutHandler.onSelectPrefixMap showShortcutPanel) - (set shortcutHandler.onSelectItem runChosenCommand) - (set shortcutHandler.onFinishOrCancel cancelOrFinishShortcutPanel) - (set shortcutHandler.onBadKey ->:Void [key map] (warningMessage "$key is not mapped to a shortcut in $map")) - (set shortcutHandler.onBadShortcut ->:Void [key otherKey] (warningMessage "$key conflicts with $otherKey")) - - (unless leaderKeys (set leaderKeys "")) - (let [prefix "Kiss-VSCode:$(if leaderKeys " [${leaderKeys}]" "")" - ktxt2Prefix "KTxt2:$(if leaderKeys " [${leaderKeys}]" "")"] - // In Main.kiss: - (registerCommand "${prefix} [r]eload Config.kiss" tryLoadConfig) - // In this file: - (registerCommand "${prefix} [q]uickPick and run a command" runCommand) - (registerCommand "${prefix} Re-run last command" runLastCommand) - (registerCommand "${prefix} Run a keyboard [s]hortcut command" runKeyboardShortcut) - // KissTools.kiss: - (registerCommand "${prefix} [e]valuate and print an expression" evalAndPrint) - (registerCommand "${prefix} create [n]ew kiss class" newKissClass) - (registerCommand "${prefix} open corresponding .kiss/.hx [f]ile" showCorrespondingFile) - // ExtensionTools.kiss: - (registerCommand "${prefix} [u]pdate Kiss-VSCode" updateKissVscode) - (registerCommand "${prefix} [t]est and [u]pdate Kiss-VSCode" testAndUpdateKissVscode) - // Vscode.kiss: - (registerCommand "${prefix} edit Kiss-Vscode [c]onfig" openKissConfig) - // KTxt2.kiss: - (registerCommand "${ktxt2Prefix} [i]mport input file" importKTxt2InputFile)) - - // Show a warning when editing a document that is managed by a ktxt2 file - (Vscode.workspace.onDidChangeTextDocument - ->e - (let [f e.document.fileName - dir (FileSystem.readDirectory (f.directory))] - (unless (f.endsWith "ktxt2") - (doFor otherF dir - (whenLet [(Some _) (indexOf otherF (.withoutDirectory (f.withoutExtension))) - (Some _) (indexOf otherF (f.extension)) - true (otherF.endsWith ".ktxt2")] - (errorMessage "Editing file $(f.withoutDirectory) which is managed by $(otherF.withoutDirectory)"))))))) - -// TODO standardize this with KissInterp -(function :Void prepareInterp [] - (set Prelude.printStr ->s (infoMessage s)) - (interp.variables.set "kiss" - (object - Prelude - Prelude)) - //interp.variables.set("Helpers", Helpers); - (interp.variables.set "Prelude" Prelude) - (interp.variables.set "Lambda" Lambda) - (interp.variables.set "Vscode" Vscode) - // TODO for some reason, (interp.variables.set "Std" Std) doesn't capture - // some static functions, like parseInt. So this kludgy bit is necessary: - (interp.variables.set "Std" - (object - parseInt Std.parseInt - string Std.string - random Std.random - int Std.int))) - -// Way to more forgivingly get long text inputs -(function :Promise inputEditor [:String filename :String prompt] - (let [previousEditor activeTextEditor - tempFile (joinPath extensionPath "temp" filename) - uri (if (FileSystem.exists tempFile) - (Uri.parse "file:$tempFile") - (Uri.parse "untitled:$tempFile"))] - (new Promise - ->[resolve reject] - (awaitLet [doc (openTextDocument uri) - _ (doc.save) - editor (showTextDocument doc)] - (print "Enter ${prompt}, then save and close this editor.") - (let [&mut :Disposable closeEvent null] - (set closeEvent - (Vscode.workspace.onDidCloseTextDocument - ->closedDoc - (when (= closedDoc.fileName doc.fileName) - (closeEvent.dispose) - (awaitLet [_ (showTextDocument previousEditor.document)] - (if editor.document.isDirty (let [error "Input editor for $prompt was closed without saving."] (warningMessage error) (reject error)) (resolve (editor.document.getText)))))))))))) - -(function registerCommand [description :Command command] - (dictSet commands description command) - (shortcutHandler.registerItem description description)) - -(#unless test - (var :Array conversions []) - - (function registerConversion [:KTxt2Conversion conversion] (conversions.push conversion))) - - -// TODO provide for passing messages between webview and VSCode API -(function :WebviewPanel quickWebview [:String title :QuickWebviewSetup setup :QuickWebviewUpdate update &opt :ViewColumn column :Int fps] - (let [dom (new JSDOM "${title}") - document dom.window.document] - (setup document) - (let [panel (Vscode.window.createWebviewPanel "kissVscodeQuickWebview" title (or column ViewColumn.Beside) (object))] - (set panel.webview.html document.documentElement.innerHTML) - - // TODO setInterval of the update function and allow for stopping it by disposing the panel or calling a close function passed to update - (let [&mut :Function close null - deltaMilli (/ 1000.0 (or fps 30)) - deltaSec (/ deltaMilli 1000) - interval (Timers.setInterval ->{(update document deltaSec close) (set panel.webview.html document.documentElement.innerHTML)}deltaMilli)] - (panel.onDidDispose ->e (Timers.clearInterval interval)) - (set close ->(panel.dispose))) - panel))) \ No newline at end of file diff --git a/projects/kiss-vscode/config/build.hxml b/projects/kiss-vscode/config/build.hxml deleted file mode 100644 index 0273ca02..00000000 --- a/projects/kiss-vscode/config/build.hxml +++ /dev/null @@ -1,9 +0,0 @@ -args.hxml --lib hxnodejs --lib vscode --lib kiss --lib kiss-vscode --lib kiss-tools --lib re-flex -KissConfig --js config.js \ No newline at end of file diff --git a/projects/kiss-vscode/config/default/Config.kiss b/projects/kiss-vscode/config/default/Config.kiss deleted file mode 100644 index ee16a1d3..00000000 --- a/projects/kiss-vscode/config/default/Config.kiss +++ /dev/null @@ -1,3 +0,0 @@ -(function init [] - (registerBuiltins) - (return)) diff --git a/projects/kiss-vscode/config/default/args.hxml b/projects/kiss-vscode/config/default/args.hxml deleted file mode 100644 index e69de29b..00000000 diff --git a/projects/kiss-vscode/config/default/import.hx b/projects/kiss-vscode/config/default/import.hx deleted file mode 100644 index e55eed8c..00000000 --- a/projects/kiss-vscode/config/default/import.hx +++ /dev/null @@ -1 +0,0 @@ -package; diff --git a/projects/kiss-vscode/config/example/Config.kiss b/projects/kiss-vscode/config/example/Config.kiss deleted file mode 100644 index 148a826c..00000000 --- a/projects/kiss-vscode/config/example/Config.kiss +++ /dev/null @@ -1,7 +0,0 @@ -(function :Void init [] - (registerBuiltins) - (registerCommand "print a nice message" - (lambda :Void [&opt selectedText] - (infoMessage "Hello world!") - (when selectedText - (infoMessage (+ "Also, " selectedText)))))) diff --git a/projects/kiss-vscode/config/example/args.hxml b/projects/kiss-vscode/config/example/args.hxml deleted file mode 100644 index e69de29b..00000000 diff --git a/projects/kiss-vscode/config/example/import.hx b/projects/kiss-vscode/config/example/import.hx deleted file mode 100644 index e55eed8c..00000000 --- a/projects/kiss-vscode/config/example/import.hx +++ /dev/null @@ -1 +0,0 @@ -package; diff --git a/projects/kiss-vscode/config/example/package.json b/projects/kiss-vscode/config/example/package.json deleted file mode 100644 index e46e96e8..00000000 --- a/projects/kiss-vscode/config/example/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "example-kiss-vscode-config", - "version": "0.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "LGPL-2.1-or-later", - "dependencies": { - "phaser": "3.55.2" - } -} diff --git a/projects/kiss-vscode/config/example/subfolder/file.txt b/projects/kiss-vscode/config/example/subfolder/file.txt deleted file mode 100644 index 6bdda64b..00000000 --- a/projects/kiss-vscode/config/example/subfolder/file.txt +++ /dev/null @@ -1 +0,0 @@ -not important \ No newline at end of file diff --git a/projects/kiss-vscode/kiss-vscode-0.0.18.vsix b/projects/kiss-vscode/kiss-vscode-0.0.18.vsix index 2d85cc2f..04bd2ba4 100644 Binary files a/projects/kiss-vscode/kiss-vscode-0.0.18.vsix and b/projects/kiss-vscode/kiss-vscode-0.0.18.vsix differ diff --git a/projects/kiss-vscode/package-lock.json b/projects/kiss-vscode/package-lock.json index 66de0f49..33607cc8 100644 --- a/projects/kiss-vscode/package-lock.json +++ b/projects/kiss-vscode/package-lock.json @@ -7,24 +7,2119 @@ "": { "name": "kiss-vscode", "version": "0.0.18", - "dependencies": { - "monaco-editor": "^0.29.1" + "devDependencies": { + "vsce": "^2.15.0" }, "engines": { "vscode": "^1.4.0" } }, - "node_modules/monaco-editor": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.29.1.tgz", - "integrity": "sha512-rguaEG/zrPQSaKzQB7IfX/PpNa0qxF1FY8ZXRkN4WIl8qZdTQRSRJCtRto7IMcSgrU6H53RXI+fTcywOBC4aVw==" + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/azure-devops-node-api": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", + "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "dev": true, + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/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/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "node_modules/node-abi": { + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", + "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qs": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", + "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "dev": true, + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vsce": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.15.0.tgz", + "integrity": "sha512-P8E9LAZvBCQnoGoizw65JfGvyMqNGlHdlUXD1VAuxtvYAaHBKLBdKPnpy60XKVDAkQCfmMu53g+gq9FM+ydepw==", + "deprecated": "vsce has been renamed to @vscode/vsce. Install using @vscode/vsce instead.", + "dev": true, + "dependencies": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.1.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "keytar": "^7.7.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^5.1.0", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.4.23", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } } }, "dependencies": { - "monaco-editor": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.29.1.tgz", - "integrity": "sha512-rguaEG/zrPQSaKzQB7IfX/PpNa0qxF1FY8ZXRkN4WIl8qZdTQRSRJCtRto7IMcSgrU6H53RXI+fTcywOBC4aVw==" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "azure-devops-node-api": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", + "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "dev": true, + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "requires": { + "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" + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "requires": { + "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" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "htmlparser2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "requires": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true + } + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "node-abi": { + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", + "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", + "dev": true, + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "requires": { + "semver": "^5.1.0" + } + }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "qs": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "typed-rest-client": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", + "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "dev": true, + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "vsce": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.15.0.tgz", + "integrity": "sha512-P8E9LAZvBCQnoGoizw65JfGvyMqNGlHdlUXD1VAuxtvYAaHBKLBdKPnpy60XKVDAkQCfmMu53g+gq9FM+ydepw==", + "dev": true, + "requires": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.1.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "keytar": "^7.7.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^5.1.0", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.4.23", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3" + } } } } diff --git a/projects/kiss-vscode/package.json b/projects/kiss-vscode/package.json index 8a9bd9d3..e1995b0d 100644 --- a/projects/kiss-vscode/package.json +++ b/projects/kiss-vscode/package.json @@ -14,9 +14,6 @@ "extensionPack": [ "2gua.rainbow-brackets" ], - "dependencies": { - "monaco-editor": "^0.29.1" - }, "publisher": "NQNStudios", "contributes": { "grammars": [ @@ -38,48 +35,60 @@ ], "keybindings": [ { - "command": "kiss.runLastCommand", - "mac": "cmd+.", - "key": "ctrl+." + "command": "kiss.evalAndPrint", + "mac": "Cmd+; Cmd+e", + "key": "Ctrl+; Ctrl+e" }, { - "command": "kiss.runKeyboardShortcut", - "mac": "cmd+;", - "key": "ctrl+;" - } - ], - "customEditors": [ + "command": "kiss.newKissClass", + "mac": "Cmd+; Cmd+c", + "key": "Ctrl+; Ctrl+c" + }, { - "selector": [ - { - "filenamePattern": "*.*.*.ktxt2" - } - ], - "priority": "default", - "viewType": "ktxt2.splitView", - "displayName": "KTxt2 Split View" + "command": "kiss.showCorrespondingFile", + "mac": "Cmd+; Cmd+f", + "key": "Ctrl+; Ctrl+f" + }, + { + "command": "kiss.insertUTestCase", + "mac": "Cmd+; Cmd+u", + "key": "Ctrl+; Ctrl+u" + }, + { + "command": "kiss.mapLinesSync", + "mac": "Cmd+; Cmd+l Cmd+m", + "key": "Ctrl+; Ctrl+l Ctrl+m" + }, + { + "command": "kiss.sortLinesSync", + "mac": "Cmd+; Cmd+l Cmd+s", + "key": "Ctrl+; Ctrl+l Ctrl+s" } ], "commands": [ { - "title": "Kiss: Run a kiss command", - "command": "kiss.runCommand" + "title": "Kiss-Vscode: Evaluate and print a kiss expression's value", + "command": "kiss.evalAndPrint" }, { - "title": "Kiss: Rerun the last command", - "command": "kiss.runLastCommand" + "title": "Kiss-Vscode: Create a new kiss class", + "command": "kiss.newKissClass" }, { - "title": "Kiss: Run a Kiss keyboard shortcut command", - "command": "kiss.runKeyboardShortcut" + "title": "Kiss-Vscode: Open the corresponding .kiss/.hx file to this one", + "command": "kiss.showCorrespondingFile" }, { - "title": "Kiss: Update Kiss-VSCode from the currently installed Haxelib package", - "command": "kiss.updateKissVscode" + "title": "Kiss-Vscode: Generate a UTest test case in this .hx/.kiss file", + "command": "kiss.insertUTestCase" }, { - "title": "Kiss: Reload Kiss config", - "command": "kiss.reloadConfig" + "title": "Kiss-Vscode: Transform the selected text lines using a String->String kiss function", + "command": "kiss.mapLinesSync" + }, + { + "title": "Kiss-Vscode: Sort the selected text lines using a (String,String)->Int comparator function", + "command": "kiss.sortLinesSync" } ], "languages": [ @@ -99,13 +108,10 @@ "engines": { "vscode": "^1.4.0" }, + "devDependencies": { + "vsce": "^2.15.0" + }, "version": "0.0.18", - "activationEvents": [ - "onStartupFinished", - "onCommand:kiss.runCommand", - "onCommand:kiss.runLastCommand", - "onCommand:kiss.runKeyboardShortcut", - "onCommand:kiss.reloadConfig" - ], + "activationEvents": [], "displayName": "kiss-vscode" } \ No newline at end of file diff --git a/projects/kiss-vscode/src/Main.hx b/projects/kiss-vscode/src/Main.hx index 0faa8802..f2219821 100644 --- a/projects/kiss-vscode/src/Main.hx +++ b/projects/kiss-vscode/src/Main.hx @@ -1,8 +1,4 @@ -#if !test import vscode.*; -import ktxt2.*; -import ktxt2.KTxt2.KTxt2Conversion; -#end import Sys; import sys.io.File; import sys.FileSystem; @@ -13,33 +9,15 @@ import js.node.ChildProcess; import uuid.Uuid; import re_flex.R; +using haxe.io.Path; using StringTools; using uuid.Uuid; -typedef Command = (?String) -> Void; - -typedef KissConfig = { - registerBuiltins:() -> Void, - registerCommand:(String, Command) -> Void, - prepareInterp:() -> Void, - runCommand:Command, - runLastCommand:Command, - runKeyboardShortcut:Command, - tryLoadConfig:Command, - extensionPath:String, - #if !test - conversions:Array, - #end - init:() -> Void -}; - @:build(kiss.Kiss.build()) class Main { // TODO support EMeta(s:MetadataEntry, e:Expr) via Kiss so this signature can be moved to Main.kiss - #if !test @:expose("activate") static function activate(context:ExtensionContext) { _activate(context); } - #end } diff --git a/projects/kiss-vscode/src/Main.kiss b/projects/kiss-vscode/src/Main.kiss index b36a5b79..62fabc6e 100644 --- a/projects/kiss-vscode/src/Main.kiss +++ b/projects/kiss-vscode/src/Main.kiss @@ -1,210 +1,7 @@ -(#if test - (loadFrom "kiss-vscode-api" "src/Util.kiss") - // This also loads Util.kiss: - (load "commands/ExtensionTools.kiss")) +(loadFrom "kiss-vscode-api" "src/Util.kiss") +(loadFrom "kiss-vscode-api" "src/KissUtil.kiss") -(function userHome [] (or (Sys.getEnv "MSYSHOME") (Sys.getEnv "HOME") (Sys.getEnv "UserProfile"))) -(function userConfigDir [] - (joinPath - (userHome) - ".kiss")) - -(var &mut activeConfigDir "") -(var &mut lastConfigDir "") -(var &mut builtinConfigDir "") -(var &mut commandsDir "") -(var &mut :KissConfig config null) - -(function npmSafeTrySpawnSync [:Array cmd handleConfigFailure] - (let [program - (if (= "Windows" (Sys.systemName)) - { - (cmd.insert 0 "/c") - "cmd.exe" - } - (cmd.shift))] - (trySpawnSync program cmd (object cwd activeConfigDir) handleConfigFailure))) - -(#when test (var :String->Void warningMessage Prelude.printStr)) - -(function :Void tryLoadConfig [&opt :Bool force :Bool fallbackToDefault :String _] - (let [handleConfigFailure - ->errorMessage { - (try - { - (when (FileSystem.exists activeConfigDir) - (FileSystem.deleteDirectory activeConfigDir)) - (when (FileSystem.exists lastConfigDir) - (FileSystem.rename lastConfigDir activeConfigDir)) - } - (catch [e] (throw "failed to delete bad config: $e"))) - (#if test - // If there's a build error when testing, throw a test failure - (throw errorMessage) - // If there's a build error at runtime, tell the user - (showCompileError errorMessage)) - // When user config fails to build, use the default - // Counterintuitively, this unless is correct: - (unless fallbackToDefault - (warningMessage "Falling back to the default Kiss-VSCode Config") - (unless config - (tryLoadConfig false true))) - - }] - - // Choose where to find the custom config - (let [customConfigDir - (#if test - // When running unit tests, build the example config - (joinPath builtinConfigDir "example") - // When running for real, try the user's config directory - (if (and !fallbackToDefault (FileSystem.exists (userConfigDir))) - (userConfigDir) - // Supply the default (empty) config if the user doesn't have one, or if the user's failed to compile - (joinPath builtinConfigDir "default")))] - // If a backup exists, delete it - (when (FileSystem.exists lastConfigDir) - (FileSystem.deleteDirectory lastConfigDir)) - // TODO maybe also expose that backup to the user via a "rollback .kiss" command so they can rollback their config without using Git? - (when (FileSystem.exists activeConfigDir) - // If there is an active config folder from a previous session, that is still up-to-date, - // skip re-compilation and just use it - (#unless test - (unless force - (let [oldConfigFile (joinPath activeConfigDir "config.js")] - (when (and (FileSystem.exists oldConfigFile) - (let [mTime - ->file (.getTime .mtime (FileSystem.stat file)) - oldFileMTime - (mTime oldConfigFile) - userConfigMTime - (let [foldersToCheck [builtinConfigDir]] - (when (FileSystem.exists (userConfigDir)) - (foldersToCheck.insert 0 (userConfigDir))) - (when commandsDir - (foldersToCheck.push commandsDir)) - (apply max - (map (apply concat (map foldersToCheck readDirectory)) mTime)))] - (> oldFileMTime userConfigMTime))) - (requireConfigJs oldConfigFile) - (Vscode.window.showInformationMessage "Config loaded successfully!") - (return))))) - // Backup currently active config - (FileSystem.rename activeConfigDir lastConfigDir)) - - (FileSystem.createDirectory activeConfigDir) - // Copy the boilerplate config files to the active config directory - (doFor file (FileSystem.readDirectory builtinConfigDir) - (unless (FileSystem.isDirectory (joinPath builtinConfigDir file)) - (File.copy - (joinPath builtinConfigDir file) - (joinPath activeConfigDir file)))) - // Recursively copy the user's custom config files to the active config directory - (walkDirectory customConfigDir null - ->file - (File.copy - (joinPath customConfigDir file) - (joinPath activeConfigDir file)) - ->folder - (FileSystem.createDirectory - (joinPath activeConfigDir folder))) - // install all Haxe dependencies: - (trySpawnSync "haxelib" ["install" "all" "--always"] (object cwd activeConfigDir) handleConfigFailure) - // install all of the user's Node dependencies: - (when (FileSystem.exists (joinPath activeConfigDir "package.json")) - (npmSafeTrySpawnSync ["npm" "install"] handleConfigFailure)) - // install built-in node dependencies: - (npmSafeTrySpawnSync ["npm" "install" "jsdom"] handleConfigFailure) - // Run the haxe compiler: - (trySpawnSync "haxe" ["build.hxml"] (object cwd activeConfigDir) handleConfigFailure) - - // Successful compilation! - (#if test - // When testing: - (print "Example config compiled successfully") - // When running the extension: - // Require the config.js package that was generated. - // But since Node.require() caches modules by filename, - // copy it to a unique path first so hot-reloading works properly. - (let [activeConfigFile (joinPath activeConfigDir "config.js")] - (requireConfigJs activeConfigFile) - (Vscode.window.showInformationMessage "Config loaded successfully!")))))) - -(var &mut extensionPath "") -(function requireConfigJs [file] - (let [uniqueConfigFile (joinPath activeConfigDir "$(.toShort (Uuid.v4)).js")] - (File.copy file uniqueConfigFile) - (set config (the KissConfig .KissConfig (Node.require uniqueConfigFile))) - (#unless test - (set Prelude.printStr ->:Void s (Vscode.window.showInformationMessage s))) - (set config.tryLoadConfig ->[&opt _] (tryLoadConfig true false)) - (set config.extensionPath extensionPath) - (config.prepareInterp) - // User-defined init: - (config.init))) - -(#unless test - (function _activate [:ExtensionContext context] - (set extensionPath context.extensionPath) - (context.subscriptions.push - (Vscode.commands.registerCommand - "kiss.reloadConfig" - ->(tryLoadConfig true))) - - (defCommand context kiss.runCommand "Kiss: Run a kiss command" "" [] - (if config - (.runCommand (the KissConfig config)) - (Vscode.window.showErrorMessage "Can't run commands! No config is loaded.")) - null) - - (context.subscriptions.push - (Vscode.commands.registerCommand - "kiss.runLastCommand" - (lambda :Void [] - (if config - (.runLastCommand (the KissConfig config)) - (Vscode.window.showErrorMessage "Can't run commands! No config is loaded."))))) - - (context.subscriptions.push - (Vscode.commands.registerCommand - "kiss.updateKissVscode" - (lambda :Void [] - (updateKissVscode)))) - - (context.subscriptions.push - (Vscode.commands.registerCommand - "kiss.runKeyboardShortcut" - (lambda :Void [] - (if config - (.runKeyboardShortcut (the KissConfig config)) - (Vscode.window.showErrorMessage "Can't run commands! No config is loaded."))))) - - (context.subscriptions.push - (KTxt2EditorProvider.register context)) - - (set builtinConfigDir - (joinPath - (try - (Prelude.libPath "kiss-vscode") - (catch [e] context.extensionPath)) - "config")) - (set commandsDir - (try (let [srcPath (Prelude.libPath "kiss-vscode")] - (joinPath srcPath "src" "commands")) - (catch [e] ""))) - (set activeConfigDir (joinPath (userHome) ".kiss-vscode" "activeConfig")) - (set lastConfigDir (joinPath (userHome) ".kiss-vscode" "lastActiveConfig")) - - (tryLoadConfig))) - -// Manually define main so it will exist when test is not defined: -(function :Void main [] - (#when test - (set builtinConfigDir "config") - (set commandsDir "src/commands") - (set activeConfigDir "_activeConfig") - (set lastConfigDir "_lastActiveConfig") - (tryLoadConfig) - // Load the config twice more to make sure it moves the last active config out of the way properly: - (tryLoadConfig) - (tryLoadConfig))) +(function _activate [:ExtensionContext context] + (load "commands/ExtensionTools.kiss") + (load "commands/KissTools.kiss") + (load "commands/Lines.kiss")) \ No newline at end of file diff --git a/projects/kiss-vscode/src/commands/KissTools.kiss b/projects/kiss-vscode/src/commands/KissTools.kiss index 42f07e36..109348a9 100644 --- a/projects/kiss-vscode/src/commands/KissTools.kiss +++ b/projects/kiss-vscode/src/commands/KissTools.kiss @@ -1,8 +1,9 @@ -(function :Void evalAndPrint [&opt :String selectedText] - (withValueOrInputBox selectedText - (infoMessage (Std.string (evalString selectedText))))) +(defCommand context kiss.evalAndPrint "Evaluate and print a kiss expression's value" "C-; C-e" [] + (let [st (selectedText)] + (withValueOrInputEditor st "kiss.evalAndPrint" "// A kiss expression to evaluate" + (infoMessage (Std.string (evalString st)))))) -(function :Void newKissClass [&opt _] +(defCommand context kiss.newKissClass "Create a new kiss class" "C-; C-c" [] (awaitLet [className (inputBox)] (when className (let [currentFile @@ -51,10 +52,10 @@ class ${className} {} (otherwise (throw "No corresponding file for ${kissOrHxFile}")))] "${base}.${correspondingExt}")) -(function showCorrespondingFile [&opt _] +(defCommand context kiss.showCorrespondingFile "Open the corresponding .kiss/.hx file to this one" "C-; C-f" [] (showTextDocument (Uri.file (correspondingFile .fileName .document activeTextEditor)))) -(function insertUTestCase [&opt _] +(defCommand context kiss.insertUTestCase "Generate a UTest test case in this .hx/.kiss file" "C-; C-u" [] (awaitLet [testName (inputBox) &sync testName "$(.toUpperCase (testName.substr 0 1))$(testName.substr 1)" diff --git a/projects/kiss-vscode/src/commands/MapLines.kiss b/projects/kiss-vscode/src/commands/Lines.kiss similarity index 71% rename from projects/kiss-vscode/src/commands/MapLines.kiss rename to projects/kiss-vscode/src/commands/Lines.kiss index 372fa846..5da29825 100644 --- a/projects/kiss-vscode/src/commands/MapLines.kiss +++ b/projects/kiss-vscode/src/commands/Lines.kiss @@ -15,10 +15,10 @@ (e.delete editor.selection) (e.insert editor.selection.active mappedText)))))) -(function mapLinesSync [&opt selectedText] +(defCommand context kiss.mapLinesSync "Transform the selected text lines using a String->String kiss function" "C-; C-l C-m" [] (awaitLet [mapFuncStr (inputEditor "mapLinesFunc.kiss" "a String->String function through which to map the selected lines")] (let [:String->String mapFunc (evalString mapFuncStr)] - (_mapLinesSync selectedText mapFunc)))) + (_mapLinesSync (selectedText) mapFunc)))) // Sort the selected lines of text using a comparison function (String,String) -> Int (function _sortLinesSync [selectedText :Dynamic compareFunc] @@ -30,13 +30,6 @@ (e.delete editor.selection) (e.insert editor.selection.active (lines.join "\n"))))))) -(function sortLinesSync [&opt selectedText] +(defCommand context kiss.sortLinesSync "Sort the selected text lines using a (String,String)->Int comparator function" "C-; C-l C-s" [] (awaitLet [compareFuncStr (inputEditor "sortLinesFunc.kiss" "a (String,String) -> Int function with which to sort the selected lines")] - (_sortLinesSync selectedText (if (< 0 compareFuncStr.length) (evalString compareFuncStr) Reflect.compare)))) - - -(function :Void registerMapLinesCommands [&opt leaderKeys] - (unless leaderKeys (set leaderKeys "")) - (let [prefix "Kiss-VSCode:$(if leaderKeys " [${leaderKeys}]" "")"] - (registerCommand "${prefix} [L]ines - [M]ap synchronously" mapLinesSync) - (registerCommand "${prefix} [L]ines - [S]ort synchronously" sortLinesSync))) \ No newline at end of file + (_sortLinesSync (selectedText) (if (< 0 compareFuncStr.length) (evalString compareFuncStr) Reflect.compare)))) \ No newline at end of file diff --git a/projects/kiss-vscode/src/commands/OS.kiss b/projects/kiss-vscode/src/commands/OS.kiss deleted file mode 100644 index 6548f055..00000000 --- a/projects/kiss-vscode/src/commands/OS.kiss +++ /dev/null @@ -1,27 +0,0 @@ -// Operating system commands. Hopefully cross-compatible with Windows, Mac, and Ubuntu. - -// Before you use commands in this file: -/* (loadFrom "kiss-vscode" "src/commands/OS.kiss") */ - -// Open any file through the operating system's default program. -// Register this command as follows: -/* -(registerCommand "desired name with [a]ny [b]indings" osOpenFile) -// Or for a specific file: -(registerCommand "desired name with [a]ny [b]indings" ->[&opt _] (osOpenFile "path/to/file.any")) -*/ -(function :Void osOpenFile [&opt :String file] - (withValueOrInputBox file - (case (Sys.systemName) - ("Windows" (assertProcess "cmd.exe" ["/C" "start" file])) - ("Mac" (assertProcess "open" [file])) - ("Linux" (assertProcess "xdg-open" [file])) - (otherwise (throw "Unsupported operating system"))))) - -/* -(registerCommand "desired name with [a]ny [b]indings" osOpenFileInDir) -// Or for a specific directory: -(registerCommand "desired name with [a]ny [b]indings" ->[&opt _] (osOpenFileInDir "path/to/dir")) -*/ -(function :Void osOpenFileInDir [&opt :String dir] - (chooseFileInDir osOpenFile false dir)) \ No newline at end of file diff --git a/projects/kiss-vscode/src/commands/Vscode.kiss b/projects/kiss-vscode/src/commands/Vscode.kiss deleted file mode 100644 index 82593e39..00000000 --- a/projects/kiss-vscode/src/commands/Vscode.kiss +++ /dev/null @@ -1,40 +0,0 @@ -// This is loaded in every KissConfig - -(function userHome [] (or (Sys.getEnv "MSYSHOME") (Sys.getEnv "HOME") (Sys.getEnv "UserProfile"))) - -// Open any folder in a fresh VSCode instance. -// Register this command as follows: -/* -(registerCommand "desired name with [a]ny [b]indings" - (openFolder "$(userHome)/path/in/home/to/dir")) -*/ -(function openFolder [folder] - ->[&opt _] - (executeCommand "vscode.openFolder" (Uri.file folder))) - -// Open any file in the current VSCode window. -// Register this command as follows: -/* -(registerCommand "desired name with [a]ny [b]indings" - (openFile "$(userHome)/path/in/home/to/file.txt")) -*/ -(function openFile [file] - ->[&opt _] - (awaitLet [doc (Vscode.workspace.openTextDocument (Uri.file file))] - (Vscode.window.showTextDocument doc))) - -// Open your own Kiss-VSCode config file. -// Register this command as follows: -/* -(registerCommand "desired name with [a]ny [b]indings" openKissConfig) -*/ -(function openKissConfig [&opt _] - // For first-time extension users, create the config folder - // based on the default - (let [configPath "$(userHome)/.kiss" - defaultConfigPath (joinPath extensionPath "config" "default")] - (unless (FileSystem.exists configPath) - (FileSystem.createDirectory configPath) - (doFor file (FileSystem.readDirectory defaultConfigPath) - (File.copy "${defaultConfigPath}/$file" "${configPath}/$file"))) - ((openFile "${configPath}/Config.kiss")))) \ No newline at end of file diff --git a/projects/kiss-vscode/src/commands/EmacsPorts.kiss b/projects/kiss-vscode/src/commands/_deprecated/EmacsPorts.kiss similarity index 100% rename from projects/kiss-vscode/src/commands/EmacsPorts.kiss rename to projects/kiss-vscode/src/commands/_deprecated/EmacsPorts.kiss diff --git a/projects/kiss-vscode/src/commands/KTxt2Tools.kiss b/projects/ktxt2/KTxt2Tools.kiss similarity index 100% rename from projects/kiss-vscode/src/commands/KTxt2Tools.kiss rename to projects/ktxt2/KTxt2Tools.kiss diff --git a/projects/ktxt2/KissConfig.kiss b/projects/ktxt2/KissConfig.kiss new file mode 100644 index 00000000..0b1de8f2 --- /dev/null +++ b/projects/ktxt2/KissConfig.kiss @@ -0,0 +1,4 @@ + (var :Array conversions []) + + (function registerConversion [:KTxt2Conversion conversion] (conversions.push conversion))) + diff --git a/projects/ktxt2/Main.kiss b/projects/ktxt2/Main.kiss new file mode 100644 index 00000000..04fc49e7 --- /dev/null +++ b/projects/ktxt2/Main.kiss @@ -0,0 +1,2 @@ +(context.subscriptions.push + (KTxt2EditorProvider.register context)) diff --git a/projects/ktxt2/build.hxml b/projects/ktxt2/build.hxml new file mode 100644 index 00000000..e75fff27 --- /dev/null +++ b/projects/ktxt2/build.hxml @@ -0,0 +1,6 @@ +-lib kiss +-lib kiss-vscode +-lib re-flex +-cp src +-js bin/ktxt2editor.js +--main ktxt2.KTxt2Editor \ No newline at end of file diff --git a/projects/ktxt2/package.json b/projects/ktxt2/package.json new file mode 100644 index 00000000..5b984ce2 --- /dev/null +++ b/projects/ktxt2/package.json @@ -0,0 +1,12 @@ +"customEditors": [ + { + "selector": [ + { + "filenamePattern": "*.*.*.ktxt2" + } + ], + "priority": "default", + "viewType": "ktxt2.splitView", + "displayName": "KTxt2 Split View" + } +], \ No newline at end of file diff --git a/projects/kiss-vscode/src/ktxt2/EditorExterns.hx b/projects/ktxt2/src/ktxt2/EditorExterns.hx similarity index 100% rename from projects/kiss-vscode/src/ktxt2/EditorExterns.hx rename to projects/ktxt2/src/ktxt2/EditorExterns.hx diff --git a/projects/kiss-vscode/src/ktxt2/KTxt2.hx b/projects/ktxt2/src/ktxt2/KTxt2.hx similarity index 100% rename from projects/kiss-vscode/src/ktxt2/KTxt2.hx rename to projects/ktxt2/src/ktxt2/KTxt2.hx diff --git a/projects/kiss-vscode/src/ktxt2/KTxt2.kiss b/projects/ktxt2/src/ktxt2/KTxt2.kiss similarity index 100% rename from projects/kiss-vscode/src/ktxt2/KTxt2.kiss rename to projects/ktxt2/src/ktxt2/KTxt2.kiss diff --git a/projects/kiss-vscode/src/ktxt2/KTxt2Editor.hx b/projects/ktxt2/src/ktxt2/KTxt2Editor.hx similarity index 100% rename from projects/kiss-vscode/src/ktxt2/KTxt2Editor.hx rename to projects/ktxt2/src/ktxt2/KTxt2Editor.hx diff --git a/projects/kiss-vscode/src/ktxt2/KTxt2Editor.kiss b/projects/ktxt2/src/ktxt2/KTxt2Editor.kiss similarity index 100% rename from projects/kiss-vscode/src/ktxt2/KTxt2Editor.kiss rename to projects/ktxt2/src/ktxt2/KTxt2Editor.kiss diff --git a/projects/kiss-vscode/src/ktxt2/KTxt2EditorProvider.hx b/projects/ktxt2/src/ktxt2/KTxt2EditorProvider.hx similarity index 100% rename from projects/kiss-vscode/src/ktxt2/KTxt2EditorProvider.hx rename to projects/ktxt2/src/ktxt2/KTxt2EditorProvider.hx diff --git a/projects/kiss-vscode/src/ktxt2/KTxt2EditorProvider.kiss b/projects/ktxt2/src/ktxt2/KTxt2EditorProvider.kiss similarity index 100% rename from projects/kiss-vscode/src/ktxt2/KTxt2EditorProvider.kiss rename to projects/ktxt2/src/ktxt2/KTxt2EditorProvider.kiss diff --git a/projects/kiss-vscode/src/ktxt2/RegexConversion.hx b/projects/ktxt2/src/ktxt2/RegexConversion.hx similarity index 100% rename from projects/kiss-vscode/src/ktxt2/RegexConversion.hx rename to projects/ktxt2/src/ktxt2/RegexConversion.hx diff --git a/projects/kiss-vscode/src/ktxt2/RegexConversion.kiss b/projects/ktxt2/src/ktxt2/RegexConversion.kiss similarity index 100% rename from projects/kiss-vscode/src/ktxt2/RegexConversion.kiss rename to projects/ktxt2/src/ktxt2/RegexConversion.kiss diff --git a/projects/kiss-vscode/src/ktxt2/StreamConversion.hx b/projects/ktxt2/src/ktxt2/StreamConversion.hx similarity index 100% rename from projects/kiss-vscode/src/ktxt2/StreamConversion.hx rename to projects/ktxt2/src/ktxt2/StreamConversion.hx diff --git a/projects/kiss-vscode/src/ktxt2/StreamConversion.kiss b/projects/ktxt2/src/ktxt2/StreamConversion.kiss similarity index 100% rename from projects/kiss-vscode/src/ktxt2/StreamConversion.kiss rename to projects/ktxt2/src/ktxt2/StreamConversion.kiss