@promptbook/markdown-utils 0.101.0-0 β†’ 0.101.0-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/esm/index.es.js +32 -5
  2. package/esm/index.es.js.map +1 -1
  3. package/esm/typings/src/_packages/components.index.d.ts +4 -0
  4. package/esm/typings/src/book-components/Chat/examples/ChatMarkdownDemo.d.ts +16 -0
  5. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.d.ts +21 -0
  6. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.test.d.ts +1 -0
  7. package/esm/typings/src/utils/markdown/escapeMarkdownBlock.d.ts +2 -0
  8. package/esm/typings/src/utils/markdown/humanizeAiText.d.ts +1 -0
  9. package/esm/typings/src/utils/markdown/humanizeAiTextEllipsis.d.ts +1 -0
  10. package/esm/typings/src/utils/markdown/humanizeAiTextEmdashed.d.ts +1 -0
  11. package/esm/typings/src/utils/markdown/humanizeAiTextQuotes.d.ts +1 -0
  12. package/esm/typings/src/utils/markdown/humanizeAiTextWhitespace.d.ts +1 -0
  13. package/esm/typings/src/utils/markdown/prettifyMarkdown.d.ts +8 -0
  14. package/esm/typings/src/utils/markdown/promptbookifyAiText.d.ts +1 -0
  15. package/esm/typings/src/utils/normalization/capitalize.d.ts +2 -0
  16. package/esm/typings/src/utils/normalization/decapitalize.d.ts +3 -1
  17. package/esm/typings/src/utils/normalization/normalizeTo_SCREAMING_CASE.d.ts +2 -0
  18. package/esm/typings/src/utils/normalization/normalizeTo_snake_case.d.ts +2 -0
  19. package/esm/typings/src/utils/normalization/normalizeWhitespaces.d.ts +2 -0
  20. package/esm/typings/src/utils/normalization/removeDiacritics.d.ts +2 -0
  21. package/esm/typings/src/utils/parseNumber.d.ts +1 -0
  22. package/esm/typings/src/utils/removeEmojis.d.ts +2 -0
  23. package/esm/typings/src/utils/removeQuotes.d.ts +1 -0
  24. package/esm/typings/src/utils/serialization/deepClone.d.ts +1 -0
  25. package/esm/typings/src/utils/trimCodeBlock.d.ts +1 -0
  26. package/esm/typings/src/utils/validators/url/isValidUrl.d.ts +1 -0
  27. package/esm/typings/src/utils/validators/uuid/isValidUuid.d.ts +2 -0
  28. package/esm/typings/src/version.d.ts +1 -1
  29. package/package.json +1 -1
  30. package/umd/index.umd.js +37 -9
  31. package/umd/index.umd.js.map +1 -1
@@ -16,6 +16,8 @@ import { LlmChat } from '../book-components/Chat/LlmChat/LlmChat';
16
16
  import type { LlmChatProps } from '../book-components/Chat/LlmChat/LlmChatProps';
17
17
  import type { ChatMessage } from '../book-components/Chat/types/ChatMessage';
18
18
  import type { ChatParticipant } from '../book-components/Chat/types/ChatParticipant';
19
+ import { renderMarkdown } from '../book-components/Chat/utils/renderMarkdown';
20
+ import { isMarkdownContent } from '../book-components/Chat/utils/renderMarkdown';
19
21
  export { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION };
20
22
  export type { AvatarChipProps };
21
23
  export { AvatarChip };
@@ -34,3 +36,5 @@ export { LlmChat };
34
36
  export type { LlmChatProps };
35
37
  export type { ChatMessage };
36
38
  export type { ChatParticipant };
