Compare commits

...

228 Commits

Author SHA1 Message Date
b3ce66167e 7.0.10 2020-03-15 18:58:46 +00:00
c7f800fc88 fix(core): update 2020-03-15 18:58:46 +00:00
d8f4b011b7 7.0.9 2020-03-04 16:31:14 +00:00
b4add67f37 fix(core): update 2020-03-04 16:31:13 +00:00
f86f053bd5 7.0.8 2020-02-07 21:00:54 +00:00
a78ca67b43 fix(core): update 2020-02-07 21:00:54 +00:00
b1bedd0f54 7.0.7 2020-02-07 21:00:05 +00:00
ec58f7ac55 fix(core): update 2020-02-07 21:00:04 +00:00
80743576ad 7.0.6 2019-09-29 16:43:32 +02:00
32a6db645d fix(core): update 2019-09-29 16:43:31 +02:00
45dfa16ab7 7.0.5 2019-09-27 11:00:17 +02:00
4fc4cda786 fix(core): update 2019-09-27 11:00:17 +02:00
f889664e4d 7.0.4 2019-06-27 10:42:35 +02:00
f4129c04b2 fix(core): update 2019-06-27 10:42:35 +02:00
c6280eb6fc 7.0.3 2019-06-26 21:17:59 +02:00
4095738c6a fix(core): update 2019-06-26 21:17:58 +02:00
6170b37d29 7.0.2 2019-04-08 16:39:41 +02:00
4c23992681 fix(core): update 2019-04-08 16:39:41 +02:00
77c88f09cd 7.0.1 2019-04-08 16:36:21 +02:00
469a454fa6 fix(core): update dependencies 2019-04-08 16:36:21 +02:00
15044149f2 7.0.0 2019-02-17 21:07:23 +01:00
c92b759432 BREAKING CHANGE(smartfile.fs.fileExists now returns a Promise<boolean>): update 2019-02-17 21:07:22 +01:00
9b8f055ec2 6.0.12 2019-01-27 03:11:11 +01:00
69433b242b fix(core): update 2019-01-27 03:11:10 +01:00
db1d2acb47 6.0.11 2018-11-22 23:38:06 +01:00
920552ea23 fix(fs.listFolders): fix 2018-11-22 23:38:05 +01:00
dd05708f28 6.0.10 2018-11-22 23:26:28 +01:00
d97abe443d fix(snyk): add .snyk file 2018-11-22 23:26:27 +01:00
818767b7cc 6.0.9 2018-11-22 23:23:26 +01:00
52367f5c1a fix(fs.listFolders()): fix retuen type 2018-11-22 23:23:26 +01:00
b6b2101054 6.0.8 2018-08-19 21:21:27 +02:00
e322a41c45 fix(CI): update testing framework 2018-08-19 21:21:26 +02:00
f5e2c0c7d7 6.0.7 2018-08-19 17:10:27 +02:00
6733a156b8 fix(dependencies): update 2018-08-19 17:10:27 +02:00
ebac45a152 6.0.6 2018-08-08 22:22:48 +02:00
92ac410b96 fix(dependencies): update dependencies to latest standards 2018-08-08 22:22:47 +02:00
078bdda803 6.0.5 2018-08-06 09:37:10 +02:00
7b87adf3d9 fix(core): switch from npmts to @gitzone/tsbuild for bulding the module 2018-08-06 09:37:09 +02:00
908db4d847 6.0.4 2018-08-06 00:38:03 +02:00
87d047af42 fix(CI): switch to new testing framework 2018-08-06 00:38:02 +02:00
610a70079d 6.0.3 2018-07-04 00:59:42 +02:00
2c24cdc9f4 update to latest standards 2018-07-04 00:59:39 +02:00
459bd662f4 6.0.2 2018-07-03 08:59:00 +02:00
0613b7c3ed fix(README): update name 2018-07-03 08:59:00 +02:00
d78ee87a82 6.0.1 2018-07-03 08:55:10 +02:00
fadf8782df fix(package.json): fix private setting to be false 2018-07-03 08:55:09 +02:00
8fcdc5ce44 6.0.0 2018-07-03 08:53:30 +02:00
878da9ff3a 5.0.0 2018-07-03 00:15:01 +02:00
168136bebb BREAKING CHANGE(scope): switch to pushrocks scope 2018-07-03 00:15:00 +02:00
16cecbefac 4.2.28 2018-02-16 23:12:17 +01:00
24b890956e remove typings-global 2018-02-16 23:12:14 +01:00
fe73e8edf7 4.2.27 2018-02-16 21:57:48 +01:00
5b2089044d implement Smartfile.write 2018-02-16 21:57:44 +01:00
9fa98c3804 update ci 2017-09-29 14:40:28 +02:00
f49c5af339 4.2.26 2017-09-22 12:39:32 +02:00
61a6cfd452 update to allow failure on windows for now 2017-09-22 12:39:27 +02:00
769a1a707e 4.2.25 2017-09-21 16:28:31 +02:00
0408cff3fc update ci 2017-09-21 16:28:27 +02:00
533d71a6cd update ci 2017-09-21 16:24:23 +02:00
b3fd13506c add windows test 2017-09-21 16:19:10 +02:00
4052337626 4.2.24 2017-09-21 16:15:36 +02:00
d823229bee fix CI 2017-09-21 16:15:32 +02:00
5bdc6e1dc9 4.2.23 2017-09-21 16:14:08 +02:00
625f540978 update ci 2017-09-21 16:13:17 +02:00
459d2531b4 4.2.22 2017-09-21 16:12:49 +02:00
b5993560b1 update ci 2017-09-21 16:12:46 +02:00
b800957f19 add appveyor 2017-09-21 16:12:02 +02:00
d79e1180d8 4.2.21 2017-09-21 15:39:43 +02:00
ac99ecf743 update dependencies 2017-09-21 15:39:38 +02:00
897a46e12d 4.2.20 2017-08-02 13:16:11 +02:00
64219f8f09 fix readPath is not defined 2017-08-02 13:16:07 +02:00
42c6c1eec5 4.2.19 2017-08-02 13:10:32 +02:00
ef3ca28a66 fix #4 2017-08-02 13:10:30 +02:00
3beff3320c 4.2.18 2017-07-30 22:53:56 +02:00
0343287775 update smartfile to latest npmts 2017-07-30 22:53:54 +02:00
e4180022b1 4.2.17 2017-05-28 00:12:07 +02:00
7909bd1a38 fix filename updating for smartfile 2017-05-28 00:12:02 +02:00
495c3afdc3 4.2.16 2017-05-27 23:47:44 +02:00
73ad2d6193 update 2017-05-27 23:47:39 +02:00
f5ffb7fc67 4.2.15 2017-05-27 02:54:25 +02:00
36364bb490 listFileTree now includes dots 2017-05-27 02:54:22 +02:00
52f8fd2469 4.2.14 2017-05-27 02:05:34 +02:00
65dda3bcf1 improve subdirectory handling when writing fileTrees 2017-05-27 02:05:31 +02:00
d29dcc5a1c 4.2.13 2017-05-27 01:07:35 +02:00
d22e0cde8f do not accept directories in fileTree 2017-05-27 01:07:32 +02:00
c8a21e8228 4.2.12 2017-05-26 14:47:45 +02:00
72bb3f33ac now writes smartfile arrays to disk 2017-05-26 14:47:41 +02:00
7694cc9c08 update tslint 2017-05-07 23:16:25 +02:00
679c870229 4.2.11 2017-05-07 23:01:00 +02:00
30bc489822 add Smartfile.parsedPath 2017-05-07 23:00:56 +02:00
5493d3cd5d 4.2.10 2017-05-07 20:51:02 +02:00
bd50c122eb fix isDirectory() to return false instead of failing 2017-05-07 20:50:59 +02:00
51f9d76a64 4.2.9 2017-05-02 00:07:43 +02:00
c2f809f9cf revert false assumption 2017-05-02 00:07:39 +02:00
9f311984ac 4.2.8 2017-05-01 23:38:59 +02:00
7515ecf9ce toStringSynv now creates normal strings 2017-05-01 23:38:56 +02:00
fb9766e93b 4.2.7 2017-05-01 22:27:24 +02:00
9cfd147fdc update smartfile cwd 2017-05-01 22:27:15 +02:00
18ff99aef7 4.2.6 2017-05-01 22:07:31 +02:00
46b1151201 update smartfile relative path handling 2017-05-01 22:07:25 +02:00
8e19586e47 4.2.5 2017-05-01 19:49:38 +02:00
9fc581b866 update 2017-05-01 19:49:34 +02:00
dcc85a56b8 4.2.4 2017-04-30 18:13:20 +02:00
4899d454eb added tests for Smartfile instance 2017-04-30 18:13:17 +02:00
9d02fccc01 4.2.3 2017-04-30 15:37:36 +02:00
a5b24a7c33 update fileTreeToObject method 2017-04-30 15:37:34 +02:00
06fb0acd52 4.2.2 2017-04-30 15:12:37 +02:00
97bf5ff74b improve creation of Smartfiles 2017-04-30 15:12:35 +02:00
531f169c11 update yarn lock 2017-04-29 23:07:13 +02:00
e25675cc49 4.2.1 2017-04-29 17:20:15 +02:00
32cdac5b38 fix Smartfile class 2017-04-29 17:20:09 +02:00
7457093476 update docs 2017-04-29 16:57:23 +02:00
f560b6b7bb 4.2.0 2017-04-29 16:50:22 +02:00
ed01ebeee8 handle gulp in seperate module 2017-04-29 16:50:06 +02:00
7eed9dd6d3 fix 2017-04-28 11:32:05 +02:00
d9852e18a5 4.1.10 2017-04-28 11:28:29 +02:00
0be281746d update tests 2017-04-28 11:28:11 +02:00
6ac60cb3a5 Merge branch 'master' into 'master'
update to latest standards

See merge request !2
2017-04-28 09:04:08 +00:00
eb3c720d4e update to latest standards 2017-04-27 16:48:08 +02:00
c29084f000 update ci 2017-03-15 21:57:42 +01:00
b53240a2ea 4.1.9 2017-03-15 20:45:59 +01:00
2ba39cf2ac Merge branch 'master' into 'master'
fix smartfile.fs.fileTreeToObject

