chapter 2: initial samples

This commit is contained in:
Beth Griggs 2020-04-13 15:44:06 +01:00
parent 33f5fefdec
commit 583e10b98e
No known key found for this signature in database
GPG Key ID: D7062848A1AB005C
69 changed files with 198 additions and 1692 deletions

View File

@ -0,0 +1,12 @@
const net = require('net');
const HOSTNAME = 'localhost';
const PORT = 3000;
const socket = net.connect(PORT, HOSTNAME);
socket.write('World');
socket.on('data', (data) => {
console.log(data.toString());
});

View File

@ -0,0 +1,13 @@
const net = require('net');
const HOSTNAME = 'localhost';
const PORT = 3000;
net.createServer((socket) => {
console.log('Client connected.');
socket.on('data', name => {
socket.write(`Hello ${name}!`);
});
}).listen(PORT, HOSTNAME);

BIN
Chapter02/fetching-metadata/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,6 @@
'use strict'
const fs = require('fs');
const file = './file.txt';
fs.chmodSync("./file.txt", 0o664);

View File

@ -0,0 +1,9 @@
'use strict'
const fs = require('fs');
const file = './file.txt';
fs.chmodSync("./file.txt",
fs.constants.S_IRUSR | fs.constants.S_IWUSR |
fs.constants.S_IRGRP | fs.constants.S_IWGRP |
fs.constants.S_IROTH);

View File

View File

@ -0,0 +1,9 @@
const fs = require('fs');
const file = process.argv[2];
function printMetadata(file) {
const fileStats = fs.statSync(file);
console.log(fileStats);
};
printMetadata(file);

View File

@ -0,0 +1,13 @@
const fs = require('fs');
const file = process.argv[2];
function printMetadata(file) {
try {
const fileStats = fs.statSync(file);
console.log(fileStats);
} catch (err) {
console.error("Error reading file path:", file);
}
};
printMetadata(file);

View File

@ -0,0 +1,12 @@
HELLO!
ls
Hello again;
gs
gsgds
gsdsdf
sddsf
sdfsd
sdda
dfsdf
dsad
sdasd

View File

@ -0,0 +1,13 @@
{
"name": "file-watching",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"moment": {
"version": "2.24.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
}
}
}

View File

@ -0,0 +1,16 @@
{
"name": "file-watching",
"version": "1.0.0",
"main": "watch.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"moment": "^2.24.0"
},
"devDependencies": {},
"description": ""
}

View File

@ -0,0 +1,6 @@
const fs = require('fs');
const file = './file.txt';
fs.watchFile(file, (current, previous) => {
return console.log(`${file} updated ${time}`)
});

View File

@ -0,0 +1,8 @@
const fs = require('fs');
const file = './file.txt';
const moment = require('moment');
fs.watch(file, (eventType, filename) => {
const time = moment().format('MMMM Do YYYY, h:mm:ss a');
return console.log(`${filename} updated ${time}`)
});

View File

@ -1,22 +0,0 @@
{
"name": "hsl-to-hex",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "",
"dependencies": {
"hsl-to-rgb-for-reals": "^1.1.0"
}
}

View File

@ -1,25 +0,0 @@
{
"name": "hsl-to-hex",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "",
"dependencies": {
"hsl-to-rgb-for-reals": "^1.1.0"
},
"devDependencies": {
"standard": "^6.0.8"
}
}

View File

@ -1,26 +0,0 @@
{
"name": "hsl-to-hex",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "npm run lint",
"lint": "standard"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "",
"dependencies": {
"hsl-to-rgb-for-reals": "^1.1.0"
},
"devDependencies": {
"standard": "^6.0.8"
}
}

View File

@ -0,0 +1,4 @@
process.stdin.on('data', (data) => {
let name = data.toString().trim().toUpperCase();
process.stdout.write(`Hello ${name}!`);
});

View File

@ -0,0 +1,8 @@
process.stdin.on('data', data => {
let name = data.toString().trim().toUpperCase();
if (name != '') {
process.stdout.write(`Hello ${name}!`);
} else {
process.stderr.write('Input was empty.');
}
});

View File

@ -1,2 +0,0 @@
node_modules
*.log

View File

@ -1,6 +0,0 @@
var hsl = require('./')
var hue = 133
var saturation = 40
var luminosity = 60
var hex = hsl(hue, saturation, luminosity)
console.log(hex) // #70c282

View File

@ -1,66 +0,0 @@
// In our case, there's only one dependency
var toRgb = require('hsl-to-rgb-for-reals')
var debug = require('debug')('hsl-to-hex')
// Typically all dependencies should be declared at the top of the file.
// Now let's define an API for our module, we're taking hue, saturation and luminosity values and outputting a CSS compatible hex string.
// Hue is in degrees, between 0 and 359. Since degrees a cyclical in nature, we'll support numbers greater than 359 or less than 0 by "spinning" them around until they fall within the 0 to 359 range.
// Saturation and luminosity are both percentages, we'll represent these percentages with whole numbers between 0 and 100. For these numbers we'll need to enforce a maximum and a minimum, anything below 0 will become 0, anything above 100 will become 100.
// Let's write some utility functions to handle this logic:
function max (val, n) {
debug('ensuring ' + val + ' is no more than ' + n)
return (val > n) ? n : val
}
function min (val, n) {
debug('ensuring ' + val + ' is no less than ' + n)
return (val < n) ? n : val
}
function cycle (val) {
debug('resolving ' + val + ' within the 0-359 range')
// for safety:
val = max(val, 1e7)
val = min(val, -1e7)
// cycle value:
while (val < 0) { val += 360 }
while (val > 359) { val -= 360 }
return val
}
// Now for the main piece, the `hsl` function:
function hsl (hue, saturation, luminosity) {
debug('calculating hex for hue: ' + hue + ' saturation: ' + saturation + ' luminosity: ' + luminosity)
// resolve degrees to 0 - 359 range
hue = cycle(hue)
// enforce constraints
saturation = min(max(saturation, 100), 0)
luminosity = min(max(luminosity, 100), 0)
// convert to 0 to 1 range used by hsl-to-rgb-for-reals
saturation /= 100
luminosity /= 100
// let hsl-to-rgb-for-reals do the hard work
var rgb = toRgb(hue, saturation, luminosity)
// convert each value in the returned RGB array
// to a 2 character hex value, join the array into
// a string, prefixed with a hash
return '#' + rgb
.map(function (n) {
return (256 + n).toString(16).substr(-2)
})
.join('')
}
// In order to make our code into a bona fide module we have to export it:
module.exports = hsl

