@cleanweb/oore 1.0.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.
Files changed (60) hide show
  1. package/README.md +374 -0
  2. package/README.old.md +342 -0
  3. package/build/base/index.d.ts +3 -0
  4. package/build/base/index.js +19 -0
  5. package/build/base/merged-state.d.ts +20 -0
  6. package/build/base/merged-state.js +84 -0
  7. package/build/base/methods.d.ts +59 -0
  8. package/build/base/methods.js +100 -0
  9. package/build/base/state/class-types.d.ts +20 -0
  10. package/build/base/state/class-types.js +2 -0
  11. package/build/base/state/class.d.ts +16 -0
  12. package/build/base/state/class.js +100 -0
  13. package/build/base/state/hook-types.d.ts +32 -0
  14. package/build/base/state/hook-types.js +2 -0
  15. package/build/base/state/hooks.d.ts +12 -0
  16. package/build/base/state/hooks.js +45 -0
  17. package/build/base/state/index.d.ts +8 -0
  18. package/build/base/state/index.js +35 -0
  19. package/build/classy/class/index.d.ts +115 -0
  20. package/build/classy/class/index.js +161 -0
  21. package/build/classy/class/types/extractor.d.ts +5 -0
  22. package/build/classy/class/types/extractor.js +2 -0
  23. package/build/classy/class/utils/function-name.d.ts +2 -0
  24. package/build/classy/class/utils/function-name.js +17 -0
  25. package/build/classy/index.d.ts +3 -0
  26. package/build/classy/index.js +19 -0
  27. package/build/classy/instance/index.d.ts +144 -0
  28. package/build/classy/instance/index.js +202 -0
  29. package/build/classy/instance/mount-callbacks.d.ts +5 -0
  30. package/build/classy/instance/mount-callbacks.js +30 -0
  31. package/build/classy/instance/types/hook.d.ts +13 -0
  32. package/build/classy/instance/types/hook.js +2 -0
  33. package/build/classy/logic/index.d.ts +116 -0
  34. package/build/classy/logic/index.js +128 -0
  35. package/build/classy/logic/types/hook.d.ts +16 -0
  36. package/build/classy/logic/types/hook.js +2 -0
  37. package/build/docs-src/api/base-classes.d.ts +3 -0
  38. package/build/docs-src/api/base-classes.js +9 -0
  39. package/build/docs-src/api/index.d.ts +13 -0
  40. package/build/docs-src/api/index.js +44 -0
  41. package/build/docs-src/api/references.d.ts +5 -0
  42. package/build/docs-src/api/references.js +31 -0
  43. package/build/globals.d.ts +84 -0
  44. package/build/globals.js +4 -0
  45. package/build/helpers/index.d.ts +13 -0
  46. package/build/helpers/index.js +31 -0
  47. package/build/helpers/mount-state.d.ts +5 -0
  48. package/build/helpers/mount-state.js +25 -0
  49. package/build/helpers/rerender.d.ts +5 -0
  50. package/build/helpers/rerender.js +29 -0
  51. package/build/helpers/type-guards.d.ts +1 -0
  52. package/build/helpers/type-guards.js +8 -0
  53. package/build/helpers/use-component/index.d.ts +6 -0
  54. package/build/helpers/use-component/index.js +17 -0
  55. package/build/helpers/use-component/types.d.ts +22 -0
  56. package/build/helpers/use-component/types.js +2 -0
  57. package/build/index.d.ts +4 -0
  58. package/build/index.js +19 -0
  59. package/build/tsconfig.json +49 -0
  60. package/package.json +87 -0
