@redocly/revel 0.128.0-next.8 → 0.128.0-next.9

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 (39) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/server/api-routes/execute-api-route.js +1 -1
  3. package/dist/server/api-routes/helpers/enhance-context.d.ts +2 -2
  4. package/dist/server/api-routes/helpers/enhance-context.js +1 -1
  5. package/dist/server/persistence/cache/repositories/cache-local-repository.d.ts +2 -2
  6. package/dist/server/persistence/cache/repositories/cache-local-repository.js +1 -1
  7. package/dist/server/persistence/file-hashes/repositories/file-hashes-local-repository.d.ts +2 -2
  8. package/dist/server/persistence/file-hashes/repositories/file-hashes-local-repository.js +1 -1
  9. package/dist/server/persistence/kv/repositories/kv-remote-repository.d.ts +3 -3
  10. package/dist/server/persistence/kv/repositories/kv-remote-repository.js +1 -1
  11. package/dist/server/persistence/kv/services/kv-service.d.ts +1 -1
  12. package/dist/server/persistence/kv/services/kv-service.js +1 -1
  13. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +1 -1
  14. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
  15. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +3 -3
  16. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +1 -1
  17. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +4 -4
  18. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +1 -1
  19. package/dist/server/providers/database/base-repository.d.ts +2 -2
  20. package/dist/server/providers/database/base-repository.js +1 -1
  21. package/dist/server/providers/database/constants.d.ts +7 -4
  22. package/dist/server/providers/database/constants.js +1 -1
  23. package/dist/server/providers/database/database-connection-factory.d.ts +6 -0
  24. package/dist/server/providers/database/database-connection-factory.js +1 -0
  25. package/dist/server/providers/database/database-connections-manager.d.ts +3 -3
  26. package/dist/server/providers/database/database-connections-manager.js +1 -1
  27. package/dist/server/providers/database/database-initialization-strategy.d.ts +4 -10
  28. package/dist/server/providers/database/database-initialization-strategy.js +1 -1
  29. package/dist/server/providers/database/database-preconnect-service.js +1 -1
  30. package/dist/server/providers/database/databases/catalog-sqlite/drizzle.config.js +1 -1
  31. package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +1 -1
  32. package/dist/server/providers/database/types.d.ts +11 -6
  33. package/dist/server/ssr/server-side-props/get-server-props-from-user-handler.js +1 -1
  34. package/dist/server/types/plugins/api-functions.d.ts +1 -1
  35. package/package.json +5 -5
  36. package/dist/server/constants/sqld-remote-database.d.ts +0 -4
  37. package/dist/server/constants/sqld-remote-database.js +0 -1
  38. package/dist/server/plugins/catalog-entities/database/consts.d.ts +0 -4
  39. package/dist/server/plugins/catalog-entities/database/consts.js +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @redocly/revel
2
2
 
3
+ ## 0.128.0-next.9
4
+
5
+ ### Patch Changes
6
+
7
+ - 39df6e65ff: Fixed an issue where the AI Search form submitted during mid-Japanese input.
8
+ - Updated dependencies [39df6e65ff]
9
+ - Updated dependencies [bc191c239c]
10
+ - @redocly/theme@0.60.0-next.6
11
+ - @redocly/openapi-docs@3.16.0-next.9
12
+ - @redocly/asyncapi-docs@1.5.0-next.9
13
+ - @redocly/graphql-docs@1.5.0-next.1
14
+ - @redocly/portal-plugin-mock-server@0.13.0-next.9
15
+
3
16
  ## 0.128.0-next.8
4
17
 
5
18
  ### Minor Changes
@@ -1 +1 @@
1
- import{Hono as g}from"hono";import{TrieRouter as f}from"hono/router/trie-router";import{Logger as m}from"../tools/notifiers/logger.js";import{importApiRoutesHandler as q}from"./import-api-routes-handlers.js";import{getBodyWithSizeCheck as h}from"./helpers/get-body-with-size-check.js";import{setupLogger as w}from"./helpers/setup-logger.js";import{telemetry as i}from"../telemetry/index.js";import{KvService as y}from"../persistence/kv/services/kv-service.js";import{enhanceContext as S}from"./helpers/enhance-context.js";const r=new m;r.patchConsole();async function C(e){i.initialize(),w(r,e.loggerStickyState,e.requestHandlerId);const n=new g({router:new f}),{requestHandlers:a}=await q(e.serverOutDir),u=a[e.requestHandlerId],c=(await u()).default,l=async()=>await y.getInstance({baseDbDir:e.serverOutDir,sqldRemoteDatabaseUrl:e.sqldRemoteDatabaseUrl,sqldRemoteDatabaseAuthToken:e.sqldRemoteDatabaseAuthToken});n.all(e.slug,async t=>{const o=await c(t.req.raw,S({honoCtx:t,ctx:e.ctxData,telemetry:i,getStorage:l}),e.staticData);return o instanceof Response?o:typeof o=="string"?t.text(o):t.json(o)}),n.onError((t,o)=>{if(r.error(`[${e.requestHandlerId}] ${t.message} ${t.stack}`),t instanceof SyntaxError)return o.text(t.message,500);throw t});const s=await n.request(e.req.url,e.req),d=await h(s,e.maxResponseSizeMB);return{status:s.status,headers:Object.fromEntries(s.headers.entries()),body:d,loggerStickyState:r.getStickyState()}}export{C as executeApiRoute};
1
+ import{Hono as f}from"hono";import{TrieRouter as g}from"hono/router/trie-router";import{Logger as m}from"../tools/notifiers/logger.js";import{importApiRoutesHandler as q}from"./import-api-routes-handlers.js";import{getBodyWithSizeCheck as h}from"./helpers/get-body-with-size-check.js";import{setupLogger as w}from"./helpers/setup-logger.js";import{telemetry as i}from"../telemetry/index.js";import{KvService as y}from"../persistence/kv/services/kv-service.js";import{enhanceContext as D}from"./helpers/enhance-context.js";const r=new m;r.patchConsole();async function C(e){i.initialize(),w(r,e.loggerStickyState,e.requestHandlerId);const n=new f({router:new g}),{requestHandlers:a}=await q(e.serverOutDir),u=a[e.requestHandlerId],c=(await u()).default,l=async()=>await y.getInstance({baseDbDir:e.serverOutDir,sqldRemoteDatabaseUrl:e.sqldRemoteDatabaseUrl,sqldRemoteDatabaseAuthToken:e.sqldRemoteDatabaseAuthToken});n.all(e.slug,async t=>{const o=await c(t.req.raw,D({honoCtx:t,ctx:e.ctxData,telemetry:i,getKv:l}),e.staticData);return o instanceof Response?o:typeof o=="string"?t.text(o):t.json(o)}),n.onError((t,o)=>{if(r.error(`[${e.requestHandlerId}] ${t.message} ${t.stack}`),t instanceof SyntaxError)return o.text(t.message,500);throw t});const s=await n.request(e.req.url,e.req),d=await h(s,e.maxResponseSizeMB);return{status:s.status,headers:Object.fromEntries(s.headers.entries()),body:d,loggerStickyState:r.getStickyState()}}export{C as executeApiRoute};
@@ -6,7 +6,7 @@ export type EnhanceContextParams = {
6
6
  honoCtx: Context;
7
7
  ctx: ApiFunctionsBasicContext;
8
8
  telemetry?: AsyncApiRealmAPI.Telemetry;
9
- getStorage: () => Promise<KvService>;
9
+ getKv: () => Promise<KvService>;
10
10
  };
11
- export declare const enhanceContext: ({ honoCtx, ctx, telemetry, getStorage, }: EnhanceContextParams) => ApiFunctionsContext;
11
+ export declare const enhanceContext: ({ honoCtx, ctx, telemetry, getKv, }: EnhanceContextParams) => ApiFunctionsContext;
12
12
  //# sourceMappingURL=enhance-context.d.ts.map
@@ -1 +1 @@
1
- import{deleteCookie as o,getCookie as p,setCookie as f}from"hono/cookie";const j=({honoCtx:r,ctx:u,telemetry:a,getStorage:l})=>{const i=r.req.routePath,m=r.req.param(),d=Object.fromEntries(Object.entries(m).map(([e,t])=>{if(t&&(i.includes(`/:${e}{.*}`)||i.includes(`/:${e}{.+}`))){const c=t.split("/").filter(Boolean);return[e,c.length?c:void 0]}return[e,t]})),s={...r.res,status:e=>(r.status(e),s),json:e=>r.json(e),text:(e,t)=>(t&&r.status(t),r.text(e)),redirect:(e,t=302)=>r.redirect(e,t),setCookie:(e,t,n)=>(f(r,e,t,n),s),deleteCookie:e=>(o(r,e),s)};return{...u,...s,params:d,query:r.req.query()||{},cookies:p(r),telemetry:a,getStorage:l}};export{j as enhanceContext};
1
+ import{deleteCookie as o,getCookie as p,setCookie as f}from"hono/cookie";const j=({honoCtx:r,ctx:u,telemetry:a,getKv:l})=>{const i=r.req.routePath,m=r.req.param(),d=Object.fromEntries(Object.entries(m).map(([e,t])=>{if(t&&(i.includes(`/:${e}{.*}`)||i.includes(`/:${e}{.+}`))){const c=t.split("/").filter(Boolean);return[e,c.length?c:void 0]}return[e,t]})),s={...r.res,status:e=>(r.status(e),s),json:e=>r.json(e),text:(e,t)=>(t&&r.status(t),r.text(e)),redirect:(e,t=302)=>r.redirect(e,t),setCookie:(e,t,n)=>(f(r,e,t,n),s),deleteCookie:e=>(o(r,e),s)};return{...u,...s,params:d,query:r.req.query()||{},cookies:p(r),telemetry:a,getKv:l}};export{j as enhanceContext};
@@ -1,8 +1,8 @@
1
1
  import type { CacheReadModelSchema, SetCacheParams } from '../types.js';
