plug-code 1.0.0 → 1.0.2
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.
- package/README.md +16 -0
- package/index.d.ts +10 -0
- package/package.json +6 -3
- package/src/core/plcAPI.tsx +10 -3
- package/tsconfig.json +15 -0
- package/types/contexts/pipeline.d.ts +2 -0
- package/types/core/plcAPI.d.ts +30 -0
- package/types/core/plcPipeline.d.ts +16 -0
- package/types/core/plcStore.d.ts +17 -0
- package/types/plug-code.d.ts +13 -0
- package/types/types/api.d.ts +5 -0
- package/types/types/features.d.ts +6 -0
- package/types/types/general.d.ts +1 -0
- package/types/types/pipeline.d.ts +6 -0
- package/types/types/store.d.ts +4 -0
package/README.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Plug&Code
|
|
2
|
+
|
|
3
|
+
Plug&Code is a multipurpose framework for React, designed for **scalability, reusability, and organized components**.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
You are welcome to use Plug&Code in your projects, **personal or commercial**, as long as you **do not modify or redistribute the framework** without explicit permission from the author.
|
|
8
|
+
|
|
9
|
+
### Installation
|
|
10
|
+
|
|
11
|
+
You can install the framework via npm or yarn:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install plug-code
|
|
15
|
+
# or
|
|
16
|
+
yarn add plug-code
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./types/plug-code";
|
|
2
|
+
export * from "./types/core/plcAPI";
|
|
3
|
+
export * from "./types/core/plcStore";
|
|
4
|
+
export * from "./types/contexts/pipeline";
|
|
5
|
+
|
|
6
|
+
export * from "./types/types/api";
|
|
7
|
+
export * from "./types/types/features";
|
|
8
|
+
export * from "./types/types/general";
|
|
9
|
+
export * from "./types/types/pipeline";
|
|
10
|
+
export * from "./types/types/store";
|
package/package.json
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "plug-code",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
|
+
"types": "types/src/plug-code.d.ts",
|
|
6
7
|
"scripts": {
|
|
7
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
9
|
+
"build:types": "tsc -p tsconfig.json"
|
|
8
10
|
},
|
|
9
11
|
"repository": {
|
|
10
12
|
"type": "git",
|
|
@@ -23,6 +25,7 @@
|
|
|
23
25
|
"react": "^19.2.3"
|
|
24
26
|
},
|
|
25
27
|
"devDependencies": {
|
|
26
|
-
"@types/react": "^19.2.7"
|
|
28
|
+
"@types/react": "^19.2.7",
|
|
29
|
+
"typescript": "^5.4.2"
|
|
27
30
|
}
|
|
28
31
|
}
|
package/src/core/plcAPI.tsx
CHANGED
|
@@ -44,7 +44,14 @@ export class PlcAPI<S extends ObjectType> {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
scope<T = any>(key: string & "root") {
|
|
47
|
+
scope<T = any>(key: string & "root"): {
|
|
48
|
+
get: () => T;
|
|
49
|
+
update: (updater: (draft: T) => void) => void;
|
|
50
|
+
connect: (renderer: (data: T) => React.ReactNode) => React.FC;
|
|
51
|
+
render: (slotName: string) => React.ReactNode | null;
|
|
52
|
+
receive: (context?: any) => any;
|
|
53
|
+
root: PlcAPI<S>;
|
|
54
|
+
} {
|
|
48
55
|
return {
|
|
49
56
|
get: (): T => this.getData(key),
|
|
50
57
|
|
|
@@ -58,8 +65,8 @@ export class PlcAPI<S extends ObjectType> {
|
|
|
58
65
|
|
|
59
66
|
render: (slotName: string) => {
|
|
60
67
|
return this.connect(key, (localData) => {
|
|
61
|
-
return this.pipeline.render(slotName, localData);
|
|
62
|
-
});
|
|
68
|
+
return this.pipeline.render(slotName, localData) as React.ReactNode;
|
|
69
|
+
}) as any;
|
|
63
70
|
},
|
|
64
71
|
|
|
65
72
|
receive: (context: any = {}) => {
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2019",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"jsx": "react-jsx",
|
|
6
|
+
"declaration": true,
|
|
7
|
+
"emitDeclarationOnly": true,
|
|
8
|
+
"outDir": "types",
|
|
9
|
+
"strict": false,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"moduleResolution": "Node"
|
|
13
|
+
},
|
|
14
|
+
"include": ["src/**/*.ts", "src/**/*.tsx"]
|
|
15
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ObjectType } from "../types/general";
|
|
2
|
+
import type { PlcStore } from "./plcStore";
|
|
3
|
+
export declare class PlcAPI<S extends ObjectType> {
|
|
4
|
+
private store;
|
|
5
|
+
private pipeline;
|
|
6
|
+
private substores;
|
|
7
|
+
private transformers;
|
|
8
|
+
constructor(store: PlcStore<S>);
|
|
9
|
+
register(slot: string, node: () => React.ReactNode): void;
|
|
10
|
+
register<K extends string>(slot: string, node: (data: any) => React.ReactNode, dependencyKey: K): void;
|
|
11
|
+
scope<T = any>(key: string & "root"): {
|
|
12
|
+
get: () => T;
|
|
13
|
+
update: (updater: (draft: T) => void) => void;
|
|
14
|
+
connect: (renderer: (data: T) => React.ReactNode) => React.FC;
|
|
15
|
+
render: (slotName: string) => React.ReactNode | null;
|
|
16
|
+
receive: (context?: any) => any;
|
|
17
|
+
root: PlcAPI<S>;
|
|
18
|
+
};
|
|
19
|
+
connect<T = any>(key: string, renderer: (data: T) => React.ReactNode): React.FC;
|
|
20
|
+
wrap(slot: string, fn: (next: () => React.ReactNode) => () => React.ReactNode): void;
|
|
21
|
+
after(slot: string, node: () => React.ReactNode): void;
|
|
22
|
+
render(slot: string): import("react").ReactNode[] | import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
invalidate(slot?: string): void;
|
|
24
|
+
send(id: string, fn: (data: any, context: any) => any, priority: number): void;
|
|
25
|
+
receive(initialData: any, context?: any): any;
|
|
26
|
+
getData(key: string): any;
|
|
27
|
+
subscribe(listener: () => void): () => void;
|
|
28
|
+
createData<K extends string, T>(key: K, initialState: T): void;
|
|
29
|
+
update<K extends keyof S>(key: string & "root", updater: (draft: any) => void, slot?: string): void;
|
|
30
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ObjectType } from "../types/general";
|
|
3
|
+
import type { Slot } from "../types/pipeline";
|
|
4
|
+
import type { PlcStore } from "./plcStore";
|
|
5
|
+
export declare class PlcPipeline<S extends ObjectType> {
|
|
6
|
+
private slots;
|
|
7
|
+
private store;
|
|
8
|
+
private cache;
|
|
9
|
+
private scheduleQueue;
|
|
10
|
+
constructor(store: PlcStore<S>);
|
|
11
|
+
register(slot: string, fn: Slot, priority?: number): void;
|
|
12
|
+
wrap(slot: string, wrapper: (next: Slot) => Slot, priority?: number): void;
|
|
13
|
+
render(slot: string, contextData?: any): React.ReactNode[] | import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
invalidate(slot?: string): void;
|
|
15
|
+
private regenerateCache;
|
|
16
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Draft } from "immer";
|
|
2
|
+
import type { ObjectType } from "../types/general";
|
|
3
|
+
export declare class PlcStore<S extends ObjectType> {
|
|
4
|
+
private state;
|
|
5
|
+
private listeners;
|
|
6
|
+
private batchQueue;
|
|
7
|
+
private debug;
|
|
8
|
+
private isBatching;
|
|
9
|
+
constructor(initial: S, debug: boolean);
|
|
10
|
+
get<K extends keyof S>(key: K): S[K];
|
|
11
|
+
getState(): S;
|
|
12
|
+
set<K extends keyof S>(key: K, value: S[K]): void;
|
|
13
|
+
batch(updater: (draft: Draft<S>) => void): void;
|
|
14
|
+
subscribe(listener: () => void): () => void;
|
|
15
|
+
subscribe<K extends keyof S>(key: K, listener: () => void): () => void;
|
|
16
|
+
private emit;
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ObjectType } from "./types/general";
|
|
2
|
+
import type { FeatureType } from "./types/features";
|
|
3
|
+
import { PlcAPI } from "./core/plcAPI";
|
|
4
|
+
export declare function createPlugAndCode<S extends ObjectType>(features: FeatureType<S>[]): {
|
|
5
|
+
useSystemPlc: <T extends object>(initialProps: T) => {
|
|
6
|
+
api: PlcAPI<{}>;
|
|
7
|
+
useSelector: <Result>(selector: (state: any) => Result) => Result;
|
|
8
|
+
};
|
|
9
|
+
SystemPlcRoot: ({ api, children }: {
|
|
10
|
+
api: PlcAPI<any>;
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ObjectType = Record<string, any>;
|