@arkstack/contract 0.10.9 → 0.11.0

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/dist/global.d.ts CHANGED
@@ -6,4 +6,20 @@ declare global {
6
6
  runtime: 'CLI' | 'HTTP' | 'Worker'
7
7
  command?: string
8
8
  }
9
+ }
10
+
11
+ declare module '@arkstack/common' {
12
+ interface HookRegistry {
13
+ 'set:root-dir': {
14
+ after: (dir: string) => void
15
+ }
16
+ }
17
+ }
18
+
19
+ declare module '@arkstack/foundry' {
20
+ interface HookRegistry {
21
+ 'set:root-dir': {
22
+ after: (dir: string) => void
23
+ }
24
+ }
9
25
  }
package/dist/index.d.ts CHANGED
@@ -34,9 +34,10 @@ interface ArkstackRouterContract<TApp, TRoutes = unknown> {
34
34
  list(options?: ArkstackRouteListOptions, app?: TApp): PromiseOrValue<TRoutes>;
35
35
  }
36
36
  //#endregion
37
- //#region src/core.d.ts
37
+ //#region src/Arkstack.d.ts
38
38
  type PromiseOrValue<T> = T | Promise<T>;
39
39
  type ENV = 'development' | 'production' | 'stagging' | 'testing';
40
+ type RootDirChangeListener = (dir: string, previousDir: string) => void;
40
41
  declare abstract class Arkstack<TApp, TRoutes = unknown, THandler = unknown> {
41
42
  private static appRootDir;
42
43
  protected app: TApp;
@@ -53,5 +54,5 @@ declare abstract class Arkstack<TApp, TRoutes = unknown, THandler = unknown> {
53
54
  static setRootDir(dir: string): void;
54
55
  }
55
56
  //#endregion
56
- export { Arkstack, ArkstackKitContract, ArkstackKitDriver, ArkstackMiddlewareConfig, ArkstackRouteListOptions, ArkstackRouterContract, ENV, PromiseOrValue };
57
+ export { Arkstack, ArkstackKitContract, ArkstackKitDriver, ArkstackMiddlewareConfig, ArkstackRouteListOptions, ArkstackRouterContract, ENV, PromiseOrValue, RootDirChangeListener };
57
58
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
- //#region src/core.ts
1
+ import { Hook } from "@arkstack/foundry";
2
+ //#region src/Arkstack.ts
2
3
  var Arkstack = class Arkstack {
3
4
  static appRootDir = process.cwd();
4
5
  app;
@@ -22,7 +23,7 @@ var Arkstack = class Arkstack {
22
23
  * @returns
23
24
  */
24
25
  static rootDir() {
25
- return this.appRootDir;
26
+ return Arkstack.appRootDir;
26
27
  }
27
28
  /**
28
29
  * Get the current app root directory
@@ -39,7 +40,7 @@ var Arkstack = class Arkstack {
39
40
  * @returns
40
41
  */
41
42
  static getRootDir() {
42
- return this.appRootDir;
43
+ return Arkstack.appRootDir;
43
44
  }
44
45
  /**
45
46
  * Set the current app root directory
@@ -48,7 +49,7 @@ var Arkstack = class Arkstack {
48
49
  * @returns
49
50
  */
50
51
  setRootDir(dir) {
51
- Arkstack.appRootDir = dir;
52
+ Arkstack.setRootDir(dir);
52
53
  }
53
54
  /**
54
55
  * Set the current app root directory
@@ -57,7 +58,10 @@ var Arkstack = class Arkstack {
57
58
  * @returns
58
59
  */
59
60
  static setRootDir(dir) {
60
- this.appRootDir = dir;
61
+ const previousDir = Arkstack.appRootDir;
62
+ Arkstack.appRootDir = dir;
63
+ if (previousDir === dir) return;
64
+ if (Hook.has("set:root-dir", "after")) Hook.get("set:root-dir", "after", dir);
61
65
  }
62
66
  };
63
67
  //#endregion
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/core.ts","../src/kits.ts"],"sourcesContent":["import { ArkstackKitDriver } from './kits'\nimport { ArkstackRouterContract } from './routing'\n\nexport type PromiseOrValue<T> = T | Promise<T>;\n\nexport type ENV = 'development' | 'production' | 'stagging' | 'testing'\n\nexport abstract class Arkstack<TApp, TRoutes = unknown, THandler = unknown> {\n private static appRootDir: string = process.cwd()\n protected app!: TApp\n protected driver!: ArkstackKitDriver<TApp, THandler>\n\n abstract getAppInstance (): TApp;\n abstract getRouter (): ArkstackRouterContract<TApp, TRoutes>;\n /**\n * Boots the application by mounting public assets, binding the \n * router, applying middleware, and starting the server.\n * \n * @param port The numeric port to run the server on\n * @param dontStart Set to true to skip server startup\n */\n abstract boot (port: number, dontStart?: boolean): Promise<void>\n\n /**\n * Gets the ArkstackKitDriver instance used by the application.\n * \n * @returns \n */\n abstract getDriver (): ArkstackKitDriver<TApp, TRoutes>\n\n /**\n * Boostrap the app and start up the server\n * \n * @param defaultPort start the server with this port if none is APP_PORT env variable is not set\n * @param dontStart Set to true to skip server startup\n */\n async startup (defaultPort: number = 3000, dontStart?: boolean) {\n const { bootWithDetectedPort } = await import('@arkstack/common')\n await bootWithDetectedPort(async (port) => {\n await this.boot(port, dontStart)\n }, Number(process.env.APP_PORT ?? defaultPort), this)\n }\n\n /**\n * Get the current app root directory\n * \n * @alias getRootDir()\n * @returns\n */\n static rootDir (): string {\n return this.appRootDir\n }\n\n /**\n * Get the current app root directory\n * \n * @alias getRootDir()\n * @returns\n */\n rootDir (): string {\n return Arkstack.appRootDir\n }\n\n /**\n * Get the current app root directory\n * \n * @returns\n */\n static getRootDir (): string {\n return this.appRootDir\n }\n\n /**\n * Set the current app root directory\n * \n * @param dir The prefered app root directory\n * @returns\n */\n setRootDir (dir: string): void {\n Arkstack.appRootDir = dir\n }\n\n /**\n * Set the current app root directory\n * \n * @param dir The prefered app root directory\n * @returns\n */\n static setRootDir (dir: string): void {\n this.appRootDir = dir\n }\n}","import { ArkstackMiddlewareConfig } from './http'\nimport { PromiseOrValue } from './core'\n\n/**\n * The ArkstackKitDriver class defines the contract for a driver \n * that can be used with the ArkstackKitContract. \n */\nexport abstract class ArkstackKitDriver<TApp, TMiddleware> {\n abstract readonly name: string;\n abstract createApp (): TApp;\n abstract mountPublicAssets (app: TApp, publicPath: string): PromiseOrValue<void>;\n abstract bindRouter (app: TApp): PromiseOrValue<void>;\n abstract applyMiddleware (app: TApp, middleware: ArkstackMiddlewareConfig<TMiddleware>): PromiseOrValue<void>;\n abstract applyMiddleware (app: TApp, middleware: TMiddleware): PromiseOrValue<void>;\n registerErrorHandler (_app: TApp): PromiseOrValue<void> {\n return\n }\n abstract start (app: TApp, port: number): PromiseOrValue<void>;\n}\n\n/**\n * The ArkstackKitContract class defines the contract for an \n * application that uses the ArkstackKitDriver.\n */\nexport abstract class ArkstackKitContract<TApp, TMiddleware> {\n abstract app: TApp;\n abstract driver: ArkstackKitDriver<TApp, TMiddleware>;\n abstract middleware: ArkstackMiddlewareConfig<TMiddleware>;\n abstract boot (port: number): Promise<void>;\n abstract shutdown (): Promise<void>;\n}"],"mappings":";AAOA,IAAsB,WAAtB,MAAsB,SAAsD;CACxE,OAAe,aAAqB,QAAQ,KAAK;CACjD;CACA;;;;;;;CA0BA,MAAM,QAAS,cAAsB,KAAM,WAAqB;EAC5D,MAAM,EAAE,yBAAyB,MAAM,OAAO;EAC9C,MAAM,qBAAqB,OAAO,SAAS;GACvC,MAAM,KAAK,KAAK,MAAM,UAAU;KACjC,OAAO,QAAQ,IAAI,YAAY,YAAY,EAAE,KAAK;;;;;;;;CASzD,OAAO,UAAmB;EACtB,OAAO,KAAK;;;;;;;;CAShB,UAAmB;EACf,OAAO,SAAS;;;;;;;CAQpB,OAAO,aAAsB;EACzB,OAAO,KAAK;;;;;;;;CAShB,WAAY,KAAmB;EAC3B,SAAS,aAAa;;;;;;;;CAS1B,OAAO,WAAY,KAAmB;EAClC,KAAK,aAAa;;;;;;;;;AClF1B,IAAsB,oBAAtB,MAA2D;CAOvD,qBAAsB,MAAkC;;;;;;AAU5D,IAAsB,sBAAtB,MAA6D"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/Arkstack.ts","../src/kits.ts"],"sourcesContent":["import { ArkstackKitDriver } from './kits'\nimport { ArkstackRouterContract } from './routing'\nimport { Hook } from '@arkstack/foundry'\n\nexport type PromiseOrValue<T> = T | Promise<T>;\n\nexport type ENV = 'development' | 'production' | 'stagging' | 'testing'\nexport type RootDirChangeListener = (dir: string, previousDir: string) => void\n\nexport abstract class Arkstack<TApp, TRoutes = unknown, THandler = unknown> {\n private static appRootDir: string = process.cwd()\n protected app!: TApp\n protected driver!: ArkstackKitDriver<TApp, THandler>\n\n abstract getAppInstance (): TApp;\n abstract getRouter (): ArkstackRouterContract<TApp, TRoutes>;\n /**\n * Boots the application by mounting public assets, binding the \n * router, applying middleware, and starting the server.\n * \n * @param port The numeric port to run the server on\n * @param dontStart Set to true to skip server startup\n */\n abstract boot (port: number, dontStart?: boolean): Promise<void>\n\n /**\n * Gets the ArkstackKitDriver instance used by the application.\n * \n * @returns \n */\n abstract getDriver (): ArkstackKitDriver<TApp, TRoutes>\n\n /**\n * Boostrap the app and start up the server\n * \n * @param defaultPort start the server with this port if none is APP_PORT env variable is not set\n * @param dontStart Set to true to skip server startup\n */\n async startup (defaultPort: number = 3000, dontStart?: boolean) {\n const { bootWithDetectedPort } = await import('@arkstack/common')\n await bootWithDetectedPort(async (port) => {\n await this.boot(port, dontStart)\n }, Number(process.env.APP_PORT ?? defaultPort), this)\n }\n\n /**\n * Get the current app root directory\n * \n * @alias getRootDir()\n * @returns\n */\n static rootDir (): string {\n return Arkstack.appRootDir\n }\n\n /**\n * Get the current app root directory\n * \n * @alias getRootDir()\n * @returns\n */\n rootDir (): string {\n return Arkstack.appRootDir\n }\n\n /**\n * Get the current app root directory\n * \n * @returns\n */\n static getRootDir (): string {\n return Arkstack.appRootDir\n }\n\n /**\n * Set the current app root directory\n * \n * @param dir The prefered app root directory\n * @returns\n */\n setRootDir (dir: string): void {\n Arkstack.setRootDir(dir)\n }\n\n /**\n * Set the current app root directory\n * \n * @param dir The prefered app root directory\n * @returns\n */\n static setRootDir (dir: string): void {\n const previousDir = Arkstack.appRootDir\n Arkstack.appRootDir = dir\n\n if (previousDir === dir) {\n return\n }\n\n if (Hook.has('set:root-dir', 'after'))\n Hook.get('set:root-dir', 'after', dir)\n }\n}\n","import { ArkstackMiddlewareConfig } from './http'\nimport { PromiseOrValue } from './Arkstack'\n\n/**\n * The ArkstackKitDriver class defines the contract for a driver \n * that can be used with the ArkstackKitContract. \n */\nexport abstract class ArkstackKitDriver<TApp, TMiddleware> {\n abstract readonly name: string;\n abstract createApp (): TApp;\n abstract mountPublicAssets (app: TApp, publicPath: string): PromiseOrValue<void>;\n abstract bindRouter (app: TApp): PromiseOrValue<void>;\n abstract applyMiddleware (app: TApp, middleware: ArkstackMiddlewareConfig<TMiddleware>): PromiseOrValue<void>;\n abstract applyMiddleware (app: TApp, middleware: TMiddleware): PromiseOrValue<void>;\n registerErrorHandler (_app: TApp): PromiseOrValue<void> {\n return\n }\n abstract start (app: TApp, port: number): PromiseOrValue<void>;\n}\n\n/**\n * The ArkstackKitContract class defines the contract for an \n * application that uses the ArkstackKitDriver.\n */\nexport abstract class ArkstackKitContract<TApp, TMiddleware> {\n abstract app: TApp;\n abstract driver: ArkstackKitDriver<TApp, TMiddleware>;\n abstract middleware: ArkstackMiddlewareConfig<TMiddleware>;\n abstract boot (port: number): Promise<void>;\n abstract shutdown (): Promise<void>;\n}"],"mappings":";;AASA,IAAsB,WAAtB,MAAsB,SAAsD;CACxE,OAAe,aAAqB,QAAQ,KAAK;CACjD;CACA;;;;;;;CA0BA,MAAM,QAAS,cAAsB,KAAM,WAAqB;EAC5D,MAAM,EAAE,yBAAyB,MAAM,OAAO;EAC9C,MAAM,qBAAqB,OAAO,SAAS;GACvC,MAAM,KAAK,KAAK,MAAM,UAAU;KACjC,OAAO,QAAQ,IAAI,YAAY,YAAY,EAAE,KAAK;;;;;;;;CASzD,OAAO,UAAmB;EACtB,OAAO,SAAS;;;;;;;;CASpB,UAAmB;EACf,OAAO,SAAS;;;;;;;CAQpB,OAAO,aAAsB;EACzB,OAAO,SAAS;;;;;;;;CASpB,WAAY,KAAmB;EAC3B,SAAS,WAAW,IAAI;;;;;;;;CAS5B,OAAO,WAAY,KAAmB;EAClC,MAAM,cAAc,SAAS;EAC7B,SAAS,aAAa;EAEtB,IAAI,gBAAgB,KAChB;EAGJ,IAAI,KAAK,IAAI,gBAAgB,QAAQ,EACjC,KAAK,IAAI,gBAAgB,SAAS,IAAI;;;;;;;;;AC5FlD,IAAsB,oBAAtB,MAA2D;CAOvD,qBAAsB,MAAkC;;;;;;AAU5D,IAAsB,sBAAtB,MAA6D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkstack/contract",
3
- "version": "0.10.9",
3
+ "version": "0.11.0",
4
4
  "type": "module",
5
5
  "description": "Contract module for Arkstack, providing shared interfaces and type contracts used across the framework.",
6
6
  "homepage": "https://arkstack.toneflix.net",
@@ -27,6 +27,9 @@
27
27
  ".": "./dist/index.js",
28
28
  "./package.json": "./package.json"
29
29
  },
30
+ "dependencies": {
31
+ "@arkstack/foundry": "^0.11.0"
32
+ },
30
33
  "scripts": {
31
34
  "build": "tsdown --config-loader unrun",
32
35
  "version:patch": "pnpm version patch"