ruled-router
TypeScript icon, indicating that this package has built-in type declarations

0.2.2 • Public • Published

Ruled Router

This router is designed for apps in jimeng.io . Code ideas in this router url address should be parsed before page rendering. To make it happen, we feed rules to the parser so it knows how the url path is structured.

Types

export interface IRouteRule {
  path: string;
  name?: string;
  router?: IRouteRule[];
}
 
export let parseRoutePath = (pathString: string, rules: IRouteRule[]): IRouteParseResult => {}
 
export interface IRouteParseResult {
  matches: boolean;
  name: string;
  data: any;
  restPath: string[];
  basePath: string[];
  next?: IRouteParseResult;
  rules?: IRouteRule[];
  params?: any;
}

Usage

A simple example of this parser looks like:

let pageRules = [
  {
    path: "idleAnalysis",
    router: [
      { name: "components", path: "components/:componentId", },
    ],
  },
  {
    path: "flowControlAnalysis",
    router: [
      { name: "processes", path: "components/:componentId/processes/:processId", },
    ],
  }
]

And it can be parsed like:

let router: IRouteParseResult = parseRoutePath(this.props.location.pathname, pageRules);

With a lot more complicated list of rules, we are able to parse url of:

/plants/152883204915/qualityManagement/measurementData/components/21712526851768321/processes/39125230470234114

into a JSON tree:

{
  "name": "plants",
  "matches": true,
  "restPath": null,
  "basePath": ["plants","152883204915","qualityManagement","measurementData","components","21712526851768321","processes","39125230470234114"
  ],
  "data": {
    "plantId": "152883204915"
  },
  "next": {
    "name": "qualityManagement",
    "matches": true,
    "restPath": null,
    "basePath": ["qualityManagement","measurementData","components","21712526851768321","processes","39125230470234114"
    ],
    "data": {},
    "next": {
      "name": "measurementData",
      "matches": true,
      "restPath": null,
      "basePath": ["measurementData","components","21712526851768321","processes","39125230470234114"
      ],
      "data": {
        "componentId": "21712526851768321",
        "processId": "39125230470234114"
      },
      "next": null
    }
  }
}

Some further explanations can be found at https://github.com/beego/fi/pull/731 .

License

MIT

/ruled-router/

    Package Sidebar

    Install

    npm i ruled-router

    Weekly Downloads

    4

    Version

    0.2.2

    License

    MIT

    Unpacked Size

    7.84 kB

    Total Files

    6

    Last publish

    Collaborators

    • imzshh
    • jiyinyiyong
    • rebirth
    • 297951292