@isdk/util 0.3.6 → 0.3.8

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 (64) hide show
  1. package/dist/index.d.mts +147 -23
  2. package/dist/index.d.ts +147 -23
  3. package/dist/index.js +1 -1
  4. package/dist/index.mjs +1 -1
  5. package/docs/classes/BinarySemaphore.md +25 -25
  6. package/docs/classes/ConfigFile.md +6 -6
  7. package/docs/classes/Deque.md +13 -13
  8. package/docs/classes/IntSet.md +12 -12
  9. package/docs/classes/Semaphore.md +26 -26
  10. package/docs/classes/SignalGate.md +9 -9
  11. package/docs/functions/RateLimit.md +1 -1
  12. package/docs/functions/arrayHasAll.md +1 -1
  13. package/docs/functions/extNameLevel.md +1 -1
  14. package/docs/functions/extractCodeBlock.md +51 -0
  15. package/docs/functions/extractTopLevelCodeBlocks.md +37 -0
  16. package/docs/functions/filenameReservedRegex.md +1 -1
  17. package/docs/functions/findPort.md +1 -1
  18. package/docs/functions/getMultiLevelExtname.md +1 -1
  19. package/docs/functions/glob.md +1 -1
  20. package/docs/functions/isStringIn.md +1 -1
  21. package/docs/functions/isValidFilename.md +1 -1
  22. package/docs/functions/isValidFilepath.md +1 -1
  23. package/docs/functions/normalizeIncludeFiles.md +1 -1
  24. package/docs/functions/omitDeepBy.md +1 -1
  25. package/docs/functions/omitEmptyDeep.md +1 -1
  26. package/docs/functions/parseCodeBlockSelector.md +34 -0
  27. package/docs/functions/parseFrontMatter.md +1 -1
  28. package/docs/functions/parseYaml.md +1 -1
  29. package/docs/functions/reControlCharsRegex.md +1 -1
  30. package/docs/functions/registerYamlTag.md +1 -1
  31. package/docs/functions/removeLeadingEmptyLines.md +1 -1
  32. package/docs/functions/sanitizeFilename.md +1 -1
  33. package/docs/functions/sanitizeFilepath.md +1 -1
  34. package/docs/functions/sleep.md +1 -1
  35. package/docs/functions/stringifyYaml.md +1 -1
  36. package/docs/functions/toCamelCase.md +1 -1
  37. package/docs/functions/toCapitalCase.md +1 -1
  38. package/docs/functions/toPascalCase.md +1 -1
  39. package/docs/functions/traverseFolder.md +1 -1
  40. package/docs/functions/traverseFolderSync.md +1 -1
  41. package/docs/functions/yieldExec.md +1 -1
  42. package/docs/globals.md +7 -0
  43. package/docs/interfaces/BinarySemaphoreAcquireOptions.md +2 -2
  44. package/docs/interfaces/BinarySemaphoreOptions.md +5 -5
  45. package/docs/interfaces/BinarySemaphoreReleaseOptions.md +2 -2
  46. package/docs/interfaces/BinarySemaphoreReleaserFunc.md +3 -3
  47. package/docs/interfaces/CodeBlockSelectorPart.md +36 -0
  48. package/docs/interfaces/CodeString.md +1712 -0
  49. package/docs/interfaces/ExtractCodeBlockOptions.md +64 -0
  50. package/docs/interfaces/IncludeFiles.md +3 -3
  51. package/docs/interfaces/LoadConfigFileOptions.md +3 -3
  52. package/docs/interfaces/SanitizeFilenameOptions.md +3 -3
  53. package/docs/interfaces/SemaphoreOptions.md +7 -7
  54. package/docs/interfaces/SemaphoreTaskItem.md +5 -5
  55. package/docs/type-aliases/CodeBlockCombinator.md +18 -0
  56. package/docs/type-aliases/SemaphoreIsReadyFuncType.md +1 -1
  57. package/docs/type-aliases/StringifyFunc.md +1 -1
  58. package/docs/type-aliases/TraverseFolderHandler.md +1 -1
  59. package/docs/type-aliases/TraverseFolderSyncHandler.md +1 -1
  60. package/docs/variables/DefaultAllTextFiles.md +1 -1
  61. package/docs/variables/DefaultAsyncSemaphoreCapacity.md +1 -1
  62. package/docs/variables/FilenameReservedRegex.md +1 -1
  63. package/docs/variables/WindowsReservedNameRegex.md +1 -1
  64. package/package.json +2 -1
package/dist/index.d.mts CHANGED
@@ -138,14 +138,14 @@ declare function glob(filepath: string, pattern: string[], rootDir?: string): bo
138
138
  * @returns Returns `true` if the string is found, otherwise `false`.
139
139
  *
140
140
  * @example
141
- * ```typescript
142
- * const result = isStringIn("apple", ["banana", "apple", "cherry"]);
143
- * console.log(result); // true
144
- *
145
- * const singleResult = isStringIn("hello", "hello");
146
- * console.log(singleResult); // true
147
- * ```
148
- */
141
+ * ```typescript
142
+ * const result = isStringIn("apple", ["banana", "apple", "cherry"]);
143
+ * console.log(result); // true
144
+ *
145
+ * const singleResult = isStringIn("hello", "hello");
146
+ * console.log(singleResult); // true
147
+ * ```
148
+ */
149
149
  declare function isStringIn(str: string, arr: string[] | string): boolean;
150
150
 
151
151
  declare const DefaultAllTextFiles: string[];
@@ -395,9 +395,9 @@ declare function reControlCharsRegex(): RegExp;
395
395
  * @returns True if the filename is valid, false otherwise.
396
396
  * @throws {TypeError} If the input is not a string.
397
397
  * @example
398
- * isValidFilename('myFile.txt'); // Returns true
399
- * isValidFilename('my<file.txt'); // Returns false
400
- */
398
+ * isValidFilename('myFile.txt'); // Returns true
399
+ * isValidFilename('my<file.txt'); // Returns false
400
+ */
401
401
  declare function isValidFilename(filename: string): boolean | "";
402
402
  /**
403
403
  * Validates whether the given filepath is valid.
@@ -436,17 +436,17 @@ declare function sanitizeFilepath(filepath: string, options?: SanitizeFilenameOp
436
436
  * @returns The level of the extension name, which is the count of dots minus one.
437
437
  *
438
438
  * @example
439
- * ```typescript
440
- * // Returns 0
441
- * extNameLevel("no-file-ext");
442
- *
443
- * // Returns 2
444
- * extNameLevel(".tar.gz");
445
- *
446
- * // Returns 1
447
- * extNameLevel(".json5");
448
- * ```
449
- */
439
+ * ```typescript
440
+ * // Returns 0
441
+ * extNameLevel("no-file-ext");
442
+ *
443
+ * // Returns 2
444
+ * extNameLevel(".tar.gz");
445
+ *
446
+ * // Returns 1
447
+ * extNameLevel(".json5");
448
+ * ```
449
+ */
450
450
  declare function extNameLevel(extName: string): number;
451
451
 
452
452
  /**
@@ -1037,4 +1037,128 @@ declare function omitDeepBy<T>(value: T, predicate: (v: any, k: string | symbol)
1037
1037
  */
1038
1038
  declare const omitEmptyDeep: <T>(value: T, omitFunc?: boolean) => any;
1039
1039
 
1040
- export { BinarySemaphore, type BinarySemaphoreAcquireOptions, type BinarySemaphoreOptions, type BinarySemaphoreReleaseOptions, type BinarySemaphoreReleaserFunc, ConfigFile, DefaultAllTextFiles, DefaultAsyncSemaphoreCapacity, Deque, FilenameReservedRegex, type IncludeFiles, IntSet, type LoadConfigFileOptions, RateLimit, type SanitizeFilenameOptions, Semaphore, type SemaphoreIsReadyFuncType, type SemaphoreOptions, type SemaphoreTaskItem, SignalGate, type StringifyFunc, type TraverseFolderHandler, type TraverseFolderSyncHandler, WindowsReservedNameRegex, arrayHasAll, extNameLevel, filenameReservedRegex, findPort, getMultiLevelExtname, glob, isStringIn, isValidFilename, isValidFilepath, normalizeIncludeFiles, omitDeepBy, omitEmptyDeep, parseFrontMatter, parseYaml, reControlCharsRegex, registerYamlTag, removeLeadingEmptyLines, sanitizeFilename, sanitizeFilepath, sleep, stringifyYaml, toCamelCase, toCapitalCase, toPascalCase, traverseFolder, traverseFolderSync, yieldExec };
1040
+ /**
1041
+ * An extension of the built-in `String` type that carries metadata about
1042
+ * the extracted code block.
1043
+ *
1044
+ * When {@link extractCodeBlock} successfully extracts a fenced code block,
1045
+ * the returned string is augmented with these properties if they are present
1046
+ * in the markdown fence.
1047
+ */
1048
+ interface CodeString extends String {
1049
+ /**
1050
+ * The programming language identifier of the code block (e.g., 'ts', 'js').
1051
+ * It is normalized to lowercase.
1052
+ */
1053
+ lang?: string;
1054
+ /**
1055
+ * Any additional metadata provided after the language identifier on the fence line.
1056
+ */
1057
+ meta?: string;
1058
+ }
1059
+ /**
1060
+ * Supported combinators for code block selectors.
1061
+ *
1062
+ * - `>` (Direct Child): Matches top-level code blocks within the current context.
1063
+ * - ` ` (Descendant): Matches all code blocks within the current context, including deeply nested ones. (Planned)
1064
+ * - `+` (Adjacent Sibling): Matches the very next code block at the same nesting level. (Planned)
1065
+ * - `~` (General Sibling): Matches all subsequent code blocks at the same nesting level. (Planned)
1066
+ */
1067
+ type CodeBlockCombinator = '>' | ' ' | '+' | '~';
1068
+ /**
1069
+ * Represents a single segment in a code block selector path.
1070
+ *
1071
+ * A path like `md > ts` is parsed into two parts:
1072
+ * 1. `{ combinator: ' ', lang: 'md' }`
1073
+ * 2. `{ combinator: '>', lang: 'ts' }`
1074
+ */
1075
+ interface CodeBlockSelectorPart {
1076
+ /**
1077
+ * The relationship to the previous segment in the path.
1078
+ * For the first segment, ' ' usually implies a search in the root context.
1079
+ */
1080
+ combinator: CodeBlockCombinator;
1081
+ /**
1082
+ * The target language identifier or alias to match.
1083
+ */
1084
+ lang: string;
1085
+ }
1086
+ /**
1087
+ * Options for extracting code blocks.
1088
+ */
1089
+ interface ExtractCodeBlockOptions {
1090
+ /**
1091
+ * Optional. The expected language identifier or a CSS-like selector path.
1092
+ * Supports aliases (e.g., 'js' for 'javascript').
1093
+ *
1094
+ * @example 'ts' - Find the last TypeScript block.
1095
+ * @example 'md > ts' - Find ts blocks inside md blocks.
1096
+ */
1097
+ lang?: string;
1098
+ /**
1099
+ * Optional. The 0-based index of the code block to extract from the final result set.
1100
+ * Supports negative indexing: -1 means the last one, -2 means the second to last, etc.
1101
+ * Defaults to -1.
1102
+ */
1103
+ index?: number;
1104
+ /**
1105
+ * Optional. If true, returns an array of all matching code blocks.
1106
+ */
1107
+ all?: boolean;
1108
+ /**
1109
+ * Optional. A map of language aliases to their normalized names.
1110
+ */
1111
+ langMap?: Record<string, string>;
1112
+ }
1113
+ /**
1114
+ * Extracts top-level fenced code blocks from the input `text`.
1115
+ *
1116
+ * This function handles nested blocks correctly by ensuring the closing fence
1117
+ * matches the length and character of the opening fence. It only scans the
1118
+ * immediate level of the provided text.
1119
+ *
1120
+ * @param text - The input string.
1121
+ * @param options - Extraction options (uses `lang` and `langMap` for filtering).
1122
+ * @returns An array of {@link CodeString} objects representing the matched blocks.
1123
+ */
1124
+ declare function extractTopLevelCodeBlocks(text: string, options?: ExtractCodeBlockOptions): CodeString[];
1125
+ /**
1126
+ * Parses a selector string into an array of structured {@link CodeBlockSelectorPart} objects.
1127
+ *
1128
+ * @example
1129
+ * ```ts
1130
+ * parseCodeBlockSelector('md > ts');
1131
+ * // => [{combinator: ' ', lang: 'md'}, {combinator: '>', lang: 'ts'}]
1132
+ * ```
1133
+ *
1134
+ * @param lang - The selector string.
1135
+ * @returns An array of parsed selector parts.
1136
+ */
1137
+ declare function parseCodeBlockSelector(lang?: string): CodeBlockSelectorPart[];
1138
+ /**
1139
+ * Extracts fenced code block(s) from the input `text`, with support for nested path selectors.
1140
+ *
1141
+ * This function acts as a query engine for Markdown code blocks. It can extract
1142
+ * single blocks, multiple blocks, or drill down into nested structures using
1143
+ * CSS-like syntax.
1144
+ *
1145
+ * @example
1146
+ * ```ts
1147
+ * // Simple extraction (last block)
1148
+ * const code = extractCodeBlock(input, 'js');
1149
+ *
1150
+ * // Nested extraction
1151
+ * const inner = extractCodeBlock(input, 'md > ts');
1152
+ *
1153
+ * // Extract all matching blocks
1154
+ * const all = extractCodeBlock(input, { lang: 'container > item', all: true });
1155
+ * ```
1156
+ *
1157
+ * @param text - The input string containing Markdown.
1158
+ * @param langOrOptions - Either a language/selector string or a full {@link ExtractCodeBlockOptions} object.
1159
+ * @returns A single {@link CodeString}, an array of {@link CodeString}s (if `all: true`),
1160
+ * or the original `text` if no matches are found at the specified index.
1161
+ */
1162
+ declare function extractCodeBlock(text: string, langOrOptions?: string | ExtractCodeBlockOptions): CodeString | string | (CodeString | string)[];
1163
+
1164
+ export { BinarySemaphore, type BinarySemaphoreAcquireOptions, type BinarySemaphoreOptions, type BinarySemaphoreReleaseOptions, type BinarySemaphoreReleaserFunc, type CodeBlockCombinator, type CodeBlockSelectorPart, type CodeString, ConfigFile, DefaultAllTextFiles, DefaultAsyncSemaphoreCapacity, Deque, type ExtractCodeBlockOptions, FilenameReservedRegex, type IncludeFiles, IntSet, type LoadConfigFileOptions, RateLimit, type SanitizeFilenameOptions, Semaphore, type SemaphoreIsReadyFuncType, type SemaphoreOptions, type SemaphoreTaskItem, SignalGate, type StringifyFunc, type TraverseFolderHandler, type TraverseFolderSyncHandler, WindowsReservedNameRegex, arrayHasAll, extNameLevel, extractCodeBlock, extractTopLevelCodeBlocks, filenameReservedRegex, findPort, getMultiLevelExtname, glob, isStringIn, isValidFilename, isValidFilepath, normalizeIncludeFiles, omitDeepBy, omitEmptyDeep, parseCodeBlockSelector, parseFrontMatter, parseYaml, reControlCharsRegex, registerYamlTag, removeLeadingEmptyLines, sanitizeFilename, sanitizeFilepath, sleep, stringifyYaml, toCamelCase, toCapitalCase, toPascalCase, traverseFolder, traverseFolderSync, yieldExec };
package/dist/index.d.ts CHANGED
@@ -138,14 +138,14 @@ declare function glob(filepath: string, pattern: string[], rootDir?: string): bo
138
138
  * @returns Returns `true` if the string is found, otherwise `false`.
