@malloy-publisher/sdk 0.0.137 → 0.0.139
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 +122 -1
- package/dist/ServerProvider-Bzid56gJ.cjs.js +1 -0
- package/dist/{ServerProvider-BGGK1ZQ_.es.js → ServerProvider-D-y63tG0.es.js} +550 -478
- package/dist/client/api.d.ts +144 -53
- package/dist/client/index.cjs.js +1 -1
- package/dist/client/index.es.js +22 -21
- package/dist/components/Notebook/Notebook.d.ts +4 -1
- package/dist/components/Notebook/NotebookCell.d.ts +2 -2
- package/dist/components/Notebook/types.d.ts +21 -0
- package/dist/components/filter/DimensionFilter.d.ts +43 -0
- package/dist/components/filter/index.d.ts +4 -0
- package/dist/components/filter/utils.d.ts +75 -0
- package/dist/components/index.d.ts +7 -6
- package/dist/components/styles.d.ts +3 -3
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/useDimensionFilters.d.ts +84 -0
- package/dist/hooks/useDimensionFiltersFromSpec.d.ts +52 -0
- package/dist/hooks/useDimensionFiltersQuery.d.ts +79 -0
- package/dist/hooks/useDimensionalFilterRangeData.d.ts +106 -0
- package/dist/index.cjs.js +141 -112
- package/dist/index.d.ts +3 -2
- package/dist/index.es.js +47903 -39798
- package/dist/sdk.css +1 -1
- package/package.json +16 -11
- package/src/components/Home/Home.tsx +15 -11
- package/src/components/Notebook/Notebook.tsx +391 -6
- package/src/components/Notebook/NotebookCell.tsx +2 -2
- package/src/components/Notebook/types.ts +24 -0
- package/src/components/Package/Connections.tsx +3 -6
- package/src/components/RenderedResult/RenderedResult.tsx +22 -3
- package/src/components/filter/DimensionFilter.tsx +738 -0
- package/src/components/filter/index.ts +20 -0
- package/src/components/filter/utils.ts +354 -0
- package/src/components/highlighter.ts +14 -6
- package/src/components/index.ts +7 -6
- package/src/hooks/index.ts +31 -0
- package/src/hooks/useDimensionFilters.ts +322 -0
- package/src/hooks/useDimensionFiltersFromSpec.ts +117 -0
- package/src/hooks/useDimensionFiltersQuery.ts +300 -0
- package/src/hooks/useDimensionalFilterRangeData.ts +758 -0
- package/src/index.ts +3 -2
- package/dist/ServerProvider-lXAaPKBb.cjs.js +0 -1
- package/dist/abap-BmBUA35e.es.js +0 -6
- package/dist/abap-Dwt2rH6y.cjs.js +0 -1
- package/dist/actionscript-3-mj8Uhnsc.cjs.js +0 -1
- package/dist/actionscript-3-zFUbzQa9.es.js +0 -6
- package/dist/ada-CBvPkFpZ.es.js +0 -6
- package/dist/ada-DZM58Vqs.cjs.js +0 -1
- package/dist/andromeeda-BXc5FOIb.cjs.js +0 -1
- package/dist/andromeeda-uXNdzNpk.es.js +0 -4
- package/dist/angular-html-B60m4jt-.cjs.js +0 -1
- package/dist/angular-html-D3aW1y6T.es.js +0 -32
- package/dist/angular-ts-Jud40GrY.es.js +0 -21
- package/dist/angular-ts-SIlYrqkG.cjs.js +0 -1
- package/dist/apache-CVNlsSDc.es.js +0 -6
- package/dist/apache-D7v5fxtZ.cjs.js +0 -1
- package/dist/apex-4hrAnw0a.cjs.js +0 -1
- package/dist/apex-DFk3KRB1.es.js +0 -6
- package/dist/apl-CKSaOFbt.cjs.js +0 -1
- package/dist/apl-pE3PRTDr.es.js +0 -16
- package/dist/applescript-CYMR_y0g.es.js +0 -6
- package/dist/applescript-Cnd3Dxju.cjs.js +0 -1
- package/dist/ara-4QmU5e04.es.js +0 -6
- package/dist/ara-BQ2aGbFQ.cjs.js +0 -1
- package/dist/asciidoc-C6nYvw8K.cjs.js +0 -1
- package/dist/asciidoc-v_1bjgUg.es.js +0 -6
- package/dist/asm-CQnBVCj-.cjs.js +0 -1
- package/dist/asm-RC0Yh-NZ.es.js +0 -6
- package/dist/astro-Be6fybGX.es.js +0 -16
- package/dist/astro-KhYkz6Xu.cjs.js +0 -1
- package/dist/aurora-x-BwoVEUWZ.es.js +0 -4
- package/dist/aurora-x-C5IpmIOG.cjs.js +0 -1
- package/dist/awk-DUx4h__E.cjs.js +0 -1
- package/dist/awk-gPH8MVMW.es.js +0 -6
- package/dist/ayu-dark-Cv7nTiif.cjs.js +0 -1
- package/dist/ayu-dark-CxPZkpb2.es.js +0 -4
- package/dist/ballerina-CXlzbmzl.cjs.js +0 -1
- package/dist/ballerina-kvLnRU_e.es.js +0 -6
- package/dist/bat-BHYy44sT.es.js +0 -6
- package/dist/bat-DlMT9sut.cjs.js +0 -1
- package/dist/beancount-CyyiuUzM.cjs.js +0 -1
- package/dist/beancount-D-MADTs_.es.js +0 -6
- package/dist/berry-B0EjuzrL.cjs.js +0 -1
- package/dist/berry-Ci9U0o4h.es.js +0 -6
- package/dist/bibtex-CX618D15.es.js +0 -6
- package/dist/bibtex-CfoG9xRq.cjs.js +0 -1
- package/dist/bicep-D6PH_9IY.cjs.js +0 -1
- package/dist/bicep-iuYiPopT.es.js +0 -6
- package/dist/blade-C0tMuk8f.cjs.js +0 -1
- package/dist/blade-DmXp5Zcz.es.js +0 -18
- package/dist/bsl-CfHcite8.cjs.js +0 -1
- package/dist/bsl-NPX_d-bb.es.js +0 -8
- package/dist/c-C4sXGJZM.cjs.js +0 -1
- package/dist/c-DASdrs7p.es.js +0 -6
- package/dist/cadence-BDALQi26.es.js +0 -6
- package/dist/cadence-Dq2CYzXG.cjs.js +0 -1
- package/dist/cairo-17kO8-kb.es.js +0 -8
- package/dist/cairo-CcKpJkyf.cjs.js +0 -1
- package/dist/catppuccin-frappe-BrTOiad2.es.js +0 -4
- package/dist/catppuccin-frappe-DXAedND3.cjs.js +0 -1
- package/dist/catppuccin-latte-D-dc_R4m.es.js +0 -4
- package/dist/catppuccin-latte-mwGw3-Ej.cjs.js +0 -1
- package/dist/catppuccin-macchiato-DN4jOp0G.es.js +0 -4
- package/dist/catppuccin-macchiato-cQCk9ADg.cjs.js +0 -1
- package/dist/catppuccin-mocha-B8yCE3-3.es.js +0 -4
- package/dist/catppuccin-mocha-ClSzDZSl.cjs.js +0 -1
- package/dist/clarity-CNgV2Ths.es.js +0 -6
- package/dist/clarity-ytMkUD5Q.cjs.js +0 -1
- package/dist/clojure-B_Wv414H.cjs.js +0 -1
- package/dist/clojure-CsKKFGwv.es.js +0 -6
- package/dist/cmake-Dr-A3iJx.es.js +0 -6
- package/dist/cmake-TBUaQXYY.cjs.js +0 -1
- package/dist/cobol-BzcJm6ie.es.js +0 -10
- package/dist/cobol-DXFNH4EH.cjs.js +0 -1
- package/dist/codeowners-Bt9yU6NX.es.js +0 -6
- package/dist/codeowners-QhPK6lIJ.cjs.js +0 -1
- package/dist/codeql-B7Q9tkDJ.cjs.js +0 -1
- package/dist/codeql-DBNTqJi1.es.js +0 -6
- package/dist/coffee-GRRSkgX1.cjs.js +0 -1
- package/dist/coffee-q2iaxUnQ.es.js +0 -8
- package/dist/common-lisp-Ced3ctK5.cjs.js +0 -1
- package/dist/common-lisp-r7ZEOG7T.es.js +0 -6
- package/dist/coq-BTRB4iqi.cjs.js +0 -1
- package/dist/coq-CB6Pv_W9.es.js +0 -6
- package/dist/cpp-CPOvHZqs.cjs.js +0 -1
- package/dist/cpp-CPQtoCcU.es.js +0 -18
- package/dist/crystal-BY_Cg265.es.js +0 -18
- package/dist/crystal-C6AG-iew.cjs.js +0 -1
- package/dist/csharp-CYWRhZ2R.es.js +0 -6
- package/dist/csharp-TKds-MhG.cjs.js +0 -1
- package/dist/css-B0kbn78J.cjs.js +0 -1
- package/dist/css-D1aVdRIU.es.js +0 -6
- package/dist/csv-BVJjiaC3.cjs.js +0 -1
- package/dist/csv-DvCncUGQ.es.js +0 -6
- package/dist/cue-BXMrmvay.es.js +0 -6
- package/dist/cue-Cz4J-rnd.cjs.js +0 -1
- package/dist/cypher-DTm5zNR1.es.js +0 -6
- package/dist/cypher-DuKTiyez.cjs.js +0 -1
- package/dist/d-BW9Wd7aK.cjs.js +0 -1
- package/dist/d-D6ZXmn3l.es.js +0 -6
- package/dist/dark-plus-Cd5emcYO.cjs.js +0 -1
- package/dist/dark-plus-pUHDTVV0.es.js +0 -4
- package/dist/dart-CWs-er6b.cjs.js +0 -1
- package/dist/dart-Dz59Is3F.es.js +0 -6
- package/dist/dax-CDxFL2Kb.cjs.js +0 -1
- package/dist/dax-DTVGzydb.es.js +0 -6
- package/dist/desktop-CFgo0jo7.cjs.js +0 -1
- package/dist/desktop-Db9vb-dl.es.js +0 -6
- package/dist/diff-BsEkKwI8.cjs.js +0 -1
- package/dist/diff-XmNrvgM1.es.js +0 -6
- package/dist/docker-DWH2onkn.es.js +0 -6
- package/dist/docker-hwiw4W8I.cjs.js +0 -1
- package/dist/dotenv-4337wvzu.es.js +0 -6
- package/dist/dotenv-CJ5o3G1C.cjs.js +0 -1
- package/dist/dracula-BNgwAJ-d.cjs.js +0 -1
- package/dist/dracula-BtZx2Kac.es.js +0 -4
- package/dist/dracula-soft-BHZ7sHFu.cjs.js +0 -1
- package/dist/dracula-soft-BKa-aqBv.es.js +0 -4
- package/dist/dream-maker-CvvfrJSx.es.js +0 -6
- package/dist/dream-maker-DBharE9Q.cjs.js +0 -1
- package/dist/edge-DI6_BHKG.es.js +0 -12
- package/dist/edge-i77KJtJz.cjs.js +0 -1
- package/dist/elixir-D00NoPSM.cjs.js +0 -1
- package/dist/elixir-ic9y5jcd.es.js +0 -8
- package/dist/elm-Bhj5Vf-e.cjs.js +0 -1
- package/dist/elm-DxnUqUaW.es.js +0 -8
- package/dist/emacs-lisp-BAefI874.es.js +0 -6
- package/dist/emacs-lisp-CDDyFsvQ.cjs.js +0 -1
- package/dist/erb-Cbj2YePa.es.js +0 -10
- package/dist/erb-Dybaw01v.cjs.js +0 -1
- package/dist/erlang-3VgdrQXV.cjs.js +0 -1
- package/dist/erlang-CmIiwF3I.es.js +0 -6
- package/dist/everforest-dark-DMCBqXCK.es.js +0 -4
- package/dist/everforest-dark-_sBMomR1.cjs.js +0 -1
- package/dist/everforest-light-BbXl82Em.es.js +0 -4
- package/dist/everforest-light-H0xoYxl0.cjs.js +0 -1
- package/dist/fennel-BvcDRFAV.cjs.js +0 -1
- package/dist/fennel-DNqkz9pE.es.js +0 -6
- package/dist/fish-CnamI0Ar.cjs.js +0 -1
- package/dist/fish-DIm72t2T.es.js +0 -6
- package/dist/fluent-BapTxJsC.es.js +0 -6
- package/dist/fluent-DFpT66K8.cjs.js +0 -1
- package/dist/fortran-fixed-form-DECY15PY.es.js +0 -8
- package/dist/fortran-fixed-form-u_RcUPMu.cjs.js +0 -1
- package/dist/fortran-free-form-CNDsBFUj.es.js +0 -6
- package/dist/fortran-free-form-IaGrWIda.cjs.js +0 -1
- package/dist/fsharp-B-aK2rr3.cjs.js +0 -1
- package/dist/fsharp-D2ZqviWP.es.js +0 -8
- package/dist/gdresource-BBAqNWe4.cjs.js +0 -1
- package/dist/gdresource-RIsK8sku.es.js +0 -10
- package/dist/gdscript-5N_43TPQ.cjs.js +0 -1
- package/dist/gdscript-D7aheHm-.es.js +0 -6
- package/dist/gdshader-BGJEsM2Z.es.js +0 -6
- package/dist/gdshader-Bl85Hrm5.cjs.js +0 -1
- package/dist/genie-C9gPjc6J.es.js +0 -6
- package/dist/genie-DGsxMAbQ.cjs.js +0 -1
- package/dist/gherkin-CVV6nEUH.cjs.js +0 -1
- package/dist/gherkin-bka1Exbx.es.js +0 -6
- package/dist/git-commit-BRJ1E4Bx.es.js +0 -8
- package/dist/git-commit-CwfgI4fD.cjs.js +0 -1
- package/dist/git-rebase-C3X7aMpn.es.js +0 -8
- package/dist/git-rebase-DUvbIQDw.cjs.js +0 -1
- package/dist/github-dark-BKL9xNgN.cjs.js +0 -1
- package/dist/github-dark-DenFmJkN.es.js +0 -4
- package/dist/github-dark-default-BJPUVz4H.es.js +0 -4
- package/dist/github-dark-default-Dsv5MuSi.cjs.js +0 -1
- package/dist/github-dark-dimmed-CtB9hz8U.cjs.js +0 -1
- package/dist/github-dark-dimmed-DUshB20C.es.js +0 -4
- package/dist/github-dark-high-contrast-BqZVM-jF.cjs.js +0 -1
- package/dist/github-dark-high-contrast-D3aGCnF8.es.js +0 -4
- package/dist/github-light-BFTOhCbz.cjs.js +0 -1
- package/dist/github-light-JYsPkUQd.es.js +0 -4
- package/dist/github-light-default-BZoWH9dH.cjs.js +0 -1
- package/dist/github-light-default-D99KPAby.es.js +0 -4
- package/dist/github-light-high-contrast-BbmZE-Mp.es.js +0 -4
- package/dist/github-light-high-contrast-Ks3kPGJU.cjs.js +0 -1
- package/dist/gleam-B4k9YFGD.es.js +0 -6
- package/dist/gleam-nR4mjrhK.cjs.js +0 -1
- package/dist/glimmer-js-C4MQf3Na.es.js +0 -14
- package/dist/glimmer-js-CNfyUqSb.cjs.js +0 -1
- package/dist/glimmer-ts-Bp7_dELi.cjs.js +0 -1
- package/dist/glimmer-ts-CoYpqZrZ.es.js +0 -14
- package/dist/glsl-BYTq1Tfl.es.js +0 -8
- package/dist/glsl-CIu1PL9X.cjs.js +0 -1
- package/dist/gnuplot-CurtDYoJ.cjs.js +0 -1
- package/dist/gnuplot-DnWoRZt-.es.js +0 -6
- package/dist/go-BErP6iv1.es.js +0 -6
- package/dist/go-CM9_GlwL.cjs.js +0 -1
- package/dist/graphql-BnnSMMC2.cjs.js +0 -1
- package/dist/graphql-g3nHRc0M.es.js +0 -14
- package/dist/groovy-BaVp9Il5.cjs.js +0 -1
- package/dist/groovy-IWs5-NIO.es.js +0 -6
- package/dist/hack-BVxH3fsq.cjs.js +0 -1
- package/dist/hack-wPAsyujS.es.js +0 -10
- package/dist/haml-4TJ757dz.es.js +0 -10
- package/dist/haml-vutdexHh.cjs.js +0 -1
- package/dist/handlebars-7GDLw__F.es.js +0 -14
- package/dist/handlebars-COmZnO8P.cjs.js +0 -1
- package/dist/haskell-CtlGos0K.es.js +0 -6
- package/dist/haskell-suhyCHEm.cjs.js +0 -1
- package/dist/haxe-BIQU1qHi.cjs.js +0 -1
- package/dist/haxe-CZZ33vZw.es.js +0 -6
- package/dist/hcl-6hOg9WP4.es.js +0 -6
- package/dist/hcl-CbQ1yCnz.cjs.js +0 -1
- package/dist/hjson-CgwED-oz.es.js +0 -6
- package/dist/hjson-Ddklb4QM.cjs.js +0 -1
- package/dist/hlsl-3-lv4gi7.es.js +0 -6
- package/dist/hlsl-B4NkiBfC.cjs.js +0 -1
- package/dist/houston-BDYrDoDW.es.js +0 -4
- package/dist/houston-T57H3gQZ.cjs.js +0 -1
- package/dist/html-Dc-Bg17s.cjs.js +0 -1
- package/dist/html-PSPajZka.es.js +0 -10
- package/dist/html-derivative-Brb3b4aI.es.js +0 -8
- package/dist/html-derivative-CY9mJeT0.cjs.js +0 -1
- package/dist/http-BrKsebcH.cjs.js +0 -1
- package/dist/http-CWBcr-Ch.es.js +0 -14
- package/dist/hxml-DLduiIv3.es.js +0 -8
- package/dist/hxml-DbGPHkY4.cjs.js +0 -1
- package/dist/hy-C2xHhR6I.es.js +0 -6
- package/dist/hy-DpyTdO3T.cjs.js +0 -1
- package/dist/imba-BEYqRZzB.es.js +0 -8
- package/dist/imba-CAIkF-GD.cjs.js +0 -1
- package/dist/ini-BUcvsX-U.es.js +0 -6
- package/dist/ini-CymULaw_.cjs.js +0 -1
- package/dist/java-B7odJ7Ap.es.js +0 -6
- package/dist/java-Bn1Lvoni.cjs.js +0 -1
- package/dist/javascript-Bnnicc83.cjs.js +0 -1
- package/dist/javascript-fa8UlHZE.es.js +0 -6
- package/dist/jinja-BoeZymy4.cjs.js +0 -1
- package/dist/jinja-DKLHYjK0.es.js +0 -11
- package/dist/jison-C0DlFEjB.cjs.js +0 -1
- package/dist/jison-CzPfUIvM.es.js +0 -8
- package/dist/json-71t8ZF9g.es.js +0 -6
- package/dist/json-y-J1j5EW.cjs.js +0 -1
- package/dist/json5-CzvlWgZ7.cjs.js +0 -1
- package/dist/json5-Z7F6rA6a.es.js +0 -6
- package/dist/jsonc-BnhWfmQw.cjs.js +0 -1
- package/dist/jsonc-Dphhs4m2.es.js +0 -6
- package/dist/jsonl-BbGkWPJz.cjs.js +0 -1
- package/dist/jsonl-D9jj92Gg.es.js +0 -6
- package/dist/jsonnet-Bn--UDZ1.cjs.js +0 -1
- package/dist/jsonnet-DEQ7IUoJ.es.js +0 -6
- package/dist/jssm-4CSVp8lc.cjs.js +0 -1
- package/dist/jssm-j74e88UX.es.js +0 -6
- package/dist/jsx-Bkesy5tT.es.js +0 -6
- package/dist/jsx-D8YwVp-7.cjs.js +0 -1
- package/dist/julia-B_r6juN7.es.js +0 -16
- package/dist/julia-DLxGoAlk.cjs.js +0 -1
- package/dist/kanagawa-dragon-BJZF7xDr.cjs.js +0 -1
- package/dist/kanagawa-dragon-CiKur4Hl.es.js +0 -4
- package/dist/kanagawa-lotus-BKu-smKu.es.js +0 -4
- package/dist/kanagawa-lotus-BhgzmRV4.cjs.js +0 -1
- package/dist/kanagawa-wave-BgJip59C.cjs.js +0 -1
- package/dist/kanagawa-wave-CQwozSzG.es.js +0 -4
- package/dist/kotlin-DCgZY7Ii.es.js +0 -6
- package/dist/kotlin-DDI6myF6.cjs.js +0 -1
- package/dist/kusto-Cw029H-v.es.js +0 -6
- package/dist/kusto-OZxALJZT.cjs.js +0 -1
- package/dist/laserwave--izBLY1I.cjs.js +0 -1
- package/dist/laserwave-6a00oqik.es.js +0 -4
- package/dist/latex-CXOK56Uv.cjs.js +0 -1
- package/dist/latex-GxBxlqbc.es.js +0 -8
- package/dist/lean-CYSet4vs.es.js +0 -6
- package/dist/lean-D1iY-35j.cjs.js +0 -1
- package/dist/less-DIaY7vQJ.cjs.js +0 -1
- package/dist/less-DQA4v-Nm.es.js +0 -6
- package/dist/light-plus-B5D0le0o.cjs.js +0 -1
- package/dist/light-plus-CZuVqSLX.es.js +0 -4
- package/dist/liquid-BYouVITI.cjs.js +0 -1
- package/dist/liquid-BxBkR-z5.es.js +0 -14
- package/dist/log-BIXUeBaj.cjs.js +0 -1
- package/dist/log-D2eRfqDn.es.js +0 -6
- package/dist/logo-B2d3b27P.cjs.js +0 -1
- package/dist/logo-QEAtGWZ9.es.js +0 -6
- package/dist/lua-B2_GGnC5.cjs.js +0 -1
- package/dist/lua-DeXVjwzF.es.js +0 -8
- package/dist/luau-BjYGiqID.es.js +0 -6
- package/dist/luau-CvqAeq4F.cjs.js +0 -1
- package/dist/make-BjuHP00g.es.js +0 -6
- package/dist/make-Oob5Z9Pk.cjs.js +0 -1
- package/dist/markdown-B6guhLWd.es.js +0 -6
- package/dist/markdown-BGBuj4LZ.cjs.js +0 -1
- package/dist/marko-CS7eEGs3.cjs.js +0 -1
- package/dist/marko-DwPYPpB3.es.js +0 -14
- package/dist/material-theme-D6KBX41T.es.js +0 -4
- package/dist/material-theme-Dj0-OyRN.cjs.js +0 -1
- package/dist/material-theme-darker-CkRroheE.es.js +0 -4
- package/dist/material-theme-darker-Dvfs29ir.cjs.js +0 -1
- package/dist/material-theme-lighter-BUBw43Yz.es.js +0 -4
- package/dist/material-theme-lighter-EU3ZGl_r.cjs.js +0 -1
- package/dist/material-theme-ocean-ClGX14Ja.es.js +0 -4
- package/dist/material-theme-ocean-px_3Pwqa.cjs.js +0 -1
- package/dist/material-theme-palenight-38jxvsGX.cjs.js +0 -1
- package/dist/material-theme-palenight-C1RVm8K1.es.js +0 -4
- package/dist/matlab-BpQlIJiw.es.js +0 -6
- package/dist/matlab-CbN2rF6P.cjs.js +0 -1
- package/dist/mdc-Bkl-bu_Z.cjs.js +0 -1
- package/dist/mdc-X4YjkufV.es.js +0 -12
- package/dist/mdx-Cl31h8mi.cjs.js +0 -1
- package/dist/mdx-DIoECIFU.es.js +0 -6
- package/dist/mermaid-BZ7WHNIe.es.js +0 -6
- package/dist/mermaid-CSogK_LM.cjs.js +0 -1
- package/dist/min-dark-C7ak0t6c.es.js +0 -4
- package/dist/min-dark-tt5o_I5e.cjs.js +0 -1
- package/dist/min-light-CKFxVcPp.es.js +0 -4
- package/dist/min-light-tmTHl_CQ.cjs.js +0 -1
- package/dist/mipsasm-BseoYJQp.cjs.js +0 -1
- package/dist/mipsasm-DusDYkFc.es.js +0 -6
- package/dist/mojo-CY9jaezJ.es.js +0 -6
- package/dist/mojo-D8QAG3Ze.cjs.js +0 -1
- package/dist/monokai-C1KBYcO0.es.js +0 -4
- package/dist/monokai-DMIxv6MM.cjs.js +0 -1
- package/dist/move-ChphFumd.es.js +0 -6
- package/dist/move-DaBrcjat.cjs.js +0 -1
- package/dist/narrat-Dz4d7OmN.es.js +0 -6
- package/dist/narrat-oOfAO4q8.cjs.js +0 -1
- package/dist/nextflow-BxJSKvPb.cjs.js +0 -1
- package/dist/nextflow-DW0Yq9a2.es.js +0 -6
- package/dist/nginx-ChI-VqNT.es.js +0 -8
- package/dist/nginx-LuyFICzP.cjs.js +0 -1
- package/dist/night-owl-BN78kThQ.cjs.js +0 -1
- package/dist/night-owl-Bm2rzalh.es.js +0 -4
- package/dist/nim-BiJA-5u7.es.js +0 -20
- package/dist/nim-DkC83hsN.cjs.js +0 -1
- package/dist/nix-Cg5uV_xg.es.js +0 -6
- package/dist/nix-DNME0Ea7.cjs.js +0 -1
- package/dist/nord-CC5OiUXg.es.js +0 -4
- package/dist/nord-Ca5AGUWc.cjs.js +0 -1
- package/dist/nushell-BfRnzRWn.es.js +0 -6
- package/dist/nushell-DI9Z3l3M.cjs.js +0 -1
- package/dist/objective-c-BGg9R27G.es.js +0 -6
- package/dist/objective-c-DVx8Rcni.cjs.js +0 -1
- package/dist/objective-cpp-CJ3y3V_5.es.js +0 -6
- package/dist/objective-cpp-s6XI7Jvk.cjs.js +0 -1
- package/dist/ocaml-BZLsfx_o.es.js +0 -6
- package/dist/ocaml-kUzDDUf2.cjs.js +0 -1
- package/dist/one-dark-pro-D7-kP8fv.es.js +0 -4
- package/dist/one-dark-pro-JOzzHStv.cjs.js +0 -1
- package/dist/one-light-020-h_lv.cjs.js +0 -1
- package/dist/one-light-D9sNaUtq.es.js +0 -4
- package/dist/pascal-D509_I72.cjs.js +0 -1
- package/dist/pascal-l2bqd7Dz.es.js +0 -6
- package/dist/perl-CkXYjL3t.es.js +0 -16
- package/dist/perl-DUnCLRB_.cjs.js +0 -1
- package/dist/php-D0k1sQr6.cjs.js +0 -1
- package/dist/php-q40Yjh5d.es.js +0 -18
- package/dist/plastic-CSTz3KZp.es.js +0 -4
- package/dist/plastic-r5piqq-S.cjs.js +0 -1
- package/dist/plsql-C_qH_YOK.cjs.js +0 -1
- package/dist/plsql-oVq_K_wH.es.js +0 -6
- package/dist/po-5jaeIyVd.es.js +0 -6
- package/dist/po-CBsLQIcu.cjs.js +0 -1
- package/dist/poimandres-BLP3NNjc.cjs.js +0 -1
- package/dist/poimandres-C-VADXHD.es.js +0 -4
- package/dist/polar-De-CDeYv.cjs.js +0 -1
- package/dist/polar-wcLp8ci7.es.js +0 -6
- package/dist/postcss-BZ3MNRIJ.es.js +0 -6
- package/dist/postcss-BtcsgaYj.cjs.js +0 -1
- package/dist/powerquery-B0rHn13V.cjs.js +0 -1
- package/dist/powerquery-CgRa2XRw.es.js +0 -6
- package/dist/powershell-Diwyv8Eh.es.js +0 -6
- package/dist/powershell-rCX2OYXT.cjs.js +0 -1
- package/dist/prisma-BaaUHYMp.cjs.js +0 -1
- package/dist/prisma-COL_v1x4.es.js +0 -6
- package/dist/prolog-CuvJOxqT.es.js +0 -6
- package/dist/prolog-DrXD2tGS.cjs.js +0 -1
- package/dist/proto-BtmQjBQu.cjs.js +0 -1
- package/dist/proto-o9HLmF90.es.js +0 -6
- package/dist/pug-Br4hpvIv.es.js +0 -12
- package/dist/pug-CFQMpTUe.cjs.js +0 -1
- package/dist/puppet-cIrXIuy8.cjs.js +0 -1
- package/dist/puppet-wpGOnQp5.es.js +0 -6
- package/dist/purescript-B_1NgE2N.es.js +0 -6
- package/dist/purescript-CX9QPs2N.cjs.js +0 -1
- package/dist/python-B9x3euv6.cjs.js +0 -1
- package/dist/python-xYxLFJY-.es.js +0 -6
- package/dist/qml-CzqrIM5W.cjs.js +0 -1
- package/dist/qml-D5gi21kK.es.js +0 -8
- package/dist/qmldir-BInDYbpo.es.js +0 -6
- package/dist/qmldir-DNF9H2ir.cjs.js +0 -1
- package/dist/qss-C744dLby.cjs.js +0 -1
- package/dist/qss-D-h4NdUG.es.js +0 -6
- package/dist/r-DgOc9oMe.cjs.js +0 -1
- package/dist/r-F-9I-ITZ.es.js +0 -6
- package/dist/racket-BoD1TBFT.es.js +0 -6
- package/dist/racket-Do9_vqnd.cjs.js +0 -1
- package/dist/raku-BW8wAUIz.cjs.js +0 -1
- package/dist/raku-IaYcw19m.es.js +0 -6
- package/dist/razor-Bt_t1YJb.es.js +0 -10
- package/dist/razor-COQhlwWF.cjs.js +0 -1
- package/dist/red-7y8PH7HH.es.js +0 -4
- package/dist/red-BQGOv1D5.cjs.js +0 -1
- package/dist/reg-CGWN_v-z.cjs.js +0 -1
- package/dist/reg-CMUdAgIP.es.js +0 -6
- package/dist/regexp-GiFkbxS-.es.js +0 -6
- package/dist/regexp-N7Z4hEeU.cjs.js +0 -1
- package/dist/rel-BYqA7mnV.cjs.js +0 -1
- package/dist/rel-BaRn3QX7.es.js +0 -6
- package/dist/riscv-B9V3SsvW.es.js +0 -6
- package/dist/riscv-ayQMUpo9.cjs.js +0 -1
- package/dist/rose-pine-DKEdv1Oe.cjs.js +0 -1
- package/dist/rose-pine-DhT-HZE9.es.js +0 -4
- package/dist/rose-pine-dawn-Bvt6DtVH.cjs.js +0 -1
- package/dist/rose-pine-dawn-DiCjL2i4.es.js +0 -4
- package/dist/rose-pine-moon-BNmGHlcn.es.js +0 -4
- package/dist/rose-pine-moon-cHuJy0Ng.cjs.js +0 -1
- package/dist/rst-BmKw97ch.es.js +0 -22
- package/dist/rst-Bq-h_T5U.cjs.js +0 -1
- package/dist/ruby-Bw5IEIKD.cjs.js +0 -1
- package/dist/ruby-cs7BSa_9.es.js +0 -30
- package/dist/rust-BnFKGEfa.cjs.js +0 -1
- package/dist/rust-Pc7DCsZD.es.js +0 -6
- package/dist/sas-BWKaSYkZ.cjs.js +0 -1
- package/dist/sas-DgvHx4mL.es.js +0 -8
- package/dist/sass-B9gYryDE.cjs.js +0 -1
- package/dist/sass-iCyS6eP9.es.js +0 -6
- package/dist/scala-C85dOwSU.cjs.js +0 -1
- package/dist/scala-Cly-fENF.es.js +0 -6
- package/dist/scheme-B_XUaARm.cjs.js +0 -1
- package/dist/scheme-Zi24oEYu.es.js +0 -6
- package/dist/scss-B_hSZppj.es.js +0 -8
- package/dist/scss-CV3c8_Y7.cjs.js +0 -1
- package/dist/sdbl-7Y5u0OW0.cjs.js +0 -1
- package/dist/sdbl-BBamrXFL.es.js +0 -6
- package/dist/shaderlab-CJ8U2E2w.cjs.js +0 -1
- package/dist/shaderlab-U9mqcu_f.es.js +0 -8
- package/dist/shellscript-3DYM9fut.cjs.js +0 -1
- package/dist/shellscript-Dn0-btNd.es.js +0 -6
- package/dist/shellsession-CbKmorC3.cjs.js +0 -1
- package/dist/shellsession-LvXGClmj.es.js +0 -8
- package/dist/slack-dark-akqwQ7ED.cjs.js +0 -1
- package/dist/slack-dark-i7wN4OET.es.js +0 -4
- package/dist/slack-ochin-BoQQWmTv.cjs.js +0 -1
- package/dist/slack-ochin-ndHf0LoP.es.js +0 -4
- package/dist/smalltalk-CCvytUuW.cjs.js +0 -1
- package/dist/smalltalk-Cns31tKw.es.js +0 -6
- package/dist/snazzy-light-BlSJXAu4.es.js +0 -4
- package/dist/snazzy-light-D_IwRieF.cjs.js +0 -1
- package/dist/solarized-dark-UTmkh7lw.es.js +0 -4
- package/dist/solarized-dark-gmm-WbDC.cjs.js +0 -1
- package/dist/solarized-light-BheCkDPT.es.js +0 -4
- package/dist/solarized-light-DzcxRSZP.cjs.js +0 -1
- package/dist/solidity-BG_k8fA_.es.js +0 -6
- package/dist/solidity-BcNcjFC4.cjs.js +0 -1
- package/dist/soy-B2d9ZydM.cjs.js +0 -1
- package/dist/soy-C0yEn39K.es.js +0 -8
- package/dist/sparql-CiBxIK0g.cjs.js +0 -1
- package/dist/sparql-CuZaxpno.es.js +0 -8
- package/dist/splunk-CTqDjQdo.es.js +0 -6
- package/dist/splunk-CzITjJj7.cjs.js +0 -1
- package/dist/sql-BqWZrLHB.cjs.js +0 -1
- package/dist/sql-DCkt643-.es.js +0 -6
- package/dist/ssh-config-DHHGll-v.es.js +0 -6
- package/dist/ssh-config-DUPeuEdB.cjs.js +0 -1
- package/dist/stata-B8m3qL-x.cjs.js +0 -1
- package/dist/stata-Dv81f34z.es.js +0 -8
- package/dist/stylus-ByHs6N-o.cjs.js +0 -1
- package/dist/stylus-n_9f0QQ5.es.js +0 -6
- package/dist/svelte-CfLoBBrI.cjs.js +0 -1
- package/dist/svelte-SoJd35Jr.es.js +0 -14
- package/dist/swift-BAWqNR8A.es.js +0 -6
- package/dist/swift-C5DnOriA.cjs.js +0 -1
- package/dist/synthwave-84-BBRLOmNT.cjs.js +0 -1
- package/dist/synthwave-84-NU3C_KFZ.es.js +0 -4
- package/dist/system-verilog-ClPLYLwh.cjs.js +0 -1
- package/dist/system-verilog-Cui-g-ut.es.js +0 -6
- package/dist/systemd-BASX0DlX.cjs.js +0 -1
- package/dist/systemd-CsKYQIQK.es.js +0 -6
- package/dist/talonscript-D2dGh8FO.es.js +0 -6
- package/dist/talonscript-DkCSnLHD.cjs.js +0 -1
- package/dist/tasl-BAQJK7KZ.cjs.js +0 -1
- package/dist/tasl-D3W8HMV6.es.js +0 -6
- package/dist/tcl-2y0Fuc4S.es.js +0 -6
- package/dist/tcl-CwJAYTvh.cjs.js +0 -1
- package/dist/templ-BSMv2wKZ.cjs.js +0 -1
- package/dist/templ-C7he2afp.es.js +0 -12
- package/dist/terraform-BGW6Oerf.es.js +0 -6
- package/dist/terraform-s-pzyVvp.cjs.js +0 -1
- package/dist/tex-B0y3cEZp.es.js +0 -8
- package/dist/tex-DwtFCA08.cjs.js +0 -1
- package/dist/tokyo-night-9T7_vGSy.cjs.js +0 -1
- package/dist/tokyo-night-LhP3hHhi.es.js +0 -4
- package/dist/toml-CQSfOn0e.es.js +0 -6
- package/dist/toml-CyMM7IXy.cjs.js +0 -1
- package/dist/ts-tags-C5-4VQhf.es.js +0 -41
- package/dist/ts-tags-MIr66hKK.cjs.js +0 -1
- package/dist/tsv-BtvSkaG0.es.js +0 -6
- package/dist/tsv-DqNGnuVj.cjs.js +0 -1
- package/dist/tsx-DiGsgWT8.es.js +0 -6
- package/dist/tsx-DpBRUnKC.cjs.js +0 -1
- package/dist/turtle-BJ2wmjPc.es.js +0 -6
- package/dist/turtle-DfO3eAsu.cjs.js +0 -1
- package/dist/twig-BzjoX4ZJ.cjs.js +0 -1
- package/dist/twig-OmkATFdv.es.js +0 -18
- package/dist/typescript-BqvpT6pB.cjs.js +0 -1
- package/dist/typescript-buWNZFwO.es.js +0 -6
- package/dist/typespec-P-ZVy8yC.cjs.js +0 -1
- package/dist/typespec-bLbdsxJL.es.js +0 -6
- package/dist/typst-BVh2IsT9.cjs.js +0 -1
- package/dist/typst-Y9_SmXTs.es.js +0 -6
- package/dist/v-BUlE9136.cjs.js +0 -1
- package/dist/v-wa8Orrdd.es.js +0 -6
- package/dist/vala-BIymb2K_.cjs.js +0 -1
- package/dist/vala-DRdriFr_.es.js +0 -6
- package/dist/vb-E2_-jk4M.es.js +0 -6
- package/dist/vb-IXOh8mqV.cjs.js +0 -1
- package/dist/verilog-B1iBoR5_.es.js +0 -6
- package/dist/verilog-BiglCqvO.cjs.js +0 -1
- package/dist/vesper-CJsaOsSM.es.js +0 -4
- package/dist/vesper-DqLWLxOu.cjs.js +0 -1
- package/dist/vhdl-CJUzuS2t.cjs.js +0 -1
- package/dist/vhdl-CRVaAhXk.es.js +0 -6
- package/dist/viml-B-zWOd7Z.es.js +0 -6
- package/dist/viml-B1nKLcgt.cjs.js +0 -1
- package/dist/vitesse-black-BoGvW84i.es.js +0 -4
- package/dist/vitesse-black-MF-1S1MG.cjs.js +0 -1
- package/dist/vitesse-dark-Cym-eLtO.es.js +0 -4
- package/dist/vitesse-dark-SIffJYSe.cjs.js +0 -1
- package/dist/vitesse-light-CcmG315c.es.js +0 -4
- package/dist/vitesse-light-U63SkYGT.cjs.js +0 -1
- package/dist/vue-DCwwWMGI.es.js +0 -31
- package/dist/vue-DYZqcRaZ.cjs.js +0 -1
- package/dist/vue-html-CdPbyrq1.cjs.js +0 -1
- package/dist/vue-html-sRE_Ny23.es.js +0 -10
- package/dist/vyper-CO9xUkIY.cjs.js +0 -1
- package/dist/vyper-DWutKXpa.es.js +0 -6
- package/dist/wasm-Bv5f0gKv.es.js +0 -6
- package/dist/wasm-CdIThIat.cjs.js +0 -1
- package/dist/wenyan-BMYnfus1.es.js +0 -6
- package/dist/wenyan-BSJ3fk7e.cjs.js +0 -1
- package/dist/wgsl-DnPoPGDU.es.js +0 -6
- package/dist/wgsl-d3zZE7ZN.cjs.js +0 -1
- package/dist/wikitext-BRCqXN2g.cjs.js +0 -1
- package/dist/wikitext-CntM04PE.es.js +0 -6
- package/dist/wolfram-C3rR92zj.cjs.js +0 -1
- package/dist/wolfram-Ws5qPlX9.es.js +0 -6
- package/dist/xml-BRLTD55J.cjs.js +0 -1
- package/dist/xml-Ch1q_kJp.es.js +0 -8
- package/dist/xsl-DyL8yqXw.es.js +0 -8
- package/dist/xsl-ETbYGV_-.cjs.js +0 -1
- package/dist/yaml-7DV6pRKj.cjs.js +0 -1
- package/dist/yaml-Bbg74JKr.es.js +0 -6
- package/dist/zenscript-BWMxwjeH.cjs.js +0 -1
- package/dist/zenscript-C0RKE4nU.es.js +0 -6
- package/dist/zig-D6SXBGNm.es.js +0 -6
- package/dist/zig-yAcNfpgW.cjs.js +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { DimensionFilter } from "./DimensionFilter";
|
|
2
|
+
export type {
|
|
3
|
+
DimensionFilterProps,
|
|
4
|
+
RetrievalFunction,
|
|
5
|
+
} from "./DimensionFilter";
|
|
6
|
+
export {
|
|
7
|
+
extractDimensionSpecs,
|
|
8
|
+
extractSourceFromQuery,
|
|
9
|
+
generateFilterClause,
|
|
10
|
+
getJoinedSources,
|
|
11
|
+
injectWhereClause,
|
|
12
|
+
parseAllSourceInfos,
|
|
13
|
+
parseDimensionFilterAnnotation,
|
|
14
|
+
parseNotebookFilterAnnotation,
|
|
15
|
+
} from "./utils";
|
|
16
|
+
export type {
|
|
17
|
+
DimensionFilterAnnotation,
|
|
18
|
+
FilterSpec,
|
|
19
|
+
NotebookFilterConfig,
|
|
20
|
+
} from "./utils";
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import * as Malloy from "@malloydata/malloy-interfaces";
|
|
2
|
+
import {
|
|
3
|
+
DimensionSpec,
|
|
4
|
+
FilterType,
|
|
5
|
+
} from "../../hooks/useDimensionalFilterRangeData";
|
|
6
|
+
import { FilterSelection } from "../../hooks/useDimensionFilters";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A single filter specification with source and dimension
|
|
10
|
+
* Parsed from "source.dimension" string format
|
|
11
|
+
*/
|
|
12
|
+
export interface FilterSpec {
|
|
13
|
+
source: string;
|
|
14
|
+
dimension: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Configuration parsed from notebook ##(filter) annotation
|
|
19
|
+
*/
|
|
20
|
+
export interface NotebookFilterConfig {
|
|
21
|
+
filters: FilterSpec[];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Filter annotation parsed from dimension #(filter) tag
|
|
26
|
+
*/
|
|
27
|
+
export interface DimensionFilterAnnotation {
|
|
28
|
+
type: FilterType;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Get the names of all sources that are joined into a given source
|
|
33
|
+
* Looks for fields with kind: "join" in the SourceInfo
|
|
34
|
+
*/
|
|
35
|
+
export function getJoinedSources(sourceInfo: Malloy.SourceInfo): Set<string> {
|
|
36
|
+
const joinedSources = new Set<string>();
|
|
37
|
+
|
|
38
|
+
const fields = sourceInfo.schema?.fields;
|
|
39
|
+
if (!fields) return joinedSources;
|
|
40
|
+
|
|
41
|
+
for (const field of fields) {
|
|
42
|
+
// Check if this field is a join (kind === "join")
|
|
43
|
+
if ("kind" in field && field.kind === "join" && field.name) {
|
|
44
|
+
joinedSources.add(field.name);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return joinedSources;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Parse ##(filter) annotation from notebook annotations
|
|
52
|
+
* Format: ##(filters) ["source.dimension", "source2.dimension2", ...]
|
|
53
|
+
* Returns the filter config or null if not found
|
|
54
|
+
*/
|
|
55
|
+
export function parseNotebookFilterAnnotation(
|
|
56
|
+
annotations: string[] | undefined,
|
|
57
|
+
): NotebookFilterConfig | null {
|
|
58
|
+
if (!annotations) return null;
|
|
59
|
+
|
|
60
|
+
for (const annotation of annotations) {
|
|
61
|
+
if (annotation.startsWith("##(filters)")) {
|
|
62
|
+
const jsonPart = annotation.slice("##(filters)".length).trim();
|
|
63
|
+
try {
|
|
64
|
+
const parsed = JSON.parse(jsonPart);
|
|
65
|
+
// Format: array of "source.dimension" strings
|
|
66
|
+
if (Array.isArray(parsed)) {
|
|
67
|
+
const filters: FilterSpec[] = [];
|
|
68
|
+
for (const item of parsed) {
|
|
69
|
+
if (typeof item === "string") {
|
|
70
|
+
const dotIndex = item.indexOf(".");
|
|
71
|
+
if (dotIndex > 0 && dotIndex < item.length - 1) {
|
|
72
|
+
filters.push({
|
|
73
|
+
source: item.substring(0, dotIndex),
|
|
74
|
+
dimension: item.substring(dotIndex + 1),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (filters.length > 0) {
|
|
80
|
+
return { filters };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
} catch (e) {
|
|
84
|
+
console.error(`Failed to parse "${annotation}" annotation:`, e);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Parse #(filter) annotation from a dimension annotation string
|
|
93
|
+
* Returns the filter annotation or null if not found
|
|
94
|
+
*/
|
|
95
|
+
export function parseDimensionFilterAnnotation(
|
|
96
|
+
annotation: string,
|
|
97
|
+
): DimensionFilterAnnotation | null {
|
|
98
|
+
if (annotation.startsWith("#(filter)")) {
|
|
99
|
+
const jsonPart = annotation.slice("#(filter)".length).trim();
|
|
100
|
+
try {
|
|
101
|
+
const config = JSON.parse(jsonPart);
|
|
102
|
+
if (config.type) {
|
|
103
|
+
return config as DimensionFilterAnnotation;
|
|
104
|
+
}
|
|
105
|
+
} catch (e) {
|
|
106
|
+
console.error(`Failed to parse "${annotation}" annotation:`, e);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Parse all source infos from notebook cells and create a map of source_name -> SourceInfo
|
|
114
|
+
* Also returns the model path from the first import statement found
|
|
115
|
+
*/
|
|
116
|
+
export function parseAllSourceInfos(
|
|
117
|
+
cells: Array<{ type?: string; newSources?: string[]; text?: string }>,
|
|
118
|
+
): { sourceInfoMap: Map<string, Malloy.SourceInfo>; modelPath: string } {
|
|
119
|
+
const sourceInfoMap = new Map<string, Malloy.SourceInfo>();
|
|
120
|
+
let modelPath = "";
|
|
121
|
+
|
|
122
|
+
for (const cell of cells) {
|
|
123
|
+
if (cell.type === "code") {
|
|
124
|
+
// Extract model path from the first import statement found
|
|
125
|
+
if (!modelPath && cell.text) {
|
|
126
|
+
const importMatch = cell.text.match(
|
|
127
|
+
/import\s+(?:\{[^}]*\}\s+from\s+)?['"]([^'"]+)['"]/,
|
|
128
|
+
);
|
|
129
|
+
if (importMatch) {
|
|
130
|
+
modelPath = importMatch[1];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Parse all newSources in this cell
|
|
135
|
+
if (cell.newSources && cell.newSources.length > 0) {
|
|
136
|
+
for (const sourceJson of cell.newSources) {
|
|
137
|
+
try {
|
|
138
|
+
const sourceInfo = JSON.parse(
|
|
139
|
+
sourceJson,
|
|
140
|
+
) as Malloy.SourceInfo;
|
|
141
|
+
if (sourceInfo.name) {
|
|
142
|
+
sourceInfoMap.set(sourceInfo.name, sourceInfo);
|
|
143
|
+
}
|
|
144
|
+
} catch (e) {
|
|
145
|
+
console.error("Failed to parse SourceInfo:", e);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return { sourceInfoMap, modelPath };
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Extract dimension specs from SourceInfo map based on filter specs from notebook annotation
|
|
157
|
+
* Looks for #(filter) annotations on the dimensions to determine filter types
|
|
158
|
+
* Each spec includes source and model for proper query routing
|
|
159
|
+
*/
|
|
160
|
+
export function extractDimensionSpecs(
|
|
161
|
+
sourceInfoMap: Map<string, Malloy.SourceInfo>,
|
|
162
|
+
filterSpecs: FilterSpec[],
|
|
163
|
+
modelPath: string,
|
|
164
|
+
): DimensionSpec[] {
|
|
165
|
+
const specs: DimensionSpec[] = [];
|
|
166
|
+
for (const { source, dimension } of filterSpecs) {
|
|
167
|
+
const sourceInfo = sourceInfoMap.get(source);
|
|
168
|
+
|
|
169
|
+
if (!sourceInfo) {
|
|
170
|
+
console.warn(`Source "${source}" not found in notebook sources`);
|
|
171
|
+
// Still add the spec with default filter type
|
|
172
|
+
specs.push({
|
|
173
|
+
source,
|
|
174
|
+
model: modelPath,
|
|
175
|
+
dimensionName: dimension,
|
|
176
|
+
filterType: "Star",
|
|
177
|
+
});
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Access fields through schema.fields
|
|
182
|
+
const fields = sourceInfo.schema?.fields;
|
|
183
|
+
if (!fields) {
|
|
184
|
+
specs.push({
|
|
185
|
+
source,
|
|
186
|
+
model: modelPath,
|
|
187
|
+
dimensionName: dimension,
|
|
188
|
+
filterType: "Star",
|
|
189
|
+
});
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Find the field in the source info
|
|
194
|
+
const field = fields.find((f) => f.name === dimension);
|
|
195
|
+
|
|
196
|
+
if (!field) {
|
|
197
|
+
console.warn(
|
|
198
|
+
`Dimension "${dimension}" not found in source "${source}"`,
|
|
199
|
+
);
|
|
200
|
+
specs.push({
|
|
201
|
+
source,
|
|
202
|
+
model: modelPath,
|
|
203
|
+
dimensionName: dimension,
|
|
204
|
+
filterType: "Star",
|
|
205
|
+
});
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Check for #(filter) annotation
|
|
210
|
+
let filterType: FilterType = "Star"; // Default
|
|
211
|
+
|
|
212
|
+
// Check annotations on the field (dimension/measure fields have annotations)
|
|
213
|
+
if ("annotations" in field && field.annotations) {
|
|
214
|
+
for (const annotation of field.annotations) {
|
|
215
|
+
// Annotation type has a 'value' property
|
|
216
|
+
if (annotation.value) {
|
|
217
|
+
const filterAnn = parseDimensionFilterAnnotation(
|
|
218
|
+
annotation.value,
|
|
219
|
+
);
|
|
220
|
+
if (filterAnn) {
|
|
221
|
+
filterType = filterAnn.type;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
specs.push({
|
|
229
|
+
source,
|
|
230
|
+
model: modelPath,
|
|
231
|
+
dimensionName: dimension,
|
|
232
|
+
filterType,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return specs;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Generate a Malloy WHERE clause filter string from filter selections
|
|
241
|
+
* Uses source.dimension format only for joined sources (not the query's main source)
|
|
242
|
+
*/
|
|
243
|
+
export function generateFilterClause(
|
|
244
|
+
activeFilters: FilterSelection[],
|
|
245
|
+
dimensionToSourceMap: Map<string, string>,
|
|
246
|
+
querySourceName: string | null,
|
|
247
|
+
): string {
|
|
248
|
+
if (activeFilters.length === 0) return "";
|
|
249
|
+
|
|
250
|
+
const conditions = activeFilters
|
|
251
|
+
.map((selection) => {
|
|
252
|
+
const { dimensionName, matchType, value, value2 } = selection;
|
|
253
|
+
// Get the source name for this dimension
|
|
254
|
+
const filterSourceName = dimensionToSourceMap.get(dimensionName);
|
|
255
|
+
// Only use source.dimension format if the filter's source is different from the query's source
|
|
256
|
+
// (i.e., it's a joined source, not the main source)
|
|
257
|
+
const needsSourcePrefix =
|
|
258
|
+
filterSourceName && filterSourceName !== querySourceName;
|
|
259
|
+
const fieldName = needsSourcePrefix
|
|
260
|
+
? `\`${filterSourceName}\`.\`${dimensionName}\``
|
|
261
|
+
: `\`${dimensionName}\``;
|
|
262
|
+
const isDate = value instanceof Date;
|
|
263
|
+
|
|
264
|
+
const formatValue = (
|
|
265
|
+
v: unknown,
|
|
266
|
+
isDateVal: boolean = false,
|
|
267
|
+
): string => {
|
|
268
|
+
if (v === null || v === undefined) return "null";
|
|
269
|
+
if (isDateVal && v instanceof Date) {
|
|
270
|
+
return `@${v.getFullYear()}-${String(v.getMonth() + 1).padStart(2, "0")}-${String(v.getDate()).padStart(2, "0")}`;
|
|
271
|
+
}
|
|
272
|
+
if (typeof v === "string") {
|
|
273
|
+
return `'${v.replace(/'/g, "\\'")}'`;
|
|
274
|
+
}
|
|
275
|
+
if (typeof v === "boolean") return v ? "true" : "false";
|
|
276
|
+
return String(v);
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
switch (matchType) {
|
|
280
|
+
case "Equals":
|
|
281
|
+
case "Concept Search":
|
|
282
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
283
|
+
const conditions = value.map(
|
|
284
|
+
(v) => `${fieldName} = ${formatValue(v, isDate)}`,
|
|
285
|
+
);
|
|
286
|
+
return `(${conditions.join(" or ")})`;
|
|
287
|
+
}
|
|
288
|
+
return `${fieldName} = ${formatValue(value, isDate)}`;
|
|
289
|
+
|
|
290
|
+
case "Contains":
|
|
291
|
+
if (typeof value === "string") {
|
|
292
|
+
return `${fieldName} ~ f'%${value.replace(/'/g, "\\'")}%'`;
|
|
293
|
+
}
|
|
294
|
+
return `${fieldName} = ${formatValue(value)}`;
|
|
295
|
+
|
|
296
|
+
case "After":
|
|
297
|
+
case "Greater Than":
|
|
298
|
+
return `${fieldName} > ${formatValue(value, isDate)}`;
|
|
299
|
+
|
|
300
|
+
case "Before":
|
|
301
|
+
case "Less Than":
|
|
302
|
+
return `${fieldName} < ${formatValue(value, isDate)}`;
|
|
303
|
+
|
|
304
|
+
case "Between":
|
|
305
|
+
if (value2 !== undefined) {
|
|
306
|
+
return `${fieldName} >= ${formatValue(value, isDate)} and ${fieldName} <= ${formatValue(value2, isDate)}`;
|
|
307
|
+
}
|
|
308
|
+
return `${fieldName} >= ${formatValue(value, isDate)}`;
|
|
309
|
+
|
|
310
|
+
default:
|
|
311
|
+
return "";
|
|
312
|
+
}
|
|
313
|
+
})
|
|
314
|
+
.filter((c) => c.length > 0);
|
|
315
|
+
|
|
316
|
+
return conditions.join(" and ");
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Extract the source name from a Malloy query
|
|
321
|
+
* Handles patterns like:
|
|
322
|
+
* - "run: source_name -> ..."
|
|
323
|
+
* - "run: source_name->view_name"
|
|
324
|
+
* Returns null if no source name can be extracted
|
|
325
|
+
*/
|
|
326
|
+
export function extractSourceFromQuery(query: string): string | null {
|
|
327
|
+
// Match "run:" followed by optional whitespace, then the source name
|
|
328
|
+
// Source name ends at "->" or whitespace
|
|
329
|
+
const runMatch = query.match(/run\s*:\s*(\w+)\s*->/);
|
|
330
|
+
if (runMatch) {
|
|
331
|
+
return runMatch[1];
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Also try matching without "run:" for inline queries
|
|
335
|
+
const arrowMatch = query.match(/^\s*(\w+)\s*->/m);
|
|
336
|
+
if (arrowMatch) {
|
|
337
|
+
return arrowMatch[1];
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Injects a where clause into a Malloy query by appending "+ {where: ...}"
|
|
345
|
+
* Uses Malloy's refinement syntax which works with any query pattern.
|
|
346
|
+
*/
|
|
347
|
+
export function injectWhereClause(query: string, filterClause: string): string {
|
|
348
|
+
// Simply append the where clause as a refinement
|
|
349
|
+
// This works for all patterns:
|
|
350
|
+
// - run: source -> { ... } + {where: ...}
|
|
351
|
+
// - run: source -> view_name + {where: ...}
|
|
352
|
+
// - run: source -> view_name + { ... } + {where: ...}
|
|
353
|
+
return `${query.trimEnd()} + {where: ${filterClause}}`;
|
|
354
|
+
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import {
|
|
2
|
+
import { createHighlighterCore } from "shiki/core";
|
|
3
|
+
import { createOnigurumaEngine } from "shiki/engine/oniguruma";
|
|
4
|
+
|
|
5
|
+
// Fine-grained imports - only the languages and theme we actually need
|
|
6
|
+
import langJson from "@shikijs/langs/json";
|
|
7
|
+
import langSql from "@shikijs/langs/sql";
|
|
8
|
+
import langTypescript from "@shikijs/langs/typescript";
|
|
9
|
+
import themeGithubLight from "@shikijs/themes/github-light";
|
|
3
10
|
|
|
4
11
|
const malloyTMGrammar = {
|
|
5
12
|
scopeName: "source.malloy",
|
|
@@ -618,12 +625,13 @@ const malloySQLTMGrammar = {
|
|
|
618
625
|
};
|
|
619
626
|
|
|
620
627
|
const THEME = "github-light";
|
|
621
|
-
const HIGHLIGHTER =
|
|
622
|
-
|
|
628
|
+
const HIGHLIGHTER = createHighlighterCore({
|
|
629
|
+
engine: createOnigurumaEngine(import("shiki/wasm")),
|
|
630
|
+
themes: [themeGithubLight],
|
|
623
631
|
langs: [
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
632
|
+
langSql,
|
|
633
|
+
langJson,
|
|
634
|
+
langTypescript,
|
|
627
635
|
{
|
|
628
636
|
name: "malloy",
|
|
629
637
|
scopeName: "source.malloy",
|
package/src/components/index.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
export { AnalyzePackageButton } from "./AnalyzePackageButton";
|
|
2
|
+
export { useRouterClickHandler } from "./click_helper";
|
|
3
|
+
export * from "./filter";
|
|
4
|
+
export * from "./Home";
|
|
5
|
+
export * from "./Loading";
|
|
1
6
|
export * from "./Model";
|
|
2
7
|
export * from "./Notebook";
|
|
3
|
-
export * from "./Workbook";
|
|
4
8
|
export * from "./Package";
|
|
5
9
|
export * from "./Project";
|
|
6
10
|
export * from "./QueryResult";
|
|
7
|
-
export * from "./
|
|
8
|
-
export * from "./Loading";
|
|
9
|
-
export { useRouterClickHandler } from "./click_helper";
|
|
11
|
+
export * from "./RenderedResult";
|
|
10
12
|
export { ServerProvider, useServer } from "./ServerProvider";
|
|
11
13
|
export type { ServerContextValue, ServerProviderProps } from "./ServerProvider";
|
|
12
|
-
export
|
|
14
|
+
export * from "./Workbook";
|
|
13
15
|
export type { WorkbookStorage } from "./Workbook";
|
|
14
|
-
export * from "./RenderedResult";
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Filter hooks and types
|
|
2
|
+
export {
|
|
3
|
+
useDimensionFilters,
|
|
4
|
+
type DimensionFilterState,
|
|
5
|
+
type FilterSelection,
|
|
6
|
+
type MatchType,
|
|
7
|
+
type UseDimensionFiltersParams,
|
|
8
|
+
type UseDimensionFiltersResult,
|
|
9
|
+
} from "./useDimensionFilters";
|
|
10
|
+
|
|
11
|
+
export {
|
|
12
|
+
useDimensionFiltersFromSpec,
|
|
13
|
+
type DimensionFiltersConfig,
|
|
14
|
+
type UseDimensionFiltersFromSpecOptions,
|
|
15
|
+
} from "./useDimensionFiltersFromSpec";
|
|
16
|
+
|
|
17
|
+
export {
|
|
18
|
+
useDimensionFiltersQuery,
|
|
19
|
+
type DimensionFiltersQueryResult,
|
|
20
|
+
type UseDimensionFiltersQueryParams,
|
|
21
|
+
} from "./useDimensionFiltersQuery";
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
useDimensionalFilterRangeData,
|
|
25
|
+
type DimensionalFilterRangeDataResult,
|
|
26
|
+
type DimensionSpec,
|
|
27
|
+
type DimensionValue,
|
|
28
|
+
type DimensionValues,
|
|
29
|
+
type FilterType,
|
|
30
|
+
type UseDimensionalFilterRangeDataParams,
|
|
31
|
+
} from "./useDimensionalFilterRangeData";
|