{"_id":"@asheswook/router","name":"@asheswook/router","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@asheswook/router","version":"0.0.1","description":"Nested/Data-driven/Framework-agnostic Routing","keywords":["remix","router","location"],"repository":{"type":"git","url":"git+https://github.com/violetpay-org/react-router.git","directory":"packages/router"},"license":"MIT","author":{"name":"Remix Software","email":"hello@remix.run"},"sideEffects":false,"main":"./dist/router.cjs.js","unpkg":"./dist/router.umd.min.js","module":"./dist/router.js","types":"./dist/index.d.ts","engines":{"node":">=14.0.0"},"publishConfig":{"access":"public"},"_id":"@asheswook/router@0.0.1","gitHead":"9e7486b89e712b765d947297f228650cdc0c488e","bugs":{"url":"https://github.com/violetpay-org/react-router/issues"},"homepage":"https://github.com/violetpay-org/react-router#readme","_nodeVersion":"21.7.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-zUPjOUzxctdAMpKLtXzH2pJOQv5v4euvBNRAe2mFWG0+YuAtEyC11LJhU32AhSvnRQ9Gqe9Xv7ttUY4IV7l1mQ==","shasum":"d856bd55695223d95c8fc1419eb7ddfce2531c1b","tarball":"https://registry.npmjs.org/@asheswook/router/-/router-0.0.1.tgz","fileCount":20,"unpackedSize":2350904,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDJ17F4B+DvFI5+J3T9uReDvDRhwbWD8csSD0mozmzBXAiAU1RfNFY+HIki6yRnxXOtcigMp9siH1hS44EUmS6o1iA=="}]},"_npmUser":{"name":"asheswook","email":"wookboy00@naver.com"},"directories":{},"maintainers":[{"name":"asheswook","email":"wookboy00@naver.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_0.0.1_1711401169722_0.4241329050582243"},"_hasShrinkwrap":false}},"time":{"created":"2024-03-25T21:12:49.652Z","0.0.1":"2024-03-25T21:12:49.987Z","modified":"2024-03-25T21:12:50.909Z"},"maintainers":[{"name":"asheswook","email":"wookboy00@naver.com"}],"description":"Nested/Data-driven/Framework-agnostic Routing","homepage":"https://github.com/violetpay-org/react-router#readme","keywords":["remix","router","location"],"repository":{"type":"git","url":"git+https://github.com/violetpay-org/react-router.git","directory":"packages/router"},"author":{"name":"Remix Software","email":"hello@remix.run"},"bugs":{"url":"https://github.com/violetpay-org/react-router/issues"},"license":"MIT","readme":"# Remix Router\n\nThe `@remix-run/router` package is a framework-agnostic routing package (sometimes referred to as a browser-emulator) that serves as the heart of [React Router][react-router] and [Remix][remix] and provides all the core functionality for routing coupled with data loading and data mutations. It comes with built-in handling of errors, race-conditions, interruptions, cancellations, lazy-loading data, and much, much more.\n\nIf you're using React Router, you should never `import` anything directly from the `@remix-run/router` - you should have everything you need in `react-router-dom` (or `react-router`/`react-router-native` if you're not rendering in the browser). All of those packages should re-export everything you would otherwise need from `@remix-run/router`.\n\n> [!WARNING]\n>\n> This router is a low-level package intended to be consumed by UI layer routing libraries. You should very likely not be using this package directly unless you are authoring a routing library such as [`react-router-dom`][react-router-repo] or one of it's other [UI ports][remix-routers-repo].\n\n## API\n\nA Router instance can be created using `createRouter`:\n\n```js\n// Create and initialize a router.  \"initialize\" contains all side effects\n// including history listeners and kicking off the initial data fetch\nlet router = createRouter({\n  // Required properties\n  routes: [{\n    path: '/',\n    loader: ({ request, params }) => { /* ... */ },\n    children: [{\n      path: 'home',\n      loader: ({ request, params }) => { /* ... */ },\n    }]\n  },\n  history: createBrowserHistory(),\n\n  // Optional properties\n  basename, // Base path\n  mapRouteProperties, // Map framework-agnostic routes to framework-aware routes\n  future, // Future flags\n  hydrationData, // Hydration data if using server-side-rendering\n}).initialize();\n```\n\nInternally, the Router represents the state in an object of the following format, which is available through `router.state`. You can also register a subscriber of the signature `(state: RouterState) => void` to execute when the state updates via `router.subscribe()`;\n\n```ts\ninterface RouterState {\n  // False during the initial data load, true once we have our initial data\n  initialized: boolean;\n  // The `history` action of the most recently completed navigation\n  historyAction: Action;\n  // The current location of the router.  During a navigation this reflects\n  // the \"old\" location and is updated upon completion of the navigation\n  location: Location;\n  // The current set of route matches\n  matches: DataRouteMatch[];\n  // The state of the current navigation\n  navigation: Navigation;\n  // The state of any in-progress router.revalidate() calls\n  revalidation: RevalidationState;\n  // Data from the loaders for the current matches\n  loaderData: RouteData;\n  // Data from the action for the current matches\n  actionData: RouteData | null;\n  // Errors thrown from loaders/actions for the current matches\n  errors: RouteData | null;\n  // Map of all active fetchers\n  fetchers: Map<string, Fetcher>;\n  // Scroll position to restore to for the active Location, false if we\n  // should not restore, or null if we don't have a saved position\n  // Note: must be enabled via router.enableScrollRestoration()\n  restoreScrollPosition: number | false | null;\n  // Proxied `preventScrollReset` value passed to router.navigate()\n  preventScrollReset: boolean;\n}\n```\n\n### Navigations\n\nAll navigations are done through the `router.navigate` API which is overloaded to support different types of navigations:\n\n```js\n// Link navigation (pushes onto the history stack by default)\nrouter.navigate(\"/page\");\n\n// Link navigation (replacing the history stack)\nrouter.navigate(\"/page\", { replace: true });\n\n// Pop navigation (moving backward/forward in the history stack)\nrouter.navigate(-1);\n\n// Form submission navigation\nlet formData = new FormData();\nformData.append(key, value);\nrouter.navigate(\"/page\", {\n  formMethod: \"post\",\n  formData,\n});\n\n// Relative routing from a source routeId\nrouter.navigate(\"../../somewhere\", {\n  fromRouteId: \"active-route-id\",\n});\n```\n\n### Fetchers\n\nFetchers are a mechanism to call loaders/actions without triggering a navigation, and are done through the `router.fetch()` API. All fetch calls require a unique key to identify the fetcher.\n\n```js\n// Execute the loader for /page\nrouter.fetch(\"key\", \"/page\");\n\n// Submit to the action for /page\nlet formData = new FormData();\nformData.append(key, value);\nrouter.fetch(\"key\", \"/page\", {\n  formMethod: \"post\",\n  formData,\n});\n```\n\n### Revalidation\n\nBy default, active loaders will revalidate after any navigation or fetcher mutation. If you need to kick off a revalidation for other use-cases, you can use `router.revalidate()` to re-execute all active loaders.\n\n### Future Flags\n\nWe use _Future Flags_ in the router to help us introduce breaking changes in an opt-in fashion ahead of major releases. Please check out the [blog post][future-flags-post] and [React Router Docs][api-development-strategy] for more information on this process. The currently available future flags in `@remix-run/router` are:\n\n| Flag                     | Description                                                               |\n| ------------------------ | ------------------------------------------------------------------------- |\n| `v7_normalizeFormMethod` | Normalize `useNavigation().formMethod` to be an uppercase HTTP Method     |\n| `v7_prependBasename`     | Prepend the `basename` to incoming `router.navigate`/`router.fetch` paths |\n\n[react-router]: https://reactrouter.com\n[remix]: https://remix.run\n[react-router-repo]: https://github.com/remix-run/react-router\n[remix-routers-repo]: https://github.com/brophdawg11/remix-routers\n[api-development-strategy]: https://reactrouter.com/en/main/guides/api-development-strategy\n[future-flags-post]: https://remix.run/blog/future-flags\n","readmeFilename":"README.md"}