react-state-basis 0.2.0 → 0.2.1
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 +56 -71
- package/dist/index.d.mts +18 -11
- package/dist/index.d.ts +18 -11
- package/dist/index.js +77 -51
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +76 -52
- package/dist/index.mjs.map +1 -1
- package/dist/production.d.mts +32 -0
- package/dist/production.d.ts +32 -0
- package/dist/production.js +115 -0
- package/dist/production.js.map +1 -0
- package/dist/production.mjs +58 -0
- package/dist/production.mjs.map +1 -0
- package/package.json +10 -3
package/dist/index.js
CHANGED
|
@@ -24,6 +24,8 @@ __export(index_exports, {
|
|
|
24
24
|
__testEngine__: () => __testEngine__,
|
|
25
25
|
__test__: () => __test__,
|
|
26
26
|
beginEffectTracking: () => beginEffectTracking,
|
|
27
|
+
config: () => config,
|
|
28
|
+
configureBasis: () => configureBasis,
|
|
27
29
|
createContext: () => createContext,
|
|
28
30
|
currentTickBatch: () => currentTickBatch,
|
|
29
31
|
endEffectTracking: () => endEffectTracking,
|
|
@@ -271,14 +273,25 @@ var LOOP_WINDOW_MS = 500;
|
|
|
271
273
|
var ANALYSIS_INTERVAL = 5;
|
|
272
274
|
|
|
273
275
|
// src/engine.ts
|
|
276
|
+
var config = {
|
|
277
|
+
debug: false
|
|
278
|
+
};
|
|
279
|
+
var booted = false;
|
|
280
|
+
var configureBasis = (newConfig) => {
|
|
281
|
+
config = { ...config, ...newConfig };
|
|
282
|
+
if (config.debug && !booted) {
|
|
283
|
+
displayBootLog(WINDOW_SIZE);
|
|
284
|
+
booted = true;
|
|
285
|
+
}
|
|
286
|
+
};
|
|
274
287
|
var history = /* @__PURE__ */ new Map();
|
|
275
288
|
var currentTickBatch = /* @__PURE__ */ new Set();
|
|
276
289
|
var updateLog = [];
|
|
277
290
|
var currentEffectSource = null;
|
|
278
291
|
var tick = 0;
|
|
279
292
|
var isBatching = false;
|
|
280
|
-
displayBootLog(WINDOW_SIZE);
|
|
281
293
|
var analyzeBasis = () => {
|
|
294
|
+
if (!config.debug) return;
|
|
282
295
|
const entries = Array.from(history.entries());
|
|
283
296
|
if (entries.length < 2) return;
|
|
284
297
|
entries.forEach(([labelA, vecA], i) => {
|
|
@@ -291,6 +304,10 @@ var analyzeBasis = () => {
|
|
|
291
304
|
});
|
|
292
305
|
};
|
|
293
306
|
var printBasisHealthReport = (threshold = 0.5) => {
|
|
307
|
+
if (!config.debug) {
|
|
308
|
+
console.warn("[Basis] Cannot generate report. Debug mode is OFF.");
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
294
311
|
displayHealthReport(history, calculateCosineSimilarity, threshold);
|
|
295
312
|
};
|
|
296
313
|
var beginEffectTracking = (label) => {
|
|
@@ -300,6 +317,7 @@ var endEffectTracking = () => {
|
|
|
300
317
|
currentEffectSource = null;
|
|
301
318
|
};
|
|
302
319
|
var registerVariable = (label) => {
|
|
320
|
+
if (!config.debug) return;
|
|
303
321
|
if (!history.has(label)) {
|
|
304
322
|
history.set(label, new Array(WINDOW_SIZE).fill(0));
|
|
305
323
|
}
|
|
@@ -308,6 +326,7 @@ var unregisterVariable = (label) => {
|
|
|
308
326
|
history.delete(label);
|
|
309
327
|
};
|
|
310
328
|
var recordUpdate = (label) => {
|
|
329
|
+
if (!config.debug) return true;
|
|
311
330
|
const now = Date.now();
|
|
312
331
|
updateLog.push({ label, ts: now });
|
|
313
332
|
updateLog = updateLog.filter((e) => now - e.ts < LOOP_WINDOW_MS);
|
|
@@ -340,6 +359,8 @@ if (typeof window !== "undefined") {
|
|
|
340
359
|
window.printBasisReport = printBasisHealthReport;
|
|
341
360
|
}
|
|
342
361
|
var __testEngine__ = {
|
|
362
|
+
config,
|
|
363
|
+
configureBasis,
|
|
343
364
|
history,
|
|
344
365
|
currentTickBatch,
|
|
345
366
|
registerVariable,
|
|
@@ -358,35 +379,13 @@ function useState(initialValue, label) {
|
|
|
358
379
|
registerVariable(effectiveLabel);
|
|
359
380
|
return () => unregisterVariable(effectiveLabel);
|
|
360
381
|
}, [effectiveLabel]);
|
|
361
|
-
const setter = useCallback((newValue) => {
|
|
382
|
+
const setter = (0, import_react.useCallback)((newValue) => {
|
|
362
383
|
if (recordUpdate(effectiveLabel)) {
|
|
363
384
|
setVal(newValue);
|
|
364
385
|
}
|
|
365
386
|
}, [effectiveLabel]);
|
|
366
387
|
return [val, setter];
|
|
367
388
|
}
|
|
368
|
-
function useMemo(factory, depsOrLabel, label) {
|
|
369
|
-
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
370
|
-
const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
|
|
371
|
-
const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_projection";
|
|
372
|
-
(0, import_react.useEffect)(() => {
|
|
373
|
-
if (window._basis_debug !== false) {
|
|
374
|
-
console.log(`%c [Basis] Valid Projection: "${effectiveLabel}" `, "color: #2ecc71; font-weight: bold;");
|
|
375
|
-
}
|
|
376
|
-
}, [effectiveLabel]);
|
|
377
|
-
return (0, import_react.useMemo)(factory, actualDeps || []);
|
|
378
|
-
}
|
|
379
|
-
function useEffect(effect, depsOrLabel, label) {
|
|
380
|
-
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
381
|
-
const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
|
|
382
|
-
const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_effect";
|
|
383
|
-
(0, import_react.useEffect)(() => {
|
|
384
|
-
beginEffectTracking(effectiveLabel);
|
|
385
|
-
const cleanup = effect();
|
|
386
|
-
endEffectTracking();
|
|
387
|
-
return cleanup;
|
|
388
|
-
}, actualDeps);
|
|
389
|
-
}
|
|
390
389
|
function useReducer(reducer, initialArg, init, label) {
|
|
391
390
|
const effectiveLabel = typeof init === "string" ? init : label || "anonymous_reducer";
|
|
392
391
|
const reactInit = typeof init === "function" ? init : void 0;
|
|
@@ -395,33 +394,45 @@ function useReducer(reducer, initialArg, init, label) {
|
|
|
395
394
|
registerVariable(effectiveLabel);
|
|
396
395
|
return () => unregisterVariable(effectiveLabel);
|
|
397
396
|
}, [effectiveLabel]);
|
|
398
|
-
const basisDispatch = useCallback((action) => {
|
|
397
|
+
const basisDispatch = (0, import_react.useCallback)((action) => {
|
|
399
398
|
if (recordUpdate(effectiveLabel)) {
|
|
400
399
|
dispatch(action);
|
|
401
400
|
}
|
|
402
401
|
}, [effectiveLabel]);
|
|
403
402
|
return [state, basisDispatch];
|
|
404
403
|
}
|
|
405
|
-
function
|
|
406
|
-
const
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
404
|
+
function useMemo(factory, depsOrLabel, label) {
|
|
405
|
+
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
406
|
+
const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
|
|
407
|
+
const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_projection";
|
|
408
|
+
(0, import_react.useEffect)(() => {
|
|
409
|
+
if (config.debug) {
|
|
410
|
+
console.log(`%c [Basis] Valid Projection: "${effectiveLabel}" `, "color: #2ecc71; font-weight: bold;");
|
|
411
|
+
}
|
|
412
|
+
}, [effectiveLabel]);
|
|
413
|
+
return (0, import_react.useMemo)(factory, actualDeps || []);
|
|
411
414
|
}
|
|
412
415
|
function useCallback(callback, depsOrLabel, label) {
|
|
413
416
|
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
414
417
|
const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
|
|
415
418
|
const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_callback";
|
|
416
419
|
(0, import_react.useEffect)(() => {
|
|
417
|
-
if (
|
|
420
|
+
if (config.debug) {
|
|
418
421
|
console.log(`%c [Basis] Stable Callback: "${effectiveLabel}" `, "color: #2ecc71; font-weight: bold;");
|
|
419
422
|
}
|
|
420
423
|
}, [effectiveLabel]);
|
|
421
424
|
return (0, import_react.useCallback)(callback, actualDeps || []);
|
|
422
425
|
}
|
|
423
|
-
function
|
|
424
|
-
|
|
426
|
+
function useEffect(effect, depsOrLabel, label) {
|
|
427
|
+
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
428
|
+
const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
|
|
429
|
+
const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_effect";
|
|
430
|
+
(0, import_react.useEffect)(() => {
|
|
431
|
+
beginEffectTracking(effectiveLabel);
|
|
432
|
+
const cleanup = effect();
|
|
433
|
+
endEffectTracking();
|
|
434
|
+
return cleanup;
|
|
435
|
+
}, actualDeps);
|
|
425
436
|
}
|
|
426
437
|
function useLayoutEffect(effect, depsOrLabel, label) {
|
|
427
438
|
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
@@ -434,18 +445,6 @@ function useLayoutEffect(effect, depsOrLabel, label) {
|
|
|
434
445
|
return cleanup;
|
|
435
446
|
}, actualDeps);
|
|
436
447
|
}
|
|
437
|
-
function useContext(context) {
|
|
438
|
-
return (0, import_react.useContext)(context);
|
|
439
|
-
}
|
|
440
|
-
function useId(_label) {
|
|
441
|
-
return (0, import_react.useId)();
|
|
442
|
-
}
|
|
443
|
-
function useDebugValue(value, formatter, _label) {
|
|
444
|
-
return (0, import_react.useDebugValue)(value, formatter);
|
|
445
|
-
}
|
|
446
|
-
function useImperativeHandle(ref, init, deps, _label) {
|
|
447
|
-
return (0, import_react.useImperativeHandle)(ref, init, deps);
|
|
448
|
-
}
|
|
449
448
|
function useInsertionEffect(effect, deps, _label) {
|
|
450
449
|
return (0, import_react.useInsertionEffect)(effect, deps);
|
|
451
450
|
}
|
|
@@ -453,7 +452,7 @@ function useTransition(_label) {
|
|
|
453
452
|
const [isPending, startTransition] = (0, import_react.useTransition)();
|
|
454
453
|
const effectiveLabel = _label || "anonymous_transition";
|
|
455
454
|
const basisStartTransition = (callback) => {
|
|
456
|
-
if (
|
|
455
|
+
if (config.debug) {
|
|
457
456
|
console.log(`%c [Basis] Transition Started: "${effectiveLabel}" `, "color: #e67e22; font-weight: bold;");
|
|
458
457
|
}
|
|
459
458
|
startTransition(() => {
|
|
@@ -468,12 +467,34 @@ function useDeferredValue(value, initialValueOrLabel, label) {
|
|
|
468
467
|
const effectiveLabel = isLabelAsSecondArg ? initialValueOrLabel : label || "anonymous_deferred";
|
|
469
468
|
const deferredValue = (0, import_react.useDeferredValue)(value, actualInitialValue);
|
|
470
469
|
(0, import_react.useEffect)(() => {
|
|
471
|
-
if (
|
|
470
|
+
if (config.debug && value !== deferredValue) {
|
|
472
471
|
console.log(`%c [Basis] Value Deferred: "${effectiveLabel}" `, "color: #e67e22; font-weight: bold;");
|
|
473
472
|
}
|
|
474
473
|
}, [value, deferredValue, effectiveLabel]);
|
|
475
474
|
return deferredValue;
|
|
476
475
|
}
|
|
476
|
+
function useRef(initialValue, _label) {
|
|
477
|
+
return (0, import_react.useRef)(initialValue);
|
|
478
|
+
}
|
|
479
|
+
function createContext(defaultValue, label) {
|
|
480
|
+
const context = (0, import_react.createContext)(defaultValue);
|
|
481
|
+
if (label) {
|
|
482
|
+
context._basis_label = label;
|
|
483
|
+
}
|
|
484
|
+
return context;
|
|
485
|
+
}
|
|
486
|
+
function useContext(context) {
|
|
487
|
+
return (0, import_react.useContext)(context);
|
|
488
|
+
}
|
|
489
|
+
function useId(_label) {
|
|
490
|
+
return (0, import_react.useId)();
|
|
491
|
+
}
|
|
492
|
+
function useDebugValue(value, formatter, _label) {
|
|
493
|
+
return (0, import_react.useDebugValue)(value, formatter);
|
|
494
|
+
}
|
|
495
|
+
function useImperativeHandle(ref, init, deps, _label) {
|
|
496
|
+
return (0, import_react.useImperativeHandle)(ref, init, deps);
|
|
497
|
+
}
|
|
477
498
|
function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot, _label) {
|
|
478
499
|
return (0, import_react.useSyncExternalStore)(subscribe, getSnapshot, getServerSnapshot);
|
|
479
500
|
}
|
|
@@ -493,9 +514,12 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
493
514
|
var BasisContext = (0, import_react2.createContext)({ debug: false });
|
|
494
515
|
var isWeb2 = typeof window !== "undefined" && typeof window.document !== "undefined";
|
|
495
516
|
var BasisProvider = ({ children, debug = true }) => {
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
517
|
+
(0, import_react2.useLayoutEffect)(() => {
|
|
518
|
+
configureBasis({ debug });
|
|
519
|
+
if (isWeb2) {
|
|
520
|
+
window._basis_debug = debug;
|
|
521
|
+
}
|
|
522
|
+
}, [debug]);
|
|
499
523
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(BasisContext.Provider, { value: { debug }, children: [
|
|
500
524
|
children,
|
|
501
525
|
debug && isWeb2 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: {
|
|
@@ -521,6 +545,8 @@ var useBasisConfig = () => (0, import_react2.useContext)(BasisContext);
|
|
|
521
545
|
__testEngine__,
|
|
522
546
|
__test__,
|
|
523
547
|
beginEffectTracking,
|
|
548
|
+
config,
|
|
549
|
+
configureBasis,
|
|
524
550
|
createContext,
|
|
525
551
|
currentTickBatch,
|
|
526
552
|
endEffectTracking,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core/logger.ts","../src/core/math.ts","../src/core/constants.ts","../src/engine.ts","../src/hooks.ts","../src/context.tsx"],"sourcesContent":["// src/index.ts\n\nexport * from './engine';\nexport * from './hooks';\nexport * from './context';\nexport type { \n ReactNode, \n ReactElement, \n FC, \n PropsWithChildren, \n Context,\n Dispatch,\n SetStateAction,\n Reducer,\n CSSProperties\n} from 'react';","// src/core/logger.ts\n\nconst isWeb = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\nconst STYLES = {\n basis: \"background: #6c5ce7; color: white; font-weight: bold; padding: 2px 6px; border-radius: 3px;\",\n version: \"background: #a29bfe; color: #2d3436; padding: 2px 6px; border-radius: 3px; margin-left: -4px;\",\n\n headerRed: \"background: #d63031; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerBlue: \"background: #0984e3; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerGreen: \"background: #00b894; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n\n label: \"background: #dfe6e9; color: #2d3436; padding: 0 4px; border-radius: 3px; font-family: monospace; font-weight: bold; border: 1px solid #b2bec3;\",\n location: \"color: #0984e3; font-family: monospace; font-weight: bold;\",\n math: \"color: #636e72; font-style: italic; font-family: serif;\",\n\n codeBlock: `\n background: #1e1e1e; \n color: #9cdcfe; \n padding: 8px 12px; \n display: block; \n margin: 4px 0; \n border-left: 3px solid #00b894; \n font-family: 'Fira Code', monospace; \n line-height: 1.4; \n border-radius: 0 3px 3px 0;\n `,\n\n dim: \"color: #e84393; font-weight: bold;\",\n bold: \"font-weight: bold;\"\n};\n\nconst parseLabel = (label: string) => {\n const parts = label.split(' -> ');\n return {\n file: parts[0] || \"Unknown\",\n name: parts[1] || label\n };\n};\n\nconst logBasis = (message: string, ...styles: string[]) => {\n if (isWeb) {\n console.log(message, ...styles);\n } else {\n console.log(message.replace(/%c/g, ''));\n }\n};\n\nexport const displayBootLog = (windowSize: number) => {\n logBasis(\n `%cBasis%cAuditor v0.1.4%c Monitoring State Space | Window: ${windowSize} ticks`,\n STYLES.basis,\n STYLES.version,\n \"color: #636e72; font-style: italic; margin-left: 8px;\"\n );\n};\n\nexport const displayRedundancyAlert = (labelA: string, labelB: string, sim: number, totalDimensions: number) => {\n const infoA = parseLabel(labelA);\n const infoB = parseLabel(labelB);\n const isCrossFile = infoA.file !== infoB.file;\n\n if (isWeb) {\n console.group(`%c 📐 BASIS | DIMENSION COLLAPSE DETECTED `, STYLES.headerRed);\n console.log(`%c📍 Location: %c${isCrossFile ? `${infoA.file} & ${infoB.file}` : infoA.file}`, STYLES.bold, STYLES.location);\n console.log(\n `%cAnalysis:%c Vectors %c${infoA.name}%c and %c${infoB.name}%c are collinear (redundant).`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\"\n );\n console.log(\n `%cHow to fix:%c Project %c${infoB.name}%c as a derived value:\n%c// 🛠️ Basis Fix: Remove useState, use useMemo\nconst ${infoB.name} = useMemo(() => deriveFrom(${infoA.name}), [${infoA.name}]);%c`,\n \"color: #00b894; font-weight: bold;\", \"\",\n \"color: #e84393; font-weight: bold;\", \"\",\n STYLES.codeBlock, \"\"\n );\n console.groupCollapsed(`%c 🔬 Proof Details `, \"color: #636e72; font-size: 10px; cursor: pointer;\");\n console.table({\n \"Similarity\": `${(sim * 100).toFixed(2)}%`,\n \"Linear Dependency\": \"TRUE\",\n \"Rank\": totalDimensions - 1\n });\n console.groupEnd();\n console.groupEnd();\n } else {\n console.log(`[BASIS] REDUNDANCY DETECTED: ${infoA.name} <-> ${infoB.name} (${(sim * 100).toFixed(0)}% similarity)`);\n console.log(`Location: ${isCrossFile ? `${infoA.file} & ${infoB.file}` : infoA.file}`);\n }\n};\n\nexport const displayCausalHint = (targetLabel: string, sourceLabel: string) => {\n const target = parseLabel(targetLabel);\n const source = parseLabel(sourceLabel);\n\n const isCrossFile = target.file !== source.file;\n const locationPath = isCrossFile\n ? `${source.file} ➔ ${target.file}`\n : target.file;\n\n if (isWeb) {\n console.groupCollapsed(`%c 💡 BASIS | CAUSALITY (Sequential Update) `, STYLES.headerBlue);\n console.log(`%c📍 Location: %c${locationPath}`, STYLES.bold, STYLES.location);\n console.log(\n `%cSequence:%c %c${source.name}%c ➔ Effect ➔ %c${target.name}%c`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\"\n );\n console.log(\n `%cObservation:%c Variable %c${target.name}%c is being manually synchronized. This creates a %c\"Double Render Cycle\"%c.`,\n STYLES.bold, \"\", STYLES.label, \"\", \"color: #d63031; font-weight: bold;\", \"\"\n );\n console.groupEnd();\n } else {\n console.log(`[BASIS] CAUSALITY: ${source.name} ➔ ${target.name} (Double Render Cycle)`);\n }\n};\n\nexport const displayInfiniteLoop = (label: string) => {\n const info = parseLabel(label);\n if (isWeb) {\n console.group(`%c 🛑 BASIS CRITICAL | CIRCUIT BREAKER `, STYLES.headerRed);\n console.error(\n `Infinite oscillation detected on: %c${info.name}%c\\nExecution halted to prevent browser thread lock.`,\n \"color: white; background: #d63031; padding: 2px 4px; border-radius: 3px;\", \"\"\n );\n console.groupEnd();\n } else {\n console.log(`[BASIS CRITICAL] INFINITE LOOP ON: ${info.name}. Execution halted.`);\n }\n};\n\nexport const displayHealthReport = (\n history: Map<string, number[]>,\n similarityFn: (A: number[], B: number[]) => number,\n threshold: number\n) => {\n const entries = Array.from(history.entries());\n const totalVars = entries.length;\n if (totalVars === 0) return;\n\n const clusters: string[][] = [];\n const processed = new Set<string>();\n let independentCount = 0;\n\n entries.forEach(([labelA, vecA]) => {\n if (processed.has(labelA)) return;\n const currentCluster = [labelA];\n processed.add(labelA);\n entries.forEach(([labelB, vecB]) => {\n if (labelA === labelB || processed.has(labelB)) return;\n const sim = similarityFn(vecA, vecB);\n if (sim > threshold) {\n currentCluster.push(labelB);\n processed.add(labelB);\n }\n });\n if (currentCluster.length > 1) {\n clusters.push(currentCluster);\n } else {\n independentCount++;\n }\n });\n\n const systemRank = independentCount + clusters.length;\n const efficiency = (systemRank / totalVars) * 100;\n\n if (isWeb) {\n console.group(`%c 📊 BASIS | SYSTEM HEALTH REPORT `, STYLES.headerGreen);\n console.log(\n `%cBasis Efficiency: %c${efficiency.toFixed(1)}% %c(Rank: ${systemRank}/${totalVars})`,\n STYLES.bold,\n `color: ${efficiency > 85 ? '#00b894' : '#d63031'}; font-size: 16px; font-weight: bold;`,\n \"color: #636e72; font-style: italic;\"\n );\n\n if (clusters.length > 0) {\n console.log(`%cDetected ${clusters.length} Redundancy Clusters:`, \"font-weight: bold; color: #e17055; margin-top: 10px;\");\n clusters.forEach((cluster, idx) => {\n const names = cluster.map(l => parseLabel(l).name).join(' ⟷ ');\n console.log(` %c${idx + 1}%c ${names}`, \"background: #e17055; color: white; border-radius: 50%; padding: 0 5px;\", \"font-family: monospace;\");\n });\n } else {\n console.log(\"%c✨ All state variables are linearly independent. Your Basis is optimal.\", \"color: #00b894; font-weight: bold; margin-top: 10px;\");\n }\n\n if (totalVars > 0 && totalVars < 15) {\n console.groupCollapsed(\"%cView Full Correlation Matrix\", \"color: #636e72; font-size: 11px;\");\n const matrix: any = {};\n entries.forEach(([labelA]) => {\n const nameA = parseLabel(labelA).name;\n matrix[nameA] = {};\n entries.forEach(([labelB]) => {\n const nameB = parseLabel(labelB).name;\n const sim = similarityFn(history.get(labelA)!, history.get(labelB)!);\n matrix[nameA][nameB] = sim > threshold ? `❌ ${(sim * 100).toFixed(0)}%` : `✅`;\n });\n });\n console.table(matrix);\n console.groupEnd();\n }\n console.groupEnd();\n } else {\n console.log(`[BASIS HEALTH] Efficiency: ${efficiency.toFixed(1)}% (Rank: ${systemRank}/${totalVars})`);\n if (clusters.length > 0) {\n console.log(`Redundancy Clusters: ${clusters.length}`);\n }\n }\n};","// src/core/math.ts\n\nexport const calculateCosineSimilarity = (A: number[], B: number[]): number => {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < A.length; i++) {\n dot += A[i] * B[i];\n magA += A[i] * A[i];\n magB += B[i] * B[i];\n }\n return magA && magB ? dot / (Math.sqrt(magA) * Math.sqrt(magB)) : 0;\n};","// src/core/constants.ts\n\nexport const WINDOW_SIZE = 50;\nexport const SIMILARITY_THRESHOLD = 0.88;\nexport const LOOP_THRESHOLD = 25;\nexport const LOOP_WINDOW_MS = 500;\nexport const ANALYSIS_INTERVAL = 5;","// src/engine.ts\n\nimport * as UI from './core/logger';\nimport { calculateCosineSimilarity } from './core/math';\nimport { \n WINDOW_SIZE, \n SIMILARITY_THRESHOLD, \n LOOP_THRESHOLD, \n LOOP_WINDOW_MS, \n ANALYSIS_INTERVAL \n} from './core/constants';\n\nexport const history = new Map<string, number[]>();\nexport const currentTickBatch = new Set<string>();\nlet updateLog: { label: string; ts: number }[] = [];\nlet currentEffectSource: string | null = null; \nlet tick = 0;\nlet isBatching = false;\n\nUI.displayBootLog(WINDOW_SIZE);\n\nconst analyzeBasis = () => {\n const entries = Array.from(history.entries());\n if (entries.length < 2) return;\n\n entries.forEach(([labelA, vecA], i) => {\n entries.slice(i + 1).forEach(([labelB, vecB]) => {\n const sim = calculateCosineSimilarity(vecA, vecB);\n \n if (sim > SIMILARITY_THRESHOLD) {\n UI.displayRedundancyAlert(labelA, labelB, sim, history.size);\n }\n });\n });\n};\n\nexport const printBasisHealthReport = (threshold = 0.5) => {\n UI.displayHealthReport(history, calculateCosineSimilarity, threshold);\n};\n\nexport const beginEffectTracking = (label: string) => { currentEffectSource = label; };\nexport const endEffectTracking = () => { currentEffectSource = null; };\n\nexport const registerVariable = (label: string) => {\n if (!history.has(label)) {\n history.set(label, new Array(WINDOW_SIZE).fill(0));\n }\n};\n\nexport const unregisterVariable = (label: string) => {\n history.delete(label);\n};\n\nexport const recordUpdate = (label: string): boolean => {\n const now = Date.now();\n\n updateLog.push({ label, ts: now });\n updateLog = updateLog.filter(e => now - e.ts < LOOP_WINDOW_MS);\n if (updateLog.filter(e => e.label === label).length > LOOP_THRESHOLD) {\n UI.displayInfiniteLoop(label);\n return false;\n }\n\n if (currentEffectSource && currentEffectSource !== label) {\n UI.displayCausalHint(label, currentEffectSource);\n }\n\n currentTickBatch.add(label);\n\n if (!isBatching) {\n isBatching = true;\n setTimeout(() => {\n tick++;\n history.forEach((vec, l) => {\n vec.shift();\n vec.push(currentTickBatch.has(l) ? 1 : 0);\n });\n\n currentTickBatch.clear();\n isBatching = false;\n \n if (tick % ANALYSIS_INTERVAL === 0) {\n analyzeBasis();\n }\n }, 20);\n }\n\n return true;\n};\n\nif (typeof window !== 'undefined') {\n (window as any).printBasisReport = printBasisHealthReport;\n}\n\nexport const __testEngine__ = {\n history,\n currentTickBatch,\n registerVariable,\n recordUpdate,\n printBasisHealthReport,\n beginEffectTracking,\n endEffectTracking,\n};","// src/hooks.ts\n\nimport {\n useState as reactUseState,\n useEffect as reactUseEffect,\n useMemo as reactUseMemo,\n useReducer as reactUseReducer,\n useContext as reactUseContext,\n createContext as reactCreateContext,\n useRef as reactUseRef,\n useLayoutEffect as reactUseLayoutEffect,\n useCallback as reactUseCallback,\n useId as reactUseId,\n useDebugValue as reactUseDebugValue,\n useImperativeHandle as reactUseImperativeHandle,\n useInsertionEffect as reactUseInsertionEffect,\n useSyncExternalStore as reactUseSyncExternalStore,\n useTransition as reactUseTransition, \n useDeferredValue as reactUseDeferredValue \n} from 'react';\n\nimport type {\n Reducer,\n Context,\n Dispatch,\n SetStateAction,\n DependencyList,\n EffectCallback\n} from 'react';\n\nimport {\n registerVariable,\n unregisterVariable,\n recordUpdate,\n beginEffectTracking,\n endEffectTracking\n} from './engine';\n\nimport * as engine from './engine';\n\nexport type {\n ReactNode,\n FC,\n PropsWithChildren,\n Context,\n ReactElement,\n Dispatch,\n SetStateAction,\n Reducer,\n CSSProperties,\n EffectCallback,\n DependencyList\n} from 'react';\n\nexport function useState<T>(initialValue: T, label?: string): [T, Dispatch<SetStateAction<T>>] {\n const [val, setVal] = reactUseState(initialValue);\n const effectiveLabel = label || 'anonymous_state';\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const setter = useCallback((newValue: SetStateAction<T>) => {\n if (recordUpdate(effectiveLabel)) {\n setVal(newValue);\n }\n }, [effectiveLabel]);\n\n return [val, setter];\n}\n\nexport function useMemo<T>(factory: () => T, depsOrLabel?: DependencyList | string, label?: string): T {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n\n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_projection');\n\n reactUseEffect(() => {\n if ((window as any)._basis_debug !== false) {\n console.log(`%c [Basis] Valid Projection: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\");\n }\n }, [effectiveLabel]);\n\n return reactUseMemo(factory, actualDeps || []);\n}\n\nexport function useEffect(effect: EffectCallback, depsOrLabel?: DependencyList | string, label?: string) {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n\n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_effect');\n\n reactUseEffect(() => {\n beginEffectTracking(effectiveLabel);\n const cleanup = effect();\n endEffectTracking();\n return cleanup;\n }, actualDeps);\n}\n\nexport function useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: I & S,\n init?: any,\n label?: string\n): [S, Dispatch<A>] {\n\n const effectiveLabel = typeof init === 'string' ? init : (label || 'anonymous_reducer');\n\n const reactInit = typeof init === 'function' ? init : undefined;\n\n const [state, dispatch] = reactUseReducer(reducer, initialArg, reactInit);\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const basisDispatch = useCallback((action: A) => {\n if (recordUpdate(effectiveLabel)) {\n dispatch(action);\n }\n }, [effectiveLabel]);\n\n return [state, basisDispatch];\n}\n\nexport function createContext<T>(defaultValue: T, label?: string): Context<T> {\n const context = reactCreateContext(defaultValue);\n if (label) {\n (context as any)._basis_label = label;\n }\n return context;\n}\n\nexport function useCallback<T extends (...args: any[]) => any>(\n callback: T,\n depsOrLabel?: DependencyList | string,\n label?: string\n): T {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_callback');\n\n reactUseEffect(() => {\n if ((window as any)._basis_debug !== false) {\n console.log(`%c [Basis] Stable Callback: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\");\n }\n }, [effectiveLabel]);\n\n return reactUseCallback(callback, actualDeps || []);\n}\n\nexport function useRef<T>(initialValue: T, _label?: string) {\n return reactUseRef(initialValue);\n}\n\nexport function useLayoutEffect(effect: EffectCallback, depsOrLabel?: DependencyList | string, label?: string) {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n\n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_layout_effect');\n\n reactUseLayoutEffect(() => {\n beginEffectTracking(effectiveLabel);\n const cleanup = effect();\n endEffectTracking();\n return cleanup;\n }, actualDeps);\n}\n\nexport function useContext<T>(context: Context<T>): T {\n return reactUseContext(context);\n}\n\nexport function useId(_label?: string): string {\n return reactUseId();\n}\n\nexport function useDebugValue<T>(value: T, formatter?: (value: T) => any, _label?: string): void {\n return reactUseDebugValue(value, formatter);\n}\n\nexport function useImperativeHandle<T, R extends T>(\n ref: React.Ref<T> | undefined,\n init: () => R,\n deps?: DependencyList,\n _label?: string\n): void {\n return reactUseImperativeHandle(ref, init, deps);\n}\n\nexport function useInsertionEffect(\n effect: EffectCallback,\n deps?: DependencyList,\n _label?: string\n): void {\n return reactUseInsertionEffect(effect, deps);\n}\n\nexport function useTransition(_label?: string): [boolean, (callback: () => void) => void] {\n const [isPending, startTransition] = reactUseTransition();\n const effectiveLabel = _label || 'anonymous_transition';\n\n const basisStartTransition = (callback: () => void) => {\n if ((window as any)._basis_debug !== false) {\n console.log(`%c [Basis] Transition Started: \"${effectiveLabel}\" `, \"color: #e67e22; font-weight: bold;\");\n }\n \n startTransition(() => {\n callback();\n });\n };\n\n return [isPending, basisStartTransition];\n}\n\nexport function useDeferredValue<T>(value: T, initialValueOrLabel?: T | string, label?: string): T {\n const isLabelAsSecondArg = typeof initialValueOrLabel === 'string' && label === undefined;\n \n const actualInitialValue = isLabelAsSecondArg ? undefined : initialValueOrLabel as T;\n const effectiveLabel = isLabelAsSecondArg ? (initialValueOrLabel as string) : (label || 'anonymous_deferred');\n\n const deferredValue = reactUseDeferredValue(value, actualInitialValue);\n\n reactUseEffect(() => {\n if ((window as any)._basis_debug !== false && value !== deferredValue) {\n console.log(`%c [Basis] Value Deferred: \"${effectiveLabel}\" `, \"color: #e67e22; font-weight: bold;\");\n }\n }, [value, deferredValue, effectiveLabel]);\n\n return deferredValue;\n}\n\nexport function useSyncExternalStore<Snapshot>(\n subscribe: (onStoreChange: () => void) => () => void,\n getSnapshot: () => Snapshot,\n getServerSnapshot?: () => Snapshot,\n _label?: string\n): Snapshot {\n return reactUseSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n\nexport const __test__ = {\n registerVariable,\n unregisterVariable,\n recordUpdate,\n beginEffectTracking,\n endEffectTracking,\n history: (engine as any).history,\n currentTickBatch: (engine as any).currentTickBatch\n};","// src/context.tsx\nimport React, { createContext, useContext, ReactNode } from 'react';\n\nconst BasisContext = createContext({ debug: false });\n\nconst isWeb = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\ninterface BasisProviderProps {\n children: ReactNode;\n debug?: boolean;\n}\n\nexport const BasisProvider: React.FC<BasisProviderProps> = ({ children, debug = true }) => {\n if (isWeb) {\n (window as any)._basis_debug = debug;\n }\n\n return (\n <BasisContext.Provider value={{ debug }}>\n {children}\n {(debug && isWeb) && (\n <div style={{ \n position: 'fixed', bottom: 10, right: 10, background: 'black', color: '#0f0', \n padding: '5px 10px', fontSize: '10px', fontFamily: 'monospace', \n border: '1px solid #0f0', zIndex: 99999, borderRadius: '4px', pointerEvents: 'none'\n }}>\n BASIS_ENGINE: ACTIVE\n </div>\n )}\n </BasisContext.Provider>\n );\n};\n\nexport const useBasisConfig = () => useContext(BasisContext);"],"mappings":"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","names":["history","reactUseState","reactUseEffect","reactUseMemo","reactUseReducer","reactCreateContext","reactUseCallback","reactUseRef","reactUseLayoutEffect","reactUseContext","reactUseId","reactUseDebugValue","reactUseImperativeHandle","reactUseInsertionEffect","reactUseTransition","reactUseDeferredValue","reactUseSyncExternalStore","import_react","isWeb"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core/logger.ts","../src/core/math.ts","../src/core/constants.ts","../src/engine.ts","../src/hooks.ts","../src/context.tsx"],"sourcesContent":["// src/index.ts\n\nexport * from './engine';\nexport * from './hooks';\nexport * from './context';\nexport type { \n ReactNode, \n ReactElement, \n FC, \n PropsWithChildren, \n Context,\n Dispatch,\n SetStateAction,\n Reducer,\n CSSProperties\n} from 'react';","// src/core/logger.ts\n\nconst isWeb = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\nconst STYLES = {\n basis: \"background: #6c5ce7; color: white; font-weight: bold; padding: 2px 6px; border-radius: 3px;\",\n version: \"background: #a29bfe; color: #2d3436; padding: 2px 6px; border-radius: 3px; margin-left: -4px;\",\n\n headerRed: \"background: #d63031; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerBlue: \"background: #0984e3; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerGreen: \"background: #00b894; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n\n label: \"background: #dfe6e9; color: #2d3436; padding: 0 4px; border-radius: 3px; font-family: monospace; font-weight: bold; border: 1px solid #b2bec3;\",\n location: \"color: #0984e3; font-family: monospace; font-weight: bold;\",\n math: \"color: #636e72; font-style: italic; font-family: serif;\",\n\n codeBlock: `\n background: #1e1e1e; \n color: #9cdcfe; \n padding: 8px 12px; \n display: block; \n margin: 4px 0; \n border-left: 3px solid #00b894; \n font-family: 'Fira Code', monospace; \n line-height: 1.4; \n border-radius: 0 3px 3px 0;\n `,\n\n dim: \"color: #e84393; font-weight: bold;\",\n bold: \"font-weight: bold;\"\n};\n\nconst parseLabel = (label: string) => {\n const parts = label.split(' -> ');\n return {\n file: parts[0] || \"Unknown\",\n name: parts[1] || label\n };\n};\n\nconst logBasis = (message: string, ...styles: string[]) => {\n if (isWeb) {\n console.log(message, ...styles);\n } else {\n console.log(message.replace(/%c/g, ''));\n }\n};\n\nexport const displayBootLog = (windowSize: number) => {\n logBasis(\n `%cBasis%cAuditor v0.1.4%c Monitoring State Space | Window: ${windowSize} ticks`,\n STYLES.basis,\n STYLES.version,\n \"color: #636e72; font-style: italic; margin-left: 8px;\"\n );\n};\n\nexport const displayRedundancyAlert = (labelA: string, labelB: string, sim: number, totalDimensions: number) => {\n const infoA = parseLabel(labelA);\n const infoB = parseLabel(labelB);\n const isCrossFile = infoA.file !== infoB.file;\n\n if (isWeb) {\n console.group(`%c 📐 BASIS | DIMENSION COLLAPSE DETECTED `, STYLES.headerRed);\n console.log(`%c📍 Location: %c${isCrossFile ? `${infoA.file} & ${infoB.file}` : infoA.file}`, STYLES.bold, STYLES.location);\n console.log(\n `%cAnalysis:%c Vectors %c${infoA.name}%c and %c${infoB.name}%c are collinear (redundant).`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\"\n );\n console.log(\n `%cHow to fix:%c Project %c${infoB.name}%c as a derived value:\n%c// 🛠️ Basis Fix: Remove useState, use useMemo\nconst ${infoB.name} = useMemo(() => deriveFrom(${infoA.name}), [${infoA.name}]);%c`,\n \"color: #00b894; font-weight: bold;\", \"\",\n \"color: #e84393; font-weight: bold;\", \"\",\n STYLES.codeBlock, \"\"\n );\n console.groupCollapsed(`%c 🔬 Proof Details `, \"color: #636e72; font-size: 10px; cursor: pointer;\");\n console.table({\n \"Similarity\": `${(sim * 100).toFixed(2)}%`,\n \"Linear Dependency\": \"TRUE\",\n \"Rank\": totalDimensions - 1\n });\n console.groupEnd();\n console.groupEnd();\n } else {\n console.log(`[BASIS] REDUNDANCY DETECTED: ${infoA.name} <-> ${infoB.name} (${(sim * 100).toFixed(0)}% similarity)`);\n console.log(`Location: ${isCrossFile ? `${infoA.file} & ${infoB.file}` : infoA.file}`);\n }\n};\n\nexport const displayCausalHint = (targetLabel: string, sourceLabel: string) => {\n const target = parseLabel(targetLabel);\n const source = parseLabel(sourceLabel);\n\n const isCrossFile = target.file !== source.file;\n const locationPath = isCrossFile\n ? `${source.file} ➔ ${target.file}`\n : target.file;\n\n if (isWeb) {\n console.groupCollapsed(`%c 💡 BASIS | CAUSALITY (Sequential Update) `, STYLES.headerBlue);\n console.log(`%c📍 Location: %c${locationPath}`, STYLES.bold, STYLES.location);\n console.log(\n `%cSequence:%c %c${source.name}%c ➔ Effect ➔ %c${target.name}%c`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\"\n );\n console.log(\n `%cObservation:%c Variable %c${target.name}%c is being manually synchronized. This creates a %c\"Double Render Cycle\"%c.`,\n STYLES.bold, \"\", STYLES.label, \"\", \"color: #d63031; font-weight: bold;\", \"\"\n );\n console.groupEnd();\n } else {\n console.log(`[BASIS] CAUSALITY: ${source.name} ➔ ${target.name} (Double Render Cycle)`);\n }\n};\n\nexport const displayInfiniteLoop = (label: string) => {\n const info = parseLabel(label);\n if (isWeb) {\n console.group(`%c 🛑 BASIS CRITICAL | CIRCUIT BREAKER `, STYLES.headerRed);\n console.error(\n `Infinite oscillation detected on: %c${info.name}%c\\nExecution halted to prevent browser thread lock.`,\n \"color: white; background: #d63031; padding: 2px 4px; border-radius: 3px;\", \"\"\n );\n console.groupEnd();\n } else {\n console.log(`[BASIS CRITICAL] INFINITE LOOP ON: ${info.name}. Execution halted.`);\n }\n};\n\nexport const displayHealthReport = (\n history: Map<string, number[]>,\n similarityFn: (A: number[], B: number[]) => number,\n threshold: number\n) => {\n const entries = Array.from(history.entries());\n const totalVars = entries.length;\n if (totalVars === 0) return;\n\n const clusters: string[][] = [];\n const processed = new Set<string>();\n let independentCount = 0;\n\n entries.forEach(([labelA, vecA]) => {\n if (processed.has(labelA)) return;\n const currentCluster = [labelA];\n processed.add(labelA);\n entries.forEach(([labelB, vecB]) => {\n if (labelA === labelB || processed.has(labelB)) return;\n const sim = similarityFn(vecA, vecB);\n if (sim > threshold) {\n currentCluster.push(labelB);\n processed.add(labelB);\n }\n });\n if (currentCluster.length > 1) {\n clusters.push(currentCluster);\n } else {\n independentCount++;\n }\n });\n\n const systemRank = independentCount + clusters.length;\n const efficiency = (systemRank / totalVars) * 100;\n\n if (isWeb) {\n console.group(`%c 📊 BASIS | SYSTEM HEALTH REPORT `, STYLES.headerGreen);\n console.log(\n `%cBasis Efficiency: %c${efficiency.toFixed(1)}% %c(Rank: ${systemRank}/${totalVars})`,\n STYLES.bold,\n `color: ${efficiency > 85 ? '#00b894' : '#d63031'}; font-size: 16px; font-weight: bold;`,\n \"color: #636e72; font-style: italic;\"\n );\n\n if (clusters.length > 0) {\n console.log(`%cDetected ${clusters.length} Redundancy Clusters:`, \"font-weight: bold; color: #e17055; margin-top: 10px;\");\n clusters.forEach((cluster, idx) => {\n const names = cluster.map(l => parseLabel(l).name).join(' ⟷ ');\n console.log(` %c${idx + 1}%c ${names}`, \"background: #e17055; color: white; border-radius: 50%; padding: 0 5px;\", \"font-family: monospace;\");\n });\n } else {\n console.log(\"%c✨ All state variables are linearly independent. Your Basis is optimal.\", \"color: #00b894; font-weight: bold; margin-top: 10px;\");\n }\n\n if (totalVars > 0 && totalVars < 15) {\n console.groupCollapsed(\"%cView Full Correlation Matrix\", \"color: #636e72; font-size: 11px;\");\n const matrix: any = {};\n entries.forEach(([labelA]) => {\n const nameA = parseLabel(labelA).name;\n matrix[nameA] = {};\n entries.forEach(([labelB]) => {\n const nameB = parseLabel(labelB).name;\n const sim = similarityFn(history.get(labelA)!, history.get(labelB)!);\n matrix[nameA][nameB] = sim > threshold ? `❌ ${(sim * 100).toFixed(0)}%` : `✅`;\n });\n });\n console.table(matrix);\n console.groupEnd();\n }\n console.groupEnd();\n } else {\n console.log(`[BASIS HEALTH] Efficiency: ${efficiency.toFixed(1)}% (Rank: ${systemRank}/${totalVars})`);\n if (clusters.length > 0) {\n console.log(`Redundancy Clusters: ${clusters.length}`);\n }\n }\n};","// src/core/math.ts\n\nexport const calculateCosineSimilarity = (A: number[], B: number[]): number => {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < A.length; i++) {\n dot += A[i] * B[i];\n magA += A[i] * A[i];\n magB += B[i] * B[i];\n }\n return magA && magB ? dot / (Math.sqrt(magA) * Math.sqrt(magB)) : 0;\n};","// src/core/constants.ts\n\nexport const WINDOW_SIZE = 50;\nexport const SIMILARITY_THRESHOLD = 0.88;\nexport const LOOP_THRESHOLD = 25;\nexport const LOOP_WINDOW_MS = 500;\nexport const ANALYSIS_INTERVAL = 5;","// src/engine.ts\n\nimport * as UI from './core/logger';\nimport { calculateCosineSimilarity } from './core/math';\nimport { \n WINDOW_SIZE, \n SIMILARITY_THRESHOLD, \n LOOP_THRESHOLD, \n LOOP_WINDOW_MS, \n ANALYSIS_INTERVAL \n} from './core/constants';\n\nexport interface BasisConfig {\n debug: boolean;\n}\n\nexport let config: BasisConfig = {\n debug: false,\n};\n\nlet booted = false;\n\nexport const configureBasis = (newConfig: Partial<BasisConfig>) => {\n config = { ...config, ...newConfig };\n\n if (config.debug && !booted) {\n UI.displayBootLog(WINDOW_SIZE);\n booted = true;\n }\n};\n\nexport const history = new Map<string, number[]>();\nexport const currentTickBatch = new Set<string>();\nlet updateLog: { label: string; ts: number }[] = [];\nlet currentEffectSource: string | null = null; \nlet tick = 0;\nlet isBatching = false;\n\nconst analyzeBasis = () => {\n if (!config.debug) return;\n\n const entries = Array.from(history.entries());\n if (entries.length < 2) return;\n\n entries.forEach(([labelA, vecA], i) => {\n entries.slice(i + 1).forEach(([labelB, vecB]) => {\n const sim = calculateCosineSimilarity(vecA, vecB);\n \n if (sim > SIMILARITY_THRESHOLD) {\n UI.displayRedundancyAlert(labelA, labelB, sim, history.size);\n }\n });\n });\n};\n\nexport const printBasisHealthReport = (threshold = 0.5) => {\n if (!config.debug) {\n console.warn(\"[Basis] Cannot generate report. Debug mode is OFF.\");\n return;\n }\n UI.displayHealthReport(history, calculateCosineSimilarity, threshold);\n};\n\nexport const beginEffectTracking = (label: string) => { currentEffectSource = label; };\nexport const endEffectTracking = () => { currentEffectSource = null; };\n\nexport const registerVariable = (label: string) => {\n if (!config.debug) return; \n\n if (!history.has(label)) {\n history.set(label, new Array(WINDOW_SIZE).fill(0));\n }\n};\n\nexport const unregisterVariable = (label: string) => {\n history.delete(label);\n};\n\nexport const recordUpdate = (label: string): boolean => {\n if (!config.debug) return true;\n\n const now = Date.now();\n\n updateLog.push({ label, ts: now });\n updateLog = updateLog.filter(e => now - e.ts < LOOP_WINDOW_MS);\n if (updateLog.filter(e => e.label === label).length > LOOP_THRESHOLD) {\n UI.displayInfiniteLoop(label);\n return false;\n }\n\n if (currentEffectSource && currentEffectSource !== label) {\n UI.displayCausalHint(label, currentEffectSource);\n }\n\n currentTickBatch.add(label);\n\n if (!isBatching) {\n isBatching = true;\n setTimeout(() => {\n tick++;\n history.forEach((vec, l) => {\n vec.shift();\n vec.push(currentTickBatch.has(l) ? 1 : 0);\n });\n\n currentTickBatch.clear();\n isBatching = false;\n \n if (tick % ANALYSIS_INTERVAL === 0) {\n analyzeBasis();\n }\n }, 20);\n }\n\n return true;\n};\n\nif (typeof window !== 'undefined') {\n (window as any).printBasisReport = printBasisHealthReport;\n}\n\nexport const __testEngine__ = {\n config,\n configureBasis,\n history,\n currentTickBatch,\n registerVariable,\n recordUpdate,\n printBasisHealthReport,\n beginEffectTracking,\n endEffectTracking,\n};","// src/hooks.ts\n\nimport {\n useState as reactUseState,\n useEffect as reactUseEffect,\n useMemo as reactUseMemo,\n useReducer as reactUseReducer,\n useContext as reactUseContext,\n createContext as reactCreateContext,\n useRef as reactUseRef,\n useLayoutEffect as reactUseLayoutEffect,\n useCallback as reactUseCallback,\n useId as reactUseId,\n useDebugValue as reactUseDebugValue,\n useImperativeHandle as reactUseImperativeHandle,\n useInsertionEffect as reactUseInsertionEffect,\n useSyncExternalStore as reactUseSyncExternalStore,\n useTransition as reactUseTransition, \n useDeferredValue as reactUseDeferredValue \n} from 'react';\n\nimport type {\n Reducer,\n Context,\n Dispatch,\n SetStateAction,\n DependencyList,\n EffectCallback\n} from 'react';\n\nimport {\n registerVariable,\n unregisterVariable,\n recordUpdate,\n beginEffectTracking,\n endEffectTracking,\n config\n} from './engine';\n\nimport * as engine from './engine';\n\nexport type {\n ReactNode,\n FC,\n PropsWithChildren,\n Context,\n ReactElement,\n Dispatch,\n SetStateAction,\n Reducer,\n CSSProperties,\n EffectCallback,\n DependencyList\n} from 'react';\n\n// --- STATE HOOKS ---\n\nexport function useState<T>(initialValue: T, label?: string): [T, Dispatch<SetStateAction<T>>] {\n const [val, setVal] = reactUseState(initialValue);\n const effectiveLabel = label || 'anonymous_state';\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const setter = reactUseCallback((newValue: SetStateAction<T>) => {\n if (recordUpdate(effectiveLabel)) {\n setVal(newValue);\n }\n }, [effectiveLabel]);\n\n return [val, setter];\n}\n\nexport function useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: I & S,\n init?: any,\n label?: string\n): [S, Dispatch<A>] {\n const effectiveLabel = typeof init === 'string' ? init : (label || 'anonymous_reducer');\n const reactInit = typeof init === 'function' ? init : undefined;\n\n const [state, dispatch] = reactUseReducer(reducer, initialArg, reactInit);\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const basisDispatch = reactUseCallback((action: A) => {\n if (recordUpdate(effectiveLabel)) {\n dispatch(action);\n }\n }, [effectiveLabel]);\n\n return [state, basisDispatch];\n}\n\n// --- MEMOIZATION & CALLBACKS ---\n\nexport function useMemo<T>(factory: () => T, depsOrLabel?: DependencyList | string, label?: string): T {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_projection');\n\n reactUseEffect(() => {\n if (config.debug) {\n console.log(`%c [Basis] Valid Projection: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\");\n }\n }, [effectiveLabel]);\n\n return reactUseMemo(factory, actualDeps || []);\n}\n\nexport function useCallback<T extends (...args: any[]) => any>(\n callback: T,\n depsOrLabel?: DependencyList | string,\n label?: string\n): T {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_callback');\n\n reactUseEffect(() => {\n if (config.debug) {\n console.log(`%c [Basis] Stable Callback: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\");\n }\n }, [effectiveLabel]);\n\n return reactUseCallback(callback, actualDeps || []);\n}\n\n// --- EFFECTS ---\n\nexport function useEffect(effect: EffectCallback, depsOrLabel?: DependencyList | string, label?: string) {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_effect');\n\n reactUseEffect(() => {\n beginEffectTracking(effectiveLabel);\n const cleanup = effect();\n endEffectTracking();\n return cleanup;\n }, actualDeps);\n}\n\nexport function useLayoutEffect(effect: EffectCallback, depsOrLabel?: DependencyList | string, label?: string) {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_layout_effect');\n\n reactUseLayoutEffect(() => {\n beginEffectTracking(effectiveLabel);\n const cleanup = effect();\n endEffectTracking();\n return cleanup;\n }, actualDeps);\n}\n\nexport function useInsertionEffect(effect: EffectCallback, deps?: DependencyList, _label?: string) {\n return reactUseInsertionEffect(effect, deps);\n}\n\n// --- CONCURRENT HOOKS ---\n\nexport function useTransition(_label?: string): [boolean, (callback: () => void) => void] {\n const [isPending, startTransition] = reactUseTransition();\n const effectiveLabel = _label || 'anonymous_transition';\n\n const basisStartTransition = (callback: () => void) => {\n if (config.debug) {\n console.log(`%c [Basis] Transition Started: \"${effectiveLabel}\" `, \"color: #e67e22; font-weight: bold;\");\n }\n startTransition(() => {\n callback();\n });\n };\n\n return [isPending, basisStartTransition];\n}\n\nexport function useDeferredValue<T>(value: T, initialValueOrLabel?: T | string, label?: string): T {\n const isLabelAsSecondArg = typeof initialValueOrLabel === 'string' && label === undefined;\n const actualInitialValue = isLabelAsSecondArg ? undefined : initialValueOrLabel as T;\n const effectiveLabel = isLabelAsSecondArg ? (initialValueOrLabel as string) : (label || 'anonymous_deferred');\n\n const deferredValue = reactUseDeferredValue(value, actualInitialValue);\n\n reactUseEffect(() => {\n if (config.debug && value !== deferredValue) {\n console.log(`%c [Basis] Value Deferred: \"${effectiveLabel}\" `, \"color: #e67e22; font-weight: bold;\");\n }\n }, [value, deferredValue, effectiveLabel]);\n\n return deferredValue;\n}\n\n// --- UTILITY & CONTEXT ---\n\nexport function useRef<T>(initialValue: T, _label?: string) {\n return reactUseRef(initialValue);\n}\n\nexport function createContext<T>(defaultValue: T, label?: string): Context<T> {\n const context = reactCreateContext(defaultValue);\n if (label) {\n (context as any)._basis_label = label;\n }\n return context;\n}\n\nexport function useContext<T>(context: Context<T>): T {\n return reactUseContext(context);\n}\n\nexport function useId(_label?: string): string {\n return reactUseId();\n}\n\nexport function useDebugValue<T>(value: T, formatter?: (value: T) => any, _label?: string): void {\n return reactUseDebugValue(value, formatter);\n}\n\nexport function useImperativeHandle<T, R extends T>(\n ref: React.Ref<T> | undefined,\n init: () => R,\n deps?: DependencyList,\n _label?: string\n): void {\n return reactUseImperativeHandle(ref, init, deps);\n}\n\nexport function useSyncExternalStore<Snapshot>(\n subscribe: (onStoreChange: () => void) => () => void,\n getSnapshot: () => Snapshot,\n getServerSnapshot?: () => Snapshot,\n _label?: string\n): Snapshot {\n return reactUseSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n\nexport const __test__ = {\n registerVariable,\n unregisterVariable,\n recordUpdate,\n beginEffectTracking,\n endEffectTracking,\n history: (engine as any).history,\n currentTickBatch: (engine as any).currentTickBatch\n};","// src/context.tsx\n\nimport React, { createContext, useContext, ReactNode, useEffect, useLayoutEffect } from 'react';\nimport { configureBasis } from './engine';\n\nconst BasisContext = createContext({ debug: false });\n\nconst isWeb = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\ninterface BasisProviderProps {\n children: ReactNode;\n debug?: boolean;\n}\n\nexport const BasisProvider: React.FC<BasisProviderProps> = ({ children, debug = true }) => {\n \n useLayoutEffect(() => {\n configureBasis({ debug });\n\n if (isWeb) {\n (window as any)._basis_debug = debug;\n }\n }, [debug]);\n\n return (\n <BasisContext.Provider value={{ debug }}>\n {children}\n \n {(debug && isWeb) && (\n <div style={{ \n position: 'fixed', bottom: 10, right: 10, background: 'black', color: '#0f0', \n padding: '5px 10px', fontSize: '10px', fontFamily: 'monospace', \n border: '1px solid #0f0', zIndex: 99999, borderRadius: '4px', pointerEvents: 'none'\n }}>\n BASIS_ENGINE: ACTIVE\n </div>\n )}\n </BasisContext.Provider>\n );\n};\n\nexport const useBasisConfig = () => useContext(BasisContext);"],"mappings":"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","names":["history","reactUseState","reactUseEffect","reactUseCallback","reactUseReducer","reactUseMemo","reactUseLayoutEffect","reactUseInsertionEffect","reactUseTransition","reactUseDeferredValue","reactUseRef","reactCreateContext","reactUseContext","reactUseId","reactUseDebugValue","reactUseImperativeHandle","reactUseSyncExternalStore","import_react","isWeb"]}
|
package/dist/index.mjs
CHANGED
|
@@ -218,14 +218,25 @@ var LOOP_WINDOW_MS = 500;
|
|
|
218
218
|
var ANALYSIS_INTERVAL = 5;
|
|
219
219
|
|
|
220
220
|
// src/engine.ts
|
|
221
|
+
var config = {
|
|
222
|
+
debug: false
|
|
223
|
+
};
|
|
224
|
+
var booted = false;
|
|
225
|
+
var configureBasis = (newConfig) => {
|
|
226
|
+
config = { ...config, ...newConfig };
|
|
227
|
+
if (config.debug && !booted) {
|
|
228
|
+
displayBootLog(WINDOW_SIZE);
|
|
229
|
+
booted = true;
|
|
230
|
+
}
|
|
231
|
+
};
|
|
221
232
|
var history = /* @__PURE__ */ new Map();
|
|
222
233
|
var currentTickBatch = /* @__PURE__ */ new Set();
|
|
223
234
|
var updateLog = [];
|
|
224
235
|
var currentEffectSource = null;
|
|
225
236
|
var tick = 0;
|
|
226
237
|
var isBatching = false;
|
|
227
|
-
displayBootLog(WINDOW_SIZE);
|
|
228
238
|
var analyzeBasis = () => {
|
|
239
|
+
if (!config.debug) return;
|
|
229
240
|
const entries = Array.from(history.entries());
|
|
230
241
|
if (entries.length < 2) return;
|
|
231
242
|
entries.forEach(([labelA, vecA], i) => {
|
|
@@ -238,6 +249,10 @@ var analyzeBasis = () => {
|
|
|
238
249
|
});
|
|
239
250
|
};
|
|
240
251
|
var printBasisHealthReport = (threshold = 0.5) => {
|
|
252
|
+
if (!config.debug) {
|
|
253
|
+
console.warn("[Basis] Cannot generate report. Debug mode is OFF.");
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
241
256
|
displayHealthReport(history, calculateCosineSimilarity, threshold);
|
|
242
257
|
};
|
|
243
258
|
var beginEffectTracking = (label) => {
|
|
@@ -247,6 +262,7 @@ var endEffectTracking = () => {
|
|
|
247
262
|
currentEffectSource = null;
|
|
248
263
|
};
|
|
249
264
|
var registerVariable = (label) => {
|
|
265
|
+
if (!config.debug) return;
|
|
250
266
|
if (!history.has(label)) {
|
|
251
267
|
history.set(label, new Array(WINDOW_SIZE).fill(0));
|
|
252
268
|
}
|
|
@@ -255,6 +271,7 @@ var unregisterVariable = (label) => {
|
|
|
255
271
|
history.delete(label);
|
|
256
272
|
};
|
|
257
273
|
var recordUpdate = (label) => {
|
|
274
|
+
if (!config.debug) return true;
|
|
258
275
|
const now = Date.now();
|
|
259
276
|
updateLog.push({ label, ts: now });
|
|
260
277
|
updateLog = updateLog.filter((e) => now - e.ts < LOOP_WINDOW_MS);
|
|
@@ -287,6 +304,8 @@ if (typeof window !== "undefined") {
|
|
|
287
304
|
window.printBasisReport = printBasisHealthReport;
|
|
288
305
|
}
|
|
289
306
|
var __testEngine__ = {
|
|
307
|
+
config,
|
|
308
|
+
configureBasis,
|
|
290
309
|
history,
|
|
291
310
|
currentTickBatch,
|
|
292
311
|
registerVariable,
|
|
@@ -322,35 +341,13 @@ function useState(initialValue, label) {
|
|
|
322
341
|
registerVariable(effectiveLabel);
|
|
323
342
|
return () => unregisterVariable(effectiveLabel);
|
|
324
343
|
}, [effectiveLabel]);
|
|
325
|
-
const setter =
|
|
344
|
+
const setter = reactUseCallback((newValue) => {
|
|
326
345
|
if (recordUpdate(effectiveLabel)) {
|
|
327
346
|
setVal(newValue);
|
|
328
347
|
}
|
|
329
348
|
}, [effectiveLabel]);
|
|
330
349
|
return [val, setter];
|
|
331
350
|
}
|
|
332
|
-
function useMemo(factory, depsOrLabel, label) {
|
|
333
|
-
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
334
|
-
const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
|
|
335
|
-
const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_projection";
|
|
336
|
-
reactUseEffect(() => {
|
|
337
|
-
if (window._basis_debug !== false) {
|
|
338
|
-
console.log(`%c [Basis] Valid Projection: "${effectiveLabel}" `, "color: #2ecc71; font-weight: bold;");
|
|
339
|
-
}
|
|
340
|
-
}, [effectiveLabel]);
|
|
341
|
-
return reactUseMemo(factory, actualDeps || []);
|
|
342
|
-
}
|
|
343
|
-
function useEffect(effect, depsOrLabel, label) {
|
|
344
|
-
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
345
|
-
const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
|
|
346
|
-
const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_effect";
|
|
347
|
-
reactUseEffect(() => {
|
|
348
|
-
beginEffectTracking(effectiveLabel);
|
|
349
|
-
const cleanup = effect();
|
|
350
|
-
endEffectTracking();
|
|
351
|
-
return cleanup;
|
|
352
|
-
}, actualDeps);
|
|
353
|
-
}
|
|
354
351
|
function useReducer(reducer, initialArg, init, label) {
|
|
355
352
|
const effectiveLabel = typeof init === "string" ? init : label || "anonymous_reducer";
|
|
356
353
|
const reactInit = typeof init === "function" ? init : void 0;
|
|
@@ -359,33 +356,45 @@ function useReducer(reducer, initialArg, init, label) {
|
|
|
359
356
|
registerVariable(effectiveLabel);
|
|
360
357
|
return () => unregisterVariable(effectiveLabel);
|
|
361
358
|
}, [effectiveLabel]);
|
|
362
|
-
const basisDispatch =
|
|
359
|
+
const basisDispatch = reactUseCallback((action) => {
|
|
363
360
|
if (recordUpdate(effectiveLabel)) {
|
|
364
361
|
dispatch(action);
|
|
365
362
|
}
|
|
366
363
|
}, [effectiveLabel]);
|
|
367
364
|
return [state, basisDispatch];
|
|
368
365
|
}
|
|
369
|
-
function
|
|
370
|
-
const
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
366
|
+
function useMemo(factory, depsOrLabel, label) {
|
|
367
|
+
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
368
|
+
const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
|
|
369
|
+
const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_projection";
|
|
370
|
+
reactUseEffect(() => {
|
|
371
|
+
if (config.debug) {
|
|
372
|
+
console.log(`%c [Basis] Valid Projection: "${effectiveLabel}" `, "color: #2ecc71; font-weight: bold;");
|
|
373
|
+
}
|
|
374
|
+
}, [effectiveLabel]);
|
|
375
|
+
return reactUseMemo(factory, actualDeps || []);
|
|
375
376
|
}
|
|
376
377
|
function useCallback(callback, depsOrLabel, label) {
|
|
377
378
|
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
378
379
|
const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
|
|
379
380
|
const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_callback";
|
|
380
381
|
reactUseEffect(() => {
|
|
381
|
-
if (
|
|
382
|
+
if (config.debug) {
|
|
382
383
|
console.log(`%c [Basis] Stable Callback: "${effectiveLabel}" `, "color: #2ecc71; font-weight: bold;");
|
|
383
384
|
}
|
|
384
385
|
}, [effectiveLabel]);
|
|
385
386
|
return reactUseCallback(callback, actualDeps || []);
|
|
386
387
|
}
|
|
387
|
-
function
|
|
388
|
-
|
|
388
|
+
function useEffect(effect, depsOrLabel, label) {
|
|
389
|
+
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
390
|
+
const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
|
|
391
|
+
const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_effect";
|
|
392
|
+
reactUseEffect(() => {
|
|
393
|
+
beginEffectTracking(effectiveLabel);
|
|
394
|
+
const cleanup = effect();
|
|
395
|
+
endEffectTracking();
|
|
396
|
+
return cleanup;
|
|
397
|
+
}, actualDeps);
|
|
389
398
|
}
|
|
390
399
|
function useLayoutEffect(effect, depsOrLabel, label) {
|
|
391
400
|
const isLabelAsSecondArg = typeof depsOrLabel === "string";
|
|
@@ -398,18 +407,6 @@ function useLayoutEffect(effect, depsOrLabel, label) {
|
|
|
398
407
|
return cleanup;
|
|
399
408
|
}, actualDeps);
|
|
400
409
|
}
|
|
401
|
-
function useContext(context) {
|
|
402
|
-
return reactUseContext(context);
|
|
403
|
-
}
|
|
404
|
-
function useId(_label) {
|
|
405
|
-
return reactUseId();
|
|
406
|
-
}
|
|
407
|
-
function useDebugValue(value, formatter, _label) {
|
|
408
|
-
return reactUseDebugValue(value, formatter);
|
|
409
|
-
}
|
|
410
|
-
function useImperativeHandle(ref, init, deps, _label) {
|
|
411
|
-
return reactUseImperativeHandle(ref, init, deps);
|
|
412
|
-
}
|
|
413
410
|
function useInsertionEffect(effect, deps, _label) {
|
|
414
411
|
return reactUseInsertionEffect(effect, deps);
|
|
415
412
|
}
|
|
@@ -417,7 +414,7 @@ function useTransition(_label) {
|
|
|
417
414
|
const [isPending, startTransition] = reactUseTransition();
|
|
418
415
|
const effectiveLabel = _label || "anonymous_transition";
|
|
419
416
|
const basisStartTransition = (callback) => {
|
|
420
|
-
if (
|
|
417
|
+
if (config.debug) {
|
|
421
418
|
console.log(`%c [Basis] Transition Started: "${effectiveLabel}" `, "color: #e67e22; font-weight: bold;");
|
|
422
419
|
}
|
|
423
420
|
startTransition(() => {
|
|
@@ -432,12 +429,34 @@ function useDeferredValue(value, initialValueOrLabel, label) {
|
|
|
432
429
|
const effectiveLabel = isLabelAsSecondArg ? initialValueOrLabel : label || "anonymous_deferred";
|
|
433
430
|
const deferredValue = reactUseDeferredValue(value, actualInitialValue);
|
|
434
431
|
reactUseEffect(() => {
|
|
435
|
-
if (
|
|
432
|
+
if (config.debug && value !== deferredValue) {
|
|
436
433
|
console.log(`%c [Basis] Value Deferred: "${effectiveLabel}" `, "color: #e67e22; font-weight: bold;");
|
|
437
434
|
}
|
|
438
435
|
}, [value, deferredValue, effectiveLabel]);
|
|
439
436
|
return deferredValue;
|
|
440
437
|
}
|
|
438
|
+
function useRef(initialValue, _label) {
|
|
439
|
+
return reactUseRef(initialValue);
|
|
440
|
+
}
|
|
441
|
+
function createContext(defaultValue, label) {
|
|
442
|
+
const context = reactCreateContext(defaultValue);
|
|
443
|
+
if (label) {
|
|
444
|
+
context._basis_label = label;
|
|
445
|
+
}
|
|
446
|
+
return context;
|
|
447
|
+
}
|
|
448
|
+
function useContext(context) {
|
|
449
|
+
return reactUseContext(context);
|
|
450
|
+
}
|
|
451
|
+
function useId(_label) {
|
|
452
|
+
return reactUseId();
|
|
453
|
+
}
|
|
454
|
+
function useDebugValue(value, formatter, _label) {
|
|
455
|
+
return reactUseDebugValue(value, formatter);
|
|
456
|
+
}
|
|
457
|
+
function useImperativeHandle(ref, init, deps, _label) {
|
|
458
|
+
return reactUseImperativeHandle(ref, init, deps);
|
|
459
|
+
}
|
|
441
460
|
function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot, _label) {
|
|
442
461
|
return reactUseSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
443
462
|
}
|
|
@@ -452,14 +471,17 @@ var __test__ = {
|
|
|
452
471
|
};
|
|
453
472
|
|
|
454
473
|
// src/context.tsx
|
|
455
|
-
import { createContext as createContext2, useContext as useContext2 } from "react";
|
|
474
|
+
import { createContext as createContext2, useContext as useContext2, useLayoutEffect as useLayoutEffect2 } from "react";
|
|
456
475
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
457
476
|
var BasisContext = createContext2({ debug: false });
|
|
458
477
|
var isWeb2 = typeof window !== "undefined" && typeof window.document !== "undefined";
|
|
459
478
|
var BasisProvider = ({ children, debug = true }) => {
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
479
|
+
useLayoutEffect2(() => {
|
|
480
|
+
configureBasis({ debug });
|
|
481
|
+
if (isWeb2) {
|
|
482
|
+
window._basis_debug = debug;
|
|
483
|
+
}
|
|
484
|
+
}, [debug]);
|
|
463
485
|
return /* @__PURE__ */ jsxs(BasisContext.Provider, { value: { debug }, children: [
|
|
464
486
|
children,
|
|
465
487
|
debug && isWeb2 && /* @__PURE__ */ jsx("div", { style: {
|
|
@@ -484,6 +506,8 @@ export {
|
|
|
484
506
|
__testEngine__,
|
|
485
507
|
__test__,
|
|
486
508
|
beginEffectTracking,
|
|
509
|
+
config,
|
|
510
|
+
configureBasis,
|
|
487
511
|
createContext,
|
|
488
512
|
currentTickBatch,
|
|
489
513
|
endEffectTracking,
|