stredit

1.0.8 • Public • Published

StrEdit

Este projeto foi desenvolvido com o intuito de facilitar o uso de cores, posicionamento e formatação de string de forma leve e individual tratando pequenas da api do console.

AVISO: Este modulo não funciona em consoles ficticiosos como vscode, sublimetext e outros, apenas em consoles nativos.

N|Solid N|Solid N|Solid

N|Solid N|Solid

Sobre:

Manipule strings no console de forma prática!

  • Mude a cor de fundo e da fonte sem alterar todo o console.
  • Use cores hexadecimais, como as usadas em css, exemplo: #FF0000
  • Manipule posicionamento e sobreposição de strings.
  • Formate textos com uma nova estrutura mask, exemplo: XX/XX/XX
  • Use o teclado como input para comandos ou ações.
  • Crie e mapeie painéis pré-definidos.
  • Manipule a scroll do console.
Update [1.0.8]:
+ Agora é possível escolher usar ou não as prototypes internas.
+ Corrigido a quebra de linhas de se.log.
+ Cursor do console agora pode ser exibido ou ocultado.
+ Estrutura de posicionamento do cursor, refeita.
+ Strings podem substituir uma linha inteira se desejado.
+ Foi adicionado mapeamento de cores RGB através de hexadecimal.
+ Toda a estrutura de strings foram refeitas.
+ Inputs do teclado são ouvidos de forma sync.
+ A scroll do console pode ser manipulada.

- Sobreposições e estruturas deprecarias foram removidas.
- Todas as promises foram removidas.

Como usar:

O uso deste projeto é bem simples, pois, suas funções foram pensadas em iniciantes na área de desenvolvimento para nodejs.

const se = require('stredit')()

Resumo:

const se = require('stredit')({
	//importMask: true,
	//importColors: true
})


const exemplo = {
	row: 3,
	column: 17,
	clearRow: true,
	//lastColumn: true,
	underline: true,
	color: {
		font: '#0000ff',
		background: '#ff00ff',
		reverse: true
	}
}

se.log('Teste de texto')
se.log('Teste de texto2', {row: 3, lastColumn: true, underline: true})
se.log(`Eu sou o Smuu`, exemplo)
se.log(`Outro teste`, { row: 4, clearRow: true, color: { font: '#FF0000' } })
const demonstrar = se.log(`DeehLeh`, { newline: true, clearRow: true, color: { font: '#00FF00' } })
se.log('Fábio', {column: 19})

console.log(demonstrar)

Resultado:

N|Solid

Manipulando cores em string:

const se = require('stredit')({
	importColors: true //Esta opção ativa as prototype fgColor e bgColor.
})

se.position.set(2, 3)
console.log(
	'F'.fgColor('#FF0000') +
	'á'.fgColor('#00ff2d') +
	'b'.fgColor('#d2d2d2') +
	'i'.fgColor('f4FD1a') +
	'o'.fgColor('#FF00ff')
)

Resultado:

N|Solid

O primeiro Hello World:

const se = require('stredit')({ importColors: true })

const exemplo = {
    row: 2,
    column: 5
}

se.log(' Hello '.fgColor('#000000').bgColor('#00ff22') + ' ' + 'World'.fgColor('#dd33ff'), exemplo)

Resultado:

N|Solid

Como imprimir um "Olá Mundo" customizado no console:

const se = require('stredit')()

const exemplo = {
    row: 3,
    column: 5,
    color: {
    	font: '#FF00ff',
    	background: '#ffffff',
    	reverse: true
    }
}

se.log('Olá', exemplo)

exemplo.column += 4
se.log('mundo', exemplo)

Resultado:

N|Solid

Usando esta mesma estrutura, se torna possível a manipulação de linhas e colunas da seguinte forma:

const se = require('stredit')()

const exemplo = {
	column: 5,
	row: 2
}

se.log('Exemplo', exemplo)

exemplo.row = 1
exemplo.column = 3

