]> git.ipfire.org Git - thirdparty/vuejs/pinia.git/commitdiff
feat: support TS 4.4 (#656)
authorEduardo San Martin Morote <posva@users.noreply.github.com>
Fri, 3 Sep 2021 10:55:56 +0000 (12:55 +0200)
committerGitHub <noreply@github.com>
Fri, 3 Sep 2021 10:55:56 +0000 (12:55 +0200)
packages/pinia/__tests__/storeSetup.spec.ts
packages/pinia/src/devtools/actions.ts
packages/pinia/src/devtools/file-saver.ts
packages/pinia/src/store.ts
packages/pinia/src/types.ts
yarn.lock

index 14d0eda7a01eb0f09bed4367049cd3c5acee75dc..e42288e9169002db5cdf4b799084291161c7aeaa 100644 (file)
@@ -1,10 +1,10 @@
 import { createPinia, defineStore, setActivePinia } from '../src'
 import { computed, nextTick, ref, watch } from 'vue'
 
-function expectType<T>(value: T): void {}
+function expectType<T>(_value: T): void {}
 
 describe('store with setup syntax', () => {
-  const useStore = defineStore('main', () => {
+  function mainFn() {
     const name = ref('Eduardo')
     const counter = ref(0)
     function increment(amount = 1) {
@@ -13,7 +13,9 @@ describe('store with setup syntax', () => {
     const double = computed(() => counter.value * 2)
 
     return { name, counter, increment, double }
-  })
+  }
+
+  const useStore = defineStore('main', mainFn)
 
   beforeEach(() => {
     setActivePinia(createPinia())
index 443f3cc78bff3ef23191e8de2fc6f4ce757f5b00..17b586351c6e0db7cd215ad256e9754c85b86068 100644 (file)
@@ -9,14 +9,18 @@ export function checkClipboardAccess() {
   }
 }
 
-function checkNotFocusedError(error: Error) {
-  if (error.message.toLowerCase().includes('document is not focused')) {
+function checkNotFocusedError(error: unknown): error is Error {
+  if (
+    error instanceof Error &&
+    error.message.toLowerCase().includes('document is not focused')
+  ) {
     toastMessage(
       'You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.',
       'warn'
     )
     return true
   }
+  return false
 }
 
 export async function actionGlobalCopyState(pinia: Pinia) {
@@ -83,6 +87,7 @@ function getFileOpener() {
         if (!file) return resolve(null)
         return resolve({ text: await file.text(), file })
       }
+      // @ts-ignore: TODO: changed from 4.3 to 4.4
       fileInput!.oncancel = () => resolve(null)
       fileInput!.onerror = reject
       fileInput!.click()
index 7731d72533baf6c149b5ca48b6bb1fdebff97d1d..bc4016f3b4e50f90f022457cf80a39683b15d16a 100644 (file)
@@ -168,6 +168,7 @@ function msSaveAs(blob: Blob, name: string = 'download', opts?: Options) {
       })
     }
   } else {
+    // @ts-ignore: works on windows
     navigator.msSaveOrOpenBlob(bom(blob, opts), name)
   }
 }
index 94c50471da4404fd53b8e2fab0894f93f108003f..d450d88c4f47730912e7a9e216ee038d2fea6154 100644 (file)
@@ -35,7 +35,6 @@ import {
   StoreOnActionListener,
   ActionsTree,
   SubscriptionCallbackMutation,
-  _UnionToTuple,
   DefineSetupStoreOptions,
   DefineStoreOptionsInPlugin,
   StoreGeneric,
index 0196e28c048a95a421fa3aec4a9d8fe3173c63ba..04d2b3cfb327293ce5cd3a252eb79ef81387f02d 100644 (file)
@@ -572,59 +572,31 @@ export type ActionsTree = Record<string, _Method>
 /**
  * @internal
  */
-type _SpreadStateFromStore<SS, K extends readonly any[]> = K extends readonly [
-  infer A,
-  ...infer Rest
-]
-  ? A extends string | number | symbol
-    ? SS extends Record<A, _Method | ComputedRef<any>>
-      ? _SpreadStateFromStore<SS, Rest>
-      : SS extends Record<A, any>
-      ? Record<A, UnwrapRef<SS[A]>> & _SpreadStateFromStore<SS, Rest>
-      : never
-    : {}
-  : {}
-
-/**
- * @internal
- */
-type _SpreadPropertiesFromObject<
-  SS,
-  K extends readonly any[],
-  T
-> = K extends readonly [infer A, ...infer Rest]
-  ? A extends string | number | symbol
-    ? SS extends Record<A, T>
-      ? Record<A, UnwrapRef<SS[A]>> & _SpreadPropertiesFromObject<SS, Rest, T>
-      : _SpreadPropertiesFromObject<SS, Rest, T>
-    : {}
-  : {}
-
-/**
- * @internal
- */
-export type _ExtractStateFromSetupStore<SS> = _SpreadStateFromStore<
-  SS,
-  _UnionToTuple<keyof SS>
->
+export type _ExtractStateFromSetupStore<SS> = SS extends undefined | void
+  ? {}
+  : {
+      [K in keyof SS as SS[K] extends _Method | ComputedRef
+        ? never
+        : K]: UnwrapRef<SS[K]>
+    }
 
 /**
  * @internal
  */
-export type _ExtractActionsFromSetupStore<SS> = _SpreadPropertiesFromObject<
-  SS,
-  _UnionToTuple<keyof SS>,
-  _Method
->
+export type _ExtractActionsFromSetupStore<SS> = SS extends undefined | void
+  ? {}
+  : {
+      [K in keyof SS as SS[K] extends _Method ? K : never]: SS[K]
+    }
 
 /**
  * @internal
  */
-export type _ExtractGettersFromSetupStore<SS> = _SpreadPropertiesFromObject<
-  SS,
-  _UnionToTuple<keyof SS>,
-  ComputedRef<any>
->
+export type _ExtractGettersFromSetupStore<SS> = SS extends undefined | void
+  ? {}
+  : {
+      [K in keyof SS as SS[K] extends ComputedRef ? K : never]: UnwrapRef<SS[K]>
+    }
 
 /**
  * Options passed to `defineStore()` that are common between option and setup
@@ -725,34 +697,3 @@ export interface DefineStoreOptionsInPlugin<
    */
   id?: Id
 }
-
-export type _UnionToTuple<U> = _UnionToTupleRecursively<[], U>
-
-type _Overwrite<T, S extends any> = {
-  [P in keyof T]: P extends keyof S ? S[P] : never
-}
-type _TupleUnshift<T extends any[], X> = T extends any
-  ? ((x: X, ...t: T) => void) extends (...t: infer R) => void
-    ? R
-    : never
-  : never
-type TuplePush<T extends any[], X> = T extends any
-  ? _Overwrite<_TupleUnshift<T, any>, T & { [x: string]: X }>
-  : never
-type _UnionToIntersection<U> = (
-  U extends any ? (k: U) => void : never
-) extends (k: infer I) => void
-  ? I
-  : never
-type _UnionToOvlds<U> = _UnionToIntersection<
-  U extends any ? (f: U) => void : never
->
-type _PopUnion<U> = _UnionToOvlds<U> extends (a: infer A) => void ? A : never
-/* end helpers */
-/* main work */
-type _UnionToTupleRecursively<T extends any[], U> = {
-  1: T
-  0: _PopUnion<U> extends infer SELF
-    ? _UnionToTupleRecursively<TuplePush<T, SELF>, Exclude<U, SELF>>
-    : never
-}[[U] extends [never] ? 1 : 0]
index 464c989b673fe5b1b2e70248269536025b71667d..8a376307d3a1ae097473426aeed5a7ca5c90d6e1 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
@@ -8296,7 +8296,12 @@ typedoc@^0.21.6:
     shiki "^0.9.8"
     typedoc-default-themes "^0.12.10"
 
-typescript@^4.3.5, typescript@~4.3.5:
+typescript@^4.3.5:
+  version "4.4.2"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86"
+  integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==
+
+typescript@~4.3.5:
   version "4.3.5"
   resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4"
   integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==