static-anthology 2.0.0 → 2.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/cli.js +30 -28
- package/dist/cli.js.map +1 -1
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -4,19 +4,9 @@
|
|
|
4
4
|
import yargs from "yargs";
|
|
5
5
|
import { hideBin } from "yargs/helpers";
|
|
6
6
|
|
|
7
|
-
// src/utils.ts
|
|
8
|
-
import fs from "fs-extra";
|
|
9
|
-
async function emptyDirectory(path4) {
|
|
10
|
-
await fs.emptyDir(path4);
|
|
11
|
-
}
|
|
12
|
-
function titleToDirectory(title) {
|
|
13
|
-
return title.split("").filter((l) => /\w/.test(l)).join("");
|
|
14
|
-
}
|
|
15
|
-
|
|
16
7
|
// src/githubApi.ts
|
|
17
8
|
import axios from "axios";
|
|
18
9
|
import simpleGit from "simple-git";
|
|
19
|
-
import path from "path";
|
|
20
10
|
function sleep(ms) {
|
|
21
11
|
return new Promise((resolve) => {
|
|
22
12
|
setTimeout(resolve, ms);
|
|
@@ -52,17 +42,15 @@ async function isStaticWebApp(repo, githubToken) {
|
|
|
52
42
|
}
|
|
53
43
|
}
|
|
54
44
|
}
|
|
55
|
-
async function clone(clone_url, githubToken) {
|
|
56
|
-
const tmpDir = path.resolve("./tmp");
|
|
57
|
-
await emptyDirectory(tmpDir);
|
|
45
|
+
async function clone(clone_url, githubToken, tmpDirectory) {
|
|
58
46
|
const git = simpleGit();
|
|
59
47
|
if (githubToken) {
|
|
60
48
|
const remote = `https://${githubToken}@${clone_url.substring(
|
|
61
49
|
"https://".length
|
|
62
50
|
)}`;
|
|
63
|
-
await git.clone(remote,
|
|
51
|
+
await git.clone(remote, tmpDirectory);
|
|
64
52
|
} else {
|
|
65
|
-
await git.clone(clone_url,
|
|
53
|
+
await git.clone(clone_url, tmpDirectory);
|
|
66
54
|
}
|
|
67
55
|
}
|
|
68
56
|
|
|
@@ -95,7 +83,18 @@ async function generateSitemapFromGithub(user, token) {
|
|
|
95
83
|
// src/siteProcessor.ts
|
|
96
84
|
import fs2 from "fs-extra";
|
|
97
85
|
import nunjucks from "nunjucks";
|
|
98
|
-
import
|
|
86
|
+
import path from "path";
|
|
87
|
+
|
|
88
|
+
// src/utils.ts
|
|
89
|
+
import fs from "fs-extra";
|
|
90
|
+
async function emptyDirectory(path3) {
|
|
91
|
+
await fs.emptyDir(path3);
|
|
92
|
+
}
|
|
93
|
+
function titleToDirectory(title) {
|
|
94
|
+
return title.split("").filter((l) => /\w/.test(l)).join("");
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// src/siteProcessor.ts
|
|
99
98
|
var SiteProcessor = class {
|
|
100
99
|
views;
|
|
101
100
|
staticDir;
|
|
@@ -104,6 +103,7 @@ var SiteProcessor = class {
|
|
|
104
103
|
sitemapLocation;
|
|
105
104
|
githubToken;
|
|
106
105
|
sitemap;
|
|
106
|
+
tmpDirectory;
|
|
107
107
|
constructor(views, staticDir, outputDir, sitemapLocation, githubToken) {
|
|
108
108
|
this.views = views;
|
|
109
109
|
this.staticDir = staticDir;
|
|
@@ -111,6 +111,7 @@ var SiteProcessor = class {
|
|
|
111
111
|
this.githubToken = githubToken;
|
|
112
112
|
this.pages = [];
|
|
113
113
|
this.sitemapLocation = sitemapLocation;
|
|
114
|
+
this.tmpDirectory = path.resolve("./tmp");
|
|
114
115
|
}
|
|
115
116
|
async prepareOutputDir() {
|
|
116
117
|
nunjucks.configure(this.views, {
|
|
@@ -128,13 +129,14 @@ var SiteProcessor = class {
|
|
|
128
129
|
}
|
|
129
130
|
}
|
|
130
131
|
async copySourceToTmp(source) {
|
|
132
|
+
await emptyDirectory(this.tmpDirectory);
|
|
131
133
|
if ("file" in source) {
|
|
132
|
-
const resolvedPath =
|
|
134
|
+
const resolvedPath = path.resolve(source.file);
|
|
133
135
|
console.log(`Processing dir ${resolvedPath}`);
|
|
134
|
-
fs2.copySync(resolvedPath,
|
|
136
|
+
fs2.copySync(resolvedPath, this.tmpDirectory);
|
|
135
137
|
} else if ("github" in source) {
|
|
136
138
|
console.log(`Processing repo ${source.github}`);
|
|
137
|
-
await clone(source.github, this.githubToken);
|
|
139
|
+
await clone(source.github, this.githubToken, this.tmpDirectory);
|
|
138
140
|
} else if ("folder" in source) {
|
|
139
141
|
throw new Error("Folders are not yet supported");
|
|
140
142
|
}
|
|
@@ -142,16 +144,16 @@ var SiteProcessor = class {
|
|
|
142
144
|
async processSource(source) {
|
|
143
145
|
await this.copySourceToTmp(source);
|
|
144
146
|
const manifest = JSON.parse(
|
|
145
|
-
fs2.readFileSync("
|
|
147
|
+
fs2.readFileSync(this.tmpDirectory + "/swa_manifest.json", "utf8")
|
|
146
148
|
);
|
|
147
149
|
const { title, root } = manifest;
|
|
148
150
|
const directory = manifest.directory ?? titleToDirectory(title);
|
|
149
151
|
fs2.mkdirSync(`${this.outputDir}/${directory}`);
|
|
150
|
-
fs2.copySync(
|
|
152
|
+
fs2.copySync(`${this.tmpDirectory}/${root}`, `${this.outputDir}/${directory}`);
|
|
151
153
|
let tile;
|
|
152
|
-
if (fs2.existsSync(
|
|
154
|
+
if (fs2.existsSync(`${this.tmpDirectory}/swa_tile.png`)) {
|
|
153
155
|
tile = titleToDirectory(title) + ".png";
|
|
154
|
-
fs2.copySync(
|
|
156
|
+
fs2.copySync(`${this.tmpDirectory}/swa_tile.png`, `${this.outputDir}/tiles/${tile}`);
|
|
155
157
|
} else {
|
|
156
158
|
tile = "default.png";
|
|
157
159
|
}
|
|
@@ -177,7 +179,7 @@ var SiteProcessor = class {
|
|
|
177
179
|
};
|
|
178
180
|
|
|
179
181
|
// src/commands.ts
|
|
180
|
-
import
|
|
182
|
+
import path2 from "path";
|
|
181
183
|
import fs3 from "fs-extra";
|
|
182
184
|
async function compileCommand(args) {
|
|
183
185
|
const token = args.github_token || process.env.GITHUB_TOKEN;
|
|
@@ -185,10 +187,10 @@ async function compileCommand(args) {
|
|
|
185
187
|
console.warn("(!) No GitHub token \u2014 API may be rate limited");
|
|
186
188
|
}
|
|
187
189
|
const processor = new SiteProcessor(
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
190
|
+
path2.resolve(args.views),
|
|
191
|
+
path2.resolve(args.static),
|
|
192
|
+
path2.resolve(args.output),
|
|
193
|
+
path2.resolve(args.sitemap),
|
|
192
194
|
token
|
|
193
195
|
);
|
|
194
196
|
console.log("Starting build...");
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/utils.ts","../src/githubApi.ts","../src/sitemapGen.ts","../src/siteProcessor.ts","../src/commands.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { compileCommand, sourceCommand } from './commands.js';\n\nconst sharedOptions = {\n config: {\n alias: 'c',\n type: 'string',\n default: 'config.json',\n description: 'Path to config file',\n normalize: true,\n config: true,\n },\n 'github_token': {\n type: 'string',\n description: 'GitHub token (also reads GITHUB_TOKEN env var)',\n },\n username: {\n alias: 'u',\n type: 'string',\n description: 'GitHub username (required for GitHub features)',\n },\n views: {\n type: 'string',\n default: './views',\n description: 'Nunjucks templates directory',\n normalize: true,\n },\n static: {\n type: 'string',\n default: './static_src',\n description: 'Static assets source directory',\n normalize: true,\n },\n sitemap: {\n type: 'string',\n default: './sitemap.json',\n description: 'Sitemap JSON file',\n normalize: true,\n },\n output: {\n alias: 'o',\n type: 'string',\n default: './static',\n description: 'Build output directory',\n normalize: true,\n },\n} as const;\n\nyargs(hideBin(process.argv))\n .scriptName('static-anthology')\n .usage('Usage: $0 <command> [options]')\n .command({\n command: 'compile',\n aliases: ['$0'],\n describe: 'Build the static site from sitemap + templates',\n builder: (yargs) => yargs.options(sharedOptions),\n handler: compileCommand as any,\n })\n .command({\n command: 'source',\n describe: 'Generate sitemap from github',\n builder: (yargs) => yargs.options(sharedOptions),\n handler: sourceCommand as any,\n })\n .help()\n .alias('help', 'h')\n .version()\n .recommendCommands()\n .showHelpOnFail(false)\n .parse();","import fs from 'fs-extra';\n\nexport async function emptyDirectory(path: string) {\n await fs.emptyDir(path);\n}\n\nexport function titleToDirectory(title: string) {\n return title\n .split('')\n .filter((l) => /\\w/.test(l))\n .join('');\n}\n","import { emptyDirectory } from './utils.js';\nimport axios from 'axios';\nimport simpleGit from 'simple-git';\nimport { Repo } from './types/github.js';\nimport path from 'path';\n\nfunction sleep(ms: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction getHeaders(githubToken?: string) {\n const headers: any = {};\n if (githubToken) {\n headers['Authorization'] = `token ${githubToken}`;\n }\n return headers;\n}\n\nexport async function getRepos(\n username: string,\n githubToken?: string,\n): Promise<Repo[]> {\n await sleep(1000);\n const repos_response = await axios.get(\n `https://api.github.com/users/${username}/repos`,\n { headers: getHeaders(githubToken) },\n );\n return repos_response.data;\n}\n\nexport async function isStaticWebApp(repo: any, githubToken?: string) {\n try {\n await sleep(100);\n const manifest = (\n await axios.get(repo.url + '/contents/swa_manifest.json', {\n headers: getHeaders(githubToken),\n })\n ).data;\n return true;\n } catch (error: any) {\n if (error.response && error.response.status === 404) {\n return false;\n } else {\n throw error;\n }\n }\n}\n\nexport async function clone(clone_url: string, githubToken?: string) {\n const tmpDir = path.resolve('./tmp');\n await emptyDirectory(tmpDir);\n //@ts-ignore\n const git = simpleGit();\n\n if (githubToken) {\n const remote = `https://${githubToken}@${clone_url.substring(\n 'https://'.length,\n )}`;\n await git.clone(remote, tmpDir);\n } else {\n await git.clone(clone_url, tmpDir);\n }\n}\n","\n/**\n * Utilities for generating sitemap files. These tools are run via separate commands \n * compared to the compilation process.\n */\n\nimport { getRepos, isStaticWebApp } from \"./githubApi.js\";\nimport { Repo } from \"./types/github.js\";\nimport { Sitemap } from \"./types/sitemapSource.js\";\n\n\nfunction repoComparator(r1: Repo, r2: Repo) {\n const r1_time = new Date(r1.updated_at).getTime();\n const r2_time = new Date(r2.updated_at).getTime();\n return r1_time - r2_time;\n}\n\nexport async function generateSitemapFromGithub(user: string, token: string): Promise<Sitemap> {\n async function getStaticWebApps() {\n const filtered = [];\n const repos = await getRepos(user, token);\n for (let i = 0; i < repos.length; i++) {\n const repo = repos[i];\n console.log(`Testing repo: ${repo.name}`);\n if (await isStaticWebApp(repo, token)) {\n filtered.push(repo);\n }\n }\n return filtered;\n }\n\n const repos = await getStaticWebApps()\n repos.sort(repoComparator).reverse(); // Sort from newest to oldest\n\n return repos.map(repo => ({\n \"github\": repo.clone_url\n }))\n}\n","import fs from 'fs-extra';\nimport nunjucks from 'nunjucks';\n\nimport path from 'path';\n\nimport { clone } from './githubApi.js';\nimport { Manifest } from './types/manifest.js';\nimport { PageInfo } from './types/page.js';\nimport { Sitemap, SitemapSource } from './types/sitemapSource.js';\nimport { emptyDirectory, titleToDirectory } from './utils.js';\n\nexport default class SiteProcessor {\n views: string;\n staticDir: string;\n pages: PageInfo[];\n outputDir: string;\n sitemapLocation: string;\n githubToken?: string;\n sitemap?: Sitemap;\n \n constructor(\n views: string,\n staticDir: string,\n outputDir: string,\n sitemapLocation: string,\n githubToken?: string,\n ) {\n this.views = views;\n this.staticDir = staticDir;\n this.outputDir = outputDir;\n this.githubToken = githubToken;\n this.pages = [];\n this.sitemapLocation = sitemapLocation;\n }\n\n async prepareOutputDir() {\n nunjucks.configure(this.views, {\n autoescape: true,\n });\n await emptyDirectory(this.outputDir);\n fs.copySync(this.staticDir, this.outputDir);\n }\n\n async processSources() {\n if (!this.sitemap) {\n throw new Error('Sitemap must be acquired before processing sources.')\n }\n\n for (const source of this.sitemap) {\n await this.processSource(source);\n }\n }\n\n async copySourceToTmp(source: SitemapSource) {\n if ('file' in source) {\n const resolvedPath = path.resolve(source.file)\n console.log(`Processing dir ${resolvedPath}`)\n fs.copySync(resolvedPath, './tmp')\n } else if ('github' in source) {\n console.log(`Processing repo ${source.github}`);\n await clone(source.github, this.githubToken);\n } else if ('folder' in source) {\n throw new Error('Folders are not yet supported')\n }\n }\n\n async processSource(source: SitemapSource) {\n await this.copySourceToTmp(source)\n\n // Now we have a local copy of the source. Read the manifest.\n const manifest: Manifest = JSON.parse(\n fs.readFileSync('./tmp/swa_manifest.json', 'utf8'),\n );\n const { title, root } = manifest;\n const directory = manifest.directory ?? titleToDirectory(title);\n\n fs.mkdirSync(`${this.outputDir}/${directory}`);\n fs.copySync(`./tmp/${root}`, `${this.outputDir}/${directory}`);\n\n let tile;\n if (fs.existsSync('./tmp/swa_tile.png')) {\n tile = titleToDirectory(title) + '.png';\n fs.copySync('./tmp/swa_tile.png', `${this.outputDir}/tiles/${tile}`);\n } else {\n tile = 'default.png';\n }\n\n this.pages.push({\n title,\n directory,\n tile,\n });\n }\n\n fetchSitemap() {\n this.sitemap = fs.readJSONSync(this.sitemapLocation)\n }\n\n renderHomepage() {\n // We want to render index.html to contain all tiles.\n const indexHtml = nunjucks.render('index.njk', { tiles: this.pages });\n fs.writeFileSync(`${this.outputDir}/index.html`, indexHtml, 'utf8');\n }\n\n async process() {\n await this.prepareOutputDir()\n this.fetchSitemap();\n await this.processSources();\n this.renderHomepage();\n }\n\n}\n","import { generateSitemapFromGithub } from \"./sitemapGen.js\";\nimport SiteProcessor from \"./siteProcessor.js\";\nimport { Args } from \"./types/args.js\";\nimport path from 'path' \nimport fs from 'fs-extra'\n\nexport async function compileCommand(args: Args) {\n const token = args.github_token || process.env.GITHUB_TOKEN;\n\n if (args.username && !token) {\n console.warn('(!) No GitHub token — API may be rate limited');\n }\n\n const processor = new SiteProcessor(\n path.resolve(args.views as string),\n path.resolve(args.static as string),\n path.resolve(args.output as string),\n path.resolve(args.sitemap as string),\n token\n );\n\n console.log('Starting build...');\n await processor.process();\n console.log('Done! Output →', args.output);\n}\n\nexport async function sourceCommand(args: Args) {\n if (!args.username) {\n throw new Error('(!) Username is required for downloading a sitemap from github')\n }\n const sitemap = await generateSitemapFromGithub(args.username, args.github_token)\n fs.writeJSONSync('sitemap.json', sitemap)\n}"],"mappings":"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","names":["path","repos","fs","path","fs","path","path","fs","yargs"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/githubApi.ts","../src/sitemapGen.ts","../src/siteProcessor.ts","../src/utils.ts","../src/commands.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { compileCommand, sourceCommand } from './commands.js';\n\nconst sharedOptions = {\n config: {\n alias: 'c',\n type: 'string',\n default: 'config.json',\n description: 'Path to config file',\n normalize: true,\n config: true,\n },\n 'github_token': {\n type: 'string',\n description: 'GitHub token (also reads GITHUB_TOKEN env var)',\n },\n username: {\n alias: 'u',\n type: 'string',\n description: 'GitHub username (required for GitHub features)',\n },\n views: {\n type: 'string',\n default: './views',\n description: 'Nunjucks templates directory',\n normalize: true,\n },\n static: {\n type: 'string',\n default: './static_src',\n description: 'Static assets source directory',\n normalize: true,\n },\n sitemap: {\n type: 'string',\n default: './sitemap.json',\n description: 'Sitemap JSON file',\n normalize: true,\n },\n output: {\n alias: 'o',\n type: 'string',\n default: './static',\n description: 'Build output directory',\n normalize: true,\n },\n} as const;\n\nyargs(hideBin(process.argv))\n .scriptName('static-anthology')\n .usage('Usage: $0 <command> [options]')\n .command({\n command: 'compile',\n aliases: ['$0'],\n describe: 'Build the static site from sitemap + templates',\n builder: (yargs) => yargs.options(sharedOptions),\n handler: compileCommand as any,\n })\n .command({\n command: 'source',\n describe: 'Generate sitemap from github',\n builder: (yargs) => yargs.options(sharedOptions),\n handler: sourceCommand as any,\n })\n .help()\n .alias('help', 'h')\n .version()\n .recommendCommands()\n .showHelpOnFail(false)\n .parse();","import { emptyDirectory } from './utils.js';\nimport axios from 'axios';\nimport simpleGit from 'simple-git';\nimport { Repo } from './types/github.js';\nimport path from 'path';\n\nfunction sleep(ms: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction getHeaders(githubToken?: string) {\n const headers: any = {};\n if (githubToken) {\n headers['Authorization'] = `token ${githubToken}`;\n }\n return headers;\n}\n\nexport async function getRepos(\n username: string,\n githubToken?: string,\n): Promise<Repo[]> {\n await sleep(1000);\n const repos_response = await axios.get(\n `https://api.github.com/users/${username}/repos`,\n { headers: getHeaders(githubToken) },\n );\n return repos_response.data;\n}\n\nexport async function isStaticWebApp(repo: any, githubToken?: string) {\n try {\n await sleep(100);\n const manifest = (\n await axios.get(repo.url + '/contents/swa_manifest.json', {\n headers: getHeaders(githubToken),\n })\n ).data;\n return true;\n } catch (error: any) {\n if (error.response && error.response.status === 404) {\n return false;\n } else {\n throw error;\n }\n }\n}\n\nexport async function clone(clone_url: string, githubToken?: string, tmpDirectory?: string) {\n //@ts-ignore\n const git = simpleGit();\n if (githubToken) {\n const remote = `https://${githubToken}@${clone_url.substring(\n 'https://'.length,\n )}`;\n await git.clone(remote, tmpDirectory);\n } else {\n await git.clone(clone_url, tmpDirectory);\n }\n}\n","\n/**\n * Utilities for generating sitemap files. These tools are run via separate commands \n * compared to the compilation process.\n */\n\nimport { getRepos, isStaticWebApp } from \"./githubApi.js\";\nimport { Repo } from \"./types/github.js\";\nimport { Sitemap } from \"./types/sitemapSource.js\";\n\n\nfunction repoComparator(r1: Repo, r2: Repo) {\n const r1_time = new Date(r1.updated_at).getTime();\n const r2_time = new Date(r2.updated_at).getTime();\n return r1_time - r2_time;\n}\n\nexport async function generateSitemapFromGithub(user: string, token: string): Promise<Sitemap> {\n async function getStaticWebApps() {\n const filtered = [];\n const repos = await getRepos(user, token);\n for (let i = 0; i < repos.length; i++) {\n const repo = repos[i];\n console.log(`Testing repo: ${repo.name}`);\n if (await isStaticWebApp(repo, token)) {\n filtered.push(repo);\n }\n }\n return filtered;\n }\n\n const repos = await getStaticWebApps()\n repos.sort(repoComparator).reverse(); // Sort from newest to oldest\n\n return repos.map(repo => ({\n \"github\": repo.clone_url\n }))\n}\n","import fs from 'fs-extra';\nimport nunjucks from 'nunjucks';\n\nimport path from 'path';\n\nimport { clone } from './githubApi.js';\nimport { Manifest } from './types/manifest.js';\nimport { PageInfo } from './types/page.js';\nimport { Sitemap, SitemapSource } from './types/sitemapSource.js';\nimport { emptyDirectory, titleToDirectory } from './utils.js';\n\nexport default class SiteProcessor {\n views: string;\n staticDir: string;\n pages: PageInfo[];\n outputDir: string;\n sitemapLocation: string;\n githubToken?: string;\n sitemap?: Sitemap;\n tmpDirectory: string;\n \n constructor(\n views: string,\n staticDir: string,\n outputDir: string,\n sitemapLocation: string,\n githubToken?: string,\n ) {\n this.views = views;\n this.staticDir = staticDir;\n this.outputDir = outputDir;\n this.githubToken = githubToken;\n this.pages = [];\n this.sitemapLocation = sitemapLocation;\n this.tmpDirectory = path.resolve('./tmp')\n }\n\n async prepareOutputDir() {\n nunjucks.configure(this.views, {\n autoescape: true,\n });\n await emptyDirectory(this.outputDir);\n fs.copySync(this.staticDir, this.outputDir);\n }\n\n async processSources() {\n if (!this.sitemap) {\n throw new Error('Sitemap must be acquired before processing sources.')\n }\n\n for (const source of this.sitemap) {\n await this.processSource(source);\n }\n }\n\n async copySourceToTmp(source: SitemapSource) {\n await emptyDirectory(this.tmpDirectory)\n if ('file' in source) {\n const resolvedPath = path.resolve(source.file)\n console.log(`Processing dir ${resolvedPath}`)\n fs.copySync(resolvedPath, this.tmpDirectory)\n } else if ('github' in source) {\n console.log(`Processing repo ${source.github}`);\n await clone(source.github, this.githubToken, this.tmpDirectory);\n } else if ('folder' in source) {\n throw new Error('Folders are not yet supported')\n }\n }\n\n async processSource(source: SitemapSource) {\n await this.copySourceToTmp(source)\n\n // Now we have a local copy of the source. Read the manifest.\n const manifest: Manifest = JSON.parse(\n fs.readFileSync(this.tmpDirectory + '/swa_manifest.json', 'utf8'),\n );\n const { title, root } = manifest;\n const directory = manifest.directory ?? titleToDirectory(title);\n\n fs.mkdirSync(`${this.outputDir}/${directory}`);\n fs.copySync(`${this.tmpDirectory}/${root}`, `${this.outputDir}/${directory}`);\n\n let tile;\n if (fs.existsSync(`${this.tmpDirectory}/swa_tile.png`)) {\n tile = titleToDirectory(title) + '.png';\n fs.copySync(`${this.tmpDirectory}/swa_tile.png`, `${this.outputDir}/tiles/${tile}`);\n } else {\n tile = 'default.png';\n }\n\n this.pages.push({\n title,\n directory,\n tile,\n });\n }\n\n fetchSitemap() {\n this.sitemap = fs.readJSONSync(this.sitemapLocation)\n }\n\n renderHomepage() {\n // We want to render index.html to contain all tiles.\n const indexHtml = nunjucks.render('index.njk', { tiles: this.pages });\n fs.writeFileSync(`${this.outputDir}/index.html`, indexHtml, 'utf8');\n }\n\n async process() {\n await this.prepareOutputDir()\n this.fetchSitemap();\n await this.processSources();\n this.renderHomepage();\n }\n\n}\n","import fs from 'fs-extra';\n\nexport async function emptyDirectory(path: string) {\n await fs.emptyDir(path);\n}\n\nexport function titleToDirectory(title: string) {\n return title\n .split('')\n .filter((l) => /\\w/.test(l))\n .join('');\n}\n","import { generateSitemapFromGithub } from \"./sitemapGen.js\";\nimport SiteProcessor from \"./siteProcessor.js\";\nimport { Args } from \"./types/args.js\";\nimport path from 'path' \nimport fs from 'fs-extra'\n\nexport async function compileCommand(args: Args) {\n const token = args.github_token || process.env.GITHUB_TOKEN;\n\n if (args.username && !token) {\n console.warn('(!) No GitHub token — API may be rate limited');\n }\n\n const processor = new SiteProcessor(\n path.resolve(args.views as string),\n path.resolve(args.static as string),\n path.resolve(args.output as string),\n path.resolve(args.sitemap as string),\n token\n );\n\n console.log('Starting build...');\n await processor.process();\n console.log('Done! Output →', args.output);\n}\n\nexport async function sourceCommand(args: Args) {\n if (!args.username) {\n throw new Error('(!) Username is required for downloading a sitemap from github')\n }\n const sitemap = await generateSitemapFromGithub(args.username, args.github_token)\n fs.writeJSONSync('sitemap.json', sitemap)\n}"],"mappings":";;;AAEA,OAAO,WAAW;AAClB,SAAS,eAAe;;;ACFxB,OAAO,WAAW;AAClB,OAAO,eAAe;AAItB,SAAS,MAAM,IAAY;AACvB,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC5B,eAAW,SAAS,EAAE;AAAA,EAC1B,CAAC;AACL;AAEA,SAAS,WAAW,aAAsB;AACtC,QAAM,UAAe,CAAC;AACtB,MAAI,aAAa;AACb,YAAQ,eAAe,IAAI,SAAS,WAAW;AAAA,EACnD;AACA,SAAO;AACX;AAEA,eAAsB,SAClB,UACA,aACe;AACf,QAAM,MAAM,GAAI;AAChB,QAAM,iBAAiB,MAAM,MAAM;AAAA,IAC/B,gCAAgC,QAAQ;AAAA,IACxC,EAAE,SAAS,WAAW,WAAW,EAAE;AAAA,EACvC;AACA,SAAO,eAAe;AAC1B;AAEA,eAAsB,eAAe,MAAW,aAAsB;AAClE,MAAI;AACA,UAAM,MAAM,GAAG;AACf,UAAM,YACF,MAAM,MAAM,IAAI,KAAK,MAAM,+BAA+B;AAAA,MACtD,SAAS,WAAW,WAAW;AAAA,IACnC,CAAC,GACH;AACF,WAAO;AAAA,EACX,SAAS,OAAY;AACjB,QAAI,MAAM,YAAY,MAAM,SAAS,WAAW,KAAK;AACjD,aAAO;AAAA,IACX,OAAO;AACH,YAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAEA,eAAsB,MAAM,WAAmB,aAAsB,cAAuB;AAExF,QAAM,MAAM,UAAU;AACtB,MAAI,aAAa;AACb,UAAM,SAAS,WAAW,WAAW,IAAI,UAAU;AAAA,MAC/C,WAAW;AAAA,IACf,CAAC;AACD,UAAM,IAAI,MAAM,QAAQ,YAAY;AAAA,EACxC,OAAO;AACH,UAAM,IAAI,MAAM,WAAW,YAAY;AAAA,EAC3C;AACJ;;;AClDA,SAAS,eAAe,IAAU,IAAU;AACxC,QAAM,UAAU,IAAI,KAAK,GAAG,UAAU,EAAE,QAAQ;AAChD,QAAM,UAAU,IAAI,KAAK,GAAG,UAAU,EAAE,QAAQ;AAChD,SAAO,UAAU;AACrB;AAEA,eAAsB,0BAA0B,MAAc,OAAiC;AAC3F,iBAAe,mBAAmB;AAC9B,UAAM,WAAW,CAAC;AAClB,UAAMA,SAAQ,MAAM,SAAS,MAAM,KAAK;AACxC,aAAS,IAAI,GAAG,IAAIA,OAAM,QAAQ,KAAK;AACnC,YAAM,OAAOA,OAAM,CAAC;AACpB,cAAQ,IAAI,iBAAiB,KAAK,IAAI,EAAE;AACxC,UAAI,MAAM,eAAe,MAAM,KAAK,GAAG;AACnC,iBAAS,KAAK,IAAI;AAAA,MACtB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAEA,QAAM,QAAQ,MAAM,iBAAiB;AACrC,QAAM,KAAK,cAAc,EAAE,QAAQ;AAEnC,SAAO,MAAM,IAAI,WAAS;AAAA,IACtB,UAAU,KAAK;AAAA,EACnB,EAAE;AACN;;;ACrCA,OAAOC,SAAQ;AACf,OAAO,cAAc;AAErB,OAAO,UAAU;;;ACHjB,OAAO,QAAQ;AAEf,eAAsB,eAAeC,OAAc;AAC/C,QAAM,GAAG,SAASA,KAAI;AAC1B;AAEO,SAAS,iBAAiB,OAAe;AAC5C,SAAO,MACF,MAAM,EAAE,EACR,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,EAC1B,KAAK,EAAE;AAChB;;;ADAA,IAAqB,gBAArB,MAAmC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YACI,OACA,WACA,WACA,iBACA,aACF;AACE,SAAK,QAAQ;AACb,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,cAAc;AACnB,SAAK,QAAQ,CAAC;AACd,SAAK,kBAAkB;AACvB,SAAK,eAAe,KAAK,QAAQ,OAAO;AAAA,EAC5C;AAAA,EAEA,MAAM,mBAAmB;AACrB,aAAS,UAAU,KAAK,OAAO;AAAA,MAC3B,YAAY;AAAA,IAChB,CAAC;AACD,UAAM,eAAe,KAAK,SAAS;AACnC,IAAAC,IAAG,SAAS,KAAK,WAAW,KAAK,SAAS;AAAA,EAC9C;AAAA,EAEA,MAAM,iBAAiB;AACnB,QAAI,CAAC,KAAK,SAAS;AACf,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACzE;AAEA,eAAW,UAAU,KAAK,SAAS;AAC/B,YAAM,KAAK,cAAc,MAAM;AAAA,IACnC;AAAA,EACJ;AAAA,EAEA,MAAM,gBAAgB,QAAuB;AACzC,UAAM,eAAe,KAAK,YAAY;AACtC,QAAI,UAAU,QAAQ;AAClB,YAAM,eAAgB,KAAK,QAAQ,OAAO,IAAI;AAC9C,cAAQ,IAAI,mBAAmB,YAAY,EAAE;AAC7C,MAAAA,IAAG,SAAS,cAAc,KAAK,YAAY;AAAA,IAC/C,WAAW,YAAY,QAAQ;AAC3B,cAAQ,IAAI,mBAAmB,OAAO,MAAM,EAAE;AAC9C,YAAM,MAAM,OAAO,QAAQ,KAAK,aAAa,KAAK,YAAY;AAAA,IAClE,WAAW,YAAY,QAAQ;AAC3B,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACnD;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,QAAuB;AACvC,UAAM,KAAK,gBAAgB,MAAM;AAGjC,UAAM,WAAqB,KAAK;AAAA,MAC5BA,IAAG,aAAa,KAAK,eAAe,sBAAsB,MAAM;AAAA,IACpE;AACA,UAAM,EAAE,OAAO,KAAK,IAAI;AACxB,UAAM,YAAY,SAAS,aAAa,iBAAiB,KAAK;AAE9D,IAAAA,IAAG,UAAU,GAAG,KAAK,SAAS,IAAI,SAAS,EAAE;AAC7C,IAAAA,IAAG,SAAS,GAAG,KAAK,YAAY,IAAI,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,SAAS,EAAE;AAE5E,QAAI;AACJ,QAAIA,IAAG,WAAW,GAAG,KAAK,YAAY,eAAe,GAAG;AACpD,aAAO,iBAAiB,KAAK,IAAI;AACjC,MAAAA,IAAG,SAAS,GAAG,KAAK,YAAY,iBAAiB,GAAG,KAAK,SAAS,UAAU,IAAI,EAAE;AAAA,IACtF,OAAO;AACH,aAAO;AAAA,IACX;AAEA,SAAK,MAAM,KAAK;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,eAAe;AACX,SAAK,UAAUA,IAAG,aAAa,KAAK,eAAe;AAAA,EACvD;AAAA,EAEA,iBAAiB;AAEb,UAAM,YAAY,SAAS,OAAO,aAAa,EAAE,OAAO,KAAK,MAAM,CAAC;AACpE,IAAAA,IAAG,cAAc,GAAG,KAAK,SAAS,eAAe,WAAW,MAAM;AAAA,EACtE;AAAA,EAEA,MAAM,UAAU;AACZ,UAAM,KAAK,iBAAiB;AAC5B,SAAK,aAAa;AAClB,UAAM,KAAK,eAAe;AAC1B,SAAK,eAAe;AAAA,EACxB;AAEJ;;;AE/GA,OAAOC,WAAU;AACjB,OAAOC,SAAQ;AAEf,eAAsB,eAAe,MAAY;AAC7C,QAAM,QAAQ,KAAK,gBAAgB,QAAQ,IAAI;AAE/C,MAAI,KAAK,YAAY,CAAC,OAAO;AAC7B,YAAQ,KAAK,oDAA+C;AAAA,EAC5D;AAEA,QAAM,YAAY,IAAI;AAAA,IAClBD,MAAK,QAAQ,KAAK,KAAe;AAAA,IACjCA,MAAK,QAAQ,KAAK,MAAgB;AAAA,IAClCA,MAAK,QAAQ,KAAK,MAAgB;AAAA,IAClCA,MAAK,QAAQ,KAAK,OAAiB;AAAA,IACnC;AAAA,EACJ;AAEA,UAAQ,IAAI,mBAAmB;AAC/B,QAAM,UAAU,QAAQ;AACxB,UAAQ,IAAI,uBAAkB,KAAK,MAAM;AAC7C;AAEA,eAAsB,cAAc,MAAY;AAC5C,MAAI,CAAC,KAAK,UAAU;AAChB,UAAM,IAAI,MAAM,gEAAgE;AAAA,EACpF;AACA,QAAM,UAAU,MAAM,0BAA0B,KAAK,UAAU,KAAK,YAAY;AAChF,EAAAC,IAAG,cAAc,gBAAgB,OAAO;AAC5C;;;AL1BA,IAAM,gBAAgB;AAAA,EACpB,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,QAAQ;AAAA,EACV;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AACF;AAEA,MAAM,QAAQ,QAAQ,IAAI,CAAC,EACxB,WAAW,kBAAkB,EAC7B,MAAM,+BAA+B,EACrC,QAAQ;AAAA,EACP,SAAS;AAAA,EACT,SAAS,CAAC,IAAI;AAAA,EACd,UAAU;AAAA,EACV,SAAS,CAACC,WAAUA,OAAM,QAAQ,aAAa;AAAA,EAC/C,SAAS;AACX,CAAC,EACA,QAAQ;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS,CAACA,WAAUA,OAAM,QAAQ,aAAa;AAAA,EAC/C,SAAS;AACX,CAAC,EACA,KAAK,EACL,MAAM,QAAQ,GAAG,EACjB,QAAQ,EACR,kBAAkB,EAClB,eAAe,KAAK,EACpB,MAAM;","names":["repos","fs","path","fs","path","fs","yargs"]}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "static-anthology",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "Static site renderer for project showcases",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"bin": {
|
|
10
|
-
"github-web-server": "
|
|
10
|
+
"github-web-server": "dist/cli.js"
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
13
|
"dist"
|