Skip to content

Commit 4d955d7

Browse files
committed
Initial commit
1 parent e1cfee1 commit 4d955d7

File tree

4,206 files changed

+629774
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

4,206 files changed

+629774
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#!/usr/bin/env node
2+
3+
const { basename, dirname, format, relative, resolve } = require("path");
4+
const { readdir, stat, readFile, writeFile, mkdir } = require("fs").promises;
5+
6+
const dedent = require("dedent");
7+
8+
const ENC = "utf-8";
9+
10+
const INLINE_REGEX = /(.*)\s*\/\/\s*inline\s*$/gimu;
11+
const DEFER_REGEX = /(.*)\s*\/\/\s*link\s*$/gimu;
12+
const INLINE_BLOCK_REGEX = /\/\/\s*>*\s*<{3,}\s*inline([\s\S]*?)\/\/\s*>{3,}.*/gimu;
13+
const DEFER_BLOCK_REGEX = /\/\/\s*>*\s*<{3,}\s*link([\s\S]*?)\/\/\s*>{3,}.*/gimu;
14+
15+
function genHeader(filename) {
16+
return dedent`
17+
// THIS FILE IS AUTOGENERATED, DO NOT MODIFY!
18+
//
19+
// To change the contents of this file,
20+
// edit \`${filename}\`
21+
// and run \`npm run build:css\`.
22+
//
23+
// During development you can run \`npm run watch:css\`
24+
// to continuosly rebuild this file.
25+
`;
26+
}
27+
28+
// <https://stackoverflow.com/a/45130990/870615>
29+
async function getFiles(dir) {
30+
const subdirs = await readdir(dir);
31+
const files = await Promise.all(
32+
subdirs.map(async subdir => {
33+
const res = resolve(dir, subdir);
34+
return (await stat(res)).isDirectory() ? getFiles(res) : res;
35+
})
36+
);
37+
return files.reduce((a, f) => a.concat(f), []);
38+
}
39+
40+
(async function main() {
41+
try {
42+
const files = process.argv.length > 2 ? [process.argv[2]] : await getFiles("_sass");
43+
await Promise.all(
44+
files.filter(f => f.endsWith(".pre.scss")).map(async file => {
45+
const content = await readFile(file, ENC);
46+
const name = basename(file, ".pre.scss");
47+
const filename = format({ name, ext: ".scss" });
48+
const dir = dirname(file);
49+
50+
const inline = content
51+
.replace(INLINE_REGEX, "$1")
52+
.replace(INLINE_BLOCK_REGEX, "$1")
53+
.replace(DEFER_REGEX, "// $1")
54+
.replace(DEFER_BLOCK_REGEX, "");
55+
56+
const defer = content
57+
.replace(DEFER_REGEX, "$1")
58+
.replace(DEFER_BLOCK_REGEX, "$1")
59+
.replace(INLINE_REGEX, "// $1")
60+
.replace(INLINE_BLOCK_REGEX, "");
61+
62+
const path = relative(resolve(), dirname(file));
63+
const header = genHeader([path, basename(file)].join("/"));
64+
65+
await Promise.all([
66+
mkdir(resolve(dir, "__inline__"), { recursive: true }),
67+
mkdir(resolve(dir, "__link__"), { recursive: true }),
68+
]);
69+
return Promise.all([
70+
writeFile(resolve(dir, "__inline__", filename), header + "\n\n" + inline, ENC),
71+
writeFile(resolve(dir, "__link__", filename), header + "\n\n" + defer, ENC),
72+
]);
73+
})
74+
);
75+
process.exit(0);
76+
} catch (e) {
77+
console.error(e); // eslint-disable-line
78+
process.exit(1);
79+
}
80+
})();
+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#!/usr/bin/env node
2+
3+
const { resolve } = require("path");
4+
const fs = require('fs');
5+
const { readdir, rename, unlink, readFile, writeFile, access } = fs.promises;
6+
const { promisify } = require('util');
7+
const exec = promisify(require('child_process').exec);
8+
9+
const vPrev = require("../assets/version.json").version;
10+
const vNext = require("../package.json").version;
11+
12+
const ENC = "utf-8";
13+
14+
const FILES = [
15+
"./jekyll-theme-hydejack.gemspec",
16+
"./_includes/body/scripts.html",
17+
"./_includes/body/footer.html",
18+
"./_includes/head/meta-static.html",
19+
"./_includes/head/links-static.html",
20+
"./_includes/head/styles-inline.html",
21+
"./_includes/head/styles-no-inline.html",
22+
"./_includes/header.txt",
23+
"./_includes/js/service-worker.js",
24+
"./_layouts/compress.html",
25+
"./_js/lib/version.js",
26+
].map(f => resolve(f));
27+
28+
/**
29+
* @param {string} dir
30+
* @returns {Promise<string[]>}
31+
* @see https://stackoverflow.com/a/45130990/870615
32+
*/
33+
async function getFiles(dir) {
34+
const dirents = await readdir(dir, { withFileTypes: true });
35+
const files = await Promise.all(dirents.map((dirent) => {
36+
const res = resolve(dir, dirent.name);
37+
return dirent.isDirectory() ? getFiles(res) : [res];
38+
}));
39+
return Array.prototype.concat(...files);
40+
}
41+
42+
(async function main() {
43+
try {
44+
const prev = vPrev.replace(/\./g, "\\.");
45+
const prevRegExp = new RegExp(prev, "g");
46+
47+
// const args = await Promise.all([
48+
// getFiles("./hyde/_posts"),
49+
// getFiles("./hydejack/_posts"),
50+
// getFiles("./_projects"),
51+
// getFiles("./docs"),
52+
// ]);
53+
const args = [];
54+
55+
const files = Array.prototype.concat.call(FILES, ...args);
56+
57+
const pFiles = Promise.all(
58+
files
59+
.filter(([f]) => !f.startsWith("."))
60+
.map(f => [f, readFile(f, ENC)])
61+
.map(async ([f, p]) => {
62+
const content = await p;
63+
64+
// if (f.includes("CHANGELOG")) {
65+
// const pattern = new RegExp(`([^v])${prev}`, "g");
66+
// return [f, content.replace(pattern, `$1${vNext}`)];
67+
// }
68+
69+
return [f, content.replace(prevRegExp, vNext)];
70+
})
71+
.map(async p => {
72+
const [f, content] = await p;
73+
return writeFile(f, content, ENC);
74+
})
75+
);
76+
77+
const pUnlink = Promise.all(
78+
(await getFiles('./assets/js'))
79+
.filter(f => f.match(/assets\/js\/(.*)hydejack-(.*)/i))
80+
.map(unlink)
81+
);
82+
83+
const pJSCSS = rename(
84+
resolve(`./assets/css/hydejack-${vPrev}.css`),
85+
resolve(`./assets/css/hydejack-${vNext}.css`)
86+
);
87+
88+
await Promise.all([pUnlink, pFiles, pJSCSS]);
89+
90+
await writeFile('./assets/version.json', JSON.stringify({ version: vNext, prevVersion: vPrev }, null, 2));
91+
92+
try {
93+
await access('../.scripts/version.js', fs.constants.X_OK);
94+
await exec('../.scripts/version.js');
95+
} catch (e) {
96+
console.warn(e)
97+
}
98+
99+
process.exit(0);
100+
} catch (e) {
101+
console.error(e); // eslint-disable-line
102+
process.exit(1);
103+
}
104+
})();

0 commit comments

Comments
 (0)