Socket
Socket
Sign inDemoInstall

declarative-routing-mod

Package Overview
Dependencies
92
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.6-3 to 0.1.6-4

22

dist/index.js
#!/usr/bin/env node
import{Command as Qe}from"commander";import{Command as Ue}from"commander";import Ve from"fs-extra";import{red as le}from"kleur/colors";import Be from"path";import j from"path";import A from"fs";import{z as f}from"zod";var D="declarative-routing.config.json",M=f.object({mode:f.enum(["nextjs","react-router"]),src:f.string().optional(),routes:f.string(),openapi:f.object({target:f.string(),template:f.string()}).optional(),importPathPrefix:f.string().optional()});function l(){let e=JSON.parse(A.readFileSync(j.resolve(`./${D}`)).toString()),t=M.safeParse(e);if(!t.success)throw console.error("Invalid config file"),new Error(t.error.issues.map(o=>o.message).join(`
import{Command as Xe}from"commander";import{Command as Ve}from"commander";import Be from"fs-extra";import{red as me}from"kleur/colors";import He from"path";import j from"path";import A from"fs";import{z as f}from"zod";var D="declarative-routing.config.json",M=f.object({mode:f.enum(["nextjs","react-router"]),src:f.string().optional(),routes:f.string(),openapi:f.object({target:f.string(),template:f.string()}).optional(),importPathPrefix:f.string().optional()});function l(){let e=JSON.parse(A.readFileSync(j.resolve(`./${D}`)).toString()),t=M.safeParse(e);if(!t.success)throw console.error("Invalid config file"),new Error(t.error.issues.map(o=>o.message).join(`
`));return t.data}function k(){return A.existsSync(j.resolve(`./${D}`))}function R(e){let t=M.safeParse(e);if(!t.success)throw console.error("Invalid config"),new Error(t.error.issues.map(o=>o.message).join(`
`));A.writeFileSync(j.resolve(`./${D}`),JSON.stringify(t.data,null,2))}var x=(e,t)=>j.resolve(e.src||"",t);import $e from"path";import se from"fs-extra";import Ae from"ora";import{red as De,bold as ee,italic as Ie}from"kleur/colors";import te from"log-symbols";import Oe from"prompts";import v from"path";import d from"fs-extra";import{parseModule as Fe}from"magicast";import{glob as H}from"glob";import be from"handlebars";import _ from"fs-extra";import z from"path";import{fileURLToPath as Pe}from"url";var I={};async function w(e,t){if(!I[e]){let o=Pe(import.meta.url),r=z.dirname(o),i=_.readFileSync(z.resolve(r,`../assets/${e}`)).toString();I[e]=be.compile(i)}return I[e](t)}async function m(e,t,o){_.writeFileSync(t,await w(e,o))}import{detect as ve}from"@antfu/ni";import{fileURLToPath as Se}from"url";import O from"path";import N from"fs-extra";import{execa as G}from"execa";import{diffLines as je}from"diff";import{bold as ke,green as Re,red as Ce}from"kleur/colors";import Te from"boxen";function W(){let e=Se(import.meta.url),t=O.dirname(e),o=O.resolve(t,"../package.json");return N.readJSONSync(o)}function U(e){let t=O.resolve("./package.json"),o=N.readJSONSync(t),r={...o,scripts:{...o.scripts}};for(let i of Object.keys(e))r.scripts[i]||(r.scripts[i]=e[i]);return N.writeJSONSync(t,r,{spaces:2,EOL:`
`})}async function J(){let e=await ve({programmatic:!0,cwd:process.cwd()});return e==="yarn@berry"?"yarn":e==="pnpm@6"?"pnpm":e==="bun"?"bun":e??"npm"}async function b(e,t=!1){if(!e?.length)return;let o=await J();t?await G(o,[o==="npm"?"install":"add","-D",...e]):await G(o,[o==="npm"?"install":"add",...e])}function V(e,t){let o=[];for(let r of je(e,t)){let i=r.value.trim().split(`
`).slice(0,r.count);i.length!==0&&(r.added&&i.forEach(s=>{o.push(ke(Re(s)))}),r.removed&&i.forEach(s=>{o.push(Ce(s))}))}return o.join(`
`)}var P=e=>e.replace(/[^a-zA-Z0-9]/g,""),C=e=>e.charAt(0).toUpperCase()+e.slice(1);function B(e){console.log(Te(e,{width:80,padding:{left:2,right:2,top:0,bottom:0},borderStyle:"round",dimBorder:!0}))}var y={},Y={GET:["result"],POST:["body","result"],DELETE:[],UPDATE:["body","result"]};function q(e){delete y[e]}async function Z(e=!1){let t=l(),o=new Set;for(let{verbs:u}of Object.values(y))if(u.length>0)for(let h of u)o.add(`make${C(h.toLowerCase())}Route`);else o.add("makeRoute");let r=Object.values(y).sort((u,h)=>u.pathTemplate.localeCompare(h.pathTemplate)),i=[],s=[];for(let{verbs:u,pathTemplate:h,importKey:L}of r)if(u.length===0)i.push({pathTemplate:h,importKey:L});else for(let $ of u)s.push({pathTemplate:h,importKey:L,verb:$,upperVerb:C($.toLowerCase()),lowerVerb:$.toLowerCase()});let n=await w("shared/index.ts.template",{imports:Array.from(o).sort().join(", "),routeImports:r,pageRoutes:i,apiRoutes:s}),p=v.resolve(t.routes,"index.ts"),c=d.existsSync(p)?d.readFileSync(p).toString():"",a="";return c!==n&&(a=V(c,n)||"",e||B(a),d.writeFileSync(p,n)),a}async function T(e){let t=l(),{importPathPrefix:o}=t,r={importPath:`${o||"@/app"}/${e}`.replace(/.ts$/,""),infoPath:`/${e}`,importKey:"",verbs:[],pathTemplate:""},i=d.readFileSync(x(t,e)).toString(),s=Fe(i);r.importKey=r.importKey||s.exports.Route?.name||"tempKey";for(let n of["GET","POST","DELETE","PUT"])s.exports[n]&&r.verbs.push(n);return r.pathTemplate=`/${v.parse(e).dir.split(v.sep).join("/")}`,y[e]=r,r.verbs.length||1}async function Ee(e,t){let o=t.replace(/\.(js|jsx|ts|tsx)$/,".info.ts"),r=x(e,o),i=v.parse(o).dir.split(v.sep).filter(a=>a.length),s="Home";i.length&&(s=i.map(a=>C(P(a))).join(""));let n=[];for(let a of i)a.startsWith("[[...")&&a.endsWith("]]")?n.push(`${P(a)}: z.string().array().optional()`):a.startsWith("[...")&&a.endsWith("]")?n.push(`${P(a)}: z.string().array()`):a.startsWith("[")&&a.endsWith("]")&&n.push(`${P(a)}: z.string()`);let p=d.readFileSync(x(e,t)).toString(),c=[];for(let a of Object.keys(Y))p.includes(`function ${a}(`)&&c.push(a);await m("shared/info.ts.template",r,{name:s,params:n,verbs:c.map(a=>({verb:a,keys:Y[a]}))})}async function F(e){let t=l(),o=e.replace(/\.(js|jsx|ts|tsx)$/,".info.ts"),r=x(t,o);return d.existsSync(r)?!1:(await Ee(t,e),!0)}async function E(e=!1){let t=l(),o=await H(["**/page.{js,ts,jsx,tsx}","**/route.{js,ts,jsx,tsx}","page.{js,ts,jsx,tsx}","route.{js,ts,jsx,tsx}"],{cwd:t.src}),r=0;for(let p of o)await F(p)&&r++;!e&&r>0&&console.log(`Added ${r} new info files`);let i=await H(["**/page.info.{js,ts,jsx,tsx}","**/route.info.{js,ts,jsx,tsx}","page.info.{js,ts,jsx,tsx}","route.info.{js,ts,jsx,tsx}"],{cwd:t.src}),s=0;for(let p of i)s+=await T(p);e||console.log(`${s} total routes`);let n=await Z(e);return t.openapi&&await Q(t),{routesAdded:r,routeCount:s,diff:n}}async function S(e=!1){let t=l();await Z(e),t.openapi&&await Q(t)}async function Q(e){if(!e.openapi)return;let t=d.readFileSync(e.openapi.template).toString(),o=[],r=[],i=e.routes.replace("./","").split("/").map(()=>"..").join("/");for(let s of Object.values(y))if(s.verbs.length>0){o.push(await w("shared/openapi-import.template",{importKey:s.importKey,pathPrefix:i,srcDir:(e.src||"").replace("./",""),import:s.infoPath.replace(".ts","")}));for(let n of s.verbs)r.push(await w("shared/openapi-register.template",{lowerVerb:n.toLowerCase(),pathTemplate:s.pathTemplate,verb:n,importKey:s.importKey,isNotDELETE:n!=="DELETE",isPOSTorPUT:n==="PUT"||n==="POST"}))}t=t.replace(/\/\/ \{\{IMPORTS\}\}/,o.join(`
`));A.writeFileSync(j.resolve(`./${D}`),JSON.stringify(t.data,null,2))}var x=(e,t)=>j.resolve(e.src||"",t);import Ae from"path";import ne from"fs-extra";import De from"ora";import{red as Ie,bold as te,italic as Oe}from"kleur/colors";import oe from"log-symbols";import Ne from"prompts";import v from"path";import d from"fs-extra";import{parseModule as Ee}from"magicast";import{glob as H}from"glob";import Pe from"handlebars";import _ from"fs-extra";import z from"path";import{fileURLToPath as ve}from"url";var I={};async function w(e,t){if(!I[e]){let o=ve(import.meta.url),r=z.dirname(o),i=_.readFileSync(z.resolve(r,`../assets/${e}`)).toString();I[e]=Pe.compile(i)}return I[e](t)}async function m(e,t,o){_.writeFileSync(t,await w(e,o))}import{detect as Se}from"@antfu/ni";import{fileURLToPath as je}from"url";import O from"path";import N from"fs-extra";import{execa as G}from"execa";import{diffLines as ke}from"diff";import{bold as Re,green as Ce,red as Te}from"kleur/colors";import Fe from"boxen";function W(){let e=je(import.meta.url),t=O.dirname(e),o=O.resolve(t,"../package.json");return N.readJSONSync(o)}function U(e){let t=O.resolve("./package.json"),o=N.readJSONSync(t),r={...o,scripts:{...o.scripts}};for(let i of Object.keys(e))r.scripts[i]||(r.scripts[i]=e[i]);return N.writeJSONSync(t,r,{spaces:2,EOL:`
`})}async function J(){let e=await Se({programmatic:!0,cwd:process.cwd()});return e==="yarn@berry"?"yarn":e==="pnpm@6"?"pnpm":e==="bun"?"bun":e??"npm"}async function b(e,t=!1){if(!e?.length)return;let o=await J();t?await G(o,[o==="npm"?"install":"add","-D",...e]):await G(o,[o==="npm"?"install":"add",...e])}function V(e,t){let o=[];for(let r of ke(e,t)){let i=r.value.trim().split(`
`).slice(0,r.count);i.length!==0&&(r.added&&i.forEach(s=>{o.push(Re(Ce(s)))}),r.removed&&i.forEach(s=>{o.push(Te(s))}))}return o.join(`
`)}var P=e=>e.replace(/[^a-zA-Z0-9]/g,""),C=e=>e.charAt(0).toUpperCase()+e.slice(1);function B(e){console.log(Fe(e,{width:80,padding:{left:2,right:2,top:0,bottom:0},borderStyle:"round",dimBorder:!0}))}var y={},Y={GET:["result"],POST:["body","result"],DELETE:[],UPDATE:["body","result"]},q=["**/node_modules/**","dist/**","**/dist/**"];function Z(e){delete y[e]}async function Q(e=!1){let t=l(),o=new Set;for(let{verbs:u}of Object.values(y))if(u.length>0)for(let h of u)o.add(`make${C(h.toLowerCase())}Route`);else o.add("makeRoute");let r=Object.values(y).sort((u,h)=>u.pathTemplate.localeCompare(h.pathTemplate)),i=[],s=[];for(let{verbs:u,pathTemplate:h,importKey:L}of r)if(u.length===0)i.push({pathTemplate:h,importKey:L});else for(let $ of u)s.push({pathTemplate:h,importKey:L,verb:$,upperVerb:C($.toLowerCase()),lowerVerb:$.toLowerCase()});let n=await w("shared/index.ts.template",{imports:Array.from(o).sort().join(", "),routeImports:r,pageRoutes:i,apiRoutes:s}),p=v.resolve(t.routes,"index.ts"),c=d.existsSync(p)?d.readFileSync(p).toString():"",a="";return c!==n&&(a=V(c,n)||"",e||B(a),d.writeFileSync(p,n)),a}async function T(e){let t=l(),{importPathPrefix:o}=t,r={importPath:`${o||"@/app"}/${e}`.replace(/.ts$/,""),infoPath:`/${e}`,importKey:"",verbs:[],pathTemplate:""},i=d.readFileSync(x(t,e)).toString(),s=Ee(i);r.importKey=r.importKey||s.exports.Route?.name||"tempKey";for(let n of["GET","POST","DELETE","PUT"])s.exports[n]&&r.verbs.push(n);return r.pathTemplate=`/${v.parse(e).dir.split(v.sep).join("/")}`,y[e]=r,r.verbs.length||1}async function $e(e,t){let o=t.replace(/\.(js|jsx|ts|tsx)$/,".info.ts"),r=x(e,o),i=v.parse(o).dir.split(v.sep).filter(a=>a.length),s="Home";i.length&&(s=i.map(a=>C(P(a))).join(""));let n=[];for(let a of i)a.startsWith("[[...")&&a.endsWith("]]")?n.push(`${P(a)}: z.string().array().optional()`):a.startsWith("[...")&&a.endsWith("]")?n.push(`${P(a)}: z.string().array()`):a.startsWith("[")&&a.endsWith("]")&&n.push(`${P(a)}: z.string()`);let p=d.readFileSync(x(e,t)).toString(),c=[];for(let a of Object.keys(Y))p.includes(`function ${a}(`)&&c.push(a);await m("shared/info.ts.template",r,{name:s,params:n,verbs:c.map(a=>({verb:a,keys:Y[a]}))})}async function F(e){let t=l(),o=e.replace(/\.(js|jsx|ts|tsx)$/,".info.ts"),r=x(t,o);return d.existsSync(r)?!1:(await $e(t,e),!0)}async function E(e=!1){let t=l(),o=await H(["**/page.{js,ts,jsx,tsx}","**/route.{js,ts,jsx,tsx}","page.{js,ts,jsx,tsx}","route.{js,ts,jsx,tsx}"],{cwd:t.src,ignore:q}),r=0;for(let p of o)await F(p)&&r++;!e&&r>0&&console.log(`Added ${r} new info files`);let i=await H(["**/page.info.{js,ts,jsx,tsx}","**/route.info.{js,ts,jsx,tsx}","page.info.{js,ts,jsx,tsx}","route.info.{js,ts,jsx,tsx}"],{cwd:t.src,ignore:q}),s=0;for(let p of i)s+=await T(p);e||console.log(`${s} total routes`);let n=await Q(e);return t.openapi&&await X(t),{routesAdded:r,routeCount:s,diff:n}}async function S(e=!1){let t=l();await Q(e),t.openapi&&await X(t)}async function X(e){if(!e.openapi)return;let t=d.readFileSync(e.openapi.template).toString(),o=[],r=[],i=e.routes.replace("./","").split("/").map(()=>"..").join("/");for(let s of Object.values(y))if(s.verbs.length>0){o.push(await w("shared/openapi-import.template",{importKey:s.importKey,pathPrefix:i,srcDir:(e.src||"").replace("./",""),import:s.infoPath.replace(".ts","")}));for(let n of s.verbs)r.push(await w("shared/openapi-register.template",{lowerVerb:n.toLowerCase(),pathTemplate:s.pathTemplate,verb:n,importKey:s.importKey,isNotDELETE:n!=="DELETE",isPOSTorPUT:n==="PUT"||n==="POST"}))}t=t.replace(/\/\/ \{\{IMPORTS\}\}/,o.join(`
`)),t=t.replace(/\/\/ \{\{REGISTRATIONS\}\}/,r.join(`
`)),d.writeFileSync(e.openapi.target,t)}async function X(e,t){let o=Object.values(y).sort((s,n)=>s.importPath.localeCompare(n.importPath)),r=[];for(let{infoPath:s,verbs:n,importKey:p,pathTemplate:c}of o)if(n.length>0)for(let a of n)r.push(`\`${s}\`: Add typing for \`${a}\``),r.push(`Convert \`${a}\` fetch calls to \`${c}\` to \`${a.toLowerCase()}${p}(...)\` calls`);else r.push(`\`${s}\`: Add search typing to if the page supports search paramaters`),r.push(`Convert \`Link\` components for \`${c}\` to \`<${p}.Link>\``),s.includes("[")&&r.push(`Convert \`params\` typing in \`${s.replace(".info","")}\` to \`z.infer<>\``);let i=[];for(let{pathTemplate:s,verbs:n,importKey:p}of o)if(n.length>0)for(let c of n)i.push({pathTemplate:s,verb:c,importKey:p,usage:`${c.toLowerCase()}${p}(...)`});else i.push({pathTemplate:s,verb:"-",importKey:p,usage:`<${p}.Link>`});await m(`${t}/README.md.template`,"./DR-README.md",{tasks:r,routes:i,packageManager:e==="npm"?"npm run":e})}var oe={dependencies:["zod","query-string"],devDependencies:[]},Ne={"dr:build":"npx declarative-routing build","dr:build:watch":"npx declarative-routing build --watch"},re={dependencies:[],devDependencies:["yaml","@asteasolutions/zod-to-openapi"]},Je={openapi:"npm run openapi:yaml && npm run openapi:html","openapi:yaml":"ts-node ./src/routes/openapi.ts","openapi:html":"npx @redocly/cli build-docs openapi-docs.yml"};async function Ke(){let e=l(),t=!!e.openapi,{routes:o}=l(),r=Ae("Installing components...").start();se.mkdirpSync(o),await m("nextjs/makeRoute.tsx",$e.resolve(o,"./makeRoute.tsx"),{}),r.text="Getting package mananger.";let i=await J();r.text="Installing dependencies.";let s=[...oe.dependencies,...t?re.dependencies:[]];await b(s),r.text="Installing dev dependencies.";let n=[...oe.devDependencies,...t?re.devDependencies:[]];await b(n,!0),r.text="Adding package.json scripts.";let p={...Ne,...t?Je:{}};U(p),e.openapi&&(r.text="Setting up OpenAPI.",await m("shared/openapi.template.ts",e.openapi?.template,{})),r.text="Adding info files and building routes.";let c=await E(!0);r.text="Building README.",await X(i,e.mode),r.succeed("Done."),console.log(`
${ee("Initialization completed successfully")}`),c.routesAdded>0&&console.log(te.success,`Added ${c.routesAdded} .info files to your project.`),console.log(te.success,`Added declarative-routing support files in ${e.routes}.`),console.log(`
Your next step is to read the ${De(Ie(ee("DR-README.md")))} file and follow the post setup tasks.`)}async function ne(){let e="./src/app",t="./src/routes";se.existsSync("./app")&&(e="./app",t="./routes");let o=await Oe([{type:"text",name:"src",message:"What is your source directory?",initial:e},{type:"text",name:"routes",message:"Where do you want the routes directory?",initial:t},{type:"confirm",name:"openapi",message:"Add OpenAPI output?",initial:!0}]);R({mode:"nextjs",src:o.src??e,routes:o.routes??t,openapi:o.openapi??!0?{target:`${t}/openapi.ts`,template:`${t}/openapi.template.ts`}:void 0}),await Ke()}import Le from"prompts";import Me from"ora";import{red as ze,bold as ie,italic as _e}from"kleur/colors";import ae from"path";import pe from"fs-extra";var Ge={dependencies:["zod","query-string"]};async function We(){let e=Me("Installing components...").start(),{routes:t}=l();pe.mkdirpSync(t),await m("react-router/index.ts",ae.resolve(t,"./index.ts"),{}),pe.mkdirpSync(t),await m("react-router/makeRoute.tsx",ae.resolve(t,"./makeRoute.tsx"),{}),e.text="Installing dependencies.",b(Ge.dependencies),await m("react-router/README.md.template","./DR-README.md",{routes:t}),e.succeed("Done."),console.log(`
${ie("Initialization completed successfully")}`),console.log(`
Your next step is to read the ${ze(_e(ie("DR-README.md")))} file and follow the post setup tasks.`)}async function ce(){let e=await Le([{type:"text",name:"routes",message:"Where do you want the routes directory?",initial:"./src/routes"}]);R({mode:"react-router",routes:e.routes}),await We()}var me=new Ue().name("init").description("initialize your project and install dependencies").action(async()=>{if(k()){console.log(`This project has ${le("already been initialized")} to use declarative routes.`);return}let e=Be.resolve("./package.json"),t=Ve.readJSONSync(e);t?.dependencies?.next?(console.log("Setting up declarative routes for Next.js"),await ne()):t?.dependencies?.["react-router-dom"]?(console.log("Setting up React-Router..."),await ce()):(console.log(le("No supported framework detected.")),console.log("Please use declarative routes in a Next.js or React-Router-Dom application."))});import Ye from"chokidar";import{Command as qe}from"commander";import{red as Ze}from"kleur/colors";var g={},ue=!1,ge=!1,He=()=>Object.values(g).every(e=>e),K=async()=>{He()?ge&&(ue=!0,await S()):console.log(`Waiting for: ${Object.keys(g).filter(e=>!g[e])}`)},fe=e=>e.match(/\.info\.ts(x?)$/),de=e=>e.match(/(page|route)\.(js|jsx|ts|tsx)$/),he=e=>{ue?fe(e)?T(e).then(async()=>await S()):de(e)&&F(e).then(async()=>await S()):fe(e)?(g[e]=!1,T(e).then(()=>{g[e]=!0,K()})):de(e)&&(g[e]=!1,F(e).then(()=>{g[e]=!0,K()}))},ye=()=>{ge=!0,K()};function xe(e){q(e),S()}var we=new qe().name("build").description("initialize your project and install dependencies").option("-w, --watch","watch files continuously",!1).action(async e=>{if(!k()){console.log(`This project has ${Ze("NOT been initialized for declarative routing")}.
Initialize the project first, then run build to update if routes are added or altered.`);return}if(e.watch){let t=l();Ye.watch(["./**/(route|page).info.(ts|tsx)","./**/(route|page).(js|jsx|ts|tsx)"],{ignored:/(^|[\/\\])\../,persistent:!0,cwd:t.src,usePolling:!0}).on("ready",()=>{ye()}).on("all",async(o,r)=>{o==="unlink"||o==="unlinkDir"?xe(r):(o==="add"||o==="change")&&he(r)})}else await E()});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function Xe(){let e=await W(),t=new Qe().name(e?.name||"declarative-routing").description(`${e?.description} CLI`).version(e?.version||"0.0.1","-v, --version","display the version number");t.addCommand(me).addCommand(we),t.parse()}Xe();
`)),d.writeFileSync(e.openapi.target,t)}async function ee(e,t){let o=Object.values(y).sort((s,n)=>s.importPath.localeCompare(n.importPath)),r=[];for(let{infoPath:s,verbs:n,importKey:p,pathTemplate:c}of o)if(n.length>0)for(let a of n)r.push(`\`${s}\`: Add typing for \`${a}\``),r.push(`Convert \`${a}\` fetch calls to \`${c}\` to \`${a.toLowerCase()}${p}(...)\` calls`);else r.push(`\`${s}\`: Add search typing to if the page supports search paramaters`),r.push(`Convert \`Link\` components for \`${c}\` to \`<${p}.Link>\``),s.includes("[")&&r.push(`Convert \`params\` typing in \`${s.replace(".info","")}\` to \`z.infer<>\``);let i=[];for(let{pathTemplate:s,verbs:n,importKey:p}of o)if(n.length>0)for(let c of n)i.push({pathTemplate:s,verb:c,importKey:p,usage:`${c.toLowerCase()}${p}(...)`});else i.push({pathTemplate:s,verb:"-",importKey:p,usage:`<${p}.Link>`});await m(`${t}/README.md.template`,"./DR-README.md",{tasks:r,routes:i,packageManager:e==="npm"?"npm run":e})}var re={dependencies:["zod","query-string"],devDependencies:[]},Je={"dr:build":"npx declarative-routing build","dr:build:watch":"npx declarative-routing build --watch"},se={dependencies:[],devDependencies:["yaml","@asteasolutions/zod-to-openapi"]},Ke={openapi:"npm run openapi:yaml && npm run openapi:html","openapi:yaml":"ts-node ./src/routes/openapi.ts","openapi:html":"npx @redocly/cli build-docs openapi-docs.yml"};async function Le(){let e=l(),t=!!e.openapi,{routes:o}=l(),r=De("Installing components...").start();ne.mkdirpSync(o),await m("nextjs/makeRoute.tsx",Ae.resolve(o,"./makeRoute.tsx"),{}),r.text="Getting package mananger.";let i=await J();r.text="Installing dependencies.";let s=[...re.dependencies,...t?se.dependencies:[]];await b(s),r.text="Installing dev dependencies.";let n=[...re.devDependencies,...t?se.devDependencies:[]];await b(n,!0),r.text="Adding package.json scripts.";let p={...Je,...t?Ke:{}};U(p),e.openapi&&(r.text="Setting up OpenAPI.",await m("shared/openapi.template.ts",e.openapi?.template,{})),r.text="Adding info files and building routes.";let c=await E(!0);r.text="Building README.",await ee(i,e.mode),r.succeed("Done."),console.log(`
${te("Initialization completed successfully")}`),c.routesAdded>0&&console.log(oe.success,`Added ${c.routesAdded} .info files to your project.`),console.log(oe.success,`Added declarative-routing support files in ${e.routes}.`),console.log(`
Your next step is to read the ${Ie(Oe(te("DR-README.md")))} file and follow the post setup tasks.`)}async function ie(){let e="./src/app",t="./src/routes";ne.existsSync("./app")&&(e="./app",t="./routes");let o=await Ne([{type:"text",name:"src",message:"What is your source directory?",initial:e},{type:"text",name:"routes",message:"Where do you want the routes directory?",initial:t},{type:"confirm",name:"openapi",message:"Add OpenAPI output?",initial:!0}]);R({mode:"nextjs",src:o.src??e,routes:o.routes??t,openapi:o.openapi??!0?{target:`${t}/openapi.ts`,template:`${t}/openapi.template.ts`}:void 0}),await Le()}import Me from"prompts";import ze from"ora";import{red as _e,bold as ae,italic as Ge}from"kleur/colors";import pe from"path";import ce from"fs-extra";var We={dependencies:["zod","query-string"]};async function Ue(){let e=ze("Installing components...").start(),{routes:t}=l();ce.mkdirpSync(t),await m("react-router/index.ts",pe.resolve(t,"./index.ts"),{}),ce.mkdirpSync(t),await m("react-router/makeRoute.tsx",pe.resolve(t,"./makeRoute.tsx"),{}),e.text="Installing dependencies.",b(We.dependencies),await m("react-router/README.md.template","./DR-README.md",{routes:t}),e.succeed("Done."),console.log(`
${ae("Initialization completed successfully")}`),console.log(`
Your next step is to read the ${_e(Ge(ae("DR-README.md")))} file and follow the post setup tasks.`)}async function le(){let e=await Me([{type:"text",name:"routes",message:"Where do you want the routes directory?",initial:"./src/routes"}]);R({mode:"react-router",routes:e.routes}),await Ue()}var fe=new Ve().name("init").description("initialize your project and install dependencies").action(async()=>{if(k()){console.log(`This project has ${me("already been initialized")} to use declarative routes.`);return}let e=He.resolve("./package.json"),t=Be.readJSONSync(e);t?.dependencies?.next?(console.log("Setting up declarative routes for Next.js"),await ie()):t?.dependencies?.["react-router-dom"]?(console.log("Setting up React-Router..."),await le()):(console.log(me("No supported framework detected.")),console.log("Please use declarative routes in a Next.js or React-Router-Dom application."))});import qe from"chokidar";import{Command as Ze}from"commander";import{red as Qe}from"kleur/colors";var g={},ge=!1,he=!1,Ye=()=>Object.values(g).every(e=>e),K=async()=>{Ye()?he&&(ge=!0,await S()):console.log(`Waiting for: ${Object.keys(g).filter(e=>!g[e])}`)},de=e=>e.match(/\.info\.ts(x?)$/),ue=e=>e.match(/(page|route)\.(js|jsx|ts|tsx)$/),ye=e=>{ge?de(e)?T(e).then(async()=>await S()):ue(e)&&F(e).then(async()=>await S()):de(e)?(g[e]=!1,T(e).then(()=>{g[e]=!0,K()})):ue(e)&&(g[e]=!1,F(e).then(()=>{g[e]=!0,K()}))},xe=()=>{he=!0,K()};function we(e){Z(e),S()}var be=new Ze().name("build").description("initialize your project and install dependencies").option("-w, --watch","watch files continuously",!1).action(async e=>{if(!k()){console.log(`This project has ${Qe("NOT been initialized for declarative routing")}.
Initialize the project first, then run build to update if routes are added or altered.`);return}if(e.watch){let t=l();qe.watch(["./**/(route|page).info.(ts|tsx)","./**/(route|page).(js|jsx|ts|tsx)"],{ignored:/(^|[\/\\])\../,persistent:!0,cwd:t.src,usePolling:!0}).on("ready",()=>{xe()}).on("all",async(o,r)=>{o==="unlink"||o==="unlinkDir"?we(r):(o==="add"||o==="change")&&ye(r)})}else await E()});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function et(){let e=await W(),t=new Xe().name(e?.name||"declarative-routing").description(`${e?.description} CLI`).version(e?.version||"0.0.1","-v, --version","display the version number");t.addCommand(fe).addCommand(be),t.parse()}et();
//# sourceMappingURL=index.js.map
{
"name": "declarative-routing-mod",
"version": "0.1.6-3",
"version": "0.1.6-4",
"description": "Fork of declarative-routing",

@@ -5,0 +5,0 @@ "bin": {

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc