@kubed.io/cdn 0.0.5 → 0.0.6
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/README.md +11 -0
- package/dist/chunks/1c-Cg7z75RR.js +94 -0
- package/dist/chunks/1c-Cg7z75RR.js.map +1 -0
- package/dist/chunks/abnf-DjOFdYyB.js +59 -0
- package/dist/chunks/abnf-DjOFdYyB.js.map +1 -0
- package/dist/chunks/accesslog-CT59MCIO.js +72 -0
- package/dist/chunks/accesslog-CT59MCIO.js.map +1 -0
- package/dist/chunks/actionscript-BF7IWfId.js +85 -0
- package/dist/chunks/actionscript-BF7IWfId.js.map +1 -0
- package/dist/chunks/ada-BW8u8CRX.js +107 -0
- package/dist/chunks/ada-BW8u8CRX.js.map +1 -0
- package/dist/chunks/angelscript-2l-XM2Vw.js +91 -0
- package/dist/chunks/angelscript-2l-XM2Vw.js.map +1 -0
- package/dist/chunks/apache-ClDRwhlj.js +87 -0
- package/dist/chunks/apache-ClDRwhlj.js.map +1 -0
- package/dist/chunks/applescript-BnCdU8ml.js +57 -0
- package/dist/chunks/applescript-BnCdU8ml.js.map +1 -0
- package/dist/chunks/arcade-BtIJZuSq.js +157 -0
- package/dist/chunks/arcade-BtIJZuSq.js.map +1 -0
- package/dist/chunks/arduino-xB3NbW4M.js +272 -0
- package/dist/chunks/arduino-xB3NbW4M.js.map +1 -0
- package/dist/chunks/armasm-Dg5wPE4N.js +66 -0
- package/dist/chunks/armasm-Dg5wPE4N.js.map +1 -0
- package/dist/chunks/asciidoc-ZAddoC6x.js +178 -0
- package/dist/chunks/asciidoc-ZAddoC6x.js.map +1 -0
- package/dist/chunks/aspectj-Dfd0IA-3.js +126 -0
- package/dist/chunks/aspectj-Dfd0IA-3.js.map +1 -0
- package/dist/chunks/autohotkey-tKEhIrY9.js +55 -0
- package/dist/chunks/autohotkey-tKEhIrY9.js.map +1 -0
- package/dist/chunks/autoit-BPoYFiDT.js +123 -0
- package/dist/chunks/autoit-BPoYFiDT.js.map +1 -0
- package/dist/chunks/avrasm-DcwC__J5.js +47 -0
- package/dist/chunks/avrasm-DcwC__J5.js.map +1 -0
- package/dist/chunks/awk-B0eiS31p.js +56 -0
- package/dist/chunks/awk-B0eiS31p.js.map +1 -0
- package/dist/chunks/axapta-BZnaEvVa.js +65 -0
- package/dist/chunks/axapta-BZnaEvVa.js.map +1 -0
- package/dist/chunks/bash-SfqkqXwO.js +171 -0
- package/dist/chunks/bash-SfqkqXwO.js.map +1 -0
- package/dist/chunks/basic-hK9i76TR.js +44 -0
- package/dist/chunks/basic-hK9i76TR.js.map +1 -0
- package/dist/chunks/bnf-CT5PE87o.js +28 -0
- package/dist/chunks/bnf-CT5PE87o.js.map +1 -0
- package/dist/chunks/brainfuck-Cix81oQc.js +41 -0
- package/dist/chunks/brainfuck-Cix81oQc.js.map +1 -0
- package/dist/chunks/c-DqpMY-rp.js +189 -0
- package/dist/chunks/c-DqpMY-rp.js.map +1 -0
- package/dist/chunks/cal-C-xic9Tn.js +91 -0
- package/dist/chunks/cal-C-xic9Tn.js.map +1 -0
- package/dist/chunks/capnproto-Bte6wB8g.js +84 -0
- package/dist/chunks/capnproto-Bte6wB8g.js.map +1 -0
- package/dist/chunks/ceylon-B5xM3rkd.js +77 -0
- package/dist/chunks/ceylon-B5xM3rkd.js.map +1 -0
- package/dist/chunks/clean-58wPfVlT.js +24 -0
- package/dist/chunks/clean-58wPfVlT.js.map +1 -0
- package/dist/chunks/clojure-DnooNAlk.js +114 -0
- package/dist/chunks/clojure-DnooNAlk.js.map +1 -0
- package/dist/chunks/clojure-repl-BOwc5f8V.js +18 -0
- package/dist/chunks/clojure-repl-BOwc5f8V.js.map +1 -0
- package/dist/chunks/cmake-CmXecy9B.js +28 -0
- package/dist/chunks/cmake-CmXecy9B.js.map +1 -0
- package/dist/chunks/coffeescript-BxFWPVxK.js +199 -0
- package/dist/chunks/coffeescript-BxFWPVxK.js.map +1 -0
- package/dist/chunks/coq-q80xvjL8.js +26 -0
- package/dist/chunks/coq-q80xvjL8.js.map +1 -0
- package/dist/chunks/core-BSQzrNYA.js +853 -0
- package/dist/chunks/core-BSQzrNYA.js.map +1 -0
- package/dist/chunks/cos-DiRYB57M.js +78 -0
- package/dist/chunks/cos-DiRYB57M.js.map +1 -0
- package/dist/chunks/cpp-BvOt3G_R.js +238 -0
- package/dist/chunks/cpp-BvOt3G_R.js.map +1 -0
- package/dist/chunks/crmsh-h8TY8H79.js +80 -0
- package/dist/chunks/crmsh-h8TY8H79.js.map +1 -0
- package/dist/chunks/crystal-Cn8iNhTZ.js +247 -0
- package/dist/chunks/crystal-Cn8iNhTZ.js.map +1 -0
- package/dist/chunks/csharp-BUAiXZio.js +262 -0
- package/dist/chunks/csharp-BUAiXZio.js.map +1 -0
- package/dist/chunks/csp-BP06y0Ba.js +25 -0
- package/dist/chunks/csp-BP06y0Ba.js.map +1 -0
- package/dist/chunks/css-CuP2L3Vg.js +147 -0
- package/dist/chunks/css-CuP2L3Vg.js.map +1 -0
- package/dist/chunks/d-C0cOEHlZ.js +87 -0
- package/dist/chunks/d-C0cOEHlZ.js.map +1 -0
- package/dist/chunks/dart-DOyn4FWh.js +136 -0
- package/dist/chunks/dart-DOyn4FWh.js.map +1 -0
- package/dist/chunks/{define-BSZoKakE.js → define-DqUpowD9.js} +3 -3
- package/dist/chunks/{define-BSZoKakE.js.map → define-DqUpowD9.js.map} +1 -1
- package/dist/chunks/delphi-BL8QbVUL.js +95 -0
- package/dist/chunks/delphi-BL8QbVUL.js.map +1 -0
- package/dist/chunks/diff-DMbO7OaS.js +41 -0
- package/dist/chunks/diff-DMbO7OaS.js.map +1 -0
- package/dist/chunks/django-CnvXUSpm.js +44 -0
- package/dist/chunks/django-CnvXUSpm.js.map +1 -0
- package/dist/chunks/dns-DpaEqlb1.js +73 -0
- package/dist/chunks/dns-DpaEqlb1.js.map +1 -0
- package/dist/chunks/dockerfile-D9WngOli.js +36 -0
- package/dist/chunks/dockerfile-D9WngOli.js.map +1 -0
- package/dist/chunks/dos-w6Vxr4_L.js +59 -0
- package/dist/chunks/dos-w6Vxr4_L.js.map +1 -0
- package/dist/chunks/dsconfig-Dq_NzMQE.js +56 -0
- package/dist/chunks/dsconfig-Dq_NzMQE.js.map +1 -0
- package/dist/chunks/dts-CpWaLhGr.js +117 -0
- package/dist/chunks/dts-CpWaLhGr.js.map +1 -0
- package/dist/chunks/dust-C4uDg2L0.js +34 -0
- package/dist/chunks/dust-C4uDg2L0.js.map +1 -0
- package/dist/chunks/ebnf-ByjV7C32.js +41 -0
- package/dist/chunks/ebnf-ByjV7C32.js.map +1 -0
- package/dist/chunks/{element-ChNBLJ5X.js → element-CaN9ZVoe.js} +60 -60
- package/dist/chunks/element-CaN9ZVoe.js.map +1 -0
- package/dist/chunks/elixir-DkdYO0Vr.js +191 -0
- package/dist/chunks/elixir-DkdYO0Vr.js.map +1 -0
- package/dist/chunks/elm-Clms-iZw.js +101 -0
- package/dist/chunks/elm-Clms-iZw.js.map +1 -0
- package/dist/chunks/erb-BC3HNNgp.js +18 -0
- package/dist/chunks/erb-BC3HNNgp.js.map +1 -0
- package/dist/chunks/erlang-Cu0IlQov.js +220 -0
- package/dist/chunks/erlang-Cu0IlQov.js.map +1 -0
- package/dist/chunks/erlang-repl-5hCt0uhz.js +42 -0
- package/dist/chunks/erlang-repl-5hCt0uhz.js.map +1 -0
- package/dist/chunks/excel-BIDJpxSu.js +49 -0
- package/dist/chunks/excel-BIDJpxSu.js.map +1 -0
- package/dist/chunks/fix-C0h50qaq.js +31 -0
- package/dist/chunks/fix-C0h50qaq.js.map +1 -0
- package/dist/chunks/flix-BCyKzKuw.js +61 -0
- package/dist/chunks/flix-BCyKzKuw.js.map +1 -0
- package/dist/chunks/fortran-DJ9If3VL.js +55 -0
- package/dist/chunks/fortran-DJ9If3VL.js.map +1 -0
- package/dist/chunks/freedesktop-DY5X71dr.js +88 -0
- package/dist/chunks/freedesktop-DY5X71dr.js.map +1 -0
- package/dist/chunks/fsharp-B-zxwYyG.js +243 -0
- package/dist/chunks/fsharp-B-zxwYyG.js.map +1 -0
- package/dist/chunks/gams-Bk-CWpk3.js +128 -0
- package/dist/chunks/gams-Bk-CWpk3.js.map +1 -0
- package/dist/chunks/gauss-DoDOans8.js +154 -0
- package/dist/chunks/gauss-DoDOans8.js.map +1 -0
- package/dist/chunks/gcode-BUHWwtTe.js +123 -0
- package/dist/chunks/gcode-BUHWwtTe.js.map +1 -0
- package/dist/chunks/gherkin-Wzf9M781.js +70 -0
- package/dist/chunks/gherkin-Wzf9M781.js.map +1 -0
- package/dist/chunks/glsl-CUb3B_sB.js +27 -0
- package/dist/chunks/glsl-CUb3B_sB.js.map +1 -0
- package/dist/chunks/gml-BS5lKjIV.js +24 -0
- package/dist/chunks/gml-BS5lKjIV.js.map +1 -0
- package/dist/chunks/go-BUD6D8kx.js +146 -0
- package/dist/chunks/go-BUD6D8kx.js.map +1 -0
- package/dist/chunks/golo-CeWwUkIr.js +27 -0
- package/dist/chunks/golo-CeWwUkIr.js.map +1 -0
- package/dist/chunks/gradle-BoqM74sD.js +20 -0
- package/dist/chunks/gradle-BoqM74sD.js.map +1 -0
- package/dist/chunks/graphql-j3kf95P9.js +69 -0
- package/dist/chunks/graphql-j3kf95P9.js.map +1 -0
- package/dist/chunks/groovy-B3DHxrmD.js +129 -0
- package/dist/chunks/groovy-B3DHxrmD.js.map +1 -0
- package/dist/chunks/haml-CgF67t0s.js +98 -0
- package/dist/chunks/haml-CgF67t0s.js.map +1 -0
- package/dist/chunks/handlebars-Bp8_IuhA.js +146 -0
- package/dist/chunks/handlebars-Bp8_IuhA.js.map +1 -0
- package/dist/chunks/haskell-2oFXwht3.js +140 -0
- package/dist/chunks/haskell-2oFXwht3.js.map +1 -0
- package/dist/chunks/haxe-BWUFK1R1.js +144 -0
- package/dist/chunks/haxe-BWUFK1R1.js.map +1 -0
- package/dist/chunks/highlight-D54M45bZ.js +328 -0
- package/dist/chunks/highlight-D54M45bZ.js.map +1 -0
- package/dist/chunks/hsp-YaLnMBmw.js +47 -0
- package/dist/chunks/hsp-YaLnMBmw.js.map +1 -0
- package/dist/chunks/http-D1Jx4NCy.js +76 -0
- package/dist/chunks/http-D1Jx4NCy.js.map +1 -0
- package/dist/chunks/hy-W6RLRSst.js +75 -0
- package/dist/chunks/hy-W6RLRSst.js.map +1 -0
- package/dist/chunks/inform7-Cqmf6Xxi.js +45 -0
- package/dist/chunks/inform7-Cqmf6Xxi.js.map +1 -0
- package/dist/chunks/ini-C_A9yUHA.js +90 -0
- package/dist/chunks/ini-C_A9yUHA.js.map +1 -0
- package/dist/chunks/irpf90-CFKe0d2G.js +49 -0
- package/dist/chunks/irpf90-CFKe0d2G.js.map +1 -0
- package/dist/chunks/isbl-DRZZfDZN.js +98 -0
- package/dist/chunks/isbl-DRZZfDZN.js.map +1 -0
- package/dist/chunks/java-DH7DXQTB.js +176 -0
- package/dist/chunks/java-DH7DXQTB.js.map +1 -0
- package/dist/chunks/javascript-D-ispHLP.js +433 -0
- package/dist/chunks/javascript-D-ispHLP.js.map +1 -0
- package/dist/chunks/jboss-cli-DwoEMfEn.js +48 -0
- package/dist/chunks/jboss-cli-DwoEMfEn.js.map +1 -0
- package/dist/chunks/json-BrJhaXJI.js +44 -0
- package/dist/chunks/json-BrJhaXJI.js.map +1 -0
- package/dist/chunks/julia-DUM4uO0n.js +82 -0
- package/dist/chunks/julia-DUM4uO0n.js.map +1 -0
- package/dist/chunks/julia-repl-DkEOqH-L.js +20 -0
- package/dist/chunks/julia-repl-DkEOqH-L.js.map +1 -0
- package/dist/chunks/kd-B0BcpOG_.js +2662 -0
- package/dist/chunks/kd-B0BcpOG_.js.map +1 -0
- package/dist/chunks/kotlin-BvSvL3hH.js +208 -0
- package/dist/chunks/kotlin-BvSvL3hH.js.map +1 -0
- package/dist/chunks/lasso-BixBtX3R.js +122 -0
- package/dist/chunks/lasso-BixBtX3R.js.map +1 -0
- package/dist/chunks/latex-BNm-5qSt.js +188 -0
- package/dist/chunks/latex-BNm-5qSt.js.map +1 -0
- package/dist/chunks/ldif-D2VChYy1.js +26 -0
- package/dist/chunks/ldif-D2VChYy1.js.map +1 -0
- package/dist/chunks/leaf-DZ17MVc2.js +67 -0
- package/dist/chunks/leaf-DZ17MVc2.js.map +1 -0
- package/dist/chunks/less-Cj7NvTiz.js +198 -0
- package/dist/chunks/less-Cj7NvTiz.js.map +1 -0
- package/dist/chunks/lisp-0CHBhNkP.js +105 -0
- package/dist/chunks/lisp-0CHBhNkP.js.map +1 -0
- package/dist/chunks/livecodeserver-f04_o5o0.js +85 -0
- package/dist/chunks/livecodeserver-f04_o5o0.js.map +1 -0
- package/dist/chunks/livescript-DnaWcjJC.js +192 -0
- package/dist/chunks/livescript-DnaWcjJC.js.map +1 -0
- package/dist/chunks/llvm-CD_EQmwW.js +71 -0
- package/dist/chunks/llvm-CD_EQmwW.js.map +1 -0
- package/dist/chunks/lsl-BjbA45DV.js +56 -0
- package/dist/chunks/lsl-BjbA45DV.js.map +1 -0
- package/dist/chunks/lua-C8cmPpDf.js +48 -0
- package/dist/chunks/lua-C8cmPpDf.js.map +1 -0
- package/dist/chunks/makefile-vKf6Crs_.js +59 -0
- package/dist/chunks/makefile-vKf6Crs_.js.map +1 -0
- package/dist/chunks/markdown-D1MbcAo6.js +180 -0
- package/dist/chunks/markdown-D1MbcAo6.js.map +1 -0
- package/dist/chunks/marked.esm-BrPimSW6.js +1494 -0
- package/dist/chunks/marked.esm-BrPimSW6.js.map +1 -0
- package/dist/chunks/mathematica-BAI0dr8P.js +71 -0
- package/dist/chunks/mathematica-BAI0dr8P.js.map +1 -0
- package/dist/chunks/matlab-tHkexNRr.js +72 -0
- package/dist/chunks/matlab-tHkexNRr.js.map +1 -0
- package/dist/chunks/maxima-DBb1On73.js +40 -0
- package/dist/chunks/maxima-DBb1On73.js.map +1 -0
- package/dist/chunks/mel-DQ2XEeJZ.js +26 -0
- package/dist/chunks/mel-DQ2XEeJZ.js.map +1 -0
- package/dist/chunks/mercury-DB7FwEBk.js +57 -0
- package/dist/chunks/mercury-DB7FwEBk.js.map +1 -0
- package/dist/chunks/mipsasm-Bnw9lQ6-.js +55 -0
- package/dist/chunks/mipsasm-Bnw9lQ6-.js.map +1 -0
- package/dist/chunks/mizar-CKEtvqV9.js +12 -0
- package/dist/chunks/mizar-CKEtvqV9.js.map +1 -0
- package/dist/chunks/mojolicious-FvfVuUnD.js +29 -0
- package/dist/chunks/mojolicious-FvfVuUnD.js.map +1 -0
- package/dist/chunks/monkey-DaGzblyK.js +73 -0
- package/dist/chunks/monkey-DaGzblyK.js.map +1 -0
- package/dist/chunks/moonscript-B9xmaKDF.js +99 -0
- package/dist/chunks/moonscript-B9xmaKDF.js.map +1 -0
- package/dist/chunks/n1ql-h7HuiOG_.js +47 -0
- package/dist/chunks/n1ql-h7HuiOG_.js.map +1 -0
- package/dist/chunks/nestedtext-z3hOUdBb.js +67 -0
- package/dist/chunks/nestedtext-z3hOUdBb.js.map +1 -0
- package/dist/chunks/nginx-Cscn9g8k.js +126 -0
- package/dist/chunks/nginx-Cscn9g8k.js.map +1 -0
- package/dist/chunks/nim-DuEHXsfI.js +57 -0
- package/dist/chunks/nim-DuEHXsfI.js.map +1 -0
- package/dist/chunks/nix-CK-JoV_w.js +176 -0
- package/dist/chunks/nix-CK-JoV_w.js.map +1 -0
- package/dist/chunks/node-repl-YPgIlFR4.js +21 -0
- package/dist/chunks/node-repl-YPgIlFR4.js.map +1 -0
- package/dist/chunks/nsis-C2knGE1f.js +103 -0
- package/dist/chunks/nsis-C2knGE1f.js.map +1 -0
- package/dist/chunks/objectivec-CUvPbZB7.js +119 -0
- package/dist/chunks/objectivec-CUvPbZB7.js.map +1 -0
- package/dist/chunks/ocaml-CJnlG7MK.js +54 -0
- package/dist/chunks/ocaml-CJnlG7MK.js.map +1 -0
- package/dist/chunks/openscad-B7xqzB_t.js +61 -0
- package/dist/chunks/openscad-B7xqzB_t.js.map +1 -0
- package/dist/chunks/oxygene-y7G7cOvu.js +55 -0
- package/dist/chunks/oxygene-y7G7cOvu.js.map +1 -0
- package/dist/chunks/parser3-BO1P2QTe.js +42 -0
- package/dist/chunks/parser3-BO1P2QTe.js.map +1 -0
- package/dist/chunks/perl-CIZiAqA2.js +194 -0
- package/dist/chunks/perl-CIZiAqA2.js.map +1 -0
- package/dist/chunks/pf-DtIBAeXH.js +32 -0
- package/dist/chunks/pf-DtIBAeXH.js.map +1 -0
- package/dist/chunks/pgsql-DhvwSgY7.js +193 -0
- package/dist/chunks/pgsql-DhvwSgY7.js.map +1 -0
- package/dist/chunks/php-Df419x2P.js +302 -0
- package/dist/chunks/php-Df419x2P.js.map +1 -0
- package/dist/chunks/php-template-NGWDJ4ZL.js +45 -0
- package/dist/chunks/php-template-NGWDJ4ZL.js.map +1 -0
- package/dist/chunks/plaintext-DI9-6uUK.js +12 -0
- package/dist/chunks/plaintext-DI9-6uUK.js.map +1 -0
- package/dist/chunks/pony-DWRlzIm6.js +52 -0
- package/dist/chunks/pony-DWRlzIm6.js.map +1 -0
- package/dist/chunks/powershell-Bi81KJvX.js +190 -0
- package/dist/chunks/powershell-Bi81KJvX.js.map +1 -0
- package/dist/chunks/processing-NRILzl6W.js +100 -0
- package/dist/chunks/processing-NRILzl6W.js.map +1 -0
- package/dist/chunks/profile-C5HdUz2O.js +40 -0
- package/dist/chunks/profile-C5HdUz2O.js.map +1 -0
- package/dist/chunks/prolog-CSxvOOUl.js +56 -0
- package/dist/chunks/prolog-CSxvOOUl.js.map +1 -0
- package/dist/chunks/properties-DVff9GiD.js +40 -0
- package/dist/chunks/properties-DVff9GiD.js.map +1 -0
- package/dist/chunks/protobuf-CwPeazJT.js +63 -0
- package/dist/chunks/protobuf-CwPeazJT.js.map +1 -0
- package/dist/chunks/puppet-wWT6-WaD.js +84 -0
- package/dist/chunks/puppet-wWT6-WaD.js.map +1 -0
- package/dist/chunks/purebasic-HWZkxa8e.js +44 -0
- package/dist/chunks/purebasic-HWZkxa8e.js.map +1 -0
- package/dist/chunks/purify.es-C_X9UTsz.js +846 -0
- package/dist/chunks/purify.es-C_X9UTsz.js.map +1 -0
- package/dist/chunks/python-B3xOtrtl.js +240 -0
- package/dist/chunks/python-B3xOtrtl.js.map +1 -0
- package/dist/chunks/python-repl-DFMVj5e5.js +21 -0
- package/dist/chunks/python-repl-DFMVj5e5.js.map +1 -0
- package/dist/chunks/q-DOHmm85f.js +23 -0
- package/dist/chunks/q-DOHmm85f.js.map +1 -0
- package/dist/chunks/qml-LsukXoE-.js +129 -0
- package/dist/chunks/qml-LsukXoE-.js.map +1 -0
- package/dist/chunks/r-qBqOPbmv.js +142 -0
- package/dist/chunks/r-qBqOPbmv.js.map +1 -0
- package/dist/chunks/reasonml-D25FoGuQ.js +80 -0
- package/dist/chunks/reasonml-D25FoGuQ.js.map +1 -0
- package/dist/chunks/rib-C3T5JisO.js +18 -0
- package/dist/chunks/rib-C3T5JisO.js.map +1 -0
- package/dist/chunks/roboconf-Ckycnnun.js +55 -0
- package/dist/chunks/roboconf-Ckycnnun.js.map +1 -0
- package/dist/chunks/routeros-DIBiqeDi.js +104 -0
- package/dist/chunks/routeros-DIBiqeDi.js.map +1 -0
- package/dist/chunks/rsl-C2V3vKIN.js +61 -0
- package/dist/chunks/rsl-C2V3vKIN.js.map +1 -0
- package/dist/chunks/ruby-C7c-uCk8.js +264 -0
- package/dist/chunks/ruby-C7c-uCk8.js.map +1 -0
- package/dist/chunks/ruleslanguage-IlptjHhp.js +28 -0
- package/dist/chunks/ruleslanguage-IlptjHhp.js.map +1 -0
- package/dist/chunks/rust-D-q21Dm6.js +184 -0
- package/dist/chunks/rust-D-q21Dm6.js.map +1 -0
- package/dist/chunks/sas-ObguUuPf.js +80 -0
- package/dist/chunks/sas-ObguUuPf.js.map +1 -0
- package/dist/chunks/scala-DVAYHay6.js +164 -0
- package/dist/chunks/scala-DVAYHay6.js.map +1 -0
- package/dist/chunks/scheme-DIcGbflN.js +106 -0
- package/dist/chunks/scheme-DIcGbflN.js.map +1 -0
- package/dist/chunks/scilab-ilneDJJS.js +47 -0
- package/dist/chunks/scilab-ilneDJJS.js.map +1 -0
- package/dist/chunks/scss-BP8UD0nN.js +157 -0
- package/dist/chunks/scss-BP8UD0nN.js.map +1 -0
- package/dist/chunks/shell-DBkgOY0Y.js +19 -0
- package/dist/chunks/shell-DBkgOY0Y.js.map +1 -0
- package/dist/chunks/smali-De20QX07.js +85 -0
- package/dist/chunks/smali-De20QX07.js.map +1 -0
- package/dist/chunks/smalltalk-DWMPo-qT.js +59 -0
- package/dist/chunks/smalltalk-DWMPo-qT.js.map +1 -0
- package/dist/chunks/sml-yOrArwoc.js +51 -0
- package/dist/chunks/sml-yOrArwoc.js.map +1 -0
- package/dist/chunks/sqf-BCN5uwk_.js +78 -0
- package/dist/chunks/sqf-BCN5uwk_.js.map +1 -0
- package/dist/chunks/sql-CmVzGP4w.js +120 -0
- package/dist/chunks/sql-CmVzGP4w.js.map +1 -0
- package/dist/chunks/stan-BSt7sG8M.js +142 -0
- package/dist/chunks/stan-BSt7sG8M.js.map +1 -0
- package/dist/chunks/stata-sbG438-7.js +35 -0
- package/dist/chunks/stata-sbG438-7.js.map +1 -0
- package/dist/chunks/step21-Cfi2MQDZ.js +55 -0
- package/dist/chunks/step21-Cfi2MQDZ.js.map +1 -0
- package/dist/chunks/stylus-CiBDFhBN.js +185 -0
- package/dist/chunks/stylus-CiBDFhBN.js.map +1 -0
- package/dist/chunks/subunit-DWjzVCiA.js +36 -0
- package/dist/chunks/subunit-DWjzVCiA.js.map +1 -0
- package/dist/chunks/swift-Qo_eIir5.js +577 -0
- package/dist/chunks/swift-Qo_eIir5.js.map +1 -0
- package/dist/chunks/taggerscript-BvuLYKHz.js +39 -0
- package/dist/chunks/taggerscript-BvuLYKHz.js.map +1 -0
- package/dist/chunks/tap-uMi8uF_X.js +32 -0
- package/dist/chunks/tap-uMi8uF_X.js.map +1 -0
- package/dist/chunks/tcl-DMPG3T59.js +46 -0
- package/dist/chunks/tcl-DMPG3T59.js.map +1 -0
- package/dist/chunks/thrift-DAA8HOe8.js +67 -0
- package/dist/chunks/thrift-DAA8HOe8.js.map +1 -0
- package/dist/chunks/tp-46SXlDZT.js +87 -0
- package/dist/chunks/tp-46SXlDZT.js.map +1 -0
- package/dist/chunks/twig-Cf_tZ_wH.js +84 -0
- package/dist/chunks/twig-Cf_tZ_wH.js.map +1 -0
- package/dist/chunks/typescript-Dc6pBLOZ.js +518 -0
- package/dist/chunks/typescript-Dc6pBLOZ.js.map +1 -0
- package/dist/chunks/vala-C2GHqzgV.js +41 -0
- package/dist/chunks/vala-C2GHqzgV.js.map +1 -0
- package/dist/chunks/vbnet-DgQ7B7yi.js +71 -0
- package/dist/chunks/vbnet-DgQ7B7yi.js.map +1 -0
- package/dist/chunks/vbscript-Bid2w6kd.js +43 -0
- package/dist/chunks/vbscript-Bid2w6kd.js.map +1 -0
- package/dist/chunks/vbscript-html-DznzJpE3.js +16 -0
- package/dist/chunks/vbscript-html-DznzJpE3.js.map +1 -0
- package/dist/chunks/verilog-Cfn8vMNy.js +58 -0
- package/dist/chunks/verilog-Cfn8vMNy.js.map +1 -0
- package/dist/chunks/vhdl-DjBWCsn1.js +48 -0
- package/dist/chunks/vhdl-DjBWCsn1.js.map +1 -0
- package/dist/chunks/vim-DtRU07HQ.js +56 -0
- package/dist/chunks/vim-DtRU07HQ.js.map +1 -0
- package/dist/chunks/wasm-CavVFuAK.js +65 -0
- package/dist/chunks/wasm-CavVFuAK.js.map +1 -0
- package/dist/chunks/wren-BKTRrWxW.js +210 -0
- package/dist/chunks/wren-BKTRrWxW.js.map +1 -0
- package/dist/chunks/x86asm-D3FT8ZrX.js +66 -0
- package/dist/chunks/x86asm-D3FT8ZrX.js.map +1 -0
- package/dist/chunks/xl-O8DviBwg.js +85 -0
- package/dist/chunks/xl-O8DviBwg.js.map +1 -0
- package/dist/chunks/xml-UTtAqziF.js +164 -0
- package/dist/chunks/xml-UTtAqziF.js.map +1 -0
- package/dist/chunks/xquery-Ybt8-gzE.js +149 -0
- package/dist/chunks/xquery-Ybt8-gzE.js.map +1 -0
- package/dist/chunks/yaml-DT7UV549.js +146 -0
- package/dist/chunks/yaml-DT7UV549.js.map +1 -0
- package/dist/chunks/zephir-Dsfqs5td.js +72 -0
- package/dist/chunks/zephir-Dsfqs5td.js.map +1 -0
- package/dist/github/activity.d.ts +49 -0
- package/dist/github/hash.d.ts +8 -0
- package/dist/github/index.d.ts +10 -0
- package/dist/github/tree.d.ts +26 -0
- package/dist/github/urls.d.ts +34 -0
- package/dist/github.js +253 -0
- package/dist/github.js.map +1 -0
- package/dist/k8s.js +6 -6
- package/dist/k8s.js.map +1 -1
- package/dist/kd/elements/code.d.ts +53 -0
- package/dist/kd/elements/markdown.d.ts +55 -0
- package/dist/kd/feed.d.ts +31 -0
- package/dist/kd/files/explorer.d.ts +88 -0
- package/dist/kd/files/file.d.ts +84 -0
- package/dist/kd/files/index.d.ts +6 -0
- package/dist/kd/files/static.d.ts +12 -0
- package/dist/kd/files/types.d.ts +51 -0
- package/dist/kd/highlight.d.ts +26 -0
- package/dist/kd/index.d.ts +8 -0
- package/dist/kd.js +5 -5
- package/dist/n8n.js +2 -2
- package/dist/openapi.js +4 -4
- package/dist/openapi.js.map +1 -1
- package/package.json +10 -3
- package/dist/chunks/element-ChNBLJ5X.js.map +0 -1
- package/dist/chunks/kd-BeZbw7cp.js +0 -1149
- package/dist/chunks/kd-BeZbw7cp.js.map +0 -1
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
2
|
+
import { KdElement } from '../element';
|
|
3
|
+
import { type Provider } from './types';
|
|
4
|
+
/** A link in the header: GitHub, code-server and the like. `icon` is an image URL or an emoji. */
|
|
5
|
+
export interface FileLink {
|
|
6
|
+
text?: string;
|
|
7
|
+
href: string;
|
|
8
|
+
icon?: string;
|
|
9
|
+
title?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Bases for a markdown file's relative links and images, as `kd-markdown` takes them. */
|
|
12
|
+
export interface MarkdownBase {
|
|
13
|
+
links?: string;
|
|
14
|
+
images?: string;
|
|
15
|
+
}
|
|
16
|
+
/** How a file is shown. */
|
|
17
|
+
export type FileKind = 'markdown' | 'code' | 'image' | 'binary';
|
|
18
|
+
/**
|
|
19
|
+
* The kind a type or, failing that, the path's extension names. `type` is a
|
|
20
|
+
* MIME type or a kind (`markdown`, `code`, `text`, `image`, `binary`).
|
|
21
|
+
* Undefined means "look at the content".
|
|
22
|
+
*/
|
|
23
|
+
export declare function fileKind(path: string, type?: string | null): FileKind | undefined;
|
|
24
|
+
/** Whether text decoded from a file looks binary: a NUL, or more than 10% control or undecodable characters. */
|
|
25
|
+
export declare function looksBinary(text: string): boolean;
|
|
26
|
+
/** A blob's text, or null when its bytes look binary. */
|
|
27
|
+
export declare function blobText(blob: Blob): Promise<string | null>;
|
|
28
|
+
/**
|
|
29
|
+
* One file: a header (the path as a breadcrumb, the size, `links`), then the
|
|
30
|
+
* file by its kind - markdown in `kd-markdown` (given `base`), text and code in
|
|
31
|
+
* `kd-code`, images inline, anything else as a summary. The kind comes from
|
|
32
|
+
* `type`, else the extension, else the content (a NUL byte or mostly control
|
|
33
|
+
* characters is binary). Give it `text` or `blob` (or an image `src`), or a
|
|
34
|
+
* `provider` and `path` and it reads the file itself.
|
|
35
|
+
*
|
|
36
|
+
* `<kd-file path="docs/README.md"></kd-file>` + `el.text = '# Hello'`
|
|
37
|
+
*/
|
|
38
|
+
export declare class KdFile extends KdElement {
|
|
39
|
+
#private;
|
|
40
|
+
static properties: {
|
|
41
|
+
path: {};
|
|
42
|
+
text: {};
|
|
43
|
+
blob: {
|
|
44
|
+
attribute: boolean;
|
|
45
|
+
};
|
|
46
|
+
src: {};
|
|
47
|
+
type: {};
|
|
48
|
+
size: {
|
|
49
|
+
type: NumberConstructor;
|
|
50
|
+
};
|
|
51
|
+
links: {
|
|
52
|
+
attribute: string;
|
|
53
|
+
converter: {
|
|
54
|
+
fromAttribute(value: string | null): unknown;
|
|
55
|
+
toAttribute(value: unknown): string;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
provider: {
|
|
59
|
+
attribute: boolean;
|
|
60
|
+
};
|
|
61
|
+
base: {
|
|
62
|
+
attribute: boolean;
|
|
63
|
+
};
|
|
64
|
+
truncated: {
|
|
65
|
+
type: BooleanConstructor;
|
|
66
|
+
};
|
|
67
|
+
empty: {};
|
|
68
|
+
};
|
|
69
|
+
static styles: import("lit").CSSResult[];
|
|
70
|
+
path: string | undefined;
|
|
71
|
+
text: string | undefined;
|
|
72
|
+
blob: Blob | undefined;
|
|
73
|
+
src: string | undefined;
|
|
74
|
+
type: string | undefined;
|
|
75
|
+
size: number | undefined;
|
|
76
|
+
links: FileLink[] | undefined;
|
|
77
|
+
provider: Provider | undefined;
|
|
78
|
+
base: MarkdownBase | undefined;
|
|
79
|
+
truncated: boolean | undefined;
|
|
80
|
+
empty: string | undefined;
|
|
81
|
+
protected willUpdate(changed: PropertyValues<this>): void;
|
|
82
|
+
disconnectedCallback(): void;
|
|
83
|
+
render(): TemplateResult<1>;
|
|
84
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import './explorer';
|
|
2
|
+
import './file';
|
|
3
|
+
export { KdFiles, type FileColumn, type FilesEventDetail } from './explorer';
|
|
4
|
+
export { KdFile, blobText, fileKind, looksBinary, type FileKind, type FileLink } from './file';
|
|
5
|
+
export { staticProvider, type StaticOptions } from './static';
|
|
6
|
+
export { basename, dirname, entryName, formatSize, modifiedTime, normalizePath, type Capabilities, type Entry, type FileContent, type Provider, } from './types';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Entry, type FileContent, type Provider } from './types';
|
|
2
|
+
export interface StaticOptions {
|
|
3
|
+
/** Reads a file, when the caller has a way to (a fetch, say). */
|
|
4
|
+
read?(path: string): Promise<FileContent>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* A provider over a flat list. Folders that are only implied by a path are
|
|
8
|
+
* made up; each folder's `size`, every numeric stat and the newest `modified`
|
|
9
|
+
* are rolled up from everything below it (a folder with nothing listed below
|
|
10
|
+
* it keeps whatever it was given). Later entries for a path win.
|
|
11
|
+
*/
|
|
12
|
+
export declare function staticProvider(entries: readonly Entry[] | null | undefined, options?: StaticOptions): Provider;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Cell } from '../cell';
|
|
2
|
+
/** One file or folder. Paths are `/`-separated with no leading slash; the root is `''`. */
|
|
3
|
+
export interface Entry {
|
|
4
|
+
path: string;
|
|
5
|
+
/** Defaults to the last segment of `path`. */
|
|
6
|
+
name?: string;
|
|
7
|
+
type: 'file' | 'dir';
|
|
8
|
+
/** Bytes. A folder's is the sum of what is below it. */
|
|
9
|
+
size?: number;
|
|
10
|
+
/** An ISO time or epoch milliseconds. A folder's is its newest. */
|
|
11
|
+
modified?: string | number;
|
|
12
|
+
/** Where the entry opens elsewhere (GitHub, say), shown beside its name. */
|
|
13
|
+
href?: string;
|
|
14
|
+
/** Numbers a column can show; a folder's are the sums of what is below it. */
|
|
15
|
+
stats?: Record<string, number>;
|
|
16
|
+
/** Anything else a column can show, as a kd cell. Not rolled up. */
|
|
17
|
+
cells?: Record<string, Cell>;
|
|
18
|
+
/** A folder the provider could not list (deeper than it loaded, say). */
|
|
19
|
+
partial?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** What `read` resolves to: text, or a blob with its type. */
|
|
22
|
+
export interface FileContent {
|
|
23
|
+
text?: string;
|
|
24
|
+
blob?: Blob;
|
|
25
|
+
/** A MIME type or a kind (`markdown`, `code`, `text`, `image`, `binary`). */
|
|
26
|
+
type?: string;
|
|
27
|
+
size?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface Capabilities {
|
|
30
|
+
read?: boolean;
|
|
31
|
+
write?: boolean;
|
|
32
|
+
rename?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface Provider {
|
|
35
|
+
/** The entries directly in a folder; rejects for a folder that does not exist. */
|
|
36
|
+
list(path: string): Promise<Entry[]>;
|
|
37
|
+
read?(path: string): Promise<FileContent>;
|
|
38
|
+
capabilities?: Capabilities;
|
|
39
|
+
}
|
|
40
|
+
/** A path with no leading, trailing or doubled slashes. */
|
|
41
|
+
export declare function normalizePath(path: string | null | undefined): string;
|
|
42
|
+
/** The folder a path is in; the root's parent is the root. */
|
|
43
|
+
export declare function dirname(path: string): string;
|
|
44
|
+
/** The last segment of a path. */
|
|
45
|
+
export declare function basename(path: string): string;
|
|
46
|
+
/** An entry's display name. */
|
|
47
|
+
export declare function entryName(entry: Entry): string;
|
|
48
|
+
/** `1536` -> `1.5 KiB`. */
|
|
49
|
+
export declare function formatSize(bytes: number | null | undefined): string;
|
|
50
|
+
/** A `modified` value as epoch milliseconds; NaN when unreadable. */
|
|
51
|
+
export declare function modifiedTime(value: string | number | null | undefined): number;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Every language highlight.js has a chunk for, by file name (`yaml`, `javascript`, …). */
|
|
2
|
+
export declare function languages(): string[];
|
|
3
|
+
/**
|
|
4
|
+
* The highlight.js language for a language name or alias (`js`, `yml`,
|
|
5
|
+
* `language-sh`), or undefined when there is none. `plaintext` means a text
|
|
6
|
+
* file: shown plain, nothing to load.
|
|
7
|
+
*/
|
|
8
|
+
export declare function languageOf(name: string | null | undefined): string | undefined;
|
|
9
|
+
/** The highlight.js language for a file name or path (`Dockerfile`, `src/app.ts`, `.env`), or undefined. */
|
|
10
|
+
export declare function languageOfFile(filename: string | null | undefined): string | undefined;
|
|
11
|
+
export interface Highlighted {
|
|
12
|
+
/** The highlight.js language used. */
|
|
13
|
+
language: string;
|
|
14
|
+
/** Its display name, such as `YAML`. */
|
|
15
|
+
name: string;
|
|
16
|
+
/** highlight.js's HTML for each line: its own escaped text and `<span class="hljs-…">` only. */
|
|
17
|
+
lines: string[];
|
|
18
|
+
}
|
|
19
|
+
/** Splits highlight.js HTML into lines; null when it holds any other markup. */
|
|
20
|
+
export declare function splitLines(markup: string): string[] | null;
|
|
21
|
+
/**
|
|
22
|
+
* Highlights `text` (lines split on `\n`) as `language`, a name, alias or
|
|
23
|
+
* highlight.js language. Null when the language is unknown, is plain text, or
|
|
24
|
+
* its chunk cannot load.
|
|
25
|
+
*/
|
|
26
|
+
export declare function highlight(text: string, language: string): Promise<Highlighted | null>;
|
package/dist/kd/index.d.ts
CHANGED
|
@@ -3,9 +3,11 @@ export { define, VERSION } from './define';
|
|
|
3
3
|
export { KdElement, base, json, themedAncestor } from './element';
|
|
4
4
|
export { kdjson, registerHelpers } from './helpers';
|
|
5
5
|
import './elements/bar';
|
|
6
|
+
import './elements/code';
|
|
6
7
|
import './elements/data';
|
|
7
8
|
import './elements/groups';
|
|
8
9
|
import './elements/link';
|
|
10
|
+
import './elements/markdown';
|
|
9
11
|
import './elements/mask';
|
|
10
12
|
import './elements/meter';
|
|
11
13
|
import './elements/pill';
|
|
@@ -18,9 +20,11 @@ export { renderCell, cellStyles, isEmpty, type Cell, type PillCell, type HrefCel
|
|
|
18
20
|
export { renderIcon, safeHref, tone, tones, type Tone } from './parts';
|
|
19
21
|
export { toYaml, yamlLines, quote, type YamlKind, type YamlLine, type YamlToken } from './yaml';
|
|
20
22
|
export { KdBar, type BarData } from './elements/bar';
|
|
23
|
+
export { KdCode, highlighter, lineSet } from './elements/code';
|
|
21
24
|
export { KdData } from './elements/data';
|
|
22
25
|
export { KdGroups, jsonValue, type GroupsData } from './elements/groups';
|
|
23
26
|
export { KdLink, linkUrl, type LinkData, type Vars } from './elements/link';
|
|
27
|
+
export { KdMarkdown, rebase, slug, type MarkdownBase } from './elements/markdown';
|
|
24
28
|
export { KdMask } from './elements/mask';
|
|
25
29
|
export { KdMeter, type MeterData, type MeterMark } from './elements/meter';
|
|
26
30
|
export { KdPill } from './elements/pill';
|
|
@@ -30,3 +34,7 @@ export { KdTable, type TableColumn, type TableData } from './elements/table';
|
|
|
30
34
|
export { KdTabs } from './elements/tabs';
|
|
31
35
|
export { KdTile } from './elements/tile';
|
|
32
36
|
export * from './scene';
|
|
37
|
+
export { feed, variable as contextVariable, type FeedContext, type FeedMap } from './feed';
|
|
38
|
+
export type { Highlighted } from './highlight';
|
|
39
|
+
import './files';
|
|
40
|
+
export * from './files';
|
package/dist/kd.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as e,
|
|
2
|
-
import { n as o, t as s } from "./chunks/define-
|
|
3
|
-
import {
|
|
4
|
-
import { _ as
|
|
5
|
-
export {
|
|
1
|
+
import { d as e, f as t, i as n, n as r, r as i, t as a } from "./chunks/element-CaN9ZVoe.js";
|
|
2
|
+
import { n as o, t as s } from "./chunks/define-DqUpowD9.js";
|
|
3
|
+
import { A as c, B as l, C as u, D as d, E as f, F as p, G as m, H as h, I as g, K as _, L as v, M as y, N as b, O as x, P as S, R as C, S as w, T, U as E, V as D, W as O, _ as k, a as A, b as j, c as M, d as N, f as P, g as F, h as I, i as L, j as R, k as z, l as B, m as V, n as H, o as U, p as W, r as G, s as K, t as q, u as J, v as Y, w as X, x as Z, y as Q, z as $ } from "./chunks/kd-B0BcpOG_.js";
|
|
4
|
+
import { _ as ee, a as te, c as ne, d as re, f as ie, g as ae, h as oe, i as se, l as ce, m as le, n as ue, o as de, p as fe, r as pe, s as me, t as he, u as ge } from "./chunks/scene-CUr0fSXC.js";
|
|
5
|
+
export { c as KdBar, d as KdCode, D as KdData, a as KdElement, q as KdFile, A as KdFiles, T as KdGroups, p as KdLink, w as KdMarkdown, Z as KdMask, j as KdMeter, S as KdPill, Q as KdSheet, Y as KdSteps, k as KdTable, F as KdTabs, I as KdTile, s as VERSION, e as applyTheme, r as base, K as basename, H as blobText, R as cellStyles, V as contextVariable, o as define, M as dirname, B as entryName, W as feed, G as fileKind, he as fitPanel, ue as focusPanel, t as followTheme, J as formatSize, pe as gridHeight, se as groups, x as highlighter, te as intervalSeconds, y as isEmpty, i as json, f as jsonValue, m as kdjson, z as lineSet, g as linkUrl, L as looksBinary, N as modifiedTime, P as normalizePath, de as pageWindow, h as quote, u as rebase, me as refresh, ne as refreshIntervals, _ as registerHelpers, b as renderCell, v as renderIcon, C as safeHref, ce as scene, ge as setRefresh, re as setTimeRange, ie as setVariable, fe as setVariables, X as slug, le as snapInterval, U as staticProvider, n as themedAncestor, oe as timeRange, E as toYaml, $ as tone, l as tones, ae as variable, ee as variableValue, O as yamlLines };
|
package/dist/n8n.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "./chunks/define-
|
|
1
|
+
import { t as e } from "./chunks/define-DqUpowD9.js";
|
|
2
2
|
import { _ as t, a as n, c as r, d as i, f as a, h as o, i as s, n as c, o as l, s as u, u as d } from "./chunks/scene-CUr0fSXC.js";
|
|
3
3
|
//#region src/n8n/config.ts
|
|
4
4
|
var f = "1.41.3";
|
|
@@ -279,7 +279,7 @@ var P = [
|
|
|
279
279
|
].join("\n"), F = (e) => `https://cdn.jsdelivr.net/npm/@n8n/chat@${e}/dist/chat.bundle.es.js`, I = (e) => `https://cdn.jsdelivr.net/npm/@n8n/chat@${e}/dist/style.css`, L = "[data-testid=\"data-testid dashboard controls\"]", R = 900;
|
|
280
280
|
function z(t) {
|
|
281
281
|
let n = t.head.querySelector("style[data-n8n-chat-tile]");
|
|
282
|
-
n?.dataset.n8nChatTile !== "0.0.
|
|
282
|
+
n?.dataset.n8nChatTile !== "0.0.6" && (n || (n = t.createElement("style"), t.head.append(n)), n.dataset.n8nChatTile = e, n.textContent = P);
|
|
283
283
|
}
|
|
284
284
|
function B(e, t) {
|
|
285
285
|
let n = I(t), r = e.head.querySelector("link[data-n8n-chat-style]");
|
package/dist/openapi.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as e,
|
|
2
|
-
import { n as o, t as s } from "./chunks/define-
|
|
1
|
+
import { c as e, d as t, n, o as r, t as i, u as a } from "./chunks/element-CaN9ZVoe.js";
|
|
2
|
+
import { n as o, t as s } from "./chunks/define-DqUpowD9.js";
|
|
3
3
|
//#region src/openapi/model.ts
|
|
4
4
|
var c = /* @__PURE__ */ "$ref.type.title.description.format.pattern.default.enum.const.example.examples.minimum.maximum.exclusiveMinimum.exclusiveMaximum.multipleOf.minLength.maxLength.minItems.maxItems.uniqueItems.minProperties.maxProperties.nullable.readOnly.writeOnly.deprecated.externalDocs.required.properties.items.additionalProperties.allOf.anyOf.oneOf.not.x-kubernetes-int-or-string.x-kubernetes-preserve-unknown-fields.x-kubernetes-embedded-resource.x-kubernetes-list-type.x-kubernetes-list-map-keys.x-kubernetes-map-type.x-kubernetes-validations.x-kubernetes-patch-strategy.x-kubernetes-patch-merge-key.x-kubernetes-unions.x-kubernetes-group-version-kind".split("."), l = new Set(c), u = (e) => typeof e == "object" && !!e && !Array.isArray(e), d = "#/components/schemas/";
|
|
5
5
|
function f(e) {
|
|
@@ -268,7 +268,7 @@ var O = [
|
|
|
268
268
|
#e;
|
|
269
269
|
#t = /* @__PURE__ */ new Map();
|
|
270
270
|
#n = 0;
|
|
271
|
-
static styles = [n,
|
|
271
|
+
static styles = [n, a`
|
|
272
272
|
:host {
|
|
273
273
|
font-size: 13px;
|
|
274
274
|
}
|
|
@@ -499,6 +499,6 @@ var O = [
|
|
|
499
499
|
};
|
|
500
500
|
o("kd-schema", M);
|
|
501
501
|
//#endregion
|
|
502
|
-
export { c as KEYWORDS, M as KdSchema, s as VERSION,
|
|
502
|
+
export { c as KEYWORDS, M as KdSchema, s as VERSION, t as applyTheme, E as behaviours, D as brief, T as constraints, S as find, x as normalize, f as shortName };
|
|
503
503
|
|
|
504
504
|
//# sourceMappingURL=openapi.js.map
|
package/dist/openapi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","names":["nothing","b","b","i","A","KdElement","applyTheme","define","VERSION","KEYWORDS","KNOWN","isObject","value","COMPONENTS","shortName","name","ref","pointer","at","document","part","key","refName","resolve","base","refs","parts","schema","seen","target","member","inner","r","merge","out","under","over","props","displayType","t","ap","Node","#document","#parent","parent","raw","#refs","role","required","keywords","other","up","#cycle","#properties","#items","items","#values","rootSchema","root","crdSchema","schemas","matches","k","spec","crd","versions","version","v","normalize","find","node","path","f","json","isEmptyObject","constraints","exMin","exMax","min","max","open","close","behaviours","listType","mapType","strategy","unions","named","u","brief","s","c","COMBINATORS","words","clip","text","safeUrl","url","KdSchema","changed","#fetch","#tree","#open","ticket","#fetching","response","omit","fields","#field","set","depth","event","head","#tags","body","#body","#isOpen","#toggle","b$1","description","#extras","cut","#each","tags","extras","label","branches","x","b$2","example","docs","rules"],"sources":["../src/openapi/model.ts","../src/openapi/describe.ts","../src/openapi/schema.ts"],"sourcesContent":["// The schema model: an OpenAPI v3 / JSON Schema document and a root, turned\n// into a tree of plain-data nodes the viewers (and later a data viewer and an\n// editor) draw from. No DOM here.\n\n/** A raw schema object, as it appears in the document. */\nexport type Schema = Record<string, unknown>;\n\n/** An OpenAPI v3 document, or any JSON document that holds schemas. */\nexport interface OpenApiDocument {\n components?: { schemas?: Record<string, Schema> };\n [key: string]: unknown;\n}\n\n/** One `x-kubernetes-validations` entry: a CEL rule. */\nexport interface Validation {\n rule: string;\n message?: string;\n messageExpression?: string;\n reason?: string;\n fieldPath?: string;\n optionalOldSelf?: boolean;\n}\n\n/** One `x-kubernetes-group-version-kind` entry. */\nexport interface GroupVersionKind {\n group: string;\n version: string;\n kind: string;\n}\n\n/** One `x-kubernetes-unions` entry. */\nexport interface Union {\n discriminator?: string;\n 'fields-to-discriminateBy'?: Record<string, string>;\n}\n\n/**\n * Every keyword the model knows, typed. Values are the document's own, after\n * `$ref` resolution and the `allOf` merge; nothing is rewritten. Kubernetes'\n * `x-kubernetes-*` extensions are OpenAPI extensions, so they are known here\n * like any other keyword.\n */\nexport interface Keywords {\n $ref?: string;\n type?: string | string[];\n title?: string;\n description?: string;\n format?: string;\n pattern?: string;\n default?: unknown;\n enum?: unknown[];\n const?: unknown;\n example?: unknown;\n examples?: unknown[];\n minimum?: number;\n maximum?: number;\n /** A boolean in OpenAPI 3.0, a number in JSON Schema 2019+. */\n exclusiveMinimum?: boolean | number;\n exclusiveMaximum?: boolean | number;\n multipleOf?: number;\n minLength?: number;\n maxLength?: number;\n minItems?: number;\n maxItems?: number;\n uniqueItems?: boolean;\n minProperties?: number;\n maxProperties?: number;\n nullable?: boolean;\n readOnly?: boolean;\n writeOnly?: boolean;\n deprecated?: boolean;\n externalDocs?: { url?: string; description?: string };\n required?: string[];\n properties?: Record<string, Schema>;\n items?: Schema | Schema[];\n additionalProperties?: boolean | Schema;\n allOf?: Schema[];\n anyOf?: Schema[];\n oneOf?: Schema[];\n not?: Schema;\n 'x-kubernetes-int-or-string'?: boolean;\n 'x-kubernetes-preserve-unknown-fields'?: boolean;\n 'x-kubernetes-embedded-resource'?: boolean;\n 'x-kubernetes-list-type'?: 'atomic' | 'set' | 'map' | string;\n 'x-kubernetes-list-map-keys'?: string[];\n 'x-kubernetes-map-type'?: 'atomic' | 'granular' | string;\n 'x-kubernetes-validations'?: Validation[];\n 'x-kubernetes-patch-strategy'?: string;\n 'x-kubernetes-patch-merge-key'?: string;\n 'x-kubernetes-unions'?: Union[];\n 'x-kubernetes-group-version-kind'?: GroupVersionKind[];\n}\n\n/** The names of every known keyword, in display order. */\nexport const KEYWORDS: readonly (keyof Keywords)[] = [\n '$ref', 'type', 'title', 'description', 'format', 'pattern', 'default', 'enum', 'const', 'example', 'examples',\n 'minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum', 'multipleOf', 'minLength', 'maxLength', 'minItems',\n 'maxItems', 'uniqueItems', 'minProperties', 'maxProperties', 'nullable', 'readOnly', 'writeOnly', 'deprecated',\n 'externalDocs', 'required', 'properties', 'items', 'additionalProperties', 'allOf', 'anyOf', 'oneOf', 'not',\n 'x-kubernetes-int-or-string', 'x-kubernetes-preserve-unknown-fields', 'x-kubernetes-embedded-resource',\n 'x-kubernetes-list-type', 'x-kubernetes-list-map-keys', 'x-kubernetes-map-type', 'x-kubernetes-validations',\n 'x-kubernetes-patch-strategy', 'x-kubernetes-patch-merge-key', 'x-kubernetes-unions',\n 'x-kubernetes-group-version-kind',\n];\nconst KNOWN = new Set<string>(KEYWORDS);\n\n/**\n * A node of the schema tree: a field, the root, or the item/value schema of a\n * list/map.\n *\n * Children (`properties`, `items`, `values`, `fields`) are computed when first\n * read and then kept, so normalizing a root costs one node and a viewer pays\n * only for what it opens. `parent` and `cycle` are getters, so a node\n * serialises as plain data without looping.\n *\n * Recursion is cut, never depth-limited: a node whose type is already open\n * above it has `cycle` set to that ancestor and no children.\n */\nexport interface SchemaNode {\n /** `root` (what normalize returns), `field` (a property), `item` (an array's items), `value` (a map's values). */\n readonly role: 'root' | 'field' | 'item' | 'value';\n /** The property name; `''` for the root, an item or a value. */\n readonly name: string;\n /** The path as kubectl explain spells it (`spec.template.spec.containers.name`); items and values share their owner's. */\n readonly path: string;\n /** Listed in the owning object's `required`. */\n readonly required: boolean;\n /** The display type in kubectl explain's spelling: `string`, `Object`, `[]Container`, `map[string]string`, `int-or-string`, `any`. */\n readonly type: string;\n /** The short name of the type it was referenced as (`PodSpec` for `io.k8s.api.core.v1.PodSpec`). */\n readonly typeName?: string;\n /** The full name of the schema `$ref`/`allOf` brought in (`io.k8s.api.core.v1.PodSpec`). */\n readonly ref?: string;\n /** The schema after `$ref` resolution and the `allOf` merge; the node's own keywords win. */\n readonly schema: Schema;\n /** The known keywords of `schema`. */\n readonly keywords: Keywords;\n /** Every keyword of `schema` the model does not know, raw. */\n readonly other: Record<string, unknown>;\n /** The node it belongs to; the root has none. */\n readonly parent: SchemaNode | undefined;\n /** When this node's type is open in an ancestor, that ancestor. Its children are listed there, not here. */\n readonly cycle: SchemaNode | undefined;\n /** The object's own properties, in document order. */\n readonly properties: readonly SchemaNode[];\n /** An array's item schema. */\n readonly items: SchemaNode | undefined;\n /** A map's value schema (an `additionalProperties` schema). */\n readonly values: SchemaNode | undefined;\n /** The children kubectl explain lists: the properties, else the items' fields, else the values' fields. */\n readonly fields: readonly SchemaNode[];\n /** Whether `fields` is non-empty. */\n readonly expandable: boolean;\n}\n\n/** A root: a component name (`X` or `#/components/schemas/X`, or a unique `.X` suffix), any `#/` pointer, a schema, a CRD version, or a CRD. */\nexport type Root = string | Schema;\n\nconst isObject = (value: unknown): value is Schema =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst COMPONENTS = '#/components/schemas/';\n\n/** The short name of a component, as kubectl explain shows it: `io.k8s.api.core.v1.PodSpec` -> `PodSpec`. */\nexport function shortName(ref: string): string {\n const name = ref.startsWith(COMPONENTS) ? ref.slice(COMPONENTS.length) : ref.slice(ref.lastIndexOf('/') + 1);\n return name.slice(name.lastIndexOf('.') + 1);\n}\n\nfunction pointer(document: unknown, ref: string): unknown {\n if (!ref.startsWith('#')) return undefined;\n let at: unknown = document;\n for (const part of ref.slice(1).split('/').slice(1)) {\n const key = decodeURIComponent(part).replace(/~1/g, '/').replace(/~0/g, '~');\n if (!isObject(at) && !Array.isArray(at)) return undefined;\n at = (at as Record<string, unknown>)[key];\n }\n return at;\n}\n\nfunction refName(ref: string): string {\n return ref.startsWith(COMPONENTS) ? ref.slice(COMPONENTS.length) : ref.replace(/^#\\/?/, '');\n}\n\ninterface Resolved {\n schema: Schema;\n /** Every schema name merged in, outermost first. */\n refs: string[];\n}\n\n// A {$ref} node becomes the schema it points at, its own keywords on top; every\n// allOf member is resolved and merged under the node's own keywords. Properties\n// that two members both define are merged lazily, as an allOf of the two.\nfunction resolve(document: unknown, schema: Schema, seen: string[] = []): Resolved {\n let base: Schema = {};\n const refs: string[] = [];\n const parts: Schema[] = [];\n const ref = schema.$ref;\n if (typeof ref === 'string') {\n const name = refName(ref);\n if (!seen.includes(name)) {\n refs.push(name);\n const target = pointer(document, ref);\n if (isObject(target)) parts.push(target);\n }\n }\n if (Array.isArray(schema.allOf)) for (const member of schema.allOf) if (isObject(member)) parts.push(member);\n if (!parts.length) return { schema, refs };\n for (const part of parts) {\n const inner = resolve(document, part, [...seen, ...refs]);\n refs.push(...inner.refs.filter((r) => !refs.includes(r)));\n base = merge(base, inner.schema);\n }\n return { schema: merge(base, schema), refs };\n}\n\nfunction merge(under: Schema, over: Schema): Schema {\n const out: Schema = { ...under, ...over };\n if (isObject(under.properties) && isObject(over.properties)) {\n const props: Record<string, unknown> = { ...under.properties };\n for (const [key, value] of Object.entries(over.properties)) {\n props[key] = key in props && isObject(value) && isObject(props[key]) ? { allOf: [props[key], value] } : value;\n }\n out.properties = props;\n }\n if (Array.isArray(under.required) && Array.isArray(over.required)) {\n out.required = [...new Set([...under.required, ...over.required])];\n }\n return out;\n}\n\n// A type that contains itself only through arrays and maps stops at its name.\nfunction displayType(document: unknown, schema: Schema, refs: string[], seen: string[] = []): string {\n if (refs.some((r) => seen.includes(r))) return shortName(refs[0]);\n const t = schema.type;\n if (t === 'array') {\n const inner = resolve(document, isObject(schema.items) ? schema.items : {});\n return '[]' + displayType(document, inner.schema, inner.refs, [...seen, ...refs]);\n }\n const ap = schema.additionalProperties;\n if ((t === 'object' || t === undefined) && isObject(ap) && !isObject(schema.properties)) {\n const inner = resolve(document, ap);\n return 'map[string]' + displayType(document, inner.schema, inner.refs, [...seen, ...refs]);\n }\n if (refs.length) return shortName(refs[0]);\n if (schema['x-kubernetes-int-or-string']) return 'int-or-string';\n if (t === 'object') return 'Object';\n if (typeof t === 'string') return t;\n if (Array.isArray(t)) return t.join(' | ');\n if (isObject(schema.properties)) return 'Object';\n return 'any';\n}\n\nclass Node implements SchemaNode {\n readonly role: SchemaNode['role'];\n readonly name: string;\n readonly path: string;\n readonly required: boolean;\n readonly type: string;\n readonly typeName?: string;\n readonly ref?: string;\n readonly schema: Schema;\n readonly keywords: Keywords;\n readonly other: Record<string, unknown>;\n\n readonly #document: unknown;\n readonly #parent: Node | undefined;\n readonly #refs: string[];\n readonly #cycle: Node | undefined;\n #properties?: Node[];\n #items?: Node | null;\n #values?: Node | null;\n\n constructor(document: unknown, raw: Schema, role: SchemaNode['role'], name: string, parent: Node | undefined, required: boolean) {\n this.#document = document;\n this.#parent = parent;\n const { schema, refs } = resolve(document, raw);\n this.#refs = refs;\n this.role = role;\n this.name = name;\n this.path = role === 'field' && parent?.path ? `${parent.path}.${name}` : role === 'field' ? name : (parent?.path ?? '');\n this.required = required;\n this.schema = schema;\n if (refs.length) {\n this.ref = refs[0];\n this.typeName = shortName(refs[0]);\n }\n this.type = displayType(document, schema, refs);\n const keywords: Record<string, unknown> = {};\n const other: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(schema)) (KNOWN.has(key) ? keywords : other)[key] = value;\n this.keywords = keywords as Keywords;\n this.other = other;\n for (let up = parent; up && !this.#cycle; up = up.#parent) {\n if (up.#refs.some((r) => refs.includes(r))) this.#cycle = up;\n }\n }\n\n get parent(): SchemaNode | undefined {\n return this.#parent;\n }\n\n get cycle(): SchemaNode | undefined {\n return this.#cycle;\n }\n\n get properties(): readonly SchemaNode[] {\n if (!this.#properties) {\n const props = this.schema.properties;\n const required = Array.isArray(this.schema.required) ? this.schema.required : [];\n this.#properties =\n this.#cycle || !isObject(props)\n ? []\n : Object.entries(props).map(\n ([key, value]) => new Node(this.#document, isObject(value) ? value : {}, 'field', key, this, required.includes(key)),\n );\n }\n return this.#properties;\n }\n\n get items(): SchemaNode | undefined {\n if (this.#items === undefined) {\n const items = this.schema.items;\n this.#items = !this.#cycle && this.schema.type === 'array' && isObject(items)\n ? new Node(this.#document, items, 'item', '', this, false)\n : null;\n }\n return this.#items ?? undefined;\n }\n\n get values(): SchemaNode | undefined {\n if (this.#values === undefined) {\n const ap = this.schema.additionalProperties;\n this.#values = !this.#cycle && isObject(ap) ? new Node(this.#document, ap, 'value', '', this, false) : null;\n }\n return this.#values ?? undefined;\n }\n\n get fields(): readonly SchemaNode[] {\n if (this.properties.length) return this.properties;\n return this.items?.fields ?? this.values?.fields ?? [];\n }\n\n get expandable(): boolean {\n return this.fields.length > 0;\n }\n\n toJSON(): Record<string, unknown> {\n const { role, name, path, required, type, typeName, ref, keywords, other } = this;\n return { role, name, path, required, type, typeName, ref, keywords, other, cycle: this.#cycle?.path };\n }\n}\n\nfunction rootSchema(document: unknown, root: Root | undefined): Schema {\n if (root === undefined) {\n if (isObject(document) && document.kind === 'CustomResourceDefinition') return crdSchema(document);\n return isObject(document) ? document : {};\n }\n if (typeof root === 'string') {\n if (root.startsWith('#')) return { $ref: root };\n const schemas = isObject(document) && isObject(document.components) ? document.components.schemas : undefined;\n if (isObject(schemas)) {\n if (root in schemas) return { $ref: COMPONENTS + root.replace(/~/g, '~0').replace(/\\//g, '~1') };\n const matches = Object.keys(schemas).filter((k) => k.endsWith('.' + root));\n if (matches.length === 1) return { $ref: COMPONENTS + matches[0] };\n }\n return {};\n }\n if (root.kind === 'CustomResourceDefinition') return crdSchema(root);\n if (isObject(root.schema) && isObject(root.schema.openAPIV3Schema)) return root.schema.openAPIV3Schema;\n if (isObject(root.openAPIV3Schema)) return root.openAPIV3Schema;\n return root;\n}\n\n// A CRD's storage version, or its first.\nfunction crdSchema(crd: Schema): Schema {\n const spec = isObject(crd.spec) ? crd.spec : {};\n const versions = Array.isArray(spec.versions) ? spec.versions.filter(isObject) : [];\n const version = versions.find((v) => v.storage) ?? versions[0];\n const schema = version && isObject(version.schema) ? version.schema.openAPIV3Schema : undefined;\n return isObject(schema) ? schema : {};\n}\n\n/**\n * The schema tree of `root` in `document`. Only the root is built; every other\n * node is built when its parent's children are first read.\n *\n * @param document an OpenAPI v3 document (its `components.schemas` resolve `$ref`), a CRD, or a bare schema\n * @param root a component name (`io.k8s.api.apps.v1.Deployment`, `#/components/schemas/...`, or a unique suffix\n * such as `apps.v1.Deployment`), a `#/` pointer, a schema object, a CRD version (`{schema: {openAPIV3Schema}}`)\n * or its `openAPIV3Schema`; omitted, the document itself (a CRD: its storage version)\n */\nexport function normalize(document: unknown, root?: Root): SchemaNode {\n const schema = rootSchema(document, root);\n return new Node(document, schema, 'root', '', undefined, false);\n}\n\n/** The node at a dotted field path below `node` (`spec.template.spec.containers.name`), or undefined. */\nexport function find(node: SchemaNode, path: string): SchemaNode | undefined {\n let at: SchemaNode | undefined = node;\n for (const name of path.split('.').filter(Boolean)) {\n at = at?.fields.find((f) => f.name === name);\n }\n return at;\n}\n","// Words for a schema node: the limits shown beside its type, and how\n// Kubernetes treats it. Pure functions over the model, shared by every viewer.\n\nimport { shortName, type Keywords, type Schema } from './model';\n\n/** A Kubernetes behaviour of a field: a short tag and the why behind it. */\nexport interface Behaviour {\n label: string;\n why: string;\n}\n\nconst json = (value: unknown): string => JSON.stringify(value) ?? String(value);\n\nconst isEmptyObject = (value: unknown): boolean =>\n typeof value === 'object' && value !== null && !Array.isArray(value) && Object.keys(value).length === 0;\n\n/**\n * The value limits, shown beside the type: `default`, `one of`, `format`,\n * `pattern`, `range`, `multiple of`, `length`, `items`, `unique items`, `keys`,\n * `nullable`. An empty-object default (Kubernetes puts `default: {}` on every\n * `allOf` wrapper) says nothing and is left out.\n */\nexport function constraints(k: Keywords): string[] {\n const out: string[] = [];\n if (k.default !== undefined && k.default !== null && !isEmptyObject(k.default)) out.push(`default ${json(k.default)}`);\n if (Array.isArray(k.enum)) out.push(`one of ${k.enum.map(json).join(' | ')}`);\n if (k.const !== undefined) out.push(`always ${json(k.const)}`);\n if (k.format) out.push(`format ${k.format}`);\n if (k.pattern) out.push(`pattern ${k.pattern}`);\n const exMin = typeof k.exclusiveMinimum === 'number' ? k.exclusiveMinimum : undefined;\n const exMax = typeof k.exclusiveMaximum === 'number' ? k.exclusiveMaximum : undefined;\n const min = exMin ?? k.minimum;\n const max = exMax ?? k.maximum;\n if (min != null || max != null) {\n const open = k.exclusiveMinimum === true || exMin !== undefined ? '(' : '';\n const close = k.exclusiveMaximum === true || exMax !== undefined ? ')' : '';\n out.push(`range ${open}${min ?? ''}..${max ?? ''}${close}`);\n }\n if (k.multipleOf != null) out.push(`multiple of ${k.multipleOf}`);\n if (k.minLength != null || k.maxLength != null) out.push(`length ${k.minLength ?? 0}..${k.maxLength ?? ''}`);\n if (k.minItems != null || k.maxItems != null) out.push(`items ${k.minItems ?? 0}..${k.maxItems ?? ''}`);\n if (k.uniqueItems) out.push('unique items');\n if (k.minProperties != null || k.maxProperties != null) out.push(`keys ${k.minProperties ?? 0}..${k.maxProperties ?? ''}`);\n if (k.nullable) out.push('nullable');\n if (k.readOnly) out.push('read-only');\n if (k.writeOnly) out.push('write-only');\n if (k.deprecated) out.push('deprecated');\n return out;\n}\n\n/**\n * How Kubernetes treats the field - server-side apply, strategic merge,\n * pruning, embedded objects - as tags with the why on hover.\n */\nexport function behaviours(k: Keywords): Behaviour[] {\n const out: Behaviour[] = [];\n const listType = k['x-kubernetes-list-type'];\n if (listType === 'map') {\n out.push({\n label: `keyed by ${(k['x-kubernetes-list-map-keys'] ?? []).join(', ')}`,\n why: 'list-type map: apply merges items that share these keys',\n });\n } else if (listType === 'set') {\n out.push({ label: 'set', why: 'list-type set: unique scalars, apply merges them' });\n } else if (listType) {\n out.push({ label: 'atomic list', why: 'list-type atomic: apply replaces the whole list' });\n }\n const mapType = k['x-kubernetes-map-type'];\n if (mapType === 'atomic') {\n out.push({ label: 'atomic', why: 'map-type atomic: apply replaces the whole object, never merges its fields' });\n } else if (mapType) {\n out.push({ label: 'granular', why: 'map-type granular: apply merges its fields one by one' });\n }\n const strategy = k['x-kubernetes-patch-strategy'];\n if (strategy) {\n const key = k['x-kubernetes-patch-merge-key'];\n out.push({\n label: `patch ${strategy.replace(/,/g, ' + ')}${key ? ` by ${key}` : ''}`,\n why: `strategic merge patch (kubectl apply without --server-side): ${strategy}${key ? `, items matched on ${key}` : ''}`,\n });\n }\n const unions = k['x-kubernetes-unions'];\n if (Array.isArray(unions) && unions.length) {\n const named = unions.map((u) => u.discriminator).filter(Boolean);\n out.push({ label: 'union', why: `set one of its fields${named.length ? `, named by ${named.join(', ')}` : ''}` });\n }\n if (k['x-kubernetes-int-or-string']) {\n out.push({ label: 'int or string', why: 'int-or-string: an integer or a string, e.g. 8080 or \"http\"' });\n }\n if (k['x-kubernetes-preserve-unknown-fields']) {\n out.push({ label: 'any fields', why: 'preserve-unknown-fields: fields the schema does not list are kept, not pruned' });\n }\n if (k['x-kubernetes-embedded-resource']) {\n out.push({\n label: 'embedded object',\n why: 'embedded-resource: a whole object - apiVersion, kind and metadata are validated',\n });\n }\n if (typeof k.additionalProperties === 'boolean') {\n out.push(\n k.additionalProperties\n ? { label: 'any keys', why: 'additionalProperties: keys beyond the listed ones are allowed' }\n : { label: 'no other keys', why: 'additionalProperties false: only the listed keys are allowed' },\n );\n }\n return out;\n}\n\n/** A combinator branch (`anyOf`, `oneOf`, `allOf`, `not`) in a few words. */\nexport function brief(schema: unknown): string {\n if (typeof schema !== 'object' || schema === null || Array.isArray(schema)) return json(schema);\n const s = schema as Schema & Keywords;\n if (typeof s.$ref === 'string') return shortName(s.$ref);\n if (s.type) {\n const c = constraints(s);\n return `${Array.isArray(s.type) ? s.type.join(' | ') : s.type}${c.length ? ` (${c.join(', ')})` : ''}`;\n }\n if (Array.isArray(s.required)) return `requires ${s.required.join(', ')}`;\n if (s.properties && typeof s.properties === 'object') return `fields ${Object.keys(s.properties).join(', ')}`;\n if (s.not !== undefined) return `not ${brief(s.not)}`;\n if (Array.isArray(s.enum)) return `one of ${s.enum.map(json).join(' | ')}`;\n return json(s).slice(0, 120);\n}\n","import { css, html, nothing, type PropertyValues, type TemplateResult } from 'lit';\n\nimport { define } from '../kd/define';\nimport { KdElement, base } from '../kd/element';\nimport { behaviours, brief, constraints } from './describe';\nimport { normalize, type Root, type SchemaNode } from './model';\n\nconst COMBINATORS = [\n ['anyOf', 'any of'],\n ['oneOf', 'exactly one of'],\n ['allOf', 'all of'],\n] as const;\n\nconst words = (value: string | undefined): string[] => (value ?? '').split(/\\s+/).filter(Boolean);\nconst clip = (value: unknown, max = 300): string => {\n const text = JSON.stringify(value) ?? String(value);\n return text.length > max ? `${text.slice(0, max)}…` : text;\n};\nconst safeUrl = (url: unknown): string | undefined =>\n typeof url === 'string' && /^https?:\\/\\//i.test(url) ? url : undefined;\n\n/**\n * An OpenAPI v3 / JSON Schema viewer, written the way the YAML is: a field per\n * line with its type, constraints and Kubernetes behaviours beside it, a\n * required marker, and the description, rules and fields when opened. A\n * subtree is rendered only when it is opened.\n *\n * Data in: `document` (an OpenAPI document, a CRD or a schema) and `root` (see\n * `normalize`) as properties, or `src`, a URL returning the document.\n *\n * Attributes: `root`, `src`, `expand` (top-level fields open at first, default\n * `spec status`), `omit` (top-level fields left out, e.g. `apiVersion kind metadata`).\n */\nexport class KdSchema extends KdElement {\n static override properties = {\n document: { attribute: false },\n root: { attribute: 'root' },\n src: { attribute: 'src' },\n expand: { attribute: 'expand' },\n omit: { attribute: 'omit' },\n error: { state: true },\n };\n\n declare document: unknown;\n declare root: Root | undefined;\n declare src: string | undefined;\n declare expand: string | undefined;\n declare omit: string | undefined;\n declare error: string | undefined;\n\n #tree: SchemaNode | undefined;\n #open = new Map<SchemaNode, boolean>();\n #fetching = 0;\n\n static override styles = [\n base,\n css`\n :host {\n font-size: 13px;\n }\n .none {\n color: var(--kd-text-2, inherit);\n font-style: italic;\n }\n .f {\n margin-left: 16px;\n }\n .tree > .f {\n margin-left: 0;\n }\n summary,\n .leaf {\n display: flex;\n align-items: baseline;\n gap: 8px;\n padding: 2px 0;\n min-width: 0;\n }\n summary {\n cursor: pointer;\n list-style: none;\n }\n summary::-webkit-details-marker {\n display: none;\n }\n summary::before,\n .leaf::before {\n content: '';\n width: 10px;\n flex: none;\n color: var(--kd-text-2, inherit);\n }\n summary::before {\n content: '▸';\n transition: transform 0.1s;\n }\n details[open] > summary::before {\n transform: rotate(90deg);\n }\n summary:focus-visible {\n outline: 1px solid var(--kd-primary, currentColor);\n outline-offset: 1px;\n }\n .k,\n .t,\n .c,\n .mono {\n font-family: var(--kd-font-mono, monospace);\n }\n .k {\n font-weight: 500;\n }\n .rq {\n color: var(--kd-error, inherit);\n font-family: var(--kd-font-mono, monospace);\n margin-left: -6px;\n }\n .t {\n font-size: 12px;\n color: var(--kd-link, inherit);\n white-space: nowrap;\n }\n .kt {\n font-size: 11px;\n line-height: 1.4;\n padding: 0 6px;\n border: 1px solid var(--kd-border-strong, currentColor);\n border-radius: var(--kd-radius, 2px);\n color: var(--kd-primary, inherit);\n white-space: nowrap;\n cursor: help;\n }\n .c {\n font-size: 11px;\n color: var(--kd-text-2, inherit);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 55%;\n flex: 0 1 auto;\n min-width: 0;\n }\n .ds {\n font-size: 12px;\n color: var(--kd-text-2, inherit);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n flex: 1;\n }\n details[open] > summary .ds {\n visibility: hidden;\n }\n .fb {\n margin: 2px 0 6px 18px;\n padding: 4px 10px;\n border-left: 2px solid var(--kd-border, currentColor);\n font-size: 12px;\n }\n .fb > div {\n margin: 2px 0;\n }\n .desc {\n white-space: pre-line;\n overflow-wrap: anywhere;\n }\n .dim,\n .sec {\n color: var(--kd-text-2, inherit);\n }\n .sec {\n margin: 10px 0 2px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n .mono {\n overflow-wrap: anywhere;\n }\n .tags {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 6px;\n }\n .tags .c {\n max-width: none;\n white-space: normal;\n }\n a {\n color: var(--kd-link, inherit);\n }\n `,\n ];\n\n protected override willUpdate(changed: PropertyValues<this>): void {\n if (changed.has('src') && this.src) void this.#fetch(this.src);\n if (changed.has('document') || changed.has('root')) {\n this.#tree = this.document === undefined ? undefined : normalize(this.document, this.root);\n this.#open = new Map();\n }\n }\n\n async #fetch(url: string): Promise<void> {\n const ticket = ++this.#fetching;\n try {\n const response = await fetch(url, { headers: { accept: 'application/json' } });\n if (!response.ok) throw new Error(`${response.status} ${response.statusText}`.trim());\n const document = await response.json();\n if (ticket !== this.#fetching) return;\n this.error = undefined;\n this.document = document;\n } catch (e) {\n if (ticket === this.#fetching) this.error = `Could not load the schema: ${(e as Error).message ?? e}`;\n }\n }\n\n override render(): TemplateResult {\n if (this.error) return html`<div class=\"none\">${this.error}</div>`;\n const omit = new Set(words(this.omit));\n const fields = (this.#tree?.fields ?? []).filter((f) => !omit.has(f.name));\n if (!fields.length) return html`<div class=\"none\">No schema</div>`;\n return html`<div class=\"tree\" part=\"tree\">${fields.map((f) => this.#field(f, 0))}</div>`;\n }\n\n #isOpen(node: SchemaNode, depth: number): boolean {\n const set = this.#open.get(node);\n if (set !== undefined) return set;\n return depth === 0 && words(this.expand ?? 'spec status').includes(node.name);\n }\n\n #toggle(node: SchemaNode, event: Event): void {\n const open = (event.currentTarget as HTMLDetailsElement).open;\n if (open === this.#open.get(node)) return;\n this.#open.set(node, open);\n this.requestUpdate();\n }\n\n #field(node: SchemaNode, depth: number): TemplateResult {\n const k = node.keywords;\n const c = constraints(k);\n const head = html`<span class=\"k\">${node.name}</span>${node.required\n ? html`<span class=\"rq\" title=\"required\">*</span>`\n : nothing}<span class=\"t\">${node.type}</span>${this.#tags(node)}${c.length\n ? html`<span class=\"c\" title=${c.join('\\n')}>${c.join(' · ')}</span>`\n : nothing}<span class=\"ds\">${(k.description ?? '').split('\\n')[0]}</span>`;\n const body = this.#body(node);\n if (!body.length && !node.expandable) return html`<div class=\"f leaf\" title=${node.path}>${head}</div>`;\n const open = this.#isOpen(node, depth);\n return html`<details class=\"f\" title=${node.path} ?open=${open} @toggle=${(e: Event) => this.#toggle(node, e)}>\n <summary>${head}</summary>\n ${open && body.length ? html`<div class=\"fb\">${body}</div>` : nothing}\n ${open && node.expandable ? html`<div class=\"fc\">${node.fields.map((f) => this.#field(f, depth + 1))}</div>` : nothing}\n </details>`;\n }\n\n #tags(node: SchemaNode): TemplateResult[] {\n return behaviours(node.keywords).map((b) => html`<span class=\"kt\" title=${b.why}>${b.label}</span>`);\n }\n\n // Everything shown under an opened field besides its fields. Built for every\n // visible field (cheap: one node and its item/value schema), because a field\n // with nothing to open is drawn as a plain line.\n #body(node: SchemaNode): TemplateResult[] {\n const out: TemplateResult[] = [];\n const description = node.keywords.description;\n if (description) out.push(html`<div class=\"desc\">${description}</div>`);\n out.push(...this.#extras(node));\n const cut = node.cycle ?? node.items?.cycle ?? node.values?.cycle;\n if (cut && cut.fields.length) {\n out.push(html`<div class=\"dim\">\n the same type as ${cut.path ? html`<span class=\"mono\">${cut.path}</span>` : 'the root'}, whose fields are listed there\n </div>`);\n }\n if (node.items) out.push(...this.#each('each item', node.items));\n if (node.values) out.push(...this.#each('each value', node.values));\n return out;\n }\n\n // What applies to each item of a list or each value of a map, besides its fields.\n #each(label: string, node: SchemaNode): TemplateResult[] {\n const c = constraints(node.keywords);\n const tags = this.#tags(node);\n const extras = this.#extras(node);\n if (!c.length && !tags.length && !extras.length) return [];\n return [\n html`<div class=\"sec\">${label}</div>`,\n ...(c.length || tags.length\n ? [html`<div class=\"tags\">${tags}${c.length ? html`<span class=\"c\">${c.join(' · ')}</span>` : nothing}</div>`]\n : []),\n ...extras,\n ];\n }\n\n // Combinators, title, examples, docs, CEL rules, and every unknown keyword.\n #extras(node: SchemaNode): TemplateResult[] {\n const k = node.keywords;\n const out: TemplateResult[] = [];\n for (const [key, label] of COMBINATORS) {\n const branches = k[key];\n if (!Array.isArray(branches) || !branches.length) continue;\n // Kubernetes wraps every $ref in a one-member allOf; that is the type, not a rule.\n if (key === 'allOf' && branches.length === 1 && Object.keys(branches[0]).every((x) => x === '$ref')) continue;\n out.push(html`<div>\n <span class=\"dim\">${label}:</span>\n ${branches.map((b, i) => html`${i ? html` <span class=\"dim\">|</span> ` : nothing}${brief(b)}`)}\n </div>`);\n }\n if (k.not !== undefined) out.push(html`<div><span class=\"dim\">must not be:</span> ${brief(k.not)}</div>`);\n if (k.title) out.push(html`<div><span class=\"dim\">title</span> ${k.title}</div>`);\n if (k.example !== undefined) {\n out.push(html`<div><span class=\"dim\">example</span> <span class=\"mono\">${clip(k.example)}</span></div>`);\n }\n if (Array.isArray(k.examples)) {\n for (const example of k.examples) {\n out.push(html`<div><span class=\"dim\">example</span> <span class=\"mono\">${clip(example)}</span></div>`);\n }\n }\n // Only an http(s) URL becomes a link; anything else is shown as text.\n const docs = k.externalDocs;\n const url = safeUrl(docs?.url);\n if (docs && (docs.url || docs.description)) {\n out.push(html`<div>\n <span class=\"dim\">docs</span>\n ${url\n ? html`<a href=${url} target=\"_blank\" rel=\"noopener\">${docs.description ?? url}</a>`\n : html`${docs.description ?? ''} <span class=\"mono\">${docs.url ?? ''}</span>`}\n </div>`);\n }\n const rules = k['x-kubernetes-validations'];\n if (Array.isArray(rules) && rules.length) {\n out.push(html`<div class=\"sec\">validation</div>`);\n for (const r of rules) {\n out.push(html`<div class=\"cel\">\n <span class=\"mono\">${r.rule ?? ''}</span>\n ${r.message\n ? html`<span class=\"dim\">- ${r.message}</span>`\n : r.messageExpression\n ? html`<span class=\"dim\">- message from</span> <span class=\"mono\">${r.messageExpression}</span>`\n : nothing}\n ${r.reason ? html`<span class=\"dim\">(${r.reason})</span>` : nothing}\n ${r.fieldPath ? html`<span class=\"dim\">at</span> <span class=\"mono\">${r.fieldPath}</span>` : nothing}\n ${r.optionalOldSelf ? html`<span class=\"dim\">(checked on create too)</span>` : nothing}\n </div>`);\n }\n }\n const other = Object.entries(node.other);\n if (other.length) {\n out.push(html`<div class=\"sec\">other</div>`);\n for (const [key, value] of other) {\n out.push(html`<div><span class=\"mono\">${key}</span>: <span class=\"mono\">${clip(value)}</span></div>`);\n }\n }\n return out;\n }\n}\n\ndefine('kd-schema', KdSchema);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kd-schema': KdSchema;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openapi.js","names":["nothing","b","b","applyTheme","A","KdElement","i","define","VERSION","KEYWORDS","KNOWN","isObject","value","COMPONENTS","shortName","name","ref","pointer","at","document","part","key","refName","resolve","base","refs","parts","schema","seen","target","member","inner","r","merge","out","under","over","props","displayType","t","ap","Node","#document","#parent","parent","raw","#refs","role","required","keywords","other","up","#cycle","#properties","#items","items","#values","rootSchema","root","crdSchema","schemas","matches","k","spec","crd","versions","version","v","normalize","find","node","path","f","json","isEmptyObject","constraints","exMin","exMax","min","max","open","close","behaviours","listType","mapType","strategy","unions","named","u","brief","s","c","COMBINATORS","words","clip","text","safeUrl","url","KdSchema","changed","#fetch","#tree","#open","ticket","#fetching","response","omit","fields","#field","set","depth","event","head","#tags","body","#body","#isOpen","#toggle","b$1","description","#extras","cut","#each","tags","extras","label","branches","x","b$2","example","docs","rules"],"sources":["../src/openapi/model.ts","../src/openapi/describe.ts","../src/openapi/schema.ts"],"sourcesContent":["// The schema model: an OpenAPI v3 / JSON Schema document and a root, turned\n// into a tree of plain-data nodes the viewers (and later a data viewer and an\n// editor) draw from. No DOM here.\n\n/** A raw schema object, as it appears in the document. */\nexport type Schema = Record<string, unknown>;\n\n/** An OpenAPI v3 document, or any JSON document that holds schemas. */\nexport interface OpenApiDocument {\n components?: { schemas?: Record<string, Schema> };\n [key: string]: unknown;\n}\n\n/** One `x-kubernetes-validations` entry: a CEL rule. */\nexport interface Validation {\n rule: string;\n message?: string;\n messageExpression?: string;\n reason?: string;\n fieldPath?: string;\n optionalOldSelf?: boolean;\n}\n\n/** One `x-kubernetes-group-version-kind` entry. */\nexport interface GroupVersionKind {\n group: string;\n version: string;\n kind: string;\n}\n\n/** One `x-kubernetes-unions` entry. */\nexport interface Union {\n discriminator?: string;\n 'fields-to-discriminateBy'?: Record<string, string>;\n}\n\n/**\n * Every keyword the model knows, typed. Values are the document's own, after\n * `$ref` resolution and the `allOf` merge; nothing is rewritten. Kubernetes'\n * `x-kubernetes-*` extensions are OpenAPI extensions, so they are known here\n * like any other keyword.\n */\nexport interface Keywords {\n $ref?: string;\n type?: string | string[];\n title?: string;\n description?: string;\n format?: string;\n pattern?: string;\n default?: unknown;\n enum?: unknown[];\n const?: unknown;\n example?: unknown;\n examples?: unknown[];\n minimum?: number;\n maximum?: number;\n /** A boolean in OpenAPI 3.0, a number in JSON Schema 2019+. */\n exclusiveMinimum?: boolean | number;\n exclusiveMaximum?: boolean | number;\n multipleOf?: number;\n minLength?: number;\n maxLength?: number;\n minItems?: number;\n maxItems?: number;\n uniqueItems?: boolean;\n minProperties?: number;\n maxProperties?: number;\n nullable?: boolean;\n readOnly?: boolean;\n writeOnly?: boolean;\n deprecated?: boolean;\n externalDocs?: { url?: string; description?: string };\n required?: string[];\n properties?: Record<string, Schema>;\n items?: Schema | Schema[];\n additionalProperties?: boolean | Schema;\n allOf?: Schema[];\n anyOf?: Schema[];\n oneOf?: Schema[];\n not?: Schema;\n 'x-kubernetes-int-or-string'?: boolean;\n 'x-kubernetes-preserve-unknown-fields'?: boolean;\n 'x-kubernetes-embedded-resource'?: boolean;\n 'x-kubernetes-list-type'?: 'atomic' | 'set' | 'map' | string;\n 'x-kubernetes-list-map-keys'?: string[];\n 'x-kubernetes-map-type'?: 'atomic' | 'granular' | string;\n 'x-kubernetes-validations'?: Validation[];\n 'x-kubernetes-patch-strategy'?: string;\n 'x-kubernetes-patch-merge-key'?: string;\n 'x-kubernetes-unions'?: Union[];\n 'x-kubernetes-group-version-kind'?: GroupVersionKind[];\n}\n\n/** The names of every known keyword, in display order. */\nexport const KEYWORDS: readonly (keyof Keywords)[] = [\n '$ref', 'type', 'title', 'description', 'format', 'pattern', 'default', 'enum', 'const', 'example', 'examples',\n 'minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum', 'multipleOf', 'minLength', 'maxLength', 'minItems',\n 'maxItems', 'uniqueItems', 'minProperties', 'maxProperties', 'nullable', 'readOnly', 'writeOnly', 'deprecated',\n 'externalDocs', 'required', 'properties', 'items', 'additionalProperties', 'allOf', 'anyOf', 'oneOf', 'not',\n 'x-kubernetes-int-or-string', 'x-kubernetes-preserve-unknown-fields', 'x-kubernetes-embedded-resource',\n 'x-kubernetes-list-type', 'x-kubernetes-list-map-keys', 'x-kubernetes-map-type', 'x-kubernetes-validations',\n 'x-kubernetes-patch-strategy', 'x-kubernetes-patch-merge-key', 'x-kubernetes-unions',\n 'x-kubernetes-group-version-kind',\n];\nconst KNOWN = new Set<string>(KEYWORDS);\n\n/**\n * A node of the schema tree: a field, the root, or the item/value schema of a\n * list/map.\n *\n * Children (`properties`, `items`, `values`, `fields`) are computed when first\n * read and then kept, so normalizing a root costs one node and a viewer pays\n * only for what it opens. `parent` and `cycle` are getters, so a node\n * serialises as plain data without looping.\n *\n * Recursion is cut, never depth-limited: a node whose type is already open\n * above it has `cycle` set to that ancestor and no children.\n */\nexport interface SchemaNode {\n /** `root` (what normalize returns), `field` (a property), `item` (an array's items), `value` (a map's values). */\n readonly role: 'root' | 'field' | 'item' | 'value';\n /** The property name; `''` for the root, an item or a value. */\n readonly name: string;\n /** The path as kubectl explain spells it (`spec.template.spec.containers.name`); items and values share their owner's. */\n readonly path: string;\n /** Listed in the owning object's `required`. */\n readonly required: boolean;\n /** The display type in kubectl explain's spelling: `string`, `Object`, `[]Container`, `map[string]string`, `int-or-string`, `any`. */\n readonly type: string;\n /** The short name of the type it was referenced as (`PodSpec` for `io.k8s.api.core.v1.PodSpec`). */\n readonly typeName?: string;\n /** The full name of the schema `$ref`/`allOf` brought in (`io.k8s.api.core.v1.PodSpec`). */\n readonly ref?: string;\n /** The schema after `$ref` resolution and the `allOf` merge; the node's own keywords win. */\n readonly schema: Schema;\n /** The known keywords of `schema`. */\n readonly keywords: Keywords;\n /** Every keyword of `schema` the model does not know, raw. */\n readonly other: Record<string, unknown>;\n /** The node it belongs to; the root has none. */\n readonly parent: SchemaNode | undefined;\n /** When this node's type is open in an ancestor, that ancestor. Its children are listed there, not here. */\n readonly cycle: SchemaNode | undefined;\n /** The object's own properties, in document order. */\n readonly properties: readonly SchemaNode[];\n /** An array's item schema. */\n readonly items: SchemaNode | undefined;\n /** A map's value schema (an `additionalProperties` schema). */\n readonly values: SchemaNode | undefined;\n /** The children kubectl explain lists: the properties, else the items' fields, else the values' fields. */\n readonly fields: readonly SchemaNode[];\n /** Whether `fields` is non-empty. */\n readonly expandable: boolean;\n}\n\n/** A root: a component name (`X` or `#/components/schemas/X`, or a unique `.X` suffix), any `#/` pointer, a schema, a CRD version, or a CRD. */\nexport type Root = string | Schema;\n\nconst isObject = (value: unknown): value is Schema =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst COMPONENTS = '#/components/schemas/';\n\n/** The short name of a component, as kubectl explain shows it: `io.k8s.api.core.v1.PodSpec` -> `PodSpec`. */\nexport function shortName(ref: string): string {\n const name = ref.startsWith(COMPONENTS) ? ref.slice(COMPONENTS.length) : ref.slice(ref.lastIndexOf('/') + 1);\n return name.slice(name.lastIndexOf('.') + 1);\n}\n\nfunction pointer(document: unknown, ref: string): unknown {\n if (!ref.startsWith('#')) return undefined;\n let at: unknown = document;\n for (const part of ref.slice(1).split('/').slice(1)) {\n const key = decodeURIComponent(part).replace(/~1/g, '/').replace(/~0/g, '~');\n if (!isObject(at) && !Array.isArray(at)) return undefined;\n at = (at as Record<string, unknown>)[key];\n }\n return at;\n}\n\nfunction refName(ref: string): string {\n return ref.startsWith(COMPONENTS) ? ref.slice(COMPONENTS.length) : ref.replace(/^#\\/?/, '');\n}\n\ninterface Resolved {\n schema: Schema;\n /** Every schema name merged in, outermost first. */\n refs: string[];\n}\n\n// A {$ref} node becomes the schema it points at, its own keywords on top; every\n// allOf member is resolved and merged under the node's own keywords. Properties\n// that two members both define are merged lazily, as an allOf of the two.\nfunction resolve(document: unknown, schema: Schema, seen: string[] = []): Resolved {\n let base: Schema = {};\n const refs: string[] = [];\n const parts: Schema[] = [];\n const ref = schema.$ref;\n if (typeof ref === 'string') {\n const name = refName(ref);\n if (!seen.includes(name)) {\n refs.push(name);\n const target = pointer(document, ref);\n if (isObject(target)) parts.push(target);\n }\n }\n if (Array.isArray(schema.allOf)) for (const member of schema.allOf) if (isObject(member)) parts.push(member);\n if (!parts.length) return { schema, refs };\n for (const part of parts) {\n const inner = resolve(document, part, [...seen, ...refs]);\n refs.push(...inner.refs.filter((r) => !refs.includes(r)));\n base = merge(base, inner.schema);\n }\n return { schema: merge(base, schema), refs };\n}\n\nfunction merge(under: Schema, over: Schema): Schema {\n const out: Schema = { ...under, ...over };\n if (isObject(under.properties) && isObject(over.properties)) {\n const props: Record<string, unknown> = { ...under.properties };\n for (const [key, value] of Object.entries(over.properties)) {\n props[key] = key in props && isObject(value) && isObject(props[key]) ? { allOf: [props[key], value] } : value;\n }\n out.properties = props;\n }\n if (Array.isArray(under.required) && Array.isArray(over.required)) {\n out.required = [...new Set([...under.required, ...over.required])];\n }\n return out;\n}\n\n// A type that contains itself only through arrays and maps stops at its name.\nfunction displayType(document: unknown, schema: Schema, refs: string[], seen: string[] = []): string {\n if (refs.some((r) => seen.includes(r))) return shortName(refs[0]);\n const t = schema.type;\n if (t === 'array') {\n const inner = resolve(document, isObject(schema.items) ? schema.items : {});\n return '[]' + displayType(document, inner.schema, inner.refs, [...seen, ...refs]);\n }\n const ap = schema.additionalProperties;\n if ((t === 'object' || t === undefined) && isObject(ap) && !isObject(schema.properties)) {\n const inner = resolve(document, ap);\n return 'map[string]' + displayType(document, inner.schema, inner.refs, [...seen, ...refs]);\n }\n if (refs.length) return shortName(refs[0]);\n if (schema['x-kubernetes-int-or-string']) return 'int-or-string';\n if (t === 'object') return 'Object';\n if (typeof t === 'string') return t;\n if (Array.isArray(t)) return t.join(' | ');\n if (isObject(schema.properties)) return 'Object';\n return 'any';\n}\n\nclass Node implements SchemaNode {\n readonly role: SchemaNode['role'];\n readonly name: string;\n readonly path: string;\n readonly required: boolean;\n readonly type: string;\n readonly typeName?: string;\n readonly ref?: string;\n readonly schema: Schema;\n readonly keywords: Keywords;\n readonly other: Record<string, unknown>;\n\n readonly #document: unknown;\n readonly #parent: Node | undefined;\n readonly #refs: string[];\n readonly #cycle: Node | undefined;\n #properties?: Node[];\n #items?: Node | null;\n #values?: Node | null;\n\n constructor(document: unknown, raw: Schema, role: SchemaNode['role'], name: string, parent: Node | undefined, required: boolean) {\n this.#document = document;\n this.#parent = parent;\n const { schema, refs } = resolve(document, raw);\n this.#refs = refs;\n this.role = role;\n this.name = name;\n this.path = role === 'field' && parent?.path ? `${parent.path}.${name}` : role === 'field' ? name : (parent?.path ?? '');\n this.required = required;\n this.schema = schema;\n if (refs.length) {\n this.ref = refs[0];\n this.typeName = shortName(refs[0]);\n }\n this.type = displayType(document, schema, refs);\n const keywords: Record<string, unknown> = {};\n const other: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(schema)) (KNOWN.has(key) ? keywords : other)[key] = value;\n this.keywords = keywords as Keywords;\n this.other = other;\n for (let up = parent; up && !this.#cycle; up = up.#parent) {\n if (up.#refs.some((r) => refs.includes(r))) this.#cycle = up;\n }\n }\n\n get parent(): SchemaNode | undefined {\n return this.#parent;\n }\n\n get cycle(): SchemaNode | undefined {\n return this.#cycle;\n }\n\n get properties(): readonly SchemaNode[] {\n if (!this.#properties) {\n const props = this.schema.properties;\n const required = Array.isArray(this.schema.required) ? this.schema.required : [];\n this.#properties =\n this.#cycle || !isObject(props)\n ? []\n : Object.entries(props).map(\n ([key, value]) => new Node(this.#document, isObject(value) ? value : {}, 'field', key, this, required.includes(key)),\n );\n }\n return this.#properties;\n }\n\n get items(): SchemaNode | undefined {\n if (this.#items === undefined) {\n const items = this.schema.items;\n this.#items = !this.#cycle && this.schema.type === 'array' && isObject(items)\n ? new Node(this.#document, items, 'item', '', this, false)\n : null;\n }\n return this.#items ?? undefined;\n }\n\n get values(): SchemaNode | undefined {\n if (this.#values === undefined) {\n const ap = this.schema.additionalProperties;\n this.#values = !this.#cycle && isObject(ap) ? new Node(this.#document, ap, 'value', '', this, false) : null;\n }\n return this.#values ?? undefined;\n }\n\n get fields(): readonly SchemaNode[] {\n if (this.properties.length) return this.properties;\n return this.items?.fields ?? this.values?.fields ?? [];\n }\n\n get expandable(): boolean {\n return this.fields.length > 0;\n }\n\n toJSON(): Record<string, unknown> {\n const { role, name, path, required, type, typeName, ref, keywords, other } = this;\n return { role, name, path, required, type, typeName, ref, keywords, other, cycle: this.#cycle?.path };\n }\n}\n\nfunction rootSchema(document: unknown, root: Root | undefined): Schema {\n if (root === undefined) {\n if (isObject(document) && document.kind === 'CustomResourceDefinition') return crdSchema(document);\n return isObject(document) ? document : {};\n }\n if (typeof root === 'string') {\n if (root.startsWith('#')) return { $ref: root };\n const schemas = isObject(document) && isObject(document.components) ? document.components.schemas : undefined;\n if (isObject(schemas)) {\n if (root in schemas) return { $ref: COMPONENTS + root.replace(/~/g, '~0').replace(/\\//g, '~1') };\n const matches = Object.keys(schemas).filter((k) => k.endsWith('.' + root));\n if (matches.length === 1) return { $ref: COMPONENTS + matches[0] };\n }\n return {};\n }\n if (root.kind === 'CustomResourceDefinition') return crdSchema(root);\n if (isObject(root.schema) && isObject(root.schema.openAPIV3Schema)) return root.schema.openAPIV3Schema;\n if (isObject(root.openAPIV3Schema)) return root.openAPIV3Schema;\n return root;\n}\n\n// A CRD's storage version, or its first.\nfunction crdSchema(crd: Schema): Schema {\n const spec = isObject(crd.spec) ? crd.spec : {};\n const versions = Array.isArray(spec.versions) ? spec.versions.filter(isObject) : [];\n const version = versions.find((v) => v.storage) ?? versions[0];\n const schema = version && isObject(version.schema) ? version.schema.openAPIV3Schema : undefined;\n return isObject(schema) ? schema : {};\n}\n\n/**\n * The schema tree of `root` in `document`. Only the root is built; every other\n * node is built when its parent's children are first read.\n *\n * @param document an OpenAPI v3 document (its `components.schemas` resolve `$ref`), a CRD, or a bare schema\n * @param root a component name (`io.k8s.api.apps.v1.Deployment`, `#/components/schemas/...`, or a unique suffix\n * such as `apps.v1.Deployment`), a `#/` pointer, a schema object, a CRD version (`{schema: {openAPIV3Schema}}`)\n * or its `openAPIV3Schema`; omitted, the document itself (a CRD: its storage version)\n */\nexport function normalize(document: unknown, root?: Root): SchemaNode {\n const schema = rootSchema(document, root);\n return new Node(document, schema, 'root', '', undefined, false);\n}\n\n/** The node at a dotted field path below `node` (`spec.template.spec.containers.name`), or undefined. */\nexport function find(node: SchemaNode, path: string): SchemaNode | undefined {\n let at: SchemaNode | undefined = node;\n for (const name of path.split('.').filter(Boolean)) {\n at = at?.fields.find((f) => f.name === name);\n }\n return at;\n}\n","// Words for a schema node: the limits shown beside its type, and how\n// Kubernetes treats it. Pure functions over the model, shared by every viewer.\n\nimport { shortName, type Keywords, type Schema } from './model';\n\n/** A Kubernetes behaviour of a field: a short tag and the why behind it. */\nexport interface Behaviour {\n label: string;\n why: string;\n}\n\nconst json = (value: unknown): string => JSON.stringify(value) ?? String(value);\n\nconst isEmptyObject = (value: unknown): boolean =>\n typeof value === 'object' && value !== null && !Array.isArray(value) && Object.keys(value).length === 0;\n\n/**\n * The value limits, shown beside the type: `default`, `one of`, `format`,\n * `pattern`, `range`, `multiple of`, `length`, `items`, `unique items`, `keys`,\n * `nullable`. An empty-object default (Kubernetes puts `default: {}` on every\n * `allOf` wrapper) says nothing and is left out.\n */\nexport function constraints(k: Keywords): string[] {\n const out: string[] = [];\n if (k.default !== undefined && k.default !== null && !isEmptyObject(k.default)) out.push(`default ${json(k.default)}`);\n if (Array.isArray(k.enum)) out.push(`one of ${k.enum.map(json).join(' | ')}`);\n if (k.const !== undefined) out.push(`always ${json(k.const)}`);\n if (k.format) out.push(`format ${k.format}`);\n if (k.pattern) out.push(`pattern ${k.pattern}`);\n const exMin = typeof k.exclusiveMinimum === 'number' ? k.exclusiveMinimum : undefined;\n const exMax = typeof k.exclusiveMaximum === 'number' ? k.exclusiveMaximum : undefined;\n const min = exMin ?? k.minimum;\n const max = exMax ?? k.maximum;\n if (min != null || max != null) {\n const open = k.exclusiveMinimum === true || exMin !== undefined ? '(' : '';\n const close = k.exclusiveMaximum === true || exMax !== undefined ? ')' : '';\n out.push(`range ${open}${min ?? ''}..${max ?? ''}${close}`);\n }\n if (k.multipleOf != null) out.push(`multiple of ${k.multipleOf}`);\n if (k.minLength != null || k.maxLength != null) out.push(`length ${k.minLength ?? 0}..${k.maxLength ?? ''}`);\n if (k.minItems != null || k.maxItems != null) out.push(`items ${k.minItems ?? 0}..${k.maxItems ?? ''}`);\n if (k.uniqueItems) out.push('unique items');\n if (k.minProperties != null || k.maxProperties != null) out.push(`keys ${k.minProperties ?? 0}..${k.maxProperties ?? ''}`);\n if (k.nullable) out.push('nullable');\n if (k.readOnly) out.push('read-only');\n if (k.writeOnly) out.push('write-only');\n if (k.deprecated) out.push('deprecated');\n return out;\n}\n\n/**\n * How Kubernetes treats the field - server-side apply, strategic merge,\n * pruning, embedded objects - as tags with the why on hover.\n */\nexport function behaviours(k: Keywords): Behaviour[] {\n const out: Behaviour[] = [];\n const listType = k['x-kubernetes-list-type'];\n if (listType === 'map') {\n out.push({\n label: `keyed by ${(k['x-kubernetes-list-map-keys'] ?? []).join(', ')}`,\n why: 'list-type map: apply merges items that share these keys',\n });\n } else if (listType === 'set') {\n out.push({ label: 'set', why: 'list-type set: unique scalars, apply merges them' });\n } else if (listType) {\n out.push({ label: 'atomic list', why: 'list-type atomic: apply replaces the whole list' });\n }\n const mapType = k['x-kubernetes-map-type'];\n if (mapType === 'atomic') {\n out.push({ label: 'atomic', why: 'map-type atomic: apply replaces the whole object, never merges its fields' });\n } else if (mapType) {\n out.push({ label: 'granular', why: 'map-type granular: apply merges its fields one by one' });\n }\n const strategy = k['x-kubernetes-patch-strategy'];\n if (strategy) {\n const key = k['x-kubernetes-patch-merge-key'];\n out.push({\n label: `patch ${strategy.replace(/,/g, ' + ')}${key ? ` by ${key}` : ''}`,\n why: `strategic merge patch (kubectl apply without --server-side): ${strategy}${key ? `, items matched on ${key}` : ''}`,\n });\n }\n const unions = k['x-kubernetes-unions'];\n if (Array.isArray(unions) && unions.length) {\n const named = unions.map((u) => u.discriminator).filter(Boolean);\n out.push({ label: 'union', why: `set one of its fields${named.length ? `, named by ${named.join(', ')}` : ''}` });\n }\n if (k['x-kubernetes-int-or-string']) {\n out.push({ label: 'int or string', why: 'int-or-string: an integer or a string, e.g. 8080 or \"http\"' });\n }\n if (k['x-kubernetes-preserve-unknown-fields']) {\n out.push({ label: 'any fields', why: 'preserve-unknown-fields: fields the schema does not list are kept, not pruned' });\n }\n if (k['x-kubernetes-embedded-resource']) {\n out.push({\n label: 'embedded object',\n why: 'embedded-resource: a whole object - apiVersion, kind and metadata are validated',\n });\n }\n if (typeof k.additionalProperties === 'boolean') {\n out.push(\n k.additionalProperties\n ? { label: 'any keys', why: 'additionalProperties: keys beyond the listed ones are allowed' }\n : { label: 'no other keys', why: 'additionalProperties false: only the listed keys are allowed' },\n );\n }\n return out;\n}\n\n/** A combinator branch (`anyOf`, `oneOf`, `allOf`, `not`) in a few words. */\nexport function brief(schema: unknown): string {\n if (typeof schema !== 'object' || schema === null || Array.isArray(schema)) return json(schema);\n const s = schema as Schema & Keywords;\n if (typeof s.$ref === 'string') return shortName(s.$ref);\n if (s.type) {\n const c = constraints(s);\n return `${Array.isArray(s.type) ? s.type.join(' | ') : s.type}${c.length ? ` (${c.join(', ')})` : ''}`;\n }\n if (Array.isArray(s.required)) return `requires ${s.required.join(', ')}`;\n if (s.properties && typeof s.properties === 'object') return `fields ${Object.keys(s.properties).join(', ')}`;\n if (s.not !== undefined) return `not ${brief(s.not)}`;\n if (Array.isArray(s.enum)) return `one of ${s.enum.map(json).join(' | ')}`;\n return json(s).slice(0, 120);\n}\n","import { css, html, nothing, type PropertyValues, type TemplateResult } from 'lit';\n\nimport { define } from '../kd/define';\nimport { KdElement, base } from '../kd/element';\nimport { behaviours, brief, constraints } from './describe';\nimport { normalize, type Root, type SchemaNode } from './model';\n\nconst COMBINATORS = [\n ['anyOf', 'any of'],\n ['oneOf', 'exactly one of'],\n ['allOf', 'all of'],\n] as const;\n\nconst words = (value: string | undefined): string[] => (value ?? '').split(/\\s+/).filter(Boolean);\nconst clip = (value: unknown, max = 300): string => {\n const text = JSON.stringify(value) ?? String(value);\n return text.length > max ? `${text.slice(0, max)}…` : text;\n};\nconst safeUrl = (url: unknown): string | undefined =>\n typeof url === 'string' && /^https?:\\/\\//i.test(url) ? url : undefined;\n\n/**\n * An OpenAPI v3 / JSON Schema viewer, written the way the YAML is: a field per\n * line with its type, constraints and Kubernetes behaviours beside it, a\n * required marker, and the description, rules and fields when opened. A\n * subtree is rendered only when it is opened.\n *\n * Data in: `document` (an OpenAPI document, a CRD or a schema) and `root` (see\n * `normalize`) as properties, or `src`, a URL returning the document.\n *\n * Attributes: `root`, `src`, `expand` (top-level fields open at first, default\n * `spec status`), `omit` (top-level fields left out, e.g. `apiVersion kind metadata`).\n */\nexport class KdSchema extends KdElement {\n static override properties = {\n document: { attribute: false },\n root: { attribute: 'root' },\n src: { attribute: 'src' },\n expand: { attribute: 'expand' },\n omit: { attribute: 'omit' },\n error: { state: true },\n };\n\n declare document: unknown;\n declare root: Root | undefined;\n declare src: string | undefined;\n declare expand: string | undefined;\n declare omit: string | undefined;\n declare error: string | undefined;\n\n #tree: SchemaNode | undefined;\n #open = new Map<SchemaNode, boolean>();\n #fetching = 0;\n\n static override styles = [\n base,\n css`\n :host {\n font-size: 13px;\n }\n .none {\n color: var(--kd-text-2, inherit);\n font-style: italic;\n }\n .f {\n margin-left: 16px;\n }\n .tree > .f {\n margin-left: 0;\n }\n summary,\n .leaf {\n display: flex;\n align-items: baseline;\n gap: 8px;\n padding: 2px 0;\n min-width: 0;\n }\n summary {\n cursor: pointer;\n list-style: none;\n }\n summary::-webkit-details-marker {\n display: none;\n }\n summary::before,\n .leaf::before {\n content: '';\n width: 10px;\n flex: none;\n color: var(--kd-text-2, inherit);\n }\n summary::before {\n content: '▸';\n transition: transform 0.1s;\n }\n details[open] > summary::before {\n transform: rotate(90deg);\n }\n summary:focus-visible {\n outline: 1px solid var(--kd-primary, currentColor);\n outline-offset: 1px;\n }\n .k,\n .t,\n .c,\n .mono {\n font-family: var(--kd-font-mono, monospace);\n }\n .k {\n font-weight: 500;\n }\n .rq {\n color: var(--kd-error, inherit);\n font-family: var(--kd-font-mono, monospace);\n margin-left: -6px;\n }\n .t {\n font-size: 12px;\n color: var(--kd-link, inherit);\n white-space: nowrap;\n }\n .kt {\n font-size: 11px;\n line-height: 1.4;\n padding: 0 6px;\n border: 1px solid var(--kd-border-strong, currentColor);\n border-radius: var(--kd-radius, 2px);\n color: var(--kd-primary, inherit);\n white-space: nowrap;\n cursor: help;\n }\n .c {\n font-size: 11px;\n color: var(--kd-text-2, inherit);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 55%;\n flex: 0 1 auto;\n min-width: 0;\n }\n .ds {\n font-size: 12px;\n color: var(--kd-text-2, inherit);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n flex: 1;\n }\n details[open] > summary .ds {\n visibility: hidden;\n }\n .fb {\n margin: 2px 0 6px 18px;\n padding: 4px 10px;\n border-left: 2px solid var(--kd-border, currentColor);\n font-size: 12px;\n }\n .fb > div {\n margin: 2px 0;\n }\n .desc {\n white-space: pre-line;\n overflow-wrap: anywhere;\n }\n .dim,\n .sec {\n color: var(--kd-text-2, inherit);\n }\n .sec {\n margin: 10px 0 2px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n .mono {\n overflow-wrap: anywhere;\n }\n .tags {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 6px;\n }\n .tags .c {\n max-width: none;\n white-space: normal;\n }\n a {\n color: var(--kd-link, inherit);\n }\n `,\n ];\n\n protected override willUpdate(changed: PropertyValues<this>): void {\n if (changed.has('src') && this.src) void this.#fetch(this.src);\n if (changed.has('document') || changed.has('root')) {\n this.#tree = this.document === undefined ? undefined : normalize(this.document, this.root);\n this.#open = new Map();\n }\n }\n\n async #fetch(url: string): Promise<void> {\n const ticket = ++this.#fetching;\n try {\n const response = await fetch(url, { headers: { accept: 'application/json' } });\n if (!response.ok) throw new Error(`${response.status} ${response.statusText}`.trim());\n const document = await response.json();\n if (ticket !== this.#fetching) return;\n this.error = undefined;\n this.document = document;\n } catch (e) {\n if (ticket === this.#fetching) this.error = `Could not load the schema: ${(e as Error).message ?? e}`;\n }\n }\n\n override render(): TemplateResult {\n if (this.error) return html`<div class=\"none\">${this.error}</div>`;\n const omit = new Set(words(this.omit));\n const fields = (this.#tree?.fields ?? []).filter((f) => !omit.has(f.name));\n if (!fields.length) return html`<div class=\"none\">No schema</div>`;\n return html`<div class=\"tree\" part=\"tree\">${fields.map((f) => this.#field(f, 0))}</div>`;\n }\n\n #isOpen(node: SchemaNode, depth: number): boolean {\n const set = this.#open.get(node);\n if (set !== undefined) return set;\n return depth === 0 && words(this.expand ?? 'spec status').includes(node.name);\n }\n\n #toggle(node: SchemaNode, event: Event): void {\n const open = (event.currentTarget as HTMLDetailsElement).open;\n if (open === this.#open.get(node)) return;\n this.#open.set(node, open);\n this.requestUpdate();\n }\n\n #field(node: SchemaNode, depth: number): TemplateResult {\n const k = node.keywords;\n const c = constraints(k);\n const head = html`<span class=\"k\">${node.name}</span>${node.required\n ? html`<span class=\"rq\" title=\"required\">*</span>`\n : nothing}<span class=\"t\">${node.type}</span>${this.#tags(node)}${c.length\n ? html`<span class=\"c\" title=${c.join('\\n')}>${c.join(' · ')}</span>`\n : nothing}<span class=\"ds\">${(k.description ?? '').split('\\n')[0]}</span>`;\n const body = this.#body(node);\n if (!body.length && !node.expandable) return html`<div class=\"f leaf\" title=${node.path}>${head}</div>`;\n const open = this.#isOpen(node, depth);\n return html`<details class=\"f\" title=${node.path} ?open=${open} @toggle=${(e: Event) => this.#toggle(node, e)}>\n <summary>${head}</summary>\n ${open && body.length ? html`<div class=\"fb\">${body}</div>` : nothing}\n ${open && node.expandable ? html`<div class=\"fc\">${node.fields.map((f) => this.#field(f, depth + 1))}</div>` : nothing}\n </details>`;\n }\n\n #tags(node: SchemaNode): TemplateResult[] {\n return behaviours(node.keywords).map((b) => html`<span class=\"kt\" title=${b.why}>${b.label}</span>`);\n }\n\n // Everything shown under an opened field besides its fields. Built for every\n // visible field (cheap: one node and its item/value schema), because a field\n // with nothing to open is drawn as a plain line.\n #body(node: SchemaNode): TemplateResult[] {\n const out: TemplateResult[] = [];\n const description = node.keywords.description;\n if (description) out.push(html`<div class=\"desc\">${description}</div>`);\n out.push(...this.#extras(node));\n const cut = node.cycle ?? node.items?.cycle ?? node.values?.cycle;\n if (cut && cut.fields.length) {\n out.push(html`<div class=\"dim\">\n the same type as ${cut.path ? html`<span class=\"mono\">${cut.path}</span>` : 'the root'}, whose fields are listed there\n </div>`);\n }\n if (node.items) out.push(...this.#each('each item', node.items));\n if (node.values) out.push(...this.#each('each value', node.values));\n return out;\n }\n\n // What applies to each item of a list or each value of a map, besides its fields.\n #each(label: string, node: SchemaNode): TemplateResult[] {\n const c = constraints(node.keywords);\n const tags = this.#tags(node);\n const extras = this.#extras(node);\n if (!c.length && !tags.length && !extras.length) return [];\n return [\n html`<div class=\"sec\">${label}</div>`,\n ...(c.length || tags.length\n ? [html`<div class=\"tags\">${tags}${c.length ? html`<span class=\"c\">${c.join(' · ')}</span>` : nothing}</div>`]\n : []),\n ...extras,\n ];\n }\n\n // Combinators, title, examples, docs, CEL rules, and every unknown keyword.\n #extras(node: SchemaNode): TemplateResult[] {\n const k = node.keywords;\n const out: TemplateResult[] = [];\n for (const [key, label] of COMBINATORS) {\n const branches = k[key];\n if (!Array.isArray(branches) || !branches.length) continue;\n // Kubernetes wraps every $ref in a one-member allOf; that is the type, not a rule.\n if (key === 'allOf' && branches.length === 1 && Object.keys(branches[0]).every((x) => x === '$ref')) continue;\n out.push(html`<div>\n <span class=\"dim\">${label}:</span>\n ${branches.map((b, i) => html`${i ? html` <span class=\"dim\">|</span> ` : nothing}${brief(b)}`)}\n </div>`);\n }\n if (k.not !== undefined) out.push(html`<div><span class=\"dim\">must not be:</span> ${brief(k.not)}</div>`);\n if (k.title) out.push(html`<div><span class=\"dim\">title</span> ${k.title}</div>`);\n if (k.example !== undefined) {\n out.push(html`<div><span class=\"dim\">example</span> <span class=\"mono\">${clip(k.example)}</span></div>`);\n }\n if (Array.isArray(k.examples)) {\n for (const example of k.examples) {\n out.push(html`<div><span class=\"dim\">example</span> <span class=\"mono\">${clip(example)}</span></div>`);\n }\n }\n // Only an http(s) URL becomes a link; anything else is shown as text.\n const docs = k.externalDocs;\n const url = safeUrl(docs?.url);\n if (docs && (docs.url || docs.description)) {\n out.push(html`<div>\n <span class=\"dim\">docs</span>\n ${url\n ? html`<a href=${url} target=\"_blank\" rel=\"noopener\">${docs.description ?? url}</a>`\n : html`${docs.description ?? ''} <span class=\"mono\">${docs.url ?? ''}</span>`}\n </div>`);\n }\n const rules = k['x-kubernetes-validations'];\n if (Array.isArray(rules) && rules.length) {\n out.push(html`<div class=\"sec\">validation</div>`);\n for (const r of rules) {\n out.push(html`<div class=\"cel\">\n <span class=\"mono\">${r.rule ?? ''}</span>\n ${r.message\n ? html`<span class=\"dim\">- ${r.message}</span>`\n : r.messageExpression\n ? html`<span class=\"dim\">- message from</span> <span class=\"mono\">${r.messageExpression}</span>`\n : nothing}\n ${r.reason ? html`<span class=\"dim\">(${r.reason})</span>` : nothing}\n ${r.fieldPath ? html`<span class=\"dim\">at</span> <span class=\"mono\">${r.fieldPath}</span>` : nothing}\n ${r.optionalOldSelf ? html`<span class=\"dim\">(checked on create too)</span>` : nothing}\n </div>`);\n }\n }\n const other = Object.entries(node.other);\n if (other.length) {\n out.push(html`<div class=\"sec\">other</div>`);\n for (const [key, value] of other) {\n out.push(html`<div><span class=\"mono\">${key}</span>: <span class=\"mono\">${clip(value)}</span></div>`);\n }\n }\n return out;\n }\n}\n\ndefine('kd-schema', KdSchema);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kd-schema': KdSchema;\n }\n}\n"],"mappings":";;;AA8FA,IAAaS,IAAwC,2pBASrD,GACMC,IAAQ,IAAI,IAAYD,CAAQ,GAsDhCE,KAAY,MAChB,OAAOC,KAAU,cAAYA,KAAkB,CAAC,MAAM,QAAQA,CAAK,GAE/DC,IAAa;AAGnB,SAAgBC,EAAU,GAAqB;CAC7C,IAAMC,IAAOC,EAAI,WAAWH,CAAU,IAAIG,EAAI,MAAM,EAAiB,IAAIA,EAAI,MAAMA,EAAI,YAAY,GAAG,IAAI,CAAC;CAC3G,OAAOD,EAAK,MAAMA,EAAK,YAAY,GAAG,IAAI,CAAC;AAC7C;AAEA,SAASE,EAAQ,GAAmB,GAAsB;CACxD,IAAI,CAACD,EAAI,WAAW,GAAG,GAAG;CAC1B,IAAIE,IAAcC;CAClB,KAAK,IAAMC,KAAQJ,EAAI,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG;EACnD,IAAMK,IAAM,mBAAmBD,CAAI,CAAC,CAAC,QAAQ,OAAO,GAAG,CAAC,CAAC,QAAQ,OAAO,GAAG;EAC3E,IAAI,CAACT,EAASO,CAAE,KAAK,CAAC,MAAM,QAAQA,CAAE,GAAG;EACzC,IAAMA,EAA+BG;CACvC;CACA,OAAOH;AACT;AAEA,SAASI,EAAQ,GAAqB;CACpC,OAAON,EAAI,WAAWH,CAAU,IAAIG,EAAI,MAAM,EAAiB,IAAIA,EAAI,QAAQ,SAAS,EAAE;AAC5F;AAWA,SAASO,EAAQ,GAAmB,GAAgB,IAAiB,CAAC,GAAa;CACjF,IAAIC,IAAe,CAAC,GACdC,IAAiB,CAAC,GAClBC,IAAkB,CAAC,GACnBV,IAAMW,EAAO;CACnB,IAAI,OAAOX,KAAQ,UAAU;EAC3B,IAAMD,IAAOO,EAAQN,CAAG;EACxB,IAAI,CAACY,EAAK,SAASb,CAAI,GAAG;GACxB,EAAK,KAAKA,CAAI;GACd,IAAMc,IAASZ,EAAQE,GAAUH,CAAG;GACpC,AAAIL,EAASkB,CAAM,KAAGH,EAAM,KAAKG,CAAM;EACzC;CACF;CACA,IAAI,MAAM,QAAQF,EAAO,KAAK,GAAQ,KAAA,IAAMG,KAAUH,EAAO,OAAO,AAAIhB,EAASmB,CAAM,KAAGJ,EAAM,KAAKI,CAAM;CAC3G,IAAI,CAACJ,EAAM,QAAQ,OAAO;EAAE;EAAQ;CAAK;CACzC,KAAK,IAAMN,KAAQM,GAAO;EACxB,IAAMK,IAAQR,EAAQJ,GAAUC,GAAM,CAAC,GAAGQ,GAAM,GAAGH,CAAI,CAAC;EAExD,AADAA,EAAK,KAAK,GAAGM,EAAM,KAAK,QAAQ,MAAM,CAACN,EAAK,SAASO,CAAC,CAAC,CAAC,GACxD,IAAOC,EAAMT,GAAMO,EAAM,MAAM;CACjC;CACA,OAAO;EAAE,QAAQE,EAAMT,GAAMG,CAAM;EAAG;CAAK;AAC7C;AAEA,SAASM,EAAM,GAAe,GAAsB;CAClD,IAAMC,IAAc;EAAE,GAAGC;EAAO,GAAGC;CAAK;CACxC,IAAIzB,EAASwB,EAAM,UAAU,KAAKxB,EAASyB,EAAK,UAAU,GAAG;EAC3D,IAAMC,IAAiC,EAAE,GAAGF,EAAM,WAAW;EAC7D,KAAK,IAAM,CAACd,GAAKT,MAAU,OAAO,QAAQwB,EAAK,UAAU,GACvD,EAAMf,KAAOA,KAAOgB,KAAS1B,EAASC,CAAK,KAAKD,EAAS0B,EAAMhB,EAAI,IAAI,EAAE,OAAO,CAACgB,EAAMhB,IAAMT,CAAK,EAAE,IAAIA;EAE1G,EAAI,aAAayB;CACnB;CAIA,OAHI,MAAM,QAAQF,EAAM,QAAQ,KAAK,MAAM,QAAQC,EAAK,QAAQ,MAC9D,EAAI,WAAW,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAGD,EAAM,UAAU,GAAGC,EAAK,QAAQ,CAAC,CAAC,IAE5DF;AACT;AAGA,SAASI,EAAY,GAAmB,GAAgB,GAAgB,IAAiB,CAAC,GAAW;CACnG,IAAIb,EAAK,MAAM,MAAMG,EAAK,SAASI,CAAC,CAAC,GAAG,OAAOlB,EAAUW,EAAK,EAAE;CAChE,IAAMc,IAAIZ,EAAO;CACjB,IAAIY,MAAM,SAAS;EACjB,IAAMR,IAAQR,EAAQJ,GAAUR,EAASgB,EAAO,KAAK,IAAIA,EAAO,QAAQ,CAAC,CAAC;EAC1E,OAAO,OAAOW,EAAYnB,GAAUY,EAAM,QAAQA,EAAM,MAAM,CAAC,GAAGH,GAAM,GAAGH,CAAI,CAAC;CAClF;CACA,IAAMe,IAAKb,EAAO;CAClB,KAAKY,MAAM,YAAYA,MAAM,KAAA,MAAc5B,EAAS6B,CAAE,KAAK,CAAC7B,EAASgB,EAAO,UAAU,GAAG;EACvF,IAAMI,IAAQR,EAAQJ,GAAUqB,CAAE;EAClC,OAAO,gBAAgBF,EAAYnB,GAAUY,EAAM,QAAQA,EAAM,MAAM,CAAC,GAAGH,GAAM,GAAGH,CAAI,CAAC;CAC3F;CAOA,OANIA,EAAK,SAAeX,EAAUW,EAAK,EAAE,IACrCE,EAAO,gCAAsC,kBAC7CY,MAAM,WAAiB,WACvB,OAAOA,KAAM,WAAiBA,IAC9B,MAAM,QAAQA,CAAC,IAAUA,EAAE,KAAK,KAAK,IACrC5B,EAASgB,EAAO,UAAU,IAAU,WACjC;AACT;AAEA,IAAMc,IAAN,MAAMA,EAA2B;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YAAY,GAAmB,GAAa,GAA0B,GAAc,GAA0B,GAAmB;EAE/H,AADA,KAAKC,KAAYvB,GACjB,KAAKwB,KAAUC;EACf,IAAM,EAAE,WAAQ,YAASrB,EAAQJ,GAAU0B,CAAG;EAW9C,AAVA,KAAKC,KAAQrB,GACb,KAAK,OAAOsB,GACZ,KAAK,OAAOhC,GACZ,KAAK,OAAOgC,MAAS,WAAWH,GAAQ,OAAO,GAAGA,EAAO,KAAK,GAAG7B,MAASgC,MAAS,UAAUhC,IAAQ6B,GAAQ,QAAQ,IACrH,KAAK,WAAWI,GAChB,KAAK,SAASrB,GACVF,EAAK,WACP,KAAK,MAAMA,EAAK,IAChB,KAAK,WAAWX,EAAUW,EAAK,EAAE,IAEnC,KAAK,OAAOa,EAAYnB,GAAUQ,GAAQF,CAAI;EAC9C,IAAMwB,IAAoC,CAAC,GACrCC,IAAiC,CAAC;EACxC,KAAK,IAAM,CAAC7B,GAAKT,MAAU,OAAO,QAAQe,CAAM,GAAG,CAACjB,EAAM,IAAIW,CAAG,IAAI4B,IAAWC,EAAA,CAAO7B,KAAOT;EAE9F,AADA,KAAK,WAAWqC,GAChB,KAAK,QAAQC;EACb,KAAK,IAAIC,IAAKP,GAAQO,KAAM,CAAC,KAAKC,IAAQ,IAAKD,EAAGR,IAChD,AAAIQ,EAAGL,GAAM,MAAM,MAAMrB,EAAK,SAASO,CAAC,CAAC,MAAG,KAAKoB,KAASD;CAE9D;CAEA,IAAI,SAAiC;EACnC,OAAO,KAAKR;CACd;CAEA,IAAI,QAAgC;EAClC,OAAO,KAAKS;CACd;CAEA,IAAI,aAAoC;EACtC,IAAI,CAAC,KAAKC,IAAa;GACrB,IAAMhB,IAAQ,KAAK,OAAO,YACpBW,IAAW,MAAM,QAAQ,KAAK,OAAO,QAAQ,IAAI,KAAK,OAAO,WAAW,CAAC;GAC/E,KAAKK,KACH,KAAKD,MAAU,CAACzC,EAAS0B,CAAK,IAC1B,CAAC,IACD,OAAO,QAAQA,CAAK,CAAC,CAAC,KACnB,CAAChB,GAAKT,OAAW,IAAI6B,EAAK,KAAKC,IAAW/B,EAASC,CAAK,IAAIA,IAAQ,CAAC,GAAG,SAASS,GAAK,MAAM2B,EAAS,SAAS3B,CAAG,CAAC,CACrH;EACR;EACA,OAAO,KAAKgC;CACd;CAEA,IAAI,QAAgC;EAClC,IAAI,KAAKC,OAAW,KAAA,GAAW;GAC7B,IAAMC,IAAQ,KAAK,OAAO;GAC1B,KAAKD,KAAS,CAAC,KAAKF,MAAU,KAAK,OAAO,SAAS,WAAWzC,EAAS4C,CAAK,IACxE,IAAId,EAAK,KAAKC,IAAWa,GAAO,QAAQ,IAAI,MAAM,EAAK,IACvD;EACN;EACA,OAAO,KAAKD,MAAU,KAAA;CACxB;CAEA,IAAI,SAAiC;EACnC,IAAI,KAAKE,OAAY,KAAA,GAAW;GAC9B,IAAMhB,IAAK,KAAK,OAAO;GACvB,KAAKgB,KAAU,CAAC,KAAKJ,MAAUzC,EAAS6B,CAAE,IAAI,IAAIC,EAAK,KAAKC,IAAWF,GAAI,SAAS,IAAI,MAAM,EAAK,IAAI;EACzG;EACA,OAAO,KAAKgB,MAAW,KAAA;CACzB;CAEA,IAAI,SAAgC;EAElC,OADI,KAAK,WAAW,SAAe,KAAK,aACjC,KAAK,OAAO,UAAU,KAAK,QAAQ,UAAU,CAAC;CACvD;CAEA,IAAI,aAAsB;EACxB,OAAO,KAAK,OAAO,SAAS;CAC9B;CAEA,SAAkC;EAChC,IAAM,EAAE,SAAM,SAAM,SAAM,aAAU,SAAM,aAAU,QAAK,aAAU,aAAU;EAC7E,OAAO;GAAE;GAAM;GAAM;GAAM;GAAU;GAAM;GAAU;GAAK;GAAU;GAAO,OAAO,KAAKJ,IAAQ;EAAK;CACtG;AACF;AAEA,SAASK,EAAW,GAAmB,GAAgC;CACrE,IAAIC,MAAS,KAAA,GAEX,OADI/C,EAASQ,CAAQ,KAAKA,EAAS,SAAS,6BAAmCwC,EAAUxC,CAAQ,IAC1FR,EAASQ,CAAQ,IAAIA,IAAW,CAAC;CAE1C,IAAI,OAAOuC,KAAS,UAAU;EAC5B,IAAIA,EAAK,WAAW,GAAG,GAAG,OAAO,EAAE,MAAMA,EAAK;EAC9C,IAAME,IAAUjD,EAASQ,CAAQ,KAAKR,EAASQ,EAAS,UAAU,IAAIA,EAAS,WAAW,UAAU,KAAA;EACpG,IAAIR,EAASiD,CAAO,GAAG;GACrB,IAAIF,KAAQE,GAAS,OAAO,EAAE,MAAM/C,IAAa6C,EAAK,QAAQ,MAAM,IAAI,CAAC,CAAC,QAAQ,OAAO,IAAI,EAAE;GAC/F,IAAMG,IAAU,OAAO,KAAKD,CAAO,CAAC,CAAC,QAAQ,MAAME,EAAE,SAAS,MAAMJ,CAAI,CAAC;GACzE,IAAIG,EAAQ,WAAW,GAAG,OAAO,EAAE,MAAMhD,IAAagD,EAAQ,GAAG;EACnE;EACA,OAAO,CAAC;CACV;CAIA,OAHIH,EAAK,SAAS,6BAAmCC,EAAUD,CAAI,IAC/D/C,EAAS+C,EAAK,MAAM,KAAK/C,EAAS+C,EAAK,OAAO,eAAe,IAAUA,EAAK,OAAO,kBACnF/C,EAAS+C,EAAK,eAAe,IAAUA,EAAK,kBACzCA;AACT;AAGA,SAASC,EAAU,GAAqB;CACtC,IAAMI,IAAOpD,EAASqD,EAAI,IAAI,IAAIA,EAAI,OAAO,CAAC,GACxCC,IAAW,MAAM,QAAQF,EAAK,QAAQ,IAAIA,EAAK,SAAS,OAAOpD,CAAQ,IAAI,CAAC,GAC5EuD,IAAUD,EAAS,MAAM,MAAME,EAAE,OAAO,KAAKF,EAAS,IACtDtC,IAASuC,KAAWvD,EAASuD,EAAQ,MAAM,IAAIA,EAAQ,OAAO,kBAAkB,KAAA;CACtF,OAAOvD,EAASgB,CAAM,IAAIA,IAAS,CAAC;AACtC;AAWA,SAAgByC,EAAU,GAAmB,GAAyB;CAEpE,OAAO,IAAI3B,EAAKtB,GADDsC,EAAWtC,GAAUuC,CACV,GAAQ,QAAQ,IAAI,KAAA,GAAW,EAAK;AAChE;AAGA,SAAgBW,EAAK,GAAkB,GAAsC;CAC3E,IAAInD,IAA6BoD;CACjC,KAAK,IAAMvD,KAAQwD,EAAK,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO,GAC/C,IAAKrD,GAAI,OAAO,MAAM,MAAMsD,EAAE,SAASzD,CAAI;CAE7C,OAAOG;AACT;;;ACzYA,IAAMuD,KAAQ,MAA2B,KAAK,UAAU7D,CAAK,KAAK,OAAOA,CAAK,GAExE8D,KAAiB,MACrB,OAAO9D,KAAU,cAAYA,KAAkB,CAAC,MAAM,QAAQA,CAAK,KAAK,OAAO,KAAKA,CAAK,CAAC,CAAC,WAAW;AAQxG,SAAgB+D,EAAY,GAAuB;CACjD,IAAMzC,IAAgB,CAAC;CAKvB,AAJI4B,EAAE,YAAY,KAAA,KAAaA,EAAE,YAAY,QAAQ,CAACY,EAAcZ,EAAE,OAAO,KAAG5B,EAAI,KAAK,WAAWuC,EAAKX,EAAE,OAAO,GAAG,GACjH,MAAM,QAAQA,EAAE,IAAI,KAAG5B,EAAI,KAAK,UAAU4B,EAAE,KAAK,IAAIW,CAAI,CAAC,CAAC,KAAK,KAAK,GAAG,GACxEX,EAAE,UAAU,KAAA,KAAW5B,EAAI,KAAK,UAAUuC,EAAKX,EAAE,KAAK,GAAG,GACzDA,EAAE,UAAQ5B,EAAI,KAAK,UAAU4B,EAAE,QAAQ,GACvCA,EAAE,WAAS5B,EAAI,KAAK,WAAW4B,EAAE,SAAS;CAC9C,IAAMc,IAAQ,OAAOd,EAAE,oBAAqB,WAAWA,EAAE,mBAAmB,KAAA,GACtEe,IAAQ,OAAOf,EAAE,oBAAqB,WAAWA,EAAE,mBAAmB,KAAA,GACtEgB,IAAMF,KAASd,EAAE,SACjBiB,IAAMF,KAASf,EAAE;CACvB,IAAIgB,KAAO,QAAQC,KAAO,MAAM;EAC9B,IAAMC,IAAOlB,EAAE,qBAAqB,MAAQc,MAAU,KAAA,IAAY,MAAM,IAClEK,IAAQnB,EAAE,qBAAqB,MAAQe,MAAU,KAAA,IAAY,MAAM;EACzE,EAAI,KAAK,SAASG,IAAOF,KAAO,GAAG,IAAIC,KAAO,KAAKE,GAAO;CAC5D;CAUA,OATInB,EAAE,cAAc,QAAM5B,EAAI,KAAK,eAAe4B,EAAE,YAAY,IAC5DA,EAAE,aAAa,QAAQA,EAAE,aAAa,SAAM5B,EAAI,KAAK,UAAU4B,EAAE,aAAa,EAAE,IAAIA,EAAE,aAAa,IAAI,IACvGA,EAAE,YAAY,QAAQA,EAAE,YAAY,SAAM5B,EAAI,KAAK,SAAS4B,EAAE,YAAY,EAAE,IAAIA,EAAE,YAAY,IAAI,GAClGA,EAAE,eAAa5B,EAAI,KAAK,cAAc,IACtC4B,EAAE,iBAAiB,QAAQA,EAAE,iBAAiB,SAAM5B,EAAI,KAAK,QAAQ4B,EAAE,iBAAiB,EAAE,IAAIA,EAAE,iBAAiB,IAAI,GACrHA,EAAE,YAAU5B,EAAI,KAAK,UAAU,GAC/B4B,EAAE,YAAU5B,EAAI,KAAK,WAAW,GAChC4B,EAAE,aAAW5B,EAAI,KAAK,YAAY,GAClC4B,EAAE,cAAY5B,EAAI,KAAK,YAAY,GAChCA;AACT;AAMA,SAAgBgD,EAAW,GAA0B;CACnD,IAAMhD,IAAmB,CAAC,GACpBiD,IAAWrB,EAAE;CACnB,AAAIqB,MAAa,QACfjD,EAAI,KAAK;EACP,OAAO,aAAa4B,EAAE,iCAAiC,CAAC,EAAA,CAAG,KAAK,IAAI;EACpE,KAAK;CACP,CAAC,IACQqB,MAAa,QACtBjD,EAAI,KAAK;EAAE,OAAO;EAAO,KAAK;CAAmD,CAAC,IACzEiD,KACTjD,EAAI,KAAK;EAAE,OAAO;EAAe,KAAK;CAAkD,CAAC;CAE3F,IAAMkD,IAAUtB,EAAE;CAClB,AAAIsB,MAAY,WACdlD,EAAI,KAAK;EAAE,OAAO;EAAU,KAAK;CAA4E,CAAC,IACrGkD,KACTlD,EAAI,KAAK;EAAE,OAAO;EAAY,KAAK;CAAwD,CAAC;CAE9F,IAAMmD,IAAWvB,EAAE;CACnB,IAAIuB,GAAU;EACZ,IAAMhE,IAAMyC,EAAE;EACd,EAAI,KAAK;GACP,OAAO,SAASuB,EAAS,QAAQ,MAAM,KAAK,IAAIhE,IAAM,OAAOA,MAAQ;GACrE,KAAK,gEAAgEgE,IAAWhE,IAAM,sBAAsBA,MAAQ;EACtH,CAAC;CACH;CACA,IAAMiE,IAASxB,EAAE;CACjB,IAAI,MAAM,QAAQwB,CAAM,KAAKA,EAAO,QAAQ;EAC1C,IAAMC,IAAQD,EAAO,KAAK,MAAME,EAAE,aAAa,CAAC,CAAC,OAAO,OAAO;EAC/D,EAAI,KAAK;GAAE,OAAO;GAAS,KAAK,wBAAwBD,EAAM,SAAS,cAAcA,EAAM,KAAK,IAAI,MAAM;EAAK,CAAC;CAClH;CAoBA,OAnBIzB,EAAE,iCACJ5B,EAAI,KAAK;EAAE,OAAO;EAAiB,KAAK;CAA6D,CAAC,GAEpG4B,EAAE,2CACJ5B,EAAI,KAAK;EAAE,OAAO;EAAc,KAAK;CAAgF,CAAC,GAEpH4B,EAAE,qCACJ5B,EAAI,KAAK;EACP,OAAO;EACP,KAAK;CACP,CAAC,GAEC,OAAO4B,EAAE,wBAAyB,aACpC5B,EAAI,KACF4B,EAAE,uBACE;EAAE,OAAO;EAAY,KAAK;CAAgE,IAC1F;EAAE,OAAO;EAAiB,KAAK;CAA+D,CACpG,GAEK5B;AACT;AAGA,SAAgBuD,EAAM,GAAyB;CAC7C,IAAI,OAAO9D,KAAW,aAAYA,KAAmB,MAAM,QAAQA,CAAM,GAAG,OAAO8C,EAAK9C,CAAM;CAC9F,IAAM+D,IAAI/D;CACV,IAAI,OAAO+D,EAAE,QAAS,UAAU,OAAO5E,EAAU4E,EAAE,IAAI;CACvD,IAAIA,EAAE,MAAM;EACV,IAAMC,IAAIhB,EAAYe,CAAC;EACvB,OAAO,GAAG,MAAM,QAAQA,EAAE,IAAI,IAAIA,EAAE,KAAK,KAAK,KAAK,IAAIA,EAAE,OAAOC,EAAE,SAAS,KAAKA,EAAE,KAAK,IAAI,EAAE,KAAK;CACpG;CAKA,OAJI,MAAM,QAAQD,EAAE,QAAQ,IAAU,YAAYA,EAAE,SAAS,KAAK,IAAI,MAClEA,EAAE,cAAc,OAAOA,EAAE,cAAe,WAAiB,UAAU,OAAO,KAAKA,EAAE,UAAU,CAAC,CAAC,KAAK,IAAI,MACtGA,EAAE,QAAQ,KAAA,IACV,MAAM,QAAQA,EAAE,IAAI,IAAU,UAAUA,EAAE,KAAK,IAAIjB,CAAI,CAAC,CAAC,KAAK,KAAK,MAChEA,EAAKiB,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,IAFK,OAAOD,EAAMC,EAAE,GAAG;AAGpD;;;ACnHA,IAAME,IAAc;CAClB,CAAC,SAAS,QAAQ;CAClB,CAAC,SAAS,gBAAgB;CAC1B,CAAC,SAAS,QAAQ;AACpB,GAEMC,KAAS,OAAyCjF,KAAS,GAAA,CAAI,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO,GAC1FkF,KAAQ,GAAgB,IAAM,QAAgB;CAClD,IAAMC,IAAO,KAAK,UAAUnF,CAAK,KAAK,OAAOA,CAAK;CAClD,OAAOmF,EAAK,SAAShB,IAAM,GAAGgB,EAAK,MAAM,GAAGhB,CAAG,EAAE,KAAKgB;AACxD,GACMC,KAAW,MACf,OAAOC,KAAQ,YAAY,gBAAgB,KAAKA,CAAG,IAAIA,IAAM,KAAA,GAclDC,IAAb,cAA8B7F,EAAU;CACtC,OAAgB,aAAa;EAC3B,UAAU,EAAE,WAAW,GAAM;EAC7B,MAAM,EAAE,WAAW,OAAO;EAC1B,KAAK,EAAE,WAAW,MAAM;EACxB,QAAQ,EAAE,WAAW,SAAS;EAC9B,MAAM,EAAE,WAAW,OAAO;EAC1B,OAAO,EAAE,OAAO,GAAK;CACvB;CASA;CACA,qBAAQ,IAAI,IAAyB;CACrC,KAAY;CAEZ,OAAgB,SAAS,CACvBmB,GACA,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0IL;CAEA,WAA8B,GAAqC;EAEjE,AADI2E,EAAQ,IAAI,KAAK,KAAK,KAAK,OAAK,KAAUC,GAAO,KAAK,GAAG,IACzDD,EAAQ,IAAI,UAAU,KAAKA,EAAQ,IAAI,MAAM,OAC/C,KAAKE,KAAQ,KAAK,aAAa,KAAA,IAAY,KAAA,IAAYjC,EAAU,KAAK,UAAU,KAAK,IAAI,GACzF,KAAKkC,qBAAQ,IAAI,IAAI;CAEzB;CAEA,MAAMF,GAAO,GAA4B;EACvC,IAAMG,IAAS,EAAE,KAAKC;EACtB,IAAI;GACF,IAAMC,IAAW,MAAM,MAAMR,GAAK,EAAE,SAAS,EAAE,QAAQ,mBAAmB,EAAE,CAAC;GAC7E,IAAI,CAACQ,EAAS,IAAI,MAAU,MAAM,GAAGA,EAAS,OAAO,GAAGA,EAAS,aAAa,KAAK,CAAC;GACpF,IAAMtF,IAAW,MAAMsF,EAAS,KAAK;GACrC,IAAIF,MAAW,KAAKC,IAAW;GAE/B,AADA,KAAK,QAAQ,KAAA,GACb,KAAK,WAAWrF;EAClB,SAAS,GAAG;GACV,AAAIoF,MAAW,KAAKC,OAAW,KAAK,QAAQ,8BAA+B,EAAY,WAAW;EACpG;CACF;CAEA,SAAkC;EAChC,IAAI,KAAK,OAAO,OAAO,CAAI,qBAAqB,KAAK,MAAM;EAC3D,IAAME,IAAO,IAAI,IAAIb,EAAM,KAAK,IAAI,CAAC,GAC/Bc,KAAU,KAAKN,IAAO,UAAU,CAAC,EAAA,CAAG,QAAQ,MAAM,CAACK,EAAK,IAAIlC,EAAE,IAAI,CAAC;EAEzE,OADKmC,EAAO,SACL,CAAI,iCAAiCA,EAAO,KAAK,MAAM,KAAKC,GAAOpC,GAAG,CAAC,CAAC,EAAE,UADtD,CAAI;CAEjC;CAEA,GAAQ,GAAkB,GAAwB;EAChD,IAAMqC,IAAM,KAAKP,GAAM,IAAIhC,CAAI;EAE/B,OADIuC,MAAQ,KAAA,IACLC,MAAU,KAAKjB,EAAM,KAAK,UAAU,aAAa,CAAC,CAAC,SAASvB,EAAK,IAAI,IAD9CuC;CAEhC;CAEA,GAAQ,GAAkB,GAAoB;EAC5C,IAAM7B,IAAQ+B,EAAM,cAAqC;EACzD,AAAI/B,MAAS,KAAKsB,GAAM,IAAIhC,CAAI,MAChC,KAAKgC,GAAM,IAAIhC,GAAMU,CAAI,GACzB,KAAK,cAAc;CACrB;CAEA,GAAO,GAAkB,GAA+B;EACtD,IAAMlB,IAAIQ,EAAK,UACTqB,IAAIhB,EAAYb,CAAC,GACjBkD,IAAO,CAAI,mBAAmB1C,EAAK,KAAK,SAASA,EAAK,WACtD,CAAI,+CACJtE,EAAQ,kBAAkBsE,EAAK,KAAK,SAAS,KAAK2C,GAAM3C,CAAI,IAAIqB,EAAE,SAClE,CAAI,yBAAyBA,EAAE,KAAK,IAAI,EAAE,GAAGA,EAAE,KAAK,KAAK,EAAE,WAC3D3F,EAAQ,oBAAoB8D,EAAE,eAAe,GAAA,CAAI,MAAM,IAAI,CAAC,CAAC,GAAG,UAChEoD,IAAO,KAAKC,GAAM7C,CAAI;EAC5B,IAAI,CAAC4C,EAAK,UAAU,CAAC5C,EAAK,YAAY,OAAO,CAAI,6BAA6BA,EAAK,KAAK,GAAG0C,EAAK;EAChG,IAAMhC,IAAO,KAAKoC,GAAQ9C,GAAMwC,CAAK;EACrC,OAAO,CAAI,4BAA4BxC,EAAK,KAAK,SAASU,EAAK,YAAY,MAAa,KAAKqC,GAAQ/C,GAAM,CAAC,EAAE;iBACjG0C,EAAK;QACdhC,KAAQkC,EAAK,SAAS,CAAI,mBAAmBA,EAAK,UAAUlH,EAAQ;QACpEgF,KAAQV,EAAK,aAAa,CAAI,mBAAmBA,EAAK,OAAO,KAAK,MAAM,KAAKsC,GAAOpC,GAAGsC,IAAQ,CAAC,CAAC,EAAE,UAAU9G,EAAQ;;CAE3H;CAEA,GAAM,GAAoC;EACxC,OAAOkF,EAAWZ,EAAK,QAAQ,CAAC,CAAC,KAAK,MAAM,CAAI,0BAA0BrE,EAAE,IAAI,GAAGA,EAAE,MAAM,QAAQ;CACrG;CAKA,GAAM,GAAoC;EACxC,IAAMiC,IAAwB,CAAC,GACzBqF,IAAcjD,EAAK,SAAS;EAElC,AADIiD,KAAarF,EAAI,KAAK,CAAI,qBAAqBqF,EAAY,OAAO,GACtErF,EAAI,KAAK,GAAG,KAAKsF,GAAQlD,CAAI,CAAC;EAC9B,IAAMmD,IAAMnD,EAAK,SAASA,EAAK,OAAO,SAASA,EAAK,QAAQ;EAQ5D,OAPImD,KAAOA,EAAI,OAAO,UACpBvF,EAAI,KAAK,CAAI;2BACQuF,EAAI,OAAO,CAAI,sBAAsBA,EAAI,KAAK,WAAW,WAAW;aAClF,GAELnD,EAAK,SAAOpC,EAAI,KAAK,GAAG,KAAKwF,GAAM,aAAapD,EAAK,KAAK,CAAC,GAC3DA,EAAK,UAAQpC,EAAI,KAAK,GAAG,KAAKwF,GAAM,cAAcpD,EAAK,MAAM,CAAC,GAC3DpC;CACT;CAGA,GAAM,GAAe,GAAoC;EACvD,IAAMyD,IAAIhB,EAAYL,EAAK,QAAQ,GAC7BqD,IAAO,KAAKV,GAAM3C,CAAI,GACtBsD,IAAS,KAAKJ,GAAQlD,CAAI;EAEhC,OADI,CAACqB,EAAE,UAAU,CAACgC,EAAK,UAAU,CAACC,EAAO,SAAe,CAAC,IAClD;GACL,CAAI,oBAAoBC,EAAM;GAC9B,GAAIlC,EAAE,UAAUgC,EAAK,SACjB,CAAC,CAAI,qBAAqBA,IAAOhC,EAAE,SAAS,CAAI,mBAAmBA,EAAE,KAAK,KAAK,EAAE,WAAW3F,EAAQ,OAAO,IAC3G,CAAC;GACL,GAAG4H;EACL;CACF;CAGA,GAAQ,GAAoC;EAC1C,IAAM9D,IAAIQ,EAAK,UACTpC,IAAwB,CAAC;EAC/B,KAAK,IAAM,CAACb,GAAKwG,MAAUjC,GAAa;GACtC,IAAMkC,IAAWhE,EAAEzC;GACnB,AAAK,MAAM,QAAQyG,CAAQ,KAAMA,EAAS,WAEtCzG,MAAQ,WAAWyG,EAAS,WAAW,KAAK,OAAO,KAAKA,EAAS,EAAE,CAAC,CAAC,OAAO,MAAMC,MAAM,MAAM,KAClG7F,EAAI,KAAK,CAAI;4BACS2F,EAAM;UACxBC,EAAS,KAAK,GAAG,MAAM,CAAI,GAAGxH,IAAI,CAAI,iCAAiCN,IAAUyF,EAAMxF,CAAC,GAAG,EAAE;aAC1F;EACT;EAMA,IALI6D,EAAE,QAAQ,KAAA,KAAW5B,EAAI,KAAK,CAAI,8CAA8CuD,EAAM3B,EAAE,GAAG,EAAE,OAAO,GACpGA,EAAE,SAAO5B,EAAI,KAAK,CAAI,uCAAuC4B,EAAE,MAAM,OAAO,GAC5EA,EAAE,YAAY,KAAA,KAChB5B,EAAI,KAAK,CAAI,4DAA4D4D,EAAKhC,EAAE,OAAO,EAAE,cAAc,GAErG,MAAM,QAAQA,EAAE,QAAQ,GAC1B,KAAK,IAAMmE,KAAWnE,EAAE,UACtB,EAAI,KAAK,CAAI,4DAA4DgC,EAAKmC,CAAO,EAAE,cAAc;EAIzG,IAAMC,IAAOpE,EAAE,cACTmC,IAAMD,EAAQkC,GAAM,GAAG;EAC7B,AAAIA,MAASA,EAAK,OAAOA,EAAK,gBAC5BhG,EAAI,KAAK,CAAI;;UAET+D,IACE,CAAI,WAAWA,EAAI,kCAAkCiC,EAAK,eAAejC,EAAI,QAC7E,CAAI,GAAGiC,EAAK,eAAe,GAAG,sBAAsBA,EAAK,OAAO,GAAG,SAAS;aAC3E;EAET,IAAMC,IAAQrE,EAAE;EAChB,IAAI,MAAM,QAAQqE,CAAK,KAAKA,EAAM,QAAQ;GACxC,EAAI,KAAK,CAAI,mCAAmC;GAChD,KAAK,IAAMnG,KAAKmG,GACd,EAAI,KAAK,CAAI;+BACUnG,EAAE,QAAQ,GAAG;YAChCA,EAAE,UACA,CAAI,uBAAuBA,EAAE,QAAQ,WACrCA,EAAE,oBACA,CAAI,8DAA8DA,EAAE,kBAAkB,WACtFhC,EAAQ;YACZgC,EAAE,SAAS,CAAI,sBAAsBA,EAAE,OAAO,YAAYhC,EAAQ;YAClEgC,EAAE,YAAY,CAAI,kDAAkDA,EAAE,UAAU,WAAWhC,EAAQ;YACnGgC,EAAE,kBAAkB,CAAI,qDAAqDhC,EAAQ;eAClF;EAEX;EACA,IAAMkD,IAAQ,OAAO,QAAQoB,EAAK,KAAK;EACvC,IAAIpB,EAAM,QAAQ;GAChB,EAAI,KAAK,CAAI,8BAA8B;GAC3C,KAAK,IAAM,CAAC7B,GAAKT,MAAUsC,GACzB,EAAI,KAAK,CAAI,2BAA2B7B,EAAI,8BAA8ByE,EAAKlF,CAAK,EAAE,cAAc;EAExG;EACA,OAAOsB;CACT;AACF;AAEA3B,EAAO,aAAa2F,CAAQ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubed.io/cdn",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "A theme layer and web components for Grafana panels, loaded by URL from jsDelivr.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -30,7 +30,11 @@
|
|
|
30
30
|
"types": "./dist/n8n/index.d.ts",
|
|
31
31
|
"default": "./dist/n8n.js"
|
|
32
32
|
},
|
|
33
|
-
"./kd.css": "./dist/kd.css"
|
|
33
|
+
"./kd.css": "./dist/kd.css",
|
|
34
|
+
"./github.js": {
|
|
35
|
+
"types": "./dist/github/index.d.ts",
|
|
36
|
+
"default": "./dist/github.js"
|
|
37
|
+
}
|
|
34
38
|
},
|
|
35
39
|
"scripts": {
|
|
36
40
|
"build": "vite build && tsc -p tsconfig.build.json",
|
|
@@ -49,7 +53,10 @@
|
|
|
49
53
|
"vitest": "^5.0.3"
|
|
50
54
|
},
|
|
51
55
|
"dependencies": {
|
|
52
|
-
"
|
|
56
|
+
"dompurify": "3.4.16",
|
|
57
|
+
"highlight.js": "11.12.0",
|
|
58
|
+
"lit": "3.3.3",
|
|
59
|
+
"marked": "18.1.0"
|
|
53
60
|
},
|
|
54
61
|
"peerDependencies": {
|
|
55
62
|
"@n8n/chat": "1.41.3"
|