View File

@ -1,33 +0,0 @@
{
"name": "@davidmarkclements/hsl-to-hex",
"version": "1.0.1",
"main": "index.js",
"scripts": {
"check": "npm ls && npm test",
"test": "npm run lint && tap --cov test",
"lint": "standard",
"prepublish": "npm run check && ./publish-dep.sh"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "Convert HSL colors to RGB colors in hex format.",
"dependencies": {
"debug": "^2.2.0",
"hsl-to-rgb-for-reals": "^1.1.0"
},
"devDependencies": {
"standard": "^6.0.8",
"tap": "^5.7.0"
},
"directories": {
"test": "test"
}
}

View File

@ -1,50 +0,0 @@
#! /bin/sh
# 400 - Missing hash and/or peer_id
# 403 - Not allowed
# 413 - Too big
# 200 - Ok!
if echo $npm_config_argv | grep -q "install"; then
echo "Running at install step, skipping"
else
if ipfs &>/dev/null; then
echo "## Publishing dependency"
mv node_modules .node_modules 2>/dev/null
HASH=$(ipfs add . -r | tail -n 1 | cut -d ' ' -f 2)
mv .node_modules node_modules 2>/dev/null
echo "Published as $HASH"
PEER=$(ipfs id --format '<id>')
if [ -f ~/.stay/nodes.json ]; then
cat ~/.stay/nodes.json | jq -rc '.[]' | while read host; do
address="$host/api/pin/add/$HASH/$PEER"
status=$(curl -X POST --silent $address)
case "$status" in
"400") echo "$host - Application Error: Missing the hash and/or peer_id"
;;
"403") echo "$host - You do not have access to pinning at this node"
;;
"413") echo "$host - The module was too big to pin!"
;;
"200") echo "$host - Pinned!"
;;
*) echo "Weird status code $status for $host"
;;
esac
done
else
echo "You don't have any saved nodes in ~/.stay/nodes.json, skip pinning"
fi
else
echo "## Could not publish dependency to IPFS, doing the good'ol 'fetch from npm registry' way"
echo "Either 'ipfs' doesn't exists in PATH or you haven't run 'ipfs daemon' before running the command"
exit 0
fi
fi

View File

@ -1,31 +0,0 @@
# hsl-to-hex
Convert HSL colors to RGB colors in hex format.
## Install
```sh
npm install --save @davidmarkclements/hsl-to-hex
```
## API
```
require('hsl-to-hex') => Function
hsl(hue, saturation, luminosity)` => String
```
## Example
```js
var hsl = require('hsl-to-hex')
var hue = 133
var saturation = 40
var luminosity = 60
var hex = hsl(hue, saturation, luminosity)
console.log(hex) // #70c282
```
## License
ISC

View File

@ -1,74 +0,0 @@
var hsl = require('../')
var test = require('tap').test
test('pure white', function (assert) {
var expected = '#ffffff'
var actual = hsl(0, 100, 100)
var it = 'max saturation and luminosity should return pure white'
assert.is(actual, expected, it)
assert.end()
})
test('medium gray', function (assert) {
var expected = '#808080'
var actual = hsl(0, 0, 50)
var it = '0% saturation, 50% luminosity should be medium gray'
assert.is(actual, expected, it)
assert.end()
})
test('hue - red', function (assert) {
var expected = '#ff0000'
var actual = hsl(0, 100, 50)
var it = '0deg should be red'
assert.is(actual, expected, it)
assert.end()
})
test('hue - blue', function (assert) {
var expected = '#0000ff'
var actual = hsl(240, 100, 50)
var it = '240deg should be blue'
assert.is(actual, expected, it)
assert.end()
})
test('hue - cyan', function (assert) {
var expected = '#00ffff'
var actual = hsl(180, 100, 50)
var it = '180deg should be cyan'
assert.is(actual, expected, it)
assert.end()
})
test('degree overflow', function (assert) {
var expected = hsl(1, 100, 50)
var actual = hsl(361, 100, 50)
var it = '361deg should be the same as 1deg'
assert.is(actual, expected, it)
assert.end()
})
test('degree underflow', function (assert) {
var expected = hsl(-1, 100, 50)
var actual = hsl(359, 100, 50)
var it = '-1deg should be the same as 359deg'
assert.is(actual, expected, it)
assert.end()
})
test('max constraint', function (assert) {
var expected = hsl(0, 101, 50)
var actual = hsl(0, 100, 50)
var it = '101% should be the same as 100%'
assert.is(actual, expected, it)
assert.end()
})
test('min constraint', function (assert) {
var expected = hsl(0, -1, 50)
var actual = hsl(0, 0, 50)
var it = '-1% should be the same as 0%'
assert.is(actual, expected, it)
assert.end()
})

View File

@ -1,11 +0,0 @@
{
"name": "stay-play",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "David Mark Clements",
"license": "MIT"
}

View File

@ -1,2 +0,0 @@
node_modules
*.log

View File

@ -1,6 +0,0 @@
var hsl = require('./')
var hue = 133
var saturation = 40
var luminosity = 60
var hex = hsl(hue, saturation, luminosity)
console.log(hex) // #70c282

View File

@ -1,59 +0,0 @@
// In our case, there's only one dependency
var toRgb = require('hsl-to-rgb-for-reals')
// Typically all dependencies should be declared at the top of the file.
// Now let's define an API for our module, we're taking hue, saturation and luminosity values and outputting a CSS compatible hex string.
// Hue is in degrees, between 0 and 359. Since degrees a cyclical in nature, we'll support numbers greater than 359 or less than 0 by "spinning" them around until they fall within the 0 to 359 range.
// Saturation and luminosity are both percentages, we'll represent these percentages with whole numbers between 0 and 100. For these numbers we'll need to enforce a maximum and a minimum, anything below 0 will become 0, anything above 100 will become 100.
// Let's write some utility functions to handle this logic:
function max (val, n) {
return (val > n) ? n : val
}
function min (val, n) {
return (val < n) ? n : val
}
function cycle (val) {
// for safety:
val = max(val, 1e7)
val = min(val, -1e7)
// cycle value:
while (val < 0) { val += 360 }
while (val > 359) { val -= 360 }
return val
}
// Now for the main piece, the `hsl` function:
function hsl (hue, saturation, luminosity) {
// resolve degrees to 0 - 359 range
hue = cycle(hue)
// enforce constraints
saturation = min(max(saturation, 100), 0)
luminosity = min(max(luminosity, 100), 0)
// convert to 0 to 1 range used by hsl-to-rgb-for-reals
saturation /= 100
luminosity /= 100
// let hsl-to-rgb-for-reals do the hard work
var rgb = toRgb(hue, saturation, luminosity)
// convert each value in the returned RGB array
// to a 2 character hex value, join the array into
// a string, prefixed with a hash
return '#' + rgb
.map(function (n) {
return (256 + n).toString(16).substr(-2)
})
.join('')
}
// In order to make our code into a bona fide module we have to export it:
module.exports = hsl

View File

@ -1,30 +0,0 @@
{
"name": "@davidmarkclements/hsl-to-hex",
"version": "1.0.1",
"main": "index.js",
"scripts": {
"test": "npm run lint && tap --cov test",
"lint": "standard"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "Convert HSL colors to RGB colors in hex format.",
"dependencies": {
"hsl-to-rgb-for-reals": "^1.1.0"
},
"devDependencies": {
"standard": "^6.0.8",
"tap": "^5.7.0"
},
"directories": {
"test": "test"
}
}

View File

@ -1,32 +0,0 @@
# hsl-to-hex
Convert HSL colors to RGB colors in hex format.
## Install
```sh
npm install --save @davidmarkclements/hsl-to-hex
```
## API
```
require('hsl-to-hex') => Function
hsl(hue, saturation, luminosity)` => String
```
## Example
```js
var hsl = require('hsl-to-hex')
var hue = 133
var saturation = 40
var luminosity = 60
var hex = hsl(hue, saturation, luminosity)
console.log(hex) // #70c282
```
## License
ISC

