metadatafy 1.3.0 → 1.3.2

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 @@
1
+ import*as l from'fs';import*as c from'path';import {config}from'dotenv';function f(o,e){let n=e||process.env.NODE_ENV||"development",d=[".env",".env.local",`.env.${n}`,`.env.${n}.local`],s=[],t={};for(let i of d){let r=c.join(o,i);if(l.existsSync(r)){let a=config({path:r,override:true});a.parsed&&(s.push(i),Object.assign(t,a.parsed));}}return {loaded:s,variables:t}}function p(o,e=false){let{loaded:n}=f(o);e&&n.length>0&&console.log(`\u{1F4E6} Loaded env files: ${n.join(", ")}`);}export{f as a,p as b};
@@ -0,0 +1,2 @@
1
+ 'use strict';var c=require('typescript'),d=require('path'),x=require('fs'),U=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 c__default=/*#__PURE__*/_interopDefault(c);var d__namespace=/*#__PURE__*/_interopNamespace(d);var x__namespace=/*#__PURE__*/_interopNamespace(x);var U__namespace=/*#__PURE__*/_interopNamespace(U);var F__namespace=/*#__PURE__*/_interopNamespace(F);var D={components:"component",component:"component",ui:"component",widgets:"component",widget:"component",elements:"component",hooks:"hook",hook:"hook",composables:"hook",services:"service",service:"service",api:"service",utils:"utility",util:"utility",utilities:"utility",utility:"utility",lib:"utility",libs:"utility",helpers:"utility",helper:"utility",common:"utility",shared:"utility"},k={"page.tsx":"route","page.ts":"route","page.jsx":"route","page.js":"route","layout.tsx":"route","layout.ts":"route","layout.jsx":"route","layout.js":"route","route.tsx":"api","route.ts":"api","route.js":"api"},M={"/api/":"api"},j=["supabase/migrations","prisma/migrations","migrations","db/migrations","database/migrations"],Q=[{pattern:/^use[A-Z][a-zA-Z0-9]*\.(ts|tsx|js|jsx)$/,type:"hook",description:"React hook (use*.ts)"},{pattern:/\.(service|Service)\.(ts|js)$/,type:"service",description:"Service file (*.service.ts)"},{pattern:/[A-Z][a-zA-Z0-9]*Service\.(ts|js)$/,type:"service",description:"Service class file (*Service.ts)"},{pattern:/\.(action|actions|api)\.(ts|js)$/,type:"api",description:"API/Action file (*.action.ts, *.api.ts)"},{pattern:/\.(util|utils|helper|helpers)\.(ts|js)$/,type:"utility",description:"Utility file (*.util.ts, *.helper.ts)"},{pattern:/\.component\.(tsx|jsx)$/,type:"component",description:"Component file (*.component.tsx)"}];function N(n){return n.replace(/\.(tsx|jsx|ts|js)$/,"")}function X(n){return N(n).split(/[-_]/).flatMap(e=>e.split(/(?=[A-Z])/).filter(r=>r.length>0)).map(e=>e.toLowerCase()).filter(e=>e.length>0)}function _(n){for(let s of Q)if(s.pattern.test(n))return s.type;let t=X(n);N(n);if(t[0]==="use"&&t.length>1)return "hook";if(t[t.length-1]==="service")return "service";let r=t[t.length-1];return ["util","utils","helper","helpers"].includes(r)?"utility":["action","actions","api"].includes(r)?"api":r==="component"?"component":null}function L(n){if(!n.match(/\.(tsx|jsx)$/))return false;let e=N(n);return !["index","page","layout","route","loading","error","not-found","template"].includes(e.toLowerCase())}var V={"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","src/app/**/page.tsx":"route","src/app/**/page.ts":"route","src/app/**/layout.tsx":"route","src/app/**/layout.ts":"route","src/app/**/route.tsx":"api","src/app/**/route.ts":"api","src/app/api/**/*.ts":"api","src/app/api/**/*.tsx":"api","pages/**/*.tsx":"route","pages/**/*.ts":"route","pages/api/**/*.ts":"api","src/pages/**/*.tsx":"route","src/pages/**/*.ts":"route","src/pages/api/**/*.ts":"api","supabase/migrations/*.sql":"table","prisma/migrations/**/*.sql":"table"},tt=["app/**/*.{ts,tsx}","pages/**/*.{ts,tsx}","components/**/*.{ts,tsx}","hooks/**/*.{ts,tsx}","services/**/*.ts","lib/**/*.ts","utils/**/*.ts","src/**/*.{ts,tsx}","supabase/migrations/*.sql"],et=["**/node_modules/**","**/.next/**","**/dist/**","**/*.test.{ts,tsx}","**/*.spec.{ts,tsx}","**/__tests__/**","**/*.d.ts","**/coverage/**"];function it(n={}){return {projectId:n.projectId||"default",include:n.include||tt,exclude:n.exclude||et,fileTypeMapping:{...V,...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 nt(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 O(n){let t=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"{{GLOBSTAR}}").replace(/\*/g,"[^/]*").replace(/{{GLOBSTAR}}/g,".*").replace(/\{([^}]+)\}/g,(e,r)=>`(${r.split(",").map(i=>i.trim()).join("|")})`);return new RegExp(`^${t}$`)}var y=class{constructor(){this.compilerOptions={target:c__default.default.ScriptTarget.ESNext,module:c__default.default.ModuleKind.ESNext,jsx:c__default.default.JsxEmit.React,esModuleInterop:true,allowSyntheticDefaultImports:true,strict:false};}parse(t,e){return c__default.default.createSourceFile(e,t,this.compilerOptions.target,true,this.getScriptKind(e))}getScriptKind(t){let e=t.toLowerCase();return e.endsWith(".tsx")?c__default.default.ScriptKind.TSX:e.endsWith(".ts")?c__default.default.ScriptKind.TS:e.endsWith(".jsx")?c__default.default.ScriptKind.JSX:e.endsWith(".js")?c__default.default.ScriptKind.JS:c__default.default.ScriptKind.Unknown}traverse(t,e){e(t)!==false&&c__default.default.forEachChild(t,s=>this.traverse(s,e));}findNodes(t,e){let r=[];return this.traverse(t,s=>{e(s)&&r.push(s);}),r}getNodeText(t,e){return t.getText(e)}getJSDocComment(t){let e=c__default.default.getJSDocCommentsAndTags(t);if(e.length!==0)return e.filter(c__default.default.isJSDoc).map(r=>r.comment).filter(Boolean).join(`
2
+ `)}};new y;var E=class{parse(t,e){let r=this.extractTables(t),s=r[0]?.name||this.extractNameFromPath(e);return {path:e,type:"table",name:s,imports:[],exports:r.map(i=>({name:i.name,isDefault:false,isTypeOnly:false,kind:"variable"})),metadata:{tableName:s,columns:r[0]?.columns||[]}}}extractTables(t){let e=[],r=/CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?["']?(\w+)["']?\s*\(([\s\S]*?)\);/gi,s;for(;(s=r.exec(t))!==null;){let o=s[1],a=s[2],f=this.parseColumns(a);e.push({name:o,columns:f});}let i=/ALTER\s+TABLE\s+["']?(\w+)["']?\s+ADD\s+(?:COLUMN\s+)?["']?(\w+)["']?\s+(\w+)/gi;for(;(s=i.exec(t))!==null;){let o=s[1],a=s[2],f=s[3],p=e.find(u=>u.name===o);p||(p={name:o,columns:[]},e.push(p)),p.columns.push({name:a,type:f,nullable:true,isPrimaryKey:false,isForeignKey:false});}return e}parseColumns(t){let e=[],r=t.split(",").map(s=>s.trim()).filter(s=>s&&!s.toUpperCase().startsWith("CONSTRAINT")&&!s.toUpperCase().startsWith("PRIMARY KEY")&&!s.toUpperCase().startsWith("FOREIGN KEY")&&!s.toUpperCase().startsWith("UNIQUE")&&!s.toUpperCase().startsWith("CHECK"));for(let s of r){let i=this.parseColumnDefinition(s);i&&e.push(i);}return e}parseColumnDefinition(t){let e=t.match(/^["']?(\w+)["']?\s+(\w+(?:\([^)]+\))?)/i);if(!e)return null;let[,r,s]=e,i=t.toUpperCase();return {name:r,type:s.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),r=e.match(/create_(\w+)_table/i);return r?r[1]:e.replace(".sql","")}};var P=class{extract(t){let e=[];return c__default.default.forEachChild(t,r=>{if(c__default.default.isImportDeclaration(r)){let s=this.parseImportDeclaration(r);s&&e.push(s);}}),e}parseImportDeclaration(t){let e=t.moduleSpecifier;if(!c__default.default.isStringLiteral(e))return null;let r=e.text,s=[],i=false,o=t.importClause?.isTypeOnly||false,a=t.importClause;if(!a)return {source:r,specifiers:[],isDefault:false,isTypeOnly:false};a.name&&(s.push(a.name.text),i=true);let f=a.namedBindings;if(f){if(c__default.default.isNamespaceImport(f))s.push(`* as ${f.name.text}`);else if(c__default.default.isNamedImports(f))for(let p of f.elements){let u=p.name.text,g=p.propertyName?.text;g?s.push(`${g} as ${u}`):s.push(u);}}return {source:r,specifiers:s,isDefault:i,isTypeOnly:o}}};var v=class{extract(t){let e=[];return c__default.default.forEachChild(t,r=>{let s=this.extractFromNode(r,t);e.push(...s);}),e}extractFromNode(t,e){let r=[];if(c__default.default.isFunctionDeclaration(t)&&this.hasExportModifier(t)&&r.push({name:t.name?.text||"anonymous",isDefault:this.hasDefaultModifier(t),isTypeOnly:false,kind:"function"}),c__default.default.isClassDeclaration(t)&&this.hasExportModifier(t)&&r.push({name:t.name?.text||"anonymous",isDefault:this.hasDefaultModifier(t),isTypeOnly:false,kind:"class"}),c__default.default.isVariableStatement(t)&&this.hasExportModifier(t))for(let s of t.declarationList.declarations)c__default.default.isIdentifier(s.name)&&r.push({name:s.name.text,isDefault:false,isTypeOnly:false,kind:"variable"});if(c__default.default.isTypeAliasDeclaration(t)&&this.hasExportModifier(t)&&r.push({name:t.name.text,isDefault:false,isTypeOnly:true,kind:"type"}),c__default.default.isInterfaceDeclaration(t)&&this.hasExportModifier(t)&&r.push({name:t.name.text,isDefault:false,isTypeOnly:true,kind:"interface"}),c__default.default.isExportAssignment(t)&&!t.isExportEquals){let s=this.getExportDefaultName(t,e);r.push({name:s,isDefault:true,isTypeOnly:false,kind:"variable"});}if(c__default.default.isExportDeclaration(t)){let s=t.exportClause;if(s&&c__default.default.isNamedExports(s))for(let i of s.elements)r.push({name:i.name.text,isDefault:false,isTypeOnly:t.isTypeOnly,kind:"variable"});}return r}hasExportModifier(t){return (c__default.default.canHaveModifiers(t)?c__default.default.getModifiers(t):void 0)?.some(r=>r.kind===c__default.default.SyntaxKind.ExportKeyword)||false}hasDefaultModifier(t){return (c__default.default.canHaveModifiers(t)?c__default.default.getModifiers(t):void 0)?.some(r=>r.kind===c__default.default.SyntaxKind.DefaultKeyword)||false}getExportDefaultName(t,e){let r=t.expression;if(c__default.default.isIdentifier(r))return r.text;if(c__default.default.isArrowFunction(r)||c__default.default.isFunctionExpression(r))return "default";if(c__default.default.isCallExpression(r)&&c__default.default.isIdentifier(r.expression)){let s=r.arguments[0];if(s&&c__default.default.isIdentifier(s))return s.text}return "default"}};var I=class{extract(t){let e=[],r=this.findPropsType(t);r&&e.push(...this.extractFromTypeNode(r,t));let s=this.findComponentFunction(t);return s&&e.push(...this.extractFromFunctionParams(s,t)),this.deduplicateProps(e)}findPropsType(t){let e;return c__default.default.forEachChild(t,r=>{c__default.default.isInterfaceDeclaration(r)&&r.name.text.endsWith("Props")&&(e=r),c__default.default.isTypeAliasDeclaration(r)&&r.name.text.endsWith("Props")&&(e=r.type);}),e}findComponentFunction(t){let e;return c__default.default.forEachChild(t,r=>{if(c__default.default.isFunctionDeclaration(r)&&this.isExported(r)&&(e=r),c__default.default.isVariableStatement(r)&&this.isExported(r))for(let s of r.declarationList.declarations)s.initializer&&(c__default.default.isArrowFunction(s.initializer)||c__default.default.isFunctionExpression(s.initializer))&&(e=s.initializer);}),e}extractFromTypeNode(t,e){let r=[];if(c__default.default.isInterfaceDeclaration(t)){for(let s of t.members){let i=this.extractMemberProp(s,e);i&&r.push(i);}return r}if(c__default.default.isTypeLiteralNode(t))for(let s of t.members){let i=this.extractMemberProp(s,e);i&&r.push(i);}if(c__default.default.isIntersectionTypeNode(t))for(let s of t.types)r.push(...this.extractFromTypeNode(s,e));return r}extractMemberProp(t,e){if(!c__default.default.isPropertySignature(t))return null;let r=t.name;if(!c__default.default.isIdentifier(r)&&!c__default.default.isStringLiteral(r))return null;let s=(c__default.default.isIdentifier(r),r.text),i=!t.questionToken,o=t.type?t.type.getText(e):"any";return {name:s,type:o,required:i}}extractFromFunctionParams(t,e){let r=[],s=t.parameters[0];if(!s)return r;if(c__default.default.isObjectBindingPattern(s.name))for(let i of s.name.elements)c__default.default.isBindingElement(i)&&c__default.default.isIdentifier(i.name)&&r.push({name:i.name.text,type:"unknown",required:!i.initializer,defaultValue:i.initializer?.getText(e)});return r}isExported(t){return (c__default.default.canHaveModifiers(t)?c__default.default.getModifiers(t):void 0)?.some(r=>r.kind===c__default.default.SyntaxKind.ExportKeyword)||false}deduplicateProps(t){let e=new Set;return t.filter(r=>e.has(r.name)?false:(e.add(r.name),true))}};function A(n){return n.replace(/([a-z])([A-Z])/g,"$1 $2").split(" ").filter(Boolean)}function $(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 B(n){return n.split("_").filter(Boolean)}function Pt(n){return n.split("-").filter(Boolean)}function rt(n){let t=new Set,e=n.split(/[-_]/);for(let r of e)A(r).forEach(i=>t.add(i.toLowerCase()));return [...t]}function W(n){let t=[],e=n.match(/[A-Z]{2,}/g);return e&&t.push(...e),t}function vt(n){let t=rt(n);return {camel:t.map((e,r)=>r===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 C={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 G(n){let t=n.toLowerCase();if(C[t])return C[t];let e=[];for(let[r,s]of Object.entries(C))(t.includes(r)||r.includes(t))&&e.push(...s);return [...new Set(e)]}function wt(n){return {...C,...n}}var w=class{constructor(t){this.customKoreanMap=t||{};}extract(t,e,r=[],s=[]){let i=new Set;this.extractFromName(t,i),this.extractFromPath(e,i);for(let a of r)this.extractFromName(a,i);for(let a of s)this.extractFromName(a,i);let o=[...i];for(let a of o)this.findKorean(a).forEach(p=>i.add(p));return [...i].filter(a=>a.length>1)}extractFromName(t,e){e.add(t.toLowerCase()),A(t).forEach(a=>e.add(a.toLowerCase())),$(t).forEach(a=>e.add(a.toLowerCase())),B(t).forEach(a=>e.add(a.toLowerCase())),W(t).forEach(a=>e.add(a.toLowerCase()));}extractFromPath(t,e){let r=new Set(["src","app","components","hooks","services","lib","utils","pages","api"]),s=t.replace(/\.[^/.]+$/,"").split("/").filter(i=>!r.has(i));for(let i of s)this.extractFromName(i,e);}findKorean(t){let e=this.customKoreanMap[t.toLowerCase()];return e||G(t)}};var b=class{constructor(t={},e=[".ts",".tsx",".js",".jsx"]){this.aliasMap=new Map(Object.entries(t)),this.extensions=e;}resolve(t,e,r){if(this.isExternalPackage(t))return null;let s=this.resolveAlias(t),i;if(s.startsWith("./")||s.startsWith("../")){let a=d__namespace.dirname(d__namespace.resolve(r,e));i=d__namespace.resolve(a,s);}else if(s!==t)i=d__namespace.resolve(r,s);else return null;let o=this.resolveWithExtensions(i);return o?d__namespace.relative(r,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,r]of this.aliasMap.entries()){if(t===e)return r;if(t.startsWith(e+"/"))return t.replace(e,r)}return t}resolveWithExtensions(t){if(x__namespace.existsSync(t))try{let e=x__namespace.statSync(t);if(e.isFile())return t;if(e.isDirectory())return this.findIndexFile(t)}catch{}for(let e of this.extensions){let r=t+e;if(x__namespace.existsSync(r))return r}return this.findIndexFile(t)}findIndexFile(t){for(let e of this.extensions){let r=d__namespace.join(t,`index${e}`);if(x__namespace.existsSync(r))return r}return null}};var S=class{constructor(t){let e={"@":"src","@/":"src/","~":"src","~/":"src/"};this.resolver=new b({...e,...t});}build(t,e){let r=new Map,s=new Set(t.map(i=>i.path));for(let i of t){let o=this.resolveCalls(i,e,s);r.set(i.path,{calls:o,calledBy:[]});}for(let[i,o]of r.entries())for(let a of o.calls){let f=r.get(a);f&&f.calledBy.push(i);}return r}resolveCalls(t,e,r){let s=[];for(let i of t.imports){if(i.isTypeOnly)continue;let o=this.resolver.resolve(i.source,t.path,e);o&&r.has(o)&&s.push(o);}return [...new Set(s)]}};function q(n,t){let e=`${n}:${t}`;return U__namespace.createHash("sha256").update(e).digest("hex").slice(0,16)}var z=class{constructor(t){this.config=t,this.tsParser=new y,this.sqlParser=new E,this.importExtractor=new P,this.exportExtractor=new v,this.propsExtractor=new I,this.keywordExtractor=new w(t.koreanKeywords),this.callGraphBuilder=new S;}async analyze(t){let e=Date.now(),r=[],s=await this.collectFiles(t);this.config.verbose&&console.log(`[metadata-plugin] Found ${s.length} files to analyze`);let i=[];for(let p of s)try{let u=await this.parseFile(p,t);u&&i.push(u);}catch(u){let g=u instanceof Error?u.message:"Unknown error";r.push(`${p}: ${g}`);}let o=this.callGraphBuilder.build(i,t),a=i.map(p=>this.createIndexItem(p,o)),f=this.calculateStats(a,r);return this.config.verbose&&(console.log(`[metadata-plugin] Analysis completed in ${Date.now()-e}ms`),console.log(`[metadata-plugin] Processed ${a.length} items`)),{projectId:this.config.projectId,items:a,stats:f,timestamp:new Date().toISOString()}}async collectFiles(t){let e=[];for(let r of this.config.include){let s=await glob.glob(r,{cwd:t,ignore:this.config.exclude,absolute:true});e.push(...s);}return [...new Set(e)]}async parseFile(t,e){let r=d__namespace.relative(e,t),s=this.determineFileType(r);if(!s)return null;let i=await F__namespace.readFile(t,"utf-8");if(d__namespace.extname(t)===".sql")return this.sqlParser.parse(i,r);let a=this.tsParser.parse(i,t),f=this.importExtractor.extract(a),p=this.exportExtractor.extract(a),u=s==="component"?this.propsExtractor.extract(a):void 0;return {path:r,type:s,name:this.extractName(r,p),imports:f,exports:p,props:u}}determineFileType(t){let e=t.replace(/\\/g,"/"),r=d__namespace.basename(e),s=d__namespace.extname(r);if(s===".sql"){for(let p of j)if(e.includes(p))return "table";return null}let i=k[r];if(i)return i;for(let[p,u]of Object.entries(M))if(e.includes(p))return u;let o=_(r);if(o)return o;let a=e.split("/");for(let p=a.length-2;p>=0;p--){let u=a[p].toLowerCase(),g=D[u];if(g)return g}if(L(r))return "component";let f=Object.entries(this.config.fileTypeMapping).sort(([p],[u])=>u.length-p.length);for(let[p,u]of f)if(O(p).test(e))return u;return a.includes("pages")&&(s===".tsx"||s===".ts"||s===".jsx"||s===".js")?"route":null}extractName(t,e){let r=e.find(i=>i.isDefault);if(r&&r.name!=="default")return r.name;let s=d__namespace.basename(t,d__namespace.extname(t));if(["index","page","layout","route"].includes(s)){let i=d__namespace.dirname(t),o=d__namespace.basename(i);return o!=="."?o:s}return s}createIndexItem(t,e){let r=e.get(t.path)||{calls:[],calledBy:[]},s=this.keywordExtractor.extract(t.name,t.path,t.exports.map(o=>o.name),t.props?.map(o=>o.name)),i=this.buildSearchText(t,s);return {id:q(this.config.projectId,t.path),projectId:this.config.projectId,type:t.type,name:t.name,path:t.path,keywords:s,searchText:i,calls:r.calls,calledBy:r.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(s=>s.name),...t.props?.map(s=>s.name)||[]].join(" ").toLowerCase()}calculateStats(t,e){let r={route:0,component:0,hook:0,service:0,api:0,table:0,utility:0};for(let s of t)r[s.type]++;return {totalFiles:t.length,byType:r,parseErrors:e}}};var J=class{constructor(t){this.config=t;}async write(t,e){let r=d__namespace.dirname(e);await F__namespace.mkdir(r,{recursive:true});let s=this.formatOutput(t);await F__namespace.writeFile(e,s,"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 R=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 r={projectId:this.config.projectId,timestamp:t.timestamp,items:t.items,stats:t.stats},s=null;for(let i=0;i<this.maxRetries;i++)try{await this.sendRequest(e.endpoint,r,e.headers);return}catch(o){s=o instanceof Error?o:new Error(String(o)),this.config.verbose&&console.warn(`[metadata-plugin] API send attempt ${i+1} failed:`,s.message),i<this.maxRetries-1&&await this.delay(this.retryDelay*(i+1));}throw new Error(`Failed to send metadata after ${this.maxRetries} attempts: ${s?.message}`)}async sendRequest(t,e,r){let s=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",...r},body:JSON.stringify(e)});if(!s.ok){let i=await s.text();throw new Error(`API request failed: ${s.status} ${i}`)}}delay(t){return new Promise(e=>setTimeout(e,t))}},H=class extends R{async send(t){let e=this.config.output.api;if(!e?.enabled||!e.endpoint)return;let r=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})),s=500;for(let i=0;i<r.length;i+=s){let o=r.slice(i,i+s),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=R;exports.B=H;exports.a=V;exports.b=tt;exports.c=et;exports.d=it;exports.e=nt;exports.f=y;exports.g=E;exports.h=P;exports.i=v;exports.j=I;exports.k=A;exports.l=$;exports.m=B;exports.n=Pt;exports.o=rt;exports.p=W;exports.q=vt;exports.r=C;exports.s=G;exports.t=wt;exports.u=w;exports.v=b;exports.w=S;exports.x=q;exports.y=z;exports.z=J;
@@ -0,0 +1,2 @@
1
+ import c from'typescript';import*as d from'path';import*as x from'fs';import*as U from'crypto';import {glob}from'glob';import*as F from'fs/promises';var D={components:"component",component:"component",ui:"component",widgets:"component",widget:"component",elements:"component",hooks:"hook",hook:"hook",composables:"hook",services:"service",service:"service",api:"service",utils:"utility",util:"utility",utilities:"utility",utility:"utility",lib:"utility",libs:"utility",helpers:"utility",helper:"utility",common:"utility",shared:"utility"},k={"page.tsx":"route","page.ts":"route","page.jsx":"route","page.js":"route","layout.tsx":"route","layout.ts":"route","layout.jsx":"route","layout.js":"route","route.tsx":"api","route.ts":"api","route.js":"api"},M={"/api/":"api"},j=["supabase/migrations","prisma/migrations","migrations","db/migrations","database/migrations"],Q=[{pattern:/^use[A-Z][a-zA-Z0-9]*\.(ts|tsx|js|jsx)$/,type:"hook",description:"React hook (use*.ts)"},{pattern:/\.(service|Service)\.(ts|js)$/,type:"service",description:"Service file (*.service.ts)"},{pattern:/[A-Z][a-zA-Z0-9]*Service\.(ts|js)$/,type:"service",description:"Service class file (*Service.ts)"},{pattern:/\.(action|actions|api)\.(ts|js)$/,type:"api",description:"API/Action file (*.action.ts, *.api.ts)"},{pattern:/\.(util|utils|helper|helpers)\.(ts|js)$/,type:"utility",description:"Utility file (*.util.ts, *.helper.ts)"},{pattern:/\.component\.(tsx|jsx)$/,type:"component",description:"Component file (*.component.tsx)"}];function N(n){return n.replace(/\.(tsx|jsx|ts|js)$/,"")}function X(n){return N(n).split(/[-_]/).flatMap(e=>e.split(/(?=[A-Z])/).filter(r=>r.length>0)).map(e=>e.toLowerCase()).filter(e=>e.length>0)}function _(n){for(let s of Q)if(s.pattern.test(n))return s.type;let t=X(n);N(n);if(t[0]==="use"&&t.length>1)return "hook";if(t[t.length-1]==="service")return "service";let r=t[t.length-1];return ["util","utils","helper","helpers"].includes(r)?"utility":["action","actions","api"].includes(r)?"api":r==="component"?"component":null}function L(n){if(!n.match(/\.(tsx|jsx)$/))return false;let e=N(n);return !["index","page","layout","route","loading","error","not-found","template"].includes(e.toLowerCase())}var V={"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","src/app/**/page.tsx":"route","src/app/**/page.ts":"route","src/app/**/layout.tsx":"route","src/app/**/layout.ts":"route","src/app/**/route.tsx":"api","src/app/**/route.ts":"api","src/app/api/**/*.ts":"api","src/app/api/**/*.tsx":"api","pages/**/*.tsx":"route","pages/**/*.ts":"route","pages/api/**/*.ts":"api","src/pages/**/*.tsx":"route","src/pages/**/*.ts":"route","src/pages/api/**/*.ts":"api","supabase/migrations/*.sql":"table","prisma/migrations/**/*.sql":"table"},tt=["app/**/*.{ts,tsx}","pages/**/*.{ts,tsx}","components/**/*.{ts,tsx}","hooks/**/*.{ts,tsx}","services/**/*.ts","lib/**/*.ts","utils/**/*.ts","src/**/*.{ts,tsx}","supabase/migrations/*.sql"],et=["**/node_modules/**","**/.next/**","**/dist/**","**/*.test.{ts,tsx}","**/*.spec.{ts,tsx}","**/__tests__/**","**/*.d.ts","**/coverage/**"];function it(n={}){return {projectId:n.projectId||"default",include:n.include||tt,exclude:n.exclude||et,fileTypeMapping:{...V,...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 nt(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 O(n){let t=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"{{GLOBSTAR}}").replace(/\*/g,"[^/]*").replace(/{{GLOBSTAR}}/g,".*").replace(/\{([^}]+)\}/g,(e,r)=>`(${r.split(",").map(i=>i.trim()).join("|")})`);return new RegExp(`^${t}$`)}var y=class{constructor(){this.compilerOptions={target:c.ScriptTarget.ESNext,module:c.ModuleKind.ESNext,jsx:c.JsxEmit.React,esModuleInterop:true,allowSyntheticDefaultImports:true,strict:false};}parse(t,e){return c.createSourceFile(e,t,this.compilerOptions.target,true,this.getScriptKind(e))}getScriptKind(t){let e=t.toLowerCase();return e.endsWith(".tsx")?c.ScriptKind.TSX:e.endsWith(".ts")?c.ScriptKind.TS:e.endsWith(".jsx")?c.ScriptKind.JSX:e.endsWith(".js")?c.ScriptKind.JS:c.ScriptKind.Unknown}traverse(t,e){e(t)!==false&&c.forEachChild(t,s=>this.traverse(s,e));}findNodes(t,e){let r=[];return this.traverse(t,s=>{e(s)&&r.push(s);}),r}getNodeText(t,e){return t.getText(e)}getJSDocComment(t){let e=c.getJSDocCommentsAndTags(t);if(e.length!==0)return e.filter(c.isJSDoc).map(r=>r.comment).filter(Boolean).join(`
2
+ `)}};new y;var E=class{parse(t,e){let r=this.extractTables(t),s=r[0]?.name||this.extractNameFromPath(e);return {path:e,type:"table",name:s,imports:[],exports:r.map(i=>({name:i.name,isDefault:false,isTypeOnly:false,kind:"variable"})),metadata:{tableName:s,columns:r[0]?.columns||[]}}}extractTables(t){let e=[],r=/CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?["']?(\w+)["']?\s*\(([\s\S]*?)\);/gi,s;for(;(s=r.exec(t))!==null;){let o=s[1],a=s[2],f=this.parseColumns(a);e.push({name:o,columns:f});}let i=/ALTER\s+TABLE\s+["']?(\w+)["']?\s+ADD\s+(?:COLUMN\s+)?["']?(\w+)["']?\s+(\w+)/gi;for(;(s=i.exec(t))!==null;){let o=s[1],a=s[2],f=s[3],p=e.find(u=>u.name===o);p||(p={name:o,columns:[]},e.push(p)),p.columns.push({name:a,type:f,nullable:true,isPrimaryKey:false,isForeignKey:false});}return e}parseColumns(t){let e=[],r=t.split(",").map(s=>s.trim()).filter(s=>s&&!s.toUpperCase().startsWith("CONSTRAINT")&&!s.toUpperCase().startsWith("PRIMARY KEY")&&!s.toUpperCase().startsWith("FOREIGN KEY")&&!s.toUpperCase().startsWith("UNIQUE")&&!s.toUpperCase().startsWith("CHECK"));for(let s of r){let i=this.parseColumnDefinition(s);i&&e.push(i);}return e}parseColumnDefinition(t){let e=t.match(/^["']?(\w+)["']?\s+(\w+(?:\([^)]+\))?)/i);if(!e)return null;let[,r,s]=e,i=t.toUpperCase();return {name:r,type:s.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),r=e.match(/create_(\w+)_table/i);return r?r[1]:e.replace(".sql","")}};var P=class{extract(t){let e=[];return c.forEachChild(t,r=>{if(c.isImportDeclaration(r)){let s=this.parseImportDeclaration(r);s&&e.push(s);}}),e}parseImportDeclaration(t){let e=t.moduleSpecifier;if(!c.isStringLiteral(e))return null;let r=e.text,s=[],i=false,o=t.importClause?.isTypeOnly||false,a=t.importClause;if(!a)return {source:r,specifiers:[],isDefault:false,isTypeOnly:false};a.name&&(s.push(a.name.text),i=true);let f=a.namedBindings;if(f){if(c.isNamespaceImport(f))s.push(`* as ${f.name.text}`);else if(c.isNamedImports(f))for(let p of f.elements){let u=p.name.text,g=p.propertyName?.text;g?s.push(`${g} as ${u}`):s.push(u);}}return {source:r,specifiers:s,isDefault:i,isTypeOnly:o}}};var v=class{extract(t){let e=[];return c.forEachChild(t,r=>{let s=this.extractFromNode(r,t);e.push(...s);}),e}extractFromNode(t,e){let r=[];if(c.isFunctionDeclaration(t)&&this.hasExportModifier(t)&&r.push({name:t.name?.text||"anonymous",isDefault:this.hasDefaultModifier(t),isTypeOnly:false,kind:"function"}),c.isClassDeclaration(t)&&this.hasExportModifier(t)&&r.push({name:t.name?.text||"anonymous",isDefault:this.hasDefaultModifier(t),isTypeOnly:false,kind:"class"}),c.isVariableStatement(t)&&this.hasExportModifier(t))for(let s of t.declarationList.declarations)c.isIdentifier(s.name)&&r.push({name:s.name.text,isDefault:false,isTypeOnly:false,kind:"variable"});if(c.isTypeAliasDeclaration(t)&&this.hasExportModifier(t)&&r.push({name:t.name.text,isDefault:false,isTypeOnly:true,kind:"type"}),c.isInterfaceDeclaration(t)&&this.hasExportModifier(t)&&r.push({name:t.name.text,isDefault:false,isTypeOnly:true,kind:"interface"}),c.isExportAssignment(t)&&!t.isExportEquals){let s=this.getExportDefaultName(t,e);r.push({name:s,isDefault:true,isTypeOnly:false,kind:"variable"});}if(c.isExportDeclaration(t)){let s=t.exportClause;if(s&&c.isNamedExports(s))for(let i of s.elements)r.push({name:i.name.text,isDefault:false,isTypeOnly:t.isTypeOnly,kind:"variable"});}return r}hasExportModifier(t){return (c.canHaveModifiers(t)?c.getModifiers(t):void 0)?.some(r=>r.kind===c.SyntaxKind.ExportKeyword)||false}hasDefaultModifier(t){return (c.canHaveModifiers(t)?c.getModifiers(t):void 0)?.some(r=>r.kind===c.SyntaxKind.DefaultKeyword)||false}getExportDefaultName(t,e){let r=t.expression;if(c.isIdentifier(r))return r.text;if(c.isArrowFunction(r)||c.isFunctionExpression(r))return "default";if(c.isCallExpression(r)&&c.isIdentifier(r.expression)){let s=r.arguments[0];if(s&&c.isIdentifier(s))return s.text}return "default"}};var I=class{extract(t){let e=[],r=this.findPropsType(t);r&&e.push(...this.extractFromTypeNode(r,t));let s=this.findComponentFunction(t);return s&&e.push(...this.extractFromFunctionParams(s,t)),this.deduplicateProps(e)}findPropsType(t){let e;return c.forEachChild(t,r=>{c.isInterfaceDeclaration(r)&&r.name.text.endsWith("Props")&&(e=r),c.isTypeAliasDeclaration(r)&&r.name.text.endsWith("Props")&&(e=r.type);}),e}findComponentFunction(t){let e;return c.forEachChild(t,r=>{if(c.isFunctionDeclaration(r)&&this.isExported(r)&&(e=r),c.isVariableStatement(r)&&this.isExported(r))for(let s of r.declarationList.declarations)s.initializer&&(c.isArrowFunction(s.initializer)||c.isFunctionExpression(s.initializer))&&(e=s.initializer);}),e}extractFromTypeNode(t,e){let r=[];if(c.isInterfaceDeclaration(t)){for(let s of t.members){let i=this.extractMemberProp(s,e);i&&r.push(i);}return r}if(c.isTypeLiteralNode(t))for(let s of t.members){let i=this.extractMemberProp(s,e);i&&r.push(i);}if(c.isIntersectionTypeNode(t))for(let s of t.types)r.push(...this.extractFromTypeNode(s,e));return r}extractMemberProp(t,e){if(!c.isPropertySignature(t))return null;let r=t.name;if(!c.isIdentifier(r)&&!c.isStringLiteral(r))return null;let s=(c.isIdentifier(r),r.text),i=!t.questionToken,o=t.type?t.type.getText(e):"any";return {name:s,type:o,required:i}}extractFromFunctionParams(t,e){let r=[],s=t.parameters[0];if(!s)return r;if(c.isObjectBindingPattern(s.name))for(let i of s.name.elements)c.isBindingElement(i)&&c.isIdentifier(i.name)&&r.push({name:i.name.text,type:"unknown",required:!i.initializer,defaultValue:i.initializer?.getText(e)});return r}isExported(t){return (c.canHaveModifiers(t)?c.getModifiers(t):void 0)?.some(r=>r.kind===c.SyntaxKind.ExportKeyword)||false}deduplicateProps(t){let e=new Set;return t.filter(r=>e.has(r.name)?false:(e.add(r.name),true))}};function A(n){return n.replace(/([a-z])([A-Z])/g,"$1 $2").split(" ").filter(Boolean)}function $(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 B(n){return n.split("_").filter(Boolean)}function Pt(n){return n.split("-").filter(Boolean)}function rt(n){let t=new Set,e=n.split(/[-_]/);for(let r of e)A(r).forEach(i=>t.add(i.toLowerCase()));return [...t]}function W(n){let t=[],e=n.match(/[A-Z]{2,}/g);return e&&t.push(...e),t}function vt(n){let t=rt(n);return {camel:t.map((e,r)=>r===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 C={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 G(n){let t=n.toLowerCase();if(C[t])return C[t];let e=[];for(let[r,s]of Object.entries(C))(t.includes(r)||r.includes(t))&&e.push(...s);return [...new Set(e)]}function wt(n){return {...C,...n}}var w=class{constructor(t){this.customKoreanMap=t||{};}extract(t,e,r=[],s=[]){let i=new Set;this.extractFromName(t,i),this.extractFromPath(e,i);for(let a of r)this.extractFromName(a,i);for(let a of s)this.extractFromName(a,i);let o=[...i];for(let a of o)this.findKorean(a).forEach(p=>i.add(p));return [...i].filter(a=>a.length>1)}extractFromName(t,e){e.add(t.toLowerCase()),A(t).forEach(a=>e.add(a.toLowerCase())),$(t).forEach(a=>e.add(a.toLowerCase())),B(t).forEach(a=>e.add(a.toLowerCase())),W(t).forEach(a=>e.add(a.toLowerCase()));}extractFromPath(t,e){let r=new Set(["src","app","components","hooks","services","lib","utils","pages","api"]),s=t.replace(/\.[^/.]+$/,"").split("/").filter(i=>!r.has(i));for(let i of s)this.extractFromName(i,e);}findKorean(t){let e=this.customKoreanMap[t.toLowerCase()];return e||G(t)}};var b=class{constructor(t={},e=[".ts",".tsx",".js",".jsx"]){this.aliasMap=new Map(Object.entries(t)),this.extensions=e;}resolve(t,e,r){if(this.isExternalPackage(t))return null;let s=this.resolveAlias(t),i;if(s.startsWith("./")||s.startsWith("../")){let a=d.dirname(d.resolve(r,e));i=d.resolve(a,s);}else if(s!==t)i=d.resolve(r,s);else return null;let o=this.resolveWithExtensions(i);return o?d.relative(r,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,r]of this.aliasMap.entries()){if(t===e)return r;if(t.startsWith(e+"/"))return t.replace(e,r)}return t}resolveWithExtensions(t){if(x.existsSync(t))try{let e=x.statSync(t);if(e.isFile())return t;if(e.isDirectory())return this.findIndexFile(t)}catch{}for(let e of this.extensions){let r=t+e;if(x.existsSync(r))return r}return this.findIndexFile(t)}findIndexFile(t){for(let e of this.extensions){let r=d.join(t,`index${e}`);if(x.existsSync(r))return r}return null}};var S=class{constructor(t){let e={"@":"src","@/":"src/","~":"src","~/":"src/"};this.resolver=new b({...e,...t});}build(t,e){let r=new Map,s=new Set(t.map(i=>i.path));for(let i of t){let o=this.resolveCalls(i,e,s);r.set(i.path,{calls:o,calledBy:[]});}for(let[i,o]of r.entries())for(let a of o.calls){let f=r.get(a);f&&f.calledBy.push(i);}return r}resolveCalls(t,e,r){let s=[];for(let i of t.imports){if(i.isTypeOnly)continue;let o=this.resolver.resolve(i.source,t.path,e);o&&r.has(o)&&s.push(o);}return [...new Set(s)]}};function q(n,t){let e=`${n}:${t}`;return U.createHash("sha256").update(e).digest("hex").slice(0,16)}var z=class{constructor(t){this.config=t,this.tsParser=new y,this.sqlParser=new E,this.importExtractor=new P,this.exportExtractor=new v,this.propsExtractor=new I,this.keywordExtractor=new w(t.koreanKeywords),this.callGraphBuilder=new S;}async analyze(t){let e=Date.now(),r=[],s=await this.collectFiles(t);this.config.verbose&&console.log(`[metadata-plugin] Found ${s.length} files to analyze`);let i=[];for(let p of s)try{let u=await this.parseFile(p,t);u&&i.push(u);}catch(u){let g=u instanceof Error?u.message:"Unknown error";r.push(`${p}: ${g}`);}let o=this.callGraphBuilder.build(i,t),a=i.map(p=>this.createIndexItem(p,o)),f=this.calculateStats(a,r);return this.config.verbose&&(console.log(`[metadata-plugin] Analysis completed in ${Date.now()-e}ms`),console.log(`[metadata-plugin] Processed ${a.length} items`)),{projectId:this.config.projectId,items:a,stats:f,timestamp:new Date().toISOString()}}async collectFiles(t){let e=[];for(let r of this.config.include){let s=await glob(r,{cwd:t,ignore:this.config.exclude,absolute:true});e.push(...s);}return [...new Set(e)]}async parseFile(t,e){let r=d.relative(e,t),s=this.determineFileType(r);if(!s)return null;let i=await F.readFile(t,"utf-8");if(d.extname(t)===".sql")return this.sqlParser.parse(i,r);let a=this.tsParser.parse(i,t),f=this.importExtractor.extract(a),p=this.exportExtractor.extract(a),u=s==="component"?this.propsExtractor.extract(a):void 0;return {path:r,type:s,name:this.extractName(r,p),imports:f,exports:p,props:u}}determineFileType(t){let e=t.replace(/\\/g,"/"),r=d.basename(e),s=d.extname(r);if(s===".sql"){for(let p of j)if(e.includes(p))return "table";return null}let i=k[r];if(i)return i;for(let[p,u]of Object.entries(M))if(e.includes(p))return u;let o=_(r);if(o)return o;let a=e.split("/");for(let p=a.length-2;p>=0;p--){let u=a[p].toLowerCase(),g=D[u];if(g)return g}if(L(r))return "component";let f=Object.entries(this.config.fileTypeMapping).sort(([p],[u])=>u.length-p.length);for(let[p,u]of f)if(O(p).test(e))return u;return a.includes("pages")&&(s===".tsx"||s===".ts"||s===".jsx"||s===".js")?"route":null}extractName(t,e){let r=e.find(i=>i.isDefault);if(r&&r.name!=="default")return r.name;let s=d.basename(t,d.extname(t));if(["index","page","layout","route"].includes(s)){let i=d.dirname(t),o=d.basename(i);return o!=="."?o:s}return s}createIndexItem(t,e){let r=e.get(t.path)||{calls:[],calledBy:[]},s=this.keywordExtractor.extract(t.name,t.path,t.exports.map(o=>o.name),t.props?.map(o=>o.name)),i=this.buildSearchText(t,s);return {id:q(this.config.projectId,t.path),projectId:this.config.projectId,type:t.type,name:t.name,path:t.path,keywords:s,searchText:i,calls:r.calls,calledBy:r.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(s=>s.name),...t.props?.map(s=>s.name)||[]].join(" ").toLowerCase()}calculateStats(t,e){let r={route:0,component:0,hook:0,service:0,api:0,table:0,utility:0};for(let s of t)r[s.type]++;return {totalFiles:t.length,byType:r,parseErrors:e}}};var J=class{constructor(t){this.config=t;}async write(t,e){let r=d.dirname(e);await F.mkdir(r,{recursive:true});let s=this.formatOutput(t);await F.writeFile(e,s,"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 R=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 r={projectId:this.config.projectId,timestamp:t.timestamp,items:t.items,stats:t.stats},s=null;for(let i=0;i<this.maxRetries;i++)try{await this.sendRequest(e.endpoint,r,e.headers);return}catch(o){s=o instanceof Error?o:new Error(String(o)),this.config.verbose&&console.warn(`[metadata-plugin] API send attempt ${i+1} failed:`,s.message),i<this.maxRetries-1&&await this.delay(this.retryDelay*(i+1));}throw new Error(`Failed to send metadata after ${this.maxRetries} attempts: ${s?.message}`)}async sendRequest(t,e,r){let s=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",...r},body:JSON.stringify(e)});if(!s.ok){let i=await s.text();throw new Error(`API request failed: ${s.status} ${i}`)}}delay(t){return new Promise(e=>setTimeout(e,t))}},H=class extends R{async send(t){let e=this.config.output.api;if(!e?.enabled||!e.endpoint)return;let r=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})),s=500;for(let i=0;i<r.length;i+=s){let o=r.slice(i,i+s),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{R as A,H as B,V as a,tt as b,et as c,it as d,nt as e,y as f,E as g,P as h,v as i,I as j,A as k,$ as l,B as m,Pt as n,rt as o,W as p,vt as q,C as r,G as s,wt as t,w as u,b as v,S as w,q as x,z as y,J as z};
@@ -0,0 +1 @@
1
+ 'use strict';var l=require('fs'),c=require('path'),dotenv=require('dotenv');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 l__namespace=/*#__PURE__*/_interopNamespace(l);var c__namespace=/*#__PURE__*/_interopNamespace(c);function f(o,e){let n=e||process.env.NODE_ENV||"development",d=[".env",".env.local",`.env.${n}`,`.env.${n}.local`],s=[],t={};for(let i of d){let r=c__namespace.join(o,i);if(l__namespace.existsSync(r)){let a=dotenv.config({path:r,override:true});a.parsed&&(s.push(i),Object.assign(t,a.parsed));}}return {loaded:s,variables:t}}function p(o,e=false){let{loaded:n}=f(o);e&&n.length>0&&console.log(`\u{1F4E6} Loaded env files: ${n.join(", ")}`);}exports.a=f;exports.b=p;
package/dist/cli.cjs CHANGED
@@ -1,48 +1,50 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var chunkXR3EVOXW_cjs=require('./chunk-XR3EVOXW.cjs'),chunkGHNW3BJ2_cjs=require('./chunk-GHNW3BJ2.cjs'),util=require('util'),m=require('path'),b=require('fs/promises'),D=require('readline');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 m__namespace=/*#__PURE__*/_interopNamespace(m);var b__namespace=/*#__PURE__*/_interopNamespace(b);var D__namespace=/*#__PURE__*/_interopNamespace(D);async function oe(e){let a=[{file:"pnpm-lock.yaml",manager:"pnpm"},{file:"yarn.lock",manager:"yarn"},{file:"package-lock.json",manager:"npm"}];for(let{file:t,manager:o}of a)try{return await b__namespace.access(m__namespace.join(e,t)),o}catch{}return "npm"}async function ae(e){let a={};try{let o=await b__namespace.readFile(m__namespace.join(e,"package.json"),"utf-8");a=JSON.parse(o);}catch{return "unknown"}let t={...a.dependencies||{},...a.devDependencies||{}};return t.next?await v(m__namespace.join(e,"app"))||await v(m__namespace.join(e,"src","app"))?"nextjs-app":"nextjs-pages":t.vite?"vite":t["react-scripts"]?"cra":t.express||t.fastify||t.koa?"node":"unknown"}async function U(e){let[a,t]=await Promise.all([ae(e),oe(e)]),o=await se(m__namespace.join(e,"tsconfig.json")),s=await v(m__namespace.join(e,"src")),n=["app","pages","components","hooks","services","lib","utils","api","src/app","src/pages","src/components","src/hooks","src/services","src/lib","src/utils"],c=[];for(let i of n)await v(m__namespace.join(e,i))&&c.push(i);let r=await v(m__namespace.join(e,"prisma")),g=await v(m__namespace.join(e,"supabase"));return {type:a,packageManager:t,hasTypescript:o,hasSrc:s,existingFolders:c,hasPrisma:r,hasSupabase:g}}async function se(e){try{return (await b__namespace.stat(e)).isFile()}catch{return false}}async function v(e){try{return (await b__namespace.stat(e)).isDirectory()}catch{return false}}function L(e){return {"nextjs-app":"Next.js (App Router)","nextjs-pages":"Next.js (Pages Router)",vite:"Vite + React",cra:"Create React App",node:"Node.js Backend",unknown:"Unknown"}[e]}var _=D__namespace.createInterface({input:process.stdin,output:process.stdout});function y(e){return new Promise(a=>{_.question(e,a);})}function O(){_.close();}async function F(e){let a=[{key:"1",type:"nextjs-app",label:"Next.js (App Router)"},{key:"2",type:"nextjs-pages",label:"Next.js (Pages Router)"},{key:"3",type:"vite",label:"Vite + React"},{key:"4",type:"cra",label:"Create React App"},{key:"5",type:"node",label:"Node.js Backend"}],t=a.findIndex(r=>r.type===e),o=t>=0?a[t].key:"1";console.log(`
3
- \u{1F4E6} \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(r=>{let i=r.type===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.label}${i}`);});let n=(await y(`
4
- \uC120\uD0DD [${o}]: `)).trim()||o;return a.find(r=>r.key===n)?.type||e}async function M(e){let a=[{key:"1",manager:"npm"},{key:"2",manager:"yarn"},{key:"3",manager:"pnpm"}],t=a.findIndex(r=>r.manager===e),o=t>=0?a[t].key:"1";console.log(`
5
- \u{1F4E6} \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(r=>{let i=r.manager===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.manager}${i}`);});let n=(await y(`
6
- \uC120\uD0DD [${o}]: `)).trim()||o;return a.find(r=>r.key===n)?.manager||e}async function B(e){if(e==="node"||e==="unknown")return false;let a=e.startsWith("nextjs")?"next.config":"vite.config";return console.log(`
7
- \u{1F527} ${a} \uD30C\uC77C\uC5D0 metadatafy \uD50C\uB7EC\uADF8\uC778\uC744 \uC790\uB3D9\uC73C\uB85C \uCD94\uAC00\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."),(await y(`
8
- \uCD94\uAC00\uD560\uAE4C\uC694? [Y/n]: `)).trim().toLowerCase()!=="n"}async function K(){return console.log(`
9
- \u2601\uFE0F API \uC5D4\uB4DC\uD3EC\uC778\uD2B8\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC804\uC1A1\uD560\uAE4C\uC694?`),console.log(" \uBE48\uCE78\uC73C\uB85C \uB450\uBA74 \uD30C\uC77C\uB9CC \uC0DD\uC131\uB429\uB2C8\uB2E4."),(await y(`
10
- API URL (\uC120\uD0DD\uC0AC\uD56D): `)).trim()||null}async function W(e,a=true){let s=(await y(`${e} ${a?"[Y/n]":"[y/N]"}: `)).trim().toLowerCase();return s===""?a:s==="y"||s==="yes"}async function V(){return console.log(`
11
- \u{1F5C4}\uFE0F Supabase\uC5D0 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC790\uB3D9 \uC800\uC7A5\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC5C5\uB85C\uB4DC\uB429\uB2C8\uB2E4."),(await y(`
12
- Supabase \uC5F0\uB3D9 \uC124\uC815? [y/N]: `)).trim().toLowerCase()==="y"}async function J(){console.log(`
13
- \u{1F527} Supabase \uC124\uC815`),console.log(`Settings > API\uC5D0\uC11C \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
14
- `),console.log("\u{1F4A1} \uD658\uACBD\uBCC0\uC218 \uC774\uB984\uC744 \uC785\uB825\uD558\uBA74 ${VAR} \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5\uB429\uB2C8\uB2E4."),console.log(" \uC608: SUPABASE_URL \u2192 ${SUPABASE_URL}\n");let e=await y("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),a=await y("Service Role Key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: "),t=await y("\uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: "),o=e.trim()||"SUPABASE_URL",s=a.trim()||"SUPABASE_SERVICE_ROLE_KEY",n=t.trim()||"project_metadata";return {url:`\${${o}}`,serviceRoleKey:`\${${s}}`,tableName:n}}function ne(e){let{projectType:a,projectInfo:t}=e,o=[],s=t.hasTypescript?"{ts,tsx}":"{js,jsx}";switch(a){case "nextjs-app":t.hasSrc?o.push(`src/app/**/*.${s}`):o.push(`app/**/*.${s}`),o.push(`components/**/*.${s}`),o.push(`hooks/**/*.${s}`),o.push(`lib/**/*.${s}`);break;case "nextjs-pages":t.hasSrc?o.push(`src/pages/**/*.${s}`):o.push(`pages/**/*.${s}`),o.push(`components/**/*.${s}`),o.push(`hooks/**/*.${s}`),o.push(`lib/**/*.${s}`);break;case "vite":case "cra":o.push(`src/**/*.${s}`);break;case "node":o.push(`src/**/*.${t.hasTypescript?"ts":"js"}`),o.push(`routes/**/*.${t.hasTypescript?"ts":"js"}`),o.push(`controllers/**/*.${t.hasTypescript?"ts":"js"}`);break;default:o.push(`src/**/*.${s}`);}return t.hasPrisma&&o.push("prisma/migrations/**/*.sql"),t.hasSupabase&&o.push("supabase/migrations/*.sql"),o}async function z(e,a,t){let o=m__namespace.join(e,"metadata.config.json"),s={projectId:a,include:ne(t),exclude:["**/node_modules/**","**/.next/**","**/dist/**","**/build/**","**/*.test.{ts,tsx,js,jsx}","**/*.spec.{ts,tsx,js,jsx}","**/__tests__/**"],output:{file:{enabled:true,path:"project-metadata.json"},api:{enabled:!!t.apiEndpoint,endpoint:t.apiEndpoint||""},...t.supabase&&{database:{enabled:true,provider:"supabase",supabase:{url:t.supabase.url,serviceRoleKey:t.supabase.serviceRoleKey,tableName:t.supabase.tableName,fields:{projectId:"project_id",metadata:"metadata",createdAt:"created_at",updatedAt:"updated_at"}}}}},koreanKeywords:{},verbose:false};return await b__namespace.writeFile(o,JSON.stringify(s,null,2)),o}async function Y(e){let a=["vite.config.ts","vite.config.js","vite.config.mts","vite.config.mjs"];for(let t of a){let o=m__namespace.join(e,t);try{let s=await b__namespace.readFile(o,"utf-8");if(s.includes("metadatafy"))return !0;let n=`import metadatafy from 'metadatafy/vite';
15
- `;return s.includes("from 'vite'")?s=s.replace(/^(import .+ from ['"]vite['"];?\n)/m,`$1${n}`):s=n+s,s.includes("plugins:")?s=s.replace(/plugins:\s*\[/,`plugins: [
16
- metadatafy(),`):s.includes("defineConfig(")&&(s=s.replace(/defineConfig\(\{/,`defineConfig({
17
- plugins: [metadatafy()],`)),await b__namespace.writeFile(o,s),!0}catch{}}return false}async function q(e){let a=["next.config.ts","next.config.mjs","next.config.js"];for(let t of a){let o=m__namespace.join(e,t);try{let s=await b__namespace.readFile(o,"utf-8");if(s.includes("metadatafy")||s.includes("withMetadatafy"))return !0;let n=t.endsWith(".ts");return s=(t.endsWith(".mjs")||n?`import { withMetadatafy } from 'metadatafy/next';
2
+ 'use strict';var chunkXR3EVOXW_cjs=require('./chunk-XR3EVOXW.cjs'),chunkECJ6WDN5_cjs=require('./chunk-ECJ6WDN5.cjs'),chunkZAACVJBX_cjs=require('./chunk-ZAACVJBX.cjs'),util=require('util'),f=require('path'),m=require('fs/promises'),_=require('readline');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 f__namespace=/*#__PURE__*/_interopNamespace(f);var m__namespace=/*#__PURE__*/_interopNamespace(m);var ___namespace=/*#__PURE__*/_interopNamespace(_);async function oe(e){let s=[{file:"pnpm-lock.yaml",manager:"pnpm"},{file:"yarn.lock",manager:"yarn"},{file:"package-lock.json",manager:"npm"}];for(let{file:t,manager:a}of s)try{return await m__namespace.access(f__namespace.join(e,t)),a}catch{}return "npm"}async function ae(e){let s={};try{let a=await m__namespace.readFile(f__namespace.join(e,"package.json"),"utf-8");s=JSON.parse(a);}catch{return "unknown"}let t={...s.dependencies||{},...s.devDependencies||{}};return t.next?await S(f__namespace.join(e,"app"))||await S(f__namespace.join(e,"src","app"))?"nextjs-app":"nextjs-pages":t.vite?"vite":t["react-scripts"]?"cra":t.express||t.fastify||t.koa?"node":"unknown"}async function D(e){let[s,t]=await Promise.all([ae(e),oe(e)]),a=await se(f__namespace.join(e,"tsconfig.json")),o=await S(f__namespace.join(e,"src")),n=["app","pages","components","hooks","services","lib","utils","api","src/app","src/pages","src/components","src/hooks","src/services","src/lib","src/utils"],i=[];for(let c of n)await S(f__namespace.join(e,c))&&i.push(c);let r=await S(f__namespace.join(e,"prisma")),u=await S(f__namespace.join(e,"supabase"));return {type:s,packageManager:t,hasTypescript:a,hasSrc:o,existingFolders:i,hasPrisma:r,hasSupabase:u}}async function se(e){try{return (await m__namespace.stat(e)).isFile()}catch{return false}}async function S(e){try{return (await m__namespace.stat(e)).isDirectory()}catch{return false}}function O(e){return {"nextjs-app":"Next.js (App Router)","nextjs-pages":"Next.js (Pages Router)",vite:"Vite + React",cra:"Create React App",node:"Node.js Backend",unknown:"Unknown"}[e]}var x=null;function ne(){return x||(x=___namespace.createInterface({input:process.stdin,output:process.stdout,terminal:false})),x}function b(e){return new Promise(s=>{process.stdout.write(e),ne().once("line",t=>{s(t);});})}function F(){x&&(x.close(),x=null);}async function M(e){let s=[{key:"1",type:"nextjs-app",label:"Next.js (App Router)"},{key:"2",type:"nextjs-pages",label:"Next.js (Pages Router)"},{key:"3",type:"vite",label:"Vite + React"},{key:"4",type:"cra",label:"Create React App"},{key:"5",type:"node",label:"Node.js Backend"}],t=s.findIndex(r=>r.type===e),a=t>=0?s[t].key:"1";console.log(`
3
+ \u{1F4E6} \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),s.forEach(r=>{let c=r.type===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.label}${c}`);});let n=(await b(`
4
+ \uC120\uD0DD [${a}]: `)).trim()||a;return s.find(r=>r.key===n)?.type||e}async function B(e){let s=[{key:"1",manager:"npm"},{key:"2",manager:"yarn"},{key:"3",manager:"pnpm"}],t=s.findIndex(r=>r.manager===e),a=t>=0?s[t].key:"1";console.log(`
5
+ \u{1F4E6} \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),s.forEach(r=>{let c=r.manager===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.manager}${c}`);});let n=(await b(`
6
+ \uC120\uD0DD [${a}]: `)).trim()||a;return s.find(r=>r.key===n)?.manager||e}async function K(e){if(e==="node"||e==="unknown")return false;let s=e.startsWith("nextjs")?"next.config":"vite.config";return console.log(`
7
+ \u{1F527} ${s} \uD30C\uC77C\uC5D0 metadatafy \uD50C\uB7EC\uADF8\uC778\uC744 \uC790\uB3D9\uC73C\uB85C \uCD94\uAC00\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."),(await b(`
8
+ \uCD94\uAC00\uD560\uAE4C\uC694? [Y/n]: `)).trim().toLowerCase()!=="n"}async function W(e,s=true){let o=(await b(`${e} ${s?"[Y/n]":"[y/N]"}: `)).trim().toLowerCase();return o===""?s:o==="y"||o==="yes"}async function J(){return console.log(`
9
+ \u{1F5C4}\uFE0F Supabase\uC5D0 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC790\uB3D9 \uC800\uC7A5\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC5C5\uB85C\uB4DC\uB429\uB2C8\uB2E4."),(await b(`
10
+ Supabase \uC5F0\uB3D9 \uC124\uC815? [y/N]: `)).trim().toLowerCase()==="y"}async function V(e={}){console.log(`
11
+ \u{1F527} Supabase \uC124\uC815`),console.log(`\uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C \uC0AC\uC6A9 \uC911\uC778 \uD658\uACBD\uBCC0\uC218 \uC774\uB984\uC744 \uC785\uB825\uD558\uC138\uC694.
12
+ `);let s=Object.keys(e).filter(l=>l.toLowerCase().includes("supabase"));s.length>0&&(console.log("\u{1F4CB} \uAC10\uC9C0\uB41C Supabase \uAD00\uB828 \uD658\uACBD\uBCC0\uC218:"),s.forEach(l=>console.log(` - ${l}`)),console.log(""));let t=await b("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),a=await b("Service Role Key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: "),o=t.trim()||"SUPABASE_URL",n=a.trim()||"SUPABASE_SERVICE_ROLE_KEY",i=!!e[o],r=!!e[n];if(i&&r)console.log(`
13
+ \u2705 .env \uD30C\uC77C\uC5D0\uC11C \uD658\uACBD\uBCC0\uC218\uB97C \uCC3E\uC558\uC2B5\uB2C8\uB2E4:`),console.log(` ${o}: ${e[o].substring(0,30)}...`),console.log(` ${n}: ****${e[n].slice(-8)}`);else {let l=[];i||l.push(o),r||l.push(n),console.log(`
14
+ \u26A0\uFE0F .env \uD30C\uC77C\uC5D0 \uB2E4\uC74C \uD658\uACBD\uBCC0\uC218\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4:`),l.forEach(p=>console.log(` - ${p}`)),console.log(`
15
+ \uB098\uC911\uC5D0 .env \uD30C\uC77C\uC5D0 \uCD94\uAC00\uD574\uC8FC\uC138\uC694.`);}let c=(await b(`
16
+ \uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: `)).trim()||"project_metadata";return {urlEnvName:o,serviceRoleKeyEnvName:n,tableName:c}}function re(e){let{projectType:s,projectInfo:t}=e,a=[],o=t.hasTypescript?"{ts,tsx}":"{js,jsx}";switch(s){case "nextjs-app":t.hasSrc?a.push(`src/app/**/*.${o}`):a.push(`app/**/*.${o}`),a.push(`components/**/*.${o}`),a.push(`hooks/**/*.${o}`),a.push(`lib/**/*.${o}`);break;case "nextjs-pages":t.hasSrc?a.push(`src/pages/**/*.${o}`):a.push(`pages/**/*.${o}`),a.push(`components/**/*.${o}`),a.push(`hooks/**/*.${o}`),a.push(`lib/**/*.${o}`);break;case "vite":case "cra":a.push(`src/**/*.${o}`);break;case "node":a.push(`src/**/*.${t.hasTypescript?"ts":"js"}`),a.push(`routes/**/*.${t.hasTypescript?"ts":"js"}`),a.push(`controllers/**/*.${t.hasTypescript?"ts":"js"}`);break;default:a.push(`src/**/*.${o}`);}return t.hasPrisma&&a.push("prisma/migrations/**/*.sql"),t.hasSupabase&&a.push("supabase/migrations/*.sql"),a}async function z(e,s,t){let a=f__namespace.join(e,"metadata.config.json"),o={projectId:s,include:re(t),exclude:["**/node_modules/**","**/.next/**","**/dist/**","**/build/**","**/*.test.{ts,tsx,js,jsx}","**/*.spec.{ts,tsx,js,jsx}","**/__tests__/**"],output:{file:{enabled:true,path:"project-metadata.json"},...t.supabase&&{database:{enabled:true,provider:"supabase",supabase:{url:`\${${t.supabase.urlEnvName}}`,serviceRoleKey:`\${${t.supabase.serviceRoleKeyEnvName}}`,tableName:t.supabase.tableName,fields:{projectId:"project_id",metadata:"metadata",createdAt:"created_at",updatedAt:"updated_at"}}}}},koreanKeywords:{},verbose:false};return await m__namespace.writeFile(a,JSON.stringify(o,null,2)),a}async function Y(e){let s=["vite.config.ts","vite.config.js","vite.config.mts","vite.config.mjs"];for(let t of s){let a=f__namespace.join(e,t);try{let o=await m__namespace.readFile(a,"utf-8");if(o.includes("metadatafy"))return !0;let n=`import metadatafy from 'metadatafy/vite';
17
+ `;return o.includes("from 'vite'")?o=o.replace(/^(import .+ from ['"]vite['"];?\n)/m,`$1${n}`):o=n+o,o.includes("plugins:")?o=o.replace(/plugins:\s*\[/,`plugins: [
18
+ metadatafy(),`):o.includes("defineConfig(")&&(o=o.replace(/defineConfig\(\{/,`defineConfig({
19
+ plugins: [metadatafy()],`)),await m__namespace.writeFile(a,o),!0}catch{}}return false}async function q(e){let s=["next.config.ts","next.config.mjs","next.config.js"];for(let t of s){let a=f__namespace.join(e,t);try{let o=await m__namespace.readFile(a,"utf-8");if(o.includes("metadatafy")||o.includes("withMetadatafy"))return !0;let n=t.endsWith(".ts");return o=(t.endsWith(".mjs")||n?`import { withMetadatafy } from 'metadatafy/next';
18
20
  `:`const { withMetadatafy } = require('metadatafy/next');
19
- `)+s,s.includes("export default")?(s=s.replace(/export default\s+({[\s\S]*?});?\s*$/m,"export default withMetadatafy($1);"),s=s.replace(/export default\s+(\w+);?\s*$/m,"export default withMetadatafy($1);")):s.includes("module.exports")&&(s=s.replace(/module\.exports\s*=\s*({[\s\S]*?});?\s*$/m,"module.exports = withMetadatafy($1);"),s=s.replace(/module\.exports\s*=\s*(\w+);?\s*$/m,"module.exports = withMetadatafy($1);")),await b__namespace.writeFile(o,s),!0}catch{}}return false}function H(e){switch(e){case "yarn":return "yarn add -D metadatafy";case "pnpm":return "pnpm add -D metadatafy";default:return "npm install -D metadatafy"}}var X=D__namespace.createInterface({input:process.stdin,output:process.stdout});function f(e){return new Promise(a=>{X.question(e,a);})}function Z(e){return new Promise(a=>{process.stdout.write(e);let t=process.stdin,o=t.isRaw;t.isTTY&&t.setRawMode(true);let s="",n=c=>{let r=c.toString("utf8");switch(r){case `
20
- `:case "\r":case "":t.isTTY&&t.setRawMode(o),t.removeListener("data",n),process.stdout.write(`
21
- `),a(s);break;case "":process.exit();break;case "\x7F":s.length>0&&(s=s.slice(0,-1),process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(e+"*".repeat(s.length)));break;default:s+=r,process.stdout.write("*");break}};t.on("data",n),t.resume();})}function re(){X.close();}async function ie(){return console.log(`
22
- \u{1F4E6} \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uD504\uB85C\uBC14\uC774\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) Supabase"),console.log(" 2) Custom API (\uC9C1\uC811 \uC124\uC815)"),console.log(" (Firebase, PlanetScale \uB4F1\uC740 \uCD94\uD6C4 \uC9C0\uC6D0 \uC608\uC815)"),((await f(`
23
- \uC120\uD0DD [1]: `)).trim()||"1")==="2"?"custom":"supabase"}async function ce(){return console.log(`
24
- \u{1F510} \uC778\uC99D \uC815\uBCF4 \uC800\uC7A5 \uBC29\uC2DD\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) \uD658\uACBD\uBCC0\uC218 \uCC38\uC870 \uC0AC\uC6A9 (\uAD8C\uC7A5) - ${SUPABASE_URL} \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5"),console.log(" 2) \uC9C1\uC811 \uAC12 \uC800\uC7A5 (\uBE44\uAD8C\uC7A5) - \uC2E4\uC81C \uAC12\uC744 config\uC5D0 \uC800\uC7A5"),(await f(`
25
- \uC120\uD0DD [1]: `)).trim()!=="2"}async function le(e){console.log(`
21
+ `)+o,o.includes("export default")?(o=o.replace(/export default\s+({[\s\S]*?});?\s*$/m,"export default withMetadatafy($1);"),o=o.replace(/export default\s+(\w+);?\s*$/m,"export default withMetadatafy($1);")):o.includes("module.exports")&&(o=o.replace(/module\.exports\s*=\s*({[\s\S]*?});?\s*$/m,"module.exports = withMetadatafy($1);"),o=o.replace(/module\.exports\s*=\s*(\w+);?\s*$/m,"module.exports = withMetadatafy($1);")),await m__namespace.writeFile(a,o),!0}catch{}}return false}function H(e){switch(e){case "yarn":return "yarn add -D metadatafy";case "pnpm":return "pnpm add -D metadatafy";default:return "npm install -D metadatafy"}}var X=___namespace.createInterface({input:process.stdin,output:process.stdout});function g(e){return new Promise(s=>{X.question(e,s);})}function Z(e){return new Promise(s=>{process.stdout.write(e);let t=process.stdin,a=t.isRaw;t.isTTY&&t.setRawMode(true);let o="",n=i=>{let r=i.toString("utf8");switch(r){case `
22
+ `:case "\r":case "":t.isTTY&&t.setRawMode(a),t.removeListener("data",n),process.stdout.write(`
23
+ `),s(o);break;case "":process.exit();break;case "\x7F":o.length>0&&(o=o.slice(0,-1),process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(e+"*".repeat(o.length)));break;default:o+=r,process.stdout.write("*");break}};t.on("data",n),t.resume();})}function ie(){X.close();}async function ce(){return console.log(`
24
+ \u{1F4E6} \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uD504\uB85C\uBC14\uC774\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) Supabase"),console.log(" 2) Custom API (\uC9C1\uC811 \uC124\uC815)"),console.log(" (Firebase, PlanetScale \uB4F1\uC740 \uCD94\uD6C4 \uC9C0\uC6D0 \uC608\uC815)"),((await g(`
25
+ \uC120\uD0DD [1]: `)).trim()||"1")==="2"?"custom":"supabase"}async function le(){return console.log(`
26
+ \u{1F510} \uC778\uC99D \uC815\uBCF4 \uC800\uC7A5 \uBC29\uC2DD\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) \uD658\uACBD\uBCC0\uC218 \uCC38\uC870 \uC0AC\uC6A9 (\uAD8C\uC7A5) - ${SUPABASE_URL} \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5"),console.log(" 2) \uC9C1\uC811 \uAC12 \uC800\uC7A5 (\uBE44\uAD8C\uC7A5) - \uC2E4\uC81C \uAC12\uC744 config\uC5D0 \uC800\uC7A5"),(await g(`
27
+ \uC120\uD0DD [1]: `)).trim()!=="2"}async function pe(e){console.log(`
26
28
  \u{1F527} Supabase \uC124\uC815
27
29
  `),console.log("Supabase \uB300\uC2DC\uBCF4\uB4DC\uC5D0\uC11C \uB2E4\uC74C \uC815\uBCF4\uB97C \uD655\uC778\uD558\uC138\uC694:"),console.log(`Settings > API > Project URL, service_role key
28
- `);let a,t,o,s;if(e){let x=await f("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),u=await f("Supabase service role key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: ");o=`\${${x.trim()||"SUPABASE_URL"}}`,s=`\${${u.trim()||"SUPABASE_SERVICE_ROLE_KEY"}}`,console.log(`
29
- \uC5F0\uACB0 \uD14C\uC2A4\uD2B8\uB97C \uC704\uD574 \uC2E4\uC81C \uAC12\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694 (\uC800\uC7A5\uB418\uC9C0 \uC54A\uC74C):`),a=await f("Supabase URL: "),t=await Z("Supabase service role key: ");}else a=await f("Supabase URL (\uC608: https://xxx.supabase.co): "),t=await Z("Supabase service role key: "),o=a.trim(),s=t;if(!a.trim()||!t)throw new Error("Supabase URL\uACFC service role key\uB294 \uD544\uC218\uC785\uB2C8\uB2E4.");let c=(await f(`
30
+ `);let s,t,a,o;if(e){let j=await g("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),v=await g("Supabase service role key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: ");a=`\${${j.trim()||"SUPABASE_URL"}}`,o=`\${${v.trim()||"SUPABASE_SERVICE_ROLE_KEY"}}`,console.log(`
31
+ \uC5F0\uACB0 \uD14C\uC2A4\uD2B8\uB97C \uC704\uD574 \uC2E4\uC81C \uAC12\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694 (\uC800\uC7A5\uB418\uC9C0 \uC54A\uC74C):`),s=await g("Supabase URL: "),t=await Z("Supabase service role key: ");}else s=await g("Supabase URL (\uC608: https://xxx.supabase.co): "),t=await Z("Supabase service role key: "),a=s.trim(),o=t;if(!s.trim()||!t)throw new Error("Supabase URL\uACFC service role key\uB294 \uD544\uC218\uC785\uB2C8\uB2E4.");let i=(await g(`
30
32
  \uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: `)).trim()||"project_metadata";console.log(`
31
33
  \u{1F4DD} \uD544\uB4DC \uB9E4\uD551 \uC124\uC815`),console.log(`\uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC800\uC7A5\uD560 \uCEEC\uB7FC \uC774\uB984\uC744 \uC785\uB825\uD558\uC138\uC694.
32
- `);let r=await f("\uD504\uB85C\uC81D\uD2B8 ID \uD544\uB4DC [project_id]: "),g=await f("\uBA54\uD0C0\uB370\uC774\uD130 JSON \uD544\uB4DC [metadata]: "),i=await f('\uC0DD\uC131 \uC2DC\uAC04 \uD544\uB4DC (\uBE48\uCE78=created_at, "none"=\uC0AC\uC6A9\uC548\uD568) [created_at]: '),p=await f('\uC5C5\uB370\uC774\uD2B8 \uC2DC\uAC04 \uD544\uB4DC (\uBE48\uCE78=updated_at, "none"=\uC0AC\uC6A9\uC548\uD568) [updated_at]: ');return {config:{enabled:true,provider:"supabase",supabase:{url:o,serviceRoleKey:s,tableName:c,fields:{projectId:r.trim()||"project_id",metadata:g.trim()||"metadata",...i.trim().toLowerCase()!=="none"&&{createdAt:i.trim()||"created_at"},...p.trim().toLowerCase()!=="none"&&{updatedAt:p.trim()||"updated_at"}}}},actualValues:{url:a.trim(),serviceRoleKey:t}}}async function pe(e,a){if(console.log(`
33
- \u{1F50C} \uC5F0\uACB0 \uD14C\uC2A4\uD2B8 \uC911...`),e.provider!=="supabase"||!e.supabase)return true;let t={provider:"supabase",enabled:true,url:a.url,serviceRoleKey:a.serviceRoleKey,tableName:e.supabase.tableName,fields:{projectId:e.supabase.fields.projectId,metadata:e.supabase.fields.metadata,createdAt:e.supabase.fields.createdAt,updatedAt:e.supabase.fields.updatedAt}};try{return await(await chunkXR3EVOXW_cjs.a(t)).testConnection()?(console.log("\u2705 \uC5F0\uACB0 \uC131\uACF5!"),!0):(console.log("\u274C \uC5F0\uACB0 \uC2E4\uD328. \uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694."),!1)}catch(o){return console.log(`\u274C \uC5F0\uACB0 \uC624\uB958: ${o instanceof Error?o.message:o}`),false}}async function ue(e,a){let t=m__namespace.join(e,"metadata.config.json"),o={};try{let n=await b__namespace.readFile(t,"utf-8");o=JSON.parse(n);}catch{o={projectId:m__namespace.basename(e),include:["src/**/*.{ts,tsx}"],exclude:["**/node_modules/**","**/*.test.{ts,tsx}"],output:{}};}let s=o.output||{};return s.database=a,o.output=s,await b__namespace.writeFile(t,JSON.stringify(o,null,2)),t}function de(e){if(!e.supabase)return;let{tableName:a,fields:t}=e.supabase;console.log(`
34
+ `);let r=await g("\uD504\uB85C\uC81D\uD2B8 ID \uD544\uB4DC [project_id]: "),u=await g("\uBA54\uD0C0\uB370\uC774\uD130 JSON \uD544\uB4DC [metadata]: "),c=await g('\uC0DD\uC131 \uC2DC\uAC04 \uD544\uB4DC (\uBE48\uCE78=created_at, "none"=\uC0AC\uC6A9\uC548\uD568) [created_at]: '),l=await g('\uC5C5\uB370\uC774\uD2B8 \uC2DC\uAC04 \uD544\uB4DC (\uBE48\uCE78=updated_at, "none"=\uC0AC\uC6A9\uC548\uD568) [updated_at]: ');return {config:{enabled:true,provider:"supabase",supabase:{url:a,serviceRoleKey:o,tableName:i,fields:{projectId:r.trim()||"project_id",metadata:u.trim()||"metadata",...c.trim().toLowerCase()!=="none"&&{createdAt:c.trim()||"created_at"},...l.trim().toLowerCase()!=="none"&&{updatedAt:l.trim()||"updated_at"}}}},actualValues:{url:s.trim(),serviceRoleKey:t}}}async function ue(e,s){if(console.log(`
35
+ \u{1F50C} \uC5F0\uACB0 \uD14C\uC2A4\uD2B8 \uC911...`),e.provider!=="supabase"||!e.supabase)return true;let t={provider:"supabase",enabled:true,url:s.url,serviceRoleKey:s.serviceRoleKey,tableName:e.supabase.tableName,fields:{projectId:e.supabase.fields.projectId,metadata:e.supabase.fields.metadata,createdAt:e.supabase.fields.createdAt,updatedAt:e.supabase.fields.updatedAt}};try{return await(await chunkXR3EVOXW_cjs.a(t)).testConnection()?(console.log("\u2705 \uC5F0\uACB0 \uC131\uACF5!"),!0):(console.log("\u274C \uC5F0\uACB0 \uC2E4\uD328. \uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694."),!1)}catch(a){return console.log(`\u274C \uC5F0\uACB0 \uC624\uB958: ${a instanceof Error?a.message:a}`),false}}async function de(e,s){let t=f__namespace.join(e,"metadata.config.json"),a={};try{let n=await m__namespace.readFile(t,"utf-8");a=JSON.parse(n);}catch{a={projectId:f__namespace.basename(e),include:["src/**/*.{ts,tsx}"],exclude:["**/node_modules/**","**/*.test.{ts,tsx}"],output:{}};}let o=a.output||{};return o.database=s,a.output=o,await m__namespace.writeFile(t,JSON.stringify(a,null,2)),t}function ge(e){if(!e.supabase)return;let{tableName:s,fields:t}=e.supabase;console.log(`
34
36
  \u{1F4CB} Supabase\uC5D0\uC11C \uB2E4\uC74C SQL\uB85C \uD14C\uC774\uBE14\uC744 \uC0DD\uC131\uD558\uC138\uC694:
35
- `),console.log("```sql"),console.log(`CREATE TABLE ${a} (`),console.log(" id UUID DEFAULT gen_random_uuid() PRIMARY KEY,"),console.log(` ${t.projectId} TEXT UNIQUE NOT NULL,`),console.log(` ${t.metadata} JSONB NOT NULL,`),t.createdAt&&console.log(` ${t.createdAt} TIMESTAMPTZ DEFAULT NOW(),`),t.updatedAt&&console.log(` ${t.updatedAt} TIMESTAMPTZ DEFAULT NOW()`),console.log(");"),console.log(""),console.log("-- RLS \uC815\uCC45 (\uD544\uC694\uC2DC)"),console.log(`ALTER TABLE ${a} ENABLE ROW LEVEL SECURITY;`),console.log("```\n");}function ge(e){if(e.provider!=="supabase"||!e.supabase)return;let{url:a,serviceRoleKey:t}=e.supabase;if(a.startsWith("${")||t.startsWith("${")){if(console.log(`\u{1F510} .env \uD30C\uC77C\uC5D0 \uB2E4\uC74C \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694:
36
- `),a.startsWith("${")){let o=a.slice(2,-1);console.log(`${o}=https://your-project.supabase.co`);}if(t.startsWith("${")){let o=t.slice(2,-1);console.log(`${o}=your-service-role-key`);}console.log(`
37
+ `),console.log("```sql"),console.log(`CREATE TABLE ${s} (`),console.log(" id UUID DEFAULT gen_random_uuid() PRIMARY KEY,"),console.log(` ${t.projectId} TEXT UNIQUE NOT NULL,`),console.log(` ${t.metadata} JSONB NOT NULL,`),t.createdAt&&console.log(` ${t.createdAt} TIMESTAMPTZ DEFAULT NOW(),`),t.updatedAt&&console.log(` ${t.updatedAt} TIMESTAMPTZ DEFAULT NOW()`),console.log(");"),console.log(""),console.log("-- RLS \uC815\uCC45 (\uD544\uC694\uC2DC)"),console.log(`ALTER TABLE ${s} ENABLE ROW LEVEL SECURITY;`),console.log("```\n");}function fe(e){if(e.provider!=="supabase"||!e.supabase)return;let{url:s,serviceRoleKey:t}=e.supabase;if(s.startsWith("${")||t.startsWith("${")){if(console.log(`\u{1F510} .env \uD30C\uC77C\uC5D0 \uB2E4\uC74C \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694:
38
+ `),s.startsWith("${")){let a=s.slice(2,-1);console.log(`${a}=https://your-project.supabase.co`);}if(t.startsWith("${")){let a=t.slice(2,-1);console.log(`${a}=your-service-role-key`);}console.log(`
37
39
  \u{1F4A1} CI/CD \uD658\uACBD\uC5D0\uC11C\uB294 \uD574\uB2F9 \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD574\uC8FC\uC138\uC694.`),console.log(" GitHub Actions: Settings > Secrets and variables > Actions"),console.log(` Vercel: Project Settings > Environment Variables
38
- `);}}async function T(){let e=process.cwd();console.log(`
40
+ `);}}async function I(){let e=process.cwd();console.log(`
39
41
  \u{1F5C4}\uFE0F metadatafy \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815
40
- `),console.log("\uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4."),console.log("\uC124\uC815\uC740 metadata.config.json\uC5D0 \uC800\uC7A5\uB429\uB2C8\uB2E4.");try{if(await ie()!=="supabase"){console.log(`
42
+ `),console.log("\uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4."),console.log("\uC124\uC815\uC740 metadata.config.json\uC5D0 \uC800\uC7A5\uB429\uB2C8\uB2E4.");try{if(await ce()!=="supabase"){console.log(`
41
43
  \uD604\uC7AC Supabase\uB9CC \uC778\uD130\uB799\uD2F0\uBE0C \uC124\uC815\uC744 \uC9C0\uC6D0\uD569\uB2C8\uB2E4.`),console.log(`metadata.config.json\uC758 output.database\uB97C \uC9C1\uC811 \uC791\uC131\uD574\uC8FC\uC138\uC694.
42
- `);return}let t=await ce(),{config:o,actualValues:s}=await le(t);if(!await pe(o,s)&&(await f(`
43
- \uACC4\uC18D \uC9C4\uD589\uD560\uAE4C\uC694? [y/N]: `)).toLowerCase()!=="y"){console.log("\uC124\uC815\uC774 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");return}let c=await ue(e,o);console.log(`
44
- \u2705 \uC124\uC815 \uC800\uC7A5\uB428: ${m__namespace.relative(e,c)}`),de(o),ge(o),console.log("\u{1F389} \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4!"),console.log(`
45
- \u{1F4A1} \uC0AC\uC6A9\uBC95:`),console.log(" npx metadatafy analyze # \uBD84\uC11D + DB \uC5C5\uB85C\uB4DC"),console.log("");}finally{re();}}var fe="1.3.0",G=`
44
+ `);return}let t=await le(),{config:a,actualValues:o}=await pe(t);if(!await ue(a,o)&&(await g(`
45
+ \uACC4\uC18D \uC9C4\uD589\uD560\uAE4C\uC694? [y/N]: `)).toLowerCase()!=="y"){console.log("\uC124\uC815\uC774 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");return}let i=await de(e,a);console.log(`
46
+ \u2705 \uC124\uC815 \uC800\uC7A5\uB428: ${f__namespace.relative(e,i)}`),ge(a),fe(a),console.log("\u{1F389} \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4!"),console.log(`
47
+ \u{1F4A1} \uC0AC\uC6A9\uBC95:`),console.log(" npx metadatafy analyze # \uBD84\uC11D + DB \uC5C5\uB85C\uB4DC"),console.log("");}finally{ie();}}var me="1.3.1",G=`
46
48
  metadatafy - \uD504\uB85C\uC81D\uD2B8 \uBA54\uD0C0\uB370\uC774\uD130 \uCD94\uCD9C \uB3C4\uAD6C
47
49
 
48
50
  Usage:
@@ -64,7 +66,7 @@ Examples:
64
66
  metadatafy analyze --upload # \uBD84\uC11D + DB \uC5C5\uB85C\uB4DC
65
67
  metadatafy analyze --no-upload # \uBD84\uC11D\uB9CC (DB \uC5C5\uB85C\uB4DC \uC548\uD568)
66
68
  metadatafy upload # \uAE30\uC874 \uD30C\uC77C\uC744 DB\uC5D0 \uC5C5\uB85C\uB4DC
67
- `,me=`
69
+ `,ye=`
68
70
  Usage: metadatafy analyze [options]
69
71
 
70
72
  Options:
@@ -75,7 +77,7 @@ Options:
75
77
  --no-upload DB \uC5C5\uB85C\uB4DC \uC2A4\uD0B5
76
78
  --verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
77
79
  -h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
78
- `,ye=`
80
+ `,be=`
79
81
  Usage: metadatafy upload [options]
80
82
 
81
83
  \uAE30\uC874 \uBA54\uD0C0\uB370\uC774\uD130 JSON \uD30C\uC77C\uC744 \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC5C5\uB85C\uB4DC\uD569\uB2C8\uB2E4.
@@ -85,31 +87,31 @@ Options:
85
87
  -c, --config <path> \uC124\uC815 \uD30C\uC77C \uACBD\uB85C
86
88
  --verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
87
89
  -h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
88
- `;async function be(){let e=process.argv.slice(2);(e.length===0||e[0]==="-h"||e[0]==="--help")&&(console.log(G),process.exit(0)),(e[0]==="-v"||e[0]==="--version")&&(console.log(fe),process.exit(0));let a=e[0];switch(a){case "analyze":await he(e.slice(1));break;case "upload":await we(e.slice(1));break;case "init":await Pe();break;case "database-init":await T();break;default:console.error(`Unknown command: ${a}`),console.log(G),process.exit(1);}}async function he(e){let{values:a}=util.parseArgs({args:e,options:{"project-id":{type:"string",short:"p"},output:{type:"string",short:"o"},config:{type:"string",short:"c"},upload:{type:"boolean"},"no-upload":{type:"boolean"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});a.help&&(console.log(me),process.exit(0));let t=process.cwd(),o=a["project-id"]||m__namespace.basename(t),s=a.output||"project-metadata.json",n=a.verbose||false,c={};if(a.config)try{let p=await b__namespace.readFile(a.config,"utf-8");c=JSON.parse(p);}catch{console.error(`Failed to load config file: ${a.config}`),process.exit(1);}else {let p=m__namespace.join(t,"metadata.config.json");try{let l=await b__namespace.readFile(p,"utf-8");c=JSON.parse(l),n&&console.log(`Loaded config from ${p}`);}catch{}}let r=chunkGHNW3BJ2_cjs.d({...c,projectId:o,verbose:n,output:{file:{enabled:true,path:s},...c.output}});console.log(`
89
- \u{1F4E6} Analyzing project: ${o}`),console.log(`\u{1F4C1} Root directory: ${t}
90
- `);let g=new chunkGHNW3BJ2_cjs.y(r),i=new chunkGHNW3BJ2_cjs.z(r);try{let p=Date.now(),l=await g.analyze(t),x=Date.now()-p,u=m__namespace.resolve(t,s);await i.write(l,u),r.output.api?.enabled&&r.output.api.endpoint&&(await new chunkGHNW3BJ2_cjs.A(r).send(l),console.log(`\u2601\uFE0F Sent to API: ${r.output.api.endpoint}`)),a.upload||!a["no-upload"]&&c.output?.database?.enabled?await je(c,l,n):n&&console.log("\u2139\uFE0F DB upload skipped (use --upload to enable)"),console.log(`\u2705 Analysis completed in ${x}ms
91
- `),console.log("\u{1F4CA} Results:"),console.log(` Total files: ${l.stats.totalFiles}`),console.log(` - Routes: ${l.stats.byType.route}`),console.log(` - Components: ${l.stats.byType.component}`),console.log(` - Hooks: ${l.stats.byType.hook}`),console.log(` - Services: ${l.stats.byType.service}`),console.log(` - APIs: ${l.stats.byType.api}`),console.log(` - Tables: ${l.stats.byType.table}`),console.log(` - Utilities: ${l.stats.byType.utility}`),console.log(`
92
- \u{1F4C4} Output: ${u}`),l.stats.parseErrors.length>0&&(console.log(`
93
- \u26A0\uFE0F Parse errors (${l.stats.parseErrors.length}):`),l.stats.parseErrors.slice(0,5).forEach(A=>{console.log(` - ${A}`);}),l.stats.parseErrors.length>5&&console.log(` ... and ${l.stats.parseErrors.length-5} more`)),console.log("");}catch(p){console.error("\u274C Analysis failed:",p),process.exit(1);}}async function we(e){let{values:a}=util.parseArgs({args:e,options:{input:{type:"string",short:"i"},config:{type:"string",short:"c"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});a.help&&(console.log(ye),process.exit(0));let t=process.cwd(),o=a.input||"project-metadata.json",s=a.verbose||false,n={};if(a.config)try{let i=await b__namespace.readFile(a.config,"utf-8");n=JSON.parse(i);}catch{console.error(`Failed to load config file: ${a.config}`),process.exit(1);}else {let i=m__namespace.join(t,"metadata.config.json");try{let p=await b__namespace.readFile(i,"utf-8");n=JSON.parse(p),s&&console.log(`Loaded config from ${i}`);}catch{console.error("\u274C metadata.config.json \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy init \uC73C\uB85C \uC124\uC815\uC744 \uBA3C\uC800 \uC0DD\uC131\uD558\uC138\uC694."),process.exit(1);}}let c=m__namespace.resolve(t,o),r;try{let i=await b__namespace.readFile(c,"utf-8");r=JSON.parse(i);}catch{console.error(`\u274C \uBA54\uD0C0\uB370\uC774\uD130 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${c}`),console.log(" npx metadatafy analyze \uB85C \uBA3C\uC800 \uBD84\uC11D\uC744 \uC2E4\uD589\uD558\uC138\uC694."),process.exit(1);}console.log(`
94
- \u{1F4E4} Uploading metadata from: ${c}`);let g=await te(t,n);g||(console.error("\u274C \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy database-init \uC73C\uB85C \uC124\uC815\uC744 \uCD94\uAC00\uD558\uC138\uC694."),process.exit(1));try{let p=await(await chunkXR3EVOXW_cjs.a(g)).upload(r);p.success?console.log(`
95
- \u2705 ${p.message} (${g.provider})`):(console.error(`
96
- \u274C Upload failed: ${p.error}`),process.exit(1));}catch(i){console.error(`
97
- \u274C Upload error: ${i instanceof Error?i.message:i}`),process.exit(1);}}async function Pe(){let e=process.cwd(),a=m__namespace.basename(e);console.log(`
90
+ `;async function he(){let e=process.argv.slice(2);(e.length===0||e[0]==="-h"||e[0]==="--help")&&(console.log(G),process.exit(0)),(e[0]==="-v"||e[0]==="--version")&&(console.log(me),process.exit(0));let s=e[0];switch(s){case "analyze":await we(e.slice(1));break;case "upload":await Pe(e.slice(1));break;case "init":await je();break;case "database-init":await I();break;default:console.error(`Unknown command: ${s}`),console.log(G),process.exit(1);}}async function we(e){let{values:s}=util.parseArgs({args:e,options:{"project-id":{type:"string",short:"p"},output:{type:"string",short:"o"},config:{type:"string",short:"c"},upload:{type:"boolean"},"no-upload":{type:"boolean"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});s.help&&(console.log(ye),process.exit(0));let t=process.cwd();chunkZAACVJBX_cjs.b(t,s.verbose);let a=s["project-id"]||f__namespace.basename(t),o=s.output||"project-metadata.json",n=s.verbose||false,i={};if(s.config)try{let l=await m__namespace.readFile(s.config,"utf-8");i=JSON.parse(l);}catch{console.error(`Failed to load config file: ${s.config}`),process.exit(1);}else {let l=f__namespace.join(t,"metadata.config.json");try{let p=await m__namespace.readFile(l,"utf-8");i=JSON.parse(p),n&&console.log(`Loaded config from ${l}`);}catch{}}let r=chunkECJ6WDN5_cjs.d({...i,projectId:a,verbose:n,output:{file:{enabled:true,path:o},...i.output}});console.log(`
91
+ \u{1F4E6} Analyzing project: ${a}`),console.log(`\u{1F4C1} Root directory: ${t}
92
+ `);let u=new chunkECJ6WDN5_cjs.y(r),c=new chunkECJ6WDN5_cjs.z(r);try{let l=Date.now(),p=await u.analyze(t),j=Date.now()-l,v=f__namespace.resolve(t,o);if(await c.write(p,v),r.output.api?.enabled&&r.output.api.endpoint)try{new URL(r.output.api.endpoint),await new chunkECJ6WDN5_cjs.A(r).send(p),console.log(`\u2601\uFE0F Sent to API: ${r.output.api.endpoint}`);}catch{n&&console.log(`\u26A0\uFE0F Invalid API endpoint, skipping: ${r.output.api.endpoint}`);}s.upload||!s["no-upload"]&&i.output?.database?.enabled?await ve(i,p,n):n&&console.log("\u2139\uFE0F DB upload skipped (use --upload to enable)"),console.log(`\u2705 Analysis completed in ${j}ms
93
+ `),console.log("\u{1F4CA} Results:"),console.log(` Total files: ${p.stats.totalFiles}`),console.log(` - Routes: ${p.stats.byType.route}`),console.log(` - Components: ${p.stats.byType.component}`),console.log(` - Hooks: ${p.stats.byType.hook}`),console.log(` - Services: ${p.stats.byType.service}`),console.log(` - APIs: ${p.stats.byType.api}`),console.log(` - Tables: ${p.stats.byType.table}`),console.log(` - Utilities: ${p.stats.byType.utility}`),console.log(`
94
+ \u{1F4C4} Output: ${v}`),p.stats.parseErrors.length>0&&(console.log(`
95
+ \u26A0\uFE0F Parse errors (${p.stats.parseErrors.length}):`),p.stats.parseErrors.slice(0,5).forEach(h=>{console.log(` - ${h}`);}),p.stats.parseErrors.length>5&&console.log(` ... and ${p.stats.parseErrors.length-5} more`)),console.log("");}catch(l){console.error("\u274C Analysis failed:",l),process.exit(1);}}async function Pe(e){let{values:s}=util.parseArgs({args:e,options:{input:{type:"string",short:"i"},config:{type:"string",short:"c"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});s.help&&(console.log(be),process.exit(0));let t=process.cwd();chunkZAACVJBX_cjs.b(t,s.verbose);let a=s.input||"project-metadata.json",o=s.verbose||false,n={};if(s.config)try{let c=await m__namespace.readFile(s.config,"utf-8");n=JSON.parse(c);}catch{console.error(`Failed to load config file: ${s.config}`),process.exit(1);}else {let c=f__namespace.join(t,"metadata.config.json");try{let l=await m__namespace.readFile(c,"utf-8");n=JSON.parse(l),o&&console.log(`Loaded config from ${c}`);}catch{console.error("\u274C metadata.config.json \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy init \uC73C\uB85C \uC124\uC815\uC744 \uBA3C\uC800 \uC0DD\uC131\uD558\uC138\uC694."),process.exit(1);}}let i=f__namespace.resolve(t,a),r;try{let c=await m__namespace.readFile(i,"utf-8");r=JSON.parse(c);}catch{console.error(`\u274C \uBA54\uD0C0\uB370\uC774\uD130 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${i}`),console.log(" npx metadatafy analyze \uB85C \uBA3C\uC800 \uBD84\uC11D\uC744 \uC2E4\uD589\uD558\uC138\uC694."),process.exit(1);}console.log(`
96
+ \u{1F4E4} Uploading metadata from: ${i}`);let u=await te(t,n);u||(console.error("\u274C \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy database-init \uC73C\uB85C \uC124\uC815\uC744 \uCD94\uAC00\uD558\uC138\uC694."),process.exit(1));try{let l=await(await chunkXR3EVOXW_cjs.a(u)).upload(r);l.success?console.log(`
97
+ \u2705 ${l.message} (${u.provider})`):(console.error(`
98
+ \u274C Upload failed: ${l.error}`),process.exit(1));}catch(c){console.error(`
99
+ \u274C Upload error: ${c instanceof Error?c.message:c}`),process.exit(1);}}async function je(){let e=process.cwd(),s=f__namespace.basename(e);console.log(`
98
100
  \u{1F680} metadatafy \uC124\uC815 \uB9C8\uBC95\uC0AC
99
- `),console.log(`\uD504\uB85C\uC81D\uD2B8: ${a}`),console.log(`\uACBD\uB85C: ${e}`),console.log(`
100
- \u{1F50D} \uD504\uB85C\uC81D\uD2B8 \uBD84\uC11D \uC911...`);let t=await U(e);console.log(`
101
- \u2705 \uAC10\uC9C0\uB41C \uC815\uBCF4:`),console.log(` \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785: ${L(t.type)}`),console.log(` \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800: ${t.packageManager}`),console.log(` TypeScript: ${t.hasTypescript?"\uC608":"\uC544\uB2C8\uC624"}`),t.existingFolders.length>0&&console.log(` \uC8FC\uC694 \uD3F4\uB354: ${t.existingFolders.slice(0,5).join(", ")}`);try{let o=await F(t.type),s=await M(t.packageManager),n=!1;o!=="node"&&o!=="unknown"&&(n=await B(o));let c=await K(),r=null;await V()&&(r=await J());let i={projectType:o,packageManager:s,projectInfo:t,addBuildIntegration:n,apiEndpoint:c,supabase:r},p=m__namespace.join(e,"metadata.config.json"),l=!0;try{await b__namespace.access(p),console.log(`
102
- \u26A0\uFE0F metadata.config.json \uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.`),l=await W("\uB36E\uC5B4\uC4F8\uAE4C\uC694?",!1);}catch{}if(console.log(`
101
+ `),console.log(`\uD504\uB85C\uC81D\uD2B8: ${s}`),console.log(`\uACBD\uB85C: ${e}`);let{loadEnvFiles:t}=await import('./env-loader-CJAL6PKN.cjs'),{variables:a}=t(e);console.log(`
102
+ \u{1F50D} \uD504\uB85C\uC81D\uD2B8 \uBD84\uC11D \uC911...`);let o=await D(e);console.log(`
103
+ \u2705 \uAC10\uC9C0\uB41C \uC815\uBCF4:`),console.log(` \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785: ${O(o.type)}`),console.log(` \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800: ${o.packageManager}`),console.log(` TypeScript: ${o.hasTypescript?"\uC608":"\uC544\uB2C8\uC624"}`),o.existingFolders.length>0&&console.log(` \uC8FC\uC694 \uD3F4\uB354: ${o.existingFolders.slice(0,5).join(", ")}`);try{let n=await M(o.type),i=await B(o.packageManager),r=!1;n!=="node"&&n!=="unknown"&&(r=await K(n));let u=null;await J()&&(u=await V(a));let l={projectType:n,packageManager:i,projectInfo:o,addBuildIntegration:r,supabase:u},p=f__namespace.join(e,"metadata.config.json"),j=!0;try{await m__namespace.access(p),console.log(`
104
+ \u26A0\uFE0F metadata.config.json \uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.`),j=await W("\uB36E\uC5B4\uC4F8\uAE4C\uC694?",!1);}catch{}if(console.log(`
103
105
  \u{1F4DD} \uC124\uC815 \uC801\uC6A9 \uC911...
104
- `),l){let u=await z(e,a,i);console.log(`\u2705 \uC124\uC815 \uD30C\uC77C \uC0DD\uC131: ${m__namespace.relative(e,u)}`);}if(n){let u=!1;if(o==="vite"||o==="cra"?u=await Y(e):o.startsWith("nextjs")&&(u=await q(e)),u){let h=o.startsWith("nextjs")?"next.config":"vite.config";console.log(`\u2705 ${h} \uD30C\uC77C\uC5D0 \uD50C\uB7EC\uADF8\uC778 \uCD94\uAC00\uB428`);}else console.log("\u26A0\uFE0F \uBE4C\uB4DC \uC124\uC815 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC218\uB3D9\uC73C\uB85C \uCD94\uAC00\uD574\uC8FC\uC138\uC694.");}console.log(`
106
+ `),j){let y=await z(e,s,l);console.log(`\u2705 \uC124\uC815 \uD30C\uC77C \uC0DD\uC131: ${f__namespace.relative(e,y)}`);}if(r){let y=!1;if(n==="vite"||n==="cra"?y=await Y(e):n.startsWith("nextjs")&&(y=await q(e)),y){let h=n.startsWith("nextjs")?"next.config":"vite.config";console.log(`\u2705 ${h} \uD30C\uC77C\uC5D0 \uD50C\uB7EC\uADF8\uC778 \uCD94\uAC00\uB428`);}else console.log("\u26A0\uFE0F \uBE4C\uB4DC \uC124\uC815 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC218\uB3D9\uC73C\uB85C \uCD94\uAC00\uD574\uC8FC\uC138\uC694.");}console.log(`
105
107
  \u{1F389} \uC124\uC815\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4!
106
- `);let x=m__namespace.join(e,"package.json");try{let u=await b__namespace.readFile(x,"utf-8"),h=JSON.parse(u);({...h.dependencies,...h.devDependencies}).metadatafy||(console.log(`\u{1F4E6} \uB2E4\uC74C \uBA85\uB839\uC5B4\uB85C \uD328\uD0A4\uC9C0\uB97C \uC124\uCE58\uD558\uC138\uC694:
107
- `),console.log(` ${H(s)}
108
- `));}catch{}if(n?console.log("\u{1F527} \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."):(console.log(`\u{1F4A1} \uC218\uB3D9 \uBD84\uC11D \uBA85\uB839\uC5B4:
108
+ `);let v=f__namespace.join(e,"package.json");try{let y=await m__namespace.readFile(v,"utf-8"),h=JSON.parse(y);({...h.dependencies,...h.devDependencies}).metadatafy||(console.log(`\u{1F4E6} \uB2E4\uC74C \uBA85\uB839\uC5B4\uB85C \uD328\uD0A4\uC9C0\uB97C \uC124\uCE58\uD558\uC138\uC694:
109
+ `),console.log(` ${H(i)}
110
+ `));}catch{}r?console.log("\u{1F527} \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."):(console.log(`\u{1F4A1} \uC218\uB3D9 \uBD84\uC11D \uBA85\uB839\uC5B4:
109
111
  `),console.log(` npx metadatafy analyze
110
- `)),r){console.log("\u{1F5C4}\uFE0F Supabase \uC5F0\uB3D9\uC774 \uC124\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4."),console.log(` \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD574\uC8FC\uC138\uC694:
111
- `);let u=r.url.slice(2,-1),h=r.serviceRoleKey.slice(2,-1);console.log(` ${u}=https://your-project.supabase.co`),console.log(` ${h}=your-service-role-key
112
- `),console.log(`\u{1F4CB} Supabase\uC5D0\uC11C \uD14C\uC774\uBE14\uC744 \uC0DD\uC131\uD558\uC138\uC694:
113
- `),console.log(` CREATE TABLE ${r.tableName} (`),console.log(" id UUID DEFAULT gen_random_uuid() PRIMARY KEY,"),console.log(" project_id TEXT UNIQUE NOT NULL,"),console.log(" metadata JSONB NOT NULL,"),console.log(" created_at TIMESTAMPTZ DEFAULT NOW(),"),console.log(" updated_at TIMESTAMPTZ DEFAULT NOW()"),console.log(` );
114
- `);}}finally{O();}}function E(e){if(!e||typeof e!="string")return e;if(e.startsWith("${")&&e.endsWith("}")){let a=e.slice(2,-1);return process.env[a]||""}return e}async function te(e,a){let t=a.output?.database;if(!t||!t.enabled)return null;if(t.provider==="supabase"&&t.supabase){let{supabase:o}=t,s=E(o.url),n=E(o.serviceRoleKey);return !s||!n?(console.log("\u26A0\uFE0F Supabase \uD658\uACBD\uBCC0\uC218\uAC00 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."),o.url.startsWith("${")&&console.log(` ${o.url.slice(2,-1)}\uC744(\uB97C) \uC124\uC815\uD574\uC8FC\uC138\uC694.`),o.serviceRoleKey.startsWith("${")&&console.log(` ${o.serviceRoleKey.slice(2,-1)}\uC744(\uB97C) \uC124\uC815\uD574\uC8FC\uC138\uC694.`),null):{provider:"supabase",enabled:true,url:s,serviceRoleKey:n,tableName:o.tableName,fields:{projectId:o.fields.projectId,metadata:o.fields.metadata,createdAt:o.fields.createdAt,updatedAt:o.fields.updatedAt}}}if(t.provider==="custom"&&t.custom){let{custom:o}=t,s={};if(o.headers)for(let[n,c]of Object.entries(o.headers))s[n]=E(c);return {provider:"custom",enabled:true,endpoint:E(o.endpoint),method:o.method,headers:s}}return null}async function je(e,a,t){let o=await te(process.cwd(),e);if(o){t&&console.log(`
115
- \u{1F5C4}\uFE0F Uploading to ${o.provider}...`);try{let n=await(await chunkXR3EVOXW_cjs.a(o)).upload(a);n.success?console.log(`\u{1F5C4}\uFE0F ${n.message} (${o.provider})`):console.log(`\u26A0\uFE0F Database upload failed: ${n.error}`);}catch(s){console.log(`\u26A0\uFE0F Database upload error: ${s instanceof Error?s.message:s}`);}}}be().catch(e=>{console.error("Fatal error:",e),process.exit(1);});
112
+ `)),u&&(console.log(`
113
+ \u{1F5C4}\uFE0F Supabase \uC5F0\uB3D9\uC774 \uC124\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4.`),console.log(` \uD658\uACBD\uBCC0\uC218: \${${u.urlEnvName}}, \${${u.serviceRoleKeyEnvName}}`),console.log(`
114
+ \u{1F4CB} Supabase\uC5D0\uC11C \uD14C\uC774\uBE14\uC744 \uC0DD\uC131\uD558\uC138\uC694:
115
+ `),console.log(` CREATE TABLE ${u.tableName} (`),console.log(" id UUID DEFAULT gen_random_uuid() PRIMARY KEY,"),console.log(" project_id TEXT UNIQUE NOT NULL,"),console.log(" metadata JSONB NOT NULL,"),console.log(" created_at TIMESTAMPTZ DEFAULT NOW(),"),console.log(" updated_at TIMESTAMPTZ DEFAULT NOW()"),console.log(` );
116
+ `));}finally{F();}}function T(e){if(!e||typeof e!="string")return e;if(e.startsWith("${")&&e.endsWith("}")){let s=e.slice(2,-1);return process.env[s]||""}return e}async function te(e,s){let t=s.output?.database;if(!t||!t.enabled)return null;if(t.provider==="supabase"&&t.supabase){let{supabase:a}=t,o=T(a.url),n=T(a.serviceRoleKey);return !o||!n?(console.log("\u26A0\uFE0F Supabase \uD658\uACBD\uBCC0\uC218\uAC00 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."),a.url.startsWith("${")&&console.log(` ${a.url.slice(2,-1)}\uC744(\uB97C) \uC124\uC815\uD574\uC8FC\uC138\uC694.`),a.serviceRoleKey.startsWith("${")&&console.log(` ${a.serviceRoleKey.slice(2,-1)}\uC744(\uB97C) \uC124\uC815\uD574\uC8FC\uC138\uC694.`),null):{provider:"supabase",enabled:true,url:o,serviceRoleKey:n,tableName:a.tableName,fields:{projectId:a.fields.projectId,metadata:a.fields.metadata,createdAt:a.fields.createdAt,updatedAt:a.fields.updatedAt}}}if(t.provider==="custom"&&t.custom){let{custom:a}=t,o={};if(a.headers)for(let[n,i]of Object.entries(a.headers))o[n]=T(i);return {provider:"custom",enabled:true,endpoint:T(a.endpoint),method:a.method,headers:o}}return null}async function ve(e,s,t){let a=await te(process.cwd(),e);if(a){t&&console.log(`
117
+ \u{1F5C4}\uFE0F Uploading to ${a.provider}...`);try{let n=await(await chunkXR3EVOXW_cjs.a(a)).upload(s);n.success?console.log(`\u{1F5C4}\uFE0F ${n.message} (${a.provider})`):console.log(`\u26A0\uFE0F Database upload failed: ${n.error}`);}catch(o){console.log(`\u26A0\uFE0F Database upload error: ${o instanceof Error?o.message:o}`);}}}he().catch(e=>{console.error("Fatal error:",e),process.exit(1);});
package/dist/cli.js CHANGED
@@ -1,48 +1,50 @@
1
1
  #!/usr/bin/env node
