writr 1.9.11 → 1.9.12

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.
Files changed (82) hide show
  1. package/dist/cache.d.ts +18 -0
  2. package/dist/cache.js +70 -0
  3. package/dist/cache.js.map +1 -0
  4. package/dist/config.d.ts +29 -0
  5. package/dist/config.js +104 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/data/dataProviderInterface.d.ts +12 -0
  8. package/dist/data/dataProviderInterface.js +2 -0
  9. package/dist/data/dataProviderInterface.js.map +1 -0
  10. package/dist/data/dataService.d.ts +19 -0
  11. package/dist/data/dataService.js +130 -0
  12. package/dist/data/dataService.js.map +1 -0
  13. package/dist/data/fileDataProvider.d.ts +20 -0
  14. package/dist/data/fileDataProvider.js +132 -0
  15. package/dist/data/fileDataProvider.js.map +1 -0
  16. package/dist/generator.d.ts +8 -0
  17. package/dist/generator.js +54 -0
  18. package/dist/generator.js.map +1 -0
  19. package/dist/index.d.ts +8 -0
  20. package/dist/index.js +80 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/log.d.ts +6 -0
  23. package/dist/log.js +13 -0
  24. package/dist/log.js.map +1 -0
  25. package/dist/migrate/ghostMigrationProvider.d.ts +9 -0
  26. package/dist/migrate/ghostMigrationProvider.js +65 -0
  27. package/dist/migrate/ghostMigrationProvider.js.map +1 -0
  28. package/dist/migrate/jekyllMigrationProvider.d.ts +4 -0
  29. package/dist/migrate/jekyllMigrationProvider.js +11 -0
  30. package/dist/migrate/jekyllMigrationProvider.js.map +1 -0
  31. package/dist/migrate/mediumMigrationProvider.d.ts +7 -0
  32. package/dist/migrate/mediumMigrationProvider.js +26 -0
  33. package/dist/migrate/mediumMigrationProvider.js.map +1 -0
  34. package/dist/migrate/migrationProviderInterface.d.ts +3 -0
  35. package/dist/migrate/migrationProviderInterface.js +2 -0
  36. package/dist/migrate/migrationProviderInterface.js.map +1 -0
  37. package/dist/migrate/wordpressMigrationProvider.d.ts +12 -0
  38. package/dist/migrate/wordpressMigrationProvider.js +103 -0
  39. package/dist/migrate/wordpressMigrationProvider.js.map +1 -0
  40. package/dist/migrate.d.ts +6 -0
  41. package/dist/migrate.js +34 -0
  42. package/dist/migrate.js.map +1 -0
  43. package/dist/post.d.ts +31 -0
  44. package/dist/post.js +189 -0
  45. package/dist/post.js.map +1 -0
  46. package/dist/render/atomRenderProvider.d.ts +8 -0
  47. package/dist/render/atomRenderProvider.js +51 -0
  48. package/dist/render/atomRenderProvider.js.map +1 -0
  49. package/dist/render/htmRenderlProvider.d.ts +14 -0
  50. package/dist/render/htmRenderlProvider.js +117 -0
  51. package/dist/render/htmRenderlProvider.js.map +1 -0
  52. package/dist/render/imageRenderProvider.d.ts +8 -0
  53. package/dist/render/imageRenderProvider.js +15 -0
  54. package/dist/render/imageRenderProvider.js.map +1 -0
  55. package/dist/render/jsonRenderProvider.d.ts +8 -0
  56. package/dist/render/jsonRenderProvider.js +24 -0
  57. package/dist/render/jsonRenderProvider.js.map +1 -0
  58. package/dist/render/renderProviderInterface.d.ts +5 -0
  59. package/dist/render/renderProviderInterface.js +2 -0
  60. package/dist/render/renderProviderInterface.js.map +1 -0
  61. package/dist/serve.d.ts +16 -0
  62. package/dist/serve.js +29 -0
  63. package/dist/serve.js.map +1 -0
  64. package/dist/storage/fileStorageProvider.d.ts +10 -0
  65. package/dist/storage/fileStorageProvider.js +62 -0
  66. package/dist/storage/fileStorageProvider.js.map +1 -0
  67. package/dist/storage/storageProviderInterface.d.ts +8 -0
  68. package/dist/storage/storageProviderInterface.js +2 -0
  69. package/dist/storage/storageProviderInterface.js.map +1 -0
  70. package/dist/storage/storageService.d.ts +12 -0
  71. package/dist/storage/storageService.js +28 -0
  72. package/dist/storage/storageService.js.map +1 -0
  73. package/dist/tag.d.ts +9 -0
  74. package/dist/tag.js +34 -0
  75. package/dist/tag.js.map +1 -0
  76. package/dist/utils/parser.d.ts +5 -0
  77. package/dist/utils/parser.js +37 -0
  78. package/dist/utils/parser.js.map +1 -0
  79. package/dist/utils/setup.d.ts +8 -0
  80. package/dist/utils/setup.js +75 -0
  81. package/dist/utils/setup.js.map +1 -0
  82. package/package.json +1 -1
