uppy icon indicating copy to clipboard operation
uppy copied to clipboard

fix some types in core

Open mifi opened this issue 1 year ago • 1 comments

I think we should strive for safe typings in core, because a lot of other code depends on it. this PR fixes some of the issues, and adds todos for some remaining issues with core typings.

  1. don't type assert opts, but instead use default values so that typescript understands it. This will prevent this.opts looking like they are required when they in reality are undefined (at runtime). This change also uncovered the fact that locale is in fact optional, so change types to reflect the fact. This change also fixes the problem where any options set to undefined in the constructor would overwrite any default options, example: { ...{ id: 'uppy' }, ...{ id: undefined } } becomes { id: undefined }

  2. remove some other unsafe type assertions

mifi avatar Feb 06 '24 13:02 mifi

Diff output files
diff --git a/packages/@uppy/core/lib/Uppy.js b/packages/@uppy/core/lib/Uppy.js
index ef5809d..cca1261 100644
--- a/packages/@uppy/core/lib/Uppy.js
+++ b/packages/@uppy/core/lib/Uppy.js
@@ -56,6 +56,17 @@ _Symbol$for = Symbol.for("uppy test: getPlugins");
 _Symbol$for2 = Symbol.for("uppy test: createUpload");
 export class Uppy {
   constructor(_opts) {
+    var _opts$id,
+      _opts$autoProceed,
+      _opts$allowMultipleUp,
+      _opts$allowMultipleUp2,
+      _opts$debug,
+      _opts$meta,
+      _opts$onBeforeFileAdd,
+      _opts$onBeforeUpload,
+      _opts$store,
+      _opts$logger,
+      _opts$infoTimeout;
     Object.defineProperty(this, _runUpload, {
       value: _runUpload2,
     });
@@ -159,29 +170,32 @@ export class Uppy {
       value: new Map(),
     });
     this.defaultLocale = locale;
-    const defaultOptions = {
-      id: "uppy",
-      autoProceed: false,
-      allowMultipleUploadBatches: true,
-      debug: false,
-      restrictions: defaultRestrictionOptions,
-      meta: {},
-      onBeforeFileAdded: (file, files) => !Object.hasOwn(files, file.id),
-      onBeforeUpload: files => files,
-      store: new DefaultStore(),
-      logger: justErrorsLogger,
-      infoTimeout: 5000,
-    };
-    const merged = {
-      ...defaultOptions,
-      ..._opts,
-    };
     this.opts = {
-      ...merged,
+      ..._opts,
+      id: (_opts$id = _opts == null ? void 0 : _opts.id) != null ? _opts$id : "uppy",
+      autoProceed: (_opts$autoProceed = _opts == null ? void 0 : _opts.autoProceed) != null ? _opts$autoProceed : false,
+      allowMultipleUploadBatches:
+        (_opts$allowMultipleUp = _opts == null ? void 0 : _opts.allowMultipleUploadBatches) != null
+          ? _opts$allowMultipleUp
+          : true,
+      allowMultipleUploads: (_opts$allowMultipleUp2 = _opts == null ? void 0 : _opts.allowMultipleUploads) != null
+        ? _opts$allowMultipleUp2
+        : true,
+      debug: (_opts$debug = _opts == null ? void 0 : _opts.debug) != null ? _opts$debug : false,
       restrictions: {
-        ...defaultOptions.restrictions,
-        ...(_opts && _opts.restrictions),
+        ...defaultRestrictionOptions,
+        ...(_opts == null ? void 0 : _opts.restrictions),
       },
+      meta: (_opts$meta = _opts == null ? void 0 : _opts.meta) != null ? _opts$meta : {},
+      onBeforeFileAdded: (_opts$onBeforeFileAdd = _opts == null ? void 0 : _opts.onBeforeFileAdded) != null
+        ? _opts$onBeforeFileAdd
+        : (file, files) => !Object.hasOwn(files, file.id),
+      onBeforeUpload: (_opts$onBeforeUpload = _opts == null ? void 0 : _opts.onBeforeUpload) != null
+        ? _opts$onBeforeUpload
+        : files => files,
+      store: (_opts$store = _opts == null ? void 0 : _opts.store) != null ? _opts$store : new DefaultStore(),
+      logger: (_opts$logger = _opts == null ? void 0 : _opts.logger) != null ? _opts$logger : justErrorsLogger,
+      infoTimeout: (_opts$infoTimeout = _opts == null ? void 0 : _opts.infoTimeout) != null ? _opts$infoTimeout : 5000,
     };
     if (_opts && _opts.logger && _opts.debug) {
       this.log(
@@ -745,7 +759,8 @@ export class Uppy {
     if (sizedFiles.length === 0) {
       const progressMax = inProgress.length * 100;
       const currentProgress = unsizedFiles.reduce((acc, file) => {
-        return acc + file.progress.percentage;
+        var _file$progress$percen;
+        return acc + ((_file$progress$percen = file.progress.percentage) != null ? _file$progress$percen : 0);
       }, 0);
       const totalProgress = Math.round(currentProgress / progressMax * 100);
       this.setState({
@@ -761,7 +776,7 @@ export class Uppy {
     totalSize += averageSize * unsizedFiles.length;
     let uploadedSize = 0;
     sizedFiles.forEach(file => {
-      uploadedSize += file.progress.bytesUploaded;
+      uploadedSize += Number(file.progress.bytesUploaded);
     });
     unsizedFiles.forEach(file => {
       uploadedSize += averageSize * (file.progress.percentage || 0) / 100;

github-actions[bot] avatar Feb 06 '24 13:02 github-actions[bot]