2
- import {a}from'./chunk-ESZLTJIF.js';import {d,y as y$1,z as z$1,A}from'./chunk-SEPU4O45.js';import {parseArgs}from'util';import*as m from'path';import*as b from'fs/promises';import*as D from'readline';async function oe(e){let a=[{file:"pnpm-lock.yaml",manager:"pnpm"},{file:"yarn.lock",manager:"yarn"},{file:"package-lock.json",manager:"npm"}];for(let{file:t,manager:o}of a)try{return await b.access(m.join(e,t)),o}catch{}return "npm"}async function ae(e){let a={};try{let o=await b.readFile(m.join(e,"package.json"),"utf-8");a=JSON.parse(o);}catch{return "unknown"}let t={...a.dependencies||{},...a.devDependencies||{}};return t.next?await v(m.join(e,"app"))||await v(m.join(e,"src","app"))?"nextjs-app":"nextjs-pages":t.vite?"vite":t["react-scripts"]?"cra":t.express||t.fastify||t.koa?"node":"unknown"}async function U(e){let[a,t]=await Promise.all([ae(e),oe(e)]),o=await se(m.join(e,"tsconfig.json")),s=await v(m.join(e,"src")),n=["app","pages","components","hooks","services","lib","utils","api","src/app","src/pages","src/components","src/hooks","src/services","src/lib","src/utils"],c=[];for(let i of n)await v(m.join(e,i))&&c.push(i);let r=await v(m.join(e,"prisma")),g=await v(m.join(e,"supabase"));return {type:a,packageManager:t,hasTypescript:o,hasSrc:s,existingFolders:c,hasPrisma:r,hasSupabase:g}}async function se(e){try{return (await b.stat(e)).isFile()}catch{return false}}async function v(e){try{return (await b.stat(e)).isDirectory()}catch{return false}}function L(e){return {"nextjs-app":"Next.js (App Router)","nextjs-pages":"Next.js (Pages Router)",vite:"Vite + React",cra:"Create React App",node:"Node.js Backend",unknown:"Unknown"}[e]}var _=D.createInterface({input:process.stdin,output:process.stdout});function y(e){return new Promise(a=>{_.question(e,a);})}function O(){_.close();}async function F(e){let a=[{key:"1",type:"nextjs-app",label:"Next.js (App Router)"},{key:"2",type:"nextjs-pages",label:"Next.js (Pages Router)"},{key:"3",type:"vite",label:"Vite + React"},{key:"4",type:"cra",label:"Create React App"},{key:"5",type:"node",label:"Node.js Backend"}],t=a.findIndex(r=>r.type===e),o=t>=0?a[t].key:"1";console.log(`
3
- \u{1F4E6} \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(r=>{let i=r.type===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.label}${i}`);});let n=(await y(`
4
- \uC120\uD0DD [${o}]: `)).trim()||o;return a.find(r=>r.key===n)?.type||e}async function M(e){let a=[{key:"1",manager:"npm"},{key:"2",manager:"yarn"},{key:"3",manager:"pnpm"}],t=a.findIndex(r=>r.manager===e),o=t>=0?a[t].key:"1";console.log(`
5
- \u{1F4E6} \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(r=>{let i=r.manager===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.manager}${i}`);});let n=(await y(`
6
- \uC120\uD0DD [${o}]: `)).trim()||o;return a.find(r=>r.key===n)?.manager||e}async function B(e){if(e==="node"||e==="unknown")return false;let a=e.startsWith("nextjs")?"next.config":"vite.config";return console.log(`
7
- \u{1F527} ${a} \uD30C\uC77C\uC5D0 metadatafy \uD50C\uB7EC\uADF8\uC778\uC744 \uC790\uB3D9\uC73C\uB85C \uCD94\uAC00\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."),(await y(`
8
- \uCD94\uAC00\uD560\uAE4C\uC694? [Y/n]: `)).trim().toLowerCase()!=="n"}async function K(){return console.log(`
9
- \u2601\uFE0F API \uC5D4\uB4DC\uD3EC\uC778\uD2B8\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC804\uC1A1\uD560\uAE4C\uC694?`),console.log(" \uBE48\uCE78\uC73C\uB85C \uB450\uBA74 \uD30C\uC77C\uB9CC \uC0DD\uC131\uB429\uB2C8\uB2E4."),(await y(`
10
- API URL (\uC120\uD0DD\uC0AC\uD56D): `)).trim()||null}async function W(e,a=true){let s=(await y(`${e} ${a?"[Y/n]":"[y/N]"}: `)).trim().toLowerCase();return s===""?a:s==="y"||s==="yes"}async function V(){return console.log(`
11
- \u{1F5C4}\uFE0F Supabase\uC5D0 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC790\uB3D9 \uC800\uC7A5\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC5C5\uB85C\uB4DC\uB429\uB2C8\uB2E4."),(await y(`
12
- Supabase \uC5F0\uB3D9 \uC124\uC815? [y/N]: `)).trim().toLowerCase()==="y"}async function J(){console.log(`
13
- \u{1F527} Supabase \uC124\uC815`),console.log(`Settings > API\uC5D0\uC11C \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
14
- `),console.log("\u{1F4A1} \uD658\uACBD\uBCC0\uC218 \uC774\uB984\uC744 \uC785\uB825\uD558\uBA74 ${VAR} \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5\uB429\uB2C8\uB2E4."),console.log(" \uC608: SUPABASE_URL \u2192 ${SUPABASE_URL}\n");let e=await y("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),a=await y("Service Role Key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: "),t=await y("\uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: "),o=e.trim()||"SUPABASE_URL",s=a.trim()||"SUPABASE_SERVICE_ROLE_KEY",n=t.trim()||"project_metadata";return {url:`\${${o}}`,serviceRoleKey:`\${${s}}`,tableName:n}}function ne(e){let{projectType:a,projectInfo:t}=e,o=[],s=t.hasTypescript?"{ts,tsx}":"{js,jsx}";switch(a){case "nextjs-app":t.hasSrc?o.push(`src/app/**/*.${s}`):o.push(`app/**/*.${s}`),o.push(`components/**/*.${s}`),o.push(`hooks/**/*.${s}`),o.push(`lib/**/*.${s}`);break;case "nextjs-pages":t.hasSrc?o.push(`src/pages/**/*.${s}`):o.push(`pages/**/*.${s}`),o.push(`components/**/*.${s}`),o.push(`hooks/**/*.${s}`),o.push(`lib/**/*.${s}`);break;case "vite":case "cra":o.push(`src/**/*.${s}`);break;case "node":o.push(`src/**/*.${t.hasTypescript?"ts":"js"}`),o.push(`routes/**/*.${t.hasTypescript?"ts":"js"}`),o.push(`controllers/**/*.${t.hasTypescript?"ts":"js"}`);break;default:o.push(`src/**/*.${s}`);}return t.hasPrisma&&o.push("prisma/migrations/**/*.sql"),t.hasSupabase&&o.push("supabase/migrations/*.sql"),o}async function z(e,a,t){let o=m.join(e,"metadata.config.json"),s={projectId:a,include:ne(t),exclude:["**/node_modules/**","**/.next/**","**/dist/**","**/build/**","**/*.test.{ts,tsx,js,jsx}","**/*.spec.{ts,tsx,js,jsx}","**/__tests__/**"],output:{file:{enabled:true,path:"project-metadata.json"},api:{enabled:!!t.apiEndpoint,endpoint:t.apiEndpoint||""},...t.supabase&&{database:{enabled:true,provider:"supabase",supabase:{url:t.supabase.url,serviceRoleKey:t.supabase.serviceRoleKey,tableName:t.supabase.tableName,fields:{projectId:"project_id",metadata:"metadata",createdAt:"created_at",updatedAt:"updated_at"}}}}},koreanKeywords:{},verbose:false};return await b.writeFile(o,JSON.stringify(s,null,2)),o}async function Y(e){let a=["vite.config.ts","vite.config.js","vite.config.mts","vite.config.mjs"];for(let t of a){let o=m.join(e,t);try{let s=await b.readFile(o,"utf-8");if(s.includes("metadatafy"))return !0;let n=`import metadatafy from 'metadatafy/vite';
15
- `;return s.includes("from 'vite'")?s=s.replace(/^(import .+ from ['"]vite['"];?\n)/m,`$1${n}`):s=n+s,s.includes("plugins:")?s=s.replace(/plugins:\s*\[/,`plugins: [
16
- metadatafy(),`):s.includes("defineConfig(")&&(s=s.replace(/defineConfig\(\{/,`defineConfig({
17
- plugins: [metadatafy()],`)),await b.writeFile(o,s),!0}catch{}}return false}async function q(e){let a=["next.config.ts","next.config.mjs","next.config.js"];for(let t of a){let o=m.join(e,t);try{let s=await b.readFile(o,"utf-8");if(s.includes("metadatafy")||s.includes("withMetadatafy"))return !0;let n=t.endsWith(".ts");return s=(t.endsWith(".mjs")||n?`import { withMetadatafy } from 'metadatafy/next';
2
+ import {a}from'./chunk-ESZLTJIF.js';import {d,y,z as z$1,A}from'./chunk-IJXLAS7T.js';import {b as b$1}from'./chunk-BJMCLX3M.js';import {parseArgs}from'util';import*as f from'path';import*as m from'fs/promises';import*as _ from'readline';async function oe(e){let s=[{file:"pnpm-lock.yaml",manager:"pnpm"},{file:"yarn.lock",manager:"yarn"},{file:"package-lock.json",manager:"npm"}];for(let{file:t,manager:a}of s)try{return await m.access(f.join(e,t)),a}catch{}return "npm"}async function ae(e){let s={};try{let a=await m.readFile(f.join(e,"package.json"),"utf-8");s=JSON.parse(a);}catch{return "unknown"}let t={...s.dependencies||{},...s.devDependencies||{}};return t.next?await S(f.join(e,"app"))||await S(f.join(e,"src","app"))?"nextjs-app":"nextjs-pages":t.vite?"vite":t["react-scripts"]?"cra":t.express||t.fastify||t.koa?"node":"unknown"}async function D(e){let[s,t]=await Promise.all([ae(e),oe(e)]),a=await se(f.join(e,"tsconfig.json")),o=await S(f.join(e,"src")),n=["app","pages","components","hooks","services","lib","utils","api","src/app","src/pages","src/components","src/hooks","src/services","src/lib","src/utils"],i=[];for(let c of n)await S(f.join(e,c))&&i.push(c);let r=await S(f.join(e,"prisma")),u=await S(f.join(e,"supabase"));return {type:s,packageManager:t,hasTypescript:a,hasSrc:o,existingFolders:i,hasPrisma:r,hasSupabase:u}}async function se(e){try{return (await m.stat(e)).isFile()}catch{return false}}async function S(e){try{return (await m.stat(e)).isDirectory()}catch{return false}}function O(e){return {"nextjs-app":"Next.js (App Router)","nextjs-pages":"Next.js (Pages Router)",vite:"Vite + React",cra:"Create React App",node:"Node.js Backend",unknown:"Unknown"}[e]}var x=null;function ne(){return x||(x=_.createInterface({input:process.stdin,output:process.stdout,terminal:false})),x}function b(e){return new Promise(s=>{process.stdout.write(e),ne().once("line",t=>{s(t);});})}function F(){x&&(x.close(),x=null);}async function M(e){let s=[{key:"1",type:"nextjs-app",label:"Next.js (App Router)"},{key:"2",type:"nextjs-pages",label:"Next.js (Pages Router)"},{key:"3",type:"vite",label:"Vite + React"},{key:"4",type:"cra",label:"Create React App"},{key:"5",type:"node",label:"Node.js Backend"}],t=s.findIndex(r=>r.type===e),a=t>=0?s[t].key:"1";console.log(`
3
+ \u{1F4E6} \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),s.forEach(r=>{let c=r.type===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.label}${c}`);});let n=(await b(`
4
+ \uC120\uD0DD [${a}]: `)).trim()||a;return s.find(r=>r.key===n)?.type||e}async function B(e){let s=[{key:"1",manager:"npm"},{key:"2",manager:"yarn"},{key:"3",manager:"pnpm"}],t=s.findIndex(r=>r.manager===e),a=t>=0?s[t].key:"1";console.log(`
5
+ \u{1F4E6} \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),s.forEach(r=>{let c=r.manager===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.manager}${c}`);});let n=(await b(`
6
+ \uC120\uD0DD [${a}]: `)).trim()||a;return s.find(r=>r.key===n)?.manager||e}async function K(e){if(e==="node"||e==="unknown")return false;let s=e.startsWith("nextjs")?"next.config":"vite.config";return console.log(`
7
+ \u{1F527} ${s} \uD30C\uC77C\uC5D0 metadatafy \uD50C\uB7EC\uADF8\uC778\uC744 \uC790\uB3D9\uC73C\uB85C \uCD94\uAC00\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."),(await b(`
8
+ \uCD94\uAC00\uD560\uAE4C\uC694? [Y/n]: `)).trim().toLowerCase()!=="n"}async function W(e,s=true){let o=(await b(`${e} ${s?"[Y/n]":"[y/N]"}: `)).trim().toLowerCase();return o===""?s:o==="y"||o==="yes"}async function J(){return console.log(`
9
+ \u{1F5C4}\uFE0F Supabase\uC5D0 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC790\uB3D9 \uC800\uC7A5\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC5C5\uB85C\uB4DC\uB429\uB2C8\uB2E4."),(await b(`
10
+ Supabase \uC5F0\uB3D9 \uC124\uC815? [y/N]: `)).trim().toLowerCase()==="y"}async function V(e={}){console.log(`
11
+ \u{1F527} Supabase \uC124\uC815`),console.log(`\uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C \uC0AC\uC6A9 \uC911\uC778 \uD658\uACBD\uBCC0\uC218 \uC774\uB984\uC744 \uC785\uB825\uD558\uC138\uC694.
12
+ `);let s=Object.keys(e).filter(l=>l.toLowerCase().includes("supabase"));s.length>0&&(console.log("\u{1F4CB} \uAC10\uC9C0\uB41C Supabase \uAD00\uB828 \uD658\uACBD\uBCC0\uC218:"),s.forEach(l=>console.log(` - ${l}`)),console.log(""));let t=await b("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),a=await b("Service Role Key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: "),o=t.trim()||"SUPABASE_URL",n=a.trim()||"SUPABASE_SERVICE_ROLE_KEY",i=!!e[o],r=!!e[n];if(i&&r)console.log(`
13
+ \u2705 .env \uD30C\uC77C\uC5D0\uC11C \uD658\uACBD\uBCC0\uC218\uB97C \uCC3E\uC558\uC2B5\uB2C8\uB2E4:`),console.log(` ${o}: ${e[o].substring(0,30)}...`),console.log(` ${n}: ****${e[n].slice(-8)}`);else {let l=[];i||l.push(o),r||l.push(n),console.log(`
14
+ \u26A0\uFE0F .env \uD30C\uC77C\uC5D0 \uB2E4\uC74C \uD658\uACBD\uBCC0\uC218\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4:`),l.forEach(p=>console.log(` - ${p}`)),console.log(`
15
+ \uB098\uC911\uC5D0 .env \uD30C\uC77C\uC5D0 \uCD94\uAC00\uD574\uC8FC\uC138\uC694.`);}let c=(await b(`
16
+ \uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: `)).trim()||"project_metadata";return {urlEnvName:o,serviceRoleKeyEnvName:n,tableName:c}}function re(e){let{projectType:s,projectInfo:t}=e,a=[],o=t.hasTypescript?"{ts,tsx}":"{js,jsx}";switch(s){case "nextjs-app":t.hasSrc?a.push(`src/app/**/*.${o}`):a.push(`app/**/*.${o}`),a.push(`components/**/*.${o}`),a.push(`hooks/**/*.${o}`),a.push(`lib/**/*.${o}`);break;case "nextjs-pages":t.hasSrc?a.push(`src/pages/**/*.${o}`):a.push(`pages/**/*.${o}`),a.push(`components/**/*.${o}`),a.push(`hooks/**/*.${o}`),a.push(`lib/**/*.${o}`);break;case "vite":case "cra":a.push(`src/**/*.${o}`);break;case "node":a.push(`src/**/*.${t.hasTypescript?"ts":"js"}`),a.push(`routes/**/*.${t.hasTypescript?"ts":"js"}`),a.push(`controllers/**/*.${t.hasTypescript?"ts":"js"}`);break;default:a.push(`src/**/*.${o}`);}return t.hasPrisma&&a.push("prisma/migrations/**/*.sql"),t.hasSupabase&&a.push("supabase/migrations/*.sql"),a}async function z(e,s,t){let a=f.join(e,"metadata.config.json"),o={projectId:s,include:re(t),exclude:["**/node_modules/**","**/.next/**","**/dist/**","**/build/**","**/*.test.{ts,tsx,js,jsx}","**/*.spec.{ts,tsx,js,jsx}","**/__tests__/**"],output:{file:{enabled:true,path:"project-metadata.json"},...t.supabase&&{database:{enabled:true,provider:"supabase",supabase:{url:`\${${t.supabase.urlEnvName}}`,serviceRoleKey:`\${${t.supabase.serviceRoleKeyEnvName}}`,tableName:t.supabase.tableName,fields:{projectId:"project_id",metadata:"metadata",createdAt:"created_at",updatedAt:"updated_at"}}}}},koreanKeywords:{},verbose:false};return await m.writeFile(a,JSON.stringify(o,null,2)),a}async function Y(e){let s=["vite.config.ts","vite.config.js","vite.config.mts","vite.config.mjs"];for(let t of s){let a=f.join(e,t);try{let o=await m.readFile(a,"utf-8");if(o.includes("metadatafy"))return !0;let n=`import metadatafy from 'metadatafy/vite';
17
+ `;return o.includes("from 'vite'")?o=o.replace(/^(import .+ from ['"]vite['"];?\n)/m,`$1${n}`):o=n+o,o.includes("plugins:")?o=o.replace(/plugins:\s*\[/,`plugins: [
18
+ metadatafy(),`):o.includes("defineConfig(")&&(o=o.replace(/defineConfig\(\{/,`defineConfig({
19
+ plugins: [metadatafy()],`)),await m.writeFile(a,o),!0}catch{}}return false}async function q(e){let s=["next.config.ts","next.config.mjs","next.config.js"];for(let t of s){let a=f.join(e,t);try{let o=await m.readFile(a,"utf-8");if(o.includes("metadatafy")||o.includes("withMetadatafy"))return !0;let n=t.endsWith(".ts");return o=(t.endsWith(".mjs")||n?`import { withMetadatafy } from 'metadatafy/next';
18
20
  `:`const { withMetadatafy } = require('metadatafy/next');
19
- `)+s,s.includes("export default")?(s=s.replace(/export default\s+({[\s\S]*?});?\s*$/m,"export default withMetadatafy($1);"),s=s.replace(/export default\s+(\w+);?\s*$/m,"export default withMetadatafy($1);")):s.includes("module.exports")&&(s=s.replace(/module\.exports\s*=\s*({[\s\S]*?});?\s*$/m,"module.exports = withMetadatafy($1);"),s=s.replace(/module\.exports\s*=\s*(\w+);?\s*$/m,"module.exports = withMetadatafy($1);")),await b.writeFile(o,s),!0}catch{}}return false}function H(e){switch(e){case "yarn":return "yarn add -D metadatafy";case "pnpm":return "pnpm add -D metadatafy";default:return "npm install -D metadatafy"}}var X=D.createInterface({input:process.stdin,output:process.stdout});function f(e){return new Promise(a=>{X.question(e,a);})}function Z(e){return new Promise(a=>{process.stdout.write(e);let t=process.stdin,o=t.isRaw;t.isTTY&&t.setRawMode(true);let s="",n=c=>{let r=c.toString("utf8");switch(r){case `
20
- `:case "\r":case "":t.isTTY&&t.setRawMode(o),t.removeListener("data",n),process.stdout.write(`
21
- `),a(s);break;case "":process.exit();break;case "\x7F":s.length>0&&(s=s.slice(0,-1),process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(e+"*".repeat(s.length)));break;default:s+=r,process.stdout.write("*");break}};t.on("data",n),t.resume();})}function re(){X.close();}async function ie(){return console.log(`
22
- \u{1F4E6} \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uD504\uB85C\uBC14\uC774\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) Supabase"),console.log(" 2) Custom API (\uC9C1\uC811 \uC124\uC815)"),console.log(" (Firebase, PlanetScale \uB4F1\uC740 \uCD94\uD6C4 \uC9C0\uC6D0 \uC608\uC815)"),((await f(`
23
- \uC120\uD0DD [1]: `)).trim()||"1")==="2"?"custom":"supabase"}async function ce(){return console.log(`
24
- \u{1F510} \uC778\uC99D \uC815\uBCF4 \uC800\uC7A5 \uBC29\uC2DD\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) \uD658\uACBD\uBCC0\uC218 \uCC38\uC870 \uC0AC\uC6A9 (\uAD8C\uC7A5) - ${SUPABASE_URL} \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5"),console.log(" 2) \uC9C1\uC811 \uAC12 \uC800\uC7A5 (\uBE44\uAD8C\uC7A5) - \uC2E4\uC81C \uAC12\uC744 config\uC5D0 \uC800\uC7A5"),(await f(`
25
- \uC120\uD0DD [1]: `)).trim()!=="2"}async function le(e){console.log(`
21
+ `)+o,o.includes("export default")?(o=o.replace(/export default\s+({[\s\S]*?});?\s*$/m,"export default withMetadatafy($1);"),o=o.replace(/export default\s+(\w+);?\s*$/m,"export default withMetadatafy($1);")):o.includes("module.exports")&&(o=o.replace(/module\.exports\s*=\s*({[\s\S]*?});?\s*$/m,"module.exports = withMetadatafy($1);"),o=o.replace(/module\.exports\s*=\s*(\w+);?\s*$/m,"module.exports = withMetadatafy($1);")),await m.writeFile(a,o),!0}catch{}}return false}function H(e){switch(e){case "yarn":return "yarn add -D metadatafy";case "pnpm":return "pnpm add -D metadatafy";default:return "npm install -D metadatafy"}}var X=_.createInterface({input:process.stdin,output:process.stdout});function g(e){return new Promise(s=>{X.question(e,s);})}function Z(e){return new Promise(s=>{process.stdout.write(e);let t=process.stdin,a=t.isRaw;t.isTTY&&t.setRawMode(true);let o="",n=i=>{let r=i.toString("utf8");switch(r){case `
22
+ `:case "\r":case "":t.isTTY&&t.setRawMode(a),t.removeListener("data",n),process.stdout.write(`
23
+ `),s(o);break;case "":process.exit();break;case "\x7F":o.length>0&&(o=o.slice(0,-1),process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(e+"*".repeat(o.length)));break;default:o+=r,process.stdout.write("*");break}};t.on("data",n),t.resume();})}function ie(){X.close();}async function ce(){return console.log(`
24
+ \u{1F4E6} \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uD504\uB85C\uBC14\uC774\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) Supabase"),console.log(" 2) Custom API (\uC9C1\uC811 \uC124\uC815)"),console.log(" (Firebase, PlanetScale \uB4F1\uC740 \uCD94\uD6C4 \uC9C0\uC6D0 \uC608\uC815)"),((await g(`
25
+ \uC120\uD0DD [1]: `)).trim()||"1")==="2"?"custom":"supabase"}async function le(){return console.log(`
26
+ \u{1F510} \uC778\uC99D \uC815\uBCF4 \uC800\uC7A5 \uBC29\uC2DD\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) \uD658\uACBD\uBCC0\uC218 \uCC38\uC870 \uC0AC\uC6A9 (\uAD8C\uC7A5) - ${SUPABASE_URL} \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5"),console.log(" 2) \uC9C1\uC811 \uAC12 \uC800\uC7A5 (\uBE44\uAD8C\uC7A5) - \uC2E4\uC81C \uAC12\uC744 config\uC5D0 \uC800\uC7A5"),(await g(`
27
+ \uC120\uD0DD [1]: `)).trim()!=="2"}async function pe(e){console.log(`
26
28
  \u{1F527} Supabase \uC124\uC815
