@hardlydifficult/text 1.0.11 → 1.0.13

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @hardlydifficult/text
2
2
 
3
- Text utilities for error formatting, template replacement, chunking, and line numbering.
3
+ Text utilities for error formatting, template replacement, chunking, slugification, duration formatting, YAML/JSON conversion, linkification, and line numbering.
4
4
 
5
5
  ## Installation
6
6
 
@@ -8,25 +8,35 @@ Text utilities for error formatting, template replacement, chunking, and line nu
8
8
  npm install @hardlydifficult/text
9
9
  ```
10
10
 
11
- ## API
11
+ ## Usage
12
+
13
+ ```typescript
14
+ import * as text from "@hardlydifficult/text";
15
+
16
+ // Quick example
17
+ const output = text.replaceTemplate("Hello {{name}}!", { name: "World" });
18
+ console.log(output); // "Hello World!"
19
+ ```
20
+
21
+ ## Error Handling
12
22
 
13
23
  ### `getErrorMessage(err: unknown): string`
14
24
 
15
- Extract a message string from an unknown error. Returns `err.message` for `Error` instances, `String(err)` otherwise.
25
+ Extract a message string from an unknown error.
16
26
 
17
27
  ```typescript
18
28
  import { getErrorMessage } from "@hardlydifficult/text";
19
29
 
20
30
  try {
21
- await riskyOperation();
31
+ throw new Error("Something went wrong");
22
32
  } catch (err) {
23
- console.error(getErrorMessage(err));
33
+ console.error(getErrorMessage(err)); // "Something went wrong"
24
34
  }
25
35
  ```
26
36
 
27
37
  ### `formatError(err: unknown, context?: string): string`
28
38
 
29
- Format an error for user-facing output. Prepends an optional context prefix.
39
+ Format an error with an optional context prefix.
30
40
 
31
41
  ```typescript
32
42
  import { formatError } from "@hardlydifficult/text";
@@ -37,11 +47,19 @@ formatError(new Error("not found")); // "not found"
37
47
 
38
48
  ### `formatErrorForLog(err: unknown): string`
39
49
 
40
- Format an error for logging. Returns the message for `Error` instances, `String(err)` otherwise.
50
+ Format an error for logging. Returns `err.message` for `Error` instances, `String(err)` otherwise.
51
+
52
+ ```typescript
53
+ import { formatErrorForLog } from "@hardlydifficult/text";
54
+
55
+ formatErrorForLog(new Error("Database error")); // "Database error"
56
+ ```
57
+
58
+ ## Template Replacement
41
59
 
42
60
  ### `replaceTemplate(template: string, values: Record<string, string>): string`
43
61
 
44
- Replace `{{variable}}` placeholders with provided values. Unmatched placeholders are left as-is.
62
+ Replace `{{variable}}` placeholders with provided values.
45
63
 
46
64
  ```typescript
47
65
  import { replaceTemplate } from "@hardlydifficult/text";
@@ -55,7 +73,7 @@ replaceTemplate("Hello {{name}}, welcome to {{place}}!", {
55
73
 
56
74
  ### `extractPlaceholders(template: string): string[]`
57
75
 
58
- Extract all unique placeholder names from a template.
76
+ Extract all unique placeholder names from a template string.
59
77
 
60
78
  ```typescript
61
79
  import { extractPlaceholders } from "@hardlydifficult/text";
@@ -63,33 +81,49 @@ import { extractPlaceholders } from "@hardlydifficult/text";
63
81
  extractPlaceholders("{{name}} is in {{place}}"); // ["name", "place"]
64
82
  ```
65
83
 
84
+ ## Text Processing
85
+
66
86
  ### `chunkText(text: string, maxLength: number): string[]`
67
87
 
68
- Split text into chunks of at most `maxLength` characters. Prefers breaking on newlines, then spaces, and falls back to hard breaks.
88
+ Split text into chunks of at most `maxLength` characters, preferring line breaks and spaces.
69
89
 
70
90
  ```typescript
71
91
  import { chunkText } from "@hardlydifficult/text";
72
92
 
73
- const chunks = chunkText(longMessage, 2000);
74
- for (const chunk of chunks) {
75
- await channel.send(chunk);
76
- }
93
+ const text = "Line 1\nLine 2\nThis is a very long line that needs to be chunked.";
94
+ const chunks = chunkText(text, 20);
95
+ // ["Line 1\nLine 2", "This is a very", "long line that", "needs to be", "chunked."]
77
96
  ```
78
97
 
79
98
  ### `slugify(input: string, maxLength?: number): string`
80
99
 
81
- Convert a string to a URL/filename-safe slug. Lowercases, replaces non-alphanumeric runs with hyphens, truncates at word boundaries.
100
+ Convert a string to a URL/filename-safe slug.
82
101
 
83
102
  ```typescript
