Compare commits

..

21 Commits

Author SHA1 Message Date
9bc1c4bf93 3.0.10 2019-12-15 19:27:19 +00:00
5176a34575 3.0.9 2019-12-15 19:05:21 +00:00
fe9f9299fc fix(core): update 2019-12-15 19:05:20 +00:00
62cf2fd262 3.0.8 2019-08-25 16:03:35 +02:00
65e581d48b fix(core): update 2019-08-25 16:03:34 +02:00
4ff97294bb 3.0.7 2019-08-09 10:55:54 +02:00
2d5bd6a2f0 fix(core): update 2019-08-09 10:55:54 +02:00
a2649b7854 3.0.6 2019-08-09 10:55:17 +02:00
b901f8604b fix(core): update 2019-08-09 10:55:17 +02:00
d70310ce8b 3.0.5 2019-07-04 17:04:24 +02:00
e0e9ceed31 fix(core): update 2019-07-04 17:04:24 +02:00
e3add99efe 3.0.4 2019-07-04 17:03:15 +02:00
91d57c84f4 fix(core): update 2019-07-04 17:03:15 +02:00
37b32d5d5d 3.0.3 2019-05-05 19:10:07 +02:00
f6199740aa fix(core): update 2019-05-05 19:10:07 +02:00
215cf77205 3.0.2 2019-05-05 19:01:19 +02:00
6e2c86dbb4 fix(core): update 2019-05-05 19:01:19 +02:00
a5b9bbd376 3.0.1 2019-02-14 23:21:04 +01:00
f6a9810e71 fix(security): add snyk policy 2019-02-14 23:21:03 +01:00
32423f5475 3.0.0 2019-02-14 23:16:34 +01:00
5e945ddad6 BREAKING CHANGE(core): renamed Folable to Smartjson and added deterministic stringify 2019-02-14 23:16:34 +01:00
12 changed files with 1500 additions and 499 deletions

20
.gitignore vendored
View File

@ -1,4 +1,22 @@
node_modules/ .nogit/
# artifacts
coverage/ coverage/
public/ public/
pages/ pages/
# installs
node_modules/
# caches
.yarn/
.cache/
.rpt2_cache
# builds
dist/
dist_web/
dist_serve/
dist_ts_web/
# custom

View File

@ -1,5 +1,7 @@
# gitzone standard # gitzone ci_default
image: hosttoday/ht-docker-node:npmci image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
variables:
GIT_STRATEGY: clone
cache: cache:
paths: paths:
@ -26,6 +28,7 @@ mirror:
snyk: snyk:
stage: security stage: security
script: script:
- npmci npm prepare
- npmci command npm install -g snyk - npmci command npm install -g snyk
- npmci command npm install --ignore-scripts - npmci command npm install --ignore-scripts
- npmci command snyk test - npmci command snyk test
@ -36,44 +39,35 @@ snyk:
# ==================== # ====================
# test stage # test stage
# ==================== # ====================
testLEGACY:
stage: test
script:
- npmci node install legacy
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
- notpriv
allow_failure: true
testLTS: testStable:
stage: test
script:
- npmci node install lts
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
- notpriv
testSTABLE:
stage: test stage: test
script: script:
- npmci npm prepare
- npmci node install stable - npmci node install stable
- npmci npm install - npmci npm install
- npmci npm test - npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
- priv
testBuild:
stage: test
script:
- npmci npm prepare
- npmci node install lts
- npmci npm install
- npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
- notpriv - notpriv
release: release:
stage: release stage: release
script: script:
- npmci node install stable - npmci node install lts
- npmci npm publish - npmci npm publish
only: only:
- tags - tags
@ -86,19 +80,11 @@ release:
# ==================== # ====================
codequality: codequality:
stage: metadata stage: metadata
image: docker:stable
allow_failure: true allow_failure: true
services:
- docker:stable-dind
script: script:
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') - npmci command npm install -g tslint typescript
- docker run - npmci npm install
--env SOURCE_CODE="$PWD" - npmci command "tslint -c tslint.json ./ts/**/*.ts"
--volume "$PWD":/code
--volume /var/run/docker.sock:/var/run/docker.sock
"registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code
artifacts:
paths: [codeclimate.json]
tags: tags:
- docker - docker
- priv - priv
@ -114,12 +100,15 @@ trigger:
- notpriv - notpriv
pages: pages:
image: hosttoday/ht-docker-node:npmci image: hosttoday/ht-docker-dbase:npmci
services:
- docker:18-dind
stage: metadata stage: metadata
script: script:
- npmci command npm install -g typedoc typescript - npmci command npm install -g @gitzone/tsdoc
- npmci npm prepare
- npmci npm install - npmci npm install
- npmci command typedoc --module "commonjs" --target "ES2016" --out public/ ts/ - npmci command tsdoc
tags: tags:
- docker - docker
- notpriv - notpriv
@ -130,13 +119,3 @@ pages:
paths: paths:
- public - public
allow_failure: true allow_failure: true
windowsCompatibility:
image: stefanscherer/node-windows:10-build-tools
stage: metadata
script:
- npm install & npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- windows
allow_failure: true

