npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

factory-engine

v4.3.3

Published

Template Engine

Downloads

2

Readme

Factory-Engine

C'est un moteur de template, rien de plus normal :)

Utiliser la syntaxe (Syntaxe)

Factory fonctionne avec des blocks de commandes qui lui sont propres. Ces blocks sont définit via << et >> et le code factory se trouvera entre ces flèches.

Types de données

ovar est une variable propre au fichier ou à ses parents ivar est une variable d'un fichier enfant file est le contenu du fichier donné req est une requête à votre base de donnée block est un morceau de code autre que Factory, mais celui-ci, peut, bien-sûr, contenir une intégration Factory via les blocks de commande ou les variables id est un identifiant définit par l'utilisateur en JavaScript

Ils sont utilisés comme suit

ovar:le_nom_de_variable ivar:le_nom_de_variable file:'le/chemin/vers/le/fichier' Précision : ./ est égal à la racine du projet, soit, le dossier dans lequel le fichier principal a été lancé. req:'la_requête'

et le dernier :

block:{
	Le code, ici
}

Commandes Factory Certains d'entre eux peuvent avoir des identifiants Ceux-ci sont utilisés pour définir un contenu à modifié pendant l'exécution de Factory. Les identifiants sont défini comme suit : $ + un entier.

`[$value=]INSERT (file:'path' | ovar:variable);

Celle-ci est remplacée par le contenu de l'ovar ou du file.

INSERT datatype;

Avec un identifiant, seulement file peut être utilisé, où le fichier sera modifié avant de remplacer la commande par son nouveau contenu.

$1 = INSERT file:'le/fichier';

SET [$value::]variable BY (file:'path'; | block:{ <code> } | ovar:variable;)

Celle-ci permet de remplacer une ovar ou une ivar par un autre contenu. Trois types de données autorisés : file, block et ovar. block n'autorise pas de terminer par un point-virgule !

SET variable BY datatype;

Avec un identifiant associé, la variable du contenu désigné par l'identifiant pourr être remplacé par le nouveau contenu.

SET $1::variable BY datatype;

IF(variable (== | !=) comparison); <code> BREAK;

INSTABLE Celui-ci, permet simplement de vérifier une comparaison entre une variable ovar et un contenu pour exécuter ou pas le code Factory entre le mot clé IF et le BREAK. 2 types de comparaison : == (une égalité) et != (une inégalité)

IF(variable == comparison);
 <- Votre code -#>
BREAK;

comparison est soit une string, un decimal, un entier, un booléen ou d'une valeur null.

EXECUTE( (req | file | id):'content' ) [WITH (file:'path'; | block:{ <code> })]

Celui-ci permet de soit dump le résultat (de type array<dict>) de la ou les requêtes, ou d'itérer le résultat sur un fichier ou un block de code. 3 types sont acceptés : req, file et id

EXECUTE(datatype);

Ainsi, pour l'itération :

EXECUTE(datatype) WITH datatype2;

datatype2 omet deux possibilités : file ou block.

Utilisation en JavaScript

npm i factory-engine
const factory = require("factory-engine");

Dès son import, 3 fonctions sont disponibles :

  • parse
  • parseFile
  • onDBRequest (à redéfinir)

parse

Permet de convertir un contenu Factory en un contenu HTML.

2 arguments obligatoires

  • str: un contenu, n'importe lequel, qui sera transformé si possible
  • dict: les ovars insuflées dans l'interpréteur

parseFile

Permet de convertir un contenu Factory en un contenu HTML.

2 arguments obligatoires

  • str: le chemin vers le fichier selon la racine du projet
  • dict: les ovars insuflées dans l'interpréteur

onDBRequest

Permet de récupérer la ou les requêtes utilisées dans le Factory (commande EXECUTE). Celle-ci est à redéfinir, mais 1 argument est envoyé par Factory.

  • dict: les informations de la ou les requêtes

Celle-ci oblige un return de type array<dict> une fois redéfinie. Ce return est le résultat de la requête.

Exemples

Imaginons qu'une variable grlobale nommée age étant égale à 15.

./index.js

const factory = require("factory-engine");
console.log(parseFile("./src/index.f.html", {
	age: 15
}));

./src/index.f.html

<p>{{ovar:age}}</p>

Ce fichier est parsé et le résultat dans le navigateur est simplement :

Résultat

<p>15</p>

./src/other.f.html

<p>{{ovar:integer}}</p>

./src/index.f.html

<<
	<# Permet de mettre le contenu de other.f.html dans l'identifiant $1 #>
	$1 = INSERT file:'./src/other.f.html';

	<# Signifie que la variable 'integer' de l'identifiant $1 est égale à l'ovar 'age' #>
	SET $1::integer BY ovar:age;
>>

Résultat

<p>15</p>

./index.js

const factory = require("factory-engine");
console.log(parseFile("./src/index.f.html", {}));

factory.onDBRequest = (data) => {
	// data.req = "SELECT * FROM ``users";
	// Cette requête sera interpréter avec le module du type de base de données de votre choix

	return [
		{
			"name": "Bouchetrou",
			"email": "[email protected]"
		},
		{
			"name": "Marie",
			"email": "[email protected]"
		}
	];
}

./src/index.f.html

<<
	<# Permet de dump le résultat de notre requête #>
	EXECUTE(req:'SELECT * FROM `users`;');
>>

Résultat

<pre>
[
	{
		"name": "Bouchetrou",
		"email": "[email protected]"
	},
	{
		"name": "Marie",
		"email": "[email protected]"
	}
]
</pre>

Mais, nous voulons ordonner ces valeurs et les styliser

./src/other.f.html

<div>
	<p>Nom : {{ovar:name}}</p>
	<b>Email : {{ovar:email}}</b>
</div>

./src/index.f.html

<<
	<# Permet d'itérer le résultat de notre requête sur le fichier other.f.html $1 #>
	EXECUTE(req:'SELECT * FROM `users`;') WITH file:'./src/other.f.html';
>>

Résultat

<div>
	<p>Nom : Bouchetrou</p>
	<b>Email : [email protected]</b>
</div>
<div>
	<p>Nom : Marie</p>
	<b>Email : [email protected]</b>
</div>