metadatafy 1.3.0 → 1.3.1

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.
Files changed (3) hide show
  1. package/dist/cli.cjs +29 -29
  2. package/dist/cli.js +29 -29
  3. package/package.json +1 -1
package/dist/cli.cjs CHANGED
@@ -1,48 +1,48 @@
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(`
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'),_=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 ___namespace=/*#__PURE__*/_interopNamespace(_);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 C(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 D(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 S=null;function ne(){return S||(S=___namespace.createInterface({input:process.stdin,output:process.stdout,terminal:false})),S}function y(e){return new Promise(a=>{process.stdout.write(e),ne().once("line",t=>{a(t);});})}function O(){S&&(S.close(),S=null);}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
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
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
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
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
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(`
8
+ \uCD94\uAC00\uD560\uAE4C\uC694? [Y/n]: `)).trim().toLowerCase()!=="n"}async function K(){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.");let a=(await y(`
10
+ API URL (\uC120\uD0DD\uC0AC\uD56D): `)).trim();if(!a)return null;try{return new URL(a),a}catch{return console.log("\u26A0\uFE0F \uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 URL\uC785\uB2C8\uB2E4. API \uC804\uC1A1\uC744 \uAC74\uB108\uB701\uB2C8\uB2E4."),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
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
12
  Supabase \uC5F0\uB3D9 \uC124\uC815? [y/N]: `)).trim().toLowerCase()==="y"}async function J(){console.log(`
13
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';
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 re(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: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"},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
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
16
  metadatafy(),`):s.includes("defineConfig(")&&(s=s.replace(/defineConfig\(\{/,`defineConfig({
17
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';
18
18
  `:`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 `
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=___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
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(`
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 ie(){X.close();}async function ce(){return console.log(`
22
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(`
23
+ \uC120\uD0DD [1]: `)).trim()||"1")==="2"?"custom":"supabase"}async function le(){return console.log(`
24
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(`
25
+ \uC120\uD0DD [1]: `)).trim()!=="2"}async function pe(e){console.log(`
26
26
  \u{1F527} Supabase \uC124\uC815
27
27
  `),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(`
28
+ `);let a,t,o,s;if(e){let $=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=`\${${$.trim()||"SUPABASE_URL"}}`,s=`\${${u.trim()||"SUPABASE_SERVICE_ROLE_KEY"}}`,console.log(`
29
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
30
  \uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: `)).trim()||"project_metadata";console.log(`
31
31
  \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(`
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 ue(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 de(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 ge(e){if(!e.supabase)return;let{tableName:a,fields:t}=e.supabase;console.log(`
34
34
  \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:
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 fe(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
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
37
  \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
38
  `);}}async function T(){let e=process.cwd();console.log(`
39
39
  \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(`
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 ce()!=="supabase"){console.log(`
41
41
  \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=`
42
+ `);return}let t=await le(),{config:o,actualValues:s}=await pe(t);if(!await ue(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 de(e,o);console.log(`
44
+ \u2705 \uC124\uC815 \uC800\uC7A5\uB428: ${m__namespace.relative(e,c)}`),ge(o),fe(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{ie();}}var me="1.3.1",G=`
46
46
  metadatafy - \uD504\uB85C\uC81D\uD2B8 \uBA54\uD0C0\uB370\uC774\uD130 \uCD94\uCD9C \uB3C4\uAD6C
47
47
 
48
48
  Usage:
@@ -64,7 +64,7 @@ Examples:
64
64
  metadatafy analyze --upload # \uBD84\uC11D + DB \uC5C5\uB85C\uB4DC
65
65
  metadatafy analyze --no-upload # \uBD84\uC11D\uB9CC (DB \uC5C5\uB85C\uB4DC \uC548\uD568)
66
66
  metadatafy upload # \uAE30\uC874 \uD30C\uC77C\uC744 DB\uC5D0 \uC5C5\uB85C\uB4DC
67
- `,me=`
67
+ `,ye=`
68
68
  Usage: metadatafy analyze [options]
69
69
 
70
70
  Options:
@@ -75,7 +75,7 @@ Options:
75
75
  --no-upload DB \uC5C5\uB85C\uB4DC \uC2A4\uD0B5
76
76
  --verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
77
77
  -h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
78
- `,ye=`
78
+ `,be=`
79
79
  Usage: metadatafy upload [options]
80
80
 
81
81
  \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,25 +85,25 @@ Options:
85
85
  -c, --config <path> \uC124\uC815 \uD30C\uC77C \uACBD\uB85C
86
86
  --verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
87
87
  -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(`
88
+ `;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 a=e[0];switch(a){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 T();break;default:console.error(`Unknown command: ${a}`),console.log(G),process.exit(1);}}async function we(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(ye),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
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
90
+ `);let g=new chunkGHNW3BJ2_cjs.y(r),i=new chunkGHNW3BJ2_cjs.z(r);try{let p=Date.now(),l=await g.analyze(t),$=Date.now()-p,u=m__namespace.resolve(t,s);if(await i.write(l,u),r.output.api?.enabled&&r.output.api.endpoint)try{new URL(r.output.api.endpoint),await new chunkGHNW3BJ2_cjs.A(r).send(l),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}`);}a.upload||!a["no-upload"]&&c.output?.database?.enabled?await ve(c,l,n):n&&console.log("\u2139\uFE0F DB upload skipped (use --upload to enable)"),console.log(`\u2705 Analysis completed in ${$}ms
91
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
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(`
93
+ \u26A0\uFE0F Parse errors (${l.stats.parseErrors.length}):`),l.stats.parseErrors.slice(0,5).forEach(R=>{console.log(` - ${R}`);}),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 Pe(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(be),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
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
95
  \u2705 ${p.message} (${g.provider})`):(console.error(`
96
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(`
97
+ \u274C Upload error: ${i instanceof Error?i.message:i}`),process.exit(1);}}async function je(){let e=process.cwd(),a=m__namespace.basename(e);console.log(`
98
98
  \u{1F680} metadatafy \uC124\uC815 \uB9C8\uBC95\uC0AC
99
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(`
100
+ \u{1F50D} \uD504\uB85C\uC81D\uD2B8 \uBD84\uC11D \uC911...`);let t=await C(e);console.log(`
101
+ \u2705 \uAC10\uC9C0\uB41C \uC815\uBCF4:`),console.log(` \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785: ${D(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
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(`
103
103
  \u{1F4DD} \uC124\uC815 \uC801\uC6A9 \uC911...
104
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(`
105
105
  \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:
106
+ `);let $=m__namespace.join(e,"package.json");try{let u=await b__namespace.readFile($,"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
107
  `),console.log(` ${H(s)}
108
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:
109
109
  `),console.log(` npx metadatafy analyze
@@ -111,5 +111,5 @@ Options:
111
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
112
  `),console.log(`\u{1F4CB} Supabase\uC5D0\uC11C \uD14C\uC774\uBE14\uC744 \uC0DD\uC131\uD558\uC138\uC694:
113
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);});
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 ve(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}`);}}}he().catch(e=>{console.error("Fatal error:",e),process.exit(1);});
package/dist/cli.js CHANGED
@@ -1,48 +1,48 @@
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(`
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 _ 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 C(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 D(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 S=null;function ne(){return S||(S=_.createInterface({input:process.stdin,output:process.stdout,terminal:false})),S}function y(e){return new Promise(a=>{process.stdout.write(e),ne().once("line",t=>{a(t);});})}function O(){S&&(S.close(),S=null);}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
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
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
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
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
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(`
8
+ \uCD94\uAC00\uD560\uAE4C\uC694? [Y/n]: `)).trim().toLowerCase()!=="n"}async function K(){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.");let a=(await y(`
10
+ API URL (\uC120\uD0DD\uC0AC\uD56D): `)).trim();if(!a)return null;try{return new URL(a),a}catch{return console.log("\u26A0\uFE0F \uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 URL\uC785\uB2C8\uB2E4. API \uC804\uC1A1\uC744 \uAC74\uB108\uB701\uB2C8\uB2E4."),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
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
12
  Supabase \uC5F0\uB3D9 \uC124\uC815? [y/N]: `)).trim().toLowerCase()==="y"}async function J(){console.log(`
13
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';
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 re(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: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"},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
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
16
  metadatafy(),`):s.includes("defineConfig(")&&(s=s.replace(/defineConfig\(\{/,`defineConfig({
17
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';
18
18
  `:`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 `
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=_.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
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(`
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 ie(){X.close();}async function ce(){return console.log(`
22
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(`
23
+ \uC120\uD0DD [1]: `)).trim()||"1")==="2"?"custom":"supabase"}async function le(){return console.log(`
24
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(`
25
+ \uC120\uD0DD [1]: `)).trim()!=="2"}async function pe(e){console.log(`
26
26
  \u{1F527} Supabase \uC124\uC815
27
27
  `),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(`
28
+ `);let a,t,o,s;if(e){let $=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=`\${${$.trim()||"SUPABASE_URL"}}`,s=`\${${u.trim()||"SUPABASE_SERVICE_ROLE_KEY"}}`,console.log(`
29
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
30
  \uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: `)).trim()||"project_metadata";console.log(`
31
31
  \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(`
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 ue(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 de(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 ge(e){if(!e.supabase)return;let{tableName:a,fields:t}=e.supabase;console.log(`
34
34
  \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:
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 fe(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
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
37
  \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
38
  `);}}async function T(){let e=process.cwd();console.log(`
39
39
  \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(`
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 ce()!=="supabase"){console.log(`
41
41
  \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=`
42
+ `);return}let t=await le(),{config:o,actualValues:s}=await pe(t);if(!await ue(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 de(e,o);console.log(`
44
+ \u2705 \uC124\uC815 \uC800\uC7A5\uB428: ${m.relative(e,c)}`),ge(o),fe(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{ie();}}var me="1.3.1",G=`
46
46
  metadatafy - \uD504\uB85C\uC81D\uD2B8 \uBA54\uD0C0\uB370\uC774\uD130 \uCD94\uCD9C \uB3C4\uAD6C
47
47
 
48
48
  Usage:
@@ -64,7 +64,7 @@ Examples:
64
64
  metadatafy analyze --upload # \uBD84\uC11D + DB \uC5C5\uB85C\uB4DC
65
65
  metadatafy analyze --no-upload # \uBD84\uC11D\uB9CC (DB \uC5C5\uB85C\uB4DC \uC548\uD568)
66
66
  metadatafy upload # \uAE30\uC874 \uD30C\uC77C\uC744 DB\uC5D0 \uC5C5\uB85C\uB4DC
67
- `,me=`
67
+ `,ye=`
68
68
  Usage: metadatafy analyze [options]
69
69
 
70
70
  Options:
@@ -75,7 +75,7 @@ Options:
75
75
  --no-upload DB \uC5C5\uB85C\uB4DC \uC2A4\uD0B5
76
76
  --verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
77
77
  -h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
78
- `,ye=`
78
+ `,be=`
79
79
  Usage: metadatafy upload [options]
80
80
 
81
81
  \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,25 +85,25 @@ Options:
85
85
  -c, --config <path> \uC124\uC815 \uD30C\uC77C \uACBD\uB85C
86
86
  --verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
87
87
  -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(`
88
+ `;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 a=e[0];switch(a){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 T();break;default:console.error(`Unknown command: ${a}`),console.log(G),process.exit(1);}}async function we(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(ye),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
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
90
+ `);let g=new y$1(r),i=new z$1(r);try{let p=Date.now(),l=await g.analyze(t),$=Date.now()-p,u=m.resolve(t,s);if(await i.write(l,u),r.output.api?.enabled&&r.output.api.endpoint)try{new URL(r.output.api.endpoint),await new A(r).send(l),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}`);}a.upload||!a["no-upload"]&&c.output?.database?.enabled?await ve(c,l,n):n&&console.log("\u2139\uFE0F DB upload skipped (use --upload to enable)"),console.log(`\u2705 Analysis completed in ${$}ms
91
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
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(`
93
+ \u26A0\uFE0F Parse errors (${l.stats.parseErrors.length}):`),l.stats.parseErrors.slice(0,5).forEach(R=>{console.log(` - ${R}`);}),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 Pe(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(be),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
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
95
  \u2705 ${p.message} (${g.provider})`):(console.error(`
96
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(`
97
+ \u274C Upload error: ${i instanceof Error?i.message:i}`),process.exit(1);}}async function je(){let e=process.cwd(),a=m.basename(e);console.log(`
98
98
  \u{1F680} metadatafy \uC124\uC815 \uB9C8\uBC95\uC0AC
99
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(`
100
+ \u{1F50D} \uD504\uB85C\uC81D\uD2B8 \uBD84\uC11D \uC911...`);let t=await C(e);console.log(`
101
+ \u2705 \uAC10\uC9C0\uB41C \uC815\uBCF4:`),console.log(` \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785: ${D(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
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(`
103
103
  \u{1F4DD} \uC124\uC815 \uC801\uC6A9 \uC911...
104
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(`
105
105
  \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:
106
+ `);let $=m.join(e,"package.json");try{let u=await b.readFile($,"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
107
  `),console.log(` ${H(s)}
108
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:
109
109
  `),console.log(` npx metadatafy analyze
@@ -111,5 +111,5 @@ Options:
111
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
112
  `),console.log(`\u{1F4CB} Supabase\uC5D0\uC11C \uD14C\uC774\uBE14\uC744 \uC0DD\uC131\uD558\uC138\uC694:
113
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);});
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 ve(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}`);}}}he().catch(e=>{console.error("Fatal error:",e),process.exit(1);});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "metadatafy",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "Build plugin for extracting project metadata for ticket analysis system",
5
5
  "type": "module",
6
6
  "exports": {