27
29
  `),console.log("Supabase \uB300\uC2DC\uBCF4\uB4DC\uC5D0\uC11C \uB2E4\uC74C \uC815\uBCF4\uB97C \uD655\uC778\uD558\uC138\uC694:"),console.log(`Settings > API > Project URL, service_role key
28
- `);let a,t,o,s;if(e){let x=await f("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),u=await f("Supabase service role key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: ");o=`\${${x.trim()||"SUPABASE_URL"}}`,s=`\${${u.trim()||"SUPABASE_SERVICE_ROLE_KEY"}}`,console.log(`
29
- \uC5F0\uACB0 \uD14C\uC2A4\uD2B8\uB97C \uC704\uD574 \uC2E4\uC81C \uAC12\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694 (\uC800\uC7A5\uB418\uC9C0 \uC54A\uC74C):`),a=await f("Supabase URL: "),t=await Z("Supabase service role key: ");}else a=await f("Supabase URL (\uC608: https://xxx.supabase.co): "),t=await Z("Supabase service role key: "),o=a.trim(),s=t;if(!a.trim()||!t)throw new Error("Supabase URL\uACFC service role key\uB294 \uD544\uC218\uC785\uB2C8\uB2E4.");let c=(await f(`
30
+ `);let s,t,a,o;if(e){let j=await g("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),v=await g("Supabase service role key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: ");a=`\${${j.trim()||"SUPABASE_URL"}}`,o=`\${${v.trim()||"SUPABASE_SERVICE_ROLE_KEY"}}`,console.log(`
31
+ \uC5F0\uACB0 \uD14C\uC2A4\uD2B8\uB97C \uC704\uD574 \uC2E4\uC81C \uAC12\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694 (\uC800\uC7A5\uB418\uC9C0 \uC54A\uC74C):`),s=await g("Supabase URL: "),t=await Z("Supabase service role key: ");}else s=await g("Supabase URL (\uC608: https://xxx.supabase.co): "),t=await Z("Supabase service role key: "),a=s.trim(),o=t;if(!s.trim()||!t)throw new Error("Supabase URL\uACFC service role key\uB294 \uD544\uC218\uC785\uB2C8\uB2E4.");let i=(await g(`
30
32
  \uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: `)).trim()||"project_metadata";console.log(`
