feat(core): vscode embed (#2273)

This commit is contained in:
brian-mulier-p
2023-10-23 23:49:07 +02:00
committed by GitHub
parent cc11b798ee
commit c6c4c21598
25 changed files with 1437 additions and 4 deletions

1
.gitignore vendored
View File

@@ -29,6 +29,7 @@ node_modules
yarn-error.log
yarn.lock
ui/node_modules
ui/public/vscode-web
ui/.env.local
ui/.env.*.local
webserver/src/main/resources/ui

182
ui/package-lock.json generated
View File

@@ -65,11 +65,13 @@
"monaco-editor": "0.39.0",
"monaco-yaml": "4.0.0-alpha.0",
"prettier": "^3.0.3",
"rollup-plugin-copy": "^3.5.0",
"rollup-plugin-visualizer": "^5.9.2",
"sass": "^1.69.0",
"vite": "^4.4.11",
"vite-plugin-rewrite-all": "^1.0.1",
"vitest": "^0.34.6"
"vitest": "^0.34.6",
"vscode-web": "^1.82.0"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -793,6 +795,25 @@
"@types/chai": "*"
}
},
"node_modules/@types/fs-extra": {
"version": "8.1.4",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.4.tgz",
"integrity": "sha512-OMcQKnlrkrOI0TaZ/MgVDA8LYFl7CykzFsjMj9l5x3un2nFxCY20ZFlnqrM0lcqlbs0Yro2HbnZlmopyRaoJ5w==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/glob": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
"integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
"dev": true,
"dependencies": {
"@types/minimatch": "*",
"@types/node": "*"
}
},
"node_modules/@types/json-schema": {
"version": "7.0.12",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
@@ -834,6 +855,12 @@
"integrity": "sha512-T5k6kTXak79gwmIOaDF2UUQXFbnBE0zBUzF20pz7wDYu0RQMzWg+Ml/Pz50214NsFHBITkoi5VtdjFZnJ2ijjA==",
"peer": true
},
"node_modules/@types/minimatch": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
"integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
"dev": true
},
"node_modules/@types/node": {
"version": "20.6.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz",
@@ -1381,6 +1408,15 @@
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"node_modules/array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
@@ -1719,6 +1755,12 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/colorette": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
"integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
"dev": true
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -2069,6 +2111,18 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
"dependencies": {
"path-type": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -2795,6 +2849,51 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/globby": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz",
"integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==",
"dev": true,
"dependencies": {
"@types/glob": "^7.1.1",
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
"fast-glob": "^3.0.3",
"glob": "^7.1.3",
"ignore": "^5.1.1",
"merge2": "^1.2.3",
"slash": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/globby/node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"node_modules/graphemer": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
@@ -3082,6 +3181,15 @@
"node": ">=8"
}
},
"node_modules/is-plain-object": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz",
"integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-potential-custom-element-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
@@ -3864,6 +3972,15 @@
"node": ">=8"
}
},
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/pathe": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz",
@@ -4172,6 +4289,54 @@
"fsevents": "~2.3.2"
}
},
"node_modules/rollup-plugin-copy": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz",
"integrity": "sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==",
"dev": true,
"dependencies": {
"@types/fs-extra": "^8.0.1",
"colorette": "^1.1.0",
"fs-extra": "^8.1.0",
"globby": "10.0.1",
"is-plain-object": "^3.0.0"
},
"engines": {
"node": ">=8.3"
}
},
"node_modules/rollup-plugin-copy/node_modules/fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
},
"engines": {
"node": ">=6 <7 || >=8"
}
},
"node_modules/rollup-plugin-copy/node_modules/jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
"dev": true,
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/rollup-plugin-copy/node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true,
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/rollup-plugin-inject": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz",
@@ -4441,6 +4606,15 @@
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/source-map": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
@@ -5347,6 +5521,12 @@
"integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==",
"dev": true
},
"node_modules/vscode-web": {
"version": "1.82.0",
"resolved": "https://registry.npmjs.org/vscode-web/-/vscode-web-1.82.0.tgz",
"integrity": "sha512-DV8tat1rornEyiY+/uGUhjNBVrLcDrmaGQ+k2oYQDrdyA+UH84rCPtHVyXtV5nJ1K80amY4t2s3oxGHaluKxlw==",
"dev": true
},
"node_modules/vue": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",

View File

@@ -68,10 +68,12 @@
"monaco-editor": "0.39.0",
"monaco-yaml": "4.0.0-alpha.0",
"prettier": "^3.0.3",
"rollup-plugin-copy": "^3.5.0",
"rollup-plugin-visualizer": "^5.9.2",
"sass": "^1.69.0",
"vite": "^4.4.11",
"vite-plugin-rewrite-all": "^1.0.1",
"vitest": "^0.34.6"
"vitest": "^0.34.6",
"vscode-web": "^1.82.0"
}
}

102
ui/public/vscode.html Normal file
View File

