Compare commits

..

25 Commits

Author SHA1 Message Date
25f80b6b59 3.0.12 2020-10-05 11:13:17 +00:00
176ac34504 fix(core): update 2020-10-05 11:13:17 +00:00
2707542234 3.0.11 2020-10-03 11:20:59 +00:00
ee025d094c fix(core): update 2020-10-03 11:20:58 +00:00
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 10253 additions and 543 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,16 @@
{ {
"npmci": { "npmci": {
"npmAccessLevel": "public" "npmAccessLevel": "public"
},
"gitzone": {
"projectType": "npm",
"module": {
"githost": "gitlab.com",
"gitscope": "pushrocks",
"gitrepo": "smartjson",
"shortDescription": "typed json handlers",
"npmPackagename": "@pushrocks/smartjson",
"license": "MIT"
}
} }
} }

10449
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,13 @@
{ {
"name": "@pushrocks/smartjson", "name": "@pushrocks/smartjson",
"version": "2.0.2", "version": "3.0.12",
"private": false, "private": false,
"description": "typed json handlers", "description": "typed json handlers",
"main": "dist/index.js", "main": "dist_ts/index.js",
"typings": "dist/index.d.ts", "typings": "dist_ts/index.d.ts",
"scripts": { "scripts": {
"test": "(tstest test/)", "test": "(tstest test/ --web)",
"build": "(tsbuild)" "build": "(tsbuild --web)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -20,13 +20,30 @@
}, },
"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.25",
"@gitzone/tsrun": "^1.1.12", "@gitzone/tsrun": "^1.2.12",
"@gitzone/tstest": "^1.0.15", "@gitzone/tstest": "^1.0.52",
"@pushrocks/tapbundle": "^3.0.1", "@pushrocks/tapbundle": "^3.2.9",
"@types/node": "^10.9.4" "@types/node": "^14.11.2",
"tslint": "^6.1.3",
"tslint-config-prettier": "^1.18.0"
}, },
"dependencies": { "dependencies": {
"lodash": "^4.17.10" "@types/buffer-json": "^2.0.0",
} "@types/fast-json-stable-stringify": "^2.0.0",
"buffer-json": "^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" }); const mySomeClass2 = SomeClass.enfoldFromObject({ thisis: 'test2' });
expect(mySomeClass) expect(mySomeClass2)
.property("thisis") .property('thisis')
.to.equal("test2"); .to.equal('test2');
}); });
tap.start() tap.start();

View File

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

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

@ -0,0 +1,20 @@
// third party scope
import lodashCloneDeep from 'lodash.clonedeep';
import stableJson2 from 'fast-json-stable-stringify';
import bufferJson from 'buffer-json';
const stableJson = stableJson2 as any;
export { bufferJson, 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"
} }