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 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, tmpDir);
51
+ await git.clone(remote, tmpDirectory);
64
52
  } else {
65
- await git.clone(clone_url, tmpDir);
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 path2 from "path";
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 = path2.resolve(source.file);
134
+ const resolvedPath = path.resolve(source.file);
133
135
  console.log(`Processing dir ${resolvedPath}`);
134
- fs2.copySync(resolvedPath, "./tmp");
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("./tmp/swa_manifest.json", "utf8")
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(`./tmp/${root}`, `${this.outputDir}/${directory}`);
152
+ fs2.copySync(`${this.tmpDirectory}/${root}`, `${this.outputDir}/${directory}`);
151
153
  let tile;
152
- if (fs2.existsSync("./tmp/swa_tile.png")) {
154
+ if (fs2.existsSync(`${this.tmpDirectory}/swa_tile.png`)) {
153
155
  tile = titleToDirectory(title) + ".png";
154
- fs2.copySync("./tmp/swa_tile.png", `${this.outputDir}/tiles/${tile}`);
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 path3 from "path";
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
- path3.resolve(args.views),
189
- path3.resolve(args.static),
190
- path3.resolve(args.output),
191
- path3.resolve(args.sitemap),
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":";;;AAEA,OAAO,WAAW;AAClB,SAAS,eAAe;;;ACHxB,OAAO,QAAQ;AAEf,eAAsB,eAAeA,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;;;ACVA,OAAO,WAAW;AAClB,OAAO,eAAe;AAEtB,OAAO,UAAU;AAEjB,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;AACjE,QAAM,SAAS,KAAK,QAAQ,OAAO;AACnC,QAAM,eAAe,MAAM;AAE3B,QAAM,MAAM,UAAU;AAEtB,MAAI,aAAa;AACb,UAAM,SAAS,WAAW,WAAW,IAAI,UAAU;AAAA,MAC/C,WAAW;AAAA,IACf,CAAC;AACD,UAAM,IAAI,MAAM,QAAQ,MAAM;AAAA,EAClC,OAAO;AACH,UAAM,IAAI,MAAM,WAAW,MAAM;AAAA,EACrC;AACJ;;;ACrDA,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,UAAMC,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,OAAOC,WAAU;AAQjB,IAAqB,gBAArB,MAAmC;AAAA,EAC/B;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;AAAA,EAC3B;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,QAAI,UAAU,QAAQ;AAClB,YAAM,eAAgBC,MAAK,QAAQ,OAAO,IAAI;AAC9C,cAAQ,IAAI,mBAAmB,YAAY,EAAE;AAC7C,MAAAD,IAAG,SAAS,cAAc,OAAO;AAAA,IACrC,WAAW,YAAY,QAAQ;AAC3B,cAAQ,IAAI,mBAAmB,OAAO,MAAM,EAAE;AAC9C,YAAM,MAAM,OAAO,QAAQ,KAAK,WAAW;AAAA,IAC/C,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,2BAA2B,MAAM;AAAA,IACrD;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,SAAS,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,SAAS,EAAE;AAE7D,QAAI;AACJ,QAAIA,IAAG,WAAW,oBAAoB,GAAG;AACrC,aAAO,iBAAiB,KAAK,IAAI;AACjC,MAAAA,IAAG,SAAS,sBAAsB,GAAG,KAAK,SAAS,UAAU,IAAI,EAAE;AAAA,IACvE,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;;;AC5GA,OAAOE,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":["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":"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","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.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": "./dist/cli.js"
10
+ "github-web-server": "dist/cli.js"
11
11
  },
12
12
  "files": [
13
13
  "dist"