@devlander/collect-exports-for-bundle
Version:
Generate comprehensive export files for TypeScript/JavaScript projects with Rollup compatibility
3 lines (2 loc) ⢠46.3 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("picocolors"),t=require("fs"),o=require("path"),n=require("fs/promises");function r(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(o){if("default"!==o){var n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:function(){return e[o]}})}}),t.default=e,Object.freeze(t)}var s,i=r(t),l=r(o),a=r(n);!function(e){e.green="green",e.red="red",e.blue="blue",e.yellow="yellow",e.bold="bold",e.magenta="magenta",e.bgWhite="bgWhite",e.bgRed="bgRed",e.bgGreen="bgGreen",e.bgBlack="bgBlack",e.bgBlue="bgBlue"}(s||(s={}));const d=(t,o)=>{switch(t){case s.green:e.green(o);break;case s.red:e.red(o);break;case s.blue:e.blue(o);break;case s.magenta:e.magenta(o);break;case s.yellow:e.yellow(o);break;case s.bgBlue:e.bgBlue(e.white(e.bold(o)));break;case s.bgGreen:e.bgGreen(e.white(e.bold(o)));break;case s.bgRed:e.bgRed(e.white(e.bold(o)))}},u=(e,t)=>{t||(t=s.bgBlue),d(t,e)},c=(e,t)=>{"string"!=typeof t&&(t=t.toString()),u(`Failed @: ${e}: ${t}`,s.red)},p=(t,o,n,r)=>{r||(r=s.bgBlue),u(`${e.bgBlack(e.white(e.bold(` @: ${t} `)))} ${n?`${n} -- `:""}${JSON.stringify(o)}`,r)},x={isCamelCase:/^[a-z][a-zA-Z0-9]*$/,containsUnderscore:/_/,containsDash:/-/,containsDuplicateDriveLetters:/([a-zA-Z]):.*\1:/i,isDashCase:/^[a-z0-9]+(-[a-z0-9]+)*$/,containsSpecialChar:/[^a-zA-Z0-9]+/,driveLetterPattern:/^([a-z]):/i,isSnakeCase:/^[a-z0-9]+(?:_[a-z0-9]+)*$/,isPascalCase:/^[A-Z][a-zA-Z0-9]*$/,isConstantCase:/^[A-Z]+(_[A-Z0-9]+)*$/,containsNonWordChar:/[^\w]/,defaultFunctionRegex:/export default function (\w+)\(\)/,matchesDefaultExport:/export default (\w+)/,matchesExportNamedAsDefault:/export \{ (\w+) as default \} from ['"](\.\/\w+)['"];?/,matchesNamedExport:/export\s+(const|let|var|type|enum|interface|class|function)\s+[a-zA-Z_$][0-9a-zA-Z_$]*|{\s*[a-zA-Z_$][0-9a-zA-Z_$]*\s*}/,matchesTypeExport:/export\s+type\s+([a-zA-Z_$][0-9a-zA-Z_$]*)(\s*=|\s+)/g,matchesInterfaceExport:/export\s+interface\s+([a-zA-Z_$][0-9a-zA-Z_$]*)\s*{[\s\S]*?}/g,matchesFunctionExport:/export\s+function\s+([a-zA-Z_$][0-9a-zA-Z_$]*)/g,matchesConstExport:/export\s+const\s+([a-zA-Z_$][0-9a-zA-Z_$]*)(:\s*[^=]+)?\s*(=|\()/g,matchesLetExport:/export\s+let\s+([a-zA-Z_$][0-9a-zA-Z_$]*)\s*=/g,matchesVarExport:/export\s+var\s+([a-zA-Z_$][0-9a-zA-Z_$]*)\s*=/g,matchesEnumExport:/export\s+enum\s+([a-zA-Z_$][0-9a-zA-Z_$]*)\s*{[\s\S]*?}/g,matchesClassExport:/export\s+class\s+([a-zA-Z_$][0-9a-zA-Z_$]*)/g};function f(e,t){return!(!x.isCamelCase.test(e)||x.containsUnderscore.test(e)||x.isDashCase.test(e)||x.containsSpecialChar.test(e))}const h=(e,t,o)=>{const n=(o/t*100).toFixed(2),r=`[${"=".repeat(o)}${" ".repeat(t-o)}] ${n}%`;u(`${e} ${r}`,"blue")},g=(e,t,o)=>{const n=e=>e&&!e.startsWith(".")?`.${e}`:e;return`${e=n(e)}${t=n(t)}${o=n(o)}`},m=(e,t=[],o=!1,n="")=>{o&&u(`Getting extensions for ${n}`,"yellow");const r=e.map(e=>((e,t)=>{const o=e.split(".").filter(Boolean);for(const e of t){const t=e.split(".").filter(Boolean);if(1===t.length&&-1===e.indexOf(".")){if(o.includes(e))return null}else if(t.length<=o.length){const n=o.length-t.length;if("."+o.slice(n).join(".")===e)return null}}return e})(e,t)).filter(e=>null!==e);return o&&(r.length>0?u(`Filtered Extensions for ${n}: ${r.join(", ")}`,"blue"):c(`No extensions passed the filter for ${n}`,"red")),r};class E{constructor(e){this.config=e,this.rollupConfig=this.initializeRollupConfig()}initializeRollupConfig(){var e,t,o,n,r,s,i,l,a,d,u,c,p,x,f;return{rollupCompatible:this.config.rollupCompatible||!1,includeExtensions:this.config.includeExtensions||!1,bundlerTarget:this.config.bundlerTarget||"node",pathResolution:{mode:(null===(e=this.config.pathResolution)||void 0===e?void 0:e.mode)||"auto",extensions:(null===(t=this.config.pathResolution)||void 0===t?void 0:t.extensions)||[".ts",".tsx"],resolveStrategy:(null===(o=this.config.pathResolution)||void 0===o?void 0:o.resolveStrategy)||"smart"},typescript:{generateBarrelExports:(null===(n=this.config.typescript)||void 0===n?void 0:n.generateBarrelExports)||!1,includeTypeOnlyExports:(null===(r=this.config.typescript)||void 0===r?void 0:r.includeTypeOnlyExports)||!0,preserveJSDocComments:(null===(s=this.config.typescript)||void 0===s?void 0:s.preserveJSDocComments)||!0,exportStrategy:(null===(i=this.config.typescript)||void 0===i?void 0:i.exportStrategy)||"comprehensive"},validation:{validatePaths:(null===(l=this.config.validation)||void 0===l?void 0:l.validatePaths)||!1,checkCircularDependencies:(null===(a=this.config.validation)||void 0===a?void 0:a.checkCircularDependencies)||!1,validateTypeScript:(null===(d=this.config.validation)||void 0===d?void 0:d.validateTypeScript)||!1,failOnErrors:(null===(u=this.config.validation)||void 0===u?void 0:u.failOnErrors)||!1},performance:{enableCaching:(null===(c=this.config.performance)||void 0===c?void 0:c.enableCaching)||!1,cacheDirectory:(null===(p=this.config.performance)||void 0===p?void 0:p.cacheDirectory)||".auto-export-cache",incrementalGeneration:(null===(x=this.config.performance)||void 0===x?void 0:x.incrementalGeneration)||!1,parallelProcessing:(null===(f=this.config.performance)||void 0===f?void 0:f.parallelProcessing)||!1}}}generateExports(e){this.config.debug&&(u("Starting export generation...","blue"),u(`Export mode: ${this.config.exportMode}`,"blue"),u(`Files: ${e.length}`,"blue"),u(`Bundler target: ${this.rollupConfig.bundlerTarget}`,"blue"),u(`Rollup compatible: ${this.rollupConfig.rollupCompatible}`,"blue")),this.parseFiles(e);const t=this.selectExportStrategy().generateExports(e,this.config);return t.header=this.generateHeader(),this.rollupConfig.rollupCompatible&&(t.exports=this.applyRollupCompatibility(t.exports)),this.rollupConfig.validation.validatePaths&&this.validateExportPaths(t.exports),this.config.debug&&(u(`Generated ${t.exports.length} exports`,"green"),t.defaultExport&&u("Generated default export","green"),t.bundleObject&&u("Generated bundle object","green")),t}applyRollupCompatibility(e){return e.map(e=>this.rollupConfig.includeExtensions?this.addFileExtensions(e):e)}addFileExtensions(e){return e.replace(/export \* from ['"]([^'"]+)['"];?/g,(e,t)=>t.endsWith(".ts")||t.endsWith(".tsx")||t.endsWith(".js")||t.endsWith(".jsx")?e:`export * from "${t}.ts";`)}validateExportPaths(e){const t=require("fs"),o=require("path");for(const n of e){const e=n.match(/from ['"]([^'"]+)['"]/);if(e){const n=e[1],r=o.join(this.config.rootDir||"src",n);if(!t.existsSync(r)){const e=`Export path not found: ${n} (resolved to: ${r})`;if(this.rollupConfig.validation.failOnErrors)throw new Error(e);u(e,"red")}}}}parseFiles(e){return e.map(e=>({path:e,name:this.extractFileName(e),relativePath:this.makeRelativePath(e),hasDefaultExport:!1,hasNamedExports:!0,exports:[]}))}selectExportStrategy(){return this.config.bundleAsObjectForDefaultExport?new b:this.config.primaryExportFile?new y:new $}generateHeader(){const e=[];return(this.config.title||this.config.description)&&(e.push("/**"),this.config.title&&e.push(` * ${this.config.title}`),this.config.description&&e.push(` * ${this.config.description}`),e.push(" * Generated automatically by @devlander/collect-exports-for-bundle"),e.push(" */"),e.push("")),e}extractFileName(e){return(e.split("/").pop()||e.split("\\").pop()||"").split(".")[0]}makeRelativePath(e){const t=this.config.rootDir||"src",o=e.replace(t,".").replace(/\\/g,"/");return o.startsWith("./")?o:`./${o}`}}class b{name="Bundle Object";description="Bundles all exports into a single object";generateExports(e,t){const o=[],n=[];e.forEach(e=>{const r=this.extractFileName(e),s=this.makeRelativePath(e,t.rootDir||"src");o.push(`import { default as ${r} } from '${s}';`),n.push(` ${r},`)});const r=`export default {\n${n.join("\n")}\n};`;return{imports:o,exports:[],bundleObject:r,header:[]}}extractFileName(e){return(e.split("/").pop()||e.split("\\").pop()||"").split(".")[0]}makeRelativePath(e,t){const o=e.replace(t,".").replace(/\\/g,"/");return o.startsWith("./")?o:`./${o}`}}class y{name="Primary File";description="Primary file gets default export, others get named exports";generateExports(e,t){const o=[];let n;return e.forEach(e=>{const r=this.extractFileName(e),s=this.makeRelativePath(e,t.rootDir||"src");t.primaryExportFile&&"string"==typeof t.primaryExportFile&&e.includes(t.primaryExportFile)?(n=`export { default } from '${s}';`,"both"===t.exportMode&&o.push(`export * from '${s}';`)):("named"!==t.exportMode&&"both"!==t.exportMode||o.push(`export * from '${s}';`),"default"!==t.exportMode&&"both"!==t.exportMode||o.push(`export { default as ${r} } from '${s}';`))}),{imports:[],exports:o,defaultExport:n,header:[]}}extractFileName(e){return(e.split("/").pop()||e.split("\\").pop()||"").split(".")[0]}makeRelativePath(e,t){const o=e.replace(t,".").replace(/\\/g,"/");return o.startsWith("./")?o:`./${o}`}}class ${name="Standard";description="Standard export generation based on export mode";generateExports(e,t){const o=[];return e.forEach(e=>{const n=this.extractFileName(e),r=this.makeRelativePath(e,t.rootDir||"src");"named"!==t.exportMode&&"both"!==t.exportMode||o.push(`export * from '${r}';`),"default"!==t.exportMode&&"both"!==t.exportMode||o.push(`export { default as ${n} } from '${r}';`)}),{imports:[],exports:o,header:[]}}extractFileName(e){return(e.split("/").pop()||e.split("\\").pop()||"").split(".")[0]}makeRelativePath(e,t){const o=e.replace(t,".").replace(/\\/g,"/");return o.startsWith("./")?o:`./${o}`}}function F(e,t){return!!/^(?:[a-zA-Z]:\\|\\\\[a-z0-9_.$ā-]+\\[a-z0-9_.$ā-]+|\/|\.\.\/|\.\/|[a-zA-Z0-9_-]+\/)(?:[^\\/:*?"<>|\r\n]+[\\/])*[^\\/:*?"<>|\r\n]*$/.test(e)}function v(e,o,n){try{if(t.existsSync(e)&&t.lstatSync(e).isDirectory())return;let o=e.split(/[/\\]/).pop();if(!o)return;return o=(e=>{if(!e)return"";const t=e.split(".");return 1===t.length?e:t.slice(0,-1).join(".")})(o),o}catch(e){return void c("getFilenameFromPath",e)}}const w=(e,t)=>{let o=!1,n=!1;t&&(o=t.debug??!1,n=t.forceIsFilePath??!1);let r={extension:void 0,fileName:void 0,folderName:void 0,baseFileName:void 0,originalValue:e,words:void 0};const s=new Set;try{const t=e=>{r.fileName=e;const t=e.match(/\..*$/),n=t&&t[0]?t[0]:"";return o&&u(`Extracted Extension: ${n}`,"yellow"),n&&(r.extension=n),e.includes(".")||n?n?r.baseFileName=e.replace(n,""):e.includes(".")&&(r.baseFileName=e.split(".").shift()):r.baseFileName=e,r.words=Array.from(s),r},i=e.split("/");if(i.forEach(e=>{e.split(".").filter(Boolean).forEach(e=>s.add(e))}),e.includes(".")&&!n){const e=i.pop();e&&(r=t(e))}else if(n){const o=e.includes("/")?e.split("/").pop():e;o&&(r=t(o))}else o&&u(`Path is a directory: ${e}`,"yellow"),r.folderName=i.pop();r.words=Array.from(s)}catch(t){return o&&c(`Error while processing path: ${e}`,t),r}return r};function D(e,o){let n={extension:void 0,fileName:void 0,folderName:void 0,originalValue:e,baseFileName:void 0,words:void 0};try{if(!1===F(e))throw new Error("Provided path is not a file path.");if(!t.existsSync(e)){const t=e.split("/").pop();return t&&(n=w(t,{debug:o,forceIsFilePath:!0})),n}if(t.lstatSync(e).isDirectory())n.folderName=e.split("/").pop();else{const t=e.split("/").pop();if(!t)throw new Error("No file name found in the provided file path.");n=w(t,{debug:o,forceIsFilePath:!0})}}catch(e){return n}return n}const S=(t,o,n,r)=>{if(r||(r="Existing extensions:"),""===t)return;F(t)||c("logExtensionFromExtensions",`${t} is not a valid file path`);const s=D(t);if(s&&void 0!==s.extension)if(s&&void 0!==s.extension){const{extension:t}=s;e.bgBlack(`${e.white(e.bold(`@${r}`||"@"))}\n ${o.map(o=>o===t?n?e.green(o):e.red(o):o).join(", ")}\n `)}else e.red(`logExtensionFromExtensions: ${t} has no valid extension`);else e.red(`logExtensionFromExtensions: ${t} has no valid extension`)},j=(e,t,o)=>{u(`${"red"===o?"Excluding":"Including"} file: ${e} with fileExtension: ${t}`,o)};function C(t,o){var n,r;if(t&&!1===F(t)||""===t)return!1;const s=v(t);if("string"!=typeof s)return!1;const i=(e,t)=>{o.debug&&p("fileHasValidExtension",{variables:t},e,"yellow")};return null!==(n=o.excludeSpecificFiles)&&void 0!==n&&n.includes(s)?(i("Excluded file",{nameOfFile:s}),!1):null!==(r=o.specificFiles)&&void 0!==r&&r.includes(s)?(i("Returning true",{nameOfFile:s}),!0):function(e,t,o){let n,r,s=!1;if(F(e)){const i=D(e);void 0!==i&&(void 0!==i.extension&&(n=i.extension),void 0!==i.fileName&&(r=i.fileName),void 0!==n&&"undefined"!==r&&(s=t.includes(n),o))&&j(e,n,s?"red":"green")}return o&&(p("notValidExtension",{filePath:e,ignoredExtensions:t,isIgnoredExtension:s,additionalInfo:"Some additional debug info if needed"}),S(e,t,s,"Ignored extensions:")),s}(t,o.ignoredExtensions||[],o.debug)?(i("File with invalid extension",{nameOfFile:s}),!1):!!function(t,o=[".ts",".tsx",".types.ts"],n){if(!t||!F(t)||""===t)return e.red(`isValidExtension: ${t} is not a valid file path`),S(t||"No file path provided",o,!1,"Allowed extensions:"),!1;const r=D(t);if(!r.fileName||!r.extension)return S(t,o,!1,"Allowed extensions:"),!1;const{fileName:s,extension:i}=r,l=t.includes(i)&&o.includes(i);n&&p("isValidExtension",{filePath:t,allowedExtensions:o,fileName:s,extension:i,filePathHasCorrectExtension:l});const a=l;return a&&n?j(t,i,"green"):!a&&n&&j(t,i,"red"),S(t,o,a,"Allowed extensions:"),a}(t,o.allowedExtensions||[],o.debug)&&(i("File with valid extension",{nameOfFile:s}),!0)}const P=e=>{try{if(F(e)||(e=>{const t=s.red;d(t,e)})(`getFileContent: ${e} is not a valid file path`),t.existsSync(e)){const o=t.readFileSync(e,"utf8");return o||""}return""}catch(e){return""}},N=["function","const","let","var","enum","class"],A=(e,t,o)=>{(!t||t&&0===t.length)&&(t=N);const n={function:x.matchesFunctionExport,const:x.matchesConstExport,let:x.matchesLetExport,var:x.matchesVarExport,enum:x.matchesEnumExport,class:x.matchesClassExport},r=[];let s;for(const o of t){const t=n[o];if(t)for(;null!==(s=t.exec(e));)r.push(s[1])}return r.length?null!==r?r:[]:(o&&u(`No named exports found in ${e}`,"blue"),[])},O=["type","interface"],M=(e,t,o)=>{(!t||t&&0===t.length)&&(t=O);const n={type:x.matchesTypeExport,interface:x.matchesInterfaceExport},r=[];let s;for(const o of t){const t=n[o];if(t)for(;null!==(s=t.exec(e));)r.push(s[1])}return!r.length&&o?(u(`No exported type declarations found in ${e}`,"yellow"),[]):null!==r?r:[]};function z(e,t){let o=!1;return t.forEach(t=>{t.test(e)&&(o=!0)}),o}const I=(e,t)=>{const o=A(e,[],t),n=M(e,[],t),r=function(e,t){const o=z(e,[x.matchesNamedExport]);return t&&p("hasNamedExports",{fileContent:e,hasExport:o}),o}(e,t),s=function(e,t){const o=z(e,[x.matchesDefaultExport,x.matchesExportNamedAsDefault]);return t&&p("hasDefaultExport",{hasExport:o,fileContent:e}),o}(e,t);return t&&p("hasNoExports",{hasNamed:r,hasDefault:s,fileContent:e}),!(r||s||o.length||n.length)};const T=(e,n)=>e.filter(e=>{if(e.split(o.sep).some(e=>n.includes(e)))try{return!t.statSync(e).isDirectory()}catch(e){return!1}return!0});var _;!function(e){e.IncludedFolder="includedFolders",e.IncludedFile="includedFiles",e.ExcludedFolder="excludedFolders",e.ExcludedFile="excludedFiles",e.IncludedExport="includedExports",e.ExcludedExport="excludedExports"}(_||(_={}));const k=(e,t,o)=>{const n={...e};let r;const s=n[t];switch(t){case _.IncludedFolder:case _.IncludedFile:case _.ExcludedFolder:case _.ExcludedFile:case _.IncludedExport:case _.ExcludedExport:r=s.find(e=>e.nameOrPath===o.nameOrPath),r?r.reason.push(o.reason[0]):s.push(o)}return n};function R(e){const t="test"===process.env.NODE_ENV;if(!t)return e;const o=/^([a-z]:\\)([a-z]:\\)/i;if(o.test(e)){const n=e.replace(o,"$1");return t&&u(`Corrected path: ${n}`,"green"),n}return e}const B=async(t,o)=>{try{const e=(await a.lstat(t)).isDirectory();return null!=o&&o.debug,e}catch(t){return t instanceof Error&&e.bgRed(e.white(e.bold(t.message))+" in getCachedDirectory"),!1}};async function Z(t,n){if(!1===F(t)||""===t)return[];let r,s=[];const i=await(async(t,n)=>{try{let s=o.normalize(o.resolve(t));u(`Starting to get absolute path from ${s}`,"blue"),s=R(s),u(`Corrected path to ${s}`,"blue");let i=[s,o.normalize(o.resolve(t)),R(o.normalize(o.resolve(t))),`./${t}/`,`${t}/`];n&&n.excludedFolders&&(e.red(`${n.excludedFolders} is excluded`),i=T(i,n.excludedFolders)),p("getAbsolutePath",{pathsToTry:i,config:n});const l=[];let d;for(const e of i)if(F(e)){n.debug&&u(`Checking path: ${e}`,"magenta");try{if((await a.lstat(e)).isDirectory()){var r;const s=(await a.readdir(e)).filter(e=>e.startsWith("index.")&&n.allowedExtensions.includes(o.extname(e)));n.includeIndexes&&s.length>0&&e!==t&&s.forEach(t=>{l.push(o.join(e,t))});const i=o.relative(t,e),u=null===(r=n.excludedFolders)||void 0===r?void 0:r.some(e=>i.includes(o.normalize(e)));u?n.debug&&p("getAbsolutePath",{isInExcludedFolder:u,relativePath:i,pathToTry:e},"Not adding to validPaths"):(n.debug&&p("getAbsolutePath",{isInExcludedFolder:u,relativePath:i,pathToTry:e},"Adding to validPaths"),l.push(e),d||(d=e))}}catch(t){n.debug&&u(`Error accessing path: ${e}`,"red")}}return{paths:l,absolutePath:d}}catch(t){let o="An error occurred";return t instanceof Error&&(o=t.message),n.debug&&c("getAbsolutePath",t),e.red(`Error accessing path: ${o}`),{paths:[]}}})(t,{debug:n.debug,results:n.results,includeIndexes:!!n.includeIndexes&&n.includeIndexes,excludedFolders:n.excludedFolders?n.excludedFolders:[],allowedExtensions:n&&n.allowedExtensions?n.allowedExtensions:[]});if(s=i.paths,r=i.absolutePath??void 0,s&&n.excludedFolders&&(s=T(s,n.excludedFolders)),!r)return s.length,s;try{const t=await a.readdir(r);e.bgGreen(e.white(e.bold(`Files in directory '${r}': ${t.join(", ")}`)));for(const i of t){const t=o.join(r,i),l=await B(t);if(n.debug&&p("collectPaths",{isDirectory:l}),l){if(n.excludedFolders&&n.excludedFolders.includes(i)){n.debug&&p("collectPaths",{filepath:t,file:i},"directory included"),n.results&&(n.results=k(n.results,_.ExcludedFolder,{nameOrPath:t,reason:[`Directory is excluded because ${i} was in excludedFolders `]}));continue}n.results&&(n.results=k(n.results,_.IncludedFolder,{nameOrPath:t,reason:["Directory is included because it was not included in excluded Folders"]})),s=s.concat(await Z(t,n))}else{if(["index.ts","index.tsx"].includes(i)){e.bgBlack(e.white(e.bold(`Skipping index file: ${t}`)));continue}const o=C(t,n);if(!1===o){if(n.ignoredExtensions&&n.debug){const e=n.ignoredExtensions;p("collectPaths",{ignoredExtensions:e,filepath:t},"invalid file","bgRed")}else e.bgBlack(`Skipping file: ${t} because it has an invalid extension which was found in ignoredExtensions`);n.results&&!1===o&&(n.results=k(n.results,_.ExcludedFile,{nameOrPath:t,reason:["File has invalid extension"]}));continue}if(!0===o){if(n.allowedExtensions&&n.debug){const e=n.allowedExtensions;p("collectPaths",{filepath:t,allowedExtensions:e},"valid file","bgGreen")}else e.bgGreen(`Adding file to paths: ${t}`);n.results&&(n.results=k(n.results,_.IncludedFile,{nameOrPath:t,reason:["File has valid extension"]})),s.push(t)}}}}catch(t){e.bgRed(`Error in collectPaths for path ${r}: ${t}`)}return s}async function G(e,t,o){try{const n=[];t.rootDir||(t.rootDir=e),u(`Collecting paths from directory... ${e} \n `,"green"),o&&t.debug;const r=await Z(e,t),s=[...new Set(r)];t.debug&&u(`Distinct paths: ${s} \n`,"blue");const i=await async function(e,t){try{const o=[],n=[...new Set(e)],r=n.filter(e=>{const n=C(e,t);if(t.debug&&p("getPathsWithExports",{path:e,hasValidExtension:n},"yellow"),n){const n=P(e).toString();t.debug&&p("getPathsWithExports",{fileOutput:n},"this is file since file has valid extension","yellow");const r=I(n,t.debug);if(t.debug&&p("getPathsWithExports",{noExports:r},"this is noExports","yellow"),!r){const t=e.split("/").slice(0,-1).join("/");return o.push(t),e}}});return p("getPathsWithExports",{distinctPaths:n,filteredPaths:r,directoriesChecked:o},"yellow"),r}catch(e){return c("collectPathsFromDirectories",e),[]}}(s,t);return t.debug&&(u(`Collected paths: ${r} \n`,"magenta"),u(`Filtered paths: ${i} \n`,"yellow"),u(`Directories checked: ${n} \n`,"blue")),i}catch(e){return c("collectPathsFromDirectories",e),[]}}function W(e,t=Date.now()){if(e>t)throw new Error("Start time must be before end time");const o=t-e;return`${Math.floor(o/36e5)}h ${Math.floor(o%36e5/6e4)}m ${Math.floor(o%6e4/1e3)}s ${o%1e3}ms`}function q(e,t=Date.now()){if(e>t)throw new Error("Start time must be before end time");const o=W(e,t);return`/**\n * Start Time: ${new Date(e).toLocaleString()}\n * End Time: ${new Date(t).toLocaleString()}\n * Duration: ${o}\n */\n `}function V(e,t){if(!e&&!t)return"";return`/**\n * Title: ${e}\n * Description: ${t}\n * Date: ${(new Date).toISOString().split("T")[0]}\n */\n `}function L(e,t,o){try{let o="";const n=`./${l.relative(t,e).replace(/\\/g,"/")}`,r=n.lastIndexOf(".");return o=-1===r?n:n.substring(0,r),o}catch(t){return c(`Error while removing extension and making path relative: ${e}`,t),""}}function H(e){try{const t=["export","default","function","const","let","var","class","interface","type","enum","abstract","implements","extends","import","from","as","new","return","if","else","for","while","do"];let o=null;const n=e.match(x.matchesDefaultExport),r=e.match(x.matchesExportNamedAsDefault),s=e.match(x.defaultFunctionRegex);return r&&r[1]&&!t.includes(r[1])?o=r[1]:n&&n[1]&&!t.includes(n[1])?o=n[1]:s&&s[1]&&!t.includes(s[1])&&(o=s[1]),p("extractDefaultExportVariable",{result:o}),o}catch(e){return null}}function J(e,o){try{if(!t.existsSync(e))return u(`File not found: "${e}"`,"yellow"),[];const o=(e=>{const t=[],o=e.split("\n");for(const e of o){const o=H(e);o&&t.push(o)}return t})(t.readFileSync(e,"utf8"));return o}catch(t){return u(`Error reading the file "${e}": ${t.toString()}`,"red"),[]}}function U(e,o,n){try{if(!t.existsSync(e))return u(`File not found: "${e}"`,"yellow"),[];const r=t.readFileSync(e,"utf8");return A(r,o,n)}catch(t){return u(`Error reading the file "${e}": ${t.toString()}`,"red"),[]}}function K(e,o,n){try{if(!t.existsSync(e))return u(`File not found: "${e}"`,"yellow"),[];const r=t.readFileSync(e,"utf8");return M(r,o,n)}catch(t){return u(`Error reading the file "${e}": ${t.toString()}`,"red"),[]}}var Q;!function(e){e.named="named",e.default="default"}(Q||(Q={}));const X=e=>{try{const{fileName:t,fileContent:o,withoutExtension:n,usedFunctionTypes:r,filepath:s,defaultExportString:i,results:l,usedFunctionNames:a,config:d}=e;if(d.debug&&u(`Processing included file: ${s}...`,"yellow"),!C(s,d))return d.debug&&u(`Skipping ${t} - invalid extension`,"yellow"),l;const c=function(e,t,o){return e.map(e=>{let n=U(e).map(e=>({name:e,exportType:Q.named}));const r=J(e).map(e=>({name:e,exportType:Q.default}));n=[...n,...r],n=n.filter(e=>!t.has(e.name)),n.forEach(e=>t.add(e.name));let s=K(e).map(e=>({name:e,exportType:Q.named}));return s=s.filter(e=>!o.has(e.name)),s.forEach(e=>o.add(e.name)),{path:e,functionNames:n,functionTypes:s}})}([s],a,r);d.debug&&u(`Exports from file: ${JSON.stringify(c)}`,"yellow");const p=H(o)||"",x=t===d.primaryExportFile;if(d.debug&&(u(`isPrimaryExportFile: ${x}`,"yellow"),u(`hasDefaultExport: ${p}`,"yellow")),c.length>0){const e=function(e,t,o){var n,r,s;const i=[];if(!e)return i;const l=null===(n=e.functionNames)||void 0===n?void 0:n.filter(({exportType:e})=>"named"===e).map(({name:e})=>e);l&&l.length>0&&("named"!==o.exportMode&&"both"!==o.exportMode||i.push(`export {${l.join(", ")}} from '${t}';`));const a=null===(r=e.functionTypes)||void 0===r?void 0:r.filter(({exportType:e})=>"named"===e).map(({name:e})=>e);a&&a.length>0&&("named"!==o.exportMode&&"both"!==o.exportMode||i.push(`export type {${a.join(", ")}} from '${t}';`));const d=null===(s=e.functionNames)||void 0===s?void 0:s.filter(({exportType:e})=>"default"===e).map(({name:e})=>e);return d&&d.length>0&&("default"!==o.exportMode&&"both"!==o.exportMode||(o.bundleAsObjectForDefaultExport?i.push(`export { default as ${d[0]} } from '${t}';`):i.push(`export { default } from '${t}';`))),i}(c[0],n,d);if(l.push(...e),x&&""!==p){const e=H(s);e?(i.includes(`import ${e} from "${n}";`)||i.push(`import ${e} from "${n}";`),"default"!==d.exportMode&&"both"!==d.exportMode||(d.bundleAsObjectForDefaultExport?i.push(`export { default as ${d.bundleAsObjectForDefaultExport} } from "${n}";`):i.push(`export default ${e};`))):u(`Failed to extract default export from ${t}.`,"red")}}else d.debug&&u(`No exports found in ${t}`,"yellow");return l}catch(e){return c("buildExportsFromPaths",e),[]}};async function Y(e,t){try{u("Starting export generation from directory...","green");const o=await G(e,t);t.debug&&u(`Filtered paths: ${o}`,"magenta");const n=function(e,t){try{if(t.debug){const o=t.rootDir;p("generateExportsFromPaths",{paths:e,rootDir:o},"Inside of generateExportsFromPaths")}if(!t.rootDir||""===t.rootDir)throw new Error("rootDir is required");const o=new Set,n=new Set,r=[],s=[];t.debug&&p("generateExportsFromPaths",{paths:e}),u("Generating exports from provided paths...","green");let i=0;for(;i<e.length;){const l=e[i],a=v(l);t.debug&&p("generateExportsFromPaths",{fileName:a});const d=P(l);t.debug&&p("generateExportsFromPaths",{fileContent:d});const c=L(l,t.rootDir);t.debug&&p("generateExportsFromPaths",{withoutExtension:c}),a&&"string"==typeof a?X({fileName:a,fileContent:d,withoutExtension:c,filepath:l,usedFunctionNames:o,usedFunctionTypes:n,defaultExportString:s,results:r,config:t}):u(`Failed to get filename from path ${l}`,"red"),i++}const l=t.title&&t.description?V(t.title||"",t.description||""):"",a=(new Date).getTime();t.results.endTime=a,t.results.duration=W(t.results.startTime,a);const d=q(t.results.startTime,a);return[...r,...s,l,d]}catch(e){return c("generateExportsFromPaths",e),[]}}(o,t);return t.debug&&u(`Generated paths: ${n}`,"magenta"),n}catch(e){return u("Error generating exports from directory...","red"),u(e.toString(),"red"),[]}}const ee=async(e={})=>{try{const n=await(async e=>{const t={rootDir:"src",primaryExportFile:"",allowedExtensions:[".ts",".tsx"],ignoredExtensions:[".test.tsx",".test.ts",".stories.tsx",".stories.ts",".stories.tsx"],excludedFolders:["node_modules",".github",".storybook"],specificFiles:[],outputFilenameExtension:".ts",outputFileName:"index",bundleAsObjectForDefaultExport:void 0,debug:!1,includeIndexes:!0,exportMode:"named",results:{title:"Devlander Collect Export Results",description:"Here are the results of the export collection",startTime:(new Date).getTime(),endTime:0,duration:"",includedFolders:[],includedFiles:[],excludedFolders:[],excludedFiles:[],includedExports:[],excludedExports:[],withParameters:{ignoredExtensions:[],allowedExtensions:[],excludedFolders:[],specificFiles:[],rootDir:""}}};e.debug&&(t.debug=!0);const o=m(e.allowedExtensions||t.allowedExtensions,[],t.debug,"allowedExtensions"),n=m(e.ignoredExtensions||t.ignoredExtensions,o,t.debug,"ignoredExtensions"),r={...e,excludeSpecificFiles:e.excludeSpecificFiles||[],rootDir:e.rootDir||t.rootDir,primaryExportFile:e.primaryExportFile&&"string"==typeof e.primaryExportFile?e.primaryExportFile:t.primaryExportFile,allowedExtensions:o,ignoredExtensions:n,excludedFolders:[...t.excludedFolders],specificFiles:e.specificFiles||t.specificFiles,outputFileName:e.outputFileName||t.outputFileName,outputFilenameExtension:e.outputFilenameExtension||t.outputFilenameExtension,bundleAsObjectForDefaultExport:e.bundleAsObjectForDefaultExport&&"string"==typeof e.bundleAsObjectForDefaultExport?e.bundleAsObjectForDefaultExport:t.bundleAsObjectForDefaultExport,debug:t.debug,includeIndexes:e.includeIndexes||t.includeIndexes,exportMode:e.exportMode||t.exportMode,testOptions:e.testOptions||t.testOptions,results:{...t.results,title:e.title?e.title:"Devlander Collect Export Results",description:e.description?e.description:"Here are the results of the export collection",withParameters:{ignoredExtensions:n,allowedExtensions:o,excludedFolders:e.excludedFolders||t.excludedFolders,specificFiles:e.specificFiles||t.specificFiles,rootDir:e.rootDir||t.rootDir}}};return e.excludedFolders&&(r.excludedFolders=[...t.excludedFolders,...e.excludedFolders]),e.title&&(r.title=e.title),e.description&&(r.description=e.description),p("modifyConfig",{options:e,modifiedConfig:r}),r})(e),r=`${n.outputFileName}${n.outputFilenameExtension}`;n.bundleAsObjectForDefaultExport&&""!==n.bundleAsObjectForDefaultExport&&f(n.bundleAsObjectForDefaultExport);const s=4;let a=1;if(h("Processing configuration...",s,a++),h("Validating export strategy...",s,a++),!n.rootDir||""===n.rootDir)throw new Error("Directory is required");let d="Standard";n.bundleAsObjectForDefaultExport?d="Bundle Object":n.primaryExportFile&&(d="Primary File"),n.debug&&(u(`\nExport Strategy: ${d}`,"blue"),n.bundleAsObjectForDefaultExport&&u(`Bundle Name: ${n.bundleAsObjectForDefaultExport}`,"blue"),n.primaryExportFile&&u(`Primary File: ${n.primaryExportFile}`,"blue")),h("Generating exports...",s,a++);let c=[];if(n.specificFiles&&n.specificFiles.length>0)c=n.specificFiles.map(e=>l.join(n.rootDir,e));else{await Y(n.rootDir,n);c=[n.rootDir]}const x=function(e,t){return new E(t).generateExports(e)}(c,n),g=function(e){const t=[];return t.push(...e.header),e.imports.length>0&&(t.push("// Import statements"),t.push(...e.imports),t.push("")),e.exports.length>0&&(t.push("// Named exports"),t.push(...e.exports),t.push("")),e.defaultExport&&(t.push("// Default export"),t.push(e.defaultExport),t.push("")),e.bundleObject&&(t.push("// Bundle object"),t.push(e.bundleObject)),t.join("\n")}(x).split("\n");n.debug,h(`Writing to ${r}...`,s,a++),i.writeFileSync(l.join(n.rootDir,r),g.join("\n")),n.bundleAsObjectForDefaultExport&&n.rootDir&&void 0!==n.bundleAsObjectForDefaultExport?(n.debug&&u(`\nBundling all modules from ${r} as into one object as a module\n`,"blue"),await(async e=>{try{const n=await G(e.rootDir,e);if(e.debug&&u(`Starting to bundle modules into ${e.outputFileName}${e.outputFilenameExtension}`,"blue"),!e.bundleAsObjectForDefaultExport)return;const r=[],s=[],i=[],l=[];for(const e of n){const t=U(e),o=K(e);(t||o)&&(t&&t.length>0&&t.forEach(t=>{if(r.includes(t))u(`Duplicate function name: ${t} \n skipping... ${t} \n \n`,"red");else{r.push(t);const o=i.find(t=>t.path===e);o?o.functionNames.push(t):i.push({path:e,functionNames:[t]})}}),o&&o.length>0&&o.forEach(t=>{if(s.includes(t))u(`Duplicate type name: ${t} \n skipping... ${t} \n \n`,"red");else{s.push(t);const o=l.find(t=>t.path===e);o?o.functionNames.push(t):l.push({path:e,functionNames:[t]})}}))}const a=[],d=[];if(i.forEach(t=>{const n=`./${o.relative(e.rootDir,t.path).replace(/\\/g,"/")}`,r=H(t.path)||"",s=n.substring(0,n.lastIndexOf("."));if(r&&"string"==typeof r&&r.length>0){const o=t.functionNames.filter(e=>e!==r),n=o.length>0?`, {${o.join(", ")}}`:"";"default"!==e.exportMode&&"both"!==e.exportMode||a.push(`import ${r}${n} from '${s}'`),d.push(r),o.length>0&&o.forEach(e=>{d.includes(e)||d.push(e)})}else if(t.functionNames.length>0){const o=t.functionNames.length>0?`{${t.functionNames.join(", ")}}`:"";"default"!==e.exportMode&&"both"!==e.exportMode||a.push(`import ${o} from '${s}'`),t.functionNames.length>0&&t.functionNames.forEach(e=>{d.includes(e)||d.push(e)})}}),"default"!==e.exportMode&&"both"!==e.exportMode||a.push(`const ${e.bundleAsObjectForDefaultExport} = {\n ${d.join(",\n ")}\n}`),d.forEach(t=>{const n=i.find(e=>e.functionNames.includes(t));if(!n)return;const r=`./${o.relative(e.rootDir,n.path).replace(/\\/g,"/")}`,s=r.substring(0,r.lastIndexOf("."));"named"!==e.exportMode&&"both"!==e.exportMode||a.push(`export {${t}} from '${s}'`)}),"default"!==e.exportMode&&"both"!==e.exportMode||a.push(`export default ${e.bundleAsObjectForDefaultExport}`),"named"!==e.exportMode&&"both"!==e.exportMode||l.forEach(t=>{const n=`./${o.relative(e.rootDir,t.path).replace(/\\/g,"/")}`,r=n.substring(0,n.lastIndexOf("."));if(t.functionNames.length>0){const e=t.functionNames.length>0?`{${t.functionNames.join(", ")}}`:"";a.push(`export type ${e} from '${r}'`)}}),e.title||e.description){const t=V(e.title||"",e.description||"");a.push(t)}if(e.results&&e.results.startTime){const t=Date.now();e.results.endTime=t,e.results.duration=W(e.results.startTime,t);const o=q(e.results.startTime,t);a.push(o)}const c=`${e.outputFileName}${e.outputFilenameExtension}`;return t.unlinkSync(o.join(e.rootDir,c)),e.rootDir&&c&&t.writeFileSync(o.join(e.rootDir,c),a.join("\n")),e.debug&&p("bundleExportAsFunction",a),a.join("\n")}catch(e){return""}})({...n})):n.debug&&u(`\nExporting all functions from ${r} as separate modules\n`,"blue"),n.debug&&u(`\n${JSON.stringify(n.results,null,2)}`,"yellow"),u(`\nExports generated in ${r}\n`,"green"),u(`Located at ${n.rootDir}\n`,"green"),u(`\nExport Strategy: ${d}`,"blue"),u(`Export Mode: ${n.exportMode}`,"blue"),x.bundleObject&&u("Bundle Object: Generated","green"),x.defaultExport&&u("Default Export: Generated","green"),x.exports.length>0&&u(`Named Exports: ${x.exports.length} generated`,"green")}catch(e){u(`\nError: ${e}\n`,"red")}},te={react:{name:"React/TypeScript",description:"Standard React project with TypeScript",config:{rootDir:"src",allowedExtensions:[".ts",".tsx",".js",".jsx"],ignoredExtensions:[".test.ts",".test.tsx",".spec.ts",".spec.tsx",".stories.ts",".stories.tsx"],excludedFolders:["node_modules","dist","build","coverage"],outputFileName:"index",outputFilenameExtension:".ts",exportMode:"named",includeIndexes:!1}},nodeLibrary:{name:"Node.js Library",description:"Node.js library with TypeScript",config:{rootDir:"src",allowedExtensions:[".ts",".js"],ignoredExtensions:[".test.ts",".test.js",".spec.ts",".spec.js"],excludedFolders:["node_modules","dist","build","coverage"],outputFileName:"index",outputFilenameExtension:".ts",exportMode:"both",includeIndexes:!1}},designSystem:{name:"Design System",description:"Component library with multiple platforms",config:{rootDir:"src",allowedExtensions:[".ts",".tsx",".component.ts",".component.tsx"],ignoredExtensions:[".test.ts",".test.tsx",".stories.ts",".stories.tsx"],excludedFolders:["node_modules","dist","build","storybook-static"],outputFileName:"index",outputFilenameExtension:".ts",exportMode:"named",includeIndexes:!1}},monorepo:{name:"Monorepo Package",description:"Package within a monorepo structure",config:{rootDir:"src",allowedExtensions:[".ts",".tsx"],ignoredExtensions:[".test.ts",".test.tsx",".spec.ts",".spec.tsx"],excludedFolders:["node_modules","dist","build","coverage",".next"],outputFileName:"index",outputFilenameExtension:".ts",exportMode:"both",includeIndexes:!1}},utility:{name:"Utility Library",description:"Collection of utility functions",config:{rootDir:"src",allowedExtensions:[".ts",".js"],ignoredExtensions:[".test.ts",".test.js",".spec.ts",".spec.js"],excludedFolders:["node_modules","dist","build"],outputFileName:"index",outputFilenameExtension:".ts",exportMode:"named",includeIndexes:!1}},apiClient:{name:"API Client",description:"API client library with types",config:{rootDir:"src",allowedExtensions:[".ts",".type.ts",".interface.ts"],ignoredExtensions:[".test.ts",".spec.ts"],excludedFolders:["node_modules","dist","build"],outputFileName:"index",outputFilenameExtension:".ts",exportMode:"both",includeIndexes:!1}}};function oe(e){return te[e].config}function ne(){return Object.entries(te).map(([e,t])=>({key:e,name:t.name,description:t.description}))}function re(e){return e in te}class se{constructor(e={}){this.options={validate:!0,autoFix:!0,debug:!1,...e}}createFromPreset(e,t){if(!re(e))throw new Error(`Invalid preset: ${e}`);const o={...oe(e),...t};return this.options.debug&&(u(`š Using preset: ${e}`,"blue"),u(`Configuration: ${JSON.stringify(o,null,2)}`,"blue")),o}listAvailablePresets(){const e=ne();u("š Available Configuration Presets:","blue"),e.forEach(e=>{u(` ⢠${e.key}: ${e.name}`,"blue"),u(` ${e.description}`,"blue")})}validateConfig(e){const t=[],o=[];return e.rootDir||t.push("rootDir is required"),e.allowedExtensions&&!Array.isArray(e.allowedExtensions)&&t.push("allowedExtensions must be an array"),e.ignoredExtensions&&!Array.isArray(e.ignoredExtensions)&&t.push("ignoredExtensions must be an array"),e.excludedFolders&&!Array.isArray(e.excludedFolders)&&t.push("excludedFolders must be an array"),e.outputFilenameExtension&&![".ts",".tsx"].includes(e.outputFilenameExtension)&&t.push('outputFilenameExtension must be either ".ts" or ".tsx"'),e.exportMode&&!["named","default","both"].includes(e.exportMode)&&t.push('exportMode must be "named", "default", or "both"'),e.allowedExtensions&&e.allowedExtensions.forEach(e=>{e.startsWith(".")||t.push(`Extension "${e}" must start with a dot`)}),e.ignoredExtensions&&e.ignoredExtensions.forEach(e=>{e.startsWith(".")||t.push(`Ignored extension "${e}" must start with a dot`)}),t.length>0?(u("ā Configuration validation failed:","red"),t.forEach(e=>{u(` ⢠${e}`,"red")}),!1):(o.length>0&&(u("ā ļø Configuration warnings:","yellow"),o.forEach(e=>{u(` ⢠${e}`,"yellow")})),0===t.length&&0===o.length&&u("ā
Configuration is valid!","green"),!0)}autoFixConfig(e){const t={...e};return t.allowedExtensions&&0!==t.allowedExtensions.length||(t.allowedExtensions=[".ts",".tsx"],u("š§ Added default allowedExtensions","yellow")),t.ignoredExtensions&&0!==t.ignoredExtensions.length||(t.ignoredExtensions=[".test.ts",".test.tsx",".spec.ts",".spec.tsx"],u("š§ Added default ignoredExtensions","yellow")),t.excludedFolders&&0!==t.excludedFolders.length||(t.excludedFolders=["node_modules","dist","build"],u("š§ Added default excludedFolders","yellow")),t.exportMode||(t.exportMode="named",u('š§ Set default exportMode to "named"',"yellow")),t.outputFileName||(t.outputFileName="index",u('š§ Set default outputFileName to "index"',"yellow")),t.outputFilenameExtension||(t.outputFilenameExtension=".ts",u('š§ Set default outputFilenameExtension to ".ts"',"yellow")),t}createConfig(e,t){let o;if(o="string"==typeof e?this.createFromPreset(e,t):{...e,...t},this.options.autoFix&&(o=this.autoFixConfig(o)),this.options.validate){!this.validateConfig(o)&&this.options.autoFix&&(u("š Attempting to auto-fix configuration...","yellow"),o=this.autoFixConfig(o),this.validateConfig(o))}return o}getSuggestions(e){const t=[];return e.allowedExtensions&&e.allowedExtensions.includes(".tsx")&&t.push('Consider adding ".component.tsx" for React components'),e.allowedExtensions&&e.allowedExtensions.includes(".ts")&&t.push('Consider adding ".type.ts" and ".interface.ts" for type definitions'),e.ignoredExtensions&&0!==e.ignoredExtensions.length||t.push('Consider adding ignoredExtensions: [".test.ts", ".test.tsx", ".spec.ts", ".spec.tsx"]'),e.excludedFolders&&0!==e.excludedFolders.length||t.push('Consider adding excludedFolders: ["node_modules", "dist", "build", "coverage"]'),t}printConfigSummary(e){var t,o,n;u("š Configuration Summary:","blue"),u(` Root Directory: ${e.rootDir}`,"blue"),u(` Output File: ${e.outputFileName}${e.outputFilenameExtension}`,"blue"),u(` Export Mode: ${e.exportMode}`,"blue"),u(` Allowed Extensions: ${(null===(t=e.allowedExtensions)||void 0===t?void 0:t.join(", "))||"none"}`,"blue"),u(` Ignored Extensions: ${(null===(o=e.ignoredExtensions)||void 0===o?void 0:o.join(", "))||"none"}`,"blue"),u(` Excluded Folders: ${(null===(n=e.excludedFolders)||void 0===n?void 0:n.join(", "))||"none"}`,"blue");const r=this.getSuggestions(e);r.length>0&&(u("\nš” Suggestions:","yellow"),r.forEach(e=>{u(` ⢠${e}`,"yellow")}))}}class ie{constructor(e){this.config=e,this.cache=new Map,this.exportCache=new Map}generateAdvancedExports(e,t){const o={exports:[],defaultExport:null,bundleObject:null,header:[],metadata:{}};return t.generateHeader&&(o.header=this.generateHeader(t)),o.exports=this.generateMainExports(e,t),t.defaultExport&&(o.defaultExport=this.generateDefaultExport(t.defaultExport,t)),t.generateBundleObject&&(o.bundleObject=this.generateBundleObject(e,t)),o.metadata=this.generateMetadata(e,t),o}generateHeader(e){const t=[];return t.push("/**"),e.title&&t.push(` * ${e.title}`),e.description&&t.push(` * ${e.description}`),t.push(" * Generated automatically by @devlander/collect-exports-for-bundle"),t.push(" */"),t.push(""),t}generateMainExports(e,t){const o=[];return t.sortExports&&(e=this.sortFiles(e,t.sortStrategy)),e.forEach(e=>{const n=l.relative(l.dirname(t.output),e).replace(/\\/g,"/").replace(/\.[^/.]+$/,"");t.checkCircularDependencies&&this.hasCircularDependency(e,t),t.validatePaths&&this.validatePath(e,t);const r=this.generateExportStatement(n,e,t);o.push(r)}),o}generateExportStatement(e,t,o){const n=l.basename(e),r=o.exportStrategy||"both";if("cjs"===o.exportStyle)return` ${n}: require('./${e}'),`;switch(r){case"named":return`export { ${n} } from './${e}';`;case"default":return`export { default as ${n} } from './${e}';`;case"both":default:return`export * from './${e}';`;case"selective":return this.generateSelectiveExport(e,t,o)}}generateSelectiveExport(e,t,o){try{const o=i.readFileSync(t,"utf-8"),n=this.analyzeFileExports(o);return n.default&&n.named.length>0?`export { default, ${n.named.join(", ")} } from './${e}';`:n.default?`export { default } from './${e}';`:n.named.length>0?`export { ${n.named.join(", ")} } from './${e}';`:`export * from './${e}';`}catch(t){return`export * from './${e}';`}}analyzeFileExports(e){const t={default:!1,named:[]};(e.includes("export default")||e.includes("module.exports ="))&&(t.default=!0);const o=e.match(/export\s+(?:const|let|var|function|class)\s+(\w+)/g);return o&&o.forEach(e=>{var o;const n=null===(o=e.match(/(?:const|let|var|function|class)\s+(\w+)/))||void 0===o?void 0:o[1];n&&t.named.push(n)}),t}generateDefaultExport(e,t){const o=l.relative(l.dirname(t.output),l.resolve(t.rootDir,e)).replace(/\\/g,"/").replace(/\.[^/.]+$/,"");return"cjs"===t.exportStyle?` default: require('./${o}'),`:`export { default } from './${o}';`}generateBundleObject(e,t){const o=[];return e.forEach(e=>{const n=l.relative(l.dirname(t.output),e).replace(/\\/g,"/").replace(/\.[^/.]+$/,""),r=l.basename(n);"cjs"===t.exportStyle?o.push(` ${r}: require('./${n}'),`):o.push(`export { ${r} } from './${n}';`)}),o}generateMetadata(e,t){return{totalFiles:e.length,exportStyle:t.exportStyle,exportStrategy:t.exportStrategy,hasDefaultExport:!!t.defaultExport,hasBundleObject:t.generateBundleObject,generatedAt:(new Date).toISOString()}}sortFiles(e,t){const o=[...e];switch(t){case"alphabetical":return o.sort((e,t)=>l.basename(e).localeCompare(l.basename(t)));case"type":return o.sort((e,t)=>{const o=l.extname(e),n=l.extname(t);return o.localeCompare(n)});case"size":return o.sort((e,t)=>{try{const o=i.statSync(e),n=i.statSync(t);return o.size-n.size}catch{return 0}});default:return o}}hasCircularDependency(e,t){try{const o=i.readFileSync(e,"utf-8");return(o.match(/from\s+['"]([^'"]+)['"]/g)||[]).some(e=>e.replace(/from\s+['"]/,"").replace(/['"]$/,"").includes(l.basename(t.output,l.extname(t.output))))}catch{return!1}}validatePath(e,t){try{return i.statSync(e).isFile()}catch{return!1}}getCachedResult(e){return this.config.enableCaching&&this.cache.has(e)?this.cache.get(e):null}setCachedResult(e,t){this.config.enableCaching&&this.cache.set(e,t)}async processFilesInParallel(e,t,o=10){if(!t.parallelProcessing||e.length<=o)return e.map(e=>this.processFile(e,t));const n=[];for(let r=0;r<e.length;r+=o){const s=e.slice(r,r+o).map(e=>this.processFile(e,t)),i=await Promise.all(s);n.push(...i)}return n}processFile(e,t){const o=`${e}-${JSON.stringify(t)}`,n=this.getCachedResult(o);if(n)return n;const r={file:e,processed:!0,timestamp:Date.now()};return this.setCachedResult(o,r),r}}exports.AdvancedExportGenerator=ie,exports.CONFIG_PRESETS=te,exports.EnhancedConfig=se,exports.collectExportsForBundle=async function(e){try{return await ee(e),{files:[],exports:{},formatted:"Generated using existing autoExporter"}}catch(e){throw e}},exports.collectPaths=Z,exports.createConfigFromPreset=function(e,t){return(new se).createConfig(e,t)},exports.createExtensions=(e="",t=[],o=[],n)=>{try{e=e&&" "!==e?e.trim():"";const r="development"===process.env.NODE_ENV;if((n||r)&&u(`Creating extensions for ${e}...`,"yellow"),!o.length)return[];const s=new Set,i=t.length*o.length+o.length;let l=0;const a=()=>{h("Creating extensions progress",i,++l)};return o.forEach(t=>{s.add(g(e,"",t)),(n||r)&&a()}),t.forEach(t=>{o.forEach(o=>{const i=g(e,t,o);if(s.add(i),(n||r)&&a(),t){const i=g(t,e,o);s.add(i),(n||r)&&a()}})}),(n||r)&&u(`Finished creating extensions for ${e}: ${Array.from(s).join(", ")}`,"green"),Array.from(s)}catch(e){return n&&c("createExtensions",e),[]}},exports.default=ee,exports.formatAdvancedOutput=function(e,t){let o="";return e.header&&e.header.length>0&&(o+=e.header.join("\n")+"\n"),"cjs"===t.exportStyle?o+=`module.exports = {\n${e.exports.join("\n")}\n};\n`:o+=e.exports.join("\n")+"\n",e.defaultExport&&"cjs"!==t.exportStyle&&(o+=e.defaultExport+"\n"),e.bundleObject&&t.generateBundleObject&&("cjs"===t.exportStyle?(o+="\n// Bundle object\n",o+=`module.exports.bundle = {\n${e.bundleObject.join("\n")}\n};\n`):(o+="\n// Bundle exports\n",o+=e.bundleObject.join("\n")+"\n")),o},exports.formatCJSOutput=function(e){return`module.exports = {\n${e.requires.join("\n")}\n};\n`},exports.formatESMOutput=function(e){return e.exports.join("\n")+"\n"},exports.formatMixedOutput=function(e){return e.exports.join("\n")+"\n"},exports.generateCJSExports=function(e,t){const o={...t,exportStyle:"cjs"},n=new ie(o).generateAdvancedExports(e,o);let r=[...n.exports];return t.defaultExport&&n.defaultExport&&r.push(n.defaultExport),{requires:r}},exports.generateESMExports=function(e,t){const o={...t,exportStyle:"esm"},n=new ie(o).generateAdvancedExports(e,o);let r=[...n.exports];return t.defaultExport&&n.defaultExport&&r.push(n.defaultExport),{exports:r}},exports.generateMixedExports=function(e,t){const o={...t,exportStyle:"mixed"},n=new ie(o).generateAdvancedExports(e,o);let r=[...n.exports];return t.defaultExport&&n.defaultExport&&r.push(n.defaultExport),{exports:r}},exports.getExtensions=m,exports.getPreset=oe,exports.isValidPreset=re,exports.listPresets=ne,exports.showAvailablePresets=function(){(new se).listAvailablePresets()},exports.toCamelCase=function(e){return f(e)?e:(x.containsSpecialChar.test(e)&&(e=e.replace(x.containsSpecialChar,"_")),x.containsDash.test(e)&&(e=e.replace(x.containsDash,"_")),(e=e.trim())?e.split(/[-_ ]+/).map((e,t)=>{return 0===t?e.toLowerCase():(o=e).charAt(0).toUpperCase()+o.slice(1).toLowerCase();var o}).join(""):e)};
//# sourceMappingURL=index.min.js.map