All files / route FosJsRoutingRouter.js

0% Statements 0/9
0% Branches 0/3
0% Functions 0/5
0% Lines 0/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66                                                                                                                                   
import { Route } from './Route'
import { Router } from './Router'
 
/**
 * Pluggable api router if you're using Symfony and the FosJsRouting Bundle
 *
 * @class FosJsRoutingRouter
 *
 * @see https://github.com/isychev/fos-routing/
 * @see https://github.com/FriendsOfSymfony/FOSJsRoutingBundle
 */
export class FosJsRoutingRouter extends Router {
  constructor (fosRouter, options = {}) {
    super()
 
    this.fosRouter = fosRouter
    this.routeExtractionOptions = Object.assign({
      prefix: '',
      resourceNamePattern: '[a-b]+',
      routePatterns: {
        resourceRoute: '{prefix}_{resourceName}_{action}'
      },
      actionPatterns: {
        list: 'list',
        get: 'get',
        create: 'create',
        replace: 'replace',
        update: 'update',
        delete: 'delete'
      }
    }, options)
  }
 
  async updateRoutes () {
    // TODO: extract routes from fosRouter based on naming scheme or something
    this.fosRouter.map(this.fosRouter.getRoutes(), name => {
      if (this.matchRouteName(name)) {
        const route = Route.fromPojo()
        this.addRoute(route)
      }
    })
  }
 
  matchRouteName (name) {
 
  }
 
  prepareResourceMatchRegex () {
    const pattern = this.routeExtractionOptions.routePatterns.resourceRoute
      .replace(
        '{prefix}',
        this.routeExtractionOptions.prefix
      )
      .replace(
        '{resourceName}',
        `(?<resourceName>${this.routeExtractionOptions.resourceNamePattern})`
      )
      .replace(
        '{action}',
        `(?<action>${Object.values(this.routeExtractionOptions.actionPatterns).join('|')})`
      )
 
    return new RegExp(pattern)
  }
}