31
33
  \u{1F4DD} \uD544\uB4DC \uB9E4\uD551 \uC124\uC815`),console.log(`\uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC800\uC7A5\uD560 \uCEEC\uB7FC \uC774\uB984\uC744 \uC785\uB825\uD558\uC138\uC694.
32
- `);let r=await f("\uD504\uB85C\uC81D\uD2B8 ID \uD544\uB4DC [project_id]: "),g=await f("\uBA54\uD0C0\uB370\uC774\uD130 JSON \uD544\uB4DC [metadata]: "),i=await f('\uC0DD\uC131 \uC2DC\uAC04 \uD544\uB4DC (\uBE48\uCE78=created_at, "none"=\uC0AC\uC6A9\uC548\uD568) [created_at]: '),p=await f('\uC5C5\uB370\uC774\uD2B8 \uC2DC\uAC04 \uD544\uB4DC (\uBE48\uCE78=updated_at, "none"=\uC0AC\uC6A9\uC548\uD568) [updated_at]: ');return {config:{enabled:true,provider:"supabase",supabase:{url:o,serviceRoleKey:s,tableName:c,fields:{projectId:r.trim()||"project_id",metadata:g.trim()||"metadata",...i.trim().toLowerCase()!=="none"&&{createdAt:i.trim()||"created_at"},...p.trim().toLowerCase()!=="none"&&{updatedAt:p.trim()||"updated_at"}}}},actualValues:{url:a.trim(),serviceRoleKey:t}}}async function pe(e,a$1){if(console.log(`
33
- \u{1F50C} \uC5F0\uACB0 \uD14C\uC2A4\uD2B8 \uC911...`),e.provider!=="supabase"||!e.supabase)return true;let t={provider:"supabase",enabled:true,url:a$1.url,serviceRoleKey:a$1.serviceRoleKey,tableName:e.supabase.tableName,fields:{projectId:e.supabase.fields.projectId,metadata:e.supabase.fields.metadata,createdAt:e.supabase.fields.createdAt,updatedAt:e.supabase.fields.updatedAt}};try{return await(await a(t)).testConnection()?(console.log("\u2705 \uC5F0\uACB0 \uC131\uACF5!"),!0):(console.log("\u274C \uC5F0\uACB0 \uC2E4\uD328. \uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694."),!1)}catch(o){return console.log(`\u274C \uC5F0\uACB0 \uC624\uB958: ${o instanceof Error?o.message:o}`),false}}async function ue(e,a){let t=m.join(e,"metadata.config.json"),o={};try{let n=await b.readFile(t,"utf-8");o=JSON.parse(n);}catch{o={projectId:m.basename(e),include:["src/**/*.{ts,tsx}"],exclude:["**/node_modules/**","**/*.test.{ts,tsx}"],output:{}};}let s=o.output||{};return s.database=a,o.output=s,await b.writeFile(t,JSON.stringify(o,null,2)),t}function de(e){if(!e.supabase)return;let{tableName:a,fields:t}=e.supabase;console.log(`
34
+ `);let r=await g("\uD504\uB85C\uC81D\uD2B8 ID \uD544\uB4DC [project_id]: "),u=await g("\uBA54\uD0C0\uB370\uC774\uD130 JSON \uD544\uB4DC [metadata]: "),c=await g('\uC0DD\uC131 \uC2DC\uAC04 \uD544\uB4DC (\uBE48\uCE78=created_at, "none"=\uC0AC\uC6A9\uC548\uD568) [created_at]: '),l=await g('\uC5C5\uB370\uC774\uD2B8 \uC2DC\uAC04 \uD544\uB4DC (\uBE48\uCE78=updated_at, "none"=\uC0AC\uC6A9\uC548\uD568) [updated_at]: ');return {config:{enabled:true,provider:"supabase",supabase:{url:a,serviceRoleKey:o,tableName:i,fields:{projectId:r.trim()||"project_id",metadata:u.trim()||"metadata",...c.trim().toLowerCase()!=="none"&&{createdAt:c.trim()||"created_at"},...l.trim().toLowerCase()!=="none"&&{updatedAt:l.trim()||"updated_at"}}}},actualValues:{url:s.trim(),serviceRoleKey:t}}}async function ue(e,s){if(console.log(`
35
+ \u{1F50C} \uC5F0\uACB0 \uD14C\uC2A4\uD2B8 \uC911...`),e.provider!=="supabase"||!e.supabase)return true;let t={provider:"supabase",enabled:true,url:s.url,serviceRoleKey:s.serviceRoleKey,tableName:e.supabase.tableName,fields:{projectId:e.supabase.fields.projectId,metadata:e.supabase.fields.metadata,createdAt:e.supabase.fields.createdAt,updatedAt:e.supabase.fields.updatedAt}};try{return await(await a(t)).testConnection()?(console.log("\u2705 \uC5F0\uACB0 \uC131\uACF5!"),!0):(console.log("\u274C \uC5F0\uACB0 \uC2E4\uD328. \uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694."),!1)}catch(a){return console.log(`\u274C \uC5F0\uACB0 \uC624\uB958: ${a instanceof Error?a.message:a}`),false}}async function de(e,s){let t=f.join(e,"metadata.config.json"),a={};try{let n=await m.readFile(t,"utf-8");a=JSON.parse(n);}catch{a={projectId:f.basename(e),include:["src/**/*.{ts,tsx}"],exclude:["**/node_modules/**","**/*.test.{ts,tsx}"],output:{}};}let o=a.output||{};return o.database=s,a.output=o,await m.writeFile(t,JSON.stringify(a,null,2)),t}function ge(e){if(!e.supabase)return;let{tableName:s,fields:t}=e.supabase;console.log(`
34
36
  \u{1F4CB} Supabase\uC5D0\uC11C \uB2E4\uC74C SQL\uB85C \uD14C\uC774\uBE14\uC744 \uC0DD\uC131\uD558\uC138\uC694:
