writr 1.8.0 → 1.8.5

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 (84) hide show
  1. package/README.md +18 -4
  2. package/bin/writr +1 -9
  3. package/dist/cache.d.ts +18 -0
  4. package/dist/cache.js +74 -0
  5. package/dist/cache.js.map +1 -0
  6. package/dist/config.d.ts +29 -0
  7. package/dist/config.js +109 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/data/dataProviderInterface.d.ts +12 -0
  10. package/dist/data/dataProviderInterface.js +3 -0
  11. package/dist/data/dataProviderInterface.js.map +1 -0
  12. package/dist/data/dataService.d.ts +19 -0
  13. package/dist/data/dataService.js +137 -0
  14. package/dist/data/dataService.js.map +1 -0
  15. package/dist/data/fileDataProvider.d.ts +20 -0
  16. package/dist/data/fileDataProvider.js +136 -0
  17. package/dist/data/fileDataProvider.js.map +1 -0
  18. package/dist/generator.d.ts +8 -0
  19. package/dist/generator.js +58 -0
  20. package/dist/generator.js.map +1 -0
  21. package/dist/index.d.ts +8 -0
  22. package/dist/index.js +84 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/log.d.ts +6 -0
  25. package/dist/log.js +17 -0
  26. package/dist/log.js.map +1 -0
  27. package/dist/migrate/ghostMigrationProvider.d.ts +9 -0
  28. package/dist/migrate/ghostMigrationProvider.js +67 -0
  29. package/dist/migrate/ghostMigrationProvider.js.map +1 -0
  30. package/dist/migrate/jekyllMigrationProvider.d.ts +4 -0
  31. package/dist/migrate/jekyllMigrationProvider.js +15 -0
  32. package/dist/migrate/jekyllMigrationProvider.js.map +1 -0
  33. package/dist/migrate/mediumMigrationProvider.d.ts +7 -0
  34. package/dist/migrate/mediumMigrationProvider.js +30 -0
  35. package/dist/migrate/mediumMigrationProvider.js.map +1 -0
  36. package/dist/migrate/migrationProviderInterface.d.ts +3 -0
  37. package/dist/migrate/migrationProviderInterface.js +3 -0
  38. package/dist/migrate/migrationProviderInterface.js.map +1 -0
  39. package/dist/migrate/wordpressMigrationProvider.d.ts +12 -0
  40. package/dist/migrate/wordpressMigrationProvider.js +105 -0
  41. package/dist/migrate/wordpressMigrationProvider.js.map +1 -0
  42. package/dist/migrate.d.ts +6 -0
  43. package/dist/migrate.js +38 -0
  44. package/dist/migrate.js.map +1 -0
  45. package/dist/post.d.ts +31 -0
  46. package/dist/post.js +193 -0
  47. package/dist/post.js.map +1 -0
  48. package/dist/render/atomRenderProvider.d.ts +8 -0
  49. package/dist/render/atomRenderProvider.js +55 -0
  50. package/dist/render/atomRenderProvider.js.map +1 -0
  51. package/dist/render/htmRenderlProvider.d.ts +14 -0
  52. package/dist/render/htmRenderlProvider.js +119 -0
  53. package/dist/render/htmRenderlProvider.js.map +1 -0
  54. package/dist/render/imageRenderProvider.d.ts +8 -0
  55. package/dist/render/imageRenderProvider.js +19 -0
  56. package/dist/render/imageRenderProvider.js.map +1 -0
  57. package/dist/render/jsonRenderProvider.d.ts +8 -0
  58. package/dist/render/jsonRenderProvider.js +28 -0
  59. package/dist/render/jsonRenderProvider.js.map +1 -0
  60. package/dist/render/renderProviderInterface.d.ts +5 -0
  61. package/dist/render/renderProviderInterface.js +3 -0
  62. package/dist/render/renderProviderInterface.js.map +1 -0
  63. package/dist/serve.d.ts +16 -0
  64. package/dist/serve.js +33 -0
  65. package/dist/serve.js.map +1 -0
  66. package/dist/storage/fileStorageProvider.d.ts +10 -0
  67. package/dist/storage/fileStorageProvider.js +66 -0
  68. package/dist/storage/fileStorageProvider.js.map +1 -0
  69. package/dist/storage/storageProviderInterface.d.ts +8 -0
  70. package/dist/storage/storageProviderInterface.js +3 -0
  71. package/dist/storage/storageProviderInterface.js.map +1 -0
  72. package/dist/storage/storageService.d.ts +12 -0
  73. package/dist/storage/storageService.js +32 -0
  74. package/dist/storage/storageService.js.map +1 -0
  75. package/dist/tag.d.ts +9 -0
  76. package/dist/tag.js +38 -0
  77. package/dist/tag.js.map +1 -0
  78. package/dist/utils/parser.d.ts +5 -0
  79. package/dist/utils/parser.js +41 -0
  80. package/dist/utils/parser.js.map +1 -0
  81. package/dist/utils/setup.d.ts +8 -0
  82. package/dist/utils/setup.js +79 -0
  83. package/dist/utils/setup.js.map +1 -0
  84. package/package.json +13 -12
