writr 1.9.12 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +76 -135
  2. package/bin/writr.mjs +8 -0
  3. package/dist/builder.d.ts +33 -0
  4. package/dist/builder.js +181 -0
  5. package/dist/console.d.ts +22 -0
  6. package/dist/console.js +120 -0
  7. package/dist/github.d.ts +22 -0
  8. package/dist/github.js +74 -0
  9. package/dist/helpers/markdown.d.ts +10 -0
  10. package/dist/helpers/markdown.js +24 -0
  11. package/dist/helpers.d.ts +7 -0
  12. package/dist/helpers.js +58 -0
  13. package/dist/options.d.ts +12 -0
  14. package/dist/options.js +47 -0
  15. package/dist/writr.d.ts +23 -0
  16. package/dist/writr.js +153 -0
  17. package/init/favicon.svg +1 -0
  18. package/init/logo.png +0 -0
  19. package/init/variables.css +30 -0
  20. package/init/writr.config.cjs +10 -0
  21. package/package.json +44 -66
  22. package/template/css/highlight/highlight.min.js +1433 -0
  23. package/template/css/highlight/styles/base16/dracula.min.css +7 -0
  24. package/template/css/home.css +307 -0
  25. package/template/css/index.css +919 -0
  26. package/template/includes/footer.hbs +10 -0
  27. package/template/includes/header.hbs +17 -0
  28. package/template/includes/landing/content.hbs +63 -0
  29. package/template/includes/landing/hero.hbs +3 -0
  30. package/template/includes/scripts.hbs +4 -0
  31. package/template/index.hbs +16 -0
  32. package/template/releases.hbs +45 -0
  33. package/bin/writr.js +0 -7
  34. package/dist/cache.d.ts +0 -18
  35. package/dist/cache.js +0 -70
  36. package/dist/cache.js.map +0 -1
  37. package/dist/config.d.ts +0 -29
  38. package/dist/config.js +0 -104
  39. package/dist/config.js.map +0 -1
  40. package/dist/data/dataProviderInterface.d.ts +0 -12
  41. package/dist/data/dataProviderInterface.js +0 -2
  42. package/dist/data/dataProviderInterface.js.map +0 -1
  43. package/dist/data/dataService.d.ts +0 -19
  44. package/dist/data/dataService.js +0 -130
  45. package/dist/data/dataService.js.map +0 -1
  46. package/dist/data/fileDataProvider.d.ts +0 -20
  47. package/dist/data/fileDataProvider.js +0 -132
  48. package/dist/data/fileDataProvider.js.map +0 -1
  49. package/dist/generator.d.ts +0 -8
  50. package/dist/generator.js +0 -54
  51. package/dist/generator.js.map +0 -1
  52. package/dist/index.d.ts +0 -8
  53. package/dist/index.js +0 -80
  54. package/dist/index.js.map +0 -1
  55. package/dist/log.d.ts +0 -6
  56. package/dist/log.js +0 -13
  57. package/dist/log.js.map +0 -1
  58. package/dist/migrate/ghostMigrationProvider.d.ts +0 -9
  59. package/dist/migrate/ghostMigrationProvider.js +0 -65
  60. package/dist/migrate/ghostMigrationProvider.js.map +0 -1
  61. package/dist/migrate/jekyllMigrationProvider.d.ts +0 -4
  62. package/dist/migrate/jekyllMigrationProvider.js +0 -11
  63. package/dist/migrate/jekyllMigrationProvider.js.map +0 -1
  64. package/dist/migrate/mediumMigrationProvider.d.ts +0 -7
  65. package/dist/migrate/mediumMigrationProvider.js +0 -26
  66. package/dist/migrate/mediumMigrationProvider.js.map +0 -1
  67. package/dist/migrate/migrationProviderInterface.d.ts +0 -3
  68. package/dist/migrate/migrationProviderInterface.js +0 -2
  69. package/dist/migrate/migrationProviderInterface.js.map +0 -1
  70. package/dist/migrate/wordpressMigrationProvider.d.ts +0 -12
  71. package/dist/migrate/wordpressMigrationProvider.js +0 -103
  72. package/dist/migrate/wordpressMigrationProvider.js.map +0 -1
  73. package/dist/migrate.d.ts +0 -6
  74. package/dist/migrate.js +0 -34
  75. package/dist/migrate.js.map +0 -1
  76. package/dist/post.d.ts +0 -31
  77. package/dist/post.js +0 -189
  78. package/dist/post.js.map +0 -1
  79. package/dist/render/atomRenderProvider.d.ts +0 -8
  80. package/dist/render/atomRenderProvider.js +0 -51
  81. package/dist/render/atomRenderProvider.js.map +0 -1
  82. package/dist/render/htmRenderlProvider.d.ts +0 -14
  83. package/dist/render/htmRenderlProvider.js +0 -117
  84. package/dist/render/htmRenderlProvider.js.map +0 -1
  85. package/dist/render/imageRenderProvider.d.ts +0 -8
  86. package/dist/render/imageRenderProvider.js +0 -15
  87. package/dist/render/imageRenderProvider.js.map +0 -1
  88. package/dist/render/jsonRenderProvider.d.ts +0 -8
  89. package/dist/render/jsonRenderProvider.js +0 -24
  90. package/dist/render/jsonRenderProvider.js.map +0 -1
  91. package/dist/render/renderProviderInterface.d.ts +0 -5
  92. package/dist/render/renderProviderInterface.js +0 -2
  93. package/dist/render/renderProviderInterface.js.map +0 -1
  94. package/dist/serve.d.ts +0 -16
  95. package/dist/serve.js +0 -29
  96. package/dist/serve.js.map +0 -1
  97. package/dist/storage/fileStorageProvider.d.ts +0 -10
  98. package/dist/storage/fileStorageProvider.js +0 -62
  99. package/dist/storage/fileStorageProvider.js.map +0 -1
  100. package/dist/storage/storageProviderInterface.d.ts +0 -8
  101. package/dist/storage/storageProviderInterface.js +0 -2
  102. package/dist/storage/storageProviderInterface.js.map +0 -1
  103. package/dist/storage/storageService.d.ts +0 -12
  104. package/dist/storage/storageService.js +0 -28
  105. package/dist/storage/storageService.js.map +0 -1
  106. package/dist/tag.d.ts +0 -9
  107. package/dist/tag.js +0 -34
  108. package/dist/tag.js.map +0 -1
  109. package/dist/utils/parser.d.ts +0 -5
  110. package/dist/utils/parser.js +0 -37
  111. package/dist/utils/parser.js.map +0 -1
  112. package/dist/utils/setup.d.ts +0 -8
  113. package/dist/utils/setup.js +0 -75
  114. package/dist/utils/setup.js.map +0 -1
  115. package/init/article-complex.md +0 -40
  116. package/init/article-ejs.md +0 -40
  117. package/init/article-unpublished.md +0 -11
  118. package/init/article1-simple.md +0 -13
  119. package/init/article1.md +0 -11
  120. package/init/article2.md +0 -14
  121. package/init/big-content.md +0 -11
  122. package/init/config.json +0 -9
  123. package/init/images/Introducing Docula 1.png +0 -0
  124. package/init/images/Introducing Docula 2.jpeg +0 -0
  125. package/init/images/Introducing Docula 3.png +0 -0
  126. package/init/images/Introducing Docula 4.png +0 -0
  127. package/init/permalink-test.md +0 -13
  128. package/init/templates/index.hjs +0 -13
  129. package/init/templates/partials/header.hjs +0 -2
  130. package/init/templates/post.hjs +0 -19
  131. package/init/templates/post2.hjs +0 -17
  132. package/init/templates/post3.ejs +0 -7
  133. package/init/templates/tag.hjs +0 -9
