@slorenzot/memento-core 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ConfigManager.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export interface MementoConfig {
|
|
2
|
-
|
|
2
|
+
storageMethod?: 'database' | 'storage';
|
|
3
|
+
dbPath?: string;
|
|
4
|
+
storagePath?: string;
|
|
3
5
|
projectId?: string;
|
|
4
6
|
}
|
|
5
7
|
export declare function findProjectConfig(startDir?: string): MementoConfig | null;
|
|
6
8
|
export declare function loadConfig(): MementoConfig;
|
|
7
9
|
export declare function resolveStoragePath(config: MementoConfig): string;
|
|
10
|
+
export declare function resolveDbPath(config: MementoConfig): string;
|
|
8
11
|
export declare function getProjectId(config: MementoConfig): string;
|
|
9
12
|
//# sourceMappingURL=ConfigManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../src/ConfigManager.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../src/ConfigManager.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAsB,GAAG,aAAa,GAAG,IAAI,CA0BxF;AAED,wBAAgB,UAAU,IAAI,aAAa,CA8B1C;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAYhE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAY3D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAS1D"}
|
package/dist/ConfigManager.js
CHANGED
|
@@ -3,11 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.findProjectConfig = findProjectConfig;
|
|
4
4
|
exports.loadConfig = loadConfig;
|
|
5
5
|
exports.resolveStoragePath = resolveStoragePath;
|
|
6
|
+
exports.resolveDbPath = resolveDbPath;
|
|
6
7
|
exports.getProjectId = getProjectId;
|
|
7
8
|
const fs_1 = require("fs");
|
|
8
9
|
const path_1 = require("path");
|
|
9
10
|
const os_1 = require("os");
|
|
10
11
|
const DEFAULT_CONFIG = {
|
|
12
|
+
storageMethod: 'database',
|
|
13
|
+
dbPath: '.memento/db/memento.db',
|
|
11
14
|
storagePath: 'database/storage',
|
|
12
15
|
};
|
|
13
16
|
const GLOBAL_CONFIG_PATH = (0, path_1.join)((0, os_1.homedir)(), '.memento', 'config');
|
|
@@ -55,6 +58,12 @@ function loadConfig() {
|
|
|
55
58
|
if (globalConfig) {
|
|
56
59
|
config = { ...config, ...globalConfig };
|
|
57
60
|
}
|
|
61
|
+
if (process.env.MEMENTO_STORAGE_METHOD) {
|
|
62
|
+
config.storageMethod = process.env.MEMENTO_STORAGE_METHOD;
|
|
63
|
+
}
|
|
64
|
+
if (process.env.MEMENTO_DB_PATH) {
|
|
65
|
+
config.dbPath = process.env.MEMENTO_DB_PATH;
|
|
66
|
+
}
|
|
58
67
|
if (process.env.MEMENTO_STORAGE_PATH) {
|
|
59
68
|
config.storagePath = process.env.MEMENTO_STORAGE_PATH;
|
|
60
69
|
}
|
|
@@ -64,13 +73,24 @@ function loadConfig() {
|
|
|
64
73
|
return config;
|
|
65
74
|
}
|
|
66
75
|
function resolveStoragePath(config) {
|
|
67
|
-
|
|
68
|
-
|
|
76
|
+
const storagePath = config.storagePath || DEFAULT_CONFIG.storagePath;
|
|
77
|
+
if (storagePath.startsWith('/')) {
|
|
78
|
+
return storagePath;
|
|
79
|
+
}
|
|
80
|
+
if (storagePath.startsWith('~/')) {
|
|
81
|
+
return (0, path_1.join)((0, os_1.homedir)(), storagePath.slice(2));
|
|
82
|
+
}
|
|
83
|
+
return (0, path_1.join)(process.cwd(), storagePath);
|
|
84
|
+
}
|
|
85
|
+
function resolveDbPath(config) {
|
|
86
|
+
const dbPath = config.dbPath || DEFAULT_CONFIG.dbPath;
|
|
87
|
+
if (dbPath.startsWith('/')) {
|
|
88
|
+
return dbPath;
|
|
69
89
|
}
|
|
70
|
-
if (
|
|
71
|
-
return (0, path_1.join)((0, os_1.homedir)(),
|
|
90
|
+
if (dbPath.startsWith('~/')) {
|
|
91
|
+
return (0, path_1.join)((0, os_1.homedir)(), dbPath.slice(2));
|
|
72
92
|
}
|
|
73
|
-
return (0, path_1.join)(process.cwd(),
|
|
93
|
+
return (0, path_1.join)(process.cwd(), dbPath);
|
|
74
94
|
}
|
|
75
95
|
function getProjectId(config) {
|
|
76
96
|
if (config.projectId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../src/ConfigManager.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../src/ConfigManager.ts"],"names":[],"mappings":";;AAkCA,8CA0BC;AAED,gCA8BC;AAED,gDAYC;AAED,sCAYC;AAED,oCASC;AAnID,2BAA8C;AAC9C,+BAAqC;AACrC,2BAA6B;AAU7B,MAAM,cAAc,GAAkB;IACpC,aAAa,EAAE,UAAU;IACzB,MAAM,EAAE,wBAAwB;IAChC,WAAW,EAAE,kBAAkB;CAChC,CAAC;AAEF,MAAM,kBAAkB,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AACjE,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAEvC,SAAS,YAAY,CAAI,IAAY;IACnC,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAChE,IAAI,UAAU,GAAG,QAAQ,CAAC;IAC1B,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,KAAK,GAAG,QAAQ,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAEvD,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,YAAY,CAAgB,UAAU,CAAC,CAAC;YACvD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,UAAU,CAAC,CAAC;QAEtC,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM;QACR,CAAC;QAED,UAAU,GAAG,SAAS,CAAC;QACvB,KAAK,EAAE,CAAC;IACV,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,UAAU;IACxB,IAAI,MAAM,GAAkB,EAAE,GAAG,cAAc,EAAE,CAAC;IAElD,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,YAAY,GAAG,YAAY,CAAgB,kBAAkB,CAAC,CAAC;IACrE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;QACvC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAgD,CAAC;IACtF,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACrC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACxD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACnC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAqB;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC,WAAY,CAAC;IAEtE,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,aAAa,CAAC,MAAqB;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,MAAO,CAAC;IAEvD,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,YAAY,CAAC,MAAqB;IAChD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,YAAY,CAAoB,eAAe,CAAC,CAAC;IAErE,OAAO,WAAW,EAAE,IAAI,IAAI,SAAS,CAAC;AACxC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slorenzot/memento-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Core memory engine for Memento with bun:sqlite, FTS5 search, and flexible config",
|
|
5
5
|
"keywords": ["memento", "memory", "sqlite", "fts5", "bun", "config", "mementorc"],
|
|
6
6
|
"license": "CC-BY-NC-ND-4.0",
|
|
@@ -18,6 +18,8 @@ beforeAll(() => {
|
|
|
18
18
|
join(configDir, '.mementorc'),
|
|
19
19
|
JSON.stringify(
|
|
20
20
|
{
|
|
21
|
+
storageMethod: 'database',
|
|
22
|
+
dbPath: '.memento/db/memento.db',
|
|
21
23
|
storagePath: 'database/storage',
|
|
22
24
|
projectId: 'test-project',
|
|
23
25
|
},
|
|
@@ -53,13 +55,21 @@ describe('ConfigManager', () => {
|
|
|
53
55
|
it('should use default config when no .mementorc found', () => {
|
|
54
56
|
const { loadConfig } = require('../src/ConfigManager');
|
|
55
57
|
const { join } = require('path');
|
|
58
|
+
const { mkdirSync } = require('fs');
|
|
59
|
+
|
|
60
|
+
const noConfigDir = join(testDir, 'no-config-isolated');
|
|
61
|
+
mkdirSync(noConfigDir, { recursive: true });
|
|
56
62
|
|
|
57
63
|
const originalCwd = process.cwd;
|
|
58
|
-
|
|
64
|
+
// Use /tmp which should not have .mementorc
|
|
65
|
+
process.cwd = () => '/tmp';
|
|
59
66
|
|
|
60
67
|
try {
|
|
61
68
|
const config = loadConfig();
|
|
69
|
+
expect(config.storageMethod).toBe('database');
|
|
70
|
+
expect(config.dbPath).toBe('.memento/db/memento.db');
|
|
62
71
|
expect(config.storagePath).toBe('database/storage');
|
|
72
|
+
// projectId will be undefined when no .mementorc and no package.json
|
|
63
73
|
expect(config.projectId).toBeUndefined();
|
|
64
74
|
} finally {
|
|
65
75
|
process.cwd = originalCwd;
|
|
@@ -70,11 +80,15 @@ describe('ConfigManager', () => {
|
|
|
70
80
|
const { loadConfig } = require('../src/ConfigManager');
|
|
71
81
|
|
|
72
82
|
const originalEnv = { ...process.env };
|
|
83
|
+
process.env.MEMENTO_STORAGE_METHOD = 'storage';
|
|
84
|
+
process.env.MEMENTO_DB_PATH = '/custom/db/memento.db';
|
|
73
85
|
process.env.MEMENTO_STORAGE_PATH = '/custom/storage';
|
|
74
86
|
process.env.MEMENTO_PROJECT_ID = 'env-project';
|
|
75
87
|
|
|
76
88
|
try {
|
|
77
89
|
const config = loadConfig();
|
|
90
|
+
expect(config.storageMethod).toBe('storage');
|
|
91
|
+
expect(config.dbPath).toBe('/custom/db/memento.db');
|
|
78
92
|
expect(config.storagePath).toBe('/custom/storage');
|
|
79
93
|
expect(config.projectId).toBe('env-project');
|
|
80
94
|
} finally {
|
|
@@ -123,6 +137,61 @@ describe('ConfigManager', () => {
|
|
|
123
137
|
});
|
|
124
138
|
});
|
|
125
139
|
|
|
140
|
+
describe('resolveDbPath()', () => {
|
|
141
|
+
it('should resolve absolute paths', () => {
|
|
142
|
+
const { resolveDbPath } = require('../src/ConfigManager');
|
|
143
|
+
const config = { dbPath: '/absolute/path/memento.db', projectId: 'test' };
|
|
144
|
+
const resolved = resolveDbPath(config);
|
|
145
|
+
expect(resolved).toBe('/absolute/path/memento.db');
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('should resolve ~ to home directory', () => {
|
|
149
|
+
const { resolveDbPath } = require('../src/ConfigManager');
|
|
150
|
+
const { homedir } = require('os');
|
|
151
|
+
const config = { dbPath: '~/.memento/db/memento.db', projectId: 'test' };
|
|
152
|
+
|
|
153
|
+
const originalCwd = process.cwd;
|
|
154
|
+
process.cwd = () => '/some/working/dir';
|
|
155
|
+
|
|
156
|
+
try {
|
|
157
|
+
const resolved = resolveDbPath(config);
|
|
158
|
+
expect(resolved).toBe(join(homedir(), '.memento/db/memento.db'));
|
|
159
|
+
} finally {
|
|
160
|
+
process.cwd = originalCwd;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('should resolve relative paths from working directory', () => {
|
|
165
|
+
const { resolveDbPath } = require('../src/ConfigManager');
|
|
166
|
+
const config = { dbPath: '.memento/db/memento.db', projectId: 'test' };
|
|
167
|
+
|
|
168
|
+
const originalCwd = process.cwd;
|
|
169
|
+
process.cwd = () => '/project/root';
|
|
170
|
+
|
|
171
|
+
try {
|
|
172
|
+
const resolved = resolveDbPath(config);
|
|
173
|
+
expect(resolved).toBe('/project/root/.memento/db/memento.db');
|
|
174
|
+
} finally {
|
|
175
|
+
process.cwd = originalCwd;
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it('should use default dbPath when not specified', () => {
|
|
180
|
+
const { resolveDbPath } = require('../src/ConfigManager');
|
|
181
|
+
const config = { projectId: 'test' };
|
|
182
|
+
|
|
183
|
+
const originalCwd = process.cwd;
|
|
184
|
+
process.cwd = () => '/project/root';
|
|
185
|
+
|
|
186
|
+
try {
|
|
187
|
+
const resolved = resolveDbPath(config);
|
|
188
|
+
expect(resolved).toBe('/project/root/.memento/db/memento.db');
|
|
189
|
+
} finally {
|
|
190
|
+
process.cwd = originalCwd;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
|
|
126
195
|
describe('getProjectId()', () => {
|
|
127
196
|
it('should use projectId from config if available', () => {
|
|
128
197
|
const { getProjectId } = require('../src/ConfigManager');
|
package/src/ConfigManager.ts
CHANGED
|
@@ -4,11 +4,15 @@ import { homedir } from 'os';
|
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
|
|
6
6
|
export interface MementoConfig {
|
|
7
|
-
|
|
7
|
+
storageMethod?: 'database' | 'storage';
|
|
8
|
+
dbPath?: string;
|
|
9
|
+
storagePath?: string;
|
|
8
10
|
projectId?: string;
|
|
9
11
|
}
|
|
10
12
|
|
|
11
13
|
const DEFAULT_CONFIG: MementoConfig = {
|
|
14
|
+
storageMethod: 'database',
|
|
15
|
+
dbPath: '.memento/db/memento.db',
|
|
12
16
|
storagePath: 'database/storage',
|
|
13
17
|
};
|
|
14
18
|
|
|
@@ -69,6 +73,14 @@ export function loadConfig(): MementoConfig {
|
|
|
69
73
|
config = { ...config, ...globalConfig };
|
|
70
74
|
}
|
|
71
75
|
|
|
76
|
+
if (process.env.MEMENTO_STORAGE_METHOD) {
|
|
77
|
+
config.storageMethod = process.env.MEMENTO_STORAGE_METHOD as 'database' | 'storage';
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (process.env.MEMENTO_DB_PATH) {
|
|
81
|
+
config.dbPath = process.env.MEMENTO_DB_PATH;
|
|
82
|
+
}
|
|
83
|
+
|
|
72
84
|
if (process.env.MEMENTO_STORAGE_PATH) {
|
|
73
85
|
config.storagePath = process.env.MEMENTO_STORAGE_PATH;
|
|
74
86
|
}
|
|
@@ -81,15 +93,31 @@ export function loadConfig(): MementoConfig {
|
|
|
81
93
|
}
|
|
82
94
|
|
|
83
95
|
export function resolveStoragePath(config: MementoConfig): string {
|
|
84
|
-
|
|
85
|
-
|
|
96
|
+
const storagePath = config.storagePath || DEFAULT_CONFIG.storagePath!;
|
|
97
|
+
|
|
98
|
+
if (storagePath.startsWith('/')) {
|
|
99
|
+
return storagePath;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (storagePath.startsWith('~/')) {
|
|
103
|
+
return join(homedir(), storagePath.slice(2));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return join(process.cwd(), storagePath);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export function resolveDbPath(config: MementoConfig): string {
|
|
110
|
+
const dbPath = config.dbPath || DEFAULT_CONFIG.dbPath!;
|
|
111
|
+
|
|
112
|
+
if (dbPath.startsWith('/')) {
|
|
113
|
+
return dbPath;
|
|
86
114
|
}
|
|
87
115
|
|
|
88
|
-
if (
|
|
89
|
-
return join(homedir(),
|
|
116
|
+
if (dbPath.startsWith('~/')) {
|
|
117
|
+
return join(homedir(), dbPath.slice(2));
|
|
90
118
|
}
|
|
91
119
|
|
|
92
|
-
return join(process.cwd(),
|
|
120
|
+
return join(process.cwd(), dbPath);
|
|
93
121
|
}
|
|
94
122
|
|
|
95
123
|
export function getProjectId(config: MementoConfig): string {
|