Merge branch 'master' into 'master'

update to latest standards

See merge request !2
This commit is contained in:
Phil Kunz 2017-04-28 09:04:08 +00:00
commit 6ac60cb3a5
9 changed files with 425 additions and 515 deletions

View File

@ -4,13 +4,48 @@ export interface ISmartfileConstructorOptions {
contentsString?: string; contentsString?: string;
contentBuffer?: Buffer; contentBuffer?: Buffer;
} }
/**
* class Smartfile
* -> is vinyl file compatible
*/
export declare class Smartfile { export declare class Smartfile {
/**
* the full path of the file on disk
*/
path: string; path: string;
/**
* The contents of the file as Buffer
*/
contents: Buffer; contents: Buffer;
/**
* The current working directory of the file
*/
cwd: string;
/**
* sync the file with disk
*/
sync: boolean;
/**
* the constructor of Smartfile
* @param optionsArg
*/
constructor(optionsArg: ISmartfileConstructorOptions); constructor(optionsArg: ISmartfileConstructorOptions);
/**
* return relative path of file
* ->
*/
readonly relative: string;
/** /**
* set contents from string * set contents from string
* @param contentString * @param contentString
*/ */
setContentFromString(contentString: string): void; setContentsFromString(contentString: string): void;
/**
* write file to disk
*/
write(): Promise<void>;
/**
* read file from disk
*/
read(): Promise<void>;
} }

View File

@ -1,6 +1,22 @@
"use strict"; "use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
/**
* class Smartfile
* -> is vinyl file compatible
*/
class Smartfile { class Smartfile {
/**
* the constructor of Smartfile
* @param optionsArg
*/
constructor(optionsArg) { constructor(optionsArg) {
if (optionsArg.contentBuffer) { if (optionsArg.contentBuffer) {
this.contents = optionsArg.contentBuffer; this.contents = optionsArg.contentBuffer;
@ -10,13 +26,34 @@ class Smartfile {
} }
this.path = optionsArg.path; this.path = optionsArg.path;
} }
/**
* return relative path of file
* ->
*/
get relative() {
return '';
}
/** /**
* set contents from string * set contents from string
* @param contentString * @param contentString
*/ */
setContentFromString(contentString) { setContentsFromString(contentString) {
this.contents = new Buffer(contentString); this.contents = new Buffer(contentString);
} }
/**
* write file to disk
*/
write() {
return __awaiter(this, void 0, void 0, function* () {
});
}
/**
* read file from disk
*/
read() {
return __awaiter(this, void 0, void 0, function* () {
});
}
} }
exports.Smartfile = Smartfile; exports.Smartfile = Smartfile;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxlLmNsYXNzZXMuc21hcnRmaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRmaWxlLmNsYXNzZXMuc21hcnRmaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUE7SUFHRSxZQUFZLFVBQXdDO1FBQ2xELEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQTtRQUMxQyxDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUE7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILG9CQUFvQixDQUFDLGFBQXFCO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDM0MsQ0FBQztDQUNGO0FBbkJELDhCQW1CQyJ9 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxlLmNsYXNzZXMuc21hcnRmaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRmaWxlLmNsYXNzZXMuc21hcnRmaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFRQTs7O0dBR0c7QUFDSDtJQXFCRTs7O09BR0c7SUFDSCxZQUFhLFVBQXdDO1FBQ25ELEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQTtRQUMxQyxDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUE7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksUUFBUTtRQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBR0Q7OztPQUdHO0lBQ0gscUJBQXFCLENBQUMsYUFBcUI7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDRyxLQUFLOztRQUVYLENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0csSUFBSTs7UUFDVixDQUFDO0tBQUE7Q0FDRjtBQS9ERCw4QkErREMifQ==

View File

@ -26,22 +26,21 @@
}, },
"homepage": "https://gitlab.com/pushrocks/smartfile", "homepage": "https://gitlab.com/pushrocks/smartfile",
"dependencies": { "dependencies": {
"@types/fs-extra": "0.x.x", "@types/fs-extra": "2.x.x",
"@types/vinyl": "^2.0.0", "@types/vinyl": "^2.0.0",
"fs-extra": "^2.0.0", "fs-extra": "^2.1.2",
"glob": "^7.1.1", "glob": "^7.1.1",
"js-yaml": "^3.8.2", "js-yaml": "^3.8.3",
"require-reload": "0.2.2", "require-reload": "0.2.2",
"smartpath": "^3.2.8", "smartpath": "^3.2.8",
"smartq": "^1.1.1", "smartq": "^1.1.1",
"smartrequest": "^1.0.4", "smartrequest": "^1.0.4",
"typings-global": "^1.0.14", "typings-global": "^1.0.16",
"vinyl": "^2.0.1", "vinyl": "^2.0.2",
"vinyl-file": "^3.0.0" "vinyl-file": "^3.0.0"
}, },
"devDependencies": { "devDependencies": {
"gulp-function": "^2.2.3", "gulp-function": "^2.2.3",
"smartchai": "^1.0.3", "tapbundle": "^1.0.9"
"typings-test": "^1.0.3"
} }
} }

