1 | const
|
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 |
|
18 | class 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 |
|
144 | module.exports = AtomaticCore;
|