Class: JSRailsRoutes::Language::TypeScript

Inherits:
JavaScript show all
Defined in:
lib/js_rails_routes/language/typescript.rb

Constant Summary collapse

PROCESS_FUNC =
<<~TYPESCRIPT
  type Value = string | number | (string | number)[];
  type Params<Keys extends string> = { [key in Keys]: Value } & Record<string, Value>
  function process(route: string, params: Record<string, Value> | undefined, keys: string[]): string {
    if (!params) return route
    var query: string[] = [];
    for (var param in params) if (Object.prototype.hasOwnProperty.call(params, param)) {
      if (keys.indexOf(param) === -1) {
        if (Array.isArray(params[param])) {
          for (var value of params[param] as (string | number)[]) {
            query.push(param + "[]=" + encodeURIComponent(value.toString()));
          }
        } else {
          query.push(param + "=" + encodeURIComponent(params[param].toString()));
        }
      }
    }
    return query.length ? route + "?" + query.join("&") : route;
  }
TYPESCRIPT

Instance Method Summary collapse

Methods inherited from JavaScript

#handle_route_set

Methods inherited from Base

#handle_route_set

Instance Method Details

#extObject

Note:

Implementation for Base#ext



40
41
42
# File 'lib/js_rails_routes/language/typescript.rb', line 40

def ext
  'ts'
end

#handle_route(route) ⇒ String

Parameters:

Returns:

  • (String)


32
33
34
35
36
37
# File 'lib/js_rails_routes/language/typescript.rb', line 32

def handle_route(route)
  path, keys = parse(route.path)
  name = function_name(route.name)
  params = keys.empty? ? 'params?: Record<string, Value>' : "params: Params<#{keys.join(' | ')}>"
  "export function #{name}(#{params}) { return process('#{path}', params, [#{keys.join(',')}]); }"
end