@@ -0,0 +1,102 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Kestra - VSCode</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
</head>
<body>
<script>
const queryParams = Object.fromEntries(
window.location.search.substring(1)
.split("&")
.map(str => str.split("="))
);
const KESTRA_UI_PATH = queryParams["KESTRA_UI_PATH"];
const KESTRA_API_URL = queryParams["KESTRA_API_URL"];
const THEME = queryParams["THEME"];
const style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = 'html { background-color: ' + (THEME === 'dark' ? '#21242E' : '#F5F5FF') + '; }';
document.getElementsByTagName('head')[0].appendChild(style);
</script>
<script src="vscode-web/dist/out/vs/loader.js"></script>
<script src="vscode-web/dist/out/vs/webPackagePaths.js"></script>
<script>
Object.keys(window.webPackagePaths).map(function (key) {
window.webPackagePaths[key] = `${window.location.origin}${KESTRA_UI_PATH}vscode-web/dist/node_modules/${key}/${window.webPackagePaths[key]}`;
});
require.config({
baseUrl: `${window.location.origin}${KESTRA_UI_PATH}vscode-web/dist/out`,
recordStats: true,
trustedTypesPolicy: window.trustedTypes?.createPolicy("amdLoader", {
createScriptURL(value) {
return value;
}
}),
paths: window.webPackagePaths
});
// used to configure VSCode startup
window.product = {
productConfiguration: {
nameShort: "Kestra VSCode",
nameLong: "Kestra VSCode",
// configure the open sx marketplace
"extensionsGallery": {
"serviceUrl": "https://open-vsx.org/vscode/gallery",
"itemUrl": "https://open-vsx.org/vscode/item",
"resourceUrlTemplate": "https://openvsxorg.blob.core.windows.net/resources/{publisher}/{name}/{version}/{path}"
},
},
// scope the VSCode instance to Kestra File System Provider (defined in Kestra VSCode extension)
folderUri: {
scheme: "kestra",
path: "/" + queryParams["namespace"]
},
additionalBuiltinExtensions: [
{
scheme: "https",
authority: "openvsxorg.blob.core.windows.net",
path: "/resources/PROxZIMA/sweetdracula/1.0.9/extension"
},
{
scheme: window.location.protocol.replace(":", ""),
authority: window.location.host,
path: KESTRA_UI_PATH + "yamlExt"
},
{
scheme: "https",
authority: "openvsxorg.blob.core.windows.net",
path: "/resources/kestra-io/kestra/0.1.2/extension"
},
],
"linkProtectionTrustedDomains": [
"https://open-vsx.org",
"https://openvsxorg.blob.core.windows.net"
],
enabledExtensions: [
// to handle dark theme
"proxzima.sweetdracula",
// to apply Kestra's flow validation schema
"redhat.vscode-yaml",
"kestra-io.kestra"
],
configurationDefaults: {
"files.autoSave": "off",
"editor.fontSize": 12,
"workbench.colorTheme": THEME === "dark" ? "Sweet Dracula" : "Default Light Modern",
// provide the Kestra root URL to extension
"kestra.api.url": KESTRA_API_URL
}
};
</script>
<script src="vscode-web/dist/out/vs/workbench/workbench.web.main.nls.js"></script>
<script src="vscode-web/dist/out/vs/workbench/workbench.web.main.js"></script>
<script src="vscode-web/dist/out/vs/code/browser/workbench/workbench.js"></script>
</body>
</html>

View File

