@uxf/router 2.2.0-beta.1 → 2.2.0-beta.2

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/README.md CHANGED
@@ -5,43 +5,36 @@
5
5
  ```
6
6
  yarn add @uxf/router
7
7
  ```
8
- or
9
- ```
10
- npm install @uxf/router --save
11
- ```
12
8
 
13
9
  - Create `routes` directory
14
10
  - Create `routes.ts` and `index.ts` inside `routes` directory:
15
11
 
16
12
  ```ts
17
13
  // routes/routes.ts
18
- import { Router as UxfRouter } from "@uxf/router";
19
14
 
20
- export interface RouteList {
15
+ import { createRouter } from "@uxf/router";
16
+
17
+ interface RouteList {
21
18
  index: null;
22
- "blog": null;
23
- "blog-article": { articleId: string };
19
+ "admin/index": { param1?: number };
20
+ "blog/detail": { id: number };
24
21
  }
25
22
 
26
- export const router = new UxfRouter<RouteList>({
23
+ const router = createRouter<RouteList>({
27
24
  index: "/",
28
- "blog": "/blog",
29
- "blog-article": "/blog/[articleId]",
25
+ "admin/index": "/admin",
26
+ "blog/detail": "/blog/[id]",
30
27
  });
28
+
29
+ export const { route, routeToUrl, sitemapGenerator } = router;
31
30
  ```
32
31
 
33
32
  ```ts
34
33
  // routes/index.ts
35
- import { RouteList, router } from "./routes";
36
- import { PropsGenerator, FunctionParametersGenerator, UxfNextPage } from "@uxf/router";
37
-
38
- export const Link = router.getLink();
39
- export const useRouter = router.getUseRouter();
40
- export const Router = router.getSingletonRouter();
41
34
 
42
- export type RouteProps = PropsGenerator<RouteList>;
43
- export type RouteParams = FunctionParametersGenerator<RouteList>;
44
- export type NextPage<Route extends keyof RouteList, IP = Record<string, any>, P = IP> = UxfNextPage<RouteList, Route, IP, P>;
35
+ export * from "./routes"
36
+ export type GetServerSideProps<Route extends keyof RouteList> = UxfGetServerSideProps<RouteList, Route>;
37
+ export type GetStaticProps<Route extends keyof RouteList> = UxfGetStaticProps<RouteList, Route>;
45
38
  ```
46
39
 
47
40
  Add configuration to `tsconfig.json`
@@ -59,39 +52,105 @@ Add configuration to `tsconfig.json`
59
52
  }
60
53
  ```
61
54
 
62
- ## Typings
55
+ ## Next Link
63
56
 
64
- ### Function
57
+ ```tsx
58
+ // pages/index.js
59
+ import Link from "next/link";
60
+ import { route } from "@app-routes";
65
61
 
66
- ```ts
67
- import { RouteList } from "@app-routes";
68
- import { FunctionParametersGenerator } from "@uxf/router";
62
+ export default () => (
63
+ <Link href={route("blog/detail", { id: 12 })}>
64
+ Hello world
65
+ </Link>
66
+ )
67
+ ```
68
+
69
+ ## GetStaticProps
69
70
 