See merge request !1
2017-03-15 19:44:42 +00:00
675934d049 fix smartfile.fs.fileTreeToObject 2017-03-15 15:25:41 +01:00
dda4c1af07 update npmextra.json 2017-03-12 00:10:01 +01:00
214bae9931 4.1.8 2017-03-12 00:06:59 +01:00
fde809eb02 update typings, deps and ci 2017-03-12 00:06:56 +01:00
9f3a71f0b9 4.1.7 2017-03-04 21:10:50 +01:00
e9c9e95118 start implementation of Smartfile class 2017-03-04 21:10:46 +01:00
943a0c30c2 update README 2017-02-23 01:03:21 +01:00
2dad3707ee updated coverage regex 2017-02-23 00:59:45 +01:00
cd35d110a9 new .gitlab-ci.yml 2017-02-23 00:45:15 +01:00
257939462b fix README footer image 2017-02-18 17:02:40 +01:00
8104188b90 4.1.6 2017-02-18 17:01:56 +01:00
02842f1d0f replace request with smartrequest 2017-02-18 17:01:52 +01:00
f753c2c491 4.1.5 2017-02-05 15:47:48 +01:00
4ecb817bac update README 2017-02-05 15:47:08 +01:00
909fcd6e2a improve README 2017-02-03 15:14:30 +01:00
d1538f939d 4.1.4 2017-01-21 12:11:46 +01:00
3fef2a4ab9 remove beautylog dependency 2017-01-21 12:11:22 +01:00
77603ee736 4.1.3 2017-01-21 00:47:52 +01:00
353058ed73 switch to smartq 2017-01-21 00:47:48 +01:00
bf618512e2 4.1.2 2017-01-01 03:16:23 +01:00
b276c5639d add new ci file 2017-01-01 03:16:18 +01:00
779c62dcbb 4.1.1 2017-01-01 02:46:02 +01:00
3e1101c5e1 add ensureEmptyDir() and ensureEmptyDirSync() 2017-01-01 02:45:53 +01:00
395504127c 4.1.0 2016-10-27 18:55:22 +02:00
6dee92a3df remove gulp dependency 2016-10-27 18:55:18 +02:00
0ba3c1794e 4.0.24 2016-09-30 16:38:27 +02:00
0a810a3ac1 some style improvement 2016-09-30 16:38:24 +02:00
fc23f221eb 4.0.23 2016-09-30 16:16:15 +02:00
cfcd1f7aaf fix absolute pathing 2016-09-30 16:16:11 +02:00
2cb8c5117a 4.0.22 2016-09-29 14:17:49 +02:00
2c52dec8ea add removeMany and removeManySync 2016-09-29 14:17:46 +02:00
1fdd492eff 4.0.21 2016-09-24 21:42:49 +02:00
38354d2944 add ensureFile and ensureFileSync 2016-09-24 21:42:45 +02:00
760913bad3 4.0.20 2016-09-20 17:56:52 +02:00
f7b8fe5498 now adhering to standard js 2016-09-20 17:56:49 +02:00
37fbf9a409 update 2016-09-20 12:20:46 +02:00
49aba4c85f 4.0.19 2016-09-18 20:09:32 +02:00
37d81fa4c6 improve README 2016-09-18 20:09:17 +02:00
0256166c2f 4.0.18 2016-09-18 12:26:59 +02:00
bef2bd6b3a add vinyl typings 2016-09-18 12:26:43 +02:00
759e1655da 4.0.17 2016-09-17 23:11:58 +02:00
d732d1ba97 4.0.16 2016-09-17 23:11:44 +02:00
eeab2cf0cd 4.0.15 2016-09-02 16:31:50 +02:00
ab76cae75e update 2016-09-02 16:31:39 +02:00
f39daca6aa 4.0.13 2016-08-03 12:25:37 +02:00
e70db71ec4 update type versions 2016-08-03 12:25:15 +02:00
50ef41d5d4 add npm_registry environment 2016-07-20 02:34:14 +02:00
2a417ba18f add npmdocker section to npmextra.json 2016-07-20 02:32:02 +02:00
3516189940 update test js 2016-07-20 02:27:05 +02:00
10e3628a89 4.0.12 2016-07-19 20:28:33 +02:00
86eafe4568 update typings 2016-07-19 20:28:28 +02:00
fddde78b92 4.0.11 2016-07-17 17:36:43 +02:00
2a365b04a6 switched to npmextra for npmts config 2016-07-17 17:36:38 +02:00
df1d82cb7c switched to ES6 and updated deps 2016-07-17 17:34:15 +02:00
d20742f881 fix some things 2016-07-01 06:07:58 +02:00
db2a0c2992 4.0.10 2016-07-01 05:14:37 +02:00
7d806f313b remove @types/gulp 2016-07-01 05:14:16 +02:00
ff2e34696a 4.0.9 2016-07-01 01:38:57 +02:00
23188dfe3f now has fileTree function 2016-07-01 01:37:48 +02:00
38f10e0d04 4.0.8 2016-06-28 10:00:03 +02:00
2e2b8351f8 fix regex filter 2016-06-28 09:59:59 +02:00
8c386ee91c remove tyings.json 2016-06-28 08:48:47 +02:00
9828689f31 4.0.7 2016-06-28 08:40:25 +02:00
8205da5284 add folder lists array and make them filterable through regex 2016-06-28 08:40:22 +02:00
2fc132ab20 4.0.6 2016-06-28 06:57:54 +02:00
e948d08f2e add smartfile.fs.ensureDir 2016-06-28 06:57:51 +02:00
4362e94a88 4.0.5 2016-06-24 03:36:55 +02:00
fea9675b2a improve memory.toFs(Sync) 2016-06-24 03:36:51 +02:00
4522907af3 update README 2016-06-23 19:40:37 +02:00
163eb5a70c 4.0.4 2016-06-23 19:02:39 +02:00
fa5371a6bd update metadata 2016-06-23 19:02:34 +02:00
5ff7f8c3ac 4.0.3 2016-06-23 18:42:42 +02:00
0c49bbd4b2 4.0.2 2016-06-23 18:41:52 +02:00
f2e2a22a57 add gitlab-ci.yml 2016-06-23 18:41:45 +02:00
6ae30110f8 4.0.1 2016-06-23 18:39:06 +02:00
7b4626586c rename some actions 2016-06-23 18:39:02 +02:00
ef027d32c7 4.0.0 2016-06-23 18:32:04 +02:00
f5e89c57e5 big consolidation 2016-06-23 18:31:55 +02:00
d02e59a829 restructure 2016-06-23 17:42:08 +02:00
44f3d3597f add badge 2016-05-23 08:26:02 +02:00
322335f2e5 add appveyor.yml 2016-05-23 08:24:17 +02:00
c0b5e2805f 3.0.10 2016-05-23 08:15:53 +02:00
2599753877 now using typings that resolve with modules 2016-05-23 08:15:47 +02:00
66e9d29667 3.0.9 2016-05-23 05:39:26 +02:00
c57b81c901 fix test issue 2016-05-23 05:39:22 +02:00
ed6c730a6c 3.0.8 2016-05-23 04:11:58 +02:00
d77999e62d link typings correctly and update dependencies 2016-05-23 04:11:48 +02:00
8561cfcc5c 3.0.7 2016-05-20 00:32:16 +02:00
f3a81d60e9 updated structure and introduced new Smartfile class 2016-05-20 00:31:53 +02:00
96210fca9f update dependencies 2016-05-19 23:20:26 +02:00
60a2a7fc69 3.0.6 2016-05-01 23:20:06 +02:00
5d898baadf now has typings 2016-05-01 23:19:54 +02:00
9954ae4ba7 3.0.5 2016-04-14 20:34:02 +02:00
4b1f3d234b now has get.folders() and get.foldersSync function 2016-04-14 20:33:58 +02:00
aed2c92b75 added stable to travis.yml 2016-04-09 22:52:47 +02:00
cb805898c9 3.0.4 2016-04-09 22:51:35 +02:00
c09fe29d99 added memory to object function 2016-04-09 22:51:30 +02:00
a787836e56 added toObject function to memory module 2016-04-07 23:38:24 +02:00
287c2fa99f 3.0.3 2016-04-05 01:00:23 +02:00
111b70aefb updated deps 2016-04-05 01:00:23 +02:00
be91e22447 3.0.2 2016-04-05 00:37:15 +02:00
a337663830 now using carets 2016-04-05 00:37:10 +02:00
2cbb14c515 3.0.1 2016-04-05 00:36:23 +02:00
68cc85b684 update deps 2016-04-05 00:36:19 +02:00
7e875212b5 3.0.0 2016-04-05 00:17:33 +02:00
372e00597c update deps 2016-04-05 00:17:08 +02:00
52 changed files with 3212 additions and 1139 deletions

24
.gitignore vendored
View File

@ -1,12 +1,20 @@
node_modules/
.settings/
.idea/
.nogit/
# artifacts
coverage/
docs/
public/
pages/
ts/*.js
ts/*.js.map
ts/typings/
# installs
node_modules/
test/temp/
# caches
.yarn/
.cache/
.rpt2_cache
# builds
dist/
dist_*/
# custom

127
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,127 @@
# gitzone ci_default
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
cache:
paths:
- .npmci_cache/
key: '$CI_BUILD_STAGE'
stages:
- security
- test
- release
- metadata
# ====================
# security stage
# ====================
mirror:
stage: security
script:
- npmci git mirror
tags:
- lossless
- docker
- notpriv
audit:
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=moderate
tags:
- lossless
- docker
- notpriv
# ====================
# test stage
# ====================
testStable:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- lossless
- docker
- priv
testBuild:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- lossless
- docker
- notpriv
release:
stage: release
script:
- npmci node install stable
- npmci npm publish
only:
- tags
tags:
- lossless
- docker
- notpriv
# ====================
# metadata stage
# ====================
codequality:
stage: metadata
allow_failure: true
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
View File

@ -0,0 +1,4 @@
# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
version: v1.13.1
ignore: {}
patch: {}

View File