View File

@ -1,74 +0,0 @@
var hsl = require('../')
var test = require('tap').test
test('pure white', function (assert) {
var expected = '#ffffff'
var actual = hsl(0, 100, 100)
var it = 'max saturation and luminosity should return pure white'
assert.is(actual, expected, it)
assert.end()
})
test('medium gray', function (assert) {
var expected = '#808080'
var actual = hsl(0, 0, 50)
var it = '0% saturation, 50% luminosity should be medium gray'
assert.is(actual, expected, it)
assert.end()
})
test('hue - red', function (assert) {
var expected = '#ff0000'
var actual = hsl(0, 100, 50)
var it = '0deg should be red'
assert.is(actual, expected, it)
assert.end()
})
test('hue - blue', function (assert) {
var expected = '#0000ff'
var actual = hsl(240, 100, 50)
var it = '240deg should be blue'
assert.is(actual, expected, it)
assert.end()
})
test('hue - cyan', function (assert) {
var expected = '#00ffff'
var actual = hsl(180, 100, 50)
var it = '180deg should be cyan'
assert.is(actual, expected, it)
assert.end()
})
test('degree overflow', function (assert) {
var expected = hsl(1, 100, 50)
var actual = hsl(361, 100, 50)
var it = '361deg should be the same as 1deg'
assert.is(actual, expected, it)
assert.end()
})
test('degree underflow', function (assert) {
var expected = hsl(-1, 100, 50)
var actual = hsl(359, 100, 50)
var it = '-1deg should be the same as 359deg'
assert.is(actual, expected, it)
assert.end()
})
test('max constraint', function (assert) {
var expected = hsl(0, 101, 50)
var actual = hsl(0, 100, 50)
var it = '101% should be the same as 100%'
assert.is(actual, expected, it)
assert.end()
})
test('min constraint', function (assert) {
var expected = hsl(0, -1, 50)
var actual = hsl(0, 0, 50)
var it = '-1% should be the same as 0%'
assert.is(actual, expected, it)
assert.end()
})

View File

@ -1,2 +0,0 @@
node_modules
*.log

View File

@ -1,6 +0,0 @@
var hsl = require('./')
var hue = 133
var saturation = 40
var luminosity = 60
var hex = hsl(hue, saturation, luminosity)
console.log(hex) // #70c282

View File