70
- const navigate: (...attrs: FunctionParametersGenerator<RouteList>) => void = (route, params = undefined) => {
71
- // implement me
71
+ ```tsx
72
+ import { GetStaticProps } from "@app-routes";
73
+ import { queryParamToNumber } from "@uxf/router";
74
+
75
+ export const getStaticProps: GetStaticProps<"blog/detail"> = (context) => {
76
+ const id = queryParamToNumber(context.params?.id); // context.params is of type { id: number } | undefined
72
77
  }
73
78
  ```
74
79
 
75
- ### Component
80
+ ## GetServerSideProps
76
81
 
77
- ```ts
78
- import { RouteList } from "@app-routes";
79
- import { PropsGenerator } from "@uxf/router";
82
+ ```tsx
83
+ import { GetServerSideProps } from "@app-routes";
84
+ import { queryParamToNumber } from "@uxf/router";
80
85
 
81
- const SomeComponent: React.FC<PropsGenerator<RouteList>> = (props) => {
82
- // implement me
86
+ export const getServerSideProps: GetServerSideProps<"blog/detail"> = (context) => {
87
+ const id = queryParamToNumber(context.params?.id); // context.params is of type { id: number } | undefined
83
88
  }
84
89
  ```
85
90
 
86
- ## How to use Link?
91
+ ## Sitemap
92
+
93
+ Create sitemap items
87
94
 
88
95
  ```tsx
89
- // pages/index.js
90
- import { Link } from '@app-routes'
96
+ // sitemap-items.ts in @app-routes
97
+
98
+ import { sitemapGenerator } from "@app-routes";
99
+
100
+ export const sitemapItems = sitemapGenerator
101
+ .add("index", async () => ({ loc: "http://localhost", lastmod: "2021-01-01", priority: 1 }))
102
+ .add("blog/detail", async () => [
103
+ { loc: "http://localhost/bolg/1", priority: 2 },
104
+ { loc: "http://localhost/bolg/2", priority: 2 },
105
+ ])
106
+ .skip("admin/index")
107
+ .exhaustive();
108
+ ```
91
109
 
92
- export default () => (
93
- <Link route='blog-article' params={{ articleId: 12 }}>
94
- <a>Hello world</a>
95
- </Link>
96
- )
110
+ #### sitemap.xml
111
+
112
+ ```tsx
113
+ // pages/sitemap.xml.tsx
114
+
115
+ import React from "react";
116
+ import { NextPage } from "next";
117
+ import { sitemapItems } from "@app-routes";
118
+
119
+ const Page: NextPage = () => null;
120
+
121
+ Page.getInitialProps = async (ctx) => {
122
+ if (ctx.res) {
123
+ ctx.res.setHeader("Content-Type", "text/xml");
124
+ ctx.res.write(await sitemapItems.toXml());
125
+ ctx.res.end();
126
+ }
127
+
128
+ return {};
129
+ };
130
+
131
+ export default Page;
132
+ ```
133
+
134
+ #### sitemap.json
135
+
136
+ ```tsx
137
+ // pages/sitemap.json.tsx
138
+
139
+ import React from "react";
140
+ import { NextPage } from "next";
141
+ import { sitemapItems } from "@app-routes";
142
+
143
+ const Page: NextPage = () => null;
144
+
145
+ Page.getInitialProps = async (ctx) => {
146
+ if (ctx.res) {
147
+ ctx.res.setHeader("Content-Type", "text/json");
148
+ ctx.res.write(await sitemapItems.toJson());
149
+ ctx.res.end();
150
+ }
151
+
152
+ return {};
153
+ };
154
+
155
+ export default Page;
97
156
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/router",
3
- "version": "2.2.0-beta.1",
3
+ "version": "2.2.0-beta.2",
4
4
  "description": "UXF Router",
5
5
  "author": "UXFans <dev@uxf.cz>",
6
6
  "homepage": "https://gitlab.com/uxf-npm/router#readme",
package/router.d.ts CHANGED
@@ -1,16 +1,16 @@
1
- import { FunctionParametersGenerator } from "./types";
2
- import { RouteList } from "@uxf/router/route-list";
3
- type NextLinkProps = {
4
- pathname: string;
5
- query: any;
6
- };
7
- type RouteFunction<T> = (...args: FunctionParametersGenerator<T>) => NextLinkProps;
8
- type RouteToUrlFunction<T> = (...args: FunctionParametersGenerator<T>) => string | null;
1
+ import { LinkProps } from "next/link";
2
+ import { SitemapGeneratorType } from "@uxf/router/sitemapGenerator";
3
+ export type FunctionParametersGenerator<RouteList> = {
4
+ [K in keyof RouteList]: RouteList[K] extends null ? [K] : [K, RouteList[K]];
5
+ }[keyof RouteList];
6
+ type RouteFunction<RouteList> = (...args: FunctionParametersGenerator<RouteList>) => LinkProps["href"];
7
+ type RouteToUrlFunction<RouteList> = (...args: FunctionParametersGenerator<RouteList>) => string | null;
9
8
  type Router<T> = {
10
9
  route: RouteFunction<T>;
11
10
  routeToUrl: RouteToUrlFunction<T>;
11
+ sitemapGenerator: SitemapGeneratorType<T>;
12
12
  };
13
- export declare function createRouter<T extends RouteList>(routes: {
14
- [key in keyof T]: string;
15
- }): Router<T>;
13
+ export declare function createRouter<RouteList>(routes: {
14
+ [key in keyof RouteList]: string;
15
+ }): Router<RouteList>;
16
16
  export {};
package/router.js CHANGED
@@ -2,13 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createRouter = void 0;
4
4
  var qs_1 = require("qs");
5
+ var sitemapGenerator_1 = require("@uxf/router/sitemapGenerator");
5
6
  function createRouter(routes) {
6
7
  return {
7
8
  route: function (route, params) {
8
9
  if (params === void 0) { params = undefined; }
9
10
  return ({
10
11
  pathname: routes[route],
11
- query: params,
12
+ query: params !== null && params !== void 0 ? params : null,
12
13
  });
13
14
  },
14
15
  routeToUrl: function (route, params) {
@@ -29,7 +30,8 @@ function createRouter(routes) {
29
30
  }
30
31
  return pathname;
31
32
  },
33
+ sitemapGenerator: (0, sitemapGenerator_1.createSitemapGenerator)(),
32
34
  };
33
35
  }
34
36
  exports.createRouter = createRouter;
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUJBQStCO0FBYy9CLFNBQWdCLFlBQVksQ0FBc0IsTUFBb0M7SUFDbEYsT0FBTztRQUNILEtBQUssRUFBRSxVQUFDLEtBQUssRUFBRSxNQUFrQjtZQUFsQix1QkFBQSxFQUFBLGtCQUFrQjtZQUFLLE9BQUEsQ0FBQztnQkFDbkMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZCLEtBQUssRUFBRSxNQUFNO2FBQ2hCLENBQUM7UUFIb0MsQ0FHcEM7UUFDRixVQUFVLEVBQUUsVUFBQyxLQUFLLEVBQUUsTUFBa0I7WUFBbEIsdUJBQUEsRUFBQSxrQkFBa0I7WUFDbEMsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQU0sVUFBVSxHQUFRLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEdBQUc7Z0JBQ2xDLElBQU0sS0FBSyxHQUFJLE1BQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQUksR0FBRyxNQUFHLENBQUMsRUFBRTtvQkFDL0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBSSxHQUFHLE1BQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDbEQ7cUJBQU07b0JBQ0gsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDM0I7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQyxRQUFRLEdBQUcsVUFBRyxRQUFRLGNBQUksSUFBQSxjQUFTLEVBQUMsVUFBVSxDQUFDLENBQUUsQ0FBQzthQUNyRDtZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQztBQXZCRCxvQ0F1QkMifQ==
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQStCO0FBRS9CLGlFQUE0RjtBQWU1RixTQUFnQixZQUFZLENBQVksTUFBNEM7SUFDaEYsT0FBTztRQUNILEtBQUssRUFBRSxVQUFDLEtBQUssRUFBRSxNQUFrQjtZQUFsQix1QkFBQSxFQUFBLGtCQUFrQjtZQUFLLE9BQUEsQ0FBQztnQkFDbkMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZCLEtBQUssRUFBRSxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxJQUFJO2FBQ3hCLENBQUM7UUFIb0MsQ0FHcEM7UUFDRixVQUFVLEVBQUUsVUFBQyxLQUFLLEVBQUUsTUFBa0I7WUFBbEIsdUJBQUEsRUFBQSxrQkFBa0I7WUFDbEMsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQU0sVUFBVSxHQUFRLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEdBQUc7Z0JBQ2xDLElBQU0sS0FBSyxHQUFJLE1BQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQUksR0FBRyxNQUFHLENBQUMsRUFBRTtvQkFDL0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBSSxHQUFHLE1BQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDbEQ7cUJBQU07b0JBQ0gsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDM0I7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQyxRQUFRLEdBQUcsVUFBRyxRQUFRLGNBQUksSUFBQSxjQUFTLEVBQUMsVUFBVSxDQUFDLENBQUUsQ0FBQzthQUNyRDtZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxnQkFBZ0IsRUFBRSxJQUFBLHlDQUFzQixHQUFFO0tBQzdDLENBQUM7QUFDTixDQUFDO0FBeEJELG9DQXdCQyJ9
@@ -0,0 +1,20 @@
1
+ export type SitemapItem = {
2
+ loc: string;
3
+ priority: number;
4
+ lastmod?: string | null;
5
+ };
6
+ type RouteResolverResult = SitemapItem | SitemapItem[];
7
+ type RouteResolver<Route> = (route: Route) => Promise<RouteResolverResult>;
8
+ type MissingRoutesError<Routes> = {
9
+ __nonExhaustive: never;
10
+ missingRoutes: Routes;
11
+ };
12
+ export type SitemapGeneratorType<RouteList> = {
13
+ add: <Route extends keyof RouteList>(route: Route, resolver: RouteResolver<Route>) => SitemapGeneratorType<Omit<RouteList, Route>>;
14
+ skip: <Route extends keyof RouteList>(route: Route) => SitemapGeneratorType<Omit<RouteList, Route>>;
15
+ exhaustive: keyof RouteList extends never ? () => SitemapGeneratorType<RouteList> : MissingRoutesError<keyof RouteList>;
16
+ toXml: keyof RouteList extends never ? () => Promise<string> : MissingRoutesError<keyof RouteList>;
17
+ toJson: keyof RouteList extends never ? () => Promise<any> : MissingRoutesError<keyof RouteList>;
18
+ };
19
+ export declare const createSitemapGenerator: <RouteList>() => SitemapGeneratorType<RouteList>;
20
+ export {};
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
56
+ if (ar || !(i in from)) {
57
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
58
+ ar[i] = from[i];
59
+ }
60
+ }
61
+ return to.concat(ar || Array.prototype.slice.call(from));
62
+ };
63
+ Object.defineProperty(exports, "__esModule", { value: true });
64
+ exports.createSitemapGenerator = void 0;
65
+ var SitemapGenerator = /** @class */ (function () {
66
+ function SitemapGenerator() {
67
+ var _this = this;
68
+ this.routeResolvers = {};
69
+ this.exhaustive = function () { return _this; };
70
+ this.toXml = function () {
71
+ return _this.getSitemapItems().then(function (sitemapItems) {
72
+ return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">\n ".concat(sitemapItems
73
+ .map(function (item) { return "<url>\n <loc>".concat(item.loc, "</loc>\n <priority>").concat(item.priority, "</priority>\n ").concat(item.lastmod ? "<lastmod>".concat(item.lastmod, "</lastmod>") : "<changefreq>monthly</changefreq>", "\n </url>"); })
74
+ .join(""), "\n </urlset>");
75
+ });
76
+ };
77
+ this.toJson = function () { return _this.getSitemapItems().then(JSON.stringify); };
78
+ }
79
+ SitemapGenerator.prototype.getSitemapItems = function () {
80
+ return __awaiter(this, void 0, void 0, function () {
81
+ var routes;
82
+ var _this = this;
83
+ return __generator(this, function (_a) {
84
+ routes = Object.keys(this.routeResolvers);
85
+ return [2 /*return*/, Promise.all(routes.map(function (route) { var _a, _b; return (_b = (_a = _this.routeResolvers)[route]) === null || _b === void 0 ? void 0 : _b.call(_a, route); })).then(function (resolverResults) {
86
+ var sitemapItems = [];
87
+ resolverResults.forEach(function (result) {
88
+ if (!result)
89
+ return;
90
+ if (Array.isArray(result)) {
91
+ sitemapItems.push.apply(sitemapItems, __spreadArray([], __read(result), false));
92
+ return;
93
+ }
94
+ sitemapItems.push(result);
95
+ });
96
+ return sitemapItems;
97
+ })];
98
+ });
99
+ });
100
+ };
101
+ SitemapGenerator.prototype.add = function (route, resolver) {
102
+ this.routeResolvers[route] = resolver;
103
+ return this;
104
+ };
105
+ SitemapGenerator.prototype.skip = function () {
106
+ return this;
107
+ };
108
+ return SitemapGenerator;
109
+ }());
110
+ var createSitemapGenerator = function () { return new SitemapGenerator(); };
111
+ exports.createSitemapGenerator = createSitemapGenerator;
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZW1hcEdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zaXRlbWFwR2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3QkE7SUFBQTtRQUFBLGlCQXdEQztRQXZEVyxtQkFBYyxHQUE4RCxFQUFFLENBQUM7UUFtQ2hGLGVBQVUsR0FBUSxjQUFNLE9BQUEsS0FBSSxFQUFKLENBQUksQ0FBQztRQUU3QixVQUFLLEdBQVE7WUFDaEIsT0FBTyxLQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQUMsWUFBWTtnQkFDNUMsT0FBTyw2VEFFTCxZQUFZO3FCQUNULEdBQUcsQ0FDQSxVQUFDLElBQUksSUFBSyxPQUFBLDhDQUNDLElBQUksQ0FBQyxHQUFHLDJEQUNDLElBQUksQ0FBQyxRQUFRLHNEQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxtQkFBWSxJQUFJLENBQUMsT0FBTyxlQUFZLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxxQ0FDdkYsRUFKRCxDQUlDLENBQ2Q7cUJBQ0EsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFDUCxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFFSyxXQUFNLEdBQVEsY0FBTSxPQUFBLEtBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUEzQyxDQUEyQyxDQUFDO0lBQzNFLENBQUM7SUFyRGlCLDBDQUFlLEdBQTdCOzs7OztnQkFDVSxNQUFNLEdBQTJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBUSxDQUFDO2dCQUUvRSxzQkFBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBQyxLQUFLLGdCQUFLLE9BQUEsTUFBQSxNQUFBLEtBQUksQ0FBQyxjQUFjLEVBQUMsS0FBSyxDQUFDLG1EQUFHLEtBQUssQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsZUFBZTt3QkFDaEcsSUFBTSxZQUFZLEdBQWtCLEVBQUUsQ0FBQzt3QkFFdkMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFDLE1BQU07NEJBQzNCLElBQUksQ0FBQyxNQUFNO2dDQUFFLE9BQU87NEJBRXBCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQ0FDdkIsWUFBWSxDQUFDLElBQUksT0FBakIsWUFBWSwyQkFBUyxNQUFNLFdBQUU7Z0NBQzdCLE9BQU87NkJBQ1Y7NEJBRUQsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDOUIsQ0FBQyxDQUFDLENBQUM7d0JBRUgsT0FBTyxZQUFZLENBQUM7b0JBQ3hCLENBQUMsQ0FBQyxFQUFDOzs7S0FDTjtJQUVNLDhCQUFHLEdBQVYsVUFDSSxLQUFZLEVBQ1osUUFBOEI7UUFFOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDdEMsT0FBTyxJQUFvRCxDQUFDO0lBQ2hFLENBQUM7SUFFTSwrQkFBSSxHQUFYO1FBQ0ksT0FBTyxJQUFvRCxDQUFDO0lBQ2hFLENBQUM7SUFzQkwsdUJBQUM7QUFBRCxDQUFDLEFBeERELElBd0RDO0FBRU0sSUFBTSxzQkFBc0IsR0FBRyxjQUFrRCxPQUFBLElBQUksZ0JBQWdCLEVBQUUsRUFBdEIsQ0FBc0IsQ0FBQztBQUFsRyxRQUFBLHNCQUFzQiwwQkFBNEUifQ==
package/types.d.ts CHANGED
@@ -1,20 +1,15 @@
1
- import { NextComponentType, NextPageContext } from "next";
2
- import { RouteList } from "@uxf/router/route-list";
3
- export type PropsGenerator<T> = {
4
- [K in keyof T]: T[K] extends null ? {
5
- route: K;
6
- params?: never;
7
- } : {
8
- route: K;
9
- params: T[K];
10
- };
11
- }[keyof T];
12
- export type FunctionParametersGenerator<T> = {
13
- [K in keyof T]: T[K] extends null ? [K] : [K, T[K]];
14
- }[keyof T];
15
- export interface UxfPageContext<T extends keyof RouteList> extends Omit<NextPageContext, "query"> {
16
- query: RouteList[T] extends null ? Record<string, any> : {
17
- [key in keyof RouteList[T]]: string | string[] | undefined;
18
- };
19
- }
20
- export type UxfNextPage<Route extends keyof RouteList, IP = Record<string, any>, P = IP> = NextComponentType<UxfPageContext<Route>, IP, P>;
1
+ import { GetStaticProps, GetServerSideProps, PreviewData as NextPreviewData } from "next";
2
+ type QueryParams<RouteList, Route extends keyof RouteList> = RouteList[Route] extends null ? never : {
3
+ [key in keyof RouteList[Route]]: string | string[] | undefined;
4
+ };
5
+ export type UxfGetStaticProps<RouteList, Route extends keyof RouteList, Props extends {
6
+ [key: string]: any;
7
+ } = {
8
+ [key: string]: any;
9
+ }, PreviewData extends NextPreviewData = NextPreviewData> = GetStaticProps<Props, QueryParams<RouteList, Route>, PreviewData>;
10
+ export type UxfGetServerSideProps<RouteList, Route extends keyof RouteList, Props extends {
11
+ [key: string]: any;
12
+ } = {
13
+ [key: string]: any;
14
+ }, PreviewData extends NextPreviewData = NextPreviewData> = GetServerSideProps<Props, QueryParams<RouteList, Route>, PreviewData>;
15
+ export {};
package/route-list.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export interface RouteList {
2
- }
package/route-list.js DELETED
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yb3V0ZS1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==