writr 1.6.9 → 1.8.0

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 (69) hide show
  1. package/bin/writr +7 -3
  2. package/init/article-complex.md +40 -0
  3. package/init/article-ejs.md +40 -0
  4. package/init/article-unpublished.md +11 -0
  5. package/init/article1-simple.md +13 -0
  6. package/init/article1.md +11 -0
  7. package/init/article2.md +14 -0
  8. package/init/big-content.md +11 -0
  9. package/init/config.json +9 -0
  10. package/init/images/Introducing Docula 1.png +0 -0
  11. package/init/images/Introducing Docula 2.jpeg +0 -0
  12. package/init/images/Introducing Docula 3.png +0 -0
  13. package/init/images/Introducing Docula 4.png +0 -0
  14. package/init/permalink-test.md +13 -0
  15. package/init/templates/index.hjs +13 -0
  16. package/init/templates/partials/header.hjs +2 -0
  17. package/init/templates/post.hjs +19 -0
  18. package/init/templates/post2.hjs +17 -0
  19. package/init/templates/post3.ejs +7 -0
  20. package/init/templates/tag.hjs +9 -0
  21. package/package.json +23 -18
  22. package/dist/cache.d.ts +0 -18
  23. package/dist/cache.js +0 -76
  24. package/dist/cache.js.map +0 -1
  25. package/dist/config.d.ts +0 -26
  26. package/dist/config.js +0 -105
  27. package/dist/config.js.map +0 -1
  28. package/dist/data/dataProviderInterface.d.ts +0 -12
  29. package/dist/data/dataProviderInterface.js +0 -3
  30. package/dist/data/dataProviderInterface.js.map +0 -1
  31. package/dist/data/dataService.d.ts +0 -19
  32. package/dist/data/dataService.js +0 -139
  33. package/dist/data/dataService.js.map +0 -1
  34. package/dist/data/fileDataProvider.d.ts +0 -20
  35. package/dist/data/fileDataProvider.js +0 -134
  36. package/dist/data/fileDataProvider.js.map +0 -1
  37. package/dist/index.d.ts +0 -11
  38. package/dist/index.js +0 -69
  39. package/dist/index.js.map +0 -1
  40. package/dist/post.d.ts +0 -31
  41. package/dist/post.js +0 -195
  42. package/dist/post.js.map +0 -1
  43. package/dist/render/atomRenderProvider.d.ts +0 -8
  44. package/dist/render/atomRenderProvider.js +0 -55
  45. package/dist/render/atomRenderProvider.js.map +0 -1
  46. package/dist/render/htmRenderlProvider.d.ts +0 -14
  47. package/dist/render/htmRenderlProvider.js +0 -119
  48. package/dist/render/htmRenderlProvider.js.map +0 -1
  49. package/dist/render/imageRenderProvider.d.ts +0 -8
  50. package/dist/render/imageRenderProvider.js +0 -19
  51. package/dist/render/imageRenderProvider.js.map +0 -1
  52. package/dist/render/jsonRenderProvider.d.ts +0 -8
  53. package/dist/render/jsonRenderProvider.js +0 -30
  54. package/dist/render/jsonRenderProvider.js.map +0 -1
  55. package/dist/render/renderProviderInterface.d.ts +0 -5
  56. package/dist/render/renderProviderInterface.js +0 -3
  57. package/dist/render/renderProviderInterface.js.map +0 -1
  58. package/dist/storage/fileStorageProvider.d.ts +0 -11
  59. package/dist/storage/fileStorageProvider.js +0 -76
  60. package/dist/storage/fileStorageProvider.js.map +0 -1
  61. package/dist/storage/storageProviderInterface.d.ts +0 -7
  62. package/dist/storage/storageProviderInterface.js +0 -3
  63. package/dist/storage/storageProviderInterface.js.map +0 -1
  64. package/dist/storage/storageService.d.ts +0 -13
  65. package/dist/storage/storageService.js +0 -30
  66. package/dist/storage/storageService.js.map +0 -1
  67. package/dist/tag.d.ts +0 -9
  68. package/dist/tag.js +0 -39
  69. package/dist/tag.js.map +0 -1
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AtomRenderProvider = void 0;
4
- const winston_1 = require("winston");
5
- const feed_1 = require("feed");
6
- const storageService_1 = require("../storage/storageService");
7
- class AtomRenderProvider {
8
- constructor() {
9
- this.log = (0, winston_1.createLogger)({ transports: [new winston_1.transports.Console()] });
10
- }
11
- async render(data, config) {
12
- let result = true;
13
- let feedConfig = {};
14
- if (config.title) {
15
- feedConfig.title = config.title;
16
- }
17
- feedConfig.generator = "Writr";
18
- if (config.url) {
19
- feedConfig.id = config.url + "/atom.xml";
20
- feedConfig.link = config.url + "/atom.xml";
21
- feedConfig.favicon = config.url + "/favicon.ico";
22
- feedConfig.feedLinks = {
23
- atom: config.url + "/atom.xml"
24
- };
25
- }
26
- feedConfig.author = {};
27
- if (config.authorName) {
28
- feedConfig.author.name = config.authorName;
29
- }
30
- if (config.authorEmail) {
31
- feedConfig.author.email = config.authorEmail;
32
- }
33
- feedConfig.copyright = new Date().getFullYear().toString() + " All Rights Reserved";
34
- let atomFeed = new feed_1.Feed(feedConfig);
35
- //add in the posts
36
- let posts = await data.getPostsByCount(config.indexCount);
37
- for (let post of posts) {
38
- let feedPost = {};
39
- feedPost.title = post.title;
40
- feedPost.id = config.url + "/" + post.url;
41
- feedPost.link = config.url + "/" + post.url;
42
- feedPost.description = await post.getDescription();
43
- feedPost.content = await post.getBody();
44
- feedPost.author = feedConfig.author;
45
- feedPost.date = post.date;
46
- feedPost.published = post.date;
47
- atomFeed.addItem(feedPost);
48
- }
49
- //write the feed atom.xml
50
- await new storageService_1.StorageService(config).set(config.output + "/atom.xml", atomFeed.atom1());
51
- return result;
52
- }
53
- }
54
- exports.AtomRenderProvider = AtomRenderProvider;
55
- //# sourceMappingURL=atomRenderProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"atomRenderProvider.js","sourceRoot":"","sources":["../../src/render/atomRenderProvider.ts"],"names":[],"mappings":";;;AAAA,qCAAmD;AAInD,+BAA4B;AAC5B,8DAA2D;AAE3D,MAAa,kBAAkB;IAE3B;QACI,IAAI,CAAC,GAAG,GAAG,IAAA,sBAAY,EAAC,EAAE,UAAU,EAAE,CAAC,IAAI,oBAAU,CAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC;IACvE,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,WAAI,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,+BAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAEpF,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAhED,gDAgEC"}
@@ -1,14 +0,0 @@
1
- import { DataService } from "../data/dataService";
2
- import { Config } from "../config";
3
- import { Post } from "../post";
4
- import { Tag } from "../tag";
5
- import { RenderProviderInterface } from "./renderProviderInterface";
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
- }
@@ -1,119 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HtmlRenderProvider = void 0;
4
- const winston_1 = require("winston");
5
- const ecto_1 = require("ecto");
6
- const fs = require("fs-extra");
7
- const ecto = new ecto_1.Ecto({ defaultEngine: "handlebars" });
8
- class HtmlRenderProvider {
9
- constructor() {
10
- this.log = (0, winston_1.createLogger)({ transports: [new winston_1.transports.Console()] });
11
- ecto.handlebars.opts = { allowProtoPropertiesByDefault: true };
12
- ecto.handlebars.engine.registerHelper('formatDate', require('helper-date'));
13
- }
14
- async render(data, config) {
15
- let result = true;
16
- let output = config.output;
17
- let posts = await data.getPublishedPosts();
18
- let unpublishedPosts = await data.getPosts();
19
- let tags = await data.getPublishedTags();
20
- let unpublishedTags = await data.getTags();
21
- //posts
22
- let previousPost;
23
- let nextPost;
24
- //published posts
25
- posts.forEach(async (post, index) => {
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
- unpublishedPosts.forEach(async (post, index) => {
43
- if (index === 0) {
44
- previousPost = posts[posts.length - 1];
45
- }
46
- else {
47
- previousPost = posts[index - 1];
48
- }
49
- if (index === posts.length - 1) {
50
- nextPost = posts[0];
51
- }
52
- else {
53
- nextPost = posts[index + 1];
54
- }
55
- if (post.published === false) {
56
- let postPath = output + "/" + post.id + "/index.html";
57
- await this.renderPost(post, unpublishedTags, config, previousPost, nextPost, postPath);
58
- }
59
- });
60
- //tags
61
- tags.forEach(async (tag) => {
62
- let tagOutputPath = output + "/tags/" + tag.id + "/index.html";
63
- await this.renderTag(tag, tags, config, tagOutputPath);
64
- });
65
- //home
66
- await this.renderHome(data, config, output + "/index.html");
67
- return result;
68
- }
69
- //render
70
- async renderHome(data, config, outputPath) {
71
- let result = "";
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
- result = await ecto.renderFromFile(homeTemplatePath, dataObject, rootTemplatePath, outputPath);
79
- return result;
80
- }
81
- async renderTag(tag, tags, config, outputPath) {
82
- let result = "";
83
- if (tag) {
84
- let dataObject = { tag: tag, tags: tags };
85
- let rootTemplatePath = config.path + "/templates/";
86
- let templateName = await this.getTemplatePath(config.path + "/templates", "tag");
87
- let templatePath = rootTemplatePath + templateName;
88
- result = await ecto.renderFromFile(templatePath, dataObject, rootTemplatePath, outputPath);
89
- }
90
- return result;
91
- }
92
- async renderPost(post, tags, config, previousPost, nextPost, outputPath) {
93
- let result = "";
94
- if (post) {
95
- let dataObject = { post: await post.toObject(), previousPost: previousPost, nextPost: nextPost, tags: tags };
96
- let rootTemplatePath = config.path + "/templates/";
97
- let templateID = "post";
98
- if (post.matter.layout) {
99
- templateID = post.matter.layout;
100
- }
101
- let templateName = await this.getTemplatePath(config.path + "/templates", templateID);
102
- let templatePath = rootTemplatePath + templateName;
103
- result = await ecto.renderFromFile(templatePath, dataObject, rootTemplatePath, outputPath);
104
- }
105
- return result;
106
- }
107
- async getTemplatePath(templatesPath, templateName) {
108
- let result = "";
109
- let templates = await fs.readdir(templatesPath);
110
- templates.forEach((file) => {
111
- if (file.split(".")[0].toLowerCase() === templateName.toLowerCase()) {
112
- result = file;
113
- }
114
- });
115
- return result;
116
- }
117
- }
118
- exports.HtmlRenderProvider = HtmlRenderProvider;
119
- //# sourceMappingURL=htmRenderlProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"htmRenderlProvider.js","sourceRoot":"","sources":["../../src/render/htmRenderlProvider.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { DataService } from "../data/dataService";
2
- import { Config } from "../config";
3
- import { RenderProviderInterface } from "./renderProviderInterface";
4
- export declare class ImageRenderProvider implements RenderProviderInterface {
5
- log: any;
6
- constructor();
7
- render(data: DataService, config: Config): Promise<boolean | undefined>;
8
- }
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImageRenderProvider = void 0;
4
- const winston_1 = require("winston");
5
- const storageService_1 = require("../storage/storageService");
6
- class ImageRenderProvider {
7
- constructor() {
8
- this.log = (0, winston_1.createLogger)({ transports: [new winston_1.transports.Console()] });
9
- }
10
- async render(data, config) {
11
- let result = true;
12
- let output = config.output;
13
- //images
14
- await new storageService_1.StorageService(config).copy(config.path + "/images", output + "/images");
15
- return result;
16
- }
17
- }
18
- exports.ImageRenderProvider = ImageRenderProvider;
19
- //# sourceMappingURL=imageRenderProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"imageRenderProvider.js","sourceRoot":"","sources":["../../src/render/imageRenderProvider.ts"],"names":[],"mappings":";;;AAAA,qCAAmD;AAInD,8DAA2D;AAE3D,MAAa,mBAAmB;IAG5B;QACI,IAAI,CAAC,GAAG,GAAG,IAAA,sBAAY,EAAC,EAAE,UAAU,EAAE,CAAC,IAAI,oBAAU,CAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC;IACvE,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,+BAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS,EAAG,MAAM,GAAG,SAAS,CAAC,CAAC;QAEpF,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAjBD,kDAiBC"}
@@ -1,8 +0,0 @@
1
- import { RenderProviderInterface } from "./renderProviderInterface";
2
- import { DataService } from "../data/dataService";
3
- import { Config } from "../config";
4
- export declare class JSONRenderProvider implements RenderProviderInterface {
5
- log: any;
6
- constructor();
7
- render(data: DataService, config: Config): Promise<boolean | undefined>;
8
- }
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JSONRenderProvider = void 0;
4
- const winston_1 = require("winston");
5
- const storageService_1 = require("../storage/storageService");
6
- class JSONRenderProvider {
7
- constructor() {
8
- this.log = (0, winston_1.createLogger)({ transports: [new winston_1.transports.Console()] });
9
- }
10
- async render(data, config) {
11
- let result = false;
12
- let obj = {};
13
- obj.posts = new Array();
14
- obj.tags = new Array();
15
- let posts = await data.getPosts();
16
- let tags = await data.getTags();
17
- for (let post of posts) {
18
- let postObj = await post.toObject();
19
- obj.posts.push(postObj);
20
- }
21
- for (let tag of tags) {
22
- obj.tags.push(await tag.toObject());
23
- }
24
- await new storageService_1.StorageService(config).set(config.output + "/data.json", JSON.stringify(obj));
25
- result = true;
26
- return result;
27
- }
28
- }
29
- exports.JSONRenderProvider = JSONRenderProvider;
30
- //# sourceMappingURL=jsonRenderProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsonRenderProvider.js","sourceRoot":"","sources":["../../src/render/jsonRenderProvider.ts"],"names":[],"mappings":";;;AAGA,qCAAmD;AAGnD,8DAA2D;AAE3D,MAAa,kBAAkB;IAG3B;QACI,IAAI,CAAC,GAAG,GAAG,IAAA,sBAAY,EAAC,EAAE,UAAU,EAAE,CAAC,IAAI,oBAAU,CAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAiB,EAAE,MAAc;QAC1C,IAAI,MAAM,GAAY,KAAK,CAAC;QAE5B,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,+BAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAExF,MAAM,GAAG,IAAI,CAAC;QAEd,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAhCD,gDAgCC"}
@@ -1,5 +0,0 @@
1
- import { DataService } from "../data/dataService";
2
- import { Config } from "../config";
3
- export interface RenderProviderInterface {
4
- render(data: DataService, config: Config): Promise<Boolean | undefined>;
5
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=renderProviderInterface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderProviderInterface.js","sourceRoot":"","sources":["../../src/render/renderProviderInterface.ts"],"names":[],"mappings":""}
@@ -1,11 +0,0 @@
1
- import { StorageProviderInterface } from "../storage/storageProviderInterface";
2
- export declare class FileStorageProvider implements StorageProviderInterface {
3
- log: any;
4
- constructor();
5
- get(path: string): Promise<string | undefined>;
6
- set(path?: string, data?: string): Promise<boolean>;
7
- delete(path: string): Promise<boolean>;
8
- copy(src: string, dest: string): Promise<boolean>;
9
- exists(path: string): Promise<boolean>;
10
- ensureFilePath(path: string): Promise<void>;
11
- }
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FileStorageProvider = void 0;
4
- const fs = require("fs-extra");
5
- const winston_1 = require("winston");
6
- class FileStorageProvider {
7
- constructor() {
8
- this.log = (0, winston_1.createLogger)({ transports: [new winston_1.transports.Console()] });
9
- }
10
- async get(path) {
11
- let result;
12
- try {
13
- let buffer = await fs.readFile(path);
14
- result = buffer.toString();
15
- }
16
- catch (error) {
17
- this.log.error(error);
18
- }
19
- return result;
20
- }
21
- async set(path, data) {
22
- let result = false;
23
- if (path !== undefined && data !== undefined && path !== "" && data !== "") {
24
- try {
25
- await this.ensureFilePath(path);
26
- await fs.writeFile(path, data);
27
- result = true;
28
- }
29
- catch (error) {
30
- /* istanbul ignore next */
31
- this.log.error(error);
32
- }
33
- }
34
- return result;
35
- }
36
- async delete(path) {
37
- let result = false;
38
- try {
39
- await fs.remove(path);
40
- result = true;
41
- }
42
- catch (error) {
43
- /* istanbul ignore next */
44
- this.log.error(error);
45
- }
46
- return result;
47
- }
48
- async copy(src, dest) {
49
- let result = false;
50
- try {
51
- await fs.ensureDir(dest);
52
- await fs.copy(src, dest);
53
- result = true;
54
- }
55
- catch (error) {
56
- /* istanbul ignore next */
57
- this.log.error(error);
58
- }
59
- return result;
60
- }
61
- exists(path) {
62
- return new Promise((resolve) => {
63
- fs.exists(path, exist => {
64
- resolve(exist);
65
- });
66
- });
67
- }
68
- async ensureFilePath(path) {
69
- let pathList = path.split("/");
70
- pathList.pop();
71
- let dir = pathList.join("/");
72
- await fs.ensureDir(dir);
73
- }
74
- }
75
- exports.FileStorageProvider = FileStorageProvider;
76
- //# sourceMappingURL=fileStorageProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fileStorageProvider.js","sourceRoot":"","sources":["../../src/storage/fileStorageProvider.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAG/B,qCAAmD;AAEnD,MAAa,mBAAmB;IAI5B;QACI,IAAI,CAAC,GAAG,GAAG,IAAA,sBAAY,EAAC,EAAE,UAAU,EAAE,CAAC,IAAI,oBAAU,CAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC;IACvE,CAAC;IAED,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,KAAK,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACzB;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAa,EAAE,IAAa;QAClC,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;YACxE,IAAI;gBACA,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC/B,MAAM,GAAG,IAAI,CAAC;aACjB;YAAC,OAAO,KAAK,EAAE;gBACZ,0BAA0B;gBAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACzB;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,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,KAAK,EAAE;YACX,0BAA0B;YAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACzB;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,KAAK,EAAE;YACZ,0BAA0B;YAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACzB;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;CACJ;AAnFD,kDAmFC"}
@@ -1,7 +0,0 @@
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
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=storageProviderInterface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storageProviderInterface.js","sourceRoot":"","sources":["../../src/storage/storageProviderInterface.ts"],"names":[],"mappings":""}
@@ -1,13 +0,0 @@
1
- import { StorageProviderInterface } from "../storage/storageProviderInterface";
2
- import { Config } from "../config";
3
- export declare class StorageService implements StorageProviderInterface {
4
- config: Config;
5
- provider: StorageProviderInterface;
6
- constructor(config: Config);
7
- get(path: string): Promise<string | undefined>;
8
- set(path: string, data: string): Promise<boolean>;
9
- delete(path: string): Promise<boolean>;
10
- exists(path: string): Promise<boolean>;
11
- copy(src: string, dest: string): Promise<boolean>;
12
- getProvider(): StorageProviderInterface;
13
- }
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StorageService = void 0;
4
- const fileStorageProvider_1 = require("../storage/fileStorageProvider");
5
- class StorageService {
6
- constructor(config) {
7
- this.config = config;
8
- this.provider = new fileStorageProvider_1.FileStorageProvider();
9
- }
10
- async get(path) {
11
- return this.getProvider().get(path);
12
- }
13
- async set(path, data) {
14
- return this.getProvider().set(path, data);
15
- }
16
- async delete(path) {
17
- return this.getProvider().delete(path);
18
- }
19
- async exists(path) {
20
- return this.getProvider().exists(path);
21
- }
22
- async copy(src, dest) {
23
- return this.getProvider().copy(src, dest);
24
- }
25
- getProvider() {
26
- return this.provider;
27
- }
28
- }
29
- exports.StorageService = StorageService;
30
- //# sourceMappingURL=storageService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storageService.js","sourceRoot":"","sources":["../../src/storage/storageService.ts"],"names":[],"mappings":";;;AACA,wEAAqE;AAIrE,MAAa,cAAc;IAKvB,YAAY,MAAa;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,yCAAmB,EAAE,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAW;QACjB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAW,EAAE,IAAW;QAC9B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAW;QACpB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAW;QACpB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAU,EAAE,IAAW;QAC9B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,WAAW;QAEP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;CACJ;AAlCD,wCAkCC"}
package/dist/tag.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import { Post } from "./post";
2
- export declare class Tag {
3
- name: string;
4
- posts: Array<Post>;
5
- constructor(name: string);
6
- get id(): string;
7
- toObject(): Promise<any>;
8
- static create(obj: any): Tag;
9
- }
package/dist/tag.js DELETED
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Tag = void 0;
4
- const post_1 = require("./post");
5
- class Tag {
6
- constructor(name) {
7
- this.name = "";
8
- this.posts = new Array();
9
- this.name = name.trim();
10
- }
11
- get id() {
12
- let result = "";
13
- result = this.name.toLowerCase().replace(/[^a-z0-9+]+/gi, " ").trim();
14
- result = result.split(" ").join("-");
15
- return result;
16
- }
17
- async toObject() {
18
- let result = {};
19
- result.name = this.name;
20
- result.id = this.id;
21
- result.posts = [];
22
- this.posts.forEach(async (post) => {
23
- result.posts.push(await post.toObject());
24
- });
25
- return result;
26
- }
27
- static create(obj) {
28
- let result = new Tag(obj.name);
29
- if (obj.posts) {
30
- for (let i = 0; i < obj.posts.length; i++) {
31
- let p = post_1.Post.create(obj.posts[i]);
32
- result.posts.push(p);
33
- }
34
- }
35
- return result;
36
- }
37
- }
38
- exports.Tag = Tag;
39
- //# sourceMappingURL=tag.js.map
package/dist/tag.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tag.js","sourceRoot":"","sources":["../src/tag.ts"],"names":[],"mappings":";;;AAAA,iCAA8B;AAE9B,MAAa,GAAG;IAId,YAAY,IAAY;QAHxB,SAAI,GAAW,EAAE,CAAC;QAClB,UAAK,GAAgB,IAAI,KAAK,EAAQ,CAAC;QAGrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,EAAE;QACJ,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACtE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAErC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,MAAM,GAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;QAElB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAQ;QACpB,IAAI,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,GAAG,CAAC,KAAK,EAAE;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAAC,GAAG,WAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAElC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACtB;SACF;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA3CD,kBA2CC"}