vasille v2.3.9
Vasille

Vasille core library is frontend solution for safe, performant & powerful applications.
Table of content
- Installation
- How to use Vasille
- How SAFE is Vasille
- How SIMPLE is Vasille
- How POWERFUL is Vasille
- Best Practices
Installation
npm install vasille --save
npm install vasille-less --save
npm install vasille-magic --saveHow to use Vasille
There are several modes to use Vasille.
Documentation for beginners (how to create the first project step by step):
Vasille Magic- perfect for you -highest-levelVasille Less Library- no transcriber usage -high-levelVasille Core Library- the hard way -low-level
Full documentation:
Vasille Magic API- compiler writes for you -highest-levelVasille Less Library API- write less do more -high-levelVasille Core Library API- write anything -low-level
Getting ready be example
How SAFE is Vasille
The safe of your application is ensured by
100%coverage ofvasillecode by unit tests. Each function, each branch is working as designed.strong typingmakes your javascript/typescript code safe as C++ code. All entities ofvasillecore library are strongly typed, including:- data fields & properties.
- computed properties (function parameters & result).
- methods.
- events (defined handlers & event emit).
- DOM events & DOM operation (attributing, styling, etc.).
- slots of component.
- references to children.
- What you write is what you get. There are no hidden operations, you can control everything.
- No asynchronous code, when the line of code is executed, the DOM and reactive things are already synced.
How SIMPLE is Vasille
Can you detect the correct order of console logs in the next code snippet:
import logo from './logo.svg';
import './App.css';
import {useEffect} from 'react';
function C1 ({children}) {
console.log(1);
useEffect(() => {
console.log(2);
});
return <div>{children}</div>;
}
function C2 () {
console.log(3);
useEffect(() => {
console.log(4);
});
return <div></div>;
}
function App() {
return <C1>
<C2/>
</C1>;
}
export default App;So let's see the same example using Vasille:
interface Options extends FragmentOptions {
slot?: () => void;
}
const C1 : VFragment<Options> = ({slot}) => {
console.log(1);
<div>
<vxSlot model={slot} />
</div>;
console.log(2);
}
const C2: VFragment = () => {
console.log(3);
<div></div>;
console.log(4);
}
const App: VApp = () => {
<C1>
<C2/>
</C1>
}The C2 function is sent to C1 as function,
so it will be called after console.log(1) and before console.log(2).
No return is present in this case,
then construction like for & if can be used in place of [].map() and ternary operator.
The component function is called once, no recalls on component update.
How POWERFUL is Vasille
The secret of Vasille is a good task decomposition. The core library is composed of
an effective reactive module and a DOM generation engine based on it.
Reactivity Module
Reactivity module is used to create a model of data. It can contain self-updating values, forward-only shared data. Reactivity of objects/fields can be disabled/enabled manually.

Destroyableis an entity which has a custom destructor.IValue<T>is a common interface for any value container, with next members:get $gets the encapsulated value.set $manually update the encapsulated value, if enabled triggers updating of all linked data.disabledisables the reactivity.enableenables the reactivity and triggers updating of all linked data.
Reference<T>contains a value of typeT.Mirror<T>syncs self value with anotherIValuecontainer, can be used to share a value forward-only.Pointer<T>same asMirror, but it can switch betweenIValuetarget anytime.Expression<ReturnType, Args...>is a self-updating value.Reactiveis a reactive object which can have multiple reactive fields, emit/receive events/signals.
DOM Generation Engine
DOM Generation Engine is used to describe a virtual DOM of reactive fragments, which will be reflected into a browser DOM and keep up to date it.

Fragmentdescribes a virtual DOM node, which has siblings, children, parent & slots.TextNodereflects aTextnode.INodereflects aElementnode.Tagreflect a self createdElementnode.Extensionreflects an existingElementnode.Componentreflects aElementnode created by aTagchild.AppNodeis root of aVasilleapplication, can be used to create applications in application.Appis root of a definitiveVasilleapplication.DebugNodereflects aCommentnode, useful for debug.Watchrecompose children nodes on model value change.RepeatNodecreates multiples children nodes using the same code multiple time.BaseViewrepresent a view in context of MVC (Model-View-Controller).ObjectViewrepeats slot content for each value ofObjectModel.MapViewrepeats slot content for eachMapModelvalue.SetViewrepeats slot content for eachSetModelvalue.ArrayViewrepeats slot content for eachArrayModelvalue respecting its order.
CDN
<script src="https://unpkg.com/vasille"></script>Best Practices applicable to Vasille Core Library
- Reactive Object Practice
- Application
- Application in Application (Micro frontends)
- Signaling
- Forward Only Data Exchange
- Absolute, Relative & Auto Values
- Signaling Intercepting
- Debugging
- Fragment vs Component
- Extensions
- Model-View-Controller
Questions
If you have questions, feel free to contact the maintainer of the project:
1 year ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago