This commit is contained in:
Philipp Kunz 2023-11-04 20:07:43 +01:00
parent 8b07197224
commit ca592afec9
12 changed files with 281 additions and 147 deletions

View File

@ -34,13 +34,13 @@
"@push.rocks/smartmime": "^1.0.5",
"@push.rocks/smartpath": "^5.0.11",
"@push.rocks/smartpromise": "^4.0.2",
"@push.rocks/smartrequest": "^2.0.18",
"@push.rocks/smartstream": "^2.0.4",
"@types/fs-extra": "^11.0.2",
"@push.rocks/smartrequest": "^2.0.20",
"@push.rocks/smartstream": "^3.0.7",
"@types/fs-extra": "^11.0.3",
"@types/glob": "^8.1.0",
"@types/js-yaml": "^4.0.6",
"@types/js-yaml": "^4.0.8",
"fs-extra": "^11.1.1",
"glob": "^10.3.5",
"glob": "^10.3.10",
"js-yaml": "^4.1.0"
},
"devDependencies": {
@ -48,7 +48,7 @@
"@git.zone/tsrun": "^1.2.46",
"@git.zone/tstest": "^1.0.81",
"@push.rocks/tapbundle": "^5.0.15",
"@types/node": "^20.6.3"
"@types/node": "^20.8.10"
},
"files": [
"ts/**/*",

238
pnpm-lock.yaml generated
View File

@ -30,26 +30,26 @@ dependencies:
specifier: ^4.0.2
version: 4.0.3
'@push.rocks/smartrequest':
specifier: ^2.0.18
version: 2.0.18
specifier: ^2.0.20
version: 2.0.20
'@push.rocks/smartstream':
specifier: ^2.0.4
version: 2.0.4
specifier: ^3.0.7
version: 3.0.7
'@types/fs-extra':
specifier: ^11.0.2
version: 11.0.2
specifier: ^11.0.3
version: 11.0.3
'@types/glob':
specifier: ^8.1.0
version: 8.1.0
'@types/js-yaml':
specifier: ^4.0.6
version: 4.0.6
specifier: ^4.0.8
version: 4.0.8
fs-extra:
specifier: ^11.1.1
version: 11.1.1
glob:
specifier: ^10.3.5
version: 10.3.5
specifier: ^10.3.10
version: 10.3.10
js-yaml:
specifier: ^4.1.0
version: 4.1.0
@ -60,16 +60,16 @@ devDependencies:
version: 2.1.70
'@git.zone/tsrun':
specifier: ^1.2.46
version: 1.2.46(@types/node@20.6.3)
version: 1.2.46(@types/node@20.8.10)
'@git.zone/tstest':
specifier: ^1.0.81
version: 1.0.81(@types/node@20.6.3)(sinon@16.0.0)
version: 1.0.81(@types/node@20.8.10)(sinon@17.0.1)
'@push.rocks/tapbundle':
specifier: ^5.0.15
version: 5.0.15(sinon@16.0.0)
version: 5.0.15(sinon@17.0.1)
'@types/node':
specifier: ^20.6.3
version: 20.6.3
specifier: ^20.8.10
version: 20.8.10
packages:
@ -107,7 +107,7 @@ packages:
'@push.rocks/smartopen': 2.0.0
'@push.rocks/smartpath': 5.0.11
'@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartrequest': 2.0.18
'@push.rocks/smartrequest': 2.0.20
'@push.rocks/smartrx': 3.0.6
'@push.rocks/smartsitemap': 2.0.2
'@push.rocks/smarttime': 4.0.5
@ -411,13 +411,13 @@ packages:
- supports-color
dev: true
/@git.zone/tsrun@1.2.46(@types/node@20.6.3):
/@git.zone/tsrun@1.2.46(@types/node@20.8.10):
resolution: {integrity: sha512-8miFVBle9Mnjx+uPGI/P+EuWcIOXWjBAkdjN5IYbdp5Ytt4xQODCLh4JSnC9h56UeU1nUxCAxZeJs2e9TXrivA==}
hasBin: true
dependencies:
'@push.rocks/smartfile': 10.0.30
'@push.rocks/smartshell': 3.0.3
ts-node: 10.9.1(@types/node@20.6.3)(typescript@5.1.6)
ts-node: 10.9.1(@types/node@20.8.10)(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
- '@swc/core'
@ -425,13 +425,13 @@ packages:
- '@types/node'
dev: true
/@git.zone/tstest@1.0.81(@types/node@20.6.3)(sinon@16.0.0):
/@git.zone/tstest@1.0.81(@types/node@20.8.10)(sinon@17.0.1):
resolution: {integrity: sha512-OUTACsOmvvzbKay4i1hbBaToLzo/OaCYV1PiYpoK9S2BJMbVJAik+ZbdixbJugoLrw7bR9velYgT66lnS6OZUA==}
hasBin: true
dependencies:
'@api.global/typedserver': 3.0.5
'@git.zone/tsbundle': 2.0.9
'@git.zone/tsrun': 1.2.46(@types/node@20.6.3)
'@git.zone/tsrun': 1.2.46(@types/node@20.8.10)
'@push.rocks/consolecolor': 2.0.1
'@push.rocks/smartbrowser': 2.0.6
'@push.rocks/smartdelay': 3.0.5
@ -439,7 +439,7 @@ packages:
'@push.rocks/smartlog': 3.0.3
'@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartshell': 3.0.3
'@push.rocks/tapbundle': 5.0.15(sinon@16.0.0)
'@push.rocks/tapbundle': 5.0.15(sinon@17.0.1)
figures: 5.0.0
transitivePeerDependencies:
- '@swc/core'
@ -555,7 +555,7 @@ packages:
lit-html: 1.4.1
dev: true
/@open-wc/testing@2.5.33(sinon@16.0.0):
/@open-wc/testing@2.5.33(sinon@17.0.1):
resolution: {integrity: sha512-+EJNs0i+VV4nE+BrG70l2DNGXOZTSrluruaaU06HUSk57ZlKa+kIxWmkLxCOLlbgnQgrPrQWxbs3lgB1tIx/YA==}
dependencies:
'@open-wc/chai-dom-equals': 0.12.36
@ -569,7 +569,7 @@ packages:
chai-a11y-axe: 1.5.0
chai-dom: 1.11.0(chai@4.3.8)(mocha@6.2.3)
mocha: 6.2.3
sinon-chai: 3.7.0(chai@4.3.8)(sinon@16.0.0)
sinon-chai: 3.7.0(chai@4.3.8)(sinon@17.0.1)
transitivePeerDependencies:
- bufferutil
- sinon
@ -703,13 +703,13 @@ packages:
'@push.rocks/smartmime': 1.0.6
'@push.rocks/smartpath': 5.0.11
'@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartrequest': 2.0.18
'@push.rocks/smartstream': 2.0.4
'@types/fs-extra': 11.0.2
'@push.rocks/smartrequest': 2.0.20
'@push.rocks/smartstream': 2.0.8
'@types/fs-extra': 11.0.3
'@types/glob': 8.1.0
'@types/js-yaml': 4.0.6
'@types/js-yaml': 4.0.8
fs-extra: 11.1.1
glob: 10.3.5
glob: 10.3.10
js-yaml: 4.1.0
dev: true
@ -724,13 +724,13 @@ packages:
'@push.rocks/smartmime': 1.0.6
'@push.rocks/smartpath': 5.0.11
'@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartrequest': 2.0.18
'@push.rocks/smartstream': 2.0.4
'@types/fs-extra': 11.0.2
'@push.rocks/smartrequest': 2.0.20
'@push.rocks/smartstream': 2.0.8
'@types/fs-extra': 11.0.3
'@types/glob': 8.1.0
'@types/js-yaml': 4.0.6
'@types/js-yaml': 4.0.8
fs-extra: 11.1.1
glob: 10.3.5
glob: 10.3.10
js-yaml: 4.1.0
dev: true
@ -861,8 +861,8 @@ packages:
- utf-8-validate
dev: true
/@push.rocks/smartrequest@2.0.18:
resolution: {integrity: sha512-MsTou9rRHhlhBC83dUGoi6quYKrWD9urI23Bcgk2GjvkiOpaddpSib6x1cQfidoOVpwP7LaVDMD+tFnW4CpWRA==}
/@push.rocks/smartrequest@2.0.20:
resolution: {integrity: sha512-7Y22kOS9CGJLjayjpRbkoDxd5kqmnG9WDY1WWR3/kqo63WFhdgHueatmJjT/v1QqvKSG88gL36kG4f7YG/0xTA==}
dependencies:
'@push.rocks/smartpromise': 4.0.3
'@push.rocks/smarturl': 3.0.7
@ -875,6 +875,12 @@ packages:
'@push.rocks/smartpromise': 4.0.3
rxjs: 7.8.1
/@push.rocks/smartrx@3.0.7:
resolution: {integrity: sha512-qCWy0s3RLAgGSnaw/Gu0BNaJ59CsI6RK5OJDCCqxc7P2X/S755vuLtnAR5/0dEjdhCHXHX9ytPZx+o9g/CNiyA==}
dependencies:
'@push.rocks/smartpromise': 4.0.3
rxjs: 7.8.1
/@push.rocks/smartshell@3.0.3:
resolution: {integrity: sha512-S4RXI76ltPetdJ8Gv4HlnlhR/hXDV8QmSU7TdhLEe171ZzfouAyt9XZ4MFDCtjk3VQ4Mw+zz4mSDaACXP/QdlQ==}
dependencies:
@ -932,15 +938,23 @@ packages:
- supports-color
dev: true
/@push.rocks/smartstream@2.0.4:
resolution: {integrity: sha512-rbQf4+sLle9ga6RidRv0WXb/TuLFcMordRQBbqPq01n/mpBHoEiqIThWzVuImPVRVuSK/LKbM/QX4Ey26FFerg==}
/@push.rocks/smartstream@2.0.8:
resolution: {integrity: sha512-GlF/9cCkvBHwKa3DK4DO5wjfSgqkj6gAS4TrY9uD5NMHu9RQv4WiNrElTYj7iCEpnZgUnLO3tzw1JA3NRIMnnA==}
dependencies:
'@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartrx': 3.0.6
'@types/from2': 2.3.2
'@types/through2': 2.0.38
'@push.rocks/smartrx': 3.0.7
'@types/from2': 2.3.4
'@types/through2': 2.0.40
from2: 2.3.0
through2: 4.0.2
dev: true
/@push.rocks/smartstream@3.0.7:
resolution: {integrity: sha512-F4HsYlMJusa7uf18aIXGuuAdlPxKaIcr7UDMLg4QUCtGK114SVt6E+72bXtN6yPyZ40+x8BVUWUkkTOdw22BeA==}
dependencies:
'@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartrx': 3.0.7
dev: false
/@push.rocks/smartstring@4.0.9:
resolution: {integrity: sha512-VB0jzKmI4ZpdzEZe79M8rKVjAReNWGMG6ktzS0R5FeH96SSk3jvfOezgz/RJ7JbRN3UcyR0Ra/mXlpyeqJUHvw==}
@ -987,14 +1001,14 @@ packages:
/@push.rocks/smartyaml@2.0.5:
resolution: {integrity: sha512-tBcf+HaOIfeEsTMwgUZDtZERCxXQyRsWO8Ar5DjBdiSRchbhVGZQEBzXswMS0W5ZoRenjgPK+4tPW3JQGRTfbg==}
dependencies:
'@types/js-yaml': 3.12.8
'@types/js-yaml': 3.12.9
js-yaml: 3.14.1
dev: true
/@push.rocks/tapbundle@5.0.15(sinon@16.0.0):
/@push.rocks/tapbundle@5.0.15(sinon@17.0.1):
resolution: {integrity: sha512-vVTVmQCovYq9xhif96z7wN8pFiB3UB9MZSkqMDgfNTWhlU19ZZR1azCZn+zXsYxgJmD8wKNYhvZYgdRz73KbBg==}
dependencies:
'@open-wc/testing': 2.5.33(sinon@16.0.0)
'@open-wc/testing': 2.5.33(sinon@17.0.1)
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartenv': 5.0.5
'@push.rocks/smartexpect': 1.0.21
@ -1308,6 +1322,12 @@ packages:
'@sinonjs/commons': 3.0.0
dev: true
/@sinonjs/fake-timers@11.2.2:
resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==}
dependencies:
'@sinonjs/commons': 3.0.0
dev: true
/@sinonjs/samsam@8.0.0:
resolution: {integrity: sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==}
dependencies:
@ -1362,7 +1382,7 @@ packages:
/@types/accepts@1.3.5:
resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
/@types/babel__code-frame@7.0.3:
@ -1373,7 +1393,7 @@ packages:
resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
dependencies:
'@types/connect': 3.4.35
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
/@types/buffer-json@2.0.1:
@ -1399,21 +1419,21 @@ packages:
/@types/clean-css@4.2.7:
resolution: {integrity: sha512-lcoZHjUAANLTACLGi+O/0pN+oKQAQ8zAMWJSxiBRNLxqZG/WE8hfXJUs1eYwJOvOnDJrvxU1kR77UiVJ3+9N0Q==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
source-map: 0.6.1
dev: true
/@types/co-body@6.1.0:
resolution: {integrity: sha512-3e0q2jyDAnx/DSZi0z2H0yoZ2wt5yRDZ+P7ymcMObvq0ufWRT4tsajyO+Q1VwVWiv9PRR4W3YEjEzBjeZlhF+w==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
'@types/qs': 6.9.8
dev: true
/@types/connect@3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
/@types/content-disposition@0.5.5:
@ -1434,13 +1454,13 @@ packages:
'@types/connect': 3.4.35
'@types/express': 4.17.17
'@types/keygrip': 1.0.2
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
/@types/cors@2.8.14:
resolution: {integrity: sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
/@types/debounce@1.2.1:
@ -1454,7 +1474,7 @@ packages:
/@types/express-serve-static-core@4.17.36:
resolution: {integrity: sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
'@types/qs': 6.9.8
'@types/range-parser': 1.2.4
'@types/send': 0.17.1
@ -1469,22 +1489,23 @@ packages:
'@types/serve-static': 1.15.2
dev: true
/@types/from2@2.3.2:
resolution: {integrity: sha512-s1pdctxW2+CA4FOxxTBRxC3RKQL9Br1a2s2LngP4jh1BI84JBL3mDXj87EwcckN9z/IXp8o3ySmvZveGEAAwqw==}
/@types/from2@2.3.4:
resolution: {integrity: sha512-Ofj/U9ytMjG5FIfFlTokSyGQdLgX8js+hbw9/qxZQbsGRjcjQPzoLGZhe6OEzrg7Sd98Il57iyxDtU1ArvCSTw==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
/@types/fs-extra@11.0.2:
resolution: {integrity: sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==}
/@types/fs-extra@11.0.3:
resolution: {integrity: sha512-sF59BlXtUdzEAL1u0MSvuzWd7PdZvZEtnaVkzX5mjpdWTJ8brG0jUqve3jPCzSzvAKKMHTG8F8o/WMQLtleZdQ==}
dependencies:
'@types/jsonfile': 6.1.2
'@types/node': 20.6.3
'@types/jsonfile': 6.1.3
'@types/node': 20.8.10
/@types/glob@8.1.0:
resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
dependencies:
'@types/minimatch': 5.1.2
'@types/node': 20.6.3
'@types/node': 20.8.10
/@types/html-minifier@4.0.3:
resolution: {integrity: sha512-e55KfPv+cXjd2AXwkuVfMw/hcJipNoS+JML+z3ijqzMHgc6F2iviWSEUx5tXQ6Yu5UtYtLH35ae2ftFsRJTmLA==}
@ -1522,17 +1543,17 @@ packages:
'@types/istanbul-lib-report': 3.0.0
dev: true
/@types/js-yaml@3.12.8:
resolution: {integrity: sha512-6McoI148SFmiE2m2Y9lpzwN238grgzEn2J1mHoc8UWwDKvAUsjl100jjqoj5ORVqDwWuEmD+zlOES0+jI7fZCA==}
/@types/js-yaml@3.12.9:
resolution: {integrity: sha512-s5v3+2RB96nd7AOZXLScwHDRClor83+0E5q+5fzq0fTFXw8spF3QWHAUmHwItmmlr7XnDjpM0FkAgNKHzDTXtg==}
dev: true
/@types/js-yaml@4.0.6:
resolution: {integrity: sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==}
/@types/js-yaml@4.0.8:
resolution: {integrity: sha512-m6jnPk1VhlYRiLFm3f8X9Uep761f+CK8mHyS65LutH2OhmBF0BeMEjHgg05usH8PLZMWWc/BUR9RPmkvpWnyRA==}
/@types/jsonfile@6.1.2:
resolution: {integrity: sha512-8t92P+oeW4d/CRQfJaSqEwXujrhH4OEeHRjGU3v1Q8mUS8GPF3yiX26sw4svv6faL2HfBtGTe2xWIoVgN3dy9w==}
/@types/jsonfile@6.1.3:
resolution: {integrity: sha512-/yqTk2SZ1wIezK0hiRZD7RuSf4B3whFxFamB1kGStv+8zlWScTMcHanzfc0XKWs5vA1TkHeckBlOyM8jxU8nHA==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
/@types/keygrip@1.0.2:
resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==}
@ -1554,7 +1575,7 @@ packages:
'@types/http-errors': 2.0.1
'@types/keygrip': 1.0.2
'@types/koa-compose': 3.2.5
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
/@types/mime-types@2.1.1:
@ -1579,8 +1600,10 @@ packages:
resolution: {integrity: sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==}
dev: true
/@types/node@20.6.3:
resolution: {integrity: sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==}
/@types/node@20.8.10:
resolution: {integrity: sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==}
dependencies:
undici-types: 5.26.5
/@types/parse5@6.0.3:
resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
@ -1609,7 +1632,7 @@ packages:
resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==}
dependencies:
'@types/mime': 1.3.2
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
/@types/serve-static@1.15.2:
@ -1617,7 +1640,7 @@ packages:
dependencies:
'@types/http-errors': 2.0.1
'@types/mime': 3.0.1
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
/@types/shortid@0.0.29:
@ -1644,15 +1667,16 @@ packages:
/@types/symbol-tree@3.2.2:
resolution: {integrity: sha512-+NcSHyA9K2EDHv3ny4wpbRSA+f+Tj0O7hIj7+w4tVw9yxqMavXwtFwuZEo3vyigTgOhGkrAUl3gj4oxAcyLfRQ==}
/@types/through2@2.0.38:
resolution: {integrity: sha512-YFu+nHmjxMurkH1BSzA0Z1WrKDAY8jUKPZctNQn7mc+/KKtp2XxnclHFXxdB1m7Iqnzb5aywgP8TMK283LezGQ==}
dependencies:
'@types/node': 20.6.3
/@types/through2@2.0.39:
resolution: {integrity: sha512-zhK74atBQ1pl1CNNYDpRJT8I6m794CsDGN0q8aDcQ7jvxlg1SVUy7gio7nOnYHMzhnGT0Vv4C53lw94MSWCeWA==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
/@types/through2@2.0.40:
resolution: {integrity: sha512-QeEwyeGxvtKjP0I/SR8pHtKMgmqotWTI8V/rNMTjbF3arWZJV/kYtbZXtwQKxUuV/oPSGkUilSspFKkTgCPTpA==}
dependencies:
'@types/node': 20.8.10
dev: true
/@types/trusted-types@2.0.4:
resolution: {integrity: sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==}
@ -1683,14 +1707,14 @@ packages:
/@types/ws@7.4.7:
resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
/@types/yauzl@2.10.0:
resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
/@types/yauzl@2.10.2:
resolution: {integrity: sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==}
requiresBuild: true
dependencies:
'@types/node': 20.6.3
'@types/node': 20.8.10
dev: true
optional: true
@ -2320,6 +2344,7 @@ packages:
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: true
/cors@2.8.5:
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
@ -2588,7 +2613,7 @@ packages:
dependencies:
'@types/cookie': 0.4.1
'@types/cors': 2.8.14
'@types/node': 20.6.3
'@types/node': 20.8.10
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.4.2
@ -2800,7 +2825,7 @@ packages:
get-stream: 5.2.0
yauzl: 2.10.0
optionalDependencies:
'@types/yauzl': 2.10.0
'@types/yauzl': 2.10.2
transitivePeerDependencies:
- supports-color
dev: true
@ -2956,6 +2981,7 @@ packages:
dependencies:
inherits: 2.0.4
readable-stream: 2.3.8
dev: true
/fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
@ -3042,15 +3068,15 @@ packages:
is-glob: 4.0.3
dev: true
/glob@10.3.5:
resolution: {integrity: sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==}
/glob@10.3.10:
resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
dependencies:
foreground-child: 3.1.1
jackspeak: 2.3.3
jackspeak: 2.3.6
minimatch: 9.0.3
minipass: 7.0.3
minipass: 7.0.4
path-scurry: 1.10.1
/glob@7.1.3:
@ -3510,6 +3536,7 @@ packages:
/isarray@1.0.0:
resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=}
dev: true
/isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
@ -3549,8 +3576,8 @@ packages:
istanbul-lib-report: 3.0.1
dev: true
/jackspeak@2.3.3:
resolution: {integrity: sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==}
/jackspeak@2.3.6:
resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
engines: {node: '>=14'}
dependencies:
'@isaacs/cliui': 8.0.2
@ -3972,8 +3999,8 @@ packages:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: true
/minipass@7.0.3:
resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==}
/minipass@7.0.4:
resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
engines: {node: '>=16 || 14 >=14.17'}
/mkdirp-classic@0.5.3:
@ -4064,8 +4091,8 @@ packages:
engines: {node: '>= 0.6'}
dev: true
/nise@5.1.4:
resolution: {integrity: sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==}
/nise@5.1.5:
resolution: {integrity: sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==}
dependencies:
'@sinonjs/commons': 2.0.0
'@sinonjs/fake-timers': 10.3.0
@ -4291,7 +4318,7 @@ packages:
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
lru-cache: 10.0.1
minipass: 7.0.3
minipass: 7.0.4
/path-to-regexp@0.1.7:
resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=}
@ -4376,6 +4403,7 @@ packages:
/process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: true
/progress@2.0.3:
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
@ -4508,6 +4536,7 @@ packages:
safe-buffer: 5.1.2
string_decoder: 1.1.1
util-deprecate: 1.0.2
dev: true
/readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
@ -4628,6 +4657,7 @@ packages:
/safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
dev: true
/safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
@ -4742,24 +4772,24 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
/sinon-chai@3.7.0(chai@4.3.8)(sinon@16.0.0):
/sinon-chai@3.7.0(chai@4.3.8)(sinon@17.0.1):
resolution: {integrity: sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==}
peerDependencies:
chai: ^4.0.0
sinon: '>=4.0.0'
dependencies:
chai: 4.3.8
sinon: 16.0.0
sinon: 17.0.1
dev: true
/sinon@16.0.0:
resolution: {integrity: sha512-B8AaZZm9CT5pqe4l4uWJztfD/mOTa7dL8Qo0W4+s+t74xECOgSZDDQCBjNgIK3+n4kyxQrSTv2V5ul8K25qkiQ==}
/sinon@17.0.1:
resolution: {integrity: sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==}
dependencies:
'@sinonjs/commons': 3.0.0
'@sinonjs/fake-timers': 10.3.0
'@sinonjs/fake-timers': 11.2.2
'@sinonjs/samsam': 8.0.0
diff: 5.1.0
nise: 5.1.4
nise: 5.1.5
supports-color: 7.2.0
dev: true
@ -4929,6 +4959,7 @@ packages:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
dependencies:
safe-buffer: 5.1.2
dev: true
/string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
@ -5087,7 +5118,7 @@ packages:
hasBin: true
dev: true
/ts-node@10.9.1(@types/node@20.6.3)(typescript@5.1.6):
/ts-node@10.9.1(@types/node@20.8.10)(typescript@5.1.6):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
@ -5106,7 +5137,7 @@ packages:
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 20.6.3
'@types/node': 20.8.10
acorn: 8.10.0
acorn-walk: 8.2.0
arg: 4.1.3
@ -5233,6 +5264,9 @@ packages:
through: 2.3.8
dev: true
/undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
/unicode-trie@0.3.1:
resolution: {integrity: sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=}
dependencies:

0
test/test.streamfile.ts Normal file
View File

View File

@ -64,7 +64,7 @@ tap.test('.fs.fileTreeToObject -> should read a file tree into an Object', async
path.resolve('./test/testassets/'),
'**/*.txt'
);
expect(fileArrayArg[0]).toBeInstanceOf(smartfile.Smartfile);
expect(fileArrayArg[0]).toBeInstanceOf(smartfile.SmartFile);
expect(fileArrayArg[0].contents.toString()).toEqual(fileArrayArg[0].contentBuffer.toString());
});
@ -175,7 +175,7 @@ tap.test('.Smartfile -> should produce vinyl compatible files', async () => {
'./test/testassets/testfolder/**/*'
);
const localSmartfile = smartfileArray[0];
expect(localSmartfile).toBeInstanceOf(smartfile.Smartfile);
expect(localSmartfile).toBeInstanceOf(smartfile.SmartFile);
expect(localSmartfile.contents).toBeInstanceOf(Buffer);
// tslint:disable-next-line:no-unused-expression
expect(localSmartfile.isBuffer()).toBeTrue();
@ -202,9 +202,9 @@ tap.test('should output a smartfile array to disk', async () => {
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');
const smartfileInstance = await smartfile.SmartFile.fromString(filePath, fileString, 'utf8');
smartfileInstance.write();
const smartfileInstance2 = await smartfile.Smartfile.fromFilePath(filePath);
const smartfileInstance2 = await smartfile.SmartFile.fromFilePath(filePath);
const retrievedString = smartfileInstance.contents.toString();
expect(retrievedString).toEqual(fileString);
});
@ -212,7 +212,7 @@ tap.test('should create, store and retrieve valid smartfiles', async () => {
tap.test('should get a hash', async () => {
const fileString = 'hi there';
const filePath = './test/testassets/utf8.txt';
const smartfileInstance = await smartfile.Smartfile.fromString(filePath, fileString, 'utf8');
const smartfileInstance = await smartfile.SmartFile.fromString(filePath, fileString, 'utf8');
const hash = await smartfileInstance.getHash();
console.log(hash);
});

View File

@ -1,6 +1,6 @@
import * as plugins from './smartfile.plugins.js';
import * as fs from './smartfile.fs.js';
import * as memory from './smartfile.memory.js';
import * as fs from './fs.js';
import * as memory from './memory.js';
export interface ISmartfileConstructorOptions {
path: string;
@ -9,10 +9,9 @@ export interface ISmartfileConstructorOptions {
}
/**
* class Smartfile
* -> is vinyl file compatible
* an vinyl file compatible in memory file class
*/
export class Smartfile extends plugins.smartjson.Smartjson {
export class SmartFile extends plugins.smartjson.Smartjson {
// ======
// STATIC
// ======
@ -24,7 +23,7 @@ export class Smartfile extends plugins.smartjson.Smartjson {
public static async fromFilePath(filePath: string, baseArg: string = process.cwd()) {
filePath = plugins.path.resolve(filePath);
const fileBuffer = fs.toBufferSync(filePath);
const smartfile = new Smartfile({
const smartfile = new SmartFile({
contentBuffer: fileBuffer,
base: baseArg,
path: plugins.path.relative(baseArg, filePath),
@ -37,7 +36,7 @@ export class Smartfile extends plugins.smartjson.Smartjson {
contentBufferArg: Buffer,
baseArg: string = process.cwd()
) {
const smartfile = new Smartfile({
const smartfile = new SmartFile({
contentBuffer: contentBufferArg,
base: baseArg,
path: plugins.path.relative(baseArg, filePath),
@ -52,7 +51,7 @@ export class Smartfile extends plugins.smartjson.Smartjson {
encodingArg: 'utf8' | 'binary',
baseArg = process.cwd()
) {
const smartfile = new Smartfile({
const smartfile = new SmartFile({
contentBuffer: Buffer.from(contentStringArg, encodingArg),
base: baseArg,
path: plugins.path.relative(baseArg, filePath),
@ -62,7 +61,7 @@ export class Smartfile extends plugins.smartjson.Smartjson {
}
public static async fromFoldedJson(foldedJsonArg: string) {
return new Smartfile(plugins.smartjson.parse(foldedJsonArg));
return new SmartFile(plugins.smartjson.parse(foldedJsonArg));
}
/**
@ -75,14 +74,14 @@ export class Smartfile extends plugins.smartjson.Smartjson {
stream: plugins.stream.Readable,
filePath: string,
baseArg: string = process.cwd()
): Promise<Smartfile> {
return new Promise<Smartfile>((resolve, reject) => {
): Promise<SmartFile> {
return new Promise<SmartFile>((resolve, reject) => {
const chunks: Buffer[] = [];
stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
stream.on('error', (error) => reject(error));
stream.on('end', () => {
const contentBuffer = Buffer.concat(chunks);
const smartfile = new Smartfile({
const smartfile = new SmartFile({
contentBuffer: contentBuffer,
base: baseArg,
path: plugins.path.relative(baseArg, filePath),

90
ts/classes.streamfile.ts Normal file
View File

@ -0,0 +1,90 @@
import * as plugins from './smartfile.plugins.js';
import * as fsStream from './fsstream.js';
import { Readable } from 'stream';
type StreamSource = () => Promise<Readable>;
/**
* The StreamFile class represents a file as a stream.
* It allows creating streams from a file path, a URL, or a buffer.
*/
export class StreamFile {
// INSTANCE
relativeFilePath?: string;
private streamSource: StreamSource;
private constructor(streamSource: StreamSource, relativeFilePath?: string) {
this.streamSource = streamSource;
this.relativeFilePath = relativeFilePath;
}
// STATIC
public static async fromPath(filePath: string): Promise<StreamFile> {
const streamSource = () => Promise.resolve(fsStream.createReadStream(filePath));
return new StreamFile(streamSource, filePath);
}
public static async fromUrl(url: string): Promise<StreamFile> {
const streamSource = async () => plugins.smartrequest.getStream(url); // Replace with actual plugin method
return new StreamFile(streamSource);
}
public static fromBuffer(buffer: Buffer, relativeFilePath?: string): StreamFile {
const streamSource = () => {
const stream = new Readable();
stream.push(buffer);
stream.push(null); // End of stream
return Promise.resolve(stream);
};
return new StreamFile(streamSource, relativeFilePath);
}
// METHODS
/**
* Creates a new readable stream from the source.
*/
public async createReadStream(): Promise<Readable> {
return this.streamSource();
}
/**
* Writes the stream to the disk at the specified path.
* @param filePathArg The file path where the stream should be written.
*/
public async writeToDisk(filePathArg: string): Promise<void> {
const readStream = await this.createReadStream();
const writeStream = fsStream.createWriteStream(filePathArg);
return new Promise((resolve, reject) => {
readStream.pipe(writeStream);
readStream.on('error', reject);
writeStream.on('error', reject);
writeStream.on('finish', resolve);
});
}
public async writeToDir(dirPathArg: string) {
const filePath = plugins.path.join(dirPathArg, this.relativeFilePath);
return this.writeToDisk(filePath);
}
public async getContentAsBuffer() {
const done = plugins.smartpromise.defer<Buffer>();
const readStream = await this.createReadStream();
const chunks: Buffer[] = [];
readStream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
readStream.on('error', done.reject);
readStream.on('end', () => {
const contentBuffer = Buffer.concat(chunks);
done.resolve(contentBuffer);
});
return done.promise;
}
public async getContentAsString(formatArg: 'utf8' | 'binary' = 'utf8') {
const contentBuffer = await this.getContentAsBuffer();
return contentBuffer.toString(formatArg);
}
}

View File

@ -1,11 +1,21 @@
import { Smartfile } from './smartfile.classes.smartfile.js';
import { SmartFile } from './classes.smartfile.js';
import * as plugins from './smartfile.plugins.js';
import * as fs from './smartfile.fs.js';
import * as fs from './fs.js';
export interface IVirtualDirectoryConstructorOptions {
mode: ''
}
/**
* a virtual directory exposes a fs api
*/
export class VirtualDirectory {
consstructor(options = {}) {
}
// STATIC
public static async fromFsDirPath(pathArg: string): Promise<VirtualDirectory> {
const newVirtualDir = new VirtualDirectory();
@ -18,17 +28,17 @@ export class VirtualDirectory {
): Promise<VirtualDirectory> {
const newVirtualDir = new VirtualDirectory();
for (const fileArg of virtualDirTransferableObjectArg.files) {
newVirtualDir.addSmartfiles([Smartfile.enfoldFromJson(fileArg) as Smartfile]);
newVirtualDir.addSmartfiles([SmartFile.enfoldFromJson(fileArg) as SmartFile]);
}
return newVirtualDir;
}
// INSTANCE
public smartfileArray: Smartfile[] = [];
public smartfileArray: SmartFile[] = [];
constructor() {}
public addSmartfiles(smartfileArrayArg: Smartfile[]) {
public addSmartfiles(smartfileArrayArg: SmartFile[]) {
this.smartfileArray = this.smartfileArray.concat(smartfileArrayArg);
}

View File

@ -1,9 +1,9 @@
import * as plugins from './smartfile.plugins.js';
import * as interpreter from './smartfile.interpreter.js';
import * as interpreter from './interpreter.js';
import { Smartfile } from './smartfile.classes.smartfile.js';
import { SmartFile } from './classes.smartfile.js';
import * as memory from './smartfile.memory.js';
import * as memory from './memory.js';
/*===============================================================
============================ Checks =============================
===============================================================*/
@ -258,7 +258,7 @@ export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: stri
}
const fileTree = await listFileTree(dirPath, miniMatchFilter);
const smartfileArray: Smartfile[] = [];
const smartfileArray: SmartFile[] = [];
for (const filePath of fileTree) {
const readPath = ((): string => {
if (!plugins.path.isAbsolute(filePath)) {
@ -271,7 +271,7 @@ export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: stri
// push a read file as Smartfile
smartfileArray.push(
new Smartfile({
new SmartFile({
contentBuffer: fileBuffer,
base: dirPath,
path: filePath,

View File

@ -1,11 +1,11 @@
import * as plugins from './smartfile.plugins.js';
import * as fsMod from './smartfile.fs.js';
import * as fsStreamMod from './smartfile.fsstream.js';
import * as interpreterMod from './smartfile.interpreter.js';
import * as memoryMod from './smartfile.memory.js';
import * as fsMod from './fs.js';
import * as fsStreamMod from './fsstream.js';
import * as interpreterMod from './interpreter.js';
import * as memoryMod from './memory.js';
export * from './smartfile.classes.smartfile.js';
export * from './smartfile.classes.virtualdirectory.js';
export * from './classes.smartfile.js';
export * from './classes.virtualdirectory.js';
export const fs = fsMod;
export const fsStream = fsStreamMod;

View File

@ -1,7 +1,8 @@
import * as plugins from './smartfile.plugins.js';
import { Smartfile } from './smartfile.classes.smartfile.js';
import * as smartfileFs from './smartfile.fs.js';
import * as interpreter from './smartfile.interpreter.js';
import { SmartFile } from './classes.smartfile.js';
import * as smartfileFs from './fs.js';
import * as interpreter from './interpreter.js';
import type { StreamFile } from './classes.streamfile.js';
/**
* converts file to Object
@ -24,7 +25,7 @@ export interface IToFsOptions {
* @param fileBaseArg
*/
export let toFs = async (
fileContentArg: string | Buffer | Smartfile,
fileContentArg: string | Buffer | SmartFile | StreamFile,
filePathArg: string,
optionsArg: IToFsOptions = {}
) => {
@ -41,7 +42,7 @@ export let toFs = async (
let filePath: string = filePathArg;
// handle Smartfile
if (fileContentArg instanceof Smartfile) {
if (fileContentArg instanceof SmartFile) {
fileContent = fileContentArg.contentBuffer;
// handle options
if (optionsArg.respectRelative) {
@ -83,7 +84,7 @@ export const toFsSync = (fileArg: string, filePathArg: string) => {
plugins.fsExtra.writeFileSync(filePath, fileString, { encoding: 'utf8' });
};
export let smartfileArrayToFs = async (smartfileArrayArg: Smartfile[], dirArg: string) => {
export let smartfileArrayToFs = async (smartfileArrayArg: SmartFile[], dirArg: string) => {
await smartfileFs.ensureDir(dirArg);
for (const smartfile of smartfileArrayArg) {
await toFs(smartfile, dirArg, {