smartfile/ts/smartfile.memory.ts

134 lines
4.2 KiB
TypeScript
Raw Normal View History

import "typings-global";
2016-04-02 21:03:18 +00:00
import plugins = require("./smartfile.plugins");
import SmartfileInterpreter = require("./smartfile.interpreter");
2016-06-24 01:36:51 +00:00
import vinyl = require("vinyl");
2016-04-02 21:03:18 +00:00
let Readable = require("stream").Readable;
/**
* allows you to create a gulp stream
* from String, from an Array of Strings, from Vinyl File, from an Array of VinylFiles
2016-04-02 21:03:18 +00:00
* @param fileArg
* @returns stream.Readable
* @TODO: make it async;
*/
2016-04-04 13:44:00 +00:00
export let toGulpStream = function(fileArg:string|string[]|plugins.vinyl|plugins.vinyl[],baseArg:string = "/"){
2016-04-02 21:03:18 +00:00
let fileArray = [];
if(typeof fileArg === "string" || fileArg instanceof plugins.vinyl){ // make sure we work with an array later on
fileArray.push(fileArg);
} else if (Array.isArray(fileArg)){
fileArray = fileArg;
} else {
throw new Error("fileArg has unknown format");
}
let vinylFileArray:plugins.vinyl[] = []; //we want to have an array of vinylFiles
for (let fileIndexArg in fileArray){ //convert fileArray in vinylArray
let file = fileArray[fileIndexArg];
file instanceof plugins.vinyl ?
vinylFileArray.push(file) :
2016-04-04 13:44:00 +00:00
vinylFileArray.push(toVinylFileSync(file,{filename:fileIndexArg,base:baseArg}));
2016-04-02 21:03:18 +00:00
};
let stream = new Readable({ objectMode: true });
for(let vinylFileIndexArg in vinylFileArray){
let vinylFile = vinylFileArray[vinylFileIndexArg];
stream.push(vinylFile);
};
stream.push(null); //signal end of stream;
return stream;
};
/**
2016-04-09 20:51:30 +00:00
* converts file to Object
* @param fileStringArg
* @param fileTypeArg
* @returns {any|any}
*/
export let toObject = function(fileStringArg:string,fileTypeArg:string){
2016-06-23 16:31:55 +00:00
return SmartfileInterpreter.objectFile(fileStringArg,fileTypeArg);
};
2016-04-02 21:03:18 +00:00
/**
* takes a string and converts it to vinyl file
* @param fileArg
* @param optionsArg
*/
2016-04-04 13:44:00 +00:00
export let toVinylFileSync = function(fileArg:string,optionsArg?:{filename?:string,base?:string,relPath?:string}){
2016-04-02 21:03:18 +00:00
optionsArg? void(0) : optionsArg = {filename: "vinylfile", base: "/"};
optionsArg.filename ? void(0) : optionsArg.filename = "vinylfile";
optionsArg.base ? void(0) : optionsArg.base = "/";
optionsArg.relPath ? void("0") : optionsArg.relPath = "";
let vinylFile = new plugins.vinyl({
base: optionsArg.base,
path: plugins.path.join(optionsArg.base,optionsArg.relPath,optionsArg.filename),
contents: new Buffer(fileArg)
});
return vinylFile;
};
/**
* takes a string array and some options and returns a vinylfile array
* @param arrayArg
* @param optionsArg
*/
2016-04-04 13:44:00 +00:00
export let toVinylArraySync = function(arrayArg:string[],optionsArg?:{filename?:string,base?:string,relPath?:string}){
2016-04-02 21:03:18 +00:00
let vinylArray = [];
for(let stringIndexArg in arrayArg){
let myString = arrayArg[stringIndexArg];
vinylArray.push(toVinylFileSync(myString,optionsArg));
}
return vinylArray;
};
2016-04-04 13:44:00 +00:00
/**
* takes a vinylFile object and converts it to String
*/
export let toStringSync = function(fileArg:plugins.vinyl){
return fileArg.contents.toString("utf8");
};
2016-04-02 21:03:18 +00:00
2016-04-04 13:44:00 +00:00
/**
* writes string or vinyl file to disk.
* @param fileArg
* @param fileNameArg
* @param fileBaseArg
*/
2016-06-24 01:36:51 +00:00
export let toFs = function(fileContentArg:string|vinyl,filePathArg){
2016-07-01 04:07:58 +00:00
let done = plugins.Q.defer();
2016-04-04 13:44:00 +00:00
//function checks to abort if needed
2016-06-24 01:36:51 +00:00
if (!fileContentArg || !filePathArg) throw new Error("expected valid arguments");
2016-04-04 13:44:00 +00:00
2016-06-24 01:36:51 +00:00
// prepare actual write action
2016-04-04 13:44:00 +00:00
let fileString:string;
2016-06-24 01:36:51 +00:00
let filePath:string = filePathArg;
if (fileContentArg instanceof plugins.vinyl){
fileString = toStringSync(fileContentArg);
} else if (typeof fileContentArg === "string") {
fileString = fileContentArg;
2016-04-02 21:03:18 +00:00
}
2016-07-19 18:28:28 +00:00
plugins.fsExtra.writeFile(filePath,fileString,"utf8",done.resolve);
2016-04-04 13:44:00 +00:00
return done.promise;
2016-04-02 21:03:18 +00:00
};
2016-06-24 01:36:51 +00:00
export let toFsSync = function(fileArg,filePathArg:string){
2016-04-04 13:44:00 +00:00
//function checks to abort if needed
2016-06-24 01:36:51 +00:00
if (!fileArg || !filePathArg) throw new Error("expected a valid arguments");
2016-04-04 13:44:00 +00:00
2016-06-24 01:36:51 +00:00
// prepare actual write action
2016-04-04 13:44:00 +00:00
let fileString:string;
2016-06-24 01:36:51 +00:00
let filePath:string = filePathArg;
2016-04-04 13:44:00 +00:00
if (fileArg instanceof plugins.vinyl){
fileString = toStringSync(fileArg);
} else if (typeof fileArg === "string") {
fileString = fileArg;
}
2016-07-19 18:28:28 +00:00
plugins.fsExtra.writeFileSync(filePath,fileString,"utf8");
2016-04-02 21:03:18 +00:00
};