@@ -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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"}
@@ -1,8 +0,0 @@
1
- import { DataService } from "./data/dataService.js";
2
- import { Config } from "./config.js";
3
- export declare class SiteGenerator {
4
- config: Config | undefined;
5
- data: DataService | undefined;
6
- constructor(options: any);
7
- run(): Promise<boolean>;
8
- }
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
@@ -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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAC,cAAc,EAAC,MAAM,UAAU,CAAC;AACxC,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,MAAM,OAAO,KAAK;IAKhB,KAAK,CAAC,QAAQ,CAAC,OAAuB;QAGpC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAEhC,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAEvC,OAAO;aACJ,OAAO,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;aACnC,WAAW,CAAC,gBAAgB,CAAC;aAC7B,MAAM,CAAC,mBAAmB,EAAE,0DAA0D,CAAC;aACvF,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;aAC3E,MAAM,CAAC,qBAAqB,EAAE,6EAA6E,CAAC;aAC5G,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;aAC1D,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;YAC7B,IAAG;gBACD,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;aACxC;YAAC,OAAO,KAAU,EAAE;gBACnB,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,SAAS,GAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aACtD;QACH,CAAC,CAAC,CAAA;QAEJ,OAAO;aACJ,OAAO,CAAC,MAAM,CAAC;aACf,WAAW,CAAC,gCAAgC,CAAC;aAC7C,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,EAAE,MAAM,CAAC;aACjD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;YAC7B,IAAG;gBACD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;aAC9B;YAAC,OAAO,KAAU,EAAE;gBAEnB,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,SAAS,GAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aACtD;QACH,CAAC,CAAC,CAAA;QAEJ,OAAO;aACJ,OAAO,CAAC,KAAK,CAAC;aACd,WAAW,CAAC,0BAA0B,CAAC;aACvC,MAAM,CAAC,KAAK,IAAG,EAAE;YAChB,IAAG;gBACD,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;aAC9B;YAAC,OAAO,KAAU,EAAE;gBACnB,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,SAAS,GAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aACtD;QACH,CAAC,CAAC,CAAA;QAGJ,OAAO;aACJ,OAAO,CAAC,SAAS,CAAC;aAClB,WAAW,CAAC,yCAAyC,CAAC;aACtD,QAAQ,CAAC,qBAAqB,EAAE,gEAAgE,CAAE;aAClG,MAAM,CAAC,KAAK,EAAC,OAAO,EAAE,EAAE;YACvB,IAAG;gBACD,MAAM,CAAC,IAAI,EAAI,GAAG,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC;gBACpC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aAC5C;YAAC,OAAO,KAAU,EAAE;gBACnB,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,SAAS,GAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aACtD;QACH,CAAC,CAAC,CAAA;QAGJ,OAAO;aACJ,OAAO,CAAC,OAAO,CAAC;aAChB,WAAW,CAAC,wBAAwB,CAAC;aACrC,MAAM,CAAC,qBAAqB,EAAE,sDAAsD,EAAE,aAAa,CAAC;aACpG,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,CAAC;aAChE,MAAM,CAAC,eAAe,EAAE,0DAA0D,EAAE,QAAQ,CAAC;aAC7F,MAAM,CAAC,aAAa,EAAE,+BAA+B,EAAE,KAAK,CAAC;aAC7D,MAAM,CAAC,KAAK,EAAC,OAAY,EAAE,EAAE;YAC5B,IAAG;gBACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;aAChC;YAAC,OAAO,KAAU,EAAE;gBACnB,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,SAAS,GAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aACtD;QACH,CAAC,CAAC,CAAA;QAGJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF"}
package/dist/log.d.ts DELETED
@@ -1,6 +0,0 @@
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 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 += `![${title}](${mediaPath})\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":"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"}
@@ -1,4 +0,0 @@
1
- import { MigrationProviderInterface } from "./migrationProviderInterface.js";
2
- export declare class JekyllMigrationProvider implements MigrationProviderInterface {
3
- migrate(src: string, dest: string): Promise<boolean>;
4
- }
@@ -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,3 +0,0 @@
1
- export interface MigrationProviderInterface {
2
- migrate(src: string, dest: string): Promise<boolean>;
3
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=migrationProviderInterface.js.map
@@ -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 += `![${title.rendered}](${mediaPath})\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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"}
package/dist/migrate.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export declare class Migrate {
2
- provider: any;
3
- constructor(provider: string);
4
- migrate(src: string, dest: string): Promise<void>;
5
- getProvider(): any;
6
- }