UNPKG

11.2 kBSource Map (JSON)View Raw
1{"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../../../src/lib/output/utils/resources/stack.ts"],"names":[],"mappings":"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","sourcesContent":["import * as FS from 'fs';\nimport * as Path from 'path';\nimport * as Util from 'util';\n\nexport interface ResourceClass<T extends Resource> extends Function {\n new (origin: ResourceOrigin<T>, name: string, fileName: string): T;\n}\n\nexport interface ResourceMap<T extends Resource> {\n [name: string]: T;\n}\n\n/**\n * Normalize the given template name.\n */\nfunction normalizeName(name: string): string {\n return name.replace('\\\\', '/').replace(/\\.\\w+$/, '');\n}\n\nexport abstract class Resource {\n protected origin: ResourceOrigin<any>;\n\n protected name: string;\n\n protected fileName: string;\n\n constructor(origin: ResourceOrigin<any>, name: string, fileName: string) {\n this.origin = origin;\n this.name = name;\n this.fileName = fileName;\n }\n\n getName(): string {\n return this.name;\n }\n}\n\nexport class ResourceOrigin<T extends Resource> {\n private stack: ResourceStack<T>;\n\n private name: string;\n\n private path: string;\n\n private resources: ResourceMap<T> = {};\n\n constructor(stack: ResourceStack<T>, name: string, path: string) {\n this.stack = stack;\n this.name = name;\n this.path = path;\n\n this.findResources();\n }\n\n mergeResources(target: ResourceMap<T>) {\n const resources = this.resources;\n for (let name in resources) {\n if (name in target) {\n continue;\n }\n target[name] = resources[name];\n }\n }\n\n hasResource(name: string): boolean {\n return name in this.resources;\n }\n\n getResource(name: string): T | undefined {\n return this.resources[name];\n }\n\n getName(): string {\n return this.name;\n }\n\n private findResources(dir?: string) {\n const resourceClass = this.stack.getResourceClass();\n const resourceRegExp = this.stack.getResourceRegExp();\n let path = this.path;\n if (dir) {\n path = Path.join(path, dir);\n }\n\n for (let fileName of FS.readdirSync(path)) {\n const fullName = Path.join(path, fileName);\n\n if (FS.statSync(fullName).isDirectory()) {\n this.findResources(dir ? Path.join(dir, fileName) : fileName);\n } else if (resourceRegExp.test(fileName)) {\n const name: string = normalizeName(dir ? Path.join(dir, fileName) : fileName);\n this.resources[name] = new resourceClass(this, name, fullName);\n }\n }\n }\n}\n\nexport abstract class ResourceStack<T extends Resource> {\n private isActive = false;\n\n private resourceClass: ResourceClass<T>;\n\n private resourceRegExp: RegExp;\n\n /**\n * A list of all source directories.\n */\n private origins: ResourceOrigin<T>[] = [];\n\n constructor(resourceClass: ResourceClass<T>, resourceRegExp?: RegExp) {\n this.resourceClass = resourceClass;\n this.resourceRegExp = resourceRegExp || /.*/;\n }\n\n activate(): boolean {\n if (this.isActive) {\n return false;\n }\n this.isActive = true;\n return true;\n }\n\n deactivate(): boolean {\n if (!this.isActive) {\n return false;\n }\n this.isActive = false;\n return true;\n }\n\n /**\n * Return a resource by its name.\n */\n getResource(name: string): T | undefined {\n const normalizedName = normalizeName(name);\n let index = this.origins.length - 1;\n\n while (index >= 0) {\n const origin = this.origins[index--];\n if (origin.hasResource(normalizedName)) {\n return origin.getResource(normalizedName);\n }\n }\n\n throw new Error(Util.format('Cannot find resource `%s`.', name));\n }\n\n getAllResources(): ResourceMap<T> {\n const resources: ResourceMap<T> = {};\n let index = this.origins.length - 1;\n\n while (index >= 0) {\n this.origins[index--].mergeResources(resources);\n }\n\n return resources;\n }\n\n getResourceClass(): ResourceClass<T> {\n return this.resourceClass;\n }\n\n getResourceRegExp(): RegExp {\n return this.resourceRegExp;\n }\n\n getOrigin(name: string): ResourceOrigin<T> | undefined {\n for (let origin of this.origins) {\n if (origin.getName() === name) {\n return origin;\n }\n }\n }\n\n hasOrigin(name: string): boolean {\n return !!this.getOrigin(name);\n }\n\n /**\n * Add a source directory to the resource stack.\n */\n addOrigin(name: string, path: string, ignoreErrors?: boolean) {\n if (this.isActive) {\n throw new Error('Cannot add origins while the resource is active.');\n }\n\n if (this.hasOrigin(name)) {\n throw new Error(Util.format('The origin `%s` is already registered.', name));\n }\n\n path = Path.resolve(path);\n if (!FS.existsSync(path)) {\n if (!ignoreErrors) {\n throw new Error(Util.format('The resource path `%s` does not exist.', path));\n }\n return;\n }\n\n if (!FS.statSync(path).isDirectory()) {\n if (!ignoreErrors) {\n throw new Error(Util.format('The resource path `%s` is not a directory.', path));\n }\n return;\n }\n\n this.origins.push(new ResourceOrigin<T>(this, name, path));\n }\n\n removeOrigin(name: string) {\n if (this.isActive) {\n throw new Error('Cannot remove origins while the resource is active.');\n }\n\n let index = 0, count = this.origins.length;\n while (index < count) {\n const origin = this.origins[index];\n if (origin.getName() === name) {\n this.origins.splice(index, 1);\n count -= 1;\n } else {\n index += 1;\n }\n }\n }\n\n removeAllOrigins() {\n if (this.isActive) {\n throw new Error('Cannot remove origins while the resource is active.');\n }\n\n this.origins = [];\n }\n}\n"]}
\No newline at end of file