2016-05-09 13:42:39 -07:00
|
|
|
// originally base off of https://github.com/gulpjs/vinyl
|
|
|
|
import path from 'path';
|
|
|
|
import replaceExt from 'replace-ext';
|
2016-05-10 23:38:11 -07:00
|
|
|
import invariant from 'invariant';
|
2016-05-09 13:42:39 -07:00
|
|
|
|
2016-05-10 23:38:11 -07:00
|
|
|
// interface PolyVinyl {
|
|
|
|
// contents: String,
|
|
|
|
// path: String,
|
|
|
|
// history: [...String],
|
|
|
|
// error: Null|Object
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// createPoly({
|
|
|
|
// path: String,
|
|
|
|
// contents: String,
|
|
|
|
// history?: [...String],
|
|
|
|
// }) => PolyVinyl, throws
|
2016-05-14 16:46:20 -07:00
|
|
|
export function createPoly({ path, contents, history, ...rest } = {}) {
|
2016-05-10 23:38:11 -07:00
|
|
|
invariant(
|
|
|
|
typeof path === 'string',
|
|
|
|
'path must be a string but got %s',
|
|
|
|
path
|
|
|
|
);
|
2016-05-09 13:42:39 -07:00
|
|
|
|
2016-05-10 23:38:11 -07:00
|
|
|
invariant(
|
|
|
|
typeof contents === 'string',
|
|
|
|
'contents must be a string but got %s',
|
|
|
|
contents
|
|
|
|
);
|
2016-05-09 13:42:39 -07:00
|
|
|
|
2016-05-10 23:38:11 -07:00
|
|
|
return {
|
2016-05-14 16:46:20 -07:00
|
|
|
...rest,
|
2016-05-10 23:38:11 -07:00
|
|
|
history: Array.isArray(history) ? history : [ path ],
|
|
|
|
path: path,
|
|
|
|
contents: contents,
|
|
|
|
error: null
|
|
|
|
};
|
|
|
|
}
|
2016-05-09 13:42:39 -07:00
|
|
|
|
2016-05-10 23:38:11 -07:00
|
|
|
// isPoly(poly: Any) => Boolean
|
|
|
|
export function isPoly(poly) {
|
|
|
|
return poly &&
|
|
|
|
typeof poly.contents === 'string' &&
|
|
|
|
typeof poly.path === 'string' &&
|
|
|
|
Array.isArray(poly.history);
|
|
|
|
}
|
2016-05-09 13:42:39 -07:00
|
|
|
|
2016-05-10 23:38:11 -07:00
|
|
|
// checkPoly(poly: Any) => Void, throws
|
|
|
|
export function checkPoly(poly) {
|
|
|
|
invariant(
|
|
|
|
isPoly(poly),
|
|
|
|
'function should receive a PolyVinyl, but got %s',
|
|
|
|
poly
|
|
|
|
);
|
|
|
|
}
|
2016-05-09 13:42:39 -07:00
|
|
|
|
2016-05-10 23:38:11 -07:00
|
|
|
// isEmpty(poly: PolyVinyl) => Boolean, throws
|
|
|
|
export function isEmpty(poly) {
|
|
|
|
checkPoly(poly);
|
|
|
|
return !!poly.contents;
|
|
|
|
}
|
2016-05-09 13:42:39 -07:00
|
|
|
|
2016-05-10 23:38:11 -07:00
|
|
|
// updateContents(contents: String, poly: PolyVinyl) => PolyVinyl
|
|
|
|
export function updateContents(contents, poly) {
|
|
|
|
checkPoly(poly);
|
|
|
|
return {
|
|
|
|
...poly,
|
|
|
|
contents
|
|
|
|
};
|
|
|
|
}
|
2016-05-09 13:42:39 -07:00
|
|
|
|
2016-05-10 23:38:11 -07:00
|
|
|
export function getExt(poly) {
|
|
|
|
checkPoly(poly);
|
|
|
|
invariant(
|
|
|
|
!!poly.path,
|
|
|
|
'No path specified! Can not get extname'
|
|
|
|
);
|
|
|
|
return path.extname(poly.path);
|
|
|
|
}
|
2016-05-09 13:42:39 -07:00
|
|
|
|
2016-05-10 23:38:11 -07:00
|
|
|
export function setExt(extname, poly) {
|
|
|
|
invariant(
|
|
|
|
poly.path,
|
|
|
|
'No path specified! Can not set extname',
|
|
|
|
);
|
|
|
|
const newPoly = {
|
|
|
|
...poly,
|
|
|
|
path: replaceExt(this.path, extname)
|
|
|
|
};
|
|
|
|
newPoly.history = [ ...poly.history, newPoly.path ];
|
|
|
|
return newPoly;
|
|
|
|
}
|
2016-05-09 13:42:39 -07:00
|
|
|
|
2016-05-10 23:38:11 -07:00
|
|
|
export function setError(error, poly) {
|
|
|
|
invariant(
|
|
|
|
typeof error === 'object',
|
|
|
|
'error must be an object or null, but got %',
|
|
|
|
error
|
|
|
|
);
|
|
|
|
checkPoly(poly);
|
|
|
|
return {
|
|
|
|
...poly,
|
|
|
|
error
|
|
|
|
};
|
2016-05-09 13:42:39 -07:00
|
|
|
}
|