@ascua/mdfiles 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addon/services/mdfiles.js +10 -5
- package/index.js +41 -12
- package/lib/files.js +97 -0
- package/package.json +4 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Service from '@ember/service';
|
|
2
|
-
import
|
|
2
|
+
import folders from '@ascua/mdfiles/files';
|
|
3
3
|
import config from '@ascua/config';
|
|
4
4
|
|
|
5
5
|
export default class extends Service {
|
|
@@ -8,10 +8,15 @@ export default class extends Service {
|
|
|
8
8
|
return config.mdfiles || {};
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
async folder(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
async folder(folder) {
|
|
12
|
+
return fetch(config.rootURL + folders[folder] + '/index.json').then(data => {
|
|
13
|
+
return data.json();
|
|
14
|
+
})
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async file(folder, name) {
|
|
18
|
+
return fetch(config.rootURL + folders[folder] + `/${name}.json`).then(data => {
|
|
19
|
+
return data.json();
|
|
15
20
|
});
|
|
16
21
|
}
|
|
17
22
|
|
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const MarkdownFiles = require('./lib/files.js');
|
|
4
4
|
const Merger = require('broccoli-merge-trees');
|
|
5
5
|
const path = require('path');
|
|
6
6
|
const fs = require('fs');
|
|
@@ -25,28 +25,57 @@ module.exports = {
|
|
|
25
25
|
|
|
26
26
|
},
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
folders() {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
return Object.keys(this.opts.folders).reduce((folders, name) => {
|
|
31
|
+
let dir = path.join(this.app.project.root, this.opts.folders[name]);
|
|
32
|
+
return fs.existsSync(dir) ? [...folders, { name, dir }] : [...folders];
|
|
32
33
|
}, []);
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
treeForAddon(tree) {
|
|
38
|
+
|
|
39
|
+
let folders = this.folders();
|
|
38
40
|
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
+
if (folders.length > 0) {
|
|
42
|
+
|
|
43
|
+
let files = new MarkdownFiles(folders.map(v => v.dir), {
|
|
44
|
+
type: 'addon',
|
|
45
|
+
folders: folders,
|
|
41
46
|
basePath: this.app.project.root,
|
|
42
|
-
|
|
43
|
-
trimExtensions: true,
|
|
47
|
+
outputDir: 'assets',
|
|
44
48
|
});
|
|
49
|
+
|
|
45
50
|
tree = new Merger([tree, files]);
|
|
51
|
+
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
return this._super.treeForAddon.call(this, tree);
|
|
49
55
|
|
|
50
56
|
},
|
|
51
57
|
|
|
58
|
+
postprocessTree(type, tree) {
|
|
59
|
+
|
|
60
|
+
if (type !== 'all') return tree;
|
|
61
|
+
|
|
62
|
+
let folders = this.folders();
|
|
63
|
+
|
|
64
|
+
if (folders.length > 0) {
|
|
65
|
+
|
|
66
|
+
let files = new MarkdownFiles(folders.map(v => v.dir), {
|
|
67
|
+
type: 'files',
|
|
68
|
+
folders: folders,
|
|
69
|
+
basePath: this.app.project.root,
|
|
70
|
+
outputDir: 'assets',
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
tree = new Merger([tree, files]);
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return tree;
|
|
78
|
+
|
|
79
|
+
},
|
|
80
|
+
|
|
52
81
|
};
|
package/lib/files.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Plugin = require('broccoli-caching-writer');
|
|
4
|
+
const frontmatter = require('front-matter');
|
|
5
|
+
const mkdirp = require('mkdirp');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
|
|
9
|
+
module.exports = class Trees extends Plugin {
|
|
10
|
+
|
|
11
|
+
constructor(inputNodes, opts) {
|
|
12
|
+
|
|
13
|
+
super(inputNodes);
|
|
14
|
+
|
|
15
|
+
this.opts = opts;
|
|
16
|
+
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
build() {
|
|
20
|
+
|
|
21
|
+
let output = Array.prototype.reduce.call(this.inputPaths, (trees, dir) => {
|
|
22
|
+
let folder = this.opts.folders.find(v => v.dir === dir);
|
|
23
|
+
trees[folder.name] = this.readDirectory(folder.name, dir);
|
|
24
|
+
return trees;
|
|
25
|
+
}, {});
|
|
26
|
+
|
|
27
|
+
if (this.opts.type === 'addon') {
|
|
28
|
+
|
|
29
|
+
let output = this.opts.folders.reduce((list, folder) => {
|
|
30
|
+
list[folder.name] = path.join(this.opts.outputDir, folder.name);
|
|
31
|
+
return list;
|
|
32
|
+
}, {});
|
|
33
|
+
let buffer = `export default ${JSON.stringify(output)}`;
|
|
34
|
+
fs.writeFileSync(path.join(this.outputPath, 'files.js'), buffer);
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (this.opts.type === 'files') {
|
|
39
|
+
|
|
40
|
+
for (const [name, entries] of Object.entries(output)) {
|
|
41
|
+
|
|
42
|
+
// Write the index.json file contents
|
|
43
|
+
|
|
44
|
+
let buffer = JSON.stringify(entries.map(v => {
|
|
45
|
+
return { name: v.name, attributes: v.attributes };
|
|
46
|
+
}));
|
|
47
|
+
let folder = path.join(this.outputPath, this.opts.outputDir, name);
|
|
48
|
+
let file = path.join(folder, 'index.json');
|
|
49
|
+
mkdirp.sync(folder);
|
|
50
|
+
fs.writeFileSync(file, buffer);
|
|
51
|
+
|
|
52
|
+
// Write the individual file contents
|
|
53
|
+
|
|
54
|
+
for (const entry of entries) {
|
|
55
|
+
|
|
56
|
+
let buffer = JSON.stringify(entry);
|
|
57
|
+
let folder = path.join(this.outputPath, this.opts.outputDir, name);
|
|
58
|
+
let file = path.join(folder, `${entry.name}.json`);
|
|
59
|
+
fs.writeFileSync(file, buffer);
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
readDirectory(name, dir) {
|
|
70
|
+
|
|
71
|
+
let files = fs.readdirSync(dir);
|
|
72
|
+
|
|
73
|
+
return Array.prototype.reduce.call(files, (tree, file) => {
|
|
74
|
+
|
|
75
|
+
let fileExt = path.extname(file);
|
|
76
|
+
let fileName = file.replace(/\.[^/.]+$/, '');
|
|
77
|
+
let filePath = path.join(name, fileName);
|
|
78
|
+
let fullPath = path.join(dir, file);
|
|
79
|
+
let isDirectory = fs.lstatSync(path.join(dir, file)).isDirectory();
|
|
80
|
+
|
|
81
|
+
if (isDirectory || fileExt !== '.md') { return [...tree]; }
|
|
82
|
+
|
|
83
|
+
let content = fs.readFileSync(fullPath, { encoding: 'utf8' });
|
|
84
|
+
content = frontmatter(content);
|
|
85
|
+
|
|
86
|
+
let entry = {
|
|
87
|
+
name: fileName,
|
|
88
|
+
body: content.body,
|
|
89
|
+
attributes: content.attributes,
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
return [...tree, entry];
|
|
93
|
+
|
|
94
|
+
}, []);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ascua/mdfiles",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Small description for @ascua/mdfiles goes here",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ember-addon"
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
"url": "https://surrealdb.com"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"broccoli-markdown-resolver": "^0.0.1",
|
|
19
18
|
"broccoli-merge-trees": "^4.2.0",
|
|
20
19
|
"ember-cli-babel": "^7.26.6",
|
|
21
|
-
"ember-cli-htmlbars": "^5.7.1"
|
|
20
|
+
"ember-cli-htmlbars": "^5.7.1",
|
|
21
|
+
"front-matter": "^4.0.2"
|
|
22
22
|
},
|
|
23
23
|
"ember-addon": {
|
|
24
24
|
"demoURL": "https://abcum.github.io/ascua"
|
|
@@ -27,5 +27,5 @@
|
|
|
27
27
|
"publishConfig": {
|
|
28
28
|
"access": "public"
|
|
29
29
|
},
|
|
30
|
-
"gitHead": "
|
|
30
|
+
"gitHead": "198ee00fc714c2a8aa25d1585a7b06e2f3feaef2"
|
|
31
31
|
}
|