From 01629c535b422f7f772ca44f50866386da1d476b Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Wed, 17 Jan 2018 14:09:01 +0200 Subject: [PATCH 1/5] Hash methods --- snippets/hashBrowser.md | 22 ++++++++++++++++++++++ snippets/hashNode.md | 14 ++++++++++++++ tag_database | 2 ++ 3 files changed, 38 insertions(+) create mode 100644 snippets/hashBrowser.md create mode 100644 snippets/hashNode.md diff --git a/snippets/hashBrowser.md b/snippets/hashBrowser.md new file mode 100644 index 000000000..262746cef --- /dev/null +++ b/snippets/hashBrowser.md @@ -0,0 +1,22 @@ +### functionName + +Creates a hash for a value using the [SHA-256](https://en.wikipedia.org/wiki/SHA-2) algorithm. Returns a promise. + +Use the [SubtleCrypto](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto) API to create a hash for the given value. + +```js +const hashBrowser = val => + crypto.subtle + .digest('SHA-256', new TextEncoder('utf-8').encode(val)) + .then(h => { + let hexes = [], + view = new DataView(h); + for (let i = 0; i < view.byteLength; i += 4) + hexes.push(('00000000' + view.getUint32(i).toString(16)).slice(-8)); + return hexes.join(''); + }); +``` + +```js +hashBrowser(JSON.stringify({a :'a', b: [1,2,3,4], 'foo': {c: 'bar'}})).then(hash => console.log(hash)); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393' +``` diff --git a/snippets/hashNode.md b/snippets/hashNode.md new file mode 100644 index 000000000..9de0174b5 --- /dev/null +++ b/snippets/hashNode.md @@ -0,0 +1,14 @@ +### functionName + +Creates a hash for a value using the [SHA-256](https://en.wikipedia.org/wiki/SHA-2) algorithm. + +Use `crypto` API to create a hash for the given value. + +```js +const crypto = require('crypto'); +const hashNode = val => crypto.createHash('sha256').update(val).digest('hex'); +``` + +```js +hashNode(JSON.stringify({a :'a', b: [1,2,3,4], 'foo': {c: 'bar'}})); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393' +``` diff --git a/tag_database b/tag_database index 84a3b4dfa..d7a60d942 100644 --- a/tag_database +++ b/tag_database @@ -65,6 +65,8 @@ groupBy:array,object hammingDistance:math hasClass:browser,css hasFlags:node +hashBrowser:browser,utility,advanced +hashNode:node,utility head:array hexToRGB:utility,string,math,advanced hide:browser,css From a43efa885ccdbdfb778850ea9877400b49ca92c9 Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Wed, 17 Jan 2018 17:37:14 +0200 Subject: [PATCH 2/5] Update hashBrowser.md --- snippets/hashBrowser.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/hashBrowser.md b/snippets/hashBrowser.md index 262746cef..a6274c870 100644 --- a/snippets/hashBrowser.md +++ b/snippets/hashBrowser.md @@ -1,4 +1,4 @@ -### functionName +### hashBrowser Creates a hash for a value using the [SHA-256](https://en.wikipedia.org/wiki/SHA-2) algorithm. Returns a promise. From 5c0228d3cd868d8d91fb03ee55a1c26985a6d08d Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Wed, 17 Jan 2018 17:37:27 +0200 Subject: [PATCH 3/5] Update hashNode.md --- snippets/hashNode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/hashNode.md b/snippets/hashNode.md index 9de0174b5..ced01afb1 100644 --- a/snippets/hashNode.md +++ b/snippets/hashNode.md @@ -1,4 +1,4 @@ -### functionName +### hashNode Creates a hash for a value using the [SHA-256](https://en.wikipedia.org/wiki/SHA-2) algorithm. From b9c82fae1a16f8a496f0c4d4c93e11a6d521fd07 Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Wed, 17 Jan 2018 21:13:12 +0200 Subject: [PATCH 4/5] Update tdd and convert node snippet to async --- scripts/tdd.js | 2 +- snippets/hashBrowser.md | 2 +- snippets/hashNode.md | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/scripts/tdd.js b/scripts/tdd.js index 4d2183440..33d5978c4 100644 --- a/scripts/tdd.js +++ b/scripts/tdd.js @@ -29,7 +29,7 @@ snippetFiles.push(...snippetFilesArchive); // Current Snippet that depend on node_modules -const errSnippets = ['JSONToFile', 'readFileLines', 'UUIDGeneratorNode']; +const errSnippets = ['JSONToFile', 'readFileLines', 'UUIDGeneratorNode', 'hashNode']; console.time('Tester'); snippetFiles .filter(fileName => !errSnippets.includes(fileName)) diff --git a/snippets/hashBrowser.md b/snippets/hashBrowser.md index a6274c870..d81ee2cc9 100644 --- a/snippets/hashBrowser.md +++ b/snippets/hashBrowser.md @@ -18,5 +18,5 @@ const hashBrowser = val => ``` ```js -hashBrowser(JSON.stringify({a :'a', b: [1,2,3,4], 'foo': {c: 'bar'}})).then(hash => console.log(hash)); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393' +hashBrowser(JSON.stringify({a :'a', b: [1,2,3,4], 'foo': {c: 'bar'}})).then(console.log); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393' ``` diff --git a/snippets/hashNode.md b/snippets/hashNode.md index ced01afb1..59bf34149 100644 --- a/snippets/hashNode.md +++ b/snippets/hashNode.md @@ -1,14 +1,15 @@ ### hashNode -Creates a hash for a value using the [SHA-256](https://en.wikipedia.org/wiki/SHA-2) algorithm. +Creates a hash for a value using the [SHA-256](https://en.wikipedia.org/wiki/SHA-2) algorithm. Returns a promise. Use `crypto` API to create a hash for the given value. ```js const crypto = require('crypto'); -const hashNode = val => crypto.createHash('sha256').update(val).digest('hex'); +const hashNode = val => + new Promise(resolve => setTimeout(() => resolve(crypto.createHash('sha256').update(val).digest('hex')),0)); ``` ```js -hashNode(JSON.stringify({a :'a', b: [1,2,3,4], 'foo': {c: 'bar'}})); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393' +hashBrowser(JSON.stringify({a :'a', b: [1,2,3,4], 'foo': {c: 'bar'}})).then(console.log); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393' ``` From 6b9ca7249c0a8ef86a3db6791aaf689c4ea6fe3c Mon Sep 17 00:00:00 2001 From: 30secondsofcode <30secondsofcode@gmail.com> Date: Wed, 17 Jan 2018 19:27:05 +0000 Subject: [PATCH 5/5] Travis build: 1289 --- README.md | 66 +++++++++++++++++++++++++++++++++++++++++ docs/index.html | 26 +++++++++++++++- snippets/hashBrowser.md | 18 +++++------ snippets/hashNode.md | 15 ++++++++-- 4 files changed, 112 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index f2638c72f..7aca4b9d9 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,7 @@ average(1, 2, 3); * [`getScrollPosition`](#getscrollposition) * [`getStyle`](#getstyle) * [`hasClass`](#hasclass) +* [`hashBrowser`](#hashbrowser-) * [`hide`](#hide) * [`httpsRedirect`](#httpsredirect) * [`observeMutations`](#observemutations-) @@ -255,6 +256,7 @@ average(1, 2, 3); * [`colorize`](#colorize) * [`hasFlags`](#hasflags) +* [`hashNode`](#hashnode) * [`isTravisCI`](#istravisci) * [`JSONToFile`](#jsontofile) * [`readFileLines`](#readfilelines) @@ -2223,6 +2225,35 @@ hasClass(document.querySelector('p.special'), 'special'); // true
[⬆ Back to top](#table-of-contents) +### hashBrowser ![advanced](/advanced.svg) + +Creates a hash for a value using the [SHA-256](https://en.wikipedia.org/wiki/SHA-2) algorithm. Returns a promise. + +Use the [SubtleCrypto](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto) API to create a hash for the given value. + +```js +const hashBrowser = val => + crypto.subtle.digest('SHA-256', new TextEncoder('utf-8').encode(val)).then(h => { + let hexes = [], + view = new DataView(h); + for (let i = 0; i < view.byteLength; i += 4) + hexes.push(('00000000' + view.getUint32(i).toString(16)).slice(-8)); + return hexes.join(''); + }); +``` + +
+Examples + +```js +hashBrowser(JSON.stringify({ a: 'a', b: [1, 2, 3, 4], foo: { c: 'bar' } })).then(console.log); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393' +``` + +
+ +
[⬆ Back to top](#table-of-contents) + + ### hide Hides all the elements specified. @@ -3915,6 +3946,41 @@ hasFlags('special'); // false
[⬆ Back to top](#table-of-contents) +### hashNode + +Creates a hash for a value using the [SHA-256](https://en.wikipedia.org/wiki/SHA-2) algorithm. Returns a promise. + +Use `crypto` API to create a hash for the given value. + +```js +const crypto = require('crypto'); +const hashNode = val => + new Promise(resolve => + setTimeout( + () => + resolve( + crypto + .createHash('sha256') + .update(val) + .digest('hex') + ), + 0 + ) + ); +``` + +
+Examples + +```js +hashBrowser(JSON.stringify({ a: 'a', b: [1, 2, 3, 4], foo: { c: 'bar' } })).then(console.log); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393' +``` + +
+ +
[⬆ Back to top](#table-of-contents) + + ### isTravisCI Checks if the current environment is [Travis CI](https://travis-ci.org/). diff --git a/docs/index.html b/docs/index.html index 9b11b1347..6720fc8de 100644 --- a/docs/index.html +++ b/docs/index.html @@ -50,7 +50,7 @@ scrollToTop(); } }, false); - }

logo 30 seconds of code Curated collection of useful JavaScript snippets that you can understand in 30 seconds or less.

 

Adapter

call

Given a key and a set of arguments, call them when given a context. Primarily useful in composition.

Use a closure to call a stored key with stored arguments.

const call = (key, ...args) => context => context[key](...args);
+      }

logo 30 seconds of code Curated collection of useful JavaScript snippets that you can understand in 30 seconds or less.

 

Adapter

call

Given a key and a set of arguments, call them when given a context. Primarily useful in composition.

Use a closure to call a stored key with stored arguments.

const call = (key, ...args) => context => context[key](...args);
 
Promise.resolve([1, 2, 3])
   .then(call('map', x => 2 * x))
   .then(console.log); //[ 2, 4, 6 ]
@@ -449,6 +449,15 @@ hub.off
getStyle(document.querySelector('p'), 'font-size'); // '16px'
 

hasClass

Returns true if the element has the specified class, false otherwise.

Use element.classList.contains() to check if the element has the specified class.

const hasClass = (el, className) => el.classList.contains(className);
 
hasClass(document.querySelector('p.special'), 'special'); // true
+

hashBrowseradvanced

Creates a hash for a value using the SHA-256 algorithm. Returns a promise.

Use the SubtleCrypto API to create a hash for the given value.

const hashBrowser = val =>
+  crypto.subtle.digest('SHA-256', new TextEncoder('utf-8').encode(val)).then(h => {
+    let hexes = [],
+      view = new DataView(h);
+    for (let i = 0; i < view.byteLength; i += 4)
+      hexes.push(('00000000' + view.getUint32(i).toString(16)).slice(-8));
+    return hexes.join('');
+  });
+
hashBrowser(JSON.stringify({ a: 'a', b: [1, 2, 3, 4], foo: { c: 'bar' } })).then(console.log); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393'
 

hide

Hides all the elements specified.

Use the spread operator (...) and Array.forEach() to apply display: none to each element specified.

const hide = (...el) => [...el].forEach(e => (e.style.display = 'none'));
 
hide(...document.querySelectorAll('img')); // Hides all <img> elements on the page
 

httpsRedirect

Redirects the page to HTTPS if its currently in HTTP. Also, pressing the back button doesn't take it back to the HTTP page as its replaced in the history.

Use location.protocol to get the protocol currently being used. If it's not HTTPS, use location.replace() to replace the existing page with the HTTPS version of the page. Use location.href to get the full address, split it with String.split() and remove the protocol part of the URL.

const httpsRedirect = () => {
@@ -859,6 +868,21 @@ console.log<
 hasFlags('-s'); // true
 hasFlags('--test', 'cool=true', '-s'); // true
 hasFlags('special'); // false
+

hashNode

Creates a hash for a value using the SHA-256 algorithm. Returns a promise.

Use crypto API to create a hash for the given value.

const crypto = require('crypto');
+const hashNode = val =>
+  new Promise(resolve =>
+    setTimeout(
+      () =>
+        resolve(
+          crypto
+            .createHash('sha256')
+            .update(val)
+            .digest('hex')
+        ),
+      0
+    )
+  );
+
hashBrowser(JSON.stringify({ a: 'a', b: [1, 2, 3, 4], foo: { c: 'bar' } })).then(console.log); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393'
 

isTravisCI

Checks if the current environment is Travis CI.

Checks if the current environment has the TRAVIS and CI environment variables (reference).

const isTravisCI = () => 'TRAVIS' in process.env && 'CI' in process.env;
 
isTravisCI(); // true (if code is running on Travis CI)
 

JSONToFile

Writes a JSON object to a file.

Use fs.writeFile(), template literals and JSON.stringify() to write a json object to a .json file.

const fs = require('fs');
diff --git a/snippets/hashBrowser.md b/snippets/hashBrowser.md
index d81ee2cc9..38e4d978c 100644
--- a/snippets/hashBrowser.md
+++ b/snippets/hashBrowser.md
@@ -6,17 +6,15 @@ Use the [SubtleCrypto](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCr
 
 ```js
 const hashBrowser = val =>
-  crypto.subtle
-    .digest('SHA-256', new TextEncoder('utf-8').encode(val))
-    .then(h => {
-      let hexes = [],
-        view = new DataView(h);
-      for (let i = 0; i < view.byteLength; i += 4)
-        hexes.push(('00000000' + view.getUint32(i).toString(16)).slice(-8));
-      return hexes.join('');
-    });
+  crypto.subtle.digest('SHA-256', new TextEncoder('utf-8').encode(val)).then(h => {
+    let hexes = [],
+      view = new DataView(h);
+    for (let i = 0; i < view.byteLength; i += 4)
+      hexes.push(('00000000' + view.getUint32(i).toString(16)).slice(-8));
+    return hexes.join('');
+  });
 ```
 
 ```js
-hashBrowser(JSON.stringify({a :'a', b: [1,2,3,4], 'foo': {c: 'bar'}})).then(console.log); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393'
+hashBrowser(JSON.stringify({ a: 'a', b: [1, 2, 3, 4], foo: { c: 'bar' } })).then(console.log); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393'
 ```
diff --git a/snippets/hashNode.md b/snippets/hashNode.md
index 59bf34149..de94595da 100644
--- a/snippets/hashNode.md
+++ b/snippets/hashNode.md
@@ -7,9 +7,20 @@ Use `crypto` API to create a hash for the given value.
 ```js
 const crypto = require('crypto');
 const hashNode = val =>
-  new Promise(resolve => setTimeout(() => resolve(crypto.createHash('sha256').update(val).digest('hex')),0));
+  new Promise(resolve =>
+    setTimeout(
+      () =>
+        resolve(
+          crypto
+            .createHash('sha256')
+            .update(val)
+            .digest('hex')
+        ),
+      0
+    )
+  );
 ```
 
 ```js
-hashBrowser(JSON.stringify({a :'a', b: [1,2,3,4], 'foo': {c: 'bar'}})).then(console.log); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393'
+hashBrowser(JSON.stringify({ a: 'a', b: [1, 2, 3, 4], foo: { c: 'bar' } })).then(console.log); // '04aa106279f5977f59f9067fa9712afc4aedc6f5862a8defc34552d8c7206393'
 ```