@novis10813/secondbrain-cli 0.1.0 → 0.1.1
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/README.md +74 -5
- package/dist/commands/backlinks.d.ts.map +1 -1
- package/dist/commands/backlinks.js +16 -33
- package/dist/commands/backlinks.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +71 -57
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +5 -20
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/get.js +27 -26
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +22 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/open.d.ts +3 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +28 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/orphans.d.ts.map +1 -1
- package/dist/commands/orphans.js +9 -27
- package/dist/commands/orphans.js.map +1 -1
- package/dist/commands/outlinks.d.ts +3 -0
- package/dist/commands/outlinks.d.ts.map +1 -0
- package/dist/commands/outlinks.js +48 -0
- package/dist/commands/outlinks.js.map +1 -0
- package/dist/commands/search.d.ts +2 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +57 -39
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/stats.d.ts.map +1 -1
- package/dist/commands/stats.js +4 -18
- package/dist/commands/stats.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +3 -17
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/template.d.ts +3 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +63 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/vault.d.ts +3 -0
- package/dist/commands/vault.d.ts.map +1 -0
- package/dist/commands/vault.js +233 -0
- package/dist/commands/vault.js.map +1 -0
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +134 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config.d.ts +3 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +12 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/database.d.ts +58 -14
- package/dist/utils/database.d.ts.map +1 -1
- package/dist/utils/database.js +627 -207
- package/dist/utils/database.js.map +1 -1
- package/dist/utils/global-config.d.ts +53 -0
- package/dist/utils/global-config.d.ts.map +1 -0
- package/dist/utils/global-config.js +144 -0
- package/dist/utils/global-config.js.map +1 -0
- package/dist/utils/parser.d.ts +95 -2
- package/dist/utils/parser.d.ts.map +1 -1
- package/dist/utils/parser.js +436 -38
- package/dist/utils/parser.js.map +1 -1
- package/dist/utils/placeholder.d.ts +37 -0
- package/dist/utils/placeholder.d.ts.map +1 -0
- package/dist/utils/placeholder.js +113 -0
- package/dist/utils/placeholder.js.map +1 -0
- package/dist/utils/position.d.ts +10 -0
- package/dist/utils/position.d.ts.map +1 -0
- package/dist/utils/position.js +24 -0
- package/dist/utils/position.js.map +1 -0
- package/dist/utils/sqlite-adapter.d.ts +8 -0
- package/dist/utils/sqlite-adapter.d.ts.map +1 -0
- package/dist/utils/sqlite-adapter.js +14 -0
- package/dist/utils/sqlite-adapter.js.map +1 -0
- package/dist/utils/template.d.ts +2 -2
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +8 -3
- package/dist/utils/template.js.map +1 -1
- package/dist/utils/vault-resolve.d.ts +23 -0
- package/dist/utils/vault-resolve.d.ts.map +1 -0
- package/dist/utils/vault-resolve.js +86 -0
- package/dist/utils/vault-resolve.js.map +1 -0
- package/dist/utils/vault.d.ts +77 -10
- package/dist/utils/vault.d.ts.map +1 -1
- package/dist/utils/vault.js +253 -98
- package/dist/utils/vault.js.map +1 -1
- package/package.json +9 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;AAQA,8CA6CC;AArDD,yCAAoC;AACpC,kDAAmD;AACnD,gEAAgE;AAChE,+BAAqC;AACrC,2BAA6B;AAE7B,MAAM,kBAAkB,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,OAAO,CAAC,CAAC;AAEpD,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;SAChC,WAAW,CAAC,gEAAgE,CAAC;SAC7E,MAAM,CAAC,mBAAmB,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACxD,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;SAChC,MAAM,CAAC,CAAC,IAAa,EAAE,OAA2B,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,IAAI,IAAI,OAAO,EAAE,IAAI,IAAI,kBAAkB,CAAC,CAAC;YACvE,MAAM,aAAa,GAAG,IAAI,yBAAa,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,IAAI,sCAAmB,EAAE,CAAC;YAE/C,IAAI,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;gBAE5D,aAAa;gBACb,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC/C,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,oBAAoB,CAAC,CAAC;gBAClE,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAE/C,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,EAAE,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACvG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,oBAAoB,IAAI,OAAO,CAgB9C"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMigrateCommand = createMigrateCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const vault_resolve_js_1 = require("../utils/vault-resolve.js");
|
|
6
|
+
function createMigrateCommand() {
|
|
7
|
+
const command = new commander_1.Command('migrate')
|
|
8
|
+
.description('Migrate data from old schema (notes table) to new schema (files + content_metadata)')
|
|
9
|
+
.action(async () => {
|
|
10
|
+
await (0, vault_resolve_js_1.withVault)((vault) => {
|
|
11
|
+
const result = vault.migrateFromOldSchema();
|
|
12
|
+
console.log('✅ Migration complete');
|
|
13
|
+
console.log(`Migrated: ${result.migrated}`);
|
|
14
|
+
console.log(`Skipped (already in new schema): ${result.skipped}`);
|
|
15
|
+
if (result.errors > 0) {
|
|
16
|
+
console.log(`Errors: ${result.errors}`);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
return command;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":";;AAGA,oDAgBC;AAnBD,yCAAoC;AACpC,gEAAsD;AAEtD,SAAgB,oBAAoB;IAClC,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,SAAS,CAAC;SACnC,WAAW,CAAC,qFAAqF,CAAC;SAClG,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,IAAA,4BAAS,EAAC,CAAC,KAAK,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,iBAAiB,IAAI,OAAO,CAqB3C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createOpenCommand = createOpenCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const vault_resolve_js_1 = require("../utils/vault-resolve.js");
|
|
6
|
+
function createOpenCommand() {
|
|
7
|
+
const command = new commander_1.Command('open')
|
|
8
|
+
.description('Resolve a link to a file and position for editor navigation (path:line:col)')
|
|
9
|
+
.argument('<linkpath>', 'Obsidian-style link (e.g. note, note#heading, note#^block-id)')
|
|
10
|
+
.option('-s, --source <path>', 'Source file path for relative link resolution', '')
|
|
11
|
+
.option('-f, --format <format>', 'Output format (position|json)', 'position')
|
|
12
|
+
.action(async (linkpath, options) => {
|
|
13
|
+
await (0, vault_resolve_js_1.withVault)((vault) => {
|
|
14
|
+
const result = vault.resolveLinkToPosition(linkpath, options.source ?? '');
|
|
15
|
+
if (!result) {
|
|
16
|
+
throw new Error('Link not found');
|
|
17
|
+
}
|
|
18
|
+
if (options.format === 'json') {
|
|
19
|
+
console.log(JSON.stringify(result, null, 2));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(`${result.path}:${result.line}:${result.col}`);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
return command;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":";;AAGA,8CAqBC;AAxBD,yCAAoC;AACpC,gEAAsD;AAEtD,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;SAChC,WAAW,CAAC,6EAA6E,CAAC;SAC1F,QAAQ,CAAC,YAAY,EAAE,+DAA+D,CAAC;SACvF,MAAM,CAAC,qBAAqB,EAAE,+CAA+C,EAAE,EAAE,CAAC;SAClF,MAAM,CAAC,uBAAuB,EAAE,+BAA+B,EAAE,UAAU,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAClC,MAAM,IAAA,4BAAS,EAAC,CAAC,KAAK,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orphans.d.ts","sourceRoot":"","sources":["../../src/commands/orphans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"orphans.d.ts","sourceRoot":"","sources":["../../src/commands/orphans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,oBAAoB,IAAI,OAAO,CA+B9C"}
|
package/dist/commands/orphans.js
CHANGED
|
@@ -2,31 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createOrphansCommand = createOrphansCommand;
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
|
-
const
|
|
6
|
-
const vault_js_1 = require("../utils/vault.js");
|
|
5
|
+
const vault_resolve_js_1 = require("../utils/vault-resolve.js");
|
|
7
6
|
function createOrphansCommand() {
|
|
8
7
|
const command = new commander_1.Command('orphans')
|
|
9
8
|
.description('Find notes with no links (orphans)')
|
|
10
9
|
.option('-f, --format <format>', 'Output format (json|text)', 'text')
|
|
11
|
-
.action((options) => {
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
if (!vaultPath) {
|
|
15
|
-
console.error('❌ Not in a SecondBrain vault. Run `sb init` first.');
|
|
16
|
-
process.exit(1);
|
|
17
|
-
}
|
|
18
|
-
const configManager = new config_js_1.ConfigManager(vaultPath);
|
|
19
|
-
const config = configManager.getConfig();
|
|
20
|
-
const vault = new vault_js_1.VaultManager(config);
|
|
21
|
-
const orphans = vault.getOrphans();
|
|
10
|
+
.action(async (options) => {
|
|
11
|
+
await (0, vault_resolve_js_1.withVault)((vault) => {
|
|
12
|
+
const orphans = vault.getOrphanFiles();
|
|
22
13
|
if (options.format === 'json') {
|
|
23
14
|
console.log(JSON.stringify({
|
|
24
15
|
count: orphans.length,
|
|
25
16
|
orphans: orphans.map(o => ({
|
|
26
|
-
id: o.id,
|
|
27
|
-
title: o.title,
|
|
28
17
|
path: o.path,
|
|
29
|
-
|
|
18
|
+
basename: o.basename
|
|
30
19
|
}))
|
|
31
20
|
}, null, 2));
|
|
32
21
|
}
|
|
@@ -36,21 +25,14 @@ function createOrphansCommand() {
|
|
|
36
25
|
}
|
|
37
26
|
else {
|
|
38
27
|
console.log(`⚠️ Found ${orphans.length} orphan note(s):\n`);
|
|
39
|
-
orphans.forEach((
|
|
40
|
-
console.log(`${i + 1}. ${
|
|
41
|
-
console.log(` Path: ${
|
|
42
|
-
console.log(` ID: ${note.id}`);
|
|
43
|
-
console.log(` Tags: ${note.tags.join(', ') || 'none'}`);
|
|
28
|
+
orphans.forEach((file, i) => {
|
|
29
|
+
console.log(`${i + 1}. ${file.basename}`);
|
|
30
|
+
console.log(` Path: ${file.path}`);
|
|
44
31
|
console.log();
|
|
45
32
|
});
|
|
46
33
|
}
|
|
47
34
|
}
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
console.error('❌ Failed to get orphans:', error instanceof Error ? error.message : String(error));
|
|
52
|
-
process.exit(1);
|
|
53
|
-
}
|
|
35
|
+
});
|
|
54
36
|
});
|
|
55
37
|
return command;
|
|
56
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orphans.js","sourceRoot":"","sources":["../../src/commands/orphans.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"orphans.js","sourceRoot":"","sources":["../../src/commands/orphans.ts"],"names":[],"mappings":";;AAGA,oDA+BC;AAlCD,yCAAoC;AACpC,gEAAsD;AAEtD,SAAgB,oBAAoB;IAClC,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,SAAS,CAAC;SACnC,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,IAAA,4BAAS,EAAC,CAAC,KAAK,EAAE,EAAE;YACxB,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;YACvC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,KAAK,EAAE,OAAO,CAAC,MAAM;oBACrB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACzB,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;qBACrB,CAAC,CAAC;iBACJ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAC;oBAC7D,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;wBAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;wBACrC,OAAO,CAAC,GAAG,EAAE,CAAC;oBAChB,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outlinks.d.ts","sourceRoot":"","sources":["../../src/commands/outlinks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,qBAAqB,IAAI,OAAO,CA0C/C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createOutlinksCommand = createOutlinksCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const vault_resolve_js_1 = require("../utils/vault-resolve.js");
|
|
6
|
+
function createOutlinksCommand() {
|
|
7
|
+
const command = new commander_1.Command('outlinks')
|
|
8
|
+
.description('Get outgoing links from a note (files this note links to)')
|
|
9
|
+
.argument('<path-or-id>', 'File path or basename')
|
|
10
|
+
.option('-f, --format <format>', 'Output format (json|text)', 'json')
|
|
11
|
+
.action(async (pathOrId, options) => {
|
|
12
|
+
await (0, vault_resolve_js_1.withVault)((vault) => {
|
|
13
|
+
const file = vault.resolvePathOrBasename(pathOrId);
|
|
14
|
+
const resolvedPath = file?.path ?? null;
|
|
15
|
+
if (!resolvedPath) {
|
|
16
|
+
throw new Error('Note not found');
|
|
17
|
+
}
|
|
18
|
+
const outlinks = vault.getOutlinksByPath(resolvedPath);
|
|
19
|
+
const title = file?.basename ?? resolvedPath.replace(/\.md$/, '');
|
|
20
|
+
if (options.format === 'json') {
|
|
21
|
+
console.log(JSON.stringify({
|
|
22
|
+
path: resolvedPath,
|
|
23
|
+
title,
|
|
24
|
+
outlinkCount: outlinks.length,
|
|
25
|
+
outlinks: outlinks.map(o => ({
|
|
26
|
+
path: o.path,
|
|
27
|
+
basename: o.basename
|
|
28
|
+
}))
|
|
29
|
+
}, null, 2));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.log(`Outlinks from "${title}":\n`);
|
|
33
|
+
if (outlinks.length === 0) {
|
|
34
|
+
console.log('No outlinks found');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
outlinks.forEach((o, i) => {
|
|
38
|
+
console.log(`${i + 1}. ${o.basename}`);
|
|
39
|
+
console.log(` Path: ${o.path}`);
|
|
40
|
+
console.log();
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
return command;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=outlinks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outlinks.js","sourceRoot":"","sources":["../../src/commands/outlinks.ts"],"names":[],"mappings":";;AAGA,sDA0CC;AA7CD,yCAAoC;AACpC,gEAAsD;AAEtD,SAAgB,qBAAqB;IACnC,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,UAAU,CAAC;SACpC,WAAW,CAAC,2DAA2D,CAAC;SACxE,QAAQ,CAAC,cAAc,EAAE,uBAAuB,CAAC;SACjD,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAClC,MAAM,IAAA,4BAAS,EAAC,CAAC,KAAK,EAAE,EAAE;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;YACxC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACpC,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,EAAE,QAAQ,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAElE,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,IAAI,EAAE,YAAY;oBAClB,KAAK;oBACL,YAAY,EAAE,QAAQ,CAAC,MAAM;oBAC7B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;qBACrB,CAAC,CAAC;iBACJ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAC,CAAC;gBAC3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;wBACxB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;wBACvC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;wBAClC,OAAO,CAAC,GAAG,EAAE,CAAC;oBAChB,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/** Parse --modified-after / --modified-before value to unix ms. ISO 8601 or digits (ms). */
|
|
3
|
+
export declare function parseDateOption(value: string | undefined): number | undefined;
|
|
2
4
|
export declare function createSearchCommand(): Command;
|
|
3
5
|
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAS7E;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAkE7C"}
|
package/dist/commands/search.js
CHANGED
|
@@ -1,63 +1,81 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDateOption = parseDateOption;
|
|
3
4
|
exports.createSearchCommand = createSearchCommand;
|
|
4
5
|
const commander_1 = require("commander");
|
|
5
|
-
const
|
|
6
|
-
|
|
6
|
+
const vault_resolve_js_1 = require("../utils/vault-resolve.js");
|
|
7
|
+
/** Parse --modified-after / --modified-before value to unix ms. ISO 8601 or digits (ms). */
|
|
8
|
+
function parseDateOption(value) {
|
|
9
|
+
if (value === undefined || value === '')
|
|
10
|
+
return undefined;
|
|
11
|
+
const s = String(value).trim();
|
|
12
|
+
if (/^\d+$/.test(s)) {
|
|
13
|
+
const n = parseInt(s, 10);
|
|
14
|
+
return Number.isFinite(n) ? n : undefined;
|
|
15
|
+
}
|
|
16
|
+
const ms = Date.parse(s);
|
|
17
|
+
return Number.isFinite(ms) ? ms : undefined;
|
|
18
|
+
}
|
|
7
19
|
function createSearchCommand() {
|
|
8
20
|
const command = new commander_1.Command('search')
|
|
9
|
-
.description('Search notes')
|
|
10
|
-
.argument('
|
|
21
|
+
.description('Search notes by path/basename and tags')
|
|
22
|
+
.argument('[query]', 'Search query (path/basename); omit for tag-only or path-only search', '')
|
|
11
23
|
.option('-t, --tags <tags>', 'Filter by tags (comma-separated)')
|
|
24
|
+
.option('-p, --path <pathPrefix>', 'Restrict to files under this path prefix (e.g. Daily/ or Projects)')
|
|
12
25
|
.option('-l, --limit <limit>', 'Maximum results', '20')
|
|
26
|
+
.option('--links-to <path>', 'Only files that link to this path or basename')
|
|
27
|
+
.option('--heading <text>', 'Only files that contain a heading matching this text')
|
|
28
|
+
.option('--modified-after <date>', 'Only files modified after date (ISO 8601 or unix ms)')
|
|
29
|
+
.option('--modified-before <date>', 'Only files modified before date (ISO 8601 or unix ms)')
|
|
13
30
|
.option('-f, --format <format>', 'Output format (json|text)', 'json')
|
|
14
|
-
.action((query, options) => {
|
|
15
|
-
|
|
16
|
-
const vaultPath = config_js_1.ConfigManager.findVaultPath();
|
|
17
|
-
if (!vaultPath) {
|
|
18
|
-
console.error('❌ Not in a SecondBrain vault. Run `sb init` first.');
|
|
19
|
-
process.exit(1);
|
|
20
|
-
}
|
|
21
|
-
const configManager = new config_js_1.ConfigManager(vaultPath);
|
|
22
|
-
const config = configManager.getConfig();
|
|
23
|
-
const vault = new vault_js_1.VaultManager(config);
|
|
31
|
+
.action(async (query, options) => {
|
|
32
|
+
await (0, vault_resolve_js_1.withVault)((vault) => {
|
|
24
33
|
const tags = options.tags ? options.tags.split(',').map((t) => t.trim()) : undefined;
|
|
25
34
|
const limit = parseInt(options.limit);
|
|
26
|
-
const
|
|
35
|
+
const pathPrefix = options.path?.trim() || undefined;
|
|
36
|
+
const headingQuery = options.heading?.trim() || undefined;
|
|
37
|
+
const modifiedAfter = parseDateOption(options.modifiedAfter);
|
|
38
|
+
const modifiedBefore = parseDateOption(options.modifiedBefore);
|
|
39
|
+
let linksToPath;
|
|
40
|
+
if (options.linksTo?.trim()) {
|
|
41
|
+
const file = vault.resolvePathOrBasename(options.linksTo.trim());
|
|
42
|
+
linksToPath = file?.path ?? undefined;
|
|
43
|
+
if (!linksToPath) {
|
|
44
|
+
throw new Error(`Note not found for --links-to: ${options.linksTo.trim()}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const results = vault.searchFiles(query ?? '', tags, limit, pathPrefix, linksToPath, headingQuery, modifiedAfter, modifiedBefore);
|
|
27
48
|
if (options.format === 'json') {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
excerpt: note.content.substring(0, 200) + (note.content.length > 200 ? '...' : ''),
|
|
33
|
-
tags: note.tags,
|
|
34
|
-
linksCount: note.links.length,
|
|
35
|
-
backlinksCount: note.backlinks.length
|
|
49
|
+
const output = results.map(({ file, tags: fileTags }) => ({
|
|
50
|
+
path: file.path,
|
|
51
|
+
basename: file.basename,
|
|
52
|
+
tags: fileTags
|
|
36
53
|
}));
|
|
37
54
|
console.log(JSON.stringify({
|
|
38
|
-
query,
|
|
39
|
-
filters: {
|
|
40
|
-
|
|
41
|
-
|
|
55
|
+
query: query ?? '',
|
|
56
|
+
filters: {
|
|
57
|
+
tags,
|
|
58
|
+
limit,
|
|
59
|
+
path: pathPrefix,
|
|
60
|
+
linksTo: linksToPath,
|
|
61
|
+
heading: headingQuery,
|
|
62
|
+
modifiedAfter: modifiedAfter ?? undefined,
|
|
63
|
+
modifiedBefore: modifiedBefore ?? undefined
|
|
64
|
+
},
|
|
65
|
+
results: output,
|
|
66
|
+
total: output.length
|
|
42
67
|
}, null, 2));
|
|
43
68
|
}
|
|
44
69
|
else {
|
|
45
|
-
// Text format
|
|
46
70
|
console.log(`Search results for "${query}":\n`);
|
|
47
|
-
|
|
48
|
-
console.log(`${i + 1}. ${
|
|
49
|
-
console.log(` Path: ${
|
|
50
|
-
console.log(` Tags: ${
|
|
51
|
-
console.log(` ID: ${note.id}`);
|
|
71
|
+
results.forEach(({ file, tags: fileTags }, i) => {
|
|
72
|
+
console.log(`${i + 1}. ${file.basename}`);
|
|
73
|
+
console.log(` Path: ${file.path}`);
|
|
74
|
+
console.log(` Tags: ${fileTags.join(', ') || 'none'}`);
|
|
52
75
|
console.log();
|
|
53
76
|
});
|
|
54
77
|
}
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
console.error('❌ Search failed:', error instanceof Error ? error.message : String(error));
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
78
|
+
});
|
|
61
79
|
});
|
|
62
80
|
return command;
|
|
63
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,kBAAkB,IAAI,OAAO,CAuB5C"}
|
package/dist/commands/stats.js
CHANGED
|
@@ -2,22 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createStatsCommand = createStatsCommand;
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
|
-
const
|
|
6
|
-
const vault_js_1 = require("../utils/vault.js");
|
|
5
|
+
const vault_resolve_js_1 = require("../utils/vault-resolve.js");
|
|
7
6
|
function createStatsCommand() {
|
|
8
7
|
const command = new commander_1.Command('stats')
|
|
9
8
|
.description('Show vault statistics')
|
|
10
9
|
.option('-f, --format <format>', 'Output format (json|text)', 'text')
|
|
11
|
-
.action((options) => {
|
|
12
|
-
|
|
13
|
-
const vaultPath = config_js_1.ConfigManager.findVaultPath();
|
|
14
|
-
if (!vaultPath) {
|
|
15
|
-
console.error('❌ Not in a SecondBrain vault. Run `sb init` first.');
|
|
16
|
-
process.exit(1);
|
|
17
|
-
}
|
|
18
|
-
const configManager = new config_js_1.ConfigManager(vaultPath);
|
|
19
|
-
const config = configManager.getConfig();
|
|
20
|
-
const vault = new vault_js_1.VaultManager(config);
|
|
10
|
+
.action(async (options) => {
|
|
11
|
+
await (0, vault_resolve_js_1.withVault)((vault) => {
|
|
21
12
|
const stats = vault.getStats();
|
|
22
13
|
if (options.format === 'json') {
|
|
23
14
|
console.log(JSON.stringify(stats, null, 2));
|
|
@@ -32,12 +23,7 @@ function createStatsCommand() {
|
|
|
32
23
|
console.log('⚠️ Run `sb orphans` to see disconnected notes');
|
|
33
24
|
}
|
|
34
25
|
}
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
console.error('❌ Failed to get stats:', error instanceof Error ? error.message : String(error));
|
|
39
|
-
process.exit(1);
|
|
40
|
-
}
|
|
26
|
+
});
|
|
41
27
|
});
|
|
42
28
|
return command;
|
|
43
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":";;AAGA,gDAuBC;AA1BD,yCAAoC;AACpC,gEAAsD;AAEtD,SAAgB,kBAAkB;IAChC,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC;SACjC,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,IAAA,4BAAS,EAAC,CAAC,KAAK,EAAE,EAAE;YACxB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC5C,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,iBAAiB,IAAI,OAAO,CAqB3C"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -2,21 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createSyncCommand = createSyncCommand;
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
|
-
const
|
|
6
|
-
const vault_js_1 = require("../utils/vault.js");
|
|
5
|
+
const vault_resolve_js_1 = require("../utils/vault-resolve.js");
|
|
7
6
|
function createSyncCommand() {
|
|
8
7
|
const command = new commander_1.Command('sync')
|
|
9
8
|
.description('Sync vault with database index')
|
|
10
9
|
.action(async () => {
|
|
11
|
-
|
|
12
|
-
const vaultPath = config_js_1.ConfigManager.findVaultPath();
|
|
13
|
-
if (!vaultPath) {
|
|
14
|
-
console.error('❌ Not in a SecondBrain vault. Run `sb init` first.');
|
|
15
|
-
process.exit(1);
|
|
16
|
-
}
|
|
17
|
-
const configManager = new config_js_1.ConfigManager(vaultPath);
|
|
18
|
-
const config = configManager.getConfig();
|
|
19
|
-
const vault = new vault_js_1.VaultManager(config);
|
|
10
|
+
await (0, vault_resolve_js_1.withVault)(async (vault) => {
|
|
20
11
|
console.log('🔄 Syncing vault...');
|
|
21
12
|
const result = await vault.sync();
|
|
22
13
|
console.log('✅ Sync complete!');
|
|
@@ -29,12 +20,7 @@ function createSyncCommand() {
|
|
|
29
20
|
console.log(`Total notes: ${stats.totalNotes}`);
|
|
30
21
|
console.log(`Total links: ${stats.totalLinks}`);
|
|
31
22
|
console.log(`Orphan notes: ${stats.orphans}`);
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
console.error('❌ Sync failed:', error instanceof Error ? error.message : String(error));
|
|
36
|
-
process.exit(1);
|
|
37
|
-
}
|
|
23
|
+
});
|
|
38
24
|
});
|
|
39
25
|
return command;
|
|
40
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";;AAGA,8CAqBC;AAxBD,yCAAoC;AACpC,gEAAsD;AAEtD,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;SAChC,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,IAAA,4BAAS,EAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,IAAI,OAAO,CA4D/C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTemplateCommand = createTemplateCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const vault_resolve_js_1 = require("../utils/vault-resolve.js");
|
|
6
|
+
const config_js_1 = require("../utils/config.js");
|
|
7
|
+
const template_js_1 = require("../utils/template.js");
|
|
8
|
+
function createTemplateCommand() {
|
|
9
|
+
const command = new commander_1.Command('template')
|
|
10
|
+
.description('Manage note templates and their configurations');
|
|
11
|
+
command
|
|
12
|
+
.command('list')
|
|
13
|
+
.description('List all available templates')
|
|
14
|
+
.action(async () => {
|
|
15
|
+
await (0, vault_resolve_js_1.withVault)(async (vault) => {
|
|
16
|
+
const templateManager = new template_js_1.TemplateManager(vault.config);
|
|
17
|
+
const templates = templateManager.listTemplates();
|
|
18
|
+
if (templates.length === 0) {
|
|
19
|
+
console.log('No templates found.');
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log('Available templates:');
|
|
23
|
+
templates.forEach(t => console.log(`- ${t}`));
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
command
|
|
28
|
+
.command('get')
|
|
29
|
+
.description('Get configuration for a template')
|
|
30
|
+
.argument('<name>', 'Template name')
|
|
31
|
+
.action(async (name) => {
|
|
32
|
+
await (0, vault_resolve_js_1.withVault)(async (vault) => {
|
|
33
|
+
const configManager = new config_js_1.ConfigManager(vault.config.vaultPath);
|
|
34
|
+
const templateConfig = configManager.getTemplateConfig(name);
|
|
35
|
+
if (!templateConfig) {
|
|
36
|
+
console.log(`No configuration found for template: ${name}`);
|
|
37
|
+
console.log('{}');
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(JSON.stringify(templateConfig, null, 2));
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
command
|
|
45
|
+
.command('set')
|
|
46
|
+
.description('Set configuration for a template')
|
|
47
|
+
.argument('<name>', 'Template name')
|
|
48
|
+
.option('--folder <path>', 'Default folder for new notes created with this template')
|
|
49
|
+
.action(async (name, options) => {
|
|
50
|
+
await (0, vault_resolve_js_1.withVault)(async (vault) => {
|
|
51
|
+
const configManager = new config_js_1.ConfigManager(vault.config.vaultPath);
|
|
52
|
+
const existing = configManager.getTemplateConfig(name) || {};
|
|
53
|
+
if (options.folder !== undefined) {
|
|
54
|
+
existing.targetFolder = options.folder;
|
|
55
|
+
}
|
|
56
|
+
configManager.setTemplateConfig(name, existing);
|
|
57
|
+
console.log(`✅ Configuration updated for template: ${name}`);
|
|
58
|
+
console.log(JSON.stringify(existing, null, 2));
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
return command;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/commands/vault.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,wBAAgB,kBAAkB,IAAI,OAAO,CAmM5C"}
|