@ -1,14 +0,0 @@
language: node_js
node_js:
- 4.2.4
deploy:
provider: npm
email: npm@lossless.digital
api_key:
secure: wIOQHE7Jbck2j5lcv1Rc8T9/1wbHNGLxqJ6pttNZ+hG1+w77TYnjNYuGtM2xQCXitXSFDoogU8MpiYieOQHYypFgJ6Ns8MTeKIzNJSnlOWdCSN/lVptscT8pyC6qD4IBAyi8m5F2HoGQR+IzcdDBPjXLaPbH7jn8hc9rNY+LNktmYOXfOr37P40pxYrf16GLwrkjQIK8pbkdIbNA0D0k3apTGqw+HsneN2D/O/zAYaB3ojm40ttgPAGYF5PO5t6uqIbPFgIPkMWsO1HbV6I+vOAuIf0KYUqnR/YZd5yFcxFt3c+bfyc8/LP4vy5FyKMLXHe4IXIjXPYetOSiVHgMMYaxawU51OqwIKO+87FJ1TdaVmacMFO0wagl2QS0ceQBn8KBUhljHu/fDInK82uy15Iddk44EhnTx1MIxxgH5WMM6aQB2vuqnViPghs4nA0Y/Dz2U69267fhvmZvEWWUndz058EksHdZsIt5WCqQErI/dWLXMGom94CuZv6nkoVHCw8CO5dqVvfqUFL7Qyw59kRbiUPItFVoiV8ptLUX9tnQ5xBukNRkFX34ViM9YvBRlGt5e//f+cWjUpXFvbrwkqusXArplpxIaUSsQKh7XaMB5DcZ5jDDdjKzIMDf6QWsMTU1rjfQS5ZS3eV5LPy0UlfpDGK28oK2/o8fM+yydVk=
on:
tags: true
repo: pushrocks/smartfile
notifications:
slack:
secure: f5Uss0z9RPl/QcA/DroB8loyE93aOYI6bqCkrsiUscmZtlv/TVQtT4dxqGA6uvcG6iTQDBi3Ul88dQxWkRm4IqbhY35/iMaV2dHW4FVYMAh8GQMbsfL2sALCcufxD9blw47awv3iFcwhV1EeyesscjgL0JIjduk96v/7G/6QIO2838M1lzlgtj+kRUkim8qkaEs1je3gRrhMUIjLuAdscMXyUKYFMjWo9ACSjVUl30R/ZNemb18itIja6i92GotreBgcfEMczvy58ovDC7xdJUsY8LjMI01DwY+WPRnI0tAhsuI8moBwwcdM4e3bAjKjucQRjO33O5bMWRZ6QCiYd0DnCEFyCPQLJ4GSy/tkD00n8ijLHAOSV3AH1zNbdK1EAdSPQXDvlI36KJn/2hyQLoitGHVUPr76ujJWP82ypO2tgIp3XQU0dJVCxDuHnwJO2+hjdI+gCPqxNTpjeujHx3UdkTGNRjuuf9dlZ/D08fApjYxy2fxItTqo3QjP/nrqvBXUOPP8yPHpjIT4H2t5Pr4SJjBGI6X4qhKyFj6s9rA/Xu1rL+45zu1C3uC3z+u3T9UwrbzJ/cZM6r6UQvQmUvIfBNaMlg4I/diQCDIPL+Rhop2nylY3IcHmJnk2itn7kOqj1tohCpFEml5pRuSZy4udWywkdtyBAsHWFLF7oiQ=

29
.vscode/launch.json vendored Normal file
View 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
View 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"]
}
}
}
}
}
}
]
}

View File

