@flight-framework/core 0.2.4 → 0.2.5

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.
@@ -0,0 +1,73 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import { FlightError } from '../errors/index.js';
4
+
5
+ /**
6
+ * Error context value
7
+ */
8
+ interface ErrorContextValue {
9
+ /** Current error, if any */
10
+ error: FlightError | null;
11
+ /** Clear the current error */
12
+ clearError: (options?: {
13
+ redirect?: string;
14
+ }) => void;
15
+ /** Whether an error is currently active */
16
+ hasError: boolean;
17
+ }
18
+ /**
19
+ * Error provider props
20
+ */
21
+ interface ErrorProviderProps {
22
+ children: ReactNode;
23
+ /** Called when an error occurs */
24
+ onError?: (error: FlightError) => void;
25
+ /** Called when error is cleared */
26
+ onClear?: () => void;
27
+ }
28
+ declare const ErrorContext: react.Context<ErrorContextValue | null>;
29
+ /**
30
+ * Error context provider for React applications.
31
+ *
32
+ * Wraps your app to provide error state management via useError() hook.
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * import { ErrorProvider } from '@flight-framework/core/react';
37
+ *
38
+ * function App() {
39
+ * return (
40
+ * <ErrorProvider onError={(e) => console.log('Error:', e)}>
41
+ * <MyApp />
42
+ * </ErrorProvider>
43
+ * );
44
+ * }
45
+ * ```
46
+ */
47
+ declare function ErrorProvider({ children, onError, onClear }: ErrorProviderProps): ReactNode;
48
+ /**
49
+ * Access the current error state from anywhere in your React app.
50
+ *
51
+ * Returns null values if used outside of ErrorProvider (non-breaking behavior).
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * function MyComponent() {
56
+ * const { error, clearError, hasError } = useError();
57
+ *
58
+ * if (hasError) {
59
+ * return (
60
+ * <div>
61
+ * <p>Error: {error?.message}</p>
62
+ * <button onClick={() => clearError()}>Dismiss</button>
63
+ * </div>
64
+ * );
65
+ * }
66
+ *
67
+ * return <div>Normal content</div>;
68
+ * }
69
+ * ```
70
+ */
71
+ declare function useError(): ErrorContextValue;
72
+
73
+ export { ErrorContext, type ErrorContextValue, ErrorProvider, type ErrorProviderProps, useError };
@@ -0,0 +1,52 @@
1
+ import { getError, clearError } from '../chunk-FSJNOPYE.js';
2
+ import '../chunk-YHEVHRLH.js';
3
+ import { createContext, useState, useEffect, useCallback, useContext } from 'react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var ErrorContext = createContext(null);
7
+ function ErrorProvider({ children, onError, onClear }) {
8
+ const [error, setError] = useState(() => getError());
9
+ useEffect(() => {
10
+ const handleError = (event) => {
11
+ setError(event.detail);
12
+ onError?.(event.detail);
13
+ };
14
+ const handleClear = () => {
15
+ setError(null);
16
+ onClear?.();
17
+ };
18
+ window.addEventListener("flight:error", handleError);
19
+ window.addEventListener("flight:error-clear", handleClear);
20
+ return () => {
21
+ window.removeEventListener("flight:error", handleError);
22
+ window.removeEventListener("flight:error-clear", handleClear);
23
+ };
24
+ }, [onError, onClear]);
25
+ const clearError2 = useCallback((options) => {
26
+ clearError(options);
27
+ setError(null);
28
+ onClear?.();
29
+ }, [onClear]);
30
+ const value = {
31
+ error,
32
+ clearError: clearError2,
33
+ hasError: error !== null
34
+ };
35
+ return /* @__PURE__ */ jsx(ErrorContext.Provider, { value, children });
36
+ }
37
+ function useError() {
38
+ const context = useContext(ErrorContext);
39
+ if (!context) {
40
+ return {
41
+ error: null,
42
+ clearError: () => {
43
+ },
44
+ hasError: false
45
+ };
46
+ }
47
+ return context;
48
+ }
49
+
50
+ export { ErrorContext, ErrorProvider, useError };
51
+ //# sourceMappingURL=index.js.map
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/react/hooks/useError.tsx"],"names":["clearError"],"mappings":";;;;;AA0CA,IAAM,YAAA,GAAe,cAAwC,IAAI;AAwB1D,SAAS,aAAA,CAAc,EAAE,QAAA,EAAU,OAAA,EAAS,SAAQ,EAAkC;AACzF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI,QAAA,CAA6B,MAAM,UAAU,CAAA;AAGvE,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAoC;AACrD,MAAA,QAAA,CAAS,MAAM,MAAM,CAAA;AACrB,MAAA,OAAA,GAAU,MAAM,MAAM,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,cAAc,MAAM;AACtB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,OAAA,IAAU;AAAA,IACd,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,gBAAgB,WAA4B,CAAA;AACpE,IAAA,MAAA,CAAO,gBAAA,CAAiB,sBAAsB,WAAW,CAAA;AAEzD,IAAA,OAAO,MAAM;AACT,MAAA,MAAA,CAAO,mBAAA,CAAoB,gBAAgB,WAA4B,CAAA;AACvE,MAAA,MAAA,CAAO,mBAAA,CAAoB,sBAAsB,WAAW,CAAA;AAAA,IAChE,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AAErB,EAAA,MAAMA,WAAAA,GAAa,WAAA,CAAY,CAAC,OAAA,KAAoC;AAChE,IAAA,UAAA,CAAiB,OAAO,CAAA;AACxB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,OAAA,IAAU;AAAA,EACd,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,KAAA,GAA2B;AAAA,IAC7B,KAAA;AAAA,IACA,UAAA,EAAAA,WAAAA;AAAA,IACA,UAAU,KAAA,KAAU;AAAA,GACxB;AAEA,EAAA,uBACI,GAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,OAClB,QAAA,EACL,CAAA;AAER;AA6BO,SAAS,QAAA,GAA8B;AAC1C,EAAA,MAAM,OAAA,GAAU,WAAW,YAAY,CAAA;AAIvC,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,OAAO;AAAA,MACH,KAAA,EAAO,IAAA;AAAA,MACP,YAAY,MAAM;AAAA,MAAE,CAAA;AAAA,MACpB,QAAA,EAAU;AAAA,KACd;AAAA,EACJ;AAEA,EAAA,OAAO,OAAA;AACX","file":"index.js","sourcesContent":["/**\r\n * @flight-framework/core - React Error Hook\r\n * \r\n * Optional React hook for accessing error state.\r\n * Developers can use this or bring their own solution.\r\n */\r\n\r\nimport { createContext, useContext, useState, useEffect, useCallback } from 'react';\r\nimport type { ReactNode } from 'react';\r\nimport { FlightError, getError, clearError as clearGlobalError } from '../../errors/index.js';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Error context value\r\n */\r\nexport interface ErrorContextValue {\r\n /** Current error, if any */\r\n error: FlightError | null;\r\n /** Clear the current error */\r\n clearError: (options?: { redirect?: string }) => void;\r\n /** Whether an error is currently active */\r\n hasError: boolean;\r\n}\r\n\r\n/**\r\n * Error provider props\r\n */\r\nexport interface ErrorProviderProps {\r\n children: ReactNode;\r\n /** Called when an error occurs */\r\n onError?: (error: FlightError) => void;\r\n /** Called when error is cleared */\r\n onClear?: () => void;\r\n}\r\n\r\n// ============================================================================\r\n// Context\r\n// ============================================================================\r\n\r\nconst ErrorContext = createContext<ErrorContextValue | null>(null);\r\n\r\n// ============================================================================\r\n// Provider Component\r\n// ============================================================================\r\n\r\n/**\r\n * Error context provider for React applications.\r\n * \r\n * Wraps your app to provide error state management via useError() hook.\r\n * \r\n * @example\r\n * ```tsx\r\n * import { ErrorProvider } from '@flight-framework/core/react';\r\n * \r\n * function App() {\r\n * return (\r\n * <ErrorProvider onError={(e) => console.log('Error:', e)}>\r\n * <MyApp />\r\n * </ErrorProvider>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function ErrorProvider({ children, onError, onClear }: ErrorProviderProps): ReactNode {\r\n const [error, setError] = useState<FlightError | null>(() => getError());\r\n\r\n // Listen for error events from showError()\r\n useEffect(() => {\r\n const handleError = (event: CustomEvent<FlightError>) => {\r\n setError(event.detail);\r\n onError?.(event.detail);\r\n };\r\n\r\n const handleClear = () => {\r\n setError(null);\r\n onClear?.();\r\n };\r\n\r\n window.addEventListener('flight:error', handleError as EventListener);\r\n window.addEventListener('flight:error-clear', handleClear);\r\n\r\n return () => {\r\n window.removeEventListener('flight:error', handleError as EventListener);\r\n window.removeEventListener('flight:error-clear', handleClear);\r\n };\r\n }, [onError, onClear]);\r\n\r\n const clearError = useCallback((options?: { redirect?: string }) => {\r\n clearGlobalError(options);\r\n setError(null);\r\n onClear?.();\r\n }, [onClear]);\r\n\r\n const value: ErrorContextValue = {\r\n error,\r\n clearError,\r\n hasError: error !== null,\r\n };\r\n\r\n return (\r\n <ErrorContext.Provider value={value} >\r\n {children}\r\n </ErrorContext.Provider>\r\n );\r\n}\r\n\r\n// ============================================================================\r\n// Hook\r\n// ============================================================================\r\n\r\n/**\r\n * Access the current error state from anywhere in your React app.\r\n * \r\n * Returns null values if used outside of ErrorProvider (non-breaking behavior).\r\n * \r\n * @example\r\n * ```tsx\r\n * function MyComponent() {\r\n * const { error, clearError, hasError } = useError();\r\n * \r\n * if (hasError) {\r\n * return (\r\n * <div>\r\n * <p>Error: {error?.message}</p>\r\n * <button onClick={() => clearError()}>Dismiss</button>\r\n * </div>\r\n * );\r\n * }\r\n * \r\n * return <div>Normal content</div>;\r\n * }\r\n * ```\r\n */\r\nexport function useError(): ErrorContextValue {\r\n const context = useContext(ErrorContext);\r\n\r\n // Return safe defaults if used outside provider\r\n // This allows the hook to be used without forcing ErrorProvider\r\n if (!context) {\r\n return {\r\n error: null,\r\n clearError: () => { },\r\n hasError: false,\r\n };\r\n }\r\n\r\n return context;\r\n}\r\n\r\n// ============================================================================\r\n// Re-exports for convenience\r\n// ============================================================================\r\n\r\nexport { ErrorContext };\r\n"]}
@@ -1,7 +1,7 @@
1
1
  import '../../chunk-Y22AMGTM.js';
