@lpenguin/notion-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +245 -0
- package/dist/commands/database/create.d.ts +8 -0
- package/dist/commands/database/create.d.ts.map +1 -0
- package/dist/commands/database/create.js +71 -0
- package/dist/commands/database/create.js.map +1 -0
- package/dist/commands/database/delete.d.ts +10 -0
- package/dist/commands/database/delete.d.ts.map +1 -0
- package/dist/commands/database/delete.js +83 -0
- package/dist/commands/database/delete.js.map +1 -0
- package/dist/commands/database/export.d.ts +11 -0
- package/dist/commands/database/export.d.ts.map +1 -0
- package/dist/commands/database/export.js +74 -0
- package/dist/commands/database/export.js.map +1 -0
- package/dist/commands/database/insert.d.ts +11 -0
- package/dist/commands/database/insert.d.ts.map +1 -0
- package/dist/commands/database/insert.js +93 -0
- package/dist/commands/database/insert.js.map +1 -0
- package/dist/commands/database/list.d.ts +10 -0
- package/dist/commands/database/list.d.ts.map +1 -0
- package/dist/commands/database/list.js +80 -0
- package/dist/commands/database/list.js.map +1 -0
- package/dist/commands/database/query.d.ts +10 -0
- package/dist/commands/database/query.d.ts.map +1 -0
- package/dist/commands/database/query.js +77 -0
- package/dist/commands/database/query.js.map +1 -0
- package/dist/commands/database/schema.d.ts +11 -0
- package/dist/commands/database/schema.d.ts.map +1 -0
- package/dist/commands/database/schema.js +76 -0
- package/dist/commands/database/schema.js.map +1 -0
- package/dist/commands/database/update.d.ts +11 -0
- package/dist/commands/database/update.d.ts.map +1 -0
- package/dist/commands/database/update.js +105 -0
- package/dist/commands/database/update.js.map +1 -0
- package/dist/commands/page/create.d.ts +11 -0
- package/dist/commands/page/create.d.ts.map +1 -0
- package/dist/commands/page/create.js +102 -0
- package/dist/commands/page/create.js.map +1 -0
- package/dist/commands/page/list.d.ts +10 -0
- package/dist/commands/page/list.d.ts.map +1 -0
- package/dist/commands/page/list.js +87 -0
- package/dist/commands/page/list.js.map +1 -0
- package/dist/commands/page/patch.d.ts +21 -0
- package/dist/commands/page/patch.d.ts.map +1 -0
- package/dist/commands/page/patch.js +156 -0
- package/dist/commands/page/patch.js.map +1 -0
- package/dist/commands/page/read.d.ts +10 -0
- package/dist/commands/page/read.d.ts.map +1 -0
- package/dist/commands/page/read.js +86 -0
- package/dist/commands/page/read.js.map +1 -0
- package/dist/commands/page/write-properties.d.ts +15 -0
- package/dist/commands/page/write-properties.d.ts.map +1 -0
- package/dist/commands/page/write-properties.js +128 -0
- package/dist/commands/page/write-properties.js.map +1 -0
- package/dist/commands/page/write.d.ts +14 -0
- package/dist/commands/page/write.d.ts.map +1 -0
- package/dist/commands/page/write.js +109 -0
- package/dist/commands/page/write.js.map +1 -0
- package/dist/commands/search.d.ts +18 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +129 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +121 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/block-patch.d.ts +61 -0
- package/dist/lib/block-patch.d.ts.map +1 -0
- package/dist/lib/block-patch.js +181 -0
- package/dist/lib/block-patch.js.map +1 -0
- package/dist/lib/client.d.ts +17 -0
- package/dist/lib/client.d.ts.map +1 -0
- package/dist/lib/client.js +63 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/config.d.ts +19 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +65 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/csv.d.ts +45 -0
- package/dist/lib/csv.d.ts.map +1 -0
- package/dist/lib/csv.js +262 -0
- package/dist/lib/csv.js.map +1 -0
- package/dist/lib/db-properties.d.ts +11 -0
- package/dist/lib/db-properties.d.ts.map +1 -0
- package/dist/lib/db-properties.js +25 -0
- package/dist/lib/db-properties.js.map +1 -0
- package/dist/lib/errors.d.ts +34 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +86 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/file-upload.d.ts +25 -0
- package/dist/lib/file-upload.d.ts.map +1 -0
- package/dist/lib/file-upload.js +90 -0
- package/dist/lib/file-upload.js.map +1 -0
- package/dist/lib/markdown.d.ts +79 -0
- package/dist/lib/markdown.d.ts.map +1 -0
- package/dist/lib/markdown.js +320 -0
- package/dist/lib/markdown.js.map +1 -0
- package/dist/lib/output.d.ts +20 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +67 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/patch.d.ts +23 -0
- package/dist/lib/patch.d.ts.map +1 -0
- package/dist/lib/patch.js +72 -0
- package/dist/lib/patch.js.map +1 -0
- package/dist/lib/rate-limit.d.ts +9 -0
- package/dist/lib/rate-limit.d.ts.map +1 -0
- package/dist/lib/rate-limit.js +67 -0
- package/dist/lib/rate-limit.js.map +1 -0
- package/dist/lib/safety.d.ts +17 -0
- package/dist/lib/safety.d.ts.map +1 -0
- package/dist/lib/safety.js +60 -0
- package/dist/lib/safety.js.map +1 -0
- package/dist/lib/types.d.ts +138 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +13 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/validator.d.ts +33 -0
- package/dist/lib/validator.d.ts.map +1 -0
- package/dist/lib/validator.js +68 -0
- package/dist/lib/validator.js.map +1 -0
- package/dist/utils/id.d.ts +14 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +33 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +43 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/string.d.ts +14 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +37 -0
- package/dist/utils/string.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/database/list.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAwEvD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notion-cli db list
|
|
3
|
+
*
|
|
4
|
+
* List all Notion databases accessible to the integration.
|
|
5
|
+
*
|
|
6
|
+
* This command is idempotent and read-only.
|
|
7
|
+
*/
|
|
8
|
+
import {} from 'commander';
|
|
9
|
+
import { getClient } from '../../lib/client.js';
|
|
10
|
+
import { printSuccess, printError, formatTable, isJsonMode } from '../../lib/output.js';
|
|
11
|
+
import { withRateLimit } from '../../lib/rate-limit.js';
|
|
12
|
+
import {} from '../../lib/types.js';
|
|
13
|
+
import { toCliError } from '../../lib/errors.js';
|
|
14
|
+
import * as logger from '../../utils/logger.js';
|
|
15
|
+
export function registerDbListCommand(db) {
|
|
16
|
+
db.command('list')
|
|
17
|
+
.description('List accessible Notion databases.')
|
|
18
|
+
.option('-q, --query <text>', 'Filter databases by title')
|
|
19
|
+
.option('-l, --limit <n>', 'Maximum results', '20')
|
|
20
|
+
.option('--cursor <cursor>', 'Pagination cursor')
|
|
21
|
+
.action(async (cmdOpts) => {
|
|
22
|
+
try {
|
|
23
|
+
const opts = db.optsWithGlobals();
|
|
24
|
+
const client = getClient(opts.token);
|
|
25
|
+
const limit = parseInt(cmdOpts.limit ?? '20', 10);
|
|
26
|
+
const response = await withRateLimit(() => client.search({
|
|
27
|
+
query: cmdOpts.query ?? '',
|
|
28
|
+
filter: { value: 'data_source', property: 'object' },
|
|
29
|
+
page_size: Math.min(limit, 100),
|
|
30
|
+
start_cursor: cmdOpts.cursor,
|
|
31
|
+
}), 'search');
|
|
32
|
+
const results = response.results.map((item) => {
|
|
33
|
+
const db = item;
|
|
34
|
+
const titleArr = db['title'];
|
|
35
|
+
let title = 'Untitled';
|
|
36
|
+
if (titleArr !== undefined && titleArr.length > 0) {
|
|
37
|
+
title = titleArr[0]?.['plain_text'] ?? 'Untitled';
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
id: item.id,
|
|
41
|
+
type: 'database',
|
|
42
|
+
title,
|
|
43
|
+
url: db['url'] ?? '',
|
|
44
|
+
lastEditedTime: db['last_edited_time'] ?? '',
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
if (isJsonMode()) {
|
|
48
|
+
printSuccess({ results }, {
|
|
49
|
+
hasMore: response.has_more,
|
|
50
|
+
cursor: response.next_cursor ?? undefined,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
if (results.length === 0) {
|
|
55
|
+
logger.info('No databases found.');
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
for (const r of results) {
|
|
59
|
+
const table = formatTable([
|
|
60
|
+
['ID', r.id],
|
|
61
|
+
['Title', r.title],
|
|
62
|
+
['URL', r.url],
|
|
63
|
+
['Last edited', r.lastEditedTime],
|
|
64
|
+
]);
|
|
65
|
+
process.stdout.write(`${table}\n\n`);
|
|
66
|
+
}
|
|
67
|
+
if (response.has_more) {
|
|
68
|
+
logger.info(`More results available. Use --cursor ${response.next_cursor ?? ''}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const cliErr = toCliError(err);
|
|
75
|
+
printError(cliErr.code, cliErr.message);
|
|
76
|
+
process.exitCode = cliErr.exitCode;
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/database/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notion-cli db query <db-id> [--filter <json>] [--sort <json>]
|
|
3
|
+
*
|
|
4
|
+
* Query a Notion database and output results as CSV or JSON.
|
|
5
|
+
*
|
|
6
|
+
* This command is idempotent and read-only.
|
|
7
|
+
*/
|
|
8
|
+
import { type Command } from 'commander';
|
|
9
|
+
export declare function registerDbQueryCommand(db: Command): void;
|
|
10
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/commands/database/query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CA6ExD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notion-cli db query <db-id> [--filter <json>] [--sort <json>]
|
|
3
|
+
*
|
|
4
|
+
* Query a Notion database and output results as CSV or JSON.
|
|
5
|
+
*
|
|
6
|
+
* This command is idempotent and read-only.
|
|
7
|
+
*/
|
|
8
|
+
import {} from 'commander';
|
|
9
|
+
import { getClient, resolveDataSourceId } from '../../lib/client.js';
|
|
10
|
+
import { rowsToCsv } from '../../lib/csv.js';
|
|
11
|
+
import { printSuccess, printError, isJsonMode } from '../../lib/output.js';
|
|
12
|
+
import { withRateLimit } from '../../lib/rate-limit.js';
|
|
13
|
+
import { parseNotionId } from '../../utils/id.js';
|
|
14
|
+
import {} from '../../lib/types.js';
|
|
15
|
+
import { toCliError } from '../../lib/errors.js';
|
|
16
|
+
import * as logger from '../../utils/logger.js';
|
|
17
|
+
export function registerDbQueryCommand(db) {
|
|
18
|
+
db.command('query')
|
|
19
|
+
.description('Query a Notion database. Outputs CSV by default, JSON with --json.')
|
|
20
|
+
.argument('<db-id>', 'Notion database ID or URL')
|
|
21
|
+
.option('--filter <json>', 'Filter as JSON string (Notion API filter object)')
|
|
22
|
+
.option('--sort <json>', 'Sort as JSON string (array of sort objects)')
|
|
23
|
+
.option('-l, --limit <n>', 'Maximum rows to return', '100')
|
|
24
|
+
.option('--cursor <cursor>', 'Pagination cursor')
|
|
25
|
+
.action(async (rawId, cmdOpts) => {
|
|
26
|
+
try {
|
|
27
|
+
const opts = db.optsWithGlobals();
|
|
28
|
+
const rawIdParsed = parseNotionId(rawId);
|
|
29
|
+
const client = getClient(opts.token);
|
|
30
|
+
const limit = parseInt(cmdOpts.limit ?? '100', 10);
|
|
31
|
+
// Resolve db ID to data source ID (2-step approach)
|
|
32
|
+
const dbId = await resolveDataSourceId(client, rawIdParsed);
|
|
33
|
+
// Parse filter and sort
|
|
34
|
+
const filter = cmdOpts.filter !== undefined ? JSON.parse(cmdOpts.filter) : undefined;
|
|
35
|
+
const parsedSort = cmdOpts.sort !== undefined ? JSON.parse(cmdOpts.sort) : undefined;
|
|
36
|
+
const sorts = parsedSort !== undefined
|
|
37
|
+
? (Array.isArray(parsedSort) ? parsedSort : [parsedSort])
|
|
38
|
+
: undefined;
|
|
39
|
+
// Query the data source
|
|
40
|
+
const response = await withRateLimit(() => client.dataSources.query({
|
|
41
|
+
data_source_id: dbId,
|
|
42
|
+
filter,
|
|
43
|
+
sorts,
|
|
44
|
+
page_size: Math.min(limit, 100),
|
|
45
|
+
start_cursor: cmdOpts.cursor,
|
|
46
|
+
}), 'dataSources.query');
|
|
47
|
+
// Extract property names from first result
|
|
48
|
+
const results = response.results;
|
|
49
|
+
const firstResult = results[0];
|
|
50
|
+
const propertyNames = firstResult !== undefined && 'properties' in firstResult
|
|
51
|
+
? Object.keys(firstResult.properties)
|
|
52
|
+
: [];
|
|
53
|
+
if (isJsonMode()) {
|
|
54
|
+
printSuccess({ rows: results, propertyNames }, {
|
|
55
|
+
hasMore: response.has_more,
|
|
56
|
+
cursor: response.next_cursor ?? undefined,
|
|
57
|
+
totalCount: results.length,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// Output CSV to stdout
|
|
62
|
+
const csv = rowsToCsv(results, propertyNames);
|
|
63
|
+
process.stdout.write(csv);
|
|
64
|
+
logger.success(`${String(results.length)} rows returned.`);
|
|
65
|
+
if (response.has_more) {
|
|
66
|
+
logger.info(`More results available. Use --cursor ${response.next_cursor ?? ''}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
const cliErr = toCliError(err);
|
|
72
|
+
printError(cliErr.code, cliErr.message);
|
|
73
|
+
process.exitCode = cliErr.exitCode;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/commands/database/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notion-cli db schema <db-id>
|
|
3
|
+
*
|
|
4
|
+
* Show the property schema of a Notion database.
|
|
5
|
+
* Useful for constructing filter/sort queries and understanding available columns.
|
|
6
|
+
*
|
|
7
|
+
* This command is idempotent and read-only.
|
|
8
|
+
*/
|
|
9
|
+
import { type Command } from 'commander';
|
|
10
|
+
export declare function registerDbSchemaCommand(db: Command): void;
|
|
11
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/commands/database/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAmEzD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notion-cli db schema <db-id>
|
|
3
|
+
*
|
|
4
|
+
* Show the property schema of a Notion database.
|
|
5
|
+
* Useful for constructing filter/sort queries and understanding available columns.
|
|
6
|
+
*
|
|
7
|
+
* This command is idempotent and read-only.
|
|
8
|
+
*/
|
|
9
|
+
import {} from 'commander';
|
|
10
|
+
import { getClient, resolveDataSourceId } from '../../lib/client.js';
|
|
11
|
+
import { printSuccess, printError, formatTable, isJsonMode } from '../../lib/output.js';
|
|
12
|
+
import { withRateLimit } from '../../lib/rate-limit.js';
|
|
13
|
+
import { parseNotionId } from '../../utils/id.js';
|
|
14
|
+
import {} from '../../lib/types.js';
|
|
15
|
+
import { toCliError } from '../../lib/errors.js';
|
|
16
|
+
import { isFullDataSource } from '@notionhq/client';
|
|
17
|
+
export function registerDbSchemaCommand(db) {
|
|
18
|
+
db.command('schema')
|
|
19
|
+
.description('Show database property schema.')
|
|
20
|
+
.argument('<db-id>', 'Notion database ID or URL')
|
|
21
|
+
.action(async (rawId) => {
|
|
22
|
+
try {
|
|
23
|
+
const opts = db.optsWithGlobals();
|
|
24
|
+
const rawIdParsed = parseNotionId(rawId);
|
|
25
|
+
const client = getClient(opts.token);
|
|
26
|
+
// Resolve db ID to data source ID
|
|
27
|
+
const dbId = await resolveDataSourceId(client, rawIdParsed);
|
|
28
|
+
const dataSource = await withRateLimit(() => client.dataSources.retrieve({ data_source_id: dbId }), 'dataSources.retrieve');
|
|
29
|
+
let title = 'Untitled';
|
|
30
|
+
if (isFullDataSource(dataSource) && dataSource.title.length > 0) {
|
|
31
|
+
const firstTitle = dataSource.title[0];
|
|
32
|
+
if (firstTitle !== undefined) {
|
|
33
|
+
title = firstTitle.plain_text;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const props = dataSource.properties;
|
|
37
|
+
const properties = Object.entries(props).map(([name, prop]) => {
|
|
38
|
+
const { type } = prop;
|
|
39
|
+
let options;
|
|
40
|
+
// Extract select/multi_select/status options
|
|
41
|
+
if (prop.type === 'select') {
|
|
42
|
+
options = prop.select.options.map((o) => o.name);
|
|
43
|
+
}
|
|
44
|
+
else if (prop.type === 'multi_select') {
|
|
45
|
+
options = prop.multi_select.options.map((o) => o.name);
|
|
46
|
+
}
|
|
47
|
+
else if (prop.type === 'status') {
|
|
48
|
+
options = prop.status.options.map((o) => o.name);
|
|
49
|
+
}
|
|
50
|
+
return { name, type, options };
|
|
51
|
+
});
|
|
52
|
+
const schema = {
|
|
53
|
+
databaseId: dbId,
|
|
54
|
+
title,
|
|
55
|
+
properties,
|
|
56
|
+
};
|
|
57
|
+
if (isJsonMode()) {
|
|
58
|
+
printSuccess(schema);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
process.stdout.write(`Database: ${title}\n\n`);
|
|
62
|
+
const tableRows = properties.map((p) => {
|
|
63
|
+
const opts = p.options !== undefined ? ` [${p.options.join(', ')}]` : '';
|
|
64
|
+
return [p.name, `${p.type}${opts}`];
|
|
65
|
+
});
|
|
66
|
+
process.stdout.write(`${formatTable(tableRows)}\n`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const cliErr = toCliError(err);
|
|
71
|
+
printError(cliErr.code, cliErr.message);
|
|
72
|
+
process.exitCode = cliErr.exitCode;
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/commands/database/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAgB,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAA4D,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,UAAU,uBAAuB,CAAC,EAAW;IACjD,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,QAAQ,CAAC,SAAS,EAAE,2BAA2B,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,eAAe,EAAiB,CAAC;YACjD,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAErC,kCAAkC;YAClC,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAE5D,MAAM,UAAU,GAA0B,MAAM,aAAa,CAC3D,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAC3D,sBAAsB,CACvB,CAAC;YAEF,IAAI,KAAK,GAAG,UAAU,CAAC;YACvB,IAAI,gBAAgB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChE,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC7B,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC;gBAChC,CAAC;YACH,CAAC;YAED,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC;YACpC,MAAM,UAAU,GAAuB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAC9D,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;gBACf,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;gBACtB,IAAI,OAA6B,CAAC;gBAElC,6CAA6C;gBAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnD,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACxC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAClC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnD,CAAC;gBAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACjC,CAAC,CACF,CAAC;YAEF,MAAM,MAAM,GAAa;gBACvB,UAAU,EAAE,IAAI;gBAChB,KAAK;gBACL,UAAU;aACX,CAAC;YAEF,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,YAAY,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC;gBAC/C,MAAM,SAAS,GAAqC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACvE,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAU,CAAC;gBAC/C,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/B,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notion-cli db update <db-id> --file <file.csv>
|
|
3
|
+
*
|
|
4
|
+
* Update existing pages in a Notion database from CSV rows.
|
|
5
|
+
* All rows must have a _notion_id column value.
|
|
6
|
+
*
|
|
7
|
+
* This command is NOT idempotent (applies updates each run).
|
|
8
|
+
*/
|
|
9
|
+
import { type Command } from 'commander';
|
|
10
|
+
export declare function registerDbUpdateCommand(db: Command): void;
|
|
11
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/database/update.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CA+GzD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notion-cli db update <db-id> --file <file.csv>
|
|
3
|
+
*
|
|
4
|
+
* Update existing pages in a Notion database from CSV rows.
|
|
5
|
+
* All rows must have a _notion_id column value.
|
|
6
|
+
*
|
|
7
|
+
* This command is NOT idempotent (applies updates each run).
|
|
8
|
+
*/
|
|
9
|
+
import {} from 'commander';
|
|
10
|
+
import { readFileSync } from 'node:fs';
|
|
11
|
+
import { getClient, resolveDataSourceId } from '../../lib/client.js';
|
|
12
|
+
import { csvToRows } from '../../lib/csv.js';
|
|
13
|
+
import { buildNotionProperties } from '../../lib/db-properties.js';
|
|
14
|
+
import { printSuccess, printError, isJsonMode } from '../../lib/output.js';
|
|
15
|
+
import { isDryRun } from '../../lib/safety.js';
|
|
16
|
+
import { withRateLimit } from '../../lib/rate-limit.js';
|
|
17
|
+
import { parseNotionId } from '../../utils/id.js';
|
|
18
|
+
import {} from '../../lib/types.js';
|
|
19
|
+
import { toCliError, ValidationError } from '../../lib/errors.js';
|
|
20
|
+
import * as logger from '../../utils/logger.js';
|
|
21
|
+
import { isFullPage } from '@notionhq/client';
|
|
22
|
+
export function registerDbUpdateCommand(db) {
|
|
23
|
+
db.command('update')
|
|
24
|
+
.description('Update existing pages in a Notion database from CSV rows.')
|
|
25
|
+
.argument('<db-id>', 'Notion database ID or URL')
|
|
26
|
+
.requiredOption('-f, --file <path>', 'Path to CSV file')
|
|
27
|
+
.action(async (rawId, cmdOpts) => {
|
|
28
|
+
try {
|
|
29
|
+
const opts = db.optsWithGlobals();
|
|
30
|
+
const rawIdParsed = parseNotionId(rawId);
|
|
31
|
+
const client = getClient(opts.token);
|
|
32
|
+
const dbId = await resolveDataSourceId(client, rawIdParsed);
|
|
33
|
+
const csvContent = readFileSync(cmdOpts.file, 'utf-8');
|
|
34
|
+
const rows = csvToRows(csvContent);
|
|
35
|
+
if (rows.length === 0) {
|
|
36
|
+
throw new ValidationError('CSV file contains no data rows.');
|
|
37
|
+
}
|
|
38
|
+
const rowsWithoutId = rows.filter((r) => r.id === undefined);
|
|
39
|
+
if (rowsWithoutId.length > 0) {
|
|
40
|
+
throw new ValidationError(`All rows must have a _notion_id. Found ${String(rowsWithoutId.length)} row(s) without _notion_id. Use "db insert" for new rows.`);
|
|
41
|
+
}
|
|
42
|
+
const dataSource = await withRateLimit(() => client.dataSources.retrieve({ data_source_id: dbId }), 'dataSources.retrieve');
|
|
43
|
+
const schemaProps = dataSource.properties;
|
|
44
|
+
logger.info(`Update: ${String(rows.length)} rows to update.`);
|
|
45
|
+
if (isDryRun(opts.dryRun)) {
|
|
46
|
+
if (isJsonMode()) {
|
|
47
|
+
printSuccess({
|
|
48
|
+
databaseId: dbId,
|
|
49
|
+
toUpdate: rows.length,
|
|
50
|
+
dryRun: true,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
logger.info(`Dry run: Would update ${String(rows.length)} rows in database ${dbId}.`);
|
|
55
|
+
}
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
let updated = 0;
|
|
59
|
+
let failed = 0;
|
|
60
|
+
await Promise.all(rows.map(async (row) => {
|
|
61
|
+
try {
|
|
62
|
+
const csvProperties = buildNotionProperties(row.properties, schemaProps);
|
|
63
|
+
// Fetch existing page properties for merge
|
|
64
|
+
const pageResponse = await withRateLimit(() => client.pages.retrieve({ page_id: row.id ?? '' }), 'pages.retrieve');
|
|
65
|
+
let existingProperties = {};
|
|
66
|
+
if (isFullPage(pageResponse)) {
|
|
67
|
+
existingProperties = pageResponse.properties;
|
|
68
|
+
}
|
|
69
|
+
// Merge: existing properties as base, CSV values overwrite
|
|
70
|
+
const mergedProperties = {
|
|
71
|
+
...existingProperties,
|
|
72
|
+
...csvProperties,
|
|
73
|
+
};
|
|
74
|
+
await withRateLimit(() => client.pages.update({
|
|
75
|
+
page_id: row.id ?? '',
|
|
76
|
+
properties: mergedProperties,
|
|
77
|
+
}), 'pages.update');
|
|
78
|
+
updated++;
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
failed++;
|
|
82
|
+
logger.warn(`Failed to update row ${row.id ?? 'unknown'}: ${String(err)}`);
|
|
83
|
+
}
|
|
84
|
+
}));
|
|
85
|
+
const result = {
|
|
86
|
+
databaseId: dbId,
|
|
87
|
+
updated,
|
|
88
|
+
failed,
|
|
89
|
+
total: rows.length,
|
|
90
|
+
};
|
|
91
|
+
if (isJsonMode()) {
|
|
92
|
+
printSuccess(result);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
logger.success(`Update complete: ${String(updated)} updated, ${String(failed)} failed.`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
const cliErr = toCliError(err);
|
|
100
|
+
printError(cliErr.code, cliErr.message);
|
|
101
|
+
process.exitCode = cliErr.exitCode;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/database/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notion-cli page create --parent <id> --file <path>
|
|
3
|
+
*
|
|
4
|
+
* Create a new Notion page from Markdown content.
|
|
5
|
+
* The page is created as a child of the specified parent page or database.
|
|
6
|
+
*
|
|
7
|
+
* This command is NOT idempotent (creates a new page each time).
|
|
8
|
+
*/
|
|
9
|
+
import { type Command } from 'commander';
|
|
10
|
+
export declare function registerPageCreateCommand(page: Command): void;
|
|
11
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/page/create.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CA6F7D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notion-cli page create --parent <id> --file <path>
|
|
3
|
+
*
|
|
4
|
+
* Create a new Notion page from Markdown content.
|
|
5
|
+
* The page is created as a child of the specified parent page or database.
|
|
6
|
+
*
|
|
7
|
+
* This command is NOT idempotent (creates a new page each time).
|
|
8
|
+
*/
|
|
9
|
+
import {} from 'commander';
|
|
10
|
+
import { readFileSync } from 'node:fs';
|
|
11
|
+
import { getClient } from '../../lib/client.js';
|
|
12
|
+
import { markdownToNotionBlocks, extractTitle } from '../../lib/markdown.js';
|
|
13
|
+
import { markdownToRichText } from '@tryfabric/martian';
|
|
14
|
+
import { printSuccess, printError, isJsonMode } from '../../lib/output.js';
|
|
15
|
+
import { isDryRun } from '../../lib/safety.js';
|
|
16
|
+
import { withRateLimit } from '../../lib/rate-limit.js';
|
|
17
|
+
import { parseNotionId } from '../../utils/id.js';
|
|
18
|
+
import { unescapeString } from '../../utils/string.js';
|
|
19
|
+
import {} from '../../lib/types.js';
|
|
20
|
+
import { toCliError, ValidationError } from '../../lib/errors.js';
|
|
21
|
+
import * as logger from '../../utils/logger.js';
|
|
22
|
+
export function registerPageCreateCommand(page) {
|
|
23
|
+
page
|
|
24
|
+
.command('create')
|
|
25
|
+
.description('Create a new Notion page from Markdown.')
|
|
26
|
+
.requiredOption('--parent <id>', 'Parent page or database ID')
|
|
27
|
+
.option('-f, --file <path>', 'Path to Markdown file')
|
|
28
|
+
.option('--content <markdown>', 'Inline Markdown content')
|
|
29
|
+
.option('--title <title>', 'Page title (overrides H1 in content)')
|
|
30
|
+
.option('--db', 'Parent is a database (creates a database entry)')
|
|
31
|
+
.action(async (cmdOpts) => {
|
|
32
|
+
try {
|
|
33
|
+
const opts = page.optsWithGlobals();
|
|
34
|
+
const parentId = parseNotionId(cmdOpts.parent);
|
|
35
|
+
const client = getClient(opts.token);
|
|
36
|
+
// Get markdown content
|
|
37
|
+
const markdown = resolveCreateContent(cmdOpts.file, cmdOpts.content);
|
|
38
|
+
const title = cmdOpts.title ?? extractTitle(markdown);
|
|
39
|
+
const blocks = markdownToNotionBlocks(markdown);
|
|
40
|
+
logger.info(`Creating page "${title}" with ${String(blocks.length)} blocks.`);
|
|
41
|
+
if (isDryRun(opts.dryRun)) {
|
|
42
|
+
if (isJsonMode()) {
|
|
43
|
+
printSuccess({ parentId, title, blocksCount: blocks.length, dryRun: true });
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
logger.info(`Dry run: Would create page "${title}" under parent ${parentId}.`);
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Build the create request
|
|
51
|
+
const titleRichText = markdownToRichText(title);
|
|
52
|
+
const parent = cmdOpts.db === true
|
|
53
|
+
? { database_id: parentId }
|
|
54
|
+
: { page_id: parentId };
|
|
55
|
+
const properties = cmdOpts.db === true
|
|
56
|
+
? { title: { title: titleRichText } }
|
|
57
|
+
: { title: { title: titleRichText } };
|
|
58
|
+
// Create page (with first 100 blocks)
|
|
59
|
+
const firstChunk = blocks.slice(0, 100);
|
|
60
|
+
const createResult = await withRateLimit(() => client.pages.create({
|
|
61
|
+
parent: parent,
|
|
62
|
+
properties,
|
|
63
|
+
children: firstChunk,
|
|
64
|
+
}), 'pages.create');
|
|
65
|
+
// Append remaining blocks in chunks
|
|
66
|
+
for (let i = 100; i < blocks.length; i += 100) {
|
|
67
|
+
const chunk = blocks.slice(i, i + 100);
|
|
68
|
+
await withRateLimit(() => client.blocks.children.append({
|
|
69
|
+
block_id: createResult.id,
|
|
70
|
+
children: chunk,
|
|
71
|
+
}), 'blocks.children.append');
|
|
72
|
+
}
|
|
73
|
+
const result = {
|
|
74
|
+
pageId: createResult.id,
|
|
75
|
+
title,
|
|
76
|
+
url: createResult['url'] ?? '',
|
|
77
|
+
blocksWritten: blocks.length,
|
|
78
|
+
};
|
|
79
|
+
if (isJsonMode()) {
|
|
80
|
+
printSuccess(result);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
logger.success(`Created page: ${title} (${createResult.id})`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
const cliErr = toCliError(err);
|
|
88
|
+
printError(cliErr.code, cliErr.message);
|
|
89
|
+
process.exitCode = cliErr.exitCode;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
function resolveCreateContent(filePath, inlineContent) {
|
|
94
|
+
if (filePath !== undefined) {
|
|
95
|
+
return readFileSync(filePath, 'utf-8');
|
|
96
|
+
}
|
|
97
|
+
if (inlineContent !== undefined) {
|
|
98
|
+
return unescapeString(inlineContent);
|
|
99
|
+
}
|
|
100
|
+
throw new ValidationError('No content provided. Use --file or --content.');
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/page/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notion-cli page list [--query <text>]
|
|
3
|
+
*
|
|
4
|
+
* Search/list Notion pages accessible to the integration.
|
|
5
|
+
*
|
|
6
|
+
* This command is idempotent and read-only.
|
|
7
|
+
*/
|
|
8
|
+
import { type Command } from 'commander';
|
|
9
|
+
export declare function registerPageListCommand(page: Command): void;
|
|
10
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/page/list.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CA+E3D"}
|