metadatafy 1.1.3 → 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.
- package/README.md +176 -3
- package/dist/chunk-ESZLTJIF.js +1 -0
- package/dist/{chunk-BT3J264A.cjs → chunk-GHNW3BJ2.cjs} +1 -1
- package/dist/{chunk-WUEHYY36.js → chunk-SEPU4O45.js} +1 -1
- package/dist/chunk-XR3EVOXW.cjs +1 -0
- package/dist/cli.cjs +86 -31
- package/dist/cli.js +86 -31
- package/dist/custom-api-MPVFDKPU.js +1 -0
- package/dist/custom-api-THEHQ4IR.cjs +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/next.cjs +6 -6
- package/dist/next.d.cts +26 -2
- package/dist/next.d.ts +26 -2
- package/dist/next.js +6 -6
- package/dist/supabase-HWODZTEI.cjs +1 -0
- package/dist/supabase-TGVJDKHE.js +1 -0
- package/dist/{types-DlsgsNoY.d.cts → types-CXa1hvME.d.cts} +26 -0
- package/dist/{types-DlsgsNoY.d.ts → types-CXa1hvME.d.ts} +26 -0
- package/dist/vite.cjs +3 -3
- package/dist/vite.d.cts +26 -2
- package/dist/vite.d.ts +26 -2
- package/dist/vite.js +3 -3
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -1,26 +1,58 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
'use strict';var
|
|
3
|
-
\u{1F4E6} \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(
|
|
4
|
-
\uC120\uD0DD [${
|
|
5
|
-
\u{1F4E6} \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(
|
|
6
|
-
\uC120\uD0DD [${
|
|
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
|
|
8
|
-
\uCD94\uAC00\uD560\uAE4C\uC694? [Y/n]: `)).trim().toLowerCase()!=="n"}async function
|
|
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.")
|
|
10
|
-
API URL (\uC120\uD0DD\uC0AC\uD56D): `)).trim()
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
+
\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(){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
|
+
\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 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
|
+
`;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';
|
|
14
18
|
`:`const { withMetadatafy } = require('metadatafy/next');
|
|
15
|
-
`)+
|
|
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
|
+
`: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 ie(){X.close();}async function ce(){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 le(){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 pe(e){console.log(`
|
|
26
|
+
\u{1F527} Supabase \uC124\uC815
|
|
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 $=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
|
+
\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
|
+
\uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: `)).trim()||"project_metadata";console.log(`
|
|
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 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
|
+
\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 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
|
+
`),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
|
+
\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(`
|
|
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 ce()!=="supabase"){console.log(`
|
|
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 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=`
|
|
16
46
|
metadatafy - \uD504\uB85C\uC81D\uD2B8 \uBA54\uD0C0\uB370\uC774\uD130 \uCD94\uCD9C \uB3C4\uAD6C
|
|
17
47
|
|
|
18
48
|
Usage:
|
|
19
49
|
metadatafy <command> [options]
|
|
20
50
|
|
|
21
51
|
Commands:
|
|
22
|
-
analyze
|
|
23
|
-
|
|
52
|
+
analyze \uD504\uB85C\uC81D\uD2B8\uB97C \uBD84\uC11D\uD558\uACE0 \uBA54\uD0C0\uB370\uC774\uD130 \uC0DD\uC131
|
|
53
|
+
upload \uAE30\uC874 \uBA54\uD0C0\uB370\uC774\uD130 \uD30C\uC77C\uC744 DB\uC5D0 \uC5C5\uB85C\uB4DC
|
|
54
|
+
init \uC778\uD130\uB799\uD2F0\uBE0C \uC124\uC815 \uBC0F \uBE4C\uB4DC \uB3C4\uAD6C \uC5F0\uB3D9
|
|
55
|
+
database-init \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC5F0\uB3D9 \uC124\uC815 (Supabase \uB4F1)
|
|
24
56
|
|
|
25
57
|
Options:
|
|
26
58
|
-h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
|
|
@@ -29,32 +61,55 @@ Options:
|
|
|
29
61
|
Examples:
|
|
30
62
|
metadatafy init
|
|
31
63
|
metadatafy analyze
|
|
32
|
-
metadatafy analyze --
|
|
33
|
-
|
|
64
|
+
metadatafy analyze --upload # \uBD84\uC11D + DB \uC5C5\uB85C\uB4DC
|
|
65
|
+
metadatafy analyze --no-upload # \uBD84\uC11D\uB9CC (DB \uC5C5\uB85C\uB4DC \uC548\uD568)
|
|
66
|
+
metadatafy upload # \uAE30\uC874 \uD30C\uC77C\uC744 DB\uC5D0 \uC5C5\uB85C\uB4DC
|
|
67
|
+
`,ye=`
|
|
34
68
|
Usage: metadatafy analyze [options]
|
|
35
69
|
|
|
36
70
|
Options:
|
|
37
71
|
-p, --project-id <id> \uD504\uB85C\uC81D\uD2B8 ID (\uAE30\uBCF8\uAC12: \uD3F4\uB354\uBA85)
|
|
38
72
|
-o, --output <path> \uCD9C\uB825 \uD30C\uC77C \uACBD\uB85C (\uAE30\uBCF8\uAC12: project-metadata.json)
|
|
39
73
|
-c, --config <path> \uC124\uC815 \uD30C\uC77C \uACBD\uB85C
|
|
74
|
+
--upload DB \uC5C5\uB85C\uB4DC \uAC15\uC81C \uC2E4\uD589
|
|
75
|
+
--no-upload DB \uC5C5\uB85C\uB4DC \uC2A4\uD0B5
|
|
40
76
|
--verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
|
|
41
77
|
-h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
78
|
+
`,be=`
|
|
79
|
+
Usage: metadatafy upload [options]
|
|
80
|
+
|
|
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.
|
|
82
|
+
|
|
83
|
+
Options:
|
|
84
|
+
-i, --input <path> \uC785\uB825 \uD30C\uC77C \uACBD\uB85C (\uAE30\uBCF8\uAC12: project-metadata.json)
|
|
85
|
+
-c, --config <path> \uC124\uC815 \uD30C\uC77C \uACBD\uB85C
|
|
86
|
+
--verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
|
|
87
|
+
-h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
|
|
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
|
+
\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),$=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
|
+
`),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(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
|
+
\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 je(){let e=process.cwd(),a=m__namespace.basename(e);console.log(`
|
|
48
98
|
\u{1F680} metadatafy \uC124\uC815 \uB9C8\uBC95\uC0AC
|
|
49
99
|
`),console.log(`\uD504\uB85C\uC81D\uD2B8: ${a}`),console.log(`\uACBD\uB85C: ${e}`),console.log(`
|
|
50
|
-
\u{1F50D} \uD504\uB85C\uC81D\uD2B8 \uBD84\uC11D \uC911...`);let
|
|
51
|
-
\u2705 \uAC10\uC9C0\uB41C \uC815\uBCF4:`),console.log(` \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785: ${
|
|
52
|
-
\u26A0\uFE0F metadata.config.json \uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.`),
|
|
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
|
+
\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(`
|
|
53
103
|
\u{1F4DD} \uC124\uC815 \uC801\uC6A9 \uC911...
|
|
54
|
-
`),
|
|
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(`
|
|
55
105
|
\u{1F389} \uC124\uC815\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4!
|
|
56
|
-
`);let
|
|
57
|
-
`),console.log(` ${
|
|
58
|
-
`));}catch{}
|
|
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
|
+
`),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:
|
|
59
109
|
`),console.log(` npx metadatafy analyze
|
|
60
|
-
`))
|
|
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 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,26 +1,58 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {d,y
|
|
3
|
-
\u{1F4E6} \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(
|
|
4
|
-
\uC120\uD0DD [${
|
|
5
|
-
\u{1F4E6} \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(
|
|
6
|
-
\uC120\uD0DD [${
|
|
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
|
|
8
|
-
\uCD94\uAC00\uD560\uAE4C\uC694? [Y/n]: `)).trim().toLowerCase()!=="n"}async function
|
|
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.")
|
|
10
|
-
API URL (\uC120\uD0DD\uC0AC\uD56D): `)).trim()
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
+
\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(){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
|
+
\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 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
|
+
`;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';
|
|
14
18
|
`:`const { withMetadatafy } = require('metadatafy/next');
|
|
15
|
-
`)+
|
|
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
|
+
`: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 ie(){X.close();}async function ce(){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 le(){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 pe(e){console.log(`
|
|
26
|
+
\u{1F527} Supabase \uC124\uC815
|
|
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 $=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
|
+
\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
|
+
\uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: `)).trim()||"project_metadata";console.log(`
|
|
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 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
|
+
\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 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
|
+
`),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
|
+
\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(`
|
|
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 ce()!=="supabase"){console.log(`
|
|
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 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=`
|
|
16
46
|
metadatafy - \uD504\uB85C\uC81D\uD2B8 \uBA54\uD0C0\uB370\uC774\uD130 \uCD94\uCD9C \uB3C4\uAD6C
|
|
17
47
|
|
|
18
48
|
Usage:
|
|
19
49
|
metadatafy <command> [options]
|
|
20
50
|
|
|
21
51
|
Commands:
|
|
22
|
-
analyze
|
|
23
|
-
|
|
52
|
+
analyze \uD504\uB85C\uC81D\uD2B8\uB97C \uBD84\uC11D\uD558\uACE0 \uBA54\uD0C0\uB370\uC774\uD130 \uC0DD\uC131
|
|
53
|
+
upload \uAE30\uC874 \uBA54\uD0C0\uB370\uC774\uD130 \uD30C\uC77C\uC744 DB\uC5D0 \uC5C5\uB85C\uB4DC
|
|
54
|
+
init \uC778\uD130\uB799\uD2F0\uBE0C \uC124\uC815 \uBC0F \uBE4C\uB4DC \uB3C4\uAD6C \uC5F0\uB3D9
|
|
55
|
+
database-init \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC5F0\uB3D9 \uC124\uC815 (Supabase \uB4F1)
|
|
24
56
|
|
|
25
57
|
Options:
|
|
26
58
|
-h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
|
|
@@ -29,32 +61,55 @@ Options:
|
|
|
29
61
|
Examples:
|
|
30
62
|
metadatafy init
|
|
31
63
|
metadatafy analyze
|
|
32
|
-
metadatafy analyze --
|
|
33
|
-
|
|
64
|
+
metadatafy analyze --upload # \uBD84\uC11D + DB \uC5C5\uB85C\uB4DC
|
|
65
|
+
metadatafy analyze --no-upload # \uBD84\uC11D\uB9CC (DB \uC5C5\uB85C\uB4DC \uC548\uD568)
|
|
66
|
+
metadatafy upload # \uAE30\uC874 \uD30C\uC77C\uC744 DB\uC5D0 \uC5C5\uB85C\uB4DC
|
|
67
|
+
`,ye=`
|
|
34
68
|
Usage: metadatafy analyze [options]
|
|
35
69
|
|
|
36
70
|
Options:
|
|
37
71
|
-p, --project-id <id> \uD504\uB85C\uC81D\uD2B8 ID (\uAE30\uBCF8\uAC12: \uD3F4\uB354\uBA85)
|
|
38
72
|
-o, --output <path> \uCD9C\uB825 \uD30C\uC77C \uACBD\uB85C (\uAE30\uBCF8\uAC12: project-metadata.json)
|
|
39
73
|
-c, --config <path> \uC124\uC815 \uD30C\uC77C \uACBD\uB85C
|
|
74
|
+
--upload DB \uC5C5\uB85C\uB4DC \uAC15\uC81C \uC2E4\uD589
|
|
75
|
+
--no-upload DB \uC5C5\uB85C\uB4DC \uC2A4\uD0B5
|
|
40
76
|
--verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
|
|
41
77
|
-h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
78
|
+
`,be=`
|
|
79
|
+
Usage: metadatafy upload [options]
|
|
80
|
+
|
|
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.
|
|
82
|
+
|
|
83
|
+
Options:
|
|
84
|
+
-i, --input <path> \uC785\uB825 \uD30C\uC77C \uACBD\uB85C (\uAE30\uBCF8\uAC12: project-metadata.json)
|
|
85
|
+
-c, --config <path> \uC124\uC815 \uD30C\uC77C \uACBD\uB85C
|
|
86
|
+
--verbose \uC0C1\uC138 \uB85C\uADF8 \uCD9C\uB825
|
|
87
|
+
-h, --help \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
|
|
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
|
+
\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),$=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
|
+
`),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(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
|
+
\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 je(){let e=process.cwd(),a=m.basename(e);console.log(`
|
|
48
98
|
\u{1F680} metadatafy \uC124\uC815 \uB9C8\uBC95\uC0AC
|
|
49
99
|
`),console.log(`\uD504\uB85C\uC81D\uD2B8: ${a}`),console.log(`\uACBD\uB85C: ${e}`),console.log(`
|
|
50
|
-
\u{1F50D} \uD504\uB85C\uC81D\uD2B8 \uBD84\uC11D \uC911...`);let
|
|
51
|
-
\u2705 \uAC10\uC9C0\uB41C \uC815\uBCF4:`),console.log(` \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785: ${
|
|
52
|
-
\u26A0\uFE0F metadata.config.json \uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.`),
|
|
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
|
+
\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(`
|
|
53
103
|
\u{1F4DD} \uC124\uC815 \uC801\uC6A9 \uC911...
|
|
54
|
-
`),
|
|
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(`
|
|
55
105
|
\u{1F389} \uC124\uC815\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4!
|
|
56
|
-
`);let
|
|
57
|
-
`),console.log(` ${
|
|
58
|
-
`));}catch{}
|
|
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
|
+
`),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:
|
|
59
109
|
`),console.log(` npx metadatafy analyze
|
|
60
|
-
`))
|
|
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 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);});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var o=class{constructor(t){this.name="Custom API";this.config=t;}async testConnection(){try{let t=await fetch(this.config.endpoint,{method:"HEAD",headers:this.config.headers||{}});return t.ok||t.status===405}catch{return false}}async upload(t){try{let e=await fetch(this.config.endpoint,{method:this.config.method,headers:{"Content-Type":"application/json",...this.config.headers},body:JSON.stringify(t)});if(!e.ok){let r=await e.text();return {success:!1,message:`API error: ${e.status}`,error:r}}let s=null;try{s=await e.json();}catch{}return {success:!0,message:"Metadata uploaded successfully",data:s}}catch(e){return {success:false,message:"Failed to upload metadata",error:e instanceof Error?e.message:String(e)}}}};export{o as CustomApiProvider};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var o=class{constructor(t){this.name="Custom API";this.config=t;}async testConnection(){try{let t=await fetch(this.config.endpoint,{method:"HEAD",headers:this.config.headers||{}});return t.ok||t.status===405}catch{return false}}async upload(t){try{let e=await fetch(this.config.endpoint,{method:this.config.method,headers:{"Content-Type":"application/json",...this.config.headers},body:JSON.stringify(t)});if(!e.ok){let r=await e.text();return {success:!1,message:`API error: ${e.status}`,error:r}}let s=null;try{s=await e.json();}catch{}return {success:!0,message:"Metadata uploaded successfully",data:s}}catch(e){return {success:false,message:"Failed to upload metadata",error:e instanceof Error?e.message:String(e)}}}};exports.CustomApiProvider=o;
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
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}});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { P as PluginConfig, F as FileType, A as AnalysisResult, a as ParsedFile, I as ImportInfo, E as ExportInfo, b as PropInfo, C as CallGraphEntry } from './types-
|
|
2
|
-
export { e as AnalysisStats, c as CodeIndexItem, d as CodeMetadata, O as OutputConfig, T as TableColumn } from './types-
|
|
1
|
+
import { P as PluginConfig, F as FileType, A as AnalysisResult, a as ParsedFile, I as ImportInfo, E as ExportInfo, b as PropInfo, C as CallGraphEntry } from './types-CXa1hvME.cjs';
|
|
2
|
+
export { e as AnalysisStats, c as CodeIndexItem, d as CodeMetadata, O as OutputConfig, T as TableColumn } from './types-CXa1hvME.cjs';
|
|
3
3
|
import ts from 'typescript';
|
|
4
4
|
|
|
5
5
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { P as PluginConfig, F as FileType, A as AnalysisResult, a as ParsedFile, I as ImportInfo, E as ExportInfo, b as PropInfo, C as CallGraphEntry } from './types-
|
|
2
|
-
export { e as AnalysisStats, c as CodeIndexItem, d as CodeMetadata, O as OutputConfig, T as TableColumn } from './types-
|
|
1
|
+
import { P as PluginConfig, F as FileType, A as AnalysisResult, a as ParsedFile, I as ImportInfo, E as ExportInfo, b as PropInfo, C as CallGraphEntry } from './types-CXa1hvME.js';
|
|
2
|
+
export { e as AnalysisStats, c as CodeIndexItem, d as CodeMetadata, O as OutputConfig, T as TableColumn } from './types-CXa1hvME.js';
|
|
3
3
|
import ts from 'typescript';
|
|
4
4
|
|
|
5
5
|
/**
|
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-
|
|
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';
|
package/dist/next.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var
|
|
2
|
-
${
|
|
3
|
-
`)}`);return {name:"metadata-adapter",async onBuildComplete({projectDir:
|
|
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:
|
|
2
|
+
${i.join(`
|
|
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
|
|
5
5
|
// This adapter enables metadata extraction with Turbopack (Next.js 16+)
|
|
6
6
|
|
|
7
7
|
const { createMetadataAdapter } = require('metadatafy/next');
|
|
8
8
|
|
|
9
9
|
module.exports = createMetadataAdapter(${JSON.stringify(t,null,2)});
|
|
10
|
-
`;return await
|
|
11
|
-
${
|
|
12
|
-
`)}`);let
|
|
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:
|
|
11
|
+
${n.join(`
|
|
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;
|