Press n or j to go to the next uncovered block, b, p or k for the previous block.
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 98 99 100 101 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 1x 1x | import Hexo from 'hexo'; import { join } from 'upath'; import * as cleaner from './clean'; import { Nullable } from './globals'; import { taskSafelink } from './gulp.safelink'; import { taskSeo } from './gulp.seo'; import * as pcopy from './post/copy'; import standaloneRunner from './post/standalone'; import { chain } from './utils/chain'; import noop from './utils/noop'; import scheduler from './utils/scheduler'; import { fetchConfig, getConfig, setConfig } from './_config'; class SBG { cwd: string; config = getConfig(); setConfig = setConfig; getConfig = getConfig; /** * Static blog generator * @param cwd base folder */ constructor(cwd: Nullable<string>, options?: Parameters<typeof setConfig>[0]) { if (!cwd) cwd = process.cwd(); this.cwd = cwd; fetchConfig(cwd); options = Object.assign(this.config, options || {}, { cwd }); this.config = setConfig(options); SBG.setApi(this); new scheduler(); } static currentApI: SBG; static setApi(api: SBG) { this.currentApI = api; } static getApi() { return this.currentApI; } /** * run files ends with `standalone.js` inside source posts {@link standaloneRunner} * @returns */ standalone = () => chain([{ callback: standaloneRunner }]); /** * Auto seo on public dir (_config_yml.public_dir) (run after generated) * @returns */ seo = () => taskSeo(null, join(this.cwd, this.config.public_dir)); /** * Copy all **src-post** to **source/_posts** (run before generate) * * see the method {@link pcopy.copyAllPosts} * @returns */ copy = () => chain([{ callback: () => pcopy.copyAllPosts(undefined, this.config) }]); /** * Anonymize external links on public dir (_config_yml.public_dir) (run after generated) * @returns */ safelink = () => taskSafelink(noop, join(this.cwd, getConfig().public_dir)); /** * generate site with hexo */ async generate() { const hexo = new Hexo(this.cwd); // hexo init await hexo.init().catch(noop); await hexo.load().catch(noop); // hexo generate await hexo.call('generate').catch(noop); await hexo.exit(); } /** * clean cache, auto generated posts, etc * @see {@link cleaner.cleanDb} * @see {@link cleaner.cleanArchive} */ async clean(opt?: 'all' | 'archive' | 'database' | 'post') { if (opt === 'all') { await cleaner.cleanDb().catch(console.log); await cleaner.cleanArchive().catch(console.log); } else if (opt === 'archive') { await cleaner.cleanArchive().catch(console.log); } else if (opt === 'post') { await cleaner.cleanGeneratedPosts().catch(console.log); } else { await cleaner.cleanDb().catch(console.log); } } } export default SBG; |