@wocker/core 1.0.10 → 1.0.12

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.
Files changed (41) hide show
  1. package/lib/decorators/Command.d.ts +1 -0
  2. package/lib/decorators/Command.js +1 -0
  3. package/lib/decorators/Completion.d.ts +1 -0
  4. package/lib/decorators/Completion.js +1 -0
  5. package/lib/decorators/Description.d.ts +2 -0
  6. package/lib/decorators/Description.js +11 -0
  7. package/lib/decorators/Param.d.ts +2 -1
  8. package/lib/decorators/Param.js +14 -1
  9. package/lib/decorators/index.d.ts +2 -0
  10. package/lib/decorators/index.js +2 -0
  11. package/lib/env.d.ts +1 -0
  12. package/lib/env.js +2 -1
  13. package/lib/makes/ApplicationContext.d.ts +3 -3
  14. package/lib/makes/ApplicationContext.js +5 -2
  15. package/lib/makes/Config.d.ts +3 -1
  16. package/lib/makes/Container.d.ts +0 -1
  17. package/lib/makes/Container.js +9 -7
  18. package/lib/makes/FS.d.ts +0 -4
  19. package/lib/makes/FSManager.d.ts +0 -1
  20. package/lib/makes/Factory.d.ts +1 -2
  21. package/lib/makes/Factory.js +12 -12
  22. package/lib/makes/FileSystem.d.ts +0 -1
  23. package/lib/makes/InstanceWrapper.d.ts +2 -2
  24. package/lib/makes/InstanceWrapper.js +2 -5
  25. package/lib/makes/Logger.d.ts +1 -1
  26. package/lib/makes/Module.js +8 -3
  27. package/lib/makes/Preset.d.ts +4 -11
  28. package/lib/makes/Preset.js +0 -28
  29. package/lib/makes/Project.d.ts +9 -2
  30. package/lib/makes/Project.js +55 -1
  31. package/lib/makes/index.d.ts +0 -1
  32. package/lib/makes/index.js +0 -1
  33. package/lib/services/DockerService.d.ts +1 -3
  34. package/lib/services/PluginConfigService.d.ts +0 -2
  35. package/lib/services/ProxyService.d.ts +3 -0
  36. package/lib/services/ProxyService.js +16 -0
  37. package/lib/services/index.d.ts +1 -0
  38. package/lib/services/index.js +1 -0
  39. package/package.json +12 -7
  40. package/lib/makes/DI.d.ts +0 -7
  41. package/lib/makes/DI.js +0 -27
@@ -1 +1,2 @@
1
+ import "reflect-metadata";
1
2
  export declare const Command: (command: string) => MethodDecorator;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Command = void 0;
4
+ require("reflect-metadata");
4
5
  const env_1 = require("../env");
