UNPKG

@oada/oadaify

Version:

Make OADA data nicer to work with in JS/TS

170 lines 4.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const ava_1 = __importDefault(require("ava")); const ts_expect_1 = require("ts-expect"); const ajv_1 = __importDefault(require("ajv")); const _1 = require("./"); ava_1.default('should allow accessing OADA keys via symbol', (t) => { const input = { _id: 'resources/123', }; const output = _1.oadaify(input); t.is(output[_1._id], input._id); }); ava_1.default('OADA keys should not appear in loop', (t) => { const input = { _id: 'resources/1223', _rev: 2, _meta: {}, foo: 'bar', foo2: 'baz', }; const output = _1.oadaify(input); ts_expect_1.expectType(output); const o = {}; for (const key in output) { // TODO: Why doesn't TS realize key it keyof output?? const k = key; ts_expect_1.expectType(k); o[k] = output[k]; } t.deepEqual(o, { foo: 'bar', foo2: 'baz' }); }); ava_1.default('OADA keys should not appear in output type', (t) => { const input = { _id: 'resources/1223', _rev: 2, _meta: {}, foo: 'bar', foo2: 'baz', }; const output = _1.oadaify(input); // @ts-expect-error ts_expect_1.expectType(output); t.pass(); }); ava_1.default('should be idempotent', (t) => { const input = { _id: 'resources/1223', _rev: 2, _meta: {}, foo: 'bar', foo2: 'baz', }; const output1 = _1.oadaify(input); const output2 = _1.oadaify(output1); t.deepEqual(output1, output2); }); ava_1.default('Should work with JSON primitives', (t) => { const s = _1.oadaify('foobar'); ts_expect_1.expectType(s); t.is(s, 'foobar'); const se = _1.oadaify(''); ts_expect_1.expectType(se); t.is(se, ''); const n = _1.oadaify(1); ts_expect_1.expectType(n); t.is(n, 1); const nz = _1.oadaify(0); ts_expect_1.expectType(nz); t.is(nz, 0); const b = _1.oadaify(true); ts_expect_1.expectType(b); t.is(b, true); const bf = _1.oadaify(false); ts_expect_1.expectType(bf); t.is(bf, false); const nil = _1.oadaify(null); ts_expect_1.expectType(nil); t.is(nil, null); }); ava_1.default('Should work with arrays', (t) => { const arr = [ { _id: 'resources/1223', _rev: 2, _meta: {}, foo: 'bar', }, { _id: 'resources/1223', _rev: 2, _meta: {}, foo: 'bar', // TODO: How to get proper type inference on tuples? foo2: 'baz', }, ]; const output = _1.oadaify(arr); ts_expect_1.expectType(output); for (const out of output) { const o = {}; for (const key in out) { o[key] = out[key]; } t.like(o, { foo: 'bar' }); } }); ava_1.default('Should work with const arrays', (t) => { const arr = [ { _id: 'resources/1223', _rev: 2, _meta: {}, foo: 'bar', }, { _id: 'resources/1223', _rev: 2, _meta: {}, foo: 'bar', // TODO: How to get proper type inference on tuples? foo2: 'baz', }, ]; const output = _1.oadaify(arr); ts_expect_1.expectType(output); for (const out of output) { const o = {}; for (const key in out) { o[key] = out[key]; } t.like(o, { foo: 'bar' }); } }); ava_1.default('should include OADA keys in JSON', (t) => { const input = { _id: 'resources/123', _rev: 0, foo: 'bar', baz: { _id: 'resources/456', }, }; const output = _1.oadaify(input); const json = JSON.parse(JSON.stringify(output)); t.deepEqual(json, input); }); ava_1.default('should work right with ajv', (t) => { const input = { _id: 'resources/123', _rev: 1, foo: 'bar', }; const schema = { type: 'object', properties: { _id: { type: 'string' }, _rev: { type: 'integer' }, foo: { const: 'bar' }, }, required: ['_id', '_rev', 'foo'], }; const output = _1.oadaify(input); const ajv = new ajv_1.default(); t.true(ajv.validate(schema, output), ajv.errorsText()); }); //# sourceMappingURL=index.spec.js.map