-
Notifications
You must be signed in to change notification settings - Fork 0
/
bootstrap.ts
97 lines (83 loc) · 2.74 KB
/
bootstrap.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import { ensureDir, move } from "https://deno.land/std@0.146.0/fs/mod.ts";
import { join, resolve } from "https://deno.land/std@0.146.0/path/mod.ts";
import { checkExists } from "./utils.ts";
/**
* Base template used to include other.
* Allow javascript and async function calls.
*/
export const readme = `<%~ await include("HEADER.template.md", {...it}) %>
<% it.javascripted = 13 + 12 %>
<%= it.javascripted %>
<% it.asyncJavascripted = await fetch("https://jsonplaceholder.typicode.com/todos/1").then(r => r.json()) %>
<%= it.asyncJavascripted.title %>
<%= it.readme %>
<%~ await include("FOOTER.template.md", {...it}) %>`;
/**
* Example header template.
*/
export const header = `# <%= it.name %>
hello world
---
`;
/**
* Example footer template.
*/
export const footer = `---
made with k by love
<%= await fetch("https://jsonplaceholder.typicode.com/todos/2").then(r => r.json()).then(r => JSON.stringify(r)) %>
`;
/**
* Bootstrap template files in a specified directory.
* Creates the required files for readme-manager.
*
* ```ts
* import { bootstrap } from "./bootstrap.ts"
* await bootstrap('/path/to/templates', (errorMsg: string, error?: Error) => {})
* ```
*
* @param {string} templateDirectory Directory where files should be created.
* @param {function(string, Error)} error Handler for errors.
*/
export const bootstrap = async (
templateDirectory: string,
error: (message: string, error?: Error) => void,
) => {
if (await checkExists(templateDirectory, error)) {
console.log("You ran bootstrap mode with present templates, backing up.");
try {
await move(templateDirectory, `${templateDirectory}.old`, {
overwrite: true,
});
} catch (e) {
error("Something went wrong backing up your templates.", e);
}
}
try {
await ensureDir(templateDirectory);
} catch (e) {
error(
`Something went wrong trying to create the templates directory at ${templateDirectory}.`,
e,
);
}
const readmePath = resolve(join(templateDirectory, "README.template.md"));
try {
await Deno.writeTextFile(readmePath, readme);
} catch (e) {
error(`Something went wrong trying to boostrap ${readmePath}.`, e);
}
const headerPath = resolve(join(templateDirectory, "HEADER.template.md"));
try {
await Deno.writeTextFile(headerPath, header);
} catch (e) {
error(`Something went wrong trying to boostrap ${headerPath}.`, e);
}
const footerPath = resolve(join(templateDirectory, "FOOTER.template.md"));
try {
await Deno.writeTextFile(footerPath, footer);
} catch (e) {
error(`Something went wrong trying to boostrap ${footerPath}.`, e);
}
console.log(`Template bootstrapping done in ${templateDirectory}.`);
console.log("Feel free to edit anything to your liking.");
};