atmx-react 0.56.0 → 0.57.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.js CHANGED
@@ -481,24 +481,25 @@ function useAxiomMutation(mutationFn) {
481
481
  pathTemplate: rawDef.path,
482
482
  isStream: !!rawDef.isStream
483
483
  };
484
- const { path } = (0, import_atmx_web2.buildRequestPath)(syntheticRoute, rawDef.args);
484
+ const { path, remainingArgs } = (0, import_atmx_web2.buildRequestPath)(
485
+ syntheticRoute,
486
+ rawDef.args
487
+ );
485
488
  const isFormUrlEncoded = Object.entries(rawDef.headers || {}).some(
486
489
  ([k, v]) => k.toLowerCase() === "content-type" && v.includes("application/x-www-form-urlencoded")
487
490
  );
488
491
  let payloadPtr = 0, payloadLen = 0, payloadObj = null;
489
492
  if (rawDef.payload !== void 0 && rawDef.payload !== null) {
490
493
  payloadObj = rawDef.serializer ? rawDef.serializer(rawDef.payload) : rawDef.payload;
491
- } else if (Object.keys(rawDef.args).length > 0) {
492
- payloadObj = rawDef.args;
494
+ } else if (Object.keys(remainingArgs).length > 0) {
495
+ payloadObj = remainingArgs;
493
496
  }
