30 Commits

Author SHA1 Message Date
4fa410a3bd 3.0.4 2023-09-22 13:55:56 +02:00
ca447ded30 fix(core): update 2023-09-22 13:55:56 +02:00
777ed7575c 3.0.3 2023-09-22 13:51:12 +02:00
a78e3e3362 fix(core): update 2023-09-22 13:51:11 +02:00
b8e91e9bf8 switch to new org scheme 2023-07-11 00:47:21 +02:00
f6630f065d switch to new org scheme 2023-07-10 02:56:14 +02:00
bc8bf48679 3.0.2 2023-01-09 16:38:10 +01:00
ef06e465cb fix(core): update 2023-01-09 16:38:09 +01:00
e3eca5528d 3.0.1 2022-06-26 11:37:08 +02:00
d43f568795 fix(core): update 2022-06-26 11:37:07 +02:00
85f2cc4745 3.0.0 2022-06-26 11:34:09 +02:00
143eef8781 BREAKING CHANGE(core): switch to esm 2022-06-26 11:34:09 +02:00
bb7bee3b42 2.1.10 2021-03-01 01:27:16 +00:00
50197d4634 fix(core): update 2021-03-01 01:27:15 +00:00
2e7a61541f 2.1.9 2021-03-01 01:26:55 +00:00
5a6ae2f083 fix(core): update 2021-03-01 01:26:55 +00:00
bf1b89a95a 2.1.8 2020-10-05 15:07:29 +00:00
3e2b300cdb fix(core): update 2020-10-05 15:07:28 +00:00
d865e3b874 2.1.7 2020-09-29 15:54:05 +00:00
13f1f854ce fix(core): update 2020-09-29 15:54:05 +00:00
34586b5fec 2.1.6 2019-12-15 22:49:22 +00:00
edb13cbdcf fix(core): update 2019-12-15 22:49:22 +00:00
5c2e01fe84 2.1.5 2019-12-15 19:22:27 +00:00
d348590e9a fix(core): update 2019-12-15 19:22:27 +00:00
c908cd824b 2.1.4 2019-12-15 19:18:45 +00:00
4a62342015 fix(core): update 2019-12-15 19:18:44 +00:00
0a9a0d3e90 2.1.3 2019-12-15 19:17:28 +00:00
8d5238e23e fix(core): update 2019-12-15 19:17:28 +00:00
9e5ce63c24 2.1.2 2019-12-15 19:12:02 +00:00
3921cbc8f8 fix(core): update 2019-12-15 19:12:01 +00:00
22 changed files with 5981 additions and 1942 deletions

View File

@ -0,0 +1,66 @@
name: Default (not tags)
on:
push:
tags-ignore:
- '**'
env:
IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci
NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitea.lossless.digital/${{gitea.repository}}.git
NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}}
NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}}
NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}}
NPMCI_URL_CLOUDLY: ${{secrets.NPMCI_URL_CLOUDLY}}
jobs:
security:
runs-on: ubuntu-latest
continue-on-error: true
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Install pnpm and npmci
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
- name: Run npm prepare
run: npmci npm prepare
- name: Audit production dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --prod
continue-on-error: true
- name: Audit development dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --dev
continue-on-error: true
test:
if: ${{ always() }}
needs: security
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Test stable
run: |
npmci node install stable
npmci npm install
npmci npm test
- name: Test build
run: |
npmci node install stable
npmci npm install
npmci npm build

View File

@ -0,0 +1,124 @@
name: Default (tags)
on:
push:
tags:
- '*'
env:
IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci
NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitea.lossless.digital/${{gitea.repository}}.git
NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}}
NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}}
NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}}
NPMCI_URL_CLOUDLY: ${{secrets.NPMCI_URL_CLOUDLY}}
jobs:
security:
runs-on: ubuntu-latest
continue-on-error: true
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Audit production dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --prod
continue-on-error: true
- name: Audit development dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --dev
continue-on-error: true
test:
if: ${{ always() }}
needs: security
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Test stable
run: |
npmci node install stable
npmci npm install
npmci npm test
- name: Test build
run: |
npmci node install stable
npmci npm install
npmci npm build
release:
needs: test
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Release
run: |
npmci node install stable
npmci npm publish
metadata:
needs: test
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
continue-on-error: true
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Code quality
run: |
npmci command npm install -g typescript
npmci npm install
- name: Trigger
run: npmci trigger
- name: Build docs and upload artifacts
run: |
npmci node install stable
npmci npm install
pnpm install -g @gitzone/tsdoc
npmci command tsdoc
continue-on-error: true

4
.gitignore vendored
View File

@ -15,8 +15,6 @@ node_modules/
# builds
dist/
dist_web/
dist_serve/
dist_ts_web/
dist_*/
# custom

View File