@ -1,66 +0,0 @@
// In our case, there's only one dependency
var toRgb = require('hsl-to-rgb-for-reals')
var debug = require('debug')('hsl-to-hex')
// Typically all dependencies should be declared at the top of the file.
// Now let's define an API for our module, we're taking hue, saturation and luminosity values and outputting a CSS compatible hex string.
// Hue is in degrees, between 0 and 359. Since degrees a cyclical in nature, we'll support numbers greater than 359 or less than 0 by "spinning" them around until they fall within the 0 to 359 range.
// Saturation and luminosity are both percentages, we'll represent these percentages with whole numbers between 0 and 100. For these numbers we'll need to enforce a maximum and a minimum, anything below 0 will become 0, anything above 100 will become 100.
// Let's write some utility functions to handle this logic:
function max (val, n) {
debug('ensuring ' + val + ' is no more than ' + n)
return (val > n) ? n : val
}
function min (val, n) {
debug('ensuring ' + val + ' is no less than ' + n)
return (val < n) ? n : val
}
function cycle (val) {
debug('resolving ' + val + ' within the 0-359 range')
// for safety:
val = max(val, 1e7)
val = min(val, -1e7)
// cycle value:
while (val < 0) { val += 360 }
while (val > 359) { val -= 360 }
return val
}
// Now for the main piece, the `hsl` function:
function hsl (hue, saturation, luminosity) {
debug('calculating hex for hue: ' + hue + ' saturation: ' + saturation + ' luminosity: ' + luminosity)
// resolve degrees to 0 - 359 range
hue = cycle(hue)
// enforce constraints
saturation = min(max(saturation, 100), 0)
luminosity = min(max(luminosity, 100), 0)
// convert to 0 to 1 range used by hsl-to-rgb-for-reals
saturation /= 100
luminosity /= 100
// let hsl-to-rgb-for-reals do the hard work
var rgb = toRgb(hue, saturation, luminosity)
// convert each value in the returned RGB array
// to a 2 character hex value, join the array into
// a string, prefixed with a hash
return '#' + rgb
.map(function (n) {
return (256 + n).toString(16).substr(-2)
})
.join('')
}
// In order to make our code into a bona fide module we have to export it:
module.exports = hsl

View File

@ -1,30 +0,0 @@
{
"name": "@davidmarkclements/hsl-to-hex",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "npm run lint && tap --cov test",
"lint": "standard"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "Convert HSL colors to RGB colors in hex format.",
"dependencies": {
"hsl-to-rgb-for-reals": "^1.1.0"
},
"devDependencies": {
"standard": "^6.0.8",
"tap": "^5.7.0"
},
"directories": {
"test": "test"
}
}

View File

@ -1,31 +0,0 @@
# hsl-to-hex
Convert HSL colors to RGB colors in hex format.
## Install
```sh
npm install --save @davidmarkclements/hsl-to-hex
```
## API
```
require('hsl-to-hex') => Function
hsl(hue, saturation, luminosity)` => String
```
## Example
```js
var hsl = require('hsl-to-hex')
var hue = 133
var saturation = 40
var luminosity = 60
var hex = hsl(hue, saturation, luminosity)
console.log(hex) // #70c282
```
## License
ISC

View File

@ -1,74 +0,0 @@
var hsl = require('../')
var test = require('tap').test
test('pure white', function (assert) {
var expected = '#ffffff'
var actual = hsl(0, 100, 100)
var it = 'max saturation and luminosity should return pure white'
assert.is(actual, expected, it)
assert.end()
})
test('medium gray', function (assert) {
var expected = '#808080'
var actual = hsl(0, 0, 50)
var it = '0% saturation, 50% luminosity should be medium gray'
assert.is(actual, expected, it)
assert.end()
})
test('hue - red', function (assert) {
var expected = '#ff0000'
var actual = hsl(0, 100, 50)
var it = '0deg should be red'
assert.is(actual, expected, it)
assert.end()
})
test('hue - blue', function (assert) {
var expected = '#0000ff'
var actual = hsl(240, 100, 50)
var it = '240deg should be blue'
assert.is(actual, expected, it)
assert.end()
})
test('hue - cyan', function (assert) {
var expected = '#00ffff'
var actual = hsl(180, 100, 50)
var it = '180deg should be cyan'
assert.is(actual, expected, it)
assert.end()
})
test('degree overflow', function (assert) {
var expected = hsl(1, 100, 50)
var actual = hsl(361, 100, 50)
var it = '361deg should be the same as 1deg'
assert.is(actual, expected, it)
assert.end()
})
test('degree underflow', function (assert) {
var expected = hsl(-1, 100, 50)
var actual = hsl(359, 100, 50)
var it = '-1deg should be the same as 359deg'
assert.is(actual, expected, it)
assert.end()
})
test('max constraint', function (assert) {
var expected = hsl(0, 101, 50)
var actual = hsl(0, 100, 50)
var it = '101% should be the same as 100%'
assert.is(actual, expected, it)
assert.end()
})
test('min constraint', function (assert) {
var expected = hsl(0, -1, 50)
var actual = hsl(0, 0, 50)
var it = '-1% should be the same as 0%'
assert.is(actual, expected, it)
assert.end()
})

View File

@ -1,2 +0,0 @@
node_modules
*.log

View File

@ -1,6 +0,0 @@
var hsl = require('./')
var hue = 133
var saturation = 40
var luminosity = 60
var hex = hsl(hue, saturation, luminosity)
console.log(hex) // #70c282

View File

@ -1,66 +0,0 @@
// In our case, there's only one dependency
var toRgb = require('hsl-to-rgb-for-reals')
var debug = require('debug')('hsl-to-hex')
// Typically all dependencies should be declared at the top of the file.
// Now let's define an API for our module, we're taking hue, saturation and luminosity values and outputting a CSS compatible hex string.
// Hue is in degrees, between 0 and 359. Since degrees a cyclical in nature, we'll support numbers greater than 359 or less than 0 by "spinning" them around until they fall within the 0 to 359 range.
// Saturation and luminosity are both percentages, we'll represent these percentages with whole numbers between 0 and 100. For these numbers we'll need to enforce a maximum and a minimum, anything below 0 will become 0, anything above 100 will become 100.
// Let's write some utility functions to handle this logic:
function max (val, n) {
debug('ensuring ' + val + ' is no more than ' + n)
return (val > n) ? n : val
}
function min (val, n) {
debug('ensuring ' + val + ' is no less than ' + n)
return (val < n) ? n : val
}
function cycle (val) {
debug('resolving ' + val + ' within the 0-359 range')
// for safety:
val = max(val, 1e7)
val = min(val, -1e7)
// cycle value:
while (val < 0) { val += 360 }
while (val > 359) { val -= 360 }
return val
}
// Now for the main piece, the `hsl` function:
function hsl (hue, saturation, luminosity) {
debug('calculating hex for hue: ' + hue + ' saturation: ' + saturation + ' luminosity: ' + luminosity)
// resolve degrees to 0 - 359 range
hue = cycle(hue)
// enforce constraints
saturation = min(max(saturation, 100), 0)
luminosity = min(max(luminosity, 100), 0)
// convert to 0 to 1 range used by hsl-to-rgb-for-reals
saturation /= 100
luminosity /= 100
// let hsl-to-rgb-for-reals do the hard work
var rgb = toRgb(hue, saturation, luminosity)
// convert each value in the returned RGB array
// to a 2 character hex value, join the array into
// a string, prefixed with a hash
return '#' + rgb
.map(function (n) {
return (256 + n).toString(16).substr(-2)
})
.join('')
}
// In order to make our code into a bona fide module we have to export it:
module.exports = hsl

View File

@ -1,32 +0,0 @@
{
"name": "@davidmarkclements/hsl-to-hex",
"version": "1.0.1",
"main": "index.js",
"scripts": {
"prepublish": "npm ls && npm test",
"test": "npm run lint && tap --cov test",
"lint": "standard"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "Convert HSL colors to RGB colors in hex format.",
"dependencies": {
"debug": "^2.2.0",
"hsl-to-rgb-for-reals": "^1.1.0"
},
"devDependencies": {
"standard": "^6.0.8",
"tap": "^5.7.0"
},
"directories": {
"test": "test"
}
}

View File

@ -1,31 +0,0 @@
# hsl-to-hex
Convert HSL colors to RGB colors in hex format.
## Install
```sh
npm install --save @davidmarkclements/hsl-to-hex
```
## API
```
require('hsl-to-hex') => Function
hsl(hue, saturation, luminosity)` => String
```
## Example
```js
var hsl = require('hsl-to-hex')
var hue = 133
var saturation = 40
var luminosity = 60
var hex = hsl(hue, saturation, luminosity)
console.log(hex) // #70c282
```
## License
ISC

