Security News
Input Validation Vulnerabilities Dominate MITRE's 2024 CWE Top 25 List
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
@codeplaydata/adapters
Advanced tools
Seguindo os princípios do Ports and Adapters - Alistair Cockburn essa lib é um agregado de todos os adaptadores utilizados por outros pacotes do projeto CodePlayData.
Os comentários no código estarão em inglês e a documentação/testes em português.
Os diretórios estarão separados por categoria de adapter, por exemplo: para um adapter de banco de dados em browser procure os disponíveis em src/databases/browser/IndexedDB/
. Os adapters serão exportados seguindo o mesmo raciocínio a partir da pasta src
, então para utilizá-los siga o exemplo abaixo:
import { database, http } from '@codeplaydata/adapters';
const db = new database.browser.IndexedDB();
const server = new http.server.ExpressServer();
/.../
Repare que apesar de a chamada parecer mais prolíxa ela possui um motivo. Todos as base de dados poderão ter interfaces em comuns, assim como todas que forem de browser. O mesmo se repete para o http, que no caso todos os servers terão interfaces em comum. Obviamente é possível desestruturar essa chamada e trabalhar diretamente com a classe para ficar menos prolíxo:
import { database: { browser: { IndexedDB }}} from '@codeplaydata/adapters';
import { http: { server: { ExpressServer() }}} from '@codeplaydata/adapters';
const db = new IndexedDB();
const server = new ExpressServer();
/.../
Para seguir com o paradigma do Ports and Adapters todas essas classes seguiram interfaces em comum, contudo, isso não quer dizer que não seja possível trabalhar com o driver escolhido de forma customizada, basta procurar em qual propriedade da classe está o driver (normalmente estará com nome de app
de aplication), veja abaixo um exemplo:
import { http: { server: { ExpressServer() }}} from '@codeplaydata/adapters';
const server = new ExpressServer();
// método comum da interface
server.listen
// método comum da interface
server.use
// propriedade opcional da interface
server?.router
// método específico do Express.
server.app.on(/.../)
/.../
Repare que o no exemplo acima ainda que a interface server possua métodos e propriedades em comum, dentro da propriedade app temos a aplicação escolhida que possui seus próprios métodos de propriedades já conhecidades pelos desenvolvedores. A seguir falaremos mais sobre cada um dos adaptadores já implementados até então.
// TODO
Abaixo estão os adapters já implementados até agora:
File | Descrição |
---|---|
GenericQueue | Essa classe pode ser usada antes de um banco de dados para controlar o inflow e evitar indisponibilidade. Possui o comportamento de uma fila. |
IndexedDB* | Utilizado para acessar a database à documentos (NoSQL) orientada a eventos de mesmo nome presente na maioria dos browsers atuais.* |
LocalStorage | Esse adaptador acessa o localstorage dos browsers atuais, que normalmente se comportam como um banco em memória. |
MongoDB | Um adaptador para o clássico banco de dados orientado a documentos de mesmo nome. |
GPU** | Esse adaptador é a forma de acesso a GPU pelos browsers mais atuais**. Ainda está em acesso Alpha. |
Fetch | O http client nativo de todos os browsers atuais. |
Express | O servidor http mais utilizado em aplicações NodeJs. |
*
O IndexedDB não pode ser testado abstraído do frontend, por isso não existem arquivos de teste.
**
Esse adaptador de GPU na verdade utiliza uma API nativa chamada WebGPU, que ainda está em Draft funcionando apenas em versões de desenvolvedores dos browsers. Também não possui arquivos de testes devido ao mencionado.
Abaixo vemos os exemplos de utilização das classes citadas.
import { Fetch } from "@codeplaydata/adapters";
const httpClient = new Fetch();
const request = new Request('https://httpstat.us/200');
const response = await httpClient.fetch(request);
import { GenericQueue } from "@codeplaydata/adapters";
const localstorage = new LocalStorage();
const queue = new GenericQueue(localstorage, 2);
queue.query(/.../);
import { ExpressApp, ExpressRouter } from "@codeplaydata/adapters";
const router = new ExpressRouter();
await router.register('get', '/data', async function() {
return;
})
const api = new ExpressApp([{ path: '/teste', router: router.router }]);
/.../
import { GPUDeviceAdapter, GPUCommandRepository } from "@codeplaydata/adapters";
const gpu = new GPUDeviceAdapter(new GPUCommandRepository());
/.../
import { MongoDB } from "@codeplaydata/adapters";
const mongo = new MongoDB('mongodb://127.0.0.1:27017');
mongo.database = 'teste';
mongo.store = 'collection1';
await mongo.query(/.../)
import { LocalStorage } from "@codeplaydata/adapters";
const localstorage = new LocalStorage();
localstorage.query(/.../)
import { IndexedDB } from "@codeplaydata/adapters";
const idbconfig = {
name: 'LocalTestStorage',
version: 1,
repositories: [
{
name: 'features',
id: 'name',
indexes: [
{
indexName: 'name',
keypath: 'name'
}
]
}
]
}
const indexeddb = new IndexedDB(idbconfig);
indexeddb.query(/.../);
/.../
Copyright 2023 Pedro Paulo Teixeira dos Santos
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
FAQs
Unknown package
The npm package @codeplaydata/adapters receives a total of 2 weekly downloads. As such, @codeplaydata/adapters popularity was classified as not popular.
We found that @codeplaydata/adapters 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
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.