@ -1,126 +0,0 @@
# gitzone ci_default
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
cache:
paths:
- .npmci_cache/
key: '$CI_BUILD_STAGE'
stages:
- security
- test
- release
- metadata
# ====================
# security stage
# ====================
mirror:
stage: security
script:
- npmci git mirror
tags:
- lossless
- docker
- notpriv
snyk:
image: registry.gitlab.com/hosttoday/ht-docker-node:snyk
stage: security
script:
- npmci npm prepare
- npmci command npm install --ignore-scripts
- npmci command snyk test
tags:
- lossless
- docker
- notpriv
# ====================
# test stage
# ====================
testStable:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- lossless
- docker
- priv
testBuild:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- lossless
- docker
- notpriv
release:
stage: release
script:
- npmci node install stable
- npmci npm publish
only:
- tags
tags:
- lossless
- docker
- notpriv
# ====================
# metadata stage
# ====================
codequality:
stage: metadata
allow_failure: true
script:
- npmci command npm install -g tslint typescript
- npmci npm prepare
- npmci npm install
- npmci command "tslint -c tslint.json ./ts/**/*.ts"
tags:
- lossless
- docker
- priv
trigger:
stage: metadata
script:
- npmci trigger
only:
- tags
tags:
- lossless
- docker
- notpriv
pages:
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:
- tags
artifacts:
expire_in: 1 week
paths:
- public
allow_failure: true

4
.snyk
View File

@ -1,4 +0,0 @@
# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
version: v1.13.3
ignore: {}
patch: {}

11
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "npm test",
"name": "Run npm test",
"request": "launch",
"type": "node-terminal"
}
]
}

26
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,26 @@
{
"json.schemas": [
{
"fileMatch": ["/npmextra.json"],
"schema": {
"type": "object",
"properties": {
"npmci": {
"type": "object",
"description": "settings for npmci"
},
"gitzone": {
"type": "object",
"description": "settings for gitzone",
"properties": {
"projectType": {
"type": "string",
"enum": ["website", "element", "service", "npm", "wcc"]
}
}
}
}
}
}
]
}

View File

View File

@ -1,11 +1,12 @@
{
"gitzone": {
"projectType": "npm",
"module": {
"githost": "gitlab.com",
"gitscope": "pushrocks",
"gitscope": "push.rocks",
"gitrepo": "smarthash",
"shortDescription": "simplifies access to node hash functions",
"npmPackagename": "@pushrocks/smarthash",
"description": "simplifies access to node hash functions",
"npmPackagename": "@push.rocks/smarthash",
"license": "MIT"
}
},

1728
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,14 @@
{
"name": "@pushrocks/smarthash",
"version": "2.1.1",
"name": "@push.rocks/smarthash",
"version": "3.0.4",
"private": false,
"description": "simplified access to node hash functions",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts",
"scripts": {
"test": "(tstest test/)",
"build": "(tsbuild)"
},
"repository": {
"type": "git",
"url": "git+https://github.com/pushrocks/nodehash.git"
"test": "(tstest test/ --web)",
"build": "(tsbuild --web --allowimplicitany)",
"buildDocs": "tsdoc"
},
"keywords": [
"pushrocks",
@ -24,34 +21,33 @@
],
"author": "Lossless GmbH",
"license": "MIT",
"bugs": {
"url": "https://github.com/pushrocks/nodehash/issues"
},
"homepage": "https://github.com/pushrocks/nodehash#readme",
"devDependencies": {
"@gitzone/tsbuild": "^2.1.17",
"@gitzone/tsrun": "^1.2.8",
"@gitzone/tstest": "^1.0.28",
"@pushrocks/tapbundle": "^3.2.0",
"@types/node": "^12.12.11",
"tslint": "^5.20.1",
"tslint-config-prettier": "^1.18.0"
"@git.zone/tsbuild": "^2.1.70",
"@git.zone/tsrun": "^1.2.46",
"@git.zone/tstest": "^1.0.81",
"@push.rocks/tapbundle": "^5.0.15",
"@types/node": "^20.6.3"
},
"dependencies": {
"@pushrocks/smartjson": "^3.0.8",
"@pushrocks/smartpromise": "^3.0.6",
"@types/through2": "^2.0.34",
"through2": "^3.0.1"
"@push.rocks/smartjson": "^5.0.10",
"@push.rocks/smartpromise": "^4.0.3",
"@types/through2": "^2.0.39",
"through2": "^4.0.2"
},
"files": [
"ts/**/*",
"ts_web/**/*",
"dist/**/*",
"dist_web/**/*",
"dist_*/**/*",
"dist_ts/**/*",
"dist_ts_web/**/*",
"assets/**/*",
"cli.js",
"npmextra.json",
"readme.md"
]
],
"browserslist": [
"last 1 chrome versions"
],
"type": "module"
}

