c0ckp1t 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +5 -0
- package/c0ckp1t-demo/Constants.mjs +125 -0
- package/c0ckp1t-demo/components/sidebar.vue +82 -0
- package/c0ckp1t-demo/main.vue +39 -0
- package/c0ckp1t-demo/pages/devices.vue +63 -0
- package/c0ckp1t-demo/pages/homepage.vue +63 -0
- package/c0ckp1t-demo/pages/report.vue +63 -0
- package/c0ckp1t-demo/store.mjs +133 -0
- package/components/ExecButton.vue +62 -0
- package/components/FsTree.vue +550 -0
- package/components/Markdown.mjs +274 -0
- package/components/MarkdownUtils.mjs +180 -0
- package/components/Tree.mjs +175 -0
- package/components/code-mirror.vue +445 -0
- package/components/vue3-ace-editor.vue +331 -0
- package/components/xbutton.vue +45 -0
- package/components/xcard-h.vue +175 -0
- package/components/xcard.vue +76 -0
- package/components/xcheck.vue +35 -0
- package/components/xcheckbox.vue +52 -0
- package/components/xcode.vue +139 -0
- package/components/xcollapse.vue +52 -0
- package/components/xcolor.vue +84 -0
- package/components/xdropdown.vue +104 -0
- package/components/xdropdown2.vue +140 -0
- package/components/xhidden.vue +30 -0
- package/components/xinput.vue +101 -0
- package/components/xinput2.vue +101 -0
- package/components/xjson.vue +95 -0
- package/components/xkv.vue +41 -0
- package/components/xlabel.vue +56 -0
- package/components/xlist.vue +83 -0
- package/components/xmap.vue +106 -0
- package/components/xmarkdown.vue +269 -0
- package/components/xnav.vue +98 -0
- package/components/xsection.vue +164 -0
- package/components/xsound.vue +251 -0
- package/components/xtable-open.vue +179 -0
- package/components/xtabs.vue +72 -0
- package/components/xterminal.vue +456 -0
- package/components/xtextarea.vue +83 -0
- package/components/xtoggle.vue +68 -0
- package/components/xtoggle3.vue +67 -0
- package/components/xtree.vue +140 -0
- package/components/xupload.vue +129 -0
- package/core/Content.mjs +92 -0
- package/core/DocUtils.mjs +189 -0
- package/core/GlobalStore.mjs +329 -0
- package/core/Island.mjs +429 -0
- package/core/IslandDefault.mjs +229 -0
- package/core/JsUtils.mjs +483 -0
- package/core/Logging.mjs +59 -0
- package/core/Page404.vue +152 -0
- package/core/PageFallback.vue +168 -0
- package/core/PageMain.vue +181 -0
- package/core/Theme.mjs +1759 -0
- package/core/VueUtils.mjs +200 -0
- package/core/WsUtils.mjs +274 -0
- package/core/img/Flag_of_the_United_States.svg +25 -0
- package/core/img/logo_v1.svg +98 -0
- package/core/img/logo_v2.svg +98 -0
- package/core/img/state-uniqueId-8k.wav +0 -0
- package/core/main-offcanvas.vue +99 -0
- package/core/nodes/_api.vue +82 -0
- package/core/nodes/node-container.vue +103 -0
- package/core/nodes/node.vue +246 -0
- package/core/nodes/place-holder.vue +47 -0
- package/core/nodes/root.vue +52 -0
- package/core/notify/NotifyUtils.mjs +150 -0
- package/core/notify/toast.vue +150 -0
- package/core/pages/About.vue +57 -0
- package/core/pages/Cache.vue +155 -0
- package/core/pages/Connection.vue +192 -0
- package/core/pages/Connections.vue +102 -0
- package/core/pages/Documentation.vue +263 -0
- package/core/pages/Notifies.vue +156 -0
- package/core/pages/Traffic.vue +152 -0
- package/core/pages/connections/connection-header-details.vue +80 -0
- package/core/pages/connections/page-connection-default.vue +92 -0
- package/core/pages/connections/page-connection.vue +176 -0
- package/core/pages/connections/ws-connection.vue +146 -0
- package/core/pages/frontend/Bootstrap.vue +1140 -0
- package/core/pages/frontend/Components.vue +56 -0
- package/core/pages/frontend/ComponentsAdv.vue +203 -0
- package/core/pages/frontend/ComponentsBasic.vue +336 -0
- package/core/pages/frontend/Theme.vue +473 -0
- package/core/pages/frontend/component-view.vue +65 -0
- package/core/pages/traffic/WsLogUtils.mjs +91 -0
- package/core/pages/traffic/log-ws-exec.vue +124 -0
- package/core/pages/traffic/log-ws-exec2.vue +129 -0
- package/core/sfc/code-item.vue +169 -0
- package/core/sfc/connection-header.vue +62 -0
- package/core/sfc/info-api.vue +158 -0
- package/core/sfc/md-toc.vue +346 -0
- package/core/sfc/scroll-to-top.vue +69 -0
- package/core/sfc/task.vue +98 -0
- package/core/sfc/text-to-md.vue +25 -0
- package/core/sfc/toc-list.vue +175 -0
- package/core/ws-client/AuthNState.mjs +84 -0
- package/core/ws-client/Connection.mjs +580 -0
- package/core/ws-client/Session.mjs +72 -0
- package/core/ws-client/WsClient.mjs +230 -0
- package/core/ws-client/WsLogUtils.mjs +91 -0
- package/core/ws-client/ws-connection.vue +144 -0
- package/css/Changa-Medium.ttf +0 -0
- package/css/Makefile +10 -0
- package/css/README.md +25 -0
- package/css/bootstrap-c0ckp1t.css +11861 -0
- package/css/bootstrap.min.css +6 -0
- package/css/fontawesome/brands.min.css +6 -0
- package/css/fontawesome/fontawesome.min.css +8 -0
- package/css/fontawesome/regular.min.css +6 -0
- package/css/fontawesome/solid.min.css +6 -0
- package/css/webfonts/fa-brands-400.woff2 +0 -0
- package/css/webfonts/fa-regular-400.woff2 +0 -0
- package/css/webfonts/fa-solid-900.woff2 +0 -0
- package/docs/Introduction.md +3 -0
- package/favicon-192x192.png +0 -0
- package/favicon-32x32.png +0 -0
- package/favicon-64x64.png +0 -0
- package/favicon.ico +0 -0
- package/index-cdn.html +66 -0
- package/js_ext/Makefile +26 -0
- package/js_ext/ace-editor/ace.js +22037 -0
- package/js_ext/ace-editor/ext-beautify.js +343 -0
- package/js_ext/ace-editor/ext-code_lens.js +204 -0
- package/js_ext/ace-editor/ext-command_bar.js +469 -0
- package/js_ext/ace-editor/ext-diff.js +4265 -0
- package/js_ext/ace-editor/ext-elastic_tabstops_lite.js +238 -0
- package/js_ext/ace-editor/ext-emmet.js +1303 -0
- package/js_ext/ace-editor/ext-error_marker.js +9 -0
- package/js_ext/ace-editor/ext-hardwrap.js +127 -0
- package/js_ext/ace-editor/ext-inline_autocomplete.js +3547 -0
- package/js_ext/ace-editor/ext-keybinding_menu.js +185 -0
- package/js_ext/ace-editor/ext-language_tools.js +2724 -0
- package/js_ext/ace-editor/ext-linking.js +66 -0
- package/js_ext/ace-editor/ext-modelist.js +276 -0
- package/js_ext/ace-editor/ext-options.js +859 -0
- package/js_ext/ace-editor/ext-prompt.js +3161 -0
- package/js_ext/ace-editor/ext-rtl.js +146 -0
- package/js_ext/ace-editor/ext-searchbox.js +385 -0
- package/js_ext/ace-editor/ext-settings_menu.js +859 -0
- package/js_ext/ace-editor/ext-simple_tokenizer.js +137 -0
- package/js_ext/ace-editor/ext-spellcheck.js +79 -0
- package/js_ext/ace-editor/ext-split.js +203 -0
- package/js_ext/ace-editor/ext-static_highlight.js +194 -0
- package/js_ext/ace-editor/ext-statusbar.js +63 -0
- package/js_ext/ace-editor/ext-textarea.js +400 -0
- package/js_ext/ace-editor/ext-themelist.js +80 -0
- package/js_ext/ace-editor/ext-whitespace.js +201 -0
- package/js_ext/ace-editor/keybinding-emacs.js +1067 -0
- package/js_ext/ace-editor/keybinding-sublime.js +409 -0
- package/js_ext/ace-editor/keybinding-vim.js +7101 -0
- package/js_ext/ace-editor/keybinding-vscode.js +255 -0
- package/js_ext/ace-editor/mode-abap.js +200 -0
- package/js_ext/ace-editor/mode-abc.js +243 -0
- package/js_ext/ace-editor/mode-actionscript.js +234 -0
- package/js_ext/ace-editor/mode-ada.js +108 -0
- package/js_ext/ace-editor/mode-alda.js +279 -0
- package/js_ext/ace-editor/mode-apache_conf.js +318 -0
- package/js_ext/ace-editor/mode-apex.js +402 -0
- package/js_ext/ace-editor/mode-applescript.js +232 -0
- package/js_ext/ace-editor/mode-aql.js +92 -0
- package/js_ext/ace-editor/mode-asciidoc.js +311 -0
- package/js_ext/ace-editor/mode-asl.js +357 -0
- package/js_ext/ace-editor/mode-assembly_arm32.js +185 -0
- package/js_ext/ace-editor/mode-assembly_x86.js +170 -0
- package/js_ext/ace-editor/mode-astro.js +2474 -0
- package/js_ext/ace-editor/mode-autohotkey.js +208 -0
- package/js_ext/ace-editor/mode-basic.js +201 -0
- package/js_ext/ace-editor/mode-batchfile.js +199 -0
- package/js_ext/ace-editor/mode-bibtex.js +318 -0
- package/js_ext/ace-editor/mode-c9search.js +250 -0
- package/js_ext/ace-editor/mode-c_cpp.js +417 -0
- package/js_ext/ace-editor/mode-cirru.js +192 -0
- package/js_ext/ace-editor/mode-clojure.js +322 -0
- package/js_ext/ace-editor/mode-clue.js +361 -0
- package/js_ext/ace-editor/mode-cobol.js +82 -0
- package/js_ext/ace-editor/mode-coffee.js +335 -0
- package/js_ext/ace-editor/mode-coldfusion.js +2409 -0
- package/js_ext/ace-editor/mode-crystal.js +586 -0
- package/js_ext/ace-editor/mode-csharp.js +413 -0
- package/js_ext/ace-editor/mode-csound_document.js +4072 -0
- package/js_ext/ace-editor/mode-csound_orchestra.js +2923 -0
- package/js_ext/ace-editor/mode-csound_score.js +409 -0
- package/js_ext/ace-editor/mode-csp.js +59 -0
- package/js_ext/ace-editor/mode-css.js +632 -0
- package/js_ext/ace-editor/mode-csv.js +97 -0
- package/js_ext/ace-editor/mode-curly.js +2381 -0
- package/js_ext/ace-editor/mode-cuttlefish.js +56 -0
- package/js_ext/ace-editor/mode-d.js +450 -0
- package/js_ext/ace-editor/mode-dart.js +618 -0
- package/js_ext/ace-editor/mode-diff.js +129 -0
- package/js_ext/ace-editor/mode-django.js +2422 -0
- package/js_ext/ace-editor/mode-dockerfile.js +427 -0
- package/js_ext/ace-editor/mode-dot.js +348 -0
- package/js_ext/ace-editor/mode-drools.js +607 -0
- package/js_ext/ace-editor/mode-edifact.js +130 -0
- package/js_ext/ace-editor/mode-eiffel.js +120 -0
- package/js_ext/ace-editor/mode-ejs.js +3277 -0
- package/js_ext/ace-editor/mode-elixir.js +443 -0
- package/js_ext/ace-editor/mode-elm.js +274 -0
- package/js_ext/ace-editor/mode-erlang.js +836 -0
- package/js_ext/ace-editor/mode-flix.js +164 -0
- package/js_ext/ace-editor/mode-forth.js +253 -0
- package/js_ext/ace-editor/mode-fortran.js +361 -0
- package/js_ext/ace-editor/mode-fsharp.js +277 -0
- package/js_ext/ace-editor/mode-fsl.js +226 -0
- package/js_ext/ace-editor/mode-ftl.js +1255 -0
- package/js_ext/ace-editor/mode-gcode.js +74 -0
- package/js_ext/ace-editor/mode-gherkin.js +154 -0
- package/js_ext/ace-editor/mode-gitignore.js +49 -0
- package/js_ext/ace-editor/mode-glsl.js +475 -0
- package/js_ext/ace-editor/mode-gobstones.js +1459 -0
- package/js_ext/ace-editor/mode-golang.js +341 -0
- package/js_ext/ace-editor/mode-graphqlschema.js +174 -0
- package/js_ext/ace-editor/mode-groovy.js +1401 -0
- package/js_ext/ace-editor/mode-haml.js +1906 -0
- package/js_ext/ace-editor/mode-handlebars.js +2438 -0
- package/js_ext/ace-editor/mode-haskell.js +324 -0
- package/js_ext/ace-editor/mode-haskell_cabal.js +135 -0
- package/js_ext/ace-editor/mode-haxe.js +313 -0
- package/js_ext/ace-editor/mode-hjson.js +318 -0
- package/js_ext/ace-editor/mode-html.js +2339 -0
- package/js_ext/ace-editor/mode-html_elixir.js +2845 -0
- package/js_ext/ace-editor/mode-html_ruby.js +3294 -0
- package/js_ext/ace-editor/mode-ini.js +138 -0
- package/js_ext/ace-editor/mode-io.js +210 -0
- package/js_ext/ace-editor/mode-ion.js +477 -0
- package/js_ext/ace-editor/mode-jack.js +293 -0
- package/js_ext/ace-editor/mode-jade.js +2017 -0
- package/js_ext/ace-editor/mode-java.js +1565 -0
- package/js_ext/ace-editor/mode-javascript.js +1191 -0
- package/js_ext/ace-editor/mode-jexl.js +270 -0
- package/js_ext/ace-editor/mode-json.js +275 -0
- package/js_ext/ace-editor/mode-json5.js +308 -0
- package/js_ext/ace-editor/mode-jsoniq.js +2577 -0
- package/js_ext/ace-editor/mode-jsp.js +1618 -0
- package/js_ext/ace-editor/mode-jssm.js +293 -0
- package/js_ext/ace-editor/mode-jsx.js +1209 -0
- package/js_ext/ace-editor/mode-julia.js +254 -0
- package/js_ext/ace-editor/mode-kotlin.js +445 -0
- package/js_ext/ace-editor/mode-latex.js +252 -0
- package/js_ext/ace-editor/mode-latte.js +2522 -0
- package/js_ext/ace-editor/mode-less.js +742 -0
- package/js_ext/ace-editor/mode-liquid.js +2741 -0
- package/js_ext/ace-editor/mode-lisp.js +104 -0
- package/js_ext/ace-editor/mode-livescript.js +272 -0
- package/js_ext/ace-editor/mode-logiql.js +272 -0
- package/js_ext/ace-editor/mode-logtalk.js +309 -0
- package/js_ext/ace-editor/mode-lsl.js +287 -0
- package/js_ext/ace-editor/mode-lua.js +393 -0
- package/js_ext/ace-editor/mode-luapage.js +2785 -0
- package/js_ext/ace-editor/mode-lucene.js +145 -0
- package/js_ext/ace-editor/mode-makefile.js +374 -0
- package/js_ext/ace-editor/mode-markdown.js +2935 -0
- package/js_ext/ace-editor/mode-mask.js +1757 -0
- package/js_ext/ace-editor/mode-matlab.js +239 -0
- package/js_ext/ace-editor/mode-maze.js +256 -0
- package/js_ext/ace-editor/mode-mediawiki.js +580 -0
- package/js_ext/ace-editor/mode-mel.js +213 -0
- package/js_ext/ace-editor/mode-mips.js +231 -0
- package/js_ext/ace-editor/mode-mixal.js +110 -0
- package/js_ext/ace-editor/mode-mushcode.js +642 -0
- package/js_ext/ace-editor/mode-mysql.js +150 -0
- package/js_ext/ace-editor/mode-nasal.js +513 -0
- package/js_ext/ace-editor/mode-nginx.js +262 -0
- package/js_ext/ace-editor/mode-nim.js +325 -0
- package/js_ext/ace-editor/mode-nix.js +555 -0
- package/js_ext/ace-editor/mode-nsis.js +279 -0
- package/js_ext/ace-editor/mode-nunjucks.js +2677 -0
- package/js_ext/ace-editor/mode-objectivec.js +626 -0
- package/js_ext/ace-editor/mode-ocaml.js +378 -0
- package/js_ext/ace-editor/mode-odin.js +449 -0
- package/js_ext/ace-editor/mode-partiql.js +750 -0
- package/js_ext/ace-editor/mode-pascal.js +204 -0
- package/js_ext/ace-editor/mode-perl.js +318 -0
- package/js_ext/ace-editor/mode-pgsql.js +1860 -0
- package/js_ext/ace-editor/mode-php.js +14072 -0
- package/js_ext/ace-editor/mode-php_laravel_blade.js +14260 -0
- package/js_ext/ace-editor/mode-pig.js +278 -0
- package/js_ext/ace-editor/mode-plain_text.js +27 -0
- package/js_ext/ace-editor/mode-plsql.js +268 -0
- package/js_ext/ace-editor/mode-powershell.js +567 -0
- package/js_ext/ace-editor/mode-praat.js +412 -0
- package/js_ext/ace-editor/mode-prisma.js +457 -0
- package/js_ext/ace-editor/mode-prolog.js +305 -0
- package/js_ext/ace-editor/mode-properties.js +69 -0
- package/js_ext/ace-editor/mode-protobuf.js +498 -0
- package/js_ext/ace-editor/mode-prql.js +323 -0
- package/js_ext/ace-editor/mode-puppet.js +316 -0
- package/js_ext/ace-editor/mode-python.js +476 -0
- package/js_ext/ace-editor/mode-qml.js +346 -0
- package/js_ext/ace-editor/mode-r.js +387 -0
- package/js_ext/ace-editor/mode-raku.js +516 -0
- package/js_ext/ace-editor/mode-razor.js +2697 -0
- package/js_ext/ace-editor/mode-rdoc.js +286 -0
- package/js_ext/ace-editor/mode-red.js +388 -0
- package/js_ext/ace-editor/mode-redshift.js +321 -0
- package/js_ext/ace-editor/mode-rhtml.js +2750 -0
- package/js_ext/ace-editor/mode-robot.js +168 -0
- package/js_ext/ace-editor/mode-rst.js +245 -0
- package/js_ext/ace-editor/mode-ruby.js +921 -0
- package/js_ext/ace-editor/mode-rust.js +393 -0
- package/js_ext/ace-editor/mode-sac.js +349 -0
- package/js_ext/ace-editor/mode-sass.js +480 -0
- package/js_ext/ace-editor/mode-scad.js +350 -0
- package/js_ext/ace-editor/mode-scala.js +1395 -0
- package/js_ext/ace-editor/mode-scheme.js +210 -0
- package/js_ext/ace-editor/mode-scrypt.js +317 -0
- package/js_ext/ace-editor/mode-scss.js +768 -0
- package/js_ext/ace-editor/mode-sh.js +387 -0
- package/js_ext/ace-editor/mode-sjs.js +1393 -0
- package/js_ext/ace-editor/mode-slim.js +4770 -0
- package/js_ext/ace-editor/mode-smarty.js +2436 -0
- package/js_ext/ace-editor/mode-smithy.js +456 -0
- package/js_ext/ace-editor/mode-snippets.js +183 -0
- package/js_ext/ace-editor/mode-soy_template.js +2611 -0
- package/js_ext/ace-editor/mode-space.js +151 -0
- package/js_ext/ace-editor/mode-sparql.js +288 -0
- package/js_ext/ace-editor/mode-sql.js +221 -0
- package/js_ext/ace-editor/mode-sqlserver.js +391 -0
- package/js_ext/ace-editor/mode-stylus.js +443 -0
- package/js_ext/ace-editor/mode-svg.js +1487 -0
- package/js_ext/ace-editor/mode-swift.js +342 -0
- package/js_ext/ace-editor/mode-tcl.js +338 -0
- package/js_ext/ace-editor/mode-terraform.js +346 -0
- package/js_ext/ace-editor/mode-tex.js +212 -0
- package/js_ext/ace-editor/mode-text.js +9 -0
- package/js_ext/ace-editor/mode-textile.js +125 -0
- package/js_ext/ace-editor/mode-toml.js +129 -0
- package/js_ext/ace-editor/mode-tsv.js +124 -0
- package/js_ext/ace-editor/mode-tsx.js +1276 -0
- package/js_ext/ace-editor/mode-turtle.js +264 -0
- package/js_ext/ace-editor/mode-twig.js +2502 -0
- package/js_ext/ace-editor/mode-typescript.js +1254 -0
- package/js_ext/ace-editor/mode-vala.js +554 -0
- package/js_ext/ace-editor/mode-vbscript.js +731 -0
- package/js_ext/ace-editor/mode-velocity.js +2580 -0
- package/js_ext/ace-editor/mode-verilog.js +98 -0
- package/js_ext/ace-editor/mode-vhdl.js +94 -0
- package/js_ext/ace-editor/mode-visualforce.js +2454 -0
- package/js_ext/ace-editor/mode-vue.js +3834 -0
- package/js_ext/ace-editor/mode-wollok.js +1329 -0
- package/js_ext/ace-editor/mode-xml.js +477 -0
- package/js_ext/ace-editor/mode-xquery.js +2589 -0
- package/js_ext/ace-editor/mode-yaml.js +395 -0
- package/js_ext/ace-editor/mode-zeek.js +502 -0
- package/js_ext/ace-editor/mode-zig.js +585 -0
- package/js_ext/ace-editor/snippets/abap.js +9 -0
- package/js_ext/ace-editor/snippets/abc.js +16 -0
- package/js_ext/ace-editor/snippets/actionscript.js +16 -0
- package/js_ext/ace-editor/snippets/ada.js +9 -0
- package/js_ext/ace-editor/snippets/alda.js +9 -0
- package/js_ext/ace-editor/snippets/apache_conf.js +9 -0
- package/js_ext/ace-editor/snippets/apex.js +9 -0
- package/js_ext/ace-editor/snippets/applescript.js +9 -0
- package/js_ext/ace-editor/snippets/aql.js +9 -0
- package/js_ext/ace-editor/snippets/asciidoc.js +9 -0
- package/js_ext/ace-editor/snippets/asl.js +9 -0
- package/js_ext/ace-editor/snippets/assembly_arm32.js +9 -0
- package/js_ext/ace-editor/snippets/assembly_x86.js +9 -0
- package/js_ext/ace-editor/snippets/astro.js +9 -0
- package/js_ext/ace-editor/snippets/autohotkey.js +9 -0
- package/js_ext/ace-editor/snippets/basic.js +9 -0
- package/js_ext/ace-editor/snippets/batchfile.js +9 -0
- package/js_ext/ace-editor/snippets/bibtex.js +9 -0
- package/js_ext/ace-editor/snippets/c9search.js +9 -0
- package/js_ext/ace-editor/snippets/c_cpp.js +16 -0
- package/js_ext/ace-editor/snippets/cirru.js +9 -0
- package/js_ext/ace-editor/snippets/clojure.js +16 -0
- package/js_ext/ace-editor/snippets/clue.js +9 -0
- package/js_ext/ace-editor/snippets/cobol.js +9 -0
- package/js_ext/ace-editor/snippets/coffee.js +16 -0
- package/js_ext/ace-editor/snippets/coldfusion.js +9 -0
- package/js_ext/ace-editor/snippets/crystal.js +9 -0
- package/js_ext/ace-editor/snippets/csharp.js +9 -0
- package/js_ext/ace-editor/snippets/csound_document.js +16 -0
- package/js_ext/ace-editor/snippets/csound_orchestra.js +16 -0
- package/js_ext/ace-editor/snippets/csound_score.js +9 -0
- package/js_ext/ace-editor/snippets/csp.js +9 -0
- package/js_ext/ace-editor/snippets/css.js +16 -0
- package/js_ext/ace-editor/snippets/csv.js +9 -0
- package/js_ext/ace-editor/snippets/curly.js +9 -0
- package/js_ext/ace-editor/snippets/cuttlefish.js +9 -0
- package/js_ext/ace-editor/snippets/d.js +9 -0
- package/js_ext/ace-editor/snippets/dart.js +16 -0
- package/js_ext/ace-editor/snippets/diff.js +16 -0
- package/js_ext/ace-editor/snippets/django.js +16 -0
- package/js_ext/ace-editor/snippets/dockerfile.js +9 -0
- package/js_ext/ace-editor/snippets/dot.js +9 -0
- package/js_ext/ace-editor/snippets/drools.js +16 -0
- package/js_ext/ace-editor/snippets/edifact.js +16 -0
- package/js_ext/ace-editor/snippets/eiffel.js +9 -0
- package/js_ext/ace-editor/snippets/ejs.js +9 -0
- package/js_ext/ace-editor/snippets/elixir.js +9 -0
- package/js_ext/ace-editor/snippets/elm.js +9 -0
- package/js_ext/ace-editor/snippets/erlang.js +16 -0
- package/js_ext/ace-editor/snippets/flix.js +9 -0
- package/js_ext/ace-editor/snippets/forth.js +9 -0
- package/js_ext/ace-editor/snippets/fortran.js +9 -0
- package/js_ext/ace-editor/snippets/fsharp.js +9 -0
- package/js_ext/ace-editor/snippets/fsl.js +16 -0
- package/js_ext/ace-editor/snippets/ftl.js +9 -0
- package/js_ext/ace-editor/snippets/gcode.js +9 -0
- package/js_ext/ace-editor/snippets/gherkin.js +9 -0
- package/js_ext/ace-editor/snippets/gitignore.js +9 -0
- package/js_ext/ace-editor/snippets/glsl.js +9 -0
- package/js_ext/ace-editor/snippets/gobstones.js +16 -0
- package/js_ext/ace-editor/snippets/golang.js +9 -0
- package/js_ext/ace-editor/snippets/graphqlschema.js +16 -0
- package/js_ext/ace-editor/snippets/groovy.js +9 -0
- package/js_ext/ace-editor/snippets/haml.js +16 -0
- package/js_ext/ace-editor/snippets/handlebars.js +9 -0
- package/js_ext/ace-editor/snippets/haskell.js +16 -0
- package/js_ext/ace-editor/snippets/haskell_cabal.js +9 -0
- package/js_ext/ace-editor/snippets/haxe.js +9 -0
- package/js_ext/ace-editor/snippets/hjson.js +9 -0
- package/js_ext/ace-editor/snippets/html.js +16 -0
- package/js_ext/ace-editor/snippets/html_elixir.js +9 -0
- package/js_ext/ace-editor/snippets/html_ruby.js +9 -0
- package/js_ext/ace-editor/snippets/ini.js +9 -0
- package/js_ext/ace-editor/snippets/io.js +74 -0
- package/js_ext/ace-editor/snippets/ion.js +9 -0
- package/js_ext/ace-editor/snippets/jack.js +9 -0
- package/js_ext/ace-editor/snippets/jade.js +9 -0
- package/js_ext/ace-editor/snippets/java.js +16 -0
- package/js_ext/ace-editor/snippets/javascript.js +16 -0
- package/js_ext/ace-editor/snippets/jexl.js +9 -0
- package/js_ext/ace-editor/snippets/json.js +9 -0
- package/js_ext/ace-editor/snippets/json5.js +9 -0
- package/js_ext/ace-editor/snippets/jsoniq.js +78 -0
- package/js_ext/ace-editor/snippets/jsp.js +16 -0
- package/js_ext/ace-editor/snippets/jssm.js +9 -0
- package/js_ext/ace-editor/snippets/jsx.js +9 -0
- package/js_ext/ace-editor/snippets/julia.js +9 -0
- package/js_ext/ace-editor/snippets/kotlin.js +9 -0
- package/js_ext/ace-editor/snippets/latex.js +9 -0
- package/js_ext/ace-editor/snippets/latte.js +9 -0
- package/js_ext/ace-editor/snippets/less.js +9 -0
- package/js_ext/ace-editor/snippets/liquid.js +16 -0
- package/js_ext/ace-editor/snippets/lisp.js +9 -0
- package/js_ext/ace-editor/snippets/livescript.js +9 -0
- package/js_ext/ace-editor/snippets/logiql.js +9 -0
- package/js_ext/ace-editor/snippets/logtalk.js +9 -0
- package/js_ext/ace-editor/snippets/lsl.js +16 -0
- package/js_ext/ace-editor/snippets/lua.js +16 -0
- package/js_ext/ace-editor/snippets/luapage.js +9 -0
- package/js_ext/ace-editor/snippets/lucene.js +9 -0
- package/js_ext/ace-editor/snippets/makefile.js +16 -0
- package/js_ext/ace-editor/snippets/markdown.js +16 -0
- package/js_ext/ace-editor/snippets/mask.js +9 -0
- package/js_ext/ace-editor/snippets/matlab.js +9 -0
- package/js_ext/ace-editor/snippets/maze.js +16 -0
- package/js_ext/ace-editor/snippets/mediawiki.js +9 -0
- package/js_ext/ace-editor/snippets/mel.js +9 -0
- package/js_ext/ace-editor/snippets/mips.js +9 -0
- package/js_ext/ace-editor/snippets/mixal.js +9 -0
- package/js_ext/ace-editor/snippets/mushcode.js +9 -0
- package/js_ext/ace-editor/snippets/mysql.js +9 -0
- package/js_ext/ace-editor/snippets/nasal.js +9 -0
- package/js_ext/ace-editor/snippets/nginx.js +9 -0
- package/js_ext/ace-editor/snippets/nim.js +9 -0
- package/js_ext/ace-editor/snippets/nix.js +9 -0
- package/js_ext/ace-editor/snippets/nsis.js +9 -0
- package/js_ext/ace-editor/snippets/nunjucks.js +9 -0
- package/js_ext/ace-editor/snippets/objectivec.js +9 -0
- package/js_ext/ace-editor/snippets/ocaml.js +9 -0
- package/js_ext/ace-editor/snippets/odin.js +9 -0
- package/js_ext/ace-editor/snippets/partiql.js +9 -0
- package/js_ext/ace-editor/snippets/pascal.js +9 -0
- package/js_ext/ace-editor/snippets/perl.js +16 -0
- package/js_ext/ace-editor/snippets/pgsql.js +9 -0
- package/js_ext/ace-editor/snippets/php.js +16 -0
- package/js_ext/ace-editor/snippets/php_laravel_blade.js +9 -0
- package/js_ext/ace-editor/snippets/pig.js +9 -0
- package/js_ext/ace-editor/snippets/plain_text.js +9 -0
- package/js_ext/ace-editor/snippets/plsql.js +9 -0
- package/js_ext/ace-editor/snippets/powershell.js +9 -0
- package/js_ext/ace-editor/snippets/praat.js +9 -0
- package/js_ext/ace-editor/snippets/prisma.js +9 -0
- package/js_ext/ace-editor/snippets/prolog.js +9 -0
- package/js_ext/ace-editor/snippets/properties.js +9 -0
- package/js_ext/ace-editor/snippets/protobuf.js +9 -0
- package/js_ext/ace-editor/snippets/prql.js +9 -0
- package/js_ext/ace-editor/snippets/puppet.js +9 -0
- package/js_ext/ace-editor/snippets/python.js +16 -0
- package/js_ext/ace-editor/snippets/qml.js +9 -0
- package/js_ext/ace-editor/snippets/r.js +16 -0
- package/js_ext/ace-editor/snippets/raku.js +9 -0
- package/js_ext/ace-editor/snippets/razor.js +16 -0
- package/js_ext/ace-editor/snippets/rdoc.js +9 -0
- package/js_ext/ace-editor/snippets/red.js +9 -0
- package/js_ext/ace-editor/snippets/redshift.js +9 -0
- package/js_ext/ace-editor/snippets/rhtml.js +9 -0
- package/js_ext/ace-editor/snippets/robot.js +16 -0
- package/js_ext/ace-editor/snippets/rst.js +16 -0
- package/js_ext/ace-editor/snippets/ruby.js +16 -0
- package/js_ext/ace-editor/snippets/rust.js +9 -0
- package/js_ext/ace-editor/snippets/sac.js +9 -0
- package/js_ext/ace-editor/snippets/sass.js +9 -0
- package/js_ext/ace-editor/snippets/scad.js +9 -0
- package/js_ext/ace-editor/snippets/scala.js +9 -0
- package/js_ext/ace-editor/snippets/scheme.js +9 -0
- package/js_ext/ace-editor/snippets/scrypt.js +9 -0
- package/js_ext/ace-editor/snippets/scss.js +9 -0
- package/js_ext/ace-editor/snippets/sh.js +16 -0
- package/js_ext/ace-editor/snippets/sjs.js +9 -0
- package/js_ext/ace-editor/snippets/slim.js +9 -0
- package/js_ext/ace-editor/snippets/smarty.js +9 -0
- package/js_ext/ace-editor/snippets/smithy.js +9 -0
- package/js_ext/ace-editor/snippets/snippets.js +16 -0
- package/js_ext/ace-editor/snippets/soy_template.js +9 -0
- package/js_ext/ace-editor/snippets/space.js +9 -0
- package/js_ext/ace-editor/snippets/sparql.js +9 -0
- package/js_ext/ace-editor/snippets/sql.js +16 -0
- package/js_ext/ace-editor/snippets/sqlserver.js +16 -0
- package/js_ext/ace-editor/snippets/stylus.js +9 -0
- package/js_ext/ace-editor/snippets/svg.js +9 -0
- package/js_ext/ace-editor/snippets/swift.js +9 -0
- package/js_ext/ace-editor/snippets/tcl.js +16 -0
- package/js_ext/ace-editor/snippets/terraform.js +9 -0
- package/js_ext/ace-editor/snippets/tex.js +16 -0
- package/js_ext/ace-editor/snippets/text.js +9 -0
- package/js_ext/ace-editor/snippets/textile.js +16 -0
- package/js_ext/ace-editor/snippets/toml.js +9 -0
- package/js_ext/ace-editor/snippets/tsv.js +9 -0
- package/js_ext/ace-editor/snippets/tsx.js +9 -0
- package/js_ext/ace-editor/snippets/turtle.js +9 -0
- package/js_ext/ace-editor/snippets/twig.js +9 -0
- package/js_ext/ace-editor/snippets/typescript.js +9 -0
- package/js_ext/ace-editor/snippets/vala.js +199 -0
- package/js_ext/ace-editor/snippets/vbscript.js +9 -0
- package/js_ext/ace-editor/snippets/velocity.js +17 -0
- package/js_ext/ace-editor/snippets/verilog.js +9 -0
- package/js_ext/ace-editor/snippets/vhdl.js +9 -0
- package/js_ext/ace-editor/snippets/visualforce.js +9 -0
- package/js_ext/ace-editor/snippets/vue.js +9 -0
- package/js_ext/ace-editor/snippets/wollok.js +16 -0
- package/js_ext/ace-editor/snippets/xml.js +9 -0
- package/js_ext/ace-editor/snippets/xquery.js +78 -0
- package/js_ext/ace-editor/snippets/yaml.js +9 -0
- package/js_ext/ace-editor/snippets/zeek.js +9 -0
- package/js_ext/ace-editor/snippets/zig.js +9 -0
- package/js_ext/ace-editor/theme-ambiance.js +18 -0
- package/js_ext/ace-editor/theme-chaos.js +18 -0
- package/js_ext/ace-editor/theme-chrome.js +18 -0
- package/js_ext/ace-editor/theme-cloud9_day.js +19 -0
- package/js_ext/ace-editor/theme-cloud9_night.js +18 -0
- package/js_ext/ace-editor/theme-cloud9_night_low_color.js +18 -0
- package/js_ext/ace-editor/theme-cloud_editor.js +19 -0
- package/js_ext/ace-editor/theme-cloud_editor_dark.js +19 -0
- package/js_ext/ace-editor/theme-clouds.js +18 -0
- package/js_ext/ace-editor/theme-clouds_midnight.js +18 -0
- package/js_ext/ace-editor/theme-cobalt.js +18 -0
- package/js_ext/ace-editor/theme-crimson_editor.js +18 -0
- package/js_ext/ace-editor/theme-dawn.js +18 -0
- package/js_ext/ace-editor/theme-dracula.js +19 -0
- package/js_ext/ace-editor/theme-dreamweaver.js +18 -0
- package/js_ext/ace-editor/theme-eclipse.js +19 -0
- package/js_ext/ace-editor/theme-github.js +18 -0
- package/js_ext/ace-editor/theme-github_dark.js +18 -0
- package/js_ext/ace-editor/theme-github_light_default.js +18 -0
- package/js_ext/ace-editor/theme-gob.js +18 -0
- package/js_ext/ace-editor/theme-gruvbox.js +18 -0
- package/js_ext/ace-editor/theme-gruvbox_dark_hard.js +18 -0
- package/js_ext/ace-editor/theme-gruvbox_light_hard.js +18 -0
- package/js_ext/ace-editor/theme-idle_fingers.js +18 -0
- package/js_ext/ace-editor/theme-iplastic.js +18 -0
- package/js_ext/ace-editor/theme-katzenmilch.js +18 -0
- package/js_ext/ace-editor/theme-kr_theme.js +18 -0
- package/js_ext/ace-editor/theme-kuroir.js +18 -0
- package/js_ext/ace-editor/theme-merbivore.js +18 -0
- package/js_ext/ace-editor/theme-merbivore_soft.js +18 -0
- package/js_ext/ace-editor/theme-mono_industrial.js +18 -0
- package/js_ext/ace-editor/theme-monokai.js +18 -0
- package/js_ext/ace-editor/theme-nord_dark.js +19 -0
- package/js_ext/ace-editor/theme-one_dark.js +18 -0
- package/js_ext/ace-editor/theme-pastel_on_dark.js +18 -0
- package/js_ext/ace-editor/theme-solarized_dark.js +18 -0
- package/js_ext/ace-editor/theme-solarized_light.js +18 -0
- package/js_ext/ace-editor/theme-sqlserver.js +18 -0
- package/js_ext/ace-editor/theme-terminal.js +18 -0
- package/js_ext/ace-editor/theme-textmate.js +16 -0
- package/js_ext/ace-editor/theme-tomorrow.js +18 -0
- package/js_ext/ace-editor/theme-tomorrow_night.js +18 -0
- package/js_ext/ace-editor/theme-tomorrow_night_blue.js +18 -0
- package/js_ext/ace-editor/theme-tomorrow_night_bright.js +18 -0
- package/js_ext/ace-editor/theme-tomorrow_night_eighties.js +18 -0
- package/js_ext/ace-editor/theme-twilight.js +18 -0
- package/js_ext/ace-editor/theme-vibrant_ink.js +18 -0
- package/js_ext/ace-editor/theme-xcode.js +18 -0
- package/js_ext/ace-editor/worker-base.js +1332 -0
- package/js_ext/ace-editor/worker-coffee.js +1381 -0
- package/js_ext/ace-editor/worker-css.js +8913 -0
- package/js_ext/ace-editor/worker-html.js +10843 -0
- package/js_ext/ace-editor/worker-javascript.js +15353 -0
- package/js_ext/ace-editor/worker-json.js +1626 -0
- package/js_ext/ace-editor/worker-lua.js +3519 -0
- package/js_ext/ace-editor/worker-php.js +3788 -0
- package/js_ext/ace-editor/worker-xml.js +3122 -0
- package/js_ext/ace-editor/worker-xquery.js +57579 -0
- package/js_ext/ace-editor/worker-yaml.js +5819 -0
- package/js_ext/bootstrap.bundle.min.js +7 -0
- package/js_ext/highlight/default.min.css +9 -0
- package/js_ext/highlight/go.min.js +14 -0
- package/js_ext/highlight/highlight.min.js +1207 -0
- package/js_ext/highlight/stackoverflow-dark.min.css +13 -0
- package/js_ext/idb-keyval-6.2.2.mjs +7 -0
- package/js_ext/json-viewer.bundle.js +52 -0
- package/js_ext/loglevel-plugin-prefix.min.js +1 -0
- package/js_ext/loglevel.min.js +2 -0
- package/js_ext/markdown/auto-render.min.js +1 -0
- package/js_ext/markdown/auto-render.mjs +245 -0
- package/js_ext/markdown/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/js_ext/markdown/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/js_ext/markdown/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Main-Bold.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Main-Italic.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Main-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Math-Italic.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/js_ext/markdown/fonts/KaTeX_Script-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/js_ext/markdown/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/js_ext/markdown/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/js_ext/markdown/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/js_ext/markdown/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/js_ext/markdown/katex.min.css +1 -0
- package/js_ext/markdown/katex.min.js +1 -0
- package/js_ext/markdown/katex.mjs +18416 -0
- package/js_ext/markdown/markdown-it.min.js +3 -0
- package/js_ext/markdown/markdownItAnchor.umd.js +2 -0
- package/js_ext/mitt.mjs +2 -0
- package/js_ext/moment.min.js +1 -0
- package/js_ext/msgpack.mjs +1612 -0
- package/js_ext/rxjs.umd.min.js +195 -0
- package/js_ext/rxjs.umd.min.js.map +1 -0
- package/js_ext/vue-router.esm-browser.prod.js +6 -0
- package/js_ext/vue.esm-browser.min.js +18 -0
- package/js_ext/vue.esm-browser.prod.min.js +3 -0
- package/js_ext/vue3-sfc-loader.esm.js +1840 -0
- package/js_ext/vue3-sfc-loader.esm.js.map +4 -0
- package/js_ext/vue3-sfc-loader.js +1839 -0
- package/js_ext/wavesurfer.esm.mjs +1 -0
- package/js_ext/xstate.web.mjs +15 -0
- package/package.json +50 -0
- package/style.css +31 -0
package/core/JsUtils.mjs
ADDED
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
|
|
2
|
+
// https://runjs.app/play
|
|
3
|
+
|
|
4
|
+
const encoder = new TextEncoder();
|
|
5
|
+
|
|
6
|
+
export async function sha256(text) {
|
|
7
|
+
// hash the message
|
|
8
|
+
const data = encoder.encode(text);
|
|
9
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
|
|
10
|
+
// convert ArrayBuffer to Array
|
|
11
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
12
|
+
// convert bytes to hex string
|
|
13
|
+
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
14
|
+
return hashHex;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export async function sha1(text) {
|
|
18
|
+
// hash the message
|
|
19
|
+
const data = encoder.encode(text);
|
|
20
|
+
// WARNING: this won't work if not using HTTPS or localhost
|
|
21
|
+
if(window.isSecureContext) {
|
|
22
|
+
const hashBuffer = await crypto.subtle.digest('SHA-1', data);
|
|
23
|
+
// convert ArrayBuffer to Array
|
|
24
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
25
|
+
// convert bytes to hex string
|
|
26
|
+
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
27
|
+
return hashHex;
|
|
28
|
+
}
|
|
29
|
+
return text.length
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function generateRandomId(prefix = 'id', length = 8) {
|
|
33
|
+
// Characters that can be included in the ID
|
|
34
|
+
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
35
|
+
let result = prefix; // Start the ID with the provided prefix to ensure it starts with a letter
|
|
36
|
+
|
|
37
|
+
// Generate the random part of the ID
|
|
38
|
+
for (let i = 0; i < length; i++) {
|
|
39
|
+
const randomIndex = Math.floor(Math.random() * characters.length);
|
|
40
|
+
result += characters.charAt(randomIndex);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
export function convertMsToString(runtimeMs) {
|
|
48
|
+
if(runtimeMs >= 60000) {
|
|
49
|
+
return `${((runtimeMs / 1000) / 60).toFixed(2)} mins`
|
|
50
|
+
} else if (runtimeMs >= 1000) {
|
|
51
|
+
return `${((runtimeMs / 1000)).toFixed(2)} s`
|
|
52
|
+
} else {
|
|
53
|
+
return `${runtimeMs} ms`
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ________________________________________________________________________________
|
|
58
|
+
// SORT
|
|
59
|
+
// ________________________________________________________________________________
|
|
60
|
+
export function sortObjectKeysWithIdFirst(obj) {
|
|
61
|
+
const keys = Object.keys(obj);
|
|
62
|
+
const sortedKeys = keys.filter(key => key !== 'id').sort();
|
|
63
|
+
|
|
64
|
+
// Ensure 'id' is the first key
|
|
65
|
+
if (keys.includes('id')) {
|
|
66
|
+
sortedKeys.unshift('id');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const sortedObj = {};
|
|
70
|
+
sortedKeys.forEach(key => {
|
|
71
|
+
sortedObj[key] = obj[key];
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
return sortedObj;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// the smallest value appears first and largest last
|
|
78
|
+
export function sortByPropertyAsc(arr, property) {
|
|
79
|
+
return arr.sort((a, b) => {
|
|
80
|
+
if (a[property] < b[property]) {
|
|
81
|
+
return -1;
|
|
82
|
+
} else if (a[property] > b[property]) {
|
|
83
|
+
return 1;
|
|
84
|
+
}
|
|
85
|
+
return 0;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
// desc - largest value appears first and smallest last
|
|
89
|
+
export function sortByPropertyDesc(arr, property) {
|
|
90
|
+
return arr.sort((a, b) => {
|
|
91
|
+
if (a[property] < b[property]) {
|
|
92
|
+
return 1;
|
|
93
|
+
} else if (a[property] > b[property]) {
|
|
94
|
+
return -1;
|
|
95
|
+
}
|
|
96
|
+
return 0;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// ________________________________________________________________________________
|
|
101
|
+
// STRING
|
|
102
|
+
// ________________________________________________________________________________
|
|
103
|
+
// console.log(extractBasePath("/osgi/_admin")); // "/osgi/"
|
|
104
|
+
// console.log(extractBasePath("/client/cli/homepage")); // "/client/cli"
|
|
105
|
+
// console.log(extractBasePath("/user/profile")); // "/user/"
|
|
106
|
+
// console.log(extractBasePath("/settings")); // ""
|
|
107
|
+
// console.log(extractBasePath("no-slash")); // ""
|
|
108
|
+
// console.log(extractBasePath("/")); // ""
|
|
109
|
+
export function extractBasePath(filePath) {
|
|
110
|
+
if (typeof filePath !== 'string') {
|
|
111
|
+
throw `[INVALID_ARGUMENT] - filePath needs to be string`
|
|
112
|
+
}
|
|
113
|
+
// Match everything before the last '/' or the entire string if no '/' is found
|
|
114
|
+
const match = filePath.match(/(.+\/)?/);
|
|
115
|
+
if (match) {
|
|
116
|
+
return match[1] || ''; // Return the matched part or an empty string if none
|
|
117
|
+
} else {
|
|
118
|
+
return ''; // Return an empty string if no match is found
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// console.log(extractBasePath2("/osgi/_admin")); // "/osgi"
|
|
123
|
+
// console.log(extractBasePath2("/client/cli/homepage")); // "/client/cli"
|
|
124
|
+
// console.log(extractBasePath2("/user/profile")); // "/user"
|
|
125
|
+
// console.log(extractBasePath2("/settings")); // "/"
|
|
126
|
+
// console.log(extractBasePath2("no-slash")); // "/"
|
|
127
|
+
// console.log(extractBasePath2("/")); // "/"
|
|
128
|
+
// console.log(extractBasePath2("")); // "/"
|
|
129
|
+
export function extractBasePath2(filePath) {
|
|
130
|
+
if (typeof filePath !== 'string') {
|
|
131
|
+
throw `[INVALID_ARGUMENT] - filePath needs to be string`
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (!filePath || filePath === '/') {
|
|
135
|
+
return '/';
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Get the last index of '/'
|
|
139
|
+
const lastSlashIndex = filePath.lastIndexOf('/');
|
|
140
|
+
if (lastSlashIndex === -1) {
|
|
141
|
+
// No slash found
|
|
142
|
+
return '/';
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (lastSlashIndex === 0) {
|
|
146
|
+
return '/';
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Return everything up to the last slash
|
|
150
|
+
return filePath.substring(0, lastSlashIndex);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
// Test Cases
|
|
155
|
+
// console.log(substrAfterFirstSlash("/client/cli/homepage")); // "client"
|
|
156
|
+
// console.log(substrAfterFirstSlash("/user/profile")); // "user"
|
|
157
|
+
// console.log(substrAfterFirstSlash("/settings")); // "settings"
|
|
158
|
+
// console.log(substrAfterFirstSlash("no-slash")); // "no-slash"
|
|
159
|
+
// console.log(substrAfterFirstSlash("/")); // "" (No segment)
|
|
160
|
+
export function substrAfterFirstSlash(str) {
|
|
161
|
+
if (!str.includes("/")) return str; // If no "/", return the whole string
|
|
162
|
+
const parts = str.split('/'); // Split by "/"
|
|
163
|
+
return parts.length > 1 ? parts[1] : ''; // Return the second part or empty string if no "/"
|
|
164
|
+
}
|
|
165
|
+
export function substrWithoutLeadingSlash(str) {
|
|
166
|
+
return str.endsWith("/") ? str.slice(0, -1) : str;
|
|
167
|
+
}
|
|
168
|
+
// /cli -> cli
|
|
169
|
+
// /cli/test -> cli-test
|
|
170
|
+
// /cli/test/ -> cli-test
|
|
171
|
+
// cli -> cli
|
|
172
|
+
// "" - > ""
|
|
173
|
+
// "/" - > ""
|
|
174
|
+
export function endpointToRouterName(str) {
|
|
175
|
+
return str.trim().split("/").filter(item => item !== "").join("-")
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* capitalizeFirstLetter
|
|
180
|
+
* @param str
|
|
181
|
+
* @returns {string}
|
|
182
|
+
*/
|
|
183
|
+
export function capitalizeFirstLetter(str) {
|
|
184
|
+
if (str.length === 0) return str; // Handle empty strings
|
|
185
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* /test/1/2/3/vue.js -> vue.js
|
|
190
|
+
* @param path
|
|
191
|
+
* @returns {string}
|
|
192
|
+
*/
|
|
193
|
+
export function extractLastPath(path) {
|
|
194
|
+
return path.split("/")[path.split("/").length -1]
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export function truncateAndKeepLast(text, maxLength = 16) {
|
|
198
|
+
if (text.length <= maxLength) {
|
|
199
|
+
return text; // No truncation needed
|
|
200
|
+
} else {
|
|
201
|
+
return text.slice(-maxLength); // Return the last maxLength characters
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export function truncateAndKeepFirst(text, maxLength = 16) {
|
|
206
|
+
if(text === undefined || text === null) return ""
|
|
207
|
+
if (text.length <= maxLength) {
|
|
208
|
+
return text; // No truncation needed
|
|
209
|
+
} else {
|
|
210
|
+
return text.slice(0, maxLength); // Return the last maxLength characters
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
// /osgi/_admin/ -> /osgi
|
|
216
|
+
// /osgi/_admin -> /osgi
|
|
217
|
+
// /osgi -> ""
|
|
218
|
+
// /osgi/ -> ""
|
|
219
|
+
// osgi -> ""
|
|
220
|
+
export function parentPath(filePath) {
|
|
221
|
+
// Remove any trailing slash first
|
|
222
|
+
const trimmed = filePath.replace(/\/+$/, ""); // e.g. "/a/b/" -> "/a/b"
|
|
223
|
+
if(trimmed.includes('/')) {
|
|
224
|
+
return trimmed.slice(0, trimmed.lastIndexOf('/'));
|
|
225
|
+
}
|
|
226
|
+
return ""
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// /cli/test/hello -> hello
|
|
230
|
+
// /cli/test/ -> ""
|
|
231
|
+
// cli -> cli
|
|
232
|
+
// https://jsfiddle.net/
|
|
233
|
+
export function leafPath(filePath) {
|
|
234
|
+
if(filePath.includes('/')) {
|
|
235
|
+
// Everything after the last slash
|
|
236
|
+
return filePath.slice(filePath.lastIndexOf('/') + 1);
|
|
237
|
+
}
|
|
238
|
+
// If there's no slash, the entire filePath is the leaf
|
|
239
|
+
return filePath
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Determine if str starts with a letter
|
|
244
|
+
* @param str
|
|
245
|
+
* @returns {boolean}
|
|
246
|
+
*/
|
|
247
|
+
export function startsWithLetter(str) {
|
|
248
|
+
return /^[a-zA-Z]/.test(str);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Groups a list of objects by their 'prop' property.
|
|
257
|
+
*
|
|
258
|
+
* @param {Array} items - An array of objects, each with 'params', 'ret', and 'group' properties.
|
|
259
|
+
* @param {String|Number} prop - a key into an object
|
|
260
|
+
* @returns {Object} - An object whose keys are group names and values are arrays of objects.
|
|
261
|
+
*/
|
|
262
|
+
export function groupArrayByProperty(items, prop) {
|
|
263
|
+
return items.reduce((acc, item) => {
|
|
264
|
+
// Check if group is undefined, null, or blank (empty after trim)
|
|
265
|
+
const key = item[prop]
|
|
266
|
+
if ( key === undefined || key === null ||
|
|
267
|
+
(typeof key === 'string' && key.trim() === '')
|
|
268
|
+
) {
|
|
269
|
+
throw new Error(`Invalid value for property=${prop}: ${JSON.stringify(item)}`)
|
|
270
|
+
}
|
|
271
|
+
// If this group hasn't been seen yet, initialize an empty array
|
|
272
|
+
if (!acc[key]) {
|
|
273
|
+
acc[key] = []
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Push the current item into the array for its group
|
|
277
|
+
acc[key].push(item)
|
|
278
|
+
return acc
|
|
279
|
+
}, {})
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Groups the values (objects) of a given data object by the specified `prop`,
|
|
284
|
+
* inserting the object's original key (like "id1", "id2", etc.) into the object
|
|
285
|
+
* under the property 'k'.
|
|
286
|
+
*
|
|
287
|
+
* @param {Object} data - An object whose keys are item IDs and whose values each have the property `prop`.
|
|
288
|
+
* @param {string|number} prop - The property name by which to group (e.g. "group").
|
|
289
|
+
* @returns {Object} - An object whose keys are the distinct values of `prop`,
|
|
290
|
+
* and whose values are arrays of the original objects (plus `k`).
|
|
291
|
+
*/
|
|
292
|
+
export function groupObjectByProperty(data, prop) {
|
|
293
|
+
// Object.entries(data) => [ [key, value], [key, value], ... ]
|
|
294
|
+
// Example: [ ["id1", { group: "A", ... }], ["id2", { group: "B", ... }] ]
|
|
295
|
+
return Object.entries(data).reduce((acc, [dataKey, item]) => {
|
|
296
|
+
// The grouping value, e.g. item.group
|
|
297
|
+
const groupValue = item[prop];
|
|
298
|
+
|
|
299
|
+
// Validate that groupValue is neither undefined, null, nor blank
|
|
300
|
+
if ( groupValue === undefined || groupValue === null ||
|
|
301
|
+
(typeof groupValue === 'string' && groupValue.trim() === '')
|
|
302
|
+
) {
|
|
303
|
+
throw new Error(`Invalid value for property="${prop}": ${JSON.stringify(item)}`);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// If this grouping value doesn't exist yet, initialize it
|
|
307
|
+
if (!acc[groupValue]) {
|
|
308
|
+
acc[groupValue] = [];
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Push the item, adding a 'k' property that stores the original dataKey (like "id1")
|
|
312
|
+
acc[groupValue].push({
|
|
313
|
+
...item,
|
|
314
|
+
dataKey: dataKey,
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
return acc;
|
|
318
|
+
}, {});
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
// ________________________________________________________________________________
|
|
323
|
+
// CONVERSIONS
|
|
324
|
+
// ________________________________________________________________________________
|
|
325
|
+
export function bytesToMB(bytes) {
|
|
326
|
+
const MEGABYTES = 1024 * 1024; // 1 MB in bytes
|
|
327
|
+
return (bytes / MEGABYTES).toFixed(3);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Convert bytes into a human-readable string (K, MB, GB, TB, etc.)
|
|
332
|
+
*
|
|
333
|
+
* console.log(formatBytes(500)); // "500.00 B"
|
|
334
|
+
* console.log(formatBytes(2048)); // "2.00 KB"
|
|
335
|
+
* console.log(formatBytes(500000)); // "488.28 KB"
|
|
336
|
+
* console.log(formatBytes(1048576)); // "1.00 MB"
|
|
337
|
+
* console.log(formatBytes(1073741824)); // "1.00 GB"
|
|
338
|
+
* console.log(formatBytes(1099511627776)); // "1.00 TB"
|
|
339
|
+
*
|
|
340
|
+
* @param {number} bytes - The size in bytes
|
|
341
|
+
* @returns {string} - Human-readable file size
|
|
342
|
+
*/
|
|
343
|
+
export function formatBytes(bytes) {
|
|
344
|
+
if(bytes === undefined || bytes === null || isNaN(bytes)) {
|
|
345
|
+
return 'Unknown';
|
|
346
|
+
}
|
|
347
|
+
if (bytes < 1024) {
|
|
348
|
+
return bytes + ' B';
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
352
|
+
let unitIndex = 0;
|
|
353
|
+
let value = bytes;
|
|
354
|
+
|
|
355
|
+
// Divide by 1024 until the value is smaller than 1024 or we reach the last unit
|
|
356
|
+
while (value >= 1024 && unitIndex < units.length - 1) {
|
|
357
|
+
value /= 1024;
|
|
358
|
+
unitIndex++;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// Round to 2 decimal places and attach the appropriate unit
|
|
362
|
+
return value.toFixed(2) + ' ' + units[unitIndex];
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
export function formatDuration(durationMs) {
|
|
366
|
+
if(durationMs === undefined || durationMs === null || isNaN(durationMs)) {
|
|
367
|
+
return 'Unknown';
|
|
368
|
+
}
|
|
369
|
+
const seconds = (durationMs / 1000) % 60;
|
|
370
|
+
const minutes = Math.floor((durationMs / (1000 * 60)) % 60);
|
|
371
|
+
const hours = Math.floor((durationMs / (1000 * 60 * 60)) % 24);
|
|
372
|
+
const days = Math.floor(durationMs / (1000 * 60 * 60 * 24));
|
|
373
|
+
|
|
374
|
+
let result = '';
|
|
375
|
+
if (days > 0) result += `${days}d `;
|
|
376
|
+
if (hours > 0 || days > 0) result += `${hours}h `;
|
|
377
|
+
if (minutes > 0 || hours > 0 || days > 0) result += `${minutes}m `;
|
|
378
|
+
result += `${seconds.toFixed(2)}s`;
|
|
379
|
+
|
|
380
|
+
return result.trim();
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
export function tryJson(data) {
|
|
384
|
+
try {
|
|
385
|
+
const res = JSON.parse(data)
|
|
386
|
+
return JSON.stringify(res, null, 2)
|
|
387
|
+
} catch(e) {
|
|
388
|
+
return data
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// ________________________________________________________________________________
|
|
393
|
+
// RPCResult
|
|
394
|
+
// ________________________________________________________________________________
|
|
395
|
+
/**
|
|
396
|
+
* @typedef {Object} RPCResult
|
|
397
|
+
* @property {boolean} isOk - Indicates if the operation was successful.
|
|
398
|
+
* @property {*} result - The result of the operation.
|
|
399
|
+
*/
|
|
400
|
+
export function ok(res) {
|
|
401
|
+
return {
|
|
402
|
+
isOk: true,
|
|
403
|
+
result: res
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* @typedef {Object} RPCResult
|
|
409
|
+
* @property {boolean} isOk - Indicates if the operation was successful.
|
|
410
|
+
* @property {array} stack
|
|
411
|
+
* @property {*} result - The result of the operation.
|
|
412
|
+
*/
|
|
413
|
+
export function nok(res, stack = []) {
|
|
414
|
+
return {
|
|
415
|
+
isOk: false,
|
|
416
|
+
result: res,
|
|
417
|
+
stack: stack
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Checks that each element of an array is a string
|
|
423
|
+
* @param arr
|
|
424
|
+
* @returns index of first non string or -1 if they are all strings
|
|
425
|
+
*/
|
|
426
|
+
export function indexOfNonString(arr) {
|
|
427
|
+
// If the input is not an array, decide what to return.
|
|
428
|
+
// Here we return -1 to indicate "no invalid element found."
|
|
429
|
+
if (!Array.isArray(arr)) {
|
|
430
|
+
throw Error("indexOfNonString only works with arrays")
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// Loop through the array, checking each item
|
|
434
|
+
for (let i = 0; i < arr.length; i++) {
|
|
435
|
+
if (typeof arr[i] !== 'string') {
|
|
436
|
+
return i; // Return the index immediately if it's not a string
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
// If we finish the loop without finding any non-string, return -1
|
|
441
|
+
return -1;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
*
|
|
446
|
+
* TEST CASES
|
|
447
|
+
* console.log(splitPath('/hello/test/one'));
|
|
448
|
+
* Output: { first: '/hello', rest: '/test/one' }
|
|
449
|
+
*
|
|
450
|
+
* console.log(splitPath('/1/2/3/4/'));
|
|
451
|
+
* Output: { first: '/1', rest: '/2/3/4/' }
|
|
452
|
+
*
|
|
453
|
+
* console.log(splitPath('/single'));
|
|
454
|
+
* Output: { first: '/single', rest: '' }
|
|
455
|
+
*/
|
|
456
|
+
export function splitPathString(path) {
|
|
457
|
+
// Find the index of the second slash, starting search after index 0
|
|
458
|
+
const secondSlashIndex = path.indexOf('/', 1);
|
|
459
|
+
|
|
460
|
+
if (secondSlashIndex === -1) {
|
|
461
|
+
// There is no second part
|
|
462
|
+
return { first: path, rest: '' };
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
return {
|
|
466
|
+
first: path.slice(0, secondSlashIndex),
|
|
467
|
+
rest: path.slice(secondSlashIndex)
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Cleans a file name by replacing dots with hyphens, removing special characters,
|
|
474
|
+
* @param name
|
|
475
|
+
* @returns {*}
|
|
476
|
+
*/
|
|
477
|
+
export function cleanFileName(name) {
|
|
478
|
+
return name
|
|
479
|
+
.replace(/\./g, "-")
|
|
480
|
+
.replace(/[^A-Za-z0-9 _-]/g, "")
|
|
481
|
+
.replace(/ /g, "-")
|
|
482
|
+
.slice(0, 24);
|
|
483
|
+
}
|
package/core/Logging.mjs
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// ________________________________________________________________________________
|
|
2
|
+
// Logging.mjs
|
|
3
|
+
// ________________________________________________________________________________
|
|
4
|
+
import Constants from '../Constants.mjs'
|
|
5
|
+
|
|
6
|
+
// Note: localStorage is global in browser environment object
|
|
7
|
+
// Note: window.log is provided by loglevel library (imported globally in index.html)
|
|
8
|
+
// https://github.com/kutuluk/loglevel-plugin-prefix
|
|
9
|
+
|
|
10
|
+
const loggerPrefixFn = (level, name, timestamp) => `[${name}]`;
|
|
11
|
+
const prefixer = prefix.noConflict();
|
|
12
|
+
prefixer.reg(log);
|
|
13
|
+
prefixer.apply(log, { format: loggerPrefixFn });
|
|
14
|
+
|
|
15
|
+
const localStorageKey = "loggers"
|
|
16
|
+
|
|
17
|
+
const loggers = { ...Constants.defaultLoggerLevels }
|
|
18
|
+
|
|
19
|
+
// https://www.npmjs.com/package/loglevel
|
|
20
|
+
export function getLogger(location) {
|
|
21
|
+
const logger = log.getLogger(location)
|
|
22
|
+
if(loggers.hasOwnProperty(location)) {
|
|
23
|
+
logger.setLevel(loggers[location])
|
|
24
|
+
} else {
|
|
25
|
+
logger.setLevel(Constants.defaultLogLevel)
|
|
26
|
+
loggers[location] = Constants.defaultLogLevel
|
|
27
|
+
}
|
|
28
|
+
return logger
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function setLogger(location, level) {
|
|
32
|
+
const logger = log.getLogger(location)
|
|
33
|
+
logger.setLevel(level)
|
|
34
|
+
loggers[location] = level
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
localStorage.setItem(localStorageKey, JSON.stringify(loggers));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function listLoggers() {
|
|
41
|
+
return loggers
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function clearLocalStorage() {
|
|
45
|
+
localStorage.removeItem(localStorageKey)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function init() {
|
|
49
|
+
const json = localStorage.getItem(localStorageKey)
|
|
50
|
+
// Object.assign(loggers, JSON.parse(json));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
log.info (`[INIT]`)
|
|
54
|
+
init()
|
|
55
|
+
// log.trace(`[INIT] - trace - enabled`)
|
|
56
|
+
// log.debug(`[INIT] - debug - enabled`)
|
|
57
|
+
// log.error(`[INIT] - error - enabled`)
|
|
58
|
+
// log.warn( `[INIT] - warn - enabled`)
|
|
59
|
+
|
package/core/Page404.vue
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
/*
|
|
3
|
+
page-fallback.vue
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
//________________________________________________________________________________
|
|
7
|
+
// IMPORTS
|
|
8
|
+
//________________________________________________________________________________
|
|
9
|
+
import {reactive, onMounted, defineAsyncComponent, watch, computed} from 'vue'
|
|
10
|
+
import {store as storeMain, api as apiMain } from 'GlobalStore'
|
|
11
|
+
import {useRoute, useRouter, NavigationFailureType} from 'vue-router'
|
|
12
|
+
import {getLogger} from "Logging";
|
|
13
|
+
import {api as notify} from "NotifyUtils"
|
|
14
|
+
import {substrAfterFirstSlash, substrWithoutLeadingSlash} from "JsUtils";
|
|
15
|
+
import {parentPath} from "JsUtils";
|
|
16
|
+
|
|
17
|
+
// ________________________________________________________________________________
|
|
18
|
+
// LOGGING
|
|
19
|
+
// ________________________________________________________________________________
|
|
20
|
+
const LOG_HEADER = "page-404.vue"
|
|
21
|
+
const logger = getLogger(LOG_HEADER)
|
|
22
|
+
logger.debug("[INIT]")
|
|
23
|
+
|
|
24
|
+
const route = useRoute()
|
|
25
|
+
const router = useRouter()
|
|
26
|
+
//________________________________________________________________________________
|
|
27
|
+
// STATE
|
|
28
|
+
//________________________________________________________________________________
|
|
29
|
+
const local = reactive({
|
|
30
|
+
id: LOG_HEADER,
|
|
31
|
+
isLoading: false,
|
|
32
|
+
isResolving: false,
|
|
33
|
+
route: null,
|
|
34
|
+
|
|
35
|
+
noRegistryFound: false,
|
|
36
|
+
resolved: null
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
const instanceId = computed(() => {
|
|
40
|
+
return substrAfterFirstSlash(router.currentRoute.value.fullPath)
|
|
41
|
+
})
|
|
42
|
+
//________________________________________________________________________________
|
|
43
|
+
// INIT
|
|
44
|
+
//________________________________________________________________________________
|
|
45
|
+
async function init() {
|
|
46
|
+
// 4 = aborted
|
|
47
|
+
// 8 = cancelled
|
|
48
|
+
// 16 = duplicated
|
|
49
|
+
local.isResolving = true
|
|
50
|
+
if (storeMain.isReady) {
|
|
51
|
+
await waitForRouteAndReplace(substrWithoutLeadingSlash(route.fullPath));
|
|
52
|
+
local.isResolving = false
|
|
53
|
+
return
|
|
54
|
+
}
|
|
55
|
+
setTimeout(async () => {
|
|
56
|
+
init()
|
|
57
|
+
}, 1000)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async function waitForRouteAndReplace(fullPath) {
|
|
61
|
+
const instanceId = substrAfterFirstSlash(fullPath)
|
|
62
|
+
logger.debug(`instanceId=${instanceId}`)
|
|
63
|
+
|
|
64
|
+
const resolved = router.resolve(fullPath);
|
|
65
|
+
local.resolved = JSON.parse(JSON.stringify(resolved))
|
|
66
|
+
logger.info(resolved)
|
|
67
|
+
const registry = storeMain.r[instanceId]
|
|
68
|
+
if(!registry){
|
|
69
|
+
logger.info("No registry found for instanceId:", instanceId)
|
|
70
|
+
local.noRegistryFound = true
|
|
71
|
+
return
|
|
72
|
+
} else {
|
|
73
|
+
local.noRegistryFound = false
|
|
74
|
+
}
|
|
75
|
+
// if (resolved.matched.length > 0 && resolved.matched[resolved.matched.length - 1].path === fullPath && registry) {
|
|
76
|
+
if (resolved.matched.length > 0 && resolved.name !== '404' && registry) {
|
|
77
|
+
await registry.routeByEndpoint(fullPath.replace(`/${instanceId}`, ""))
|
|
78
|
+
return
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const parent = parentPath(fullPath);
|
|
82
|
+
|
|
83
|
+
if (parent && parent !== fullPath) {
|
|
84
|
+
logger.info(`Could not load ${fullPath}. Trying parent: ${parent}`);
|
|
85
|
+
await waitForRouteAndReplace(parent)
|
|
86
|
+
// logger.info(`Re-checking if child route is now available: ${fullPath}`);
|
|
87
|
+
// await waitForRouteAndReplace(fullPath);
|
|
88
|
+
} else {
|
|
89
|
+
notify.badDetails(`[${local.id}] - Failed to resolve route after multiple attempts:`, fullPath)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
onMounted(() => {
|
|
94
|
+
init()
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
<template>
|
|
101
|
+
<div class="page-404">
|
|
102
|
+
<x-section extra="fs-3 text-danger" k="Invalid Route!">
|
|
103
|
+
|
|
104
|
+
<div class="row">
|
|
105
|
+
<div class="col-auto">
|
|
106
|
+
<div v-if="local.isResolving" class="spinner-border" role="status">
|
|
107
|
+
<span class="visually-hidden">Loading...</span>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
<div class="col-auto">
|
|
111
|
+
<h5 v-if="local.isResolving">Waiting for routes to be ready...</h5>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<div class="row mt-4 mb-4">
|
|
116
|
+
<x-collapse k="Resolved" v-if="local.resolved" :modelValue="true">
|
|
117
|
+
<x-json :obj="local.resolved"></x-json>
|
|
118
|
+
</x-collapse>
|
|
119
|
+
<div v-else>
|
|
120
|
+
<span class="fw-bold">No resolved route available</span>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<div class="row mt-4 mb-4">
|
|
125
|
+
<x-collapse k="componentErrors Entity" :modelValue="true" v-if="storeMain.componentErrors">
|
|
126
|
+
<x-json :obj="storeMain.componentErrors"></x-json>
|
|
127
|
+
</x-collapse>
|
|
128
|
+
<div v-else>
|
|
129
|
+
<span class="fw-bold">No componentErrors</span>
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
|
|
133
|
+
<div class="row mb-2">
|
|
134
|
+
<div class="col-auto">
|
|
135
|
+
<x-label k="Selected Instance Id:">{{ storeMain.selectedInstId }}</x-label>
|
|
136
|
+
</div>
|
|
137
|
+
<div class="col-auto" v-if="storeMain.selectedInstId">
|
|
138
|
+
<ExecButton icon="fa-rotate-right me-1" :callback="() => storeMain.r[storeMain.selectedInstId].selectDefaultDashboard()">Default Component</ExecButton>
|
|
139
|
+
</div>
|
|
140
|
+
<div class="col-auto" >
|
|
141
|
+
<ExecButton icon="fa-rotate-right me-1" :callback="() => apiMain.routeByEndpoint(local.resolved.fullPath)">Retry</ExecButton>
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
|
|
145
|
+
</x-section>
|
|
146
|
+
|
|
147
|
+
</div>
|
|
148
|
+
</template>
|
|
149
|
+
|
|
150
|
+
<style scoped>
|
|
151
|
+
|
|
152
|
+
</style>
|