docula 0.3.6 → 0.4.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.
- package/README.md +108 -39
- package/bin/docula.mjs +8 -0
- package/dist/builder.d.ts +34 -0
- package/dist/builder.js +182 -0
- package/dist/console.d.ts +22 -0
- package/dist/console.js +120 -0
- package/dist/docula.d.ts +22 -21
- package/dist/docula.js +126 -165
- package/dist/github.d.ts +22 -0
- package/dist/github.js +74 -0
- package/dist/helpers/markdown.d.ts +10 -0
- package/dist/helpers/markdown.js +24 -0
- package/dist/helpers.d.ts +7 -0
- package/dist/helpers.js +58 -0
- package/dist/options.d.ts +12 -0
- package/dist/options.js +47 -0
- package/init/docula.config.cjs +10 -0
- package/init/favicon.ico +0 -0
- package/init/logo.png +0 -0
- package/init/variables.css +30 -0
- package/package.json +63 -95
- package/{init/_includes/assets/css/styles → template/css}/home.css +20 -18
- package/{init/_includes/assets/css/styles → template/css}/index.css +7 -0
- package/template/includes/footer.hbs +10 -0
- package/template/includes/header.hbs +17 -0
- package/template/includes/landing/content.hbs +63 -0
- package/template/includes/landing/hero.hbs +3 -0
- package/template/includes/scripts.hbs +4 -0
- package/template/index.hbs +16 -0
- package/template/releases.hbs +45 -0
- package/bin/docula.js +0 -7
- package/dist/config.d.ts +0 -21
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -78
- package/dist/config.js.map +0 -1
- package/dist/docula-plugin.d.ts +0 -9
- package/dist/docula-plugin.d.ts.map +0 -1
- package/dist/docula-plugin.js +0 -2
- package/dist/docula-plugin.js.map +0 -1
- package/dist/docula.d.ts.map +0 -1
- package/dist/docula.js.map +0 -1
- package/dist/eleventy/filters.d.ts +0 -2
- package/dist/eleventy/filters.d.ts.map +0 -1
- package/dist/eleventy/filters.js +0 -10
- package/dist/eleventy/filters.js.map +0 -1
- package/dist/eleventy/global-data.d.ts +0 -3
- package/dist/eleventy/global-data.d.ts.map +0 -1
- package/dist/eleventy/global-data.js +0 -2
- package/dist/eleventy/global-data.js.map +0 -1
- package/dist/eleventy/shortcodes.d.ts +0 -4
- package/dist/eleventy/shortcodes.d.ts.map +0 -1
- package/dist/eleventy/shortcodes.js +0 -18
- package/dist/eleventy/shortcodes.js.map +0 -1
- package/dist/eleventy.d.ts +0 -24
- package/dist/eleventy.d.ts.map +0 -1
- package/dist/eleventy.js +0 -82
- package/dist/eleventy.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -53
- package/dist/index.js.map +0 -1
- package/dist/logger.d.ts +0 -4
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -20
- package/dist/logger.js.map +0 -1
- package/dist/plugins/algolia.d.ts +0 -21
- package/dist/plugins/algolia.d.ts.map +0 -1
- package/dist/plugins/algolia.js +0 -54
- package/dist/plugins/algolia.js.map +0 -1
- package/dist/plugins/github.d.ts +0 -16
- package/dist/plugins/github.d.ts.map +0 -1
- package/dist/plugins/github.js +0 -68
- package/dist/plugins/github.js.map +0 -1
- package/dist/plugins/index.d.ts +0 -18
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -16
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/npm.d.ts +0 -14
- package/dist/plugins/npm.d.ts.map +0 -1
- package/dist/plugins/npm.js +0 -36
- package/dist/plugins/npm.js.map +0 -1
- package/dist/plugins/pagefind.d.ts +0 -10
- package/dist/plugins/pagefind.d.ts.map +0 -1
- package/dist/plugins/pagefind.js +0 -22
- package/dist/plugins/pagefind.js.map +0 -1
- package/dist/plugins/robots.d.ts +0 -14
- package/dist/plugins/robots.d.ts.map +0 -1
- package/dist/plugins/robots.js +0 -34
- package/dist/plugins/robots.js.map +0 -1
- package/dist/plugins/sitemap.d.ts +0 -11
- package/dist/plugins/sitemap.d.ts.map +0 -1
- package/dist/plugins/sitemap.js +0 -27
- package/dist/plugins/sitemap.js.map +0 -1
- package/dist/schemas.d.ts +0 -21
- package/dist/schemas.d.ts.map +0 -1
- package/dist/schemas.js +0 -25
- package/dist/schemas.js.map +0 -1
- package/dist/tools/__mocks__/inquirer-prompt.d.ts +0 -20
- package/dist/tools/__mocks__/inquirer-prompt.d.ts.map +0 -1
- package/dist/tools/__mocks__/inquirer-prompt.js +0 -19
- package/dist/tools/__mocks__/inquirer-prompt.js.map +0 -1
- package/dist/tools/__mocks__/path.d.ts +0 -5
- package/dist/tools/__mocks__/path.d.ts.map +0 -1
- package/dist/tools/__mocks__/path.js +0 -7
- package/dist/tools/__mocks__/path.js.map +0 -1
- package/dist/tools/inquirer-prompt.d.ts +0 -11
- package/dist/tools/inquirer-prompt.d.ts.map +0 -1
- package/dist/tools/inquirer-prompt.js +0 -139
- package/dist/tools/inquirer-prompt.js.map +0 -1
- package/dist/tools/path.d.ts +0 -4
- package/dist/tools/path.d.ts.map +0 -1
- package/dist/tools/path.js +0 -6
- package/dist/tools/path.js.map +0 -1
- package/dist/tools/tools.d.ts +0 -3
- package/dist/tools/tools.d.ts.map +0 -1
- package/dist/tools/tools.js +0 -10
- package/dist/tools/tools.js.map +0 -1
- package/dist/types/config.d.ts +0 -8
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -2
- package/dist/types/config.js.map +0 -1
- package/init/_data/site.json +0 -5
- package/init/_includes/assets/css/styles/search/algolia.css +0 -125
- package/init/_includes/assets/css/styles/search/pagefind.css +0 -60
- package/init/_includes/assets/css/styles/variables.css +0 -30
- package/init/_includes/assets/images/docula-logo-horizontal.webp +0 -0
- package/init/_includes/assets/images/logo.svg +0 -10
- package/init/_includes/doc.njk +0 -22
- package/init/_includes/landing/landingHero.njk +0 -8
- package/init/_includes/landing/singlePage.njk +0 -24
- package/init/_includes/multipage/header.njk +0 -23
- package/init/_includes/multipage/homeHeader.njk +0 -20
- package/init/_includes/multipage/main.njk +0 -47
- package/init/_includes/multipage/scripts.njk +0 -47
- package/init/_includes/multipage/searchEngine.njk +0 -5
- package/init/_includes/multipage/searchModal.njk +0 -19
- package/init/_includes/multipage/sidebar.njk +0 -50
- package/init/_includes/search/algolia.njk +0 -98
- package/init/_includes/search/pagefind.njk +0 -66
- package/init/_includes/shared/footer.njk +0 -4
- package/init/_includes/shared/head.njk +0 -15
- package/init/_includes/shared/highlightScript.njk +0 -6
- package/init/_includes/shared/homeData.njk +0 -49
- package/init/api/Readme.md +0 -3
- package/init/docs/Readme.md +0 -83
- package/init/docs/docs.json +0 -13
- package/init/index.njk +0 -28
- package/init/releases.njk +0 -38
- package/init/search-index.md +0 -14
- package/init/versions.njk +0 -40
- /package/{init/_includes/assets → template}/css/highlight/highlight.min.js +0 -0
- /package/{init/_includes/assets → template}/css/highlight/styles/base16/dracula.min.css +0 -0
package/README.md
CHANGED
|
@@ -1,51 +1,120 @@
|
|
|
1
|
-
|
|
1
|
+

