├── .github ├── dependabot.yml └── workflows │ └── pr.yml ├── .gitignore ├── .mocharc.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── eslint.config.mjs ├── package-lock.json ├── package.json ├── resources ├── containerlab-icon-theme.json ├── containerlab.png ├── containerlab.svg ├── exec_cmd.json ├── icons │ ├── ethernet-port-dark.svg │ ├── ethernet-port-green.svg │ ├── ethernet-port-light.svg │ ├── ethernet-port-red.svg │ ├── partial.svg │ ├── running.svg │ ├── stopped.svg │ ├── undeployed.svg │ ├── wireshark_dark.svg │ └── wireshark_light.svg ├── screenshot.png ├── ssh_users.json └── tailwind.js ├── schema └── clab.schema.json ├── src ├── commands │ ├── addToWorkspace.ts │ ├── attachShell.ts │ ├── capture.ts │ ├── clabCommand.ts │ ├── clonePopularRepo.ts │ ├── cloneRepo.ts │ ├── command.ts │ ├── copy.ts │ ├── deleteLab.ts │ ├── deploy.ts │ ├── deployPopular.ts │ ├── destroy.ts │ ├── dockerCommand.ts │ ├── edgeshark.ts │ ├── favorite.ts │ ├── graph.ts │ ├── impairments.ts │ ├── index.ts │ ├── inspect.ts │ ├── nodeImpairments.ts │ ├── openBrowser.ts │ ├── openFolderInNewWindow.ts │ ├── openLabFile.ts │ ├── openLink.ts │ ├── redeploy.ts │ ├── save.ts │ ├── showLogs.ts │ ├── ssh.ts │ ├── sshxShare.ts │ ├── startNode.ts │ ├── stopNode.ts │ └── telnet.ts ├── extension.ts ├── helpers │ ├── containerlabUtils.ts │ └── popularLabs.ts ├── topoViewer │ ├── backend │ │ ├── logger.ts │ │ ├── topoViewerAdaptorClab.ts │ │ ├── topoViewerWebUiFacade.ts │ │ └── types │ │ │ ├── cytoscape-cola.d.ts │ │ │ ├── cytoscape-grid-guide.d.ts │ │ │ └── topoViewerType.ts │ ├── readme.md │ └── webview-ui │ │ └── html-static │ │ ├── css │ │ ├── atom-one-dark.min.css │ │ ├── cytoscape-leaflet.css │ │ ├── leaflet.css │ │ ├── quill.css │ │ ├── resizeable.css │ │ ├── style.css │ │ └── tabulator-table-theme-bulma.css │ │ ├── images │ │ ├── containerlab.svg │ │ ├── nokia-logo.svg │ │ ├── svg-copy.svg │ │ ├── svg-impairment.svg │ │ ├── svg-parallelogram.svg │ │ └── svg-wireshark.svg │ │ ├── js │ │ ├── backupRestore.js │ │ ├── cloudshell │ │ │ ├── index.html │ │ │ └── terminal.js │ │ ├── common.js │ │ ├── dev.js │ │ ├── library │ │ │ ├── bulma-1-0-0.min.css │ │ │ ├── bulma-1-0-2.min.css │ │ │ ├── bulma-resizeable-panel.min.js │ │ │ ├── bulma-slider.min.js │ │ │ ├── bulma-toast.min.js │ │ │ ├── cola.min.js │ │ │ ├── consolas-wrapper.min.js │ │ │ ├── core@1.5.0.js │ │ │ ├── core@1.5.0.min.js │ │ │ ├── cytoscape-cola.min.js │ │ │ ├── cytoscape-edgehandles.min.js │ │ │ ├── cytoscape-expand-collapse.min.js │ │ │ ├── cytoscape-grid-guide.min.js │ │ │ ├── cytoscape-leaflet.min.js │ │ │ ├── cytoscape-node-edge-html-label.js │ │ │ ├── cytoscape-popper.min.js │ │ │ ├── cytoscape-svg.min.js │ │ │ ├── cytoscape.min.js │ │ │ ├── cytoscape.min.js.ori │ │ │ ├── dom@1.5.3.js │ │ │ ├── dom@1.5.3.min.js │ │ │ ├── fontawesome-6-4-2.js │ │ │ ├── fontawesome-6-7-2.min.js │ │ │ ├── highlight-11-9-0.min.js │ │ │ ├── jquery-3.6.0.min.js │ │ │ ├── js-yaml.min.js │ │ │ ├── leaflet.js │ │ │ ├── lodash.min.js │ │ │ ├── monaco-editor │ │ │ │ └── min │ │ │ │ │ └── vs │ │ │ │ │ ├── base │ │ │ │ │ ├── browser │ │ │ │ │ │ └── ui │ │ │ │ │ │ │ └── codicons │ │ │ │ │ │ │ └── codicon │ │ │ │ │ │ │ └── codicon.ttf │ │ │ │ │ ├── common │ │ │ │ │ │ └── worker │ │ │ │ │ │ │ ├── simpleWorker.nls.de.js │ │ │ │ │ │ │ ├── simpleWorker.nls.es.js │ │ │ │ │ │ │ ├── simpleWorker.nls.fr.js │ │ │ │ │ │ │ ├── simpleWorker.nls.it.js │ │ │ │ │ │ │ ├── simpleWorker.nls.ja.js │ │ │ │ │ │ │ ├── simpleWorker.nls.js │ │ │ │ │ │ │ ├── simpleWorker.nls.ko.js │ │ │ │ │ │ │ ├── simpleWorker.nls.ru.js │ │ │ │ │ │ │ ├── simpleWorker.nls.zh-cn.js │ │ │ │ │ │ │ └── simpleWorker.nls.zh-tw.js │ │ │ │ │ └── worker │ │ │ │ │ │ └── workerMain.js │ │ │ │ │ ├── basic-languages │ │ │ │ │ ├── abap │ │ │ │ │ │ └── abap.js │ │ │ │ │ ├── apex │ │ │ │ │ │ └── apex.js │ │ │ │ │ ├── azcli │ │ │ │ │ │ └── azcli.js │ │ │ │ │ ├── bat │ │ │ │ │ │ └── bat.js │ │ │ │ │ ├── bicep │ │ │ │ │ │ └── bicep.js │ │ │ │ │ ├── cameligo │ │ │ │ │ │ └── cameligo.js │ │ │ │ │ ├── clojure │ │ │ │ │ │ └── clojure.js │ │ │ │ │ ├── coffee │ │ │ │ │ │ └── coffee.js │ │ │ │ │ ├── cpp │ │ │ │ │ │ └── cpp.js │ │ │ │ │ ├── csharp │ │ │ │ │ │ └── csharp.js │ │ │ │ │ ├── csp │ │ │ │ │ │ └── csp.js │ │ │ │ │ ├── css │ │ │ │ │ │ └── css.js │ │ │ │ │ ├── cypher │ │ │ │ │ │ └── cypher.js │ │ │ │ │ ├── dart │ │ │ │ │ │ └── dart.js │ │ │ │ │ ├── dockerfile │ │ │ │ │ │ └── dockerfile.js │ │ │ │ │ ├── ecl │ │ │ │ │ │ └── ecl.js │ │ │ │ │ ├── elixir │ │ │ │ │ │ └── elixir.js │ │ │ │ │ ├── flow9 │ │ │ │ │ │ └── flow9.js │ │ │ │ │ ├── freemarker2 │ │ │ │ │ │ └── freemarker2.js │ │ │ │ │ ├── fsharp │ │ │ │ │ │ └── fsharp.js │ │ │ │ │ ├── go │ │ │ │ │ │ └── go.js │ │ │ │ │ ├── graphql │ │ │ │ │ │ └── graphql.js │ │ │ │ │ ├── handlebars │ │ │ │ │ │ └── handlebars.js │ │ │ │ │ ├── hcl │ │ │ │ │ │ └── hcl.js │ │ │ │ │ ├── html │ │ │ │ │ │ └── html.js │ │ │ │ │ ├── ini │ │ │ │ │ │ └── ini.js │ │ │ │ │ ├── java │ │ │ │ │ │ └── java.js │ │ │ │ │ ├── javascript │ │ │ │ │ │ └── javascript.js │ │ │ │ │ ├── julia │ │ │ │ │ │ └── julia.js │ │ │ │ │ ├── kotlin │ │ │ │ │ │ └── kotlin.js │ │ │ │ │ ├── less │ │ │ │ │ │ └── less.js │ │ │ │ │ ├── lexon │ │ │ │ │ │ └── lexon.js │ │ │ │ │ ├── liquid │ │ │ │ │ │ └── liquid.js │ │ │ │ │ ├── lua │ │ │ │ │ │ └── lua.js │ │ │ │ │ ├── m3 │ │ │ │ │ │ └── m3.js │ │ │ │ │ ├── markdown │ │ │ │ │ │ └── markdown.js │ │ │ │ │ ├── mdx │ │ │ │ │ │ └── mdx.js │ │ │ │ │ ├── mips │ │ │ │ │ │ └── mips.js │ │ │ │ │ ├── msdax │ │ │ │ │ │ └── msdax.js │ │ │ │ │ ├── mysql │ │ │ │ │ │ └── mysql.js │ │ │ │ │ ├── objective-c │ │ │ │ │ │ └── objective-c.js │ │ │ │ │ ├── pascal │ │ │ │ │ │ └── pascal.js │ │ │ │ │ ├── pascaligo │ │ │ │ │ │ └── pascaligo.js │ │ │ │ │ ├── perl │ │ │ │ │ │ └── perl.js │ │ │ │ │ ├── pgsql │ │ │ │ │ │ └── pgsql.js │ │ │ │ │ ├── php │ │ │ │ │ │ └── php.js │ │ │ │ │ ├── pla │ │ │ │ │ │ └── pla.js │ │ │ │ │ ├── postiats │ │ │ │ │ │ └── postiats.js │ │ │ │ │ ├── powerquery │ │ │ │ │ │ └── powerquery.js │ │ │ │ │ ├── powershell │ │ │ │ │ │ └── powershell.js │ │ │ │ │ ├── protobuf │ │ │ │ │ │ └── protobuf.js │ │ │ │ │ ├── pug │ │ │ │ │ │ └── pug.js │ │ │ │ │ ├── python │ │ │ │ │ │ └── python.js │ │ │ │ │ ├── qsharp │ │ │ │ │ │ └── qsharp.js │ │ │ │ │ ├── r │ │ │ │ │ │ └── r.js │ │ │ │ │ ├── razor │ │ │ │ │ │ └── razor.js │ │ │ │ │ ├── redis │ │ │ │ │ │ └── redis.js │ │ │ │ │ ├── redshift │ │ │ │ │ │ └── redshift.js │ │ │ │ │ ├── restructuredtext │ │ │ │ │ │ └── restructuredtext.js │ │ │ │ │ ├── ruby │ │ │ │ │ │ └── ruby.js │ │ │ │ │ ├── rust │ │ │ │ │ │ └── rust.js │ │ │ │ │ ├── sb │ │ │ │ │ │ └── sb.js │ │ │ │ │ ├── scala │ │ │ │ │ │ └── scala.js │ │ │ │ │ ├── scheme │ │ │ │ │ │ └── scheme.js │ │ │ │ │ ├── scss │ │ │ │ │ │ └── scss.js │ │ │ │ │ ├── shell │ │ │ │ │ │ └── shell.js │ │ │ │ │ ├── solidity │ │ │ │ │ │ └── solidity.js │ │ │ │ │ ├── sophia │ │ │ │ │ │ └── sophia.js │ │ │ │ │ ├── sparql │ │ │ │ │ │ └── sparql.js │ │ │ │ │ ├── sql │ │ │ │ │ │ └── sql.js │ │ │ │ │ ├── st │ │ │ │ │ │ └── st.js │ │ │ │ │ ├── swift │ │ │ │ │ │ └── swift.js │ │ │ │ │ ├── systemverilog │ │ │ │ │ │ └── systemverilog.js │ │ │ │ │ ├── tcl │ │ │ │ │ │ └── tcl.js │ │ │ │ │ ├── twig │ │ │ │ │ │ └── twig.js │ │ │ │ │ ├── typescript │ │ │ │ │ │ └── typescript.js │ │ │ │ │ ├── typespec │ │ │ │ │ │ └── typespec.js │ │ │ │ │ ├── vb │ │ │ │ │ │ └── vb.js │ │ │ │ │ ├── wgsl │ │ │ │ │ │ └── wgsl.js │ │ │ │ │ ├── xml │ │ │ │ │ │ └── xml.js │ │ │ │ │ └── yaml │ │ │ │ │ │ └── yaml.js │ │ │ │ │ ├── editor │ │ │ │ │ ├── editor.main.css │ │ │ │ │ ├── editor.main.js │ │ │ │ │ ├── editor.main.nls.de.js │ │ │ │ │ ├── editor.main.nls.es.js │ │ │ │ │ ├── editor.main.nls.fr.js │ │ │ │ │ ├── editor.main.nls.it.js │ │ │ │ │ ├── editor.main.nls.ja.js │ │ │ │ │ ├── editor.main.nls.js │ │ │ │ │ ├── editor.main.nls.ko.js │ │ │ │ │ ├── editor.main.nls.ru.js │ │ │ │ │ ├── editor.main.nls.zh-cn.js │ │ │ │ │ └── editor.main.nls.zh-tw.js │ │ │ │ │ ├── language │ │ │ │ │ ├── css │ │ │ │ │ │ ├── cssMode.js │ │ │ │ │ │ └── cssWorker.js │ │ │ │ │ ├── html │ │ │ │ │ │ ├── htmlMode.js │ │ │ │ │ │ └── htmlWorker.js │ │ │ │ │ ├── json │ │ │ │ │ │ ├── jsonMode.js │ │ │ │ │ │ └── jsonWorker.js │ │ │ │ │ └── typescript │ │ │ │ │ │ ├── tsMode.js │ │ │ │ │ │ └── tsWorker.js │ │ │ │ │ └── loader.js │ │ │ ├── monaco-loader.js │ │ │ ├── popper.min.js │ │ │ ├── quill-2-0-3.js │ │ │ ├── quill-2-0-3.min.js │ │ │ ├── socket.io.min.js │ │ │ └── tippy.min.js │ │ ├── managerClabEditor.js │ │ ├── managerCyTextBox.js │ │ ├── managerGroupManagement.js │ │ ├── managerLayoutAlgo.js │ │ ├── managerOnChangeFramework.js │ │ ├── managerSocketDataEnrichment.js │ │ ├── managerSvg.js │ │ └── managerVscodeWebview.js │ │ └── template │ │ └── vscodeHtmlTemplate.ts ├── topoViewerEditor │ ├── backend │ │ └── topoViewerEditorWebUiFacade.ts │ ├── readme.md │ └── webview-ui │ │ ├── managerCytoscapeFetchAndLoad.ts │ │ ├── managerCytoscapeStyle.ts │ │ ├── managerGroupManager.ts │ │ ├── managerViewportButtons.ts │ │ ├── managerViewportPanels.ts │ │ ├── managerVscodeWebview.ts │ │ ├── template │ │ └── vscodeHtmlTemplate.ts │ │ └── topoViewerEditorEngine.ts ├── treeView │ ├── common.ts │ ├── helpFeedbackProvider.ts │ ├── inspector.ts │ ├── localLabsProvider.ts │ └── runningLabsProvider.ts ├── utils.ts ├── webview │ ├── inspect.css │ ├── inspectHtml.ts │ ├── nodeImpairments.css │ └── nodeImpairmentsHtml.ts └── welcomePage.ts ├── test ├── README.md ├── helpers │ ├── clabCommand-stub.ts │ ├── command-class-stub.ts │ ├── command-stub.ts │ ├── containerlabUtils-stub.ts │ ├── extension-stub.ts │ ├── utils-stub.ts │ └── vscode-stub.ts ├── tsconfig.json └── unit │ ├── commands │ ├── addToWorkspace.test.ts │ ├── attachShell.test.ts │ ├── clabCommand.test.ts │ ├── copy.test.ts │ ├── deploy.test.ts │ ├── openFolderInNewWindow.test.ts │ └── openLabFile.test.ts │ ├── extension │ └── refreshSshxSessions.test.ts │ ├── topoViewer │ └── buildCytoscapeElements.test.ts │ ├── topoViewerEditor │ ├── invalidYamlSkipReload.test.ts │ ├── linkEndpointValidation.test.ts │ ├── loadOnce.test.ts │ └── manualSaveReload.test.ts │ ├── treeView │ ├── common.test.ts │ └── localLabsProvider.test.ts │ └── utils │ ├── clabSchema.test.ts │ ├── normalizeLabPath.test.ts │ ├── stripAnsi.test.ts │ ├── stripFileName.test.ts │ └── titleCase.test.ts ├── tsconfig.json └── webpack.config.js /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "npm" 9 | directory: "/" 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | dist 3 | node_modules 4 | .vscode-test/ 5 | topoViewerData 6 | .vscode/ 7 | package.json 8 | .vscode/launch.json 9 | .DS_Store 10 | **/.DS_Store 11 | *.vsix 12 | mochawesome-report/ 13 | clab-*/ 14 | *.clab.yml* -------------------------------------------------------------------------------- /.mocharc.json: -------------------------------------------------------------------------------- 1 | { 2 | "reporter": "mochawesome", 3 | "reporter-option": [ 4 | "reportDir=mochawesome-report", 5 | "reportFilename=report", 6 | "quiet=true" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | # Development infrastructure 2 | .vscode/** 3 | .github/** 4 | .gitignore 5 | .eslintrc.json 6 | .eslintignore 7 | .yarnrc 8 | tsconfig.json 9 | eslint.config.mjs 10 | webpack.config.js 11 | Makefile 12 | vsc-extension-quickstart.md 13 | 14 | # Source files - only bundle compiled output 15 | src/** 16 | 17 | # Include static HTML assets needed at runtime 18 | !src/webview/*.css 19 | !src/topoViewer/webview-ui/html-static/** 20 | 21 | # If you still need specific source files at runtime, selectively include them with: 22 | node_modules/** 23 | out/** 24 | 25 | # Build artifacts 26 | **/*.map 27 | **/*.ts 28 | *.vsix 29 | 30 | # Test files 31 | test.clab.yml 32 | **/*.test.js 33 | **/__tests__/** 34 | **/__mocks__/** 35 | 36 | #clab files 37 | clab-*/ 38 | *.clab.yml* -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | // eslint.config.mjs – works with ESLint 9+ 2 | import eslint from '@eslint/js'; 3 | import tseslint from 'typescript-eslint'; 4 | 5 | export default [ 6 | /* ─── files & globs ESLint must ignore ─────────────────────────── */ 7 | { 8 | ignores: [ 9 | '**/*.js', // ← ignore *all* JavaScript bundles 10 | 'out/**', 11 | 'dist/**', 12 | 'node_modules/**', 13 | '.vscode-test.mjs' // VS Code test harness 14 | ] 15 | }, 16 | 17 | /* ---------- every other JS/JSON file ---------- */ 18 | eslint.configs.recommended, // same as "eslint:recommended" 19 | 20 | /* ---------- TypeScript (syntax + type-aware) ---------- */ 21 | { 22 | files: ['**/*.ts', '**/*.tsx'], 23 | languageOptions: { 24 | parser: tseslint.parser, 25 | parserOptions: { 26 | project: ['./tsconfig.json', './test/tsconfig.json'], 27 | ecmaVersion: 'latest', 28 | sourceType: 'module' 29 | }, 30 | globals: { 31 | console: 'readonly', 32 | process: 'readonly', 33 | Buffer: 'readonly', 34 | require: 'readonly', 35 | setTimeout: 'readonly', 36 | clearTimeout: 'readonly', 37 | setInterval: 'readonly', 38 | clearInterval: 'readonly', 39 | window: 'readonly', 40 | document: 'readonly', 41 | fetch: 'readonly' 42 | } 43 | }, 44 | plugins: { '@typescript-eslint': tseslint.plugin }, 45 | // merge the two rule-sets 46 | rules: { 47 | ...tseslint.configs.recommended.rules, 48 | ...tseslint.configs.recommendedTypeChecked.rules, 49 | // disallow any trailing whitespace 50 | 51 | 'no-trailing-spaces': ['error', { 52 | skipBlankLines: false, // also flag lines that are purely whitespace 53 | ignoreComments: false // also flag whitespace at end of comments 54 | }] 55 | 56 | } 57 | } 58 | ]; -------------------------------------------------------------------------------- /resources/containerlab-icon-theme.json: -------------------------------------------------------------------------------- 1 | { 2 | "iconDefinitions": { 3 | "clab": { "iconPath": "./containerlab.svg" } 4 | }, 5 | "fileExtensions": { 6 | "clab.yml": "clab", 7 | "clab.yaml": "clab" 8 | }, 9 | "fileNames": { 10 | ".clab.yml": "clab", 11 | ".clab.yaml": "clab" 12 | }, 13 | "folderNames": {}, 14 | "languageIds": {} 15 | } 16 | -------------------------------------------------------------------------------- /resources/containerlab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srl-labs/vscode-containerlab/a059cde4e4ed871ea8da5fd0289ca08539c1e3e5/resources/containerlab.png -------------------------------------------------------------------------------- /resources/containerlab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /resources/exec_cmd.json: -------------------------------------------------------------------------------- 1 | { 2 | "nokia_srlinux": "sr_cli", 3 | "cisco_xrd": "/pkg/bin/xr_cli.sh" 4 | } -------------------------------------------------------------------------------- /resources/icons/ethernet-port-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /resources/icons/ethernet-port-green.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /resources/icons/ethernet-port-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /resources/icons/ethernet-port-red.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /resources/icons/partial.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /resources/icons/running.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /resources/icons/stopped.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /resources/icons/undeployed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /resources/icons/wireshark_dark.svg: -------------------------------------------------------------------------------- 1 | 3 | 6 | -------------------------------------------------------------------------------- /resources/icons/wireshark_light.svg: -------------------------------------------------------------------------------- 1 | 3 | 6 | -------------------------------------------------------------------------------- /resources/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srl-labs/vscode-containerlab/a059cde4e4ed871ea8da5fd0289ca08539c1e3e5/resources/screenshot.png -------------------------------------------------------------------------------- /resources/ssh_users.json: -------------------------------------------------------------------------------- 1 | { 2 | "nokia_srlinux": "admin", 3 | "nokia_sros": "admin", 4 | "cisco_xrd": "clab", 5 | "cisco_xr9vk": "clab", 6 | "arista_ceos": "admin", 7 | "juniper_crpd": "root" 8 | } -------------------------------------------------------------------------------- /src/commands/addToWorkspace.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import * as path from "path"; 3 | import { ClabLabTreeNode } from "../treeView/common"; 4 | 5 | export async function addLabFolderToWorkspace(node: ClabLabTreeNode) { 6 | if (!node.labPath.absolute) { 7 | return new Error("No lab path found for this lab") 8 | } 9 | 10 | // Get the folder that contains the .clab.yaml 11 | const folderPath = path.dirname(node.labPath.absolute); 12 | 13 | // Add it to the current workspace 14 | const existingCount = vscode.workspace.workspaceFolders 15 | ? vscode.workspace.workspaceFolders.length 16 | : 0; 17 | 18 | vscode.workspace.updateWorkspaceFolders( 19 | existingCount, 20 | null, 21 | { 22 | uri: vscode.Uri.file(folderPath), 23 | name: node.label // or any other display name 24 | } 25 | ); 26 | 27 | vscode.window.showInformationMessage( 28 | `Added "${node.name}" to your workspace.` 29 | ); 30 | } 31 | -------------------------------------------------------------------------------- /src/commands/attachShell.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import * as utils from "../utils" 3 | import { execCommandInTerminal } from "./command"; 4 | import { execCmdMapping } from "../extension"; 5 | import { ClabContainerTreeNode } from "../treeView/common"; 6 | 7 | export function attachShell(node: ClabContainerTreeNode) { 8 | if (!node) { 9 | return new Error("No container node selected.") 10 | } 11 | 12 | const containerId = node.cID; 13 | const containerKind = node.kind; 14 | const containerLabel = node.label || "Container"; 15 | 16 | if (!containerId) { return vscode.window.showErrorMessage('No containerId for shell attach.'); } 17 | if (!containerKind) { return vscode.window.showErrorMessage('No container kind for shell attach.'); } 18 | 19 | let execCmd = execCmdMapping[containerKind] || "sh"; 20 | 21 | const config = vscode.workspace.getConfiguration("containerlab"); 22 | const userExecMapping = config.get("node.execCommandMapping") as { [key: string]: string }; 23 | const runtime = config.get("runtime", "docker"); 24 | 25 | execCmd = userExecMapping[containerKind] || execCmd; 26 | 27 | execCommandInTerminal( 28 | `${utils.getSudo()}${runtime} exec -it ${containerId} ${execCmd}`, 29 | `Shell - ${containerLabel}` 30 | ); 31 | } -------------------------------------------------------------------------------- /src/commands/clabCommand.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import * as cmd from './command'; 3 | import { ClabLabTreeNode } from "../treeView/common"; 4 | 5 | /** 6 | * A helper class to build a 'containerlab' command (with optional sudo, etc.) 7 | * and run it either in the Output channel or in a Terminal. 8 | */ 9 | export class ClabCommand extends cmd.Command { 10 | private node?: ClabLabTreeNode; 11 | private action: string; 12 | private runtime: string; 13 | 14 | constructor( 15 | action: string, 16 | node: ClabLabTreeNode, 17 | spinnerMsg?: cmd.SpinnerMsg, 18 | useTerminal?: boolean, 19 | terminalName?: string 20 | ) { 21 | const options: cmd.CmdOptions = { 22 | command: "containerlab", 23 | useSpinner: useTerminal ? false : true, 24 | spinnerMsg, 25 | terminalName, 26 | }; 27 | super(options); 28 | 29 | // Read the runtime from configuration. 30 | const config = vscode.workspace.getConfiguration("containerlab"); 31 | this.runtime = config.get("runtime", "docker"); 32 | 33 | this.action = action; 34 | this.node = node instanceof ClabLabTreeNode ? node : undefined; 35 | } 36 | 37 | public async run(flags?: string[]): Promise { 38 | // Try node.details -> fallback to active editor 39 | let labPath: string; 40 | if (!this.node) { 41 | const editor = vscode.window.activeTextEditor; 42 | if (!editor) { 43 | vscode.window.showErrorMessage( 44 | 'No lab node or topology file selected' 45 | ); 46 | return; 47 | } 48 | labPath = editor.document.uri.fsPath; 49 | } 50 | else { 51 | labPath = this.node.labPath.absolute 52 | } 53 | 54 | if (!labPath) { 55 | vscode.window.showErrorMessage( 56 | `No labPath found for command "${this.action}".` 57 | ); 58 | return; 59 | } 60 | 61 | // Build the command 62 | const config = vscode.workspace.getConfiguration("containerlab"); 63 | let extraFlags: string[] = []; 64 | if (this.action === "deploy" || this.action === "redeploy") { 65 | const extra = config.get("deploy.extraArgs", ""); 66 | if (extra) { 67 | extraFlags = extra.split(/\s+/).filter(f => f); 68 | } 69 | } else if (this.action === "destroy") { 70 | const extra = config.get("destroy.extraArgs", ""); 71 | if (extra) { 72 | extraFlags = extra.split(/\s+/).filter(f => f); 73 | } 74 | } 75 | 76 | const allFlags = [...extraFlags]; 77 | if (flags) { 78 | allFlags.push(...flags); 79 | } 80 | 81 | const cmdArgs = [this.action, "-r", this.runtime, ...allFlags, "-t", labPath]; 82 | 83 | // Return the promise from .execute() so we can await 84 | return this.execute(cmdArgs); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/commands/clonePopularRepo.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import { cloneRepoFromUrl } from './cloneRepo'; 3 | import { fetchPopularRepos, fallbackRepos, PopularRepo } from '../helpers/popularLabs'; 4 | 5 | async function getRepos(): Promise { 6 | try { 7 | return await fetchPopularRepos(); 8 | } catch { 9 | return fallbackRepos; 10 | } 11 | } 12 | 13 | export async function clonePopularRepo() { 14 | const repos = await getRepos(); 15 | 16 | const items = repos.map((r) => ({ 17 | label: r.name, 18 | description: r.description, 19 | detail: `⭐ ${r.stargazers_count}`, 20 | repo: r.html_url, 21 | })); 22 | 23 | const pick = await vscode.window.showQuickPick(items, { 24 | title: 'Clone popular lab', 25 | placeHolder: 'Select a repository to clone', 26 | }); 27 | 28 | if (!pick) { 29 | return; 30 | } 31 | 32 | await cloneRepoFromUrl(pick.repo); 33 | } 34 | -------------------------------------------------------------------------------- /src/commands/cloneRepo.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { exec } from "child_process"; 3 | import * as utils from "../utils"; 4 | import * as path from "path"; 5 | import * as os from "os"; 6 | import * as fs from "fs"; 7 | import { outputChannel } from "../extension"; 8 | 9 | export async function cloneRepoFromUrl(repoUrl?: string) { 10 | if (!repoUrl) { 11 | repoUrl = await vscode.window.showInputBox({ 12 | title: "Git repository URL", 13 | placeHolder: "https://github.com/user/repo.git", 14 | prompt: "Enter the repository to clone" 15 | }); 16 | if (!repoUrl) { 17 | return; 18 | } 19 | } 20 | 21 | const workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath; 22 | const destBase = workspaceRoot ?? path.join(os.homedir(), ".clab"); 23 | 24 | if (!fs.existsSync(destBase)) { 25 | fs.mkdirSync(destBase, { recursive: true }); 26 | } 27 | 28 | const repoName = path.basename(repoUrl.replace(/\.git$/, "")); 29 | const dest = path.join(destBase, repoName); 30 | 31 | outputChannel.appendLine(`[INFO] git clone ${repoUrl} ${dest}`); 32 | 33 | exec(`${utils.getSudo()}git clone ${repoUrl} "${dest}"`, (error, stdout, stderr) => { 34 | if (stdout) { outputChannel.append(stdout); } 35 | if (stderr) { outputChannel.append(stderr); } 36 | if (error) { 37 | vscode.window.showErrorMessage(`Git clone failed: ${error.message}`); 38 | outputChannel.appendLine(`[ERROR] git clone failed: ${error.message}`); 39 | return; 40 | } 41 | vscode.window.showInformationMessage(`Repository cloned to ${dest}`); 42 | vscode.commands.executeCommand('containerlab.refresh'); 43 | }); 44 | } 45 | 46 | export async function cloneRepo() { 47 | const choice = await vscode.window.showQuickPick( 48 | [ 49 | { label: 'Clone via Git URL', action: 'url' }, 50 | { label: 'Clone popular lab', action: 'popular' }, 51 | ], 52 | { title: 'Clone repository' } 53 | ); 54 | 55 | if (!choice) { 56 | return; 57 | } 58 | 59 | if (choice.action === 'url') { 60 | await cloneRepoFromUrl(); 61 | } else if (choice.action === 'popular') { 62 | const mod = await import('./clonePopularRepo'); 63 | await mod.clonePopularRepo(); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/commands/deleteLab.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import * as fs from 'fs'; 3 | import * as path from 'path'; 4 | import { ClabLabTreeNode } from '../treeView/common'; 5 | import { favoriteLabs, extensionContext } from '../extension'; 6 | 7 | export async function deleteLab(node: ClabLabTreeNode) { 8 | const filePath = node?.labPath?.absolute; 9 | if (!filePath) { 10 | vscode.window.showErrorMessage('No lab file found.'); 11 | return; 12 | } 13 | 14 | const confirm = await vscode.window.showWarningMessage( 15 | `Delete lab "${path.basename(filePath)}"? This action cannot be undone.`, 16 | { modal: true }, 17 | 'Delete' 18 | ); 19 | if (confirm !== 'Delete') { 20 | return; 21 | } 22 | 23 | try { 24 | await fs.promises.unlink(filePath); 25 | favoriteLabs.delete(filePath); 26 | if (extensionContext) { 27 | await extensionContext.globalState.update('favoriteLabs', Array.from(favoriteLabs)); 28 | } 29 | vscode.window.showInformationMessage(`Deleted lab file ${node.label}`); 30 | vscode.commands.executeCommand('containerlab.refresh'); 31 | } catch (err) { 32 | const msg = err instanceof Error ? err.message : String(err); 33 | vscode.window.showErrorMessage(`Failed to delete lab: ${msg}`); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/commands/deploy.ts: -------------------------------------------------------------------------------- 1 | import { ClabLabTreeNode } from "../treeView/common"; 2 | import { ClabCommand } from "./clabCommand"; 3 | import { SpinnerMsg } from "./command"; 4 | import * as vscode from "vscode"; 5 | import { deployPopularLab } from "./deployPopular"; 6 | 7 | export function deploy(node: ClabLabTreeNode) { 8 | const spinnerMessages: SpinnerMsg = { 9 | progressMsg: "Deploying Lab... ", 10 | successMsg: "Lab deployed successfully!" 11 | }; 12 | const deployCmd = new ClabCommand("deploy", node, spinnerMessages); 13 | deployCmd.run(); 14 | } 15 | 16 | export async function deployCleanup(node: ClabLabTreeNode) { 17 | const config = vscode.workspace.getConfiguration("containerlab"); 18 | const skipWarning = config.get("skipCleanupWarning", false); 19 | if (!skipWarning) { 20 | const selection = await vscode.window.showWarningMessage( 21 | "WARNING: Deploy (cleanup) will remove all configuration artifacts.. Are you sure you want to proceed?", 22 | { modal: true }, 23 | "Yes", "Don't warn me again" 24 | ); 25 | if (!selection) { 26 | return; // user cancelled 27 | } 28 | if (selection === "Don't warn me again") { 29 | await config.update("skipCleanupWarning", true, vscode.ConfigurationTarget.Global); 30 | } 31 | } 32 | const spinnerMessages: SpinnerMsg = { 33 | progressMsg: "Deploying Lab (cleanup)... ", 34 | successMsg: "Lab deployed (cleanup) successfully!" 35 | }; 36 | const deployCmd = new ClabCommand("deploy", node, spinnerMessages); 37 | deployCmd.run(["-c"]); 38 | } 39 | 40 | export async function deploySpecificFile() { 41 | // Offer the user a choice between selecting a local file or providing a URL. 42 | const mode = await vscode.window.showQuickPick( 43 | ["Select local file", "Enter Git/HTTP URL", "Choose from popular labs"], 44 | { title: "Deploy from" } 45 | ); 46 | 47 | if (!mode) { 48 | return; 49 | } 50 | 51 | let labRef: string | undefined; 52 | 53 | if (mode === "Select local file") { 54 | const opts: vscode.OpenDialogOptions = { 55 | title: "Select containerlab topology file", 56 | filters: { 57 | yaml: ["yaml", "yml"], 58 | }, 59 | }; 60 | 61 | const uri = await vscode.window.showOpenDialog(opts); 62 | if (!uri || !uri.length) { 63 | return; 64 | } 65 | labRef = uri[0].fsPath; 66 | } else if (mode === "Enter Git/HTTP URL") { 67 | labRef = await vscode.window.showInputBox({ 68 | title: "Git/HTTP URL", 69 | placeHolder: "https://github.com/user/repo or https://example.com/lab.yml", 70 | prompt: "Provide a repository or file URL", 71 | }); 72 | if (!labRef) { 73 | return; 74 | } 75 | } else { 76 | await deployPopularLab(); 77 | return; 78 | } 79 | 80 | const tempNode = new ClabLabTreeNode( 81 | "", 82 | vscode.TreeItemCollapsibleState.None, 83 | { absolute: labRef, relative: "" } 84 | ); 85 | deploy(tempNode); 86 | } -------------------------------------------------------------------------------- /src/commands/deployPopular.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import { deploy } from './deploy'; 3 | import { fetchPopularRepos, fallbackRepos, PopularRepo } from '../helpers/popularLabs'; 4 | import { ClabLabTreeNode } from '../treeView/common'; 5 | 6 | async function getRepos(): Promise { 7 | try { 8 | return await fetchPopularRepos(); 9 | } catch { 10 | return fallbackRepos; 11 | } 12 | } 13 | 14 | export async function deployPopularLab() { 15 | const repos = await getRepos(); 16 | 17 | const items = repos.map((r) => ({ 18 | label: r.name, 19 | description: r.description, 20 | detail: `⭐ ${r.stargazers_count}`, 21 | repo: r.html_url, 22 | })); 23 | 24 | const pick = await vscode.window.showQuickPick(items, { 25 | title: 'Deploy popular lab', 26 | placeHolder: 'Select a repository to deploy', 27 | }); 28 | 29 | if (!pick) { 30 | return; 31 | } 32 | 33 | const node = new ClabLabTreeNode('', vscode.TreeItemCollapsibleState.None, { 34 | absolute: pick.repo, 35 | relative: '', 36 | }); 37 | deploy(node); 38 | } 39 | -------------------------------------------------------------------------------- /src/commands/destroy.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { ClabLabTreeNode } from "../treeView/common"; 3 | import { ClabCommand } from "./clabCommand"; 4 | import { SpinnerMsg } from "./command"; 5 | 6 | export function destroy(node: ClabLabTreeNode) { 7 | const spinnerMessages: SpinnerMsg = { 8 | progressMsg: "Destroying Lab... ", 9 | successMsg: "Lab destroyed successfully!" 10 | }; 11 | const destroyCmd = new ClabCommand("destroy", node, spinnerMessages); 12 | destroyCmd.run(); 13 | } 14 | 15 | export async function destroyCleanup(node: ClabLabTreeNode) { 16 | const config = vscode.workspace.getConfiguration("containerlab"); 17 | const skipWarning = config.get("skipCleanupWarning", false); 18 | if (!skipWarning) { 19 | const selection = await vscode.window.showWarningMessage( 20 | "WARNING: Destroy (cleanup) will remove all configuration artifacts.. Are you sure you want to proceed?", 21 | { modal: true }, 22 | "Yes", "Don't warn me again" 23 | ); 24 | if (!selection) { 25 | return; // user cancelled 26 | } 27 | if (selection === "Don't warn me again") { 28 | await config.update("skipCleanupWarning", true, vscode.ConfigurationTarget.Global); 29 | } 30 | } 31 | const spinnerMessages: SpinnerMsg = { 32 | progressMsg: "Destroying Lab (cleanup)... ", 33 | successMsg: "Lab destroyed (cleanup) successfully!" 34 | }; 35 | const destroyCmd = new ClabCommand("destroy", node, spinnerMessages); 36 | destroyCmd.run(["-c"]); 37 | } 38 | -------------------------------------------------------------------------------- /src/commands/dockerCommand.ts: -------------------------------------------------------------------------------- 1 | import * as cmd from './command'; 2 | import * as vscode from "vscode"; 3 | 4 | /** 5 | * A helper class to build a 'docker' command (with optional sudo, etc.) 6 | * and run it either in the Output channel or in a Terminal. 7 | */ 8 | export class DockerCommand extends cmd.Command { 9 | private action: string; 10 | 11 | constructor(action: string, spinnerMsg?: cmd.SpinnerMsg) { 12 | const config = vscode.workspace.getConfiguration("containerlab"); 13 | const runtime = config.get("runtime", "docker"); 14 | 15 | const options: cmd.CmdOptions = { 16 | command: runtime, 17 | useSpinner: true, 18 | spinnerMsg: spinnerMsg, 19 | }; 20 | super(options); 21 | 22 | this.action = action; 23 | } 24 | 25 | public run(containerID: string) { 26 | // Build the command 27 | const cmd = [this.action, containerID]; 28 | 29 | this.execute(cmd); 30 | } 31 | } -------------------------------------------------------------------------------- /src/commands/edgeshark.ts: -------------------------------------------------------------------------------- 1 | import { execCommandInTerminal } from "./command"; 2 | 3 | export async function installEdgeshark() { 4 | execCommandInTerminal("curl -sL \ 5 | https://github.com/siemens/edgeshark/raw/main/deployments/wget/docker-compose.yaml \ 6 | | DOCKER_DEFAULT_PLATFORM= docker compose -f - up -d", "Edgeshark Installation"); 7 | } 8 | 9 | export async function uninstallEdgeshark() { 10 | execCommandInTerminal("curl -sL \ 11 | https://github.com/siemens/edgeshark/raw/main/deployments/wget/docker-compose.yaml \ 12 | | DOCKER_DEFAULT_PLATFORM= docker compose -f - down", "Edgeshark Uninstallation"); 13 | } -------------------------------------------------------------------------------- /src/commands/favorite.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import { ClabLabTreeNode } from '../treeView/common'; 3 | import { favoriteLabs, extensionContext } from '../extension'; 4 | 5 | export async function toggleFavorite(node: ClabLabTreeNode) { 6 | if (!node?.labPath?.absolute) { 7 | return; 8 | } 9 | const absPath = node.labPath.absolute; 10 | if (favoriteLabs.has(absPath)) { 11 | favoriteLabs.delete(absPath); 12 | await extensionContext.globalState.update('favoriteLabs', Array.from(favoriteLabs)); 13 | vscode.window.showInformationMessage('Removed favorite lab'); 14 | } else { 15 | favoriteLabs.add(absPath); 16 | await extensionContext.globalState.update('favoriteLabs', Array.from(favoriteLabs)); 17 | vscode.window.showInformationMessage('Marked lab as favorite'); 18 | } 19 | vscode.commands.executeCommand('containerlab.refresh'); 20 | } 21 | -------------------------------------------------------------------------------- /src/commands/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./command"; 2 | export * from "./deploy"; 3 | export * from "./destroy"; 4 | export * from "./redeploy"; 5 | export * from "./save"; 6 | export * from "./openLabFile"; 7 | export * from "./startNode"; 8 | export * from "./stopNode"; 9 | export * from "./attachShell"; 10 | export * from "./ssh"; 11 | export * from "./nodeImpairments"; 12 | export * from "./showLogs"; 13 | export * from "./graph"; 14 | export * from "./copy"; 15 | export * from "./addToWorkspace"; 16 | export * from "./openFolderInNewWindow"; 17 | export * from "./inspect"; 18 | export * from "./capture"; 19 | export * from "./impairments"; 20 | export * from "./edgeshark"; 21 | export * from "./openBrowser"; 22 | export * from "./telnet"; 23 | export * from "./favorite"; 24 | export * from "./deleteLab"; 25 | export * from "./cloneRepo"; 26 | export * from "./deployPopular"; 27 | export * from "./clonePopularRepo"; 28 | export * from "./openLink"; 29 | export * from "./sshxShare"; 30 | -------------------------------------------------------------------------------- /src/commands/openFolderInNewWindow.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import * as path from "path"; 3 | import { ClabLabTreeNode } from "../treeView/common"; 4 | 5 | export async function openFolderInNewWindow(node: ClabLabTreeNode) { 6 | if (!node.labPath.absolute) { 7 | vscode.window.showErrorMessage("No lab path found for this lab."); 8 | return; 9 | } 10 | 11 | // The folder that contains the .clab.(yml|yaml) 12 | const folderPath = path.dirname(node.labPath.absolute); 13 | const uri = vscode.Uri.file(folderPath); 14 | 15 | // Force opening that folder in a brand-new window 16 | await vscode.commands.executeCommand("vscode.openFolder", uri, { 17 | forceNewWindow: true 18 | }); 19 | } -------------------------------------------------------------------------------- /src/commands/openLabFile.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { ClabLabTreeNode } from "../treeView/common"; 3 | 4 | export function openLabFile(node: ClabLabTreeNode) { 5 | if (!node) { 6 | vscode.window.showErrorMessage('No lab node selected.'); 7 | return; 8 | } 9 | 10 | const labPath = node.labPath.absolute; 11 | if (!labPath) { 12 | vscode.window.showErrorMessage('No labPath found.'); 13 | return; 14 | } 15 | 16 | const uri = vscode.Uri.file(labPath); 17 | vscode.commands.executeCommand('vscode.open', uri); 18 | } -------------------------------------------------------------------------------- /src/commands/openLink.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | 3 | export function openLink(url: string): void { 4 | vscode.env.openExternal(vscode.Uri.parse(url)); 5 | } 6 | -------------------------------------------------------------------------------- /src/commands/redeploy.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { ClabLabTreeNode } from "../treeView/common"; 3 | import { ClabCommand } from "./clabCommand"; 4 | import { SpinnerMsg } from "./command"; 5 | 6 | export function redeploy(node: ClabLabTreeNode) { 7 | const spinnerMessages: SpinnerMsg = { 8 | progressMsg: "Redeploying Lab... ", 9 | successMsg: "Lab redeployed successfully!" 10 | }; 11 | const redeployCmd = new ClabCommand("redeploy", node, spinnerMessages); 12 | redeployCmd.run(); 13 | } 14 | 15 | export async function redeployCleanup(node: ClabLabTreeNode) { 16 | const config = vscode.workspace.getConfiguration("containerlab"); 17 | const skipWarning = config.get("skipCleanupWarning", false); 18 | if (!skipWarning) { 19 | const selection = await vscode.window.showWarningMessage( 20 | "WARNING: Redeploy (cleanup) will remove all configuration artifacts.. Are you sure you want to proceed?", 21 | { modal: true }, 22 | "Yes", "Don't warn me again" 23 | ); 24 | if (!selection) { 25 | return; // user cancelled 26 | } 27 | if (selection === "Don't warn me again") { 28 | await config.update("skipCleanupWarning", true, vscode.ConfigurationTarget.Global); 29 | } 30 | } 31 | 32 | const spinnerMessages: SpinnerMsg = { 33 | progressMsg: "Redeploying Lab (cleanup)... ", 34 | successMsg: "Lab redeployed (cleanup) successfully!" 35 | }; 36 | const redeployCmd = new ClabCommand("redeploy", node, spinnerMessages); 37 | redeployCmd.run(["-c"]); 38 | } 39 | -------------------------------------------------------------------------------- /src/commands/save.ts: -------------------------------------------------------------------------------- 1 | // src/commands/save.ts 2 | import * as vscode from "vscode"; 3 | import { SpinnerMsg } from "./command"; 4 | import { ClabCommand } from "./clabCommand"; 5 | import { ClabLabTreeNode, ClabContainerTreeNode } from "../treeView/common"; 6 | import * as path from "path"; 7 | 8 | /** 9 | * Save the entire lab configuration. 10 | * Executes: containerlab -t save 11 | */ 12 | export async function saveLab(node: ClabLabTreeNode) { 13 | if (!node) { 14 | vscode.window.showErrorMessage("No lab node selected."); 15 | return; 16 | } 17 | const labPath = node.labPath && node.labPath.absolute; 18 | if (!labPath) { 19 | vscode.window.showErrorMessage("No labPath found for the lab."); 20 | return; 21 | } 22 | 23 | const spinnerMessages: SpinnerMsg = { 24 | progressMsg: `Saving lab configuration for ${node.label}...`, 25 | successMsg: `Lab configuration for ${node.label} saved successfully!`, 26 | failMsg: `Could not save lab configuration for ${node.label}` 27 | }; 28 | 29 | // Create a ClabCommand for "save" using the lab node. 30 | const saveCmd = new ClabCommand("save", node, spinnerMessages); 31 | // ClabCommand automatically appends "-t ". 32 | saveCmd.run(); 33 | } 34 | 35 | /** 36 | * Save the configuration for a specific container node. 37 | * Executes: containerlab -t save --node-filter 38 | */ 39 | export async function saveNode(node: ClabContainerTreeNode) { 40 | if (!node) { 41 | vscode.window.showErrorMessage("No container node selected."); 42 | return; 43 | } 44 | 45 | if (!node.labPath || !node.labPath.absolute) { 46 | vscode.window.showErrorMessage("Error: Could not determine lab path for this node."); 47 | return; 48 | } 49 | 50 | // Extract the short node name by removing the "clab-{labname}-" prefix 51 | const shortNodeName = node.name.replace(/^clab-[^-]+-/, ''); 52 | 53 | const spinnerMessages: SpinnerMsg = { 54 | progressMsg: `Saving configuration for node ${shortNodeName}...`, 55 | successMsg: `Configuration for node ${shortNodeName} saved successfully!`, 56 | failMsg: `Could not save configuration for node ${shortNodeName}` 57 | }; 58 | 59 | const tempLabNode = new ClabLabTreeNode( 60 | path.basename(node.labPath.absolute), 61 | vscode.TreeItemCollapsibleState.None, 62 | node.labPath, 63 | undefined, 64 | undefined, 65 | undefined, 66 | "containerlabLabDeployed" 67 | ); 68 | 69 | const saveCmd = new ClabCommand("save", tempLabNode, spinnerMessages); 70 | // Use --node-filter instead of -n and use the short name 71 | saveCmd.run(["--node-filter", shortNodeName]); 72 | } 73 | -------------------------------------------------------------------------------- /src/commands/showLogs.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { execCommandInTerminal } from "./command"; 3 | import { ClabContainerTreeNode } from "../treeView/common"; 4 | import { getSudo } from "../utils"; 5 | 6 | export function showLogs(node: ClabContainerTreeNode) { 7 | if (!node) { 8 | vscode.window.showErrorMessage('No container node selected.'); 9 | return; 10 | } 11 | const containerId = node.cID; 12 | const containerLabel = node.label || "Container"; 13 | 14 | if (!containerId) { 15 | vscode.window.showErrorMessage('No containerID for logs.'); 16 | return; 17 | } 18 | 19 | const config = vscode.workspace.getConfiguration("containerlab"); 20 | const runtime = config.get("runtime", "docker"); 21 | execCommandInTerminal( 22 | `${getSudo()}${runtime} logs -f ${containerId}`, 23 | `Logs - ${containerLabel}` 24 | ); 25 | } -------------------------------------------------------------------------------- /src/commands/ssh.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { execCommandInTerminal } from "./command"; 3 | import { ClabContainerTreeNode, ClabLabTreeNode } from "../treeView/common"; 4 | import { sshUserMapping } from "../extension"; 5 | 6 | export function sshToNode(node: ClabContainerTreeNode) { 7 | if (!node) { 8 | vscode.window.showErrorMessage('No container node selected.'); 9 | return; 10 | } 11 | 12 | let sshTarget: string | undefined; 13 | 14 | if(node.name) {sshTarget = node.name} 15 | else if(node.v6Address) {sshTarget = node.v6Address;} 16 | else if(node.v4Address) {sshTarget = node.v4Address} 17 | else if(node.cID) {sshTarget = node.cID} 18 | else { return vscode.window.showErrorMessage("No target to connect to container"); } 19 | 20 | // Get the SSH user mapping from user settings 21 | const config = vscode.workspace.getConfiguration("containerlab"); 22 | const userSshMapping = config.get("node.sshUserMapping") as { [key: string]: string }; 23 | 24 | // Use user setting first, then default mapping, then fallback to "admin" 25 | const sshUser = userSshMapping?.[node.kind] || sshUserMapping[node.kind] || "admin"; 26 | 27 | const containerLabel = node.label || "Container"; 28 | 29 | execCommandInTerminal(`ssh ${sshUser}@${sshTarget}`, `SSH - ${containerLabel}`); 30 | } 31 | 32 | export function sshToLab(node: ClabLabTreeNode) { 33 | if (!node) { 34 | vscode.window.showErrorMessage('No lab node selected.'); 35 | return; 36 | } 37 | 38 | if(!node.containers) { 39 | return vscode.window.showErrorMessage("No child containers to connect to"); 40 | } 41 | 42 | node.containers?.forEach( 43 | (node) => { 44 | sshToNode(node); 45 | } 46 | ) 47 | } -------------------------------------------------------------------------------- /src/commands/sshxShare.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { ClabLabTreeNode } from "../treeView/common"; 3 | import { outputChannel, sshxSessions, runningLabsProvider, refreshSshxSessions } from "../extension"; 4 | import { runWithSudo } from "../helpers/containerlabUtils"; 5 | 6 | function parseLink(output: string): string | undefined { 7 | const match = output.match(/https?:\/\/\S+/); 8 | return match ? match[0] : undefined; 9 | } 10 | 11 | export async function sshxAttach(node: ClabLabTreeNode) { 12 | if (!node || !node.name) { 13 | vscode.window.showErrorMessage("No lab selected for SSHX attach."); 14 | return; 15 | } 16 | try { 17 | const out = await runWithSudo(`containerlab tools sshx attach -l ${node.name}`, 'SSHX attach', outputChannel, 'containerlab', true, true) as string; 18 | const link = parseLink(out || ''); 19 | if (link) { 20 | sshxSessions.set(node.name, link); 21 | await vscode.env.clipboard.writeText(link); 22 | const choice = await vscode.window.showInformationMessage('SSHX link copied to clipboard.', 'Open Link'); 23 | if (choice === 'Open Link') { 24 | vscode.env.openExternal(vscode.Uri.parse(link)); 25 | } 26 | } else { 27 | vscode.window.showInformationMessage('SSHX session started but no link found.'); 28 | } 29 | } catch (err: any) { 30 | vscode.window.showErrorMessage(`Failed to attach SSHX: ${err.message || err}`); 31 | } 32 | await refreshSshxSessions(); 33 | // Run a soft refresh so tree items are rebuilt while reusing existing inspect data 34 | // This ensures the SSHX label updates without forcing a full inspect 35 | runningLabsProvider.softRefresh(); 36 | } 37 | 38 | export async function sshxDetach(node: ClabLabTreeNode) { 39 | if (!node || !node.name) { 40 | vscode.window.showErrorMessage("No lab selected for SSHX detach."); 41 | return; 42 | } 43 | try { 44 | await runWithSudo(`containerlab tools sshx detach -l ${node.name}`, 'SSHX detach', outputChannel); 45 | sshxSessions.delete(node.name); 46 | vscode.window.showInformationMessage('SSHX session detached'); 47 | } catch (err: any) { 48 | vscode.window.showErrorMessage(`Failed to detach SSHX: ${err.message || err}`); 49 | } 50 | await refreshSshxSessions(); 51 | // Changed from refreshWithoutDiscovery() to refresh() to update SSHX icons 52 | runningLabsProvider.refresh(); 53 | } 54 | 55 | export async function sshxReattach(node: ClabLabTreeNode) { 56 | if (!node || !node.name) { 57 | vscode.window.showErrorMessage("No lab selected for SSHX reattach."); 58 | return; 59 | } 60 | try { 61 | const out = await runWithSudo(`containerlab tools sshx reattach -l ${node.name}`, 'SSHX reattach', outputChannel, 'containerlab', true, true) as string; 62 | const link = parseLink(out || ''); 63 | if (link) { 64 | sshxSessions.set(node.name, link); 65 | await vscode.env.clipboard.writeText(link); 66 | const choice = await vscode.window.showInformationMessage('SSHX link copied to clipboard.', 'Open Link'); 67 | if (choice === 'Open Link') { 68 | vscode.env.openExternal(vscode.Uri.parse(link)); 69 | } 70 | } else { 71 | vscode.window.showInformationMessage('SSHX session reattached'); 72 | } 73 | } catch (err: any) { 74 | vscode.window.showErrorMessage(`Failed to reattach SSHX: ${err.message || err}`); 75 | } 76 | await refreshSshxSessions(); 77 | // Changed from refreshWithoutDiscovery() to refresh() to update SSHX icons 78 | runningLabsProvider.refresh(); 79 | } 80 | 81 | export function sshxCopyLink(link: string) { 82 | vscode.env.clipboard.writeText(link); 83 | vscode.window.showInformationMessage('SSHX link copied to clipboard'); 84 | } -------------------------------------------------------------------------------- /src/commands/startNode.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { SpinnerMsg } from "./command"; 3 | import { DockerCommand } from "./dockerCommand"; 4 | import { ClabContainerTreeNode } from "../treeView/common"; 5 | 6 | 7 | export async function startNode(node: ClabContainerTreeNode) { 8 | if (!node) { 9 | vscode.window.showErrorMessage("No container node selected."); 10 | return; 11 | } 12 | 13 | const containerId = node.cID; 14 | if (!containerId) { 15 | vscode.window.showErrorMessage("No containerId found."); 16 | return; 17 | } 18 | 19 | const spinnerMessages: SpinnerMsg = { 20 | progressMsg: `Starting node ${containerId}...`, 21 | successMsg: `Node '${containerId}' started successfully`, 22 | failMsg: `Could not start node '${containerId}'` 23 | }; 24 | 25 | const startCmd = new DockerCommand("start", spinnerMessages); 26 | startCmd.run(containerId); 27 | 28 | } -------------------------------------------------------------------------------- /src/commands/stopNode.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { SpinnerMsg } from "./command"; 3 | import { DockerCommand } from "./dockerCommand"; 4 | import { ClabContainerTreeNode } from "../treeView/common"; 5 | 6 | 7 | export async function stopNode(node: ClabContainerTreeNode) { 8 | if (!node) { 9 | vscode.window.showErrorMessage("No container node selected."); 10 | return; 11 | } 12 | 13 | const containerId = node.cID; 14 | if (!containerId) { 15 | vscode.window.showErrorMessage("No containerId found."); 16 | return; 17 | } 18 | 19 | const spinnerMessages: SpinnerMsg = { 20 | progressMsg: `Stopping node ${containerId}...`, 21 | successMsg: `Node '${containerId}' stopped successfully`, 22 | failMsg: `Could not stop node '${containerId}'` 23 | }; 24 | 25 | const startCmd = new DockerCommand("stop", spinnerMessages); 26 | startCmd.run(containerId); 27 | } -------------------------------------------------------------------------------- /src/commands/telnet.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import * as utils from "../utils" 3 | import { execCommandInTerminal } from "./command"; 4 | import { ClabContainerTreeNode } from "../treeView/common"; 5 | 6 | export function telnetToNode(node: ClabContainerTreeNode) { 7 | if (!node) { 8 | return new Error("No container node selected.") 9 | } 10 | 11 | const containerId = node.cID; 12 | const containerKind = node.kind; 13 | const containerLabel = node.label || "Container"; 14 | 15 | if (!containerId) { return vscode.window.showErrorMessage('No containerId for shell attach.'); } 16 | if (!containerKind) { return vscode.window.showErrorMessage('No container kind for shell attach.'); } 17 | 18 | 19 | const config = vscode.workspace.getConfiguration("containerlab"); 20 | const port = config.get("node.telnetPort") as number || 5000; 21 | const runtime = config.get("runtime", "docker"); 22 | 23 | execCommandInTerminal( 24 | `${utils.getSudo()}${runtime} exec -it ${containerId} telnet 127.0.0.1 ${port}`, 25 | `Telnet - ${containerLabel}` 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /src/helpers/popularLabs.ts: -------------------------------------------------------------------------------- 1 | import * as https from 'https'; 2 | 3 | export interface PopularRepo { 4 | name: string; 5 | html_url: string; 6 | description: string; 7 | stargazers_count: number; 8 | } 9 | 10 | export const fallbackRepos: PopularRepo[] = [ 11 | { 12 | name: 'srl-telemetry-lab', 13 | html_url: 'https://github.com/srl-labs/srl-telemetry-lab', 14 | description: 'A lab demonstrating the telemetry stack with SR Linux.', 15 | stargazers_count: 85, 16 | }, 17 | { 18 | name: 'netbox-nrx-clab', 19 | html_url: 'https://github.com/srl-labs/netbox-nrx-clab', 20 | description: 'NetBox NRX Containerlab integration, enabling network automation use cases.', 21 | stargazers_count: 65, 22 | }, 23 | { 24 | name: 'sros-anysec-macsec-lab', 25 | html_url: 'https://github.com/srl-labs/sros-anysec-macsec-lab', 26 | description: 'SR OS Anysec & MACsec lab with containerlab.', 27 | stargazers_count: 42, 28 | }, 29 | { 30 | name: 'intent-based-ansible-lab', 31 | html_url: 'https://github.com/srl-labs/intent-based-ansible-lab', 32 | description: 'Intent-based networking lab with Ansible and SR Linux.', 33 | stargazers_count: 38, 34 | }, 35 | { 36 | name: 'multivendor-evpn-lab', 37 | html_url: 'https://github.com/srl-labs/multivendor-evpn-lab', 38 | description: 'Multivendor EVPN lab with Nokia, Arista, and Cisco network operating systems.', 39 | stargazers_count: 78, 40 | }, 41 | ]; 42 | 43 | export function fetchPopularRepos(): Promise { 44 | const url = 45 | 'https://api.github.com/search/repositories?q=topic:clab-topo+org:srl-labs+fork:true&sort=stars&order=desc'; 46 | 47 | return new Promise((resolve, reject) => { 48 | const req = https.get( 49 | url, 50 | { 51 | headers: { 52 | 'User-Agent': 'VSCode-Containerlab-Extension', 53 | Accept: 'application/vnd.github.v3+json', 54 | }, 55 | }, 56 | (res) => { 57 | let data = ''; 58 | res.on('data', (chunk) => { 59 | data += chunk; 60 | }); 61 | res.on('end', () => { 62 | try { 63 | const parsed = JSON.parse(data); 64 | resolve(parsed.items || []); 65 | } catch (e) { 66 | reject(e); 67 | } 68 | }); 69 | }, 70 | ); 71 | 72 | req.on('error', (err) => { 73 | reject(err); 74 | }); 75 | 76 | req.end(); 77 | }); 78 | } 79 | -------------------------------------------------------------------------------- /src/topoViewer/backend/logger.ts: -------------------------------------------------------------------------------- 1 | // file: src/topoViewer/backend/logger.ts 2 | 3 | import * as vscode from 'vscode'; 4 | 5 | /** 6 | * Create a single OutputChannel for logs. 7 | */ 8 | const outputChannel = vscode.window.createOutputChannel("TopoViewer Logs"); 9 | 10 | /** 11 | * Extract file name + line number from the call stack. 12 | * We'll parse compiled `.js` stack frames, 13 | * which may differ slightly from your TypeScript lines. 14 | */ 15 | function getCallerFileLine(): string { 16 | const obj = {}; 17 | Error.captureStackTrace(obj, getCallerFileLine); 18 | 19 | const stack = (obj as any).stack as string; 20 | if (!stack) return 'unknown:0'; 21 | 22 | const lines = stack.split('\n'); 23 | // Typically, index 3 or 4 is the real caller 24 | const callSite = lines[3] || lines[4] || ''; 25 | 26 | const match = callSite.match(/\((.*?):(\d+):\d+\)/) 27 | || callSite.match(/at (.*?):(\d+):\d+/); 28 | if (!match) return 'unknown:0'; 29 | 30 | const filePath = match[1]; // e.g. /path/to/out/topoViewer.js 31 | const lineNum = match[2]; // e.g. 108 32 | 33 | // Extract just the file name from the path 34 | const fileName = filePath.split(/[\\/]/).pop() ?? 'unknown'; 35 | return `${fileName}:${lineNum}`; 36 | } 37 | 38 | /** 39 | * Logs a formatted message to the OutputChannel. 40 | * Only logs to VS Code output channel, not to browser console to avoid duplicate messages. 41 | * 42 | * @param level "info", "debug", "warn", "error", etc. 43 | * @param message The log message to display 44 | */ 45 | function logMessage(level: string, message: string): void { 46 | const now = new Date().toISOString(); // e.g. 2024-12-29T09:37:21.000Z 47 | const fileLine = getCallerFileLine(); // e.g. "topoViewer.ts:108" 48 | 49 | // Final log line: 50 | // time=2024-12-29T09:37:21Z level=info msg=Hello file=topoViewer.ts:108 51 | const logLine = `time=${now} level=${level} msg=${message} file=${fileLine}`; 52 | 53 | // Write to the OutputChannel but don't use console.* methods 54 | outputChannel.appendLine(logLine); 55 | } 56 | 57 | /** 58 | * Export a `log` object with convenience methods. 59 | */ 60 | export const log = { 61 | info(msg: any) { logMessage('info', msg); }, 62 | debug(msg: any) { logMessage('debug', msg); }, 63 | warn(msg: any) { logMessage('warn', msg); }, 64 | error(msg: any) { logMessage('error', msg); }, 65 | }; -------------------------------------------------------------------------------- /src/topoViewer/backend/types/cytoscape-cola.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'cytoscape-cola'; -------------------------------------------------------------------------------- /src/topoViewer/backend/types/cytoscape-grid-guide.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'cytoscape-grid-guide' -------------------------------------------------------------------------------- /src/topoViewer/backend/types/topoViewerType.ts: -------------------------------------------------------------------------------- 1 | // file: src/types/topoViewerType.ts 2 | 3 | 4 | /** 5 | * Represents a Containerlab node definition as specified in the YAML configuration. 6 | */ 7 | export interface ClabNode { 8 | kind?: string; 9 | image?: string; 10 | group?: string; 11 | labels?: Record; 12 | } 13 | 14 | /** 15 | * Represents a Containerlab link definition as specified in the YAML configuration. 16 | */ 17 | export interface ClabLink { 18 | endpoints: [string, string]; 19 | } 20 | 21 | /** 22 | * Represents the main Containerlab topology structure as defined in the YAML configuration. 23 | */ 24 | export interface ClabTopology { 25 | name?: string 26 | prefix?: string; 27 | topology?: { 28 | nodes?: Record; 29 | links?: ClabLink[]; 30 | }; 31 | } 32 | 33 | /** 34 | * Represents a single Cytoscape element, either a node or an edge. 35 | */ 36 | export interface CyElement { 37 | group: 'nodes' | 'edges'; 38 | data: Record; 39 | position?: { x: number; y: number }; 40 | removed?: boolean; 41 | selected?: boolean; 42 | selectable?: boolean; 43 | locked?: boolean; 44 | grabbed?: boolean; 45 | grabbable?: boolean; 46 | classes?: string; 47 | } 48 | 49 | /** 50 | * Represents the overall Cytoscape topology as an array of elements. 51 | */ 52 | export type CytoTopology = CyElement[]; 53 | 54 | /** 55 | * Represents the structure of the environment.json configuration file. 56 | */ 57 | export interface EnvironmentJson { 58 | workingDirectory: string; 59 | clabName: string; 60 | clabServerAddress: string; 61 | clabAllowedHostname: string; 62 | clabAllowedHostname01: string; 63 | clabServerPort: string; 64 | deploymentType: string; 65 | topoviewerVersion: string; 66 | topviewerPresetLayout: string 67 | envCyTopoJsonBytes: CytoTopology | ''; 68 | envCyTopoJsonBytesAddon: CytoTopology | ''; 69 | } 70 | 71 | 72 | // /** 73 | // * Represents CytoPosition for preset layout 74 | // */ 75 | // export interface CytoViewportSaveItem { 76 | // data: { id: string }; 77 | // position: { x: number; y: number }; 78 | // } 79 | 80 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/css/atom-one-dark.min.css: -------------------------------------------------------------------------------- 1 | pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/css/cytoscape-leaflet.css: -------------------------------------------------------------------------------- 1 | .cy-leaflet-toggle { 2 | position: absolute; 3 | display: none; 4 | /* left: 0; */ 5 | top: 75px; 6 | left: 0; 7 | bottom: 0; 8 | margin: 10px; 9 | z-index: 999; 10 | width: 30px; 11 | background: #fff; 12 | border-radius: 4px; 13 | border: 2px solid rgba(0, 0, 0, 0.2); 14 | } 15 | 16 | .cy-leaflet-toggle-button { 17 | height: 33px; 18 | cursor: pointer; 19 | position: relative; 20 | z-index: 0; 21 | } 22 | 23 | .cy-leaflet-toggle-button + .cy-leaflet-toggle-button { 24 | border-top: 1px solid rgba(0, 0, 0, 0.2); 25 | } 26 | 27 | .cy-leaflet-toggle-button:hover, 28 | .cy-leaflet-toggle-button:active { 29 | background-color: rgb(242, 242, 242); 30 | } 31 | 32 | /* custom icon -- using font awesome, swap out your own icon here 33 | https://fontawesome.com/license/free 34 | */ 35 | .cy-leaflet-toggle-pan { 36 | background-size: 16px 16px; 37 | background-position: 50% 50%; 38 | background-repeat: no-repeat; 39 | background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20448%20512%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M372.57%20112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269%2026.456%2089.144%2057.945%2089.144%20102v126.13c-19.953-7.427-43.308-5.068-62.083%208.871-29.355%2021.796-35.794%2063.333-14.55%2093.153L132.48%20498.569a32%2032%200%200%200%2026.062%2013.432h222.897c14.904%200%2027.835-10.289%2031.182-24.813l30.184-130.958A203.637%20203.637%200%200%200%20448%20310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427%20197.922c0%2011.731-1.334%2023.469-3.965%2034.886L368.707%20464h-201.92L51.591%20302.303c-14.439-20.27%2015.023-42.776%2029.394-22.605l27.128%2038.079c8.995%2012.626%2029.031%206.287%2029.031-9.283V102c0-25.645%2036.571-24.81%2036.571.691V256c0%208.837%207.163%2016%2016%2016h6.856c8.837%200%2016-7.163%2016-16V67c0-25.663%2036.571-24.81%2036.571.691V256c0%208.837%207.163%2016%2016%2016h6.856c8.837%200%2016-7.163%2016-16V101.125c0-25.672%2036.57-24.81%2036.57.691V256c0%208.837%207.163%2016%2016%2016h6.857c8.837%200%2016-7.163%2016-16v-76.309c0-26.242%2036.57-25.64%2036.57-.691v131.563z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E'); 40 | } 41 | 42 | /* custom icon -- using font awesome, swap out your own icon here 43 | https://fontawesome.com/license/free 44 | */ 45 | .cy-leaflet-toggle-edit { 46 | background-size: 16px 16px; 47 | background-position: 55% 50%; 48 | background-repeat: no-repeat; 49 | background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20320%20512%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M302.189%20329.126H196.105l55.831%20135.993c3.889%209.428-.555%2019.999-9.444%2023.999l-49.165%2021.427c-9.165%204-19.443-.571-23.332-9.714l-53.053-129.136-86.664%2089.138C18.729%20472.71%200%20463.554%200%20447.977V18.299C0%201.899%2019.921-6.096%2030.277%205.443l284.412%20292.542c11.472%2011.179%203.007%2031.141-12.5%2031.141z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E'); 50 | } 51 | 52 | .cy-leaflet-toggle-active { 53 | box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.25); 54 | z-index: 1; 55 | background-color: #ddd; 56 | } -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/css/resizeable.css: -------------------------------------------------------------------------------- 1 | 2 | #panel-vpn-service { 3 | top: 85px; 4 | right: 40px; 5 | 6 | /* height: 400px; */ 7 | width: 340px; 8 | 9 | max-height: 85vh; /* 80% of the viewport height */ 10 | max-width: 80vw; /* 80% of the viewport width */ 11 | 12 | /* min-height: 400px; */ 13 | min-width: 340px; 14 | } 15 | 16 | .resizable { 17 | /* box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.4); */ 18 | /* background-color: rgba(140, 140, 140, 1); */ 19 | position: absolute; 20 | } 21 | 22 | .resizable .resizers{ 23 | width: 100%; 24 | height: 100%; 25 | box-sizing: border-box; 26 | } 27 | 28 | .resizable .resizers .resizer{ 29 | width: 10px; 30 | height: 10px; 31 | border-radius: 50%; /*magic to turn square into circle*/ 32 | position: absolute; 33 | } 34 | 35 | .resizable .resizers .resizer.top-left { 36 | left: -5px; 37 | top: -5px; 38 | cursor: nwse-resize; /*resizer cursor*/ 39 | background-color: rgba(140, 140, 140, 0.5); 40 | } 41 | .resizable .resizers .resizer.top-right { 42 | right: -5px; 43 | top: -5px; 44 | cursor: nesw-resize; 45 | background-color: rgba(140, 140, 140, 0.5); 46 | } 47 | .resizable .resizers .resizer.bottom-left { 48 | left: -5px; 49 | bottom: 5px; 50 | cursor: nesw-resize; 51 | background-color: rgba(140, 140, 140, 0.5); 52 | } 53 | .resizable .resizers .resizer.bottom-right { 54 | right: -5px; 55 | bottom: -5px; 56 | cursor: nwse-resize; 57 | background-color: rgba(140, 140, 140, 0.5); 58 | } 59 | 60 | .resizable .resizers .resizer.mid-left { 61 | 62 | /* left: -5px; 63 | bottom: 5px; */ 64 | top: 40px; 65 | cursor: ew-resize; 66 | 67 | background-color: rgba(140, 140, 140, 0.5); 68 | 69 | } -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/images/nokia-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/images/svg-copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/images/svg-impairment.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/images/svg-parallelogram.svg: -------------------------------------------------------------------------------- 1 | Created by Hawraa Alsalmanfrom the Noun Project -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/images/svg-wireshark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/cloudshell/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 55 | 56 | 57 | 58 | 59 |
60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/cloudshell/terminal.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | // Function to get query parameters 3 | var urlParam = function(name, w) { 4 | w = w || window; 5 | var rx = new RegExp('[\&|\?]' + name + '=([^\&\#]+)'), 6 | val = w.location.search.match(rx); 7 | return !val ? '' : val[1]; 8 | }; 9 | 10 | // Retrieve the RouterID query parameter 11 | var routerId = urlParam('RouterID'); 12 | 13 | console.log("routerId:", routerId); 14 | 15 | // Process the routerId string 16 | var split1 = routerId.toString().split("?"); 17 | console.log(split1[1].split("=")[1]) 18 | 19 | document.title = `TopoViewer::${split1[1].split("=")[1]}`; 20 | 21 | 22 | // Initialize the terminal with the desired options 23 | var terminal = new Terminal({ 24 | screenKeys: true, 25 | useStyle: true, 26 | cursorBlink: true, 27 | fullscreenWin: true, 28 | maximizeWin: true, 29 | screenReaderMode: true, 30 | cols: 128, 31 | }); 32 | 33 | // Open the terminal in the specified HTML element 34 | terminal.open(document.getElementById("terminal")); 35 | 36 | // Determine the WebSocket protocol based on the page's protocol 37 | var protocol = (location.protocol === "https:") ? "wss://" : "ws://"; 38 | var url = protocol + location.host + "/xterm.js"; 39 | var ws = new WebSocket(url); 40 | 41 | console.log(ws); 42 | 43 | // Load necessary addons 44 | var attachAddon = new AttachAddon.AttachAddon(ws); 45 | var fitAddon = new FitAddon.FitAddon(); 46 | var webLinksAddon = new WebLinksAddon.WebLinksAddon(); 47 | var unicode11Addon = new Unicode11Addon.Unicode11Addon(); 48 | var serializeAddon = new SerializeAddon.SerializeAddon(); 49 | 50 | terminal.loadAddon(fitAddon); 51 | terminal.loadAddon(webLinksAddon); 52 | terminal.loadAddon(unicode11Addon); 53 | terminal.loadAddon(serializeAddon); 54 | 55 | // Define WebSocket event handlers 56 | ws.onclose = function(event) { 57 | console.log(event); 58 | terminal.write('\r\n\nconnection has been terminated from the server-side (hit refresh to restart)\n'); 59 | }; 60 | 61 | ws.onopen = function() { 62 | terminal.loadAddon(attachAddon); 63 | terminal._initialized = true; 64 | terminal.focus(); 65 | setTimeout(function() { 66 | fitAddon.fit(); 67 | }); 68 | // Uncomment the following lines if needed to send commands to the WebSocket 69 | // ws.send("ssh -q -o StrictHostKeyChecking=no admin@" + routerId.toString().split("?")[0]); 70 | console.log("ssh -q -o StrictHostKeyChecking=no admin@" + urlParam('RouterName')); 71 | ws.send("ssh -q -o StrictHostKeyChecking=no admin@" + urlParam('RouterName')); 72 | 73 | 74 | 75 | terminal.onResize(function(event) { 76 | var rows = event.rows; 77 | var cols = event.cols; 78 | var size = JSON.stringify({ 79 | cols: cols, 80 | rows: rows + 1 81 | }); 82 | var send = new TextEncoder().encode("\x01" + size); 83 | console.log('resizing to', size); 84 | 85 | 86 | ws.send(send); 87 | fitAddon.fit(); // this code indeedd 88 | }); 89 | 90 | terminal.onTitleChange(function(event) { 91 | console.log(event); 92 | }); 93 | 94 | // Fit the terminal to the window size when the window is resized 95 | window.onresize = function() { 96 | fitAddon.fit(); 97 | }; 98 | }; 99 | })(); -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/consolas-wrapper.min.js: -------------------------------------------------------------------------------- 1 | (function createConsolaWrapper() { 2 | const methods = ['log', 'info', 'success', 'warn', 'error', 'debug', 'trace']; 3 | const wrapper = {}; 4 | 5 | methods.forEach(method => { 6 | wrapper[method] = (...args) => { 7 | // Create an error to get the stack trace 8 | const error = new Error(); 9 | const stack = error.stack.split('\n'); 10 | 11 | // Locate the caller's file and line number 12 | const stackLine = stack[2]; // Adjust index if needed 13 | const match = stackLine.match(/(http.*):(\d+):(\d+)/); 14 | 15 | if (match) { 16 | const fileUrl = match[1]; 17 | const line = match[2]; 18 | const column = match[3]; 19 | 20 | // Format the log message 21 | const location = `%c${fileUrl}:${line}:${column}`; 22 | const style = 'color: blue; text-decoration: underline;'; 23 | 24 | // Call the appropriate consola method 25 | consola[method](`${location}`, style, ...args); 26 | } else { 27 | consola[method](...args); // Fallback to normal logging 28 | } 29 | }; 30 | }); 31 | 32 | // Expose the wrapper globally 33 | window.consolaWrapper = wrapper; 34 | })(); -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/cytoscape-popper.min.js: -------------------------------------------------------------------------------- 1 | var e,n;e=this,n=function(){return function(e){var n={};function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=7)}([function(e,n,t){var o=t(5).getBoundingBox;e.exports={getRef:function(e,n){return{getBoundingClientRect:function(){return o(e,n)}}}}},function(e,n,t){e.exports=null!=Object.assign?Object.assign.bind(Object):function(e){for(var n=arguments.length,t=Array(n>1?n-1:0),o=1;o1&&(console.warn("Popper.js Extension should only be used on one element."),console.warn("Ignoring all subsequent elements"))}e.exports={popper:function(e){return u(this),r(this[0],p(this[0],e))},popperRef:function(e){return u(this),i(this[0],p(this[0],e))}}},function(e,n,t){var o=t(1),r=t(2).getPopper,i=t(0).getRef;function p(e,n){return o({},{boundingBox:{top:0,left:0,right:0,bottom:0,w:3,h:3},renderedDimensions:function(){return{w:3,h:3}},renderedPosition:function(){return{x:0,y:0}},popper:{},cy:e},n)}e.exports={popper:function(e){return r(this,p(this,e))},popperRef:function(e){return i(this,p(this,e))}}},function(e,n,t){e.exports={getBoundingBox:function(e,n){var t=n.renderedPosition,o=n.cy,r=n.renderedDimensions,i=o.container().getBoundingClientRect(),p=r(e),u=t(e);return{top:u.y+i.top,left:u.x+i.left,right:u.x+p.w+i.left,bottom:u.y+p.h+i.top,width:p.w,height:p.h}}}},function(e,n,t){e.exports={getContent:function(e,n){var t=null;if("function"!=typeof n){if(n instanceof HTMLElement)return n;throw new Error("Can not create popper from 'target' with unknown type")}if(null===(t=n(e)))throw new Error("No 'target' specified to create popper");return t}}},function(e,n,t){var o=t(4),r=t(3);e.exports=function(e){if("function"!=typeof e)throw new Error("Provide 'popperFactory' before registering the module");return function(n){n&&(n("core","popperFactory",e),n("collection","popperFactory",e),n("core","popper",o.popper),n("collection","popper",r.popper),n("core","popperRef",o.popperRef),n("collection","popperRef",r.popperRef))}}}])},"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.cytoscapePopper=n():e.cytoscapePopper=n(); -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/browser/ui/codicons/codicon/codicon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srl-labs/vscode-containerlab/a059cde4e4ed871ea8da5fd0289ca08539c1e3e5/src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/browser/ui/codicons/codicon/codicon.ttf -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/common/worker/simpleWorker.nls.de.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.de",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["Array","Boolescher Wert","Klasse","Konstante","Konstruktor","Enumeration","Enumerationsmember","Ereignis","Feld","Datei","Funktion","Schnittstelle","Schl\xFCssel","Methode","Modul","Namespace","NULL","Zahl","Objekt","Operator","Paket","Eigenschaft","Zeichenfolge","Struktur","Typparameter","Variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.de.js.map -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/common/worker/simpleWorker.nls.es.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.es",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["matriz","booleano","clase","constante","constructor","enumeraci\xF3n","miembro de la enumeraci\xF3n","evento","campo","archivo","funci\xF3n","interfaz","clave","m\xE9todo","m\xF3dulo","espacio de nombres","NULL","n\xFAmero","objeto","operador","paquete","propiedad","cadena","estructura","par\xE1metro de tipo","variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.es.js.map -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/common/worker/simpleWorker.nls.fr.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.fr",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["tableau","bool\xE9en","classe","constante","constructeur","\xE9num\xE9ration","membre d'\xE9num\xE9ration","\xE9v\xE9nement","champ","fichier","fonction","interface","cl\xE9","m\xE9thode","module","espace de noms","NULL","nombre","objet","op\xE9rateur","package","propri\xE9t\xE9","cha\xEEne","struct","param\xE8tre de type","variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.fr.js.map -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/common/worker/simpleWorker.nls.it.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.it",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["matrice","valore booleano","classe","costante","costruttore","enumerazione","membro di enumerazione","evento","campo","file","funzione","interfaccia","chiave","metodo","modulo","spazio dei nomi","Null","numero","oggetto","operatore","pacchetto","propriet\xE0","stringa","struct","parametro di tipo","variabile","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.it.js.map -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/common/worker/simpleWorker.nls.ja.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ja",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u914D\u5217","\u30D6\u30FC\u30EB\u5024","\u30AF\u30E9\u30B9","\u5B9A\u6570","\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u30FC","\u5217\u6319\u578B","\u5217\u6319\u578B\u30E1\u30F3\u30D0\u30FC","\u30A4\u30D9\u30F3\u30C8","\u30D5\u30A3\u30FC\u30EB\u30C9","\u30D5\u30A1\u30A4\u30EB","\u95A2\u6570","\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9","\u30AD\u30FC","\u30E1\u30BD\u30C3\u30C9","\u30E2\u30B8\u30E5\u30FC\u30EB","\u540D\u524D\u7A7A\u9593","NULL","\u6570\u5024","\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8","\u6F14\u7B97\u5B50","\u30D1\u30C3\u30B1\u30FC\u30B8","\u30D7\u30ED\u30D1\u30C6\u30A3","\u6587\u5B57\u5217","\u69CB\u9020\u4F53","\u578B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC","\u5909\u6570","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.ja.js.map -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/common/worker/simpleWorker.nls.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["array","boolean","class","constant","constructor","enumeration","enumeration member","event","field","file","function","interface","key","method","module","namespace","null","number","object","operator","package","property","string","struct","type parameter","variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.js.map -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/common/worker/simpleWorker.nls.ko.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ko",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\uBC30\uC5F4","\uBD80\uC6B8","\uD074\uB798\uC2A4","\uC0C1\uC218","\uC0DD\uC131\uC790","\uC5F4\uAC70\uD615","\uC5F4\uAC70\uD615 \uBA64\uBC84","\uC774\uBCA4\uD2B8","\uD544\uB4DC","\uD30C\uC77C","\uD568\uC218","\uC778\uD130\uD398\uC774\uC2A4","\uD0A4","\uBA54\uC11C\uB4DC","\uBAA8\uB4C8","\uB124\uC784\uC2A4\uD398\uC774\uC2A4","Null","\uC22B\uC790","\uAC1C\uCCB4","\uC5F0\uC0B0\uC790","\uD328\uD0A4\uC9C0","\uC18D\uC131","\uBB38\uC790\uC5F4","\uAD6C\uC870\uCCB4","\uD615\uC2DD \uB9E4\uAC1C \uBCC0\uC218","\uBCC0\uC218","{0}({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.ko.js.map -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/common/worker/simpleWorker.nls.ru.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ru",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u043C\u0430\u0441\u0441\u0438\u0432","\u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435","\u043A\u043B\u0430\u0441\u0441","\u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u0430","\u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440","\u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435","\u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F","\u0441\u043E\u0431\u044B\u0442\u0438\u0435","\u043F\u043E\u043B\u0435","\u0444\u0430\u0439\u043B","\u0444\u0443\u043D\u043A\u0446\u0438\u044F","\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441","\u043A\u043B\u044E\u0447","\u043C\u0435\u0442\u043E\u0434","\u043C\u043E\u0434\u0443\u043B\u044C","\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u0438\u043C\u0435\u043D","NULL","\u0447\u0438\u0441\u043B\u043E","\u043E\u0431\u044A\u0435\u043A\u0442","\u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440","\u043F\u0430\u043A\u0435\u0442","\u0441\u0432\u043E\u0439\u0441\u0442\u0432\u043E","\u0441\u0442\u0440\u043E\u043A\u0430","\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430","\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0442\u0438\u043F\u0430","\u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u0430\u044F","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.ru.js.map -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/common/worker/simpleWorker.nls.zh-cn.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.zh-cn",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u6570\u7EC4","\u5E03\u5C14\u503C","\u7C7B","\u5E38\u6570","\u6784\u9020\u51FD\u6570","\u679A\u4E3E","\u679A\u4E3E\u6210\u5458","\u4E8B\u4EF6","\u5B57\u6BB5","\u6587\u4EF6","\u51FD\u6570","\u63A5\u53E3","\u952E","\u65B9\u6CD5","\u6A21\u5757","\u547D\u540D\u7A7A\u95F4","Null","\u6570\u5B57","\u5BF9\u8C61","\u8FD0\u7B97\u7B26","\u5305","\u5C5E\u6027","\u5B57\u7B26\u4E32","\u7ED3\u6784","\u7C7B\u578B\u53C2\u6570","\u53D8\u91CF","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.zh-cn.js.map -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/base/common/worker/simpleWorker.nls.zh-tw.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.zh-tw",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u9663\u5217","\u5E03\u6797\u503C","\u985E\u5225","\u5E38\u6578","\u5EFA\u69CB\u51FD\u5F0F","\u5217\u8209","\u5217\u8209\u6210\u54E1","\u4E8B\u4EF6","\u6B04\u4F4D","\u6A94\u6848","\u51FD\u5F0F","\u4ECB\u9762","\u7D22\u5F15\u9375","\u65B9\u6CD5","\u6A21\u7D44","\u547D\u540D\u7A7A\u9593","null","\u6578\u5B57","\u7269\u4EF6","\u904B\u7B97\u5B50","\u5957\u4EF6","\u5C6C\u6027","\u5B57\u4E32","\u7D50\u69CB","\u578B\u5225\u53C3\u6578","\u8B8A\u6578","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.zh-tw.js.map -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/azcli/azcli.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/azcli/azcli", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(t,e)=>{for(var o in e)s(t,o,{get:e[o],enumerable:!0})},k=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of r(e))!l.call(t,n)&&n!==o&&s(t,n,{get:()=>e[n],enumerable:!(a=i(e,n))||a.enumerable});return t};var p=t=>k(s({},"__esModule",{value:!0}),t);var d={};c(d,{conf:()=>f,language:()=>g});var f={comments:{lineComment:"#"}},g={defaultToken:"keyword",ignoreCase:!0,tokenPostfix:".azcli",str:/[^#\s]/,tokenizer:{root:[{include:"@comment"},[/\s-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}],[/^-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}]],type:[{include:"@comment"},[/-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":"key.identifier"}}],[/@str+\s*/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}]],comment:[[/#.*$/,{cases:{"@eos":{token:"comment",next:"@popall"}}}]]}};return p(d);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/bat/bat.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/bat/bat", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var n=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var g=(o,e)=>{for(var t in e)n(o,t,{get:e[t],enumerable:!0})},c=(o,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of l(e))!i.call(o,s)&&s!==t&&n(o,s,{get:()=>e[s],enumerable:!(a=r(e,s))||a.enumerable});return o};var p=o=>c(n({},"__esModule",{value:!0}),o);var k={};g(k,{conf:()=>d,language:()=>m});var d={comments:{lineComment:"REM"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*(::\\s*|REM\\s+)#region"),end:new RegExp("^\\s*(::\\s*|REM\\s+)#endregion")}}},m={defaultToken:"",ignoreCase:!0,tokenPostfix:".bat",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:/call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,symbols:/[=>{ 8 | "use strict";var moduleExports=(()=>{var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var g=(e,n)=>{for(var o in n)r(e,o,{get:n[o],enumerable:!0})},l=(e,n,o,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of c(n))!a.call(e,t)&&t!==o&&r(e,t,{get:()=>n[t],enumerable:!(i=s(n,t))||i.enumerable});return e};var m=e=>l(r({},"__esModule",{value:!0}),e);var y={};g(y,{conf:()=>$,language:()=>w});var p=e=>`\\b${e}\\b`,k="[_a-zA-Z]",x="[_a-zA-Z0-9]",u=p(`${k}${x}*`),d=["targetScope","resource","module","param","var","output","for","in","if","existing"],b=["true","false","null"],f="[ \\t\\r\\n]",C="[0-9]+",$={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'"},{open:"'''",close:"'''"}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:"'''",close:"'''",notIn:["string","comment"]}],autoCloseBefore:`:.,=}])' 9 | `,indentationRules:{increaseIndentPattern:new RegExp("^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$"),decreaseIndentPattern:new RegExp("^((?!.*?\\/\\*).*\\*/)?\\s*[\\}\\]].*$")}},w={defaultToken:"",tokenPostfix:".bicep",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],symbols:/[=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(o,e)=>{for(var n in e)s(o,n,{get:e[n],enumerable:!0})},m=(o,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of a(e))!l.call(o,t)&&t!==n&&s(o,t,{get:()=>e[t],enumerable:!(r=i(e,t))||r.enumerable});return o};var p=o=>m(s({},"__esModule",{value:!0}),o);var u={};c(u,{conf:()=>d,language:()=>g});var d={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'},{open:"(*",close:"*)"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'},{open:"(*",close:"*)"}]},g={defaultToken:"",tokenPostfix:".cameligo",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["abs","assert","block","Bytes","case","Crypto","Current","else","failwith","false","for","fun","if","in","let","let%entry","let%init","List","list","Map","map","match","match%nat","mod","not","operation","Operation","of","record","Set","set","sender","skip","source","String","then","to","true","type","with"],typeKeywords:["int","unit","string","tz","nat","bool"],operators:["=",">","<","<=",">=","<>",":",":=","and","mod","or","+","-","*","/","@","&","^","%","->","<-","&&","||"],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\$[0-9a-fA-F]{1,16}/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'/,"string","@string"],[/'[^\\']'/,"string"],[/'/,"string.invalid"],[/\#\d+/,"string"]],comment:[[/[^\(\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\(\*/,"comment"]],string:[[/[^\\']+/,"string"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}};return p(u);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/csp/csp.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/csp/csp", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var a=(r,t)=>{for(var s in t)o(r,s,{get:t[s],enumerable:!0})},c=(r,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of u(t))!g.call(r,e)&&e!==s&&o(r,e,{get:()=>t[e],enumerable:!(n=i(t,e))||n.enumerable});return r};var q=r=>c(o({},"__esModule",{value:!0}),r);var p={};a(p,{conf:()=>f,language:()=>l});var f={brackets:[],autoClosingPairs:[],surroundingPairs:[]},l={keywords:[],typeKeywords:[],tokenPostfix:".csp",operators:[],symbols:/[=>{ 8 | "use strict";var moduleExports=(()=>{var a=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var p=(o,e)=>{for(var s in e)a(o,s,{get:e[s],enumerable:!0})},g=(o,e,s,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of r(e))!i.call(o,n)&&n!==s&&a(o,n,{get:()=>e[n],enumerable:!(t=l(e,n))||t.enumerable});return o};var c=o=>g(a({},"__esModule",{value:!0}),o);var k={};p(k,{conf:()=>u,language:()=>d});var u={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},d={defaultToken:"",tokenPostfix:".dockerfile",variable:/\${?[\w]+}?/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/(ONBUILD)(\s+)/,["keyword",""]],[/(ENV)(\s+)([\w]+)/,["keyword","",{token:"variable",next:"@arguments"}]],[/(FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|ARG|VOLUME|LABEL|USER|WORKDIR|COPY|CMD|STOPSIGNAL|SHELL|HEALTHCHECK|ENTRYPOINT)/,{token:"keyword",next:"@arguments"}]],arguments:[{include:"@whitespace"},{include:"@strings"},[/(@variable)/,{cases:{"@eos":{token:"variable",next:"@popall"},"@default":"variable"}}],[/\\/,{cases:{"@eos":"","@default":""}}],[/./,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],whitespace:[[/\s+/,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],comment:[[/(^#.*$)/,"comment","@popall"]],strings:[[/\\'$/,"","@popall"],[/\\'/,""],[/'$/,"string","@popall"],[/'/,"string","@stringBody"],[/"$/,"string","@popall"],[/"/,"string","@dblStringBody"]],stringBody:[[/[^\\\$']/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/'$/,"string","@popall"],[/'/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]],dblStringBody:[[/[^\\\$"]/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/"$/,"string","@popall"],[/"/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]]}};return c(k);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/flow9/flow9.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/flow9/flow9", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(o,e)=>{for(var t in e)s(o,t,{get:e[t],enumerable:!0})},m=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of a(e))!l.call(o,n)&&n!==t&&s(o,n,{get:()=>e[n],enumerable:!(i=r(e,n))||i.enumerable});return o};var p=o=>m(s({},"__esModule",{value:!0}),o);var u={};c(u,{conf:()=>g,language:()=>f});var g={comments:{blockComment:["/*","*/"],lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string"]},{open:"[",close:"]",notIn:["string"]},{open:"(",close:")",notIn:["string"]},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}]},f={defaultToken:"",tokenPostfix:".flow",keywords:["import","require","export","forbid","native","if","else","cast","unsafe","switch","default"],types:["io","mutable","bool","int","double","string","flow","void","ref","true","false","with"],operators:["=",">","<","<=",">=","==","!","!=",":=","::=","&&","||","+","-","*","/","@","&","%",":","->","\\","$","??","^"],symbols:/[@$=>](?!@symbols)/,"delimiter"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]]}};return p(u);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/go/go.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/go/go", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var m=(n,e)=>{for(var t in e)s(n,t,{get:e[t],enumerable:!0})},l=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of a(e))!c.call(n,o)&&o!==t&&s(n,o,{get:()=>e[o],enumerable:!(r=i(e,o))||r.enumerable});return n};var g=n=>l(s({},"__esModule",{value:!0}),n);var d={};m(d,{conf:()=>p,language:()=>u});var p={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`",notIn:["string"]},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`"},{open:'"',close:'"'},{open:"'",close:"'"}]},u={defaultToken:"",tokenPostfix:".go",keywords:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var","bool","true","false","uint8","uint16","uint32","uint64","int8","int16","int32","int64","float32","float64","complex64","complex128","byte","rune","uint","int","uintptr","string","nil"],operators:["+","-","*","/","%","&","|","^","<<",">>","&^","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=","&^=","&&","||","<-","++","--","==","<",">","=","!","!=","<=",">=",":=","...","(",")","","]","{","}",",",";",".",":"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/,"number.hex"],[/0[0-7']*[0-7]/,"number.octal"],[/0[bB][0-1']*[0-1]/,"number.binary"],[/\d[\d']*/,"number"],[/\d/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/`/,"string","@rawstring"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],rawstring:[[/[^\`]/,"string"],[/`/,"string","@pop"]]}};return g(d);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/graphql/graphql.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/graphql/graphql", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(n,e)=>{for(var t in e)s(n,t,{get:e[t],enumerable:!0})},d=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of i(e))!l.call(n,o)&&o!==t&&s(n,o,{get:()=>e[o],enumerable:!(r=a(e,o))||r.enumerable});return n};var p=n=>d(s({},"__esModule",{value:!0}),n);var u={};c(u,{conf:()=>g,language:()=>I});var g={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"""',close:'"""',notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"""',close:'"""'},{open:'"',close:'"'}],folding:{offSide:!0}},I={defaultToken:"invalid",tokenPostfix:".gql",keywords:["null","true","false","query","mutation","subscription","extend","schema","directive","scalar","type","interface","union","enum","input","implements","fragment","on"],typeKeywords:["Int","Float","String","Boolean","ID"],directiveLocations:["SCHEMA","SCALAR","OBJECT","FIELD_DEFINITION","ARGUMENT_DEFINITION","INTERFACE","UNION","ENUM","ENUM_VALUE","INPUT_OBJECT","INPUT_FIELD_DEFINITION","QUERY","MUTATION","SUBSCRIPTION","FIELD","FRAGMENT_DEFINITION","FRAGMENT_SPREAD","INLINE_FRAGMENT","VARIABLE_DEFINITION"],operators:["=","!","?",":","&","|"],symbols:/[=!?:&|]+/,escapes:/\\(?:["\\\/bfnrt]|u[0-9A-Fa-f]{4})/,tokenizer:{root:[[/[a-z_][\w$]*/,{cases:{"@keywords":"keyword","@default":"key.identifier"}}],[/[$][\w$]*/,{cases:{"@keywords":"keyword","@default":"argument.identifier"}}],[/[A-Z][\w\$]*/,{cases:{"@typeKeywords":"keyword","@default":"type.identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,{token:"annotation",log:"annotation token: $0"}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F]+/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/"""/,{token:"string",next:"@mlstring",nextEmbedded:"markdown"}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",bracket:"@open",next:"@string"}]],mlstring:[[/[^"]+/,"string"],['"""',{token:"string",next:"@pop",nextEmbedded:"@pop"}]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[/#.*$/,"comment"]]}};return p(u);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/ini/ini.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/ini/ini", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var t=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var c=(n,e)=>{for(var s in e)t(n,s,{get:e[s],enumerable:!0})},l=(n,e,s,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of r(e))!g.call(n,o)&&o!==s&&t(n,o,{get:()=>e[o],enumerable:!(a=i(e,o))||a.enumerable});return n};var p=n=>l(t({},"__esModule",{value:!0}),n);var f={};c(f,{conf:()=>u,language:()=>m});var u={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},m={defaultToken:"",tokenPostfix:".ini",escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^\[[^\]]*\]/,"metatag"],[/(^\w+)(\s*)(\=)/,["key","","delimiter"]],{include:"@whitespace"},[/\d+/,"number"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],whitespace:[[/[ \t\r\n]+/,""],[/^\s*[#;].*$/,"comment"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}};return p(f);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/lexon/lexon.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/lexon/lexon", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var n=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var i in e)n(t,i,{get:e[i],enumerable:!0})},p=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of d(e))!a.call(t,o)&&o!==i&&n(t,o,{get:()=>e[o],enumerable:!(r=s(e,o))||r.enumerable});return t};var c=t=>p(n({},"__esModule",{value:!0}),t);var k={};l(k,{conf:()=>m,language:()=>u});var m={comments:{lineComment:"COMMENT"},brackets:[["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:":",close:"."}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`"},{open:'"',close:'"'},{open:"'",close:"'"},{open:":",close:"."}],folding:{markers:{start:new RegExp("^\\s*(::\\s*|COMMENT\\s+)#region"),end:new RegExp("^\\s*(::\\s*|COMMENT\\s+)#endregion")}}},u={tokenPostfix:".lexon",ignoreCase:!0,keywords:["lexon","lex","clause","terms","contracts","may","pay","pays","appoints","into","to"],typeKeywords:["amount","person","key","time","date","asset","text"],operators:["less","greater","equal","le","gt","or","and","add","added","subtract","subtracted","multiply","multiplied","times","divide","divided","is","be","certified"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,"delimiter"],[/\d*\.\d*\.\d*/,"number.semver"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F]+/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"]],quoted_identifier:[[/[^\\"]+/,"identifier"],[/"/,{token:"identifier.quote",bracket:"@close",next:"@pop"}]],space_identifier_until_period:[[":","delimiter"],[" ",{token:"white",next:"@identifier_rest"}]],identifier_until_period:[{include:"@whitespace"},[":",{token:"delimiter",next:"@identifier_rest"}],[/[^\\.]+/,"identifier"],[/\./,{token:"delimiter",bracket:"@close",next:"@pop"}]],identifier_rest:[[/[^\\.]+/,"identifier"],[/\./,{token:"delimiter",bracket:"@close",next:"@pop"}]],semver:[{include:"@whitespace"},[":","delimiter"],[/\d*\.\d*\.\d*/,{token:"number.semver",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"]]}};return c(k);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/lua/lua.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/lua/lua", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(o,e)=>{for(var t in e)s(o,t,{get:e[t],enumerable:!0})},m=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of i(e))!l.call(o,n)&&n!==t&&s(o,n,{get:()=>e[n],enumerable:!(r=a(e,n))||r.enumerable});return o};var p=o=>m(s({},"__esModule",{value:!0}),o);var u={};c(u,{conf:()=>d,language:()=>g});var d={comments:{lineComment:"--",blockComment:["--[[","]]"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},g={defaultToken:"",tokenPostfix:".lua",keywords:["and","break","do","else","elseif","end","false","for","function","goto","if","in","local","nil","not","or","repeat","return","then","true","until","while"],brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"}],operators:["+","-","*","/","%","^","#","==","~=","<=",">=","<",">","=",";",":",",",".","..","..."],symbols:/[=>{ 8 | "use strict";var moduleExports=(()=>{var r=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var R=(o,e)=>{for(var s in e)r(o,s,{get:e[s],enumerable:!0})},c=(o,e,s,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of a(e))!i.call(o,t)&&t!==s&&r(o,t,{get:()=>e[t],enumerable:!(n=E(e,t))||n.enumerable});return o};var m=o=>c(r({},"__esModule",{value:!0}),o);var N={};R(N,{conf:()=>A,language:()=>p});var A={comments:{blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"(*",close:"*)"},{open:"<*",close:"*>"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}]},p={defaultToken:"",tokenPostfix:".m3",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["AND","ANY","ARRAY","AS","BEGIN","BITS","BRANDED","BY","CASE","CONST","DIV","DO","ELSE","ELSIF","END","EVAL","EXCEPT","EXCEPTION","EXIT","EXPORTS","FINALLY","FOR","FROM","GENERIC","IF","IMPORT","IN","INTERFACE","LOCK","LOOP","METHODS","MOD","MODULE","NOT","OBJECT","OF","OR","OVERRIDES","PROCEDURE","RAISE","RAISES","READONLY","RECORD","REF","REPEAT","RETURN","REVEAL","SET","THEN","TO","TRY","TYPE","TYPECASE","UNSAFE","UNTIL","UNTRACED","VALUE","VAR","WHILE","WITH"],reservedConstNames:["ABS","ADR","ADRSIZE","BITSIZE","BYTESIZE","CEILING","DEC","DISPOSE","FALSE","FIRST","FLOAT","FLOOR","INC","ISTYPE","LAST","LOOPHOLE","MAX","MIN","NARROW","NEW","NIL","NUMBER","ORD","ROUND","SUBARRAY","TRUE","TRUNC","TYPECODE","VAL"],reservedTypeNames:["ADDRESS","ANY","BOOLEAN","CARDINAL","CHAR","EXTENDED","INTEGER","LONGCARD","LONGINT","LONGREAL","MUTEX","NULL","REAL","REFANY","ROOT","TEXT"],operators:["+","-","*","/","&","^","."],relations:["=","#","<","<=",">",">=","<:",":"],delimiters:["|","..","=>",",",";",":="],symbols:/[>=<#.,:;+\-*/&^]+/,escapes:/\\(?:[\\fnrt"']|[0-7]{3})/,tokenizer:{root:[[/_\w*/,"invalid"],[/[a-zA-Z][a-zA-Z0-9_]*/,{cases:{"@keywords":{token:"keyword.$0"},"@reservedConstNames":{token:"constant.reserved.$0"},"@reservedTypeNames":{token:"type.reserved.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[0-9]+\.[0-9]+(?:[DdEeXx][\+\-]?[0-9]+)?/,"number.float"],[/[0-9]+(?:\_[0-9a-fA-F]+)?L?/,"number"],[/@symbols/,{cases:{"@operators":"operators","@relations":"operators","@delimiters":"delimiter","@default":"invalid"}}],[/'[^\\']'/,"string.char"],[/(')(@escapes)(')/,["string.char","string.escape","string.char"]],[/'/,"invalid"],[/"([^"\\]|\\.)*$/,"invalid"],[/"/,"string.text","@text"]],text:[[/[^\\"]+/,"string.text"],[/@escapes/,"string.escape"],[/\\./,"invalid"],[/"/,"string.text","@pop"]],comment:[[/\(\*/,"comment","@push"],[/\*\)/,"comment","@pop"],[/./,"comment"]],pragma:[[/<\*/,"keyword.pragma","@push"],[/\*>/,"keyword.pragma","@pop"],[/./,"keyword.pragma"]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/<\*/,"keyword.pragma","@pragma"]]}};return m(N);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/mips/mips.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/mips/mips", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var n in e)s(t,n,{get:e[n],enumerable:!0})},d=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of o(e))!g.call(t,r)&&r!==n&&s(t,r,{get:()=>e[r],enumerable:!(i=a(e,r))||i.enumerable});return t};var m=t=>d(s({},"__esModule",{value:!0}),t);var x={};l(x,{conf:()=>p,language:()=>u});var p={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\$\-\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{blockComment:["###","###"],lineComment:"#"},folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},u={defaultToken:"",ignoreCase:!1,tokenPostfix:".mips",regEx:/\/(?!\/\/)(?:[^\/\\]|\\.)*\/[igm]*/,keywords:[".data",".text","syscall","trap","add","addu","addi","addiu","and","andi","div","divu","mult","multu","nor","or","ori","sll","slv","sra","srav","srl","srlv","sub","subu","xor","xori","lhi","lho","lhi","llo","slt","slti","sltu","sltiu","beq","bgtz","blez","bne","j","jal","jalr","jr","lb","lbu","lh","lhu","lw","li","la","sb","sh","sw","mfhi","mflo","mthi","mtlo","move"],symbols:/[\.,\:]+/,escapes:/\\(?:[abfnrtv\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/\$[a-zA-Z_]\w*/,"variable.predefined"],[/[.a-zA-Z_]\w*/,{cases:{this:"variable.predefined","@keywords":{token:"keyword.$0"},"@default":""}}],[/[ \t\r\n]+/,""],[/#.*$/,"comment"],["///",{token:"regexp",next:"@hereregexp"}],[/^(\s*)(@regEx)/,["","regexp"]],[/(\,)(\s*)(@regEx)/,["delimiter","","regexp"]],[/(\:)(\s*)(@regEx)/,["delimiter","","regexp"]],[/@symbols/,"delimiter"],[/\d+[eE]([\-+]?\d+)?/,"number.float"],[/\d+\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F]+/,"number.hex"],[/0[0-7]+(?!\d)/,"number.octal"],[/\d+/,"number"],[/[,.]/,"delimiter"],[/"""/,"string",'@herestring."""'],[/'''/,"string","@herestring.'''"],[/"/,{cases:{"@eos":"string","@default":{token:"string",next:'@string."'}}}],[/'/,{cases:{"@eos":"string","@default":{token:"string",next:"@string.'"}}}]],string:[[/[^"'\#\\]+/,"string"],[/@escapes/,"string.escape"],[/\./,"string.escape.invalid"],[/\./,"string.escape.invalid"],[/#{/,{cases:{'$S2=="':{token:"string",next:"root.interpolatedstring"},"@default":"string"}}],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}],[/#/,"string"]],herestring:[[/("""|''')/,{cases:{"$1==$S2":{token:"string",next:"@pop"},"@default":"string"}}],[/[^#\\'"]+/,"string"],[/['"]+/,"string"],[/@escapes/,"string.escape"],[/\./,"string.escape.invalid"],[/#{/,{token:"string.quote",next:"root.interpolatedstring"}],[/#/,"string"]],comment:[[/[^#]+/,"comment"],[/#/,"comment"]],hereregexp:[[/[^\\\/#]+/,"regexp"],[/\\./,"regexp"],[/#.*$/,"comment"],["///[igm]*",{token:"regexp",next:"@pop"}],[/\//,"regexp"]]}};return m(x);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/objective-c/objective-c.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/objective-c/objective-c", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var l=(o,e)=>{for(var t in e)s(o,t,{get:e[t],enumerable:!0})},p=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of c(e))!a.call(o,n)&&n!==t&&s(o,n,{get:()=>e[n],enumerable:!(i=r(e,n))||i.enumerable});return o};var d=o=>p(s({},"__esModule",{value:!0}),o);var u={};l(u,{conf:()=>g,language:()=>m});var g={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},m={defaultToken:"",tokenPostfix:".objective-c",keywords:["#import","#include","#define","#else","#endif","#if","#ifdef","#ifndef","#ident","#undef","@class","@defs","@dynamic","@encode","@end","@implementation","@interface","@package","@private","@protected","@property","@protocol","@public","@selector","@synthesize","__declspec","assign","auto","BOOL","break","bycopy","byref","case","char","Class","const","copy","continue","default","do","double","else","enum","extern","FALSE","false","float","for","goto","if","in","int","id","inout","IMP","long","nil","nonatomic","NULL","oneway","out","private","public","protected","readwrite","readonly","register","return","SEL","self","short","signed","sizeof","static","struct","super","switch","typedef","TRUE","true","union","unsigned","volatile","void","while"],decpart:/\d(_?\d)*/,decimal:/0|@decpart/,tokenizer:{root:[{include:"@comments"},{include:"@whitespace"},{include:"@numbers"},{include:"@strings"},[/[,:;]/,"delimiter"],[/[{}\[\]()<>]/,"@brackets"],[/[a-zA-Z@#]\w*/,{cases:{"@keywords":"keyword","@default":"identifier"}}],[/[<>=\\+\\-\\*\\/\\^\\|\\~,]|and\\b|or\\b|not\\b]/,"operator"]],whitespace:[[/\s+/,"white"]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[".","comment"]],numbers:[[/0[xX][0-9a-fA-F]*(_?[0-9a-fA-F])*/,"number.hex"],[/@decimal((\.@decpart)?([eE][\-+]?@decpart)?)[fF]*/,{cases:{"(\\d)*":"number",$0:"number.float"}}]],strings:[[/'$/,"string.escape","@popall"],[/'/,"string.escape","@stringBody"],[/"$/,"string.escape","@popall"],[/"/,"string.escape","@dblStringBody"]],stringBody:[[/[^\\']+$/,"string","@popall"],[/[^\\']+/,"string"],[/\\./,"string"],[/'/,"string.escape","@popall"],[/\\$/,"string"]],dblStringBody:[[/[^\\"]+$/,"string","@popall"],[/[^\\"]+/,"string"],[/\\./,"string"],[/"/,"string.escape","@popall"],[/\\$/,"string"]]}};return d(u);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/pascaligo/pascaligo.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/pascaligo/pascaligo", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(o,e)=>{for(var t in e)s(o,t,{get:e[t],enumerable:!0})},m=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of a(e))!l.call(o,n)&&n!==t&&s(o,n,{get:()=>e[n],enumerable:!(r=i(e,n))||r.enumerable});return o};var p=o=>m(s({},"__esModule",{value:!0}),o);var u={};c(u,{conf:()=>d,language:()=>g});var d={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}]},g={defaultToken:"",tokenPostfix:".pascaligo",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["begin","block","case","const","else","end","fail","for","from","function","if","is","nil","of","remove","return","skip","then","type","var","while","with","option","None","transaction"],typeKeywords:["bool","int","list","map","nat","record","string","unit","address","map","mtz","xtz"],operators:["=",">","<","<=",">=","<>",":",":=","and","mod","or","+","-","*","/","@","&","^","%"],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\$[0-9a-fA-F]{1,16}/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'/,"string","@string"],[/'[^\\']'/,"string"],[/'/,"string.invalid"],[/\#\d+/,"string"]],comment:[[/[^\(\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\(\*/,"comment"]],string:[[/[^\\']+/,"string"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}};return p(u);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/pla/pla.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/pla/pla", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var l=(o,e)=>{for(var n in e)s(o,n,{get:e[n],enumerable:!0})},c=(o,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of r(e))!p.call(o,t)&&t!==n&&s(o,t,{get:()=>e[t],enumerable:!(i=a(e,t))||i.enumerable});return o};var d=o=>c(s({},"__esModule",{value:!0}),o);var u={};l(u,{conf:()=>k,language:()=>m});var k={comments:{lineComment:"#"},brackets:[["[","]"],["<",">"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"<",close:">"},{open:"(",close:")"}],surroundingPairs:[{open:"[",close:"]"},{open:"<",close:">"},{open:"(",close:")"}]},m={defaultToken:"",tokenPostfix:".pla",brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"<",close:">",token:"delimiter.angle"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:[".i",".o",".mv",".ilb",".ob",".label",".type",".phase",".pair",".symbolic",".symbolic-output",".kiss",".p",".e",".end"],comment:/#.*$/,identifier:/[a-zA-Z]+[a-zA-Z0-9_\-]*/,plaContent:/[01\-~\|]+/,tokenizer:{root:[{include:"@whitespace"},[/@comment/,"comment"],[/\.([a-zA-Z_\-]+)/,{cases:{"@eos":{token:"keyword.$1"},"@keywords":{cases:{".type":{token:"keyword.$1",next:"@type"},"@default":{token:"keyword.$1",next:"@keywordArg"}}},"@default":{token:"keyword.$1"}}}],[/@identifier/,"identifier"],[/@plaContent/,"string"]],whitespace:[[/[ \t\r\n]+/,""]],type:[{include:"@whitespace"},[/\w+/,{token:"type",next:"@pop"}]],keywordArg:[[/[ \t\r\n]+/,{cases:{"@eos":{token:"",next:"@pop"},"@default":""}}],[/@comment/,"comment","@pop"],[/[<>()\[\]]/,{cases:{"@eos":{token:"@brackets",next:"@pop"},"@default":"@brackets"}}],[/\-?\d+/,{cases:{"@eos":{token:"number",next:"@pop"},"@default":"number"}}],[/@identifier/,{cases:{"@eos":{token:"identifier",next:"@pop"},"@default":"identifier"}}],[/[;=]/,{cases:{"@eos":{token:"delimiter",next:"@pop"},"@default":"delimiter"}}]]}};return d(u);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/sb/sb.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/sb/sb", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var r=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var d=(o,e)=>{for(var t in e)r(o,t,{get:e[t],enumerable:!0})},c=(o,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of a(e))!l.call(o,n)&&n!==t&&r(o,n,{get:()=>e[n],enumerable:!(s=i(e,n))||s.enumerable});return o};var g=o=>c(r({},"__esModule",{value:!0}),o);var m={};d(m,{conf:()=>p,language:()=>f});var p={comments:{lineComment:"'"},brackets:[["(",")"],["[","]"],["If","EndIf"],["While","EndWhile"],["For","EndFor"],["Sub","EndSub"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]}]},f={defaultToken:"",tokenPostfix:".sb",ignoreCase:!0,brackets:[{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"keyword.tag-if",open:"If",close:"EndIf"},{token:"keyword.tag-while",open:"While",close:"EndWhile"},{token:"keyword.tag-for",open:"For",close:"EndFor"},{token:"keyword.tag-sub",open:"Sub",close:"EndSub"}],keywords:["Else","ElseIf","EndFor","EndIf","EndSub","EndWhile","For","Goto","If","Step","Sub","Then","To","While"],tagwords:["If","Sub","While","For"],operators:[">","<","<>","<=",">=","And","Or","+","-","*","/","="],identifier:/[a-zA-Z_][\w]*/,symbols:/[=><:+\-*\/%\.,]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[{include:"@whitespace"},[/(@identifier)(?=[.])/,"type"],[/@identifier/,{cases:{"@keywords":{token:"keyword.$0"},"@operators":"operator","@default":"variable.name"}}],[/([.])(@identifier)/,{cases:{$2:["delimiter","type.member"],"@default":""}}],[/\d*\.\d+/,"number.float"],[/\d+/,"number"],[/[()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":"delimiter"}}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"]],whitespace:[[/[ \t\r\n]+/,""],[/(\').*$/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"C?/,"string","@pop"]]}};return g(m);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/scheme/scheme.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/scheme/scheme", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(o,e)=>{for(var t in e)s(o,t,{get:e[t],enumerable:!0})},m=(o,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of i(e))!l.call(o,n)&&n!==t&&s(o,n,{get:()=>e[n],enumerable:!(a=r(e,n))||a.enumerable});return o};var p=o=>m(s({},"__esModule",{value:!0}),o);var u={};c(u,{conf:()=>d,language:()=>g});var d={comments:{lineComment:";",blockComment:["#|","|#"]},brackets:[["(",")"],["{","}"],["[","]"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}]},g={defaultToken:"",ignoreCase:!0,tokenPostfix:".scheme",brackets:[{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"}],keywords:["case","do","let","loop","if","else","when","cons","car","cdr","cond","lambda","lambda*","syntax-rules","format","set!","quote","eval","append","list","list?","member?","load"],constants:["#t","#f"],operators:["eq?","eqv?","equal?","and","or","not","null?"],tokenizer:{root:[[/#[xXoObB][0-9a-fA-F]+/,"number.hex"],[/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?/,"number.float"],[/(?:\b(?:(define|define-syntax|define-macro))\b)(\s+)((?:\w|\-|\!|\?)*)/,["keyword","white","variable"]],{include:"@whitespace"},{include:"@strings"},[/[a-zA-Z_#][a-zA-Z0-9_\-\?\!\*]*/,{cases:{"@keywords":"keyword","@constants":"constant","@operators":"operators","@default":"identifier"}}]],comment:[[/[^\|#]+/,"comment"],[/#\|/,"comment","@push"],[/\|#/,"comment","@pop"],[/[\|#]/,"comment"]],whitespace:[[/[ \t\r\n]+/,"white"],[/#\|/,"comment","@comment"],[/;.*$/,"comment"]],strings:[[/"$/,"string","@popall"],[/"(?=.)/,"string","@multiLineString"]],multiLineString:[[/[^\\"]+$/,"string","@popall"],[/[^\\"]+/,"string"],[/\\./,"string.escape"],[/"/,"string","@popall"],[/\\$/,"string"]]}};return p(u);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/sophia/sophia.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/sophia/sophia", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var o in e)s(t,o,{get:e[o],enumerable:!0})},m=(t,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of a(e))!c.call(t,n)&&n!==o&&s(t,n,{get:()=>e[n],enumerable:!(r=i(e,n))||r.enumerable});return t};var d=t=>m(s({},"__esModule",{value:!0}),t);var u={};l(u,{conf:()=>f,language:()=>g});var f={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]}]},g={defaultToken:"",tokenPostfix:".aes",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["contract","library","entrypoint","function","stateful","state","hash","signature","tuple","list","address","string","bool","int","record","datatype","type","option","oracle","oracle_query","Call","Bits","Bytes","Oracle","String","Crypto","Address","Auth","Chain","None","Some","bits","bytes","event","let","map","private","public","true","false","var","if","else","throw"],operators:["=",">","<","!","~","?","::",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]]}};return d(u);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/sparql/sparql.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/sparql/sparql", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var d=(s,e)=>{for(var n in e)o(s,n,{get:e[n],enumerable:!0})},c=(s,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of a(e))!l.call(s,t)&&t!==n&&o(s,t,{get:()=>e[t],enumerable:!(r=i(e,t))||r.enumerable});return s};var g=s=>c(o({},"__esModule",{value:!0}),s);var m={};d(m,{conf:()=>u,language:()=>p});var u={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"'",close:"'",notIn:["string"]},{open:'"',close:'"',notIn:["string"]},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"}]},p={defaultToken:"",tokenPostfix:".rq",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["add","as","asc","ask","base","by","clear","construct","copy","create","data","delete","desc","describe","distinct","drop","false","filter","from","graph","group","having","in","insert","limit","load","minus","move","named","not","offset","optional","order","prefix","reduced","select","service","silent","to","true","undef","union","using","values","where","with"],builtinFunctions:["a","abs","avg","bind","bnode","bound","ceil","coalesce","concat","contains","count","datatype","day","encode_for_uri","exists","floor","group_concat","hours","if","iri","isblank","isiri","isliteral","isnumeric","isuri","lang","langmatches","lcase","max","md5","min","minutes","month","now","rand","regex","replace","round","sameterm","sample","seconds","sha1","sha256","sha384","sha512","str","strafter","strbefore","strdt","strends","strlang","strlen","strstarts","struuid","substr","sum","timezone","tz","ucase","uri","uuid","year"],ignoreCase:!0,tokenizer:{root:[[/<[^\s\u00a0>]*>?/,"tag"],{include:"@strings"},[/#.*/,"comment"],[/[{}()\[\]]/,"@brackets"],[/[;,.]/,"delimiter"],[/[_\w\d]+:(\.(?=[\w_\-\\%])|[:\w_-]|\\[-\\_~.!$&'()*+,;=/?#@%]|%[a-f\d][a-f\d])*/,"tag"],[/:(\.(?=[\w_\-\\%])|[:\w_-]|\\[-\\_~.!$&'()*+,;=/?#@%]|%[a-f\d][a-f\d])+/,"tag"],[/[$?]?[_\w\d]+/,{cases:{"@keywords":{token:"keyword"},"@builtinFunctions":{token:"predefined.sql"},"@default":"identifier"}}],[/\^\^/,"operator.sql"],[/\^[*+\-<>=&|^\/!?]*/,"operator.sql"],[/[*+\-<>=&|\/!?]/,"operator.sql"],[/@[a-z\d\-]*/,"metatag.html"],[/\s+/,"white"]],strings:[[/'([^'\\]|\\.)*$/,"string.invalid"],[/'$/,"string.sql","@pop"],[/'/,"string.sql","@stringBody"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"$/,"string.sql","@pop"],[/"/,"string.sql","@dblStringBody"]],stringBody:[[/[^\\']+/,"string.sql"],[/\\./,"string.escape"],[/'/,"string.sql","@pop"]],dblStringBody:[[/[^\\"]+/,"string.sql"],[/\\./,"string.escape"],[/"/,"string.sql","@pop"]]}};return g(m);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/typespec/typespec.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/typespec/typespec", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var i=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var m=(e,n)=>{for(var o in n)i(e,o,{get:n[o],enumerable:!0})},p=(e,n,o,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of l(n))!k.call(e,t)&&t!==o&&i(e,t,{get:()=>n[t],enumerable:!(r=g(n,t))||r.enumerable});return e};var x=e=>p(i({},"__esModule",{value:!0}),e);var P={};m(P,{conf:()=>L,language:()=>y});var c=e=>`\\b${e}\\b`,s=e=>`(?!${e})`,d="[_a-zA-Z]",u="[_a-zA-Z0-9]",a=c(`${d}${u}*`),f=c("[_a-zA-Z-0-9]+"),$=["import","model","scalar","namespace","op","interface","union","using","is","extends","enum","alias","return","void","if","else","projection","dec","extern","fn"],b=["true","false","null","unknown","never"],w="[ \\t\\r\\n]",C="[0-9]+",L={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"/**",close:" */",notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],indentationRules:{decreaseIndentPattern:new RegExp("^((?!.*?/\\*).*\\*/)?\\s*[\\}\\]].*$"),increaseIndentPattern:new RegExp("^((?!//).)*(\\{([^}\"'`/]*|(\\t|[ ])*//.*)|\\([^)\"'`/]*|\\[[^\\]\"'`/]*)$"),unIndentedLinePattern:new RegExp("^(\\t|[ ])*[ ]\\*[^/]*\\*/\\s*$|^(\\t|[ ])*[ ]\\*/\\s*$|^(\\t|[ ])*[ ]\\*([ ]([^\\*]|\\*(?!/))*)?$")}},y={defaultToken:"",tokenPostfix:".tsp",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],symbols:/[=:;<>]+/,keywords:$,namedLiterals:b,escapes:'\\\\(u{[0-9A-Fa-f]+}|n|r|t|\\\\|"|\\${)',tokenizer:{root:[{include:"@expression"},{include:"@whitespace"}],stringVerbatim:[{regex:'(|"|"")[^"]',action:{token:"string"}},{regex:`"""${s('"')}`,action:{token:"string",next:"@pop"}}],stringLiteral:[{regex:"\\${",action:{token:"delimiter.bracket",next:"@bracketCounting"}},{regex:'[^\\\\"$]+',action:{token:"string"}},{regex:"@escapes",action:{token:"string.escape"}},{regex:"\\\\.",action:{token:"string.escape.invalid"}},{regex:'"',action:{token:"string",next:"@pop"}}],bracketCounting:[{regex:"{",action:{token:"delimiter.bracket",next:"@bracketCounting"}},{regex:"}",action:{token:"delimiter.bracket",next:"@pop"}},{include:"@expression"}],comment:[{regex:"[^\\*]+",action:{token:"comment"}},{regex:"\\*\\/",action:{token:"comment",next:"@pop"}},{regex:"[\\/*]",action:{token:"comment"}}],whitespace:[{regex:w},{regex:"\\/\\*",action:{token:"comment",next:"@comment"}},{regex:"\\/\\/.*$",action:{token:"comment"}}],expression:[{regex:'"""',action:{token:"string",next:"@stringVerbatim"}},{regex:`"${s('""')}`,action:{token:"string",next:"@stringLiteral"}},{regex:C,action:{token:"number"}},{regex:a,action:{cases:{"@keywords":{token:"keyword"},"@namedLiterals":{token:"keyword"},"@default":{token:"identifier"}}}},{regex:`@${a}`,action:{token:"tag"}},{regex:`#${f}`,action:{token:"directive"}}]}};return x(P);})(); 9 | return moduleExports; 10 | }); 11 | -------------------------------------------------------------------------------- /src/topoViewer/webview-ui/html-static/js/library/monaco-editor/min/vs/basic-languages/xml/xml.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.50.0(c321d0fbecb50ab8a5365fa1965476b0ae63fc87) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/xml/xml", ["require","require"],(require)=>{ 8 | "use strict";var moduleExports=(()=>{var u=Object.create;var m=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var k=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var f=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var w=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),b=(e,t)=>{for(var n in t)m(e,n,{get:t[n],enumerable:!0})},i=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of p(t))!x.call(e,o)&&o!==n&&m(e,o,{get:()=>t[o],enumerable:!(r=g(t,o))||r.enumerable});return e},l=(e,t,n)=>(i(e,t,"default"),n&&i(n,t,"default")),c=(e,t,n)=>(n=e!=null?u(k(e)):{},i(t||!e||!e.__esModule?m(n,"default",{value:e,enumerable:!0}):n,e)),q=e=>i(m({},"__esModule",{value:!0}),e);var s=w((v,d)=>{var N=c(f("vs/editor/editor.api"));d.exports=N});var I={};b(I,{conf:()=>A,language:()=>C});var a={};l(a,c(s()));var A={comments:{blockComment:[""]},brackets:[["<",">"]],autoClosingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],surroundingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],onEnterRules:[{beforeText:new RegExp("<([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$","i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:a.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp("<(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),action:{indentAction:a.languages.IndentAction.Indent}}]},C={defaultToken:"",tokenPostfix:".xml",ignoreCase:!0,qualifiedName:/(?:[\w\.\-]+:)?[\w\.\-]+/,tokenizer:{root:[[/[^<&]+/,""],{include:"@whitespace"},[/(<)(@qualifiedName)/,[{token:"delimiter"},{token:"tag",next:"@tag"}]],[/(<\/)(@qualifiedName)(\s*)(>)/,[{token:"delimiter"},{token:"tag"},"",{token:"delimiter"}]],[/(<\?)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/(<\!)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/<\!\[CDATA\[/,{token:"delimiter.cdata",next:"@cdata"}],[/&\w+;/,"string.escape"]],cdata:[[/[^\]]+/,""],[/\]\]>/,{token:"delimiter.cdata",next:"@pop"}],[/\]/,""]],tag:[[/[ \t\r\n]+/,""],[/(@qualifiedName)(\s*=\s*)("[^"]*"|'[^']*')/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">?\/]*|'[^'>?\/]*)(?=[\?\/]\>)/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">]*|'[^'>]*)/,["attribute.name","","attribute.value"]],[/@qualifiedName/,"attribute.name"],[/\?>/,{token:"delimiter",next:"@pop"}],[/(\/)(>)/,[{token:"tag"},{token:"delimiter",next:"@pop"}]],[/>/,{token:"delimiter",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[//,{token:"comment",next:"@pop"}],[/