s3db.js 19.4.13 → 19.4.14

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.
@@ -70660,8 +70660,8 @@ class Database extends SafeEventEmitter {
70660
70660
  })();
70661
70661
  this.version = '1';
70662
70662
  this.s3dbVersion = (() => {
70663
- const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.13'] !== 'undefined' && globalThis['19.4.13'] !== '19.4.13'
70664
- ? globalThis['19.4.13']
70663
+ const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.14'] !== 'undefined' && globalThis['19.4.14'] !== '19.4.14'
70664
+ ? globalThis['19.4.14']
70665
70665
  : 'latest'));
70666
70666
  return ok ? version : 'latest';
70667
70667
  })();
@@ -70637,8 +70637,8 @@ class Database extends SafeEventEmitter {
70637
70637
  })();
70638
70638
  this.version = '1';
70639
70639
  this.s3dbVersion = (() => {
70640
- const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.13'] !== 'undefined' && globalThis['19.4.13'] !== '19.4.13'
70641
- ? globalThis['19.4.13']
70640
+ const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.14'] !== 'undefined' && globalThis['19.4.14'] !== '19.4.14'
70641
+ ? globalThis['19.4.14']
70642
70642
  : 'latest'));
70643
70643
  return ok ? version : 'latest';
70644
70644
  })();
package/dist/s3db.cjs CHANGED
@@ -20149,8 +20149,8 @@ class Database extends SafeEventEmitter {
20149
20149
  })();
20150
20150
  this.version = '1';
20151
20151
  this.s3dbVersion = (() => {
20152
- const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.13'] !== 'undefined' && globalThis['19.4.13'] !== '19.4.13'
20153
- ? globalThis['19.4.13']
20152
+ const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.14'] !== 'undefined' && globalThis['19.4.14'] !== '19.4.14'
20153
+ ? globalThis['19.4.14']
20154
20154
  : 'latest'));
20155
20155
  return ok ? version : 'latest';
20156
20156
  })();
package/dist/s3db.es.js CHANGED
@@ -20124,8 +20124,8 @@ class Database extends SafeEventEmitter {
20124
20124
  })();
20125
20125
  this.version = '1';
20126
20126
  this.s3dbVersion = (() => {
20127
- const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.13'] !== 'undefined' && globalThis['19.4.13'] !== '19.4.13'
20128
- ? globalThis['19.4.13']
20127
+ const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.14'] !== 'undefined' && globalThis['19.4.14'] !== '19.4.14'
20128
+ ? globalThis['19.4.14']
20129
20129
  : 'latest'));
20130
20130
  return ok ? version : 'latest';
20131
20131
  })();
@@ -3,9 +3,11 @@
3
3
  * Provides search tools for core docs and plugin docs using Fuse.js.
4
4
  */
5
5
 
6
- import { readFileSync, readdirSync, statSync, existsSync } from 'fs';
7
- import { join, dirname, basename, relative } from 'path';
6
+ import { readFileSync, readdirSync, statSync, existsSync, mkdirSync, rmSync } from 'fs';
7
+ import { join, dirname, basename } from 'path';
8
8
  import { fileURLToPath } from 'url';
9
+ import { homedir } from 'os';
10
+ import { execSync } from 'child_process';
9
11
  import Fuse from 'fuse.js';
10
12
 
11
13
  import type { S3dbMCPServer } from '../entrypoint.js';
@@ -14,7 +16,20 @@ import type { S3dbSearchDocsArgs, S3dbListTopicsArgs } from '../types/index.js';
14
16
  const __filename = fileURLToPath(import.meta.url);
15
17
  const __dirname = dirname(__filename);
16
18
  const PROJECT_ROOT = join(__dirname, '../../');
17
- const DOCS_ROOT = join(PROJECT_ROOT, 'docs');
19
+ const LOCAL_DOCS_ROOT = join(PROJECT_ROOT, 'docs');
20
+
21
+ const CACHE_DIR = join(homedir(), '.cache', 's3db-mcp');
22
+ const CACHED_DOCS_ROOT = join(CACHE_DIR, 'docs');
23
+ const REPO_URL = 'https://github.com/forattini-dev/s3db.js.git';
24
+
25
+ function getDocsRoot(): string {
26
+ if (existsSync(LOCAL_DOCS_ROOT)) {
27
+ return LOCAL_DOCS_ROOT;
28
+ }
29
+ return CACHED_DOCS_ROOT;
30
+ }
31
+
32
+ let DOCS_ROOT = LOCAL_DOCS_ROOT;
18
33
 
19
34
  interface DocEntry {
20
35
  id: string;
@@ -354,7 +369,63 @@ export function createDocsSearchHandlers(server: S3dbMCPServer) {
354
369
  };
355
370
  }
356
371
 
372
+ async function ensureDocsAvailable(): Promise<boolean> {
373
+ if (existsSync(LOCAL_DOCS_ROOT)) {
374
+ DOCS_ROOT = LOCAL_DOCS_ROOT;
375
+ return true;
376
+ }
377
+
378
+ if (existsSync(CACHED_DOCS_ROOT)) {
379
+ DOCS_ROOT = CACHED_DOCS_ROOT;
380
+ return true;
381
+ }
382
+
383
+ console.error('📚 Docs not found locally. Cloning from GitHub...');
384
+
385
+ try {
386
+ mkdirSync(CACHE_DIR, { recursive: true });
387
+
388
+ const tempDir = join(CACHE_DIR, 'repo-temp');
389
+
390
+ if (existsSync(tempDir)) {
391
+ rmSync(tempDir, { recursive: true, force: true });
392
+ }
393
+
394
+ execSync(
395
+ `git clone --depth 1 --filter=blob:none --sparse "${REPO_URL}" "${tempDir}"`,
396
+ { stdio: 'pipe' }
397
+ );
398
+
399
+ execSync(
400
+ 'git sparse-checkout set docs',
401
+ { cwd: tempDir, stdio: 'pipe' }
402
+ );
403
+
404
+ const clonedDocs = join(tempDir, 'docs');
405
+ if (existsSync(clonedDocs)) {
406
+ if (existsSync(CACHED_DOCS_ROOT)) {
407
+ rmSync(CACHED_DOCS_ROOT, { recursive: true, force: true });
408
+ }
409
+ execSync(`mv "${clonedDocs}" "${CACHED_DOCS_ROOT}"`, { stdio: 'pipe' });
410
+ }
411
+
412
+ rmSync(tempDir, { recursive: true, force: true });
413
+
414
+ DOCS_ROOT = CACHED_DOCS_ROOT;
415
+ console.error('✅ Docs cloned successfully to', CACHED_DOCS_ROOT);
416
+ return true;
417
+ } catch (err) {
418
+ console.error('⚠️ Failed to clone docs:', (err as Error).message);
419
+ console.error(' Documentation search will be unavailable.');
420
+ return false;
421
+ }
422
+ }
423
+
357
424
  export async function preloadSearch(): Promise<void> {
425
+ const docsAvailable = await ensureDocsAvailable();
426
+ if (!docsAvailable) {
427
+ return;
428
+ }
358
429
  loadCoreDocs();
359
430
  loadPluginDocs();
360
431
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "s3db.js",
3
- "version": "19.4.13",
3
+ "version": "19.4.14",
4
4
  "description": "Use AWS S3, the world's most reliable document storage, as a database with this ORM.",
5
5
  "main": "dist/s3db.cjs",
6
6
  "module": "dist/s3db.es.js",