84
103
  import { slugify } from "@hardlydifficult/text";
85
104
 
86
105
  slugify("My Feature Name!"); // "my-feature-name"
87
106
  slugify("My Feature Name!", 10); // "my-feature"
107
+ slugify(" spaces & symbols! "); // "spaces-symbols"
108
+ ```
109
+
110
+ ### `formatWithLineNumbers(content: string, startLine?: number): string`
111
+
112
+ Format text content with right-aligned line numbers.
113
+
114
+ ```typescript
115
+ import { formatWithLineNumbers } from "@hardlydifficult/text";
116
+
117
+ formatWithLineNumbers("foo\nbar\nbaz");
118
+ // " 1: foo\n 2: bar\n 3: baz"
119
+
120
+ formatWithLineNumbers("hello\nworld", 10);
121
+ // "10: hello\n11: world"
88
122
  ```
89
123
 
90
124
  ### `formatDuration(ms: number): string`
91
125
 
92
- Format milliseconds as a short human-readable duration. Shows at most two units, skipping trailing zeros.
126
+ Format milliseconds as a human-readable duration string.
93
127
 
94
128
  ```typescript
95
129
  import { formatDuration } from "@hardlydifficult/text";
@@ -100,9 +134,11 @@ formatDuration(500); // "<1s"
100
134
  formatDuration(90_000_000); // "1d 1h"
101
135
  ```
102
136
 
103
- ### `convertFormat(content: string, to: TextFormat): string`
137
+ ## Format Conversion
104
138
 
105
- Convert between JSON and YAML string formats. Auto-detects the input format and serializes to the requested output format.
139
+ ### `convertFormat(content: string, to: "json" | "yaml"): string`
140
+
141
+ Convert between JSON and YAML string formats with automatic input detection.
106
142
 
107
143
  ```typescript
108
144
  import { convertFormat } from "@hardlydifficult/text";
@@ -120,74 +156,72 @@ convertFormat("name: Alice\nage: 30", "json");
120
156
  // }
121
157
  ```
122
158
 
123
- The function tries to parse as JSON first, then falls back to YAML. Returns pretty-printed JSON with 2-space indent or clean YAML. Throws a descriptive error if the input is neither valid JSON nor YAML.
124
-
125
- ### `formatWithLineNumbers(content: string, startLine?: number): string`
159
+ ### `formatYaml(data: any): string`
126
160
 
127
- Format text content with right-aligned line numbers. Each line is prefixed with its line number, padded to align properly based on the maximum line number.
161
+ Serialize data to clean YAML, using block literals for long strings containing colons.
128
162
 
129
163
  ```typescript
130
- import { formatWithLineNumbers } from "@hardlydifficult/text";
164
+ import { formatYaml } from "@hardlydifficult/text";
131
165
 
132
- // Default: starts at line 1
133
- formatWithLineNumbers("foo\nbar\nbaz");
134
- // 1: foo
135
- // 2: bar
136
- // 3: baz
166
+ formatYaml({ message: "Hello: World" });
167
+ // "message: >\n Hello: World"
168
+ ```
137
169
 
138
- // Custom starting line for displaying file ranges
139
- formatWithLineNumbers("hello\nworld", 10);
140
- // 10: hello
141
- // 11: world
170
+ ### `healYaml(dirtyYaml: string): string`
142
171
 
143
- // Proper alignment for larger line numbers
144
- formatWithLineNumbers("line 1\nline 2\n...\nline 100", 98);
145
- // 98: line 1
146
- // 99: line 2
147
- // 100: ...
148
- // 101: line 100
172
+ Clean malformed YAML by stripping code fences and quoting problematic scalars containing colons.
173
+
174
+ ```typescript
175
+ import { healYaml } from "@hardlydifficult/text";
176
+
177
+ healYaml('message: "Hello: World"'); // "message: >\n Hello: World"
149
178
  ```
150
179
 
151
- This is useful for displaying code snippets, file contents, or log output with line numbers for reference.
180
+ ## Link Generation
152
181
 
153
- ### `createLinker(rules?)`
182
+ ### `createLinker(rules?: LinkRule[]): { linkText(text: string, options?: LinkOptions): string; apply: typeof linkText }`
154
183
 
155
- Create a reusable linker that turns matched text patterns into platform-specific links.
184
+ Create a configurable linker to transform text patterns into platform-specific links.
156
185
 
157
186
  Supports:
158
-
159
- - plain strings
160
- - idempotent re-runs (won't double-link existing linked text)
161
- - skipping code spans/backticks and existing links by default
162
- - deterministic conflict handling (priority, then longest match, then rule order)
187
+ - Plain strings
188
+ - Idempotent re-runs
189
+ - Automatic skipping of code spans and existing links
190
+ - Deterministic conflict resolution (priority, then longest match, then rule order)
163
191
 
164
192
  ```typescript