39
+ export { renderMarkdown };
40
+ export { isMarkdownContent };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Demo component showing Chat with markdown rendering capabilities
3
+ *
4
+ * This example demonstrates various markdown features supported by the Chat component:
5
+ * - Headers
6
+ * - Bold and italic text
7
+ * - Code blocks and inline code
8
+ * - Lists (ordered and unordered)
9
+ * - Links
10
+ * - Blockquotes
11
+ * - Tables
12
+ * - Strikethrough text
13
+ *
14
+ * @private temporary for testing purposes
15
+ */
16
+ export declare function ChatMarkdownDemo(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import type { string_html, string_markdown } from '../../../types/typeAliases';
2
+ /**
3
+ * Convert markdown content to HTML for display in chat messages
4
+ *
5
+ * @param markdown - The markdown content to convert
6
+ * @returns HTML string ready for rendering
7
+ *
8
+ * @public exported from `@promptbook/components`
9
+ * <- TODO: [🧠] Maybe export from `@promptbook/markdown-utils`
10
+ */
11
+ export declare function renderMarkdown(markdown: string_markdown): string_html;
12
+ /**
13
+ * Check if content appears to be markdown (contains markdown syntax)
14
+ *
15
+ * @param content - Content to check
16
+ * @returns true if content appears to contain markdown syntax
17
+ *
18
+ * @public exported from `@promptbook/components`
19
+ * <- TODO: [🧠] Maybe export from `@promptbook/markdown-utils`
20
+ */
21
+ export declare function isMarkdownContent(content: string): boolean;
@@ -3,6 +3,8 @@ import type { string_markdown_text } from '../../types/typeAliases';
3
3
  * Function escapeMarkdownBlock will escape markdown block if needed
4
4
  * It is useful when you want have block in block
5
5
  *
6
+ * Note: [πŸ”‚] This function is idempotent.
7
+ *
6
8
  * @public exported from `@promptbook/markdown-utils`
7
9
  */
8
10
  export declare function escapeMarkdownBlock(value: string_markdown_text): string_markdown_text;
@@ -2,6 +2,7 @@ import { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Function `humanizeAiText` will remove traces of AI text generation artifacts
4
4
  *
5
+ * Note: [πŸ”‚] This function is idempotent.
5
6
  * Tip: If you want more control, look for other functions for example `humanizeAiTextEmdashed` exported `@promptbook/markdown-utils`
6
7
  *
7
8
  * @public exported from `@promptbook/markdown-utils`
@@ -2,6 +2,7 @@ import { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change ellipsis character to three dots `…` -> `...`
4
4
  *
5
+ * Note: [πŸ”‚] This function is idempotent.
5
6
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6
7
  *
7
8
  * @public exported from `@promptbook/markdown-utils`
@@ -2,6 +2,7 @@ import { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change em-dashes to regular dashes `β€”` -> `-`
4
4
  *
5
+ * Note: [πŸ”‚] This function is idempotent.
5
6
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6
7
  *
7
8
  * @public exported from `@promptbook/markdown-utils`
@@ -2,6 +2,7 @@ import { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change smart quotes to regular quotes
4
4
  *
5
+ * Note: [πŸ”‚] This function is idempotent.
5
6
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6
7
  *
7
8
  * @public exported from `@promptbook/markdown-utils`
@@ -2,6 +2,7 @@ import { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change unprintable hard spaces to regular spaces
4
4
  *
5
+ * Note: [πŸ”‚] This function is idempotent.
5
6
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6
7
  *
7
8
  * @public exported from `@promptbook/markdown-utils`
@@ -7,3 +7,11 @@ import type { string_html } from '../../types/typeAliases';
7
7
  * @private withing the package because of HUGE size of prettier dependency
8
8
  */
9
9
  export declare function prettifyMarkdown<TContent extends string_html>(content: TContent): TContent;
10
+ /**
11
+ * Async version of prettifyMarkdown using dynamic imports
12
+ *
13
+ * @param content raw html code
14
+ * @returns formatted html code
15
+ * @private withing the package because of HUGE size of prettier dependency
16
+ */
17
+ export declare function prettifyMarkdownAsync<TContent extends string_html>(content: TContent): Promise<TContent>;
@@ -6,6 +6,7 @@ import { string_markdown } from '../../types/typeAliases';
6
6
  */
7
7
  export declare function promptbookifyAiText(text: string_markdown): string_markdown;
8
8
  /**
9
+ * TODO: !!!!! Make the function idempotent and add "Note: [πŸ”‚] This function is idempotent."
9
10
  * TODO: [πŸ…ΎοΈ]!!! Use this across the project where AI text is involved
10
11
  * TODO: [🧠][✌️] Make some Promptbook-native token system
11
12
  */
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Makes first letter of a string uppercase
3
3
  *
4
+ * Note: [πŸ”‚] This function is idempotent.
5
+ *
4
6
  * @public exported from `@promptbook/utils`
5
7
  */
6
8
  export declare function capitalize(word: string): string;
@@ -1,5 +1,7 @@
1
1
  /**
2
- * Makes first letter of a string uppercase
2
+ * Makes first letter of a string lowercase
3
+ *
4
+ * Note: [πŸ”‚] This function is idempotent.
3
5
  *
4
6
  * @public exported from `@promptbook/utils`
5
7
  */
@@ -9,6 +9,8 @@ export type string_SCREAMING_CASE = string;
9
9
  /**
10
10
  * Normalizes a text string to SCREAMING_CASE (all uppercase with underscores).
11
11
  *
12
+ * Note: [πŸ”‚] This function is idempotent.
13
+ *
12
14
  * @param text The text string to be converted to SCREAMING_CASE format.
13
15
  * @returns The normalized text in SCREAMING_CASE format.
14
16
  * @example 'HELLO_WORLD'
@@ -8,6 +8,8 @@ export type string_snake_case = string;
8
8
  /**
9
9
  * Normalizes a text string to snake_case format.
10
10
  *
11
+ * Note: [πŸ”‚] This function is idempotent.
12
+ *
11
13
  * @param text The text string to be converted to snake_case format.
12
14
  * @returns The normalized text in snake_case format.
13
15
  * @example 'hello_world'
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Take every whitespace (space, new line, tab) and replace it with a single space
3
3
  *
4
+ * Note: [πŸ”‚] This function is idempotent.
5
+ *
4
6
  * @public exported from `@promptbook/utils`
5
7
  */
6
8
  export declare function normalizeWhitespaces(sentence: string): string;
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Removes diacritic marks (accents) from characters in a string.
3
3
  *
4
+ * Note: [πŸ”‚] This function is idempotent.
5
+ *
4
6
  * @param input The string containing diacritics to be normalized.
5
7
  * @returns The string with diacritics removed or normalized.
6
8
  * @public exported from `@promptbook/utils`
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Function parseNumber will parse number from string
3
3
  *
4
+ * Note: [πŸ”‚] This function is idempotent.
4
5
  * Unlike Number.parseInt, Number.parseFloat it will never ever result in NaN
5
6
  * Note: it also works only with decimal numbers
6
7
  *
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Removes emojis from a string and fix whitespaces
3
3
  *
4
+ * Note: [πŸ”‚] This function is idempotent.
5
+ *
4
6
  * @param text with emojis
5
7
  * @returns text without emojis
6
8
  * @public exported from `@promptbook/utils`
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Removes quotes from a string
3
3
  *
4
+ * Note: [πŸ”‚] This function is idempotent.
4
5
  * Tip: This is very useful for post-processing of the result of the LLM model
5
6
  * Note: This function removes only the same quotes from the beginning and the end of the string
6
7
  * Note: There are two similar functions:
@@ -2,6 +2,7 @@ import type { WritableDeep } from 'type-fest';
2
2
  /**
3
3
  * Creates a deep clone of the given object
4
4
  *
5
+ * Note: [πŸ”‚] This function is idempotent.
5
6
  * Note: This method only works for objects that are fully serializable to JSON and do not contain functions, Dates, or special types.
6
7
  *
7
8
  * @param objectValue The object to clone.
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Function trimCodeBlock will trim starting and ending code block from the string if it is present.
3
3
  *
4
+ * Note: [πŸ”‚] This function is idempotent.
4
5
  * Note: This is useful for post-processing of the result of the chat LLM model
5
6
  * when the model wraps the result in the (markdown) code block.
6
7
  *
@@ -3,6 +3,7 @@ import type { really_unknown } from '../../organization/really_unknown';
3
3
  /**
4
4
  * Tests if given string is valid URL.
5
5
  *
6
+ * Note: [πŸ”‚] This function is idempotent.
6
7
  * Note: Dataurl are considered perfectly valid.
7
8
  * Note: There are two similar functions:
8
9
  * - `isValidUrl` which tests any URL
@@ -3,6 +3,8 @@ import type { really_unknown } from '../../organization/really_unknown';
3
3
  /**
4
4
  * Checks if value is valid uuid
5
5
  *
6
+ * Note: [πŸ”‚] This function is idempotent.
7
+ *
6
8
  * @public exported from `@promptbook/utils`
7
9
  */
8
10
  export declare function isValidUuid(value: really_unknown): value is string_uuid;
@@ -15,7 +15,7 @@ export declare const BOOK_LANGUAGE_VERSION: string_semantic_version;
15
15
  export declare const PROMPTBOOK_ENGINE_VERSION: string_promptbook_version;
16
16
  /**
17
17
  * Represents the version string of the Promptbook engine.
18
- * It follows semantic versioning (e.g., `0.100.4-0`).
18
+ * It follows semantic versioning (e.g., `0.101.0-0`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/markdown-utils",
3
- "version": "0.101.0-0",
3
+ "version": "0.101.0-1",
4
4
  "description": "Promptbook: Run AI apps in plain human language across multiple models and platforms",
5
5
  "private": false,
6
6
  "sideEffects": false,
package/umd/index.umd.js CHANGED
@@ -1,14 +1,12 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('spacetrim'), require('prettier/parser-html'), require('prettier/parser-markdown'), require('prettier/standalone'), require('crypto'), require('rxjs'), require('waitasecond'), require('crypto-js/enc-hex'), require('crypto-js/sha256'), require('path'), require('crypto-js'), require('mime-types'), require('papaparse')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'spacetrim', 'prettier/parser-html', 'prettier/parser-markdown', 'prettier/standalone', 'crypto', 'rxjs', 'waitasecond', 'crypto-js/enc-hex', 'crypto-js/sha256', 'path', 'crypto-js', 'mime-types', 'papaparse'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-markdown-utils"] = {}, global.spaceTrim, global.parserHtml, global.parserMarkdown, global.standalone, global.crypto, global.rxjs, global.waitasecond, global.hexEncoder, global.sha256, global.path, global.cryptoJs, global.mimeTypes, global.papaparse));
5
- })(this, (function (exports, spaceTrim, parserHtml, parserMarkdown, standalone, crypto, rxjs, waitasecond, hexEncoder, sha256, path, cryptoJs, mimeTypes, papaparse) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('spacetrim'), require('crypto'), require('rxjs'), require('waitasecond'), require('crypto-js/enc-hex'), require('crypto-js/sha256'), require('path'), require('crypto-js'), require('mime-types'), require('papaparse')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'spacetrim', 'crypto', 'rxjs', 'waitasecond', 'crypto-js/enc-hex', 'crypto-js/sha256', 'path', 'crypto-js', 'mime-types', 'papaparse'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-markdown-utils"] = {}, global.spaceTrim, global.crypto, global.rxjs, global.waitasecond, global.hexEncoder, global.sha256, global.path, global.cryptoJs, global.mimeTypes, global.papaparse));
5
+ })(this, (function (exports, spaceTrim, crypto, rxjs, waitasecond, hexEncoder, sha256, path, cryptoJs, mimeTypes, papaparse) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
9
9
  var spaceTrim__default = /*#__PURE__*/_interopDefaultLegacy(spaceTrim);
10
- var parserHtml__default = /*#__PURE__*/_interopDefaultLegacy(parserHtml);
11
- var parserMarkdown__default = /*#__PURE__*/_interopDefaultLegacy(parserMarkdown);
12
10
  var hexEncoder__default = /*#__PURE__*/_interopDefaultLegacy(hexEncoder);
13
11
  var sha256__default = /*#__PURE__*/_interopDefaultLegacy(sha256);
14
12
 
@@ -26,7 +24,7 @@
26
24
  * @generated
27
25
  * @see https://github.com/webgptorg/promptbook
28
26
  */
29
- const PROMPTBOOK_ENGINE_VERSION = '0.101.0-0';
27
+ const PROMPTBOOK_ENGINE_VERSION = '0.101.0-1';
30
28
  /**
31
29
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
32
30
  * Note: [πŸ’ž] Ignore a discrepancy between file name and entity name
@@ -51,6 +49,8 @@
51
49
  /**
52
50
  * Makes first letter of a string uppercase
53
51
  *
52
+ * Note: [πŸ”‚] This function is idempotent.
53
+ *
54
54
  * @public exported from `@promptbook/utils`
55
55
  */
56
56
  function capitalize(word) {
@@ -642,6 +642,7 @@
642
642
  /**
643
643
  * Tests if given string is valid URL.
644
644
  *
645
+ * Note: [πŸ”‚] This function is idempotent.
645
646
  * Note: Dataurl are considered perfectly valid.
646
647
  * Note: There are two similar functions:
647
648
  * - `isValidUrl` which tests any URL
@@ -705,10 +706,20 @@
705
706
  * @private withing the package because of HUGE size of prettier dependency
706
707
  */
707
708
  function prettifyMarkdown(content) {
709
+ // In browser/Next.js environments, just return the original content
710
+ // since prettier parsers are not available and would cause bundling issues
711
+ if (typeof window !== 'undefined') {
712
+ return content;
713
+ }
708
714
  try {
709
- return standalone.format(content, {
715
+ // Use dynamic require to avoid static imports that cause bundling issues
716
+ // This will only work in Node.js environments
717
+ const prettierStandalone = eval('require')('prettier/standalone');
718
+ const parserMarkdown = eval('require')('prettier/parser-markdown');
719
+ const parserHtml = eval('require')('prettier/parser-html');
720
+ return prettierStandalone.format(content, {
710
721
  parser: 'markdown',
711
- plugins: [parserMarkdown__default["default"], parserHtml__default["default"]],
722
+ plugins: [parserMarkdown, parserHtml],
712
723
  // TODO: DRY - make some import or auto-copy of .prettierrc
713
724
  endOfLine: 'lf',
714
725
  tabWidth: 4,
@@ -1054,6 +1065,7 @@
1054
1065
  /**
1055
1066
  * Creates a deep clone of the given object
1056
1067
  *
1068
+ * Note: [πŸ”‚] This function is idempotent.
1057
1069
  * Note: This method only works for objects that are fully serializable to JSON and do not contain functions, Dates, or special types.
1058
1070
  *
1059
1071
  * @param objectValue The object to clone.
@@ -2989,6 +3001,8 @@
2989
3001
  /**
2990
3002
  * Normalizes a text string to SCREAMING_CASE (all uppercase with underscores).
2991
3003
  *
3004
+ * Note: [πŸ”‚] This function is idempotent.
3005
+ *
2992
3006
  * @param text The text string to be converted to SCREAMING_CASE format.
2993
3007
  * @returns The normalized text in SCREAMING_CASE format.
2994
3008
  * @example 'HELLO_WORLD'
@@ -3044,6 +3058,8 @@
3044
3058
  /**
3045
3059
  * Normalizes a text string to snake_case format.
3046
3060
  *
3061
+ * Note: [πŸ”‚] This function is idempotent.
3062
+ *
3047
3063
  * @param text The text string to be converted to snake_case format.
3048
3064
  * @returns The normalized text in snake_case format.
3049
3065
  * @example 'hello_world'
@@ -3461,6 +3477,8 @@
3461
3477
  /**
3462
3478
  * Removes diacritic marks (accents) from characters in a string.
3463
3479
  *
3480
+ * Note: [πŸ”‚] This function is idempotent.
3481
+ *
3464
3482
  * @param input The string containing diacritics to be normalized.
3465
3483
  * @returns The string with diacritics removed or normalized.
3466
3484
  * @public exported from `@promptbook/utils`
@@ -3615,6 +3633,8 @@
3615
3633
  /**
3616
3634
  * Removes emojis from a string and fix whitespaces
3617
3635
  *
3636
+ * Note: [πŸ”‚] This function is idempotent.
3637
+ *
3618
3638
  * @param text with emojis
3619
3639
  * @returns text without emojis
3620
3640
  * @public exported from `@promptbook/utils`
@@ -6616,6 +6636,8 @@
6616
6636
  * Function escapeMarkdownBlock will escape markdown block if needed
6617
6637
  * It is useful when you want have block in block
6618
6638
  *
6639
+ * Note: [πŸ”‚] This function is idempotent.
6640
+ *
6619
6641
  * @public exported from `@promptbook/markdown-utils`
6620
6642
  */
6621
6643
  function escapeMarkdownBlock(value) {
@@ -6783,6 +6805,7 @@
6783
6805
  /**
6784
6806
  * Change ellipsis character to three dots `…` -> `...`
6785
6807
  *
6808
+ * Note: [πŸ”‚] This function is idempotent.
6786
6809
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6787
6810
  *
6788
6811
  * @public exported from `@promptbook/markdown-utils`
@@ -6797,6 +6820,7 @@
6797
6820
  /**
6798
6821
  * Change em-dashes to regular dashes `β€”` -> `-`
6799
6822
  *
6823
+ * Note: [πŸ”‚] This function is idempotent.
6800
6824
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6801
6825
  *
6802
6826
  * @public exported from `@promptbook/markdown-utils`
@@ -6811,6 +6835,7 @@
6811
6835
  /**
6812
6836
  * Change smart quotes to regular quotes
6813
6837
  *
6838
+ * Note: [πŸ”‚] This function is idempotent.
6814
6839
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6815
6840
  *
6816
6841
  * @public exported from `@promptbook/markdown-utils`
@@ -6832,6 +6857,7 @@
6832
6857
  /**
6833
6858
  * Change unprintable hard spaces to regular spaces
6834
6859
  *
6860
+ * Note: [πŸ”‚] This function is idempotent.
6835
6861
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6836
6862
  *
6837
6863
  * @public exported from `@promptbook/markdown-utils`
@@ -6846,6 +6872,7 @@
6846
6872
  /**
6847
6873
  * Function `humanizeAiText` will remove traces of AI text generation artifacts
6848
6874
  *
6875
+ * Note: [πŸ”‚] This function is idempotent.
6849
6876
  * Tip: If you want more control, look for other functions for example `humanizeAiTextEmdashed` exported `@promptbook/markdown-utils`
6850
6877
  *
6851
6878
  * @public exported from `@promptbook/markdown-utils`
@@ -6878,6 +6905,7 @@
6878
6905
  return promptbookifiedText;
6879
6906
  }
6880
6907
  /**
6908
+ * TODO: !!!!! Make the function idempotent and add "Note: [πŸ”‚] This function is idempotent."
6881
6909
  * TODO: [πŸ…ΎοΈ]!!! Use this across the project where AI text is involved
6882
6910
  * TODO: [🧠][✌️] Make some Promptbook-native token system
6883
6911
  */