139
139
  *
140
140
  * @example
141
- * ```typescript
142
- * const result = isStringIn("apple", ["banana", "apple", "cherry"]);
143
- * console.log(result); // true
144
- *
145
- * const singleResult = isStringIn("hello", "hello");
146
- * console.log(singleResult); // true
147
- * ```
148
- */
141
+ * ```typescript
142
+ * const result = isStringIn("apple", ["banana", "apple", "cherry"]);
143
+ * console.log(result); // true
144
+ *
145
+ * const singleResult = isStringIn("hello", "hello");
146
+ * console.log(singleResult); // true
147
+ * ```
148
+ */
149
149
  declare function isStringIn(str: string, arr: string[] | string): boolean;
150
150
 
151
151
  declare const DefaultAllTextFiles: string[];
@@ -395,9 +395,9 @@ declare function reControlCharsRegex(): RegExp;
395
395
  * @returns True if the filename is valid, false otherwise.
396
396
  * @throws {TypeError} If the input is not a string.
397
397
  * @example
398
- * isValidFilename('myFile.txt'); // Returns true
399
- * isValidFilename('my<file.txt'); // Returns false
400
- */
398
+ * isValidFilename('myFile.txt'); // Returns true
399
+ * isValidFilename('my<file.txt'); // Returns false
400
+ */
401
401
  declare function isValidFilename(filename: string): boolean | "";
402
402
  /**
403
403
  * Validates whether the given filepath is valid.
@@ -436,17 +436,17 @@ declare function sanitizeFilepath(filepath: string, options?: SanitizeFilenameOp
436
436
  * @returns The level of the extension name, which is the count of dots minus one.
437
437
  *
438
438
  * @example
439
- * ```typescript
440
- * // Returns 0
441
- * extNameLevel("no-file-ext");
442
- *
443
- * // Returns 2
444
- * extNameLevel(".tar.gz");
445
- *
446
- * // Returns 1
447
- * extNameLevel(".json5");
448
- * ```
449
- */
439
+ * ```typescript
440
+ * // Returns 0
441
+ * extNameLevel("no-file-ext");
442
+ *
443
+ * // Returns 2
444
+ * extNameLevel(".tar.gz");
445
+ *
446
+ * // Returns 1
447
+ * extNameLevel(".json5");
448
+ * ```
449
+ */
450
450
  declare function extNameLevel(extName: string): number;
451
451
 
452
452
  /**
@@ -1037,4 +1037,128 @@ declare function omitDeepBy<T>(value: T, predicate: (v: any, k: string | symbol)
1037
1037
  */
1038
1038
  declare const omitEmptyDeep: <T>(value: T, omitFunc?: boolean) => any;
1039
1039
 
