@hardlydifficult/document-generator 1.0.2 → 1.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/dist/Document.d.ts +125 -1
- package/dist/Document.d.ts.map +1 -1
- package/dist/Document.js +216 -0
- package/dist/Document.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +35 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/Document.d.ts
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
|
-
import type { Block } from './types.js';
|
|
1
|
+
import type { Block, DocumentOptions, KeyValueOptions, TruncatedListOptions, TimestampOptions } from './types.js';
|
|
2
2
|
export declare class Document {
|
|
3
3
|
private blocks;
|
|
4
|
+
/**
|
|
5
|
+
* Create a new Document, optionally with initial content.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Empty document
|
|
10
|
+
* const doc = new Document();
|
|
11
|
+
*
|
|
12
|
+
* // Document with initial content
|
|
13
|
+
* const doc = new Document({
|
|
14
|
+
* header: 'Report Title',
|
|
15
|
+
* sections: [
|
|
16
|
+
* { title: 'Summary', content: 'All systems operational' },
|
|
17
|
+
* { content: 'No issues found' },
|
|
18
|
+
* ],
|
|
19
|
+
* context: { Network: 'mainnet', Status: 'active' },
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
constructor(options?: DocumentOptions);
|
|
24
|
+
/**
|
|
25
|
+
* Truncate text to a maximum length with ellipsis.
|
|
26
|
+
*/
|
|
27
|
+
static truncate(text: string, maxLength: number): string;
|
|
4
28
|
header(text: string): this;
|
|
5
29
|
text(content: string): this;
|
|
6
30
|
list(items: string[]): this;
|
|
@@ -9,8 +33,108 @@ export declare class Document {
|
|
|
9
33
|
link(text: string, url: string): this;
|
|
10
34
|
code(content: string): this;
|
|
11
35
|
image(url: string, alt?: string): this;
|
|
36
|
+
/**
|
|
37
|
+
* Add a section with header and divider.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* doc.section('Customer Details').text('Name: Alice');
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
section(title: string): this;
|
|
45
|
+
/**
|
|
46
|
+
* Add key-value pairs formatted as **Key:** value.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* doc.keyValue({ Network: 'mainnet', Status: 'active' });
|
|
51
|
+
* // Output: **Network:** mainnet\n**Status:** active
|
|
52
|
+
*
|
|
53
|
+
* doc.keyValue({ Name: 'Alice', Role: 'Admin' }, { style: 'bullet' });
|
|
54
|
+
* // Output: • **Name:** Alice\n• **Role:** Admin
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
keyValue(data: Record<string, string | number | boolean | undefined>, options?: KeyValueOptions): this;
|
|
58
|
+
/**
|
|
59
|
+
* Add a list with automatic truncation and "X more" message.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* doc.truncatedList(['a', 'b', 'c', 'd', 'e', 'f'], { limit: 3 });
|
|
64
|
+
* // Output:
|
|
65
|
+
* // • a
|
|
66
|
+
* // • b
|
|
67
|
+
* // • c
|
|
68
|
+
* // _... and 3 more_
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
truncatedList<T>(items: T[], options?: TruncatedListOptions<T>): this;
|
|
72
|
+
/**
|
|
73
|
+
* Add a timestamp in context format.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* doc.timestamp(); // 🕐 2024-02-04T12:00:00.000Z
|
|
78
|
+
* doc.timestamp({ emoji: false }); // 2024-02-04T12:00:00.000Z
|
|
79
|
+
* doc.timestamp({ prefix: 'Generated' }); // Generated 2024-02-04T...
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
timestamp(options?: TimestampOptions): this;
|
|
83
|
+
/**
|
|
84
|
+
* Conditionally add content to the document.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* doc.if(hasErrors, d => d.section('Errors').list(errors));
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
if(condition: boolean, callback: (doc: this) => void): this;
|
|
92
|
+
/**
|
|
93
|
+
* Add content only if the array is not empty.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* doc.ifNotEmpty(warnings, (d, items) => d.section('Warnings').list(items));
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
ifNotEmpty<T>(items: T[], callback: (doc: this, items: T[]) => void): this;
|
|
101
|
+
/**
|
|
102
|
+
* Iterate over items and add content for each.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* doc.forEach(users, (d, user, i) => d.text(`${i + 1}. ${user.name}`));
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
forEach<T>(items: T[], callback: (doc: this, item: T, index: number) => void): this;
|
|
110
|
+
/**
|
|
111
|
+
* Check if the document has no content.
|
|
112
|
+
*/
|
|
113
|
+
isEmpty(): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Create a shallow copy of the document.
|
|
116
|
+
*/
|
|
117
|
+
clone(): Document;
|
|
118
|
+
/**
|
|
119
|
+
* Get the raw blocks array.
|
|
120
|
+
*/
|
|
12
121
|
getBlocks(): Block[];
|
|
122
|
+
/**
|
|
123
|
+
* Convert document to markdown string.
|
|
124
|
+
*/
|
|
13
125
|
toMarkdown(): string;
|
|
126
|
+
/**
|
|
127
|
+
* Convert document to plain text string.
|
|
128
|
+
*/
|
|
14
129
|
toPlainText(): string;
|
|
15
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Factory function to create a new Document.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* const message = doc().header('Title').text('Content');
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
export declare function doc(options?: DocumentOptions): Document;
|
|
16
140
|
//# sourceMappingURL=Document.d.ts.map
|
package/dist/Document.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Document.d.ts","sourceRoot":"","sources":["../src/Document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,
|
|
1
|
+
{"version":3,"file":"Document.d.ts","sourceRoot":"","sources":["../src/Document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EASL,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAIpB,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAe;IAE7B;;;;;;;;;;;;;;;;;;OAkBG;gBACS,OAAO,CAAC,EAAE,eAAe;IAoBrC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IASxD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS1B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAS3B,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS3B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAUrC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAW3B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IActC;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5B;;;;;;;;;;;OAWG;IACH,QAAQ,CACN,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,EAC3D,OAAO,GAAE,eAAoB,GAC5B,IAAI;IAgBP;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GAAG,IAAI;IAyBzE;;;;;;;;;OASG;IACH,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,IAAI;IAe/C;;;;;;;OAOG;IACH,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;IAO3D;;;;;;;OAOG;IACH,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,GAAG,IAAI;IAO1E;;;;;;;OAOG;IACH,OAAO,CAAC,CAAC,EACP,KAAK,EAAE,CAAC,EAAE,EACV,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACpD,IAAI;IASP;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,KAAK,IAAI,QAAQ;IAMjB;;OAEG;IACH,SAAS,IAAI,KAAK,EAAE;IAIpB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB;AAED;;;;;;;GAOG;AACH,wBAAgB,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,QAAQ,CAEvD"}
|
package/dist/Document.js
CHANGED
|
@@ -1,10 +1,60 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Document = void 0;
|
|
4
|
+
exports.doc = doc;
|
|
4
5
|
const markdown_js_1 = require("./outputters/markdown.js");
|
|
5
6
|
const plainText_js_1 = require("./outputters/plainText.js");
|
|
6
7
|
class Document {
|
|
7
8
|
blocks = [];
|
|
9
|
+
/**
|
|
10
|
+
* Create a new Document, optionally with initial content.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Empty document
|
|
15
|
+
* const doc = new Document();
|
|
16
|
+
*
|
|
17
|
+
* // Document with initial content
|
|
18
|
+
* const doc = new Document({
|
|
19
|
+
* header: 'Report Title',
|
|
20
|
+
* sections: [
|
|
21
|
+
* { title: 'Summary', content: 'All systems operational' },
|
|
22
|
+
* { content: 'No issues found' },
|
|
23
|
+
* ],
|
|
24
|
+
* context: { Network: 'mainnet', Status: 'active' },
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
constructor(options) {
|
|
29
|
+
if (options) {
|
|
30
|
+
if (options.header) {
|
|
31
|
+
this.header(options.header);
|
|
32
|
+
}
|
|
33
|
+
if (options.sections) {
|
|
34
|
+
for (const section of options.sections) {
|
|
35
|
+
if (section.title) {
|
|
36
|
+
this.section(section.title);
|
|
37
|
+
}
|
|
38
|
+
this.text(section.content);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (options.context) {
|
|
42
|
+
this.divider();
|
|
43
|
+
this.keyValue(options.context);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Truncate text to a maximum length with ellipsis.
|
|
49
|
+
*/
|
|
50
|
+
static truncate(text, maxLength) {
|
|
51
|
+
if (text.length <= maxLength)
|
|
52
|
+
return text;
|
|
53
|
+
return `${text.slice(0, maxLength - 3)}...`;
|
|
54
|
+
}
|
|
55
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
56
|
+
// Core block methods
|
|
57
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
8
58
|
header(text) {
|
|
9
59
|
const block = {
|
|
10
60
|
type: 'header',
|
|
@@ -72,15 +122,181 @@ class Document {
|
|
|
72
122
|
this.blocks.push(block);
|
|
73
123
|
return this;
|
|
74
124
|
}
|
|
125
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
126
|
+
// Convenience methods
|
|
127
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
128
|
+
/**
|
|
129
|
+
* Add a section with header and divider.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* doc.section('Customer Details').text('Name: Alice');
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
section(title) {
|
|
137
|
+
return this.header(title).divider();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Add key-value pairs formatted as **Key:** value.
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* doc.keyValue({ Network: 'mainnet', Status: 'active' });
|
|
145
|
+
* // Output: **Network:** mainnet\n**Status:** active
|
|
146
|
+
*
|
|
147
|
+
* doc.keyValue({ Name: 'Alice', Role: 'Admin' }, { style: 'bullet' });
|
|
148
|
+
* // Output: • **Name:** Alice\n• **Role:** Admin
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
keyValue(data, options = {}) {
|
|
152
|
+
const { style = 'plain', separator = ':', bold = true } = options;
|
|
153
|
+
const entries = Object.entries(data).filter(([, v]) => v !== undefined);
|
|
154
|
+
if (entries.length === 0)
|
|
155
|
+
return this;
|
|
156
|
+
const lines = entries.map(([key, value], i) => {
|
|
157
|
+
const formattedKey = bold ? `**${key}**` : key;
|
|
158
|
+
const prefix = style === 'bullet' ? '• ' : style === 'numbered' ? `${i + 1}. ` : '';
|
|
159
|
+
return `${prefix}${formattedKey}${separator} ${value}`;
|
|
160
|
+
});
|
|
161
|
+
return this.text(lines.join('\n'));
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Add a list with automatic truncation and "X more" message.
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```typescript
|
|
168
|
+
* doc.truncatedList(['a', 'b', 'c', 'd', 'e', 'f'], { limit: 3 });
|
|
169
|
+
* // Output:
|
|
170
|
+
* // • a
|
|
171
|
+
* // • b
|
|
172
|
+
* // • c
|
|
173
|
+
* // _... and 3 more_
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
truncatedList(items, options = {}) {
|
|
177
|
+
const { limit = 10, format = (item) => String(item), moreText = (n) => `_... and ${n} more_`, ordered = false, } = options;
|
|
178
|
+
if (items.length === 0)
|
|
179
|
+
return this;
|
|
180
|
+
const visible = items.slice(0, limit);
|
|
181
|
+
const remaining = items.length - limit;
|
|
182
|
+
const lines = visible.map((item, i) => {
|
|
183
|
+
const prefix = ordered ? `${i + 1}. ` : '• ';
|
|
184
|
+
return `${prefix}${format(item, i)}`;
|
|
185
|
+
});
|
|
186
|
+
if (remaining > 0) {
|
|
187
|
+
lines.push(moreText(remaining));
|
|
188
|
+
}
|
|
189
|
+
return this.text(lines.join('\n'));
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Add a timestamp in context format.
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```typescript
|
|
196
|
+
* doc.timestamp(); // 🕐 2024-02-04T12:00:00.000Z
|
|
197
|
+
* doc.timestamp({ emoji: false }); // 2024-02-04T12:00:00.000Z
|
|
198
|
+
* doc.timestamp({ prefix: 'Generated' }); // Generated 2024-02-04T...
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
timestamp(options = {}) {
|
|
202
|
+
const { date = new Date(), emoji = true, prefix } = options;
|
|
203
|
+
const iso = date.toISOString();
|
|
204
|
+
const text = prefix
|
|
205
|
+
? `${prefix} ${iso}`
|
|
206
|
+
: emoji
|
|
207
|
+
? `🕐 ${iso}`
|
|
208
|
+
: iso;
|
|
209
|
+
return this.context(text);
|
|
210
|
+
}
|
|
211
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
212
|
+
// Conditional and iteration methods
|
|
213
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
214
|
+
/**
|
|
215
|
+
* Conditionally add content to the document.
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```typescript
|
|
219
|
+
* doc.if(hasErrors, d => d.section('Errors').list(errors));
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
if(condition, callback) {
|
|
223
|
+
if (condition) {
|
|
224
|
+
callback(this);
|
|
225
|
+
}
|
|
226
|
+
return this;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Add content only if the array is not empty.
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
* ```typescript
|
|
233
|
+
* doc.ifNotEmpty(warnings, (d, items) => d.section('Warnings').list(items));
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
236
|
+
ifNotEmpty(items, callback) {
|
|
237
|
+
if (items.length > 0) {
|
|
238
|
+
callback(this, items);
|
|
239
|
+
}
|
|
240
|
+
return this;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Iterate over items and add content for each.
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* ```typescript
|
|
247
|
+
* doc.forEach(users, (d, user, i) => d.text(`${i + 1}. ${user.name}`));
|
|
248
|
+
* ```
|
|
249
|
+
*/
|
|
250
|
+
forEach(items, callback) {
|
|
251
|
+
items.forEach((item, i) => callback(this, item, i));
|
|
252
|
+
return this;
|
|
253
|
+
}
|
|
254
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
255
|
+
// Utility methods
|
|
256
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
257
|
+
/**
|
|
258
|
+
* Check if the document has no content.
|
|
259
|
+
*/
|
|
260
|
+
isEmpty() {
|
|
261
|
+
return this.blocks.length === 0;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Create a shallow copy of the document.
|
|
265
|
+
*/
|
|
266
|
+
clone() {
|
|
267
|
+
const copy = new Document();
|
|
268
|
+
copy.blocks = [...this.blocks];
|
|
269
|
+
return copy;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Get the raw blocks array.
|
|
273
|
+
*/
|
|
75
274
|
getBlocks() {
|
|
76
275
|
return this.blocks;
|
|
77
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* Convert document to markdown string.
|
|
279
|
+
*/
|
|
78
280
|
toMarkdown() {
|
|
79
281
|
return (0, markdown_js_1.toMarkdown)(this.blocks);
|
|
80
282
|
}
|
|
283
|
+
/**
|
|
284
|
+
* Convert document to plain text string.
|
|
285
|
+
*/
|
|
81
286
|
toPlainText() {
|
|
82
287
|
return (0, plainText_js_1.toPlainText)(this.blocks);
|
|
83
288
|
}
|
|
84
289
|
}
|
|
85
290
|
exports.Document = Document;
|
|
291
|
+
/**
|
|
292
|
+
* Factory function to create a new Document.
|
|
293
|
+
*
|
|
294
|
+
* @example
|
|
295
|
+
* ```typescript
|
|
296
|
+
* const message = doc().header('Title').text('Content');
|
|
297
|
+
* ```
|
|
298
|
+
*/
|
|
299
|
+
function doc(options) {
|
|
300
|
+
return new Document(options);
|
|
301
|
+
}
|
|
86
302
|
//# sourceMappingURL=Document.js.map
|
package/dist/Document.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Document.js","sourceRoot":"","sources":["../src/Document.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Document.js","sourceRoot":"","sources":["../src/Document.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { Document } from './Document.js';
|
|
2
|
-
export type { Block, HeaderBlock, TextBlock, ListBlock, DividerBlock, ContextBlock, LinkBlock, CodeBlock, ImageBlock, Platform, } from './types.js';
|
|
1
|
+
export { Document, doc } from './Document.js';
|
|
2
|
+
export type { Block, HeaderBlock, TextBlock, ListBlock, DividerBlock, ContextBlock, LinkBlock, CodeBlock, ImageBlock, Platform, DocumentOptions, DocumentSection, KeyValueOptions, TruncatedListOptions, TimestampOptions, } from './types.js';
|
|
3
3
|
export { toMarkdown } from './outputters/markdown.js';
|
|
4
4
|
export { toPlainText } from './outputters/plainText.js';
|
|
5
5
|
export { convertMarkdown, stripMarkdown } from './markdownConverter.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAG9C,YAAY,EACV,KAAK,EACL,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EAER,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.stripMarkdown = exports.convertMarkdown = exports.toPlainText = exports.toMarkdown = exports.Document = void 0;
|
|
4
|
-
// Main class
|
|
3
|
+
exports.stripMarkdown = exports.convertMarkdown = exports.toPlainText = exports.toMarkdown = exports.doc = exports.Document = void 0;
|
|
4
|
+
// Main class and factory
|
|
5
5
|
var Document_js_1 = require("./Document.js");
|
|
6
6
|
Object.defineProperty(exports, "Document", { enumerable: true, get: function () { return Document_js_1.Document; } });
|
|
7
|
+
Object.defineProperty(exports, "doc", { enumerable: true, get: function () { return Document_js_1.doc; } });
|
|
7
8
|
// Outputters (for direct use)
|
|
8
9
|
var markdown_js_1 = require("./outputters/markdown.js");
|
|
9
10
|
Object.defineProperty(exports, "toMarkdown", { enumerable: true, get: function () { return markdown_js_1.toMarkdown; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,6CAA8C;AAArC,uGAAA,QAAQ,OAAA;AAAE,kGAAA,GAAG,OAAA;AAsBtB,8BAA8B;AAC9B,wDAAsD;AAA7C,yGAAA,UAAU,OAAA;AACnB,0DAAwD;AAA/C,2GAAA,WAAW,OAAA;AAEpB,6CAA6C;AAC7C,+DAAwE;AAA/D,uHAAA,eAAe,OAAA;AAAE,qHAAA,aAAa,OAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -34,4 +34,39 @@ export interface ImageBlock {
|
|
|
34
34
|
url: string;
|
|
35
35
|
alt?: string;
|
|
36
36
|
}
|
|
37
|
+
export interface DocumentSection {
|
|
38
|
+
title?: string;
|
|
39
|
+
content: string;
|
|
40
|
+
}
|
|
41
|
+
export interface DocumentOptions {
|
|
42
|
+
header?: string;
|
|
43
|
+
sections?: DocumentSection[];
|
|
44
|
+
context?: Record<string, string | number | boolean | undefined>;
|
|
45
|
+
}
|
|
46
|
+
export interface KeyValueOptions {
|
|
47
|
+
/** List style: plain (default), bullet, or numbered */
|
|
48
|
+
style?: 'plain' | 'bullet' | 'numbered';
|
|
49
|
+
/** Separator between key and value. Default: ':' */
|
|
50
|
+
separator?: string;
|
|
51
|
+
/** Whether to bold keys. Default: true */
|
|
52
|
+
bold?: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface TruncatedListOptions<T = string> {
|
|
55
|
+
/** Maximum items to show. Default: 10 */
|
|
56
|
+
limit?: number;
|
|
57
|
+
/** Custom formatter for each item. Default: String(item) */
|
|
58
|
+
format?: (item: T, index: number) => string;
|
|
59
|
+
/** Custom "more" text. Default: "_... and N more_" */
|
|
60
|
+
moreText?: (remaining: number) => string;
|
|
61
|
+
/** Use numbered list instead of bullets. Default: false */
|
|
62
|
+
ordered?: boolean;
|
|
63
|
+
}
|
|
64
|
+
export interface TimestampOptions {
|
|
65
|
+
/** Custom date to use. Default: new Date() */
|
|
66
|
+
date?: Date;
|
|
67
|
+
/** Include clock emoji. Default: true */
|
|
68
|
+
emoji?: boolean;
|
|
69
|
+
/** Custom prefix text */
|
|
70
|
+
prefix?: string;
|
|
71
|
+
}
|
|
37
72
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;AAEtE,MAAM,MAAM,KAAK,GACb,WAAW,GACX,SAAS,GACT,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;AAEtE,MAAM,MAAM,KAAK,GACb,WAAW,GACX,SAAS,GACT,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CACjE;AAGD,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACxC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAGD,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,MAAM;IAC9C,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,sDAAsD;IACtD,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|