35
- `),console.log("```sql"),console.log(`CREATE TABLE ${a} (`),console.log(" id UUID DEFAULT gen_random_uuid() PRIMARY KEY,"),console.log(` ${t.projectId} TEXT UNIQUE NOT NULL,`),console.log(` ${t.metadata} JSONB NOT NULL,`),t.createdAt&&console.log(` ${t.createdAt} TIMESTAMPTZ DEFAULT NOW(),`),t.updatedAt&&console.log(` ${t.updatedAt} TIMESTAMPTZ DEFAULT NOW()`),console.log(");"),console.log(""),console.log("-- RLS \uC815\uCC45 (\uD544\uC694\uC2DC)"),console.log(`ALTER TABLE ${a} ENABLE ROW LEVEL SECURITY;`),console.log("```\n");}function ge(e){if(e.provider!=="supabase"||!e.supabase)return;let{url:a,serviceRoleKey:t}=e.supabase;if(a.startsWith("${")||t.startsWith("${")){if(console.log(`\u{1F510} .env \uD30C\uC77C\uC5D0 \uB2E4\uC74C \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694:
36
- `),a.startsWith("${")){let o=a.slice(2,-1);console.log(`${o}=https://your-project.supabase.co`);}if(t.startsWith("${")){let o=t.slice(2,-1);console.log(`${o}=your-service-role-key`);}console.log(`
37
+ `),console.log("```sql"),console.log(`CREATE TABLE ${s} (`),console.log(" id UUID DEFAULT gen_random_uuid() PRIMARY KEY,"),console.log(` ${t.projectId} TEXT UNIQUE NOT NULL,`),console.log(` ${t.metadata} JSONB NOT NULL,`),t.createdAt&&console.log(` ${t.createdAt} TIMESTAMPTZ DEFAULT NOW(),`),t.updatedAt&&console.log(` ${t.updatedAt} TIMESTAMPTZ DEFAULT NOW()`),console.log(");"),console.log(""),console.log("-- RLS \uC815\uCC45 (\uD544\uC694\uC2DC)"),console.log(`ALTER TABLE ${s} ENABLE ROW LEVEL SECURITY;`),console.log("```\n");}function fe(e){if(e.provider!=="supabase"||!e.supabase)return;let{url:s,serviceRoleKey:t}=e.supabase;if(s.startsWith("${")||t.startsWith("${")){if(console.log(`\u{1F510} .env \uD30C\uC77C\uC5D0 \uB2E4\uC74C \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694:
38
+ `),s.startsWith("${")){let a=s.slice(2,-1);console.log(`${a}=https://your-project.supabase.co`);}if(t.startsWith("${")){let a=t.slice(2,-1);console.log(`${a}=your-service-role-key`);}console.log(`
37
39
  \u{1F4A1} CI/CD \uD658\uACBD\uC5D0\uC11C\uB294 \uD574\uB2F9 \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD574\uC8FC\uC138\uC694.`),console.log(" GitHub Actions: Settings > Secrets and variables > Actions"),console.log(` Vercel: Project Settings > Environment Variables
