@equt/clis 0.1.17 → 0.1.19

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 (35) hide show
  1. package/dist/bookkeeping/client.d.ts +3 -3
  2. package/dist/bookkeeping/client.d.ts.map +1 -1
  3. package/dist/bookkeeping/client.js +3 -30
  4. package/dist/bookkeeping/client.js.map +1 -1
  5. package/dist/bookkeeping/commands/journals.js +2 -2
  6. package/dist/bookkeeping/commands/journals.js.map +1 -1
  7. package/dist/bookkeeping/props.d.ts +1 -0
  8. package/dist/bookkeeping/props.d.ts.map +1 -1
  9. package/dist/bookkeeping/props.js +6 -0
  10. package/dist/bookkeeping/props.js.map +1 -1
  11. package/dist/notion/client.d.ts +5 -0
  12. package/dist/notion/client.d.ts.map +1 -0
  13. package/dist/notion/client.js +33 -0
  14. package/dist/notion/client.js.map +1 -0
  15. package/dist/recurring/client.d.ts +8 -0
  16. package/dist/recurring/client.d.ts.map +1 -0
  17. package/dist/recurring/client.js +9 -0
  18. package/dist/recurring/client.js.map +1 -0
  19. package/dist/recurring/commands/complete.d.ts +3 -0
  20. package/dist/recurring/commands/complete.d.ts.map +1 -0
  21. package/dist/recurring/commands/complete.js +74 -0
  22. package/dist/recurring/commands/complete.js.map +1 -0
  23. package/dist/recurring/commands/list.d.ts +3 -0
  24. package/dist/recurring/commands/list.d.ts.map +1 -0
  25. package/dist/recurring/commands/list.js +40 -0
  26. package/dist/recurring/commands/list.js.map +1 -0
  27. package/dist/recurring/index.d.ts +3 -0
  28. package/dist/recurring/index.d.ts.map +1 -0
  29. package/dist/recurring/index.js +30 -0
  30. package/dist/recurring/index.js.map +1 -0
  31. package/dist/recurring/props.d.ts +2 -0
  32. package/dist/recurring/props.d.ts.map +1 -0
  33. package/dist/recurring/props.js +2 -0
  34. package/dist/recurring/props.js.map +1 -0
  35. package/package.json +3 -2
@@ -1,5 +1,5 @@
1
- import type { PageObjectResponse, QueryDataSourceParameters } from '@notionhq/client/build/src/api-endpoints.js';
2
- import { Client } from '@notionhq/client';
1
+ import type { Client } from '@notionhq/client';
2
+ import { queryAll } from '../notion/client.js';
3
3
  export declare const DB: {
4
4
  readonly Journals: "2274724d-dd75-80b5-84a2-000b682101b6";
5
5
  readonly Lines: "2274724d-dd75-80a3-bdcc-000bacc0fc05";
@@ -9,5 +9,5 @@ export declare const DB: {
9
9
  readonly Feedback: "2274724d-dd75-80d1-8187-000be688b67f";
10
10
  };
11
11
  export declare function createClient(): Client;
12
- export declare function queryAll(client: Client, params: QueryDataSourceParameters, limit?: number): Promise<PageObjectResponse[]>;
12
+ export { queryAll };
13
13
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bookkeeping/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,eAAO,MAAM,EAAE;;;;;;;CAOL,CAAA;AAEV,wBAAgB,YAAY,IAAI,MAAM,CAOrC;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,yBAAyB,EACjC,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAyB/B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bookkeeping/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAsC,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAElF,eAAO,MAAM,EAAE;;;;;;;CAOL,CAAA;AAEV,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -1,5 +1,4 @@
1
- import process from 'node:process';
2
- import { Client } from '@notionhq/client';
1
+ import { createClient as createNotionClient, queryAll } from '../notion/client.js';
3
2
  export const DB = {
4
3
  Journals: '2274724d-dd75-80b5-84a2-000b682101b6',
5
4
  Lines: '2274724d-dd75-80a3-bdcc-000bacc0fc05',
@@ -9,33 +8,7 @@ export const DB = {
9
8
  Feedback: '2274724d-dd75-80d1-8187-000be688b67f',
10
9
  };
11
10
  export function createClient() {
12
- const token = process.env.BOOKKEEPING_TOKEN;
13
- if (!token) {
14
- console.error('BOOKKEEPING_TOKEN environment variable is not set');
15
- process.exit(1);
16
- }
17
- return new Client({ auth: token });
18
- }
19
- export async function queryAll(client, params, limit) {
20
- const results = [];
21
- let cursor;
22
- while (true) {
23
- const response = await client.dataSources.query({
24
- ...params,
25
- start_cursor: cursor,
26
- });
27
- for (const page of response.results) {
28
- if (page.object === 'page' && 'properties' in page) {
29
- results.push(page);
30
- if (limit !== undefined && results.length >= limit) {
31
- return results;
32
- }
33
- }
34
- }
35
- if (!response.has_more || response.next_cursor === null)
36
- break;
37
- cursor = response.next_cursor;
38
- }
39
- return results;
11
+ return createNotionClient('BOOKKEEPING_TOKEN');
40
12
  }
13
+ export { queryAll };
41
14
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bookkeeping/client.ts"],"names":[],"mappings":"AAIA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,QAAQ,EAAE,sCAAsC;IAChD,KAAK,EAAE,sCAAsC;IAC7C,QAAQ,EAAE,sCAAsC;IAChD,UAAU,EAAE,sCAAsC;IAClD,SAAS,EAAE,sCAAsC;IACjD,QAAQ,EAAE,sCAAsC;CACxC,CAAA;AAEV,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAA;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAc,EACd,MAAiC,EACjC,KAAc;IAEd,MAAM,OAAO,GAAyB,EAAE,CAAA;IACxC,IAAI,MAA0B,CAAA;IAE9B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;YAC9C,GAAG,MAAM;YACT,YAAY,EAAE,MAAM;SACrB,CAAC,CAAA;QAEF,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,IAA0B,CAAC,CAAA;gBACxC,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;oBACnD,OAAO,OAAO,CAAA;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,KAAK,IAAI;YACrD,MAAK;QACP,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAA;IAC/B,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bookkeeping/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAElF,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,QAAQ,EAAE,sCAAsC;IAChD,KAAK,EAAE,sCAAsC;IAC7C,QAAQ,EAAE,sCAAsC;IAChD,UAAU,EAAE,sCAAsC;IAClD,SAAS,EAAE,sCAAsC;IACjD,QAAQ,EAAE,sCAAsC;CACxC,CAAA;AAEV,MAAM,UAAU,YAAY;IAC1B,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;AAChD,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -61,10 +61,10 @@ export function registerJournals(program) {
61
61
  note: extractRichText(page.properties.Note),
62
62
  }));
