metadatafy 1.1.2 → 1.3.0
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 +236 -7
- 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."),(await
|
|
10
|
-
API URL (\uC120\uD0DD\uC0AC\uD56D): `)).trim()||null}async function
|
|
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'),D=require('readline');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var m__namespace=/*#__PURE__*/_interopNamespace(m);var b__namespace=/*#__PURE__*/_interopNamespace(b);var D__namespace=/*#__PURE__*/_interopNamespace(D);async function oe(e){let a=[{file:"pnpm-lock.yaml",manager:"pnpm"},{file:"yarn.lock",manager:"yarn"},{file:"package-lock.json",manager:"npm"}];for(let{file:t,manager:o}of a)try{return await b__namespace.access(m__namespace.join(e,t)),o}catch{}return "npm"}async function ae(e){let a={};try{let o=await b__namespace.readFile(m__namespace.join(e,"package.json"),"utf-8");a=JSON.parse(o);}catch{return "unknown"}let t={...a.dependencies||{},...a.devDependencies||{}};return t.next?await v(m__namespace.join(e,"app"))||await v(m__namespace.join(e,"src","app"))?"nextjs-app":"nextjs-pages":t.vite?"vite":t["react-scripts"]?"cra":t.express||t.fastify||t.koa?"node":"unknown"}async function U(e){let[a,t]=await Promise.all([ae(e),oe(e)]),o=await se(m__namespace.join(e,"tsconfig.json")),s=await v(m__namespace.join(e,"src")),n=["app","pages","components","hooks","services","lib","utils","api","src/app","src/pages","src/components","src/hooks","src/services","src/lib","src/utils"],c=[];for(let i of n)await v(m__namespace.join(e,i))&&c.push(i);let r=await v(m__namespace.join(e,"prisma")),g=await v(m__namespace.join(e,"supabase"));return {type:a,packageManager:t,hasTypescript:o,hasSrc:s,existingFolders:c,hasPrisma:r,hasSupabase:g}}async function se(e){try{return (await b__namespace.stat(e)).isFile()}catch{return false}}async function v(e){try{return (await b__namespace.stat(e)).isDirectory()}catch{return false}}function L(e){return {"nextjs-app":"Next.js (App Router)","nextjs-pages":"Next.js (Pages Router)",vite:"Vite + React",cra:"Create React App",node:"Node.js Backend",unknown:"Unknown"}[e]}var _=D__namespace.createInterface({input:process.stdin,output:process.stdout});function y(e){return new Promise(a=>{_.question(e,a);})}function O(){_.close();}async function F(e){let a=[{key:"1",type:"nextjs-app",label:"Next.js (App Router)"},{key:"2",type:"nextjs-pages",label:"Next.js (Pages Router)"},{key:"3",type:"vite",label:"Vite + React"},{key:"4",type:"cra",label:"Create React App"},{key:"5",type:"node",label:"Node.js Backend"}],t=a.findIndex(r=>r.type===e),o=t>=0?a[t].key:"1";console.log(`
|
|
3
|
+
\u{1F4E6} \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(r=>{let i=r.type===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.label}${i}`);});let n=(await y(`
|
|
4
|
+
\uC120\uD0DD [${o}]: `)).trim()||o;return a.find(r=>r.key===n)?.type||e}async function M(e){let a=[{key:"1",manager:"npm"},{key:"2",manager:"yarn"},{key:"3",manager:"pnpm"}],t=a.findIndex(r=>r.manager===e),o=t>=0?a[t].key:"1";console.log(`
|
|
5
|
+
\u{1F4E6} \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(r=>{let i=r.manager===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.manager}${i}`);});let n=(await y(`
|
|
6
|
+
\uC120\uD0DD [${o}]: `)).trim()||o;return a.find(r=>r.key===n)?.manager||e}async function B(e){if(e==="node"||e==="unknown")return false;let a=e.startsWith("nextjs")?"next.config":"vite.config";return console.log(`
|
|
7
|
+
\u{1F527} ${a} \uD30C\uC77C\uC5D0 metadatafy \uD50C\uB7EC\uADF8\uC778\uC744 \uC790\uB3D9\uC73C\uB85C \uCD94\uAC00\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."),(await y(`
|
|
8
|
+
\uCD94\uAC00\uD560\uAE4C\uC694? [Y/n]: `)).trim().toLowerCase()!=="n"}async function K(){return console.log(`
|
|
9
|
+
\u2601\uFE0F API \uC5D4\uB4DC\uD3EC\uC778\uD2B8\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC804\uC1A1\uD560\uAE4C\uC694?`),console.log(" \uBE48\uCE78\uC73C\uB85C \uB450\uBA74 \uD30C\uC77C\uB9CC \uC0DD\uC131\uB429\uB2C8\uB2E4."),(await y(`
|
|
10
|
+
API URL (\uC120\uD0DD\uC0AC\uD56D): `)).trim()||null}async function W(e,a=true){let s=(await y(`${e} ${a?"[Y/n]":"[y/N]"}: `)).trim().toLowerCase();return s===""?a:s==="y"||s==="yes"}async function V(){return console.log(`
|
|
11
|
+
\u{1F5C4}\uFE0F Supabase\uC5D0 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC790\uB3D9 \uC800\uC7A5\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC5C5\uB85C\uB4DC\uB429\uB2C8\uB2E4."),(await y(`
|
|
12
|
+
Supabase \uC5F0\uB3D9 \uC124\uC815? [y/N]: `)).trim().toLowerCase()==="y"}async function J(){console.log(`
|
|
13
|
+
\u{1F527} Supabase \uC124\uC815`),console.log(`Settings > API\uC5D0\uC11C \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
|
|
14
|
+
`),console.log("\u{1F4A1} \uD658\uACBD\uBCC0\uC218 \uC774\uB984\uC744 \uC785\uB825\uD558\uBA74 ${VAR} \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5\uB429\uB2C8\uB2E4."),console.log(" \uC608: SUPABASE_URL \u2192 ${SUPABASE_URL}\n");let e=await y("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),a=await y("Service Role Key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: "),t=await y("\uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: "),o=e.trim()||"SUPABASE_URL",s=a.trim()||"SUPABASE_SERVICE_ROLE_KEY",n=t.trim()||"project_metadata";return {url:`\${${o}}`,serviceRoleKey:`\${${s}}`,tableName:n}}function ne(e){let{projectType:a,projectInfo:t}=e,o=[],s=t.hasTypescript?"{ts,tsx}":"{js,jsx}";switch(a){case "nextjs-app":t.hasSrc?o.push(`src/app/**/*.${s}`):o.push(`app/**/*.${s}`),o.push(`components/**/*.${s}`),o.push(`hooks/**/*.${s}`),o.push(`lib/**/*.${s}`);break;case "nextjs-pages":t.hasSrc?o.push(`src/pages/**/*.${s}`):o.push(`pages/**/*.${s}`),o.push(`components/**/*.${s}`),o.push(`hooks/**/*.${s}`),o.push(`lib/**/*.${s}`);break;case "vite":case "cra":o.push(`src/**/*.${s}`);break;case "node":o.push(`src/**/*.${t.hasTypescript?"ts":"js"}`),o.push(`routes/**/*.${t.hasTypescript?"ts":"js"}`),o.push(`controllers/**/*.${t.hasTypescript?"ts":"js"}`);break;default:o.push(`src/**/*.${s}`);}return t.hasPrisma&&o.push("prisma/migrations/**/*.sql"),t.hasSupabase&&o.push("supabase/migrations/*.sql"),o}async function z(e,a,t){let o=m__namespace.join(e,"metadata.config.json"),s={projectId:a,include:ne(t),exclude:["**/node_modules/**","**/.next/**","**/dist/**","**/build/**","**/*.test.{ts,tsx,js,jsx}","**/*.spec.{ts,tsx,js,jsx}","**/__tests__/**"],output:{file:{enabled:true,path:"project-metadata.json"},api:{enabled:!!t.apiEndpoint,endpoint:t.apiEndpoint||""},...t.supabase&&{database:{enabled:true,provider:"supabase",supabase:{url:t.supabase.url,serviceRoleKey:t.supabase.serviceRoleKey,tableName:t.supabase.tableName,fields:{projectId:"project_id",metadata:"metadata",createdAt:"created_at",updatedAt:"updated_at"}}}}},koreanKeywords:{},verbose:false};return await b__namespace.writeFile(o,JSON.stringify(s,null,2)),o}async function Y(e){let a=["vite.config.ts","vite.config.js","vite.config.mts","vite.config.mjs"];for(let t of a){let o=m__namespace.join(e,t);try{let s=await b__namespace.readFile(o,"utf-8");if(s.includes("metadatafy"))return !0;let n=`import metadatafy from 'metadatafy/vite';
|
|
15
|
+
`;return s.includes("from 'vite'")?s=s.replace(/^(import .+ from ['"]vite['"];?\n)/m,`$1${n}`):s=n+s,s.includes("plugins:")?s=s.replace(/plugins:\s*\[/,`plugins: [
|
|
16
|
+
metadatafy(),`):s.includes("defineConfig(")&&(s=s.replace(/defineConfig\(\{/,`defineConfig({
|
|
17
|
+
plugins: [metadatafy()],`)),await b__namespace.writeFile(o,s),!0}catch{}}return false}async function q(e){let a=["next.config.ts","next.config.mjs","next.config.js"];for(let t of a){let o=m__namespace.join(e,t);try{let s=await b__namespace.readFile(o,"utf-8");if(s.includes("metadatafy")||s.includes("withMetadatafy"))return !0;let n=t.endsWith(".ts");return s=(t.endsWith(".mjs")||n?`import { withMetadatafy } from 'metadatafy/next';
|
|
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=D__namespace.createInterface({input:process.stdin,output:process.stdout});function f(e){return new Promise(a=>{X.question(e,a);})}function Z(e){return new Promise(a=>{process.stdout.write(e);let t=process.stdin,o=t.isRaw;t.isTTY&&t.setRawMode(true);let s="",n=c=>{let r=c.toString("utf8");switch(r){case `
|
|
20
|
+
`:case "\r":case "":t.isTTY&&t.setRawMode(o),t.removeListener("data",n),process.stdout.write(`
|
|
21
|
+
`),a(s);break;case "":process.exit();break;case "\x7F":s.length>0&&(s=s.slice(0,-1),process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(e+"*".repeat(s.length)));break;default:s+=r,process.stdout.write("*");break}};t.on("data",n),t.resume();})}function re(){X.close();}async function ie(){return console.log(`
|
|
22
|
+
\u{1F4E6} \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uD504\uB85C\uBC14\uC774\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) Supabase"),console.log(" 2) Custom API (\uC9C1\uC811 \uC124\uC815)"),console.log(" (Firebase, PlanetScale \uB4F1\uC740 \uCD94\uD6C4 \uC9C0\uC6D0 \uC608\uC815)"),((await f(`
|
|
23
|
+
\uC120\uD0DD [1]: `)).trim()||"1")==="2"?"custom":"supabase"}async function ce(){return console.log(`
|
|
24
|
+
\u{1F510} \uC778\uC99D \uC815\uBCF4 \uC800\uC7A5 \uBC29\uC2DD\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) \uD658\uACBD\uBCC0\uC218 \uCC38\uC870 \uC0AC\uC6A9 (\uAD8C\uC7A5) - ${SUPABASE_URL} \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5"),console.log(" 2) \uC9C1\uC811 \uAC12 \uC800\uC7A5 (\uBE44\uAD8C\uC7A5) - \uC2E4\uC81C \uAC12\uC744 config\uC5D0 \uC800\uC7A5"),(await f(`
|
|
25
|
+
\uC120\uD0DD [1]: `)).trim()!=="2"}async function le(e){console.log(`
|
|
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 x=await f("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),u=await f("Supabase service role key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: ");o=`\${${x.trim()||"SUPABASE_URL"}}`,s=`\${${u.trim()||"SUPABASE_SERVICE_ROLE_KEY"}}`,console.log(`
|
|
29
|
+
\uC5F0\uACB0 \uD14C\uC2A4\uD2B8\uB97C \uC704\uD574 \uC2E4\uC81C \uAC12\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694 (\uC800\uC7A5\uB418\uC9C0 \uC54A\uC74C):`),a=await f("Supabase URL: "),t=await Z("Supabase service role key: ");}else a=await f("Supabase URL (\uC608: https://xxx.supabase.co): "),t=await Z("Supabase service role key: "),o=a.trim(),s=t;if(!a.trim()||!t)throw new Error("Supabase URL\uACFC service role key\uB294 \uD544\uC218\uC785\uB2C8\uB2E4.");let c=(await f(`
|
|
30
|
+
\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 pe(e,a){if(console.log(`
|
|
33
|
+
\u{1F50C} \uC5F0\uACB0 \uD14C\uC2A4\uD2B8 \uC911...`),e.provider!=="supabase"||!e.supabase)return true;let t={provider:"supabase",enabled:true,url:a.url,serviceRoleKey:a.serviceRoleKey,tableName:e.supabase.tableName,fields:{projectId:e.supabase.fields.projectId,metadata:e.supabase.fields.metadata,createdAt:e.supabase.fields.createdAt,updatedAt:e.supabase.fields.updatedAt}};try{return await(await chunkXR3EVOXW_cjs.a(t)).testConnection()?(console.log("\u2705 \uC5F0\uACB0 \uC131\uACF5!"),!0):(console.log("\u274C \uC5F0\uACB0 \uC2E4\uD328. \uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694."),!1)}catch(o){return console.log(`\u274C \uC5F0\uACB0 \uC624\uB958: ${o instanceof Error?o.message:o}`),false}}async function ue(e,a){let t=m__namespace.join(e,"metadata.config.json"),o={};try{let n=await b__namespace.readFile(t,"utf-8");o=JSON.parse(n);}catch{o={projectId:m__namespace.basename(e),include:["src/**/*.{ts,tsx}"],exclude:["**/node_modules/**","**/*.test.{ts,tsx}"],output:{}};}let s=o.output||{};return s.database=a,o.output=s,await b__namespace.writeFile(t,JSON.stringify(o,null,2)),t}function de(e){if(!e.supabase)return;let{tableName:a,fields:t}=e.supabase;console.log(`
|
|
34
|
+
\u{1F4CB} Supabase\uC5D0\uC11C \uB2E4\uC74C SQL\uB85C \uD14C\uC774\uBE14\uC744 \uC0DD\uC131\uD558\uC138\uC694:
|
|
35
|
+
`),console.log("```sql"),console.log(`CREATE TABLE ${a} (`),console.log(" id UUID DEFAULT gen_random_uuid() PRIMARY KEY,"),console.log(` ${t.projectId} TEXT UNIQUE NOT NULL,`),console.log(` ${t.metadata} JSONB NOT NULL,`),t.createdAt&&console.log(` ${t.createdAt} TIMESTAMPTZ DEFAULT NOW(),`),t.updatedAt&&console.log(` ${t.updatedAt} TIMESTAMPTZ DEFAULT NOW()`),console.log(");"),console.log(""),console.log("-- RLS \uC815\uCC45 (\uD544\uC694\uC2DC)"),console.log(`ALTER TABLE ${a} ENABLE ROW LEVEL SECURITY;`),console.log("```\n");}function ge(e){if(e.provider!=="supabase"||!e.supabase)return;let{url:a,serviceRoleKey:t}=e.supabase;if(a.startsWith("${")||t.startsWith("${")){if(console.log(`\u{1F510} .env \uD30C\uC77C\uC5D0 \uB2E4\uC74C \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694:
|
|
36
|
+
`),a.startsWith("${")){let o=a.slice(2,-1);console.log(`${o}=https://your-project.supabase.co`);}if(t.startsWith("${")){let o=t.slice(2,-1);console.log(`${o}=your-service-role-key`);}console.log(`
|
|
37
|
+
\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 ie()!=="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 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=`
|
|
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
|
+
`,me=`
|
|
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
|
+
`,ye=`
|
|
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 be(){let e=process.argv.slice(2);(e.length===0||e[0]==="-h"||e[0]==="--help")&&(console.log(G),process.exit(0)),(e[0]==="-v"||e[0]==="--version")&&(console.log(fe),process.exit(0));let a=e[0];switch(a){case "analyze":await he(e.slice(1));break;case "upload":await we(e.slice(1));break;case "init":await Pe();break;case "database-init":await T();break;default:console.error(`Unknown command: ${a}`),console.log(G),process.exit(1);}}async function he(e){let{values:a}=util.parseArgs({args:e,options:{"project-id":{type:"string",short:"p"},output:{type:"string",short:"o"},config:{type:"string",short:"c"},upload:{type:"boolean"},"no-upload":{type:"boolean"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});a.help&&(console.log(me),process.exit(0));let t=process.cwd(),o=a["project-id"]||m__namespace.basename(t),s=a.output||"project-metadata.json",n=a.verbose||false,c={};if(a.config)try{let p=await b__namespace.readFile(a.config,"utf-8");c=JSON.parse(p);}catch{console.error(`Failed to load config file: ${a.config}`),process.exit(1);}else {let p=m__namespace.join(t,"metadata.config.json");try{let l=await b__namespace.readFile(p,"utf-8");c=JSON.parse(l),n&&console.log(`Loaded config from ${p}`);}catch{}}let r=chunkGHNW3BJ2_cjs.d({...c,projectId:o,verbose:n,output:{file:{enabled:true,path:s},...c.output}});console.log(`
|
|
89
|
+
\u{1F4E6} Analyzing project: ${o}`),console.log(`\u{1F4C1} Root directory: ${t}
|
|
90
|
+
`);let g=new chunkGHNW3BJ2_cjs.y(r),i=new chunkGHNW3BJ2_cjs.z(r);try{let p=Date.now(),l=await g.analyze(t),x=Date.now()-p,u=m__namespace.resolve(t,s);await i.write(l,u),r.output.api?.enabled&&r.output.api.endpoint&&(await new chunkGHNW3BJ2_cjs.A(r).send(l),console.log(`\u2601\uFE0F Sent to API: ${r.output.api.endpoint}`)),a.upload||!a["no-upload"]&&c.output?.database?.enabled?await je(c,l,n):n&&console.log("\u2139\uFE0F DB upload skipped (use --upload to enable)"),console.log(`\u2705 Analysis completed in ${x}ms
|
|
91
|
+
`),console.log("\u{1F4CA} Results:"),console.log(` Total files: ${l.stats.totalFiles}`),console.log(` - Routes: ${l.stats.byType.route}`),console.log(` - Components: ${l.stats.byType.component}`),console.log(` - Hooks: ${l.stats.byType.hook}`),console.log(` - Services: ${l.stats.byType.service}`),console.log(` - APIs: ${l.stats.byType.api}`),console.log(` - Tables: ${l.stats.byType.table}`),console.log(` - Utilities: ${l.stats.byType.utility}`),console.log(`
|
|
92
|
+
\u{1F4C4} Output: ${u}`),l.stats.parseErrors.length>0&&(console.log(`
|
|
93
|
+
\u26A0\uFE0F Parse errors (${l.stats.parseErrors.length}):`),l.stats.parseErrors.slice(0,5).forEach(A=>{console.log(` - ${A}`);}),l.stats.parseErrors.length>5&&console.log(` ... and ${l.stats.parseErrors.length-5} more`)),console.log("");}catch(p){console.error("\u274C Analysis failed:",p),process.exit(1);}}async function we(e){let{values:a}=util.parseArgs({args:e,options:{input:{type:"string",short:"i"},config:{type:"string",short:"c"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});a.help&&(console.log(ye),process.exit(0));let t=process.cwd(),o=a.input||"project-metadata.json",s=a.verbose||false,n={};if(a.config)try{let i=await b__namespace.readFile(a.config,"utf-8");n=JSON.parse(i);}catch{console.error(`Failed to load config file: ${a.config}`),process.exit(1);}else {let i=m__namespace.join(t,"metadata.config.json");try{let p=await b__namespace.readFile(i,"utf-8");n=JSON.parse(p),s&&console.log(`Loaded config from ${i}`);}catch{console.error("\u274C metadata.config.json \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy init \uC73C\uB85C \uC124\uC815\uC744 \uBA3C\uC800 \uC0DD\uC131\uD558\uC138\uC694."),process.exit(1);}}let c=m__namespace.resolve(t,o),r;try{let i=await b__namespace.readFile(c,"utf-8");r=JSON.parse(i);}catch{console.error(`\u274C \uBA54\uD0C0\uB370\uC774\uD130 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${c}`),console.log(" npx metadatafy analyze \uB85C \uBA3C\uC800 \uBD84\uC11D\uC744 \uC2E4\uD589\uD558\uC138\uC694."),process.exit(1);}console.log(`
|
|
94
|
+
\u{1F4E4} Uploading metadata from: ${c}`);let g=await te(t,n);g||(console.error("\u274C \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy database-init \uC73C\uB85C \uC124\uC815\uC744 \uCD94\uAC00\uD558\uC138\uC694."),process.exit(1));try{let p=await(await chunkXR3EVOXW_cjs.a(g)).upload(r);p.success?console.log(`
|
|
95
|
+
\u2705 ${p.message} (${g.provider})`):(console.error(`
|
|
96
|
+
\u274C Upload failed: ${p.error}`),process.exit(1));}catch(i){console.error(`
|
|
97
|
+
\u274C Upload error: ${i instanceof Error?i.message:i}`),process.exit(1);}}async function Pe(){let e=process.cwd(),a=m__namespace.basename(e);console.log(`
|
|
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 U(e);console.log(`
|
|
101
|
+
\u2705 \uAC10\uC9C0\uB41C \uC815\uBCF4:`),console.log(` \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785: ${L(t.type)}`),console.log(` \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800: ${t.packageManager}`),console.log(` TypeScript: ${t.hasTypescript?"\uC608":"\uC544\uB2C8\uC624"}`),t.existingFolders.length>0&&console.log(` \uC8FC\uC694 \uD3F4\uB354: ${t.existingFolders.slice(0,5).join(", ")}`);try{let o=await F(t.type),s=await M(t.packageManager),n=!1;o!=="node"&&o!=="unknown"&&(n=await B(o));let c=await K(),r=null;await V()&&(r=await J());let i={projectType:o,packageManager:s,projectInfo:t,addBuildIntegration:n,apiEndpoint:c,supabase:r},p=m__namespace.join(e,"metadata.config.json"),l=!0;try{await b__namespace.access(p),console.log(`
|
|
102
|
+
\u26A0\uFE0F metadata.config.json \uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.`),l=await W("\uB36E\uC5B4\uC4F8\uAE4C\uC694?",!1);}catch{}if(console.log(`
|
|
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 x=m__namespace.join(e,"package.json");try{let u=await b__namespace.readFile(x,"utf-8"),h=JSON.parse(u);({...h.dependencies,...h.devDependencies}).metadatafy||(console.log(`\u{1F4E6} \uB2E4\uC74C \uBA85\uB839\uC5B4\uB85C \uD328\uD0A4\uC9C0\uB97C \uC124\uCE58\uD558\uC138\uC694:
|
|
107
|
+
`),console.log(` ${H(s)}
|
|
108
|
+
`));}catch{}if(n?console.log("\u{1F527} \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."):(console.log(`\u{1F4A1} \uC218\uB3D9 \uBD84\uC11D \uBA85\uB839\uC5B4:
|
|
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 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);});
|
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."),(await
|
|
10
|
-
API URL (\uC120\uD0DD\uC0AC\uD56D): `)).trim()||null}async function
|
|
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 D from'readline';async function oe(e){let a=[{file:"pnpm-lock.yaml",manager:"pnpm"},{file:"yarn.lock",manager:"yarn"},{file:"package-lock.json",manager:"npm"}];for(let{file:t,manager:o}of a)try{return await b.access(m.join(e,t)),o}catch{}return "npm"}async function ae(e){let a={};try{let o=await b.readFile(m.join(e,"package.json"),"utf-8");a=JSON.parse(o);}catch{return "unknown"}let t={...a.dependencies||{},...a.devDependencies||{}};return t.next?await v(m.join(e,"app"))||await v(m.join(e,"src","app"))?"nextjs-app":"nextjs-pages":t.vite?"vite":t["react-scripts"]?"cra":t.express||t.fastify||t.koa?"node":"unknown"}async function U(e){let[a,t]=await Promise.all([ae(e),oe(e)]),o=await se(m.join(e,"tsconfig.json")),s=await v(m.join(e,"src")),n=["app","pages","components","hooks","services","lib","utils","api","src/app","src/pages","src/components","src/hooks","src/services","src/lib","src/utils"],c=[];for(let i of n)await v(m.join(e,i))&&c.push(i);let r=await v(m.join(e,"prisma")),g=await v(m.join(e,"supabase"));return {type:a,packageManager:t,hasTypescript:o,hasSrc:s,existingFolders:c,hasPrisma:r,hasSupabase:g}}async function se(e){try{return (await b.stat(e)).isFile()}catch{return false}}async function v(e){try{return (await b.stat(e)).isDirectory()}catch{return false}}function L(e){return {"nextjs-app":"Next.js (App Router)","nextjs-pages":"Next.js (Pages Router)",vite:"Vite + React",cra:"Create React App",node:"Node.js Backend",unknown:"Unknown"}[e]}var _=D.createInterface({input:process.stdin,output:process.stdout});function y(e){return new Promise(a=>{_.question(e,a);})}function O(){_.close();}async function F(e){let a=[{key:"1",type:"nextjs-app",label:"Next.js (App Router)"},{key:"2",type:"nextjs-pages",label:"Next.js (Pages Router)"},{key:"3",type:"vite",label:"Vite + React"},{key:"4",type:"cra",label:"Create React App"},{key:"5",type:"node",label:"Node.js Backend"}],t=a.findIndex(r=>r.type===e),o=t>=0?a[t].key:"1";console.log(`
|
|
3
|
+
\u{1F4E6} \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(r=>{let i=r.type===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.label}${i}`);});let n=(await y(`
|
|
4
|
+
\uC120\uD0DD [${o}]: `)).trim()||o;return a.find(r=>r.key===n)?.type||e}async function M(e){let a=[{key:"1",manager:"npm"},{key:"2",manager:"yarn"},{key:"3",manager:"pnpm"}],t=a.findIndex(r=>r.manager===e),o=t>=0?a[t].key:"1";console.log(`
|
|
5
|
+
\u{1F4E6} \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),a.forEach(r=>{let i=r.manager===e?" (\uAC10\uC9C0\uB428)":"";console.log(` ${r.key}) ${r.manager}${i}`);});let n=(await y(`
|
|
6
|
+
\uC120\uD0DD [${o}]: `)).trim()||o;return a.find(r=>r.key===n)?.manager||e}async function B(e){if(e==="node"||e==="unknown")return false;let a=e.startsWith("nextjs")?"next.config":"vite.config";return console.log(`
|
|
7
|
+
\u{1F527} ${a} \uD30C\uC77C\uC5D0 metadatafy \uD50C\uB7EC\uADF8\uC778\uC744 \uC790\uB3D9\uC73C\uB85C \uCD94\uAC00\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."),(await y(`
|
|
8
|
+
\uCD94\uAC00\uD560\uAE4C\uC694? [Y/n]: `)).trim().toLowerCase()!=="n"}async function K(){return console.log(`
|
|
9
|
+
\u2601\uFE0F API \uC5D4\uB4DC\uD3EC\uC778\uD2B8\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC804\uC1A1\uD560\uAE4C\uC694?`),console.log(" \uBE48\uCE78\uC73C\uB85C \uB450\uBA74 \uD30C\uC77C\uB9CC \uC0DD\uC131\uB429\uB2C8\uB2E4."),(await y(`
|
|
10
|
+
API URL (\uC120\uD0DD\uC0AC\uD56D): `)).trim()||null}async function W(e,a=true){let s=(await y(`${e} ${a?"[Y/n]":"[y/N]"}: `)).trim().toLowerCase();return s===""?a:s==="y"||s==="yes"}async function V(){return console.log(`
|
|
11
|
+
\u{1F5C4}\uFE0F Supabase\uC5D0 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC790\uB3D9 \uC800\uC7A5\uD560\uAE4C\uC694?`),console.log(" \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC5C5\uB85C\uB4DC\uB429\uB2C8\uB2E4."),(await y(`
|
|
12
|
+
Supabase \uC5F0\uB3D9 \uC124\uC815? [y/N]: `)).trim().toLowerCase()==="y"}async function J(){console.log(`
|
|
13
|
+
\u{1F527} Supabase \uC124\uC815`),console.log(`Settings > API\uC5D0\uC11C \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
|
|
14
|
+
`),console.log("\u{1F4A1} \uD658\uACBD\uBCC0\uC218 \uC774\uB984\uC744 \uC785\uB825\uD558\uBA74 ${VAR} \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5\uB429\uB2C8\uB2E4."),console.log(" \uC608: SUPABASE_URL \u2192 ${SUPABASE_URL}\n");let e=await y("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),a=await y("Service Role Key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: "),t=await y("\uD14C\uC774\uBE14 \uC774\uB984 [project_metadata]: "),o=e.trim()||"SUPABASE_URL",s=a.trim()||"SUPABASE_SERVICE_ROLE_KEY",n=t.trim()||"project_metadata";return {url:`\${${o}}`,serviceRoleKey:`\${${s}}`,tableName:n}}function ne(e){let{projectType:a,projectInfo:t}=e,o=[],s=t.hasTypescript?"{ts,tsx}":"{js,jsx}";switch(a){case "nextjs-app":t.hasSrc?o.push(`src/app/**/*.${s}`):o.push(`app/**/*.${s}`),o.push(`components/**/*.${s}`),o.push(`hooks/**/*.${s}`),o.push(`lib/**/*.${s}`);break;case "nextjs-pages":t.hasSrc?o.push(`src/pages/**/*.${s}`):o.push(`pages/**/*.${s}`),o.push(`components/**/*.${s}`),o.push(`hooks/**/*.${s}`),o.push(`lib/**/*.${s}`);break;case "vite":case "cra":o.push(`src/**/*.${s}`);break;case "node":o.push(`src/**/*.${t.hasTypescript?"ts":"js"}`),o.push(`routes/**/*.${t.hasTypescript?"ts":"js"}`),o.push(`controllers/**/*.${t.hasTypescript?"ts":"js"}`);break;default:o.push(`src/**/*.${s}`);}return t.hasPrisma&&o.push("prisma/migrations/**/*.sql"),t.hasSupabase&&o.push("supabase/migrations/*.sql"),o}async function z(e,a,t){let o=m.join(e,"metadata.config.json"),s={projectId:a,include:ne(t),exclude:["**/node_modules/**","**/.next/**","**/dist/**","**/build/**","**/*.test.{ts,tsx,js,jsx}","**/*.spec.{ts,tsx,js,jsx}","**/__tests__/**"],output:{file:{enabled:true,path:"project-metadata.json"},api:{enabled:!!t.apiEndpoint,endpoint:t.apiEndpoint||""},...t.supabase&&{database:{enabled:true,provider:"supabase",supabase:{url:t.supabase.url,serviceRoleKey:t.supabase.serviceRoleKey,tableName:t.supabase.tableName,fields:{projectId:"project_id",metadata:"metadata",createdAt:"created_at",updatedAt:"updated_at"}}}}},koreanKeywords:{},verbose:false};return await b.writeFile(o,JSON.stringify(s,null,2)),o}async function Y(e){let a=["vite.config.ts","vite.config.js","vite.config.mts","vite.config.mjs"];for(let t of a){let o=m.join(e,t);try{let s=await b.readFile(o,"utf-8");if(s.includes("metadatafy"))return !0;let n=`import metadatafy from 'metadatafy/vite';
|
|
15
|
+
`;return s.includes("from 'vite'")?s=s.replace(/^(import .+ from ['"]vite['"];?\n)/m,`$1${n}`):s=n+s,s.includes("plugins:")?s=s.replace(/plugins:\s*\[/,`plugins: [
|
|
16
|
+
metadatafy(),`):s.includes("defineConfig(")&&(s=s.replace(/defineConfig\(\{/,`defineConfig({
|
|
17
|
+
plugins: [metadatafy()],`)),await b.writeFile(o,s),!0}catch{}}return false}async function q(e){let a=["next.config.ts","next.config.mjs","next.config.js"];for(let t of a){let o=m.join(e,t);try{let s=await b.readFile(o,"utf-8");if(s.includes("metadatafy")||s.includes("withMetadatafy"))return !0;let n=t.endsWith(".ts");return s=(t.endsWith(".mjs")||n?`import { withMetadatafy } from 'metadatafy/next';
|
|
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=D.createInterface({input:process.stdin,output:process.stdout});function f(e){return new Promise(a=>{X.question(e,a);})}function Z(e){return new Promise(a=>{process.stdout.write(e);let t=process.stdin,o=t.isRaw;t.isTTY&&t.setRawMode(true);let s="",n=c=>{let r=c.toString("utf8");switch(r){case `
|
|
20
|
+
`:case "\r":case "":t.isTTY&&t.setRawMode(o),t.removeListener("data",n),process.stdout.write(`
|
|
21
|
+
`),a(s);break;case "":process.exit();break;case "\x7F":s.length>0&&(s=s.slice(0,-1),process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(e+"*".repeat(s.length)));break;default:s+=r,process.stdout.write("*");break}};t.on("data",n),t.resume();})}function re(){X.close();}async function ie(){return console.log(`
|
|
22
|
+
\u{1F4E6} \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uD504\uB85C\uBC14\uC774\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) Supabase"),console.log(" 2) Custom API (\uC9C1\uC811 \uC124\uC815)"),console.log(" (Firebase, PlanetScale \uB4F1\uC740 \uCD94\uD6C4 \uC9C0\uC6D0 \uC608\uC815)"),((await f(`
|
|
23
|
+
\uC120\uD0DD [1]: `)).trim()||"1")==="2"?"custom":"supabase"}async function ce(){return console.log(`
|
|
24
|
+
\u{1F510} \uC778\uC99D \uC815\uBCF4 \uC800\uC7A5 \uBC29\uC2DD\uC744 \uC120\uD0DD\uD558\uC138\uC694:`),console.log(" 1) \uD658\uACBD\uBCC0\uC218 \uCC38\uC870 \uC0AC\uC6A9 (\uAD8C\uC7A5) - ${SUPABASE_URL} \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5"),console.log(" 2) \uC9C1\uC811 \uAC12 \uC800\uC7A5 (\uBE44\uAD8C\uC7A5) - \uC2E4\uC81C \uAC12\uC744 config\uC5D0 \uC800\uC7A5"),(await f(`
|
|
25
|
+
\uC120\uD0DD [1]: `)).trim()!=="2"}async function le(e){console.log(`
|
|
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 x=await f("Supabase URL \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_URL]: "),u=await f("Supabase service role key \uD658\uACBD\uBCC0\uC218 \uC774\uB984 [SUPABASE_SERVICE_ROLE_KEY]: ");o=`\${${x.trim()||"SUPABASE_URL"}}`,s=`\${${u.trim()||"SUPABASE_SERVICE_ROLE_KEY"}}`,console.log(`
|
|
29
|
+
\uC5F0\uACB0 \uD14C\uC2A4\uD2B8\uB97C \uC704\uD574 \uC2E4\uC81C \uAC12\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694 (\uC800\uC7A5\uB418\uC9C0 \uC54A\uC74C):`),a=await f("Supabase URL: "),t=await Z("Supabase service role key: ");}else a=await f("Supabase URL (\uC608: https://xxx.supabase.co): "),t=await Z("Supabase service role key: "),o=a.trim(),s=t;if(!a.trim()||!t)throw new Error("Supabase URL\uACFC service role key\uB294 \uD544\uC218\uC785\uB2C8\uB2E4.");let c=(await f(`
|
|
30
|
+
\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 pe(e,a$1){if(console.log(`
|
|
33
|
+
\u{1F50C} \uC5F0\uACB0 \uD14C\uC2A4\uD2B8 \uC911...`),e.provider!=="supabase"||!e.supabase)return true;let t={provider:"supabase",enabled:true,url:a$1.url,serviceRoleKey:a$1.serviceRoleKey,tableName:e.supabase.tableName,fields:{projectId:e.supabase.fields.projectId,metadata:e.supabase.fields.metadata,createdAt:e.supabase.fields.createdAt,updatedAt:e.supabase.fields.updatedAt}};try{return await(await a(t)).testConnection()?(console.log("\u2705 \uC5F0\uACB0 \uC131\uACF5!"),!0):(console.log("\u274C \uC5F0\uACB0 \uC2E4\uD328. \uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694."),!1)}catch(o){return console.log(`\u274C \uC5F0\uACB0 \uC624\uB958: ${o instanceof Error?o.message:o}`),false}}async function ue(e,a){let t=m.join(e,"metadata.config.json"),o={};try{let n=await b.readFile(t,"utf-8");o=JSON.parse(n);}catch{o={projectId:m.basename(e),include:["src/**/*.{ts,tsx}"],exclude:["**/node_modules/**","**/*.test.{ts,tsx}"],output:{}};}let s=o.output||{};return s.database=a,o.output=s,await b.writeFile(t,JSON.stringify(o,null,2)),t}function de(e){if(!e.supabase)return;let{tableName:a,fields:t}=e.supabase;console.log(`
|
|
34
|
+
\u{1F4CB} Supabase\uC5D0\uC11C \uB2E4\uC74C SQL\uB85C \uD14C\uC774\uBE14\uC744 \uC0DD\uC131\uD558\uC138\uC694:
|
|
35
|
+
`),console.log("```sql"),console.log(`CREATE TABLE ${a} (`),console.log(" id UUID DEFAULT gen_random_uuid() PRIMARY KEY,"),console.log(` ${t.projectId} TEXT UNIQUE NOT NULL,`),console.log(` ${t.metadata} JSONB NOT NULL,`),t.createdAt&&console.log(` ${t.createdAt} TIMESTAMPTZ DEFAULT NOW(),`),t.updatedAt&&console.log(` ${t.updatedAt} TIMESTAMPTZ DEFAULT NOW()`),console.log(");"),console.log(""),console.log("-- RLS \uC815\uCC45 (\uD544\uC694\uC2DC)"),console.log(`ALTER TABLE ${a} ENABLE ROW LEVEL SECURITY;`),console.log("```\n");}function ge(e){if(e.provider!=="supabase"||!e.supabase)return;let{url:a,serviceRoleKey:t}=e.supabase;if(a.startsWith("${")||t.startsWith("${")){if(console.log(`\u{1F510} .env \uD30C\uC77C\uC5D0 \uB2E4\uC74C \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694:
|
|
36
|
+
`),a.startsWith("${")){let o=a.slice(2,-1);console.log(`${o}=https://your-project.supabase.co`);}if(t.startsWith("${")){let o=t.slice(2,-1);console.log(`${o}=your-service-role-key`);}console.log(`
|
|
37
|
+
\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 ie()!=="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 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=`
|
|
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
|
+
`,me=`
|
|
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
|
+
`,ye=`
|
|
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 be(){let e=process.argv.slice(2);(e.length===0||e[0]==="-h"||e[0]==="--help")&&(console.log(G),process.exit(0)),(e[0]==="-v"||e[0]==="--version")&&(console.log(fe),process.exit(0));let a=e[0];switch(a){case "analyze":await he(e.slice(1));break;case "upload":await we(e.slice(1));break;case "init":await Pe();break;case "database-init":await T();break;default:console.error(`Unknown command: ${a}`),console.log(G),process.exit(1);}}async function he(e){let{values:a}=parseArgs({args:e,options:{"project-id":{type:"string",short:"p"},output:{type:"string",short:"o"},config:{type:"string",short:"c"},upload:{type:"boolean"},"no-upload":{type:"boolean"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});a.help&&(console.log(me),process.exit(0));let t=process.cwd(),o=a["project-id"]||m.basename(t),s=a.output||"project-metadata.json",n=a.verbose||false,c={};if(a.config)try{let p=await b.readFile(a.config,"utf-8");c=JSON.parse(p);}catch{console.error(`Failed to load config file: ${a.config}`),process.exit(1);}else {let p=m.join(t,"metadata.config.json");try{let l=await b.readFile(p,"utf-8");c=JSON.parse(l),n&&console.log(`Loaded config from ${p}`);}catch{}}let r=d({...c,projectId:o,verbose:n,output:{file:{enabled:true,path:s},...c.output}});console.log(`
|
|
89
|
+
\u{1F4E6} Analyzing project: ${o}`),console.log(`\u{1F4C1} Root directory: ${t}
|
|
90
|
+
`);let g=new y$1(r),i=new z$1(r);try{let p=Date.now(),l=await g.analyze(t),x=Date.now()-p,u=m.resolve(t,s);await i.write(l,u),r.output.api?.enabled&&r.output.api.endpoint&&(await new A(r).send(l),console.log(`\u2601\uFE0F Sent to API: ${r.output.api.endpoint}`)),a.upload||!a["no-upload"]&&c.output?.database?.enabled?await je(c,l,n):n&&console.log("\u2139\uFE0F DB upload skipped (use --upload to enable)"),console.log(`\u2705 Analysis completed in ${x}ms
|
|
91
|
+
`),console.log("\u{1F4CA} Results:"),console.log(` Total files: ${l.stats.totalFiles}`),console.log(` - Routes: ${l.stats.byType.route}`),console.log(` - Components: ${l.stats.byType.component}`),console.log(` - Hooks: ${l.stats.byType.hook}`),console.log(` - Services: ${l.stats.byType.service}`),console.log(` - APIs: ${l.stats.byType.api}`),console.log(` - Tables: ${l.stats.byType.table}`),console.log(` - Utilities: ${l.stats.byType.utility}`),console.log(`
|
|
92
|
+
\u{1F4C4} Output: ${u}`),l.stats.parseErrors.length>0&&(console.log(`
|
|
93
|
+
\u26A0\uFE0F Parse errors (${l.stats.parseErrors.length}):`),l.stats.parseErrors.slice(0,5).forEach(A=>{console.log(` - ${A}`);}),l.stats.parseErrors.length>5&&console.log(` ... and ${l.stats.parseErrors.length-5} more`)),console.log("");}catch(p){console.error("\u274C Analysis failed:",p),process.exit(1);}}async function we(e){let{values:a$1}=parseArgs({args:e,options:{input:{type:"string",short:"i"},config:{type:"string",short:"c"},verbose:{type:"boolean"},help:{type:"boolean",short:"h"}}});a$1.help&&(console.log(ye),process.exit(0));let t=process.cwd(),o=a$1.input||"project-metadata.json",s=a$1.verbose||false,n={};if(a$1.config)try{let i=await b.readFile(a$1.config,"utf-8");n=JSON.parse(i);}catch{console.error(`Failed to load config file: ${a$1.config}`),process.exit(1);}else {let i=m.join(t,"metadata.config.json");try{let p=await b.readFile(i,"utf-8");n=JSON.parse(p),s&&console.log(`Loaded config from ${i}`);}catch{console.error("\u274C metadata.config.json \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy init \uC73C\uB85C \uC124\uC815\uC744 \uBA3C\uC800 \uC0DD\uC131\uD558\uC138\uC694."),process.exit(1);}}let c=m.resolve(t,o),r;try{let i=await b.readFile(c,"utf-8");r=JSON.parse(i);}catch{console.error(`\u274C \uBA54\uD0C0\uB370\uC774\uD130 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${c}`),console.log(" npx metadatafy analyze \uB85C \uBA3C\uC800 \uBD84\uC11D\uC744 \uC2E4\uD589\uD558\uC138\uC694."),process.exit(1);}console.log(`
|
|
94
|
+
\u{1F4E4} Uploading metadata from: ${c}`);let g=await te(t,n);g||(console.error("\u274C \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."),console.log(" npx metadatafy database-init \uC73C\uB85C \uC124\uC815\uC744 \uCD94\uAC00\uD558\uC138\uC694."),process.exit(1));try{let p=await(await a(g)).upload(r);p.success?console.log(`
|
|
95
|
+
\u2705 ${p.message} (${g.provider})`):(console.error(`
|
|
96
|
+
\u274C Upload failed: ${p.error}`),process.exit(1));}catch(i){console.error(`
|
|
97
|
+
\u274C Upload error: ${i instanceof Error?i.message:i}`),process.exit(1);}}async function Pe(){let e=process.cwd(),a=m.basename(e);console.log(`
|
|
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 U(e);console.log(`
|
|
101
|
+
\u2705 \uAC10\uC9C0\uB41C \uC815\uBCF4:`),console.log(` \uD504\uB85C\uC81D\uD2B8 \uD0C0\uC785: ${L(t.type)}`),console.log(` \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800: ${t.packageManager}`),console.log(` TypeScript: ${t.hasTypescript?"\uC608":"\uC544\uB2C8\uC624"}`),t.existingFolders.length>0&&console.log(` \uC8FC\uC694 \uD3F4\uB354: ${t.existingFolders.slice(0,5).join(", ")}`);try{let o=await F(t.type),s=await M(t.packageManager),n=!1;o!=="node"&&o!=="unknown"&&(n=await B(o));let c=await K(),r=null;await V()&&(r=await J());let i={projectType:o,packageManager:s,projectInfo:t,addBuildIntegration:n,apiEndpoint:c,supabase:r},p=m.join(e,"metadata.config.json"),l=!0;try{await b.access(p),console.log(`
|
|
102
|
+
\u26A0\uFE0F metadata.config.json \uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.`),l=await W("\uB36E\uC5B4\uC4F8\uAE4C\uC694?",!1);}catch{}if(console.log(`
|
|
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 x=m.join(e,"package.json");try{let u=await b.readFile(x,"utf-8"),h=JSON.parse(u);({...h.dependencies,...h.devDependencies}).metadatafy||(console.log(`\u{1F4E6} \uB2E4\uC74C \uBA85\uB839\uC5B4\uB85C \uD328\uD0A4\uC9C0\uB97C \uC124\uCE58\uD558\uC138\uC694:
|
|
107
|
+
`),console.log(` ${H(s)}
|
|
108
|
+
`));}catch{}if(n?console.log("\u{1F527} \uBE4C\uB4DC \uC2DC \uC790\uB3D9\uC73C\uB85C \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4."):(console.log(`\u{1F4A1} \uC218\uB3D9 \uBD84\uC11D \uBA85\uB839\uC5B4:
|
|
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 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);});
|
|
@@ -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;
|