@mulanjs/mulanjs 1.0.1-dev.20260219183505 → 1.0.1-dev.20260220104511
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 +4 -1
- package/dist/core/quantum.js +74 -9
- package/dist/core/query.js +12 -2
- package/dist/core/surge.js +88 -0
- package/dist/index.js +4 -2
- package/dist/mulan.esm.js +215 -18
- package/dist/mulan.js +13 -3
- package/dist/types/core/quantum.d.ts +28 -0
- package/dist/types/core/query.d.ts +6 -6
- package/dist/types/core/surge.d.ts +21 -0
- package/dist/types/index.d.ts +16 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ npm install @mulanjs/mulanjs@dev
|
|
|
32
32
|
## ⚡ Core Features
|
|
33
33
|
|
|
34
34
|
* **Signal Reactivity Engine** ⚡: Fine-grained reactivity that tracks exact dependencies, eliminating the need for a Virtual DOM.
|
|
35
|
-
* **ASTR-Q+ Engine** 🌌: Simulated quantum registers
|
|
35
|
+
* **ASTR-Q+ Engine** 🌌: Simulated quantum registers with **Quantum Loops** (`muParallel`, `muSwitch`) for complex probabilistic branching.
|
|
36
36
|
* **Iron Fortress Security** 🛡️: Built-in "Iron Fortress" security module that auto-sanitizes inputs and generates CSP headers.
|
|
37
37
|
* **Mulan Cycle** 🔄: A redefined component lifecycle (Init, Mount, Destroy) for predictable state management.
|
|
38
38
|
* **TypeScript First** 🟦: Built from the ground up with TypeScript for world-class type safety.
|
|
@@ -56,6 +56,9 @@ State that survives refreshes using `muVault`. Your data, secured in the Iron Fo
|
|
|
56
56
|
### Mulan Router (Time Travel) 🧭
|
|
57
57
|
Zero-config hash routing with `<mu-link>` for instant, single-page navigation.
|
|
58
58
|
|
|
59
|
+
### Mulan Surge (High Performance) 🚀
|
|
60
|
+
Adaptive non-blocking loops (`muBurst`) and true multicore parallelism (`muSurge`) to handle billions of records at 60fps.
|
|
61
|
+
|
|
59
62
|
### Native SCSS Support 🎨
|
|
60
63
|
Built-in support for `<style lang="scss">`. No config required. Just design.
|
|
61
64
|
## 🚀 Quick Start Example
|
package/dist/core/quantum.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { muState } from './hooks';
|
|
2
|
+
/**
|
|
3
|
+
* Mulan Quantum (ASTR-Q+) Core
|
|
4
|
+
* Advanced Simulation Engine for multi-qubit registers and entanglement.
|
|
5
|
+
*/
|
|
6
|
+
// -- GLOBAL CONTEXT FOR QUANTUM CONTROL --
|
|
7
|
+
// Defined at top to ensure visibility for muGate
|
|
8
|
+
export let activeControls = [];
|
|
2
9
|
/**
|
|
3
10
|
* Creates a quantum register of size n.
|
|
4
11
|
* State vector will have 2^n amplitudes.
|
|
@@ -54,14 +61,14 @@ export function muGate(reg, type, target = 0, control) {
|
|
|
54
61
|
const n = state.size;
|
|
55
62
|
const amplitudes = state.amplitudes;
|
|
56
63
|
const newAmps = amplitudes.map(a => (Object.assign({}, a)));
|
|
64
|
+
// Prepare Effective Control (Explicit Arguments + Global Context)
|
|
65
|
+
const effectiveControl = [...(control === undefined ? [] : (Array.isArray(control) ? control : [control])), ...activeControls];
|
|
57
66
|
// Helper: Check if all control bits are 1
|
|
58
67
|
const checkControl = (index, ctrl) => {
|
|
59
|
-
if (ctrl === undefined)
|
|
68
|
+
if (ctrl === undefined || (Array.isArray(ctrl) && ctrl.length === 0))
|
|
60
69
|
return true;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
return ctrl.every(c => ((index >> c) & 1) === 1);
|
|
70
|
+
const ctrls = Array.isArray(ctrl) ? ctrl : [ctrl];
|
|
71
|
+
return ctrls.every(c => ((index >> c) & 1) === 1);
|
|
65
72
|
};
|
|
66
73
|
// SWAP Gate (Unique case: affects 2 targets)
|
|
67
74
|
if (type === 'SWAP') {
|
|
@@ -69,6 +76,9 @@ export function muGate(reg, type, target = 0, control) {
|
|
|
69
76
|
const t2 = control; // SWAP uses control arg as second target
|
|
70
77
|
// Iterate only half to avoid double swapping
|
|
71
78
|
for (let i = 0; i < amplitudes.length; i++) {
|
|
79
|
+
// Check active controls for SWAP too
|
|
80
|
+
if (activeControls.length > 0 && !checkControl(i, activeControls))
|
|
81
|
+
continue;
|
|
72
82
|
const bit1 = (i >> t1) & 1;
|
|
73
83
|
const bit2 = (i >> t2) & 1;
|
|
74
84
|
if (bit1 !== bit2) {
|
|
@@ -93,7 +103,7 @@ export function muGate(reg, type, target = 0, control) {
|
|
|
93
103
|
if (processed.has(i))
|
|
94
104
|
continue;
|
|
95
105
|
// Check Controls first
|
|
96
|
-
if (!checkControl(i,
|
|
106
|
+
if (!checkControl(i, effectiveControl))
|
|
97
107
|
continue;
|
|
98
108
|
const targetBit = (i >> target) & 1;
|
|
99
109
|
const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
|
|
@@ -114,7 +124,7 @@ export function muGate(reg, type, target = 0, control) {
|
|
|
114
124
|
else if (type === 'X' || type === 'CNOT') {
|
|
115
125
|
// CNOT is just Controlled-X
|
|
116
126
|
for (let i = 0; i < amplitudes.length; i++) {
|
|
117
|
-
if (!checkControl(i,
|
|
127
|
+
if (!checkControl(i, effectiveControl))
|
|
118
128
|
continue;
|
|
119
129
|
const targetBit = (i >> target) & 1;
|
|
120
130
|
const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
|
|
@@ -128,7 +138,7 @@ export function muGate(reg, type, target = 0, control) {
|
|
|
128
138
|
else if (type === 'Z' || type === 'CZ') {
|
|
129
139
|
// Z and CZ are Phase Flips
|
|
130
140
|
for (let i = 0; i < amplitudes.length; i++) {
|
|
131
|
-
if (!checkControl(i,
|
|
141
|
+
if (!checkControl(i, effectiveControl))
|
|
132
142
|
continue;
|
|
133
143
|
const targetBit = (i >> target) & 1;
|
|
134
144
|
// Z Gate acts on |1>
|
|
@@ -140,7 +150,7 @@ export function muGate(reg, type, target = 0, control) {
|
|
|
140
150
|
else if (type === 'Y') {
|
|
141
151
|
// Y: |0> -> i|1>, |1> -> -i|0>
|
|
142
152
|
for (let i = 0; i < amplitudes.length; i++) {
|
|
143
|
-
if (!checkControl(i,
|
|
153
|
+
if (!checkControl(i, effectiveControl))
|
|
144
154
|
continue;
|
|
145
155
|
const targetBit = (i >> target) & 1;
|
|
146
156
|
const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
|
|
@@ -282,3 +292,58 @@ export function muMeasure(reg, target = 0) {
|
|
|
282
292
|
updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));
|
|
283
293
|
return result;
|
|
284
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Quantum Loop: Parallel Execution
|
|
297
|
+
* Applies a gate to multiple qubits "simultaneously" (in simulation steps).
|
|
298
|
+
* Ideal for initialization (Hadamard Transform) or global operations.
|
|
299
|
+
* @param reg Quantum Register
|
|
300
|
+
* @param qubits Array of qubit indices
|
|
301
|
+
* @param gate Gate type to apply (e.g. 'H', 'X')
|
|
302
|
+
*/
|
|
303
|
+
export function muParallel(reg, qubits, gate) {
|
|
304
|
+
if (gate === 'SWAP') {
|
|
305
|
+
throw new Error("SWAP cannot be applied in parallel (requires pairs).");
|
|
306
|
+
}
|
|
307
|
+
// In a real quantum computer, these happen at t=0.
|
|
308
|
+
// Here, we loop, but logical time is constant.
|
|
309
|
+
qubits.forEach(q => muGate(reg, gate, q));
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Applies a block of operations controlled by specific qubits.
|
|
313
|
+
* Enables "Quantum If/Else".
|
|
314
|
+
*/
|
|
315
|
+
export function muControl(reg, controlQubit, inverse, block) {
|
|
316
|
+
// 1. Setup Context
|
|
317
|
+
if (inverse) {
|
|
318
|
+
muGate(reg, 'X', controlQubit); // Flip 0 to 1 to activate
|
|
319
|
+
}
|
|
320
|
+
activeControls.push(controlQubit);
|
|
321
|
+
try {
|
|
322
|
+
block();
|
|
323
|
+
}
|
|
324
|
+
finally {
|
|
325
|
+
activeControls.pop();
|
|
326
|
+
// Uncompute (Restore 0)
|
|
327
|
+
if (inverse) {
|
|
328
|
+
muGate(reg, 'X', controlQubit);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Quantum Switch: conditional Logic on Superposition
|
|
334
|
+
* Executes different logic branches based on the state of control qubits.
|
|
335
|
+
* Because the register can be in a superposition of states (e.g. |0> + |1>),
|
|
336
|
+
* MULTIPLE branches can execute effectively simultaneously on different subspaces.
|
|
337
|
+
*
|
|
338
|
+
* @param reg Quantum Register
|
|
339
|
+
* @param controlQubit The qubit controlling the switch (Single control for v1)
|
|
340
|
+
* @param cases Object mapping state (0 or 1) to a function executing quantum operations
|
|
341
|
+
*/
|
|
342
|
+
export function muSwitch(reg, controlQubit, cases) {
|
|
343
|
+
if (cases[0]) {
|
|
344
|
+
muControl(reg, controlQubit, true, cases[0]);
|
|
345
|
+
}
|
|
346
|
+
if (cases[1]) {
|
|
347
|
+
muControl(reg, controlQubit, false, cases[1]);
|
|
348
|
+
}
|
|
349
|
+
}
|
package/dist/core/query.js
CHANGED
|
@@ -35,7 +35,12 @@ export function useQuery(queryFn, options = { enabled: true }) {
|
|
|
35
35
|
execute();
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
-
return
|
|
38
|
+
return {
|
|
39
|
+
get data() { return state.data; },
|
|
40
|
+
get isLoading() { return state.isLoading; },
|
|
41
|
+
get error() { return state.error; },
|
|
42
|
+
refetch: execute
|
|
43
|
+
};
|
|
39
44
|
}
|
|
40
45
|
export function useMutation(mutationFn) {
|
|
41
46
|
const state = reactive({
|
|
@@ -59,5 +64,10 @@ export function useMutation(mutationFn) {
|
|
|
59
64
|
state.isLoading = false;
|
|
60
65
|
}
|
|
61
66
|
});
|
|
62
|
-
return
|
|
67
|
+
return {
|
|
68
|
+
get data() { return state.data; },
|
|
69
|
+
get isLoading() { return state.isLoading; },
|
|
70
|
+
get error() { return state.error; },
|
|
71
|
+
mutate
|
|
72
|
+
};
|
|
63
73
|
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* muBurst - Adaptive Non-blocking Iterator
|
|
3
|
+
* Processes large arrays in batches within a frame budget (typically 8-16ms)
|
|
4
|
+
* to keep the UI responsive while executing at near-native loop speeds.
|
|
5
|
+
*/
|
|
6
|
+
export function muBurst(array, callback, options = {}) {
|
|
7
|
+
const { chunkSize = 1000, timeout = 8, onProgress } = options;
|
|
8
|
+
return new Promise((resolve) => {
|
|
9
|
+
let index = 0;
|
|
10
|
+
const total = array.length;
|
|
11
|
+
function process() {
|
|
12
|
+
const start = performance.now();
|
|
13
|
+
// Tight loop for high-speed processing
|
|
14
|
+
while (index < total && (performance.now() - start) < timeout) {
|
|
15
|
+
// Process in smaller bursts to allow more frequent time checks if needed
|
|
16
|
+
const endBurst = Math.min(index + chunkSize, total);
|
|
17
|
+
for (; index < endBurst; index++) {
|
|
18
|
+
callback(array[index], index);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (onProgress) {
|
|
22
|
+
onProgress((index / total) * 100);
|
|
23
|
+
}
|
|
24
|
+
if (index < total) {
|
|
25
|
+
requestAnimationFrame(process);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
resolve();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
process();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* muSurge - Truly Parallel Execution
|
|
36
|
+
* Distributes work across CPU cores using Web Workers.
|
|
37
|
+
* Logic must be serializable.
|
|
38
|
+
*/
|
|
39
|
+
export function muSurge(array, taskFn, onProgress) {
|
|
40
|
+
const n = navigator.hardwareConcurrency || 4;
|
|
41
|
+
const chunkSize = Math.ceil(array.length / n);
|
|
42
|
+
const results = new Array(array.length);
|
|
43
|
+
let completedChunks = 0;
|
|
44
|
+
let completedItems = 0;
|
|
45
|
+
// Convert function to string if it isn't already
|
|
46
|
+
const fnStr = typeof taskFn === 'function' ? taskFn.toString() : taskFn;
|
|
47
|
+
const workerCode = `
|
|
48
|
+
self.onmessage = function(e) {
|
|
49
|
+
const { chunk, startIndex, fnStr } = e.data;
|
|
50
|
+
const fn = new Function('item', 'return (' + fnStr + ')(item)');
|
|
51
|
+
const results = chunk.map(fn);
|
|
52
|
+
self.postMessage({ results, startIndex });
|
|
53
|
+
};
|
|
54
|
+
`;
|
|
55
|
+
const blob = new Blob([workerCode], { type: 'application/javascript' });
|
|
56
|
+
const workerUrl = URL.createObjectURL(blob);
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
if (array.length === 0)
|
|
59
|
+
return resolve([]);
|
|
60
|
+
for (let i = 0; i < n; i++) {
|
|
61
|
+
const start = i * chunkSize;
|
|
62
|
+
const end = Math.min(start + chunkSize, array.length);
|
|
63
|
+
if (start >= end) {
|
|
64
|
+
completedChunks++;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const chunk = array.slice(start, end);
|
|
68
|
+
const worker = new Worker(workerUrl);
|
|
69
|
+
worker.onmessage = (e) => {
|
|
70
|
+
const { results: chunkResults, startIndex } = e.data;
|
|
71
|
+
// Merge results back into main array
|
|
72
|
+
for (let j = 0; j < chunkResults.length; j++) {
|
|
73
|
+
results[startIndex + j] = chunkResults[j];
|
|
74
|
+
}
|
|
75
|
+
completedChunks++;
|
|
76
|
+
completedItems += chunkResults.length;
|
|
77
|
+
if (onProgress)
|
|
78
|
+
onProgress((completedItems / array.length) * 100);
|
|
79
|
+
worker.terminate();
|
|
80
|
+
if (completedChunks === n) {
|
|
81
|
+
URL.revokeObjectURL(workerUrl);
|
|
82
|
+
resolve(results);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
worker.postMessage({ chunk, startIndex: start, fnStr });
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ export * from './core/hooks';
|
|
|
8
8
|
export * from './core/query';
|
|
9
9
|
export * from './core/vault';
|
|
10
10
|
export * from './core/quantum';
|
|
11
|
+
export * from './core/surge';
|
|
11
12
|
export * from './components/bloch-sphere';
|
|
12
13
|
export * from './components/infinity-list';
|
|
13
14
|
// Global Mulan Object for non-module usage
|
|
@@ -20,9 +21,10 @@ import * as Hooks from './core/hooks';
|
|
|
20
21
|
import * as Query from './core/query';
|
|
21
22
|
import { render } from './core/renderer';
|
|
22
23
|
import * as Quantum from './core/quantum';
|
|
24
|
+
import * as Surge from './core/surge';
|
|
23
25
|
import * as InfinityList from './components/infinity-list';
|
|
24
|
-
const Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive,
|
|
25
|
-
effect, Component: MuComponent, defineComponent, Router: MuRouter, createRouter, Store: MuStore, Security: Security }, Hooks), Query), Quantum), InfinityList), { render,
|
|
26
|
+
const Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive,
|
|
27
|
+
effect, Component: MuComponent, defineComponent, Router: MuRouter, createRouter, Store: MuStore, Security: Security }, Hooks), Query), Quantum), Surge), InfinityList), { render,
|
|
26
28
|
// MULAN INSIGHT: Branded Logging
|
|
27
29
|
log: (msg, ...args) => {
|
|
28
30
|
console.log(`%c[MulanJS]%c ${msg}`, "color: #ff3e00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;", "", ...args);
|
package/dist/mulan.esm.js
CHANGED
|
@@ -821,16 +821,27 @@ function muVault(key, initial, options = {}) {
|
|
|
821
821
|
|
|
822
822
|
__webpack_require__.r(__webpack_exports__);
|
|
823
823
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
824
|
+
/* harmony export */ activeControls: () => (/* binding */ activeControls),
|
|
825
|
+
/* harmony export */ muControl: () => (/* binding */ muControl),
|
|
824
826
|
/* harmony export */ muEntangle: () => (/* binding */ muEntangle),
|
|
825
827
|
/* harmony export */ muGate: () => (/* binding */ muGate),
|
|
826
828
|
/* harmony export */ muMeasure: () => (/* binding */ muMeasure),
|
|
829
|
+
/* harmony export */ muParallel: () => (/* binding */ muParallel),
|
|
827
830
|
/* harmony export */ muQubit: () => (/* binding */ muQubit),
|
|
828
831
|
/* harmony export */ muRegister: () => (/* binding */ muRegister),
|
|
829
832
|
/* harmony export */ muSearch: () => (/* binding */ muSearch),
|
|
833
|
+
/* harmony export */ muSwitch: () => (/* binding */ muSwitch),
|
|
830
834
|
/* harmony export */ muTeleport: () => (/* binding */ muTeleport)
|
|
831
835
|
/* harmony export */ });
|
|
832
836
|
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hooks */ "./src/core/hooks.ts");
|
|
833
837
|
|
|
838
|
+
/**
|
|
839
|
+
* Mulan Quantum (ASTR-Q+) Core
|
|
840
|
+
* Advanced Simulation Engine for multi-qubit registers and entanglement.
|
|
841
|
+
*/
|
|
842
|
+
// -- GLOBAL CONTEXT FOR QUANTUM CONTROL --
|
|
843
|
+
// Defined at top to ensure visibility for muGate
|
|
844
|
+
let activeControls = [];
|
|
834
845
|
/**
|
|
835
846
|
* Creates a quantum register of size n.
|
|
836
847
|
* State vector will have 2^n amplitudes.
|
|
@@ -886,14 +897,14 @@ function muGate(reg, type, target = 0, control) {
|
|
|
886
897
|
const n = state.size;
|
|
887
898
|
const amplitudes = state.amplitudes;
|
|
888
899
|
const newAmps = amplitudes.map(a => (Object.assign({}, a)));
|
|
900
|
+
// Prepare Effective Control (Explicit Arguments + Global Context)
|
|
901
|
+
const effectiveControl = [...(control === undefined ? [] : (Array.isArray(control) ? control : [control])), ...activeControls];
|
|
889
902
|
// Helper: Check if all control bits are 1
|
|
890
903
|
const checkControl = (index, ctrl) => {
|
|
891
|
-
if (ctrl === undefined)
|
|
904
|
+
if (ctrl === undefined || (Array.isArray(ctrl) && ctrl.length === 0))
|
|
892
905
|
return true;
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
}
|
|
896
|
-
return ctrl.every(c => ((index >> c) & 1) === 1);
|
|
906
|
+
const ctrls = Array.isArray(ctrl) ? ctrl : [ctrl];
|
|
907
|
+
return ctrls.every(c => ((index >> c) & 1) === 1);
|
|
897
908
|
};
|
|
898
909
|
// SWAP Gate (Unique case: affects 2 targets)
|
|
899
910
|
if (type === 'SWAP') {
|
|
@@ -901,6 +912,9 @@ function muGate(reg, type, target = 0, control) {
|
|
|
901
912
|
const t2 = control; // SWAP uses control arg as second target
|
|
902
913
|
// Iterate only half to avoid double swapping
|
|
903
914
|
for (let i = 0; i < amplitudes.length; i++) {
|
|
915
|
+
// Check active controls for SWAP too
|
|
916
|
+
if (activeControls.length > 0 && !checkControl(i, activeControls))
|
|
917
|
+
continue;
|
|
904
918
|
const bit1 = (i >> t1) & 1;
|
|
905
919
|
const bit2 = (i >> t2) & 1;
|
|
906
920
|
if (bit1 !== bit2) {
|
|
@@ -925,7 +939,7 @@ function muGate(reg, type, target = 0, control) {
|
|
|
925
939
|
if (processed.has(i))
|
|
926
940
|
continue;
|
|
927
941
|
// Check Controls first
|
|
928
|
-
if (!checkControl(i,
|
|
942
|
+
if (!checkControl(i, effectiveControl))
|
|
929
943
|
continue;
|
|
930
944
|
const targetBit = (i >> target) & 1;
|
|
931
945
|
const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
|
|
@@ -946,7 +960,7 @@ function muGate(reg, type, target = 0, control) {
|
|
|
946
960
|
else if (type === 'X' || type === 'CNOT') {
|
|
947
961
|
// CNOT is just Controlled-X
|
|
948
962
|
for (let i = 0; i < amplitudes.length; i++) {
|
|
949
|
-
if (!checkControl(i,
|
|
963
|
+
if (!checkControl(i, effectiveControl))
|
|
950
964
|
continue;
|
|
951
965
|
const targetBit = (i >> target) & 1;
|
|
952
966
|
const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
|
|
@@ -960,7 +974,7 @@ function muGate(reg, type, target = 0, control) {
|
|
|
960
974
|
else if (type === 'Z' || type === 'CZ') {
|
|
961
975
|
// Z and CZ are Phase Flips
|
|
962
976
|
for (let i = 0; i < amplitudes.length; i++) {
|
|
963
|
-
if (!checkControl(i,
|
|
977
|
+
if (!checkControl(i, effectiveControl))
|
|
964
978
|
continue;
|
|
965
979
|
const targetBit = (i >> target) & 1;
|
|
966
980
|
// Z Gate acts on |1>
|
|
@@ -972,7 +986,7 @@ function muGate(reg, type, target = 0, control) {
|
|
|
972
986
|
else if (type === 'Y') {
|
|
973
987
|
// Y: |0> -> i|1>, |1> -> -i|0>
|
|
974
988
|
for (let i = 0; i < amplitudes.length; i++) {
|
|
975
|
-
if (!checkControl(i,
|
|
989
|
+
if (!checkControl(i, effectiveControl))
|
|
976
990
|
continue;
|
|
977
991
|
const targetBit = (i >> target) & 1;
|
|
978
992
|
const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
|
|
@@ -1114,6 +1128,61 @@ function muMeasure(reg, target = 0) {
|
|
|
1114
1128
|
updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));
|
|
1115
1129
|
return result;
|
|
1116
1130
|
}
|
|
1131
|
+
/**
|
|
1132
|
+
* Quantum Loop: Parallel Execution
|
|
1133
|
+
* Applies a gate to multiple qubits "simultaneously" (in simulation steps).
|
|
1134
|
+
* Ideal for initialization (Hadamard Transform) or global operations.
|
|
1135
|
+
* @param reg Quantum Register
|
|
1136
|
+
* @param qubits Array of qubit indices
|
|
1137
|
+
* @param gate Gate type to apply (e.g. 'H', 'X')
|
|
1138
|
+
*/
|
|
1139
|
+
function muParallel(reg, qubits, gate) {
|
|
1140
|
+
if (gate === 'SWAP') {
|
|
1141
|
+
throw new Error("SWAP cannot be applied in parallel (requires pairs).");
|
|
1142
|
+
}
|
|
1143
|
+
// In a real quantum computer, these happen at t=0.
|
|
1144
|
+
// Here, we loop, but logical time is constant.
|
|
1145
|
+
qubits.forEach(q => muGate(reg, gate, q));
|
|
1146
|
+
}
|
|
1147
|
+
/**
|
|
1148
|
+
* Applies a block of operations controlled by specific qubits.
|
|
1149
|
+
* Enables "Quantum If/Else".
|
|
1150
|
+
*/
|
|
1151
|
+
function muControl(reg, controlQubit, inverse, block) {
|
|
1152
|
+
// 1. Setup Context
|
|
1153
|
+
if (inverse) {
|
|
1154
|
+
muGate(reg, 'X', controlQubit); // Flip 0 to 1 to activate
|
|
1155
|
+
}
|
|
1156
|
+
activeControls.push(controlQubit);
|
|
1157
|
+
try {
|
|
1158
|
+
block();
|
|
1159
|
+
}
|
|
1160
|
+
finally {
|
|
1161
|
+
activeControls.pop();
|
|
1162
|
+
// Uncompute (Restore 0)
|
|
1163
|
+
if (inverse) {
|
|
1164
|
+
muGate(reg, 'X', controlQubit);
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
/**
|
|
1169
|
+
* Quantum Switch: conditional Logic on Superposition
|
|
1170
|
+
* Executes different logic branches based on the state of control qubits.
|
|
1171
|
+
* Because the register can be in a superposition of states (e.g. |0> + |1>),
|
|
1172
|
+
* MULTIPLE branches can execute effectively simultaneously on different subspaces.
|
|
1173
|
+
*
|
|
1174
|
+
* @param reg Quantum Register
|
|
1175
|
+
* @param controlQubit The qubit controlling the switch (Single control for v1)
|
|
1176
|
+
* @param cases Object mapping state (0 or 1) to a function executing quantum operations
|
|
1177
|
+
*/
|
|
1178
|
+
function muSwitch(reg, controlQubit, cases) {
|
|
1179
|
+
if (cases[0]) {
|
|
1180
|
+
muControl(reg, controlQubit, true, cases[0]);
|
|
1181
|
+
}
|
|
1182
|
+
if (cases[1]) {
|
|
1183
|
+
muControl(reg, controlQubit, false, cases[1]);
|
|
1184
|
+
}
|
|
1185
|
+
}
|
|
1117
1186
|
|
|
1118
1187
|
|
|
1119
1188
|
/***/ },
|
|
@@ -1167,7 +1236,12 @@ function useQuery(queryFn, options = { enabled: true }) {
|
|
|
1167
1236
|
execute();
|
|
1168
1237
|
});
|
|
1169
1238
|
}
|
|
1170
|
-
return
|
|
1239
|
+
return {
|
|
1240
|
+
get data() { return state.data; },
|
|
1241
|
+
get isLoading() { return state.isLoading; },
|
|
1242
|
+
get error() { return state.error; },
|
|
1243
|
+
refetch: execute
|
|
1244
|
+
};
|
|
1171
1245
|
}
|
|
1172
1246
|
function useMutation(mutationFn) {
|
|
1173
1247
|
const state = (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive)({
|
|
@@ -1191,7 +1265,12 @@ function useMutation(mutationFn) {
|
|
|
1191
1265
|
state.isLoading = false;
|
|
1192
1266
|
}
|
|
1193
1267
|
});
|
|
1194
|
-
return
|
|
1268
|
+
return {
|
|
1269
|
+
get data() { return state.data; },
|
|
1270
|
+
get isLoading() { return state.isLoading; },
|
|
1271
|
+
get error() { return state.error; },
|
|
1272
|
+
mutate
|
|
1273
|
+
};
|
|
1195
1274
|
}
|
|
1196
1275
|
|
|
1197
1276
|
|
|
@@ -1443,6 +1522,109 @@ function sanitize(str) {
|
|
|
1443
1522
|
}
|
|
1444
1523
|
|
|
1445
1524
|
|
|
1525
|
+
/***/ },
|
|
1526
|
+
|
|
1527
|
+
/***/ "./src/core/surge.ts"
|
|
1528
|
+
/*!***************************!*\
|
|
1529
|
+
!*** ./src/core/surge.ts ***!
|
|
1530
|
+
\***************************/
|
|
1531
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
1532
|
+
|
|
1533
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1534
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1535
|
+
/* harmony export */ muBurst: () => (/* binding */ muBurst),
|
|
1536
|
+
/* harmony export */ muSurge: () => (/* binding */ muSurge)
|
|
1537
|
+
/* harmony export */ });
|
|
1538
|
+
/**
|
|
1539
|
+
* muBurst - Adaptive Non-blocking Iterator
|
|
1540
|
+
* Processes large arrays in batches within a frame budget (typically 8-16ms)
|
|
1541
|
+
* to keep the UI responsive while executing at near-native loop speeds.
|
|
1542
|
+
*/
|
|
1543
|
+
function muBurst(array, callback, options = {}) {
|
|
1544
|
+
const { chunkSize = 1000, timeout = 8, onProgress } = options;
|
|
1545
|
+
return new Promise((resolve) => {
|
|
1546
|
+
let index = 0;
|
|
1547
|
+
const total = array.length;
|
|
1548
|
+
function process() {
|
|
1549
|
+
const start = performance.now();
|
|
1550
|
+
// Tight loop for high-speed processing
|
|
1551
|
+
while (index < total && (performance.now() - start) < timeout) {
|
|
1552
|
+
// Process in smaller bursts to allow more frequent time checks if needed
|
|
1553
|
+
const endBurst = Math.min(index + chunkSize, total);
|
|
1554
|
+
for (; index < endBurst; index++) {
|
|
1555
|
+
callback(array[index], index);
|
|
1556
|
+
}
|
|
1557
|
+
}
|
|
1558
|
+
if (onProgress) {
|
|
1559
|
+
onProgress((index / total) * 100);
|
|
1560
|
+
}
|
|
1561
|
+
if (index < total) {
|
|
1562
|
+
requestAnimationFrame(process);
|
|
1563
|
+
}
|
|
1564
|
+
else {
|
|
1565
|
+
resolve();
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1568
|
+
process();
|
|
1569
|
+
});
|
|
1570
|
+
}
|
|
1571
|
+
/**
|
|
1572
|
+
* muSurge - Truly Parallel Execution
|
|
1573
|
+
* Distributes work across CPU cores using Web Workers.
|
|
1574
|
+
* Logic must be serializable.
|
|
1575
|
+
*/
|
|
1576
|
+
function muSurge(array, taskFn, onProgress) {
|
|
1577
|
+
const n = navigator.hardwareConcurrency || 4;
|
|
1578
|
+
const chunkSize = Math.ceil(array.length / n);
|
|
1579
|
+
const results = new Array(array.length);
|
|
1580
|
+
let completedChunks = 0;
|
|
1581
|
+
let completedItems = 0;
|
|
1582
|
+
// Convert function to string if it isn't already
|
|
1583
|
+
const fnStr = typeof taskFn === 'function' ? taskFn.toString() : taskFn;
|
|
1584
|
+
const workerCode = `
|
|
1585
|
+
self.onmessage = function(e) {
|
|
1586
|
+
const { chunk, startIndex, fnStr } = e.data;
|
|
1587
|
+
const fn = new Function('item', 'return (' + fnStr + ')(item)');
|
|
1588
|
+
const results = chunk.map(fn);
|
|
1589
|
+
self.postMessage({ results, startIndex });
|
|
1590
|
+
};
|
|
1591
|
+
`;
|
|
1592
|
+
const blob = new Blob([workerCode], { type: 'application/javascript' });
|
|
1593
|
+
const workerUrl = URL.createObjectURL(blob);
|
|
1594
|
+
return new Promise((resolve) => {
|
|
1595
|
+
if (array.length === 0)
|
|
1596
|
+
return resolve([]);
|
|
1597
|
+
for (let i = 0; i < n; i++) {
|
|
1598
|
+
const start = i * chunkSize;
|
|
1599
|
+
const end = Math.min(start + chunkSize, array.length);
|
|
1600
|
+
if (start >= end) {
|
|
1601
|
+
completedChunks++;
|
|
1602
|
+
continue;
|
|
1603
|
+
}
|
|
1604
|
+
const chunk = array.slice(start, end);
|
|
1605
|
+
const worker = new Worker(workerUrl);
|
|
1606
|
+
worker.onmessage = (e) => {
|
|
1607
|
+
const { results: chunkResults, startIndex } = e.data;
|
|
1608
|
+
// Merge results back into main array
|
|
1609
|
+
for (let j = 0; j < chunkResults.length; j++) {
|
|
1610
|
+
results[startIndex + j] = chunkResults[j];
|
|
1611
|
+
}
|
|
1612
|
+
completedChunks++;
|
|
1613
|
+
completedItems += chunkResults.length;
|
|
1614
|
+
if (onProgress)
|
|
1615
|
+
onProgress((completedItems / array.length) * 100);
|
|
1616
|
+
worker.terminate();
|
|
1617
|
+
if (completedChunks === n) {
|
|
1618
|
+
URL.revokeObjectURL(workerUrl);
|
|
1619
|
+
resolve(results);
|
|
1620
|
+
}
|
|
1621
|
+
};
|
|
1622
|
+
worker.postMessage({ chunk, startIndex: start, fnStr });
|
|
1623
|
+
}
|
|
1624
|
+
});
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1627
|
+
|
|
1446
1628
|
/***/ },
|
|
1447
1629
|
|
|
1448
1630
|
/***/ "./src/core/vault.ts"
|
|
@@ -2015,30 +2197,36 @@ var __webpack_exports__ = {};
|
|
|
2015
2197
|
__webpack_require__.r(__webpack_exports__);
|
|
2016
2198
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2017
2199
|
/* harmony export */ Component: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),
|
|
2018
|
-
/* harmony export */ MuBlochSphereElement: () => (/* reexport safe */
|
|
2200
|
+
/* harmony export */ MuBlochSphereElement: () => (/* reexport safe */ _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_11__.MuBlochSphereElement),
|
|
2019
2201
|
/* harmony export */ MuComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),
|
|
2020
|
-
/* harmony export */ MuInfinity: () => (/* reexport safe */
|
|
2202
|
+
/* harmony export */ MuInfinity: () => (/* reexport safe */ _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__.MuInfinity),
|
|
2021
2203
|
/* harmony export */ MuRouter: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),
|
|
2022
2204
|
/* harmony export */ MuStore: () => (/* reexport safe */ _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore),
|
|
2023
2205
|
/* harmony export */ Router: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),
|
|
2024
2206
|
/* harmony export */ Security: () => (/* reexport safe */ _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security),
|
|
2025
2207
|
/* harmony export */ Signal: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.Signal),
|
|
2208
|
+
/* harmony export */ activeControls: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.activeControls),
|
|
2026
2209
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
2027
2210
|
/* harmony export */ defineComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent),
|
|
2028
2211
|
/* harmony export */ effect: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect),
|
|
2029
2212
|
/* harmony export */ getCurrentInstance: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.getCurrentInstance),
|
|
2030
2213
|
/* harmony export */ hydrate: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.hydrate),
|
|
2214
|
+
/* harmony export */ muBurst: () => (/* reexport safe */ _core_surge__WEBPACK_IMPORTED_MODULE_10__.muBurst),
|
|
2215
|
+
/* harmony export */ muControl: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muControl),
|
|
2031
2216
|
/* harmony export */ muEffect: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muEffect),
|
|
2032
2217
|
/* harmony export */ muEntangle: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muEntangle),
|
|
2033
2218
|
/* harmony export */ muGate: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muGate),
|
|
2034
2219
|
/* harmony export */ muGeom: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muGeom),
|
|
2035
2220
|
/* harmony export */ muMeasure: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muMeasure),
|
|
2036
2221
|
/* harmony export */ muMemo: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muMemo),
|
|
2222
|
+
/* harmony export */ muParallel: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muParallel),
|
|
2037
2223
|
/* harmony export */ muPulse: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muPulse),
|
|
2038
2224
|
/* harmony export */ muQubit: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muQubit),
|
|
2039
2225
|
/* harmony export */ muRegister: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muRegister),
|
|
2040
2226
|
/* harmony export */ muSearch: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muSearch),
|
|
2041
2227
|
/* harmony export */ muState: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muState),
|
|
2228
|
+
/* harmony export */ muSurge: () => (/* reexport safe */ _core_surge__WEBPACK_IMPORTED_MODULE_10__.muSurge),
|
|
2229
|
+
/* harmony export */ muSwitch: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muSwitch),
|
|
2042
2230
|
/* harmony export */ muTeleport: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muTeleport),
|
|
2043
2231
|
/* harmony export */ muVault: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muVault),
|
|
2044
2232
|
/* harmony export */ onMuDestroy: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuDestroy),
|
|
@@ -2068,8 +2256,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2068
2256
|
/* harmony import */ var _core_query__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./core/query */ "./src/core/query.ts");
|
|
2069
2257
|
/* harmony import */ var _core_vault__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./core/vault */ "./src/core/vault.ts");
|
|
2070
2258
|
/* harmony import */ var _core_quantum__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./core/quantum */ "./src/core/quantum.ts");
|
|
2071
|
-
/* harmony import */ var
|
|
2072
|
-
/* harmony import */ var
|
|
2259
|
+
/* harmony import */ var _core_surge__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./core/surge */ "./src/core/surge.ts");
|
|
2260
|
+
/* harmony import */ var _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/bloch-sphere */ "./src/components/bloch-sphere.ts");
|
|
2261
|
+
/* harmony import */ var _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./components/infinity-list */ "./src/components/infinity-list.ts");
|
|
2262
|
+
|
|
2073
2263
|
|
|
2074
2264
|
|
|
2075
2265
|
|
|
@@ -2093,8 +2283,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2093
2283
|
|
|
2094
2284
|
|
|
2095
2285
|
|
|
2096
|
-
|
|
2097
|
-
|
|
2286
|
+
|
|
2287
|
+
const Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive,
|
|
2288
|
+
effect: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect, Component: _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent, defineComponent: _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent, Router: _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter, createRouter: _router_index__WEBPACK_IMPORTED_MODULE_3__.createRouter, Store: _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore, Security: _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security }, _core_hooks__WEBPACK_IMPORTED_MODULE_6__), _core_query__WEBPACK_IMPORTED_MODULE_7__), _core_quantum__WEBPACK_IMPORTED_MODULE_9__), _core_surge__WEBPACK_IMPORTED_MODULE_10__), _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__), { render: _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render,
|
|
2098
2289
|
// MULAN INSIGHT: Branded Logging
|
|
2099
2290
|
log: (msg, ...args) => {
|
|
2100
2291
|
console.log(`%c[MulanJS]%c ${msg}`, "color: #ff3e00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;", "", ...args);
|
|
@@ -2139,22 +2330,28 @@ const __webpack_exports__MuStore = __webpack_exports__.MuStore;
|
|
|
2139
2330
|
const __webpack_exports__Router = __webpack_exports__.Router;
|
|
2140
2331
|
const __webpack_exports__Security = __webpack_exports__.Security;
|
|
2141
2332
|
const __webpack_exports__Signal = __webpack_exports__.Signal;
|
|
2333
|
+
const __webpack_exports__activeControls = __webpack_exports__.activeControls;
|
|
2142
2334
|
const __webpack_exports__default = __webpack_exports__["default"];
|
|
2143
2335
|
const __webpack_exports__defineComponent = __webpack_exports__.defineComponent;
|
|
2144
2336
|
const __webpack_exports__effect = __webpack_exports__.effect;
|
|
2145
2337
|
const __webpack_exports__getCurrentInstance = __webpack_exports__.getCurrentInstance;
|
|
2146
2338
|
const __webpack_exports__hydrate = __webpack_exports__.hydrate;
|
|
2339
|
+
const __webpack_exports__muBurst = __webpack_exports__.muBurst;
|
|
2340
|
+
const __webpack_exports__muControl = __webpack_exports__.muControl;
|
|
2147
2341
|
const __webpack_exports__muEffect = __webpack_exports__.muEffect;
|
|
2148
2342
|
const __webpack_exports__muEntangle = __webpack_exports__.muEntangle;
|
|
2149
2343
|
const __webpack_exports__muGate = __webpack_exports__.muGate;
|
|
2150
2344
|
const __webpack_exports__muGeom = __webpack_exports__.muGeom;
|
|
2151
2345
|
const __webpack_exports__muMeasure = __webpack_exports__.muMeasure;
|
|
2152
2346
|
const __webpack_exports__muMemo = __webpack_exports__.muMemo;
|
|
2347
|
+
const __webpack_exports__muParallel = __webpack_exports__.muParallel;
|
|
2153
2348
|
const __webpack_exports__muPulse = __webpack_exports__.muPulse;
|
|
2154
2349
|
const __webpack_exports__muQubit = __webpack_exports__.muQubit;
|
|
2155
2350
|
const __webpack_exports__muRegister = __webpack_exports__.muRegister;
|
|
2156
2351
|
const __webpack_exports__muSearch = __webpack_exports__.muSearch;
|
|
2157
2352
|
const __webpack_exports__muState = __webpack_exports__.muState;
|
|
2353
|
+
const __webpack_exports__muSurge = __webpack_exports__.muSurge;
|
|
2354
|
+
const __webpack_exports__muSwitch = __webpack_exports__.muSwitch;
|
|
2158
2355
|
const __webpack_exports__muTeleport = __webpack_exports__.muTeleport;
|
|
2159
2356
|
const __webpack_exports__muVault = __webpack_exports__.muVault;
|
|
2160
2357
|
const __webpack_exports__onMuDestroy = __webpack_exports__.onMuDestroy;
|
|
@@ -2173,4 +2370,4 @@ const __webpack_exports__sanitize = __webpack_exports__.sanitize;
|
|
|
2173
2370
|
const __webpack_exports__setCurrentInstance = __webpack_exports__.setCurrentInstance;
|
|
2174
2371
|
const __webpack_exports__useMutation = __webpack_exports__.useMutation;
|
|
2175
2372
|
const __webpack_exports__useQuery = __webpack_exports__.useQuery;
|
|
2176
|
-
export { __webpack_exports__Component as Component, __webpack_exports__MuBlochSphereElement as MuBlochSphereElement, __webpack_exports__MuComponent as MuComponent, __webpack_exports__MuInfinity as MuInfinity, __webpack_exports__MuRouter as MuRouter, __webpack_exports__MuStore as MuStore, __webpack_exports__Router as Router, __webpack_exports__Security as Security, __webpack_exports__Signal as Signal, __webpack_exports__default as default, __webpack_exports__defineComponent as defineComponent, __webpack_exports__effect as effect, __webpack_exports__getCurrentInstance as getCurrentInstance, __webpack_exports__hydrate as hydrate, __webpack_exports__muEffect as muEffect, __webpack_exports__muEntangle as muEntangle, __webpack_exports__muGate as muGate, __webpack_exports__muGeom as muGeom, __webpack_exports__muMeasure as muMeasure, __webpack_exports__muMemo as muMemo, __webpack_exports__muPulse as muPulse, __webpack_exports__muQubit as muQubit, __webpack_exports__muRegister as muRegister, __webpack_exports__muSearch as muSearch, __webpack_exports__muState as muState, __webpack_exports__muTeleport as muTeleport, __webpack_exports__muVault as muVault, __webpack_exports__onMuDestroy as onMuDestroy, __webpack_exports__onMuIdle as onMuIdle, __webpack_exports__onMuInit as onMuInit, __webpack_exports__onMuMount as onMuMount, __webpack_exports__onMuResume as onMuResume, __webpack_exports__onMuShake as onMuShake, __webpack_exports__onMuVoice as onMuVoice, __webpack_exports__persistent as persistent, __webpack_exports__reactive as reactive, __webpack_exports__ref as ref, __webpack_exports__render as render, __webpack_exports__renderToString as renderToString, __webpack_exports__sanitize as sanitize, __webpack_exports__setCurrentInstance as setCurrentInstance, __webpack_exports__useMutation as useMutation, __webpack_exports__useQuery as useQuery };
|
|
2373
|
+
export { __webpack_exports__Component as Component, __webpack_exports__MuBlochSphereElement as MuBlochSphereElement, __webpack_exports__MuComponent as MuComponent, __webpack_exports__MuInfinity as MuInfinity, __webpack_exports__MuRouter as MuRouter, __webpack_exports__MuStore as MuStore, __webpack_exports__Router as Router, __webpack_exports__Security as Security, __webpack_exports__Signal as Signal, __webpack_exports__activeControls as activeControls, __webpack_exports__default as default, __webpack_exports__defineComponent as defineComponent, __webpack_exports__effect as effect, __webpack_exports__getCurrentInstance as getCurrentInstance, __webpack_exports__hydrate as hydrate, __webpack_exports__muBurst as muBurst, __webpack_exports__muControl as muControl, __webpack_exports__muEffect as muEffect, __webpack_exports__muEntangle as muEntangle, __webpack_exports__muGate as muGate, __webpack_exports__muGeom as muGeom, __webpack_exports__muMeasure as muMeasure, __webpack_exports__muMemo as muMemo, __webpack_exports__muParallel as muParallel, __webpack_exports__muPulse as muPulse, __webpack_exports__muQubit as muQubit, __webpack_exports__muRegister as muRegister, __webpack_exports__muSearch as muSearch, __webpack_exports__muState as muState, __webpack_exports__muSurge as muSurge, __webpack_exports__muSwitch as muSwitch, __webpack_exports__muTeleport as muTeleport, __webpack_exports__muVault as muVault, __webpack_exports__onMuDestroy as onMuDestroy, __webpack_exports__onMuIdle as onMuIdle, __webpack_exports__onMuInit as onMuInit, __webpack_exports__onMuMount as onMuMount, __webpack_exports__onMuResume as onMuResume, __webpack_exports__onMuShake as onMuShake, __webpack_exports__onMuVoice as onMuVoice, __webpack_exports__persistent as persistent, __webpack_exports__reactive as reactive, __webpack_exports__ref as ref, __webpack_exports__render as render, __webpack_exports__renderToString as renderToString, __webpack_exports__sanitize as sanitize, __webpack_exports__setCurrentInstance as setCurrentInstance, __webpack_exports__useMutation as useMutation, __webpack_exports__useQuery as useQuery };
|
package/dist/mulan.js
CHANGED
|
@@ -66,7 +66,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
66
66
|
\*****************************/
|
|
67
67
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
68
68
|
|
|
69
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ muEntangle: () => (/* binding */ muEntangle),\n/* harmony export */ muGate: () => (/* binding */ muGate),\n/* harmony export */ muMeasure: () => (/* binding */ muMeasure),\n/* harmony export */ muQubit: () => (/* binding */ muQubit),\n/* harmony export */ muRegister: () => (/* binding */ muRegister),\n/* harmony export */ muSearch: () => (/* binding */ muSearch),\n/* harmony export */ muTeleport: () => (/* binding */ muTeleport)\n/* harmony export */ });\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hooks */ \"./src/core/hooks.ts\");\n\n/**\n * Creates a quantum register of size n.\n * State vector will have 2^n amplitudes.\n */\nfunction muRegister(n) {\n const numStates = Math.pow(2, n);\n const amplitudes = new Array(numStates).fill(0).map((_, i) => ({\n re: i === 0 ? 1 : 0,\n im: 0\n }));\n return (0,_hooks__WEBPACK_IMPORTED_MODULE_0__.muState)({\n value: {\n size: n,\n amplitudes\n }\n });\n}\n/**\n * Backward compatible muQubit (Single Qubit Register)\n */\nfunction muQubit(initial = 0) {\n const q = muRegister(1);\n if (initial === 1) {\n muGate(q, 'X', 0);\n }\n // Add compatibility properties for Phase 1 components\n // These properties are getters that dynamically access the amplitudes array\n Object.defineProperty(q.value, 'alpha', { get: () => q.value.amplitudes[0] });\n Object.defineProperty(q.value, 'beta', { get: () => q.value.amplitudes[1] });\n return q;\n}\n/**\n * Internal helper to update register state while maintaining compatibility\n */\nfunction updateState(reg, newState) {\n if (newState.size === 1) {\n // Re-inject compatibility getters for muQubit users\n Object.defineProperty(newState, 'alpha', {\n get: () => newState.amplitudes[0],\n configurable: true,\n enumerable: true\n });\n Object.defineProperty(newState, 'beta', {\n get: () => newState.amplitudes[1],\n configurable: true,\n enumerable: true\n });\n }\n reg.value = newState;\n}\nfunction muGate(reg, type, target = 0, control) {\n const state = reg.value;\n const n = state.size;\n const amplitudes = state.amplitudes;\n const newAmps = amplitudes.map(a => (Object.assign({}, a)));\n // Helper: Check if all control bits are 1\n const checkControl = (index, ctrl) => {\n if (ctrl === undefined)\n return true;\n if (typeof ctrl === 'number') {\n return ((index >> ctrl) & 1) === 1;\n }\n return ctrl.every(c => ((index >> c) & 1) === 1);\n };\n // SWAP Gate (Unique case: affects 2 targets)\n if (type === 'SWAP') {\n const t1 = target;\n const t2 = control; // SWAP uses control arg as second target \n // Iterate only half to avoid double swapping\n for (let i = 0; i < amplitudes.length; i++) {\n const bit1 = (i >> t1) & 1;\n const bit2 = (i >> t2) & 1;\n if (bit1 !== bit2) {\n // Determine the swap partner index\n // If i has (0,1), partner has (1,0) at those positions\n const partner = i ^ (1 << t1) ^ (1 << t2);\n if (i < partner) {\n const temp = newAmps[i];\n newAmps[i] = newAmps[partner];\n newAmps[partner] = temp;\n }\n }\n }\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n return;\n }\n // Standard Single-Qubit & Controlled Gates\n if (type === 'H') {\n const s = 1 / Math.sqrt(2);\n const processed = new Set();\n for (let i = 0; i < state.amplitudes.length; i++) {\n if (processed.has(i))\n continue;\n // Check Controls first\n if (!checkControl(i, control))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n const a = state.amplitudes[i];\n const b = state.amplitudes[pairedIndex];\n if (targetBit === 0) {\n newAmps[i] = { re: s * (a.re + b.re), im: s * (a.im + b.im) };\n newAmps[pairedIndex] = { re: s * (a.re - b.re), im: s * (a.im - b.im) };\n }\n else {\n newAmps[pairedIndex] = { re: s * (b.re + a.re), im: s * (b.im + a.im) };\n newAmps[i] = { re: s * (b.re - a.re), im: s * (b.im - a.im) };\n }\n processed.add(i);\n processed.add(pairedIndex);\n }\n }\n else if (type === 'X' || type === 'CNOT') {\n // CNOT is just Controlled-X\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, control))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n if (i < pairedIndex) {\n const temp = newAmps[i];\n newAmps[i] = newAmps[pairedIndex];\n newAmps[pairedIndex] = temp;\n }\n }\n }\n else if (type === 'Z' || type === 'CZ') {\n // Z and CZ are Phase Flips\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, control))\n continue;\n const targetBit = (i >> target) & 1;\n // Z Gate acts on |1>\n if (targetBit === 1) {\n newAmps[i] = { re: -amplitudes[i].re, im: -amplitudes[i].im };\n }\n }\n }\n else if (type === 'Y') {\n // Y: |0> -> i|1>, |1> -> -i|0>\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, control))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n if (i < pairedIndex) {\n // We process pairs (i, pairedIndex) where i has 0 at target, paired has 1\n const a = newAmps[i]; // Coeff of |0>\n const b = newAmps[pairedIndex]; // Coeff of |1>\n // New |0> = -i * Old |1>\n newAmps[i] = { re: b.im, im: -b.re };\n // New |1> = i * Old |0>\n newAmps[pairedIndex] = { re: -a.im, im: a.re };\n }\n }\n }\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n}\n/**\n * Mulan Search Logic (Grover's Operator)\n * Automatically constructs a multi-controlled Phase Flip (Z) for a specific target state.\n * This is the core of the \"Quantum Switch\" or \"Quantum Search\" capability.\n * @param reg Quantum Register\n * @param targetState The integer state to \"search\" and mark (e.g. 2 for |10>)\n */\nfunction muSearch(reg, targetState) {\n const n = reg.value.size;\n const controls = [];\n // 1. Identify which bits are 0 and need wrapping with X gates\n // Logic: To mark |010>, we want C-C-Z to trigger on 111.\n // So we apply X to bits that are 0, then C-C-Z, then X again.\n // We treat the last bit as the 'target' for the Z gate, rest as controls\n const targetQubit = n - 1;\n for (let i = 0; i < n; i++) {\n const bit = (targetState >> i) & 1;\n if (i === targetQubit) {\n // If target bit logic requires 0, we flip it to 1 for the Z gate to work\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n else {\n controls.push(i);\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n }\n // 2. Apply Multi-Controlled Z\n muGate(reg, 'Z', targetQubit, controls);\n // 3. Uncompute (Restore 0s)\n for (let i = 0; i < n; i++) {\n const bit = (targetState >> i) & 1;\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n // --- GROVER DIFFUSER (Amplification) ---\n // This flips the probability amplitudes around the mean, boosting the target state.\n // 1. Apply H to all\n for (let i = 0; i < n; i++)\n muGate(reg, 'H', i);\n // 2. Apply X to all\n for (let i = 0; i < n; i++)\n muGate(reg, 'X', i);\n // 3. Multi-Controlled Z (Reflection about |0...0>)\n // We want to flip phase of |11...1> state after X transformation (which corresponds to |00...0> original)\n // Target is last qubit, controls are 0 to n-2\n const diffControls = [];\n for (let i = 0; i < n - 1; i++)\n diffControls.push(i);\n muGate(reg, 'Z', n - 1, diffControls);\n // 4. Uncompute X\n for (let i = 0; i < n; i++)\n muGate(reg, 'X', i);\n // 5. Uncompute H\n for (let i = 0; i < n; i++)\n muGate(reg, 'H', i);\n}\nfunction muEntangle(reg, i, j) {\n muGate(reg, 'H', i);\n muGate(reg, 'CNOT', j, i);\n}\n/**\n * Quantum Teleportation Protocol\n * Transfers the state of `msgIdx` to `targetIdx` using `ancillaIdx` as a resource.\n * @param reg Register\n * @param msgIdx The qubit containing the state to teleport (Alice)\n * @param ancillaIdx The helper qubit (Alice's half of entanglement)\n * @param targetIdx The destination qubit (Bob)\n */\nfunction muTeleport(reg, msgIdx, ancillaIdx, targetIdx) {\n // 1. Create Bell Pair (Entanglement) between Ancilla and Target\n // Represents the shared link between Alice and Bob\n muEntangle(reg, ancillaIdx, targetIdx);\n // 2. Bell Measurement on Message + Ancilla (Alice's side)\n muGate(reg, 'CNOT', ancillaIdx, msgIdx); // Control: msg, Target: ancilla\n muGate(reg, 'H', msgIdx);\n // 3. Measure Alice's qubits (This collapses them)\n const m1 = muMeasure(reg, msgIdx); // Measures \"Z\" component\n const m2 = muMeasure(reg, ancillaIdx); // Measures \"X\" component\n // 4. Classical Communication & Correction (Bob's side)\n // Apply corrections to Target based on measurements\n if (m2 === 1)\n muGate(reg, 'X', targetIdx);\n if (m1 === 1)\n muGate(reg, 'Z', targetIdx);\n}\n/**\n * Measures a specific qubit in the register, collapsing the superposition.\n * @param reg Quantum Register\n * @param target Index of qubit to measure\n * @returns 0 or 1\n */\nfunction muMeasure(reg, target = 0) {\n const state = reg.value;\n const amplitudes = state.amplitudes;\n let prob0 = 0;\n // 1. Calculate Probability of |0>\n for (let i = 0; i < amplitudes.length; i++) {\n if (((i >> target) & 1) === 0) {\n const a = amplitudes[i];\n prob0 += (a.re * a.re) + (a.im * a.im);\n }\n }\n // 2. Determine Outcome\n const result = Math.random() < prob0 ? 0 : 1;\n const resultProb = result === 0 ? prob0 : (1 - prob0);\n const normFactor = resultProb > 0 ? (1 / Math.sqrt(resultProb)) : 0;\n // 3. Collapse the State (Wavefunction Collapse)\n const newAmps = amplitudes.map((a, i) => {\n const bit = (i >> target) & 1;\n if (bit !== result) {\n return { re: 0, im: 0 };\n }\n else {\n return { re: a.re * normFactor, im: a.im * normFactor };\n }\n });\n // We need to call updateState to ensure reactivity if specialized getters exist\n // But since this file has updateState internal, we can just call it.\n // However, the internal updateState function needs to be in scope. \n // It is defined at line 60. So we are good.\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n return result;\n}\n\n\n//# sourceURL=webpack://Mulan/./src/core/quantum.ts?\n}");
|
|
69
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ activeControls: () => (/* binding */ activeControls),\n/* harmony export */ muControl: () => (/* binding */ muControl),\n/* harmony export */ muEntangle: () => (/* binding */ muEntangle),\n/* harmony export */ muGate: () => (/* binding */ muGate),\n/* harmony export */ muMeasure: () => (/* binding */ muMeasure),\n/* harmony export */ muParallel: () => (/* binding */ muParallel),\n/* harmony export */ muQubit: () => (/* binding */ muQubit),\n/* harmony export */ muRegister: () => (/* binding */ muRegister),\n/* harmony export */ muSearch: () => (/* binding */ muSearch),\n/* harmony export */ muSwitch: () => (/* binding */ muSwitch),\n/* harmony export */ muTeleport: () => (/* binding */ muTeleport)\n/* harmony export */ });\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hooks */ \"./src/core/hooks.ts\");\n\n/**\n * Mulan Quantum (ASTR-Q+) Core\n * Advanced Simulation Engine for multi-qubit registers and entanglement.\n */\n// -- GLOBAL CONTEXT FOR QUANTUM CONTROL --\n// Defined at top to ensure visibility for muGate\nlet activeControls = [];\n/**\n * Creates a quantum register of size n.\n * State vector will have 2^n amplitudes.\n */\nfunction muRegister(n) {\n const numStates = Math.pow(2, n);\n const amplitudes = new Array(numStates).fill(0).map((_, i) => ({\n re: i === 0 ? 1 : 0,\n im: 0\n }));\n return (0,_hooks__WEBPACK_IMPORTED_MODULE_0__.muState)({\n value: {\n size: n,\n amplitudes\n }\n });\n}\n/**\n * Backward compatible muQubit (Single Qubit Register)\n */\nfunction muQubit(initial = 0) {\n const q = muRegister(1);\n if (initial === 1) {\n muGate(q, 'X', 0);\n }\n // Add compatibility properties for Phase 1 components\n // These properties are getters that dynamically access the amplitudes array\n Object.defineProperty(q.value, 'alpha', { get: () => q.value.amplitudes[0] });\n Object.defineProperty(q.value, 'beta', { get: () => q.value.amplitudes[1] });\n return q;\n}\n/**\n * Internal helper to update register state while maintaining compatibility\n */\nfunction updateState(reg, newState) {\n if (newState.size === 1) {\n // Re-inject compatibility getters for muQubit users\n Object.defineProperty(newState, 'alpha', {\n get: () => newState.amplitudes[0],\n configurable: true,\n enumerable: true\n });\n Object.defineProperty(newState, 'beta', {\n get: () => newState.amplitudes[1],\n configurable: true,\n enumerable: true\n });\n }\n reg.value = newState;\n}\nfunction muGate(reg, type, target = 0, control) {\n const state = reg.value;\n const n = state.size;\n const amplitudes = state.amplitudes;\n const newAmps = amplitudes.map(a => (Object.assign({}, a)));\n // Prepare Effective Control (Explicit Arguments + Global Context)\n const effectiveControl = [...(control === undefined ? [] : (Array.isArray(control) ? control : [control])), ...activeControls];\n // Helper: Check if all control bits are 1\n const checkControl = (index, ctrl) => {\n if (ctrl === undefined || (Array.isArray(ctrl) && ctrl.length === 0))\n return true;\n const ctrls = Array.isArray(ctrl) ? ctrl : [ctrl];\n return ctrls.every(c => ((index >> c) & 1) === 1);\n };\n // SWAP Gate (Unique case: affects 2 targets)\n if (type === 'SWAP') {\n const t1 = target;\n const t2 = control; // SWAP uses control arg as second target \n // Iterate only half to avoid double swapping\n for (let i = 0; i < amplitudes.length; i++) {\n // Check active controls for SWAP too\n if (activeControls.length > 0 && !checkControl(i, activeControls))\n continue;\n const bit1 = (i >> t1) & 1;\n const bit2 = (i >> t2) & 1;\n if (bit1 !== bit2) {\n // Determine the swap partner index\n // If i has (0,1), partner has (1,0) at those positions\n const partner = i ^ (1 << t1) ^ (1 << t2);\n if (i < partner) {\n const temp = newAmps[i];\n newAmps[i] = newAmps[partner];\n newAmps[partner] = temp;\n }\n }\n }\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n return;\n }\n // Standard Single-Qubit & Controlled Gates\n if (type === 'H') {\n const s = 1 / Math.sqrt(2);\n const processed = new Set();\n for (let i = 0; i < state.amplitudes.length; i++) {\n if (processed.has(i))\n continue;\n // Check Controls first\n if (!checkControl(i, effectiveControl))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n const a = state.amplitudes[i];\n const b = state.amplitudes[pairedIndex];\n if (targetBit === 0) {\n newAmps[i] = { re: s * (a.re + b.re), im: s * (a.im + b.im) };\n newAmps[pairedIndex] = { re: s * (a.re - b.re), im: s * (a.im - b.im) };\n }\n else {\n newAmps[pairedIndex] = { re: s * (b.re + a.re), im: s * (b.im + a.im) };\n newAmps[i] = { re: s * (b.re - a.re), im: s * (b.im - a.im) };\n }\n processed.add(i);\n processed.add(pairedIndex);\n }\n }\n else if (type === 'X' || type === 'CNOT') {\n // CNOT is just Controlled-X\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, effectiveControl))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n if (i < pairedIndex) {\n const temp = newAmps[i];\n newAmps[i] = newAmps[pairedIndex];\n newAmps[pairedIndex] = temp;\n }\n }\n }\n else if (type === 'Z' || type === 'CZ') {\n // Z and CZ are Phase Flips\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, effectiveControl))\n continue;\n const targetBit = (i >> target) & 1;\n // Z Gate acts on |1>\n if (targetBit === 1) {\n newAmps[i] = { re: -amplitudes[i].re, im: -amplitudes[i].im };\n }\n }\n }\n else if (type === 'Y') {\n // Y: |0> -> i|1>, |1> -> -i|0>\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, effectiveControl))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n if (i < pairedIndex) {\n // We process pairs (i, pairedIndex) where i has 0 at target, paired has 1\n const a = newAmps[i]; // Coeff of |0>\n const b = newAmps[pairedIndex]; // Coeff of |1>\n // New |0> = -i * Old |1>\n newAmps[i] = { re: b.im, im: -b.re };\n // New |1> = i * Old |0>\n newAmps[pairedIndex] = { re: -a.im, im: a.re };\n }\n }\n }\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n}\n/**\n * Mulan Search Logic (Grover's Operator)\n * Automatically constructs a multi-controlled Phase Flip (Z) for a specific target state.\n * This is the core of the \"Quantum Switch\" or \"Quantum Search\" capability.\n * @param reg Quantum Register\n * @param targetState The integer state to \"search\" and mark (e.g. 2 for |10>)\n */\nfunction muSearch(reg, targetState) {\n const n = reg.value.size;\n const controls = [];\n // 1. Identify which bits are 0 and need wrapping with X gates\n // Logic: To mark |010>, we want C-C-Z to trigger on 111.\n // So we apply X to bits that are 0, then C-C-Z, then X again.\n // We treat the last bit as the 'target' for the Z gate, rest as controls\n const targetQubit = n - 1;\n for (let i = 0; i < n; i++) {\n const bit = (targetState >> i) & 1;\n if (i === targetQubit) {\n // If target bit logic requires 0, we flip it to 1 for the Z gate to work\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n else {\n controls.push(i);\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n }\n // 2. Apply Multi-Controlled Z\n muGate(reg, 'Z', targetQubit, controls);\n // 3. Uncompute (Restore 0s)\n for (let i = 0; i < n; i++) {\n const bit = (targetState >> i) & 1;\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n // --- GROVER DIFFUSER (Amplification) ---\n // This flips the probability amplitudes around the mean, boosting the target state.\n // 1. Apply H to all\n for (let i = 0; i < n; i++)\n muGate(reg, 'H', i);\n // 2. Apply X to all\n for (let i = 0; i < n; i++)\n muGate(reg, 'X', i);\n // 3. Multi-Controlled Z (Reflection about |0...0>)\n // We want to flip phase of |11...1> state after X transformation (which corresponds to |00...0> original)\n // Target is last qubit, controls are 0 to n-2\n const diffControls = [];\n for (let i = 0; i < n - 1; i++)\n diffControls.push(i);\n muGate(reg, 'Z', n - 1, diffControls);\n // 4. Uncompute X\n for (let i = 0; i < n; i++)\n muGate(reg, 'X', i);\n // 5. Uncompute H\n for (let i = 0; i < n; i++)\n muGate(reg, 'H', i);\n}\nfunction muEntangle(reg, i, j) {\n muGate(reg, 'H', i);\n muGate(reg, 'CNOT', j, i);\n}\n/**\n * Quantum Teleportation Protocol\n * Transfers the state of `msgIdx` to `targetIdx` using `ancillaIdx` as a resource.\n * @param reg Register\n * @param msgIdx The qubit containing the state to teleport (Alice)\n * @param ancillaIdx The helper qubit (Alice's half of entanglement)\n * @param targetIdx The destination qubit (Bob)\n */\nfunction muTeleport(reg, msgIdx, ancillaIdx, targetIdx) {\n // 1. Create Bell Pair (Entanglement) between Ancilla and Target\n // Represents the shared link between Alice and Bob\n muEntangle(reg, ancillaIdx, targetIdx);\n // 2. Bell Measurement on Message + Ancilla (Alice's side)\n muGate(reg, 'CNOT', ancillaIdx, msgIdx); // Control: msg, Target: ancilla\n muGate(reg, 'H', msgIdx);\n // 3. Measure Alice's qubits (This collapses them)\n const m1 = muMeasure(reg, msgIdx); // Measures \"Z\" component\n const m2 = muMeasure(reg, ancillaIdx); // Measures \"X\" component\n // 4. Classical Communication & Correction (Bob's side)\n // Apply corrections to Target based on measurements\n if (m2 === 1)\n muGate(reg, 'X', targetIdx);\n if (m1 === 1)\n muGate(reg, 'Z', targetIdx);\n}\n/**\n * Measures a specific qubit in the register, collapsing the superposition.\n * @param reg Quantum Register\n * @param target Index of qubit to measure\n * @returns 0 or 1\n */\nfunction muMeasure(reg, target = 0) {\n const state = reg.value;\n const amplitudes = state.amplitudes;\n let prob0 = 0;\n // 1. Calculate Probability of |0>\n for (let i = 0; i < amplitudes.length; i++) {\n if (((i >> target) & 1) === 0) {\n const a = amplitudes[i];\n prob0 += (a.re * a.re) + (a.im * a.im);\n }\n }\n // 2. Determine Outcome\n const result = Math.random() < prob0 ? 0 : 1;\n const resultProb = result === 0 ? prob0 : (1 - prob0);\n const normFactor = resultProb > 0 ? (1 / Math.sqrt(resultProb)) : 0;\n // 3. Collapse the State (Wavefunction Collapse)\n const newAmps = amplitudes.map((a, i) => {\n const bit = (i >> target) & 1;\n if (bit !== result) {\n return { re: 0, im: 0 };\n }\n else {\n return { re: a.re * normFactor, im: a.im * normFactor };\n }\n });\n // We need to call updateState to ensure reactivity if specialized getters exist\n // But since this file has updateState internal, we can just call it.\n // However, the internal updateState function needs to be in scope. \n // It is defined at line 60. So we are good.\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n return result;\n}\n/**\n * Quantum Loop: Parallel Execution\n * Applies a gate to multiple qubits \"simultaneously\" (in simulation steps).\n * Ideal for initialization (Hadamard Transform) or global operations.\n * @param reg Quantum Register\n * @param qubits Array of qubit indices\n * @param gate Gate type to apply (e.g. 'H', 'X')\n */\nfunction muParallel(reg, qubits, gate) {\n if (gate === 'SWAP') {\n throw new Error(\"SWAP cannot be applied in parallel (requires pairs).\");\n }\n // In a real quantum computer, these happen at t=0.\n // Here, we loop, but logical time is constant.\n qubits.forEach(q => muGate(reg, gate, q));\n}\n/**\n * Applies a block of operations controlled by specific qubits.\n * Enables \"Quantum If/Else\".\n */\nfunction muControl(reg, controlQubit, inverse, block) {\n // 1. Setup Context\n if (inverse) {\n muGate(reg, 'X', controlQubit); // Flip 0 to 1 to activate\n }\n activeControls.push(controlQubit);\n try {\n block();\n }\n finally {\n activeControls.pop();\n // Uncompute (Restore 0)\n if (inverse) {\n muGate(reg, 'X', controlQubit);\n }\n }\n}\n/**\n * Quantum Switch: conditional Logic on Superposition\n * Executes different logic branches based on the state of control qubits.\n * Because the register can be in a superposition of states (e.g. |0> + |1>),\n * MULTIPLE branches can execute effectively simultaneously on different subspaces.\n *\n * @param reg Quantum Register\n * @param controlQubit The qubit controlling the switch (Single control for v1)\n * @param cases Object mapping state (0 or 1) to a function executing quantum operations\n */\nfunction muSwitch(reg, controlQubit, cases) {\n if (cases[0]) {\n muControl(reg, controlQubit, true, cases[0]);\n }\n if (cases[1]) {\n muControl(reg, controlQubit, false, cases[1]);\n }\n}\n\n\n//# sourceURL=webpack://Mulan/./src/core/quantum.ts?\n}");
|
|
70
70
|
|
|
71
71
|
/***/ },
|
|
72
72
|
|
|
@@ -76,7 +76,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
76
76
|
\***************************/
|
|
77
77
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
78
78
|
|
|
79
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useMutation: () => (/* binding */ useMutation),\n/* harmony export */ useQuery: () => (/* binding */ useQuery)\n/* harmony export */ });\n/* harmony import */ var _reactive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reactive */ \"./src/core/reactive.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nfunction useQuery(queryFn, options = { enabled: true }) {\n const state = (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive)({\n data: null,\n isLoading: false,\n error: null\n });\n const execute = () => __awaiter(this, void 0, void 0, function* () {\n state.isLoading = true;\n state.error = null;\n try {\n const result = yield queryFn();\n state.data = result;\n }\n catch (err) {\n state.error = err;\n }\n finally {\n state.isLoading = false;\n }\n });\n if (options.enabled) {\n // Run automatically\n (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.effect)(() => {\n // Basic effect wrapper to allow reactivity if queryFn relies on signals\n execute();\n });\n }\n return
|
|
79
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useMutation: () => (/* binding */ useMutation),\n/* harmony export */ useQuery: () => (/* binding */ useQuery)\n/* harmony export */ });\n/* harmony import */ var _reactive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reactive */ \"./src/core/reactive.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nfunction useQuery(queryFn, options = { enabled: true }) {\n const state = (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive)({\n data: null,\n isLoading: false,\n error: null\n });\n const execute = () => __awaiter(this, void 0, void 0, function* () {\n state.isLoading = true;\n state.error = null;\n try {\n const result = yield queryFn();\n state.data = result;\n }\n catch (err) {\n state.error = err;\n }\n finally {\n state.isLoading = false;\n }\n });\n if (options.enabled) {\n // Run automatically\n (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.effect)(() => {\n // Basic effect wrapper to allow reactivity if queryFn relies on signals\n execute();\n });\n }\n return {\n get data() { return state.data; },\n get isLoading() { return state.isLoading; },\n get error() { return state.error; },\n refetch: execute\n };\n}\nfunction useMutation(mutationFn) {\n const state = (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive)({\n data: null,\n isLoading: false,\n error: null\n });\n const mutate = (args) => __awaiter(this, void 0, void 0, function* () {\n state.isLoading = true;\n state.error = null;\n try {\n const result = yield mutationFn(args);\n state.data = result;\n return result;\n }\n catch (err) {\n state.error = err;\n throw err;\n }\n finally {\n state.isLoading = false;\n }\n });\n return {\n get data() { return state.data; },\n get isLoading() { return state.isLoading; },\n get error() { return state.error; },\n mutate\n };\n}\n\n\n//# sourceURL=webpack://Mulan/./src/core/query.ts?\n}");
|
|
80
80
|
|
|
81
81
|
/***/ },
|
|
82
82
|
|
|
@@ -100,6 +100,16 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
100
100
|
|
|
101
101
|
/***/ },
|
|
102
102
|
|
|
103
|
+
/***/ "./src/core/surge.ts"
|
|
104
|
+
/*!***************************!*\
|
|
105
|
+
!*** ./src/core/surge.ts ***!
|
|
106
|
+
\***************************/
|
|
107
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
108
|
+
|
|
109
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ muBurst: () => (/* binding */ muBurst),\n/* harmony export */ muSurge: () => (/* binding */ muSurge)\n/* harmony export */ });\n/**\n * muBurst - Adaptive Non-blocking Iterator\n * Processes large arrays in batches within a frame budget (typically 8-16ms)\n * to keep the UI responsive while executing at near-native loop speeds.\n */\nfunction muBurst(array, callback, options = {}) {\n const { chunkSize = 1000, timeout = 8, onProgress } = options;\n return new Promise((resolve) => {\n let index = 0;\n const total = array.length;\n function process() {\n const start = performance.now();\n // Tight loop for high-speed processing\n while (index < total && (performance.now() - start) < timeout) {\n // Process in smaller bursts to allow more frequent time checks if needed\n const endBurst = Math.min(index + chunkSize, total);\n for (; index < endBurst; index++) {\n callback(array[index], index);\n }\n }\n if (onProgress) {\n onProgress((index / total) * 100);\n }\n if (index < total) {\n requestAnimationFrame(process);\n }\n else {\n resolve();\n }\n }\n process();\n });\n}\n/**\n * muSurge - Truly Parallel Execution\n * Distributes work across CPU cores using Web Workers.\n * Logic must be serializable.\n */\nfunction muSurge(array, taskFn, onProgress) {\n const n = navigator.hardwareConcurrency || 4;\n const chunkSize = Math.ceil(array.length / n);\n const results = new Array(array.length);\n let completedChunks = 0;\n let completedItems = 0;\n // Convert function to string if it isn't already\n const fnStr = typeof taskFn === 'function' ? taskFn.toString() : taskFn;\n const workerCode = `\r\n self.onmessage = function(e) {\r\n const { chunk, startIndex, fnStr } = e.data;\r\n const fn = new Function('item', 'return (' + fnStr + ')(item)');\r\n const results = chunk.map(fn);\r\n self.postMessage({ results, startIndex });\r\n };\r\n `;\n const blob = new Blob([workerCode], { type: 'application/javascript' });\n const workerUrl = URL.createObjectURL(blob);\n return new Promise((resolve) => {\n if (array.length === 0)\n return resolve([]);\n for (let i = 0; i < n; i++) {\n const start = i * chunkSize;\n const end = Math.min(start + chunkSize, array.length);\n if (start >= end) {\n completedChunks++;\n continue;\n }\n const chunk = array.slice(start, end);\n const worker = new Worker(workerUrl);\n worker.onmessage = (e) => {\n const { results: chunkResults, startIndex } = e.data;\n // Merge results back into main array\n for (let j = 0; j < chunkResults.length; j++) {\n results[startIndex + j] = chunkResults[j];\n }\n completedChunks++;\n completedItems += chunkResults.length;\n if (onProgress)\n onProgress((completedItems / array.length) * 100);\n worker.terminate();\n if (completedChunks === n) {\n URL.revokeObjectURL(workerUrl);\n resolve(results);\n }\n };\n worker.postMessage({ chunk, startIndex: start, fnStr });\n }\n });\n}\n\n\n//# sourceURL=webpack://Mulan/./src/core/surge.ts?\n}");
|
|
110
|
+
|
|
111
|
+
/***/ },
|
|
112
|
+
|
|
103
113
|
/***/ "./src/core/vault.ts"
|
|
104
114
|
/*!***************************!*\
|
|
105
115
|
!*** ./src/core/vault.ts ***!
|
|
@@ -116,7 +126,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
116
126
|
\**********************/
|
|
117
127
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
118
128
|
|
|
119
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Component: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),\n/* harmony export */ MuBlochSphereElement: () => (/* reexport safe */ _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_10__.MuBlochSphereElement),\n/* harmony export */ MuComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),\n/* harmony export */ MuInfinity: () => (/* reexport safe */ _components_infinity_list__WEBPACK_IMPORTED_MODULE_11__.MuInfinity),\n/* harmony export */ MuRouter: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),\n/* harmony export */ MuStore: () => (/* reexport safe */ _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore),\n/* harmony export */ Router: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),\n/* harmony export */ Security: () => (/* reexport safe */ _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security),\n/* harmony export */ Signal: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.Signal),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ defineComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent),\n/* harmony export */ effect: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect),\n/* harmony export */ getCurrentInstance: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.getCurrentInstance),\n/* harmony export */ hydrate: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.hydrate),\n/* harmony export */ muEffect: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muEffect),\n/* harmony export */ muEntangle: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muEntangle),\n/* harmony export */ muGate: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muGate),\n/* harmony export */ muGeom: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muGeom),\n/* harmony export */ muMeasure: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muMeasure),\n/* harmony export */ muMemo: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muMemo),\n/* harmony export */ muPulse: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muPulse),\n/* harmony export */ muQubit: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muQubit),\n/* harmony export */ muRegister: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muRegister),\n/* harmony export */ muSearch: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muSearch),\n/* harmony export */ muState: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muState),\n/* harmony export */ muTeleport: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muTeleport),\n/* harmony export */ muVault: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muVault),\n/* harmony export */ onMuDestroy: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuDestroy),\n/* harmony export */ onMuIdle: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuIdle),\n/* harmony export */ onMuInit: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuInit),\n/* harmony export */ onMuMount: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuMount),\n/* harmony export */ onMuResume: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuResume),\n/* harmony export */ onMuShake: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuShake),\n/* harmony export */ onMuVoice: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuVoice),\n/* harmony export */ persistent: () => (/* reexport safe */ _core_vault__WEBPACK_IMPORTED_MODULE_8__.persistent),\n/* harmony export */ reactive: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive),\n/* harmony export */ ref: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.ref),\n/* harmony export */ render: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render),\n/* harmony export */ renderToString: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.renderToString),\n/* harmony export */ sanitize: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.sanitize),\n/* harmony export */ setCurrentInstance: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.setCurrentInstance),\n/* harmony export */ useMutation: () => (/* reexport safe */ _core_query__WEBPACK_IMPORTED_MODULE_7__.useMutation),\n/* harmony export */ useQuery: () => (/* reexport safe */ _core_query__WEBPACK_IMPORTED_MODULE_7__.useQuery)\n/* harmony export */ });\n/* harmony import */ var _core_reactive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/reactive */ \"./src/core/reactive.ts\");\n/* harmony import */ var _core_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core/component */ \"./src/core/component.ts\");\n/* harmony import */ var _core_renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./core/renderer */ \"./src/core/renderer.ts\");\n/* harmony import */ var _router_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./router/index */ \"./src/router/index.ts\");\n/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./store/index */ \"./src/store/index.ts\");\n/* harmony import */ var _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./security/sanitizer */ \"./src/security/sanitizer.ts\");\n/* harmony import */ var _core_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./core/hooks */ \"./src/core/hooks.ts\");\n/* harmony import */ var _core_query__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./core/query */ \"./src/core/query.ts\");\n/* harmony import */ var _core_vault__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./core/vault */ \"./src/core/vault.ts\");\n/* harmony import */ var _core_quantum__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./core/quantum */ \"./src/core/quantum.ts\");\n/* harmony import */ var _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/bloch-sphere */ \"./src/components/bloch-sphere.ts\");\n/* harmony import */ var _components_infinity_list__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/infinity-list */ \"./src/components/infinity-list.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n// Global Mulan Object for non-module usage\n\n\n\n\n\n\n\n\n\n\nconst Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive,\n effect: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect, Component: _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent, defineComponent: _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent, Router: _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter, createRouter: _router_index__WEBPACK_IMPORTED_MODULE_3__.createRouter, Store: _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore, Security: _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security }, _core_hooks__WEBPACK_IMPORTED_MODULE_6__), _core_query__WEBPACK_IMPORTED_MODULE_7__), _core_quantum__WEBPACK_IMPORTED_MODULE_9__), _components_infinity_list__WEBPACK_IMPORTED_MODULE_11__), { render: _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render, \n // MULAN INSIGHT: Branded Logging\n log: (msg, ...args) => {\n console.log(`%c[MulanJS]%c ${msg}`, \"color: #ff3e00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n }, warn: (msg, ...args) => {\n console.warn(`%c[MulanJS]%c ${msg}`, \"color: #ffcc00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n }, error: (msg, ...args) => {\n console.error(`%c[MulanJS]%c ${msg}`, \"color: #ff0000; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n } });\n// Security: Freeze the object to prevent runtime tampering\nObject.freeze(Mulan);\nObject.freeze(Mulan.Security);\n// MULAN INSIGHT: Initialize Global Registry\nif (typeof window !== 'undefined') {\n window.__MULAN_INSIGHT__ = window.__MULAN_INSIGHT__ || { components: new Map() };\n // MULAN INSIGHT: HMR Support\n window.__MULAN_REFRESH__ = () => {\n var _a;\n const components = (_a = window.__MULAN_INSIGHT__) === null || _a === void 0 ? void 0 : _a.components;\n if (components) {\n components.forEach((comp) => {\n if (comp && typeof comp.update === 'function') {\n // Force refresh\n comp.update();\n }\n });\n }\n };\n}\nif (typeof window !== 'undefined') {\n window.Mulan = Mulan;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Mulan);\n\n\n//# sourceURL=webpack://Mulan/./src/index.ts?\n}");
|
|
129
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Component: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),\n/* harmony export */ MuBlochSphereElement: () => (/* reexport safe */ _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_11__.MuBlochSphereElement),\n/* harmony export */ MuComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),\n/* harmony export */ MuInfinity: () => (/* reexport safe */ _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__.MuInfinity),\n/* harmony export */ MuRouter: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),\n/* harmony export */ MuStore: () => (/* reexport safe */ _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore),\n/* harmony export */ Router: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),\n/* harmony export */ Security: () => (/* reexport safe */ _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security),\n/* harmony export */ Signal: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.Signal),\n/* harmony export */ activeControls: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.activeControls),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ defineComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent),\n/* harmony export */ effect: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect),\n/* harmony export */ getCurrentInstance: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.getCurrentInstance),\n/* harmony export */ hydrate: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.hydrate),\n/* harmony export */ muBurst: () => (/* reexport safe */ _core_surge__WEBPACK_IMPORTED_MODULE_10__.muBurst),\n/* harmony export */ muControl: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muControl),\n/* harmony export */ muEffect: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muEffect),\n/* harmony export */ muEntangle: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muEntangle),\n/* harmony export */ muGate: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muGate),\n/* harmony export */ muGeom: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muGeom),\n/* harmony export */ muMeasure: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muMeasure),\n/* harmony export */ muMemo: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muMemo),\n/* harmony export */ muParallel: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muParallel),\n/* harmony export */ muPulse: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muPulse),\n/* harmony export */ muQubit: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muQubit),\n/* harmony export */ muRegister: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muRegister),\n/* harmony export */ muSearch: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muSearch),\n/* harmony export */ muState: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muState),\n/* harmony export */ muSurge: () => (/* reexport safe */ _core_surge__WEBPACK_IMPORTED_MODULE_10__.muSurge),\n/* harmony export */ muSwitch: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muSwitch),\n/* harmony export */ muTeleport: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muTeleport),\n/* harmony export */ muVault: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muVault),\n/* harmony export */ onMuDestroy: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuDestroy),\n/* harmony export */ onMuIdle: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuIdle),\n/* harmony export */ onMuInit: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuInit),\n/* harmony export */ onMuMount: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuMount),\n/* harmony export */ onMuResume: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuResume),\n/* harmony export */ onMuShake: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuShake),\n/* harmony export */ onMuVoice: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuVoice),\n/* harmony export */ persistent: () => (/* reexport safe */ _core_vault__WEBPACK_IMPORTED_MODULE_8__.persistent),\n/* harmony export */ reactive: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive),\n/* harmony export */ ref: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.ref),\n/* harmony export */ render: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render),\n/* harmony export */ renderToString: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.renderToString),\n/* harmony export */ sanitize: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.sanitize),\n/* harmony export */ setCurrentInstance: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.setCurrentInstance),\n/* harmony export */ useMutation: () => (/* reexport safe */ _core_query__WEBPACK_IMPORTED_MODULE_7__.useMutation),\n/* harmony export */ useQuery: () => (/* reexport safe */ _core_query__WEBPACK_IMPORTED_MODULE_7__.useQuery)\n/* harmony export */ });\n/* harmony import */ var _core_reactive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/reactive */ \"./src/core/reactive.ts\");\n/* harmony import */ var _core_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core/component */ \"./src/core/component.ts\");\n/* harmony import */ var _core_renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./core/renderer */ \"./src/core/renderer.ts\");\n/* harmony import */ var _router_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./router/index */ \"./src/router/index.ts\");\n/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./store/index */ \"./src/store/index.ts\");\n/* harmony import */ var _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./security/sanitizer */ \"./src/security/sanitizer.ts\");\n/* harmony import */ var _core_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./core/hooks */ \"./src/core/hooks.ts\");\n/* harmony import */ var _core_query__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./core/query */ \"./src/core/query.ts\");\n/* harmony import */ var _core_vault__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./core/vault */ \"./src/core/vault.ts\");\n/* harmony import */ var _core_quantum__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./core/quantum */ \"./src/core/quantum.ts\");\n/* harmony import */ var _core_surge__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./core/surge */ \"./src/core/surge.ts\");\n/* harmony import */ var _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/bloch-sphere */ \"./src/components/bloch-sphere.ts\");\n/* harmony import */ var _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./components/infinity-list */ \"./src/components/infinity-list.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Global Mulan Object for non-module usage\n\n\n\n\n\n\n\n\n\n\n\nconst Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive,\n effect: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect, Component: _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent, defineComponent: _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent, Router: _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter, createRouter: _router_index__WEBPACK_IMPORTED_MODULE_3__.createRouter, Store: _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore, Security: _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security }, _core_hooks__WEBPACK_IMPORTED_MODULE_6__), _core_query__WEBPACK_IMPORTED_MODULE_7__), _core_quantum__WEBPACK_IMPORTED_MODULE_9__), _core_surge__WEBPACK_IMPORTED_MODULE_10__), _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__), { render: _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render, \n // MULAN INSIGHT: Branded Logging\n log: (msg, ...args) => {\n console.log(`%c[MulanJS]%c ${msg}`, \"color: #ff3e00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n }, warn: (msg, ...args) => {\n console.warn(`%c[MulanJS]%c ${msg}`, \"color: #ffcc00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n }, error: (msg, ...args) => {\n console.error(`%c[MulanJS]%c ${msg}`, \"color: #ff0000; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n } });\n// Security: Freeze the object to prevent runtime tampering\nObject.freeze(Mulan);\nObject.freeze(Mulan.Security);\n// MULAN INSIGHT: Initialize Global Registry\nif (typeof window !== 'undefined') {\n window.__MULAN_INSIGHT__ = window.__MULAN_INSIGHT__ || { components: new Map() };\n // MULAN INSIGHT: HMR Support\n window.__MULAN_REFRESH__ = () => {\n var _a;\n const components = (_a = window.__MULAN_INSIGHT__) === null || _a === void 0 ? void 0 : _a.components;\n if (components) {\n components.forEach((comp) => {\n if (comp && typeof comp.update === 'function') {\n // Force refresh\n comp.update();\n }\n });\n }\n };\n}\nif (typeof window !== 'undefined') {\n window.Mulan = Mulan;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Mulan);\n\n\n//# sourceURL=webpack://Mulan/./src/index.ts?\n}");
|
|
120
130
|
|
|
121
131
|
/***/ },
|
|
122
132
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Mulan Quantum (ASTR-Q+) Core
|
|
3
3
|
* Advanced Simulation Engine for multi-qubit registers and entanglement.
|
|
4
4
|
*/
|
|
5
|
+
export declare let activeControls: number[];
|
|
5
6
|
export interface Amplitude {
|
|
6
7
|
re: number;
|
|
7
8
|
im: number;
|
|
@@ -48,3 +49,30 @@ export declare function muTeleport(reg: any, msgIdx: number, ancillaIdx: number,
|
|
|
48
49
|
* @returns 0 or 1
|
|
49
50
|
*/
|
|
50
51
|
export declare function muMeasure(reg: any, target?: number): number;
|
|
52
|
+
/**
|
|
53
|
+
* Quantum Loop: Parallel Execution
|
|
54
|
+
* Applies a gate to multiple qubits "simultaneously" (in simulation steps).
|
|
55
|
+
* Ideal for initialization (Hadamard Transform) or global operations.
|
|
56
|
+
* @param reg Quantum Register
|
|
57
|
+
* @param qubits Array of qubit indices
|
|
58
|
+
* @param gate Gate type to apply (e.g. 'H', 'X')
|
|
59
|
+
*/
|
|
60
|
+
export declare function muParallel(reg: any, qubits: number[], gate: GateType): void;
|
|
61
|
+
/**
|
|
62
|
+
* Applies a block of operations controlled by specific qubits.
|
|
63
|
+
* Enables "Quantum If/Else".
|
|
64
|
+
*/
|
|
65
|
+
export declare function muControl(reg: any, controlQubit: number, inverse: boolean, block: () => void): void;
|
|
66
|
+
/**
|
|
67
|
+
* Quantum Switch: conditional Logic on Superposition
|
|
68
|
+
* Executes different logic branches based on the state of control qubits.
|
|
69
|
+
* Because the register can be in a superposition of states (e.g. |0> + |1>),
|
|
70
|
+
* MULTIPLE branches can execute effectively simultaneously on different subspaces.
|
|
71
|
+
*
|
|
72
|
+
* @param reg Quantum Register
|
|
73
|
+
* @param controlQubit The qubit controlling the switch (Single control for v1)
|
|
74
|
+
* @param cases Object mapping state (0 or 1) to a function executing quantum operations
|
|
75
|
+
*/
|
|
76
|
+
export declare function muSwitch(reg: any, controlQubit: number, cases: {
|
|
77
|
+
[key: number]: () => void;
|
|
78
|
+
}): void;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
export declare function useQuery<T>(queryFn: () => Promise<T>, options?: {
|
|
2
2
|
enabled?: boolean;
|
|
3
3
|
}): {
|
|
4
|
+
readonly data: T | null;
|
|
5
|
+
readonly isLoading: boolean;
|
|
6
|
+
readonly error: any;
|
|
4
7
|
refetch: () => Promise<void>;
|
|
5
|
-
data: T | null;
|
|
6
|
-
isLoading: boolean;
|
|
7
|
-
error: any;
|
|
8
8
|
};
|
|
9
9
|
export declare function useMutation<T, A = void>(mutationFn: (args: A) => Promise<T>): {
|
|
10
|
+
readonly data: T | null;
|
|
11
|
+
readonly isLoading: boolean;
|
|
12
|
+
readonly error: any;
|
|
10
13
|
mutate: (args: A) => Promise<T>;
|
|
11
|
-
data: T | null;
|
|
12
|
-
isLoading: boolean;
|
|
13
|
-
error: any;
|
|
14
14
|
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mulan Surge (ASTR-S)
|
|
3
|
+
* High-performance classical iteration and parallel processing engine.
|
|
4
|
+
*/
|
|
5
|
+
export interface BurstOptions {
|
|
6
|
+
chunkSize?: number;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
onProgress?: (progress: number) => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* muBurst - Adaptive Non-blocking Iterator
|
|
12
|
+
* Processes large arrays in batches within a frame budget (typically 8-16ms)
|
|
13
|
+
* to keep the UI responsive while executing at near-native loop speeds.
|
|
14
|
+
*/
|
|
15
|
+
export declare function muBurst<T>(array: T[], callback: (item: T, index: number) => void, options?: BurstOptions): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* muSurge - Truly Parallel Execution
|
|
18
|
+
* Distributes work across CPU cores using Web Workers.
|
|
19
|
+
* Logic must be serializable.
|
|
20
|
+
*/
|
|
21
|
+
export declare function muSurge<T, R>(array: T[], taskFn: string | ((item: T) => R), onProgress?: (p: number) => void): Promise<R[]>;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export * from './core/hooks';
|
|
|
8
8
|
export * from './core/query';
|
|
9
9
|
export * from './core/vault';
|
|
10
10
|
export * from './core/quantum';
|
|
11
|
+
export * from './core/surge';
|
|
11
12
|
export * from './components/bloch-sphere';
|
|
12
13
|
export * from './components/infinity-list';
|
|
13
14
|
import { reactive, effect } from './core/reactive';
|
|
@@ -17,6 +18,7 @@ import { MuStore } from './store/index';
|
|
|
17
18
|
import { Security } from './security/sanitizer';
|
|
18
19
|
import { render } from './core/renderer';
|
|
19
20
|
import * as Quantum from './core/quantum';
|
|
21
|
+
import * as Surge from './core/surge';
|
|
20
22
|
import * as InfinityList from './components/infinity-list';
|
|
21
23
|
declare const Mulan: {
|
|
22
24
|
render: typeof render;
|
|
@@ -24,6 +26,8 @@ declare const Mulan: {
|
|
|
24
26
|
warn: (msg: string, ...args: any[]) => void;
|
|
25
27
|
error: (msg: string, ...args: any[]) => void;
|
|
26
28
|
MuInfinity: typeof InfinityList.MuInfinity;
|
|
29
|
+
muBurst<T>(array: T[], callback: (item: T, index: number) => void, options?: Surge.BurstOptions): Promise<void>;
|
|
30
|
+
muSurge<T, R>(array: T[], taskFn: string | ((item: T) => R), onProgress?: (p: number) => void): Promise<R[]>;
|
|
27
31
|
muRegister(n: number): any;
|
|
28
32
|
muQubit(initial?: 0 | 1): any;
|
|
29
33
|
muGate(reg: any, type: Quantum.GateType, target?: number, control?: number | number[]): void;
|
|
@@ -31,19 +35,25 @@ declare const Mulan: {
|
|
|
31
35
|
muEntangle(reg: any, i: number, j: number): void;
|
|
32
36
|
muTeleport(reg: any, msgIdx: number, ancillaIdx: number, targetIdx: number): void;
|
|
33
37
|
muMeasure(reg: any, target?: number): number;
|
|
38
|
+
muParallel(reg: any, qubits: number[], gate: Quantum.GateType): void;
|
|
39
|
+
muControl(reg: any, controlQubit: number, inverse: boolean, block: () => void): void;
|
|
40
|
+
muSwitch(reg: any, controlQubit: number, cases: {
|
|
41
|
+
[key: number]: () => void;
|
|
42
|
+
}): void;
|
|
43
|
+
activeControls: number[];
|
|
34
44
|
useQuery<T>(queryFn: () => Promise<T>, options?: {
|
|
35
45
|
enabled?: boolean;
|
|
36
46
|
}): {
|
|
47
|
+
readonly data: T | null;
|
|
48
|
+
readonly isLoading: boolean;
|
|
49
|
+
readonly error: any;
|
|
37
50
|
refetch: () => Promise<void>;
|
|
38
|
-
data: T | null;
|
|
39
|
-
isLoading: boolean;
|
|
40
|
-
error: any;
|
|
41
51
|
};
|
|
42
52
|
useMutation<T, A = void>(mutationFn: (args: A) => Promise<T>): {
|
|
53
|
+
readonly data: T | null;
|
|
54
|
+
readonly isLoading: boolean;
|
|
55
|
+
readonly error: any;
|
|
43
56
|
mutate: (args: A) => Promise<T>;
|
|
44
|
-
data: T | null;
|
|
45
|
-
isLoading: boolean;
|
|
46
|
-
error: any;
|
|
47
57
|
};
|
|
48
58
|
setCurrentInstance(instance: any): void;
|
|
49
59
|
getCurrentInstance(): any;
|
package/package.json
CHANGED