sql.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /**
  2. * Closed, package-owned SQL resource loading for SQLite.
  3. * @module @deepseek-ai/dsh-session-persistence-sqlite/sql
  4. */
  5. import { readFileSync } from 'node:fs'
  6. import { fileURLToPath } from 'node:url'
  7. const SQL_RESOURCES = [
  8. 'begin',
  9. 'begin-immediate',
  10. 'commit',
  11. 'delete-events-from',
  12. 'foreign-keys-on',
  13. 'insert-event',
  14. 'insert-persistence-state',
  15. 'journal-mode-delete',
  16. 'journal-mode-persist',
  17. 'journal-mode-truncate',
  18. 'journal-mode-wal',
  19. 'mmap-off',
  20. 'rollback',
  21. 'schema',
  22. 'select-application-id',
  23. 'select-events',
  24. 'select-events-from',
  25. 'select-mmap-size',
  26. 'select-packed-predecessors',
  27. 'select-schema-objects',
  28. 'select-session',
  29. 'select-sessions',
  30. 'select-store-id',
  31. 'select-synchronous',
  32. 'select-tail-events',
  33. 'select-trusted-schema',
  34. 'select-user-object-count',
  35. 'select-user-version',
  36. 'set-application-id',
  37. 'set-user-version-18',
  38. 'synchronous-full',
  39. 'trusted-schema-off',
  40. 'update-session-revision',
  41. 'upsert-session',
  42. ] as const
  43. /** A resource basename selected exclusively by package code. */
  44. export type SqlResourceName = typeof SQL_RESOURCES[number]
  45. const cache = new Map<SqlResourceName, string>()
  46. /**
  47. * Load an immutable SQL statement by closed resource name.
  48. * @param name - package-owned resource basename.
  49. * @returns the resource text.
  50. */
  51. export function sql(name: SqlResourceName): string {
  52. const cached = cache.get(name)
  53. if (cached !== undefined) return cached
  54. const statement = readFileSync(
  55. fileURLToPath(new URL(`../resources/sql/${name}.sql`, import.meta.url)),
  56. 'utf8',
  57. )
  58. cache.set(name, statement)
  59. return statement
  60. }