@kithinji/orca 1.0.15 → 1.0.16

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 CHANGED
@@ -12,7 +12,13 @@
12
12
  </p>
13
13
  <p align="center">
14
14
  <a href="https://www.npmjs.com/package/@kithinji/orca">
15
- <img src="https://img.shields.io/badge/NPM_package-v1.0.14-blue" alt="Orca on npm" />
15
+ <img src="https://img.shields.io/badge/NPM_package-v1.0.16-blue" alt="Orca on npm" />
16
+ </a>
17
+ </p>
18
+
19
+ <p align="center">
20
+ <a href="https://github.com/kithinjibrian/pod">
21
+ <img src="https://img.shields.io/badge/POD CLI Tool-blue" alt="Pod on github" />
16
22
  </a>
17
23
  </p>
18
24
 
@@ -81,10 +81,12 @@ var kithinjiorca = (() => {
81
81
  SIGNATURE_METADATA_KEY: () => SIGNATURE_METADATA_KEY,
82
82
  Signature: () => Signature,
83
83
  assert$: () => assert$,
84
+ batch: () => batch,
84
85
  browser: () => browser_exports,
85
86
  collectAllProvidersFromNode: () => collectAllProvidersFromNode,
86
87
  computed: () => computed,
87
88
  createComponent: () => createComponent,
89
+ createRoot: () => createRoot,
88
90
  effect: () => effect,
89
91
  from: () => from,
90
92
  getCurrentInjector: () => getCurrentInjector,
@@ -109,7 +111,8 @@ var kithinjiorca = (() => {
109
111
  style: () => style,
110
112
  symbolValueReplacer: () => symbolValueReplacer,
111
113
  symbolValueReviver: () => symbolValueReviver,
112
- toSignal: () => toSignal
114
+ toSignal: () => toSignal,
115
+ untracked: () => untracked
113
116
  });
114
117
  var import_reflect_metadata = __require("reflect-metadata");
115
118
 
@@ -171,8 +174,10 @@ var kithinjiorca = (() => {
171
174
  StringRenderer: () => StringRenderer,
172
175
  VNode: () => VNode,
173
176
  assert$: () => assert$,
177
+ batch: () => batch,
174
178
  collectAllProvidersFromNode: () => collectAllProvidersFromNode,
175
179
  computed: () => computed,
180
+ createRoot: () => createRoot,
176
181
  effect: () => effect,
177
182
  from: () => from,
178
183
  getCurrentInjector: () => getCurrentInjector,
@@ -194,7 +199,8 @@ var kithinjiorca = (() => {
194
199
  store: () => store,
195
200
  symbolValueReplacer: () => symbolValueReplacer,
196
201
  symbolValueReviver: () => symbolValueReviver,
197
- toSignal: () => toSignal
202
+ toSignal: () => toSignal,
203
+ untracked: () => untracked
198
204
  });
199
205
 
200
206
  // src/shared/store.ts
@@ -1220,11 +1226,17 @@ var kithinjiorca = (() => {
1220
1226
 
1221
1227
  // src/shared/signal/signal.ts
1222
1228
  var currentEffect = null;
1229
+ var batchDepth = 0;
1230
+ var pendingEffects = /* @__PURE__ */ new Set();
1223
1231
  function signal(initialValue) {
1224
1232
  let value = initialValue;
1225
1233
  const subscribers = /* @__PURE__ */ new Set();
1226
1234
  const notify = () => {
1227
- subscribers.forEach((sub) => sub());
1235
+ if (batchDepth > 0) {
1236
+ subscribers.forEach((sub) => pendingEffects.add(sub));
1237
+ } else {
1238
+ subscribers.forEach((sub) => sub.execute());
1239
+ }
1228
1240
  };
1229
1241
  return {
1230
1242
  _isSignal: true,
@@ -1232,6 +1244,7 @@ var kithinjiorca = (() => {
1232
1244
  get value() {
1233
1245
  if (currentEffect) {
1234
1246
  subscribers.add(currentEffect);
1247
+ currentEffect.deps.add(subscribers);
1235
1248
  }
1236
1249
  return value;
1237
1250
  },
@@ -1244,29 +1257,98 @@ var kithinjiorca = (() => {
1244
1257
  };
1245
1258
  }
1246
1259
  function effect(fn) {
1247
- const execute = () => {
1248
- currentEffect = execute;
1260
+ const deps = /* @__PURE__ */ new Set();
1261
+ let cleanupFn;
1262
+ const runner = () => {
1263
+ runner.execute();
1264
+ };
1265
+ runner.deps = deps;
1266
+ runner.execute = () => {
1267
+ if (cleanupFn) {
1268
+ cleanupFn();
1269
+ cleanupFn = void 0;
1270
+ }
1271
+ deps.forEach((subs) => subs.delete(runner));
1272
+ deps.clear();
1273
+ const prevEffect = currentEffect;
1274
+ currentEffect = runner;
1249
1275
  try {
1250
- fn();
1276
+ const result = fn();
1277
+ if (typeof result === "function") {
1278
+ cleanupFn = result;
1279
+ }
1251
1280
  } finally {
1252
- currentEffect = null;
1281
+ currentEffect = prevEffect;
1253
1282
  }
1254
1283
  };
1255
- execute();
1256
- return () => {
1257
- currentEffect = null;
1284
+ runner.cleanup = () => {
1285
+ if (cleanupFn) {
1286
+ cleanupFn();
1287
+ cleanupFn = void 0;
1288
+ }
1289
+ deps.forEach((subs) => subs.delete(runner));
1290
+ deps.clear();
1258
1291
  };
1292
+ runner.cleanupFn = cleanupFn;
1293
+ runner.execute();
1294
+ return () => runner.cleanup();
1259
1295
  }
1260
1296
  function computed(fn) {
1261
1297
  const sig = signal(fn());
1262
- effect(() => {
1298
+ let cleanup;
1299
+ cleanup = effect(() => {
1263
1300
  sig.value = fn();
1264
1301
  });
1302
+ const originalSignal = sig;
1303
+ const dispose = cleanup;
1304
+ originalSignal.dispose = dispose;
1265
1305
  return sig;
1266
1306
  }
1307
+ function batch(fn) {
1308
+ batchDepth++;
1309
+ try {
1310
+ fn();
1311
+ } finally {
1312
+ batchDepth--;
1313
+ if (batchDepth === 0) {
1314
+ const effects = Array.from(pendingEffects);
1315
+ pendingEffects.clear();
1316
+ effects.forEach((effect2) => effect2.execute());
1317
+ }
1318
+ }
1319
+ }
1267
1320
  function isSignal(value) {
1268
1321
  return value && value._isSignal === true;
1269
1322
  }
1323
+ function createRoot(fn) {
1324
+ const cleanups = [];
1325
+ const dispose = () => {
1326
+ cleanups.forEach((cleanup) => cleanup());
1327
+ cleanups.length = 0;
1328
+ };
1329
+ const prevEffect = currentEffect;
1330
+ const originalEffect = effect;
1331
+ globalThis.effect = (fn2) => {
1332
+ const cleanup = originalEffect(fn2);
1333
+ cleanups.push(cleanup);
1334
+ return cleanup;
1335
+ };
1336
+ try {
1337
+ return fn(dispose);
1338
+ } finally {
1339
+ globalThis.effect = originalEffect;
1340
+ currentEffect = prevEffect;
1341
+ }
1342
+ }
1343
+ function untracked(fn) {
1344
+ const prevEffect = currentEffect;
1345
+ currentEffect = null;
1346
+ try {
1347
+ return fn();
1348
+ } finally {
1349
+ currentEffect = prevEffect;
1350
+ }
1351
+ }
1270
1352
 
1271
1353
  // src/shared/observable/observable.ts
1272
1354
  var Observable = class {