View File

@ -1,74 +0,0 @@
var hsl = require('../')
var test = require('tap').test
test('pure white', function (assert) {
var expected = '#ffffff'
var actual = hsl(0, 100, 100)
var it = 'max saturation and luminosity should return pure white'
assert.is(actual, expected, it)
assert.end()
})
test('medium gray', function (assert) {
var expected = '#808080'
var actual = hsl(0, 0, 50)
var it = '0% saturation, 50% luminosity should be medium gray'
assert.is(actual, expected, it)
assert.end()
})
test('hue - red', function (assert) {
var expected = '#ff0000'
var actual = hsl(0, 100, 50)
var it = '0deg should be red'
assert.is(actual, expected, it)
assert.end()
})
test('hue - blue', function (assert) {
var expected = '#0000ff'
var actual = hsl(240, 100, 50)
var it = '240deg should be blue'
assert.is(actual, expected, it)
assert.end()
})
test('hue - cyan', function (assert) {
var expected = '#00ffff'
var actual = hsl(180, 100, 50)
var it = '180deg should be cyan'
assert.is(actual, expected, it)
assert.end()
})
test('degree overflow', function (assert) {
var expected = hsl(1, 100, 50)
var actual = hsl(361, 100, 50)
var it = '361deg should be the same as 1deg'
assert.is(actual, expected, it)
assert.end()
})
test('degree underflow', function (assert) {
var expected = hsl(-1, 100, 50)
var actual = hsl(359, 100, 50)
var it = '-1deg should be the same as 359deg'
assert.is(actual, expected, it)
assert.end()
})
test('max constraint', function (assert) {
var expected = hsl(0, 101, 50)
var actual = hsl(0, 100, 50)
var it = '101% should be the same as 100%'
assert.is(actual, expected, it)
assert.end()
})
test('min constraint', function (assert) {
var expected = hsl(0, -1, 50)
var actual = hsl(0, 0, 50)
var it = '-1% should be the same as 0%'
assert.is(actual, expected, it)
assert.end()
})

View File

@ -1,19 +0,0 @@
{
"name": "hsl-to-hex",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": ""
}

View File

@ -1,2 +0,0 @@
node_modules
*.log

View File

@ -1,19 +0,0 @@
{
"name": "hsl-to-hex",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": ""
}

View File

@ -1,2 +0,0 @@
node_modules
*.log

View File

@ -1,6 +0,0 @@
var hsl = require('./')
var hue = 133
var saturation = 40
var luminosity = 60
var hex = hsl(hue, saturation, luminosity)
console.log(hex) // #70c282

View File

@ -1,66 +0,0 @@
// In our case, there's only one dependency
var toRgb = require('hsl-to-rgb-for-reals')
var debug = require('debug')('hsl-to-hex')
// Typically all dependencies should be declared at the top of the file.
// Now let's define an API for our module, we're taking hue, saturation and luminosity values and outputting a CSS compatible hex string.
// Hue is in degrees, between 0 and 359. Since degrees a cyclical in nature, we'll support numbers greater than 359 or less than 0 by "spinning" them around until they fall within the 0 to 359 range.
// Saturation and luminosity are both percentages, we'll represent these percentages with whole numbers between 0 and 100. For these numbers we'll need to enforce a maximum and a minimum, anything below 0 will become 0, anything above 100 will become 100.
// Let's write some utility functions to handle this logic:
function max (val, n) {
debug('ensuring ' + val + ' is no more than ' + n)
return (val > n) ? n : val
}
function min (val, n) {
debug('ensuring ' + val + ' is no less than ' + n)
return (val < n) ? n : val
}
function cycle (val) {
debug('resolving ' + val + ' within the 0-359 range')
// for safety:
val = max(val, 1e7)
val = min(val, -1e7)
// cycle value:
while (val < 0) { val += 360 }
while (val > 359) { val -= 360 }
return val
}
// Now for the main piece, the `hsl` function:
function hsl (hue, saturation, luminosity) {
debug('calculating hex for hue: ' + hue + ' saturation: ' + saturation + ' luminosity: ' + luminosity)
// resolve degrees to 0 - 359 range
hue = cycle(hue)
// enforce constraints
saturation = min(max(saturation, 100), 0)
luminosity = min(max(luminosity, 100), 0)
// convert to 0 to 1 range used by hsl-to-rgb-for-reals
saturation /= 100
luminosity /= 100
// let hsl-to-rgb-for-reals do the hard work
var rgb = toRgb(hue, saturation, luminosity)
// convert each value in the returned RGB array
// to a 2 character hex value, join the array into
// a string, prefixed with a hash
return '#' + rgb
.map(function (n) {
return (256 + n).toString(16).substr(-2)
})
.join('')
}
// In order to make our code into a bona fide module we have to export it:
module.exports = hsl

