writr 1.9.2 → 1.9.4
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/README.md +3 -4
- package/bin/writr.js +0 -0
- package/package.json +15 -14
- package/LICENSE +0 -21
- package/dist/cache.d.ts +0 -18
- package/dist/cache.js +0 -70
- package/dist/cache.js.map +0 -1
- package/dist/config.d.ts +0 -29
- package/dist/config.js +0 -104
- package/dist/config.js.map +0 -1
- package/dist/data/dataProviderInterface.d.ts +0 -12
- package/dist/data/dataProviderInterface.js +0 -2
- package/dist/data/dataProviderInterface.js.map +0 -1
- package/dist/data/dataService.d.ts +0 -19
- package/dist/data/dataService.js +0 -130
- package/dist/data/dataService.js.map +0 -1
- package/dist/data/fileDataProvider.d.ts +0 -20
- package/dist/data/fileDataProvider.js +0 -132
- package/dist/data/fileDataProvider.js.map +0 -1
- package/dist/generator.d.ts +0 -8
- package/dist/generator.js +0 -54
- package/dist/generator.js.map +0 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.js +0 -80
- package/dist/index.js.map +0 -1
- package/dist/log.d.ts +0 -6
- package/dist/log.js +0 -13
- package/dist/log.js.map +0 -1
- package/dist/migrate/ghostMigrationProvider.d.ts +0 -9
- package/dist/migrate/ghostMigrationProvider.js +0 -65
- package/dist/migrate/ghostMigrationProvider.js.map +0 -1
- package/dist/migrate/jekyllMigrationProvider.d.ts +0 -4
- package/dist/migrate/jekyllMigrationProvider.js +0 -11
- package/dist/migrate/jekyllMigrationProvider.js.map +0 -1
- package/dist/migrate/mediumMigrationProvider.d.ts +0 -7
- package/dist/migrate/mediumMigrationProvider.js +0 -26
- package/dist/migrate/mediumMigrationProvider.js.map +0 -1
- package/dist/migrate/migrationProviderInterface.d.ts +0 -3
- package/dist/migrate/migrationProviderInterface.js +0 -2
- package/dist/migrate/migrationProviderInterface.js.map +0 -1
- package/dist/migrate/wordpressMigrationProvider.d.ts +0 -12
- package/dist/migrate/wordpressMigrationProvider.js +0 -103
- package/dist/migrate/wordpressMigrationProvider.js.map +0 -1
- package/dist/migrate.d.ts +0 -6
- package/dist/migrate.js +0 -34
- package/dist/migrate.js.map +0 -1
- package/dist/post.d.ts +0 -31
- package/dist/post.js +0 -189
- package/dist/post.js.map +0 -1
- package/dist/render/atomRenderProvider.d.ts +0 -8
- package/dist/render/atomRenderProvider.js +0 -51
- package/dist/render/atomRenderProvider.js.map +0 -1
- package/dist/render/htmRenderlProvider.d.ts +0 -14
- package/dist/render/htmRenderlProvider.js +0 -117
- package/dist/render/htmRenderlProvider.js.map +0 -1
- package/dist/render/imageRenderProvider.d.ts +0 -8
- package/dist/render/imageRenderProvider.js +0 -15
- package/dist/render/imageRenderProvider.js.map +0 -1
- package/dist/render/jsonRenderProvider.d.ts +0 -8
- package/dist/render/jsonRenderProvider.js +0 -24
- package/dist/render/jsonRenderProvider.js.map +0 -1
- package/dist/render/renderProviderInterface.d.ts +0 -5
- package/dist/render/renderProviderInterface.js +0 -2
- package/dist/render/renderProviderInterface.js.map +0 -1
- package/dist/serve.d.ts +0 -16
- package/dist/serve.js +0 -29
- package/dist/serve.js.map +0 -1
- package/dist/storage/fileStorageProvider.d.ts +0 -10
- package/dist/storage/fileStorageProvider.js +0 -62
- package/dist/storage/fileStorageProvider.js.map +0 -1
- package/dist/storage/storageProviderInterface.d.ts +0 -8
- package/dist/storage/storageProviderInterface.js +0 -2
- package/dist/storage/storageProviderInterface.js.map +0 -1
- package/dist/storage/storageService.d.ts +0 -12
- package/dist/storage/storageService.js +0 -28
- package/dist/storage/storageService.js.map +0 -1
- package/dist/tag.d.ts +0 -9
- package/dist/tag.js +0 -34
- package/dist/tag.js.map +0 -1
- package/dist/utils/parser.d.ts +0 -5
- package/dist/utils/parser.js +0 -37
- package/dist/utils/parser.js.map +0 -1
- package/dist/utils/setup.d.ts +0 -8
- package/dist/utils/setup.js +0 -75
- package/dist/utils/setup.js.map +0 -1
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { Post } from "../post.js";
|
|
2
|
-
import { Tag } from "../tag.js";
|
|
3
|
-
import fs from "fs-extra";
|
|
4
|
-
import matter from 'gray-matter';
|
|
5
|
-
import { ConsoleMessage } from "../log.js";
|
|
6
|
-
export class FileDataProvider {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.__postPath = "";
|
|
9
|
-
this.__posts = [];
|
|
10
|
-
this.log = new ConsoleMessage();
|
|
11
|
-
}
|
|
12
|
-
init(config) {
|
|
13
|
-
if (config.path) {
|
|
14
|
-
this.__postPath = config.path;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
async getPost(id) {
|
|
18
|
-
let result;
|
|
19
|
-
let posts = await this.getPosts();
|
|
20
|
-
posts.forEach(post => {
|
|
21
|
-
if (post.id == this.formatToKey(id)) {
|
|
22
|
-
result = post;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
return result;
|
|
26
|
-
}
|
|
27
|
-
async getPosts() {
|
|
28
|
-
let result;
|
|
29
|
-
const supportedExtensions = ['.md', '.markdown'];
|
|
30
|
-
const hasExtension = (file, extensions) => {
|
|
31
|
-
return extensions.some(extension => file.toLowerCase().endsWith(extension));
|
|
32
|
-
};
|
|
33
|
-
if (this.__posts.length === 0) {
|
|
34
|
-
let directory = this.__postPath;
|
|
35
|
-
if (fs.existsSync(directory)) {
|
|
36
|
-
let files = fs.readdirSync(directory);
|
|
37
|
-
for (const file of files) {
|
|
38
|
-
if (hasExtension(file, supportedExtensions)) {
|
|
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
|
-
result = this.__posts;
|
|
48
|
-
return result;
|
|
49
|
-
}
|
|
50
|
-
async getPublishedPosts() {
|
|
51
|
-
let result = new Array();
|
|
52
|
-
let posts = await this.getPosts();
|
|
53
|
-
posts.forEach((post) => {
|
|
54
|
-
if (post.published) {
|
|
55
|
-
result.push(post);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
return result;
|
|
59
|
-
}
|
|
60
|
-
async getTag(name) {
|
|
61
|
-
let result;
|
|
62
|
-
let tags = await this.getTags();
|
|
63
|
-
for (let i = 0; i < tags.length; i++) {
|
|
64
|
-
let tag = tags[i];
|
|
65
|
-
if (this.formatToKey(tag.name) == this.formatToKey(name)) {
|
|
66
|
-
result = tag;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return result;
|
|
70
|
-
}
|
|
71
|
-
async getTags() {
|
|
72
|
-
let posts = await this.getPosts();
|
|
73
|
-
return this.generateTags(posts);
|
|
74
|
-
}
|
|
75
|
-
async getPublishedTags() {
|
|
76
|
-
let posts = await this.getPublishedPosts();
|
|
77
|
-
return this.generateTags(posts);
|
|
78
|
-
}
|
|
79
|
-
generateTags(posts) {
|
|
80
|
-
let result = new Array();
|
|
81
|
-
posts.forEach(post => {
|
|
82
|
-
post.tags.forEach(tagName => {
|
|
83
|
-
let tag = result.find(t => t.id === new Tag(tagName).id);
|
|
84
|
-
if (tag == null) {
|
|
85
|
-
tag = new Tag(tagName);
|
|
86
|
-
result.push(tag);
|
|
87
|
-
}
|
|
88
|
-
let postExists = tag.posts.find(p => this.formatToKey(p.title) === this.formatToKey(post.title)) != null;
|
|
89
|
-
if (!postExists) {
|
|
90
|
-
tag.posts.push(post);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
return result;
|
|
95
|
-
}
|
|
96
|
-
formatToKey(key) {
|
|
97
|
-
return key.toLowerCase().trim();
|
|
98
|
-
}
|
|
99
|
-
async parsePost(filePath) {
|
|
100
|
-
let result;
|
|
101
|
-
if (await fs.pathExists(filePath)) {
|
|
102
|
-
result = new Post();
|
|
103
|
-
let buff = await fs.readFile(filePath);
|
|
104
|
-
let data = buff.toString();
|
|
105
|
-
let m = matter(data);
|
|
106
|
-
let mData = m.data;
|
|
107
|
-
result.matter = m.data;
|
|
108
|
-
result.content = m.content;
|
|
109
|
-
//handle categories to tags
|
|
110
|
-
if (mData.categories) {
|
|
111
|
-
if (typeof mData.categories === 'string') {
|
|
112
|
-
result.addTags(mData.categories.toString().split(","));
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
result.addTags(mData.categories);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
if (mData.keywords) {
|
|
119
|
-
result.keywords = mData.keywords.toString().split(",");
|
|
120
|
-
}
|
|
121
|
-
if (mData.tags) {
|
|
122
|
-
result.addTags(mData.tags.toString().split(","));
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
this.log.error("The following post does not exist: " + filePath);
|
|
127
|
-
result = undefined;
|
|
128
|
-
}
|
|
129
|
-
return result;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=fileDataProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileDataProvider.js","sourceRoot":"","sources":["../../src/data/fileDataProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/generator.d.ts
DELETED
package/dist/generator.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import fs from "fs-extra";
|
|
2
|
-
import { HtmlRenderProvider } from "./render/htmRenderlProvider.js";
|
|
3
|
-
import { JSONRenderProvider } from "./render/jsonRenderProvider.js";
|
|
4
|
-
import { AtomRenderProvider } from "./render/atomRenderProvider.js";
|
|
5
|
-
import { ImageRenderProvider } from "./render/imageRenderProvider.js";
|
|
6
|
-
import { DataService } from "./data/dataService.js";
|
|
7
|
-
import { Config } from "./config.js";
|
|
8
|
-
export class SiteGenerator {
|
|
9
|
-
constructor(options) {
|
|
10
|
-
const params = options.opts();
|
|
11
|
-
this.config = new Config();
|
|
12
|
-
if (params.config) {
|
|
13
|
-
this.config.loadConfig(params.config);
|
|
14
|
-
}
|
|
15
|
-
if (params.path) {
|
|
16
|
-
this.config.loadPath(params.path);
|
|
17
|
-
}
|
|
18
|
-
if (params) {
|
|
19
|
-
this.config.loadParams(params);
|
|
20
|
-
}
|
|
21
|
-
this.config.loadProgram(options);
|
|
22
|
-
this.data = new DataService(this.config);
|
|
23
|
-
}
|
|
24
|
-
async run() {
|
|
25
|
-
let result = true;
|
|
26
|
-
if (this.data === undefined || this.config === undefined) {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
if (fs.existsSync(this.config.output)) {
|
|
30
|
-
fs.removeSync(this.config.output);
|
|
31
|
-
}
|
|
32
|
-
let render = true;
|
|
33
|
-
for (let i = 0; i < this.config.render.length; i++) {
|
|
34
|
-
let type = this.config.render[i];
|
|
35
|
-
if (type === "html") {
|
|
36
|
-
render = await new HtmlRenderProvider().render(this.data, this.config);
|
|
37
|
-
}
|
|
38
|
-
if (type === "json") {
|
|
39
|
-
render = await new JSONRenderProvider().render(this.data, this.config);
|
|
40
|
-
}
|
|
41
|
-
if (type === "atom") {
|
|
42
|
-
render = await new AtomRenderProvider().render(this.data, this.config);
|
|
43
|
-
}
|
|
44
|
-
if (type === "images") {
|
|
45
|
-
render = await new ImageRenderProvider().render(this.data, this.config);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (render) {
|
|
49
|
-
result = render;
|
|
50
|
-
}
|
|
51
|
-
return result;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=generator.js.map
|
package/dist/generator.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAC,mBAAmB,EAAC,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAEnC,MAAM,OAAO,aAAa;IAKzB,YAAY,OAAY;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAE3B,IAAI,MAAM,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACtC;QAED,IAAI,MAAM,CAAC,IAAI,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAClC;QAED,IAAI,MAAM,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;SAC9B;QAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,GAAG;QACR,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YACzD,OAAO,KAAK,CAAC;SACb;QAED,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACtC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAClC;QAED,IAAI,MAAM,GAAwB,IAAI,CAAC;QAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnD,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,KAAK,MAAM,EAAE;gBACpB,MAAM,GAAG,MAAM,IAAI,kBAAkB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACvE;YACD,IAAI,IAAI,KAAK,MAAM,EAAE;gBACpB,MAAM,GAAG,MAAM,IAAI,kBAAkB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACvE;YACD,IAAI,IAAI,KAAK,MAAM,EAAE;gBACpB,MAAM,GAAG,MAAM,IAAI,kBAAkB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACvE;YACD,IAAI,IAAI,KAAK,QAAQ,EAAE;gBACtB,MAAM,GAAG,MAAM,IAAI,mBAAmB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACxE;SACD;QAED,IAAI,MAAM,EAAE;YACX,MAAM,GAAG,MAAM,CAAC;SAChB;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CAED"}
|
package/dist/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { DataService } from "./data/dataService.js";
|
|
3
|
-
import { Config } from "./config.js";
|
|
4
|
-
export declare class Writr {
|
|
5
|
-
config: Config | undefined;
|
|
6
|
-
data: DataService | undefined;
|
|
7
|
-
parseCLI(process: NodeJS.Process): Promise<void>;
|
|
8
|
-
}
|
package/dist/index.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { createCommand } from "commander";
|
|
2
|
-
import { Setup } from "./utils/setup.js";
|
|
3
|
-
import { ConsoleMessage } from "./log.js";
|
|
4
|
-
import { Serve } from "./serve.js";
|
|
5
|
-
import { SiteGenerator } from "./generator.js";
|
|
6
|
-
import { Migrate } from "./migrate.js";
|
|
7
|
-
export class Writr {
|
|
8
|
-
async parseCLI(process) {
|
|
9
|
-
const program = createCommand();
|
|
10
|
-
program.storeOptionsAsProperties(true);
|
|
11
|
-
program
|
|
12
|
-
.command('build', { isDefault: true })
|
|
13
|
-
.description('Build the site')
|
|
14
|
-
.option("-p, --path <path>", "Path of where the blog, config, and template are located")
|
|
15
|
-
.option("-o, --output <path>", "Path of where to output the generated blog")
|
|
16
|
-
.option("-r, --render <list>", "What do you want rendered such as html or json (example --render html,json)")
|
|
17
|
-
.option("-c, --config <path>", "custom configuration path")
|
|
18
|
-
.action(async (options) => {
|
|
19
|
-
try {
|
|
20
|
-
await new SiteGenerator(options).run();
|
|
21
|
-
}
|
|
22
|
-
catch (error) {
|
|
23
|
-
new ConsoleMessage().error('Error: ' + error.message);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
program
|
|
27
|
-
.command('init')
|
|
28
|
-
.description('Initialize a new Writr project')
|
|
29
|
-
.argument('[name]', 'Name of the project', 'Blog')
|
|
30
|
-
.action(async (name) => {
|
|
31
|
-
try {
|
|
32
|
-
await new Setup(name).init();
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
new ConsoleMessage().error('Error: ' + error.message);
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
program
|
|
39
|
-
.command('new')
|
|
40
|
-
.description('Create new markdown file')
|
|
41
|
-
.action(async () => {
|
|
42
|
-
try {
|
|
43
|
-
await new Setup('new').new();
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
new ConsoleMessage().error('Error: ' + error.message);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
program
|
|
50
|
-
.command('migrate')
|
|
51
|
-
.description('Migrate from different sources to Writr')
|
|
52
|
-
.argument("<type> <options...>", "Provider type (jekyll, wordpress, etc), source and destination")
|
|
53
|
-
.action(async (options) => {
|
|
54
|
-
try {
|
|
55
|
-
const [type, src, dest] = options;
|
|
56
|
-
await new Migrate(type).migrate(src, dest);
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
new ConsoleMessage().error('Error: ' + error.message);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
program
|
|
63
|
-
.command('serve')
|
|
64
|
-
.description('Serve the site locally')
|
|
65
|
-
.option("-o, --output <path>", "Path of where to output the generated blog be served", 'blog_output')
|
|
66
|
-
.option("-p, --port <port>", "Port to serve the site on", '3000')
|
|
67
|
-
.option("--path <path>", "Path of where the blog, config, and template are located", './blog')
|
|
68
|
-
.option("-w, --watch", "Watch for changes and rebuild", false)
|
|
69
|
-
.action(async (options) => {
|
|
70
|
-
try {
|
|
71
|
-
await new Serve(options).run();
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
new ConsoleMessage().error('Error: ' + error.message);
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
program.parse(process.argv);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/log.d.ts
DELETED
package/dist/log.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { createLogger, transports } from "winston";
|
|
2
|
-
export class ConsoleMessage {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.log = createLogger({ transports: [new transports.Console()] });
|
|
5
|
-
}
|
|
6
|
-
info(message) {
|
|
7
|
-
this.log.info(message);
|
|
8
|
-
}
|
|
9
|
-
error(message) {
|
|
10
|
-
this.log.error(message);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=log.js.map
|
package/dist/log.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AAEjD,MAAM,OAAO,cAAc;IAG1B;QACC,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,OAAe;QACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAe;QACpB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;CAED"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { MigrationProviderInterface } from "./migrationProviderInterface.js";
|
|
2
|
-
export declare class GhostMigrationProvider implements MigrationProviderInterface {
|
|
3
|
-
parser: any;
|
|
4
|
-
storage: any;
|
|
5
|
-
constructor();
|
|
6
|
-
fetchPosts(src: string): Promise<Record<string, any>[]>;
|
|
7
|
-
saveMedia(mediaFetched: any, dest: string): Promise<string>;
|
|
8
|
-
migrate(src: string, dest: string): Promise<boolean>;
|
|
9
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
import { ConsoleMessage } from "../log.js";
|
|
3
|
-
import { Parser } from "../utils/parser.js";
|
|
4
|
-
import { StorageService } from "../storage/storageService.js";
|
|
5
|
-
export class GhostMigrationProvider {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.parser = new Parser();
|
|
8
|
-
this.storage = new StorageService();
|
|
9
|
-
}
|
|
10
|
-
async fetchPosts(src) {
|
|
11
|
-
try {
|
|
12
|
-
const url = new URL(src);
|
|
13
|
-
const { searchParams, origin } = url;
|
|
14
|
-
const key = searchParams.get('key');
|
|
15
|
-
let totalPosts;
|
|
16
|
-
const { posts, meta } = (await axios.get(`${origin}/ghost/api/v2/content/posts/?key=${key}`)).data;
|
|
17
|
-
totalPosts = [...posts];
|
|
18
|
-
const { pagination: { pages } } = meta;
|
|
19
|
-
for (let i = 2; i <= pages; i++) {
|
|
20
|
-
const { posts } = (await axios.get(`${origin}/ghost/api/v2/content/posts/?key=${key}&page=${i}`)).data;
|
|
21
|
-
totalPosts = totalPosts.concat(posts);
|
|
22
|
-
}
|
|
23
|
-
return totalPosts;
|
|
24
|
-
}
|
|
25
|
-
catch (error) {
|
|
26
|
-
throw new Error(error.message);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
async saveMedia(mediaFetched, dest) {
|
|
30
|
-
const { mediaUrl, slug } = mediaFetched;
|
|
31
|
-
const response = await axios.get(mediaUrl, { responseType: 'arraybuffer' });
|
|
32
|
-
// const { rawBody: media, headers } = response;
|
|
33
|
-
const { data: media, headers } = response;
|
|
34
|
-
const mime_type = headers['content-type'];
|
|
35
|
-
const extension = mime_type.split('/')[1];
|
|
36
|
-
const filename = `${slug}.${extension}`;
|
|
37
|
-
const mediaBuffer = Buffer.from(media, 'binary').toString('base64');
|
|
38
|
-
await this.storage.set(`${dest}/images/${filename}`, mediaBuffer);
|
|
39
|
-
return `/images/${filename}`;
|
|
40
|
-
}
|
|
41
|
-
async migrate(src, dest) {
|
|
42
|
-
try {
|
|
43
|
-
new ConsoleMessage().info('Migrating from Ghost to Writr');
|
|
44
|
-
const posts = await this.fetchPosts(src);
|
|
45
|
-
for (const post of posts) {
|
|
46
|
-
const { title, slug, html, feature_image, published_at } = post;
|
|
47
|
-
// Markdown header generation
|
|
48
|
-
let mdContent = this.parser.generateMdHeaders({ title, slug, date: published_at });
|
|
49
|
-
if (feature_image) {
|
|
50
|
-
const mediaPath = await this.saveMedia({ mediaUrl: feature_image, slug }, dest);
|
|
51
|
-
mdContent += `\n\n`;
|
|
52
|
-
}
|
|
53
|
-
// Markdown html content
|
|
54
|
-
mdContent += this.parser.htmlToMd(html);
|
|
55
|
-
await this.storage.set(`${dest}/${slug}.md`, mdContent);
|
|
56
|
-
}
|
|
57
|
-
new ConsoleMessage().info("Migration was completed successfully");
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
throw new Error('Error while migrating Ghost site: ' + src);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=ghostMigrationProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ghostMigrationProvider.js","sourceRoot":"","sources":["../../src/migrate/ghostMigrationProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,sBAAsB;IAKjC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW;QAC1B,IAAG;YACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;YACrC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAI,UAAiC,CAAC;YAEtC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,oCAAoC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACnG,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAExB,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC;YAEvC,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAO,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,oCAAoC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxG,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACvC;YAED,OAAO,UAAU,CAAC;SAEnB;QAAC,OAAO,KAAU,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAChC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,YAAiB,EAAE,IAAY;QAC7C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;QACxC,MAAM,QAAQ,GAAwB,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;QACjG,gDAAgD;QAChD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,SAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACnE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC;QAClE,OAAO,WAAW,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAY;QACrC,IAAG;YACD,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;gBAEhE,6BAA6B;gBAC7B,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC;gBAEjF,IAAG,aAAa,EAAE;oBAChB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAC,EAAE,IAAI,CAAC,CAAC;oBAC/E,SAAS,IAAI,KAAK,KAAK,KAAK,SAAS,OAAO,CAAC;iBAC9C;gBAED,wBAAwB;gBACxB,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAExC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,EAAE,SAAS,CAAC,CAAC;aACzD;YACD,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,KAAU,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,GAAG,CAAC,CAAA;SAC5D;IACH,CAAC;CAEF"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { StorageService } from "../storage/storageService.js";
|
|
2
|
-
import { ConsoleMessage } from "../log.js";
|
|
3
|
-
export class JekyllMigrationProvider {
|
|
4
|
-
async migrate(src, dest) {
|
|
5
|
-
new ConsoleMessage().info("Migrating Jekyll site from " + src + " to " + dest);
|
|
6
|
-
await new StorageService().copy(src + "/_posts", dest);
|
|
7
|
-
await new StorageService().copy(src + "/images", dest + '/images');
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=jekyllMigrationProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jekyllMigrationProvider.js","sourceRoot":"","sources":["../../src/migrate/jekyllMigrationProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAEzC,MAAM,OAAO,uBAAuB;IAEhC,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAY;QACnC,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,6BAA6B,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;QAC/E,MAAM,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,EAAG,IAAI,CAAC,CAAC;QACxD,MAAM,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,EAAG,IAAI,GAAG,SAAS,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IAChB,CAAC;CAEJ"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { MigrationProviderInterface } from "./migrationProviderInterface.js";
|
|
2
|
-
export declare class MediumMigrationProvider implements MigrationProviderInterface {
|
|
3
|
-
parser: any;
|
|
4
|
-
storage: any;
|
|
5
|
-
constructor();
|
|
6
|
-
migrate(src: string, dest: string): Promise<boolean>;
|
|
7
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import fs from "fs-extra";
|
|
2
|
-
import { ConsoleMessage } from "../log.js";
|
|
3
|
-
import { StorageService } from "../storage/storageService.js";
|
|
4
|
-
import { Parser } from "../utils/parser.js";
|
|
5
|
-
export class MediumMigrationProvider {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.parser = new Parser();
|
|
8
|
-
this.storage = new StorageService();
|
|
9
|
-
}
|
|
10
|
-
async migrate(src, dest) {
|
|
11
|
-
new ConsoleMessage().info("Migrating Medium post from " + src + " to " + dest);
|
|
12
|
-
const files = new StorageService().readDir(`${src}/posts`);
|
|
13
|
-
const bodyRegex = /\<body[^>]*\>([^]*)\<\/body/m;
|
|
14
|
-
files.forEach((file) => {
|
|
15
|
-
const slug = file.replace(".html", "");
|
|
16
|
-
const html = fs.readFileSync(`${src}/posts/${file}`, "utf8");
|
|
17
|
-
const [, content] = html.match(bodyRegex) || [];
|
|
18
|
-
const headerMd = this.parser.generateMdHeaders({ slug });
|
|
19
|
-
const bodyMd = this.parser.htmlToMd(content);
|
|
20
|
-
const contentMd = headerMd + bodyMd;
|
|
21
|
-
fs.outputFileSync(`${dest}/${slug}.md`, contentMd);
|
|
22
|
-
});
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=mediumMigrationProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mediumMigrationProvider.js","sourceRoot":"","sources":["../../src/migrate/mediumMigrationProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AACzC,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAE1C,MAAM,OAAO,uBAAuB;IAKnC;QACC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAY;QACtC,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,6BAA6B,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,cAAc,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,8BAA8B,CAAC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YAC7D,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAC,IAAI,EAAC,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;YACpC,EAAE,CAAC,cAAc,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC;IACb,CAAC;CAED"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrationProviderInterface.js","sourceRoot":"","sources":["../../src/migrate/migrationProviderInterface.ts"],"names":[],"mappings":""}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { MigrationProviderInterface } from "./migrationProviderInterface.js";
|
|
2
|
-
export declare class WordpressMigrationProvider implements MigrationProviderInterface {
|
|
3
|
-
parser: any;
|
|
4
|
-
storage: any;
|
|
5
|
-
constructor();
|
|
6
|
-
fetchPosts(src: string): Promise<Record<string, any>[]>;
|
|
7
|
-
fetchMedia(src: string, id: string): Promise<any>;
|
|
8
|
-
saveMedia(mediaFetched: any, dest: string): Promise<string | null>;
|
|
9
|
-
fetchCategoriesPerPost(src: string, postId: string): Promise<Record<string, any>[]>;
|
|
10
|
-
fetchTagsPerPost(src: string, postId: string): Promise<Record<string, any>[]>;
|
|
11
|
-
migrate(src: string, dest: string): Promise<boolean>;
|
|
12
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
import { Parser } from "../utils/parser.js";
|
|
3
|
-
import { StorageService } from "../storage/storageService.js";
|
|
4
|
-
import { ConsoleMessage } from "../log.js";
|
|
5
|
-
export class WordpressMigrationProvider {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.parser = new Parser();
|
|
8
|
-
this.storage = new StorageService();
|
|
9
|
-
}
|
|
10
|
-
async fetchPosts(src) {
|
|
11
|
-
try {
|
|
12
|
-
let posts;
|
|
13
|
-
const response = await axios.get(`${src}/wp-json/wp/v2/posts?page=1`);
|
|
14
|
-
const headers = response.headers;
|
|
15
|
-
const body = typeof response.data == 'string' ? JSON.parse(response.data) : response.data;
|
|
16
|
-
const pages = headers['x-wp-totalpages'];
|
|
17
|
-
posts = [...body];
|
|
18
|
-
for (let i = 2; i <= parseInt(pages); i++) {
|
|
19
|
-
const body = (await axios.get(`${src}/wp-json/wp/v2/posts?page=${i}`)).data;
|
|
20
|
-
posts = posts.concat(body);
|
|
21
|
-
}
|
|
22
|
-
return posts;
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
throw new Error(error.message);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
async fetchMedia(src, id) {
|
|
29
|
-
try {
|
|
30
|
-
return (await axios.get(`${src}/wp-json/wp/v2/media/${id}`)).data;
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
async saveMedia(mediaFetched, dest) {
|
|
37
|
-
try {
|
|
38
|
-
if (!mediaFetched)
|
|
39
|
-
return null;
|
|
40
|
-
const { source_url, slug, mime_type } = mediaFetched;
|
|
41
|
-
const encodedURI = encodeURI(source_url);
|
|
42
|
-
const response = await axios.get(encodedURI, { responseType: 'arraybuffer' });
|
|
43
|
-
const { data: media, headers } = response;
|
|
44
|
-
const mediaBuffer = Buffer.from(media, 'binary').toString('base64');
|
|
45
|
-
const extension = mime_type.split('/')[1];
|
|
46
|
-
const filename = `${slug}.${extension}`;
|
|
47
|
-
await this.storage.set(`${dest}/images/${filename}`, mediaBuffer);
|
|
48
|
-
return `/images/${filename}`;
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
async fetchCategoriesPerPost(src, postId) {
|
|
55
|
-
try {
|
|
56
|
-
return (await axios.get(`${src}/wp-json/wp/v2/categories?post=${postId}`)).data;
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
return [];
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async fetchTagsPerPost(src, postId) {
|
|
63
|
-
try {
|
|
64
|
-
return (await axios.get(`${src}/wp-json/wp/v2/tags?post=${postId}`)).data;
|
|
65
|
-
}
|
|
66
|
-
catch (error) {
|
|
67
|
-
return [];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
async migrate(src, dest) {
|
|
71
|
-
new ConsoleMessage().info("Migrating WordPress site from " + src + " to " + dest);
|
|
72
|
-
try {
|
|
73
|
-
const posts = await this.fetchPosts(src);
|
|
74
|
-
for (const post of posts) {
|
|
75
|
-
const { id, title, slug, date, content, featured_media } = post;
|
|
76
|
-
// Get post categories
|
|
77
|
-
const categoriesData = await this.fetchCategoriesPerPost(src, id);
|
|
78
|
-
const tagsData = await this.fetchTagsPerPost(src, id);
|
|
79
|
-
const categories = categoriesData.map((category) => category.name);
|
|
80
|
-
const tags = tagsData.map((tag) => tag.name);
|
|
81
|
-
// Markdown header generation
|
|
82
|
-
let mdContent = this.parser.generateMdHeaders({
|
|
83
|
-
title: title.rendered, slug, categories, tags, date
|
|
84
|
-
});
|
|
85
|
-
// Markdown media content
|
|
86
|
-
if (featured_media) {
|
|
87
|
-
const mediaFetched = await this.fetchMedia(src, featured_media);
|
|
88
|
-
const mediaPath = await this.saveMedia(mediaFetched, dest);
|
|
89
|
-
mdContent += `\n\n`;
|
|
90
|
-
}
|
|
91
|
-
// Markdown html content
|
|
92
|
-
mdContent += this.parser.htmlToMd(content.rendered);
|
|
93
|
-
await this.storage.set(`${dest}/${slug}.md`, mdContent);
|
|
94
|
-
}
|
|
95
|
-
new ConsoleMessage().info("Migration was completed successfully");
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
throw new Error('Error while migrating WordPress site: ' + src);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=wordpressMigrationProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wordpressMigrationProvider.js","sourceRoot":"","sources":["../../src/migrate/wordpressMigrationProvider.ts"],"names":[],"mappings":"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"}
|