
Security News
Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.
As classes herdeiras de PiClass possui um comportamento particular.
Há métodos auxiliares de construção, transformação e clonagem além das propriedades auxiliares.
instances()e init()Todo objeto passado por parametro na instanciação é injetado nas propriedades classe por padrão. Porém esse processo ocorre apos a invocação do método instances.
Esse comportamento pode ser desativado atribuindo false para a propriedade _extendParameters da class PiClass.
inject(obj) injeta todas as propriedades de obj para dentro do objeto;toJson() converte o objeto em representação JSON;import PiClass from 'pyllar/class';
class Hello extends PiClass {
instances(){
this._name = 'Hello';
}
init(param){
this._param = param
}
cloneDidLoad(){
console.log('Socorro! foi clonado');
}
jsonDidConvert(){
console.log('Ops! foi convertivo');
}
print(){
console.log(this.msg);
}
}
const hello = new Hello({
msg: 'Olá mundo'
});
hello.print()
console.log(hello.toJson());
const newHellow = hello.clone();
newHellow.msg = 'Olá submundo';
newHellow.print();
Classe responsável por gerenciar o ciclo de vida, interação com a view e vinculos com o PiModel.
O Pillar permite que o html contenha associação com dois tipos de diretivas: evento e expressão.
As diretivas de declaração permitem a utilização das expressões da linguagem. Além disso todo o corpo html pode receber as expressões. Dentro de cada expressão pode conter uma ou varias propriedades monitoradas.
Por padrão o Pillar não monitora as variáveis do elemento definidas nas expressões do html;
As diretivas de declaração são definidas por meio do prefixo : enquanto
as diretivas de evento são definidas pelo @;
Diretivas de declaração predefinidas:
n vezes por meio da contagem range(n, inicio, passo);(index, name) in property ou name in property;value do elemento;selected do elemento;disabled do elemento;:if adjacente superior for falsachange;src do elemento;checked do elemento;Métodos auxiliares:
import PiComponent from 'pyllar/component';
export default class Hello extends PiComponent {
view = /*html*/`<div>
<div :render="() => new UserForm()"></div>
<div>essa propiedade <b>{name}</b> não é monitorada</div>
<div>esta propiedade <b>{@name}</b> é monitorada</div>
<input :change="ChangeMe($value)" :value="{name}" />
<button @click="clickme('{name}')">ClickMe()</button>
<button @click="changeName()">ChangeMe()</button>
<ul>
<li :foreach="planeta in planetas">{planeta}</li>
</ul>
<ul>
<li :foreach="(index, planeta) in planetas">{index + 1 }. {planeta}</li>
</ul>
<ul>
<li :for="i in range(10, 4, 2)">{i}</li>
</ul>
</div>`;
name = 'Mundo';
planetas = ['terra', 'marte', 'jupiter']
clickme(name){
console.log(`Meu nom é ${name} (:`);
}
ChangeMe(newValue){
this.name = newValue;
}
};
PiComponent.register(Hello);
Classe responsável por gerenciar as ações, os estado e os vinculos com componente view. Possui os seguintes métodos auxiliares:
initWithJson(json) : injeta o json recebido no objeto. Esse método é invocado automaticamente quando uma action retorna um objeto ou um array de objetos do servidor;
validators: Retorna todos as regras de validação que seráo aplicadas quando os dados de vinculos do componente foi injetado na model;
Inject: Injeta todos os elementos de pagina com atributo (data-model) nas propriedade do model, executando as regras definidas no validators;
Register: Registra o model no contexto da aplicação.
user.js
import PiModel from 'pi/model';
import CPF from './cpf';
export default class Model extends PiModel {
init() {
super.init('/api');
}
validators() {
return {
'name': new PiValidatorRequire('Informe o nome do usuário para continuar')
};
}
initWithJson(json) {
super.initWithJson(json);
this.cpf = new CPF(json.cpf);
return this;
}
actions() {
return {
'filtrarPorNome': 'GET:/filtrar-por-nome?name=:name'
};
}
};
PiModel.register(Model);
form.js
import PiComponent from 'pyllar/component';
import UserModel from './user.js';
export default class Form extends PiComponent {
view = /*html*/`<form>
<input data-model="name" placeholder="Informe o nome do usuário"/>
<button @click="salvar()">Salvar</button>
</form>`;
async salvar(){
const user = UserModel.create();
const err = user.inject(this);
if(err.length > 0){
return;
}
const newUser = await user.save();
console.log(newUser);
}
};
PiComponent.register(Form);
Toda configuração do framework é carregada pelos valores definidos em PiConfig.set().
Segue abaixo a configuração padrão
{
app: {
parse: {
enable: true, /** Boleano: define se o framework irá realizar um parse na inicialização */
selector: 'body' /** String: define qual será o elemento analisado */
}
},
html: {
loader: 'Carregando ...' /** String | Function : Define qual será o texto exibido para os componentes de carregamento assíncrono */
},
expression: {
xlanguage: /(\{>?)([^\}]+)(\})/gi, /** Regex: Expressão regular para as declarações em html */
xvariable: /(@)([\w\.]+)/gi, /**Regex: Expressão regular para as variáveis monitoradas */
xhtml: /(\{>)([^\}]+)(\})/gi, /** Regex: Expressão regular para declarações que retornam texto em html */
},
request: {
fetch: null /** Function: Função prioritaria executada na cadeia de chamadas pelo PiRequest */
}
}
Uma configuração específica pode ser buscado através do método get: PiConfig.get('app.parse.enable');
import { app } from "pyllar/env";
import Bootstrap from "pyllar/bootstrap";
import HomePage from "./views/home";
new Bootstrap()
.onLoad(() => {
app().register(HomePage);
})
.onReady(() => {
app().startServices();
})
.load();
class Bootstrap {
onInit(){
/**
* Hook de inicialização:
* - Executado na inicialização antes da instanciação da aplicação
*/
}
onLoad(){
/**
* Hook de carga:
* - Executado apos a instanciação da aplicação
* - Executado antes do carregamento e analise da pagina definida pelas configurações
* : PiConfig.get('app.parse.enable')
* : PiConfig.get('app.parse.selector')
*/
}
onReady() {
/**
* Hook de finalização:
* - Executado apos todo processo de carregamento da aplicação
*/
}
load() {
/**
* Inicia, carrega e executa a aplicação
*/
}
}
import { app } from 'pyllar/env';
import Component from './component';
app().register(Component);
app.js
import { app } from "pi/env";
import Bootstrap from "pi/bootstrap";
import PageService from './service'
new Bootstrap()
.onLoad(() => {
app().addService(new PageService());
})
.onReady(() => {
app().startServices();
})
.load();
service.js
import { app } from "pi/env";
import PiService from "pi/service";
import Page1 from './page1'
import Page2 from './page2'
export default class PageService extends PiService {
routes = {
'/page1'() {
app().setPage(new Page1());
},
'/page2?id=:id'(id) {
app().setPage(new Page2(id));
}
};
routeNotFound(route) {
console.log('route not found ' + route)
}
}
PiService.register(PageService)
FAQs
===============================================
The npm package pyllar receives a total of 78 weekly downloads. As such, pyllar popularity was classified as not popular.
We found that pyllar demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.

Security News
Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.