38
- `);}}async function T(){let e=process.cwd();console.log(`
40
+ `);}}async function I(){let e=process.cwd();console.log(`
39
41
  \u{1F5C4}\uFE0F metadatafy \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815
40
- `),console.log("\uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4."),console.log("\uC124\uC815\uC740 metadata.config.json\uC5D0 \uC800\uC7A5\uB429\uB2C8\uB2E4.");try{if(await ie()!=="supabase"){console.log(`
42
+ `),console.log("\uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4."),console.log("\uC124\uC815\uC740 metadata.config.json\uC5D0 \uC800\uC7A5\uB429\uB2C8\uB2E4.");try{if(await ce()!=="supabase"){console.log(`
41
43
  \uD604\uC7AC Supabase\uB9CC \uC778\uD130\uB799\uD2F0\uBE0C \uC124\uC815\uC744 \uC9C0\uC6D0\uD569\uB2C8\uB2E4.`),console.log(`metadata.config.json\uC758 output.database\uB97C \uC9C1\uC811 \uC791\uC131\uD574\uC8FC\uC138\uC694.
42
- `);return}let t=await ce(),{config:o,actualValues:s}=await le(t);if(!await pe(o,s)&&(await f(`
43
- \uACC4\uC18D \uC9C4\uD589\uD560\uAE4C\uC694? [y/N]: `)).toLowerCase()!=="y"){console.log("\uC124\uC815\uC774 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");return}let c=await ue(e,o);console.log(`
44
- \u2705 \uC124\uC815 \uC800\uC7A5\uB428: ${m.relative(e,c)}`),de(o),ge(o),console.log("\u{1F389} \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4!"),console.log(`
45
- \u{1F4A1} \uC0AC\uC6A9\uBC95:`),console.log(" npx metadatafy analyze # \uBD84\uC11D + DB \uC5C5\uB85C\uB4DC"),console.log("");}finally{re();}}var fe="1.3.0",G=`
44
+ `);return}let t=await le(),{config:a,actualValues:o}=await pe(t);if(!await ue(a,o)&&(await g(`
45
+ \uACC4\uC18D \uC9C4\uD589\uD560\uAE4C\uC694? [y/N]: `)).toLowerCase()!=="y"){console.log("\uC124\uC815\uC774 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");return}let i=await de(e,a);console.log(`
46
+ \u2705 \uC124\uC815 \uC800\uC7A5\uB428: ${f.relative(e,i)}`),ge(a),fe(a),console.log("\u{1F389} \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4!"),console.log(`
47
+ \u{1F4A1} \uC0AC\uC6A9\uBC95:`),console.log(" npx metadatafy analyze # \uBD84\uC11D + DB \uC5C5\uB85C\uB4DC"),console.log("");}finally{ie();}}var me="1.3.1",G=`
46
48
  metadatafy - \uD504\uB85C\uC81D\uD2B8 \uBA54\uD0C0\uB370\uC774\uD130 \uCD94\uCD9C \uB3C4\uAD6C
47
49
 
48
50
  Usage:
@@ -64,7 +66,7 @@ Examples:
64
66
  metadatafy analyze --upload # \uBD84\uC11D + DB \uC5C5\uB85C\uB4DC
65
67
  metadatafy analyze --no-upload # \uBD84\uC11D\uB9CC (DB \uC5C5\uB85C\uB4DC \uC548\uD568)
66
68
  metadatafy upload # \uAE30\uC874 \uD30C\uC77C\uC744 DB\uC5D0 \uC5C5\uB85C\uB4DC
67
- `,me=`
69
+ `,ye=`
68
70
  Usage: metadatafy analyze [options]
69
71
 
70
72
  Options:
@@ -75,7 +77,7 @@ Options:
75
77
  --no-upload DB \uC5C5\uB85C\uB4DC \uC2A4\uD0B5
76
78
  --verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
77
79
  -h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
78
- `,ye=`
80
+ `,be=`
79
81
  Usage: metadatafy upload [options]
80
82
 
81
83
  \uAE30\uC874 \uBA54\uD0C0\uB370\uC774\uD130 JSON \uD30C\uC77C\uC744 \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC5C5\uB85C\uB4DC\uD569\uB2C8\uB2E4.
@@ -85,31 +87,31 @@ Options:
85
87
  -c, --config <path> \uC124\uC815 \uD30C\uC77C \uACBD\uB85C
86
88
  --verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
87
89
  -h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
