@dexodus/jsel v0.2.11
Jsel Library Documentation
Introduction
Welcome to the documentation for the Jsel library, a TypeScript library designed to add a new programming language executed on JavaScript. This documentation provides a comprehensive guide on using the Jsel library and covers various features, syntax, and examples.
Table of Contents
- Installation
- Getting Started
- Basic Syntax
- Control Flow
- Functions
- Standard Library
- Advanced Features
- Examples
- Conclusion
- Support and Contribution
Installation
To use the Jsel library in your TypeScript project, follow these steps:
npm install @dexodus/jselGetting Started
Jsel and JselContext
The core components of the Jsel library are the Jsel class and the JselContext class. The Jsel class represents the interpreter, while the JselContext class provides the initial context for the interpreter. Here's a basic example of how to create and use them:
import { Jsel, JselContext } from 'jsel-library';
const context = new JselContext({
// ... initial context data ...
});
const jsel = new Jsel(context);
// Now you can use jsel to execute Jsel codeBasic Syntax
Variables
Jsel supports variables, and you can declare and use them as follows:
const jsel = new Jsel(new JselContext({
a: 5,
b: 'Hello',
c: true,
}));
console.log(jsel.exec('a')); // Output: 5
console.log(jsel.exec('b + " World"')); // Output: Hello World
console.log(jsel.exec('c')); // Output: trueArithmetic Operations
Jsel supports various arithmetic operations, including addition, subtraction, multiplication, division, and exponentiation:
const jsel = new Jsel(new JselContext({
x: 5,
y: 3,
}));
console.log(jsel.exec('x + y')); // Output: 8
console.log(jsel.exec('x - y')); // Output: 2
console.log(jsel.exec('x * y')); // Output: 15
console.log(jsel.exec('x / y')); // Output: 1.666...
console.log(jsel.exec('x ** y')); // Output: 125Accessing Object Properties
You can access object properties using dot notation:
const jsel = new Jsel(new JselContext({
person: {
name: 'John',
age: 25,
},
}));
console.log(jsel.exec('person.name')); // Output: John
console.log(jsel.exec('person.age')); // Output: 25String Concatenation
Jsel supports string concatenation using the + operator:
const jsel = new Jsel(new JselContext({
greeting: 'Hello',
name: 'John',
}));
console.log(jsel.exec('greeting + " " + name')); // Output: Hello JohnAssignment Operations
You can use assignment operations to update variable values:
const jsel = new Jsel(new JselContext({
a: 5,
}));
console.log(jsel.exec('a += 3')); // Output: 8
console.log(jsel.exec('a = a * 2')); // Output: 16Control Flow
If Statements
Jsel supports if statements for conditional execution:
const jsel = new Jsel(new JselContext({
condition: true,
value: 42,
}));
jsel.exec(`
if (condition) {
value = value * 2;
}
`);
console.log(jsel.exec('value')); // Output: 84While Statements
You can use while statements for repeated execution:
const jsel = new Jsel(new JselContext({
counter: 0,
}));
jsel.exec(`
while (counter < 5) {
counter++;
}
`);
console.log(jsel.exec('counter')); // Output: 5Foreach Statements
Jsel supports foreach statements for iterating over arrays:
const jsel = new Jsel(new JselContext({
numbers: [1, 2, 3, 4, 5],
result: 0,
}));
jsel.exec(`
foreach (numbers as value) {
result += value;
}
`);
console.log(jsel.exec('result')); // Output: 15Functions
Built-in Functions
Jsel provides a set of built-in functions for common operations:
const jsel = new Jsel(new JselContext({
value: 'Hello, World!',
}));
console.log(jsel.exec('length(value)')); // Output: 13
console.log(jsel.exec('toUpperCase(value)')); // Output: HELLO, WORLD!Custom Functions
You can define custom functions and use them in your Jsel code:
const jsel = new Jsel(new JselContext({
sum: (a, b) => a + b,
}));
console.log(jsel.exec('sum(3, 5)')); // Output: 8Function Declarations
Jsel allows you to declare functions for later use:
const jsel = new Jsel(new JselContext({}));
jsel.exec(`
add = (a, b) => {
a + b
}
`);
console.log(jsel.exec('add(2, 3)')); // Output: 5Standard
Library
Path Operations
Jsel provides standard library functions for working with paths:
const jsel = new Jsel(new JselContext({
path: 'entity.users[12].name',
}));
console.log(jsel.exec(`getPathParent("${path}")`)); // Output: entity.users[12]
console.log(jsel.exec(`removeOldParentFromPath("${path}")`)); // Output: users[12].name
console.log(jsel.exec(`getCurrentIndexFromPath("${path}")`)); // Output: 12Type Checking
Jsel includes functions for checking variable types:
const jsel = new Jsel(new JselContext({
value: true,
}));
console.log(jsel.exec('getType(value)')); // Output: boolean
console.log(jsel.exec('isBoolean(value)')); // Output: true
console.log(jsel.exec('isString(value)')); // Output: falseOther Standard Functions
Jsel standard library provides other useful functions:
const jsel = new Jsel(new JselContext({}));
console.log(jsel.exec('jsonParse(\'{"a": "test"}\')')); // Output: { a: 'test' }
console.log(jsel.exec('log("Hello, Jsel!")')); // Output: undefinedAdvanced Features
Reflex
Jsel introduces the reflex feature for dynamic variable access:
const jsel = new Jsel(new JselContext({
someVariable: 123,
path: 'someVariable',
}));
jsel.exec(`
valueByReflex = $path
`);
console.log(jsel.exec('valueByReflex')); // Output: 123Examples
Example 1: Manipulating Objects
const jsel = new Jsel(new JselContext({
person: {
name: 'Alice',
age: 30,
},
}));
jsel.exec(`
person.name = "Bob";
person.age += 5;
`);
console.log(jsel.exec('person')); // Output: { name: 'Bob', age: 35 }Example 2: Using Control Flow
const jsel = new Jsel(new JselContext({
number: 42,
}));
jsel.exec(`
if (number > 50) {
number = number / 2;
} else {
number = number * 2;
}
`);
console.log(jsel.exec('number')); // Output: 84Example 3: Working with Arrays
const jsel = new Jsel(new JselContext({
numbers: [1, 2, 3, 4, 5],
sum: 0,
}));
jsel.exec(`
foreach (numbers as value) {
sum += value;
}
`);
console.log(jsel.exec('sum')); // Output: 15Example 4: Custom Functions
const jsel = new Jsel(new JselContext({
customFunction: (a, b) => a * b,
}));
console.log(jsel.exec('customFunction(3, 4)')); // Output: 12Example 5: Advanced Features
const jsel = new Jsel(new JselContext({
entity: {
id: 1,
name: 'Organization',
parts: [
{
question: 'When was I born?',
type: 'radio',
radio: [
{ answer: '23.09.2002', right: true },
{ answer: '23.09.2022', right: false },
],
},
],
},
newParts: [],
}));
jsel.exec(`
foreach (entity.parts as index => part) {
newPart = {
type: part.type,
question: part.question,
}
if (part.type === 'radio') {
newPart.data = {
answers: [],
answerPrices: [],
}
foreach (part.radio as answerIndex => answerObject) {
// Process radio answers
}
}
newParts[index] = newPart;
}
entity.parts = newParts;
`);
console.log(jsel.exec('entity')); // Updated entity objectConclusion
This concludes the documentation for the Jsel library. We hope this guide helps you understand the features and capabilities of Jsel, enabling you to use it effectively in your TypeScript projects.
Support and Contribution
For support, bug reports, or contributions, please visit the Jsel GitHub repository. We welcome any feedback and contributions from the community.
Thank you for choosing Jsel!
10 months ago
12 months ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago