UNPKG

3.86 kBJavaScriptView Raw
1const
2 AppBuilder = require('./AppBuilder'),
3 FakeDataLoader = require('./dataLoader/FakeDataLoader'),
4 StylesDataLoader = require('./dataLoader/StylesDataLoader'),
5 PatternDataLoader = require('./dataLoader/PatternDataLoader'),
6 TemplateEngine = require('./TemplateEngine'),
7 CollectorStore = require('./CollectorStore'),
8 CollectorPaths = require('./CollectorPaths'),
9 StyleCollector = require('./collectors/StyleCollector'),
10 IconCollector = require('./collectors/IconCollector'),
11 PatternCollector = require('./collectors/PatternCollector'),
12 ComponentCollector = require('./collectors/ComponentCollector'),
13 TemplateCollector = require('./collectors/TemplateCollector'),
14 DevServer = require('./DevServer'),
15 Watcher = require('./Watcher'),
16 ConfigManager = require('./ConfigManager');
17
18class AtomaticCore {
19
20 create(config) {
21 this.create = () => this;
22 this.hasBeenBuild = false;
23
24 this.conf = ConfigManager.initConfig(config);
25
26 this.CollectorStore = new CollectorStore({
27 conf: this.conf
28 });
29
30 this.CollectorPaths = new CollectorPaths({
31 conf: this.conf
32 });
33
34 this.TemplateEngine = new TemplateEngine({
35 conf: this.conf
36 });
37
38 this.collect();
39
40 return this;
41 }
42
43 getConfig(key, defaultValue) {
44 return this.conf.get(key, defaultValue);
45 }
46
47 collect() {
48 new StyleCollector({
49 conf: this.conf,
50 CollectorStore: this.CollectorStore,
51 TemplateEngine: this.TemplateEngine,
52 CollectorPaths: this.CollectorPaths,
53 DataLoader: StylesDataLoader
54 }).collectMatchingSections(ConfigManager.get('sections'), 'style');
55
56 new IconCollector({
57 conf: this.conf,
58 CollectorStore: this.CollectorStore,
59 TemplateEngine: this.TemplateEngine,
60 CollectorPaths: this.CollectorPaths
61 }).collectMatchingSections(ConfigManager.get('sections'), 'icons');
62
63 new PatternCollector({
64 conf: this.conf,
65 CollectorStore: this.CollectorStore,
66 TemplateEngine: this.TemplateEngine,
67 CollectorPaths: this.CollectorPaths,
68 DataLoader: PatternDataLoader
69 }).collectMatchingSections(ConfigManager.get('sections'), 'patterns');
70
71 new ComponentCollector({
72 conf: this.conf,
73 CollectorStore: this.CollectorStore,
74 TemplateEngine: this.TemplateEngine,
75 CollectorPaths: this.CollectorPaths,
76 DataLoader: FakeDataLoader
77 }).collectMatchingSections(ConfigManager.get('sections'), 'components');
78
79 new TemplateCollector({
80 conf: this.conf,
81 CollectorStore: this.CollectorStore,
82 TemplateEngine: this.TemplateEngine,
83 CollectorPaths: this.CollectorPaths,
84 DataLoader: FakeDataLoader
85 }).collectMatchingSections(ConfigManager.get('sections'), 'templates');
86
87 return this;
88 }
89
90 async build() {
91 const builder = new AppBuilder(this.conf, this.CollectorStore);
92
93 await Promise.all([
94 builder.rollupViewerScripts(),
95 builder.generateViewerStyles(),
96 builder.generateViewerPages(),
97 builder.saveCollectedData()
98 ]);
99
100 await builder.renderCollected();
101
102 this.hasBeenBuild = true;
103 }
104
105 async watch() {
106
107 const server = new DevServer({
108 conf: this.conf,
109 CollectorStore: this.CollectorStore
110 }).start();
111
112 const watcher = new Watcher({
113 conf: this.conf,
114 CollectorStore: this.CollectorStore,
115 browserSync: server.browserSync
116 });
117
118 if (!this.hasBeenBuild) {
119 await this.build();
120 }
121
122 watcher.start();
123 server.addRoutes();
124 }
125
126 kill() {
127 this.TemplateEngine.kill();
128 }
129
130 getCollectedFiles() {
131 return this.CollectorStore.getFiles();
132 }
133
134 async compileFile(file, global = {}) {
135 if (typeof file === 'string') {
136 file = this.getCollectedFiles()
137 .get(file);
138 }
139
140 return await this.TemplateEngine.render(file, global);
141 }
142}
143
144module.exports = AtomaticCore;