Add isAscii (#629)

This commit is contained in:
Jaco Greeff
2020-07-08 11:14:55 +02:00
committed by GitHub
parent cf7d9d9ff5
commit b321f92161
6 changed files with 157 additions and 15 deletions
+4
View File
@@ -1,5 +1,9 @@
# CHANGELOG
## 2.18.0-beta.x
- Add `isAscii` to allow detection of ASCII characters (including tab, newline)
## 2.17.1 Jul 6, 2020
- Add `encode{Derived, Multi}Address` to encode derived/multi addresses
+1 -1
View File
@@ -22,7 +22,7 @@
},
"devDependencies": {
"@babel/core": "^7.10.4",
"@polkadot/dev": "^0.55.19",
"@polkadot/dev": "^0.55.20",
"@polkadot/ts": "^0.3.27",
"@types/jest": "^26.0.3"
},
+31
View File
@@ -0,0 +1,31 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
import { isAscii } from '.';
describe('isAscii', (): void => {
it('returns true for an ASCII string', (): void => {
expect(isAscii('Hello\tWorld!\n\rTesting')).toEqual(true);
});
it('returns true for ASCII bytes', (): void => {
expect(isAscii(new Uint8Array([0x31, 0x32, 0x20, 10]))).toEqual(true);
});
it('returns true for empty string inputs', (): void => {
expect(isAscii('')).toEqual(true);
});
it('returns true for empty U8a inputs', (): void => {
expect(isAscii(new Uint8Array())).toEqual(true);
});
it('returns false for empty undefined inputs', (): void => {
expect(isAscii()).toEqual(false);
});
it('returns false for non-printable characters', (): void => {
expect(isAscii(new Uint8Array([5]))).toEqual(false);
});
});
+24
View File
@@ -0,0 +1,24 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
import u8aToU8a from '../u8a/toU8a';
import isString from './string';
const FORMAT = [9, 10, 13];
/**
* @name isAscii
* @summary Tests if the input is printable ASCII
* @description
* Checks to see if the input string or Uint8Array is printable ASCII, 32-127 + formatters
*/
export default function isAscii (value?: number[] | Buffer | Uint8Array | string | null): boolean {
if (!value) {
return isString(value);
}
const u8a = u8aToU8a(value);
return !u8a.some((byte) => (byte >= 127) || (byte < 32 && !FORMAT.includes(byte)));
}
+1
View File
@@ -5,6 +5,7 @@
/**
* @summary Type checking utilities
*/
export { default as isAscii } from './ascii';
export { default as isBigInt } from './bigInt';
export { default as isBn } from './bn';
export { default as isBuffer } from './buffer';
+96 -14
View File
@@ -1330,6 +1330,16 @@ __metadata:
languageName: node
linkType: hard
"@babel/runtime-corejs3@npm:^7.8.3":
version: 7.10.4
resolution: "@babel/runtime-corejs3@npm:7.10.4"
dependencies:
core-js-pure: ^3.0.0
regenerator-runtime: ^0.13.4
checksum: 3/5621e6b5c680751b14c9827f8569153646c43335d4cfc9d7ee22b576a7a8455b1029b2b9d8f64c39fd3ce574e4e311cccafdf1ece484538529db37dd14560b0d
languageName: node
linkType: hard
"@babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.6":
version: 7.10.4
resolution: "@babel/runtime@npm:7.10.4"
@@ -2654,9 +2664,9 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/dev@npm:^0.55.19":
version: 0.55.19
resolution: "@polkadot/dev@npm:0.55.19"
"@polkadot/dev@npm:^0.55.20":
version: 0.55.20
resolution: "@polkadot/dev@npm:0.55.20"
dependencies:
"@babel/cli": ^7.10.4
"@babel/core": ^7.10.4
@@ -2685,10 +2695,10 @@ __metadata:
babel-jest: ^26.1.0
babel-plugin-module-resolver: ^4.0.0
babel-plugin-styled-components: ^1.10.7
browserslist: ^4.12.2
browserslist: ^4.13.0
coveralls: ^3.1.0
cpx: ^1.5.0
eslint: ^7.3.1
eslint: ^7.4.0
eslint-config-standard: ^14.1.1
eslint-import-resolver-node: ^0.3.4
eslint-plugin-header: ^3.0.0
@@ -2718,7 +2728,7 @@ __metadata:
vuepress: ^1.5.2
webpack: ^4.43.0
webpack-cli: ^3.3.12
yargs: ^15.3.1
yargs: ^15.4.0
bin:
polkadot-ci-ghact-build: scripts/polkadot-ci-ghact-build.js
polkadot-ci-ghact-docs: scripts/polkadot-ci-ghact-docs.js
@@ -2739,7 +2749,7 @@ __metadata:
polkadot-exec-typedoc: scripts/polkadot-exec-typedoc.js
polkadot-exec-vuepress: scripts/polkadot-exec-vuepress.js
polkadot-exec-webpack: scripts/polkadot-exec-webpack.js
checksum: 3/5f690f0995be5cbbf0b3522f7e494c3a23c1e35632918af0c34842363b5c93431192b058878c9cc91a1110a84c5aef1fd3100ed84ea2371d2c5af5322f877d31
checksum: 3/6cf7767a27f96be988064b43071898f9216e1ddedfc1de3d5c7dc4f4f0dddc2091de4127b15837ec572d3adaf4e29046e5c4704958fb73af9fd5a18761a2ca1f
languageName: node
linkType: hard
@@ -4914,7 +4924,7 @@ __metadata:
languageName: node
linkType: hard
"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.12.2, browserslist@npm:^4.8.5":
"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.8.5":
version: 4.12.2
resolution: "browserslist@npm:4.12.2"
dependencies:
@@ -4928,6 +4938,20 @@ __metadata:
languageName: node
linkType: hard
"browserslist@npm:^4.13.0":
version: 4.13.0
resolution: "browserslist@npm:4.13.0"
dependencies:
caniuse-lite: ^1.0.30001093
electron-to-chromium: ^1.3.488
escalade: ^3.0.1
node-releases: ^1.1.58
bin:
browserslist: cli.js
checksum: 3/91657dcc024f03f7b8a03f897e4a15c73774f39040f4e2fa9cb0e10b057113d71c97b29721590a80bf03dccfae1d69ad3fdf7326644c2c41cdd0410fb1a679a0
languageName: node
linkType: hard
"bser@npm:2.1.1":
version: 2.1.1
resolution: "bser@npm:2.1.1"
@@ -5231,6 +5255,13 @@ __metadata:
languageName: node
linkType: hard
"caniuse-lite@npm:^1.0.30001093":
version: 1.0.30001094
resolution: "caniuse-lite@npm:1.0.30001094"
checksum: 3/7b3ee77fda7b03fd613f39098452eecba004345c511779ed242393c06e45c9540dbb7deb9b21fc7a355ae6d8194e014395630d9a11172749f02f355a71665213
languageName: node
linkType: hard
"capture-exit@npm:^2.0.0":
version: 2.0.0
resolution: "capture-exit@npm:2.0.0"
@@ -6078,6 +6109,13 @@ __metadata:
languageName: node
linkType: hard
"core-js-pure@npm:^3.0.0":
version: 3.6.5
resolution: "core-js-pure@npm:3.6.5"
checksum: 3/91fc8e0b699d5bcb11f265ad4544d08c98096b86ad6c9b4c00109616db0aa992ceb58ea82d0dbae2a16658a7aaf2922aa6f9fc1107dc3b0055270799d0414a3f
languageName: node
linkType: hard
"core-js@npm:^2.4.0":
version: 2.6.11
resolution: "core-js@npm:2.6.11"
@@ -6637,6 +6675,15 @@ __metadata:
languageName: node
linkType: hard
"decamelize@npm:^3.2.0":
version: 3.2.0
resolution: "decamelize@npm:3.2.0"
dependencies:
xregexp: ^4.2.4
checksum: 3/dbe98e2e5f49a825c57a0f8c5ab0cb983669b71b6f689909b5f42888fb26c25d65a0c340930b2a3c2d770d6611e3be3b765e3776b75969263a3d401a31507ee4
languageName: node
linkType: hard
"decimal.js@npm:^10.2.0":
version: 10.2.0
resolution: "decimal.js@npm:10.2.0"
@@ -7270,6 +7317,13 @@ __metadata:
languageName: node
linkType: hard
"electron-to-chromium@npm:^1.3.488":
version: 1.3.488
resolution: "electron-to-chromium@npm:1.3.488"
checksum: 3/55f9f86483a2ba998b128de2f659a09ebe0ff46ac3518ebe948306999bfeab7567a1e40111ba65251ee84198dee575c6970ce4e91a59182ee923eb5234cc39ac
languageName: node
linkType: hard
"elliptic@npm:^6.0.0, elliptic@npm:^6.5.2, elliptic@npm:^6.5.3":
version: 6.5.3
resolution: "elliptic@npm:6.5.3"
@@ -7720,9 +7774,9 @@ __metadata:
languageName: node
linkType: hard
"eslint@npm:^7.3.1":
version: 7.3.1
resolution: "eslint@npm:7.3.1"
"eslint@npm:^7.4.0":
version: 7.4.0
resolution: "eslint@npm:7.4.0"
dependencies:
"@babel/code-frame": ^7.0.0
ajv: ^6.10.0
@@ -7762,7 +7816,7 @@ __metadata:
v8-compile-cache: ^2.0.3
bin:
eslint: bin/eslint.js
checksum: 3/5d9fd38514ffb43d0c326488bae2338861a654d507e40594f0d6b39efee5d91ec3105d5408f2add6891e8b47d512a75f06b4ce974c2d70bc6d9ae62574b31deb
checksum: 3/ef144e684ce031b045aca156439af5c5ec8a9b843613ed2948bb28ed767dc5e106d9f057a9bf93c752071b7833656bc7affa1d28daa9609c6ea59d1311f0a8de
languageName: node
linkType: hard
@@ -15736,7 +15790,7 @@ __metadata:
resolution: "root-workspace-0b6124@workspace:."
dependencies:
"@babel/core": ^7.10.4
"@polkadot/dev": ^0.55.19
"@polkadot/dev": ^0.55.20
"@polkadot/ts": ^0.3.27
"@types/jest": ^26.0.3
languageName: unknown
@@ -18928,6 +18982,15 @@ __metadata:
languageName: node
linkType: hard
"xregexp@npm:^4.2.4":
version: 4.3.0
resolution: "xregexp@npm:4.3.0"
dependencies:
"@babel/runtime-corejs3": ^7.8.3
checksum: 3/2dcef4888ea32e7c01b8f42d1ee3df24970de14b299a8f534ccecf2252d297092f92d037502176ec334b6c8d7cd1dd3dba0d3cf949e26f418d50b46846268839
languageName: node
linkType: hard
"xtend@npm:>=4.0.0 <4.1.0-0, xtend@npm:^4.0.0, xtend@npm:~4.0.1":
version: 4.0.2
resolution: "xtend@npm:4.0.2"
@@ -18992,7 +19055,7 @@ __metadata:
languageName: node
linkType: hard
"yargs-parser@npm:^18.1.1, yargs-parser@npm:^18.1.3":
"yargs-parser@npm:^18.1.1, yargs-parser@npm:^18.1.2, yargs-parser@npm:^18.1.3":
version: 18.1.3
resolution: "yargs-parser@npm:18.1.3"
dependencies:
@@ -19058,6 +19121,25 @@ __metadata:
languageName: node
linkType: hard
"yargs@npm:^15.4.0":
version: 15.4.0
resolution: "yargs@npm:15.4.0"
dependencies:
cliui: ^6.0.0
decamelize: ^3.2.0
find-up: ^4.1.0
get-caller-file: ^2.0.1
require-directory: ^2.1.1
require-main-filename: ^2.0.0
set-blocking: ^2.0.0
string-width: ^4.2.0
which-module: ^2.0.0
y18n: ^4.0.0
yargs-parser: ^18.1.2
checksum: 3/b4163b7e8f67250bdd4472b8c0a76665030199f3167dcaedc83a6c7daccd761d24208db83320414b9861b44dc3242d737864b13058b5a59c734a5e690d7b7692
languageName: node
linkType: hard
"yargs@npm:^2.1.1":
version: 2.3.0
resolution: "yargs@npm:2.3.0"