vla 0.1.3 → 0.1.5

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/README.md CHANGED
@@ -1,8 +1,11 @@
1
- # Vla
2
-
3
- _A smooth dutch dessert that goes with everything._
4
-
5
- A TypeScript data layer kernel for backend- and fullstack apps. Compatible with whatever framework or library you're using.
1
+ <p align="center">
2
+ <img src=".github/logo-large.png" width="400px" align="center" alt="Vla Logo" />
3
+ <h1 align="center">Vla Smooth TypeScript Backends</h1>
4
+ <p align="center">
5
+ Vla is the missing backend layer for scalable TypeScript apps that integrates into any framework and existing codebases.
6
+ </p>
7
+ </p>
8
+ <br/>
6
9
 
7
10
  🚧 WIP, under development. Exports and names will very likely change often.
8
11
 
@@ -21,6 +24,12 @@ A TypeScript data layer kernel for backend- and fullstack apps. Compatible with
21
24
  - 🏗️ error handling
22
25
  - ...
23
26
 
27
+ ## Install
28
+
29
+ ```console
30
+ npm install vla
31
+ ```
32
+
24
33
  ## Why?
25
34
 
26
35
  Many fullstack frameworks lack structure and conventions on the backend side (data layer), but they have lots of good structure and conventions on the frontend side (presentation layer). They are still great frameworks and they all have their own strengths. This is where Vla comes in. It aims to fill in the missing gap in the data layer, allowing you to write well-structured maintainable, scalable and testable code.
@@ -119,7 +128,7 @@ class UserRepo extends Users.Repo {
119
128
  }
120
129
 
121
130
  class Database extends Vla.Resource {
122
- static override unwrap = "db"
131
+ static readonly unwrap = "db"
123
132
  // Unwraps a property when injecting the resource:
124
133
  // When another class injects the database with `this.inject(Database)`,
125
134
  // the `unwrap` will cause that it doesn't return the instance of the
package/dist/index.d.mts CHANGED
@@ -19,6 +19,8 @@ type ModuleClass<ModuleName extends string, LayerName extends Layer = Layer, TVi
19
19
  readonly unwrap?: PropertyKey;
20
20
  readonly parentLayers: readonly Layer[];
21
21
  };
22
+ type VlaInternalKeys = "inject" | "memo" | "devStable";
23
+ type UserSurface<T> = T extends object ? Omit<T, VlaInternalKeys> : T;
22
24
  //#endregion
23
25
  //#region src/concerns/memo.d.ts
24
26
  type BaseCtor$1<T = object> = abstract new (...args: any[]) => T;
@@ -84,16 +86,6 @@ declare abstract class BaseAction {
84
86
  };
85
87
  }
86
88
  //#endregion
87
- //#region src/kernel/scoped-als.d.ts
88
- declare function withKernel<T>(scopedKernel: Kernel, fn: () => T): T;
89
- //#endregion
90
- //#region src/kernel/scoped-global.d.ts
91
- declare function setGlobalInvokeKernel(kernel: Kernel): void;
92
- //#endregion
93
- //#region src/kernel/scoped-provider.d.ts
94
- type CurrentKernelFn = () => Kernel | Promise<Kernel>;
95
- declare function setInvokeKernelProvider(fn: CurrentKernelFn): void;
96
- //#endregion
97
89
  //#region src/concerns/devstable.d.ts
98
90
  type BaseCtor<T = object> = abstract new (...args: any[]) => T;
99
91
  declare function DevStable<TBase extends BaseCtor>(Base: TBase): ((abstract new (...args: any[]) => {
@@ -126,7 +118,7 @@ declare function createModule<const ModuleName extends string>(moduleName: Modul
126
118
  readonly parentLayers: readonly Layer[];
127
119
  } ? TKey extends ModuleClass<ModuleName, Layer> ? "service" extends infer T ? T extends "service" ? T extends TKey["parentLayers"][number] ? TKey : `A ${Capitalize<T>} is not allowed to inject a ${Capitalize<TargetLayer>}. Allowed parent layer: ${TKey["parentLayers"][number] extends Layer ? Capitalize<TKey["parentLayers"][number]> : never}` : never : never : TKey extends {
128
120
  readonly __vla_visibility: "global" | "public";
129
- } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey_1>>;
121
+ } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey>>;
130
122
  }) & {
131
123
  readonly __vla_module: ModuleName;
132
124
  readonly __vla_layer: "service";
@@ -142,7 +134,7 @@ declare function createModule<const ModuleName extends string>(moduleName: Modul
142
134
  readonly parentLayers: readonly Layer[];
143
135
  } ? TKey extends ModuleClass<ModuleName, Layer> ? "service" extends infer T ? T extends "service" ? T extends TKey["parentLayers"][number] ? TKey : `A ${Capitalize<T>} is not allowed to inject a ${Capitalize<TargetLayer>}. Allowed parent layer: ${TKey["parentLayers"][number] extends Layer ? Capitalize<TKey["parentLayers"][number]> : never}` : never : never : TKey extends {
144
136
  readonly __vla_visibility: "global" | "public";
145
- } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey_1>>;
137
+ } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey>>;
146
138
  }) & {
147
139
  readonly __vla_module: ModuleName;
148
140
  readonly __vla_layer: "service";
@@ -158,7 +150,7 @@ declare function createModule<const ModuleName extends string>(moduleName: Modul
158
150
  readonly parentLayers: readonly Layer[];
159
151
  } ? TKey extends ModuleClass<ModuleName, Layer> ? "repo" extends infer T ? T extends "repo" ? T extends TKey["parentLayers"][number] ? TKey : `A ${Capitalize<T>} is not allowed to inject a ${Capitalize<TargetLayer>}. Allowed parent layer: ${TKey["parentLayers"][number] extends Layer ? Capitalize<TKey["parentLayers"][number]> : never}` : never : never : TKey extends {
160
152
  readonly __vla_visibility: "global" | "public";
161
- } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey_1>>;
153
+ } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey>>;
162
154
  memo<Args extends unknown[], R>(fn: (...args: Args) => R): Memoized<Args, R>;
