@6missedcalls/notion-cli 0.1.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 +114 -0
- package/dist/cli/program.d.ts +7 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +27 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/shared.d.ts +24 -0
- package/dist/cli/shared.d.ts.map +1 -0
- package/dist/cli/shared.js +97 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/block.d.ts +6 -0
- package/dist/commands/block.d.ts.map +1 -0
- package/dist/commands/block.js +118 -0
- package/dist/commands/block.js.map +1 -0
- package/dist/commands/db.d.ts +6 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +66 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/page.d.ts +6 -0
- package/dist/commands/page.d.ts.map +1 -0
- package/dist/commands/page.js +106 -0
- package/dist/commands/page.js.map +1 -0
- package/dist/commands/push.d.ts +7 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +102 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/search.d.ts +6 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +37 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +5 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/markdown.d.ts +8 -0
- package/dist/lib/markdown.d.ts.map +1 -0
- package/dist/lib/markdown.js +159 -0
- package/dist/lib/markdown.js.map +1 -0
- package/dist/lib/markdown.test.d.ts +6 -0
- package/dist/lib/markdown.test.d.ts.map +1 -0
- package/dist/lib/markdown.test.js +338 -0
- package/dist/lib/markdown.test.js.map +1 -0
- package/dist/lib/notion-client.d.ts +41 -0
- package/dist/lib/notion-client.d.ts.map +1 -0
- package/dist/lib/notion-client.js +144 -0
- package/dist/lib/notion-client.js.map +1 -0
- package/dist/lib/shared.test.d.ts +6 -0
- package/dist/lib/shared.test.d.ts.map +1 -0
- package/dist/lib/shared.test.js +148 -0
- package/dist/lib/shared.test.js.map +1 -0
- package/dist/lib/types.d.ts +134 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +53 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/types.test.d.ts +6 -0
- package/dist/lib/types.test.d.ts.map +1 -0
- package/dist/lib/types.test.js +177 -0
- package/dist/lib/types.test.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for CLI shared utilities
|
|
3
|
+
* Following TDD: Tests written first, covering all utility functions
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect } from 'vitest';
|
|
6
|
+
import { normalizeId, formatId, validateUrl, validateFilePath } from '../cli/shared.js';
|
|
7
|
+
describe('normalizeId', () => {
|
|
8
|
+
describe('valid IDs', () => {
|
|
9
|
+
it('should accept a 32-character hex string without hyphens', () => {
|
|
10
|
+
const id = 'a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6';
|
|
11
|
+
expect(normalizeId(id)).toBe('a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6');
|
|
12
|
+
});
|
|
13
|
+
it('should remove hyphens from UUID format', () => {
|
|
14
|
+
const uuid = 'a1b2c3d4-e5f6-a7b8-c9d0-e1f2a3b4c5d6';
|
|
15
|
+
expect(normalizeId(uuid)).toBe('a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6');
|
|
16
|
+
});
|
|
17
|
+
it('should extract ID from Notion page URL', () => {
|
|
18
|
+
const url = 'https://www.notion.so/workspace/Page-Title-a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6';
|
|
19
|
+
expect(normalizeId(url)).toBe('a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6');
|
|
20
|
+
});
|
|
21
|
+
it('should extract ID from Notion database URL', () => {
|
|
22
|
+
const url = 'https://notion.so/a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6?v=xyz';
|
|
23
|
+
expect(normalizeId(url)).toBe('a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6');
|
|
24
|
+
});
|
|
25
|
+
it('should handle uppercase hex characters', () => {
|
|
26
|
+
const id = 'A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6';
|
|
27
|
+
expect(normalizeId(id)).toBe('A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6');
|
|
28
|
+
});
|
|
29
|
+
it('should handle mixed case hex characters', () => {
|
|
30
|
+
const id = 'A1b2C3d4E5f6A7b8C9d0E1f2A3b4C5d6';
|
|
31
|
+
expect(normalizeId(id)).toBe('A1b2C3d4E5f6A7b8C9d0E1f2A3b4C5d6');
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('invalid IDs', () => {
|
|
35
|
+
it('should throw for empty string', () => {
|
|
36
|
+
expect(() => normalizeId('')).toThrow('Invalid Notion ID format');
|
|
37
|
+
});
|
|
38
|
+
it('should throw for ID with invalid characters', () => {
|
|
39
|
+
expect(() => normalizeId('g1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6')).toThrow('Invalid Notion ID format');
|
|
40
|
+
});
|
|
41
|
+
it('should throw for ID that is too short', () => {
|
|
42
|
+
expect(() => normalizeId('a1b2c3d4')).toThrow('Invalid Notion ID format');
|
|
43
|
+
});
|
|
44
|
+
it('should extract first 32 chars from longer hex string (URL extraction behavior)', () => {
|
|
45
|
+
// The function extracts 32-char hex patterns from URLs, so a longer hex string
|
|
46
|
+
// will have its first 32 characters extracted
|
|
47
|
+
expect(normalizeId('a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8')).toBe('a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6');
|
|
48
|
+
});
|
|
49
|
+
it('should throw for random text', () => {
|
|
50
|
+
expect(() => normalizeId('not-a-valid-id')).toThrow('Invalid Notion ID format');
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('formatId', () => {
|
|
55
|
+
it('should add hyphens to 32-character hex string in UUID format', () => {
|
|
56
|
+
const id = 'a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6';
|
|
57
|
+
expect(formatId(id)).toBe('a1b2c3d4-e5f6-a7b8-c9d0-e1f2a3b4c5d6');
|
|
58
|
+
});
|
|
59
|
+
it('should handle ID that already has hyphens', () => {
|
|
60
|
+
const id = 'a1b2c3d4-e5f6-a7b8-c9d0-e1f2a3b4c5d6';
|
|
61
|
+
expect(formatId(id)).toBe('a1b2c3d4-e5f6-a7b8-c9d0-e1f2a3b4c5d6');
|
|
62
|
+
});
|
|
63
|
+
it('should return original if not 32 characters after cleaning', () => {
|
|
64
|
+
const id = 'short-id';
|
|
65
|
+
expect(formatId(id)).toBe('short-id');
|
|
66
|
+
});
|
|
67
|
+
it('should handle empty string', () => {
|
|
68
|
+
expect(formatId('')).toBe('');
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('validateUrl', () => {
|
|
72
|
+
describe('valid URLs', () => {
|
|
73
|
+
it('should accept https URL', () => {
|
|
74
|
+
const url = 'https://example.com/image.png';
|
|
75
|
+
expect(validateUrl(url)).toBe(url);
|
|
76
|
+
});
|
|
77
|
+
it('should accept http URL', () => {
|
|
78
|
+
const url = 'http://example.com/image.png';
|
|
79
|
+
expect(validateUrl(url)).toBe(url);
|
|
80
|
+
});
|
|
81
|
+
it('should accept URL with query parameters', () => {
|
|
82
|
+
const url = 'https://example.com/image.png?size=large&format=webp';
|
|
83
|
+
expect(validateUrl(url)).toBe(url);
|
|
84
|
+
});
|
|
85
|
+
it('should accept URL with port', () => {
|
|
86
|
+
const url = 'https://example.com:8080/image.png';
|
|
87
|
+
expect(validateUrl(url)).toBe(url);
|
|
88
|
+
});
|
|
89
|
+
it('should accept URL with authentication', () => {
|
|
90
|
+
const url = 'https://user:pass@example.com/image.png';
|
|
91
|
+
expect(validateUrl(url)).toBe(url);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('invalid URLs', () => {
|
|
95
|
+
it('should throw for ftp protocol', () => {
|
|
96
|
+
expect(() => validateUrl('ftp://example.com/file.txt')).toThrow('protocol');
|
|
97
|
+
});
|
|
98
|
+
it('should throw for file protocol', () => {
|
|
99
|
+
expect(() => validateUrl('file:///etc/passwd')).toThrow('protocol');
|
|
100
|
+
});
|
|
101
|
+
it('should throw for javascript protocol', () => {
|
|
102
|
+
expect(() => validateUrl('javascript:alert(1)')).toThrow('protocol');
|
|
103
|
+
});
|
|
104
|
+
it('should throw for invalid URL format', () => {
|
|
105
|
+
expect(() => validateUrl('not-a-url')).toThrow('Invalid URL format');
|
|
106
|
+
});
|
|
107
|
+
it('should throw for empty string', () => {
|
|
108
|
+
expect(() => validateUrl('')).toThrow('Invalid URL format');
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe('custom allowed protocols', () => {
|
|
112
|
+
it('should accept custom protocols when specified', () => {
|
|
113
|
+
const url = 'ftp://example.com/file.txt';
|
|
114
|
+
expect(validateUrl(url, ['ftp:'])).toBe(url);
|
|
115
|
+
});
|
|
116
|
+
it('should reject http when only https is allowed', () => {
|
|
117
|
+
expect(() => validateUrl('http://example.com', ['https:'])).toThrow('protocol');
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe('validateFilePath', () => {
|
|
122
|
+
describe('valid paths', () => {
|
|
123
|
+
it('should accept simple filename', () => {
|
|
124
|
+
expect(validateFilePath('file.json')).toBe('file.json');
|
|
125
|
+
});
|
|
126
|
+
it('should accept relative path', () => {
|
|
127
|
+
expect(validateFilePath('./data/file.json')).toBe('./data/file.json');
|
|
128
|
+
});
|
|
129
|
+
it('should accept absolute path', () => {
|
|
130
|
+
expect(validateFilePath('/home/user/file.json')).toBe('/home/user/file.json');
|
|
131
|
+
});
|
|
132
|
+
it('should accept path with spaces', () => {
|
|
133
|
+
expect(validateFilePath('path with spaces/file.json')).toBe('path with spaces/file.json');
|
|
134
|
+
});
|
|
135
|
+
it('should accept parent directory traversal (allowed for CLI)', () => {
|
|
136
|
+
expect(validateFilePath('../parent/file.json')).toBe('../parent/file.json');
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
describe('invalid paths', () => {
|
|
140
|
+
it('should throw for path with null bytes', () => {
|
|
141
|
+
expect(() => validateFilePath('file\0.json')).toThrow('null bytes');
|
|
142
|
+
});
|
|
143
|
+
it('should throw for path with null byte in middle', () => {
|
|
144
|
+
expect(() => validateFilePath('/path/to\0/file')).toThrow('null bytes');
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
//# sourceMappingURL=shared.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.test.js","sourceRoot":"","sources":["../../src/lib/shared.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
export interface RichText {
|
|
2
|
+
type: 'text';
|
|
3
|
+
text: {
|
|
4
|
+
content: string;
|
|
5
|
+
link: {
|
|
6
|
+
url: string;
|
|
7
|
+
} | null;
|
|
8
|
+
};
|
|
9
|
+
annotations: {
|
|
10
|
+
bold: boolean;
|
|
11
|
+
italic: boolean;
|
|
12
|
+
strikethrough: boolean;
|
|
13
|
+
underline: boolean;
|
|
14
|
+
code: boolean;
|
|
15
|
+
color: string;
|
|
16
|
+
};
|
|
17
|
+
plain_text: string;
|
|
18
|
+
href: string | null;
|
|
19
|
+
}
|
|
20
|
+
export interface BlockBase {
|
|
21
|
+
object?: 'block';
|
|
22
|
+
id?: string;
|
|
23
|
+
type: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ParagraphBlock extends BlockBase {
|
|
26
|
+
type: 'paragraph';
|
|
27
|
+
paragraph: {
|
|
28
|
+
rich_text: RichText[];
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface Heading1Block extends BlockBase {
|
|
32
|
+
type: 'heading_1';
|
|
33
|
+
heading_1: {
|
|
34
|
+
rich_text: RichText[];
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export interface Heading2Block extends BlockBase {
|
|
38
|
+
type: 'heading_2';
|
|
39
|
+
heading_2: {
|
|
40
|
+
rich_text: RichText[];
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface Heading3Block extends BlockBase {
|
|
44
|
+
type: 'heading_3';
|
|
45
|
+
heading_3: {
|
|
46
|
+
rich_text: RichText[];
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export interface BulletedListItemBlock extends BlockBase {
|
|
50
|
+
type: 'bulleted_list_item';
|
|
51
|
+
bulleted_list_item: {
|
|
52
|
+
rich_text: RichText[];
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export interface NumberedListItemBlock extends BlockBase {
|
|
56
|
+
type: 'numbered_list_item';
|
|
57
|
+
numbered_list_item: {
|
|
58
|
+
rich_text: RichText[];
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export interface ToDoBlock extends BlockBase {
|
|
62
|
+
type: 'to_do';
|
|
63
|
+
to_do: {
|
|
64
|
+
rich_text: RichText[];
|
|
65
|
+
checked: boolean;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export interface CodeBlock extends BlockBase {
|
|
69
|
+
type: 'code';
|
|
70
|
+
code: {
|
|
71
|
+
rich_text: RichText[];
|
|
72
|
+
language: string;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export interface QuoteBlock extends BlockBase {
|
|
76
|
+
type: 'quote';
|
|
77
|
+
quote: {
|
|
78
|
+
rich_text: RichText[];
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export interface DividerBlock extends BlockBase {
|
|
82
|
+
type: 'divider';
|
|
83
|
+
divider: Record<string, never>;
|
|
84
|
+
}
|
|
85
|
+
export interface CalloutBlock extends BlockBase {
|
|
86
|
+
type: 'callout';
|
|
87
|
+
callout: {
|
|
88
|
+
rich_text: RichText[];
|
|
89
|
+
icon?: {
|
|
90
|
+
emoji: string;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export type Block = ParagraphBlock | Heading1Block | Heading2Block | Heading3Block | BulletedListItemBlock | NumberedListItemBlock | ToDoBlock | CodeBlock | QuoteBlock | DividerBlock | CalloutBlock;
|
|
95
|
+
export interface AppendBlocksRequest {
|
|
96
|
+
children: Block[];
|
|
97
|
+
}
|
|
98
|
+
export interface NotionError {
|
|
99
|
+
object: 'error';
|
|
100
|
+
status: number;
|
|
101
|
+
code: string;
|
|
102
|
+
message: string;
|
|
103
|
+
}
|
|
104
|
+
export interface PageProperties {
|
|
105
|
+
[key: string]: unknown;
|
|
106
|
+
}
|
|
107
|
+
export interface Page {
|
|
108
|
+
object: 'page';
|
|
109
|
+
id: string;
|
|
110
|
+
created_time: string;
|
|
111
|
+
last_edited_time: string;
|
|
112
|
+
archived: boolean;
|
|
113
|
+
properties: PageProperties;
|
|
114
|
+
url: string;
|
|
115
|
+
}
|
|
116
|
+
export interface Database {
|
|
117
|
+
object: 'database';
|
|
118
|
+
id: string;
|
|
119
|
+
title: RichText[];
|
|
120
|
+
properties: Record<string, unknown>;
|
|
121
|
+
}
|
|
122
|
+
export declare function richText(content: string, options?: Partial<RichText['annotations']>): RichText;
|
|
123
|
+
export declare function paragraph(text: string): ParagraphBlock;
|
|
124
|
+
export declare function heading1(text: string): Heading1Block;
|
|
125
|
+
export declare function heading2(text: string): Heading2Block;
|
|
126
|
+
export declare function heading3(text: string): Heading3Block;
|
|
127
|
+
export declare function bulletedListItem(text: string): BulletedListItemBlock;
|
|
128
|
+
export declare function numberedListItem(text: string): NumberedListItemBlock;
|
|
129
|
+
export declare function toDo(text: string, checked?: boolean): ToDoBlock;
|
|
130
|
+
export declare function codeBlock(code: string, language?: string): CodeBlock;
|
|
131
|
+
export declare function quote(text: string): QuoteBlock;
|
|
132
|
+
export declare function divider(): DividerBlock;
|
|
133
|
+
export declare function callout(text: string, emoji?: string): CalloutBlock;
|
|
134
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Notion API Types
|
|
2
|
+
// Helper to create rich_text
|
|
3
|
+
export function richText(content, options) {
|
|
4
|
+
return {
|
|
5
|
+
type: 'text',
|
|
6
|
+
text: { content, link: null },
|
|
7
|
+
annotations: {
|
|
8
|
+
bold: options?.bold ?? false,
|
|
9
|
+
italic: options?.italic ?? false,
|
|
10
|
+
strikethrough: options?.strikethrough ?? false,
|
|
11
|
+
underline: options?.underline ?? false,
|
|
12
|
+
code: options?.code ?? false,
|
|
13
|
+
color: options?.color ?? 'default',
|
|
14
|
+
},
|
|
15
|
+
plain_text: content,
|
|
16
|
+
href: null,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// Helper to create blocks
|
|
20
|
+
export function paragraph(text) {
|
|
21
|
+
return { type: 'paragraph', paragraph: { rich_text: [richText(text)] } };
|
|
22
|
+
}
|
|
23
|
+
export function heading1(text) {
|
|
24
|
+
return { type: 'heading_1', heading_1: { rich_text: [richText(text)] } };
|
|
25
|
+
}
|
|
26
|
+
export function heading2(text) {
|
|
27
|
+
return { type: 'heading_2', heading_2: { rich_text: [richText(text)] } };
|
|
28
|
+
}
|
|
29
|
+
export function heading3(text) {
|
|
30
|
+
return { type: 'heading_3', heading_3: { rich_text: [richText(text)] } };
|
|
31
|
+
}
|
|
32
|
+
export function bulletedListItem(text) {
|
|
33
|
+
return { type: 'bulleted_list_item', bulleted_list_item: { rich_text: [richText(text)] } };
|
|
34
|
+
}
|
|
35
|
+
export function numberedListItem(text) {
|
|
36
|
+
return { type: 'numbered_list_item', numbered_list_item: { rich_text: [richText(text)] } };
|
|
37
|
+
}
|
|
38
|
+
export function toDo(text, checked = false) {
|
|
39
|
+
return { type: 'to_do', to_do: { rich_text: [richText(text)], checked } };
|
|
40
|
+
}
|
|
41
|
+
export function codeBlock(code, language = 'plain text') {
|
|
42
|
+
return { type: 'code', code: { rich_text: [richText(code)], language } };
|
|
43
|
+
}
|
|
44
|
+
export function quote(text) {
|
|
45
|
+
return { type: 'quote', quote: { rich_text: [richText(text)] } };
|
|
46
|
+
}
|
|
47
|
+
export function divider() {
|
|
48
|
+
return { type: 'divider', divider: {} };
|
|
49
|
+
}
|
|
50
|
+
export function callout(text, emoji = '💡') {
|
|
51
|
+
return { type: 'callout', callout: { rich_text: [richText(text)], icon: { emoji } } };
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../src/lib/types.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Notion API types and block helper functions
|
|
3
|
+
* Following TDD: Tests written first, covering all helper functions
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect } from 'vitest';
|
|
6
|
+
import { richText, paragraph, heading1, heading2, heading3, bulletedListItem, numberedListItem, toDo, codeBlock, quote, divider, callout, } from './types.js';
|
|
7
|
+
describe('richText', () => {
|
|
8
|
+
it('should create basic rich text with default annotations', () => {
|
|
9
|
+
const result = richText('Hello');
|
|
10
|
+
expect(result).toEqual({
|
|
11
|
+
type: 'text',
|
|
12
|
+
text: { content: 'Hello', link: null },
|
|
13
|
+
annotations: {
|
|
14
|
+
bold: false,
|
|
15
|
+
italic: false,
|
|
16
|
+
strikethrough: false,
|
|
17
|
+
underline: false,
|
|
18
|
+
code: false,
|
|
19
|
+
color: 'default',
|
|
20
|
+
},
|
|
21
|
+
plain_text: 'Hello',
|
|
22
|
+
href: null,
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
it('should create bold rich text', () => {
|
|
26
|
+
const result = richText('Bold text', { bold: true });
|
|
27
|
+
expect(result.annotations.bold).toBe(true);
|
|
28
|
+
expect(result.annotations.italic).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
it('should create italic rich text', () => {
|
|
31
|
+
const result = richText('Italic text', { italic: true });
|
|
32
|
+
expect(result.annotations.italic).toBe(true);
|
|
33
|
+
expect(result.annotations.bold).toBe(false);
|
|
34
|
+
});
|
|
35
|
+
it('should create code-styled rich text', () => {
|
|
36
|
+
const result = richText('const x = 1', { code: true });
|
|
37
|
+
expect(result.annotations.code).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
it('should create rich text with multiple annotations', () => {
|
|
40
|
+
const result = richText('Bold and italic', { bold: true, italic: true });
|
|
41
|
+
expect(result.annotations.bold).toBe(true);
|
|
42
|
+
expect(result.annotations.italic).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
it('should create rich text with custom color', () => {
|
|
45
|
+
const result = richText('Colored text', { color: 'red' });
|
|
46
|
+
expect(result.annotations.color).toBe('red');
|
|
47
|
+
});
|
|
48
|
+
it('should handle empty content', () => {
|
|
49
|
+
const result = richText('');
|
|
50
|
+
expect(result.text.content).toBe('');
|
|
51
|
+
expect(result.plain_text).toBe('');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('paragraph', () => {
|
|
55
|
+
it('should create a paragraph block', () => {
|
|
56
|
+
const result = paragraph('This is a paragraph.');
|
|
57
|
+
expect(result.type).toBe('paragraph');
|
|
58
|
+
expect(result.paragraph.rich_text).toHaveLength(1);
|
|
59
|
+
expect(result.paragraph.rich_text[0].plain_text).toBe('This is a paragraph.');
|
|
60
|
+
});
|
|
61
|
+
it('should create empty paragraph', () => {
|
|
62
|
+
const result = paragraph('');
|
|
63
|
+
expect(result.type).toBe('paragraph');
|
|
64
|
+
expect(result.paragraph.rich_text[0].plain_text).toBe('');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe('heading1', () => {
|
|
68
|
+
it('should create a heading_1 block', () => {
|
|
69
|
+
const result = heading1('Main Title');
|
|
70
|
+
expect(result.type).toBe('heading_1');
|
|
71
|
+
expect(result.heading_1.rich_text).toHaveLength(1);
|
|
72
|
+
expect(result.heading_1.rich_text[0].plain_text).toBe('Main Title');
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('heading2', () => {
|
|
76
|
+
it('should create a heading_2 block', () => {
|
|
77
|
+
const result = heading2('Section Title');
|
|
78
|
+
expect(result.type).toBe('heading_2');
|
|
79
|
+
expect(result.heading_2.rich_text).toHaveLength(1);
|
|
80
|
+
expect(result.heading_2.rich_text[0].plain_text).toBe('Section Title');
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe('heading3', () => {
|
|
84
|
+
it('should create a heading_3 block', () => {
|
|
85
|
+
const result = heading3('Subsection Title');
|
|
86
|
+
expect(result.type).toBe('heading_3');
|
|
87
|
+
expect(result.heading_3.rich_text).toHaveLength(1);
|
|
88
|
+
expect(result.heading_3.rich_text[0].plain_text).toBe('Subsection Title');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe('bulletedListItem', () => {
|
|
92
|
+
it('should create a bulleted list item block', () => {
|
|
93
|
+
const result = bulletedListItem('List item content');
|
|
94
|
+
expect(result.type).toBe('bulleted_list_item');
|
|
95
|
+
expect(result.bulleted_list_item.rich_text).toHaveLength(1);
|
|
96
|
+
expect(result.bulleted_list_item.rich_text[0].plain_text).toBe('List item content');
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe('numberedListItem', () => {
|
|
100
|
+
it('should create a numbered list item block', () => {
|
|
101
|
+
const result = numberedListItem('Numbered item content');
|
|
102
|
+
expect(result.type).toBe('numbered_list_item');
|
|
103
|
+
expect(result.numbered_list_item.rich_text).toHaveLength(1);
|
|
104
|
+
expect(result.numbered_list_item.rich_text[0].plain_text).toBe('Numbered item content');
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe('toDo', () => {
|
|
108
|
+
it('should create an unchecked to-do block by default', () => {
|
|
109
|
+
const result = toDo('Task to complete');
|
|
110
|
+
expect(result.type).toBe('to_do');
|
|
111
|
+
expect(result.to_do.rich_text).toHaveLength(1);
|
|
112
|
+
expect(result.to_do.rich_text[0].plain_text).toBe('Task to complete');
|
|
113
|
+
expect(result.to_do.checked).toBe(false);
|
|
114
|
+
});
|
|
115
|
+
it('should create a checked to-do block', () => {
|
|
116
|
+
const result = toDo('Completed task', true);
|
|
117
|
+
expect(result.to_do.checked).toBe(true);
|
|
118
|
+
});
|
|
119
|
+
it('should create an unchecked to-do block when explicitly set', () => {
|
|
120
|
+
const result = toDo('Pending task', false);
|
|
121
|
+
expect(result.to_do.checked).toBe(false);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
describe('codeBlock', () => {
|
|
125
|
+
it('should create a code block with default language', () => {
|
|
126
|
+
const result = codeBlock('const x = 1;');
|
|
127
|
+
expect(result.type).toBe('code');
|
|
128
|
+
expect(result.code.rich_text).toHaveLength(1);
|
|
129
|
+
expect(result.code.rich_text[0].plain_text).toBe('const x = 1;');
|
|
130
|
+
expect(result.code.language).toBe('plain text');
|
|
131
|
+
});
|
|
132
|
+
it('should create a code block with specified language', () => {
|
|
133
|
+
const result = codeBlock('def hello():\n print("Hello")', 'python');
|
|
134
|
+
expect(result.code.language).toBe('python');
|
|
135
|
+
expect(result.code.rich_text[0].plain_text).toBe('def hello():\n print("Hello")');
|
|
136
|
+
});
|
|
137
|
+
it('should handle multiline code', () => {
|
|
138
|
+
const code = `function test() {
|
|
139
|
+
return true;
|
|
140
|
+
}`;
|
|
141
|
+
const result = codeBlock(code, 'javascript');
|
|
142
|
+
expect(result.code.rich_text[0].plain_text).toBe(code);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('quote', () => {
|
|
146
|
+
it('should create a quote block', () => {
|
|
147
|
+
const result = quote('This is a quoted text.');
|
|
148
|
+
expect(result.type).toBe('quote');
|
|
149
|
+
expect(result.quote.rich_text).toHaveLength(1);
|
|
150
|
+
expect(result.quote.rich_text[0].plain_text).toBe('This is a quoted text.');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
describe('divider', () => {
|
|
154
|
+
it('should create a divider block', () => {
|
|
155
|
+
const result = divider();
|
|
156
|
+
expect(result.type).toBe('divider');
|
|
157
|
+
expect(result.divider).toEqual({});
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe('callout', () => {
|
|
161
|
+
it('should create a callout block with default emoji', () => {
|
|
162
|
+
const result = callout('Important information');
|
|
163
|
+
expect(result.type).toBe('callout');
|
|
164
|
+
expect(result.callout.rich_text).toHaveLength(1);
|
|
165
|
+
expect(result.callout.rich_text[0].plain_text).toBe('Important information');
|
|
166
|
+
expect(result.callout.icon).toEqual({ emoji: '💡' });
|
|
167
|
+
});
|
|
168
|
+
it('should create a callout block with custom emoji', () => {
|
|
169
|
+
const result = callout('Warning message', '⚠️');
|
|
170
|
+
expect(result.callout.icon).toEqual({ emoji: '⚠️' });
|
|
171
|
+
});
|
|
172
|
+
it('should create a callout with info emoji', () => {
|
|
173
|
+
const result = callout('Info message', 'ℹ️');
|
|
174
|
+
expect(result.callout.icon).toEqual({ emoji: 'ℹ️' });
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
//# sourceMappingURL=types.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../src/lib/types.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,EACJ,SAAS,EACT,KAAK,EACL,OAAO,EACP,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEjC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;YACtC,WAAW,EAAE;gBACX,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBACb,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,KAAK;gBAChB,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,SAAS;aACjB;YACD,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAErD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAE1D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAE5B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QAE7B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAErD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QAEzD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAExC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAE3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,kCAAkC,EAAE,QAAQ,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG;;EAEf,CAAC;QACC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAE7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAE/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;QAEzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAE7C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@6missedcalls/notion-cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Fast Notion CLI for pages, databases, and blocks",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"notion": "dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/6missedcalls/notion-cli.git"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"notion",
|
|
22
|
+
"cli",
|
|
23
|
+
"api",
|
|
24
|
+
"markdown",
|
|
25
|
+
"blocks"
|
|
26
|
+
],
|
|
27
|
+
"author": "6missedcalls",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"bugs": {
|
|
30
|
+
"url": "https://github.com/6missedcalls/notion-cli/issues"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://github.com/6missedcalls/notion-cli#readme",
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"commander": "^14.0.0",
|
|
38
|
+
"kleur": "^4.1.5"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "^22.0.0",
|
|
42
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
43
|
+
"tsx": "^4.21.0",
|
|
44
|
+
"typescript": "^5.9.0",
|
|
45
|
+
"vitest": "^4.0.0"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=22"
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "tsc",
|
|
52
|
+
"dev": "tsx src/cli.ts",
|
|
53
|
+
"notion": "pnpm run build && node dist/cli.js",
|
|
54
|
+
"test": "vitest run"
|
|
55
|
+
}
|
|
56
|
+
}
|