From 9d3f0a9d2b4a76eff565b6e09ae2e4e507ff4f93 Mon Sep 17 00:00:00 2001 From: Drew Ansbacher Date: Tue, 8 Feb 2022 13:00:40 -0700 Subject: [PATCH] Trying code editor (#1173) Implement hidden dev service packaging tools. Co-authored-by: Drew Ansbacher Co-authored-by: Matt Hill --- frontend/angular.json | 5 + frontend/package-lock.json | 188 +++- frontend/package.json | 8 +- .../projects/ui/src/app/app-routing.module.ts | 34 +- .../projects/ui/src/app/app.component.html | 116 ++- frontend/projects/ui/src/app/app.component.ts | 259 ++--- frontend/projects/ui/src/app/app.module.ts | 2 + .../src/app/modals/markdown/markdown.page.ts | 16 +- .../dev-config/dev-config.module.ts | 32 + .../dev-config/dev-config.page.html | 18 + .../dev-config/dev-config.page.scss | 0 .../dev-config/dev-config.page.ts | 106 ++ .../dev-instructions.module.ts | 32 + .../dev-instructions.page.html | 18 + .../dev-instructions.page.scss | 0 .../dev-instructions/dev-instructions.page.ts | 27 + .../developer-list/developer-list.module.ts | 28 + .../developer-list/developer-list.page.html | 26 + .../developer-list/developer-list.page.scss | 0 .../developer-list/developer-list.page.ts | 23 + .../developer-routing.module.ts | 30 + .../preferences/preferences.page.html | 32 +- .../preferences/preferences.page.ts | 59 +- .../ui/src/app/pkg-config/config-types.ts | 80 +- .../services/api/embassy-mock-api.service.ts | 285 ++++-- .../ui/src/app/services/api/mock-patch.ts | 955 +++++++++--------- .../src/app/services/local-storage.service.ts | 24 + .../src/app/services/patch-db/data-model.ts | 75 +- .../src/app/services/server-config.service.ts | 43 +- 29 files changed, 1644 insertions(+), 877 deletions(-) create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/dev-config/dev-config.module.ts create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/dev-config/dev-config.page.html create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/dev-config/dev-config.page.scss create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/dev-config/dev-config.page.ts create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/dev-instructions/dev-instructions.module.ts create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/dev-instructions/dev-instructions.page.html create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/dev-instructions/dev-instructions.page.scss create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/dev-instructions/dev-instructions.page.ts create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/developer-list/developer-list.module.ts create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/developer-list/developer-list.page.html create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/developer-list/developer-list.page.scss create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/developer-list/developer-list.page.ts create mode 100644 frontend/projects/ui/src/app/pages/developer-routes/developer-routing.module.ts create mode 100644 frontend/projects/ui/src/app/services/local-storage.service.ts diff --git a/frontend/angular.json b/frontend/angular.json index e6bc332aa..d60ff251f 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -30,6 +30,11 @@ "glob": "**/*.svg", "input": "node_modules/ionicons/dist/ionicons/svg", "output": "./svg" + }, + { + "glob": "**/*", + "input": "node_modules/monaco-editor", + "output": "assets/monaco-editor/" } ], "styles": [ diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2b3b61a1f..cd59af1e3 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -18,10 +18,9 @@ "@angular/router": "^13.2.0", "@ionic/angular": "^6.0.3", "@ionic/storage-angular": "^3.0.6", + "@materia-ui/ngx-monaco-editor": "^6.0.0", "@start9labs/argon2": "^0.1.0", "@start9labs/emver": "^0.1.5", - "@types/aes-js": "^3.1.1", - "@types/pbkdf2": "^3.1.0", "aes-js": "^3.1.2", "ajv": "^6.12.6", "ansi-to-html": "^0.7.2", @@ -29,7 +28,9 @@ "dompurify": "^2.3.3", "fast-json-patch": "^3.1.0", "fuse.js": "^6.4.6", + "js-yaml": "^4.1.0", "marked": "^4.0.0", + "monaco-editor": "^0.32.0", "mustache": "^4.2.0", "ng-qrcode": "^6.0.0", "patch-db-client": "file: ../../../patch-db/client", @@ -45,10 +46,13 @@ "@angular/compiler-cli": "^13.2.0", "@angular/language-service": "^13.2.0", "@ionic/cli": "^6.18.1", + "@types/aes-js": "^3.1.1", "@types/dompurify": "^2.3.3", + "@types/js-yaml": "^4.0.5", "@types/marked": "^4.0.0", "@types/mustache": "^4.1.2", "@types/node": "^16.9.1", + "@types/pbkdf2": "^3.1.0", "@types/uuid": "^8.3.1", "husky": "^4.3.8", "lint-staged": "^12.1.2", @@ -2900,6 +2904,28 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -2918,6 +2944,18 @@ "node": ">=10.0.0" } }, + "node_modules/@materia-ui/ngx-monaco-editor": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@materia-ui/ngx-monaco-editor/-/ngx-monaco-editor-6.0.0.tgz", + "integrity": "sha512-gTqNQjOGznZxOC0NlmKdKSGCJuTts8YmK4dsTQAGc5IgIV7cZdQWiW6AL742h0ruED6q0cAunEYjXT6jzHBoIQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "rxjs": ">=6.0.0" + } + }, "node_modules/@ngtools/webpack": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.0.tgz", @@ -3267,7 +3305,8 @@ "node_modules/@types/aes-js": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@types/aes-js/-/aes-js-3.1.1.tgz", - "integrity": "sha512-SDSGgXT3LRCH6qMWk8OHT1vLSVNuHNvCpKCx2/TYtQMbMGGgxJC9fspwSkQjqzRagrWnCrxuLL3jMNXLXHHvSw==" + "integrity": "sha512-SDSGgXT3LRCH6qMWk8OHT1vLSVNuHNvCpKCx2/TYtQMbMGGgxJC9fspwSkQjqzRagrWnCrxuLL3jMNXLXHHvSw==", + "dev": true }, "node_modules/@types/body-parser": { "version": "1.19.2", @@ -3374,6 +3413,12 @@ "@types/node": "*" } }, + "node_modules/@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -3401,7 +3446,8 @@ "node_modules/@types/node": { "version": "16.11.21", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.21.tgz", - "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==" + "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==", + "dev": true }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -3413,6 +3459,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "dev": true, "dependencies": { "@types/node": "*" } @@ -3925,13 +3972,9 @@ "dev": true }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-flatten": { "version": "2.1.2", @@ -8154,13 +8197,11 @@ "dev": true }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -9312,6 +9353,11 @@ "node": ">=10" } }, + "node_modules/monaco-editor": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.32.0.tgz", + "integrity": "sha512-r3xvo6XMA/fg3SuVJb+NMxf+fXHO8GPIOLoPFRO2LIf7GbqfV9W7FdddqT9ze+bCtnLd+s4IScnOGCgDQDg4BQ==" + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -12949,6 +12995,15 @@ "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" } }, + "node_modules/tslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/tslint/node_modules/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -12964,6 +13019,19 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/tslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/tslint/node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -15914,6 +15982,27 @@ "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, "@istanbuljs/schema": { @@ -15928,6 +16017,14 @@ "integrity": "sha512-fuIOnc81C5iRNevb/XPiM8Khp9bVjreydRQ37rt0C/dY0PAW1DRvEM3WrKX/5rStS5lbgwS0FCgqSndh9tvK5w==", "dev": true }, + "@materia-ui/ngx-monaco-editor": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@materia-ui/ngx-monaco-editor/-/ngx-monaco-editor-6.0.0.tgz", + "integrity": "sha512-gTqNQjOGznZxOC0NlmKdKSGCJuTts8YmK4dsTQAGc5IgIV7cZdQWiW6AL742h0ruED6q0cAunEYjXT6jzHBoIQ==", + "requires": { + "tslib": "^2.0.0" + } + }, "@ngtools/webpack": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.0.tgz", @@ -16191,7 +16288,8 @@ "@types/aes-js": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@types/aes-js/-/aes-js-3.1.1.tgz", - "integrity": "sha512-SDSGgXT3LRCH6qMWk8OHT1vLSVNuHNvCpKCx2/TYtQMbMGGgxJC9fspwSkQjqzRagrWnCrxuLL3jMNXLXHHvSw==" + "integrity": "sha512-SDSGgXT3LRCH6qMWk8OHT1vLSVNuHNvCpKCx2/TYtQMbMGGgxJC9fspwSkQjqzRagrWnCrxuLL3jMNXLXHHvSw==", + "dev": true }, "@types/body-parser": { "version": "1.19.2", @@ -16298,6 +16396,12 @@ "@types/node": "*" } }, + "@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "dev": true + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -16325,7 +16429,8 @@ "@types/node": { "version": "16.11.21", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.21.tgz", - "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==" + "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==", + "dev": true }, "@types/parse-json": { "version": "4.0.0", @@ -16337,6 +16442,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "dev": true, "requires": { "@types/node": "*" } @@ -16782,13 +16888,9 @@ "dev": true }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-flatten": { "version": "2.1.2", @@ -19908,13 +20010,11 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsesc": { @@ -20792,6 +20892,11 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, + "monaco-editor": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.32.0.tgz", + "integrity": "sha512-r3xvo6XMA/fg3SuVJb+NMxf+fXHO8GPIOLoPFRO2LIf7GbqfV9W7FdddqT9ze+bCtnLd+s4IScnOGCgDQDg4BQ==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -23492,6 +23597,15 @@ "tsutils": "^2.29.0" }, "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -23504,6 +23618,16 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", diff --git a/frontend/package.json b/frontend/package.json index 01bb1f65a..9333d5f4b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,10 +30,9 @@ "@angular/router": "^13.2.0", "@ionic/angular": "^6.0.3", "@ionic/storage-angular": "^3.0.6", + "@materia-ui/ngx-monaco-editor": "^6.0.0", "@start9labs/argon2": "^0.1.0", "@start9labs/emver": "^0.1.5", - "@types/aes-js": "^3.1.1", - "@types/pbkdf2": "^3.1.0", "aes-js": "^3.1.2", "ajv": "^6.12.6", "ansi-to-html": "^0.7.2", @@ -41,7 +40,9 @@ "dompurify": "^2.3.3", "fast-json-patch": "^3.1.0", "fuse.js": "^6.4.6", + "js-yaml": "^4.1.0", "marked": "^4.0.0", + "monaco-editor": "^0.32.0", "mustache": "^4.2.0", "ng-qrcode": "^6.0.0", "patch-db-client": "file: ../../../patch-db/client", @@ -57,10 +58,13 @@ "@angular/compiler-cli": "^13.2.0", "@angular/language-service": "^13.2.0", "@ionic/cli": "^6.18.1", + "@types/aes-js": "^3.1.1", "@types/dompurify": "^2.3.3", + "@types/js-yaml": "^4.0.5", "@types/marked": "^4.0.0", "@types/mustache": "^4.1.2", "@types/node": "^16.9.1", + "@types/pbkdf2": "^3.1.0", "@types/uuid": "^8.3.1", "husky": "^4.3.8", "lint-staged": "^12.1.2", diff --git a/frontend/projects/ui/src/app/app-routing.module.ts b/frontend/projects/ui/src/app/app-routing.module.ts index 326e37928..68cfd1044 100644 --- a/frontend/projects/ui/src/app/app-routing.module.ts +++ b/frontend/projects/ui/src/app/app-routing.module.ts @@ -12,30 +12,52 @@ const routes: Routes = [ { path: 'login', canActivate: [UnauthGuard], - loadChildren: () => import('./pages/login/login.module').then(m => m.LoginPageModule), + loadChildren: () => + import('./pages/login/login.module').then(m => m.LoginPageModule), }, { path: 'embassy', canActivate: [AuthGuard], canActivateChild: [AuthGuard], - loadChildren: () => import('./pages/server-routes/server-routing.module').then(m => m.ServerRoutingModule), + loadChildren: () => + import('./pages/server-routes/server-routing.module').then( + m => m.ServerRoutingModule, + ), }, { path: 'marketplace', canActivate: [AuthGuard], canActivateChild: [AuthGuard], - loadChildren: () => import('./pages/marketplace-routes/marketplace-routing.module').then(m => m.MarketplaceRoutingModule), + loadChildren: () => + import('./pages/marketplace-routes/marketplace-routing.module').then( + m => m.MarketplaceRoutingModule, + ), }, { path: 'notifications', canActivate: [AuthGuard], - loadChildren: () => import('./pages/notifications/notifications.module').then(m => m.NotificationsPageModule), + loadChildren: () => + import('./pages/notifications/notifications.module').then( + m => m.NotificationsPageModule, + ), }, { path: 'services', canActivate: [AuthGuard], canActivateChild: [AuthGuard], - loadChildren: () => import('./pages/apps-routes/apps-routing.module').then(m => m.AppsRoutingModule), + loadChildren: () => + import('./pages/apps-routes/apps-routing.module').then( + m => m.AppsRoutingModule, + ), + }, + { + path: 'developer', + canActivate: [AuthGuard], + canActivateChild: [AuthGuard], + loadChildren: () => + import('./pages/developer-routes/developer-routing.module').then( + m => m.DeveloperRoutingModule, + ), }, ] @@ -50,4 +72,4 @@ const routes: Routes = [ ], exports: [RouterModule], }) -export class AppRoutingModule { } +export class AppRoutingModule {} diff --git a/frontend/projects/ui/src/app/app.component.html b/frontend/projects/ui/src/app/app.component.html index 3642b9229..0eacea537 100644 --- a/frontend/projects/ui/src/app/app.component.html +++ b/frontend/projects/ui/src/app/app.component.html @@ -1,16 +1,27 @@ - + -
- +
+
- - + + - + {{ page.title }} - {{ unreadCount }} + {{ unreadCount }} -
-
+
+
- - + + Log Out - +
- -