se.log('Fábio', exemplo)

Resultado:

N|Solid

Usando a propriedade de sobreposição(newline) de linhas:

const se = require('stredit')()

const exemplo = {
	row: 3,
	column: 5,
    color: {
    	font: '#ffffff',
        background: '#fd0f0d'
    }
}

console.log('//newline: true')
se.log('aaa', exemplo)
se.log('bb', exemplo)
se.log('c', exemplo)

Resultado:

N|Solid

Um dos fortes da StrEdit é exatamente mudar a formatação de uma string através do protótipo .mask como mostra este exemplo:

const se = require('stredit')({
	importMask: true ////Esta opção ativa a prototype mask.
})

const exemplo = 1234567890
const resultado1 = exemplo.mask('**/**/**', '*')   //resultado: 12/34/56
const resultado2 = 'Exemplo'.mask('XXXX-X')    //resultado: Exem-p

console.log(resultado1)  //resultado: 12/34/56
console.log(resultado2)  //resultado: Exem-p

Outros exemplos usando .mask:

const se = require('stredit')({ importMask: true })

const exemplo = 12345678
exemplo.mask('XXX-XXXX')		// resultado: 123-4567
'12345678'.mask('XX-XX-XX')		// resultado: 12-34-56
'12345678'.mask('XX/XX/XX')		// resultado: 12/34/56
'StrEdit'.mask('XX.XX.XX')		// resultado: St.rE.di
'Fabio Smuu'.mask('XX/XX/XX/XX/XX')	// resultado: Fa/bi/o /Sm/uu

Criação de Paineis:

A criação do painel já esta pré programado, então basta usar:

const se = require('stredit')()

const exemplo = se.panel(20, 10, {
	color: {
		font: '#0f00ff',
		background: '#00ffFF'
	}
})

exemplo.row += 1
exemplo.column += 1

se.log('Example', exemplo)

exemplo.row += exemplo.height-3
exemplo.column += 11

se.log('Example', exemplo)

Resultado:

N|Solid

Propriedades de um painel:

se.panel(20, 5, {
	row: 3,
	column: 17,
	underline: true,
	color: {
		font: '#0000ff',
		background: '#ff00ff',
		reverse: true
	},
	map: [
		'┌', '─', '┐',
		'│', '·', '│',
		'└', '─', '┘'
	]
})

Para ver as informações de um painel não necessita mais de uma promise:

const exemplo = se.panel(20, 5, {
	row: 3,
	column: 17,
	underline: true,
	color: {
		font: '#0000ff',
		background: '#ff00ff',
		reverse: true
	}
})

console.log(exemplo)

Uma demonstração de como customizar um Map de sua maneira:

se.panel(21, 4, {
	map: [
		'┌//', '─X', '\\\\┐',
		'│X', ' # .', 'X│',
		'└\\\\', 'X─', '//┘',
	]
})

Resultado:

N|Solid

Outros exemplos:

Exemplo de uma animação básica:

const se = require('stredit')()

const panel1 = se.panel(21, 3, {
	row: 3,
	column: 12,
	color: {
		font: '#dd021f'
	}
})

se.panel(21, 14, {
	row: panel1.height + 3,
	column: 12,
	color: {
		font: '#ff4010'
	}
})

se.log('##', { row: 4, column: 13 })
se.sleep(1000)
se.log('###', { column: 15 })
se.sleep(1000)
se.log('####', { column: 18 })
se.sleep(1000)
se.log('-', { column: 19 })
se.sleep(1000)
se.log('##', { column: 21 })
se.sleep(1000)
se.log('###', { column: 24 })
se.sleep(1000)
se.log('-#', { column: 28 })
se.sleep(1000)
se.log('Exemlo Ok !', { row: 7, column: 13 })
se.sleep(1000)
se.log('Exemlo Ok !', { newline: true, lastColumn: true })
se.sleep(1000)
se.log('Exemlo Ok !', { newline: true, lastColumn: true })
se.sleep(1000)
se.log('Exemlo Ok !', { newline: true, lastColumn: true })
se.sleep(1000)
se.log('Exemlo Ok !', { row: 18, lastColumn: true })

Resultado:

N|Solid

Exemplo do uso de comandos e inputs do teclado:

const se = require('stredit')()

const colorBase = '#40df23'
const commandExample = async () => {
	se.clear()

	se.log('Insira um nome: '.fgColor(colorBase))
	const name = await se.input()
	se.log(`${se.fgColor(colorBase)}Olá ${se.reset}${name}${se.fgColor(colorBase)}, defina uma senha: `)

	const pass1 = await se.input()
	se.log(`Perfeito, agora preciso que a confirme: `.fgColor(colorBase))

	const pass2 = await se.input()

	se.cursor.hide()

	if (pass1 !== pass2) {
		se.log(`As senhas não coincidem, aguarde 2 segundos que iremos recomeçar.`.fgColor('#ff2100'))
		se.sleep(2000)
		return commandExample()
	}

	se.log('Conectando...', { newline: true })
	se.sleep(2000)


	se.clear()
	se.log(`Bem-vindo(a) ${name}`.fgColor('#00fdff'))
	se.log('\nEscolha uma opção:\n- 1: Exemplo de input\n- 2: Exemplo de input\n- 3: Exemplo de input', { column: 3, newline: true })

	se.cursor.show()
	se.log('\n> ')
	const escolha = await se.input(true)

	console.log('Você escolheu ', escolha)
	console.log('Eu sabia que esta era a melhor opção!')
}

Resultado:

N|Solid

Exemplo de uso para a StrEdit: (Uma homenagem ao famoso jogo Sanke)

const se = require('./se.js')({
	importMask: true,
	importColors: true
})

const events = require('events')
events.EventEmitter.defaultMaxListeners = 0
const game = new events()

let count = 0

const snake = {
	x: 1,
	y: 1,
	dx: 1,
	dy: 0,
	cells: [],
	maxCells: 4,
	press: false
}

const apple = {
	x: Math.floor(Math.random() * se.maxColumns)+1,
	y: Math.floor(Math.random() * se.maxRows)+1
}

game.on('keyIsDown', key => {
	if (key == 'a' && snake.dx === 0) {
		snake.dx = -1
		snake.dy = 0
	}
	else if (key == 'w' && snake.dy === 0) {
		snake.dy = -1
		snake.dx = 0
	}
	else if (key == 'd' && snake.dx === 0) {
		snake.dx = 1
		snake.dy = 0
	}
	else if (key == 's' && snake.dy === 0) {
		snake.dy = 1
		snake.dx = 0
	}
})

const keyboard = async () => {
	const key = await se.input(true)
	game.emit('keyIsDown', key)
}

const loop = async () => {
	if (!snake.press) {
		snake.press = await true
		const info = await keyboard()
		snake.press = await false
	}

	se.cursor.hide()
	se.clear()

	snake.x += snake.dx
	snake.y += snake.dy

	if (snake.x <= 0) snake.x = se.maxColumns
	else if (snake.x >= se.maxColumns+1) snake.x = 1
	if (snake.y <= 0) snake.y = se.maxRows
	else if (snake.y >= se.maxRows+1) snake.y = 1

	snake.cells.unshift({x: snake.x, y: snake.y})

	if (snake.cells.length > snake.maxCells) snake.cells.pop()

	se.log('■', {
		row: apple.y,
		column: apple.x,
		color: {
			font: '#e91e63'
		}
	})

	snake.cells.forEach((cell, index) => {
		se.log('█', {
			row: cell.y,
			column: cell.x,
			color: {
				font: '#79ec81'
			}
		})

		if (cell.x == apple.x && cell.y == apple.y) {
			apple.x = Math.floor(Math.random() * se.maxColumns)+1
			apple.y = Math.floor(Math.random() * se.maxRows)+1
			snake.maxCells++
		}

		for (let i = index + 1; i < snake.cells.length; i++) {
			if (cell.x === snake.cells[i].x && cell.y === snake.cells[i].y) {
				snake.x = 1
				snake.y = 1
				snake.cells = []
				snake.maxCells = 4
				snake.dx = 1
				snake.dy = 0

				apple.x = Math.floor(Math.random() * se.maxColumns)+1
				apple.y = Math.floor(Math.random() * se.maxRows)+1
			}
		}
	})

	se.log((snake.maxCells-4), {
		row: se.maxRows-1,
		column: 2
	})
}
setInterval(loop, 100)

