atmx-react 0.48.0 → 0.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -2
- package/dist/index.d.ts +1 -2
- package/dist/index.js +125 -147
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +125 -147
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -102,12 +102,11 @@ declare function useAxiomQuery<T>(queryDef: AxiomQueryDef<T>, options?: {
|
|
|
102
102
|
declare function useAxiomMutation<T, A>(mutationFn: (args: A) => AxiomQueryDef<T>): {
|
|
103
103
|
execute: (args: A, options?: {
|
|
104
104
|
headers?: Record<string, string>;
|
|
105
|
-
}) => Promise<
|
|
105
|
+
}) => Promise<T>;
|
|
106
106
|
state: AxiomState<T>;
|
|
107
107
|
data: T | null;
|
|
108
108
|
isMutating: boolean;
|
|
109
109
|
error: atmx_web.AxiomError | null;
|
|
110
|
-
getFieldError: (fieldName: string) => string | null;
|
|
111
110
|
};
|
|
112
111
|
|
|
113
112
|
type Listener<T> = (state: AxiomState<T>) => void;
|
package/dist/index.d.ts
CHANGED
|
@@ -102,12 +102,11 @@ declare function useAxiomQuery<T>(queryDef: AxiomQueryDef<T>, options?: {
|
|
|
102
102
|
declare function useAxiomMutation<T, A>(mutationFn: (args: A) => AxiomQueryDef<T>): {
|
|
103
103
|
execute: (args: A, options?: {
|
|
104
104
|
headers?: Record<string, string>;
|
|
105
|
-
}) => Promise<
|
|
105
|
+
}) => Promise<T>;
|
|
106
106
|
state: AxiomState<T>;
|
|
107
107
|
data: T | null;
|
|
108
108
|
isMutating: boolean;
|
|
109
109
|
error: atmx_web.AxiomError | null;
|
|
110
|
-
getFieldError: (fieldName: string) => string | null;
|
|
111
110
|
};
|
|
112
111
|
|
|
113
112
|
type Listener<T> = (state: AxiomState<T>) => void;
|
package/dist/index.js
CHANGED
|
@@ -426,15 +426,6 @@ var AxTrigger = ({ onTrigger, once = true, children }) => {
|
|
|
426
426
|
|
|
427
427
|
// src/hooks/useAxiomMutation.ts
|
|
428
428
|
var import_react7 = require("react");
|
|
429
|
-
function extractFieldError(error, fieldName) {
|
|
430
|
-
if (error?.code !== "ValidationError" || !error?.details) return null;
|
|
431
|
-
const lines = error.details.split("\n");
|
|
432
|
-
for (const line of lines) {
|
|
433
|
-
if (line.startsWith(fieldName + ":"))
|
|
434
|
-
return line.substring(fieldName.length + 1).trim();
|
|
435
|
-
}
|
|
436
|
-
return null;
|
|
437
|
-
}
|
|
438
429
|
function useAxiomMutation(mutationFn) {
|
|
439
430
|
const { isReady, config } = useAxiom();
|
|
440
431
|
const [state, setState] = (0, import_react7.useState)({
|
|
@@ -453,149 +444,137 @@ function useAxiomMutation(mutationFn) {
|
|
|
453
444
|
};
|
|
454
445
|
}, []);
|
|
455
446
|
const execute = (0, import_react7.useCallback)(
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
if (rawDef.payload !== void 0 && rawDef.payload !== null) {
|
|
484
|
-
payloadObj = rawDef.serializer ? rawDef.serializer(rawDef.payload) : rawDef.payload;
|
|
485
|
-
let payloadBytes;
|
|
486
|
-
if (isFormUrlEncoded && typeof payloadObj === "object") {
|
|
487
|
-
const params = new URLSearchParams();
|
|
488
|
-
for (const [k, v] of Object.entries(payloadObj))
|
|
489
|
-
params.append(k, String(v));
|
|
490
|
-
payloadBytes = new TextEncoder().encode(params.toString());
|
|
491
|
-
} else {
|
|
492
|
-
payloadBytes = new TextEncoder().encode(JSON.stringify(payloadObj));
|
|
493
|
-
}
|
|
494
|
-
payloadPtr = (0, import_atmx_web.allocBytes)(payloadBytes);
|
|
495
|
-
payloadLen = payloadBytes.length;
|
|
496
|
-
}
|
|
497
|
-
if (config.debug) {
|
|
498
|
-
console.groupCollapsed(
|
|
499
|
-
`%c\u2794 WASM MUTATE [#${reqId}]`,
|
|
500
|
-
`color: #7c3aed; font-weight: bold;`
|
|
447
|
+
// ✨ FIX: execute now returns a Promise<T>!
|
|
448
|
+
(args, options) => {
|
|
449
|
+
return new Promise((resolve, reject) => {
|
|
450
|
+
if (!isReady || !config) return reject(new Error("ATMX not ready"));
|
|
451
|
+
const rawDef = mutationFn(args);
|
|
452
|
+
rawDef.headers = options?.headers;
|
|
453
|
+
const reqId = getNextReqId();
|
|
454
|
+
if (isMounted.current)
|
|
455
|
+
setState({
|
|
456
|
+
status: "loading",
|
|
457
|
+
data: null,
|
|
458
|
+
error: null,
|
|
459
|
+
isFetching: false,
|
|
460
|
+
isMutating: true,
|
|
461
|
+
source: null
|
|
462
|
+
});
|
|
463
|
+
const syntheticRoute = {
|
|
464
|
+
id: rawDef.endpointId,
|
|
465
|
+
namespace: rawDef.namespace,
|
|
466
|
+
name: rawDef.name || "unknown",
|
|
467
|
+
method: rawDef.method,
|
|
468
|
+
pathTemplate: rawDef.path,
|
|
469
|
+
isStream: !!rawDef.isStream
|
|
470
|
+
};
|
|
471
|
+
const { path } = (0, import_atmx_web2.buildRequestPath)(syntheticRoute, rawDef.args);
|
|
472
|
+
const isFormUrlEncoded = Object.entries(rawDef.headers || {}).some(
|
|
473
|
+
([k, v]) => k.toLowerCase() === "content-type" && v.includes("application/x-www-form-urlencoded")
|
|
501
474
|
);
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
const evtName = response.eventType === 1 ? "NetworkSuccess" : response.eventType === 2 ? "CacheHit" : response.eventType === 3 ? "CacheHitAndFetching" : response.eventType === 4 ? "Error" : "Complete";
|
|
514
|
-
console.groupCollapsed(
|
|
515
|
-
`%c\u2190 WASM RESP [#${reqId}]`,
|
|
516
|
-
`color: #059669; font-weight: bold;`
|
|
517
|
-
);
|
|
518
|
-
console.log("Event Type:", evtName);
|
|
519
|
-
if (response.data) console.log("Data:", response.data);
|
|
520
|
-
if (response.error) console.log("Error:", response.error);
|
|
521
|
-
console.groupEnd();
|
|
522
|
-
}
|
|
523
|
-
if (response.eventType === 4) {
|
|
524
|
-
setState({
|
|
525
|
-
status: "error",
|
|
526
|
-
error: response.error || null,
|
|
527
|
-
isFetching: false,
|
|
528
|
-
isMutating: false,
|
|
529
|
-
data: null,
|
|
530
|
-
source: null
|
|
531
|
-
});
|
|
532
|
-
return;
|
|
475
|
+
let payloadPtr = 0, payloadLen = 0;
|
|
476
|
+
if (rawDef.payload !== void 0 && rawDef.payload !== null) {
|
|
477
|
+
const payloadObj = rawDef.serializer ? rawDef.serializer(rawDef.payload) : rawDef.payload;
|
|
478
|
+
let payloadBytes;
|
|
479
|
+
if (isFormUrlEncoded && typeof payloadObj === "object") {
|
|
480
|
+
const params = new URLSearchParams();
|
|
481
|
+
for (const [k, v] of Object.entries(payloadObj))
|
|
482
|
+
params.append(k, String(v));
|
|
483
|
+
payloadBytes = new TextEncoder().encode(params.toString());
|
|
484
|
+
} else {
|
|
485
|
+
payloadBytes = new TextEncoder().encode(JSON.stringify(payloadObj));
|
|
533
486
|
}
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
487
|
+
payloadPtr = (0, import_atmx_web.allocBytes)(payloadBytes);
|
|
488
|
+
payloadLen = payloadBytes.length;
|
|
489
|
+
}
|
|
490
|
+
import_atmx_web3.pendingRequests.set(reqId, {
|
|
491
|
+
isStream: !!rawDef.isStream,
|
|
492
|
+
onResponse: (response) => {
|
|
493
|
+
if (response.eventType === 4) {
|
|
494
|
+
if (isMounted.current)
|
|
495
|
+
setState({
|
|
496
|
+
status: "error",
|
|
497
|
+
error: response.error || null,
|
|
498
|
+
isFetching: false,
|
|
499
|
+
isMutating: false,
|
|
500
|
+
data: null,
|
|
501
|
+
source: null
|
|
502
|
+
});
|
|
503
|
+
reject(response.error);
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
if (response.data) {
|
|
507
|
+
try {
|
|
508
|
+
let source = "network";
|
|
509
|
+
if (response.eventType === 2 || response.eventType === 3)
|
|
510
|
+
source = "cache";
|
|
511
|
+
const decoded = rawDef.decoder(response.data);
|
|
512
|
+
if (isMounted.current)
|
|
513
|
+
setState({
|
|
514
|
+
status: "success",
|
|
515
|
+
data: decoded,
|
|
516
|
+
error: null,
|
|
517
|
+
isFetching: false,
|
|
518
|
+
isMutating: false,
|
|
519
|
+
source
|
|
520
|
+
});
|
|
521
|
+
resolve(decoded);
|
|
522
|
+
} catch (e) {
|
|
523
|
+
const err = {
|
|
551
524
|
message: "Decoding failed",
|
|
552
525
|
details: String(e)
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
526
|
+
};
|
|
527
|
+
if (isMounted.current)
|
|
528
|
+
setState({
|
|
529
|
+
status: "error",
|
|
530
|
+
error: err,
|
|
531
|
+
isFetching: false,
|
|
532
|
+
isMutating: false,
|
|
533
|
+
data: null,
|
|
534
|
+
source: null
|
|
535
|
+
});
|
|
536
|
+
reject(err);
|
|
537
|
+
}
|
|
559
538
|
}
|
|
539
|
+
},
|
|
540
|
+
onComplete: () => {
|
|
541
|
+
if (isMounted.current)
|
|
542
|
+
setState((prev) => ({
|
|
543
|
+
...prev,
|
|
544
|
+
isMutating: false,
|
|
545
|
+
isFetching: false
|
|
546
|
+
}));
|
|
560
547
|
}
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
548
|
+
});
|
|
549
|
+
const nsStr = (0, import_atmx_web.allocString)(rawDef.namespace);
|
|
550
|
+
const mStr = (0, import_atmx_web.allocString)(rawDef.method);
|
|
551
|
+
const pStr = (0, import_atmx_web.allocString)(path);
|
|
552
|
+
const tpStr = (0, import_atmx_web.allocString)("");
|
|
553
|
+
const hStr = (0, import_atmx_web.allocString)(
|
|
554
|
+
rawDef.headers ? JSON.stringify(rawDef.headers) : ""
|
|
555
|
+
);
|
|
556
|
+
import_atmx_web.wasmEngine.axiom_wasm_call(
|
|
557
|
+
reqId,
|
|
558
|
+
nsStr.ptr,
|
|
559
|
+
nsStr.len,
|
|
560
|
+
rawDef.endpointId,
|
|
561
|
+
mStr.ptr,
|
|
562
|
+
mStr.len,
|
|
563
|
+
pStr.ptr,
|
|
564
|
+
pStr.len,
|
|
565
|
+
tpStr.ptr,
|
|
566
|
+
tpStr.len,
|
|
567
|
+
hStr.ptr,
|
|
568
|
+
hStr.len,
|
|
569
|
+
payloadPtr,
|
|
570
|
+
payloadLen
|
|
571
|
+
);
|
|
572
|
+
import_atmx_web.wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);
|
|
573
|
+
import_atmx_web.wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);
|
|
574
|
+
import_atmx_web.wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);
|
|
575
|
+
import_atmx_web.wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);
|
|
576
|
+
import_atmx_web.wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);
|
|
570
577
|
});
|
|
571
|
-
const nsStr = (0, import_atmx_web.allocString)(rawDef.namespace);
|
|
572
|
-
const mStr = (0, import_atmx_web.allocString)(rawDef.method);
|
|
573
|
-
const pStr = (0, import_atmx_web.allocString)(path);
|
|
574
|
-
const tpStr = (0, import_atmx_web.allocString)("");
|
|
575
|
-
const hStr = (0, import_atmx_web.allocString)(
|
|
576
|
-
rawDef.headers ? JSON.stringify(rawDef.headers) : ""
|
|
577
|
-
);
|
|
578
|
-
import_atmx_web.wasmEngine.axiom_wasm_call(
|
|
579
|
-
reqId,
|
|
580
|
-
nsStr.ptr,
|
|
581
|
-
nsStr.len,
|
|
582
|
-
rawDef.endpointId,
|
|
583
|
-
mStr.ptr,
|
|
584
|
-
mStr.len,
|
|
585
|
-
pStr.ptr,
|
|
586
|
-
pStr.len,
|
|
587
|
-
tpStr.ptr,
|
|
588
|
-
tpStr.len,
|
|
589
|
-
hStr.ptr,
|
|
590
|
-
hStr.len,
|
|
591
|
-
payloadPtr,
|
|
592
|
-
payloadLen
|
|
593
|
-
);
|
|
594
|
-
import_atmx_web.wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);
|
|
595
|
-
import_atmx_web.wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);
|
|
596
|
-
import_atmx_web.wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);
|
|
597
|
-
import_atmx_web.wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);
|
|
598
|
-
import_atmx_web.wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);
|
|
599
578
|
},
|
|
600
579
|
[isReady, config, mutationFn]
|
|
601
580
|
);
|
|
@@ -604,8 +583,7 @@ function useAxiomMutation(mutationFn) {
|
|
|
604
583
|
state,
|
|
605
584
|
data: state.data,
|
|
606
585
|
isMutating: state.isMutating,
|
|
607
|
-
error: state.error
|
|
608
|
-
getFieldError: (fieldName) => extractFieldError(state.error, fieldName)
|
|
586
|
+
error: state.error
|
|
609
587
|
};
|
|
610
588
|
}
|
|
611
589
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/core-bridge.ts","../src/context/AxiomProvider.tsx","../src/context/AxiomDataContext.tsx","../src/hooks/useAxiomQuery.ts","../src/hooks/useAxiom.ts","../src/core/ActiveQuery.ts","../src/core/QueryManager.ts","../src/components/AxQuery.tsx","../src/components/AxWhen.tsx","../src/components/AxTrigger.tsx","../src/hooks/useAxiomMutation.ts"],"sourcesContent":["// FILE: src/index.ts\nexport { setAuthToken, clearAuthToken } from \"./utils/core-bridge\";\n// 1. Context & Provider (Global Lifecycle)\nexport { AxiomProvider, AxiomContext } from \"./context/AxiomProvider\";\n\n// 2. The Context Stack (InheritedWidget Pattern)\n// This allows nested components to reach up and grab parent $data\nexport {\n AxiomDataContext,\n useAxiomContext,\n useAxiomData,\n} from \"./context/AxiomDataContext\";\n\n// 3. High-Level Declarative Components\n// These wrap the hooks to give a \"Zero-JS\" feel to React\nexport { AxQuery } from \"./components/AxQuery\";\nexport { AxWhen } from \"./components/AxWhen\";\nexport { AxTrigger } from \"./components/AxTrigger\";\n\n// 4. Core Hooks\n// Used primarily by the generated SDK, but available for custom logic\nexport { useAxiom } from \"./hooks/useAxiom\";\nexport { useAxiomQuery } from \"./hooks/useAxiomQuery\";\nexport { useAxiomMutation } from \"./hooks/useAxiomMutation\";\n\n// 5. Shared State & Registry\n// Manages deduplication and syncing across components\nexport { axiomQueryManager } from \"./core/QueryManager\";\n\n// 6. Core Types\n// Essential for type-safe development and generated SDKs\nexport type {\n AtmxConfig,\n AxiomError,\n AxiomResponse,\n AxiomQueryDef,\n AxiomState,\n AxiomStatus,\n} from \"./utils/core-bridge\";\n","import {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n setAuthToken,\n clearAuthToken,\n} from \"atmx-web\";\nimport { resolveRoute, Route, buildRequestPath } from \"atmx-web\";\nimport { pendingRequests } from \"atmx-web\";\nimport { AtmxConfig, AxiomResponse, AxiomError, EventType } from \"atmx-web\";\n\nlet globalReqCounter = 0;\nexport const getNextReqId = () => ++globalReqCounter;\n\nexport interface AxiomQueryDef<T> {\n namespace: string;\n name: string;\n endpointId: number;\n method: string;\n path: string;\n payload?: any;\n decoder: (json: any) => T;\n serializer?: (payload: any) => any;\n args: Record<string, any>;\n isStream?: boolean;\n headers?: Record<string, string>; // ✨ NEW\n}\n\nexport type AxiomStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\nexport interface AxiomState<T> {\n status: AxiomStatus;\n data: T | null;\n error: AxiomError | null;\n isFetching: boolean;\n isMutating: boolean;\n source: \"cache\" | \"network\" | null;\n}\n\nexport {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n resolveRoute,\n buildRequestPath,\n pendingRequests,\n setAuthToken,\n clearAuthToken,\n};\n\nexport type { AtmxConfig, AxiomResponse, AxiomError, EventType, Route };\n","// FILE: src/context/AxiomProvider.tsx\nimport React, {\n createContext,\n useEffect,\n useState,\n useRef,\n ReactNode,\n} from \"react\";\nimport { initWasm, AtmxConfig } from \"../utils/core-bridge\";\n\nexport interface AxiomContextState {\n isReady: boolean;\n error: Error | null;\n config: AtmxConfig | null;\n}\n\nexport const AxiomContext = createContext<AxiomContextState | undefined>(\n undefined,\n);\n\nexport interface AxiomProviderProps {\n configUrl?: string;\n config?: AtmxConfig;\n children: ReactNode;\n fallback?: ReactNode;\n}\n\nexport const AxiomProvider: React.FC<AxiomProviderProps> = ({\n configUrl,\n config,\n children,\n fallback,\n}) => {\n const [state, setState] = useState<AxiomContextState>({\n isReady: false,\n error: null,\n config: null,\n });\n\n const initStarted = useRef(false);\n\n useEffect(() => {\n if (initStarted.current) return;\n initStarted.current = true;\n\n const bootSequence = async () => {\n try {\n let finalConfig: AtmxConfig;\n if (configUrl) {\n const res = await fetch(configUrl);\n if (!res.ok)\n throw new Error(`Failed to load config from ${configUrl}`);\n finalConfig = await res.json();\n } else if (config) {\n finalConfig = config;\n } else {\n throw new Error(\n \"AxiomProvider requires either 'configUrl' or 'config' prop.\",\n );\n }\n\n if (\n !finalConfig.contracts ||\n Object.keys(finalConfig.contracts).length === 0\n ) {\n throw new Error(\"No contracts defined in ATMX config.\");\n }\n\n // 1. Initialize Wasm Engine (Handles ALL contracts natively!)\n await initWasm(finalConfig);\n\n console.log(`⚛️ ATMX-React: Provider ready.`);\n setState({ isReady: true, error: null, config: finalConfig });\n } catch (err: any) {\n console.error(\"ATMX Provider Boot Error:\", err);\n setState({ isReady: false, error: err, config: null });\n }\n };\n\n bootSequence();\n }, [configUrl, config]);\n\n if (state.error)\n return (\n <div style={{ color: \"red\", padding: \"20px\", fontFamily: \"monospace\" }}>\n <strong>ATMX Initialization Failed:</strong>\n <br />\n {state.error.message}\n </div>\n );\n\n if (!state.isReady) return <>{fallback || null}</>;\n\n return (\n <AxiomContext.Provider value={state}>{children}</AxiomContext.Provider>\n );\n};\n","// FILE: src/context/AxiomDataContext.tsx\nimport { createContext, useContext } from \"react\";\nimport { AxiomState } from \"../utils/core-bridge\";\n\nexport const AxiomDataContext = createContext<AxiomState<any> | null>(null);\n\n/**\n * Throwing version: Use this when you absolutely expect to be inside a scope.\n */\nexport function useAxiomContext<T>(): AxiomState<T> {\n const context = useContext(AxiomDataContext);\n if (!context) {\n throw new Error(\n \"useAxiomContext must be used within an <AxQuery> or <AxMutate> scope.\",\n );\n }\n return context as AxiomState<T>;\n}\n\n/**\n * Safe version: Returns T or an empty object.\n * Used for Context Inheritance ($data access).\n */\nexport function useAxiomData<T>(): T {\n const context = useContext(AxiomDataContext);\n return (context?.data || {}) as T;\n}\n","// FILE: src/hooks/useAxiomQuery.ts\nimport { useEffect, useSyncExternalStore, useCallback } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport { AxiomQueryDef } from \"../utils/core-bridge\";\nimport { axiomQueryManager } from \"../core/QueryManager\";\n\nexport function useAxiomQuery<T>(\n queryDef: AxiomQueryDef<T>,\n options: { enabled?: boolean } = {},\n) {\n const { isReady, config } = useAxiom();\n const { enabled = true } = options;\n\n const activeQuery = axiomQueryManager.getQuery(queryDef);\n\n const state = useSyncExternalStore(\n useCallback(\n (onStoreChange) => activeQuery.subscribe(onStoreChange),\n [activeQuery],\n ),\n () => activeQuery.getState(),\n () => activeQuery.getState(),\n );\n\n useEffect(() => {\n if (!isReady || !enabled) return;\n if (state.status === \"idle\") {\n activeQuery.fetch(false, config?.debug);\n }\n }, [isReady, enabled, activeQuery, state.status, config?.debug]);\n\n return {\n data: state.data,\n isLoading: state.status === \"loading\",\n isFetching: state.isFetching,\n source: state.source,\n error: state.error,\n state: state, // Export raw state for <AxWhen>\n refetch: () => activeQuery.fetch(true, config?.debug),\n };\n}\n","// src/hooks/useAxiom.ts\nimport { useContext } from 'react';\nimport { AxiomContext } from '../context/AxiomProvider';\n\nexport const useAxiom = () => {\n const context = useContext(AxiomContext);\n\n if (context === undefined) {\n throw new Error(\"useAxiom must be used within an <AxiomProvider>. Did you forget to wrap your app?\");\n }\n\n return context;\n};","// FILE: src/core/ActiveQuery.ts\nimport {\n AxiomState,\n AxiomQueryDef,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n getNextReqId,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\ntype Listener<T> = (state: AxiomState<T>) => void;\n\nexport class ActiveQuery<T> {\n public queryKey: string;\n public def: AxiomQueryDef<T>;\n private state: AxiomState<T>;\n private listeners: Set<Listener<T>> = new Set();\n private currentReqId: number | null = null;\n\n constructor(queryKey: string, def: AxiomQueryDef<T>) {\n this.queryKey = queryKey;\n this.def = def;\n this.state = {\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n };\n }\n\n public getState(): AxiomState<T> {\n return this.state;\n }\n\n public subscribe(listener: Listener<T>): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private updateState(partial: Partial<AxiomState<T>>) {\n this.state = { ...this.state, ...partial };\n this.listeners.forEach((l) => l(this.state));\n }\n\n public fetch(force: boolean = false, debug: boolean = false) {\n if (this.state.isFetching && !force) return;\n\n this.updateState({\n isFetching: true,\n status: this.state.data ? \"success\" : \"loading\",\n });\n\n const reqId = getNextReqId();\n this.currentReqId = reqId;\n\n // FIX: Bypass the dictionary lookup. We already have the metadata from the generated SDK!\n const syntheticRoute: Route = {\n id: this.def.endpointId,\n namespace: this.def.namespace,\n name: this.def.name || \"unknown\",\n method: this.def.method,\n pathTemplate: this.def.path,\n isStream: !!this.def.isStream,\n };\n\n // Auto-interpolate {path_params} and ?query_params\n const { path } = buildRequestPath(syntheticRoute, this.def.args);\n\n if (debug) {\n console.groupCollapsed(\n `%c➔ WASM QUERY [#${reqId}]`,\n `color: #7c3aed; font-weight: bold;`,\n );\n console.log(\"Namespace:\", this.def.namespace);\n console.log(\"Endpoint ID:\", this.def.endpointId);\n console.log(\"Path:\", path);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!this.def.isStream,\n onResponse: (response) => {\n if (this.currentReqId !== reqId) return;\n\n if (debug) {\n const evtName =\n response.eventType === 1\n ? \"NetworkSuccess\"\n : response.eventType === 2\n ? \"CacheHit\"\n : response.eventType === 3\n ? \"CacheHitAndFetching\"\n : response.eventType === 4\n ? \"Error\"\n : \"Complete\";\n console.groupCollapsed(\n `%c← WASM RESP [#${reqId}]`,\n `color: #059669; font-weight: bold;`,\n );\n console.log(\"Event Type:\", evtName);\n if (response.data) console.log(\"Data:\", response.data);\n if (response.error) console.log(\"Error:\", response.error);\n console.groupEnd();\n }\n\n if (response.eventType === 4) {\n this.updateState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n });\n return;\n }\n\n if (response.data) {\n try {\n const decodedData = this.def.decoder(response.data);\n let source: \"cache\" | \"network\" = \"network\";\n let isFetching = false;\n\n if (response.eventType === 2) {\n source = \"cache\";\n isFetching = false;\n } else if (response.eventType === 3) {\n source = \"cache\";\n isFetching = true;\n } else if (response.eventType === 1) {\n source = \"network\";\n isFetching = false;\n }\n\n this.updateState({\n status: \"success\",\n data: decodedData,\n error: null,\n isFetching,\n source,\n });\n } catch (e) {\n this.updateState({\n status: \"error\",\n error: { message: \"Decoding failed\", details: String(e) } as any,\n isFetching: false,\n });\n }\n }\n },\n onComplete: () => {\n if (this.currentReqId !== reqId) return;\n this.updateState({ isFetching: false });\n },\n });\n\n const isFormUrlEncoded = Object.entries(this.def.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0;\n if (this.def.payload !== undefined && this.def.payload !== null) {\n const safePayload = this.def.serializer\n ? this.def.serializer(this.def.payload)\n : this.def.payload;\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof safePayload === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(safePayload))\n params.append(k, String(v));\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(safePayload));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n const nsStr = allocString(this.def.namespace);\n const mStr = allocString(this.def.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n this.def.headers ? JSON.stringify(this.def.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n this.def.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n }\n}\n","// FILE: src/core/QueryManager.ts\nimport { ActiveQuery } from \"./ActiveQuery\";\nimport { AxiomQueryDef } from \"../utils/core-bridge\";\n\nclass QueryManager {\n private queries = new Map<string, ActiveQuery<any>>();\n\n private buildKey(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ): string {\n // EXACT ATMX Core Cache Key Match!\n return `${namespace}:${endpointId}:${JSON.stringify(args)}`;\n }\n\n public getQuery<T>(def: AxiomQueryDef<T>): ActiveQuery<T> {\n const key = this.buildKey(def.namespace, def.endpointId, def.args);\n\n if (this.queries.has(key)) {\n return this.queries.get(key) as ActiveQuery<T>;\n }\n\n const newQuery = new ActiveQuery<T>(key, def);\n this.queries.set(key, newQuery);\n return newQuery;\n }\n\n public invalidate(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ) {\n const key = this.buildKey(namespace, endpointId, args);\n const query = this.queries.get(key);\n if (query) query.fetch(true);\n }\n}\n\nexport const axiomQueryManager = new QueryManager();\n","// FILE: src/components/AxQuery.tsx\nimport { ReactNode } from \"react\";\nimport { AxiomQueryDef, AxiomState } from \"../utils/core-bridge\";\nimport { useAxiomQuery } from \"../hooks/useAxiomQuery\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\nexport interface AxQueryProps<T> {\n call: AxiomQueryDef<T>;\n children:\n | ReactNode\n | ((props: {\n data: T | null;\n state: AxiomState<T>;\n refetch: () => void;\n }) => ReactNode);\n enabled?: boolean;\n}\n\nexport function AxQuery<T>({\n call,\n children,\n enabled = true,\n}: AxQueryProps<T>) {\n const result = useAxiomQuery<T>(call, { enabled });\n\n const content =\n typeof children === \"function\"\n ? children({\n data: result.data,\n state: result.state,\n refetch: result.refetch,\n })\n : children;\n\n // Provide the state downwards so nested components (or AxWhen) can inherit it!\n return (\n <AxiomDataContext.Provider value={result.state}>\n {content}\n </AxiomDataContext.Provider>\n );\n}\n","// FILE: src/components/AxWhen.tsx\nimport { ReactNode, useContext } from \"react\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\ninterface AxWhenProps {\n /** Explicit state object from a hook (e.g. sdk.users.useGetUser) */\n value?: {\n status: string;\n data?: any;\n isFetching?: boolean;\n isMutating?: boolean;\n };\n /** Comma-separated states: \"idle, loading, mutating, data, success, error\" */\n is: string;\n children: ReactNode;\n}\n\nexport function AxWhen({ value, is, children }: AxWhenProps) {\n // Use useContext directly instead of the throwing hook useAxiomContext\n const context = useContext(AxiomDataContext);\n const stateObj = value || context;\n\n // If no value is provided and we aren't inside a scope, render nothing\n if (!stateObj) return null;\n\n const expectedStates = is.split(\",\").map((s) => s.trim().toLowerCase());\n\n let currentState = \"idle\";\n\n if (stateObj.isMutating) {\n currentState = \"mutating\";\n } else if (stateObj.status === \"loading\") {\n currentState = \"loading\";\n } else if (stateObj.status === \"error\") {\n currentState = \"error\";\n } else if (stateObj.status === \"success\" || stateObj.data) {\n currentState = \"data\";\n }\n\n // Handle 'success' as a distinct semantic state for Mutations\n if (\n expectedStates.includes(\"success\") &&\n stateObj.status === \"success\" &&\n !stateObj.isMutating\n ) {\n currentState = \"success\";\n }\n\n if (expectedStates.includes(currentState)) {\n return <>{children}</>;\n }\n\n return null;\n}\n","// src/components/AxTrigger.tsx\nimport { useEffect, useRef, ReactNode } from 'react';\n\ninterface AxTriggerProps {\n onTrigger: () => void;\n once?: boolean;\n children?: ReactNode;\n}\n\nexport const AxTrigger: React.FC<AxTriggerProps> = ({ onTrigger, once = true, children }) => {\n const elementRef = useRef<HTMLDivElement>(null);\n const hasTriggered = useRef(false);\n\n useEffect(() => {\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n if (once && hasTriggered.current) return;\n\n onTrigger();\n hasTriggered.current = true;\n\n if (once) observer.unobserve(entry.target);\n }\n });\n }, { threshold: 0.1 });\n\n if (elementRef.current) {\n observer.observe(elementRef.current);\n }\n\n return () => observer.disconnect();\n }, [onTrigger, once]);\n\n return <div ref={elementRef}>{children}</div>;\n};","// FILE: src/hooks/useAxiomMutation.ts\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport {\n AxiomQueryDef,\n AxiomState,\n getNextReqId,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\nfunction extractFieldError(error: any, fieldName: string): string | null {\n if (error?.code !== \"ValidationError\" || !error?.details) return null;\n const lines = error.details.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(fieldName + \":\"))\n return line.substring(fieldName.length + 1).trim();\n }\n return null;\n}\n\nexport function useAxiomMutation<T, A>(\n mutationFn: (args: A) => AxiomQueryDef<T>,\n) {\n const { isReady, config } = useAxiom();\n const [state, setState] = useState<AxiomState<T>>({\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n });\n const isMounted = useRef(true);\n\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const execute = useCallback(\n async (args: A, options?: { headers?: Record<string, string> }) => {\n if (!isReady || !config) return;\n\n const rawDef = mutationFn(args);\n rawDef.headers = options?.headers; // ✨ Inject dynamic headers!\n\n const reqId = getNextReqId();\n if (isMounted.current)\n setState({\n status: \"loading\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: true,\n source: null,\n });\n\n // FIX: Bypass router lookup!\n const syntheticRoute: Route = {\n id: rawDef.endpointId,\n namespace: rawDef.namespace,\n name: rawDef.name || \"unknown\",\n method: rawDef.method,\n pathTemplate: rawDef.path,\n isStream: !!rawDef.isStream,\n };\n\n const { path } = buildRequestPath(syntheticRoute, rawDef.args);\n\n const isFormUrlEncoded = Object.entries(rawDef.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0,\n payloadObj = null;\n if (rawDef.payload !== undefined && rawDef.payload !== null) {\n payloadObj = rawDef.serializer\n ? rawDef.serializer(rawDef.payload)\n : rawDef.payload;\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof payloadObj === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(payloadObj))\n params.append(k, String(v));\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(payloadObj));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n if (config.debug) {\n console.groupCollapsed(\n `%c➔ WASM MUTATE [#${reqId}]`,\n `color: #7c3aed; font-weight: bold;`,\n );\n console.log(\"Namespace:\", rawDef.namespace);\n console.log(\"Endpoint ID:\", rawDef.endpointId);\n console.log(\"Path:\", path);\n console.log(\"Payload:\", payloadObj);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!rawDef.isStream,\n onResponse: (response) => {\n if (!isMounted.current) return;\n\n if (config.debug) {\n const evtName =\n response.eventType === 1\n ? \"NetworkSuccess\"\n : response.eventType === 2\n ? \"CacheHit\"\n : response.eventType === 3\n ? \"CacheHitAndFetching\"\n : response.eventType === 4\n ? \"Error\"\n : \"Complete\";\n console.groupCollapsed(\n `%c← WASM RESP [#${reqId}]`,\n `color: #059669; font-weight: bold;`,\n );\n console.log(\"Event Type:\", evtName);\n if (response.data) console.log(\"Data:\", response.data);\n if (response.error) console.log(\"Error:\", response.error);\n console.groupEnd();\n }\n\n if (response.eventType === 4) {\n setState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n return;\n }\n if (response.data) {\n try {\n let source: \"cache\" | \"network\" = \"network\";\n if (response.eventType === 2 || response.eventType === 3)\n source = \"cache\";\n\n setState({\n status: \"success\",\n data: rawDef.decoder(response.data),\n error: null,\n isFetching: false,\n isMutating: false,\n source,\n });\n } catch (e) {\n setState({\n status: \"error\",\n error: {\n message: \"Decoding failed\",\n details: String(e),\n } as any,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n }\n }\n },\n onComplete: () => {\n if (isMounted.current)\n setState((prev) => ({\n ...prev,\n isMutating: false,\n isFetching: false,\n }));\n },\n });\n\n const nsStr = allocString(rawDef.namespace);\n const mStr = allocString(rawDef.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n rawDef.headers ? JSON.stringify(rawDef.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n rawDef.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n },\n [isReady, config, mutationFn],\n );\n\n return {\n execute,\n state,\n data: state.data,\n isMutating: state.isMutating,\n error: state.error,\n getFieldError: (fieldName: string) =>\n extractFieldError(state.error, fieldName),\n };\n}\n"],"mappings":"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","names":["import_atmx_web","import_react","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/core-bridge.ts","../src/context/AxiomProvider.tsx","../src/context/AxiomDataContext.tsx","../src/hooks/useAxiomQuery.ts","../src/hooks/useAxiom.ts","../src/core/ActiveQuery.ts","../src/core/QueryManager.ts","../src/components/AxQuery.tsx","../src/components/AxWhen.tsx","../src/components/AxTrigger.tsx","../src/hooks/useAxiomMutation.ts"],"sourcesContent":["// FILE: src/index.ts\nexport { setAuthToken, clearAuthToken } from \"./utils/core-bridge\";\n// 1. Context & Provider (Global Lifecycle)\nexport { AxiomProvider, AxiomContext } from \"./context/AxiomProvider\";\n\n// 2. The Context Stack (InheritedWidget Pattern)\n// This allows nested components to reach up and grab parent $data\nexport {\n AxiomDataContext,\n useAxiomContext,\n useAxiomData,\n} from \"./context/AxiomDataContext\";\n\n// 3. High-Level Declarative Components\n// These wrap the hooks to give a \"Zero-JS\" feel to React\nexport { AxQuery } from \"./components/AxQuery\";\nexport { AxWhen } from \"./components/AxWhen\";\nexport { AxTrigger } from \"./components/AxTrigger\";\n\n// 4. Core Hooks\n// Used primarily by the generated SDK, but available for custom logic\nexport { useAxiom } from \"./hooks/useAxiom\";\nexport { useAxiomQuery } from \"./hooks/useAxiomQuery\";\nexport { useAxiomMutation } from \"./hooks/useAxiomMutation\";\n\n// 5. Shared State & Registry\n// Manages deduplication and syncing across components\nexport { axiomQueryManager } from \"./core/QueryManager\";\n\n// 6. Core Types\n// Essential for type-safe development and generated SDKs\nexport type {\n AtmxConfig,\n AxiomError,\n AxiomResponse,\n AxiomQueryDef,\n AxiomState,\n AxiomStatus,\n} from \"./utils/core-bridge\";\n","import {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n setAuthToken,\n clearAuthToken,\n} from \"atmx-web\";\nimport { resolveRoute, Route, buildRequestPath } from \"atmx-web\";\nimport { pendingRequests } from \"atmx-web\";\nimport { AtmxConfig, AxiomResponse, AxiomError, EventType } from \"atmx-web\";\n\nlet globalReqCounter = 0;\nexport const getNextReqId = () => ++globalReqCounter;\n\nexport interface AxiomQueryDef<T> {\n namespace: string;\n name: string;\n endpointId: number;\n method: string;\n path: string;\n payload?: any;\n decoder: (json: any) => T;\n serializer?: (payload: any) => any;\n args: Record<string, any>;\n isStream?: boolean;\n headers?: Record<string, string>; // ✨ NEW\n}\n\nexport type AxiomStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\nexport interface AxiomState<T> {\n status: AxiomStatus;\n data: T | null;\n error: AxiomError | null;\n isFetching: boolean;\n isMutating: boolean;\n source: \"cache\" | \"network\" | null;\n}\n\nexport {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n resolveRoute,\n buildRequestPath,\n pendingRequests,\n setAuthToken,\n clearAuthToken,\n};\n\nexport type { AtmxConfig, AxiomResponse, AxiomError, EventType, Route };\n","// FILE: src/context/AxiomProvider.tsx\nimport React, {\n createContext,\n useEffect,\n useState,\n useRef,\n ReactNode,\n} from \"react\";\nimport { initWasm, AtmxConfig } from \"../utils/core-bridge\";\n\nexport interface AxiomContextState {\n isReady: boolean;\n error: Error | null;\n config: AtmxConfig | null;\n}\n\nexport const AxiomContext = createContext<AxiomContextState | undefined>(\n undefined,\n);\n\nexport interface AxiomProviderProps {\n configUrl?: string;\n config?: AtmxConfig;\n children: ReactNode;\n fallback?: ReactNode;\n}\n\nexport const AxiomProvider: React.FC<AxiomProviderProps> = ({\n configUrl,\n config,\n children,\n fallback,\n}) => {\n const [state, setState] = useState<AxiomContextState>({\n isReady: false,\n error: null,\n config: null,\n });\n\n const initStarted = useRef(false);\n\n useEffect(() => {\n if (initStarted.current) return;\n initStarted.current = true;\n\n const bootSequence = async () => {\n try {\n let finalConfig: AtmxConfig;\n if (configUrl) {\n const res = await fetch(configUrl);\n if (!res.ok)\n throw new Error(`Failed to load config from ${configUrl}`);\n finalConfig = await res.json();\n } else if (config) {\n finalConfig = config;\n } else {\n throw new Error(\n \"AxiomProvider requires either 'configUrl' or 'config' prop.\",\n );\n }\n\n if (\n !finalConfig.contracts ||\n Object.keys(finalConfig.contracts).length === 0\n ) {\n throw new Error(\"No contracts defined in ATMX config.\");\n }\n\n // 1. Initialize Wasm Engine (Handles ALL contracts natively!)\n await initWasm(finalConfig);\n\n console.log(`⚛️ ATMX-React: Provider ready.`);\n setState({ isReady: true, error: null, config: finalConfig });\n } catch (err: any) {\n console.error(\"ATMX Provider Boot Error:\", err);\n setState({ isReady: false, error: err, config: null });\n }\n };\n\n bootSequence();\n }, [configUrl, config]);\n\n if (state.error)\n return (\n <div style={{ color: \"red\", padding: \"20px\", fontFamily: \"monospace\" }}>\n <strong>ATMX Initialization Failed:</strong>\n <br />\n {state.error.message}\n </div>\n );\n\n if (!state.isReady) return <>{fallback || null}</>;\n\n return (\n <AxiomContext.Provider value={state}>{children}</AxiomContext.Provider>\n );\n};\n","// FILE: src/context/AxiomDataContext.tsx\nimport { createContext, useContext } from \"react\";\nimport { AxiomState } from \"../utils/core-bridge\";\n\nexport const AxiomDataContext = createContext<AxiomState<any> | null>(null);\n\n/**\n * Throwing version: Use this when you absolutely expect to be inside a scope.\n */\nexport function useAxiomContext<T>(): AxiomState<T> {\n const context = useContext(AxiomDataContext);\n if (!context) {\n throw new Error(\n \"useAxiomContext must be used within an <AxQuery> or <AxMutate> scope.\",\n );\n }\n return context as AxiomState<T>;\n}\n\n/**\n * Safe version: Returns T or an empty object.\n * Used for Context Inheritance ($data access).\n */\nexport function useAxiomData<T>(): T {\n const context = useContext(AxiomDataContext);\n return (context?.data || {}) as T;\n}\n","// FILE: src/hooks/useAxiomQuery.ts\nimport { useEffect, useSyncExternalStore, useCallback } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport { AxiomQueryDef } from \"../utils/core-bridge\";\nimport { axiomQueryManager } from \"../core/QueryManager\";\n\nexport function useAxiomQuery<T>(\n queryDef: AxiomQueryDef<T>,\n options: { enabled?: boolean } = {},\n) {\n const { isReady, config } = useAxiom();\n const { enabled = true } = options;\n\n const activeQuery = axiomQueryManager.getQuery(queryDef);\n\n const state = useSyncExternalStore(\n useCallback(\n (onStoreChange) => activeQuery.subscribe(onStoreChange),\n [activeQuery],\n ),\n () => activeQuery.getState(),\n () => activeQuery.getState(),\n );\n\n useEffect(() => {\n if (!isReady || !enabled) return;\n if (state.status === \"idle\") {\n activeQuery.fetch(false, config?.debug);\n }\n }, [isReady, enabled, activeQuery, state.status, config?.debug]);\n\n return {\n data: state.data,\n isLoading: state.status === \"loading\",\n isFetching: state.isFetching,\n source: state.source,\n error: state.error,\n state: state, // Export raw state for <AxWhen>\n refetch: () => activeQuery.fetch(true, config?.debug),\n };\n}\n","// src/hooks/useAxiom.ts\nimport { useContext } from 'react';\nimport { AxiomContext } from '../context/AxiomProvider';\n\nexport const useAxiom = () => {\n const context = useContext(AxiomContext);\n\n if (context === undefined) {\n throw new Error(\"useAxiom must be used within an <AxiomProvider>. Did you forget to wrap your app?\");\n }\n\n return context;\n};","// FILE: src/core/ActiveQuery.ts\nimport {\n AxiomState,\n AxiomQueryDef,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n getNextReqId,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\ntype Listener<T> = (state: AxiomState<T>) => void;\n\nexport class ActiveQuery<T> {\n public queryKey: string;\n public def: AxiomQueryDef<T>;\n private state: AxiomState<T>;\n private listeners: Set<Listener<T>> = new Set();\n private currentReqId: number | null = null;\n\n constructor(queryKey: string, def: AxiomQueryDef<T>) {\n this.queryKey = queryKey;\n this.def = def;\n this.state = {\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n };\n }\n\n public getState(): AxiomState<T> {\n return this.state;\n }\n\n public subscribe(listener: Listener<T>): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private updateState(partial: Partial<AxiomState<T>>) {\n this.state = { ...this.state, ...partial };\n this.listeners.forEach((l) => l(this.state));\n }\n\n public fetch(force: boolean = false, debug: boolean = false) {\n if (this.state.isFetching && !force) return;\n\n this.updateState({\n isFetching: true,\n status: this.state.data ? \"success\" : \"loading\",\n });\n\n const reqId = getNextReqId();\n this.currentReqId = reqId;\n\n // FIX: Bypass the dictionary lookup. We already have the metadata from the generated SDK!\n const syntheticRoute: Route = {\n id: this.def.endpointId,\n namespace: this.def.namespace,\n name: this.def.name || \"unknown\",\n method: this.def.method,\n pathTemplate: this.def.path,\n isStream: !!this.def.isStream,\n };\n\n // Auto-interpolate {path_params} and ?query_params\n const { path } = buildRequestPath(syntheticRoute, this.def.args);\n\n if (debug) {\n console.groupCollapsed(\n `%c➔ WASM QUERY [#${reqId}]`,\n `color: #7c3aed; font-weight: bold;`,\n );\n console.log(\"Namespace:\", this.def.namespace);\n console.log(\"Endpoint ID:\", this.def.endpointId);\n console.log(\"Path:\", path);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!this.def.isStream,\n onResponse: (response) => {\n if (this.currentReqId !== reqId) return;\n\n if (debug) {\n const evtName =\n response.eventType === 1\n ? \"NetworkSuccess\"\n : response.eventType === 2\n ? \"CacheHit\"\n : response.eventType === 3\n ? \"CacheHitAndFetching\"\n : response.eventType === 4\n ? \"Error\"\n : \"Complete\";\n console.groupCollapsed(\n `%c← WASM RESP [#${reqId}]`,\n `color: #059669; font-weight: bold;`,\n );\n console.log(\"Event Type:\", evtName);\n if (response.data) console.log(\"Data:\", response.data);\n if (response.error) console.log(\"Error:\", response.error);\n console.groupEnd();\n }\n\n if (response.eventType === 4) {\n this.updateState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n });\n return;\n }\n\n if (response.data) {\n try {\n const decodedData = this.def.decoder(response.data);\n let source: \"cache\" | \"network\" = \"network\";\n let isFetching = false;\n\n if (response.eventType === 2) {\n source = \"cache\";\n isFetching = false;\n } else if (response.eventType === 3) {\n source = \"cache\";\n isFetching = true;\n } else if (response.eventType === 1) {\n source = \"network\";\n isFetching = false;\n }\n\n this.updateState({\n status: \"success\",\n data: decodedData,\n error: null,\n isFetching,\n source,\n });\n } catch (e) {\n this.updateState({\n status: \"error\",\n error: { message: \"Decoding failed\", details: String(e) } as any,\n isFetching: false,\n });\n }\n }\n },\n onComplete: () => {\n if (this.currentReqId !== reqId) return;\n this.updateState({ isFetching: false });\n },\n });\n\n const isFormUrlEncoded = Object.entries(this.def.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0;\n if (this.def.payload !== undefined && this.def.payload !== null) {\n const safePayload = this.def.serializer\n ? this.def.serializer(this.def.payload)\n : this.def.payload;\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof safePayload === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(safePayload))\n params.append(k, String(v));\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(safePayload));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n const nsStr = allocString(this.def.namespace);\n const mStr = allocString(this.def.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n this.def.headers ? JSON.stringify(this.def.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n this.def.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n }\n}\n","// FILE: src/core/QueryManager.ts\nimport { ActiveQuery } from \"./ActiveQuery\";\nimport { AxiomQueryDef } from \"../utils/core-bridge\";\n\nclass QueryManager {\n private queries = new Map<string, ActiveQuery<any>>();\n\n private buildKey(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ): string {\n // EXACT ATMX Core Cache Key Match!\n return `${namespace}:${endpointId}:${JSON.stringify(args)}`;\n }\n\n public getQuery<T>(def: AxiomQueryDef<T>): ActiveQuery<T> {\n const key = this.buildKey(def.namespace, def.endpointId, def.args);\n\n if (this.queries.has(key)) {\n return this.queries.get(key) as ActiveQuery<T>;\n }\n\n const newQuery = new ActiveQuery<T>(key, def);\n this.queries.set(key, newQuery);\n return newQuery;\n }\n\n public invalidate(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ) {\n const key = this.buildKey(namespace, endpointId, args);\n const query = this.queries.get(key);\n if (query) query.fetch(true);\n }\n}\n\nexport const axiomQueryManager = new QueryManager();\n","// FILE: src/components/AxQuery.tsx\nimport { ReactNode } from \"react\";\nimport { AxiomQueryDef, AxiomState } from \"../utils/core-bridge\";\nimport { useAxiomQuery } from \"../hooks/useAxiomQuery\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\nexport interface AxQueryProps<T> {\n call: AxiomQueryDef<T>;\n children:\n | ReactNode\n | ((props: {\n data: T | null;\n state: AxiomState<T>;\n refetch: () => void;\n }) => ReactNode);\n enabled?: boolean;\n}\n\nexport function AxQuery<T>({\n call,\n children,\n enabled = true,\n}: AxQueryProps<T>) {\n const result = useAxiomQuery<T>(call, { enabled });\n\n const content =\n typeof children === \"function\"\n ? children({\n data: result.data,\n state: result.state,\n refetch: result.refetch,\n })\n : children;\n\n // Provide the state downwards so nested components (or AxWhen) can inherit it!\n return (\n <AxiomDataContext.Provider value={result.state}>\n {content}\n </AxiomDataContext.Provider>\n );\n}\n","// FILE: src/components/AxWhen.tsx\nimport { ReactNode, useContext } from \"react\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\ninterface AxWhenProps {\n /** Explicit state object from a hook (e.g. sdk.users.useGetUser) */\n value?: {\n status: string;\n data?: any;\n isFetching?: boolean;\n isMutating?: boolean;\n };\n /** Comma-separated states: \"idle, loading, mutating, data, success, error\" */\n is: string;\n children: ReactNode;\n}\n\nexport function AxWhen({ value, is, children }: AxWhenProps) {\n // Use useContext directly instead of the throwing hook useAxiomContext\n const context = useContext(AxiomDataContext);\n const stateObj = value || context;\n\n // If no value is provided and we aren't inside a scope, render nothing\n if (!stateObj) return null;\n\n const expectedStates = is.split(\",\").map((s) => s.trim().toLowerCase());\n\n let currentState = \"idle\";\n\n if (stateObj.isMutating) {\n currentState = \"mutating\";\n } else if (stateObj.status === \"loading\") {\n currentState = \"loading\";\n } else if (stateObj.status === \"error\") {\n currentState = \"error\";\n } else if (stateObj.status === \"success\" || stateObj.data) {\n currentState = \"data\";\n }\n\n // Handle 'success' as a distinct semantic state for Mutations\n if (\n expectedStates.includes(\"success\") &&\n stateObj.status === \"success\" &&\n !stateObj.isMutating\n ) {\n currentState = \"success\";\n }\n\n if (expectedStates.includes(currentState)) {\n return <>{children}</>;\n }\n\n return null;\n}\n","// src/components/AxTrigger.tsx\nimport { useEffect, useRef, ReactNode } from 'react';\n\ninterface AxTriggerProps {\n onTrigger: () => void;\n once?: boolean;\n children?: ReactNode;\n}\n\nexport const AxTrigger: React.FC<AxTriggerProps> = ({ onTrigger, once = true, children }) => {\n const elementRef = useRef<HTMLDivElement>(null);\n const hasTriggered = useRef(false);\n\n useEffect(() => {\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n if (once && hasTriggered.current) return;\n\n onTrigger();\n hasTriggered.current = true;\n\n if (once) observer.unobserve(entry.target);\n }\n });\n }, { threshold: 0.1 });\n\n if (elementRef.current) {\n observer.observe(elementRef.current);\n }\n\n return () => observer.disconnect();\n }, [onTrigger, once]);\n\n return <div ref={elementRef}>{children}</div>;\n};","// FILE: atmx-react/src/hooks/useAxiomMutation.ts\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport {\n AxiomQueryDef,\n AxiomState,\n getNextReqId,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\nexport function useAxiomMutation<T, A>(\n mutationFn: (args: A) => AxiomQueryDef<T>,\n) {\n const { isReady, config } = useAxiom();\n const [state, setState] = useState<AxiomState<T>>({\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n });\n const isMounted = useRef(true);\n\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const execute = useCallback(\n // ✨ FIX: execute now returns a Promise<T>!\n (args: A, options?: { headers?: Record<string, string> }): Promise<T> => {\n return new Promise((resolve, reject) => {\n if (!isReady || !config) return reject(new Error(\"ATMX not ready\"));\n\n const rawDef = mutationFn(args);\n rawDef.headers = options?.headers;\n\n const reqId = getNextReqId();\n\n if (isMounted.current)\n setState({\n status: \"loading\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: true,\n source: null,\n });\n\n const syntheticRoute: Route = {\n id: rawDef.endpointId,\n namespace: rawDef.namespace,\n name: rawDef.name || \"unknown\",\n method: rawDef.method,\n pathTemplate: rawDef.path,\n isStream: !!rawDef.isStream,\n };\n\n const { path } = buildRequestPath(syntheticRoute, rawDef.args);\n\n const isFormUrlEncoded = Object.entries(rawDef.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0;\n if (rawDef.payload !== undefined && rawDef.payload !== null) {\n const payloadObj = rawDef.serializer\n ? rawDef.serializer(rawDef.payload)\n : rawDef.payload;\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof payloadObj === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(payloadObj))\n params.append(k, String(v));\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(payloadObj));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n pendingRequests.set(reqId, {\n isStream: !!rawDef.isStream,\n onResponse: (response) => {\n if (response.eventType === 4) {\n // Error\n if (isMounted.current)\n setState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n // ✨ Reject the promise!\n reject(response.error);\n return;\n }\n if (response.data) {\n try {\n let source: \"cache\" | \"network\" = \"network\";\n if (response.eventType === 2 || response.eventType === 3)\n source = \"cache\";\n const decoded = rawDef.decoder(response.data);\n\n if (isMounted.current)\n setState({\n status: \"success\",\n data: decoded,\n error: null,\n isFetching: false,\n isMutating: false,\n source,\n });\n\n // ✨ Resolve the promise!\n resolve(decoded);\n } catch (e) {\n const err = {\n message: \"Decoding failed\",\n details: String(e),\n } as any;\n if (isMounted.current)\n setState({\n status: \"error\",\n error: err,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n reject(err);\n }\n }\n },\n onComplete: () => {\n if (isMounted.current)\n setState((prev) => ({\n ...prev,\n isMutating: false,\n isFetching: false,\n }));\n },\n });\n\n const nsStr = allocString(rawDef.namespace);\n const mStr = allocString(rawDef.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n rawDef.headers ? JSON.stringify(rawDef.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n rawDef.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n });\n },\n [isReady, config, mutationFn],\n );\n\n return {\n execute,\n state,\n data: state.data,\n isMutating: state.isMutating,\n error: state.error,\n };\n}\n"],"mappings":"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","names":["import_atmx_web","import_react","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react"]}
|
package/dist/index.mjs
CHANGED
|
@@ -401,15 +401,6 @@ var AxTrigger = ({ onTrigger, once = true, children }) => {
|
|
|
401
401
|
|
|
402
402
|
// src/hooks/useAxiomMutation.ts
|
|
403
403
|
import { useState as useState2, useCallback as useCallback2, useRef as useRef3, useEffect as useEffect4 } from "react";
|
|
404
|
-
function extractFieldError(error, fieldName) {
|
|
405
|
-
if (error?.code !== "ValidationError" || !error?.details) return null;
|
|
406
|
-
const lines = error.details.split("\n");
|
|
407
|
-
for (const line of lines) {
|
|
408
|
-
if (line.startsWith(fieldName + ":"))
|
|
409
|
-
return line.substring(fieldName.length + 1).trim();
|
|
410
|
-
}
|
|
411
|
-
return null;
|
|
412
|
-
}
|
|
413
404
|
function useAxiomMutation(mutationFn) {
|
|
414
405
|
const { isReady, config } = useAxiom();
|
|
415
406
|
const [state, setState] = useState2({
|
|
@@ -428,149 +419,137 @@ function useAxiomMutation(mutationFn) {
|
|
|
428
419
|
};
|
|
429
420
|
}, []);
|
|
430
421
|
const execute = useCallback2(
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
if (rawDef.payload !== void 0 && rawDef.payload !== null) {
|
|
459
|
-
payloadObj = rawDef.serializer ? rawDef.serializer(rawDef.payload) : rawDef.payload;
|
|
460
|
-
let payloadBytes;
|
|
461
|
-
if (isFormUrlEncoded && typeof payloadObj === "object") {
|
|
462
|
-
const params = new URLSearchParams();
|
|
463
|
-
for (const [k, v] of Object.entries(payloadObj))
|
|
464
|
-
params.append(k, String(v));
|
|
465
|
-
payloadBytes = new TextEncoder().encode(params.toString());
|
|
466
|
-
} else {
|
|
467
|
-
payloadBytes = new TextEncoder().encode(JSON.stringify(payloadObj));
|
|
468
|
-
}
|
|
469
|
-
payloadPtr = allocBytes(payloadBytes);
|
|
470
|
-
payloadLen = payloadBytes.length;
|
|
471
|
-
}
|
|
472
|
-
if (config.debug) {
|
|
473
|
-
console.groupCollapsed(
|
|
474
|
-
`%c\u2794 WASM MUTATE [#${reqId}]`,
|
|
475
|
-
`color: #7c3aed; font-weight: bold;`
|
|
422
|
+
// ✨ FIX: execute now returns a Promise<T>!
|
|
423
|
+
(args, options) => {
|
|
424
|
+
return new Promise((resolve, reject) => {
|
|
425
|
+
if (!isReady || !config) return reject(new Error("ATMX not ready"));
|
|
426
|
+
const rawDef = mutationFn(args);
|
|
427
|
+
rawDef.headers = options?.headers;
|
|
428
|
+
const reqId = getNextReqId();
|
|
429
|
+
if (isMounted.current)
|
|
430
|
+
setState({
|
|
431
|
+
status: "loading",
|
|
432
|
+
data: null,
|
|
433
|
+
error: null,
|
|
434
|
+
isFetching: false,
|
|
435
|
+
isMutating: true,
|
|
436
|
+
source: null
|
|
437
|
+
});
|
|
438
|
+
const syntheticRoute = {
|
|
439
|
+
id: rawDef.endpointId,
|
|
440
|
+
namespace: rawDef.namespace,
|
|
441
|
+
name: rawDef.name || "unknown",
|
|
442
|
+
method: rawDef.method,
|
|
443
|
+
pathTemplate: rawDef.path,
|
|
444
|
+
isStream: !!rawDef.isStream
|
|
445
|
+
};
|
|
446
|
+
const { path } = buildRequestPath(syntheticRoute, rawDef.args);
|
|
447
|
+
const isFormUrlEncoded = Object.entries(rawDef.headers || {}).some(
|
|
448
|
+
([k, v]) => k.toLowerCase() === "content-type" && v.includes("application/x-www-form-urlencoded")
|
|
476
449
|
);
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
const evtName = response.eventType === 1 ? "NetworkSuccess" : response.eventType === 2 ? "CacheHit" : response.eventType === 3 ? "CacheHitAndFetching" : response.eventType === 4 ? "Error" : "Complete";
|
|
489
|
-
console.groupCollapsed(
|
|
490
|
-
`%c\u2190 WASM RESP [#${reqId}]`,
|
|
491
|
-
`color: #059669; font-weight: bold;`
|
|
492
|
-
);
|
|
493
|
-
console.log("Event Type:", evtName);
|
|
494
|
-
if (response.data) console.log("Data:", response.data);
|
|
495
|
-
if (response.error) console.log("Error:", response.error);
|
|
496
|
-
console.groupEnd();
|
|
497
|
-
}
|
|
498
|
-
if (response.eventType === 4) {
|
|
499
|
-
setState({
|
|
500
|
-
status: "error",
|
|
501
|
-
error: response.error || null,
|
|
502
|
-
isFetching: false,
|
|
503
|
-
isMutating: false,
|
|
504
|
-
data: null,
|
|
505
|
-
source: null
|
|
506
|
-
});
|
|
507
|
-
return;
|
|
450
|
+
let payloadPtr = 0, payloadLen = 0;
|
|
451
|
+
if (rawDef.payload !== void 0 && rawDef.payload !== null) {
|
|
452
|
+
const payloadObj = rawDef.serializer ? rawDef.serializer(rawDef.payload) : rawDef.payload;
|
|
453
|
+
let payloadBytes;
|
|
454
|
+
if (isFormUrlEncoded && typeof payloadObj === "object") {
|
|
455
|
+
const params = new URLSearchParams();
|
|
456
|
+
for (const [k, v] of Object.entries(payloadObj))
|
|
457
|
+
params.append(k, String(v));
|
|
458
|
+
payloadBytes = new TextEncoder().encode(params.toString());
|
|
459
|
+
} else {
|
|
460
|
+
payloadBytes = new TextEncoder().encode(JSON.stringify(payloadObj));
|
|
508
461
|
}
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
462
|
+
payloadPtr = allocBytes(payloadBytes);
|
|
463
|
+
payloadLen = payloadBytes.length;
|
|
464
|
+
}
|
|
465
|
+
pendingRequests.set(reqId, {
|
|
466
|
+
isStream: !!rawDef.isStream,
|
|
467
|
+
onResponse: (response) => {
|
|
468
|
+
if (response.eventType === 4) {
|
|
469
|
+
if (isMounted.current)
|
|
470
|
+
setState({
|
|
471
|
+
status: "error",
|
|
472
|
+
error: response.error || null,
|
|
473
|
+
isFetching: false,
|
|
474
|
+
isMutating: false,
|
|
475
|
+
data: null,
|
|
476
|
+
source: null
|
|
477
|
+
});
|
|
478
|
+
reject(response.error);
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
if (response.data) {
|
|
482
|
+
try {
|
|
483
|
+
let source = "network";
|
|
484
|
+
if (response.eventType === 2 || response.eventType === 3)
|
|
485
|
+
source = "cache";
|
|
486
|
+
const decoded = rawDef.decoder(response.data);
|
|
487
|
+
if (isMounted.current)
|
|
488
|
+
setState({
|
|
489
|
+
status: "success",
|
|
490
|
+
data: decoded,
|
|
491
|
+
error: null,
|
|
492
|
+
isFetching: false,
|
|
493
|
+
isMutating: false,
|
|
494
|
+
source
|
|
495
|
+
});
|
|
496
|
+
resolve(decoded);
|
|
497
|
+
} catch (e) {
|
|
498
|
+
const err = {
|
|
526
499
|
message: "Decoding failed",
|
|
527
500
|
details: String(e)
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
501
|
+
};
|
|
502
|
+
if (isMounted.current)
|
|
503
|
+
setState({
|
|
504
|
+
status: "error",
|
|
505
|
+
error: err,
|
|
506
|
+
isFetching: false,
|
|
507
|
+
isMutating: false,
|
|
508
|
+
data: null,
|
|
509
|
+
source: null
|
|
510
|
+
});
|
|
511
|
+
reject(err);
|
|
512
|
+
}
|
|
534
513
|
}
|
|
514
|
+
},
|
|
515
|
+
onComplete: () => {
|
|
516
|
+
if (isMounted.current)
|
|
517
|
+
setState((prev) => ({
|
|
518
|
+
...prev,
|
|
519
|
+
isMutating: false,
|
|
520
|
+
isFetching: false
|
|
521
|
+
}));
|
|
535
522
|
}
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
523
|
+
});
|
|
524
|
+
const nsStr = allocString(rawDef.namespace);
|
|
525
|
+
const mStr = allocString(rawDef.method);
|
|
526
|
+
const pStr = allocString(path);
|
|
527
|
+
const tpStr = allocString("");
|
|
528
|
+
const hStr = allocString(
|
|
529
|
+
rawDef.headers ? JSON.stringify(rawDef.headers) : ""
|
|
530
|
+
);
|
|
531
|
+
wasmEngine.axiom_wasm_call(
|
|
532
|
+
reqId,
|
|
533
|
+
nsStr.ptr,
|
|
534
|
+
nsStr.len,
|
|
535
|
+
rawDef.endpointId,
|
|
536
|
+
mStr.ptr,
|
|
537
|
+
mStr.len,
|
|
538
|
+
pStr.ptr,
|
|
539
|
+
pStr.len,
|
|
540
|
+
tpStr.ptr,
|
|
541
|
+
tpStr.len,
|
|
542
|
+
hStr.ptr,
|
|
543
|
+
hStr.len,
|
|
544
|
+
payloadPtr,
|
|
545
|
+
payloadLen
|
|
546
|
+
);
|
|
547
|
+
wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);
|
|
548
|
+
wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);
|
|
549
|
+
wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);
|
|
550
|
+
wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);
|
|
551
|
+
wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);
|
|
545
552
|
});
|
|
546
|
-
const nsStr = allocString(rawDef.namespace);
|
|
547
|
-
const mStr = allocString(rawDef.method);
|
|
548
|
-
const pStr = allocString(path);
|
|
549
|
-
const tpStr = allocString("");
|
|
550
|
-
const hStr = allocString(
|
|
551
|
-
rawDef.headers ? JSON.stringify(rawDef.headers) : ""
|
|
552
|
-
);
|
|
553
|
-
wasmEngine.axiom_wasm_call(
|
|
554
|
-
reqId,
|
|
555
|
-
nsStr.ptr,
|
|
556
|
-
nsStr.len,
|
|
557
|
-
rawDef.endpointId,
|
|
558
|
-
mStr.ptr,
|
|
559
|
-
mStr.len,
|
|
560
|
-
pStr.ptr,
|
|
561
|
-
pStr.len,
|
|
562
|
-
tpStr.ptr,
|
|
563
|
-
tpStr.len,
|
|
564
|
-
hStr.ptr,
|
|
565
|
-
hStr.len,
|
|
566
|
-
payloadPtr,
|
|
567
|
-
payloadLen
|
|
568
|
-
);
|
|
569
|
-
wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);
|
|
570
|
-
wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);
|
|
571
|
-
wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);
|
|
572
|
-
wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);
|
|
573
|
-
wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);
|
|
574
553
|
},
|
|
575
554
|
[isReady, config, mutationFn]
|
|
576
555
|
);
|
|
@@ -579,8 +558,7 @@ function useAxiomMutation(mutationFn) {
|
|
|
579
558
|
state,
|
|
580
559
|
data: state.data,
|
|
581
560
|
isMutating: state.isMutating,
|
|
582
|
-
error: state.error
|
|
583
|
-
getFieldError: (fieldName) => extractFieldError(state.error, fieldName)
|
|
561
|
+
error: state.error
|
|
584
562
|
};
|
|
585
563
|
}
|
|
586
564
|
export {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/core-bridge.ts","../src/context/AxiomProvider.tsx","../src/context/AxiomDataContext.tsx","../src/hooks/useAxiomQuery.ts","../src/hooks/useAxiom.ts","../src/core/ActiveQuery.ts","../src/core/QueryManager.ts","../src/components/AxQuery.tsx","../src/components/AxWhen.tsx","../src/components/AxTrigger.tsx","../src/hooks/useAxiomMutation.ts"],"sourcesContent":["import {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n setAuthToken,\n clearAuthToken,\n} from \"atmx-web\";\nimport { resolveRoute, Route, buildRequestPath } from \"atmx-web\";\nimport { pendingRequests } from \"atmx-web\";\nimport { AtmxConfig, AxiomResponse, AxiomError, EventType } from \"atmx-web\";\n\nlet globalReqCounter = 0;\nexport const getNextReqId = () => ++globalReqCounter;\n\nexport interface AxiomQueryDef<T> {\n namespace: string;\n name: string;\n endpointId: number;\n method: string;\n path: string;\n payload?: any;\n decoder: (json: any) => T;\n serializer?: (payload: any) => any;\n args: Record<string, any>;\n isStream?: boolean;\n headers?: Record<string, string>; // ✨ NEW\n}\n\nexport type AxiomStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\nexport interface AxiomState<T> {\n status: AxiomStatus;\n data: T | null;\n error: AxiomError | null;\n isFetching: boolean;\n isMutating: boolean;\n source: \"cache\" | \"network\" | null;\n}\n\nexport {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n resolveRoute,\n buildRequestPath,\n pendingRequests,\n setAuthToken,\n clearAuthToken,\n};\n\nexport type { AtmxConfig, AxiomResponse, AxiomError, EventType, Route };\n","// FILE: src/context/AxiomProvider.tsx\nimport React, {\n createContext,\n useEffect,\n useState,\n useRef,\n ReactNode,\n} from \"react\";\nimport { initWasm, AtmxConfig } from \"../utils/core-bridge\";\n\nexport interface AxiomContextState {\n isReady: boolean;\n error: Error | null;\n config: AtmxConfig | null;\n}\n\nexport const AxiomContext = createContext<AxiomContextState | undefined>(\n undefined,\n);\n\nexport interface AxiomProviderProps {\n configUrl?: string;\n config?: AtmxConfig;\n children: ReactNode;\n fallback?: ReactNode;\n}\n\nexport const AxiomProvider: React.FC<AxiomProviderProps> = ({\n configUrl,\n config,\n children,\n fallback,\n}) => {\n const [state, setState] = useState<AxiomContextState>({\n isReady: false,\n error: null,\n config: null,\n });\n\n const initStarted = useRef(false);\n\n useEffect(() => {\n if (initStarted.current) return;\n initStarted.current = true;\n\n const bootSequence = async () => {\n try {\n let finalConfig: AtmxConfig;\n if (configUrl) {\n const res = await fetch(configUrl);\n if (!res.ok)\n throw new Error(`Failed to load config from ${configUrl}`);\n finalConfig = await res.json();\n } else if (config) {\n finalConfig = config;\n } else {\n throw new Error(\n \"AxiomProvider requires either 'configUrl' or 'config' prop.\",\n );\n }\n\n if (\n !finalConfig.contracts ||\n Object.keys(finalConfig.contracts).length === 0\n ) {\n throw new Error(\"No contracts defined in ATMX config.\");\n }\n\n // 1. Initialize Wasm Engine (Handles ALL contracts natively!)\n await initWasm(finalConfig);\n\n console.log(`⚛️ ATMX-React: Provider ready.`);\n setState({ isReady: true, error: null, config: finalConfig });\n } catch (err: any) {\n console.error(\"ATMX Provider Boot Error:\", err);\n setState({ isReady: false, error: err, config: null });\n }\n };\n\n bootSequence();\n }, [configUrl, config]);\n\n if (state.error)\n return (\n <div style={{ color: \"red\", padding: \"20px\", fontFamily: \"monospace\" }}>\n <strong>ATMX Initialization Failed:</strong>\n <br />\n {state.error.message}\n </div>\n );\n\n if (!state.isReady) return <>{fallback || null}</>;\n\n return (\n <AxiomContext.Provider value={state}>{children}</AxiomContext.Provider>\n );\n};\n","// FILE: src/context/AxiomDataContext.tsx\nimport { createContext, useContext } from \"react\";\nimport { AxiomState } from \"../utils/core-bridge\";\n\nexport const AxiomDataContext = createContext<AxiomState<any> | null>(null);\n\n/**\n * Throwing version: Use this when you absolutely expect to be inside a scope.\n */\nexport function useAxiomContext<T>(): AxiomState<T> {\n const context = useContext(AxiomDataContext);\n if (!context) {\n throw new Error(\n \"useAxiomContext must be used within an <AxQuery> or <AxMutate> scope.\",\n );\n }\n return context as AxiomState<T>;\n}\n\n/**\n * Safe version: Returns T or an empty object.\n * Used for Context Inheritance ($data access).\n */\nexport function useAxiomData<T>(): T {\n const context = useContext(AxiomDataContext);\n return (context?.data || {}) as T;\n}\n","// FILE: src/hooks/useAxiomQuery.ts\nimport { useEffect, useSyncExternalStore, useCallback } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport { AxiomQueryDef } from \"../utils/core-bridge\";\nimport { axiomQueryManager } from \"../core/QueryManager\";\n\nexport function useAxiomQuery<T>(\n queryDef: AxiomQueryDef<T>,\n options: { enabled?: boolean } = {},\n) {\n const { isReady, config } = useAxiom();\n const { enabled = true } = options;\n\n const activeQuery = axiomQueryManager.getQuery(queryDef);\n\n const state = useSyncExternalStore(\n useCallback(\n (onStoreChange) => activeQuery.subscribe(onStoreChange),\n [activeQuery],\n ),\n () => activeQuery.getState(),\n () => activeQuery.getState(),\n );\n\n useEffect(() => {\n if (!isReady || !enabled) return;\n if (state.status === \"idle\") {\n activeQuery.fetch(false, config?.debug);\n }\n }, [isReady, enabled, activeQuery, state.status, config?.debug]);\n\n return {\n data: state.data,\n isLoading: state.status === \"loading\",\n isFetching: state.isFetching,\n source: state.source,\n error: state.error,\n state: state, // Export raw state for <AxWhen>\n refetch: () => activeQuery.fetch(true, config?.debug),\n };\n}\n","// src/hooks/useAxiom.ts\nimport { useContext } from 'react';\nimport { AxiomContext } from '../context/AxiomProvider';\n\nexport const useAxiom = () => {\n const context = useContext(AxiomContext);\n\n if (context === undefined) {\n throw new Error(\"useAxiom must be used within an <AxiomProvider>. Did you forget to wrap your app?\");\n }\n\n return context;\n};","// FILE: src/core/ActiveQuery.ts\nimport {\n AxiomState,\n AxiomQueryDef,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n getNextReqId,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\ntype Listener<T> = (state: AxiomState<T>) => void;\n\nexport class ActiveQuery<T> {\n public queryKey: string;\n public def: AxiomQueryDef<T>;\n private state: AxiomState<T>;\n private listeners: Set<Listener<T>> = new Set();\n private currentReqId: number | null = null;\n\n constructor(queryKey: string, def: AxiomQueryDef<T>) {\n this.queryKey = queryKey;\n this.def = def;\n this.state = {\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n };\n }\n\n public getState(): AxiomState<T> {\n return this.state;\n }\n\n public subscribe(listener: Listener<T>): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private updateState(partial: Partial<AxiomState<T>>) {\n this.state = { ...this.state, ...partial };\n this.listeners.forEach((l) => l(this.state));\n }\n\n public fetch(force: boolean = false, debug: boolean = false) {\n if (this.state.isFetching && !force) return;\n\n this.updateState({\n isFetching: true,\n status: this.state.data ? \"success\" : \"loading\",\n });\n\n const reqId = getNextReqId();\n this.currentReqId = reqId;\n\n // FIX: Bypass the dictionary lookup. We already have the metadata from the generated SDK!\n const syntheticRoute: Route = {\n id: this.def.endpointId,\n namespace: this.def.namespace,\n name: this.def.name || \"unknown\",\n method: this.def.method,\n pathTemplate: this.def.path,\n isStream: !!this.def.isStream,\n };\n\n // Auto-interpolate {path_params} and ?query_params\n const { path } = buildRequestPath(syntheticRoute, this.def.args);\n\n if (debug) {\n console.groupCollapsed(\n `%c➔ WASM QUERY [#${reqId}]`,\n `color: #7c3aed; font-weight: bold;`,\n );\n console.log(\"Namespace:\", this.def.namespace);\n console.log(\"Endpoint ID:\", this.def.endpointId);\n console.log(\"Path:\", path);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!this.def.isStream,\n onResponse: (response) => {\n if (this.currentReqId !== reqId) return;\n\n if (debug) {\n const evtName =\n response.eventType === 1\n ? \"NetworkSuccess\"\n : response.eventType === 2\n ? \"CacheHit\"\n : response.eventType === 3\n ? \"CacheHitAndFetching\"\n : response.eventType === 4\n ? \"Error\"\n : \"Complete\";\n console.groupCollapsed(\n `%c← WASM RESP [#${reqId}]`,\n `color: #059669; font-weight: bold;`,\n );\n console.log(\"Event Type:\", evtName);\n if (response.data) console.log(\"Data:\", response.data);\n if (response.error) console.log(\"Error:\", response.error);\n console.groupEnd();\n }\n\n if (response.eventType === 4) {\n this.updateState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n });\n return;\n }\n\n if (response.data) {\n try {\n const decodedData = this.def.decoder(response.data);\n let source: \"cache\" | \"network\" = \"network\";\n let isFetching = false;\n\n if (response.eventType === 2) {\n source = \"cache\";\n isFetching = false;\n } else if (response.eventType === 3) {\n source = \"cache\";\n isFetching = true;\n } else if (response.eventType === 1) {\n source = \"network\";\n isFetching = false;\n }\n\n this.updateState({\n status: \"success\",\n data: decodedData,\n error: null,\n isFetching,\n source,\n });\n } catch (e) {\n this.updateState({\n status: \"error\",\n error: { message: \"Decoding failed\", details: String(e) } as any,\n isFetching: false,\n });\n }\n }\n },\n onComplete: () => {\n if (this.currentReqId !== reqId) return;\n this.updateState({ isFetching: false });\n },\n });\n\n const isFormUrlEncoded = Object.entries(this.def.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0;\n if (this.def.payload !== undefined && this.def.payload !== null) {\n const safePayload = this.def.serializer\n ? this.def.serializer(this.def.payload)\n : this.def.payload;\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof safePayload === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(safePayload))\n params.append(k, String(v));\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(safePayload));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n const nsStr = allocString(this.def.namespace);\n const mStr = allocString(this.def.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n this.def.headers ? JSON.stringify(this.def.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n this.def.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n }\n}\n","// FILE: src/core/QueryManager.ts\nimport { ActiveQuery } from \"./ActiveQuery\";\nimport { AxiomQueryDef } from \"../utils/core-bridge\";\n\nclass QueryManager {\n private queries = new Map<string, ActiveQuery<any>>();\n\n private buildKey(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ): string {\n // EXACT ATMX Core Cache Key Match!\n return `${namespace}:${endpointId}:${JSON.stringify(args)}`;\n }\n\n public getQuery<T>(def: AxiomQueryDef<T>): ActiveQuery<T> {\n const key = this.buildKey(def.namespace, def.endpointId, def.args);\n\n if (this.queries.has(key)) {\n return this.queries.get(key) as ActiveQuery<T>;\n }\n\n const newQuery = new ActiveQuery<T>(key, def);\n this.queries.set(key, newQuery);\n return newQuery;\n }\n\n public invalidate(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ) {\n const key = this.buildKey(namespace, endpointId, args);\n const query = this.queries.get(key);\n if (query) query.fetch(true);\n }\n}\n\nexport const axiomQueryManager = new QueryManager();\n","// FILE: src/components/AxQuery.tsx\nimport { ReactNode } from \"react\";\nimport { AxiomQueryDef, AxiomState } from \"../utils/core-bridge\";\nimport { useAxiomQuery } from \"../hooks/useAxiomQuery\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\nexport interface AxQueryProps<T> {\n call: AxiomQueryDef<T>;\n children:\n | ReactNode\n | ((props: {\n data: T | null;\n state: AxiomState<T>;\n refetch: () => void;\n }) => ReactNode);\n enabled?: boolean;\n}\n\nexport function AxQuery<T>({\n call,\n children,\n enabled = true,\n}: AxQueryProps<T>) {\n const result = useAxiomQuery<T>(call, { enabled });\n\n const content =\n typeof children === \"function\"\n ? children({\n data: result.data,\n state: result.state,\n refetch: result.refetch,\n })\n : children;\n\n // Provide the state downwards so nested components (or AxWhen) can inherit it!\n return (\n <AxiomDataContext.Provider value={result.state}>\n {content}\n </AxiomDataContext.Provider>\n );\n}\n","// FILE: src/components/AxWhen.tsx\nimport { ReactNode, useContext } from \"react\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\ninterface AxWhenProps {\n /** Explicit state object from a hook (e.g. sdk.users.useGetUser) */\n value?: {\n status: string;\n data?: any;\n isFetching?: boolean;\n isMutating?: boolean;\n };\n /** Comma-separated states: \"idle, loading, mutating, data, success, error\" */\n is: string;\n children: ReactNode;\n}\n\nexport function AxWhen({ value, is, children }: AxWhenProps) {\n // Use useContext directly instead of the throwing hook useAxiomContext\n const context = useContext(AxiomDataContext);\n const stateObj = value || context;\n\n // If no value is provided and we aren't inside a scope, render nothing\n if (!stateObj) return null;\n\n const expectedStates = is.split(\",\").map((s) => s.trim().toLowerCase());\n\n let currentState = \"idle\";\n\n if (stateObj.isMutating) {\n currentState = \"mutating\";\n } else if (stateObj.status === \"loading\") {\n currentState = \"loading\";\n } else if (stateObj.status === \"error\") {\n currentState = \"error\";\n } else if (stateObj.status === \"success\" || stateObj.data) {\n currentState = \"data\";\n }\n\n // Handle 'success' as a distinct semantic state for Mutations\n if (\n expectedStates.includes(\"success\") &&\n stateObj.status === \"success\" &&\n !stateObj.isMutating\n ) {\n currentState = \"success\";\n }\n\n if (expectedStates.includes(currentState)) {\n return <>{children}</>;\n }\n\n return null;\n}\n","// src/components/AxTrigger.tsx\nimport { useEffect, useRef, ReactNode } from 'react';\n\ninterface AxTriggerProps {\n onTrigger: () => void;\n once?: boolean;\n children?: ReactNode;\n}\n\nexport const AxTrigger: React.FC<AxTriggerProps> = ({ onTrigger, once = true, children }) => {\n const elementRef = useRef<HTMLDivElement>(null);\n const hasTriggered = useRef(false);\n\n useEffect(() => {\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n if (once && hasTriggered.current) return;\n\n onTrigger();\n hasTriggered.current = true;\n\n if (once) observer.unobserve(entry.target);\n }\n });\n }, { threshold: 0.1 });\n\n if (elementRef.current) {\n observer.observe(elementRef.current);\n }\n\n return () => observer.disconnect();\n }, [onTrigger, once]);\n\n return <div ref={elementRef}>{children}</div>;\n};","// FILE: src/hooks/useAxiomMutation.ts\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport {\n AxiomQueryDef,\n AxiomState,\n getNextReqId,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\nfunction extractFieldError(error: any, fieldName: string): string | null {\n if (error?.code !== \"ValidationError\" || !error?.details) return null;\n const lines = error.details.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(fieldName + \":\"))\n return line.substring(fieldName.length + 1).trim();\n }\n return null;\n}\n\nexport function useAxiomMutation<T, A>(\n mutationFn: (args: A) => AxiomQueryDef<T>,\n) {\n const { isReady, config } = useAxiom();\n const [state, setState] = useState<AxiomState<T>>({\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n });\n const isMounted = useRef(true);\n\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const execute = useCallback(\n async (args: A, options?: { headers?: Record<string, string> }) => {\n if (!isReady || !config) return;\n\n const rawDef = mutationFn(args);\n rawDef.headers = options?.headers; // ✨ Inject dynamic headers!\n\n const reqId = getNextReqId();\n if (isMounted.current)\n setState({\n status: \"loading\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: true,\n source: null,\n });\n\n // FIX: Bypass router lookup!\n const syntheticRoute: Route = {\n id: rawDef.endpointId,\n namespace: rawDef.namespace,\n name: rawDef.name || \"unknown\",\n method: rawDef.method,\n pathTemplate: rawDef.path,\n isStream: !!rawDef.isStream,\n };\n\n const { path } = buildRequestPath(syntheticRoute, rawDef.args);\n\n const isFormUrlEncoded = Object.entries(rawDef.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0,\n payloadObj = null;\n if (rawDef.payload !== undefined && rawDef.payload !== null) {\n payloadObj = rawDef.serializer\n ? rawDef.serializer(rawDef.payload)\n : rawDef.payload;\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof payloadObj === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(payloadObj))\n params.append(k, String(v));\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(payloadObj));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n if (config.debug) {\n console.groupCollapsed(\n `%c➔ WASM MUTATE [#${reqId}]`,\n `color: #7c3aed; font-weight: bold;`,\n );\n console.log(\"Namespace:\", rawDef.namespace);\n console.log(\"Endpoint ID:\", rawDef.endpointId);\n console.log(\"Path:\", path);\n console.log(\"Payload:\", payloadObj);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!rawDef.isStream,\n onResponse: (response) => {\n if (!isMounted.current) return;\n\n if (config.debug) {\n const evtName =\n response.eventType === 1\n ? \"NetworkSuccess\"\n : response.eventType === 2\n ? \"CacheHit\"\n : response.eventType === 3\n ? \"CacheHitAndFetching\"\n : response.eventType === 4\n ? \"Error\"\n : \"Complete\";\n console.groupCollapsed(\n `%c← WASM RESP [#${reqId}]`,\n `color: #059669; font-weight: bold;`,\n );\n console.log(\"Event Type:\", evtName);\n if (response.data) console.log(\"Data:\", response.data);\n if (response.error) console.log(\"Error:\", response.error);\n console.groupEnd();\n }\n\n if (response.eventType === 4) {\n setState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n return;\n }\n if (response.data) {\n try {\n let source: \"cache\" | \"network\" = \"network\";\n if (response.eventType === 2 || response.eventType === 3)\n source = \"cache\";\n\n setState({\n status: \"success\",\n data: rawDef.decoder(response.data),\n error: null,\n isFetching: false,\n isMutating: false,\n source,\n });\n } catch (e) {\n setState({\n status: \"error\",\n error: {\n message: \"Decoding failed\",\n details: String(e),\n } as any,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n }\n }\n },\n onComplete: () => {\n if (isMounted.current)\n setState((prev) => ({\n ...prev,\n isMutating: false,\n isFetching: false,\n }));\n },\n });\n\n const nsStr = allocString(rawDef.namespace);\n const mStr = allocString(rawDef.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n rawDef.headers ? JSON.stringify(rawDef.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n rawDef.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n },\n [isReady, config, mutationFn],\n );\n\n return {\n execute,\n state,\n data: state.data,\n isMutating: state.isMutating,\n error: state.error,\n getFieldError: (fieldName: string) =>\n extractFieldError(state.error, fieldName),\n };\n}\n"],"mappings":"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","names":["createContext","useEffect","useContext","useContext","useEffect","jsx","useContext","Fragment","jsx","useContext","useEffect","useRef","jsx","useState","useCallback","useRef","useEffect","useState","useRef","useEffect","useCallback"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/core-bridge.ts","../src/context/AxiomProvider.tsx","../src/context/AxiomDataContext.tsx","../src/hooks/useAxiomQuery.ts","../src/hooks/useAxiom.ts","../src/core/ActiveQuery.ts","../src/core/QueryManager.ts","../src/components/AxQuery.tsx","../src/components/AxWhen.tsx","../src/components/AxTrigger.tsx","../src/hooks/useAxiomMutation.ts"],"sourcesContent":["import {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n setAuthToken,\n clearAuthToken,\n} from \"atmx-web\";\nimport { resolveRoute, Route, buildRequestPath } from \"atmx-web\";\nimport { pendingRequests } from \"atmx-web\";\nimport { AtmxConfig, AxiomResponse, AxiomError, EventType } from \"atmx-web\";\n\nlet globalReqCounter = 0;\nexport const getNextReqId = () => ++globalReqCounter;\n\nexport interface AxiomQueryDef<T> {\n namespace: string;\n name: string;\n endpointId: number;\n method: string;\n path: string;\n payload?: any;\n decoder: (json: any) => T;\n serializer?: (payload: any) => any;\n args: Record<string, any>;\n isStream?: boolean;\n headers?: Record<string, string>; // ✨ NEW\n}\n\nexport type AxiomStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\nexport interface AxiomState<T> {\n status: AxiomStatus;\n data: T | null;\n error: AxiomError | null;\n isFetching: boolean;\n isMutating: boolean;\n source: \"cache\" | \"network\" | null;\n}\n\nexport {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n resolveRoute,\n buildRequestPath,\n pendingRequests,\n setAuthToken,\n clearAuthToken,\n};\n\nexport type { AtmxConfig, AxiomResponse, AxiomError, EventType, Route };\n","// FILE: src/context/AxiomProvider.tsx\nimport React, {\n createContext,\n useEffect,\n useState,\n useRef,\n ReactNode,\n} from \"react\";\nimport { initWasm, AtmxConfig } from \"../utils/core-bridge\";\n\nexport interface AxiomContextState {\n isReady: boolean;\n error: Error | null;\n config: AtmxConfig | null;\n}\n\nexport const AxiomContext = createContext<AxiomContextState | undefined>(\n undefined,\n);\n\nexport interface AxiomProviderProps {\n configUrl?: string;\n config?: AtmxConfig;\n children: ReactNode;\n fallback?: ReactNode;\n}\n\nexport const AxiomProvider: React.FC<AxiomProviderProps> = ({\n configUrl,\n config,\n children,\n fallback,\n}) => {\n const [state, setState] = useState<AxiomContextState>({\n isReady: false,\n error: null,\n config: null,\n });\n\n const initStarted = useRef(false);\n\n useEffect(() => {\n if (initStarted.current) return;\n initStarted.current = true;\n\n const bootSequence = async () => {\n try {\n let finalConfig: AtmxConfig;\n if (configUrl) {\n const res = await fetch(configUrl);\n if (!res.ok)\n throw new Error(`Failed to load config from ${configUrl}`);\n finalConfig = await res.json();\n } else if (config) {\n finalConfig = config;\n } else {\n throw new Error(\n \"AxiomProvider requires either 'configUrl' or 'config' prop.\",\n );\n }\n\n if (\n !finalConfig.contracts ||\n Object.keys(finalConfig.contracts).length === 0\n ) {\n throw new Error(\"No contracts defined in ATMX config.\");\n }\n\n // 1. Initialize Wasm Engine (Handles ALL contracts natively!)\n await initWasm(finalConfig);\n\n console.log(`⚛️ ATMX-React: Provider ready.`);\n setState({ isReady: true, error: null, config: finalConfig });\n } catch (err: any) {\n console.error(\"ATMX Provider Boot Error:\", err);\n setState({ isReady: false, error: err, config: null });\n }\n };\n\n bootSequence();\n }, [configUrl, config]);\n\n if (state.error)\n return (\n <div style={{ color: \"red\", padding: \"20px\", fontFamily: \"monospace\" }}>\n <strong>ATMX Initialization Failed:</strong>\n <br />\n {state.error.message}\n </div>\n );\n\n if (!state.isReady) return <>{fallback || null}</>;\n\n return (\n <AxiomContext.Provider value={state}>{children}</AxiomContext.Provider>\n );\n};\n","// FILE: src/context/AxiomDataContext.tsx\nimport { createContext, useContext } from \"react\";\nimport { AxiomState } from \"../utils/core-bridge\";\n\nexport const AxiomDataContext = createContext<AxiomState<any> | null>(null);\n\n/**\n * Throwing version: Use this when you absolutely expect to be inside a scope.\n */\nexport function useAxiomContext<T>(): AxiomState<T> {\n const context = useContext(AxiomDataContext);\n if (!context) {\n throw new Error(\n \"useAxiomContext must be used within an <AxQuery> or <AxMutate> scope.\",\n );\n }\n return context as AxiomState<T>;\n}\n\n/**\n * Safe version: Returns T or an empty object.\n * Used for Context Inheritance ($data access).\n */\nexport function useAxiomData<T>(): T {\n const context = useContext(AxiomDataContext);\n return (context?.data || {}) as T;\n}\n","// FILE: src/hooks/useAxiomQuery.ts\nimport { useEffect, useSyncExternalStore, useCallback } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport { AxiomQueryDef } from \"../utils/core-bridge\";\nimport { axiomQueryManager } from \"../core/QueryManager\";\n\nexport function useAxiomQuery<T>(\n queryDef: AxiomQueryDef<T>,\n options: { enabled?: boolean } = {},\n) {\n const { isReady, config } = useAxiom();\n const { enabled = true } = options;\n\n const activeQuery = axiomQueryManager.getQuery(queryDef);\n\n const state = useSyncExternalStore(\n useCallback(\n (onStoreChange) => activeQuery.subscribe(onStoreChange),\n [activeQuery],\n ),\n () => activeQuery.getState(),\n () => activeQuery.getState(),\n );\n\n useEffect(() => {\n if (!isReady || !enabled) return;\n if (state.status === \"idle\") {\n activeQuery.fetch(false, config?.debug);\n }\n }, [isReady, enabled, activeQuery, state.status, config?.debug]);\n\n return {\n data: state.data,\n isLoading: state.status === \"loading\",\n isFetching: state.isFetching,\n source: state.source,\n error: state.error,\n state: state, // Export raw state for <AxWhen>\n refetch: () => activeQuery.fetch(true, config?.debug),\n };\n}\n","// src/hooks/useAxiom.ts\nimport { useContext } from 'react';\nimport { AxiomContext } from '../context/AxiomProvider';\n\nexport const useAxiom = () => {\n const context = useContext(AxiomContext);\n\n if (context === undefined) {\n throw new Error(\"useAxiom must be used within an <AxiomProvider>. Did you forget to wrap your app?\");\n }\n\n return context;\n};","// FILE: src/core/ActiveQuery.ts\nimport {\n AxiomState,\n AxiomQueryDef,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n getNextReqId,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\ntype Listener<T> = (state: AxiomState<T>) => void;\n\nexport class ActiveQuery<T> {\n public queryKey: string;\n public def: AxiomQueryDef<T>;\n private state: AxiomState<T>;\n private listeners: Set<Listener<T>> = new Set();\n private currentReqId: number | null = null;\n\n constructor(queryKey: string, def: AxiomQueryDef<T>) {\n this.queryKey = queryKey;\n this.def = def;\n this.state = {\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n };\n }\n\n public getState(): AxiomState<T> {\n return this.state;\n }\n\n public subscribe(listener: Listener<T>): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private updateState(partial: Partial<AxiomState<T>>) {\n this.state = { ...this.state, ...partial };\n this.listeners.forEach((l) => l(this.state));\n }\n\n public fetch(force: boolean = false, debug: boolean = false) {\n if (this.state.isFetching && !force) return;\n\n this.updateState({\n isFetching: true,\n status: this.state.data ? \"success\" : \"loading\",\n });\n\n const reqId = getNextReqId();\n this.currentReqId = reqId;\n\n // FIX: Bypass the dictionary lookup. We already have the metadata from the generated SDK!\n const syntheticRoute: Route = {\n id: this.def.endpointId,\n namespace: this.def.namespace,\n name: this.def.name || \"unknown\",\n method: this.def.method,\n pathTemplate: this.def.path,\n isStream: !!this.def.isStream,\n };\n\n // Auto-interpolate {path_params} and ?query_params\n const { path } = buildRequestPath(syntheticRoute, this.def.args);\n\n if (debug) {\n console.groupCollapsed(\n `%c➔ WASM QUERY [#${reqId}]`,\n `color: #7c3aed; font-weight: bold;`,\n );\n console.log(\"Namespace:\", this.def.namespace);\n console.log(\"Endpoint ID:\", this.def.endpointId);\n console.log(\"Path:\", path);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!this.def.isStream,\n onResponse: (response) => {\n if (this.currentReqId !== reqId) return;\n\n if (debug) {\n const evtName =\n response.eventType === 1\n ? \"NetworkSuccess\"\n : response.eventType === 2\n ? \"CacheHit\"\n : response.eventType === 3\n ? \"CacheHitAndFetching\"\n : response.eventType === 4\n ? \"Error\"\n : \"Complete\";\n console.groupCollapsed(\n `%c← WASM RESP [#${reqId}]`,\n `color: #059669; font-weight: bold;`,\n );\n console.log(\"Event Type:\", evtName);\n if (response.data) console.log(\"Data:\", response.data);\n if (response.error) console.log(\"Error:\", response.error);\n console.groupEnd();\n }\n\n if (response.eventType === 4) {\n this.updateState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n });\n return;\n }\n\n if (response.data) {\n try {\n const decodedData = this.def.decoder(response.data);\n let source: \"cache\" | \"network\" = \"network\";\n let isFetching = false;\n\n if (response.eventType === 2) {\n source = \"cache\";\n isFetching = false;\n } else if (response.eventType === 3) {\n source = \"cache\";\n isFetching = true;\n } else if (response.eventType === 1) {\n source = \"network\";\n isFetching = false;\n }\n\n this.updateState({\n status: \"success\",\n data: decodedData,\n error: null,\n isFetching,\n source,\n });\n } catch (e) {\n this.updateState({\n status: \"error\",\n error: { message: \"Decoding failed\", details: String(e) } as any,\n isFetching: false,\n });\n }\n }\n },\n onComplete: () => {\n if (this.currentReqId !== reqId) return;\n this.updateState({ isFetching: false });\n },\n });\n\n const isFormUrlEncoded = Object.entries(this.def.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0;\n if (this.def.payload !== undefined && this.def.payload !== null) {\n const safePayload = this.def.serializer\n ? this.def.serializer(this.def.payload)\n : this.def.payload;\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof safePayload === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(safePayload))\n params.append(k, String(v));\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(safePayload));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n const nsStr = allocString(this.def.namespace);\n const mStr = allocString(this.def.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n this.def.headers ? JSON.stringify(this.def.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n this.def.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n }\n}\n","// FILE: src/core/QueryManager.ts\nimport { ActiveQuery } from \"./ActiveQuery\";\nimport { AxiomQueryDef } from \"../utils/core-bridge\";\n\nclass QueryManager {\n private queries = new Map<string, ActiveQuery<any>>();\n\n private buildKey(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ): string {\n // EXACT ATMX Core Cache Key Match!\n return `${namespace}:${endpointId}:${JSON.stringify(args)}`;\n }\n\n public getQuery<T>(def: AxiomQueryDef<T>): ActiveQuery<T> {\n const key = this.buildKey(def.namespace, def.endpointId, def.args);\n\n if (this.queries.has(key)) {\n return this.queries.get(key) as ActiveQuery<T>;\n }\n\n const newQuery = new ActiveQuery<T>(key, def);\n this.queries.set(key, newQuery);\n return newQuery;\n }\n\n public invalidate(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ) {\n const key = this.buildKey(namespace, endpointId, args);\n const query = this.queries.get(key);\n if (query) query.fetch(true);\n }\n}\n\nexport const axiomQueryManager = new QueryManager();\n","// FILE: src/components/AxQuery.tsx\nimport { ReactNode } from \"react\";\nimport { AxiomQueryDef, AxiomState } from \"../utils/core-bridge\";\nimport { useAxiomQuery } from \"../hooks/useAxiomQuery\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\nexport interface AxQueryProps<T> {\n call: AxiomQueryDef<T>;\n children:\n | ReactNode\n | ((props: {\n data: T | null;\n state: AxiomState<T>;\n refetch: () => void;\n }) => ReactNode);\n enabled?: boolean;\n}\n\nexport function AxQuery<T>({\n call,\n children,\n enabled = true,\n}: AxQueryProps<T>) {\n const result = useAxiomQuery<T>(call, { enabled });\n\n const content =\n typeof children === \"function\"\n ? children({\n data: result.data,\n state: result.state,\n refetch: result.refetch,\n })\n : children;\n\n // Provide the state downwards so nested components (or AxWhen) can inherit it!\n return (\n <AxiomDataContext.Provider value={result.state}>\n {content}\n </AxiomDataContext.Provider>\n );\n}\n","// FILE: src/components/AxWhen.tsx\nimport { ReactNode, useContext } from \"react\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\ninterface AxWhenProps {\n /** Explicit state object from a hook (e.g. sdk.users.useGetUser) */\n value?: {\n status: string;\n data?: any;\n isFetching?: boolean;\n isMutating?: boolean;\n };\n /** Comma-separated states: \"idle, loading, mutating, data, success, error\" */\n is: string;\n children: ReactNode;\n}\n\nexport function AxWhen({ value, is, children }: AxWhenProps) {\n // Use useContext directly instead of the throwing hook useAxiomContext\n const context = useContext(AxiomDataContext);\n const stateObj = value || context;\n\n // If no value is provided and we aren't inside a scope, render nothing\n if (!stateObj) return null;\n\n const expectedStates = is.split(\",\").map((s) => s.trim().toLowerCase());\n\n let currentState = \"idle\";\n\n if (stateObj.isMutating) {\n currentState = \"mutating\";\n } else if (stateObj.status === \"loading\") {\n currentState = \"loading\";\n } else if (stateObj.status === \"error\") {\n currentState = \"error\";\n } else if (stateObj.status === \"success\" || stateObj.data) {\n currentState = \"data\";\n }\n\n // Handle 'success' as a distinct semantic state for Mutations\n if (\n expectedStates.includes(\"success\") &&\n stateObj.status === \"success\" &&\n !stateObj.isMutating\n ) {\n currentState = \"success\";\n }\n\n if (expectedStates.includes(currentState)) {\n return <>{children}</>;\n }\n\n return null;\n}\n","// src/components/AxTrigger.tsx\nimport { useEffect, useRef, ReactNode } from 'react';\n\ninterface AxTriggerProps {\n onTrigger: () => void;\n once?: boolean;\n children?: ReactNode;\n}\n\nexport const AxTrigger: React.FC<AxTriggerProps> = ({ onTrigger, once = true, children }) => {\n const elementRef = useRef<HTMLDivElement>(null);\n const hasTriggered = useRef(false);\n\n useEffect(() => {\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n if (once && hasTriggered.current) return;\n\n onTrigger();\n hasTriggered.current = true;\n\n if (once) observer.unobserve(entry.target);\n }\n });\n }, { threshold: 0.1 });\n\n if (elementRef.current) {\n observer.observe(elementRef.current);\n }\n\n return () => observer.disconnect();\n }, [onTrigger, once]);\n\n return <div ref={elementRef}>{children}</div>;\n};","// FILE: atmx-react/src/hooks/useAxiomMutation.ts\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport {\n AxiomQueryDef,\n AxiomState,\n getNextReqId,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\nexport function useAxiomMutation<T, A>(\n mutationFn: (args: A) => AxiomQueryDef<T>,\n) {\n const { isReady, config } = useAxiom();\n const [state, setState] = useState<AxiomState<T>>({\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n });\n const isMounted = useRef(true);\n\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const execute = useCallback(\n // ✨ FIX: execute now returns a Promise<T>!\n (args: A, options?: { headers?: Record<string, string> }): Promise<T> => {\n return new Promise((resolve, reject) => {\n if (!isReady || !config) return reject(new Error(\"ATMX not ready\"));\n\n const rawDef = mutationFn(args);\n rawDef.headers = options?.headers;\n\n const reqId = getNextReqId();\n\n if (isMounted.current)\n setState({\n status: \"loading\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: true,\n source: null,\n });\n\n const syntheticRoute: Route = {\n id: rawDef.endpointId,\n namespace: rawDef.namespace,\n name: rawDef.name || \"unknown\",\n method: rawDef.method,\n pathTemplate: rawDef.path,\n isStream: !!rawDef.isStream,\n };\n\n const { path } = buildRequestPath(syntheticRoute, rawDef.args);\n\n const isFormUrlEncoded = Object.entries(rawDef.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0;\n if (rawDef.payload !== undefined && rawDef.payload !== null) {\n const payloadObj = rawDef.serializer\n ? rawDef.serializer(rawDef.payload)\n : rawDef.payload;\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof payloadObj === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(payloadObj))\n params.append(k, String(v));\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(payloadObj));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n pendingRequests.set(reqId, {\n isStream: !!rawDef.isStream,\n onResponse: (response) => {\n if (response.eventType === 4) {\n // Error\n if (isMounted.current)\n setState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n // ✨ Reject the promise!\n reject(response.error);\n return;\n }\n if (response.data) {\n try {\n let source: \"cache\" | \"network\" = \"network\";\n if (response.eventType === 2 || response.eventType === 3)\n source = \"cache\";\n const decoded = rawDef.decoder(response.data);\n\n if (isMounted.current)\n setState({\n status: \"success\",\n data: decoded,\n error: null,\n isFetching: false,\n isMutating: false,\n source,\n });\n\n // ✨ Resolve the promise!\n resolve(decoded);\n } catch (e) {\n const err = {\n message: \"Decoding failed\",\n details: String(e),\n } as any;\n if (isMounted.current)\n setState({\n status: \"error\",\n error: err,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n reject(err);\n }\n }\n },\n onComplete: () => {\n if (isMounted.current)\n setState((prev) => ({\n ...prev,\n isMutating: false,\n isFetching: false,\n }));\n },\n });\n\n const nsStr = allocString(rawDef.namespace);\n const mStr = allocString(rawDef.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n rawDef.headers ? JSON.stringify(rawDef.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n rawDef.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n });\n },\n [isReady, config, mutationFn],\n );\n\n return {\n execute,\n state,\n data: state.data,\n isMutating: state.isMutating,\n error: state.error,\n };\n}\n"],"mappings":"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","names":["createContext","useEffect","useContext","useContext","useEffect","jsx","useContext","Fragment","jsx","useContext","useEffect","useRef","jsx","useState","useCallback","useRef","useEffect","useState","useRef","useEffect","useCallback"]}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"files": [
|
|
4
4
|
"dist"
|
|
5
5
|
],
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.49.0",
|
|
7
7
|
"description": "React bindings for ATMX and Axiom Core WASM runtime",
|
|
8
8
|
"main": "./dist/index.js",
|
|
9
9
|
"module": "./dist/index.mjs",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"atmx-web": "^0.
|
|
22
|
+
"atmx-web": "^0.49.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/react": "^19.0.0",
|