UNPKG

@deepkit/bson

Version:
136 lines 5.08 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; import { expect, test } from '@jest/globals'; import 'reflect-metadata'; import bson from 'bson'; import { parseObject, ParserV2 } from '../src/bson-parser'; import { getClassSchema, t } from '@deepkit/type'; import { getBSONDecoder } from '../src/bson-jit-parser'; import { getBSONSerializer } from '../src/bson-serialize'; import { findValueInObject } from '../src/continuation'; const { deserialize, serialize } = bson; test('basic', () => { const obj = { id: 123, name: 'Peter 1', tags: ['a', 'b', 'c'], priority: 0 }; const bson = serialize(obj); const items = parseObject(new ParserV2(bson)); expect(items).toEqual(obj); expect(findValueInObject(new ParserV2(bson), (elementType, name) => { return name === 'id'; })).toBe(123); expect(findValueInObject(new ParserV2(bson), (elementType, name) => { return elementType === 16 /* INT */; })).toBe(123); expect(findValueInObject(new ParserV2(bson), (elementType, name) => { return elementType === 2 /* STRING */; })).toBe('Peter 1'); expect(findValueInObject(new ParserV2(bson), (elementType, name) => { return elementType === 2 /* STRING */; })).toBe('Peter 1'); }); test('createBSONParser', () => { const obj = { number: 13, cursor: { firstBatch: [{ name: 'Peter' }, { name: 'Marc' }, { name: 'Bar' }], test: ['a', 'b', 'c'] }, ok: 1, }; const schema = t.schema({ number: t.number, cursor: t.type({ firstBatch: t.array({ name: t.string }), test: t.array(t.string), }), ok: t.number, }); const bson = serialize(obj); const parsed = getBSONDecoder(schema)(bson); expect(parsed).toEqual(obj); }); test('invalidation', () => { const schema = t.schema({ username: t.string }); { expect(getBSONDecoder(schema)(serialize({ username: 'Peter', foo: 'bar' }))).toEqual({ username: 'Peter' }); } { schema.addProperty('foo', t.string); const obj = { username: 'Peter', foo: 'bar' }; expect(getBSONDecoder(schema)(serialize(obj))).toEqual(obj); } }); test('undefined array', () => { const schema = t.schema({ username: t.string, organisations: t.array(t.string) }); { const bson = serialize({ username: 'Peter' }); //organisations stays undefined expect(getBSONDecoder(schema)(bson)).toEqual({ username: 'Peter' }); } { const bson = serialize({ username: 'Peter', organisations: [] }); //organisations stays undefined expect(getBSONDecoder(schema)(bson)).toEqual({ username: 'Peter', organisations: [] }); } }); test('constructor vars', () => { let UserBase = class UserBase { constructor(name) { this.name = name; this.id = 'abc'; this.version = 1; } }; __decorate([ t, __metadata("design:type", String) ], UserBase.prototype, "id", void 0); __decorate([ t, __metadata("design:type", Number) ], UserBase.prototype, "version", void 0); UserBase = __decorate([ __param(0, t), __metadata("design:paramtypes", [String]) ], UserBase); class User extends UserBase { constructor() { super(...arguments); this.connections = 10; } } __decorate([ t, __metadata("design:type", Number) ], User.prototype, "connections", void 0); expect(getClassSchema(UserBase).getProperty('name').methodName).toBe('constructor'); expect(getClassSchema(User).getProperty('name').methodName).toBe('constructor'); expect(getClassSchema(User).getMethodProperties('constructor').includes(getClassSchema(User).getProperty('name'))).toBe(true); const bson = getBSONSerializer(User)(new User('peter')); const json = deserialize(Buffer.from(bson)); expect(json.name).toBe('peter'); const back = getBSONDecoder(User)(bson); expect(back.name).toBe('peter'); }); //# sourceMappingURL=bson-parser.spec.js.map