165
193
  import { createLinker } from "@hardlydifficult/text";
166
194
 
167
195
  const linker = createLinker()
168
196
  .linear("fairmint")
169
- .githubPr("Fairmint/api")
170
- .custom(/\bINC-\d+\b/g, ({ match }) => `https://incident.io/${match}`);
197
+ .githubPr("Fairmint/api");
171
198
 
172
- const slack = linker.linkText("Fix ENG-533 and PR#42", { format: "slack" });
199
+ linker.linkText("Fix ENG-533 and PR#42", { format: "slack" });
173
200
  // "Fix <https://linear.app/fairmint/issue/ENG-533|ENG-533> and <https://github.com/Fairmint/api/pull/42|PR#42>"
201
+
202
+ linker.linkText("Fix ENG-533 and PR#42", { format: "markdown" });
203
+ // "[ENG-533](https://linear.app/fairmint/issue/ENG-533) and [PR#42](https://github.com/Fairmint/api/pull/42)"
174
204
  ```
175
205
 
176
- You can also pass rules up front:
206
+ Supported formats: `slack` (`<url|text>`), `markdown`/`discord` (`[text](url)`), `plaintext` (raw URL).
207
+
208
+ ## File Tree Rendering
209
+
210
+ ### `buildFileTree(files: string[], options?: FileTreeOptions): string`
211
+
212
+ Build and render a hierarchical file tree with depth-based truncation and directory collapsing.
177
213
 
178
214
  ```typescript
179
- const linker = createLinker([
180
- {
181
- pattern: /\b([A-Z]{2,6}-\d+)\b/g,
182
- href: "https://linear.app/fairmint/issue/$1",
183
- },
184
- ]);
185
- ```
215
+ import { buildFileTree } from "@hardlydifficult/text";
186
216
 
187
- Formats:
217
+ const files = [
218
+ "src/index.ts",
219
+ "src/utils.ts",
220
+ "src/components/Button.tsx",
221
+ ];
188
222
 
189
- - `slack` → `<url|text>`
190
- - `markdown` / `discord` `[text](url)`
191
- - `plaintext` → raw `url`
223
+ buildFileTree(files);
224
+ // "src/\n├── index.ts\n├── utils.ts\n└── components/\n └── Button.tsx"
225
+ ```
192
226
 
193
- `linker.apply(text, options)` is an alias of `linker.linkText(text, options)`.
227
+ Options include `maxDepth`, `maxDirectories`, and `collapseDirectories` for controlling tree rendering behavior.
@@ -1 +1 @@
1
- {"version":3,"file":"buildFileTree.d.ts","sourceRoot":"","sources":["../src/buildFileTree.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,mHAAmH;IACnH,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACjD,sGAAsG;IACtG,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CACvC,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,WAAW,CAAC,CAIlD,CAAC;AAiCF;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CAiGR"}
1
+ {"version":3,"file":"buildFileTree.d.ts","sourceRoot":"","sources":["../src/buildFileTree.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,mHAAmH;IACnH,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACjD,sGAAsG;IACtG,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CACvC,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,WAAW,CAAC,CAIlD,CAAC;AAiCF;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CAoGR"}
@@ -94,6 +94,9 @@ function buildFileTree(filePaths, options = {}) {
94
94
  const truncated = sorted.length > limit;
95
95
  const toShow = truncated ? sorted.slice(0, limit) : sorted;
96
96
  for (const child of toShow) {
97
+ if (depth === 1 && lines.length > 0) {
98
+ lines.push("");
99
+ }
97
100
  const marker = child.isDir ? "/" : "";
98
101
  const annotation = annotations?.get(child.fullPath) ?? "";
99
102
  const suffix = annotation !== "" ? ` — ${annotation}` : "";
@@ -1 +1 @@
1
- {"version":3,"file":"buildFileTree.js","sourceRoot":"","sources":["../src/buildFileTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildFileTree.js","sourceRoot":"","sources":["../src/buildFileTree.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hardlydifficult/text",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "files": [