From b70f074276c4ce0d68a612c503826b9fcf81f2ca Mon Sep 17 00:00:00 2001 From: Danielo Artola Date: Thu, 2 Dec 2021 16:24:32 +0100 Subject: [PATCH] adding types order, moved types to package (#52) * adding types order, moved types to package * stop autogenerating types with microbuble with --no-generateTypes flag * Update package.json Co-authored-by: Aral Roca Gomez * put initialState as optional at createStore * upgrade canary version * set now accepts function as param * fix param on function as set value * remove type for reset on hookreturn * update canary version * update canary version Co-authored-by: Aral Roca Gomez --- package.json | 9 ++++---- package/index.d.ts | 53 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 package/index.d.ts diff --git a/package.json b/package.json index 4f33be1..5848081 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "teaful", - "version": "0.8.1", + "version": "0.9.0-canary.7", "description": "Tiny, easy and powerful React state management (less than 1kb)", "license": "MIT", "keywords": [ @@ -51,7 +51,7 @@ } ] }, - "types": "dist/index.d.ts", + "types": "package/index.d.ts", "scripts": { "lint": "eslint ./package ./tests", "format": "eslint --fix ./package ./tests ./examples", @@ -59,7 +59,8 @@ "test:example:todo-list": "jest ./examples/todo-list", "test:examples": "jest ./examples", "test:watch": "jest ./package ./tests --watch", - "build": "microbundle --jsx React.createElement", + "build-types": "cp ./package/index.d.ts ./dist/index.d.ts", + "build": "microbundle --jsx React.createElement --no-generateTypes && yarn build-types", "dev": "microbundle watch", "prepublish": "yarn build" }, @@ -68,7 +69,7 @@ }, "jest": { "testEnvironment": "jsdom", - "moduleNameMapper": { + "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/__mocks__/fileMock.js", "\\.(css|less)$": "identity-obj-proxy" } diff --git a/package/index.d.ts b/package/index.d.ts new file mode 100644 index 0000000..68ba964 --- /dev/null +++ b/package/index.d.ts @@ -0,0 +1,53 @@ +declare module "teaful" { + + import React from "react"; + + type HookReturn = [T, (value: T | ((value: T) => T | undefined | null) ) => void]; + type initialStoreType = Record; + + type Hook = ( + initial?: S, + onAfterUpdate?: afterCallbackType + ) => HookReturn; + + type HookDry = (initial?: S) => HookReturn; + + export type Hoc = { store: HookReturn }; + + type HocFunc = ( + component: R, + initial?: S + ) => R; + + type afterCallbackType = (param: { + store: S; + prevStore: S; + }) => void; + + type getStoreType = { + [key in keyof S | string ]: S[key] extends initialStoreType + ? useStoreType & HookDry : HookDry; + }; + + type useStoreType = { + [key in keyof S]: S[key] extends initialStoreType + ? useStoreType & Hook : Hook; + }; + + type withStoreType = { + [key in keyof S]: S[key] extends initialStoreType + ? withStoreType & HocFunc + : HocFunc; + }; + + function createStore( + initial?: S, + afterCallback?: afterCallbackType + ): { + getStore: HookDry & getStoreType; + useStore: Hook & useStoreType; + withStore: HocFunc & withStoreType; + }; + + export default createStore; +}