UNPKG

3.08 kBJavaScriptView Raw
1const path = require('path');
2const RawAsset = require('./assets/RawAsset');
3const GlobAsset = require('./assets/GlobAsset');
4const glob = require('glob');
5
6class Parser {
7 constructor(options = {}) {
8 this.extensions = {};
9
10 this.registerExtension('js', './assets/JSAsset');
11 this.registerExtension('jsx', './assets/JSAsset');
12 this.registerExtension('es6', './assets/JSAsset');
13 this.registerExtension('jsm', './assets/JSAsset');
14 this.registerExtension('mjs', './assets/JSAsset');
15 this.registerExtension('ml', './assets/ReasonAsset');
16 this.registerExtension('re', './assets/ReasonAsset');
17 this.registerExtension('ts', './assets/TypeScriptAsset');
18 this.registerExtension('tsx', './assets/TypeScriptAsset');
19 this.registerExtension('coffee', './assets/CoffeeScriptAsset');
20 this.registerExtension('vue', './assets/VueAsset');
21 this.registerExtension('json', './assets/JSONAsset');
22 this.registerExtension('json5', './assets/JSONAsset');
23 this.registerExtension('yaml', './assets/YAMLAsset');
24 this.registerExtension('yml', './assets/YAMLAsset');
25 this.registerExtension('toml', './assets/TOMLAsset');
26 this.registerExtension('gql', './assets/GraphqlAsset');
27 this.registerExtension('graphql', './assets/GraphqlAsset');
28
29 this.registerExtension('css', './assets/CSSAsset');
30 this.registerExtension('pcss', './assets/CSSAsset');
31 this.registerExtension('styl', './assets/StylusAsset');
32 this.registerExtension('stylus', './assets/StylusAsset');
33 this.registerExtension('less', './assets/LESSAsset');
34 this.registerExtension('sass', './assets/SASSAsset');
35 this.registerExtension('scss', './assets/SASSAsset');
36
37 this.registerExtension('html', './assets/HTMLAsset');
38 this.registerExtension('htm', './assets/HTMLAsset');
39 this.registerExtension('rs', './assets/RustAsset');
40
41 this.registerExtension('webmanifest', './assets/WebManifestAsset');
42
43 this.registerExtension('glsl', './assets/GLSLAsset');
44 this.registerExtension('vert', './assets/GLSLAsset');
45 this.registerExtension('frag', './assets/GLSLAsset');
46
47 this.registerExtension('jade', './assets/PugAsset');
48 this.registerExtension('pug', './assets/PugAsset');
49
50 let extensions = options.extensions || {};
51 for (let ext in extensions) {
52 this.registerExtension(ext, extensions[ext]);
53 }
54 }
55
56 registerExtension(ext, parser) {
57 if (!ext.startsWith('.')) {
58 ext = '.' + ext;
59 }
60
61 this.extensions[ext.toLowerCase()] = parser;
62 }
63
64 findParser(filename) {
65 if (/[*+{}]/.test(filename) && glob.hasMagic(filename)) {
66 return GlobAsset;
67 }
68
69 let extension = path.extname(filename).toLowerCase();
70 let parser = this.extensions[extension] || RawAsset;
71 if (typeof parser === 'string') {
72 parser = this.extensions[extension] = require(parser);
73 }
74
75 return parser;
76 }
77
78 getAsset(filename, pkg, options = {}) {
79 let Asset = this.findParser(filename);
80 options.parser = this;
81 return new Asset(filename, pkg, options);
82 }
83}
84
85module.exports = Parser;