2
- export { createPreactAdapter, createPreactConsumer, markAsPreactClientComponent, lazy as preactLazy } from '../../chunk-MDQNNIHH.js';
3
2
  export { createReactAdapter, createReactConsumer, markAsClientComponent } from '../../chunk-TASAT7KB.js';
4
3
  export { createVueAdapter, createVueConsumer, markAsVueClientComponent } from '../../chunk-2F2QU6RC.js';
5
4
  export { createSolidAdapter, createSolidConsumer, isServer as isSolidServer, markAsSolidClientComponent } from '../../chunk-VPFMHGEV.js';
5
+ export { createPreactAdapter, createPreactConsumer, markAsPreactClientComponent, lazy as preactLazy } from '../../chunk-MDQNNIHH.js';
6
6
  //# sourceMappingURL=index.js.map
7
7
  //# sourceMappingURL=index.js.map
package/dist/rsc/index.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import '../chunk-63SCEXD7.js';
2
+ export { acceptsJson, createServerContext, deleteCookie, getHeader, getHeaders, getPreferredLanguage, getRedirectInfo, isAjaxRequest, isBotRequest, isMutationRequest, isNotFoundError, isRedirectError, notFound, redirect, setCacheControl, setCookie, supportsStreaming } from '../chunk-62C7LX2E.js';
2
3
  export { FlightStreamError, consumeFlightStream, createFlightResponse, createFlightStream, createFlightStreamFromArray, createHybridResponse, createStreamController, mergeFlightStreams, parseFlightStream, parseFlightStreamSync, prettyPrintChunks, transformFlightStream } from '../chunk-PVUMB632.js';
