Compare commits
165 Commits
Author | SHA1 | Date | |
---|---|---|---|
0a95ae6284 | |||
de09f85c34 | |||
b9fefc7c95 | |||
76eae15f7d | |||
2e457f6011 | |||
e83c63fd2a | |||
c01006e365 | |||
a7adec8275 | |||
2eddbf5751 | |||
eca3e141d2 | |||
701b77eff5 | |||
e3c46cdd2c | |||
7204607c8a | |||
039c6f7fc6 | |||
b42595fccc | |||
2d9a65d11c | |||
b3ce66167e | |||
c7f800fc88 | |||
d8f4b011b7 | |||
b4add67f37 | |||
f86f053bd5 | |||
a78ca67b43 | |||
b1bedd0f54 | |||
ec58f7ac55 | |||
80743576ad | |||
32a6db645d | |||
45dfa16ab7 | |||
4fc4cda786 | |||
f889664e4d | |||
f4129c04b2 | |||
c6280eb6fc | |||
4095738c6a | |||
6170b37d29 | |||
4c23992681 | |||
77c88f09cd | |||
469a454fa6 | |||
15044149f2 | |||
c92b759432 | |||
9b8f055ec2 | |||
69433b242b | |||
db1d2acb47 | |||
920552ea23 | |||
dd05708f28 | |||
d97abe443d | |||
818767b7cc | |||
52367f5c1a | |||
b6b2101054 | |||
e322a41c45 | |||
f5e2c0c7d7 | |||
6733a156b8 | |||
ebac45a152 | |||
92ac410b96 | |||
078bdda803 | |||
7b87adf3d9 | |||
908db4d847 | |||
87d047af42 | |||
610a70079d | |||
2c24cdc9f4 | |||
459bd662f4 | |||
0613b7c3ed | |||
d78ee87a82 | |||
fadf8782df | |||
8fcdc5ce44 | |||
878da9ff3a | |||
168136bebb | |||
16cecbefac | |||
24b890956e | |||
fe73e8edf7 | |||
5b2089044d | |||
9fa98c3804 | |||
f49c5af339 | |||
61a6cfd452 | |||
769a1a707e | |||
0408cff3fc | |||
533d71a6cd | |||
b3fd13506c | |||
4052337626 | |||
d823229bee | |||
5bdc6e1dc9 | |||
625f540978 | |||
459d2531b4 | |||
b5993560b1 | |||
b800957f19 | |||
d79e1180d8 | |||
ac99ecf743 | |||
897a46e12d | |||
64219f8f09 | |||
42c6c1eec5 | |||
ef3ca28a66 | |||
3beff3320c | |||
0343287775 | |||
e4180022b1 | |||
7909bd1a38 | |||
495c3afdc3 | |||
73ad2d6193 | |||
f5ffb7fc67 | |||
36364bb490 | |||
52f8fd2469 | |||
65dda3bcf1 | |||
d29dcc5a1c | |||
d22e0cde8f | |||
c8a21e8228 | |||
72bb3f33ac | |||
7694cc9c08 | |||
679c870229 | |||
30bc489822 | |||
5493d3cd5d | |||
bd50c122eb | |||
51f9d76a64 | |||
c2f809f9cf | |||
9f311984ac | |||
7515ecf9ce | |||
fb9766e93b | |||
9cfd147fdc | |||
18ff99aef7 | |||
46b1151201 | |||
8e19586e47 | |||
9fc581b866 | |||
dcc85a56b8 | |||
4899d454eb | |||
9d02fccc01 | |||
a5b24a7c33 | |||
06fb0acd52 | |||
97bf5ff74b | |||
531f169c11 | |||
e25675cc49 | |||
32cdac5b38 | |||
7457093476 | |||
f560b6b7bb | |||
ed01ebeee8 | |||
7eed9dd6d3 | |||
d9852e18a5 | |||
0be281746d | |||
6ac60cb3a5 | |||
eb3c720d4e | |||
c29084f000 | |||
b53240a2ea | |||
2ba39cf2ac | |||
675934d049 | |||
dda4c1af07 | |||
214bae9931 | |||
fde809eb02 | |||
9f3a71f0b9 | |||
e9c9e95118 | |||
943a0c30c2 | |||
2dad3707ee | |||
cd35d110a9 | |||
257939462b | |||
8104188b90 | |||
02842f1d0f | |||
f753c2c491 | |||
4ecb817bac | |||
909fcd6e2a | |||
d1538f939d | |||
3fef2a4ab9 | |||
77603ee736 | |||
353058ed73 | |||
bf618512e2 | |||
b276c5639d | |||
779c62dcbb | |||
3e1101c5e1 | |||
395504127c | |||
6dee92a3df | |||
0ba3c1794e | |||
0a810a3ac1 |
19
.gitignore
vendored
19
.gitignore
vendored
@ -1,7 +1,20 @@
|
|||||||
node_modules/
|
.nogit/
|
||||||
|
|
||||||
|
# artifacts
|
||||||
coverage/
|
coverage/
|
||||||
pages/
|
|
||||||
public/
|
public/
|
||||||
|
pages/
|
||||||
|
|
||||||
test/temp/
|
# installs
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# caches
|
||||||
|
.yarn/
|
||||||
|
.cache/
|
||||||
|
.rpt2_cache
|
||||||
|
|
||||||
|
# builds
|
||||||
|
dist/
|
||||||
|
dist_*/
|
||||||
|
|
||||||
|
# custom
|
128
.gitlab-ci.yml
128
.gitlab-ci.yml
@ -1,37 +1,137 @@
|
|||||||
image: hosttoday/ht-docker-node:npmts
|
# gitzone ci_default
|
||||||
|
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||||
|
|
||||||
|
cache:
|
||||||
|
paths:
|
||||||
|
- .npmci_cache/
|
||||||
|
key: '$CI_BUILD_STAGE'
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- test
|
- security
|
||||||
- release
|
- test
|
||||||
|
- release
|
||||||
|
- metadata
|
||||||
|
|
||||||
testLEGACY:
|
# ====================
|
||||||
stage: test
|
# security stage
|
||||||
|
# ====================
|
||||||
|
mirror:
|
||||||
|
stage: security
|
||||||
script:
|
script:
|
||||||
- npmci test legacy
|
- npmci git mirror
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
tags:
|
||||||
|
- lossless
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
|
auditProductionDependencies:
|
||||||
|
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||||
|
stage: security
|
||||||
|
script:
|
||||||
|
- npmci npm prepare
|
||||||
|
- npmci command npm install --production --ignore-scripts
|
||||||
|
- npmci command npm config set registry https://registry.npmjs.org
|
||||||
|
- npmci command npm audit --audit-level=high --only=prod --production
|
||||||
|
tags:
|
||||||
|
- docker
|
||||||
|
|
||||||
|
auditDevDependencies:
|
||||||
|
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||||
|
stage: security
|
||||||
|
script:
|
||||||
|
- npmci npm prepare
|
||||||
|
- npmci command npm install --ignore-scripts
|
||||||
|
- npmci command npm config set registry https://registry.npmjs.org
|
||||||
|
- npmci command npm audit --audit-level=high --only=dev
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
|
||||||
testLTS:
|
# ====================
|
||||||
|
# test stage
|
||||||
|
# ====================
|
||||||
|
|
||||||
|
testStable:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- npmci test lts
|
- npmci npm prepare
|
||||||
|
- npmci node install stable
|
||||||
|
- npmci npm install
|
||||||
|
- npmci npm test
|
||||||
|
coverage: /\d+.?\d+?\%\s*coverage/
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
testSTABLE:
|
testBuild:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- npmci test stable
|
- npmci npm prepare
|
||||||
|
- npmci node install stable
|
||||||
|
- npmci npm install
|
||||||
|
- npmci command npm run build
|
||||||
|
coverage: /\d+.?\d+?\%\s*coverage/
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
release:
|
release:
|
||||||
stage: release
|
stage: release
|
||||||
environment: npm_registry
|
|
||||||
script:
|
script:
|
||||||
- npmci publish
|
- npmci node install stable
|
||||||
|
- npmci npm publish
|
||||||
only:
|
only:
|
||||||
- tags
|
- tags
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- lossless
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
|
# ====================
|
||||||
|
# metadata stage
|
||||||
|
# ====================
|
||||||
|
codequality:
|
||||||
|
stage: metadata
|
||||||
|
allow_failure: true
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
script:
|
||||||
|
- npmci command npm install -g tslint typescript
|
||||||
|
- npmci npm prepare
|
||||||
|
- npmci npm install
|
||||||
|
- npmci command "tslint -c tslint.json ./ts/**/*.ts"
|
||||||
|
tags:
|
||||||
|
- lossless
|
||||||
|
- docker
|
||||||
|
- priv
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
stage: metadata
|
||||||
|
script:
|
||||||
|
- npmci trigger
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
tags:
|
||||||
|
- lossless
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
|
pages:
|
||||||
|
stage: metadata
|
||||||
|
script:
|
||||||
|
- npmci node install lts
|
||||||
|
- npmci command npm install -g @gitzone/tsdoc
|
||||||
|
- npmci npm prepare
|
||||||
|
- npmci npm install
|
||||||
|
- npmci command tsdoc
|
||||||
|
tags:
|
||||||
|
- lossless
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
artifacts:
|
||||||
|
expire_in: 1 week
|
||||||
|
paths:
|
||||||
|
- public
|
||||||
|
allow_failure: true
|
||||||
|
4
.snyk
Normal file
4
.snyk
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
|
||||||
|
version: v1.13.1
|
||||||
|
ignore: {}
|
||||||
|
patch: {}
|
29
.vscode/launch.json
vendored
Normal file
29
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "current file",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [
|
||||||
|
"${relativeFile}"
|
||||||
|
],
|
||||||
|
"runtimeArgs": ["-r", "@gitzone/tsrun"],
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"protocol": "inspector",
|
||||||
|
"internalConsoleOptions": "openOnSessionStart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "test.ts",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [
|
||||||
|
"test/test.ts"
|
||||||
|
],
|
||||||
|
"runtimeArgs": ["-r", "@gitzone/tsrun"],
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"protocol": "inspector",
|
||||||
|
"internalConsoleOptions": "openOnSessionStart"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
26
.vscode/settings.json
vendored
Normal file
26
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"json.schemas": [
|
||||||
|
{
|
||||||
|
"fileMatch": ["/npmextra.json"],
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"npmci": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "settings for npmci"
|
||||||
|
},
|
||||||
|
"gitzone": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "settings for gitzone",
|
||||||
|
"properties": {
|
||||||
|
"projectType": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["website", "element", "service", "npm", "wcc"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2015 Push.Rocks
|
Copyright (c) 2015 Lossless GmbH
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
36
README.md
36
README.md
@ -1,36 +0,0 @@
|
|||||||
# 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 more information read the docs
|
|
||||||
|
|
||||||
[](https://push.rocks)
|
|
11
dist/index.d.ts
vendored
11
dist/index.d.ts
vendored
@ -1,11 +0,0 @@
|
|||||||
import 'typings-global';
|
|
||||||
import * as SmartfileFs from './smartfile.fs';
|
|
||||||
import * as SmartfileInterpreter from './smartfile.interpreter';
|
|
||||||
import * as SmartfileMemory from './smartfile.memory';
|
|
||||||
import * as SmartfileRemote from './smartfile.remote';
|
|
||||||
export { Smartfile } from './smartfile.classes.smartfile';
|
|
||||||
export declare let fs: typeof SmartfileFs;
|
|
||||||
export declare let interpreter: typeof SmartfileInterpreter;
|
|
||||||
export declare let memory: typeof SmartfileMemory;
|
|
||||||
export declare let remote: typeof SmartfileRemote;
|
|
||||||
export declare let requireReload: (path: string) => any;
|
|
14
dist/index.js
vendored
14
dist/index.js
vendored
@ -1,14 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
require("typings-global");
|
|
||||||
const SmartfileFs = require("./smartfile.fs");
|
|
||||||
const SmartfileInterpreter = require("./smartfile.interpreter");
|
|
||||||
const SmartfileMemory = require("./smartfile.memory");
|
|
||||||
const SmartfileRemote = require("./smartfile.remote");
|
|
||||||
var smartfile_classes_smartfile_1 = require("./smartfile.classes.smartfile");
|
|
||||||
exports.Smartfile = smartfile_classes_smartfile_1.Smartfile;
|
|
||||||
exports.fs = SmartfileFs;
|
|
||||||
exports.interpreter = SmartfileInterpreter;
|
|
||||||
exports.memory = SmartfileMemory;
|
|
||||||
exports.remote = SmartfileRemote;
|
|
||||||
exports.requireReload = SmartfileFs.requireReload;
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCO0FBR3ZCLDhDQUE2QztBQUM3QyxnRUFBK0Q7QUFDL0Qsc0RBQXFEO0FBQ3JELHNEQUFxRDtBQUVyRCw2RUFBdUQ7QUFBL0Msa0RBQUEsU0FBUyxDQUFBO0FBRU4sUUFBQSxFQUFFLEdBQUcsV0FBVyxDQUFBO0FBQ2hCLFFBQUEsV0FBVyxHQUFHLG9CQUFvQixDQUFBO0FBQ2xDLFFBQUEsTUFBTSxHQUFHLGVBQWUsQ0FBQTtBQUN4QixRQUFBLE1BQU0sR0FBRyxlQUFlLENBQUE7QUFDeEIsUUFBQSxhQUFhLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQSJ9
|
|
3
dist/smartfile.classes.smartfile.d.ts
vendored
3
dist/smartfile.classes.smartfile.d.ts
vendored
@ -1,3 +0,0 @@
|
|||||||
export declare class Smartfile {
|
|
||||||
constructor();
|
|
||||||
}
|
|
7
dist/smartfile.classes.smartfile.js
vendored
7
dist/smartfile.classes.smartfile.js
vendored
@ -1,7 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
class Smartfile {
|
|
||||||
constructor() {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.Smartfile = Smartfile;
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxlLmNsYXNzZXMuc21hcnRmaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRmaWxlLmNsYXNzZXMuc21hcnRmaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtJQUNJO0lBRUEsQ0FBQztDQUNKO0FBSkQsOEJBSUMifQ==
|
|
141
dist/smartfile.fs.d.ts
vendored
141
dist/smartfile.fs.d.ts
vendored
@ -1,141 +0,0 @@
|
|||||||
/// <reference types="q" />
|
|
||||||
import 'typings-global';
|
|
||||||
import plugins = require('./smartfile.plugins');
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param filePath
|
|
||||||
* @returns {boolean}
|
|
||||||
*/
|
|
||||||
export declare let fileExistsSync: (filePath: any) => boolean;
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param filePath
|
|
||||||
* @returns {any}
|
|
||||||
*/
|
|
||||||
export declare let fileExists: (filePath: any) => plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
* Checks if given path points to an existing directory
|
|
||||||
*/
|
|
||||||
export declare let isDirectory: (pathArg: any) => boolean;
|
|
||||||
/**
|
|
||||||
* Checks if a given path points to an existing file
|
|
||||||
*/
|
|
||||||
export declare let isFile: (pathArg: any) => boolean;
|
|
||||||
/**
|
|
||||||
* copies a file from A to B on the local disk
|
|
||||||
*/
|
|
||||||
export declare let copy: (fromArg: string, toArg: string) => plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
* copies a file SYNCHRONOUSLY from A to B on the local disk
|
|
||||||
*/
|
|
||||||
export declare let copySync: (fromArg: string, toArg: string) => boolean;
|
|
||||||
/**
|
|
||||||
* ensures that a directory is in place
|
|
||||||
*/
|
|
||||||
export declare let ensureDir: (dirPathArg: string) => plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
* ensures that a directory is in place
|
|
||||||
*/
|
|
||||||
export declare let ensureDirSync: (dirPathArg: string) => void;
|
|
||||||
/**
|
|
||||||
* ensures that a file is on disk
|
|
||||||
* @param filePath the filePath to ensureDir
|
|
||||||
* @param the fileContent to place into a new file in case it doesn't exist yet
|
|
||||||
* @returns Promise<void>
|
|
||||||
* @exec ASYNC
|
|
||||||
*/
|
|
||||||
export declare let ensureFile: (filePathArg: any, initFileStringArg: any) => plugins.q.Promise<void>;
|
|
||||||
/**
|
|
||||||
* ensures that a file is on disk
|
|
||||||
* @param filePath the filePath to ensureDir
|
|
||||||
* @param the fileContent to place into a new file in case it doesn't exist yet
|
|
||||||
* @returns Promise<void>
|
|
||||||
* @exec SYNC
|
|
||||||
*/
|
|
||||||
export declare let ensureFileSync: (filePathArg: string, initFileStringArg: string) => void;
|
|
||||||
/**
|
|
||||||
* removes a file or folder from local disk
|
|
||||||
*/
|
|
||||||
export declare let remove: (pathArg: string) => plugins.q.Promise<void>;
|
|
||||||
/**
|
|
||||||
* removes a file SYNCHRONOUSLY from local disk
|
|
||||||
*/
|
|
||||||
export declare let removeSync: (pathArg: string) => boolean;
|
|
||||||
/**
|
|
||||||
* removes an array of filePaths from disk
|
|
||||||
*/
|
|
||||||
export declare let removeMany: (filePathArrayArg: string[]) => plugins.q.Promise<void[]>;
|
|
||||||
/**
|
|
||||||
* like removeFilePathArray but SYNCHRONOUSLY
|
|
||||||
*/
|
|
||||||
export declare let removeManySync: (filePathArrayArg: string[]) => void;
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param filePathArg
|
|
||||||
* @returns {*}
|
|
||||||
*/
|
|
||||||
export declare let toGulpStreamSync: (filePathArg: string) => any;
|
|
||||||
export declare let toGulpDestSync: (folderPathArg: string) => any;
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param filePathArg
|
|
||||||
* @param fileTypeArg
|
|
||||||
* @returns {any}
|
|
||||||
*/
|
|
||||||
export declare let toObjectSync: (filePathArg: any, fileTypeArg?: any) => any;
|
|
||||||
/**
|
|
||||||
* reads a file content to a String
|
|
||||||
* @param filePath
|
|
||||||
* @returns {string|Buffer|any}
|
|
||||||
*/
|
|
||||||
export declare let toStringSync: (filePath: any) => any;
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param filePathArg
|
|
||||||
* @param options
|
|
||||||
* @returns {number}
|
|
||||||
*/
|
|
||||||
export declare let toVinylSync: (filePathArg: any, options?: {}) => any;
|
|
||||||
/**
|
|
||||||
* lets you reload files hot.
|
|
||||||
* @param path
|
|
||||||
* @returns {any}
|
|
||||||
*/
|
|
||||||
export declare let requireReload: (path: string) => any;
|
|
||||||
/**
|
|
||||||
* lists Folders in a directory on local disk
|
|
||||||
* @returns Promise
|
|
||||||
*/
|
|
||||||
export declare let listFolders: (pathArg: string, regexFilter?: RegExp) => plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
* lists Folders SYNCHRONOUSLY in a directory on local disk
|
|
||||||
* @returns an array with the folder names as strings
|
|
||||||
*/
|
|
||||||
export declare let listFoldersSync: (pathArg: string, regexFilter?: RegExp) => string[];
|
|
||||||
/**
|
|
||||||
* lists Files in a directory on local disk
|
|
||||||
* @returns Promise
|
|
||||||
*/
|
|
||||||
export declare let listFiles: (pathArg: string, regexFilter?: RegExp) => plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
* lists Files SYNCHRONOUSLY in a directory on local disk
|
|
||||||
* @returns an array with the folder names as strings
|
|
||||||
*/
|
|
||||||
export declare let listFilesSync: (pathArg: string, regexFilter?: RegExp) => string[];
|
|
||||||
/**
|
|
||||||
* lists all items (folders AND files) in a directory on local disk
|
|
||||||
* @returns Promise<string[]>
|
|
||||||
*/
|
|
||||||
export declare let listAllItems: (pathArg: string, regexFilter?: RegExp) => plugins.q.Promise<string[]>;
|
|
||||||
/**
|
|
||||||
* lists all items (folders AND files) in a directory on local disk
|
|
||||||
* @returns an array with the folder names as strings
|
|
||||||
* @executes SYNC
|
|
||||||
*/
|
|
||||||
export declare let listAllItemsSync: (pathArg: string, regexFilter?: RegExp) => string[];
|
|
||||||
/**
|
|
||||||
* lists a file tree using a miniMatch filter
|
|
||||||
* note: if the miniMatch Filter is an absolute path, the cwdArg will be omitted
|
|
||||||
* @returns Promise<string[]> string array with the absolute paths of all matching files
|
|
||||||
*/
|
|
||||||
export declare let listFileTree: (dirPathArg: string, miniMatchFilter: string) => plugins.q.Promise<string[]>;
|
|
323
dist/smartfile.fs.js
vendored
323
dist/smartfile.fs.js
vendored
File diff suppressed because one or more lines are too long
3
dist/smartfile.interpreter.d.ts
vendored
3
dist/smartfile.interpreter.d.ts
vendored
@ -1,3 +0,0 @@
|
|||||||
import 'typings-global';
|
|
||||||
export declare let filetype: (pathArg: string) => string;
|
|
||||||
export declare let objectFile: (fileStringArg: string, fileTypeArg: any) => any;
|
|
21
dist/smartfile.interpreter.js
vendored
21
dist/smartfile.interpreter.js
vendored
@ -1,21 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
require("typings-global");
|
|
||||||
const plugins = require("./smartfile.plugins");
|
|
||||||
exports.filetype = (pathArg) => {
|
|
||||||
let extName = plugins.path.extname(pathArg);
|
|
||||||
let fileType = extName.replace(/\.([a-z]*)/, '$1'); // remove . form fileType
|
|
||||||
return fileType;
|
|
||||||
};
|
|
||||||
exports.objectFile = (fileStringArg, fileTypeArg) => {
|
|
||||||
switch (fileTypeArg) {
|
|
||||||
case 'yml':
|
|
||||||
case 'yaml':
|
|
||||||
return plugins.yaml.safeLoad(fileStringArg);
|
|
||||||
case 'json':
|
|
||||||
return JSON.parse(fileStringArg);
|
|
||||||
default:
|
|
||||||
plugins.beautylog.error('file type ' + fileTypeArg.blue + ' not supported');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxlLmludGVycHJldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRmaWxlLmludGVycHJldGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwQkFBdUI7QUFFdkIsK0NBQStDO0FBRXBDLFFBQUEsUUFBUSxHQUFHLENBQUMsT0FBZTtJQUNsQyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMzQyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBQyxJQUFJLENBQUMsQ0FBQSxDQUFDLHlCQUF5QjtJQUMzRSxNQUFNLENBQUMsUUFBUSxDQUFBO0FBQ25CLENBQUMsQ0FBQTtBQUVVLFFBQUEsVUFBVSxHQUFHLENBQUMsYUFBcUIsRUFBRSxXQUFXO0lBQ3ZELE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbEIsS0FBSyxLQUFLLENBQUU7UUFDWixLQUFLLE1BQU07WUFDUCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDL0MsS0FBSyxNQUFNO1lBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDcEM7WUFDSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxDQUFBO1lBQzNFLEtBQUssQ0FBQTtJQUNiLENBQUM7QUFDTCxDQUFDLENBQUEifQ==
|
|
51
dist/smartfile.memory.d.ts
vendored
51
dist/smartfile.memory.d.ts
vendored
@ -1,51 +0,0 @@
|
|||||||
/// <reference types="vinyl" />
|
|
||||||
/// <reference types="q" />
|
|
||||||
import 'typings-global';
|
|
||||||
import plugins = require('./smartfile.plugins');
|
|
||||||
/**
|
|
||||||
* 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[] | plugins.vinyl | plugins.vinyl[], baseArg?: string) => any;
|
|
||||||
/**
|
|
||||||
* converts file to Object
|
|
||||||
* @param fileStringArg
|
|
||||||
* @param fileTypeArg
|
|
||||||
* @returns {any|any}
|
|
||||||
*/
|
|
||||||
export declare let toObject: (fileStringArg: string, fileTypeArg: string) => any;
|
|
||||||
/**
|
|
||||||
* takes a string and converts it to vinyl file
|
|
||||||
* @param fileArg
|
|
||||||
* @param optionsArg
|
|
||||||
*/
|
|
||||||
export declare let toVinylFileSync: (fileArg: string, optionsArg?: {
|
|
||||||
filename?: string;
|
|
||||||
base?: string;
|
|
||||||
relPath?: string;
|
|
||||||
}) => plugins.vinyl;
|
|
||||||
/**
|
|
||||||
* takes a string array and some options and returns a vinylfile array
|
|
||||||
* @param arrayArg
|
|
||||||
* @param optionsArg
|
|
||||||
*/
|
|
||||||
export declare let toVinylArraySync: (arrayArg: string[], optionsArg?: {
|
|
||||||
filename?: string;
|
|
||||||
base?: string;
|
|
||||||
relPath?: string;
|
|
||||||
}) => any[];
|
|
||||||
/**
|
|
||||||
* takes a vinylFile object and converts it to String
|
|
||||||
*/
|
|
||||||
export declare let toStringSync: (fileArg: plugins.vinyl) => any;
|
|
||||||
/**
|
|
||||||
* writes string or vinyl file to disk.
|
|
||||||
* @param fileArg
|
|
||||||
* @param fileNameArg
|
|
||||||
* @param fileBaseArg
|
|
||||||
*/
|
|
||||||
export declare let toFs: (fileContentArg: string | plugins.vinyl, filePathArg: any) => plugins.q.Promise<{}>;
|
|
||||||
export declare let toFsSync: (fileArg: any, filePathArg: string) => void;
|
|
126
dist/smartfile.memory.js
vendored
126
dist/smartfile.memory.js
vendored
File diff suppressed because one or more lines are too long
17
dist/smartfile.plugins.d.ts
vendored
17
dist/smartfile.plugins.d.ts
vendored
@ -1,17 +0,0 @@
|
|||||||
import 'typings-global';
|
|
||||||
export import beautylog = require('beautylog');
|
|
||||||
export import fs = require('fs');
|
|
||||||
export import fsExtra = require('fs-extra');
|
|
||||||
export declare let gulp: any;
|
|
||||||
export declare let glob: any;
|
|
||||||
export declare let g: {
|
|
||||||
remoteSrc: any;
|
|
||||||
};
|
|
||||||
export import path = require('path');
|
|
||||||
export import q = require('q');
|
|
||||||
export declare let request: any;
|
|
||||||
export declare let requireReload: any;
|
|
||||||
export import smartpath = require('smartpath');
|
|
||||||
export import vinyl = require('vinyl');
|
|
||||||
export declare let vinylFile: any;
|
|
||||||
export declare let yaml: any;
|
|
19
dist/smartfile.plugins.js
vendored
19
dist/smartfile.plugins.js
vendored
@ -1,19 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
require("typings-global");
|
|
||||||
exports.beautylog = require("beautylog");
|
|
||||||
exports.fs = require("fs");
|
|
||||||
exports.fsExtra = require("fs-extra");
|
|
||||||
exports.gulp = require('gulp');
|
|
||||||
exports.glob = require('glob');
|
|
||||||
exports.g = {
|
|
||||||
remoteSrc: require('gulp-remote-src')
|
|
||||||
};
|
|
||||||
exports.path = require("path");
|
|
||||||
exports.q = require("q");
|
|
||||||
exports.request = require('request');
|
|
||||||
exports.requireReload = require('require-reload');
|
|
||||||
exports.smartpath = require("smartpath");
|
|
||||||
exports.vinyl = require("vinyl");
|
|
||||||
exports.vinylFile = require('vinyl-file');
|
|
||||||
exports.yaml = require('js-yaml');
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxlLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGZpbGUucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCO0FBQ3ZCLHlDQUE4QztBQUM5QywyQkFBZ0M7QUFDaEMsc0NBQTJDO0FBQ2hDLFFBQUEsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUN0QixRQUFBLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDdEIsUUFBQSxDQUFDLEdBQUc7SUFDWCxTQUFTLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0NBQ3hDLENBQUE7QUFDRCwrQkFBb0M7QUFDcEMseUJBQThCO0FBQ25CLFFBQUEsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUM1QixRQUFBLGFBQWEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUNwRCx5Q0FBOEM7QUFDOUMsaUNBQXNDO0FBQzNCLFFBQUEsU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUNqQyxRQUFBLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUEifQ==
|
|
22
dist/smartfile.remote.d.ts
vendored
22
dist/smartfile.remote.d.ts
vendored
@ -1,22 +0,0 @@
|
|||||||
/// <reference types="q" />
|
|
||||||
import 'typings-global';
|
|
||||||
import plugins = require('./smartfile.plugins');
|
|
||||||
export declare let toFs: (from: string, toPath: string) => plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param filePathArg
|
|
||||||
* @returns {*}
|
|
||||||
*/
|
|
||||||
export declare let toGulpStreamSync: (filePathArg: string, baseArg: string) => any;
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param fromArg
|
|
||||||
* @returns {any}
|
|
||||||
*/
|
|
||||||
export declare let toObject: (fromArg: string) => plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param fromArg
|
|
||||||
* @returns {any}
|
|
||||||
*/
|
|
||||||
export declare let toString: (fromArg: string) => plugins.q.Promise<{}>;
|
|
64
dist/smartfile.remote.js
vendored
64
dist/smartfile.remote.js
vendored
@ -1,64 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
require("typings-global");
|
|
||||||
const plugins = require("./smartfile.plugins");
|
|
||||||
const SmartfileInterpreter = require("./smartfile.interpreter");
|
|
||||||
exports.toFs = function (from, toPath) {
|
|
||||||
let done = plugins.q.defer();
|
|
||||||
let stream = plugins.request(from).pipe(plugins.fsExtra.createWriteStream(toPath));
|
|
||||||
stream.on('finish', function () {
|
|
||||||
done.resolve(toPath);
|
|
||||||
});
|
|
||||||
return done.promise;
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param filePathArg
|
|
||||||
* @returns {*}
|
|
||||||
*/
|
|
||||||
exports.toGulpStreamSync = function (filePathArg, baseArg) {
|
|
||||||
let stream = plugins.g.remoteSrc(filePathArg, {
|
|
||||||
base: baseArg
|
|
||||||
});
|
|
||||||
return stream;
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param fromArg
|
|
||||||
* @returns {any}
|
|
||||||
*/
|
|
||||||
exports.toObject = function (fromArg) {
|
|
||||||
let done = plugins.q.defer();
|
|
||||||
plugins.request.get(fromArg, function (error, response, bodyString) {
|
|
||||||
let returnObject;
|
|
||||||
if (!error && response.statusCode === 200) {
|
|
||||||
returnObject = SmartfileInterpreter.objectFile(bodyString, SmartfileInterpreter.filetype(fromArg));
|
|
||||||
done.resolve(returnObject);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
console.log('could not get remote file from ' + fromArg);
|
|
||||||
returnObject = undefined;
|
|
||||||
done.reject(returnObject);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return done.promise;
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param fromArg
|
|
||||||
* @returns {any}
|
|
||||||
*/
|
|
||||||
exports.toString = (fromArg) => {
|
|
||||||
let done = plugins.q.defer();
|
|
||||||
plugins.request.get(fromArg, function (error, response, bodyString) {
|
|
||||||
if (!error && response.statusCode === 200) {
|
|
||||||
done.resolve(bodyString);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
plugins.beautylog.error('could not get remote file from ' + fromArg);
|
|
||||||
bodyString = undefined;
|
|
||||||
done.reject(bodyString);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return done.promise;
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxlLnJlbW90ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0ZmlsZS5yZW1vdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUF1QjtBQUN2QiwrQ0FBK0M7QUFDL0MsZ0VBQWdFO0FBRXJELFFBQUEsSUFBSSxHQUFHLFVBQVMsSUFBWSxFQUFDLE1BQWM7SUFDbEQsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUM1QixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDbEYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3hCLENBQUMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7QUFDdkIsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNRLFFBQUEsZ0JBQWdCLEdBQUcsVUFBUyxXQUFtQixFQUFDLE9BQWU7SUFDdEUsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO1FBQzFDLElBQUksRUFBRSxPQUFPO0tBQ2hCLENBQUMsQ0FBQTtJQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUE7QUFDakIsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNRLFFBQUEsUUFBUSxHQUFHLFVBQVMsT0FBZTtJQUMxQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVTtRQUM5RCxJQUFJLFlBQVksQ0FBQTtRQUNoQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEMsWUFBWSxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7WUFDakcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM5QixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxHQUFHLE9BQU8sQ0FBQyxDQUFBO1lBQ3hELFlBQVksR0FBRyxTQUFTLENBQUE7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM3QixDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtBQUN2QixDQUFDLENBQUE7QUFFRDs7OztHQUlHO0FBQ1EsUUFBQSxRQUFRLEdBQUcsQ0FBQyxPQUFlO0lBQ2xDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVO1FBQzlELEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzVCLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxHQUFHLE9BQU8sQ0FBQyxDQUFBO1lBQ3BFLFVBQVUsR0FBRyxTQUFTLENBQUE7WUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMzQixDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtBQUN2QixDQUFDLENBQUEifQ==
|
|
@ -1,9 +1,22 @@
|
|||||||
{
|
{
|
||||||
"npmts":{
|
"npmts": {
|
||||||
"mode":"default",
|
"mode": "default",
|
||||||
"coverageTreshold":70
|
"coverageTreshold": 70
|
||||||
},
|
},
|
||||||
"npmdocker":{
|
"npmdocker": {},
|
||||||
|
"npmci": {
|
||||||
|
"npmGlobalTools": [],
|
||||||
|
"npmAccessLevel": "public"
|
||||||
|
},
|
||||||
|
"gitzone": {
|
||||||
|
"projectType": "npm",
|
||||||
|
"module": {
|
||||||
|
"githost": "gitlab.com",
|
||||||
|
"gitscope": "pushrocks",
|
||||||
|
"gitrepo": "smartfile",
|
||||||
|
"shortDescription": "smart ways to work with files in nodejs",
|
||||||
|
"npmPackagename": "@pushrocks/smartfile",
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
10473
package-lock.json
generated
Normal file
10473
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
77
package.json
77
package.json
@ -1,15 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "smartfile",
|
"name": "@pushrocks/smartfile",
|
||||||
"version": "4.0.23",
|
"private": false,
|
||||||
|
"version": "8.0.5",
|
||||||
"description": "offers smart ways to work with files in nodejs",
|
"description": "offers smart ways to work with files in nodejs",
|
||||||
"main": "dist/index.js",
|
"main": "dist_ts/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"typings": "dist_ts/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "(npmts)",
|
"test": "(tstest test/)",
|
||||||
"reinstall": "(rm -r node_modules && npm install)",
|
"build": "(tsbuild --web)"
|
||||||
"release": "(git pull origin master && npm version patch && git push origin master && git checkout release && git merge master && git push origin release && git checkout master)",
|
|
||||||
"update": "(git checkout master && git pull origin master && npm install)",
|
|
||||||
"upgrade": "(npm run update) && (ncu upgradeAll && npm install)"
|
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -19,35 +17,50 @@
|
|||||||
"filesystem",
|
"filesystem",
|
||||||
"json"
|
"json"
|
||||||
],
|
],
|
||||||
"author": "Smart Coordination GmbH <office@push.rocks> (https://push.rocks)",
|
"author": "Lossless GmbH <hello@lossless.com> (https://lossless.com)",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://gitlab.com/pushrocks/smartfile/issues"
|
"url": "https://gitlab.com/pushrocks/smartfile/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://gitlab.com/pushrocks/smartfile",
|
"homepage": "https://gitlab.com/pushrocks/smartfile",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/fs-extra": "0.x.x",
|
"@pushrocks/smartfile-interfaces": "^1.0.7",
|
||||||
"@types/q": "0.x.x",
|
"@pushrocks/smarthash": "^2.1.6",
|
||||||
"@types/vinyl": "^1.1.29",
|
"@pushrocks/smartjson": "^4.0.3",
|
||||||
"beautylog": "^5.0.23",
|
"@pushrocks/smartmime": "^1.0.3",
|
||||||
"fs-extra": "^0.30.0",
|
"@pushrocks/smartpath": "^4.0.3",
|
||||||
"glob": "^7.1.0",
|
"@pushrocks/smartpromise": "^3.0.6",
|
||||||
"gulp": "^3.9.1",
|
"@pushrocks/smartrequest": "^1.1.51",
|
||||||
"gulp-remote-src": "^0.4.1",
|
"@types/fs-extra": "^9.0.1",
|
||||||
"js-yaml": "^3.6.1",
|
"@types/glob": "^7.1.3",
|
||||||
"q": "^1.4.1",
|
"@types/js-yaml": "^3.12.5",
|
||||||
"request": "^2.75.0",
|
"fs-extra": "^9.0.1",
|
||||||
"require-reload": "0.2.2",
|
"glob": "^7.1.6",
|
||||||
"smartpath": "^3.2.2",
|
"js-yaml": "^3.14.0"
|
||||||
"typings-global": "^1.0.14",
|
|
||||||
"vinyl": "^1.2.0",
|
|
||||||
"vinyl-file": "^2.0.0"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/should": "^8.1.30",
|
"@gitzone/tsbuild": "^2.1.25",
|
||||||
"gulp-function": "^1.3.6",
|
"@gitzone/tsrun": "^1.2.12",
|
||||||
"npmts-g": "^5.2.8",
|
"@gitzone/tstest": "^1.0.52",
|
||||||
"should": "^11.1.0",
|
"@pushrocks/tapbundle": "^3.2.9",
|
||||||
"typings-test": "^1.0.3"
|
"@types/node": "^14.11.2",
|
||||||
}
|
"gulp-function": "^2.2.14",
|
||||||
|
"tslint": "^6.1.3",
|
||||||
|
"tslint-config-prettier": "^1.18.0"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"ts/**/*",
|
||||||
|
"ts_web/**/*",
|
||||||
|
"dist/**/*",
|
||||||
|
"dist_*/**/*",
|
||||||
|
"dist_ts/**/*",
|
||||||
|
"dist_ts_web/**/*",
|
||||||
|
"assets/**/*",
|
||||||
|
"cli.js",
|
||||||
|
"npmextra.json",
|
||||||
|
"readme.md"
|
||||||
|
],
|
||||||
|
"browserslist": [
|
||||||
|
"last 1 chrome versions"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
51
readme.md
Normal file
51
readme.md
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# @pushrocks/smartfile
|
||||||
|
smart ways to work with files in nodejs
|
||||||
|
|
||||||
|
## Availabililty and Links
|
||||||
|
* [npmjs.org (npm package)](https://www.npmjs.com/package/@pushrocks/smartfile)
|
||||||
|
* [gitlab.com (source)](https://gitlab.com/pushrocks/smartfile)
|
||||||
|
* [github.com (source mirror)](https://github.com/pushrocks/smartfile)
|
||||||
|
* [docs (typedoc)](https://pushrocks.gitlab.io/smartfile/)
|
||||||
|
|
||||||
|
## Status for master
|
||||||
|
|
||||||
|
Status Category | Status Badge
|
||||||
|
-- | --
|
||||||
|
GitLab Pipelines | [](https://lossless.cloud)
|
||||||
|
GitLab Pipline Test Coverage | [](https://lossless.cloud)
|
||||||
|
npm | [](https://lossless.cloud)
|
||||||
|
Snyk | [](https://lossless.cloud)
|
||||||
|
TypeScript Support | [](https://lossless.cloud)
|
||||||
|
node Support | [](https://nodejs.org/dist/latest-v10.x/docs/api/)
|
||||||
|
Code Style | [](https://lossless.cloud)
|
||||||
|
PackagePhobia (total standalone install weight) | [](https://lossless.cloud)
|
||||||
|
PackagePhobia (package size on registry) | [](https://lossless.cloud)
|
||||||
|
BundlePhobia (total size when bundled) | [](https://lossless.cloud)
|
||||||
|
Platform support | [](https://lossless.cloud) [](https://lossless.cloud)
|
||||||
|
|
||||||
|
## 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 |
|
||||||
|
|
||||||
|
## Contribution
|
||||||
|
|
||||||
|
We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)
|
||||||
|
|
||||||
|
For further information read the linked docs at the top of this readme.
|
||||||
|
|
||||||
|
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
||||||
|
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
|
||||||
|
|
||||||
|
[](https://maintainedby.lossless.com)
|
1
test/test.d.ts
vendored
1
test/test.d.ts
vendored
@ -1 +0,0 @@
|
|||||||
import 'typings-test';
|
|
224
test/test.js
224
test/test.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
459
test/test.ts
459
test/test.ts
@ -1,244 +1,229 @@
|
|||||||
import 'typings-test'
|
import * as smartfile from '../ts/index';
|
||||||
import * as smartfile from '../dist/index'
|
import path = require('path');
|
||||||
import beautylog = require('beautylog')
|
|
||||||
let gulp = require('gulp')
|
|
||||||
let gFunction = require('gulp-function')
|
|
||||||
import path = require('path')
|
|
||||||
import * as should from 'should'
|
|
||||||
let vinyl = require('vinyl')
|
|
||||||
|
|
||||||
describe('smartfile'.yellow, function () {
|
import { expect, tap } from '@pushrocks/tapbundle';
|
||||||
describe('.fs'.yellow, function () {
|
|
||||||
describe('.fileExistsSync'.yellow, function () {
|
|
||||||
it('should return an accurate boolean', function () {
|
|
||||||
should(smartfile.fs.fileExistsSync('./test/mytest.json')).be.true()
|
|
||||||
should(smartfile.fs.fileExistsSync('./test/notthere.json')).be.false()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('.fileExists'.yellow, function () {
|
|
||||||
it('should return a working promise', function () {
|
|
||||||
should(smartfile.fs.fileExists('./test/mytest.json')).be.Promise()
|
|
||||||
should(smartfile.fs.fileExists('./test/mytest.json')).be.fulfilled()
|
|
||||||
should(smartfile.fs.fileExists('./test/notthere.json')).not.be.fulfilled()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('.listFoldersSync()', function () {
|
|
||||||
it('should get the file type from a string', function () {
|
|
||||||
should(smartfile.fs.listFoldersSync('./test/')).containDeep(['testfolder'])
|
|
||||||
should(smartfile.fs.listFoldersSync('./test/')).not.containDeep(['notExistentFolder'])
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('.listFolders()', function () {
|
|
||||||
it('should get the file type from a string', function (done) {
|
|
||||||
smartfile.fs.listFolders('./test/')
|
|
||||||
.then(function (folderArrayArg) {
|
|
||||||
should(folderArrayArg).containDeep(['testfolder'])
|
|
||||||
should(folderArrayArg).not.containDeep(['notExistentFolder'])
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('.listFilesSync()', function () {
|
|
||||||
it('should get the file type from a string', function () {
|
|
||||||
should(smartfile.fs.listFilesSync('./test/')).containDeep(['mytest.json'])
|
|
||||||
should(smartfile.fs.listFilesSync('./test/')).not.containDeep(['notExistentFile'])
|
|
||||||
should(smartfile.fs.listFilesSync('./test/', /mytest\.json/)).containDeep(['mytest.json'])
|
|
||||||
should(smartfile.fs.listFilesSync('./test/', /mytests.json/)).not.containDeep(['mytest.json'])
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('.listFiles()', function () {
|
|
||||||
it('should get the file type from a string', function (done) {
|
|
||||||
smartfile.fs.listFiles('./test/')
|
|
||||||
.then(function (folderArrayArg) {
|
|
||||||
should(folderArrayArg).containDeep(['mytest.json'])
|
|
||||||
should(folderArrayArg).not.containDeep(['notExistentFile'])
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('.listFileTree()', function () {
|
|
||||||
it('should get a file tree', function (done) {
|
|
||||||
smartfile.fs.listFileTree(path.resolve('./test/'), '**/*.txt')
|
|
||||||
.then(function (folderArrayArg) {
|
|
||||||
should(folderArrayArg).containDeep(['testfolder/testfile1.txt'])
|
|
||||||
should(folderArrayArg).not.containDeep(['mytest.json'])
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('.copy()'.yellow, function () {
|
|
||||||
it('should copy a directory', function () {
|
|
||||||
smartfile.fs.copy('./test/testfolder/', './test/temp/')
|
|
||||||
})
|
|
||||||
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 () {
|
|
||||||
|
|
||||||
})
|
|
||||||
it('smartfile.fs.remove -> should remove single files', function (done) {
|
|
||||||
smartfile.fs.remove('./test/temp/mytestRenamed.yaml')
|
|
||||||
.then(() => { done() })
|
|
||||||
})
|
|
||||||
it('smartfile.fs.removeSync -> should remove single files synchronouly',function() {
|
|
||||||
smartfile.fs.removeSync('./test/temp/testfile1.txt')
|
|
||||||
should(smartfile.fs.fileExistsSync('./test/temp/testfile1.txt')).be.false()
|
|
||||||
})
|
|
||||||
it('smartfile.fs.removeMany -> should remove and array of files',function(done) {
|
|
||||||
smartfile.fs.removeMany(['./test/temp/testfile1.txt','./test/temp/testfile2.txt']).then(() => {
|
|
||||||
should(smartfile.fs.fileExistsSync('./test/temp/testfile1.txt')).be.false()
|
|
||||||
should(smartfile.fs.fileExistsSync('./test/temp/testfile2.txt')).be.false()
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
it('smartfile.fs.removeManySync -> should remove and array of single files synchronouly',function() {
|
|
||||||
smartfile.fs.removeManySync(['./test/temp/testfile1.txt','./test/temp/testfile2.txt'])
|
|
||||||
should(smartfile.fs.fileExistsSync('./test/temp/testfile1.txt')).be.false()
|
|
||||||
should(smartfile.fs.fileExistsSync('./test/temp/testfile2.txt')).be.false()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('.interpreter', function () {
|
// ---------------------------
|
||||||
describe('.filetype()', function () {
|
// smartfile.fs
|
||||||
it('should get the file type from a string', function () {
|
// ---------------------------
|
||||||
should(smartfile.interpreter.filetype('./somefolder/data.json')).equal('json')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('.fs'.yellow, function () {
|
tap.test('.fs.fileExistsSync -> should return an accurate boolean', async () => {
|
||||||
describe('toGulpStreamSync() and toGulpDestSync', function () {
|
expect(smartfile.fs.fileExistsSync('./test/testassets/mytest.json')).to.be.true;
|
||||||
it('should produce a gulp stream', function (done) {
|
expect(smartfile.fs.fileExistsSync('./test/testassets/notthere.json')).be.false;
|
||||||
smartfile.fs.toGulpStreamSync('./test/my*')
|
});
|
||||||
.pipe(smartfile.fs.toGulpDestSync('./test/temp/'))
|
|
||||||
.pipe(gFunction(done, 'atEnd'))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('.toObjectSync()'.yellow, function () {
|
|
||||||
it('should read an ' + '.yaml'.blue + ' file to an object', function () {
|
|
||||||
let testData = smartfile.fs.toObjectSync('./test/mytest.yaml')
|
|
||||||
should(testData).have.property('key1', 'this works')
|
|
||||||
should(testData).have.property('key2', 'this works too')
|
|
||||||
|
|
||||||
})
|
tap.test('.fs.fileExists -> should resolve or reject a promise', async () => {
|
||||||
it('should state unknown file type for unknown file types', function () {
|
expect(smartfile.fs.fileExists('./test/testassets/mytest.json')).to.be.instanceof(Promise);
|
||||||
let testData = smartfile.fs.toObjectSync('./test/mytest.txt')
|
await smartfile.fs.fileExists('./test/testassets/mytest.json');
|
||||||
})
|
await smartfile.fs.fileExists('./test/testassets/notthere.json').catch((err) => {
|
||||||
it('should read an ' + '.json'.blue + ' file to an object', function () {
|
return expect(err.message).to.equal(
|
||||||
let testData = smartfile.fs.toObjectSync('./test/mytest.json')
|
"ENOENT: no such file or directory, access './test/testassets/notthere.json'"
|
||||||
should(testData).have.property('key1', 'this works')
|
);
|
||||||
should(testData).have.property('key2', 'this works too')
|
});
|
||||||
|
});
|
||||||
|
|
||||||
})
|
tap.test('.fs.listFoldersSync() -> should get the file type from a string', async () => {
|
||||||
})
|
expect(smartfile.fs.listFoldersSync('./test/testassets/')).to.include('testfolder');
|
||||||
describe('.toStringSync()'.yellow, function () {
|
expect(smartfile.fs.listFoldersSync('./test/testassets/')).to.not.include('notExistentFolder');
|
||||||
it('should read a file to a string', function () {
|
});
|
||||||
should.equal(
|
|
||||||
smartfile.fs.toStringSync('./test/mytest.txt'),
|
|
||||||
'Some TestString &&%$'
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('.toVinylSync'.yellow, function () {
|
|
||||||
it('should read an ' + '.json OR .yaml'.blue + ' file to an ' + 'vinyl file object'.cyan, function () {
|
|
||||||
let testData = smartfile.fs.toVinylSync('./test/mytest.json')
|
|
||||||
should(vinyl.isVinyl(testData)).be.true()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('.memory', function () {
|
tap.test('.fs.listFolders() -> should get the file type from a string', async () => {
|
||||||
describe('.toGulpStream()', function () {
|
const folderArrayArg = await smartfile.fs.listFolders('./test/testassets/');
|
||||||
it('should produce a valid gulp stream', function () {
|
expect(folderArrayArg).to.include('testfolder');
|
||||||
let localArray = ['test1', 'test2', 'test3']
|
expect(folderArrayArg).to.not.include('notExistentFolder');
|
||||||
smartfile.memory.toGulpStream(localArray)
|
});
|
||||||
.pipe(gulp.dest('./test/temp/'))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('toVinylFileSync()', function () {
|
|
||||||
it('should produce a vinylFile', function () {
|
|
||||||
let localString = 'myString'
|
|
||||||
let localOptions = { filename: 'vinylfile2', base: '/someDir' }
|
|
||||||
should(smartfile.memory.toVinylFileSync(localString, localOptions) instanceof vinyl).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)
|
|
||||||
should(testResult).be.Array()
|
|
||||||
should(testResult.length === 3).be.true()
|
|
||||||
for (let myKey in testResult) {
|
|
||||||
should(testResult[myKey] instanceof vinyl).be.true()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe('toStringSync()', function () {
|
|
||||||
it('should produce a String from vinyl file', function () {
|
|
||||||
let localString = smartfile.memory.toStringSync(new vinyl({
|
|
||||||
base: '/',
|
|
||||||
path: '/test.txt',
|
|
||||||
contents: new Buffer('myString')
|
|
||||||
}))
|
|
||||||
should(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 () {
|
tap.test('.fs.listFilesSync() -> should get the file type from a string', async () => {
|
||||||
describe('toGulpStreamSync()', function () {
|
expect(smartfile.fs.listFilesSync('./test/testassets/')).to.include('mytest.json');
|
||||||
it('should produce a gulp stream', function (done) {
|
expect(smartfile.fs.listFilesSync('./test/testassets/')).to.not.include('notExistentFile');
|
||||||
this.timeout(5000)
|
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytest\.json/)).to.include(
|
||||||
smartfile.remote.toGulpStreamSync(
|
'mytest.json'
|
||||||
'mytest.txt', 'https://raw.githubusercontent.com/pushrocks/smartfile/master/test/'
|
);
|
||||||
).pipe(smartfile.fs.toGulpDestSync('./test/temp/'))
|
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytests.json/)).to.not.include(
|
||||||
.pipe(gFunction(done, 'atEnd'))
|
'mytest.json'
|
||||||
})
|
);
|
||||||
})
|
});
|
||||||
describe('.toString()', function () {
|
|
||||||
it('should load a remote file to a variable', function (done) {
|
tap.test('.fs.listFiles() -> should get the file type from a string', async () => {
|
||||||
this.timeout(5000)
|
const folderArrayArg = await smartfile.fs.listFiles('./test/testassets/');
|
||||||
smartfile.remote.toString(
|
expect(folderArrayArg).to.include('mytest.json');
|
||||||
'https://raw.githubusercontent.com/pushrocks/smartfile/master/test/mytest.txt'
|
expect(folderArrayArg).to.not.include('notExistentFile');
|
||||||
).then(function (responseString) {
|
});
|
||||||
should.equal(responseString, 'Some TestString &&%$')
|
|
||||||
done()
|
tap.test('.fs.listFileTree() -> should get a file tree', async () => {
|
||||||
})
|
const folderArrayArg = await smartfile.fs.listFileTree(
|
||||||
})
|
path.resolve('./test/testassets/'),
|
||||||
it('should reject a Promise when the link is false', function (done) {
|
'**/*.txt'
|
||||||
this.timeout(10000)
|
);
|
||||||
smartfile.remote.toString('https://push.rocks/doesnotexist.txt')
|
expect(folderArrayArg).to.include('testfolder/testfile1.txt');
|
||||||
.then(function () {
|
expect(folderArrayArg).to.not.include('mytest.json');
|
||||||
throw new Error('this test should not be resolved')
|
});
|
||||||
}, function () {
|
|
||||||
done()
|
tap.test('.fs.fileTreeToObject -> should read a file tree into an Object', async () => {
|
||||||
})
|
const fileArrayArg = await smartfile.fs.fileTreeToObject(
|
||||||
})
|
path.resolve('./test/testassets/'),
|
||||||
})
|
'**/*.txt'
|
||||||
})
|
);
|
||||||
})
|
expect(fileArrayArg[0]).to.be.instanceof(smartfile.Smartfile);
|
||||||
|
expect(fileArrayArg[0].contents.toString()).to.equal(fileArrayArg[0].contentBuffer.toString());
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('.fs.copy() -> should copy a directory', async () => {
|
||||||
|
await smartfile.fs.copy('./test/testassets/testfolder/', './test/testassets/temp/');
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('.fs.copy() -> should copy a file', async () => {
|
||||||
|
await smartfile.fs.copy('./test/testassets/mytest.yaml', './test/testassets/temp/mytest.yaml');
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('.fs.copy() -> should copy a file and rename it', async () => {
|
||||||
|
await smartfile.fs.copy(
|
||||||
|
'./test/testassets/mytest.yaml',
|
||||||
|
'./test/testassets/temp/mytestRenamed.yaml'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('.fs.remove() -> should remove an entire directory', async () => {});
|
||||||
|
|
||||||
|
tap.test('.fs.remove -> should remove single files', async () => {
|
||||||
|
await smartfile.fs.remove('./test/testassets/temp/mytestRenamed.yaml');
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('.fs.removeSync -> should remove single files synchronouly', async () => {
|
||||||
|
smartfile.fs.removeSync('./test/testassets/temp/testfile1.txt');
|
||||||
|
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile1.txt')).to.be.false;
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('.fs.removeMany -> should remove and array of files', async () => {
|
||||||
|
smartfile.fs
|
||||||
|
.removeMany(['./test/testassets/temp/testfile1.txt', './test/testassets/temp/testfile2.txt'])
|
||||||
|
.then(() => {
|
||||||
|
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile1.txt')).to.be.false;
|
||||||
|
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).to.be.false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('.fs.removeManySync -> should remove and array of single files synchronouly', async () => {
|
||||||
|
smartfile.fs.removeManySync([
|
||||||
|
'./test/testassets/temp/testfile1.txt',
|
||||||
|
'./test/testassets/temp/testfile2.txt',
|
||||||
|
]);
|
||||||
|
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile1.txt')).to.be.false;
|
||||||
|
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).to.be.false;
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('.fs.toObjectSync() -> should read an ' + '.yaml' + ' file to an object', async () => {
|
||||||
|
const testData = smartfile.fs.toObjectSync('./test/testassets/mytest.yaml');
|
||||||
|
expect(testData).to.include({ key1: 'this works' });
|
||||||
|
expect(testData).to.include({ key2: 'this works too' });
|
||||||
|
});
|
||||||
|
tap.test(
|
||||||
|
'.fs.toObjectSync() -> should state unknown file type for unknown file types',
|
||||||
|
async () => {
|
||||||
|
const testData = smartfile.fs.toObjectSync('./test/testassets/mytest.txt');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
tap.test('.fs.toObjectSync() -> should read an ' + '.json' + ' file to an object', async () => {
|
||||||
|
const testData = smartfile.fs.toObjectSync('./test/testassets/mytest.json');
|
||||||
|
expect(testData).to.include({ key1: 'this works' });
|
||||||
|
expect(testData).to.include({ key2: 'this works too' });
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('.fs.toStringSync() -> should read a file to a string', async () => {
|
||||||
|
expect(smartfile.fs.toStringSync('./test/testassets/mytest.txt')).to.equal(
|
||||||
|
'Some TestString &&%$'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// ---------------------------
|
||||||
|
// 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.toFs() -> should write a file to disk and return a promise', async () => {
|
||||||
|
const localString = 'myString';
|
||||||
|
await smartfile.memory.toFs(
|
||||||
|
localString,
|
||||||
|
path.join(process.cwd(), './test/testassets/temp/testMemToFs.txt')
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test(
|
||||||
|
'.memory.toFsSync() -> should write a file to disk and return true if successfull',
|
||||||
|
async () => {
|
||||||
|
const localString = 'myString';
|
||||||
|
smartfile.memory.toFsSync(
|
||||||
|
localString,
|
||||||
|
path.join(process.cwd(), './test/testassets/temp/testMemToFsSync.txt')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
tap.test('.remote.toString() -> should load a remote file to a variable', async () => {
|
||||||
|
const responseString = await smartfile.remote.toString(
|
||||||
|
'https://raw.githubusercontent.com/pushrocks/smartfile/master/test/testassets/mytest.txt'
|
||||||
|
);
|
||||||
|
expect(responseString).to.equal('Some TestString &&%$');
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('.remote.toString() -> should reject a Promise when the link is false', async (tools) => {
|
||||||
|
await smartfile.remote.toString('https://push.rocks/doesnotexist.txt').catch((err) => {
|
||||||
|
return expect(err.message).to.equal(
|
||||||
|
'could not get remote file from https://push.rocks/doesnotexist.txt'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// ---------------------------
|
||||||
|
// smartfile.Smartfile
|
||||||
|
// ---------------------------
|
||||||
|
|
||||||
|
tap.test('.Smartfile -> should produce vinyl compatible files', async () => {
|
||||||
|
const smartfileArray = await smartfile.fs.fileTreeToObject(
|
||||||
|
process.cwd(),
|
||||||
|
'./test/testassets/testfolder/**/*'
|
||||||
|
);
|
||||||
|
const localSmartfile = smartfileArray[0];
|
||||||
|
expect(localSmartfile).to.be.instanceof(smartfile.Smartfile);
|
||||||
|
expect(localSmartfile.contents).to.be.instanceof(Buffer);
|
||||||
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
expect(localSmartfile.isBuffer()).to.be.true;
|
||||||
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
expect(localSmartfile.isDirectory()).to.be.false;
|
||||||
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
expect(localSmartfile.isNull()).to.be.false;
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('should output a smartfile array to disk', async () => {
|
||||||
|
const smartfileArray = await smartfile.fs.fileTreeToObject('./test/testassets/testfolder/', '*');
|
||||||
|
for (const smartfileInstance of smartfileArray) {
|
||||||
|
console.log(smartfileInstance.relative);
|
||||||
|
console.log(smartfileInstance.path);
|
||||||
|
console.log(smartfileInstance.base);
|
||||||
|
console.log(smartfileInstance.parsedPath);
|
||||||
|
}
|
||||||
|
await smartfile.memory.smartfileArrayToFs(
|
||||||
|
smartfileArray,
|
||||||
|
path.resolve('./test/testassets/temp/testoutput/')
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('should create, store and retrieve valid smartfiles', async () => {
|
||||||
|
const fileString = 'hi there';
|
||||||
|
const filePath = './test/testassets/utf8.txt';
|
||||||
|
const smartfileInstance = await smartfile.Smartfile.fromString(filePath, fileString, 'utf8');
|
||||||
|
smartfileInstance.write();
|
||||||
|
const smartfileInstance2 = await smartfile.Smartfile.fromFilePath(filePath);
|
||||||
|
const retrievedString = smartfileInstance.contents.toString();
|
||||||
|
expect(retrievedString).to.equal(fileString);
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.start();
|
||||||
|
4
test/testassets/temp/mytest.yaml
Normal file
4
test/testassets/temp/mytest.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
key1: this works
|
||||||
|
key2: this works too
|
||||||
|
key3:
|
||||||
|
nestedkey1: hello
|
@ -0,0 +1 @@
|
|||||||
|
okidoks
|
1
test/testassets/temp/subfolder/subtestfile.txt
Normal file
1
test/testassets/temp/subfolder/subtestfile.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
hi
|
1
test/testassets/temp/testMemToFs.txt
Normal file
1
test/testassets/temp/testMemToFs.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
myString
|
1
test/testassets/temp/testMemToFsSync.txt
Normal file
1
test/testassets/temp/testMemToFsSync.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
myString
|
@ -0,0 +1 @@
|
|||||||
|
okidoks
|
1
test/testassets/testfolder/subfolder/subtestfile.txt
Normal file
1
test/testassets/testfolder/subfolder/subtestfile.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
hi
|
0
test/testassets/testfolder/testfile1.txt
Normal file
0
test/testassets/testfolder/testfile1.txt
Normal file
0
test/testassets/testfolder/testfile2.txt
Normal file
0
test/testassets/testfolder/testfile2.txt
Normal file
1
test/testassets/utf8.txt
Normal file
1
test/testassets/utf8.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
hi there
|
24
ts/index.ts
24
ts/index.ts
@ -1,15 +1,13 @@
|
|||||||
import 'typings-global'
|
import * as plugins from './smartfile.plugins';
|
||||||
|
import * as SmartfileFs from './smartfile.fs';
|
||||||
|
import * as SmartfileInterpreter from './smartfile.interpreter';
|
||||||
|
import * as SmartfileMemory from './smartfile.memory';
|
||||||
|
import * as SmartfileRemote from './smartfile.remote';
|
||||||
|
|
||||||
import * as plugins from './smartfile.plugins'
|
export { Smartfile } from './smartfile.classes.smartfile';
|
||||||
import * as SmartfileFs from './smartfile.fs'
|
export { VirtualDirectory } from './smartfile.classes.virtualdirectory';
|
||||||
import * as SmartfileInterpreter from './smartfile.interpreter'
|
|
||||||
import * as SmartfileMemory from './smartfile.memory'
|
|
||||||
import * as SmartfileRemote from './smartfile.remote'
|
|
||||||
|
|
||||||
export {Smartfile} from './smartfile.classes.smartfile'
|
export let fs = SmartfileFs;
|
||||||
|
export let interpreter = SmartfileInterpreter;
|
||||||
export let fs = SmartfileFs
|
export let memory = SmartfileMemory;
|
||||||
export let interpreter = SmartfileInterpreter
|
export let remote = SmartfileRemote;
|
||||||
export let memory = SmartfileMemory
|
|
||||||
export let remote = SmartfileRemote
|
|
||||||
export let requireReload = SmartfileFs.requireReload
|
|
||||||
|
@ -1,5 +1,190 @@
|
|||||||
export class Smartfile {
|
import * as plugins from './smartfile.plugins';
|
||||||
constructor() {
|
import * as fs from './smartfile.fs';
|
||||||
|
import * as memory from './smartfile.memory';
|
||||||
|
|
||||||
}
|
export interface ISmartfileConstructorOptions {
|
||||||
|
path?: string;
|
||||||
|
contentBuffer?: Buffer;
|
||||||
|
base?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* class Smartfile
|
||||||
|
* -> is vinyl file compatible
|
||||||
|
*/
|
||||||
|
export class Smartfile extends plugins.smartjson.Smartjson {
|
||||||
|
// ======
|
||||||
|
// STATIC
|
||||||
|
// ======
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creates a Smartfile from a filePath
|
||||||
|
* @param filePath
|
||||||
|
*/
|
||||||
|
public static async fromFilePath(filePath: string) {
|
||||||
|
filePath = plugins.path.resolve(filePath);
|
||||||
|
const fileBuffer = fs.toBufferSync(filePath);
|
||||||
|
const smartfile = new Smartfile({
|
||||||
|
path: filePath,
|
||||||
|
contentBuffer: fileBuffer,
|
||||||
|
});
|
||||||
|
return smartfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async fromBuffer(filePath: string, contentBufferArg: Buffer) {
|
||||||
|
const smartfile = new Smartfile({
|
||||||
|
contentBuffer: contentBufferArg,
|
||||||
|
path: filePath,
|
||||||
|
});
|
||||||
|
|
||||||
|
return smartfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async fromString(
|
||||||
|
filePath: string,
|
||||||
|
contentStringArg: string,
|
||||||
|
encodingArg: 'utf8' | 'binary'
|
||||||
|
) {
|
||||||
|
const smartfile = new Smartfile({
|
||||||
|
contentBuffer: Buffer.from(contentStringArg, encodingArg),
|
||||||
|
path: filePath,
|
||||||
|
});
|
||||||
|
|
||||||
|
return smartfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========
|
||||||
|
// INSTANCE
|
||||||
|
// ========
|
||||||
|
/**
|
||||||
|
* the full path of the file on disk
|
||||||
|
*/
|
||||||
|
@plugins.smartjson.foldDec()
|
||||||
|
public path: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public parsedPath: plugins.path.ParsedPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the content of the file as Buffer
|
||||||
|
*/
|
||||||
|
public contentBuffer: Buffer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current working directory of the file
|
||||||
|
* Note:this is similar to gulp and different from native node path base
|
||||||
|
*/
|
||||||
|
public base: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sync the file with disk
|
||||||
|
*/
|
||||||
|
public sync: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the constructor of Smartfile
|
||||||
|
* @param optionsArg
|
||||||
|
*/
|
||||||
|
|
||||||
|
constructor(optionsArg: ISmartfileConstructorOptions) {
|
||||||
|
super();
|
||||||
|
if (optionsArg.contentBuffer) {
|
||||||
|
this.contentBuffer = optionsArg.contentBuffer;
|
||||||
|
} else {
|
||||||
|
console.log('created empty Smartfile?');
|
||||||
|
}
|
||||||
|
this.path = optionsArg.path;
|
||||||
|
this.parsedPath = plugins.path.parse(this.path);
|
||||||
|
this.base = optionsArg.base;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set contents from string
|
||||||
|
* @param contentString
|
||||||
|
*/
|
||||||
|
public setContentsFromString(contentString: string, encodingArg: 'utf8' | 'binary' = 'utf8') {
|
||||||
|
this.contents = new Buffer(contentString, encodingArg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* write file to disk
|
||||||
|
* Behaviours:
|
||||||
|
* - no argument write to exactly where the file was picked up
|
||||||
|
*/
|
||||||
|
public async write(pathArg?: string) {
|
||||||
|
const stringToWrite = this.contentBuffer.toString();
|
||||||
|
await memory.toFs(stringToWrite, this.path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* read file from disk
|
||||||
|
*/
|
||||||
|
public async read() {}
|
||||||
|
|
||||||
|
// -----------------------------------------------
|
||||||
|
// vinyl compatibility
|
||||||
|
// -----------------------------------------------
|
||||||
|
/**
|
||||||
|
* vinyl-compatibility: alias of this.contentBuffer
|
||||||
|
*/
|
||||||
|
get contents(): Buffer {
|
||||||
|
return this.contentBuffer;
|
||||||
|
}
|
||||||
|
set contents(contentsArg) {
|
||||||
|
this.contentBuffer = contentsArg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vinyl-compatibility
|
||||||
|
*/
|
||||||
|
public get cwd() {
|
||||||
|
return process.cwd();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return relative path of file
|
||||||
|
*/
|
||||||
|
public get relative(): string {
|
||||||
|
return plugins.path.relative(this.base, this.path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return truw when the file has content
|
||||||
|
*/
|
||||||
|
public isNull(): boolean {
|
||||||
|
if (!this.contentBuffer) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return true if contents are Buffer
|
||||||
|
*/
|
||||||
|
public isBuffer(): boolean {
|
||||||
|
if (this.contents instanceof Buffer) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public isDirectory() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public isStream() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public isSymbolic() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// update things
|
||||||
|
public updateFileName(fileNameArg: string) {
|
||||||
|
const oldFileName = this.parsedPath.base;
|
||||||
|
this.path = this.path.replace(new RegExp(oldFileName + '$'), fileNameArg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
51
ts/smartfile.classes.virtualdirectory.ts
Normal file
51
ts/smartfile.classes.virtualdirectory.ts
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import { Smartfile } from './smartfile.classes.smartfile';
|
||||||
|
import * as plugins from './smartfile.plugins';
|
||||||
|
import * as fs from './smartfile.fs';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a virtual directory exposes a fs api
|
||||||
|
*/
|
||||||
|
export class VirtualDirectory {
|
||||||
|
// STATIC
|
||||||
|
public static async fromFsDirPath(pathArg: string): Promise<VirtualDirectory> {
|
||||||
|
const newVirtualDir = new VirtualDirectory();
|
||||||
|
newVirtualDir.addSmartfiles(await fs.fileTreeToObject(pathArg, '**/*'));
|
||||||
|
return newVirtualDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async fromVirtualDirTransferableObject(
|
||||||
|
virtualDirTransferableObjectArg: plugins.smartfileInterfaces.VirtualDirTransferableObject
|
||||||
|
): Promise<VirtualDirectory> {
|
||||||
|
const newVirtualDir = new VirtualDirectory();
|
||||||
|
for (const fileArg of virtualDirTransferableObjectArg.files) {
|
||||||
|
newVirtualDir.addSmartfiles([Smartfile.enfoldFromJson(fileArg) as Smartfile]);
|
||||||
|
}
|
||||||
|
return newVirtualDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
// INSTANCE
|
||||||
|
private fileArray: Smartfile[] = [];
|
||||||
|
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
public addSmartfiles(smartfileArrayArg: Smartfile[]) {
|
||||||
|
this.fileArray = this.fileArray.concat(smartfileArrayArg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getFileByPath(pathArg: string) {
|
||||||
|
for (const smartfile of this.fileArray) {
|
||||||
|
if (smartfile.path === pathArg) {
|
||||||
|
return smartfile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async toVirtualDirTransferableObject(): Promise<plugins.smartfileInterfaces.VirtualDirTransferableObject> {
|
||||||
|
return {
|
||||||
|
files: this.fileArray.map(smartfileArg => smartfileArg.foldToJson())
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO implement root shifting to get subdirectories as new virtual directories
|
||||||
|
// TODO implement root shifting to combine VirtualDirecotries in a parent virtual directory
|
||||||
|
}
|
@ -1,8 +1,9 @@
|
|||||||
import 'typings-global'
|
import * as plugins from './smartfile.plugins';
|
||||||
|
import * as interpreter from './smartfile.interpreter';
|
||||||
|
|
||||||
import plugins = require('./smartfile.plugins')
|
import { Smartfile } from './smartfile.classes.smartfile';
|
||||||
import SmartfileInterpreter = require('./smartfile.interpreter')
|
|
||||||
import * as memory from './smartfile.memory'
|
import * as memory from './smartfile.memory';
|
||||||
/*===============================================================
|
/*===============================================================
|
||||||
============================ Checks =============================
|
============================ Checks =============================
|
||||||
===============================================================*/
|
===============================================================*/
|
||||||
@ -12,43 +13,47 @@ import * as memory from './smartfile.memory'
|
|||||||
* @param filePath
|
* @param filePath
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
export let fileExistsSync = function(filePath): boolean {
|
export const fileExistsSync = (filePath): boolean => {
|
||||||
let fileExistsBool: boolean = false
|
let fileExistsBool: boolean = false;
|
||||||
try {
|
try {
|
||||||
plugins.fsExtra.readFileSync(filePath)
|
plugins.fsExtra.readFileSync(filePath);
|
||||||
fileExistsBool = true
|
fileExistsBool = true;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
fileExistsBool = false
|
fileExistsBool = false;
|
||||||
}
|
}
|
||||||
return fileExistsBool
|
return fileExistsBool;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param filePath
|
* @param filePath
|
||||||
* @returns {any}
|
* @returns {any}
|
||||||
*/
|
*/
|
||||||
export let fileExists = function(filePath){
|
export const fileExists = async (filePath): Promise<boolean> => {
|
||||||
let done = plugins.q.defer()
|
const done = plugins.smartpromise.defer<boolean>();
|
||||||
plugins.fs.access(filePath, plugins.fs.R_OK, function (err) {
|
plugins.fs.access(filePath, 4, (err) => {
|
||||||
err ? done.reject(err) : done.resolve()
|
err ? done.resolve(false) : done.resolve(true);
|
||||||
})
|
});
|
||||||
return done.promise
|
return done.promise;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if given path points to an existing directory
|
* Checks if given path points to an existing directory
|
||||||
*/
|
*/
|
||||||
export let isDirectory = function(pathArg): boolean{
|
export const isDirectory = (pathArg): boolean => {
|
||||||
return plugins.fsExtra.statSync(pathArg).isDirectory()
|
try {
|
||||||
}
|
return plugins.fsExtra.statSync(pathArg).isDirectory();
|
||||||
|
} catch (err) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if a given path points to an existing file
|
* Checks if a given path points to an existing file
|
||||||
*/
|
*/
|
||||||
export let isFile = function(pathArg): boolean{
|
export const isFile = (pathArg): boolean => {
|
||||||
return plugins.fsExtra.statSync(pathArg).isFile()
|
return plugins.fsExtra.statSync(pathArg).isFile();
|
||||||
}
|
};
|
||||||
|
|
||||||
/*===============================================================
|
/*===============================================================
|
||||||
============================ FS ACTIONS =========================
|
============================ FS ACTIONS =========================
|
||||||
@ -57,37 +62,56 @@ export let isFile = function(pathArg): boolean{
|
|||||||
/**
|
/**
|
||||||
* copies a file from A to B on the local disk
|
* copies a file from A to B on the local disk
|
||||||
*/
|
*/
|
||||||
export let copy = function(fromArg: string, toArg: string){
|
export const copy = async (fromArg: string, toArg: string): Promise<boolean> => {
|
||||||
let done = plugins.q.defer()
|
const done = plugins.smartpromise.defer<boolean>();
|
||||||
plugins.fsExtra.copy(fromArg,toArg,{},function(){
|
plugins.fsExtra.copy(fromArg, toArg, {}, (err) => {
|
||||||
done.resolve()
|
if (err) {
|
||||||
})
|
throw new Error(`Could not copy from ${fromArg} to ${toArg}: ${err}`);
|
||||||
return done.promise
|
}
|
||||||
}
|
done.resolve(true);
|
||||||
|
});
|
||||||
|
return done.promise;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* copies a file SYNCHRONOUSLY from A to B on the local disk
|
* copies a file SYNCHRONOUSLY from A to B on the local disk
|
||||||
*/
|
*/
|
||||||
export let copySync = function(fromArg: string,toArg: string): boolean{
|
export const copySync = (fromArg: string, toArg: string): boolean => {
|
||||||
plugins.fsExtra.copySync(fromArg,toArg)
|
plugins.fsExtra.copySync(fromArg, toArg);
|
||||||
return true
|
return true;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ensures that a directory is in place
|
* ensures that a directory is in place
|
||||||
*/
|
*/
|
||||||
export let ensureDir = (dirPathArg: string) => {
|
export const ensureDir = async (dirPathArg: string) => {
|
||||||
let done = plugins.q.defer()
|
await plugins.fsExtra.ensureDir(dirPathArg);
|
||||||
plugins.fsExtra.ensureDir(dirPathArg,done.resolve)
|
};
|
||||||
return done.promise
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ensures that a directory is in place
|
* ensures that a directory is in place
|
||||||
*/
|
*/
|
||||||
export let ensureDirSync = (dirPathArg: string) => {
|
export const ensureDirSync = (dirPathArg: string) => {
|
||||||
plugins.fsExtra.ensureDirSync(dirPathArg)
|
plugins.fsExtra.ensureDirSync(dirPathArg);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ensure an empty directory
|
||||||
|
* @executes ASYNC
|
||||||
|
*/
|
||||||
|
export const ensureEmptyDir = async (dirPathArg: string) => {
|
||||||
|
await plugins.fsExtra.ensureDir(dirPathArg);
|
||||||
|
await plugins.fsExtra.emptyDir(dirPathArg);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ensure an empty directory
|
||||||
|
* @executes SYNC
|
||||||
|
*/
|
||||||
|
export const ensureEmptyDirSync = (dirPathArg: string) => {
|
||||||
|
plugins.fsExtra.ensureDirSync(dirPathArg);
|
||||||
|
plugins.fsExtra.emptyDirSync(dirPathArg);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ensures that a file is on disk
|
* ensures that a file is on disk
|
||||||
@ -96,12 +120,9 @@ export let ensureDirSync = (dirPathArg: string) => {
|
|||||||
* @returns Promise<void>
|
* @returns Promise<void>
|
||||||
* @exec ASYNC
|
* @exec ASYNC
|
||||||
*/
|
*/
|
||||||
export let ensureFile = (filePathArg, initFileStringArg): plugins.q.Promise<void> => {
|
export const ensureFile = async (filePathArg, initFileStringArg): Promise<void> => {
|
||||||
let done = plugins.q.defer<void>()
|
ensureFileSync(filePathArg, initFileStringArg);
|
||||||
ensureFileSync(filePathArg, initFileStringArg)
|
};
|
||||||
done.resolve()
|
|
||||||
return done.promise
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ensures that a file is on disk
|
* ensures that a file is on disk
|
||||||
@ -110,240 +131,241 @@ export let ensureFile = (filePathArg, initFileStringArg): plugins.q.Promise<void
|
|||||||
* @returns Promise<void>
|
* @returns Promise<void>
|
||||||
* @exec SYNC
|
* @exec SYNC
|
||||||
*/
|
*/
|
||||||
export let ensureFileSync = (filePathArg: string, initFileStringArg: string): void => {
|
export const ensureFileSync = (filePathArg: string, initFileStringArg: string): void => {
|
||||||
if (fileExistsSync(filePathArg)) {
|
if (fileExistsSync(filePathArg)) {
|
||||||
return null
|
return null;
|
||||||
} else {
|
} else {
|
||||||
memory.toFsSync(initFileStringArg, filePathArg)
|
memory.toFsSync(initFileStringArg, filePathArg);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* removes a file or folder from local disk
|
* removes a file or folder from local disk
|
||||||
*/
|
*/
|
||||||
export let remove = function(pathArg: string): plugins.q.Promise<void> {
|
export const remove = async (pathArg: string): Promise<void> => {
|
||||||
let done = plugins.q.defer<void>()
|
await plugins.fsExtra.remove(pathArg);
|
||||||
plugins.fsExtra.remove(pathArg,function(){
|
};
|
||||||
done.resolve()
|
|
||||||
})
|
|
||||||
return done.promise
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* removes a file SYNCHRONOUSLY from local disk
|
* removes a file SYNCHRONOUSLY from local disk
|
||||||
*/
|
*/
|
||||||
export let removeSync = function(pathArg: string): boolean{
|
export const removeSync = (pathArg: string): void => {
|
||||||
plugins.fsExtra.removeSync(pathArg)
|
plugins.fsExtra.removeSync(pathArg);
|
||||||
return true
|
};
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* removes an array of filePaths from disk
|
* removes an array of filePaths from disk
|
||||||
*/
|
*/
|
||||||
export let removeMany = function(filePathArrayArg: string[]){
|
export const removeMany = async (filePathArrayArg: string[]) => {
|
||||||
let promiseArray: plugins.q.Promise<void>[] = []
|
const promiseArray: Array<Promise<void>> = [];
|
||||||
for (let filePath of filePathArrayArg) {
|
for (const filePath of filePathArrayArg) {
|
||||||
promiseArray.push(remove(filePath))
|
promiseArray.push(remove(filePath));
|
||||||
}
|
}
|
||||||
return plugins.q.all(promiseArray)
|
await Promise.all(promiseArray);
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* like removeFilePathArray but SYNCHRONOUSLY
|
* like removeFilePathArray but SYNCHRONOUSLY
|
||||||
*/
|
*/
|
||||||
export let removeManySync = function(filePathArrayArg: string[]): void {
|
export const removeManySync = (filePathArrayArg: string[]): void => {
|
||||||
for (let filePath of filePathArrayArg) {
|
for (const filePath of filePathArrayArg) {
|
||||||
removeSync(filePath)
|
removeSync(filePath);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
/*===============================================================
|
/*===============================================================
|
||||||
============================ Write/Read =========================
|
============================ Write/Read =========================
|
||||||
===============================================================*/
|
===============================================================*/
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param filePathArg
|
|
||||||
* @returns {*}
|
|
||||||
*/
|
|
||||||
export let toGulpStreamSync = function(filePathArg: string){
|
|
||||||
let stream = plugins.gulp.src(filePathArg)
|
|
||||||
return stream
|
|
||||||
}
|
|
||||||
|
|
||||||
export let toGulpDestSync = function(folderPathArg: string){
|
|
||||||
return plugins.gulp.dest(folderPathArg)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param filePathArg
|
* @param filePathArg
|
||||||
* @param fileTypeArg
|
* @param fileTypeArg
|
||||||
* @returns {any}
|
* @returns {any}
|
||||||
*/
|
*/
|
||||||
export let toObjectSync = function(filePathArg,fileTypeArg?) {
|
export const toObjectSync = (filePathArg, fileTypeArg?) => {
|
||||||
let fileString = plugins.fsExtra.readFileSync(filePathArg, 'utf8')
|
const fileString = plugins.fsExtra.readFileSync(filePathArg, 'utf8');
|
||||||
let fileType
|
let fileType;
|
||||||
fileTypeArg ? fileType = fileTypeArg : fileType = SmartfileInterpreter.filetype(filePathArg)
|
fileTypeArg ? (fileType = fileTypeArg) : (fileType = interpreter.filetype(filePathArg));
|
||||||
return SmartfileInterpreter.objectFile(fileString,fileType)
|
return interpreter.objectFile(fileString, fileType);
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* reads a file content to a String
|
* reads a file content to a String
|
||||||
* @param filePath
|
|
||||||
* @returns {string|Buffer|any}
|
|
||||||
*/
|
*/
|
||||||
export let toStringSync = function(filePath) {
|
export const toStringSync = (filePath: string): string => {
|
||||||
let fileString
|
const encoding = plugins.smartmime.getEncoding(filePath);
|
||||||
fileString = plugins.fsExtra.readFileSync(filePath, 'utf8')
|
let fileString: string | Buffer = plugins.fsExtra.readFileSync(filePath, encoding);
|
||||||
return fileString
|
if (Buffer.isBuffer(fileString)) {
|
||||||
}
|
fileString = fileString.toString('binary');
|
||||||
|
}
|
||||||
|
return fileString;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const toBufferSync = (filePath: string): Buffer => {
|
||||||
|
return plugins.fsExtra.readFileSync(filePath);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const fileTreeToHash = async (dirPathArg: string, miniMatchFilter: string) => {
|
||||||
|
const fileTreeObject = await fileTreeToObject(dirPathArg, miniMatchFilter);
|
||||||
|
let combinedString = '';
|
||||||
|
for (const smartfile of fileTreeObject) {
|
||||||
|
combinedString += smartfile.contentBuffer.toString();
|
||||||
|
}
|
||||||
|
const hash = await plugins.smarthash.sha256FromString(combinedString);
|
||||||
|
return hash;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* creates a smartfile array from a directory
|
||||||
* @param filePathArg
|
* @param dirPathArg the directory to start from
|
||||||
* @param options
|
* @param miniMatchFilter a minimatch filter of what files to include
|
||||||
* @returns {number}
|
|
||||||
*/
|
*/
|
||||||
export let toVinylSync = function(filePathArg,options = {}) {
|
export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: string) => {
|
||||||
return plugins.vinylFile.readSync(filePathArg,options)
|
// handle absolute miniMatchFilter
|
||||||
}
|
let dirPath: string;
|
||||||
|
if (plugins.path.isAbsolute(miniMatchFilter)) {
|
||||||
|
dirPath = '/';
|
||||||
|
} else {
|
||||||
|
dirPath = dirPathArg;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
const fileTree = await listFileTree(dirPath, miniMatchFilter);
|
||||||
* lets you reload files hot.
|
const smartfileArray: Smartfile[] = [];
|
||||||
* @param path
|
for (const filePath of fileTree) {
|
||||||
* @returns {any}
|
const readPath = ((): string => {
|
||||||
*/
|
if (!plugins.path.isAbsolute(filePath)) {
|
||||||
export let requireReload = function(path: string){
|
return plugins.path.join(dirPath, filePath);
|
||||||
return plugins.requireReload(path)
|
} else {
|
||||||
}
|
return filePath;
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
const fileContentString = toStringSync(readPath);
|
||||||
|
|
||||||
|
// push a read file as Smartfile
|
||||||
|
smartfileArray.push(
|
||||||
|
new Smartfile({
|
||||||
|
contentBuffer: Buffer.from(fileContentString),
|
||||||
|
base: dirPath,
|
||||||
|
path: filePath,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return smartfileArray;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lists Folders in a directory on local disk
|
* lists Folders in a directory on local disk
|
||||||
* @returns Promise
|
* @returns Promise with an array that contains the folder names
|
||||||
*/
|
*/
|
||||||
export let listFolders = function(pathArg: string,regexFilter?: RegExp){
|
export const listFolders = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
|
||||||
let done = plugins.q.defer()
|
return listFoldersSync(pathArg, regexFilter);
|
||||||
let folderArray = plugins.fsExtra.readdirSync(pathArg).filter(function(file) {
|
};
|
||||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isDirectory()
|
|
||||||
})
|
|
||||||
if (regexFilter) {
|
|
||||||
folderArray = folderArray.filter((fileItem) => {
|
|
||||||
return regexFilter.test(fileItem)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
done.resolve(folderArray)
|
|
||||||
return done.promise
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lists Folders SYNCHRONOUSLY in a directory on local disk
|
* lists Folders SYNCHRONOUSLY in a directory on local disk
|
||||||
* @returns an array with the folder names as strings
|
* @returns an array with the folder names as strings
|
||||||
*/
|
*/
|
||||||
export let listFoldersSync = function(pathArg: string,regexFilter?: RegExp): string[]{
|
export const listFoldersSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
||||||
let folderArray = plugins.fsExtra.readdirSync(pathArg).filter(function(file) {
|
let folderArray = plugins.fsExtra.readdirSync(pathArg).filter((file) => {
|
||||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isDirectory()
|
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isDirectory();
|
||||||
})
|
});
|
||||||
if (regexFilter) {
|
if (regexFilter) {
|
||||||
folderArray = folderArray.filter((fileItem) => {
|
folderArray = folderArray.filter((fileItem) => {
|
||||||
return regexFilter.test(fileItem)
|
return regexFilter.test(fileItem);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
return folderArray
|
return folderArray;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lists Files in a directory on local disk
|
* lists Files in a directory on local disk
|
||||||
* @returns Promise
|
* @returns Promise
|
||||||
*/
|
*/
|
||||||
export let listFiles = function(pathArg: string, regexFilter?: RegExp){
|
export const listFiles = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
|
||||||
let done = plugins.q.defer()
|
return listFilesSync(pathArg, regexFilter);
|
||||||
let fileArray = plugins.fsExtra.readdirSync(pathArg).filter(function(file) {
|
};
|
||||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile()
|
|
||||||
})
|
|
||||||
if (regexFilter) {
|
|
||||||
fileArray = fileArray.filter((fileItem) => {
|
|
||||||
return regexFilter.test(fileItem)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
done.resolve(fileArray)
|
|
||||||
return done.promise
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lists Files SYNCHRONOUSLY in a directory on local disk
|
* lists Files SYNCHRONOUSLY in a directory on local disk
|
||||||
* @returns an array with the folder names as strings
|
* @returns an array with the folder names as strings
|
||||||
*/
|
*/
|
||||||
export let listFilesSync = function(pathArg: string, regexFilter?: RegExp): string[]{
|
export const listFilesSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
||||||
let fileArray = plugins.fsExtra.readdirSync(pathArg).filter(function(file) {
|
let fileArray = plugins.fsExtra.readdirSync(pathArg).filter((file) => {
|
||||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile()
|
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile();
|
||||||
})
|
});
|
||||||
if (regexFilter) {
|
if (regexFilter) {
|
||||||
fileArray = fileArray.filter((fileItem) => {
|
fileArray = fileArray.filter((fileItem) => {
|
||||||
return regexFilter.test(fileItem)
|
return regexFilter.test(fileItem);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
return fileArray
|
return fileArray;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lists all items (folders AND files) in a directory on local disk
|
* lists all items (folders AND files) in a directory on local disk
|
||||||
* @returns Promise<string[]>
|
* @returns Promise<string[]>
|
||||||
*/
|
*/
|
||||||
export let listAllItems = function(pathArg: string, regexFilter?: RegExp): plugins.q.Promise<string[]> {
|
export const listAllItems = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
|
||||||
let done = plugins.q.defer<string[]>()
|
return listAllItemsSync(pathArg, regexFilter);
|
||||||
let allItmesArray = plugins.fsExtra.readdirSync(pathArg)
|
};
|
||||||
if (regexFilter) {
|
|
||||||
allItmesArray = allItmesArray.filter((fileItem) => {
|
|
||||||
return regexFilter.test(fileItem)
|
|
||||||
})
|
|
||||||
};
|
|
||||||
done.resolve(allItmesArray)
|
|
||||||
return done.promise
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lists all items (folders AND files) in a directory on local disk
|
* lists all items (folders AND files) in a directory on local disk
|
||||||
* @returns an array with the folder names as strings
|
* @returns an array with the folder names as strings
|
||||||
* @executes SYNC
|
* @executes SYNC
|
||||||
*/
|
*/
|
||||||
export let listAllItemsSync = function(pathArg: string, regexFilter?: RegExp): string[]{
|
export const listAllItemsSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
||||||
let allItmesArray = plugins.fsExtra.readdirSync(pathArg).filter(function(file) {
|
let allItmesArray = plugins.fsExtra.readdirSync(pathArg).filter((file) => {
|
||||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile()
|
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile();
|
||||||
})
|
});
|
||||||
if (regexFilter) {
|
if (regexFilter) {
|
||||||
allItmesArray = allItmesArray.filter((fileItem) => {
|
allItmesArray = allItmesArray.filter((fileItem) => {
|
||||||
return regexFilter.test(fileItem)
|
return regexFilter.test(fileItem);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
return allItmesArray
|
return allItmesArray;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lists a file tree using a miniMatch filter
|
* lists a file tree using a miniMatch filter
|
||||||
* note: if the miniMatch Filter is an absolute path, the cwdArg will be omitted
|
* note: if the miniMatch Filter is an absolute path, the cwdArg will be omitted
|
||||||
* @returns Promise<string[]> string array with the absolute paths of all matching files
|
* @returns Promise<string[]> string array with the absolute paths of all matching files
|
||||||
*/
|
*/
|
||||||
export let listFileTree = (dirPathArg: string, miniMatchFilter: string): plugins.q.Promise<string[]> => {
|
export const listFileTree = async (
|
||||||
let done = plugins.q.defer<string[]>()
|
dirPathArg: string,
|
||||||
|
miniMatchFilter: string,
|
||||||
|
absolutePathsBool: boolean = false
|
||||||
|
): Promise<string[]> => {
|
||||||
|
const done = plugins.smartpromise.defer<string[]>();
|
||||||
|
|
||||||
// handle absolute miniMatchFilter
|
// handle absolute miniMatchFilter
|
||||||
let dirPath: string
|
let dirPath: string;
|
||||||
if(plugins.path.isAbsolute(miniMatchFilter)){
|
if (plugins.path.isAbsolute(miniMatchFilter)) {
|
||||||
dirPath = '/'
|
dirPath = '/';
|
||||||
} else {
|
} else {
|
||||||
dirPath = dirPathArg
|
dirPath = dirPathArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
let options = {
|
const options = {
|
||||||
cwd: dirPath
|
cwd: dirPath,
|
||||||
|
nodir: true,
|
||||||
|
dot: true,
|
||||||
|
};
|
||||||
|
plugins.glob(miniMatchFilter, options, (err, files: string[]) => {
|
||||||
|
if (err) {
|
||||||
|
console.log(err);
|
||||||
|
done.reject(err);
|
||||||
}
|
}
|
||||||
plugins.glob(miniMatchFilter,options,(err,files: string[]) => {
|
done.resolve(files);
|
||||||
if (err) {
|
});
|
||||||
console.log(err)
|
|
||||||
done.reject(err)
|
let fileList = await done.promise;
|
||||||
}
|
if (absolutePathsBool) {
|
||||||
done.resolve(files)
|
fileList = fileList.map((filePath) => {
|
||||||
})
|
return plugins.path.resolve(plugins.path.join(dirPath, filePath));
|
||||||
return done.promise
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return fileList;
|
||||||
|
};
|
||||||
|
@ -1,22 +1,20 @@
|
|||||||
import 'typings-global'
|
import * as plugins from './smartfile.plugins';
|
||||||
|
|
||||||
import plugins = require('./smartfile.plugins')
|
|
||||||
|
|
||||||
export let filetype = (pathArg: string): string => {
|
export let filetype = (pathArg: string): string => {
|
||||||
let extName = plugins.path.extname(pathArg)
|
const extName = plugins.path.extname(pathArg);
|
||||||
let fileType = extName.replace(/\.([a-z]*)/,'$1') // remove . form fileType
|
const fileType = extName.replace(/\.([a-z]*)/, '$1'); // remove . form fileType
|
||||||
return fileType
|
return fileType;
|
||||||
}
|
};
|
||||||
|
|
||||||
export let objectFile = (fileStringArg: string, fileTypeArg) => {
|
export let objectFile = (fileStringArg: string, fileTypeArg) => {
|
||||||
switch (fileTypeArg) {
|
switch (fileTypeArg) {
|
||||||
case 'yml' :
|
case 'yml':
|
||||||
case 'yaml':
|
case 'yaml':
|
||||||
return plugins.yaml.safeLoad(fileStringArg)
|
return plugins.yaml.safeLoad(fileStringArg);
|
||||||
case 'json':
|
case 'json':
|
||||||
return JSON.parse(fileStringArg)
|
return JSON.parse(fileStringArg);
|
||||||
default:
|
default:
|
||||||
plugins.beautylog.error('file type ' + fileTypeArg.blue + ' not supported')
|
console.error('file type ' + fileTypeArg.blue + ' not supported');
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
@ -1,46 +1,8 @@
|
|||||||
import 'typings-global'
|
import plugins = require('./smartfile.plugins');
|
||||||
|
import { Smartfile } from './smartfile.classes.smartfile';
|
||||||
|
import * as smartfileFs from './smartfile.fs';
|
||||||
|
|
||||||
import plugins = require('./smartfile.plugins')
|
import SmartfileInterpreter = require('./smartfile.interpreter');
|
||||||
import SmartfileInterpreter = require('./smartfile.interpreter')
|
|
||||||
import vinyl = require('vinyl')
|
|
||||||
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[]|plugins.vinyl|plugins.vinyl[],baseArg: string = '/'){
|
|
||||||
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) :
|
|
||||||
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
|
* converts file to Object
|
||||||
@ -48,92 +10,85 @@ export let toGulpStream = function(fileArg: string|string[]|plugins.vinyl|plugin
|
|||||||
* @param fileTypeArg
|
* @param fileTypeArg
|
||||||
* @returns {any|any}
|
* @returns {any|any}
|
||||||
*/
|
*/
|
||||||
export let toObject = function(fileStringArg: string,fileTypeArg: string){
|
export let toObject = function (fileStringArg: string, fileTypeArg: string) {
|
||||||
return SmartfileInterpreter.objectFile(fileStringArg,fileTypeArg)
|
return SmartfileInterpreter.objectFile(fileStringArg, fileTypeArg);
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface IToFsOptions {
|
||||||
|
respectRelative?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* takes a string and converts it to vinyl file
|
* writes string or Smartfile to disk.
|
||||||
* @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 = ''
|
|
||||||
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
|
|
||||||
*/
|
|
||||||
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))
|
|
||||||
}
|
|
||||||
return vinylArray
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* takes a vinylFile object and converts it to String
|
|
||||||
*/
|
|
||||||
export let toStringSync = function(fileArg: plugins.vinyl){
|
|
||||||
return fileArg.contents.toString('utf8')
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* writes string or vinyl file to disk.
|
|
||||||
* @param fileArg
|
* @param fileArg
|
||||||
* @param fileNameArg
|
* @param fileNameArg
|
||||||
* @param fileBaseArg
|
* @param fileBaseArg
|
||||||
*/
|
*/
|
||||||
export let toFs = function(fileContentArg: string|vinyl,filePathArg){
|
export let toFs = async (
|
||||||
let done = plugins.q.defer()
|
fileContentArg: string | Buffer | Smartfile,
|
||||||
|
filePathArg: string,
|
||||||
|
optionsArg: IToFsOptions = {}
|
||||||
|
) => {
|
||||||
|
const done = plugins.smartpromise.defer();
|
||||||
|
|
||||||
// function checks to abort if needed
|
// check args
|
||||||
if (!fileContentArg || !filePathArg) {
|
if (!fileContentArg || !filePathArg) {
|
||||||
throw new Error('expected valid arguments')
|
throw new Error('expected valid arguments');
|
||||||
|
}
|
||||||
|
|
||||||
|
// prepare actual write action
|
||||||
|
let fileContent: string | Buffer;
|
||||||
|
let fileEncoding: 'utf8' | 'binary' = 'utf8';
|
||||||
|
let filePath: string = filePathArg;
|
||||||
|
|
||||||
|
// handle Smartfile
|
||||||
|
if (fileContentArg instanceof Smartfile) {
|
||||||
|
fileContent = fileContentArg.contentBuffer;
|
||||||
|
// handle options
|
||||||
|
if (optionsArg.respectRelative) {
|
||||||
|
filePath = plugins.path.join(filePath, fileContentArg.path);
|
||||||
}
|
}
|
||||||
|
} else if (Buffer.isBuffer(fileContentArg)) {
|
||||||
|
fileContent = fileContentArg;
|
||||||
|
fileEncoding = 'binary';
|
||||||
|
} else if (typeof fileContentArg === 'string') {
|
||||||
|
fileContent = fileContentArg;
|
||||||
|
} else {
|
||||||
|
throw new Error('fileContent is neither string nor Smartfile');
|
||||||
|
}
|
||||||
|
await smartfileFs.ensureDir(plugins.path.parse(filePath).dir);
|
||||||
|
plugins.fsExtra.writeFile(filePath, fileContent, { encoding: fileEncoding }, done.resolve);
|
||||||
|
return await done.promise;
|
||||||
|
};
|
||||||
|
|
||||||
// prepare actual write action
|
/**
|
||||||
let fileString: string
|
* writes a string or a Smartfile to disk synchronously, only supports string
|
||||||
let filePath: string = filePathArg;
|
* @param fileArg
|
||||||
if (fileContentArg instanceof plugins.vinyl) {
|
* @param filePathArg
|
||||||
fileString = toStringSync(fileContentArg)
|
*/
|
||||||
} else if (typeof fileContentArg === 'string') {
|
export const toFsSync = (fileArg: string, filePathArg: string) => {
|
||||||
fileString = fileContentArg
|
// function checks to abort if needed
|
||||||
}
|
if (!fileArg || !filePathArg) {
|
||||||
plugins.fsExtra.writeFile(filePath,fileString,'utf8',done.resolve)
|
throw new Error('expected a valid arguments');
|
||||||
return done.promise
|
}
|
||||||
}
|
|
||||||
|
|
||||||
export let toFsSync = function(fileArg,filePathArg: string){
|
// prepare actual write action
|
||||||
// function checks to abort if needed
|
let fileString: string;
|
||||||
if (!fileArg || !filePathArg) {
|
const filePath: string = filePathArg;
|
||||||
throw new Error('expected a valid arguments')
|
|
||||||
}
|
|
||||||
|
|
||||||
// prepare actual write action
|
if (typeof fileArg !== 'string') {
|
||||||
let fileString: string
|
throw new Error('fileArg is not of type String.');
|
||||||
let filePath: string = filePathArg
|
} else if (typeof fileArg === 'string') {
|
||||||
|
fileString = fileArg;
|
||||||
if (fileArg instanceof plugins.vinyl) {
|
}
|
||||||
fileString = toStringSync(fileArg)
|
plugins.fsExtra.writeFileSync(filePath, fileString, { encoding: 'utf8' });
|
||||||
} else if (typeof fileArg === 'string') {
|
};
|
||||||
fileString = fileArg
|
|
||||||
}
|
|
||||||
plugins.fsExtra.writeFileSync(filePath,fileString,'utf8')
|
|
||||||
}
|
|
||||||
|
|
||||||
|
export let smartfileArrayToFs = async (smartfileArrayArg: Smartfile[], dirArg: string) => {
|
||||||
|
await smartfileFs.ensureDir(dirArg);
|
||||||
|
for (const smartfile of smartfileArrayArg) {
|
||||||
|
await toFs(smartfile, dirArg, {
|
||||||
|
respectRelative: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@ -1,17 +1,23 @@
|
|||||||
import 'typings-global'
|
// node native scope
|
||||||
export import beautylog = require('beautylog')
|
import * as fs from 'fs';
|
||||||
export import fs = require('fs')
|
import * as path from 'path';
|
||||||
export import fsExtra = require('fs-extra')
|
|
||||||
export let gulp = require('gulp')
|
export { fs, path };
|
||||||
export let glob = require('glob')
|
|
||||||
export let g = {
|
// @pushrocks scope
|
||||||
remoteSrc: require('gulp-remote-src')
|
import * as smartfileInterfaces from '@pushrocks/smartfile-interfaces';
|
||||||
}
|
import * as smarthash from '@pushrocks/smarthash';
|
||||||
export import path = require('path')
|
import * as smartjson from '@pushrocks/smartjson';
|
||||||
export import q = require('q')
|
import * as smartmime from '@pushrocks/smartmime';
|
||||||
export let request = require('request')
|
import * as smartpath from '@pushrocks/smartpath';
|
||||||
export let requireReload = require('require-reload')
|
import * as smartpromise from '@pushrocks/smartpromise';
|
||||||
export import smartpath = require('smartpath')
|
import * as smartrequest from '@pushrocks/smartrequest';
|
||||||
export import vinyl = require('vinyl')
|
|
||||||
export let vinylFile = require('vinyl-file')
|
export { smartfileInterfaces, smarthash, smartjson, smartmime, smartpath, smartpromise, smartrequest };
|
||||||
export let yaml = require('js-yaml')
|
|
||||||
|
// third party scope
|
||||||
|
import * as fsExtra from 'fs-extra';
|
||||||
|
import glob from 'glob';
|
||||||
|
import yaml from 'js-yaml';
|
||||||
|
|
||||||
|
export { fsExtra, glob, yaml };
|
||||||
|
@ -1,64 +1,51 @@
|
|||||||
import 'typings-global'
|
import plugins = require('./smartfile.plugins');
|
||||||
import plugins = require('./smartfile.plugins')
|
import SmartfileInterpreter = require('./smartfile.interpreter');
|
||||||
import SmartfileInterpreter = require('./smartfile.interpreter')
|
|
||||||
|
|
||||||
export let toFs = function(from: string,toPath: string) {
|
/* export let toFs = function (from: string, toPath: string) {
|
||||||
let done = plugins.q.defer()
|
let done = plugins.q.defer()
|
||||||
let stream = plugins.request(from).pipe(plugins.fsExtra.createWriteStream(toPath))
|
let stream = plugins.smartrequest(from).pipe(plugins.fsExtra.createWriteStream(toPath))
|
||||||
stream.on('finish',function(){
|
stream.on('finish', function () {
|
||||||
done.resolve(toPath)
|
done.resolve(toPath)
|
||||||
})
|
})
|
||||||
return done.promise
|
return done.promise
|
||||||
}
|
} */
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param filePathArg
|
|
||||||
* @returns {*}
|
|
||||||
*/
|
|
||||||
export let toGulpStreamSync = function(filePathArg: string,baseArg: string){
|
|
||||||
let stream = plugins.g.remoteSrc(filePathArg, {
|
|
||||||
base: baseArg
|
|
||||||
})
|
|
||||||
return stream
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param fromArg
|
* @param fromArg
|
||||||
* @returns {any}
|
* @returns {any}
|
||||||
*/
|
*/
|
||||||
export let toObject = function(fromArg: string){
|
export let toObject = (fromArg: string) => {
|
||||||
let done = plugins.q.defer()
|
const done = plugins.smartpromise.defer();
|
||||||
plugins.request.get(fromArg, function (error, response, bodyString) {
|
plugins.smartrequest
|
||||||
let returnObject
|
.request(fromArg, {
|
||||||
if (!error && response.statusCode === 200) {
|
method: 'get',
|
||||||
returnObject = SmartfileInterpreter.objectFile(bodyString,SmartfileInterpreter.filetype(fromArg))
|
|
||||||
done.resolve(returnObject)
|
|
||||||
} else {
|
|
||||||
console.log('could not get remote file from ' + fromArg)
|
|
||||||
returnObject = undefined
|
|
||||||
done.reject(returnObject)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
return done.promise
|
.then((res: any) => {
|
||||||
}
|
if (res.statusCode === 200) {
|
||||||
|
done.resolve(res.body);
|
||||||
|
} else {
|
||||||
|
console.log('could not get remote file from ' + fromArg);
|
||||||
|
done.reject(new Error('could not get remote file from ' + fromArg));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return done.promise;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param fromArg
|
* @param fromArg
|
||||||
* @returns {any}
|
* @returns {any}
|
||||||
*/
|
*/
|
||||||
export let toString = (fromArg: string) => {
|
export let toString = (fromArg: string): Promise<string> => {
|
||||||
let done = plugins.q.defer()
|
const done = plugins.smartpromise.defer<string>();
|
||||||
plugins.request.get(fromArg, function (error, response, bodyString) {
|
plugins.smartrequest.getBinary(fromArg).then((res: any) => {
|
||||||
if (!error && response.statusCode === 200) {
|
if (res.statusCode === 200) {
|
||||||
done.resolve(bodyString)
|
const encoding = plugins.smartmime.getEncoding(fromArg);
|
||||||
} else {
|
done.resolve(res.body.toString(encoding));
|
||||||
plugins.beautylog.error('could not get remote file from ' + fromArg)
|
} else {
|
||||||
bodyString = undefined
|
done.reject(new Error('could not get remote file from ' + fromArg));
|
||||||
done.reject(bodyString)
|
}
|
||||||
}
|
});
|
||||||
})
|
return done.promise;
|
||||||
return done.promise
|
};
|
||||||
}
|
|
||||||
|
8
tsconfig.json
Normal file
8
tsconfig.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"target": "ES2017",
|
||||||
|
"moduleResolution": "node"
|
||||||
|
}
|
||||||
|
}
|
16
tslint.json
16
tslint.json
@ -1,3 +1,17 @@
|
|||||||
{
|
{
|
||||||
"extends": "tslint-config-standard"
|
"extends": ["tslint:latest", "tslint-config-prettier"],
|
||||||
|
"rules": {
|
||||||
|
"semicolon": [true, "always"],
|
||||||
|
"no-console": false,
|
||||||
|
"ordered-imports": false,
|
||||||
|
"object-literal-sort-keys": false,
|
||||||
|
"member-ordering": {
|
||||||
|
"options":{
|
||||||
|
"order": [
|
||||||
|
"static-method"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"defaultSeverity": "warning"
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user