UNPKG

neft

Version:

Universal Platform

81 lines (60 loc) 2.39 kB
# Resources 'use strict' utils = require 'src/utils' log = require 'src/log' assert = require 'src/assert' log = log.scope 'Resources' module.exports = class Resources @__name__ = 'Resources' @Resources = @ @Resource = require('./resource') @ @URI = ///^(?:rsc|resource|resources)?:\/?\/?(.*?)(?:@([0-9p]+)x)?(?:\.[a-zA-Z]+)?(?:\#[a-zA-Z0-9]+)?$/// ## *Resources* Resources.fromJSON(*String*|*Object* json) @fromJSON = (json) -> if typeof json is 'string' json = JSON.parse json assert.isObject json resources = new Resources for prop, val of json if prop is '__name__' continue val = Resources[val.__name__].fromJSON val assert.notOk prop of resources, "Can't set '#{prop}' property in this resources object, because it's already defined" resources[prop] = val resources ## *Boolean* Resources.testUri(*String* uri) @testUri = (uri) -> assert.isString uri Resources.URI.test uri constructor: -> ## *Resource* Resources::getResource(*String* uri) getResource: (uri) -> if typeof uri is 'string' if match = Resources.URI.exec(uri) uri = match[1] chunk = uri while chunk if r = @[chunk] rest = uri.slice chunk.length + 1 if rest isnt '' and r instanceof Resources r = r.getResource rest return r chunk = chunk.slice 0, chunk.lastIndexOf('/') return ## *String* Resources::resolve(*String* uri, [*Object* request]) resolve: (uri, req) -> rsc = @getResource uri if rsc instanceof Resources.Resource name = Resources.Resource.parseFileName uri name.file = '' if req? for key, val of req unless name[key] name[key] = val path = rsc.resolve '', name path and @resolve(path) or path ## *Object* Resources::toJSON() toJSON: -> utils.merge __name__: @constructor.__name__ , @