imdone-core 2.0.14 → 2.0.15
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/lib/config.js +4 -0
- package/lib/plugins/persist-tags-plugin.js +7 -1
- package/lib/task.js +66 -56
- package/package.json +5 -5
- package/types/adapters/file-gateway.d.ts +3 -3
- package/types/card.d.ts +1 -1
- package/types/config.d.ts +1 -0
- package/types/file.d.ts +1 -1
- package/types/plugins/persist-tags-plugin.d.ts +1 -0
- package/types/task.d.ts +10 -10
package/lib/config.js
CHANGED
|
@@ -12,7 +12,13 @@ export default class PersistTagsPlugin extends Plugin {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
async onBoardUpdate() {
|
|
15
|
+
if (!this.persistTags) {
|
|
16
|
+
return
|
|
17
|
+
}
|
|
15
18
|
await save(this.project.allTags.sort(), this.project.path)
|
|
16
19
|
}
|
|
17
|
-
|
|
20
|
+
|
|
21
|
+
get persistTags() {
|
|
22
|
+
return this.getSettings()?.persistTags ?? true
|
|
23
|
+
}
|
|
18
24
|
}
|
package/lib/task.js
CHANGED
|
@@ -339,59 +339,7 @@ export class Task {
|
|
|
339
339
|
return tags;
|
|
340
340
|
};
|
|
341
341
|
|
|
342
|
-
|
|
343
|
-
const positions = [];
|
|
344
|
-
const re = /\[([^\]]+)\]\([^\)]+\)/g;
|
|
345
|
-
let match;
|
|
346
|
-
|
|
347
|
-
while ((match = re.exec(text)) !== null) {
|
|
348
|
-
positions.push({ start: match.index, end: re.lastIndex });
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
return positions;
|
|
352
|
-
};
|
|
353
|
-
|
|
354
|
-
static isResultInMarkdownLinkLabel (linkLabelPositions, index) {
|
|
355
|
-
return linkLabelPositions.some(pos => index >= pos.start && index < pos.end);
|
|
356
|
-
};
|
|
357
|
-
|
|
358
|
-
static getCommentPositions (text) {
|
|
359
|
-
const positions = [];
|
|
360
|
-
const re = /<!--[\s\S]*?-->/g;
|
|
361
|
-
let match;
|
|
362
|
-
|
|
363
|
-
while ((match = re.exec(text)) !== null) {
|
|
364
|
-
positions.push({ start: match.index, end: re.lastIndex });
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
return positions;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
static isResultInComment (commentPositions, index) {
|
|
371
|
-
return commentPositions.some(pos => index >= pos.start && index < pos.end);
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
static ContextRegExp = new RegExp(
|
|
375
|
-
`(^|\\s)@([${Task.AnyLanguageGroup}${Task.EmojiGroup}]+)`,
|
|
376
|
-
'gmiu'
|
|
377
|
-
)
|
|
378
|
-
|
|
379
|
-
static getContext (text) {
|
|
380
|
-
const context = []
|
|
381
|
-
var codePositions = Task.getMarkdownCodePositions(text)
|
|
382
|
-
var result,
|
|
383
|
-
re = new RegExp(Task.ContextRegExp)
|
|
384
|
-
|
|
385
|
-
while ((result = re.exec(text)) !== null) {
|
|
386
|
-
if (Task.isResultInMarkdownCode(codePositions, result.index)) continue
|
|
387
|
-
const con = result[2]
|
|
388
|
-
if (!context.includes(con)) context.push(con)
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
return context
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
static MetaRegExp = new RegExp(
|
|
342
|
+
static MetaRegExp = new RegExp(
|
|
395
343
|
`(^|\\s)([a-zA-Z-_]+?):(?!\\/\\/)([${Task.AnyLanguageGroup}${Task.EmojiGroup}]+)`,
|
|
396
344
|
'gu'
|
|
397
345
|
)
|
|
@@ -413,8 +361,15 @@ export class Task {
|
|
|
413
361
|
}
|
|
414
362
|
|
|
415
363
|
static parseMetaData (config, content) {
|
|
364
|
+
const commentMetaOnly = config.getCommentMetaOnly()
|
|
365
|
+
const commentPositions = Task.getCommentPositions(content);
|
|
416
366
|
var meta = {}
|
|
417
367
|
Task.eachMetaInContent(config, content, (result) => {
|
|
368
|
+
if (
|
|
369
|
+
commentMetaOnly
|
|
370
|
+
&& !Task.isResultInComment(commentPositions, result.index)
|
|
371
|
+
) return;;
|
|
372
|
+
|
|
418
373
|
var key = result[2]
|
|
419
374
|
var val = result[3]
|
|
420
375
|
if (!meta[key]) meta[key] = []
|
|
@@ -425,8 +380,9 @@ export class Task {
|
|
|
425
380
|
}
|
|
426
381
|
|
|
427
382
|
static getMetaData (config, task) {
|
|
428
|
-
|
|
429
|
-
|
|
383
|
+
const text = Task.isTask(task) ? task.getRawTextAndDescription() : task
|
|
384
|
+
|
|
385
|
+
const meta = Task.parseMetaData(config, text)
|
|
430
386
|
Object.entries(meta).forEach(([key, val]) => {
|
|
431
387
|
if (Task.DATE_META_KEYS.includes(key)) {
|
|
432
388
|
try {
|
|
@@ -462,6 +418,60 @@ export class Task {
|
|
|
462
418
|
)
|
|
463
419
|
}
|
|
464
420
|
|
|
421
|
+
static getMarkdownLinkLabelPositions (text) {
|
|
422
|
+
const positions = [];
|
|
423
|
+
const re = /\[([^\]]+)\]\([^\)]+\)/g;
|
|
424
|
+
let match;
|
|
425
|
+
|
|
426
|
+
while ((match = re.exec(text)) !== null) {
|
|
427
|
+
positions.push({ start: match.index, end: re.lastIndex });
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
return positions;
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
static isResultInMarkdownLinkLabel (linkLabelPositions, index) {
|
|
434
|
+
return linkLabelPositions.some(pos => index >= pos.start && index < pos.end);
|
|
435
|
+
};
|
|
436
|
+
|
|
437
|
+
static getCommentPositions (text) {
|
|
438
|
+
const positions = [];
|
|
439
|
+
const re = /<!--[\s\S]*?-->/g;
|
|
440
|
+
let match;
|
|
441
|
+
|
|
442
|
+
while ((match = re.exec(text)) !== null) {
|
|
443
|
+
positions.push({ start: match.index, end: re.lastIndex });
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
return positions;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
static isResultInComment (commentPositions, index) {
|
|
450
|
+
return commentPositions.some(pos => index >= pos.start && index < pos.end);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
static ContextRegExp = new RegExp(
|
|
454
|
+
`(^|\\s)@([${Task.AnyLanguageGroup}${Task.EmojiGroup}]+)`,
|
|
455
|
+
'gmiu'
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
static getContext (text, commentTagsOnly = false) {
|
|
459
|
+
const context = []
|
|
460
|
+
const commentPositions = Task.getCommentPositions(text);
|
|
461
|
+
const codePositions = Task.getMarkdownCodePositions(text)
|
|
462
|
+
var result,
|
|
463
|
+
re = new RegExp(Task.ContextRegExp)
|
|
464
|
+
|
|
465
|
+
while ((result = re.exec(text)) !== null) {
|
|
466
|
+
if (commentTagsOnly && !Task.isResultInComment(commentPositions, result.index)) continue
|
|
467
|
+
if (Task.isResultInMarkdownCode(codePositions, result.index)) continue
|
|
468
|
+
const con = result[2]
|
|
469
|
+
if (!context.includes(con)) context.push(con)
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
return context
|
|
473
|
+
}
|
|
474
|
+
|
|
465
475
|
static hasWindowsEOL (content) {
|
|
466
476
|
return /\r\n|\r/.test(content)
|
|
467
477
|
}
|
|
@@ -590,7 +600,7 @@ export class Task {
|
|
|
590
600
|
|
|
591
601
|
parseTodoTxt () {
|
|
592
602
|
this.tags = Task.getTags(this.getRawTextAndDescription(), this.getTagPrefix(), this.getCommentTagsOnly())
|
|
593
|
-
this.context = Task.getContext(this.getRawTextAndDescription())
|
|
603
|
+
this.context = Task.getContext(this.getRawTextAndDescription(), this.getCommentTagsOnly())
|
|
594
604
|
this.meta = Task.getMetaData(this.config, this)
|
|
595
605
|
}
|
|
596
606
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "imdone-core",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.15",
|
|
4
4
|
"description": "imdone-core",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"async-es": "^3.2.6",
|
|
49
49
|
"chalk": "^5.4.1",
|
|
50
50
|
"chokidar": "^4.0.3",
|
|
51
|
-
"chrono-node": "
|
|
51
|
+
"chrono-node": "~2.7.8",
|
|
52
52
|
"commander": "^13.1.0",
|
|
53
53
|
"debug": ">=4.3.4",
|
|
54
54
|
"eol": "^0.9.1",
|
|
@@ -101,8 +101,8 @@
|
|
|
101
101
|
},
|
|
102
102
|
"devDependencies": {
|
|
103
103
|
"@types/node": "^22.13.13",
|
|
104
|
-
"@vitest/coverage-istanbul": "^3.
|
|
105
|
-
"@vitest/coverage-v8": "^3.
|
|
104
|
+
"@vitest/coverage-istanbul": "^3.1.1",
|
|
105
|
+
"@vitest/coverage-v8": "^3.1.1",
|
|
106
106
|
"chai": "^5.2.0",
|
|
107
107
|
"colors": "^1.4.0",
|
|
108
108
|
"dependency-cruiser": "^16.10.0",
|
|
@@ -114,6 +114,6 @@
|
|
|
114
114
|
"json-stringify-safe": "~5.0.0",
|
|
115
115
|
"prettier": "^2.5.1",
|
|
116
116
|
"typescript": "^5.8.2",
|
|
117
|
-
"vitest": "^3.
|
|
117
|
+
"vitest": "^3.1.1"
|
|
118
118
|
}
|
|
119
119
|
}
|
|
@@ -2,13 +2,13 @@ export function exists(path: any): Promise<false | _fs.Stats>;
|
|
|
2
2
|
export function statSync(path: any): _fs.Stats | undefined;
|
|
3
3
|
export function init(fileSystem?: typeof _fs): void;
|
|
4
4
|
export function existsSync(...args: any[]): boolean;
|
|
5
|
-
export function readFileSync(...args: any[]): string |
|
|
5
|
+
export function readFileSync(...args: any[]): string | NonSharedBuffer;
|
|
6
6
|
export function appendFileSync(...args: any[]): void;
|
|
7
7
|
export function writeFileSync(...args: any[]): void;
|
|
8
|
-
export function readdir(...args: any[]): Promise<_fs.Dirent[]>;
|
|
8
|
+
export function readdir(...args: any[]): Promise<_fs.Dirent<Buffer<ArrayBufferLike>>[]>;
|
|
9
9
|
export function unlinkSync(...args: any[]): void;
|
|
10
10
|
export function readdirSyncRecursive(path: any): any[];
|
|
11
|
-
export function readdirSync(path: any): _fs.Dirent[];
|
|
11
|
+
export function readdirSync(path: any): _fs.Dirent<string>[];
|
|
12
12
|
export function sanitizeFileName(fileName: any, replaceSpacesWith: any): any;
|
|
13
13
|
export function preparePathForWriting(path: any, directory?: boolean): Promise<{
|
|
14
14
|
isFile: any;
|
package/types/card.d.ts
CHANGED
package/types/config.d.ts
CHANGED
package/types/file.d.ts
CHANGED
package/types/task.d.ts
CHANGED
|
@@ -19,6 +19,13 @@ export class Task {
|
|
|
19
19
|
static EmojiGroup: string;
|
|
20
20
|
static getTagRegexp(prefix?: string): RegExp;
|
|
21
21
|
static getTags(text: any, prefix?: string, commentTagsOnly?: boolean): string[];
|
|
22
|
+
static MetaRegExp: RegExp;
|
|
23
|
+
static getMetaRegExp(config: any): RegExp;
|
|
24
|
+
static getMetaRegExpQuotes(config: any): RegExp;
|
|
25
|
+
static parseMetaData(config: any, content: any): {};
|
|
26
|
+
static getMetaData(config: any, task: any): {};
|
|
27
|
+
static execMetaRegex(re: any, content: any, codePositions: any, cb: any): void;
|
|
28
|
+
static eachMetaInContent(config: any, content: any, cb: any): void;
|
|
22
29
|
static getMarkdownLinkLabelPositions(text: any): {
|
|
23
30
|
start: number;
|
|
24
31
|
end: number;
|
|
@@ -30,14 +37,7 @@ export class Task {
|
|
|
30
37
|
}[];
|
|
31
38
|
static isResultInComment(commentPositions: any, index: any): any;
|
|
32
39
|
static ContextRegExp: RegExp;
|
|
33
|
-
static getContext(text: any): string[];
|
|
34
|
-
static MetaRegExp: RegExp;
|
|
35
|
-
static getMetaRegExp(config: any): RegExp;
|
|
36
|
-
static getMetaRegExpQuotes(config: any): RegExp;
|
|
37
|
-
static parseMetaData(config: any, content: any): {};
|
|
38
|
-
static getMetaData(config: any, task: any): {};
|
|
39
|
-
static execMetaRegex(re: any, content: any, codePositions: any, cb: any): void;
|
|
40
|
-
static eachMetaInContent(config: any, content: any, cb: any): void;
|
|
40
|
+
static getContext(text: any, commentTagsOnly?: boolean): string[];
|
|
41
41
|
static hasWindowsEOL(content: any): boolean;
|
|
42
42
|
static getLinePos(content: any, lineNo: any): any;
|
|
43
43
|
static getLineNumber(content: any, pos: any): number;
|
|
@@ -70,8 +70,8 @@ export class Task {
|
|
|
70
70
|
beforeText: any;
|
|
71
71
|
text: any;
|
|
72
72
|
list: any;
|
|
73
|
-
set order(val:
|
|
74
|
-
get order():
|
|
73
|
+
set order(val: number | undefined);
|
|
74
|
+
get order(): number | undefined;
|
|
75
75
|
hasColon: any;
|
|
76
76
|
line: any;
|
|
77
77
|
id: any;
|