1040
- export { BinarySemaphore, type BinarySemaphoreAcquireOptions, type BinarySemaphoreOptions, type BinarySemaphoreReleaseOptions, type BinarySemaphoreReleaserFunc, ConfigFile, DefaultAllTextFiles, DefaultAsyncSemaphoreCapacity, Deque, FilenameReservedRegex, type IncludeFiles, IntSet, type LoadConfigFileOptions, RateLimit, type SanitizeFilenameOptions, Semaphore, type SemaphoreIsReadyFuncType, type SemaphoreOptions, type SemaphoreTaskItem, SignalGate, type StringifyFunc, type TraverseFolderHandler, type TraverseFolderSyncHandler, WindowsReservedNameRegex, arrayHasAll, extNameLevel, filenameReservedRegex, findPort, getMultiLevelExtname, glob, isStringIn, isValidFilename, isValidFilepath, normalizeIncludeFiles, omitDeepBy, omitEmptyDeep, parseFrontMatter, parseYaml, reControlCharsRegex, registerYamlTag, removeLeadingEmptyLines, sanitizeFilename, sanitizeFilepath, sleep, stringifyYaml, toCamelCase, toCapitalCase, toPascalCase, traverseFolder, traverseFolderSync, yieldExec };
1040
+ /**
1041
+ * An extension of the built-in `String` type that carries metadata about
1042
+ * the extracted code block.
1043
+ *
1044
+ * When {@link extractCodeBlock} successfully extracts a fenced code block,
1045
+ * the returned string is augmented with these properties if they are present
1046
+ * in the markdown fence.
1047
+ */
1048
+ interface CodeString extends String {
1049
+ /**
1050
+ * The programming language identifier of the code block (e.g., 'ts', 'js').
1051
+ * It is normalized to lowercase.
1052
+ */
1053
+ lang?: string;
1054
+ /**
1055
+ * Any additional metadata provided after the language identifier on the fence line.
1056
+ */
1057
+ meta?: string;
1058
+ }
1059
+ /**
1060
+ * Supported combinators for code block selectors.
1061
+ *
1062
+ * - `>` (Direct Child): Matches top-level code blocks within the current context.
1063
+ * - ` ` (Descendant): Matches all code blocks within the current context, including deeply nested ones. (Planned)
1064
+ * - `+` (Adjacent Sibling): Matches the very next code block at the same nesting level. (Planned)
1065
+ * - `~` (General Sibling): Matches all subsequent code blocks at the same nesting level. (Planned)
1066
+ */
1067
+ type CodeBlockCombinator = '>' | ' ' | '+' | '~';
1068
+ /**
1069
+ * Represents a single segment in a code block selector path.
1070
+ *
1071
+ * A path like `md > ts` is parsed into two parts:
1072
+ * 1. `{ combinator: ' ', lang: 'md' }`
1073
+ * 2. `{ combinator: '>', lang: 'ts' }`
1074
+ */
1075
+ interface CodeBlockSelectorPart {
1076
+ /**
1077
+ * The relationship to the previous segment in the path.
1078
+ * For the first segment, ' ' usually implies a search in the root context.
1079
+ */
1080
+ combinator: CodeBlockCombinator;
1081
+ /**
1082
+ * The target language identifier or alias to match.
1083
+ */
1084
+ lang: string;
1085
+ }
1086
+ /**
1087
+ * Options for extracting code blocks.
1088
+ */
1089
+ interface ExtractCodeBlockOptions {
1090
+ /**
1091
+ * Optional. The expected language identifier or a CSS-like selector path.
1092
+ * Supports aliases (e.g., 'js' for 'javascript').
1093
+ *
1094
+ * @example 'ts' - Find the last TypeScript block.
1095
+ * @example 'md > ts' - Find ts blocks inside md blocks.
1096
+ */
1097
+ lang?: string;
1098
+ /**
1099
+ * Optional. The 0-based index of the code block to extract from the final result set.
1100
+ * Supports negative indexing: -1 means the last one, -2 means the second to last, etc.
1101
+ * Defaults to -1.
1102
+ */
1103
+ index?: number;
1104
+ /**
1105
+ * Optional. If true, returns an array of all matching code blocks.
1106
+ */
1107
+ all?: boolean;
1108
+ /**
1109
+ * Optional. A map of language aliases to their normalized names.
1110
+ */
1111
+ langMap?: Record<string, string>;
1112
+ }
1113
+ /**
1114
+ * Extracts top-level fenced code blocks from the input `text`.
1115
+ *
1116
+ * This function handles nested blocks correctly by ensuring the closing fence
1117
+ * matches the length and character of the opening fence. It only scans the
1118
+ * immediate level of the provided text.
1119
+ *
1120
+ * @param text - The input string.
1121
+ * @param options - Extraction options (uses `lang` and `langMap` for filtering).
1122
+ * @returns An array of {@link CodeString} objects representing the matched blocks.
1123
+ */
1124
+ declare function extractTopLevelCodeBlocks(text: string, options?: ExtractCodeBlockOptions): CodeString[];
1125
+ /**
1126
+ * Parses a selector string into an array of structured {@link CodeBlockSelectorPart} objects.
1127
+ *
1128
+ * @example
1129
+ * ```ts
1130
+ * parseCodeBlockSelector('md > ts');
1131
+ * // => [{combinator: ' ', lang: 'md'}, {combinator: '>', lang: 'ts'}]
1132
+ * ```
1133
+ *
1134
+ * @param lang - The selector string.
1135
+ * @returns An array of parsed selector parts.
1136
+ */
1137
+ declare function parseCodeBlockSelector(lang?: string): CodeBlockSelectorPart[];
1138
+ /**
1139
+ * Extracts fenced code block(s) from the input `text`, with support for nested path selectors.
1140
+ *
1141
+ * This function acts as a query engine for Markdown code blocks. It can extract
1142
+ * single blocks, multiple blocks, or drill down into nested structures using
1143
+ * CSS-like syntax.
1144
+ *
1145
+ * @example
1146
+ * ```ts
1147
+ * // Simple extraction (last block)
1148
+ * const code = extractCodeBlock(input, 'js');
1149
+ *
1150
+ * // Nested extraction
1151
+ * const inner = extractCodeBlock(input, 'md > ts');
1152
+ *
1153
+ * // Extract all matching blocks
1154
+ * const all = extractCodeBlock(input, { lang: 'container > item', all: true });
1155
+ * ```
1156
+ *
1157
+ * @param text - The input string containing Markdown.
1158
+ * @param langOrOptions - Either a language/selector string or a full {@link ExtractCodeBlockOptions} object.
1159
+ * @returns A single {@link CodeString}, an array of {@link CodeString}s (if `all: true`),
1160
+ * or the original `text` if no matches are found at the specified index.
1161
+ */
1162
+ declare function extractCodeBlock(text: string, langOrOptions?: string | ExtractCodeBlockOptions): CodeString | string | (CodeString | string)[];
1163
+
1164
+ export { BinarySemaphore, type BinarySemaphoreAcquireOptions, type BinarySemaphoreOptions, type BinarySemaphoreReleaseOptions, type BinarySemaphoreReleaserFunc, type CodeBlockCombinator, type CodeBlockSelectorPart, type CodeString, ConfigFile, DefaultAllTextFiles, DefaultAsyncSemaphoreCapacity, Deque, type ExtractCodeBlockOptions, FilenameReservedRegex, type IncludeFiles, IntSet, type LoadConfigFileOptions, RateLimit, type SanitizeFilenameOptions, Semaphore, type SemaphoreIsReadyFuncType, type SemaphoreOptions, type SemaphoreTaskItem, SignalGate, type StringifyFunc, type TraverseFolderHandler, type TraverseFolderSyncHandler, WindowsReservedNameRegex, arrayHasAll, extNameLevel, extractCodeBlock, extractTopLevelCodeBlocks, filenameReservedRegex, findPort, getMultiLevelExtname, glob, isStringIn, isValidFilename, isValidFilepath, normalizeIncludeFiles, omitDeepBy, omitEmptyDeep, parseCodeBlockSelector, parseFrontMatter, parseYaml, reControlCharsRegex, registerYamlTag, removeLeadingEmptyLines, sanitizeFilename, sanitizeFilepath, sleep, stringifyYaml, toCamelCase, toCapitalCase, toPascalCase, traverseFolder, traverseFolderSync, yieldExec };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var t,e=Object.create,i=Object.defineProperty,r=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,n=Object.getPrototypeOf,o=Object.prototype.hasOwnProperty,u=(t,e,n,u)=>{if(e&&"object"==typeof e||"function"==typeof e)for(let c of s(e))o.call(t,c)||c===n||i(t,c,{get:()=>e[c],enumerable:!(u=r(e,c))||u.enumerable});return t},c=(t,r,s)=>(s=null!=t?e(n(t)):{},u(!r&&t&&t.__esModule?s:i(s,"default",{value:t,enumerable:!0}),t)),h={};((t,e)=>{for(var r in e)i(t,r,{get:e[r],enumerable:!0})})(h,{BinarySemaphore:()=>lt,ConfigFile:()=>q,DefaultAllTextFiles:()=>R,DefaultAsyncSemaphoreCapacity:()=>ht,Deque:()=>it,FilenameReservedRegex:()=>_,IntSet:()=>rt,RateLimit:()=>pt,Semaphore:()=>mt,SignalGate:()=>yt,WindowsReservedNameRegex:()=>B,arrayHasAll:()=>tt,extNameLevel:()=>X,filenameReservedRegex:()=>W,findPort:()=>gt,getMultiLevelExtname:()=>p,glob:()=>S,isStringIn:()=>E,isValidFilename:()=>G,isValidFilepath:()=>H,normalizeIncludeFiles:()=>C,omitDeepBy:()=>bt,omitEmptyDeep:()=>xt,parseFrontMatter:()=>x,parseYaml:()=>g,reControlCharsRegex:()=>Z,registerYamlTag:()=>v,removeLeadingEmptyLines:()=>b,sanitizeFilename:()=>K,sanitizeFilepath:()=>Q,sleep:()=>st,stringifyYaml:()=>w,toCamelCase:()=>M,toCapitalCase:()=>L,toPascalCase:()=>D,traverseFolder:()=>T,traverseFolderSync:()=>z,yieldExec:()=>nt}),module.exports=(t=h,u(i({},"__esModule",{value:!0}),t));var a=require("fs"),f=c(require("path")),l=require("load-config-file"),m=c(require("path"));function p(t,e=1){let i="";for(;e--;){const e=m.default.extname(t);if(!e)break;i=e+i,t=m.default.basename(t,e)}return i}var d=require("yaml"),y=[];function v(t){Array.isArray(t)||(t=[t]);for(const e of t){-1===y.indexOf(e)&&y.push(e)}}function g(t,e){if(e)if(e.customTags){if(Array.isArray(e.customTags))e.customTags=y.concat(e.customTags);else if("function"==typeof e.customTags){const t=e.customTags;e.customTags=e=>t(y.concat(e))}}else e.customTags=y;else e={customTags:y};return(0,d.parse)(t,e)}function w(t,e){if(e)if(e.customTags){if(Array.isArray(e.customTags))e.customTags=y.concat(e.customTags);else if("function"==typeof e.customTags){const t=e.customTags;e.customTags=e=>t(y.concat(e))}}else e.customTags=y;else e={customTags:y};return(0,d.stringify)(t,e)}function b(t){const e=/^\s*(#[^\r\n]*)?[\r\n]+/;let i;for(;null!==(i=e.exec(t))&&((t=t.substring(i[0].length)).startsWith("\n")||t.startsWith("\r")||t.trimStart().startsWith("#")););return t}var F="---";function x(t,e=F){const i=e.length,r=b(t);if(r.startsWith(e)&&("\n"===r[e.length]||"\r"===r[e.length])){let t=r.indexOf("\n"+e,i);if(-1!==t){const s=r.slice(i,t);for(t+=e.length+1;"\n"===r[t]||"\r"===r[t];)t++;const n=r.slice(t);return{data:g(s)||{},content:n}}}return{data:{},content:t}}var q=class{static register(t,e,i){l.Config.register(t,e),"string"==typeof t&&(t=[t]);for(const e of t)this.stringifys[e]=i}static loadSync(t,e){return function(t,{extLevel:e=1,externalFile:i}={}){t=k(t,e);let r=l.Config.loadSync(t);if(!r&&i){if(!f.default.isAbsolute(i)){const e=f.default.dirname(t);i=f.default.join(e,i)}if((0,a.existsSync)(i)){const t=x((0,a.readFileSync)(i,"utf8")).data;Object.keys(t).length&&(r=t)}}return r}(t,e)}static saveSync(t,e,i){return function(t,e,{extLevel:i=1}={}){const r=function(t,e=1){"."===t[0]&&e++;let i=p(t,e);(!i||i.split(".").length<=1)&&(t+=".yaml",i=".yaml");const r=new String(t);return r.extname=i,r}(t,i),s=r.extname;t=r.toString();const n=q.stringifys[s];if(!n)throw new Error(`${t} unsupported mime type: ${s}`);e=n(e);const o=f.default.dirname(t);(0,a.existsSync)(o)||(0,a.mkdirSync)(o,{recursive:!0});return(0,a.writeFileSync)(t,e,{encoding:"utf8"}),t}(t,e,i)}static existsSync(t,e){return t=k(t,e?.extLevel),l.Config.existsSync(t,e)}};function k(t,e=1){"."===t[0]&&e++;const i=p(t,e);return i&&i.split(".").length>1&&(t=t.slice(0,-i.length)),t}q.stringifys={},q.register([".yml",".yaml"],g,w),q.register([".json"],function(t){return JSON.parse(t)},t=>JSON.stringify(t,null,2));var j=require("@isdk/glob"),A=c(require("path"));function S(t,e,i){return i&&(t=A.default.relative(i,t)),(0,j.globMatch)(t,e)}function E(t,e){return"string"==typeof e&&(e=[e]),-1!==e.indexOf(t)}var R=["**/*.((j|t)s?(x)|m(j|t)s)?(x)","**/*.(md|markdown|txt|?(x)htm?(l)|yaml|yml|xml|json|bat|sh|bash|zsh|ini|css|scss|less|sass|py|rb|php|go|java|c|cpp|h|hpp|hxx|rust|zig)"];function C(t,e=[]){if(t)if(Array.isArray(t))t=[...t];else{const i=t.include||[],r=t.exclude||[];0===i.length&&i.push(...e),t=[...i];for(const e of r)t.push(`!${e}`)}else t=[...e];return 0===t.length&&t.push(...e),t}var O=require("fs/promises"),$=require("fs"),P=c(require("path"));async function T(t,e){const i=await(0,O.readdir)(t,{withFileTypes:!0});for(const r of i){const i=P.default.join(t,r.name);try{if(r.isDirectory()){await e(i,r)||await T(i,e)}else{if(!0===await e(i,r))break}}catch(t){console.error(`Error processing file: ${i}`),console.error(t)}}}function z(t,e){const i=(0,$.readdirSync)(t,{withFileTypes:!0});for(const r of i){const i=P.default.join(t,r.name);try{if(r.isDirectory()){e(i,r)||T(i,e)}else{if(!0===e(i,r))break}}catch(t){console.error(`Error processing file: ${i}`),console.error(t)}}}function D(t){if(!t)return"";return t.replace(/[-_ ]+/g," ").split(" ").filter(Boolean).map(t=>{let e=t.charAt(0).toUpperCase();t=t.slice(1);let i=0;for(;/[A-Z]/.test(t[i]);)i++;return e+=i?t.slice(0,i).toLowerCase()+t.slice(i):t,e}).join("")}function M(t){return(t=D(t)).charAt(0).toLowerCase()+t.slice(1)}function L(t){if(!t)return"";return t.replace(/[-_ ]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").split(" ").filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(" ")}var N=c(require("path")),I=require("@isdk/common-error"),_=/[<>:"/\\|?*\u0000-\u001F]/,B=/^(con|prn|aux|nul|com\d|lpt\d)$/i,J=100,Y=/^\.+(\\|\/)|^\.+$/,U=/\.+$/,V=/[\u0000-\u001F\u0080-\u009F\u200E\u200F\u202A-\u202E\u2066-\u2069]/;function W(){return new RegExp(_.source,"g")}function Z(){return new RegExp(V.source,"g")}function G(t){return t&&!(_.test(t)||Z().test(t)||Y.test(t)||U.test(t))}function H(t){const e=t.split(N.default.sep);return("/"===t[0]||e[0]&&N.default.dirname(e[0])===e[0])&&e.shift(),e.every(G)}function K(t,e={}){const i=e.replacement||"!";if((_.test(i)||V.test(i))&&(0,I.throwError)("Replacement string cannot contain reserved filename characters","sanitizeFilename",I.ErrorCode.InvalidArgument),i.length>0){const e=/([<>:"/\\|?*\u0000-\u001F]){2,}/;t=t.replace(e,"$1")}if(t=(t=(t=(t=(t=t.normalize("NFD")).replace(Y,i)).replace(W(),i)).replace(Z(),i)).replace(U,""),i.length>0){"."===t[0]||"."!==t[0]||(t=i+t),"."===t[t.length-1]&&(t+=i)}t=B.test(t)?t+i:t;const r="number"==typeof e.maxLength?e.maxLength:J;if(t.length>r){const e=t.lastIndexOf(".");if(-1===e)t=t.slice(0,r);else{const i=t.slice(0,e),s=t.slice(e);t=i.slice(0,Math.max(1,r-s.length))+s}}return t}function Q(t,e={}){const i=t.split(N.default.sep);let r;("/"===t[0]||i[0]&&N.default.dirname(i[0])===i[0])&&(r=i.shift());const s=i.map(t=>K(t,e));return void 0!==r&&s.unshift(r),s.join(N.default.sep)}function X(t){return t.split(".").length-1}function tt(t,e){const i=new Set(e),r=new Set;for(const e of t)if(i.has(e)&&(r.add(e),r.size===i.size))return!0;return r.size===i.size}function et(t=0){return e=Math.min(Math.max(16,t),1073741824),e>>>=0,e-=1,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,1+(e|=e>>16);var e}var it=class extends Array{constructor(t,e){Array.isArray(t)?(super(...t),this._length=t.length,t=void 0):(super(),this._length=0),this._capacity=et(t),this._front=0,this._disableAutoResize=e}push(t){let e=this._length;this.checkCapacity(e+1);const i=this._front+e&this._capacity-1;return this[i]=t,++e<=this._capacity&&(this._length=e),i}unshift(t){let e=this._length;this.checkCapacity(++e);const i=this._capacity,r=(this._front-1&i-1^i)-i;return this[r]=t,this._front=r,e<=this._capacity&&(this._length=e),r}pop(t){let e=this._length;if(0===e)return;let i=this._front+e-1&this._capacity-1,r=this[i];for(;--e>0&&t&&null==r;)i--,r=this[i];return this[i]=void 0,this._length=e,r}shift(t){let e=this._length;if(0===e)return;let i=this._front,r=this[i];for(;--e>0&&t&&null==r;)i=i+1&this._capacity-1,r=this[i];return this[i]=void 0,this._front=i+1&this._capacity-1,this._length=e,r}get size(){return this._length}get(t){let e;if(t===(0|t)){const i=this._length;t<0&&(t+=i),t>=0&&t<i&&(e=this[this._front+t&this._capacity-1])}return e}peekBack(){const t=this._length;if(0===t)return;return this[this._front+t-1&this._capacity-1]}peekFront(){if(0!==this._length)return this[this._front]}clear(){const t=this._length,e=this._front,i=this._capacity;for(let r=0;r<t;++r)this[e+r&i-1]=void 0;this._length=0,this._front=0}isEmpty(){return 0===this._length}removeAt(t){const e=this._length;if(t<0||t>=e)return;const i=this._front,r=this._capacity-1,s=i+t&r,n=this[s];if(t<e/2)this.copyWithin(i+1&r,i,i+t&r),this[i]=void 0,this._front=i+1&r;else{this.copyWithin(s,s+1&r,i+e&r);this[i+e-1&r]=void 0}return this._length=e-1,n}checkCapacity(t){this._capacity<t&&!this._disableAutoResize&&this.resizeTo(et(1.5*this._capacity+16))}resizeTo(t){const e=this._capacity;this._capacity=t;const i=this._front,r=this._length;if(i+r>e){!function(t,e,i,r,s){for(let n=0;n<s;++n)i[n+r]=t[n+e],t[n+e]=void 0}(this,0,this,e,i+r&e-1)}}},rt=class t{constructor(t=0){this.bitField=t}static has(t,e){return!!(t&1<<e)}static add(t,e){return t|1<<e}static delete(t,e){return t&~(1<<e)}add(t){return this.bitField|=1<<t,this}delete(t){return this.bitField&=~(1<<t),this}has(e){return t.has(this.bitField,e)}clear(){return this.bitField=0,this}valueOf(){return this.bitField}toString(){return this.bitField.toString()}toJSON(){return this.bitField}};async function st(t){return new Promise(e=>setTimeout(e,t))}async function nt(){return new Promise(t=>{setImmediate(t)})}var ot=require("util-ex"),ut=require("events-ex"),ct=require("@isdk/common-error"),ht=32;function at(t){return"function"==typeof t}function ft(){return"1"}var lt=class{constructor(t={}){const{initFn:e=ft,pauseFn:i,resumeFn:r,capacity:s=ht}=t;if(at(i)!==at(r))throw new Error("pauseFn and resumeFn must be both set for pausing");this.waiting=new it(s),this.emitter=new ut.EventEmitter,this.useDefaultTokens=e===ft,this.pauseFn=i,this.resumeFn=r,this.initTokenFn=e,this.paused=!1,this._activeCount=0,this.initFree(t),this.init(t)}initFree(t){this.free=this.initTokenFn()}onReleased(t){const e=t?.token,i=this.waiting.shift(!0);i?this._dispatchTask(i,t):(this.resumeFn&&this.paused&&(this.paused=!1,this.resumeFn()),this.unlock(e))}init(t){this.emitter.on("release",t=>{this.onReleased(t)})}_newReleaser(t){let e=!1;const i=()=>{e||(e=!0,this.release(t))};return t&&Object.assign(i,t),i}_dispatchTask(t,e){const{resolve:i}=t;i(this._newReleaser(e))}lock(t){let e=this.free;if(e)return this.free=void 0,e}unlock(t){this.free=this.useDefaultTokens?"1":t??this.initTokenFn()}tryAcquire(t){return this.lock(t)}async acquire(t){this._activeCount++;const e=t?.signal,i=t=>{this.pauseFn&&!this.paused&&(this.paused=!0,this.pauseFn());const i=this.waiting.push(t),r=t.reject;return e&&e.addEventListener("abort",()=>{this.waiting[i]=void 0;const t=e.reason instanceof Error?e.reason:new ct.AbortError(e.reason||"aborted");e.alreadyRejected=!0,r(t)}),i};let r=this.tryAcquire(t);const s=r&&(0,ot.isAsync)(r),n=e=>new Promise((r,s)=>{const n={...t,resolve:r,reject:s,token:e};void 0===e?i(n):this._dispatchTask(n,{...t,token:e})});return s?r.then(t=>n(t)):n(r)}release(t){this._activeCount--,this.emitter.emit("release",t)}drain(){const t=[this.acquire()];return Promise.all(t)}abort(t){let e;for(;e=this.waiting.shift(!0);)e.reject(new ct.AbortError(t))}get activeCount(){return this._activeCount}get pendingCount(){return this.waiting.size}},mt=class extends lt{constructor(t,e){if("number"==typeof t)(e=e||{}).maxConcurrency=t;else{if("number"!=typeof(e=t).maxConcurrency)throw new Error("maxConcurrency must be set");t=e.maxConcurrency}super(e),this.maxConcurrency=e.maxConcurrency,e.isReadyFn&&(this.isReady=e.isReadyFn)}initFree(t){const e=t.maxConcurrency=Math.max(1,t.maxConcurrency);this.free=new it(e);for(let t=0;t<e;t++)this.free.push(this.initTokenFn())}tryAcquire(t){let e=this.isReady;if(e&&(0,ot.isAsync)(e)){return e instanceof Promise||(e=e()),e.then(e=>{if(e)return this.lock(t)})}if(!e||e())return this.lock(t)}unlock(t){this.free.push(this.useDefaultTokens?"1":t??this.initTokenFn())}lock(t){return this.free.pop()}drain(){const t=new Array(this.maxConcurrency);for(let e=0;e<this.maxConcurrency;e++)t[e]=this.acquire();return Promise.all(t)}};function pt(t,{timeUnit:e=1e3,uniformDistribution:i=!1}={}){const r=new mt(i?1:t),s=i?e/t:e;return async function(){await r.acquire(),setTimeout(()=>r.release(),s)}}var dt=require("@isdk/common-error"),yt=class{constructor(){this._isSignaled=!1,this.waitQueue=[]}get signaled(){return this._isSignaled}signal(t){if(this._isSignaled)return;this._isSignaled=!0,this._signalValue=t;const e=this.waitQueue.slice();for(this.waitQueue.length=0;e.length>0;){const t=e.shift();t?.resolve(this._signalValue)}}reset(){this._isSignaled=!1,this._signalValue=void 0,this.waitQueue.length=0}abort(t){if(this.waitQueue.length){const e=this.waitQueue.slice();this.waitQueue.length=0;const i=new dt.AbortError(t);for(;e.length>0;){const{reject:t}=e.shift();t(i)}}}async wait(){return new Promise((t,e)=>{this._isSignaled?t(this._signalValue):this.waitQueue.push({resolve:t,reject:e})})}},vt=c(require("net"));async function gt(t,e=10){return new Promise((i,r)=>{void 0===t?t=0:("string"==typeof t&&(t=parseInt(t)),t>=0||(t=0));const s=vt.default.createServer();s.on("error",i=>{"EADDRINUSE"===i.code&&(t++,--e>0)?s.listen(t):r(i)}),s.on("listening",async()=>{const t=s.address().port;s.close(e=>{e?r(e):i(t)})}),s.listen(t)})}var wt=require("lodash-es");function bt(t,e,i=new WeakMap){if(!(0,wt.isObject)(t)||(0,wt.isNil)(t))return t;if(i.has(t))return i.get(t);let r;if(Array.isArray(t)){r=[],i.set(t,r);const s=t.map(t=>bt(t,e,i)).filter((t,i)=>!e(t,i.toString()));return Object.assign(r,s),r.length>0?r:void 0}if((0,wt.isPlainObject)(t)){r={},i.set(t,r);const s=Reflect.ownKeys(t);for(const n of s){const s=bt(t[n],e,i);e(s,n)||(r[n]=s)}return(0,wt.isEmpty)(r)?void 0:r}return t}var Ft=require("lodash-es");var xt=(t,e)=>bt(t,t=>function(t){return!!(0,Ft.isNil)(t)||"string"==typeof t&&0===t.trim().length||!(!(0,Ft.isArray)(t)&&!(0,Ft.isPlainObject)(t))&&(0,Ft.isEmpty)(t)}(t)||e&&"function"==typeof t);
1
+ "use strict";var t,e=Object.create,s=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,i=Object.getPrototypeOf,o=Object.prototype.hasOwnProperty,c=(t,e,i,c)=>{if(e&&"object"==typeof e||"function"==typeof e)for(let u of n(e))o.call(t,u)||u===i||s(t,u,{get:()=>e[u],enumerable:!(c=r(e,u))||c.enumerable});return t},u=(t,r,n)=>(n=null!=t?e(i(t)):{},c(!r&&t&&t.__esModule?n:s(n,"default",{value:t,enumerable:!0}),t)),a={};((t,e)=>{for(var r in e)s(t,r,{get:e[r],enumerable:!0})})(a,{BinarySemaphore:()=>ft,ConfigFile:()=>F,DefaultAllTextFiles:()=>C,DefaultAsyncSemaphoreCapacity:()=>at,Deque:()=>st,FilenameReservedRegex:()=>I,IntSet:()=>rt,RateLimit:()=>pt,Semaphore:()=>mt,SignalGate:()=>yt,WindowsReservedNameRegex:()=>_,arrayHasAll:()=>tt,extNameLevel:()=>X,extractCodeBlock:()=>At,extractTopLevelCodeBlocks:()=>qt,filenameReservedRegex:()=>V,findPort:()=>vt,getMultiLevelExtname:()=>p,glob:()=>A,isStringIn:()=>E,isValidFilename:()=>Z,isValidFilepath:()=>H,normalizeIncludeFiles:()=>R,omitDeepBy:()=>wt,omitEmptyDeep:()=>kt,parseCodeBlockSelector:()=>St,parseFrontMatter:()=>k,parseYaml:()=>v,reControlCharsRegex:()=>W,registerYamlTag:()=>g,removeLeadingEmptyLines:()=>w,sanitizeFilename:()=>K,sanitizeFilepath:()=>Q,sleep:()=>nt,stringifyYaml:()=>b,toCamelCase:()=>M,toCapitalCase:()=>B,toPascalCase:()=>P,traverseFolder:()=>z,traverseFolderSync:()=>D,yieldExec:()=>it}),module.exports=(t=a,c(s({},"__esModule",{value:!0}),t));var h=require("fs"),l=u(require("path")),f=require("load-config-file"),m=u(require("path"));function p(t,e=1){let s="";for(;e--;){const e=m.default.extname(t);if(!e)break;s=e+s,t=m.default.basename(t,e)}return s}var d=require("yaml"),y=[];function g(t){Array.isArray(t)||(t=[t]);for(const e of t){-1===y.indexOf(e)&&y.push(e)}}function v(t,e){if(e)if(e.customTags){if(Array.isArray(e.customTags))e.customTags=y.concat(e.customTags);else if("function"==typeof e.customTags){const t=e.customTags;e.customTags=e=>t(y.concat(e))}}else e.customTags=y;else e={customTags:y};return(0,d.parse)(t,e)}function b(t,e){if(e)if(e.customTags){if(Array.isArray(e.customTags))e.customTags=y.concat(e.customTags);else if("function"==typeof e.customTags){const t=e.customTags;e.customTags=e=>t(y.concat(e))}}else e.customTags=y;else e={customTags:y};return(0,d.stringify)(t,e)}function w(t){const e=/^\s*(#[^\r\n]*)?[\r\n]+/;let s;for(;null!==(s=e.exec(t))&&((t=t.substring(s[0].length)).startsWith("\n")||t.startsWith("\r")||t.trimStart().startsWith("#")););return t}var x="---";function k(t,e=x){const s=e.length,r=w(t);if(r.startsWith(e)&&("\n"===r[e.length]||"\r"===r[e.length])){let t=r.indexOf("\n"+e,s);if(-1!==t){const n=r.slice(s,t);for(t+=e.length+1;"\n"===r[t]||"\r"===r[t];)t++;const i=r.slice(t);return{data:v(n)||{},content:i}}}return{data:{},content:t}}var F=class{static register(t,e,s){f.Config.register(t,e),"string"==typeof t&&(t=[t]);for(const e of t)this.stringifys[e]=s}static loadSync(t,e){return function(t,{extLevel:e=1,externalFile:s}={}){t=j(t,e);let r=f.Config.loadSync(t);if(!r&&s){if(!l.default.isAbsolute(s)){const e=l.default.dirname(t);s=l.default.join(e,s)}if((0,h.existsSync)(s)){const t=k((0,h.readFileSync)(s,"utf8")).data;Object.keys(t).length&&(r=t)}}return r}(t,e)}static saveSync(t,e,s){return function(t,e,{extLevel:s=1}={}){const r=function(t,e=1){"."===t[0]&&e++;let s=p(t,e);(!s||s.split(".").length<=1)&&(t+=".yaml",s=".yaml");const r=new String(t);return r.extname=s,r}(t,s),n=r.extname;t=r.toString();const i=F.stringifys[n];if(!i)throw new Error(`${t} unsupported mime type: ${n}`);e=i(e);const o=l.default.dirname(t);(0,h.existsSync)(o)||(0,h.mkdirSync)(o,{recursive:!0});return(0,h.writeFileSync)(t,e,{encoding:"utf8"}),t}(t,e,s)}static existsSync(t,e){return t=j(t,e?.extLevel),f.Config.existsSync(t,e)}};function j(t,e=1){"."===t[0]&&e++;const s=p(t,e);return s&&s.split(".").length>1&&(t=t.slice(0,-s.length)),t}F.stringifys={},F.register([".yml",".yaml"],v,b),F.register([".json"],function(t){return JSON.parse(t)},t=>JSON.stringify(t,null,2));var q=require("@isdk/glob"),S=u(require("path"));function A(t,e,s){return s&&(t=S.default.relative(s,t)),(0,q.globMatch)(t,e)}function E(t,e){return"string"==typeof e&&(e=[e]),-1!==e.indexOf(t)}var C=["**/*.((j|t)s?(x)|m(j|t)s)?(x)","**/*.(md|markdown|txt|?(x)htm?(l)|yaml|yml|xml|json|bat|sh|bash|zsh|ini|css|scss|less|sass|py|rb|php|go|java|c|cpp|h|hpp|hxx|rust|zig)"];function R(t,e=[]){if(t)if(Array.isArray(t))t=[...t];else{const s=t.include||[],r=t.exclude||[];0===s.length&&s.push(...e),t=[...s];for(const e of r)t.push(`!${e}`)}else t=[...e];return 0===t.length&&t.push(...e),t}var O=require("fs/promises"),$=require("fs"),T=u(require("path"));async function z(t,e){const s=await(0,O.readdir)(t,{withFileTypes:!0});for(const r of s){const s=T.default.join(t,r.name);try{if(r.isDirectory()){await e(s,r)||await z(s,e)}else{if(!0===await e(s,r))break}}catch(t){console.error(`Error processing file: ${s}`),console.error(t)}}}function D(t,e){const s=(0,$.readdirSync)(t,{withFileTypes:!0});for(const r of s){const s=T.default.join(t,r.name);try{if(r.isDirectory()){e(s,r)||z(s,e)}else{if(!0===e(s,r))break}}catch(t){console.error(`Error processing file: ${s}`),console.error(t)}}}function P(t){if(!t)return"";return t.replace(/[-_ ]+/g," ").split(" ").filter(Boolean).map(t=>{let e=t.charAt(0).toUpperCase();t=t.slice(1);let s=0;for(;/[A-Z]/.test(t[s]);)s++;return e+=s?t.slice(0,s).toLowerCase()+t.slice(s):t,e}).join("")}function M(t){return(t=P(t)).charAt(0).toLowerCase()+t.slice(1)}function B(t){if(!t)return"";return t.replace(/[-_ ]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").split(" ").filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(" ")}var L=u(require("path")),N=require("@isdk/common-error"),I=/[<>:"/\\|?*\u0000-\u001F]/,_=/^(con|prn|aux|nul|com\d|lpt\d)$/i,J=100,Y=/^\.+(\\|\/)|^\.+$/,G=/\.+$/,U=/[\u0000-\u001F\u0080-\u009F\u200E\u200F\u202A-\u202E\u2066-\u2069]/;function V(){return new RegExp(I.source,"g")}function W(){return new RegExp(U.source,"g")}function Z(t){return t&&!(I.test(t)||W().test(t)||Y.test(t)||G.test(t))}function H(t){const e=t.split(L.default.sep);return("/"===t[0]||e[0]&&L.default.dirname(e[0])===e[0])&&e.shift(),e.every(Z)}function K(t,e={}){const s=e.replacement||"!";if((I.test(s)||U.test(s))&&(0,N.throwError)("Replacement string cannot contain reserved filename characters","sanitizeFilename",N.ErrorCode.InvalidArgument),s.length>0){const e=/([<>:"/\\|?*\u0000-\u001F]){2,}/;t=t.replace(e,"$1")}if(t=(t=(t=(t=(t=t.normalize("NFD")).replace(Y,s)).replace(V(),s)).replace(W(),s)).replace(G,""),s.length>0){"."===t[0]||"."!==t[0]||(t=s+t),"."===t[t.length-1]&&(t+=s)}t=_.test(t)?t+s:t;const r="number"==typeof e.maxLength?e.maxLength:J;if(t.length>r){const e=t.lastIndexOf(".");if(-1===e)t=t.slice(0,r);else{const s=t.slice(0,e),n=t.slice(e);t=s.slice(0,Math.max(1,r-n.length))+n}}return t}function Q(t,e={}){const s=t.split(L.default.sep);let r;("/"===t[0]||s[0]&&L.default.dirname(s[0])===s[0])&&(r=s.shift());const n=s.map(t=>K(t,e));return void 0!==r&&n.unshift(r),n.join(L.default.sep)}function X(t){return t.split(".").length-1}function tt(t,e){const s=new Set(e),r=new Set;for(const e of t)if(s.has(e)&&(r.add(e),r.size===s.size))return!0;return r.size===s.size}function et(t=0){return e=Math.min(Math.max(16,t),1073741824),e>>>=0,e-=1,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,1+(e|=e>>16);var e}var st=class extends Array{constructor(t,e){Array.isArray(t)?(super(...t),this._length=t.length,t=void 0):(super(),this._length=0),this._capacity=et(t),this._front=0,this._disableAutoResize=e}push(t){let e=this._length;this.checkCapacity(e+1);const s=this._front+e&this._capacity-1;return this[s]=t,++e<=this._capacity&&(this._length=e),s}unshift(t){let e=this._length;this.checkCapacity(++e);const s=this._capacity,r=(this._front-1&s-1^s)-s;return this[r]=t,this._front=r,e<=this._capacity&&(this._length=e),r}pop(t){let e=this._length;if(0===e)return;let s=this._front+e-1&this._capacity-1,r=this[s];for(;--e>0&&t&&null==r;)s--,r=this[s];return this[s]=void 0,this._length=e,r}shift(t){let e=this._length;if(0===e)return;let s=this._front,r=this[s];for(;--e>0&&t&&null==r;)s=s+1&this._capacity-1,r=this[s];return this[s]=void 0,this._front=s+1&this._capacity-1,this._length=e,r}get size(){return this._length}get(t){let e;if(t===(0|t)){const s=this._length;t<0&&(t+=s),t>=0&&t<s&&(e=this[this._front+t&this._capacity-1])}return e}peekBack(){const t=this._length;if(0===t)return;return this[this._front+t-1&this._capacity-1]}peekFront(){if(0!==this._length)return this[this._front]}clear(){const t=this._length,e=this._front,s=this._capacity;for(let r=0;r<t;++r)this[e+r&s-1]=void 0;this._length=0,this._front=0}isEmpty(){return 0===this._length}removeAt(t){const e=this._length;if(t<0||t>=e)return;const s=this._front,r=this._capacity-1,n=s+t&r,i=this[n];if(t<e/2)this.copyWithin(s+1&r,s,s+t&r),this[s]=void 0,this._front=s+1&r;else{this.copyWithin(n,n+1&r,s+e&r);this[s+e-1&r]=void 0}return this._length=e-1,i}checkCapacity(t){this._capacity<t&&!this._disableAutoResize&&this.resizeTo(et(1.5*this._capacity+16))}resizeTo(t){const e=this._capacity;this._capacity=t;const s=this._front,r=this._length;if(s+r>e){!function(t,e,s,r,n){for(let i=0;i<n;++i)s[i+r]=t[i+e],t[i+e]=void 0}(this,0,this,e,s+r&e-1)}}},rt=class t{constructor(t=0){this.bitField=t}static has(t,e){return!!(t&1<<e)}static add(t,e){return t|1<<e}static delete(t,e){return t&~(1<<e)}add(t){return this.bitField|=1<<t,this}delete(t){return this.bitField&=~(1<<t),this}has(e){return t.has(this.bitField,e)}clear(){return this.bitField=0,this}valueOf(){return this.bitField}toString(){return this.bitField.toString()}toJSON(){return this.bitField}};async function nt(t){return new Promise(e=>setTimeout(e,t))}async function it(){return new Promise(t=>{setImmediate(t)})}var ot=require("util-ex"),ct=require("events-ex"),ut=require("@isdk/common-error"),at=32;function ht(t){return"function"==typeof t}function lt(){return"1"}var ft=class{constructor(t={}){const{initFn:e=lt,pauseFn:s,resumeFn:r,capacity:n=at}=t;if(ht(s)!==ht(r))throw new Error("pauseFn and resumeFn must be both set for pausing");this.waiting=new st(n),this.emitter=new ct.EventEmitter,this.useDefaultTokens=e===lt,this.pauseFn=s,this.resumeFn=r,this.initTokenFn=e,this.paused=!1,this._activeCount=0,this.initFree(t),this.init(t)}initFree(t){this.free=this.initTokenFn()}onReleased(t){const e=t?.token,s=this.waiting.shift(!0);s?this._dispatchTask(s,t):(this.resumeFn&&this.paused&&(this.paused=!1,this.resumeFn()),this.unlock(e))}init(t){this.emitter.on("release",t=>{this.onReleased(t)})}_newReleaser(t){let e=!1;const s=()=>{e||(e=!0,this.release(t))};return t&&Object.assign(s,t),s}_dispatchTask(t,e){const{resolve:s}=t;s(this._newReleaser(e))}lock(t){const e=this.free;if(e)return this.free=void 0,e}unlock(t){this.free=this.useDefaultTokens?"1":t??this.initTokenFn()}tryAcquire(t){return this.lock(t)}async acquire(t){this._activeCount++;const e=t?.signal,s=t=>{this.pauseFn&&!this.paused&&(this.paused=!0,this.pauseFn());const s=this.waiting.push(t),r=t.reject;return e&&e.addEventListener("abort",()=>{this.waiting[s]=void 0;const t=e.reason instanceof Error?e.reason:new ut.AbortError(e.reason||"aborted");e.alreadyRejected=!0,r(t)}),s},r=this.tryAcquire(t),n=r&&(0,ot.isAsync)(r),i=e=>new Promise((r,n)=>{const i={...t,resolve:r,reject:n,token:e};void 0===e?s(i):this._dispatchTask(i,{...t,token:e})});return n?r.then(t=>i(t)):i(r)}release(t){this._activeCount--,this.emitter.emit("release",t)}drain(){const t=[this.acquire()];return Promise.all(t)}abort(t){let e;for(;e=this.waiting.shift(!0);)e.reject(new ut.AbortError(t))}get activeCount(){return this._activeCount}get pendingCount(){return this.waiting.size}},mt=class extends ft{constructor(t,e){if("number"==typeof t)(e=e||{}).maxConcurrency=t;else if("number"!=typeof(e=t).maxConcurrency)throw new Error("maxConcurrency must be set");super(e),this.maxConcurrency=e.maxConcurrency,e.isReadyFn&&(this.isReady=e.isReadyFn)}initFree(t){const e=t.maxConcurrency=Math.max(1,t.maxConcurrency);this.free=new st(e);for(let t=0;t<e;t++)this.free.push(this.initTokenFn())}tryAcquire(t){let e=this.isReady;if(e&&(0,ot.isAsync)(e)){return e instanceof Promise||(e=e()),e.then(e=>{if(e)return this.lock(t)})}if(!e||e())return this.lock(t)}unlock(t){this.free.push(this.useDefaultTokens?"1":t??this.initTokenFn())}lock(t){return this.free.pop()}drain(){const t=new Array(this.maxConcurrency);for(let e=0;e<this.maxConcurrency;e++)t[e]=this.acquire();return Promise.all(t)}};function pt(t,{timeUnit:e=1e3,uniformDistribution:s=!1}={}){const r=new mt(s?1:t),n=s?e/t:e;return async function(){await r.acquire(),setTimeout(()=>r.release(),n)}}var dt=require("@isdk/common-error"),yt=class{constructor(){this._isSignaled=!1,this.waitQueue=[]}get signaled(){return this._isSignaled}signal(t){if(this._isSignaled)return;this._isSignaled=!0,this._signalValue=t;const e=this.waitQueue.slice();for(this.waitQueue.length=0;e.length>0;){const t=e.shift();t?.resolve(this._signalValue)}}reset(){this._isSignaled=!1,this._signalValue=void 0,this.waitQueue.length=0}abort(t){if(this.waitQueue.length){const e=this.waitQueue.slice();this.waitQueue.length=0;const s=new dt.AbortError(t);for(;e.length>0;){const{reject:t}=e.shift();t(s)}}}async wait(){return new Promise((t,e)=>{this._isSignaled?t(this._signalValue):this.waitQueue.push({resolve:t,reject:e})})}},gt=u(require("net"));async function vt(t,e=10){return new Promise((s,r)=>{void 0===t?t=0:("string"==typeof t&&(t=parseInt(t)),t>=0||(t=0));const n=gt.default.createServer();n.on("error",s=>{"EADDRINUSE"===s.code&&(t++,--e>0)?n.listen(t):r(s)}),n.on("listening",async()=>{const t=n.address().port;n.close(e=>{e?r(e):s(t)})}),n.listen(t)})}var bt=require("lodash-es");function wt(t,e,s=new WeakMap){if(!(0,bt.isObject)(t)||(0,bt.isNil)(t))return t;if(s.has(t))return s.get(t);let r;if(Array.isArray(t)){r=[],s.set(t,r);const n=t.map(t=>wt(t,e,s)).filter((t,s)=>!e(t,s.toString()));return Object.assign(r,n),r.length>0?r:void 0}if((0,bt.isPlainObject)(t)){r={},s.set(t,r);const n=Reflect.ownKeys(t);for(const i of n){const n=wt(t[i],e,s);e(n,i)||(r[i]=n)}return(0,bt.isEmpty)(r)?void 0:r}return t}var xt=require("lodash-es");var kt=(t,e)=>wt(t,t=>function(t){return!!(0,xt.isNil)(t)||"string"==typeof t&&0===t.trim().length||!(!(0,xt.isArray)(t)&&!(0,xt.isPlainObject)(t))&&(0,xt.isEmpty)(t)}(t)||e&&"function"==typeof t),Ft={javascript:"js",jsx:"js",typescript:"ts",tsx:"ts",markdown:"md",python:"py",ruby:"rb",bash:"sh",zsh:"sh",shell:"sh",yaml:"yml",golang:"go",rust:"rs","c#":"cs",csharp:"cs","c++":"cpp"};function jt(t,e){if(!t)return t;const s=t.toLowerCase();return e&&s in e?e[s]:Ft[s]||s}function qt(t,e={}){const{lang:s,langMap:r}=e,n=jt(s,r),i=/^[ \t]*(?<fence>`{3,}|~{3,})(?<lang>\S*)[ \t]*(?<meta>\S*?)\n(?<code>[\s\S]+?\n)?[ \t]*\k<fence>$/gm,o=[];let c;for(i.lastIndex=0;null!==(c=i.exec(t));){const t=c.groups?.lang?.toLowerCase();if(!n||n===jt(t,r)){const t=c.groups.code||"",e=new String(t);c.groups.lang&&(e.lang=c.groups.lang.toLowerCase()),c.groups.meta&&(e.meta=c.groups.meta),o.push(e)}}return o}function St(t){if(!t)return[];const e=[],s=/([>+~])?\s*([^\s>+~]+)/g;let r;for(;null!==(r=s.exec(t));){const t=r[1]||" ",s=r[2];e.push({combinator:t,lang:s})}return e}function At(t,e){const s="string"==typeof e?{lang:e}:e??{},{index:r=-1,all:n}=s,i=St(s.lang);let o=[];if(0===i.length)o=qt(t,s);else{let e=[t];for(let t=0;t<i.length;t++){const{combinator:r,lang:n}=i[t],c=t===i.length-1,u=[],a=0===t&&" "===r?">":r;for(const t of e){let e=[];switch(a){case">":e=qt(t,{...s,lang:n,all:!0});break;case" ":console.warn('Descendant selector " " is not implemented yet.');break;case"+":console.warn('Adjacent sibling selector "+" is not implemented yet.');break;case"~":console.warn('General sibling selector "~" is not implemented yet.')}u.push(...e)}if(c)o=u;else if(e=u.map(t=>t.toString()),0===e.length)break}}if(n)return o;const c=o[r<0?o.length+r:r];return void 0!==c?c:t}
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{existsSync as t,mkdirSync as s,readFileSync as i,writeFileSync as r}from"fs";import n from"path";import{Config as e}from"load-config-file";import o from"path";function c(t,s=1){let i="";for(;s--;){const s=o.extname(t);if(!s)break;i=s+i,t=o.basename(t,s)}return i}import{parse as h,stringify as u}from"yaml";var f=[];function a(t){Array.isArray(t)||(t=[t]);for(const s of t){-1===f.indexOf(s)&&f.push(s)}}function l(t,s){if(s)if(s.customTags){if(Array.isArray(s.customTags))s.customTags=f.concat(s.customTags);else if("function"==typeof s.customTags){const t=s.customTags;s.customTags=s=>t(f.concat(s))}}else s.customTags=f;else s={customTags:f};return h(t,s)}function m(t,s){if(s)if(s.customTags){if(Array.isArray(s.customTags))s.customTags=f.concat(s.customTags);else if("function"==typeof s.customTags){const t=s.customTags;s.customTags=s=>t(f.concat(s))}}else s.customTags=f;else s={customTags:f};return u(t,s)}function p(t){const s=/^\s*(#[^\r\n]*)?[\r\n]+/;let i;for(;null!==(i=s.exec(t))&&((t=t.substring(i[0].length)).startsWith("\n")||t.startsWith("\r")||t.trimStart().startsWith("#")););return t}function y(t,s="---"){const i=s.length,r=p(t);if(r.startsWith(s)&&("\n"===r[s.length]||"\r"===r[s.length])){let t=r.indexOf("\n"+s,i);if(-1!==t){const n=r.slice(i,t);for(t+=s.length+1;"\n"===r[t]||"\r"===r[t];)t++;const e=r.slice(t);return{data:l(n)||{},content:e}}}return{data:{},content:t}}var d=class{static register(t,s,i){e.register(t,s),"string"==typeof t&&(t=[t]);for(const s of t)this.stringifys[s]=i}static loadSync(s,r){return function(s,{extLevel:r=1,externalFile:o}={}){s=v(s,r);let c=e.loadSync(s);if(!c&&o){if(!n.isAbsolute(o)){const t=n.dirname(s);o=n.join(t,o)}if(t(o)){const t=y(i(o,"utf8")).data;Object.keys(t).length&&(c=t)}}return c}(s,r)}static saveSync(i,e,o){return function(i,e,{extLevel:o=1}={}){const h=function(t,s=1){"."===t[0]&&s++;let i=c(t,s);(!i||i.split(".").length<=1)&&(t+=".yaml",i=".yaml");const r=new String(t);return r.extname=i,r}(i,o),u=h.extname;i=h.toString();const f=d.stringifys[u];if(!f)throw new Error(`${i} unsupported mime type: ${u}`);e=f(e);const a=n.dirname(i);t(a)||s(a,{recursive:!0});return r(i,e,{encoding:"utf8"}),i}(i,e,o)}static existsSync(t,s){return t=v(t,s?.extLevel),e.existsSync(t,s)}};function v(t,s=1){"."===t[0]&&s++;const i=c(t,s);return i&&i.split(".").length>1&&(t=t.slice(0,-i.length)),t}d.stringifys={},d.register([".yml",".yaml"],l,m),d.register([".json"],function(t){return JSON.parse(t)},t=>JSON.stringify(t,null,2));import{globMatch as g}from"@isdk/glob";import w from"path";function b(t,s,i){return i&&(t=w.relative(i,t)),g(t,s)}function k(t,s){return"string"==typeof s&&(s=[s]),-1!==s.indexOf(t)}var x=["**/*.((j|t)s?(x)|m(j|t)s)?(x)","**/*.(md|markdown|txt|?(x)htm?(l)|yaml|yml|xml|json|bat|sh|bash|zsh|ini|css|scss|less|sass|py|rb|php|go|java|c|cpp|h|hpp|hxx|rust|zig)"];function F(t,s=[]){if(t)if(Array.isArray(t))t=[...t];else{const i=t.include||[],r=t.exclude||[];0===i.length&&i.push(...s),t=[...i];for(const s of r)t.push(`!${s}`)}else t=[...s];return 0===t.length&&t.push(...s),t}import{readdir as A}from"fs/promises";import{readdirSync as E}from"fs";import j from"path";async function S(t,s){const i=await A(t,{withFileTypes:!0});for(const r of i){const i=j.join(t,r.name);try{if(r.isDirectory()){await s(i,r)||await S(i,s)}else{if(!0===await s(i,r))break}}catch(t){console.error(`Error processing file: ${i}`),console.error(t)}}}function $(t,s){const i=E(t,{withFileTypes:!0});for(const r of i){const i=j.join(t,r.name);try{if(r.isDirectory()){s(i,r)||S(i,s)}else{if(!0===s(i,r))break}}catch(t){console.error(`Error processing file: ${i}`),console.error(t)}}}function P(t){if(!t)return"";return t.replace(/[-_ ]+/g," ").split(" ").filter(Boolean).map(t=>{let s=t.charAt(0).toUpperCase();t=t.slice(1);let i=0;for(;/[A-Z]/.test(t[i]);)i++;return s+=i?t.slice(0,i).toLowerCase()+t.slice(i):t,s}).join("")}function O(t){return(t=P(t)).charAt(0).toLowerCase()+t.slice(1)}function T(t){if(!t)return"";return t.replace(/[-_ ]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").split(" ").filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(" ")}import R from"path";import{ErrorCode as z,throwError as N}from"@isdk/common-error";var C=/[<>:"/\\|?*\u0000-\u001F]/,M=/^(con|prn|aux|nul|com\d|lpt\d)$/i,D=/^\.+(\\|\/)|^\.+$/,_=/\.+$/,q=/[\u0000-\u001F\u0080-\u009F\u200E\u200F\u202A-\u202E\u2066-\u2069]/;function B(){return new RegExp(C.source,"g")}function I(){return new RegExp(q.source,"g")}function J(t){return t&&!(C.test(t)||I().test(t)||D.test(t)||_.test(t))}function L(t){const s=t.split(R.sep);return("/"===t[0]||s[0]&&R.dirname(s[0])===s[0])&&s.shift(),s.every(J)}function U(t,s={}){const i=s.replacement||"!";if((C.test(i)||q.test(i))&&N("Replacement string cannot contain reserved filename characters","sanitizeFilename",z.InvalidArgument),i.length>0){const s=/([<>:"/\\|?*\u0000-\u001F]){2,}/;t=t.replace(s,"$1")}if(t=(t=(t=(t=(t=t.normalize("NFD")).replace(D,i)).replace(B(),i)).replace(I(),i)).replace(_,""),i.length>0){"."===t[0]||"."!==t[0]||(t=i+t),"."===t[t.length-1]&&(t+=i)}t=M.test(t)?t+i:t;const r="number"==typeof s.maxLength?s.maxLength:100;if(t.length>r){const s=t.lastIndexOf(".");if(-1===s)t=t.slice(0,r);else{const i=t.slice(0,s),n=t.slice(s);t=i.slice(0,Math.max(1,r-n.length))+n}}return t}function Z(t,s={}){const i=t.split(R.sep);let r;("/"===t[0]||i[0]&&R.dirname(i[0])===i[0])&&(r=i.shift());const n=i.map(t=>U(t,s));return void 0!==r&&n.unshift(r),n.join(R.sep)}function W(t){return t.split(".").length-1}function G(t,s){const i=new Set(s),r=new Set;for(const s of t)if(i.has(s)&&(r.add(s),r.size===i.size))return!0;return r.size===i.size}function H(t=0){return s=Math.min(Math.max(16,t),1073741824),s>>>=0,s-=1,s|=s>>1,s|=s>>2,s|=s>>4,s|=s>>8,1+(s|=s>>16);var s}var K=class extends Array{constructor(t,s){Array.isArray(t)?(super(...t),this._length=t.length,t=void 0):(super(),this._length=0),this._capacity=H(t),this._front=0,this._disableAutoResize=s}push(t){let s=this._length;this.checkCapacity(s+1);const i=this._front+s&this._capacity-1;return this[i]=t,++s<=this._capacity&&(this._length=s),i}unshift(t){let s=this._length;this.checkCapacity(++s);const i=this._capacity,r=(this._front-1&i-1^i)-i;return this[r]=t,this._front=r,s<=this._capacity&&(this._length=s),r}pop(t){let s=this._length;if(0===s)return;let i=this._front+s-1&this._capacity-1,r=this[i];for(;--s>0&&t&&null==r;)i--,r=this[i];return this[i]=void 0,this._length=s,r}shift(t){let s=this._length;if(0===s)return;let i=this._front,r=this[i];for(;--s>0&&t&&null==r;)i=i+1&this._capacity-1,r=this[i];return this[i]=void 0,this._front=i+1&this._capacity-1,this._length=s,r}get size(){return this._length}get(t){let s;if(t===(0|t)){const i=this._length;t<0&&(t+=i),t>=0&&t<i&&(s=this[this._front+t&this._capacity-1])}return s}peekBack(){const t=this._length;if(0===t)return;return this[this._front+t-1&this._capacity-1]}peekFront(){if(0!==this._length)return this[this._front]}clear(){const t=this._length,s=this._front,i=this._capacity;for(let r=0;r<t;++r)this[s+r&i-1]=void 0;this._length=0,this._front=0}isEmpty(){return 0===this._length}removeAt(t){const s=this._length;if(t<0||t>=s)return;const i=this._front,r=this._capacity-1,n=i+t&r,e=this[n];if(t<s/2)this.copyWithin(i+1&r,i,i+t&r),this[i]=void 0,this._front=i+1&r;else{this.copyWithin(n,n+1&r,i+s&r);this[i+s-1&r]=void 0}return this._length=s-1,e}checkCapacity(t){this._capacity<t&&!this._disableAutoResize&&this.resizeTo(H(1.5*this._capacity+16))}resizeTo(t){const s=this._capacity;this._capacity=t;const i=this._front,r=this._length;if(i+r>s){!function(t,s,i,r,n){for(let e=0;e<n;++e)i[e+r]=t[e+s],t[e+s]=void 0}(this,0,this,s,i+r&s-1)}}},Q=class t{constructor(t=0){this.bitField=t}static has(t,s){return!!(t&1<<s)}static add(t,s){return t|1<<s}static delete(t,s){return t&~(1<<s)}add(t){return this.bitField|=1<<t,this}delete(t){return this.bitField&=~(1<<t),this}has(s){return t.has(this.bitField,s)}clear(){return this.bitField=0,this}valueOf(){return this.bitField}toString(){return this.bitField.toString()}toJSON(){return this.bitField}};async function V(t){return new Promise(s=>setTimeout(s,t))}async function X(){return new Promise(t=>{setImmediate(t)})}import{isAsync as Y}from"util-ex";import{EventEmitter as tt}from"events-ex";import{AbortError as st}from"@isdk/common-error";var it=32;function rt(t){return"function"==typeof t}function nt(){return"1"}var et=class{constructor(t={}){const{initFn:s=nt,pauseFn:i,resumeFn:r,capacity:n=it}=t;if(rt(i)!==rt(r))throw new Error("pauseFn and resumeFn must be both set for pausing");this.waiting=new K(n),this.emitter=new tt,this.useDefaultTokens=s===nt,this.pauseFn=i,this.resumeFn=r,this.initTokenFn=s,this.paused=!1,this._activeCount=0,this.initFree(t),this.init(t)}initFree(t){this.free=this.initTokenFn()}onReleased(t){const s=t?.token,i=this.waiting.shift(!0);i?this._dispatchTask(i,t):(this.resumeFn&&this.paused&&(this.paused=!1,this.resumeFn()),this.unlock(s))}init(t){this.emitter.on("release",t=>{this.onReleased(t)})}_newReleaser(t){let s=!1;const i=()=>{s||(s=!0,this.release(t))};return t&&Object.assign(i,t),i}_dispatchTask(t,s){const{resolve:i}=t;i(this._newReleaser(s))}lock(t){let s=this.free;if(s)return this.free=void 0,s}unlock(t){this.free=this.useDefaultTokens?"1":t??this.initTokenFn()}tryAcquire(t){return this.lock(t)}async acquire(t){this._activeCount++;const s=t?.signal,i=t=>{this.pauseFn&&!this.paused&&(this.paused=!0,this.pauseFn());const i=this.waiting.push(t),r=t.reject;return s&&s.addEventListener("abort",()=>{this.waiting[i]=void 0;const t=s.reason instanceof Error?s.reason:new st(s.reason||"aborted");s.alreadyRejected=!0,r(t)}),i};let r=this.tryAcquire(t);const n=r&&Y(r),e=s=>new Promise((r,n)=>{const e={...t,resolve:r,reject:n,token:s};void 0===s?i(e):this._dispatchTask(e,{...t,token:s})});return n?r.then(t=>e(t)):e(r)}release(t){this._activeCount--,this.emitter.emit("release",t)}drain(){const t=[this.acquire()];return Promise.all(t)}abort(t){let s;for(;s=this.waiting.shift(!0);)s.reject(new st(t))}get activeCount(){return this._activeCount}get pendingCount(){return this.waiting.size}},ot=class extends et{constructor(t,s){if("number"==typeof t)(s=s||{}).maxConcurrency=t;else{if("number"!=typeof(s=t).maxConcurrency)throw new Error("maxConcurrency must be set");t=s.maxConcurrency}super(s),this.maxConcurrency=s.maxConcurrency,s.isReadyFn&&(this.isReady=s.isReadyFn)}initFree(t){const s=t.maxConcurrency=Math.max(1,t.maxConcurrency);this.free=new K(s);for(let t=0;t<s;t++)this.free.push(this.initTokenFn())}tryAcquire(t){let s=this.isReady;if(s&&Y(s)){return s instanceof Promise||(s=s()),s.then(s=>{if(s)return this.lock(t)})}if(!s||s())return this.lock(t)}unlock(t){this.free.push(this.useDefaultTokens?"1":t??this.initTokenFn())}lock(t){return this.free.pop()}drain(){const t=new Array(this.maxConcurrency);for(let s=0;s<this.maxConcurrency;s++)t[s]=this.acquire();return Promise.all(t)}};function ct(t,{timeUnit:s=1e3,uniformDistribution:i=!1}={}){const r=new ot(i?1:t),n=i?s/t:s;return async function(){await r.acquire(),setTimeout(()=>r.release(),n)}}import{AbortError as ht}from"@isdk/common-error";var ut=class{constructor(){this._isSignaled=!1,this.waitQueue=[]}get signaled(){return this._isSignaled}signal(t){if(this._isSignaled)return;this._isSignaled=!0,this._signalValue=t;const s=this.waitQueue.slice();for(this.waitQueue.length=0;s.length>0;){const t=s.shift();t?.resolve(this._signalValue)}}reset(){this._isSignaled=!1,this._signalValue=void 0,this.waitQueue.length=0}abort(t){if(this.waitQueue.length){const s=this.waitQueue.slice();this.waitQueue.length=0;const i=new ht(t);for(;s.length>0;){const{reject:t}=s.shift();t(i)}}}async wait(){return new Promise((t,s)=>{this._isSignaled?t(this._signalValue):this.waitQueue.push({resolve:t,reject:s})})}};import ft from"net";async function at(t,s=10){return new Promise((i,r)=>{void 0===t?t=0:("string"==typeof t&&(t=parseInt(t)),t>=0||(t=0));const n=ft.createServer();n.on("error",i=>{"EADDRINUSE"===i.code&&(t++,--s>0)?n.listen(t):r(i)}),n.on("listening",async()=>{const t=n.address().port;n.close(s=>{s?r(s):i(t)})}),n.listen(t)})}import{isEmpty as lt,isNil as mt,isObject as pt,isPlainObject as yt}from"lodash-es";function dt(t,s,i=new WeakMap){if(!pt(t)||mt(t))return t;if(i.has(t))return i.get(t);let r;if(Array.isArray(t)){r=[],i.set(t,r);const n=t.map(t=>dt(t,s,i)).filter((t,i)=>!s(t,i.toString()));return Object.assign(r,n),r.length>0?r:void 0}if(yt(t)){r={},i.set(t,r);const n=Reflect.ownKeys(t);for(const e of n){const n=dt(t[e],s,i);s(n,e)||(r[e]=n)}return lt(r)?void 0:r}return t}import{isArray as vt,isEmpty as gt,isNil as wt,isPlainObject as bt}from"lodash-es";var kt=(t,s)=>dt(t,t=>function(t){return!!wt(t)||"string"==typeof t&&0===t.trim().length||!(!vt(t)&&!bt(t))&&gt(t)}(t)||s&&"function"==typeof t);export{et as BinarySemaphore,d as ConfigFile,x as DefaultAllTextFiles,it as DefaultAsyncSemaphoreCapacity,K as Deque,C as FilenameReservedRegex,Q as IntSet,ct as RateLimit,ot as Semaphore,ut as SignalGate,M as WindowsReservedNameRegex,G as arrayHasAll,W as extNameLevel,B as filenameReservedRegex,at as findPort,c as getMultiLevelExtname,b as glob,k as isStringIn,J as isValidFilename,L as isValidFilepath,F as normalizeIncludeFiles,dt as omitDeepBy,kt as omitEmptyDeep,y as parseFrontMatter,l as parseYaml,I as reControlCharsRegex,a as registerYamlTag,p as removeLeadingEmptyLines,U as sanitizeFilename,Z as sanitizeFilepath,V as sleep,m as stringifyYaml,O as toCamelCase,T as toCapitalCase,P as toPascalCase,S as traverseFolder,$ as traverseFolderSync,X as yieldExec};
1
+ import{existsSync as t,mkdirSync as s,readFileSync as n,writeFileSync as r}from"fs";import i from"path";import{Config as e}from"load-config-file";import o from"path";function c(t,s=1){let n="";for(;s--;){const s=o.extname(t);if(!s)break;n=s+n,t=o.basename(t,s)}return n}import{parse as h,stringify as u}from"yaml";var f=[];function a(t){Array.isArray(t)||(t=[t]);for(const s of t){-1===f.indexOf(s)&&f.push(s)}}function l(t,s){if(s)if(s.customTags){if(Array.isArray(s.customTags))s.customTags=f.concat(s.customTags);else if("function"==typeof s.customTags){const t=s.customTags;s.customTags=s=>t(f.concat(s))}}else s.customTags=f;else s={customTags:f};return h(t,s)}function m(t,s){if(s)if(s.customTags){if(Array.isArray(s.customTags))s.customTags=f.concat(s.customTags);else if("function"==typeof s.customTags){const t=s.customTags;s.customTags=s=>t(f.concat(s))}}else s.customTags=f;else s={customTags:f};return u(t,s)}function p(t){const s=/^\s*(#[^\r\n]*)?[\r\n]+/;let n;for(;null!==(n=s.exec(t))&&((t=t.substring(n[0].length)).startsWith("\n")||t.startsWith("\r")||t.trimStart().startsWith("#")););return t}function y(t,s="---"){const n=s.length,r=p(t);if(r.startsWith(s)&&("\n"===r[s.length]||"\r"===r[s.length])){let t=r.indexOf("\n"+s,n);if(-1!==t){const i=r.slice(n,t);for(t+=s.length+1;"\n"===r[t]||"\r"===r[t];)t++;const e=r.slice(t);return{data:l(i)||{},content:e}}}return{data:{},content:t}}var d=class{static register(t,s,n){e.register(t,s),"string"==typeof t&&(t=[t]);for(const s of t)this.stringifys[s]=n}static loadSync(s,r){return function(s,{extLevel:r=1,externalFile:o}={}){s=g(s,r);let c=e.loadSync(s);if(!c&&o){if(!i.isAbsolute(o)){const t=i.dirname(s);o=i.join(t,o)}if(t(o)){const t=y(n(o,"utf8")).data;Object.keys(t).length&&(c=t)}}return c}(s,r)}static saveSync(n,e,o){return function(n,e,{extLevel:o=1}={}){const h=function(t,s=1){"."===t[0]&&s++;let n=c(t,s);(!n||n.split(".").length<=1)&&(t+=".yaml",n=".yaml");const r=new String(t);return r.extname=n,r}(n,o),u=h.extname;n=h.toString();const f=d.stringifys[u];if(!f)throw new Error(`${n} unsupported mime type: ${u}`);e=f(e);const a=i.dirname(n);t(a)||s(a,{recursive:!0});return r(n,e,{encoding:"utf8"}),n}(n,e,o)}static existsSync(t,s){return t=g(t,s?.extLevel),e.existsSync(t,s)}};function g(t,s=1){"."===t[0]&&s++;const n=c(t,s);return n&&n.split(".").length>1&&(t=t.slice(0,-n.length)),t}d.stringifys={},d.register([".yml",".yaml"],l,m),d.register([".json"],function(t){return JSON.parse(t)},t=>JSON.stringify(t,null,2));import{globMatch as v}from"@isdk/glob";import w from"path";function b(t,s,n){return n&&(t=w.relative(n,t)),v(t,s)}function k(t,s){return"string"==typeof s&&(s=[s]),-1!==s.indexOf(t)}var x=["**/*.((j|t)s?(x)|m(j|t)s)?(x)","**/*.(md|markdown|txt|?(x)htm?(l)|yaml|yml|xml|json|bat|sh|bash|zsh|ini|css|scss|less|sass|py|rb|php|go|java|c|cpp|h|hpp|hxx|rust|zig)"];function F(t,s=[]){if(t)if(Array.isArray(t))t=[...t];else{const n=t.include||[],r=t.exclude||[];0===n.length&&n.push(...s),t=[...n];for(const s of r)t.push(`!${s}`)}else t=[...s];return 0===t.length&&t.push(...s),t}import{readdir as j}from"fs/promises";import{readdirSync as A}from"fs";import E from"path";async function S(t,s){const n=await j(t,{withFileTypes:!0});for(const r of n){const n=E.join(t,r.name);try{if(r.isDirectory()){await s(n,r)||await S(n,s)}else{if(!0===await s(n,r))break}}catch(t){console.error(`Error processing file: ${n}`),console.error(t)}}}function $(t,s){const n=A(t,{withFileTypes:!0});for(const r of n){const n=E.join(t,r.name);try{if(r.isDirectory()){s(n,r)||S(n,s)}else{if(!0===s(n,r))break}}catch(t){console.error(`Error processing file: ${n}`),console.error(t)}}}function P(t){if(!t)return"";return t.replace(/[-_ ]+/g," ").split(" ").filter(Boolean).map(t=>{let s=t.charAt(0).toUpperCase();t=t.slice(1);let n=0;for(;/[A-Z]/.test(t[n]);)n++;return s+=n?t.slice(0,n).toLowerCase()+t.slice(n):t,s}).join("")}function O(t){return(t=P(t)).charAt(0).toLowerCase()+t.slice(1)}function T(t){if(!t)return"";return t.replace(/[-_ ]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").split(" ").filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(" ")}import z from"path";import{ErrorCode as R,throwError as M}from"@isdk/common-error";var N=/[<>:"/\\|?*\u0000-\u001F]/,C=/^(con|prn|aux|nul|com\d|lpt\d)$/i,D=/^\.+(\\|\/)|^\.+$/,_=/\.+$/,q=/[\u0000-\u001F\u0080-\u009F\u200E\u200F\u202A-\u202E\u2066-\u2069]/;function B(){return new RegExp(N.source,"g")}function I(){return new RegExp(q.source,"g")}function J(t){return t&&!(N.test(t)||I().test(t)||D.test(t)||_.test(t))}function L(t){const s=t.split(z.sep);return("/"===t[0]||s[0]&&z.dirname(s[0])===s[0])&&s.shift(),s.every(J)}function U(t,s={}){const n=s.replacement||"!";if((N.test(n)||q.test(n))&&M("Replacement string cannot contain reserved filename characters","sanitizeFilename",R.InvalidArgument),n.length>0){const s=/([<>:"/\\|?*\u0000-\u001F]){2,}/;t=t.replace(s,"$1")}if(t=(t=(t=(t=(t=t.normalize("NFD")).replace(D,n)).replace(B(),n)).replace(I(),n)).replace(_,""),n.length>0){"."===t[0]||"."!==t[0]||(t=n+t),"."===t[t.length-1]&&(t+=n)}t=C.test(t)?t+n:t;const r="number"==typeof s.maxLength?s.maxLength:100;if(t.length>r){const s=t.lastIndexOf(".");if(-1===s)t=t.slice(0,r);else{const n=t.slice(0,s),i=t.slice(s);t=n.slice(0,Math.max(1,r-i.length))+i}}return t}function Z(t,s={}){const n=t.split(z.sep);let r;("/"===t[0]||n[0]&&z.dirname(n[0])===n[0])&&(r=n.shift());const i=n.map(t=>U(t,s));return void 0!==r&&i.unshift(r),i.join(z.sep)}function G(t){return t.split(".").length-1}function W(t,s){const n=new Set(s),r=new Set;for(const s of t)if(n.has(s)&&(r.add(s),r.size===n.size))return!0;return r.size===n.size}function H(t=0){return s=Math.min(Math.max(16,t),1073741824),s>>>=0,s-=1,s|=s>>1,s|=s>>2,s|=s>>4,s|=s>>8,1+(s|=s>>16);var s}var K=class extends Array{constructor(t,s){Array.isArray(t)?(super(...t),this._length=t.length,t=void 0):(super(),this._length=0),this._capacity=H(t),this._front=0,this._disableAutoResize=s}push(t){let s=this._length;this.checkCapacity(s+1);const n=this._front+s&this._capacity-1;return this[n]=t,++s<=this._capacity&&(this._length=s),n}unshift(t){let s=this._length;this.checkCapacity(++s);const n=this._capacity,r=(this._front-1&n-1^n)-n;return this[r]=t,this._front=r,s<=this._capacity&&(this._length=s),r}pop(t){let s=this._length;if(0===s)return;let n=this._front+s-1&this._capacity-1,r=this[n];for(;--s>0&&t&&null==r;)n--,r=this[n];return this[n]=void 0,this._length=s,r}shift(t){let s=this._length;if(0===s)return;let n=this._front,r=this[n];for(;--s>0&&t&&null==r;)n=n+1&this._capacity-1,r=this[n];return this[n]=void 0,this._front=n+1&this._capacity-1,this._length=s,r}get size(){return this._length}get(t){let s;if(t===(0|t)){const n=this._length;t<0&&(t+=n),t>=0&&t<n&&(s=this[this._front+t&this._capacity-1])}return s}peekBack(){const t=this._length;if(0===t)return;return this[this._front+t-1&this._capacity-1]}peekFront(){if(0!==this._length)return this[this._front]}clear(){const t=this._length,s=this._front,n=this._capacity;for(let r=0;r<t;++r)this[s+r&n-1]=void 0;this._length=0,this._front=0}isEmpty(){return 0===this._length}removeAt(t){const s=this._length;if(t<0||t>=s)return;const n=this._front,r=this._capacity-1,i=n+t&r,e=this[i];if(t<s/2)this.copyWithin(n+1&r,n,n+t&r),this[n]=void 0,this._front=n+1&r;else{this.copyWithin(i,i+1&r,n+s&r);this[n+s-1&r]=void 0}return this._length=s-1,e}checkCapacity(t){this._capacity<t&&!this._disableAutoResize&&this.resizeTo(H(1.5*this._capacity+16))}resizeTo(t){const s=this._capacity;this._capacity=t;const n=this._front,r=this._length;if(n+r>s){!function(t,s,n,r,i){for(let e=0;e<i;++e)n[e+r]=t[e+s],t[e+s]=void 0}(this,0,this,s,n+r&s-1)}}},Q=class t{constructor(t=0){this.bitField=t}static has(t,s){return!!(t&1<<s)}static add(t,s){return t|1<<s}static delete(t,s){return t&~(1<<s)}add(t){return this.bitField|=1<<t,this}delete(t){return this.bitField&=~(1<<t),this}has(s){return t.has(this.bitField,s)}clear(){return this.bitField=0,this}valueOf(){return this.bitField}toString(){return this.bitField.toString()}toJSON(){return this.bitField}};async function V(t){return new Promise(s=>setTimeout(s,t))}async function X(){return new Promise(t=>{setImmediate(t)})}import{isAsync as Y}from"util-ex";import{EventEmitter as tt}from"events-ex";import{AbortError as st}from"@isdk/common-error";var nt=32;function rt(t){return"function"==typeof t}function it(){return"1"}var et=class{constructor(t={}){const{initFn:s=it,pauseFn:n,resumeFn:r,capacity:i=nt}=t;if(rt(n)!==rt(r))throw new Error("pauseFn and resumeFn must be both set for pausing");this.waiting=new K(i),this.emitter=new tt,this.useDefaultTokens=s===it,this.pauseFn=n,this.resumeFn=r,this.initTokenFn=s,this.paused=!1,this._activeCount=0,this.initFree(t),this.init(t)}initFree(t){this.free=this.initTokenFn()}onReleased(t){const s=t?.token,n=this.waiting.shift(!0);n?this._dispatchTask(n,t):(this.resumeFn&&this.paused&&(this.paused=!1,this.resumeFn()),this.unlock(s))}init(t){this.emitter.on("release",t=>{this.onReleased(t)})}_newReleaser(t){let s=!1;const n=()=>{s||(s=!0,this.release(t))};return t&&Object.assign(n,t),n}_dispatchTask(t,s){const{resolve:n}=t;n(this._newReleaser(s))}lock(t){const s=this.free;if(s)return this.free=void 0,s}unlock(t){this.free=this.useDefaultTokens?"1":t??this.initTokenFn()}tryAcquire(t){return this.lock(t)}async acquire(t){this._activeCount++;const s=t?.signal,n=t=>{this.pauseFn&&!this.paused&&(this.paused=!0,this.pauseFn());const n=this.waiting.push(t),r=t.reject;return s&&s.addEventListener("abort",()=>{this.waiting[n]=void 0;const t=s.reason instanceof Error?s.reason:new st(s.reason||"aborted");s.alreadyRejected=!0,r(t)}),n},r=this.tryAcquire(t),i=r&&Y(r),e=s=>new Promise((r,i)=>{const e={...t,resolve:r,reject:i,token:s};void 0===s?n(e):this._dispatchTask(e,{...t,token:s})});return i?r.then(t=>e(t)):e(r)}release(t){this._activeCount--,this.emitter.emit("release",t)}drain(){const t=[this.acquire()];return Promise.all(t)}abort(t){let s;for(;s=this.waiting.shift(!0);)s.reject(new st(t))}get activeCount(){return this._activeCount}get pendingCount(){return this.waiting.size}},ot=class extends et{constructor(t,s){if("number"==typeof t)(s=s||{}).maxConcurrency=t;else if("number"!=typeof(s=t).maxConcurrency)throw new Error("maxConcurrency must be set");super(s),this.maxConcurrency=s.maxConcurrency,s.isReadyFn&&(this.isReady=s.isReadyFn)}initFree(t){const s=t.maxConcurrency=Math.max(1,t.maxConcurrency);this.free=new K(s);for(let t=0;t<s;t++)this.free.push(this.initTokenFn())}tryAcquire(t){let s=this.isReady;if(s&&Y(s)){return s instanceof Promise||(s=s()),s.then(s=>{if(s)return this.lock(t)})}if(!s||s())return this.lock(t)}unlock(t){this.free.push(this.useDefaultTokens?"1":t??this.initTokenFn())}lock(t){return this.free.pop()}drain(){const t=new Array(this.maxConcurrency);for(let s=0;s<this.maxConcurrency;s++)t[s]=this.acquire();return Promise.all(t)}};function ct(t,{timeUnit:s=1e3,uniformDistribution:n=!1}={}){const r=new ot(n?1:t),i=n?s/t:s;return async function(){await r.acquire(),setTimeout(()=>r.release(),i)}}import{AbortError as ht}from"@isdk/common-error";var ut=class{constructor(){this._isSignaled=!1,this.waitQueue=[]}get signaled(){return this._isSignaled}signal(t){if(this._isSignaled)return;this._isSignaled=!0,this._signalValue=t;const s=this.waitQueue.slice();for(this.waitQueue.length=0;s.length>0;){const t=s.shift();t?.resolve(this._signalValue)}}reset(){this._isSignaled=!1,this._signalValue=void 0,this.waitQueue.length=0}abort(t){if(this.waitQueue.length){const s=this.waitQueue.slice();this.waitQueue.length=0;const n=new ht(t);for(;s.length>0;){const{reject:t}=s.shift();t(n)}}}async wait(){return new Promise((t,s)=>{this._isSignaled?t(this._signalValue):this.waitQueue.push({resolve:t,reject:s})})}};import ft from"net";async function at(t,s=10){return new Promise((n,r)=>{void 0===t?t=0:("string"==typeof t&&(t=parseInt(t)),t>=0||(t=0));const i=ft.createServer();i.on("error",n=>{"EADDRINUSE"===n.code&&(t++,--s>0)?i.listen(t):r(n)}),i.on("listening",async()=>{const t=i.address().port;i.close(s=>{s?r(s):n(t)})}),i.listen(t)})}import{isEmpty as lt,isNil as mt,isObject as pt,isPlainObject as yt}from"lodash-es";function dt(t,s,n=new WeakMap){if(!pt(t)||mt(t))return t;if(n.has(t))return n.get(t);let r;if(Array.isArray(t)){r=[],n.set(t,r);const i=t.map(t=>dt(t,s,n)).filter((t,n)=>!s(t,n.toString()));return Object.assign(r,i),r.length>0?r:void 0}if(yt(t)){r={},n.set(t,r);const i=Reflect.ownKeys(t);for(const e of i){const i=dt(t[e],s,n);s(i,e)||(r[e]=i)}return lt(r)?void 0:r}return t}import{isArray as gt,isEmpty as vt,isNil as wt,isPlainObject as bt}from"lodash-es";var kt=(t,s)=>dt(t,t=>function(t){return!!wt(t)||"string"==typeof t&&0===t.trim().length||!(!gt(t)&&!bt(t))&&vt(t)}(t)||s&&"function"==typeof t),xt={javascript:"js",jsx:"js",typescript:"ts",tsx:"ts",markdown:"md",python:"py",ruby:"rb",bash:"sh",zsh:"sh",shell:"sh",yaml:"yml",golang:"go",rust:"rs","c#":"cs",csharp:"cs","c++":"cpp"};function Ft(t,s){if(!t)return t;const n=t.toLowerCase();return s&&n in s?s[n]:xt[n]||n}function jt(t,s={}){const{lang:n,langMap:r}=s,i=Ft(n,r),e=/^[ \t]*(?<fence>`{3,}|~{3,})(?<lang>\S*)[ \t]*(?<meta>\S*?)\n(?<code>[\s\S]+?\n)?[ \t]*\k<fence>$/gm,o=[];let c;for(e.lastIndex=0;null!==(c=e.exec(t));){const t=c.groups?.lang?.toLowerCase();if(!i||i===Ft(t,r)){const t=c.groups.code||"",s=new String(t);c.groups.lang&&(s.lang=c.groups.lang.toLowerCase()),c.groups.meta&&(s.meta=c.groups.meta),o.push(s)}}return o}function At(t){if(!t)return[];const s=[],n=/([>+~])?\s*([^\s>+~]+)/g;let r;for(;null!==(r=n.exec(t));){const t=r[1]||" ",n=r[2];s.push({combinator:t,lang:n})}return s}function Et(t,s){const n="string"==typeof s?{lang:s}:s??{},{index:r=-1,all:i}=n,e=At(n.lang);let o=[];if(0===e.length)o=jt(t,n);else{let s=[t];for(let t=0;t<e.length;t++){const{combinator:r,lang:i}=e[t],c=t===e.length-1,h=[],u=0===t&&" "===r?">":r;for(const t of s){let s=[];switch(u){case">":s=jt(t,{...n,lang:i,all:!0});break;case" ":console.warn('Descendant selector " " is not implemented yet.');break;case"+":console.warn('Adjacent sibling selector "+" is not implemented yet.');break;case"~":console.warn('General sibling selector "~" is not implemented yet.')}h.push(...s)}if(c)o=h;else if(s=h.map(t=>t.toString()),0===s.length)break}}if(i)return o;const c=o[r<0?o.length+r:r];return void 0!==c?c:t}export{et as BinarySemaphore,d as ConfigFile,x as DefaultAllTextFiles,nt as DefaultAsyncSemaphoreCapacity,K as Deque,N as FilenameReservedRegex,Q as IntSet,ct as RateLimit,ot as Semaphore,ut as SignalGate,C as WindowsReservedNameRegex,W as arrayHasAll,G as extNameLevel,Et as extractCodeBlock,jt as extractTopLevelCodeBlocks,B as filenameReservedRegex,at as findPort,c as getMultiLevelExtname,b as glob,k as isStringIn,J as isValidFilename,L as isValidFilepath,F as normalizeIncludeFiles,dt as omitDeepBy,kt as omitEmptyDeep,At as parseCodeBlockSelector,y as parseFrontMatter,l as parseYaml,I as reControlCharsRegex,a as registerYamlTag,p as removeLeadingEmptyLines,U as sanitizeFilename,Z as sanitizeFilepath,V as sleep,m as stringifyYaml,O as toCamelCase,T as toCapitalCase,P as toPascalCase,S as traverseFolder,$ as traverseFolderSync,X as yieldExec};