88
- `;async function be(){let e=process.argv.slice(2);(e.length===0||e[0]==="-h"||e[0]==="--help")&&(console.log(G),process.exit(0)),(e[0]==="-v"||e[0]==="--version")&&(console.log(fe),process.exit(0));let a=e[0];switch(a){case "analyze":await he(e.slice(1));break;case "upload":await we(e.slice(1));break;case "init":await Pe();break;case "database-init":await T();break;default:console.error(`Unknown command: ${a}`),console.log(G),process.exit(1);}}async function he(e){let{values:a}=parseArgs({args:e,options:{"project-id":{type:"string",short:"p"},output:{type:"string",short:"o"},config:{type:"string",short:"c"},upload:{type:"boolean"},"no-upload":{type:"boolean"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});a.help&&(console.log(me),process.exit(0));let t=process.cwd(),o=a["project-id"]||m.basename(t),s=a.output||"project-metadata.json",n=a.verbose||false,c={};if(a.config)try{let p=await b.readFile(a.config,"utf-8");c=JSON.parse(p);}catch{console.error(`Failed to load config file: ${a.config}`),process.exit(1);}else {let p=m.join(t,"metadata.config.json");try{let l=await b.readFile(p,"utf-8");c=JSON.parse(l),n&&console.log(`Loaded config from ${p}`);}catch{}}let r=d({...c,projectId:o,verbose:n,output:{file:{enabled:true,path:s},...c.output}});console.log(`
89
- \u{1F4E6} Analyzing project: ${o}`),console.log(`\u{1F4C1} Root directory: ${t}
90
- `);let g=new y$1(r),i=new z$1(r);try{let p=Date.now(),l=await g.analyze(t),x=Date.now()-p,u=m.resolve(t,s);await i.write(l,u),r.output.api?.enabled&&r.output.api.endpoint&&(await new A(r).send(l),console.log(`\u2601\uFE0F Sent to API: ${r.output.api.endpoint}`)),a.upload||!a["no-upload"]&&c.output?.database?.enabled?await je(c,l,n):n&&console.log("\u2139\uFE0F DB upload skipped (use --upload to enable)"),console.log(`\u2705 Analysis completed in ${x}ms
91
- `),console.log("\u{1F4CA} Results:"),console.log(` Total files: ${l.stats.totalFiles}`),console.log(` - Routes: ${l.stats.byType.route}`),console.log(` - Components: ${l.stats.byType.component}`),console.log(` - Hooks: ${l.stats.byType.hook}`),console.log(` - Services: ${l.stats.byType.service}`),console.log(` - APIs: ${l.stats.byType.api}`),console.log(` - Tables: ${l.stats.byType.table}`),console.log(` - Utilities: ${l.stats.byType.utility}`),console.log(`
92
- \u{1F4C4} Output: ${u}`),l.stats.parseErrors.length>0&&(console.log(`
93
- \u26A0\uFE0F Parse errors (${l.stats.parseErrors.length}):`),l.stats.parseErrors.slice(0,5).forEach(A=>{console.log(` - ${A}`);}),l.stats.parseErrors.length>5&&console.log(` ... and ${l.stats.parseErrors.length-5} more`)),console.log("");}catch(p){console.error("\u274C Analysis failed:",p),process.exit(1);}}async function we(e){let{values:a$1}=parseArgs({args:e,options:{input:{type:"string",short:"i"},config:{type:"string",short:"c"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});a$1.help&&(console.log(ye),process.exit(0));let t=process.cwd(),o=a$1.input||"project-metadata.json",s=a$1.verbose||false,n={};if(a$1.config)try{let i=await b.readFile(a$1.config,"utf-8");n=JSON.parse(i);}catch{console.error(`Failed to load config file: ${a$1.config}`),process.exit(1);}else {let i=m.join(t,"metadata.config.json");try{let p=await b.readFile(i,"utf-8");n=JSON.parse(p),s&&console.log(`Loaded config from ${i}`);}catch{console.error("\u274C metadata.config.json \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy init \uC73C\uB85C \uC124\uC815\uC744 \uBA3C\uC800 \uC0DD\uC131\uD558\uC138\uC694."),process.exit(1);}}let c=m.resolve(t,o),r;try{let i=await b.readFile(c,"utf-8");r=JSON.parse(i);}catch{console.error(`\u274C \uBA54\uD0C0\uB370\uC774\uD130 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${c}`),console.log(" npx metadatafy analyze \uB85C \uBA3C\uC800 \uBD84\uC11D\uC744 \uC2E4\uD589\uD558\uC138\uC694."),process.exit(1);}console.log(`
94
- \u{1F4E4} Uploading metadata from: ${c}`);let g=await te(t,n);g||(console.error("\u274C \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy database-init \uC73C\uB85C \uC124\uC815\uC744 \uCD94\uAC00\uD558\uC138\uC694."),process.exit(1));try{let p=await(await a(g)).upload(r);p.success?console.log(`
95
- \u2705 ${p.message} (${g.provider})`):(console.error(`
96
- \u274C Upload failed: ${p.error}`),process.exit(1));}catch(i){console.error(`
97
- \u274C Upload error: ${i instanceof Error?i.message:i}`),process.exit(1);}}async function Pe(){let e=process.cwd(),a=m.basename(e);console.log(`
90
+ `;async function he(){let e=process.argv.slice(2);(e.length===0||e[0]==="-h"||e[0]==="--help")&&(console.log(G),process.exit(0)),(e[0]==="-v"||e[0]==="--version")&&(console.log(me),process.exit(0));let s=e[0];switch(s){case "analyze":await we(e.slice(1));break;case "upload":await Pe(e.slice(1));break;case "init":await je();break;case "database-init":await I();break;default:console.error(`Unknown command: ${s}`),console.log(G),process.exit(1);}}async function we(e){let{values:s}=parseArgs({args:e,options:{"project-id":{type:"string",short:"p"},output:{type:"string",short:"o"},config:{type:"string",short:"c"},upload:{type:"boolean"},"no-upload":{type:"boolean"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});s.help&&(console.log(ye),process.exit(0));let t=process.cwd();b$1(t,s.verbose);let a=s["project-id"]||f.basename(t),o=s.output||"project-metadata.json",n=s.verbose||false,i={};if(s.config)try{let l=await m.readFile(s.config,"utf-8");i=JSON.parse(l);}catch{console.error(`Failed to load config file: ${s.config}`),process.exit(1);}else {let l=f.join(t,"metadata.config.json");try{let p=await m.readFile(l,"utf-8");i=JSON.parse(p),n&&console.log(`Loaded config from ${l}`);}catch{}}let r=d({...i,projectId:a,verbose:n,output:{file:{enabled:true,path:o},...i.output}});console.log(`
91
+ \u{1F4E6} Analyzing project: ${a}`),console.log(`\u{1F4C1} Root directory: ${t}
92
+ `);let u=new y(r),c=new z$1(r);try{let l=Date.now(),p=await u.analyze(t),j=Date.now()-l,v=f.resolve(t,o);if(await c.write(p,v),r.output.api?.enabled&&r.output.api.endpoint)try{new URL(r.output.api.endpoint),await new A(r).send(p),console.log(`\u2601\uFE0F Sent to API: ${r.output.api.endpoint}`);}catch{n&&console.log(`\u26A0\uFE0F Invalid API endpoint, skipping: ${r.output.api.endpoint}`);}s.upload||!s["no-upload"]&&i.output?.database?.enabled?await ve(i,p,n):n&&console.log("\u2139\uFE0F DB upload skipped (use --upload to enable)"),console.log(`\u2705 Analysis completed in ${j}ms
93
+ `),console.log("\u{1F4CA} Results:"),console.log(` Total files: ${p.stats.totalFiles}`),console.log(` - Routes: ${p.stats.byType.route}`),console.log(` - Components: ${p.stats.byType.component}`),console.log(` - Hooks: ${p.stats.byType.hook}`),console.log(` - Services: ${p.stats.byType.service}`),console.log(` - APIs: ${p.stats.byType.api}`),console.log(` - Tables: ${p.stats.byType.table}`),console.log(` - Utilities: ${p.stats.byType.utility}`),console.log(`
94
+ \u{1F4C4} Output: ${v}`),p.stats.parseErrors.length>0&&(console.log(`
95
+ \u26A0\uFE0F Parse errors (${p.stats.parseErrors.length}):`),p.stats.parseErrors.slice(0,5).forEach(h=>{console.log(` - ${h}`);}),p.stats.parseErrors.length>5&&console.log(` ... and ${p.stats.parseErrors.length-5} more`)),console.log("");}catch(l){console.error("\u274C Analysis failed:",l),process.exit(1);}}async function Pe(e){let{values:s}=parseArgs({args:e,options:{input:{type:"string",short:"i"},config:{type:"string",short:"c"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});s.help&&(console.log(be),process.exit(0));let t=process.cwd();b$1(t,s.verbose);let a$1=s.input||"project-metadata.json",o=s.verbose||false,n={};if(s.config)try{let c=await m.readFile(s.config,"utf-8");n=JSON.parse(c);}catch{console.error(`Failed to load config file: ${s.config}`),process.exit(1);}else {let c=f.join(t,"metadata.config.json");try{let l=await m.readFile(c,"utf-8");n=JSON.parse(l),o&&console.log(`Loaded config from ${c}`);}catch{console.error("\u274C metadata.config.json \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy init \uC73C\uB85C \uC124\uC815\uC744 \uBA3C\uC800 \uC0DD\uC131\uD558\uC138\uC694."),process.exit(1);}}let i=f.resolve(t,a$1),r;try{let c=await m.readFile(i,"utf-8");r=JSON.parse(c);}catch{console.error(`\u274C \uBA54\uD0C0\uB370\uC774\uD130 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${i}`),console.log(" npx metadatafy analyze \uB85C \uBA3C\uC800 \uBD84\uC11D\uC744 \uC2E4\uD589\uD558\uC138\uC694."),process.exit(1);}console.log(`
96
+ \u{1F4E4} Uploading metadata from: ${i}`);let u=await te(t,n);u||(console.error("\u274C \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy database-init \uC73C\uB85C \uC124\uC815\uC744 \uCD94\uAC00\uD558\uC138\uC694."),process.exit(1));try{let l=await(await a(u)).upload(r);l.success?console.log(`
97
+ \u2705 ${l.message} (${u.provider})`):(console.error(`
98
+ \u274C Upload failed: ${l.error}`),process.exit(1));}catch(c){console.error(`
99
+ \u274C Upload error: ${c instanceof Error?c.message:c}`),process.exit(1);}}async function je(){let e=process.cwd(),s=f.basename(e);console.log(`
98
100
  \u{1F680} metadatafy \uC124\uC815 \uB9C8\uBC95\uC0AC
99
- `),console.log(`\uD504\uB85C\uC81D\uD2B8: ${a}`),console.log(`\uACBD\uB85C: ${e}`),console.log(`
100
- \u{1F50D} \uD504\uB85C\uC81D\uD2B8 \uBD84\uC11D \uC911...`);let t=await U(e);console.log(`
101
- \u2705 \uAC10\uC9C0\uB41C \uC815\uBCF4:`),console.log(` \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785: ${L(t.type)}`),console.log(` \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800: ${t.packageManager}`),console.log(` TypeScript: ${t.hasTypescript?"\uC608":"\uC544\uB2C8\uC624"}`),t.existingFolders.length>0&&console.log(` \uC8FC\uC694 \uD3F4\uB354: ${t.existingFolders.slice(0,5).join(", ")}`);try{let o=await F(t.type),s=await M(t.packageManager),n=!1;o!=="node"&&o!=="unknown"&&(n=await B(o));let c=await K(),r=null;await V()&&(r=await J());let i={projectType:o,packageManager:s,projectInfo:t,addBuildIntegration:n,apiEndpoint:c,supabase:r},p=m.join(e,"metadata.config.json"),l=!0;try{await b.access(p),console.log(`
102
- \u26A0\uFE0F metadata.config.json \uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.`),l=await W("\uB36E\uC5B4\uC4F8\uAE4C\uC694?",!1);}catch{}if(console.log(`
101
+ `),console.log(`\uD504\uB85C\uC81D\uD2B8: ${s}`),console.log(`\uACBD\uB85C: ${e}`);let{loadEnvFiles:t}=await import('./env-loader-XD5JBEQO.js'),{variables:a}=t(e);console.log(`
102
+ \u{1F50D} \uD504\uB85C\uC81D\uD2B8 \uBD84\uC11D \uC911...`);let o=await D(e);console.log(`
103
+ \u2705 \uAC10\uC9C0\uB41C \uC815\uBCF4:`),console.log(` \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785: ${O(o.type)}`),console.log(` \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800: ${o.packageManager}`),console.log(` TypeScript: ${o.hasTypescript?"\uC608":"\uC544\uB2C8\uC624"}`),o.existingFolders.length>0&&console.log(` \uC8FC\uC694 \uD3F4\uB354: ${o.existingFolders.slice(0,5).join(", ")}`);try{let n=await M(o.type),i=await B(o.packageManager),r=!1;n!=="node"&&n!=="unknown"&&(r=await K(n));let u=null;await J()&&(u=await V(a));let l={projectType:n,packageManager:i,projectInfo:o,addBuildIntegration:r,supabase:u},p=f.join(e,"metadata.config.json"),j=!0;try{await m.access(p),console.log(`
104
+ \u26A0\uFE0F metadata.config.json \uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.`),j=await W("\uB36E\uC5B4\uC4F8\uAE4C\uC694?",!1);}catch{}if(console.log(`
103
105
  \u{1F4DD} \uC124\uC815 \uC801\uC6A9 \uC911...
104
- `),l){let u=await z(e,a,i);console.log(`\u2705 \uC124\uC815 \uD30C\uC77C \uC0DD\uC131: ${m.relative(e,u)}`);}if(n){let u=!1;if(o==="vite"||o==="cra"?u=await Y(e):o.startsWith("nextjs")&&(u=await q(e)),u){let h=o.startsWith("nextjs")?"next.config":"vite.config";console.log(`\u2705 ${h} \uD30C\uC77C\uC5D0 \uD50C\uB7EC\uADF8\uC778 \uCD94\uAC00\uB428`);}else console.log("\u26A0\uFE0F \uBE4C\uB4DC \uC124\uC815 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC218\uB3D9\uC73C\uB85C \uCD94\uAC00\uD574\uC8FC\uC138\uC694.");}console.log(`
106
+ `),j){let y=await z(e,s,l);console.log(`\u2705 \uC124\uC815 \uD30C\uC77C \uC0DD\uC131: ${f.relative(e,y)}`);}if(r){let y=!1;if(n==="vite"||n==="cra"?y=await Y(e):n.startsWith("nextjs")&&(y=await q(e)),y){let h=n.startsWith("nextjs")?"next.config":"vite.config";console.log(`\u2705 ${h} \uD30C\uC77C\uC5D0 \uD50C\uB7EC\uADF8\uC778 \uCD94\uAC00\uB428`);}else console.log("\u26A0\uFE0F \uBE4C\uB4DC \uC124\uC815 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC218\uB3D9\uC73C\uB85C \uCD94\uAC00\uD574\uC8FC\uC138\uC694.");}console.log(`
105
107
  \u{1F389} \uC124\uC815\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4!
106
- `);let x=m.join(e,"package.json");try{let u=await b.readFile(x,"utf-8"),h=JSON.parse(u);({...h.dependencies,...h.devDependencies}).metadatafy||(console.log(`\u{1F4E6} \uB2E4\uC74C \uBA85\uB839\uC5B4\uB85C \uD328\uD0A4\uC9C0\uB97C \uC124\uCE58\uD558\uC138\uC694:
107
- `),console.log(` ${H(s)}
108
- `));}catch{}if(n?console.log("\u{1F527} \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."):(console.log(`\u{1F4A1} \uC218\uB3D9 \uBD84\uC11D \uBA85\uB839\uC5B4:
108
+ `);let v=f.join(e,"package.json");try{let y=await m.readFile(v,"utf-8"),h=JSON.parse(y);({...h.dependencies,...h.devDependencies}).metadatafy||(console.log(`\u{1F4E6} \uB2E4\uC74C \uBA85\uB839\uC5B4\uB85C \uD328\uD0A4\uC9C0\uB97C \uC124\uCE58\uD558\uC138\uC694:
109
+ `),console.log(` ${H(i)}
110
+ `));}catch{}r?console.log("\u{1F527} \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."):(console.log(`\u{1F4A1} \uC218\uB3D9 \uBD84\uC11D \uBA85\uB839\uC5B4:
109
111
  `),console.log(` npx metadatafy analyze
110
- `)),r){console.log("\u{1F5C4}\uFE0F Supabase \uC5F0\uB3D9\uC774 \uC124\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4."),console.log(` \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD574\uC8FC\uC138\uC694:
111
- `);let u=r.url.slice(2,-1),h=r.serviceRoleKey.slice(2,-1);console.log(` ${u}=https://your-project.supabase.co`),console.log(` ${h}=your-service-role-key
112
- `),console.log(`\u{1F4CB} Supabase\uC5D0\uC11C \uD14C\uC774\uBE14\uC744 \uC0DD\uC131\uD558\uC138\uC694:
113
- `),console.log(` CREATE TABLE ${r.tableName} (`),console.log(" id UUID DEFAULT gen_random_uuid() PRIMARY KEY,"),console.log(" project_id TEXT UNIQUE NOT NULL,"),console.log(" metadata JSONB NOT NULL,"),console.log(" created_at TIMESTAMPTZ DEFAULT NOW(),"),console.log(" updated_at TIMESTAMPTZ DEFAULT NOW()"),console.log(` );
114
- `);}}finally{O();}}function E(e){if(!e||typeof e!="string")return e;if(e.startsWith("${")&&e.endsWith("}")){let a=e.slice(2,-1);return process.env[a]||""}return e}async function te(e,a){let t=a.output?.database;if(!t||!t.enabled)return null;if(t.provider==="supabase"&&t.supabase){let{supabase:o}=t,s=E(o.url),n=E(o.serviceRoleKey);return !s||!n?(console.log("\u26A0\uFE0F Supabase \uD658\uACBD\uBCC0\uC218\uAC00 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."),o.url.startsWith("${")&&console.log(` ${o.url.slice(2,-1)}\uC744(\uB97C) \uC124\uC815\uD574\uC8FC\uC138\uC694.`),o.serviceRoleKey.startsWith("${")&&console.log(` ${o.serviceRoleKey.slice(2,-1)}\uC744(\uB97C) \uC124\uC815\uD574\uC8FC\uC138\uC694.`),null):{provider:"supabase",enabled:true,url:s,serviceRoleKey:n,tableName:o.tableName,fields:{projectId:o.fields.projectId,metadata:o.fields.metadata,createdAt:o.fields.createdAt,updatedAt:o.fields.updatedAt}}}if(t.provider==="custom"&&t.custom){let{custom:o}=t,s={};if(o.headers)for(let[n,c]of Object.entries(o.headers))s[n]=E(c);return {provider:"custom",enabled:true,endpoint:E(o.endpoint),method:o.method,headers:s}}return null}async function je(e,a$1,t){let o=await te(process.cwd(),e);if(o){t&&console.log(`
115
- \u{1F5C4}\uFE0F Uploading to ${o.provider}...`);try{let n=await(await a(o)).upload(a$1);n.success?console.log(`\u{1F5C4}\uFE0F ${n.message} (${o.provider})`):console.log(`\u26A0\uFE0F Database upload failed: ${n.error}`);}catch(s){console.log(`\u26A0\uFE0F Database upload error: ${s instanceof Error?s.message:s}`);}}}be().catch(e=>{console.error("Fatal error:",e),process.exit(1);});
112
+ `)),u&&(console.log(`
113
+ \u{1F5C4}\uFE0F Supabase \uC5F0\uB3D9\uC774 \uC124\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4.`),console.log(` \uD658\uACBD\uBCC0\uC218: \${${u.urlEnvName}}, \${${u.serviceRoleKeyEnvName}}`),console.log(`
114
+ \u{1F4CB} Supabase\uC5D0\uC11C \uD14C\uC774\uBE14\uC744 \uC0DD\uC131\uD558\uC138\uC694:
115
+ `),console.log(` CREATE TABLE ${u.tableName} (`),console.log(" id UUID DEFAULT gen_random_uuid() PRIMARY KEY,"),console.log(" project_id TEXT UNIQUE NOT NULL,"),console.log(" metadata JSONB NOT NULL,"),console.log(" created_at TIMESTAMPTZ DEFAULT NOW(),"),console.log(" updated_at TIMESTAMPTZ DEFAULT NOW()"),console.log(` );
116
+ `));}finally{F();}}function T(e){if(!e||typeof e!="string")return e;if(e.startsWith("${")&&e.endsWith("}")){let s=e.slice(2,-1);return process.env[s]||""}return e}async function te(e,s){let t=s.output?.database;if(!t||!t.enabled)return null;if(t.provider==="supabase"&&t.supabase){let{supabase:a}=t,o=T(a.url),n=T(a.serviceRoleKey);return !o||!n?(console.log("\u26A0\uFE0F Supabase \uD658\uACBD\uBCC0\uC218\uAC00 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."),a.url.startsWith("${")&&console.log(` ${a.url.slice(2,-1)}\uC744(\uB97C) \uC124\uC815\uD574\uC8FC\uC138\uC694.`),a.serviceRoleKey.startsWith("${")&&console.log(` ${a.serviceRoleKey.slice(2,-1)}\uC744(\uB97C) \uC124\uC815\uD574\uC8FC\uC138\uC694.`),null):{provider:"supabase",enabled:true,url:o,serviceRoleKey:n,tableName:a.tableName,fields:{projectId:a.fields.projectId,metadata:a.fields.metadata,createdAt:a.fields.createdAt,updatedAt:a.fields.updatedAt}}}if(t.provider==="custom"&&t.custom){let{custom:a}=t,o={};if(a.headers)for(let[n,i]of Object.entries(a.headers))o[n]=T(i);return {provider:"custom",enabled:true,endpoint:T(a.endpoint),method:a.method,headers:o}}return null}async function ve(e,s,t){let a$1=await te(process.cwd(),e);if(a$1){t&&console.log(`
117
+ \u{1F5C4}\uFE0F Uploading to ${a$1.provider}...`);try{let n=await(await a(a$1)).upload(s);n.success?console.log(`\u{1F5C4}\uFE0F ${n.message} (${a$1.provider})`):console.log(`\u26A0\uFE0F Database upload failed: ${n.error}`);}catch(o){console.log(`\u26A0\uFE0F Database upload error: ${o instanceof Error?o.message:o}`);}}}he().catch(e=>{console.error("Fatal error:",e),process.exit(1);});
@@ -0,0 +1 @@
1
+ 'use strict';var chunkZAACVJBX_cjs=require('./chunk-ZAACVJBX.cjs');Object.defineProperty(exports,"loadEnvFiles",{enumerable:true,get:function(){return chunkZAACVJBX_cjs.a}});Object.defineProperty(exports,"loadEnvWithLog",{enumerable:true,get:function(){return chunkZAACVJBX_cjs.b}});
@@ -0,0 +1 @@
1
+ export{a as loadEnvFiles,b as loadEnvWithLog}from'./chunk-BJMCLX3M.js';
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var chunkGHNW3BJ2_cjs=require('./chunk-GHNW3BJ2.cjs');Object.defineProperty(exports,"ApiSender",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.A}});Object.defineProperty(exports,"CallGraphBuilder",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.w}});Object.defineProperty(exports,"DEFAULT_EXCLUDE_PATTERNS",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.c}});Object.defineProperty(exports,"DEFAULT_FILE_TYPE_MAPPING",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.a}});Object.defineProperty(exports,"DEFAULT_INCLUDE_PATTERNS",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.b}});Object.defineProperty(exports,"DependencyResolver",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.v}});Object.defineProperty(exports,"ExportExtractor",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.i}});Object.defineProperty(exports,"FileWriter",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.z}});Object.defineProperty(exports,"ImportExtractor",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.h}});Object.defineProperty(exports,"KOREAN_KEYWORD_MAP",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.r}});Object.defineProperty(exports,"KeywordExtractor",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.u}});Object.defineProperty(exports,"ProjectAnalyzer",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.y}});Object.defineProperty(exports,"PropsExtractor",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.j}});Object.defineProperty(exports,"SQLParser",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.g}});Object.defineProperty(exports,"SupabaseApiSender",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.B}});Object.defineProperty(exports,"TypeScriptParser",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.f}});Object.defineProperty(exports,"createDefaultConfig",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.d}});Object.defineProperty(exports,"extendKoreanMap",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.t}});Object.defineProperty(exports,"extractAcronyms",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.p}});Object.defineProperty(exports,"findKoreanKeywords",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.s}});Object.defineProperty(exports,"generateId",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.x}});Object.defineProperty(exports,"splitCamelCase",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.k}});Object.defineProperty(exports,"splitIntoWords",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.o}});Object.defineProperty(exports,"splitKebabCase",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.n}});Object.defineProperty(exports,"splitPascalCase",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.l}});Object.defineProperty(exports,"splitSnakeCase",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.m}});Object.defineProperty(exports,"toAllCases",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.q}});Object.defineProperty(exports,"validateConfig",{enumerable:true,get:function(){return chunkGHNW3BJ2_cjs.e}});
1
+ 'use strict';var chunkECJ6WDN5_cjs=require('./chunk-ECJ6WDN5.cjs');Object.defineProperty(exports,"ApiSender",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.A}});Object.defineProperty(exports,"CallGraphBuilder",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.w}});Object.defineProperty(exports,"DEFAULT_EXCLUDE_PATTERNS",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.c}});Object.defineProperty(exports,"DEFAULT_FILE_TYPE_MAPPING",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.a}});Object.defineProperty(exports,"DEFAULT_INCLUDE_PATTERNS",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.b}});Object.defineProperty(exports,"DependencyResolver",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.v}});Object.defineProperty(exports,"ExportExtractor",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.i}});Object.defineProperty(exports,"FileWriter",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.z}});Object.defineProperty(exports,"ImportExtractor",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.h}});Object.defineProperty(exports,"KOREAN_KEYWORD_MAP",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.r}});Object.defineProperty(exports,"KeywordExtractor",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.u}});Object.defineProperty(exports,"ProjectAnalyzer",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.y}});Object.defineProperty(exports,"PropsExtractor",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.j}});Object.defineProperty(exports,"SQLParser",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.g}});Object.defineProperty(exports,"SupabaseApiSender",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.B}});Object.defineProperty(exports,"TypeScriptParser",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.f}});Object.defineProperty(exports,"createDefaultConfig",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.d}});Object.defineProperty(exports,"extendKoreanMap",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.t}});Object.defineProperty(exports,"extractAcronyms",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.p}});Object.defineProperty(exports,"findKoreanKeywords",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.s}});Object.defineProperty(exports,"generateId",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.x}});Object.defineProperty(exports,"splitCamelCase",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.k}});Object.defineProperty(exports,"splitIntoWords",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.o}});Object.defineProperty(exports,"splitKebabCase",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.n}});Object.defineProperty(exports,"splitPascalCase",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.l}});Object.defineProperty(exports,"splitSnakeCase",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.m}});Object.defineProperty(exports,"toAllCases",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.q}});Object.defineProperty(exports,"validateConfig",{enumerable:true,get:function(){return chunkECJ6WDN5_cjs.e}});
package/dist/index.d.cts CHANGED
@@ -4,6 +4,7 @@ import ts from 'typescript';
4
4
 
