Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@uppy/vue: migrate to Composition API with TS & drop Vue 2 support #5043

Merged
merged 5 commits into from
Mar 28, 2024

Conversation

Murderlon
Copy link
Member

@Murderlon Murderlon commented Mar 28, 2024

  • Drop Vue 2 support which has been EOL since 31 December 2023.
  • Remove vue 2 from examples
  • Refactor @uppy/vue to Composition API with TS
  • Tested this works with our vue3 example project.

AFAIK the recommended way is to publish Vue packages using Single File Components syntax, which has better TS support, but that requires a compiler setup which we don't have here. To keep it simple, I'm writing components in TS. The only downside is typing props, which is a bit awkward now like this:

   props: {
      type: Object as PropType<DashboardModalOptions<any, any>>,
    },

Inside SFC's you can properly type with TS:

const props = defineProps<{
  foo: string
  bar?: number
}>()

* 4.x:
  @uppy/angular,meta: upgrade to Angular 17.x and to TS 5.4 (#5008)
  @uppy/svelte: remove UMD output and make it use newer types (#5023)
  fix type imports (#5038)
  @uppy/aws-s3-multipart: mark `opts` as optional (#5039)
  e2e: bump Cypress version (#5034)
  @uppy/react: remove `prop-types` dependency (#5031)
  @uppy/progress-bar: remove default target (#4971)
  @uppy/status-bar: remove default target (#4970)
  @uppy/react: remove `Wrapper.ts` (#5032)
  @uppy/react: refactor to TS (#5012)
  @uppy/core: refine type of private variables (#5028)
  @uppy/dashboard: refine type of private variables (#5027)
  @uppy/drag-drop: refine type of private variables (#5026)
  @uppy/status-bar: refine type of private variables (#5025)
@Murderlon Murderlon requested a review from aduh95 March 28, 2024 11:05
@Murderlon Murderlon self-assigned this Mar 28, 2024
Copy link
Contributor

Diff output files
diff --git a/packages/@uppy/vue/lib/dashboard-modal.js b/packages/@uppy/vue/lib/dashboard-modal.js
index e9e5509..e651eaa 100644
--- a/packages/@uppy/vue/lib/dashboard-modal.js
+++ b/packages/@uppy/vue/lib/dashboard-modal.js
@@ -1,93 +1,51 @@
+import { Uppy } from "@uppy/core";
 import DashboardPlugin from "@uppy/dashboard";
-import { shallowEqualObjects } from "shallow-equal";
-import * as Vue from "vue";
-import { isVue2 } from "./utils.js";
-export default {
-  data() {
-    return {
-      plugin: {},
-    };
-  },
+import { defineComponent, h, ref, watch } from "vue";
+import useUppy from "./useUppy";
+export default defineComponent({
+  name: "DashboardModal",
   props: {
     uppy: {
+      type: Uppy,
       required: true,
     },
     props: {
       type: Object,
     },
-    plugins: {
-      type: Array,
-    },
     open: {
       type: Boolean,
       required: true,
     },
   },
-  mounted() {
-    this.installPlugin();
-  },
-  methods: {
-    installPlugin() {
+  setup(props) {
+    const containerRef = ref();
+    const pluginRef = ref();
+    const propsRef = ref(props);
+    const onMount = () => {
       const {
         uppy,
-      } = this;
+      } = props;
       const options = {
-        id: "vue:DashboardModal",
-        plugins: this.plugins,
-        ...this.props,
-        target: this.$refs.container,
+        id: "DashboardModal",
+        inline: false,
+        ...props,
+        target: containerRef.value,
       };
       uppy.use(DashboardPlugin, options);
-      this.plugin = uppy.getPlugin(options.id);
-      if (this.open) {
-        this.plugin.openModal();
-      }
-    },
-    uninstallPlugin(uppy) {
-      uppy.removePlugin(this.plugin);
-    },
-  },
-  beforeDestroy() {
-    this.uninstallPlugin(this.uppy);
-  },
-  beforeUnmount() {
-    this.uninstallPlugin(this.uppy);
-  },
-  watch: {
-    uppy(current, old) {
-      if (old !== current) {
-        this.uninstallPlugin(old);
-        this.installPlugin();
-      }
-    },
-    open(current, old) {
+      pluginRef.value = uppy.getPlugin(options.id);
+    };
+    useUppy(onMount, pluginRef, props.uppy, propsRef);
+    watch(() => props.open, (current, old) => {
       if (current && !old) {
-        this.plugin.openModal();
+        pluginRef.value.openModal();
       }
       if (!current && old) {
-        this.plugin.closeModal();
-      }
-    },
-    props(current, old) {
-      if (!shallowEqualObjects(current, old)) {
-        this.plugin.setOptions({
-          ...current,
-        });
+        pluginRef.value.closeModal();
       }
-    },
-  },
-  render() {
-    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-    if (isVue2(...args)) {
-      const [createElement] = args;
-      return createElement("div", {
-        ref: "container",
-      });
-    }
-    return Vue.h("div", {
-      ref: "container",
     });
+    return () =>
+      h("div", {
+        ref: containerRef,
+      });
   },
-};
+});
diff --git a/packages/@uppy/vue/lib/dashboard.js b/packages/@uppy/vue/lib/dashboard.js
index 9be5ef4..4350afb 100644
--- a/packages/@uppy/vue/lib/dashboard.js
+++ b/packages/@uppy/vue/lib/dashboard.js
@@ -1,79 +1,38 @@
 import DashboardPlugin from "@uppy/dashboard";
-import { shallowEqualObjects } from "shallow-equal";
-import * as Vue from "vue";
-import { isVue2 } from "./utils.js";
-export default {
-  data() {
-    return {
-      plugin: {},
-    };
-  },
+import { defineComponent, h, ref } from "vue";
+import useUppy from "./useUppy";
+export default defineComponent({
+  name: "Dashboard",
   props: {
     uppy: {
+      type: Object,
       required: true,
     },
     props: {
       type: Object,
     },
-    plugins: {
-      type: Array,
-    },
   },
-  mounted() {
-    this.installPlugin();
-  },
-  methods: {
-    installPlugin() {
+  setup(props) {
+    const containerRef = ref();
+    const pluginRef = ref();
+    const propsRef = ref(props.props);
+    const onMount = () => {
       const {
         uppy,
-      } = this;
+      } = props;
       const options = {
-        id: "vue:Dashboard",
+        id: "Dashboard",
         inline: true,
-        plugins: this.plugins,
-        ...this.props,
-        target: this.$refs.container,
+        ...props,
+        target: containerRef.value,
       };
       uppy.use(DashboardPlugin, options);
-      this.plugin = uppy.getPlugin(options.id);
-    },
-    uninstallPlugin(uppy) {
-      uppy.removePlugin(this.plugin);
-    },
-  },
-  beforeDestroy() {
-    this.uninstallPlugin(this.uppy);
-  },
-  beforeUnmount() {
-    this.uninstallPlugin(this.uppy);
-  },
-  watch: {
-    uppy(current, old) {
-      if (old !== current) {
-        this.uninstallPlugin(old);
-        this.installPlugin();
-      }
-    },
-    props(current, old) {
-      if (!shallowEqualObjects(current, old)) {
-        this.plugin.setOptions({
-          ...current,
-        });
-      }
-    },
-  },
-  render() {
-    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-    if (isVue2(...args)) {
-      const [createElement] = args;
-      return createElement("div", {
-        ref: "container",
+      pluginRef.value = uppy.getPlugin(options.id);
+    };
+    useUppy(onMount, pluginRef, props.uppy, propsRef);
+    return () =>
+      h("div", {
+        ref: containerRef,
       });
-    }
-    return Vue.h("div", {
-      ref: "container",
-    });
   },
-};
+});
diff --git a/packages/@uppy/vue/lib/drag-drop.js b/packages/@uppy/vue/lib/drag-drop.js
index 3e2c986..fe3b597 100644
--- a/packages/@uppy/vue/lib/drag-drop.js
+++ b/packages/@uppy/vue/lib/drag-drop.js
@@ -1,74 +1,38 @@
+import { Uppy } from "@uppy/core";
 import DragDropPlugin from "@uppy/drag-drop";
-import { shallowEqualObjects } from "shallow-equal";
-import * as Vue from "vue";
-import { isVue2 } from "./utils.js";
-export default {
-  data() {
-    return {
-      plugin: {},
-    };
-  },
+import { defineComponent, h, ref } from "vue";
+import useUppy from "./useUppy";
+export default defineComponent({
+  name: "DragDrop",
   props: {
     uppy: {
+      type: Uppy,
       required: true,
     },
     props: {
       type: Object,
     },
   },
-  mounted() {
-    this.installPlugin();
-  },
-  methods: {
-    installPlugin() {
+  setup(props) {
+    const containerRef = ref();
+    const pluginRef = ref();
+    const propsRef = ref(props.props);
+    const onMount = () => {
       const {
         uppy,
-      } = this;
+      } = props;
       const options = {
-        id: "vue:DragDrop",
-        ...this.props,
-        target: this.$refs.container,
+        id: "DragDrop",
+        ...props,
+        target: containerRef.value,
       };
       uppy.use(DragDropPlugin, options);
-      this.plugin = uppy.getPlugin(options.id);
-    },
-    uninstallPlugin(uppy) {
-      uppy.removePlugin(this.plugin);
-    },
-  },
-  beforeDestroy() {
-    this.uninstallPlugin(this.uppy);
-  },
-  beforeUnmount() {
-    this.uninstallPlugin(this.uppy);
-  },
-  watch: {
-    uppy(current, old) {
-      if (old !== current) {
-        this.uninstallPlugin(old);
-        this.installPlugin();
-      }
-    },
-    props(current, old) {
-      if (!shallowEqualObjects(current, old)) {
-        this.plugin.setOptions({
-          ...current,
-        });
-      }
-    },
-  },
-  render() {
-    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-    if (isVue2(...args)) {
-      const [createElement] = args;
-      return createElement("div", {
-        ref: "container",
+      pluginRef.value = uppy.getPlugin(options.id);
+    };
+    useUppy(onMount, pluginRef, props.uppy, propsRef);
+    return () =>
+      h("div", {
+        ref: containerRef,
       });
-    }
-    return Vue.h("div", {
-      ref: "container",
-    });
   },
-};
+});
diff --git a/packages/@uppy/vue/lib/file-input.js b/packages/@uppy/vue/lib/file-input.js
index 38a2812..8c6657b 100644
--- a/packages/@uppy/vue/lib/file-input.js
+++ b/packages/@uppy/vue/lib/file-input.js
@@ -1,74 +1,38 @@
+import { Uppy } from "@uppy/core";
 import FileInputPlugin from "@uppy/file-input";
-import { shallowEqualObjects } from "shallow-equal";
-import * as Vue from "vue";
-import { isVue2 } from "./utils.js";
-export default {
-  data() {
-    return {
-      plugin: {},
-    };
-  },
+import { defineComponent, h, ref } from "vue";
+import useUppy from "./useUppy";
+export default defineComponent({
+  name: "FileInput",
   props: {
     uppy: {
+      type: Uppy,
       required: true,
     },
     props: {
       type: Object,
     },
   },
-  mounted() {
-    this.installPlugin();
-  },
-  methods: {
-    installPlugin() {
+  setup(props) {
+    const containerRef = ref();
+    const pluginRef = ref();
+    const propsRef = ref(props.props);
+    const onMount = () => {
       const {
         uppy,
-      } = this;
+      } = props;
       const options = {
-        id: "vue:FileInput",
-        ...this.props,
-        target: this.$refs.container,
+        id: "FileInput",
+        ...props,
+        target: containerRef.value,
       };
       uppy.use(FileInputPlugin, options);
-      this.plugin = uppy.getPlugin(options.id);
-    },
-    uninstallPlugin(uppy) {
-      uppy.removePlugin(this.plugin);
-    },
-  },
-  beforeDestroy() {
-    this.uninstallPlugin(this.uppy);
-  },
-  beforeUnmount() {
-    this.uninstallPlugin(this.uppy);
-  },
-  watch: {
-    uppy(current, old) {
-      if (old !== current) {
-        this.uninstallPlugin(old);
-        this.installPlugin();
-      }
-    },
-    props(current, old) {
-      if (!shallowEqualObjects(current, old)) {
-        this.plugin.setOptions({
-          ...current,
-        });
-      }
-    },
-  },
-  render() {
-    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-    if (isVue2(...args)) {
-      const [createElement] = args;
-      return createElement("div", {
-        ref: "container",
+      pluginRef.value = uppy.getPlugin(options.id);
+    };
+    useUppy(onMount, pluginRef, props.uppy, propsRef);
+    return () =>
+      h("div", {
+        ref: containerRef,
       });
-    }
-    return Vue.h("div", {
-      ref: "container",
-    });
   },
-};
+});
diff --git a/packages/@uppy/vue/lib/progress-bar.js b/packages/@uppy/vue/lib/progress-bar.js
index 133db64..b967075 100644
--- a/packages/@uppy/vue/lib/progress-bar.js
+++ b/packages/@uppy/vue/lib/progress-bar.js
@@ -1,71 +1,38 @@
+import { Uppy } from "@uppy/core";
 import ProgressBarPlugin from "@uppy/progress-bar";
-import { shallowEqualObjects } from "shallow-equal";
-import * as Vue from "vue";
-import { isVue2 } from "./utils.js";
-export default {
-  data() {
-    return {
-      plugin: {},
-    };
-  },
+import { defineComponent, h, ref } from "vue";
+import useUppy from "./useUppy";
+export default defineComponent({
+  name: "ProgressBar",
   props: {
     uppy: {
+      type: Uppy,
       required: true,
     },
     props: {
       type: Object,
     },
   },
-  mounted() {
-    this.installPlugin();
-  },
-  methods: {
-    installPlugin() {
+  setup(props) {
+    const containerRef = ref();
+    const pluginRef = ref();
+    const propsRef = ref(props.props);
+    const onMount = () => {
       const {
         uppy,
-      } = this;
+      } = props;
       const options = {
-        id: "vue:ProgressBar",
-        ...this.props,
-        target: this.$refs.container,
+        id: "ProgressBar",
+        ...props,
+        target: containerRef.value,
       };
       uppy.use(ProgressBarPlugin, options);
-      this.plugin = uppy.getPlugin(options.id);
-    },
-    uninstallPlugin(uppy) {
-      uppy.removePlugin(this.plugin);
-    },
-  },
-  beforeDestroy() {
-    this.uninstallPlugin(this.uppy);
-  },
-  watch: {
-    uppy(current, old) {
-      if (old !== current) {
-        this.uninstallPlugin(old);
-        this.installPlugin();
-      }
-    },
-    props(current, old) {
-      if (!shallowEqualObjects(current, old)) {
-        this.plugin.setOptions({
-          ...current,
-        });
-      }
-    },
-  },
-  render() {
-    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-    if (isVue2(...args)) {
-      const [createElement] = args;
-      return createElement("div", {
-        ref: "container",
+      pluginRef.value = uppy.getPlugin(options.id);
+    };
+    useUppy(onMount, pluginRef, props.uppy, propsRef);
+    return () =>
+      h("div", {
+        ref: containerRef,
       });
-    }
-    return Vue.h("div", {
-      ref: "container",
-    });
   },
-};
+});
diff --git a/packages/@uppy/vue/lib/status-bar.js b/packages/@uppy/vue/lib/status-bar.js
index a3f56ed..6d4444d 100644
--- a/packages/@uppy/vue/lib/status-bar.js
+++ b/packages/@uppy/vue/lib/status-bar.js
@@ -1,74 +1,38 @@
+import { Uppy } from "@uppy/core";
 import StatusBarPlugin from "@uppy/status-bar";
-import { shallowEqualObjects } from "shallow-equal";
-import * as Vue from "vue";
-import { isVue2 } from "./utils.js";
-export default {
-  data() {
-    return {
-      plugin: {},
-    };
-  },
+import { defineComponent, h, ref } from "vue";
+import useUppy from "./useUppy";
+export default defineComponent({
+  name: "StatusBar",
   props: {
     uppy: {
+      type: Uppy,
       required: true,
     },
     props: {
       type: Object,
     },
   },
-  mounted() {
-    this.installPlugin();
-  },
-  methods: {
-    installPlugin() {
+  setup(props) {
+    const containerRef = ref();
+    const pluginRef = ref();
+    const propsRef = ref(props.props);
+    const onMount = () => {
       const {
         uppy,
-      } = this;
+      } = props;
       const options = {
-        id: "vue:StatusBar",
-        ...this.props,
-        target: this.$refs.container,
+        id: "StatusBar",
+        ...props,
+        target: containerRef.value,
       };
       uppy.use(StatusBarPlugin, options);
-      this.plugin = uppy.getPlugin(options.id);
-    },
-    uninstallPlugin(uppy) {
-      uppy.removePlugin(this.plugin);
-    },
-  },
-  beforeDestroy() {
-    this.uninstallPlugin(this.uppy);
-  },
-  beforeUnmount() {
-    this.uninstallPlugin(this.uppy);
-  },
-  watch: {
-    uppy(current, old) {
-      if (old !== current) {
-        this.uninstallPlugin(old);
-        this.installPlugin();
-      }
-    },
-    props(current, old) {
-      if (!shallowEqualObjects(current, old)) {
-        this.plugin.setOptions({
-          ...current,
-        });
-      }
-    },
-  },
-  render() {
-    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-    if (isVue2(...args)) {
-      const [createElement] = args;
-      return createElement("div", {
-        ref: "container",
+      pluginRef.value = uppy.getPlugin(options.id);
+    };
+    useUppy(onMount, pluginRef, props.uppy, propsRef);
+    return () =>
+      h("div", {
+        ref: containerRef,
       });
-    }
-    return Vue.h("div", {
-      ref: "container",
-    });
   },
-};
+});

@Murderlon Murderlon changed the title @uppy/vue: migrate to Composition API with TS @uppy/vue: migrate to Composition API with TS & drop Vue 2 support Mar 28, 2024
@Murderlon Murderlon added the 4.0 For the 4.0 major version label Mar 28, 2024
package.json Outdated Show resolved Hide resolved
Co-authored-by: Antoine du Hamel <antoine@transloadit.com>

This comment was marked as resolved.

Copy link
Member

@aduh95 aduh95 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't vouch for all the code, but I can confirm the example works.

@aduh95
Copy link
Member

aduh95 commented Mar 28, 2024

Error: Webpack Compilation Error
[tsl] ERROR
      TS5110: Option 'module' must be set to 'NodeNext' when option 'moduleResolution' is set to 'NodeNext'.

@aduh95 aduh95 merged commit 1f8ecd7 into 4.x Mar 28, 2024
20 checks passed
@aduh95 aduh95 deleted the drop-vue-2 branch March 28, 2024 13:47
github-actions bot added a commit that referenced this pull request Mar 28, 2024
| Package                   |      Version | Package                   |      Version |
| ------------------------- | ------------ | ------------------------- | ------------ |
| @uppy/angular             | 0.7.0-beta.1 | @uppy/progress-bar        | 4.0.0-beta.1 |
| @uppy/audio               | 2.0.0-beta.1 | @uppy/provider-views      | 4.0.0-beta.1 |
| @uppy/aws-s3              | 4.0.0-beta.1 | @uppy/react               | 4.0.0-beta.1 |
| @uppy/aws-s3-multipart    | 4.0.0-beta.1 | @uppy/redux-dev-tools     | 4.0.0-beta.1 |
| @uppy/box                 | 3.0.0-beta.1 | @uppy/remote-sources      | 2.0.0-beta.1 |
| @uppy/companion           | 5.0.0-beta.1 | @uppy/screen-capture      | 4.0.0-beta.1 |
| @uppy/companion-client    | 4.0.0-beta.1 | @uppy/status-bar          | 4.0.0-beta.1 |
| @uppy/compressor          | 2.0.0-beta.1 | @uppy/store-default       | 4.0.0-beta.1 |
| @uppy/core                | 4.0.0-beta.1 | @uppy/store-redux         | 4.0.0-beta.1 |
| @uppy/dashboard           | 4.0.0-beta.1 | @uppy/svelte              | 4.0.0-beta.1 |
| @uppy/drag-drop           | 4.0.0-beta.1 | @uppy/thumbnail-generator | 4.0.0-beta.1 |
| @uppy/drop-target         | 3.0.0-beta.1 | @uppy/transloadit         | 4.0.0-beta.1 |
| @uppy/dropbox             | 4.0.0-beta.1 | @uppy/tus                 | 4.0.0-beta.1 |
| @uppy/facebook            | 4.0.0-beta.1 | @uppy/unsplash            | 4.0.0-beta.1 |
| @uppy/file-input          | 4.0.0-beta.1 | @uppy/url                 | 4.0.0-beta.1 |
| @uppy/form                | 4.0.0-beta.1 | @uppy/utils               | 6.0.0-beta.1 |
| @uppy/golden-retriever    | 4.0.0-beta.1 | @uppy/vue                 | 2.0.0-beta.1 |
| @uppy/google-drive        | 4.0.0-beta.1 | @uppy/webcam              | 4.0.0-beta.1 |
| @uppy/image-editor        | 3.0.0-beta.1 | @uppy/xhr-upload          | 4.0.0-beta.1 |
| @uppy/informer            | 4.0.0-beta.1 | @uppy/zoom                | 3.0.0-beta.1 |
| @uppy/instagram           | 4.0.0-beta.1 | uppy                      | 4.0.0-beta.1 |
| @uppy/onedrive            | 4.0.0-beta.1 |                           |              |

- @uppy/vue: migrate to Composition API with TS & drop Vue 2 support (Merlijn Vos / #5043)
- @uppy/angular: upgrade to Angular 17.x and to TS 5.4 (Antoine du Hamel / #5008)
- @uppy/svelte: remove UMD output and make it use newer types (Antoine du Hamel / #5023)
- @uppy/companion-client,@uppy/provider-views,@uppy/status-bar: fix type imports (Antoine du Hamel / #5038)
- @uppy/aws-s3-multipart: mark `opts` as optional (Antoine du Hamel / #5039)
- e2e: bump Cypress version (Antoine du Hamel / #5034)
- @uppy/react: remove `prop-types` dependency (Antoine du Hamel / #5031)
- @uppy/progress-bar: remove default target (Antoine du Hamel / #4971)
- @uppy/status-bar: remove default target (Antoine du Hamel / #4970)
- @uppy/react: remove `Wrapper.ts` (Antoine du Hamel / #5032)
- @uppy/react: refactor to TS (Antoine du Hamel / #5012)
- @uppy/core: refine type of private variables (Antoine du Hamel / #5028)
- @uppy/dashboard: refine type of private variables (Antoine du Hamel / #5027)
- @uppy/drag-drop: refine type of private variables (Antoine du Hamel / #5026)
- @uppy/status-bar: refine type of private variables (Antoine du Hamel / #5025)
- @uppy/remote-sources: migrate to TS (Merlijn Vos / #5020)
- @uppy/dashboard: refine option types (Antoine du Hamel / #5022)
- @uppy/dashboard: add new `autoOpen` option (Chris Grigg / #5001)
- @uppy/aws-s3-multipart,@uppy/tus,@uppy/utils,@uppy/xhr-upload: Make `allowedMetaFields` consistent (Merlijn Vos / #5011)
- @uppy/core: fix some type errors (Antoine du Hamel / #5015)
- @uppy/audio,@uppy/dashboard,@uppy/drop-target,@uppy/webcam: add missing exports (Antoine du Hamel / #5014)
- meta: Bump webpack-dev-middleware from 5.3.3 to 5.3.4 (dependabot[bot] / #5013)
- @uppy/dashboard: refactor to TypeScript (Antoine du Hamel / #4984)
- @uppy/companion: improve error msg (Mikael Finstad / #5010)
- @uppy/aws-s3-multipart: refactor to TS (Antoine du Hamel / #4902)
- @uppy/dashboard: refactor to stable lifecycle method (Antoine du Hamel / #4999)
- @uppy/companion: crash if trying to set path to / (Mikael Finstad / #5003)
- @uppy/provider-views: fix `super.toggleCheckbox` bug (Mikael Finstad / #5004)
- @uppy/aws-s3-multipart: fix escaping issue with client signed request (Hiroki Shimizu / #5006)
- @uppy/drag-drop,@uppy/progress-bar: add missing exports (Antoine du Hamel / #5009)
- @uppy/transloadit: migrate to TS (Merlijn Vos / #4987)
- @uppy/utils: fix `RateLimitedQueue#wrapPromiseFunction` types (Antoine du Hamel / #5007)
- @uppy/golden-retriever: migrate to TS (Merlijn Vos / #4989)
- meta: Bump follow-redirects from 1.15.4 to 1.15.6 (dependabot[bot] / #5002)
- meta: fix `resize-observer-polyfill` types (Antoine du Hamel / #4994)
- @uppy/core: various type fixes (Antoine du Hamel / #4995)
- @uppy/utils: fix `findAllDOMElements` type (Antoine du Hamel / #4997)
- @uppy/status-bar: fix `recoveredState` type (Antoine du Hamel / #4996)
- @uppy/utils: fix `AbortablePromise` type (Antoine du Hamel / #4988)
- @uppy/core,@uppy/provider-views: Fix breadcrumbs (Evgenia Karunus / #4986)
- @uppy/drag-drop: refactor to TypeScript (Antoine du Hamel / #4983)
- @uppy/webcam: refactor to TypeScript (Antoine du Hamel / #4870)
- @uppy/url: migrate to TS (Merlijn Vos / #4980)
- @uppy/zoom: refactor to TypeScript (Murderlon / #4979)
- @uppy/unsplash: refactor to TypeScript (Murderlon / #4979)
- @uppy/onedrive: refactor to TypeScript (Murderlon / #4979)
- @uppy/instagram: refactor to TypeScript (Murderlon / #4979)
- @uppy/google-drive: refactor to TypeScript (Murderlon / #4979)
- @uppy/facebook: refactor to TypeScript (Murderlon / #4979)
- @uppy/dropbox: refactor to TypeScript (Murderlon / #4979)
- @uppy/box: refactor to TypeScript (Murderlon / #4979)
- @uppy/utils: migrate RateLimitedQueue to TS (Merlijn Vos / #4981)
- @uppy/thumbnail-generator: migrate to TS (Merlijn Vos / #4978)
- @uppy/screen-capture: migrate to TS (Merlijn Vos / #4965)
- @uppy/companion-client: Replace Provider.initPlugin with composition (Merlijn Vos / #4977)
- uppy: remove legacy bundle (Antoine du Hamel)
- meta: include types in npm archive (Antoine du Hamel)
- @uppy/angular: fix build (Antoine du Hamel)
- meta: Remove generate types from locale-pack (Murderlon)
- meta: enable CI on `4.x` branch (Antoine du Hamel)
- @uppy/vue: [v4.x] remove manual types (Antoine du Hamel / #4803)
- meta: prepare release workflow for beta versions (Antoine du Hamel)




| Package                   | Version | Package                   | Version |
| ------------------------- | ------- | ------------------------- | ------- |
| @uppy/audio               |   1.1.8 | @uppy/progress-bar        |   3.1.1 |
| @uppy/aws-s3-multipart    |  3.11.0 | @uppy/provider-views      |  3.11.0 |
| @uppy/box                 |   2.3.0 | @uppy/react               |   3.3.0 |
| @uppy/companion           |  4.13.0 | @uppy/remote-sources      |   1.2.0 |
| @uppy/companion-client    |   3.8.0 | @uppy/screen-capture      |   3.2.0 |
| @uppy/compressor          |   1.1.2 | @uppy/status-bar          |   3.3.1 |
| @uppy/core                |  3.10.0 | @uppy/thumbnail-generator |   3.1.0 |
| @uppy/dashboard           |   3.8.0 | @uppy/transloadit         |   3.6.0 |
| @uppy/drag-drop           |   3.1.0 | @uppy/tus                 |   3.5.4 |
| @uppy/drop-target         |   2.0.5 | @uppy/unsplash            |   3.3.0 |
| @uppy/dropbox             |   3.3.0 | @uppy/url                 |   3.6.0 |
| @uppy/facebook            |   3.3.0 | @uppy/utils               |   5.7.5 |
| @uppy/golden-retriever    |   3.2.0 | @uppy/webcam              |   3.4.0 |
| @uppy/google-drive        |   3.5.0 | @uppy/zoom                |   2.3.0 |
| @uppy/instagram           |   3.3.0 | uppy                      |  3.24.0 |
| @uppy/onedrive            |   3.3.0 |                           |         |

- @uppy/box,@uppy/companion-client,@uppy/provider-views,@uppy/status-bar: fix type imports (Antoine du Hamel / #5038)
- @uppy/aws-s3-multipart: mark `opts` as optional (Antoine du Hamel / #5039)
- e2e: bump Cypress version (Antoine du Hamel / #5034)
- @uppy/react: refactor to TS (Antoine du Hamel / #5012)
- @uppy/core: refine type of private variables (Antoine du Hamel / #5028)
- @uppy/dashboard: refine type of private variables (Antoine du Hamel / #5027)
- @uppy/drag-drop: refine type of private variables (Antoine du Hamel / #5026)
- @uppy/status-bar: refine type of private variables (Antoine du Hamel / #5025)
- @uppy/remote-sources: migrate to TS (Merlijn Vos / #5020)
- @uppy/dashboard: refine option types (Antoine du Hamel / #5022)
- @uppy/dashboard: add new `autoOpen` option (Chris Grigg / #5001)
- @uppy/core: fix some type errors (Antoine du Hamel / #5015)
- @uppy/audio,@uppy/dashboard,@uppy/drop-target,@uppy/webcam: add missing exports (Antoine du Hamel / #5014)
- meta: Bump webpack-dev-middleware from 5.3.3 to 5.3.4 (dependabot[bot] / #5013)
- @uppy/dashboard: refactor to TypeScript (Antoine du Hamel / #4984)
- @uppy/companion: improve error msg (Mikael Finstad / #5010)
- @uppy/aws-s3-multipart: refactor to TS (Antoine du Hamel / #4902)
- @uppy/dashboard: refactor to stable lifecycle method (Antoine du Hamel / #4999)
- @uppy/companion: crash if trying to set path to / (Mikael Finstad / #5003)
- @uppy/provider-views: fix `super.toggleCheckbox` bug (Mikael Finstad / #5004)
- @uppy/aws-s3-multipart: fix escaping issue with client signed request (Hiroki Shimizu / #5006)
- @uppy/drag-drop,@uppy/progress-bar: add missing exports (Antoine du Hamel / #5009)
- @uppy/transloadit: migrate to TS (Merlijn Vos / #4987)
- @uppy/utils: fix `RateLimitedQueue#wrapPromiseFunction` types (Antoine du Hamel / #5007)
- @uppy/golden-retriever: migrate to TS (Merlijn Vos / #4989)
- meta: Bump follow-redirects from 1.15.4 to 1.15.6 (dependabot[bot] / #5002)
- meta: fix `resize-observer-polyfill` types (Antoine du Hamel / #4994)
- @uppy/core: various type fixes (Antoine du Hamel / #4995)
- @uppy/utils: fix `findAllDOMElements` type (Antoine du Hamel / #4997)
- @uppy/status-bar: fix `recoveredState` type (Antoine du Hamel / #4996)
- @uppy/utils: fix `AbortablePromise` type (Antoine du Hamel / #4988)
- @uppy/core,@uppy/provider-views: Fix breadcrumbs (Evgenia Karunus / #4986)
- @uppy/drag-drop: refactor to TypeScript (Antoine du Hamel / #4983)
- @uppy/webcam: refactor to TypeScript (Antoine du Hamel / #4870)
- @uppy/url: migrate to TS (Merlijn Vos / #4980)
- @uppy/zoom: refactor to TypeScript (Murderlon / #4979)
- @uppy/unsplash: refactor to TypeScript (Murderlon / #4979)
- @uppy/onedrive: refactor to TypeScript (Murderlon / #4979)
- @uppy/instagram: refactor to TypeScript (Murderlon / #4979)
- @uppy/google-drive: refactor to TypeScript (Murderlon / #4979)
- @uppy/facebook: refactor to TypeScript (Murderlon / #4979)
- @uppy/dropbox: refactor to TypeScript (Murderlon / #4979)
- @uppy/box: refactor to TypeScript (Murderlon / #4979)
- @uppy/utils: migrate RateLimitedQueue to TS (Merlijn Vos / #4981)
- @uppy/thumbnail-generator: migrate to TS (Merlijn Vos / #4978)
- @uppy/screen-capture: migrate to TS (Merlijn Vos / #4965)
- @uppy/companion-client: Replace Provider.initPlugin with composition (Merlijn Vos / #4977)
Murderlon added a commit that referenced this pull request Apr 2, 2024
* 4.x: (27 commits)
  Release: uppy@4.0.0-beta.1 (#5047)
  @uppy/vue: migrate to Composition API with TS & drop Vue 2 support (#5043)
  @uppy/angular,meta: upgrade to Angular 17.x and to TS 5.4 (#5008)
  @uppy/svelte: remove UMD output and make it use newer types (#5023)
  fix type imports (#5038)
  @uppy/aws-s3-multipart: mark `opts` as optional (#5039)
  e2e: bump Cypress version (#5034)
  @uppy/react: remove `prop-types` dependency (#5031)
  @uppy/progress-bar: remove default target (#4971)
  @uppy/status-bar: remove default target (#4970)
  @uppy/react: remove `Wrapper.ts` (#5032)
  @uppy/react: refactor to TS (#5012)
  @uppy/core: refine type of private variables (#5028)
  @uppy/dashboard: refine type of private variables (#5027)
  @uppy/drag-drop: refine type of private variables (#5026)
  @uppy/status-bar: refine type of private variables (#5025)
  @uppy/remote-sources: migrate to TS (#5020)
  @uppy/dashboard: refine option types (#5022)
  @uppy/dashboard: add new `autoOpen` option (#5001)
  Make `allowedMetaFields` consistent (#5011)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
4.0 For the 4.0 major version
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants