termcast 1.3.19 → 1.3.24
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/dist/ai.d.ts +104 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +135 -0
- package/dist/ai.js.map +1 -0
- package/dist/apis/browser-extension.d.ts +18 -0
- package/dist/apis/browser-extension.d.ts.map +1 -0
- package/dist/apis/browser-extension.js +14 -0
- package/dist/apis/browser-extension.js.map +1 -0
- package/dist/apis/localstorage.d.ts.map +1 -1
- package/dist/apis/localstorage.js +4 -7
- package/dist/apis/localstorage.js.map +1 -1
- package/dist/apis/oauth.d.ts.map +1 -1
- package/dist/apis/oauth.js +5 -1
- package/dist/apis/oauth.js.map +1 -1
- package/dist/apis/preferences.d.ts.map +1 -1
- package/dist/apis/preferences.js +38 -19
- package/dist/apis/preferences.js.map +1 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +2 -1
- package/dist/build.js.map +1 -1
- package/dist/cache.d.ts +32 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +205 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +69 -33
- package/dist/cli.js.map +1 -1
- package/dist/clipboard.d.ts +36 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +154 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +24 -6
- package/dist/compile.js.map +1 -1
- package/dist/components/actions.d.ts.map +1 -1
- package/dist/components/actions.js +56 -30
- package/dist/components/actions.js.map +1 -1
- package/dist/components/detail.d.ts.map +1 -1
- package/dist/components/detail.js +4 -0
- package/dist/components/detail.js.map +1 -1
- package/dist/components/dropdown.d.ts.map +1 -1
- package/dist/components/dropdown.js +38 -15
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/extension-preferences.d.ts.map +1 -1
- package/dist/components/extension-preferences.js +40 -13
- package/dist/components/extension-preferences.js.map +1 -1
- package/dist/components/form/checkbox.d.ts.map +1 -1
- package/dist/components/form/checkbox.js +5 -3
- package/dist/components/form/checkbox.js.map +1 -1
- package/dist/components/form/date-picker.d.ts.map +1 -1
- package/dist/components/form/date-picker.js +5 -3
- package/dist/components/form/date-picker.js.map +1 -1
- package/dist/components/form/description.d.ts.map +1 -1
- package/dist/components/form/description.js +2 -2
- package/dist/components/form/description.js.map +1 -1
- package/dist/components/form/dropdown.d.ts.map +1 -1
- package/dist/components/form/dropdown.js +84 -80
- package/dist/components/form/dropdown.js.map +1 -1
- package/dist/components/form/file-autocomplete.d.ts +3 -6
- package/dist/components/form/file-autocomplete.d.ts.map +1 -1
- package/dist/components/form/file-autocomplete.js +61 -66
- package/dist/components/form/file-autocomplete.js.map +1 -1
- package/dist/components/form/file-picker.d.ts.map +1 -1
- package/dist/components/form/file-picker.js +33 -30
- package/dist/components/form/file-picker.js.map +1 -1
- package/dist/components/form/form-end.d.ts.map +1 -1
- package/dist/components/form/form-end.js +21 -1
- package/dist/components/form/form-end.js.map +1 -1
- package/dist/components/form/form-type-only.d.ts +174 -0
- package/dist/components/form/form-type-only.d.ts.map +1 -0
- package/dist/components/form/form-type-only.js +2 -0
- package/dist/components/form/form-type-only.js.map +1 -0
- package/dist/components/form/index.d.ts +3 -1
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js +100 -28
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/form/password-field.d.ts.map +1 -1
- package/dist/components/form/password-field.js +5 -3
- package/dist/components/form/password-field.js.map +1 -1
- package/dist/components/form/text-area.d.ts.map +1 -1
- package/dist/components/form/text-area.js +5 -3
- package/dist/components/form/text-area.js.map +1 -1
- package/dist/components/form/text-field.d.ts.map +1 -1
- package/dist/components/form/text-field.js +6 -4
- package/dist/components/form/text-field.js.map +1 -1
- package/dist/components/form/types.d.ts +5 -0
- package/dist/components/form/types.d.ts.map +1 -1
- package/dist/components/form/use-form-handling.d.ts +4 -0
- package/dist/components/form/use-form-handling.d.ts.map +1 -0
- package/dist/components/form/use-form-handling.js +37 -0
- package/dist/components/form/use-form-handling.js.map +1 -0
- package/dist/components/form/with-left-border.d.ts +2 -1
- package/dist/components/form/with-left-border.d.ts.map +1 -1
- package/dist/components/form/with-left-border.js +27 -3
- package/dist/components/form/with-left-border.js.map +1 -1
- package/dist/components/icon.d.ts +1 -0
- package/dist/components/icon.d.ts.map +1 -1
- package/dist/components/icon.js +24 -8
- package/dist/components/icon.js.map +1 -1
- package/dist/components/list.d.ts +2 -2
- package/dist/components/list.d.ts.map +1 -1
- package/dist/components/list.js +140 -62
- package/dist/components/list.js.map +1 -1
- package/dist/components/loading-bar.d.ts.map +1 -1
- package/dist/components/loading-bar.js +2 -2
- package/dist/components/loading-bar.js.map +1 -1
- package/dist/components/loading-text.d.ts +8 -0
- package/dist/components/loading-text.d.ts.map +1 -0
- package/dist/components/loading-text.js +58 -0
- package/dist/components/loading-text.js.map +1 -0
- package/dist/descendants.js +1 -1
- package/dist/descendants.js.map +1 -1
- package/dist/dev-ui.d.ts +7 -0
- package/dist/dev-ui.d.ts.map +1 -0
- package/dist/dev-ui.js +118 -0
- package/dist/dev-ui.js.map +1 -0
- package/dist/environment.d.ts +63 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +189 -0
- package/dist/environment.js.map +1 -0
- package/dist/examples/datepicker.d.ts +2 -0
- package/dist/examples/datepicker.d.ts.map +1 -0
- package/dist/examples/datepicker.js +344 -0
- package/dist/examples/datepicker.js.map +1 -0
- package/dist/examples/file-autocomplete.vitest.d.ts +2 -0
- package/dist/examples/file-autocomplete.vitest.d.ts.map +1 -0
- package/dist/examples/file-autocomplete.vitest.js +223 -0
- package/dist/examples/file-autocomplete.vitest.js.map +1 -0
- package/dist/examples/form-basic-arrow-keys.vitest.d.ts +2 -0
- package/dist/examples/form-basic-arrow-keys.vitest.d.ts.map +1 -0
- package/dist/examples/form-basic-arrow-keys.vitest.js +46 -0
- package/dist/examples/form-basic-arrow-keys.vitest.js.map +1 -0
- package/dist/examples/form-basic.vitest.d.ts +2 -0
- package/dist/examples/form-basic.vitest.d.ts.map +1 -0
- package/dist/examples/form-basic.vitest.js +630 -0
- package/dist/examples/form-basic.vitest.js.map +1 -0
- package/dist/examples/form-dropdown-with-sections.d.ts +2 -0
- package/dist/examples/form-dropdown-with-sections.d.ts.map +1 -0
- package/dist/examples/form-dropdown-with-sections.js +13 -0
- package/dist/examples/form-dropdown-with-sections.js.map +1 -0
- package/dist/examples/form-dropdown-with-sections.vitest.d.ts +2 -0
- package/dist/examples/form-dropdown-with-sections.vitest.d.ts.map +1 -0
- package/dist/examples/form-dropdown-with-sections.vitest.js +75 -0
- package/dist/examples/form-dropdown-with-sections.vitest.js.map +1 -0
- package/dist/examples/form-dropdown.vitest.d.ts +2 -0
- package/dist/examples/form-dropdown.vitest.d.ts.map +1 -0
- package/dist/examples/form-dropdown.vitest.js +854 -0
- package/dist/examples/form-dropdown.vitest.js.map +1 -0
- package/dist/examples/form-multiselect-dropdown.d.ts +2 -0
- package/dist/examples/form-multiselect-dropdown.d.ts.map +1 -0
- package/dist/examples/form-multiselect-dropdown.js +13 -0
- package/dist/examples/form-multiselect-dropdown.js.map +1 -0
- package/dist/examples/form-scroll.d.ts.map +1 -1
- package/dist/examples/form-scroll.js +7 -1
- package/dist/examples/form-scroll.js.map +1 -1
- package/dist/examples/form-scroll.vitest.d.ts +2 -0
- package/dist/examples/form-scroll.vitest.d.ts.map +1 -0
- package/dist/examples/form-scroll.vitest.js +211 -0
- package/dist/examples/form-scroll.vitest.js.map +1 -0
- package/dist/examples/form-tagpicker.vitest.d.ts +2 -0
- package/dist/examples/form-tagpicker.vitest.d.ts.map +1 -0
- package/dist/examples/form-tagpicker.vitest.js +736 -0
- package/dist/examples/form-tagpicker.vitest.js.map +1 -0
- package/dist/examples/internal/descendants-filtering.js +1 -1
- package/dist/examples/internal/descendants-filtering.js.map +1 -1
- package/dist/examples/internal/descendants.js +1 -1
- package/dist/examples/internal/descendants.js.map +1 -1
- package/dist/examples/internal/nested-boxes.d.ts +2 -0
- package/dist/examples/internal/nested-boxes.d.ts.map +1 -0
- package/dist/examples/internal/nested-boxes.js +7 -0
- package/dist/examples/internal/nested-boxes.js.map +1 -0
- package/dist/examples/internal/rhf-custom-ref.js +2 -2
- package/dist/examples/internal/rhf-custom-ref.js.map +1 -1
- package/dist/examples/internal/scrollbox-demo.js +3 -22
- package/dist/examples/internal/scrollbox-demo.js.map +1 -1
- package/dist/examples/internal/scrollbox-descendants.d.ts +2 -0
- package/dist/examples/internal/scrollbox-descendants.d.ts.map +1 -0
- package/dist/examples/internal/scrollbox-descendants.js +83 -0
- package/dist/examples/internal/scrollbox-descendants.js.map +1 -0
- package/dist/examples/internal/scrollbox-with-descendants.js +4 -8
- package/dist/examples/internal/scrollbox-with-descendants.js.map +1 -1
- package/dist/examples/internal/simple-scrollbox.vitest.d.ts +2 -0
- package/dist/examples/internal/simple-scrollbox.vitest.d.ts.map +1 -0
- package/dist/examples/internal/simple-scrollbox.vitest.js +96 -0
- package/dist/examples/internal/simple-scrollbox.vitest.js.map +1 -0
- package/dist/examples/internal/unicode-square-repro.d.ts +2 -0
- package/dist/examples/internal/unicode-square-repro.d.ts.map +1 -0
- package/dist/examples/internal/unicode-square-repro.js +7 -0
- package/dist/examples/internal/unicode-square-repro.js.map +1 -0
- package/dist/examples/list-detail-metadata.d.ts +2 -0
- package/dist/examples/list-detail-metadata.d.ts.map +1 -0
- package/dist/examples/list-detail-metadata.js +8 -0
- package/dist/examples/list-detail-metadata.js.map +1 -0
- package/dist/examples/list-dropdown-default.vitest.d.ts +2 -0
- package/dist/examples/list-dropdown-default.vitest.d.ts.map +1 -0
- package/dist/examples/list-dropdown-default.vitest.js +234 -0
- package/dist/examples/list-dropdown-default.vitest.js.map +1 -0
- package/dist/examples/list-fetch-data.vitest.d.ts +2 -0
- package/dist/examples/list-fetch-data.vitest.d.ts.map +1 -0
- package/dist/examples/list-fetch-data.vitest.js +111 -0
- package/dist/examples/list-fetch-data.vitest.js.map +1 -0
- package/dist/examples/list-filter-navigation.d.ts +2 -0
- package/dist/examples/list-filter-navigation.d.ts.map +1 -0
- package/dist/examples/list-filter-navigation.js +8 -0
- package/dist/examples/list-filter-navigation.js.map +1 -0
- package/dist/examples/list-scrollbox.vitest.d.ts +2 -0
- package/dist/examples/list-scrollbox.vitest.d.ts.map +1 -0
- package/dist/examples/list-scrollbox.vitest.js +93 -0
- package/dist/examples/list-scrollbox.vitest.js.map +1 -0
- package/dist/examples/list-with-detail-long.d.ts +2 -0
- package/dist/examples/list-with-detail-long.d.ts.map +1 -0
- package/dist/examples/list-with-detail-long.js +53 -0
- package/dist/examples/list-with-detail-long.js.map +1 -0
- package/dist/examples/list-with-detail.vitest.d.ts +2 -0
- package/dist/examples/list-with-detail.vitest.d.ts.map +1 -0
- package/dist/examples/list-with-detail.vitest.js +434 -0
- package/dist/examples/list-with-detail.vitest.js.map +1 -0
- package/dist/examples/list-with-dropdown.vitest.d.ts +2 -0
- package/dist/examples/list-with-dropdown.vitest.d.ts.map +1 -0
- package/dist/examples/list-with-dropdown.vitest.js +337 -0
- package/dist/examples/list-with-dropdown.vitest.js.map +1 -0
- package/dist/examples/list-with-sections.js +5 -1
- package/dist/examples/list-with-sections.js.map +1 -1
- package/dist/examples/list-with-sections.vitest.d.ts +2 -0
- package/dist/examples/list-with-sections.vitest.d.ts.map +1 -0
- package/dist/examples/list-with-sections.vitest.js +601 -0
- package/dist/examples/list-with-sections.vitest.js.map +1 -0
- package/dist/examples/scrollbox-vertical-centering.d.ts +6 -0
- package/dist/examples/scrollbox-vertical-centering.d.ts.map +1 -0
- package/dist/examples/scrollbox-vertical-centering.js +17 -0
- package/dist/examples/scrollbox-vertical-centering.js.map +1 -0
- package/dist/examples/simple-file-picker.vitest.d.ts +2 -0
- package/dist/examples/simple-file-picker.vitest.d.ts.map +1 -0
- package/dist/examples/simple-file-picker.vitest.js +678 -0
- package/dist/examples/simple-file-picker.vitest.js.map +1 -0
- package/dist/examples/simple-grid.vitest.d.ts +2 -0
- package/dist/examples/simple-grid.vitest.d.ts.map +1 -0
- package/dist/examples/simple-grid.vitest.js +521 -0
- package/dist/examples/simple-grid.vitest.js.map +1 -0
- package/dist/examples/simple-navigation.js +10 -4
- package/dist/examples/simple-navigation.js.map +1 -1
- package/dist/examples/simple-navigation.vitest.d.ts +2 -0
- package/dist/examples/simple-navigation.vitest.d.ts.map +1 -0
- package/dist/examples/simple-navigation.vitest.js +718 -0
- package/dist/examples/simple-navigation.vitest.js.map +1 -0
- package/dist/examples/store.vitest.d.ts +2 -0
- package/dist/examples/store.vitest.d.ts.map +1 -0
- package/dist/examples/store.vitest.js +69 -0
- package/dist/examples/store.vitest.js.map +1 -0
- package/dist/extensions/dev.d.ts +4 -2
- package/dist/extensions/dev.d.ts.map +1 -1
- package/dist/extensions/dev.js +61 -10
- package/dist/extensions/dev.js.map +1 -1
- package/dist/extensions/dev.vitest.d.ts +2 -0
- package/dist/extensions/dev.vitest.d.ts.map +1 -0
- package/dist/extensions/dev.vitest.js +197 -0
- package/dist/extensions/dev.vitest.js.map +1 -0
- package/dist/extensions/home.d.ts.map +1 -1
- package/dist/extensions/home.js +3 -0
- package/dist/extensions/home.js.map +1 -1
- package/dist/home-command.d.ts +8 -0
- package/dist/home-command.d.ts.map +1 -0
- package/dist/home-command.js +181 -0
- package/dist/home-command.js.map +1 -0
- package/dist/hover-repro.d.ts +2 -0
- package/dist/hover-repro.d.ts.map +1 -0
- package/dist/hover-repro.js +20 -0
- package/dist/hover-repro.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/dialog.d.ts +1 -0
- package/dist/internal/dialog.d.ts.map +1 -1
- package/dist/internal/dialog.js +27 -18
- package/dist/internal/dialog.js.map +1 -1
- package/dist/internal/navigation.d.ts +9 -1
- package/dist/internal/navigation.d.ts.map +1 -1
- package/dist/internal/navigation.js +5 -5
- package/dist/internal/navigation.js.map +1 -1
- package/dist/internal/offscreen.d.ts +6 -0
- package/dist/internal/offscreen.d.ts.map +1 -0
- package/dist/internal/offscreen.js +10 -0
- package/dist/internal/offscreen.js.map +1 -0
- package/dist/internal/providers.d.ts.map +1 -1
- package/dist/internal/providers.js +2 -2
- package/dist/internal/providers.js.map +1 -1
- package/dist/internal/scrollbox.d.ts +1 -10
- package/dist/internal/scrollbox.d.ts.map +1 -1
- package/dist/internal/scrollbox.js +2 -1
- package/dist/internal/scrollbox.js.map +1 -1
- package/dist/localstorage.d.ts +13 -0
- package/dist/localstorage.d.ts.map +1 -0
- package/dist/localstorage.js +190 -0
- package/dist/localstorage.js.map +1 -0
- package/dist/oauth.d.ts +142 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +551 -0
- package/dist/oauth.js.map +1 -0
- package/dist/preferences.d.ts +23 -0
- package/dist/preferences.d.ts.map +1 -0
- package/dist/preferences.js +105 -0
- package/dist/preferences.js.map +1 -0
- package/dist/state.d.ts +2 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +3 -0
- package/dist/state.js.map +1 -1
- package/dist/store.d.ts +21 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +84 -0
- package/dist/store.js.map +1 -0
- package/dist/swift-loader.d.ts +3 -0
- package/dist/swift-loader.d.ts.map +1 -0
- package/dist/swift-loader.js +193 -0
- package/dist/swift-loader.js.map +1 -0
- package/dist/swift-runtime.d.ts +2 -0
- package/dist/swift-runtime.d.ts.map +1 -0
- package/dist/swift-runtime.js +27 -0
- package/dist/swift-runtime.js.map +1 -0
- package/dist/toast.d.ts +44 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +221 -0
- package/dist/toast.js.map +1 -0
- package/dist/utils/file-system.d.ts +9 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +49 -0
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/run-command.d.ts +25 -1
- package/dist/utils/run-command.d.ts.map +1 -1
- package/dist/utils/run-command.js +47 -4
- package/dist/utils/run-command.js.map +1 -1
- package/dist/window.d.ts +12 -0
- package/dist/window.d.ts.map +1 -0
- package/dist/window.js +48 -0
- package/dist/window.js.map +1 -0
- package/package.json +13 -11
- package/src/apis/browser-extension.tsx +29 -0
- package/src/apis/localstorage.test.ts +14 -6
- package/src/apis/localstorage.tsx +8 -5
- package/src/apis/oauth.tsx +5 -1
- package/src/apis/preferences.tsx +48 -22
- package/src/build.test.tsx +52 -0
- package/src/build.tsx +2 -1
- package/src/cli.tsx +80 -39
- package/src/compile.tsx +24 -6
- package/src/components/actions.tsx +94 -32
- package/src/components/detail.tsx +4 -0
- package/src/components/dropdown.tsx +47 -14
- package/src/components/extension-preferences.tsx +44 -16
- package/src/components/form/checkbox.tsx +12 -6
- package/src/components/form/date-picker.tsx +12 -6
- package/src/components/form/description.tsx +7 -2
- package/src/components/form/dropdown.tsx +131 -119
- package/src/components/form/file-autocomplete.tsx +90 -108
- package/src/components/form/file-picker.tsx +54 -43
- package/src/components/form/form-end.tsx +23 -2
- package/src/components/form/index.tsx +152 -34
- package/src/components/form/password-field.tsx +12 -6
- package/src/components/form/text-area.tsx +13 -6
- package/src/components/form/text-field.tsx +13 -6
- package/src/components/form/types.tsx +6 -0
- package/src/components/form/with-left-border.tsx +41 -8
- package/src/components/icon.tsx +27 -8
- package/src/components/list.tsx +193 -74
- package/src/components/loading-bar.tsx +3 -2
- package/src/components/loading-text.tsx +79 -0
- package/src/descendants.tsx +1 -0
- package/src/examples/file-autocomplete.vitest.tsx +130 -125
- package/src/examples/form-basic.vitest.tsx +376 -176
- package/src/examples/form-dropdown.vitest.tsx +126 -126
- package/src/examples/form-scroll.tsx +2 -0
- package/src/examples/form-scroll.vitest.tsx +58 -58
- package/src/examples/form-tagpicker.vitest.tsx +99 -99
- package/src/examples/internal/descendants-filtering.tsx +1 -0
- package/src/examples/internal/descendants.tsx +1 -0
- package/src/examples/internal/rhf-custom-ref.tsx +2 -0
- package/src/examples/internal/scrollbox-demo.tsx +3 -27
- package/src/examples/internal/scrollbox-with-descendants.tsx +4 -7
- package/src/examples/internal/simple-scrollbox.vitest.tsx +7 -5
- package/src/examples/list-detail-metadata.tsx +49 -0
- package/src/examples/list-detail-metadata.vitest.tsx +88 -0
- package/src/examples/list-dropdown-default.vitest.tsx +51 -51
- package/src/examples/list-fetch-data.vitest.tsx +4 -4
- package/src/examples/list-scrollbox.vitest.tsx +73 -14
- package/src/examples/list-with-detail-long.tsx +70 -0
- package/src/examples/list-with-detail.vitest.tsx +198 -92
- package/src/examples/list-with-dropdown.vitest.tsx +53 -53
- package/src/examples/list-with-sections.tsx +1 -0
- package/src/examples/list-with-sections.vitest.tsx +213 -89
- package/src/examples/list-with-toast.vitest.tsx +4 -4
- package/src/examples/simple-file-picker.vitest.tsx +61 -471
- package/src/examples/simple-grid.vitest.tsx +238 -233
- package/src/examples/simple-navigation.tsx +15 -7
- package/src/examples/simple-navigation.vitest.tsx +121 -210
- package/src/examples/store.vitest.tsx +1 -1
- package/src/examples/swift-extension.vitest.tsx +148 -0
- package/src/examples/synonyms.vitest.tsx +159 -0
- package/src/extensions/dev.tsx +74 -7
- package/src/extensions/dev.vitest.tsx +97 -31
- package/src/extensions/home.tsx +6 -0
- package/src/index.tsx +3 -0
- package/src/internal/dialog.tsx +43 -30
- package/src/internal/navigation.tsx +3 -1
- package/src/internal/offscreen.tsx +15 -0
- package/src/internal/providers.tsx +4 -2
- package/src/internal/scrollbox.tsx +4 -8
- package/src/keyboard.test.tsx +69 -0
- package/src/state.tsx +7 -0
- package/src/swift-loader.tsx +239 -0
- package/src/swift-runtime.tsx +36 -0
- package/src/utils/file-system.ts +61 -0
- package/src/utils/run-command.tsx +75 -6
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useStore } from '@termcast/cli/src/state';
|
|
3
|
+
import { logger } from '@termcast/cli/src/logger';
|
|
4
|
+
import { LocalStorage } from '@termcast/cli/src/localstorage';
|
|
5
|
+
import { ExtensionPreferences } from '@termcast/cli/src/components/extension-preferences';
|
|
6
|
+
/**
|
|
7
|
+
* A function to access the preference values that have been passed to the command.
|
|
8
|
+
* Each preference name is mapped to its value, and the defined default values are used as fallback values.
|
|
9
|
+
*
|
|
10
|
+
* @returns An object with the preference names as property key and the typed value as property value.
|
|
11
|
+
*/
|
|
12
|
+
export function getPreferenceValues() {
|
|
13
|
+
const state = useStore.getState();
|
|
14
|
+
const { extensionPackageJson, currentCommandName, extensionPath } = state;
|
|
15
|
+
// Determine the extension name from package.json or path
|
|
16
|
+
let extensionName = null;
|
|
17
|
+
if (extensionPackageJson?.name) {
|
|
18
|
+
extensionName = extensionPackageJson.name;
|
|
19
|
+
}
|
|
20
|
+
else if (extensionPath) {
|
|
21
|
+
// Extract extension name from path if package.json not available
|
|
22
|
+
const pathParts = extensionPath.split('/');
|
|
23
|
+
extensionName = pathParts[pathParts.length - 1];
|
|
24
|
+
}
|
|
25
|
+
if (!extensionName) {
|
|
26
|
+
logger.log('No extension context found for preferences');
|
|
27
|
+
return {};
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
// First try to load command-specific preferences, then fall back to extension preferences
|
|
31
|
+
if (currentCommandName) {
|
|
32
|
+
const commandPreferencesKey = `preferences.${extensionName}.${currentCommandName}`;
|
|
33
|
+
const commandPreferences = LocalStorage.getItemSync(commandPreferencesKey);
|
|
34
|
+
if (commandPreferences && typeof commandPreferences === 'string') {
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(commandPreferences);
|
|
37
|
+
logger.log(`Loaded command preferences for ${extensionName}/${currentCommandName}:`, parsed);
|
|
38
|
+
return parsed;
|
|
39
|
+
}
|
|
40
|
+
catch (parseError) {
|
|
41
|
+
logger.error(`Failed to parse command preferences:`, parseError);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Fall back to extension-level preferences
|
|
46
|
+
const extensionPreferencesKey = `preferences.${extensionName}`;
|
|
47
|
+
const extensionPreferences = LocalStorage.getItemSync(extensionPreferencesKey);
|
|
48
|
+
if (extensionPreferences && typeof extensionPreferences === 'string') {
|
|
49
|
+
try {
|
|
50
|
+
const parsed = JSON.parse(extensionPreferences);
|
|
51
|
+
logger.log(`Loaded extension preferences for ${extensionName}:`, parsed);
|
|
52
|
+
return parsed;
|
|
53
|
+
}
|
|
54
|
+
catch (parseError) {
|
|
55
|
+
logger.error(`Failed to parse extension preferences:`, parseError);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
logger.error(`Failed to load preferences for ${extensionName}:`, error);
|
|
61
|
+
}
|
|
62
|
+
// Return empty preferences if none saved
|
|
63
|
+
return {};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Opens the extension's preferences screen.
|
|
67
|
+
*
|
|
68
|
+
* @returns A Promise that resolves when the extensions preferences screen is opened.
|
|
69
|
+
*/
|
|
70
|
+
export async function openExtensionPreferences() {
|
|
71
|
+
const state = useStore.getState();
|
|
72
|
+
const { extensionPackageJson, navigationStack } = state;
|
|
73
|
+
if (!extensionPackageJson?.name) {
|
|
74
|
+
throw new Error('No current extension found');
|
|
75
|
+
}
|
|
76
|
+
logger.log(`Opening extension preferences for ${extensionPackageJson.name}`);
|
|
77
|
+
// Push the preferences component to the navigation stack
|
|
78
|
+
const preferencesComponent = (_jsx(ExtensionPreferences, { extensionName: extensionPackageJson.name }));
|
|
79
|
+
useStore.setState({
|
|
80
|
+
navigationStack: [...navigationStack, { element: preferencesComponent }],
|
|
81
|
+
dialogStack: [],
|
|
82
|
+
});
|
|
83
|
+
return Promise.resolve();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Opens the command's preferences screen.
|
|
87
|
+
*
|
|
88
|
+
* @returns A Promise that resolves when the command's preferences screen is opened.
|
|
89
|
+
*/
|
|
90
|
+
export async function openCommandPreferences() {
|
|
91
|
+
const state = useStore.getState();
|
|
92
|
+
const { extensionPackageJson, currentCommandName, navigationStack } = state;
|
|
93
|
+
if (!extensionPackageJson?.name || !currentCommandName) {
|
|
94
|
+
throw new Error('No current command found');
|
|
95
|
+
}
|
|
96
|
+
logger.log(`Opening command preferences for ${extensionPackageJson.name}/${currentCommandName}`);
|
|
97
|
+
// Push the preferences component to the navigation stack
|
|
98
|
+
const preferencesComponent = (_jsx(ExtensionPreferences, { extensionName: extensionPackageJson.name, commandName: currentCommandName }));
|
|
99
|
+
useStore.setState({
|
|
100
|
+
navigationStack: [...navigationStack, { element: preferencesComponent }],
|
|
101
|
+
dialogStack: [],
|
|
102
|
+
});
|
|
103
|
+
return Promise.resolve();
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=preferences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preferences.js","sourceRoot":"","sources":["../src/preferences.tsx"],"names":[],"mappings":"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"}
|
package/dist/state.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ interface AppState {
|
|
|
21
21
|
currentCommandArguments: Record<string, string> | null;
|
|
22
22
|
googleAccessToken?: string;
|
|
23
23
|
googleIdToken?: string;
|
|
24
|
+
shouldAutoExecuteFirstAction: boolean;
|
|
25
|
+
firstActionTitle: string;
|
|
24
26
|
}
|
|
25
27
|
export declare const useStore: import("zustand").UseBoundStore<import("zustand").StoreApi<AppState>>;
|
|
26
28
|
export {};
|
package/dist/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAA;AAEpE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,SAAS,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,UAAU,QAAQ;IAChB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,WAAW,EAAE,eAAe,EAAE,CAAA;IAE9B,eAAe,EAAE,mBAAmB,EAAE,CAAA;IAEtC,UAAU,EAAE,SAAS,GAAG,IAAI,CAAA;IAC5B,eAAe,EAAE,MAAM,CAAA;IAEvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,oBAAoB,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;IAEtD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAA;AAEpE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,SAAS,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,UAAU,QAAQ;IAChB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,WAAW,EAAE,eAAe,EAAE,CAAA;IAE9B,eAAe,EAAE,mBAAmB,EAAE,CAAA;IAEtC,UAAU,EAAE,SAAS,GAAG,IAAI,CAAA;IAC5B,eAAe,EAAE,MAAM,CAAA;IAEvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,oBAAoB,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;IAEtD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB,4BAA4B,EAAE,OAAO,CAAA;IAErC,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,QAAQ,uEAmBlB,CAAA"}
|
package/dist/state.js
CHANGED
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAsChC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAW,GAAG,EAAE,CAAC,CAAC;IAC9C,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,EAAE;IACf,mBAAmB;IACnB,eAAe,EAAE,EAAE;IACnB,iBAAiB;IACjB,UAAU,EAAE,IAAI;IAChB,eAAe,EAAE,CAAC;IAClB,8BAA8B;IAC9B,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;IAC1B,kBAAkB,EAAE,IAAI;IACxB,uBAAuB,EAAE,IAAI;IAC7B,cAAc;IACd,iBAAiB,EAAE,SAAS;IAC5B,aAAa,EAAE,SAAS;IACxB,gBAAgB;IAChB,4BAA4B,EAAE,KAAK;IACnC,gBAAgB,EAAE,EAAE;CACrB,CAAC,CAAC,CAAA"}
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type CommandWithFile } from './package-json';
|
|
2
|
+
interface BundledCommand extends CommandWithFile {
|
|
3
|
+
bundledPath: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function resolveCommandPath({ commandName, dir, }: {
|
|
6
|
+
commandName: string;
|
|
7
|
+
dir: string;
|
|
8
|
+
}): string;
|
|
9
|
+
interface StoredExtension {
|
|
10
|
+
name: string;
|
|
11
|
+
packageJsonPath: string;
|
|
12
|
+
commands: BundledCommand[];
|
|
13
|
+
}
|
|
14
|
+
export declare function getStoreDirectory(): string;
|
|
15
|
+
export declare function installExtension({ extensionName, extensionSourcePath, }: {
|
|
16
|
+
extensionName: string;
|
|
17
|
+
extensionSourcePath: string;
|
|
18
|
+
}): void;
|
|
19
|
+
export declare function getStoredExtensions(): StoredExtension[];
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE3E,UAAU,cAAe,SAAQ,eAAe;IAC9C,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,GAAG,GACJ,EAAE;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,MAAM,CAgBT;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,cAAc,EAAE,CAAA;CAC3B;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAU1C;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,aAAa,EACb,mBAAmB,GACpB,EAAE;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,MAAM,CAAA;CAC5B,GAAG,IAAI,CAgBP;AAED,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAkDvD"}
|
package/dist/store.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { logger } from './logger';
|
|
5
|
+
import { getCommandsWithFiles } from './package-json';
|
|
6
|
+
export function resolveCommandPath({ commandName, dir, }) {
|
|
7
|
+
// First check for .termcast-bundle directory
|
|
8
|
+
const bundleDir = path.join(dir, '.termcast-bundle');
|
|
9
|
+
const bundledPath = path.join(bundleDir, `${commandName}.js`);
|
|
10
|
+
if (fs.existsSync(bundledPath)) {
|
|
11
|
+
return bundledPath;
|
|
12
|
+
}
|
|
13
|
+
// Then check for top-level command file
|
|
14
|
+
const topLevelPath = path.join(dir, `${commandName}.js`);
|
|
15
|
+
if (fs.existsSync(topLevelPath)) {
|
|
16
|
+
return topLevelPath;
|
|
17
|
+
}
|
|
18
|
+
// Return empty string if not found
|
|
19
|
+
return '';
|
|
20
|
+
}
|
|
21
|
+
export function getStoreDirectory() {
|
|
22
|
+
const homeDir = os.homedir();
|
|
23
|
+
const storeDir = path.join(homeDir, '.termcast', 'store');
|
|
24
|
+
// Ensure store directory exists
|
|
25
|
+
if (!fs.existsSync(storeDir)) {
|
|
26
|
+
fs.mkdirSync(storeDir, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
return storeDir;
|
|
29
|
+
}
|
|
30
|
+
export function installExtension({ extensionName, extensionSourcePath, }) {
|
|
31
|
+
const storeDir = getStoreDirectory();
|
|
32
|
+
const extensionDir = path.join(storeDir, extensionName);
|
|
33
|
+
// Remove existing extension directory if it exists
|
|
34
|
+
if (fs.existsSync(extensionDir)) {
|
|
35
|
+
fs.rmSync(extensionDir, { recursive: true, force: true });
|
|
36
|
+
}
|
|
37
|
+
// Create extension directory
|
|
38
|
+
fs.mkdirSync(extensionDir, { recursive: true });
|
|
39
|
+
// Copy entire extension source directory
|
|
40
|
+
fs.cpSync(extensionSourcePath, extensionDir, { recursive: true });
|
|
41
|
+
logger.log(`Extension '${extensionName}' installed to ${extensionDir}`);
|
|
42
|
+
}
|
|
43
|
+
export function getStoredExtensions() {
|
|
44
|
+
const storeDir = getStoreDirectory();
|
|
45
|
+
const extensions = [];
|
|
46
|
+
if (!fs.existsSync(storeDir)) {
|
|
47
|
+
return extensions;
|
|
48
|
+
}
|
|
49
|
+
const entries = fs.readdirSync(storeDir, { withFileTypes: true });
|
|
50
|
+
for (const entry of entries) {
|
|
51
|
+
if (!entry.isDirectory())
|
|
52
|
+
continue;
|
|
53
|
+
const extensionDir = path.join(storeDir, entry.name);
|
|
54
|
+
const packageJsonPath = path.join(extensionDir, 'package.json');
|
|
55
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
56
|
+
logger.log(`Skipping ${entry.name}: no package.json found`);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const commandsData = getCommandsWithFiles({ packageJsonPath });
|
|
61
|
+
// Map commands to bundled commands using the resolver
|
|
62
|
+
const bundledCommands = commandsData.commands.map((command) => {
|
|
63
|
+
const bundledPath = resolveCommandPath({
|
|
64
|
+
commandName: command.name,
|
|
65
|
+
dir: extensionDir,
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
...command,
|
|
69
|
+
bundledPath,
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
extensions.push({
|
|
73
|
+
name: entry.name,
|
|
74
|
+
packageJsonPath,
|
|
75
|
+
commands: bundledCommands,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
logger.error(`Failed to load extension ${entry.name}:`, error.message);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return extensions;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift-loader.d.ts","sourceRoot":"","sources":["../src/swift-loader.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AA+LpC,eAAO,MAAM,iBAAiB,EAAE,SA4C/B,CAAA"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { spawn } from 'node:child_process';
|
|
4
|
+
import { logger } from './logger';
|
|
5
|
+
const SWIFT_NAMESPACE = 'swift-loader';
|
|
6
|
+
const buildCache = {};
|
|
7
|
+
async function buildSwiftPackage(swiftPath) {
|
|
8
|
+
logger.log(`Swift: building package at ${swiftPath}`);
|
|
9
|
+
// Check if already built and cached in memory
|
|
10
|
+
const cached = buildCache[swiftPath];
|
|
11
|
+
if (cached && fs.existsSync(cached.result.binaryPath)) {
|
|
12
|
+
logger.log(`Swift: using cached build at ${cached.result.binaryPath}`);
|
|
13
|
+
return cached.result;
|
|
14
|
+
}
|
|
15
|
+
// Check if binary already exists on disk (from previous build/process)
|
|
16
|
+
try {
|
|
17
|
+
const existingResult = await findSwiftBuildResult(swiftPath);
|
|
18
|
+
logger.log(`Swift: found existing binary at ${existingResult.binaryPath}`);
|
|
19
|
+
buildCache[swiftPath] = { result: existingResult, buildTime: Date.now() };
|
|
20
|
+
return existingResult;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Binary doesn't exist, need to build
|
|
24
|
+
}
|
|
25
|
+
// Run swift build using Node's spawn
|
|
26
|
+
// Use debug build for faster compilation (skips optimizations)
|
|
27
|
+
logger.log(`Swift: running swift build -c debug in ${swiftPath}`);
|
|
28
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
29
|
+
const proc = spawn('swift', ['build', '-c', 'debug'], {
|
|
30
|
+
cwd: swiftPath,
|
|
31
|
+
stdio: 'inherit',
|
|
32
|
+
});
|
|
33
|
+
proc.on('error', reject);
|
|
34
|
+
proc.on('close', (code) => resolve(code ?? 1));
|
|
35
|
+
});
|
|
36
|
+
logger.log(`Swift: build exited with code ${exitCode}`);
|
|
37
|
+
if (exitCode !== 0) {
|
|
38
|
+
throw new Error(`Swift build failed with exit code ${exitCode}`);
|
|
39
|
+
}
|
|
40
|
+
logger.log(`Swift: build completed successfully`);
|
|
41
|
+
// Find the binary and generated files
|
|
42
|
+
const result = await findSwiftBuildResult(swiftPath);
|
|
43
|
+
// Cache the result
|
|
44
|
+
buildCache[swiftPath] = {
|
|
45
|
+
result,
|
|
46
|
+
buildTime: Date.now(),
|
|
47
|
+
};
|
|
48
|
+
logger.log(`Swift: built binary at ${result.binaryPath}`);
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
function findFilesRecursively(dir, filename) {
|
|
52
|
+
const results = [];
|
|
53
|
+
if (!fs.existsSync(dir)) {
|
|
54
|
+
return results;
|
|
55
|
+
}
|
|
56
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
57
|
+
for (const entry of entries) {
|
|
58
|
+
const fullPath = path.join(dir, entry.name);
|
|
59
|
+
if (entry.isDirectory()) {
|
|
60
|
+
results.push(...findFilesRecursively(fullPath, filename));
|
|
61
|
+
}
|
|
62
|
+
else if (entry.name === filename) {
|
|
63
|
+
results.push(fullPath);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return results;
|
|
67
|
+
}
|
|
68
|
+
async function findSwiftBuildResult(swiftPath) {
|
|
69
|
+
// Parse Package.swift to find executable target name
|
|
70
|
+
const packageSwiftPath = path.join(swiftPath, 'Package.swift');
|
|
71
|
+
const packageSwift = fs.readFileSync(packageSwiftPath, 'utf-8');
|
|
72
|
+
// Look for: name: "PackageName" at the top level
|
|
73
|
+
const nameMatch = packageSwift.match(/name:\s*"([^"]+)"/);
|
|
74
|
+
if (!nameMatch) {
|
|
75
|
+
throw new Error(`Could not find package name in ${packageSwiftPath}`);
|
|
76
|
+
}
|
|
77
|
+
const packageName = nameMatch[1];
|
|
78
|
+
// Find binary - check debug first, then release
|
|
79
|
+
const debugBinaryPath = path.join(swiftPath, '.build', 'debug', packageName);
|
|
80
|
+
const releaseBinaryPath = path.join(swiftPath, '.build', 'release', packageName);
|
|
81
|
+
let binaryPath;
|
|
82
|
+
if (fs.existsSync(debugBinaryPath)) {
|
|
83
|
+
binaryPath = debugBinaryPath;
|
|
84
|
+
}
|
|
85
|
+
else if (fs.existsSync(releaseBinaryPath)) {
|
|
86
|
+
binaryPath = releaseBinaryPath;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
throw new Error(`Swift binary not found at ${debugBinaryPath} or ${releaseBinaryPath}`);
|
|
90
|
+
}
|
|
91
|
+
// Find raycast.js using glob-like search
|
|
92
|
+
const buildDir = path.join(swiftPath, '.build');
|
|
93
|
+
const raycastJsFiles = findFilesRecursively(buildDir, 'raycast.js');
|
|
94
|
+
// Filter to find the one from RaycastTypeScriptPlugin for our package
|
|
95
|
+
const matchingFiles = raycastJsFiles.filter(f => f.includes('RaycastTypeScriptPlugin') && f.includes(packageName));
|
|
96
|
+
if (matchingFiles.length === 0) {
|
|
97
|
+
throw new Error(`Generated raycast.js not found in ${buildDir}. Found files: ${raycastJsFiles.join(', ') || 'none'}`);
|
|
98
|
+
}
|
|
99
|
+
// Prefer the one in plugins/outputs (not index-build)
|
|
100
|
+
const raycastJsPath = matchingFiles.find(f => f.includes('plugins/outputs')) || matchingFiles[0];
|
|
101
|
+
logger.log(`Swift: found raycast.js at ${raycastJsPath}`);
|
|
102
|
+
return { binaryPath, raycastJsPath, packageName };
|
|
103
|
+
}
|
|
104
|
+
function generateSwiftModule(result) {
|
|
105
|
+
// Read the generated raycast.js from RaycastTypeScriptPlugin
|
|
106
|
+
// This file exports named functions that call runSwiftFunction(functionName, ...args)
|
|
107
|
+
// We prepend our runSwiftFunction implementation with the binary path
|
|
108
|
+
const generatedJs = fs.readFileSync(result.raycastJsPath, 'utf-8');
|
|
109
|
+
// Prepend our runSwiftFunction implementation using Node's child_process
|
|
110
|
+
// Use ESM import to match the export statements in generated raycast.js
|
|
111
|
+
const runtime = `
|
|
112
|
+
import { spawn as _spawn } from 'node:child_process';
|
|
113
|
+
|
|
114
|
+
const BINARY_PATH = ${JSON.stringify(result.binaryPath)};
|
|
115
|
+
|
|
116
|
+
function runSwiftFunction(functionName, ...args) {
|
|
117
|
+
return new Promise((resolve, reject) => {
|
|
118
|
+
const jsonArgs = args.map((arg) => JSON.stringify(arg));
|
|
119
|
+
const proc = _spawn(BINARY_PATH, [functionName, ...jsonArgs], {
|
|
120
|
+
stdio: ['pipe', 'pipe', 'inherit'],
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
let stdout = '';
|
|
124
|
+
proc.stdout.on('data', (data) => {
|
|
125
|
+
stdout += data.toString();
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
proc.on('error', (err) => {
|
|
129
|
+
reject(new Error('Swift function "' + functionName + '" failed to spawn: ' + err.message));
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
proc.on('close', (exitCode) => {
|
|
133
|
+
if (exitCode !== 0) {
|
|
134
|
+
reject(new Error('Swift function "' + functionName + '" failed with exit code ' + exitCode));
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const trimmed = stdout.trim();
|
|
139
|
+
if (!trimmed) {
|
|
140
|
+
resolve(undefined);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
resolve(JSON.parse(trimmed));
|
|
146
|
+
} catch {
|
|
147
|
+
reject(new Error('Swift function "' + functionName + '" returned invalid JSON: ' + trimmed));
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
`;
|
|
154
|
+
return runtime + generatedJs;
|
|
155
|
+
}
|
|
156
|
+
export const swiftLoaderPlugin = {
|
|
157
|
+
name: 'swift-loader',
|
|
158
|
+
async setup(build) {
|
|
159
|
+
// Resolve swift: imports
|
|
160
|
+
build.onResolve({ filter: /^swift:/ }, (args) => {
|
|
161
|
+
logger.log(`Swift: onResolve called for ${args.path} from ${args.importer}`);
|
|
162
|
+
// Extract the path after "swift:"
|
|
163
|
+
const swiftRelativePath = args.path.slice(6); // Remove "swift:"
|
|
164
|
+
// Resolve relative to the importer's directory
|
|
165
|
+
const importerDir = args.importer ? path.dirname(args.importer) : process.cwd();
|
|
166
|
+
const resolvedSwiftPath = path.resolve(importerDir, swiftRelativePath);
|
|
167
|
+
logger.log(`Swift: resolved to ${resolvedSwiftPath}`);
|
|
168
|
+
return {
|
|
169
|
+
path: resolvedSwiftPath,
|
|
170
|
+
namespace: SWIFT_NAMESPACE,
|
|
171
|
+
};
|
|
172
|
+
});
|
|
173
|
+
// Load swift packages
|
|
174
|
+
build.onLoad({ filter: /.*/, namespace: SWIFT_NAMESPACE }, async (args) => {
|
|
175
|
+
logger.log(`Swift: onLoad called for ${args.path}`);
|
|
176
|
+
const swiftPath = args.path;
|
|
177
|
+
// Build the Swift package and get paths to binary + generated JS
|
|
178
|
+
logger.log(`Swift: calling buildSwiftPackage...`);
|
|
179
|
+
const result = await buildSwiftPackage(swiftPath);
|
|
180
|
+
logger.log(`Swift: buildSwiftPackage returned, binaryPath=${result.binaryPath}`);
|
|
181
|
+
// Generate module by combining runtime with generated raycast.js
|
|
182
|
+
logger.log(`Swift: generating module...`);
|
|
183
|
+
const contents = generateSwiftModule(result);
|
|
184
|
+
logger.log(`Swift: module generated, length=${contents.length}`);
|
|
185
|
+
// logger.log(`Swift: module contents:\n${contents}`)
|
|
186
|
+
return {
|
|
187
|
+
contents,
|
|
188
|
+
loader: 'js',
|
|
189
|
+
};
|
|
190
|
+
});
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
//# sourceMappingURL=swift-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift-loader.js","sourceRoot":"","sources":["../src/swift-loader.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift-runtime.d.ts","sourceRoot":"","sources":["../src/swift-runtime.tsx"],"names":[],"mappings":"AAEA,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { logger } from './logger';
|
|
2
|
+
export async function runSwiftFunction(binaryPath, functionName, ...args) {
|
|
3
|
+
const jsonArgs = args.map((arg) => JSON.stringify(arg));
|
|
4
|
+
logger.log(`Swift: calling ${functionName} with args:`, jsonArgs);
|
|
5
|
+
const proc = Bun.spawn([binaryPath, functionName, ...jsonArgs], {
|
|
6
|
+
stdout: 'pipe',
|
|
7
|
+
stderr: 'inherit',
|
|
8
|
+
});
|
|
9
|
+
const [stdout, exitCode] = await Promise.all([
|
|
10
|
+
new Response(proc.stdout).text(),
|
|
11
|
+
proc.exited,
|
|
12
|
+
]);
|
|
13
|
+
if (exitCode !== 0) {
|
|
14
|
+
throw new Error(`Swift function "${functionName}" failed with exit code ${exitCode}`);
|
|
15
|
+
}
|
|
16
|
+
const trimmed = stdout.trim();
|
|
17
|
+
if (!trimmed) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
return JSON.parse(trimmed);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
throw new Error(`Swift function "${functionName}" returned invalid JSON: ${trimmed}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=swift-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift-runtime.js","sourceRoot":"","sources":["../src/swift-runtime.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,YAAoB,EACpB,GAAG,IAAe;IAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IAEvD,MAAM,CAAC,GAAG,CAAC,kBAAkB,YAAY,aAAa,EAAE,QAAQ,CAAC,CAAA;IAEjE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC,EAAE;QAC9D,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,SAAS;KAClB,CAAC,CAAA;IAEF,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;QAChC,IAAI,CAAC,MAAM;KACZ,CAAC,CAAA;IAEF,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,mBAAmB,YAAY,2BAA2B,QAAQ,EAAE,CAAC,CAAA;IACvF,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,mBAAmB,YAAY,4BAA4B,OAAO,EAAE,CAAC,CAAA;IACvF,CAAC;AACH,CAAC"}
|
package/dist/toast.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare namespace Toast {
|
|
2
|
+
interface Options {
|
|
3
|
+
title: string;
|
|
4
|
+
message?: string;
|
|
5
|
+
style?: Style;
|
|
6
|
+
primaryAction?: ActionOptions;
|
|
7
|
+
secondaryAction?: ActionOptions;
|
|
8
|
+
}
|
|
9
|
+
interface ActionOptions {
|
|
10
|
+
title: string;
|
|
11
|
+
shortcut?: any;
|
|
12
|
+
onAction: (toast: Toast) => void;
|
|
13
|
+
}
|
|
14
|
+
type Style = 'SUCCESS' | 'FAILURE' | 'ANIMATED';
|
|
15
|
+
}
|
|
16
|
+
export declare class Toast {
|
|
17
|
+
private options;
|
|
18
|
+
private id;
|
|
19
|
+
private callbacks;
|
|
20
|
+
static Style: {
|
|
21
|
+
Success: Toast.Style;
|
|
22
|
+
Failure: Toast.Style;
|
|
23
|
+
Animated: Toast.Style;
|
|
24
|
+
};
|
|
25
|
+
constructor(props: Toast.Options);
|
|
26
|
+
get style(): Toast.Style;
|
|
27
|
+
set style(style: Toast.Style);
|
|
28
|
+
get title(): string;
|
|
29
|
+
set title(title: string);
|
|
30
|
+
get message(): string | undefined;
|
|
31
|
+
set message(message: string | undefined);
|
|
32
|
+
get primaryAction(): Toast.ActionOptions | undefined;
|
|
33
|
+
set primaryAction(action: Toast.ActionOptions | undefined);
|
|
34
|
+
get secondaryAction(): Toast.ActionOptions | undefined;
|
|
35
|
+
set secondaryAction(action: Toast.ActionOptions | undefined);
|
|
36
|
+
show(): Promise<void>;
|
|
37
|
+
hide(): Promise<void>;
|
|
38
|
+
private update;
|
|
39
|
+
_setCallbacks(callbacks: typeof this.callbacks): void;
|
|
40
|
+
_getId(): string;
|
|
41
|
+
}
|
|
42
|
+
export declare function showToast(options: Toast.Options): Promise<Toast>;
|
|
43
|
+
export declare function showToast(style: Toast.Style, title: string, message?: string): Promise<Toast>;
|
|
44
|
+
//# sourceMappingURL=toast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../src/toast.tsx"],"names":[],"mappings":"AAQA,yBAAiB,KAAK,CAAC;IACrB,UAAiB,OAAO;QACtB,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,KAAK,CAAC,EAAE,KAAK,CAAA;QACb,aAAa,CAAC,EAAE,aAAa,CAAA;QAC7B,eAAe,CAAC,EAAE,aAAa,CAAA;KAChC;IAED,UAAiB,aAAa;QAC5B,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,GAAG,CAAA;QACd,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;KACjC;IAED,KAAY,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAA;CACvD;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,EAAE,CAAQ;IAClB,OAAO,CAAC,SAAS,CAGX;IAEN,MAAM,CAAC,KAAK;iBACY,KAAK,CAAC,KAAK;iBACX,KAAK,CAAC,KAAK;kBACT,KAAK,CAAC,KAAK;MACpC;gBAEW,KAAK,EAAE,KAAK,CAAC,OAAO;IAYhC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAEvB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAG3B;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAGtB;IAED,IAAI,OAAO,IAAI,MAAM,GAAG,SAAS,CAEhC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAGtC;IAED,IAAI,aAAa,IAAI,KAAK,CAAC,aAAa,GAAG,SAAS,CAEnD;IAED,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,EAGxD;IAED,IAAI,eAAe,IAAI,KAAK,CAAC,aAAa,GAAG,SAAS,CAErD;IAED,IAAI,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,EAG1D;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,CAAC,MAAM;IAMd,aAAa,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI;IAIrD,MAAM,IAAI,MAAM;CAGjB;AAmLD,wBAAsB,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AACvE,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,KAAK,CAAC,CAAA"}
|