|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
---
|
|
4
4
|
|
|
5
|
+
## Beautiful Website for Your Projects
|
|
5
6
|
[](https://github.com/jaredwray/docula/actions/workflows/tests.yaml)
|
|
6
|
-
[](https://github.com/jaredwray/docula/blob/master/LICENSE)
|
|
8
|
+
[](https://codecov.io/gh/jaredwray/docula)
|
|
9
|
+
[](https://npmjs.com/package/docula)
|
|
10
|
+
[](https://npmjs.com/package/docula)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
## Table of Contents
|
|
14
|
+
- [Features](#features)
|
|
15
|
+
- [Getting Started](#getting-started)
|
|
16
|
+
- [Using Your own Template](#using-your-own-template)
|
|
17
|
+
- [Building Multiple Pages](#building-multiple-pages)
|
|
18
|
+
- [Helper Functions for Markdown](#helper-functions-for-markdown)
|
|
19
|
+
- [Code of Conduct and Contributing](#code-of-conduct-and-contributing)
|
|
20
|
+
- [License - MIT](#license)
|
|
10
21
|
|
|
11
22
|
## Features
|
|
23
|
+
* No configuration requrired. Just setup the folder structure with a logo, favicon, and css file.
|
|
24
|
+
* Builds a static website that can be hosted anywhere.
|
|
25
|
+
* For more complex projects easily add a `docula.config.js` or `docula.config.ts` file to customize the build process. With PRE and POST methods.
|
|
26
|
+
* Support for single page with readme or multiple markdown pages in a docs folder.
|
|
27
|
+
* Will generate a sitemap.xml and robots.txt for your site.
|
|
28
|
+
* Uses Github release notes to generate a changelog / releases page.
|
|
29
|
+
* Uses Github to show contributors and link to their profiles.
|
|
30
|
+
* Simple search is provided by default out of the box.
|
|
31
|
+
|
|
32
|
+
## Getting Started
|
|
33
|
+
|
|
34
|
+
## 1. Install docula
|
|
35
|
+
|
|
36
|
+
> npx docula init
|
|
12
37
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
- Generatses an RSS feed.xml file to use and share
|
|
23
|
-
|
|
24
|
-
## Site Structure
|
|
25
|
-
|
|
26
|
-
- `site/docs` - contains the documentation files
|
|
27
|
-
- `site/template` - contains the templates files
|
|
28
|
-
|
|
29
|
-
This will all be generated in the `dist` folder by default. To change that you can use the `--output=<folder_name>` flag.
|
|
30
|
-
|
|
31
|
-
### Github Integration
|
|
32
|
-
- Pull all of your Contributors and Display Them
|
|
33
|
-
- Pulls your release notes and puts it into a good looking data format for your templates
|
|
34
|
-
- Pulls your project stats based on Github Forks, Stars, and Watchers
|
|
35
|
-
## How the CLI should work
|
|
36
|
-
To create a new project it should be as simple as:
|
|
37
|
-
```bash
|
|
38
|
-
docula init <project-name>
|
|
38
|
+
This will create a folder called site with the following structure:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
site
|
|
42
|
+
├───site.css
|
|
43
|
+
├───logo.png
|
|
44
|
+
├───favicon.ico
|
|
45
|
+
├───README.md
|
|
46
|
+
├───docula.config.js
|
|
39
47
|
```
|
|
48
|
+
Note: for typescript do 'docula init --typescript'
|
|
49
|
+
|
|
50
|
+
## 2. Add your content
|
|
51
|
+
|
|
52
|
+
Simply replace the logo, favicon, and css file with your own. The readme is your root project readme and you just need to at build time move it over to the site folder. If you have it at the root of the project and this is a folder inside just delete the README.md file in the site folder and docula will copy it over for you automatically.
|
|
53
|
+
|
|
54
|
+
## 3. Build your site
|
|
55
|
+
|
|
56
|
+
> npx docula
|
|
57
|
+
|
|
58
|
+
This will build your site and place it in the `dist` folder. You can then host it anywhere you like.
|
|
59
|
+
|
|
60
|
+
## Using Your own Template
|
|
61
|
+
|
|
62
|
+
If you want to use your own template you can do so by adding a `docula.config.ts` file to the root of your project. This file will be used to configure the build process.
|
|
63
|
+
|
|
64
|
+
or at the command line:
|
|
65
|
+
|
|
66
|
+
> npx docula --template path/to/template
|
|
40
67
|
|
|
41
|
-
|
|
68
|
+
## Building Multiple Pages
|
|
42
69
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
70
|
+
If you want to build multiple pages you can easily do that by adding in a `docs` folder to the root of the site folder. Inside of that folder you can add as many pages as you like. Each page will be a markdown file and it will generate a table of contents for you. Here is an example of what it looks like:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
site
|
|
74
|
+
├───site.css
|
|
75
|
+
├───logo.png
|
|
76
|
+
├───favicon.ico
|
|
77
|
+
├───docula.config.ts
|
|
78
|
+
├───docs
|
|
79
|
+
│ ├───getting-started.md
|
|
80
|
+
│ ├───contributing.md
|
|
81
|
+
│ ├───license.md
|
|
82
|
+
│ ├───code-of-conduct.md
|
|
46
83
|
```
|
|
47
84
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
85
|
+
The `readme.md` file will be the root page and the rest will be added to the table of contents. If you want to control the title or order of the pages you can do so by setting the `title` and `order` properties in the front matter of the markdown file. Here is an example:
|
|
86
|
+
|
|
87
|
+
```md
|
|
88
|
+
---
|
|
89
|
+
title: Getting Started
|
|
90
|
+
order: 2
|
|
91
|
+
---
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Helper Functions for Markdown
|
|
95
|
+
|
|
96
|
+
docula comes with some helper functions that you can use in your markdown files.
|
|
97
|
+
* `doculaHelpers.getFrontMatter(fileName)` - Gets the front matter of a markdown file.
|
|
98
|
+
* `doculaHelpers.setFrontMatter(fileName, frontMatter)` - Sets the front matter of a markdown file.
|
|
99
|
+
* `doculaHelpers.createDoc(source, destination, frontMatter?, contentFn[]?)` - Creates a markdown file with the specified front matter and content. The contentFn is a function that is executed on the original content of the file. This is useful if you want to remove content from the original file.
|
|
100
|
+
|
|
101
|
+
### Remove html content
|
|
102
|
+
|
|
103
|
+
In some cases your markdown file will have html content in it such as the logo of your project or a badge. You can use the `wrtirHelpers.removeHtmlContent()` helper function to remove that content from the page. Here is an example:
|
|
104
|
+
|
|
105
|
+
### Get and Set the Front Matter of a Markdown File
|
|
106
|
+
|
|
107
|
+
You can use the `doculaHelpers.getFrontMatter()` and `doculaHelpers.setFrontMatter()` helper functions to get and set the front matter of a markdown file. Here is an example:
|
|
108
|
+
|
|
109
|
+
```js
|
|
110
|
+
const frontMatter = doculaHelpers.getFrontMatter('../readme.md');
|
|
111
|
+
frontMatter.title = 'My Title';
|
|
112
|
+
doculaHelpers.setFrontMatter('../readme.md', frontMatter);
|
|
51
113
|
```
|
|
114
|
+
|
|
115
|
+
## Code of Conduct and Contributing
|
|
116
|
+
[Code of Conduct](CODE_OF_CONDUCT.md) and [Contributing](CONTRIBUTING.md) guidelines.
|
|
117
|
+
|
|
118
|
+
## License
|
|
119
|
+
|
|
120
|
+
MIT © [Jared Wray](https://jaredwray.com)
|
package/bin/docula.mjs
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { DoculaOptions } from './options.js';
|
|
2
|
+
import { type GithubData } from './github.js';
|
|
3
|
+
export type DoculaData = {
|
|
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?: DoculaTemplates;
|
|
13
|
+
};
|
|
14
|
+
export type DoculaTemplates = {
|
|
15
|
+
index: string;
|
|
16
|
+
releases: string;
|
|
17
|
+
};
|
|
18
|
+
export declare class DoculaBuilder {
|
|
19
|
+
private readonly _options;
|
|
20
|
+
private readonly _ecto;
|
|
21
|
+
private readonly _console;
|
|
22
|
+
constructor(options?: DoculaOptions, engineOptions?: any);
|
|
23
|
+
get options(): DoculaOptions;
|
|
24
|
+
build(): Promise<void>;
|
|
25
|
+
validateOptions(options: DoculaOptions): void;
|
|
26
|
+
getGithubData(githubPath: string): Promise<GithubData>;
|
|
27
|
+
getTemplates(options: DoculaOptions): Promise<DoculaTemplates>;
|
|
28
|
+
getTemplateFile(path: string, name: string): Promise<string | undefined>;
|
|
29
|
+
buildRobotsPage(options: DoculaOptions): Promise<void>;
|
|
30
|
+
buildSiteMapPage(data: DoculaData): Promise<void>;
|
|
31
|
+
buildIndexPage(data: DoculaData): Promise<void>;
|
|
32
|
+
buildReleasePage(data: DoculaData): Promise<void>;
|
|
33
|
+
buildReadmeSection(data: DoculaData): Promise<string>;
|
|
34
|
+
}
|
package/dist/builder.js
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { Ecto } from 'ecto';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { DoculaOptions } from './options.js';
|
|
4
|
+
import { DoculaConsole } from './console.js';
|
|
5
|
+
import { Github } from './github.js';
|
|
6
|
+
export class DoculaBuilder {
|
|
7
|
+
_options = new DoculaOptions();
|
|
8
|
+
_ecto;
|
|
9
|
+
_console = new DoculaConsole();
|
|
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 doculaData = {
|
|
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
|
+
doculaData.github = githubData;
|
|
38
|
+
// Get the templates to use
|
|
39
|
+
doculaData.templates = await this.getTemplates(this.options);
|
|
40
|
+
// Build the home page (index.html)
|
|
41
|
+
await this.buildIndexPage(doculaData);
|
|
42
|
+
// Build the releases page (/releases/index.html)
|
|
43
|
+
await this.buildReleasePage(doculaData);
|
|
44
|
+
// Build the sitemap (/sitemap.xml)
|
|
45
|
+
await this.buildSiteMapPage(doculaData);
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUMsTUFBTSxFQUFzQyxNQUFNLGFBQWEsQ0FBQztBQW1CeEUsTUFBTSxPQUFPLGFBQWE7SUFDUixRQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUMsS0FBSyxDQUFPO0lBQ1osUUFBUSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO0lBRS9ELFlBQVksT0FBdUIsRUFBRSxhQUFtQjtRQUN2RCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDekIsQ0FBQztRQUVELGlFQUFpRTtRQUNqRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFN0IsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHVCQUF1QjtRQUN2QixNQUFNLFVBQVUsR0FBZTtZQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQzdCLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDakMsZUFB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LENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FDdEQsZ0JBQWdCLEVBQ2hCLElBQUksRUFDSixJQUFJLENBQUMsWUFBWSxDQUNqQixDQUFDO1lBQ0YsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNGLENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBZ0I7UUFDL0MsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FDcEMsR0FBRyxJQUFJLENBQUMsUUFBUSxZQUFZLEVBQzVCLE1BQU0sQ0FDTixDQUFDO1lBQ0YsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNuQixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VjdG99IGZyb20gJ2VjdG8nO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7RG9jdWxhT3B0aW9uc30gZnJvbSAnLi9vcHRpb25zLmpzJztcbmltcG9ydCB7RG9jdWxhQ29uc29sZX0gZnJvbSAnLi9jb25zb2xlLmpzJztcbmltcG9ydCB7R2l0aHViLCB0eXBlIEdpdGh1YkRhdGEsIHR5cGUgR2l0aHViT3B0aW9uc30gZnJvbSAnLi9naXRodWIuanMnO1xuXG5leHBvcnQgdHlwZSBEb2N1bGFEYXRhID0ge1xuXHRzaXRlVXJsOiBzdHJpbmc7XG5cdHNpdGVUaXRsZTogc3RyaW5nO1xuXHRzaXRlRGVzY3JpcHRpb246IHN0cmluZztcblx0c2l0ZVBhdGg6IHN0cmluZztcblx0dGVtcGxhdGVQYXRoOiBzdHJpbmc7XG5cdG91dHB1dFBhdGg6IHN0cmluZztcblx0Z2l0aHViUGF0aD86IHN0cmluZztcblx0Z2l0aHViPzogR2l0aHViRGF0YTtcblx0dGVtcGxhdGVzPzogRG9jdWxhVGVtcGxhdGVzO1xufTtcblxuZXhwb3J0IHR5cGUgRG9jdWxhVGVtcGxhdGVzID0ge1xuXHRpbmRleDogc3RyaW5nO1xuXHRyZWxlYXNlczogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIERvY3VsYUJ1aWxkZXIge1xuXHRwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBEb2N1bGFPcHRpb25zID0gbmV3IERvY3VsYU9wdGlvbnMoKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZWN0bzogRWN0bztcblx0cHJpdmF0ZSByZWFkb25seSBfY29uc29sZTogRG9jdWxhQ29uc29sZSA9IG5ldyBEb2N1bGFDb25zb2xlKCk7XG5cblx0Y29uc3RydWN0b3Iob3B0aW9ucz86IERvY3VsYU9wdGlvbnMsIGVuZ2luZU9wdGlvbnM/OiBhbnkpIHtcblx0XHRpZiAob3B0aW9ucykge1xuXHRcdFx0dGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0fVxuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcblx0XHR0aGlzLl9lY3RvID0gbmV3IEVjdG8oZW5naW5lT3B0aW9ucyk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IG9wdGlvbnMoKTogRG9jdWxhT3B0aW9ucyB7XG5cdFx0cmV0dXJuIHRoaXMuX29wdGlvbnM7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuXHRcdC8vIFZhbGlkYXRlIHRoZSBvcHRpb25zXG5cdFx0dGhpcy52YWxpZGF0ZU9wdGlvbnModGhpcy5vcHRpb25zKTtcblx0XHQvLyBTZXQgdGhlIHNpdGUgb3B0aW9uc1xuXHRcdGNvbnN0IGRvY3VsYURhdGE6IERvY3VsYURhdGEgPSB7XG5cdFx0XHRzaXRlVXJsOiB0aGlzLm9wdGlvbnMuc2l0ZVVybCxcblx0XHRcdHNpdGVUaXRsZTogdGhpcy5vcHRpb25zLnNpdGVUaXRsZSxcblx0XHRcdHNpdGVEZXNjcmlwdGlvbjogdGhpcy5vcHRpb25zLnNpdGVEZXNjcmlwdGlvbixcblx0XHRcdHNpdGVQYXRoOiB0aGlzLm9wdGlvbnMuc2l0ZVBhdGgsXG5cdFx0XHR0ZW1wbGF0ZVBhdGg6IHRoaXMub3B0aW9ucy50ZW1wbGF0ZVBhdGgsXG5cdFx0XHRvdXRwdXRQYXRoOiB0aGlzLm9wdGlvbnMub3V0cHV0UGF0aCxcblx0XHRcdGdpdGh1YlBhdGg6IHRoaXMub3B0aW9ucy5naXRodWJQYXRoLFxuXHRcdH07XG5cblx0XHQvLyBHZXQgZGF0YSBmcm9tIGdpdGh1YlxuXHRcdGNvbnN0IGdpdGh1YkRhdGEgPSBhd2FpdCB0aGlzLmdldEdpdGh1YkRhdGEodGhpcy5vcHRpb25zLmdpdGh1YlBhdGgpO1xuXHRcdC8vIEdldCBkYXRhIG9mIHRoZSBzaXRlXG5cdFx0ZG9jdWxhRGF0YS5naXRodWIgPSBnaXRodWJEYXRhO1xuXHRcdC8vIEdldCB0aGUgdGVtcGxhdGVzIHRvIHVzZVxuXHRcdGRvY3VsYURhdGEudGVtcGxhdGVzID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXModGhpcy5vcHRpb25zKTtcblxuXHRcdC8vIEJ1aWxkIHRoZSBob21lIHBhZ2UgKGluZGV4Lmh0bWwpXG5cdFx0YXdhaXQgdGhpcy5idWlsZEluZGV4UGFnZShkb2N1bGFEYXRhKTtcblxuXHRcdC8vIEJ1aWxkIHRoZSByZWxlYXNlcyBwYWdlICgvcmVsZWFzZXMvaW5kZXguaHRtbClcblx0XHRhd2FpdCB0aGlzLmJ1aWxkUmVsZWFzZVBhZ2UoZG9jdWxhRGF0YSk7XG5cblx0XHQvLyBCdWlsZCB0aGUgc2l0ZW1hcCAoL3NpdGVtYXAueG1sKVxuXHRcdGF3YWl0IHRoaXMuYnVpbGRTaXRlTWFwUGFnZShkb2N1bGFEYXRhKTtcblxuXHRcdC8vIEJ1aWxkIHRoZSByb2JvdHMudHh0ICgvcm9ib3RzLnR4dClcblx0XHRhd2FpdCB0aGlzLmJ1aWxkUm9ib3RzUGFnZSh0aGlzLm9wdGlvbnMpO1xuXG5cdFx0Y29uc3Qgc2l0ZVJlbGF0aXZlUGF0aCA9IHRoaXMub3B0aW9ucy5zaXRlUGF0aDtcblxuXHRcdC8vIENvcHkgb3ZlciBmYXZpY29uXG5cdFx0aWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoYCR7c2l0ZVJlbGF0aXZlUGF0aH0vZmF2aWNvbi5pY29gKSkge1xuXHRcdFx0YXdhaXQgZnMuY29weShcblx0XHRcdFx0YCR7c2l0ZVJlbGF0aXZlUGF0aH0vZmF2aWNvbi5pY29gLFxuXHRcdFx0XHRgJHt0aGlzLm9wdGlvbnMub3V0cHV0UGF0aH0vZmF2aWNvbi5pY29gLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBDb3B5IG92ZXIgbG9nb1xuXHRcdGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGAke3NpdGVSZWxhdGl2ZVBhdGh9L2xvZ28uc3ZnYCkpIHtcblx0XHRcdGF3YWl0IGZzLmNvcHkoXG5cdFx0XHRcdGAke3NpdGVSZWxhdGl2ZVBhdGh9L2xvZ28uc3ZnYCxcblx0XHRcdFx0YCR7dGhpcy5vcHRpb25zLm91dHB1dFBhdGh9L2xvZ28uc3ZnYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSBvdmVyIGNzc1xuXHRcdGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGAke3RoaXMub3B0aW9ucy50ZW1wbGF0ZVBhdGh9L2Nzc2ApKSB7XG5cdFx0XHRhd2FpdCBmcy5jb3B5KFxuXHRcdFx0XHRgJHt0aGlzLm9wdGlvbnMudGVtcGxhdGVQYXRofS9jc3NgLFxuXHRcdFx0XHRgJHt0aGlzLm9wdGlvbnMub3V0cHV0UGF0aH0vY3NzYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSBvdmVyIHZhcmlhYmxlc1xuXHRcdGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGAke3NpdGVSZWxhdGl2ZVBhdGh9L3ZhcmlhYmxlcy5jc3NgKSkge1xuXHRcdFx0YXdhaXQgZnMuY29weShcblx0XHRcdFx0YCR7c2l0ZVJlbGF0aXZlUGF0aH0vdmFyaWFibGVzLmNzc2AsXG5cdFx0XHRcdGAke3RoaXMub3B0aW9ucy5vdXRwdXRQYXRofS9jc3MvdmFyaWFibGVzLmNzc2AsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuXG5cdFx0Y29uc3QgZXhlY3V0aW9uVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG5cblx0XHR0aGlzLl9jb25zb2xlLmxvZyhgQnVpbGQgY29tcGxldGVkIGluICR7ZXhlY3V0aW9uVGltZX1tc2ApO1xuXHR9XG5cblx0cHVibGljIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zOiBEb2N1bGFPcHRpb25zKTogdm9pZCB7XG5cdFx0aWYgKG9wdGlvbnMuZ2l0aHViUGF0aC5sZW5ndGggPCAzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIGdpdGh1YiBvcHRpb25zIHByb3ZpZGVkJyk7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdGlvbnMuc2l0ZURlc2NyaXB0aW9uLmxlbmd0aCA8IDMpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignTm8gc2l0ZSBkZXNjcmlwdGlvbiBvcHRpb25zIHByb3ZpZGVkJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFvcHRpb25zLnNpdGVUaXRsZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdObyBzaXRlIHRpdGxlIG9wdGlvbnMgcHJvdmlkZWQnKTtcblx0XHR9XG5cblx0XHRpZiAoIW9wdGlvbnMuc2l0ZVVybCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdObyBzaXRlIHVybCBvcHRpb25zIHByb3ZpZGVkJyk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGdldEdpdGh1YkRhdGEoZ2l0aHViUGF0aDogc3RyaW5nKTogUHJvbWlzZTxHaXRodWJEYXRhPiB7XG5cdFx0Y29uc3QgcGF0aHMgPSBnaXRodWJQYXRoLnNwbGl0KCcvJyk7XG5cdFx0Y29uc3Qgb3B0aW9uczogR2l0aHViT3B0aW9ucyA9IHtcblx0XHRcdGF1dGhvcjogcGF0aHNbMF0sXG5cdFx0XHRyZXBvOiBwYXRoc1sxXSxcblx0XHR9O1xuXHRcdGNvbnN0IGdpdGh1YiA9IG5ldyBHaXRodWIob3B0aW9ucyk7XG5cdFx0cmV0dXJuIGdpdGh1Yi5nZXREYXRhKCk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZ2V0VGVtcGxhdGVzKG9wdGlvbnM6IERvY3VsYU9wdGlvbnMpOiBQcm9taXNlPERvY3VsYVRlbXBsYXRlcz4ge1xuXHRcdGNvbnN0IHRlbXBsYXRlczogRG9jdWxhVGVtcGxhdGVzID0ge1xuXHRcdFx0aW5kZXg6ICcnLFxuXHRcdFx0cmVsZWFzZXM6ICcnLFxuXHRcdH07XG5cblx0XHRpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhvcHRpb25zLnRlbXBsYXRlUGF0aCkpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZUZpbGUob3B0aW9ucy50ZW1wbGF0ZVBhdGgsICdpbmRleCcpO1xuXHRcdFx0aWYgKGluZGV4KSB7XG5cdFx0XHRcdHRlbXBsYXRlcy5pbmRleCA9IGluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCByZWxlYXNlcyA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGVGaWxlKFxuXHRcdFx0XHRvcHRpb25zLnRlbXBsYXRlUGF0aCxcblx0XHRcdFx0J3JlbGVhc2VzJyxcblx0XHRcdCk7XG5cdFx0XHRpZiAocmVsZWFzZXMpIHtcblx0XHRcdFx0dGVtcGxhdGVzLnJlbGVhc2VzID0gcmVsZWFzZXM7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgTm8gdGVtcGxhdGUgcGF0aCBmb3VuZCBhdCAke29wdGlvbnMudGVtcGxhdGVQYXRofWApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0ZW1wbGF0ZXM7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZ2V0VGVtcGxhdGVGaWxlKFxuXHRcdHBhdGg6IHN0cmluZyxcblx0XHRuYW1lOiBzdHJpbmcsXG5cdCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0bGV0IHJlc3VsdDtcblx0XHRjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIocGF0aCk7XG5cdFx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG5cdFx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuc3BsaXQoJy4nKTtcblx0XHRcdGlmIChmaWxlTmFtZVswXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0XHRyZXN1bHQgPSBmaWxlLnRvU3RyaW5nKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgYnVpbGRSb2JvdHNQYWdlKG9wdGlvbnM6IERvY3VsYU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB7c2l0ZVBhdGh9ID0gb3B0aW9ucztcblx0XHRjb25zdCB7b3V0cHV0UGF0aH0gPSBvcHRpb25zO1xuXHRcdGNvbnN0IHJvYm90c1BhdGggPSBgJHtvdXRwdXRQYXRofS9yb2JvdHMudHh0YDtcblxuXHRcdGF3YWl0IGZzLmVuc3VyZURpcihvdXRwdXRQYXRoKTtcblxuXHRcdGF3YWl0ICgoYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtzaXRlUGF0aH0vcm9ib3RzLnR4dGApKVxuXHRcdFx0PyBmcy5jb3B5KGAke3NpdGVQYXRofS9yb2JvdHMudHh0YCwgcm9ib3RzUGF0aClcblx0XHRcdDogZnMud3JpdGVGaWxlKHJvYm90c1BhdGgsICdVc2VyLWFnZW50OiAqXFxuRGlzYWxsb3c6JykpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGJ1aWxkU2l0ZU1hcFBhZ2UoZGF0YTogRG9jdWxhRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNpdGVtYXBQYXRoID0gYCR7ZGF0YS5vdXRwdXRQYXRofS9zaXRlbWFwLnhtbGA7XG5cdFx0Y29uc3QgdXJscyA9IFt7dXJsOiBkYXRhLnNpdGVVcmx9LCB7dXJsOiBgJHtkYXRhLnNpdGVVcmx9L3JlbGVhc2VzYH1dO1xuXG5cdFx0bGV0IHhtbCA9ICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4nO1xuXHRcdHhtbCArPSAnPHVybHNldCB4bWxucz1cImh0dHA6Ly93d3cuc2l0ZW1hcHMub3JnL3NjaGVtYXMvc2l0ZW1hcC8wLjlcIj4nO1xuXG5cdFx0Zm9yIChjb25zdCB7dXJsfSBvZiB1cmxzKSB7XG5cdFx0XHR4bWwgKz0gJzx1cmw+Jztcblx0XHRcdHhtbCArPSBgPGxvYz4ke3VybH08L2xvYz5gO1xuXHRcdFx0eG1sICs9ICc8L3VybD4nO1xuXHRcdH1cblxuXHRcdHhtbCArPSAnPC91cmxzZXQ+JztcblxuXHRcdGF3YWl0IGZzLmVuc3VyZURpcihkYXRhLm91dHB1dFBhdGgpO1xuXG5cdFx0YXdhaXQgZnMud3JpdGVGaWxlKHNpdGVtYXBQYXRoLCB4bWwsICd1dGY4Jyk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgYnVpbGRJbmRleFBhZ2UoZGF0YTogRG9jdWxhRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChkYXRhLnRlbXBsYXRlcykge1xuXHRcdFx0Y29uc3QgaW5kZXhQYXRoID0gYCR7ZGF0YS5vdXRwdXRQYXRofS9pbmRleC5odG1sYDtcblxuXHRcdFx0YXdhaXQgZnMuZW5zdXJlRGlyKGRhdGEub3V0cHV0UGF0aCk7XG5cblx0XHRcdGNvbnN0IGluZGV4VGVtcGxhdGUgPSBgJHtkYXRhLnRlbXBsYXRlUGF0aH0vJHtkYXRhLnRlbXBsYXRlcy5pbmRleH1gO1xuXG5cdFx0XHRjb25zdCBodG1sUmVhZG1lID0gYXdhaXQgdGhpcy5idWlsZFJlYWRtZVNlY3Rpb24oZGF0YSk7XG5cblx0XHRcdGNvbnN0IGluZGV4Q29udGVudCA9IGF3YWl0IHRoaXMuX2VjdG8ucmVuZGVyRnJvbUZpbGUoXG5cdFx0XHRcdGluZGV4VGVtcGxhdGUsXG5cdFx0XHRcdHsuLi5kYXRhLCBjb250ZW50OiBodG1sUmVhZG1lfSxcblx0XHRcdFx0ZGF0YS50ZW1wbGF0ZVBhdGgsXG5cdFx0XHQpO1xuXHRcdFx0YXdhaXQgZnMud3JpdGVGaWxlKGluZGV4UGF0aCwgaW5kZXhDb250ZW50LCAndXRmOCcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIHRlbXBsYXRlcyBmb3VuZCcpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBhc3luYyBidWlsZFJlbGVhc2VQYWdlKGRhdGE6IERvY3VsYURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoZGF0YS5naXRodWIgJiYgZGF0YS50ZW1wbGF0ZXMpIHtcblx0XHRcdGNvbnN0IHJlbGVhc2VzUGF0aCA9IGAke2RhdGEub3V0cHV0UGF0aH0vcmVsZWFzZXMvaW5kZXguaHRtbGA7XG5cdFx0XHRjb25zdCByZWxlYXNlT3V0cHV0UGF0aCA9IGAke2RhdGEub3V0cHV0UGF0aH0vcmVsZWFzZXNgO1xuXG5cdFx0XHRhd2FpdCBmcy5lbnN1cmVEaXIocmVsZWFzZU91dHB1dFBhdGgpO1xuXG5cdFx0XHRjb25zdCByZWxlYXNlc1RlbXBsYXRlID0gYCR7ZGF0YS50ZW1wbGF0ZVBhdGh9LyR7ZGF0YS50ZW1wbGF0ZXMucmVsZWFzZXN9YDtcblx0XHRcdGNvbnN0IHJlbGVhc2VzQ29udGVudCA9IGF3YWl0IHRoaXMuX2VjdG8ucmVuZGVyRnJvbUZpbGUoXG5cdFx0XHRcdHJlbGVhc2VzVGVtcGxhdGUsXG5cdFx0XHRcdGRhdGEsXG5cdFx0XHRcdGRhdGEudGVtcGxhdGVQYXRoLFxuXHRcdFx0KTtcblx0XHRcdGF3YWl0IGZzLndyaXRlRmlsZShyZWxlYXNlc1BhdGgsIHJlbGVhc2VzQ29udGVudCwgJ3V0ZjgnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdObyBnaXRodWIgZGF0YSBmb3VuZCcpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBhc3luYyBidWlsZFJlYWRtZVNlY3Rpb24oZGF0YTogRG9jdWxhRGF0YSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0bGV0IGh0bWxSZWFkbWUgPSAnJztcblx0XHRpZiAoZnMuZXhpc3RzU3luYyhgJHtkYXRhLnNpdGVQYXRofS9SRUFETUUubWRgKSkge1xuXHRcdFx0Y29uc3QgcmVhZG1lQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhcblx0XHRcdFx0YCR7ZGF0YS5zaXRlUGF0aH0vUkVBRE1FLm1kYCxcblx0XHRcdFx0J3V0ZjgnLFxuXHRcdFx0KTtcblx0XHRcdGh0bWxSZWFkbWUgPSBhd2FpdCB0aGlzLl9lY3RvLm1hcmtkb3duLnJlbmRlcihyZWFkbWVDb250ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaHRtbFJlYWRtZTtcblx0fVxufVxuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare class DoculaConsole {
|
|
2
|
+
log(message: string): void;
|
|
3
|
+
error(message: string): void;
|
|
4
|
+
warn(message: string): void;
|
|
5
|
+
printHelp(): void;
|
|
6
|
+
parseProcessArgv(argv: string[]): DoculaConsoleProcess;
|
|
7
|
+
getCommand(argv: string[]): string | undefined;
|
|
8
|
+
getArguments(argv: string[]): DoculaConsoleArguments;
|
|
9
|
+
}
|
|
10
|
+
type DoculaConsoleProcess = {
|
|
11
|
+
argv: string[];
|
|
12
|
+
command: string | undefined;
|
|
13
|
+
args: DoculaConsoleArguments;
|
|
14
|
+
};
|
|
15
|
+
type DoculaConsoleArguments = {
|
|
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
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
export class DoculaConsole {
|
|
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: docula [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 docula 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFbkMsTUFBTSxPQUFPLGFBQWE7SUFDekIsR0FBRyxDQUFDLE9BQWU7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQWU7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWU7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsU0FBUztRQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN0RCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLHNIQUFzSCxDQUFDLENBQUM7UUFDcEksT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDckQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUN6RSxPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7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QU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BELE1BQU07Z0JBQ1AsQ0FBQztnQkFFRCxLQUFLLElBQUksQ0FBQztnQkFDVixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUNsQixNQUFNO2dCQUNQLENBQUM7Z0JBRUQsS0FBSyxJQUFJLENBQUM7Z0JBQ1YsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hELE1BQU07Z0JBQ1AsQ0FBQztnQkFFRCxLQUFLLElBQUksQ0FBQztnQkFDVixLQUFLLGdCQUFnQixDQUFDLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDaEUsTUFBTTtnQkFDUCxDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5leHBvcnQgY2xhc3MgRG9jdWxhQ29uc29sZSB7XG5cdGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zb2xlLmxvZyhtZXNzYWdlKTtcblx0fVxuXG5cdGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG5cdH1cblxuXHR3YXJuKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnNvbGUud2FybihtZXNzYWdlKTtcblx0fVxuXG5cdHByaW50SGVscCgpOiB2b2lkIHtcblx0XHRjb25zb2xlLmxvZygnICAgVXNhZ2U6IGRvY3VsYSBbY29tbWFuZF0gW2FyZ3VtZW50c10nKTtcblx0XHRjb25zb2xlLmxvZygpO1xuXHRcdGNvbnNvbGUubG9nKCcgICBDb21tYW5kczonKTtcblx0XHRjb25zb2xlLmxvZygnICAgICBpbml0ICAgICAgICAgICBJbml0aWFsaXplIGEgbmV3IHByb2plY3QnKTtcblx0XHRjb25zb2xlLmxvZygnICAgICBidWlsZCAgICAgICAgICBCdWlsZCB0aGUgcHJvamVjdC4gQnkgZGVmYXVsdCBqdXN0IG5weCBkb2N1bGEgd2lsbCBidWlsZCB0aGUgcHJvamVjdCBpZiBpdCBmaW5kcyBhIC4vc2l0ZSBmb2xkZXInKTtcblx0XHRjb25zb2xlLmxvZygnICAgICBzZXJ2ZSAgICAgICAgICBTZXJ2ZSB0aGUgcHJvamVjdCBhcyBhIGxvY2FsIHdlYnNpdGUnKTtcblx0XHRjb25zb2xlLmxvZygnICAgICBoZWxwICAgICAgICAgICBQcmludCB0aGlzIGhlbHAnKTtcblx0XHRjb25zb2xlLmxvZygnICAgICB2ZXJzaW9uICAgICAgICBQcmludCB0aGUgdmVyc2lvbicpO1xuXHRcdGNvbnNvbGUubG9nKCk7XG5cdFx0Y29uc29sZS5sb2coJyAgIEFyZ3VtZW50cyBCdWlsZDonKTtcblx0XHRjb25zb2xlLmxvZygnICAgICAtdywgLS13YXRjaCAgICAgICAgICAgIHdhdGNoIGZvciBjaGFuZ2VzIGFuZCByZWJ1aWxkJyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgLXMsIC0tc2l0ZSAgICAgICAgICAgICBTZXQgdGhlIHBhdGggd2hlcmUgc2l0ZSBmaWxlcyBhcmUgbG9jYXRlZCcpO1xuXHRcdGNvbnNvbGUubG9nKCcgICAgIC1vLCAtLW91dHB1dFBhdGggICAgICAgU2V0IHRoZSBvdXRwdXQgZGlyZWN0b3J5LiBEZWZhdWx0IGlzIC4vc2l0ZS9kaXN0Jyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgLXQsIC0tdGVtcGxhdGVQYXRoICAgICBTZXQgdGhlIGN1c3RvbSB0ZW1wbGF0ZSB0byB1c2UnKTtcblx0XHRjb25zb2xlLmxvZygpO1xuXHRcdGNvbnNvbGUubG9nKCcgICBBcmd1bWVudHMgc2VydmU6Jyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgLXAsIC0tcG9ydCAgICAgICAgIFNldCB0aGUgcG9ydCBudW1iZXIgdXNlZCB3aXRoIHNlcnZlJyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgLXcsIC0td2F0Y2ggICAgICAgIHdhdGNoIGZvciBjaGFuZ2VzIGFuZCByZWJ1aWxkJyk7XG5cdFx0Y29uc29sZS5sb2coJyAgICAgLXMsIC0tc2l0ZSAgICAgICAgIFNldCB0aGUgcGF0aCB3aGVyZSBzaXRlIGZpbGVzIGFyZSBsb2NhdGVkJyk7XG5cdH1cblxuXHRwdWJsaWMgcGFyc2VQcm9jZXNzQXJndihhcmd2OiBzdHJpbmdbXSk6IERvY3VsYUNvbnNvbGVQcm9jZXNzIHtcblx0XHRjb25zdCBjb21tYW5kID0gdGhpcy5nZXRDb21tYW5kKGFyZ3YpO1xuXHRcdGNvbnN0IGFyZ3MgPSB0aGlzLmdldEFyZ3VtZW50cyhhcmd2KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0YXJndixcblx0XHRcdGNvbW1hbmQsXG5cdFx0XHRhcmdzLFxuXHRcdH07XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q29tbWFuZChhcmd2OiBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHJlc3VsdDtcblx0XHRmb3IgKGNvbnN0IGFyZyBvZiBhcmd2KSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVmYXVsdC1jYXNlXG5cdFx0XHRzd2l0Y2ggKGFyZykge1xuXHRcdFx0XHRjYXNlICdpbml0Jzoge1xuXHRcdFx0XHRcdHJlc3VsdCA9ICdpbml0Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJ2J1aWxkJzoge1xuXHRcdFx0XHRcdHJlc3VsdCA9ICdidWlsZCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYXNlICdzZXJ2ZSc6IHtcblx0XHRcdFx0XHRyZXN1bHQgPSAnc2VydmUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FzZSAnaGVscCc6IHtcblx0XHRcdFx0XHRyZXN1bHQgPSAnaGVscCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYXNlICd2ZXJzaW9uJzoge1xuXHRcdFx0XHRcdHJlc3VsdCA9IGFyZztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QXJndW1lbnRzKGFyZ3Y6IHN0cmluZ1tdKTogRG9jdWxhQ29uc29sZUFyZ3VtZW50cyB7XG5cdFx0Y29uc3QgYXJncyA9IHtcblx0XHRcdHNpdGVQYXRoOiAnJyxcblx0XHRcdHRlbXBsYXRlUGF0aDogJycsXG5cdFx0XHRvdXRwdXQ6ICcnLFxuXHRcdFx0d2F0Y2g6IGZhbHNlLFxuXHRcdFx0cG9ydDogMzAwMCxcblx0XHR9O1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYXJnID0gYXJndltpXTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2Vcblx0XHRcdHN3aXRjaCAoYXJnKSB7XG5cdFx0XHRcdGNhc2UgJy1wJzpcblx0XHRcdFx0Y2FzZSAnLS1wb3J0Jzoge1xuXHRcdFx0XHRcdGNvbnN0IHBvcnRTdHJpbmcgPSBhcmd2W2kgKyAxXTtcblx0XHRcdFx0XHRpZiAocG9ydFN0cmluZyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRhcmdzLnBvcnQgPSBOdW1iZXIucGFyc2VJbnQocG9ydFN0cmluZywgMTApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FzZSAnLW8nOlxuXHRcdFx0XHRjYXNlICctLW91dHB1dCc6IHtcblx0XHRcdFx0XHRhcmdzLm91dHB1dCA9IGFyZ3ZbaSArIDFdO1xuXHRcdFx0XHRcdGFyZ3Mub3V0cHV0ID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGFyZ3Mub3V0cHV0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJy13Jzpcblx0XHRcdFx0Y2FzZSAnLS13YXRjaCc6IHtcblx0XHRcdFx0XHRhcmdzLndhdGNoID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJy1zJzpcblx0XHRcdFx0Y2FzZSAnLS1zaXRlJzoge1xuXHRcdFx0XHRcdGFyZ3Muc2l0ZVBhdGggPSBhcmd2W2kgKyAxXTtcblx0XHRcdFx0XHRhcmdzLnNpdGVQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGFyZ3Muc2l0ZVBhdGgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FzZSAnLXQnOlxuXHRcdFx0XHRjYXNlICctLXRlbXBsYXRlUGF0aCc6IHtcblx0XHRcdFx0XHRhcmdzLnRlbXBsYXRlUGF0aCA9IGFyZ3ZbaSArIDFdO1xuXHRcdFx0XHRcdGFyZ3MudGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGFyZ3MudGVtcGxhdGVQYXRoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBhcmdzO1xuXHR9XG59XG5cbnR5cGUgRG9jdWxhQ29uc29sZVByb2Nlc3MgPSB7XG5cdGFyZ3Y6IHN0cmluZ1tdO1xuXHRjb21tYW5kOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGFyZ3M6IERvY3VsYUNvbnNvbGVBcmd1bWVudHM7XG59O1xuXG50eXBlIERvY3VsYUNvbnNvbGVBcmd1bWVudHMgPSB7XG5cdHNpdGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHRlbXBsYXRlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRvdXRwdXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0d2F0Y2g6IGJvb2xlYW47XG5cdHBvcnQ6IG51bWJlcjtcbn07XG5cbiJdfQ==
|
package/dist/docula.d.ts
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
private
|
|
7
|
-
private readonly
|
|
8
|
-
private
|
|
9
|
-
private
|
|
10
|
-
constructor(options?:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import type http from 'node:http';
|
|
4
|
+
import { DoculaOptions } from './options.js';
|
|
5
|
+
export default class Docula {
|
|
6
|
+
private _options;
|
|
7
|
+
private readonly _console;
|
|
8
|
+
private _configFileModule;
|
|
9
|
+
private _server;
|
|
10
|
+
constructor(options?: DoculaOptions);
|
|
11
|
+
get options(): DoculaOptions;
|
|
12
|
+
set options(value: DoculaOptions);
|
|
13
|
+
get server(): http.Server | undefined;
|
|
14
|
+
get configFileModule(): any;
|
|
15
|
+
checkForUpdates(): void;
|
|
16
|
+
execute(process: NodeJS.Process): Promise<void>;
|
|
17
|
+
isSinglePageWebsite(sitePath: string): boolean;
|
|
18
|
+
generateInit(sitePath: string): void;
|
|
19
|
+
getVersion(): string;
|
|
20
|
+
loadConfigFile(sitePath: string): Promise<void>;
|
|
21
|
+
serve(options: DoculaOptions): Promise<void>;
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
+
export { DoculaHelpers } from './helpers.js';
|