adaptive-extender 0.9.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,8 @@
1
- ## 0.9.1 (20.01.2026)
1
+ ## 0.9.3 (23.01.2026)
2
+ - Ported models no longer automatically receive a discriminator unless they are polymorphic descendants.
3
+ - Improved typing for `Model.export` and its descendants in `Descendant`, ensuring that data is handled as at least an `object` type.
4
+
5
+ ## 0.9.2 (20.01.2026)
2
6
  - Unified the `ImportableConstructor` and `ExportableConstructor` interfaces into `PortableConstructor`.
3
7
  - Improved typing for object porting; decorators now possess better context inference.
4
8
  - Moved `Constructor` to [global](./src/core/global.ts).
package/README.md CHANGED
@@ -1,7 +1,165 @@
1
- ## Adaptive extender
1
+ # Adaptive Extender
2
2
 
3
3
  [![NPM Version](https://img.shields.io/npm/v/adaptive-extender.svg)](https://www.npmjs.com/package/adaptive-extender)
4
4
 
5
- Adaptive library for JS/TS development environments
5
+ Adaptive library for JS/TS development environments.
6
+
7
+ **Adaptive Extender** is a comprehensive TypeScript library designed to bridge the gap between raw JavaScript primitives and high-level application logic. It augments native objects with fluent, intuitive APIs and provides robust systems for data modeling, time management, and asynchronous control flow.
6
8
 
7
9
  [Change log](./CHANGELOG.md)
10
+
11
+ ---
12
+
13
+ ## ⚡ Key Features & Problems Solved
14
+
15
+ ### 1. Type-Safe Data Portability (`Portable`)
16
+ **The Problem:**
17
+ Reading data from external sources (APIs, JSON files) usually results in `any` or untyped objects. Validating them requires verbose boilerplate repetitive mapping code. `JSON.parse` offers zero guarantees about shape or types.
18
+
19
+ **The Solution:**
20
+ The `Portable` system allows you to define strict schemas using decorators directly on your classes. It handles validation, type conversion, and polymorphic resolution automatically.
21
+
22
+ ```typescript
23
+ import { Model, Field, ArrayOf, Nullable } from "adaptive-extender/core";
24
+
25
+ // Define a model
26
+ class User extends Model {
27
+ @Field(String)
28
+ name: string = "";
29
+
30
+ @Field(Nullable(Number))
31
+ age: number | null = null;
32
+
33
+ @Field(ArrayOf(String))
34
+ tags: string[] = [];
35
+ }
36
+
37
+ // ❌ The Problem: Unsafe JSON
38
+ const rawData = JSON.parse('{"name": "Alice", "tags": ["admin"]}');
39
+
40
+ // ✅ The Solution: Typed Import
41
+ // Validates structure and types automatically. Throws informative errors if invalid.
42
+ const user = User.import(rawData, "api_response");
43
+
44
+ console.log(user instanceof User); // true
45
+ console.log(user.name); // "Alice"
46
+ ```
47
+
48
+ ### 2. First-Class Time Management (`Timespan`)
49
+ **The Problem:**
50
+ Calculating durations using raw milliseconds (e.g., `86400000` for a day) is prone to "magic number" errors and is hard to read. Converting back and forth between days, minutes, and milliseconds creates messy math in your business logic.
51
+
52
+ **The Solution:**
53
+ The `Timespan` class offers a structured, readable way to handle time intervals, inspired by robust systems like .NET.
54
+
55
+ ```typescript
56
+ import { Timespan } from "adaptive-extender/core";
57
+
58
+ // ❌ The Problem: Unreadable Math
59
+ // setTimeout(() => {}, 2 * 60 * 60 * 1000 + 30 * 1000);
60
+
61
+ // ✅ The Solution: Explicit Definition
62
+ const duration = Timespan.fromComponents(0, 2, 30, 0); // 0 days, 2 hours, 30 min
63
+
64
+ console.log(duration.valueOf()); // 9000000 (milliseconds)
65
+ console.log(`Duration: ${duration.hours}h ${duration.minutes}m`);
66
+
67
+ // Parsing support
68
+ const fromString = Timespan.parse("02:30:00.000");
69
+ ```
70
+
71
+ ### 3. Extended Native Prototypes
72
+ **The Problem:**
73
+ JavaScript's standard library often lacks convenient utility methods found in other languages. Developers often write repetitive helper functions like `isEmpty(str)` or manual `for` loops to generate number ranges.
74
+
75
+ **The Solution:**
76
+ Adaptive Extender safely adds non-enumerable, standard-compliant extensions to native prototypes (`Array`, `String`, `Math`, etc.), making your code more expressive.
77
+
78
+ #### String Utilities
79
+ ```typescript
80
+ // ❌ Original: Checks are verbose
81
+ if (str !== null && str !== undefined && str.trim() !== "") { ... }
82
+
83
+ // ✅ Extended: Clean & Readable
84
+ if (!String.isWhitespace(str)) { ... }
85
+
86
+ // Fallback values
87
+ const displayName = userInput.insteadWhitespace("files/default.png");
88
+ ```
89
+
90
+ #### Array Utilities
91
+ ```typescript
92
+ // ❌ Original: Manual loops for sequences
93
+ const nums = [];
94
+ for (let i = 0; i < 5; i++) nums.push(i);
95
+
96
+ // ✅ Extended: Python-like Range
97
+ const nums = Array.range(0, 5); // [0, 1, 2, 3, 4]
98
+
99
+ // Zipping arrays
100
+ const names = ["A", "B"];
101
+ const ages = [20, 30];
102
+ for (const [name, age] of Array.zip(names, ages)) {
103
+ console.log(`${name} is ${age}`);
104
+ }
105
+ ```
106
+
107
+ ### 4. Advanced Promise Control
108
+ **The Problem:**
109
+ Managing complex asynchronous states or checking if a promise has settled without awaiting it can be difficult.
110
+
111
+ **The Solution:**
112
+ Extensions to `Promise` and the `Promisable<T>` type simplify async workflows.
113
+
114
+ ```typescript
115
+ import { type Promisable } from "adaptive-extender/core";
116
+
117
+ // Unified type for Sync or Async values
118
+ function process(input: Promisable<string>) {
119
+ // ...
120
+ }
121
+
122
+ // Check status (async check)
123
+ if (await mytask.isSettled) {
124
+ console.log("Task finished");
125
+ }
126
+ ```
127
+
128
+ ---
129
+
130
+ ## 📦 Modules
131
+
132
+ The library is split into scopes to keep your bundle size optimal:
133
+
134
+ - **`adaptive-extender/core`**:
135
+ Platform-agnostic utilities (Math, Primitives, Time, Portable System). Works in Node.js, Deno, and Browser.
136
+
137
+ - **`adaptive-extender/node`**:
138
+ Node.js specific extensions (Environment, File System processing).
139
+
140
+ - **`adaptive-extender/web`**:
141
+ Browser specific DOM extensions (Element, ParentNode hooks).
142
+
143
+ ---
144
+
145
+ ## 🚀 Installation
146
+
147
+ ```bash
148
+ npm install adaptive-extender
149
+ ```
150
+
151
+ ## 🛠 Usage
152
+
153
+ Simply import the module to activate the extensions.
154
+
155
+ ```typescript
156
+ // Import core to register global proto extensions
157
+ import "adaptive-extender/core";
158
+
159
+ // Use features
160
+ const list = Array.range(1, 10);
161
+ ```
162
+
163
+ ## 📄 License
164
+
165
+ Apache-2.0
@@ -0,0 +1,17 @@
1
+ import { type Constructor, type PortableConstructor } from "./portable.js";
2
+ export interface PortableField<T> extends Constructor {
3
+ import(source: unknown, name: string): T;
4
+ export(source: T): unknown;
5
+ }
6
+ export interface DeferredCallback<T> {
7
+ (): T;
8
+ }
9
+ export declare function Scheme<T>(type: PortableField<T>, name?: string): (target: void, context: ClassFieldDecoratorContext<PortableModel, unknown>) => void;
10
+ export declare function PolymorphicBase<T extends typeof PortableModel>(resolver: DeferredCallback<PortableConstructor[]>): (target: T, context: ClassDecoratorContext) => T;
11
+ export declare function ArrayOf<T>(type: PortableField<T>): PortableField<T[]>;
12
+ export declare function Nullable<T>(type: PortableField<T>): PortableField<T | null>;
13
+ export declare function Optional<T>(type: PortableField<T>): PortableField<T | undefined>;
14
+ export declare abstract class PortableModel {
15
+ static import<T extends typeof PortableModel>(this: T, source: unknown, name: string): InstanceType<T>;
16
+ static export<T extends typeof PortableModel>(this: T, source: InstanceType<T>): unknown;
17
+ }
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ import {} from "./portable.js";
3
+ //#region Field descriptor
4
+ class FieldDescriptor {
5
+ #key;
6
+ #association;
7
+ #type;
8
+ constructor(key, association, type) {
9
+ this.#key = key;
10
+ this.#association = association;
11
+ this.#type = type;
12
+ }
13
+ get key() {
14
+ return this.#key;
15
+ }
16
+ get association() {
17
+ return this.#association;
18
+ }
19
+ get type() {
20
+ return this.#type;
21
+ }
22
+ }
23
+ class DeferredResolver {
24
+ #resolver;
25
+ constructor(resolver) {
26
+ this.#resolver = resolver;
27
+ }
28
+ get value() {
29
+ return this.#resolver.call(this);
30
+ }
31
+ }
32
+ //#endregion
33
+ //#region Portability metadata
34
+ class PortabilityMetadata {
35
+ static #registry = new Map();
36
+ #model;
37
+ #fields = [];
38
+ #callback = null;
39
+ constructor(model) {
40
+ this.#model = model;
41
+ }
42
+ static register(model) {
43
+ const registry = PortabilityMetadata.#registry;
44
+ if (registry.has(model.name))
45
+ return; /** @todo Throw error */
46
+ const metadata = new PortabilityMetadata(model);
47
+ registry.set(model.name, metadata);
48
+ }
49
+ static read(model) {
50
+ const registry = PortabilityMetadata.#registry;
51
+ const record = registry.get(model.name);
52
+ const metadata = ReferenceError.suppress(record, "asdasdadsa"); /** @todo Write error */
53
+ return metadata;
54
+ }
55
+ get model() {
56
+ return this.#model;
57
+ }
58
+ get fields() {
59
+ return this.#fields;
60
+ }
61
+ get callback() {
62
+ return this.#callback;
63
+ }
64
+ set callback(value) {
65
+ this.#callback = value;
66
+ }
67
+ }
68
+ //#endregion
69
+ export function Scheme(type, name) {
70
+ return function (target, context) {
71
+ const key = context.name;
72
+ if (typeof key === "symbol")
73
+ throw new TypeError(""); /** @todo Write error */
74
+ const association = name ?? key;
75
+ context.addInitializer(function () {
76
+ const Type = constructor(this); /** @todo Fix constructor */
77
+ const { fields } = PortabilityMetadata.read(Type);
78
+ fields.push(new FieldDescriptor(key, association, type));
79
+ });
80
+ };
81
+ }
82
+ export function PolymorphicBase(resolver) {
83
+ return function (target) {
84
+ const metadata = PortabilityMetadata.read(target);
85
+ metadata.callback = resolver;
86
+ return target;
87
+ };
88
+ }
89
+ export function ArrayOf(type) {
90
+ return class {
91
+ static import(source, name) {
92
+ return Array.import(source, name).map((item, index) => type.import(item, `${name}[${index}]`));
93
+ }
94
+ static export(source) {
95
+ return source.map(item => type.export(item));
96
+ }
97
+ };
98
+ }
99
+ export function Nullable(type) {
100
+ return class {
101
+ static import(source, name) {
102
+ return Reflect.mapNull(source, source => type.import(source, name));
103
+ }
104
+ static export(source) {
105
+ return Reflect.mapNull(source, source => type.export(source));
106
+ }
107
+ };
108
+ }
109
+ export function Optional(type) {
110
+ return class {
111
+ static import(source, name) {
112
+ return Reflect.mapUndefined(source, source => type.import(source, name));
113
+ }
114
+ static export(source) {
115
+ return Reflect.mapUndefined(source, source => type.export(source));
116
+ }
117
+ };
118
+ }
119
+ export class PortableModel {
120
+ static {
121
+ PortabilityMetadata.register(this);
122
+ }
123
+ static import(source, name) {
124
+ const { callback, fields } = PortabilityMetadata.read(this);
125
+ if (callback !== null) {
126
+ const descendants = callback();
127
+ if (descendants.length > 1) {
128
+ const object = Object.import(source, name);
129
+ const typename = String.import(Reflect.get(object, "$type"), `${name}.$type`);
130
+ const subtype = descendants.find(subtype => subtype.name === typename);
131
+ if (subtype === undefined)
132
+ throw new TypeError(`Unknown polymorphic type '${typename}' for '${this.name}'`);
133
+ return subtype.import(source, name);
134
+ }
135
+ }
136
+ const object = Object.import(source, name);
137
+ const instance = Reflect.construct(this, []);
138
+ let current = this;
139
+ while (current && current !== PortableModel) {
140
+ for (const { key, association, type } of fields) {
141
+ const rawValue = Reflect.get(object, association);
142
+ const importedValue = type.import(rawValue, `${name}.${association}`);
143
+ Reflect.set(instance, key, importedValue);
144
+ }
145
+ current = Object.getPrototypeOf(current);
146
+ }
147
+ return instance;
148
+ }
149
+ static export(source) {
150
+ const { callback, fields } = PortabilityMetadata.read(this);
151
+ if (callback !== null) {
152
+ const descendants = callback();
153
+ if (descendants.length > 1) {
154
+ const subtype = descendants.find(subtype => source instanceof subtype);
155
+ if (subtype === undefined)
156
+ throw new TypeError(`Unknown polymorphic type '${typename}' for '${this.name}'`);
157
+ return subtype.export(source);
158
+ }
159
+ }
160
+ const result = Object();
161
+ Reflect.set(result, "$type", this.name);
162
+ let current = this;
163
+ while (current && current !== PortableModel) {
164
+ for (const { key, association, type } of fields) {
165
+ const value = Reflect.get(source, key);
166
+ const exportedValue = type.export(value);
167
+ Reflect.set(result, association, exportedValue);
168
+ }
169
+ current = Object.getPrototypeOf(current);
170
+ }
171
+ return result;
172
+ }
173
+ }
174
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/core/decorators.ts"],"names":[],"mappings":"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"}
@@ -29,30 +29,28 @@ export interface PortableConstructor<I = any, S = unknown> extends Constructor<I
29
29
  export declare abstract class Model {
30
30
  /**
31
31
  * Creates an instance of the model from a raw source.
32
- * Handles polymorphic resolution and recursive field mapping.
33
- * @param source The raw source object (e.g. from JSON).
32
+ * @param source The raw source object.
34
33
  * @param name The context path for error reporting.
35
34
  * @throws {TypeError} If validation fails or types do not match.
36
35
  */
37
36
  static import<I extends Model>(this: Constructor<I>, source: any, name: string): I;
38
37
  /**
39
38
  * Serializes the model instance to a raw object.
40
- * Includes type discrimination for polymorphic models.
41
39
  * @param source The model instance to export.
42
40
  */
43
- static export<I extends Model, S = any>(this: Constructor<I>, source: I): S;
41
+ static export<I extends Model, S extends object>(this: Constructor<I>, source: I): S;
44
42
  }
45
43
  /**
46
44
  * Decorator to register a class field as part of the portable schema.
47
45
  * @param type The portable constructor to use for import/export.
48
46
  */
49
- export declare function Field<M, S>(type: PortableConstructor<M, S>): (target: void, context: ClassFieldDecoratorContext<Model, S>) => void;
47
+ export declare function Field<M, S>(type: PortableConstructor<M, S>): (target: void, context: ClassFieldDecoratorContext<Model, M>) => void;
50
48
  /**
51
49
  * Decorator to register a class field as part of the portable schema.
52
50
  * @param type The portable constructor to use for import/export.
53
51
  * @param name Alias for the field in the external source.
54
52
  */
55
- export declare function Field<M, S>(type: PortableConstructor<M, S>, name: string): (target: void, context: ClassFieldDecoratorContext<Model, S>) => void;
53
+ export declare function Field<M, S>(type: PortableConstructor<M, S>, name: string): (target: void, context: ClassFieldDecoratorContext<Model, M>) => void;
56
54
  /**
57
55
  * Creates a portable wrapper for array types.
58
56
  * @param type The portable type of the array elements.
@@ -77,7 +75,7 @@ export declare function Deferred<M, S>(resolver: (_: void) => PortableConstructo
77
75
  * Decorator to register a descendant class in the base class's polymorphic registry.
78
76
  * @param descendant The subclass constructor to register.
79
77
  */
80
- export declare function Descendant<M extends typeof Model>(descendant: PortableConstructor): (target: M, context: ClassDecoratorContext) => void;
78
+ export declare function Descendant<M extends typeof Model>(descendant: PortableConstructor<Model, object>): (target: M, context: ClassDecoratorContext) => void;
81
79
  /**
82
80
  * A portable adapter that facilitates the conversion between `Date` instances and millisecond timestamps.
83
81
  */
@@ -57,7 +57,7 @@ class PortabilityMetadata {
57
57
  }
58
58
  }
59
59
  //#endregion
60
- //#region Portable model
60
+ //#region Model
61
61
  /**
62
62
  * The abstract base class for all portable data models.
63
63
  * Provides mechanism for type-safe import and export of data structures.
@@ -65,8 +65,7 @@ class PortabilityMetadata {
65
65
  export class Model {
66
66
  /**
67
67
  * Creates an instance of the model from a raw source.
68
- * Handles polymorphic resolution and recursive field mapping.
69
- * @param source The raw source object (e.g. from JSON).
68
+ * @param source The raw source object.
70
69
  * @param name The context path for error reporting.
71
70
  * @throws {TypeError} If validation fails or types do not match.
72
71
  */
@@ -93,7 +92,6 @@ export class Model {
93
92
  }
94
93
  /**
95
94
  * Serializes the model instance to a raw object.
96
- * Includes type discrimination for polymorphic models.
97
95
  * @param source The model instance to export.
98
96
  */
99
97
  static export(source) {
@@ -103,15 +101,16 @@ export class Model {
103
101
  const descendant = descendants.find(descendant => source instanceof descendant);
104
102
  if (descendant === undefined)
105
103
  throw new TypeError(`Invalid '${typename(source)}' type for source`);
106
- return descendant.export(source);
104
+ const exported = descendant.export(source);
105
+ Reflect.set(exported, "$type", descendant.name);
106
+ return exported;
107
107
  }
108
- const object = Object();
109
- Reflect.set(object, "$type", model.name);
108
+ const object = new Object();
110
109
  const { fields } = PortabilityMetadata.read(model);
111
- for (const field of fields.values()) {
112
- const value = Reflect.get(source, field.key);
113
- const raw = field.type.export(value);
114
- Reflect.set(object, field.association, raw);
110
+ for (const { key, association, type } of fields.values()) {
111
+ const value = Reflect.get(source, key);
112
+ const raw = type.export(value);
113
+ Reflect.set(object, association, raw);
115
114
  }
116
115
  return object;
117
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"portable.js","sourceRoot":"","sources":["../../src/core/portable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"portable.js","sourceRoot":"","sources":["../../src/core/portable.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adaptive-extender",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "description": "Adaptive library for JS/TS development environments",
5
5
  "type": "module",
6
6
  "main": "./dist/core/index.js",
@@ -51,7 +51,7 @@
51
51
  "build:web": "tsc -p ./src/web/tsconfig.json",
52
52
  "build": "npm run build:core && npm run build:node && npm run build:web",
53
53
 
54
- "test": "vitest",
54
+ "test": "vitest run",
55
55
  "coverage": "vitest run --coverage"
56
56
  },
57
57
  "devDependencies": {
@@ -1,19 +0,0 @@
1
- /**
2
- * Defines the interface for an archivable object's prototype.
3
- * @template S The type of the notation returned by the export method.
4
- */
5
- export interface ArchivablePrototype<S = any> {
6
- /**
7
- * Creates a new instance of the archivable object.
8
- */
9
- new (...args: any): any;
10
- /**
11
- * Imports data from a source and returns a new instance.
12
- * @throws {TypeError} If unable to import the source.
13
- */
14
- import(source: any, name: string): InstanceType<this>;
15
- /**
16
- * Exports the state of an instance to a notation.
17
- */
18
- export(source: InstanceType<this>): S;
19
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- export {};
3
- //# sourceMappingURL=archivable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archivable.js","sourceRoot":"","sources":["../../src/core/archivable.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC"}