163
155
  }) & {
164
156
  readonly __vla_module: ModuleName;
@@ -175,7 +167,7 @@ declare function createModule<const ModuleName extends string>(moduleName: Modul
175
167
  readonly parentLayers: readonly Layer[];
176
168
  } ? TKey extends ModuleClass<ModuleName, Layer> ? "action" extends infer T ? T extends "action" ? T extends TKey["parentLayers"][number] ? TKey : `A ${Capitalize<T>} is not allowed to inject a ${Capitalize<TargetLayer>}. Allowed parent layer: ${TKey["parentLayers"][number] extends Layer ? Capitalize<TKey["parentLayers"][number]> : never}` : never : never : TKey extends {
177
169
  readonly __vla_visibility: "global" | "public";
178
- } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey_1>>;
170
+ } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey>>;
179
171
  handle(...args: unknown[]): unknown | Promise<unknown>;
180
172
  }) & {
181
173
  readonly __vla_module: ModuleName;
@@ -193,7 +185,7 @@ declare function createModule<const ModuleName extends string>(moduleName: Modul
193
185
  readonly parentLayers: readonly Layer[];
194
186
  } ? TKey extends ModuleClass<ModuleName, Layer> ? "resource" extends infer T ? T extends "resource" ? T extends TKey["parentLayers"][number] ? TKey : `A ${Capitalize<T>} is not allowed to inject a ${Capitalize<TargetLayer>}. Allowed parent layer: ${TKey["parentLayers"][number] extends Layer ? Capitalize<TKey["parentLayers"][number]> : never}` : never : never : TKey extends {
195
187
  readonly __vla_visibility: "global" | "public";
196
- } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey_1>>;
188
+ } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey>>;
197
189
  devStable<T>(key: string, init: () => T): T;