5
6
  const Command = (command) => {
6
7
  return (target, key, descriptor) => {
@@ -1 +1,2 @@
1
+ import "reflect-metadata";
1
2
  export declare const Completion: (name: string, command?: string) => MethodDecorator;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Completion = void 0;
4
+ require("reflect-metadata");
4
5
  const Completion = (name, command) => {
5
6
  return (target, propertyKey, descriptor) => {
6
7
  Reflect.defineMetadata("completion", [
@@ -0,0 +1,2 @@
1
+ import "reflect-metadata";
2
+ export declare const Description: (description: string) => MethodDecorator;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Description = void 0;
4
+ require("reflect-metadata");
5
+ const env_1 = require("../env");
6
+ const Description = (description) => {
7
+ return (target, propertyKey, descriptor) => {
8
+ Reflect.defineMetadata(env_1.COMMAND_DESCRIPTION_METADATA, description, descriptor);
9
+ };
10
+ };
11
+ exports.Description = Description;
@@ -1 +1,2 @@
1
- export declare const Param: (name: string) => MethodDecorator;
1
+ import "reflect-metadata";
2
+ export declare const Param: (name: string) => ParameterDecorator;
@@ -1,8 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Param = void 0;
4
+ require("reflect-metadata");
5
+ const env_1 = require("../env");
4
6
  const Param = (name) => {
5
- return (target, propertyKey, descriptor) => {
7
+ return (target, propertyKey, parameterIndex) => {
8
+ if (!propertyKey) {
9
+ return;
10
+ }
11
+ Reflect.defineMetadata(env_1.ARGS_METADATA, [
12
+ ...Reflect.getMetadata(env_1.ARGS_METADATA, target.constructor, propertyKey) || [],
13
+ {
14
+ type: "param",
15
+ name,
16
+ index: parameterIndex
17
+ }
18
+ ], target.constructor, propertyKey);
6
19
  };
7
20
  };
8
21
  exports.Param = Param;
@@ -1,8 +1,10 @@
1
1
  export * from "./Command";
2
2
  export * from "./Completion";
3
3
  export * from "./Controller";
4
+ export * from "./Description";
4
5
  export * from "./Inject";
5
6
  export * from "./Injectable";
6
7
  export * from "./Module";
7
8
  export * from "./Option";
9
+ export * from "./Param";
8
10
  export * from "./Plugin";
@@ -17,8 +17,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./Command"), exports);
18
18
  __exportStar(require("./Completion"), exports);
19
19
  __exportStar(require("./Controller"), exports);
20
+ __exportStar(require("./Description"), exports);
20
21
  __exportStar(require("./Inject"), exports);
21
22
  __exportStar(require("./Injectable"), exports);
22
23
  __exportStar(require("./Module"), exports);
23
24
  __exportStar(require("./Option"), exports);
25
+ __exportStar(require("./Param"), exports);
24
26
  __exportStar(require("./Plugin"), exports);
package/lib/env.d.ts CHANGED
@@ -2,6 +2,7 @@ export declare const IS_MODULE = "IS_MODULE";
2
2
  export declare const INJECTABLE_WATERMARK = "__injectable__";
3
3
  export declare const ARGS_META = "__ARGS__";
4
4
  export declare const COMMAND_METADATA = "command";
5
+ export declare const COMMAND_DESCRIPTION_METADATA = "__COMMAND_DESCRIPTION__";
5
6
  export declare const COMPLETION_METADATA = "completion";
6
7
  export declare const ARGS_METADATA = "__ARGS__";
7
8
  export declare const OPTION_META = "__OPTION_META__";
package/lib/env.js CHANGED
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MODULE_METADATA = exports.PLUGIN_NAME_METADATA = exports.PLUGIN_DIR_KEY = exports.INJECT_TOKEN_METADATA = exports.SELF_DECLARED_DEPS_METADATA = exports.PARAMTYPES_METADATA = exports.OPTION_META = exports.ARGS_METADATA = exports.COMPLETION_METADATA = exports.COMMAND_METADATA = exports.ARGS_META = exports.INJECTABLE_WATERMARK = exports.IS_MODULE = void 0;
3
+ exports.MODULE_METADATA = exports.PLUGIN_NAME_METADATA = exports.PLUGIN_DIR_KEY = exports.INJECT_TOKEN_METADATA = exports.SELF_DECLARED_DEPS_METADATA = exports.PARAMTYPES_METADATA = exports.OPTION_META = exports.ARGS_METADATA = exports.COMPLETION_METADATA = exports.COMMAND_DESCRIPTION_METADATA = exports.COMMAND_METADATA = exports.ARGS_META = exports.INJECTABLE_WATERMARK = exports.IS_MODULE = void 0;
4
4
  exports.IS_MODULE = "IS_MODULE";
5
5
  exports.INJECTABLE_WATERMARK = "__injectable__";
6
6
  exports.ARGS_META = "__ARGS__";
7
7
  exports.COMMAND_METADATA = "command";
8
+ exports.COMMAND_DESCRIPTION_METADATA = "__COMMAND_DESCRIPTION__";
8
9
  exports.COMPLETION_METADATA = "completion";
9
10
  exports.ARGS_METADATA = "__ARGS__";
10
11
  exports.OPTION_META = "__OPTION_META__";
@@ -1,9 +1,9 @@
1
1
  import { Type } from "../types/Type";
2
2
  import { Container } from "./Container";
3
3
  export declare class ApplicationContext {
4
- protected module: any;
5
- protected container: Container;
4
+ protected readonly module: any;
5
+ protected readonly container: Container;
6
6
  constructor(module: any, container: Container);
7
7
  get<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | Function | string | symbol): TResult;
8
- run(args: string[]): Promise<any>;
8
+ run(args: string[]): Promise<string>;
9
9
  }
@@ -17,8 +17,11 @@ class ApplicationContext {
17
17
  this.container = container;
18
18
  }
19
19
  get(typeOrToken) {
20
- var _a;
21
- const res = (_a = this.container.getModule(this.module)) === null || _a === void 0 ? void 0 : _a.get(typeOrToken);
20
+ const module = this.container.getModule(this.module);
21
+ if (!module) {
22
+ throw new Error("Module not found");
23
+ }
24
+ const res = module.get(typeOrToken);
22
25
  if (!res) {
23
26
  throw new Error("Instance not found");
24
27
  }
@@ -1,5 +1,7 @@
1
1
  import { EnvConfig, PickProperties } from "../types";
2
- export type ConfigProperties = PickProperties<Config>;
2
+ export type ConfigProperties = Omit<PickProperties<Config>, "logLevel"> & {
3
+ logLevel?: Config["logLevel"];
4
+ };
3
5
  export declare abstract class Config {
4
6
  debug?: boolean;
5
7
  logLevel: "off" | "info" | "warn" | "error";
@@ -4,5 +4,4 @@ export declare class Container {
4
4
  hasModule(type: any): boolean;
5
5
  getModule(type: any): Module | undefined;
6
6
  addModule(type: any, module: Module): void;
7
- addController(moduleType: any, type: any): void;
8
7
  }
@@ -4,6 +4,15 @@ exports.Container = void 0;
4
4
  class Container {
5
5
  constructor() {
6
6
  this.modules = new Map();
7
+ // public addController(moduleType: any, type: any): void {
8
+ // const module = this.getModule(moduleType);
9
+ //
10
+ // if(!module) {
11
+ // return;
12
+ // }
13
+ //
14
+ // module.addController(type);
15
+ // }
7
16
  }
8
17
  hasModule(type) {
9
18
  return this.modules.has(type);
@@ -14,12 +23,5 @@ class Container {
14
23
  addModule(type, module) {
15
24
  this.modules.set(type, module);
16
25
  }
17
- addController(moduleType, type) {
18
- const module = this.getModule(moduleType);
19
- if (!module) {
20
- return;
21
- }
22
- module.addController(type);
23
- }
24
26
  }
25
27
  exports.Container = Container;
package/lib/makes/FS.d.ts CHANGED
@@ -1,7 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
- /// <reference types="node" />
5
1
  import { Abortable } from "node:events";
6
2
  import { PathLike, PathOrFileDescriptor, WriteFileOptions, RmOptions, MakeDirectoryOptions } from "fs";
7
3
  type ReadFileOptions = Abortable & {
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import fs, { createReadStream, MakeDirectoryOptions, RmOptions } from "fs";
3
2
  import { FileSystem } from "./FileSystem";
4
3
  export declare class FSManager {
@@ -12,9 +12,8 @@ export declare class Factory {
12
12
  scanModuleDependencies(module: Module): Promise<void>;
13
13
  scanDynamicModules(): Promise<void>;
14
14
  scanRoutes(): Promise<void>;
15
- log(...args: any[]): void;
16
15
  init(): Promise<void>;
17
- run(args: string[]): Promise<any>;
16
+ run(args: string[]): Promise<string>;
18
17
  getContainer(): Container;
19
18
  static create(module: any): Promise<ApplicationContext>;
20
19
  }
@@ -58,8 +58,10 @@ class Factory {
58
58
  scanModuleDependencies(module) {
59
59
  return __awaiter(this, void 0, void 0, function* () {
60
60
  const providers = Reflect.getMetadata(env_1.MODULE_METADATA.PROVIDERS, module.type) || [];
61
+ // Logger.info(module.type.name, providers);
61
62
  module.addProvider(cli_1.Cli, this.cli);
62
63
  providers.forEach((providerType) => {
64
+ // Logger.info(" ->", (providerType as any).name);
63
65
  module.addProvider(providerType);
64
66
  });
65
67
  const controllers = Reflect.getMetadata(env_1.MODULE_METADATA.CONTROLLERS, module.type) || [];
@@ -115,6 +117,9 @@ class Factory {
115
117
  });
116
118
  const argsMeta = Reflect.getMetadata(env_1.ARGS_METADATA, type, name) || [];
117
119
  const command = this.cli.command(commandName);
120
+ command.help({
121
+ description: "Des"
122
+ });
118
123
  for (const argMeta of argsMeta) {
119
124
  if (argMeta.type === "option") {
120
125
  command.option(argMeta.name, argMeta.params);
@@ -136,11 +141,15 @@ class Factory {
136
141
  for (const controllerCommand of controllerCommands) {
137
142
  const { command: commandName, method, argsMeta } = controllerCommand;
138
143
  this.cli.command(commandName)
139
- .action((options, ...params) => {
144
+ .action((input) => {
140
145
  const args = [];
146
+ const params = Object.values(input.arguments());
141
147
  argsMeta.forEach((argMeta) => {
142
- if (argMeta.type === "option") {
143
- args[argMeta.index] = options[argMeta.name];
148
+ if (argMeta.type === "param") {
149
+ args[argMeta.index] = input.argument(argMeta.name);
150
+ }
151
+ else if (argMeta.type === "option") {
152
+ args[argMeta.index] = input.option(argMeta.name);
144
153
  }
145
154
  });
146
155
  return controller.instance[method](...args, ...params);
@@ -166,15 +175,6 @@ class Factory {
166
175
  }
167
176
  });
168
177
  }
169
- log(...args) {
170
- for (const [, module] of this.container.modules) {
171
- module.providers.forEach((provider) => {
172
- if (provider.instance.info) {
173
- provider.instance.info(...args);
174
- }
175
- });
176
- }
177
- }
178
178
  init() {
179
179
  return __awaiter(this, void 0, void 0, function* () {
180
180
  for (const [, module] of this.container.modules) {
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import * as fs from "fs";
3
2
  type ReaddirOptions = fs.ObjectEncodingOptions & {
4
3
  recursive?: boolean | undefined;
@@ -1,10 +1,10 @@
1
+ import "reflect-metadata";
1
2
  import { Module } from "./Module";
2
3
  export declare class InstanceWrapper {
3
4
  private readonly module;
4
- private readonly token;
5
5
  private readonly provider;
6
6
  private _instance?;
7
- constructor(module: Module, token: any, provider: any, _instance?: any);
7
+ constructor(module: Module, provider: any, _instance?: any);
8
8
  get instance(): any;
9
9
  set instance(instance: any);
10
10
  }
@@ -1,18 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InstanceWrapper = void 0;
4
+ require("reflect-metadata");
4
5
  const env_1 = require("../env");
5
6
  class InstanceWrapper {
6
- constructor(module, token, provider, _instance) {
7
+ constructor(module, provider, _instance) {
7
8
  this.module = module;
8
- this.token = token;
9
9
  this.provider = provider;
10
10
  this._instance = _instance;
11
11
  }
12
12
  get instance() {
13
- if (!this.provider) {
14
- return null;
15
- }
16
13
  if (!this._instance) {
17
14
  const types = [
18
15
  ...Reflect.getMetadata(env_1.PARAMTYPES_METADATA, this.provider) || []
@@ -1,4 +1,4 @@
1
- import { LogService } from "../services/LogService";
1
+ import { LogService } from "../services";
2
2
  export declare class Logger {
3
3
  static install(ls: LogService): void;
4
4
  static log(...data: any[]): void;
@@ -34,19 +34,24 @@ class Module {
34
34
  }
35
35
  addProvider(provider, instance) {
36
36
  if ("provide" in provider && "useValue" in provider) {
37
- const wrapper = new InstanceWrapper_1.InstanceWrapper(this, provider.provide, provider.provide, provider.useValue);
37
+ const wrapper = new InstanceWrapper_1.InstanceWrapper(this, provider.provide, provider.useValue);
38
+ this.providers.set(provider.provide, wrapper);
39
+ return;
40
+ }
41
+ if ("provide" in provider && "useClass" in provider) {
42
+ const wrapper = new InstanceWrapper_1.InstanceWrapper(this, provider.useClass);
38
43
  this.providers.set(provider.provide, wrapper);
39
44
  return;
40
45
  }
41
46
  const token = Reflect.getMetadata("INJECT_TOKEN", provider) || provider;
42
- const wrapper = new InstanceWrapper_1.InstanceWrapper(this, token, provider, instance);
47
+ const wrapper = new InstanceWrapper_1.InstanceWrapper(this, provider, instance);
43
48
  this.providers.set(token, wrapper);
44
49
  }
45
50
  addInjection() {
46
51
  //
47
52
  }
48
53
  addController(type) {
49
- this.controllers.set(type, new InstanceWrapper_1.InstanceWrapper(this, type, type));
54
+ this.controllers.set(type, new InstanceWrapper_1.InstanceWrapper(this, type));
50
55
  for (const name of Object.getOwnPropertyNames(type.prototype)) {
51
56
  const descriptor = Object.getOwnPropertyDescriptor(type.prototype, name);
52
57
  if (!descriptor) {
@@ -1,6 +1,3 @@
1
- import { DI } from "./DI";
2
- import { PresetServiceSearchOptions as SearchOptions } from "../services/PresetService";
3
- import { EnvConfig } from "../types";
4
1
  type TextOption = {
5
2
  type: "string" | "number" | "int";
6
3
  message?: string;
@@ -23,7 +20,7 @@ type SelectOption = {
23
20
  default?: string;
24
21
  };
25
22
  type AnyOption = TextOption | ConfirmOption | SelectOption;
26
- declare class Preset {
23
+ export declare abstract class Preset {
27
24
  id: string;
28
25
  name: string;
29
26
  version: string;
@@ -36,11 +33,7 @@ declare class Preset {
36
33
  };
37
34
  volumes?: string[];
38
35
  volumeOptions?: string[];
39
- constructor(data: any);
40
- save(): Promise<void>;
41
- getImageName(buildArgs?: EnvConfig): string;
42
- static install(di: DI): void;
43
- static search(options: SearchOptions): Promise<any[]>;
44
- static searchOne(options: SearchOptions): Promise<any>;
36
+ protected constructor(data: any);
37
+ abstract save(): Promise<void>;
45
38
  }
46
- export { Preset };
39
+ export {};
@@ -1,17 +1,6 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.Preset = void 0;
13
- const PresetService_1 = require("../services/PresetService");
14
- let _di;
15
4
  class Preset {
16
5
  constructor(data) {
17
6
  this.id = data.id;
@@ -23,22 +12,5 @@ class Preset {
23
12
  this.volumes = data.volumes;
24
13
  this.volumeOptions = data.volumeOptions;
25
14
  }
26
- save() {
27
- return __awaiter(this, void 0, void 0, function* () {
28
- return _di.resolveService(PresetService_1.PresetService).save(this);
29
- });
30
- }
31
- getImageName(buildArgs) {
32
- return _di.resolveService(PresetService_1.PresetService).getImageName(this, buildArgs);
33
- }
34
- static install(di) {
35
- _di = di;
36
- }
37
- static search(options) {
38
- return _di.resolveService(PresetService_1.PresetService).search(options);
39
- }
40
- static searchOne(options) {
41
- return _di.resolveService(PresetService_1.PresetService).searchOne(options);
42
- }
43
15
  }
44
16
  exports.Preset = Preset;
@@ -1,5 +1,5 @@
1
1
  import { PickProperties, EnvConfig } from "../types";
2
- type ProjectProperties = Omit<PickProperties<Project>, "containerName">;
2
+ export type ProjectProperties = Omit<PickProperties<Project>, "containerName" | "domains">;
3
3
  export declare abstract class Project {
4
4
  id: string;
5
5
  name: string;
@@ -16,6 +16,13 @@ export declare abstract class Project {
16
16
  metadata?: EnvConfig;
17
17
  protected constructor(data: ProjectProperties);
18
18
  get containerName(): string;
19
+ get domains(): string[];
20
+ hasDomain(domain: string): boolean;
21
+ addDomain(addDomain: string): void;
22
+ removeDomain(removeDomain: string): void;
23
+ clearDomains(): void;
24
+ linkPort(hostPort: number, containerPort: number): void;
25
+ unlinkPort(hostPort: number, containerPort: number): void;
19
26
  hasEnv(name: string): boolean;
20
27
  getEnv(name: string, defaultValue?: string): string | undefined;
21
28
  setEnv(name: string, value: string | boolean): void;
@@ -33,4 +40,4 @@ export declare abstract class Project {
33
40
  }
34
41
  export declare const PROJECT_TYPE_DOCKERFILE = "dockerfile";
35
42
  export declare const PROJECT_TYPE_IMAGE = "image";
36
- export {};
43
+ export declare const PROJECT_TYPE_PRESET = "preset";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PROJECT_TYPE_IMAGE = exports.PROJECT_TYPE_DOCKERFILE = exports.Project = void 0;
3
+ exports.PROJECT_TYPE_PRESET = exports.PROJECT_TYPE_IMAGE = exports.PROJECT_TYPE_DOCKERFILE = exports.Project = void 0;
4
4
  const volumeParse_1 = require("../utils/volumeParse");
5
5
  class Project {
6
6
  constructor(data) {
@@ -22,6 +22,59 @@ class Project {
22
22
  get containerName() {
23
23
  return `${this.name}.workspace`;
24
24
  }
25
+ get domains() {
26
+ const host = this.getEnv("VIRTUAL_HOST");
27
+ if (!host) {
28
+ return [];
29
+ }
30
+ return host.split(",");
31
+ }
32
+ hasDomain(domain) {
33
+ return this.domains.includes(domain);
34
+ }
35
+ addDomain(addDomain) {
36
+ let domains = [
37
+ ...this.domains.filter((domain) => {
38
+ return domain !== addDomain;
39
+ }),
40
+ addDomain
41
+ ];
42
+ this.setEnv("VIRTUAL_HOST", domains.join(","));
43
+ }
44
+ removeDomain(removeDomain) {
45
+ if (!this.hasDomain(removeDomain)) {
46
+ return;
47
+ }
48
+ let domains = this.domains.filter((domain) => {
49
+ return domain !== removeDomain;
50
+ });
51
+ this.setEnv("VIRTUAL_HOST", domains.join(","));
52
+ }
53
+ clearDomains() {
54
+ this.unsetEnv("VIRTUAL_HOST");
55
+ }
56
+ linkPort(hostPort, containerPort) {
57
+ if (!this.ports) {
58
+ this.ports = [];
59
+ }
60
+ this.ports = [
61
+ ...this.ports.filter((link) => {
62
+ return link !== `${hostPort}:${containerPort}`;
63
+ }),
64
+ `${hostPort}:${containerPort}`
65
+ ];
66
+ }
67
+ unlinkPort(hostPort, containerPort) {
68
+ if (!this.ports) {
69
+ return;
70
+ }
71
+ this.ports = this.ports.filter((link) => {
72
+ return link !== `${hostPort}:${containerPort}`;
73
+ });
74
+ if (this.ports.length === 0) {
75
+ delete this.ports;
76
+ }
77
+ }
25
78
  hasEnv(name) {
26
79
  if (!this.env) {
27
80
  return false;
@@ -127,3 +180,4 @@ class Project {
127
180
  exports.Project = Project;
128
181
  exports.PROJECT_TYPE_DOCKERFILE = "dockerfile";
129
182
  exports.PROJECT_TYPE_IMAGE = "image";
183
+ exports.PROJECT_TYPE_PRESET = "preset";
@@ -1,6 +1,5 @@
1
1
  export * from "./Config";
2
2
  export * from "./Container";
3
- export * from "./DI";
4
3
  export * from "./FileSystem";
5
4
  export * from "./FS";
6
5
  export * from "./FSManager";
@@ -16,7 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./Config"), exports);
18
18
  __exportStar(require("./Container"), exports);
19
- __exportStar(require("./DI"), exports);
20
19
  __exportStar(require("./FileSystem"), exports);
21
20
  __exportStar(require("./FS"), exports);
22
21
  __exportStar(require("./FSManager"), exports);
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  import { Container, ImageInfo } from "dockerode";
4
2
  import { Duplex } from "node:stream";
5
3
  declare namespace DockerServiceParams {
@@ -55,7 +53,7 @@ declare abstract class DockerService {
55
53
  abstract imageLs(options?: DockerServiceParams.ImageList): Promise<ImageInfo[]>;
56
54
  abstract imageRm(tag: string): Promise<void>;
57
55
  abstract pullImage(tag: string): Promise<void>;
58
- abstract attach(name: string): Promise<void>;
56
+ abstract attach(name: string | Container): Promise<NodeJS.ReadWriteStream>;
59
57
  abstract attachStream(stream: NodeJS.ReadWriteStream): Promise<void>;
60
58
  abstract exec(name: string, command?: string[], tty?: boolean): Promise<Duplex>;
61
59
  }
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  import { WriteFileOptions, MakeDirectoryOptions, RmOptions } from "fs";
4
2
  export declare class PluginConfigService {
5
3
  protected readonly pluginDir: string;
@@ -0,0 +1,3 @@
1
+ export declare abstract class ProxyService {
2
+ abstract start(): Promise<void>;
3
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ProxyService = void 0;
10
+ const decorators_1 = require("../decorators");
11
+ let ProxyService = class ProxyService {
12
+ };
13
+ exports.ProxyService = ProxyService;
14
+ exports.ProxyService = ProxyService = __decorate([
15
+ (0, decorators_1.Injectable)("PROXY_SERVICE")
16
+ ], ProxyService);
@@ -5,3 +5,4 @@ export * from "./LogService";
5
5
  export * from "./PluginConfigService";
6
6
  export * from "./PresetService";
7
7
  export * from "./ProjectService";
8
+ export * from "./ProxyService";
@@ -21,3 +21,4 @@ __exportStar(require("./LogService"), exports);
21
21
  __exportStar(require("./PluginConfigService"), exports);
22
22
  __exportStar(require("./PresetService"), exports);
23
23
  __exportStar(require("./ProjectService"), exports);
24
+ __exportStar(require("./ProxyService"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wocker/core",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "author": "Kris Papercut <krispcut@gmail.com>",
5
5
  "description": "Core of wocker",
6
6
  "license": "MIT",
@@ -19,19 +19,24 @@
19
19
  },
20
20
  "scripts": {
21
21
  "prepare": "npm run build",
22
- "watch": "tsc -w",
23
- "build": "tsc",
24
- "test": "echo \"Error: no test specified\" && exit 1"
22
+ "build": "tsc --project tsconfig.build.json",
23
+ "watch": "tsc -w --project tsconfig.build.json",
24
+ "watch:test": "jest --colors --watchAll --coverage",
25
+ "test": "jest --colors"
25
26
  },
26
27
  "dependencies": {
27
- "@kearisp/cli": "^1.0.7",
28
+ "@kearisp/cli": "^2.0.4",
28
29
  "fs": "^0.0.1-security",
29
30
  "path": "^0.12.7",
30
- "reflect-metadata": "^0.2.1"
31
+ "reflect-metadata": "^0.2.2"
31
32
  },
32
33
  "devDependencies": {
33
34
  "@types/dockerode": "^3.3.23",
35
+ "@types/jest": "^29.5.12",
34
36
  "@types/node": "^20.11.7",
35
- "typescript": "^5.4.4"
37
+ "jest": "^29.7.0",
38
+ "ts-jest": "^29.2.4",
39
+ "ts-node": "^10.9.2",
40
+ "typescript": "^5.5.4"
36
41
  }
37
42
  }
package/lib/makes/DI.d.ts DELETED
@@ -1,7 +0,0 @@
1
- import "reflect-metadata";
2
- declare class DI {
3
- private services;
4
- resolveService<T>(key: any): T;
5
- registerService(key: any, service: any): void;
6
- }
7
- export { DI };
package/lib/makes/DI.js DELETED
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DI = void 0;
4
- require("reflect-metadata");
5
- class DI {
6
- constructor() {
7
- this.services = new Map();
8
- }
9
- resolveService(key) {
10
- let res = this.services.get(key);
11
- if (!res) {
12
- const types = Reflect.getMetadata("design:paramtypes", key);
13
- if (types && types.length > 0) {
14
- types.forEach((type) => {
15
- this.resolveService(type);
16
- });
17
- }
18
- res = new key(this);
19
- this.services.set(key, res);
20
- }
21
- return res;
22
- }
23
- registerService(key, service) {
24
- this.services.set(key, service);
25
- }
26
- }
27
- exports.DI = DI;