1
test/test.d.ts vendored
View File

@ -1 +0,0 @@
import 'typings-test';

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,238 +1,201 @@
import 'typings-test'
import * as smartfile from '../dist/index' import * as smartfile from '../dist/index'
import path = require('path') import path = require('path')
import { expect } from 'smartchai' import { expect, tap } from 'tapbundle'
import * as vinyl from 'vinyl' import * as vinyl from 'vinyl'
describe('smartfile', function () { tap.test('.fs.fileExistsSync -> should return an accurate boolean', async () => {
describe('.fs', function () { expect(smartfile.fs.fileExistsSync('./test/mytest.json')).to.be.true
describe('.fileExistsSync', function () { expect(smartfile.fs.fileExistsSync('./test/notthere.json')).be.false
it('should return an accurate boolean', function () { })
expect(smartfile.fs.fileExistsSync('./test/mytest.json')).to.be.true
expect(smartfile.fs.fileExistsSync('./test/notthere.json')).be.false tap.test('.fs.fileExists should resolve or reject a promise', async () => {
}) expect(smartfile.fs.fileExists('./test/mytest.json')).to.be.instanceof(Promise)
}) await expect(smartfile.fs.fileExists('./test/mytest.json')).to.eventually.be.fulfilled
describe('.fileExists', function () { await expect(smartfile.fs.fileExists('./test/notthere.json')).to.eventually.be.rejected
it('should return a working promise', function () { })
expect(smartfile.fs.fileExists('./test/mytest.json')).to.be.a('promise')
expect(smartfile.fs.fileExists('./test/mytest.json')).to.be.fulfilled tap.test('.fs.listFoldersSync() -> should get the file type from a string', async () => {
expect(smartfile.fs.fileExists('./test/notthere.json')).to.not.be.fulfilled expect(smartfile.fs.listFoldersSync('./test/')).to.deep.include('testfolder')
}) expect(smartfile.fs.listFoldersSync('./test/')).to.not.deep.include('notExistentFolder')
}) })
describe('.listFoldersSync()', function () {
it('should get the file type from a string', function () { tap.test('.fs.listFolders() -> should get the file type from a string', async () => {
expect(smartfile.fs.listFoldersSync('./test/')).to.deep.include('testfolder') let folderArrayArg = await smartfile.fs.listFolders('./test/')
expect(smartfile.fs.listFoldersSync('./test/')).to.not.deep.include('notExistentFolder') expect(folderArrayArg).to.deep.include('testfolder')
}) expect(folderArrayArg).to.not.deep.include('notExistentFolder')
}) })
describe('.listFolders()', function () {
it('should get the file type from a string', function (done) {
smartfile.fs.listFolders('./test/')
.then(function (folderArrayArg) {
expect(folderArrayArg).to.deep.include('testfolder')
expect(folderArrayArg).to.not.deep.include('notExistentFolder')
done()
})
})
})
describe('.listFilesSync()', function () {
it('should get the file type from a string', function () {
expect(smartfile.fs.listFilesSync('./test/')).to.deep.include('mytest.json')
expect(smartfile.fs.listFilesSync('./test/')).to.not.deep.include('notExistentFile')
expect(smartfile.fs.listFilesSync('./test/', /mytest\.json/)).to.deep.include('mytest.json')
expect(smartfile.fs.listFilesSync('./test/', /mytests.json/)).to.not.deep.include('mytest.json')
})
})
describe('.listFiles()', function () {
it('should get the file type from a string', function (done) {
smartfile.fs.listFiles('./test/')
.then(function (folderArrayArg) {
expect(folderArrayArg).to.deep.include('mytest.json')
expect(folderArrayArg).to.not.deep.include('notExistentFile')
done()
})
})
})
describe('.listFileTree()', function () {
it('should get a file tree', function (done) {
smartfile.fs.listFileTree(path.resolve('./test/'), '**/*.txt')
.then(function (folderArrayArg) {
expect(folderArrayArg).to.deep.include('testfolder/testfile1.txt')
expect(folderArrayArg).to.not.deep.include('mytest.json')
done()
})
})
})
describe('toObjectFromFileTree', function () { tap.test('.fs.listFilesSync() -> should get the file type from a string', async () => {
it('should read a file tree into an Object', function () { expect(smartfile.fs.listFilesSync('./test/')).to.deep.include('mytest.json')
smartfile.fs.fileTreeToObject(path.resolve('./test/'), '**/*.txt') expect(smartfile.fs.listFilesSync('./test/')).to.not.deep.include('notExistentFile')
.then((fileArrayArg) => { expect(smartfile.fs.listFilesSync('./test/', /mytest\.json/)).to.deep.include('mytest.json')
// expect(fileArrayArg[1]).to.be.instanceof(smartfile.Smartfile) expect(smartfile.fs.listFilesSync('./test/', /mytests.json/)).to.not.deep.include('mytest.json')
}) })
})
})
describe('.copy()', function () { tap.test('.fs.listFiles() -> should get the file type from a string', async () => {
it('should copy a directory', function () { let folderArrayArg = await smartfile.fs.listFiles('./test/')
smartfile.fs.copy('./test/testfolder/', './test/temp/') expect(folderArrayArg).to.deep.include('mytest.json')
}) expect(folderArrayArg).to.not.deep.include('notExistentFile')
it('should copy a file', function () { })
smartfile.fs.copy('./test/mytest.yaml', './test/temp/')
})
it('should copy a file and rename it', function () {
smartfile.fs.copy('./test/mytest.yaml', './test/temp/mytestRenamed.yaml')
})
})
describe('.remove()', function () {
it('should remove an entire directory', function () {
}) tap.test('.fs.listFileTree() -> should get a file tree', async () => {
it('smartfile.fs.remove -> should remove single files', function (done) { let folderArrayArg = await smartfile.fs.listFileTree(path.resolve('./test/'), '**/*.txt')
smartfile.fs.remove('./test/temp/mytestRenamed.yaml') expect(folderArrayArg).to.deep.include('testfolder/testfile1.txt')
.then(() => { done() }) expect(folderArrayArg).to.not.deep.include('mytest.json')
}) })
it('smartfile.fs.removeSync -> should remove single files synchronouly', function () {
smartfile.fs.removeSync('./test/temp/testfile1.txt')
expect(smartfile.fs.fileExistsSync('./test/temp/testfile1.txt')).to.be.false tap.test('.fstoObjectFromFileTree -> should read a file tree into an Object', async () => {
}) let fileArrayArg = await smartfile.fs.fileTreeToObject(path.resolve('./test/'), '**/*.txt')
it('smartfile.fs.removeMany -> should remove and array of files', function (done) { // expect(fileArrayArg[1]).to.be.instanceof(smartfile.Smartfile)
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
done() tap.test('.fs.copy()', async () => {
}) tap.test('should copy a directory', async () => {
}) smartfile.fs.copy('./test/testfolder/', './test/temp/')
it('smartfile.fs.removeManySync -> should remove and array of single files synchronouly', function () { })
smartfile.fs.removeManySync([ './test/temp/testfile1.txt', './test/temp/testfile2.txt' ]) tap.test('should copy a file', async () => {
expect(smartfile.fs.fileExistsSync('./test/temp/testfile1.txt')).to.be.false smartfile.fs.copy('./test/mytest.yaml', './test/temp/')
expect(smartfile.fs.fileExistsSync('./test/temp/testfile2.txt')).to.be.false })
}) tap.test('should copy a file and rename it', async () => {
smartfile.fs.copy('./test/mytest.yaml', './test/temp/mytestRenamed.yaml')
})
})
tap.test('.fs.remove()', async () => {
tap.test('should remove an entire directory', async () => {
})
tap.test('smartfile.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 () => {
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 () => {
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 () => {
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()', async () => {
tap.test('should get the file type from a string', async () => {
expect(smartfile.interpreter.filetype('./somefolder/data.json')).equal('json')
})
})
tap.test('.fs', async () => {
tap.test('.toObjectSync()', async () => {
tap.test('should read an ' + '.yaml' + ' file to an object', async () => {
let testData = smartfile.fs.toObjectSync('./test/mytest.yaml')
expect(testData).have.property('key1', 'this works')
expect(testData).have.property('key2', 'this works too')
})
tap.test('should state unknown file type for unknown file types', async () => {
let testData = smartfile.fs.toObjectSync('./test/mytest.txt')
})
tap.test('should read an ' + '.json' + ' file to an object', async () => {
let testData = smartfile.fs.toObjectSync('./test/mytest.json')
expect(testData).have.property('key1', 'this works')
expect(testData).have.property('key2', 'this works too')
describe('.interpreter', function () {
describe('.filetype()', function () {
it('should get the file type from a string', function () {
expect(smartfile.interpreter.filetype('./somefolder/data.json')).equal('json')
})
}) })
}) })
tap.test('.toStringSync()', async () => {
describe('.fs', function () { tap.test('should read a file to a string', async () => {
describe('.toObjectSync()', function () { expect(smartfile.fs.toStringSync('./test/mytest.txt'))
it('should read an ' + '.yaml' + ' file to an object', function () { .to.equal('Some TestString &&%$')
let testData = smartfile.fs.toObjectSync('./test/mytest.yaml')
expect(testData).have.property('key1', 'this works')
expect(testData).have.property('key2', 'this works too')
})
it('should state unknown file type for unknown file types', function () {
let testData = smartfile.fs.toObjectSync('./test/mytest.txt')
})
it('should read an ' + '.json' + ' file to an object', function () {
let testData = smartfile.fs.toObjectSync('./test/mytest.json')
expect(testData).have.property('key1', 'this works')
expect(testData).have.property('key2', 'this works too')
})
})
describe('.toStringSync()', function () {
it('should read a file to a string', function () {
expect(smartfile.fs.toStringSync('./test/mytest.txt'))
.to.equal('Some TestString &&%$')
})
})
describe('.toVinylSync', function () {
it('should read an ' + '.json OR .yaml' + ' file to an ' + 'vinyl file object', function () {
let testData = smartfile.fs.toVinylSync('./test/mytest.json')
expect(vinyl.isVinyl(testData)).to.be.true
})
}) })
}) })
tap.test('.toVinylSync', async () => {
describe('.memory', function () { tap.test('should read an ' + '.json OR .yaml' + ' file to an ' + 'vinyl file object', async () => {
describe('.toGulpStream()', function () { let testData = smartfile.fs.toVinylSync('./test/mytest.json')
it('should produce a valid gulp stream', function () { expect(vinyl.isVinyl(testData)).to.be.true
let localArray = [ 'test1', 'test2', 'test3' ]
smartfile.memory.toGulpStream(localArray)
})
})
describe('toVinylFileSync()', function () {
it('should produce a vinylFile', function () {
let localString = 'myString'
let localOptions = { filename: 'vinylfile2', base: '/someDir' }
expect(smartfile.memory.toVinylFileSync(localString, localOptions) instanceof vinyl).to.be.true
})
})
describe('toVinylArraySync()', function () {
it('should produce a an array of vinylfiles', function () {
let localStringArray = [ 'string1', 'string2', 'string3' ]
let localOptions = { filename: 'vinylfile2', base: '/someDir' }
let testResult = smartfile.memory.toVinylArraySync(localStringArray, localOptions)
expect(testResult).to.be.a('array')
expect(testResult.length === 3).to.be.true
for (let myKey in testResult) {
expect(testResult[ myKey ] instanceof vinyl).to.be.true
}
})
})
describe('vinylToStringSync()', function () {
it('should produce a String from vinyl file', function () {
let localString = smartfile.memory.vinylToStringSync(new vinyl({
base: '/',
path: '/test.txt',
contents: new Buffer('myString')
}))
expect(localString).equal('myString')
})
})
describe('toFs()', function () {
it('should write a file to disk and return a promise', function (done) {
let localString = 'myString'
smartfile.memory.toFs(
localString,
path.join(process.cwd(), './test/temp/testMemToFs.txt')
).then(done)
})
})
describe('toFsSync()', function () {
it('should write a file to disk and return true if successfull', function () {
let localString = 'myString'
smartfile.memory.toFsSync(
localString,
path.join(process.cwd(), './test/temp/testMemToFsSync.txt')
)
})
})
})
describe('.remote', function () {
describe('.toString()', function () {
it('should load a remote file to a variable', function (done) {
this.timeout(5000)
smartfile.remote.toString(
'https://raw.githubusercontent.com/pushrocks/smartfile/master/test/mytest.txt'
).then(function (responseString) {
expect(responseString).to.equal('Some TestString &&%$')
done()
})
})
it('should reject a Promise when the link is false', function (done) {
this.timeout(10000)
smartfile.remote.toString('https://push.rocks/doesnotexist.txt')
.then(
function () {
throw new Error('this test should not be resolved')
},
function () {
done()
}
)
})
}) })
}) })
}) })
tap.test('.memory', async () => {
tap.test('.toGulpStream()', async () => {
tap.test('should produce a valid gulp stream', async () => {
let localArray = ['test1', 'test2', 'test3']
smartfile.memory.toGulpStream(localArray)
})
})
tap.test('toVinylFileSync()', async () => {
tap.test('should produce a vinylFile', async () => {
let localString = 'myString'
let localOptions = { filename: 'vinylfile2', base: '/someDir' }
expect(smartfile.memory.toVinylFileSync(localString, localOptions) instanceof vinyl).to.be.true
})
})
tap.test('toVinylArraySync()', async () => {
tap.test('should produce a an array of vinylfiles', async () => {
let localStringArray = ['string1', 'string2', 'string3']
let localOptions = { filename: 'vinylfile2', base: '/someDir' }
let testResult = smartfile.memory.toVinylArraySync(localStringArray, localOptions)
expect(testResult).to.be.a('array')
expect(testResult.length === 3).to.be.true
for (let myKey in testResult) {
expect(testResult[myKey] instanceof vinyl).to.be.true
}
})
})
tap.test('vinylToStringSync()', async () => {
tap.test('should produce a String from vinyl file', async () => {
let localString = smartfile.memory.vinylToStringSync(new vinyl({
base: '/',
path: '/test.txt',
contents: new Buffer('myString')
}))
expect(localString).equal('myString')
})
})
tap.test('toFs()', async () => {
tap.test('should write a file to disk and return a promise', async () => {
let localString = 'myString'
smartfile.memory.toFs(
localString,
path.join(process.cwd(), './test/temp/testMemToFs.txt')
)
})
})
tap.test('toFsSync()', async () => {
tap.test('should write a file to disk and return true if successfull', async () => {
let localString = 'myString'
smartfile.memory.toFsSync(
localString,
path.join(process.cwd(), './test/temp/testMemToFsSync.txt')
)
})
})
})
tap.test('.remote.toString() -> should load a remote file to a variable', async () => {
let responseString = await smartfile.remote.toString(
'https://raw.githubusercontent.com/pushrocks/smartfile/master/test/mytest.txt'
)
expect(responseString).to.equal('Some TestString &&%$')
})
tap.test('.remote.toString() -> should reject a Promise when the link is false', async () => {
await expect(smartfile.remote.toString('https://push.rocks/doesnotexist.txt'))
.to.eventually.be.rejected
})
tap.start()

View File

@ -6,23 +6,71 @@ export interface ISmartfileConstructorOptions {
contentBuffer?: Buffer contentBuffer?: Buffer
} }
/**
* class Smartfile
* -> is vinyl file compatible
*/
export class Smartfile { export class Smartfile {
/**
* the full path of the file on disk
*/
path: string path: string
/**
* The contents of the file as Buffer
*/
contents: Buffer contents: Buffer
constructor(optionsArg: ISmartfileConstructorOptions) {
/**
* The current working directory of the file
*/
cwd: string
/**
* sync the file with disk
*/
sync: boolean
/**
* the constructor of Smartfile
* @param optionsArg
*/
constructor (optionsArg: ISmartfileConstructorOptions) {
if (optionsArg.contentBuffer) { if (optionsArg.contentBuffer) {
this.contents = optionsArg.contentBuffer this.contents = optionsArg.contentBuffer
} else if(optionsArg.contentsString) { } else if (optionsArg.contentsString) {
this.contents = new Buffer(optionsArg.contentsString) this.contents = new Buffer(optionsArg.contentsString)
} }
this.path = optionsArg.path this.path = optionsArg.path
} }
/**
* return relative path of file
* ->
*/
get relative () {
return ''
}
/** /**
* set contents from string * set contents from string
* @param contentString * @param contentString
*/ */
setContentFromString(contentString: string) { setContentsFromString(contentString: string) {
this.contents = new Buffer(contentString) this.contents = new Buffer(contentString)
} }
/**
* write file to disk
*/
async write () {
}
/**
* read file from disk
*/
async read () {
}
} }

175
yarn.lock
View File

@ -16,22 +16,18 @@
"@types/chai" "*" "@types/chai" "*"
"@types/chai@*", "@types/chai@^3.4.35": "@types/chai@*", "@types/chai@^3.4.35":
version "3.4.35" version "3.5.1"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.4.35.tgz#e8d65f83492d2944f816fc620741821c28a8c900" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.1.tgz#9bd77fe12503ae00648b0945b38eab666adffe2e"
"@types/fs-extra@0.x.x": "@types/fs-extra@2.x.x":
version "0.0.37" version "2.1.0"
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-0.0.37.tgz#195f11bcd9a1b97d9e412c6b66899b545471a1f7" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-2.1.0.tgz#8b350239c0455d92b8d3c626edac193860ff395f"
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@types/mocha@^2.2.31":
version "2.2.39"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.39.tgz#f68d63db8b69c38e9558b4073525cf96c4f7a829"
"@types/node@*": "@types/node@*":
version "7.0.5" version "7.0.14"
resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.5.tgz#96a0f0a618b7b606f1ec547403c00650210bfbb7" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.14.tgz#1470fa002a113316ac9d9ad163fc738c7a0de2a4"
"@types/promises-a-plus@*": "@types/promises-a-plus@*":
version "0.0.27" version "0.0.27"
@ -41,12 +37,6 @@
version "0.0.32" version "0.0.32"
resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5"
"@types/shelljs@^0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.3.33.tgz#df613bddb88225ed09ce5c835f620dcaaf155e6b"
dependencies:
"@types/node" "*"
"@types/through2@^2.0.31": "@types/through2@^2.0.31":
version "2.0.32" version "2.0.32"
resolved "https://registry.yarnpkg.com/@types/through2/-/through2-2.0.32.tgz#470024450f1ab7640f19f9ebf42d3da574c26129" resolved "https://registry.yarnpkg.com/@types/through2/-/through2-2.0.32.tgz#470024450f1ab7640f19f9ebf42d3da574c26129"
@ -59,6 +49,10 @@
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
ansi-256-colors@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz#910de50efcc7c09e3d82f2f87abd6b700c18818a"
argparse@^1.0.7: argparse@^1.0.7:
version "1.0.9" version "1.0.9"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
@ -73,14 +67,25 @@ balanced-match@^0.4.1:
version "0.4.2" version "0.4.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
beautycolor@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/beautycolor/-/beautycolor-1.0.7.tgz#a4715738ac4c8221371e9cbeb5a6cc6d11ecbf7c"
dependencies:
ansi-256-colors "^1.1.0"
typings-global "^1.0.14"
bindings@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11"
brace-expansion@^1.0.0: brace-expansion@^1.0.0:
version "1.1.6" version "1.1.7"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
dependencies: dependencies:
balanced-match "^0.4.1" balanced-match "^0.4.1"
concat-map "0.0.1" concat-map "0.0.1"
buffer-shims@^1.0.0: buffer-shims@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
@ -140,6 +145,14 @@ deep-eql@^0.1.3:
dependencies: dependencies:
type-detect "0.1.1" type-detect "0.1.1"
early@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/early/-/early-2.1.1.tgz#841e23254ea5dc54d8afaeee82f5ab65c00ee23c"
dependencies:
beautycolor "^1.0.7"
smartq "^1.1.1"
typings-global "^1.0.16"
esprima@^3.1.1: esprima@^3.1.1:
version "3.1.3" version "3.1.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
@ -150,9 +163,9 @@ first-chunk-stream@^2.0.0:
dependencies: dependencies:
readable-stream "^2.0.2" readable-stream "^2.0.2"
fs-extra@^2.0.0: fs-extra@^2.1.2:
version "2.0.0" version "2.1.2"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35"
dependencies: dependencies:
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
jsonfile "^2.1.0" jsonfile "^2.1.0"
@ -204,8 +217,8 @@ inherits@2, inherits@^2.0.1, inherits@~2.0.1:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
interpret@^1.0.0: interpret@^1.0.0:
version "1.0.1" version "1.0.3"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90"
is-stream@^1.1.0: is-stream@^1.1.0:
version "1.1.0" version "1.1.0"
@ -219,9 +232,9 @@ isarray@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
js-yaml@^3.8.2: js-yaml@^3.8.3:
version "3.8.2" version "3.8.3"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766"
dependencies: dependencies:
argparse "^1.0.7" argparse "^1.0.7"
esprima "^3.1.1" esprima "^3.1.1"
@ -232,20 +245,39 @@ jsonfile@^2.1.0:
optionalDependencies: optionalDependencies:
graceful-fs "^4.1.6" graceful-fs "^4.1.6"
leakage@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/leakage/-/leakage-0.2.0.tgz#9e7a8cc1d241d8c8427e348769e192e172fd8733"
dependencies:
left-pad "^1.1.3"
memwatch-next "^0.3.0"
minimist "^1.2.0"
pretty-bytes "^4.0.2"
left-pad@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a"
memwatch-next@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/memwatch-next/-/memwatch-next-0.3.0.tgz#2111050f9a906e0aa2d72a4ec0f0089c78726f8f"
dependencies:
bindings "^1.2.1"
nan "^2.3.2"
minimatch@^3.0.2: minimatch@^3.0.2:
version "3.0.3" version "3.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
dependencies: dependencies:
brace-expansion "^1.0.0" brace-expansion "^1.0.0"
npmts-g@^6.0.0: minimist@^1.2.0:
version "6.0.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/npmts-g/-/npmts-g-6.0.0.tgz#491fd50f110967f1b68f14237e7ea5157bf4ddb3" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
dependencies:
"@types/shelljs" "^0.3.33" nan@^2.3.2:
semver "^5.3.0" version "2.6.2"
shelljs "^0.7.5" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
typings-global "^1.0.14"
once@^1.3.0: once@^1.3.0:
version "1.4.0" version "1.4.0"
@ -261,28 +293,36 @@ path-is-absolute@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
path-parse@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
pify@^2.3.0: pify@^2.3.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
pretty-bytes@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
process-nextick-args@^1.0.6, process-nextick-args@~1.0.6: process-nextick-args@^1.0.6, process-nextick-args@~1.0.6:
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
q@^1.4.1: q@^1.4.1:
version "1.4.1" version "1.5.0"
resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1"
readable-stream@^2.0.2, readable-stream@^2.1.5: readable-stream@^2.0.2, readable-stream@^2.1.5:
version "2.2.2" version "2.2.9"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8"
dependencies: dependencies:
buffer-shims "^1.0.0" buffer-shims "~1.0.0"
core-util-is "~1.0.0" core-util-is "~1.0.0"
inherits "~2.0.1" inherits "~2.0.1"
isarray "~1.0.0" isarray "~1.0.0"
process-nextick-args "~1.0.6" process-nextick-args "~1.0.6"
string_decoder "~0.10.x" string_decoder "~1.0.0"
util-deprecate "~1.0.1" util-deprecate "~1.0.1"
rechoir@^0.6.2: rechoir@^0.6.2:
@ -304,16 +344,18 @@ require-reload@0.2.2:
resolved "https://registry.yarnpkg.com/require-reload/-/require-reload-0.2.2.tgz#29a7591846caf91b6e8a3cda991683f95f8d7d42" resolved "https://registry.yarnpkg.com/require-reload/-/require-reload-0.2.2.tgz#29a7591846caf91b6e8a3cda991683f95f8d7d42"
resolve@^1.1.6: resolve@^1.1.6:
version "1.2.0" version "1.3.3"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
dependencies:
path-parse "^1.0.5"
semver@^5.3.0: semver@^5.3.0:
version "5.3.0" version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
shelljs@^0.7.4, shelljs@^0.7.5: shelljs@^0.7.7:
version "0.7.6" version "0.7.7"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1"
dependencies: dependencies:
glob "^7.0.0" glob "^7.0.0"
interpret "^1.0.0" interpret "^1.0.0"
@ -355,9 +397,11 @@ sprintf-js@~1.0.2:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
string_decoder@~0.10.x: string_decoder@~1.0.0:
version "0.10.31" version "1.0.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667"
dependencies:
buffer-shims "~1.0.0"
strip-bom-buf@^1.0.0: strip-bom-buf@^1.0.0:
version "1.0.0" version "1.0.0"
@ -378,6 +422,16 @@ strip-bom@^2.0.0:
dependencies: dependencies:
is-utf8 "^0.2.0" is-utf8 "^0.2.0"
tapbundle@^1.0.9:
version "1.0.9"
resolved "https://registry.yarnpkg.com/tapbundle/-/tapbundle-1.0.9.tgz#e4afa8ccb6db21ffe02613c371805aec692dbdf3"
dependencies:
early "^2.1.1"
leakage "^0.2.0"
smartchai "^1.0.3"
smartq "^1.1.1"
typings-global "^1.0.16"
through2@^2.0.1: through2@^2.0.1:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
@ -397,19 +451,12 @@ typed-promisify@^0.3.0:
version "0.3.0" version "0.3.0"
resolved "https://registry.yarnpkg.com/typed-promisify/-/typed-promisify-0.3.0.tgz#1ba0af5e444c87d8047406f18ce49092a1191853" resolved "https://registry.yarnpkg.com/typed-promisify/-/typed-promisify-0.3.0.tgz#1ba0af5e444c87d8047406f18ce49092a1191853"
typings-global@*, typings-global@^1.0.14: typings-global@^1.0.14, typings-global@^1.0.16:
version "1.0.14" version "1.0.16"
resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.14.tgz#ab682720a03d6b9278869fb5c30c30d7dc61d12c" resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.16.tgz#489b71781af24268750c2899316400a5e482961f"
dependencies: dependencies:
semver "^5.3.0" semver "^5.3.0"
shelljs "^0.7.4" shelljs "^0.7.7"
typings-test@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/typings-test/-/typings-test-1.0.3.tgz#fbab895eb3f0c44842e73db059f65946b971e369"
dependencies:
"@types/mocha" "^2.2.31"
typings-global "*"
util-deprecate@~1.0.1: util-deprecate@~1.0.1:
version "1.0.2" version "1.0.2"
@ -425,9 +472,9 @@ vinyl-file@^3.0.0:
strip-bom-stream "^2.0.0" strip-bom-stream "^2.0.0"
vinyl "^2.0.1" vinyl "^2.0.1"
vinyl@^2.0.1: vinyl@^2.0.1, vinyl@^2.0.2:
version "2.0.1" version "2.0.2"
resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.0.1.tgz#1c3b4931e7ac4c1efee743f3b91a74c094407bb6" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.0.2.tgz#0a3713d8d4e9221c58f10ca16c0116c9e25eda7c"
dependencies: dependencies:
clone "^1.0.0" clone "^1.0.0"
clone-buffer "^1.0.0" clone-buffer "^1.0.0"