@transcend-io/type-utils 2.0.1 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -21
- package/dist/index.d.mts +591 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +530 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +33 -43
- package/.yarn/sdks/eslint/package.json +0 -14
- package/.yarn/sdks/prettier/package.json +0 -7
- package/.yarn/sdks/typescript/package.json +0 -10
- package/README.md +0 -37
- package/build/aggregateObjects.d.ts +0 -27
- package/build/aggregateObjects.d.ts.map +0 -1
- package/build/aggregateObjects.js +0 -34
- package/build/aggregateObjects.js.map +0 -1
- package/build/apply.d.ts +0 -35
- package/build/apply.d.ts.map +0 -1
- package/build/apply.js +0 -47
- package/build/apply.js.map +0 -1
- package/build/codecTools/FixedLengthArray.d.ts +0 -20
- package/build/codecTools/FixedLengthArray.d.ts.map +0 -1
- package/build/codecTools/FixedLengthArray.js +0 -11
- package/build/codecTools/FixedLengthArray.js.map +0 -1
- package/build/codecTools/FixedLengthString.d.ts +0 -17
- package/build/codecTools/FixedLengthString.d.ts.map +0 -1
- package/build/codecTools/FixedLengthString.js +0 -10
- package/build/codecTools/FixedLengthString.js.map +0 -1
- package/build/codecTools/NonEmptyString.d.ts +0 -12
- package/build/codecTools/NonEmptyString.d.ts.map +0 -1
- package/build/codecTools/NonEmptyString.js +0 -6
- package/build/codecTools/NonEmptyString.js.map +0 -1
- package/build/codecTools/createDefaultCodec.d.ts +0 -39
- package/build/codecTools/createDefaultCodec.d.ts.map +0 -1
- package/build/codecTools/createDefaultCodec.js +0 -114
- package/build/codecTools/createDefaultCodec.js.map +0 -1
- package/build/codecTools/decodeCodec.d.ts +0 -12
- package/build/codecTools/decodeCodec.d.ts.map +0 -1
- package/build/codecTools/decodeCodec.js +0 -47
- package/build/codecTools/decodeCodec.js.map +0 -1
- package/build/codecTools/dictionary.d.ts +0 -18
- package/build/codecTools/dictionary.d.ts.map +0 -1
- package/build/codecTools/dictionary.js +0 -13
- package/build/codecTools/dictionary.js.map +0 -1
- package/build/codecTools/index.d.ts +0 -10
- package/build/codecTools/index.d.ts.map +0 -1
- package/build/codecTools/index.js +0 -10
- package/build/codecTools/index.js.map +0 -1
- package/build/codecTools/isCodecError.d.ts +0 -7
- package/build/codecTools/isCodecError.d.ts.map +0 -1
- package/build/codecTools/isCodecError.js +0 -9
- package/build/codecTools/isCodecError.js.map +0 -1
- package/build/codecTools/partialRecord.d.ts +0 -16
- package/build/codecTools/partialRecord.d.ts.map +0 -1
- package/build/codecTools/partialRecord.js +0 -11
- package/build/codecTools/partialRecord.js.map +0 -1
- package/build/codecTools/toJsonSchema.d.ts +0 -11
- package/build/codecTools/toJsonSchema.d.ts.map +0 -1
- package/build/codecTools/toJsonSchema.js +0 -115
- package/build/codecTools/toJsonSchema.js.map +0 -1
- package/build/enum.d.ts +0 -47
- package/build/enum.d.ts.map +0 -1
- package/build/enum.js +0 -44
- package/build/enum.js.map +0 -1
- package/build/enums.d.ts +0 -20
- package/build/enums.d.ts.map +0 -1
- package/build/enums.js +0 -18
- package/build/enums.js.map +0 -1
- package/build/findAllWithRegex.d.ts +0 -41
- package/build/findAllWithRegex.d.ts.map +0 -1
- package/build/findAllWithRegex.js +0 -41
- package/build/findAllWithRegex.js.map +0 -1
- package/build/flattenObject.d.ts +0 -33
- package/build/flattenObject.d.ts.map +0 -1
- package/build/flattenObject.js +0 -72
- package/build/flattenObject.js.map +0 -1
- package/build/fromEntries.d.ts +0 -9
- package/build/fromEntries.d.ts.map +0 -1
- package/build/fromEntries.js +0 -9
- package/build/fromEntries.js.map +0 -1
- package/build/getEntries.d.ts +0 -8
- package/build/getEntries.d.ts.map +0 -1
- package/build/getEntries.js +0 -10
- package/build/getEntries.js.map +0 -1
- package/build/getKeys.d.ts +0 -14
- package/build/getKeys.d.ts.map +0 -1
- package/build/getKeys.js +0 -19
- package/build/getKeys.js.map +0 -1
- package/build/getValues.d.ts +0 -9
- package/build/getValues.d.ts.map +0 -1
- package/build/getValues.js +0 -9
- package/build/getValues.js.map +0 -1
- package/build/gql.d.ts +0 -22
- package/build/gql.d.ts.map +0 -1
- package/build/gql.js +0 -32
- package/build/gql.js.map +0 -1
- package/build/groupBy.d.ts +0 -11
- package/build/groupBy.d.ts.map +0 -1
- package/build/groupBy.js +0 -20
- package/build/groupBy.js.map +0 -1
- package/build/index.d.ts +0 -19
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -19
- package/build/index.js.map +0 -1
- package/build/invert.d.ts +0 -23
- package/build/invert.d.ts.map +0 -1
- package/build/invert.js +0 -79
- package/build/invert.js.map +0 -1
- package/build/noExcess.d.ts +0 -33
- package/build/noExcess.d.ts.map +0 -1
- package/build/noExcess.js +0 -153
- package/build/noExcess.js.map +0 -1
- package/build/tests/FixedLengthArray.test.d.ts +0 -2
- package/build/tests/FixedLengthArray.test.d.ts.map +0 -1
- package/build/tests/FixedLengthArray.test.js +0 -15
- package/build/tests/FixedLengthArray.test.js.map +0 -1
- package/build/tests/aggregateObjects.test.d.ts +0 -2
- package/build/tests/aggregateObjects.test.d.ts.map +0 -1
- package/build/tests/aggregateObjects.test.js +0 -98
- package/build/tests/aggregateObjects.test.js.map +0 -1
- package/build/tests/createDefaultCodec.test.d.ts +0 -2
- package/build/tests/createDefaultCodec.test.d.ts.map +0 -1
- package/build/tests/createDefaultCodec.test.js +0 -104
- package/build/tests/createDefaultCodec.test.js.map +0 -1
- package/build/tests/decodeCodec.test.d.ts +0 -2
- package/build/tests/decodeCodec.test.d.ts.map +0 -1
- package/build/tests/decodeCodec.test.js +0 -43
- package/build/tests/decodeCodec.test.js.map +0 -1
- package/build/tests/enum.test.d.ts +0 -2
- package/build/tests/enum.test.d.ts.map +0 -1
- package/build/tests/enum.test.js +0 -21
- package/build/tests/enum.test.js.map +0 -1
- package/build/tests/flattenObject.test.d.ts +0 -2
- package/build/tests/flattenObject.test.d.ts.map +0 -1
- package/build/tests/flattenObject.test.js +0 -115
- package/build/tests/flattenObject.test.js.map +0 -1
- package/build/tests/gql.test.d.ts +0 -2
- package/build/tests/gql.test.d.ts.map +0 -1
- package/build/tests/gql.test.js +0 -44
- package/build/tests/gql.test.js.map +0 -1
- package/build/tests/groupBy.test.d.ts +0 -2
- package/build/tests/groupBy.test.d.ts.map +0 -1
- package/build/tests/groupBy.test.js +0 -13
- package/build/tests/groupBy.test.js.map +0 -1
- package/build/tests/invert.test.d.ts +0 -2
- package/build/tests/invert.test.d.ts.map +0 -1
- package/build/tests/invert.test.js +0 -50
- package/build/tests/invert.test.js.map +0 -1
- package/build/tests/noExcess.test.d.ts +0 -2
- package/build/tests/noExcess.test.d.ts.map +0 -1
- package/build/tests/noExcess.test.js +0 -65
- package/build/tests/noExcess.test.js.map +0 -1
- package/build/tests/transposeObjectArray.test.d.ts +0 -2
- package/build/tests/transposeObjectArray.test.d.ts.map +0 -1
- package/build/tests/transposeObjectArray.test.js +0 -155
- package/build/tests/transposeObjectArray.test.js.map +0 -1
- package/build/transposeObjectArray.d.ts +0 -67
- package/build/transposeObjectArray.d.ts.map +0 -1
- package/build/transposeObjectArray.js +0 -39
- package/build/transposeObjectArray.js.map +0 -1
- package/build/tsbuildinfo +0 -1
- package/build/types.d.ts +0 -150
- package/build/types.d.ts.map +0 -1
- package/build/types.js +0 -2
- package/build/types.js.map +0 -1
- package/build/valuesOf.d.ts +0 -12
- package/build/valuesOf.d.ts.map +0 -1
- package/build/valuesOf.js +0 -14
- package/build/valuesOf.js.map +0 -1
package/build/noExcess.js
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { either, isRight, left, right } from 'fp-ts/Either';
|
|
2
|
-
import * as t from 'io-ts';
|
|
3
|
-
/**
|
|
4
|
-
* Yanked from https://github.com/gcanti/io-ts/issues/322#issuecomment-584658211
|
|
5
|
-
*
|
|
6
|
-
* The code creates a way to reject objects that have extra/unexpected properties
|
|
7
|
-
* beyond what's defined in a type schema. This is useful for strict validation
|
|
8
|
-
* where you want to ensure incoming data contains only expected fields.
|
|
9
|
-
* @example usage
|
|
10
|
-
* ```
|
|
11
|
-
* const UserCodec = t.type({
|
|
12
|
-
* name: t.string,
|
|
13
|
-
* age: t.number
|
|
14
|
-
* });
|
|
15
|
-
*
|
|
16
|
-
* const StrictUserCodec = noExcess(UserCodec);
|
|
17
|
-
* // This would pass
|
|
18
|
-
* StrictUserCodec.decode({ name: "Kirby", age: 33 })
|
|
19
|
-
*
|
|
20
|
-
* // This would fail with "excess key 'email' found"
|
|
21
|
-
* StrictUserCodec.decode({ name: "Kirby", age: 33, email: "kirby@transcend.io" })
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
/**
|
|
25
|
-
* Creates a type guard function that checks if a codec matches a specific tag.
|
|
26
|
-
*
|
|
27
|
-
* @template T - The expected codec type
|
|
28
|
-
* @param tag - The tag string to match against (e.g., 'InterfaceType', 'PartialType')
|
|
29
|
-
* @returns A type guard function that checks if a codec is of type T
|
|
30
|
-
*/
|
|
31
|
-
const getIsCodec = (tag) => (codec) =>
|
|
32
|
-
/* eslint-disable-next-line no-underscore-dangle, @typescript-eslint/no-explicit-any */
|
|
33
|
-
codec._tag === tag;
|
|
34
|
-
const isInterfaceCodec = getIsCodec('InterfaceType');
|
|
35
|
-
const isPartialCodec = getIsCodec('PartialType');
|
|
36
|
-
/**
|
|
37
|
-
* Extracts property definitions from various codec types, handling
|
|
38
|
-
* nested structures like intersections and refinements.
|
|
39
|
-
*
|
|
40
|
-
* @param codec - The codec to extract properties from
|
|
41
|
-
* @returns The props object containing all property definitions
|
|
42
|
-
*/
|
|
43
|
-
const getProps = (codec) => {
|
|
44
|
-
/* eslint-disable-next-line no-underscore-dangle */
|
|
45
|
-
switch (codec._tag) {
|
|
46
|
-
case 'RefinementType':
|
|
47
|
-
case 'ReadonlyType':
|
|
48
|
-
return getProps(codec.type);
|
|
49
|
-
case 'InterfaceType':
|
|
50
|
-
case 'StrictType':
|
|
51
|
-
case 'PartialType':
|
|
52
|
-
return codec.props;
|
|
53
|
-
case 'IntersectionType':
|
|
54
|
-
return codec.types.reduce((props, type) => Object.assign(props, getProps(type)), {});
|
|
55
|
-
default:
|
|
56
|
-
return {};
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
/**
|
|
60
|
-
* Generates a string representation of props for type naming.
|
|
61
|
-
*
|
|
62
|
-
* @param props - The props object to convert to string
|
|
63
|
-
* @returns A comma-separated string of "key: type" pairs
|
|
64
|
-
*/
|
|
65
|
-
const getNameFromProps = (props) => Object.keys(props)
|
|
66
|
-
.map((k) => `${k}: ${props[k].name}`)
|
|
67
|
-
.join(', ');
|
|
68
|
-
/**
|
|
69
|
-
* Wraps a type name with Partial<> syntax for partial types.
|
|
70
|
-
*
|
|
71
|
-
* @param inner - The inner type string to wrap
|
|
72
|
-
* @returns The wrapped type string in Partial<> format
|
|
73
|
-
*/
|
|
74
|
-
const getPartialTypeName = (inner) => `Partial<${inner}>`;
|
|
75
|
-
/**
|
|
76
|
-
* Generates a human-readable type name for the noExcess wrapper.
|
|
77
|
-
*
|
|
78
|
-
* @param codec - The codec to generate a name for
|
|
79
|
-
* @returns A string representation of the excess-checked type
|
|
80
|
-
*/
|
|
81
|
-
const getNoExcessTypeName = (codec) => {
|
|
82
|
-
if (isInterfaceCodec(codec)) {
|
|
83
|
-
return `{| ${getNameFromProps(codec.props)} |}`;
|
|
84
|
-
}
|
|
85
|
-
if (isPartialCodec(codec)) {
|
|
86
|
-
return getPartialTypeName(`{| ${getNameFromProps(codec.props)} |}`);
|
|
87
|
-
}
|
|
88
|
-
return `Excess<${codec.name}>`;
|
|
89
|
-
};
|
|
90
|
-
/**
|
|
91
|
-
* Compares an object's keys against expected properties and returns either
|
|
92
|
-
* the object (if valid) or a list of excess keys.
|
|
93
|
-
*
|
|
94
|
-
* @template T - The type of the object being checked
|
|
95
|
-
* @param o - The object to check for excess keys
|
|
96
|
-
* @param props - The expected properties definition
|
|
97
|
-
* @returns Either a Left with excess keys array or Right with the valid object
|
|
98
|
-
*/
|
|
99
|
-
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
100
|
-
const stripKeys = (o, props) => {
|
|
101
|
-
const keys = Object.getOwnPropertyNames(o);
|
|
102
|
-
const propsKeys = Object.getOwnPropertyNames(props);
|
|
103
|
-
propsKeys.forEach((pk) => {
|
|
104
|
-
const index = keys.indexOf(pk);
|
|
105
|
-
if (index !== -1) {
|
|
106
|
-
keys.splice(index, 1);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
return keys.length ? left(keys) : right(o);
|
|
110
|
-
};
|
|
111
|
-
/**
|
|
112
|
-
* Creates an enhanced codec that validates objects with strict property checking.
|
|
113
|
-
*
|
|
114
|
-
* The enhanced codec performs validation in three steps:
|
|
115
|
-
* 1. Validates structure using the original codec
|
|
116
|
-
* 2. Checks for excess properties using stripKeys
|
|
117
|
-
* 3. Returns validation errors for any unexpected keys with the message "excess key "{key}" found"
|
|
118
|
-
*
|
|
119
|
-
* @template C - The codec type that extends HasProps
|
|
120
|
-
* @param codec - The base codec to enhance with excess property checking
|
|
121
|
-
* @param name - Optional custom name for the enhanced type (auto-generated if not provided)
|
|
122
|
-
* @returns A new NoExcessType that wraps the original codec with strict validation
|
|
123
|
-
*/
|
|
124
|
-
export const noExcess = (codec, name = getNoExcessTypeName(codec)) => {
|
|
125
|
-
const props = getProps(codec);
|
|
126
|
-
return new NoExcessType(name, (u) => isRight(stripKeys(u, props)) && codec.is(u), (u, c) => either.chain(t.UnknownRecord.validate(u, c), () => either.chain(codec.validate(u, c), (a) => either.mapLeft(stripKeys(a, props), (keys) => keys.map((k) => ({
|
|
127
|
-
value: a[k],
|
|
128
|
-
context: c,
|
|
129
|
-
message: `excess key "${k}" found`,
|
|
130
|
-
}))))),
|
|
131
|
-
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
132
|
-
(a) => codec.encode(stripKeys(a, props).right), codec);
|
|
133
|
-
};
|
|
134
|
-
/**
|
|
135
|
-
* The NoExcess Type - a wrapper type to be used with io-ts to ensure there aren't any excess keys
|
|
136
|
-
*/
|
|
137
|
-
export class NoExcessType extends t.Type {
|
|
138
|
-
/**
|
|
139
|
-
* Creates a new NoExcessType instance that wraps another codec with excess property validation.
|
|
140
|
-
*
|
|
141
|
-
* @param name - The name of this type for debugging and error messages
|
|
142
|
-
* @param is - Type guard function that checks if a value is of this type
|
|
143
|
-
* @param validate - Validation function that decodes input and validates structure
|
|
144
|
-
* @param encode - Encoding function that converts the type back to its output representation
|
|
145
|
-
* @param type - The original wrapped codec that this NoExcessType enhances
|
|
146
|
-
*/
|
|
147
|
-
constructor(name, is, validate, encode, type) {
|
|
148
|
-
super(name, is, validate, encode);
|
|
149
|
-
this.type = type;
|
|
150
|
-
this._tag = 'NoExcessType';
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=noExcess.js.map
|
package/build/noExcess.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"noExcess.js","sourceRoot":"","sources":["../src/noExcess.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FixedLengthArray.test.d.ts","sourceRoot":"","sources":["../../src/tests/FixedLengthArray.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// external
|
|
2
|
-
import { expect } from 'chai';
|
|
3
|
-
import * as t from 'io-ts';
|
|
4
|
-
// global
|
|
5
|
-
import { decodeCodec, FixedLengthArray } from '../codecTools/index.js';
|
|
6
|
-
describe('FixedLengthArray', () => {
|
|
7
|
-
const TwoItemArray = FixedLengthArray(2, 2, t.number);
|
|
8
|
-
it('decode a fixed length array successfully', () => {
|
|
9
|
-
expect(() => decodeCodec(TwoItemArray, [1, 2])).to.not.throw();
|
|
10
|
-
});
|
|
11
|
-
it('error if the array does not have the expected length', () => {
|
|
12
|
-
expect(() => decodeCodec(TwoItemArray, [1, 2, 3])).to.throw();
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
//# sourceMappingURL=FixedLengthArray.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FixedLengthArray.test.js","sourceRoot":"","sources":["../../src/tests/FixedLengthArray.test.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,SAAS;AACT,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAEtD,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aggregateObjects.test.d.ts","sourceRoot":"","sources":["../../src/tests/aggregateObjects.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import { aggregateObjects } from '../aggregateObjects.js';
|
|
3
|
-
describe('aggregateObjects', () => {
|
|
4
|
-
it('should return empty object for empty input array', () => {
|
|
5
|
-
const result = aggregateObjects({ objs: [] });
|
|
6
|
-
expect(result).to.deep.equal({});
|
|
7
|
-
});
|
|
8
|
-
it('should aggregate objects with same keys', () => {
|
|
9
|
-
const objs = [
|
|
10
|
-
{ name: 'John', age: 30 },
|
|
11
|
-
{ name: 'Jane', age: 25 },
|
|
12
|
-
{ name: 'Bob', age: 35 },
|
|
13
|
-
];
|
|
14
|
-
const result = aggregateObjects({ objs });
|
|
15
|
-
expect(result).to.deep.equal({
|
|
16
|
-
name: 'John,Jane,Bob',
|
|
17
|
-
age: '30,25,35',
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
it('should handle missing properties with missing keys', () => {
|
|
21
|
-
const objs = [
|
|
22
|
-
{ name: 'John', age: 30 },
|
|
23
|
-
{ name: 'Jane' },
|
|
24
|
-
{ name: 'Bob', age: 35 },
|
|
25
|
-
];
|
|
26
|
-
const result = aggregateObjects({ objs });
|
|
27
|
-
expect(result).to.deep.equal({
|
|
28
|
-
name: 'John,Jane,Bob',
|
|
29
|
-
age: '30,,35',
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
it('should handle null and undefined values', () => {
|
|
33
|
-
const objs = [
|
|
34
|
-
{ name: 'John', age: null },
|
|
35
|
-
{ name: undefined, hobby: 'reading' },
|
|
36
|
-
{ name: 'Bob', hobby: null },
|
|
37
|
-
];
|
|
38
|
-
const result = aggregateObjects({ objs });
|
|
39
|
-
expect(result).to.deep.equal({
|
|
40
|
-
name: 'John,,Bob',
|
|
41
|
-
age: ',,',
|
|
42
|
-
hobby: ',reading,',
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
it('should wrap values in brackets when wrap option is true', () => {
|
|
46
|
-
const objs = [
|
|
47
|
-
{ name: 'John', age: 30 },
|
|
48
|
-
{ name: 'Jane' },
|
|
49
|
-
{ name: 'Bob', age: 35 },
|
|
50
|
-
];
|
|
51
|
-
const result = aggregateObjects({ objs, wrap: true });
|
|
52
|
-
expect(result).to.deep.equal({
|
|
53
|
-
name: '[John],[Jane],[Bob]',
|
|
54
|
-
age: '[30],[],[35]',
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
it('should handle objects with different keys', () => {
|
|
58
|
-
const objs = [
|
|
59
|
-
{ name: 'John', age: 30 },
|
|
60
|
-
{ city: 'NY', country: 'USA' },
|
|
61
|
-
{ name: 'Bob', country: 'UK' },
|
|
62
|
-
];
|
|
63
|
-
const result = aggregateObjects({ objs });
|
|
64
|
-
expect(result).to.deep.equal({
|
|
65
|
-
name: 'John,,Bob',
|
|
66
|
-
age: '30,,',
|
|
67
|
-
city: ',NY,',
|
|
68
|
-
country: ',USA,UK',
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
it('should handle empty objects', () => {
|
|
72
|
-
const objs = [{ name: 'John' }, {}, { name: 'Bob' }];
|
|
73
|
-
const result = aggregateObjects({ objs });
|
|
74
|
-
expect(result).to.deep.equal({
|
|
75
|
-
name: 'John,,Bob',
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
it('should handle array with null or undefined objects', () => {
|
|
79
|
-
const objs = [{ name: 'John' }, null, undefined, { name: 'Bob' }];
|
|
80
|
-
const result = aggregateObjects({ objs });
|
|
81
|
-
expect(result).to.deep.equal({
|
|
82
|
-
name: 'John,,,Bob',
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
it('should handle numeric and boolean values', () => {
|
|
86
|
-
const objs = [
|
|
87
|
-
{ count: 1, active: true },
|
|
88
|
-
{ count: 2, active: false },
|
|
89
|
-
{ count: 3, active: true },
|
|
90
|
-
];
|
|
91
|
-
const result = aggregateObjects({ objs });
|
|
92
|
-
expect(result).to.deep.equal({
|
|
93
|
-
count: '1,2,3',
|
|
94
|
-
active: 'true,false,true',
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
//# sourceMappingURL=aggregateObjects.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aggregateObjects.test.js","sourceRoot":"","sources":["../../src/tests/aggregateObjects.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG;YACX,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE;YACzB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE;YACzB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;SACzB,CAAC;QACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,IAAI,GAAG;YACX,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE;YACzB,EAAE,IAAI,EAAE,MAAM,EAAE;YAChB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;SACzB,CAAC;QACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,QAAQ;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG;YACX,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;YAC3B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;SAC7B,CAAC;QACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,IAAI,EAAE,WAAW;YACjB,GAAG,EAAE,IAAI;YACT,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,IAAI,GAAG;YACX,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE;YACzB,EAAE,IAAI,EAAE,MAAM,EAAE;YAChB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;SACzB,CAAC;QACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,IAAI,EAAE,qBAAqB;YAC3B,GAAG,EAAE,cAAc;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG;YACX,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE;YACzB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;SAC/B,CAAC;QACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,IAAI,EAAE,WAAW;YACjB,GAAG,EAAE,MAAM;YACX,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG;YACX,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;YAC1B,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;YAC3B,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;SAC3B,CAAC;QACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,iBAAiB;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createDefaultCodec.test.d.ts","sourceRoot":"","sources":["../../src/tests/createDefaultCodec.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import * as t from 'io-ts';
|
|
2
|
-
import chai, { expect } from 'chai';
|
|
3
|
-
import deepEqualInAnyOrder from 'deep-equal-in-any-order';
|
|
4
|
-
import { createDefaultCodec } from '../codecTools/index.js';
|
|
5
|
-
chai.use(deepEqualInAnyOrder);
|
|
6
|
-
describe('buildDefaultCodec', () => {
|
|
7
|
-
it('should correctly build a default codec for null', () => {
|
|
8
|
-
const result = createDefaultCodec(t.null);
|
|
9
|
-
expect(result).to.equal(null);
|
|
10
|
-
});
|
|
11
|
-
it('should correctly build a default codec for number', () => {
|
|
12
|
-
const result = createDefaultCodec(t.number);
|
|
13
|
-
expect(result).to.equal(0);
|
|
14
|
-
});
|
|
15
|
-
it('should correctly build a default codec for boolean', () => {
|
|
16
|
-
const result = createDefaultCodec(t.boolean);
|
|
17
|
-
expect(result).to.equal(false);
|
|
18
|
-
});
|
|
19
|
-
it('should correctly build a default codec for undefined', () => {
|
|
20
|
-
const result = createDefaultCodec(t.undefined);
|
|
21
|
-
expect(result).to.equal(undefined);
|
|
22
|
-
});
|
|
23
|
-
it('should correctly build a default codec for string', () => {
|
|
24
|
-
const result = createDefaultCodec(t.string);
|
|
25
|
-
expect(result).to.equal('');
|
|
26
|
-
});
|
|
27
|
-
it('should correctly build a default codec for a union of literals', () => {
|
|
28
|
-
const codec = t.union([t.literal('A'), t.literal('B')]);
|
|
29
|
-
const defaultCodec = createDefaultCodec(codec);
|
|
30
|
-
expect(defaultCodec).to.equal('A');
|
|
31
|
-
});
|
|
32
|
-
it('should correctly build a default codec for an object', () => {
|
|
33
|
-
const codec = t.object;
|
|
34
|
-
const defaultCodec = createDefaultCodec(codec);
|
|
35
|
-
expect(defaultCodec).to.deep.equal({});
|
|
36
|
-
});
|
|
37
|
-
it('should correctly build a default codec for a union with null', () => {
|
|
38
|
-
const result = createDefaultCodec(t.union([t.string, t.null]));
|
|
39
|
-
// should default to null if the union contains null
|
|
40
|
-
expect(result).to.equal(null);
|
|
41
|
-
});
|
|
42
|
-
it('should correctly build a default codec for a union with object', () => {
|
|
43
|
-
const result = createDefaultCodec(t.union([t.string, t.null, t.type({ name: t.string })]));
|
|
44
|
-
// should default to the type if the union contains an object
|
|
45
|
-
expect(result).to.deep.equal({ name: '' });
|
|
46
|
-
});
|
|
47
|
-
it('should correctly build a default codec for a union with array of type', () => {
|
|
48
|
-
const result = createDefaultCodec(t.union([
|
|
49
|
-
t.string,
|
|
50
|
-
t.null,
|
|
51
|
-
t.type({ name: t.string }),
|
|
52
|
-
t.array(t.string),
|
|
53
|
-
]));
|
|
54
|
-
// should default to the empty array if the union contains an array of type
|
|
55
|
-
expect(result).to.deep.equal([]);
|
|
56
|
-
});
|
|
57
|
-
it('should correctly build a default codec for a union with array of object', () => {
|
|
58
|
-
const result = createDefaultCodec(t.union([
|
|
59
|
-
t.string,
|
|
60
|
-
t.null,
|
|
61
|
-
t.type({ name: t.string }),
|
|
62
|
-
t.array(t.type({ age: t.number })),
|
|
63
|
-
]));
|
|
64
|
-
// should default to the array with object if the union contains an array of objects
|
|
65
|
-
expect(result).to.deep.equal([{ age: 0 }]);
|
|
66
|
-
});
|
|
67
|
-
it('should correctly build a default codec for a union without null', () => {
|
|
68
|
-
const result = createDefaultCodec(t.union([t.string, t.number]));
|
|
69
|
-
// should default to the first value if the union does not contains null
|
|
70
|
-
expect(result).to.equal('');
|
|
71
|
-
});
|
|
72
|
-
it('should correctly build a default codec for an array of object types', () => {
|
|
73
|
-
const result = createDefaultCodec(t.array(t.type({ name: t.string, age: t.number })));
|
|
74
|
-
// should default to the first value if the union does not contains null
|
|
75
|
-
expect(result).to.deep.equalInAnyOrder([{ name: '', age: 0 }]);
|
|
76
|
-
});
|
|
77
|
-
it('should correctly build a default codec for an array of object partials', () => {
|
|
78
|
-
const result = createDefaultCodec(t.array(t.partial({ name: t.string, age: t.number })));
|
|
79
|
-
// should default to the first value if the union does not contains null
|
|
80
|
-
expect(result).to.deep.equalInAnyOrder([{ name: '', age: 0 }]);
|
|
81
|
-
});
|
|
82
|
-
it('should correctly build a default codec for an array of object intersections', () => {
|
|
83
|
-
const result = createDefaultCodec(t.array(t.intersection([
|
|
84
|
-
t.partial({ name: t.string, age: t.number }),
|
|
85
|
-
t.type({ city: t.string }),
|
|
86
|
-
])));
|
|
87
|
-
// should default to the first value if the union does not contains null
|
|
88
|
-
expect(result).to.deep.equalInAnyOrder([{ name: '', age: 0, city: '' }]);
|
|
89
|
-
});
|
|
90
|
-
it('should correctly build a default codec for an array of strings', () => {
|
|
91
|
-
const result = createDefaultCodec(t.array(t.string));
|
|
92
|
-
// should default to the first value if the union does not contains null
|
|
93
|
-
expect(result).to.deep.equal([]);
|
|
94
|
-
});
|
|
95
|
-
it('should correctly build a default codec for an intersection', () => {
|
|
96
|
-
const result = createDefaultCodec(t.intersection([
|
|
97
|
-
t.type({ id: t.string, name: t.string }),
|
|
98
|
-
t.partial({ age: t.number }),
|
|
99
|
-
]));
|
|
100
|
-
// should default to the first value if the union does not contains null
|
|
101
|
-
expect(result).to.deep.equalInAnyOrder({ id: '', name: '', age: 0 });
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
//# sourceMappingURL=createDefaultCodec.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createDefaultCodec.test.js","sourceRoot":"","sources":["../../src/tests/createDefaultCodec.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decodeCodec.test.d.ts","sourceRoot":"","sources":["../../src/tests/decodeCodec.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import * as t from 'io-ts';
|
|
3
|
-
import { decodeCodec } from '../codecTools/index.js';
|
|
4
|
-
describe('decodeCodec', () => {
|
|
5
|
-
it('should decode a codec as expected', () => {
|
|
6
|
-
const c = t.type({
|
|
7
|
-
str: t.string,
|
|
8
|
-
num: t.number,
|
|
9
|
-
headers: t.record(t.string, t.string),
|
|
10
|
-
});
|
|
11
|
-
const obj = {
|
|
12
|
-
str: 'abcd',
|
|
13
|
-
num: 123,
|
|
14
|
-
headers: {
|
|
15
|
-
yolo: 'one-life',
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
const decoded = decodeCodec(c, obj);
|
|
19
|
-
expect(decoded).to.deep.equal(obj);
|
|
20
|
-
});
|
|
21
|
-
it('should throw an error when the input does not match the codec', () => {
|
|
22
|
-
const c = t.type({
|
|
23
|
-
str: t.string,
|
|
24
|
-
num: t.number,
|
|
25
|
-
headers: t.record(t.string, t.string),
|
|
26
|
-
});
|
|
27
|
-
const obj = {
|
|
28
|
-
str: 123,
|
|
29
|
-
num: 123,
|
|
30
|
-
headers: {
|
|
31
|
-
yolo: 'one-life',
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
try {
|
|
35
|
-
decodeCodec(c, obj);
|
|
36
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
|
-
}
|
|
38
|
-
catch (e) {
|
|
39
|
-
expect(e.message).to.equal('Failed to decode codec: [\n ".str expected type \'string\'"\n]');
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
//# sourceMappingURL=decodeCodec.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decodeCodec.test.js","sourceRoot":"","sources":["../../src/tests/decodeCodec.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACf,GAAG,EAAE,CAAC,CAAC,MAAM;YACb,GAAG,EAAE,CAAC,CAAC,MAAM;YACb,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG;YACV,GAAG,EAAE,MAAM;YACX,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACP,IAAI,EAAE,UAAU;aACjB;SACF,CAAC;QACF,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACf,GAAG,EAAE,CAAC,CAAC,MAAM;YACb,GAAG,EAAE,CAAC,CAAC,MAAM;YACb,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG;YACV,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACP,IAAI,EAAE,UAAU;aACjB;SACF,CAAC;QACF,IAAI,CAAC;YACH,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACpB,8DAA8D;QAChE,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CACxB,iEAAiE,CAClE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enum.test.d.ts","sourceRoot":"","sources":["../../src/tests/enum.test.ts"],"names":[],"mappings":""}
|
package/build/tests/enum.test.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// external
|
|
2
|
-
import { expect } from 'chai';
|
|
3
|
-
// global
|
|
4
|
-
import { createEnum } from '../enum.js';
|
|
5
|
-
describe('Enum', () => {
|
|
6
|
-
const enumVar = createEnum({
|
|
7
|
-
my: 'my',
|
|
8
|
-
property: 'property',
|
|
9
|
-
});
|
|
10
|
-
it('should index a property that exists', () => {
|
|
11
|
-
expect(enumVar.my).equals('my');
|
|
12
|
-
expect(enumVar.property).equals('property');
|
|
13
|
-
});
|
|
14
|
-
it('should allow iteration over keys', () => {
|
|
15
|
-
expect(Object.keys(enumVar)).deep.equal(['my', 'property']);
|
|
16
|
-
});
|
|
17
|
-
it('should allow iteration over values', () => {
|
|
18
|
-
expect(Object.values(enumVar)).deep.equal(['my', 'property']);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
//# sourceMappingURL=enum.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enum.test.js","sourceRoot":"","sources":["../../src/tests/enum.test.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,MAAM,OAAO,GAAG,UAAU,CAAC;QACzB,EAAE,EAAE,IAAI;QACR,QAAQ,EAAE,UAAU;KACrB,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flattenObject.test.d.ts","sourceRoot":"","sources":["../../src/tests/flattenObject.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import { flattenObject } from '../flattenObject.js';
|
|
3
|
-
describe('flattenObject', () => {
|
|
4
|
-
it('should return empty object for null input', () => {
|
|
5
|
-
const result = flattenObject({ obj: null });
|
|
6
|
-
expect(result).to.deep.equal({});
|
|
7
|
-
});
|
|
8
|
-
it('should return empty object for undefined input', () => {
|
|
9
|
-
let obj;
|
|
10
|
-
const result = flattenObject({ obj });
|
|
11
|
-
expect(result).to.deep.equal({});
|
|
12
|
-
});
|
|
13
|
-
it('should flatten list of objects with some entries missing properties', () => {
|
|
14
|
-
// create a list of users with one of them missiging the age property
|
|
15
|
-
const obj = {
|
|
16
|
-
users: [
|
|
17
|
-
{
|
|
18
|
-
name: 'Bob',
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
name: 'Alice',
|
|
22
|
-
age: 18,
|
|
23
|
-
},
|
|
24
|
-
],
|
|
25
|
-
};
|
|
26
|
-
const result = flattenObject({ obj });
|
|
27
|
-
// the flattened object should include the missing age property
|
|
28
|
-
expect(result).to.deep.equal({
|
|
29
|
-
users_name: 'Bob,Alice',
|
|
30
|
-
users_age: ',18',
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
it('should ignore primitive and null types within list containing objects', () => {
|
|
34
|
-
// create a list of a mix of objects, strings, and null
|
|
35
|
-
const obj = {
|
|
36
|
-
users: [
|
|
37
|
-
'example@domain.com',
|
|
38
|
-
null,
|
|
39
|
-
{
|
|
40
|
-
name: 'Bob',
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
name: 'Alice',
|
|
44
|
-
age: 18,
|
|
45
|
-
},
|
|
46
|
-
],
|
|
47
|
-
};
|
|
48
|
-
const result = flattenObject({ obj });
|
|
49
|
-
// the flattened object should not include the strings
|
|
50
|
-
expect(result).to.deep.equal({
|
|
51
|
-
users_name: 'Bob,Alice',
|
|
52
|
-
users_age: ',18',
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
it('should flatten an object with null entries', () => {
|
|
56
|
-
const obj = {
|
|
57
|
-
user: {
|
|
58
|
-
siblings: null,
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
const result = flattenObject({ obj });
|
|
62
|
-
expect(result).to.deep.equal({
|
|
63
|
-
user_siblings: '',
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
it('should flatten an object with empty entries', () => {
|
|
67
|
-
const obj = {
|
|
68
|
-
user: {
|
|
69
|
-
siblings: [],
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
const result = flattenObject({ obj });
|
|
73
|
-
expect(result).to.deep.equal({
|
|
74
|
-
user_siblings: '',
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
it('should flatten a deep nested object', () => {
|
|
78
|
-
const obj = {
|
|
79
|
-
user: {
|
|
80
|
-
name: 'John',
|
|
81
|
-
address: {
|
|
82
|
-
city: 'NY',
|
|
83
|
-
zip: 10001,
|
|
84
|
-
},
|
|
85
|
-
hobbies: ['reading', 'gaming'],
|
|
86
|
-
parents: [
|
|
87
|
-
{
|
|
88
|
-
name: 'Alice',
|
|
89
|
-
biological: true,
|
|
90
|
-
age: 52,
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
name: 'Bob',
|
|
94
|
-
biological: false,
|
|
95
|
-
},
|
|
96
|
-
],
|
|
97
|
-
siblings: [],
|
|
98
|
-
grandParents: null,
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
const result = flattenObject({ obj });
|
|
102
|
-
expect(result).to.deep.equal({
|
|
103
|
-
user_name: 'John',
|
|
104
|
-
user_address_city: 'NY',
|
|
105
|
-
user_address_zip: 10001,
|
|
106
|
-
user_hobbies: 'reading,gaming',
|
|
107
|
-
user_parents_name: 'Alice,Bob',
|
|
108
|
-
user_parents_biological: 'true,false',
|
|
109
|
-
user_parents_age: '52,',
|
|
110
|
-
user_siblings: '',
|
|
111
|
-
user_grandParents: '',
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
//# sourceMappingURL=flattenObject.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flattenObject.test.js","sourceRoot":"","sources":["../../src/tests/flattenObject.test.ts"],"names":[],"mappings":"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"}
|