5594
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

73
readme.md Normal file
View File

@ -0,0 +1,73 @@
# @push.rocks/smarthash
simplifies access to node hash functions
## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@push.rocks/smarthash)
* [gitlab.com (source)](https://gitlab.com/push.rocks/smarthash)
* [github.com (source mirror)](https://github.com/push.rocks/smarthash)
* [docs (typedoc)](https://push.rocks.gitlab.io/smarthash/)
## Status for master
Status Category | Status Badge
-- | --
GitLab Pipelines | [![pipeline status](https://gitlab.com/push.rocks/smarthash/badges/master/pipeline.svg)](https://lossless.cloud)
GitLab Pipline Test Coverage | [![coverage report](https://gitlab.com/push.rocks/smarthash/badges/master/coverage.svg)](https://lossless.cloud)
npm | [![npm downloads per month](https://badgen.net/npm/dy/@push.rocks/smarthash)](https://lossless.cloud)
Snyk | [![Known Vulnerabilities](https://badgen.net/snyk/push.rocks/smarthash)](https://lossless.cloud)
TypeScript Support | [![TypeScript](https://badgen.net/badge/TypeScript/>=%203.x/blue?icon=typescript)](https://lossless.cloud)
node Support | [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
Code Style | [![Code Style](https://badgen.net/badge/style/prettier/purple)](https://lossless.cloud)
PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@push.rocks/smarthash)](https://lossless.cloud)
PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@push.rocks/smarthash)](https://lossless.cloud)
BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@push.rocks/smarthash)](https://lossless.cloud)
## Usage
We recommend the use of TypeScript for best in class intellisense.
```typescript
import * as smarthash from "smarthash";
// ======
// sha265
// ======
// from stream
let readStream = fs.createReadStream("./somefile.txt")
smarthash.sha256FromStream(readStream)
.then((resultString){
console.log(resultString); // prints hash of the file
});
// from file
smarthash.sha256FromFile("./somefile.txt")
.then((resultString){
console.log(resultString); // prints hash of the file
});
// from string
smarthash.sha256FromString("some weird random string")
.then((resultString){
console.log(resultString); // prints hash of the file
});
let hashString = smarthash.sha256FromStringSync("some weird random string");
// ===
// md5
// ===
smarthash.md5FromString('hellothere').then(md5String = {
// do something with it here
})
```
## Contribution
We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)
For further information read the linked docs at the top of this readme.
## Legal
> MIT licensed | **©** [Task Venture Capital GmbH](https://task.vc)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)

View File

@ -1,55 +1,55 @@
import { tap, expect } from '@pushrocks/tapbundle';
import fs = require('fs');
import { tap, expect } from '@push.rocks/tapbundle';
import * as fs from 'fs';
import * as smarthash from '../ts/index';
import * as smarthash from '../ts/index.js';
tap.test('sha256FromStringSync should convert a String to sha256 hash synchronously', async () => {
const testHash = smarthash.sha256FromStringSync('test');
const testHash2 = smarthash.sha256FromStringSync('testString');
const testHash3 = smarthash.sha256FromStringSync('test');
expect(testHash).to.equal(testHash3);
expect(testHash).to.not.equal('test');
expect(testHash).toEqual(testHash3);
expect(testHash).not.toEqual('test');
});
tap.test('sha256fromStringSync should convert a String to sha256 hash synchronously', async () => {
const resultString = await smarthash.sha256FromString('test');
const compareString = smarthash.sha256FromStringSync('test');
expect(resultString).to.equal(compareString);
expect(resultString).toEqual(compareString);
});
tap.test('sha256fromStream should convert a Stream to sha256', async tools => {
tap.test('sha256fromStream should convert a Stream to sha256', async (tools) => {
const readStream = fs.createReadStream('./test/testImageForHash.jpg');
const resultString: string = await smarthash.sha256FromStream(readStream);
expect(resultString).to.equal('45b80413ed93acb495691186ce61850449439f9183352b9bff96d5533fa1046c');
expect(resultString).toEqual('45b80413ed93acb495691186ce61850449439f9183352b9bff96d5533fa1046c');
});
tap.test('sha256fromFile should convert a Stream to sha256', async () => {
const resultString = await smarthash.sha256FromFile('./test/testImageForHash.jpg');
expect(resultString).to.equal('45b80413ed93acb495691186ce61850449439f9183352b9bff96d5533fa1046c');
expect(resultString).toEqual('45b80413ed93acb495691186ce61850449439f9183352b9bff96d5533fa1046c');
});
tap.test('should produce reproducible hash from Object', async () => {
const hash1 = await smarthash.sha265FromObject({
hithere: 1,
wow: 'two'
wow: 'two',
});
const hash2 = await smarthash.sha265FromObject({
wow: 'two',
hithere: 1
hithere: 1,
});
const hash3 = await smarthash.sha265FromObject({
wow: 'twoe',
hithere: 1
hithere: 1,
});
expect(hash1).to.equal(hash2);
expect(hash1).to.not.equal(hash3);
expect(hash1).toEqual(hash2);
expect(hash1).not.toEqual(hash3);
});
tap.test('should create md5hash from string', async () => {
const md5Hash = await smarthash.md5FromString('hellothere');
expect(md5Hash).to.equal('c6f7c372641dd25e0fddf0215375561f');
expect(md5Hash).toEqual('c6f7c372641dd25e0fddf0215375561f');
});
tap.start();

8
ts/00_commitinfo_data.ts Normal file
View File

@ -0,0 +1,8 @@
/**
* autocreated commitinfo by @pushrocks/commitinfo
*/
export const commitinfo = {
name: '@push.rocks/smarthash',
version: '3.0.4',
description: 'simplified access to node hash functions'
}

View File

@ -1,4 +1,4 @@
import * as plugins from './nodehash.plugins';
import * as plugins from './nodehash.plugins.js';
export * from './nodehash.sha256';
export * from './nodehash.md5';
export * from './nodehash.sha256.js';
export * from './nodehash.md5.js';

View File

@ -1,12 +1,12 @@
import * as plugins from './nodehash.plugins';
import * as plugins from './nodehash.plugins.js';
export const hashStreamPipeStop = resolveFuntion => {
const forEach = (chunk: Buffer, enc, cb) => {
resolveFuntion(chunk.toString('utf8'));
export const hashStreamPipeStop = (resolveFunctionArg: (inputArg: string) => any) => {
const forEach = (chunk: Buffer, enc: any, cb: any) => {
resolveFunctionArg(chunk.toString('utf8'));
cb(null, chunk);
};
const atEnd = cb => {
const atEnd = (cb: any) => {
cb();
};

View File

@ -1,8 +1,5 @@
import * as plugins from './nodehash.plugins';
import * as plugins from './nodehash.plugins.js';
export const md5FromString = async (stringToHash: string) => {
return plugins.crypto
.createHash('md5')
.update(stringToHash)
.digest('hex');
return plugins.crypto.createHash('md5').update(stringToHash).digest('hex');
};

View File

@ -7,8 +7,8 @@ import * as stream from 'stream';
export { crypto, fs, path, stream };
// pushrocks scope
import * as smartpromise from '@pushrocks/smartpromise';
import * as smartjson from '@pushrocks/smartjson';
import * as smartpromise from '@push.rocks/smartpromise';
import * as smartjson from '@push.rocks/smartjson';
export { smartpromise, smartjson };

View File

@ -1,5 +1,5 @@
import * as plugins from './nodehash.plugins';
import * as helpers from './nodehash.helpers';
import * as plugins from './nodehash.plugins.js';
import * as helpers from './nodehash.helpers.js';
/**
* creates sha256 Hash from Stream
@ -26,7 +26,7 @@ export const sha256FromFile = async (filePath: string): Promise<string> => {
/**
* Computes sha256 Hash from String synchronously
*/
export let sha256FromStringSync = (stringArg): string => {
export const sha256FromStringSync = (stringArg: string): string => {
const hash = plugins.crypto.createHash('sha256');
hash.update(stringArg);
return hash.digest('hex');
@ -42,11 +42,21 @@ export const sha256FromString = async (stringArg: string): Promise<string> => {
return hashResult;
};
/**
* Computes sha256 Hash from String
*/
export const sha256FromBuffer = async (bufferArg: Buffer): Promise<string> => {
const hash = plugins.crypto.createHash('sha256');
hash.update(bufferArg);
const hashResult = hash.digest('hex');
return hashResult;
};
/**
* computes sha265 Hash from Object
*/
export const sha265FromObject = async (objectArg: any): Promise<string> => {
const stringifiedObject = plugins.smartjson.Smartjson.stringify(objectArg, {});
const stringifiedObject = plugins.smartjson.stringify(objectArg);
const hashResult = await sha256FromString(stringifiedObject);
return hashResult;
};

10
tsconfig.json Normal file
View File

@ -0,0 +1,10 @@
{
"compilerOptions": {
"experimentalDecorators": true,
"useDefineForClassFields": false,
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "nodenext",
"esModuleInterop": true
}
}

View File

@ -1,17 +0,0 @@
{
"extends": ["tslint:latest", "tslint-config-prettier"],
"rules": {
"semicolon": [true, "always"],
"no-console": false,
"ordered-imports": false,
"object-literal-sort-keys": false,
"member-ordering": {
"options":{
"order": [
"static-method"
]
}
}
},
"defaultSeverity": "warning"
}