diff --git a/README.md b/README.md
index f91bae5..2a3e176 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Type ø matica
+# TypeØmatica
[](https://coveralls.io/github/wentout/typeomatica?branch=main)
@@ -8,37 +8,383 @@
[**$ npm install typeomatica**](https://www.npmjs.com/package/typeomatica)
-
This package is a part of [mnemonica](https://www.npmjs.com/package/mnemonica) project.
-Strict Types checker for objects which represent Data Types.
+**Strict Runtime Type Checker for JavaScript Objects**
+
+TypeØmatica uses JavaScript Proxies to enforce type safety at runtime, exactly as TypeScript expects at compile time. Once a property is assigned a value, its type is locked and cannot be changed.
+
+---
+
+## Quick Start
+
+```typescript
+import { BaseClass } from 'typeomatica';
+
+class User extends BaseClass {
+ name: string = 'default';
+ age: number = 0;
+}
+
+const user = new User();
+
+// ✓ Valid assignments
+user.name = 'John';
+user.age = 25;
+
+// ✗ Runtime error (even if TypeScript is bypassed with @ts-ignore)
+user.age = '25'; // TypeError: Type Mismatch
+```
+
+---
+
+## Table of Contents
+
+- [What is TypeØmatica?](#what-is-typeomatica)
+- [Installation](#installation)
+- [Core Concepts](#core-concepts)
+- [API Reference](#api-reference)
+- [Usage Patterns](#usage-patterns)
+- [Type Examples](#type-examples)
+- [Working with Wrapped Values](#working-with-wrapped-values)
+- [Error Reference](#error-reference)
+- [Integration with Mnemonica](#integration-with-mnemonica)
+
+---
+
+## What is TypeØmatica?
+
+TypeØmatica provides strict runtime type checking for JavaScript objects using Proxy-based interception. It ensures that once a property is initialized with a type, that type cannot be violated at runtime.
+
+**Key Features:**
+- Runtime type enforcement (complements TypeScript's compile-time checks)
+- Proxy-based property interception
+- Type locking after initial assignment
+- Prevents prototype mutation, property redefinition, and deletion
+
+---
+
+## Installation
+
+```bash
+npm install typeomatica
+```
+
+---
+
+## Core Concepts
+
+### How It Works
+
+TypeØmatica wraps objects with JavaScript Proxies that intercept:
+- `get` - Property reads
+- `set` - Property writes (with type validation)
+- `setPrototypeOf` - Blocks prototype changes
+- `defineProperty` - Blocks property redefinition
+- `deleteProperty` - Blocks property deletion
+
+### Type Categories
+
+| Category | Types | Behavior |
+|----------|-------|----------|
+| `primitives` | string, number, boolean, bigint, symbol, undefined | Type-locked accessors |
+| `nullish` | null | Only null allowed |
+| `objects` | object, arrays, dates | Same constructor type required |
+| `functions` | methods | Restricted on data types |
+
+---
+
+## API Reference
+
+### BaseClass
+
+The primary class for strict-type objects.
+
+```typescript
+import { BaseClass } from 'typeomatica';
+
+class MyClass extends BaseClass {
+ field: string = 'value';
+ constructor() {
+ super();
+ }
+}
+```
+
+### BasePrototype
+
+Functional equivalent of `BaseClass`.
+
+```typescript
+import { BasePrototype } from 'typeomatica';
+
+const Base = BasePrototype({ initialProp: 123 });
+class MyClass extends Base { }
+```
+
+### @Strict() Decorator
+
+Apply strict typing without extending BaseClass.
+
+```typescript
+import { Strict } from 'typeomatica';
+
+@Strict({ deep: true })
+class MyClass {
+ field: number = 0;
+}
+```
+
+**Decorator Arguments:**
+- First argument: Base prototype or options object
+- Second argument: Options object
+
+### Options Interface
+
+```typescript
+interface TypeomaticaOptions {
+ strictAccessCheck?: boolean; // default: false
+}
+```
+
+**Options:**
+- `strictAccessCheck: true` - Enables strict receiver checking (throws `ACCESS_DENIED` error when property is accessed from wrong context)
+- `deep: true` - Enable recursive property checking (when using BasePrototype with initial values)
+
+### Usage with Options
+
+```typescript
+// With BaseClass - strict access checking enabled
+class SecureData extends BaseClass {
+ secret: string = '';
+ constructor() {
+ super(undefined, { strictAccessCheck: true });
+ }
+}
+
+// With BasePrototype - strict access checking enabled
+const SecureBase = BasePrototype({ data: '' }, { strictAccessCheck: true });
+class User extends SecureBase {
+ name: string = '';
+}
+
+// With @Strict decorator - strict access checking enabled
+@Strict(undefined, { strictAccessCheck: true })
+class Product {
+ price: number = 0;
+}
+```
+
+### Symbol Exports
+
+```typescript
+import {
+ SymbolTypeomaticaProxyReference, // Access proxy internals
+ SymbolInitialValue // Access original values
+} from 'typeomatica';
+```
+
+---
-# how it works
+## Usage Patterns
-see `test/index.ts`
+### Pattern 1: Extending BaseClass
-```js
+```typescript
+import { BaseClass } from 'typeomatica';
-class SimpleBase extends BasePrototype {
- stringProp = '123';
-};
+class User extends BaseClass {
+ name: string = '';
+ age: number = 0;
+ active: boolean = true;
+}
-// nect code line will work properly
-simpleInstance.stringProp = '321';
+const user = new User();
+user.name = 'John'; // ✓ Works
+user.age = 25; // ✓ Works
-// but next code line will throw TypeError('Type Mismatch')
// @ts-ignore
-simpleInstance.stringProp = 123;
+user.age = '25'; // ✗ TypeError: Type Mismatch
+```
+
+### Pattern 2: @Strict Decorator
+
+```typescript
+import { Strict } from 'typeomatica';
+
+@Strict({ deep: true })
+class Product {
+ id: number = 0;
+ title: string = '';
+ price: number = 0;
+}
+const product = new Product();
+product.price = 29.99; // ✓ Works
+// @ts-ignore
+product.price = '$29.99'; // ✗ TypeError: Type Mismatch
```
-That is it. It will be impossible to assign anything else except of:
+### Pattern 3: BaseClass as Prototype
+
+```typescript
+import { BaseClass } from 'typeomatica';
+
+class UserData {
+ name: string = 'default';
+ age: number = 0;
+}
+
+// Inject type checking into prototype chain
+Object.setPrototypeOf(UserData.prototype, new BaseClass({ deep: true }));
-```js
-typeof something === 'string'
+const user = new UserData();
+user.name = 'John'; // ✓ Works
+// @ts-ignore
+user.name = 123; // ✗ TypeError: Type Mismatch
```
-to `stringProp` in runtime.
+---
+
+## Type Examples
+
+### Primitives
+
+```typescript
+import { BaseClass } from 'typeomatica';
+
+class Primitives extends BaseClass {
+ str: string = 'hello';
+ num: number = 42;
+ bool: boolean = true;
+ bigint: bigint = BigInt(100);
+}
+
+const p = new Primitives();
+p.str = 'world'; // ✓ Works
+p.num = 100; // ✓ Works
+// @ts-ignore
+p.str = 123; // ✗ TypeError: Type Mismatch
+```
+
+### Null and Undefined
+
+```typescript
+class Nullable extends BaseClass {
+ nullValue: null = null;
+ undefinedValue: undefined = undefined;
+}
+
+const n = new Nullable();
+n.nullValue = null; // ✓ Works
+// @ts-ignore
+n.nullValue = undefined; // ✗ TypeError: Type Mismatch
+```
+
+### Objects
+
+```typescript
+class WithObject extends BaseClass {
+ data: object = {};
+ list: number[] = [];
+}
+
+const w = new WithObject();
+w.data = { a: 1 }; // ✓ Works
+w.list = [1, 2, 3]; // ✓ Works
+// @ts-ignore
+w.data = 123; // ✗ TypeError: Type Mismatch
+// @ts-ignore
+w.data = new Set(); // ✗ TypeError: Type Mismatch (Set !== Object)
+```
+
+---
+
+## Working with Wrapped Values
+
+TypeØmatica wraps primitives to enforce type safety. Use `valueOf()` for operations.
+
+### Numeric Operations
+
+```typescript
+class Calc extends BaseClass {
+ count: number = 10;
+}
+
+const calc = new Calc();
+
+// ✗ Direct arithmetic throws
+const result = calc.count + 5; // ReferenceError: Value Access Denied
+
+// ✓ Use valueOf()
+const result = calc.count.valueOf() + 5; // 15
+const sum = 3 + +calc.count; // 13
+```
+
+### String Operations
+
+```typescript
+class Text extends BaseClass {
+ message: string = 'hello';
+}
+
+const text = new Text();
+text.message.valueOf().toUpperCase(); // 'HELLO'
+text.message.valueOf().length; // 5
+```
+
+---
+
+## Error Reference
+
+| Error Message | Error Type | When Thrown |
+|---------------|------------|-------------|
+| `Type Mismatch` | TypeError | Wrong type assigned to property |
+| `Value Access Denied` | ReferenceError | Property accessed from wrong context (only when `strictAccessCheck: true`) |
+| `Attempt to Access to Undefined Prop` | Error | Reading non-existent property |
+| `Functions are Restricted` | TypeError | Function assigned to data property |
+| `Re-Assirnment is Forbidden` | TypeError | Modifying read-only custom field |
+| `Setting prototype is not allowed` | Error | Calling `Object.setPrototypeOf()` |
+| `Defining new Properties is not allowed` | Error | Calling `Object.defineProperty()` |
+| `Properties Deletion is not allowed` | Error | Calling `delete` on property |
+
+---
+
+## Integration with Mnemonica
+
+TypeØmatica integrates seamlessly with [mnemonica](https://www.npmjs.com/package/mnemonica) for combined prototype inheritance and runtime type safety.
+
+```typescript
+import { decorate } from 'mnemonica';
+import { BaseClass, Strict } from 'typeomatica';
+
+@decorate()
+@Strict()
+class Entity extends BaseClass {
+ id: string = '';
+ createdAt: Date = new Date();
+}
+
+// Works with mnemonica's inheritance system
+const User = Entity.define('User', function(this: { email: string }) {
+ this.email = '';
+});
+
+const user = new User();
+// @ts-ignore
+user.email = 123; // ✗ TypeError: Type Mismatch
+```
+
+**Decorator Order Matters:**
+- `@Strict()` must come AFTER `@decorate()` (inner decorator)
+- Decorators apply bottom-to-top
+
+For complete integration documentation, see [mnemonica's TypeØmatica guide](https://github.com/wentout/mnemonica/blob/main/core/TypeØmatica.md).
+
+---
+
+## License
+
+MIT
-As we describe Data Types — please take a peek for tests directory:
-[HERE](https://github.com/wentout/typeomatica/blob/main/test/index.ts).
+Copyright (c) 2019-2024 https://github.com/wentout
diff --git a/lib/errors.js b/lib/errors.js
index ae61c5b..ceda5aa 100644
--- a/lib/errors.js
+++ b/lib/errors.js
@@ -8,3 +8,4 @@ exports.ErrorsNames = {
RIP_FUNCTIONS: 'Functions are Restricted',
FORBIDDEN_RE: 'Re-Assirnment is Forbidden'
};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7OztBQUVBLFFBQUEsV0FBVyxHQUFHO0lBQzFCLGFBQWEsRUFBRSxlQUFlO0lBQzlCLGFBQWEsRUFBRSxxQkFBcUI7SUFDcEMsWUFBWSxFQUFFLHFDQUFxQztJQUNuRCxhQUFhLEVBQUUsMEJBQTBCO0lBQ3pDLFlBQVksRUFBRSw0QkFBNEI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGNvbnN0IEVycm9yc05hbWVzID0ge1xuXHRUWVBFX01JU01BVENIOiAnVHlwZSBNaXNtYXRjaCcsXG5cdEFDQ0VTU19ERU5JRUQ6ICdWYWx1ZSBBY2Nlc3MgRGVuaWVkJyxcblx0TUlTU0lOR19QUk9QOiAnQXR0ZW1wdCB0byBBY2Nlc3MgdG8gVW5kZWZpbmVkIFByb3AnLFxuXHRSSVBfRlVOQ1RJT05TOiAnRnVuY3Rpb25zIGFyZSBSZXN0cmljdGVkJyxcblx0Rk9SQklEREVOX1JFOiAnUmUtQXNzaXJubWVudCBpcyBGb3JiaWRkZW4nXG59OyJdfQ==
\ No newline at end of file
diff --git a/lib/fields.js b/lib/fields.js
index c033045..7d2da44 100644
--- a/lib/fields.js
+++ b/lib/fields.js
@@ -26,3 +26,4 @@ class FieldConstructor {
exports.FieldConstructor = FieldConstructor;
Object.freeze(FieldConstructor.prototype);
Object.seal(FieldConstructor.prototype);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZpZWxkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7OztBQUViLHFDQUF1QztBQUV2QyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQWVuRCxNQUFhLGdCQUFnQjtJQUM1QixDQUFDLGtCQUFrQixDQUFDLENBQVU7SUFDOUIsSUFBVyxHQUFHO1FBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE9BQU87WUFDTixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFXLEdBQUc7UUFDYixPQUFPO1lBQ04sTUFBTSxJQUFJLFNBQVMsQ0FBQyxvQkFBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQztJQUNILENBQUM7SUFDRCxZQUFhLEtBQWM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxNQUFNLEtBQUssa0JBQWtCO1FBQzVCLE9BQU8sa0JBQWtCLENBQUM7SUFDM0IsQ0FBQztDQUNEO0FBbkJELDRDQW1CQztBQW9DRCxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IEVycm9yc05hbWVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5jb25zdCBTeW1ib2xJbml0aWFsVmFsdWUgPSBTeW1ib2woJ0luaXRpYWwgVmFsdWUnKTtcblxuaW50ZXJmYWNlIEZpZWxkRGVmaW5pdGlvbiAge1xuXHRbU3ltYm9sSW5pdGlhbFZhbHVlXTogdW5rbm93blxuXHQvLyBnZXQ/OiB1bmtub3duXG5cdC8vIHNldD86IHVua25vd25cblx0Ly8gY29uZmlndXJhYmxlOiBib29sZWFuLFxuXHQvLyBlbnVtZXJhYmxlOiBib29sZWFuLFxuXHQvLyB3cml0YWJsZTogYm9vbGVhblxufVxuXG4vLyBleHBvcnQgY29uc3QgRmllbGRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICh0aGlzOiBGaWVsZERlZmluaXRpb24sIHZhbHVlOiB1bmtub3duKSB7XG4vLyBcdHRoaXNbU3ltYm9sSW5pdGlhbFZhbHVlXSA9IHZhbHVlO1xuLy8gfSBhcyBPYmplY3RDb25zdHJ1Y3RvcjtcblxuZXhwb3J0IGNsYXNzIEZpZWxkQ29uc3RydWN0b3IgaW1wbGVtZW50cyBGaWVsZERlZmluaXRpb24ge1xuXHRbU3ltYm9sSW5pdGlhbFZhbHVlXTogdW5rbm93bjtcblx0cHVibGljIGdldCBnZXQgKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHJldHVybiBmdW5jdGlvbiAoLyogdGhpczogRmllbGREZWZpbml0aW9uICovKSB7XG5cdFx0XHRyZXR1cm4gc2VsZltTeW1ib2xJbml0aWFsVmFsdWVdO1xuXHRcdH07XG5cdH1cblx0cHVibGljIGdldCBzZXQgKCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKEVycm9yc05hbWVzLkZPUkJJRERFTl9SRSk7XG5cdFx0fTtcblx0fVxuXHRjb25zdHJ1Y3RvciAodmFsdWU6IHVua25vd24pIHtcblx0XHR0aGlzW1N5bWJvbEluaXRpYWxWYWx1ZV0gPSB2YWx1ZTtcblx0fVxuXHRzdGF0aWMgZ2V0IFN5bWJvbEluaXRpYWxWYWx1ZSAoKSB7XG5cdFx0cmV0dXJuIFN5bWJvbEluaXRpYWxWYWx1ZTtcblx0fVxufVxuXG4vLyBPYmplY3QuYXNzaWduKEZpZWxkQ29uc3RydWN0b3IucHJvdG90eXBlLCB7XG4vLyBcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vLyBcdGVudW1lcmFibGU6IGZhbHNlLFxuLy8gXHQvLyB3cml0YWJsZTogZmFsc2Vcbi8vIH0pXG5cbi8vIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWVsZENvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2dldCcsIHtcbi8vIFx0Z2V0KCkge1xuLy8gXHRcdHJldHVybiB0aGlzW3N5bWJvbFZhbHVlXTtcbi8vIFx0fSxcbi8vIFx0Ly8gQHRzLWlnbm9yZVxuLy8gXHRzZXQodmFsdWU6IHVua25vd24pIHtcbi8vIFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Jyb2tlbiBiZWhhdmlvdXI6IGFzc2lnbm1lbnQgdG8gZ2V0dGVyJyk7XG4vLyBcdH0sXG4vLyBcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vLyBcdGVudW1lcmFibGU6IHRydWUsXG4vLyBcdC8vIHdyaXRhYmxlOiBmYWxzZVxuLy8gfSk7XG5cbi8vIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWVsZENvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ3NldCcsIHtcbi8vIFx0Z2V0KCkge1xuLy8gXHRcdHJldHVybiBmdW5jdGlvbiAodGhpczogRmllbGREZWZpbml0aW9uLCB2YWx1ZTogdW5rbm93bikge1xuLy8gXHRcdFx0dGhpc1tzeW1ib2xWYWx1ZV0gPSB2YWx1ZTtcbi8vIFx0XHR9XG4vLyBcdH0sXG4vLyBcdC8vIEB0cy1pZ25vcmVcbi8vIFx0c2V0KHZhbHVlOiB1bmtub3duKSB7XG4vLyBcdFx0dGhyb3cgbmV3IEVycm9yKCdicm9rZW4gYmVoYXZpb3VyOiBhc3NpZ25tZW50IHRvIHNldHRlcicpO1xuLy8gXHR9LFxuLy8gXHRjb25maWd1cmFibGU6IGZhbHNlLFxuLy8gXHRlbnVtZXJhYmxlOiB0cnVlLFxuLy8gXHQvLyB3cml0YWJsZTogZmFsc2Vcbi8vIH0pO1xuXG5PYmplY3QuZnJlZXplKEZpZWxkQ29uc3RydWN0b3IucHJvdG90eXBlKTtcbk9iamVjdC5zZWFsKEZpZWxkQ29uc3RydWN0b3IucHJvdG90eXBlKTtcbiJdfQ==
\ No newline at end of file
diff --git a/lib/index.d.ts b/lib/index.d.ts
index 21ad5f0..011b208 100644
--- a/lib/index.d.ts
+++ b/lib/index.d.ts
@@ -1,11 +1,14 @@
+export interface TypeomaticaOptions {
+ strictAccessCheck?: boolean;
+}
export declare const baseTarget: (_proto?: object) => any;
export declare const SymbolTypeomaticaProxyReference: unique symbol;
export declare const BaseConstructorPrototype: {
- new (_target?: T): T;
- (_target?: S extends infer S_1 ? S_1 : {}): S;
+ new (_target?: T, options?: TypeomaticaOptions): T;
+ (_target?: S extends infer S_1 ? S_1 : {}, options?: TypeomaticaOptions): S;
};
export declare class BaseClass {
- constructor(_target?: object);
+ constructor(_target?: object, options?: TypeomaticaOptions);
}
export declare const SymbolInitialValue: symbol;
-export declare const Strict: (_target?: object) => (cstr: T) => T;
+export declare const Strict: (_target?: object, options?: TypeomaticaOptions) => (cstr: T) => T;
diff --git a/lib/index.js b/lib/index.js
index 6c453ba..5dbdf1e 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -4,43 +4,47 @@ exports.Strict = exports.SymbolInitialValue = exports.BaseClass = exports.BaseCo
const errors_1 = require("./errors");
const types_1 = require("./types");
const fields_1 = require("./fields");
-const resolver = Object.entries({
- primitives: types_1.primitives,
- special: types_1.special,
- nullish: types_1.nullish,
- objects: types_1.objects,
- functions: types_1.functions
-}).reduce((obj, [key, _handler]) => {
- obj[key] = function (initialValue, receiver) {
- const handler = _handler(initialValue);
- return {
- get() {
- const invocationThis = this;
- if (invocationThis !== receiver) {
- throw new ReferenceError(errors_1.ErrorsNames.ACCESS_DENIED);
+const createResolver = (options = {}) => {
+ const { strictAccessCheck = false } = options;
+ return Object.entries({
+ primitives: types_1.primitives,
+ special: types_1.special,
+ nullish: types_1.nullish,
+ objects: types_1.objects,
+ functions: types_1.functions
+ }).reduce((obj, [key, _handler]) => {
+ obj[key] = function (initialValue, receiver) {
+ const handler = _handler(initialValue);
+ return {
+ get() {
+ const invocationThis = this;
+ if (strictAccessCheck && invocationThis !== receiver) {
+ throw new ReferenceError(errors_1.ErrorsNames.ACCESS_DENIED);
+ }
+ const result = handler.get();
+ return result;
+ },
+ set(replacementValue) {
+ const invocationThis = this;
+ if (strictAccessCheck && invocationThis !== receiver) {
+ throw new ReferenceError(errors_1.ErrorsNames.ACCESS_DENIED);
+ }
+ const result = handler.set(replacementValue);
+ return result;
}
- const result = handler.get();
- return result;
- },
- set(replacementValue) {
- const invocationThis = this;
- if (invocationThis !== receiver) {
- throw new ReferenceError(errors_1.ErrorsNames.ACCESS_DENIED);
- }
- const result = handler.set(replacementValue);
- return result;
- }
+ };
};
- };
- return obj;
-}, {});
-const createProperty = (propName, initialValue, receiver) => {
+ return obj;
+ }, {});
+};
+const createProperty = (propName, initialValue, receiver, options) => {
const value = initialValue;
const valueIsPrimitive = (0, types_1.isPrimitive)(initialValue);
const isObject = typeof initialValue === 'object';
const isFunction = initialValue instanceof Function;
const isNull = initialValue === null;
const types = valueIsPrimitive ? 'primitives' : (isObject ? (isNull ? 'nullish' : 'objects') : (isFunction ? 'functions' : 'special'));
+ const resolver = createResolver(options);
const descriptor = (isObject && (value instanceof fields_1.FieldConstructor)) ?
value
:
@@ -61,7 +65,7 @@ const props2skip = new Set([
const util = require('util');
const hasNodeInspect = (util && util.inspect && util.inspect.custom);
(hasNodeInspect && (props2skip.add(util.inspect.custom)));
-const handlers = {
+const createHandlers = (options) => ({
get(target, prop, receiver) {
const result = Reflect.get(target, prop, receiver);
if (result !== undefined) {
@@ -85,7 +89,7 @@ const handlers = {
throw new Error(errorMessage);
},
set(_, prop, value, receiver) {
- const result = createProperty(prop, value, receiver);
+ const result = createProperty(prop, value, receiver, options);
return result;
},
setPrototypeOf() {
@@ -97,8 +101,7 @@ const handlers = {
deleteProperty() {
throw new Error('Properties Deletion is not allowed!');
},
-};
-Object.freeze(handlers);
+});
const baseTarget = (_proto) => {
const proto = typeof _proto === 'object' ? _proto : null;
const answer = Object.create(proto);
@@ -106,7 +109,7 @@ const baseTarget = (_proto) => {
};
exports.baseTarget = baseTarget;
exports.SymbolTypeomaticaProxyReference = Symbol('TypeØmaticaProxyReference');
-const getTypeomaticaProxyReference = (_target) => {
+const getTypeomaticaProxyReference = (_target, options) => {
const target = Object.create(_target);
const id = `TypeØmaticaProxyReference-${Math.random()}`;
Object.defineProperty(target, exports.SymbolTypeomaticaProxyReference, {
@@ -114,12 +117,13 @@ const getTypeomaticaProxyReference = (_target) => {
return id;
}
});
+ const handlers = createHandlers(options);
const proxy = new Proxy(target, handlers);
return proxy;
};
-exports.BaseConstructorPrototype = function (_target) {
+exports.BaseConstructorPrototype = function (_target, options) {
if (!new.target) {
- const self = exports.BaseConstructorPrototype.bind(this, _target);
+ const self = exports.BaseConstructorPrototype.bind(this, _target, options);
self.prototype = {
constructor: exports.BaseConstructorPrototype
};
@@ -129,7 +133,7 @@ exports.BaseConstructorPrototype = function (_target) {
return this;
}
const target = (0, exports.baseTarget)(_target);
- const InstancePrototype = getTypeomaticaProxyReference(target);
+ const InstancePrototype = getTypeomaticaProxyReference(target, options);
let proto;
let protoPointer = this;
let protoConstrcutor;
@@ -162,12 +166,12 @@ Object.defineProperty(module, 'exports', {
enumerable: true
});
class BaseClass {
- constructor(_target) {
+ constructor(_target, options) {
if (this[exports.SymbolTypeomaticaProxyReference]) {
return this;
}
const target = (0, exports.baseTarget)(_target);
- const proxy = getTypeomaticaProxyReference(target);
+ const proxy = getTypeomaticaProxyReference(target, options);
let proto = this;
let protoPointer;
let found = false;
@@ -183,13 +187,13 @@ class BaseClass {
}
}
exports.BaseClass = BaseClass;
-const strict = function (_target) {
+const strict = function (_target, options) {
const decorator = function (cstr) {
if (cstr.prototype[exports.SymbolTypeomaticaProxyReference]) {
return cstr;
}
const target = (0, exports.baseTarget)(_target);
- const proxy = getTypeomaticaProxyReference(target);
+ const proxy = getTypeomaticaProxyReference(target, options);
const _replacer = Object.create(proxy);
Object.setPrototypeOf(cstr.prototype, _replacer);
return cstr;
@@ -236,3 +240,4 @@ Object.defineProperty(module.exports, 'Strict', {
});
Object.freeze(exports.BaseConstructorPrototype);
Object.freeze(exports.BaseConstructorPrototype.prototype);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsWUFBWSxDQUFDOzs7QUFFYixxQ0FBdUM7QUFFdkMsbUNBT2lCO0FBRWpCLHFDQUE0QztBQU01QyxNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQThCLEVBQUUsRUFBRSxFQUFFO0lBQzNELE1BQU0sRUFBRSxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFOUMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3JCLFVBQVUsRUFBVixrQkFBVTtRQUNWLE9BQU8sRUFBUCxlQUFPO1FBQ1AsT0FBTyxFQUFQLGVBQU87UUFDUCxPQUFPLEVBQVAsZUFBTztRQUNQLFNBQVMsRUFBVCxpQkFBUztLQUNULENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUUxQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxZQUFvQixFQUFFLFFBQWdCO1lBQzFELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2QyxPQUFPO2dCQUNOLEdBQUc7b0JBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUM1QixJQUFJLGlCQUFpQixJQUFJLGNBQWMsS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDdEQsTUFBTSxJQUFJLGNBQWMsQ0FBQyxvQkFBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNyRCxDQUFDO29CQUNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDN0IsT0FBTyxNQUFNLENBQUM7Z0JBQ2YsQ0FBQztnQkFDRCxHQUFHLENBQUMsZ0JBQXlCO29CQUM1QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQzVCLElBQUksaUJBQWlCLElBQUksY0FBYyxLQUFLLFFB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RUFBRSxJQUFJO0NBQ2hCLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRTtJQUN4RSxHQUFHO1FBQ0YsT0FBTyx1Q0FBK0IsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsVUFBVSxFQUFFLElBQUk7Q0FDaEIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtJQUNuRCxHQUFHO1FBQ0YsT0FBTyxrQkFBVSxDQUFDO0lBQ25CLENBQUM7SUFDRCxVQUFVLEVBQUUsSUFBSTtDQUNoQixDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFO0lBQy9DLEdBQUc7UUFDRixPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFDRCxVQUFVLEVBQUUsSUFBSTtDQUNoQixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLGdDQUF3QixDQUFDLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQ0FBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG94bGludC1kaXNhYmxlIHR5cGVzY3JpcHQvbm8tdGhpcy1hbGlhc1xuLyogZXNsaW50LWRpc2FibGUgbm8tZGVidWdnZXIgKi9cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRXJyb3JzTmFtZXMgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7XG5cdGZ1bmN0aW9ucyxcblx0bnVsbGlzaCxcblx0b2JqZWN0cyxcblx0cHJpbWl0aXZlcyxcblx0c3BlY2lhbCxcblx0aXNQcmltaXRpdmVcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB7IEZpZWxkQ29uc3RydWN0b3IgfSBmcm9tICcuL2ZpZWxkcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZW9tYXRpY2FPcHRpb25zIHtcblx0c3RyaWN0QWNjZXNzQ2hlY2s/OiBib29sZWFuO1xufVxuXG5jb25zdCBjcmVhdGVSZXNvbHZlciA9IChvcHRpb25zOiBUeXBlb21hdGljYU9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCB7IHN0cmljdEFjY2Vzc0NoZWNrID0gZmFsc2UgfSA9IG9wdGlvbnM7XG5cdFxuXHRyZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuXHRcdHByaW1pdGl2ZXMsXG5cdFx0c3BlY2lhbCxcblx0XHRudWxsaXNoLFxuXHRcdG9iamVjdHMsXG5cdFx0ZnVuY3Rpb25zXG5cdH0pLnJlZHVjZSgob2JqOiBvYmplY3QsIFtrZXksIF9oYW5kbGVyXSkgPT4ge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRvYmpba2V5XSA9IGZ1bmN0aW9uIChpbml0aWFsVmFsdWU6IG9iamVjdCwgcmVjZWl2ZXI6IG9iamVjdCkge1xuXHRcdFx0Y29uc3QgaGFuZGxlciA9IF9oYW5kbGVyKGluaXRpYWxWYWx1ZSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW52b2NhdGlvblRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdGlmIChzdHJpY3RBY2Nlc3NDaGVjayAmJiBpbnZvY2F0aW9uVGhpcyAhPT0gcmVjZWl2ZXIpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihFcnJvcnNOYW1lcy5BQ0NFU1NfREVOSUVEKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gaGFuZGxlci5nZXQoKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQocmVwbGFjZW1lbnRWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0XHRcdGNvbnN0IGludm9jYXRpb25UaGlzID0gdGhpcztcblx0XHRcdFx0XHRpZiAoc3RyaWN0QWNjZXNzQ2hlY2sgJiYgaW52b2NhdGlvblRoaXMgIT09IHJlY2VpdmVyKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoRXJyb3JzTmFtZXMuQUNDRVNTX0RFTklFRCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGhhbmRsZXIuc2V0KHJlcGxhY2VtZW50VmFsdWUpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdHJldHVybiBvYmo7XG5cdH0sIHt9KTtcbn07XG5cbmNvbnN0IGNyZWF0ZVByb3BlcnR5ID0gKHByb3BOYW1lOiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogdW5rbm93biwgcmVjZWl2ZXI6IG9iamVjdCwgb3B0aW9ucz86IFR5cGVvbWF0aWNhT3B0aW9ucykgPT4ge1xuXG5cdGNvbnN0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXHRjb25zdCB2YWx1ZUlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmUoaW5pdGlhbFZhbHVlKTtcblx0Y29uc3QgaXNPYmplY3QgPSB0eXBlb2YgaW5pdGlhbFZhbHVlID09PSAnb2JqZWN0Jztcblx0Y29uc3QgaXNGdW5jdGlvbiA9IGluaXRpYWxWYWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuXHRjb25zdCBpc051bGwgPSBpbml0aWFsVmFsdWUgPT09IG51bGw7XG5cblx0LyoqXG5cdCAqIHNwZWNpYWw6IHVuZGVmaW5lZCBvciBCaWdJbnQgb3IgU3ltYm9sXG5cdCAqIFx0b3Igb3RoZXIgbm9uIGNvbnN0cnVjdGlibGUgdHlwZVxuXHQgKi9cblxuXHRjb25zdCB0eXBlcyA9IHZhbHVlSXNQcmltaXRpdmUgPyAncHJpbWl0aXZlcycgOiAoXG5cdFx0aXNPYmplY3QgPyAoXG5cdFx0XHRpc051bGwgPyAnbnVsbGlzaCcgOiAnb2JqZWN0cydcblx0XHQpIDogKFxuXHRcdFx0aXNGdW5jdGlvbiA/ICdmdW5jdGlvbnMnIDogJ3NwZWNpYWwnXG5cdFx0KVxuXHQpO1xuXG5cdGNvbnN0IHJlc29sdmVyID0gY3JlYXRlUmVzb2x2ZXIob3B0aW9ucyk7XG5cblx0Y29uc3QgZGVzY3JpcHRvciA9IChpc09iamVjdCAmJiAodmFsdWUgaW5zdGFuY2VvZiBGaWVsZENvbnN0cnVjdG9yKSkgP1xuXHRcdHZhbHVlXG5cdFx0OlxuXHRcdHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHQuLi5yZXNvbHZlclt0eXBlc10odmFsdWUsIHJlY2VpdmVyKSxcblx0XHR9O1xuXG5cdC8vIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpZWxkQ29uc3RydWN0b3IpIHtcblx0Ly8gXHRkZXNjcmlwdG9yO1xuXHQvLyBcdGRlYnVnZ2VyO1xuXHQvLyB9XG5cblx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyZWNlaXZlciwgcHJvcE5hbWUsIGRlc2NyaXB0b3IpO1xuXHRyZXR1cm4gcmVzdWx0O1xuXG59O1xuXG4vLyBsaW5lIGJlbG93ICdocmVmJyBpcyBmb3IgdXRpbC5pbnNwZWN0IHdvcmtzLCB1c2VmdWwgZm9yIHYyNFxuY29uc3QgcHJvcHMyc2tpcCA9IG5ldyBTZXQoW1xuXHRTeW1ib2wudG9TdHJpbmdUYWcsXG5cdFN5bWJvbC5pdGVyYXRvcixcblx0Ly8gU3ltYm9sLnRvUHJpbWl0aXZlLFxuXHQndG9TdHJpbmcnLFxuXHQndmFsdWVPZicsXG5cdCdocmVmJ1xuXSk7XG4vLyBjb25zdCBwcm9wczJza2lwID0gbmV3IFNldChbU3ltYm9sLnRvU3RyaW5nVGFnLCBTeW1ib2wuaXRlcmF0b3JdKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBoYXNOb2RlSW5zcGVjdCA9ICh1dGlsICYmIHV0aWwuaW5zcGVjdCAmJiB1dGlsLmluc3BlY3QuY3VzdG9tKTtcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbihoYXNOb2RlSW5zcGVjdCAmJiAocHJvcHMyc2tpcC5hZGQodXRpbC5pbnNwZWN0LmN1c3RvbSkpKTtcblxuY29uc3QgY3JlYXRlSGFuZGxlcnMgPSAob3B0aW9ucz86IFR5cGVvbWF0aWNhT3B0aW9ucykgPT4gKHtcblx0Z2V0KHRhcmdldDogb2JqZWN0LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiBvYmplY3QpIHtcblx0XHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcblx0XHRpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdGlmIChwcm9wID09PSAndG9KU09OJykge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKHRoaXM6IHR5cGVvZiB0YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZW50cmllcy5yZWR1Y2UoKG9iaiwgW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdG9ialtrZXldID0gdmFsdWUudmFsdWVPZigpO1xuXHRcdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHRcdH0sIHt9KSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCB7IG5hbWUgfSA9IHJlY2VpdmVyLmNvbnN0cnVjdG9yO1xuXHRcdGlmIChwcm9wczJza2lwLmhhcyhwcm9wKSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGAke25hbWV9IGxhY2tzIGRlZmluaXRpb24gb2YgWyAke1N0cmluZyhwcm9wKS52YWx1ZU9mKCl9IF1gO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdFx0fVxuXHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGAke0Vycm9yc05hbWVzLk1JU1NJTkdfUFJPUH06IFsgJHtTdHJpbmcocHJvcCkudmFsdWVPZigpfSBdIGZvciAke25hbWV9YDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0fSxcblx0c2V0KF86IG9iamVjdCwgcHJvcDogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcmVjZWl2ZXI6IG9iamVjdCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNyZWF0ZVByb3BlcnR5KHByb3AsIHZhbHVlLCByZWNlaXZlciwgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblx0c2V0UHJvdG90eXBlT2YoKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1NldHRpbmcgcHJvdG90eXBlIGlzIG5vdCBhbGxvd2VkIScpO1xuXHR9LFxuXHQvLyBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQ6IG9iamVjdCwga2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IG9iamVjdCkge1xuXHRkZWZpbmVQcm9wZXJ0eSgpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRGVmaW5pbmcgbmV3IFByb3BlcnRpZXMgaXMgbm90IGFsbG93ZWQhJyk7XG5cdFx0Ly8gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG5cdH0sXG5cdGRlbGV0ZVByb3BlcnR5KCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0aWVzIERlbGV0aW9uIGlzIG5vdCBhbGxvd2VkIScpO1xuXHR9LFxuXHQvLyBnZXRQcm90b3R5cGVPZigpIHtcblx0Ly8gXHRkZWJ1Z2dlcjtcblx0Ly8gXHR0aHJvdyBuZXcgRXJyb3IoJ0dldHRpbmcgcHJvdG90eXBlIGlzIG5vdCBhbGxvd2VkJyk7XG5cdC8vIH0sXG59KTtcblxuLy8gdXNlciBoYXZlIHRvIHByZWNpc2VseSBkZWZpbmUgYWxsIHByb3BzXG5leHBvcnQgY29uc3QgYmFzZVRhcmdldCA9IChfcHJvdG8/OiBvYmplY3QpID0+IHtcblx0Y29uc3QgcHJvdG8gPSB0eXBlb2YgX3Byb3RvID09PSAnb2JqZWN0JyA/IF9wcm90byA6IG51bGw7XG5cdGNvbnN0IGFuc3dlciA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xuXHRyZXR1cm4gYW5zd2VyO1xufTtcblxuZXhwb3J0IGNvbnN0IFN5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UgPSBTeW1ib2woJ1R5cGXDmG1hdGljYVByb3h5UmVmZXJlbmNlJyk7XG5jb25zdCBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlID0gKF90YXJnZXQ6IG9iamVjdCwgb3B0aW9ucz86IFR5cGVvbWF0aWNhT3B0aW9ucykgPT4ge1xuXHRjb25zdCB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKF90YXJnZXQpO1xuXHRjb25zdCBpZCA9IGBUeXBlw5htYXRpY2FQcm94eVJlZmVyZW5jZS0ke01hdGgucmFuZG9tKCl9YDtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiBpZDtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBoYW5kbGVycyA9IGNyZWF0ZUhhbmRsZXJzKG9wdGlvbnMpO1xuXHRjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXJzKTtcblx0cmV0dXJuIHByb3h5O1xufTtcblxuXG5leHBvcnQgY29uc3QgQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBUPih0aGlzOiBTIGV4dGVuZHMgVCA/IFMgOiB7fSwgX3RhcmdldD86IFQsIG9wdGlvbnM/OiBUeXBlb21hdGljYU9wdGlvbnMgKTogVCB7XG5cdGlmICghbmV3LnRhcmdldCkge1xuXG5cdFx0Y29uc3Qgc2VsZjoge1xuXHRcdFx0cHJvdG90eXBlOiB7XG5cdFx0XHRcdGNvbnN0cnVjdG9yOiB0eXBlb2YgQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlXG5cdFx0XHR9XG5cdFx0XHQvL0B0cy1pZ25vcmVcblx0XHR9ID0gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlLmJpbmQodGhpcywgX3RhcmdldCwgb3B0aW9ucyk7XG5cblx0XHRzZWxmLnByb3RvdHlwZSA9IHtcblx0XHRcdGNvbnN0cnVjdG9yOiBCYXNlQ29uc3RydWN0b3JQcm90b3R5cGVcblx0XHR9O1xuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiBzZWxmO1xuXG5cdH1cblxuXHQvLyBAdHMtaWdub3JlXG5cdGlmICh0aGlzW1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdKSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgdGFyZ2V0ID0gYmFzZVRhcmdldChfdGFyZ2V0KSBhcyBvYmplY3Q7XG5cblx0Y29uc3QgSW5zdGFuY2VQcm90b3R5cGUgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCwgb3B0aW9ucyk7XG5cblx0bGV0IHByb3RvO1xuXHRsZXQgcHJvdG9Qb2ludGVyID0gdGhpcyBhcyBvYmplY3Q7XG5cdGxldCBwcm90b0NvbnN0cmN1dG9yO1xuXG5cdGxldCBjb25zdHJ1Y3RvcnMgPSBmYWxzZTtcblxuXHQvLyBAdHMtaWdub3JlXG5cdC8vIGNvbnN0IGhhc1Byb3h5UmVmZXJlbmNlID0gcHJvdG9Qb2ludGVyW1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdIGFzIHVua25vd24gYXMgYm9vbGVhbjtcblx0Ly8gaWYgKGhhc1Byb3h5UmVmZXJlbmNlKSB7XG5cdC8vIFx0dGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSBUeXBlw5htYXRpY2EgaW5zdGFudGlhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGUgc2FtZSBQcm90b3R5cGUgQ2hhaW4hJyk7XG5cdC8vIH1cblxuXHRkbyB7XG5cdFx0cHJvdG8gPSBwcm90b1BvaW50ZXI7XG5cdFx0cHJvdG9Qb2ludGVyID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcblx0XHRpZiAoQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlLnByb3RvdHlwZSA9PT0gcHJvdG9Qb2ludGVyKSB7XG5cdFx0XHRjb25zdHJ1Y3RvcnMgPSB0cnVlO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmICghcHJvdG9Qb2ludGVyKSBicmVhaztcblx0XHRjb25zdCBkZXNjcmlwdG9yID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG9Qb2ludGVyLCAnY29uc3RydWN0b3InKTtcblx0XHRpZiAoIWRlc2NyaXB0b3IpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHZhbHVlID0gZGVzY3JpcHRvci52YWx1ZSB8fCBkZXNjcmlwdG9yLmdldDtcblx0XHQvLyBpZiAoIXZhbHVlKSBjb250aW51ZTtcblx0XHRwcm90b0NvbnN0cmN1dG9yID0gdmFsdWU7XG5cdH0gd2hpbGUgKHByb3RvQ29uc3RyY3V0b3IgIT09IEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZSk7XG5cblx0aWYgKCFjb25zdHJ1Y3RvcnMgJiYgcHJvdG9Db25zdHJjdXRvciAhPT0gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gc2V0dXAgVHlwZcOYbWF0aWNhIGhhbmRsZXIhJyk7XG5cdH1cblxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG8sIEluc3RhbmNlUHJvdG90eXBlKTtcblx0Ly8gQHRzLWlnbm9yZVxuXHRyZXR1cm4gdGhpcztcblxufSBhcyB7XG5cdG5ldzxUIGV4dGVuZHMgb2JqZWN0IHwge30+KF90YXJnZXQ/OiBULCBvcHRpb25zPzogVHlwZW9tYXRpY2FPcHRpb25zKTogVFxuXHQ8VCBleHRlbmRzIG9iamVjdCB8IHt9LCBTIGV4dGVuZHMgVD4oX3RhcmdldD86IFMgZXh0ZW5kcyBpbmZlciBTID8gUyA6IHt9LCBvcHRpb25zPzogVHlwZW9tYXRpY2FPcHRpb25zKTogU1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuZXhwb3J0IGNsYXNzIEJhc2VDbGFzcyB7XG5cdGNvbnN0cnVjdG9yKF90YXJnZXQ/OiBvYmplY3QsIG9wdGlvbnM/OiBUeXBlb21hdGljYU9wdGlvbnMpIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKHRoaXNbU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZV0pIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldCA9IGJhc2VUYXJnZXQoX3RhcmdldCkgYXMgb2JqZWN0O1xuXHRcdGNvbnN0IHByb3h5ID0gZ2V0VHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZSh0YXJnZXQsIG9wdGlvbnMpO1xuXHRcdGxldCBwcm90bzogb2JqZWN0IHwgbnVsbCA9IHRoaXM7XG5cdFx0bGV0IHByb3RvUG9pbnRlcjogb2JqZWN0IHwgbnVsbDtcblx0XHRsZXQgZm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0XHRkbyB7XG5cdFx0XHRwcm90b1BvaW50ZXIgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXHRcdFx0Ly8gaWYgKHByb3RvUG9pbnRlcltTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlXSkge1xuXHRcdFx0Ly8gXHR0aHJvdyBuZXcgRXJyb3IoJ0RvdWJsZSBUeXBlw5htYXRpY2EgZXh0ZW5zaW9uIGlzIG5vdCBhbGxvd2VkIScpO1xuXHRcdFx0Ly8gfVxuXHRcdFx0aWYgKHByb3RvUG9pbnRlciA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Lypcblx0XHRcdC8vIGl0IGNhbiBiZSwgdGhhdCBwcm90b1BvaW50ZXIgPT09IG51bGxcblx0XHRcdC8vIHRob3VnaCB0b28gaGFyZCB0byBpbXBsZW1lbnQgdGhpcyB0ZXN0XG5cdFx0XHQqL1xuXHRcdFx0cHJvdG8gPSBwcm90b1BvaW50ZXI7XG5cdFx0fSB3aGlsZSAoIWZvdW5kKTtcblx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG8sIHByb3h5KTtcblx0fVxufVxuXG5cbmNvbnN0IHN0cmljdCA9IGZ1bmN0aW9uIChfdGFyZ2V0Pzogb2JqZWN0LCBvcHRpb25zPzogVHlwZW9tYXRpY2FPcHRpb25zKSB7XG5cdGNvbnN0IGRlY29yYXRvciA9IGZ1bmN0aW9uPFQ+KGNzdHI6IFQpOiBUIHtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoY3N0ci5wcm90b3R5cGVbU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZV0pIHtcblx0XHRcdHJldHVybiBjc3RyO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldCA9IGJhc2VUYXJnZXQoX3RhcmdldCk7XG5cdFx0Y29uc3QgcHJveHkgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgX3JlcGxhY2VyID0gT2JqZWN0LmNyZWF0ZShwcm94eSk7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNzdHIucHJvdG90eXBlLCBfcmVwbGFjZXIpO1xuXG5cdFx0cmV0dXJuIGNzdHI7XG5cblxuXHRcdC8vIGNvbnN0IE15Q2xhc3NQcm94eSA9IG5ldyBQcm94eShjc3RyLCB7XG5cdFx0Ly8gXHRjb25zdHJ1Y3QoXywgYXJndW1lbnRzTGlzdCwgbmV3VGFyZ2V0KSB7XG5cdFx0Ly8gXHRcdGRlYnVnZ2VyO1xuXHRcdC8vIFx0XHRjb25zdCB0YXJnZXQgPSBiYXNlVGFyZ2V0KF90YXJnZXQpO1xuXHRcdC8vIFx0XHRjb25zdCBwcm94eSA9IGdldFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UodGFyZ2V0KTtcblx0XHQvLyBcdFx0Y29uc3QgX3JlcGxhY2VyID0gT2JqZWN0LmNyZWF0ZShwcm94eSk7XG5cblx0XHQvLyBcdFx0Y29uc3QgX3Byb3RvID0gY3N0ci5wcm90b3R5cGU7XG5cblx0XHQvLyBcdFx0Y29uc3QgcHJvdG8gPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pKTtcblx0XHQvLyBcdFx0cHJvdG8uaUFtUHJvdG8gPSB0cnVlO1xuXG5cdFx0Ly8gXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihjc3RyLnByb3RvdHlwZSwgcHJvdG8pO1xuXG5cdFx0Ly8gXHRcdGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoX3Byb3RvKTtcblx0XHQvLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocHJvdG8sIGRlc2NyaXB0b3JzKTtcblxuXHRcdC8vIFx0XHRjb25zdCByZXBsYWNlciA9IE9iamVjdC5jcmVhdGUoX3JlcGxhY2VyKTtcblx0XHQvLyBcdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCByZXBsYWNlcik7XG5cblxuXHRcdC8vIFx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY3N0ci5wcm90b3R5cGUsIHByb3RvKTtcblx0XHQvLyBcdFx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoY3N0ciwgYXJndW1lbnRzTGlzdCwgbmV3VGFyZ2V0KTtcblxuXHRcdC8vIFx0XHRkZWJ1Z2dlcjtcblx0XHQvLyBcdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNzdHIucHJvdG90eXBlLCBfcHJvdG8pO1xuXHRcdC8vIFx0XHRkZWJ1Z2dlcjtcblxuXHRcdC8vIFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdC8vIFx0fSxcblx0XHQvLyB9KTtcblx0XHQvLyByZXR1cm4gTXlDbGFzc1Byb3h5O1xuXHR9O1xuXG5cdHJldHVybiBkZWNvcmF0b3I7XG5cbn07XG5leHBvcnQgY29uc3QgeyBTeW1ib2xJbml0aWFsVmFsdWUgfSA9IEZpZWxkQ29uc3RydWN0b3I7XG5leHBvcnQgY29uc3QgU3RyaWN0ID0gc3RyaWN0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdCYXNlQ2xhc3MnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gQmFzZUNsYXNzO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ0ZpZWxkQ29uc3RydWN0b3InLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gRmllbGRDb25zdHJ1Y3Rvcjtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdTeW1ib2xJbml0aWFsVmFsdWUnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gU3ltYm9sSW5pdGlhbFZhbHVlO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZTtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdiYXNlVGFyZ2V0Jywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIGJhc2VUYXJnZXQ7XG5cdH0sXG5cdGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnU3RyaWN0Jywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIHN0cmljdDtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5mcmVlemUoQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlKTtcbk9iamVjdC5mcmVlemUoQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlLnByb3RvdHlwZSk7XG4iXX0=
\ No newline at end of file
diff --git a/lib/types/functions.js b/lib/types/functions.js
index e68ef6c..6138a3a 100644
--- a/lib/types/functions.js
+++ b/lib/types/functions.js
@@ -6,3 +6,4 @@ const functions = () => {
throw new TypeError(errors_1.ErrorsNames.RIP_FUNCTIONS);
};
exports.functions = functions;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2Z1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7OztBQUViLHNDQUF3QztBQUVqQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7SUFDN0IsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvQkFBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUZXLFFBQUEsU0FBUyxhQUVwQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRXJyb3JzTmFtZXMgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25zID0gKCkgPT4ge1xuXHR0aHJvdyBuZXcgVHlwZUVycm9yKEVycm9yc05hbWVzLlJJUF9GVU5DVElPTlMpO1xufTsiXX0=
\ No newline at end of file
diff --git a/lib/types/index.js b/lib/types/index.js
index fe918e7..bcb8339 100644
--- a/lib/types/index.js
+++ b/lib/types/index.js
@@ -20,3 +20,4 @@ const isPrimitive = (value) => {
return PRIMITIVE_TYPES.includes(typeof value);
};
exports.isPrimitive = isPrimitive;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7QUFFYix5Q0FBd0M7QUFBL0Isc0dBQUEsU0FBUyxPQUFBO0FBQ2xCLHFDQUFvQztBQUEzQixrR0FBQSxPQUFPLE9BQUE7QUFDaEIscUNBQW9DO0FBQTNCLGtHQUFBLE9BQU8sT0FBQTtBQUNoQiwyQ0FBMEM7QUFBakMsd0dBQUEsVUFBVSxPQUFBO0FBQ25CLHFDQUFvQztBQUEzQixrR0FBQSxPQUFPLE9BQUE7QUFFaEIsTUFBTSxlQUFlLEdBQUc7SUFDdkIsUUFBUTtJQUNSLFFBQVE7SUFDUixTQUFTO0NBQ1QsQ0FBQztBQUVLLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7SUFDN0MsT0FBTyxlQUFlLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRlcsUUFBQSxXQUFXLGVBRXRCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgeyBmdW5jdGlvbnMgfSBmcm9tICcuL2Z1bmN0aW9ucyc7XG5leHBvcnQgeyBudWxsaXNoIH0gZnJvbSAnLi9udWxsaXNoJztcbmV4cG9ydCB7IG9iamVjdHMgfSBmcm9tICcuL29iamVjdHMnO1xuZXhwb3J0IHsgcHJpbWl0aXZlcyB9IGZyb20gJy4vcHJpbWl0aXZlcyc7XG5leHBvcnQgeyBzcGVjaWFsIH0gZnJvbSAnLi9zcGVjaWFsJztcblxuY29uc3QgUFJJTUlUSVZFX1RZUEVTID0gW1xuXHQnc3RyaW5nJyxcblx0J251bWJlcicsXG5cdCdib29sZWFuJyxcbl07XG5cbmV4cG9ydCBjb25zdCBpc1ByaW1pdGl2ZSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuXHRyZXR1cm4gUFJJTUlUSVZFX1RZUEVTLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSk7XG59O1xuIl19
\ No newline at end of file
diff --git a/lib/types/nullish.js b/lib/types/nullish.js
index 70a9ebc..26d2d1a 100644
--- a/lib/types/nullish.js
+++ b/lib/types/nullish.js
@@ -14,3 +14,4 @@ const nullish = (value) => {
};
};
exports.nullish = nullish;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVsbGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9udWxsaXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsc0NBQXdDO0FBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDeEMsT0FBTztRQUNOLEdBQUc7WUFDRixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHO1lBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsb0JBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxNQUFNLEtBQUssQ0FBQztRQUNiLENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBVlcsUUFBQSxPQUFPLFdBVWxCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFcnJvcnNOYW1lcyB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBudWxsaXNoID0gKHZhbHVlOiBvYmplY3QpID0+IHtcblx0cmV0dXJuIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0XHRzZXQoKSB7XG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoRXJyb3JzTmFtZXMuVFlQRV9NSVNNQVRDSCk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH07XG59OyJdfQ==
\ No newline at end of file
diff --git a/lib/types/objects.js b/lib/types/objects.js
index fd142a9..3075617 100644
--- a/lib/types/objects.js
+++ b/lib/types/objects.js
@@ -18,3 +18,4 @@ const objects = (value) => {
};
};
exports.objects = objects;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9vYmplY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsc0NBQXdDO0FBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDeEMsT0FBTztRQUNOLEdBQUc7WUFDRixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHLENBQUMsZ0JBQXlCO1lBQzVCLElBQUksZ0JBQWdCLFlBQVksTUFBTSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzlGLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztnQkFDekIsT0FBTyxLQUFLLENBQUM7WUFDZCxDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsb0JBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxNQUFNLEtBQUssQ0FBQztRQUNiLENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBZFcsUUFBQSxPQUFPLFdBY2xCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFcnJvcnNOYW1lcyB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBvYmplY3RzID0gKHZhbHVlOiBvYmplY3QpID0+IHtcblx0cmV0dXJuIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0XHRzZXQocmVwbGFjZW1lbnRWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0aWYgKHJlcGxhY2VtZW50VmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgcmVwbGFjZW1lbnRWYWx1ZS5jb25zdHJ1Y3RvciA9PT0gdmFsdWUuY29uc3RydWN0b3IpIHtcblx0XHRcdFx0dmFsdWUgPSByZXBsYWNlbWVudFZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoRXJyb3JzTmFtZXMuVFlQRV9NSVNNQVRDSCk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH07XG59OyJdfQ==
\ No newline at end of file
diff --git a/lib/types/primitives.js b/lib/types/primitives.js
index 4753ce5..034cd1f 100644
--- a/lib/types/primitives.js
+++ b/lib/types/primitives.js
@@ -47,3 +47,4 @@ const primitives = (initialValue) => {
};
};
exports.primitives = primitives;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWl0aXZlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9wcmltaXRpdmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsc0NBQXdDO0FBRWpDLE1BQU0sVUFBVSxHQUFHLENBQUMsWUFBb0IsRUFBRSxFQUFFO0lBQ2xELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqQyxNQUFNLFdBQVcsR0FBRyxPQUFPLFlBQVksQ0FBQztJQUV4QyxPQUFPO1FBQ04sR0FBRztZQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFFckMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJO29CQUNWLElBQUksSUFBSSxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDakMsT0FBTyxVQUFVLElBQVk7NEJBQzVCLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dDQUMxQixNQUFNLElBQUksY0FBYyxDQUFDLG9CQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7NEJBQ3JELENBQUM7NEJBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3hCLENBQUMsQ0FBQztvQkFDSCxDQUFDO29CQUVELElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUN4QixPQUFPOzRCQUNOLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN4QixDQUFDLENBQUM7b0JBQ0gsQ0FBQztvQkFHRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLEVBQUUsQ0FBQzt3QkFDckMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoQyxDQUFDO29CQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0IsT0FBTyxNQUFNLENBQUM7Z0JBQ2YsQ0FBQzthQUNELENBQUMsQ0FBQztZQUNILE9BQU8sWUFBWSxDQUFDO1FBQ3JCLENBQUM7UUFhRCxHQUFHLENBQUMsZ0JBQXlCO1lBQzVCLElBQUksZ0JBQWdCLFlBQVksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuRCxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3pCLE9BQU8sS0FBSyxDQUFDO1lBQ2QsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTFDLElBQUksUUFBUSxZQUFZLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDM0MsS0FBSyxHQUFHLFFBQVEsQ0FBQztnQkFDakIsT0FBTyxLQUFLLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsb0JBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxNQUFNLEtBQUssQ0FBQztRQUNiLENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBaEVXLFFBQUEsVUFBVSxjQWdFckIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IEVycm9yc05hbWVzIH0gZnJvbSAnLi4vZXJyb3JzJztcblxuZXhwb3J0IGNvbnN0IHByaW1pdGl2ZXMgPSAoaW5pdGlhbFZhbHVlOiBvYmplY3QpID0+IHtcblx0bGV0IHZhbHVlID0gT2JqZWN0KGluaXRpYWxWYWx1ZSk7XG5cdGNvbnN0IGluaXRpYWxUeXBlID0gdHlwZW9mIGluaXRpYWxWYWx1ZTtcblxuXHRyZXR1cm4ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHByb3h5QXNWYWx1ZSA9IG5ldyBQcm94eSh2YWx1ZSwge1xuXHRcdFx0XHQvLyBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuXHRcdFx0XHRnZXQoXywgcHJvcCkge1xuXHRcdFx0XHRcdGlmIChwcm9wID09PSBTeW1ib2wudG9QcmltaXRpdmUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoaGludDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChoaW50ICE9PSBpbml0aWFsVHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihFcnJvcnNOYW1lcy5BQ0NFU1NfREVOSUVEKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWUudmFsdWVPZigpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocHJvcCA9PT0gJ3ZhbHVlT2YnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWUudmFsdWVPZigpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0aWYgKHZhbHVlW3Byb3BdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVtwcm9wXS5iaW5kKHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBhbnN3ZXIgPSB2YWx1ZVtwcm9wXTtcblx0XHRcdFx0XHRyZXR1cm4gYW5zd2VyO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBwcm94eUFzVmFsdWU7XG5cdFx0fSxcblx0XHQvLyBnZXQoKSB7XG5cdFx0Ly8gXHRjb25zdCBwcmVwYXJlZFZhbHVlID0ge1xuXHRcdC8vIFx0XHRbU3ltYm9sLnRvUHJpbWl0aXZlXSgpIHtcblx0XHQvLyBcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdC8vIFx0XHRcdFx0dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKEVycm9yc05hbWVzLkFDQ0VTU19ERU5JRUQpO1xuXHRcdC8vIFx0XHRcdH07XG5cdFx0Ly8gXHRcdH1cblx0XHQvLyBcdH07XG5cdFx0Ly8gXHRSZWZsZWN0LnNldFByb3RvdHlwZU9mKHByZXBhcmVkVmFsdWUsIHZhbHVlKTtcblx0XHQvLyBcdGRlYnVnZ2VyO1xuXHRcdC8vIFx0cmV0dXJuIHByZXBhcmVkVmFsdWU7XG5cdFx0Ly8gfSxcblx0XHRzZXQocmVwbGFjZW1lbnRWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0aWYgKHJlcGxhY2VtZW50VmFsdWUgaW5zdGFuY2VvZiB2YWx1ZS5jb25zdHJ1Y3Rvcikge1xuXHRcdFx0XHR2YWx1ZSA9IHJlcGxhY2VtZW50VmFsdWU7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcHJldmFsdWUgPSBPYmplY3QocmVwbGFjZW1lbnRWYWx1ZSk7XG5cblx0XHRcdGlmIChwcmV2YWx1ZSBpbnN0YW5jZW9mIHZhbHVlLmNvbnN0cnVjdG9yKSB7XG5cdFx0XHRcdHZhbHVlID0gcHJldmFsdWU7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKEVycm9yc05hbWVzLlRZUEVfTUlTTUFUQ0gpO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9O1xufTsiXX0=
\ No newline at end of file
diff --git a/lib/types/special.js b/lib/types/special.js
index ed7c56b..bdbb388 100644
--- a/lib/types/special.js
+++ b/lib/types/special.js
@@ -18,3 +18,4 @@ const special = (value) => {
};
};
exports.special = special;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9zcGVjaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsc0NBQXdDO0FBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDeEMsT0FBTztRQUNOLEdBQUc7WUFDRixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHLENBQUMsZ0JBQXdCO1lBQzNCLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUM5QyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3pCLE9BQU8sS0FBSyxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLG9CQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkQsTUFBTSxLQUFLLENBQUM7UUFDYixDQUFDO0tBQ0QsQ0FBQztBQUNILENBQUMsQ0FBQztBQWRXLFFBQUEsT0FBTyxXQWNsQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRXJyb3JzTmFtZXMgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3Qgc3BlY2lhbCA9ICh2YWx1ZTogb2JqZWN0KSA9PiB7XG5cdHJldHVybiB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0sXG5cdFx0c2V0KHJlcGxhY2VtZW50VmFsdWU6IG9iamVjdCkge1xuXHRcdFx0aWYgKHR5cGVvZiByZXBsYWNlbWVudFZhbHVlID09PSB0eXBlb2YgdmFsdWUpIHtcblx0XHRcdFx0dmFsdWUgPSByZXBsYWNlbWVudFZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoRXJyb3JzTmFtZXMuVFlQRV9NSVNNQVRDSCk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH07XG59OyJdfQ==
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 33498a0..01036b5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "typeomatica",
- "version": "0.3.55",
+ "version": "0.3.57",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "typeomatica",
- "version": "0.3.55",
+ "version": "0.3.57",
"license": "MIT",
"devDependencies": {
"@eslint/eslintrc": "^3.3.3",
diff --git a/package.json b/package.json
index e4e42c8..332312b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "typeomatica",
- "version": "0.3.55",
+ "version": "0.3.57",
"description": "type logic against javascript metaprogramming",
"engines": {
"node": ">=16"
diff --git a/src/index.ts b/src/index.ts
index 1140236..8a5cc64 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -15,40 +15,48 @@ import {
import { FieldConstructor } from './fields';
-const resolver = Object.entries({
- primitives,
- special,
- nullish,
- objects,
- functions
-}).reduce((obj: object, [key, _handler]) => {
- // @ts-ignore
- obj[key] = function (initialValue: object, receiver: object) {
- const handler = _handler(initialValue);
- return {
- get() {
- const invocationThis = this;
- if (invocationThis !== receiver) {
- throw new ReferenceError(ErrorsNames.ACCESS_DENIED);
- }
- const result = handler.get();
- return result;
- },
- set(replacementValue: unknown) {
- const invocationThis = this;
- if (invocationThis !== receiver) {
- throw new ReferenceError(ErrorsNames.ACCESS_DENIED);
+export interface TypeomaticaOptions {
+ strictAccessCheck?: boolean;
+}
+
+const createResolver = (options: TypeomaticaOptions = {}) => {
+ const { strictAccessCheck = false } = options;
+
+ return Object.entries({
+ primitives,
+ special,
+ nullish,
+ objects,
+ functions
+ }).reduce((obj: object, [key, _handler]) => {
+ // @ts-ignore
+ obj[key] = function (initialValue: object, receiver: object) {
+ const handler = _handler(initialValue);
+ return {
+ get() {
+ const invocationThis = this;
+ if (strictAccessCheck && invocationThis !== receiver) {
+ throw new ReferenceError(ErrorsNames.ACCESS_DENIED);
+ }
+ const result = handler.get();
+ return result;
+ },
+ set(replacementValue: unknown) {
+ const invocationThis = this;
+ if (strictAccessCheck && invocationThis !== receiver) {
+ throw new ReferenceError(ErrorsNames.ACCESS_DENIED);
+ }
+ const result = handler.set(replacementValue);
+ return result;
}
- const result = handler.set(replacementValue);
- return result;
- }
+ };
};
- };
- return obj;
-}, {});
+ return obj;
+ }, {});
+};
-const createProperty = (propName: string, initialValue: unknown, receiver: object) => {
+const createProperty = (propName: string, initialValue: unknown, receiver: object, options?: TypeomaticaOptions) => {
const value = initialValue;
const valueIsPrimitive = isPrimitive(initialValue);
@@ -69,6 +77,8 @@ const createProperty = (propName: string, initialValue: unknown, receiver: objec
)
);
+ const resolver = createResolver(options);
+
const descriptor = (isObject && (value instanceof FieldConstructor)) ?
value
:
@@ -103,7 +113,7 @@ const hasNodeInspect = (util && util.inspect && util.inspect.custom);
// oxlint-disable-next-line no-unused-expressions
(hasNodeInspect && (props2skip.add(util.inspect.custom)));
-const handlers = {
+const createHandlers = (options?: TypeomaticaOptions) => ({
get(target: object, prop: string | symbol, receiver: object) {
const result = Reflect.get(target, prop, receiver);
if (result !== undefined) {
@@ -129,27 +139,25 @@ const handlers = {
throw new Error(errorMessage);
},
set(_: object, prop: string, value: unknown, receiver: object) {
- const result = createProperty(prop, value, receiver);
+ const result = createProperty(prop, value, receiver, options);
return result;
},
setPrototypeOf() {
- throw new Error('Setting prototype is not allowed!');
+ throw new Error('Setting prototype is not allowed!');
},
// defineProperty(target: object, key: string, descriptor: object) {
defineProperty() {
- throw new Error('Defining new Properties is not allowed!');
+ throw new Error('Defining new Properties is not allowed!');
// Reflect.defineProperty(target, key, descriptor);
},
deleteProperty() {
- throw new Error('Properties Deletion is not allowed!');
+ throw new Error('Properties Deletion is not allowed!');
},
// getPrototypeOf() {
// debugger;
// throw new Error('Getting prototype is not allowed');
// },
-};
-
-Object.freeze(handlers);
+});
// user have to precisely define all props
export const baseTarget = (_proto?: object) => {
@@ -159,7 +167,7 @@ export const baseTarget = (_proto?: object) => {
};
export const SymbolTypeomaticaProxyReference = Symbol('TypeØmaticaProxyReference');
-const getTypeomaticaProxyReference = (_target: object) => {
+const getTypeomaticaProxyReference = (_target: object, options?: TypeomaticaOptions) => {
const target = Object.create(_target);
const id = `TypeØmaticaProxyReference-${Math.random()}`;
Object.defineProperty(target, SymbolTypeomaticaProxyReference, {
@@ -167,12 +175,13 @@ const getTypeomaticaProxyReference = (_target: object) => {
return id;
}
});
+ const handlers = createHandlers(options);
const proxy = new Proxy(target, handlers);
return proxy;
};
-export const BaseConstructorPrototype = function (this: S extends T ? S : {}, _target?: T ): T {
+export const BaseConstructorPrototype = function (this: S extends T ? S : {}, _target?: T, options?: TypeomaticaOptions ): T {
if (!new.target) {
const self: {
@@ -180,7 +189,7 @@ export const BaseConstructorPrototype = function
constructor: typeof BaseConstructorPrototype
}
//@ts-ignore
- } = BaseConstructorPrototype.bind(this, _target);
+ } = BaseConstructorPrototype.bind(this, _target, options);
self.prototype = {
constructor: BaseConstructorPrototype
@@ -199,7 +208,7 @@ export const BaseConstructorPrototype = function
const target = baseTarget(_target) as object;
- const InstancePrototype = getTypeomaticaProxyReference(target);
+ const InstancePrototype = getTypeomaticaProxyReference(target, options);
let proto;
let protoPointer = this as object;
@@ -237,8 +246,8 @@ export const BaseConstructorPrototype = function
return this;
} as {
- new(_target?: T): T
- (_target?: S extends infer S ? S : {}): S
+ new(_target?: T, options?: TypeomaticaOptions): T
+ (_target?: S extends infer S ? S : {}, options?: TypeomaticaOptions): S
};
Object.defineProperty(module, 'exports', {
@@ -249,14 +258,14 @@ Object.defineProperty(module, 'exports', {
});
export class BaseClass {
- constructor(_target?: object) {
+ constructor(_target?: object, options?: TypeomaticaOptions) {
// @ts-ignore
if (this[SymbolTypeomaticaProxyReference]) {
return this;
}
const target = baseTarget(_target) as object;
- const proxy = getTypeomaticaProxyReference(target);
+ const proxy = getTypeomaticaProxyReference(target, options);
let proto: object | null = this;
let protoPointer: object | null;
let found: boolean = false;
@@ -280,7 +289,7 @@ export class BaseClass {
}
-const strict = function (_target?: object) {
+const strict = function (_target?: object, options?: TypeomaticaOptions) {
const decorator = function(cstr: T): T {
// @ts-ignore
@@ -289,7 +298,7 @@ const strict = function (_target?: object) {
}
const target = baseTarget(_target);
- const proxy = getTypeomaticaProxyReference(target);
+ const proxy = getTypeomaticaProxyReference(target, options);
const _replacer = Object.create(proxy);
// @ts-ignore
diff --git a/test/index.ts b/test/index.ts
index 44bfe5c..1e928f5 100644
--- a/test/index.ts
+++ b/test/index.ts
@@ -73,7 +73,7 @@ class Base extends BasePrototype({
someMethod() {
return this.numberValue.valueOf();
},
-}) implements IBase {
+}, { strictAccessCheck: true }) implements IBase {
numberValue = 123;
stringValue: string;
booleanValue: boolean;
@@ -115,7 +115,7 @@ class SimpleBase extends BaseClass {
// ES2022
propString: string;
constructor() {
- super();
+ super(undefined, { strictAccessCheck: true });
this.propString = '123';
}
}
@@ -144,7 +144,7 @@ class TripleExtend extends SecondaryExtend { }
const tiripleExtendInstance = addTag(new TripleExtend);
// eslint-disable-next-line new-cap
-class NetworkedExtention extends BasePrototype(tiripleExtendInstance) { }
+class NetworkedExtention extends BasePrototype(tiripleExtendInstance, { strictAccessCheck: true }) { }
const networkedInstance = addTag(new NetworkedExtention);
@@ -227,6 +227,9 @@ const myFieldReSet = new MyFieldConstructorReSet('initial value for set check');
class MadeFieldClass extends BaseClass {
myField = myField as unknown | string;
+ constructor() {
+ super(undefined, { strictAccessCheck: true });
+ }
get [SymbolInitialValue]() {
const self = this;
return (fieldName: 'myField') => {
@@ -239,13 +242,28 @@ class MadeFieldClass extends BaseClass {
};
}
}
-class SecondMadeFieldClass extends BaseClass { myField = myField as unknown | string; }
+class SecondMadeFieldClass extends BaseClass {
+ myField = myField as unknown | string;
+ constructor() {
+ super(undefined, { strictAccessCheck: true });
+ }
+}
const madeFieldInstance = addTag(new MadeFieldClass);
const secondMadeFieldInstance = addTag(new MadeFieldClass);
const thirdMadeFieldInstance = addTag(new SecondMadeFieldClass);
-class MadeReGet extends BaseClass { myField = myFieldReGet as unknown | string; }
-class MadeReSet extends BaseClass { myField = myFieldReSet as unknown | string; }
+class MadeReGet extends BaseClass {
+ myField = myFieldReGet as unknown | string;
+ constructor() {
+ super(undefined, { strictAccessCheck: true });
+ }
+}
+class MadeReSet extends BaseClass {
+ myField = myFieldReSet as unknown | string;
+ constructor() {
+ super(undefined, { strictAccessCheck: true });
+ }
+}
const madeReGet = addTag(new MadeReGet);
const madeReSet = addTag(new MadeReSet);
@@ -420,6 +438,9 @@ describe('props tests', () => {
const wrongField = new WrongFieldConstructor(123);
class WithWrongField extends BaseClass {
erroredField = wrongField;
+ constructor() {
+ super(undefined, { strictAccessCheck: true });
+ }
}
new WithWrongField;
diff --git a/tsconfig.json b/tsconfig.json
index e5d5223..dce48a3 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -10,6 +10,10 @@
"extendedDiagnostics": true,
"forceConsistentCasingInFileNames": true,
+
+ "inlineSourceMap": true,
+ "inlineSources": true,
+
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noImplicitThis": true,