@alpacali/papyrus-cli 1.0.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/LICENSE +21 -0
- package/README.md +188 -0
- package/dist/api.d.ts +67 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +247 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +391 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/cards.d.ts +52 -0
- package/dist/commands/cards.d.ts.map +1 -0
- package/dist/commands/cards.js +189 -0
- package/dist/commands/cards.js.map +1 -0
- package/dist/commands/data.d.ts +34 -0
- package/dist/commands/data.d.ts.map +1 -0
- package/dist/commands/data.js +230 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/commands/review.d.ts +16 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +132 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/serve.d.ts +24 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +161 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/config.d.ts +37 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +94 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +114 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +52 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +141 -0
- package/dist/utils.js.map +1 -0
- package/package.json +62 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Papyrus CLI - Configuration Management
|
|
3
|
+
*/
|
|
4
|
+
import type { CLIConfig } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Load CLI configuration
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadConfig(): CLIConfig;
|
|
9
|
+
/**
|
|
10
|
+
* Save CLI configuration
|
|
11
|
+
*/
|
|
12
|
+
export declare function saveConfig(config: CLIConfig): void;
|
|
13
|
+
/**
|
|
14
|
+
* Get configuration value
|
|
15
|
+
*/
|
|
16
|
+
export declare function getConfig<K extends keyof CLIConfig>(key: K): CLIConfig[K];
|
|
17
|
+
/**
|
|
18
|
+
* Set configuration value
|
|
19
|
+
*/
|
|
20
|
+
export declare function setConfig<K extends keyof CLIConfig>(key: K, value: CLIConfig[K]): void;
|
|
21
|
+
/**
|
|
22
|
+
* Reset configuration to defaults
|
|
23
|
+
*/
|
|
24
|
+
export declare function resetConfig(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Get data directory path
|
|
27
|
+
*/
|
|
28
|
+
export declare function getDataDir(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Get API URL
|
|
31
|
+
*/
|
|
32
|
+
export declare function getApiUrl(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Display current configuration
|
|
35
|
+
*/
|
|
36
|
+
export declare function displayConfig(): void;
|
|
37
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAmB5C;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAetC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAGzE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAItF;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Papyrus CLI - Configuration Management
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
5
|
+
import { homedir } from "os";
|
|
6
|
+
import { join } from "path";
|
|
7
|
+
const CONFIG_DIR = join(homedir(), ".papyrus");
|
|
8
|
+
const CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
9
|
+
const DEFAULT_CONFIG = {
|
|
10
|
+
apiUrl: "http://127.0.0.1:8000",
|
|
11
|
+
dataDir: join(homedir(), "Documents", "Papyrus"),
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Ensure config directory exists
|
|
15
|
+
*/
|
|
16
|
+
function ensureConfigDir() {
|
|
17
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
18
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Load CLI configuration
|
|
23
|
+
*/
|
|
24
|
+
export function loadConfig() {
|
|
25
|
+
ensureConfigDir();
|
|
26
|
+
if (!existsSync(CONFIG_FILE)) {
|
|
27
|
+
saveConfig(DEFAULT_CONFIG);
|
|
28
|
+
return { ...DEFAULT_CONFIG };
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const data = readFileSync(CONFIG_FILE, "utf-8");
|
|
32
|
+
const config = JSON.parse(data);
|
|
33
|
+
return { ...DEFAULT_CONFIG, ...config };
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return { ...DEFAULT_CONFIG };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Save CLI configuration
|
|
41
|
+
*/
|
|
42
|
+
export function saveConfig(config) {
|
|
43
|
+
ensureConfigDir();
|
|
44
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), "utf-8");
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get configuration value
|
|
48
|
+
*/
|
|
49
|
+
export function getConfig(key) {
|
|
50
|
+
const config = loadConfig();
|
|
51
|
+
return config[key];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Set configuration value
|
|
55
|
+
*/
|
|
56
|
+
export function setConfig(key, value) {
|
|
57
|
+
const config = loadConfig();
|
|
58
|
+
config[key] = value;
|
|
59
|
+
saveConfig(config);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Reset configuration to defaults
|
|
63
|
+
*/
|
|
64
|
+
export function resetConfig() {
|
|
65
|
+
saveConfig(DEFAULT_CONFIG);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get data directory path
|
|
69
|
+
*/
|
|
70
|
+
export function getDataDir() {
|
|
71
|
+
const config = loadConfig();
|
|
72
|
+
if (!existsSync(config.dataDir)) {
|
|
73
|
+
mkdirSync(config.dataDir, { recursive: true });
|
|
74
|
+
}
|
|
75
|
+
return config.dataDir;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get API URL
|
|
79
|
+
*/
|
|
80
|
+
export function getApiUrl() {
|
|
81
|
+
const config = loadConfig();
|
|
82
|
+
return config.apiUrl;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Display current configuration
|
|
86
|
+
*/
|
|
87
|
+
export function displayConfig() {
|
|
88
|
+
const config = loadConfig();
|
|
89
|
+
console.log("Current Configuration:");
|
|
90
|
+
console.log(` API URL: ${config.apiUrl}`);
|
|
91
|
+
console.log(` Data Directory: ${config.dataDir}`);
|
|
92
|
+
console.log(` Config File: ${CONFIG_FILE}`);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Papyrus CLI - Library Exports
|
|
3
|
+
*
|
|
4
|
+
* This file exports the API client and types for programmatic use.
|
|
5
|
+
*/
|
|
6
|
+
export { healthCheck, isApiAvailable, listCards, getCard, createCard, updateCard, deleteCard, importCards, getReviewQueue, getReviewStats, submitReview, searchCards, exportData, importData, createBackup, } from "./api.js";
|
|
7
|
+
export { loadConfig, saveConfig, getConfig, setConfig, resetConfig, getDataDir, getApiUrl, displayConfig, } from "./config.js";
|
|
8
|
+
export type { Card, CreateCardInput, UpdateCardInput, CardsListResponse, CardResponse, DeleteResponse, ImportResponse, ReviewQueueItem, ReviewStats, ReviewStatsResponse, ReviewSubmission, ReviewSubmitResponse, HealthResponse, CLIConfig, BackupInfo, SearchResult, SearchResponse, Note, APIError, } from "./types.js";
|
|
9
|
+
export { formatDate, formatRelativeTime, truncate, readFileSafe, isReadableFile, parseTags, formatFileSize, isValidCardId, escapeRegex, sleep, prompt, confirm, } from "./utils.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAU,EACV,SAAS,EACT,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,IAAI,EACJ,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,EACd,IAAI,EACJ,QAAQ,GACT,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,WAAW,EACX,KAAK,EACL,MAAM,EACN,OAAO,GACR,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Papyrus CLI - Library Exports
|
|
3
|
+
*
|
|
4
|
+
* This file exports the API client and types for programmatic use.
|
|
5
|
+
*/
|
|
6
|
+
// API Client
|
|
7
|
+
export { healthCheck, isApiAvailable, listCards, getCard, createCard, updateCard, deleteCard, importCards, getReviewQueue, getReviewStats, submitReview, searchCards, exportData, importData, createBackup, } from "./api.js";
|
|
8
|
+
// Configuration
|
|
9
|
+
export { loadConfig, saveConfig, getConfig, setConfig, resetConfig, getDataDir, getApiUrl, displayConfig, } from "./config.js";
|
|
10
|
+
// Utilities
|
|
11
|
+
export { formatDate, formatRelativeTime, truncate, readFileSafe, isReadableFile, parseTags, formatFileSize, isValidCardId, escapeRegex, sleep, prompt, confirm, } from "./utils.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,aAAa;AACb,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,UAAU,CAAC;AAElB,gBAAgB;AAChB,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAU,EACV,SAAS,EACT,aAAa,GACd,MAAM,aAAa,CAAC;AAyBrB,YAAY;AACZ,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,WAAW,EACX,KAAK,EACL,MAAM,EACN,OAAO,GACR,MAAM,YAAY,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Papyrus CLI - Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
/** Card data structure */
|
|
5
|
+
export interface Card {
|
|
6
|
+
id: string;
|
|
7
|
+
q: string;
|
|
8
|
+
a: string;
|
|
9
|
+
next_review: number;
|
|
10
|
+
interval: number;
|
|
11
|
+
ef: number;
|
|
12
|
+
repetitions: number;
|
|
13
|
+
tags: string[];
|
|
14
|
+
}
|
|
15
|
+
/** Card creation input */
|
|
16
|
+
export interface CreateCardInput {
|
|
17
|
+
q: string;
|
|
18
|
+
a: string;
|
|
19
|
+
tags?: string[];
|
|
20
|
+
}
|
|
21
|
+
/** Card update input */
|
|
22
|
+
export interface UpdateCardInput {
|
|
23
|
+
q?: string;
|
|
24
|
+
a?: string;
|
|
25
|
+
tags?: string[];
|
|
26
|
+
}
|
|
27
|
+
/** API response for card list */
|
|
28
|
+
export interface CardsListResponse {
|
|
29
|
+
success: boolean;
|
|
30
|
+
cards: Card[];
|
|
31
|
+
count: number;
|
|
32
|
+
}
|
|
33
|
+
/** API response for single card */
|
|
34
|
+
export interface CardResponse {
|
|
35
|
+
success: boolean;
|
|
36
|
+
card: Card;
|
|
37
|
+
}
|
|
38
|
+
/** API response for delete operation */
|
|
39
|
+
export interface DeleteResponse {
|
|
40
|
+
success: boolean;
|
|
41
|
+
}
|
|
42
|
+
/** API response for import operation */
|
|
43
|
+
export interface ImportResponse {
|
|
44
|
+
success: boolean;
|
|
45
|
+
count: number;
|
|
46
|
+
}
|
|
47
|
+
/** Review queue item */
|
|
48
|
+
export interface ReviewQueueItem {
|
|
49
|
+
card: Card;
|
|
50
|
+
index: number;
|
|
51
|
+
}
|
|
52
|
+
/** Review stats */
|
|
53
|
+
export interface ReviewStats {
|
|
54
|
+
total_cards: number;
|
|
55
|
+
due_today: number;
|
|
56
|
+
new_cards: number;
|
|
57
|
+
review_cards: number;
|
|
58
|
+
}
|
|
59
|
+
/** API response for review stats */
|
|
60
|
+
export interface ReviewStatsResponse {
|
|
61
|
+
success: boolean;
|
|
62
|
+
stats: ReviewStats;
|
|
63
|
+
}
|
|
64
|
+
/** Review submission */
|
|
65
|
+
export interface ReviewSubmission {
|
|
66
|
+
quality: number;
|
|
67
|
+
}
|
|
68
|
+
/** API response for review submit */
|
|
69
|
+
export interface ReviewSubmitResponse {
|
|
70
|
+
success: boolean;
|
|
71
|
+
message: string;
|
|
72
|
+
}
|
|
73
|
+
/** Health check response */
|
|
74
|
+
export interface HealthResponse {
|
|
75
|
+
status: string;
|
|
76
|
+
}
|
|
77
|
+
/** CLI Configuration */
|
|
78
|
+
export interface CLIConfig {
|
|
79
|
+
apiUrl: string;
|
|
80
|
+
dataDir: string;
|
|
81
|
+
defaultEditor?: string;
|
|
82
|
+
}
|
|
83
|
+
/** Backup info */
|
|
84
|
+
export interface BackupInfo {
|
|
85
|
+
path: string;
|
|
86
|
+
size: number;
|
|
87
|
+
created: Date;
|
|
88
|
+
}
|
|
89
|
+
/** Search result */
|
|
90
|
+
export interface SearchResult {
|
|
91
|
+
card: Card;
|
|
92
|
+
score: number;
|
|
93
|
+
}
|
|
94
|
+
/** Search response */
|
|
95
|
+
export interface SearchResponse {
|
|
96
|
+
success: boolean;
|
|
97
|
+
results: SearchResult[];
|
|
98
|
+
count: number;
|
|
99
|
+
}
|
|
100
|
+
/** Note data */
|
|
101
|
+
export interface Note {
|
|
102
|
+
id: string;
|
|
103
|
+
title: string;
|
|
104
|
+
content: string;
|
|
105
|
+
created_at: string;
|
|
106
|
+
updated_at: string;
|
|
107
|
+
tags: string[];
|
|
108
|
+
}
|
|
109
|
+
/** API Error response */
|
|
110
|
+
export interface APIError {
|
|
111
|
+
detail?: string;
|
|
112
|
+
message?: string;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Papyrus CLI - Utility Functions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Format date for display
|
|
6
|
+
*/
|
|
7
|
+
export declare function formatDate(timestamp: number): string;
|
|
8
|
+
/**
|
|
9
|
+
* Format relative time (e.g., "2 hours ago")
|
|
10
|
+
*/
|
|
11
|
+
export declare function formatRelativeTime(timestamp: number): string;
|
|
12
|
+
/**
|
|
13
|
+
* Truncate text to a maximum length
|
|
14
|
+
*/
|
|
15
|
+
export declare function truncate(text: string, maxLength: number): string;
|
|
16
|
+
/**
|
|
17
|
+
* Read file content safely
|
|
18
|
+
*/
|
|
19
|
+
export declare function readFileSafe(path: string): string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Check if file exists and is readable
|
|
22
|
+
*/
|
|
23
|
+
export declare function isReadableFile(path: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Parse tags from comma-separated string
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseTags(tagsStr: string | undefined): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Format file size
|
|
30
|
+
*/
|
|
31
|
+
export declare function formatFileSize(bytes: number): string;
|
|
32
|
+
/**
|
|
33
|
+
* Validate card ID format
|
|
34
|
+
*/
|
|
35
|
+
export declare function isValidCardId(id: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Escape special regex characters
|
|
38
|
+
*/
|
|
39
|
+
export declare function escapeRegex(str: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Sleep for a given duration
|
|
42
|
+
*/
|
|
43
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Prompt for user input (basic implementation)
|
|
46
|
+
*/
|
|
47
|
+
export declare function prompt(question: string): Promise<string>;
|
|
48
|
+
/**
|
|
49
|
+
* Confirm action with user
|
|
50
|
+
*/
|
|
51
|
+
export declare function confirm(question: string): Promise<boolean>;
|
|
52
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkB5D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CASpD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAM/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9D;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhE"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Papyrus CLI - Utility Functions
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync, readFileSync, statSync } from "fs";
|
|
5
|
+
import { resolve } from "path";
|
|
6
|
+
/**
|
|
7
|
+
* Format date for display
|
|
8
|
+
*/
|
|
9
|
+
export function formatDate(timestamp) {
|
|
10
|
+
return new Date(timestamp * 1000).toLocaleString();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Format relative time (e.g., "2 hours ago")
|
|
14
|
+
*/
|
|
15
|
+
export function formatRelativeTime(timestamp) {
|
|
16
|
+
const now = Date.now() / 1000;
|
|
17
|
+
const diff = timestamp - now;
|
|
18
|
+
if (diff < 0) {
|
|
19
|
+
const absDiff = Math.abs(diff);
|
|
20
|
+
if (absDiff < 60)
|
|
21
|
+
return "just now";
|
|
22
|
+
if (absDiff < 3600)
|
|
23
|
+
return `${Math.floor(absDiff / 60)} minutes ago`;
|
|
24
|
+
if (absDiff < 86400)
|
|
25
|
+
return `${Math.floor(absDiff / 3600)} hours ago`;
|
|
26
|
+
if (absDiff < 604800)
|
|
27
|
+
return `${Math.floor(absDiff / 86400)} days ago`;
|
|
28
|
+
return formatDate(timestamp);
|
|
29
|
+
}
|
|
30
|
+
if (diff < 60)
|
|
31
|
+
return "in a few seconds";
|
|
32
|
+
if (diff < 3600)
|
|
33
|
+
return `in ${Math.floor(diff / 60)} minutes`;
|
|
34
|
+
if (diff < 86400)
|
|
35
|
+
return `in ${Math.floor(diff / 3600)} hours`;
|
|
36
|
+
if (diff < 604800)
|
|
37
|
+
return `in ${Math.floor(diff / 86400)} days`;
|
|
38
|
+
return formatDate(timestamp);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Truncate text to a maximum length
|
|
42
|
+
*/
|
|
43
|
+
export function truncate(text, maxLength) {
|
|
44
|
+
if (text.length <= maxLength)
|
|
45
|
+
return text;
|
|
46
|
+
return text.substring(0, maxLength - 3) + "...";
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Read file content safely
|
|
50
|
+
*/
|
|
51
|
+
export function readFileSafe(path) {
|
|
52
|
+
try {
|
|
53
|
+
const resolved = resolve(path);
|
|
54
|
+
if (!existsSync(resolved))
|
|
55
|
+
return null;
|
|
56
|
+
return readFileSync(resolved, "utf-8");
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if file exists and is readable
|
|
64
|
+
*/
|
|
65
|
+
export function isReadableFile(path) {
|
|
66
|
+
try {
|
|
67
|
+
const resolved = resolve(path);
|
|
68
|
+
if (!existsSync(resolved))
|
|
69
|
+
return false;
|
|
70
|
+
const stats = statSync(resolved);
|
|
71
|
+
return stats.isFile();
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Parse tags from comma-separated string
|
|
79
|
+
*/
|
|
80
|
+
export function parseTags(tagsStr) {
|
|
81
|
+
if (!tagsStr)
|
|
82
|
+
return [];
|
|
83
|
+
return tagsStr
|
|
84
|
+
.split(",")
|
|
85
|
+
.map(t => t.trim())
|
|
86
|
+
.filter(t => t.length > 0);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Format file size
|
|
90
|
+
*/
|
|
91
|
+
export function formatFileSize(bytes) {
|
|
92
|
+
if (bytes < 1024)
|
|
93
|
+
return `${bytes} B`;
|
|
94
|
+
if (bytes < 1024 * 1024)
|
|
95
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
96
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
97
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
98
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Validate card ID format
|
|
102
|
+
*/
|
|
103
|
+
export function isValidCardId(id) {
|
|
104
|
+
return /^[a-zA-Z0-9_-]+$/.test(id);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Escape special regex characters
|
|
108
|
+
*/
|
|
109
|
+
export function escapeRegex(str) {
|
|
110
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Sleep for a given duration
|
|
114
|
+
*/
|
|
115
|
+
export function sleep(ms) {
|
|
116
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Prompt for user input (basic implementation)
|
|
120
|
+
*/
|
|
121
|
+
export async function prompt(question) {
|
|
122
|
+
const { createInterface } = await import("readline");
|
|
123
|
+
const rl = createInterface({
|
|
124
|
+
input: process.stdin,
|
|
125
|
+
output: process.stdout,
|
|
126
|
+
});
|
|
127
|
+
return new Promise(resolve => {
|
|
128
|
+
rl.question(question, answer => {
|
|
129
|
+
rl.close();
|
|
130
|
+
resolve(answer.trim());
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Confirm action with user
|
|
136
|
+
*/
|
|
137
|
+
export async function confirm(question) {
|
|
138
|
+
const answer = await prompt(`${question} (y/N): `);
|
|
139
|
+
return answer.toLowerCase() === "y" || answer.toLowerCase() === "yes";
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@alpacali/papyrus-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Papyrus CLI - Command line interface for Papyrus SRS learning system",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"papyrus": "dist/cli.js",
|
|
10
|
+
"papyrus-cli": "dist/cli.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist/**/*",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"dev": "tsc --watch",
|
|
20
|
+
"start": "node dist/cli.js",
|
|
21
|
+
"test": "jest",
|
|
22
|
+
"lint": "eslint src/**/*.ts",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"prepublishOnly": "npm run build"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"papyrus",
|
|
28
|
+
"srs",
|
|
29
|
+
"spaced-repetition",
|
|
30
|
+
"flashcards",
|
|
31
|
+
"learning",
|
|
32
|
+
"cli",
|
|
33
|
+
"study"
|
|
34
|
+
],
|
|
35
|
+
"author": "Papyrus Team",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/Papyrus/Papyrus-cli.git"
|
|
40
|
+
},
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/Papyrus/Papyrus-cli/issues"
|
|
43
|
+
},
|
|
44
|
+
"homepage": "https://github.com/Papyrus/Papyrus-cli#readme",
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=18.0.0"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"axios": "^1.7.9",
|
|
50
|
+
"chalk": "^5.4.1",
|
|
51
|
+
"commander": "^13.1.0",
|
|
52
|
+
"fs-extra": "^11.3.0",
|
|
53
|
+
"inquirer": "^12.5.0",
|
|
54
|
+
"ora": "^8.2.0"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@types/fs-extra": "^11.0.4",
|
|
58
|
+
"@types/inquirer": "^9.0.7",
|
|
59
|
+
"@types/node": "^22.14.0",
|
|
60
|
+
"typescript": "^5.8.3"
|
|
61
|
+
}
|
|
62
|
+
}
|