@yaasl/core 0.8.0-alpha.4 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { SetStateAction } from "@yaasl/utils";
2
2
  import { Stateful } from "./Stateful";
3
- import { MiddlewareAtomCallback } from "../middleware/middleware";
3
+ import { MiddlewareActions, MiddlewareAtomCallback } from "../middleware/middleware";
4
4
  export interface AtomConfig<Value> {
5
5
  /** Value that will be returned if the atom is not defined in the store */
6
6
  defaultValue: Value;
@@ -8,11 +8,13 @@ export interface AtomConfig<Value> {
8
8
  name?: string;
9
9
  /** Middleware that will be applied on the atom */
10
10
  middleware?: MiddlewareAtomCallback<any>[];
11
+ /** Inline middleware to apply on the atom */
12
+ actions?: MiddlewareActions<undefined, Value>;
11
13
  }
12
14
  export declare class Atom<Value = unknown> extends Stateful<Value> {
13
15
  readonly defaultValue: Value;
14
16
  readonly name: string;
15
- constructor({ defaultValue, name, middleware, }: AtomConfig<Value>);
17
+ constructor({ defaultValue, name, middleware: externalMiddleware, actions, }: AtomConfig<Value>);
16
18
  /** Set the value of the atom.
17
19
  *
18
20
  * @param next New value or function to create the
@@ -14,4 +14,4 @@ export interface ExpirationOptions {
14
14
  *
15
15
  * @returns The middleware to be used on atoms.
16
16
  **/
17
- export declare const expiration: (__0_0: ExpirationOptions) => import("./middleware").MiddlewareAtomCallback<ExpirationOptions>;
17
+ export declare const expiration: (__0_0: ExpirationOptions) => import("./middleware").MiddlewareAtomCallback<ExpirationOptions, any>;
@@ -12,4 +12,4 @@ export interface IndexedDbOptions {
12
12
  *
13
13
  * @returns The middleware to be used on atoms.
14
14
  **/
15
- export declare const indexedDb: (...[optionsArg]: [] | [undefined] | [IndexedDbOptions]) => import("./middleware").MiddlewareAtomCallback<IndexedDbOptions | undefined>;
15
+ export declare const indexedDb: (...[optionsArg]: [] | [undefined] | [IndexedDbOptions]) => import("./middleware").MiddlewareAtomCallback<IndexedDbOptions | undefined, any>;
@@ -25,4 +25,4 @@ export interface LocalStorageOptions {
25
25
  *
26
26
  * @returns The middleware to be used on atoms.
27
27
  **/
28
- export declare const localStorage: (...[optionsArg]: [] | [undefined] | [LocalStorageOptions]) => import("./middleware").MiddlewareAtomCallback<LocalStorageOptions | undefined>;
28
+ export declare const localStorage: (...[optionsArg]: [] | [undefined] | [LocalStorageOptions]) => import("./middleware").MiddlewareAtomCallback<LocalStorageOptions | undefined, any>;
@@ -1,24 +1,24 @@
1
1
  import { Atom } from "../base";
2
2
  export type ActionType = "init" | "didInit" | "set";
3
- interface MiddlewarePayload<Options> {
4
- value: unknown;
5
- atom: Atom;
3
+ interface MiddlewarePayload<Options, AtomValue> {
4
+ value: AtomValue;
5
+ atom: Atom<AtomValue>;
6
6
  options: Options;
7
7
  }
8
- export interface MiddlewareActions<Options> {
9
- init?: (payload: MiddlewarePayload<Options>) => Promise<any> | void;
10
- didInit?: (payload: MiddlewarePayload<Options>) => Promise<any> | void;
11
- set?: (payload: MiddlewarePayload<Options>) => void;
8
+ export interface MiddlewareActions<Options, AtomValue> {
9
+ init?: (payload: MiddlewarePayload<Options, AtomValue>) => Promise<any> | void;
10
+ didInit?: (payload: MiddlewarePayload<Options, AtomValue>) => Promise<any> | void;
11
+ set?: (payload: MiddlewarePayload<Options, AtomValue>) => void;
12
12
  }
13
- interface MiddlewareSetupProps<Options> {
14
- atom: Atom;
13
+ interface MiddlewareSetupProps<Options, AtomValue> {
14
+ atom: Atom<AtomValue>;
15
15
  options: Options;
16
16
  }
17
- export type MiddlewareAtomCallback<Options> = (atom: Atom<any>) => Middleware<Options>;
18
- export type MiddlewareSetup<Options> = MiddlewareActions<Options> | ((props: MiddlewareSetupProps<Options>) => MiddlewareActions<Options>);
19
- export interface Middleware<Options = unknown> {
17
+ export type MiddlewareAtomCallback<Options = unknown, AtomValue = unknown> = (atom: Atom<AtomValue>) => Middleware<Options, AtomValue>;
18
+ type MiddlewareSetup<Options, AtomValue> = MiddlewareActions<Options, AtomValue> | ((props: MiddlewareSetupProps<Options, AtomValue>) => MiddlewareActions<Options, AtomValue>);
19
+ export interface Middleware<Options = unknown, AtomValue = unknown> {
20
20
  options: Options;
21
- actions: MiddlewareActions<Options>;
21
+ actions: MiddlewareActions<Options, AtomValue>;
22
22
  }
23
23
  /** Create middlewares to be used in combination with atoms.
24
24
  *
@@ -27,5 +27,5 @@ export interface Middleware<Options = unknown> {
27
27
  *
28
28
  * @returns A middleware function to be used in atoms.
29
29
  **/
30
- export declare const middleware: <Options = undefined>(setup: MiddlewareSetup<Options>) => (...[optionsArg]: Options extends undefined ? [Options] | [] : [Options]) => MiddlewareAtomCallback<Options>;
30
+ export declare const middleware: <Options = undefined, AtomValue = any>(setup: MiddlewareSetup<Options, AtomValue>) => (...[optionsArg]: Options extends undefined ? [Options] | [] : [Options]) => MiddlewareAtomCallback<Options, AtomValue>;
31
31
  export {};
@@ -15,5 +15,5 @@ export interface MigrationOptions {
15
15
  **/
16
16
  steps: MigrationStep[];
17
17
  }
18
- export declare const migration: (__0_0: MigrationOptions) => import("./middleware").MiddlewareAtomCallback<MigrationOptions>;
18
+ export declare const migration: (__0_0: MigrationOptions) => import("./middleware").MiddlewareAtomCallback<MigrationOptions, unknown>;
19
19
  export declare const createMigrationStep: <Version extends string, PreviousVersion extends string | null, OldData, NewData>(migration: MigrationStep<Version, PreviousVersion, OldData, NewData>) => MigrationStep<Version, PreviousVersion, OldData, NewData>;
@@ -2,18 +2,26 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.atom = exports.Atom = void 0;
4
4
  const Stateful_1 = require("./Stateful");
5
+ const middleware_1 = require("../middleware/middleware");
5
6
  const MiddlewareDispatcher_1 = require("../middleware/MiddlewareDispatcher");
6
7
  let key = 0;
7
8
  class Atom extends Stateful_1.Stateful {
8
- constructor({ defaultValue, name = `atom-${++key}`, middleware, }) {
9
+ constructor({ defaultValue, name = `atom-${++key}`, middleware: externalMiddleware, actions, }) {
9
10
  super(defaultValue);
10
11
  this.name = name;
11
12
  this.defaultValue = defaultValue;
12
- if (!middleware || middleware.length === 0) {
13
+ const items = [
14
+ ...(actions ? [(0, middleware_1.middleware)(actions)()] : []),
15
+ ...(externalMiddleware !== null && externalMiddleware !== void 0 ? externalMiddleware : []),
16
+ ];
17
+ if (items.length === 0) {
13
18
  this.didInit = true;
14
19
  return;
15
20
  }
16
- const { didInit } = new MiddlewareDispatcher_1.MiddlewareDispatcher({ atom: this, middleware });
21
+ const { didInit } = new MiddlewareDispatcher_1.MiddlewareDispatcher({
22
+ atom: this,
23
+ middleware: items,
24
+ });
17
25
  this.setDidInit(didInit);
18
26
  }
19
27
  /** Set the value of the atom.
@@ -1,16 +1,24 @@
1
1
  import { Stateful } from "./Stateful";
2
+ import { middleware, } from "../middleware/middleware";
2
3
  import { MiddlewareDispatcher } from "../middleware/MiddlewareDispatcher";
3
4
  let key = 0;
4
5
  export class Atom extends Stateful {
5
- constructor({ defaultValue, name = `atom-${++key}`, middleware, }) {
6
+ constructor({ defaultValue, name = `atom-${++key}`, middleware: externalMiddleware, actions, }) {
6
7
  super(defaultValue);
7
8
  this.name = name;
8
9
  this.defaultValue = defaultValue;
9
- if (!middleware || middleware.length === 0) {
10
+ const items = [
11
+ ...(actions ? [middleware(actions)()] : []),
12
+ ...(externalMiddleware ?? []),
13
+ ];
14
+ if (items.length === 0) {
10
15
  this.didInit = true;
11
16
  return;
12
17
  }
13
- const { didInit } = new MiddlewareDispatcher({ atom: this, middleware });
18
+ const { didInit } = new MiddlewareDispatcher({
19
+ atom: this,
20
+ middleware: items,
21
+ });
14
22
  this.setDidInit(didInit);
15
23
  }
16
24
  /** Set the value of the atom.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaasl/core",
3
- "version": "0.8.0-alpha.4",
3
+ "version": "0.8.0",
4
4
  "description": "yet another atomic store library (vanilla-js)",
5
5
  "author": "PrettyCoffee",
6
6
  "license": "MIT",
@@ -38,7 +38,7 @@
38
38
  "validate": "run-s lint test build"
39
39
  },
40
40
  "dependencies": {
41
- "@yaasl/utils": "0.8.0-alpha.4"
41
+ "@yaasl/utils": "0.8.0"
42
42
  },
43
43
  "eslintConfig": {
44
44
  "extends": [