mirror of
https://github.com/GenderDysphoria/GenderDysphoria.fyi.git
synced 2025-01-31 15:26:17 +00:00
65 lines
1.5 KiB
JavaScript
65 lines
1.5 KiB
JavaScript
const glob = require('../lib/glob');
|
|
const { groupBy, keyBy, filter, find, get, memoize } = require('lodash');
|
|
const { ROOT, kind, KIND } = require('./resolve');
|
|
const File = require('./file');
|
|
const Asset = require('./asset');
|
|
const Page = require('./page');
|
|
const Promise = require('bluebird');
|
|
|
|
const KIND_MAP = {
|
|
[KIND.PAGE]: Page,
|
|
[KIND.ASSET]: Asset,
|
|
[KIND.OTHER]: File,
|
|
};
|
|
|
|
module.exports = exports = async function loadPublicFiles () {
|
|
const files = await Promise.map(glob('public/**/*', { cwd: ROOT, nodir: true }), (filepath) => {
|
|
const k = kind(filepath);
|
|
const F = KIND_MAP[k];
|
|
const f = new F(filepath);
|
|
if (f.kind === KIND.PAGE && f.preprocessed) return false;
|
|
return f;
|
|
}).filter(Boolean);
|
|
|
|
const {
|
|
[KIND.PAGE]: pages,
|
|
[KIND.ASSET]: assets,
|
|
} = groupBy(files, 'kind');
|
|
|
|
function within (dir) {
|
|
const subset = filter(files, { dir });
|
|
|
|
const getTitlecard = memoize(() =>
|
|
get(find(files, { name: 'titlecard' }), [ 0, 'url' ]),
|
|
);
|
|
|
|
const {
|
|
[KIND.PAGE]: subpages,
|
|
[KIND.ASSET]: subassets,
|
|
} = groupBy(subset, 'kind');
|
|
|
|
const webready = subassets && keyBy(subassets.map((a) => a.webready()), 'name');
|
|
|
|
return {
|
|
all: subset,
|
|
get titlecard () { return getTitlecard; },
|
|
get pages () {
|
|
return subpages;
|
|
},
|
|
get assets () {
|
|
return webready;
|
|
},
|
|
};
|
|
}
|
|
|
|
return {
|
|
all: files,
|
|
pages,
|
|
assets,
|
|
for: memoize(within),
|
|
get tasks () {
|
|
return files.map((a) => a.tasks()).flat(1);
|
|
},
|
|
};
|
|
};
|