2
- import type { DatabaseInitializationResult, RepositoryInstanceOptions } from '../../../providers/database/types.js';
2
+ import type { DatabaseConnection, RepositoryInstanceOptions } from '../../../providers/database/types.js';
3
3
  export declare class CacheLocalRepository {
4
4
  #private;
5
- constructor(initializationResult: DatabaseInitializationResult);
5
+ constructor(dbConnection: DatabaseConnection);
6
6
  static getInstance(options: RepositoryInstanceOptions): Promise<CacheLocalRepository>;
7
7
  get(key: string, namespace: string): Promise<CacheReadModelSchema | null>;
8
8
  set(params: SetCacheParams): Promise<string | null>;
@@ -1 +1 @@
1
- import{and as o,eq as n}from"drizzle-orm";import{isTtlExpired as d}from"../../../utils/is-ttl-expired.js";import{logger as c}from"../../../tools/notifiers/logger.js";import{LocalDatabaseInitializationStrategy as m}from"../../../providers/database/database-initialization-strategy.js";import{MAIN_LOCAL_DATABASE_FOLDER as u,MAIN_DATABASE_MIGRATIONS_FOLDER as h,MAIN_LOCAL_DATABASE_NAME as A}from"../../../providers/database/constants.js";import{cacheTable as r}from"../../../providers/database/databases/main-sqlite/schemas/cache-table.js";import{createCacheDbRecord as g}from"../mappers/create-cache-db-record.js";import{createCacheReadModel as p}from"../mappers/create-cache-read-model.js";class i{static#t;#e;constructor(t){this.#e=t.client}static async getInstance(t){if(!i.#t){const a=await new m().initialize({...t,databaseName:A,additionalFolder:u,migrationsFolder:h});i.#t=new i(a)}return i.#t}async get(t,e){const a=[n(r.key,t)];e&&a.push(n(r.namespace,e));const l=await this.#e.client.select().from(r).where(o(...a)).get();if(!l)return null;const s=p(l);return d(s.ttlInSeconds,s.createdAt)?(await this.delete(t,e),null):s}async set(t){try{const e=g(t);return await this.#e.client.insert(r).values(e).onConflictDoUpdate({target:[r.key],set:{value:e.value,namespace:e.namespace,ttl:e.ttl,updatedAt:e.updatedAt}}),e.key}catch(e){return c.error("Error setting cache: "+e.message),null}}async delete(t,e){try{return await this.#e.client.delete(r).where(o(n(r.key,t),n(r.namespace,e))),!0}catch(a){return c.error("Error deleting cache: "+a.message),!1}}async deleteByNamespace(t){try{return await this.#e.client.delete(r).where(n(r.namespace,t)),!0}catch(e){return c.error("Error deleting cache by namespace: "+e.message),!1}}async clearAll(){try{return await this.#e.client.delete(r),!0}catch(t){return c.error("Error clearing all cache: "+t.message),!1}}}export{i as CacheLocalRepository};
1
+ import{and as l,eq as a}from"drizzle-orm";import{isTtlExpired as d}from"../../../utils/is-ttl-expired.js";import{logger as o}from"../../../tools/notifiers/logger.js";import{DatabaseConnectionFactory as m}from"../../../providers/database/database-connection-factory.js";import{cacheTable as r}from"../../../providers/database/databases/main-sqlite/schemas/cache-table.js";import{createCacheDbRecord as u}from"../mappers/create-cache-db-record.js";import{createCacheReadModel as h}from"../mappers/create-cache-read-model.js";class n{static#t;#e;constructor(t){this.#e=t.client}static async getInstance(t){if(!n.#t){const e=await m.create("main-local",t);if(!e)throw new Error("Failed to create db connection for cache local repository");n.#t=new n(e)}return n.#t}async get(t,e){const c=[a(r.key,t)];e&&c.push(a(r.namespace,e));const i=await this.#e.client.select().from(r).where(l(...c)).get();if(!i)return null;const s=h(i);return d(s.ttlInSeconds,s.createdAt)?(await this.delete(t,e),null):s}async set(t){try{const e=u(t);return await this.#e.client.insert(r).values(e).onConflictDoUpdate({target:[r.key],set:{value:e.value,namespace:e.namespace,ttl:e.ttl,updatedAt:e.updatedAt}}),e.key}catch(e){return o.error("Error setting cache: "+e.message),null}}async delete(t,e){try{return await this.#e.client.delete(r).where(l(a(r.key,t),a(r.namespace,e))),!0}catch(c){return o.error("Error deleting cache: "+c.message),!1}}async deleteByNamespace(t){try{return await this.#e.client.delete(r).where(a(r.namespace,t)),!0}catch(e){return o.error("Error deleting cache by namespace: "+e.message),!1}}async clearAll(){try{return await this.#e.client.delete(r),!0}catch(t){return o.error("Error clearing all cache: "+t.message),!1}}}export{n as CacheLocalRepository};
@@ -1,11 +1,11 @@
1
1
  import type { FileHashReadModelSchema } from '../types.js';
2
2
  import type { Filter } from '../../../providers/database/pagination/types.js';
3
3
  import type { FileHashStatus, UpsertFileHashParams } from '../types.js';
4
- import type { DatabaseInitializationResult, RepositoryInstanceOptions } from '../../../providers/database/types.js';
4
+ import type { DatabaseConnection, RepositoryInstanceOptions } from '../../../providers/database/types.js';
5
5
  import { BaseRepository } from '../../../providers/database/base-repository.js';
6
6
  export declare class FileHashesLocalRepository extends BaseRepository {
7
7
  #private;
8
- constructor(initializationResult: DatabaseInitializationResult);
8
+ constructor(dbConnection: DatabaseConnection);
9
9
  static getInstance(options: RepositoryInstanceOptions): Promise<FileHashesLocalRepository>;
10
10
  getByPath(filePath: string): Promise<FileHashReadModelSchema | null>;
11
11
  getAllOutdated(fileType: string): Promise<FileHashReadModelSchema[]>;
@@ -1 +1 @@
1
- import{FileHashesLocalWriteRepository as s}from"./file-hashes-local-write-repository.js";import{FileHashesLocalReadRepository as r}from"./file-hashes-local-read-repository.js";import{BaseRepository as n}from"../../../providers/database/base-repository.js";import{LocalDatabaseInitializationStrategy as o}from"../../../providers/database/database-initialization-strategy.js";import{MAIN_LOCAL_DATABASE_FOLDER as l,MAIN_DATABASE_MIGRATIONS_FOLDER as d,MAIN_LOCAL_DATABASE_NAME as A}from"../../../providers/database/constants.js";class e extends n{static#e;#a;#t;constructor(t){super(t),this.#a=new r(this.databaseClient),this.#t=new s(this.databaseClient)}static async getInstance(t){if(!e.#e){const i=await new o().initialize({...t,databaseName:A,additionalFolder:l,migrationsFolder:d});e.#e=new e(i)}return e.#e}async getByPath(t){return this.#a.getByPath(t)}async getAllOutdated(t){return this.#a.getAllOutdated(t)}async upsertFileHash(t){return await this.#t.upsertFileHash(t)}async updateFileHashesStatus(t,a){return this.#t.updateFileHashes(t,a)}async deleteFileHashes(t){return this.#t.deleteFileHashes(t)}}export{e as FileHashesLocalRepository};
1
+ import{DatabaseConnectionFactory as s}from"../../../providers/database/database-connection-factory.js";import{BaseRepository as r}from"../../../providers/database/base-repository.js";import{FileHashesLocalWriteRepository as i}from"./file-hashes-local-write-repository.js";import{FileHashesLocalReadRepository as n}from"./file-hashes-local-read-repository.js";class e extends r{static#e;#a;#t;constructor(t){super(t),this.#a=new n(this.databaseClient),this.#t=new i(this.databaseClient)}static async getInstance(t){if(!e.#e){const a=await s.create("main-local",t);if(!a)throw new Error("Failed to create db connection for file hashes local repository");e.#e=new e(a)}return e.#e}async getByPath(t){return this.#a.getByPath(t)}async getAllOutdated(t){return this.#a.getAllOutdated(t)}async upsertFileHash(t){return await this.#t.upsertFileHash(t)}async updateFileHashesStatus(t,a){return this.#t.updateFileHashes(t,a)}async deleteFileHashes(t){return this.#t.deleteFileHashes(t)}}export{e as FileHashesLocalRepository};
@@ -1,11 +1,11 @@
1
1
  import type { KvKey, KvReadSchema, KvSetOptions, KvValue, KvListSelector, KvListOptions, KvListResponse, KvTransaction } from '@redocly/config';
2
- import type { DatabaseInitializationResult, RepositoryInstanceOptions } from '../../../providers/database/types.js';
2
+ import type { DatabaseConnection, RepositoryInstanceOptions } from '../../../providers/database/types.js';
3
3
  import { BaseRepository } from '../../../providers/database/base-repository.js';
4
4
  export declare const KV_KEY_END_BOUNDARY = "\u0002";
5
5
  export declare class KvRemoteRepository extends BaseRepository {
6
6
  #private;
7
- constructor(initializationResult: DatabaseInitializationResult);
8
- static getInstance(options: RepositoryInstanceOptions): Promise<KvRemoteRepository | undefined>;
7
+ constructor(dbConnection: DatabaseConnection);
8
+ static getInstance(options: RepositoryInstanceOptions): Promise<KvRemoteRepository | null>;
9
9
  get<T extends KvValue = KvValue>(key: KvKey): Promise<KvReadSchema<T> | null>;
10
10
  getMany<T extends KvValue = KvValue>(keys: KvKey[]): Promise<(KvReadSchema<T> | null)[]>;
11
11
  list<T extends KvValue = KvValue>(selector: KvListSelector, options?: KvListOptions): Promise<KvListResponse<T>>;
@@ -1 +1 @@
1
- import{eq as T,and as f,gte as y,gt as S,lt as p,asc as R,desc as v,or as b,isNull as w,sql as g,inArray as x,count as C}from"drizzle-orm";import{logger as d}from"../../../tools/notifiers/logger.js";import{SQLD_REMOTE_DATABASE_FOLDER as M,SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER as O,SQLD_REMOTE_DATABASE_NAME as L}from"../../../constants/sqld-remote-database.js";import{DatabaseConnectionsManager as B}from"../../../providers/database/database-connections-manager.js";import{kvTable as t}from"../../../providers/database/databases/sqld-sqlite/schemas/kv-table.js";import{BaseRepository as k}from"../../../providers/database/base-repository.js";import{RemoteDatabaseInitializationStrategy as U}from"../../../providers/database/database-initialization-strategy.js";import{createKvReadRecord as D}from"../mappers/create-kv-read-record.js";import{createKvDbRecord as N,encodeKvKey as i}from"../mappers/create-kv-db-record.js";const Q="";class u extends k{static#e;constructor(e){super(e)}static async getInstance(e){if(!u.#e){const n=process.env.SQLD_REMOTE_DATABASE_URL&&process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN,r=e.sqldRemoteDatabaseUrl&&e.sqldRemoteDatabaseAuthToken;if(!n&&!r){process.env.NEW_CATALOG_ENABLED==="true"&&d.warn("SQLD_REMOTE_DATABASE_URL and SQLD_REMOTE_DATABASE_AUTH_TOKEN env variables or sqldRemoteDatabaseUrl and sqldRemoteDatabaseAuthToken options not set - remote database will not be initialized");return}try{const a=await B.getConnection({config:{...e,databaseName:L,additionalFolder:M,migrationsFolder:O,syncUrl:process.env.SQLD_REMOTE_DATABASE_URL||e.sqldRemoteDatabaseUrl,authToken:process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN||e.sqldRemoteDatabaseAuthToken},strategy:new U});if(!a)throw new Error("Remote database connection initialization failed");u.#e=new u(a)}catch{u.#e=void 0;return}}return u.#e}async get(e){try{const n=i(e),r=await this.databaseClient.client.select().from(t).where(f(T(t.encodedKey,n),b(w(t.expiresAt),y(t.expiresAt,g`datetime('now')`)))).get();return r?D(r):null}catch(n){return d.error("Error getting kv entry by key",n),null}}async getMany(e){try{if(e.length===0)return[];const n=e.map(c=>i(c)),r=await this.databaseClient.client.select().from(t).where(x(t.encodedKey,n)).all(),a=new Map(r.map(c=>[c.encodedKey,c]));return e.map((c,E)=>{const m=n[E],l=a.get(m);return!l||this.#t(l.expiresAt)?null:D(l)})}catch(n){return d.error("Error getting multiple kv entries",n),[]}}async list(e,n){try{const r=n?.limit??100,a=n?.reverse??!1,s=[],c=b(w(t.expiresAt),y(t.expiresAt,g`datetime('now')`));if(s.push(c),"prefix"in e){const o=i(e.prefix),h="start"in e?i(e.start):o,K="end"in e?i(e.end):o+Q;s.push(y(t.encodedKey,h)),s.push(p(t.encodedKey,K))}else if("start"in e&&"end"in e){const o=i(e.start),h=i(e.end);s.push(y(t.encodedKey,o)),s.push(p(t.encodedKey,h))}if(n?.cursor){const o=a?p(t.encodedKey,n.cursor):S(t.encodedKey,n.cursor);s.push(o)}const E=this.databaseClient.client.select().from(t),m=s.length>0?E.where(f(...s)):E,l=this.databaseClient.client.select({count:C()}).from(t),_=(await(s.length>0?l.where(f(...s)):l).get())?.count??0,A=await m.orderBy(a?v(t.encodedKey):R(t.encodedKey)).limit(r).all();return{items:A.map(o=>D(o)),total:_,cursor:_>A.length?A[A.length-1]?.encodedKey??null:null}}catch(r){return d.error("Error listing kv entries",r),{items:[],total:0,cursor:null}}}async set(e,n,r){try{const a=N({key:e,value:n,ttlInSeconds:r?.ttlInSeconds});return await this.databaseClient.client.insert(t).values(a).onConflictDoUpdate({target:[t.encodedKey],set:{value:a.value,expiresAt:a.expiresAt,updatedAt:a.updatedAt}}),a.encodedKey}catch(a){return d.error("Error saving kv entry",a),null}}async delete(e){try{const n=i(e);return await this.databaseClient.client.delete(t).where(T(t.encodedKey,n)),!0}catch(n){return d.error("Error deleting kv entry by key",n),!1}}async clearExpired(){try{await this.databaseClient.client.delete(t).where(y(t.expiresAt,g`datetime('now')`))}catch(e){d.error("Error clearing expired kv entries",e)}}async transaction(e){return this.databaseClient.transactionsManager.transaction(async()=>e({get:async r=>this.get(r),getMany:async r=>this.getMany(r),set:async(r,a,s)=>this.set(r,a,s),delete:async r=>this.delete(r)}))}#t(e){return e?new Date(e)<new Date:!1}}export{Q as KV_KEY_END_BOUNDARY,u as KvRemoteRepository};
1
+ import{eq as C,and as f,gte as y,gt as k,lt as w,asc as D,desc as M,or as v,isNull as E,sql as K,inArray as B,count as q}from"drizzle-orm";import{logger as d}from"../../../tools/notifiers/logger.js";import{kvTable as r}from"../../../providers/database/databases/sqld-sqlite/schemas/kv-table.js";import{BaseRepository as I}from"../../../providers/database/base-repository.js";import{DatabaseConnectionFactory as N}from"../../../providers/database/database-connection-factory.js";import{createKvReadRecord as x}from"../mappers/create-kv-read-record.js";import{createKvDbRecord as S,encodeKvKey as o}from"../mappers/create-kv-db-record.js";const Q="";class l extends I{static#e;constructor(e){super(e)}static async getInstance(e){if(!l.#e)try{const t=await N.create("sqld-remote",e);if(!t)return l.#e=null,null;l.#e=new l(t)}catch(t){return d.error("Error creating kv remote repository",t),l.#e=null,null}return l.#e}async get(e){try{const t=o(e),n=await this.databaseClient.client.select().from(r).where(f(C(r.encodedKey,t),v(E(r.expiresAt),y(r.expiresAt,K`datetime('now')`)))).get();return n?x(n):null}catch(t){return d.error("Error getting kv entry by key",t),null}}async getMany(e){try{if(e.length===0)return[];const t=e.map(i=>o(i)),n=await this.databaseClient.client.select().from(r).where(B(r.encodedKey,t)).all(),s=new Map(n.map(i=>[i.encodedKey,i]));return e.map((i,h)=>{const p=t[h],u=s.get(p);return!u||this.#t(u.expiresAt)?null:x(u)})}catch(t){return d.error("Error getting multiple kv entries",t),[]}}async list(e,t){try{const n=t?.limit??100,s=t?.reverse??!1,a=[],i=v(E(r.expiresAt),y(r.expiresAt,K`datetime('now')`));if(a.push(i),"prefix"in e){const c=o(e.prefix),g="start"in e?o(e.start):c,A="end"in e?o(e.end):c+Q;a.push(y(r.encodedKey,g)),a.push(w(r.encodedKey,A))}else if("start"in e&&"end"in e){const c=o(e.start),g=o(e.end);a.push(y(r.encodedKey,c)),a.push(w(r.encodedKey,g))}if(t?.cursor){const c=s?w(r.encodedKey,t.cursor):k(r.encodedKey,t.cursor);a.push(c)}const h=this.databaseClient.client.select().from(r),p=a.length>0?h.where(f(...a)):h,u=this.databaseClient.client.select({count:q()}).from(r),b=(await(a.length>0?u.where(f(...a)):u).get())?.count??0,m=await p.orderBy(s?M(r.encodedKey):D(r.encodedKey)).limit(n).all();return{items:m.map(c=>x(c)),total:b,cursor:b>m.length?m[m.length-1]?.encodedKey??null:null}}catch(n){return d.error("Error listing kv entries",n),{items:[],total:0,cursor:null}}}async set(e,t,n){try{const s=S({key:e,value:t,ttlInSeconds:n?.ttlInSeconds});return await this.databaseClient.client.insert(r).values(s).onConflictDoUpdate({target:[r.encodedKey],set:{value:s.value,expiresAt:s.expiresAt,updatedAt:s.updatedAt}}),s.encodedKey}catch(s){return d.error("Error saving kv entry",s),null}}async delete(e){try{const t=o(e);return await this.databaseClient.client.delete(r).where(C(r.encodedKey,t)),!0}catch(t){return d.error("Error deleting kv entry by key",t),!1}}async clearExpired(){try{await this.databaseClient.client.delete(r).where(y(r.expiresAt,K`datetime('now')`))}catch(e){d.error("Error clearing expired kv entries",e)}}async transaction(e){return this.databaseClient.transactionsManager.transaction(async()=>e({get:async n=>this.get(n),getMany:async n=>this.getMany(n),set:async(n,s,a)=>this.set(n,s,a),delete:async n=>this.delete(n)}))}#t(e){return e?new Date(e)<new Date:!1}}export{Q as KV_KEY_END_BOUNDARY,l as KvRemoteRepository};
@@ -3,7 +3,7 @@ import type { KvValue, KvKey, KvReadSchema, KvSetOptions, KvListOptions, KvListR
3
3
  import { KvRemoteRepository } from '../repositories/kv-remote-repository.js';
4
4
  export declare class KvService {
5
5
  #private;
6
- constructor(remoteRepository: KvRemoteRepository | undefined);
6
+ constructor(remoteRepository: KvRemoteRepository | null);
7
7
  static getInstance(options: ServiceInstanceOptions): Promise<KvService>;
8
8
  /**
9
9
  * Get a kv entry by key
@@ -1 +1 @@
1
- import{isTtlCorrect as o}from"../../../utils/is-ttl-correct.js";import{KvRemoteRepository as c}from"../repositories/kv-remote-repository.js";class n{static#e;#t;constructor(t){this.#t=t}static async#n(t){const e=await c.getInstance(t),s=new n(e);n.#e=s}static async getInstance(t){return t.removeExisting===void 0&&(t.removeExisting=!1),n.#e||await n.#n(t),n.#e}async get(t){return await this.#t?.sync(),await this.#t?.get(t)??null}async getMany(t){return await this.#t?.sync(),await this.#t?.getMany(t)??[]}async list(t,e){return await this.#t?.sync(),await this.#t?.list(t,e)??{items:[],total:0,cursor:null}}async set(t,e,s){if(this.#r(e),this.#s(e),!o(s?.ttlInSeconds))throw new Error("TTL must be null or a positive number");return await this.#t?.set(t,e,s)??null}async delete(t){return!!await this.#t?.delete(t)}async clearExpired(){return await this.#t?.clearExpired()}async transaction(t){if(!this.#t)throw new Error("Remote repository not available for transactions");return await this.#t.sync(),this.#t.transaction(async e=>t({get:async r=>e.get(r),getMany:async r=>e.getMany(r),set:async(r,i,a)=>{if(this.#r(i),this.#s(i),!o(a?.ttlInSeconds))throw new Error("TTL must be null or a positive number");return e.set(r,i,a)},delete:async r=>e.delete(r)}))}#r(t){try{JSON.stringify(t)}catch(e){const s=e instanceof Error?e.message:"Unknown error";throw new Error(`Value is not JSON serializable: ${s}`)}}#s(t){const s=JSON.stringify(t),r=Buffer.byteLength(s,"utf8");if(r>1048576){const i=(r/1024).toFixed(2);throw new Error(`Value size (${i} KB) exceeds the maximum allowed size of 1 MB (1024 KB)`)}}}export{n as KvService};
1
+ import{isTtlCorrect as o}from"../../../utils/is-ttl-correct.js";import{KvRemoteRepository as c}from"../repositories/kv-remote-repository.js";class n{static#e;#t;constructor(t){this.#t=t}static async#n(t){const e=await c.getInstance(t),s=new n(e);n.#e=s}static async getInstance(t){return n.#e||await n.#n(t),n.#e}async get(t){return await this.#t?.sync(),await this.#t?.get(t)??null}async getMany(t){return await this.#t?.sync(),await this.#t?.getMany(t)??[]}async list(t,e){return await this.#t?.sync(),await this.#t?.list(t,e)??{items:[],total:0,cursor:null}}async set(t,e,s){if(this.#r(e),this.#s(e),!o(s?.ttlInSeconds))throw new Error("TTL must be null or a positive number");return await this.#t?.set(t,e,s)??null}async delete(t){return!!await this.#t?.delete(t)}async clearExpired(){return await this.#t?.clearExpired()}async transaction(t){if(!this.#t)throw new Error("Remote repository not available for transactions");return await this.#t.sync(),this.#t.transaction(async e=>t({get:async r=>e.get(r),getMany:async r=>e.getMany(r),set:async(r,a,i)=>{if(this.#r(a),this.#s(a),!o(i?.ttlInSeconds))throw new Error("TTL must be null or a positive number");return e.set(r,a,i)},delete:async r=>e.delete(r)}))}#r(t){try{JSON.stringify(t)}catch(e){const s=e instanceof Error?e.message:"Unknown error";throw new Error(`Value is not JSON serializable: ${s}`)}}#s(t){const s=JSON.stringify(t),r=Buffer.byteLength(s,"utf8");if(r>1048576){const a=(r/1024).toFixed(2);throw new Error(`Value size (${a} KB) exceeds the maximum allowed size of 1 MB (1024 KB)`)}}}export{n as KvService};
@@ -22,7 +22,7 @@ type BulkSyncResult<T> = Array<{
22
22
  }>;
23
23
  export declare class CatalogEntitiesService {
24
24
  #private;
25
- constructor(localRepository: CatalogEntitiesLocalRepository, remoteRepository?: CatalogEntitiesRemoteRepository);
25
+ constructor(localRepository: CatalogEntitiesLocalRepository, remoteRepository: CatalogEntitiesRemoteRepository | null);
26
26
  static getInstance(options: ServiceInstanceOptions): Promise<CatalogEntitiesService>;
27
27
  transaction<T>(...args: Parameters<TransactionsManager['transaction']>): Promise<T>;
28
28
  getEntities(paginationParams: PaginationParams): Promise<ListResponseResult<EntityReadModelSchema>>;
@@ -1 +1 @@
1
- import{entityFileSchema as d}from"@redocly/config";import{deepMerge as y}from"../../../../utils/object/deep-merge.js";import{promiseMapLimit as c}from"../../../utils/async/promise-map-limit.js";import{logger as r}from"../../../tools/notifiers/logger.js";import{entityRelationDtoSchema as h}from"../schemas/dto-schemas.js";import{CatalogEntitiesLocalRepository as m}from"./repositories/local/catalog-entities-local-repository.js";import{CatalogEntitiesRemoteRepository as R}from"./repositories/remote/catalog-entities-remote-repository.js";import{prepareListResponse as o}from"../../../web-server/utils/prepare-list-response.js";import{ENTITY_RELATION_FROM_DATABASE as l}from"./mappers/field-transformations.js";import{createValidator as u}from"../utils/ajv-validator.js";import{hasOptionsChanged as w}from"../utils/has-options-changed.js";const E=15,f=u(h,{errorPrefix:"Entity relation validation failed:",dataVar:"entity relation"}),p=u(d,{errorPrefix:"Entity file validation failed:",dataVar:"entity"});class n{static#a;static#i;#t;#e;constructor(t,e){this.#t=t,this.#e=e}static async#n(t){const[e,a]=await Promise.all([m.getInstance(t),t.runOnlyLocalDatabase?void 0:R.getInstance(t)]),i=new n(e,a);a&&(process.env.NODE_ENV==="development"&&r.info("Attaching remote database to local database"),await i.#t.attachDatabase(a.path)),n.#a=i,n.#i=t}static async getInstance(t){return t.runOnlyLocalDatabase===void 0&&(t.runOnlyLocalDatabase=process.env.REDOCLY_LOCAL_DEV==="true"||process.env.CI==="true"),t.removeExisting===void 0&&(t.removeExisting=!1),(!n.#a||w(n.#i,t))&&await n.#n(t),n.#a}async transaction(...t){return this.#t.transactionsManager.transaction(...t)}async getEntities(t){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntities(t);return o({data:e,params:t,totalCount:a,hasMore:i})}async getEntityByKey(t){return await this.#e?.sync(),await this.#t.getEntityByKey(t)}async getEntitiesCountByTypes(){return await this.#e?.sync(),this.#t.getEntitiesCountByTypes()}async getCatalogFilters(t){return await this.#e?.sync(),this.#t.getCatalogFilters(t)}async createEntity(t){return this.#e?this.#e.createEntity(t):(r.warn("No remote database found"),null)}async createEntities(t){const e=this.#e;return e?await c(t,E,async a=>e.createEntity(a).then(i=>({status:"ok",resource:i})).catch(i=>({key:a.key,status:"error",error:i}))):(r.warn("No remote database found"),[])}getEntitySources(){return this.#t.getEntitySources()}async createEntityInLocalDatabase(t){await this.#t.createEntity(t)}async createEntitiesInLocalDatabase(t){await this.#t.createEntities(t)}async createEntityRelationInLocalDatabase(t){await this.#t.createEntityRelation(t)}async createEntityRelationsInLocalDatabase(t){await this.#t.createEntityRelations(t)}async updateEntityByKey(t,e){const a=await this.#t.getEntityByKey(t);if(!a)throw new Error(`Entity with key ${t} not found`);const i=y(a,e),s=p(i);return await this.#e?.updateEntity({...s,id:a.id,createdAt:a.createdAt||""})}async deleteEntityByKey(t){const e=await this.#e?.deleteEntity(t);return await this.#s(t),e}async deleteEntitiesInLocalDatabase(t){await this.#t.deleteEntities(t)}async getEntityRelationById(t){return await this.#e?.sync(),await this.#t.getEntityRelationById(t)}async getEntitiesRelations(t={}){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntitiesRelations(t);return o({data:e,params:t,totalCount:a,nameTransformationsFromDatabase:l,hasMore:i})}async createEntityRelation(t){return this.#e?.createEntityRelation(t)}async createEntitiesRelations(t){const e=this.#e;return e?await c(t,E,async a=>e.createEntityRelation(a).then(i=>({status:"ok",resource:i})).catch(i=>({key:a.sourceKey,status:"error",error:i}))):(r.warn("No remote database found"),[])}async updateEntityRelation(t,e){const a=await this.#t.getEntityRelationById(t);if(!a)throw new Error(`Entity relation with id ${t} not found`);const i=y(a,e),s=f(i);return this.#e?.createEntityRelation(s)}async deleteEntityRelation(t){let e=await this.#e?.deleteEntityRelation(t);return e||(e=await this.#t.deleteEntityRelation(t)),e}async deleteEntityRelationsInLocalDatabase(t){await this.#t.deleteEntityRelations(t)}async getEntitiesWithRelations(t={}){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntitiesWithRelations(t);return o({data:e,params:t,totalCount:a,hasMore:i})}async getEntityWithRelationsByKey(t,e={}){return this.#t.getEntityWithRelationsByKey(t,e)}async getRelatedEntities(t,e={}){await this.#e?.sync();const{items:a,total:i,hasMore:s}=await this.#t.getRelatedEntities(t,e);return o({data:a,params:e,totalCount:i,nameTransformationsFromDatabase:l,hasMore:s})}async#s(t){await this.#e?.deleteEntitiesRelations({op:"OR",conditions:[{field:"source_key",operator:"equal",value:t},{field:"target_key",operator:"equal",value:t}]})}async listEntityRevisions(t,e){return await this.#e?.sync(),this.#t.listEntityRevisions(t,e)}async updateEntityScorecardsStatus(t,e){return await this.#e?.sync(),this.#t.updateEntityScorecardsStatus(t,e)}async updateEntityScorecardsStatusIfCalculating(t,e){return await this.#e?.sync(),this.#t.updateEntityScorecardsStatusIfCalculating(t,e)}async getOutdatedEntity(){return await this.#e?.sync(),this.#t.getOneOutdatedEntity()}}export{n as CatalogEntitiesService};
1
+ import{entityFileSchema as d}from"@redocly/config";import{deepMerge as y}from"../../../../utils/object/deep-merge.js";import{promiseMapLimit as c}from"../../../utils/async/promise-map-limit.js";import{logger as r}from"../../../tools/notifiers/logger.js";import{entityRelationDtoSchema as h}from"../schemas/dto-schemas.js";import{CatalogEntitiesLocalRepository as m}from"./repositories/local/catalog-entities-local-repository.js";import{CatalogEntitiesRemoteRepository as R}from"./repositories/remote/catalog-entities-remote-repository.js";import{prepareListResponse as o}from"../../../web-server/utils/prepare-list-response.js";import{ENTITY_RELATION_FROM_DATABASE as l}from"./mappers/field-transformations.js";import{createValidator as u}from"../utils/ajv-validator.js";import{hasOptionsChanged as w}from"../utils/has-options-changed.js";const E=15,f=u(h,{errorPrefix:"Entity relation validation failed:",dataVar:"entity relation"}),p=u(d,{errorPrefix:"Entity file validation failed:",dataVar:"entity"});class n{static#a;static#i;#t;#e;constructor(t,e){this.#t=t,this.#e=e}static async#n(t){const[e,a]=await Promise.all([m.getInstance(t),t.runOnlyLocalDatabase?null:R.getInstance(t)]),i=new n(e,a);a&&(process.env.NODE_ENV==="development"&&r.info("Attaching remote database to local database"),await i.#t.attachDatabase(a.path)),n.#a=i,n.#i=t}static async getInstance(t){return t.runOnlyLocalDatabase===void 0&&(t.runOnlyLocalDatabase=process.env.REDOCLY_LOCAL_DEV==="true"||process.env.CI==="true"),t.removeExisting===void 0&&(t.removeExisting=!1),(!n.#a||w(n.#i,t))&&await n.#n(t),n.#a}async transaction(...t){return this.#t.transactionsManager.transaction(...t)}async getEntities(t){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntities(t);return o({data:e,params:t,totalCount:a,hasMore:i})}async getEntityByKey(t){return await this.#e?.sync(),await this.#t.getEntityByKey(t)}async getEntitiesCountByTypes(){return await this.#e?.sync(),this.#t.getEntitiesCountByTypes()}async getCatalogFilters(t){return await this.#e?.sync(),this.#t.getCatalogFilters(t)}async createEntity(t){return this.#e?this.#e.createEntity(t):(r.warn("No remote database found"),null)}async createEntities(t){const e=this.#e;return e?await c(t,E,async a=>e.createEntity(a).then(i=>({status:"ok",resource:i})).catch(i=>({key:a.key,status:"error",error:i}))):(r.warn("No remote database found"),[])}getEntitySources(){return this.#t.getEntitySources()}async createEntityInLocalDatabase(t){await this.#t.createEntity(t)}async createEntitiesInLocalDatabase(t){await this.#t.createEntities(t)}async createEntityRelationInLocalDatabase(t){await this.#t.createEntityRelation(t)}async createEntityRelationsInLocalDatabase(t){await this.#t.createEntityRelations(t)}async updateEntityByKey(t,e){const a=await this.#t.getEntityByKey(t);if(!a)throw new Error(`Entity with key ${t} not found`);const i=y(a,e),s=p(i);return await this.#e?.updateEntity({...s,id:a.id,createdAt:a.createdAt||""})}async deleteEntityByKey(t){const e=await this.#e?.deleteEntity(t);return await this.#s(t),e}async deleteEntitiesInLocalDatabase(t){await this.#t.deleteEntities(t)}async getEntityRelationById(t){return await this.#e?.sync(),await this.#t.getEntityRelationById(t)}async getEntitiesRelations(t={}){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntitiesRelations(t);return o({data:e,params:t,totalCount:a,nameTransformationsFromDatabase:l,hasMore:i})}async createEntityRelation(t){return this.#e?.createEntityRelation(t)}async createEntitiesRelations(t){const e=this.#e;return e?await c(t,E,async a=>e.createEntityRelation(a).then(i=>({status:"ok",resource:i})).catch(i=>({key:a.sourceKey,status:"error",error:i}))):(r.warn("No remote database found"),[])}async updateEntityRelation(t,e){const a=await this.#t.getEntityRelationById(t);if(!a)throw new Error(`Entity relation with id ${t} not found`);const i=y(a,e),s=f(i);return this.#e?.createEntityRelation(s)}async deleteEntityRelation(t){let e=await this.#e?.deleteEntityRelation(t);return e||(e=await this.#t.deleteEntityRelation(t)),e}async deleteEntityRelationsInLocalDatabase(t){await this.#t.deleteEntityRelations(t)}async getEntitiesWithRelations(t={}){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntitiesWithRelations(t);return o({data:e,params:t,totalCount:a,hasMore:i})}async getEntityWithRelationsByKey(t,e={}){return this.#t.getEntityWithRelationsByKey(t,e)}async getRelatedEntities(t,e={}){await this.#e?.sync();const{items:a,total:i,hasMore:s}=await this.#t.getRelatedEntities(t,e);return o({data:a,params:e,totalCount:i,nameTransformationsFromDatabase:l,hasMore:s})}async#s(t){await this.#e?.deleteEntitiesRelations({op:"OR",conditions:[{field:"source_key",operator:"equal",value:t},{field:"target_key",operator:"equal",value:t}]})}async listEntityRevisions(t,e){return await this.#e?.sync(),this.#t.listEntityRevisions(t,e)}async updateEntityScorecardsStatus(t,e){return await this.#e?.sync(),this.#t.updateEntityScorecardsStatus(t,e)}async updateEntityScorecardsStatusIfCalculating(t,e){return await this.#e?.sync(),this.#t.updateEntityScorecardsStatusIfCalculating(t,e)}async getOutdatedEntity(){return await this.#e?.sync(),this.#t.getOneOutdatedEntity()}}export{n as CatalogEntitiesService};
@@ -2,13 +2,13 @@ import type { Filter } from '../../../../../providers/database/pagination/types.
2
2
  import type { PaginationParams } from '../../../../../providers/database/pagination/schemas.js';
3
3
  import type { EntityRelationDtoSchema } from '../../../../../plugins/catalog-entities/schemas/dto-schemas.js';
4
4
  import type { ScorecardsStatus } from '../../../../../plugins/catalog-entities/entities/types.js';
5
- import type { DatabaseInitializationResult, RepositoryInstanceOptions } from '../../../../../providers/database/types.js';
5
+ import type { DatabaseConnection, RepositoryInstanceOptions } from '../../../../../providers/database/types.js';
6
6
  import type { CatalogFiltersParams } from './catalog-entities-local-read-repository.js';
7
- import { type CreateEntityParams } from './catalog-entities-local-write-repository.js';
8
7
  import { BaseRepository } from '../../../../../providers/database/base-repository.js';
8
+ import { type CreateEntityParams } from './catalog-entities-local-write-repository.js';
9
9
  export declare class CatalogEntitiesLocalRepository extends BaseRepository {
10
10
  #private;
11
- constructor(initializationResult: DatabaseInitializationResult);
11
+ constructor(dbConnection: DatabaseConnection);
12
12
  get transactionsManager(): import("../../../../../providers/database/transactions-manager.js").TransactionsManager;
13
13
  getEntitySources(): Record<string, string>;
14
14
  static getInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesLocalRepository>;
@@ -1 +1 @@
1
- import{promiseMapLimit as n}from"../../../../../utils/async/promise-map-limit.js";import{CatalogEntitiesLocalReadRepository as r}from"./catalog-entities-local-read-repository.js";import{CatalogEntitiesLocalWriteRepository as o}from"./catalog-entities-local-write-repository.js";import{createEntityRelationDbRecordFromDto as y}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{BaseRepository as l}from"../../../../../providers/database/base-repository.js";import{LocalDatabaseInitializationStrategy as E}from"../../../../../providers/database/database-initialization-strategy.js";import{CATALOG_DATABASE_MIGRATIONS_FOLDER as c,CATALOG_LOCAL_DATABASE_FOLDER as d,CATALOG_LOCAL_DATABASE_NAME as h}from"../../consts.js";import{hasOptionsChanged as u}from"../../../utils/has-options-changed.js";const a=50;class i extends l{static#i;static#n;#t;#e;#a={};constructor(t){super(t),this.#t=new r(this.databaseClient),this.#e=new o(this.databaseClient,this.organizationId,this.projectId)}get transactionsManager(){return this.databaseClient.transactionsManager}getEntitySources(){return this.#a}static async getInstance(t){const e=u(i.#n,t);if(!i.#i||e){const s=await new E().initialize({databaseName:h,additionalFolder:d,migrationsFolder:c,...t});i.#i=new i(s),i.#n=t}return i.#i}async attachDatabase(t){await this.#t.attachDatabase(t)}getEntities(t={}){return this.#t.getEntities(t)}getEntityByKey(t){return this.#t.getEntityByKey(t)}getEntitiesCountByTypes(){return this.#t.getEntitiesCountByTypes()}getEntitiesRelations(t={}){return this.#t.getEntitiesRelations(t)}getEntityRelationById(t){return this.#t.getEntityRelationById(t)}getEntitiesWithRelations(t={}){return this.#t.getEntitiesWithRelations(t)}getEntityWithRelationsByKey(t,e={}){return this.#t.getEntityWithRelationsByKey(t,e)}getRelatedEntities(t,e={}){return this.#t.getRelatedEntities(t,e)}createEntity(t){return t.isRootEntity&&(this.#a[t.sourceFile]=t.entity.key),this.#e.createEntity(t)}async createEntities(t){await n(t,a,async e=>this.createEntity(e))}createEntityRelation(t){const e=y(t,this.organizationId,this.projectId);return this.#e.createEntityRelation(e)}async createEntityRelations(t){await n(t,a,async e=>this.createEntityRelation(e))}deleteEntity(t){return this.#e.deleteEntity(t)}deleteEntities(t){return this.#e.deleteEntities(t)}deleteEntityRelation(t){return this.#e.deleteEntityRelation(t)}deleteEntityRelations(t){return this.#e.deleteEntityRelations(t)}getCatalogFilters(t){return this.#t.getCatalogFilters(t)}listEntityRevisions(t,e){return this.#t.listEntityRevisions(t,e)}updateEntityScorecardsStatus(t,e){return this.#e.updateEntityScorecardsStatus(t,e)}updateEntityScorecardsStatusIfCalculating(t,e){return this.#e.updateEntityScorecardsStatusIfCalculating(t,e)}getOneOutdatedEntity(){return this.#t.getOneOutdatedEntity()}}export{i as CatalogEntitiesLocalRepository};
1
+ import{promiseMapLimit as a}from"../../../../../utils/async/promise-map-limit.js";import{DatabaseConnectionFactory as r}from"../../../../../providers/database/database-connection-factory.js";import{BaseRepository as o}from"../../../../../providers/database/base-repository.js";import{CatalogEntitiesLocalReadRepository as c}from"./catalog-entities-local-read-repository.js";import{CatalogEntitiesLocalWriteRepository as y}from"./catalog-entities-local-write-repository.js";import{createEntityRelationDbRecordFromDto as l}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{hasOptionsChanged as h}from"../../../utils/has-options-changed.js";const s=50;class i extends o{static#i;static#n;#t;#e;#a={};constructor(t){super(t),this.#t=new c(this.databaseClient),this.#e=new y(this.databaseClient,this.organizationId,this.projectId)}get transactionsManager(){return this.databaseClient.transactionsManager}getEntitySources(){return this.#a}static async getInstance(t){const e=h(i.#n,t);if(!i.#i||e){const n=await r.create("catalog-local",t);if(!n)throw new Error("Failed to create db connection for catalog entities local repository");i.#i=new i(n),i.#n=t}return i.#i}async attachDatabase(t){await this.#t.attachDatabase(t)}getEntities(t={}){return this.#t.getEntities(t)}getEntityByKey(t){return this.#t.getEntityByKey(t)}getEntitiesCountByTypes(){return this.#t.getEntitiesCountByTypes()}getEntitiesRelations(t={}){return this.#t.getEntitiesRelations(t)}getEntityRelationById(t){return this.#t.getEntityRelationById(t)}getEntitiesWithRelations(t={}){return this.#t.getEntitiesWithRelations(t)}getEntityWithRelationsByKey(t,e={}){return this.#t.getEntityWithRelationsByKey(t,e)}getRelatedEntities(t,e={}){return this.#t.getRelatedEntities(t,e)}createEntity(t){return t.isRootEntity&&(this.#a[t.sourceFile]=t.entity.key),this.#e.createEntity(t)}async createEntities(t){await a(t,s,async e=>this.createEntity(e))}createEntityRelation(t){const e=l(t,this.organizationId,this.projectId);return this.#e.createEntityRelation(e)}async createEntityRelations(t){await a(t,s,async e=>this.createEntityRelation(e))}deleteEntity(t){return this.#e.deleteEntity(t)}deleteEntities(t){return this.#e.deleteEntities(t)}deleteEntityRelation(t){return this.#e.deleteEntityRelation(t)}deleteEntityRelations(t){return this.#e.deleteEntityRelations(t)}getCatalogFilters(t){return this.#t.getCatalogFilters(t)}listEntityRevisions(t,e){return this.#t.listEntityRevisions(t,e)}updateEntityScorecardsStatus(t,e){return this.#e.updateEntityScorecardsStatus(t,e)}updateEntityScorecardsStatusIfCalculating(t,e){return this.#e.updateEntityScorecardsStatusIfCalculating(t,e)}getOneOutdatedEntity(){return this.#t.getOneOutdatedEntity()}}export{i as CatalogEntitiesLocalRepository};
@@ -1,15 +1,15 @@
1
1
  import type { EntityReadModelSchema } from '../../../schemas/read-model-schemas.js';
2
2
  import type { EntityDtoSchema, EntityRelationDtoSchema } from '../../../schemas/dto-schemas.js';
3
3
  import type { Filter } from '../../../../../providers/database/pagination/types.js';
4
- import type { DatabaseInitializationResult, RepositoryInstanceOptions } from '../../../../../providers/database/types.js';
5
- import { type DatabaseEntityRelation } from '../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js';
4
+ import type { DatabaseConnection, RepositoryInstanceOptions } from '../../../../../providers/database/types.js';
5
+ import type { DatabaseEntityRelation } from '../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js';
6
6
  import { BaseRepository } from '../../../../../providers/database/base-repository.js';
7
7
  export declare class CatalogEntitiesRemoteRepository extends BaseRepository {
8
8
  #private;
9
9
  get transactionsManager(): import("../../../../../providers/database/transactions-manager.js").TransactionsManager;
10
- constructor(initializationResult: DatabaseInitializationResult);
10
+ constructor(dbConnection: DatabaseConnection);
11
11
  sync(): Promise<void>;
12
- static getInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesRemoteRepository | undefined>;
12
+ static getInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesRemoteRepository | null>;
13
13
  createEntity(entity: EntityDtoSchema): Promise<EntityReadModelSchema | null>;
14
14
  updateEntity(entity: EntityDtoSchema & {
15
15
  id?: string;
@@ -1 +1 @@
1
- import{eq as E,sql as p}from"drizzle-orm";import{convertFilterToWhereCondition as g}from"../../../../../providers/database/pagination/filter.js";import{promiseMapLimit as A}from"../../../../../utils/async/promise-map-limit.js";import{logger as n}from"../../../../../tools/notifiers/logger.js";import{SQLD_REMOTE_DATABASE_FOLDER as T,SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER as f,SQLD_REMOTE_DATABASE_NAME as D}from"../../../../../constants/sqld-remote-database.js";import{telemetryTraceStep as i}from"../../../../../telemetry/helpers/trace-step.js";import{createEntityDbRecord as _}from"../../mappers/create-entity-db-record.js";import{createEntityReadModel as m}from"../../mappers/create-entity-read-model.js";import{createEntityRelationDbRecordFromDto as w}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{entitiesTable as r}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as a}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{BaseRepository as b}from"../../../../../providers/database/base-repository.js";import{DatabaseConnectionsManager as R}from"../../../../../providers/database/database-connections-manager.js";import{RemoteDatabaseInitializationStrategy as S}from"../../../../../providers/database/database-initialization-strategy.js";const L=15;class s extends b{static#t;get transactionsManager(){return this.databaseClient.transactionsManager}constructor(t){super(t)}async sync(){return i("catalog_entities.remote_repository.sync",async()=>{await this.#e(),await this.databaseClient.sync()})}static async getInstance(t){return await i("catalog_entities.remote_repository.get_instance",async e=>{if(!s.#t){if(!process.env.SQLD_REMOTE_DATABASE_URL||!process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN){n.warn("SQLD_REMOTE_DATABASE_URL and SQLD_REMOTE_DATABASE_AUTH_TOKEN env variables not set - remote database will not be initialized"),e?.error(new Error("SQLD_REMOTE_DATABASE_URL and SQLD_REMOTE_DATABASE_AUTH_TOKEN env variables not set - remote database will not be initialized"));return}try{const o=await R.getConnection({config:{...t,databaseName:D,additionalFolder:T,migrationsFolder:f,syncUrl:process.env.SQLD_REMOTE_DATABASE_URL,authToken:process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN},strategy:new S});if(!o){n.warn("Remote database connection failed!"),e?.error(new Error("Remote database connection failed!")),s.#t=void 0;return}s.#t=new s(o)}catch(o){s.#t=void 0,e?.error(o);return}}return s.#t})}async createEntity(t){return i("catalog_entities.remote_repository.create_entity",async()=>{await this.#e();try{n.info(`Adding entity ${t.key} to remote database`);const e=_({entity:t,organizationId:this.organizationId,projectId:this.projectId,source:"remote",sourceFile:null,fileHash:null}),{key:o,source:u,...d}=e,l=await this.databaseClient.client.insert(r).values(e).onConflictDoUpdate({target:[r.key,r.source,r.revision,r.version],set:d}).returning();return l.length?(t.relations&&await this.createEntityRelations(t.relations.map(c=>({...c,sourceKey:t.key,targetKey:c.key}))),m(l[0])):null}catch(e){throw n.error("Error adding entity",e),e}})}async updateEntity(t){return i("catalog_entities.remote_repository.update_entity",async()=>{await this.#e();try{n.info(`Updating entity ${t.key} in remote database`);const e=_({entity:t,organizationId:this.organizationId,projectId:this.projectId,source:"remote",sourceFile:null,fileHash:null}),{key:o,source:u,scorecardsStatus:d,...l}=e,c=await this.databaseClient.client.insert(r).values(e).onConflictDoUpdate({target:[r.key,r.source,r.revision,r.version],set:{...l,scorecardsStatus:p`CASE WHEN ${r.scorecardsStatus} = 'CALCULATING' THEN 'CANCELLED' ELSE 'OUTDATED' END`}}).returning();return c.length?m(c[0]):null}catch(e){return n.error("Error updating entity",e),null}})}async deleteEntity(t){return i("catalog_entities.remote_repository.delete_entity",async()=>{await this.#e();try{return await this.databaseClient.client.delete(r).where(E(r.key,t)),t}catch(e){return n.error("Error deleting entity",e),null}})}async createEntityRelations(t){return i("catalog_entities.remote_repository.create_entity_relations",async()=>(await this.#e(),await A(t,L,async e=>this.createEntityRelation(e))))}async createEntityRelation(t){return i("catalog_entities.remote_repository.create_entity_relation",async()=>{if(await this.#e(),!t)return null;try{const e=w(t,this.organizationId,this.projectId),{sourceKey:o,targetKey:u,sourceVersion:d,targetVersion:l,sourceRevision:c,targetRevision:v,...h}=e,y=await this.databaseClient.client.insert(a).values(e).onConflictDoUpdate({target:[a.sourceKey,a.targetKey,a.sourceVersion,a.targetVersion,a.sourceRevision,a.targetRevision],set:h}).returning();return y.length?y[0]:null}catch(e){throw n.error("Error creating entity relation",e),e}})}async deleteEntityRelation(t){return i("catalog_entities.remote_repository.delete_entity_relation",async()=>{await this.#e();try{return await this.databaseClient.client.delete(a).where(E(a.id,t)),t}catch(e){return n.error("Error deleting entity relation",e),null}})}async deleteEntitiesRelations(t){return i("catalog_entities.remote_repository.delete_entities_relations",async()=>{await this.#e();try{const e=g(t);return e?(await this.databaseClient.client.delete(a).where(e),!0):!1}catch(e){return n.error("Error deleting entities relations",e),!1}})}#e(){return i("catalog_entities.remote_repository.db_health",async t=>{if(this.databaseClient.dbClient.$client.closed){const e=new Error("The remote database connection is closed!");throw t?.error(e),e}})}}export{s as CatalogEntitiesRemoteRepository};
1
+ import{eq as h,sql as f}from"drizzle-orm";import{convertFilterToWhereCondition as w}from"../../../../../providers/database/pagination/filter.js";import{promiseMapLimit as E}from"../../../../../utils/async/promise-map-limit.js";import{logger as n}from"../../../../../tools/notifiers/logger.js";import{entitiesTable as r}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{telemetryTraceStep as i}from"../../../../../telemetry/helpers/trace-step.js";import{BaseRepository as _}from"../../../../../providers/database/base-repository.js";import{DatabaseConnectionFactory as b}from"../../../../../providers/database/database-connection-factory.js";import{entitiesRelationsTable as a}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{createEntityDbRecord as p}from"../../mappers/create-entity-db-record.js";import{createEntityReadModel as m}from"../../mappers/create-entity-read-model.js";import{createEntityRelationDbRecordFromDto as C}from"../../mappers/create-entity-relation-db-record-from-dto.js";const I=15;class s extends _{static#e;get transactionsManager(){return this.databaseClient.transactionsManager}constructor(e){super(e)}async sync(){return i("catalog_entities.remote_repository.sync",async()=>{await this.#t(),await this.databaseClient.sync()})}static async getInstance(e){return await i("catalog_entities.remote_repository.get_instance",async t=>{if(!s.#e)try{const o=await b.create("sqld-remote",e);if(!o)return n.error("Failed to create db connection for catalog entities remote repository"),t?.error(new Error("Failed to create db connection for catalog entities remote repository")),s.#e=null,null;s.#e=new s(o)}catch(o){return n.error("Error creating db connection for catalog entities remote repository",o),t?.error(o),s.#e=null,null}return s.#e})}async createEntity(e){return i("catalog_entities.remote_repository.create_entity",async()=>{await this.#t();try{n.info(`Adding entity ${e.key} to remote database`);const t=p({entity:e,organizationId:this.organizationId,projectId:this.projectId,source:"remote",sourceFile:null,fileHash:null}),{key:o,source:d,...u}=t,l=await this.databaseClient.client.insert(r).values(t).onConflictDoUpdate({target:[r.key,r.source,r.revision,r.version],set:u}).returning();return l.length?(e.relations&&await this.createEntityRelations(e.relations.map(c=>({...c,sourceKey:e.key,targetKey:c.key}))),m(l[0])):null}catch(t){throw n.error("Error adding entity",t),t}})}async updateEntity(e){return i("catalog_entities.remote_repository.update_entity",async()=>{await this.#t();try{n.info(`Updating entity ${e.key} in remote database`);const t=p({entity:e,organizationId:this.organizationId,projectId:this.projectId,source:"remote",sourceFile:null,fileHash:null}),{key:o,source:d,scorecardsStatus:u,...l}=t,c=await this.databaseClient.client.insert(r).values(t).onConflictDoUpdate({target:[r.key,r.source,r.revision,r.version],set:{...l,scorecardsStatus:f`CASE WHEN ${r.scorecardsStatus} = 'CALCULATING' THEN 'CANCELLED' ELSE 'OUTDATED' END`}}).returning();return c.length?m(c[0]):null}catch(t){return n.error("Error updating entity",t),null}})}async deleteEntity(e){return i("catalog_entities.remote_repository.delete_entity",async()=>{await this.#t();try{return await this.databaseClient.client.delete(r).where(h(r.key,e)),e}catch(t){return n.error("Error deleting entity",t),null}})}async createEntityRelations(e){return i("catalog_entities.remote_repository.create_entity_relations",async()=>(await this.#t(),await E(e,I,async t=>this.createEntityRelation(t))))}async createEntityRelation(e){return i("catalog_entities.remote_repository.create_entity_relation",async()=>{if(await this.#t(),!e)return null;try{const t=C(e,this.organizationId,this.projectId),{sourceKey:o,targetKey:d,sourceVersion:u,targetVersion:l,sourceRevision:c,targetRevision:D,...g}=t,y=await this.databaseClient.client.insert(a).values(t).onConflictDoUpdate({target:[a.sourceKey,a.targetKey,a.sourceVersion,a.targetVersion,a.sourceRevision,a.targetRevision],set:g}).returning();return y.length?y[0]:null}catch(t){throw n.error("Error creating entity relation",t),t}})}async deleteEntityRelation(e){return i("catalog_entities.remote_repository.delete_entity_relation",async()=>{await this.#t();try{return await this.databaseClient.client.delete(a).where(h(a.id,e)),e}catch(t){return n.error("Error deleting entity relation",t),null}})}async deleteEntitiesRelations(e){return i("catalog_entities.remote_repository.delete_entities_relations",async()=>{await this.#t();try{const t=w(e);return t?(await this.databaseClient.client.delete(a).where(t),!0):!1}catch(t){return n.error("Error deleting entities relations",t),!1}})}#t(){return i("catalog_entities.remote_repository.db_health",async e=>{if(this.databaseClient.dbClient.$client.closed){const t=new Error("The remote database connection is closed!");throw e?.error(t),t}})}}export{s as CatalogEntitiesRemoteRepository};
@@ -1,12 +1,12 @@
1
1
  import type { DatabaseClient } from './client.js';
2
- import type { DatabaseInitializationResult } from './types.js';
2
+ import type { DatabaseConnection } from './types.js';
3
3
  export declare abstract class BaseRepository {
4
4
  #private;
5
5
  protected readonly organizationId: string;
6
6
  protected readonly projectId: string;
7
7
  protected readonly databaseClient: DatabaseClient;
8
8
  readonly path: string;
9
- protected constructor(initializationResult: DatabaseInitializationResult);
9
+ protected constructor(dbConnection: DatabaseConnection);
10
10
  close(): Promise<void>;
11
11
  sync(): Promise<void>;
12
12
  }
@@ -1 +1 @@
1
- class n{static#e="ORGANIZATION_ID";static#t="PROJECT_ID";organizationId;projectId;databaseClient;path;constructor(t){const e=this.#s();this.organizationId=this.#n(e),this.projectId=this.#r(e),this.databaseClient=t.client,this.path=t.path}async close(){await this.databaseClient.close()}async sync(){await this.databaseClient.sync()}#n=t=>{const e=process.env.ORGANIZATION_ID;if(e)return e;if(t)return n.#e;throw new Error("ORGANIZATION_ID environment variable is required. Ensure it is set in your environment configuration.")};#r=t=>{const e=process.env.PROJECT_ID;if(e)return e;if(t)return n.#t;throw new Error("PROJECT_ID environment variable is required. Ensure it is set in your environment configuration.")};#s=()=>!process.env.SQLD_REMOTE_DATABASE_URL&&!process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN}export{n as BaseRepository};
1
+ class n{static#e="ORGANIZATION_ID";static#t="PROJECT_ID";organizationId;projectId;databaseClient;path;constructor(t){const e=this.#r();this.organizationId=this.#n(e),this.projectId=this.#i(e),this.databaseClient=t.client,this.path=t.path}async close(){await this.databaseClient.close()}async sync(){await this.databaseClient.sync()}#n=t=>{const e=process.env.ORGANIZATION_ID;if(e)return e;if(t)return n.#e;throw new Error("ORGANIZATION_ID environment variable is required. Ensure it is set in your environment configuration.")};#i=t=>{const e=process.env.PROJECT_ID;if(e)return e;if(t)return n.#t;throw new Error("PROJECT_ID environment variable is required. Ensure it is set in your environment configuration.")};#r=()=>!process.env.SQLD_REMOTE_DATABASE_URL&&!process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN}export{n as BaseRepository};
@@ -1,7 +1,10 @@
1
+ export declare const CATALOG_LOCAL_DATABASE_NAME = "catalog-local.sqlite";
2
+ export declare const CATALOG_LOCAL_DATABASE_FOLDER = "catalog-local";
3
+ export declare const CATALOG_LOCAL_DATABASE_MIGRATIONS_FOLDER = "catalog-sqlite";
1
4
  export declare const MAIN_LOCAL_DATABASE_NAME = "main-local.sqlite";
2
5
  export declare const MAIN_LOCAL_DATABASE_FOLDER = "main-local";
3
- export declare const MAIN_DATABASE_MIGRATIONS_FOLDER = "main-sqlite";
4
- export declare const PLUGIN_STORAGE_LOCAL_DATABASE_NAME = "plugin-storage-local.sqlite";
5
- export declare const PLUGIN_STORAGE_LOCAL_DATABASE_FOLDER = "plugin-storage-local";
6
- export declare const PLUGIN_STORAGE_DATABASE_MIGRATIONS_FOLDER = "plugin-storage-sqlite";
6
+ export declare const MAIN_LOCAL_DATABASE_MIGRATIONS_FOLDER = "main-sqlite";
7
+ export declare const SQLD_REMOTE_DATABASE_NAME = "sqld-remote.sqlite";
8
+ export declare const SQLD_REMOTE_DATABASE_FOLDER = "sqld-remote";
9
+ export declare const SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER = "sqld-sqlite";
7
10
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- const A="main-local.sqlite",_="main-local",o="main-sqlite",t="plugin-storage-local.sqlite",l="plugin-storage-local",E="plugin-storage-sqlite";export{o as MAIN_DATABASE_MIGRATIONS_FOLDER,_ as MAIN_LOCAL_DATABASE_FOLDER,A as MAIN_LOCAL_DATABASE_NAME,E as PLUGIN_STORAGE_DATABASE_MIGRATIONS_FOLDER,l as PLUGIN_STORAGE_LOCAL_DATABASE_FOLDER,t as PLUGIN_STORAGE_LOCAL_DATABASE_NAME};
1
+ const A="catalog-local.sqlite",_="catalog-local",t="catalog-sqlite",o="main-local.sqlite",E="main-local",L="main-sqlite",O="sqld-remote.sqlite",l="sqld-remote",e="sqld-sqlite";export{_ as CATALOG_LOCAL_DATABASE_FOLDER,t as CATALOG_LOCAL_DATABASE_MIGRATIONS_FOLDER,A as CATALOG_LOCAL_DATABASE_NAME,E as MAIN_LOCAL_DATABASE_FOLDER,L as MAIN_LOCAL_DATABASE_MIGRATIONS_FOLDER,o as MAIN_LOCAL_DATABASE_NAME,l as SQLD_REMOTE_DATABASE_FOLDER,e as SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER,O as SQLD_REMOTE_DATABASE_NAME};
@@ -0,0 +1,6 @@
1
+ import type { DatabaseConnection, DatabaseConnectionOptions, DatabaseName } from './types.js';
2
+ export declare class DatabaseConnectionFactory {
3
+ #private;
4
+ static create(databaseName: DatabaseName, options: DatabaseConnectionOptions): Promise<DatabaseConnection | null>;
5
+ }
6
+ //# sourceMappingURL=database-connection-factory.d.ts.map
@@ -0,0 +1 @@
1
+ import{logger as e}from"../../tools/notifiers/logger.js";import{CATALOG_LOCAL_DATABASE_MIGRATIONS_FOLDER as r,CATALOG_LOCAL_DATABASE_FOLDER as i,CATALOG_LOCAL_DATABASE_NAME as s,MAIN_LOCAL_DATABASE_MIGRATIONS_FOLDER as _,MAIN_LOCAL_DATABASE_FOLDER as E,MAIN_LOCAL_DATABASE_NAME as l,SQLD_REMOTE_DATABASE_FOLDER as c,SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER as D,SQLD_REMOTE_DATABASE_NAME as T}from"./constants.js";import{LocalDatabaseInitializationStrategy as n,RemoteDatabaseInitializationStrategy as L}from"./database-initialization-strategy.js";import{DatabaseConnectionsManager as O}from"./database-connections-manager.js";class g{static async create(a,t){switch(a){case"main-local":return await this.#a(t);case"catalog-local":return await this.#t(t);case"sqld-remote":return await this.#e(t);default:return null}}static async#a(a){return await new n().initialize({...a,databaseName:l,additionalFolder:E,migrationsFolder:_})}static async#t(a){return await new n().initialize({...a,databaseName:s,additionalFolder:i,migrationsFolder:r})}static async#e(a){const t=process.env.SQLD_REMOTE_DATABASE_URL&&process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN,A=a.sqldRemoteDatabaseUrl&&a.sqldRemoteDatabaseAuthToken;if(!t&&!A)return process.env.NEW_CATALOG_ENABLED==="true"&&e.warn("SQLD_REMOTE_DATABASE_URL and SQLD_REMOTE_DATABASE_AUTH_TOKEN env variables or sqldRemoteDatabaseUrl and sqldRemoteDatabaseAuthToken options not set - remote database will not be initialized"),null;try{return await O.getConnection({config:{...a,databaseName:T,additionalFolder:c,migrationsFolder:D,syncUrl:process.env.SQLD_REMOTE_DATABASE_URL||a.sqldRemoteDatabaseUrl,authToken:process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN||a.sqldRemoteDatabaseAuthToken},strategy:new L})}catch(o){return e.error("Remote database connection initialization failed",o),null}}}export{g as DatabaseConnectionFactory};
@@ -1,12 +1,12 @@
1
- import type { DatabaseInitConnectionOptions, DatabaseInitializationResult } from './types.js';
1
+ import type { DatabaseConnectionInitOptions, DatabaseConnection } from './types.js';
2
2
  import { type DatabaseInitializationStrategy } from './database-initialization-strategy.js';
3
- type GetConnectionParams<TConfig extends DatabaseInitConnectionOptions> = {
3
+ type GetConnectionParams<TConfig extends DatabaseConnectionInitOptions> = {
4
4
  config: TConfig;
5
5
  strategy: DatabaseInitializationStrategy;
6
6
  };
7
7
  export declare class DatabaseConnectionsManager {
8
8
  #private;
9
- static getConnection<TConfig extends DatabaseInitConnectionOptions>({ config, strategy, }: GetConnectionParams<TConfig>): Promise<DatabaseInitializationResult | null>;
9
+ static getConnection<TConfig extends DatabaseConnectionInitOptions>({ config, strategy, }: GetConnectionParams<TConfig>): Promise<DatabaseConnection | null>;
10
10
  }
11
11
  export {};
12
12
  //# sourceMappingURL=database-connections-manager.d.ts.map
@@ -1 +1 @@
1
- import{logger as o}from"../../tools/notifiers/logger.js";const r="_redocly_db_preconnect_cache_";class t{static get#t(){const e=globalThis;if(!e[r]){const i={connections:new Map,pendingConnections:new Map,failedConnections:new Set};e[r]=i}return e[r]}static get#c(){return t.#t.connections}static get#e(){return t.#t.failedConnections}static get#i(){return t.#t.pendingConnections}static async getConnection({config:e,strategy:i}){const n=t.#l(e),c=t.#c.get(n);return c||t.#n({config:e,key:n,strategy:i})}static#n=async({config:e,key:i,strategy:n})=>{let c=t.#i.get(i);c||(t.#e.has(i)&&o.warn("There was an error connecting to the database, retrying..."),c=t.#r(e,i,n),t.#i.set(i,c));try{return await c}catch{return t.#e.add(i),null}finally{t.#i.delete(i)}};static#r=async(e,i,n)=>{const c=await n.initialize(e);return t.#c.set(i,c),t.#e.delete(i),c};static#l=e=>`${e.baseDbDir}/${e.additionalFolder}/${e.databaseName}`}export{t as DatabaseConnectionsManager};
1
+ import{logger as o}from"../../tools/notifiers/logger.js";const n="_redocly_db_preconnect_cache_";class t{static get#t(){const e=globalThis;if(!e[n]){const i={connections:new Map,pendingConnections:new Map,failedConnections:new Set};e[n]=i}return e[n]}static get#c(){return t.#t.connections}static get#e(){return t.#t.failedConnections}static get#i(){return t.#t.pendingConnections}static async getConnection({config:e,strategy:i}){const r=t.#l(e),c=t.#c.get(r);return c||t.#r({config:e,key:r,strategy:i})}static#r=async({config:e,key:i,strategy:r})=>{let c=t.#i.get(i);c||(t.#e.has(i)&&o.warn("Error connecting to the database, retrying..."),c=t.#n(e,i,r),t.#i.set(i,c));try{return await c}catch(l){return o.error("Error connecting to the database",l),t.#e.add(i),null}finally{t.#i.delete(i)}};static#n=async(e,i,r)=>{const c=await r.initialize(e);return t.#c.set(i,c),t.#e.delete(i),c};static#l=e=>`${e.baseDbDir}/${e.additionalFolder}/${e.databaseName}`}export{t as DatabaseConnectionsManager};
@@ -1,12 +1,9 @@
1
- import type { DatabaseInitConnectionOptions, DatabaseInitializationResult } from './types.js';
1
+ import type { DatabaseConnectionOptions, DatabaseConnection, DatabaseConnectionInitOptions, RemoteDatabaseConnectionInitOptions } from './types.js';
2
2
  export type DatabaseInitializationStrategy = {
3
- initialize(options: DatabaseInitConnectionOptions): Promise<DatabaseInitializationResult>;
3
+ initialize(options: DatabaseConnectionOptions): Promise<DatabaseConnection>;
4
4
  };
5
- export declare class DefaultDatabaseInitializationStrategy implements DatabaseInitializationStrategy {
6
- initialize({ baseDbDir, databaseName, additionalFolder, }: DatabaseInitConnectionOptions): Promise<DatabaseInitializationResult>;
7
- }
8
5
  export declare class LocalDatabaseInitializationStrategy implements DatabaseInitializationStrategy {
9
- initialize({ removeExisting, baseDbDir, runWithPragmaWalWriteOptimization, databaseName, additionalFolder, migrationsFolder, }: DatabaseInitConnectionOptions): Promise<DatabaseInitializationResult>;
6
+ initialize({ removeExisting, baseDbDir, runWithPragmaWalWriteOptimization, databaseName, additionalFolder, migrationsFolder, }: DatabaseConnectionInitOptions): Promise<DatabaseConnection>;
10
7
  }
11
8
  type RemoteDatabaseInitializationStrategyParams = {
12
9
  skipLogs?: boolean;
@@ -14,10 +11,7 @@ type RemoteDatabaseInitializationStrategyParams = {
14
11
  export declare class RemoteDatabaseInitializationStrategy implements DatabaseInitializationStrategy {
15
12
  #private;
16
13
  constructor(params?: RemoteDatabaseInitializationStrategyParams);
17
- initialize({ removeExisting, baseDbDir, syncUrl, authToken, databaseName, additionalFolder, migrationsFolder, }: DatabaseInitConnectionOptions & {
18
- syncUrl: string;
19
- authToken: string;
20
- }): Promise<DatabaseInitializationResult>;
14
+ initialize({ removeExisting, baseDbDir, syncUrl, authToken, databaseName, additionalFolder, migrationsFolder, }: RemoteDatabaseConnectionInitOptions): Promise<DatabaseConnection>;
21
15
  }
22
16
  export {};
23
17
  //# sourceMappingURL=database-initialization-strategy.d.ts.map
@@ -1 +1 @@
1
- import{logger as l}from"../../tools/notifiers/logger.js";import{DatabaseClient as p}from"./client.js";import{DatabasePathGenerator as d}from"./database-path-generator.js";import{retryAsyncOperation as h}from"./utils/retry-async-operation.js";class u{async initialize({baseDbDir:a,databaseName:t,additionalFolder:e}){const{databasePath:i}=await d.prepareDatabasePath({baseDir:a,databaseName:t,additionalFolder:e});return{client:await p.init({url:`file:${i}`}),path:i}}}class w{async initialize({removeExisting:a,baseDbDir:t,runWithPragmaWalWriteOptimization:e,databaseName:i,additionalFolder:r,migrationsFolder:c}){l.info("Initializing local database client...");const m=l.startTiming(),{databasePath:s}=await d.prepareDatabasePath({baseDir:t,databaseName:i,additionalFolder:r,removeExisting:a}),o={url:`file:${s}`},n=await p.init(o,{runWithPragmaWalWriteOptimization:e});return await n.migrate(t,c),l.infoTime(m,"Local database client initialized"),{client:n,path:s}}}class D{#t;#a;constructor(a){this.#t=a?.skipLogs??!1,this.#a=this.#t?void 0:l}async initialize({removeExisting:a,baseDbDir:t,syncUrl:e,authToken:i,databaseName:r,additionalFolder:c,migrationsFolder:m}){this.#a?.info("Initializing remote database client...");const s=this.#a?.startTiming();return await h(async()=>{const{databasePath:o}=await d.prepareDatabasePath({baseDir:t,databaseName:r,additionalFolder:c,removeExisting:a}),n=await p.init({url:`file:${o}`,syncUrl:e,authToken:i});return await n.migrate(t,m),this.#a?.infoTime(s??"","Remote database client initialized"),{client:n,path:o}},{maxRetries:3,retryStrategy:"exponential",delay:1e3,logger:this.#a,messages:{retry:"Retrying remote database client initialization",maxRetriesReached:"Max retries reached, remote database client initialization failed"}})}}export{u as DefaultDatabaseInitializationStrategy,w as LocalDatabaseInitializationStrategy,D as RemoteDatabaseInitializationStrategy};
1
+ import{logger as r}from"../../tools/notifiers/logger.js";import{DatabaseClient as g}from"./client.js";import{DatabasePathGenerator as p}from"./database-path-generator.js";import{retryAsyncOperation as h}from"./utils/retry-async-operation.js";class u{async initialize({removeExisting:a,baseDbDir:t,runWithPragmaWalWriteOptimization:s,databaseName:o,additionalFolder:l,migrationsFolder:c}){r.info("Initializing local database client...");const m=r.startTiming(),{databasePath:e}=await p.prepareDatabasePath({baseDir:t,databaseName:o,additionalFolder:l,removeExisting:a}),n={url:`file:${e}`},i=await g.init(n,{runWithPragmaWalWriteOptimization:s});return await i.migrate(t,c),r.infoTime(m,"Local database client initialized"),{client:i,path:e}}}class w{#t;#a;constructor(a){this.#t=a?.skipLogs??!1,this.#a=this.#t?void 0:r}async initialize({removeExisting:a,baseDbDir:t,syncUrl:s,authToken:o,databaseName:l,additionalFolder:c,migrationsFolder:m}){this.#a?.info("Initializing remote database client...");const e=this.#a?.startTiming();return await h(async()=>{const{databasePath:n}=await p.prepareDatabasePath({baseDir:t,databaseName:l,additionalFolder:c,removeExisting:a}),i=await g.init({url:`file:${n}`,syncUrl:s,authToken:o});return await i.migrate(t,m),this.#a?.infoTime(e??"","Remote database client initialized"),{client:i,path:n}},{maxRetries:3,retryStrategy:"exponential",delay:1e3,logger:this.#a,messages:{retry:"Retrying remote database client initialization",maxRetriesReached:"Max retries reached, remote database client initialization failed"}})}}export{u as LocalDatabaseInitializationStrategy,w as RemoteDatabaseInitializationStrategy};
@@ -1 +1 @@
1
- import{logger as e}from"../../tools/notifiers/logger.js";import{SQLD_REMOTE_DATABASE_FOLDER as s,SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER as n,SQLD_REMOTE_DATABASE_NAME as E}from"../../constants/sqld-remote-database.js";import{DatabaseConnectionsManager as i}from"./database-connections-manager.js";import{RemoteDatabaseInitializationStrategy as l}from"./database-initialization-strategy.js";class a{static#t=!1;static async init(r){if(!(process.env.REDOCLY_LOCAL_DEV==="true"||process.env.CI==="true")&&!a.#t)try{await a.#e(r)==="PRECONNECTED"&&(a.#t=!0)}catch(t){e.error("Failed to preconnect to sqld remote database",t)}}static#e=async r=>{const o=process.env.SQLD_REMOTE_DATABASE_URL,t=process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN;return!o||!t?(e.warn("SQLD_REMOTE_DATABASE_URL or SQLD_REMOTE_DATABASE_AUTH_TOKEN is not set yet"),"NOT_PRECONNECTED"):await i.getConnection({config:{baseDbDir:r,syncUrl:o,authToken:t,databaseName:E,additionalFolder:s,migrationsFolder:n},strategy:new l({skipLogs:!1})})?(e.info("Sqld remote database preconnected"),"PRECONNECTED"):(e.warn("Sqld remote database preconnect failed"),"NOT_PRECONNECTED")}}export{a as DatabasePreconnectService};
1
+ import{logger as r}from"../../tools/notifiers/logger.js";import{DatabaseConnectionFactory as a}from"./database-connection-factory.js";class e{static#e=!1;static async init(t){if(!(process.env.REDOCLY_LOCAL_DEV==="true"||process.env.CI==="true")&&!e.#e)try{await e.#t(t)==="PRECONNECTED"&&(e.#e=!0)}catch(o){r.error("Failed to preconnect to sqld remote database",o)}}static#t=async t=>await a.create("sqld-remote",{baseDbDir:t})?(r.info("Sqld remote database preconnected"),"PRECONNECTED"):(r.warn("Sqld remote database preconnect failed"),"NOT_PRECONNECTED")}export{e as DatabasePreconnectService};
@@ -1 +1 @@
1
- import{DatabasePathGenerator as a}from"../../database-path-generator";import{CATALOG_LOCAL_DATABASE_NAME as e,CATALOG_LOCAL_DATABASE_FOLDER as t}from"../../../../plugins/catalog-entities/database/consts";const s="./dist/server/esbuild/cache/server",r="./src/server/providers/database/databases/catalog-sqlite/schemas/*",A="./src/server/providers/database/databases/catalog-sqlite/migrations",o=()=>({url:a.generateDatabasePath({baseDir:s,databaseName:e,additionalFolder:t})});var c={schema:r,out:A,dialect:"turso",dbCredentials:o()};export{r as SCHEMAS_PATH,c as default};
1
+ import{DatabasePathGenerator as a}from"../../database-path-generator.js";import{CATALOG_LOCAL_DATABASE_NAME as e,CATALOG_LOCAL_DATABASE_FOLDER as t}from"../../constants.js";const s="./dist/server/esbuild/cache/server",r="./src/server/providers/database/databases/catalog-sqlite/schemas/*",A="./src/server/providers/database/databases/catalog-sqlite/migrations",o=()=>({url:a.generateDatabasePath({baseDir:s,databaseName:e,additionalFolder:t})});var c={schema:r,out:A,dialect:"turso",dbCredentials:o()};export{r as SCHEMAS_PATH,c as default};
@@ -1 +1 @@
1
- import{DatabasePathGenerator as a}from"../../database-path-generator";import{SCHEMAS_PATH as r}from"../catalog-sqlite/drizzle.config";import{SQLD_REMOTE_DATABASE_FOLDER as t,SQLD_REMOTE_DATABASE_NAME as A}from"../../../../constants/sqld-remote-database";const o="./dist/server/esbuild/cache/server",E="./src/server/providers/database/databases/sqld-sqlite/schemas/*",_="./src/server/providers/database/databases/sqld-sqlite/migrations",d=()=>{const e=process.env.SQLD_REMOTE_DATABASE_URL,s=process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN;return e&&s?{url:e,authToken:s}:{url:a.generateDatabasePath({baseDir:o,databaseName:A,additionalFolder:t})}};var n={schema:[E,r],out:_,dialect:"turso",dbCredentials:d()};export{n as default};
1
+ import{DatabasePathGenerator as a}from"../../database-path-generator.js";import{SQLD_REMOTE_DATABASE_FOLDER as r,SQLD_REMOTE_DATABASE_NAME as t}from"../../constants.js";import{SCHEMAS_PATH as A}from"../catalog-sqlite/drizzle.config.js";const o="./dist/server/esbuild/cache/server",E="./src/server/providers/database/databases/sqld-sqlite/schemas/*",_="./src/server/providers/database/databases/sqld-sqlite/migrations",d=()=>{const e=process.env.SQLD_REMOTE_DATABASE_URL,s=process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN;return e&&s?{url:e,authToken:s}:{url:a.generateDatabasePath({baseDir:o,databaseName:t,additionalFolder:r})}};var n={schema:[E,A],out:_,dialect:"turso",dbCredentials:d()};export{n as default};
@@ -1,27 +1,32 @@
1
1
  import type { DatabaseClient } from './client.js';
2
- export type DatabaseInitConnectionOptions = {
2
+ export type DatabaseConnectionInitOptions = {
3
3
  baseDbDir: string;
4
4
  databaseName: string;
5
5
  migrationsFolder: string;
6
6
  additionalFolder?: string;
7
7
  removeExisting?: boolean;
8
8
  runWithPragmaWalWriteOptimization?: boolean;
9
+ sqldRemoteDatabaseUrl?: string;
10
+ sqldRemoteDatabaseAuthToken?: string;
9
11
  };
10
- export type RepositoryInstanceOptions = {
12
+ export type RemoteDatabaseConnectionInitOptions = DatabaseConnectionInitOptions & {
13
+ syncUrl: string;
14
+ authToken: string;
15
+ };
16
+ export type DatabaseConnectionOptions = {
11
17
  baseDbDir: string;
12
- migrationsFolder?: string;
13
- databaseName?: string;
14
- additionalFolder?: string;
15
18
  removeExisting?: boolean;
16
19
  runWithPragmaWalWriteOptimization?: boolean;
17
20
  sqldRemoteDatabaseUrl?: string;
18
21
  sqldRemoteDatabaseAuthToken?: string;
19
22
  };
23
+ export type RepositoryInstanceOptions = DatabaseConnectionOptions;
20
24
  export type ServiceInstanceOptions = RepositoryInstanceOptions & {
21
25
  runOnlyLocalDatabase?: boolean;
22
26
  };
23
- export type DatabaseInitializationResult = {
27
+ export type DatabaseConnection = {
24
28
  client: DatabaseClient;
25
29
  path: string;
26
30
  };
31
+ export type DatabaseName = 'main-local' | 'catalog-local' | 'sqld-remote';
27
32
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- import{logger as i}from"../../tools/notifiers/logger.js";import{reporter as m}from"../../tools/notifiers/reporter.js";import{enhanceContext as f}from"../../api-routes/helpers/enhance-context.js";import{KvService as l}from"../../persistence/kv/services/kv-service.js";import{enhanceRequest as u}from"../../api-routes/helpers/enhance-request.js";async function v({route:r,ctx:t,staticData:n,serverPropsGetters:a,serverPropsUser:p,actions:s}){try{if(!a[r.fsPath]||!t)return;const e=a[r.fsPath];e||await m.panicOnBuild(`Invalid page props getter id: "${r.fsPath}" for route "${r.slug}"`);const o=async()=>await l.getInstance({baseDbDir:s.serverOutDir,sqldRemoteDatabaseUrl:process.env.SQLD_REMOTE_DATABASE_URL,sqldRemoteDatabaseAuthToken:process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN}),c=f({honoCtx:t,ctx:{user:p,config:s.getConfig()},getStorage:o}),g=await u(t);return await(await e()).default(n,g,c)}catch(e){const o=r.fsPath.replace(/\.(page\.tsx?|md)$/,".props.ts");return i.error(`Page prop getter error: ${e.message}`),{pagePropGetterError:{message:`${e.message||"An unknown error occurred"} in ${o}`,name:"ServerPropsGetterError",stack:e.stack}}}}export{v as getServerPropsFromUserHandler};
1
+ import{logger as g}from"../../tools/notifiers/logger.js";import{reporter as m}from"../../tools/notifiers/reporter.js";import{enhanceContext as f}from"../../api-routes/helpers/enhance-context.js";import{KvService as l}from"../../persistence/kv/services/kv-service.js";import{enhanceRequest as u}from"../../api-routes/helpers/enhance-request.js";async function S({route:r,ctx:t,staticData:n,serverPropsGetters:a,serverPropsUser:p,actions:s}){try{if(!a[r.fsPath]||!t)return;const e=a[r.fsPath];e||await m.panicOnBuild(`Invalid page props getter id: "${r.fsPath}" for route "${r.slug}"`);const o=async()=>await l.getInstance({baseDbDir:s.serverOutDir,sqldRemoteDatabaseUrl:process.env.SQLD_REMOTE_DATABASE_URL,sqldRemoteDatabaseAuthToken:process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN}),c=f({honoCtx:t,ctx:{user:p,config:s.getConfig()},getKv:o}),i=await u(t);return await(await e()).default(n,i,c)}catch(e){const o=r.fsPath.replace(/\.(page\.tsx?|md)$/,".props.ts");return g.error(`Page prop getter error: ${e.message}`),{pagePropGetterError:{message:`${e.message||"An unknown error occurred"} in ${o}`,name:"ServerPropsGetterError",stack:e.stack}}}}export{S as getServerPropsFromUserHandler};
@@ -18,5 +18,5 @@ export type ApiFunctionsErrorMessage = {
18
18
  stack: string;
19
19
  };
20
20
  };
21
- export type ApiFunctionsBasicContext = Omit<ApiFunctionsContext, 'params' | 'query' | 'cookies' | 'status' | 'json' | 'text' | 'redirect' | 'setCookie' | 'deleteCookie' | 'log' | 'getStorage'>;
21
+ export type ApiFunctionsBasicContext = Omit<ApiFunctionsContext, 'params' | 'query' | 'cookies' | 'status' | 'json' | 'text' | 'redirect' | 'setCookie' | 'deleteCookie' | 'log' | 'getKv'>;
22
22
  //# sourceMappingURL=api-functions.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/revel",
3
- "version": "0.128.0-next.8",
3
+ "version": "0.128.0-next.9",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "bin": {
@@ -92,14 +92,14 @@
92
92
  "xml-crypto": "6.0.1",
93
93
  "xpath": "0.0.34",
94
94
  "yaml-ast-parser": "0.0.43",
95
- "@redocly/asyncapi-docs": "1.5.0-next.8",
95
+ "@redocly/asyncapi-docs": "1.5.0-next.9",
96
96
  "@redocly/config": "0.40.0",
97
97
  "@redocly/graphql-docs": "1.5.0-next.1",
98
- "@redocly/openapi-docs": "3.16.0-next.8",
98
+ "@redocly/openapi-docs": "3.16.0-next.9",
99
99
  "@redocly/portal-legacy-ui": "0.11.0-next.0",
100
- "@redocly/portal-plugin-mock-server": "0.13.0-next.8",
100
+ "@redocly/portal-plugin-mock-server": "0.13.0-next.9",
101
101
  "@redocly/realm-asyncapi-sdk": "0.6.0-next.1",
102
- "@redocly/theme": "0.60.0-next.5"
102
+ "@redocly/theme": "0.60.0-next.6"
103
103
  },
104
104
  "peerDependencies": {
105
105
  "react": "^19.1.0",
@@ -1,4 +0,0 @@
1
- export declare const SQLD_REMOTE_DATABASE_NAME = "sqld-remote.sqlite";
2
- export declare const SQLD_REMOTE_DATABASE_FOLDER = "sqld-remote";
3
- export declare const SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER = "sqld-sqlite";
4
- //# sourceMappingURL=sqld-remote-database.d.ts.map
@@ -1 +0,0 @@
1
- const E="sqld-remote.sqlite",A="sqld-remote",t="sqld-sqlite";export{A as SQLD_REMOTE_DATABASE_FOLDER,t as SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER,E as SQLD_REMOTE_DATABASE_NAME};
@@ -1,4 +0,0 @@
1
- export declare const CATALOG_LOCAL_DATABASE_NAME = "catalog-local.sqlite";
2
- export declare const CATALOG_LOCAL_DATABASE_FOLDER = "catalog-local";
3
- export declare const CATALOG_DATABASE_MIGRATIONS_FOLDER = "catalog-sqlite";
4
- //# sourceMappingURL=consts.d.ts.map
@@ -1 +0,0 @@
1
- const A="catalog-local.sqlite",o="catalog-local",t="catalog-sqlite";export{t as CATALOG_DATABASE_MIGRATIONS_FOLDER,o as CATALOG_LOCAL_DATABASE_FOLDER,A as CATALOG_LOCAL_DATABASE_NAME};