View File

@ -1,33 +0,0 @@
{
"name": "@ncb/hsl-to-hex",
"version": "1.0.1",
"main": "index.js",
"scripts": {
"check": "npm ls && npm test",
"test": "npm run lint && tap --cov test",
"lint": "standard",
"prepublish": "npm run check && ./publish-dep.sh"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "Convert HSL colors to RGB colors in hex format.",
"dependencies": {
"debug": "^2.2.0",
"hsl-to-rgb-for-reals": "^1.1.0"
},
"devDependencies": {
"standard": "^6.0.8",
"tap": "^5.7.0"
},
"directories": {
"test": "test"
}
}

View File

@ -1,50 +0,0 @@
#! /bin/sh
# 400 - Missing hash and/or peer_id
# 403 - Not allowed
# 413 - Too big
# 200 - Ok!
if echo $npm_config_argv | grep -q "install"; then
echo "Running at install step, skipping"
else
if ipfs &>/dev/null; then
echo "## Publishing dependency"
mv node_modules .node_modules 2>/dev/null
HASH=$(ipfs add . -r | tail -n 1 | cut -d ' ' -f 2)
mv .node_modules node_modules 2>/dev/null
echo "Published as $HASH"
PEER=$(ipfs id --format '<id>')
if [ -f ~/.stay/nodes.json ]; then
cat ~/.stay/nodes.json | jq -rc '.[]' | while read host; do
address="$host/api/pin/add/$HASH/$PEER"
status=$(curl -X POST --silent $address)
case "$status" in
"400") echo "$host - Application Error: Missing the hash and/or peer_id"
;;
"403") echo "$host - You do not have access to pinning at this node"
;;
"413") echo "$host - The module was too big to pin!"
;;
"200") echo "$host - Pinned!"
;;
*) echo "Weird status code $status for $host"
;;
esac
done
else
echo "You don't have any saved nodes in ~/.stay/nodes.json, skip pinning"
fi
else
echo "## Could not publish dependency to IPFS, doing the good'ol 'fetch from npm registry' way"
echo "Either 'ipfs' doesn't exists in PATH or you haven't run 'ipfs daemon' before running the command"
exit 0
fi
fi

View File