494
497
  if (payloadObj !== null) {
495
498
  let payloadBytes;
496
499
  if (isFormUrlEncoded && typeof payloadObj === "object") {
497
500
  const params = new URLSearchParams();
498
501
  for (const [k, v] of Object.entries(payloadObj)) {
499
- if (v !== void 0 && v !== null) {
500
- params.append(k, String(v));
501
- }
502
+ if (v !== void 0 && v !== null) params.append(k, String(v));
502
503
  }
503
504
  payloadBytes = new TextEncoder().encode(params.toString());
504
505
  } else {
@@ -517,17 +518,6 @@ function useAxiomMutation(mutationFn) {
517
518
  console.log("Path:", path);
518
519
  console.log("Headers:", rawDef.headers);
519
520
  console.log("Payload:", payloadObj);
520
- if (isFormUrlEncoded)
521
- console.log(
522
- "Encoded Form String:",
523
- new TextDecoder().decode(
524
- new Uint8Array(
525
- import_atmx_web.wasmEngine.memory.buffer,
526
- payloadPtr,
527
- payloadLen
528
- )
529
- )
530
- );
531
521
  console.groupEnd();
532
522
  }
533
523
  import_atmx_web3.pendingRequests.set(reqId, {
@@ -545,7 +535,7 @@ function useAxiomMutation(mutationFn) {
545
535
  console.groupEnd();
546
536
  }
547
537
  if (response.eventType === 4) {
548
- if (isMounted.current) {
538
+ if (isMounted.current)
549
539
  setState({
550
540
  status: "error",
551
541
  error: response.error || null,
@@ -554,7 +544,6 @@ function useAxiomMutation(mutationFn) {
554
544
  data: null,
555
545
  source: null
556
546
  });
557
- }
558
547
  reject(response.error);
559
548
  return;
560
549
  }
@@ -564,7 +553,7 @@ function useAxiomMutation(mutationFn) {
564
553
  if (response.eventType === 2 || response.eventType === 3)
565
554
  source = "cache";
566
555
  const decoded = rawDef.decoder(response.data);
567
- if (isMounted.current) {
556
+ if (isMounted.current)
568
557
  setState({
569
558
  status: "success",
570
559
  data: decoded,
@@ -573,14 +562,13 @@ function useAxiomMutation(mutationFn) {
573
562
  isMutating: false,
574
563
  source
575
564
  });
576
- }
577
565
  resolve(decoded);
578
566
  } catch (e) {
579
567
  const err = {
580
568
  message: "Decoding failed",
581
569
  details: String(e)
582
570
  };
583
- if (isMounted.current) {
571
+ if (isMounted.current)
584
572
  setState({
585
573
  status: "error",
586
574
  error: err,
@@ -589,19 +577,17 @@ function useAxiomMutation(mutationFn) {
589
577
  data: null,
590
578
  source: null
591
579
  });
592
- }
593
580
  reject(err);
594
581
  }
595
582
  }
596
583
  },
597
584
  onComplete: () => {
598
- if (isMounted.current) {
585
+ if (isMounted.current)
599
586
  setState((prev) => ({
600
587
  ...prev,
601
588
  isMutating: false,
602
589
  isFetching: false
603
590
  }));
604
- }
605
591
  }
606
592
  });
607
593
  const nsStr = (0, import_atmx_web.allocString)(rawDef.namespace);
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: 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\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 (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\n // ✨ NEW: Merge headers properly\n const mergedHeaders = {\n ...(rawDef.headers || {}),\n ...(options?.headers || {}),\n };\n rawDef.headers =\n Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined;\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\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 // Check if the request is URL Encoded\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: any = null;\n\n if (rawDef.payload !== undefined && rawDef.payload !== null) {\n payloadObj = rawDef.serializer\n ? rawDef.serializer(rawDef.payload)\n : rawDef.payload;\n } else if (Object.keys(rawDef.args).length > 0) {\n payloadObj = rawDef.args;\n }\n\n if (payloadObj !== null) {\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 if (v !== undefined && v !== null) {\n params.append(k, String(v));\n }\n }\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(\"Headers:\", rawDef.headers);\n console.log(\"Payload:\", payloadObj);\n if (isFormUrlEncoded)\n console.log(\n \"Encoded Form String:\",\n new TextDecoder().decode(\n new Uint8Array(\n wasmEngine.memory.buffer,\n payloadPtr,\n payloadLen,\n ),\n ),\n );\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!rawDef.isStream,\n onResponse: (response) => {\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 // 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 }\n reject(response.error);\n return;\n }\n\n if (response.data) {\n // Success\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(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 }\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\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 if (payloadPtr !== 0)\n wasmEngine.axiom_free_memory(payloadPtr, payloadLen);\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 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\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 (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 const mergedHeaders = {\n ...(rawDef.headers || {}),\n ...(options?.headers || {}),\n };\n rawDef.headers =\n Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined;\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\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 // ✨ FIX: Extract remainingArgs which strips out path parameters (like item_id)!\n const { path, remainingArgs } = buildRequestPath(\n syntheticRoute,\n rawDef.args,\n );\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: any = null;\n\n if (rawDef.payload !== undefined && rawDef.payload !== null) {\n payloadObj = rawDef.serializer\n ? rawDef.serializer(rawDef.payload)\n : rawDef.payload;\n } else if (Object.keys(remainingArgs).length > 0) {\n // ✨ FIX: Use remainingArgs instead of rawDef.args so we don't send path/query params in the body!\n payloadObj = remainingArgs;\n }\n\n if (payloadObj !== null) {\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 if (v !== undefined && v !== null) params.append(k, String(v));\n }\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(\"Headers:\", rawDef.headers);\n console.log(\"Payload:\", payloadObj);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!rawDef.isStream,\n onResponse: (response) => {\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 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(response.error);\n return;\n }\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 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 if (payloadPtr !== 0)\n wasmEngine.axiom_free_memory(payloadPtr, payloadLen);\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 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"]}
package/dist/index.mjs CHANGED
@@ -456,24 +456,25 @@ function useAxiomMutation(mutationFn) {
456
456
  pathTemplate: rawDef.path,
457
457
  isStream: !!rawDef.isStream
458
458
  };
459
- const { path } = buildRequestPath(syntheticRoute, rawDef.args);
459
+ const { path, remainingArgs } = buildRequestPath(
460
+ syntheticRoute,
461
+ rawDef.args
462
+ );
460
463
  const isFormUrlEncoded = Object.entries(rawDef.headers || {}).some(
461
464
  ([k, v]) => k.toLowerCase() === "content-type" && v.includes("application/x-www-form-urlencoded")
462
465
  );
463
466
  let payloadPtr = 0, payloadLen = 0, payloadObj = null;
464
467
  if (rawDef.payload !== void 0 && rawDef.payload !== null) {
465
468
  payloadObj = rawDef.serializer ? rawDef.serializer(rawDef.payload) : rawDef.payload;
466
- } else if (Object.keys(rawDef.args).length > 0) {
467
- payloadObj = rawDef.args;
469
+ } else if (Object.keys(remainingArgs).length > 0) {
470
+ payloadObj = remainingArgs;
468
471
  }
469
472
  if (payloadObj !== null) {
470
473
  let payloadBytes;
471
474
  if (isFormUrlEncoded && typeof payloadObj === "object") {
472
475
  const params = new URLSearchParams();
473
476
  for (const [k, v] of Object.entries(payloadObj)) {
474
- if (v !== void 0 && v !== null) {
475
- params.append(k, String(v));
476
- }
477
+ if (v !== void 0 && v !== null) params.append(k, String(v));
477
478
  }
478
479
  payloadBytes = new TextEncoder().encode(params.toString());
479
480
  } else {
@@ -492,17 +493,6 @@ function useAxiomMutation(mutationFn) {
492
493
  console.log("Path:", path);
493
494
  console.log("Headers:", rawDef.headers);
494
495
  console.log("Payload:", payloadObj);
495
- if (isFormUrlEncoded)
496
- console.log(
497
- "Encoded Form String:",
498
- new TextDecoder().decode(
499
- new Uint8Array(
500
- wasmEngine.memory.buffer,
501
- payloadPtr,
502
- payloadLen
503
- )
504
- )
505
- );
506
496
  console.groupEnd();
507
497
  }
508
498
  pendingRequests.set(reqId, {
@@ -520,7 +510,7 @@ function useAxiomMutation(mutationFn) {
520
510
  console.groupEnd();
521
511
  }
522
512
  if (response.eventType === 4) {
523
- if (isMounted.current) {
513
+ if (isMounted.current)
524
514
  setState({
525
515
  status: "error",
526
516
  error: response.error || null,
@@ -529,7 +519,6 @@ function useAxiomMutation(mutationFn) {
529
519
  data: null,
530
520
  source: null
531
521
  });
532
- }
533
522
  reject(response.error);
534
523
  return;
535
524
  }
@@ -539,7 +528,7 @@ function useAxiomMutation(mutationFn) {
539
528
  if (response.eventType === 2 || response.eventType === 3)
540
529
  source = "cache";
541
530
  const decoded = rawDef.decoder(response.data);
542
- if (isMounted.current) {
531
+ if (isMounted.current)
543
532
  setState({
544
533
  status: "success",
545
534
  data: decoded,
@@ -548,14 +537,13 @@ function useAxiomMutation(mutationFn) {
548
537
  isMutating: false,
549
538
  source
550
539
  });
551
- }
552
540
  resolve(decoded);
553
541
  } catch (e) {
554
542
  const err = {
555
543
  message: "Decoding failed",
556
544
  details: String(e)
557
545
  };
558
- if (isMounted.current) {
546
+ if (isMounted.current)
559
547
  setState({
560
548
  status: "error",
561
549
  error: err,
@@ -564,19 +552,17 @@ function useAxiomMutation(mutationFn) {
564
552
  data: null,
565
553
  source: null
566
554
  });
567
- }
568
555
  reject(err);
569
556
  }
570
557
  }
571
558
  },
572
559
  onComplete: () => {
573
- if (isMounted.current) {
560
+ if (isMounted.current)
574
561
  setState((prev) => ({
575
562
  ...prev,
576
563
  isMutating: false,
577
564
  isFetching: false
578
565
  }));
579
- }
580
566
  }
581
567
  });
582
568
  const nsStr = allocString(rawDef.namespace);
@@ -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: 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\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 (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\n // ✨ NEW: Merge headers properly\n const mergedHeaders = {\n ...(rawDef.headers || {}),\n ...(options?.headers || {}),\n };\n rawDef.headers =\n Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined;\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\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 // Check if the request is URL Encoded\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: any = null;\n\n if (rawDef.payload !== undefined && rawDef.payload !== null) {\n payloadObj = rawDef.serializer\n ? rawDef.serializer(rawDef.payload)\n : rawDef.payload;\n } else if (Object.keys(rawDef.args).length > 0) {\n payloadObj = rawDef.args;\n }\n\n if (payloadObj !== null) {\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 if (v !== undefined && v !== null) {\n params.append(k, String(v));\n }\n }\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(\"Headers:\", rawDef.headers);\n console.log(\"Payload:\", payloadObj);\n if (isFormUrlEncoded)\n console.log(\n \"Encoded Form String:\",\n new TextDecoder().decode(\n new Uint8Array(\n wasmEngine.memory.buffer,\n payloadPtr,\n payloadLen,\n ),\n ),\n );\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!rawDef.isStream,\n onResponse: (response) => {\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 // 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 }\n reject(response.error);\n return;\n }\n\n if (response.data) {\n // Success\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(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 }\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\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 if (payloadPtr !== 0)\n wasmEngine.axiom_free_memory(payloadPtr, payloadLen);\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 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\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 (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 const mergedHeaders = {\n ...(rawDef.headers || {}),\n ...(options?.headers || {}),\n };\n rawDef.headers =\n Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined;\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\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 // ✨ FIX: Extract remainingArgs which strips out path parameters (like item_id)!\n const { path, remainingArgs } = buildRequestPath(\n syntheticRoute,\n rawDef.args,\n );\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: any = null;\n\n if (rawDef.payload !== undefined && rawDef.payload !== null) {\n payloadObj = rawDef.serializer\n ? rawDef.serializer(rawDef.payload)\n : rawDef.payload;\n } else if (Object.keys(remainingArgs).length > 0) {\n // ✨ FIX: Use remainingArgs instead of rawDef.args so we don't send path/query params in the body!\n payloadObj = remainingArgs;\n }\n\n if (payloadObj !== null) {\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 if (v !== undefined && v !== null) params.append(k, String(v));\n }\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(\"Headers:\", rawDef.headers);\n console.log(\"Payload:\", payloadObj);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!rawDef.isStream,\n onResponse: (response) => {\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 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(response.error);\n return;\n }\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 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 if (payloadPtr !== 0)\n wasmEngine.axiom_free_memory(payloadPtr, payloadLen);\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 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"]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "files": [
4
4
  "dist"
5
5
  ],
6
- "version": "0.56.0",
6
+ "version": "0.57.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.56.0"
22
+ "atmx-web": "^0.57.0"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@types/react": "^19.0.0",