plug-code 2.0.4 → 2.3.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.
- package/LICENSE +11 -5
- package/README.md +203 -70
- package/dist/core/helpers/core.d.ts +1 -0
- package/dist/core/helpers/core.d.ts.map +1 -0
- package/dist/core/helpers/core.js +1 -0
- package/dist/core/helpers/core.js.map +1 -0
- package/dist/core/hooks/plcHooks.d.ts +1 -0
- package/dist/core/hooks/plcHooks.d.ts.map +1 -0
- package/dist/core/hooks/plcHooks.js +1 -0
- package/dist/core/hooks/plcHooks.js.map +1 -0
- package/dist/core/plcAPI.d.ts +3 -1
- package/dist/core/plcAPI.d.ts.map +1 -0
- package/dist/core/plcAPI.js +36 -13
- package/dist/core/plcAPI.js.map +1 -0
- package/dist/core/plcPipeline.d.ts +1 -0
- package/dist/core/plcPipeline.d.ts.map +1 -0
- package/dist/core/plcPipeline.js +1 -0
- package/dist/core/plcPipeline.js.map +1 -0
- package/dist/core/plcScheduler.d.ts +1 -0
- package/dist/core/plcScheduler.d.ts.map +1 -0
- package/dist/core/plcScheduler.js +1 -0
- package/dist/core/plcScheduler.js.map +1 -0
- package/dist/core/plcStore.d.ts +1 -0
- package/dist/core/plcStore.d.ts.map +1 -0
- package/dist/core/plcStore.js +1 -0
- package/dist/core/plcStore.js.map +1 -0
- package/dist/core/ui/plcCore.d.ts +1 -0
- package/dist/core/ui/plcCore.d.ts.map +1 -0
- package/dist/core/ui/plcCore.js +1 -0
- package/dist/core/ui/plcCore.js.map +1 -0
- package/dist/core/ui/plcErrorBoundary.d.ts +1 -0
- package/dist/core/ui/plcErrorBoundary.d.ts.map +1 -0
- package/dist/core/ui/plcErrorBoundary.js +1 -0
- package/dist/core/ui/plcErrorBoundary.js.map +1 -0
- package/dist/core/ui/plcInspector.d.ts +1 -0
- package/dist/core/ui/plcInspector.d.ts.map +1 -0
- package/dist/core/ui/plcInspector.js +1 -0
- package/dist/core/ui/plcInspector.js.map +1 -0
- package/dist/core/ui/plcLayout.d.ts +1 -0
- package/dist/core/ui/plcLayout.d.ts.map +1 -0
- package/dist/core/ui/plcLayout.js +3 -1
- package/dist/core/ui/plcLayout.js.map +1 -0
- package/dist/core/ui/plcSlotRenderer.d.ts +7 -0
- package/dist/core/ui/plcSlotRenderer.d.ts.map +1 -0
- package/dist/core/ui/plcSlotRenderer.js +11 -0
- package/dist/core/ui/plcSlotRenderer.js.map +1 -0
- package/dist/core.d.ts +5 -24
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +10 -1
- package/dist/core.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/simple.d.ts +42 -0
- package/dist/simple.d.ts.map +1 -0
- package/dist/simple.js +88 -0
- package/dist/simple.js.map +1 -0
- package/dist/types/core/api.d.ts +1 -0
- package/dist/types/core/api.d.ts.map +1 -0
- package/dist/types/core/api.js +1 -0
- package/dist/types/core/api.js.map +1 -0
- package/dist/types/core/general.d.ts +2 -2
- package/dist/types/core/general.d.ts.map +1 -0
- package/dist/types/core/general.js +1 -0
- package/dist/types/core/general.js.map +1 -0
- package/dist/types/core/index.d.ts +1 -0
- package/dist/types/core/index.d.ts.map +1 -0
- package/dist/types/core/index.js +1 -0
- package/dist/types/core/index.js.map +1 -0
- package/dist/types/core/ui.d.ts +1 -0
- package/dist/types/core/ui.d.ts.map +1 -0
- package/dist/types/core/ui.js +1 -0
- package/dist/types/core/ui.js.map +1 -0
- package/dist/types/core.d.ts +45 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +2 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/registry.d.ts +1 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +1 -0
- package/dist/types/registry.js.map +1 -0
- package/package.json +27 -3
package/LICENSE
CHANGED
|
@@ -4,14 +4,20 @@ Copyright (c) 2026 AlaunS
|
|
|
4
4
|
|
|
5
5
|
All rights reserved.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
1. GRANT OF LICENSE
|
|
8
|
+
Permission is hereby granted to use this software for personal and commercial projects.
|
|
9
|
+
You may modify the software for your own internal use and include compiled versions
|
|
10
|
+
of this software within your own applications.
|
|
9
11
|
|
|
12
|
+
2. RESTRICTIONS
|
|
10
13
|
You may NOT:
|
|
11
|
-
- Redistribute this software
|
|
12
|
-
|
|
13
|
-
- Use this software as the basis for another framework,
|
|
14
|
+
- Redistribute, sell, sublicense, or share this software in its source code form
|
|
15
|
+
or as a standalone library/package.
|
|
16
|
+
- Use this software, in whole or in part, as the basis for creating another framework,
|
|
17
|
+
library, SDK, or competing development tool.
|
|
18
|
+
- Reverse engineer, decompile, or disassemble the software to create a derivative product.
|
|
14
19
|
|
|
20
|
+
3. DISCLAIMER
|
|
15
21
|
This software is provided "as is", without warranty of any kind, express or implied,
|
|
16
22
|
including but not limited to the warranties of merchantability, fitness for a
|
|
17
23
|
particular purpose and noninfringement. In no event shall the author be liable
|
package/README.md
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
# 🔌 Plug&Code (v2)
|
|
1
|
+
# 🔌 Plug&Code (v2.1.2)
|
|
2
2
|
|
|
3
|
-
**Plug&Code** is a **high-performance**, strongly-typed, **modular React framework**.
|
|
4
|
-
It’s designed for complex enterprise apps (Dashboards, CRMs, ERPs), decoupling **logic**, **UI**, and **data** via a **Feature-based architecture**.
|
|
3
|
+
**Plug&Code** is a **high-performance**, strongly-typed, **modular React framework**. It decouples **logic**, **UI**, and **data** via a **Feature-based architecture**.
|
|
5
4
|
|
|
6
|
-
> **v2
|
|
5
|
+
> **New in v2.1.2:** Choose your path! Start instantly with **Simple Mode** (Zero Config) or scale massively with **Enterprise Mode** (Schema-Based).
|
|
7
6
|
|
|
8
7
|
---
|
|
9
8
|
|
|
10
9
|
## 🚀 Key Features
|
|
11
10
|
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
* **🛡️ Dual Mode:**
|
|
12
|
+
* **Simple:** Zero-boilerplate, inferred types, ideal for MVPs.
|
|
13
|
+
* **Enterprise:** Schema-first, strict contracts, Registry Pattern for large teams.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
* **🧩 Feature-First Architecture:** Organize code in portable `ModuleManifests` that encapsulate state, logic, and UI.
|
|
17
|
+
* **⚡ Native Performance:** Built-in virtual rendering (`markVirtual`) and priority management via **Scheduler**.
|
|
18
|
+
* **🧠 Reactive State Machine:** Global & module-level state with **Immer** and granular subscriptions.
|
|
19
|
+
* **🎨 UI Composition Pipeline:** Slots system with **multiple injections**, **priorities**, and **keepAlive** support.
|
|
20
|
+
* **🛡️ Crash-Proof Slots:** Built-in **Error Boundaries** isolate every injected component. If one module crashes, the rest of the application stays alive.
|
|
17
21
|
|
|
18
22
|
---
|
|
19
23
|
|
|
@@ -28,13 +32,106 @@ yarn add plug-code immer
|
|
|
28
32
|
|
|
29
33
|
---
|
|
30
34
|
|
|
31
|
-
##
|
|
35
|
+
## ⚡ Mode A: Simple Mode (Zero Config)
|
|
36
|
+
|
|
37
|
+
Perfect for prototypes, small apps, or when you just need clean state management without complex architecture. Import from `plug-code/simple`.
|
|
38
|
+
|
|
39
|
+
### 1️⃣ Setup Store & Actions
|
|
40
|
+
|
|
41
|
+
Use `createSimplePlugC` to define your state. Types are inferred automatically from your initial state.
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
// store.ts
|
|
45
|
+
import { createSimplePlugC } from 'plug-code/simple';
|
|
46
|
+
|
|
47
|
+
export const { Provider, useStore, useAction, createModule } = createSimplePlugC({
|
|
48
|
+
initialState: {
|
|
49
|
+
count: 0,
|
|
50
|
+
user: { name: "Guest", loggedIn: false }
|
|
51
|
+
},
|
|
52
|
+
actions: {
|
|
53
|
+
// Direct mutable updates with Immer draft
|
|
54
|
+
increment: (draft) => { draft.count++ },
|
|
55
|
+
login: (draft, name: string) => {
|
|
56
|
+
draft.user.name = name;
|
|
57
|
+
draft.user.loggedIn = true;
|
|
58
|
+
},
|
|
59
|
+
// Async actions supported
|
|
60
|
+
fetchData: async (draft) => {
|
|
61
|
+
// ... logic
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
options: { debug: true }
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 2️⃣ Use in Components
|
|
70
|
+
|
|
71
|
+
```tsx
|
|
72
|
+
// App.tsx
|
|
73
|
+
import { Provider, useStore, useAction } from './store';
|
|
74
|
+
|
|
75
|
+
const Counter = () => {
|
|
76
|
+
const count = useStore(s => s.count); // Auto-typed as number
|
|
77
|
+
const increment = useAction("increment");
|
|
78
|
+
|
|
79
|
+
return <button onClick={() => increment()}>Count: {count}</button>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export default () => (
|
|
83
|
+
<Provider>
|
|
84
|
+
<Counter />
|
|
85
|
+
</Provider>
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 3️⃣ Modular Modules (The "Plug" Concept)
|
|
91
|
+
|
|
92
|
+
Need to encapsulate a module? Use `createModule` (returned from your store setup) to bundle State, View, and Logic into a portable unit.
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
// modules/ChatFeature.tsx
|
|
96
|
+
import { createModule } from '../store'; // Import from YOUR store
|
|
97
|
+
|
|
98
|
+
export const ChatFeature = createModule({
|
|
99
|
+
name: 'chat',
|
|
100
|
+
state: { messages: [] as string[] },
|
|
101
|
+
actions: {
|
|
102
|
+
// Arguments: (draft, payload, rootActions)
|
|
103
|
+
send: (draft, msg: string, root) => {
|
|
104
|
+
draft.messages.push(msg);
|
|
105
|
+
// You can even call root actions here:
|
|
106
|
+
// root.increment();
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
// Optional: Define a default View
|
|
110
|
+
view: ({ state, actions }) => (
|
|
111
|
+
<div>
|
|
112
|
+
{state.messages.map(m => <div key={m}>{m}</div>)}
|
|
113
|
+
<button onClick={() => actions.send("Hello!")}>Send</button>
|
|
114
|
+
</div>
|
|
115
|
+
)
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// Usage inside App.tsx:
|
|
119
|
+
// <ChatFeature.View />
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 🛡️ Mode B: Enterprise Mode (Schema-Based)
|
|
126
|
+
|
|
127
|
+
For complex Dashboards, ERPs, or large teams. Define a strict **Schema Contract** to enforce architecture across the entire application.
|
|
128
|
+
|
|
129
|
+
### 1️⃣ The Type Schema
|
|
32
130
|
|
|
33
|
-
|
|
131
|
+
Define the shape of your application in a TypeScript object type.
|
|
34
132
|
|
|
35
133
|
```ts
|
|
36
134
|
// types/AppSchema.ts
|
|
37
|
-
|
|
38
135
|
export type AppSchema = {
|
|
39
136
|
// 1. App State
|
|
40
137
|
store: {
|
|
@@ -57,41 +154,37 @@ export type AppSchema = {
|
|
|
57
154
|
|
|
58
155
|
```
|
|
59
156
|
|
|
60
|
-
|
|
157
|
+
### 2️⃣ Initialize the System
|
|
61
158
|
|
|
62
|
-
|
|
159
|
+
Pass your Schema to the factory. This returns **strongly-typed hooks** bound to your specific definitions.
|
|
63
160
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
Use the `createPlugC` factory passing your Schema. This returns **strongly-typed hooks** bound to your specific application definitions.
|
|
67
|
-
|
|
68
|
-
```tsx
|
|
161
|
+
```ts
|
|
69
162
|
// system.ts
|
|
70
163
|
import { createPlugC } from 'plug-code';
|
|
71
164
|
import type { AppSchema } from './types/AppSchema';
|
|
72
165
|
|
|
73
166
|
// ✨ MAGIC HAPPENS HERE: We pass the Schema to the factory
|
|
74
167
|
export const {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
168
|
+
api,
|
|
169
|
+
SystemPlcRoot,
|
|
170
|
+
useStore,
|
|
171
|
+
useCommand,
|
|
172
|
+
useSlot
|
|
80
173
|
} = createPlugC<AppSchema>();
|
|
81
174
|
|
|
82
175
|
```
|
|
83
176
|
|
|
84
|
-
###
|
|
177
|
+
### 3️⃣ Create a Feature Module
|
|
85
178
|
|
|
86
|
-
|
|
179
|
+
Modules use the typed hooks generated in the previous step.
|
|
87
180
|
|
|
88
181
|
```tsx
|
|
89
|
-
//
|
|
182
|
+
// modules/UsersFeature.tsx
|
|
90
183
|
import { ModuleManifest } from 'plug-code';
|
|
91
|
-
import { useStore, useCommand } from '../system';
|
|
184
|
+
import { useStore, useCommand } from '../system'; // Import YOUR typed hooks
|
|
92
185
|
|
|
93
186
|
const UserList = () => {
|
|
94
|
-
// TS knows "users:list" returns
|
|
187
|
+
// TS knows "users:list" returns User[] automatically
|
|
95
188
|
const users = useStore("users:list");
|
|
96
189
|
const deleteCmd = useCommand("users:delete");
|
|
97
190
|
|
|
@@ -100,7 +193,7 @@ const UserList = () => {
|
|
|
100
193
|
{users.map(u => (
|
|
101
194
|
<li key={u.id}>
|
|
102
195
|
{u.name}
|
|
103
|
-
{/* TS enforces
|
|
196
|
+
{/* TS enforces payload { id: string } */}
|
|
104
197
|
<button onClick={() => deleteCmd({ id: u.id })}>x</button>
|
|
105
198
|
</li>
|
|
106
199
|
))}
|
|
@@ -112,51 +205,58 @@ export const UsersFeature: ModuleManifest = {
|
|
|
112
205
|
name: "users",
|
|
113
206
|
state: { "users:list": [] },
|
|
114
207
|
commands: {
|
|
115
|
-
"users:delete": ({ id }) => {
|
|
116
|
-
console.log("Deleting", id);
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
208
|
+
"users:delete": ({ id }) => { console.log("Deleting", id); return true; }
|
|
119
209
|
},
|
|
120
210
|
slots: {
|
|
121
211
|
"main-layout": [{ id: "user-list-view", component: UserList, priority: 10 }]
|
|
122
212
|
},
|
|
123
|
-
onLoad: (
|
|
124
|
-
// Enable virtualization for large lists
|
|
213
|
+
onLoad: () => {
|
|
214
|
+
// Enable virtualization for large lists (10k+ items)
|
|
125
215
|
api.markVirtual("main-layout", { itemHeight: 50 });
|
|
126
216
|
}
|
|
127
217
|
};
|
|
128
218
|
|
|
129
219
|
```
|
|
130
220
|
|
|
131
|
-
###
|
|
221
|
+
### 4️⃣ Register & Render
|
|
222
|
+
|
|
223
|
+
Connect your modules to the main application using `api.registerModule`.
|
|
132
224
|
|
|
133
225
|
```tsx
|
|
134
226
|
// App.tsx
|
|
135
|
-
import
|
|
136
|
-
import {
|
|
227
|
+
import React from 'react';
|
|
228
|
+
import { api, SystemPlcRoot } from './system'; // Singleton created in Step 2
|
|
229
|
+
import { UsersFeature } from './modules/UsersFeature';
|
|
137
230
|
|
|
138
|
-
// Load
|
|
231
|
+
// 🔌 Load the Feature into the runtime
|
|
232
|
+
// This initializes state, registers commands, and injects the UI into 'main-layout'
|
|
139
233
|
api.registerModule(UsersFeature);
|
|
140
234
|
|
|
141
|
-
const App = () =>
|
|
142
|
-
|
|
143
|
-
<
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
235
|
+
export const App = () => {
|
|
236
|
+
return (
|
|
237
|
+
<SystemPlcRoot>
|
|
238
|
+
<div className="layout-container">
|
|
239
|
+
<h1>My Dashboard</h1>
|
|
240
|
+
|
|
241
|
+
{/* Render the slot where UsersFeature injected its component */}
|
|
242
|
+
<div className="content">
|
|
243
|
+
{api.render("main-layout")}
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
</SystemPlcRoot>
|
|
247
|
+
);
|
|
248
|
+
};
|
|
149
249
|
|
|
150
250
|
```
|
|
151
251
|
|
|
252
|
+
---
|
|
253
|
+
|
|
152
254
|
## 📚 API Reference
|
|
153
255
|
|
|
154
|
-
|
|
256
|
+
Regardless of the mode, the `api` object exposes the full power of the Plug&Code runtime.
|
|
155
257
|
|
|
156
258
|
### 🧬 Root State Management
|
|
157
259
|
|
|
158
|
-
Methods to interact with the global registry keys.
|
|
159
|
-
|
|
160
260
|
* **`createStore<K>(key, initial)`**
|
|
161
261
|
Initializes a key in the root store.
|
|
162
262
|
* **`getStore<K>(key)`**
|
|
@@ -165,33 +265,29 @@ Returns the current snapshot of a value in the root store.
|
|
|
165
265
|
Updates the state.
|
|
166
266
|
* `updater`: Can be a raw value or a callback `(draft) => void` (using **Immer**).
|
|
167
267
|
* `priority`: Execution priority (`HIGH`, `MED`, `LOW`).
|
|
168
|
-
* `useTransition`: Wraps the update in a React transition.
|
|
268
|
+
* `useTransition`: Wraps the update in a React transition for concurrent mode.
|
|
269
|
+
|
|
169
270
|
|
|
170
271
|
|
|
171
272
|
### 📦 Feature State (Substores)
|
|
172
273
|
|
|
173
|
-
Methods to manage isolated state within
|
|
274
|
+
Methods to manage isolated state within modules (e.g., `"users:list"`).
|
|
174
275
|
|
|
175
276
|
* **`createSubstore<F, K>(substore, key, initial)`**
|
|
176
|
-
Initializes a specific key within a
|
|
277
|
+
Initializes a specific key within a module namespace.
|
|
177
278
|
* **`getSubstore<F, K>(substore, key)`**
|
|
178
|
-
Gets a value from a
|
|
279
|
+
Gets a value from a module substore.
|
|
179
280
|
* **`setSubstore<F, K>(substore, key, updater, ...)`**
|
|
180
|
-
Updates a value in a
|
|
281
|
+
Updates a value in a module substore using Immer drafts.
|
|
181
282
|
|
|
182
283
|
### 🧠 Reactivity & Computed Values
|
|
183
284
|
|
|
184
285
|
* **`deriveStore(outputKey, outputSlot, dependencies, calculator)`**
|
|
185
286
|
Creates a **computed value** that automatically updates when dependencies change.
|
|
186
|
-
* `outputKey`: The key where the result will be stored.
|
|
187
|
-
* `dependencies`: Array of store keys to listen to.
|
|
188
|
-
* `calculator`: Pure function `(...inputs) => result`.
|
|
189
|
-
|
|
190
|
-
|
|
191
287
|
* **`deriveSubstore(substore, outputKey, outputSlot, dependencies, calculator)`**
|
|
192
|
-
Same as `deriveStore` but scoped to a specific
|
|
288
|
+
Same as `deriveStore` but scoped to a specific module substore.
|
|
193
289
|
* **`watch(key, selector, callback)`**
|
|
194
|
-
Subscribes to changes in any store/substore key.
|
|
290
|
+
Subscribes to changes in any store/substore key. Useful for side effects (logging, analytics).
|
|
195
291
|
* **`watchAllStores(definitions, callback)`**
|
|
196
292
|
Watches multiple keys across different stores/substores and triggers a callback when the combined state changes.
|
|
197
293
|
|
|
@@ -215,7 +311,18 @@ Injects a React component into a UI Slot.
|
|
|
215
311
|
* **`render(slot, props)`**
|
|
216
312
|
Renders the content of a slot.
|
|
217
313
|
* **`wrap(slot, wrapper)`**
|
|
218
|
-
|
|
314
|
+
Applies a "Middleware Component" to an entire slot. Useful for injecting **Theme Providers**, **Suspense Boundaries**, or **Security Contexts** around a group of plugins.
|
|
315
|
+
```tsx
|
|
316
|
+
// Example: Wrap the entire dashboard sidebar in a ThemeProvider
|
|
317
|
+
api.wrap("sidebar", (children) => (
|
|
318
|
+
<ThemeProvider theme={darkTheme}>
|
|
319
|
+
{children}
|
|
320
|
+
</ThemeProvider>
|
|
321
|
+
));
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
|
|
219
326
|
* **`after(slot, targetId, newId, component)`**
|
|
220
327
|
Injects a component immediately after a specific target ID within a slot.
|
|
221
328
|
* **`markVirtual(slot, config)`**
|
|
@@ -242,16 +349,42 @@ Runs a synchronous pipeline. Throws if the pipeline contains async steps.
|
|
|
242
349
|
* **`registerModule(manifest)`**
|
|
243
350
|
Loads a `ModuleManifest` (State, UI, Commands) into the runtime.
|
|
244
351
|
* **`loadFeature(importer)`**
|
|
245
|
-
Helper for lazy-loading
|
|
352
|
+
Helper for lazy-loading modules (e.g., `() => import('./modules/MyFeature')`).
|
|
246
353
|
* **`createSelector(extractor, calculator)`**
|
|
247
354
|
Creates a memoized selector for use with hooks or watchers.
|
|
355
|
+
|
|
248
356
|
---
|
|
249
357
|
|
|
250
|
-
##
|
|
358
|
+
## 🛡️ Safety & Reliability
|
|
251
359
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
360
|
+
Plug&Code is built for stability. In large modular applications, a single buggy plugin shouldn't take down the entire dashboard.
|
|
361
|
+
|
|
362
|
+
### 🛑 Automatic Error Boundaries
|
|
363
|
+
|
|
364
|
+
Every component injected into a Slot is automatically wrapped in a `SlotErrorBoundary`.
|
|
365
|
+
|
|
366
|
+
* **Isolation:** If a module throws an error during render, only that specific slot item is replaced with a fallback error UI.
|
|
367
|
+
* **Logging:** Errors are caught and logged automatically, making debugging modular systems easier.
|
|
368
|
+
|
|
369
|
+
### 🚦 Concurrent Mode & Scheduler
|
|
370
|
+
|
|
371
|
+
The framework manages updates using an internal **Priority Scheduler** fully compatible with **React 18**.
|
|
372
|
+
|
|
373
|
+
* **Updates:** `setStore` supports `useTransition: true` to keep the UI responsive during heavy state updates.
|
|
374
|
+
* **Priorities:** You can schedule updates as `HIGH` (immediate interaction), `MED` (default), or `LOW` (background sync) to prevent frame drops.
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## ⚡ Performance Internals
|
|
379
|
+
|
|
380
|
+
* **Virtualization:** `api.markVirtual` isn't just a helper; it swaps the rendering engine for that slot to a windowing system capable of handling **10,000+ items** with consistent frame rates.
|
|
381
|
+
* **Smart caching:** The `deriveStore` and pipeline `transform` systems use **Dependency Tracking** to only re-calculate when specific used keys change, avoiding zombie-child re-renders.
|
|
256
382
|
|
|
257
383
|
---
|
|
384
|
+
|
|
385
|
+
## 🌟 Best Practices (Enterprise Mode)
|
|
386
|
+
|
|
387
|
+
* **Schema First:** Define your data shape in `AppSchema` before coding.
|
|
388
|
+
* **Atomic Modules:** A module should contain all it needs (Store, UI, Commands).
|
|
389
|
+
* **Data-Driven UI:** Change the store, let watchers/hooks update the view.
|
|
390
|
+
* **Use Virtualization:** For large or growing lists, simply call `api.markVirtual` in `onLoad`.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/core/helpers/core.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,CAW/C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAU5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/core/helpers/core.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,CAAM,EAAE,CAAM;IAClC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAS,EAAE,IAAS;IAC/C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -13,3 +13,4 @@ export declare function useSlot<K extends SlotKey>(slotName: K): (props?: SlotPr
|
|
|
13
13
|
export declare function useTransientStore<K extends StoreKey, T>(key: K, selector: (state: StoreValue<K>) => T, effect: (value: T) => void, deps?: any[]): void;
|
|
14
14
|
export declare function useTransientStore<F extends FeatureKey, K extends keyof SafeFeatureValue<F, K> & string, T>(key: `${F}:${K}`, selector: (state: SafeFeatureValue<F, K>) => T, effect: (value: T) => void, deps?: any[]): void;
|
|
15
15
|
export {};
|
|
16
|
+
//# sourceMappingURL=plcHooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plcHooks.d.ts","sourceRoot":"","sources":["../../../src/core/hooks/plcHooks.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkE,MAAM,OAAO,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EACH,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,SAAS,EACT,eAAe,EACf,UAAU,EACb,MAAM,sBAAsB,CAAC;AAE9B,KAAK,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,eAAe,GACvD,CAAC,CAAC,SAAS,MAAM,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAClE,GAAG,CAAC;AAIV,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAE5E,CAAC;AASF,wBAAgB,QAAQ,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAC1D,GAAG,EAAE,CAAC,EACN,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GACtC,CAAC,CAAC;AAEL,wBAAgB,QAAQ,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,EACtH,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAC/C,CAAC,CAAC;AAsBL,wBAAgB,UAAU,CAAC,CAAC,SAAS,UAAU,EAAE,SAAS,EAAE,CAAC,cAGnC,UAAU,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAG9D;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,CAAC,IAE1C,QAAQ,SAAS,CAAC,CAAC,CAAC,qBAC/B;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,EACnD,GAAG,EAAE,CAAC,EACN,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EACrC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAC1B,IAAI,CAAC,EAAE,GAAG,EAAE,GACb,IAAI,CAAC;AAER,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EACtG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAC9C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAC1B,IAAI,CAAC,EAAE,GAAG,EAAE,GACb,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plcHooks.js","sourceRoot":"","sources":["../../../src/core/hooks/plcHooks.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAmBvF,MAAM,UAAU,GAAG,aAAa,CAAgB,IAAI,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,WAAW,GAAyD,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnG,OAAO,KAAC,UAAU,CAAC,QAAQ,IAAC,KAAK,EAAE,GAAG,YAAG,QAAQ,GAAuB,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,GAAG,EAAE;IACnB,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG;QACJ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,OAAO,GAAG,CAAC;AACf,CAAC,CAAA;AAYD,MAAM,UAAU,QAAQ,CAAI,GAAW,EAAE,WAA6B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IAExB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC9B,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,GAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;YAC1D,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAU,CAAC,CAAC;QAC/B,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;YACtD,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACvB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEzB,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,UAAU,CAAuB,SAAY;IACzD,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,OAAO,OAAO,CAAC,GAAG,EAAE;QAChB,OAAO,CAAC,OAAuB,EAAyB,EAAE,CACtD,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,OAAO,CAAoB,QAAW;IAClD,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,OAAO,CAAC,KAAoB,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAgBD,MAAM,UAAU,iBAAiB,CAC7B,GAAW,EACX,QAA2B,EAC3B,MAA0B,EAC1B,OAAc,EAAE;IAEhB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;YACtD,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACvB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC5B,CAAC"}
|
package/dist/core/plcAPI.d.ts
CHANGED
|
@@ -19,10 +19,11 @@ export declare class PlcAPI {
|
|
|
19
19
|
private scheduler;
|
|
20
20
|
layout: PlcLayout;
|
|
21
21
|
private compiledPipelines;
|
|
22
|
+
private moduleAssets;
|
|
22
23
|
private receiveCache;
|
|
23
24
|
private commands;
|
|
24
25
|
private activeDependencyTracker;
|
|
25
|
-
private
|
|
26
|
+
private loadedModules;
|
|
26
27
|
constructor();
|
|
27
28
|
createStore<K extends StoreKey>(key: K, initial: StoreValue<K>): void;
|
|
28
29
|
getStore<K extends StoreKey>(key: K): StoreValue<K>;
|
|
@@ -80,3 +81,4 @@ export declare class PlcAPI {
|
|
|
80
81
|
createSelector<S, R>(extractor: (state: S) => any[], calculator: (...args: any[]) => R): (state: S) => R;
|
|
81
82
|
}
|
|
82
83
|
export {};
|
|
84
|
+
//# sourceMappingURL=plcAPI.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plcAPI.d.ts","sourceRoot":"","sources":["../../src/core/plcAPI.ts"],"names":[],"mappings":"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"}
|
package/dist/core/plcAPI.js
CHANGED
|
@@ -10,12 +10,13 @@ export class PlcAPI {
|
|
|
10
10
|
scheduler;
|
|
11
11
|
layout;
|
|
12
12
|
compiledPipelines = new Map();
|
|
13
|
+
moduleAssets = new Map();
|
|
13
14
|
receiveCache = new LRUCache(300);
|
|
14
15
|
// Comandos registry
|
|
15
16
|
commands = new Map();
|
|
16
17
|
activeDependencyTracker = null;
|
|
17
|
-
// Loaded
|
|
18
|
-
|
|
18
|
+
// Loaded modules manager
|
|
19
|
+
loadedModules = new Set();
|
|
19
20
|
constructor() {
|
|
20
21
|
this.store = new PlcStore();
|
|
21
22
|
this.pipeline = new PlcPipeline();
|
|
@@ -285,8 +286,8 @@ export class PlcAPI {
|
|
|
285
286
|
}
|
|
286
287
|
watch(key, selector, callback) {
|
|
287
288
|
if (key.includes(":")) {
|
|
288
|
-
const [
|
|
289
|
-
return this.watchSubstore(
|
|
289
|
+
const [module, subKey] = key.split(":");
|
|
290
|
+
return this.watchSubstore(module, subKey, selector, callback);
|
|
290
291
|
}
|
|
291
292
|
return this.watchStore(key, selector, callback);
|
|
292
293
|
}
|
|
@@ -416,16 +417,22 @@ export class PlcAPI {
|
|
|
416
417
|
// Modules
|
|
417
418
|
// ----------------------
|
|
418
419
|
registerModule(manifest) {
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
420
|
+
const moduleName = manifest.name;
|
|
421
|
+
const isUpdate = this.loadedModules.has(moduleName);
|
|
422
|
+
const previousAssets = this.moduleAssets.get(moduleName) || [];
|
|
423
|
+
const currentAssets = [];
|
|
424
|
+
this.moduleAssets.set(moduleName, currentAssets);
|
|
425
|
+
const track = (slot, id) => {
|
|
426
|
+
currentAssets.push({ slot, id });
|
|
427
|
+
};
|
|
428
|
+
if (manifest.state && !isUpdate) {
|
|
422
429
|
Object.entries(manifest.state).forEach(([key, val]) => {
|
|
423
|
-
this.createSubstore(
|
|
430
|
+
this.createSubstore(moduleName, key, val);
|
|
424
431
|
});
|
|
425
432
|
}
|
|
426
433
|
if (manifest.commands) {
|
|
427
434
|
Object.entries(manifest.commands).forEach(([cmdId, fn]) => {
|
|
428
|
-
const fullId = cmdId.includes(":") ? cmdId : `${
|
|
435
|
+
const fullId = cmdId.includes(":") ? cmdId : `${moduleName}:${cmdId}`;
|
|
429
436
|
this.commands.set(fullId, fn);
|
|
430
437
|
});
|
|
431
438
|
}
|
|
@@ -433,14 +440,29 @@ export class PlcAPI {
|
|
|
433
440
|
Object.entries(manifest.slots).forEach(([slotName, components]) => {
|
|
434
441
|
components.forEach(comp => {
|
|
435
442
|
this.register(slotName, comp.id, comp.component, comp.priority, comp.keepAlive);
|
|
443
|
+
track(slotName, comp.id);
|
|
436
444
|
});
|
|
437
445
|
});
|
|
438
446
|
}
|
|
439
447
|
if (manifest.onLoad) {
|
|
440
|
-
manifest.onLoad(
|
|
448
|
+
manifest.onLoad();
|
|
449
|
+
}
|
|
450
|
+
if (isUpdate) {
|
|
451
|
+
previousAssets.forEach(prev => {
|
|
452
|
+
const stillExists = currentAssets.some(curr => curr.slot === prev.slot && curr.id === prev.id);
|
|
453
|
+
if (!stillExists) {
|
|
454
|
+
console.debug(`[PlcAPI] Cleaning up removed slot item: ${prev.slot} / ${prev.id}`);
|
|
455
|
+
this.layout.unregister(prev.slot, prev.id);
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
this.loadedModules.add(moduleName);
|
|
460
|
+
if (!isUpdate) {
|
|
461
|
+
console.debug(`[PlcAPI] Module loaded: ${moduleName}`);
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
console.debug(`[PlcAPI] Module updated (HMR): ${moduleName}`);
|
|
441
465
|
}
|
|
442
|
-
this.loadedFeatures.add(manifest.name);
|
|
443
|
-
console.debug(`[PlcAPI] Feature loaded: ${manifest.name}`);
|
|
444
466
|
}
|
|
445
467
|
async loadFeature(importer) {
|
|
446
468
|
try {
|
|
@@ -448,7 +470,7 @@ export class PlcAPI {
|
|
|
448
470
|
this.registerModule(module.default);
|
|
449
471
|
}
|
|
450
472
|
catch (err) {
|
|
451
|
-
console.error(`[PlcAPI] Failed to load
|
|
473
|
+
console.error(`[PlcAPI] Failed to load module`, err);
|
|
452
474
|
throw err;
|
|
453
475
|
}
|
|
454
476
|
}
|
|
@@ -470,3 +492,4 @@ export class PlcAPI {
|
|
|
470
492
|
};
|
|
471
493
|
}
|
|
472
494
|
}
|
|
495
|
+
//# sourceMappingURL=plcAPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plcAPI.js","sourceRoot":"","sources":["../../src/core/plcAPI.ts"],"names":[],"mappings":"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"}
|