@isdk/util 0.3.4 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +111 -1
- package/dist/index.d.ts +111 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/docs/classes/BinarySemaphore.md +27 -27
- package/docs/classes/ConfigFile.md +6 -6
- package/docs/classes/Deque.md +13 -13
- package/docs/classes/IntSet.md +14 -14
- package/docs/classes/Semaphore.md +26 -26
- package/docs/classes/SignalGate.md +9 -9
- package/docs/functions/RateLimit.md +3 -3
- package/docs/functions/arrayHasAll.md +1 -1
- package/docs/functions/extNameLevel.md +1 -1
- package/docs/functions/filenameReservedRegex.md +1 -1
- package/docs/functions/findPort.md +3 -3
- package/docs/functions/getMultiLevelExtname.md +3 -3
- package/docs/functions/glob.md +1 -1
- package/docs/functions/isStringIn.md +1 -1
- package/docs/functions/isValidFilename.md +1 -1
- package/docs/functions/isValidFilepath.md +1 -1
- package/docs/functions/normalizeIncludeFiles.md +1 -1
- package/docs/functions/omitDeepBy.md +125 -0
- package/docs/functions/omitEmptyDeep.md +51 -0
- package/docs/functions/parseFrontMatter.md +3 -3
- package/docs/functions/parseYaml.md +1 -1
- package/docs/functions/reControlCharsRegex.md +1 -1
- package/docs/functions/registerYamlTag.md +1 -1
- package/docs/functions/removeLeadingEmptyLines.md +1 -1
- package/docs/functions/sanitizeFilename.md +3 -3
- package/docs/functions/sanitizeFilepath.md +3 -3
- package/docs/functions/sleep.md +1 -1
- package/docs/functions/stringifyYaml.md +1 -1
- package/docs/functions/toCamelCase.md +1 -1
- package/docs/functions/toCapitalCase.md +1 -1
- package/docs/functions/toPascalCase.md +1 -1
- package/docs/functions/traverseFolder.md +1 -1
- package/docs/functions/traverseFolderSync.md +1 -1
- package/docs/functions/yieldExec.md +1 -1
- package/docs/globals.md +2 -0
- package/docs/interfaces/BinarySemaphoreAcquireOptions.md +2 -2
- package/docs/interfaces/BinarySemaphoreOptions.md +5 -5
- package/docs/interfaces/BinarySemaphoreReleaseOptions.md +2 -2
- package/docs/interfaces/BinarySemaphoreReleaserFunc.md +3 -3
- package/docs/interfaces/IncludeFiles.md +3 -3
- package/docs/interfaces/LoadConfigFileOptions.md +3 -3
- package/docs/interfaces/SanitizeFilenameOptions.md +3 -3
- package/docs/interfaces/SemaphoreOptions.md +7 -7
- package/docs/interfaces/SemaphoreTaskItem.md +5 -5
- package/docs/type-aliases/SemaphoreIsReadyFuncType.md +1 -1
- package/docs/type-aliases/StringifyFunc.md +1 -1
- package/docs/type-aliases/TraverseFolderHandler.md +1 -1
- package/docs/type-aliases/TraverseFolderSyncHandler.md +1 -1
- package/docs/variables/DefaultAllTextFiles.md +1 -1
- package/docs/variables/DefaultAsyncSemaphoreCapacity.md +1 -1
- package/docs/variables/FilenameReservedRegex.md +1 -1
- package/docs/variables/WindowsReservedNameRegex.md +1 -1
- package/package.json +7 -5
package/dist/index.d.mts
CHANGED
|
@@ -927,4 +927,114 @@ declare class SignalGate<T = void> {
|
|
|
927
927
|
|
|
928
928
|
declare function findPort(port: string | number, portRetryCount?: number): Promise<number>;
|
|
929
929
|
|
|
930
|
-
|
|
930
|
+
/**
|
|
931
|
+
* Recursively removes properties from an object or array that satisfy the given predicate condition.
|
|
932
|
+
*
|
|
933
|
+
* This function traverses the input value deeply and omits any property or element that causes the
|
|
934
|
+
* predicate function to return `true`. The operation is performed recursively on nested objects and arrays.
|
|
935
|
+
*
|
|
936
|
+
* For arrays:
|
|
937
|
+
* - Each element is processed recursively through omitDeepBy
|
|
938
|
+
* - Elements that satisfy the predicate are filtered out
|
|
939
|
+
* - If the resulting array is empty, returns `undefined`
|
|
940
|
+
*
|
|
941
|
+
* For plain objects:
|
|
942
|
+
* - Each property is processed recursively through omitDeepBy
|
|
943
|
+
* - Properties that satisfy the predicate are omitted
|
|
944
|
+
* - Supports both string and symbol keys via `Reflect.ownKeys`
|
|
945
|
+
* - If the resulting object is empty, returns `undefined`
|
|
946
|
+
*
|
|
947
|
+
* For primitive values:
|
|
948
|
+
* - Returns the value unchanged
|
|
949
|
+
*
|
|
950
|
+
* Special handling:
|
|
951
|
+
* - Circular references are properly handled using a WeakMap cache
|
|
952
|
+
* - Non-plain objects (Date, RegExp, etc.) are preserved as-is
|
|
953
|
+
* - Empty results (after filtering) return `undefined`
|
|
954
|
+
*
|
|
955
|
+
* @template T The type of the input value
|
|
956
|
+
* @param value - The data structure to process. Can be any type including objects, arrays, or primitives.
|
|
957
|
+
* @param predicate - A function that determines whether a property should be removed.
|
|
958
|
+
* The function receives two parameters:
|
|
959
|
+
* - `v`: The current value being evaluated
|
|
960
|
+
* - `k`: The key/index of the current value in its parent container
|
|
961
|
+
* Returns `true` to indicate the item should be removed, `false` to keep it.
|
|
962
|
+
* @param cache - Internal WeakMap for handling circular references. Should not be provided by callers.
|
|
963
|
+
* @returns A new data structure with matching properties removed, or `undefined` if the result would be empty.
|
|
964
|
+
* The returned type matches the input type but with some properties potentially omitted.
|
|
965
|
+
*
|
|
966
|
+
* @example
|
|
967
|
+
* ```ts
|
|
968
|
+
* // Remove all null and undefined values
|
|
969
|
+
* const obj = { a: 1, b: null, c: { d: undefined, e: 2 } };
|
|
970
|
+
* const result = omitDeepBy(obj, (v) => v == null);
|
|
971
|
+
* // Result: { a: 1, c: { e: 2 } }
|
|
972
|
+
* ```
|
|
973
|
+
*
|
|
974
|
+
* @example
|
|
975
|
+
* ```ts
|
|
976
|
+
* // Remove array elements with specific value
|
|
977
|
+
* const arr = [1, 2, null, 3, undefined];
|
|
978
|
+
* const result = omitDeepBy(arr, (v) => v == null);
|
|
979
|
+
* // Result: [1, 2, 3]
|
|
980
|
+
* ```
|
|
981
|
+
*
|
|
982
|
+
* @example
|
|
983
|
+
* ```ts
|
|
984
|
+
* // Remove properties based on custom conditions
|
|
985
|
+
* const data = {
|
|
986
|
+
* name: 'John',
|
|
987
|
+
* age: 0,
|
|
988
|
+
* address: {
|
|
989
|
+
* street: '',
|
|
990
|
+
* city: 'NYC',
|
|
991
|
+
* zip: null
|
|
992
|
+
* },
|
|
993
|
+
* hobbies: ['reading', '', 'swimming']
|
|
994
|
+
* };
|
|
995
|
+
*
|
|
996
|
+
* const cleaned = omitDeepBy(data, (value, key) => {
|
|
997
|
+
* // Remove falsy values except 0 and false
|
|
998
|
+
* if (key === 'age') return false; // Keep age even if 0
|
|
999
|
+
* return !value && value !== 0 && value !== false;
|
|
1000
|
+
* });
|
|
1001
|
+
*
|
|
1002
|
+
* // Result: {
|
|
1003
|
+
* // name: 'John',
|
|
1004
|
+
* // age: 0,
|
|
1005
|
+
* // address: { city: 'NYC' },
|
|
1006
|
+
* // hobbies: ['reading', 'swimming']
|
|
1007
|
+
* // }
|
|
1008
|
+
* ```
|
|
1009
|
+
*
|
|
1010
|
+
* @example
|
|
1011
|
+
* ```ts
|
|
1012
|
+
* // Handle circular references safely
|
|
1013
|
+
* const circular: any = { a: 1 };
|
|
1014
|
+
* circular.self = circular;
|
|
1015
|
+
* const result = omitDeepBy(circular, (v) => v === 1);
|
|
1016
|
+
* // Result: { self: [Circular] } where self points to the same object
|
|
1017
|
+
* ```
|
|
1018
|
+
*/
|
|
1019
|
+
declare function omitDeepBy<T>(value: T, predicate: (v: any, k: string | symbol) => boolean, cache?: WeakMap<object, any>): any;
|
|
1020
|
+
|
|
1021
|
+
/**
|
|
1022
|
+
* Deeply removes empty values from objects or arrays, supporting both string and Symbol keys.
|
|
1023
|
+
*
|
|
1024
|
+
* @remarks
|
|
1025
|
+
* This function uses recursion to clean data. For objects, it handles both `string` keys and `Symbol` keys.
|
|
1026
|
+
* If child objects or child arrays become empty after cleaning, their corresponding keys will also be removed from the parent object.
|
|
1027
|
+
*
|
|
1028
|
+
* @template T - The type of the input value
|
|
1029
|
+
* @param value - The original data that needs to be cleaned
|
|
1030
|
+
* @returns The cleaned data. If the input value itself is deeply empty, returns undefined.
|
|
1031
|
+
*
|
|
1032
|
+
* @example
|
|
1033
|
+
* ```ts
|
|
1034
|
+
* const sym = Symbol('id');
|
|
1035
|
+
* omitEmptyDeep({ [sym]: "", a: 1 }) // => { a: 1 }
|
|
1036
|
+
* ```
|
|
1037
|
+
*/
|
|
1038
|
+
declare const omitEmptyDeep: <T>(value: T, omitFunc?: boolean) => any;
|
|
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 };
|
package/dist/index.d.ts
CHANGED
|
@@ -927,4 +927,114 @@ declare class SignalGate<T = void> {
|
|
|
927
927
|
|
|
928
928
|
declare function findPort(port: string | number, portRetryCount?: number): Promise<number>;
|
|
929
929
|
|
|
930
|
-
|
|
930
|
+
/**
|
|
931
|
+
* Recursively removes properties from an object or array that satisfy the given predicate condition.
|
|
932
|
+
*
|
|
933
|
+
* This function traverses the input value deeply and omits any property or element that causes the
|
|
934
|
+
* predicate function to return `true`. The operation is performed recursively on nested objects and arrays.
|
|
935
|
+
*
|
|
936
|
+
* For arrays:
|
|
937
|
+
* - Each element is processed recursively through omitDeepBy
|
|
938
|
+
* - Elements that satisfy the predicate are filtered out
|
|
939
|
+
* - If the resulting array is empty, returns `undefined`
|
|
940
|
+
*
|
|
941
|
+
* For plain objects:
|
|
942
|
+
* - Each property is processed recursively through omitDeepBy
|
|
943
|
+
* - Properties that satisfy the predicate are omitted
|
|
944
|
+
* - Supports both string and symbol keys via `Reflect.ownKeys`
|
|
945
|
+
* - If the resulting object is empty, returns `undefined`
|
|
946
|
+
*
|
|
947
|
+
* For primitive values:
|
|
948
|
+
* - Returns the value unchanged
|
|
949
|
+
*
|
|
950
|
+
* Special handling:
|
|
951
|
+
* - Circular references are properly handled using a WeakMap cache
|
|
952
|
+
* - Non-plain objects (Date, RegExp, etc.) are preserved as-is
|
|
953
|
+
* - Empty results (after filtering) return `undefined`
|
|
954
|
+
*
|
|
955
|
+
* @template T The type of the input value
|
|
956
|
+
* @param value - The data structure to process. Can be any type including objects, arrays, or primitives.
|
|
957
|
+
* @param predicate - A function that determines whether a property should be removed.
|
|
958
|
+
* The function receives two parameters:
|
|
959
|
+
* - `v`: The current value being evaluated
|
|
960
|
+
* - `k`: The key/index of the current value in its parent container
|
|
961
|
+
* Returns `true` to indicate the item should be removed, `false` to keep it.
|
|
962
|
+
* @param cache - Internal WeakMap for handling circular references. Should not be provided by callers.
|
|
963
|
+
* @returns A new data structure with matching properties removed, or `undefined` if the result would be empty.
|
|
964
|
+
* The returned type matches the input type but with some properties potentially omitted.
|
|
965
|
+
*
|
|
966
|
+
* @example
|
|
967
|
+
* ```ts
|
|
968
|
+
* // Remove all null and undefined values
|
|
969
|
+
* const obj = { a: 1, b: null, c: { d: undefined, e: 2 } };
|
|
970
|
+
* const result = omitDeepBy(obj, (v) => v == null);
|
|
971
|
+
* // Result: { a: 1, c: { e: 2 } }
|
|
972
|
+
* ```
|
|
973
|
+
*
|
|
974
|
+
* @example
|
|
975
|
+
* ```ts
|
|
976
|
+
* // Remove array elements with specific value
|
|
977
|
+
* const arr = [1, 2, null, 3, undefined];
|
|
978
|
+
* const result = omitDeepBy(arr, (v) => v == null);
|
|
979
|
+
* // Result: [1, 2, 3]
|
|
980
|
+
* ```
|
|
981
|
+
*
|
|
982
|
+
* @example
|
|
983
|
+
* ```ts
|
|
984
|
+
* // Remove properties based on custom conditions
|
|
985
|
+
* const data = {
|
|
986
|
+
* name: 'John',
|
|
987
|
+
* age: 0,
|
|
988
|
+
* address: {
|
|
989
|
+
* street: '',
|
|
990
|
+
* city: 'NYC',
|
|
991
|
+
* zip: null
|
|
992
|
+
* },
|
|
993
|
+
* hobbies: ['reading', '', 'swimming']
|
|
994
|
+
* };
|
|
995
|
+
*
|
|
996
|
+
* const cleaned = omitDeepBy(data, (value, key) => {
|
|
997
|
+
* // Remove falsy values except 0 and false
|
|
998
|
+
* if (key === 'age') return false; // Keep age even if 0
|
|
999
|
+
* return !value && value !== 0 && value !== false;
|
|
1000
|
+
* });
|
|
1001
|
+
*
|
|
1002
|
+
* // Result: {
|
|
1003
|
+
* // name: 'John',
|
|
1004
|
+
* // age: 0,
|
|
1005
|
+
* // address: { city: 'NYC' },
|
|
1006
|
+
* // hobbies: ['reading', 'swimming']
|
|
1007
|
+
* // }
|
|
1008
|
+
* ```
|
|
1009
|
+
*
|
|
1010
|
+
* @example
|
|
1011
|
+
* ```ts
|
|
1012
|
+
* // Handle circular references safely
|
|
1013
|
+
* const circular: any = { a: 1 };
|
|
1014
|
+
* circular.self = circular;
|
|
1015
|
+
* const result = omitDeepBy(circular, (v) => v === 1);
|
|
1016
|
+
* // Result: { self: [Circular] } where self points to the same object
|
|
1017
|
+
* ```
|
|
1018
|
+
*/
|
|
1019
|
+
declare function omitDeepBy<T>(value: T, predicate: (v: any, k: string | symbol) => boolean, cache?: WeakMap<object, any>): any;
|
|
1020
|
+
|
|
1021
|
+
/**
|
|
1022
|
+
* Deeply removes empty values from objects or arrays, supporting both string and Symbol keys.
|
|
1023
|
+
*
|
|
1024
|
+
* @remarks
|
|
1025
|
+
* This function uses recursion to clean data. For objects, it handles both `string` keys and `Symbol` keys.
|
|
1026
|
+
* If child objects or child arrays become empty after cleaning, their corresponding keys will also be removed from the parent object.
|
|
1027
|
+
*
|
|
1028
|
+
* @template T - The type of the input value
|
|
1029
|
+
* @param value - The original data that needs to be cleaned
|
|
1030
|
+
* @returns The cleaned data. If the input value itself is deeply empty, returns undefined.
|
|
1031
|
+
*
|
|
1032
|
+
* @example
|
|
1033
|
+
* ```ts
|
|
1034
|
+
* const sym = Symbol('id');
|
|
1035
|
+
* omitEmptyDeep({ [sym]: "", a: 1 }) // => { a: 1 }
|
|
1036
|
+
* ```
|
|
1037
|
+
*/
|
|
1038
|
+
declare const omitEmptyDeep: <T>(value: T, omitFunc?: boolean) => any;
|
|
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 };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var t,e=Object.create,i=Object.defineProperty,s=Object.getOwnPropertyDescriptor,r=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 r(e))o.call(t,c)||c===n||i(t,c,{get:()=>e[c],enumerable:!(u=s(e,c))||u.enumerable});return t},c=(t,s,r)=>(r=null!=t?e(n(t)):{},u(!s&&t&&t.__esModule?r:i(r,"default",{value:t,enumerable:!0}),t)),h={};((t,e)=>{for(var s in e)i(t,s,{get:e[s],enumerable:!0})})(h,{BinarySemaphore:()=>ft,ConfigFile:()=>q,DefaultAllTextFiles:()=>R,DefaultAsyncSemaphoreCapacity:()=>ht,Deque:()=>it,FilenameReservedRegex:()=>_,IntSet:()=>st,RateLimit:()=>pt,Semaphore:()=>mt,SignalGate:()=>yt,WindowsReservedNameRegex:()=>B,arrayHasAll:()=>tt,extNameLevel:()=>X,filenameReservedRegex:()=>Z,findPort:()=>gt,getMultiLevelExtname:()=>p,glob:()=>A,isStringIn:()=>E,isValidFilename:()=>H,isValidFilepath:()=>W,normalizeIncludeFiles:()=>C,parseFrontMatter:()=>x,parseYaml:()=>g,reControlCharsRegex:()=>G,registerYamlTag:()=>v,removeLeadingEmptyLines:()=>b,sanitizeFilename:()=>K,sanitizeFilepath:()=>Q,sleep:()=>rt,stringifyYaml:()=>w,toCamelCase:()=>L,toCapitalCase:()=>M,toPascalCase:()=>D,traverseFolder:()=>T,traverseFolderSync:()=>z,yieldExec:()=>nt}),module.exports=(t=h,u(i({},"__esModule",{value:!0}),t));var a=require("fs"),l=c(require("path")),f=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,s=b(t);if(s.startsWith(e)&&("\n"===s[e.length]||"\r"===s[e.length])){let t=s.indexOf("\n"+e,i);if(-1!==t){const r=s.slice(i,t);for(t+=e.length+1;"\n"===s[t]||"\r"===s[t];)t++;const n=s.slice(t);return{data:g(r)||{},content:n}}}return{data:{},content:t}}var q=class{static register(t,e,i){f.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 s=f.Config.loadSync(t);if(!s&&i){if(!l.default.isAbsolute(i)){const e=l.default.dirname(t);i=l.default.join(e,i)}if((0,a.existsSync)(i)){const t=x((0,a.readFileSync)(i,"utf8")).data;Object.keys(t).length&&(s=t)}}return s}(t,e)}static saveSync(t,e,i){return function(t,e,{extLevel:i=1}={}){const s=function(t,e=1){"."===t[0]&&e++;let i=p(t,e);(!i||i.split(".").length<=1)&&(t+=".yaml",i=".yaml");const s=new String(t);return s.extname=i,s}(t,i),r=s.extname;t=s.toString();const n=q.stringifys[r];if(!n)throw new Error(`${t} unsupported mime type: ${r}`);e=n(e);const o=l.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),f.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 S=require("@isdk/glob"),j=c(require("path"));function A(t,e,i){return i&&(t=j.default.relative(i,t)),(0,S.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||[],s=t.exclude||[];0===i.length&&i.push(...e),t=[...i];for(const e of s)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 s of i){const i=P.default.join(t,s.name);try{if(s.isDirectory()){await e(i,s)||await T(i,e)}else{if(!0===await e(i,s))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 s of i){const i=P.default.join(t,s.name);try{if(s.isDirectory()){e(i,s)||T(i,e)}else{if(!0===e(i,s))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 L(t){return(t=D(t)).charAt(0).toLowerCase()+t.slice(1)}function M(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 Z(){return new RegExp(_.source,"g")}function G(){return new RegExp(V.source,"g")}function H(t){return t&&!(_.test(t)||G().test(t)||Y.test(t)||U.test(t))}function W(t){const e=t.split(N.default.sep);return("/"===t[0]||e[0]&&N.default.dirname(e[0])===e[0])&&e.shift(),e.every(H)}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(Z(),i)).replace(G(),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 s="number"==typeof e.maxLength?e.maxLength:J;if(t.length>s){const e=t.lastIndexOf(".");if(-1===e)t=t.slice(0,s);else{const i=t.slice(0,e),r=t.slice(e);t=i.slice(0,Math.max(1,s-r.length))+r}}return t}function Q(t,e={}){const i=t.split(N.default.sep);let s;("/"===t[0]||i[0]&&N.default.dirname(i[0])===i[0])&&(s=i.shift());const r=i.map(t=>K(t,e));return void 0!==s&&r.unshift(s),r.join(N.default.sep)}function X(t){return t.split(".").length-1}function tt(t,e){const i=new Set(e),s=new Set;for(const e of t)if(i.has(e)&&(s.add(e),s.size===i.size))return!0;return s.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,s=(this._front-1&i-1^i)-i;return this[s]=t,this._front=s,e<=this._capacity&&(this._length=e),s}pop(t){let e=this._length;if(0===e)return;let i=this._front+e-1&this._capacity-1,s=this[i];for(;--e>0&&t&&null==s;)i--,s=this[i];return this[i]=void 0,this._length=e,s}shift(t){let e=this._length;if(0===e)return;let i=this._front,s=this[i];for(;--e>0&&t&&null==s;)i=i+1&this._capacity-1,s=this[i];return this[i]=void 0,this._front=i+1&this._capacity-1,this._length=e,s}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 s=0;s<t;++s)this[e+s&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,s=this._capacity-1,r=i+t&s,n=this[r];if(t<e/2)this.copyWithin(i+1&s,i,i+t&s),this[i]=void 0,this._front=i+1&s;else{this.copyWithin(r,r+1&s,i+e&s);this[i+e-1&s]=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,s=this._length;if(i+s>e){!function(t,e,i,s,r){for(let n=0;n<r;++n)i[n+s]=t[n+e],t[n+e]=void 0}(this,0,this,e,i+s&e-1)}}},st=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 rt(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 lt(){return"1"}var ft=class{constructor(t={}){const{initFn:e=lt,pauseFn:i,resumeFn:s,capacity:r=ht}=t;if(at(i)!==at(s))throw new Error("pauseFn and resumeFn must be both set for pausing");this.waiting=new it(r),this.emitter=new ut.EventEmitter,this.useDefaultTokens=e===lt,this.pauseFn=i,this.resumeFn=s,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),s=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,s(t)}),i};let s=this.tryAcquire(t);const r=s&&(0,ot.isAsync)(s),n=e=>new Promise((s,r)=>{const n={...t,resolve:s,reject:r,token:e};void 0===e?i(n):this._dispatchTask(n,{...t,token:e})});return r?s.then(t=>n(t)):n(s)}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 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");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 s=new mt(i?1:t),r=i?e/t:e;return async function(){await s.acquire(),setTimeout(()=>s.release(),r)}}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,s)=>{void 0===t?t=0:("string"==typeof t&&(t=parseInt(t)),t>=0||(t=0));const r=vt.default.createServer();r.on("error",i=>{"EADDRINUSE"===i.code&&(t++,--e>0)?r.listen(t):s(i)}),r.on("listening",async()=>{const t=r.address().port;r.close(e=>{e?s(e):i(t)})}),r.listen(t)})}
|
|
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);
|
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 h(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 c,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 c(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 h=e.loadSync(s);if(!h&&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&&(h=t)}}return h}(s,r)}static saveSync(i,e,o){return function(i,e,{extLevel:o=1}={}){const c=function(t,s=1){"."===t[0]&&s++;let i=h(t,s);(!i||i.split(".").length<=1)&&(t+=".yaml",i=".yaml");const r=new String(t);return r.extname=i,r}(i,o),u=c.extname;i=c.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=h(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 x(t,s){return"string"==typeof s&&(s=[s]),-1!==s.indexOf(t)}var k=["**/*.((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 S from"path";async function $(t,s){const i=await A(t,{withFileTypes:!0});for(const r of i){const i=S.join(t,r.name);try{if(r.isDirectory()){await s(i,r)||await $(i,s)}else{if(!0===await s(i,r))break}}catch(t){console.error(`Error processing file: ${i}`),console.error(t)}}}function j(t,s){const i=E(t,{withFileTypes:!0});for(const r of i){const i=S.join(t,r.name);try{if(r.isDirectory()){s(i,r)||$(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 T(t){return(t=P(t)).charAt(0).toLowerCase()+t.slice(1)}function z(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 O from"path";import{ErrorCode as R,throwError as C}from"@isdk/common-error";var N=/[<>:"/\\|?*\u0000-\u001F]/,D=/^(con|prn|aux|nul|com\d|lpt\d)$/i,M=/^\.+(\\|\/)|^\.+$/,_=/\.+$/,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)||M.test(t)||_.test(t))}function L(t){const s=t.split(O.sep);return("/"===t[0]||s[0]&&O.dirname(s[0])===s[0])&&s.shift(),s.every(J)}function U(t,s={}){const i=s.replacement||"!";if((N.test(i)||q.test(i))&&C("Replacement string cannot contain reserved filename characters","sanitizeFilename",R.InvalidArgument),i.length>0){const s=/([<>:"/\\|?*\u0000-\u001F]){2,}/;t=t.replace(s,"$1")}if(t=(t=(t=(t=(t=t.normalize("NFD")).replace(M,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=D.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(O.sep);let r;("/"===t[0]||i[0]&&O.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(O.sep)}function G(t){return t.split(".").length-1}function H(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 K(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 Q=class extends Array{constructor(t,s){Array.isArray(t)?(super(...t),this._length=t.length,t=void 0):(super(),this._length=0),this._capacity=K(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(K(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)}}},V=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 W(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 Q(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 Q(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 ht(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 ct}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 ct(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)})}export{et as BinarySemaphore,d as ConfigFile,k as DefaultAllTextFiles,it as DefaultAsyncSemaphoreCapacity,Q as Deque,N as FilenameReservedRegex,V as IntSet,ht as RateLimit,ot as Semaphore,ut as SignalGate,D as WindowsReservedNameRegex,H as arrayHasAll,G as extNameLevel,B as filenameReservedRegex,at as findPort,h as getMultiLevelExtname,b as glob,x as isStringIn,J as isValidFilename,L as isValidFilepath,F as normalizeIncludeFiles,y as parseFrontMatter,l as parseYaml,I as reControlCharsRegex,a as registerYamlTag,p as removeLeadingEmptyLines,U as sanitizeFilename,Z as sanitizeFilepath,W as sleep,m as stringifyYaml,T as toCamelCase,z as toCapitalCase,P as toPascalCase,$ as traverseFolder,j as traverseFolderSync,X as yieldExec};
|
|
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))&>(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};
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
# Class: BinarySemaphore
|
|
8
8
|
|
|
9
|
-
Defined in: [src/async-semaphore.ts:88](https://github.com/isdk/util.js/blob/
|
|
9
|
+
Defined in: [src/async-semaphore.ts:88](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L88)
|
|
10
10
|
|
|
11
11
|
A binary semaphore implementation for managing concurrency in asynchronous operations.
|
|
12
12
|
Unlike a general semaphore, a binary semaphore allows only one caller to acquire the semaphore at a time.
|
|
@@ -45,15 +45,15 @@ const data = await Promise.all(array.map(fetchData));
|
|
|
45
45
|
|
|
46
46
|
### Constructor
|
|
47
47
|
|
|
48
|
-
> **new BinarySemaphore**(`options
|
|
48
|
+
> **new BinarySemaphore**(`options?`): `BinarySemaphore`
|
|
49
49
|
|
|
50
|
-
Defined in: [src/async-semaphore.ts:145](https://github.com/isdk/util.js/blob/
|
|
50
|
+
Defined in: [src/async-semaphore.ts:145](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L145)
|
|
51
51
|
|
|
52
52
|
Creates a binary semaphore object for managing concurrency in asynchronous operations.
|
|
53
53
|
|
|
54
54
|
#### Parameters
|
|
55
55
|
|
|
56
|
-
##### options
|
|
56
|
+
##### options?
|
|
57
57
|
|
|
58
58
|
[`BinarySemaphoreOptions`](../interfaces/BinarySemaphoreOptions.md) = `{}`
|
|
59
59
|
|
|
@@ -67,7 +67,7 @@ Creates a binary semaphore object for managing concurrency in asynchronous opera
|
|
|
67
67
|
|
|
68
68
|
> `protected` **\_activeCount**: `number`
|
|
69
69
|
|
|
70
|
-
Defined in: [src/async-semaphore.ts:97](https://github.com/isdk/util.js/blob/
|
|
70
|
+
Defined in: [src/async-semaphore.ts:97](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L97)
|
|
71
71
|
|
|
72
72
|
***
|
|
73
73
|
|
|
@@ -75,7 +75,7 @@ Defined in: [src/async-semaphore.ts:97](https://github.com/isdk/util.js/blob/124
|
|
|
75
75
|
|
|
76
76
|
> `protected` **emitter**: `EventEmitter`
|
|
77
77
|
|
|
78
|
-
Defined in: [src/async-semaphore.ts:91](https://github.com/isdk/util.js/blob/
|
|
78
|
+
Defined in: [src/async-semaphore.ts:91](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L91)
|
|
79
79
|
|
|
80
80
|
***
|
|
81
81
|
|
|
@@ -83,7 +83,7 @@ Defined in: [src/async-semaphore.ts:91](https://github.com/isdk/util.js/blob/124
|
|
|
83
83
|
|
|
84
84
|
> `protected` **free**: `any`
|
|
85
85
|
|
|
86
|
-
Defined in: [src/async-semaphore.ts:90](https://github.com/isdk/util.js/blob/
|
|
86
|
+
Defined in: [src/async-semaphore.ts:90](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L90)
|
|
87
87
|
|
|
88
88
|
***
|
|
89
89
|
|
|
@@ -91,7 +91,7 @@ Defined in: [src/async-semaphore.ts:90](https://github.com/isdk/util.js/blob/124
|
|
|
91
91
|
|
|
92
92
|
> `protected` **initTokenFn**: (`token?`) => `void`
|
|
93
93
|
|
|
94
|
-
Defined in: [src/async-semaphore.ts:95](https://github.com/isdk/util.js/blob/
|
|
94
|
+
Defined in: [src/async-semaphore.ts:95](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L95)
|
|
95
95
|
|
|
96
96
|
#### Parameters
|
|
97
97
|
|
|
@@ -109,7 +109,7 @@ Defined in: [src/async-semaphore.ts:95](https://github.com/isdk/util.js/blob/124
|
|
|
109
109
|
|
|
110
110
|
> `protected` **paused**: `boolean`
|
|
111
111
|
|
|
112
|
-
Defined in: [src/async-semaphore.ts:96](https://github.com/isdk/util.js/blob/
|
|
112
|
+
Defined in: [src/async-semaphore.ts:96](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L96)
|
|
113
113
|
|
|
114
114
|
***
|
|
115
115
|
|
|
@@ -117,7 +117,7 @@ Defined in: [src/async-semaphore.ts:96](https://github.com/isdk/util.js/blob/124
|
|
|
117
117
|
|
|
118
118
|
> `protected` `optional` **pauseFn**: () => `void`
|
|
119
119
|
|
|
120
|
-
Defined in: [src/async-semaphore.ts:93](https://github.com/isdk/util.js/blob/
|
|
120
|
+
Defined in: [src/async-semaphore.ts:93](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L93)
|
|
121
121
|
|
|
122
122
|
#### Returns
|
|
123
123
|
|
|
@@ -129,7 +129,7 @@ Defined in: [src/async-semaphore.ts:93](https://github.com/isdk/util.js/blob/124
|
|
|
129
129
|
|
|
130
130
|
> `protected` `optional` **resumeFn**: () => `void`
|
|
131
131
|
|
|
132
|
-
Defined in: [src/async-semaphore.ts:94](https://github.com/isdk/util.js/blob/
|
|
132
|
+
Defined in: [src/async-semaphore.ts:94](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L94)
|
|
133
133
|
|
|
134
134
|
#### Returns
|
|
135
135
|
|
|
@@ -141,7 +141,7 @@ Defined in: [src/async-semaphore.ts:94](https://github.com/isdk/util.js/blob/124
|
|
|
141
141
|
|
|
142
142
|
> `protected` **useDefaultTokens**: `boolean`
|
|
143
143
|
|
|
144
|
-
Defined in: [src/async-semaphore.ts:92](https://github.com/isdk/util.js/blob/
|
|
144
|
+
Defined in: [src/async-semaphore.ts:92](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L92)
|
|
145
145
|
|
|
146
146
|
***
|
|
147
147
|
|
|
@@ -149,7 +149,7 @@ Defined in: [src/async-semaphore.ts:92](https://github.com/isdk/util.js/blob/124
|
|
|
149
149
|
|
|
150
150
|
> `readonly` **waiting**: [`Deque`](Deque.md)\<[`SemaphoreTaskItem`](../interfaces/SemaphoreTaskItem.md) \| `undefined`\>
|
|
151
151
|
|
|
152
|
-
Defined in: [src/async-semaphore.ts:89](https://github.com/isdk/util.js/blob/
|
|
152
|
+
Defined in: [src/async-semaphore.ts:89](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L89)
|
|
153
153
|
|
|
154
154
|
## Accessors
|
|
155
155
|
|
|
@@ -159,7 +159,7 @@ Defined in: [src/async-semaphore.ts:89](https://github.com/isdk/util.js/blob/124
|
|
|
159
159
|
|
|
160
160
|
> **get** **activeCount**(): `number`
|
|
161
161
|
|
|
162
|
-
Defined in: [src/async-semaphore.ts:318](https://github.com/isdk/util.js/blob/
|
|
162
|
+
Defined in: [src/async-semaphore.ts:318](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L318)
|
|
163
163
|
|
|
164
164
|
Get the total count of all active operations.
|
|
165
165
|
|
|
@@ -181,7 +181,7 @@ The total count of active operations, including both waiting and ongoing tasks.
|
|
|
181
181
|
|
|
182
182
|
> **get** **pendingCount**(): `number`
|
|
183
183
|
|
|
184
|
-
Defined in: [src/async-semaphore.ts:327](https://github.com/isdk/util.js/blob/
|
|
184
|
+
Defined in: [src/async-semaphore.ts:327](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L327)
|
|
185
185
|
|
|
186
186
|
Get the number of callers waiting on the semaphore, i.e. the number of pending promises.
|
|
187
187
|
|
|
@@ -197,7 +197,7 @@ The number of waiters in the waiting list.
|
|
|
197
197
|
|
|
198
198
|
> **\_dispatchTask**(`task`, `options?`): `void`
|
|
199
199
|
|
|
200
|
-
Defined in: [src/async-semaphore.ts:212](https://github.com/isdk/util.js/blob/
|
|
200
|
+
Defined in: [src/async-semaphore.ts:212](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L212)
|
|
201
201
|
|
|
202
202
|
#### Parameters
|
|
203
203
|
|
|
@@ -219,7 +219,7 @@ Defined in: [src/async-semaphore.ts:212](https://github.com/isdk/util.js/blob/12
|
|
|
219
219
|
|
|
220
220
|
> **\_newReleaser**(`options?`): [`BinarySemaphoreReleaserFunc`](../interfaces/BinarySemaphoreReleaserFunc.md)
|
|
221
221
|
|
|
222
|
-
Defined in: [src/async-semaphore.ts:199](https://github.com/isdk/util.js/blob/
|
|
222
|
+
Defined in: [src/async-semaphore.ts:199](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L199)
|
|
223
223
|
|
|
224
224
|
#### Parameters
|
|
225
225
|
|
|
@@ -237,7 +237,7 @@ Defined in: [src/async-semaphore.ts:199](https://github.com/isdk/util.js/blob/12
|
|
|
237
237
|
|
|
238
238
|
> **abort**(`reason?`): `void`
|
|
239
239
|
|
|
240
|
-
Defined in: [src/async-semaphore.ts:301](https://github.com/isdk/util.js/blob/
|
|
240
|
+
Defined in: [src/async-semaphore.ts:301](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L301)
|
|
241
241
|
|
|
242
242
|
#### Parameters
|
|
243
243
|
|
|
@@ -255,7 +255,7 @@ Defined in: [src/async-semaphore.ts:301](https://github.com/isdk/util.js/blob/12
|
|
|
255
255
|
|
|
256
256
|
> **acquire**(`options?`): `Promise`\<[`BinarySemaphoreReleaserFunc`](../interfaces/BinarySemaphoreReleaserFunc.md)\>
|
|
257
257
|
|
|
258
|
-
Defined in: [src/async-semaphore.ts:243](https://github.com/isdk/util.js/blob/
|
|
258
|
+
Defined in: [src/async-semaphore.ts:243](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L243)
|
|
259
259
|
|
|
260
260
|
Acquire a token from the semaphore, thus decrement the number of available execution slots. If initFn is not used then the return value of the function can be discarded.
|
|
261
261
|
|
|
@@ -277,7 +277,7 @@ A promise that resolves to a release function when a token is acquired. If the s
|
|
|
277
277
|
|
|
278
278
|
> **drain**(): `Promise`\<`any`[]\>
|
|
279
279
|
|
|
280
|
-
Defined in: [src/async-semaphore.ts:296](https://github.com/isdk/util.js/blob/
|
|
280
|
+
Defined in: [src/async-semaphore.ts:296](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L296)
|
|
281
281
|
|
|
282
282
|
Drains the semaphore and returns all the initialized tokens in an array. Draining is an ideal way to ensure there are no pending async tasks, for example before a process will terminate.
|
|
283
283
|
|
|
@@ -291,7 +291,7 @@ Drains the semaphore and returns all the initialized tokens in an array. Drainin
|
|
|
291
291
|
|
|
292
292
|
> **init**(`options`): `void`
|
|
293
293
|
|
|
294
|
-
Defined in: [src/async-semaphore.ts:193](https://github.com/isdk/util.js/blob/
|
|
294
|
+
Defined in: [src/async-semaphore.ts:193](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L193)
|
|
295
295
|
|
|
296
296
|
#### Parameters
|
|
297
297
|
|
|
@@ -309,7 +309,7 @@ Defined in: [src/async-semaphore.ts:193](https://github.com/isdk/util.js/blob/12
|
|
|
309
309
|
|
|
310
310
|
> **initFree**(`options?`): `void`
|
|
311
311
|
|
|
312
|
-
Defined in: [src/async-semaphore.ts:173](https://github.com/isdk/util.js/blob/
|
|
312
|
+
Defined in: [src/async-semaphore.ts:173](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L173)
|
|
313
313
|
|
|
314
314
|
#### Parameters
|
|
315
315
|
|
|
@@ -327,7 +327,7 @@ Defined in: [src/async-semaphore.ts:173](https://github.com/isdk/util.js/blob/12
|
|
|
327
327
|
|
|
328
328
|
> **lock**(`options?`): `any`
|
|
329
329
|
|
|
330
|
-
Defined in: [src/async-semaphore.ts:217](https://github.com/isdk/util.js/blob/
|
|
330
|
+
Defined in: [src/async-semaphore.ts:217](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L217)
|
|
331
331
|
|
|
332
332
|
#### Parameters
|
|
333
333
|
|
|
@@ -345,7 +345,7 @@ Defined in: [src/async-semaphore.ts:217](https://github.com/isdk/util.js/blob/12
|
|
|
345
345
|
|
|
346
346
|
> **onReleased**(`options?`): `void`
|
|
347
347
|
|
|
348
|
-
Defined in: [src/async-semaphore.ts:177](https://github.com/isdk/util.js/blob/
|
|
348
|
+
Defined in: [src/async-semaphore.ts:177](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L177)
|
|
349
349
|
|
|
350
350
|
#### Parameters
|
|
351
351
|
|
|
@@ -363,7 +363,7 @@ Defined in: [src/async-semaphore.ts:177](https://github.com/isdk/util.js/blob/12
|
|
|
363
363
|
|
|
364
364
|
> **release**(`options?`): `void`
|
|
365
365
|
|
|
366
|
-
Defined in: [src/async-semaphore.ts:288](https://github.com/isdk/util.js/blob/
|
|
366
|
+
Defined in: [src/async-semaphore.ts:288](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L288)
|
|
367
367
|
|
|
368
368
|
Releases the semaphore, incrementing the number of free execution slots. If there are tasks in the waiting queue, the next task will be dispatched.
|
|
369
369
|
|
|
@@ -383,7 +383,7 @@ Releases the semaphore, incrementing the number of free execution slots. If ther
|
|
|
383
383
|
|
|
384
384
|
> **tryAcquire**(`options?`): `any`
|
|
385
385
|
|
|
386
|
-
Defined in: [src/async-semaphore.ts:234](https://github.com/isdk/util.js/blob/
|
|
386
|
+
Defined in: [src/async-semaphore.ts:234](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L234)
|
|
387
387
|
|
|
388
388
|
Attempt to acquire a token from the semaphore, if one is available immediately. Otherwise, return undefined.
|
|
389
389
|
|
|
@@ -405,7 +405,7 @@ Returns a token if the semaphore is not full; otherwise, returns `undefined`.
|
|
|
405
405
|
|
|
406
406
|
> **unlock**(`token?`): `void`
|
|
407
407
|
|
|
408
|
-
Defined in: [src/async-semaphore.ts:225](https://github.com/isdk/util.js/blob/
|
|
408
|
+
Defined in: [src/async-semaphore.ts:225](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/async-semaphore.ts#L225)
|
|
409
409
|
|
|
410
410
|
#### Parameters
|
|
411
411
|
|