@@ -0,0 +1,8 @@
1
+ import { DataService } from "./data/dataService";
2
+ import { Config } from "./config";
3
+ export declare class SiteGenerator {
4
+ config: Config | undefined;
5
+ data: DataService | undefined;
6
+ constructor(options: any);
7
+ run(): Promise<boolean>;
8
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SiteGenerator = void 0;
4
+ const fs = require("fs-extra");
5
+ const htmRenderlProvider_1 = require("./render/htmRenderlProvider");
6
+ const jsonRenderProvider_1 = require("./render/jsonRenderProvider");
7
+ const atomRenderProvider_1 = require("./render/atomRenderProvider");
8
+ const imageRenderProvider_1 = require("./render/imageRenderProvider");
9
+ const dataService_1 = require("./data/dataService");
10
+ const config_1 = require("./config");
11
+ class SiteGenerator {
12
+ constructor(options) {
13
+ const params = options.opts();
14
+ this.config = new config_1.Config();
15
+ if (params.config) {
16
+ this.config.loadConfig(params.config);
17
+ }
18
+ if (params.path) {
19
+ this.config.loadPath(params.path);
20
+ }
21
+ if (params) {
22
+ this.config.loadParams(params);
23
+ }
24
+ this.config.loadProgram(options);
25
+ this.data = new dataService_1.DataService(this.config);
26
+ }
27
+ async run() {
28
+ let result = true;
29
+ if (this.data === undefined || this.config === undefined) {
30
+ return false;
31
+ }
32
+ if (fs.existsSync(this.config.output)) {
33
+ fs.removeSync(this.config.output);
34
+ }
35
+ let render = true;
36
+ for (let i = 0; i < this.config.render.length; i++) {
37
+ let type = this.config.render[i];
38
+ if (type === "html") {
39
+ render = await new htmRenderlProvider_1.HtmlRenderProvider().render(this.data, this.config);
40
+ }
41
+ if (type === "json") {
42
+ render = await new jsonRenderProvider_1.JSONRenderProvider().render(this.data, this.config);
43
+ }
44
+ if (type === "atom") {
45
+ render = await new atomRenderProvider_1.AtomRenderProvider().render(this.data, this.config);
46
+ }
47
+ if (type === "images") {
48
+ render = await new imageRenderProvider_1.ImageRenderProvider().render(this.data, this.config);
49
+ }
50
+ }
51
+ if (render) {
52
+ result = render;
53
+ }
54
+ return result;
55
+ }
56
+ }
57
+ exports.SiteGenerator = SiteGenerator;
58
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,oEAA+D;AAC/D,oEAA+D;AAC/D,oEAA+D;AAC/D,sEAAiE;AACjE,oDAA+C;AAC/C,qCAAgC;AAEhC,MAAa,aAAa;IAKzB,YAAY,OAAY;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,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,yBAAW,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,uCAAkB,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,uCAAkB,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,uCAAkB,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,yCAAmB,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;AA/DD,sCA+DC"}
@@ -0,0 +1,8 @@
1
+ /// <reference types="node" />
2
+ import { DataService } from "./data/dataService";
3
+ import { Config } from "./config";
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 ADDED
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Writr = void 0;
4
+ const commander_1 = require("commander");
5
+ const setup_1 = require("./utils/setup");
6
+ const log_1 = require("./log");
7
+ const serve_1 = require("./serve");
8
+ const generator_1 = require("./generator");
9
+ const migrate_1 = require("./migrate");
10
+ class Writr {
11
+ async parseCLI(process) {
12
+ const program = (0, commander_1.createCommand)();
13
+ program.storeOptionsAsProperties(true);
14
+ program
15
+ .command('build', { isDefault: true })
16
+ .description('Build the site')
17
+ .option("-p, --path <path>", "Path of where the blog, config, and template are located")
18
+ .option("-o, --output <path>", "Path of where to output the generated blog")
19
+ .option("-r, --render <list>", "What do you want rendered such as html or json (example --render html,json)")
20
+ .option("-c, --config <path>", "custom configuration path")
21
+ .action(async (options) => {
22
+ try {
23
+ await new generator_1.SiteGenerator(options).run();
24
+ }
25
+ catch (error) {
26
+ new log_1.ConsoleMessage().error('Error: ' + error.message);
27
+ }
28
+ });
29
+ program
30
+ .command('init')
31
+ .description('Initialize a new Writr project')
32
+ .argument('[name]', 'Name of the project', 'Blog')
33
+ .action(async (name) => {
34
+ try {
35
+ await new setup_1.Setup(name).init();
36
+ }
37
+ catch (error) {
38
+ new log_1.ConsoleMessage().error('Error: ' + error.message);
39
+ }
40
+ });
41
+ program
42
+ .command('new')
43
+ .description('Create new markdown file')
44
+ .action(async () => {
45
+ try {
46
+ await new setup_1.Setup('new').new();
47
+ }
48
+ catch (error) {
49
+ new log_1.ConsoleMessage().error('Error: ' + error.message);
50
+ }
51
+ });
52
+ program
53
+ .command('migrate')
54
+ .description('Migrate from different sources to Writr')
55
+ .argument("<type> <options...>", "Provider type (jekyll, wordpress, etc), source and destination")
56
+ .action(async (options) => {
57
+ try {
58
+ const [type, src, dest] = options;
59
+ await new migrate_1.Migrate(type).migrate(src, dest);
60
+ }
61
+ catch (error) {
62
+ new log_1.ConsoleMessage().error('Error: ' + error.message);
63
+ }
64
+ });
65
+ program
66
+ .command('serve')
67
+ .description('Serve the site locally')
68
+ .option("-o, --output <path>", "Path of where to output the generated blog be served", 'blog_output')
69
+ .option("-p, --port <port>", "Port to serve the site on", '3000')
70
+ .option("--path <path>", "Path of where the blog, config, and template are located", './blog')
71
+ .option("-w, --watch", "Watch for changes and rebuild", false)
72
+ .action(async (options) => {
73
+ try {
74
+ await new serve_1.Serve(options).run();
75
+ }
76
+ catch (error) {
77
+ new log_1.ConsoleMessage().error('Error: ' + error.message);
78
+ }
79
+ });
80
+ program.parse(process.argv);
81
+ }
82
+ }
83
+ exports.Writr = Writr;
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/log.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare class ConsoleMessage {
2
+ log: any;
3
+ constructor();
4
+ info(message: string): void;
5
+ error(message: string): void;
6
+ }
package/dist/log.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConsoleMessage = void 0;
4
+ const winston_1 = require("winston");
5
+ class ConsoleMessage {
6
+ constructor() {
7
+ this.log = (0, winston_1.createLogger)({ transports: [new winston_1.transports.Console()] });
8
+ }
9
+ info(message) {
10
+ this.log.info(message);
11
+ }
12
+ error(message) {
13
+ this.log.error(message);
14
+ }
15
+ }
16
+ exports.ConsoleMessage = ConsoleMessage;
17
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":";;;AAAA,qCAAiD;AAEjD,MAAa,cAAc;IAG1B;QACC,IAAI,CAAC,GAAG,GAAG,IAAA,sBAAY,EAAC,EAAE,UAAU,EAAE,CAAC,IAAI,oBAAU,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;AAfD,wCAeC"}
@@ -0,0 +1,9 @@
1
+ import { MigrationProviderInterface } from "./migrationProviderInterface";
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
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GhostMigrationProvider = void 0;
4
+ const got_1 = require("got");
5
+ const log_1 = require("../log");
6
+ const parser_1 = require("../utils/parser");
7
+ const storageService_1 = require("../storage/storageService");
8
+ class GhostMigrationProvider {
9
+ constructor() {
10
+ this.parser = new parser_1.Parser();
11
+ this.storage = new storageService_1.StorageService();
12
+ }
13
+ async fetchPosts(src) {
14
+ try {
15
+ const url = new URL(src);
16
+ const { searchParams, origin } = url;
17
+ const key = searchParams.get('key');
18
+ let totalPosts;
19
+ const { posts, meta } = await (0, got_1.default)(`${origin}/ghost/api/v2/content/posts/?key=${key}`).json();
20
+ totalPosts = [...posts];
21
+ const { pagination: { pages } } = meta;
22
+ for (let i = 2; i <= pages; i++) {
23
+ const { posts } = await (0, got_1.default)(`${origin}/ghost/api/v2/content/posts/?key=${key}&page=${i}`).json();
24
+ totalPosts = totalPosts.concat(posts);
25
+ }
26
+ return totalPosts;
27
+ }
28
+ catch (error) {
29
+ throw new Error(error.message);
30
+ }
31
+ }
32
+ async saveMedia(mediaFetched, dest) {
33
+ const { mediaUrl, slug } = mediaFetched;
34
+ const response = await (0, got_1.default)(mediaUrl);
35
+ const { rawBody: media, headers } = response;
36
+ const mime_type = headers['content-type'];
37
+ const extension = mime_type.split('/')[1];
38
+ const filename = `${slug}.${extension}`;
39
+ await this.storage.set(`${dest}/images/${filename}`, media);
40
+ return `/images/${filename}`;
41
+ }
42
+ async migrate(src, dest) {
43
+ try {
44
+ new log_1.ConsoleMessage().info('Migrating from Ghost to Writr');
45
+ const posts = await this.fetchPosts(src);
46
+ for (const post of posts) {
47
+ const { title, slug, html, feature_image, published_at } = post;
48
+ // Markdown header generation
49
+ let mdContent = this.parser.generateMdHeaders({ title, slug, date: published_at });
50
+ if (feature_image) {
51
+ const mediaPath = await this.saveMedia({ mediaUrl: feature_image, slug }, dest);
52
+ mdContent += `![${title}](${mediaPath})\n\n`;
53
+ }
54
+ // Markdown html content
55
+ mdContent += this.parser.htmlToMd(html);
56
+ await this.storage.set(`${dest}/${slug}.md`, mdContent);
57
+ }
58
+ new log_1.ConsoleMessage().info("Migration was completed successfully");
59
+ return true;
60
+ }
61
+ catch (error) {
62
+ throw new Error('Error while migrating Ghost site: ' + src);
63
+ }
64
+ }
65
+ }
66
+ exports.GhostMigrationProvider = GhostMigrationProvider;
67
+ //# sourceMappingURL=ghostMigrationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ghostMigrationProvider.js","sourceRoot":"","sources":["../../src/migrate/ghostMigrationProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { MigrationProviderInterface } from "./migrationProviderInterface";
2
+ export declare class JekyllMigrationProvider implements MigrationProviderInterface {
3
+ migrate(src: string, dest: string): Promise<boolean>;
4
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JekyllMigrationProvider = void 0;
4
+ const storageService_1 = require("../storage/storageService");
5
+ const log_1 = require("../log");
6
+ class JekyllMigrationProvider {
7
+ async migrate(src, dest) {
8
+ new log_1.ConsoleMessage().info("Migrating Jekyll site from " + src + " to " + dest);
9
+ await new storageService_1.StorageService().copy(src + "/_posts", dest);
10
+ await new storageService_1.StorageService().copy(src + "/images", dest + '/images');
11
+ return true;
12
+ }
13
+ }
14
+ exports.JekyllMigrationProvider = JekyllMigrationProvider;
15
+ //# sourceMappingURL=jekyllMigrationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jekyllMigrationProvider.js","sourceRoot":"","sources":["../../src/migrate/jekyllMigrationProvider.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAEzD,gCAAsC;AAEtC,MAAa,uBAAuB;IAEhC,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAY;QACnC,IAAI,oBAAc,EAAE,CAAC,IAAI,CAAC,6BAA6B,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;QAC/E,MAAM,IAAI,+BAAc,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,EAAG,IAAI,CAAC,CAAC;QACxD,MAAM,IAAI,+BAAc,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,EAAG,IAAI,GAAG,SAAS,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IAChB,CAAC;CAEJ;AATD,0DASC"}
@@ -0,0 +1,7 @@
1
+ import { MigrationProviderInterface } from "./migrationProviderInterface";
2
+ export declare class MediumMigrationProvider implements MigrationProviderInterface {
3
+ parser: any;
4
+ storage: any;
5
+ constructor();
6
+ migrate(src: string, dest: string): Promise<boolean>;
7
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediumMigrationProvider = void 0;
4
+ const fs = require("fs-extra");
5
+ const log_1 = require("../log");
6
+ const storageService_1 = require("../storage/storageService");
7
+ const parser_1 = require("../utils/parser");
8
+ class MediumMigrationProvider {
9
+ constructor() {
10
+ this.parser = new parser_1.Parser();
11
+ this.storage = new storageService_1.StorageService();
12
+ }
13
+ async migrate(src, dest) {
14
+ new log_1.ConsoleMessage().info("Migrating Medium post from " + src + " to " + dest);
15
+ const files = new storageService_1.StorageService().readDir(`${src}/posts`);
16
+ const bodyRegex = /\<body[^>]*\>([^]*)\<\/body/m;
17
+ files.forEach((file) => {
18
+ const slug = file.replace(".html", "");
19
+ const html = fs.readFileSync(`${src}/posts/${file}`, "utf8");
20
+ const [, content] = html.match(bodyRegex) || [];
21
+ const headerMd = this.parser.generateMdHeaders({ slug });
22
+ const bodyMd = this.parser.htmlToMd(content);
23
+ const contentMd = headerMd + bodyMd;
24
+ fs.outputFileSync(`${dest}/${slug}.md`, contentMd);
25
+ });
26
+ return true;
27
+ }
28
+ }
29
+ exports.MediumMigrationProvider = MediumMigrationProvider;
30
+ //# sourceMappingURL=mediumMigrationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediumMigrationProvider.js","sourceRoot":"","sources":["../../src/migrate/mediumMigrationProvider.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAE/B,gCAAsC;AACtC,8DAAyD;AACzD,4CAAuC;AAEvC,MAAa,uBAAuB;IAKnC;QACC,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,+BAAc,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAY;QACtC,IAAI,oBAAc,EAAE,CAAC,IAAI,CAAC,6BAA6B,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,+BAAc,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;AA5BD,0DA4BC"}
@@ -0,0 +1,3 @@
1
+ export interface MigrationProviderInterface {
2
+ migrate(src: string, dest: string): Promise<boolean>;
3
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=migrationProviderInterface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrationProviderInterface.js","sourceRoot":"","sources":["../../src/migrate/migrationProviderInterface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { MigrationProviderInterface } from "./migrationProviderInterface";
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<unknown>;
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
+ }
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WordpressMigrationProvider = void 0;
4
+ const got_1 = require("got");
5
+ const parser_1 = require("../utils/parser");
6
+ const storageService_1 = require("../storage/storageService");
7
+ const log_1 = require("../log");
8
+ class WordpressMigrationProvider {
9
+ constructor() {
10
+ this.parser = new parser_1.Parser();
11
+ this.storage = new storageService_1.StorageService();
12
+ }
13
+ async fetchPosts(src) {
14
+ try {
15
+ let posts;
16
+ const response = await (0, got_1.default)(`${src}/wp-json/wp/v2/posts?page=1`);
17
+ const headers = response.headers;
18
+ const body = JSON.parse(response.body);
19
+ const pages = headers['x-wp-totalpages'];
20
+ posts = [...body];
21
+ for (let i = 2; i <= parseInt(pages); i++) {
22
+ const body = await (0, got_1.default)(`${src}/wp-json/wp/v2/posts?page=${i}`).json();
23
+ posts = posts.concat(body);
24
+ }
25
+ return posts;
26
+ }
27
+ catch (error) {
28
+ throw new Error(error.message);
29
+ }
30
+ }
31
+ async fetchMedia(src, id) {
32
+ try {
33
+ return await (0, got_1.default)(`${src}/wp-json/wp/v2/media/${id}`).json();
34
+ }
35
+ catch (error) {
36
+ return null;
37
+ }
38
+ }
39
+ async saveMedia(mediaFetched, dest) {
40
+ try {
41
+ if (!mediaFetched)
42
+ return null;
43
+ const { source_url, slug, mime_type } = mediaFetched;
44
+ const encodedURI = encodeURI(source_url);
45
+ const media = await (0, got_1.default)(encodedURI).buffer();
46
+ const extension = mime_type.split('/')[1];
47
+ const filename = `${slug}.${extension}`;
48
+ await this.storage.set(`${dest}/images/${filename}`, media);
49
+ return `/images/${filename}`;
50
+ }
51
+ catch (error) {
52
+ return null;
53
+ }
54
+ }
55
+ async fetchCategoriesPerPost(src, postId) {
56
+ try {
57
+ return await (0, got_1.default)(`${src}/wp-json/wp/v2/categories?post=${postId}`).json();
58
+ }
59
+ catch (error) {
60
+ return [];
61
+ }
62
+ }
63
+ async fetchTagsPerPost(src, postId) {
64
+ try {
65
+ return await (0, got_1.default)(`${src}/wp-json/wp/v2/tags?post=${postId}`).json();
66
+ }
67
+ catch (error) {
68
+ return [];
69
+ }
70
+ }
71
+ async migrate(src, dest) {
72
+ new log_1.ConsoleMessage().info("Migrating WordPress site from " + src + " to " + dest);
73
+ try {
74
+ const posts = await this.fetchPosts(src);
75
+ for (const post of posts) {
76
+ const { id, title, slug, date, content, featured_media } = post;
77
+ // Get post categories
78
+ const categoriesData = await this.fetchCategoriesPerPost(src, id);
79
+ const tagsData = await this.fetchTagsPerPost(src, id);
80
+ const categories = categoriesData.map((category) => category.name);
81
+ const tags = tagsData.map((tag) => tag.name);
82
+ // Markdown header generation
83
+ let mdContent = this.parser.generateMdHeaders({
84
+ title: title.rendered, slug, categories, tags, date
85
+ });
86
+ // Markdown media content
87
+ if (featured_media) {
88
+ const mediaFetched = await this.fetchMedia(src, featured_media);
89
+ const mediaPath = await this.saveMedia(mediaFetched, dest);
90
+ mdContent += `![${title.rendered}](${mediaPath})\n\n`;
91
+ }
92
+ // Markdown html content
93
+ mdContent += this.parser.htmlToMd(content.rendered);
94
+ await this.storage.set(`${dest}/${slug}.md`, mdContent);
95
+ }
96
+ new log_1.ConsoleMessage().info("Migration was completed successfully");
97
+ return true;
98
+ }
99
+ catch (error) {
100
+ throw new Error('Error while migrating WordPress site: ' + src);
101
+ }
102
+ }
103
+ }
104
+ exports.WordpressMigrationProvider = WordpressMigrationProvider;
105
+ //# sourceMappingURL=wordpressMigrationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wordpressMigrationProvider.js","sourceRoot":"","sources":["../../src/migrate/wordpressMigrationProvider.ts"],"names":[],"mappings":";;;AAAA,6BAAsB;AAEtB,4CAAuC;AACvC,8DAAyD;AACzD,gCAAsC;AAEtC,MAAa,0BAA0B;IAKnC;QACI,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,+BAAc,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW;QACxB,IAAG;YACC,IAAI,KAA4B,CAAC;YAEjC,MAAM,QAAQ,GAAG,MAAM,IAAA,aAAG,EAAC,GAAG,GAAG,6BAA6B,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,KAAK,GAAW,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACjD,KAAK,GAAG,CAAC,GAAG,IAAwC,CAAC,CAAC;YACtD,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAC;gBACrC,MAAM,IAAI,GAAG,MAAM,IAAA,aAAG,EAAC,GAAG,GAAG,6BAA6B,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAwC,CAAC,CAAC;aAClE;YACD,OAAO,KAAK,CAAC;SAChB;QAAC,OAAO,KAAU,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAClC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,EAAU;QACpC,IAAG;YACC,OAAO,MAAM,IAAA,aAAG,EAAC,GAAG,GAAG,wBAAwB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SAC/D;QAAC,OAAO,KAAU,EAAE;YACjB,OAAO,IAAI,CAAC;SACf;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,YAAiB,EAAE,IAAY;QAC3C,IAAG;YACC,IAAI,CAAC,YAAY;gBAAE,OAAO,IAAI,CAAC;YAC/B,MAAM,EAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAC,GAAG,YAAY,CAAC;YACnD,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,IAAA,aAAG,EAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5D,OAAO,WAAW,QAAQ,EAAE,CAAC;SAChC;QAAC,OAAO,KAAU,EAAE;YACjB,OAAO,IAAI,CAAA;SACd;IACL,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,GAAW,EAAE,MAAc;QACpD,IAAG;YACC,OAAO,MAAM,IAAA,aAAG,EAAC,GAAG,GAAG,kCAAkC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;SAC5E;QAAC,OAAO,KAAU,EAAE;YACjB,OAAO,EAAE,CAAC;SACb;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,MAAc;QAC9C,IAAG;YACC,OAAO,MAAM,IAAA,aAAG,EAAC,GAAG,GAAG,4BAA4B,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SACvE;QAAC,OAAO,KAAU,EAAE;YACjB,OAAO,EAAE,CAAC;SACb;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAY;QACnC,IAAI,oBAAc,EAAE,CAAC,IAAI,CAAC,gCAAgC,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;QAClF,IAAG;YACC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACtB,MAAM,EAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;gBAE/D,sBAAsB;gBACtB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAClE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtD,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,QAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClD,6BAA6B;gBAC7B,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;oBAC1C,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI;iBACtD,CAAC,CAAC;gBAEH,yBAAyB;gBACzB,IAAG,cAAc,EAAE;oBACf,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;oBAChE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBAC3D,SAAS,IAAI,KAAK,KAAK,CAAC,QAAQ,KAAK,SAAS,OAAO,CAAC;iBACzD;gBAED,wBAAwB;gBACxB,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAEpD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,EAAE,SAAS,CAAC,CAAC;aAC3D;YACD,IAAI,oBAAc,EAAE,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;SACf;QAAA,OAAO,KAAU,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,GAAG,CAAC,CAAC;SACnE;IACL,CAAC;CAEJ;AAxGD,gEAwGC"}
@@ -0,0 +1,6 @@
1
+ export declare class Migrate {
2
+ provider: any;
3
+ constructor(provider: string);
4
+ migrate(src: string, dest: string): Promise<void>;
5
+ getProvider(): any;
6
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migrate = void 0;
4
+ const jekyllMigrationProvider_1 = require("./migrate/jekyllMigrationProvider");
5
+ const wordpressMigrationProvider_1 = require("./migrate/wordpressMigrationProvider");
6
+ const ghostMigrationProvider_1 = require("./migrate/ghostMigrationProvider");
7
+ const mediumMigrationProvider_1 = require("./migrate/mediumMigrationProvider");
8
+ class Migrate {
9
+ constructor(provider) {
10
+ switch (provider) {
11
+ case "jekyll":
12
+ this.provider = new jekyllMigrationProvider_1.JekyllMigrationProvider();
13
+ break;
14
+ case "wordpress":
15
+ this.provider = new wordpressMigrationProvider_1.WordpressMigrationProvider();
16
+ break;
17
+ case "ghost":
18
+ this.provider = new ghostMigrationProvider_1.GhostMigrationProvider();
19
+ break;
20
+ case "medium":
21
+ this.provider = new mediumMigrationProvider_1.MediumMigrationProvider();
22
+ break;
23
+ default:
24
+ throw new Error("Unknown migration provider: " + provider);
25
+ }
26
+ }
27
+ async migrate(src, dest) {
28
+ if (!src || !dest) {
29
+ throw new Error("Source and destination must be specified");
30
+ }
31
+ await this.getProvider().migrate(src, dest);
32
+ }
33
+ getProvider() {
34
+ return this.provider;
35
+ }
36
+ }
37
+ exports.Migrate = Migrate;
38
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":";;;AAAA,+EAA0E;AAC1E,qFAAgF;AAChF,6EAAwE;AACxE,+EAA0E;AAE1E,MAAa,OAAO;IAGhB,YAAY,QAAgB;QACxB,QAAQ,QAAQ,EAAE;YACd,KAAK,QAAQ;gBACT,IAAI,CAAC,QAAQ,GAAG,IAAI,iDAAuB,EAAE,CAAC;gBAC9C,MAAM;YACV,KAAK,WAAW;gBACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,uDAA0B,EAAE,CAAC;gBACjD,MAAM;YACV,KAAK,OAAO;gBACR,IAAI,CAAC,QAAQ,GAAG,IAAI,+CAAsB,EAAE,CAAC;gBAC7C,MAAM;YACV,KAAK,QAAQ;gBACT,IAAI,CAAC,QAAQ,GAAG,IAAI,iDAAuB,EAAE,CAAC;gBAC9C,MAAM;YACV;gBACI,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,QAAQ,CAAC,CAAC;SAClE;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAY;QACnC,IAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;SAC/D;QACD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;CAEJ;AAjCD,0BAiCC"}
package/dist/post.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ export declare class Post {
2
+ keywords: Array<string>;
3
+ tags: Array<string>;
4
+ content: string;
5
+ private _matter;
6
+ permalink_default: string;
7
+ permalink_date: string;
8
+ permalink_ordinal: string;
9
+ constructor();
10
+ get id(): string;
11
+ get date(): Date;
12
+ get title(): string;
13
+ set title(val: string);
14
+ get author(): string;
15
+ set author(val: string);
16
+ get url(): string;
17
+ set url(val: string);
18
+ get matter(): any;
19
+ set matter(val: any);
20
+ getBody(): Promise<any>;
21
+ get published(): boolean;
22
+ set published(val: boolean);
23
+ getDescription(): Promise<any>;
24
+ getSummary(): Promise<any>;
25
+ addTag(name: string): void;
26
+ addTags(names: Array<string>): void;
27
+ generateUrl(): void;
28
+ parseUrl(url: string): string;
29
+ toObject(): Promise<any>;
30
+ static create(obj: any): Post;
31
+ }