├── .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 |
--------------------------------------------------------------------------------
/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 |
17 |
--------------------------------------------------------------------------------
/resources/icons/ethernet-port-green.svg:
--------------------------------------------------------------------------------
1 |
2 |
17 |
--------------------------------------------------------------------------------
/resources/icons/ethernet-port-light.svg:
--------------------------------------------------------------------------------
1 |
2 |
17 |
--------------------------------------------------------------------------------
/resources/icons/ethernet-port-red.svg:
--------------------------------------------------------------------------------
1 |
2 |
17 |
--------------------------------------------------------------------------------
/resources/icons/partial.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/icons/running.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/icons/stopped.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/icons/undeployed.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/icons/wireshark_dark.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/icons/wireshark_light.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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 |
4 |
--------------------------------------------------------------------------------
/src/topoViewer/webview-ui/html-static/images/svg-copy.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/src/topoViewer/webview-ui/html-static/images/svg-impairment.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/src/topoViewer/webview-ui/html-static/images/svg-parallelogram.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/topoViewer/webview-ui/html-static/images/svg-wireshark.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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"}],[/