@oada/oadaify
Version:
Make OADA data nicer to work with in JS/TS
147 lines • 3.96 kB
JavaScript
"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 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