leds-spark-lib
Version:
Biblioteca de geração de código
138 lines (119 loc) • 3.71 kB
JavaScript
import fs from "fs";
import { expandToString } from "../../../../util/template-string.js";
import path from "path";
export function generate(project_abstraction, target_folder) {
fs.writeFileSync(path.join(target_folder, 'auth.ts'), generateAuth(project_abstraction, target_folder));
fs.writeFileSync(path.join(target_folder, 'ui.ts'), generateUi(project_abstraction, target_folder));
}
function generateAuth(project_abstraction, target_folder) {
const classList = [];
for (const pkg of project_abstraction.getCoresPackages()) {
for (const clazz of pkg.getPackageLevelClasses()) {
classList.push(clazz);
}
}
return expandToString `
import { defineStore } from 'pinia'
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { useCookies } from '@vueuse/integrations/useCookies'
export const useAuthStore = defineStore('auth', () => {
const router = useRouter()
const usuario = ref('')
const cookies = useCookies(['token'])
const getSessionToken = () => {
return cookies.get('token')
}
const setSessionToken = (newToken: boolean) => {
return cookies.set('token', newToken,
{
path: '/',
// 10 minutos, para que seja possivel ver a expiracao de sessao
// em funcionamento
maxAge: 600
})
}
const login = async (novoUsuario: string, senha: string) => {
// requisicao a api vai aqui
// talvez validar de novo?
usuario.value = novoUsuario
setSessionToken(true)
return await router.push({ name: '${classList[0].getName().toLowerCase()}-home' })
}
const logout = async () => {
usuario.value = ''
setSessionToken(false)
return await router.push({ name: 'login' })
}
const estaLogado = () => {
return getSessionToken()
}
return {
usuario,
login,
logout,
estaLogado,
}
})
`;
}
function generateUi(project_abstraction, target_folder) {
return expandToString `
import { defineStore } from 'pinia'
import { computed, ref, type ComputedRef, type Ref } from 'vue'
// tipo ruim. esperar vuetify implementar e expor o tipo
type Snackbar = Record<string, any>
interface PrivateUIStore {
mensagensAlerta: Ref<Snackbar[]>
}
// pinia reclama quando usa uma store dentro da outra, por algum motivo
interface PrivateUIStore_ {
mensagensAlerta: Snackbar[]
}
// https://masteringpinia.com/blog/how-to-create-private-state-in-stores
const usePrivateState = defineStore('ui-private', () => {
const mensagensAlerta = ref<Snackbar>([])
return {
mensagensAlerta,
} as PrivateUIStore
})
interface UIStore {
mensagensAlerta: ComputedRef<Snackbar[]>
exibirAlertas: (novaMsgAlerta: Snackbar) => boolean
exibirAlerta: (novaMsgAlerta: Snackbar) => boolean
fecharAlerta: (mensagensRestantes: Snackbar[]) => boolean
carregando: Ref<boolean>
mostrarBarraLateral: Ref<boolean>
}
export const useUiStore = defineStore('ui', () => {
const privado = usePrivateState() as unknown as PrivateUIStore_
const mensagensAlerta = computed(() => privado.mensagensAlerta)
const exibirAlertas = (
novasMensagens: Snackbar[]
) => {
privado.mensagensAlerta.splice(0, 0, ...novasMensagens)
return true
}
const exibirAlerta = (
novaMsgAlerta: Snackbar
) => {
return exibirAlertas([novaMsgAlerta])
}
const fecharAlerta = (mensagensRestantes: Snackbar[]) => {
privado.mensagensAlerta = mensagensRestantes
return true
}
const carregando = ref(false)
const mostrarBarraLateral = ref(true)
return {
mensagensAlerta,
exibirAlertas,
exibirAlerta,
fecharAlerta,
carregando,
mostrarBarraLateral
} as UIStore
})
`;
}
//# sourceMappingURL=generate.js.map