package/dist/post.js ADDED
@@ -0,0 +1,189 @@
1
+ import { DateTime } from "luxon";
2
+ import striptags from "striptags";
3
+ import { Ecto } from "ecto";
4
+ export class Post {
5
+ constructor() {
6
+ this.keywords = [];
7
+ this.tags = [];
8
+ this.content = "";
9
+ this._matter = {};
10
+ this.permalink_default = ":title";
11
+ this.permalink_date = ":year/:month/:day/:title";
12
+ this.permalink_ordinal = ":year/:y_day/:title";
13
+ }
14
+ get id() {
15
+ return this.url;
16
+ }
17
+ get date() {
18
+ if (Object.prototype.toString.call(this.matter.date) !== "[object Date]") {
19
+ return DateTime.fromISO(this.matter.date).toJSDate();
20
+ }
21
+ else {
22
+ return this.matter.date;
23
+ }
24
+ }
25
+ get title() {
26
+ return this.matter.title;
27
+ }
28
+ set title(val) {
29
+ this.matter.title = val;
30
+ this.generateUrl();
31
+ }
32
+ get author() {
33
+ return this.matter.author;
34
+ }
35
+ set author(val) {
36
+ this.matter.author = val;
37
+ }
38
+ get url() {
39
+ if (!this.matter.url) {
40
+ this.generateUrl();
41
+ }
42
+ return this.matter.url;
43
+ }
44
+ set url(val) {
45
+ this.matter.url = val;
46
+ }
47
+ get matter() {
48
+ return this._matter;
49
+ }
50
+ set matter(val) {
51
+ this._matter = val;
52
+ }
53
+ async getBody() {
54
+ if (!this.matter.body) {
55
+ const ecto = new Ecto();
56
+ this.matter.body = await ecto.render(this.content, undefined, 'markdown');
57
+ }
58
+ return this.matter.body;
59
+ }
60
+ get published() {
61
+ if (this.matter.published === undefined) {
62
+ this.matter.published = true;
63
+ }
64
+ return this.matter.published;
65
+ }
66
+ set published(val) {
67
+ this.matter.published = val;
68
+ }
69
+ async getDescription() {
70
+ if (this.matter.description === undefined) {
71
+ this.matter.description = striptags(await this.getSummary());
72
+ }
73
+ return this.matter.description;
74
+ }
75
+ async getSummary() {
76
+ if (this.matter.description) {
77
+ this.matter.summary = this.matter.description;
78
+ }
79
+ if (!this.matter.summary) {
80
+ let body = await this.getBody();
81
+ let cheerio = await import("cheerio");
82
+ let html = cheerio.load(body);
83
+ let summaryLength = 3;
84
+ this.matter.summary = "";
85
+ html("p").each((i, elem) => {
86
+ if (i < summaryLength) {
87
+ this.matter.summary = this.matter.summary + html.html(elem);
88
+ }
89
+ });
90
+ }
91
+ return this.matter.summary;
92
+ }
93
+ addTag(name) {
94
+ let exists = false;
95
+ if (name) {
96
+ this.tags.forEach((tag) => {
97
+ if (tag === name) {
98
+ exists = true;
99
+ }
100
+ });
101
+ if (!exists) {
102
+ this.tags.push(name);
103
+ }
104
+ }
105
+ }
106
+ addTags(names) {
107
+ names.forEach((name) => {
108
+ if (name) {
109
+ this.addTag(name);
110
+ }
111
+ });
112
+ }
113
+ generateUrl() {
114
+ if (!this.matter.url) {
115
+ //set default
116
+ let url = this.permalink_default;
117
+ //check slug first
118
+ if (this.matter.slug) {
119
+ url = this.matter.slug;
120
+ }
121
+ //check permalink second
122
+ if (this.matter.permalink) {
123
+ url = this.matter.permalink;
124
+ }
125
+ this.matter.url = this.parseUrl(url);
126
+ }
127
+ }
128
+ parseUrl(url) {
129
+ let date = DateTime.fromJSDate(this.date);
130
+ //title
131
+ let title = this._matter.title.toLowerCase().replace(/[^a-z0-9+]+/gi, " ").trim();
132
+ title = title.split(" ").join("-");
133
+ //do styles
134
+ if (url.toLowerCase().trim() === "default") {
135
+ url = this.permalink_default;
136
+ }
137
+ if (url.toLowerCase().trim() === "date") {
138
+ url = this.permalink_date;
139
+ }
140
+ if (url.toLowerCase().trim() === "ordinal") {
141
+ url = this.permalink_ordinal;
142
+ }
143
+ url = url.split(":year").join(date.toFormat("yyyy"));
144
+ url = url.split(":short_year").join(date.toFormat("yy"));
145
+ url = url.split(":month").join(date.toFormat("LL"));
146
+ url = url.split(":i_month").join(date.toFormat("L"));
147
+ url = url.split(":short_month").join(date.toFormat("LLL"));
148
+ url = url.split(":long_month").join(date.toFormat("LLLL"));
149
+ url = url.split(":day").join(date.toFormat("dd"));
150
+ url = url.split(":i_day").join(date.toFormat("d"));
151
+ url = url.split(":y_day").join(date.toFormat("o"));
152
+ url = url.split(":short_day").join(date.toFormat("ccc"));
153
+ url = url.split(":long_day").join(date.toFormat("cccc"));
154
+ url = url.split(":week").join(date.toFormat("W"));
155
+ url = url.split(":hour").join(date.toFormat("HH"));
156
+ url = url.split(":minute").join(date.toFormat("mm"));
157
+ url = url.split(":second").join(date.toFormat("ss"));
158
+ url = url.split(":title").join(title);
159
+ //url remove white spaces
160
+ url = url.split(" ").join("-");
161
+ //url remove `/`
162
+ if (url.startsWith("/")) {
163
+ url = url.substring(1);
164
+ }
165
+ return url;
166
+ }
167
+ async toObject() {
168
+ let result = {};
169
+ result.keywords = this.keywords;
170
+ result.tags = this.tags;
171
+ result.content = this.content;
172
+ result.id = this.id;
173
+ result.date = this.date;
174
+ result.title = this.title;
175
+ result.author = this.author;
176
+ result.url = this.url;
177
+ result.body = await this.getBody();
178
+ result.summary = await this.getSummary();
179
+ result.description = await this.getDescription();
180
+ result.metaData = this._matter;
181
+ result.matter = this._matter;
182
+ result.published = this.published;
183
+ return result;
184
+ }
185
+ static create(obj) {
186
+ return Object.assign(new Post(), obj);
187
+ }
188
+ }
189
+ //# sourceMappingURL=post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../src/post.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { DataService } from "../data/dataService.js";
2
+ import { Config } from "../config.js";
3
+ import { RenderProviderInterface } from "./renderProviderInterface.js";
4
+ export declare class AtomRenderProvider implements RenderProviderInterface {
5
+ log: any;
6
+ constructor();
7
+ render(data: DataService, config: Config): Promise<boolean>;
8
+ }
@@ -0,0 +1,51 @@
1
+ import { Feed } from "feed";
2
+ import { StorageService } from "../storage/storageService.js";
3
+ import { ConsoleMessage } from "../log.js";
4
+ export class AtomRenderProvider {
5
+ constructor() {
6
+ this.log = new ConsoleMessage();
7
+ }
8
+ async render(data, config) {
9
+ let result = true;
10
+ let feedConfig = {};
11
+ if (config.title) {
12
+ feedConfig.title = config.title;
13
+ }
14
+ feedConfig.generator = "Writr";
15
+ if (config.url) {
16
+ feedConfig.id = config.url + "/atom.xml";
17
+ feedConfig.link = config.url + "/atom.xml";
18
+ feedConfig.favicon = config.url + "/favicon.ico";
19
+ feedConfig.feedLinks = {
20
+ atom: config.url + "/atom.xml"
21
+ };
22
+ }
23
+ feedConfig.author = {};
24
+ if (config.authorName) {
25
+ feedConfig.author.name = config.authorName;
26
+ }
27
+ if (config.authorEmail) {
28
+ feedConfig.author.email = config.authorEmail;
29
+ }
30
+ feedConfig.copyright = new Date().getFullYear().toString() + " All Rights Reserved";
31
+ let atomFeed = new Feed(feedConfig);
32
+ //add in the posts
33
+ let posts = await data.getPostsByCount(config.indexCount);
34
+ for (let post of posts) {
35
+ let feedPost = {};
36
+ feedPost.title = post.title;
37
+ feedPost.id = config.url + "/" + post.url;
38
+ feedPost.link = config.url + "/" + post.url;
39
+ feedPost.description = await post.getDescription();
40
+ feedPost.content = await post.getBody();
41
+ feedPost.author = feedConfig.author;
42
+ feedPost.date = post.date;
43
+ feedPost.published = post.date;
44
+ atomFeed.addItem(feedPost);
45
+ }
46
+ //write the feed atom.xml
47
+ await new StorageService().set(config.output + "/atom.xml", atomFeed.atom1());
48
+ return result;
49
+ }
50
+ }
51
+ //# sourceMappingURL=atomRenderProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomRenderProvider.js","sourceRoot":"","sources":["../../src/render/atomRenderProvider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAEzC,MAAM,OAAO,kBAAkB;IAE3B;QACI,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAiB,EAAE,MAAc;QAC1C,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,IAAI,UAAU,GAAQ,EAAE,CAAC;QAEzB,IAAG,MAAM,CAAC,KAAK,EAAE;YACb,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;SACnC;QAED,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC;QAE/B,IAAG,MAAM,CAAC,GAAG,EAAE;YACX,UAAU,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC;YACzC,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC;YAC3C,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,cAAc,CAAC;YAEjD,UAAU,CAAC,SAAS,GAAG;gBACnB,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,WAAW;aACjC,CAAA;SACJ;QAED,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;QAEvB,IAAG,MAAM,CAAC,UAAU,EAAE;YAClB,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;SAC9C;QAED,IAAG,MAAM,CAAC,WAAW,EAAE;YACnB,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;SAChD;QAED,UAAU,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,sBAAsB,CAAC;QAEpF,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpC,kBAAkB;QAClB,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1D,KAAI,IAAI,IAAI,IAAI,KAAK,EAAE;YAEnB,IAAI,QAAQ,GAAQ,EAAE,CAAC;YACvB,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAC1C,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAC5C,QAAQ,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YACnD,QAAQ,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACxC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YACpC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC1B,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;YAE/B,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC9B;QAED,yBAAyB;QACzB,MAAM,IAAI,cAAc,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9E,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
@@ -0,0 +1,14 @@
1
+ import { DataService } from "../data/dataService.js";
2
+ import { Config } from "../config.js";
3
+ import { Post } from "../post.js";
4
+ import { Tag } from "../tag.js";
5
+ import { RenderProviderInterface } from "./renderProviderInterface.js";
6
+ export declare class HtmlRenderProvider implements RenderProviderInterface {
7
+ log: any;
8
+ constructor();
9
+ render(data: DataService, config: Config): Promise<boolean | undefined>;
10
+ renderHome(data: DataService, config: Config, outputPath?: string): Promise<string>;
11
+ renderTag(tag: Tag, tags: Array<Tag>, config: Config, outputPath?: string): Promise<string>;
12
+ renderPost(post: Post, tags: Array<Tag>, config: Config, previousPost?: Post, nextPost?: Post, outputPath?: string): Promise<string>;
13
+ getTemplatePath(templatesPath: string, templateName: string): Promise<string>;
14
+ }
@@ -0,0 +1,117 @@
1
+ import fs from "fs-extra";
2
+ import { Ecto } from "ecto";
3
+ import { ConsoleMessage } from "../log.js";
4
+ import moment from 'moment';
5
+ const ecto = new Ecto({ defaultEngine: "handlebars" });
6
+ export class HtmlRenderProvider {
7
+ constructor() {
8
+ this.log = new ConsoleMessage();
9
+ ecto.handlebars.opts = { allowProtoPropertiesByDefault: true };
10
+ ecto.handlebars.engine.registerHelper('formatDate', (date, format, utc) => (utc === true) ?
11
+ moment(date).utc().format(format) : moment(date).format(format));
12
+ }
13
+ async render(data, config) {
14
+ let result = true;
15
+ let output = config.output;
16
+ let posts = await data.getPublishedPosts();
17
+ let unpublishedPosts = await data.getPosts();
18
+ let tags = await data.getPublishedTags();
19
+ let unpublishedTags = await data.getTags();
20
+ //posts
21
+ let previousPost;
22
+ let nextPost;
23
+ //published posts
24
+ for (const post of posts) {
25
+ const index = posts.indexOf(post);
26
+ if (index === 0) {
27
+ previousPost = posts[posts.length - 1];
28
+ }
29
+ else {
30
+ previousPost = posts[index - 1];
31
+ }
32
+ if (index === posts.length - 1) {
33
+ nextPost = posts[0];
34
+ }
35
+ else {
36
+ nextPost = posts[index + 1];
37
+ }
38
+ let postPath = output + "/" + post.id + "/index.html";
39
+ await this.renderPost(post, tags, config, previousPost, nextPost, postPath);
40
+ }
41
+ //unpublished posts
42
+ for (const post of unpublishedPosts) {
43
+ const index = unpublishedPosts.indexOf(post);
44
+ if (index === 0) {
45
+ previousPost = posts[posts.length - 1];
46
+ }
47
+ else {
48
+ previousPost = posts[index - 1];
49
+ }
50
+ if (index === posts.length - 1) {
51
+ nextPost = posts[0];
52
+ }
53
+ else {
54
+ nextPost = posts[index + 1];
55
+ }
56
+ if (post.published === false) {
57
+ let postPath = output + "/" + post.id + "/index.html";
58
+ await this.renderPost(post, unpublishedTags, config, previousPost, nextPost, postPath);
59
+ }
60
+ }
61
+ //tags
62
+ for (const tag of tags) {
63
+ let tagOutputPath = output + "/tags/" + tag.id + "/index.html";
64
+ await this.renderTag(tag, tags, config, tagOutputPath);
65
+ }
66
+ //home
67
+ await this.renderHome(data, config, output + "/index.html");
68
+ return result;
69
+ }
70
+ //render
71
+ async renderHome(data, config, outputPath) {
72
+ let postList = await data.getPublishedPostsByCount(config.indexCount);
73
+ let tagList = await data.getPublishedTags();
74
+ let dataObject = { tags: tagList, posts: postList };
75
+ let rootTemplatePath = config.path + "/templates/";
76
+ let templateName = await this.getTemplatePath(config.path + "/templates", "index");
77
+ let homeTemplatePath = rootTemplatePath + templateName;
78
+ return await ecto.renderFromFile(homeTemplatePath, dataObject, rootTemplatePath, outputPath);
79
+ }
80
+ async renderTag(tag, tags, config, outputPath) {
81
+ let result = "";
82
+ if (tag) {
83
+ let dataObject = { tag: tag, tags: tags };
84
+ let rootTemplatePath = config.path + "/templates/";
85
+ let templateName = await this.getTemplatePath(config.path + "/templates", "tag");
86
+ let templatePath = rootTemplatePath + templateName;
87
+ result = await ecto.renderFromFile(templatePath, dataObject, rootTemplatePath, outputPath);
88
+ }
89
+ return result;
90
+ }
91
+ async renderPost(post, tags, config, previousPost, nextPost, outputPath) {
92
+ let result = "";
93
+ if (post) {
94
+ let dataObject = { post: await post.toObject(), previousPost: previousPost, nextPost: nextPost, tags: tags };
95
+ let rootTemplatePath = config.path + "/templates/";
96
+ let templateID = "post";
97
+ if (post.matter.layout) {
98
+ templateID = post.matter.layout;
99
+ }
100
+ let templateName = await this.getTemplatePath(config.path + "/templates", templateID);
101
+ let templatePath = rootTemplatePath + templateName;
102
+ result = await ecto.renderFromFile(templatePath, dataObject, rootTemplatePath, outputPath);
103
+ }
104
+ return result;
105
+ }
106
+ async getTemplatePath(templatesPath, templateName) {
107
+ let result = "";
108
+ let templates = await fs.readdir(templatesPath);
109
+ templates.forEach((file) => {
110
+ if (file.split(".")[0].toLowerCase() === templateName.toLowerCase()) {
111
+ result = file;
112
+ }
113
+ });
114
+ return result;
115
+ }
116
+ }
117
+ //# sourceMappingURL=htmRenderlProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmRenderlProvider.js","sourceRoot":"","sources":["../../src/render/htmRenderlProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { DataService } from "../data/dataService.js";
2
+ import { Config } from "../config.js";
3
+ import { RenderProviderInterface } from "./renderProviderInterface.js";
4
+ export declare class ImageRenderProvider implements RenderProviderInterface {
5
+ log: any;
6
+ constructor();
7
+ render(data: DataService, config: Config): Promise<boolean | undefined>;
8
+ }
@@ -0,0 +1,15 @@
1
+ import { StorageService } from "../storage/storageService.js";
2
+ import { ConsoleMessage } from "../log.js";
3
+ export class ImageRenderProvider {
4
+ constructor() {
5
+ this.log = new ConsoleMessage();
6
+ }
7
+ async render(data, config) {
8
+ let result = true;
9
+ let output = config.output;
10
+ //images
11
+ await new StorageService().copy(config.path + "/images", output + "/images");
12
+ return result;
13
+ }
14
+ }
15
+ //# sourceMappingURL=imageRenderProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageRenderProvider.js","sourceRoot":"","sources":["../../src/render/imageRenderProvider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAEzC,MAAM,OAAO,mBAAmB;IAG5B;QACI,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAiB,EAAE,MAAc;QAC1C,IAAI,MAAM,GAAa,IAAI,CAAC;QAE5B,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE3B,QAAQ;QACR,MAAM,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS,EAAG,MAAM,GAAG,SAAS,CAAC,CAAC;QAE9E,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
@@ -0,0 +1,8 @@
1
+ import { RenderProviderInterface } from "./renderProviderInterface.js";
2
+ import { DataService } from "../data/dataService.js";
3
+ import { Config } from "../config.js";
4
+ export declare class JSONRenderProvider implements RenderProviderInterface {
5
+ log: any;
6
+ constructor();
7
+ render(data: DataService, config: Config): Promise<boolean | undefined>;
8
+ }
@@ -0,0 +1,24 @@
1
+ import { StorageService } from "../storage/storageService.js";
2
+ import { ConsoleMessage } from "../log.js";
3
+ export class JSONRenderProvider {
4
+ constructor() {
5
+ this.log = new ConsoleMessage();
6
+ }
7
+ async render(data, config) {
8
+ let obj = {};
9
+ obj.posts = new Array();
10
+ obj.tags = new Array();
11
+ let posts = await data.getPosts();
12
+ let tags = await data.getTags();
13
+ for (let post of posts) {
14
+ let postObj = await post.toObject();
15
+ obj.posts.push(postObj);
16
+ }
17
+ for (let tag of tags) {
18
+ obj.tags.push(await tag.toObject());
19
+ }
20
+ await new StorageService().set(config.output + "/data.json", JSON.stringify(obj));
21
+ return true;
22
+ }
23
+ }
24
+ //# sourceMappingURL=jsonRenderProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonRenderProvider.js","sourceRoot":"","sources":["../../src/render/jsonRenderProvider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAEzC,MAAM,OAAO,kBAAkB;IAG3B;QACI,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAiB,EAAE,MAAc;QAC1C,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,EAAQ,CAAC;QAC9B,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,EAAO,CAAC;QAE5B,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAEhC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;YACpB,IAAI,OAAO,GAAQ,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC3B;QAED,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;YAClB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SACvC;QAED,MAAM,IAAI,cAAc,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAElF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
@@ -0,0 +1,5 @@
1
+ import { DataService } from "../data/dataService.js";
2
+ import { Config } from "../config.js";
3
+ export interface RenderProviderInterface {
4
+ render(data: DataService, config: Config): Promise<Boolean | undefined>;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=renderProviderInterface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderProviderInterface.js","sourceRoot":"","sources":["../../src/render/renderProviderInterface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { SiteGenerator } from "./generator.js";
2
+ type Params = {
3
+ output: string;
4
+ port: string;
5
+ watch: boolean;
6
+ path: string;
7
+ };
8
+ export declare class Serve {
9
+ bs: any;
10
+ params: Params;
11
+ generator: SiteGenerator;
12
+ constructor(options: any);
13
+ buildAndReload(): Promise<void>;
14
+ run(): void;
15
+ }
16
+ export {};
package/dist/serve.js ADDED
@@ -0,0 +1,29 @@
1
+ import browserSync from 'browser-sync';
2
+ import { SiteGenerator } from "./generator.js";
3
+ export class Serve {
4
+ constructor(options) {
5
+ this.bs = browserSync.create();
6
+ this.params = options.opts();
7
+ this.generator = new SiteGenerator(options);
8
+ }
9
+ async buildAndReload() {
10
+ await this.generator.run();
11
+ this.bs.reload();
12
+ }
13
+ run() {
14
+ const { output, port, watch, path } = this.params;
15
+ const baseDir = `${process.cwd()}/${output}`;
16
+ if (watch) {
17
+ this.bs.watch(`${process.cwd()}/${path}/*.md`, async () => await this.buildAndReload());
18
+ }
19
+ this.bs.init({
20
+ server: {
21
+ baseDir,
22
+ },
23
+ ui: false,
24
+ logPrefix: "Writr",
25
+ port: parseInt(port),
26
+ });
27
+ }
28
+ }
29
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAS7C,MAAM,OAAO,KAAK;IAMjB,YAAY,OAAY;QACvB,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,cAAc;QACnB,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,GAAG;QACF,MAAM,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAChD,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;QAE7C,IAAG,KAAK,EAAE;YACT,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;SACxF;QAED,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE;gBACP,OAAO;aACP;YACD,EAAE,EAAE,KAAK;YACT,SAAS,EAAE,OAAO;YAClB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;SACpB,CAAC,CAAC;IACJ,CAAC;CAED"}
@@ -0,0 +1,10 @@
1
+ import { StorageProviderInterface } from "./storageProviderInterface.js";
2
+ export declare class FileStorageProvider implements StorageProviderInterface {
3
+ get(path: string): Promise<string | undefined>;
4
+ set(path?: string, data?: string): Promise<boolean>;
5
+ delete(path: string): Promise<boolean>;
6
+ copy(src: string, dest: string): Promise<boolean>;
7
+ exists(path: string): Promise<boolean>;
8
+ ensureFilePath(path: string): Promise<void>;
9
+ readDir(path: string): string[];
10
+ }
@@ -0,0 +1,62 @@
1
+ import fs from "fs-extra";
2
+ import { ConsoleMessage } from "../log.js";
3
+ export class FileStorageProvider {
4
+ async get(path) {
5
+ let result;
6
+ try {
7
+ let buffer = await fs.readFile(path);
8
+ result = buffer.toString();
9
+ }
10
+ catch (error) {
11
+ new ConsoleMessage().error(error.message);
12
+ }
13
+ return result;
14
+ }
15
+ async set(path, data) {
16
+ if (!path || !data)
17
+ return false;
18
+ await this.ensureFilePath(path);
19
+ await fs.writeFile(path, data);
20
+ return true;
21
+ }
22
+ async delete(path) {
23
+ let result = false;
24
+ try {
25
+ await fs.remove(path);
26
+ result = true;
27
+ }
28
+ catch (error) {
29
+ new ConsoleMessage().error(error.message);
30
+ }
31
+ return result;
32
+ }
33
+ async copy(src, dest) {
34
+ let result = false;
35
+ try {
36
+ await fs.ensureDir(dest);
37
+ await fs.copy(src, dest);
38
+ result = true;
39
+ }
40
+ catch (error) {
41
+ new ConsoleMessage().error(error.message);
42
+ }
43
+ return result;
44
+ }
45
+ exists(path) {
46
+ return new Promise((resolve) => {
47
+ fs.exists(path, exist => {
48
+ resolve(exist);
49
+ });
50
+ });
51
+ }
52
+ async ensureFilePath(path) {
53
+ let pathList = path.split("/");
54
+ pathList.pop();
55
+ let dir = pathList.join("/");
56
+ await fs.ensureDir(dir);
57
+ }
58
+ readDir(path) {
59
+ return fs.readdirSync(path);
60
+ }
61
+ }
62
+ //# sourceMappingURL=fileStorageProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileStorageProvider.js","sourceRoot":"","sources":["../../src/storage/fileStorageProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,OAAO,mBAAmB;IAE5B,KAAK,CAAC,GAAG,CAAC,IAAY;QAClB,IAAI,MAA0B,CAAC;QAE/B,IAAI;YACA,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;SAC9B;QAAC,OAAO,KAAU,EAAE;YACjB,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC7C;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAa,EAAE,IAAa;QAClC,IAAG,CAAC,IAAI,IAAI,CAAC,IAAI;YAAG,OAAO,KAAK,CAAC;QACjC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACrB,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI;YACA,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,MAAM,GAAG,IAAI,CAAC;SACjB;QAAC,OAAM,KAAU,EAAE;YAChB,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC7C;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAU,EAAE,IAAW;QAC9B,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI;YACA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACzB,MAAM,GAAG,IAAI,CAAC;SACjB;QAAC,OAAO,KAAU,EAAE;YACjB,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC7C;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAY;QACf,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACpC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;gBACpB,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAW;QAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,QAAQ,CAAC,GAAG,EAAE,CAAC;QAEf,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7B,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,IAAY;QAChB,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;CACJ"}
@@ -0,0 +1,8 @@
1
+ export interface StorageProviderInterface {
2
+ get(path: string): Promise<string | undefined>;
3
+ set(path: string, data: string): Promise<boolean>;
4
+ delete(path: string): Promise<boolean>;
5
+ copy(src: string, dest: string): Promise<boolean>;
6
+ exists(path: string): Promise<boolean>;
7
+ readDir(path: string): string[];
8
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storageProviderInterface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageProviderInterface.js","sourceRoot":"","sources":["../../src/storage/storageProviderInterface.ts"],"names":[],"mappings":""}