@@ -0,0 +1,13 @@
1
+ /**
2
+ * API Reference
3
+ * @module API
4
+ */
5
+ export { useCleanState } from '../../base/state';
6
+ export { useMethods } from '../../base/methods';
7
+ export { useLogic } from '../../classy/logic';
8
+ export { useInstance } from '../../classy/instance';
9
+ export { ClassComponent } from '../../classy/class';
10
+ /** @namespace */
11
+ export * as BaseClasses from './base-classes';
12
+ export * as Helpers from '../../helpers';
13
+ export * as References from './references';
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * API Reference
4
+ * @module API
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.References = exports.Helpers = exports.BaseClasses = exports.ClassComponent = exports.useInstance = exports.useLogic = exports.useMethods = exports.useCleanState = void 0;
31
+ var state_1 = require("../../base/state");
32
+ Object.defineProperty(exports, "useCleanState", { enumerable: true, get: function () { return state_1.useCleanState; } });
33
+ var methods_1 = require("../../base/methods");
34
+ Object.defineProperty(exports, "useMethods", { enumerable: true, get: function () { return methods_1.useMethods; } });
35
+ var logic_1 = require("../../classy/logic");
36
+ Object.defineProperty(exports, "useLogic", { enumerable: true, get: function () { return logic_1.useLogic; } });
37
+ var instance_1 = require("../../classy/instance");
38
+ Object.defineProperty(exports, "useInstance", { enumerable: true, get: function () { return instance_1.useInstance; } });
39
+ var class_1 = require("../../classy/class");
40
+ Object.defineProperty(exports, "ClassComponent", { enumerable: true, get: function () { return class_1.ClassComponent; } });
41
+ /** @namespace */
42
+ exports.BaseClasses = __importStar(require("./base-classes"));
43
+ exports.Helpers = __importStar(require("../../helpers"));
44
+ exports.References = __importStar(require("./references"));
@@ -0,0 +1,5 @@
1
+ export * as $CleanState from '../../base/state';
2
+ export * as $ComponentMethods from '../../base/methods';
3
+ export * as ComponentLogic from '../../classy/logic';
4
+ export * as ComponentInstance from '../../classy/instance';
5
+ export * as ClassComponent from '../../classy/class';
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ClassComponent = exports.ComponentInstance = exports.ComponentLogic = exports.$ComponentMethods = exports.$CleanState = void 0;
27
+ exports.$CleanState = __importStar(require("../../base/state"));
28
+ exports.$ComponentMethods = __importStar(require("../../base/methods"));
29
+ exports.ComponentLogic = __importStar(require("../../classy/logic"));
30
+ exports.ComponentInstance = __importStar(require("../../classy/instance"));
31
+ exports.ClassComponent = __importStar(require("../../classy/class"));
@@ -0,0 +1,84 @@
1
+ declare const UniqueSecretSymbolKey: unique symbol;
2
+ /** /testing: {
3
+ const mySymbol = Symbol('asdfgh') as symbol;
4
+
5
+ const tt = {
6
+ // [mySymbol]: '' as never,
7
+ // [UniqueSecretSymbolKey]: '',
8
+ // '': '',
9
+ }
10
+
11
+ let TT: EmptyObject = {};
12
+ TT = tt;
13
+ }/**/
14
+ declare global {
15
+ type Optional<BaseType, AllowNull extends boolean = true> = (AllowNull extends true ? BaseType | undefined | null : BaseType | undefined);
16
+ type Awaitable<Type> = Type | Promise<Type>;
17
+ type Constructor<TInstance extends any = any, TParams extends any[] = never[]> = new (...args: TParams) => TInstance;
18
+ /**
19
+ * @example
20
+ * ```js
21
+ * const getNumber: AsyncFunction<number> = async () => {
22
+ * return 5;
23
+ * }
24
+ * ```
25
+ */
26
+ type AsyncFunction<TReturnValue extends any = void, Params extends any[] = never[]> = (...params: Params) => Promise<TReturnValue>;
27
+ /**
28
+ * A function that takes no arguments and returns nothing.
29
+ * Pass a type argument to set whether `async` and/or `sync` functions are allowed.
30
+ */
31
+ interface IVoidFunction<AsyncType extends 'async' | 'sync' | 'both' = 'both'> {
32
+ (): AsyncType extends 'async' ? Promise<void> : AsyncType extends 'sync' ? void : void | Promise<void>;
33
+ }
34
+ type AnyFunction = (...args: any) => any;
35
+ type FunctionType = AnyFunction;
36
+ type TFunction = AnyFunction;
37
+ /** @deprecated Use {@link NonNullish} */
38
+ type NotNullish = {};
39
+ type NonNullish = {};
40
+ type NonPrimitive = object;
41
+ /**
42
+ * Describes an object that has no keys,
43
+ * except for a secret unique symbol key,
44
+ * whose value type is the union `never | undefuned`.
45
+ *
46
+ * Having a single key allows the object to throw type errors
47
+ * of the form:
48
+ * ```
49
+ * Type `A` has no properties in common with `EmptyObject`.
50
+ * ```
51
+ * This may provide a slightly stricter type checking than simply
52
+ * using the non-nullish (`{}`) or non-primitive (`object`)
53
+ * built-in types.
54
+ *
55
+ * Note: `EmptyObject` is not assignable to `NeverObject`
56
+ * because it has a key whose value type includes `undefined`,
57
+ * but `NeverObject` keys can only have a type of `never`.
58
+ */
59
+ interface EmptyObject {
60
+ [UniqueSecretSymbolKey]?: never;
61
+ }
62
+ /**
63
+ * Describes an object that can have any key, but all keys have
64
+ * a type of `never`. This effectively prevents any value
65
+ * from ever being stored on the object. The object is therefore
66
+ * guaranteed to always be empty.
67
+ */
68
+ interface NeverObject {
69
+ [key: keyof any]: never;
70
+ }
71
+ type valueof<TObject> = TObject[keyof TObject];
72
+ interface Window {
73
+ }
74
+ namespace JSX {
75
+ interface IntrinsicElements {
76
+ }
77
+ }
78
+ namespace NodeJS {
79
+ interface ProcessEnv {
80
+ NODE_ENV: 'development' | 'production' | 'test';
81
+ }
82
+ }
83
+ }
84
+ export {};
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /////////////
4
+ var UniqueSecretSymbolKey = Symbol('asdfghjkliuytrewqaxcvb,nb');
@@ -0,0 +1,13 @@
1
+ /**
2
+ * <!-- @ mergeModuleWith API -->
3
+ * @module Helpers
4
+ */
5
+ export * from './mount-state';
6
+ export * from './rerender';
7
+ export * from './use-component';
8
+ export * from './type-guards';
9
+ /**
10
+ * An empty function.
11
+ * It returns (void) without performing any operations.
12
+ */
13
+ export declare const noOp: () => void;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * <!-- @ mergeModuleWith API -->
4
+ * @module Helpers
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.noOp = void 0;
22
+ __exportStar(require("./mount-state"), exports);
23
+ __exportStar(require("./rerender"), exports);
24
+ __exportStar(require("./use-component"), exports);
25
+ __exportStar(require("./type-guards"), exports);
26
+ /**
27
+ * An empty function.
28
+ * It returns (void) without performing any operations.
29
+ */
30
+ var noOp = function () { };
31
+ exports.noOp = noOp;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Returns a value that is false before the component has been mounted,
3
+ * then true during all subsequent rerenders.
4
+ */
5
+ export declare const useMountState: () => () => boolean;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMountState = void 0;
4
+ var react_1 = require("react");
5
+ /**
6
+ * Returns a value that is false before the component has been mounted,
7
+ * then true during all subsequent rerenders.
8
+ */
9
+ var useMountState = function () {
10
+ /**
11
+ * This must not be a state value. It should not be the cause of a rerender.
12
+ * It merely provides information about the render count,
13
+ * without influencing that count itself.
14
+ * So `mounted` should never be created with `useState`.
15
+ */
16
+ var mounted = (0, react_1.useRef)(false);
17
+ (0, react_1.useEffect)(function () {
18
+ mounted.current = true;
19
+ return function () {
20
+ mounted.current = false;
21
+ };
22
+ }, []);
23
+ return function () { return mounted.current; };
24
+ };
25
+ exports.useMountState = useMountState;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Returns a function that can be called to manually trigger
3
+ * a rerender of your component.
4
+ */
5
+ export declare const useRerender: () => () => void;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useRerender = void 0;
4
+ var mount_state_1 = require("../helpers/mount-state");
5
+ var react_1 = require("react");
6
+ /**
7
+ * Returns a function that can be called to manually trigger
8
+ * a rerender of your component.
9
+ */
10
+ var useRerender = function () {
11
+ var isMounted = (0, mount_state_1.useMountState)();
12
+ // Skip the value, we don't need it. Grab just the setter function.
13
+ var _a = (0, react_1.useState)(Date.now()), _forceRerender = _a[1];
14
+ var rerender = function () {
15
+ if (isMounted()) {
16
+ _forceRerender(Date.now());
17
+ return;
18
+ }
19
+ setTimeout(function () {
20
+ if (isMounted())
21
+ _forceRerender(Date.now());
22
+ else {
23
+ console.log('Cannot rerender an unmounted component.');
24
+ }
25
+ }, 1000);
26
+ };
27
+ return rerender;
28
+ };
29
+ exports.useRerender = useRerender;
@@ -0,0 +1 @@
1
+ export declare const canIndex: <T extends object>(key: keyof any, targetObject: T) => key is keyof T;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.canIndex = void 0;
4
+ var canIndex = function (key, targetObject) {
5
+ var test = typeof key === 'number' ? "".concat(key) : key;
6
+ return Reflect.ownKeys(targetObject).includes(test);
7
+ };
8
+ exports.canIndex = canIndex;
@@ -0,0 +1,6 @@
1
+ import type { ClassComponentHookWrapper } from './types';
2
+ /**
3
+ * A component you can use to consume React hooks
4
+ * in a {@link Component | React.Component} class.
5
+ */
6
+ export declare const Use: ClassComponentHookWrapper;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Use = void 0;
4
+ var react_1 = require("react");
5
+ /**
6
+ * A component you can use to consume React hooks
7
+ * in a {@link Component | React.Component} class.
8
+ */
9
+ var Use = function (params) {
10
+ var useGenericHook = params.hook, argumentsList = params.argumentsList, onUpdate = params.onUpdate;
11
+ var output = useGenericHook.apply(void 0, argumentsList);
12
+ (0, react_1.useEffect)(function () {
13
+ onUpdate(output);
14
+ }, [output]);
15
+ return null;
16
+ };
17
+ exports.Use = Use;
@@ -0,0 +1,22 @@
1
+ interface HookWrapperProps<THookFunction extends AnyFunction> {
2
+ /**
3
+ * The React hook you which to consume.
4
+ * Render a separate instance of the `<Use />` component for each hook.
5
+ * You can also create a custom hook that combines multiple hooks,
6
+ * then use that wrapper hook with a single `<Use />` instance.
7
+ */
8
+ hook: THookFunction;
9
+ /**
10
+ * An array containing the list of arguments
11
+ * to be passed to your hook, in the right order.
12
+ */
13
+ argumentsList: Parameters<THookFunction>;
14
+ /**
15
+ * A callback that will be called with whatever value your hook returns.
16
+ * Use this to update your component's state with the value.
17
+ * This will allow your component to rerender whenever the hook returns a new value.
18
+ */
19
+ onUpdate: (output: ReturnType<THookFunction>) => void;
20
+ }
21
+ export type ClassComponentHookWrapper = <Hook extends AnyFunction>(props: HookWrapperProps<Hook>) => null;
22
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export * from './classy';
2
+ export * from './base';
3
+ export * from './helpers';
4
+ export type { EmptyObject, NeverObject };
package/build/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./classy"), exports);
18
+ __exportStar(require("./base"), exports);
19
+ __exportStar(require("./helpers"), exports);
@@ -0,0 +1,49 @@
1
+ {
2
+ "compilerOptions": {
3
+ "baseUrl": ".",
4
+ "rootDir": ".",
5
+ "outDir": "build",
6
+ "paths": {
7
+ "@/*": [
8
+ "./*"
9
+ ]
10
+ },
11
+ "target": "es5",
12
+ "lib": [
13
+ "dom",
14
+ "dom.iterable",
15
+ "esnext"
16
+ ],
17
+ "allowJs": true,
18
+ "checkJs": true,
19
+ "declaration": true,
20
+ "noEmit": false,
21
+ "skipLibCheck": true,
22
+ "strict": false,
23
+ "forceConsistentCasingInFileNames": true,
24
+ "incremental": false,
25
+ "esModuleInterop": true,
26
+ "module": "NodeNext",
27
+ "moduleResolution": "NodeNext",
28
+ "resolveJsonModule": true,
29
+ "isolatedModules": true,
30
+ "jsx": "react-jsx",
31
+ "strictNullChecks": true,
32
+ "strictPropertyInitialization": true,
33
+ "noImplicitAny": true,
34
+ "noUncheckedIndexedAccess": true,
35
+ "strictBindCallApply": true,
36
+ "exactOptionalPropertyTypes": true,
37
+ },
38
+ "include": [
39
+ // "**/[!globals].ts",
40
+ "**/*.ts",
41
+ "**/*.tsx"
42
+ ],
43
+ "exclude": [
44
+ "**/globals.ts",
45
+ "node_modules/**/**.*",
46
+ "build/**/**.*",
47
+ "mirror-pkg/**/**.*"
48
+ ]
49
+ }
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "@cleanweb/oore",
3
+ "version": "1.0.0",
4
+ "description": "A library of helpers for writing cleaner React function components.",
5
+ "engines": {
6
+ "node": ">=18"
7
+ },
8
+ "files": [
9
+ "build",
10
+ ".npmrc"
11
+ ],
12
+ "main": "build/index.js",
13
+ "//exports/.": {
14
+ "require": "./src/index.cjs",
15
+ "import": "./src/index.mjs"
16
+ },
17
+ "//type": "module",
18
+ "exports": {
19
+ ".": "./build/classy/index.js",
20
+ "./base": "./build/base/index.js",
21
+ "./helpers": "./build/helpers/index.js",
22
+ "./all": "./build/index.js"
23
+ },
24
+ "scripts": {
25
+ "prebuild": "rimraf ./build && npm run build:docs",
26
+ "build": "tsc && tsc-alias",
27
+ "serve-docs": "serve docs",
28
+ "postbuild": "copyfiles tsconfig.json build",
29
+ "build:docs": "typedoc",
30
+ "_": "",
31
+ "prepublishOnly": "npm run build",
32
+ "publish:patch": "npm version patch && npm publish",
33
+ "publish:minor": "npm version minor && npm publish",
34
+ "publish:major": "npm version major && npm publish",
35
+ "__": "/// Increment beta number for the current patch version. ///",
36
+ "publish:beta:current": "npm version prerelease --preid beta && npm publish --tag beta",
37
+ "___": "/// Create a beta.0 for a new patch/minor/major version ///",
38
+ "publish:beta:new-patch": "npm version prepatch --preid beta && npm publish --tag beta",
39
+ "publish:beta:new-minor": "npm version preminor --preid beta && npm publish --tag beta",
40
+ "publish:beta:new-major": "npm version premajor --preid beta && npm publish --tag beta",
41
+ "____": "",
42
+ "//postpublish": "cd ./mirror-pkg && npm publish && cd ..",
43
+ "______": "",
44
+ "test": "echo \"No tests ATM\""
45
+ },
46
+ "keywords": [
47
+ "react",
48
+ "function components",
49
+ "class components",
50
+ "hooks",
51
+ "react hooks",
52
+ "react state",
53
+ "state",
54
+ "clean state",
55
+ "group state",
56
+ "grouped state"
57
+ ],
58
+ "author": {
59
+ "name": "Feranmi Akinlade",
60
+ "url": "https://feranmi.dev"
61
+ },
62
+ "license": "MIT",
63
+ "devDependencies": {
64
+ "@babel/eslint-parser": "^7.25.9",
65
+ "@babel/preset-typescript": "^7.26.0",
66
+ "@types/node": "20.14.10",
67
+ "@types/react": "^16",
68
+ "@types/webpack-env": "^1.18.8",
69
+ "babel-preset-react-app": "^10.0.1",
70
+ "copyfiles": "^2.4.1",
71
+ "eslint": "^9.15.0",
72
+ "eslint-plugin-jsdoc": "^50.5.0",
73
+ "eslint-plugin-react": "^7.37.2",
74
+ "globals": "^15.12.0",
75
+ "rimraf": "^6.0.1",
76
+ "serve": "^14.2.4",
77
+ "tsc-alias": "1.8.10",
78
+ "typedoc": "latest",
79
+ "typedoc-plugin-coverage": "^3.4.1",
80
+ "typedoc-plugin-markdown": "^4.4.1",
81
+ "typedoc-plugin-mdn-links": "^4.0.13",
82
+ "typescript": "^5.6.2"
83
+ },
84
+ "peerDependencies": {
85
+ "react": ">=16"
86
+ }
87
+ }