@xylabs/object 3.0.7 → 3.0.9

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.
@@ -3,7 +3,6 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
6
  var __export = (target, all) => {
8
7
  for (var name in all)
9
8
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -44,9 +43,9 @@ var AsTypeFactory = {
44
43
  // eslint-disable-next-line @typescript-eslint/ban-types
45
44
  create: (typeCheck) => {
46
45
  function func(value, assertOrConfig, config) {
47
- const noUndefined = /* @__PURE__ */ __name((resolvedAssert2) => {
46
+ const noUndefined = (resolvedAssert2) => {
48
47
  return resolvedAssert2 !== void 0;
49
- }, "noUndefined");
48
+ };
50
49
  if (value === void 0) {
51
50
  return void 0;
52
51
  }
@@ -58,7 +57,6 @@ var AsTypeFactory = {
58
57
  const result = typeCheck(value, resolvedConfig) ? value : void 0;
59
58
  return noUndefined(resolvedAssert) ? (0, import_assert.assertEx)(result, typeof resolvedAssert === "function" ? resolvedAssert() : resolvedAssert) : result;
60
59
  }
61
- __name(func, "func");
62
60
  return func;
63
61
  }
64
62
  };
@@ -71,7 +69,7 @@ var AsObjectFactory = {
71
69
  };
72
70
 
73
71
  // src/isType.ts
74
- var isType = /* @__PURE__ */ __name((value, expectedType) => {
72
+ var isType = (value, expectedType) => {
75
73
  const typeofValue = typeof value;
76
74
  switch (expectedType) {
77
75
  case "array": {
@@ -93,27 +91,23 @@ var isType = /* @__PURE__ */ __name((value, expectedType) => {
93
91
  return typeofValue === expectedType;
94
92
  }
95
93
  }
96
- }, "isType");
94
+ };
97
95
 
98
96
  // src/isObject.ts
99
- var isObject = /* @__PURE__ */ __name((value) => {
97
+ var isObject = (value) => {
100
98
  return isType(value, "object");
101
- }, "isObject");
99
+ };
102
100
 
103
101
  // src/asObject.ts
104
102
  var asAnyObject = (() => AsObjectFactory.create((obj) => isObject(obj)))();
105
103
 
106
104
  // src/Base.ts
107
105
  var Base = class _Base {
108
- static {
109
- __name(this, "Base");
110
- }
111
- params;
112
- static defaultLogger;
113
106
  constructor(params) {
114
107
  this.params = params;
115
108
  params.logger?.debug(`Base constructed [${Object(this).name}]`);
116
109
  }
110
+ static defaultLogger;
117
111
  get logger() {
118
112
  return this.params?.logger ?? _Base.defaultLogger;
119
113
  }
@@ -121,9 +115,6 @@ var Base = class _Base {
121
115
 
122
116
  // src/IsObjectFactory.ts
123
117
  var IsObjectFactory = class {
124
- static {
125
- __name(this, "IsObjectFactory");
126
- }
127
118
  create(shape, additionalChecks) {
128
119
  return (obj, { log } = {}) => {
129
120
  if (!obj || typeof obj !== "object") {
@@ -139,16 +130,14 @@ var IsObjectFactory = class {
139
130
  }
140
131
  return !result;
141
132
  }).length === 0 && //perform additional checks
142
- (additionalChecks?.reduce((prev, check) => prev && check(obj, {
143
- log
144
- }), true) ?? true)
133
+ (additionalChecks?.reduce((prev, check) => prev && check(obj, { log }), true) ?? true)
145
134
  );
146
135
  };
147
136
  }
148
137
  };
149
138
 
150
139
  // src/JsonObject.ts
151
- var isJsonValue = /* @__PURE__ */ __name((value) => {
140
+ var isJsonValue = (value) => {
152
141
  switch (typeof value) {
153
142
  case "string":
154
143
  case "number":
@@ -159,23 +148,20 @@ var isJsonValue = /* @__PURE__ */ __name((value) => {
159
148
  return value === null || isJsonObject(value) || isJsonArray(value);
160
149
  }
161
150
  }
162
- }, "isJsonValue");
163
- var isJsonArray = /* @__PURE__ */ __name((value) => {
151
+ };
152
+ var isJsonArray = (value) => {
164
153
  return Array.isArray(value) && !value.some((item) => !isJsonValue(item));
165
- }, "isJsonArray");
166
- var isValidJsonFieldPair = /* @__PURE__ */ __name(([key, value]) => {
154
+ };
155
+ var isValidJsonFieldPair = ([key, value]) => {
167
156
  return typeof key === "string" && isJsonValue(value);
168
- }, "isValidJsonFieldPair");
169
- var isJsonObject = /* @__PURE__ */ __name((value) => {
157
+ };
158
+ var isJsonObject = (value) => {
170
159
  return isObject(value) && //check if all keys are strings
171
160
  !Object.entries(value).some((item) => !isValidJsonFieldPair(item));
172
- }, "isJsonObject");
161
+ };
173
162
 
174
163
  // src/ObjectWrapper.ts
175
164
  var ObjectWrapper = class {
176
- static {
177
- __name(this, "ObjectWrapper");
178
- }
179
165
  obj;
180
166
  constructor(obj) {
181
167
  this.obj = obj;
@@ -186,17 +172,17 @@ var ObjectWrapper = class {
186
172
  };
187
173
 
188
174
  // src/toJson.ts
189
- var toJsonArray = /* @__PURE__ */ __name((value, cycleList) => {
175
+ var toJsonArray = (value, cycleList) => {
190
176
  return value.map((item) => toJsonValue(item, cycleList));
191
- }, "toJsonArray");
192
- var toJsonObject = /* @__PURE__ */ __name((value, cycleList) => {
177
+ };
178
+ var toJsonObject = (value, cycleList) => {
193
179
  const result = {};
194
180
  for (const [key, entry] of Object.entries(value)) {
195
181
  result[key] = value === void 0 ? "[Undefined]" : toJsonValue(entry, cycleList);
196
182
  }
197
183
  return result;
198
- }, "toJsonObject");
199
- var toJsonValue = /* @__PURE__ */ __name((value, cycleList) => {
184
+ };
185
+ var toJsonValue = (value, cycleList) => {
200
186
  if (cycleList?.includes(value)) {
201
187
  return "[Circular]";
202
188
  }
@@ -218,15 +204,12 @@ var toJsonValue = /* @__PURE__ */ __name((value, cycleList) => {
218
204
  return `[${typeof value}]`;
219
205
  }
220
206
  }
221
- }, "toJsonValue");
222
- var toJson = /* @__PURE__ */ __name((value) => {
207
+ };
208
+ var toJson = (value) => {
223
209
  return toJsonValue(value);
224
- }, "toJson");
210
+ };
225
211
 
226
212
  // src/Validator.ts
227
213
  var ValidatorBase = class extends ObjectWrapper {
228
- static {
229
- __name(this, "ValidatorBase");
230
- }
231
214
  };
232
215
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/isType.ts","../../src/isObject.ts","../../src/asObject.ts","../../src/Base.ts","../../src/IsObjectFactory.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/toJson.ts","../../src/Validator.ts"],"sourcesContent":["export * from './AnyObject'\nexport * from './asObject'\nexport * from './AsObjectFactory'\nexport * from './AsTypeFactory'\nexport * from './Base'\nexport * from './EmptyObject'\nexport * from './isObject'\nexport * from './IsObjectFactory'\nexport * from './isType'\nexport * from './JsonObject'\nexport * from './ObjectWrapper'\nexport * from './Override'\nexport * from './PartialRecord'\nexport * from './StringKeyObject'\nexport * from './toJson'\nexport * from './Validator'\nexport * from './WithAdditional'\n","import { assertEx } from '@xylabs/assert'\nimport { Logger } from '@xylabs/logger'\n\nexport interface TypeCheckConfig {\n log?: boolean | Logger\n}\n\nexport type TypeCheck<T> = (obj: unknown, config?: TypeCheckConfig) => obj is T\n\nexport const AsTypeFactory = {\n // eslint-disable-next-line @typescript-eslint/ban-types\n create: <T>(typeCheck: TypeCheck<T>) => {\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n config?: TypeCheckConfig,\n ): TType | undefined\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assert: string | (() => string),\n config?: TypeCheckConfig,\n ): TType\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assertOrConfig?: string | (() => string) | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): TType | undefined {\n const noUndefined = (resolvedAssert: unknown): resolvedAssert is T => {\n return resolvedAssert !== undefined\n }\n\n if (value === undefined) {\n return undefined\n }\n\n if (value === null) {\n return undefined\n }\n\n const resolvedAssert = typeof assertOrConfig === 'object' ? undefined : assertOrConfig\n const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config\n const result = typeCheck(value, resolvedConfig) ? value : undefined\n\n return noUndefined(resolvedAssert) ?\n (assertEx(result, typeof resolvedAssert === 'function' ? resolvedAssert() : resolvedAssert) as TType)\n : (result as TType)\n }\n return func\n },\n}\n","import { AsTypeFactory, TypeCheck } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\n\nexport const AsObjectFactory = {\n create: <T extends EmptyObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type FieldType = 'string' | 'number' | 'object' | 'symbol' | 'symbol' | 'undefined' | 'null' | 'array' | 'function'\n\nexport type ObjectTypeShape = Record<string | number | symbol, FieldType>\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 { AnyObject } from './AnyObject'\nimport { isType } from './isType'\n\nexport const isObject = (value: unknown): value is AnyObject => {\n return isType(value, 'object')\n}\n","import { AnyObject } from './AnyObject'\nimport { AsObjectFactory } from './AsObjectFactory'\nimport { isObject } from './isObject'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import { Logger } from '@xylabs/logger'\n\nimport { EmptyObject } from './EmptyObject'\n\nexport type BaseParamsFields = {\n logger?: Logger\n}\n\nexport type BaseParams<TAdditionalParams extends EmptyObject | void = void> =\n TAdditionalParams extends EmptyObject ? BaseParamsFields & TAdditionalParams : BaseParamsFields\n\nexport abstract class Base<TParams extends BaseParams = BaseParams> {\n static defaultLogger?: Logger\n\n constructor(readonly params: TParams) {\n params.logger?.debug(`Base constructed [${Object(this).name}]`)\n }\n\n protected get logger() {\n return this.params?.logger ?? Base.defaultLogger\n }\n}\n","import { AnyObject } from './AnyObject'\nimport { TypeCheck, TypeCheckConfig } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\nimport { isType, ObjectTypeShape } from './isType'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends EmptyObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): TypeCheck<T> {\n return (obj, { log } = {}): obj is T => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\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 && 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 } from './isObject'\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\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 isValidJsonFieldPair = ([key, value]: [key: unknown, value: unknown]) => {\n return typeof key === 'string' && isJsonValue(value)\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","import { EmptyObject } from './EmptyObject'\nimport { StringKeyObject } from './StringKeyObject'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { JsonArray, JsonObject, JsonValue } from './JsonObject'\n\nconst toJsonArray = (value: unknown[], cycleList?: unknown[]): JsonArray => {\n return value.map((item) => toJsonValue(item, cycleList))\n}\n\nconst toJsonObject = (value: object, cycleList?: unknown[]): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toJsonValue(entry, cycleList)\n }\n return result\n}\n\nconst toJsonValue = (value: unknown, cycleList?: unknown[]): JsonValue => {\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) ? toJsonArray(value) : toJsonObject(value)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toJson = (value: unknown): JsonValue => {\n return toJsonValue(value)\n}\n","import { Promisable } from '@xylabs/promise'\n\nimport { AnyObject } from './AnyObject'\nimport { EmptyObject } from './EmptyObject'\nimport { ObjectWrapper } from './ObjectWrapper'\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":["AsTypeFactory","create","typeCheck","func","value","assertOrConfig","config","noUndefined","resolvedAssert","undefined","resolvedConfig","result","assertEx","AsObjectFactory","create","typeCheck","AsTypeFactory","isType","value","expectedType","typeofValue","Array","isArray","undefined","isObject","value","isType","asAnyObject","AsObjectFactory","create","obj","isObject","Base","defaultLogger","constructor","params","logger","debug","Object","name","IsObjectFactory","create","shape","additionalChecks","obj","log","Object","entries","filter","key","type","result","isType","logger","console","warn","length","reduce","prev","check","isJsonValue","value","isJsonObject","isJsonArray","Array","isArray","some","item","isValidJsonFieldPair","key","isObject","Object","entries","ObjectWrapper","obj","constructor","stringKeyObj","toJsonArray","value","cycleList","map","item","toJsonValue","toJsonObject","result","key","entry","Object","entries","undefined","includes","newCycleList","push","Array","isArray","toJson","ValidatorBase","ObjectWrapper"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/isType.ts","../../src/isObject.ts","../../src/asObject.ts","../../src/Base.ts","../../src/IsObjectFactory.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/toJson.ts","../../src/Validator.ts"],"sourcesContent":["export * from './AnyObject'\nexport * from './asObject'\nexport * from './AsObjectFactory'\nexport * from './AsTypeFactory'\nexport * from './Base'\nexport * from './EmptyObject'\nexport * from './isObject'\nexport * from './IsObjectFactory'\nexport * from './isType'\nexport * from './JsonObject'\nexport * from './ObjectWrapper'\nexport * from './Override'\nexport * from './PartialRecord'\nexport * from './StringKeyObject'\nexport * from './toJson'\nexport * from './Validator'\nexport * from './WithAdditional'\n","import { assertEx } from '@xylabs/assert'\nimport { Logger } from '@xylabs/logger'\n\nexport interface TypeCheckConfig {\n log?: boolean | Logger\n}\n\nexport type TypeCheck<T> = (obj: unknown, config?: TypeCheckConfig) => obj is T\n\nexport const AsTypeFactory = {\n // eslint-disable-next-line @typescript-eslint/ban-types\n create: <T>(typeCheck: TypeCheck<T>) => {\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n config?: TypeCheckConfig,\n ): TType | undefined\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assert: string | (() => string),\n config?: TypeCheckConfig,\n ): TType\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assertOrConfig?: string | (() => string) | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): TType | undefined {\n const noUndefined = (resolvedAssert: unknown): resolvedAssert is T => {\n return resolvedAssert !== undefined\n }\n\n if (value === undefined) {\n return undefined\n }\n\n if (value === null) {\n return undefined\n }\n\n const resolvedAssert = typeof assertOrConfig === 'object' ? undefined : assertOrConfig\n const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config\n const result = typeCheck(value, resolvedConfig) ? value : undefined\n\n return noUndefined(resolvedAssert) ?\n (assertEx(result, typeof resolvedAssert === 'function' ? resolvedAssert() : resolvedAssert) as TType)\n : (result as TType)\n }\n return func\n },\n}\n","import { AsTypeFactory, TypeCheck } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\n\nexport const AsObjectFactory = {\n create: <T extends EmptyObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type FieldType = 'string' | 'number' | 'object' | 'symbol' | 'symbol' | 'undefined' | 'null' | 'array' | 'function'\n\nexport type ObjectTypeShape = Record<string | number | symbol, FieldType>\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 { AnyObject } from './AnyObject'\nimport { isType } from './isType'\n\nexport const isObject = (value: unknown): value is AnyObject => {\n return isType(value, 'object')\n}\n","import { AnyObject } from './AnyObject'\nimport { AsObjectFactory } from './AsObjectFactory'\nimport { isObject } from './isObject'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import { Logger } from '@xylabs/logger'\n\nimport { EmptyObject } from './EmptyObject'\n\nexport type BaseParamsFields = {\n logger?: Logger\n}\n\nexport type BaseParams<TAdditionalParams extends EmptyObject | void = void> =\n TAdditionalParams extends EmptyObject ? BaseParamsFields & TAdditionalParams : BaseParamsFields\n\nexport abstract class Base<TParams extends BaseParams = BaseParams> {\n static defaultLogger?: Logger\n\n constructor(readonly params: TParams) {\n params.logger?.debug(`Base constructed [${Object(this).name}]`)\n }\n\n protected get logger() {\n return this.params?.logger ?? Base.defaultLogger\n }\n}\n","import { AnyObject } from './AnyObject'\nimport { TypeCheck, TypeCheckConfig } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\nimport { isType, ObjectTypeShape } from './isType'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends EmptyObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): TypeCheck<T> {\n return (obj, { log } = {}): obj is T => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\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 && 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 } from './isObject'\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\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 isValidJsonFieldPair = ([key, value]: [key: unknown, value: unknown]) => {\n return typeof key === 'string' && isJsonValue(value)\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","import { EmptyObject } from './EmptyObject'\nimport { StringKeyObject } from './StringKeyObject'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { JsonArray, JsonObject, JsonValue } from './JsonObject'\n\nconst toJsonArray = (value: unknown[], cycleList?: unknown[]): JsonArray => {\n return value.map((item) => toJsonValue(item, cycleList))\n}\n\nconst toJsonObject = (value: object, cycleList?: unknown[]): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toJsonValue(entry, cycleList)\n }\n return result\n}\n\nconst toJsonValue = (value: unknown, cycleList?: unknown[]): JsonValue => {\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) ? toJsonArray(value) : toJsonObject(value)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toJson = (value: unknown): JsonValue => {\n return toJsonValue(value)\n}\n","import { Promisable } from '@xylabs/promise'\n\nimport { AnyObject } from './AnyObject'\nimport { EmptyObject } from './EmptyObject'\nimport { ObjectWrapper } from './ObjectWrapper'\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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAyB;AASlB,IAAM,gBAAgB;AAAA;AAAA,EAE3B,QAAQ,CAAI,cAA4B;AAYtC,aAAS,KAEP,OACA,gBACA,QACmB;AACnB,YAAM,cAAc,CAACA,oBAAiD;AACpE,eAAOA,oBAAmB;AAAA,MAC5B;AAEA,UAAI,UAAU,QAAW;AACvB,eAAO;AAAA,MACT;AAEA,UAAI,UAAU,MAAM;AAClB,eAAO;AAAA,MACT;AAEA,YAAM,iBAAiB,OAAO,mBAAmB,WAAW,SAAY;AACxE,YAAM,iBAAiB,OAAO,mBAAmB,WAAW,iBAAiB;AAC7E,YAAM,SAAS,UAAU,OAAO,cAAc,IAAI,QAAQ;AAE1D,aAAO,YAAY,cAAc,QAC5B,wBAAS,QAAQ,OAAO,mBAAmB,aAAa,eAAe,IAAI,cAAc,IACzF;AAAA,IACP;AACA,WAAO;AAAA,EACT;AACF;;;AChDO,IAAM,kBAAkB;AAAA,EAC7B,QAAQ,CAAwB,cAA4B;AAC1D,WAAO,cAAc,OAAU,SAAS;AAAA,EAC1C;AACF;;;ACDO,IAAM,SAAS,CAAC,OAAgB,iBAA4B;AACjE,QAAM,cAAc,OAAO;AAC3B,UAAQ,cAAc;AAAA,IACpB,KAAK,SAAS;AACZ,aAAO,MAAM,QAAQ,KAAK;AAAA,IAC5B;AAAA,IACA,KAAK,QAAQ;AACX,aAAO,UAAU;AAAA,IACnB;AAAA,IACA,KAAK,aAAa;AAChB,aAAO,UAAU;AAAA,IACnB;AAAA,IACA,KAAK,UAAU;AAEb,UAAI,UAAU,MAAM;AAClB,eAAO;AAAA,MACT;AAEA,aAAO,gBAAgB,YAAY,CAAC,MAAM,QAAQ,KAAK;AAAA,IACzD;AAAA,IACA,SAAS;AACP,aAAO,gBAAgB;AAAA,IACzB;AAAA,EACF;AACF;;;AC3BO,IAAM,WAAW,CAAC,UAAuC;AAC9D,SAAO,OAAO,OAAO,QAAQ;AAC/B;;;ACDO,IAAM,eAAe,MAAM,gBAAgB,OAAkB,CAAsB,QAA2B,SAAS,GAAG,CAAC,GAAG;;;ACO9H,IAAe,OAAf,MAAe,MAA8C;AAAA,EAGlE,YAAqB,QAAiB;AAAjB;AACnB,WAAO,QAAQ,MAAM,qBAAqB,OAAO,IAAI,EAAE,IAAI,GAAG;AAAA,EAChE;AAAA,EAJA,OAAO;AAAA,EAMP,IAAc,SAAS;AACrB,WAAO,KAAK,QAAQ,UAAU,MAAK;AAAA,EACrC;AACF;;;ACdO,IAAM,kBAAN,MAA6C;AAAA,EAClD,OAAO,OAAyB,kBAAuE;AACrG,WAAO,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,MAAgB;AACtC,UAAI,CAAC,OAAO,OAAO,QAAQ,UAAU;AACnC,eAAO;AAAA,MACT;AACA;AAAA;AAAA,QAEE,OAAO,QAAQ,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,MAAM;AAElD,gBAAM,SAAS,OAAQ,IAAY,GAAG,GAAG,IAAI;AAC7C,cAAI,CAAC,UAAU,KAAK;AAClB,kBAAM,SAAS,OAAO,QAAQ,WAAW,MAAM;AAC/C,mBAAO,KAAK,kBAAkB,GAAG,KAAK,IAAI,EAAE;AAAA,UAC9C;AACA,iBAAO,CAAC;AAAA,QACV,CAAC,EAAE,WAAW;AAAA,SAEb,kBAAkB,OAAO,CAAC,MAAM,UAAU,QAAQ,MAAM,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,KAAK;AAAA;AAAA,IAErF;AAAA,EACF;AACF;;;ACvBO,IAAM,cAAc,CAAC,UAAuC;AACjE,UAAQ,OAAO,OAAO;AAAA,IACpB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,WAAW;AACd,aAAO;AAAA,IACT;AAAA,IACA,SAAS;AACP,aAAO,UAAU,QAAQ,aAAa,KAAK,KAAK,YAAY,KAAK;AAAA,IACnE;AAAA,EACF;AACF;AAEO,IAAM,cAAc,CAAC,UAAuC;AACjE,SAAO,MAAM,QAAQ,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,YAAY,IAAI,CAAC;AACzE;AAEO,IAAM,uBAAuB,CAAC,CAAC,KAAK,KAAK,MAAsC;AACpF,SAAO,OAAO,QAAQ,YAAY,YAAY,KAAK;AACrD;AAEO,IAAM,eAAe,CAAC,UAAwC;AACnE,SACE,SAAS,KAAK;AAAA,EAEd,CAAC,OAAO,QAAQ,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,qBAAqB,IAAI,CAAC;AAErE;;;AC9BO,IAAe,gBAAf,MAAkE;AAAA,EAC9D;AAAA,EACT,YAAY,KAAQ;AAClB,SAAK,MAAM;AAAA,EACb;AAAA,EACA,IAAc,eAAe;AAC3B,WAAO,KAAK;AAAA,EACd;AACF;;;ACTA,IAAM,cAAc,CAAC,OAAkB,cAAqC;AAC1E,SAAO,MAAM,IAAI,CAAC,SAAS,YAAY,MAAM,SAAS,CAAC;AACzD;AAEA,IAAM,eAAe,CAAC,OAAe,cAAsC;AACzE,QAAM,SAAqB,CAAC;AAC5B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,WAAO,GAAG,IAAI,UAAU,SAAY,gBAAgB,YAAY,OAAO,SAAS;AAAA,EAClF;AACA,SAAO;AACT;AAEA,IAAM,cAAc,CAAC,OAAgB,cAAqC;AACxE,MAAI,WAAW,SAAS,KAAK,GAAG;AAC9B,WAAO;AAAA,EACT;AACA,UAAQ,OAAO,OAAO;AAAA,IACpB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,UAAU;AACb,aAAO;AAAA,IACT;AAAA,IACA,KAAK,UAAU;AACb,UAAI,UAAU,MAAM;AAClB,eAAO;AAAA,MACT;AACA,YAAM,eAAe,aAAa,CAAC;AACnC,mBAAa,KAAK,KAAK;AACvB,aAAO,MAAM,QAAQ,KAAK,IAAI,YAAY,KAAK,IAAI,aAAa,KAAK;AAAA,IACvE;AAAA,IACA,SAAS;AACP,aAAO,IAAI,OAAO,KAAK;AAAA,IACzB;AAAA,EACF;AACF;AAEO,IAAM,SAAS,CAAC,UAA8B;AACnD,SAAO,YAAY,KAAK;AAC1B;;;AC9BO,IAAe,gBAAf,cAAwE,cAAkD;AAEjI;","names":["resolvedAssert"]}
@@ -1,15 +1,12 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/AsTypeFactory.ts
5
2
  import { assertEx } from "@xylabs/assert";
6
3
  var AsTypeFactory = {
7
4
  // eslint-disable-next-line @typescript-eslint/ban-types
8
5
  create: (typeCheck) => {
9
6
  function func(value, assertOrConfig, config) {
10
- const noUndefined = /* @__PURE__ */ __name((resolvedAssert2) => {
7
+ const noUndefined = (resolvedAssert2) => {
11
8
  return resolvedAssert2 !== void 0;
12
- }, "noUndefined");
9
+ };
13
10
  if (value === void 0) {
14
11
  return void 0;
15
12
  }
@@ -21,7 +18,6 @@ var AsTypeFactory = {
21
18
  const result = typeCheck(value, resolvedConfig) ? value : void 0;
22
19
  return noUndefined(resolvedAssert) ? assertEx(result, typeof resolvedAssert === "function" ? resolvedAssert() : resolvedAssert) : result;
23
20
  }
24
- __name(func, "func");
25
21
  return func;
26
22
  }
27
23
  };
@@ -34,7 +30,7 @@ var AsObjectFactory = {
34
30
  };
35
31
 
36
32
  // src/isType.ts
37
- var isType = /* @__PURE__ */ __name((value, expectedType) => {
33
+ var isType = (value, expectedType) => {
38
34
  const typeofValue = typeof value;
39
35
  switch (expectedType) {
40
36
  case "array": {
@@ -56,27 +52,23 @@ var isType = /* @__PURE__ */ __name((value, expectedType) => {
56
52
  return typeofValue === expectedType;
57
53
  }
58
54
  }
59
- }, "isType");
55
+ };
60
56
 
61
57
  // src/isObject.ts
62
- var isObject = /* @__PURE__ */ __name((value) => {
58
+ var isObject = (value) => {
63
59
  return isType(value, "object");
64
- }, "isObject");
60
+ };
65
61
 
66
62
  // src/asObject.ts
67
63
  var asAnyObject = (() => AsObjectFactory.create((obj) => isObject(obj)))();
68
64
 
69
65
  // src/Base.ts
70
66
  var Base = class _Base {
71
- static {
72
- __name(this, "Base");
73
- }
74
- params;
75
- static defaultLogger;
76
67
  constructor(params) {
77
68
  this.params = params;
78
69
  params.logger?.debug(`Base constructed [${Object(this).name}]`);
79
70
  }
71
+ static defaultLogger;
80
72
  get logger() {
81
73
  return this.params?.logger ?? _Base.defaultLogger;
82
74
  }
@@ -84,9 +76,6 @@ var Base = class _Base {
84
76
 
85
77
  // src/IsObjectFactory.ts
86
78
  var IsObjectFactory = class {
87
- static {
88
- __name(this, "IsObjectFactory");
89
- }
90
79
  create(shape, additionalChecks) {
91
80
  return (obj, { log } = {}) => {
92
81
  if (!obj || typeof obj !== "object") {
@@ -102,16 +91,14 @@ var IsObjectFactory = class {
102
91
  }
103
92
  return !result;
104
93
  }).length === 0 && //perform additional checks
105
- (additionalChecks?.reduce((prev, check) => prev && check(obj, {
106
- log
107
- }), true) ?? true)
94
+ (additionalChecks?.reduce((prev, check) => prev && check(obj, { log }), true) ?? true)
108
95
  );
109
96
  };
110
97
  }
111
98
  };
112
99
 
113
100
  // src/JsonObject.ts
114
- var isJsonValue = /* @__PURE__ */ __name((value) => {
101
+ var isJsonValue = (value) => {
115
102
  switch (typeof value) {
116
103
  case "string":
117
104
  case "number":
@@ -122,23 +109,20 @@ var isJsonValue = /* @__PURE__ */ __name((value) => {
122
109
  return value === null || isJsonObject(value) || isJsonArray(value);
123
110
  }
124
111
  }
125
- }, "isJsonValue");
126
- var isJsonArray = /* @__PURE__ */ __name((value) => {
112
+ };
113
+ var isJsonArray = (value) => {
127
114
  return Array.isArray(value) && !value.some((item) => !isJsonValue(item));
128
- }, "isJsonArray");
129
- var isValidJsonFieldPair = /* @__PURE__ */ __name(([key, value]) => {
115
+ };
116
+ var isValidJsonFieldPair = ([key, value]) => {
130
117
  return typeof key === "string" && isJsonValue(value);
131
- }, "isValidJsonFieldPair");
132
- var isJsonObject = /* @__PURE__ */ __name((value) => {
118
+ };
119
+ var isJsonObject = (value) => {
133
120
  return isObject(value) && //check if all keys are strings
134
121
  !Object.entries(value).some((item) => !isValidJsonFieldPair(item));
135
- }, "isJsonObject");
122
+ };
136
123
 
137
124
  // src/ObjectWrapper.ts
138
125
  var ObjectWrapper = class {
139
- static {
140
- __name(this, "ObjectWrapper");
141
- }
142
126
  obj;
143
127
  constructor(obj) {
144
128
  this.obj = obj;
@@ -149,17 +133,17 @@ var ObjectWrapper = class {
149
133
  };
150
134
 
151
135
  // src/toJson.ts
152
- var toJsonArray = /* @__PURE__ */ __name((value, cycleList) => {
136
+ var toJsonArray = (value, cycleList) => {
153
137
  return value.map((item) => toJsonValue(item, cycleList));
154
- }, "toJsonArray");
155
- var toJsonObject = /* @__PURE__ */ __name((value, cycleList) => {
138
+ };
139
+ var toJsonObject = (value, cycleList) => {
156
140
  const result = {};
157
141
  for (const [key, entry] of Object.entries(value)) {
158
142
  result[key] = value === void 0 ? "[Undefined]" : toJsonValue(entry, cycleList);
159
143
  }
160
144
  return result;
161
- }, "toJsonObject");
162
- var toJsonValue = /* @__PURE__ */ __name((value, cycleList) => {
145
+ };
146
+ var toJsonValue = (value, cycleList) => {
163
147
  if (cycleList?.includes(value)) {
164
148
  return "[Circular]";
165
149
  }
@@ -181,16 +165,13 @@ var toJsonValue = /* @__PURE__ */ __name((value, cycleList) => {
181
165
  return `[${typeof value}]`;
182
166
  }
183
167
  }
184
- }, "toJsonValue");
185
- var toJson = /* @__PURE__ */ __name((value) => {
168
+ };
169
+ var toJson = (value) => {
186
170
  return toJsonValue(value);
187
- }, "toJson");
171
+ };
188
172
 
189
173
  // src/Validator.ts
190
174
  var ValidatorBase = class extends ObjectWrapper {
191
- static {
192
- __name(this, "ValidatorBase");
193
- }
194
175
  };
195
176
  export {
196
177
  AsObjectFactory,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/isType.ts","../../src/isObject.ts","../../src/asObject.ts","../../src/Base.ts","../../src/IsObjectFactory.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/toJson.ts","../../src/Validator.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Logger } from '@xylabs/logger'\n\nexport interface TypeCheckConfig {\n log?: boolean | Logger\n}\n\nexport type TypeCheck<T> = (obj: unknown, config?: TypeCheckConfig) => obj is T\n\nexport const AsTypeFactory = {\n // eslint-disable-next-line @typescript-eslint/ban-types\n create: <T>(typeCheck: TypeCheck<T>) => {\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n config?: TypeCheckConfig,\n ): TType | undefined\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assert: string | (() => string),\n config?: TypeCheckConfig,\n ): TType\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assertOrConfig?: string | (() => string) | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): TType | undefined {\n const noUndefined = (resolvedAssert: unknown): resolvedAssert is T => {\n return resolvedAssert !== undefined\n }\n\n if (value === undefined) {\n return undefined\n }\n\n if (value === null) {\n return undefined\n }\n\n const resolvedAssert = typeof assertOrConfig === 'object' ? undefined : assertOrConfig\n const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config\n const result = typeCheck(value, resolvedConfig) ? value : undefined\n\n return noUndefined(resolvedAssert) ?\n (assertEx(result, typeof resolvedAssert === 'function' ? resolvedAssert() : resolvedAssert) as TType)\n : (result as TType)\n }\n return func\n },\n}\n","import { AsTypeFactory, TypeCheck } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\n\nexport const AsObjectFactory = {\n create: <T extends EmptyObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type FieldType = 'string' | 'number' | 'object' | 'symbol' | 'symbol' | 'undefined' | 'null' | 'array' | 'function'\n\nexport type ObjectTypeShape = Record<string | number | symbol, FieldType>\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 { AnyObject } from './AnyObject'\nimport { isType } from './isType'\n\nexport const isObject = (value: unknown): value is AnyObject => {\n return isType(value, 'object')\n}\n","import { AnyObject } from './AnyObject'\nimport { AsObjectFactory } from './AsObjectFactory'\nimport { isObject } from './isObject'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import { Logger } from '@xylabs/logger'\n\nimport { EmptyObject } from './EmptyObject'\n\nexport type BaseParamsFields = {\n logger?: Logger\n}\n\nexport type BaseParams<TAdditionalParams extends EmptyObject | void = void> =\n TAdditionalParams extends EmptyObject ? BaseParamsFields & TAdditionalParams : BaseParamsFields\n\nexport abstract class Base<TParams extends BaseParams = BaseParams> {\n static defaultLogger?: Logger\n\n constructor(readonly params: TParams) {\n params.logger?.debug(`Base constructed [${Object(this).name}]`)\n }\n\n protected get logger() {\n return this.params?.logger ?? Base.defaultLogger\n }\n}\n","import { AnyObject } from './AnyObject'\nimport { TypeCheck, TypeCheckConfig } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\nimport { isType, ObjectTypeShape } from './isType'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends EmptyObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): TypeCheck<T> {\n return (obj, { log } = {}): obj is T => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\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 && 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 } from './isObject'\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\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 isValidJsonFieldPair = ([key, value]: [key: unknown, value: unknown]) => {\n return typeof key === 'string' && isJsonValue(value)\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","import { EmptyObject } from './EmptyObject'\nimport { StringKeyObject } from './StringKeyObject'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { JsonArray, JsonObject, JsonValue } from './JsonObject'\n\nconst toJsonArray = (value: unknown[], cycleList?: unknown[]): JsonArray => {\n return value.map((item) => toJsonValue(item, cycleList))\n}\n\nconst toJsonObject = (value: object, cycleList?: unknown[]): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toJsonValue(entry, cycleList)\n }\n return result\n}\n\nconst toJsonValue = (value: unknown, cycleList?: unknown[]): JsonValue => {\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) ? toJsonArray(value) : toJsonObject(value)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toJson = (value: unknown): JsonValue => {\n return toJsonValue(value)\n}\n","import { Promisable } from '@xylabs/promise'\n\nimport { AnyObject } from './AnyObject'\nimport { EmptyObject } from './EmptyObject'\nimport { ObjectWrapper } from './ObjectWrapper'\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":["assertEx","AsTypeFactory","create","typeCheck","func","value","assertOrConfig","config","noUndefined","resolvedAssert","undefined","resolvedConfig","result","assertEx","AsObjectFactory","create","typeCheck","AsTypeFactory","isType","value","expectedType","typeofValue","Array","isArray","undefined","isObject","value","isType","asAnyObject","AsObjectFactory","create","obj","isObject","Base","defaultLogger","constructor","params","logger","debug","Object","name","IsObjectFactory","create","shape","additionalChecks","obj","log","Object","entries","filter","key","type","result","isType","logger","console","warn","length","reduce","prev","check","isJsonValue","value","isJsonObject","isJsonArray","Array","isArray","some","item","isValidJsonFieldPair","key","isObject","Object","entries","ObjectWrapper","obj","constructor","stringKeyObj","toJsonArray","value","cycleList","map","item","toJsonValue","toJsonObject","result","key","entry","Object","entries","undefined","includes","newCycleList","push","Array","isArray","toJson","ValidatorBase","ObjectWrapper"]}
1
+ {"version":3,"sources":["../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/isType.ts","../../src/isObject.ts","../../src/asObject.ts","../../src/Base.ts","../../src/IsObjectFactory.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/toJson.ts","../../src/Validator.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Logger } from '@xylabs/logger'\n\nexport interface TypeCheckConfig {\n log?: boolean | Logger\n}\n\nexport type TypeCheck<T> = (obj: unknown, config?: TypeCheckConfig) => obj is T\n\nexport const AsTypeFactory = {\n // eslint-disable-next-line @typescript-eslint/ban-types\n create: <T>(typeCheck: TypeCheck<T>) => {\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n config?: TypeCheckConfig,\n ): TType | undefined\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assert: string | (() => string),\n config?: TypeCheckConfig,\n ): TType\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assertOrConfig?: string | (() => string) | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): TType | undefined {\n const noUndefined = (resolvedAssert: unknown): resolvedAssert is T => {\n return resolvedAssert !== undefined\n }\n\n if (value === undefined) {\n return undefined\n }\n\n if (value === null) {\n return undefined\n }\n\n const resolvedAssert = typeof assertOrConfig === 'object' ? undefined : assertOrConfig\n const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config\n const result = typeCheck(value, resolvedConfig) ? value : undefined\n\n return noUndefined(resolvedAssert) ?\n (assertEx(result, typeof resolvedAssert === 'function' ? resolvedAssert() : resolvedAssert) as TType)\n : (result as TType)\n }\n return func\n },\n}\n","import { AsTypeFactory, TypeCheck } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\n\nexport const AsObjectFactory = {\n create: <T extends EmptyObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type FieldType = 'string' | 'number' | 'object' | 'symbol' | 'symbol' | 'undefined' | 'null' | 'array' | 'function'\n\nexport type ObjectTypeShape = Record<string | number | symbol, FieldType>\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 { AnyObject } from './AnyObject'\nimport { isType } from './isType'\n\nexport const isObject = (value: unknown): value is AnyObject => {\n return isType(value, 'object')\n}\n","import { AnyObject } from './AnyObject'\nimport { AsObjectFactory } from './AsObjectFactory'\nimport { isObject } from './isObject'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import { Logger } from '@xylabs/logger'\n\nimport { EmptyObject } from './EmptyObject'\n\nexport type BaseParamsFields = {\n logger?: Logger\n}\n\nexport type BaseParams<TAdditionalParams extends EmptyObject | void = void> =\n TAdditionalParams extends EmptyObject ? BaseParamsFields & TAdditionalParams : BaseParamsFields\n\nexport abstract class Base<TParams extends BaseParams = BaseParams> {\n static defaultLogger?: Logger\n\n constructor(readonly params: TParams) {\n params.logger?.debug(`Base constructed [${Object(this).name}]`)\n }\n\n protected get logger() {\n return this.params?.logger ?? Base.defaultLogger\n }\n}\n","import { AnyObject } from './AnyObject'\nimport { TypeCheck, TypeCheckConfig } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\nimport { isType, ObjectTypeShape } from './isType'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends EmptyObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): TypeCheck<T> {\n return (obj, { log } = {}): obj is T => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\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 && 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 } from './isObject'\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\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 isValidJsonFieldPair = ([key, value]: [key: unknown, value: unknown]) => {\n return typeof key === 'string' && isJsonValue(value)\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","import { EmptyObject } from './EmptyObject'\nimport { StringKeyObject } from './StringKeyObject'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { JsonArray, JsonObject, JsonValue } from './JsonObject'\n\nconst toJsonArray = (value: unknown[], cycleList?: unknown[]): JsonArray => {\n return value.map((item) => toJsonValue(item, cycleList))\n}\n\nconst toJsonObject = (value: object, cycleList?: unknown[]): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toJsonValue(entry, cycleList)\n }\n return result\n}\n\nconst toJsonValue = (value: unknown, cycleList?: unknown[]): JsonValue => {\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) ? toJsonArray(value) : toJsonObject(value)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toJson = (value: unknown): JsonValue => {\n return toJsonValue(value)\n}\n","import { Promisable } from '@xylabs/promise'\n\nimport { AnyObject } from './AnyObject'\nimport { EmptyObject } from './EmptyObject'\nimport { ObjectWrapper } from './ObjectWrapper'\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":["resolvedAssert"]}
@@ -3,8 +3,6 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
10
8
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -18,10 +16,6 @@ var __copyProps = (to, from, except, desc) => {
18
16
  return to;
19
17
  };
20
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
- var __publicField = (obj, key, value) => {
22
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
23
- return value;
24
- };
25
19
 
26
20
  // src/index.ts
27
21
  var src_exports = {};
@@ -49,9 +43,9 @@ var AsTypeFactory = {
49
43
  // eslint-disable-next-line @typescript-eslint/ban-types
50
44
  create: (typeCheck) => {
51
45
  function func(value, assertOrConfig, config) {
52
- const noUndefined = /* @__PURE__ */ __name((resolvedAssert2) => {
46
+ const noUndefined = (resolvedAssert2) => {
53
47
  return resolvedAssert2 !== void 0;
54
- }, "noUndefined");
48
+ };
55
49
  if (value === void 0) {
56
50
  return void 0;
57
51
  }
@@ -63,7 +57,6 @@ var AsTypeFactory = {
63
57
  const result = typeCheck(value, resolvedConfig) ? value : void 0;
64
58
  return noUndefined(resolvedAssert) ? (0, import_assert.assertEx)(result, typeof resolvedAssert === "function" ? resolvedAssert() : resolvedAssert) : result;
65
59
  }
66
- __name(func, "func");
67
60
  return func;
68
61
  }
69
62
  };
@@ -76,7 +69,7 @@ var AsObjectFactory = {
76
69
  };
77
70
 
78
71
  // src/isType.ts
79
- var isType = /* @__PURE__ */ __name((value, expectedType) => {
72
+ var isType = (value, expectedType) => {
80
73
  const typeofValue = typeof value;
81
74
  switch (expectedType) {
82
75
  case "array": {
@@ -98,35 +91,32 @@ var isType = /* @__PURE__ */ __name((value, expectedType) => {
98
91
  return typeofValue === expectedType;
99
92
  }
100
93
  }
101
- }, "isType");
94
+ };
102
95
 
103
96
  // src/isObject.ts
104
- var isObject = /* @__PURE__ */ __name((value) => {
97
+ var isObject = (value) => {
105
98
  return isType(value, "object");
106
- }, "isObject");
99
+ };
107
100
 
108
101
  // src/asObject.ts
109
102
  var asAnyObject = (() => AsObjectFactory.create((obj) => isObject(obj)))();
110
103
 
111
104
  // src/Base.ts
112
- var _Base = class _Base {
113
- params;
105
+ var Base = class _Base {
114
106
  constructor(params) {
115
- var _a;
116
107
  this.params = params;
108
+ var _a;
117
109
  (_a = params.logger) == null ? void 0 : _a.debug(`Base constructed [${Object(this).name}]`);
118
110
  }
111
+ static defaultLogger;
119
112
  get logger() {
120
113
  var _a;
121
114
  return ((_a = this.params) == null ? void 0 : _a.logger) ?? _Base.defaultLogger;
122
115
  }
123
116
  };
124
- __name(_Base, "Base");
125
- __publicField(_Base, "defaultLogger");
126
- var Base = _Base;
127
117
 
128
118
  // src/IsObjectFactory.ts
129
- var _IsObjectFactory = class _IsObjectFactory {
119
+ var IsObjectFactory = class {
130
120
  create(shape, additionalChecks) {
131
121
  return (obj, { log } = {}) => {
132
122
  if (!obj || typeof obj !== "object") {
@@ -142,18 +132,14 @@ var _IsObjectFactory = class _IsObjectFactory {
142
132
  }
143
133
  return !result;
144
134
  }).length === 0 && //perform additional checks
145
- ((additionalChecks == null ? void 0 : additionalChecks.reduce((prev, check) => prev && check(obj, {
146
- log
147
- }), true)) ?? true)
135
+ ((additionalChecks == null ? void 0 : additionalChecks.reduce((prev, check) => prev && check(obj, { log }), true)) ?? true)
148
136
  );
149
137
  };
150
138
  }
151
139
  };
152
- __name(_IsObjectFactory, "IsObjectFactory");
153
- var IsObjectFactory = _IsObjectFactory;
154
140
 
155
141
  // src/JsonObject.ts
156
- var isJsonValue = /* @__PURE__ */ __name((value) => {
142
+ var isJsonValue = (value) => {
157
143
  switch (typeof value) {
158
144
  case "string":
159
145
  case "number":
@@ -164,20 +150,20 @@ var isJsonValue = /* @__PURE__ */ __name((value) => {
164
150
  return value === null || isJsonObject(value) || isJsonArray(value);
165
151
  }
166
152
  }
167
- }, "isJsonValue");
168
- var isJsonArray = /* @__PURE__ */ __name((value) => {
153
+ };
154
+ var isJsonArray = (value) => {
169
155
  return Array.isArray(value) && !value.some((item) => !isJsonValue(item));
170
- }, "isJsonArray");
171
- var isValidJsonFieldPair = /* @__PURE__ */ __name(([key, value]) => {
156
+ };
157
+ var isValidJsonFieldPair = ([key, value]) => {
172
158
  return typeof key === "string" && isJsonValue(value);
173
- }, "isValidJsonFieldPair");
174
- var isJsonObject = /* @__PURE__ */ __name((value) => {
159
+ };
160
+ var isJsonObject = (value) => {
175
161
  return isObject(value) && //check if all keys are strings
176
162
  !Object.entries(value).some((item) => !isValidJsonFieldPair(item));
177
- }, "isJsonObject");
163
+ };
178
164
 
179
165
  // src/ObjectWrapper.ts
180
- var _ObjectWrapper = class _ObjectWrapper {
166
+ var ObjectWrapper = class {
181
167
  obj;
182
168
  constructor(obj) {
183
169
  this.obj = obj;
@@ -186,21 +172,19 @@ var _ObjectWrapper = class _ObjectWrapper {
186
172
  return this.obj;
187
173
  }
188
174
  };
189
- __name(_ObjectWrapper, "ObjectWrapper");
190
- var ObjectWrapper = _ObjectWrapper;
191
175
 
192
176
  // src/toJson.ts
193
- var toJsonArray = /* @__PURE__ */ __name((value, cycleList) => {
177
+ var toJsonArray = (value, cycleList) => {
194
178
  return value.map((item) => toJsonValue(item, cycleList));
195
- }, "toJsonArray");
196
- var toJsonObject = /* @__PURE__ */ __name((value, cycleList) => {
179
+ };
180
+ var toJsonObject = (value, cycleList) => {
197
181
  const result = {};
198
182
  for (const [key, entry] of Object.entries(value)) {
199
183
  result[key] = value === void 0 ? "[Undefined]" : toJsonValue(entry, cycleList);
200
184
  }
201
185
  return result;
202
- }, "toJsonObject");
203
- var toJsonValue = /* @__PURE__ */ __name((value, cycleList) => {
186
+ };
187
+ var toJsonValue = (value, cycleList) => {
204
188
  if (cycleList == null ? void 0 : cycleList.includes(value)) {
205
189
  return "[Circular]";
206
190
  }
@@ -222,16 +206,14 @@ var toJsonValue = /* @__PURE__ */ __name((value, cycleList) => {
222
206
  return `[${typeof value}]`;
223
207
  }
224
208
  }
225
- }, "toJsonValue");
226
- var toJson = /* @__PURE__ */ __name((value) => {
209
+ };
210
+ var toJson = (value) => {
227
211
  return toJsonValue(value);
228
- }, "toJson");
212
+ };
229
213
 
230
214
  // src/Validator.ts
231
- var _ValidatorBase = class _ValidatorBase extends ObjectWrapper {
215
+ var ValidatorBase = class extends ObjectWrapper {
232
216
  };
233
- __name(_ValidatorBase, "ValidatorBase");
234
- var ValidatorBase = _ValidatorBase;
235
217
  // Annotate the CommonJS export names for ESM import in node:
236
218
  0 && (module.exports = {
237
219
  AsObjectFactory,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/isType.ts","../../src/isObject.ts","../../src/asObject.ts","../../src/Base.ts","../../src/IsObjectFactory.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/toJson.ts","../../src/Validator.ts"],"sourcesContent":["export * from './AnyObject'\nexport * from './asObject'\nexport * from './AsObjectFactory'\nexport * from './AsTypeFactory'\nexport * from './Base'\nexport * from './EmptyObject'\nexport * from './isObject'\nexport * from './IsObjectFactory'\nexport * from './isType'\nexport * from './JsonObject'\nexport * from './ObjectWrapper'\nexport * from './Override'\nexport * from './PartialRecord'\nexport * from './StringKeyObject'\nexport * from './toJson'\nexport * from './Validator'\nexport * from './WithAdditional'\n","import { assertEx } from '@xylabs/assert'\nimport { Logger } from '@xylabs/logger'\n\nexport interface TypeCheckConfig {\n log?: boolean | Logger\n}\n\nexport type TypeCheck<T> = (obj: unknown, config?: TypeCheckConfig) => obj is T\n\nexport const AsTypeFactory = {\n // eslint-disable-next-line @typescript-eslint/ban-types\n create: <T>(typeCheck: TypeCheck<T>) => {\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n config?: TypeCheckConfig,\n ): TType | undefined\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assert: string | (() => string),\n config?: TypeCheckConfig,\n ): TType\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assertOrConfig?: string | (() => string) | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): TType | undefined {\n const noUndefined = (resolvedAssert: unknown): resolvedAssert is T => {\n return resolvedAssert !== undefined\n }\n\n if (value === undefined) {\n return undefined\n }\n\n if (value === null) {\n return undefined\n }\n\n const resolvedAssert = typeof assertOrConfig === 'object' ? undefined : assertOrConfig\n const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config\n const result = typeCheck(value, resolvedConfig) ? value : undefined\n\n return noUndefined(resolvedAssert) ?\n (assertEx(result, typeof resolvedAssert === 'function' ? resolvedAssert() : resolvedAssert) as TType)\n : (result as TType)\n }\n return func\n },\n}\n","import { AsTypeFactory, TypeCheck } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\n\nexport const AsObjectFactory = {\n create: <T extends EmptyObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type FieldType = 'string' | 'number' | 'object' | 'symbol' | 'symbol' | 'undefined' | 'null' | 'array' | 'function'\n\nexport type ObjectTypeShape = Record<string | number | symbol, FieldType>\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 { AnyObject } from './AnyObject'\nimport { isType } from './isType'\n\nexport const isObject = (value: unknown): value is AnyObject => {\n return isType(value, 'object')\n}\n","import { AnyObject } from './AnyObject'\nimport { AsObjectFactory } from './AsObjectFactory'\nimport { isObject } from './isObject'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import { Logger } from '@xylabs/logger'\n\nimport { EmptyObject } from './EmptyObject'\n\nexport type BaseParamsFields = {\n logger?: Logger\n}\n\nexport type BaseParams<TAdditionalParams extends EmptyObject | void = void> =\n TAdditionalParams extends EmptyObject ? BaseParamsFields & TAdditionalParams : BaseParamsFields\n\nexport abstract class Base<TParams extends BaseParams = BaseParams> {\n static defaultLogger?: Logger\n\n constructor(readonly params: TParams) {\n params.logger?.debug(`Base constructed [${Object(this).name}]`)\n }\n\n protected get logger() {\n return this.params?.logger ?? Base.defaultLogger\n }\n}\n","import { AnyObject } from './AnyObject'\nimport { TypeCheck, TypeCheckConfig } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\nimport { isType, ObjectTypeShape } from './isType'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends EmptyObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): TypeCheck<T> {\n return (obj, { log } = {}): obj is T => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\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 && 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 } from './isObject'\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\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 isValidJsonFieldPair = ([key, value]: [key: unknown, value: unknown]) => {\n return typeof key === 'string' && isJsonValue(value)\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","import { EmptyObject } from './EmptyObject'\nimport { StringKeyObject } from './StringKeyObject'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { JsonArray, JsonObject, JsonValue } from './JsonObject'\n\nconst toJsonArray = (value: unknown[], cycleList?: unknown[]): JsonArray => {\n return value.map((item) => toJsonValue(item, cycleList))\n}\n\nconst toJsonObject = (value: object, cycleList?: unknown[]): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toJsonValue(entry, cycleList)\n }\n return result\n}\n\nconst toJsonValue = (value: unknown, cycleList?: unknown[]): JsonValue => {\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) ? toJsonArray(value) : toJsonObject(value)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toJson = (value: unknown): JsonValue => {\n return toJsonValue(value)\n}\n","import { Promisable } from '@xylabs/promise'\n\nimport { AnyObject } from './AnyObject'\nimport { EmptyObject } from './EmptyObject'\nimport { ObjectWrapper } from './ObjectWrapper'\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":["AsTypeFactory","create","typeCheck","func","value","assertOrConfig","config","noUndefined","resolvedAssert","undefined","resolvedConfig","result","assertEx","AsObjectFactory","create","typeCheck","AsTypeFactory","isType","value","expectedType","typeofValue","Array","isArray","undefined","isObject","value","isType","asAnyObject","AsObjectFactory","create","obj","isObject","Base","constructor","params","logger","debug","Object","name","defaultLogger","IsObjectFactory","create","shape","additionalChecks","obj","log","Object","entries","filter","key","type","result","isType","logger","console","warn","length","reduce","prev","check","isJsonValue","value","isJsonObject","isJsonArray","Array","isArray","some","item","isValidJsonFieldPair","key","isObject","Object","entries","ObjectWrapper","obj","constructor","stringKeyObj","toJsonArray","value","cycleList","map","item","toJsonValue","toJsonObject","result","key","entry","Object","entries","undefined","includes","newCycleList","push","Array","isArray","toJson","ValidatorBase","ObjectWrapper"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/isType.ts","../../src/isObject.ts","../../src/asObject.ts","../../src/Base.ts","../../src/IsObjectFactory.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/toJson.ts","../../src/Validator.ts"],"sourcesContent":["export * from './AnyObject'\nexport * from './asObject'\nexport * from './AsObjectFactory'\nexport * from './AsTypeFactory'\nexport * from './Base'\nexport * from './EmptyObject'\nexport * from './isObject'\nexport * from './IsObjectFactory'\nexport * from './isType'\nexport * from './JsonObject'\nexport * from './ObjectWrapper'\nexport * from './Override'\nexport * from './PartialRecord'\nexport * from './StringKeyObject'\nexport * from './toJson'\nexport * from './Validator'\nexport * from './WithAdditional'\n","import { assertEx } from '@xylabs/assert'\nimport { Logger } from '@xylabs/logger'\n\nexport interface TypeCheckConfig {\n log?: boolean | Logger\n}\n\nexport type TypeCheck<T> = (obj: unknown, config?: TypeCheckConfig) => obj is T\n\nexport const AsTypeFactory = {\n // eslint-disable-next-line @typescript-eslint/ban-types\n create: <T>(typeCheck: TypeCheck<T>) => {\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n config?: TypeCheckConfig,\n ): TType | undefined\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assert: string | (() => string),\n config?: TypeCheckConfig,\n ): TType\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assertOrConfig?: string | (() => string) | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): TType | undefined {\n const noUndefined = (resolvedAssert: unknown): resolvedAssert is T => {\n return resolvedAssert !== undefined\n }\n\n if (value === undefined) {\n return undefined\n }\n\n if (value === null) {\n return undefined\n }\n\n const resolvedAssert = typeof assertOrConfig === 'object' ? undefined : assertOrConfig\n const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config\n const result = typeCheck(value, resolvedConfig) ? value : undefined\n\n return noUndefined(resolvedAssert) ?\n (assertEx(result, typeof resolvedAssert === 'function' ? resolvedAssert() : resolvedAssert) as TType)\n : (result as TType)\n }\n return func\n },\n}\n","import { AsTypeFactory, TypeCheck } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\n\nexport const AsObjectFactory = {\n create: <T extends EmptyObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type FieldType = 'string' | 'number' | 'object' | 'symbol' | 'symbol' | 'undefined' | 'null' | 'array' | 'function'\n\nexport type ObjectTypeShape = Record<string | number | symbol, FieldType>\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 { AnyObject } from './AnyObject'\nimport { isType } from './isType'\n\nexport const isObject = (value: unknown): value is AnyObject => {\n return isType(value, 'object')\n}\n","import { AnyObject } from './AnyObject'\nimport { AsObjectFactory } from './AsObjectFactory'\nimport { isObject } from './isObject'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import { Logger } from '@xylabs/logger'\n\nimport { EmptyObject } from './EmptyObject'\n\nexport type BaseParamsFields = {\n logger?: Logger\n}\n\nexport type BaseParams<TAdditionalParams extends EmptyObject | void = void> =\n TAdditionalParams extends EmptyObject ? BaseParamsFields & TAdditionalParams : BaseParamsFields\n\nexport abstract class Base<TParams extends BaseParams = BaseParams> {\n static defaultLogger?: Logger\n\n constructor(readonly params: TParams) {\n params.logger?.debug(`Base constructed [${Object(this).name}]`)\n }\n\n protected get logger() {\n return this.params?.logger ?? Base.defaultLogger\n }\n}\n","import { AnyObject } from './AnyObject'\nimport { TypeCheck, TypeCheckConfig } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\nimport { isType, ObjectTypeShape } from './isType'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends EmptyObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): TypeCheck<T> {\n return (obj, { log } = {}): obj is T => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\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 && 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 } from './isObject'\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\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 isValidJsonFieldPair = ([key, value]: [key: unknown, value: unknown]) => {\n return typeof key === 'string' && isJsonValue(value)\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","import { EmptyObject } from './EmptyObject'\nimport { StringKeyObject } from './StringKeyObject'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { JsonArray, JsonObject, JsonValue } from './JsonObject'\n\nconst toJsonArray = (value: unknown[], cycleList?: unknown[]): JsonArray => {\n return value.map((item) => toJsonValue(item, cycleList))\n}\n\nconst toJsonObject = (value: object, cycleList?: unknown[]): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toJsonValue(entry, cycleList)\n }\n return result\n}\n\nconst toJsonValue = (value: unknown, cycleList?: unknown[]): JsonValue => {\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) ? toJsonArray(value) : toJsonObject(value)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toJson = (value: unknown): JsonValue => {\n return toJsonValue(value)\n}\n","import { Promisable } from '@xylabs/promise'\n\nimport { AnyObject } from './AnyObject'\nimport { EmptyObject } from './EmptyObject'\nimport { ObjectWrapper } from './ObjectWrapper'\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":["resolvedAssert"]}
@@ -1,20 +1,12 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
- var __publicField = (obj, key, value) => {
5
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
- return value;
7
- };
8
-
9
1
  // src/AsTypeFactory.ts
10
2
  import { assertEx } from "@xylabs/assert";
11
3
  var AsTypeFactory = {
12
4
  // eslint-disable-next-line @typescript-eslint/ban-types
13
5
  create: (typeCheck) => {
14
6
  function func(value, assertOrConfig, config) {
15
- const noUndefined = /* @__PURE__ */ __name((resolvedAssert2) => {
7
+ const noUndefined = (resolvedAssert2) => {
16
8
  return resolvedAssert2 !== void 0;
17
- }, "noUndefined");
9
+ };
18
10
  if (value === void 0) {
19
11
  return void 0;
20
12
  }
@@ -26,7 +18,6 @@ var AsTypeFactory = {
26
18
  const result = typeCheck(value, resolvedConfig) ? value : void 0;
27
19
  return noUndefined(resolvedAssert) ? assertEx(result, typeof resolvedAssert === "function" ? resolvedAssert() : resolvedAssert) : result;
28
20
  }
29
- __name(func, "func");
30
21
  return func;
31
22
  }
32
23
  };
@@ -39,7 +30,7 @@ var AsObjectFactory = {
39
30
  };
40
31
 
41
32
  // src/isType.ts
42
- var isType = /* @__PURE__ */ __name((value, expectedType) => {
33
+ var isType = (value, expectedType) => {
43
34
  const typeofValue = typeof value;
44
35
  switch (expectedType) {
45
36
  case "array": {
@@ -61,35 +52,32 @@ var isType = /* @__PURE__ */ __name((value, expectedType) => {
61
52
  return typeofValue === expectedType;
62
53
  }
63
54
  }
64
- }, "isType");
55
+ };
65
56
 
66
57
  // src/isObject.ts
67
- var isObject = /* @__PURE__ */ __name((value) => {
58
+ var isObject = (value) => {
68
59
  return isType(value, "object");
69
- }, "isObject");
60
+ };
70
61
 
71
62
  // src/asObject.ts
72
63
  var asAnyObject = (() => AsObjectFactory.create((obj) => isObject(obj)))();
73
64
 
74
65
  // src/Base.ts
75
- var _Base = class _Base {
76
- params;
66
+ var Base = class _Base {
77
67
  constructor(params) {
78
- var _a;
79
68
  this.params = params;
69
+ var _a;
80
70
  (_a = params.logger) == null ? void 0 : _a.debug(`Base constructed [${Object(this).name}]`);
81
71
  }
72
+ static defaultLogger;
82
73
  get logger() {
83
74
  var _a;
84
75
  return ((_a = this.params) == null ? void 0 : _a.logger) ?? _Base.defaultLogger;
85
76
  }
86
77
  };
87
- __name(_Base, "Base");
88
- __publicField(_Base, "defaultLogger");
89
- var Base = _Base;
90
78
 
91
79
  // src/IsObjectFactory.ts
92
- var _IsObjectFactory = class _IsObjectFactory {
80
+ var IsObjectFactory = class {
93
81
  create(shape, additionalChecks) {
94
82
  return (obj, { log } = {}) => {
95
83
  if (!obj || typeof obj !== "object") {
@@ -105,18 +93,14 @@ var _IsObjectFactory = class _IsObjectFactory {
105
93
  }
106
94
  return !result;
107
95
  }).length === 0 && //perform additional checks
108
- ((additionalChecks == null ? void 0 : additionalChecks.reduce((prev, check) => prev && check(obj, {
109
- log
110
- }), true)) ?? true)
96
+ ((additionalChecks == null ? void 0 : additionalChecks.reduce((prev, check) => prev && check(obj, { log }), true)) ?? true)
111
97
  );
112
98
  };
113
99
  }
114
100
  };
115
- __name(_IsObjectFactory, "IsObjectFactory");
116
- var IsObjectFactory = _IsObjectFactory;
117
101
 
118
102
  // src/JsonObject.ts
119
- var isJsonValue = /* @__PURE__ */ __name((value) => {
103
+ var isJsonValue = (value) => {
120
104
  switch (typeof value) {
121
105
  case "string":
122
106
  case "number":
@@ -127,20 +111,20 @@ var isJsonValue = /* @__PURE__ */ __name((value) => {
127
111
  return value === null || isJsonObject(value) || isJsonArray(value);
128
112
  }
129
113
  }
130
- }, "isJsonValue");
131
- var isJsonArray = /* @__PURE__ */ __name((value) => {
114
+ };
115
+ var isJsonArray = (value) => {
132
116
  return Array.isArray(value) && !value.some((item) => !isJsonValue(item));
133
- }, "isJsonArray");
134
- var isValidJsonFieldPair = /* @__PURE__ */ __name(([key, value]) => {
117
+ };
118
+ var isValidJsonFieldPair = ([key, value]) => {
135
119
  return typeof key === "string" && isJsonValue(value);
136
- }, "isValidJsonFieldPair");
137
- var isJsonObject = /* @__PURE__ */ __name((value) => {
120
+ };
121
+ var isJsonObject = (value) => {
138
122
  return isObject(value) && //check if all keys are strings
139
123
  !Object.entries(value).some((item) => !isValidJsonFieldPair(item));
140
- }, "isJsonObject");
124
+ };
141
125
 
142
126
  // src/ObjectWrapper.ts
143
- var _ObjectWrapper = class _ObjectWrapper {
127
+ var ObjectWrapper = class {
144
128
  obj;
145
129
  constructor(obj) {
146
130
  this.obj = obj;
@@ -149,21 +133,19 @@ var _ObjectWrapper = class _ObjectWrapper {
149
133
  return this.obj;
150
134
  }
151
135
  };
152
- __name(_ObjectWrapper, "ObjectWrapper");
153
- var ObjectWrapper = _ObjectWrapper;
154
136
 
155
137
  // src/toJson.ts
156
- var toJsonArray = /* @__PURE__ */ __name((value, cycleList) => {
138
+ var toJsonArray = (value, cycleList) => {
157
139
  return value.map((item) => toJsonValue(item, cycleList));
158
- }, "toJsonArray");
159
- var toJsonObject = /* @__PURE__ */ __name((value, cycleList) => {
140
+ };
141
+ var toJsonObject = (value, cycleList) => {
160
142
  const result = {};
161
143
  for (const [key, entry] of Object.entries(value)) {
162
144
  result[key] = value === void 0 ? "[Undefined]" : toJsonValue(entry, cycleList);
163
145
  }
164
146
  return result;
165
- }, "toJsonObject");
166
- var toJsonValue = /* @__PURE__ */ __name((value, cycleList) => {
147
+ };
148
+ var toJsonValue = (value, cycleList) => {
167
149
  if (cycleList == null ? void 0 : cycleList.includes(value)) {
168
150
  return "[Circular]";
169
151
  }
@@ -185,16 +167,14 @@ var toJsonValue = /* @__PURE__ */ __name((value, cycleList) => {
185
167
  return `[${typeof value}]`;
186
168
  }
187
169
  }
188
- }, "toJsonValue");
189
- var toJson = /* @__PURE__ */ __name((value) => {
170
+ };
171
+ var toJson = (value) => {
190
172
  return toJsonValue(value);
191
- }, "toJson");
173
+ };
192
174
 
193
175
  // src/Validator.ts
194
- var _ValidatorBase = class _ValidatorBase extends ObjectWrapper {
176
+ var ValidatorBase = class extends ObjectWrapper {
195
177
  };
196
- __name(_ValidatorBase, "ValidatorBase");
197
- var ValidatorBase = _ValidatorBase;
198
178
  export {
199
179
  AsObjectFactory,
200
180
  AsTypeFactory,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/isType.ts","../../src/isObject.ts","../../src/asObject.ts","../../src/Base.ts","../../src/IsObjectFactory.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/toJson.ts","../../src/Validator.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Logger } from '@xylabs/logger'\n\nexport interface TypeCheckConfig {\n log?: boolean | Logger\n}\n\nexport type TypeCheck<T> = (obj: unknown, config?: TypeCheckConfig) => obj is T\n\nexport const AsTypeFactory = {\n // eslint-disable-next-line @typescript-eslint/ban-types\n create: <T>(typeCheck: TypeCheck<T>) => {\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n config?: TypeCheckConfig,\n ): TType | undefined\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assert: string | (() => string),\n config?: TypeCheckConfig,\n ): TType\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assertOrConfig?: string | (() => string) | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): TType | undefined {\n const noUndefined = (resolvedAssert: unknown): resolvedAssert is T => {\n return resolvedAssert !== undefined\n }\n\n if (value === undefined) {\n return undefined\n }\n\n if (value === null) {\n return undefined\n }\n\n const resolvedAssert = typeof assertOrConfig === 'object' ? undefined : assertOrConfig\n const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config\n const result = typeCheck(value, resolvedConfig) ? value : undefined\n\n return noUndefined(resolvedAssert) ?\n (assertEx(result, typeof resolvedAssert === 'function' ? resolvedAssert() : resolvedAssert) as TType)\n : (result as TType)\n }\n return func\n },\n}\n","import { AsTypeFactory, TypeCheck } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\n\nexport const AsObjectFactory = {\n create: <T extends EmptyObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type FieldType = 'string' | 'number' | 'object' | 'symbol' | 'symbol' | 'undefined' | 'null' | 'array' | 'function'\n\nexport type ObjectTypeShape = Record<string | number | symbol, FieldType>\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 { AnyObject } from './AnyObject'\nimport { isType } from './isType'\n\nexport const isObject = (value: unknown): value is AnyObject => {\n return isType(value, 'object')\n}\n","import { AnyObject } from './AnyObject'\nimport { AsObjectFactory } from './AsObjectFactory'\nimport { isObject } from './isObject'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import { Logger } from '@xylabs/logger'\n\nimport { EmptyObject } from './EmptyObject'\n\nexport type BaseParamsFields = {\n logger?: Logger\n}\n\nexport type BaseParams<TAdditionalParams extends EmptyObject | void = void> =\n TAdditionalParams extends EmptyObject ? BaseParamsFields & TAdditionalParams : BaseParamsFields\n\nexport abstract class Base<TParams extends BaseParams = BaseParams> {\n static defaultLogger?: Logger\n\n constructor(readonly params: TParams) {\n params.logger?.debug(`Base constructed [${Object(this).name}]`)\n }\n\n protected get logger() {\n return this.params?.logger ?? Base.defaultLogger\n }\n}\n","import { AnyObject } from './AnyObject'\nimport { TypeCheck, TypeCheckConfig } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\nimport { isType, ObjectTypeShape } from './isType'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends EmptyObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): TypeCheck<T> {\n return (obj, { log } = {}): obj is T => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\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 && 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 } from './isObject'\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\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 isValidJsonFieldPair = ([key, value]: [key: unknown, value: unknown]) => {\n return typeof key === 'string' && isJsonValue(value)\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","import { EmptyObject } from './EmptyObject'\nimport { StringKeyObject } from './StringKeyObject'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { JsonArray, JsonObject, JsonValue } from './JsonObject'\n\nconst toJsonArray = (value: unknown[], cycleList?: unknown[]): JsonArray => {\n return value.map((item) => toJsonValue(item, cycleList))\n}\n\nconst toJsonObject = (value: object, cycleList?: unknown[]): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toJsonValue(entry, cycleList)\n }\n return result\n}\n\nconst toJsonValue = (value: unknown, cycleList?: unknown[]): JsonValue => {\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) ? toJsonArray(value) : toJsonObject(value)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toJson = (value: unknown): JsonValue => {\n return toJsonValue(value)\n}\n","import { Promisable } from '@xylabs/promise'\n\nimport { AnyObject } from './AnyObject'\nimport { EmptyObject } from './EmptyObject'\nimport { ObjectWrapper } from './ObjectWrapper'\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":["assertEx","AsTypeFactory","create","typeCheck","func","value","assertOrConfig","config","noUndefined","resolvedAssert","undefined","resolvedConfig","result","assertEx","AsObjectFactory","create","typeCheck","AsTypeFactory","isType","value","expectedType","typeofValue","Array","isArray","undefined","isObject","value","isType","asAnyObject","AsObjectFactory","create","obj","isObject","Base","constructor","params","logger","debug","Object","name","defaultLogger","IsObjectFactory","create","shape","additionalChecks","obj","log","Object","entries","filter","key","type","result","isType","logger","console","warn","length","reduce","prev","check","isJsonValue","value","isJsonObject","isJsonArray","Array","isArray","some","item","isValidJsonFieldPair","key","isObject","Object","entries","ObjectWrapper","obj","constructor","stringKeyObj","toJsonArray","value","cycleList","map","item","toJsonValue","toJsonObject","result","key","entry","Object","entries","undefined","includes","newCycleList","push","Array","isArray","toJson","ValidatorBase","ObjectWrapper"]}
1
+ {"version":3,"sources":["../../src/AsTypeFactory.ts","../../src/AsObjectFactory.ts","../../src/isType.ts","../../src/isObject.ts","../../src/asObject.ts","../../src/Base.ts","../../src/IsObjectFactory.ts","../../src/JsonObject.ts","../../src/ObjectWrapper.ts","../../src/toJson.ts","../../src/Validator.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Logger } from '@xylabs/logger'\n\nexport interface TypeCheckConfig {\n log?: boolean | Logger\n}\n\nexport type TypeCheck<T> = (obj: unknown, config?: TypeCheckConfig) => obj is T\n\nexport const AsTypeFactory = {\n // eslint-disable-next-line @typescript-eslint/ban-types\n create: <T>(typeCheck: TypeCheck<T>) => {\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n config?: TypeCheckConfig,\n ): TType | undefined\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assert: string | (() => string),\n config?: TypeCheckConfig,\n ): TType\n function func<TType extends T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: unknown,\n assertOrConfig?: string | (() => string) | TypeCheckConfig,\n config?: TypeCheckConfig,\n ): TType | undefined {\n const noUndefined = (resolvedAssert: unknown): resolvedAssert is T => {\n return resolvedAssert !== undefined\n }\n\n if (value === undefined) {\n return undefined\n }\n\n if (value === null) {\n return undefined\n }\n\n const resolvedAssert = typeof assertOrConfig === 'object' ? undefined : assertOrConfig\n const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config\n const result = typeCheck(value, resolvedConfig) ? value : undefined\n\n return noUndefined(resolvedAssert) ?\n (assertEx(result, typeof resolvedAssert === 'function' ? resolvedAssert() : resolvedAssert) as TType)\n : (result as TType)\n }\n return func\n },\n}\n","import { AsTypeFactory, TypeCheck } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\n\nexport const AsObjectFactory = {\n create: <T extends EmptyObject>(typeCheck: TypeCheck<T>) => {\n return AsTypeFactory.create<T>(typeCheck)\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type FieldType = 'string' | 'number' | 'object' | 'symbol' | 'symbol' | 'undefined' | 'null' | 'array' | 'function'\n\nexport type ObjectTypeShape = Record<string | number | symbol, FieldType>\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 { AnyObject } from './AnyObject'\nimport { isType } from './isType'\n\nexport const isObject = (value: unknown): value is AnyObject => {\n return isType(value, 'object')\n}\n","import { AnyObject } from './AnyObject'\nimport { AsObjectFactory } from './AsObjectFactory'\nimport { isObject } from './isObject'\n\nexport const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()\n","import { Logger } from '@xylabs/logger'\n\nimport { EmptyObject } from './EmptyObject'\n\nexport type BaseParamsFields = {\n logger?: Logger\n}\n\nexport type BaseParams<TAdditionalParams extends EmptyObject | void = void> =\n TAdditionalParams extends EmptyObject ? BaseParamsFields & TAdditionalParams : BaseParamsFields\n\nexport abstract class Base<TParams extends BaseParams = BaseParams> {\n static defaultLogger?: Logger\n\n constructor(readonly params: TParams) {\n params.logger?.debug(`Base constructed [${Object(this).name}]`)\n }\n\n protected get logger() {\n return this.params?.logger ?? Base.defaultLogger\n }\n}\n","import { AnyObject } from './AnyObject'\nimport { TypeCheck, TypeCheckConfig } from './AsTypeFactory'\nimport { EmptyObject } from './EmptyObject'\nimport { isType, ObjectTypeShape } from './isType'\n\nexport interface ObjectTypeConfig extends TypeCheckConfig {}\n\nexport class IsObjectFactory<T extends EmptyObject> {\n create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): TypeCheck<T> {\n return (obj, { log } = {}): obj is T => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\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 && 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 } from './isObject'\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray\nexport type JsonObject = { [key: string]: JsonValue }\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 isValidJsonFieldPair = ([key, value]: [key: unknown, value: unknown]) => {\n return typeof key === 'string' && isJsonValue(value)\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","import { EmptyObject } from './EmptyObject'\nimport { StringKeyObject } from './StringKeyObject'\n\nexport abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {\n readonly obj: T\n constructor(obj: T) {\n this.obj = obj\n }\n protected get stringKeyObj() {\n return this.obj as StringKeyObject\n }\n}\n","import { JsonArray, JsonObject, JsonValue } from './JsonObject'\n\nconst toJsonArray = (value: unknown[], cycleList?: unknown[]): JsonArray => {\n return value.map((item) => toJsonValue(item, cycleList))\n}\n\nconst toJsonObject = (value: object, cycleList?: unknown[]): JsonObject => {\n const result: JsonObject = {}\n for (const [key, entry] of Object.entries(value)) {\n result[key] = value === undefined ? '[Undefined]' : toJsonValue(entry, cycleList)\n }\n return result\n}\n\nconst toJsonValue = (value: unknown, cycleList?: unknown[]): JsonValue => {\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) ? toJsonArray(value) : toJsonObject(value)\n }\n default: {\n return `[${typeof value}]`\n }\n }\n}\n\nexport const toJson = (value: unknown): JsonValue => {\n return toJsonValue(value)\n}\n","import { Promisable } from '@xylabs/promise'\n\nimport { AnyObject } from './AnyObject'\nimport { EmptyObject } from './EmptyObject'\nimport { ObjectWrapper } from './ObjectWrapper'\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":["resolvedAssert"]}
package/package.json CHANGED
@@ -11,13 +11,13 @@
11
11
  },
12
12
  "description": "Primary SDK for using XYO Protocol 2.0",
13
13
  "dependencies": {
14
- "@xylabs/assert": "^3.0.7",
15
- "@xylabs/logger": "^3.0.7",
16
- "@xylabs/promise": "^3.0.7"
14
+ "@xylabs/assert": "^3.0.9",
15
+ "@xylabs/logger": "^3.0.9",
16
+ "@xylabs/promise": "^3.0.9"
17
17
  },
18
18
  "devDependencies": {
19
- "@xylabs/ts-scripts-yarn3": "^3.4.1",
20
- "@xylabs/tsconfig": "^3.4.1",
19
+ "@xylabs/ts-scripts-yarn3": "^3.5.0",
20
+ "@xylabs/tsconfig": "^3.5.0",
21
21
  "typescript": "^5.4.2"
22
22
  },
23
23
  "exports": {
@@ -58,6 +58,6 @@
58
58
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
59
59
  },
60
60
  "sideEffects": false,
61
- "version": "3.0.7",
61
+ "version": "3.0.9",
62
62
  "type": "module"
63
63
  }