@xylabs/object 4.15.0 → 4.15.2

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.
@@ -1,4 +1,4 @@
1
- import type { JsonValue } from './index.ts';
1
+ import type { JsonValue } from './JsonObject.ts';
2
2
  export type OmitStartsWith<T, Prefix extends string> = {
3
3
  [K in keyof T as K extends `${Prefix}${string}` ? never : K]: T[K];
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"OmitStartsWith.d.ts","sourceRoot":"","sources":["../../src/OmitStartsWith.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,MAAM,SAAS,MAAM,IAAI;KACpD,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACnE,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,EAAE,MAAM,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC5E,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAC/B,CAAC,SAAS,MAAM,GACd;KACG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,GAC7B,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,EAAE,GAC5B,KAAK,GACL,CAAC,GACH,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;CACzC,GACD,CAAC,CAAA;AAEP,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI;KACvC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACpE,wBAAwB,CAAC,CAAC,CAAC,EAAE,GAC7B,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC9B,CAAC,CAAC,CAAC,CAAC;CACX,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;KACjC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACpE,kBAAkB,CAAC,CAAC,CAAC,EAAE,GACvB,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACxB,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GACpB,CAAC,CAAC,CAAC,CAAC,GACJ,KAAK;CACd,CAAA"}
1
+ {"version":3,"file":"OmitStartsWith.d.ts","sourceRoot":"","sources":["../../src/OmitStartsWith.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,MAAM,SAAS,MAAM,IAAI;KACpD,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACnE,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,EAAE,MAAM,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC5E,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAC/B,CAAC,SAAS,MAAM,GACd;KACG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,GAC7B,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,EAAE,GAC5B,KAAK,GACL,CAAC,GACH,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;CACzC,GACD,CAAC,CAAA;AAEP,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI;KACvC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACpE,wBAAwB,CAAC,CAAC,CAAC,EAAE,GAC7B,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC9B,CAAC,CAAC,CAAC,CAAC;CACX,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;KACjC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACpE,kBAAkB,CAAC,CAAC,CAAC,EAAE,GACvB,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACxB,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GACpB,CAAC,CAAC,CAAC,CAAC,GACJ,KAAK;CACd,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './index-un-deprecated.ts';
2
+ export * from './isType.ts';
3
+ //# sourceMappingURL=index-deprecated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-deprecated.d.ts","sourceRoot":"","sources":["../../src/index-deprecated.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA"}
@@ -0,0 +1,23 @@
1
+ export * from './asObject.ts';
2
+ export * from './AsObjectFactory.ts';
3
+ export * from './AsTypeFactory.ts';
4
+ export * from './deepMerge.ts';
5
+ export * from './EmptyObject.ts';
6
+ export * from './IsObjectFactory.ts';
7
+ export * from './JsonObject.ts';
8
+ export * from './ObjectWrapper.ts';
9
+ export * from './omitBy.ts';
10
+ export * from './OmitStartsWith.ts';
11
+ export * from './Optional.ts';
12
+ export * from './Override.ts';
13
+ export * from './PartialRecord.ts';
14
+ export * from './pickBy.ts';
15
+ export * from './PickStartsWith.ts';
16
+ export * from './removeFields.ts';
17
+ export * from './StringKeyObject.ts';
18
+ export * from './toSafeJson.ts';
19
+ export * from './Validator.ts';
20
+ export * from './WithAdditional.ts';
21
+ export * from '@xylabs/object-model';
22
+ export { isObject } from '@xylabs/typeof';
23
+ //# sourceMappingURL=index-un-deprecated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-un-deprecated.d.ts","sourceRoot":"","sources":["../../src/index-un-deprecated.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,386 @@
1
+ // src/asObject.ts
2
+ import { isObject } from "@xylabs/typeof";
3
+
4
+ // src/AsTypeFactory.ts
5
+ import { assertDefinedEx } from "@xylabs/assert";
6
+ import { isPromise } from "@xylabs/promise";
7
+ import { isTruthy } from "@xylabs/typeof";
8
+ var AsTypeFactory = {
9
+ create: (typeCheck) => {
10
+ const func = (value, assertOrConfig, config) => {
11
+ const isPredicate = typeof assertOrConfig === "number";
12
+ const resolvedAssert = isPredicate ? void 0 : typeof assertOrConfig === "object" ? void 0 : assertOrConfig;
13
+ const resolvedConfig = isPredicate ? void 0 : typeof assertOrConfig === "object" ? assertOrConfig : config;
14
+ const required = isTruthy(resolvedConfig?.required);
15
+ if (!required && (value === void 0 || value === null)) {
16
+ return void 0;
17
+ }
18
+ if (isPromise(value)) {
19
+ throw new TypeError('un-awaited promises may not be sent to "as" functions');
20
+ }
21
+ const result = typeCheck(value, resolvedConfig) ? value : void 0;
22
+ if (resolvedAssert !== void 0) {
23
+ return typeof resolvedAssert === "function" ? assertDefinedEx(result, resolvedAssert) : assertDefinedEx(result, () => resolvedAssert);
24
+ }
25
+ return result;
26
+ };
27
+ return func;
28
+ },
29
+ createOptional: (typeCheck) => {
30
+ const func = (value) => {
31
+ if (value === void 0 || value === null) return void 0;
32
+ if (isPromise(value)) {
33
+ throw new TypeError('un-awaited promises may not be sent to "as" functions');
34
+ }
35
+ return typeCheck(value) ? value : void 0;
36
+ };
37
+ return func;
38
+ }
39
+ };
40
+
41
+ // src/AsObjectFactory.ts
42
+ var AsObjectFactory = {
43
+ create: (typeCheck) => {
44
+ return AsTypeFactory.create(typeCheck);
45
+ },
46
+ createOptional: (typeCheck) => {
47
+ return AsTypeFactory.createOptional(typeCheck);
48
+ }
49
+ };
50
+
51
+ // src/asObject.ts
52
+ var asAnyObject = (() => AsObjectFactory.create((obj) => isObject(obj)))();
53
+
54
+ // src/deepMerge.ts
55
+ var isUnsafeKey = (key) => key === "__proto__" || key === "constructor" || key === "prototype";
56
+ function merge(target, source, options) {
57
+ if (!source || typeof source !== "object") return target;
58
+ for (const key of Reflect.ownKeys(source)) {
59
+ const value = source[key];
60
+ if (isUnsafeKey(key)) {
61
+ continue;
62
+ } else if (Array.isArray(value)) {
63
+ target[key] = options?.arrayStrategy === "concat" && Array.isArray(target[key]) ? [...target[key], ...value] : value;
64
+ } else if (value !== null && typeof value === "object") {
65
+ if (!target[key] || typeof target[key] !== "object") {
66
+ target[key] = {};
67
+ }
68
+ merge(target[key], value, options);
69
+ } else {
70
+ target[key] = value;
71
+ }
72
+ }
73
+ return target;
74
+ }
75
+ function createDeepMerge(options) {
76
+ return function deepMerge2(...objects) {
77
+ const result = options.mutate ? objects[0] ?? {} : {};
78
+ for (const obj of objects) {
79
+ merge(result, obj, options);
80
+ }
81
+ return result;
82
+ };
83
+ }
84
+ var deepMerge = createDeepMerge({ arrayStrategy: "overwrite", mutate: false });
85
+
86
+ // src/IsObjectFactory.ts
87
+ import {
88
+ isObject as isObject2,
89
+ isTruthy as isTruthy2
90
+ } from "@xylabs/typeof";
91
+
92
+ // src/isType.ts
93
+ var isType = (value, expectedType) => {
94
+ const typeofValue = typeof value;
95
+ switch (expectedType) {
96
+ case "array": {
97
+ return Array.isArray(value);
98
+ }
99
+ case "null": {
100
+ return value === null;
101
+ }
102
+ case "undefined": {
103
+ return value === void 0;
104
+ }
105
+ case "object": {
106
+ if (value === null) {
107
+ return false;
108
+ }
109
+ return typeofValue === "object" && !Array.isArray(value);
110
+ }
111
+ default: {
112
+ return typeofValue === expectedType;
113
+ }
114
+ }
115
+ };
116
+
117
+ // src/IsObjectFactory.ts
118
+ var IsObjectFactory = class {
119
+ create(shape, additionalChecks) {
120
+ return (obj, config) => {
121
+ if (!isObject2(obj)) {
122
+ return false;
123
+ }
124
+ const log = typeof config === "object" ? config.log : void 0;
125
+ return (
126
+ // do primary check
127
+ Object.entries(shape ?? {}).filter(([key, type]) => {
128
+ const result = isType(obj[key], type);
129
+ if (!result && isTruthy2(log)) {
130
+ const logger = typeof log === "object" ? log : console;
131
+ logger.warn(`isType Failed: ${key}: ${type}`);
132
+ }
133
+ return !result;
134
+ }).length === 0 && (additionalChecks?.reduce((prev, check) => prev && check(obj, { log }), true) ?? true)
135
+ );
136
+ };
137
+ }
138
+ };
139
+
140
+ // src/JsonObject.ts
141
+ import { isObject as isObject3, isString } from "@xylabs/typeof";
142
+ var isJsonValue = (value) => {
143
+ switch (typeof value) {
144
+ case "string":
145
+ case "number":
146
+ case "boolean": {
147
+ return true;
148
+ }
149
+ default: {
150
+ return value === null || isJsonObject(value) || isJsonArray(value);
151
+ }
152
+ }
153
+ };
154
+ var isJsonArray = (value) => {
155
+ return Array.isArray(value) && !value.some((item) => !isJsonValue(item));
156
+ };
157
+ var asJsonArray = (value) => {
158
+ if (Array.isArray(value)) {
159
+ return value.filter(isJsonValue);
160
+ } else {
161
+ throw new TypeError(`Expected an array, got ${typeof value}`);
162
+ }
163
+ };
164
+ var isValidJsonFieldPair = (value) => {
165
+ if (!Array.isArray(value) || value.length !== 2) {
166
+ return false;
167
+ }
168
+ const [key, val] = value;
169
+ return isString(key) && isJsonValue(val);
170
+ };
171
+ var isJsonObject = (value) => {
172
+ return isObject3(value) && !Object.entries(value).some((item) => !isValidJsonFieldPair(item));
173
+ };
174
+ var toJsonObject = (value) => {
175
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
176
+ throw new TypeError(`Expected an object, got ${typeof value}`);
177
+ }
178
+ if (isJsonObject(value)) {
179
+ return value;
180
+ }
181
+ const result = {};
182
+ for (const [k, v] of Object.entries(value)) {
183
+ if (v !== void 0) {
184
+ const [key, jsonValue] = toValidJsonFieldPair([k, v]);
185
+ result[key] = jsonValue;
186
+ }
187
+ }
188
+ return result;
189
+ };
190
+ var toJsonValue = (value) => {
191
+ if (isObject3(value)) {
192
+ return toJsonObject(value);
193
+ } else if (Array.isArray(value)) {
194
+ return toJsonArray(value);
195
+ } else if (isJsonValue(value)) {
196
+ return value;
197
+ }
198
+ throw new TypeError(`Unable to coerce ${typeof value} to a JSON value`);
199
+ };
200
+ var toJsonArray = (value) => {
201
+ if (Array.isArray(value)) {
202
+ return value.map((item) => toJsonValue(item));
203
+ }
204
+ throw new TypeError(`Unable to coerce ${typeof value} to a JSON array`);
205
+ };
206
+ var toValidJsonFieldPair = (pair) => {
207
+ const [key, value] = pair;
208
+ if (!isString(key)) {
209
+ throw new TypeError(`Expected a string key, got ${typeof key}`);
210
+ }
211
+ if (isJsonValue(value)) {
212
+ return [key, value];
213
+ } else if (isObject3(value)) {
214
+ return [key, toJsonObject(value)];
215
+ }
216
+ throw new TypeError(`Expected a valid JSON value, got ${typeof value}`);
217
+ };
218
+
219
+ // src/ObjectWrapper.ts
220
+ var ObjectWrapper = class {
221
+ obj;
222
+ constructor(obj) {
223
+ this.obj = obj;
224
+ }
225
+ get stringKeyObj() {
226
+ return this.obj;
227
+ }
228
+ };
229
+
230
+ // src/omitBy.ts
231
+ import { assertEx } from "@xylabs/assert";
232
+ var omitByArray = (obj, predicate, maxDepth) => {
233
+ return obj.map((value) => {
234
+ return value !== null && typeof value === "object" ? omitBy(value, predicate, maxDepth) : value;
235
+ });
236
+ };
237
+ var omitByObject = (obj, predicate, maxDepth) => {
238
+ const result = {};
239
+ for (const key in obj) {
240
+ if (Object.hasOwn(obj, key)) {
241
+ const value = obj[key];
242
+ if (!predicate(value, key)) {
243
+ result[key] = value !== null && typeof value === "object" ? omitBy(value, predicate, maxDepth - 1) : value;
244
+ }
245
+ }
246
+ }
247
+ return result;
248
+ };
249
+ var omitBy = (obj, predicate, maxDepth = 1) => {
250
+ if (maxDepth <= 0) {
251
+ return obj;
252
+ }
253
+ return Array.isArray(obj) ? omitByArray(obj, predicate, maxDepth - 1) : omitByObject(obj, predicate, maxDepth - 1);
254
+ };
255
+ var omitByPrefixPredicate = (prefix) => (_, key) => {
256
+ assertEx(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
257
+ return key.startsWith(prefix);
258
+ };
259
+ var omitByPrefix = (payload, prefix, maxDepth = 100) => {
260
+ return omitBy(payload, omitByPrefixPredicate(prefix), maxDepth);
261
+ };
262
+
263
+ // src/pickBy.ts
264
+ import { assertEx as assertEx2 } from "@xylabs/assert";
265
+ var pickByArray = (obj, predicate, maxDepth) => {
266
+ return obj.map((value) => {
267
+ return value !== null && typeof value === "object" ? pickBy(value, predicate, maxDepth) : value;
268
+ });
269
+ };
270
+ var pickByObject = (obj, predicate, maxDepth) => {
271
+ const result = {};
272
+ for (const key in obj) {
273
+ if (Object.hasOwn(obj, key)) {
274
+ const value = obj[key];
275
+ if (predicate(value, key)) {
276
+ result[key] = value !== null && typeof value === "object" ? pickBy(value, predicate, maxDepth - 1) : value;
277
+ }
278
+ }
279
+ }
280
+ return result;
281
+ };
282
+ var pickBy = (obj, predicate, maxDepth = 1) => {
283
+ if (maxDepth <= 0) {
284
+ return obj;
285
+ }
286
+ return Array.isArray(obj) ? pickByArray(obj, predicate, maxDepth - 1) : pickByObject(obj, predicate, maxDepth - 1);
287
+ };
288
+ var pickByPrefixPredicate = (prefix) => (_, key) => {
289
+ assertEx2(typeof key === "string", () => `Invalid key type [${key}, ${typeof key}]`);
290
+ return key.startsWith(prefix);
291
+ };
292
+ var pickByPrefix = (payload, prefix, maxDepth = 100) => {
293
+ return pickBy(payload, pickByPrefixPredicate(prefix), maxDepth);
294
+ };
295
+
296
+ // src/removeFields.ts
297
+ var removeFields = (obj, fields) => {
298
+ const clone = { ...obj };
299
+ for (const field of fields) {
300
+ delete clone[field];
301
+ }
302
+ return clone;
303
+ };
304
+
305
+ // src/toSafeJson.ts
306
+ var toSafeJsonArray = (value, cycleList, maxDepth = 3) => {
307
+ return value.map((item) => toSafeJsonValue(item, cycleList, maxDepth));
308
+ };
309
+ var toSafeJsonObject = (value, cycleList, maxDepth = 3) => {
310
+ const result = {};
311
+ for (const [key, entry] of Object.entries(value)) {
312
+ result[key] = value === void 0 ? "[Undefined]" : toSafeJsonValue(entry, cycleList, maxDepth);
313
+ }
314
+ return result;
315
+ };
316
+ var toSafeJsonValue = (value, cycleList, maxDepth = 3) => {
317
+ if (maxDepth <= 0 && typeof value === "object") {
318
+ return "[MaxDepth]";
319
+ }
320
+ if (cycleList?.includes(value)) {
321
+ return "[Circular]";
322
+ }
323
+ switch (typeof value) {
324
+ case "string":
325
+ case "boolean":
326
+ case "number": {
327
+ return value;
328
+ }
329
+ case "object": {
330
+ if (value === null) {
331
+ return null;
332
+ }
333
+ const newCycleList = cycleList ?? [];
334
+ newCycleList.push(value);
335
+ return Array.isArray(value) ? toSafeJsonArray(value, newCycleList, maxDepth - 1) : toSafeJsonObject(value, newCycleList, maxDepth - 1);
336
+ }
337
+ default: {
338
+ return `[${typeof value}]`;
339
+ }
340
+ }
341
+ };
342
+ var toSafeJsonString = (value, maxDepth = 3) => {
343
+ return JSON.stringify(toSafeJson(value, maxDepth), null, 2);
344
+ };
345
+ var toSafeJson = (value, maxDepth = 3) => {
346
+ return toSafeJsonValue(value, void 0, maxDepth);
347
+ };
348
+
349
+ // src/Validator.ts
350
+ var ValidatorBase = class extends ObjectWrapper {
351
+ };
352
+
353
+ // src/index-un-deprecated.ts
354
+ export * from "@xylabs/object-model";
355
+ import { isObject as isObject4 } from "@xylabs/typeof";
356
+ export {
357
+ AsObjectFactory,
358
+ AsTypeFactory,
359
+ IsObjectFactory,
360
+ ObjectWrapper,
361
+ ValidatorBase,
362
+ asAnyObject,
363
+ asJsonArray,
364
+ createDeepMerge,
365
+ deepMerge,
366
+ isJsonArray,
367
+ isJsonObject,
368
+ isJsonValue,
369
+ isObject4 as isObject,
370
+ isValidJsonFieldPair,
371
+ omitBy,
372
+ omitByPrefix,
373
+ pickBy,
374
+ pickByPrefix,
375
+ removeFields,
376
+ toJsonArray,
377
+ toJsonObject,
378
+ toJsonValue,
379
+ toSafeJson,
380
+ toSafeJsonArray,
381
+ toSafeJsonObject,
382
+ toSafeJsonString,
383
+ toSafeJsonValue,
384
+ toValidJsonFieldPair
385
+ };
386
+ //# sourceMappingURL=index-un-deprecated.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/asObject.ts","../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/deepMerge.ts","../../src/IsObjectFactory.ts","../../src/isType.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/omitBy.ts","../../src/pickBy.ts","../../src/removeFields.ts","../../src/toSafeJson.ts","../../src/Validator.ts","../../src/index-un-deprecated.ts"],"sourcesContent":["import type { AnyObject } from '@xylabs/object-model'\nimport { isObject } from '@xylabs/typeof'\n\nimport { AsObjectFactory } from './AsObjectFactory.ts'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import { assertDefinedEx } from '@xylabs/assert'\nimport type {\n AsTypeFunction,\n StringOrAlertFunction, TypeCheck, TypeCheckConfig,\n TypeCheckRequiredConfig,\n} from '@xylabs/object-model'\nimport type { AnyNonPromise } from '@xylabs/promise'\nimport { isPromise } from '@xylabs/promise'\nimport { isTruthy } from '@xylabs/typeof'\n\nexport const AsTypeFactory = {\n create: <T extends AnyNonPromise>(typeCheck: TypeCheck<T>): AsTypeFunction<T> => {\n const func = (\n value: AnyNonPromise,\n assertOrConfig?: StringOrAlertFunction<T> | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): T | undefined => {\n // when used as a predicate, it seems that the index is passed as the second parameter (filter,map)\n const isPredicate = typeof assertOrConfig === 'number'\n const resolvedAssert = isPredicate\n ? undefined\n : (typeof assertOrConfig === 'object' ? undefined : assertOrConfig) as (StringOrAlertFunction<T> | undefined)\n const resolvedConfig = isPredicate ? undefined : typeof assertOrConfig === 'object' ? assertOrConfig : config\n\n // only return undefined if not required\n const required = isTruthy((resolvedConfig as (TypeCheckRequiredConfig | undefined))?.required)\n if (!required && (value === undefined || value === null)) {\n return undefined\n }\n\n if (isPromise(value)) {\n throw new TypeError('un-awaited promises may not be sent to \"as\" functions')\n }\n\n const result = typeCheck(value, resolvedConfig) ? (value as T) : undefined\n\n if (resolvedAssert !== undefined) {\n return typeof resolvedAssert === 'function' ? assertDefinedEx<T>(result, resolvedAssert) : assertDefinedEx<T>(result, () => resolvedAssert)\n }\n return result\n }\n return func\n },\n createOptional: <T extends AnyNonPromise>(typeCheck: TypeCheck<T>) => {\n const func = (value: AnyNonPromise): T | undefined => {\n if (value === undefined || value === null) return undefined\n if (isPromise(value)) {\n throw new TypeError('un-awaited promises may not be sent to \"as\" functions')\n }\n return typeCheck(value) ? (value as T) : undefined\n }\n return func\n },\n}\n","import type { TypeCheck } from '@xylabs/object-model'\nimport type { TypedObject } from '@xylabs/typeof'\n\nimport { AsTypeFactory } from './AsTypeFactory.ts'\n\nexport const AsObjectFactory = {\n create: <T extends TypedObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n createOptional: <T extends TypedObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.createOptional<T>(typeCheck)\n },\n}\n","import type { AnyObject } from '@xylabs/object-model'\n\n/**\n * Deeply merges two types into a new type.\n */\ntype DeepMerge<A, B> = {\n [K in keyof A | keyof B]:\n K extends keyof B\n ? K extends keyof A\n ? A[K] extends object\n ? B[K] extends object\n ? DeepMerge<A[K], B[K]>\n : B[K]\n : B[K]\n : B[K]\n : K extends keyof A\n ? A[K]\n : never;\n}\n\n/**\n * Merges multiple types into a new type.\n */\ntype MergeAll<T extends object[], R = {}>\n = T extends [infer First extends object, ...infer Rest extends object[]]\n ? MergeAll<Rest, DeepMerge<R, First>>\n : R\n\n/**\n * Options for merging objects in the deep merge function.\n */\ntype MergeOptions = {\n /**\n * Strategy for merging arrays.\n * - 'overwrite': Overwrites the array with the last object's value.\n * - 'concat': Concatenates arrays from all objects.\n * @default 'overwrite'\n */\n arrayStrategy?: 'overwrite' | 'concat'\n /**\n * Mutate the first object in the list instead of creating a new one.\n * @default false\n */\n mutate?: boolean\n}\n\nconst isUnsafeKey = (key: string | symbol): boolean =>\n key === '__proto__' || key === 'constructor' || key === 'prototype'\n\nfunction merge<T extends AnyObject>(target: AnyObject, source?: AnyObject, options?: MergeOptions): T {\n if (!source || typeof source !== 'object') return target as T\n\n for (const key of Reflect.ownKeys(source)) {\n const value = source[key]\n if (isUnsafeKey(key)) {\n continue\n } else if (Array.isArray(value)) {\n target[key]\n // If the value is an array, handle it based on the configured array strategy\n = options?.arrayStrategy === 'concat' && Array.isArray(target[key])\n ? [...target[key], ...value]\n : value\n } else if (value !== null && typeof value === 'object') {\n // Recursively merge nested objects\n if (!target[key] || typeof target[key] !== 'object') {\n target[key] = {}\n }\n merge(target[key] as AnyObject, value as AnyObject, options)\n } else {\n // Overwrite with non-object values\n target[key] = value\n }\n }\n\n return target as T\n}\n\n/**\n * Creates a deep merge function with the specified options.\n * @param options Options for merging.\n * @returns A deep merge function configured for the specified options.\n */\nexport function createDeepMerge(options: MergeOptions) {\n return function deepMerge<T extends AnyObject[]>(...objects: T): MergeAll<T> {\n const result = (options.mutate ? objects[0] ?? {} : {}) as MergeAll<T>\n for (const obj of objects) {\n merge(result, obj, options)\n }\n return result\n }\n}\n\n/**\n * Deeply merges multiple objects into a new object.\n * @param objects Multiple objects to merge deeply.\n * The function merges properties from all objects into a new object.\n * If a property exists in multiple objects, the last object's value will be used.\n * If a property is an object, it will be merged recursively.\n * If a property is an array, it will be overwritten by the last object's value.\n * If a property is a primitive value, it will be overwritten by the last object's value.\n * If a property is undefined in the source, it will be skipped.\n * If a property is a symbol, it will be merged as well.\n * @returns A new object with the merged properties.\n */\nexport const deepMerge = createDeepMerge({ arrayStrategy: 'overwrite', mutate: false })\n","import type { TypeCheck, TypeCheckConfig } from '@xylabs/object-model'\nimport {\n isObject, isTruthy,\n type ObjectTypeShape, type TypedObject,\n} from '@xylabs/typeof'\n\nimport { isType } from './isType.ts'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends TypedObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<TypedObject>[]): TypeCheck<T> {\n return (obj: unknown, config?: TypeCheckConfig | number): obj is T => {\n if (!isObject(obj)) {\n return false\n }\n const log = (typeof config === 'object') ? config.log : undefined\n return (\n // do primary check\n Object.entries(shape ?? {}).filter(([key, type]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = isType((obj as any)[key], type)\n if (!result && isTruthy(log)) {\n const logger = typeof log === 'object' ? log : console\n logger.warn(`isType Failed: ${key}: ${type}`)\n }\n return !result\n }).length === 0\n // perform additional checks\n && (additionalChecks?.reduce((prev, check) => prev && check(obj, { log }), true) ?? true)\n )\n }\n }\n}\n","import type { FieldType } from '@xylabs/typeof'\n\n/** @deprecated use from @xylabs/typeof instead */\nexport const isType = (value: unknown, expectedType: FieldType) => {\n const typeofValue = typeof value\n switch (expectedType) {\n case 'array': {\n return Array.isArray(value)\n }\n case 'null': {\n return value === null\n }\n case 'undefined': {\n return value === undefined\n }\n case 'object': {\n // nulls resolve to objects, so exclude them\n if (value === null) {\n return false\n }\n // arrays resolve to objects, so exclude them\n return typeofValue === 'object' && !Array.isArray(value)\n }\n default: {\n return typeofValue === expectedType\n }\n }\n}\n","import { isObject, isString } from '@xylabs/typeof'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport type { DeepRestrictToStringKeys } from './OmitStartsWith.ts'\n\nexport type JsonFieldPair = [key: string, value: JsonValue]\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\nexport type JsonTypedObject<T extends EmptyObject = EmptyObject> = DeepRestrictToStringKeys<T>\nexport type JsonArray = JsonValue[]\n\nexport const isJsonValue = (value: unknown): value is JsonValue => {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean': {\n return true\n }\n default: {\n return value === null || isJsonObject(value) || isJsonArray(value)\n }\n }\n}\n\nexport const isJsonArray = (value: unknown): value is JsonArray => {\n return Array.isArray(value) && !value.some(item => !isJsonValue(item))\n}\n\nexport const asJsonArray = (value: unknown): JsonArray => {\n if (Array.isArray(value)) {\n return value.filter(isJsonValue)\n } else {\n throw new TypeError(`Expected an array, got ${typeof value}`)\n }\n}\n\nexport const isValidJsonFieldPair = (value: unknown): value is JsonFieldPair => {\n if (!Array.isArray(value) || value.length !== 2) {\n return false\n }\n const [key, val] = value\n return isString(key) && isJsonValue(val)\n}\n\nexport const isJsonObject = (value: unknown): value is JsonObject => {\n return (\n isObject(value)\n // check if all keys are strings\n && !Object.entries(value).some(item => !isValidJsonFieldPair(item))\n )\n}\n\nexport const toJsonObject = (value: unknown): JsonObject => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TypeError(`Expected an object, got ${typeof value}`)\n }\n if (isJsonObject(value)) {\n return value\n }\n const result: JsonObject = {}\n for (const [k, v] of Object.entries(value)) {\n if (v !== undefined) {\n const [key, jsonValue] = toValidJsonFieldPair([k, v])\n result[key] = jsonValue\n }\n }\n return result\n}\n\nexport const toJsonValue = (value: unknown): JsonValue => {\n if (isObject(value)) {\n return toJsonObject(value)\n } else if (Array.isArray(value)) {\n return toJsonArray(value)\n } else if (isJsonValue(value)) {\n return value\n }\n throw new TypeError(`Unable to coerce ${typeof value} to a JSON value`)\n}\n\nexport const toJsonArray = (value: unknown): JsonArray => {\n if (Array.isArray(value)) {\n return value.map(item => toJsonValue(item))\n }\n throw new TypeError(`Unable to coerce ${typeof value} to a JSON array`)\n}\n\nexport const toValidJsonFieldPair = (pair: [key: unknown, value: unknown]): JsonFieldPair => {\n const [key, value] = pair\n if (!isString(key)) {\n throw new TypeError(`Expected a string key, got ${typeof key}`)\n }\n\n if (isJsonValue(value)) {\n return [key, value]\n } else if (isObject(value)) {\n return [key, toJsonObject(value)]\n }\n\n throw new TypeError(`Expected a valid JSON value, got ${typeof value}`)\n}\n","import type { EmptyObject } from './EmptyObject.ts'\nimport type { StringKeyObject } from './StringKeyObject.ts'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport type { JsonObject } from './JsonObject.ts'\nimport type { DeepOmitStartsWith } from './OmitStartsWith.ts'\n\nexport type OmitByPredicate<T extends EmptyObject = Record<string, unknown>> = (value: T[keyof T], key: keyof T) => boolean\n\nconst omitByArray = <T>(\n obj: T[],\n predicate: OmitByPredicate,\n maxDepth: number,\n): T[] => {\n return obj.map((value) => {\n return (value !== null && typeof value === 'object') ? omitBy(value, predicate, maxDepth) : value\n }) as T[]\n}\n\nconst omitByObject = <T extends EmptyObject>(\n obj: T,\n predicate: OmitByPredicate,\n maxDepth: number,\n): Partial<T> => {\n const result: JsonObject = {}\n\n for (const key in obj) {\n if (Object.hasOwn(obj, key)) {\n const value = obj[key]\n if (!predicate(value, key)) {\n result[key] = ((value !== null && typeof value === 'object') ? omitBy(value, predicate, maxDepth - 1) : value) as JsonObject\n }\n }\n }\n\n return result as T\n}\n\nexport const omitBy = <T extends EmptyObject>(\n obj: T,\n predicate: OmitByPredicate,\n maxDepth = 1,\n): Partial<T> => {\n if (maxDepth <= 0) {\n return obj\n }\n\n return Array.isArray(obj) ? omitByArray(obj, predicate, maxDepth - 1) as T : omitByObject(obj, predicate, maxDepth - 1) as T\n}\n\nconst omitByPrefixPredicate = (prefix: string) => (_: unknown, key: string) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n}\n\nexport const omitByPrefix = <T extends EmptyObject, P extends string>(payload: T, prefix: P, maxDepth = 100): DeepOmitStartsWith<T, P> => {\n return omitBy(payload, omitByPrefixPredicate(prefix), maxDepth) as unknown as DeepOmitStartsWith<T, P>\n}\n","import { assertEx } from '@xylabs/assert'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport type { JsonObject } from './JsonObject.ts'\nimport type { DeepPickStartsWith } from './PickStartsWith.ts'\n\nexport type PickByPredicate<T extends EmptyObject = Record<string, unknown>> = (value: T[keyof T], key: keyof T) => boolean\n\nconst pickByArray = <T>(\n obj: T[],\n predicate: PickByPredicate,\n maxDepth: number,\n): T[] => {\n return obj.map((value) => {\n return (value !== null && typeof value === 'object') ? pickBy(value, predicate, maxDepth) : value\n }) as T[]\n}\n\nconst pickByObject = <T extends EmptyObject>(\n obj: T,\n predicate: PickByPredicate,\n maxDepth: number,\n): Partial<T> => {\n const result: JsonObject = {}\n\n for (const key in obj) {\n if (Object.hasOwn(obj, key)) {\n const value = obj[key]\n if (predicate(value, key)) {\n result[key] = ((value !== null && typeof value === 'object') ? pickBy(value, predicate, maxDepth - 1) : value) as JsonObject\n }\n }\n }\n\n return result as T\n}\n\nexport const pickBy = <T extends EmptyObject>(\n obj: T,\n predicate: PickByPredicate,\n maxDepth = 1,\n): Partial<T> => {\n if (maxDepth <= 0) {\n return obj\n }\n\n return Array.isArray(obj) ? pickByArray(obj, predicate, maxDepth - 1) as T : pickByObject(obj, predicate, maxDepth - 1) as T\n}\n\nconst pickByPrefixPredicate = (prefix: string) => (_: unknown, key: string) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n}\n\nexport const pickByPrefix = <T extends EmptyObject, P extends string>(payload: T, prefix: P, maxDepth = 100): DeepPickStartsWith<T, P> => {\n return pickBy(payload, pickByPrefixPredicate(prefix), maxDepth) as unknown as DeepPickStartsWith<T, P>\n}\n","import type { EmptyObject } from './EmptyObject.ts'\n\nexport const removeFields = <T extends EmptyObject, K extends keyof T>(obj: T, fields: K[]): Omit<T, K> => {\n const clone = { ...obj }\n for (const field of fields) {\n delete clone[field]\n }\n return clone\n}\n","import type {\n JsonArray, JsonObject, JsonValue,\n} from './JsonObject.ts'\n\nexport const toSafeJsonArray = (value: unknown[], cycleList?: unknown[], maxDepth = 3): JsonArray => {\n return value.map(item => toSafeJsonValue(item, cycleList, maxDepth))\n}\n\nexport const toSafeJsonObject = (value: object, cycleList?: unknown[], maxDepth = 3): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toSafeJsonValue(entry, cycleList, maxDepth)\n }\n return result\n}\n\nexport const toSafeJsonValue = (value: unknown, cycleList?: unknown[], maxDepth = 3): JsonValue => {\n if (maxDepth <= 0 && typeof value === 'object') {\n return '[MaxDepth]'\n }\n if (cycleList?.includes(value)) {\n return '[Circular]'\n }\n switch (typeof value) {\n case 'string':\n case 'boolean':\n case 'number': {\n return value\n }\n case 'object': {\n if (value === null) {\n return null\n }\n const newCycleList = cycleList ?? []\n newCycleList.push(value)\n return Array.isArray(value) ? toSafeJsonArray(value, newCycleList, maxDepth - 1) : toSafeJsonObject(value, newCycleList, maxDepth - 1)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toSafeJsonString = (value: unknown, maxDepth = 3) => {\n return JSON.stringify(toSafeJson(value, maxDepth), null, 2)\n}\n\nexport const toSafeJson = (value: unknown, maxDepth = 3): JsonValue => {\n return toSafeJsonValue(value, undefined, maxDepth)\n}\n","import type { AnyObject } from '@xylabs/object-model'\nimport type { Promisable } from '@xylabs/promise'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport { ObjectWrapper } from './ObjectWrapper.ts'\n\nexport interface Validator<T extends EmptyObject = AnyObject> {\n validate(payload: T): Promisable<Error[]>\n}\n\nexport abstract class ValidatorBase<T extends EmptyObject = AnyObject> extends ObjectWrapper<Partial<T>> implements Validator<T> {\n abstract validate(payload: T): Promisable<Error[]>\n}\n","export * from './asObject.ts'\nexport * from './AsObjectFactory.ts'\nexport * from './AsTypeFactory.ts'\nexport * from './deepMerge.ts'\nexport * from './EmptyObject.ts'\nexport * from './IsObjectFactory.ts'\nexport * from './JsonObject.ts'\nexport * from './ObjectWrapper.ts'\nexport * from './omitBy.ts'\nexport * from './OmitStartsWith.ts'\nexport * from './Optional.ts'\nexport * from './Override.ts'\nexport * from './PartialRecord.ts'\nexport * from './pickBy.ts'\nexport * from './PickStartsWith.ts'\nexport * from './removeFields.ts'\nexport * from './StringKeyObject.ts'\nexport * from './toSafeJson.ts'\nexport * from './Validator.ts'\nexport * from './WithAdditional.ts'\nexport * from '@xylabs/object-model'\nexport { isObject } from '@xylabs/typeof'\n"],"mappings":"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","names":["deepMerge","isObject","isTruthy","isObject","isTruthy","isObject","assertEx","isObject"]}
@@ -1,24 +1,3 @@
1
- export * from './asObject.ts';
2
- export * from './AsObjectFactory.ts';
3
- export * from './AsTypeFactory.ts';
4
- export * from './deepMerge.ts';
5
- export * from './EmptyObject.ts';
6
- export * from './isObject.ts';
7
- export * from './IsObjectFactory.ts';
8
- export * from './isType.ts';
9
- export * from './JsonObject.ts';
10
- export * from './ObjectWrapper.ts';
11
- export * from './omitBy.ts';
12
- export * from './OmitStartsWith.ts';
13
- export * from './Optional.ts';
14
- export * from './Override.ts';
15
- export * from './PartialRecord.ts';
16
- export * from './pickBy.ts';
17
- export * from './PickStartsWith.ts';
18
- export * from './removeFields.ts';
19
- export * from './StringKeyObject.ts';
20
- export * from './toSafeJson.ts';
21
- export * from './Validator.ts';
22
- export * from './WithAdditional.ts';
23
- export * from '@xylabs/object-model';
1
+ export * from './index-deprecated.ts';
2
+ export * from './index-un-deprecated.ts';
24
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA"}
@@ -1,3 +1,125 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
18
+
19
+ // src/index.ts
20
+ var index_exports = {};
21
+ __export(index_exports, {
22
+ AsObjectFactory: () => AsObjectFactory,
23
+ AsTypeFactory: () => AsTypeFactory,
24
+ IsObjectFactory: () => IsObjectFactory,
25
+ ObjectWrapper: () => ObjectWrapper,
26
+ ValidatorBase: () => ValidatorBase,
27
+ asAnyObject: () => asAnyObject,
28
+ asJsonArray: () => asJsonArray,
29
+ createDeepMerge: () => createDeepMerge,
30
+ deepMerge: () => deepMerge,
31
+ isJsonArray: () => isJsonArray,
32
+ isJsonObject: () => isJsonObject,
33
+ isJsonValue: () => isJsonValue,
34
+ isObject: () => isObject4,
35
+ isType: () => isType,
36
+ isValidJsonFieldPair: () => isValidJsonFieldPair,
37
+ omitBy: () => omitBy,
38
+ omitByPrefix: () => omitByPrefix,
39
+ pickBy: () => pickBy,
40
+ pickByPrefix: () => pickByPrefix,
41
+ removeFields: () => removeFields,
42
+ toJsonArray: () => toJsonArray,
43
+ toJsonObject: () => toJsonObject,
44
+ toJsonValue: () => toJsonValue,
45
+ toSafeJson: () => toSafeJson,
46
+ toSafeJsonArray: () => toSafeJsonArray,
47
+ toSafeJsonObject: () => toSafeJsonObject,
48
+ toSafeJsonString: () => toSafeJsonString,
49
+ toSafeJsonValue: () => toSafeJsonValue,
50
+ toValidJsonFieldPair: () => toValidJsonFieldPair
51
+ });
52
+
53
+ // src/index-deprecated.ts
54
+ var index_deprecated_exports = {};
55
+ __export(index_deprecated_exports, {
56
+ AsObjectFactory: () => AsObjectFactory,
57
+ AsTypeFactory: () => AsTypeFactory,
58
+ IsObjectFactory: () => IsObjectFactory,
59
+ ObjectWrapper: () => ObjectWrapper,
60
+ ValidatorBase: () => ValidatorBase,
61
+ asAnyObject: () => asAnyObject,
62
+ asJsonArray: () => asJsonArray,
63
+ createDeepMerge: () => createDeepMerge,
64
+ deepMerge: () => deepMerge,
65
+ isJsonArray: () => isJsonArray,
66
+ isJsonObject: () => isJsonObject,
67
+ isJsonValue: () => isJsonValue,
68
+ isObject: () => isObject4,
69
+ isType: () => isType,
70
+ isValidJsonFieldPair: () => isValidJsonFieldPair,
71
+ omitBy: () => omitBy,
72
+ omitByPrefix: () => omitByPrefix,
73
+ pickBy: () => pickBy,
74
+ pickByPrefix: () => pickByPrefix,
75
+ removeFields: () => removeFields,
76
+ toJsonArray: () => toJsonArray,
77
+ toJsonObject: () => toJsonObject,
78
+ toJsonValue: () => toJsonValue,
79
+ toSafeJson: () => toSafeJson,
80
+ toSafeJsonArray: () => toSafeJsonArray,
81
+ toSafeJsonObject: () => toSafeJsonObject,
82
+ toSafeJsonString: () => toSafeJsonString,
83
+ toSafeJsonValue: () => toSafeJsonValue,
84
+ toValidJsonFieldPair: () => toValidJsonFieldPair
85
+ });
86
+
87
+ // src/index-un-deprecated.ts
88
+ var index_un_deprecated_exports = {};
89
+ __export(index_un_deprecated_exports, {
90
+ AsObjectFactory: () => AsObjectFactory,
91
+ AsTypeFactory: () => AsTypeFactory,
92
+ IsObjectFactory: () => IsObjectFactory,
93
+ ObjectWrapper: () => ObjectWrapper,
94
+ ValidatorBase: () => ValidatorBase,
95
+ asAnyObject: () => asAnyObject,
96
+ asJsonArray: () => asJsonArray,
97
+ createDeepMerge: () => createDeepMerge,
98
+ deepMerge: () => deepMerge,
99
+ isJsonArray: () => isJsonArray,
100
+ isJsonObject: () => isJsonObject,
101
+ isJsonValue: () => isJsonValue,
102
+ isObject: () => isObject4,
103
+ isValidJsonFieldPair: () => isValidJsonFieldPair,
104
+ omitBy: () => omitBy,
105
+ omitByPrefix: () => omitByPrefix,
106
+ pickBy: () => pickBy,
107
+ pickByPrefix: () => pickByPrefix,
108
+ removeFields: () => removeFields,
109
+ toJsonArray: () => toJsonArray,
110
+ toJsonObject: () => toJsonObject,
111
+ toJsonValue: () => toJsonValue,
112
+ toSafeJson: () => toSafeJson,
113
+ toSafeJsonArray: () => toSafeJsonArray,
114
+ toSafeJsonObject: () => toSafeJsonObject,
115
+ toSafeJsonString: () => toSafeJsonString,
116
+ toSafeJsonValue: () => toSafeJsonValue,
117
+ toValidJsonFieldPair: () => toValidJsonFieldPair
118
+ });
119
+
120
+ // src/asObject.ts
121
+ import { isObject } from "@xylabs/typeof";
122
+
1
123
  // src/AsTypeFactory.ts
2
124
  import { assertDefinedEx } from "@xylabs/assert";
3
125
  import { isPromise } from "@xylabs/promise";
@@ -45,36 +167,6 @@ var AsObjectFactory = {
45
167
  }
46
168
  };
47
169
 
48
- // src/isType.ts
49
- var isType = (value, expectedType) => {
50
- const typeofValue = typeof value;
51
- switch (expectedType) {
52
- case "array": {
53
- return Array.isArray(value);
54
- }
55
- case "null": {
56
- return value === null;
57
- }
58
- case "undefined": {
59
- return value === void 0;
60
- }
61
- case "object": {
62
- if (value === null) {
63
- return false;
64
- }
65
- return typeofValue === "object" && !Array.isArray(value);
66
- }
67
- default: {
68
- return typeofValue === expectedType;
69
- }
70
- }
71
- };
72
-
73
- // src/isObject.ts
74
- var isObject = (value) => {
75
- return isType(value, "object");
76
- };
77
-
78
170
  // src/asObject.ts
79
171
  var asAnyObject = (() => AsObjectFactory.create((obj) => isObject(obj)))();
80
172
 
@@ -115,6 +207,33 @@ import {
115
207
  isObject as isObject2,
116
208
  isTruthy as isTruthy2
117
209
  } from "@xylabs/typeof";
210
+
211
+ // src/isType.ts
212
+ var isType = (value, expectedType) => {
213
+ const typeofValue = typeof value;
214
+ switch (expectedType) {
215
+ case "array": {
216
+ return Array.isArray(value);
217
+ }
218
+ case "null": {
219
+ return value === null;
220
+ }
221
+ case "undefined": {
222
+ return value === void 0;
223
+ }
224
+ case "object": {
225
+ if (value === null) {
226
+ return false;
227
+ }
228
+ return typeofValue === "object" && !Array.isArray(value);
229
+ }
230
+ default: {
231
+ return typeofValue === expectedType;
232
+ }
233
+ }
234
+ };
235
+
236
+ // src/IsObjectFactory.ts
118
237
  var IsObjectFactory = class {
119
238
  create(shape, additionalChecks) {
120
239
  return (obj, config) => {
@@ -350,8 +469,17 @@ var toSafeJson = (value, maxDepth = 3) => {
350
469
  var ValidatorBase = class extends ObjectWrapper {
351
470
  };
352
471
 
472
+ // src/index-un-deprecated.ts
473
+ __reExport(index_un_deprecated_exports, object_model_star);
474
+ import * as object_model_star from "@xylabs/object-model";
475
+ import { isObject as isObject4 } from "@xylabs/typeof";
476
+
477
+ // src/index-deprecated.ts
478
+ __reExport(index_deprecated_exports, index_un_deprecated_exports);
479
+
353
480
  // src/index.ts
354
- export * from "@xylabs/object-model";
481
+ __reExport(index_exports, index_deprecated_exports);
482
+ __reExport(index_exports, index_un_deprecated_exports);
355
483
  export {
356
484
  AsObjectFactory,
357
485
  AsTypeFactory,
@@ -365,7 +493,7 @@ export {
365
493
  isJsonArray,
366
494
  isJsonObject,
367
495
  isJsonValue,
368
- isObject,
496
+ isObject4 as isObject,
369
497
  isType,
370
498
  isValidJsonFieldPair,
371
499
  omitBy,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/isType.ts","../../src/isObject.ts","../../src/asObject.ts","../../src/deepMerge.ts","../../src/IsObjectFactory.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/omitBy.ts","../../src/pickBy.ts","../../src/removeFields.ts","../../src/toSafeJson.ts","../../src/Validator.ts","../../src/index.ts"],"sourcesContent":["import { assertDefinedEx } from '@xylabs/assert'\nimport type {\n AsTypeFunction,\n StringOrAlertFunction, TypeCheck, TypeCheckConfig,\n TypeCheckRequiredConfig,\n} from '@xylabs/object-model'\nimport type { AnyNonPromise } from '@xylabs/promise'\nimport { isPromise } from '@xylabs/promise'\nimport { isTruthy } from '@xylabs/typeof'\n\nexport const AsTypeFactory = {\n create: <T extends AnyNonPromise>(typeCheck: TypeCheck<T>): AsTypeFunction<T> => {\n const func = (\n value: AnyNonPromise,\n assertOrConfig?: StringOrAlertFunction<T> | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): T | undefined => {\n // when used as a predicate, it seems that the index is passed as the second parameter (filter,map)\n const isPredicate = typeof assertOrConfig === 'number'\n const resolvedAssert = isPredicate\n ? undefined\n : (typeof assertOrConfig === 'object' ? undefined : assertOrConfig) as (StringOrAlertFunction<T> | undefined)\n const resolvedConfig = isPredicate ? undefined : typeof assertOrConfig === 'object' ? assertOrConfig : config\n\n // only return undefined if not required\n const required = isTruthy((resolvedConfig as (TypeCheckRequiredConfig | undefined))?.required)\n if (!required && (value === undefined || value === null)) {\n return undefined\n }\n\n if (isPromise(value)) {\n throw new TypeError('un-awaited promises may not be sent to \"as\" functions')\n }\n\n const result = typeCheck(value, resolvedConfig) ? (value as T) : undefined\n\n if (resolvedAssert !== undefined) {\n return typeof resolvedAssert === 'function' ? assertDefinedEx<T>(result, resolvedAssert) : assertDefinedEx<T>(result, () => resolvedAssert)\n }\n return result\n }\n return func\n },\n createOptional: <T extends AnyNonPromise>(typeCheck: TypeCheck<T>) => {\n const func = (value: AnyNonPromise): T | undefined => {\n if (value === undefined || value === null) return undefined\n if (isPromise(value)) {\n throw new TypeError('un-awaited promises may not be sent to \"as\" functions')\n }\n return typeCheck(value) ? (value as T) : undefined\n }\n return func\n },\n}\n","import type { TypeCheck } from '@xylabs/object-model'\nimport type { TypedObject } from '@xylabs/typeof'\n\nimport { AsTypeFactory } from './AsTypeFactory.ts'\n\nexport const AsObjectFactory = {\n create: <T extends TypedObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n createOptional: <T extends TypedObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.createOptional<T>(typeCheck)\n },\n}\n","import type { FieldType } from '@xylabs/typeof'\n\nexport const isType = (value: unknown, expectedType: FieldType) => {\n const typeofValue = typeof value\n switch (expectedType) {\n case 'array': {\n return Array.isArray(value)\n }\n case 'null': {\n return value === null\n }\n case 'undefined': {\n return value === undefined\n }\n case 'object': {\n // nulls resolve to objects, so exclude them\n if (value === null) {\n return false\n }\n // arrays resolve to objects, so exclude them\n return typeofValue === 'object' && !Array.isArray(value)\n }\n default: {\n return typeofValue === expectedType\n }\n }\n}\n","import { isType } from './isType.ts'\n\nexport const isObject = <T>(value: T): value is T & object => {\n return isType(value, 'object')\n}\n","import type { AnyObject } from '@xylabs/object-model'\n\nimport { AsObjectFactory } from './AsObjectFactory.ts'\nimport { isObject } from './isObject.ts'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import type { AnyObject } from '@xylabs/object-model'\n\n/**\n * Deeply merges two types into a new type.\n */\ntype DeepMerge<A, B> = {\n [K in keyof A | keyof B]:\n K extends keyof B\n ? K extends keyof A\n ? A[K] extends object\n ? B[K] extends object\n ? DeepMerge<A[K], B[K]>\n : B[K]\n : B[K]\n : B[K]\n : K extends keyof A\n ? A[K]\n : never;\n}\n\n/**\n * Merges multiple types into a new type.\n */\ntype MergeAll<T extends object[], R = {}>\n = T extends [infer First extends object, ...infer Rest extends object[]]\n ? MergeAll<Rest, DeepMerge<R, First>>\n : R\n\n/**\n * Options for merging objects in the deep merge function.\n */\ntype MergeOptions = {\n /**\n * Strategy for merging arrays.\n * - 'overwrite': Overwrites the array with the last object's value.\n * - 'concat': Concatenates arrays from all objects.\n * @default 'overwrite'\n */\n arrayStrategy?: 'overwrite' | 'concat'\n /**\n * Mutate the first object in the list instead of creating a new one.\n * @default false\n */\n mutate?: boolean\n}\n\nconst isUnsafeKey = (key: string | symbol): boolean =>\n key === '__proto__' || key === 'constructor' || key === 'prototype'\n\nfunction merge<T extends AnyObject>(target: AnyObject, source?: AnyObject, options?: MergeOptions): T {\n if (!source || typeof source !== 'object') return target as T\n\n for (const key of Reflect.ownKeys(source)) {\n const value = source[key]\n if (isUnsafeKey(key)) {\n continue\n } else if (Array.isArray(value)) {\n target[key]\n // If the value is an array, handle it based on the configured array strategy\n = options?.arrayStrategy === 'concat' && Array.isArray(target[key])\n ? [...target[key], ...value]\n : value\n } else if (value !== null && typeof value === 'object') {\n // Recursively merge nested objects\n if (!target[key] || typeof target[key] !== 'object') {\n target[key] = {}\n }\n merge(target[key] as AnyObject, value as AnyObject, options)\n } else {\n // Overwrite with non-object values\n target[key] = value\n }\n }\n\n return target as T\n}\n\n/**\n * Creates a deep merge function with the specified options.\n * @param options Options for merging.\n * @returns A deep merge function configured for the specified options.\n */\nexport function createDeepMerge(options: MergeOptions) {\n return function deepMerge<T extends AnyObject[]>(...objects: T): MergeAll<T> {\n const result = (options.mutate ? objects[0] ?? {} : {}) as MergeAll<T>\n for (const obj of objects) {\n merge(result, obj, options)\n }\n return result\n }\n}\n\n/**\n * Deeply merges multiple objects into a new object.\n * @param objects Multiple objects to merge deeply.\n * The function merges properties from all objects into a new object.\n * If a property exists in multiple objects, the last object's value will be used.\n * If a property is an object, it will be merged recursively.\n * If a property is an array, it will be overwritten by the last object's value.\n * If a property is a primitive value, it will be overwritten by the last object's value.\n * If a property is undefined in the source, it will be skipped.\n * If a property is a symbol, it will be merged as well.\n * @returns A new object with the merged properties.\n */\nexport const deepMerge = createDeepMerge({ arrayStrategy: 'overwrite', mutate: false })\n","import type { TypeCheck, TypeCheckConfig } from '@xylabs/object-model'\nimport {\n isObject, isTruthy,\n type ObjectTypeShape, type TypedObject,\n} from '@xylabs/typeof'\n\nimport { isType } from './isType.ts'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends TypedObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<TypedObject>[]): TypeCheck<T> {\n return (obj: unknown, config?: TypeCheckConfig | number): obj is T => {\n if (!isObject(obj)) {\n return false\n }\n const log = (typeof config === 'object') ? config.log : undefined\n return (\n // do primary check\n Object.entries(shape ?? {}).filter(([key, type]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = isType((obj as any)[key], type)\n if (!result && isTruthy(log)) {\n const logger = typeof log === 'object' ? log : console\n logger.warn(`isType Failed: ${key}: ${type}`)\n }\n return !result\n }).length === 0\n // perform additional checks\n && (additionalChecks?.reduce((prev, check) => prev && check(obj, { log }), true) ?? true)\n )\n }\n }\n}\n","import { isObject, isString } from '@xylabs/typeof'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport type { DeepRestrictToStringKeys } from './OmitStartsWith.ts'\n\nexport type JsonFieldPair = [key: string, value: JsonValue]\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\nexport type JsonTypedObject<T extends EmptyObject = EmptyObject> = DeepRestrictToStringKeys<T>\nexport type JsonArray = JsonValue[]\n\nexport const isJsonValue = (value: unknown): value is JsonValue => {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean': {\n return true\n }\n default: {\n return value === null || isJsonObject(value) || isJsonArray(value)\n }\n }\n}\n\nexport const isJsonArray = (value: unknown): value is JsonArray => {\n return Array.isArray(value) && !value.some(item => !isJsonValue(item))\n}\n\nexport const asJsonArray = (value: unknown): JsonArray => {\n if (Array.isArray(value)) {\n return value.filter(isJsonValue)\n } else {\n throw new TypeError(`Expected an array, got ${typeof value}`)\n }\n}\n\nexport const isValidJsonFieldPair = (value: unknown): value is JsonFieldPair => {\n if (!Array.isArray(value) || value.length !== 2) {\n return false\n }\n const [key, val] = value\n return isString(key) && isJsonValue(val)\n}\n\nexport const isJsonObject = (value: unknown): value is JsonObject => {\n return (\n isObject(value)\n // check if all keys are strings\n && !Object.entries(value).some(item => !isValidJsonFieldPair(item))\n )\n}\n\nexport const toJsonObject = (value: unknown): JsonObject => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TypeError(`Expected an object, got ${typeof value}`)\n }\n if (isJsonObject(value)) {\n return value\n }\n const result: JsonObject = {}\n for (const [k, v] of Object.entries(value)) {\n if (v !== undefined) {\n const [key, jsonValue] = toValidJsonFieldPair([k, v])\n result[key] = jsonValue\n }\n }\n return result\n}\n\nexport const toJsonValue = (value: unknown): JsonValue => {\n if (isObject(value)) {\n return toJsonObject(value)\n } else if (Array.isArray(value)) {\n return toJsonArray(value)\n } else if (isJsonValue(value)) {\n return value\n }\n throw new TypeError(`Unable to coerce ${typeof value} to a JSON value`)\n}\n\nexport const toJsonArray = (value: unknown): JsonArray => {\n if (Array.isArray(value)) {\n return value.map(item => toJsonValue(item))\n }\n throw new TypeError(`Unable to coerce ${typeof value} to a JSON array`)\n}\n\nexport const toValidJsonFieldPair = (pair: [key: unknown, value: unknown]): JsonFieldPair => {\n const [key, value] = pair\n if (!isString(key)) {\n throw new TypeError(`Expected a string key, got ${typeof key}`)\n }\n\n if (isJsonValue(value)) {\n return [key, value]\n } else if (isObject(value)) {\n return [key, toJsonObject(value)]\n }\n\n throw new TypeError(`Expected a valid JSON value, got ${typeof value}`)\n}\n","import type { EmptyObject } from './EmptyObject.ts'\nimport type { StringKeyObject } from './StringKeyObject.ts'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport type { JsonObject } from './JsonObject.ts'\nimport type { DeepOmitStartsWith } from './OmitStartsWith.ts'\n\nexport type OmitByPredicate<T extends EmptyObject = Record<string, unknown>> = (value: T[keyof T], key: keyof T) => boolean\n\nconst omitByArray = <T>(\n obj: T[],\n predicate: OmitByPredicate,\n maxDepth: number,\n): T[] => {\n return obj.map((value) => {\n return (value !== null && typeof value === 'object') ? omitBy(value, predicate, maxDepth) : value\n }) as T[]\n}\n\nconst omitByObject = <T extends EmptyObject>(\n obj: T,\n predicate: OmitByPredicate,\n maxDepth: number,\n): Partial<T> => {\n const result: JsonObject = {}\n\n for (const key in obj) {\n if (Object.hasOwn(obj, key)) {\n const value = obj[key]\n if (!predicate(value, key)) {\n result[key] = ((value !== null && typeof value === 'object') ? omitBy(value, predicate, maxDepth - 1) : value) as JsonObject\n }\n }\n }\n\n return result as T\n}\n\nexport const omitBy = <T extends EmptyObject>(\n obj: T,\n predicate: OmitByPredicate,\n maxDepth = 1,\n): Partial<T> => {\n if (maxDepth <= 0) {\n return obj\n }\n\n return Array.isArray(obj) ? omitByArray(obj, predicate, maxDepth - 1) as T : omitByObject(obj, predicate, maxDepth - 1) as T\n}\n\nconst omitByPrefixPredicate = (prefix: string) => (_: unknown, key: string) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n}\n\nexport const omitByPrefix = <T extends EmptyObject, P extends string>(payload: T, prefix: P, maxDepth = 100): DeepOmitStartsWith<T, P> => {\n return omitBy(payload, omitByPrefixPredicate(prefix), maxDepth) as unknown as DeepOmitStartsWith<T, P>\n}\n","import { assertEx } from '@xylabs/assert'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport type { JsonObject } from './JsonObject.ts'\nimport type { DeepPickStartsWith } from './PickStartsWith.ts'\n\nexport type PickByPredicate<T extends EmptyObject = Record<string, unknown>> = (value: T[keyof T], key: keyof T) => boolean\n\nconst pickByArray = <T>(\n obj: T[],\n predicate: PickByPredicate,\n maxDepth: number,\n): T[] => {\n return obj.map((value) => {\n return (value !== null && typeof value === 'object') ? pickBy(value, predicate, maxDepth) : value\n }) as T[]\n}\n\nconst pickByObject = <T extends EmptyObject>(\n obj: T,\n predicate: PickByPredicate,\n maxDepth: number,\n): Partial<T> => {\n const result: JsonObject = {}\n\n for (const key in obj) {\n if (Object.hasOwn(obj, key)) {\n const value = obj[key]\n if (predicate(value, key)) {\n result[key] = ((value !== null && typeof value === 'object') ? pickBy(value, predicate, maxDepth - 1) : value) as JsonObject\n }\n }\n }\n\n return result as T\n}\n\nexport const pickBy = <T extends EmptyObject>(\n obj: T,\n predicate: PickByPredicate,\n maxDepth = 1,\n): Partial<T> => {\n if (maxDepth <= 0) {\n return obj\n }\n\n return Array.isArray(obj) ? pickByArray(obj, predicate, maxDepth - 1) as T : pickByObject(obj, predicate, maxDepth - 1) as T\n}\n\nconst pickByPrefixPredicate = (prefix: string) => (_: unknown, key: string) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n}\n\nexport const pickByPrefix = <T extends EmptyObject, P extends string>(payload: T, prefix: P, maxDepth = 100): DeepPickStartsWith<T, P> => {\n return pickBy(payload, pickByPrefixPredicate(prefix), maxDepth) as unknown as DeepPickStartsWith<T, P>\n}\n","import type { EmptyObject } from './EmptyObject.ts'\n\nexport const removeFields = <T extends EmptyObject, K extends keyof T>(obj: T, fields: K[]): Omit<T, K> => {\n const clone = { ...obj }\n for (const field of fields) {\n delete clone[field]\n }\n return clone\n}\n","import type {\n JsonArray, JsonObject, JsonValue,\n} from './JsonObject.ts'\n\nexport const toSafeJsonArray = (value: unknown[], cycleList?: unknown[], maxDepth = 3): JsonArray => {\n return value.map(item => toSafeJsonValue(item, cycleList, maxDepth))\n}\n\nexport const toSafeJsonObject = (value: object, cycleList?: unknown[], maxDepth = 3): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toSafeJsonValue(entry, cycleList, maxDepth)\n }\n return result\n}\n\nexport const toSafeJsonValue = (value: unknown, cycleList?: unknown[], maxDepth = 3): JsonValue => {\n if (maxDepth <= 0 && typeof value === 'object') {\n return '[MaxDepth]'\n }\n if (cycleList?.includes(value)) {\n return '[Circular]'\n }\n switch (typeof value) {\n case 'string':\n case 'boolean':\n case 'number': {\n return value\n }\n case 'object': {\n if (value === null) {\n return null\n }\n const newCycleList = cycleList ?? []\n newCycleList.push(value)\n return Array.isArray(value) ? toSafeJsonArray(value, newCycleList, maxDepth - 1) : toSafeJsonObject(value, newCycleList, maxDepth - 1)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toSafeJsonString = (value: unknown, maxDepth = 3) => {\n return JSON.stringify(toSafeJson(value, maxDepth), null, 2)\n}\n\nexport const toSafeJson = (value: unknown, maxDepth = 3): JsonValue => {\n return toSafeJsonValue(value, undefined, maxDepth)\n}\n","import type { AnyObject } from '@xylabs/object-model'\nimport type { Promisable } from '@xylabs/promise'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport { ObjectWrapper } from './ObjectWrapper.ts'\n\nexport interface Validator<T extends EmptyObject = AnyObject> {\n validate(payload: T): Promisable<Error[]>\n}\n\nexport abstract class ValidatorBase<T extends EmptyObject = AnyObject> extends ObjectWrapper<Partial<T>> implements Validator<T> {\n abstract validate(payload: T): Promisable<Error[]>\n}\n","export * from './asObject.ts'\nexport * from './AsObjectFactory.ts'\nexport * from './AsTypeFactory.ts'\nexport * from './deepMerge.ts'\nexport * from './EmptyObject.ts'\nexport * from './isObject.ts'\nexport * from './IsObjectFactory.ts'\nexport * from './isType.ts'\nexport * from './JsonObject.ts'\nexport * from './ObjectWrapper.ts'\nexport * from './omitBy.ts'\nexport * from './OmitStartsWith.ts'\nexport * from './Optional.ts'\nexport * from './Override.ts'\nexport * from './PartialRecord.ts'\nexport * from './pickBy.ts'\nexport * from './PickStartsWith.ts'\nexport * from './removeFields.ts'\nexport * from './StringKeyObject.ts'\nexport * from './toSafeJson.ts'\nexport * from './Validator.ts'\nexport * from './WithAdditional.ts'\nexport * from '@xylabs/object-model'\n"],"mappings":"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","names":["deepMerge","isObject","isTruthy","isObject","isTruthy","isObject","assertEx"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/index-deprecated.ts","../../src/index-un-deprecated.ts","../../src/asObject.ts","../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/deepMerge.ts","../../src/IsObjectFactory.ts","../../src/isType.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/omitBy.ts","../../src/pickBy.ts","../../src/removeFields.ts","../../src/toSafeJson.ts","../../src/Validator.ts"],"sourcesContent":["export * from './index-deprecated.ts'\nexport * from './index-un-deprecated.ts'\n","export * from './index-un-deprecated.ts'\nexport * from './isType.ts'\n","export * from './asObject.ts'\nexport * from './AsObjectFactory.ts'\nexport * from './AsTypeFactory.ts'\nexport * from './deepMerge.ts'\nexport * from './EmptyObject.ts'\nexport * from './IsObjectFactory.ts'\nexport * from './JsonObject.ts'\nexport * from './ObjectWrapper.ts'\nexport * from './omitBy.ts'\nexport * from './OmitStartsWith.ts'\nexport * from './Optional.ts'\nexport * from './Override.ts'\nexport * from './PartialRecord.ts'\nexport * from './pickBy.ts'\nexport * from './PickStartsWith.ts'\nexport * from './removeFields.ts'\nexport * from './StringKeyObject.ts'\nexport * from './toSafeJson.ts'\nexport * from './Validator.ts'\nexport * from './WithAdditional.ts'\nexport * from '@xylabs/object-model'\nexport { isObject } from '@xylabs/typeof'\n","import type { AnyObject } from '@xylabs/object-model'\nimport { isObject } from '@xylabs/typeof'\n\nimport { AsObjectFactory } from './AsObjectFactory.ts'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import { assertDefinedEx } from '@xylabs/assert'\nimport type {\n AsTypeFunction,\n StringOrAlertFunction, TypeCheck, TypeCheckConfig,\n TypeCheckRequiredConfig,\n} from '@xylabs/object-model'\nimport type { AnyNonPromise } from '@xylabs/promise'\nimport { isPromise } from '@xylabs/promise'\nimport { isTruthy } from '@xylabs/typeof'\n\nexport const AsTypeFactory = {\n create: <T extends AnyNonPromise>(typeCheck: TypeCheck<T>): AsTypeFunction<T> => {\n const func = (\n value: AnyNonPromise,\n assertOrConfig?: StringOrAlertFunction<T> | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): T | undefined => {\n // when used as a predicate, it seems that the index is passed as the second parameter (filter,map)\n const isPredicate = typeof assertOrConfig === 'number'\n const resolvedAssert = isPredicate\n ? undefined\n : (typeof assertOrConfig === 'object' ? undefined : assertOrConfig) as (StringOrAlertFunction<T> | undefined)\n const resolvedConfig = isPredicate ? undefined : typeof assertOrConfig === 'object' ? assertOrConfig : config\n\n // only return undefined if not required\n const required = isTruthy((resolvedConfig as (TypeCheckRequiredConfig | undefined))?.required)\n if (!required && (value === undefined || value === null)) {\n return undefined\n }\n\n if (isPromise(value)) {\n throw new TypeError('un-awaited promises may not be sent to \"as\" functions')\n }\n\n const result = typeCheck(value, resolvedConfig) ? (value as T) : undefined\n\n if (resolvedAssert !== undefined) {\n return typeof resolvedAssert === 'function' ? assertDefinedEx<T>(result, resolvedAssert) : assertDefinedEx<T>(result, () => resolvedAssert)\n }\n return result\n }\n return func\n },\n createOptional: <T extends AnyNonPromise>(typeCheck: TypeCheck<T>) => {\n const func = (value: AnyNonPromise): T | undefined => {\n if (value === undefined || value === null) return undefined\n if (isPromise(value)) {\n throw new TypeError('un-awaited promises may not be sent to \"as\" functions')\n }\n return typeCheck(value) ? (value as T) : undefined\n }\n return func\n },\n}\n","import type { TypeCheck } from '@xylabs/object-model'\nimport type { TypedObject } from '@xylabs/typeof'\n\nimport { AsTypeFactory } from './AsTypeFactory.ts'\n\nexport const AsObjectFactory = {\n create: <T extends TypedObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n createOptional: <T extends TypedObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.createOptional<T>(typeCheck)\n },\n}\n","import type { AnyObject } from '@xylabs/object-model'\n\n/**\n * Deeply merges two types into a new type.\n */\ntype DeepMerge<A, B> = {\n [K in keyof A | keyof B]:\n K extends keyof B\n ? K extends keyof A\n ? A[K] extends object\n ? B[K] extends object\n ? DeepMerge<A[K], B[K]>\n : B[K]\n : B[K]\n : B[K]\n : K extends keyof A\n ? A[K]\n : never;\n}\n\n/**\n * Merges multiple types into a new type.\n */\ntype MergeAll<T extends object[], R = {}>\n = T extends [infer First extends object, ...infer Rest extends object[]]\n ? MergeAll<Rest, DeepMerge<R, First>>\n : R\n\n/**\n * Options for merging objects in the deep merge function.\n */\ntype MergeOptions = {\n /**\n * Strategy for merging arrays.\n * - 'overwrite': Overwrites the array with the last object's value.\n * - 'concat': Concatenates arrays from all objects.\n * @default 'overwrite'\n */\n arrayStrategy?: 'overwrite' | 'concat'\n /**\n * Mutate the first object in the list instead of creating a new one.\n * @default false\n */\n mutate?: boolean\n}\n\nconst isUnsafeKey = (key: string | symbol): boolean =>\n key === '__proto__' || key === 'constructor' || key === 'prototype'\n\nfunction merge<T extends AnyObject>(target: AnyObject, source?: AnyObject, options?: MergeOptions): T {\n if (!source || typeof source !== 'object') return target as T\n\n for (const key of Reflect.ownKeys(source)) {\n const value = source[key]\n if (isUnsafeKey(key)) {\n continue\n } else if (Array.isArray(value)) {\n target[key]\n // If the value is an array, handle it based on the configured array strategy\n = options?.arrayStrategy === 'concat' && Array.isArray(target[key])\n ? [...target[key], ...value]\n : value\n } else if (value !== null && typeof value === 'object') {\n // Recursively merge nested objects\n if (!target[key] || typeof target[key] !== 'object') {\n target[key] = {}\n }\n merge(target[key] as AnyObject, value as AnyObject, options)\n } else {\n // Overwrite with non-object values\n target[key] = value\n }\n }\n\n return target as T\n}\n\n/**\n * Creates a deep merge function with the specified options.\n * @param options Options for merging.\n * @returns A deep merge function configured for the specified options.\n */\nexport function createDeepMerge(options: MergeOptions) {\n return function deepMerge<T extends AnyObject[]>(...objects: T): MergeAll<T> {\n const result = (options.mutate ? objects[0] ?? {} : {}) as MergeAll<T>\n for (const obj of objects) {\n merge(result, obj, options)\n }\n return result\n }\n}\n\n/**\n * Deeply merges multiple objects into a new object.\n * @param objects Multiple objects to merge deeply.\n * The function merges properties from all objects into a new object.\n * If a property exists in multiple objects, the last object's value will be used.\n * If a property is an object, it will be merged recursively.\n * If a property is an array, it will be overwritten by the last object's value.\n * If a property is a primitive value, it will be overwritten by the last object's value.\n * If a property is undefined in the source, it will be skipped.\n * If a property is a symbol, it will be merged as well.\n * @returns A new object with the merged properties.\n */\nexport const deepMerge = createDeepMerge({ arrayStrategy: 'overwrite', mutate: false })\n","import type { TypeCheck, TypeCheckConfig } from '@xylabs/object-model'\nimport {\n isObject, isTruthy,\n type ObjectTypeShape, type TypedObject,\n} from '@xylabs/typeof'\n\nimport { isType } from './isType.ts'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends TypedObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<TypedObject>[]): TypeCheck<T> {\n return (obj: unknown, config?: TypeCheckConfig | number): obj is T => {\n if (!isObject(obj)) {\n return false\n }\n const log = (typeof config === 'object') ? config.log : undefined\n return (\n // do primary check\n Object.entries(shape ?? {}).filter(([key, type]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = isType((obj as any)[key], type)\n if (!result && isTruthy(log)) {\n const logger = typeof log === 'object' ? log : console\n logger.warn(`isType Failed: ${key}: ${type}`)\n }\n return !result\n }).length === 0\n // perform additional checks\n && (additionalChecks?.reduce((prev, check) => prev && check(obj, { log }), true) ?? true)\n )\n }\n }\n}\n","import type { FieldType } from '@xylabs/typeof'\n\n/** @deprecated use from @xylabs/typeof instead */\nexport const isType = (value: unknown, expectedType: FieldType) => {\n const typeofValue = typeof value\n switch (expectedType) {\n case 'array': {\n return Array.isArray(value)\n }\n case 'null': {\n return value === null\n }\n case 'undefined': {\n return value === undefined\n }\n case 'object': {\n // nulls resolve to objects, so exclude them\n if (value === null) {\n return false\n }\n // arrays resolve to objects, so exclude them\n return typeofValue === 'object' && !Array.isArray(value)\n }\n default: {\n return typeofValue === expectedType\n }\n }\n}\n","import { isObject, isString } from '@xylabs/typeof'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport type { DeepRestrictToStringKeys } from './OmitStartsWith.ts'\n\nexport type JsonFieldPair = [key: string, value: JsonValue]\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\nexport type JsonTypedObject<T extends EmptyObject = EmptyObject> = DeepRestrictToStringKeys<T>\nexport type JsonArray = JsonValue[]\n\nexport const isJsonValue = (value: unknown): value is JsonValue => {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean': {\n return true\n }\n default: {\n return value === null || isJsonObject(value) || isJsonArray(value)\n }\n }\n}\n\nexport const isJsonArray = (value: unknown): value is JsonArray => {\n return Array.isArray(value) && !value.some(item => !isJsonValue(item))\n}\n\nexport const asJsonArray = (value: unknown): JsonArray => {\n if (Array.isArray(value)) {\n return value.filter(isJsonValue)\n } else {\n throw new TypeError(`Expected an array, got ${typeof value}`)\n }\n}\n\nexport const isValidJsonFieldPair = (value: unknown): value is JsonFieldPair => {\n if (!Array.isArray(value) || value.length !== 2) {\n return false\n }\n const [key, val] = value\n return isString(key) && isJsonValue(val)\n}\n\nexport const isJsonObject = (value: unknown): value is JsonObject => {\n return (\n isObject(value)\n // check if all keys are strings\n && !Object.entries(value).some(item => !isValidJsonFieldPair(item))\n )\n}\n\nexport const toJsonObject = (value: unknown): JsonObject => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TypeError(`Expected an object, got ${typeof value}`)\n }\n if (isJsonObject(value)) {\n return value\n }\n const result: JsonObject = {}\n for (const [k, v] of Object.entries(value)) {\n if (v !== undefined) {\n const [key, jsonValue] = toValidJsonFieldPair([k, v])\n result[key] = jsonValue\n }\n }\n return result\n}\n\nexport const toJsonValue = (value: unknown): JsonValue => {\n if (isObject(value)) {\n return toJsonObject(value)\n } else if (Array.isArray(value)) {\n return toJsonArray(value)\n } else if (isJsonValue(value)) {\n return value\n }\n throw new TypeError(`Unable to coerce ${typeof value} to a JSON value`)\n}\n\nexport const toJsonArray = (value: unknown): JsonArray => {\n if (Array.isArray(value)) {\n return value.map(item => toJsonValue(item))\n }\n throw new TypeError(`Unable to coerce ${typeof value} to a JSON array`)\n}\n\nexport const toValidJsonFieldPair = (pair: [key: unknown, value: unknown]): JsonFieldPair => {\n const [key, value] = pair\n if (!isString(key)) {\n throw new TypeError(`Expected a string key, got ${typeof key}`)\n }\n\n if (isJsonValue(value)) {\n return [key, value]\n } else if (isObject(value)) {\n return [key, toJsonObject(value)]\n }\n\n throw new TypeError(`Expected a valid JSON value, got ${typeof value}`)\n}\n","import type { EmptyObject } from './EmptyObject.ts'\nimport type { StringKeyObject } from './StringKeyObject.ts'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport type { JsonObject } from './JsonObject.ts'\nimport type { DeepOmitStartsWith } from './OmitStartsWith.ts'\n\nexport type OmitByPredicate<T extends EmptyObject = Record<string, unknown>> = (value: T[keyof T], key: keyof T) => boolean\n\nconst omitByArray = <T>(\n obj: T[],\n predicate: OmitByPredicate,\n maxDepth: number,\n): T[] => {\n return obj.map((value) => {\n return (value !== null && typeof value === 'object') ? omitBy(value, predicate, maxDepth) : value\n }) as T[]\n}\n\nconst omitByObject = <T extends EmptyObject>(\n obj: T,\n predicate: OmitByPredicate,\n maxDepth: number,\n): Partial<T> => {\n const result: JsonObject = {}\n\n for (const key in obj) {\n if (Object.hasOwn(obj, key)) {\n const value = obj[key]\n if (!predicate(value, key)) {\n result[key] = ((value !== null && typeof value === 'object') ? omitBy(value, predicate, maxDepth - 1) : value) as JsonObject\n }\n }\n }\n\n return result as T\n}\n\nexport const omitBy = <T extends EmptyObject>(\n obj: T,\n predicate: OmitByPredicate,\n maxDepth = 1,\n): Partial<T> => {\n if (maxDepth <= 0) {\n return obj\n }\n\n return Array.isArray(obj) ? omitByArray(obj, predicate, maxDepth - 1) as T : omitByObject(obj, predicate, maxDepth - 1) as T\n}\n\nconst omitByPrefixPredicate = (prefix: string) => (_: unknown, key: string) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n}\n\nexport const omitByPrefix = <T extends EmptyObject, P extends string>(payload: T, prefix: P, maxDepth = 100): DeepOmitStartsWith<T, P> => {\n return omitBy(payload, omitByPrefixPredicate(prefix), maxDepth) as unknown as DeepOmitStartsWith<T, P>\n}\n","import { assertEx } from '@xylabs/assert'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport type { JsonObject } from './JsonObject.ts'\nimport type { DeepPickStartsWith } from './PickStartsWith.ts'\n\nexport type PickByPredicate<T extends EmptyObject = Record<string, unknown>> = (value: T[keyof T], key: keyof T) => boolean\n\nconst pickByArray = <T>(\n obj: T[],\n predicate: PickByPredicate,\n maxDepth: number,\n): T[] => {\n return obj.map((value) => {\n return (value !== null && typeof value === 'object') ? pickBy(value, predicate, maxDepth) : value\n }) as T[]\n}\n\nconst pickByObject = <T extends EmptyObject>(\n obj: T,\n predicate: PickByPredicate,\n maxDepth: number,\n): Partial<T> => {\n const result: JsonObject = {}\n\n for (const key in obj) {\n if (Object.hasOwn(obj, key)) {\n const value = obj[key]\n if (predicate(value, key)) {\n result[key] = ((value !== null && typeof value === 'object') ? pickBy(value, predicate, maxDepth - 1) : value) as JsonObject\n }\n }\n }\n\n return result as T\n}\n\nexport const pickBy = <T extends EmptyObject>(\n obj: T,\n predicate: PickByPredicate,\n maxDepth = 1,\n): Partial<T> => {\n if (maxDepth <= 0) {\n return obj\n }\n\n return Array.isArray(obj) ? pickByArray(obj, predicate, maxDepth - 1) as T : pickByObject(obj, predicate, maxDepth - 1) as T\n}\n\nconst pickByPrefixPredicate = (prefix: string) => (_: unknown, key: string) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n}\n\nexport const pickByPrefix = <T extends EmptyObject, P extends string>(payload: T, prefix: P, maxDepth = 100): DeepPickStartsWith<T, P> => {\n return pickBy(payload, pickByPrefixPredicate(prefix), maxDepth) as unknown as DeepPickStartsWith<T, P>\n}\n","import type { EmptyObject } from './EmptyObject.ts'\n\nexport const removeFields = <T extends EmptyObject, K extends keyof T>(obj: T, fields: K[]): Omit<T, K> => {\n const clone = { ...obj }\n for (const field of fields) {\n delete clone[field]\n }\n return clone\n}\n","import type {\n JsonArray, JsonObject, JsonValue,\n} from './JsonObject.ts'\n\nexport const toSafeJsonArray = (value: unknown[], cycleList?: unknown[], maxDepth = 3): JsonArray => {\n return value.map(item => toSafeJsonValue(item, cycleList, maxDepth))\n}\n\nexport const toSafeJsonObject = (value: object, cycleList?: unknown[], maxDepth = 3): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toSafeJsonValue(entry, cycleList, maxDepth)\n }\n return result\n}\n\nexport const toSafeJsonValue = (value: unknown, cycleList?: unknown[], maxDepth = 3): JsonValue => {\n if (maxDepth <= 0 && typeof value === 'object') {\n return '[MaxDepth]'\n }\n if (cycleList?.includes(value)) {\n return '[Circular]'\n }\n switch (typeof value) {\n case 'string':\n case 'boolean':\n case 'number': {\n return value\n }\n case 'object': {\n if (value === null) {\n return null\n }\n const newCycleList = cycleList ?? []\n newCycleList.push(value)\n return Array.isArray(value) ? toSafeJsonArray(value, newCycleList, maxDepth - 1) : toSafeJsonObject(value, newCycleList, maxDepth - 1)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toSafeJsonString = (value: unknown, maxDepth = 3) => {\n return JSON.stringify(toSafeJson(value, maxDepth), null, 2)\n}\n\nexport const toSafeJson = (value: unknown, maxDepth = 3): JsonValue => {\n return toSafeJsonValue(value, undefined, maxDepth)\n}\n","import type { AnyObject } from '@xylabs/object-model'\nimport type { Promisable } from '@xylabs/promise'\n\nimport type { EmptyObject } from './EmptyObject.ts'\nimport { ObjectWrapper } from './ObjectWrapper.ts'\n\nexport interface Validator<T extends EmptyObject = AnyObject> {\n validate(payload: T): Promisable<Error[]>\n}\n\nexport abstract class ValidatorBase<T extends EmptyObject = AnyObject> extends ObjectWrapper<Partial<T>> implements Validator<T> {\n abstract validate(payload: T): Promisable<Error[]>\n}\n"],"mappings":"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","names":["isObject","isObject","isObject","deepMerge","isObject","isTruthy","isObject","isTruthy","isObject","assertEx","isObject"]}
@@ -1,3 +1,4 @@
1
1
  import type { FieldType } from '@xylabs/typeof';
2
+ /** @deprecated use from @xylabs/typeof instead */
2
3
  export declare const isType: (value: unknown, expectedType: FieldType) => boolean;
3
4
  //# sourceMappingURL=isType.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isType.d.ts","sourceRoot":"","sources":["../../src/isType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,eAAO,MAAM,MAAM,GAAI,OAAO,OAAO,EAAE,cAAc,SAAS,YAwB7D,CAAA"}
1
+ {"version":3,"file":"isType.d.ts","sourceRoot":"","sources":["../../src/isType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,kDAAkD;AAClD,eAAO,MAAM,MAAM,GAAI,OAAO,OAAO,EAAE,cAAc,SAAS,YAwB7D,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/object",
3
- "version": "4.15.0",
3
+ "version": "4.15.2",
4
4
  "description": "Base functionality used throughout XY Labs TypeScript/JavaScript libraries",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -25,6 +25,11 @@
25
25
  "source": "./src/index.ts",
26
26
  "default": "./dist/neutral/index.mjs"
27
27
  },
28
+ "./index-un-deprecated": {
29
+ "types": "./dist/neutral/index-un-deprecated.d.ts",
30
+ "source": "./src/index-un-deprecated.ts",
31
+ "default": "./dist/neutral/index-un-deprecated.mjs"
32
+ },
28
33
  "./package.json": "./package.json"
29
34
  },
30
35
  "module": "./dist/neutral/index.mjs",
@@ -35,10 +40,10 @@
35
40
  "src"
36
41
  ],
37
42
  "dependencies": {
38
- "@xylabs/assert": "^4.15.0",
39
- "@xylabs/object-model": "^4.15.0",
40
- "@xylabs/promise": "^4.15.0",
41
- "@xylabs/typeof": "^4.15.0"
43
+ "@xylabs/assert": "^4.15.2",
44
+ "@xylabs/object-model": "^4.15.2",
45
+ "@xylabs/promise": "^4.15.2",
46
+ "@xylabs/typeof": "^4.15.2"
42
47
  },
43
48
  "devDependencies": {
44
49
  "@xylabs/ts-scripts-yarn3": "^7.0.1",
@@ -1,4 +1,4 @@
1
- import type { JsonValue } from './index.ts'
1
+ import type { JsonValue } from './JsonObject.ts'
2
2
 
3
3
  export type OmitStartsWith<T, Prefix extends string> = {
4
4
  [K in keyof T as K extends `${Prefix}${string}` ? never : K]: T[K];
package/src/asObject.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { AnyObject } from '@xylabs/object-model'
2
+ import { isObject } from '@xylabs/typeof'
2
3
 
3
4
  import { AsObjectFactory } from './AsObjectFactory.ts'
4
- import { isObject } from './isObject.ts'
5
5
 
6
6
  export const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()
@@ -0,0 +1,2 @@
1
+ export * from './index-un-deprecated.ts'
2
+ export * from './isType.ts'
@@ -0,0 +1,22 @@
1
+ export * from './asObject.ts'
2
+ export * from './AsObjectFactory.ts'
3
+ export * from './AsTypeFactory.ts'
4
+ export * from './deepMerge.ts'
5
+ export * from './EmptyObject.ts'
6
+ export * from './IsObjectFactory.ts'
7
+ export * from './JsonObject.ts'
8
+ export * from './ObjectWrapper.ts'
9
+ export * from './omitBy.ts'
10
+ export * from './OmitStartsWith.ts'
11
+ export * from './Optional.ts'
12
+ export * from './Override.ts'
13
+ export * from './PartialRecord.ts'
14
+ export * from './pickBy.ts'
15
+ export * from './PickStartsWith.ts'
16
+ export * from './removeFields.ts'
17
+ export * from './StringKeyObject.ts'
18
+ export * from './toSafeJson.ts'
19
+ export * from './Validator.ts'
20
+ export * from './WithAdditional.ts'
21
+ export * from '@xylabs/object-model'
22
+ export { isObject } from '@xylabs/typeof'
package/src/index.ts CHANGED
@@ -1,23 +1,2 @@
1
- export * from './asObject.ts'
2
- export * from './AsObjectFactory.ts'
3
- export * from './AsTypeFactory.ts'
4
- export * from './deepMerge.ts'
5
- export * from './EmptyObject.ts'
6
- export * from './isObject.ts'
7
- export * from './IsObjectFactory.ts'
8
- export * from './isType.ts'
9
- export * from './JsonObject.ts'
10
- export * from './ObjectWrapper.ts'
11
- export * from './omitBy.ts'
12
- export * from './OmitStartsWith.ts'
13
- export * from './Optional.ts'
14
- export * from './Override.ts'
15
- export * from './PartialRecord.ts'
16
- export * from './pickBy.ts'
17
- export * from './PickStartsWith.ts'
18
- export * from './removeFields.ts'
19
- export * from './StringKeyObject.ts'
20
- export * from './toSafeJson.ts'
21
- export * from './Validator.ts'
22
- export * from './WithAdditional.ts'
23
- export * from '@xylabs/object-model'
1
+ export * from './index-deprecated.ts'
2
+ export * from './index-un-deprecated.ts'
package/src/isType.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { FieldType } from '@xylabs/typeof'
2
2
 
3
+ /** @deprecated use from @xylabs/typeof instead */
3
4
  export const isType = (value: unknown, expectedType: FieldType) => {
4
5
  const typeofValue = typeof value
5
6
  switch (expectedType) {
@@ -1,2 +0,0 @@
1
- export declare const isObject: <T>(value: T) => value is T & object;
2
- //# sourceMappingURL=isObject.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isObject.d.ts","sourceRoot":"","sources":["../../src/isObject.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,KAAK,IAAI,CAAC,GAAG,MAEnD,CAAA"}
package/src/isObject.ts DELETED
@@ -1,5 +0,0 @@
1
- import { isType } from './isType.ts'
2
-
3
- export const isObject = <T>(value: T): value is T & object => {
4
- return isType(value, 'object')
5
- }