todoosy 0.3.4 → 0.3.7

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.
Files changed (43) hide show
  1. package/dist/cjs/formatter.d.ts +2 -1
  2. package/dist/cjs/formatter.js +11 -4
  3. package/dist/cjs/index.d.ts +3 -1
  4. package/dist/cjs/index.js +5 -1
  5. package/dist/cjs/linter.d.ts +2 -1
  6. package/dist/cjs/linter.js +140 -126
  7. package/dist/cjs/parser.d.ts +11 -4
  8. package/dist/cjs/parser.js +269 -287
  9. package/dist/cjs/query.d.ts +2 -1
  10. package/dist/cjs/query.js +12 -5
  11. package/dist/cjs/relative-date.d.ts +34 -0
  12. package/dist/cjs/relative-date.js +233 -0
  13. package/dist/cjs/settings.js +1 -1
  14. package/dist/cjs/types.d.ts +2 -0
  15. package/dist/formatter.d.ts +2 -1
  16. package/dist/formatter.d.ts.map +1 -1
  17. package/dist/formatter.js +11 -4
  18. package/dist/formatter.js.map +1 -1
  19. package/dist/index.d.ts +3 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +1 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/linter.d.ts +2 -1
  24. package/dist/linter.d.ts.map +1 -1
  25. package/dist/linter.js +140 -126
  26. package/dist/linter.js.map +1 -1
  27. package/dist/parser.d.ts +11 -4
  28. package/dist/parser.d.ts.map +1 -1
  29. package/dist/parser.js +269 -287
  30. package/dist/parser.js.map +1 -1
  31. package/dist/query.d.ts +2 -1
  32. package/dist/query.d.ts.map +1 -1
  33. package/dist/query.js +12 -5
  34. package/dist/query.js.map +1 -1
  35. package/dist/relative-date.d.ts +35 -0
  36. package/dist/relative-date.d.ts.map +1 -0
  37. package/dist/relative-date.js +229 -0
  38. package/dist/relative-date.js.map +1 -0
  39. package/dist/settings.js +1 -1
  40. package/dist/settings.js.map +1 -1
  41. package/dist/types.d.ts +2 -0
  42. package/dist/types.d.ts.map +1 -1
  43. package/package.json +5 -5
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Todoosy Query Engine
3
3
  */
4
+ import { type ParseOptions } from './parser.js';
4
5
  import type { UpcomingResult, MiscResult, Scheme } from './types.js';
5
- export declare function queryUpcoming(text: string, scheme?: Scheme): UpcomingResult;
6
+ export declare function queryUpcoming(text: string, scheme?: Scheme, options?: ParseOptions): UpcomingResult;
6
7
  export declare function queryMisc(text: string, scheme?: Scheme): MiscResult;
7
8
  export interface HashtagItem {
8
9
  id: string;
package/dist/cjs/query.js CHANGED
@@ -28,8 +28,8 @@ function buildPath(itemId, ast) {
28
28
  }
29
29
  return parts.join(' > ');
30
30
  }
