writr 1.6.5 → 1.6.6
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/dist/cache.d.ts +18 -0
- package/dist/cache.js +76 -0
- package/dist/cache.js.map +1 -0
- package/dist/config.d.ts +26 -0
- package/dist/config.js +105 -0
- package/dist/config.js.map +1 -0
- package/dist/data/dataProviderInterface.d.ts +12 -0
- package/dist/data/dataProviderInterface.js +3 -0
- package/dist/data/dataProviderInterface.js.map +1 -0
- package/dist/data/dataService.d.ts +19 -0
- package/dist/data/dataService.js +139 -0
- package/dist/data/dataService.js.map +1 -0
- package/dist/data/fileDataProvider.d.ts +20 -0
- package/dist/data/fileDataProvider.js +134 -0
- package/dist/data/fileDataProvider.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/post.d.ts +31 -0
- package/dist/post.js +195 -0
- package/dist/post.js.map +1 -0
- package/dist/render/atomRenderProvider.d.ts +8 -0
- package/dist/render/atomRenderProvider.js +55 -0
- package/dist/render/atomRenderProvider.js.map +1 -0
- package/dist/render/htmRenderlProvider.d.ts +14 -0
- package/dist/render/htmRenderlProvider.js +119 -0
- package/dist/render/htmRenderlProvider.js.map +1 -0
- package/dist/render/imageRenderProvider.d.ts +8 -0
- package/dist/render/imageRenderProvider.js +19 -0
- package/dist/render/imageRenderProvider.js.map +1 -0
- package/dist/render/jsonRenderProvider.d.ts +8 -0
- package/dist/render/jsonRenderProvider.js +29 -0
- package/dist/render/jsonRenderProvider.js.map +1 -0
- package/dist/render/renderProviderInterface.d.ts +5 -0
- package/dist/render/renderProviderInterface.js +3 -0
- package/dist/render/renderProviderInterface.js.map +1 -0
- package/dist/storage/fileStorageProvider.d.ts +11 -0
- package/dist/storage/fileStorageProvider.js +76 -0
- package/dist/storage/fileStorageProvider.js.map +1 -0
- package/dist/storage/storageProviderInterface.d.ts +7 -0
- package/dist/storage/storageProviderInterface.js +3 -0
- package/dist/storage/storageProviderInterface.js.map +1 -0
- package/dist/storage/storageService.d.ts +13 -0
- package/dist/storage/storageService.js +30 -0
- package/dist/storage/storageService.js.map +1 -0
- package/dist/tag.d.ts +9 -0
- package/dist/tag.js +39 -0
- package/dist/tag.js.map +1 -0
- package/package.json +1 -1
package/dist/cache.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Config } from "./config";
|
|
2
|
+
import { Post } from "./post";
|
|
3
|
+
import { Tag } from "./tag";
|
|
4
|
+
import Keyv = require("keyv");
|
|
5
|
+
export declare class Cache {
|
|
6
|
+
cache: Keyv;
|
|
7
|
+
constructor(config: Config);
|
|
8
|
+
getPost(key: string): Promise<Post | undefined>;
|
|
9
|
+
setPost(key: string, post: Post): Promise<boolean | undefined>;
|
|
10
|
+
getPosts(key: string): Promise<Array<Post> | undefined>;
|
|
11
|
+
setPosts(key: string, posts: Array<Post>): Promise<boolean | undefined>;
|
|
12
|
+
getTag(key: string): Promise<Tag | undefined>;
|
|
13
|
+
setTag(key: string, tag: Tag): Promise<boolean | undefined>;
|
|
14
|
+
getTags(key: string): Promise<Array<Tag> | undefined>;
|
|
15
|
+
setTags(key: string, tags: Array<Tag>): Promise<boolean | undefined>;
|
|
16
|
+
clear(): Promise<void>;
|
|
17
|
+
formatName(name: string, type: string): string;
|
|
18
|
+
}
|
package/dist/cache.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Cache = void 0;
|
|
4
|
+
const config_1 = require("./config");
|
|
5
|
+
const post_1 = require("./post");
|
|
6
|
+
const tag_1 = require("./tag");
|
|
7
|
+
const Keyv = require("keyv");
|
|
8
|
+
class Cache {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
config = new config_1.Config();
|
|
11
|
+
this.cache = new Keyv({ ttl: config.cache.ttl, namespace: "data-cache" });
|
|
12
|
+
}
|
|
13
|
+
//cache
|
|
14
|
+
async getPost(key) {
|
|
15
|
+
key = this.formatName(key, "post");
|
|
16
|
+
let result = await this.cache.get(key);
|
|
17
|
+
if (result) {
|
|
18
|
+
result = post_1.Post.create(result);
|
|
19
|
+
}
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
async setPost(key, post) {
|
|
23
|
+
return await this.cache.set(this.formatName(key, "post"), post);
|
|
24
|
+
}
|
|
25
|
+
async getPosts(key) {
|
|
26
|
+
key = this.formatName(key, "post");
|
|
27
|
+
let result = await this.cache.get(key);
|
|
28
|
+
if (result) {
|
|
29
|
+
let posts = new Array();
|
|
30
|
+
for (let i = 0; i < result.length; i++) {
|
|
31
|
+
posts.push(post_1.Post.create(result[i]));
|
|
32
|
+
}
|
|
33
|
+
result = posts;
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
async setPosts(key, posts) {
|
|
38
|
+
return await this.cache.set(this.formatName(key, "post"), posts);
|
|
39
|
+
}
|
|
40
|
+
async getTag(key) {
|
|
41
|
+
key = this.formatName(key, "tag");
|
|
42
|
+
let result = await this.cache.get(key);
|
|
43
|
+
if (result) {
|
|
44
|
+
result = tag_1.Tag.create(result);
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
async setTag(key, tag) {
|
|
49
|
+
return await this.cache.set(this.formatName(key, "tag"), tag);
|
|
50
|
+
}
|
|
51
|
+
async getTags(key) {
|
|
52
|
+
key = this.formatName(key, "tag");
|
|
53
|
+
let result = await this.cache.get(key);
|
|
54
|
+
if (result) {
|
|
55
|
+
let tags = new Array();
|
|
56
|
+
for (let i = 0; i < result.length; i++) {
|
|
57
|
+
tags.push(tag_1.Tag.create(result[i]));
|
|
58
|
+
}
|
|
59
|
+
result = tags;
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
async setTags(key, tags) {
|
|
64
|
+
return await this.cache.set(this.formatName(key, "tag"), tags);
|
|
65
|
+
}
|
|
66
|
+
async clear() {
|
|
67
|
+
await this.cache.clear();
|
|
68
|
+
}
|
|
69
|
+
formatName(name, type) {
|
|
70
|
+
let result = type.trim() + "-" + name.trim();
|
|
71
|
+
result = result.toLowerCase();
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.Cache = Cache;
|
|
76
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare class Config {
|
|
2
|
+
cache: ConfigCache;
|
|
3
|
+
log: import("winston").Logger;
|
|
4
|
+
program: any;
|
|
5
|
+
provider: any;
|
|
6
|
+
render: Array<string>;
|
|
7
|
+
output: string;
|
|
8
|
+
path: string;
|
|
9
|
+
title: string;
|
|
10
|
+
url: string;
|
|
11
|
+
authorName: string;
|
|
12
|
+
authorEmail: string;
|
|
13
|
+
indexCount: number;
|
|
14
|
+
permalink: string;
|
|
15
|
+
constructor(config?: any);
|
|
16
|
+
loadPath(path: string): boolean;
|
|
17
|
+
loadConfig(filePath: string): boolean;
|
|
18
|
+
loadProgram(program: any): void;
|
|
19
|
+
parse(obj: any): void;
|
|
20
|
+
}
|
|
21
|
+
export declare class ConfigCache {
|
|
22
|
+
constructor();
|
|
23
|
+
connection: string;
|
|
24
|
+
ttl: number;
|
|
25
|
+
type: string;
|
|
26
|
+
}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigCache = exports.Config = void 0;
|
|
4
|
+
const fs = require("fs-extra");
|
|
5
|
+
const winston_1 = require("winston");
|
|
6
|
+
class Config {
|
|
7
|
+
constructor(config = undefined) {
|
|
8
|
+
this.cache = new ConfigCache();
|
|
9
|
+
this.log = (0, winston_1.createLogger)({ transports: [new winston_1.transports.Console()] });
|
|
10
|
+
this.program = {};
|
|
11
|
+
this.provider = {};
|
|
12
|
+
this.render = ["html", "json", "atom"];
|
|
13
|
+
this.output = "./blog_output";
|
|
14
|
+
this.path = "./blog";
|
|
15
|
+
this.title = "";
|
|
16
|
+
this.url = "";
|
|
17
|
+
this.authorName = "";
|
|
18
|
+
this.authorEmail = "";
|
|
19
|
+
this.indexCount = 20;
|
|
20
|
+
this.permalink = "simple";
|
|
21
|
+
//set default for fileProvider
|
|
22
|
+
this.provider.name = "file";
|
|
23
|
+
if (config) {
|
|
24
|
+
this.parse(config);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
loadPath(path) {
|
|
28
|
+
this.path = path;
|
|
29
|
+
return this.loadConfig(this.path + "/config.json");
|
|
30
|
+
}
|
|
31
|
+
loadConfig(filePath) {
|
|
32
|
+
let result = false;
|
|
33
|
+
if (fs.existsSync(filePath)) {
|
|
34
|
+
let buff = fs.readFileSync(filePath);
|
|
35
|
+
let obj = JSON.parse(buff.toString());
|
|
36
|
+
this.parse(obj);
|
|
37
|
+
result = true;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.log.info("the config file does not exist: " + filePath);
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
loadProgram(program) {
|
|
45
|
+
this.program = program;
|
|
46
|
+
this.parse(this.program);
|
|
47
|
+
}
|
|
48
|
+
parse(obj) {
|
|
49
|
+
if (obj) {
|
|
50
|
+
if (obj.render) {
|
|
51
|
+
if (typeof obj.render === "string") {
|
|
52
|
+
this.render = obj.render.split(",");
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this.render = obj.render;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (obj.permalink) {
|
|
59
|
+
this.permalink = obj.permalink;
|
|
60
|
+
}
|
|
61
|
+
if (obj.output) {
|
|
62
|
+
this.output = obj.output;
|
|
63
|
+
}
|
|
64
|
+
if (obj.path) {
|
|
65
|
+
this.path = obj.path;
|
|
66
|
+
}
|
|
67
|
+
if (obj.title) {
|
|
68
|
+
this.title = obj.title;
|
|
69
|
+
}
|
|
70
|
+
if (obj.url) {
|
|
71
|
+
this.url = obj.url;
|
|
72
|
+
}
|
|
73
|
+
if (obj.authorName) {
|
|
74
|
+
this.authorName = obj.authorName;
|
|
75
|
+
}
|
|
76
|
+
if (obj.authorEmail) {
|
|
77
|
+
this.authorEmail = obj.authorEmail;
|
|
78
|
+
}
|
|
79
|
+
if (obj.indexCount) {
|
|
80
|
+
this.indexCount = obj.indexCount;
|
|
81
|
+
}
|
|
82
|
+
if (obj.cache) {
|
|
83
|
+
if (obj.cache.connection) {
|
|
84
|
+
this.cache.connection = obj.cache.connection;
|
|
85
|
+
}
|
|
86
|
+
if (obj.cache.ttl) {
|
|
87
|
+
this.cache.ttl = obj.cache.ttl;
|
|
88
|
+
}
|
|
89
|
+
if (obj.cache.type) {
|
|
90
|
+
this.cache.type = obj.cache.type;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.Config = Config;
|
|
97
|
+
class ConfigCache {
|
|
98
|
+
constructor() {
|
|
99
|
+
this.connection = "";
|
|
100
|
+
this.ttl = 6000;
|
|
101
|
+
this.type = "memory";
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.ConfigCache = ConfigCache;
|
|
105
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,qCAAmD;AAEnD,MAAa,MAAM;IAejB,YAAY,SAAc,SAAS;QAdnC,UAAK,GAAgB,IAAI,WAAW,EAAE,CAAC;QACvC,QAAG,GAAG,IAAA,sBAAY,EAAC,EAAE,UAAU,EAAE,CAAC,IAAI,oBAAU,CAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC;QAC9D,YAAO,GAAQ,EAAE,CAAC;QAClB,aAAQ,GAAQ,EAAE,CAAC;QACnB,WAAM,GAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,WAAM,GAAW,eAAe,CAAC;QACjC,SAAI,GAAW,QAAQ,CAAC;QACxB,UAAK,GAAW,EAAE,CAAC;QACnB,QAAG,GAAW,EAAE,CAAC;QACjB,eAAU,GAAW,EAAE,CAAC;QACxB,gBAAW,GAAW,EAAE,CAAC;QACzB,eAAU,GAAW,EAAE,CAAC;QACxB,cAAS,GAAW,QAAQ,CAAC;QAI3B,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;QAE5B,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACpB;IACH,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;IACrD,CAAC;IAED,UAAU,CAAC,QAAgB;QACzB,IAAI,MAAM,GAAY,KAAK,CAAC;QAE5B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC3B,IAAI,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAErC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEhB,MAAM,GAAG,IAAI,CAAC;SAEf;aAAM;YACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,GAAG,QAAQ,CAAC,CAAC;SAC9D;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,OAAY;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAQ;QACZ,IAAI,GAAG,EAAE;YAEP,IAAG,GAAG,CAAC,MAAM,EAAE;gBACb,IAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE;oBACjC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBACrC;qBAAM;oBACL,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;iBAC1B;aACF;YAED,IAAG,GAAG,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;aAChC;YAED,IAAG,GAAG,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;aAC1B;YAED,IAAG,GAAG,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;aACtB;YAED,IAAG,GAAG,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;aACxB;YAED,IAAG,GAAG,CAAC,GAAG,EAAE;gBACV,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;aACpB;YAED,IAAG,GAAG,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;aAClC;YAED,IAAG,GAAG,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;aACpC;YAED,IAAG,GAAG,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;aAClC;YAED,IAAI,GAAG,CAAC,KAAK,EAAE;gBACb,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE;oBACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;iBAC9C;gBACD,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;oBACjB,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;iBAChC;gBACD,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;oBAClB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;iBAClC;aACF;SACF;IACH,CAAC;CACF;AA/GD,wBA+GC;AAED,MAAa,WAAW;IACtB;QAEA,eAAU,GAAW,EAAE,CAAC;QACxB,QAAG,GAAW,IAAI,CAAC;QACnB,SAAI,GAAW,QAAQ,CAAC;IAJR,CAAC;CAKlB;AAND,kCAMC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Config } from "../config";
|
|
2
|
+
import { Post } from "../post";
|
|
3
|
+
import { Tag } from "../tag";
|
|
4
|
+
export interface DataProviderInterface {
|
|
5
|
+
getPost(id: string): Promise<Post | undefined>;
|
|
6
|
+
getPosts(): Promise<Array<Post>>;
|
|
7
|
+
getPublishedPosts(): Promise<Array<Post>>;
|
|
8
|
+
getTag(name: string): Promise<Tag | undefined>;
|
|
9
|
+
getTags(): Promise<Array<Tag>>;
|
|
10
|
+
getPublishedTags(): Promise<Array<Tag>>;
|
|
11
|
+
init(config: Config): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataProviderInterface.js","sourceRoot":"","sources":["../../src/data/dataProviderInterface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Config } from "../config";
|
|
2
|
+
import { Post } from "../post";
|
|
3
|
+
import { Tag } from "../tag";
|
|
4
|
+
import { DataProviderInterface } from "./dataProviderInterface";
|
|
5
|
+
import { Cache } from "../cache";
|
|
6
|
+
export declare class DataService {
|
|
7
|
+
config: Config;
|
|
8
|
+
cache: Cache;
|
|
9
|
+
constructor(config: Config);
|
|
10
|
+
getPost(id: string): Promise<Post | undefined>;
|
|
11
|
+
getPosts(): Promise<Array<Post>>;
|
|
12
|
+
getPublishedPosts(): Promise<Array<Post>>;
|
|
13
|
+
getPostsByCount(count: number): Promise<Array<Post>>;
|
|
14
|
+
getPublishedPostsByCount(count: number): Promise<Array<Post>>;
|
|
15
|
+
getTag(name: string): Promise<Tag | undefined>;
|
|
16
|
+
getTags(): Promise<Array<Tag>>;
|
|
17
|
+
getPublishedTags(): Promise<Array<Tag>>;
|
|
18
|
+
getProvider(): DataProviderInterface;
|
|
19
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataService = void 0;
|
|
4
|
+
const fileDataProvider_1 = require("./fileDataProvider");
|
|
5
|
+
const cache_1 = require("../cache");
|
|
6
|
+
class DataService {
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.config = config;
|
|
9
|
+
this.cache = new cache_1.Cache(this.config);
|
|
10
|
+
}
|
|
11
|
+
//posts
|
|
12
|
+
async getPost(id) {
|
|
13
|
+
let result = undefined;
|
|
14
|
+
result = await this.cache.getPost(id);
|
|
15
|
+
if (!result) {
|
|
16
|
+
result = await this.getProvider().getPost(id);
|
|
17
|
+
if (result) {
|
|
18
|
+
await this.cache.setPost(id, result);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
async getPosts() {
|
|
24
|
+
let result = new Array();
|
|
25
|
+
let cacheKey = "get-posts";
|
|
26
|
+
let posts = await this.cache.getPosts(cacheKey);
|
|
27
|
+
if (!posts) {
|
|
28
|
+
result = await this.getProvider().getPosts();
|
|
29
|
+
//sort
|
|
30
|
+
let arraySort = require("array-sort");
|
|
31
|
+
result = new arraySort(result, "date", { reverse: true });
|
|
32
|
+
//cache
|
|
33
|
+
await this.cache.setPosts(cacheKey, result);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
result = posts;
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
async getPublishedPosts() {
|
|
41
|
+
let result = new Array();
|
|
42
|
+
let cacheKey = "get-published-posts";
|
|
43
|
+
let posts = await this.cache.getPosts(cacheKey);
|
|
44
|
+
if (!posts) {
|
|
45
|
+
result = await this.getProvider().getPublishedPosts();
|
|
46
|
+
//sort
|
|
47
|
+
let arraySort = require("array-sort");
|
|
48
|
+
result = new arraySort(result, "date", { reverse: true });
|
|
49
|
+
//cache
|
|
50
|
+
await this.cache.setPosts(cacheKey, result);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
result = posts;
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
async getPostsByCount(count) {
|
|
58
|
+
let result = await this.getPosts();
|
|
59
|
+
let list = new Array();
|
|
60
|
+
let currentCount = 0;
|
|
61
|
+
result.forEach((post) => {
|
|
62
|
+
if (currentCount < count) {
|
|
63
|
+
list.push(post);
|
|
64
|
+
currentCount++;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
result = list;
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
async getPublishedPostsByCount(count) {
|
|
71
|
+
let result = await this.getPublishedPosts();
|
|
72
|
+
let list = new Array();
|
|
73
|
+
let currentCount = 0;
|
|
74
|
+
result.forEach((post) => {
|
|
75
|
+
if (currentCount < count) {
|
|
76
|
+
list.push(post);
|
|
77
|
+
currentCount++;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
result = list;
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
//tags
|
|
84
|
+
async getTag(name) {
|
|
85
|
+
let result = undefined;
|
|
86
|
+
result = await this.cache.getTag(name);
|
|
87
|
+
if (!result) {
|
|
88
|
+
result = await this.getProvider().getTag(name);
|
|
89
|
+
if (result) {
|
|
90
|
+
await this.cache.setTag(name, result);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
async getTags() {
|
|
96
|
+
let result = new Array();
|
|
97
|
+
let cacheKey = "get-tags";
|
|
98
|
+
let tags = await this.cache.getTags(cacheKey);
|
|
99
|
+
if (!tags) {
|
|
100
|
+
result = await this.getProvider().getTags();
|
|
101
|
+
//sort
|
|
102
|
+
let arraySort = require("array-sort");
|
|
103
|
+
result = new arraySort(result, "id", { reverse: false });
|
|
104
|
+
await this.cache.setTags(cacheKey, result);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
result = tags;
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
async getPublishedTags() {
|
|
112
|
+
let result = new Array();
|
|
113
|
+
let cacheKey = "get-published-tags";
|
|
114
|
+
let tags = await this.cache.getTags(cacheKey);
|
|
115
|
+
if (!tags) {
|
|
116
|
+
result = await this.getProvider().getPublishedTags();
|
|
117
|
+
//sort
|
|
118
|
+
let arraySort = require("array-sort");
|
|
119
|
+
result = new arraySort(result, "id", { reverse: false });
|
|
120
|
+
await this.cache.setTags(cacheKey, result);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
result = tags;
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
getProvider() {
|
|
128
|
+
let result = undefined;
|
|
129
|
+
switch (this.config.provider.name) {
|
|
130
|
+
default:
|
|
131
|
+
result = new fileDataProvider_1.FileDataProvider();
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
result.init(this.config);
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.DataService = DataService;
|
|
139
|
+
//# sourceMappingURL=dataService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataService.js","sourceRoot":"","sources":["../../src/data/dataService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Post } from "../post";
|
|
2
|
+
import { Tag } from "../tag";
|
|
3
|
+
import { Config } from "../config";
|
|
4
|
+
import { DataProviderInterface } from "./dataProviderInterface";
|
|
5
|
+
export declare class FileDataProvider implements DataProviderInterface {
|
|
6
|
+
__postPath: string;
|
|
7
|
+
__posts: Array<Post>;
|
|
8
|
+
log: any;
|
|
9
|
+
constructor();
|
|
10
|
+
init(config: Config): void;
|
|
11
|
+
getPost(id: string): Promise<Post | undefined>;
|
|
12
|
+
getPosts(): Promise<Array<Post>>;
|
|
13
|
+
getPublishedPosts(): Promise<Array<Post>>;
|
|
14
|
+
getTag(name: string): Promise<Tag | undefined>;
|
|
15
|
+
getTags(): Promise<Array<Tag>>;
|
|
16
|
+
getPublishedTags(): Promise<Array<Tag>>;
|
|
17
|
+
generateTags(posts: Array<Post>): Array<Tag>;
|
|
18
|
+
formatToKey(key: string): string;
|
|
19
|
+
parsePost(filePath: string): Promise<Post | undefined>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileDataProvider = void 0;
|
|
4
|
+
const post_1 = require("../post");
|
|
5
|
+
const tag_1 = require("../tag");
|
|
6
|
+
const fs = require("fs-extra");
|
|
7
|
+
const winston_1 = require("winston");
|
|
8
|
+
const matter = require("gray-matter");
|
|
9
|
+
class FileDataProvider {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.__postPath = "";
|
|
12
|
+
this.__posts = [];
|
|
13
|
+
this.log = (0, winston_1.createLogger)({ transports: [new winston_1.transports.Console()] });
|
|
14
|
+
}
|
|
15
|
+
init(config) {
|
|
16
|
+
if (config.path) {
|
|
17
|
+
this.__postPath = config.path;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async getPost(id) {
|
|
21
|
+
let result;
|
|
22
|
+
let posts = await this.getPosts();
|
|
23
|
+
posts.forEach(post => {
|
|
24
|
+
if (post.id == this.formatToKey(id)) {
|
|
25
|
+
result = post;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
async getPosts() {
|
|
31
|
+
let result = new Array();
|
|
32
|
+
if (this.__posts.length == 0) {
|
|
33
|
+
let directory = this.__postPath;
|
|
34
|
+
if (await fs.existsSync(directory)) {
|
|
35
|
+
let files = await fs.readdirSync(directory);
|
|
36
|
+
for (let i = 0; i < files.length; i++) {
|
|
37
|
+
let file = files[i];
|
|
38
|
+
if (file.indexOf(".md") > 0) {
|
|
39
|
+
let filePath = directory + "/" + file;
|
|
40
|
+
let post = await this.parsePost(filePath);
|
|
41
|
+
if (post) {
|
|
42
|
+
this.__posts.push(post);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
result = this.__posts;
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
async getPublishedPosts() {
|
|
52
|
+
let result = new Array();
|
|
53
|
+
let posts = await this.getPosts();
|
|
54
|
+
posts.forEach((post) => {
|
|
55
|
+
if (post.published) {
|
|
56
|
+
result.push(post);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
async getTag(name) {
|
|
62
|
+
let result;
|
|
63
|
+
let tags = await this.getTags();
|
|
64
|
+
for (let i = 0; i < tags.length; i++) {
|
|
65
|
+
let tag = tags[i];
|
|
66
|
+
if (this.formatToKey(tag.name) == this.formatToKey(name)) {
|
|
67
|
+
result = tag;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
async getTags() {
|
|
73
|
+
let posts = await this.getPosts();
|
|
74
|
+
return this.generateTags(posts);
|
|
75
|
+
}
|
|
76
|
+
async getPublishedTags() {
|
|
77
|
+
let posts = await this.getPublishedPosts();
|
|
78
|
+
return this.generateTags(posts);
|
|
79
|
+
}
|
|
80
|
+
generateTags(posts) {
|
|
81
|
+
let result = new Array();
|
|
82
|
+
posts.forEach(post => {
|
|
83
|
+
post.tags.forEach(tagName => {
|
|
84
|
+
let tag = result.find(t => t.id === new tag_1.Tag(tagName).id);
|
|
85
|
+
if (tag == null) {
|
|
86
|
+
tag = new tag_1.Tag(tagName);
|
|
87
|
+
result.push(tag);
|
|
88
|
+
}
|
|
89
|
+
let postExists = tag.posts.find(p => this.formatToKey(p.title) === this.formatToKey(post.title)) != null;
|
|
90
|
+
if (!postExists) {
|
|
91
|
+
tag.posts.push(post);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
formatToKey(key) {
|
|
98
|
+
return key.toLowerCase().trim();
|
|
99
|
+
}
|
|
100
|
+
async parsePost(filePath) {
|
|
101
|
+
let result = undefined;
|
|
102
|
+
if (await fs.pathExists(filePath)) {
|
|
103
|
+
result = new post_1.Post();
|
|
104
|
+
let buff = await fs.readFile(filePath);
|
|
105
|
+
let data = buff.toString();
|
|
106
|
+
let m = matter(data);
|
|
107
|
+
let mData = m.data;
|
|
108
|
+
result.matter = m.data;
|
|
109
|
+
result.content = m.content;
|
|
110
|
+
//handle categories to tags
|
|
111
|
+
if (mData.categories) {
|
|
112
|
+
if (typeof mData.categories === 'string') {
|
|
113
|
+
result.addTags(mData.categories.toString().split(","));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
result.addTags(mData.categories);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (mData.keywords) {
|
|
120
|
+
result.keywords = mData.keywords.toString().split(",");
|
|
121
|
+
}
|
|
122
|
+
if (mData.tags) {
|
|
123
|
+
result.addTags(mData.tags.toString().split(","));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
this.log.error("The following post does not exist: " + filePath);
|
|
128
|
+
result = undefined;
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.FileDataProvider = FileDataProvider;
|
|
134
|
+
//# sourceMappingURL=fileDataProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileDataProvider.js","sourceRoot":"","sources":["../../src/data/fileDataProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { DataService } from "./data/dataService";
|
|
3
|
+
import { Config } from "./config";
|
|
4
|
+
export declare class Writr {
|
|
5
|
+
log: any;
|
|
6
|
+
config: Config | undefined;
|
|
7
|
+
data: DataService | undefined;
|
|
8
|
+
constructor();
|
|
9
|
+
parseCLI(process: NodeJS.Process): void;
|
|
10
|
+
runCLI(): Promise<boolean>;
|
|
11
|
+
}
|