63
63
  if (yaml) {
64
- renderYaml(items.map(({ name, date, note }) => ({ name, date, note })));
64
+ renderYaml(items.map(({ id, name, date, note }) => ({ id, name, date, note })));
65
65
  }
66
66
  else {
67
- renderTable(['Name', 'Date', 'Note'], items.map(i => [i.name, i.date, i.note]));
67
+ renderTable(['ID', 'Name', 'Date', 'Note'], items.map(i => [i.id, i.name, i.date, i.note]));
68
68
  }
69
69
  });
70
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"journals.js","sourceRoot":"","sources":["../../../src/bookkeeping/commands/journals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"journals.js","sourceRoot":"","sources":["../../../src/bookkeeping/commands/journals.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,6 @@ export declare function extractSelect(prop: PageProp | undefined): string;
8
8
  export declare function extractRelationIds(prop: PageProp | undefined): string[];
9
9
  export declare function extractFormulaCheckbox(prop: PageProp | undefined): boolean;
10
10
  export declare function extractFormulaNumber(prop: PageProp | undefined): number | null;
11
+ export declare function extractCheckbox(prop: PageProp | undefined): boolean;
11
12
  export {};
12
13
  //# sourceMappingURL=props.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/bookkeeping/props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAErF,KAAK,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAK/D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAKlE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAK9D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAKvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAKhE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,EAAE,CAKvE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAK1E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK9E"}
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/bookkeeping/props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAErF,KAAK,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAK/D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAKlE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAK9D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAKvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAKhE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,EAAE,CAKvE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAK1E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK9E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAKnE"}
@@ -46,4 +46,10 @@ export function extractFormulaNumber(prop) {
46
46
  }
47
47
  return null;
48
48
  }