198
190
  }) & {
199
191
  readonly __vla_module: ModuleName;
@@ -209,6 +201,16 @@ declare function createModule<const ModuleName extends string>(moduleName: Modul
209
201
  DevStable: typeof DevStable;
210
202
  };
211
203
  //#endregion
204
+ //#region src/kernel/scoped-als.d.ts
205
+ declare function withKernel<T>(scopedKernel: Kernel, fn: () => T): T;
206
+ //#endregion
207
+ //#region src/kernel/scoped-global.d.ts
208
+ declare function setGlobalInvokeKernel(kernel: Kernel): void;
209
+ //#endregion
210
+ //#region src/kernel/scoped-provider.d.ts
211
+ type CurrentKernelFn = () => Kernel | Promise<Kernel>;
212
+ declare function setInvokeKernelProvider(fn: CurrentKernelFn): void;
213
+ //#endregion
212
214
  //#region src/index.d.ts
213
215
  declare const Vla: {
214
216
  createModule: typeof createModule;
@@ -216,12 +218,13 @@ declare const Vla: {
216
218
  withKernel: typeof withKernel;
217
219
  setGlobalInvokeKernel: typeof setGlobalInvokeKernel;
218
220
  setInvokeKernelProvider: typeof setInvokeKernelProvider;
221
+ Kernel: typeof Kernel;
219
222
  Facade: (abstract new () => {
220
223
  inject<TKey extends ModuleClass<string>>(key: TKey extends ModuleClass<string, infer TargetLayer extends Layer> ? TKey extends {
221
224
  readonly parentLayers: readonly Layer[];
222
225
  } ? TKey extends ModuleClass<"Vla", Layer> ? "service" extends infer T ? T extends "service" ? T extends TKey["parentLayers"][number] ? TKey : `A ${Capitalize<T>} is not allowed to inject a ${Capitalize<TargetLayer>}. Allowed parent layer: ${TKey["parentLayers"][number] extends Layer ? Capitalize<TKey["parentLayers"][number]> : never}` : never : never : TKey extends {
223
226
  readonly __vla_visibility: "global" | "public";
224
- } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey_1>>;
227
+ } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey>>;
225
228
  }) & {
226
229
  readonly __vla_module: "Vla";
227
230
  readonly __vla_layer: "service";
@@ -237,7 +240,7 @@ declare const Vla: {
237
240
  readonly parentLayers: readonly Layer[];
238
241
  } ? TKey extends ModuleClass<"Vla", Layer> ? "service" extends infer T ? T extends "service" ? T extends TKey["parentLayers"][number] ? TKey : `A ${Capitalize<T>} is not allowed to inject a ${Capitalize<TargetLayer>}. Allowed parent layer: ${TKey["parentLayers"][number] extends Layer ? Capitalize<TKey["parentLayers"][number]> : never}` : never : never : TKey extends {
239
242
  readonly __vla_visibility: "global" | "public";
240
- } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey_1>>;
243
+ } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey>>;
241
244
  }) & {
242
245
  readonly __vla_module: "Vla";
243
246
  readonly __vla_layer: "service";
@@ -253,7 +256,7 @@ declare const Vla: {
253
256
  readonly parentLayers: readonly Layer[];
254
257
  } ? TKey extends ModuleClass<"Vla", Layer> ? "repo" extends infer T ? T extends "repo" ? T extends TKey["parentLayers"][number] ? TKey : `A ${Capitalize<T>} is not allowed to inject a ${Capitalize<TargetLayer>}. Allowed parent layer: ${TKey["parentLayers"][number] extends Layer ? Capitalize<TKey["parentLayers"][number]> : never}` : never : never : TKey extends {
255
258
  readonly __vla_visibility: "global" | "public";
256
- } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey_1>>;
259
+ } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey>>;
257
260
  memo<Args extends unknown[], R>(fn: (...args: Args) => R): Memoized<Args, R>;
258
261
  }) & {
259
262
  readonly __vla_module: "Vla";
@@ -270,7 +273,7 @@ declare const Vla: {
270
273
  readonly parentLayers: readonly Layer[];
271
274
  } ? TKey extends ModuleClass<"Vla", Layer> ? "action" extends infer T ? T extends "action" ? T extends TKey["parentLayers"][number] ? TKey : `A ${Capitalize<T>} is not allowed to inject a ${Capitalize<TargetLayer>}. Allowed parent layer: ${TKey["parentLayers"][number] extends Layer ? Capitalize<TKey["parentLayers"][number]> : never}` : never : never : TKey extends {
272
275
  readonly __vla_visibility: "global" | "public";
273
- } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey_1>>;
276
+ } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey>>;
274
277
  handle(...args: unknown[]): unknown | Promise<unknown>;
275
278
  }) & {
276
279
  readonly __vla_module: "Vla";
@@ -288,7 +291,7 @@ declare const Vla: {
288
291
  readonly parentLayers: readonly Layer[];
289
292
  } ? TKey extends ModuleClass<"Vla", Layer> ? "resource" extends infer T ? T extends "resource" ? T extends TKey["parentLayers"][number] ? TKey : `A ${Capitalize<T>} is not allowed to inject a ${Capitalize<TargetLayer>}. Allowed parent layer: ${TKey["parentLayers"][number] extends Layer ? Capitalize<TKey["parentLayers"][number]> : never}` : never : never : TKey extends {
290
293
  readonly __vla_visibility: "global" | "public";
291
- } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey_1>>;
294
+ } ? TKey : `Cross-module ${Capitalize<TargetLayer>} dependency is not allowed. Use a Facade or Resource.` : never : TKey, scope?: Scope): UserSurface<Resolved<TKey>>;
292
295
  devStable<T>(key: string, init: () => T): T;
293
296
  }) & {
294
297
  readonly __vla_module: "Vla";
@@ -304,4 +307,4 @@ declare const Vla: {
304
307
  DevStable: typeof DevStable;
305
308
  };
306
309
  //#endregion
307
- export { InstantiableClass, Kernel, Layer, ModuleClass, Resolved, Scope, Token, UnwrapKey, Visibility, Vla, createContext, createModule, setGlobalInvokeKernel, setInvokeKernelProvider, withKernel };
310
+ export { InstantiableClass, Kernel, Layer, ModuleClass, Resolved, Scope, Token, UnwrapKey, UserSurface, Visibility, Vla, VlaInternalKeys, createContext, createModule, setGlobalInvokeKernel, setInvokeKernelProvider, withKernel };
package/dist/index.mjs CHANGED
@@ -413,7 +413,8 @@ const Vla = {
413
413
  createContext,
414
414
  withKernel,
415
415
  setGlobalInvokeKernel,
416
- setInvokeKernelProvider
416
+ setInvokeKernelProvider,
417
+ Kernel
417
418
  };
418
419
 
419
420
  //#endregion
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vla",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.1.5",
5
5
  "description": "Data layer kernel for backend- and fullstack apps",
6
6
  "author": "Timo Mämecke <hello@timo.wtf>",
7
7
  "license": "MIT",