From 2aaef2d9d0fccfc8df95fbe497db53256c088a26 Mon Sep 17 00:00:00 2001 From: freddie Date: Tue, 30 Apr 2024 15:34:27 +0100 Subject: [PATCH] initial commit --- .changeset/README.md | 8 +++ .changeset/config.json | 11 ++++ .github/workflows/release.yml | 51 +++++++++++++++++ .gitignore | 2 + .vscode/settings.json | 11 ++++ biome.json | 25 +++++++++ bun.lockb | Bin 0 -> 160346 bytes package.json | 40 +++++++++++++ readme.md | 50 +++++++++++++++++ src/context.tsx | 31 ++++++++++ src/index.ts | 1 + tsconfig.json | 103 ++++++++++++++++++++++++++++++++++ tsup.config.ts | 11 ++++ 13 files changed, 344 insertions(+) create mode 100644 .changeset/README.md create mode 100644 .changeset/config.json create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 biome.json create mode 100755 bun.lockb create mode 100644 package.json create mode 100644 readme.md create mode 100644 src/context.tsx create mode 100644 src/index.ts create mode 100644 tsconfig.json create mode 100644 tsup.config.ts diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 0000000..e5b6d8d --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000..689826e --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..62c4b1d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,51 @@ +name: Release + +on: + push: + branches: + - main + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + release: + name: Release + runs-on: ubuntu-latest + permissions: write-all + steps: + - name: ๐Ÿ“– Checkout repository + uses: actions/checkout@v4 + + - name: ๐Ÿž Setup bun + uses: oven-sh/setup-bun@v1 + + - name: ๐Ÿ“ฆ Install dependencies + shell: bash + run: bun install + + - name: ๐Ÿงช Run unit tests + run: bun run test + + - name: ๐Ÿ”Ž Run static checks + run: bun run check + + - name: ๐Ÿ“ฆ Build + run: bun run build + + - name: ๐Ÿ”‘ Create .npmrc with tokens for publishing + run: | + cat << EOF > "$HOME/.npmrc" + //registry.npmjs.org/:_authToken=$NPM_TOKEN + EOF + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: ๐Ÿ“ค Create Release Pull Request or Publish to npm + id: changesets + uses: changesets/action@v1 + with: + publish: bun run release + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..db4c6d9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +dist +node_modules \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..4bfc926 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "editor.formatOnSave": true, + "editor.rulers": [120], + "workbench.tree.indent": 16, + "editor.tabSize": 2, + "typescript.tsdk": "node_modules/typescript/lib", + "editor.defaultFormatter": "biomejs.biome", + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome" + } +} diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..933e3d9 --- /dev/null +++ b/biome.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.7.1/schema.json", + "organizeImports": { + "enabled": true + }, + "formatter": { + "lineWidth": 120, + "indentStyle": "tab" + }, + "javascript": { + "formatter": { + "quoteStyle": "single" + } + }, + "linter": { + "ignore": ["dist"], + "enabled": true, + "rules": { + "recommended": true, + "suspicious": { + "noExplicitAny": "off" + } + } + } +} diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..4f68a586efc70cb59fa0fa64b580d412dab2027b GIT binary patch literal 160346 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 4", + "react": ">= 18" + } +} diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..771d9c4 --- /dev/null +++ b/readme.md @@ -0,0 +1,50 @@ +# Zustand Context + +Zustand context is a **super tiny (281 bytes gzipped)** and easy way to create a context-aware zustand store. With this you may determine an initial value for your store and use it in your components with isolated instances. + +## Creating a Context-aware Zustand Store +```ts +type Cat = string + +type CatStore = { + cats: Cat[]; + addCat: (cat: Cat) => void; + removeCat: (cat: Cat) => void; +} + +export const [CatsProvider, useCatsStore] = createZustandContext( + (initialState: { cats: Cat[] }) => + create(set => ({ + cats: initialState.cats, + addCat: cat => set(state => ({ cats: [...state.cats, cat] })), + removeCat: cat => set(state => ({ cats: state.cats.filter(c => c !== cat) })), + })), +); +``` + +## Consuming a Context-aware Zustand Store + +```tsx +const App = () => { + return + + +} + +const CatsList = () => { + /** Exact same api as zustand */ + const cats = useCatsStore(state => state.cats); + + return
    + {cats.map(cat =>
  • {cat}
  • )} +
+} +``` + +##ย Contributing + +This project is open to contributions. Feel free to open an issue or a pull request. + +## License + +MIT \ No newline at end of file diff --git a/src/context.tsx b/src/context.tsx new file mode 100644 index 0000000..0479744 --- /dev/null +++ b/src/context.tsx @@ -0,0 +1,31 @@ +import React, { createContext } from "react"; +import type { StoreApi, UseBoundStore } from "zustand"; + +export const createZustandContext = < + TInitial, + TStore extends UseBoundStore> +>( + getStore: (initial: TInitial) => TStore +) => { + const Context = createContext(null); + + const Provider = (props: { + children?: React.ReactNode; + initialValue: TInitial; + }) => { + const [store] = React.useState(() => getStore(props.initialValue)); + return {props.children}; + }; + + return [ + Provider, + ((selector: Parameters[0]) => { + const store = React.useContext(Context); + if (store === null) { + console.error("Missing provider for context:", Context); + throw new Error("Missing provider for context"); + } + return store(selector); + }) as TStore, + ] as const; +}; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..66c481c --- /dev/null +++ b/src/index.ts @@ -0,0 +1 @@ +export { createZustandContext } from './context'; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..6d32beb --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,103 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + "jsx": "preserve" /* Specify what JSX code is generated. */, + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + "noUncheckedIndexedAccess": true /* Add 'undefined' to a type when accessed using an index. */, + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/tsup.config.ts b/tsup.config.ts new file mode 100644 index 0000000..4226239 --- /dev/null +++ b/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + sourcemap: true, + clean: true, + dts: false, + format: ["esm", "cjs"], + external: [], + minify: true, +});