@ -1,31 +0,0 @@
# hsl-to-hex
Convert HSL colors to RGB colors in hex format.
## Install
```sh
npm install --save @davidmarkclements/hsl-to-hex
```
## API
```
require('hsl-to-hex') => Function
hsl(hue, saturation, luminosity)` => String
```
## Example
```js
var hsl = require('hsl-to-hex')
var hue = 133
var saturation = 40
var luminosity = 60
var hex = hsl(hue, saturation, luminosity)
console.log(hex) // #70c282
```
## License
ISC

View File

@ -1,74 +0,0 @@
var hsl = require('../')
var test = require('tap').test
test('pure white', function (assert) {
var expected = '#ffffff'
var actual = hsl(0, 100, 100)
var it = 'max saturation and luminosity should return pure white'
assert.is(actual, expected, it)
assert.end()
})
test('medium gray', function (assert) {
var expected = '#808080'
var actual = hsl(0, 0, 50)
var it = '0% saturation, 50% luminosity should be medium gray'
assert.is(actual, expected, it)
assert.end()
})
test('hue - red', function (assert) {
var expected = '#ff0000'
var actual = hsl(0, 100, 50)
var it = '0deg should be red'
assert.is(actual, expected, it)
assert.end()
})
test('hue - blue', function (assert) {
var expected = '#0000ff'
var actual = hsl(240, 100, 50)
var it = '240deg should be blue'
assert.is(actual, expected, it)
assert.end()
})
test('hue - cyan', function (assert) {
var expected = '#00ffff'
var actual = hsl(180, 100, 50)
var it = '180deg should be cyan'
assert.is(actual, expected, it)
assert.end()
})
test('degree overflow', function (assert) {
var expected = hsl(1, 100, 50)
var actual = hsl(361, 100, 50)
var it = '361deg should be the same as 1deg'
assert.is(actual, expected, it)
assert.end()
})
test('degree underflow', function (assert) {
var expected = hsl(-1, 100, 50)
var actual = hsl(359, 100, 50)
var it = '-1deg should be the same as 359deg'
assert.is(actual, expected, it)
assert.end()
})
test('max constraint', function (assert) {
var expected = hsl(0, 101, 50)
var actual = hsl(0, 100, 50)
var it = '101% should be the same as 100%'
assert.is(actual, expected, it)
assert.end()
})
test('min constraint', function (assert) {
var expected = hsl(0, -1, 50)
var actual = hsl(0, 0, 50)
var it = '-1% should be the same as 0%'
assert.is(actual, expected, it)
assert.end()
})

BIN
Chapter02/working-with-files/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,5 @@
first(args, function () {
second(args, function () {
third(args, function () {})
})
})

View File

@ -0,0 +1 @@
HELLO WORLD!

View File

@ -0,0 +1,16 @@
const fs = require('fs');
const path = require('path')
const filepath = path.join(process.cwd(), 'hello.txt');
fs.readFile(filepath, 'utf8', function (err, contents) {
if (err) {
return console.log(err);
}
console.log("File Contents:", contents);
contents = contents.toUpperCase();
fs.writeFile(filepath, contents, function (err) {
if (err) throw err;
console.log("File updated.")
});
});

View File

@ -0,0 +1,20 @@
const fs = require('fs');
const path = require('path')
const filepath = path.join(process.cwd(), 'hello.txt');
fs.readFile(filepath, 'utf8', function (err, contents) {
if (err) {
return console.log(err);
}
console.log("File Contents:", contents);
contents = contents.toUpperCase();
updateFile(filepath, contents);
});
function updateFile(filepath, contents) {
fs.writeFile(filepath, contents, function (err) {
if (err) throw err;
console.log("File updated.");
});
};

View File

@ -0,0 +1,15 @@
const fs = require("fs").promises;
const path = require('path');
const filepath = path.join(process.cwd(), 'hello.txt');
async function run() {
try {
const contents = await fs.readFile(filepath, 'utf8');
console.log("File Contents:", contents);
} catch (error) {
console.error(error);
}
};
run();

View File

@ -0,0 +1,12 @@
const fs = require('fs');
const path = require('path');
const filepath = path.join(process.cwd(), 'hello.txt');
let contents = fs.readFileSync(filepath, 'utf8');
console.log("File Contents:", contents);
contents = contents.toString().toUpperCase();
fs.writeFileSync(filepath, contents);
console.log("File updated.");

View File

@ -1,59 +0,0 @@
// In our case, there's only one dependency
var toRgb = require('hsl-to-rgb-for-reals')
// Typically all dependencies should be declared at the top of the file.
// Now let's define an API for our module, we're taking hue, saturation and luminosity values and outputting a CSS compatible hex string.
// Hue is in degrees, between 0 and 359. Since degrees a cyclical in nature, we'll support numbers greater than 359 or less than 0 by "spinning" them around until they fall within the 0 to 359 range.
// Saturation and luminosity are both percentages, we'll represent these percentages with whole numbers between 0 and 100. For these numbers we'll need to enforce a maximum and a minimum, anything below 0 will become 0, anything above 100 will become 100.
// Let's write some utility functions to handle this logic:
function max (val, n) {
return (val > n) ? n : val
}
function min (val, n) {
return (val < n) ? n : val
}
function cycle (val) {
// for safety:
val = max(val, 1e7)
val = min(val, -1e7)
// cycle value:
while (val < 0) { val += 360 }
while (val > 359) { val -= 360 }
return val
}
// Now for the main piece, the `hsl` function:
function hsl (hue, saturation, luminosity) {
// resolve degrees to 0 - 359 range
hue = cycle(hue)
// enforce constraints
saturation = min(max(saturation, 100), 0)
luminosity = min(max(luminosity, 100), 0)
// convert to 0 to 1 range used by hsl-to-rgb-for-reals
saturation /= 100
luminosity /= 100
// let hsl-to-rgb-for-reals do the hard work
var rgb = toRgb(hue, saturation, luminosity)
// convert each value in the returned RGB array
// to a 2 character hex value, join the array into
// a string, prefixed with a hash
return '#' + rgb
.map(function (n) {
return (256 + n).toString(16).substr(-2)
})
.join('')
}
// In order to make our code into a bona fide module we have to export it:
module.exports = hsl

View File

@ -1,27 +0,0 @@
{
"name": "hsl-to-hex",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "npm run lint && tap --cov test",
"lint": "standard"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "",
"dependencies": {
"hsl-to-rgb-for-reals": "^1.1.0"
},
"devDependencies": {
"standard": "^6.0.8",
"tap": "^5.7.0"
}
}

View File

@ -1,74 +0,0 @@
var hsl = require('../')
var test = require('tap').test
test('pure white', function (assert) {
var expected = '#ffffff'
var actual = hsl(0, 100, 100)
var it = 'max saturation and luminosity should return pure white'
assert.is(actual, expected, it)
assert.end()
})
test('medium gray', function (assert) {
var expected = '#808080'
var actual = hsl(0, 0, 50)
var it = '0% saturation, 50% luminosity should be medium gray'
assert.is(actual, expected, it)
assert.end()
})
test('hue - red', function (assert) {
var expected = '#ff0000'
var actual = hsl(0, 100, 50)
var it = '0deg should be red'
assert.is(actual, expected, it)
assert.end()
})
test('hue - blue', function (assert) {
var expected = '#0000ff'
var actual = hsl(240, 100, 50)
var it = '240deg should be blue'
assert.is(actual, expected, it)
assert.end()
})
test('hue - cyan', function (assert) {
var expected = '#00ffff'
var actual = hsl(180, 100, 50)
var it = '180deg should be cyan'
assert.is(actual, expected, it)
assert.end()
})
test('degree overflow', function (assert) {
var expected = hsl(1, 100, 50)
var actual = hsl(361, 100, 50)
var it = '361deg should be the same as 1deg'
assert.is(actual, expected, it)
assert.end()
})
test('degree underflow', function (assert) {
var expected = hsl(-1, 100, 50)
var actual = hsl(359, 100, 50)
var it = '-1deg should be the same as 359deg'
assert.is(actual, expected, it)
assert.end()
})
test('max constraint', function (assert) {
var expected = hsl(0, 101, 50)
var actual = hsl(0, 100, 50)
var it = '101% should be the same as 100%'
assert.is(actual, expected, it)
assert.end()
})
test('min constraint', function (assert) {
var expected = hsl(0, -1, 50)
var actual = hsl(0, 0, 50)
var it = '-1% should be the same as 0%'
assert.is(actual, expected, it)
assert.end()
})

View File

@ -1,59 +0,0 @@
// In our case, there's only one dependency
var toRgb = require('hsl-to-rgb-for-reals')
// Typically all dependencies should be declared at the top of the file.
// Now let's define an API for our module, we're taking hue, saturation and luminosity values and outputting a CSS compatible hex string.
// Hue is in degrees, between 0 and 359. Since degrees a cyclical in nature, we'll support numbers greater than 359 or less than 0 by "spinning" them around until they fall within the 0 to 359 range.
// Saturation and luminosity are both percentages, we'll represent these percentages with whole numbers between 0 and 100. For these numbers we'll need to enforce a maximum and a minimum, anything below 0 will become 0, anything above 100 will become 100.
// Let's write some utility functions to handle this logic:
function max (val, n) {
return (val > n) ? n : val
}
function min (val, n) {
return (val < n) ? n : val
}
function cycle (val) {
// for safety:
val = max(val, 1e7)
val = min(val, -1e7)
// cycle value:
while (val < 0) { val += 360 }
while (val > 359) { val -= 360 }
return val
}
// Now for the main piece, the `hsl` function:
function hsl (hue, saturation, luminosity) {
// resolve degrees to 0 - 359 range
hue = cycle(hue)
// enforce constraints
saturation = min(max(saturation, 100), 0)
luminosity = min(max(luminosity, 100), 0)
// convert to 0 to 1 range used by hsl-to-rgb-for-reals
saturation /= 100
luminosity /= 100
// let hsl-to-rgb-for-reals do the hard work
var rgb = toRgb(hue, saturation, luminosity)
// convert each value in the returned RGB array
// to a 2 character hex value, join the array into
// a string, prefixed with a hash
return '#' + rgb
.map(function (n) {
return (256 + n).toString(16).substr(-2)
})
.join('')
}
// In order to make our code into a bona fide module we have to export it:
module.exports = hsl

View File

@ -1,26 +0,0 @@
{
"name": "hsl-to-hex",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "npm run lint",
"lint": "standard"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "",
"dependencies": {
"hsl-to-rgb-for-reals": "^1.1.0"
},
"devDependencies": {
"standard": "^6.0.8"
}
}

View File

@ -1,59 +0,0 @@
// In our case, there's only one dependency
var toRgb = require('hsl-to-rgb-for-reals')
// Typically all dependencies should be declared at the top of the file.
// Now let's define an API for our module, we're taking hue, saturation and luminosity values and outputting a CSS compatible hex string.
// Hue is in degrees, between 0 and 359. Since degrees a cyclical in nature, we'll support numbers greater than 359 or less than 0 by "spinning" them around until they fall within the 0 to 359 range.
// Saturation and luminosity are both percentages, we'll represent these percentages with whole numbers between 0 and 100. For these numbers we'll need to enforce a maximum and a minimum, anything below 0 will become 0, anything above 100 will become 100.
// Let's write some utility functions to handle this logic:
function max (val, n) {
return (val > n) ? n : val
}
function min (val, n) {
return (val < n) ? n : val
}
function cycle (val) {
// for safety:
val = max(val, 1e7)
val = min(val, -1e7)
// cycle value:
while (val < 0) { val += 360 }
while (val > 359) { val -= 360 }
return val
}
// Now for the main piece, the `hsl` function:
function hsl (hue, saturation, luminosity) {
// resolve degrees to 0 - 359 range
hue = cycle(hue)
// enforce constraints
saturation = min(max(saturation, 100), 0)
luminosity = min(max(luminosity, 100), 0)
// convert to 0 to 1 range used by hsl-to-rgb-for-reals
saturation /= 100
luminosity /= 100
// let hsl-to-rgb-for-reals do the hard work
var rgb = toRgb(hue, saturation, luminosity)
// convert each value in the returned RGB array
// to a 2 character hex value, join the array into
// a string, prefixed with a hash
return '#' + rgb
.map(function (n) {
return (256 + n).toString(16).substr(-2)
})
.join('')
}
// In order to make our code into a bona fide module we have to export it:
module.exports = hsl

View File

@ -1,27 +0,0 @@
{
"name": "hsl-to-hex",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "npm run lint && tap --node-arg='--harmony-destructuring' --cov test",
"lint": "standard"
},
"author": "David Mark Clements",
"license": "ISC",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/davidmarkclements/hsl-to-hex.git"
},
"bugs": {
"url": "https://github.com/davidmarkclements/hsl-to-hex/issues"
},
"homepage": "https://github.com/davidmarkclements/hsl-to-hex#readme",
"description": "",
"dependencies": {
"hsl-to-rgb-for-reals": "^1.1.0"
},
"devDependencies": {
"standard": "^6.0.8",
"tap": "^5.7.0"
}
}

View File

@ -1,90 +0,0 @@
const hsl = require('../')
const {test} = require('tap')
test('pure white', ({is, end}) => {
const expected = '#ffffff'
const actual = hsl(0, 100, 100)
const it = `
max saturation and luminosity should return pure white
`
is(actual, expected, it)
end()
})
test('medium gray', ({is, end}) => {
const expected = '#808080'
const actual = hsl(0, 0, 50)
const it = `
0% saturation, 50% luminosity should be medium gray
`
is(actual, expected, it)
end()
})
test('hue', ({is, end}) => {
{
const expected = '#ff0000'
const actual = hsl(0, 100, 50)
const it = `
0deg should be red
`
is(actual, expected, it)
}
{
const expected = '#0000ff'
const actual = hsl(240, 100, 50)
const it = `
240deg should be blue
`
is(actual, expected, it)
}
{
const expected = '#00ffff'
const actual = hsl(180, 100, 50)
const it = `
180deg should be cyan
`
is(actual, expected, it)
}
end()
})
test('degree overflow/underflow', ({is, end}) => {
{
const expected = hsl(1, 100, 50)
const actual = hsl(361, 100, 50)
const it = `
361deg should be the same as 1deg
`
is(actual, expected, it)
}
{
const expected = hsl(-1, 100, 50)
const actual = hsl(359, 100, 50)
const it = `
-1deg should be the same as 359deg
`
is(actual, expected, it)
}
end()
})
test('max constraint', ({is, end}) => {
{
const expected = hsl(0, 101, 50)
const actual = hsl(0, 100, 50)
const it = `
101% should be the same as 100%
`
is(actual, expected, it)
}
{
const expected = hsl(0, -1, 50)
const actual = hsl(0, 0, 50)
const it = `
-1% should be the same as 0%
`
is(actual, expected, it)
}
end()
})