writr 2.0.3 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/builder.d.ts DELETED
@@ -1,34 +0,0 @@
1
- import { WritrOptions } from './options.js';
2
- import { type GithubData } from './github.js';
3
- export type WritrData = {
4
- siteUrl: string;
5
- siteTitle: string;
6
- siteDescription: string;
7
- sitePath: string;
8
- templatePath: string;
9
- outputPath: string;
10
- githubPath: string;
11
- github?: GithubData;
12
- templates?: WritrTemplates;
13
- };
14
- export type WritrTemplates = {
15
- index: string;
16
- releases: string;
17
- };
18
- export declare class WritrBuilder {
19
- private readonly _options;
20
- private readonly _ecto;
21
- private readonly _console;
22
- constructor(options?: WritrOptions, engineOptions?: any);
23
- get options(): WritrOptions;
24
- build(): Promise<void>;
25
- validateOptions(options: WritrOptions): void;
26
- getGithubData(githubPath: string): Promise<GithubData>;
27
- getTemplates(options: WritrOptions): Promise<WritrTemplates>;
28
- getTemplateFile(path: string, name: string): Promise<string | undefined>;
29
- buildRobotsPage(options: WritrOptions): Promise<void>;
30
- buildSiteMapPage(data: WritrData): Promise<void>;
31
- buildIndexPage(data: WritrData): Promise<void>;
32
- buildReleasePage(data: WritrData): Promise<void>;
33
- buildReadmeSection(data: WritrData): Promise<string>;
34
- }
package/dist/builder.js DELETED
@@ -1,182 +0,0 @@
1
- import { Ecto } from 'ecto';
2
- import fs from 'fs-extra';
3
- import { WritrOptions } from './options.js';
4
- import { WritrConsole } from './console.js';
5
- import { Github } from './github.js';
6
- export class WritrBuilder {
7
- _options = new WritrOptions();
8
- _ecto;
9
- _console = new WritrConsole();
10
- constructor(options, engineOptions) {
11
- if (options) {
12
- this._options = options;
13
- }
14
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
15
- this._ecto = new Ecto(engineOptions);
16
- }
17
- get options() {
18
- return this._options;
19
- }
20
- async build() {
21
- const startTime = Date.now();
22
- // Validate the options
23
- this.validateOptions(this.options);
24
- // Set the site options
25
- const writrData = {
26
- siteUrl: this.options.siteUrl,
27
- siteTitle: this.options.siteTitle,
28
- siteDescription: this.options.siteDescription,
29
- sitePath: this.options.sitePath,
30
- templatePath: this.options.templatePath,
31
- outputPath: this.options.outputPath,
32
- githubPath: this.options.githubPath,
33
- };
34
- // Get data from github
35
- const githubData = await this.getGithubData(this.options.githubPath);
36
- // Get data of the site
37
- writrData.github = githubData;
38
- // Get the templates to use
39
- writrData.templates = await this.getTemplates(this.options);
40
- // Build the home page (index.html)
41
- await this.buildIndexPage(writrData);
42
- // Build the releases page (/releases/index.html)
43
- await this.buildReleasePage(writrData);
44
- // Build the sitemap (/sitemap.xml)
45
- await this.buildSiteMapPage(writrData);
46
- // Build the robots.txt (/robots.txt)
47
- await this.buildRobotsPage(this.options);
48
- const siteRelativePath = this.options.sitePath;
49
- // Copy over favicon
50
- if (await fs.pathExists(`${siteRelativePath}/favicon.ico`)) {
51
- await fs.copy(`${siteRelativePath}/favicon.ico`, `${this.options.outputPath}/favicon.ico`);
52
- }
53
- // Copy over logo
54
- if (await fs.pathExists(`${siteRelativePath}/logo.svg`)) {
55
- await fs.copy(`${siteRelativePath}/logo.svg`, `${this.options.outputPath}/logo.svg`);
56
- }
57
- // Copy over css
58
- if (await fs.pathExists(`${this.options.templatePath}/css`)) {
59
- await fs.copy(`${this.options.templatePath}/css`, `${this.options.outputPath}/css`);
60
- }
61
- // Copy over variables
62
- if (await fs.pathExists(`${siteRelativePath}/variables.css`)) {
63
- await fs.copy(`${siteRelativePath}/variables.css`, `${this.options.outputPath}/css/variables.css`);
64
- }
65
- const endTime = Date.now();
66
- const executionTime = endTime - startTime;
67
- this._console.log(`Build completed in ${executionTime}ms`);
68
- }
69
- validateOptions(options) {
70
- if (options.githubPath.length < 3) {
71
- throw new Error('No github options provided');
72
- }
73
- if (options.siteDescription.length < 3) {
74
- throw new Error('No site description options provided');
75
- }
76
- if (!options.siteTitle) {
77
- throw new Error('No site title options provided');
78
- }
79
- if (!options.siteUrl) {
80
- throw new Error('No site url options provided');
81
- }
82
- }
83
- async getGithubData(githubPath) {
84
- const paths = githubPath.split('/');
85
- const options = {
86
- author: paths[0],
87
- repo: paths[1],
88
- };
89
- const github = new Github(options);
90
- return github.getData();
91
- }
92
- async getTemplates(options) {
93
- const templates = {
94
- index: '',
95
- releases: '',
96
- };
97
- if (await fs.pathExists(options.templatePath)) {
98
- const index = await this.getTemplateFile(options.templatePath, 'index');
99
- if (index) {
100
- templates.index = index;
101
- }
102
- const releases = await this.getTemplateFile(options.templatePath, 'releases');
103
- if (releases) {
104
- templates.releases = releases;
105
- }
106
- }
107
- else {
108
- throw new Error(`No template path found at ${options.templatePath}`);
109
- }
110
- return templates;
111
- }
112
- async getTemplateFile(path, name) {
113
- let result;
114
- const files = await fs.readdir(path);
115
- for (const file of files) {
116
- const fileName = file.split('.');
117
- if (fileName[0].toString().toLowerCase() === name.toLowerCase()) {
118
- result = file.toString();
119
- break;
120
- }
121
- }
122
- return result;
123
- }
124
- async buildRobotsPage(options) {
125
- const { sitePath } = options;
126
- const { outputPath } = options;
127
- const robotsPath = `${outputPath}/robots.txt`;
128
- await fs.ensureDir(outputPath);
129
- await ((await fs.pathExists(`${sitePath}/robots.txt`))
130
- ? fs.copy(`${sitePath}/robots.txt`, robotsPath)
131
- : fs.writeFile(robotsPath, 'User-agent: *\nDisallow:'));
132
- }
133
- async buildSiteMapPage(data) {
134
- const sitemapPath = `${data.outputPath}/sitemap.xml`;
135
- const urls = [{ url: data.siteUrl }, { url: `${data.siteUrl}/releases` }];
136
- let xml = '<?xml version="1.0" encoding="UTF-8"?>';
137
- xml += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
138
- for (const { url } of urls) {
139
- xml += '<url>';
140
- xml += `<loc>${url}</loc>`;
141
- xml += '</url>';
142
- }
143
- xml += '</urlset>';
144
- await fs.ensureDir(data.outputPath);
145
- await fs.writeFile(sitemapPath, xml, 'utf8');
146
- }
147
- async buildIndexPage(data) {
148
- if (data.templates) {
149
- const indexPath = `${data.outputPath}/index.html`;
150
- await fs.ensureDir(data.outputPath);
151
- const indexTemplate = `${data.templatePath}/${data.templates.index}`;
152
- const htmlReadme = await this.buildReadmeSection(data);
153
- const indexContent = await this._ecto.renderFromFile(indexTemplate, { ...data, content: htmlReadme }, data.templatePath);
154
- await fs.writeFile(indexPath, indexContent, 'utf8');
155
- }
156
- else {
157
- throw new Error('No templates found');
158
- }
159
- }
160
- async buildReleasePage(data) {
161
- if (data.github && data.templates) {
162
- const releasesPath = `${data.outputPath}/releases/index.html`;
163
- const releaseOutputPath = `${data.outputPath}/releases`;
164
- await fs.ensureDir(releaseOutputPath);
165
- const releasesTemplate = `${data.templatePath}/${data.templates.releases}`;
166
- const releasesContent = await this._ecto.renderFromFile(releasesTemplate, data, data.templatePath);
167
- await fs.writeFile(releasesPath, releasesContent, 'utf8');
168
- }
169
- else {
170
- throw new Error('No github data found');
171
- }
172
- }
173
- async buildReadmeSection(data) {
174
- let htmlReadme = '';
175
- if (fs.existsSync(`${data.sitePath}/README.md`)) {
176
- const readmeContent = fs.readFileSync(`${data.sitePath}/README.md`, 'utf8');
177
- htmlReadme = await this._ecto.markdown.render(readmeContent);
178
- }
179
- return htmlReadme;
180
- }
181
- }
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUMsTUFBTSxFQUFzQyxNQUFNLGFBQWEsQ0FBQztBQW1CeEUsTUFBTSxPQUFPLFlBQVk7SUFDUCxRQUFRLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDNUMsS0FBSyxDQUFPO0lBQ1osUUFBUSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRTdELFlBQVksT0FBc0IsRUFBRSxhQUFtQjtRQUN0RCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDekIsQ0FBQztRQUVELGlFQUFpRTtRQUNqRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFN0IsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHVCQUF1QjtRQUN2QixNQUFNLFNBQVMsR0FBYztZQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQzdCLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDakMsZUFB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QUMsS0FBSyxDQUFDLGNBQWMsQ0FDdEQsZ0JBQWdCLEVBQ2hCLElBQUksRUFDSixJQUFJLENBQUMsWUFBWSxDQUNqQixDQUFDO1lBQ0YsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNGLENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBZTtRQUM5QyxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUNwQyxHQUFHLElBQUksQ0FBQyxRQUFRLFlBQVksRUFDNUIsTUFBTSxDQUNOLENBQUM7WUFDRixVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ25CLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RWN0b30gZnJvbSAnZWN0byc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHtXcml0ck9wdGlvbnN9IGZyb20gJy4vb3B0aW9ucy5qcyc7XG5pbXBvcnQge1dyaXRyQ29uc29sZX0gZnJvbSAnLi9jb25zb2xlLmpzJztcbmltcG9ydCB7R2l0aHViLCB0eXBlIEdpdGh1YkRhdGEsIHR5cGUgR2l0aHViT3B0aW9uc30gZnJvbSAnLi9naXRodWIuanMnO1xuXG5leHBvcnQgdHlwZSBXcml0ckRhdGEgPSB7XG5cdHNpdGVVcmw6IHN0cmluZztcblx0c2l0ZVRpdGxlOiBzdHJpbmc7XG5cdHNpdGVEZXNjcmlwdGlvbjogc3RyaW5nO1xuXHRzaXRlUGF0aDogc3RyaW5nO1xuXHR0ZW1wbGF0ZVBhdGg6IHN0cmluZztcblx0b3V0cHV0UGF0aDogc3RyaW5nO1xuXHRnaXRodWJQYXRoOiBzdHJpbmc7XG5cdGdpdGh1Yj86IEdpdGh1YkRhdGE7XG5cdHRlbXBsYXRlcz86IFdyaXRyVGVtcGxhdGVzO1xufTtcblxuZXhwb3J0IHR5cGUgV3JpdHJUZW1wbGF0ZXMgPSB7XG5cdGluZGV4OiBzdHJpbmc7XG5cdHJlbGVhc2VzOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgV3JpdHJCdWlsZGVyIHtcblx0cHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogV3JpdHJPcHRpb25zID0gbmV3IFdyaXRyT3B0aW9ucygpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9lY3RvOiBFY3RvO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9jb25zb2xlOiBXcml0ckNvbnNvbGUgPSBuZXcgV3JpdHJDb25zb2xlKCk7XG5cblx0Y29uc3RydWN0b3Iob3B0aW9ucz86IFdyaXRyT3B0aW9ucywgZW5naW5lT3B0aW9ucz86IGFueSkge1xuXHRcdGlmIChvcHRpb25zKSB7XG5cdFx0XHR0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcblx0XHR9XG5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuXHRcdHRoaXMuX2VjdG8gPSBuZXcgRWN0byhlbmdpbmVPcHRpb25zKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgb3B0aW9ucygpOiBXcml0ck9wdGlvbnMge1xuXHRcdHJldHVybiB0aGlzLl9vcHRpb25zO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cblx0XHQvLyBWYWxpZGF0ZSB0aGUgb3B0aW9uc1xuXHRcdHRoaXMudmFsaWRhdGVPcHRpb25zKHRoaXMub3B0aW9ucyk7XG5cdFx0Ly8gU2V0IHRoZSBzaXRlIG9wdGlvbnNcblx0XHRjb25zdCB3cml0ckRhdGE6IFdyaXRyRGF0YSA9IHtcblx0XHRcdHNpdGVVcmw6IHRoaXMub3B0aW9ucy5zaXRlVXJsLFxuXHRcdFx0c2l0ZVRpdGxlOiB0aGlzLm9wdGlvbnMuc2l0ZVRpdGxlLFxuXHRcdFx0c2l0ZURlc2NyaXB0aW9uOiB0aGlzLm9wdGlvbnMuc2l0ZURlc2NyaXB0aW9uLFxuXHRcdFx0c2l0ZVBhdGg6IHRoaXMub3B0aW9ucy5zaXRlUGF0aCxcblx0XHRcdHRlbXBsYXRlUGF0aDogdGhpcy5vcHRpb25zLnRlbXBsYXRlUGF0aCxcblx0XHRcdG91dHB1dFBhdGg6IHRoaXMub3B0aW9ucy5vdXRwdXRQYXRoLFxuXHRcdFx0Z2l0aHViUGF0aDogdGhpcy5vcHRpb25zLmdpdGh1YlBhdGgsXG5cdFx0fTtcblxuXHRcdC8vIEdldCBkYXRhIGZyb20gZ2l0aHViXG5cdFx0Y29uc3QgZ2l0aHViRGF0YSA9IGF3YWl0IHRoaXMuZ2V0R2l0aHViRGF0YSh0aGlzLm9wdGlvbnMuZ2l0aHViUGF0aCk7XG5cdFx0Ly8gR2V0IGRhdGEgb2YgdGhlIHNpdGVcblx0XHR3cml0ckRhdGEuZ2l0aHViID0gZ2l0aHViRGF0YTtcblx0XHQvLyBHZXQgdGhlIHRlbXBsYXRlcyB0byB1c2Vcblx0XHR3cml0ckRhdGEudGVtcGxhdGVzID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXModGhpcy5vcHRpb25zKTtcblxuXHRcdC8vIEJ1aWxkIHRoZSBob21lIHBhZ2UgKGluZGV4Lmh0bWwpXG5cdFx0YXdhaXQgdGhpcy5idWlsZEluZGV4UGFnZSh3cml0ckRhdGEpO1xuXG5cdFx0Ly8gQnVpbGQgdGhlIHJlbGVhc2VzIHBhZ2UgKC9yZWxlYXNlcy9pbmRleC5odG1sKVxuXHRcdGF3YWl0IHRoaXMuYnVpbGRSZWxlYXNlUGFnZSh3cml0ckRhdGEpO1xuXG5cdFx0Ly8gQnVpbGQgdGhlIHNpdGVtYXAgKC9zaXRlbWFwLnhtbClcblx0XHRhd2FpdCB0aGlzLmJ1aWxkU2l0ZU1hcFBhZ2Uod3JpdHJEYXRhKTtcblxuXHRcdC8vIEJ1aWxkIHRoZSByb2JvdHMudHh0ICgvcm9ib3RzLnR4dClcblx0XHRhd2FpdCB0aGlzLmJ1aWxkUm9ib3RzUGFnZSh0aGlzLm9wdGlvbnMpO1xuXG5cdFx0Y29uc3Qgc2l0ZVJlbGF0aXZlUGF0aCA9IHRoaXMub3B0aW9ucy5zaXRlUGF0aDtcblxuXHRcdC8vIENvcHkgb3ZlciBmYXZpY29uXG5cdFx0aWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoYCR7c2l0ZVJlbGF0aXZlUGF0aH0vZmF2aWNvbi5pY29gKSkge1xuXHRcdFx0YXdhaXQgZnMuY29weShcblx0XHRcdFx0YCR7c2l0ZVJlbGF0aXZlUGF0aH0vZmF2aWNvbi5pY29gLFxuXHRcdFx0XHRgJHt0aGlzLm9wdGlvbnMub3V0cHV0UGF0aH0vZmF2aWNvbi5pY29gLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBDb3B5IG92ZXIgbG9nb1xuXHRcdGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGAke3NpdGVSZWxhdGl2ZVBhdGh9L2xvZ28uc3ZnYCkpIHtcblx0XHRcdGF3YWl0IGZzLmNvcHkoXG5cdFx0XHRcdGAke3NpdGVSZWxhdGl2ZVBhdGh9L2xvZ28uc3ZnYCxcblx0XHRcdFx0YCR7dGhpcy5vcHRpb25zLm91dHB1dFBhdGh9L2xvZ28uc3ZnYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSBvdmVyIGNzc1xuXHRcdGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGAke3RoaXMub3B0aW9ucy50ZW1wbGF0ZVBhdGh9L2Nzc2ApKSB7XG5cdFx0XHRhd2FpdCBmcy5jb3B5KFxuXHRcdFx0XHRgJHt0aGlzLm9wdGlvbnMudGVtcGxhdGVQYXRofS9jc3NgLFxuXHRcdFx0XHRgJHt0aGlzLm9wdGlvbnMub3V0cHV0UGF0aH0vY3NzYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSBvdmVyIHZhcmlhYmxlc1xuXHRcdGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGAke3NpdGVSZWxhdGl2ZVBhdGh9L3ZhcmlhYmxlcy5jc3NgKSkge1xuXHRcdFx0YXdhaXQgZnMuY29weShcblx0XHRcdFx0YCR7c2l0ZVJlbGF0aXZlUGF0aH0vdmFyaWFibGVzLmNzc2AsXG5cdFx0XHRcdGAke3RoaXMub3B0aW9ucy5vdXRwdXRQYXRofS9jc3MvdmFyaWFibGVzLmNzc2AsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuXG5cdFx0Y29uc3QgZXhlY3V0aW9uVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG5cblx0XHR0aGlzLl9jb25zb2xlLmxvZyhgQnVpbGQgY29tcGxldGVkIGluICR7ZXhlY3V0aW9uVGltZX1tc2ApO1xuXHR9XG5cblx0cHVibGljIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zOiBXcml0ck9wdGlvbnMpOiB2b2lkIHtcblx0XHRpZiAob3B0aW9ucy5naXRodWJQYXRoLmxlbmd0aCA8IDMpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignTm8gZ2l0aHViIG9wdGlvbnMgcHJvdmlkZWQnKTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucy5zaXRlRGVzY3JpcHRpb24ubGVuZ3RoIDwgMykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdObyBzaXRlIGRlc2NyaXB0aW9uIG9wdGlvbnMgcHJvdmlkZWQnKTtcblx0XHR9XG5cblx0XHRpZiAoIW9wdGlvbnMuc2l0ZVRpdGxlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIHNpdGUgdGl0bGUgb3B0aW9ucyBwcm92aWRlZCcpO1xuXHRcdH1cblxuXHRcdGlmICghb3B0aW9ucy5zaXRlVXJsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIHNpdGUgdXJsIG9wdGlvbnMgcHJvdmlkZWQnKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZ2V0R2l0aHViRGF0YShnaXRodWJQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEdpdGh1YkRhdGE+IHtcblx0XHRjb25zdCBwYXRocyA9IGdpdGh1YlBhdGguc3BsaXQoJy8nKTtcblx0XHRjb25zdCBvcHRpb25zOiBHaXRodWJPcHRpb25zID0ge1xuXHRcdFx0YXV0aG9yOiBwYXRoc1swXSxcblx0XHRcdHJlcG86IHBhdGhzWzFdLFxuXHRcdH07XG5cdFx0Y29uc3QgZ2l0aHViID0gbmV3IEdpdGh1YihvcHRpb25zKTtcblx0XHRyZXR1cm4gZ2l0aHViLmdldERhdGEoKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRUZW1wbGF0ZXMob3B0aW9uczogV3JpdHJPcHRpb25zKTogUHJvbWlzZTxXcml0clRlbXBsYXRlcz4ge1xuXHRcdGNvbnN0IHRlbXBsYXRlczogV3JpdHJUZW1wbGF0ZXMgPSB7XG5cdFx0XHRpbmRleDogJycsXG5cdFx0XHRyZWxlYXNlczogJycsXG5cdFx0fTtcblxuXHRcdGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKG9wdGlvbnMudGVtcGxhdGVQYXRoKSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlRmlsZShvcHRpb25zLnRlbXBsYXRlUGF0aCwgJ2luZGV4Jyk7XG5cdFx0XHRpZiAoaW5kZXgpIHtcblx0XHRcdFx0dGVtcGxhdGVzLmluZGV4ID0gaW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJlbGVhc2VzID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZUZpbGUoXG5cdFx0XHRcdG9wdGlvbnMudGVtcGxhdGVQYXRoLFxuXHRcdFx0XHQncmVsZWFzZXMnLFxuXHRcdFx0KTtcblx0XHRcdGlmIChyZWxlYXNlcykge1xuXHRcdFx0XHR0ZW1wbGF0ZXMucmVsZWFzZXMgPSByZWxlYXNlcztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBObyB0ZW1wbGF0ZSBwYXRoIGZvdW5kIGF0ICR7b3B0aW9ucy50ZW1wbGF0ZVBhdGh9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRlbXBsYXRlcztcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRUZW1wbGF0ZUZpbGUoXG5cdFx0cGF0aDogc3RyaW5nLFxuXHRcdG5hbWU6IHN0cmluZyxcblx0KTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcblx0XHRsZXQgcmVzdWx0O1xuXHRcdGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihwYXRoKTtcblx0XHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcblx0XHRcdGNvbnN0IGZpbGVOYW1lID0gZmlsZS5zcGxpdCgnLicpO1xuXHRcdFx0aWYgKGZpbGVOYW1lWzBdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGZpbGUudG9TdHJpbmcoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBidWlsZFJvYm90c1BhZ2Uob3B0aW9uczogV3JpdHJPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qge3NpdGVQYXRofSA9IG9wdGlvbnM7XG5cdFx0Y29uc3Qge291dHB1dFBhdGh9ID0gb3B0aW9ucztcblx0XHRjb25zdCByb2JvdHNQYXRoID0gYCR7b3V0cHV0UGF0aH0vcm9ib3RzLnR4dGA7XG5cblx0XHRhd2FpdCBmcy5lbnN1cmVEaXIob3V0cHV0UGF0aCk7XG5cblx0XHRhd2FpdCAoKGF3YWl0IGZzLnBhdGhFeGlzdHMoYCR7c2l0ZVBhdGh9L3JvYm90cy50eHRgKSlcblx0XHRcdD8gZnMuY29weShgJHtzaXRlUGF0aH0vcm9ib3RzLnR4dGAsIHJvYm90c1BhdGgpXG5cdFx0XHQ6IGZzLndyaXRlRmlsZShyb2JvdHNQYXRoLCAnVXNlci1hZ2VudDogKlxcbkRpc2FsbG93OicpKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBidWlsZFNpdGVNYXBQYWdlKGRhdGE6IFdyaXRyRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNpdGVtYXBQYXRoID0gYCR7ZGF0YS5vdXRwdXRQYXRofS9zaXRlbWFwLnhtbGA7XG5cdFx0Y29uc3QgdXJscyA9IFt7dXJsOiBkYXRhLnNpdGVVcmx9LCB7dXJsOiBgJHtkYXRhLnNpdGVVcmx9L3JlbGVhc2VzYH1dO1xuXG5cdFx0bGV0IHhtbCA9ICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4nO1xuXHRcdHhtbCArPSAnPHVybHNldCB4bWxucz1cImh0dHA6Ly93d3cuc2l0ZW1hcHMub3JnL3NjaGVtYXMvc2l0ZW1hcC8wLjlcIj4nO1xuXG5cdFx0Zm9yIChjb25zdCB7dXJsfSBvZiB1cmxzKSB7XG5cdFx0XHR4bWwgKz0gJzx1cmw+Jztcblx0XHRcdHhtbCArPSBgPGxvYz4ke3VybH08L2xvYz5gO1xuXHRcdFx0eG1sICs9ICc8L3VybD4nO1xuXHRcdH1cblxuXHRcdHhtbCArPSAnPC91cmxzZXQ+JztcblxuXHRcdGF3YWl0IGZzLmVuc3VyZURpcihkYXRhLm91dHB1dFBhdGgpO1xuXG5cdFx0YXdhaXQgZnMud3JpdGVGaWxlKHNpdGVtYXBQYXRoLCB4bWwsICd1dGY4Jyk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgYnVpbGRJbmRleFBhZ2UoZGF0YTogV3JpdHJEYXRhKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKGRhdGEudGVtcGxhdGVzKSB7XG5cdFx0XHRjb25zdCBpbmRleFBhdGggPSBgJHtkYXRhLm91dHB1dFBhdGh9L2luZGV4Lmh0bWxgO1xuXG5cdFx0XHRhd2FpdCBmcy5lbnN1cmVEaXIoZGF0YS5vdXRwdXRQYXRoKTtcblxuXHRcdFx0Y29uc3QgaW5kZXhUZW1wbGF0ZSA9IGAke2RhdGEudGVtcGxhdGVQYXRofS8ke2RhdGEudGVtcGxhdGVzLmluZGV4fWA7XG5cblx0XHRcdGNvbnN0IGh0bWxSZWFkbWUgPSBhd2FpdCB0aGlzLmJ1aWxkUmVhZG1lU2VjdGlvbihkYXRhKTtcblxuXHRcdFx0Y29uc3QgaW5kZXhDb250ZW50ID0gYXdhaXQgdGhpcy5fZWN0by5yZW5kZXJGcm9tRmlsZShcblx0XHRcdFx0aW5kZXhUZW1wbGF0ZSxcblx0XHRcdFx0ey4uLmRhdGEsIGNvbnRlbnQ6IGh0bWxSZWFkbWV9LFxuXHRcdFx0XHRkYXRhLnRlbXBsYXRlUGF0aCxcblx0XHRcdCk7XG5cdFx0XHRhd2FpdCBmcy53cml0ZUZpbGUoaW5kZXhQYXRoLCBpbmRleENvbnRlbnQsICd1dGY4Jyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignTm8gdGVtcGxhdGVzIGZvdW5kJyk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGJ1aWxkUmVsZWFzZVBhZ2UoZGF0YTogV3JpdHJEYXRhKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKGRhdGEuZ2l0aHViICYmIGRhdGEudGVtcGxhdGVzKSB7XG5cdFx0XHRjb25zdCByZWxlYXNlc1BhdGggPSBgJHtkYXRhLm91dHB1dFBhdGh9L3JlbGVhc2VzL2luZGV4Lmh0bWxgO1xuXHRcdFx0Y29uc3QgcmVsZWFzZU91dHB1dFBhdGggPSBgJHtkYXRhLm91dHB1dFBhdGh9L3JlbGVhc2VzYDtcblxuXHRcdFx0YXdhaXQgZnMuZW5zdXJlRGlyKHJlbGVhc2VPdXRwdXRQYXRoKTtcblxuXHRcdFx0Y29uc3QgcmVsZWFzZXNUZW1wbGF0ZSA9IGAke2RhdGEudGVtcGxhdGVQYXRofS8ke2RhdGEudGVtcGxhdGVzLnJlbGVhc2VzfWA7XG5cdFx0XHRjb25zdCByZWxlYXNlc0NvbnRlbnQgPSBhd2FpdCB0aGlzLl9lY3RvLnJlbmRlckZyb21GaWxlKFxuXHRcdFx0XHRyZWxlYXNlc1RlbXBsYXRlLFxuXHRcdFx0XHRkYXRhLFxuXHRcdFx0XHRkYXRhLnRlbXBsYXRlUGF0aCxcblx0XHRcdCk7XG5cdFx0XHRhd2FpdCBmcy53cml0ZUZpbGUocmVsZWFzZXNQYXRoLCByZWxlYXNlc0NvbnRlbnQsICd1dGY4Jyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignTm8gZ2l0aHViIGRhdGEgZm91bmQnKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgYnVpbGRSZWFkbWVTZWN0aW9uKGRhdGE6IFdyaXRyRGF0YSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0bGV0IGh0bWxSZWFkbWUgPSAnJztcblx0XHRpZiAoZnMuZXhpc3RzU3luYyhgJHtkYXRhLnNpdGVQYXRofS9SRUFETUUubWRgKSkge1xuXHRcdFx0Y29uc3QgcmVhZG1lQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhcblx0XHRcdFx0YCR7ZGF0YS5zaXRlUGF0aH0vUkVBRE1FLm1kYCxcblx0XHRcdFx0J3V0ZjgnLFxuXHRcdFx0KTtcblx0XHRcdGh0bWxSZWFkbWUgPSBhd2FpdCB0aGlzLl9lY3RvLm1hcmtkb3duLnJlbmRlcihyZWFkbWVDb250ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaHRtbFJlYWRtZTtcblx0fVxufVxuIl19
package/dist/console.d.ts DELETED
@@ -1,22 +0,0 @@
1
- export declare class WritrConsole {
2
- log(message: string): void;
3
- error(message: string): void;
4
- warn(message: string): void;
5
- printHelp(): void;
6
- parseProcessArgv(argv: string[]): WritrConsoleProcess;
7
- getCommand(argv: string[]): string | undefined;
8
- getArguments(argv: string[]): WritrConsoleArguments;
9
- }
10
- type WritrConsoleProcess = {
11
- argv: string[];
12
- command: string | undefined;
13
- args: WritrConsoleArguments;
14
- };
15
- type WritrConsoleArguments = {
16
- sitePath: string | undefined;
17
- templatePath: string | undefined;
18
- output: string | undefined;
19
- watch: boolean;
20
- port: number;
21
- };
22
- export {};
package/dist/console.js DELETED
@@ -1,120 +0,0 @@
1
- import path from 'node:path';
2
- import process from 'node:process';
3
- export class WritrConsole {
4
- log(message) {
5
- console.log(message);
6
- }
7
- error(message) {
8
- console.error(message);
9
- }
10
- warn(message) {
11
- console.warn(message);
12
- }
13
- printHelp() {
14
- console.log(' Usage: writr [command] [arguments]');
15
- console.log();
16
- console.log(' Commands:');
17
- console.log(' init Initialize a new project');
18
- console.log(' build Build the project. By default just npx writr will build the project if it finds a ./site folder');
19
- console.log(' serve Serve the project as a local website');
20
- console.log(' help Print this help');
21
- console.log(' version Print the version');
22
- console.log();
23
- console.log(' Arguments Build:');
24
- console.log(' -w, --watch watch for changes and rebuild');
25
- console.log(' -s, --site Set the path where site files are located');
26
- console.log(' -o, --outputPath Set the output directory. Default is ./site/dist');
27
- console.log(' -t, --templatePath Set the custom template to use');
28
- console.log();
29
- console.log(' Arguments serve:');
30
- console.log(' -p, --port Set the port number used with serve');
31
- console.log(' -w, --watch watch for changes and rebuild');
32
- console.log(' -s, --site Set the path where site files are located');
33
- }
34
- parseProcessArgv(argv) {
35
- const command = this.getCommand(argv);
36
- const args = this.getArguments(argv);
37
- return {
38
- argv,
39
- command,
40
- args,
41
- };
42
- }
43
- getCommand(argv) {
44
- let result;
45
- for (const arg of argv) {
46
- // eslint-disable-next-line default-case
47
- switch (arg) {
48
- case 'init': {
49
- result = 'init';
50
- break;
51
- }
52
- case 'build': {
53
- result = 'build';
54
- break;
55
- }
56
- case 'serve': {
57
- result = 'serve';
58
- break;
59
- }
60
- case 'help': {
61
- result = 'help';
62
- break;
63
- }
64
- case 'version': {
65
- result = arg;
66
- break;
67
- }
68
- }
69
- }
70
- return result;
71
- }
72
- getArguments(argv) {
73
- const args = {
74
- sitePath: '',
75
- templatePath: '',
76
- output: '',
77
- watch: false,
78
- port: 3000,
79
- };
80
- for (let i = 0; i < argv.length; i++) {
81
- const arg = argv[i];
82
- // eslint-disable-next-line default-case
83
- switch (arg) {
84
- case '-p':
85
- case '--port': {
86
- const portString = argv[i + 1];
87
- if (portString !== undefined) {
88
- args.port = Number.parseInt(portString, 10);
89
- }
90
- break;
91
- }
92
- case '-o':
93
- case '--output': {
94
- args.output = argv[i + 1];
95
- args.output = path.join(process.cwd(), args.output);
96
- break;
97
- }
98
- case '-w':
99
- case '--watch': {
100
- args.watch = true;
101
- break;
102
- }
103
- case '-s':
104
- case '--site': {
105
- args.sitePath = argv[i + 1];
106
- args.sitePath = path.join(process.cwd(), args.sitePath);
107
- break;
108
- }
109
- case '-t':
110
- case '--templatePath': {
111
- args.templatePath = argv[i + 1];
112
- args.templatePath = path.join(process.cwd(), args.templatePath);
113
- break;
114
- }
115
- }
116
- }
117
- return args;
118
- }
119
- }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFbkMsTUFBTSxPQUFPLFlBQVk7SUFDeEIsR0FBRyxDQUFDLE9BQWU7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQWU7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWU7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsU0FBUztRQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUNyRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLHFIQUFxSCxDQUFDLENBQUM7UUFDbkksT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDckQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUN6RSxPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7UUFDckYsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1FBQzVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUMxRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1FQUFtRSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVNLGdCQUFnQixDQUFDLElBQWM7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE9BQU87WUFDTixJQUFJO1lBQ0osT0FBTztZQUNQLElBQUk7U0FDSixDQUFDO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFjO1FBQy9CLElBQUksTUFBTSxDQUFDO1FBQ1gsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4Qix3Q0FBd0M7WUFDeEMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDYixLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ2IsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFDaEIsTUFBTTtnQkFDUCxDQUFDO2dCQUVELEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDZCxNQUFNLEdBQUcsT0FBTyxDQUFDO29CQUNqQixNQUFNO2dCQUNQLENBQUM7Z0JBRUQsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNkLE1BQU0sR0FBRyxPQUFPLENBQUM7b0JBQ2pCLE1BQU07Z0JBQ1AsQ0FBQztnQkFFRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ2IsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFDaEIsTUFBTTtnQkFDUCxDQUFDO2dCQUVELEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQztvQkFDYixNQUFNO2dCQUNQLENBQUM7WUFDRixDQUFDO1FBQ0YsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFjO1FBQ2pDLE1BQU0sSUFBSSxHQUFHO1lBQ1osUUFBUSxFQUFFLEVBQUU7WUFDWixZQUFZLEVBQUUsRUFBRTtZQUNoQixNQUFNLEVBQUUsRUFBRTtZQUNWLEtBQUssRUFBRSxLQUFLO1lBQ1osSUFBSSxFQUFFLElBQUk7U0FDVixDQUFDO1FBQ0YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsd0NBQXdDO1lBQ3hDLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxJQUFJLENBQUM7Z0JBQ1YsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNmLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUM5QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM3QyxDQUFDO29CQUVELE1BQU07Z0JBQ1AsQ0FBQztnQkFFRCxLQUFLLElBQUksQ0FBQztnQkFDVixLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BELE1BQU07Z0JBQ1AsQ0FBQztnQkFFRCxLQUFLLElBQUksQ0FBQztnQkFDVixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUNsQixNQUFNO2dCQUNQLENBQUM7Z0JBRUQsS0FBSyxJQUFJLENBQUM7Z0JBQ1YsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hELE1BQU07Z0JBQ1AsQ0FBQztnQkFFRCxLQUFLLElBQUksQ0FBQztnQkFDVixLQUFLLGdCQUFnQixDQUFDLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDaEUsTUFBTTtnQkFDUCxDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5leHBvcnQgY2xhc3MgV3JpdHJDb25zb2xlIHtcblx0bG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuXHR9XG5cblx0ZXJyb3IobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc29sZS5lcnJvcihtZXNzYWdlKTtcblx0fVxuXG5cdHdhcm4obWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc29sZS53YXJuKG1lc3NhZ2UpO1xuXHR9XG5cblx0cHJpbnRIZWxwKCk6IHZvaWQge1xuXHRcdGNvbnNvbGUubG9nKCcgICBVc2FnZTogd3JpdHIgW2NvbW1hbmRdIFthcmd1bWVudHNdJyk7XG5cdFx0Y29uc29sZS5sb2coKTtcblx0XHRjb25zb2xlLmxvZygnICAgQ29tbWFuZHM6Jyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgaW5pdCAgICAgICAgICAgSW5pdGlhbGl6ZSBhIG5ldyBwcm9qZWN0Jyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgYnVpbGQgICAgICAgICAgQnVpbGQgdGhlIHByb2plY3QuIEJ5IGRlZmF1bHQganVzdCBucHggd3JpdHIgd2lsbCBidWlsZCB0aGUgcHJvamVjdCBpZiBpdCBmaW5kcyBhIC4vc2l0ZSBmb2xkZXInKTtcblx0XHRjb25zb2xlLmxvZygnICAgICBzZXJ2ZSAgICAgICAgICBTZXJ2ZSB0aGUgcHJvamVjdCBhcyBhIGxvY2FsIHdlYnNpdGUnKTtcblx0XHRjb25zb2xlLmxvZygnICAgICBoZWxwICAgICAgICAgICBQcmludCB0aGlzIGhlbHAnKTtcblx0XHRjb25zb2xlLmxvZygnICAgICB2ZXJzaW9uICAgICAgICBQcmludCB0aGUgdmVyc2lvbicpO1xuXHRcdGNvbnNvbGUubG9nKCk7XG5cdFx0Y29uc29sZS5sb2coJyAgIEFyZ3VtZW50cyBCdWlsZDonKTtcblx0XHRjb25zb2xlLmxvZygnICAgICAtdywgLS13YXRjaCAgICAgICAgICAgIHdhdGNoIGZvciBjaGFuZ2VzIGFuZCByZWJ1aWxkJyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgLXMsIC0tc2l0ZSAgICAgICAgICAgICBTZXQgdGhlIHBhdGggd2hlcmUgc2l0ZSBmaWxlcyBhcmUgbG9jYXRlZCcpO1xuXHRcdGNvbnNvbGUubG9nKCcgICAgIC1vLCAtLW91dHB1dFBhdGggICAgICAgU2V0IHRoZSBvdXRwdXQgZGlyZWN0b3J5LiBEZWZhdWx0IGlzIC4vc2l0ZS9kaXN0Jyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgLXQsIC0tdGVtcGxhdGVQYXRoICAgICBTZXQgdGhlIGN1c3RvbSB0ZW1wbGF0ZSB0byB1c2UnKTtcblx0XHRjb25zb2xlLmxvZygpO1xuXHRcdGNvbnNvbGUubG9nKCcgICBBcmd1bWVudHMgc2VydmU6Jyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgLXAsIC0tcG9ydCAgICAgICAgIFNldCB0aGUgcG9ydCBudW1iZXIgdXNlZCB3aXRoIHNlcnZlJyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgLXcsIC0td2F0Y2ggICAgICAgIHdhdGNoIGZvciBjaGFuZ2VzIGFuZCByZWJ1aWxkJyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgLXMsIC0tc2l0ZSAgICAgICAgIFNldCB0aGUgcGF0aCB3aGVyZSBzaXRlIGZpbGVzIGFyZSBsb2NhdGVkJyk7XG5cdH1cblxuXHRwdWJsaWMgcGFyc2VQcm9jZXNzQXJndihhcmd2OiBzdHJpbmdbXSk6IFdyaXRyQ29uc29sZVByb2Nlc3Mge1xuXHRcdGNvbnN0IGNvbW1hbmQgPSB0aGlzLmdldENvbW1hbmQoYXJndik7XG5cdFx0Y29uc3QgYXJncyA9IHRoaXMuZ2V0QXJndW1lbnRzKGFyZ3YpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRhcmd2LFxuXHRcdFx0Y29tbWFuZCxcblx0XHRcdGFyZ3MsXG5cdFx0fTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDb21tYW5kKGFyZ3Y6IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgcmVzdWx0O1xuXHRcdGZvciAoY29uc3QgYXJnIG9mIGFyZ3YpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2Vcblx0XHRcdHN3aXRjaCAoYXJnKSB7XG5cdFx0XHRcdGNhc2UgJ2luaXQnOiB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2luaXQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FzZSAnYnVpbGQnOiB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2J1aWxkJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJ3NlcnZlJzoge1xuXHRcdFx0XHRcdHJlc3VsdCA9ICdzZXJ2ZSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYXNlICdoZWxwJzoge1xuXHRcdFx0XHRcdHJlc3VsdCA9ICdoZWxwJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJ3ZlcnNpb24nOiB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gYXJnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHB1YmxpYyBnZXRBcmd1bWVudHMoYXJndjogc3RyaW5nW10pOiBXcml0ckNvbnNvbGVBcmd1bWVudHMge1xuXHRcdGNvbnN0IGFyZ3MgPSB7XG5cdFx0XHRzaXRlUGF0aDogJycsXG5cdFx0XHR0ZW1wbGF0ZVBhdGg6ICcnLFxuXHRcdFx0b3V0cHV0OiAnJyxcblx0XHRcdHdhdGNoOiBmYWxzZSxcblx0XHRcdHBvcnQ6IDMwMDAsXG5cdFx0fTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVmYXVsdC1jYXNlXG5cdFx0XHRzd2l0Y2ggKGFyZykge1xuXHRcdFx0XHRjYXNlICctcCc6XG5cdFx0XHRcdGNhc2UgJy0tcG9ydCc6IHtcblx0XHRcdFx0XHRjb25zdCBwb3J0U3RyaW5nID0gYXJndltpICsgMV07XG5cdFx0XHRcdFx0aWYgKHBvcnRTdHJpbmcgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0YXJncy5wb3J0ID0gTnVtYmVyLnBhcnNlSW50KHBvcnRTdHJpbmcsIDEwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJy1vJzpcblx0XHRcdFx0Y2FzZSAnLS1vdXRwdXQnOiB7XG5cdFx0XHRcdFx0YXJncy5vdXRwdXQgPSBhcmd2W2kgKyAxXTtcblx0XHRcdFx0XHRhcmdzLm91dHB1dCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBhcmdzLm91dHB1dCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYXNlICctdyc6XG5cdFx0XHRcdGNhc2UgJy0td2F0Y2gnOiB7XG5cdFx0XHRcdFx0YXJncy53YXRjaCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYXNlICctcyc6XG5cdFx0XHRcdGNhc2UgJy0tc2l0ZSc6IHtcblx0XHRcdFx0XHRhcmdzLnNpdGVQYXRoID0gYXJndltpICsgMV07XG5cdFx0XHRcdFx0YXJncy5zaXRlUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBhcmdzLnNpdGVQYXRoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJy10Jzpcblx0XHRcdFx0Y2FzZSAnLS10ZW1wbGF0ZVBhdGgnOiB7XG5cdFx0XHRcdFx0YXJncy50ZW1wbGF0ZVBhdGggPSBhcmd2W2kgKyAxXTtcblx0XHRcdFx0XHRhcmdzLnRlbXBsYXRlUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBhcmdzLnRlbXBsYXRlUGF0aCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYXJncztcblx0fVxufVxuXG50eXBlIFdyaXRyQ29uc29sZVByb2Nlc3MgPSB7XG5cdGFyZ3Y6IHN0cmluZ1tdO1xuXHRjb21tYW5kOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGFyZ3M6IFdyaXRyQ29uc29sZUFyZ3VtZW50cztcbn07XG5cbnR5cGUgV3JpdHJDb25zb2xlQXJndW1lbnRzID0ge1xuXHRzaXRlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR0ZW1wbGF0ZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0b3V0cHV0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHdhdGNoOiBib29sZWFuO1xuXHRwb3J0OiBudW1iZXI7XG59O1xuXG4iXX0=
package/dist/github.d.ts DELETED
@@ -1,22 +0,0 @@
1
- export type GithubOptions = {
2
- api?: string | undefined;
3
- author: string;
4
- repo: string;
5
- };
6
- export type GithubData = {
7
- releases: Record<string, unknown>;
8
- contributors: Record<string, unknown>;
9
- };
10
- export declare class Github {
11
- options: {
12
- api: string;
13
- author: string;
14
- repo: string;
15
- };
16
- constructor(options: GithubOptions);
17
- getData(): Promise<GithubData>;
18
- getReleases(): Promise<any>;
19
- getContributors(): Promise<any>;
20
- parseOptions(options: GithubOptions): void;
21
- private addAnchorLink;
22
- }
package/dist/github.js DELETED
@@ -1,74 +0,0 @@
1
- import axios from 'axios';
2
- export class Github {
3
- options = {
4
- api: 'https://api.github.com',
5
- author: '',
6
- repo: '',
7
- };
8
- constructor(options) {
9
- this.parseOptions(options);
10
- }
11
- async getData() {
12
- const data = {
13
- releases: {},
14
- contributors: {},
15
- };
16
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
17
- data.releases = await this.getReleases();
18
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
19
- data.contributors = await this.getContributors();
20
- return data;
21
- }
22
- async getReleases() {
23
- const url = `${this.options.api}/repos/${this.options.author}/${this.options.repo}/releases`;
24
- try {
25
- const result = await axios.get(url);
26
- if (result && result.data.length > 0) {
27
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
28
- return this.addAnchorLink(result.data);
29
- }
30
- return [];
31
- }
32
- catch (error) {
33
- const typedError = error;
34
- if (typedError.response?.status === 404) {
35
- throw new Error(`Repository ${this.options.author}/${this.options.repo} not found.`);
36
- }
37
- throw error;
38
- }
39
- }
40
- async getContributors() {
41
- const url = `${this.options.api}/repos/${this.options.author}/${this.options.repo}/contributors`;
42
- try {
43
- const result = await axios.get(url);
44
- if (result && result.data.length > 0) {
45
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
46
- return result.data;
47
- }
48
- }
49
- catch (error) {
50
- const typedError = error;
51
- if (typedError.response?.status === 404) {
52
- throw new Error(`Repository ${this.options.author}/${this.options.repo} not found.`);
53
- }
54
- throw error;
55
- }
56
- }
57
- parseOptions(options) {
58
- if (options.api) {
59
- this.options.api = options.api;
60
- }
61
- this.options.author = options.author;
62
- this.options.repo = options.repo;
63
- }
64
- addAnchorLink(data) {
65
- return data.map(release => {
66
- const regex = /(?<!]\()(https:\/\/[\w./]+)(?!\))/g;
67
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
68
- release.body = release.body.replaceAll(regex, '[$1]($1)');
69
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
70
- return release;
71
- });
72
- }
73
- }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dpdGh1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFhMUIsTUFBTSxPQUFPLE1BQU07SUFDbEIsT0FBTyxHQUFHO1FBQ1QsR0FBRyxFQUFFLHdCQUF3QjtRQUM3QixNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxFQUFFO0tBQ1IsQ0FBQztJQUVGLFlBQVksT0FBc0I7UUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWixNQUFNLElBQUksR0FBRztZQUNaLFFBQVEsRUFBRSxFQUFFO1lBQ1osWUFBWSxFQUFFLEVBQUU7U0FDaEIsQ0FBQztRQUNGLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRWpELE9BQU8sSUFBa0IsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVc7UUFDaEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDO1FBQzdGLElBQUksQ0FBQztZQUNKLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVwQyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsK0RBQStEO2dCQUMvRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQWEsQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFFRCxPQUFPLEVBQUUsQ0FBQztRQUNYLENBQUM7UUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sVUFBVSxHQUFHLEtBQXFDLENBQUM7WUFDekQsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQztZQUN0RixDQUFDO1lBRUQsTUFBTSxLQUFLLENBQUM7UUFDYixDQUFDO0lBQ0YsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLGVBQWUsQ0FBQztRQUNqRyxJQUFJLENBQUM7WUFDSixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLCtEQUErRDtnQkFDL0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3BCLENBQUM7UUFDRixDQUFDO1FBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztZQUN6QixNQUFNLFVBQVUsR0FBRyxLQUFxQyxDQUFDO1lBQ3pELElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUM7WUFDdEYsQ0FBQztZQUVELE1BQU0sS0FBSyxDQUFDO1FBQ2IsQ0FBQztJQUNGLENBQUM7SUFFTSxZQUFZLENBQUMsT0FBc0I7UUFDekMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBVztRQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekIsTUFBTSxLQUFLLEdBQUcsb0NBQW9DLENBQUM7WUFDbkQsc0dBQXNHO1lBQ3RHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzFELCtEQUErRDtZQUMvRCxPQUFPLE9BQU8sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cbmV4cG9ydCB0eXBlIEdpdGh1Yk9wdGlvbnMgPSB7XG5cdGFwaT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0YXV0aG9yOiBzdHJpbmc7XG5cdHJlcG86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdpdGh1YkRhdGEgPSB7XG5cdHJlbGVhc2VzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0Y29udHJpYnV0b3JzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCBjbGFzcyBHaXRodWIge1xuXHRvcHRpb25zID0ge1xuXHRcdGFwaTogJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nLFxuXHRcdGF1dGhvcjogJycsXG5cdFx0cmVwbzogJycsXG5cdH07XG5cblx0Y29uc3RydWN0b3Iob3B0aW9uczogR2l0aHViT3B0aW9ucykge1xuXHRcdHRoaXMucGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuXHR9XG5cblx0YXN5bmMgZ2V0RGF0YSgpOiBQcm9taXNlPEdpdGh1YkRhdGE+IHtcblx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0cmVsZWFzZXM6IHt9LFxuXHRcdFx0Y29udHJpYnV0b3JzOiB7fSxcblx0XHR9O1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcblx0XHRkYXRhLnJlbGVhc2VzID0gYXdhaXQgdGhpcy5nZXRSZWxlYXNlcygpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcblx0XHRkYXRhLmNvbnRyaWJ1dG9ycyA9IGF3YWl0IHRoaXMuZ2V0Q29udHJpYnV0b3JzKCk7XG5cblx0XHRyZXR1cm4gZGF0YSBhcyBHaXRodWJEYXRhO1xuXHR9XG5cblx0YXN5bmMgZ2V0UmVsZWFzZXMoKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCB1cmwgPSBgJHt0aGlzLm9wdGlvbnMuYXBpfS9yZXBvcy8ke3RoaXMub3B0aW9ucy5hdXRob3J9LyR7dGhpcy5vcHRpb25zLnJlcG99L3JlbGVhc2VzYDtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgYXhpb3MuZ2V0KHVybCk7XG5cblx0XHRcdGlmIChyZXN1bHQgJiYgcmVzdWx0LmRhdGEubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkQW5jaG9yTGluayhyZXN1bHQuZGF0YSBhcyBhbnlbXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBbXTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgdHlwZWRFcnJvciA9IGVycm9yIGFzIHtyZXNwb25zZToge3N0YXR1czogbnVtYmVyfX07XG5cdFx0XHRpZiAodHlwZWRFcnJvci5yZXNwb25zZT8uc3RhdHVzID09PSA0MDQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBSZXBvc2l0b3J5ICR7dGhpcy5vcHRpb25zLmF1dGhvcn0vJHt0aGlzLm9wdGlvbnMucmVwb30gbm90IGZvdW5kLmApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBnZXRDb250cmlidXRvcnMoKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCB1cmwgPSBgJHt0aGlzLm9wdGlvbnMuYXBpfS9yZXBvcy8ke3RoaXMub3B0aW9ucy5hdXRob3J9LyR7dGhpcy5vcHRpb25zLnJlcG99L2NvbnRyaWJ1dG9yc2A7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF4aW9zLmdldCh1cmwpO1xuXHRcdFx0aWYgKHJlc3VsdCAmJiByZXN1bHQuZGF0YS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0LmRhdGE7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IHR5cGVkRXJyb3IgPSBlcnJvciBhcyB7cmVzcG9uc2U6IHtzdGF0dXM6IG51bWJlcn19O1xuXHRcdFx0aWYgKHR5cGVkRXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDA0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgUmVwb3NpdG9yeSAke3RoaXMub3B0aW9ucy5hdXRob3J9LyR7dGhpcy5vcHRpb25zLnJlcG99IG5vdCBmb3VuZC5gKTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHBhcnNlT3B0aW9ucyhvcHRpb25zOiBHaXRodWJPcHRpb25zKSB7XG5cdFx0aWYgKG9wdGlvbnMuYXBpKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuYXBpID0gb3B0aW9ucy5hcGk7XG5cdFx0fVxuXG5cdFx0dGhpcy5vcHRpb25zLmF1dGhvciA9IG9wdGlvbnMuYXV0aG9yO1xuXHRcdHRoaXMub3B0aW9ucy5yZXBvID0gb3B0aW9ucy5yZXBvO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRBbmNob3JMaW5rKGRhdGE6IGFueVtdKTogYW55W10ge1xuXHRcdHJldHVybiBkYXRhLm1hcChyZWxlYXNlID0+IHtcblx0XHRcdGNvbnN0IHJlZ2V4ID0gLyg/PCFdXFwoKShodHRwczpcXC9cXC9bXFx3Li9dKykoPyFcXCkpL2c7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcblx0XHRcdHJlbGVhc2UuYm9keSA9IHJlbGVhc2UuYm9keS5yZXBsYWNlQWxsKHJlZ2V4LCAnWyQxXSgkMSknKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuXHRcdFx0cmV0dXJuIHJlbGVhc2U7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -1,10 +0,0 @@
1
- export declare const MarkdownHelper: {
2
- fence(): {
3
- attributes: {
4
- language: {
5
- type: StringConstructor;
6
- };
7
- };
8
- transform(node: any, config: any): import("@markdoc/markdoc").Tag<"pre", {}>;
9
- };
10
- };
@@ -1,24 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call */
2
- import pkg from '@markdoc/markdoc';
3
- // eslint-disable-next-line @typescript-eslint/naming-convention
4
- const { Tag } = pkg;
5
- // eslint-disable-next-line @typescript-eslint/naming-convention
6
- export const MarkdownHelper = {
7
- fence() {
8
- return {
9
- attributes: {
10
- language: { type: String },
11
- },
12
- transform(node, config) {
13
- const attributes = node.transformAttributes(config);
14
- const processedChildren = node.transformChildren(config);
15
- const languageClass = attributes.language ? `language-${attributes.language}` : '';
16
- const codeAttributes = languageClass ? { class: languageClass } : {};
17
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
18
- const codeTag = new Tag('code', codeAttributes, processedChildren.join(''));
19
- return new Tag('pre', {}, [codeTag]);
20
- },
21
- };
22
- },
23
- };
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9tYXJrZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrRkFBK0Y7QUFDL0YsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFFbkMsZ0VBQWdFO0FBQ2hFLE1BQU0sRUFBQyxHQUFHLEVBQUMsR0FBRyxHQUFHLENBQUM7QUFFbEIsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUM3QixLQUFLO1FBQ0osT0FBTztZQUNOLFVBQVUsRUFBRTtnQkFDWCxRQUFRLEVBQUUsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFDO2FBQ3hCO1lBQ0QsU0FBUyxDQUFDLElBQVMsRUFBRSxNQUFXO2dCQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRXBELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6RCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuRixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRW5FLGlFQUFpRTtnQkFDakUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFNUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN0QyxDQUFDO1NBQ0QsQ0FBQztJQUNILENBQUM7Q0FDRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGwgKi9cbmltcG9ydCBwa2cgZnJvbSAnQG1hcmtkb2MvbWFya2RvYyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmNvbnN0IHtUYWd9ID0gcGtnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgTWFya2Rvd25IZWxwZXIgPSB7XG5cdGZlbmNlKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB7XG5cdFx0XHRcdGxhbmd1YWdlOiB7dHlwZTogU3RyaW5nfSxcblx0XHRcdH0sXG5cdFx0XHR0cmFuc2Zvcm0obm9kZTogYW55LCBjb25maWc6IGFueSkge1xuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gbm9kZS50cmFuc2Zvcm1BdHRyaWJ1dGVzKGNvbmZpZyk7XG5cblx0XHRcdFx0Y29uc3QgcHJvY2Vzc2VkQ2hpbGRyZW4gPSBub2RlLnRyYW5zZm9ybUNoaWxkcmVuKGNvbmZpZyk7XG5cdFx0XHRcdGNvbnN0IGxhbmd1YWdlQ2xhc3MgPSBhdHRyaWJ1dGVzLmxhbmd1YWdlID8gYGxhbmd1YWdlLSR7YXR0cmlidXRlcy5sYW5ndWFnZX1gIDogJyc7XG5cdFx0XHRcdGNvbnN0IGNvZGVBdHRyaWJ1dGVzID0gbGFuZ3VhZ2VDbGFzcyA/IHtjbGFzczogbGFuZ3VhZ2VDbGFzc30gOiB7fTtcblxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuXHRcdFx0XHRjb25zdCBjb2RlVGFnID0gbmV3IFRhZygnY29kZScsIGNvZGVBdHRyaWJ1dGVzLCBwcm9jZXNzZWRDaGlsZHJlbi5qb2luKCcnKSk7XG5cblx0XHRcdFx0cmV0dXJuIG5ldyBUYWcoJ3ByZScsIHt9LCBbY29kZVRhZ10pO1xuXHRcdFx0fSxcblx0XHR9O1xuXHR9LFxufTtcbiJdfQ==
package/dist/helpers.d.ts DELETED
@@ -1,7 +0,0 @@
1
- export declare class WritrHelpers {
2
- createDoc(path: string, destination: string, frontMatter?: Record<string, string>, contentFn?: (content: string) => string): void;
3
- getFrontMatterFromFile(path: string): Record<string, string>;
4
- getFrontMatter(content: string): Record<string, string>;
5
- setFrontMatterToFile(path: string, frontMatter: Record<string, string>): void;
6
- setFrontMatterInContent(content: string, frontMatter?: Record<string, string>): string;
7
- }
package/dist/helpers.js DELETED
@@ -1,58 +0,0 @@
1
- import fs from 'fs-extra';
2
- import yaml from 'js-yaml';
3
- export class WritrHelpers {
4
- createDoc(path, destination, frontMatter, contentFn) {
5
- const content = fs.readFileSync(path, 'utf8');
6
- let newContent = this.setFrontMatterInContent(content, frontMatter);
7
- if (contentFn) {
8
- newContent = contentFn(newContent);
9
- }
10
- fs.writeFileSync(destination, newContent, 'utf8');
11
- }
12
- getFrontMatterFromFile(path) {
13
- const content = fs.readFileSync(path, 'utf8');
14
- return this.getFrontMatter(content);
15
- }
16
- getFrontMatter(content) {
17
- // Use regular expressions to extract the FrontMatter
18
- const match = /^---\r?\n([\s\S]+?)\r?\n---/.exec(content);
19
- if (match) {
20
- // Parse the YAML string to an object
21
- const frontMatter = yaml.load(match[1]);
22
- return frontMatter;
23
- }
24
- // Return null or some default value if no FrontMatter is found
25
- return {};
26
- }
27
- setFrontMatterToFile(path, frontMatter) {
28
- const content = fs.readFileSync(path, 'utf8');
29
- const newContent = this.setFrontMatterInContent(content, frontMatter);
30
- fs.writeFileSync(path, newContent, 'utf8');
31
- }
32
- setFrontMatterInContent(content, frontMatter) {
33
- if (!frontMatter) {
34
- return content;
35
- }
36
- const match = /^---\r?\n([\s\S]+?)\r?\n---\r?\n([\s\S]*)/.exec(content);
37
- if (match) {
38
- // Parse the existing FrontMatter
39
- let oldFrontMatter = yaml.load(match[1]);
40
- // Set or replace values
41
- oldFrontMatter = {
42
- ...oldFrontMatter,
43
- ...frontMatter,
44
- };
45
- // Serialize the FrontMatter back to a YAML string
46
- const newYaml = yaml.dump(oldFrontMatter);
47
- // Replace the old FrontMatter with the new string
48
- const newContent = `---\n${newYaml}---\n${match[2]}`;
49
- // Write the result back to the file
50
- return newContent;
51
- }
52
- // No FrontMatter found, add it
53
- const newYaml = yaml.dump(frontMatter);
54
- const newContent = `---\n${newYaml}---\n${content}`;
55
- return newContent;
56
- }
57
- }
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQixPQUFPLElBQUksTUFBTSxTQUFTLENBQUM7QUFFM0IsTUFBTSxPQUFPLFlBQVk7SUFDeEIsU0FBUyxDQUFDLElBQVksRUFBRSxXQUFtQixFQUFFLFdBQW9DLEVBQUUsU0FBdUM7UUFDekgsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFOUMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVwRSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2YsVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFZO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWU7UUFDN0IscURBQXFEO1FBQ3JELE1BQU0sS0FBSyxHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1gscUNBQXFDO1lBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsT0FBTyxXQUFxQyxDQUFDO1FBQzlDLENBQUM7UUFFRCwrREFBK0Q7UUFDL0QsT0FBTyxFQUFFLENBQUM7SUFDWCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBWSxFQUFFLFdBQW1DO1FBQ3JFLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdEUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxPQUFlLEVBQUUsV0FBb0M7UUFDNUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sT0FBTyxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRywyQ0FBMkMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEUsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNYLGlDQUFpQztZQUNqQyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpDLHdCQUF3QjtZQUN4QixjQUFjLEdBQUc7Z0JBQ2hCLEdBQUcsY0FBeUM7Z0JBQzVDLEdBQUcsV0FBVzthQUNkLENBQUM7WUFFRixrREFBa0Q7WUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUUxQyxrREFBa0Q7WUFDbEQsTUFBTSxVQUFVLEdBQUcsUUFBUSxPQUFPLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFckQsb0NBQW9DO1lBQ3BDLE9BQU8sVUFBVSxDQUFDO1FBQ25CLENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxNQUFNLFVBQVUsR0FBRyxRQUFRLE9BQU8sUUFBUSxPQUFPLEVBQUUsQ0FBQztRQUNwRCxPQUFPLFVBQVUsQ0FBQztJQUNuQixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHlhbWwgZnJvbSAnanMteWFtbCc7XG5cbmV4cG9ydCBjbGFzcyBXcml0ckhlbHBlcnMge1xuXHRjcmVhdGVEb2MocGF0aDogc3RyaW5nLCBkZXN0aW5hdGlvbjogc3RyaW5nLCBmcm9udE1hdHRlcj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNvbnRlbnRGbj86IChjb250ZW50OiBzdHJpbmcpID0+IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKTtcblxuXHRcdGxldCBuZXdDb250ZW50ID0gdGhpcy5zZXRGcm9udE1hdHRlckluQ29udGVudChjb250ZW50LCBmcm9udE1hdHRlcik7XG5cblx0XHRpZiAoY29udGVudEZuKSB7XG5cdFx0XHRuZXdDb250ZW50ID0gY29udGVudEZuKG5ld0NvbnRlbnQpO1xuXHRcdH1cblxuXHRcdGZzLndyaXRlRmlsZVN5bmMoZGVzdGluYXRpb24sIG5ld0NvbnRlbnQsICd1dGY4Jyk7XG5cdH1cblxuXHRnZXRGcm9udE1hdHRlckZyb21GaWxlKHBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKTtcblx0XHRyZXR1cm4gdGhpcy5nZXRGcm9udE1hdHRlcihjb250ZW50KTtcblx0fVxuXG5cdGdldEZyb250TWF0dGVyKGNvbnRlbnQ6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuXHRcdC8vIFVzZSByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGV4dHJhY3QgdGhlIEZyb250TWF0dGVyXG5cdFx0Y29uc3QgbWF0Y2ggPSAvXi0tLVxccj9cXG4oW1xcc1xcU10rPylcXHI/XFxuLS0tLy5leGVjKGNvbnRlbnQpO1xuXHRcdGlmIChtYXRjaCkge1xuXHRcdFx0Ly8gUGFyc2UgdGhlIFlBTUwgc3RyaW5nIHRvIGFuIG9iamVjdFxuXHRcdFx0Y29uc3QgZnJvbnRNYXR0ZXIgPSB5YW1sLmxvYWQobWF0Y2hbMV0pO1xuXHRcdFx0cmV0dXJuIGZyb250TWF0dGVyIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIG51bGwgb3Igc29tZSBkZWZhdWx0IHZhbHVlIGlmIG5vIEZyb250TWF0dGVyIGlzIGZvdW5kXG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0c2V0RnJvbnRNYXR0ZXJUb0ZpbGUocGF0aDogc3RyaW5nLCBmcm9udE1hdHRlcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKTtcblx0XHRjb25zdCBuZXdDb250ZW50ID0gdGhpcy5zZXRGcm9udE1hdHRlckluQ29udGVudChjb250ZW50LCBmcm9udE1hdHRlcik7XG5cdFx0ZnMud3JpdGVGaWxlU3luYyhwYXRoLCBuZXdDb250ZW50LCAndXRmOCcpO1xuXHR9XG5cblx0c2V0RnJvbnRNYXR0ZXJJbkNvbnRlbnQoY29udGVudDogc3RyaW5nLCBmcm9udE1hdHRlcj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuXHRcdGlmICghZnJvbnRNYXR0ZXIpIHtcblx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdH1cblxuXHRcdGNvbnN0IG1hdGNoID0gL14tLS1cXHI/XFxuKFtcXHNcXFNdKz8pXFxyP1xcbi0tLVxccj9cXG4oW1xcc1xcU10qKS8uZXhlYyhjb250ZW50KTtcblxuXHRcdGlmIChtYXRjaCkge1xuXHRcdFx0Ly8gUGFyc2UgdGhlIGV4aXN0aW5nIEZyb250TWF0dGVyXG5cdFx0XHRsZXQgb2xkRnJvbnRNYXR0ZXIgPSB5YW1sLmxvYWQobWF0Y2hbMV0pO1xuXG5cdFx0XHQvLyBTZXQgb3IgcmVwbGFjZSB2YWx1ZXNcblx0XHRcdG9sZEZyb250TWF0dGVyID0ge1xuXHRcdFx0XHQuLi5vbGRGcm9udE1hdHRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0Li4uZnJvbnRNYXR0ZXIsXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBTZXJpYWxpemUgdGhlIEZyb250TWF0dGVyIGJhY2sgdG8gYSBZQU1MIHN0cmluZ1xuXHRcdFx0Y29uc3QgbmV3WWFtbCA9IHlhbWwuZHVtcChvbGRGcm9udE1hdHRlcik7XG5cblx0XHRcdC8vIFJlcGxhY2UgdGhlIG9sZCBGcm9udE1hdHRlciB3aXRoIHRoZSBuZXcgc3RyaW5nXG5cdFx0XHRjb25zdCBuZXdDb250ZW50ID0gYC0tLVxcbiR7bmV3WWFtbH0tLS1cXG4ke21hdGNoWzJdfWA7XG5cblx0XHRcdC8vIFdyaXRlIHRoZSByZXN1bHQgYmFjayB0byB0aGUgZmlsZVxuXHRcdFx0cmV0dXJuIG5ld0NvbnRlbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gTm8gRnJvbnRNYXR0ZXIgZm91bmQsIGFkZCBpdFxuXHRcdGNvbnN0IG5ld1lhbWwgPSB5YW1sLmR1bXAoZnJvbnRNYXR0ZXIpO1xuXHRcdGNvbnN0IG5ld0NvbnRlbnQgPSBgLS0tXFxuJHtuZXdZYW1sfS0tLVxcbiR7Y29udGVudH1gO1xuXHRcdHJldHVybiBuZXdDb250ZW50O1xuXHR9XG59XG5cbiJdfQ==