Compare commits
19 Commits
Author | SHA1 | Date | |
---|---|---|---|
fb9766e93b | |||
9cfd147fdc | |||
18ff99aef7 | |||
46b1151201 | |||
8e19586e47 | |||
9fc581b866 | |||
dcc85a56b8 | |||
4899d454eb | |||
9d02fccc01 | |||
a5b24a7c33 | |||
06fb0acd52 | |||
97bf5ff74b | |||
531f169c11 | |||
e25675cc49 | |||
32cdac5b38 | |||
7457093476 | |||
f560b6b7bb | |||
ed01ebeee8 | |||
7eed9dd6d3 |
37
dist/smartfile.classes.smartfile.d.ts
vendored
37
dist/smartfile.classes.smartfile.d.ts
vendored
@ -1,8 +1,9 @@
|
||||
/// <reference types="node" />
|
||||
export interface ISmartfileConstructorOptions {
|
||||
path?: string;
|
||||
contentsString?: string;
|
||||
contentString?: string;
|
||||
contentBuffer?: Buffer;
|
||||
base?: string;
|
||||
}
|
||||
/**
|
||||
* class Smartfile
|
||||
@ -14,13 +15,13 @@ export declare class Smartfile {
|
||||
*/
|
||||
path: string;
|
||||
/**
|
||||
* The contents of the file as Buffer
|
||||
* the content of the file as Buffer
|
||||
*/
|
||||
contents: Buffer;
|
||||
contentBuffer: Buffer;
|
||||
/**
|
||||
* The current working directory of the file
|
||||
*/
|
||||
cwd: string;
|
||||
base: string;
|
||||
/**
|
||||
* sync the file with disk
|
||||
*/
|
||||
@ -30,11 +31,6 @@ export declare class Smartfile {
|
||||
* @param optionsArg
|
||||
*/
|
||||
constructor(optionsArg: ISmartfileConstructorOptions);
|
||||
/**
|
||||
* return relative path of file
|
||||
* ->
|
||||
*/
|
||||
readonly relative: string;
|
||||
/**
|
||||
* set contents from string
|
||||
* @param contentString
|
||||
@ -48,4 +44,27 @@ export declare class Smartfile {
|
||||
* read file from disk
|
||||
*/
|
||||
read(): Promise<void>;
|
||||
/**
|
||||
* vinyl-compatibility: alias of this.contentBuffer
|
||||
*/
|
||||
contents: Buffer;
|
||||
/**
|
||||
* vinyl-compatibility
|
||||
*/
|
||||
readonly cwd: string;
|
||||
/**
|
||||
* return relative path of file
|
||||
*/
|
||||
readonly relative: string;
|
||||
/**
|
||||
* return truw when the file has content
|
||||
*/
|
||||
isNull(): boolean;
|
||||
/**
|
||||
* return true if contents are Buffer
|
||||
*/
|
||||
isBuffer(): boolean;
|
||||
isDirectory(): boolean;
|
||||
isStream(): boolean;
|
||||
isSymbolic(): boolean;
|
||||
}
|
||||
|
71
dist/smartfile.classes.smartfile.js
vendored
71
dist/smartfile.classes.smartfile.js
vendored
@ -8,6 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const plugins = require("./smartfile.plugins");
|
||||
/**
|
||||
* class Smartfile
|
||||
* -> is vinyl file compatible
|
||||
@ -19,19 +20,16 @@ class Smartfile {
|
||||
*/
|
||||
constructor(optionsArg) {
|
||||
if (optionsArg.contentBuffer) {
|
||||
this.contents = optionsArg.contentBuffer;
|
||||
this.contentBuffer = optionsArg.contentBuffer;
|
||||
}
|
||||
else if (optionsArg.contentsString) {
|
||||
this.contents = new Buffer(optionsArg.contentsString);
|
||||
else if (optionsArg.contentString) {
|
||||
this.setContentsFromString(optionsArg.contentString);
|
||||
}
|
||||
else {
|
||||
console.log('created empty Smartfile?');
|
||||
}
|
||||
this.path = optionsArg.path;
|
||||
}
|
||||
/**
|
||||
* return relative path of file
|
||||
* ->
|
||||
*/
|
||||
get relative() {
|
||||
return '';
|
||||
this.base = optionsArg.base;
|
||||
}
|
||||
/**
|
||||
* set contents from string
|
||||
@ -54,6 +52,57 @@ class Smartfile {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
});
|
||||
}
|
||||
// -----------------------------------------------
|
||||
// vinyl compatibility
|
||||
// -----------------------------------------------
|
||||
/**
|
||||
* vinyl-compatibility: alias of this.contentBuffer
|
||||
*/
|
||||
get contents() {
|
||||
return this.contentBuffer;
|
||||
}
|
||||
set contents(contentsArg) {
|
||||
this.contentBuffer = contentsArg;
|
||||
}
|
||||
/**
|
||||
* vinyl-compatibility
|
||||
*/
|
||||
get cwd() {
|
||||
return process.cwd();
|
||||
}
|
||||
/**
|
||||
* return relative path of file
|
||||
*/
|
||||
get relative() {
|
||||
return plugins.path.relative(this.base, this.path);
|
||||
}
|
||||
/**
|
||||
* return truw when the file has content
|
||||
*/
|
||||
isNull() {
|
||||
if (!this.contentBuffer) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* return true if contents are Buffer
|
||||
*/
|
||||
isBuffer() {
|
||||
if (this.contents instanceof Buffer) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
isDirectory() {
|
||||
return false;
|
||||
}
|
||||
isStream() {
|
||||
return false;
|
||||
}
|
||||
isSymbolic() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
exports.Smartfile = Smartfile;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxlLmNsYXNzZXMuc21hcnRmaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRmaWxlLmNsYXNzZXMuc21hcnRmaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFRQTs7O0dBR0c7QUFDSDtJQXFCRTs7O09BR0c7SUFDSCxZQUFhLFVBQXdDO1FBQ25ELEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQTtRQUMxQyxDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUE7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksUUFBUTtRQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBR0Q7OztPQUdHO0lBQ0gscUJBQXFCLENBQUMsYUFBcUI7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDRyxLQUFLOztRQUVYLENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0csSUFBSTs7UUFDVixDQUFDO0tBQUE7Q0FDRjtBQS9ERCw4QkErREMifQ==
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxlLmNsYXNzZXMuc21hcnRmaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRmaWxlLmNsYXNzZXMuc21hcnRmaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSwrQ0FBOEM7QUFTOUM7OztHQUdHO0FBQ0g7SUFxQkU7OztPQUdHO0lBQ0gsWUFBYSxVQUF3QztRQUNuRCxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUE7UUFDL0MsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtRQUN6QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFBO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQTtJQUM3QixDQUFDO0lBR0Q7OztPQUdHO0lBQ0gscUJBQXFCLENBQUMsYUFBcUI7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDRyxLQUFLOztRQUVYLENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0csSUFBSTs7UUFDVixDQUFDO0tBQUE7SUFFRCxrREFBa0Q7SUFDbEQsc0JBQXNCO0lBQ3RCLGtEQUFrRDtJQUNsRDs7T0FFRztJQUNILElBQUksUUFBUTtRQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFBO0lBQzNCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBRSxXQUFXO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksR0FBRztRQUNMLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUE7UUFDYixDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQTtRQUNiLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLENBQUMsS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLENBQUMsS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELFVBQVU7UUFDUixNQUFNLENBQUMsS0FBSyxDQUFBO0lBQ2QsQ0FBQztDQUNGO0FBckhELDhCQXFIQyJ9
|
19
dist/smartfile.fs.js
vendored
19
dist/smartfile.fs.js
vendored
File diff suppressed because one or more lines are too long
8
dist/smartfile.memory.d.ts
vendored
8
dist/smartfile.memory.d.ts
vendored
@ -5,14 +5,6 @@ export interface IVinylFile {
|
||||
base: string;
|
||||
path: string;
|
||||
}
|
||||
/**
|
||||
* allows you to create a gulp stream
|
||||
* from String, from an Array of Strings, from Vinyl File, from an Array of VinylFiles
|
||||
* @param fileArg
|
||||
* @returns stream.Readable
|
||||
* @TODO: make it async;
|
||||
*/
|
||||
export declare let toGulpStream: (fileArg: string | string[] | IVinylFile | IVinylFile[], baseArg?: string) => any;
|
||||
/**
|
||||
* converts file to Object
|
||||
* @param fileStringArg
|
||||
|
38
dist/smartfile.memory.js
vendored
38
dist/smartfile.memory.js
vendored
File diff suppressed because one or more lines are too long
38
docs/index.md
Normal file
38
docs/index.md
Normal file
@ -0,0 +1,38 @@
|
||||
# smartfile
|
||||
make files easily accessible for processing in javascript.
|
||||
|
||||
## Availabililty
|
||||
[](https://www.npmjs.com/package/smartfile)
|
||||
[](https://gitlab.com/pushrocks/smartfile)
|
||||
[](https://github.com/pushrocks/smartfile)
|
||||
[](https://pushrocks.gitlab.io/smartfile/)
|
||||
|
||||
## Status for master
|
||||
[](https://gitlab.com/pushrocks/smartfile/commits/master)
|
||||
[](https://gitlab.com/pushrocks/smartfile/commits/master)
|
||||
[](https://david-dm.org/pushrocks/smartfile)
|
||||
[](https://www.bithound.io/github/pushrocks/smartfile/master/dependencies/npm)
|
||||
[](https://www.bithound.io/github/pushrocks/smartfile)
|
||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||
[](http://standardjs.com/)
|
||||
|
||||
## Usage
|
||||
smartfile is an approach of being one tool to handle files in diverse environments.
|
||||
|
||||
### Smartfile Sections
|
||||
smartfile thinks in sections:
|
||||
|
||||
section | description
|
||||
--- | ---
|
||||
fs | (object) gets data from fs to somewhere
|
||||
memory | gets data from memory to somewhere
|
||||
remote | gets data from remote locations to somewhere
|
||||
interpreter | (object) handles yaml and json
|
||||
smartfile | (class) a virtual representation of a file, alternative to vinyl file format
|
||||
|
||||
For further information read the linked docs at the top of this README.
|
||||
|
||||
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
||||
|
||||
[](https://push.rocks)
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "smartfile",
|
||||
"version": "4.1.10",
|
||||
"version": "4.2.7",
|
||||
"description": "offers smart ways to work with files in nodejs",
|
||||
"main": "dist/index.js",
|
||||
"typings": "dist/index.d.ts",
|
||||
@ -40,7 +40,7 @@
|
||||
"vinyl-file": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"gulp-function": "^2.2.3",
|
||||
"gulp-function": "^2.2.9",
|
||||
"tapbundle": "^1.0.10"
|
||||
}
|
||||
}
|
||||
|
52
test/test.ts
52
test/test.ts
@ -5,6 +5,10 @@ import { expect, tap } from 'tapbundle'
|
||||
|
||||
import * as vinyl from 'vinyl'
|
||||
|
||||
// ---------------------------
|
||||
// smartfile.fs
|
||||
// ---------------------------
|
||||
|
||||
tap.test('.fs.fileExistsSync -> should return an accurate boolean', async () => {
|
||||
expect(smartfile.fs.fileExistsSync('./test/mytest.json')).to.be.true
|
||||
expect(smartfile.fs.fileExistsSync('./test/notthere.json')).be.false
|
||||
@ -47,8 +51,9 @@ tap.test('.fs.listFileTree() -> should get a file tree', async () => {
|
||||
expect(folderArrayArg).to.not.deep.include('mytest.json')
|
||||
})
|
||||
|
||||
tap.test('.fstoObjectFromFileTree -> should read a file tree into an Object', async () => {
|
||||
tap.test('.fs.fileTreeToObject -> should read a file tree into an Object', async () => {
|
||||
let fileArrayArg = await smartfile.fs.fileTreeToObject(path.resolve('./test/'), '**/*.txt')
|
||||
expect(fileArrayArg[0].contents.toString()).to.not.be.null
|
||||
// expect(fileArrayArg[1]).to.be.instanceof(smartfile.Smartfile)
|
||||
})
|
||||
|
||||
@ -68,36 +73,28 @@ tap.test('.fs.remove() -> should remove an entire directory', async () => {
|
||||
|
||||
})
|
||||
|
||||
tap.test('smartfile.fs.remove -> should remove single files', async () => {
|
||||
tap.test('.fs.remove -> should remove single files', async () => {
|
||||
await expect(smartfile.fs.remove('./test/temp/mytestRenamed.yaml')).to.eventually.be.fulfilled
|
||||
})
|
||||
|
||||
tap.test('smartfile.fs.removeSync -> should remove single files synchronouly', async () => {
|
||||
tap.test('.fs.removeSync -> should remove single files synchronouly', async () => {
|
||||
smartfile.fs.removeSync('./test/temp/testfile1.txt')
|
||||
expect(smartfile.fs.fileExistsSync('./test/temp/testfile1.txt')).to.be.false
|
||||
})
|
||||
|
||||
tap.test('smartfile.fs.removeMany -> should remove and array of files', async () => {
|
||||
tap.test('.fs.removeMany -> should remove and array of files', async () => {
|
||||
smartfile.fs.removeMany([ './test/temp/testfile1.txt', './test/temp/testfile2.txt' ]).then(() => {
|
||||
expect(smartfile.fs.fileExistsSync('./test/temp/testfile1.txt')).to.be.false
|
||||
expect(smartfile.fs.fileExistsSync('./test/temp/testfile2.txt')).to.be.false
|
||||
})
|
||||
})
|
||||
|
||||
tap.test('smartfile.fs.removeManySync -> should remove and array of single files synchronouly', async () => {
|
||||
tap.test('.fs.removeManySync -> should remove and array of single files synchronouly', async () => {
|
||||
smartfile.fs.removeManySync([ './test/temp/testfile1.txt', './test/temp/testfile2.txt' ])
|
||||
expect(smartfile.fs.fileExistsSync('./test/temp/testfile1.txt')).to.be.false
|
||||
expect(smartfile.fs.fileExistsSync('./test/temp/testfile2.txt')).to.be.false
|
||||
})
|
||||
|
||||
// ---------------------------
|
||||
// .interpreter
|
||||
// ---------------------------
|
||||
|
||||
tap.test('.interpreter.filetype() -> should get the file type from a string', async () => {
|
||||
expect(smartfile.interpreter.filetype('./somefolder/data.json')).equal('json')
|
||||
})
|
||||
|
||||
tap.test('.fs.toObjectSync() -> should read an ' + '.yaml' + ' file to an object', async () => {
|
||||
let testData = smartfile.fs.toObjectSync('./test/mytest.yaml')
|
||||
expect(testData).have.property('key1', 'this works')
|
||||
@ -125,11 +122,18 @@ tap.test('.fs.toVinylSync -> should read an ' + '.json OR .yaml' + ' file to an
|
||||
expect(vinyl.isVinyl(testData)).to.be.true
|
||||
})
|
||||
|
||||
tap.test('.memory.toGulpStream() -> should produce a valid gulp stream', async () => {
|
||||
let localArray = [ 'test1', 'test2', 'test3' ]
|
||||
smartfile.memory.toGulpStream(localArray)
|
||||
// ---------------------------
|
||||
// smartfile.interpreter
|
||||
// ---------------------------
|
||||
|
||||
tap.test('.interpreter.filetype() -> should get the file type from a string', async () => {
|
||||
expect(smartfile.interpreter.filetype('./somefolder/data.json')).equal('json')
|
||||
})
|
||||
|
||||
// ---------------------------
|
||||
// smartfile.memory
|
||||
// ---------------------------
|
||||
|
||||
tap.test('.memory.toVinylFileSync() -> should produce a vinylFile', async () => {
|
||||
let localString = 'myString'
|
||||
let localOptions = { filename: 'vinylfile2', base: '/someDir' }
|
||||
@ -158,7 +162,7 @@ tap.test('.memory.vinylToStringSync() -> should produce a String from vinyl file
|
||||
|
||||
tap.test('.memory.toFs() -> should write a file to disk and return a promise', async () => {
|
||||
let localString = 'myString'
|
||||
smartfile.memory.toFs(
|
||||
await smartfile.memory.toFs(
|
||||
localString,
|
||||
path.join(process.cwd(), './test/temp/testMemToFs.txt')
|
||||
)
|
||||
@ -184,4 +188,18 @@ tap.test('.remote.toString() -> should reject a Promise when the link is false',
|
||||
.to.eventually.be.rejected
|
||||
})
|
||||
|
||||
// ---------------------------
|
||||
// smartfile.Smartfile
|
||||
// ---------------------------
|
||||
|
||||
tap.test('.Smartfile -> should produce vinyl compatible files', async () => {
|
||||
let smartfileArray = await smartfile.fs.fileTreeToObject(process.cwd(), './test/testfolder/**/*')
|
||||
let localSmartfile = smartfileArray[0]
|
||||
expect(localSmartfile).to.be.instanceof(smartfile.Smartfile)
|
||||
expect(localSmartfile.contents).to.be.instanceof(Buffer)
|
||||
expect(localSmartfile.isBuffer()).to.be.true
|
||||
expect(localSmartfile.isDirectory()).to.be.false
|
||||
expect(localSmartfile.isNull()).to.be.false
|
||||
})
|
||||
|
||||
tap.start()
|
||||
|
@ -2,8 +2,9 @@ import * as plugins from './smartfile.plugins'
|
||||
|
||||
export interface ISmartfileConstructorOptions {
|
||||
path?: string
|
||||
contentsString?: string
|
||||
contentString?: string
|
||||
contentBuffer?: Buffer
|
||||
base?: string
|
||||
}
|
||||
|
||||
/**
|
||||
@ -17,14 +18,14 @@ export class Smartfile {
|
||||
path: string
|
||||
|
||||
/**
|
||||
* The contents of the file as Buffer
|
||||
* the content of the file as Buffer
|
||||
*/
|
||||
contents: Buffer
|
||||
contentBuffer: Buffer
|
||||
|
||||
/**
|
||||
* The current working directory of the file
|
||||
*/
|
||||
cwd: string
|
||||
base: string
|
||||
|
||||
/**
|
||||
* sync the file with disk
|
||||
@ -37,19 +38,14 @@ export class Smartfile {
|
||||
*/
|
||||
constructor (optionsArg: ISmartfileConstructorOptions) {
|
||||
if (optionsArg.contentBuffer) {
|
||||
this.contents = optionsArg.contentBuffer
|
||||
} else if (optionsArg.contentsString) {
|
||||
this.contents = new Buffer(optionsArg.contentsString)
|
||||
this.contentBuffer = optionsArg.contentBuffer
|
||||
} else if (optionsArg.contentString) {
|
||||
this.setContentsFromString(optionsArg.contentString)
|
||||
} else {
|
||||
console.log('created empty Smartfile?')
|
||||
}
|
||||
this.path = optionsArg.path
|
||||
}
|
||||
|
||||
/**
|
||||
* return relative path of file
|
||||
* ->
|
||||
*/
|
||||
get relative () {
|
||||
return ''
|
||||
this.base = optionsArg.base
|
||||
}
|
||||
|
||||
|
||||
@ -73,4 +69,63 @@ export class Smartfile {
|
||||
*/
|
||||
async read () {
|
||||
}
|
||||
|
||||
// -----------------------------------------------
|
||||
// vinyl compatibility
|
||||
// -----------------------------------------------
|
||||
/**
|
||||
* vinyl-compatibility: alias of this.contentBuffer
|
||||
*/
|
||||
get contents (): Buffer {
|
||||
return this.contentBuffer
|
||||
}
|
||||
set contents (contentsArg) {
|
||||
this.contentBuffer = contentsArg
|
||||
}
|
||||
|
||||
/**
|
||||
* vinyl-compatibility
|
||||
*/
|
||||
get cwd () {
|
||||
return process.cwd()
|
||||
}
|
||||
|
||||
/**
|
||||
* return relative path of file
|
||||
*/
|
||||
get relative (): string {
|
||||
return plugins.path.relative(this.base, this.path)
|
||||
}
|
||||
|
||||
/**
|
||||
* return truw when the file has content
|
||||
*/
|
||||
isNull (): boolean {
|
||||
if (!this.contentBuffer) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* return true if contents are Buffer
|
||||
*/
|
||||
isBuffer (): boolean {
|
||||
if (this.contents instanceof Buffer) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
isDirectory () {
|
||||
return false
|
||||
}
|
||||
|
||||
isStream () {
|
||||
return false
|
||||
}
|
||||
|
||||
isSymbolic () {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
@ -209,14 +209,26 @@ export let toStringSync = function (filePath: string) {
|
||||
}
|
||||
|
||||
export let fileTreeToObject = async (dirPathArg: string, miniMatchFilter: string) => {
|
||||
let fileTree = await listFileTree(dirPathArg, miniMatchFilter)
|
||||
// handle absolute miniMatchFilter
|
||||
let dirPath: string
|
||||
if (plugins.path.isAbsolute(miniMatchFilter)) {
|
||||
dirPath = '/'
|
||||
} else {
|
||||
dirPath = dirPathArg
|
||||
}
|
||||
|
||||
let fileTree = await listFileTree(dirPath, miniMatchFilter)
|
||||
let smartfileArray: Smartfile[] = []
|
||||
for (let filePath of fileTree) {
|
||||
let fileContentString = toStringSync(
|
||||
plugins.path.join(dirPath, filePath)
|
||||
)
|
||||
|
||||
// push a read file as Smartfile
|
||||
smartfileArray.push(new Smartfile({
|
||||
path: filePath,
|
||||
contentBuffer: new Buffer(toStringSync(
|
||||
plugins.path.join(dirPathArg, filePath)
|
||||
))
|
||||
contentBuffer: new Buffer(fileContentString),
|
||||
base: dirPath,
|
||||
path: filePath
|
||||
}))
|
||||
}
|
||||
return smartfileArray
|
||||
|
@ -10,52 +10,14 @@ export interface IVinylFile {
|
||||
path: string,
|
||||
}
|
||||
|
||||
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
|
||||
* @param fileArg
|
||||
* @returns stream.Readable
|
||||
* @TODO: make it async;
|
||||
*/
|
||||
export let toGulpStream = function(fileArg: string|string[]|IVinylFile|IVinylFile[],baseArg: string = '/'){
|
||||
let fileArray = []
|
||||
|
||||
if (typeof fileArg === 'string' || vinyl.isVinyl(fileArg)) { // 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: IVinylFile[] = [] // we want to have an array of vinylFiles
|
||||
|
||||
for (let fileIndexArg in fileArray) { // convert fileArray in vinylArray
|
||||
let file = fileArray[fileIndexArg]
|
||||
file instanceof vinyl ?
|
||||
vinylFileArray.push(file) :
|
||||
vinylFileArray.push(toVinylFileSync(file,{filename: fileIndexArg,base: baseArg}))
|
||||
};
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
/**
|
||||
* converts file to Object
|
||||
* @param fileStringArg
|
||||
* @param fileTypeArg
|
||||
* @returns {any|any}
|
||||
*/
|
||||
export let toObject = function(fileStringArg: string,fileTypeArg: string){
|
||||
return SmartfileInterpreter.objectFile(fileStringArg,fileTypeArg)
|
||||
export let toObject = function (fileStringArg: string, fileTypeArg: string) {
|
||||
return SmartfileInterpreter.objectFile(fileStringArg, fileTypeArg)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -63,14 +25,14 @@ export let toObject = function(fileStringArg: string,fileTypeArg: string){
|
||||
* @param fileArg
|
||||
* @param optionsArg
|
||||
*/
|
||||
export let toVinylFileSync = function(fileArg: string,optionsArg?: {filename?: string,base?: string,relPath?: string}) {
|
||||
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 = ''
|
||||
export let toVinylFileSync = function (fileArg: string, optionsArg?: { filename?: string, base?: string, relPath?: string }) {
|
||||
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 vinyl({
|
||||
base: optionsArg.base,
|
||||
path: plugins.path.join(optionsArg.base,optionsArg.relPath,optionsArg.filename),
|
||||
path: plugins.path.join(optionsArg.base, optionsArg.relPath, optionsArg.filename),
|
||||
contents: new Buffer(fileArg)
|
||||
})
|
||||
return vinylFile
|
||||
@ -81,18 +43,18 @@ export let toVinylFileSync = function(fileArg: string,optionsArg?: {filename?: s
|
||||
* @param arrayArg
|
||||
* @param optionsArg
|
||||
*/
|
||||
export let toVinylArraySync = function(
|
||||
export let toVinylArraySync = function (
|
||||
arrayArg: string[],
|
||||
optionsArg?: {
|
||||
filename?: string,
|
||||
base?: string,
|
||||
relPath?: string
|
||||
}
|
||||
){
|
||||
) {
|
||||
let vinylArray = []
|
||||
for (let stringIndexArg in arrayArg) {
|
||||
let myString = arrayArg[stringIndexArg]
|
||||
vinylArray.push(toVinylFileSync(myString,optionsArg))
|
||||
let myString = arrayArg[ stringIndexArg ]
|
||||
vinylArray.push(toVinylFileSync(myString, optionsArg))
|
||||
}
|
||||
return vinylArray
|
||||
}
|
||||
@ -100,7 +62,7 @@ export let toVinylArraySync = function(
|
||||
/**
|
||||
* takes a vinylFile object and converts it to String
|
||||
*/
|
||||
export let vinylToStringSync = function(fileArg: IVinylFile): string {
|
||||
export let vinylToStringSync = function (fileArg: IVinylFile): string {
|
||||
return fileArg.contents.toString('utf8')
|
||||
}
|
||||
|
||||
@ -110,7 +72,7 @@ export let vinylToStringSync = function(fileArg: IVinylFile): string {
|
||||
* @param fileNameArg
|
||||
* @param fileBaseArg
|
||||
*/
|
||||
export let toFs = function(fileContentArg: string|IVinylFile,filePathArg){
|
||||
export let toFs = function (fileContentArg: string | IVinylFile, filePathArg) {
|
||||
let done = plugins.q.defer()
|
||||
|
||||
// function checks to abort if needed
|
||||
@ -127,11 +89,11 @@ export let toFs = function(fileContentArg: string|IVinylFile,filePathArg){
|
||||
} else if (typeof fileContentArg === 'string') {
|
||||
fileString = fileContentArg
|
||||
}
|
||||
plugins.fsExtra.writeFile(filePath,fileString,'utf8',done.resolve)
|
||||
plugins.fsExtra.writeFile(filePath, fileString, 'utf8', done.resolve)
|
||||
return done.promise
|
||||
}
|
||||
|
||||
export let toFsSync = function(fileArg,filePathArg: string){
|
||||
export let toFsSync = function (fileArg, filePathArg: string) {
|
||||
// function checks to abort if needed
|
||||
if (!fileArg || !filePathArg) {
|
||||
throw new Error('expected a valid arguments')
|
||||
@ -146,5 +108,5 @@ export let toFsSync = function(fileArg,filePathArg: string){
|
||||
} else if (typeof fileArg === 'string') {
|
||||
fileString = fileArg
|
||||
}
|
||||
plugins.fsExtra.writeFileSync(filePath,fileString,'utf8')
|
||||
plugins.fsExtra.writeFileSync(filePath, fileString, 'utf8')
|
||||
}
|
||||
|
31
yarn.lock
31
yarn.lock
@ -16,8 +16,8 @@
|
||||
"@types/chai" "*"
|
||||
|
||||
"@types/chai@*", "@types/chai@^3.4.35":
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.1.tgz#9bd77fe12503ae00648b0945b38eab666adffe2e"
|
||||
version "3.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.2.tgz#c11cd2817d3a401b7ba0f5a420f35c56139b1c1e"
|
||||
|
||||
"@types/fs-extra@2.x.x":
|
||||
version "2.1.0"
|
||||
@ -33,11 +33,7 @@
|
||||
version "0.0.27"
|
||||
resolved "https://registry.yarnpkg.com/@types/promises-a-plus/-/promises-a-plus-0.0.27.tgz#c64651134614c84b8f5d7114ce8901d36a609780"
|
||||
|
||||
"@types/q@0.0.32":
|
||||
version "0.0.32"
|
||||
resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5"
|
||||
|
||||
"@types/through2@^2.0.31":
|
||||
"@types/through2@^2.0.32":
|
||||
version "2.0.32"
|
||||
resolved "https://registry.yarnpkg.com/@types/through2/-/through2-2.0.32.tgz#470024450f1ab7640f19f9ebf42d3da574c26129"
|
||||
dependencies:
|
||||
@ -190,15 +186,14 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
||||
version "4.1.11"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
||||
|
||||
gulp-function@^2.2.3:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/gulp-function/-/gulp-function-2.2.3.tgz#8f62de74ce74de3fa91c48ba247472c1f56873bd"
|
||||
gulp-function@^2.2.9:
|
||||
version "2.2.9"
|
||||
resolved "https://registry.yarnpkg.com/gulp-function/-/gulp-function-2.2.9.tgz#de513103db9d817e94bb8aab45f30bf286f19ae5"
|
||||
dependencies:
|
||||
"@types/q" "0.0.32"
|
||||
"@types/through2" "^2.0.31"
|
||||
q "^1.4.1"
|
||||
through2 "^2.0.1"
|
||||
typings-global "^1.0.14"
|
||||
"@types/through2" "^2.0.32"
|
||||
smartq "^1.1.1"
|
||||
through2 "^2.0.3"
|
||||
typings-global "^1.0.16"
|
||||
|
||||
home@^1.0.1:
|
||||
version "1.0.1"
|
||||
@ -310,10 +305,6 @@ process-nextick-args@^1.0.6, process-nextick-args@~1.0.6:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
|
||||
|
||||
q@^1.4.1:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1"
|
||||
|
||||
readable-stream@^2.0.2, readable-stream@^2.1.5:
|
||||
version "2.2.9"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8"
|
||||
@ -440,7 +431,7 @@ tapbundle@^1.0.10:
|
||||
smartq "^1.1.1"
|
||||
typings-global "^1.0.16"
|
||||
|
||||
through2@^2.0.1:
|
||||
through2@^2.0.1, through2@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
|
||||
dependencies:
|
||||
|
Reference in New Issue
Block a user