Más contenido relacionado La actualidad más candente (17) Similar a It’s about time to embrace Streams (Node Ukraine 2019) (20) Más de Luciano Mammino (20) It’s about time to embrace Streams (Node Ukraine 2019)1. K Y I V 2 0 1 9
Luciano Mammino (@loige)
IT’S ABOUT TIME TOIT’S ABOUT TIME TO
EMBRACE STREAMSEMBRACE STREAMS
loige.link/streams-kyiv
May 18th
1
2. // buffer-copy.js
const {
readFileSync,
writeFileSync
} = require('fs')
const [,, src, dest] = process.argv
// read entire file content
const content = readFileSync(src)
// write that content somewhere else
writeFileSync(dest, content)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@loige2
3. // buffer-copy.js
const {
readFileSync,
writeFileSync
} = require('fs')
const [,, src, dest] = process.argv
// read entire file content
const content = readFileSync(src)
// write that content somewhere else
writeFileSync(dest, content)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const {
readFileSync,
writeFileSync
} = require('fs')
// buffer-copy.js1
2
3
4
5
6
7
const [,, src, dest] = process.argv8
9
// read entire file content10
const content = readFileSync(src)11
12
// write that content somewhere else13
writeFileSync(dest, content)14
@loige2
4. // buffer-copy.js
const {
readFileSync,
writeFileSync
} = require('fs')
const [,, src, dest] = process.argv
// read entire file content
const content = readFileSync(src)
// write that content somewhere else
writeFileSync(dest, content)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const {
readFileSync,
writeFileSync
} = require('fs')
// buffer-copy.js1
2
3
4
5
6
7
const [,, src, dest] = process.argv8
9
// read entire file content10
const content = readFileSync(src)11
12
// write that content somewhere else13
writeFileSync(dest, content)14
// read entire file content
const content = readFileSync(src)
// buffer-copy.js1
2
const {3
readFileSync,4
writeFileSync5
} = require('fs')6
7
const [,, src, dest] = process.argv8
9
10
11
12
// write that content somewhere else13
writeFileSync(dest, content)14
@loige2
5. // buffer-copy.js
const {
readFileSync,
writeFileSync
} = require('fs')
const [,, src, dest] = process.argv
// read entire file content
const content = readFileSync(src)
// write that content somewhere else
writeFileSync(dest, content)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const {
readFileSync,
writeFileSync
} = require('fs')
// buffer-copy.js1
2
3
4
5
6
7
const [,, src, dest] = process.argv8
9
// read entire file content10
const content = readFileSync(src)11
12
// write that content somewhere else13
writeFileSync(dest, content)14
// read entire file content
const content = readFileSync(src)
// buffer-copy.js1
2
const {3
readFileSync,4
writeFileSync5
} = require('fs')6
7
const [,, src, dest] = process.argv8
9
10
11
12
// write that content somewhere else13
writeFileSync(dest, content)14
// write that content somewhere else
writeFileSync(dest, content)
// buffer-copy.js1
2
const {3
readFileSync,4
writeFileSync5
} = require('fs')6
7
const [,, src, dest] = process.argv8
9
// read entire file content10
const content = readFileSync(src)11
12
13
14
@loige2
31. FILE COPY: FILE COPY: THE STREAM WAYTHE STREAM WAY
// stream-copy.js
const {
createReadStream,
createWriteStream
} = require('fs')
const [,, src, dest] = process.argv
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
srcStream.on('data', (data) => destStream.write(data))
1
2
3
4
5
6
7
8
9
10
11
createReadStream,
createWriteStream
// stream-copy.js1
2
const {3
4
5
} = require('fs')6
7
const [,, src, dest] = process.argv8
const srcStream = createReadStream(src)9
const destStream = createWriteStream(dest)10
srcStream.on('data', (data) => destStream.write(data))11
@loige
* Careful: this implementation is not optimal
*
17
32. FILE COPY: FILE COPY: THE STREAM WAYTHE STREAM WAY
// stream-copy.js
const {
createReadStream,
createWriteStream
} = require('fs')
const [,, src, dest] = process.argv
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
srcStream.on('data', (data) => destStream.write(data))
1
2
3
4
5
6
7
8
9
10
11
createReadStream,
createWriteStream
// stream-copy.js1
2
const {3
4
5
} = require('fs')6
7
const [,, src, dest] = process.argv8
const srcStream = createReadStream(src)9
const destStream = createWriteStream(dest)10
srcStream.on('data', (data) => destStream.write(data))11
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
// stream-copy.js1
2
const {3
createReadStream,4
createWriteStream5
} = require('fs')6
7
const [,, src, dest] = process.argv8
9
10
srcStream.on('data', (data) => destStream.write(data))11
@loige
* Careful: this implementation is not optimal
*
17
33. FILE COPY: FILE COPY: THE STREAM WAYTHE STREAM WAY
// stream-copy.js
const {
createReadStream,
createWriteStream
} = require('fs')
const [,, src, dest] = process.argv
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
srcStream.on('data', (data) => destStream.write(data))
1
2
3
4
5
6
7
8
9
10
11
createReadStream,
createWriteStream
// stream-copy.js1
2
const {3
4
5
} = require('fs')6
7
const [,, src, dest] = process.argv8
const srcStream = createReadStream(src)9
const destStream = createWriteStream(dest)10
srcStream.on('data', (data) => destStream.write(data))11
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
// stream-copy.js1
2
const {3
createReadStream,4
createWriteStream5
} = require('fs')6
7
const [,, src, dest] = process.argv8
9
10
srcStream.on('data', (data) => destStream.write(data))11 srcStream.on('data', (data) => destStream.write(data))
// stream-copy.js1
2
const {3
createReadStream,4
createWriteStream5
} = require('fs')6
7
const [,, src, dest] = process.argv8
const srcStream = createReadStream(src)9
const destStream = createWriteStream(dest)10
11
@loige
* Careful: this implementation is not optimal
*
17
52. // count-emojis-flowing.js
const { createReadStream } = require('fs')
const { EMOJI_MAP } = require('emoji') // from npm
const emojis = Object.keys(EMOJI_MAP)
const file = createReadStream(process.argv[2])
let counter = 0
file.on('data', chunk => {
for (let char of chunk.toString('utf8')) {
if (emojis.includes(char)) {
counter++
}
}
})
file.on('end', () => console.log(`Found ${counter} emojis`))
file.on('error', err => console.error(`Error reading file: ${err}`))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@loige36
53. // count-emojis-flowing.js
const { createReadStream } = require('fs')
const { EMOJI_MAP } = require('emoji') // from npm
const emojis = Object.keys(EMOJI_MAP)
const file = createReadStream(process.argv[2])
let counter = 0
file.on('data', chunk => {
for (let char of chunk.toString('utf8')) {
if (emojis.includes(char)) {
counter++
}
}
})
file.on('end', () => console.log(`Found ${counter} emojis`))
file.on('error', err => console.error(`Error reading file: ${err}`))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const { EMOJI_MAP } = require('emoji') // from npm
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
@loige36
54. // count-emojis-flowing.js
const { createReadStream } = require('fs')
const { EMOJI_MAP } = require('emoji') // from npm
const emojis = Object.keys(EMOJI_MAP)
const file = createReadStream(process.argv[2])
let counter = 0
file.on('data', chunk => {
for (let char of chunk.toString('utf8')) {
if (emojis.includes(char)) {
counter++
}
}
})
file.on('end', () => console.log(`Found ${counter} emojis`))
file.on('error', err => console.error(`Error reading file: ${err}`))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const { EMOJI_MAP } = require('emoji') // from npm
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
const file = createReadStream(process.argv[2])
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
@loige36
55. // count-emojis-flowing.js
const { createReadStream } = require('fs')
const { EMOJI_MAP } = require('emoji') // from npm
const emojis = Object.keys(EMOJI_MAP)
const file = createReadStream(process.argv[2])
let counter = 0
file.on('data', chunk => {
for (let char of chunk.toString('utf8')) {
if (emojis.includes(char)) {
counter++
}
}
})
file.on('end', () => console.log(`Found ${counter} emojis`))
file.on('error', err => console.error(`Error reading file: ${err}`))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const { EMOJI_MAP } = require('emoji') // from npm
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
const file = createReadStream(process.argv[2])
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
let counter = 0
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
9
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
@loige36
56. // count-emojis-flowing.js
const { createReadStream } = require('fs')
const { EMOJI_MAP } = require('emoji') // from npm
const emojis = Object.keys(EMOJI_MAP)
const file = createReadStream(process.argv[2])
let counter = 0
file.on('data', chunk => {
for (let char of chunk.toString('utf8')) {
if (emojis.includes(char)) {
counter++
}
}
})
file.on('end', () => console.log(`Found ${counter} emojis`))
file.on('error', err => console.error(`Error reading file: ${err}`))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const { EMOJI_MAP } = require('emoji') // from npm
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
const file = createReadStream(process.argv[2])
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
let counter = 0
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
9
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
file.on('data', chunk => {
})
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
@loige36
57. // count-emojis-flowing.js
const { createReadStream } = require('fs')
const { EMOJI_MAP } = require('emoji') // from npm
const emojis = Object.keys(EMOJI_MAP)
const file = createReadStream(process.argv[2])
let counter = 0
file.on('data', chunk => {
for (let char of chunk.toString('utf8')) {
if (emojis.includes(char)) {
counter++
}
}
})
file.on('end', () => console.log(`Found ${counter} emojis`))
file.on('error', err => console.error(`Error reading file: ${err}`))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const { EMOJI_MAP } = require('emoji') // from npm
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
const file = createReadStream(process.argv[2])
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
let counter = 0
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
9
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
file.on('data', chunk => {
})
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
for (let char of chunk.toString('utf8')) {
}
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
file.on('data', chunk => {11
12
if (emojis.includes(char)) {13
counter++14
}15
16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
@loige36
58. // count-emojis-flowing.js
const { createReadStream } = require('fs')
const { EMOJI_MAP } = require('emoji') // from npm
const emojis = Object.keys(EMOJI_MAP)
const file = createReadStream(process.argv[2])
let counter = 0
file.on('data', chunk => {
for (let char of chunk.toString('utf8')) {
if (emojis.includes(char)) {
counter++
}
}
})
file.on('end', () => console.log(`Found ${counter} emojis`))
file.on('error', err => console.error(`Error reading file: ${err}`))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const { EMOJI_MAP } = require('emoji') // from npm
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
const file = createReadStream(process.argv[2])
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
let counter = 0
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
9
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
file.on('data', chunk => {
})
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
11
for (let char of chunk.toString('utf8')) {12
if (emojis.includes(char)) {13
counter++14
}15
}16
17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
for (let char of chunk.toString('utf8')) {
}
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
file.on('data', chunk => {11
12
if (emojis.includes(char)) {13
counter++14
}15
16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
if (emojis.includes(char)) {
counter++
}
// count-emojis-flowing.js1
2
const { createReadStream } = require('fs')3
const { EMOJI_MAP } = require('emoji') // from npm4
5
const emojis = Object.keys(EMOJI_MAP)6
7
const file = createReadStream(process.argv[2])8
let counter = 09
10
file.on('data', chunk => {11
for (let char of chunk.toString('utf8')) {12
13
14
15
}16
})17
file.on('end', () => console.log(`Found ${counter} emojis`))18
file.on('error', err => console.error(`Error reading file: ${err}`))19
@loige36
61. // count-emojis-async-iterator.js
const { createReadStream } = require('fs')
const { EMOJI_MAP } = require('emoji') // from npm
async function main () {
const emojis = Object.keys(EMOJI_MAP)
const file = createReadStream(process.argv[2])
let counter = 0
for await (let chunk of file) {
for (let char of chunk.toString('utf8')) {
if (emojis.includes(char)) {
counter++
}
}
}
console.log(`Found ${counter} emojis`)
}
main()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 @loige39
62. // count-emojis-async-iterator.js
const { createReadStream } = require('fs')
const { EMOJI_MAP } = require('emoji') // from npm
async function main () {
const emojis = Object.keys(EMOJI_MAP)
const file = createReadStream(process.argv[2])
let counter = 0
for await (let chunk of file) {
for (let char of chunk.toString('utf8')) {
if (emojis.includes(char)) {
counter++
}
}
}
console.log(`Found ${counter} emojis`)
}
main()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for await (let chunk of file) {
}
// count-emojis-async-iterator.js1
const { createReadStream } = require('fs')2
const { EMOJI_MAP } = require('emoji') // from npm3
4
async function main () {5
const emojis = Object.keys(EMOJI_MAP)6
const file = createReadStream(process.argv[2])7
let counter = 08
9
10
for (let char of chunk.toString('utf8')) {11
if (emojis.includes(char)) {12
counter++13
}14
}15
16
17
console.log(`Found ${counter} emojis`)18
}19
20
main()21 @loige39
63. // count-emojis-async-iterator.js
const { createReadStream } = require('fs')
const { EMOJI_MAP } = require('emoji') // from npm
async function main () {
const emojis = Object.keys(EMOJI_MAP)
const file = createReadStream(process.argv[2])
let counter = 0
for await (let chunk of file) {
for (let char of chunk.toString('utf8')) {
if (emojis.includes(char)) {
counter++
}
}
}
console.log(`Found ${counter} emojis`)
}
main()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for await (let chunk of file) {
}
// count-emojis-async-iterator.js1
const { createReadStream } = require('fs')2
const { EMOJI_MAP } = require('emoji') // from npm3
4
async function main () {5
const emojis = Object.keys(EMOJI_MAP)6
const file = createReadStream(process.argv[2])7
let counter = 08
9
10
for (let char of chunk.toString('utf8')) {11
if (emojis.includes(char)) {12
counter++13
}14
}15
16
17
console.log(`Found ${counter} emojis`)18
}19
20
main()21
async function main () {
}
// count-emojis-async-iterator.js1
const { createReadStream } = require('fs')2
const { EMOJI_MAP } = require('emoji') // from npm3
4
5
const emojis = Object.keys(EMOJI_MAP)6
const file = createReadStream(process.argv[2])7
let counter = 08
9
for await (let chunk of file) {10
for (let char of chunk.toString('utf8')) {11
if (emojis.includes(char)) {12
counter++13
}14
}15
}16
17
console.log(`Found ${counter} emojis`)18
19
20
main()21 @loige39
65. // writable-http-request.js
const http = require('http')
const req = http.request(
{
hostname: 'enx6b07hdu6cs.x.pipedream.net',
method: 'POST'
},
resp => {
console.log(`Server responded with "${resp.statusCode}"`)
}
)
req.on('finish', () => console.log('request sent'))
req.on('close', () => console.log('Connection closed'))
req.on('error', err => console.error(`Request failed: ${err}`))
req.write('writing some content...n')
req.end('last write & close the stream')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@loige41
66. // writable-http-request.js
const http = require('http')
const req = http.request(
{
hostname: 'enx6b07hdu6cs.x.pipedream.net',
method: 'POST'
},
resp => {
console.log(`Server responded with "${resp.statusCode}"`)
}
)
req.on('finish', () => console.log('request sent'))
req.on('close', () => console.log('Connection closed'))
req.on('error', err => console.error(`Request failed: ${err}`))
req.write('writing some content...n')
req.end('last write & close the stream')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const req = http.request(
)
// writable-http-request.js1
const http = require('http')2
3
4
{5
hostname: 'enx6b07hdu6cs.x.pipedream.net',6
method: 'POST'7
},8
resp => {9
console.log(`Server responded with "${resp.statusCode}"`)10
}11
12
13
req.on('finish', () => console.log('request sent'))14
req.on('close', () => console.log('Connection closed'))15
req.on('error', err => console.error(`Request failed: ${err}`))16
17
req.write('writing some content...n')18
req.end('last write & close the stream')19
@loige41
67. // writable-http-request.js
const http = require('http')
const req = http.request(
{
hostname: 'enx6b07hdu6cs.x.pipedream.net',
method: 'POST'
},
resp => {
console.log(`Server responded with "${resp.statusCode}"`)
}
)
req.on('finish', () => console.log('request sent'))
req.on('close', () => console.log('Connection closed'))
req.on('error', err => console.error(`Request failed: ${err}`))
req.write('writing some content...n')
req.end('last write & close the stream')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const req = http.request(
)
// writable-http-request.js1
const http = require('http')2
3
4
{5
hostname: 'enx6b07hdu6cs.x.pipedream.net',6
method: 'POST'7
},8
resp => {9
console.log(`Server responded with "${resp.statusCode}"`)10
}11
12
13
req.on('finish', () => console.log('request sent'))14
req.on('close', () => console.log('Connection closed'))15
req.on('error', err => console.error(`Request failed: ${err}`))16
17
req.write('writing some content...n')18
req.end('last write & close the stream')19
req.on('finish', () => console.log('request sent'))
req.on('close', () => console.log('Connection closed'))
req.on('error', err => console.error(`Request failed: ${err}`))
// writable-http-request.js1
const http = require('http')2
3
const req = http.request(4
{5
hostname: 'enx6b07hdu6cs.x.pipedream.net',6
method: 'POST'7
},8
resp => {9
console.log(`Server responded with "${resp.statusCode}"`)10
}11
)12
13
14
15
16
17
req.write('writing some content...n')18
req.end('last write & close the stream')19
@loige41
68. // writable-http-request.js
const http = require('http')
const req = http.request(
{
hostname: 'enx6b07hdu6cs.x.pipedream.net',
method: 'POST'
},
resp => {
console.log(`Server responded with "${resp.statusCode}"`)
}
)
req.on('finish', () => console.log('request sent'))
req.on('close', () => console.log('Connection closed'))
req.on('error', err => console.error(`Request failed: ${err}`))
req.write('writing some content...n')
req.end('last write & close the stream')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const req = http.request(
)
// writable-http-request.js1
const http = require('http')2
3
4
{5
hostname: 'enx6b07hdu6cs.x.pipedream.net',6
method: 'POST'7
},8
resp => {9
console.log(`Server responded with "${resp.statusCode}"`)10
}11
12
13
req.on('finish', () => console.log('request sent'))14
req.on('close', () => console.log('Connection closed'))15
req.on('error', err => console.error(`Request failed: ${err}`))16
17
req.write('writing some content...n')18
req.end('last write & close the stream')19
req.on('finish', () => console.log('request sent'))
req.on('close', () => console.log('Connection closed'))
req.on('error', err => console.error(`Request failed: ${err}`))
// writable-http-request.js1
const http = require('http')2
3
const req = http.request(4
{5
hostname: 'enx6b07hdu6cs.x.pipedream.net',6
method: 'POST'7
},8
resp => {9
console.log(`Server responded with "${resp.statusCode}"`)10
}11
)12
13
14
15
16
17
req.write('writing some content...n')18
req.end('last write & close the stream')19
req.write('writing some content...n')
req.end('last write & close the stream')
// writable-http-request.js1
const http = require('http')2
3
const req = http.request(4
{5
hostname: 'enx6b07hdu6cs.x.pipedream.net',6
method: 'POST'7
},8
resp => {9
console.log(`Server responded with "${resp.statusCode}"`)10
}11
)12
13
req.on('finish', () => console.log('request sent'))14
req.on('close', () => console.log('Connection closed'))15
req.on('error', err => console.error(`Request failed: ${err}`))16
17
18
19
@loige41
72. // stream-copy-safe.js
const { createReadStream, createWriteStream } = require('fs')
const [, , src, dest] = process.argv
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
srcStream.on('data', data => {
const canContinue = destStream.write(data)
if (!canContinue) {
// we are overflowing the destination, we should pause
srcStream.pause()
// we will resume when the destination stream is drained
destStream.once('drain', () => srcStream.resume())
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@loige45
73. // stream-copy-safe.js
const { createReadStream, createWriteStream } = require('fs')
const [, , src, dest] = process.argv
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
srcStream.on('data', data => {
const canContinue = destStream.write(data)
if (!canContinue) {
// we are overflowing the destination, we should pause
srcStream.pause()
// we will resume when the destination stream is drained
destStream.once('drain', () => srcStream.resume())
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const canContinue = destStream.write(data)
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
10
if (!canContinue) {11
// we are overflowing the destination, we should pause12
srcStream.pause()13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
}16
})17
@loige45
74. // stream-copy-safe.js
const { createReadStream, createWriteStream } = require('fs')
const [, , src, dest] = process.argv
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
srcStream.on('data', data => {
const canContinue = destStream.write(data)
if (!canContinue) {
// we are overflowing the destination, we should pause
srcStream.pause()
// we will resume when the destination stream is drained
destStream.once('drain', () => srcStream.resume())
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const canContinue = destStream.write(data)
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
10
if (!canContinue) {11
// we are overflowing the destination, we should pause12
srcStream.pause()13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
}16
})17
if (!canContinue) {
}
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
const canContinue = destStream.write(data)10
11
// we are overflowing the destination, we should pause12
srcStream.pause()13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
16
})17
@loige45
75. // stream-copy-safe.js
const { createReadStream, createWriteStream } = require('fs')
const [, , src, dest] = process.argv
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
srcStream.on('data', data => {
const canContinue = destStream.write(data)
if (!canContinue) {
// we are overflowing the destination, we should pause
srcStream.pause()
// we will resume when the destination stream is drained
destStream.once('drain', () => srcStream.resume())
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const canContinue = destStream.write(data)
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
10
if (!canContinue) {11
// we are overflowing the destination, we should pause12
srcStream.pause()13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
}16
})17
if (!canContinue) {
}
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
const canContinue = destStream.write(data)10
11
// we are overflowing the destination, we should pause12
srcStream.pause()13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
16
})17
// we are overflowing the destination, we should pause
srcStream.pause()
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
const canContinue = destStream.write(data)10
if (!canContinue) {11
12
13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
}16
})17
@loige45
76. // stream-copy-safe.js
const { createReadStream, createWriteStream } = require('fs')
const [, , src, dest] = process.argv
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
srcStream.on('data', data => {
const canContinue = destStream.write(data)
if (!canContinue) {
// we are overflowing the destination, we should pause
srcStream.pause()
// we will resume when the destination stream is drained
destStream.once('drain', () => srcStream.resume())
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const canContinue = destStream.write(data)
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
10
if (!canContinue) {11
// we are overflowing the destination, we should pause12
srcStream.pause()13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
}16
})17
if (!canContinue) {
}
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
const canContinue = destStream.write(data)10
11
// we are overflowing the destination, we should pause12
srcStream.pause()13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
16
})17
// we are overflowing the destination, we should pause
srcStream.pause()
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
const canContinue = destStream.write(data)10
if (!canContinue) {11
12
13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
}16
})17
// we will resume when the destination stream is drained
destStream.once('drain', () => srcStream.resume())
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
const canContinue = destStream.write(data)10
if (!canContinue) {11
// we are overflowing the destination, we should pause12
srcStream.pause()13
14
15
}16
})17
@loige45
77. // stream-copy-safe.js
const { createReadStream, createWriteStream } = require('fs')
const [, , src, dest] = process.argv
const srcStream = createReadStream(src)
const destStream = createWriteStream(dest)
srcStream.on('data', data => {
const canContinue = destStream.write(data)
if (!canContinue) {
// we are overflowing the destination, we should pause
srcStream.pause()
// we will resume when the destination stream is drained
destStream.once('drain', () => srcStream.resume())
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const canContinue = destStream.write(data)
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
10
if (!canContinue) {11
// we are overflowing the destination, we should pause12
srcStream.pause()13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
}16
})17
if (!canContinue) {
}
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
const canContinue = destStream.write(data)10
11
// we are overflowing the destination, we should pause12
srcStream.pause()13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
16
})17
// we are overflowing the destination, we should pause
srcStream.pause()
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
const canContinue = destStream.write(data)10
if (!canContinue) {11
12
13
// we will resume when the destination stream is drained14
destStream.once('drain', () => srcStream.resume())15
}16
})17
// we will resume when the destination stream is drained
destStream.once('drain', () => srcStream.resume())
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
const canContinue = destStream.write(data)10
if (!canContinue) {11
// we are overflowing the destination, we should pause12
srcStream.pause()13
14
15
}16
})17
const canContinue = destStream.write(data)
if (!canContinue) {
// we are overflowing the destination, we should pause
srcStream.pause()
// we will resume when the destination stream is drained
destStream.once('drain', () => srcStream.resume())
}
// stream-copy-safe.js1
2
const { createReadStream, createWriteStream } = require('fs')3
4
const [, , src, dest] = process.argv5
const srcStream = createReadStream(src)6
const destStream = createWriteStream(dest)7
8
srcStream.on('data', data => {9
10
11
12
13
14
15
16
})17
@loige45
101. gzipStream.on('data', data => {
const canContinue = destStream.write(data)
if (!canContinue) {
gzipStream.pause()
destStream.once('drain', () => {
gzipStream.resume()
})
}
})
gzipStream.on('end', () => {
destStream.end()
})
// ⚠ TODO: handle errors!
// stream-copy-gzip.js
const {
createReadStream,
createWriteStream
} = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
const srcStream = createReadStream(src)
const gzipStream = createGzip()
const destStream = createWriteStream(dest)
srcStream.on('data', data => {
const canContinue = gzipStream.write(data)
if (!canContinue) {
srcStream.pause()
gzipStream.once('drain', () => {
srcStream.resume()
})
}
})
srcStream.on('end', () => {
// check if there's buffered data left
const remainingData = gzipStream.read()
if (remainingData !== null) {
destStream.write()
}
gzipStream.end()
})
@loige50
102. gzipStream.on('data', data => {
const canContinue = destStream.write(data)
if (!canContinue) {
gzipStream.pause()
destStream.once('drain', () => {
gzipStream.resume()
})
}
})
gzipStream.on('end', () => {
destStream.end()
})
// ⚠ TODO: handle errors!
// stream-copy-gzip.js
const {
createReadStream,
createWriteStream
} = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
const srcStream = createReadStream(src)
const gzipStream = createGzip()
const destStream = createWriteStream(dest)
srcStream.on('data', data => {
const canContinue = gzipStream.write(data)
if (!canContinue) {
srcStream.pause()
gzipStream.once('drain', () => {
srcStream.resume()
})
}
})
srcStream.on('end', () => {
// check if there's buffered data left
const remainingData = gzipStream.read()
if (remainingData !== null) {
destStream.write()
}
gzipStream.end()
})
@loige50
105. // stream-copy-gzip-pipe.js
const {
createReadStream,
createWriteStream
} = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
const srcStream = createReadStream(src)
const gzipStream = createGzip()
const destStream = createWriteStream(dest)
srcStream
.pipe(gzipStream)
.pipe(destStream)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@loige53
106. // stream-copy-gzip-pipe.js
const {
createReadStream,
createWriteStream
} = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
const srcStream = createReadStream(src)
const gzipStream = createGzip()
const destStream = createWriteStream(dest)
srcStream
.pipe(gzipStream)
.pipe(destStream)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
srcStream
.pipe(gzipStream)
.pipe(destStream)
// stream-copy-gzip-pipe.js1
2
const {3
createReadStream,4
createWriteStream5
} = require('fs')6
const { createGzip } = require('zlib')7
8
const [, , src, dest] = process.argv9
const srcStream = createReadStream(src)10
const gzipStream = createGzip()11
const destStream = createWriteStream(dest)12
13
14
15
16
@loige53
109. readable
.on('error', handleErr)
.pipe(decompress)
.on('error', handleErr)
.pipe(decrypt)
.on('error', handleErr)
.pipe(convert)
.on('error', handleErr)
.pipe(encrypt)
.on('error', handleErr)
.pipe(compress)
.on('error', handleErr)
.pipe(writeToDisk)
.on('error', handleErr)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
readable
.pipe(decompress)
.pipe(decrypt)
.pipe(convert)
.pipe(encrypt)
.pipe(compress)
.pipe(writeToDisk)
1
.on('error', handleErr)2
3
.on('error', handleErr)4
5
.on('error', handleErr)6
7
.on('error', handleErr)8
9
.on('error', handleErr)10
11
.on('error', handleErr)12
13
.on('error', handleErr)14
Handling errors (correctly)
@loige55
110. readable
.on('error', handleErr)
.pipe(decompress)
.on('error', handleErr)
.pipe(decrypt)
.on('error', handleErr)
.pipe(convert)
.on('error', handleErr)
.pipe(encrypt)
.on('error', handleErr)
.pipe(compress)
.on('error', handleErr)
.pipe(writeToDisk)
.on('error', handleErr)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
readable
.pipe(decompress)
.pipe(decrypt)
.pipe(convert)
.pipe(encrypt)
.pipe(compress)
.pipe(writeToDisk)
1
.on('error', handleErr)2
3
.on('error', handleErr)4
5
.on('error', handleErr)6
7
.on('error', handleErr)8
9
.on('error', handleErr)10
11
.on('error', handleErr)12
13
.on('error', handleErr)14
.on('error', handleErr)
.on('error', handleErr)
.on('error', handleErr)
.on('error', handleErr)
.on('error', handleErr)
.on('error', handleErr)
.on('error', handleErr)
readable1
2
.pipe(decompress)3
4
.pipe(decrypt)5
6
.pipe(convert)7
8
.pipe(encrypt)9
10
.pipe(compress)11
12
.pipe(writeToDisk)13
14
Handling errors (correctly)
@loige
handleErr should end and destroy the streams
(it doesn't happen automatically)
55
111. readable
.on('error', handleErr)
.pipe(decompress)
.on('error', handleErr)
.pipe(decrypt)
.on('error', handleErr)
.pipe(convert)
.on('error', handleErr)
.pipe(encrypt)
.on('error', handleErr)
.pipe(compress)
.on('error', handleErr)
.pipe(writeToDisk)
.on('error', handleErr)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
readable
.pipe(decompress)
.pipe(decrypt)
.pipe(convert)
.pipe(encrypt)
.pipe(compress)
.pipe(writeToDisk)
1
.on('error', handleErr)2
3
.on('error', handleErr)4
5
.on('error', handleErr)6
7
.on('error', handleErr)8
9
.on('error', handleErr)10
11
.on('error', handleErr)12
13
.on('error', handleErr)14
.on('error', handleErr)
.on('error', handleErr)
.on('error', handleErr)
.on('error', handleErr)
.on('error', handleErr)
.on('error', handleErr)
.on('error', handleErr)
readable1
2
.pipe(decompress)3
4
.pipe(decrypt)5
6
.pipe(convert)7
8
.pipe(encrypt)9
10
.pipe(compress)11
12
.pipe(writeToDisk)13
14
Handling errors (correctly)
@loige
handleErr should end and destroy the streams
(it doesn't happen automatically)
55
113. // stream-copy-gzip-pipeline.js
const { pipeline } = require('stream')
const { createReadStream, createWriteStream } = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
pipeline(
createReadStream(src),
createGzip(),
createWriteStream(dest),
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
console.log('Done!')
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
stream.pipeline(...streams, callback) - Node.js 10+
@loige57
114. // stream-copy-gzip-pipeline.js
const { pipeline } = require('stream')
const { createReadStream, createWriteStream } = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
pipeline(
createReadStream(src),
createGzip(),
createWriteStream(dest),
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
console.log('Done!')
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const { pipeline } = require('stream')
pipeline(
)
// stream-copy-gzip-pipeline.js1
2
3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
9
createReadStream(src),10
createGzip(),11
createWriteStream(dest),12
function onEnd (err) {13
if (err) {14
console.error(`Error: ${err}`)15
process.exit(1)16
}17
18
console.log('Done!')19
}20
21
stream.pipeline(...streams, callback) - Node.js 10+
@loige57
115. // stream-copy-gzip-pipeline.js
const { pipeline } = require('stream')
const { createReadStream, createWriteStream } = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
pipeline(
createReadStream(src),
createGzip(),
createWriteStream(dest),
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
console.log('Done!')
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const { pipeline } = require('stream')
pipeline(
)
// stream-copy-gzip-pipeline.js1
2
3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
9
createReadStream(src),10
createGzip(),11
createWriteStream(dest),12
function onEnd (err) {13
if (err) {14
console.error(`Error: ${err}`)15
process.exit(1)16
}17
18
console.log('Done!')19
}20
21
createReadStream(src),
createGzip(),
createWriteStream(dest),
// stream-copy-gzip-pipeline.js1
2
const { pipeline } = require('stream')3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
pipeline(9
10
11
12
function onEnd (err) {13
if (err) {14
console.error(`Error: ${err}`)15
process.exit(1)16
}17
18
console.log('Done!')19
}20
)21
stream.pipeline(...streams, callback) - Node.js 10+
@loige
You can pass multiple streams (they will be piped)
57
116. // stream-copy-gzip-pipeline.js
const { pipeline } = require('stream')
const { createReadStream, createWriteStream } = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
pipeline(
createReadStream(src),
createGzip(),
createWriteStream(dest),
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
console.log('Done!')
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const { pipeline } = require('stream')
pipeline(
)
// stream-copy-gzip-pipeline.js1
2
3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
9
createReadStream(src),10
createGzip(),11
createWriteStream(dest),12
function onEnd (err) {13
if (err) {14
console.error(`Error: ${err}`)15
process.exit(1)16
}17
18
console.log('Done!')19
}20
21
createReadStream(src),
createGzip(),
createWriteStream(dest),
// stream-copy-gzip-pipeline.js1
2
const { pipeline } = require('stream')3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
pipeline(9
10
11
12
function onEnd (err) {13
if (err) {14
console.error(`Error: ${err}`)15
process.exit(1)16
}17
18
console.log('Done!')19
}20
)21
function onEnd (err) {
}
// stream-copy-gzip-pipeline.js1
2
const { pipeline } = require('stream')3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
pipeline(9
createReadStream(src),10
createGzip(),11
createWriteStream(dest),12
13
if (err) {14
console.error(`Error: ${err}`)15
process.exit(1)16
}17
18
console.log('Done!')19
20
)21
stream.pipeline(...streams, callback) - Node.js 10+
@loige
You can pass multiple streams (they will be piped)
57
117. // stream-copy-gzip-pipeline.js
const { pipeline } = require('stream')
const { createReadStream, createWriteStream } = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
pipeline(
createReadStream(src),
createGzip(),
createWriteStream(dest),
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
console.log('Done!')
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const { pipeline } = require('stream')
pipeline(
)
// stream-copy-gzip-pipeline.js1
2
3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
9
createReadStream(src),10
createGzip(),11
createWriteStream(dest),12
function onEnd (err) {13
if (err) {14
console.error(`Error: ${err}`)15
process.exit(1)16
}17
18
console.log('Done!')19
}20
21
createReadStream(src),
createGzip(),
createWriteStream(dest),
// stream-copy-gzip-pipeline.js1
2
const { pipeline } = require('stream')3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
pipeline(9
10
11
12
function onEnd (err) {13
if (err) {14
console.error(`Error: ${err}`)15
process.exit(1)16
}17
18
console.log('Done!')19
}20
)21
function onEnd (err) {
}
// stream-copy-gzip-pipeline.js1
2
const { pipeline } = require('stream')3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
pipeline(9
createReadStream(src),10
createGzip(),11
createWriteStream(dest),12
13
if (err) {14
console.error(`Error: ${err}`)15
process.exit(1)16
}17
18
console.log('Done!')19
20
)21
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
console.log('Done!')
// stream-copy-gzip-pipeline.js1
2
const { pipeline } = require('stream')3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
pipeline(9
createReadStream(src),10
createGzip(),11
createWriteStream(dest),12
function onEnd (err) {13
14
15
16
17
18
19
}20
)21
stream.pipeline(...streams, callback) - Node.js 10+
@loige
You can pass multiple streams (they will be piped)
The last argument is a callback. If invoked with an
error, it means the pipeline failed at some point.
All the streams are ended and destroyed correctly.
57
118. // stream-copy-gzip-pump.js
const pump = require('pump') // from npm
const { createReadStream, createWriteStream } = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
pump( // just swap pipeline with pump!
createReadStream(src),
createGzip(),
createWriteStream(dest),
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
console.log('Done!')
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
For Node.js < 10: pump - npm.im/pump
@loige58
119. // stream-copy-gzip-pump.js
const pump = require('pump') // from npm
const { createReadStream, createWriteStream } = require('fs')
const { createGzip } = require('zlib')
const [, , src, dest] = process.argv
pump( // just swap pipeline with pump!
createReadStream(src),
createGzip(),
createWriteStream(dest),
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
console.log('Done!')
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const pump = require('pump') // from npm
pump( // just swap pipeline with pump!
)
// stream-copy-gzip-pump.js1
2
3
const { createReadStream, createWriteStream } = require('fs')4
const { createGzip } = require('zlib')5
6
const [, , src, dest] = process.argv7
8
9
createReadStream(src),10
createGzip(),11
createWriteStream(dest),12
function onEnd (err) {13
if (err) {14
console.error(`Error: ${err}`)15
process.exit(1)16
}17
18
console.log('Done!')19
}20
21
For Node.js < 10: pump - npm.im/pump
@loige58
121. // encgz-stream.js - utility library
const {
createCipheriv,
createDecipheriv,
randomBytes,
createHash
} = require('crypto')
const { createGzip, createGunzip } = require('zlib')
const pumpify = require('pumpify') // from npm
// calculates md5 of the secret (trimmed)
function getChiperKey (secret) {}
function createEncgz (secret) {
const initVect = randomBytes(16)
const cipherKey = getChiperKey(secret)
const encryptStream = createCipheriv('aes256', cipherKey, initVect)
const gzipStream = createGzip()
const stream = pumpify(encryptStream, gzipStream)
stream.initVect = initVect
return stream
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@loige60
122. // encgz-stream.js - utility library
const {
createCipheriv,
createDecipheriv,
randomBytes,
createHash
} = require('crypto')
const { createGzip, createGunzip } = require('zlib')
const pumpify = require('pumpify') // from npm
// calculates md5 of the secret (trimmed)
function getChiperKey (secret) {}
function createEncgz (secret) {
const initVect = randomBytes(16)
const cipherKey = getChiperKey(secret)
const encryptStream = createCipheriv('aes256', cipherKey, initVect)
const gzipStream = createGzip()
const stream = pumpify(encryptStream, gzipStream)
stream.initVect = initVect
return stream
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function createEncgz (secret) {
}
// encgz-stream.js - utility library1
2
const {3
createCipheriv,4
createDecipheriv,5
randomBytes,6
createHash7
} = require('crypto')8
const { createGzip, createGunzip } = require('zlib')9
const pumpify = require('pumpify') // from npm10
11
// calculates md5 of the secret (trimmed)12
function getChiperKey (secret) {}13
14
15
const initVect = randomBytes(16)16
const cipherKey = getChiperKey(secret)17
const encryptStream = createCipheriv('aes256', cipherKey, initVect)18
const gzipStream = createGzip()19
20
const stream = pumpify(encryptStream, gzipStream)21
stream.initVect = initVect22
23
return stream24
25
@loige60
123. // encgz-stream.js - utility library
const {
createCipheriv,
createDecipheriv,
randomBytes,
createHash
} = require('crypto')
const { createGzip, createGunzip } = require('zlib')
const pumpify = require('pumpify') // from npm
// calculates md5 of the secret (trimmed)
function getChiperKey (secret) {}
function createEncgz (secret) {
const initVect = randomBytes(16)
const cipherKey = getChiperKey(secret)
const encryptStream = createCipheriv('aes256', cipherKey, initVect)
const gzipStream = createGzip()
const stream = pumpify(encryptStream, gzipStream)
stream.initVect = initVect
return stream
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function createEncgz (secret) {
}
// encgz-stream.js - utility library1
2
const {3
createCipheriv,4
createDecipheriv,5
randomBytes,6
createHash7
} = require('crypto')8
const { createGzip, createGunzip } = require('zlib')9
const pumpify = require('pumpify') // from npm10
11
// calculates md5 of the secret (trimmed)12
function getChiperKey (secret) {}13
14
15
const initVect = randomBytes(16)16
const cipherKey = getChiperKey(secret)17
const encryptStream = createCipheriv('aes256', cipherKey, initVect)18
const gzipStream = createGzip()19
20
const stream = pumpify(encryptStream, gzipStream)21
stream.initVect = initVect22
23
return stream24
25
const encryptStream = createCipheriv('aes256', cipherKey, initVect)
const gzipStream = createGzip()
// encgz-stream.js - utility library1
2
const {3
createCipheriv,4
createDecipheriv,5
randomBytes,6
createHash7
} = require('crypto')8
const { createGzip, createGunzip } = require('zlib')9
const pumpify = require('pumpify') // from npm10
11
// calculates md5 of the secret (trimmed)12
function getChiperKey (secret) {}13
14
function createEncgz (secret) {15
const initVect = randomBytes(16)16
const cipherKey = getChiperKey(secret)17
18
19
20
const stream = pumpify(encryptStream, gzipStream)21
stream.initVect = initVect22
23
return stream24
}25
@loige60
124. // encgz-stream.js - utility library
const {
createCipheriv,
createDecipheriv,
randomBytes,
createHash
} = require('crypto')
const { createGzip, createGunzip } = require('zlib')
const pumpify = require('pumpify') // from npm
// calculates md5 of the secret (trimmed)
function getChiperKey (secret) {}
function createEncgz (secret) {
const initVect = randomBytes(16)
const cipherKey = getChiperKey(secret)
const encryptStream = createCipheriv('aes256', cipherKey, initVect)
const gzipStream = createGzip()
const stream = pumpify(encryptStream, gzipStream)
stream.initVect = initVect
return stream
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function createEncgz (secret) {
}
// encgz-stream.js - utility library1
2
const {3
createCipheriv,4
createDecipheriv,5
randomBytes,6
createHash7
} = require('crypto')8
const { createGzip, createGunzip } = require('zlib')9
const pumpify = require('pumpify') // from npm10
11
// calculates md5 of the secret (trimmed)12
function getChiperKey (secret) {}13
14
15
const initVect = randomBytes(16)16
const cipherKey = getChiperKey(secret)17
const encryptStream = createCipheriv('aes256', cipherKey, initVect)18
const gzipStream = createGzip()19
20
const stream = pumpify(encryptStream, gzipStream)21
stream.initVect = initVect22
23
return stream24
25
const encryptStream = createCipheriv('aes256', cipherKey, initVect)
const gzipStream = createGzip()
// encgz-stream.js - utility library1
2
const {3
createCipheriv,4
createDecipheriv,5
randomBytes,6
createHash7
} = require('crypto')8
const { createGzip, createGunzip } = require('zlib')9
const pumpify = require('pumpify') // from npm10
11
// calculates md5 of the secret (trimmed)12
function getChiperKey (secret) {}13
14
function createEncgz (secret) {15
const initVect = randomBytes(16)16
const cipherKey = getChiperKey(secret)17
18
19
20
const stream = pumpify(encryptStream, gzipStream)21
stream.initVect = initVect22
23
return stream24
}25
const stream = pumpify(encryptStream, gzipStream)
// encgz-stream.js - utility library1
2
const {3
createCipheriv,4
createDecipheriv,5
randomBytes,6
createHash7
} = require('crypto')8
const { createGzip, createGunzip } = require('zlib')9
const pumpify = require('pumpify') // from npm10
11
// calculates md5 of the secret (trimmed)12
function getChiperKey (secret) {}13
14
function createEncgz (secret) {15
const initVect = randomBytes(16)16
const cipherKey = getChiperKey(secret)17
const encryptStream = createCipheriv('aes256', cipherKey, initVect)18
const gzipStream = createGzip()19
20
21
stream.initVect = initVect22
23
return stream24
}25
@loige60
125. // encgz-stream.js - utility library
const {
createCipheriv,
createDecipheriv,
randomBytes,
createHash
} = require('crypto')
const { createGzip, createGunzip } = require('zlib')
const pumpify = require('pumpify') // from npm
// calculates md5 of the secret (trimmed)
function getChiperKey (secret) {}
function createEncgz (secret) {
const initVect = randomBytes(16)
const cipherKey = getChiperKey(secret)
const encryptStream = createCipheriv('aes256', cipherKey, initVect)
const gzipStream = createGzip()
const stream = pumpify(encryptStream, gzipStream)
stream.initVect = initVect
return stream
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function createEncgz (secret) {
}
// encgz-stream.js - utility library1
2
const {3
createCipheriv,4
createDecipheriv,5
randomBytes,6
createHash7
} = require('crypto')8
const { createGzip, createGunzip } = require('zlib')9
const pumpify = require('pumpify') // from npm10
11
// calculates md5 of the secret (trimmed)12
function getChiperKey (secret) {}13
14
15
const initVect = randomBytes(16)16
const cipherKey = getChiperKey(secret)17
const encryptStream = createCipheriv('aes256', cipherKey, initVect)18
const gzipStream = createGzip()19
20
const stream = pumpify(encryptStream, gzipStream)21
stream.initVect = initVect22
23
return stream24
25
const encryptStream = createCipheriv('aes256', cipherKey, initVect)
const gzipStream = createGzip()
// encgz-stream.js - utility library1
2
const {3
createCipheriv,4
createDecipheriv,5
randomBytes,6
createHash7
} = require('crypto')8
const { createGzip, createGunzip } = require('zlib')9
const pumpify = require('pumpify') // from npm10
11
// calculates md5 of the secret (trimmed)12
function getChiperKey (secret) {}13
14
function createEncgz (secret) {15
const initVect = randomBytes(16)16
const cipherKey = getChiperKey(secret)17
18
19
20
const stream = pumpify(encryptStream, gzipStream)21
stream.initVect = initVect22
23
return stream24
}25
const stream = pumpify(encryptStream, gzipStream)
// encgz-stream.js - utility library1
2
const {3
createCipheriv,4
createDecipheriv,5
randomBytes,6
createHash7
} = require('crypto')8
const { createGzip, createGunzip } = require('zlib')9
const pumpify = require('pumpify') // from npm10
11
// calculates md5 of the secret (trimmed)12
function getChiperKey (secret) {}13
14
function createEncgz (secret) {15
const initVect = randomBytes(16)16
const cipherKey = getChiperKey(secret)17
const encryptStream = createCipheriv('aes256', cipherKey, initVect)18
const gzipStream = createGzip()19
20
21
stream.initVect = initVect22
23
return stream24
}25
return stream
// encgz-stream.js - utility library1
2
const {3
createCipheriv,4
createDecipheriv,5
randomBytes,6
createHash7
} = require('crypto')8
const { createGzip, createGunzip } = require('zlib')9
const pumpify = require('pumpify') // from npm10
11
// calculates md5 of the secret (trimmed)12
function getChiperKey (secret) {}13
14
function createEncgz (secret) {15
const initVect = randomBytes(16)16
const cipherKey = getChiperKey(secret)17
const encryptStream = createCipheriv('aes256', cipherKey, initVect)18
const gzipStream = createGzip()19
20
const stream = pumpify(encryptStream, gzipStream)21
stream.initVect = initVect22
23
24
}25
@loige60
126. // encgz-stream.js (...continue from previous slide)
function createDecgz (secret, initVect) {
const cipherKey = getChiperKey(secret)
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)
const gunzipStream = createGunzip()
const stream = pumpify(gunzipStream, decryptStream)
return stream
}
module.exports = {
createEncgz,
createDecgz
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@loige61
127. // encgz-stream.js (...continue from previous slide)
function createDecgz (secret, initVect) {
const cipherKey = getChiperKey(secret)
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)
const gunzipStream = createGunzip()
const stream = pumpify(gunzipStream, decryptStream)
return stream
}
module.exports = {
createEncgz,
createDecgz
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function createDecgz (secret, initVect) {
}
// encgz-stream.js (...continue from previous slide)1
2
3
const cipherKey = getChiperKey(secret)4
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)5
const gunzipStream = createGunzip()6
7
const stream = pumpify(gunzipStream, decryptStream)8
return stream9
10
11
module.exports = {12
createEncgz,13
createDecgz14
}15
@loige61
128. // encgz-stream.js (...continue from previous slide)
function createDecgz (secret, initVect) {
const cipherKey = getChiperKey(secret)
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)
const gunzipStream = createGunzip()
const stream = pumpify(gunzipStream, decryptStream)
return stream
}
module.exports = {
createEncgz,
createDecgz
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function createDecgz (secret, initVect) {
}
// encgz-stream.js (...continue from previous slide)1
2
3
const cipherKey = getChiperKey(secret)4
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)5
const gunzipStream = createGunzip()6
7
const stream = pumpify(gunzipStream, decryptStream)8
return stream9
10
11
module.exports = {12
createEncgz,13
createDecgz14
}15
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)
const gunzipStream = createGunzip()
// encgz-stream.js (...continue from previous slide)1
2
function createDecgz (secret, initVect) {3
const cipherKey = getChiperKey(secret)4
5
6
7
const stream = pumpify(gunzipStream, decryptStream)8
return stream9
}10
11
module.exports = {12
createEncgz,13
createDecgz14
}15
@loige61
129. // encgz-stream.js (...continue from previous slide)
function createDecgz (secret, initVect) {
const cipherKey = getChiperKey(secret)
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)
const gunzipStream = createGunzip()
const stream = pumpify(gunzipStream, decryptStream)
return stream
}
module.exports = {
createEncgz,
createDecgz
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function createDecgz (secret, initVect) {
}
// encgz-stream.js (...continue from previous slide)1
2
3
const cipherKey = getChiperKey(secret)4
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)5
const gunzipStream = createGunzip()6
7
const stream = pumpify(gunzipStream, decryptStream)8
return stream9
10
11
module.exports = {12
createEncgz,13
createDecgz14
}15
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)
const gunzipStream = createGunzip()
// encgz-stream.js (...continue from previous slide)1
2
function createDecgz (secret, initVect) {3
const cipherKey = getChiperKey(secret)4
5
6
7
const stream = pumpify(gunzipStream, decryptStream)8
return stream9
}10
11
module.exports = {12
createEncgz,13
createDecgz14
}15
const stream = pumpify(gunzipStream, decryptStream)
return stream
// encgz-stream.js (...continue from previous slide)1
2
function createDecgz (secret, initVect) {3
const cipherKey = getChiperKey(secret)4
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)5
const gunzipStream = createGunzip()6
7
8
9
}10
11
module.exports = {12
createEncgz,13
createDecgz14
}15
@loige61
130. // encgz-stream.js (...continue from previous slide)
function createDecgz (secret, initVect) {
const cipherKey = getChiperKey(secret)
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)
const gunzipStream = createGunzip()
const stream = pumpify(gunzipStream, decryptStream)
return stream
}
module.exports = {
createEncgz,
createDecgz
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function createDecgz (secret, initVect) {
}
// encgz-stream.js (...continue from previous slide)1
2
3
const cipherKey = getChiperKey(secret)4
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)5
const gunzipStream = createGunzip()6
7
const stream = pumpify(gunzipStream, decryptStream)8
return stream9
10
11
module.exports = {12
createEncgz,13
createDecgz14
}15
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)
const gunzipStream = createGunzip()
// encgz-stream.js (...continue from previous slide)1
2
function createDecgz (secret, initVect) {3
const cipherKey = getChiperKey(secret)4
5
6
7
const stream = pumpify(gunzipStream, decryptStream)8
return stream9
}10
11
module.exports = {12
createEncgz,13
createDecgz14
}15
const stream = pumpify(gunzipStream, decryptStream)
return stream
// encgz-stream.js (...continue from previous slide)1
2
function createDecgz (secret, initVect) {3
const cipherKey = getChiperKey(secret)4
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)5
const gunzipStream = createGunzip()6
7
8
9
}10
11
module.exports = {12
createEncgz,13
createDecgz14
}15
module.exports = {
createEncgz,
createDecgz
}
// encgz-stream.js (...continue from previous slide)1
2
function createDecgz (secret, initVect) {3
const cipherKey = getChiperKey(secret)4
const decryptStream = createDecipheriv('aes256', cipherKey, initVect)5
const gunzipStream = createGunzip()6
7
const stream = pumpify(gunzipStream, decryptStream)8
return stream9
}10
11
12
13
14
15
@loige61
131. // encgz.js - CLI to encrypt and gzip (from stdin to stdout)
const { pipeline } = require('stream')
const { createEncgz } = require('./encgz-stream')
const [, , secret] = process.argv
const encgz = createEncgz(secret)
console.error(`init vector: ${encgz.initVect.toString('hex')}`)
pipeline(
process.stdin,
encgz,
process.stdout,
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 @loige62
132. // encgz.js - CLI to encrypt and gzip (from stdin to stdout)
const { pipeline } = require('stream')
const { createEncgz } = require('./encgz-stream')
const [, , secret] = process.argv
const encgz = createEncgz(secret)
console.error(`init vector: ${encgz.initVect.toString('hex')}`)
pipeline(
process.stdin,
encgz,
process.stdout,
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const [, , secret] = process.argv
// encgz.js - CLI to encrypt and gzip (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createEncgz } = require('./encgz-stream')4
5
6
7
const encgz = createEncgz(secret)8
console.error(`init vector: ${encgz.initVect.toString('hex')}`)9
10
pipeline(11
process.stdin,12
encgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21 @loige62
133. // encgz.js - CLI to encrypt and gzip (from stdin to stdout)
const { pipeline } = require('stream')
const { createEncgz } = require('./encgz-stream')
const [, , secret] = process.argv
const encgz = createEncgz(secret)
console.error(`init vector: ${encgz.initVect.toString('hex')}`)
pipeline(
process.stdin,
encgz,
process.stdout,
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const [, , secret] = process.argv
// encgz.js - CLI to encrypt and gzip (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createEncgz } = require('./encgz-stream')4
5
6
7
const encgz = createEncgz(secret)8
console.error(`init vector: ${encgz.initVect.toString('hex')}`)9
10
pipeline(11
process.stdin,12
encgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21
const encgz = createEncgz(secret)
// encgz.js - CLI to encrypt and gzip (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createEncgz } = require('./encgz-stream')4
5
const [, , secret] = process.argv6
7
8
console.error(`init vector: ${encgz.initVect.toString('hex')}`)9
10
pipeline(11
process.stdin,12
encgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21 @loige62
134. // encgz.js - CLI to encrypt and gzip (from stdin to stdout)
const { pipeline } = require('stream')
const { createEncgz } = require('./encgz-stream')
const [, , secret] = process.argv
const encgz = createEncgz(secret)
console.error(`init vector: ${encgz.initVect.toString('hex')}`)
pipeline(
process.stdin,
encgz,
process.stdout,
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const [, , secret] = process.argv
// encgz.js - CLI to encrypt and gzip (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createEncgz } = require('./encgz-stream')4
5
6
7
const encgz = createEncgz(secret)8
console.error(`init vector: ${encgz.initVect.toString('hex')}`)9
10
pipeline(11
process.stdin,12
encgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21
const encgz = createEncgz(secret)
// encgz.js - CLI to encrypt and gzip (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createEncgz } = require('./encgz-stream')4
5
const [, , secret] = process.argv6
7
8
console.error(`init vector: ${encgz.initVect.toString('hex')}`)9
10
pipeline(11
process.stdin,12
encgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21
pipeline(
)
// encgz.js - CLI to encrypt and gzip (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createEncgz } = require('./encgz-stream')4
5
const [, , secret] = process.argv6
7
const encgz = createEncgz(secret)8
console.error(`init vector: ${encgz.initVect.toString('hex')}`)9
10
11
process.stdin,12
encgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
21 @loige62
135. // encgz.js - CLI to encrypt and gzip (from stdin to stdout)
const { pipeline } = require('stream')
const { createEncgz } = require('./encgz-stream')
const [, , secret] = process.argv
const encgz = createEncgz(secret)
console.error(`init vector: ${encgz.initVect.toString('hex')}`)
pipeline(
process.stdin,
encgz,
process.stdout,
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const [, , secret] = process.argv
// encgz.js - CLI to encrypt and gzip (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createEncgz } = require('./encgz-stream')4
5
6
7
const encgz = createEncgz(secret)8
console.error(`init vector: ${encgz.initVect.toString('hex')}`)9
10
pipeline(11
process.stdin,12
encgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21
const encgz = createEncgz(secret)
// encgz.js - CLI to encrypt and gzip (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createEncgz } = require('./encgz-stream')4
5
const [, , secret] = process.argv6
7
8
console.error(`init vector: ${encgz.initVect.toString('hex')}`)9
10
pipeline(11
process.stdin,12
encgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21
pipeline(
)
// encgz.js - CLI to encrypt and gzip (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createEncgz } = require('./encgz-stream')4
5
const [, , secret] = process.argv6
7
const encgz = createEncgz(secret)8
console.error(`init vector: ${encgz.initVect.toString('hex')}`)9
10
11
process.stdin,12
encgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
21
process.stdin,
encgz,
process.stdout,
// encgz.js - CLI to encrypt and gzip (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createEncgz } = require('./encgz-stream')4
5
const [, , secret] = process.argv6
7
const encgz = createEncgz(secret)8
console.error(`init vector: ${encgz.initVect.toString('hex')}`)9
10
pipeline(11
12
13
14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21 @loige62
136. // decgz.js - CLI to gunzip and decrypt (from stdin to stdout)
const { pipeline } = require('stream')
const { createDecgz } = require('./encgz-stream')
const [, , secret, initVect] = process.argv
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))
pipeline(
process.stdin,
decgz,
process.stdout,
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 @loige63
137. // decgz.js - CLI to gunzip and decrypt (from stdin to stdout)
const { pipeline } = require('stream')
const { createDecgz } = require('./encgz-stream')
const [, , secret, initVect] = process.argv
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))
pipeline(
process.stdin,
decgz,
process.stdout,
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const [, , secret, initVect] = process.argv
// decgz.js - CLI to gunzip and decrypt (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createDecgz } = require('./encgz-stream')4
5
6
7
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))8
9
10
pipeline(11
process.stdin,12
decgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21 @loige63
138. // decgz.js - CLI to gunzip and decrypt (from stdin to stdout)
const { pipeline } = require('stream')
const { createDecgz } = require('./encgz-stream')
const [, , secret, initVect] = process.argv
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))
pipeline(
process.stdin,
decgz,
process.stdout,
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const [, , secret, initVect] = process.argv
// decgz.js - CLI to gunzip and decrypt (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createDecgz } = require('./encgz-stream')4
5
6
7
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))8
9
10
pipeline(11
process.stdin,12
decgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))
// decgz.js - CLI to gunzip and decrypt (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createDecgz } = require('./encgz-stream')4
5
const [, , secret, initVect] = process.argv6
7
8
9
10
pipeline(11
process.stdin,12
decgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21 @loige63
139. // decgz.js - CLI to gunzip and decrypt (from stdin to stdout)
const { pipeline } = require('stream')
const { createDecgz } = require('./encgz-stream')
const [, , secret, initVect] = process.argv
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))
pipeline(
process.stdin,
decgz,
process.stdout,
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const [, , secret, initVect] = process.argv
// decgz.js - CLI to gunzip and decrypt (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createDecgz } = require('./encgz-stream')4
5
6
7
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))8
9
10
pipeline(11
process.stdin,12
decgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))
// decgz.js - CLI to gunzip and decrypt (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createDecgz } = require('./encgz-stream')4
5
const [, , secret, initVect] = process.argv6
7
8
9
10
pipeline(11
process.stdin,12
decgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21
pipeline(
)
// decgz.js - CLI to gunzip and decrypt (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createDecgz } = require('./encgz-stream')4
5
const [, , secret, initVect] = process.argv6
7
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))8
9
10
11
process.stdin,12
decgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
21 @loige63
140. // decgz.js - CLI to gunzip and decrypt (from stdin to stdout)
const { pipeline } = require('stream')
const { createDecgz } = require('./encgz-stream')
const [, , secret, initVect] = process.argv
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))
pipeline(
process.stdin,
decgz,
process.stdout,
function onEnd (err) {
if (err) {
console.error(`Error: ${err}`)
process.exit(1)
}
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const [, , secret, initVect] = process.argv
// decgz.js - CLI to gunzip and decrypt (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createDecgz } = require('./encgz-stream')4
5
6
7
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))8
9
10
pipeline(11
process.stdin,12
decgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))
// decgz.js - CLI to gunzip and decrypt (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createDecgz } = require('./encgz-stream')4
5
const [, , secret, initVect] = process.argv6
7
8
9
10
pipeline(11
process.stdin,12
decgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21
pipeline(
)
// decgz.js - CLI to gunzip and decrypt (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createDecgz } = require('./encgz-stream')4
5
const [, , secret, initVect] = process.argv6
7
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))8
9
10
11
process.stdin,12
decgz,13
process.stdout,14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
21
process.stdin,
decgz,
process.stdout,
// decgz.js - CLI to gunzip and decrypt (from stdin to stdout)1
2
const { pipeline } = require('stream')3
const { createDecgz } = require('./encgz-stream')4
5
const [, , secret, initVect] = process.argv6
7
const decgz = createDecgz(secret, Buffer.from(initVect, 'hex'))8
9
10
pipeline(11
12
13
14
function onEnd (err) {15
if (err) {16
console.error(`Error: ${err}`)17
process.exit(1)18
}19
}20
)21 @loige63