metadatafy 1.0.1 → 1.0.3

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.
@@ -0,0 +1,2 @@
1
+ 'use strict';var p=require('typescript'),d=require('path'),g=require('fs'),L=require('crypto'),glob=require('glob'),F=require('fs/promises');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var p__default=/*#__PURE__*/_interopDefault(p);var d__namespace=/*#__PURE__*/_interopNamespace(d);var g__namespace=/*#__PURE__*/_interopNamespace(g);var L__namespace=/*#__PURE__*/_interopNamespace(L);var F__namespace=/*#__PURE__*/_interopNamespace(F);var q={"app/**/page.tsx":"route","app/**/page.ts":"route","app/**/layout.tsx":"route","app/**/layout.ts":"route","app/**/route.tsx":"api","app/**/route.ts":"api","app/api/**/*.ts":"api","app/api/**/*.tsx":"api","pages/**/*.tsx":"route","pages/**/*.ts":"route","pages/api/**/*.ts":"api","components/**/*.tsx":"component","components/**/*.ts":"component","src/components/**/*.tsx":"component","src/components/**/*.ts":"component","hooks/**/*.ts":"hook","hooks/**/*.tsx":"hook","src/hooks/**/*.ts":"hook","src/hooks/**/*.tsx":"hook","services/**/*.ts":"service","src/services/**/*.ts":"service","lib/**/*.ts":"utility","src/lib/**/*.ts":"utility","utils/**/*.ts":"utility","src/utils/**/*.ts":"utility","supabase/migrations/*.sql":"table","prisma/migrations/**/*.sql":"table"},G=["app/**/*.{ts,tsx}","pages/**/*.{ts,tsx}","components/**/*.{ts,tsx}","hooks/**/*.{ts,tsx}","services/**/*.ts","lib/**/*.ts","utils/**/*.ts","src/**/*.{ts,tsx}","supabase/migrations/*.sql"],z=["**/node_modules/**","**/.next/**","**/dist/**","**/*.test.{ts,tsx}","**/*.spec.{ts,tsx}","**/__tests__/**","**/*.d.ts","**/coverage/**"];function H(n={}){return {projectId:n.projectId||"default",include:n.include||G,exclude:n.exclude||z,fileTypeMapping:{...q,...n.fileTypeMapping},output:{file:{enabled:true,path:"project-metadata.json",...n.output?.file},api:{enabled:false,endpoint:"",...n.output?.api}},koreanKeywords:n.koreanKeywords,mode:n.mode||"production",verbose:n.verbose||false}}function Z(n){let t=[];return n.projectId||t.push("projectId is required"),n.output.api?.enabled&&!n.output.api.endpoint&&t.push("API endpoint is required when api output is enabled"),n.include.length===0&&t.push("At least one include pattern is required"),t}function D(n){let t=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"{{GLOBSTAR}}").replace(/\*/g,"[^/]*").replace(/{{GLOBSTAR}}/g,".*").replace(/\{([^}]+)\}/g,(e,s)=>`(${s.split(",").map(i=>i.trim()).join("|")})`);return new RegExp(`^${t}$`)}var x=class{constructor(){this.compilerOptions={target:p__default.default.ScriptTarget.ESNext,module:p__default.default.ModuleKind.ESNext,jsx:p__default.default.JsxEmit.React,esModuleInterop:true,allowSyntheticDefaultImports:true,strict:false};}parse(t,e){return p__default.default.createSourceFile(e,t,this.compilerOptions.target,true,this.getScriptKind(e))}getScriptKind(t){let e=t.toLowerCase();return e.endsWith(".tsx")?p__default.default.ScriptKind.TSX:e.endsWith(".ts")?p__default.default.ScriptKind.TS:e.endsWith(".jsx")?p__default.default.ScriptKind.JSX:e.endsWith(".js")?p__default.default.ScriptKind.JS:p__default.default.ScriptKind.Unknown}traverse(t,e){e(t)!==false&&p__default.default.forEachChild(t,r=>this.traverse(r,e));}findNodes(t,e){let s=[];return this.traverse(t,r=>{e(r)&&s.push(r);}),s}getNodeText(t,e){return t.getText(e)}getJSDocComment(t){let e=p__default.default.getJSDocCommentsAndTags(t);if(e.length!==0)return e.filter(p__default.default.isJSDoc).map(s=>s.comment).filter(Boolean).join(`
2
+ `)}};new x;var y=class{parse(t,e){let s=this.extractTables(t),r=s[0]?.name||this.extractNameFromPath(e);return {path:e,type:"table",name:r,imports:[],exports:s.map(i=>({name:i.name,isDefault:false,isTypeOnly:false,kind:"variable"})),metadata:{tableName:r,columns:s[0]?.columns||[]}}}extractTables(t){let e=[],s=/CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?["']?(\w+)["']?\s*\(([\s\S]*?)\);/gi,r;for(;(r=s.exec(t))!==null;){let o=r[1],a=r[2],l=this.parseColumns(a);e.push({name:o,columns:l});}let i=/ALTER\s+TABLE\s+["']?(\w+)["']?\s+ADD\s+(?:COLUMN\s+)?["']?(\w+)["']?\s+(\w+)/gi;for(;(r=i.exec(t))!==null;){let o=r[1],a=r[2],l=r[3],u=e.find(f=>f.name===o);u||(u={name:o,columns:[]},e.push(u)),u.columns.push({name:a,type:l,nullable:true,isPrimaryKey:false,isForeignKey:false});}return e}parseColumns(t){let e=[],s=t.split(",").map(r=>r.trim()).filter(r=>r&&!r.toUpperCase().startsWith("CONSTRAINT")&&!r.toUpperCase().startsWith("PRIMARY KEY")&&!r.toUpperCase().startsWith("FOREIGN KEY")&&!r.toUpperCase().startsWith("UNIQUE")&&!r.toUpperCase().startsWith("CHECK"));for(let r of s){let i=this.parseColumnDefinition(r);i&&e.push(i);}return e}parseColumnDefinition(t){let e=t.match(/^["']?(\w+)["']?\s+(\w+(?:\([^)]+\))?)/i);if(!e)return null;let[,s,r]=e,i=t.toUpperCase();return {name:s,type:r.toUpperCase(),nullable:!i.includes("NOT NULL"),isPrimaryKey:i.includes("PRIMARY KEY"),isForeignKey:i.includes("REFERENCES"),references:this.extractReference(t)}}extractReference(t){let e=t.match(/REFERENCES\s+["']?(\w+)["']?\s*\(["']?(\w+)["']?\)/i);if(e)return {table:e[1],column:e[2]}}extractNameFromPath(t){let e=d__namespace.basename(t),s=e.match(/create_(\w+)_table/i);return s?s[1]:e.replace(".sql","")}};var v=class{extract(t){let e=[];return p__default.default.forEachChild(t,s=>{if(p__default.default.isImportDeclaration(s)){let r=this.parseImportDeclaration(s);r&&e.push(r);}}),e}parseImportDeclaration(t){let e=t.moduleSpecifier;if(!p__default.default.isStringLiteral(e))return null;let s=e.text,r=[],i=false,o=t.importClause?.isTypeOnly||false,a=t.importClause;if(!a)return {source:s,specifiers:[],isDefault:false,isTypeOnly:false};a.name&&(r.push(a.name.text),i=true);let l=a.namedBindings;if(l){if(p__default.default.isNamespaceImport(l))r.push(`* as ${l.name.text}`);else if(p__default.default.isNamedImports(l))for(let u of l.elements){let f=u.name.text,T=u.propertyName?.text;T?r.push(`${T} as ${f}`):r.push(f);}}return {source:s,specifiers:r,isDefault:i,isTypeOnly:o}}};var w=class{extract(t){let e=[];return p__default.default.forEachChild(t,s=>{let r=this.extractFromNode(s,t);e.push(...r);}),e}extractFromNode(t,e){let s=[];if(p__default.default.isFunctionDeclaration(t)&&this.hasExportModifier(t)&&s.push({name:t.name?.text||"anonymous",isDefault:this.hasDefaultModifier(t),isTypeOnly:false,kind:"function"}),p__default.default.isClassDeclaration(t)&&this.hasExportModifier(t)&&s.push({name:t.name?.text||"anonymous",isDefault:this.hasDefaultModifier(t),isTypeOnly:false,kind:"class"}),p__default.default.isVariableStatement(t)&&this.hasExportModifier(t))for(let r of t.declarationList.declarations)p__default.default.isIdentifier(r.name)&&s.push({name:r.name.text,isDefault:false,isTypeOnly:false,kind:"variable"});if(p__default.default.isTypeAliasDeclaration(t)&&this.hasExportModifier(t)&&s.push({name:t.name.text,isDefault:false,isTypeOnly:true,kind:"type"}),p__default.default.isInterfaceDeclaration(t)&&this.hasExportModifier(t)&&s.push({name:t.name.text,isDefault:false,isTypeOnly:true,kind:"interface"}),p__default.default.isExportAssignment(t)&&!t.isExportEquals){let r=this.getExportDefaultName(t,e);s.push({name:r,isDefault:true,isTypeOnly:false,kind:"variable"});}if(p__default.default.isExportDeclaration(t)){let r=t.exportClause;if(r&&p__default.default.isNamedExports(r))for(let i of r.elements)s.push({name:i.name.text,isDefault:false,isTypeOnly:t.isTypeOnly,kind:"variable"});}return s}hasExportModifier(t){return (p__default.default.canHaveModifiers(t)?p__default.default.getModifiers(t):void 0)?.some(s=>s.kind===p__default.default.SyntaxKind.ExportKeyword)||false}hasDefaultModifier(t){return (p__default.default.canHaveModifiers(t)?p__default.default.getModifiers(t):void 0)?.some(s=>s.kind===p__default.default.SyntaxKind.DefaultKeyword)||false}getExportDefaultName(t,e){let s=t.expression;if(p__default.default.isIdentifier(s))return s.text;if(p__default.default.isArrowFunction(s)||p__default.default.isFunctionExpression(s))return "default";if(p__default.default.isCallExpression(s)&&p__default.default.isIdentifier(s.expression)){let r=s.arguments[0];if(r&&p__default.default.isIdentifier(r))return r.text}return "default"}};var C=class{extract(t){let e=[],s=this.findPropsType(t);s&&e.push(...this.extractFromTypeNode(s,t));let r=this.findComponentFunction(t);return r&&e.push(...this.extractFromFunctionParams(r,t)),this.deduplicateProps(e)}findPropsType(t){let e;return p__default.default.forEachChild(t,s=>{p__default.default.isInterfaceDeclaration(s)&&s.name.text.endsWith("Props")&&(e=s),p__default.default.isTypeAliasDeclaration(s)&&s.name.text.endsWith("Props")&&(e=s.type);}),e}findComponentFunction(t){let e;return p__default.default.forEachChild(t,s=>{if(p__default.default.isFunctionDeclaration(s)&&this.isExported(s)&&(e=s),p__default.default.isVariableStatement(s)&&this.isExported(s))for(let r of s.declarationList.declarations)r.initializer&&(p__default.default.isArrowFunction(r.initializer)||p__default.default.isFunctionExpression(r.initializer))&&(e=r.initializer);}),e}extractFromTypeNode(t,e){let s=[];if(p__default.default.isInterfaceDeclaration(t)){for(let r of t.members){let i=this.extractMemberProp(r,e);i&&s.push(i);}return s}if(p__default.default.isTypeLiteralNode(t))for(let r of t.members){let i=this.extractMemberProp(r,e);i&&s.push(i);}if(p__default.default.isIntersectionTypeNode(t))for(let r of t.types)s.push(...this.extractFromTypeNode(r,e));return s}extractMemberProp(t,e){if(!p__default.default.isPropertySignature(t))return null;let s=t.name;if(!p__default.default.isIdentifier(s)&&!p__default.default.isStringLiteral(s))return null;let r=(p__default.default.isIdentifier(s),s.text),i=!t.questionToken,o=t.type?t.type.getText(e):"any";return {name:r,type:o,required:i}}extractFromFunctionParams(t,e){let s=[],r=t.parameters[0];if(!r)return s;if(p__default.default.isObjectBindingPattern(r.name))for(let i of r.name.elements)p__default.default.isBindingElement(i)&&p__default.default.isIdentifier(i.name)&&s.push({name:i.name.text,type:"unknown",required:!i.initializer,defaultValue:i.initializer?.getText(e)});return s}isExported(t){return (p__default.default.canHaveModifiers(t)?p__default.default.getModifiers(t):void 0)?.some(s=>s.kind===p__default.default.SyntaxKind.ExportKeyword)||false}deduplicateProps(t){let e=new Set;return t.filter(s=>e.has(s.name)?false:(e.add(s.name),true))}};function N(n){return n.replace(/([a-z])([A-Z])/g,"$1 $2").split(" ").filter(Boolean)}function A(n){return n.replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/([a-z])([A-Z])/g,"$1 $2").split(" ").filter(Boolean)}function M(n){return n.split("_").filter(Boolean)}function ft(n){return n.split("-").filter(Boolean)}function J(n){let t=new Set,e=n.split(/[-_]/);for(let s of e)N(s).forEach(i=>t.add(i.toLowerCase()));return [...t]}function K(n){let t=[],e=n.match(/[A-Z]{2,}/g);return e&&t.push(...e),t}function mt(n){let t=J(n);return {camel:t.map((e,s)=>s===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(""),pascal:t.map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(""),snake:t.map(e=>e.toLowerCase()).join("_"),kebab:t.map(e=>e.toLowerCase()).join("-")}}var P={create:["\uC0DD\uC131","\uB9CC\uB4E4\uAE30","\uCD94\uAC00"],read:["\uC77D\uAE30","\uC870\uD68C"],update:["\uC218\uC815","\uC5C5\uB370\uC774\uD2B8","\uBCC0\uACBD"],delete:["\uC0AD\uC81C","\uC81C\uAC70"],list:["\uBAA9\uB85D","\uB9AC\uC2A4\uD2B8"],search:["\uAC80\uC0C9","\uCC3E\uAE30"],filter:["\uD544\uD130","\uD544\uD130\uB9C1"],sort:["\uC815\uB82C"],submit:["\uC81C\uCD9C","\uC804\uC1A1"],cancel:["\uCDE8\uC18C"],confirm:["\uD655\uC778"],save:["\uC800\uC7A5"],load:["\uB85C\uB4DC","\uBD88\uB7EC\uC624\uAE30"],fetch:["\uAC00\uC838\uC624\uAE30","\uBD88\uB7EC\uC624\uAE30"],button:["\uBC84\uD2BC"],modal:["\uBAA8\uB2EC","\uD31D\uC5C5"],dialog:["\uB2E4\uC774\uC5BC\uB85C\uADF8","\uB300\uD654\uC0C1\uC790"],form:["\uD3FC","\uC591\uC2DD"],input:["\uC785\uB825","\uC778\uD48B"],select:["\uC120\uD0DD","\uC140\uB809\uD2B8","\uB4DC\uB86D\uB2E4\uC6B4"],checkbox:["\uCCB4\uD06C\uBC15\uC2A4","\uCCB4\uD06C"],table:["\uD14C\uC774\uBE14","\uD45C"],card:["\uCE74\uB4DC"],tab:["\uD0ED"],menu:["\uBA54\uB274"],header:["\uD5E4\uB354","\uBA38\uB9AC\uAE00"],footer:["\uD478\uD130","\uBC14\uB2E5\uAE00"],sidebar:["\uC0AC\uC774\uB4DC\uBC14"],navbar:["\uB124\uBE44\uAC8C\uC774\uC158","\uB124\uBE44\uBC14"],auth:["\uC778\uC99D","\uB85C\uADF8\uC778"],login:["\uB85C\uADF8\uC778"],logout:["\uB85C\uADF8\uC544\uC6C3"],register:["\uD68C\uC6D0\uAC00\uC785","\uAC00\uC785"],signup:["\uD68C\uC6D0\uAC00\uC785","\uAC00\uC785"],user:["\uC0AC\uC6A9\uC790","\uC720\uC800","\uD68C\uC6D0"],profile:["\uD504\uB85C\uD544"],password:["\uBE44\uBC00\uBC88\uD638","\uC554\uD638"],permission:["\uAD8C\uD55C"],attendance:["\uCD9C\uC11D","\uCD9C\uACB0"],check:["\uCCB4\uD06C","\uD655\uC778"],schedule:["\uC2A4\uCF00\uC904","\uC77C\uC815"],calendar:["\uCE98\uB9B0\uB354","\uB2EC\uB825"],notification:["\uC54C\uB9BC","\uD1B5\uC9C0"],message:["\uBA54\uC2DC\uC9C0","\uC54C\uB9BC"],setting:["\uC124\uC815"],settings:["\uC124\uC815"],payment:["\uACB0\uC81C","\uC9C0\uBD88"],order:["\uC8FC\uBB38"],product:["\uC0C1\uD488","\uC81C\uD488"],cart:["\uC7A5\uBC14\uAD6C\uB2C8"],checkout:["\uACB0\uC81C","\uCCB4\uD06C\uC544\uC6C3"],invoice:["\uC1A1\uC7A5","\uCCAD\uAD6C\uC11C"],report:["\uB9AC\uD3EC\uD2B8","\uBCF4\uACE0\uC11C"],dashboard:["\uB300\uC2DC\uBCF4\uB4DC"],analytics:["\uBD84\uC11D","\uD1B5\uACC4"],statistics:["\uD1B5\uACC4"],status:["\uC0C1\uD0DC"],pending:["\uB300\uAE30\uC911","\uB300\uAE30"],active:["\uD65C\uC131","\uD65C\uC131\uD654"],inactive:["\uBE44\uD65C\uC131","\uBE44\uD65C\uC131\uD654"],completed:["\uC644\uB8CC"],error:["\uC5D0\uB7EC","\uC624\uB958"],success:["\uC131\uACF5"],loading:["\uB85C\uB529","\uB85C\uB4DC\uC911"],date:["\uB0A0\uC9DC"],time:["\uC2DC\uAC04"],image:["\uC774\uBBF8\uC9C0","\uC0AC\uC9C4"],file:["\uD30C\uC77C"],upload:["\uC5C5\uB85C\uB4DC","\uC62C\uB9AC\uAE30"],download:["\uB2E4\uC6B4\uB85C\uB4DC","\uB0B4\uB824\uBC1B\uAE30"],export:["\uB0B4\uBCF4\uB0B4\uAE30","\uC775\uC2A4\uD3EC\uD2B8"],import:["\uAC00\uC838\uC624\uAE30","\uC784\uD3EC\uD2B8"],api:["API","\uC5D0\uC774\uD53C\uC544\uC774"],service:["\uC11C\uBE44\uC2A4"],hook:["\uD6C5"],component:["\uCEF4\uD3EC\uB10C\uD2B8"],page:["\uD398\uC774\uC9C0"],route:["\uB77C\uC6B0\uD2B8","\uACBD\uB85C"]};function O(n){let t=n.toLowerCase();if(P[t])return P[t];let e=[];for(let[s,r]of Object.entries(P))(t.includes(s)||s.includes(t))&&e.push(...r);return [...new Set(e)]}function ht(n){return {...P,...n}}var b=class{constructor(t){this.customKoreanMap=t||{};}extract(t,e,s=[],r=[]){let i=new Set;this.extractFromName(t,i),this.extractFromPath(e,i);for(let a of s)this.extractFromName(a,i);for(let a of r)this.extractFromName(a,i);let o=[...i];for(let a of o)this.findKorean(a).forEach(u=>i.add(u));return [...i].filter(a=>a.length>1)}extractFromName(t,e){e.add(t.toLowerCase()),N(t).forEach(a=>e.add(a.toLowerCase())),A(t).forEach(a=>e.add(a.toLowerCase())),M(t).forEach(a=>e.add(a.toLowerCase())),K(t).forEach(a=>e.add(a.toLowerCase()));}extractFromPath(t,e){let s=new Set(["src","app","components","hooks","services","lib","utils","pages","api"]),r=t.replace(/\.[^/.]+$/,"").split("/").filter(i=>!s.has(i));for(let i of r)this.extractFromName(i,e);}findKorean(t){let e=this.customKoreanMap[t.toLowerCase()];return e||O(t)}};var I=class{constructor(t={},e=[".ts",".tsx",".js",".jsx"]){this.aliasMap=new Map(Object.entries(t)),this.extensions=e;}resolve(t,e,s){if(this.isExternalPackage(t))return null;let r=this.resolveAlias(t),i;if(r.startsWith("./")||r.startsWith("../")){let a=d__namespace.dirname(d__namespace.resolve(s,e));i=d__namespace.resolve(a,r);}else if(r!==t)i=d__namespace.resolve(s,r);else return null;let o=this.resolveWithExtensions(i);return o?d__namespace.relative(s,o):null}isExternalPackage(t){if(t.startsWith("./")||t.startsWith("../"))return false;for(let e of this.aliasMap.keys())if(t.startsWith(e))return false;return true}resolveAlias(t){for(let[e,s]of this.aliasMap.entries()){if(t===e)return s;if(t.startsWith(e+"/"))return t.replace(e,s)}return t}resolveWithExtensions(t){if(g__namespace.existsSync(t))try{let e=g__namespace.statSync(t);if(e.isFile())return t;if(e.isDirectory())return this.findIndexFile(t)}catch{}for(let e of this.extensions){let s=t+e;if(g__namespace.existsSync(s))return s}return this.findIndexFile(t)}findIndexFile(t){for(let e of this.extensions){let s=d__namespace.join(t,`index${e}`);if(g__namespace.existsSync(s))return s}return null}};var S=class{constructor(t){let e={"@":"src","@/":"src/","~":"src","~/":"src/"};this.resolver=new I({...e,...t});}build(t,e){let s=new Map,r=new Set(t.map(i=>i.path));for(let i of t){let o=this.resolveCalls(i,e,r);s.set(i.path,{calls:o,calledBy:[]});}for(let[i,o]of s.entries())for(let a of o.calls){let l=s.get(a);l&&l.calledBy.push(i);}return s}resolveCalls(t,e,s){let r=[];for(let i of t.imports){if(i.isTypeOnly)continue;let o=this.resolver.resolve(i.source,t.path,e);o&&s.has(o)&&r.push(o);}return [...new Set(r)]}};function j(n,t){let e=`${n}:${t}`;return L__namespace.createHash("sha256").update(e).digest("hex").slice(0,16)}var $=class{constructor(t){this.config=t,this.tsParser=new x,this.sqlParser=new y,this.importExtractor=new v,this.exportExtractor=new w,this.propsExtractor=new C,this.keywordExtractor=new b(t.koreanKeywords),this.callGraphBuilder=new S;}async analyze(t){let e=Date.now(),s=[],r=await this.collectFiles(t);this.config.verbose&&console.log(`[metadata-plugin] Found ${r.length} files to analyze`);let i=[];for(let u of r)try{let f=await this.parseFile(u,t);f&&i.push(f);}catch(f){let T=f instanceof Error?f.message:"Unknown error";s.push(`${u}: ${T}`);}let o=this.callGraphBuilder.build(i,t),a=i.map(u=>this.createIndexItem(u,o)),l=this.calculateStats(a,s);return this.config.verbose&&(console.log(`[metadata-plugin] Analysis completed in ${Date.now()-e}ms`),console.log(`[metadata-plugin] Processed ${a.length} items`)),{items:a,stats:l,timestamp:new Date().toISOString()}}async collectFiles(t){let e=[];for(let s of this.config.include){let r=await glob.glob(s,{cwd:t,ignore:this.config.exclude,absolute:true});e.push(...r);}return [...new Set(e)]}async parseFile(t,e){let s=d__namespace.relative(e,t),r=this.determineFileType(s);if(!r)return null;let i=await F__namespace.readFile(t,"utf-8");if(d__namespace.extname(t)===".sql")return this.sqlParser.parse(i,s);let a=this.tsParser.parse(i,t),l=this.importExtractor.extract(a),u=this.exportExtractor.extract(a),f=r==="component"?this.propsExtractor.extract(a):void 0;return {path:s,type:r,name:this.extractName(s,u),imports:l,exports:u,props:f}}determineFileType(t){let e=Object.entries(this.config.fileTypeMapping).sort(([s],[r])=>r.length-s.length);for(let[s,r]of e)if(D(s).test(t))return r;return null}extractName(t,e){let s=e.find(i=>i.isDefault);if(s&&s.name!=="default")return s.name;let r=d__namespace.basename(t,d__namespace.extname(t));if(["index","page","layout","route"].includes(r)){let i=d__namespace.dirname(t),o=d__namespace.basename(i);return o!=="."?o:r}return r}createIndexItem(t,e){let s=e.get(t.path)||{calls:[],calledBy:[]},r=this.keywordExtractor.extract(t.name,t.path,t.exports.map(o=>o.name),t.props?.map(o=>o.name)),i=this.buildSearchText(t,r);return {id:j(this.config.projectId,t.path),projectId:this.config.projectId,type:t.type,name:t.name,path:t.path,keywords:r,searchText:i,calls:s.calls,calledBy:s.calledBy,metadata:{exports:t.exports.map(o=>o.name),props:t.props?.map(o=>o.name),...t.metadata}}}buildSearchText(t,e){return [t.name,t.path,...e,...t.exports.map(r=>r.name),...t.props?.map(r=>r.name)||[]].join(" ").toLowerCase()}calculateStats(t,e){let s={route:0,component:0,hook:0,service:0,api:0,table:0,utility:0};for(let r of t)s[r.type]++;return {totalFiles:t.length,byType:s,parseErrors:e}}};var B=class{constructor(t){this.config=t;}async write(t,e){let s=d__namespace.dirname(e);await F__namespace.mkdir(s,{recursive:true});let r=this.formatOutput(t);await F__namespace.writeFile(e,r,"utf-8");}formatOutput(t){let e={version:"1.0.0",projectId:this.config.projectId,generatedAt:t.timestamp,stats:t.stats,items:t.items};return this.config.mode==="production"?JSON.stringify(e):JSON.stringify(e,null,2)}};var k=class{constructor(t,e={}){this.config=t,this.maxRetries=e.maxRetries??3,this.retryDelay=e.retryDelay??1e3;}async send(t){let e=this.config.output.api;if(!e?.enabled||!e.endpoint)return;let s={projectId:this.config.projectId,timestamp:t.timestamp,items:t.items,stats:t.stats},r=null;for(let i=0;i<this.maxRetries;i++)try{await this.sendRequest(e.endpoint,s,e.headers);return}catch(o){r=o instanceof Error?o:new Error(String(o)),this.config.verbose&&console.warn(`[metadata-plugin] API send attempt ${i+1} failed:`,r.message),i<this.maxRetries-1&&await this.delay(this.retryDelay*(i+1));}throw new Error(`Failed to send metadata after ${this.maxRetries} attempts: ${r?.message}`)}async sendRequest(t,e,s){let r=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",...s},body:JSON.stringify(e)});if(!r.ok){let i=await r.text();throw new Error(`API request failed: ${r.status} ${i}`)}}delay(t){return new Promise(e=>setTimeout(e,t))}},W=class extends k{async send(t){let e=this.config.output.api;if(!e?.enabled||!e.endpoint)return;let s=t.items.map(i=>({id:i.id,project_id:i.projectId,type:i.type,name:i.name,path:i.path,keywords:i.keywords,search_text:i.searchText,calls:i.calls,called_by:i.calledBy,metadata:i.metadata,updated_at:t.timestamp})),r=500;for(let i=0;i<s.length;i+=r){let o=s.slice(i,i+r),a=await fetch(e.endpoint,{method:"POST",headers:{"Content-Type":"application/json",Prefer:"resolution=merge-duplicates",...e.headers},body:JSON.stringify(o)});if(!a.ok)throw new Error(`Supabase upsert failed: ${a.status}`)}}};exports.A=k;exports.B=W;exports.a=q;exports.b=G;exports.c=z;exports.d=H;exports.e=Z;exports.f=x;exports.g=y;exports.h=v;exports.i=w;exports.j=C;exports.k=N;exports.l=A;exports.m=M;exports.n=ft;exports.o=J;exports.p=K;exports.q=mt;exports.r=P;exports.s=O;exports.t=ht;exports.u=b;exports.v=I;exports.w=S;exports.x=j;exports.y=$;exports.z=B;
@@ -0,0 +1,2 @@
1
+ import p from'typescript';import*as d from'path';import*as g from'fs';import*as L from'crypto';import {glob}from'glob';import*as F from'fs/promises';var q={"app/**/page.tsx":"route","app/**/page.ts":"route","app/**/layout.tsx":"route","app/**/layout.ts":"route","app/**/route.tsx":"api","app/**/route.ts":"api","app/api/**/*.ts":"api","app/api/**/*.tsx":"api","pages/**/*.tsx":"route","pages/**/*.ts":"route","pages/api/**/*.ts":"api","components/**/*.tsx":"component","components/**/*.ts":"component","src/components/**/*.tsx":"component","src/components/**/*.ts":"component","hooks/**/*.ts":"hook","hooks/**/*.tsx":"hook","src/hooks/**/*.ts":"hook","src/hooks/**/*.tsx":"hook","services/**/*.ts":"service","src/services/**/*.ts":"service","lib/**/*.ts":"utility","src/lib/**/*.ts":"utility","utils/**/*.ts":"utility","src/utils/**/*.ts":"utility","supabase/migrations/*.sql":"table","prisma/migrations/**/*.sql":"table"},G=["app/**/*.{ts,tsx}","pages/**/*.{ts,tsx}","components/**/*.{ts,tsx}","hooks/**/*.{ts,tsx}","services/**/*.ts","lib/**/*.ts","utils/**/*.ts","src/**/*.{ts,tsx}","supabase/migrations/*.sql"],z=["**/node_modules/**","**/.next/**","**/dist/**","**/*.test.{ts,tsx}","**/*.spec.{ts,tsx}","**/__tests__/**","**/*.d.ts","**/coverage/**"];function H(n={}){return {projectId:n.projectId||"default",include:n.include||G,exclude:n.exclude||z,fileTypeMapping:{...q,...n.fileTypeMapping},output:{file:{enabled:true,path:"project-metadata.json",...n.output?.file},api:{enabled:false,endpoint:"",...n.output?.api}},koreanKeywords:n.koreanKeywords,mode:n.mode||"production",verbose:n.verbose||false}}function Z(n){let t=[];return n.projectId||t.push("projectId is required"),n.output.api?.enabled&&!n.output.api.endpoint&&t.push("API endpoint is required when api output is enabled"),n.include.length===0&&t.push("At least one include pattern is required"),t}function D(n){let t=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"{{GLOBSTAR}}").replace(/\*/g,"[^/]*").replace(/{{GLOBSTAR}}/g,".*").replace(/\{([^}]+)\}/g,(e,s)=>`(${s.split(",").map(i=>i.trim()).join("|")})`);return new RegExp(`^${t}$`)}var x=class{constructor(){this.compilerOptions={target:p.ScriptTarget.ESNext,module:p.ModuleKind.ESNext,jsx:p.JsxEmit.React,esModuleInterop:true,allowSyntheticDefaultImports:true,strict:false};}parse(t,e){return p.createSourceFile(e,t,this.compilerOptions.target,true,this.getScriptKind(e))}getScriptKind(t){let e=t.toLowerCase();return e.endsWith(".tsx")?p.ScriptKind.TSX:e.endsWith(".ts")?p.ScriptKind.TS:e.endsWith(".jsx")?p.ScriptKind.JSX:e.endsWith(".js")?p.ScriptKind.JS:p.ScriptKind.Unknown}traverse(t,e){e(t)!==false&&p.forEachChild(t,r=>this.traverse(r,e));}findNodes(t,e){let s=[];return this.traverse(t,r=>{e(r)&&s.push(r);}),s}getNodeText(t,e){return t.getText(e)}getJSDocComment(t){let e=p.getJSDocCommentsAndTags(t);if(e.length!==0)return e.filter(p.isJSDoc).map(s=>s.comment).filter(Boolean).join(`
2
+ `)}};new x;var y=class{parse(t,e){let s=this.extractTables(t),r=s[0]?.name||this.extractNameFromPath(e);return {path:e,type:"table",name:r,imports:[],exports:s.map(i=>({name:i.name,isDefault:false,isTypeOnly:false,kind:"variable"})),metadata:{tableName:r,columns:s[0]?.columns||[]}}}extractTables(t){let e=[],s=/CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?["']?(\w+)["']?\s*\(([\s\S]*?)\);/gi,r;for(;(r=s.exec(t))!==null;){let o=r[1],a=r[2],l=this.parseColumns(a);e.push({name:o,columns:l});}let i=/ALTER\s+TABLE\s+["']?(\w+)["']?\s+ADD\s+(?:COLUMN\s+)?["']?(\w+)["']?\s+(\w+)/gi;for(;(r=i.exec(t))!==null;){let o=r[1],a=r[2],l=r[3],u=e.find(f=>f.name===o);u||(u={name:o,columns:[]},e.push(u)),u.columns.push({name:a,type:l,nullable:true,isPrimaryKey:false,isForeignKey:false});}return e}parseColumns(t){let e=[],s=t.split(",").map(r=>r.trim()).filter(r=>r&&!r.toUpperCase().startsWith("CONSTRAINT")&&!r.toUpperCase().startsWith("PRIMARY KEY")&&!r.toUpperCase().startsWith("FOREIGN KEY")&&!r.toUpperCase().startsWith("UNIQUE")&&!r.toUpperCase().startsWith("CHECK"));for(let r of s){let i=this.parseColumnDefinition(r);i&&e.push(i);}return e}parseColumnDefinition(t){let e=t.match(/^["']?(\w+)["']?\s+(\w+(?:\([^)]+\))?)/i);if(!e)return null;let[,s,r]=e,i=t.toUpperCase();return {name:s,type:r.toUpperCase(),nullable:!i.includes("NOT NULL"),isPrimaryKey:i.includes("PRIMARY KEY"),isForeignKey:i.includes("REFERENCES"),references:this.extractReference(t)}}extractReference(t){let e=t.match(/REFERENCES\s+["']?(\w+)["']?\s*\(["']?(\w+)["']?\)/i);if(e)return {table:e[1],column:e[2]}}extractNameFromPath(t){let e=d.basename(t),s=e.match(/create_(\w+)_table/i);return s?s[1]:e.replace(".sql","")}};var v=class{extract(t){let e=[];return p.forEachChild(t,s=>{if(p.isImportDeclaration(s)){let r=this.parseImportDeclaration(s);r&&e.push(r);}}),e}parseImportDeclaration(t){let e=t.moduleSpecifier;if(!p.isStringLiteral(e))return null;let s=e.text,r=[],i=false,o=t.importClause?.isTypeOnly||false,a=t.importClause;if(!a)return {source:s,specifiers:[],isDefault:false,isTypeOnly:false};a.name&&(r.push(a.name.text),i=true);let l=a.namedBindings;if(l){if(p.isNamespaceImport(l))r.push(`* as ${l.name.text}`);else if(p.isNamedImports(l))for(let u of l.elements){let f=u.name.text,T=u.propertyName?.text;T?r.push(`${T} as ${f}`):r.push(f);}}return {source:s,specifiers:r,isDefault:i,isTypeOnly:o}}};var w=class{extract(t){let e=[];return p.forEachChild(t,s=>{let r=this.extractFromNode(s,t);e.push(...r);}),e}extractFromNode(t,e){let s=[];if(p.isFunctionDeclaration(t)&&this.hasExportModifier(t)&&s.push({name:t.name?.text||"anonymous",isDefault:this.hasDefaultModifier(t),isTypeOnly:false,kind:"function"}),p.isClassDeclaration(t)&&this.hasExportModifier(t)&&s.push({name:t.name?.text||"anonymous",isDefault:this.hasDefaultModifier(t),isTypeOnly:false,kind:"class"}),p.isVariableStatement(t)&&this.hasExportModifier(t))for(let r of t.declarationList.declarations)p.isIdentifier(r.name)&&s.push({name:r.name.text,isDefault:false,isTypeOnly:false,kind:"variable"});if(p.isTypeAliasDeclaration(t)&&this.hasExportModifier(t)&&s.push({name:t.name.text,isDefault:false,isTypeOnly:true,kind:"type"}),p.isInterfaceDeclaration(t)&&this.hasExportModifier(t)&&s.push({name:t.name.text,isDefault:false,isTypeOnly:true,kind:"interface"}),p.isExportAssignment(t)&&!t.isExportEquals){let r=this.getExportDefaultName(t,e);s.push({name:r,isDefault:true,isTypeOnly:false,kind:"variable"});}if(p.isExportDeclaration(t)){let r=t.exportClause;if(r&&p.isNamedExports(r))for(let i of r.elements)s.push({name:i.name.text,isDefault:false,isTypeOnly:t.isTypeOnly,kind:"variable"});}return s}hasExportModifier(t){return (p.canHaveModifiers(t)?p.getModifiers(t):void 0)?.some(s=>s.kind===p.SyntaxKind.ExportKeyword)||false}hasDefaultModifier(t){return (p.canHaveModifiers(t)?p.getModifiers(t):void 0)?.some(s=>s.kind===p.SyntaxKind.DefaultKeyword)||false}getExportDefaultName(t,e){let s=t.expression;if(p.isIdentifier(s))return s.text;if(p.isArrowFunction(s)||p.isFunctionExpression(s))return "default";if(p.isCallExpression(s)&&p.isIdentifier(s.expression)){let r=s.arguments[0];if(r&&p.isIdentifier(r))return r.text}return "default"}};var C=class{extract(t){let e=[],s=this.findPropsType(t);s&&e.push(...this.extractFromTypeNode(s,t));let r=this.findComponentFunction(t);return r&&e.push(...this.extractFromFunctionParams(r,t)),this.deduplicateProps(e)}findPropsType(t){let e;return p.forEachChild(t,s=>{p.isInterfaceDeclaration(s)&&s.name.text.endsWith("Props")&&(e=s),p.isTypeAliasDeclaration(s)&&s.name.text.endsWith("Props")&&(e=s.type);}),e}findComponentFunction(t){let e;return p.forEachChild(t,s=>{if(p.isFunctionDeclaration(s)&&this.isExported(s)&&(e=s),p.isVariableStatement(s)&&this.isExported(s))for(let r of s.declarationList.declarations)r.initializer&&(p.isArrowFunction(r.initializer)||p.isFunctionExpression(r.initializer))&&(e=r.initializer);}),e}extractFromTypeNode(t,e){let s=[];if(p.isInterfaceDeclaration(t)){for(let r of t.members){let i=this.extractMemberProp(r,e);i&&s.push(i);}return s}if(p.isTypeLiteralNode(t))for(let r of t.members){let i=this.extractMemberProp(r,e);i&&s.push(i);}if(p.isIntersectionTypeNode(t))for(let r of t.types)s.push(...this.extractFromTypeNode(r,e));return s}extractMemberProp(t,e){if(!p.isPropertySignature(t))return null;let s=t.name;if(!p.isIdentifier(s)&&!p.isStringLiteral(s))return null;let r=(p.isIdentifier(s),s.text),i=!t.questionToken,o=t.type?t.type.getText(e):"any";return {name:r,type:o,required:i}}extractFromFunctionParams(t,e){let s=[],r=t.parameters[0];if(!r)return s;if(p.isObjectBindingPattern(r.name))for(let i of r.name.elements)p.isBindingElement(i)&&p.isIdentifier(i.name)&&s.push({name:i.name.text,type:"unknown",required:!i.initializer,defaultValue:i.initializer?.getText(e)});return s}isExported(t){return (p.canHaveModifiers(t)?p.getModifiers(t):void 0)?.some(s=>s.kind===p.SyntaxKind.ExportKeyword)||false}deduplicateProps(t){let e=new Set;return t.filter(s=>e.has(s.name)?false:(e.add(s.name),true))}};function N(n){return n.replace(/([a-z])([A-Z])/g,"$1 $2").split(" ").filter(Boolean)}function A(n){return n.replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/([a-z])([A-Z])/g,"$1 $2").split(" ").filter(Boolean)}function M(n){return n.split("_").filter(Boolean)}function ft(n){return n.split("-").filter(Boolean)}function J(n){let t=new Set,e=n.split(/[-_]/);for(let s of e)N(s).forEach(i=>t.add(i.toLowerCase()));return [...t]}function K(n){let t=[],e=n.match(/[A-Z]{2,}/g);return e&&t.push(...e),t}function mt(n){let t=J(n);return {camel:t.map((e,s)=>s===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(""),pascal:t.map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(""),snake:t.map(e=>e.toLowerCase()).join("_"),kebab:t.map(e=>e.toLowerCase()).join("-")}}var P={create:["\uC0DD\uC131","\uB9CC\uB4E4\uAE30","\uCD94\uAC00"],read:["\uC77D\uAE30","\uC870\uD68C"],update:["\uC218\uC815","\uC5C5\uB370\uC774\uD2B8","\uBCC0\uACBD"],delete:["\uC0AD\uC81C","\uC81C\uAC70"],list:["\uBAA9\uB85D","\uB9AC\uC2A4\uD2B8"],search:["\uAC80\uC0C9","\uCC3E\uAE30"],filter:["\uD544\uD130","\uD544\uD130\uB9C1"],sort:["\uC815\uB82C"],submit:["\uC81C\uCD9C","\uC804\uC1A1"],cancel:["\uCDE8\uC18C"],confirm:["\uD655\uC778"],save:["\uC800\uC7A5"],load:["\uB85C\uB4DC","\uBD88\uB7EC\uC624\uAE30"],fetch:["\uAC00\uC838\uC624\uAE30","\uBD88\uB7EC\uC624\uAE30"],button:["\uBC84\uD2BC"],modal:["\uBAA8\uB2EC","\uD31D\uC5C5"],dialog:["\uB2E4\uC774\uC5BC\uB85C\uADF8","\uB300\uD654\uC0C1\uC790"],form:["\uD3FC","\uC591\uC2DD"],input:["\uC785\uB825","\uC778\uD48B"],select:["\uC120\uD0DD","\uC140\uB809\uD2B8","\uB4DC\uB86D\uB2E4\uC6B4"],checkbox:["\uCCB4\uD06C\uBC15\uC2A4","\uCCB4\uD06C"],table:["\uD14C\uC774\uBE14","\uD45C"],card:["\uCE74\uB4DC"],tab:["\uD0ED"],menu:["\uBA54\uB274"],header:["\uD5E4\uB354","\uBA38\uB9AC\uAE00"],footer:["\uD478\uD130","\uBC14\uB2E5\uAE00"],sidebar:["\uC0AC\uC774\uB4DC\uBC14"],navbar:["\uB124\uBE44\uAC8C\uC774\uC158","\uB124\uBE44\uBC14"],auth:["\uC778\uC99D","\uB85C\uADF8\uC778"],login:["\uB85C\uADF8\uC778"],logout:["\uB85C\uADF8\uC544\uC6C3"],register:["\uD68C\uC6D0\uAC00\uC785","\uAC00\uC785"],signup:["\uD68C\uC6D0\uAC00\uC785","\uAC00\uC785"],user:["\uC0AC\uC6A9\uC790","\uC720\uC800","\uD68C\uC6D0"],profile:["\uD504\uB85C\uD544"],password:["\uBE44\uBC00\uBC88\uD638","\uC554\uD638"],permission:["\uAD8C\uD55C"],attendance:["\uCD9C\uC11D","\uCD9C\uACB0"],check:["\uCCB4\uD06C","\uD655\uC778"],schedule:["\uC2A4\uCF00\uC904","\uC77C\uC815"],calendar:["\uCE98\uB9B0\uB354","\uB2EC\uB825"],notification:["\uC54C\uB9BC","\uD1B5\uC9C0"],message:["\uBA54\uC2DC\uC9C0","\uC54C\uB9BC"],setting:["\uC124\uC815"],settings:["\uC124\uC815"],payment:["\uACB0\uC81C","\uC9C0\uBD88"],order:["\uC8FC\uBB38"],product:["\uC0C1\uD488","\uC81C\uD488"],cart:["\uC7A5\uBC14\uAD6C\uB2C8"],checkout:["\uACB0\uC81C","\uCCB4\uD06C\uC544\uC6C3"],invoice:["\uC1A1\uC7A5","\uCCAD\uAD6C\uC11C"],report:["\uB9AC\uD3EC\uD2B8","\uBCF4\uACE0\uC11C"],dashboard:["\uB300\uC2DC\uBCF4\uB4DC"],analytics:["\uBD84\uC11D","\uD1B5\uACC4"],statistics:["\uD1B5\uACC4"],status:["\uC0C1\uD0DC"],pending:["\uB300\uAE30\uC911","\uB300\uAE30"],active:["\uD65C\uC131","\uD65C\uC131\uD654"],inactive:["\uBE44\uD65C\uC131","\uBE44\uD65C\uC131\uD654"],completed:["\uC644\uB8CC"],error:["\uC5D0\uB7EC","\uC624\uB958"],success:["\uC131\uACF5"],loading:["\uB85C\uB529","\uB85C\uB4DC\uC911"],date:["\uB0A0\uC9DC"],time:["\uC2DC\uAC04"],image:["\uC774\uBBF8\uC9C0","\uC0AC\uC9C4"],file:["\uD30C\uC77C"],upload:["\uC5C5\uB85C\uB4DC","\uC62C\uB9AC\uAE30"],download:["\uB2E4\uC6B4\uB85C\uB4DC","\uB0B4\uB824\uBC1B\uAE30"],export:["\uB0B4\uBCF4\uB0B4\uAE30","\uC775\uC2A4\uD3EC\uD2B8"],import:["\uAC00\uC838\uC624\uAE30","\uC784\uD3EC\uD2B8"],api:["API","\uC5D0\uC774\uD53C\uC544\uC774"],service:["\uC11C\uBE44\uC2A4"],hook:["\uD6C5"],component:["\uCEF4\uD3EC\uB10C\uD2B8"],page:["\uD398\uC774\uC9C0"],route:["\uB77C\uC6B0\uD2B8","\uACBD\uB85C"]};function O(n){let t=n.toLowerCase();if(P[t])return P[t];let e=[];for(let[s,r]of Object.entries(P))(t.includes(s)||s.includes(t))&&e.push(...r);return [...new Set(e)]}function ht(n){return {...P,...n}}var b=class{constructor(t){this.customKoreanMap=t||{};}extract(t,e,s=[],r=[]){let i=new Set;this.extractFromName(t,i),this.extractFromPath(e,i);for(let a of s)this.extractFromName(a,i);for(let a of r)this.extractFromName(a,i);let o=[...i];for(let a of o)this.findKorean(a).forEach(u=>i.add(u));return [...i].filter(a=>a.length>1)}extractFromName(t,e){e.add(t.toLowerCase()),N(t).forEach(a=>e.add(a.toLowerCase())),A(t).forEach(a=>e.add(a.toLowerCase())),M(t).forEach(a=>e.add(a.toLowerCase())),K(t).forEach(a=>e.add(a.toLowerCase()));}extractFromPath(t,e){let s=new Set(["src","app","components","hooks","services","lib","utils","pages","api"]),r=t.replace(/\.[^/.]+$/,"").split("/").filter(i=>!s.has(i));for(let i of r)this.extractFromName(i,e);}findKorean(t){let e=this.customKoreanMap[t.toLowerCase()];return e||O(t)}};var I=class{constructor(t={},e=[".ts",".tsx",".js",".jsx"]){this.aliasMap=new Map(Object.entries(t)),this.extensions=e;}resolve(t,e,s){if(this.isExternalPackage(t))return null;let r=this.resolveAlias(t),i;if(r.startsWith("./")||r.startsWith("../")){let a=d.dirname(d.resolve(s,e));i=d.resolve(a,r);}else if(r!==t)i=d.resolve(s,r);else return null;let o=this.resolveWithExtensions(i);return o?d.relative(s,o):null}isExternalPackage(t){if(t.startsWith("./")||t.startsWith("../"))return false;for(let e of this.aliasMap.keys())if(t.startsWith(e))return false;return true}resolveAlias(t){for(let[e,s]of this.aliasMap.entries()){if(t===e)return s;if(t.startsWith(e+"/"))return t.replace(e,s)}return t}resolveWithExtensions(t){if(g.existsSync(t))try{let e=g.statSync(t);if(e.isFile())return t;if(e.isDirectory())return this.findIndexFile(t)}catch{}for(let e of this.extensions){let s=t+e;if(g.existsSync(s))return s}return this.findIndexFile(t)}findIndexFile(t){for(let e of this.extensions){let s=d.join(t,`index${e}`);if(g.existsSync(s))return s}return null}};var S=class{constructor(t){let e={"@":"src","@/":"src/","~":"src","~/":"src/"};this.resolver=new I({...e,...t});}build(t,e){let s=new Map,r=new Set(t.map(i=>i.path));for(let i of t){let o=this.resolveCalls(i,e,r);s.set(i.path,{calls:o,calledBy:[]});}for(let[i,o]of s.entries())for(let a of o.calls){let l=s.get(a);l&&l.calledBy.push(i);}return s}resolveCalls(t,e,s){let r=[];for(let i of t.imports){if(i.isTypeOnly)continue;let o=this.resolver.resolve(i.source,t.path,e);o&&s.has(o)&&r.push(o);}return [...new Set(r)]}};function j(n,t){let e=`${n}:${t}`;return L.createHash("sha256").update(e).digest("hex").slice(0,16)}var $=class{constructor(t){this.config=t,this.tsParser=new x,this.sqlParser=new y,this.importExtractor=new v,this.exportExtractor=new w,this.propsExtractor=new C,this.keywordExtractor=new b(t.koreanKeywords),this.callGraphBuilder=new S;}async analyze(t){let e=Date.now(),s=[],r=await this.collectFiles(t);this.config.verbose&&console.log(`[metadata-plugin] Found ${r.length} files to analyze`);let i=[];for(let u of r)try{let f=await this.parseFile(u,t);f&&i.push(f);}catch(f){let T=f instanceof Error?f.message:"Unknown error";s.push(`${u}: ${T}`);}let o=this.callGraphBuilder.build(i,t),a=i.map(u=>this.createIndexItem(u,o)),l=this.calculateStats(a,s);return this.config.verbose&&(console.log(`[metadata-plugin] Analysis completed in ${Date.now()-e}ms`),console.log(`[metadata-plugin] Processed ${a.length} items`)),{items:a,stats:l,timestamp:new Date().toISOString()}}async collectFiles(t){let e=[];for(let s of this.config.include){let r=await glob(s,{cwd:t,ignore:this.config.exclude,absolute:true});e.push(...r);}return [...new Set(e)]}async parseFile(t,e){let s=d.relative(e,t),r=this.determineFileType(s);if(!r)return null;let i=await F.readFile(t,"utf-8");if(d.extname(t)===".sql")return this.sqlParser.parse(i,s);let a=this.tsParser.parse(i,t),l=this.importExtractor.extract(a),u=this.exportExtractor.extract(a),f=r==="component"?this.propsExtractor.extract(a):void 0;return {path:s,type:r,name:this.extractName(s,u),imports:l,exports:u,props:f}}determineFileType(t){let e=Object.entries(this.config.fileTypeMapping).sort(([s],[r])=>r.length-s.length);for(let[s,r]of e)if(D(s).test(t))return r;return null}extractName(t,e){let s=e.find(i=>i.isDefault);if(s&&s.name!=="default")return s.name;let r=d.basename(t,d.extname(t));if(["index","page","layout","route"].includes(r)){let i=d.dirname(t),o=d.basename(i);return o!=="."?o:r}return r}createIndexItem(t,e){let s=e.get(t.path)||{calls:[],calledBy:[]},r=this.keywordExtractor.extract(t.name,t.path,t.exports.map(o=>o.name),t.props?.map(o=>o.name)),i=this.buildSearchText(t,r);return {id:j(this.config.projectId,t.path),projectId:this.config.projectId,type:t.type,name:t.name,path:t.path,keywords:r,searchText:i,calls:s.calls,calledBy:s.calledBy,metadata:{exports:t.exports.map(o=>o.name),props:t.props?.map(o=>o.name),...t.metadata}}}buildSearchText(t,e){return [t.name,t.path,...e,...t.exports.map(r=>r.name),...t.props?.map(r=>r.name)||[]].join(" ").toLowerCase()}calculateStats(t,e){let s={route:0,component:0,hook:0,service:0,api:0,table:0,utility:0};for(let r of t)s[r.type]++;return {totalFiles:t.length,byType:s,parseErrors:e}}};var B=class{constructor(t){this.config=t;}async write(t,e){let s=d.dirname(e);await F.mkdir(s,{recursive:true});let r=this.formatOutput(t);await F.writeFile(e,r,"utf-8");}formatOutput(t){let e={version:"1.0.0",projectId:this.config.projectId,generatedAt:t.timestamp,stats:t.stats,items:t.items};return this.config.mode==="production"?JSON.stringify(e):JSON.stringify(e,null,2)}};var k=class{constructor(t,e={}){this.config=t,this.maxRetries=e.maxRetries??3,this.retryDelay=e.retryDelay??1e3;}async send(t){let e=this.config.output.api;if(!e?.enabled||!e.endpoint)return;let s={projectId:this.config.projectId,timestamp:t.timestamp,items:t.items,stats:t.stats},r=null;for(let i=0;i<this.maxRetries;i++)try{await this.sendRequest(e.endpoint,s,e.headers);return}catch(o){r=o instanceof Error?o:new Error(String(o)),this.config.verbose&&console.warn(`[metadata-plugin] API send attempt ${i+1} failed:`,r.message),i<this.maxRetries-1&&await this.delay(this.retryDelay*(i+1));}throw new Error(`Failed to send metadata after ${this.maxRetries} attempts: ${r?.message}`)}async sendRequest(t,e,s){let r=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",...s},body:JSON.stringify(e)});if(!r.ok){let i=await r.text();throw new Error(`API request failed: ${r.status} ${i}`)}}delay(t){return new Promise(e=>setTimeout(e,t))}},W=class extends k{async send(t){let e=this.config.output.api;if(!e?.enabled||!e.endpoint)return;let s=t.items.map(i=>({id:i.id,project_id:i.projectId,type:i.type,name:i.name,path:i.path,keywords:i.keywords,search_text:i.searchText,calls:i.calls,called_by:i.calledBy,metadata:i.metadata,updated_at:t.timestamp})),r=500;for(let i=0;i<s.length;i+=r){let o=s.slice(i,i+r),a=await fetch(e.endpoint,{method:"POST",headers:{"Content-Type":"application/json",Prefer:"resolution=merge-duplicates",...e.headers},body:JSON.stringify(o)});if(!a.ok)throw new Error(`Supabase upsert failed: ${a.status}`)}}};export{k as A,W as B,q as a,G as b,z as c,H as d,Z as e,x as f,y as g,v as h,w as i,C as j,N as k,A as l,M as m,ft as n,J as o,K as p,mt as q,P as r,O as s,ht as t,b as u,I as v,S as w,j as x,$ as y,B as z};