@ -1,6 +1,6 @@
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
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,13 +0,0 @@
# smartfile
make files easily accessible for processing in javascript.
## Status
[![Build Status](https://travis-ci.org/pushrocks/smartfile.svg?branch=master)](https://travis-ci.org/pushrocks/smartfile)
[![Dependency Status](https://david-dm.org/pushrocks/smartfile.svg)](https://david-dm.org/pushrocks/smartfile)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/smartfile/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/smartfile/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/smartfile/badges/code.svg)](https://www.bithound.io/github/pushrocks/smartfile)
[![codecov.io](https://codecov.io/github/pushrocks/smartfile/coverage.svg?branch=master)](https://codecov.io/github/pushrocks/smartfile?branch=master)
## Supported file types:
* .yml .yaml
* .json

22
dist/index.js vendored
View File

@ -1,22 +0,0 @@
/// <reference path="./typings/main.d.ts" />
"use strict";
var plugins = require("./smartfile.plugins");
var SmartfileChecks = require("./smartfile.checks");
var SmartfileFsaction = require("./smartfile.fsaction");
var SmartfileGet = require("./smartfile.get");
var SmartfileLocal = require("./smartfile.local");
var SmartfileMemory = require("./smartfile.memory");
var SmartfileRemote = require("./smartfile.remote");
var smartfile = {
fsaction: SmartfileFsaction,
fs: plugins.fs,
checks: SmartfileChecks,
get: SmartfileGet,
local: SmartfileLocal,
memory: SmartfileMemory,
remote: SmartfileRemote,
requireReload: SmartfileLocal.requireReload
};
module.exports = smartfile;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRDQUE0Qzs7QUFFNUMsSUFBTyxPQUFPLFdBQVcscUJBQXFCLENBQUMsQ0FBQztBQUNoRCxJQUFPLGVBQWUsV0FBVyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3ZELElBQU8saUJBQWlCLFdBQVcsc0JBQXNCLENBQUMsQ0FBQztBQUMzRCxJQUFPLFlBQVksV0FBVyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2pELElBQU8sY0FBYyxXQUFXLG1CQUFtQixDQUFDLENBQUM7QUFDckQsSUFBTyxlQUFlLFdBQVcsb0JBQW9CLENBQUMsQ0FBQztBQUN2RCxJQUFPLGVBQWUsV0FBVyxvQkFBb0IsQ0FBQyxDQUFDO0FBR3ZELElBQUksU0FBUyxHQUFPO0lBQ2hCLFFBQVEsRUFBRSxpQkFBaUI7SUFDM0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0lBQ2QsTUFBTSxFQUFFLGVBQWU7SUFDdkIsR0FBRyxFQUFFLFlBQVk7SUFDakIsS0FBSyxFQUFFLGNBQWM7SUFDckIsTUFBTSxFQUFFLGVBQWU7SUFDdkIsTUFBTSxFQUFFLGVBQWU7SUFDdkIsYUFBYSxFQUFFLGNBQWMsQ0FBQyxhQUFhO0NBQzlDLENBQUM7QUFFRixpQkFBUyxTQUFTLENBQUMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi90eXBpbmdzL21haW4uZC50c1wiIC8+XG5cbmltcG9ydCBwbHVnaW5zID0gcmVxdWlyZShcIi4vc21hcnRmaWxlLnBsdWdpbnNcIik7XG5pbXBvcnQgU21hcnRmaWxlQ2hlY2tzID0gcmVxdWlyZShcIi4vc21hcnRmaWxlLmNoZWNrc1wiKTtcbmltcG9ydCBTbWFydGZpbGVGc2FjdGlvbiA9IHJlcXVpcmUoXCIuL3NtYXJ0ZmlsZS5mc2FjdGlvblwiKTtcbmltcG9ydCBTbWFydGZpbGVHZXQgPSByZXF1aXJlKFwiLi9zbWFydGZpbGUuZ2V0XCIpO1xuaW1wb3J0IFNtYXJ0ZmlsZUxvY2FsID0gcmVxdWlyZShcIi4vc21hcnRmaWxlLmxvY2FsXCIpO1xuaW1wb3J0IFNtYXJ0ZmlsZU1lbW9yeSA9IHJlcXVpcmUoXCIuL3NtYXJ0ZmlsZS5tZW1vcnlcIik7XG5pbXBvcnQgU21hcnRmaWxlUmVtb3RlID0gcmVxdWlyZShcIi4vc21hcnRmaWxlLnJlbW90ZVwiKTtcblxuXG52YXIgc21hcnRmaWxlOmFueSA9IHtcbiAgICBmc2FjdGlvbjogU21hcnRmaWxlRnNhY3Rpb24sXG4gICAgZnM6IHBsdWdpbnMuZnMsXG4gICAgY2hlY2tzOiBTbWFydGZpbGVDaGVja3MsXG4gICAgZ2V0OiBTbWFydGZpbGVHZXQsXG4gICAgbG9jYWw6IFNtYXJ0ZmlsZUxvY2FsLFxuICAgIG1lbW9yeTogU21hcnRmaWxlTWVtb3J5LFxuICAgIHJlbW90ZTogU21hcnRmaWxlUmVtb3RlLFxuICAgIHJlcXVpcmVSZWxvYWQ6IFNtYXJ0ZmlsZUxvY2FsLnJlcXVpcmVSZWxvYWRcbn07XG5cbmV4cG9ydCA9IHNtYXJ0ZmlsZTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==

View File

@ -1,39 +0,0 @@
"use strict";
/// <reference path="./typings/main.d.ts" />
var plugins = require("./smartfile.plugins");
/**
*
* @param filePath
* @returns {boolean}
*/
exports.fileExistsSync = function (filePath) {
var fileExistsBool = false;
try {
plugins.fs.readFileSync(filePath);
fileExistsBool = true;
}
catch (err) {
fileExistsBool = false;
}
return fileExistsBool;
};
/**
*
* @param filePath
* @returns {any}
*/
exports.fileExists = function (filePath) {
var done = plugins.q.defer();
plugins.fs.access(filePath, plugins.fs.R_OK, function (err) {
err ? done.reject() : done.resolve();
});
return done.promise;
};
exports.isDirectory = function (pathArg) {
return plugins.fs.statSync(pathArg).isDirectory();
};
exports.isFile = function (pathArg) {
return plugins.fs.statSync(pathArg).isFile();
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0ZmlsZS5jaGVja3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUE0QztBQUM1QyxJQUFPLE9BQU8sV0FBVyxxQkFBcUIsQ0FBQyxDQUFDO0FBRWhEOzs7O0dBSUc7QUFDUSxzQkFBYyxHQUFHLFVBQVMsUUFBUTtJQUN6QyxJQUFJLGNBQWMsR0FBVyxLQUFLLENBQUM7SUFDbkMsSUFBSSxDQUFDO1FBQ0QsT0FBTyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsY0FBYyxHQUFHLElBQUksQ0FBQTtJQUN6QixDQUNBO0lBQUEsS0FBSyxDQUFBLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQztRQUNQLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUNELE1BQU0sQ0FBQyxjQUFjLENBQUM7QUFDMUIsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNRLGtCQUFVLEdBQUcsVUFBUyxRQUFRO0lBQ3JDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRztRQUN0RCxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVTLG1CQUFXLEdBQUcsVUFBUyxPQUFPO0lBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFFUyxjQUFNLEdBQUcsVUFBUyxPQUFPO0lBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNqRCxDQUFDLENBQUMiLCJmaWxlIjoic21hcnRmaWxlLmNoZWNrcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuL3R5cGluZ3MvbWFpbi5kLnRzXCIgLz5cbmltcG9ydCBwbHVnaW5zID0gcmVxdWlyZShcIi4vc21hcnRmaWxlLnBsdWdpbnNcIik7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBsZXQgZmlsZUV4aXN0c1N5bmMgPSBmdW5jdGlvbihmaWxlUGF0aCk6Ym9vbGVhbiB7XG4gICAgbGV0IGZpbGVFeGlzdHNCb29sOmJvb2xlYW4gPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICBwbHVnaW5zLmZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCk7XG4gICAgICAgIGZpbGVFeGlzdHNCb29sID0gdHJ1ZVxuICAgIH1cbiAgICBjYXRjaChlcnIpe1xuICAgICAgICBmaWxlRXhpc3RzQm9vbCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZUV4aXN0c0Jvb2w7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGhcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmV4cG9ydCBsZXQgZmlsZUV4aXN0cyA9IGZ1bmN0aW9uKGZpbGVQYXRoKXtcbiAgICBsZXQgZG9uZSA9IHBsdWdpbnMucS5kZWZlcigpO1xuICAgIHBsdWdpbnMuZnMuYWNjZXNzKGZpbGVQYXRoLCBwbHVnaW5zLmZzLlJfT0ssIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgZXJyID8gZG9uZS5yZWplY3QoKSA6IGRvbmUucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBkb25lLnByb21pc2U7XG59O1xuXG5leHBvcnQgbGV0IGlzRGlyZWN0b3J5ID0gZnVuY3Rpb24ocGF0aEFyZyk6Ym9vbGVhbntcbiAgICByZXR1cm4gcGx1Z2lucy5mcy5zdGF0U3luYyhwYXRoQXJnKS5pc0RpcmVjdG9yeSgpO1xufTtcblxuZXhwb3J0IGxldCBpc0ZpbGUgPSBmdW5jdGlvbihwYXRoQXJnKTpib29sZWFue1xuICAgIHJldHVybiBwbHVnaW5zLmZzLnN0YXRTeW5jKHBhdGhBcmcpLmlzRmlsZSgpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==

View File

@ -1,27 +0,0 @@
/// <reference path="./typings/main.d.ts" />
"use strict";
var plugins = require("./smartfile.plugins");
exports.copy = function (fromArg, toArg) {
var done = plugins.q.defer();
plugins.fs.copy(fromArg, toArg, {}, function () {
done.resolve();
});
return done.promise;
};
exports.copySync = function (fromArg, toArg) {
plugins.fs.copySync(fromArg, toArg);
return true;
};
exports.remove = function (pathArg) {
var done = plugins.q.defer();
plugins.fs.remove(pathArg, function () {
done.resolve();
});
return done.promise;
};
exports.removeSync = function (pathArg) {
plugins.fs.removeSync(pathArg);
return true;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0ZmlsZS5mc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0Q0FBNEM7O0FBRTVDLElBQU8sT0FBTyxXQUFXLHFCQUFxQixDQUFDLENBQUM7QUFHckMsWUFBSSxHQUFHLFVBQVMsT0FBYyxFQUFFLEtBQVk7SUFDbkQsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsS0FBSyxFQUFDLEVBQUUsRUFBQztRQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFUyxnQkFBUSxHQUFHLFVBQVMsT0FBYyxFQUFDLEtBQVk7SUFDdEQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRVMsY0FBTSxHQUFHLFVBQVMsT0FBYztJQUN2QyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBQztRQUN0QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFUyxrQkFBVSxHQUFHLFVBQVMsT0FBYztJQUMzQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsImZpbGUiOiJzbWFydGZpbGUuZnNhY3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi90eXBpbmdzL21haW4uZC50c1wiIC8+XG5cbmltcG9ydCBwbHVnaW5zID0gcmVxdWlyZShcIi4vc21hcnRmaWxlLnBsdWdpbnNcIik7XG5pbXBvcnQgU21hcnRmaWxlQ2hlY2tzID0gcmVxdWlyZShcIi4vc21hcnRmaWxlLmNoZWNrc1wiKTtcblxuZXhwb3J0IGxldCBjb3B5ID0gZnVuY3Rpb24oZnJvbUFyZzpzdHJpbmcsIHRvQXJnOnN0cmluZyl7XG4gICAgdmFyIGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICBwbHVnaW5zLmZzLmNvcHkoZnJvbUFyZyx0b0FyZyx7fSxmdW5jdGlvbigpe1xuICAgICAgICBkb25lLnJlc29sdmUoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xufTtcblxuZXhwb3J0IGxldCBjb3B5U3luYyA9IGZ1bmN0aW9uKGZyb21Bcmc6c3RyaW5nLHRvQXJnOnN0cmluZyk6Ym9vbGVhbntcbiAgICBwbHVnaW5zLmZzLmNvcHlTeW5jKGZyb21BcmcsdG9BcmcpO1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGxldCByZW1vdmUgPSBmdW5jdGlvbihwYXRoQXJnOnN0cmluZyl7XG4gICAgdmFyIGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICBwbHVnaW5zLmZzLnJlbW92ZShwYXRoQXJnLGZ1bmN0aW9uKCl7XG4gICAgICAgIGRvbmUucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBkb25lLnByb21pc2U7XG59O1xuXG5leHBvcnQgbGV0IHJlbW92ZVN5bmMgPSBmdW5jdGlvbihwYXRoQXJnOnN0cmluZyk6Ym9vbGVhbntcbiAgICBwbHVnaW5zLmZzLnJlbW92ZVN5bmMocGF0aEFyZyk7XG4gICAgcmV0dXJuIHRydWU7XG59OyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==

10
dist/smartfile.get.js vendored
View File

@ -1,10 +0,0 @@
"use strict";
/// <reference path="./typings/main.d.ts" />
var plugins = require("./smartfile.plugins");
exports.filetype = function (pathArg) {
var extName = plugins.path.extname(pathArg);
var fileType = extName.replace(/\.([a-z]*)/, "$1"); //remove . form fileType
return fileType;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0ZmlsZS5nZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUE0QztBQUM1QyxJQUFPLE9BQU8sV0FBVyxxQkFBcUIsQ0FBQyxDQUFDO0FBRXJDLGdCQUFRLEdBQUcsVUFBUyxPQUFjO0lBQ3pDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsd0JBQXdCO0lBQzNFLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDcEIsQ0FBQyxDQUFDIiwiZmlsZSI6InNtYXJ0ZmlsZS5nZXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi90eXBpbmdzL21haW4uZC50c1wiIC8+XG5pbXBvcnQgcGx1Z2lucyA9IHJlcXVpcmUoXCIuL3NtYXJ0ZmlsZS5wbHVnaW5zXCIpO1xuXG5leHBvcnQgbGV0IGZpbGV0eXBlID0gZnVuY3Rpb24ocGF0aEFyZzpzdHJpbmcpOnN0cmluZyB7XG4gICAgbGV0IGV4dE5hbWUgPSBwbHVnaW5zLnBhdGguZXh0bmFtZShwYXRoQXJnKTtcbiAgICBsZXQgZmlsZVR5cGUgPSBleHROYW1lLnJlcGxhY2UoL1xcLihbYS16XSopLyxcIiQxXCIpOyAvL3JlbW92ZSAuIGZvcm0gZmlsZVR5cGVcbiAgICByZXR1cm4gZmlsZVR5cGU7XG59OyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==

View File

@ -1,17 +0,0 @@
/// <reference path="./typings/main.d.ts" />
"use strict";
var plugins = require("./smartfile.plugins");
module.exports = function (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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0ZmlsZS5pbnRlcnByZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0Q0FBNEM7O0FBRTVDLElBQU8sT0FBTyxXQUFXLHFCQUFxQixDQUFDLENBQUM7QUFFaEQsaUJBQVMsVUFBUyxhQUFvQixFQUFFLFdBQVc7SUFDL0MsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNsQixLQUFLLEtBQUssQ0FBRTtRQUNaLEtBQUssTUFBTTtZQUNQLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRCxLQUFLLE1BQU07WUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyQztZQUNJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLENBQUM7WUFDNUUsS0FBSyxDQUFDO0lBQ2QsQ0FBQztBQUNMLENBQUMsQ0FBQSIsImZpbGUiOiJzbWFydGZpbGUuaW50ZXJwcmV0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi90eXBpbmdzL21haW4uZC50c1wiIC8+XG5cbmltcG9ydCBwbHVnaW5zID0gcmVxdWlyZShcIi4vc21hcnRmaWxlLnBsdWdpbnNcIik7XG5cbmV4cG9ydCA9IGZ1bmN0aW9uKGZpbGVTdHJpbmdBcmc6c3RyaW5nLCBmaWxlVHlwZUFyZyl7XG4gICAgc3dpdGNoIChmaWxlVHlwZUFyZykge1xuICAgICAgICBjYXNlIFwieW1sXCIgOlxuICAgICAgICBjYXNlIFwieWFtbFwiOlxuICAgICAgICAgICAgcmV0dXJuIHBsdWdpbnMueWFtbC5zYWZlTG9hZChmaWxlU3RyaW5nQXJnKTtcbiAgICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGZpbGVTdHJpbmdBcmcpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcGx1Z2lucy5iZWF1dHlsb2cuZXJyb3IoXCJmaWxlIHR5cGUgXCIgKyBmaWxlVHlwZUFyZy5ibHVlICsgXCIgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn0iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=

View File

@ -1,62 +0,0 @@
/// <reference path="./typings/main.d.ts" />
"use strict";
var plugins = require("./smartfile.plugins");
var SmartfileGet = require("./smartfile.get");
var SmartfileInterpreter = require("./smartfile.interpreter");
exports.toFS = function (options, cb) {
if (cb === void 0) { cb = undefined; }
};
/**
*
* @param filePathArg
* @returns {*}
*/
exports.toGulpStreamSync = function (filePathArg) {
var stream = plugins.gulp.src(filePathArg);
return stream;
};
exports.toGulpDestSync = function (folderPathArg) {
return plugins.gulp.dest(folderPathArg);
};
/**
*
* @param filePathArg
* @param fileTypeArg
* @returns {any}
*/
exports.toObjectSync = function (filePathArg, fileTypeArg) {
var fileString = plugins.fs.readFileSync(filePathArg, 'utf8');
var fileType;
fileTypeArg ? fileType = fileTypeArg : fileType = SmartfileGet.filetype(filePathArg);
return SmartfileInterpreter(fileString, fileType);
};
/**
* reads a file content to a String
* @param filePath
* @returns {string|Buffer|any}
*/
exports.toStringSync = function (filePath) {
var fileString;
fileString = plugins.fs.readFileSync(filePath, "utf8");
return fileString;
};
/**
*
* @param filePathArg
* @param options
* @returns {number}
*/
exports.toVinylSync = function (filePathArg, options) {
if (options === void 0) { options = {}; }
return plugins.vinylFile.readSync(filePathArg, options);
};
/**
* lets you reload files hot.
* @param path
* @returns {any}
*/
exports.requireReload = function (path) {
return plugins.requireReload(path);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0ZmlsZS5sb2NhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0Q0FBNEM7O0FBRTVDLElBQU8sT0FBTyxXQUFXLHFCQUFxQixDQUFDLENBQUM7QUFDaEQsSUFBTyxZQUFZLFdBQVcsaUJBQWlCLENBQUMsQ0FBQztBQUNqRCxJQUFPLG9CQUFvQixXQUFXLHlCQUF5QixDQUFDLENBQUM7QUFDdEQsWUFBSSxHQUFHLFVBQVMsT0FBbUMsRUFBRSxFQUFZO0lBQVosa0JBQVksR0FBWixjQUFZO0FBRTVFLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDUSx3QkFBZ0IsR0FBRyxVQUFTLFdBQWtCO0lBQ3JELElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRVMsc0JBQWMsR0FBRyxVQUFTLGFBQW9CO0lBQ3JELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNRLG9CQUFZLEdBQUcsVUFBUyxXQUFXLEVBQUMsV0FBWTtJQUN2RCxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUQsSUFBSSxRQUFRLENBQUM7SUFDYixXQUFXLEdBQUcsUUFBUSxHQUFHLFdBQVcsR0FBRyxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRixNQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDUSxvQkFBWSxHQUFHLFVBQVMsUUFBUTtJQUN2QyxJQUFJLFVBQVUsQ0FBQztJQUNmLFVBQVUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkQsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNRLG1CQUFXLEdBQUcsVUFBUyxXQUFXLEVBQUMsT0FBWTtJQUFaLHVCQUFZLEdBQVosWUFBWTtJQUN0RCxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNELENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDUSxxQkFBYSxHQUFHLFVBQVMsSUFBVztJQUMzQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUMiLCJmaWxlIjoic21hcnRmaWxlLmxvY2FsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vdHlwaW5ncy9tYWluLmQudHNcIiAvPlxuXG5pbXBvcnQgcGx1Z2lucyA9IHJlcXVpcmUoXCIuL3NtYXJ0ZmlsZS5wbHVnaW5zXCIpO1xuaW1wb3J0IFNtYXJ0ZmlsZUdldCA9IHJlcXVpcmUoXCIuL3NtYXJ0ZmlsZS5nZXRcIik7XG5pbXBvcnQgU21hcnRmaWxlSW50ZXJwcmV0ZXIgPSByZXF1aXJlKFwiLi9zbWFydGZpbGUuaW50ZXJwcmV0ZXJcIik7XG5leHBvcnQgbGV0IHRvRlMgPSBmdW5jdGlvbihvcHRpb25zOntmcm9tOnN0cmluZyx0b1BhdGg6c3RyaW5nfSwgY2I9dW5kZWZpbmVkKXtcbiAgICBcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aEFyZ1xuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBsZXQgdG9HdWxwU3RyZWFtU3luYyA9IGZ1bmN0aW9uKGZpbGVQYXRoQXJnOnN0cmluZyl7XG4gICAgbGV0IHN0cmVhbSA9IHBsdWdpbnMuZ3VscC5zcmMoZmlsZVBhdGhBcmcpO1xuICAgIHJldHVybiBzdHJlYW07XG59O1xuXG5leHBvcnQgbGV0IHRvR3VscERlc3RTeW5jID0gZnVuY3Rpb24oZm9sZGVyUGF0aEFyZzpzdHJpbmcpe1xuICAgIHJldHVybiBwbHVnaW5zLmd1bHAuZGVzdChmb2xkZXJQYXRoQXJnKTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aEFyZ1xuICogQHBhcmFtIGZpbGVUeXBlQXJnXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5leHBvcnQgbGV0IHRvT2JqZWN0U3luYyA9IGZ1bmN0aW9uKGZpbGVQYXRoQXJnLGZpbGVUeXBlQXJnPykge1xuICAgIGxldCBmaWxlU3RyaW5nID0gcGx1Z2lucy5mcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGhBcmcsICd1dGY4Jyk7XG4gICAgbGV0IGZpbGVUeXBlO1xuICAgIGZpbGVUeXBlQXJnID8gZmlsZVR5cGUgPSBmaWxlVHlwZUFyZyA6IGZpbGVUeXBlID0gU21hcnRmaWxlR2V0LmZpbGV0eXBlKGZpbGVQYXRoQXJnKTtcbiAgICByZXR1cm4gU21hcnRmaWxlSW50ZXJwcmV0ZXIoZmlsZVN0cmluZyxmaWxlVHlwZSk7XG59O1xuXG4vKipcbiAqIHJlYWRzIGEgZmlsZSBjb250ZW50IHRvIGEgU3RyaW5nXG4gKiBAcGFyYW0gZmlsZVBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd8QnVmZmVyfGFueX1cbiAqL1xuZXhwb3J0IGxldCB0b1N0cmluZ1N5bmMgPSBmdW5jdGlvbihmaWxlUGF0aCkge1xuICAgIGxldCBmaWxlU3RyaW5nO1xuICAgIGZpbGVTdHJpbmcgPSBwbHVnaW5zLmZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGY4XCIpO1xuICAgIHJldHVybiBmaWxlU3RyaW5nO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGZpbGVQYXRoQXJnXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGxldCB0b1ZpbnlsU3luYyA9IGZ1bmN0aW9uKGZpbGVQYXRoQXJnLG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBwbHVnaW5zLnZpbnlsRmlsZS5yZWFkU3luYyhmaWxlUGF0aEFyZyxvcHRpb25zKTtcbn07XG5cbi8qKlxuICogbGV0cyB5b3UgcmVsb2FkIGZpbGVzIGhvdC5cbiAqIEBwYXJhbSBwYXRoXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5leHBvcnQgbGV0IHJlcXVpcmVSZWxvYWQgPSBmdW5jdGlvbihwYXRoOnN0cmluZyl7XG4gICAgcmV0dXJuIHBsdWdpbnMucmVxdWlyZVJlbG9hZChwYXRoKTtcbn07Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9

File diff suppressed because one or more lines are too long

View File

@ -1,17 +0,0 @@
"use strict";
/// <reference path="./typings/main.d.ts" />
exports.beautylog = require("beautylog");
exports.fs = require("fs-extra");
exports.gulp = require("gulp");
exports.g = {
remoteSrc: require("gulp-remote-src")
};
exports.path = require("path");
exports.q = require("q");
exports.vinyl = require("vinyl");
exports.vinylFile = require("vinyl-file");
exports.yaml = require("js-yaml");
exports.request = require("request");
exports.requireReload = require("require-reload");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0ZmlsZS5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBNEM7QUFDakMsaUJBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakMsVUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6QixZQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLFNBQUMsR0FBRztJQUNYLFNBQVMsRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUM7Q0FDeEMsQ0FBQztBQUNZLFlBQUksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUMxQixTQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsYUFBSyxXQUFXLE9BQU8sQ0FBQyxDQUFDO0FBQzVCLGlCQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLFlBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUIsZUFBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QixxQkFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDIiwiZmlsZSI6InNtYXJ0ZmlsZS5wbHVnaW5zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vdHlwaW5ncy9tYWluLmQudHNcIiAvPlxuZXhwb3J0IGxldCBiZWF1dHlsb2cgPSByZXF1aXJlKFwiYmVhdXR5bG9nXCIpO1xuZXhwb3J0IGxldCBmcyA9IHJlcXVpcmUoXCJmcy1leHRyYVwiKTtcbmV4cG9ydCBsZXQgZ3VscCA9IHJlcXVpcmUoXCJndWxwXCIpO1xuZXhwb3J0IGxldCBnID0ge1xuICAgIHJlbW90ZVNyYzogcmVxdWlyZShcImd1bHAtcmVtb3RlLXNyY1wiKVxufTtcbmV4cG9ydCBpbXBvcnQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuZXhwb3J0IGxldCBxID0gcmVxdWlyZShcInFcIik7XG5leHBvcnQgaW1wb3J0IHZpbnlsID0gcmVxdWlyZShcInZpbnlsXCIpO1xuZXhwb3J0IGxldCB2aW55bEZpbGUgPSByZXF1aXJlKFwidmlueWwtZmlsZVwiKTtcbmV4cG9ydCBsZXQgeWFtbCA9IHJlcXVpcmUoXCJqcy15YW1sXCIpO1xuZXhwb3J0IGxldCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XG5leHBvcnQgbGV0IHJlcXVpcmVSZWxvYWQgPSByZXF1aXJlKFwicmVxdWlyZS1yZWxvYWRcIik7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=

File diff suppressed because one or more lines are too long

22
npmextra.json Normal file
View File

@ -0,0 +1,22 @@
{
"npmts": {
"mode": "default",
"coverageTreshold": 70
},
"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"
}
}
}

View File

@ -1,5 +0,0 @@
{
"mode":"default",
"codecov":true,
"coverageTreshold":80
}

1964
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,21 @@
{
"name": "smartfile",
"version": "2.3.0",
"name": "@pushrocks/smartfile",
"private": false,
"version": "7.0.10",
"description": "offers smart ways to work with files in nodejs",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"scripts": {
"test": "(npmts)",
"test": "(tstest test/)",
"reinstall": "(rm -r node_modules && npm install)",
"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)"
"upgrade": "(npm run update) && (ncu upgradeAll && npm install)",
"build": "(tsbuild)"
},
"repository": {
"type": "git",
"url": "https://github.com/pushrocks/smartfile.git"
"url": "https://gitlab.com/pushrocks/smartfile.git"
},
"keywords": [
"filesystem",
@ -21,24 +24,40 @@
"author": "Smart Coordination GmbH <office@push.rocks> (https://push.rocks)",
"license": "MIT",
"bugs": {
"url": "https://github.com/pushrocks/smartfile/issues"
"url": "https://gitlab.com/pushrocks/smartfile/issues"
},
"homepage": "https://github.com/pushrocks/smartfile",
"homepage": "https://gitlab.com/pushrocks/smartfile",
"dependencies": {
"beautylog": "3.1.2",
"fs-extra": "0.26.7",
"gulp": "^3.9.1",
"gulp-remote-src": "^0.4.1",
"js-yaml": "3.5.5",
"q": "1.4.1",
"request": "^2.69.0",
"require-reload": "0.2.2",
"vinyl": "1.1.1",
"vinyl-file": "2.0.0"
"@pushrocks/smarthash": "^2.1.6",
"@pushrocks/smartmime": "^1.0.3",
"@pushrocks/smartpath": "^4.0.1",
"@pushrocks/smartpromise": "^3.0.6",
"@pushrocks/smartrequest": "^1.1.47",
"@types/fs-extra": "^8.1.0",
"fs-extra": "^8.1.0",
"glob": "^7.1.6",
"js-yaml": "^3.13.1"
},
"devDependencies": {
"gulp-function": "^1.2.0",
"npmts": "4.0.1",
"should": "^8.3.0"
}
"@gitzone/tsbuild": "^2.1.17",
"@gitzone/tsrun": "^1.2.8",
"@gitzone/tstest": "^1.0.28",
"@pushrocks/tapbundle": "^3.2.0",
"@types/node": "^13.7.7",
"gulp-function": "^2.2.14",
"tslint": "^6.0.0",
"tslint-config-prettier": "^1.18.0"
},
"files": [
"ts/**/*",
"ts_web/**/*",
"dist/**/*",
"dist_*/**/*",
"dist_ts/**/*",
"dist_ts_web/**/*",
"assets/**/*",
"cli.js",
"npmextra.json",
"readme.md"
]
}

44
readme.md Normal file
View File

@ -0,0 +1,44 @@
# @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
[![pipeline status](https://gitlab.com/pushrocks/smartfile/badges/master/pipeline.svg)](https://gitlab.com/pushrocks/smartfile/commits/master)
[![coverage report](https://gitlab.com/pushrocks/smartfile/badges/master/coverage.svg)](https://gitlab.com/pushrocks/smartfile/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/@pushrocks/smartfile.svg)](https://www.npmjs.com/package/@pushrocks/smartfile)
[![Known Vulnerabilities](https://snyk.io/test/npm/@pushrocks/smartfile/badge.svg)](https://snyk.io/test/npm/@pushrocks/smartfile)
[![TypeScript](https://img.shields.io/badge/TypeScript->=%203.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/)
## 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 | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
[![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,182 +1,219 @@
/// <reference path="../ts/typings/main.d.ts" />
let smartfile = require("../dist/index.js");
let beautylog = require("beautylog");
let gulp = require("gulp");
let gFunction = require("gulp-function");
import should = require("should");
let vinyl = require("vinyl");
import * as smartfile from '../ts/index';
import path = require('path');
describe("smartfile".yellow,function(){
describe(".checks".yellow,function(){
describe(".fileExistsSync".yellow,function(){
it("should return an accurate boolean",function(){
(smartfile.checks.fileExistsSync("./test/mytest.json")).should.be.true();
(smartfile.checks.fileExistsSync("./test/notthere.json")).should.be.false();
});
});
describe(".fileExists".yellow,function(){
it("should return a working promise",function(){
(smartfile.checks.fileExists("./test/mytest.json")).should.be.Promise();
(smartfile.checks.fileExists("./test/mytest.json")).should.be.fulfilled();
(smartfile.checks.fileExists("./test/notthere.json")).should.not.be.fulfilled();
});
})
});
import { expect, tap } from '@pushrocks/tapbundle';
// ---------------------------
// smartfile.fs
// ---------------------------
describe(".fsaction".yellow,function(){
describe(".copy()".yellow,function(){
it("should copy a directory",function(){
smartfile.fsaction.copy("./test/testfolder/","./test/temp/")
});
it("should copy a file",function(){
smartfile.fsaction.copy("./test/mytest.yaml","./test/temp/")
});
it("should copy a file and rename it",function(){
smartfile.fsaction.copy("./test/mytest.yaml","./test/temp/mytestRenamed.yaml")
});
});
describe(".remove()",function(){
it("should remove an entire directory",function(){
});
it("should remove single files",function(){
});
});
});
describe(".local".yellow,function(){
describe("toGulpStreamSync() and toGulpDestSync",function(){
it("should produce a gulp stream",function(done){
smartfile.local.toGulpStreamSync("./test/my*")
.pipe(smartfile.local.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.local.toObjectSync("./test/mytest.yaml");
testData.should.have.property("key1","this works");
testData.should.have.property("key2","this works too");
});
it("should state unknown file type for unknown file types",function(){
let testData = smartfile.local.toObjectSync("./test/mytest.txt");
});
it("should read an " + ".json".blue + " file to an object",function(){
let testData = smartfile.local.toObjectSync("./test/mytest.json");
testData.should.have.property("key1","this works");
testData.should.have.property("key2","this works too");
});
});
describe(".toStringSync()".yellow,function(){
it("should read a file to a string",function(){
should.equal(
smartfile.local.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.local.toVinylSync("./test/mytest.json");
(vinyl.isVinyl(testData)).should.be.true();
});
});
});
describe(".memory",function(){
describe(".toGulpStream()",function(){
it("should produce a valid gulp stream",function(){
let localArray = ["test1","test2","test3"];
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"};
(smartfile.memory.toVinylFileSync(localString,localOptions) instanceof vinyl).should.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);
testResult.should.be.Array();
(testResult.length === 3).should.be.true();
for (let myKey in testResult){
(testResult[myKey] instanceof vinyl).should.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")
}));
localString.should.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,
{
fileName:"./test/temp/testMemToFs.txt",
filePath:process.cwd()
}
).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,{
fileName:"./test/temp/testMemToFsSync.txt",
filePath:process.cwd()
}
);
});
});
});
describe(".remote",function(){
describe("toGulpStreamSync()",function(){
it("should produce a gulp stream",function(done){
smartfile.remote.toGulpStreamSync("mytest.txt","https://raw.githubusercontent.com/pushrocks/smartfile/master/test/")
.pipe(smartfile.local.toGulpDestSync("./test/temp/"))
.pipe(gFunction(done,"atEnd"));
});
});
describe(".toString()",function(){
it("should load a remote file to a variable",function(done){
this.timeout(5000);
smartfile.remote.toString("https://raw.githubusercontent.com/pushrocks/smartfile/master/test/mytest.txt")
.then(function(responseString){
should.equal(responseString,"Some TestString &&%$");
done();
});
});
it("should reject a Promise when the link is false",function(done){
this.timeout(10000);
smartfile.remote.toString("https://push.rocks/doesnotexist.txt")
.then(function(){
throw new Error("this test should not be resolved");
},function(){
done();
})
});
});
})
tap.test('.fs.fileExistsSync -> should return an accurate boolean', async () => {
expect(smartfile.fs.fileExistsSync('./test/testassets/mytest.json')).to.be.true;
expect(smartfile.fs.fileExistsSync('./test/testassets/notthere.json')).be.false;
});
tap.test('.fs.fileExists -> should resolve or reject a promise', async () => {
expect(smartfile.fs.fileExists('./test/testassets/mytest.json')).to.be.instanceof(Promise);
await smartfile.fs.fileExists('./test/testassets/mytest.json');
await smartfile.fs.fileExists('./test/testassets/notthere.json').catch(err => {
return expect(err.message).to.equal(
"ENOENT: no such file or directory, access './test/testassets/notthere.json'"
);
});
});
tap.test('.fs.listFoldersSync() -> should get the file type from a string', async () => {
expect(smartfile.fs.listFoldersSync('./test/testassets/')).to.include('testfolder');
expect(smartfile.fs.listFoldersSync('./test/testassets/')).to.not.include('notExistentFolder');
});
tap.test('.fs.listFolders() -> should get the file type from a string', async () => {
let folderArrayArg = await smartfile.fs.listFolders('./test/testassets/');
expect(folderArrayArg).to.include('testfolder');
expect(folderArrayArg).to.not.include('notExistentFolder');
});
tap.test('.fs.listFilesSync() -> should get the file type from a string', async () => {
expect(smartfile.fs.listFilesSync('./test/testassets/')).to.include('mytest.json');
expect(smartfile.fs.listFilesSync('./test/testassets/')).to.not.include('notExistentFile');
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytest\.json/)).to.include(
'mytest.json'
);
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytests.json/)).to.not.include(
'mytest.json'
);
});
tap.test('.fs.listFiles() -> should get the file type from a string', async () => {
let folderArrayArg = await smartfile.fs.listFiles('./test/testassets/');
expect(folderArrayArg).to.include('mytest.json');
expect(folderArrayArg).to.not.include('notExistentFile');
});
tap.test('.fs.listFileTree() -> should get a file tree', async () => {
let folderArrayArg = await smartfile.fs.listFileTree(
path.resolve('./test/testassets/'),
'**/*.txt'
);
expect(folderArrayArg).to.include('testfolder/testfile1.txt');
expect(folderArrayArg).to.not.include('mytest.json');
});
tap.test('.fs.fileTreeToObject -> should read a file tree into an Object', async () => {
let 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 () => {
let 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 () => {
let testData = smartfile.fs.toObjectSync('./test/testassets/mytest.txt');
}
);
tap.test('.fs.toObjectSync() -> should read an ' + '.json' + ' file to an object', async () => {
let 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 () => {
let 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 () => {
let 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 () => {
let smartfileArray = await smartfile.fs.fileTreeToObject(
process.cwd(),
'./test/testassets/testfolder/**/*'
);
let 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 () => {
let smartfileArray = await smartfile.fs.fileTreeToObject('./test/testassets/testfolder/', '*');
for (let smartfile of smartfileArray) {
console.log(smartfile.relative);
console.log(smartfile.path);
console.log(smartfile.base);
console.log(smartfile.parsedPath);
}
await smartfile.memory.smartfileArrayToFs(
smartfileArray,
path.resolve('./test/testassets/temp/testoutput/')
);
});
tap.start();

View File

@ -0,0 +1,4 @@
key1: this works
key2: this works too
key3:
nestedkey1: hello

View File

@ -0,0 +1 @@
okidoks

View File

@ -0,0 +1 @@
hi

View File

@ -0,0 +1 @@
myString

View File

@ -0,0 +1 @@
myString

View File

@ -0,0 +1 @@
okidoks

View File

@ -0,0 +1 @@
hi

View File

View File

View File

@ -1,23 +1,12 @@
/// <reference path="./typings/main.d.ts" />
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 plugins = require("./smartfile.plugins");
import SmartfileChecks = require("./smartfile.checks");
import SmartfileFsaction = require("./smartfile.fsaction");
import SmartfileGet = require("./smartfile.get");
import SmartfileLocal = require("./smartfile.local");
import SmartfileMemory = require("./smartfile.memory");
import SmartfileRemote = require("./smartfile.remote");
export { Smartfile } from './smartfile.classes.smartfile';
var smartfile:any = {
fsaction: SmartfileFsaction,
fs: plugins.fs,
checks: SmartfileChecks,
get: SmartfileGet,
local: SmartfileLocal,
memory: SmartfileMemory,
remote: SmartfileRemote,
requireReload: SmartfileLocal.requireReload
};
export = smartfile;
export let fs = SmartfileFs;
export let interpreter = SmartfileInterpreter;
export let memory = SmartfileMemory;
export let remote = SmartfileRemote;

View File

@ -1,40 +0,0 @@
/// <reference path="./typings/main.d.ts" />
import plugins = require("./smartfile.plugins");
/**
*
* @param filePath
* @returns {boolean}
*/
export let fileExistsSync = function(filePath):boolean {
let fileExistsBool:boolean = false;
try {
plugins.fs.readFileSync(filePath);
fileExistsBool = true
}
catch(err){
fileExistsBool = false;
}
return fileExistsBool;
};
/**
*
* @param filePath
* @returns {any}
*/
export let fileExists = function(filePath){
let done = plugins.q.defer();
plugins.fs.access(filePath, plugins.fs.R_OK, function (err) {
err ? done.reject() : done.resolve();
});
return done.promise;
};
export let isDirectory = function(pathArg):boolean{
return plugins.fs.statSync(pathArg).isDirectory();
};
export let isFile = function(pathArg):boolean{
return plugins.fs.statSync(pathArg).isFile();
};

View File

@ -0,0 +1,169 @@
import * as plugins from './smartfile.plugins';
import * as fs from './smartfile.fs';
import * as memory from './smartfile.memory';
export interface ISmartfileConstructorOptions {
path?: string;
contentString?: string;
contentBuffer?: Buffer;
base?: string;
}
/**
* class Smartfile
* -> is vinyl file compatible
*/
export class Smartfile {
// ======
// STATIC
// ======
/**
* creates a Smartfile from a filePath
* @param filePath
*/
public static async fromFilePath(filePath: string) {
filePath = plugins.path.resolve(filePath);
const fileString = fs.toStringSync(filePath);
const smartfile = new Smartfile({
path: filePath,
contentString: fileString
});
return smartfile;
}
// ========
// INSTANCE
// ========
/**
* the full path of the file on disk
*/
path: string;
/**
*
*/
parsedPath: plugins.path.ParsedPath;
/**
* the content of the file as Buffer
*/
contentBuffer: Buffer;
/**
* The current working directory of the file
* Note:this is similar to gulp and different from native node path base
*/
base: string;
/**
* sync the file with disk
*/
sync: boolean;
/**
* the constructor of Smartfile
* @param optionsArg
*/
constructor(optionsArg: ISmartfileConstructorOptions) {
if (optionsArg.contentBuffer) {
this.contentBuffer = optionsArg.contentBuffer;
} else if (optionsArg.contentString) {
this.setContentsFromString(optionsArg.contentString);
} 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
*/
setContentsFromString(contentString: string) {
this.contents = new Buffer(contentString);
}
/**
* write file to disk
* Behaviours:
* - no argument write to exactly where the file was picked up
*/
async write(pathArg?: string) {
const stringToWrite = this.contentBuffer.toString();
await memory.toFs(stringToWrite, this.path);
}
/**
* read file from disk
*/
async read() {}
// -----------------------------------------------
// vinyl compatibility
// -----------------------------------------------
/**
* vinyl-compatibility: alias of this.contentBuffer
*/
get contents(): Buffer {
return this.contentBuffer;
}
set contents(contentsArg) {
this.contentBuffer = contentsArg;
}
/**
* vinyl-compatibility
*/
get cwd() {
return process.cwd();
}
/**
* return relative path of file
*/
get relative(): string {
return plugins.path.relative(this.base, this.path);
}
/**
* return truw when the file has content
*/
isNull(): boolean {
if (!this.contentBuffer) {
return true;
}
return false;
}
/**
* return true if contents are Buffer
*/
isBuffer(): boolean {
if (this.contents instanceof Buffer) {
return true;
}
return false;
}
isDirectory() {
return false;
}
isStream() {
return false;
}
isSymbolic() {
return false;
}
// update things
updateFileName(fileNameArg: string) {
let oldFileName = this.parsedPath.base;
this.path = this.path.replace(new RegExp(oldFileName + '$'), fileNameArg);
}
}

368
ts/smartfile.fs.ts Normal file
View File

@ -0,0 +1,368 @@
import plugins = require('./smartfile.plugins');
import SmartfileInterpreter = require('./smartfile.interpreter');
import { Smartfile } from './smartfile.classes.smartfile';
import * as memory from './smartfile.memory';
/*===============================================================
============================ Checks =============================
===============================================================*/
/**
*
* @param filePath
* @returns {boolean}
*/
export const fileExistsSync = (filePath): boolean => {
let fileExistsBool: boolean = false;
try {
plugins.fsExtra.readFileSync(filePath);
fileExistsBool = true;
} catch (err) {
fileExistsBool = false;
}
return fileExistsBool;
};
/**
*
* @param filePath
* @returns {any}
*/
export const fileExists = async (filePath): Promise<boolean> => {
const done = plugins.smartpromise.defer<boolean>();
plugins.fs.access(filePath, 4, err => {
err ? done.resolve(false) : done.resolve(true);
});
return done.promise;
};
/**
* Checks if given path points to an existing directory
*/
export const isDirectory = (pathArg): boolean => {
try {
return plugins.fsExtra.statSync(pathArg).isDirectory();
} catch (err) {
return false;
}
};
/**
* Checks if a given path points to an existing file
*/
export const isFile = (pathArg): boolean => {
return plugins.fsExtra.statSync(pathArg).isFile();
};
/*===============================================================
============================ FS ACTIONS =========================
===============================================================*/
/**
* copies a file from A to B on the local disk
*/
export const copy = async (fromArg: string, toArg: string): Promise<boolean> => {
const done = plugins.smartpromise.defer<boolean>();
plugins.fsExtra.copy(fromArg, toArg, {}, err => {
if (err) {
throw new Error(`Could not copy from ${fromArg} to ${toArg}: ${err}`);
}
done.resolve(true);
});
return done.promise;
};
/**
* copies a file SYNCHRONOUSLY from A to B on the local disk
*/
export const copySync = (fromArg: string, toArg: string): boolean => {
plugins.fsExtra.copySync(fromArg, toArg);
return true;
};
/**
* ensures that a directory is in place
*/
export const ensureDir = async (dirPathArg: string) => {
await plugins.fsExtra.ensureDir(dirPathArg);
};
/**
* ensures that a directory is in place
*/
export const ensureDirSync = (dirPathArg: string) => {
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
* @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 const ensureFile = async (filePathArg, initFileStringArg): Promise<void> => {
ensureFileSync(filePathArg, initFileStringArg);
};
/**
* 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 const ensureFileSync = (filePathArg: string, initFileStringArg: string): void => {
if (fileExistsSync(filePathArg)) {
return null;
} else {
memory.toFsSync(initFileStringArg, filePathArg);
}
};
/**
* removes a file or folder from local disk
*/
export const remove = async (pathArg: string): Promise<void> => {
await plugins.fsExtra.remove(pathArg);
};
/**
* removes a file SYNCHRONOUSLY from local disk
*/
export const removeSync = (pathArg: string): void => {
plugins.fsExtra.removeSync(pathArg);
};
/**
* removes an array of filePaths from disk
*/
export const removeMany = async (filePathArrayArg: string[]) => {
const promiseArray: Array<Promise<void>> = [];
for (const filePath of filePathArrayArg) {
promiseArray.push(remove(filePath));
}
await Promise.all(promiseArray);
};
/**
* like removeFilePathArray but SYNCHRONOUSLY
*/
export const removeManySync = (filePathArrayArg: string[]): void => {
for (const filePath of filePathArrayArg) {
removeSync(filePath);
}
};
/*===============================================================
============================ Write/Read =========================
===============================================================*/
/**
*
* @param filePathArg
* @param fileTypeArg
* @returns {any}
*/
export const toObjectSync = (filePathArg, fileTypeArg?) => {
const fileString = plugins.fsExtra.readFileSync(filePathArg, 'utf8');
let fileType;
fileTypeArg ? (fileType = fileTypeArg) : (fileType = SmartfileInterpreter.filetype(filePathArg));
return SmartfileInterpreter.objectFile(fileString, fileType);
};
/**
* reads a file content to a String
*/
export const toStringSync = (filePath: string): string => {
const encoding = plugins.smartmime.getEncoding(filePath);
const fileString: string = plugins.fsExtra.readFileSync(filePath, encoding);
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 dirPathArg the directory to start from
* @param miniMatchFilter a minimatch filter of what files to include
*/
export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: string) => {
// handle absolute miniMatchFilter
let dirPath: string;
if (plugins.path.isAbsolute(miniMatchFilter)) {
dirPath = '/';
} else {
dirPath = dirPathArg;
}
const fileTree = await listFileTree(dirPath, miniMatchFilter);
const smartfileArray: Smartfile[] = [];
for (const filePath of fileTree) {
const readPath = ((): string => {
if (!plugins.path.isAbsolute(filePath)) {
return plugins.path.join(dirPath, filePath);
} 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
* @returns Promise with an array that contains the folder names
*/
export const listFolders = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
return listFoldersSync(pathArg, regexFilter);
};
/**
* lists Folders SYNCHRONOUSLY in a directory on local disk
* @returns an array with the folder names as strings
*/
export const listFoldersSync = (pathArg: string, regexFilter?: RegExp): string[] => {
let folderArray = plugins.fsExtra.readdirSync(pathArg).filter(file => {
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isDirectory();
});
if (regexFilter) {
folderArray = folderArray.filter(fileItem => {
return regexFilter.test(fileItem);
});
}
return folderArray;
};
/**
* lists Files in a directory on local disk
* @returns Promise
*/
export const listFiles = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
return listFilesSync(pathArg, regexFilter);
};
/**
* lists Files SYNCHRONOUSLY in a directory on local disk
* @returns an array with the folder names as strings
*/
export const listFilesSync = (pathArg: string, regexFilter?: RegExp): string[] => {
let fileArray = plugins.fsExtra.readdirSync(pathArg).filter(file => {
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile();
});
if (regexFilter) {
fileArray = fileArray.filter(fileItem => {
return regexFilter.test(fileItem);
});
}
return fileArray;
};
/**
* lists all items (folders AND files) in a directory on local disk
* @returns Promise<string[]>
*/
export const listAllItems = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
return listAllItemsSync(pathArg, regexFilter);
};
/**
* lists all items (folders AND files) in a directory on local disk
* @returns an array with the folder names as strings
* @executes SYNC
*/
export const listAllItemsSync = (pathArg: string, regexFilter?: RegExp): string[] => {
let allItmesArray = plugins.fsExtra.readdirSync(pathArg).filter(file => {
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile();
});
if (regexFilter) {
allItmesArray = allItmesArray.filter(fileItem => {
return regexFilter.test(fileItem);
});
}
return allItmesArray;
};
/**
* 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 const listFileTree = async (
dirPathArg: string,
miniMatchFilter: string,
absolutePathsBool: boolean = false
): Promise<string[]> => {
const done = plugins.smartpromise.defer<string[]>();
// handle absolute miniMatchFilter
let dirPath: string;
if (plugins.path.isAbsolute(miniMatchFilter)) {
dirPath = '/';
} else {
dirPath = dirPathArg;
}
const options = {
cwd: dirPath,
nodir: true,
dot: true
};
plugins.glob(miniMatchFilter, options, (err, files: string[]) => {
if (err) {
console.log(err);
done.reject(err);
}
done.resolve(files);
});
let fileList = await done.promise;
if (absolutePathsBool) {
fileList = fileList.map(filePath => {
return plugins.path.resolve(plugins.path.join(dirPath, filePath));
});
}
return fileList;
};

View File

@ -1,30 +0,0 @@
/// <reference path="./typings/main.d.ts" />
import plugins = require("./smartfile.plugins");
import SmartfileChecks = require("./smartfile.checks");
export let copy = function(fromArg:string, toArg:string){
var done = plugins.q.defer();
plugins.fs.copy(fromArg,toArg,{},function(){
done.resolve();
});
return done.promise;
};
export let copySync = function(fromArg:string,toArg:string):boolean{
plugins.fs.copySync(fromArg,toArg);
return true;
};
export let remove = function(pathArg:string){
var done = plugins.q.defer();
plugins.fs.remove(pathArg,function(){
done.resolve();
});
return done.promise;
};
export let removeSync = function(pathArg:string):boolean{
plugins.fs.removeSync(pathArg);
return true;
};

View File

@ -1,8 +0,0 @@
/// <reference path="./typings/main.d.ts" />
import plugins = require("./smartfile.plugins");
export let filetype = function(pathArg:string):string {
let extName = plugins.path.extname(pathArg);
let fileType = extName.replace(/\.([a-z]*)/,"$1"); //remove . form fileType
return fileType;
};

View File

@ -1,16 +1,20 @@
/// <reference path="./typings/main.d.ts" />
import plugins = require('./smartfile.plugins');
import plugins = require("./smartfile.plugins");
export let filetype = (pathArg: string): string => {
const extName = plugins.path.extname(pathArg);
const fileType = extName.replace(/\.([a-z]*)/, '$1'); // remove . form fileType
return fileType;
};
export = function(fileStringArg:string, 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;
}
}
export let objectFile = (fileStringArg: string, fileTypeArg) => {
switch (fileTypeArg) {
case 'yml':
case 'yaml':
return plugins.yaml.safeLoad(fileStringArg);
case 'json':
return JSON.parse(fileStringArg);
default:
console.error('file type ' + fileTypeArg.blue + ' not supported');
break;
}
};

View File

@ -1,65 +0,0 @@
/// <reference path="./typings/main.d.ts" />
import plugins = require("./smartfile.plugins");
import SmartfileGet = require("./smartfile.get");
import SmartfileInterpreter = require("./smartfile.interpreter");
export let toFS = function(options:{from:string,toPath:string}, cb=undefined){
};
/**
*
* @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 fileTypeArg
* @returns {any}
*/
export let toObjectSync = function(filePathArg,fileTypeArg?) {
let fileString = plugins.fs.readFileSync(filePathArg, 'utf8');
let fileType;
fileTypeArg ? fileType = fileTypeArg : fileType = SmartfileGet.filetype(filePathArg);
return SmartfileInterpreter(fileString,fileType);
};
/**
* reads a file content to a String
* @param filePath
* @returns {string|Buffer|any}
*/
export let toStringSync = function(filePath) {
let fileString;
fileString = plugins.fs.readFileSync(filePath, "utf8");
return fileString;
};
/**
*
* @param filePathArg
* @param options
* @returns {number}
*/
export let toVinylSync = function(filePathArg,options = {}) {
return plugins.vinylFile.readSync(filePathArg,options);
};
/**
* lets you reload files hot.
* @param path
* @returns {any}
*/
export let requireReload = function(path:string){
return plugins.requireReload(path);
};

View File

@ -1,121 +1,94 @@
/// <reference path="./typings/main.d.ts" />
import plugins = require('./smartfile.plugins');
import { Smartfile } from './smartfile.classes.smartfile';
import * as smartfileFs from './smartfile.fs';
import SmartfileInterpreter = require('./smartfile.interpreter');
import plugins = require("./smartfile.plugins");
let Readable = require("stream").Readable;
/**
* allows you to create a gulp stream from filestring
* @param fileArg
* @returns stream.Readable
* @TODO: make it async;
* converts file to Object
* @param fileStringArg
* @param fileTypeArg
* @returns {any|any}
*/
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;
export let toObject = function(fileStringArg: string, fileTypeArg: string) {
return SmartfileInterpreter.objectFile(fileStringArg, fileTypeArg);
};
/**
* takes a string and converts it to vinyl file
* @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;
};
export interface IToFsOptions {
respectRelative?: boolean;
}
/**
* 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.
* writes string or Smartfile to disk.
* @param fileArg
* @param fileNameArg
* @param fileBaseArg
*/
export let toFs = function(fileArg,optionsArg:{fileName:string,filePath:string}){
let done = plugins.q.defer();
export let toFs = async (
fileContentArg: string | Buffer | Smartfile,
filePathArg: string,
optionsArg: IToFsOptions = {}
) => {
const done = plugins.smartpromise.defer();
//function checks to abort if needed
if (!fileArg || !optionsArg || !(typeof optionsArg.fileName === "string"))
throw new Error("expected a valid arguments");
if (!(typeof optionsArg.filePath === "string")) optionsArg.filePath = "/";
// check args
if (!fileContentArg || !filePathArg) {
throw new Error('expected valid arguments');
}
let filePath:string = plugins.path.join(optionsArg.filePath,optionsArg.fileName);
let fileString:string;
if (fileArg instanceof plugins.vinyl){
fileString = toStringSync(fileArg);
} else if (typeof fileArg === "string") {
fileString = fileArg;
// prepare actual write action
let fileString: string;
let fileEncoding: string = 'utf8';
let filePath: string = filePathArg;
// handle Smartfile
if (fileContentArg instanceof Smartfile) {
fileString = fileContentArg.contentBuffer.toString();
// handle options
if (optionsArg.respectRelative) {
filePath = plugins.path.join(filePath, fileContentArg.path);
}
plugins.fs.writeFile(filePath,fileString,"utf8",done.resolve);
return done.promise;
} else if (Buffer.isBuffer(fileContentArg)) {
fileString = fileContentArg.toString('binary');
fileEncoding = 'binary';
} else if (typeof fileContentArg === 'string') {
fileString = fileContentArg;
} else {
throw new Error('fileContent is neither string nor Smartfile');
}
await smartfileFs.ensureDir(plugins.path.parse(filePath).dir);
plugins.fsExtra.writeFile(filePath, fileString, { encoding: fileEncoding }, done.resolve);
return await done.promise;
};
export let toFsSync = function(fileArg,optionsArg:{fileName:string,filePath:string}){
//function checks to abort if needed
if (!fileArg || !optionsArg || !(typeof optionsArg.fileName === "string"))
throw new Error("expected a valid arguments");
if (!(typeof optionsArg.filePath === "string")) optionsArg.filePath = "/";
/**
* writes a string or a Smartfile to disk synchronously, only supports string
* @param fileArg
* @param filePathArg
*/
export let toFsSync = function(fileArg: string, filePathArg: string) {
// function checks to abort if needed
if (!fileArg || !filePathArg) {
throw new Error('expected a valid arguments');
}
let filePath = plugins.path.join(optionsArg.filePath,optionsArg.fileName);
let fileString:string;
// prepare actual write action
let fileString: string;
let filePath: string = filePathArg;
if (fileArg instanceof plugins.vinyl){
fileString = toStringSync(fileArg);
} else if (typeof fileArg === "string") {
fileString = fileArg;
}
plugins.fs.writeFileSync(filePath,fileString,"utf8");
if (typeof fileArg !== 'string') {
throw new Error('fileArg is not of type String.');
} else if (typeof fileArg === 'string') {
fileString = fileArg;
}
plugins.fsExtra.writeFileSync(filePath, fileString, { encoding: 'utf8' });
};
export let smartfileArrayToFs = async (smartfileArrayArg: Smartfile[], dirArg: string) => {
await smartfileFs.ensureDir(dirArg);
for (let smartfile of smartfileArrayArg) {
await toFs(smartfile, dirArg, {
respectRelative: true
});
}
};

View File

@ -1,14 +1,21 @@
/// <reference path="./typings/main.d.ts" />
export let beautylog = require("beautylog");
export let fs = require("fs-extra");
export let gulp = require("gulp");
export let g = {
remoteSrc: require("gulp-remote-src")
};
export import path = require("path");
export let q = require("q");
export import vinyl = require("vinyl");
export let vinylFile = require("vinyl-file");
export let yaml = require("js-yaml");
export let request = require("request");
export let requireReload = require("require-reload");
// node native scope
import * as fs from 'fs';
import * as path from 'path';
export { fs, path };
// @pushrocks scope
import * as smarthash from '@pushrocks/smarthash';
import * as smartmime from '@pushrocks/smartmime';
import * as smartpath from '@pushrocks/smartpath';
import * as smartpromise from '@pushrocks/smartpromise';
import * as smartrequest from '@pushrocks/smartrequest';
export { smarthash, smartmime, smartpath, smartpromise, smartrequest };
// third party scope
import * as fsExtra from 'fs-extra';
import glob from 'glob';
import yaml from 'js-yaml';
export { fsExtra, glob, yaml };

View File

@ -1,27 +1,35 @@
/// <reference path="./typings/main.d.ts" />
import plugins = require("./smartfile.plugins");
import SmartfileInterpreter = require("./smartfile.interpreter");
import SmartfileGet = require("./smartfile.get");
import plugins = require('./smartfile.plugins');
import SmartfileInterpreter = require('./smartfile.interpreter');
export let toFs = function(from:string,toPath:string) {
var done = plugins.q.defer();
var stream = plugins.request(from).pipe(plugins.fs.createWriteStream(toPath));
stream.on('finish',function(){
done.resolve(toPath);
});
return done.promise;
};
/* export let toFs = function (from: string, toPath: string) {
let done = plugins.q.defer()
let stream = plugins.smartrequest(from).pipe(plugins.fsExtra.createWriteStream(toPath))
stream.on('finish', function () {
done.resolve(toPath)
})
return done.promise
} */
/**
*
* @param filePathArg
* @returns {*}
* @param fromArg
* @returns {any}
*/
export let toGulpStreamSync = function(filePathArg:string,baseArg:string){
let stream = plugins.g.remoteSrc(filePathArg, {
base: baseArg
export let toObject = (fromArg: string) => {
const done = plugins.smartpromise.defer();
plugins.smartrequest
.request(fromArg, {
method: 'get'
})
.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 stream;
return done.promise;
};
/**
@ -29,38 +37,15 @@ export let toGulpStreamSync = function(filePathArg:string,baseArg:string){
* @param fromArg
* @returns {any}
*/
export let toObject = function(fromArg:string){
let done = plugins.q.defer();
plugins.request.get(fromArg, function (error, response, bodyString) {
let returnObject;
if (!error && response.statusCode == 200) {
returnObject = SmartfileInterpreter(bodyString,SmartfileGet.filetype(fromArg));
done.resolve(returnObject);
} else {
console.log('could not get remote file from ' + fromArg);
returnObject = undefined;
done.reject(returnObject);
};
});
return done.promise;
export let toString = (fromArg: string): Promise<string> => {
const done = plugins.smartpromise.defer<string>();
plugins.smartrequest.getBinary(fromArg).then((res: any) => {
if (res.statusCode === 200) {
const encoding = plugins.smartmime.getEncoding(fromArg);
done.resolve(res.body.toString(encoding));
} else {
done.reject(new Error('could not get remote file from ' + fromArg));
}
});
return done.promise;
};
/**
*
* @param fromArg
* @returns {any}
*/
export let toString = (fromArg:string) => {
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;
};

View File

@ -1,9 +0,0 @@
{
"ambientDependencies": {
"colors": "github:DefinitelyTyped/DefinitelyTyped/colors/colors.d.ts",
"mocha": "github:Bartvds/tsd-deftools/typings/DefinitelyTyped/mocha/mocha.d.ts",
"node": "registry:dt/node",
"should": "registry:dt/should",
"vinyl": "registry:dt/vinyl"
}
}

17
tslint.json Normal file
View File

@ -0,0 +1,17 @@
{
"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"
}