forked from github.com/GenderDysphoria.fyi
Moved new build process out of gulp folder
This commit is contained in:
91
build/file.js
Normal file
91
build/file.js
Normal file
@@ -0,0 +1,91 @@
|
||||
|
||||
const path = require('path');
|
||||
const { pick } = require('lodash');
|
||||
const {
|
||||
normalizedExt,
|
||||
kind,
|
||||
type,
|
||||
} = require('./resolve');
|
||||
const actions = require('./actions');
|
||||
|
||||
|
||||
module.exports = exports = class File {
|
||||
|
||||
constructor (filepath) {
|
||||
if (filepath && typeof filepath === 'object') {
|
||||
// we've been passed a json object, treat as serialized Page
|
||||
Object.assign(this, filepath);
|
||||
return this;
|
||||
}
|
||||
|
||||
const file = path.parse(filepath);
|
||||
let { base: basename, name } = file;
|
||||
|
||||
this.preprocessed = false;
|
||||
if (name[0] === '_') {
|
||||
this.preprocessed = true;
|
||||
file.name = name = name.slice(1);
|
||||
file.basename = basename = basename.slice(1);
|
||||
}
|
||||
|
||||
// remove the public root and any _images segment from the dir
|
||||
const dir = this._dir(file.dir);
|
||||
|
||||
this.kind = kind(filepath);
|
||||
this.type = type(filepath);
|
||||
this.cwd = file.dir;
|
||||
this.ext = this.preprocessed ? file.ext : normalizedExt(file.ext);
|
||||
this.input = filepath; // public/file.ext
|
||||
this.base = path.join(...dir); // '', 'folder', 'folder/subfolder'
|
||||
this.dir = path.join('/', ...dir); // /, /folder, /folder/subfolder
|
||||
this.name = name; // index, fileA, fileB
|
||||
this.basename = basename; // index.ext, fileA.ext, fileB.ext
|
||||
this.ext = file.ext;
|
||||
|
||||
this._out();
|
||||
|
||||
this.serializable = [
|
||||
'kind',
|
||||
'type',
|
||||
'cwd',
|
||||
'ext',
|
||||
'input',
|
||||
'base',
|
||||
'dir',
|
||||
'name',
|
||||
'basename',
|
||||
'ext',
|
||||
'out',
|
||||
'url',
|
||||
];
|
||||
}
|
||||
|
||||
_dir (dir) {
|
||||
dir = dir.split('/');
|
||||
if (dir[0] === 'public') dir.shift();
|
||||
const i = dir.indexOf('_images');
|
||||
if (i > -1) dir.splice(i, 1);
|
||||
return dir;
|
||||
}
|
||||
|
||||
_out () {
|
||||
this.out = path.join(this.base, `${this.name}${this.ext}`);
|
||||
this.url = path.join(this.dir, `${this.name}${this.ext}`);
|
||||
}
|
||||
|
||||
load () {}
|
||||
|
||||
tasks () {
|
||||
return [ {
|
||||
input: this.input,
|
||||
output: this.out,
|
||||
action: actions.copy,
|
||||
nocache: true,
|
||||
} ];
|
||||
}
|
||||
|
||||
toJson () {
|
||||
return pick(this, this.serializable);
|
||||
}
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user