49
+ export function extractCheckbox(prop) {
50
+ if (prop?.type === 'checkbox') {
51
+ return prop.checkbox;
52
+ }
53
+ return false;
54
+ }
49
55
  //# sourceMappingURL=props.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"props.js","sourceRoot":"","sources":["../../src/bookkeeping/props.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,YAAY,CAAC,IAA0B;IACrD,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAA0B;IACxD,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAA0B;IACpD,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;IACxB,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAA0B;IACtD,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAA0B;IACtD,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;IACzB,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAA0B;IAC3D,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAA0B;IAC/D,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAA;IACtC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA0B;IAC7D,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;IAC5B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"props.js","sourceRoot":"","sources":["../../src/bookkeeping/props.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,YAAY,CAAC,IAA0B;IACrD,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAA0B;IACxD,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAA0B;IACpD,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;IACxB,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAA0B;IACtD,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAA0B;IACtD,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;IACzB,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAA0B;IAC3D,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAA0B;IAC/D,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAA;IACtC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA0B;IAC7D,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;IAC5B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAA0B;IACxD,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { PageObjectResponse, QueryDataSourceParameters } from '@notionhq/client/build/src/api-endpoints.js';
2
+ import { Client } from '@notionhq/client';
3
+ export declare function createClient(envVar: string): Client;
4
+ export declare function queryAll(client: Client, params: QueryDataSourceParameters, limit?: number): Promise<PageObjectResponse[]>;
5
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/notion/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,yBAAyB,EACjC,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAyB/B"}
@@ -0,0 +1,33 @@
1
+ import process from 'node:process';
2
+ import { Client } from '@notionhq/client';
3
+ export function createClient(envVar) {
4
+ const token = process.env[envVar];
5
+ if (!token) {
6
+ console.error(`${envVar} environment variable is not set`);
7
+ process.exit(1);
8
+ }
9
+ return new Client({ auth: token });
10
+ }
11
+ export async function queryAll(client, params, limit) {
12
+ const results = [];
13
+ let cursor;
14
+ while (true) {
15
+ const response = await client.dataSources.query({
16
+ ...params,
17
+ start_cursor: cursor,
18
+ });
19
+ for (const page of response.results) {
20
+ if (page.object === 'page' && 'properties' in page) {
21
+ results.push(page);
22
+ if (limit !== undefined && results.length >= limit) {
23
+ return results;
24
+ }
25
+ }
26
+ }
27
+ if (!response.has_more || response.next_cursor === null)
28
+ break;
29
+ cursor = response.next_cursor;
30
+ }
31
+ return results;
32
+ }
33
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/notion/client.ts"],"names":[],"mappings":"AAIA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,kCAAkC,CAAC,CAAA;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAc,EACd,MAAiC,EACjC,KAAc;IAEd,MAAM,OAAO,GAAyB,EAAE,CAAA;IACxC,IAAI,MAA0B,CAAA;IAE9B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;YAC9C,GAAG,MAAM;YACT,YAAY,EAAE,MAAM;SACrB,CAAC,CAAA;QAEF,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,IAA0B,CAAC,CAAA;gBACxC,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;oBACnD,OAAO,OAAO,CAAA;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,KAAK,IAAI;YACrD,MAAK;QACP,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAA;IAC/B,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Client } from '@notionhq/client';
2
+ import { queryAll } from '../notion/client.js';
3
+ export declare const DB: {
4
+ readonly Recurring: "3234724d-dd75-803b-8fec-000b37cf5172";
5
+ };
6
+ export declare function createClient(): Client;
7
+ export { queryAll };
8
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/recurring/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAsC,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAElF,eAAO,MAAM,EAAE;;CAEL,CAAA;AAEV,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { createClient as createNotionClient, queryAll } from '../notion/client.js';
2
+ export const DB = {
3
+ Recurring: '3234724d-dd75-803b-8fec-000b37cf5172',
4
+ };
5
+ export function createClient() {
6
+ return createNotionClient('RECURRING_TOKEN');
7
+ }
8
+ export { queryAll };
9
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/recurring/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAElF,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,SAAS,EAAE,sCAAsC;CACzC,CAAA;AAEV,MAAM,UAAU,YAAY;IAC1B,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,CAAA;AAC9C,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerComplete(program: Command): void;
3
+ //# sourceMappingURL=complete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../../src/recurring/commands/complete.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOxC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgFvD"}
@@ -0,0 +1,74 @@
1
+ import process from 'node:process';
2
+ import { addDays, addMonths, addYears, format } from 'date-fns';
3
+ import { renderTable, renderYaml } from '../../bookkeeping/output.js';
4
+ import { createClient } from '../client.js';
5
+ import { extractCheckbox, extractDate, extractNumber, extractSelect, extractTitle } from '../props.js';
6
+ export function registerComplete(program) {
7
+ program
8
+ .command('complete <id>')
9
+ .description('Mark a recurring item as complete and advance its Next date.\n\n'
10
+ + 'How the new Next date is calculated:\n'
11
+ + ' 1. Determine the base date:\n'
12
+ + ' - If "Use Today" is checked on the item, use today\'s date.\n'
13
+ + ' - Otherwise, use the current Next date.\n'
14
+ + ' 2. Add the recurrence interval (Amount × Unit) to the base date.\n'
15
+ + ' Unit can be Day, Month, or Year.\n'
16
+ + ' 3. Update the item\'s Next property with the computed date.\n\n'
17
+ + 'Arguments:\n'
18
+ + ' id Notion page ID of the recurring item to complete.')
19
+ .action(async (id) => {
20
+ const yaml = program.opts().yaml;
21
+ const client = createClient();
22
+ const page = await client.pages.retrieve({ page_id: id });
23
+ if (page.object !== 'page' || !('properties' in page)) {
24
+ console.error(`Page not found: ${id}`);
25
+ process.exit(1);
26
+ }
27
+ const props = page.properties;
28
+ const name = extractTitle(props.Name);
29
+ const amount = extractNumber(props.Amount);
30
+ const unit = extractSelect(props.Unit);
31
+ const next = extractDate(props.Next);
32
+ const useToday = extractCheckbox(props['Use Today']);
33
+ if (amount === null || amount <= 0) {
34
+ console.error(`Invalid or missing Amount for "${name}"`);
35
+ process.exit(1);
36
+ }
37
+ if (!unit) {
38
+ console.error(`Missing Unit for "${name}"`);
39
+ process.exit(1);
40
+ }
41
+ if (!next) {
42
+ console.error(`Missing Next date for "${name}"`);
43
+ process.exit(1);
44
+ }
45
+ const base = useToday ? new Date() : new Date(next);
46
+ function advance(base, amount, unit) {
47
+ switch (unit) {
48
+ case 'Day':
49
+ return addDays(base, amount);
50
+ case 'Month':
51
+ return addMonths(base, amount);
52
+ case 'Year':
53
+ return addYears(base, amount);
54
+ default:
55
+ throw new Error(`Unknown unit: ${unit}`);
56
+ }
57
+ }
58
+ const newNext = advance(base, amount, unit);
59
+ const newNextStr = format(newNext, 'yyyy-MM-dd');
60
+ await client.pages.update({
61
+ page_id: id,
62
+ properties: {
63
+ Next: { date: { start: newNextStr } },
64
+ },
65
+ });
66
+ if (yaml) {
67
+ renderYaml({ id, name, previousNext: next, newNext: newNextStr, useToday });
68
+ }
69
+ else {
70
+ renderTable(['Name', 'Previous Next', 'New Next', 'Use Today'], [[name, next, newNextStr, useToday ? 'Yes' : 'No']]);
71
+ }
72
+ });
73
+ }
74
+ //# sourceMappingURL=complete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../src/recurring/commands/complete.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEtG,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CACV,kEAAkE;UAChE,wCAAwC;UACxC,iCAAiC;UACjC,oEAAoE;UACpE,gDAAgD;UAChD,sEAAsE;UACtE,yCAAyC;UACzC,mEAAmE;UACnE,cAAc;UACd,yDAAyD,CAC5D;SACA,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAqB,CAAC,IAAI,CAAA;QACnD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;QAE7B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;QACzD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,MAAM,KAAK,GAAI,IAA2B,CAAC,UAAU,CAAA;QAErD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;QAEpD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,kCAAkC,IAAI,GAAG,CAAC,CAAA;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAA;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,GAAG,CAAC,CAAA;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;QACnD,SAAS,OAAO,CAAC,IAAU,EAAE,MAAc,EAAE,IAAY;YACvD,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,KAAK;oBACR,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBAC9B,KAAK,OAAO;oBACV,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBAChC,KAAK,MAAM;oBACT,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBAC/B;oBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QAE3C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QAEhD,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YACxB,OAAO,EAAE,EAAE;YACX,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;aACqB;SAC7D,CAAC,CAAA;QAEF,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC7E,CAAC;aACI,CAAC;YACJ,WAAW,CACT,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,CAAC,EAClD,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CACpD,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerList(program: Command): void;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/recurring/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0CnD"}
@@ -0,0 +1,40 @@
1
+ import { renderTable, renderYaml } from '../../bookkeeping/output.js';
2
+ import { createClient, DB, queryAll } from '../client.js';
3
+ import { extractCheckbox, extractDate, extractNumber, extractSelect, extractTitle } from '../props.js';
4
+ export function registerList(program) {
5
+ program
6
+ .command('list', { isDefault: true })
7
+ .description('List all recurring items sorted by next execution date.\n'
8
+ + 'Each row shows the item name, next scheduled date, recurrence interval (amount + unit), '
9
+ + 'and whether the "Use Today" flag is set.')
10
+ .action(async () => {
11
+ const yaml = program.opts().yaml;
12
+ const client = createClient();
13
+ const pages = await queryAll(client, {
14
+ data_source_id: DB.Recurring,
15
+ sorts: [{ property: 'Next', direction: 'ascending' }],
16
+ });
17
+ const items = pages.map(page => ({
18
+ id: page.id,
19
+ name: extractTitle(page.properties.Name),
20
+ next: extractDate(page.properties.Next),
21
+ amount: extractNumber(page.properties.Amount),
22
+ unit: extractSelect(page.properties.Unit),
23
+ useToday: extractCheckbox(page.properties['Use Today']),
24
+ }));
25
+ if (yaml) {
26
+ renderYaml(items);
27
+ }
28
+ else {
29
+ renderTable(['ID', 'Name', 'Next', 'Amount', 'Unit', 'Use Today'], items.map(i => [
30
+ i.id,
31
+ i.name,
32
+ i.next,
33
+ i.amount !== null ? String(i.amount) : '',
34
+ i.unit,
35
+ i.useToday ? 'Yes' : 'No',
36
+ ]));
37
+ }
38
+ });
39
+ }
40
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/recurring/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEtG,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACpC,WAAW,CACV,2DAA2D;UACzD,0FAA0F;UAC1F,0CAA0C,CAC7C;SACA,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAqB,CAAC,IAAI,CAAA;QACnD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;QAC7B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE;YACnC,cAAc,EAAE,EAAE,CAAC,SAAS;YAC5B,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;SACtD,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACxC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACvC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAC7C,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACzC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;SACxD,CAAC,CAAC,CAAA;QAEH,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;aACI,CAAC;YACJ,WAAW,CACT,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EACrD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACb,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBACzC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;aAC1B,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recurring/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import process from 'node:process';
3
+ import { APIResponseError } from '@notionhq/client';
4
+ import { program } from 'commander';
5
+ import { registerComplete } from './commands/complete.js';
6
+ import { registerList } from './commands/list.js';
7
+ program
8
+ .name('recurring')
9
+ .description('Recurring task scheduler CLI backed by Notion.\n\n'
10
+ + 'Manages periodic tasks (e.g. monthly bills, yearly renewals) stored in a\n'
11
+ + 'Notion database. Each item has a recurrence interval (Amount + Unit) and a\n'
12
+ + 'Next date indicating when the task is next due.\n\n'
13
+ + 'Environment variables:\n'
14
+ + ' RECURRING_TOKEN Notion integration token (required)')
15
+ .option('--yaml', 'Emit YAML instead of a formatted table');
16
+ registerList(program);
17
+ registerComplete(program);
18
+ program.parseAsync(process.argv).catch((err) => {
19
+ if (APIResponseError.isAPIResponseError(err)) {
20
+ console.error(`Notion API error ${err.status}: ${err.message}`);
21
+ }
22
+ else if (err instanceof Error) {
23
+ console.error(err.message);
24
+ }
25
+ else {
26
+ console.error(String(err));
27
+ }
28
+ process.exit(1);
29
+ });
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recurring/index.ts"],"names":[],"mappings":";AACA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CACV,oDAAoD;MAClD,4EAA4E;MAC5E,8EAA8E;MAC9E,qDAAqD;MACrD,0BAA0B;MAC1B,wDAAwD,CAC3D;KACA,MAAM,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAA;AAE7D,YAAY,CAAC,OAAO,CAAC,CAAA;AACrB,gBAAgB,CAAC,OAAO,CAAC,CAAA;AAEzB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IACjE,CAAC;SACI,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;SACI,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { extractCheckbox, extractDate, extractNumber, extractSelect, extractTitle } from '../bookkeeping/props.js';
2
+ //# sourceMappingURL=props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/recurring/props.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { extractCheckbox, extractDate, extractNumber, extractSelect, extractTitle } from '../bookkeeping/props.js';
2
+ //# sourceMappingURL=props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.js","sourceRoot":"","sources":["../../src/recurring/props.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA"}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@equt/clis",
3
3
  "type": "module",
4
- "version": "0.1.17",
4
+ "version": "0.1.19",
5
5
  "packageManager": "bun@1.3.10",
6
6
  "bin": {
7
7
  "bookkeeping": "./dist/bookkeeping/index.js",
8
- "komari": "./dist/komari/index.js"
8
+ "komari": "./dist/komari/index.js",
9
+ "recurring": "./dist/recurring/index.js"
9
10
  },
10
11
  "publishConfig": {
11
12
  "access": "public"