5
5
  /**
6
6
  * 기본 파일 타입 매핑 (glob 패턴 -> FileType)
7
+ * @deprecated 폴더 기반 자동 감지를 사용하세요. 이 매핑은 하위 호환성을 위해 유지됩니다.
7
8
  */
8
9
  declare const DEFAULT_FILE_TYPE_MAPPING: Record<string, FileType>;
9
10
  /**
@@ -49,7 +50,17 @@ declare class ProjectAnalyzer {
49
50
  */
50
51
  private parseFile;
51
52
  /**
52
- * 파일 타입 결정
53
+ * 파일 타입 결정 (폴더 기반 + 파일명 패턴 자동 감지)
54
+ *
55
+ * 감지 우선순위:
56
+ * 1. SQL 마이그레이션 파일
57
+ * 2. Next.js 특수 파일 (page.tsx, layout.tsx, route.ts)
58
+ * 3. 경로 세그먼트 (/api/)
59
+ * 4. 파일명 패턴 (useAuth.ts → hook, *.service.ts → service)
60
+ * 5. 폴더 이름 (components/, hooks/, services/)
61
+ * 6. PascalCase .tsx/.jsx → component
62
+ * 7. glob 패턴 (하위 호환성)
63
+ * 8. pages 폴더 폴백
53
64
  */
54
65
  private determineFileType;
55
66
  /**
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ import ts from 'typescript';
4
4
 
5
5
  /**
6
6
  * 기본 파일 타입 매핑 (glob 패턴 -> FileType)
7
+ * @deprecated 폴더 기반 자동 감지를 사용하세요. 이 매핑은 하위 호환성을 위해 유지됩니다.
7
8
  */
8
9
  declare const DEFAULT_FILE_TYPE_MAPPING: Record<string, FileType>;
9
10
  /**
@@ -49,7 +50,17 @@ declare class ProjectAnalyzer {
49
50
  */
50
51
  private parseFile;
51
52
  /**
52
- * 파일 타입 결정
53
+ * 파일 타입 결정 (폴더 기반 + 파일명 패턴 자동 감지)
54
+ *
55
+ * 감지 우선순위:
56
+ * 1. SQL 마이그레이션 파일
57
+ * 2. Next.js 특수 파일 (page.tsx, layout.tsx, route.ts)
58
+ * 3. 경로 세그먼트 (/api/)
59
+ * 4. 파일명 패턴 (useAuth.ts → hook, *.service.ts → service)
60
+ * 5. 폴더 이름 (components/, hooks/, services/)
61
+ * 6. PascalCase .tsx/.jsx → component
62
+ * 7. glob 패턴 (하위 호환성)
63
+ * 8. pages 폴더 폴백
53
64
  */
54
65
  private determineFileType;
55
66
  /**
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{A as ApiSender,w as CallGraphBuilder,c as DEFAULT_EXCLUDE_PATTERNS,a as DEFAULT_FILE_TYPE_MAPPING,b as DEFAULT_INCLUDE_PATTERNS,v as DependencyResolver,i as ExportExtractor,z as FileWriter,h as ImportExtractor,r as KOREAN_KEYWORD_MAP,u as KeywordExtractor,y as ProjectAnalyzer,j as PropsExtractor,g as SQLParser,B as SupabaseApiSender,f as TypeScriptParser,d as createDefaultConfig,t as extendKoreanMap,p as extractAcronyms,s as findKoreanKeywords,x as generateId,k as splitCamelCase,o as splitIntoWords,n as splitKebabCase,l as splitPascalCase,m as splitSnakeCase,q as toAllCases,e as validateConfig}from'./chunk-SEPU4O45.js';
1
+ export{A as ApiSender,w as CallGraphBuilder,c as DEFAULT_EXCLUDE_PATTERNS,a as DEFAULT_FILE_TYPE_MAPPING,b as DEFAULT_INCLUDE_PATTERNS,v as DependencyResolver,i as ExportExtractor,z as FileWriter,h as ImportExtractor,r as KOREAN_KEYWORD_MAP,u as KeywordExtractor,y as ProjectAnalyzer,j as PropsExtractor,g as SQLParser,B as SupabaseApiSender,f as TypeScriptParser,d as createDefaultConfig,t as extendKoreanMap,p as extractAcronyms,s as findKoreanKeywords,x as generateId,k as splitCamelCase,o as splitIntoWords,n as splitKebabCase,l as splitPascalCase,m as splitSnakeCase,q as toAllCases,e as validateConfig}from'./chunk-IJXLAS7T.js';
package/dist/next.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkXR3EVOXW_cjs=require('./chunk-XR3EVOXW.cjs'),chunkGHNW3BJ2_cjs=require('./chunk-GHNW3BJ2.cjs'),u=require('path'),v=require('fs/promises');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 u__namespace=/*#__PURE__*/_interopNamespace(u);var v__namespace=/*#__PURE__*/_interopNamespace(v);async function f(a,t,e){let i=new chunkGHNW3BJ2_cjs.y(a),n=new chunkGHNW3BJ2_cjs.z(a),l=a.output.api?.enabled?new chunkGHNW3BJ2_cjs.A(a):null;a.verbose&&console.log("[metadata-plugin] Starting analysis...");let r=await i.analyze(t);if(a.output.file?.enabled){let s=u__namespace.resolve(t,a.output.file.path);await n.write(r,s),a.verbose&&console.log(`[metadata-plugin] Wrote metadata to ${s}`);}if(l&&(await l.send(r),a.verbose&&console.log("[metadata-plugin] Sent metadata to API")),e?.url&&e?.serviceRoleKey)try{let s={provider:"supabase",enabled:!0,url:e.url,serviceRoleKey:e.serviceRoleKey,tableName:e.tableName,fields:{projectId:e.fields?.projectId||"project_id",metadata:e.fields?.metadata||"metadata",createdAt:e.fields?.createdAt||"created_at",updatedAt:e.fields?.updatedAt||"updated_at"}},p=await(await chunkXR3EVOXW_cjs.a(s)).upload(r);a.verbose&&(p.success?console.log(`[metadata-plugin] ${p.message} (Supabase)`):console.log(`[metadata-plugin] Supabase upload failed: ${p.error}`));}catch(s){console.error("[metadata-plugin] Supabase upload error:",s);}}function A(a={}){let t=chunkGHNW3BJ2_cjs.d(a),e=a.supabase,i=chunkGHNW3BJ2_cjs.e(t);if(i.length>0)throw new Error(`[metadata-plugin] Invalid config:
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkXR3EVOXW_cjs=require('./chunk-XR3EVOXW.cjs'),chunkECJ6WDN5_cjs=require('./chunk-ECJ6WDN5.cjs'),u=require('path'),v=require('fs/promises');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 u__namespace=/*#__PURE__*/_interopNamespace(u);var v__namespace=/*#__PURE__*/_interopNamespace(v);async function f(a,t,e){let i=new chunkECJ6WDN5_cjs.y(a),n=new chunkECJ6WDN5_cjs.z(a),l=a.output.api?.enabled?new chunkECJ6WDN5_cjs.A(a):null;a.verbose&&console.log("[metadata-plugin] Starting analysis...");let r=await i.analyze(t);if(a.output.file?.enabled){let s=u__namespace.resolve(t,a.output.file.path);await n.write(r,s),a.verbose&&console.log(`[metadata-plugin] Wrote metadata to ${s}`);}if(l&&(await l.send(r),a.verbose&&console.log("[metadata-plugin] Sent metadata to API")),e?.url&&e?.serviceRoleKey)try{let s={provider:"supabase",enabled:!0,url:e.url,serviceRoleKey:e.serviceRoleKey,tableName:e.tableName,fields:{projectId:e.fields?.projectId||"project_id",metadata:e.fields?.metadata||"metadata",createdAt:e.fields?.createdAt||"created_at",updatedAt:e.fields?.updatedAt||"updated_at"}},p=await(await chunkXR3EVOXW_cjs.a(s)).upload(r);a.verbose&&(p.success?console.log(`[metadata-plugin] ${p.message} (Supabase)`):console.log(`[metadata-plugin] Supabase upload failed: ${p.error}`));}catch(s){console.error("[metadata-plugin] Supabase upload error:",s);}}function A(a={}){let t=chunkECJ6WDN5_cjs.d(a),e=a.supabase,i=chunkECJ6WDN5_cjs.e(t);if(i.length>0)throw new Error(`[metadata-plugin] Invalid config:
2
2
  ${i.join(`
3
3
  `)}`);return {name:"metadata-adapter",async onBuildComplete({projectDir:n}){t.verbose&&console.log("[metadata-plugin] Build completed, running analysis..."),await f(t,n,e),t.verbose&&console.log("[metadata-plugin] Analysis completed");}}}async function N(a,t={}){let e=u__namespace.join(a,".metadata-adapter.js"),i=`
4
4
  // Auto-generated by metadatafy
@@ -7,6 +7,6 @@ ${i.join(`
7
7
  const { createMetadataAdapter } = require('metadatafy/next');
8
8
 
9
9
  module.exports = createMetadataAdapter(${JSON.stringify(t,null,2)});
10
- `;return await v__namespace.writeFile(e,i.trim()),e}function x(a={}){let t=chunkGHNW3BJ2_cjs.d(a),e=a.runOn||"build",i=a.supabase,n=chunkGHNW3BJ2_cjs.e(t);if(n.length>0)throw new Error(`[metadata-plugin] Invalid config:
10
+ `;return await v__namespace.writeFile(e,i.trim()),e}function x(a={}){let t=chunkECJ6WDN5_cjs.d(a),e=a.runOn||"build",i=a.supabase,n=chunkECJ6WDN5_cjs.e(t);if(n.length>0)throw new Error(`[metadata-plugin] Invalid config:
11
11
  ${n.join(`
12
12
  `)}`);let l=false;return r=>{let s=r.compiler?.runAfterProductionCompile;return {...r,compiler:{...r.compiler,async runAfterProductionCompile(o){s&&await s(o),!(e!=="build"&&e!=="both")&&(l=true,t.verbose&&console.log("[metadata-plugin] runAfterProductionCompile triggered"),await f(t,o.projectDir,i),t.verbose&&console.log("[metadata-plugin] Analysis completed"));}},webpack(o,p){let{dev:g,isServer:P}=p;return !P||l||(e==="both"||e==="build"&&!g||e==="dev"&&g)&&(o.plugins=o.plugins||[],o.plugins.push(new m(t,i))),typeof r.webpack=="function"?r.webpack(o,p):o}}}}var m=class{constructor(t,e){this.hasRun=false;this.config=t,this.supabaseOptions=e;}apply(t){let e="MetadataWebpackPlugin";t.hooks.beforeCompile.tapAsync(e,async(i,n)=>{if(this.hasRun)return n();this.hasRun=true;try{await f(this.config,t.context,this.supabaseOptions),n();}catch(l){n(l);}}),t.hooks.watchRun.tap(e,()=>{});}};exports.createMetadataAdapter=A;exports.default=x;exports.generateAdapterFile=N;exports.withMetadata=x;
package/dist/next.js CHANGED
@@ -1,4 +1,4 @@
1
- import {a}from'./chunk-ESZLTJIF.js';import {d,e,y,z,A as A$1}from'./chunk-SEPU4O45.js';import*as u from'path';import*as v from'fs/promises';async function f(a$1,t,e){let i=new y(a$1),n=new z(a$1),l=a$1.output.api?.enabled?new A$1(a$1):null;a$1.verbose&&console.log("[metadata-plugin] Starting analysis...");let r=await i.analyze(t);if(a$1.output.file?.enabled){let s=u.resolve(t,a$1.output.file.path);await n.write(r,s),a$1.verbose&&console.log(`[metadata-plugin] Wrote metadata to ${s}`);}if(l&&(await l.send(r),a$1.verbose&&console.log("[metadata-plugin] Sent metadata to API")),e?.url&&e?.serviceRoleKey)try{let s={provider:"supabase",enabled:!0,url:e.url,serviceRoleKey:e.serviceRoleKey,tableName:e.tableName,fields:{projectId:e.fields?.projectId||"project_id",metadata:e.fields?.metadata||"metadata",createdAt:e.fields?.createdAt||"created_at",updatedAt:e.fields?.updatedAt||"updated_at"}},p=await(await a(s)).upload(r);a$1.verbose&&(p.success?console.log(`[metadata-plugin] ${p.message} (Supabase)`):console.log(`[metadata-plugin] Supabase upload failed: ${p.error}`));}catch(s){console.error("[metadata-plugin] Supabase upload error:",s);}}function A(a={}){let t=d(a),e$1=a.supabase,i=e(t);if(i.length>0)throw new Error(`[metadata-plugin] Invalid config:
1
+ import {a}from'./chunk-ESZLTJIF.js';import {d,e,y,z,A as A$1}from'./chunk-IJXLAS7T.js';import*as u from'path';import*as v from'fs/promises';async function f(a$1,t,e){let i=new y(a$1),n=new z(a$1),l=a$1.output.api?.enabled?new A$1(a$1):null;a$1.verbose&&console.log("[metadata-plugin] Starting analysis...");let r=await i.analyze(t);if(a$1.output.file?.enabled){let s=u.resolve(t,a$1.output.file.path);await n.write(r,s),a$1.verbose&&console.log(`[metadata-plugin] Wrote metadata to ${s}`);}if(l&&(await l.send(r),a$1.verbose&&console.log("[metadata-plugin] Sent metadata to API")),e?.url&&e?.serviceRoleKey)try{let s={provider:"supabase",enabled:!0,url:e.url,serviceRoleKey:e.serviceRoleKey,tableName:e.tableName,fields:{projectId:e.fields?.projectId||"project_id",metadata:e.fields?.metadata||"metadata",createdAt:e.fields?.createdAt||"created_at",updatedAt:e.fields?.updatedAt||"updated_at"}},p=await(await a(s)).upload(r);a$1.verbose&&(p.success?console.log(`[metadata-plugin] ${p.message} (Supabase)`):console.log(`[metadata-plugin] Supabase upload failed: ${p.error}`));}catch(s){console.error("[metadata-plugin] Supabase upload error:",s);}}function A(a={}){let t=d(a),e$1=a.supabase,i=e(t);if(i.length>0)throw new Error(`[metadata-plugin] Invalid config:
2
2
  ${i.join(`
3
3
  `)}`);return {name:"metadata-adapter",async onBuildComplete({projectDir:n}){t.verbose&&console.log("[metadata-plugin] Build completed, running analysis..."),await f(t,n,e$1),t.verbose&&console.log("[metadata-plugin] Analysis completed");}}}async function N(a,t={}){let e=u.join(a,".metadata-adapter.js"),i=`
4
4
  // Auto-generated by metadatafy
package/dist/vite.cjs CHANGED
@@ -1,3 +1,3 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkXR3EVOXW_cjs=require('./chunk-XR3EVOXW.cjs'),chunkGHNW3BJ2_cjs=require('./chunk-GHNW3BJ2.cjs'),v=require('path');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 v__namespace=/*#__PURE__*/_interopNamespace(v);async function P(e,l,t){let s=new chunkGHNW3BJ2_cjs.y(e),n=new chunkGHNW3BJ2_cjs.z(e),o=e.output.api?.enabled?new chunkGHNW3BJ2_cjs.A(e):null;e.verbose&&console.log("[metadata-plugin] Starting analysis...");let a=await s.analyze(l);if(e.output.file?.enabled){let r=v__namespace.resolve(l,e.output.file.path);await n.write(a,r),e.verbose&&console.log(`[metadata-plugin] Wrote metadata to ${r}`);}if(o&&(await o.send(a),e.verbose&&console.log("[metadata-plugin] Sent metadata to API")),t?.url&&t?.serviceRoleKey)try{let r={provider:"supabase",enabled:!0,url:t.url,serviceRoleKey:t.serviceRoleKey,tableName:t.tableName,fields:{projectId:t.fields?.projectId||"project_id",metadata:t.fields?.metadata||"metadata",createdAt:t.fields?.createdAt||"created_at",updatedAt:t.fields?.updatedAt||"updated_at"}},i=await(await chunkXR3EVOXW_cjs.a(r)).upload(a);e.verbose&&(i.success?console.log(`[metadata-plugin] ${i.message} (Supabase)`):console.log(`[metadata-plugin] Supabase upload failed: ${i.error}`));}catch(r){console.error("[metadata-plugin] Supabase upload error:",r);}return a}function b(e={}){let l=chunkGHNW3BJ2_cjs.d(e),t=e.runOn||"build",s=e.emitStatsFile!==false,n=e.supabase,o,a=null,r=false;return {name:"vite-metadata-plugin",enforce:"post",configResolved(d){o=d;let i=chunkGHNW3BJ2_cjs.e(l);if(i.length>0)throw new Error(`[metadata-plugin] Invalid config:
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkXR3EVOXW_cjs=require('./chunk-XR3EVOXW.cjs'),chunkECJ6WDN5_cjs=require('./chunk-ECJ6WDN5.cjs'),v=require('path');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 v__namespace=/*#__PURE__*/_interopNamespace(v);async function P(e,l,t){let s=new chunkECJ6WDN5_cjs.y(e),n=new chunkECJ6WDN5_cjs.z(e),o=e.output.api?.enabled?new chunkECJ6WDN5_cjs.A(e):null;e.verbose&&console.log("[metadata-plugin] Starting analysis...");let a=await s.analyze(l);if(e.output.file?.enabled){let r=v__namespace.resolve(l,e.output.file.path);await n.write(a,r),e.verbose&&console.log(`[metadata-plugin] Wrote metadata to ${r}`);}if(o&&(await o.send(a),e.verbose&&console.log("[metadata-plugin] Sent metadata to API")),t?.url&&t?.serviceRoleKey)try{let r={provider:"supabase",enabled:!0,url:t.url,serviceRoleKey:t.serviceRoleKey,tableName:t.tableName,fields:{projectId:t.fields?.projectId||"project_id",metadata:t.fields?.metadata||"metadata",createdAt:t.fields?.createdAt||"created_at",updatedAt:t.fields?.updatedAt||"updated_at"}},i=await(await chunkXR3EVOXW_cjs.a(r)).upload(a);e.verbose&&(i.success?console.log(`[metadata-plugin] ${i.message} (Supabase)`):console.log(`[metadata-plugin] Supabase upload failed: ${i.error}`));}catch(r){console.error("[metadata-plugin] Supabase upload error:",r);}return a}function b(e={}){let l=chunkECJ6WDN5_cjs.d(e),t=e.runOn||"build",s=e.emitStatsFile!==false,n=e.supabase,o,a=null,r=false;return {name:"vite-metadata-plugin",enforce:"post",configResolved(d){o=d;let i=chunkECJ6WDN5_cjs.e(l);if(i.length>0)throw new Error(`[metadata-plugin] Invalid config:
2
2
  ${i.join(`
3
3
  `)}`)},async buildStart(){if(r||!(t==="both"||t==="build"&&o.command==="build"||t==="serve"&&o.command==="serve"))return;r=true;let i=o.root;try{a=await P(l,i,n);}catch(u){if(console.error("[metadata-plugin] Analysis failed:",u),o.command==="build")throw u}},generateBundle(){!a||!s||this.emitFile({type:"asset",fileName:"metadata-stats.json",source:JSON.stringify(a.stats,null,2)});},closeBundle(){l.verbose&&a&&console.log(`[metadata-plugin] Build complete. Analyzed ${a.stats.totalFiles} files.`),r=false,a=null;}}}exports.default=b;exports.metadataPlugin=b;
package/dist/vite.js CHANGED
@@ -1,3 +1,3 @@
1
- import {a}from'./chunk-ESZLTJIF.js';import {d,e,y,z,A}from'./chunk-SEPU4O45.js';import*as v from'path';async function P(e,l,t){let s=new y(e),n=new z(e),o=e.output.api?.enabled?new A(e):null;e.verbose&&console.log("[metadata-plugin] Starting analysis...");let a$1=await s.analyze(l);if(e.output.file?.enabled){let r=v.resolve(l,e.output.file.path);await n.write(a$1,r),e.verbose&&console.log(`[metadata-plugin] Wrote metadata to ${r}`);}if(o&&(await o.send(a$1),e.verbose&&console.log("[metadata-plugin] Sent metadata to API")),t?.url&&t?.serviceRoleKey)try{let r={provider:"supabase",enabled:!0,url:t.url,serviceRoleKey:t.serviceRoleKey,tableName:t.tableName,fields:{projectId:t.fields?.projectId||"project_id",metadata:t.fields?.metadata||"metadata",createdAt:t.fields?.createdAt||"created_at",updatedAt:t.fields?.updatedAt||"updated_at"}},i=await(await a(r)).upload(a$1);e.verbose&&(i.success?console.log(`[metadata-plugin] ${i.message} (Supabase)`):console.log(`[metadata-plugin] Supabase upload failed: ${i.error}`));}catch(r){console.error("[metadata-plugin] Supabase upload error:",r);}return a$1}function b(e$1={}){let l=d(e$1),t=e$1.runOn||"build",s=e$1.emitStatsFile!==false,n=e$1.supabase,o,a=null,r=false;return {name:"vite-metadata-plugin",enforce:"post",configResolved(d){o=d;let i=e(l);if(i.length>0)throw new Error(`[metadata-plugin] Invalid config:
1
+ import {a}from'./chunk-ESZLTJIF.js';import {d,e,y,z,A}from'./chunk-IJXLAS7T.js';import*as v from'path';async function P(e,l,t){let s=new y(e),n=new z(e),o=e.output.api?.enabled?new A(e):null;e.verbose&&console.log("[metadata-plugin] Starting analysis...");let a$1=await s.analyze(l);if(e.output.file?.enabled){let r=v.resolve(l,e.output.file.path);await n.write(a$1,r),e.verbose&&console.log(`[metadata-plugin] Wrote metadata to ${r}`);}if(o&&(await o.send(a$1),e.verbose&&console.log("[metadata-plugin] Sent metadata to API")),t?.url&&t?.serviceRoleKey)try{let r={provider:"supabase",enabled:!0,url:t.url,serviceRoleKey:t.serviceRoleKey,tableName:t.tableName,fields:{projectId:t.fields?.projectId||"project_id",metadata:t.fields?.metadata||"metadata",createdAt:t.fields?.createdAt||"created_at",updatedAt:t.fields?.updatedAt||"updated_at"}},i=await(await a(r)).upload(a$1);e.verbose&&(i.success?console.log(`[metadata-plugin] ${i.message} (Supabase)`):console.log(`[metadata-plugin] Supabase upload failed: ${i.error}`));}catch(r){console.error("[metadata-plugin] Supabase upload error:",r);}return a$1}function b(e$1={}){let l=d(e$1),t=e$1.runOn||"build",s=e$1.emitStatsFile!==false,n=e$1.supabase,o,a=null,r=false;return {name:"vite-metadata-plugin",enforce:"post",configResolved(d){o=d;let i=e(l);if(i.length>0)throw new Error(`[metadata-plugin] Invalid config:
2
2
  ${i.join(`
3
3
  `)}`)},async buildStart(){if(r||!(t==="both"||t==="build"&&o.command==="build"||t==="serve"&&o.command==="serve"))return;r=true;let i=o.root;try{a=await P(l,i,n);}catch(u){if(console.error("[metadata-plugin] Analysis failed:",u),o.command==="build")throw u}},generateBundle(){!a||!s||this.emitFile({type:"asset",fileName:"metadata-stats.json",source:JSON.stringify(a.stats,null,2)});},closeBundle(){l.verbose&&a&&console.log(`[metadata-plugin] Build complete. Analyzed ${a.stats.totalFiles} files.`),r=false,a=null;}}}export{b as default,b as metadataPlugin};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "metadatafy",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "Build plugin for extracting project metadata for ticket analysis system",
5
5
  "type": "module",
6
6
  "exports": {
@@ -48,6 +48,7 @@
48
48
  }
49
49
  },
50
50
  "dependencies": {
51
+ "dotenv": "^17.2.3",
51
52
  "glob": "^10.0.0",
52
53
  "typescript": "^5.0.0"
53
54
  },
@@ -1,2 +0,0 @@
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 I={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(I[t])return I[t];let e=[];for(let[s,r]of Object.entries(I))(t.includes(s)||s.includes(t))&&e.push(...r);return [...new Set(e)]}function ht(n){return {...I,...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 P=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 P({...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`)),{projectId:this.config.projectId,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=I;exports.s=O;exports.t=ht;exports.u=b;exports.v=P;exports.w=S;exports.x=j;exports.y=$;exports.z=B;
@@ -1,2 +0,0 @@
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 I={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(I[t])return I[t];let e=[];for(let[s,r]of Object.entries(I))(t.includes(s)||s.includes(t))&&e.push(...r);return [...new Set(e)]}function ht(n){return {...I,...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 P=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 P({...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`)),{projectId:this.config.projectId,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,I as r,O as s,ht as t,b as u,P as v,S as w,j as x,$ as y,B as z};