3
4
  export { FlightRenderer, createRenderer, renderServerComponent, renderServerComponentStreaming } from '../chunk-P6WSBVDT.js';
5
+ export { FlightPayloadError, FlightSerializationError, clientRef, createActionChunk, createClientChunk, createErrorChunk, createHintChunk, createServerChunk, deserialize, fragment, generateChunkId, h, isFlightElement, resetChunkIdCounter, serialize, suspense, text, toFlightElement } from '../chunk-K2CQZPCG.js';
4
6
  export { composeComponents, createAsyncComponent, createClientBoundary, createRenderContext, deserializeProps, executeServerComponent, isNotFoundError as legacyIsNotFoundError, isRedirectError as legacyIsRedirectError, notFound as legacyNotFound, redirect as legacyRedirect, revalidatePath, revalidateTag, serializeProps, serverFetch, withErrorBoundary } from '../chunk-3ZSSRE6M.js';
5
7
  export { flightRSC } from '../chunk-ZIE56LCA.js';
8
+ export { BoundaryRegistry, CLIENT_REFERENCE, SERVER_REFERENCE, analyzeModule, createClientReference, createServerReference, detectAsyncComponents, detectBoundaryType, detectInlineServerActions, getReferenceId, globalRegistry, hasUseClientDirective, hasUseServerDirective, isClientReference, isServerReference, registerClientComponent, registerServerAction } from '../chunk-PDW5WCMW.js';
6
9
  import '../chunk-Y22AMGTM.js';
7
- import '../chunk-MDQNNIHH.js';
8
10
  export { createReactAdapter, createReactConsumer, markAsClientComponent } from '../chunk-TASAT7KB.js';
9
11
  import '../chunk-2F2QU6RC.js';
10
12
  import '../chunk-VPFMHGEV.js';
11
- export { FlightPayloadError, FlightSerializationError, clientRef, createActionChunk, createClientChunk, createErrorChunk, createHintChunk, createServerChunk, deserialize, fragment, generateChunkId, h, isFlightElement, resetChunkIdCounter, serialize, suspense, text, toFlightElement } from '../chunk-K2CQZPCG.js';
12
- export { BoundaryRegistry, CLIENT_REFERENCE, SERVER_REFERENCE, analyzeModule, createClientReference, createServerReference, detectAsyncComponents, detectBoundaryType, detectInlineServerActions, getReferenceId, globalRegistry, hasUseClientDirective, hasUseServerDirective, isClientReference, isServerReference, registerClientComponent, registerServerAction } from '../chunk-PDW5WCMW.js';
13
- export { acceptsJson, createServerContext, deleteCookie, getHeader, getHeaders, getPreferredLanguage, getRedirectInfo, isAjaxRequest, isBotRequest, isMutationRequest, isNotFoundError, isRedirectError, notFound, redirect, setCacheControl, setCookie, supportsStreaming } from '../chunk-62C7LX2E.js';
13
+ import '../chunk-MDQNNIHH.js';
14
14
  //# sourceMappingURL=index.js.map
15
15
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
- export { createServer, getRuntime, isFlightServer } from '../chunk-VOBQDQKX.js';
1
+ export { createServer, getRuntime, isFlightServer } from '../chunk-LBYDTULN.js';
2
+ import '../chunk-IXMD5QH2.js';
2
3
  import '../chunk-GCQZ4FHI.js';
3
4
  import '../chunk-KWFX6WHG.js';
4
- import '../chunk-IXMD5QH2.js';
5
5
  //# sourceMappingURL=index.js.map
6
6
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @flight-framework/core - Environment Utilities
3
+ *
4
+ * Environment detection utilities that work across Node.js, browsers, and edge runtimes.
5
+ * No hardcoded values - detects environment dynamically.
6
+ */
7
+ /**
8
+ * Check if running in production environment.
9
+ *
10
+ * Detection order:
11
+ * 1. Node.js process.env.NODE_ENV
12
+ * 2. Vite/modern bundlers import.meta.env.MODE or import.meta.env.PROD
13
+ * 3. Default: false (not production)
14
+ */
15
+ declare function isProduction(): boolean;
16
+ /**
17
+ * Check if running in development environment.
18
+ *
19
+ * Detection order:
20
+ * 1. Node.js process.env.NODE_ENV
21
+ * 2. Vite/modern bundlers import.meta.env.MODE or import.meta.env.DEV
22
+ * 3. Default: true (assume development if unknown)
23
+ */
24
+ declare function isDevelopment(): boolean;
25
+ /**
26
+ * Check if running in test environment.
27
+ */
28
+ declare function isTest(): boolean;
29
+ /**
30
+ * Check if running on the server (not browser).
31
+ */
32
+ declare function isServer(): boolean;
33
+ /**
34
+ * Check if running in the browser.
35
+ */
36
+ declare function isBrowser(): boolean;
37
+ /**
38
+ * Get the current environment name.
39
+ */
40
+ declare function getEnvironment(): 'production' | 'development' | 'test' | 'unknown';
41
+
42
+ export { getEnvironment, isBrowser, isDevelopment, isProduction, isServer, isTest };
@@ -0,0 +1,4 @@
1
+ import '../chunk-PL37KFRJ.js';
2
+ export { getEnvironment, isBrowser, isDevelopment, isProduction, isServer, isTest } from '../chunk-YHEVHRLH.js';
3
+ //# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flight-framework/core",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "Core primitives for Flight Framework - routing, rendering, caching",
5
5
  "keywords": [
6
6
  "flight",