@kubb/fabric-core 0.2.15 → 0.2.16
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/{Fabric-0mXLgmur.d.cts → Fabric-AmREkq58.d.ts} +93 -49
- package/dist/{Fabric-C-AqOkTA.d.ts → Fabric-CBrTERuf.d.cts} +93 -49
- package/dist/{defineProperty-B05cRoSl.cjs → defineProperty-Dlhh3lSJ.cjs} +33 -19
- package/dist/defineProperty-Dlhh3lSJ.cjs.map +1 -0
- package/dist/{defineProperty-BZknW4oy.js → defineProperty-_FBdEen_.js} +28 -14
- package/dist/defineProperty-_FBdEen_.js.map +1 -0
- package/dist/index.cjs +57 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +25 -3
- package/dist/index.d.ts +25 -3
- package/dist/index.js +57 -26
- package/dist/index.js.map +1 -1
- package/dist/parsers/typescript.d.cts +2 -2
- package/dist/parsers/typescript.d.ts +2 -2
- package/dist/parsers.d.cts +2 -2
- package/dist/parsers.d.ts +2 -2
- package/dist/plugins.cjs +3 -9
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.d.cts +1 -11
- package/dist/plugins.d.ts +1 -11
- package/dist/plugins.js +1 -7
- package/dist/plugins.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +2 -3
- package/dist/types.d.ts +2 -3
- package/dist/types.js.map +1 -1
- package/dist/{typescriptParser-B4-y6QxR.d.cts → typescriptParser-C3B3dzh_.d.cts} +2 -2
- package/dist/{typescriptParser-By3ckLtc.d.ts → typescriptParser-DaOfAlmM.d.ts} +2 -2
- package/package.json +1 -1
- package/src/Fabric.ts +99 -50
- package/src/FileManager.ts +19 -2
- package/src/KubbFile.ts +0 -2
- package/src/createFile.ts +87 -71
- package/src/defineFabric.ts +41 -24
- package/src/plugins/barrelPlugin.ts +0 -8
- package/src/plugins/fsPlugin.ts +0 -8
- package/src/types.ts +0 -1
- package/src/utils/AsyncEventEmitter.ts +29 -8
- package/dist/defineFabric-D_m6CB1s.d.ts +0 -9
- package/dist/defineFabric-Dkt2l0wC.d.cts +0 -9
- package/dist/defineProperty-B05cRoSl.cjs.map +0 -1
- package/dist/defineProperty-BZknW4oy.js.map +0 -1
- package/src/utils/EventEmitter.ts +0 -31
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineProperty-_FBdEen_.js","names":["e","r","n","t","t","i","n","e","r","t","n","r","e","t","a","e","r","i","n","t","r","n","i","e","t","e","n","r","i","a","e","t","n","r","i","a","uniqueBy","isDeepEqual"],"sources":["../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/lazyDataLastImpl-BDhrIOwR.js","../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/purry-DH9cw9sy.js","../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/utilityEvaluators-DORpnx39.js","../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/pipe-jLehR9-P.js","../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/purryFromLazy-3oywCNIb.js","../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/isDeepEqual-jLo35Woq.js","../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/uniqueBy-C_PxkF_D.js","../src/createFile.ts"],"sourcesContent":["function e(e,t,n){let r=n=>e(n,...t);return n===void 0?r:Object.assign(r,{lazy:n,lazyArgs:t})}export{e as lazyDataLastImpl};\n//# sourceMappingURL=lazyDataLastImpl-BDhrIOwR.js.map","import{lazyDataLastImpl as e}from\"./lazyDataLastImpl-BDhrIOwR.js\";function t(t,n,r){let i=t.length-n.length;if(i===0)return t(...n);if(i===1)return e(t,n,r);throw Error(`Wrong number of arguments`)}export{t as purry};\n//# sourceMappingURL=purry-DH9cw9sy.js.map","const e={done:!0,hasNext:!1},t={done:!1,hasNext:!1},n=()=>e,r=e=>({hasNext:!0,next:e,done:!1});export{t as SKIP_ITEM,n as lazyEmptyEvaluator,r as lazyIdentityEvaluator};\n//# sourceMappingURL=utilityEvaluators-DORpnx39.js.map","import{SKIP_ITEM as e}from\"./utilityEvaluators-DORpnx39.js\";function t(e,...t){let a=e,o=t.map(e=>`lazy`in e?r(e):void 0),s=0;for(;s<t.length;){if(o[s]===void 0||!i(a)){let e=t[s];a=e(a),s+=1;continue}let e=[];for(let n=s;n<t.length;n++){let t=o[n];if(t===void 0||(e.push(t),t.isSingle))break}let r=[];for(let t of a)if(n(t,r,e))break;let{isSingle:c}=e.at(-1);a=c?r[0]:r,s+=e.length}return a}function n(t,r,i){if(i.length===0)return r.push(t),!1;let a=t,o=e,s=!1;for(let[e,t]of i.entries()){let{index:c,items:l}=t;if(l.push(a),o=t(a,c,l),t.index+=1,o.hasNext){if(o.hasMany??!1){for(let t of o.next)if(n(t,r,i.slice(e+1)))return!0;return s}a=o.next}if(!o.hasNext)break;o.done&&(s=!0)}return o.hasNext&&r.push(a),s}function r(e){let{lazy:t,lazyArgs:n}=e,r=t(...n);return Object.assign(r,{isSingle:t.single??!1,index:0,items:[]})}function i(e){return typeof e==`string`||typeof e==`object`&&!!e&&Symbol.iterator in e}export{t as pipe};\n//# sourceMappingURL=pipe-jLehR9-P.js.map","import{pipe as e}from\"./pipe-jLehR9-P.js\";function t(t,n){let r=n.length-t.length;if(r===1){let[r,...i]=n;return e(r,{lazy:t,lazyArgs:i})}if(r===0){let r={lazy:t,lazyArgs:n};return Object.assign(t=>e(t,r),r)}throw Error(`Wrong number of arguments`)}export{t as purryFromLazy};\n//# sourceMappingURL=purryFromLazy-3oywCNIb.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){if(e===t||Object.is(e,t))return!0;if(typeof e!=`object`||typeof t!=`object`||e===null||t===null||Object.getPrototypeOf(e)!==Object.getPrototypeOf(t))return!1;if(Array.isArray(e))return r(e,t);if(e instanceof Map)return i(e,t);if(e instanceof Set)return a(e,t);if(e instanceof Date)return e.getTime()===t.getTime();if(e instanceof RegExp)return e.toString()===t.toString();if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let[r,i]of Object.entries(e))if(!(r in t)||!n(i,t[r]))return!1;return!0}function r(e,t){if(e.length!==t.length)return!1;for(let[r,i]of e.entries())if(!n(i,t[r]))return!1;return!0}function i(e,t){if(e.size!==t.size)return!1;for(let[r,i]of e.entries())if(!t.has(r)||!n(i,t.get(r)))return!1;return!0}function a(e,t){if(e.size!==t.size)return!1;let r=[...t];for(let t of e){let e=!1;for(let[i,a]of r.entries())if(n(t,a)){e=!0,r.splice(i,1);break}if(!e)return!1}return!0}export{t as isDeepEqual};\n//# sourceMappingURL=isDeepEqual-jLo35Woq.js.map","import{SKIP_ITEM as e}from\"./utilityEvaluators-DORpnx39.js\";import{purryFromLazy as t}from\"./purryFromLazy-3oywCNIb.js\";function n(...e){return t(r,e)}function r(t){let n=t,r=new Set;return(t,i,a)=>{let o=n(t,i,a);return r.has(o)?e:(r.add(o),{done:!1,hasNext:!0,next:t})}}export{n as uniqueBy};\n//# sourceMappingURL=uniqueBy-C_PxkF_D.js.map","import { createHash } from 'node:crypto'\nimport path from 'node:path'\nimport { orderBy } from 'natural-orderby'\nimport { isDeepEqual, uniqueBy } from 'remeda'\nimport type * as KubbFile from './KubbFile.ts'\nimport { trimExtName } from './utils/trimExtName.ts'\n\nexport function combineSources(sources: Array<KubbFile.Source>): Array<KubbFile.Source> {\n return uniqueBy(sources, (obj) => [obj.name, obj.isExportable, obj.isTypeOnly] as const)\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n return orderBy(exports, [\n (v) => !!Array.isArray(v.name),\n (v) => !v.isTypeOnly,\n (v) => v.path,\n (v) => !!v.name,\n (v) => (Array.isArray(v.name) ? orderBy(v.name) : v.name),\n ]).reduce(\n (prev, curr) => {\n const name = curr.name\n const prevByPath = prev.findLast((imp) => imp.path === curr.path)\n const prevByPathAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (export type ...)\n return prev\n }\n\n const uniquePrev = prev.findLast(\n (imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias,\n )\n\n // we already have an item that was unique enough or name field is empty or prev asAlias is set but current has no changes\n if (uniquePrev || (Array.isArray(name) && !name.length) || (prevByPath?.asAlias && !curr.asAlias)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name: Array.isArray(name) ? [...new Set(name)] : name,\n },\n ]\n }\n\n // merge all names when prev and current both have the same isTypeOnly set\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(curr.name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...curr.name])]\n\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Export>,\n )\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n const exportedNameLookup = new Set<string>()\n for (const item of exports) {\n const { name } = item\n if (!name) {\n continue\n }\n\n if (Array.isArray(name)) {\n for (const value of name) {\n if (value) {\n exportedNameLookup.add(value)\n }\n }\n continue\n }\n\n exportedNameLookup.add(name)\n }\n\n const usageCache = new Map<string, boolean>()\n const hasImportInSource = (importName: string): boolean => {\n if (!source) {\n return true\n }\n\n const cached = usageCache.get(importName)\n if (cached !== undefined) {\n return cached\n }\n\n const isUsed = source.includes(importName) || exportedNameLookup.has(importName)\n usageCache.set(importName, isUsed)\n\n return isUsed\n }\n\n return orderBy(imports, [\n (v) => !!Array.isArray(v.name),\n (v) => !v.isTypeOnly,\n (v) => v.path,\n (v) => !!v.name,\n (v) => (Array.isArray(v.name) ? orderBy(v.name) : v.name),\n ]).reduce<Array<KubbFile.Import>>((prev, curr) => {\n let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name\n\n if (curr.path === curr.root) {\n // root and path are the same file, remove the \"./\" import\n return prev\n }\n\n // merge all names and check if the importName is being used in the generated source and if not filter those imports out\n if (Array.isArray(name)) {\n name = name.filter((item) => (typeof item === 'string' ? hasImportInSource(item) : hasImportInSource(item.propertyName)))\n }\n\n const prevByPath = prev.findLast((imp) => imp.path === curr.path && imp.isTypeOnly === curr.isTypeOnly)\n const uniquePrev = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly)\n const prevByPathNameAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathNameAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (import type ...)\n return prev\n }\n\n // already unique enough or name is empty\n if (uniquePrev || (Array.isArray(name) && !name.length)) {\n return prev\n }\n\n // new item, append name\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name,\n },\n ]\n }\n\n // merge all names when prev and current both have the same isTypeOnly set\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...name])]\n\n return prev\n }\n\n // no import was found in the source, ignore import\n if (!Array.isArray(name) && name && !hasImportInSource(name)) {\n return prev\n }\n\n return [...prev, curr]\n }, [])\n}\n\n/**\n * Helper to create a file with name and id set\n */\nexport function createFile<TMeta extends object = object>(file: KubbFile.File<TMeta>): KubbFile.ResolvedFile<TMeta> {\n const extname = path.extname(file.baseName) as KubbFile.Extname\n if (!extname) {\n throw new Error(`No extname found for ${file.baseName}`)\n }\n\n const source = file.sources.map((item) => item.value).join('\\n\\n')\n const exports = file.exports?.length ? combineExports(file.exports) : []\n const imports = file.imports?.length && source ? combineImports(file.imports, exports, source) : []\n const sources = file.sources?.length ? combineSources(file.sources) : []\n\n return {\n ...file,\n id: createHash('sha256').update(file.path).digest('hex'),\n name: trimExtName(file.baseName),\n extname,\n imports: imports,\n exports: exports,\n sources: sources,\n meta: file.meta || ({} as TMeta),\n }\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_trimExtName = require('./trimExtName-Bb4zGVF1.cjs');
|
|
2
|
-
const require_defineProperty = require('./defineProperty-
|
|
2
|
+
const require_defineProperty = require('./defineProperty-Dlhh3lSJ.cjs');
|
|
3
3
|
require('./createParser-C4IkyTs5.cjs');
|
|
4
4
|
const require_defaultParser = require('./defaultParser-n9VW2iVf.cjs');
|
|
5
5
|
let natural_orderby = require("natural-orderby");
|
|
@@ -15,21 +15,32 @@ const e = (e$1) => typeof e$1 == `function`;
|
|
|
15
15
|
//#endregion
|
|
16
16
|
//#region src/utils/AsyncEventEmitter.ts
|
|
17
17
|
var _emitter = /* @__PURE__ */ new WeakMap();
|
|
18
|
+
var _mode = /* @__PURE__ */ new WeakMap();
|
|
18
19
|
var AsyncEventEmitter = class {
|
|
19
|
-
constructor(maxListener = 100) {
|
|
20
|
+
constructor({ maxListener = 100, mode = "sequential" } = {}) {
|
|
20
21
|
require_defineProperty._classPrivateFieldInitSpec(this, _emitter, new node_events.EventEmitter());
|
|
22
|
+
require_defineProperty._classPrivateFieldInitSpec(this, _mode, void 0);
|
|
21
23
|
require_defineProperty._classPrivateFieldGet2(_emitter, this).setMaxListeners(maxListener);
|
|
24
|
+
require_defineProperty._classPrivateFieldSet2(_mode, this, mode);
|
|
22
25
|
}
|
|
23
26
|
async emit(eventName, ...eventArgs) {
|
|
24
27
|
const listeners = require_defineProperty._classPrivateFieldGet2(_emitter, this).listeners(eventName);
|
|
25
28
|
if (listeners.length === 0) return;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
if (require_defineProperty._classPrivateFieldGet2(_mode, this) === "sequential") for (const listener of listeners) try {
|
|
30
|
+
await listener(...eventArgs);
|
|
31
|
+
} catch (err) {
|
|
32
|
+
console.error(`Error in listener for "${eventName}":`, err);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const promises = listeners.map(async (listener) => {
|
|
36
|
+
try {
|
|
37
|
+
await listener(...eventArgs);
|
|
38
|
+
} catch (err) {
|
|
39
|
+
console.error(`Error in listener for "${eventName}":`, err);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
await Promise.all(promises);
|
|
43
|
+
}
|
|
33
44
|
}
|
|
34
45
|
on(eventName, handler) {
|
|
35
46
|
require_defineProperty._classPrivateFieldGet2(_emitter, this).on(eventName, handler);
|
|
@@ -160,9 +171,11 @@ function mergeFile(a, b) {
|
|
|
160
171
|
};
|
|
161
172
|
}
|
|
162
173
|
var _cache = /* @__PURE__ */ new WeakMap();
|
|
174
|
+
var _filesCache = /* @__PURE__ */ new WeakMap();
|
|
163
175
|
var FileManager = class {
|
|
164
176
|
constructor({ events = new AsyncEventEmitter() } = {}) {
|
|
165
177
|
require_defineProperty._classPrivateFieldInitSpec(this, _cache, new Cache());
|
|
178
|
+
require_defineProperty._classPrivateFieldInitSpec(this, _filesCache, null);
|
|
166
179
|
require_defineProperty._defineProperty(this, "events", void 0);
|
|
167
180
|
require_defineProperty._defineProperty(this, "processor", void 0);
|
|
168
181
|
this.processor = new FileProcessor({ events });
|
|
@@ -188,6 +201,7 @@ var FileManager = class {
|
|
|
188
201
|
return resolvedFiles;
|
|
189
202
|
}
|
|
190
203
|
flush() {
|
|
204
|
+
require_defineProperty._classPrivateFieldSet2(_filesCache, this, null);
|
|
191
205
|
require_defineProperty._classPrivateFieldGet2(_cache, this).flush();
|
|
192
206
|
}
|
|
193
207
|
getByPath(path) {
|
|
@@ -195,12 +209,22 @@ var FileManager = class {
|
|
|
195
209
|
}
|
|
196
210
|
deleteByPath(path) {
|
|
197
211
|
require_defineProperty._classPrivateFieldGet2(_cache, this).delete(path);
|
|
212
|
+
require_defineProperty._classPrivateFieldSet2(_filesCache, this, null);
|
|
198
213
|
}
|
|
199
214
|
clear() {
|
|
200
215
|
require_defineProperty._classPrivateFieldGet2(_cache, this).clear();
|
|
216
|
+
require_defineProperty._classPrivateFieldSet2(_filesCache, this, null);
|
|
201
217
|
}
|
|
202
218
|
get files() {
|
|
203
|
-
|
|
219
|
+
if (require_defineProperty._classPrivateFieldGet2(_filesCache, this)) return [...require_defineProperty._classPrivateFieldGet2(_filesCache, this)];
|
|
220
|
+
const keys = (0, natural_orderby.orderBy)(require_defineProperty._classPrivateFieldGet2(_cache, this).keys(), [(v) => v.length, (v) => require_trimExtName.trimExtName(v).endsWith("index")]);
|
|
221
|
+
const files = [];
|
|
222
|
+
for (const key of keys) {
|
|
223
|
+
const file = require_defineProperty._classPrivateFieldGet2(_cache, this).get(key);
|
|
224
|
+
if (file) files.push(file);
|
|
225
|
+
}
|
|
226
|
+
require_defineProperty._classPrivateFieldSet2(_filesCache, this, files);
|
|
227
|
+
return [...files];
|
|
204
228
|
}
|
|
205
229
|
async write(options) {
|
|
206
230
|
await this.events.emit("write:start", { files: this.files });
|
|
@@ -213,8 +237,16 @@ var FileManager = class {
|
|
|
213
237
|
|
|
214
238
|
//#endregion
|
|
215
239
|
//#region src/defineFabric.ts
|
|
216
|
-
|
|
217
|
-
|
|
240
|
+
/**
|
|
241
|
+
* Defines a new Fabric factory function.
|
|
242
|
+
*
|
|
243
|
+
* @example
|
|
244
|
+
* export const createFabric = defineFabric((fabric) => {
|
|
245
|
+
* fabric.use(myPlugin())
|
|
246
|
+
* })
|
|
247
|
+
*/
|
|
248
|
+
function defineFabric(init) {
|
|
249
|
+
function create(config) {
|
|
218
250
|
const events = new AsyncEventEmitter();
|
|
219
251
|
const installedPlugins = /* @__PURE__ */ new Set();
|
|
220
252
|
const installedParsers = /* @__PURE__ */ new Set();
|
|
@@ -223,8 +255,8 @@ function defineFabric(instance) {
|
|
|
223
255
|
get files() {
|
|
224
256
|
return fileManager.files;
|
|
225
257
|
},
|
|
226
|
-
async addFile(...
|
|
227
|
-
await fileManager.add(...
|
|
258
|
+
async addFile(...files) {
|
|
259
|
+
await fileManager.add(...files);
|
|
228
260
|
},
|
|
229
261
|
config,
|
|
230
262
|
fileManager,
|
|
@@ -241,33 +273,32 @@ function defineFabric(instance) {
|
|
|
241
273
|
get files() {
|
|
242
274
|
return fileManager.files;
|
|
243
275
|
},
|
|
244
|
-
async addFile(...
|
|
245
|
-
await fileManager.add(...
|
|
276
|
+
async addFile(...files) {
|
|
277
|
+
await fileManager.add(...files);
|
|
246
278
|
},
|
|
247
279
|
async use(pluginOrParser, ...options) {
|
|
248
|
-
const args = options;
|
|
249
280
|
if (pluginOrParser.type === "plugin") {
|
|
250
|
-
if (installedPlugins.has(pluginOrParser)) console.warn(`Plugin ${pluginOrParser.name}
|
|
281
|
+
if (installedPlugins.has(pluginOrParser)) console.warn(`Plugin "${pluginOrParser.name}" already applied.`);
|
|
251
282
|
else installedPlugins.add(pluginOrParser);
|
|
252
|
-
if (
|
|
283
|
+
if (e(pluginOrParser.inject)) {
|
|
253
284
|
const injecter = pluginOrParser.inject;
|
|
254
|
-
const
|
|
255
|
-
Object.assign(fabric,
|
|
285
|
+
const injected = injecter(context, ...options);
|
|
286
|
+
Object.assign(fabric, injected);
|
|
256
287
|
}
|
|
257
288
|
}
|
|
258
|
-
if (pluginOrParser.type === "parser") if (installedParsers.has(pluginOrParser)) console.warn(`Parser ${pluginOrParser.name}
|
|
289
|
+
if (pluginOrParser.type === "parser") if (installedParsers.has(pluginOrParser)) console.warn(`Parser "${pluginOrParser.name}" already applied.`);
|
|
259
290
|
else installedParsers.add(pluginOrParser);
|
|
260
|
-
if (
|
|
291
|
+
if (e(pluginOrParser.install)) {
|
|
261
292
|
const installer = pluginOrParser.install;
|
|
262
|
-
await installer(context, ...
|
|
293
|
+
await installer(context, ...options);
|
|
263
294
|
}
|
|
264
295
|
return fabric;
|
|
265
296
|
}
|
|
266
297
|
};
|
|
267
|
-
if (
|
|
298
|
+
if (init) init(fabric);
|
|
268
299
|
return fabric;
|
|
269
300
|
}
|
|
270
|
-
return
|
|
301
|
+
return create;
|
|
271
302
|
}
|
|
272
303
|
|
|
273
304
|
//#endregion
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["e","NodeEventEmitter","defaultParser","parser: Parser | undefined","resolvedFiles: Array<KubbFile.ResolvedFile>","createFile","trimExtName","isFunction"],"sources":["../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/isFunction-BJjFuZR7.js","../src/utils/AsyncEventEmitter.ts","../src/FileProcessor.ts","../src/utils/Cache.ts","../src/FileManager.ts","../src/defineFabric.ts","../src/createFabric.ts"],"sourcesContent":["const e=e=>typeof e==`function`;export{e as isFunction};\n//# sourceMappingURL=isFunction-BJjFuZR7.js.map","import { EventEmitter as NodeEventEmitter } from 'node:events'\n\nexport class AsyncEventEmitter<TEvents extends Record<string, any>> {\n constructor(maxListener = 100) {\n this.#emitter.setMaxListeners(maxListener)\n }\n #emitter = new NodeEventEmitter()\n\n async emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void> {\n const listeners = this.#emitter.listeners(eventName) as Array<(...args: TEvents[TEventName]) => any>\n\n if (listeners.length === 0) {\n return undefined\n }\n\n await Promise.all(\n listeners.map(async (listener) => {\n try {\n return await listener(...eventArgs)\n } catch (err) {\n console.error(`Error in async listener for \"${eventName}\":`, err)\n }\n }),\n )\n }\n\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.on(eventName, handler as any)\n }\n\n onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArgs: TEvents[TEventName]) => void): void {\n const wrapper = (...args: TEvents[TEventName]) => {\n this.off(eventName, wrapper)\n handler(...args)\n }\n this.on(eventName, wrapper)\n }\n\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.off(eventName, handler as any)\n }\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","import pLimit from 'p-limit'\nimport type { FabricEvents, FabricMode } from './Fabric.ts'\nimport type * as KubbFile from './KubbFile.ts'\nimport { defaultParser } from './parsers/defaultParser.ts'\nimport type { Parser } from './parsers/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\n\nexport type ProcessFilesProps = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n dryRun?: boolean\n /**\n * @default 'sequential'\n */\n mode?: FabricMode\n}\n\ntype GetParseOptions = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n}\n\ntype Options = {\n events?: AsyncEventEmitter<FabricEvents>\n}\n\nexport class FileProcessor {\n #limit = pLimit(100)\n events: AsyncEventEmitter<FabricEvents>\n\n constructor({ events = new AsyncEventEmitter<FabricEvents>() }: Options = {}) {\n this.events = events\n\n return this\n }\n\n async parse(file: KubbFile.ResolvedFile, { parsers, extension }: GetParseOptions = {}): Promise<string> {\n const parseExtName = extension?.[file.extname] || undefined\n\n if (!parsers) {\n console.warn('No parsers provided, using default parser. If you want to use a specific parser, please provide it in the options.')\n\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n if (!file.extname) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n let parser: Parser | undefined\n for (const item of parsers) {\n if (item.extNames?.includes(file.extname)) {\n parser = item\n break\n }\n }\n\n if (!parser) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n return parser.parse(file, { extname: parseExtName })\n }\n\n async run(\n files: Array<KubbFile.ResolvedFile>,\n { parsers, mode = 'sequential', dryRun, extension }: ProcessFilesProps = {},\n ): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('process:start', { files })\n\n let processed = 0\n const total = files.length\n\n const processOne = async (resolvedFile: KubbFile.ResolvedFile, index: number) => {\n const percentage = (processed / total) * 100\n\n await this.events.emit('file:start', { file: resolvedFile, index, total })\n\n const source = dryRun ? undefined : await this.parse(resolvedFile, { extension, parsers })\n\n await this.events.emit('process:progress', {\n file: resolvedFile,\n source,\n processed,\n percentage,\n total,\n })\n\n processed++\n\n await this.events.emit('file:end', { file: resolvedFile, index, total })\n }\n\n if (mode === 'sequential') {\n async function* asyncFiles() {\n for (let index = 0; index < files.length; index++) {\n yield [files[index], index] as const\n }\n }\n\n for await (const [file, index] of asyncFiles()) {\n if (file) {\n await processOne(file, index)\n }\n }\n } else {\n const promises = files.map((resolvedFile, index) => this.#limit(() => processOne(resolvedFile, index)))\n await Promise.all(promises)\n }\n\n await this.events.emit('process:end', { files })\n\n return files\n }\n}\n","export class Cache<T> {\n #buffer = new Map<string, T>()\n\n get(key: string): T | null {\n return this.#buffer.get(key) ?? null\n }\n\n set(key: string, value: T): void {\n this.#buffer.set(key, value)\n }\n\n delete(key: string): void {\n this.#buffer.delete(key)\n }\n\n clear(): void {\n this.#buffer.clear()\n }\n\n keys(): string[] {\n return [...this.#buffer.keys()]\n }\n\n values(): Array<T> {\n return [...this.#buffer.values()]\n }\n\n flush(): void {\n // No-op for base cache\n }\n}\n","import { orderBy } from 'natural-orderby'\nimport { createFile } from './createFile.ts'\nimport type { FabricEvents } from './Fabric.ts'\nimport { FileProcessor, type ProcessFilesProps } from './FileProcessor.ts'\nimport type * as KubbFile from './KubbFile.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport { Cache } from './utils/Cache.ts'\nimport { trimExtName } from './utils/trimExtName.ts'\n\nfunction mergeFile<TMeta extends object = object>(a: KubbFile.File<TMeta>, b: KubbFile.File<TMeta>): KubbFile.File<TMeta> {\n return {\n ...a,\n sources: [...(a.sources || []), ...(b.sources || [])],\n imports: [...(a.imports || []), ...(b.imports || [])],\n exports: [...(a.exports || []), ...(b.exports || [])],\n }\n}\n\ntype Options = {\n events?: AsyncEventEmitter<FabricEvents>\n}\n\nexport class FileManager {\n #cache = new Cache<KubbFile.ResolvedFile>()\n events: AsyncEventEmitter<FabricEvents>\n processor: FileProcessor\n\n constructor({ events = new AsyncEventEmitter<FabricEvents>() }: Options = {}) {\n this.processor = new FileProcessor({ events })\n\n this.events = events\n return this\n }\n\n async add(...files: Array<KubbFile.File>) {\n const resolvedFiles: Array<KubbFile.ResolvedFile> = []\n\n const mergedFiles = new Map<string, KubbFile.File>()\n\n files.forEach((file) => {\n const existing = mergedFiles.get(file.path)\n if (existing) {\n mergedFiles.set(file.path, mergeFile(existing, file))\n } else {\n mergedFiles.set(file.path, file)\n }\n })\n\n for (const file of mergedFiles.values()) {\n const existing = this.#cache.get(file.path)\n\n const merged = existing ? mergeFile(existing, file) : file\n const resolvedFile = createFile(merged)\n\n this.#cache.set(resolvedFile.path, resolvedFile)\n this.flush()\n\n resolvedFiles.push(resolvedFile)\n }\n\n await this.events.emit('file:add', { files: resolvedFiles })\n\n return resolvedFiles\n }\n\n flush() {\n this.#cache.flush()\n }\n\n getByPath(path: KubbFile.Path): KubbFile.ResolvedFile | null {\n return this.#cache.get(path)\n }\n\n deleteByPath(path: KubbFile.Path): void {\n this.#cache.delete(path)\n }\n\n clear(): void {\n this.#cache.clear()\n }\n\n get files(): Array<KubbFile.ResolvedFile> {\n const cachedKeys = this.#cache.keys()\n\n // order by path length and if file is a barrel file\n const keys = orderBy(cachedKeys, [(v) => v.length, (v) => trimExtName(v).endsWith('index')])\n\n const files = keys.map((key) => this.#cache.get(key))\n\n return files.filter(Boolean)\n }\n\n //TODO add test and check if write of FileManager contains the newly added file\n async write(options: ProcessFilesProps): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('write:start', { files: this.files })\n\n const resolvedFiles = await this.processor.run(this.files, options)\n\n this.clear()\n\n await this.events.emit('write:end', { files: resolvedFiles })\n\n return resolvedFiles\n }\n}\n","import { isFunction } from 'remeda'\nimport type { Fabric, FabricConfig, FabricContext, FabricEvents, FabricOptions } from './Fabric.ts'\nimport { FileManager } from './FileManager.ts'\nimport type { Parser } from './parsers/types.ts'\nimport type { Plugin } from './plugins/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\n\ntype RootRenderFunction<TOptions extends FabricOptions> = (fabric: Fabric<TOptions>) => void | Promise<void>\n\nexport type DefineFabric<TOptions extends FabricOptions> = (config?: FabricConfig<TOptions>) => Fabric<TOptions>\n\nexport function defineFabric<TOptions extends FabricOptions>(instance?: RootRenderFunction<TOptions>): DefineFabric<TOptions> {\n function creator(config?: FabricConfig<TOptions>): Fabric<TOptions> {\n const events = new AsyncEventEmitter<FabricEvents>()\n const installedPlugins = new Set<Plugin<any>>()\n const installedParsers = new Set<Parser<any>>()\n const fileManager = new FileManager({ events })\n const context = {\n get files() {\n return fileManager.files\n },\n async addFile(...newFiles) {\n await fileManager.add(...newFiles)\n },\n config,\n fileManager,\n installedPlugins,\n installedParsers,\n on: events.on.bind(events),\n off: events.off.bind(events),\n onOnce: events.onOnce.bind(events),\n removeAll: events.removeAll.bind(events),\n emit: events.emit.bind(events),\n } as FabricContext<TOptions>\n\n const fabric = {\n context,\n get files() {\n return fileManager.files\n },\n async addFile(...newFiles) {\n await fileManager.add(...newFiles)\n },\n async use(pluginOrParser, ...options) {\n const args = options\n\n if (pluginOrParser.type === 'plugin') {\n if (installedPlugins.has(pluginOrParser)) {\n console.warn(`Plugin ${pluginOrParser.name} has already been applied to target fabric.`)\n } else {\n installedPlugins.add(pluginOrParser)\n }\n\n if (pluginOrParser.inject && isFunction(pluginOrParser.inject)) {\n const injecter = pluginOrParser.inject\n\n const extraApp = (injecter as any)(context, ...args)\n Object.assign(fabric, extraApp)\n }\n }\n if (pluginOrParser.type === 'parser') {\n if (installedParsers.has(pluginOrParser)) {\n console.warn(`Parser ${pluginOrParser.name} has already been applied to target fabric.`)\n } else {\n installedParsers.add(pluginOrParser)\n }\n }\n\n if (pluginOrParser && isFunction(pluginOrParser.install)) {\n const installer = pluginOrParser.install\n\n await (installer as any)(context, ...args)\n }\n\n return fabric\n },\n } as Fabric<TOptions>\n\n if (instance) {\n instance(fabric)\n }\n\n return fabric\n }\n\n return creator\n}\n","import { defineFabric } from './defineFabric.ts'\n\nexport const createFabric = defineFabric()\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["e","NodeEventEmitter","defaultParser","parser: Parser | undefined","resolvedFiles: Array<KubbFile.ResolvedFile>","createFile","trimExtName","files: Array<KubbFile.ResolvedFile>","context: FabricContext<T>","fabric: Fabric<T>","isFunction"],"sources":["../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/isFunction-BJjFuZR7.js","../src/utils/AsyncEventEmitter.ts","../src/FileProcessor.ts","../src/utils/Cache.ts","../src/FileManager.ts","../src/defineFabric.ts","../src/createFabric.ts"],"sourcesContent":["const e=e=>typeof e==`function`;export{e as isFunction};\n//# sourceMappingURL=isFunction-BJjFuZR7.js.map","import { EventEmitter as NodeEventEmitter } from 'node:events'\nimport type { FabricMode } from '../Fabric.ts'\n\ntype Options = {\n mode?: FabricMode\n maxListener?: number\n}\n\nexport class AsyncEventEmitter<TEvents extends Record<string, any>> {\n constructor({ maxListener = 100, mode = 'sequential' }: Options = {}) {\n this.#emitter.setMaxListeners(maxListener)\n this.#mode = mode\n }\n\n #emitter = new NodeEventEmitter()\n #mode: FabricMode\n\n async emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void> {\n const listeners = this.#emitter.listeners(eventName) as Array<(...args: TEvents[TEventName]) => any>\n\n if (listeners.length === 0) {\n return\n }\n\n if (this.#mode === 'sequential') {\n // Run listeners one by one, in order\n for (const listener of listeners) {\n try {\n await listener(...eventArgs)\n } catch (err) {\n console.error(`Error in listener for \"${eventName}\":`, err)\n }\n }\n } else {\n // Run all listeners concurrently\n const promises = listeners.map(async (listener) => {\n try {\n await listener(...eventArgs)\n } catch (err) {\n console.error(`Error in listener for \"${eventName}\":`, err)\n }\n })\n await Promise.all(promises)\n }\n }\n\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.on(eventName, handler as any)\n }\n\n onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArgs: TEvents[TEventName]) => void): void {\n const wrapper = (...args: TEvents[TEventName]) => {\n this.off(eventName, wrapper)\n handler(...args)\n }\n this.on(eventName, wrapper)\n }\n\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.off(eventName, handler as any)\n }\n\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","import pLimit from 'p-limit'\nimport type { FabricEvents, FabricMode } from './Fabric.ts'\nimport type * as KubbFile from './KubbFile.ts'\nimport { defaultParser } from './parsers/defaultParser.ts'\nimport type { Parser } from './parsers/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\n\nexport type ProcessFilesProps = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n dryRun?: boolean\n /**\n * @default 'sequential'\n */\n mode?: FabricMode\n}\n\ntype GetParseOptions = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n}\n\ntype Options = {\n events?: AsyncEventEmitter<FabricEvents>\n}\n\nexport class FileProcessor {\n #limit = pLimit(100)\n events: AsyncEventEmitter<FabricEvents>\n\n constructor({ events = new AsyncEventEmitter<FabricEvents>() }: Options = {}) {\n this.events = events\n\n return this\n }\n\n async parse(file: KubbFile.ResolvedFile, { parsers, extension }: GetParseOptions = {}): Promise<string> {\n const parseExtName = extension?.[file.extname] || undefined\n\n if (!parsers) {\n console.warn('No parsers provided, using default parser. If you want to use a specific parser, please provide it in the options.')\n\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n if (!file.extname) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n let parser: Parser | undefined\n for (const item of parsers) {\n if (item.extNames?.includes(file.extname)) {\n parser = item\n break\n }\n }\n\n if (!parser) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n return parser.parse(file, { extname: parseExtName })\n }\n\n async run(\n files: Array<KubbFile.ResolvedFile>,\n { parsers, mode = 'sequential', dryRun, extension }: ProcessFilesProps = {},\n ): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('process:start', { files })\n\n let processed = 0\n const total = files.length\n\n const processOne = async (resolvedFile: KubbFile.ResolvedFile, index: number) => {\n const percentage = (processed / total) * 100\n\n await this.events.emit('file:start', { file: resolvedFile, index, total })\n\n const source = dryRun ? undefined : await this.parse(resolvedFile, { extension, parsers })\n\n await this.events.emit('process:progress', {\n file: resolvedFile,\n source,\n processed,\n percentage,\n total,\n })\n\n processed++\n\n await this.events.emit('file:end', { file: resolvedFile, index, total })\n }\n\n if (mode === 'sequential') {\n async function* asyncFiles() {\n for (let index = 0; index < files.length; index++) {\n yield [files[index], index] as const\n }\n }\n\n for await (const [file, index] of asyncFiles()) {\n if (file) {\n await processOne(file, index)\n }\n }\n } else {\n const promises = files.map((resolvedFile, index) => this.#limit(() => processOne(resolvedFile, index)))\n await Promise.all(promises)\n }\n\n await this.events.emit('process:end', { files })\n\n return files\n }\n}\n","export class Cache<T> {\n #buffer = new Map<string, T>()\n\n get(key: string): T | null {\n return this.#buffer.get(key) ?? null\n }\n\n set(key: string, value: T): void {\n this.#buffer.set(key, value)\n }\n\n delete(key: string): void {\n this.#buffer.delete(key)\n }\n\n clear(): void {\n this.#buffer.clear()\n }\n\n keys(): string[] {\n return [...this.#buffer.keys()]\n }\n\n values(): Array<T> {\n return [...this.#buffer.values()]\n }\n\n flush(): void {\n // No-op for base cache\n }\n}\n","import { orderBy } from 'natural-orderby'\nimport { createFile } from './createFile.ts'\nimport type { FabricEvents } from './Fabric.ts'\nimport { FileProcessor, type ProcessFilesProps } from './FileProcessor.ts'\nimport type * as KubbFile from './KubbFile.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport { Cache } from './utils/Cache.ts'\nimport { trimExtName } from './utils/trimExtName.ts'\n\nfunction mergeFile<TMeta extends object = object>(a: KubbFile.File<TMeta>, b: KubbFile.File<TMeta>): KubbFile.File<TMeta> {\n return {\n ...a,\n sources: [...(a.sources || []), ...(b.sources || [])],\n imports: [...(a.imports || []), ...(b.imports || [])],\n exports: [...(a.exports || []), ...(b.exports || [])],\n }\n}\n\ntype Options = {\n events?: AsyncEventEmitter<FabricEvents>\n}\n\nexport class FileManager {\n #cache = new Cache<KubbFile.ResolvedFile>()\n #filesCache: Array<KubbFile.ResolvedFile> | null = null\n events: AsyncEventEmitter<FabricEvents>\n processor: FileProcessor\n\n constructor({ events = new AsyncEventEmitter<FabricEvents>() }: Options = {}) {\n this.processor = new FileProcessor({ events })\n\n this.events = events\n return this\n }\n\n async add(...files: Array<KubbFile.File>) {\n const resolvedFiles: Array<KubbFile.ResolvedFile> = []\n\n const mergedFiles = new Map<string, KubbFile.File>()\n\n files.forEach((file) => {\n const existing = mergedFiles.get(file.path)\n if (existing) {\n mergedFiles.set(file.path, mergeFile(existing, file))\n } else {\n mergedFiles.set(file.path, file)\n }\n })\n\n for (const file of mergedFiles.values()) {\n const existing = this.#cache.get(file.path)\n\n const merged = existing ? mergeFile(existing, file) : file\n const resolvedFile = createFile(merged)\n\n this.#cache.set(resolvedFile.path, resolvedFile)\n this.flush()\n\n resolvedFiles.push(resolvedFile)\n }\n\n await this.events.emit('file:add', { files: resolvedFiles })\n\n return resolvedFiles\n }\n\n flush() {\n this.#filesCache = null\n this.#cache.flush()\n }\n\n getByPath(path: KubbFile.Path): KubbFile.ResolvedFile | null {\n return this.#cache.get(path)\n }\n\n deleteByPath(path: KubbFile.Path): void {\n this.#cache.delete(path)\n this.#filesCache = null\n }\n\n clear(): void {\n this.#cache.clear()\n this.#filesCache = null\n }\n\n get files(): Array<KubbFile.ResolvedFile> {\n if (this.#filesCache) {\n return [...this.#filesCache]\n }\n\n const cachedKeys = this.#cache.keys()\n\n // order by path length and if file is a barrel file\n const keys = orderBy(cachedKeys, [(v) => v.length, (v) => trimExtName(v).endsWith('index')])\n\n const files: Array<KubbFile.ResolvedFile> = []\n\n for (const key of keys) {\n const file = this.#cache.get(key)\n if (file) {\n files.push(file)\n }\n }\n\n this.#filesCache = files\n\n return [...files]\n }\n\n //TODO add test and check if write of FileManager contains the newly added file\n async write(options: ProcessFilesProps): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('write:start', { files: this.files })\n\n const resolvedFiles = await this.processor.run(this.files, options)\n\n this.clear()\n\n await this.events.emit('write:end', { files: resolvedFiles })\n\n return resolvedFiles\n }\n}\n","import { isFunction } from 'remeda'\nimport type { Fabric, FabricConfig, FabricContext, FabricEvents, FabricOptions } from './Fabric.ts'\nimport { FileManager } from './FileManager.ts'\nimport type { Parser } from './parsers/types.ts'\nimport type { Plugin } from './plugins/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\n\n/**\n * Function that initializes the root Fabric instance.\n *\n * Used for setting up plugins, parsers, or performing side effects\n * once the Fabric context is ready.\n */\ntype FabricInitializer<T extends FabricOptions> = (fabric: Fabric<T>) => void | Promise<void>\n\n/**\n * A function returned by {@link defineFabric} that creates a Fabric instance.\n */\nexport type CreateFabric<T extends FabricOptions> = (config?: FabricConfig<T>) => Fabric<T>\n\n/**\n * Defines a new Fabric factory function.\n *\n * @example\n * export const createFabric = defineFabric((fabric) => {\n * fabric.use(myPlugin())\n * })\n */\nexport function defineFabric<T extends FabricOptions>(init?: FabricInitializer<T>): CreateFabric<T> {\n function create(config?: FabricConfig<T>): Fabric<T> {\n const events = new AsyncEventEmitter<FabricEvents>()\n const installedPlugins = new Set<Plugin<any>>()\n const installedParsers = new Set<Parser<any>>()\n const fileManager = new FileManager({ events })\n\n const context: FabricContext<T> = {\n get files() {\n return fileManager.files\n },\n async addFile(...files) {\n await fileManager.add(...files)\n },\n config,\n fileManager,\n installedPlugins,\n installedParsers,\n on: events.on.bind(events),\n off: events.off.bind(events),\n onOnce: events.onOnce.bind(events),\n removeAll: events.removeAll.bind(events),\n emit: events.emit.bind(events),\n } as FabricContext<T>\n\n const fabric: Fabric<T> = {\n context,\n get files() {\n return fileManager.files\n },\n async addFile(...files) {\n await fileManager.add(...files)\n },\n async use(pluginOrParser, ...options) {\n if (pluginOrParser.type === 'plugin') {\n if (installedPlugins.has(pluginOrParser)) {\n console.warn(`Plugin \"${pluginOrParser.name}\" already applied.`)\n } else {\n installedPlugins.add(pluginOrParser)\n }\n\n if (isFunction(pluginOrParser.inject)) {\n const injecter = pluginOrParser.inject\n\n const injected = (injecter as any)(context, ...options)\n Object.assign(fabric, injected)\n }\n }\n\n if (pluginOrParser.type === 'parser') {\n if (installedParsers.has(pluginOrParser)) {\n console.warn(`Parser \"${pluginOrParser.name}\" already applied.`)\n } else {\n installedParsers.add(pluginOrParser)\n }\n }\n\n if (isFunction(pluginOrParser.install)) {\n const installer = pluginOrParser.install\n\n await (installer as any)(context, ...options)\n }\n\n return fabric\n },\n } as Fabric<T>\n\n if (init) {\n init(fabric)\n }\n\n return fabric\n }\n\n return create\n}\n","import { defineFabric } from './defineFabric.ts'\n\nexport const createFabric = defineFabric()\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,8 +1,30 @@
|
|
|
1
|
-
import { a as FabricOptions, c as FileManager, h as ResolvedFile, l as FileProcessor, p as File, t as Fabric } from "./Fabric-
|
|
2
|
-
import { n as defineFabric, t as DefineFabric } from "./defineFabric-Dkt2l0wC.cjs";
|
|
1
|
+
import { a as FabricOptions, c as FileManager, h as ResolvedFile, l as FileProcessor, n as FabricConfig, p as File, t as Fabric } from "./Fabric-CBrTERuf.cjs";
|
|
3
2
|
|
|
3
|
+
//#region src/defineFabric.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Function that initializes the root Fabric instance.
|
|
7
|
+
*
|
|
8
|
+
* Used for setting up plugins, parsers, or performing side effects
|
|
9
|
+
* once the Fabric context is ready.
|
|
10
|
+
*/
|
|
11
|
+
type FabricInitializer<T extends FabricOptions> = (fabric: Fabric<T>) => void | Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* A function returned by {@link defineFabric} that creates a Fabric instance.
|
|
14
|
+
*/
|
|
15
|
+
type CreateFabric<T extends FabricOptions> = (config?: FabricConfig<T>) => Fabric<T>;
|
|
16
|
+
/**
|
|
17
|
+
* Defines a new Fabric factory function.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* export const createFabric = defineFabric((fabric) => {
|
|
21
|
+
* fabric.use(myPlugin())
|
|
22
|
+
* })
|
|
23
|
+
*/
|
|
24
|
+
declare function defineFabric<T extends FabricOptions>(init?: FabricInitializer<T>): CreateFabric<T>;
|
|
25
|
+
//#endregion
|
|
4
26
|
//#region src/createFabric.d.ts
|
|
5
|
-
declare const createFabric:
|
|
27
|
+
declare const createFabric: CreateFabric<FabricOptions>;
|
|
6
28
|
//#endregion
|
|
7
29
|
//#region src/createFile.d.ts
|
|
8
30
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,30 @@
|
|
|
1
|
-
import { a as FabricOptions, c as FileManager, h as ResolvedFile, l as FileProcessor, p as File, t as Fabric } from "./Fabric-
|
|
2
|
-
import { n as defineFabric, t as DefineFabric } from "./defineFabric-D_m6CB1s.js";
|
|
1
|
+
import { a as FabricOptions, c as FileManager, h as ResolvedFile, l as FileProcessor, n as FabricConfig, p as File, t as Fabric } from "./Fabric-AmREkq58.js";
|
|
3
2
|
|
|
3
|
+
//#region src/defineFabric.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Function that initializes the root Fabric instance.
|
|
7
|
+
*
|
|
8
|
+
* Used for setting up plugins, parsers, or performing side effects
|
|
9
|
+
* once the Fabric context is ready.
|
|
10
|
+
*/
|
|
11
|
+
type FabricInitializer<T extends FabricOptions> = (fabric: Fabric<T>) => void | Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* A function returned by {@link defineFabric} that creates a Fabric instance.
|
|
14
|
+
*/
|
|
15
|
+
type CreateFabric<T extends FabricOptions> = (config?: FabricConfig<T>) => Fabric<T>;
|
|
16
|
+
/**
|
|
17
|
+
* Defines a new Fabric factory function.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* export const createFabric = defineFabric((fabric) => {
|
|
21
|
+
* fabric.use(myPlugin())
|
|
22
|
+
* })
|
|
23
|
+
*/
|
|
24
|
+
declare function defineFabric<T extends FabricOptions>(init?: FabricInitializer<T>): CreateFabric<T>;
|
|
25
|
+
//#endregion
|
|
4
26
|
//#region src/createFabric.d.ts
|
|
5
|
-
declare const createFabric:
|
|
27
|
+
declare const createFabric: CreateFabric<FabricOptions>;
|
|
6
28
|
//#endregion
|
|
7
29
|
//#region src/createFile.d.ts
|
|
8
30
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as createFile, i as _classPrivateFieldInitSpec, n as _classPrivateFieldGet2, t as _defineProperty } from "./defineProperty-
|
|
1
|
+
import { a as createFile, i as _classPrivateFieldInitSpec, n as _classPrivateFieldSet2, r as _classPrivateFieldGet2, t as _defineProperty } from "./defineProperty-_FBdEen_.js";
|
|
2
2
|
import { t as trimExtName } from "./trimExtName-CeOVQVbu.js";
|
|
3
3
|
import "./createParser-17uGjfu3.js";
|
|
4
4
|
import { t as defaultParser } from "./defaultParser--HzU9LPa.js";
|
|
@@ -12,21 +12,32 @@ const e = (e$1) => typeof e$1 == `function`;
|
|
|
12
12
|
//#endregion
|
|
13
13
|
//#region src/utils/AsyncEventEmitter.ts
|
|
14
14
|
var _emitter = /* @__PURE__ */ new WeakMap();
|
|
15
|
+
var _mode = /* @__PURE__ */ new WeakMap();
|
|
15
16
|
var AsyncEventEmitter = class {
|
|
16
|
-
constructor(maxListener = 100) {
|
|
17
|
+
constructor({ maxListener = 100, mode = "sequential" } = {}) {
|
|
17
18
|
_classPrivateFieldInitSpec(this, _emitter, new EventEmitter());
|
|
19
|
+
_classPrivateFieldInitSpec(this, _mode, void 0);
|
|
18
20
|
_classPrivateFieldGet2(_emitter, this).setMaxListeners(maxListener);
|
|
21
|
+
_classPrivateFieldSet2(_mode, this, mode);
|
|
19
22
|
}
|
|
20
23
|
async emit(eventName, ...eventArgs) {
|
|
21
24
|
const listeners = _classPrivateFieldGet2(_emitter, this).listeners(eventName);
|
|
22
25
|
if (listeners.length === 0) return;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
if (_classPrivateFieldGet2(_mode, this) === "sequential") for (const listener of listeners) try {
|
|
27
|
+
await listener(...eventArgs);
|
|
28
|
+
} catch (err) {
|
|
29
|
+
console.error(`Error in listener for "${eventName}":`, err);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
const promises = listeners.map(async (listener) => {
|
|
33
|
+
try {
|
|
34
|
+
await listener(...eventArgs);
|
|
35
|
+
} catch (err) {
|
|
36
|
+
console.error(`Error in listener for "${eventName}":`, err);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
await Promise.all(promises);
|
|
40
|
+
}
|
|
30
41
|
}
|
|
31
42
|
on(eventName, handler) {
|
|
32
43
|
_classPrivateFieldGet2(_emitter, this).on(eventName, handler);
|
|
@@ -157,9 +168,11 @@ function mergeFile(a, b) {
|
|
|
157
168
|
};
|
|
158
169
|
}
|
|
159
170
|
var _cache = /* @__PURE__ */ new WeakMap();
|
|
171
|
+
var _filesCache = /* @__PURE__ */ new WeakMap();
|
|
160
172
|
var FileManager = class {
|
|
161
173
|
constructor({ events = new AsyncEventEmitter() } = {}) {
|
|
162
174
|
_classPrivateFieldInitSpec(this, _cache, new Cache());
|
|
175
|
+
_classPrivateFieldInitSpec(this, _filesCache, null);
|
|
163
176
|
_defineProperty(this, "events", void 0);
|
|
164
177
|
_defineProperty(this, "processor", void 0);
|
|
165
178
|
this.processor = new FileProcessor({ events });
|
|
@@ -185,6 +198,7 @@ var FileManager = class {
|
|
|
185
198
|
return resolvedFiles;
|
|
186
199
|
}
|
|
187
200
|
flush() {
|
|
201
|
+
_classPrivateFieldSet2(_filesCache, this, null);
|
|
188
202
|
_classPrivateFieldGet2(_cache, this).flush();
|
|
189
203
|
}
|
|
190
204
|
getByPath(path) {
|
|
@@ -192,12 +206,22 @@ var FileManager = class {
|
|
|
192
206
|
}
|
|
193
207
|
deleteByPath(path) {
|
|
194
208
|
_classPrivateFieldGet2(_cache, this).delete(path);
|
|
209
|
+
_classPrivateFieldSet2(_filesCache, this, null);
|
|
195
210
|
}
|
|
196
211
|
clear() {
|
|
197
212
|
_classPrivateFieldGet2(_cache, this).clear();
|
|
213
|
+
_classPrivateFieldSet2(_filesCache, this, null);
|
|
198
214
|
}
|
|
199
215
|
get files() {
|
|
200
|
-
|
|
216
|
+
if (_classPrivateFieldGet2(_filesCache, this)) return [..._classPrivateFieldGet2(_filesCache, this)];
|
|
217
|
+
const keys = orderBy(_classPrivateFieldGet2(_cache, this).keys(), [(v) => v.length, (v) => trimExtName(v).endsWith("index")]);
|
|
218
|
+
const files = [];
|
|
219
|
+
for (const key of keys) {
|
|
220
|
+
const file = _classPrivateFieldGet2(_cache, this).get(key);
|
|
221
|
+
if (file) files.push(file);
|
|
222
|
+
}
|
|
223
|
+
_classPrivateFieldSet2(_filesCache, this, files);
|
|
224
|
+
return [...files];
|
|
201
225
|
}
|
|
202
226
|
async write(options) {
|
|
203
227
|
await this.events.emit("write:start", { files: this.files });
|
|
@@ -210,8 +234,16 @@ var FileManager = class {
|
|
|
210
234
|
|
|
211
235
|
//#endregion
|
|
212
236
|
//#region src/defineFabric.ts
|
|
213
|
-
|
|
214
|
-
|
|
237
|
+
/**
|
|
238
|
+
* Defines a new Fabric factory function.
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* export const createFabric = defineFabric((fabric) => {
|
|
242
|
+
* fabric.use(myPlugin())
|
|
243
|
+
* })
|
|
244
|
+
*/
|
|
245
|
+
function defineFabric(init) {
|
|
246
|
+
function create(config) {
|
|
215
247
|
const events = new AsyncEventEmitter();
|
|
216
248
|
const installedPlugins = /* @__PURE__ */ new Set();
|
|
217
249
|
const installedParsers = /* @__PURE__ */ new Set();
|
|
@@ -220,8 +252,8 @@ function defineFabric(instance) {
|
|
|
220
252
|
get files() {
|
|
221
253
|
return fileManager.files;
|
|
222
254
|
},
|
|
223
|
-
async addFile(...
|
|
224
|
-
await fileManager.add(...
|
|
255
|
+
async addFile(...files) {
|
|
256
|
+
await fileManager.add(...files);
|
|
225
257
|
},
|
|
226
258
|
config,
|
|
227
259
|
fileManager,
|
|
@@ -238,33 +270,32 @@ function defineFabric(instance) {
|
|
|
238
270
|
get files() {
|
|
239
271
|
return fileManager.files;
|
|
240
272
|
},
|
|
241
|
-
async addFile(...
|
|
242
|
-
await fileManager.add(...
|
|
273
|
+
async addFile(...files) {
|
|
274
|
+
await fileManager.add(...files);
|
|
243
275
|
},
|
|
244
276
|
async use(pluginOrParser, ...options) {
|
|
245
|
-
const args = options;
|
|
246
277
|
if (pluginOrParser.type === "plugin") {
|
|
247
|
-
if (installedPlugins.has(pluginOrParser)) console.warn(`Plugin ${pluginOrParser.name}
|
|
278
|
+
if (installedPlugins.has(pluginOrParser)) console.warn(`Plugin "${pluginOrParser.name}" already applied.`);
|
|
248
279
|
else installedPlugins.add(pluginOrParser);
|
|
249
|
-
if (
|
|
280
|
+
if (e(pluginOrParser.inject)) {
|
|
250
281
|
const injecter = pluginOrParser.inject;
|
|
251
|
-
const
|
|
252
|
-
Object.assign(fabric,
|
|
282
|
+
const injected = injecter(context, ...options);
|
|
283
|
+
Object.assign(fabric, injected);
|
|
253
284
|
}
|
|
254
285
|
}
|
|
255
|
-
if (pluginOrParser.type === "parser") if (installedParsers.has(pluginOrParser)) console.warn(`Parser ${pluginOrParser.name}
|
|
286
|
+
if (pluginOrParser.type === "parser") if (installedParsers.has(pluginOrParser)) console.warn(`Parser "${pluginOrParser.name}" already applied.`);
|
|
256
287
|
else installedParsers.add(pluginOrParser);
|
|
257
|
-
if (
|
|
288
|
+
if (e(pluginOrParser.install)) {
|
|
258
289
|
const installer = pluginOrParser.install;
|
|
259
|
-
await installer(context, ...
|
|
290
|
+
await installer(context, ...options);
|
|
260
291
|
}
|
|
261
292
|
return fabric;
|
|
262
293
|
}
|
|
263
294
|
};
|
|
264
|
-
if (
|
|
295
|
+
if (init) init(fabric);
|
|
265
296
|
return fabric;
|
|
266
297
|
}
|
|
267
|
-
return
|
|
298
|
+
return create;
|
|
268
299
|
}
|
|
269
300
|
|
|
270
301
|
//#endregion
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["e","NodeEventEmitter","parser: Parser | undefined","resolvedFiles: Array<KubbFile.ResolvedFile>","isFunction"],"sources":["../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/isFunction-BJjFuZR7.js","../src/utils/AsyncEventEmitter.ts","../src/FileProcessor.ts","../src/utils/Cache.ts","../src/FileManager.ts","../src/defineFabric.ts","../src/createFabric.ts"],"sourcesContent":["const e=e=>typeof e==`function`;export{e as isFunction};\n//# sourceMappingURL=isFunction-BJjFuZR7.js.map","import { EventEmitter as NodeEventEmitter } from 'node:events'\n\nexport class AsyncEventEmitter<TEvents extends Record<string, any>> {\n constructor(maxListener = 100) {\n this.#emitter.setMaxListeners(maxListener)\n }\n #emitter = new NodeEventEmitter()\n\n async emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void> {\n const listeners = this.#emitter.listeners(eventName) as Array<(...args: TEvents[TEventName]) => any>\n\n if (listeners.length === 0) {\n return undefined\n }\n\n await Promise.all(\n listeners.map(async (listener) => {\n try {\n return await listener(...eventArgs)\n } catch (err) {\n console.error(`Error in async listener for \"${eventName}\":`, err)\n }\n }),\n )\n }\n\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.on(eventName, handler as any)\n }\n\n onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArgs: TEvents[TEventName]) => void): void {\n const wrapper = (...args: TEvents[TEventName]) => {\n this.off(eventName, wrapper)\n handler(...args)\n }\n this.on(eventName, wrapper)\n }\n\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.off(eventName, handler as any)\n }\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","import pLimit from 'p-limit'\nimport type { FabricEvents, FabricMode } from './Fabric.ts'\nimport type * as KubbFile from './KubbFile.ts'\nimport { defaultParser } from './parsers/defaultParser.ts'\nimport type { Parser } from './parsers/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\n\nexport type ProcessFilesProps = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n dryRun?: boolean\n /**\n * @default 'sequential'\n */\n mode?: FabricMode\n}\n\ntype GetParseOptions = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n}\n\ntype Options = {\n events?: AsyncEventEmitter<FabricEvents>\n}\n\nexport class FileProcessor {\n #limit = pLimit(100)\n events: AsyncEventEmitter<FabricEvents>\n\n constructor({ events = new AsyncEventEmitter<FabricEvents>() }: Options = {}) {\n this.events = events\n\n return this\n }\n\n async parse(file: KubbFile.ResolvedFile, { parsers, extension }: GetParseOptions = {}): Promise<string> {\n const parseExtName = extension?.[file.extname] || undefined\n\n if (!parsers) {\n console.warn('No parsers provided, using default parser. If you want to use a specific parser, please provide it in the options.')\n\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n if (!file.extname) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n let parser: Parser | undefined\n for (const item of parsers) {\n if (item.extNames?.includes(file.extname)) {\n parser = item\n break\n }\n }\n\n if (!parser) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n return parser.parse(file, { extname: parseExtName })\n }\n\n async run(\n files: Array<KubbFile.ResolvedFile>,\n { parsers, mode = 'sequential', dryRun, extension }: ProcessFilesProps = {},\n ): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('process:start', { files })\n\n let processed = 0\n const total = files.length\n\n const processOne = async (resolvedFile: KubbFile.ResolvedFile, index: number) => {\n const percentage = (processed / total) * 100\n\n await this.events.emit('file:start', { file: resolvedFile, index, total })\n\n const source = dryRun ? undefined : await this.parse(resolvedFile, { extension, parsers })\n\n await this.events.emit('process:progress', {\n file: resolvedFile,\n source,\n processed,\n percentage,\n total,\n })\n\n processed++\n\n await this.events.emit('file:end', { file: resolvedFile, index, total })\n }\n\n if (mode === 'sequential') {\n async function* asyncFiles() {\n for (let index = 0; index < files.length; index++) {\n yield [files[index], index] as const\n }\n }\n\n for await (const [file, index] of asyncFiles()) {\n if (file) {\n await processOne(file, index)\n }\n }\n } else {\n const promises = files.map((resolvedFile, index) => this.#limit(() => processOne(resolvedFile, index)))\n await Promise.all(promises)\n }\n\n await this.events.emit('process:end', { files })\n\n return files\n }\n}\n","export class Cache<T> {\n #buffer = new Map<string, T>()\n\n get(key: string): T | null {\n return this.#buffer.get(key) ?? null\n }\n\n set(key: string, value: T): void {\n this.#buffer.set(key, value)\n }\n\n delete(key: string): void {\n this.#buffer.delete(key)\n }\n\n clear(): void {\n this.#buffer.clear()\n }\n\n keys(): string[] {\n return [...this.#buffer.keys()]\n }\n\n values(): Array<T> {\n return [...this.#buffer.values()]\n }\n\n flush(): void {\n // No-op for base cache\n }\n}\n","import { orderBy } from 'natural-orderby'\nimport { createFile } from './createFile.ts'\nimport type { FabricEvents } from './Fabric.ts'\nimport { FileProcessor, type ProcessFilesProps } from './FileProcessor.ts'\nimport type * as KubbFile from './KubbFile.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport { Cache } from './utils/Cache.ts'\nimport { trimExtName } from './utils/trimExtName.ts'\n\nfunction mergeFile<TMeta extends object = object>(a: KubbFile.File<TMeta>, b: KubbFile.File<TMeta>): KubbFile.File<TMeta> {\n return {\n ...a,\n sources: [...(a.sources || []), ...(b.sources || [])],\n imports: [...(a.imports || []), ...(b.imports || [])],\n exports: [...(a.exports || []), ...(b.exports || [])],\n }\n}\n\ntype Options = {\n events?: AsyncEventEmitter<FabricEvents>\n}\n\nexport class FileManager {\n #cache = new Cache<KubbFile.ResolvedFile>()\n events: AsyncEventEmitter<FabricEvents>\n processor: FileProcessor\n\n constructor({ events = new AsyncEventEmitter<FabricEvents>() }: Options = {}) {\n this.processor = new FileProcessor({ events })\n\n this.events = events\n return this\n }\n\n async add(...files: Array<KubbFile.File>) {\n const resolvedFiles: Array<KubbFile.ResolvedFile> = []\n\n const mergedFiles = new Map<string, KubbFile.File>()\n\n files.forEach((file) => {\n const existing = mergedFiles.get(file.path)\n if (existing) {\n mergedFiles.set(file.path, mergeFile(existing, file))\n } else {\n mergedFiles.set(file.path, file)\n }\n })\n\n for (const file of mergedFiles.values()) {\n const existing = this.#cache.get(file.path)\n\n const merged = existing ? mergeFile(existing, file) : file\n const resolvedFile = createFile(merged)\n\n this.#cache.set(resolvedFile.path, resolvedFile)\n this.flush()\n\n resolvedFiles.push(resolvedFile)\n }\n\n await this.events.emit('file:add', { files: resolvedFiles })\n\n return resolvedFiles\n }\n\n flush() {\n this.#cache.flush()\n }\n\n getByPath(path: KubbFile.Path): KubbFile.ResolvedFile | null {\n return this.#cache.get(path)\n }\n\n deleteByPath(path: KubbFile.Path): void {\n this.#cache.delete(path)\n }\n\n clear(): void {\n this.#cache.clear()\n }\n\n get files(): Array<KubbFile.ResolvedFile> {\n const cachedKeys = this.#cache.keys()\n\n // order by path length and if file is a barrel file\n const keys = orderBy(cachedKeys, [(v) => v.length, (v) => trimExtName(v).endsWith('index')])\n\n const files = keys.map((key) => this.#cache.get(key))\n\n return files.filter(Boolean)\n }\n\n //TODO add test and check if write of FileManager contains the newly added file\n async write(options: ProcessFilesProps): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('write:start', { files: this.files })\n\n const resolvedFiles = await this.processor.run(this.files, options)\n\n this.clear()\n\n await this.events.emit('write:end', { files: resolvedFiles })\n\n return resolvedFiles\n }\n}\n","import { isFunction } from 'remeda'\nimport type { Fabric, FabricConfig, FabricContext, FabricEvents, FabricOptions } from './Fabric.ts'\nimport { FileManager } from './FileManager.ts'\nimport type { Parser } from './parsers/types.ts'\nimport type { Plugin } from './plugins/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\n\ntype RootRenderFunction<TOptions extends FabricOptions> = (fabric: Fabric<TOptions>) => void | Promise<void>\n\nexport type DefineFabric<TOptions extends FabricOptions> = (config?: FabricConfig<TOptions>) => Fabric<TOptions>\n\nexport function defineFabric<TOptions extends FabricOptions>(instance?: RootRenderFunction<TOptions>): DefineFabric<TOptions> {\n function creator(config?: FabricConfig<TOptions>): Fabric<TOptions> {\n const events = new AsyncEventEmitter<FabricEvents>()\n const installedPlugins = new Set<Plugin<any>>()\n const installedParsers = new Set<Parser<any>>()\n const fileManager = new FileManager({ events })\n const context = {\n get files() {\n return fileManager.files\n },\n async addFile(...newFiles) {\n await fileManager.add(...newFiles)\n },\n config,\n fileManager,\n installedPlugins,\n installedParsers,\n on: events.on.bind(events),\n off: events.off.bind(events),\n onOnce: events.onOnce.bind(events),\n removeAll: events.removeAll.bind(events),\n emit: events.emit.bind(events),\n } as FabricContext<TOptions>\n\n const fabric = {\n context,\n get files() {\n return fileManager.files\n },\n async addFile(...newFiles) {\n await fileManager.add(...newFiles)\n },\n async use(pluginOrParser, ...options) {\n const args = options\n\n if (pluginOrParser.type === 'plugin') {\n if (installedPlugins.has(pluginOrParser)) {\n console.warn(`Plugin ${pluginOrParser.name} has already been applied to target fabric.`)\n } else {\n installedPlugins.add(pluginOrParser)\n }\n\n if (pluginOrParser.inject && isFunction(pluginOrParser.inject)) {\n const injecter = pluginOrParser.inject\n\n const extraApp = (injecter as any)(context, ...args)\n Object.assign(fabric, extraApp)\n }\n }\n if (pluginOrParser.type === 'parser') {\n if (installedParsers.has(pluginOrParser)) {\n console.warn(`Parser ${pluginOrParser.name} has already been applied to target fabric.`)\n } else {\n installedParsers.add(pluginOrParser)\n }\n }\n\n if (pluginOrParser && isFunction(pluginOrParser.install)) {\n const installer = pluginOrParser.install\n\n await (installer as any)(context, ...args)\n }\n\n return fabric\n },\n } as Fabric<TOptions>\n\n if (instance) {\n instance(fabric)\n }\n\n return fabric\n }\n\n return creator\n}\n","import { defineFabric } from './defineFabric.ts'\n\nexport const createFabric = defineFabric()\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["e","NodeEventEmitter","parser: Parser | undefined","resolvedFiles: Array<KubbFile.ResolvedFile>","files: Array<KubbFile.ResolvedFile>","context: FabricContext<T>","fabric: Fabric<T>","isFunction"],"sources":["../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/isFunction-BJjFuZR7.js","../src/utils/AsyncEventEmitter.ts","../src/FileProcessor.ts","../src/utils/Cache.ts","../src/FileManager.ts","../src/defineFabric.ts","../src/createFabric.ts"],"sourcesContent":["const e=e=>typeof e==`function`;export{e as isFunction};\n//# sourceMappingURL=isFunction-BJjFuZR7.js.map","import { EventEmitter as NodeEventEmitter } from 'node:events'\nimport type { FabricMode } from '../Fabric.ts'\n\ntype Options = {\n mode?: FabricMode\n maxListener?: number\n}\n\nexport class AsyncEventEmitter<TEvents extends Record<string, any>> {\n constructor({ maxListener = 100, mode = 'sequential' }: Options = {}) {\n this.#emitter.setMaxListeners(maxListener)\n this.#mode = mode\n }\n\n #emitter = new NodeEventEmitter()\n #mode: FabricMode\n\n async emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void> {\n const listeners = this.#emitter.listeners(eventName) as Array<(...args: TEvents[TEventName]) => any>\n\n if (listeners.length === 0) {\n return\n }\n\n if (this.#mode === 'sequential') {\n // Run listeners one by one, in order\n for (const listener of listeners) {\n try {\n await listener(...eventArgs)\n } catch (err) {\n console.error(`Error in listener for \"${eventName}\":`, err)\n }\n }\n } else {\n // Run all listeners concurrently\n const promises = listeners.map(async (listener) => {\n try {\n await listener(...eventArgs)\n } catch (err) {\n console.error(`Error in listener for \"${eventName}\":`, err)\n }\n })\n await Promise.all(promises)\n }\n }\n\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.on(eventName, handler as any)\n }\n\n onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArgs: TEvents[TEventName]) => void): void {\n const wrapper = (...args: TEvents[TEventName]) => {\n this.off(eventName, wrapper)\n handler(...args)\n }\n this.on(eventName, wrapper)\n }\n\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.off(eventName, handler as any)\n }\n\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","import pLimit from 'p-limit'\nimport type { FabricEvents, FabricMode } from './Fabric.ts'\nimport type * as KubbFile from './KubbFile.ts'\nimport { defaultParser } from './parsers/defaultParser.ts'\nimport type { Parser } from './parsers/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\n\nexport type ProcessFilesProps = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n dryRun?: boolean\n /**\n * @default 'sequential'\n */\n mode?: FabricMode\n}\n\ntype GetParseOptions = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n}\n\ntype Options = {\n events?: AsyncEventEmitter<FabricEvents>\n}\n\nexport class FileProcessor {\n #limit = pLimit(100)\n events: AsyncEventEmitter<FabricEvents>\n\n constructor({ events = new AsyncEventEmitter<FabricEvents>() }: Options = {}) {\n this.events = events\n\n return this\n }\n\n async parse(file: KubbFile.ResolvedFile, { parsers, extension }: GetParseOptions = {}): Promise<string> {\n const parseExtName = extension?.[file.extname] || undefined\n\n if (!parsers) {\n console.warn('No parsers provided, using default parser. If you want to use a specific parser, please provide it in the options.')\n\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n if (!file.extname) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n let parser: Parser | undefined\n for (const item of parsers) {\n if (item.extNames?.includes(file.extname)) {\n parser = item\n break\n }\n }\n\n if (!parser) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n return parser.parse(file, { extname: parseExtName })\n }\n\n async run(\n files: Array<KubbFile.ResolvedFile>,\n { parsers, mode = 'sequential', dryRun, extension }: ProcessFilesProps = {},\n ): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('process:start', { files })\n\n let processed = 0\n const total = files.length\n\n const processOne = async (resolvedFile: KubbFile.ResolvedFile, index: number) => {\n const percentage = (processed / total) * 100\n\n await this.events.emit('file:start', { file: resolvedFile, index, total })\n\n const source = dryRun ? undefined : await this.parse(resolvedFile, { extension, parsers })\n\n await this.events.emit('process:progress', {\n file: resolvedFile,\n source,\n processed,\n percentage,\n total,\n })\n\n processed++\n\n await this.events.emit('file:end', { file: resolvedFile, index, total })\n }\n\n if (mode === 'sequential') {\n async function* asyncFiles() {\n for (let index = 0; index < files.length; index++) {\n yield [files[index], index] as const\n }\n }\n\n for await (const [file, index] of asyncFiles()) {\n if (file) {\n await processOne(file, index)\n }\n }\n } else {\n const promises = files.map((resolvedFile, index) => this.#limit(() => processOne(resolvedFile, index)))\n await Promise.all(promises)\n }\n\n await this.events.emit('process:end', { files })\n\n return files\n }\n}\n","export class Cache<T> {\n #buffer = new Map<string, T>()\n\n get(key: string): T | null {\n return this.#buffer.get(key) ?? null\n }\n\n set(key: string, value: T): void {\n this.#buffer.set(key, value)\n }\n\n delete(key: string): void {\n this.#buffer.delete(key)\n }\n\n clear(): void {\n this.#buffer.clear()\n }\n\n keys(): string[] {\n return [...this.#buffer.keys()]\n }\n\n values(): Array<T> {\n return [...this.#buffer.values()]\n }\n\n flush(): void {\n // No-op for base cache\n }\n}\n","import { orderBy } from 'natural-orderby'\nimport { createFile } from './createFile.ts'\nimport type { FabricEvents } from './Fabric.ts'\nimport { FileProcessor, type ProcessFilesProps } from './FileProcessor.ts'\nimport type * as KubbFile from './KubbFile.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport { Cache } from './utils/Cache.ts'\nimport { trimExtName } from './utils/trimExtName.ts'\n\nfunction mergeFile<TMeta extends object = object>(a: KubbFile.File<TMeta>, b: KubbFile.File<TMeta>): KubbFile.File<TMeta> {\n return {\n ...a,\n sources: [...(a.sources || []), ...(b.sources || [])],\n imports: [...(a.imports || []), ...(b.imports || [])],\n exports: [...(a.exports || []), ...(b.exports || [])],\n }\n}\n\ntype Options = {\n events?: AsyncEventEmitter<FabricEvents>\n}\n\nexport class FileManager {\n #cache = new Cache<KubbFile.ResolvedFile>()\n #filesCache: Array<KubbFile.ResolvedFile> | null = null\n events: AsyncEventEmitter<FabricEvents>\n processor: FileProcessor\n\n constructor({ events = new AsyncEventEmitter<FabricEvents>() }: Options = {}) {\n this.processor = new FileProcessor({ events })\n\n this.events = events\n return this\n }\n\n async add(...files: Array<KubbFile.File>) {\n const resolvedFiles: Array<KubbFile.ResolvedFile> = []\n\n const mergedFiles = new Map<string, KubbFile.File>()\n\n files.forEach((file) => {\n const existing = mergedFiles.get(file.path)\n if (existing) {\n mergedFiles.set(file.path, mergeFile(existing, file))\n } else {\n mergedFiles.set(file.path, file)\n }\n })\n\n for (const file of mergedFiles.values()) {\n const existing = this.#cache.get(file.path)\n\n const merged = existing ? mergeFile(existing, file) : file\n const resolvedFile = createFile(merged)\n\n this.#cache.set(resolvedFile.path, resolvedFile)\n this.flush()\n\n resolvedFiles.push(resolvedFile)\n }\n\n await this.events.emit('file:add', { files: resolvedFiles })\n\n return resolvedFiles\n }\n\n flush() {\n this.#filesCache = null\n this.#cache.flush()\n }\n\n getByPath(path: KubbFile.Path): KubbFile.ResolvedFile | null {\n return this.#cache.get(path)\n }\n\n deleteByPath(path: KubbFile.Path): void {\n this.#cache.delete(path)\n this.#filesCache = null\n }\n\n clear(): void {\n this.#cache.clear()\n this.#filesCache = null\n }\n\n get files(): Array<KubbFile.ResolvedFile> {\n if (this.#filesCache) {\n return [...this.#filesCache]\n }\n\n const cachedKeys = this.#cache.keys()\n\n // order by path length and if file is a barrel file\n const keys = orderBy(cachedKeys, [(v) => v.length, (v) => trimExtName(v).endsWith('index')])\n\n const files: Array<KubbFile.ResolvedFile> = []\n\n for (const key of keys) {\n const file = this.#cache.get(key)\n if (file) {\n files.push(file)\n }\n }\n\n this.#filesCache = files\n\n return [...files]\n }\n\n //TODO add test and check if write of FileManager contains the newly added file\n async write(options: ProcessFilesProps): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('write:start', { files: this.files })\n\n const resolvedFiles = await this.processor.run(this.files, options)\n\n this.clear()\n\n await this.events.emit('write:end', { files: resolvedFiles })\n\n return resolvedFiles\n }\n}\n","import { isFunction } from 'remeda'\nimport type { Fabric, FabricConfig, FabricContext, FabricEvents, FabricOptions } from './Fabric.ts'\nimport { FileManager } from './FileManager.ts'\nimport type { Parser } from './parsers/types.ts'\nimport type { Plugin } from './plugins/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\n\n/**\n * Function that initializes the root Fabric instance.\n *\n * Used for setting up plugins, parsers, or performing side effects\n * once the Fabric context is ready.\n */\ntype FabricInitializer<T extends FabricOptions> = (fabric: Fabric<T>) => void | Promise<void>\n\n/**\n * A function returned by {@link defineFabric} that creates a Fabric instance.\n */\nexport type CreateFabric<T extends FabricOptions> = (config?: FabricConfig<T>) => Fabric<T>\n\n/**\n * Defines a new Fabric factory function.\n *\n * @example\n * export const createFabric = defineFabric((fabric) => {\n * fabric.use(myPlugin())\n * })\n */\nexport function defineFabric<T extends FabricOptions>(init?: FabricInitializer<T>): CreateFabric<T> {\n function create(config?: FabricConfig<T>): Fabric<T> {\n const events = new AsyncEventEmitter<FabricEvents>()\n const installedPlugins = new Set<Plugin<any>>()\n const installedParsers = new Set<Parser<any>>()\n const fileManager = new FileManager({ events })\n\n const context: FabricContext<T> = {\n get files() {\n return fileManager.files\n },\n async addFile(...files) {\n await fileManager.add(...files)\n },\n config,\n fileManager,\n installedPlugins,\n installedParsers,\n on: events.on.bind(events),\n off: events.off.bind(events),\n onOnce: events.onOnce.bind(events),\n removeAll: events.removeAll.bind(events),\n emit: events.emit.bind(events),\n } as FabricContext<T>\n\n const fabric: Fabric<T> = {\n context,\n get files() {\n return fileManager.files\n },\n async addFile(...files) {\n await fileManager.add(...files)\n },\n async use(pluginOrParser, ...options) {\n if (pluginOrParser.type === 'plugin') {\n if (installedPlugins.has(pluginOrParser)) {\n console.warn(`Plugin \"${pluginOrParser.name}\" already applied.`)\n } else {\n installedPlugins.add(pluginOrParser)\n }\n\n if (isFunction(pluginOrParser.inject)) {\n const injecter = pluginOrParser.inject\n\n const injected = (injecter as any)(context, ...options)\n Object.assign(fabric, injected)\n }\n }\n\n if (pluginOrParser.type === 'parser') {\n if (installedParsers.has(pluginOrParser)) {\n console.warn(`Parser \"${pluginOrParser.name}\" already applied.`)\n } else {\n installedParsers.add(pluginOrParser)\n }\n }\n\n if (isFunction(pluginOrParser.install)) {\n const installer = pluginOrParser.install\n\n await (installer as any)(context, ...options)\n }\n\n return fabric\n },\n } as Fabric<T>\n\n if (init) {\n init(fabric)\n }\n\n return fabric\n }\n\n return create\n}\n","import { defineFabric } from './defineFabric.ts'\n\nexport const createFabric = defineFabric()\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import "../Fabric-
|
|
2
|
-
import { i as typescriptParser, n as createImport, r as print, t as createExport } from "../typescriptParser-
|
|
1
|
+
import "../Fabric-CBrTERuf.cjs";
|
|
2
|
+
import { i as typescriptParser, n as createImport, r as print, t as createExport } from "../typescriptParser-C3B3dzh_.cjs";
|
|
3
3
|
export { createExport, createImport, print, typescriptParser };
|