{
  "version": 3,
  "sources": ["../src/usePreloader.ts", "../src/LoadersContext.tsx", "../src/createPreloader.ts", "../src/pluginPreload.tsx", "../src/useActivityPreloadRef.ts"],
  "sourcesContent": ["import type { UrlPatternOptions } from \"@stackflow/plugin-history-sync\";\nimport { makeTemplate, useRoutes } from \"@stackflow/plugin-history-sync\";\nimport type { ActivityComponentType } from \"@stackflow/react\";\nimport { useMemo } from \"react\";\n\nimport { useLoaders } from \"./LoadersContext\";\n\nexport type PreloadFunc<T extends { [activityName: string]: unknown }> = <\n  K extends Extract<keyof T, string>,\n>(\n  activityName: K,\n  activityParams: T[K] extends ActivityComponentType<infer U> ? U : {},\n  options?: {\n    activityContext?: {};\n  },\n) => any;\n\nexport type UsePreloaderOptions = {\n  urlPatternOptions?: UrlPatternOptions;\n};\n\nexport function usePreloader<T extends { [activityName: string]: unknown }>(\n  usePreloaderOptions?: UsePreloaderOptions,\n): {\n  preload: PreloadFunc<T>;\n} {\n  const loaders = useLoaders();\n  const routes = useRoutes();\n\n  return useMemo(\n    () => ({\n      preload(activityName, activityParams, options) {\n        const loader = loaders[activityName];\n\n        if (!loader) {\n          return null;\n        }\n\n        const match = routes.find((r) => r.activityName === activityName);\n\n        const template = match\n          ? makeTemplate(match, usePreloaderOptions?.urlPatternOptions)\n          : undefined;\n\n        const path = template?.fill(activityParams);\n\n        return loader({\n          activityParams,\n          activityContext: {\n            ...(path ? { path } : null),\n            ...options?.activityContext,\n          },\n        });\n      },\n    }),\n    [loaders],\n  );\n}\n", "import { createContext, useContext } from \"react\";\n\nimport type { Loader } from \"./Loader\";\n\nexport type LoadersMap = {\n  [activityName in string]?: Loader;\n};\n\nexport const LoadersContext = createContext<LoadersMap>({});\n\ninterface LoadersProviderProps {\n  loaders: LoadersMap;\n  children: React.ReactNode;\n}\nexport const LoadersProvider: React.FC<LoadersProviderProps> = (props) => (\n  <LoadersContext.Provider value={props.loaders}>\n    {props.children}\n  </LoadersContext.Provider>\n);\n\nLoadersProvider.displayName = \"LoadersProvider\";\n\nexport function useLoaders() {\n  return useContext(LoadersContext);\n}\n", "import type { PreloadFunc } from \"./usePreloader\";\nimport { usePreloader } from \"./usePreloader\";\n\nexport function createPreloader<\n  T extends { [activityName: string]: unknown },\n>(): {\n  usePreloader: () => { preload: PreloadFunc<T> };\n} {\n  return {\n    usePreloader,\n  };\n}\n", "import type {\n  ActivityComponentType,\n  StackflowReactPlugin,\n} from \"@stackflow/react\";\n\nimport type { Loader } from \"./Loader\";\nimport { LoadersProvider } from \"./LoadersContext\";\n\nexport type PreloadPluginOptions<\n  T extends { [activityName: string]: unknown },\n> = {\n  loaders: {\n    [key in Extract<keyof T, string>]?: T[key] extends ActivityComponentType<\n      infer U extends { [key in keyof U]: string | undefined }\n    >\n      ? Loader<U>\n      : Loader<{}>;\n  };\n};\n\nexport function preloadPlugin<T extends { [activityName: string]: unknown }>(\n  options: PreloadPluginOptions<T>,\n): StackflowReactPlugin<T> {\n  return () => ({\n    key: \"plugin-preload\",\n    wrapStack({ stack }) {\n      return (\n        <LoadersProvider loaders={options.loaders}>\n          {stack.render()}\n        </LoadersProvider>\n      );\n    },\n    overrideInitialEvents({ initialEvents, initialContext }) {\n      if (initialEvents.length === 0) {\n        return [];\n      }\n\n      return initialEvents.map((event) => {\n        if (event.name !== \"Pushed\") {\n          return event;\n        }\n\n        const { activityName, activityParams, activityContext } = event;\n\n        const loader = options.loaders[activityName];\n\n        if (!loader) {\n          return event;\n        }\n\n        const preloadRef = loader({\n          activityParams,\n          activityContext,\n          isInitialActivity: true,\n          initialContext,\n        });\n\n        return {\n          ...event,\n          activityContext: {\n            ...event.activityContext,\n            preloadRef,\n          },\n        };\n      });\n    },\n    onBeforePush({ actionParams, actions: { overrideActionParams } }) {\n      const { activityName, activityParams, activityContext } = actionParams;\n\n      const loader = options.loaders[activityName];\n\n      if (!loader) {\n        return;\n      }\n\n      const preloadRef = loader({\n        activityParams,\n        activityContext,\n      });\n\n      overrideActionParams({\n        ...actionParams,\n        activityContext: {\n          ...activityContext,\n          preloadRef,\n        },\n      });\n    },\n    onBeforeReplace({ actionParams, actions: { overrideActionParams } }) {\n      const { activityName, activityParams, activityContext } = actionParams;\n\n      const loader = options.loaders[activityName];\n\n      if (!loader) {\n        return;\n      }\n\n      const preloadRef = loader({\n        activityParams,\n        activityContext,\n      });\n\n      overrideActionParams({\n        ...actionParams,\n        activityContext: {\n          ...activityContext,\n          preloadRef,\n        },\n      });\n    },\n  });\n}\n", "import { useActivity } from \"@stackflow/react\";\n\n/**\n * Get current activity preload reference\n */\nexport function useActivityPreloadRef<T>(): T {\n  const activity = useActivity();\n  const activityContext = activity.context as any;\n\n  return activityContext?.preloadRef;\n}\n"],
  "mappings": "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",
  "names": ["jsx"]
}
