UNPKG

nuxt-module-structure

Version:

The Nuxt Module Structure package allows you to create a modular architecture for your Nuxt applications, organizing your code into layers. This helps in maintaining a clean structure, especially for large applications. [Nuxt Layers](https://nuxt.com/docs

3 lines (2 loc) 5.7 kB
import e from"fs";import n from"path";function o(o,t){const s=`~/${n.join(o,t)}`,r=function(o){let t=o;for(;t!==n.parse(t).root;){const o=n.join(t,"nuxt.config.ts"),s=n.join(t,"nuxt.config.js");if(e.existsSync(o))return o;if(e.existsSync(s))return s;t=n.dirname(t)}return null}(n.join(process.cwd(),o));r||(console.error("nuxt.config.ts or nuxt.config.js not found in any parent directory."),process.exit(1));let i=e.readFileSync(r,"utf8");const c=/extends:\s*\[(.*?)\]/s,a=i.match(c);if(a){let n=a[1].trim(),o=n?n.split(",").map((e=>e.trim().replace(/['"]/g,""))):[];if(o.includes(s))console.log(`Module "${s}" is already in parent.extend[]`);else{o.push(s);const n=`extends: [\n${o.map((e=>`'${e}'`)).join(",\n ")}\n ]\n `;i=i.replace(c,n),e.writeFileSync(r,i,"utf8"),console.log(`Added "${s}" to extend[] in ${r}`)}}else i=i.replace(/(export default defineNuxtConfig\s*\(\s*{)/,`$1\n extends: [\n '${s}'\n ],`),e.writeFileSync(r,i,"utf8"),console.log(`Created extend[] and added "${s}" in ${r}`)}const t=()=>'\n<template>\n<div>\n\n</div>\n</template>\n\n<script setup lang="ts">\n<\/script>\n\n<style scoped>\n/* Add your component styles here */\n</style>\n',s=()=>'\n export default defineNuxtConfig({\n dir: {\n pages: "./pages", // Custom pages directory\n layouts: "./layouts", // Custom layouts directory\n // plugins:"./plugins", // Custom plugins directory \n // assets: "./assets", // Custom assets directory\n // middleware: "./middleware", // Custom middleware directory\n },\n extends:[]\n });\n ',r=e=>`\n <template>\n <div class="">${e} page</div>\n </template>\n <script lang="ts" setup>\n definePageMeta({\n // layout: "module-lay",\n });\n <\/script>\n `,i=()=>'\n <script setup lang="ts">\n // import parent layout what you want and wrap solt inside it to make sited layout \n // import ParentLayout from "../../layouts/*****.vue" \n <\/script>\n \n <template>\n \x3c!-- <pearnt-layout> // id it has --\x3e\n <slot />\n \x3c!-- <pearnt-layout> --\x3e\n </template>\n \n ';function c(e){return e.split("-").map(((e,n)=>0===n?e:e.charAt(0).toUpperCase()+e.slice(1))).join("")}const a=e=>`\n import { defineStore } from "pinia";\n const use${c(e)}Store = defineStore("${c(e)}Store", () => {});\n export default use${c(e)}Store;\n \n `,l=()=>'\nexport default {\n\n}\n// import ar from "../i18n/ar";\n// import en from "../i18n/en";\n// import { useI18n } from "vue-i18n";\n// const { t } = useI18n({\n// messages: {\n// en: en,\n// ar: ar,\n// },\n// }); \n',u=()=>'\nimport en from "./global/en"\nimport ar from "./global/ar"\n\nexport default defineI18nConfig(() => ({\n legacy: false,\n locale: "ar",\n fallbackLocale: "",\n messages: {\n en: {\n ...en,\n },\n ar: {\n ...ar,\n },\n },\n}));\n',d=(n,o,t,s)=>e.writeFile(`${n}`,t(s),"utf8",(e=>{e?console.error(`Failed to create file: ${o} => ${s}`,e):console.log(`${o} => ${s}.vue created successfully! in ${n}`)}));function p(e,n,o){switch(n){case"component":d(e,n,t,o);break;case"layout":d(e,n,i,o);break;case"store":d(e,n,a,o);break;case"config":d(e,n,s,o);break;case"page":d(e,n,r,o);break;case"i18n":d(e,n,l,o);break;case"i18n_conf":d(e,n,u,o);break;default:console.error(`Unknown type: ${n}`)}}const f=({targetPath:t,moduleName:s,isPages:r=!0,isStore:i=!1,isLayout:c=!1,i18n:a=!1})=>{const l=n.resolve(process.cwd(),t,s);if(e.existsSync(l))console.error(`Module "${s}" already exists at: ${l}`);else{e.mkdirSync(l,{recursive:!0});const u=n.resolve(process.cwd(),`${l}/components`);e.mkdirSync(u,{recursive:!0});if(p(n.join(l,`components/${s}.vue`),"component","component"),r){const o=n.resolve(process.cwd(),`${l}/pages`);e.mkdirSync(o,{recursive:!0});p(n.join(l,`pages/${s}.vue`),"page",`${s}`)}else{const o=n.resolve(process.cwd(),`${l}/modules`);e.mkdirSync(o,{recursive:!0})}if(a){(()=>{const o=n.resolve(process.cwd(),"i18n");e.stat(o,((t,s)=>{t&&(console.log("create config for i18n"),e.mkdirSync(o,{recursive:!0}),p(n.resolve(o,"i18n.config.ts"),"i18n_conf","i18n.config"),e.mkdirSync(`${o}/global`,{recursive:!0}),p(`${o}/global/en.ts`,"i18n","en"),p(`${o}/global/ar.ts`,"i18n","ar"))}))})();const o=n.resolve(process.cwd(),`${l}/i18n`);e.mkdirSync(o,{recursive:!0});p(n.join(l,"i18n/en.ts"),"i18n","en");p(n.join(l,"i18n/ar.ts"),"i18n","ar"),(()=>{console.log("integrateI18nToNuxtConfig");const o=process.cwd(),t=["nuxt.config.js","nuxt.config.ts"].map((e=>n.join(o,e))).find((n=>e.existsSync(n)));t||(console.error("❌ No nuxt.config.js or nuxt.config.ts found!"),process.exit(1));let s=e.readFileSync(t,"utf-8");const r=/i18n\s*:\s*\{[^}]*\}/,i='vueI18n: "./i18n/i18n.config.ts",';r.test(s)?s.includes(i)?console.log("⚡ vueI18n is already set."):(s=s.replace(r,(e=>e.replace(/\}$/,` ${i}\n}`))),console.log("Added vueI18n inside existing i18n object.")):/export default defineNuxtConfig\(\{/.test(s)?(s=s.replace(/export default defineNuxtConfig\(\{/,`export default defineNuxtConfig({\n i18n: {\n ${i}\n },`),console.log("Added i18n object with vueI18n.")):(console.error("❌ Could not find 'export default defineNuxtConfig({ ... })' in Nuxt config."),process.exit(1)),e.writeFileSync(t,s,"utf-8"),console.log("Nuxt config updated successfully!")})()}if(p(n.join(l,"nuxt.config.ts"),"config","nuxt.config.ts"),c){const o=n.resolve(process.cwd(),`${l}/layouts`);e.mkdirSync(o,{recursive:!0});p(n.join(l,`layouts/${s}-lay.vue.vue`),"layout",`${s}`)}if(i){const o=n.resolve(process.cwd(),`${l}/store`);e.mkdirSync(o,{recursive:!0});p(n.join(l,`store/${s}Store.ts`),"store",`${s}`)}o(t,s)}};export{f as c}; //# sourceMappingURL=create-module-2e1295cf.js.map