SYMBOL INDEX (149 symbols across 28 files) FILE: article-to-md/src/check-cloud.js constant DATA_DIR (line 18) | const DATA_DIR = path.join(__dirname, '..', '..', 'data') constant DEFAULT_PROCESSED (line 19) | const DEFAULT_PROCESSED = path.join(DATA_DIR, 'processed.json') constant DEFAULT_LINKS (line 20) | const DEFAULT_LINKS = path.join(DATA_DIR, 'links.json') constant MISSING_PATH (line 21) | const MISSING_PATH = path.join(DATA_DIR, 'missing.json') constant DEFAULT_HOST (line 22) | const DEFAULT_HOST = 'https://fed-data.chanceyu.com' constant ARTICLE_DATA_HOST (line 24) | const ARTICLE_DATA_HOST = process.env.ARTICLE_DATA_HOST || DEFAULT_HOST constant PROCESSED_JSON_PATH (line 25) | const PROCESSED_JSON_PATH = process.env.PROCESSED_JSON_PATH || DEFAULT_P... constant LINKS_JSON_PATH (line 26) | const LINKS_JSON_PATH = process.env.LINKS_JSON_PATH || DEFAULT_LINKS function loadProcessed (line 28) | function loadProcessed() { function loadLinksMap (line 43) | function loadLinksMap() { function headExists (line 68) | async function headExists(url) { function main (line 77) | async function main() { FILE: article-to-md/src/images.js constant COMPRESSIBLE (line 8) | const COMPRESSIBLE = new Set(['jpeg', 'jpg', 'png', 'webp', 'avif']) function imageFilename (line 18) | function imageFilename(url, detectedExt) { constant MAX_WIDTH (line 25) | const MAX_WIDTH = 1000 function compressAndSave (line 33) | async function compressAndSave(raw, destPath) { constant FETCH_RETRY_MAX (line 73) | const FETCH_RETRY_MAX = 3 constant FETCH_RETRY_DELAY_MS (line 74) | const FETCH_RETRY_DELAY_MS = 2000 constant FETCH_CONCURRENCY (line 75) | const FETCH_CONCURRENCY = 2 constant FETCH_DELAY_BETWEEN_MS (line 76) | const FETCH_DELAY_BETWEEN_MS = 400 function sleep (line 78) | function sleep(ms) { function fetchImageBuffer (line 94) | async function fetchImageBuffer(url, pageOrigin, browserContext) { function saveBase64Image (line 149) | async function saveBase64Image(dataUrl, destDir) { function downloadImage (line 174) | async function downloadImage(url, destDir, pageOrigin, browserContext) { constant MD_IMG_RE (line 191) | const MD_IMG_RE = /!\[([^\]]*)\]\(((?:https?:\/\/|data:image\/)[^)"\s]+)... function runWithConcurrency (line 205) | async function runWithConcurrency(tasks, concurrency, delayBetweenMs = 0) { function localizeImages (line 219) | async function localizeImages(markdown, imagesDir, browserContext = null... FILE: article-to-md/src/index.js constant LINKS_PATH (line 16) | const LINKS_PATH = join(__dirname, '..', '..', 'data', 'links.json') function processAll (line 40) | async function processAll(options = {}) { function parseArgs (line 85) | function parseArgs(argv) { FILE: article-to-md/src/once.js function once (line 11) | async function once(article) { FILE: article-to-md/src/processor.js constant ARTICLES_DIR (line 19) | const ARTICLES_DIR = join(__dirname, '..', '..', 'data', 'articles') constant DELETED_PATH (line 20) | const DELETED_PATH = join(__dirname, '..', '..', 'data', 'deleted.json') function withLinkLock (line 32) | async function withLinkLock(link, fn) { constant LINKS_PATH (line 42) | const LINKS_PATH = join(__dirname, '..', '..', 'data', 'links.json') function detectLang (line 50) | function detectLang(raw = '') { function sanitizeSecrets (line 95) | function sanitizeSecrets(text) { function processArticle (line 148) | async function processArticle(article, options = {}) { FILE: article-to-md/src/rules/index.js constant RULES (line 26) | const RULES = { function getRuleForUrl (line 41) | function getRuleForUrl(url) { FILE: article-to-md/src/rules/javascriptweekly.js method preProcess (line 7) | async preProcess(page, options) { method preProcess (line 158) | async preProcess(page) { FILE: article-to-md/src/rules/ruanyifeng.js method preProcess (line 6) | async preProcess(page) { FILE: article-to-md/src/rules/weixin.js method preProcess (line 20) | async preProcess(page) { FILE: article-to-md/src/rules/zhangxinxu.js method preProcess (line 12) | async preProcess(page) { FILE: article-to-md/src/server.js constant ARTICLES_DIR (line 14) | const ARTICLES_DIR = join(__dirname, '..', '..', 'data', 'articles') constant LINKS_PATH (line 15) | const LINKS_PATH = join(__dirname, '..', '..', 'data', 'links.json') constant RSS_PATH (line 16) | const RSS_PATH = join(__dirname, '..', '..', 'data', 'rss.json') constant DELETED_PATH (line 17) | const DELETED_PATH = join(__dirname, '..', '..', 'data', 'deleted.json') constant PROJECT_ROOT (line 18) | const PROJECT_ROOT = join(__dirname, '..', '..') constant PORT (line 20) | const PORT = 8081 FILE: article-to-md/src/stealth.js constant STEALTH_ARGS (line 5) | const STEALTH_ARGS = [ function applyStealthScripts (line 22) | async function applyStealthScripts(context) { function simulateHuman (line 127) | async function simulateHuman(page) { FILE: article-to-md/src/upload.js constant QINIU_CDN_HOST (line 25) | const QINIU_CDN_HOST = 'https://fed-data.chanceyu.com' function getFileMD5 (line 28) | function getFileMD5(filePath) { constant DATA_DIR (line 34) | const DATA_DIR = join(__dirname, '..', '..', 'data') constant ARTICLES_DIR (line 35) | const ARTICLES_DIR = join(DATA_DIR, 'articles') constant PROCESSED_JSON_PATH (line 36) | const PROCESSED_JSON_PATH = join(DATA_DIR, 'processed.json') constant PROCESSED_JSON_KEY (line 37) | const PROCESSED_JSON_KEY = 'processed.json' constant LINKS_JSON_PATH (line 38) | const LINKS_JSON_PATH = join(DATA_DIR, 'links.json') constant LINKS_JSON_KEY (line 39) | const LINKS_JSON_KEY = 'links.json' constant SKIP_NAMES (line 41) | const SKIP_NAMES = new Set([ function isMdKey (line 47) | function isMdKey(key) { function getMimeType (line 52) | function getMimeType(key) { function getAllFiles (line 65) | function getAllFiles(dir, base = '') { function getQiniuContext (line 83) | function getQiniuContext() { function uploadFileList (line 115) | async function uploadFileList(files, ctx) { function uploadProcessedJson (line 180) | async function uploadProcessedJson() { function uploadLinksJson (line 192) | async function uploadLinksJson() { function uploadArticleFolder (line 205) | async function uploadArticleFolder(md5) { function runUpload (line 225) | async function runUpload() { FILE: article-to-md/src/utils.js constant PROCESSED_PATH (line 10) | const PROCESSED_PATH = join(__dirname, '..', '..', 'data', 'processed.js... constant PROJECT_ROOT (line 11) | const PROJECT_ROOT = join(__dirname, '..', '..') constant QINIU_ENABLED (line 13) | const QINIU_ENABLED = process.env.QINIU_ACCESS_KEY && process.env.QINIU_... function urlToMd5 (line 20) | function urlToMd5(url) { function loadProcessed (line 28) | function loadProcessed() { function saveProcessed (line 41) | function saveProcessed(data) { function withProcessedUpdate (line 53) | function withProcessedUpdate(update) { function regenerateSiteFiles (line 67) | function regenerateSiteFiles() { function regenerateWritemd (line 91) | function regenerateWritemd(newData = { length: 0, titles: [], rss: {}, l... FILE: server/dedupe-links.js function run (line 13) | function run() { FILE: server/feed.js function createFeed (line 8) | async function createFeed(linksJson){ FILE: server/fetch.js function fetchFeed (line 6) | async function fetchFeed(rss) { function initFetch (line 29) | async function initFetch(rssItem, onFinish) { FILE: server/update.js function handleUpdate (line 28) | async function handleUpdate() { function handleCommit (line 39) | function handleCommit() { function isDateInLast7Days (line 46) | function isDateInLast7Days(dateStr) { function isDuplicateOfExisting (line 55) | function isDuplicateOfExisting(curr, allExistingItems, deletedUrls) { function handleFeed (line 67) | function handleFeed() { FILE: server/utils.js constant RESP_PATH (line 12) | const RESP_PATH = path.join(__dirname, '../') constant RSS_PATH (line 13) | const RSS_PATH = path.join(RESP_PATH + '/data/rss.json') constant LINKS_PATH (line 14) | const LINKS_PATH = path.join(RESP_PATH + '/data/links.json') constant TAGS_PATH (line 15) | const TAGS_PATH = path.join(RESP_PATH + '/data/tags.json') constant DELETED_PATH (line 16) | const DELETED_PATH = path.join(RESP_PATH + '/data/deleted.json') constant FEED_PATH (line 17) | const FEED_PATH = path.join(RESP_PATH + '/data/atom.xml') constant README_PATH (line 18) | const README_PATH = path.join(RESP_PATH + '/README.md') constant README_TEMPLATE_PATH (line 19) | const README_TEMPLATE_PATH = path.join(RESP_PATH + '/templates/README.... constant TAGS_MD_PATH (line 20) | const TAGS_MD_PATH = path.join(RESP_PATH + '/TAGS.md') constant TAGS_TEMPLATE_PATH (line 21) | const TAGS_TEMPLATE_PATH = path.join(RESP_PATH + '/templates/TAGS.md') constant DETAILS_TEMPLATE_PATH (line 22) | const DETAILS_TEMPLATE_PATH = path.join(RESP_PATH + '/templates/DETAILS... constant ARTICLES_PROCESSED_PATH (line 23) | const ARTICLES_PROCESSED_PATH = path.join(RESP_PATH + '/data/processed.j... constant WORKFLOW (line 30) | const WORKFLOW = !!process.env.WORKFLOW method getLogPrefix (line 54) | getLogPrefix() { method log (line 58) | log(msg) { method logInfo (line 62) | logInfo(msg) { method logWarn (line 66) | logWarn(msg) { method logSuccess (line 70) | logSuccess(msg) { method formatTitle (line 77) | formatTitle(title) { method getNowDate (line 95) | getNowDate(format) { method formatDate (line 102) | formatDate(time, format) { method isSameLink (line 111) | isSameLink(link, compare) { method getHomePage (line 135) | async getHomePage() { method filterBySkill (line 152) | filterBySkill(items) { FILE: server/writemd.js function handleREADME (line 22) | async function handleREADME(newData, linksJson, processedMap) { function handleTags (line 45) | function handleTags(newData, linksJson, processedMap) { function handleDetails (line 100) | function handleDetails(newData, linksJson, processedMap, regenerateAll) { FILE: site/build/check-versions.js function exec (line 7) | function exec (cmd) { FILE: site/build/createFiles.js function loadJieba (line 9) | function loadJieba() { constant PAGE_SIZE (line 24) | const PAGE_SIZE = 200 constant DIST_PATH (line 25) | const DIST_PATH = path.join(__dirname, '../dist') constant DATA_DIR (line 26) | const DATA_DIR = path.join(DIST_PATH, 'data') function prepareArticles (line 31) | function prepareArticles() { function generateArticlesJson (line 54) | function generateArticlesJson(articles) { function generateTextIndex (line 66) | function generateTextIndex(articles) { function generateSourceIndex (line 126) | function generateSourceIndex(articles) { function generateCategoryIndex (line 146) | function generateCategoryIndex(articles) { function generateLegacyDataFile (line 179) | function generateLegacyDataFile() { function compress (line 197) | function compress(filePath, ext) { function createFiles (line 207) | function createFiles() { FILE: site/build/data.js constant RSS_DATA (line 1) | const RSS_DATA = require('../../data/rss.json') constant TAGS_DATA (line 2) | const TAGS_DATA = require('../../data/tags.json') constant LINKS_DATA (line 3) | const LINKS_DATA = require('../../data/links.json') constant HOTWORDS_DATA (line 4) | const HOTWORDS_DATA = require('../../data/hotwords.json') FILE: site/build/upload.js constant SITE_DIR (line 21) | const SITE_DIR = path.join(__dirname, '..') constant DIST_DIR (line 22) | const DIST_DIR = path.join(SITE_DIR, 'dist') constant SKIP_NAMES (line 29) | const SKIP_NAMES = new Set([ function getFileMD5 (line 35) | function getFileMD5(filePath) { function getMimeType (line 40) | function getMimeType(key) { function getAllFiles (line 64) | function getAllFiles(dir, base = '') { function getQiniuContext (line 81) | function getQiniuContext() { function uploadFileList (line 109) | async function uploadFileList(files, ctx) { function runUpload (line 147) | async function runUpload() { FILE: site/build/utils.js function generateLoaders (line 33) | function generateLoaders (loader, loaderOptions) { FILE: site/build/webpack.base.conf.js function resolve (line 7) | function resolve (dir) { FILE: site/build/webpack.dev.conf.js constant HOST (line 14) | const HOST = process.env.HOST constant PORT (line 15) | const PORT = process.env.PORT && Number(process.env.PORT) method before (line 49) | before(app) { FILE: site/build/webpack.prod.conf.js method minChunks (line 87) | minChunks (module) {