@devbro/pashmak 0.1.34 → 0.1.36

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.
@@ -1,13 +1,13 @@
1
1
  import { Middleware, Request, Response } from '@devbro/neko-router';
2
- import { PostgresqlConnection } from '@devbro/neko-sql';
3
2
  import { PoolConfig } from 'pg';
3
+ import { Connection } from '@devbro/neko-sql';
4
4
 
5
5
  declare class DatabaseServiceProvider extends Middleware {
6
6
  call(req: Request, res: Response, next: () => Promise<void>): Promise<void>;
7
7
  private static instance;
8
8
  register(): Promise<void>;
9
9
  static getInstance(): DatabaseServiceProvider;
10
- getConnection(db_config: PoolConfig): Promise<PostgresqlConnection>;
10
+ getConnection(db_config: PoolConfig): Connection;
11
11
  }
12
12
 
13
13
  export { DatabaseServiceProvider };
@@ -19,7 +19,7 @@ class DatabaseServiceProvider extends Middleware {
19
19
  ctx().set(["database", name], conn);
20
20
  conns.push(conn);
21
21
  }
22
- BaseModel.setConnection(async () => {
22
+ BaseModel.setConnection(() => {
23
23
  const key = ["database", "default"];
24
24
  let rc;
25
25
  if (ctx.isActive()) {
@@ -27,7 +27,7 @@ class DatabaseServiceProvider extends Middleware {
27
27
  } else if (Global.has(key)) {
28
28
  rc = Global.get(key);
29
29
  } else {
30
- rc = await this.getConnection(db_configs["default"]);
30
+ rc = this.getConnection(db_configs["default"]);
31
31
  Global.set(key, rc);
32
32
  }
33
33
  return rc;
@@ -48,10 +48,10 @@ class DatabaseServiceProvider extends Middleware {
48
48
  }
49
49
  return DatabaseServiceProvider.instance;
50
50
  }
51
- async getConnection(db_config) {
51
+ getConnection(db_config) {
52
52
  const conn = new PostgresqlConnection(db_config);
53
- if (!await conn.connect()) {
54
- throw new Error("Failed to connect to the database");
53
+ if (!conn.isConnected()) {
54
+ conn.connect();
55
55
  }
56
56
  return conn;
57
57
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DatabaseServiceProvider.mts"],"sourcesContent":["import { Middleware } from \"@devbro/neko-router\";\nimport { Request, Response } from \"@devbro/neko-router\";\nimport { PostgresqlConnection } from \"@devbro/neko-sql\";\nimport { PoolConfig } from \"pg\";\nimport { Connection } from \"@devbro/neko-sql\";\nimport { BaseModel } from \"@devbro/neko-orm\";\nimport { ctx } from \"@devbro/neko-context\";\nimport { config } from \"@devbro/neko-config\";\nimport { Global } from \"./global.mjs\";\n\nexport class DatabaseServiceProvider extends Middleware {\n async call(\n req: Request,\n res: Response,\n next: () => Promise<void>,\n ): Promise<void> {\n const db_configs: Record<string, PoolConfig & { name: string }> =\n config.get(\"databases\");\n\n const conns = [];\n try {\n for (const [name, db_config] of Object.entries(db_configs)) {\n const conn = await this.getConnection(db_config);\n ctx().set([\"database\", name], conn);\n conns.push(conn);\n }\n BaseModel.setConnection(async () => {\n const key = [\"database\", \"default\"];\n let rc: Connection | undefined;\n\n if (ctx.isActive()) {\n rc = ctx().get<Connection>(key);\n } else if (Global.has(key)) {\n rc = Global.get<Connection>(key);\n } else {\n rc = await this.getConnection(db_configs[\"default\"]);\n Global.set(key, rc);\n }\n\n return rc!;\n });\n await next();\n } finally {\n for (const conn of conns) {\n await conn.disconnect();\n }\n }\n }\n\n private static instance: DatabaseServiceProvider;\n\n async register(): Promise<void> {}\n\n static getInstance(): DatabaseServiceProvider {\n if (!DatabaseServiceProvider.instance) {\n DatabaseServiceProvider.instance = new DatabaseServiceProvider();\n }\n return DatabaseServiceProvider.instance;\n }\n\n async getConnection(db_config: PoolConfig): Promise<PostgresqlConnection> {\n const conn = new PostgresqlConnection(db_config);\n if (!(await conn.connect())) {\n throw new Error(\"Failed to connect to the database\");\n }\n return conn;\n }\n}\n"],"mappings":";;AAAA,SAAS,kBAAkB;AAE3B,SAAS,4BAA4B;AAGrC,SAAS,iBAAiB;AAC1B,SAAS,WAAW;AACpB,SAAS,cAAc;AACvB,SAAS,cAAc;AAEhB,MAAM,gCAAgC,WAAW;AAAA,EAVxD,OAUwD;AAAA;AAAA;AAAA,EACtD,MAAM,KACJ,KACA,KACA,MACe;AACf,UAAM,aACJ,OAAO,IAAI,WAAW;AAExB,UAAM,QAAQ,CAAC;AACf,QAAI;AACF,iBAAW,CAAC,MAAM,SAAS,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC1D,cAAM,OAAO,MAAM,KAAK,cAAc,SAAS;AAC/C,YAAI,EAAE,IAAI,CAAC,YAAY,IAAI,GAAG,IAAI;AAClC,cAAM,KAAK,IAAI;AAAA,MACjB;AACA,gBAAU,cAAc,YAAY;AAClC,cAAM,MAAM,CAAC,YAAY,SAAS;AAClC,YAAI;AAEJ,YAAI,IAAI,SAAS,GAAG;AAClB,eAAK,IAAI,EAAE,IAAgB,GAAG;AAAA,QAChC,WAAW,OAAO,IAAI,GAAG,GAAG;AAC1B,eAAK,OAAO,IAAgB,GAAG;AAAA,QACjC,OAAO;AACL,eAAK,MAAM,KAAK,cAAc,WAAW,SAAS,CAAC;AACnD,iBAAO,IAAI,KAAK,EAAE;AAAA,QACpB;AAEA,eAAO;AAAA,MACT,CAAC;AACD,YAAM,KAAK;AAAA,IACb,UAAE;AACA,iBAAW,QAAQ,OAAO;AACxB,cAAM,KAAK,WAAW;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAe;AAAA,EAEf,MAAM,WAA0B;AAAA,EAAC;AAAA,EAEjC,OAAO,cAAuC;AAC5C,QAAI,CAAC,wBAAwB,UAAU;AACrC,8BAAwB,WAAW,IAAI,wBAAwB;AAAA,IACjE;AACA,WAAO,wBAAwB;AAAA,EACjC;AAAA,EAEA,MAAM,cAAc,WAAsD;AACxE,UAAM,OAAO,IAAI,qBAAqB,SAAS;AAC/C,QAAI,CAAE,MAAM,KAAK,QAAQ,GAAI;AAC3B,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/DatabaseServiceProvider.mts"],"sourcesContent":["import { Middleware } from \"@devbro/neko-router\";\nimport { Request, Response } from \"@devbro/neko-router\";\nimport { PostgresqlConnection } from \"@devbro/neko-sql\";\nimport { PoolConfig } from \"pg\";\nimport { Connection } from \"@devbro/neko-sql\";\nimport { BaseModel } from \"@devbro/neko-orm\";\nimport { ctx } from \"@devbro/neko-context\";\nimport { config } from \"@devbro/neko-config\";\nimport { Global } from \"./global.mjs\";\n\nexport class DatabaseServiceProvider extends Middleware {\n async call(\n req: Request,\n res: Response,\n next: () => Promise<void>,\n ): Promise<void> {\n const db_configs: Record<string, PoolConfig & { name: string }> =\n config.get(\"databases\");\n\n const conns = [];\n try {\n for (const [name, db_config] of Object.entries(db_configs)) {\n const conn = await this.getConnection(db_config);\n ctx().set([\"database\", name], conn);\n conns.push(conn);\n }\n BaseModel.setConnection(() => {\n const key = [\"database\", \"default\"];\n let rc: Connection | undefined;\n\n if (ctx.isActive()) {\n rc = ctx().get<Connection>(key);\n } else if (Global.has(key)) {\n rc = Global.get<Connection>(key);\n } else {\n rc = this.getConnection(db_configs[\"default\"]);\n Global.set(key, rc);\n }\n\n return rc!;\n });\n await next();\n } finally {\n for (const conn of conns) {\n await conn.disconnect();\n }\n }\n }\n\n private static instance: DatabaseServiceProvider;\n\n async register(): Promise<void> {}\n\n static getInstance(): DatabaseServiceProvider {\n if (!DatabaseServiceProvider.instance) {\n DatabaseServiceProvider.instance = new DatabaseServiceProvider();\n }\n return DatabaseServiceProvider.instance;\n }\n\n getConnection(db_config: PoolConfig): Connection {\n const conn = new PostgresqlConnection(db_config);\n if (!conn.isConnected()) {\n conn.connect();\n }\n return conn;\n }\n}\n"],"mappings":";;AAAA,SAAS,kBAAkB;AAE3B,SAAS,4BAA4B;AAGrC,SAAS,iBAAiB;AAC1B,SAAS,WAAW;AACpB,SAAS,cAAc;AACvB,SAAS,cAAc;AAEhB,MAAM,gCAAgC,WAAW;AAAA,EAVxD,OAUwD;AAAA;AAAA;AAAA,EACtD,MAAM,KACJ,KACA,KACA,MACe;AACf,UAAM,aACJ,OAAO,IAAI,WAAW;AAExB,UAAM,QAAQ,CAAC;AACf,QAAI;AACF,iBAAW,CAAC,MAAM,SAAS,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC1D,cAAM,OAAO,MAAM,KAAK,cAAc,SAAS;AAC/C,YAAI,EAAE,IAAI,CAAC,YAAY,IAAI,GAAG,IAAI;AAClC,cAAM,KAAK,IAAI;AAAA,MACjB;AACA,gBAAU,cAAc,MAAM;AAC5B,cAAM,MAAM,CAAC,YAAY,SAAS;AAClC,YAAI;AAEJ,YAAI,IAAI,SAAS,GAAG;AAClB,eAAK,IAAI,EAAE,IAAgB,GAAG;AAAA,QAChC,WAAW,OAAO,IAAI,GAAG,GAAG;AAC1B,eAAK,OAAO,IAAgB,GAAG;AAAA,QACjC,OAAO;AACL,eAAK,KAAK,cAAc,WAAW,SAAS,CAAC;AAC7C,iBAAO,IAAI,KAAK,EAAE;AAAA,QACpB;AAEA,eAAO;AAAA,MACT,CAAC;AACD,YAAM,KAAK;AAAA,IACb,UAAE;AACA,iBAAW,QAAQ,OAAO;AACxB,cAAM,KAAK,WAAW;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAe;AAAA,EAEf,MAAM,WAA0B;AAAA,EAAC;AAAA,EAEjC,OAAO,cAAuC;AAC5C,QAAI,CAAC,wBAAwB,UAAU;AACrC,8BAAwB,WAAW,IAAI,wBAAwB;AAAA,IACjE;AACA,WAAO,wBAAwB;AAAA,EACjC;AAAA,EAEA,cAAc,WAAmC;AAC/C,UAAM,OAAO,IAAI,qBAAqB,SAAS;AAC/C,QAAI,CAAC,KAAK,YAAY,GAAG;AACvB,WAAK,QAAQ;AAAA,IACf;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -98,7 +98,7 @@ var DatabaseServiceProvider = class _DatabaseServiceProvider extends Middleware
98
98
  (0, import_neko_context.ctx)().set(["database", name], conn);
99
99
  conns.push(conn);
100
100
  }
101
- import_neko_orm.BaseModel.setConnection(async () => {
101
+ import_neko_orm.BaseModel.setConnection(() => {
102
102
  const key = ["database", "default"];
103
103
  let rc;
104
104
  if (import_neko_context.ctx.isActive()) {
@@ -106,7 +106,7 @@ var DatabaseServiceProvider = class _DatabaseServiceProvider extends Middleware
106
106
  } else if (Global.has(key)) {
107
107
  rc = Global.get(key);
108
108
  } else {
109
- rc = await this.getConnection(db_configs["default"]);
109
+ rc = this.getConnection(db_configs["default"]);
110
110
  Global.set(key, rc);
111
111
  }
112
112
  return rc;
@@ -127,10 +127,10 @@ var DatabaseServiceProvider = class _DatabaseServiceProvider extends Middleware
127
127
  }
128
128
  return _DatabaseServiceProvider.instance;
129
129
  }
130
- async getConnection(db_config) {
130
+ getConnection(db_config) {
131
131
  const conn = new import_neko_sql.PostgresqlConnection(db_config);
132
- if (!await conn.connect()) {
133
- throw new Error("Failed to connect to the database");
132
+ if (!conn.isConnected()) {
133
+ conn.connect();
134
134
  }
135
135
  return conn;
136
136
  }
@@ -756,19 +756,15 @@ var cache = (0, import_neko_helper2.createSingleton)((label) => {
756
756
  });
757
757
 
758
758
  // src/cache.mts
759
- var crypto = __toESM(require("crypto"), 1);
760
759
  async function cacheQuery(q, options = {}) {
761
760
  options.ttl = options.ttl ?? 3600;
762
761
  options.cache_label = options.cache_label ?? "default";
763
762
  const sql = q.toSql();
764
- const key = "sql_cache:" + crypto.createHash("md5").update(`${sql.sql}:${sql.bindings.join(",")}`).digest("hex");
765
- const cachedResult = await cache(options.cache_label).get(key);
766
- if (cachedResult) {
767
- return JSON.parse(cachedResult);
768
- }
769
- const rc = await q.get();
770
- await cache(options.cache_label).put(key, JSON.stringify(rc), options.ttl);
771
- return rc;
763
+ return await cache(options.cache_label).remember(
764
+ sql,
765
+ async () => await q.get(),
766
+ options
767
+ );
772
768
  }
773
769
  __name(cacheQuery, "cacheQuery");
774
770
  // Annotate the CommonJS export names for ESM import in node:
@@ -2904,7 +2904,7 @@ var init_DatabaseServiceProvider = __esm({
2904
2904
  (0, import_neko_context6.ctx)().set(["database", name], conn);
2905
2905
  conns.push(conn);
2906
2906
  }
2907
- import_neko_orm.BaseModel.setConnection(async () => {
2907
+ import_neko_orm.BaseModel.setConnection(() => {
2908
2908
  const key = ["database", "default"];
2909
2909
  let rc;
2910
2910
  if (import_neko_context6.ctx.isActive()) {
@@ -2912,7 +2912,7 @@ var init_DatabaseServiceProvider = __esm({
2912
2912
  } else if (Global.has(key)) {
2913
2913
  rc = Global.get(key);
2914
2914
  } else {
2915
- rc = await this.getConnection(db_configs["default"]);
2915
+ rc = this.getConnection(db_configs["default"]);
2916
2916
  Global.set(key, rc);
2917
2917
  }
2918
2918
  return rc;
@@ -2933,10 +2933,10 @@ var init_DatabaseServiceProvider = __esm({
2933
2933
  }
2934
2934
  return _DatabaseServiceProvider.instance;
2935
2935
  }
2936
- async getConnection(db_config) {
2936
+ getConnection(db_config) {
2937
2937
  const conn = new import_neko_sql2.PostgresqlConnection(db_config);
2938
- if (!await conn.connect()) {
2939
- throw new Error("Failed to connect to the database");
2938
+ if (!conn.isConnected()) {
2939
+ conn.connect();
2940
2940
  }
2941
2941
  return conn;
2942
2942
  }
package/dist/cache.mjs CHANGED
@@ -2,19 +2,15 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  export * from "@devbro/neko-cache";
4
4
  import { cache } from "./facades.mjs";
5
- import * as crypto from "crypto";
6
5
  async function cacheQuery(q, options = {}) {
7
6
  options.ttl = options.ttl ?? 3600;
8
7
  options.cache_label = options.cache_label ?? "default";
9
8
  const sql = q.toSql();
10
- const key = "sql_cache:" + crypto.createHash("md5").update(`${sql.sql}:${sql.bindings.join(",")}`).digest("hex");
11
- const cachedResult = await cache(options.cache_label).get(key);
12
- if (cachedResult) {
13
- return JSON.parse(cachedResult);
14
- }
15
- const rc = await q.get();
16
- await cache(options.cache_label).put(key, JSON.stringify(rc), options.ttl);
17
- return rc;
9
+ return await cache(options.cache_label).remember(
10
+ sql,
11
+ async () => await q.get(),
12
+ options
13
+ );
18
14
  }
19
15
  __name(cacheQuery, "cacheQuery");
20
16
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cache.mts"],"sourcesContent":["export * from \"@devbro/neko-cache\";\n\nimport { Query } from \"@devbro/neko-sql\";\nimport { cache } from \"./facades.mjs\";\nimport * as crypto from \"crypto\";\n\nexport type CacheQueryOptions = {\n ttl?: number;\n tags?: string[];\n cache_label?: string;\n};\n\nexport async function cacheQuery(\n q: Query,\n options: CacheQueryOptions = {},\n): ReturnType<Query[\"get\"]> {\n options.ttl = options.ttl ?? 3600; // default TTL 1 hour\n options.cache_label = options.cache_label ?? \"default\";\n const sql = q.toSql();\n\n const key =\n \"sql_cache:\" +\n crypto\n .createHash(\"md5\")\n .update(`${sql.sql}:${sql.bindings.join(\",\")}`)\n .digest(\"hex\");\n const cachedResult = (await cache(options.cache_label).get(key)) as\n | string\n | undefined;\n if (cachedResult) {\n return JSON.parse(cachedResult);\n }\n\n const rc = await q.get();\n await cache(options.cache_label).put(key, JSON.stringify(rc), options.ttl);\n return rc;\n}\n"],"mappings":";;AAAA,cAAc;AAGd,SAAS,aAAa;AACtB,YAAY,YAAY;AAQxB,eAAsB,WACpB,GACA,UAA6B,CAAC,GACJ;AAC1B,UAAQ,MAAM,QAAQ,OAAO;AAC7B,UAAQ,cAAc,QAAQ,eAAe;AAC7C,QAAM,MAAM,EAAE,MAAM;AAEpB,QAAM,MACJ,eACA,OACG,WAAW,KAAK,EAChB,OAAO,GAAG,IAAI,GAAG,IAAI,IAAI,SAAS,KAAK,GAAG,CAAC,EAAE,EAC7C,OAAO,KAAK;AACjB,QAAM,eAAgB,MAAM,MAAM,QAAQ,WAAW,EAAE,IAAI,GAAG;AAG9D,MAAI,cAAc;AAChB,WAAO,KAAK,MAAM,YAAY;AAAA,EAChC;AAEA,QAAM,KAAK,MAAM,EAAE,IAAI;AACvB,QAAM,MAAM,QAAQ,WAAW,EAAE,IAAI,KAAK,KAAK,UAAU,EAAE,GAAG,QAAQ,GAAG;AACzE,SAAO;AACT;AAxBsB;","names":[]}
1
+ {"version":3,"sources":["../src/cache.mts"],"sourcesContent":["export * from \"@devbro/neko-cache\";\n\nimport { Query } from \"@devbro/neko-sql\";\nimport { cache } from \"./facades.mjs\";\nimport * as crypto from \"crypto\";\nimport { JSONValue } from \"@devbro/neko-helper\";\n\nexport type CacheQueryOptions = {\n ttl?: number;\n tags?: string[];\n cache_label?: string;\n};\n\nexport async function cacheQuery(\n q: Query,\n options: CacheQueryOptions = {},\n): ReturnType<Query[\"get\"]> {\n options.ttl = options.ttl ?? 3600; // default TTL 1 hour\n options.cache_label = options.cache_label ?? \"default\";\n const sql = q.toSql();\n\n return await cache(options.cache_label).remember(\n sql as JSONValue,\n async () => await q.get(),\n options,\n );\n}\n"],"mappings":";;AAAA,cAAc;AAGd,SAAS,aAAa;AAUtB,eAAsB,WACpB,GACA,UAA6B,CAAC,GACJ;AAC1B,UAAQ,MAAM,QAAQ,OAAO;AAC7B,UAAQ,cAAc,QAAQ,eAAe;AAC7C,QAAM,MAAM,EAAE,MAAM;AAEpB,SAAO,MAAM,MAAM,QAAQ,WAAW,EAAE;AAAA,IACtC;AAAA,IACA,YAAY,MAAM,EAAE,IAAI;AAAA,IACxB;AAAA,EACF;AACF;AAbsB;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devbro/pashmak",
3
- "version": "0.1.34",
3
+ "version": "0.1.36",
4
4
  "description": "testing application for the entire repo",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",