31
- function queryUpcoming(text, scheme) {
32
- const { ast } = (0, parser_js_1.parse)(text);
31
+ function queryUpcoming(text, scheme, options) {
32
+ const { ast } = (0, parser_js_1.parse)(text, options);
33
33
  const items = [];
34
34
  // Find all items with due dates
35
35
  for (const item of ast.items) {
@@ -51,13 +51,20 @@ function queryUpcoming(text, scheme) {
51
51
  items.push(upcomingItem);
52
52
  }
53
53
  }
54
+ // Map id -> sort-anchor (due_start if present, else due). Span items sort by
55
+ // when they start mattering; point items sort by their date as before.
56
+ const sortAnchor = new Map();
57
+ for (const item of ast.items) {
58
+ if (item.metadata.due) {
59
+ sortAnchor.set(item.id, item.metadata.due_start ?? item.metadata.due);
60
+ }
61
+ }
54
62
  // Sort by:
55
- // 1. Due date ascending
63
+ // 1. due_start ?? due ascending (windows surface from when they start)
56
64
  // 2. Priority ascending (lower is higher priority, nulls last)
57
65
  // 3. Document order (by item_span start)
58
66
  items.sort((a, b) => {
59
- // Due date comparison
60
- const dateCompare = a.due.localeCompare(b.due);
67
+ const dateCompare = sortAnchor.get(a.id).localeCompare(sortAnchor.get(b.id));
61
68
  if (dateCompare !== 0)
62
69
  return dateCompare;
63
70
  // Priority comparison (null treated as infinity)
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Todoosy Relative Date Parser
3
+ *
4
+ * Resolves keywords ("today", "tomorrow") and relative offsets ("2 weeks",
5
+ * "in 3 days", "two months") to concrete ISO dates. The resolution always
6
+ * happens at parse time; the persisted form on disk is always a concrete
7
+ * date.
8
+ */
9
+ import type { Settings } from './types.js';
10
+ export interface ResolvedNow {
11
+ /** The user's "today" as an ISO YYYY-MM-DD string (in their TZ). */
12
+ todayIso: string;
13
+ }
14
+ export declare function resolveNow(now: Date | undefined, settings: Settings | undefined): ResolvedNow;
15
+ /**
16
+ * Resolve `today` or `tomorrow` (case-insensitive). Returns the ISO date or null.
17
+ */
18
+ export declare function resolveKeyword(word: string, now: ResolvedNow): string | null;
19
+ /**
20
+ * Try to parse a relative-date expression starting at `index`. Returns the
21
+ * resolved ISO date and parts consumed, or null if no relative date is
22
+ * recognized at this position.
23
+ *
24
+ * Grammar (case-insensitive):
25
+ * ["in"] (digit | number-word) unit ["from now"|"from today"]
26
+ * ["in"] <fused> where <fused> matches /^\d+(w|wk|wks|week|weeks|y|yr|yrs|year|years)$/
27
+ * (note: bare 2d/2h/2m are estimates and parsed earlier)
28
+ *
29
+ * Returns null on no match. Does not throw. Bounded look-ahead.
30
+ */
31
+ export declare function tryParseRelative(parts: string[], index: number, now: ResolvedNow): {
32
+ date: string;
33
+ partsConsumed: number;
34
+ } | null;
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ /**
3
+ * Todoosy Relative Date Parser
4
+ *
5
+ * Resolves keywords ("today", "tomorrow") and relative offsets ("2 weeks",
6
+ * "in 3 days", "two months") to concrete ISO dates. The resolution always
7
+ * happens at parse time; the persisted form on disk is always a concrete
8
+ * date.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.resolveNow = resolveNow;
12
+ exports.resolveKeyword = resolveKeyword;
13
+ exports.tryParseRelative = tryParseRelative;
14
+ const NUMBER_WORDS = {
15
+ one: 1, two: 2, three: 3, four: 4, five: 5,
16
+ six: 6, seven: 7, eight: 8, nine: 9, ten: 10,
17
+ eleven: 11, twelve: 12, thirteen: 13, fourteen: 14, fifteen: 15,
18
+ sixteen: 16, seventeen: 17, eighteen: 18, nineteen: 19, twenty: 20,
19
+ 'twenty-one': 21, 'twenty-two': 22, 'twenty-three': 23, 'twenty-four': 24,
20
+ 'twenty-five': 25, 'twenty-six': 26, 'twenty-seven': 27, 'twenty-eight': 28,
21
+ 'twenty-nine': 29, thirty: 30, 'thirty-one': 31,
22
+ };
23
+ const TENS = new Set(['twenty', 'thirty']);
24
+ const ONES_AFTER_TENS = {
25
+ one: 1, two: 2, three: 3, four: 4, five: 5,
26
+ six: 6, seven: 7, eight: 8, nine: 9,
27
+ };
28
+ const DAY_UNITS = new Set(['d', 'day', 'days']);
29
+ const WEEK_UNITS = new Set(['w', 'wk', 'wks', 'week', 'weeks']);
30
+ const MONTH_UNITS = new Set(['month', 'months']);
31
+ const YEAR_UNITS = new Set(['y', 'yr', 'yrs', 'year', 'years']);
32
+ function resolveNow(now, settings) {
33
+ const instant = now ?? new Date();
34
+ const tz = settings?.timezone ?? 'UTC';
35
+ // Use Intl to get Y-M-D in the configured timezone. en-CA gives YYYY-MM-DD.
36
+ let todayIso;
37
+ try {
38
+ todayIso = new Intl.DateTimeFormat('en-CA', {
39
+ timeZone: tz,
40
+ year: 'numeric', month: '2-digit', day: '2-digit',
41
+ }).format(instant);
42
+ }
43
+ catch {
44
+ // Invalid timezone → fall back to UTC
45
+ todayIso = new Intl.DateTimeFormat('en-CA', {
46
+ timeZone: 'UTC',
47
+ year: 'numeric', month: '2-digit', day: '2-digit',
48
+ }).format(instant);
49
+ }
50
+ return { todayIso };
51
+ }
52
+ function parseISOAsUTC(iso) {
53
+ // iso is YYYY-MM-DD; build a UTC Date so arithmetic doesn't drift across DST.
54
+ const [y, m, d] = iso.split('-').map(n => parseInt(n, 10));
55
+ return new Date(Date.UTC(y, m - 1, d));
56
+ }
57
+ function dateToISO(d) {
58
+ const y = d.getUTCFullYear();
59
+ const m = String(d.getUTCMonth() + 1).padStart(2, '0');
60
+ const day = String(d.getUTCDate()).padStart(2, '0');
61
+ return `${y}-${m}-${day}`;
62
+ }
63
+ function addDays(iso, days) {
64
+ const d = parseISOAsUTC(iso);
65
+ d.setUTCDate(d.getUTCDate() + days);
66
+ return dateToISO(d);
67
+ }
68
+ function addMonths(iso, months) {
69
+ // Calendar-aware: clip day if target month is shorter (Jan 31 + 1 month = Feb 28/29).
70
+ const d = parseISOAsUTC(iso);
71
+ const targetMonth = d.getUTCMonth() + months;
72
+ const targetYear = d.getUTCFullYear() + Math.floor(targetMonth / 12);
73
+ const normalizedMonth = ((targetMonth % 12) + 12) % 12;
74
+ const desiredDay = d.getUTCDate();
75
+ // Last day of target month: day 0 of next month.
76
+ const lastDayOfTarget = new Date(Date.UTC(targetYear, normalizedMonth + 1, 0)).getUTCDate();
77
+ const day = Math.min(desiredDay, lastDayOfTarget);
78
+ return dateToISO(new Date(Date.UTC(targetYear, normalizedMonth, day)));
79
+ }
80
+ function addYears(iso, years) {
81
+ return addMonths(iso, years * 12);
82
+ }
83
+ /**
84
+ * Resolve `today` or `tomorrow` (case-insensitive). Returns the ISO date or null.
85
+ */
86
+ function resolveKeyword(word, now) {
87
+ const w = word.toLowerCase();
88
+ if (w === 'today')
89
+ return now.todayIso;
90
+ if (w === 'tomorrow')
91
+ return addDays(now.todayIso, 1);
92
+ return null;
93
+ }
94
+ /**
95
+ * Try to parse a number-word starting at `index`. Returns count + parts consumed,
96
+ * or null if no number-word found. Supports "twenty one" (two parts) and
97
+ * "twenty-one" (single part with hyphen).
98
+ */
99
+ function tryParseNumberWord(parts, index) {
100
+ if (index >= parts.length)
101
+ return null;
102
+ const w0 = parts[index].toLowerCase();
103
+ // Try compound form first ("twenty one") so it doesn't get pre-empted by the
104
+ // simple lookup of "twenty".
105
+ if (TENS.has(w0) && index + 1 < parts.length) {
106
+ const w1 = parts[index + 1].toLowerCase();
107
+ if (w1 in ONES_AFTER_TENS) {
108
+ const sum = NUMBER_WORDS[w0] + ONES_AFTER_TENS[w1];
109
+ if (sum <= 31)
110
+ return { value: sum, partsConsumed: 2 };
111
+ }
112
+ }
113
+ if (w0 in NUMBER_WORDS) {
114
+ return { value: NUMBER_WORDS[w0], partsConsumed: 1 };
115
+ }
116
+ return null;
117
+ }
118
+ /**
119
+ * Identify a unit word and the relative-date "kind" it implies. Returns null
120
+ * if the word is not a relative-date unit (estimate units `m`/`h`/`d` may
121
+ * collide with `d`; the caller resolves that ordering — bare `2d` is parsed
122
+ * as estimate before this is consulted).
123
+ */
124
+ function classifyUnit(word) {
125
+ const w = word.toLowerCase();
126
+ if (DAY_UNITS.has(w))
127
+ return 'days';
128
+ if (WEEK_UNITS.has(w))
129
+ return 'weeks';
130
+ if (MONTH_UNITS.has(w))
131
+ return 'months';
132
+ if (YEAR_UNITS.has(w))
133
+ return 'years';
134
+ return null;
135
+ }
136
+ function applyOffset(now, count, kind) {
137
+ switch (kind) {
138
+ case 'days': return addDays(now.todayIso, count);
139
+ case 'weeks': return addDays(now.todayIso, count * 7);
140
+ case 'months': return addMonths(now.todayIso, count);
141
+ case 'years': return addYears(now.todayIso, count);
142
+ }
143
+ }
144
+ const FUSED_OFFSET_RE = /^(\d+)([a-z]+)$/i;
145
+ /**
146
+ * Try to consume a "from now" / "from today" suffix starting at `index`.
147
+ * Returns the number of parts consumed (0, 2).
148
+ */
149
+ function tryConsumeFromSuffix(parts, index) {
150
+ if (index + 1 < parts.length) {
151
+ const a = parts[index].toLowerCase();
152
+ const b = parts[index + 1].toLowerCase();
153
+ if (a === 'from' && (b === 'now' || b === 'today'))
154
+ return 2;
155
+ }
156
+ return 0;
157
+ }
158
+ /**
159
+ * Try to parse a relative-date expression starting at `index`. Returns the
160
+ * resolved ISO date and parts consumed, or null if no relative date is
161
+ * recognized at this position.
162
+ *
163
+ * Grammar (case-insensitive):
164
+ * ["in"] (digit | number-word) unit ["from now"|"from today"]
165
+ * ["in"] <fused> where <fused> matches /^\d+(w|wk|wks|week|weeks|y|yr|yrs|year|years)$/
166
+ * (note: bare 2d/2h/2m are estimates and parsed earlier)
167
+ *
168
+ * Returns null on no match. Does not throw. Bounded look-ahead.
169
+ */
170
+ function tryParseRelative(parts, index, now) {
171
+ if (index >= parts.length)
172
+ return null;
173
+ let cursor = index;
174
+ let consumedIn = 0;
175
+ if (parts[cursor].toLowerCase() === 'in') {
176
+ consumedIn = 1;
177
+ cursor++;
178
+ if (cursor >= parts.length)
179
+ return null;
180
+ }
181
+ // Try fused form first: "2w", "2years", etc. (single token, digits + alpha)
182
+ const fused = parts[cursor].match(FUSED_OFFSET_RE);
183
+ if (fused) {
184
+ const count = parseInt(fused[1], 10);
185
+ const kind = classifyUnit(fused[2]);
186
+ if (kind === null)
187
+ return null;
188
+ // Day-fused (`2d`) is reserved for estimate; only weeks/months/years allowed fused.
189
+ // (Estimate parser runs earlier and would have matched 2d/2h/2m already; if we
190
+ // get here on `2d`, the estimate parser declined for some reason — still reject
191
+ // to keep semantics one-way.)
192
+ if (kind === 'days')
193
+ return null;
194
+ const after = cursor + 1;
195
+ const suffixConsumed = tryConsumeFromSuffix(parts, after);
196
+ return {
197
+ date: applyOffset(now, count, kind),
198
+ partsConsumed: consumedIn + 1 + suffixConsumed,
199
+ };
200
+ }
201
+ // Split form: number then unit (each as separate part).
202
+ // Number can be digits or a number-word (1-2 parts).
203
+ let count;
204
+ let numberPartsConsumed;
205
+ const digitsMatch = parts[cursor].match(/^(\d+)$/);
206
+ if (digitsMatch) {
207
+ count = parseInt(digitsMatch[1], 10);
208
+ numberPartsConsumed = 1;
209
+ }
210
+ else {
211
+ const word = tryParseNumberWord(parts, cursor);
212
+ if (!word)
213
+ return null;
214
+ count = word.value;
215
+ numberPartsConsumed = word.partsConsumed;
216
+ }
217
+ const unitIndex = cursor + numberPartsConsumed;
218
+ if (unitIndex >= parts.length)
219
+ return null;
220
+ const kind = classifyUnit(parts[unitIndex]);
221
+ if (kind === null)
222
+ return null;
223
+ // Reject the day case in the *split* form when written as bare `d` ("2 d"):
224
+ // that is a confusing form. Require "day"/"days" for clarity.
225
+ if (kind === 'days' && parts[unitIndex].toLowerCase() === 'd')
226
+ return null;
227
+ const after = unitIndex + 1;
228
+ const suffixConsumed = tryConsumeFromSuffix(parts, after);
229
+ return {
230
+ date: applyOffset(now, count, kind),
231
+ partsConsumed: consumedIn + numberPartsConsumed + 1 + suffixConsumed,
232
+ };
233
+ }
@@ -57,7 +57,7 @@ exports.VALID_FORMATTING_STYLES = exports.VALID_CALENDAR_FORMATS = void 0;
57
57
  exports.parseSettings = parseSettings;
58
58
  exports.parseScheme = parseScheme;
59
59
  // Heading patterns for known settings
60
- const HEADING_REGEX = /^#\s+(.+?)\s*$/;
60
+ const HEADING_REGEX = /^#{1,6}\s+(.+?)\s*$/;
61
61
  const KNOWN_SETTINGS = {
62
62
  timezone: 'timezone',
63
63
  priorities: 'priorities',
@@ -3,6 +3,7 @@
3
3
  */
4
4
  export interface ItemMetadata {
5
5
  due: string | null;
6
+ due_start: string | null;
6
7
  due_soft: boolean | null;
7
8
  priority: number | null;
8
9
  estimate_minutes: number | null;
@@ -92,6 +93,7 @@ export interface ParsedToken {
92
93
  start: number;
93
94
  end: number;
94
95
  soft?: boolean;
96
+ dateStart?: string;
95
97
  }
96
98
  export interface ParenGroup {
97
99
  start: number;
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Todoosy Formatter
3
3
  */
4
+ import { type ParseOptions } from './parser.js';
4
5
  import type { Scheme } from './types.js';
5
- export declare function format(text: string, scheme?: Scheme, filename?: string): string;
6
+ export declare function format(text: string, scheme?: Scheme, filename?: string, options?: ParseOptions): string;
6
7
  //# sourceMappingURL=formatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAA0B,MAAM,EAAE,MAAM,YAAY,CAAC;AA+EjE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAsJ/E"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAA0B,MAAM,EAAE,MAAM,YAAY,CAAC;AAqFjE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAsJvG"}
package/dist/formatter.js CHANGED
@@ -15,8 +15,15 @@ function parseMiscLocation(misc) {
15
15
  function formatMetadata(metadata) {
16
16
  const parts = [];
17
17
  if (metadata.due) {
18
- const softPrefix = metadata.due_soft ? '~' : '';
19
- parts.push(`due ${softPrefix}${metadata.due}`);
18
+ if (metadata.due_start) {
19
+ // Span form: `due start~end`. The `~` between dates carries the soft semantics;
20
+ // a leading `~` is never used in conjunction with a span.
21
+ parts.push(`due ${metadata.due_start}~${metadata.due}`);
22
+ }
23
+ else {
24
+ const softPrefix = metadata.due_soft ? '~' : '';
25
+ parts.push(`due ${softPrefix}${metadata.due}`);
26
+ }
20
27
  }
21
28
  if (metadata.progress) {
22
29
  parts.push(metadata.progress);
@@ -67,8 +74,8 @@ function formatComments(comments, isListItem, indent) {
67
74
  // Heading comments are not indented
68
75
  return comments;
69
76
  }
70
- export function format(text, scheme, filename) {
71
- const { ast } = parse(text);
77
+ export function format(text, scheme, filename, options) {
78
+ const { ast } = parse(text, options);
72
79
  const lines = [];
73
80
  const itemMap = new Map();
74
81
  for (const item of ast.items) {
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,7 +2,9 @@
2
2
  * Todoosy - Markdown-based todo system
3
3
  */
4
4
  export { parse, parseTokensInParenGroup, extractParenGroups } from './parser.js';
5
- export type { ParseResult } from './parser.js';
5
+ export type { ParseResult, ParseOptions } from './parser.js';
6
+ export { resolveNow, resolveKeyword, tryParseRelative } from './relative-date.js';
7
+ export type { ResolvedNow } from './relative-date.js';
6
8
  export { format } from './formatter.js';
7
9
  export { lint } from './linter.js';
8
10
  export { queryUpcoming, queryMisc, queryByHashtag, listHashtags } from './query.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjF,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpF,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,YAAY,EACV,GAAG,EACH,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,UAAU,EACV,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,UAAU,EACV,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjF,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpF,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,YAAY,EACV,GAAG,EACH,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,UAAU,EACV,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,UAAU,EACV,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  * Todoosy - Markdown-based todo system
3
3
  */
4
4
  export { parse, parseTokensInParenGroup, extractParenGroups } from './parser.js';
5
+ export { resolveNow, resolveKeyword, tryParseRelative } from './relative-date.js';
5
6
  export { format } from './formatter.js';
6
7
  export { lint } from './linter.js';
7
8
  export { queryUpcoming, queryMisc, queryByHashtag, listHashtags } from './query.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGlF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
package/dist/linter.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * Todoosy Linter
3
3
  */
4
+ import { type ParseOptions } from './parser.js';
4
5
  import type { LintResult, Scheme } from './types.js';
5
- export declare function lint(text: string, scheme?: Scheme, filename?: string): LintResult;
6
+ export declare function lint(text: string, scheme?: Scheme, filename?: string, options?: ParseOptions): LintResult;
6
7
  export declare function lintScheme(scheme: Scheme): LintResult;
7
8
  //# sourceMappingURL=linter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAiF9D,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAobjF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CA0BrD"}
1
+ {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAiF9D,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,CAmczG;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CA0BrD"}