4
.snyk Normal file
View File

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

View File

@ -1,25 +1,20 @@
# smartjson # @pushrocks/smartjson
typed json handlers typed json handlers
## Availabililty ## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@pushrocks/smartjson)
[![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/smartjson) * [gitlab.com (source)](https://gitlab.com/pushrocks/smartjson)
[![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/smartjson) * [github.com (source mirror)](https://github.com/pushrocks/smartjson)
[![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/smartjson) * [docs (typedoc)](https://pushrocks.gitlab.io/smartjson/)
[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/smartjson/)
## Status for master ## Status for master
[![build status](https://gitlab.com/pushrocks/smartjson/badges/master/build.svg)](https://gitlab.com/pushrocks/smartjson/commits/master)
[![build status](https://GitLab.com/pushrocks/smartjson/badges/master/build.svg)](https://GitLab.com/pushrocks/smartjson/commits/master) [![coverage report](https://gitlab.com/pushrocks/smartjson/badges/master/coverage.svg)](https://gitlab.com/pushrocks/smartjson/commits/master)
[![coverage report](https://GitLab.com/pushrocks/smartjson/badges/master/coverage.svg)](https://GitLab.com/pushrocks/smartjson/commits/master) [![npm downloads per month](https://img.shields.io/npm/dm/@pushrocks/smartjson.svg)](https://www.npmjs.com/package/@pushrocks/smartjson)
[![npm downloads per month](https://img.shields.io/npm/dm/smartjson.svg)](https://www.npmjs.com/package/smartjson) [![Known Vulnerabilities](https://snyk.io/test/npm/@pushrocks/smartjson/badge.svg)](https://snyk.io/test/npm/@pushrocks/smartjson)
[![Dependency Status](https://david-dm.org/pushrocks/smartjson.svg)](https://david-dm.org/pushrocks/smartjson) [![TypeScript](https://img.shields.io/badge/TypeScript->=%203.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/smartjson/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/smartjson/master/dependencies/npm) [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![bitHound Code](https://www.bithound.io/github/pushrocks/smartjson/badges/code.svg)](https://www.bithound.io/github/pushrocks/smartjson) [![JavaScript Style Guide](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Usage ## Usage
@ -30,9 +25,11 @@ Use TypeScript for best in class instellisense.
SmartJson makes it easy to fold and enfold classes into and from JSON SmartJson makes it easy to fold and enfold classes into and from JSON
```javascript ```javascript
import { Foldable, foldDec } from 'smartjson'; import { Smartjson, foldDec } from 'smartjson';
class AwesomeClass extends Smartjson {
static stringify;
class AwesomeClass extends Foldable {
computedValue: string; computedValue: string;
@foldDec() // mark anotherValueToStore as foldable @foldDec() // mark anotherValueToStore as foldable
@ -48,9 +45,9 @@ myAwesomeInstance.enfoldFromObject({ anotherValueToStore: 'hi' });
foldedObject = myAwesomeInstance.foldToObject(); // will return {anotherValueToStore: 'hi'} foldedObject = myAwesomeInstance.foldToObject(); // will return {anotherValueToStore: 'hi'}
``` ```
For further information read the linked docs at the top of this README. For further information read the linked docs at the top of this readme.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) > MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
> | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
[![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://push.rocks) [![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)

View File

@ -1,5 +1,15 @@
{ {
"npmci": { "npmci": {
"npmAccessLevel": "public" "npmAccessLevel": "public"
},
"gitzone": {
"module": {
"githost": "gitlab.com",
"gitscope": "pushrocks",
"gitrepo": "smartjson",
"shortDescription": "typed json handlers",
"npmPackagename": "@pushrocks/smartjson",
"license": "MIT"
}
} }
} }

1716
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "@pushrocks/smartjson", "name": "@pushrocks/smartjson",
"version": "2.0.2", "version": "3.0.10",
"private": false, "private": false,
"description": "typed json handlers", "description": "typed json handlers",
"main": "dist/index.js", "main": "dist/index.js",
@ -20,13 +20,28 @@
}, },
"homepage": "https://gitlab.com/pushrocks/smartjson#README", "homepage": "https://gitlab.com/pushrocks/smartjson#README",
"devDependencies": { "devDependencies": {
"@gitzone/tsbuild": "^2.0.22", "@gitzone/tsbuild": "^2.1.17",
"@gitzone/tsrun": "^1.1.12", "@gitzone/tsrun": "^1.2.8",
"@gitzone/tstest": "^1.0.15", "@gitzone/tstest": "^1.0.28",
"@pushrocks/tapbundle": "^3.0.1", "@pushrocks/tapbundle": "^3.2.0",
"@types/node": "^10.9.4" "@types/node": "^12.12.17",
"tslint": "^5.20.1",
"tslint-config-prettier": "^1.18.0"
}, },
"dependencies": { "dependencies": {
"lodash": "^4.17.10" "@types/fast-json-stable-stringify": "^2.0.0",
} "fast-json-stable-stringify": "^2.1.0",
"lodash.clonedeep": "^4.5.0"
},
"files": [
"ts/*",
"ts_web/*",
"dist/*",
"dist_web/*",
"dist_ts_web/*",
"assets/*",
"cli.js",
"npmextra.json",
"readme.md"
]
} }

View File

@ -1,9 +1,9 @@
import { tap, expect } from "@pushrocks/tapbundle"; import { tap, expect } from '@pushrocks/tapbundle';
import { Foldable, foldDec } from "../ts/index"; import { Smartjson, foldDec } from '../ts/index';
class SomeClass extends Foldable { class SomeClass extends Smartjson {
@foldDec() thisis: string = "test"; @foldDec() thisis: string = 'test';
constructor() { constructor() {
super(); super();
console.log(this.saveableProperties); console.log(this.saveableProperties);
@ -12,24 +12,24 @@ class SomeClass extends Foldable {
let mySomeClass: SomeClass; let mySomeClass: SomeClass;
tap.test("should create a Foldable extended instance", async () => { tap.test('should create a Foldable extended instance', async () => {
mySomeClass = new SomeClass(); mySomeClass = new SomeClass();
expect(mySomeClass).to.be.instanceof(SomeClass); expect(mySomeClass).to.be.instanceof(SomeClass);
expect(mySomeClass).to.be.instanceof(Foldable); expect(mySomeClass).to.be.instanceof(Smartjson);
}); });
tap.test("should create a folded object", async () => { tap.test('should create a folded object', async () => {
let foldedObject = mySomeClass.foldToObject(); let foldedObject = mySomeClass.foldToObject();
expect(foldedObject) expect(foldedObject)
.property("thisis") .property('thisis')
.to.equal("test"); .to.equal('test');
}); });
tap.test("should enfold from object", async () => { tap.test('should enfold from object', async () => {
mySomeClass.enfoldFromObject({ thisis: "test2" }); mySomeClass.enfoldFromObject({ thisis: 'test2' });
expect(mySomeClass) expect(mySomeClass)
.property("thisis") .property('thisis')
.to.equal("test2"); .to.equal('test2');
}); });
tap.start() tap.start();

View File

@ -1,15 +1,28 @@
let lodash = require('lodash'); import * as plugins from './smartjson.plugins';
export class Foldable { export class Smartjson {
saveableProperties: string[]; // ======
// STATIC
// ======
public static parse = JSON.parse;
public static stringify = (objArg: any, optionsArg: plugins.IStableJsonTypes['Options']) => {
return plugins.stableJson(objArg, optionsArg);
}
// ========
// INSTANCE
// ========
public saveableProperties: string[];
/** /**
* folds a class into an object * folds a class into an object
*/ */
foldToObject() { public foldToObject() {
let newFoldedObject = {}; const newFoldedObject: { [key: string]: any } = {};
for (let keyName of this.saveableProperties) { for (const keyName of this.saveableProperties) {
newFoldedObject[keyName] = lodash.cloneDeep(this[keyName]); newFoldedObject[keyName] = plugins.lodashCloneDeep(this[keyName]);
} }
return newFoldedObject; return newFoldedObject;
} }
@ -17,8 +30,8 @@ export class Foldable {
/** /**
* enfolds data from an object * enfolds data from an object
*/ */
enfoldFromObject(objectArg) { public enfoldFromObject(objectArg) {
for (let keyName in objectArg) { for (const keyName in objectArg) {
if (this.saveableProperties.indexOf(keyName) !== -1) { if (this.saveableProperties.indexOf(keyName) !== -1) {
this[keyName] = objectArg[keyName]; this[keyName] = objectArg[keyName];
} }

18
ts/smartjson.plugins.ts Normal file
View File

@ -0,0 +1,18 @@
import lodashCloneDeep from 'lodash.clonedeep';
import stableJson2 from 'fast-json-stable-stringify';
const stableJson = stableJson2 as any;
export { lodashCloneDeep, stableJson };
export interface IStableJsonTypes {
Comparator: (a: IStableJsonTypes['CompareDescriptor'], b: IStableJsonTypes['CompareDescriptor']) => number;
CompareDescriptor: {
key: string;
value: any;
};
Options: {
cmp?: (a: IStableJsonTypes['CompareDescriptor'], b: IStableJsonTypes['CompareDescriptor']) => number;
cycles?: boolean;
};
}

View File

@ -1,7 +1,8 @@
{ {
"compilerOptions": { "compilerOptions": {
"experimentalDecorators": true, "experimentalDecorators": true,
"target": "es2016", "esModuleInterop": true,
"target": "es2017",
"module": "commonjs" "module": "commonjs"
} }
} }

View File

@ -1,3 +1,17 @@
{ {
"extends": "tslint-config-standard" "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"
} }