@isdk/util 0.3.5 → 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 +1 -1
- package/dist/index.d.ts +1 -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 +3 -3
- package/docs/functions/omitEmptyDeep.md +6 -2
- 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/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 +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1035,6 +1035,6 @@ declare function omitDeepBy<T>(value: T, predicate: (v: any, k: string | symbol)
|
|
|
1035
1035
|
* omitEmptyDeep({ [sym]: "", a: 1 }) // => { a: 1 }
|
|
1036
1036
|
* ```
|
|
1037
1037
|
*/
|
|
1038
|
-
declare const omitEmptyDeep: <T>(value: T) => any;
|
|
1038
|
+
declare const omitEmptyDeep: <T>(value: T, omitFunc?: boolean) => any;
|
|
1039
1039
|
|
|
1040
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
|
@@ -1035,6 +1035,6 @@ declare function omitDeepBy<T>(value: T, predicate: (v: any, k: string | symbol)
|
|
|
1035
1035
|
* omitEmptyDeep({ [sym]: "", a: 1 }) // => { a: 1 }
|
|
1036
1036
|
* ```
|
|
1037
1037
|
*/
|
|
1038
|
-
declare const omitEmptyDeep: <T>(value: T) => any;
|
|
1038
|
+
declare const omitEmptyDeep: <T>(value: T, omitFunc?: boolean) => any;
|
|
1039
1039
|
|
|
1040
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,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:()=>qt,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");function xt(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))}var qt=t=>bt(t,xt);
|
|
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 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 d(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 y=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=d(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=y.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}y.stringifys={},y.register([".yml",".yaml"],l,m),y.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 dt}from"lodash-es";function yt(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=>yt(t,s,i)).filter((t,i)=>!s(t,i.toString()));return Object.assign(r,n),r.length>0?r:void 0}if(dt(t)){r={},i.set(t,r);const n=Reflect.ownKeys(t);for(const e of n){const n=yt(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";function kt(t){return!!wt(t)||("string"==typeof t&&0===t.trim().length||!(!vt(t)&&!bt(t))&>(t))}var xt=t=>yt(t,kt);export{et as BinarySemaphore,y 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,yt as omitDeepBy,xt as omitEmptyDeep,d 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 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/40c
|
|
|
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/40c
|
|
|
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/40c
|
|
|
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/40c
|
|
|
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/40c
|
|
|
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/40c
|
|
|
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/40c
|
|
|
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/40c
|
|
|
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/40c
|
|
|
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/40
|
|
|
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/40
|
|
|
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/40
|
|
|
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/40
|
|
|
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/40
|
|
|
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/40
|
|
|
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/40
|
|
|
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
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
# Class: ConfigFile
|
|
8
8
|
|
|
9
|
-
Defined in: [src/config-file.ts:46](https://github.com/isdk/util.js/blob/
|
|
9
|
+
Defined in: [src/config-file.ts:46](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/config-file.ts#L46)
|
|
10
10
|
|
|
11
11
|
Represents a configuration file utility class that provides methods to load and save configuration files.
|
|
12
12
|
It supports multiple file formats such as YAML, JSON, etc., by registering corresponding parsers and stringifiers.
|
|
@@ -45,7 +45,7 @@ console.log(config); // Output: { key: 'value' }
|
|
|
45
45
|
|
|
46
46
|
> `static` **stringifys**: `Record`\<`string`, [`StringifyFunc`](../type-aliases/StringifyFunc.md)\> = `{}`
|
|
47
47
|
|
|
48
|
-
Defined in: [src/config-file.ts:50](https://github.com/isdk/util.js/blob/
|
|
48
|
+
Defined in: [src/config-file.ts:50](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/config-file.ts#L50)
|
|
49
49
|
|
|
50
50
|
A record of registered stringify functions for different file extensions.
|
|
51
51
|
|
|
@@ -55,7 +55,7 @@ A record of registered stringify functions for different file extensions.
|
|
|
55
55
|
|
|
56
56
|
> `static` **existsSync**(`filename`, `options?`): `boolean`
|
|
57
57
|
|
|
58
|
-
Defined in: [src/config-file.ts:132](https://github.com/isdk/util.js/blob/
|
|
58
|
+
Defined in: [src/config-file.ts:132](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/config-file.ts#L132)
|
|
59
59
|
|
|
60
60
|
Checks if a configuration file exists at the specified path.
|
|
61
61
|
|
|
@@ -104,7 +104,7 @@ console.log(existsWithExt); // true or false
|
|
|
104
104
|
|
|
105
105
|
> `static` **loadSync**(`filename`, `options?`): `any`
|
|
106
106
|
|
|
107
|
-
Defined in: [src/config-file.ts:85](https://github.com/isdk/util.js/blob/
|
|
107
|
+
Defined in: [src/config-file.ts:85](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/config-file.ts#L85)
|
|
108
108
|
|
|
109
109
|
Loads a configuration file based on the provided filename and options.
|
|
110
110
|
|
|
@@ -141,7 +141,7 @@ console.log(config); // Output: { key: 'value' }
|
|
|
141
141
|
|
|
142
142
|
> `static` **register**(`extname`, `parser`, `stringify`): `void`
|
|
143
143
|
|
|
144
|
-
Defined in: [src/config-file.ts:64](https://github.com/isdk/util.js/blob/
|
|
144
|
+
Defined in: [src/config-file.ts:64](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/config-file.ts#L64)
|
|
145
145
|
|
|
146
146
|
Registers a parser and stringifier for specific file extensions.
|
|
147
147
|
|
|
@@ -181,7 +181,7 @@ ConfigFile.register(['.json'], JSON.parse, (obj) => JSON.stringify(obj, null, 2)
|
|
|
181
181
|
|
|
182
182
|
> `static` **saveSync**(`filename`, `config`, `options?`): `string`
|
|
183
183
|
|
|
184
|
-
Defined in: [src/config-file.ts:102](https://github.com/isdk/util.js/blob/
|
|
184
|
+
Defined in: [src/config-file.ts:102](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/config-file.ts#L102)
|
|
185
185
|
|
|
186
186
|
Saves a configuration object to a file with the specified filename and options.
|
|
187
187
|
|
package/docs/classes/Deque.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
# Class: Deque\<T\>
|
|
8
8
|
|
|
9
|
-
Defined in: [src/deque.ts:31](https://github.com/isdk/util.js/blob/
|
|
9
|
+
Defined in: [src/deque.ts:31](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L31)
|
|
10
10
|
|
|
11
11
|
## Extends
|
|
12
12
|
|
|
@@ -28,7 +28,7 @@ Defined in: [src/deque.ts:31](https://github.com/isdk/util.js/blob/40caefda2d376
|
|
|
28
28
|
|
|
29
29
|
> **new Deque**\<`T`\>(`capacity?`, `disableAutoResize?`): `Deque`\<`T`\>
|
|
30
30
|
|
|
31
|
-
Defined in: [src/deque.ts:37](https://github.com/isdk/util.js/blob/
|
|
31
|
+
Defined in: [src/deque.ts:37](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L37)
|
|
32
32
|
|
|
33
33
|
#### Parameters
|
|
34
34
|
|
|
@@ -246,7 +246,7 @@ Defined in: node\_modules/.pnpm/typescript@5.8.2/node\_modules/typescript/lib/li
|
|
|
246
246
|
|
|
247
247
|
> **get** **size**(): `number`
|
|
248
248
|
|
|
249
|
-
Defined in: [src/deque.ts:172](https://github.com/isdk/util.js/blob/
|
|
249
|
+
Defined in: [src/deque.ts:172](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L172)
|
|
250
250
|
|
|
251
251
|
Gets the number of elements in the deque.
|
|
252
252
|
|
|
@@ -317,7 +317,7 @@ The zero-based index of the desired code unit. A negative index will count back
|
|
|
317
317
|
|
|
318
318
|
> **clear**(): `void`
|
|
319
319
|
|
|
320
|
-
Defined in: [src/deque.ts:206](https://github.com/isdk/util.js/blob/
|
|
320
|
+
Defined in: [src/deque.ts:206](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L206)
|
|
321
321
|
|
|
322
322
|
#### Returns
|
|
323
323
|
|
|
@@ -851,7 +851,7 @@ An object to which the this keyword can refer in the callbackfn function. If thi
|
|
|
851
851
|
|
|
852
852
|
> **get**(`index`): `T` \| `undefined`
|
|
853
853
|
|
|
854
|
-
Defined in: [src/deque.ts:176](https://github.com/isdk/util.js/blob/
|
|
854
|
+
Defined in: [src/deque.ts:176](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L176)
|
|
855
855
|
|
|
856
856
|
#### Parameters
|
|
857
857
|
|
|
@@ -933,7 +933,7 @@ The array index at which to begin the search. If fromIndex is omitted, the searc
|
|
|
933
933
|
|
|
934
934
|
> **isEmpty**(): `boolean`
|
|
935
935
|
|
|
936
|
-
Defined in: [src/deque.ts:217](https://github.com/isdk/util.js/blob/
|
|
936
|
+
Defined in: [src/deque.ts:217](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L217)
|
|
937
937
|
|
|
938
938
|
#### Returns
|
|
939
939
|
|
|
@@ -1059,7 +1059,7 @@ An object to which the this keyword can refer in the callbackfn function. If thi
|
|
|
1059
1059
|
|
|
1060
1060
|
> **peekBack**(): `T` \| `undefined`
|
|
1061
1061
|
|
|
1062
|
-
Defined in: [src/deque.ts:190](https://github.com/isdk/util.js/blob/
|
|
1062
|
+
Defined in: [src/deque.ts:190](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L190)
|
|
1063
1063
|
|
|
1064
1064
|
#### Returns
|
|
1065
1065
|
|
|
@@ -1071,7 +1071,7 @@ Defined in: [src/deque.ts:190](https://github.com/isdk/util.js/blob/40caefda2d37
|
|
|
1071
1071
|
|
|
1072
1072
|
> **peekFront**(): `T` \| `undefined`
|
|
1073
1073
|
|
|
1074
|
-
Defined in: [src/deque.ts:199](https://github.com/isdk/util.js/blob/
|
|
1074
|
+
Defined in: [src/deque.ts:199](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L199)
|
|
1075
1075
|
|
|
1076
1076
|
#### Returns
|
|
1077
1077
|
|
|
@@ -1083,7 +1083,7 @@ Defined in: [src/deque.ts:199](https://github.com/isdk/util.js/blob/40caefda2d37
|
|
|
1083
1083
|
|
|
1084
1084
|
> **pop**(`skipNull?`): `T` \| `undefined`
|
|
1085
1085
|
|
|
1086
|
-
Defined in: [src/deque.ts:102](https://github.com/isdk/util.js/blob/
|
|
1086
|
+
Defined in: [src/deque.ts:102](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L102)
|
|
1087
1087
|
|
|
1088
1088
|
Removes and returns the element at the back of the deque.
|
|
1089
1089
|
|
|
@@ -1133,7 +1133,7 @@ mixedDeque.pop(false); // null (explicitly not skipping)
|
|
|
1133
1133
|
|
|
1134
1134
|
> **push**(`item`): `number`
|
|
1135
1135
|
|
|
1136
|
-
Defined in: [src/deque.ts:52](https://github.com/isdk/util.js/blob/
|
|
1136
|
+
Defined in: [src/deque.ts:52](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L52)
|
|
1137
1137
|
|
|
1138
1138
|
Appends new elements to the end of an array, and returns the new length of the array.
|
|
1139
1139
|
|
|
@@ -1333,7 +1333,7 @@ If initialValue is specified, it is used as the initial value to start the accum
|
|
|
1333
1333
|
|
|
1334
1334
|
> **removeAt**(`index`): `T` \| `undefined`
|
|
1335
1335
|
|
|
1336
|
-
Defined in: [src/deque.ts:226](https://github.com/isdk/util.js/blob/
|
|
1336
|
+
Defined in: [src/deque.ts:226](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L226)
|
|
1337
1337
|
|
|
1338
1338
|
Removes the element at the specified index.
|
|
1339
1339
|
|
|
@@ -1376,7 +1376,7 @@ This method mutates the array and returns a reference to the same array.
|
|
|
1376
1376
|
|
|
1377
1377
|
> **shift**(`skipNull?`): `T` \| `undefined`
|
|
1378
1378
|
|
|
1379
|
-
Defined in: [src/deque.ts:142](https://github.com/isdk/util.js/blob/
|
|
1379
|
+
Defined in: [src/deque.ts:142](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L142)
|
|
1380
1380
|
|
|
1381
1381
|
Removes and returns the element at the front of the deque.
|
|
1382
1382
|
|
|
@@ -1665,7 +1665,7 @@ Returns a string representation of an array.
|
|
|
1665
1665
|
|
|
1666
1666
|
> **unshift**(`item`): `number`
|
|
1667
1667
|
|
|
1668
|
-
Defined in: [src/deque.ts:65](https://github.com/isdk/util.js/blob/
|
|
1668
|
+
Defined in: [src/deque.ts:65](https://github.com/isdk/util.js/blob/61856e5b1bbb9d976eeb1fdfe1a4d88a26997dec/src/deque.ts#L65)
|
|
1669
1669
|
|
|
1670
1670
|
Inserts new elements at the start of an array, and returns the new length of the array.
|
|
1671
1671
|
|