@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.
@@ -1,5 +1,5 @@
1
1
  import Service from '@ember/service';
2
- import { trees } from '@ascua/mdfiles/files';
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(name) {
12
- let tree = { name, path: this.config.folders[name] };
13
- return trees[tree.path].map(file => {
14
- return { ...file, path: file.path.replace(`${tree.path}/`, '') };
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 MarkdownResolver = require('broccoli-markdown-resolver');
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
- treeForAddon(tree) {
28
+ folders() {
29
29
 
30
- let folders = Object.keys(this.opts.folders).reduce((folders, key) => {
31
- return [...folders, this.opts.folders[key]];
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
- let paths = folders.reduce((paths, folder) => {
35
- let dirpath = path.join(this.app.project.root, folder);
36
- return fs.existsSync(dirpath) ? [...paths, dirpath] : [...paths];
37
- }, []);
35
+ },
36
+
37
+ treeForAddon(tree) {
38
+
39
+ let folders = this.folders();
38
40
 
39
- if (paths.length > 0) {
40
- let files = new MarkdownResolver(paths, {
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
- outputFile: 'files.js',
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.2.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": "15ac1610df327477e4cde680162812196d462303"
30
+ "gitHead": "198ee00fc714c2a8aa25d1585a7b06e2f3feaef2"
31
31
  }