diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0b92fd3..a95dfb6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,14 +3,14 @@ image: registry.gitlab.com/hosttoday/ht-docker-node:npmci cache: paths: - - .npmci_cache/ - key: "$CI_BUILD_STAGE" + - .npmci_cache/ + key: '$CI_BUILD_STAGE' stages: -- security -- test -- release -- metadata + - security + - test + - release + - metadata # ==================== # security stage @@ -18,21 +18,23 @@ stages: mirror: stage: security script: - - npmci git mirror + - npmci git mirror tags: - - docker - - notpriv + - lossless + - docker + - notpriv snyk: + image: registry.gitlab.com/hosttoday/ht-docker-node:snyk stage: security script: - npmci npm prepare - - npmci command npm install -g snyk - npmci command npm install --ignore-scripts - npmci command snyk test tags: - - docker - - notpriv + - lossless + - docker + - notpriv # ==================== # test stage @@ -41,37 +43,40 @@ snyk: testStable: stage: test script: - - npmci npm prepare - - npmci node install stable - - npmci npm install - - npmci npm test + - npmci npm prepare + - npmci node install stable + - npmci npm install + - npmci npm test coverage: /\d+.?\d+?\%\s*coverage/ tags: - - docker - - priv + - lossless + - docker + - priv testBuild: stage: test script: - - npmci npm prepare - - npmci node install stable - - npmci npm install - - npmci command npm run build + - npmci npm prepare + - npmci node install stable + - npmci npm install + - npmci command npm run build coverage: /\d+.?\d+?\%\s*coverage/ tags: - - docker - - notpriv + - lossless + - docker + - notpriv release: stage: release script: - - npmci node install stable - - npmci npm publish + - npmci node install stable + - npmci npm publish only: - - tags + - tags tags: - - docker - - notpriv + - lossless + - docker + - notpriv # ==================== # metadata stage @@ -85,30 +90,31 @@ codequality: - npmci npm install - npmci command "tslint -c tslint.json ./ts/**/*.ts" tags: - - docker - - priv + - lossless + - docker + - priv trigger: stage: metadata script: - - npmci trigger + - npmci trigger only: - - tags + - tags tags: - - docker - - notpriv + - lossless + - docker + - notpriv pages: - image: hosttoday/ht-docker-dbase:npmci - services: - - docker:stable-dind stage: metadata script: + - npmci node install lts - npmci command npm install -g @gitzone/tsdoc - npmci npm prepare - npmci npm install - npmci command tsdoc tags: + - lossless - docker - notpriv only: @@ -116,5 +122,5 @@ pages: artifacts: expire_in: 1 week paths: - - public + - public allow_failure: true diff --git a/README.md b/README.md deleted file mode 100644 index 07c71a4..0000000 --- a/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# @pushrocks/smartstring -handle strings in smart ways. TypeScript ready. - -## Availabililty and Links -* [npmjs.org (npm package)](https://www.npmjs.com/package/@pushrocks/smartstring) -* [gitlab.com (source)](https://gitlab.com/pushrocks/smartstring) -* [github.com (source mirror)](https://github.com/pushrocks/smartstring) -* [docs (typedoc)](https://pushrocks.gitlab.io/smartstring/) - -## Status for master -[![build status](https://gitlab.com/pushrocks/smartstring/badges/master/build.svg)](https://gitlab.com/pushrocks/smartstring/commits/master) -[![coverage report](https://gitlab.com/pushrocks/smartstring/badges/master/coverage.svg)](https://gitlab.com/pushrocks/smartstring/commits/master) -[![npm downloads per month](https://img.shields.io/npm/dm/@pushrocks/smartstring.svg)](https://www.npmjs.com/package/@pushrocks/smartstring) -[![Known Vulnerabilities](https://snyk.io/test/npm/@pushrocks/smartstring/badge.svg)](https://snyk.io/test/npm/@pushrocks/smartstring) -[![TypeScript](https://img.shields.io/badge/TypeScript->=%203.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/) -[![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/) -[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/) - -## Usage - -Use TypeScript for best in class instellisense. - -```javascript -import * as smartstring from 'smartstring'; - -// classes - -// smartstring.Domain class -let myDomain = new smartstring.Domain('https://sub.main.tld'); -myDomain.level1; // "tld" -myDomain.level2; // "main" -// level3 , level 4 and so on... -myDomain.zoneName; // "main.tld" -myDOmain.protocol; // "https" - -// smartstring.GitRepo class -let myGitRepo = new smartstring.GitRepo('git@github.com:someorg/somerepo.git'); // takes https and git and npm repo URL versions -myGitRepo.host; // "github.com" -myGitRepo.user; // "someorg" -myGitRepo.repo; // "somerepo" -myGitRepo.accessToken; // accessToken if specified with https -myGitRepo.sshUrl; // "git@github.com:someorg/somerepo.git" (computed also from https) -myGitRepo.httpsUrl; // "https://github.com/someorg/somerepo.git" (computed also from ssh) - -//smartstring.Base64 -let myBase64 = new smartstring.Base64('somestring', 'string'); // first arg is the string, second is string type (can be string, base64, base64uri) -myBase64.simpleString; // 'somestring' -myBase64.base64String; // base64 representation of 'somestring' -myBase64.base64UriString; // base64uri representation of 'sometring' - -// methods -smartstring.base64.encode('somestring'); // encodes 'somestring' to base64 -smartstring.base64.encodeUri('sometring'); // encodes 'somestring' to base64uri -smartstring.base64.decode(); // decodes base64 and base64uri to simple string respresentation - -smartstring.indent.indent('somestringanotherstring', 4); // indents a string by 4 -smartstring.indent.indent('somestringanotherstring', '>>>> '); // indents a string with a prefix -smartstring.indent.normalize(' somestring anotherstring', '>>>> '); // looks for the least amount of indention and removes superflouous space -``` - -For further information read the linked docs at the top of this readme. - -> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) -| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy) - -[![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com) diff --git a/package.json b/package.json index c26ae0f..e822a18 100644 --- a/package.json +++ b/package.json @@ -50,4 +50,4 @@ "npmextra.json", "readme.md" ] -} +} \ No newline at end of file diff --git a/ts/smartstring.type.ts b/ts/smartstring.type.ts index b62682e..e139152 100644 --- a/ts/smartstring.type.ts +++ b/ts/smartstring.type.ts @@ -20,7 +20,8 @@ export const isUtf8 = (stringArg: string) => { // non-overlong 2-byte 0xc2 <= bytes[i] && bytes[i] <= 0xdf && - (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xbf) + 0x80 <= bytes[i + 1] && + bytes[i + 1] <= 0xbf ) { i += 2; continue; @@ -29,14 +30,20 @@ export const isUtf8 = (stringArg: string) => { if ( // excluding overlongs (bytes[i] === 0xe0 && - (0xa0 <= bytes[i + 1] && bytes[i + 1] <= 0xbf) && - (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xbf)) || // straight 3-byte + 0xa0 <= bytes[i + 1] && + bytes[i + 1] <= 0xbf && + 0x80 <= bytes[i + 2] && + bytes[i + 2] <= 0xbf) || // straight 3-byte (((0xe1 <= bytes[i] && bytes[i] <= 0xec) || bytes[i] === 0xee || bytes[i] === 0xef) && - (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xbf) && - (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xbf)) || // excluding surrogates + 0x80 <= bytes[i + 1] && + bytes[i + 1] <= 0xbf && + 0x80 <= bytes[i + 2] && + bytes[i + 2] <= 0xbf) || // excluding surrogates (bytes[i] === 0xed && - (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x9f) && - (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xbf)) + 0x80 <= bytes[i + 1] && + bytes[i + 1] <= 0x9f && + 0x80 <= bytes[i + 2] && + bytes[i + 2] <= 0xbf) ) { i += 3; continue; @@ -45,18 +52,27 @@ export const isUtf8 = (stringArg: string) => { if ( // planes 1-3 (bytes[i] === 0xf0 && - (0x90 <= bytes[i + 1] && bytes[i + 1] <= 0xbf) && - (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xbf) && - (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xbf)) || // planes 4-15 + 0x90 <= bytes[i + 1] && + bytes[i + 1] <= 0xbf && + 0x80 <= bytes[i + 2] && + bytes[i + 2] <= 0xbf && + 0x80 <= bytes[i + 3] && + bytes[i + 3] <= 0xbf) || // planes 4-15 (0xf1 <= bytes[i] && bytes[i] <= 0xf3 && - (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xbf) && - (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xbf) && - (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xbf)) || // plane 16 + 0x80 <= bytes[i + 1] && + bytes[i + 1] <= 0xbf && + 0x80 <= bytes[i + 2] && + bytes[i + 2] <= 0xbf && + 0x80 <= bytes[i + 3] && + bytes[i + 3] <= 0xbf) || // plane 16 (bytes[i] === 0xf4 && - (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x8f) && - (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xbf) && - (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xbf)) + 0x80 <= bytes[i + 1] && + bytes[i + 1] <= 0x8f && + 0x80 <= bytes[i + 2] && + bytes[i + 2] <= 0xbf && + 0x80 <= bytes[i + 3] && + bytes[i + 3] <= 0xbf) ) { i += 4; continue; @@ -75,7 +91,9 @@ export const isBase64 = (stringArg: string) => { return false; } const firstPaddingChar = stringArg.indexOf('='); - return firstPaddingChar === -1 || + return ( + firstPaddingChar === -1 || firstPaddingChar === len - 1 || - (firstPaddingChar === len - 2 && stringArg[len - 1] === '='); + (firstPaddingChar === len - 2 && stringArg[len - 1] === '=') + ); };