@@ -0,0 +1,5 @@
{
"yaml.schemas": {
"https://json.schemastore.org/kustomization.json": "/*"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

3
ui/public/yamlExt/dist/extension.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,13 @@
/*!
* mime-db
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2015-2022 Douglas Christopher Wilson
* MIT Licensed
*/
/*!
* mime-types
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*/

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,12 @@
/*! https://mths.be/punycode v1.3.2 by @mathias */
/**
* @license
* Lodash <https://lodash.com/>
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,25 @@
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/**
* @license
* Lodash <https://lodash.com/>
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,38 @@
{
"comments": {
"lineComment": "#"
},
"brackets": [
["{", "}"],
["[", "]"],
["(", ")"]
],
"autoClosingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["\"", "\""],
["'", "'"],
["`", "`"]
],
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["\"", "\""],
["'", "'"],
["`", "`"]
],
"folding": {
"offSide": true,
"markers": {
"start": "^\\s*#\\s*region\\b",
"end": "^\\s*#\\s*endregion\\b"
}
},
"indentationRules": {
"increaseIndentPattern": "^\\s*.*(:|-) ?(&amp;\\w+)?(\\{[^}\"']*|\\([^)\"']*)?$",
"decreaseIndentPattern": "^\\s+\\}$"
},
"wordPattern": "(^.?[^\\s]+)+|([^\\s\n={[][\\w\\-\\.\/$%&*:\"']+)"
}

View File

@@ -0,0 +1,304 @@
{
"name": "vscode-yaml",
"displayName": "YAML",
"description": "YAML Language Support by Red Hat, with built-in Kubernetes syntax support",
"author": "Red Hat",
"contributors": [
{
"name": "Joshua Pinkney",
"email": "jpinkney@redhat.com"
},
{
"name": "Yevhen Vydolob",
"email": "yvydolob@redhat.com"
}
],
"license": "MIT",
"version": "1.14.0",
"publisher": "redhat",
"bugs": "https://github.com/redhat-developer/vscode-yaml/issues",
"repository": {
"type": "git",
"url": "https://github.com/redhat-developer/vscode-yaml"
},
"icon": "icon/icon128.png",
"engines": {
"npm": ">=7.0.0",
"vscode": "^1.63.0"
},
"categories": [
"Programming Languages",
"Linters",
"Snippets",
"Formatters"
],
"capabilities": {
"untrustedWorkspaces": {
"supported": true
},
"virtualWorkspaces": true
},
"activationEvents": [
"onLanguage:yaml",
"onLanguage:dockercompose"
],
"keywords": [
"kubernetes",
"yaml",
"autocompletion",
"validation"
],
"main": "./dist/extension",
"browser": "./dist/extension-web",
"contributes": {
"languages": [
{
"id": "yaml",
"aliases": [
"YAML",
"yaml"
],
"extensions": [
".yml",
".eyaml",
".eyml",
".yaml"
],
"filenames": [
".clang-format",
"_clang-format"
],
"firstLine": "^#cloud-config",
"configuration": "./language-configuration.json"
}
],
"grammars": [
{
"language": "yaml",
"scopeName": "source.yaml",
"path": "./syntaxes/yaml.tmLanguage.json"
}
],
"configuration": {
"title:": "YAML",
"properties": {
"redhat.telemetry.enabled": {
"type": "boolean",
"default": null,
"markdownDescription": "Enable usage data and errors to be sent to Red Hat servers. Read our [privacy statement](https://developers.redhat.com/article/tool-data-collection).",
"scope": "window",
"tags": [
"telemetry",
"usesOnlineServices"
]
},
"yaml.yamlVersion": {
"type": "string",
"default": "1.2",
"enum": [
"1.1",
"1.2"
],
"markdownDescription": "Default YAML spec version"
},
"yaml.trace.server": {
"type": "string",
"enum": [
"off",
"messages",
"verbose"
],
"default": "off",
"description": "Traces the communication between VSCode and the YAML language service."
},
"yaml.schemas": {
"type": "object",
"default": {},
"description": "Associate schemas to YAML files in the current workspace"
},
"yaml.format.enable": {
"type": "boolean",
"default": true,
"description": "Enable/disable default YAML formatter"
},
"yaml.format.singleQuote": {
"type": "boolean",
"default": false,
"description": "Use single quotes instead of double quotes"
},
"yaml.format.bracketSpacing": {
"type": "boolean",
"default": true,
"description": "Print spaces between brackets in objects"
},
"yaml.format.proseWrap": {
"type": "string",
"default": "preserve",
"enum": [
"preserve",
"never",
"always"
],
"description": "Always: wrap prose if it exceeds the print width, Never: never wrap the prose, Preserve: wrap prose as-is"
},
"yaml.format.printWidth": {
"type": "integer",
"default": 80,
"description": "Specify the line length that the printer will wrap on"
},
"yaml.validate": {
"type": "boolean",
"default": true,
"description": "Enable/disable validation feature"
},
"yaml.hover": {
"type": "boolean",
"default": true,
"description": "Enable/disable hover feature"
},
"yaml.completion": {
"type": "boolean",
"default": true,
"description": "Enable/disable completion feature"
},
"yaml.customTags": {
"type": "array",
"default": [],
"description": "Custom tags for the parser to use"
},
"yaml.schemaStore.enable": {
"type": "boolean",
"default": true,
"description": "Automatically pull available YAML schemas from JSON Schema Store"
},
"yaml.schemaStore.url": {
"type": "string",
"default": "https://www.schemastore.org/api/json/catalog.json",
"description": "URL of schema store catalog to use"
},
"yaml.disableAdditionalProperties": {
"type": "boolean",
"default": false,
"description": "Globally set additionalProperties to false for all objects. So if its true, no extra properties are allowed inside yaml."
},
"yaml.disableDefaultProperties": {
"type": "boolean",
"default": false,
"description": "Disable adding not required properties with default values into completion text."
},
"yaml.maxItemsComputed": {
"type": "integer",
"default": 5000,
"description": "The maximum number of outline symbols and folding regions computed (limited for performance reasons)."
},
"yaml.suggest.parentSkeletonSelectedFirst": {
"type": "boolean",
"default": false,
"description": "If true, the user must select some parent skeleton first before autocompletion starts to suggest the rest of the properties. When yaml object is not empty, autocompletion ignores this setting and returns all properties and skeletons"
},
"yaml.style.flowMapping": {
"type": "string",
"enum": [
"allow",
"forbid"
],
"default": "allow",
"description": "Forbid flow style mappings"
},
"yaml.style.flowSequence": {
"type": "string",
"enum": [
"allow",
"forbid"
],
"default": "allow",
"description": "Forbid flow style sequences"
},
"yaml.keyOrdering": {
"type": "boolean",
"default": false,
"description": "Enforces alphabetical ordering of keys in mappings when set to true"
},
"yaml.extension.recommendations": {
"type": "boolean",
"default": "true",
"description": "Suggest additional extensions based on YAML usage."
}
}
},
"configurationDefaults": {
"[yaml]": {
"editor.insertSpaces": true,
"editor.tabSize": 2,
"editor.quickSuggestions": {
"other": true,
"comments": false,
"strings": true
},
"editor.autoIndent": "keep"
}
}
},
"extensionDependencies": [],
"scripts": {
"build": "yarn run clean && yarn run lint && yarn run vscode:prepublish",
"check-dependencies": "node ./scripts/check-dependencies.js",
"clean": "rimraf out && rimraf dist",
"compile": "webpack --mode none",
"format": "prettier --write .",
"lint": "eslint -c .eslintrc.js --ext .ts src test",
"test": "yarn test-compile && sh scripts/e2e.sh",
"ui-test": "yarn test-compile && extest setup-and-run -y out/test/ui-test/allTestsSuite.js -c max",
"vscode:prepublish": "webpack --mode production",
"watch": "webpack --mode development --watch --info-verbosity verbose",
"test-compile": "yarn clean && tsc -p ./ && webpack --mode development",
"run-in-chromium": "npm run compile && vscode-test-web --browserType=chromium --extensionDevelopmentPath=. ."
},
"devDependencies": {
"@types/chai": "^4.2.12",
"@types/fs-extra": "^9.0.6",
"@types/mocha": "^2.2.48",
"@types/node": "^12.12.6",
"@types/sinon": "^10.0.6",
"@types/sinon-chai": "^3.2.5",
"@types/vscode": "^1.63.0",
"@types/webpack": "^4.4.10",
"@typescript-eslint/eslint-plugin": "^4.16.1",
"@typescript-eslint/parser": "^4.16.1",
"@vscode/test-web": "0.0.11",
"buffer": "^6.0.3",
"chai": "^4.2.0",
"crypto-browserify": "^3.12.0",
"eslint": "^7.6.0",
"eslint-config-prettier": "^6.11.0",
"eslint-plugin-prettier": "^3.1.4",
"glob": "^7.1.6",
"mocha": "^9.1.2",
"path-browserify": "^1.0.1",
"prettier": "2.2.1",
"process": "^0.11.10",
"rimraf": "^3.0.2",
"sinon": "^12.0.1",
"sinon-chai": "^3.7.0",
"ts-loader": "^9.2.5",
"ts-node": "^3.3.0",
"typescript": "4.4.3",
"umd-compat-loader": "^2.1.2",
"url": "^0.11.0",
"util": "^0.12.5",
"vscode-extension-tester": "^5.3.0",
"vscode-test": "^1.4.0",
"webpack": "^5.76.1",
"webpack-cli": "^5.0.1"
},
"dependencies": {
"@redhat-developer/vscode-redhat-telemetry": "^0.7.0",
"fs-extra": "^9.1.0",
"request-light": "^0.5.7",
"vscode-languageclient": "7.0.0",
"vscode-nls": "^3.2.1",
"vscode-uri": "^2.0.3",
"whatwg-fetch": "^3.6.2",
"yaml-language-server": "next"
}
}

View File

@@ -0,0 +1,621 @@
{
"information_for_contributors": [
"This file has been converted from https://github.com/textmate/yaml.tmbundle/blob/master/Syntaxes/YAML.tmLanguage",
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
"version": "https://github.com/textmate/yaml.tmbundle/commit/e54ceae3b719506dba7e481a77cea4a8b576ae46",
"name": "YAML",
"scopeName": "source.yaml",
"patterns": [
{
"include": "#comment"
},
{
"include": "#property"
},
{
"include": "#directive"
},
{
"match": "^---",
"name": "entity.other.document.begin.yaml"
},
{
"match": "^\\.{3}",
"name": "entity.other.document.end.yaml"
},
{
"include": "#node"
}
],
"repository": {
"block-collection": {
"patterns": [
{
"include": "#block-sequence"
},
{
"include": "#block-mapping"
}
]
},
"block-mapping": {
"patterns": [
{
"include": "#block-pair"
}
]
},
"block-node": {
"patterns": [
{
"include": "#prototype"
},
{
"include": "#block-scalar"
},
{
"include": "#block-collection"
},
{
"include": "#flow-scalar-plain-out"
},
{
"include": "#flow-node"
}
]
},
"block-pair": {
"patterns": [
{
"begin": "\\?",
"beginCaptures": {
"1": {
"name": "punctuation.definition.key-value.begin.yaml"
}
},
"end": "(?=\\?)|^ *(:)|(:)",
"endCaptures": {
"1": {
"name": "punctuation.separator.key-value.mapping.yaml"
},
"2": {
"name": "invalid.illegal.expected-newline.yaml"
}
},
"name": "meta.block-mapping.yaml",
"patterns": [
{
"include": "#block-node"
}
]
},
{
"begin": "(?x)\n (?=\n (?x:\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] \\S\n )\n (\n [^\\s:]\n | : \\S\n | \\s+ (?![#\\s])\n )*\n \\s*\n :\n\t\t\t\t\t\t\t(\\s|$)\n )\n ",
"end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n )\n ",
"patterns": [
{
"include": "#flow-scalar-plain-out-implicit-type"
},
{
"begin": "(?x)\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] \\S\n ",
"beginCaptures": {
"0": {
"name": "entity.name.tag.yaml"
}
},
"contentName": "entity.name.tag.yaml",
"end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n )\n ",
"name": "string.unquoted.plain.out.yaml"
}
]
},
{
"match": ":(?=\\s|$)",
"name": "punctuation.separator.key-value.mapping.yaml"
}
]
},
"block-scalar": {
"begin": "(?:(\\|)|(>))([1-9])?([-+])?(.*\\n?)",
"beginCaptures": {
"1": {
"name": "keyword.control.flow.block-scalar.literal.yaml"
},
"2": {
"name": "keyword.control.flow.block-scalar.folded.yaml"
},
"3": {
"name": "constant.numeric.indentation-indicator.yaml"
},
"4": {
"name": "storage.modifier.chomping-indicator.yaml"
},
"5": {
"patterns": [
{
"include": "#comment"
},
{
"match": ".+",
"name": "invalid.illegal.expected-comment-or-newline.yaml"
}
]
}
},
"end": "^(?=\\S)|(?!\\G)",
"patterns": [
{
"begin": "^([ ]+)(?! )",
"end": "^(?!\\1|\\s*$)",
"name": "string.unquoted.block.yaml"
}
]
},
"block-sequence": {
"match": "(-)(?!\\S)",
"name": "punctuation.definition.block.sequence.item.yaml"
},
"comment": {
"begin": "(?:(^[ \\t]*)|[ \\t]+)(?=#\\p{Print}*$)",
"beginCaptures": {
"1": {
"name": "punctuation.whitespace.comment.leading.yaml"
}
},
"end": "(?!\\G)",
"patterns": [
{
"begin": "#",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.yaml"
}
},
"end": "\\n",
"name": "comment.line.number-sign.yaml"
}
]
},
"directive": {
"begin": "^%",
"beginCaptures": {
"0": {
"name": "punctuation.definition.directive.begin.yaml"
}
},
"end": "(?=$|[ \\t]+($|#))",
"name": "meta.directive.yaml",
"patterns": [
{
"captures": {
"1": {
"name": "keyword.other.directive.yaml.yaml"
},
"2": {
"name": "constant.numeric.yaml-version.yaml"
}
},
"match": "\\G(YAML)[ \\t]+(\\d+\\.\\d+)"
},
{
"captures": {
"1": {
"name": "keyword.other.directive.tag.yaml"
},
"2": {
"name": "storage.type.tag-handle.yaml"
},
"3": {
"name": "support.type.tag-prefix.yaml"
}
},
"match": "(?x)\n \\G\n (TAG)\n (?:[ \\t]+\n ((?:!(?:[0-9A-Za-z\\-]*!)?))\n (?:[ \\t]+ (\n ! (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\\-#;/?:@&=+$,_.!~*'()\\[\\]] )*\n | (?![,!\\[\\]{}]) (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\\-#;/?:@&=+$,_.!~*'()\\[\\]] )+\n )\n )?\n )?\n "
},
{
"captures": {
"1": {
"name": "support.other.directive.reserved.yaml"
},
"2": {
"name": "string.unquoted.directive-name.yaml"
},
"3": {
"name": "string.unquoted.directive-parameter.yaml"
}
},
"match": "(?x) \\G (\\w+) (?:[ \\t]+ (\\w+) (?:[ \\t]+ (\\w+))? )?"
},
{
"match": "\\S+",
"name": "invalid.illegal.unrecognized.yaml"
}
]
},
"flow-alias": {
"captures": {
"1": {
"name": "keyword.control.flow.alias.yaml"
},
"2": {
"name": "punctuation.definition.alias.yaml"
},
"3": {
"name": "variable.other.alias.yaml"
},
"4": {
"name": "invalid.illegal.character.anchor.yaml"
}
},
"match": "((\\*))([^\\s\\[\\]\/{\/},]+)([^\\s\\]},]\\S*)?"
},
"flow-collection": {
"patterns": [
{
"include": "#flow-sequence"
},
{
"include": "#flow-mapping"
}
]
},
"flow-mapping": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.mapping.begin.yaml"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.definition.mapping.end.yaml"
}
},
"name": "meta.flow-mapping.yaml",
"patterns": [
{
"include": "#prototype"
},
{
"match": ",",
"name": "punctuation.separator.mapping.yaml"
},
{
"include": "#flow-pair"
}
]
},
"flow-node": {
"patterns": [
{
"include": "#prototype"
},
{
"include": "#flow-alias"
},
{
"include": "#flow-collection"
},
{
"include": "#flow-scalar"
}
]
},
"flow-pair": {
"patterns": [
{
"begin": "\\?",
"beginCaptures": {
"0": {
"name": "punctuation.definition.key-value.begin.yaml"
}
},
"end": "(?=[},\\]])",
"name": "meta.flow-pair.explicit.yaml",
"patterns": [
{
"include": "#prototype"
},
{
"include": "#flow-pair"
},
{
"include": "#flow-node"
},
{
"begin": ":(?=\\s|$|[\\[\\]{},])",
"beginCaptures": {
"0": {
"name": "punctuation.separator.key-value.mapping.yaml"
}
},
"end": "(?=[},\\]])",
"patterns": [
{
"include": "#flow-value"
}
]
}
]
},
{
"begin": "(?x)\n (?=\n (?:\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] [^\\s[\\[\\]{},]]\n )\n (\n [^\\s:[\\[\\]{},]]\n | : [^\\s[\\[\\]{},]]\n | \\s+ (?![#\\s])\n )*\n \\s*\n :\n\t\t\t\t\t\t\t(\\s|$)\n )\n ",
"end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n | \\s* : [\\[\\]{},]\n | \\s* [\\[\\]{},]\n )\n ",
"name": "meta.flow-pair.key.yaml",
"patterns": [
{
"include": "#flow-scalar-plain-in-implicit-type"
},
{
"begin": "(?x)\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] [^\\s[\\[\\]{},]]\n ",
"beginCaptures": {
"0": {
"name": "entity.name.tag.yaml"
}
},
"contentName": "entity.name.tag.yaml",
"end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n | \\s* : [\\[\\]{},]\n | \\s* [\\[\\]{},]\n )\n ",
"name": "string.unquoted.plain.in.yaml"
}
]
},
{
"include": "#flow-node"
},
{
"begin": ":(?=\\s|$|[\\[\\]{},])",
"captures": {
"0": {
"name": "punctuation.separator.key-value.mapping.yaml"
}
},
"end": "(?=[},\\]])",
"name": "meta.flow-pair.yaml",
"patterns": [
{
"include": "#flow-value"
}
]
}
]
},
"flow-scalar": {
"patterns": [
{
"include": "#flow-scalar-double-quoted"
},
{
"include": "#flow-scalar-single-quoted"
},
{
"include": "#flow-scalar-plain-in"
}
]
},
"flow-scalar-double-quoted": {
"begin": "\"",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.yaml"
}
},
"end": "\"",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.yaml"
}
},
"name": "string.quoted.double.yaml",
"patterns": [
{
"match": "\\\\([0abtnvfre \"/\\\\N_Lp]|x\\d\\d|u\\d{4}|U\\d{8})",
"name": "constant.character.escape.yaml"
},
{
"match": "\\\\\\n",
"name": "constant.character.escape.double-quoted.newline.yaml"
}
]
},
"flow-scalar-plain-in": {
"patterns": [
{
"include": "#flow-scalar-plain-in-implicit-type"
},
{
"begin": "(?x)\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] [^\\s[\\[\\]{},]]\n ",
"end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n | \\s* : [\\[\\]{},]\n | \\s* [\\[\\]{},]\n )\n ",
"name": "string.unquoted.plain.in.yaml"
}
]
},
"flow-scalar-plain-in-implicit-type": {
"patterns": [
{
"captures": {
"1": {
"name": "constant.language.null.yaml"
},
"2": {
"name": "constant.language.boolean.yaml"
},
"3": {
"name": "constant.numeric.integer.yaml"
},
"4": {
"name": "constant.numeric.float.yaml"
},
"5": {
"name": "constant.other.timestamp.yaml"
},
"6": {
"name": "constant.language.value.yaml"
},
"7": {
"name": "constant.language.merge.yaml"
}
},
"match": "(?x)\n (?x:\n (null|Null|NULL|~)\n | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)\n | (\n (?:\n [-+]? 0b [0-1_]+ # (base 2)\n | [-+]? 0 [0-7_]+ # (base 8)\n | [-+]? (?: 0|[1-9][0-9_]*) # (base 10)\n | [-+]? 0x [0-9a-fA-F_]+ # (base 16)\n | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60)\n )\n )\n | (\n (?x:\n [-+]? (?: [0-9] [0-9_]*)? \\. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10)\n | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \\. [0-9_]* # (base 60)\n | [-+]? \\. (?: inf|Inf|INF) # (infinity)\n | \\. (?: nan|NaN|NAN) # (not a number)\n )\n )\n | (\n (?x:\n \\d{4} - \\d{2} - \\d{2} # (y-m-d)\n | \\d{4} # (year)\n - \\d{1,2} # (month)\n - \\d{1,2} # (day)\n (?: [Tt] | [ \\t]+) \\d{1,2} # (hour)\n : \\d{2} # (minute)\n : \\d{2} # (second)\n (?: \\.\\d*)? # (fraction)\n (?:\n (?:[ \\t]*) Z\n | [-+] \\d{1,2} (?: :\\d{1,2})?\n )? # (time zone)\n )\n )\n | (=)\n | (<<)\n )\n (?:\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n | \\s* : [\\[\\]{},]\n | \\s* [\\[\\]{},]\n )\n )\n "
}
]
},
"flow-scalar-plain-out": {
"patterns": [
{
"include": "#flow-scalar-plain-out-implicit-type"
},
{
"begin": "(?x)\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] \\S\n ",
"end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n )\n ",
"name": "string.unquoted.plain.out.yaml"
}
]
},
"flow-scalar-plain-out-implicit-type": {
"patterns": [
{
"captures": {
"1": {
"name": "constant.language.null.yaml"
},
"2": {
"name": "constant.language.boolean.yaml"
},
"3": {
"name": "constant.numeric.integer.yaml"
},
"4": {
"name": "constant.numeric.float.yaml"
},
"5": {
"name": "constant.other.timestamp.yaml"
},
"6": {
"name": "constant.language.value.yaml"
},
"7": {
"name": "constant.language.merge.yaml"
}
},
"match": "(?x)\n (?x:\n (null|Null|NULL|~)\n | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)\n | (\n (?:\n [-+]? 0b [0-1_]+ # (base 2)\n | [-+]? 0 [0-7_]+ # (base 8)\n | [-+]? (?: 0|[1-9][0-9_]*) # (base 10)\n | [-+]? 0x [0-9a-fA-F_]+ # (base 16)\n | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60)\n )\n )\n | (\n (?x:\n [-+]? (?: [0-9] [0-9_]*)? \\. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10)\n | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \\. [0-9_]* # (base 60)\n | [-+]? \\. (?: inf|Inf|INF) # (infinity)\n | \\. (?: nan|NaN|NAN) # (not a number)\n )\n )\n | (\n (?x:\n \\d{4} - \\d{2} - \\d{2} # (y-m-d)\n | \\d{4} # (year)\n - \\d{1,2} # (month)\n - \\d{1,2} # (day)\n (?: [Tt] | [ \\t]+) \\d{1,2} # (hour)\n : \\d{2} # (minute)\n : \\d{2} # (second)\n (?: \\.\\d*)? # (fraction)\n (?:\n (?:[ \\t]*) Z\n | [-+] \\d{1,2} (?: :\\d{1,2})?\n )? # (time zone)\n )\n )\n | (=)\n | (<<)\n )\n (?x:\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n )\n )\n "
}
]
},
"flow-scalar-single-quoted": {
"begin": "'",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.yaml"
}
},
"end": "'(?!')",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.yaml"
}
},
"name": "string.quoted.single.yaml",
"patterns": [
{
"match": "''",
"name": "constant.character.escape.single-quoted.yaml"
}
]
},
"flow-sequence": {
"begin": "\\[",
"beginCaptures": {
"0": {
"name": "punctuation.definition.sequence.begin.yaml"
}
},
"end": "\\]",
"endCaptures": {
"0": {
"name": "punctuation.definition.sequence.end.yaml"
}
},
"name": "meta.flow-sequence.yaml",
"patterns": [
{
"include": "#prototype"
},
{
"match": ",",
"name": "punctuation.separator.sequence.yaml"
},
{
"include": "#flow-pair"
},
{
"include": "#flow-node"
}
]
},
"flow-value": {
"patterns": [
{
"begin": "\\G(?![},\\]])",
"end": "(?=[},\\]])",
"name": "meta.flow-pair.value.yaml",
"patterns": [
{
"include": "#flow-node"
}
]
}
]
},
"node": {
"patterns": [
{
"include": "#block-node"
}
]
},
"property": {
"begin": "(?=!|&)",
"end": "(?!\\G)",
"name": "meta.property.yaml",
"patterns": [
{
"captures": {
"1": {
"name": "keyword.control.property.anchor.yaml"
},
"2": {
"name": "punctuation.definition.anchor.yaml"
},
"3": {
"name": "entity.name.type.anchor.yaml"
},
"4": {
"name": "invalid.illegal.character.anchor.yaml"
}
},
"match": "\\G((&))([^\\s\\[\\]/{/},]+)(\\S+)?"
},
{
"match": "(?x)\n \\G\n (?:\n ! < (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\\-#;/?:@&=+$,_.!~*'()\\[\\]] )+ >\n | (?:!(?:[0-9A-Za-z\\-]*!)?) (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\\-#;/?:@&=+$_.~*'()] )+\n | !\n )\n (?=\\ |\\t|$)\n ",
"name": "storage.type.tag-handle.yaml"
},
{
"match": "\\S+",
"name": "invalid.illegal.tag-handle.yaml"
}
]
},
"prototype": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#property"
}
]
}
}
}

View File

@@ -0,0 +1,73 @@
<template>
<top-nav-bar :title="routeInfo.title">
<template #additional-right>
<namespace-select class="fit-content"
data-type="flow"
:value="namespace"
@update:model-value="namespaceUpdate"/>
</template>
</top-nav-bar>
<iframe
style="visibility:hidden;"
onload="this.style.visibility = 'visible';"
v-if="namespace"
class="vscode-editor"
:src="vscodeIndexUrl"
/>
<div v-else class="m-3 mw-100">
<el-alert type="info" :closable="false">
{{ $t("namespace choice") }}
</el-alert>
</div>
</template>
<script setup>
import NamespaceSelect from "./NamespaceSelect.vue";
import TopNavBar from "../layout/TopNavBar.vue";
</script>
<script>
import RouteContext from "../../mixins/routeContext";
import RestoreUrl from "../../mixins/restoreUrl";
import {apiUrl} from "override/utils/route";
export default {
mixins: [RouteContext, RestoreUrl],
methods: {
namespaceUpdate(namespace) {
this.$router.push({
params: {
namespace
}
});
}
},
computed: {
routeInfo() {
return {
title: this.$t("editor")
};
},
theme() {
return localStorage.getItem("theme") || "light";
},
vscodeIndexUrl() {
const uiSubpath = KESTRA_UI_PATH === "./" ? "/" : KESTRA_UI_PATH;
return `${uiSubpath}vscode.html?KESTRA_UI_PATH=${uiSubpath}&KESTRA_API_URL=${apiUrl(this.$store)}&THEME=${this.theme}&namespace=${this.namespace}`;
},
namespace() {
return this.$route.params.namespace;
}
}
}
</script>
<style lang="scss">
.fit-content {
width: fit-content;
}
.vscode-editor {
height: calc(100vh - 64.8px);
width: 100%;
}
</style>

View File

@@ -37,6 +37,7 @@
import TimelineTextOutline from "vue-material-design-icons/TimelineTextOutline.vue";
import NotebookOutline from "vue-material-design-icons/NotebookOutline.vue";
import Ballot from "vue-material-design-icons/Ballot.vue";
import FolderEditOutline from "vue-material-design-icons/FolderEditOutline.vue";
import AccountSupervisorOutline from "vue-material-design-icons/AccountSupervisorOutline.vue";
import CogOutline from "vue-material-design-icons/CogOutline.vue";
import ViewDashboardVariantOutline from "vue-material-design-icons/ViewDashboardVariantOutline.vue";
@@ -91,6 +92,14 @@
class: "menu-icon",
},
},
{
href: {name: "editor"},
title: this.$t("editor"),
icon: {
element: FolderEditOutline,
class: "menu-icon",
},
},
{
href: {name: "flows/list"},
routes: this.routeStartWith("flows"),

View File

@@ -18,6 +18,7 @@ import Blueprints from "override/components/flows/blueprints/Blueprints.vue";
import BlueprintDetail from "../components/flows/blueprints/BlueprintDetail.vue";
import Triggers from "../components/admin/Triggers.vue";
import Workers from "../components/admin/Workers.vue";
import Editor from "../components/namespace/Editor.vue";
export default [
@@ -25,6 +26,11 @@ export default [
{name: "root", path: '/', redirect: {name: 'home'}},
{name: "home", path: "/:tenant?/dashboard", component: Home},
{name: "welcome", path: "/:tenant?/welcome", component: Welcome},
//Namespace file editor
{name: "editor", path: "/:tenant?/editor/:namespace?", component: Editor},
//Flows
{name: "flows/list", path: "/:tenant?/flows", component: Flows},
{name: "flows/search", path: "/:tenant?/flows/search", component: FlowsSearch},
{name: "flows/create", path: "/:tenant?/flows/new", component: FlowCreate},

View File

@@ -45,7 +45,7 @@ main {
}
// apply start & end margin for top-bar neighbours
.top-bar ~ * {
.top-bar ~ *:not(iframe) {
margin-left: var(--offset-from-menu);
max-width: calc(100% - 2 * var(--offset-from-menu));
}

View File

@@ -460,6 +460,7 @@
"metric": "Metric",
"aggregation": "Aggregation",
"metric choice": "Please choose a metric and an aggregation",
"namespace choice": "Please choose a namespace to start using the editor",
"of": "of",
"save draft": {
"message": "Draft saved",

View File

@@ -3,6 +3,7 @@ import {defineConfig} from "vite";
import vue from "@vitejs/plugin-vue";
import pluginRewriteAll from 'vite-plugin-rewrite-all';
import {visualizer} from "rollup-plugin-visualizer";
import copy from 'rollup-plugin-copy'
export default defineConfig({
base: "",
@@ -15,9 +16,22 @@ export default defineConfig({
},
},
plugins: [
copy({
hook: 'buildStart',
targets: [
{
src: 'node_modules/vscode-web/dist/out/*',
dest: 'public/vscode-web/dist/out/'
},
{
src: 'node_modules/vscode-web/*',
dest: 'public/vscode-web/'
}
]
}),
vue(),
pluginRewriteAll(),
visualizer()
visualizer(),
],
css: {
devSourcemap: true