npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

routes-files-builder

v0.0.3

Published

This lib helps to create the .npmrc file with auth token. It's much easier to publish with it.

Downloads

3

Readme

routes-files-builder

Installation

To install please run:

npm i -D routes-files-builder

What this package can do?

This packages allows to parse Angular routing file and create with it next files:

  • routes (for Angular Universal)
  • sitemap
  • robots

Also it's possible to use instead predefined sets of routes and do not use Angular routing file.

Requirements

The main requirement to the Angular routing file is the rule: one path - one line.

It means that all description of Angular Route type, should be inlined. See example below.

Keypoints:

By default each route path will be written to the routes and sitemap files.

File robots will have no disallowed paths by default.

To exclude path from sitemap - add a comment "sitemap-ignore" in the same string line.

To add path to robots as disallowed - add a comment "robots-disallowed".

To add path to sitemap but onlt for special langs use "sitemap-only-for-langs:de,en" comment (main will be first).

Path with '/:' entry will be excluded from routes file.

The package expects to see inside Angular Routing file something like this:

....

const routes: Routes = [
  {
    path: ':lang', component: ContentComponent,
    children: [
      { path: 'lvs', component: LvsComponent, pathMatch: 'full' },
      { path: 'gigaset', component: GigasetComponent, pathMatch: 'full' },
      { path: 'barcode', component: BarcodeUndRfidComponent, pathMatch: 'full' },
      { path: 'imprint', component: ImprintComponent, pathMatch: 'full' }, // robots-disallowed sitemap-ignore
      { path: 'privacy', component: PrivacyComponent, pathMatch: 'full' }, // robots-disallowed sitemap-ignore
      { path: 'career', component: CareerComponent, pathMatch: 'full' }, // sitemap-only-for-langs:de
      { path: 'job-description/:position', component: JobDescriptionComponent, pathMatch: 'full' }, //sitemap-ignore
      { path: 'not-found', component: ErrorComponent, pathMatch: 'full' }, // robots-disallowed  sitemap-ignore
      { path: '**', component: ErrorComponent } // Wildcard route for a 404 page // sitemap-ignore
    ]
  }
];

@NgModule({
  imports: [
    RouterModule.forRoot(routes)
  ],
  exports: [
    RouterModule
  ]
})
export class AppRoutingModule { }

Usage

The library can be used in .js or .ts files.

Typescript usage

Create file routes-files-builder.ts with next code:

import { start } from 'routes-files-builder'
start({});

And then inside the package.json add next script:

nodemon routes-files-builder.ts

Please check info about nodemon, if you have no idea about it.

Warning

Also, you can see next error after running script:

Typescript: Cannot use import statement outside a module

Most possibly you have tsconfig.json in root folder with incorrect settings for this library.

There are 2 quick options in this case - use Javascript version or remove/rename/change tsconfig.json.

Javascript usage

Create file routes-files-builder.js with next code:

const builder = require('routes-files-builder');
builder.start({});

And then inside the package.json add next script:

node routes-files-builder.js

I think, if you are here, you know what the node is.

Input parameters

You can pass a set of parameters:

interface FilesRoutesBuilderInput {
  // contains strings that allows you to parse routing files
  consts: Partial<AllConsts>;

  // path tp app-routing.module.ts file, that will be used as base for create paths
  routingFilePath: string; 

  // if you provide paths with routingFilePath then they will be combined
  paths: Record<string, Partial<PathOptions>>; 

  // it's a path that webapp is using as base, children of this path will be the result
  pathSplitter: string;

  // name and path to save the result robots, sitemap or/and routes file.
  files: Files; 

  // f.e https://toloka.to
  hostname: string; 

  // date of the last modification, priorities and defaultPriority info
  sitemapOptions: Partial<SitemapOptions>; 

  // boolean set of of info whether need or not to create sitemap, robots or routes files.
  create: Partial<CreateOptions>; 

  // langs, that you webapp is using
  langs: string[];

  // default lang, nothing to add here
  defaultLang: string; 
}

// if true means file will be created
export interface CreateOptions {
  routes: boolean; // default true
  sitemap: boolean; // default true
  robots: boolean; // default true
}

// it can be used instead of the routing file
export interface PathOptions extends CreateOptions {
  sitemapCustomLangs: string[]; // first, means default
}

export interface SitemapOptions {
  lastmod: string; // default is today, date of last modification
  priorities: Record<string, string>; // default { '': '1.0' }, use path with '/' at start
  defaultPriority: string; // default '0.8'
  // if path is not specified in the "priorities" then defaultPriority will be used
}

// these values will be used inside comments for marking sitemap options
export interface SitemapConsts {
  sitemapIgnore: string; // default "sitemap-ignore", use it for ignore path
  sitemapOnlyForLang: string; // default sitemap-only-for-langs:"
  // use it to specify custom langs for path
  // f.e "sitemap-only-for-langs:de,en" - de will be default lang
}

export interface RobotsConsts {
  robotsDisallowed: string; 
  // default robots-disallowed, path will be added as disallowed to robots
}

export interface FileSaveOptions {
  path: string;
  name: string;
}

export interface Files {
  robots: FileSaveOptions;
  sitemap: FileSaveOptions;
  routes: FileSaveOptions;
}

export interface AllConsts extends SitemapConsts, RobotsConsts { }

Here is the set of default values settings:

export const routingFilePath = 'src/app/app-routing.module.ts';
export const langs = ['en', 'de', 'nl', 'pl'];
export const defaultLang = 'en';
export const pathSplitter = ':lang';

export const consts = {
  sitemapIgnore: 'sitemap-ignore',
  robotsDisallowed: 'robots-disallowed',
  sitemapOnlyForLang: 'sitemap-only-for-langs:'
}

export const files: Files = {
  routes: { name: 'routes.txt', path: '' },
  robots: { name: 'robots.txt', path: 'src/' },
  sitemap: { name: 'sitemap.xml', path: 'src/' }
};

const sitemapOptions: SitemapOptions = {
  lastmod: new Date().toISOString().split('T')[0],
  priorities: { '': '1.0' },
  defaultPriority: '0.8'
}

const create: CreateOptions = {
  robots: true,
  routes: true,
  sitemap: true
};

export const defaultConfiguration: FilesRoutesBuilderInput = {
  hostname: '/',
  routingFilePath,
  paths: {},
  defaultLang,
  langs,
  consts,
  pathSplitter,
  files,
  sitemapOptions,
  create
};