Resultado:

N|Solid

Metodos e prototypes:

Ação Descrição Retorno
se.clear() Limpa o console por completo Boolean
se.sleep(milliseconds) Fazer o console esperar para efetuar código abaixo Object
se.log(string, settings) Imprime um texto no console usando uma estrutura Object
se.panel(width, height, settings) Efetua a criação de painéis no console Object
se.input(keypress) Espera o input do teclado no console, true faz uma interação unica Promise
String|Number.mask(mask, replacement) Formata sobre "mascara" em um valor Configure importMask: true String|Number
String.fgColor('#000000') Muda a cor da fonte através de prototype Configure importColors: true String
String.bgColor('#ffffff') Muda a cor de fundo através de prototype Configure importColors: true String
Scroll Descrição Retorno
se.scroll.up(rows) Sobe a scroll na quantia de linhas exigida Number
se.scroll.down(rows) Desce a scroll na quantia de linhas exigida Number
Cursor Descrição Retorno
se.cursor.isHide Retorna o estado de visibilidade do cursor no console Boolean
se.cursor.show() Força a exibição do cursor no console Boolean
se.cursor.hide() Força a omissão do cursor no console Boolean
Position Descrição Retorno
se.maxRows Retorna a Altura maxima visivel do console Number
se.maxColumns Retorna a largura máxima visível do console Number
se.position.get() Retorna o valor da linha e coluna atual Object
se.position.getRow() Retorna o valor da linha atual Number
se.position.getColumn() Retorna o valor da coluna atual Number
se.position.set(row, column) Redefine o valor da linha e coluna atual Object
se.position.setRow(row) Redefine o valor da linha atual Number
se.position.setColumn(column) Redefine o valor da coluna atual Number

Propriedades de string:

se.log(string, settings)

Propriedade Descrição Tipo
row Força a impressão da string nesta linha Number
column Força a impressão da string nesta coluna Number
newline Força a quebra de linha de acordo com a string anterior Boolean
lastColumn Substitui column pela última column usada Boolean
clearRow Rescreve a linha inteira apagando o conteúdo antigo Boolean
underline Sublinha a string Boolean
color.font Munda a cor da string usando cores em hexadecimal String
color.background Muda a cor de fundo usando cores em hexadecimal String
color.reverse Inverte as cores da fonte e fundo da string Boolean

Propriedades de panel:

se.panel(width, height, settings)

Propriedade Descrição Tipo
row Força a impressão do painel nesta linha Number
column Força a impressão do painel nesta coluna Number
newline Força a quebra de linha de acordo com o painel anterior Boolean
*lastColumn Ainda em dsenvolvimento ----------
*clearRow Ainda em dsenvolvimento ----------
underline Sublinha o painel Boolean
color.font Munda a cor do painel usando cores em hexadecimal String
color.background Muda a cor de fundo usando cores em hexadecimal String
color.reverse Inverte as cores da fonte e fundo do painel Boolean
map Muda as strings da borda usando uma estrutura Array

Obrigado pela sua atenção!

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.0.8
    4
    • latest

Version History

Package Sidebar

Install

npm i stredit

Weekly Downloads

4

Version

1.0.8

License

MIT

Unpacked Size

22.9 kB

Total Files

3

Last publish

Collaborators

  • smuu