fix: Rename freeflowuniverse to incubaid
This commit is contained in:
@@ -24,7 +24,7 @@ Thank you for your interest in contributing to Herolib! This document provides g
|
|||||||
For developers, you can use the automated installation script:
|
For developers, you can use the automated installation script:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl 'https://raw.githubusercontent.com/freeflowuniverse/herolib/refs/heads/development/install_v.sh' > /tmp/install_v.sh
|
curl 'https://raw.githubusercontent.com/incubaid/herolib/refs/heads/development/install_v.sh' > /tmp/install_v.sh
|
||||||
bash /tmp/install_v.sh --analyzer --herolib
|
bash /tmp/install_v.sh --analyzer --herolib
|
||||||
# IMPORTANT: Start a new shell after installation for paths to be set correctly
|
# IMPORTANT: Start a new shell after installation for paths to be set correctly
|
||||||
```
|
```
|
||||||
@@ -34,7 +34,7 @@ Alternatively, you can manually set up the environment:
|
|||||||
```bash
|
```bash
|
||||||
mkdir -p ~/code/github/incubaid
|
mkdir -p ~/code/github/incubaid
|
||||||
cd ~/code/github/incubaid
|
cd ~/code/github/incubaid
|
||||||
git clone git@github.com:freeflowuniverse/herolib.git
|
git clone git@github.com:incubaid/herolib.git
|
||||||
cd herolib
|
cd herolib
|
||||||
# checkout development branch for most recent changes
|
# checkout development branch for most recent changes
|
||||||
git checkout development
|
git checkout development
|
||||||
@@ -63,6 +63,7 @@ For new features or bug fixes, create a branch from `development` with a descrip
|
|||||||
### Making Changes
|
### Making Changes
|
||||||
|
|
||||||
1. Create a new branch from `development`:
|
1. Create a new branch from `development`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git checkout development
|
git checkout development
|
||||||
git pull
|
git pull
|
||||||
@@ -72,6 +73,7 @@ For new features or bug fixes, create a branch from `development` with a descrip
|
|||||||
2. Make your changes, following the code guidelines.
|
2. Make your changes, following the code guidelines.
|
||||||
|
|
||||||
3. Run tests to ensure your changes don't break existing functionality:
|
3. Run tests to ensure your changes don't break existing functionality:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./test_basic.vsh
|
./test_basic.vsh
|
||||||
```
|
```
|
||||||
@@ -98,6 +100,7 @@ The test script (`test_basic.vsh`) manages test execution and caching to optimiz
|
|||||||
### Pull Requests
|
### Pull Requests
|
||||||
|
|
||||||
1. Push your branch to the repository:
|
1. Push your branch to the repository:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git push origin feature/your-feature-name
|
git push origin feature/your-feature-name
|
||||||
```
|
```
|
||||||
@@ -125,6 +128,7 @@ The repository uses GitHub Actions for continuous integration and deployment:
|
|||||||
### 1. Testing Workflow (`test.yml`)
|
### 1. Testing Workflow (`test.yml`)
|
||||||
|
|
||||||
This workflow runs on every push and pull request to ensure code quality:
|
This workflow runs on every push and pull request to ensure code quality:
|
||||||
|
|
||||||
- Sets up V and Herolib
|
- Sets up V and Herolib
|
||||||
- Runs all basic tests using `test_basic.vsh`
|
- Runs all basic tests using `test_basic.vsh`
|
||||||
|
|
||||||
@@ -133,6 +137,7 @@ All tests must pass before a PR can be merged to the `development` branch.
|
|||||||
### 2. Hero Build Workflow (`hero_build.yml`)
|
### 2. Hero Build Workflow (`hero_build.yml`)
|
||||||
|
|
||||||
This workflow builds the Hero tool for multiple platforms when a new tag is created:
|
This workflow builds the Hero tool for multiple platforms when a new tag is created:
|
||||||
|
|
||||||
- Builds for Linux (x86_64, aarch64) and macOS (x86_64, aarch64)
|
- Builds for Linux (x86_64, aarch64) and macOS (x86_64, aarch64)
|
||||||
- Runs all basic tests
|
- Runs all basic tests
|
||||||
- Creates GitHub releases with the built binaries
|
- Creates GitHub releases with the built binaries
|
||||||
@@ -140,6 +145,7 @@ This workflow builds the Hero tool for multiple platforms when a new tag is crea
|
|||||||
### 3. Documentation Workflow (`documentation.yml`)
|
### 3. Documentation Workflow (`documentation.yml`)
|
||||||
|
|
||||||
This workflow automatically updates the documentation on GitHub Pages when changes are pushed to the `development` branch:
|
This workflow automatically updates the documentation on GitHub Pages when changes are pushed to the `development` branch:
|
||||||
|
|
||||||
- Generates documentation using `doc.vsh`
|
- Generates documentation using `doc.vsh`
|
||||||
- Deploys the documentation to GitHub Pages
|
- Deploys the documentation to GitHub Pages
|
||||||
|
|
||||||
@@ -152,7 +158,7 @@ cd ~/code/github/incubaid/herolib
|
|||||||
bash doc.sh
|
bash doc.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
The documentation is automatically published to [https://freeflowuniverse.github.io/herolib/](https://freeflowuniverse.github.io/herolib/) when changes are pushed to the `development` branch.
|
The documentation is automatically published to [https://incubaid.github.io/herolib/](https://incubaid.github.io/herolib/) when changes are pushed to the `development` branch.
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
@@ -168,6 +174,7 @@ In file included from /Users/timurgordon/code/github/vlang/v/thirdparty/cJSON/cJ
|
|||||||
This is caused by incompatibility between TCC and the half precision math functions in the macOS SDK. To fix this issue:
|
This is caused by incompatibility between TCC and the half precision math functions in the macOS SDK. To fix this issue:
|
||||||
|
|
||||||
1. Open the math.h file:
|
1. Open the math.h file:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo nano /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/math.h
|
sudo nano /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/math.h
|
||||||
```
|
```
|
||||||
@@ -178,6 +185,6 @@ For more details, see the [README.md](README.md) troubleshooting section.
|
|||||||
|
|
||||||
## Additional Resources
|
## Additional Resources
|
||||||
|
|
||||||
- [Herolib Documentation](https://freeflowuniverse.github.io/herolib/)
|
- [Herolib Documentation](https://incubaid.github.io/herolib/)
|
||||||
- [Cookbook Examples](https://github.com/freeflowuniverse/herolib/tree/development/cookbook)
|
- [Cookbook Examples](https://github.com/incubaid/herolib/tree/development/cookbook)
|
||||||
- [AI Prompts](aiprompts/starter/0_start_here.md)
|
- [AI Prompts](aiprompts/starter/0_start_here.md)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Herolib is an opinionated library primarily used by ThreeFold to automate cloud
|
|||||||
[](https://github.com/incubaid/herolib/actions/workflows/test.yml)
|
[](https://github.com/incubaid/herolib/actions/workflows/test.yml)
|
||||||
[](https://github.com/incubaid/herolib/actions/workflows/documentation.yml)
|
[](https://github.com/incubaid/herolib/actions/workflows/documentation.yml)
|
||||||
|
|
||||||
> [Complete Documentation](https://freeflowuniverse.github.io/herolib/)
|
> [Complete Documentation](https://incubaid.github.io/herolib/)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@@ -18,6 +18,7 @@ curl https://raw.githubusercontent.com/incubaid/herolib/refs/heads/development/i
|
|||||||
```
|
```
|
||||||
|
|
||||||
Hero will be installed in:
|
Hero will be installed in:
|
||||||
|
|
||||||
- `/usr/local/bin` for Linux
|
- `/usr/local/bin` for Linux
|
||||||
- `~/hero/bin` for macOS
|
- `~/hero/bin` for macOS
|
||||||
|
|
||||||
@@ -74,6 +75,7 @@ Herolib provides a wide range of functionality:
|
|||||||
|
|
||||||
- Cloud automation tools
|
- Cloud automation tools
|
||||||
- Git operations and management
|
- Git operations and management
|
||||||
|
|
||||||
### Offline Mode for Git Operations
|
### Offline Mode for Git Operations
|
||||||
|
|
||||||
Herolib now supports an `offline` mode for Git operations, which prevents automatic fetching from remote repositories. This can be useful in environments with limited or no internet connectivity, or when you want to avoid network calls during development or testing.
|
Herolib now supports an `offline` mode for Git operations, which prevents automatic fetching from remote repositories. This can be useful in environments with limited or no internet connectivity, or when you want to avoid network calls during development or testing.
|
||||||
@@ -133,11 +135,13 @@ In file included from /Users/timurgordon/code/github/vlang/v/thirdparty/cJSON/cJ
|
|||||||
This is caused by incompatibility between TCC and the half precision math functions in the macOS SDK. To fix this issue:
|
This is caused by incompatibility between TCC and the half precision math functions in the macOS SDK. To fix this issue:
|
||||||
|
|
||||||
1. Open the math.h file:
|
1. Open the math.h file:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo nano /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/math.h
|
sudo nano /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/math.h
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Comment out the following lines (around line 612-626):
|
2. Comment out the following lines (around line 612-626):
|
||||||
|
|
||||||
```c
|
```c
|
||||||
/* half precision math functions */
|
/* half precision math functions */
|
||||||
// extern _Float16 __fabsf16(_Float16) __API_AVAILABLE(macos(15.0), ios(18.0), watchos(11.0), tvos(18.0));
|
// extern _Float16 __fabsf16(_Float16) __API_AVAILABLE(macos(15.0), ios(18.0), watchos(11.0), tvos(18.0));
|
||||||
@@ -159,7 +163,7 @@ This is caused by incompatibility between TCC and the half precision math functi
|
|||||||
|
|
||||||
## Additional Resources
|
## Additional Resources
|
||||||
|
|
||||||
- [Complete Documentation](https://freeflowuniverse.github.io/herolib/)
|
- [Complete Documentation](https://incubaid.github.io/herolib/)
|
||||||
- [Cookbook Examples](https://github.com/incubaid/herolib/tree/development/cookbook)
|
- [Cookbook Examples](https://github.com/incubaid/herolib/tree/development/cookbook)
|
||||||
- [AI Prompts](aiprompts/starter/0_start_here.md)
|
- [AI Prompts](aiprompts/starter/0_start_here.md)
|
||||||
|
|
||||||
@@ -172,7 +176,6 @@ cd ~/code/github/incubaid/herolib
|
|||||||
bash doc.sh
|
bash doc.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
<!-- Security scan triggered at 2025-09-02 01:58:41 -->
|
<!-- Security scan triggered at 2025-09-02 01:58:41 -->
|
||||||
|
|
||||||
<!-- Security scan triggered at 2025-09-09 05:33:18 -->
|
<!-- Security scan triggered at 2025-09-09 05:33:18 -->
|
||||||
@@ -43,8 +43,6 @@ follow rows in sheets
|
|||||||
- cogs_item_monthly_rev_perc: what is percentage of the monthly revenue which is cogs, e.g. 10%
|
- cogs_item_monthly_rev_perc: what is percentage of the monthly revenue which is cogs, e.g. 10%
|
||||||
- cogs_item_delay, how many months before cogs starts after sales
|
- cogs_item_delay, how many months before cogs starts after sales
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### results in
|
### results in
|
||||||
|
|
||||||
follow rows in sheets
|
follow rows in sheets
|
||||||
@@ -62,7 +60,7 @@ follow rows in sheets
|
|||||||
|
|
||||||
```v
|
```v
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import os
|
import os
|
||||||
|
|
||||||
heroscript:="
|
heroscript:="
|
||||||
|
|||||||
@@ -274,9 +274,11 @@ The `site.page` directive's `src` parameter (`collection_name:page_name`) is the
|
|||||||
1. **Collections**: Doctree organizes markdown files into logical groups called "collections." A collection is typically a directory containing markdown files and an empty `.collection` file.
|
1. **Collections**: Doctree organizes markdown files into logical groups called "collections." A collection is typically a directory containing markdown files and an empty `.collection` file.
|
||||||
2. **Scanning**: You define which collections Doctree should scan using `!!doctree.scan` in a HeroScript file (e.g., `doctree.heroscript`).
|
2. **Scanning**: You define which collections Doctree should scan using `!!doctree.scan` in a HeroScript file (e.g., `doctree.heroscript`).
|
||||||
**Example `doctree.heroscript`:**
|
**Example `doctree.heroscript`:**
|
||||||
|
|
||||||
```heroscript
|
```heroscript
|
||||||
!!doctree.scan git_url:"https://git.threefold.info/tfgrid/docs_tfgrid4/src/branch/main/collections"
|
!!doctree.scan git_url:"https://git.threefold.info/tfgrid/docs_tfgrid4/src/branch/main/collections"
|
||||||
```
|
```
|
||||||
|
|
||||||
This will pull the `collections` directory from the specified Git URL and make its contents available to Doctree.
|
This will pull the `collections` directory from the specified Git URL and make its contents available to Doctree.
|
||||||
3. **Page Retrieval**: When `site.page` references `src:"my_collection:my_page"`, HeroLib's `doctreeclient` fetches the content of `my_page.md` from the `my_collection` collection that Doctree has scanned.
|
3. **Page Retrieval**: When `site.page` references `src:"my_collection:my_page"`, HeroLib's `doctreeclient` fetches the content of `my_page.md` from the `my_collection` collection that Doctree has scanned.
|
||||||
|
|
||||||
@@ -287,6 +289,7 @@ Once your HeroScript configuration is set up, HeroLib provides commands to build
|
|||||||
### 4.1. Generating Site Files (`site.generate()`)
|
### 4.1. Generating Site Files (`site.generate()`)
|
||||||
|
|
||||||
The `site.generate()` function (called internally by `build`, `dev`, etc.) performs the core file generation:
|
The `site.generate()` function (called internally by `build`, `dev`, etc.) performs the core file generation:
|
||||||
|
|
||||||
* Copies Docusaurus template files.
|
* Copies Docusaurus template files.
|
||||||
* Copies your site's `src` and `static` assets.
|
* Copies your site's `src` and `static` assets.
|
||||||
* Generates Docusaurus configuration JSON files (`main.json`, `navbar.json`, `footer.json`) from your HeroScript `site.config`, `site.navbar`, and `site.footer` directives.
|
* Generates Docusaurus configuration JSON files (`main.json`, `navbar.json`, `footer.json`) from your HeroScript `site.config`, `site.navbar`, and `site.footer` directives.
|
||||||
@@ -305,7 +308,7 @@ can be stored as example_docusaurus.vsh and then used to generate and develop an
|
|||||||
```v
|
```v
|
||||||
#!/usr/bin/env -S v -n -w -gc none -cg -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cg -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.web.docusaurus
|
import incubaid.herolib.web.docusaurus
|
||||||
import os
|
import os
|
||||||
|
|
||||||
const cfgpath = os.dir(@FILE)
|
const cfgpath = os.dir(@FILE)
|
||||||
@@ -327,13 +330,12 @@ docusaurus.new(
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
the following script suggest to call it do.vsh and put in directory of where the ebook is
|
the following script suggest to call it do.vsh and put in directory of where the ebook is
|
||||||
|
|
||||||
```v
|
```v
|
||||||
#!/usr/bin/env -S v -n -w -gc none -cg -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cg -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.web.docusaurus
|
import incubaid.herolib.web.docusaurus
|
||||||
|
|
||||||
const cfgpath = os.dir(@FILE) + '/cfg'
|
const cfgpath = os.dir(@FILE) + '/cfg'
|
||||||
|
|
||||||
@@ -341,4 +343,3 @@ docusaurus.new(heroscript_path:cfgpath)!
|
|||||||
```
|
```
|
||||||
|
|
||||||
by just called do.vsh we can execute on the ebook
|
by just called do.vsh we can execute on the ebook
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ Here are examples demonstrating how to use these advanced filtering options:
|
|||||||
You can use regular expressions to filter files based on their names or extensions. The `regex` parameter accepts a slice of strings, where each string is a regex pattern.
|
You can use regular expressions to filter files based on their names or extensions. The `regex` parameter accepts a slice of strings, where each string is a regex pattern.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
|
|
||||||
// Get a directory path
|
// Get a directory path
|
||||||
mut dir := pathlib.get('/some/directory')!
|
mut dir := pathlib.get('/some/directory')!
|
||||||
@@ -61,7 +61,7 @@ for path_obj in vlang_files.paths {
|
|||||||
By default, `list()` is recursive. You can disable recursion to list only items in the current directory.
|
By default, `list()` is recursive. You can disable recursion to list only items in the current directory.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
|
|
||||||
mut dir := pathlib.get('/some/directory')!
|
mut dir := pathlib.get('/some/directory')!
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ for path_obj in top_level_items.paths {
|
|||||||
The `ignore_default` parameter controls whether files and directories starting with `.` or `_` are ignored.
|
The `ignore_default` parameter controls whether files and directories starting with `.` or `_` are ignored.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
|
|
||||||
mut dir := pathlib.get('/some/directory')!
|
mut dir := pathlib.get('/some/directory')!
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ for path_obj in all_items.paths {
|
|||||||
By default, symbolic links are ignored when walking the directory structure. Set `include_links` to `true` to include them.
|
By default, symbolic links are ignored when walking the directory structure. Set `include_links` to `true` to include them.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
|
|
||||||
mut dir := pathlib.get('/some/directory')!
|
mut dir := pathlib.get('/some/directory')!
|
||||||
|
|
||||||
@@ -118,7 +118,7 @@ for path_obj in items_with_links.paths {
|
|||||||
Use `dirs_only` or `files_only` to restrict the results to only directories or only files.
|
Use `dirs_only` or `files_only` to restrict the results to only directories or only files.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
|
|
||||||
mut dir := pathlib.get('/some/directory')!
|
mut dir := pathlib.get('/some/directory')!
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ The `builder` module in Herolib provides a powerful framework for automating sys
|
|||||||
First, import the `builder` module and create a new `BuilderFactory` instance. Then, create a `Node` object, which can represent either the local machine or a remote server.
|
First, import the `builder` module and create a new `BuilderFactory` instance. Then, create a `Node` object, which can represent either the local machine or a remote server.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.builder
|
import incubaid.herolib.builder
|
||||||
|
|
||||||
// Create a new builder factory
|
// Create a new builder factory
|
||||||
mut b := builder.new()!
|
mut b := builder.new()!
|
||||||
@@ -68,7 +68,7 @@ The `Node` object provides methods to execute commands on the target system.
|
|||||||
Executes a command and returns its standard output.
|
Executes a command and returns its standard output.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.builder { ExecArgs }
|
import incubaid.herolib.builder { ExecArgs }
|
||||||
|
|
||||||
// Execute a command with stdout
|
// Execute a command with stdout
|
||||||
result := node.exec(cmd: "ls -la /tmp", stdout: true)!
|
result := node.exec(cmd: "ls -la /tmp", stdout: true)!
|
||||||
@@ -101,7 +101,7 @@ node.exec_interactive("bash")!
|
|||||||
A more advanced command execution method that supports caching, periodic execution, and temporary script handling.
|
A more advanced command execution method that supports caching, periodic execution, and temporary script handling.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.builder { NodeExecCmd }
|
import incubaid.herolib.builder { NodeExecCmd }
|
||||||
|
|
||||||
// Execute a command, cache its result for 24 hours (48*3600 seconds)
|
// Execute a command, cache its result for 24 hours (48*3600 seconds)
|
||||||
// and provide a description for logging.
|
// and provide a description for logging.
|
||||||
@@ -130,7 +130,7 @@ println(script_output)
|
|||||||
Executes a command with retries until it succeeds or a timeout is reached.
|
Executes a command with retries until it succeeds or a timeout is reached.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.builder { ExecRetryArgs }
|
import incubaid.herolib.builder { ExecRetryArgs }
|
||||||
|
|
||||||
// Try to connect to a service, retrying every 100ms for up to 10 seconds
|
// Try to connect to a service, retrying every 100ms for up to 10 seconds
|
||||||
result := node.exec_retry(
|
result := node.exec_retry(
|
||||||
@@ -219,7 +219,7 @@ if node.dir_exists("/var/log") {
|
|||||||
Transfer files between the local machine and the target node using `rsync` or `scp`.
|
Transfer files between the local machine and the target node using `rsync` or `scp`.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.builder { SyncArgs }
|
import incubaid.herolib.builder { SyncArgs }
|
||||||
|
|
||||||
// Upload a local file to the remote node
|
// Upload a local file to the remote node
|
||||||
node.upload(
|
node.upload(
|
||||||
@@ -286,7 +286,7 @@ node.hero_install()!
|
|||||||
Updates the Herolib code on the node, with options for syncing from local, git reset, or git pull.
|
Updates the Herolib code on the node, with options for syncing from local, git reset, or git pull.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.builder { HeroUpdateArgs }
|
import incubaid.herolib.builder { HeroUpdateArgs }
|
||||||
|
|
||||||
// Sync local Herolib code to the remote node (full sync)
|
// Sync local Herolib code to the remote node (full sync)
|
||||||
node.hero_update(sync_from_local: true, sync_full: true)!
|
node.hero_update(sync_from_local: true, sync_full: true)!
|
||||||
@@ -300,7 +300,7 @@ node.hero_update(git_reset: true, branch: "dev")!
|
|||||||
Uploads and executes a Vlang script (`.vsh` or `.v`) on the remote node.
|
Uploads and executes a Vlang script (`.vsh` or `.v`) on the remote node.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.builder { VScriptArgs }
|
import incubaid.herolib.builder { VScriptArgs }
|
||||||
|
|
||||||
// Upload and execute a local V script on the remote node
|
// Upload and execute a local V script on the remote node
|
||||||
node.vscript(path: "/local/path/to/my_script.vsh", sync_from_local: true)!
|
node.vscript(path: "/local/path/to/my_script.vsh", sync_from_local: true)!
|
||||||
@@ -311,7 +311,7 @@ node.vscript(path: "/local/path/to/my_script.vsh", sync_from_local: true)!
|
|||||||
The `portforward_to_local` function allows forwarding a remote port on an SSH host to a local port.
|
The `portforward_to_local` function allows forwarding a remote port on an SSH host to a local port.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.builder { portforward_to_local, ForwardArgsToLocal }
|
import incubaid.herolib.builder { portforward_to_local, ForwardArgsToLocal }
|
||||||
|
|
||||||
// Forward remote port 8080 on 192.168.1.100 to local port 9000
|
// Forward remote port 8080 on 192.168.1.100 to local port 9000
|
||||||
portforward_to_local(
|
portforward_to_local(
|
||||||
|
|||||||
@@ -1,21 +1,22 @@
|
|||||||
# OSAL Core Module (freeflowuniverse.herolib.osal.core)
|
# OSAL Core Module (incubaid.herolib.osal.core)
|
||||||
|
|
||||||
This document describes the core functionalities of the Operating System Abstraction Layer (OSAL) module, designed for platform-independent system operations in V.
|
This document describes the core functionalities of the Operating System Abstraction Layer (OSAL) module, designed for platform-independent system operations in V.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
//example how to get started
|
//example how to get started
|
||||||
|
|
||||||
import freeflowuniverse.herolib.osal.core as osal
|
import incubaid.herolib.osal.core as osal
|
||||||
|
|
||||||
osal.exec(...)!
|
osal.exec(...)!
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## 1. Process Management
|
## 1. Process Management
|
||||||
|
|
||||||
### `osal.exec(cmd: Command) !Job`
|
### `osal.exec(cmd: Command) !Job`
|
||||||
|
|
||||||
Executes a shell command with extensive configuration.
|
Executes a shell command with extensive configuration.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `cmd` (`Command` struct):
|
* `cmd` (`Command` struct):
|
||||||
* `cmd` (string): The command string.
|
* `cmd` (string): The command string.
|
||||||
@@ -36,28 +37,40 @@ Executes a shell command with extensive configuration.
|
|||||||
* **Error Handling**: Returns `JobError` with `error_type` (`.exec`, `.timeout`, `.args`).
|
* **Error Handling**: Returns `JobError` with `error_type` (`.exec`, `.timeout`, `.args`).
|
||||||
|
|
||||||
### `osal.execute_silent(cmd string) !string`
|
### `osal.execute_silent(cmd string) !string`
|
||||||
|
|
||||||
Executes a command silently.
|
Executes a command silently.
|
||||||
|
|
||||||
* **Parameters**: `cmd` (string): The command string.
|
* **Parameters**: `cmd` (string): The command string.
|
||||||
* **Returns**: `string` (command output).
|
* **Returns**: `string` (command output).
|
||||||
|
|
||||||
### `osal.execute_debug(cmd string) !string`
|
### `osal.execute_debug(cmd string) !string`
|
||||||
|
|
||||||
Executes a command with debug output.
|
Executes a command with debug output.
|
||||||
|
|
||||||
* **Parameters**: `cmd` (string): The command string.
|
* **Parameters**: `cmd` (string): The command string.
|
||||||
* **Returns**: `string` (command output).
|
* **Returns**: `string` (command output).
|
||||||
|
|
||||||
### `osal.execute_stdout(cmd string) !string`
|
### `osal.execute_stdout(cmd string) !string`
|
||||||
|
|
||||||
Executes a command and prints output to stdout.
|
Executes a command and prints output to stdout.
|
||||||
|
|
||||||
* **Parameters**: `cmd` (string): The command string.
|
* **Parameters**: `cmd` (string): The command string.
|
||||||
* **Returns**: `string` (command output).
|
* **Returns**: `string` (command output).
|
||||||
|
|
||||||
### `osal.execute_interactive(cmd string) !`
|
### `osal.execute_interactive(cmd string) !`
|
||||||
|
|
||||||
### `osal.execute_ok(cmd string) bool`
|
### `osal.execute_ok(cmd string) bool`
|
||||||
|
|
||||||
Executes a command and returns `true` if the command exits with a zero status, `false` otherwise.
|
Executes a command and returns `true` if the command exits with a zero status, `false` otherwise.
|
||||||
|
|
||||||
* **Parameters**: `cmd` (string): The command string.
|
* **Parameters**: `cmd` (string): The command string.
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
Executes a command in an interactive shell.
|
Executes a command in an interactive shell.
|
||||||
|
|
||||||
### `osal.exec_fast(cmd: CommandFast) !string`
|
### `osal.exec_fast(cmd: CommandFast) !string`
|
||||||
|
|
||||||
Executes a command quickly, with options for profile sourcing and environment variables.
|
Executes a command quickly, with options for profile sourcing and environment variables.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `cmd` (`CommandFast` struct):
|
* `cmd` (`CommandFast` struct):
|
||||||
* `cmd` (string): The command string.
|
* `cmd` (string): The command string.
|
||||||
@@ -72,31 +85,43 @@ Executes a command quickly, with options for profile sourcing and environment va
|
|||||||
* **Parameters**: `cmd` (string): The command string.
|
* **Parameters**: `cmd` (string): The command string.
|
||||||
|
|
||||||
### `osal.cmd_exists(cmd string) bool`
|
### `osal.cmd_exists(cmd string) bool`
|
||||||
|
|
||||||
Checks if a command exists in the system's PATH.
|
Checks if a command exists in the system's PATH.
|
||||||
|
|
||||||
* **Parameters**: `cmd` (string): The command name.
|
* **Parameters**: `cmd` (string): The command name.
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.processmap_get() !ProcessMap`
|
### `osal.processmap_get() !ProcessMap`
|
||||||
|
|
||||||
Scans and returns a map of all running processes.
|
Scans and returns a map of all running processes.
|
||||||
|
|
||||||
* **Returns**: `ProcessMap` struct (contains `processes` (`[]ProcessInfo`), `lastscan`, `state`, `pids`).
|
* **Returns**: `ProcessMap` struct (contains `processes` (`[]ProcessInfo`), `lastscan`, `state`, `pids`).
|
||||||
|
|
||||||
### `osal.processinfo_get(pid int) !ProcessInfo`
|
### `osal.processinfo_get(pid int) !ProcessInfo`
|
||||||
|
|
||||||
Retrieves detailed information for a specific process by PID.
|
Retrieves detailed information for a specific process by PID.
|
||||||
|
|
||||||
* **Parameters**: `pid` (int): Process ID.
|
* **Parameters**: `pid` (int): Process ID.
|
||||||
* **Returns**: `ProcessInfo` struct (contains `cpu_perc`, `mem_perc`, `cmd`, `pid`, `ppid`, `rss`).
|
* **Returns**: `ProcessInfo` struct (contains `cpu_perc`, `mem_perc`, `cmd`, `pid`, `ppid`, `rss`).
|
||||||
|
|
||||||
### `osal.processinfo_get_byname(name string) ![]ProcessInfo`
|
### `osal.processinfo_get_byname(name string) ![]ProcessInfo`
|
||||||
|
|
||||||
Retrieves detailed information for processes matching a given name.
|
Retrieves detailed information for processes matching a given name.
|
||||||
|
|
||||||
* **Parameters**: `name` (string): Process name (substring match).
|
* **Parameters**: `name` (string): Process name (substring match).
|
||||||
* **Returns**: `[]ProcessInfo`.
|
* **Returns**: `[]ProcessInfo`.
|
||||||
|
|
||||||
### `osal.process_exists(pid int) bool`
|
### `osal.process_exists(pid int) bool`
|
||||||
|
|
||||||
Checks if a process with a given PID exists.
|
Checks if a process with a given PID exists.
|
||||||
|
|
||||||
* **Parameters**: `pid` (int): Process ID.
|
* **Parameters**: `pid` (int): Process ID.
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.processinfo_with_children(pid int) !ProcessMap`
|
### `osal.processinfo_with_children(pid int) !ProcessMap`
|
||||||
|
|
||||||
Returns a process and all its child processes.
|
Returns a process and all its child processes.
|
||||||
|
|
||||||
## 1.1. Done Context Management (`done.v`)
|
## 1.1. Done Context Management (`done.v`)
|
||||||
|
|
||||||
Functions for managing a "done" context or state using Redis.
|
Functions for managing a "done" context or state using Redis.
|
||||||
@@ -113,36 +138,52 @@ Functions for managing a "done" context or state using Redis.
|
|||||||
* **Returns**: `ProcessMap`.
|
* **Returns**: `ProcessMap`.
|
||||||
|
|
||||||
### `osal.processinfo_children(pid int) !ProcessMap`
|
### `osal.processinfo_children(pid int) !ProcessMap`
|
||||||
|
|
||||||
Returns all child processes for a given PID.
|
Returns all child processes for a given PID.
|
||||||
|
|
||||||
* **Parameters**: `pid` (int): Parent Process ID.
|
* **Parameters**: `pid` (int): Parent Process ID.
|
||||||
* **Returns**: `ProcessMap`.
|
* **Returns**: `ProcessMap`.
|
||||||
|
|
||||||
### `osal.process_kill_recursive(args: ProcessKillArgs) !`
|
### `osal.process_kill_recursive(args: ProcessKillArgs) !`
|
||||||
|
|
||||||
Kills a process and all its children by name or PID.
|
Kills a process and all its children by name or PID.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `args` (`ProcessKillArgs` struct):
|
* `args` (`ProcessKillArgs` struct):
|
||||||
* `name` (string): Process name.
|
* `name` (string): Process name.
|
||||||
* `pid` (int): Process ID.
|
* `pid` (int): Process ID.
|
||||||
|
|
||||||
### `osal.process_exists_byname(name string) !bool`
|
### `osal.process_exists_byname(name string) !bool`
|
||||||
|
|
||||||
Checks if a process with a given name exists.
|
Checks if a process with a given name exists.
|
||||||
|
|
||||||
* **Parameters**: `name` (string): Process name (substring match).
|
* **Parameters**: `name` (string): Process name (substring match).
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.whoami() !string`
|
### `osal.whoami() !string`
|
||||||
|
|
||||||
Returns the current username.
|
Returns the current username.
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
## 2. Network Utilities
|
## 2. Network Utilities
|
||||||
|
|
||||||
### `osal.ping(args: PingArgs) ! bool`
|
### `osal.ping(args: PingArgs) ! bool`
|
||||||
|
|
||||||
Checks host reachability.
|
Checks host reachability.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
|
|
||||||
### `osal.ipaddr_pub_get_check() !string`
|
### `osal.ipaddr_pub_get_check() !string`
|
||||||
|
|
||||||
Retrieves the public IP address and verifies it is bound to a local interface.
|
Retrieves the public IP address and verifies it is bound to a local interface.
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
### `osal.is_ip_on_local_interface(ip string) !bool`
|
### `osal.is_ip_on_local_interface(ip string) !bool`
|
||||||
|
|
||||||
Checks if a given IP address is bound to a local network interface.
|
Checks if a given IP address is bound to a local network interface.
|
||||||
|
|
||||||
* **Parameters**: `ip` (string): IP address to check.
|
* **Parameters**: `ip` (string): IP address to check.
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
* `args` (`PingArgs` struct):
|
* `args` (`PingArgs` struct):
|
||||||
@@ -153,7 +194,9 @@ Checks if a given IP address is bound to a local network interface.
|
|||||||
* **Returns**: `PingResult` enum (`.ok`, `.timeout`, `.unknownhost`).
|
* **Returns**: `PingResult` enum (`.ok`, `.timeout`, `.unknownhost`).
|
||||||
|
|
||||||
### `osal.tcp_port_test(args: TcpPortTestArgs) bool`
|
### `osal.tcp_port_test(args: TcpPortTestArgs) bool`
|
||||||
|
|
||||||
Tests if a TCP port is open on a given address.
|
Tests if a TCP port is open on a given address.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `args` (`TcpPortTestArgs` struct):
|
* `args` (`TcpPortTestArgs` struct):
|
||||||
* `address` (string, required): IP address or hostname.
|
* `address` (string, required): IP address or hostname.
|
||||||
@@ -162,47 +205,67 @@ Tests if a TCP port is open on a given address.
|
|||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.ipaddr_pub_get() !string`
|
### `osal.ipaddr_pub_get() !string`
|
||||||
|
|
||||||
Retrieves the public IP address.
|
Retrieves the public IP address.
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
### `osal.is_ip_on_local_interface(ip string) !bool`
|
### `osal.is_ip_on_local_interface(ip string) !bool`
|
||||||
|
|
||||||
Checks if a given IP address is bound to a local network interface.
|
Checks if a given IP address is bound to a local network interface.
|
||||||
|
|
||||||
* **Parameters**: `ip` (string): IP address to check.
|
* **Parameters**: `ip` (string): IP address to check.
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
## 3. File System Operations
|
## 3. File System Operations
|
||||||
|
|
||||||
### `osal.file_write(path string, text string) !`
|
### `osal.file_write(path string, text string) !`
|
||||||
|
|
||||||
Writes text content to a file.
|
Writes text content to a file.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `path` (string): File path.
|
* `path` (string): File path.
|
||||||
* `text` (string): Content to write.
|
* `text` (string): Content to write.
|
||||||
|
|
||||||
### `osal.file_read(path string) !string`
|
### `osal.file_read(path string) !string`
|
||||||
|
|
||||||
Reads content from a file.
|
Reads content from a file.
|
||||||
|
|
||||||
* **Parameters**: `path` (string): File path.
|
* **Parameters**: `path` (string): File path.
|
||||||
* **Returns**: `string` (file content).
|
* **Returns**: `string` (file content).
|
||||||
|
|
||||||
### `osal.dir_ensure(path string) !`
|
### `osal.dir_ensure(path string) !`
|
||||||
|
|
||||||
Ensures a directory exists, creating it if necessary.
|
Ensures a directory exists, creating it if necessary.
|
||||||
|
|
||||||
* **Parameters**: `path` (string): Directory path.
|
* **Parameters**: `path` (string): Directory path.
|
||||||
|
|
||||||
### `osal.dir_delete(path string) !`
|
### `osal.dir_delete(path string) !`
|
||||||
|
|
||||||
Deletes a directory if it exists.
|
Deletes a directory if it exists.
|
||||||
|
|
||||||
* **Parameters**: `path` (string): Directory path.
|
* **Parameters**: `path` (string): Directory path.
|
||||||
|
|
||||||
### `osal.dir_reset(path string) !`
|
### `osal.dir_reset(path string) !`
|
||||||
|
|
||||||
Deletes and then recreates a directory.
|
Deletes and then recreates a directory.
|
||||||
|
|
||||||
* **Parameters**: `path` (string): Directory path.
|
* **Parameters**: `path` (string): Directory path.
|
||||||
|
|
||||||
### `osal.rm(todelete string) !`
|
### `osal.rm(todelete string) !`
|
||||||
|
|
||||||
Removes files or directories.
|
Removes files or directories.
|
||||||
|
|
||||||
* **Parameters**: `todelete` (string): Comma or newline separated list of paths (supports `~` for home directory).
|
* **Parameters**: `todelete` (string): Comma or newline separated list of paths (supports `~` for home directory).
|
||||||
|
|
||||||
### `osal.env_get_all() map[string]string`
|
### `osal.env_get_all() map[string]string`
|
||||||
|
|
||||||
Returns all existing environment variables as a map.
|
Returns all existing environment variables as a map.
|
||||||
|
|
||||||
* **Returns**: `map[string]string`.
|
* **Returns**: `map[string]string`.
|
||||||
|
|
||||||
## 4. Environment Variables
|
## 4. Environment Variables
|
||||||
|
|
||||||
## 4.1. Package Management (`package.v`)
|
## 4.1. Package Management (`package.v`)
|
||||||
|
|
||||||
Functions for managing system packages.
|
Functions for managing system packages.
|
||||||
@@ -212,7 +275,9 @@ Functions for managing system packages.
|
|||||||
* **`osal.package_remove(name_ string) !`**: Removes one or more packages.
|
* **`osal.package_remove(name_ string) !`**: Removes one or more packages.
|
||||||
|
|
||||||
### `osal.env_set(args: EnvSet)`
|
### `osal.env_set(args: EnvSet)`
|
||||||
|
|
||||||
Sets an environment variable.
|
Sets an environment variable.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `args` (`EnvSet` struct):
|
* `args` (`EnvSet` struct):
|
||||||
* `key` (string, required): Environment variable name.
|
* `key` (string, required): Environment variable name.
|
||||||
@@ -220,14 +285,19 @@ Sets an environment variable.
|
|||||||
* `overwrite` (bool, default: true): Overwrite if exists.
|
* `overwrite` (bool, default: true): Overwrite if exists.
|
||||||
|
|
||||||
### `osal.env_unset(key string)`
|
### `osal.env_unset(key string)`
|
||||||
|
|
||||||
Unsets a specific environment variable.
|
Unsets a specific environment variable.
|
||||||
|
|
||||||
* **Parameters**: `key` (string): Environment variable name.
|
* **Parameters**: `key` (string): Environment variable name.
|
||||||
|
|
||||||
### `osal.env_unset_all()`
|
### `osal.env_unset_all()`
|
||||||
|
|
||||||
Unsets all environment variables.
|
Unsets all environment variables.
|
||||||
|
|
||||||
### `osal.env_set_all(args: EnvSetAll)`
|
### `osal.env_set_all(args: EnvSetAll)`
|
||||||
|
|
||||||
Sets multiple environment variables.
|
Sets multiple environment variables.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `args` (`EnvSetAll` struct):
|
* `args` (`EnvSetAll` struct):
|
||||||
* `env` (map[string]string): Map of key-value pairs.
|
* `env` (map[string]string): Map of key-value pairs.
|
||||||
@@ -235,30 +305,40 @@ Sets multiple environment variables.
|
|||||||
* `overwrite_if_exists` (bool, default: true): Overwrite existing variables.
|
* `overwrite_if_exists` (bool, default: true): Overwrite existing variables.
|
||||||
|
|
||||||
### `osal.env_get(key string) !string`
|
### `osal.env_get(key string) !string`
|
||||||
|
|
||||||
Retrieves the value of a specific environment variable.
|
Retrieves the value of a specific environment variable.
|
||||||
|
|
||||||
* **Parameters**: `key` (string): Environment variable name.
|
* **Parameters**: `key` (string): Environment variable name.
|
||||||
* **Returns**: `string` (variable value).
|
* **Returns**: `string` (variable value).
|
||||||
|
|
||||||
### `osal.env_exists(key string) !bool`
|
### `osal.env_exists(key string) !bool`
|
||||||
|
|
||||||
Checks if an environment variable exists.
|
Checks if an environment variable exists.
|
||||||
|
|
||||||
* **Parameters**: `key` (string): Environment variable name.
|
* **Parameters**: `key` (string): Environment variable name.
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.env_get_default(key string, def string) string`
|
### `osal.env_get_default(key string, def string) string`
|
||||||
|
|
||||||
Retrieves an environment variable or a default value if not found.
|
Retrieves an environment variable or a default value if not found.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `key` (string): Environment variable name.
|
* `key` (string): Environment variable name.
|
||||||
* `def` (string): Default value.
|
* `def` (string): Default value.
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
### `osal.load_env_file(file_path string) !`
|
### `osal.load_env_file(file_path string) !`
|
||||||
|
|
||||||
Loads environment variables from a specified file.
|
Loads environment variables from a specified file.
|
||||||
|
|
||||||
* **Parameters**: `file_path` (string): Path to the environment file.
|
* **Parameters**: `file_path` (string): Path to the environment file.
|
||||||
|
|
||||||
## 5. Command & Profile Management
|
## 5. Command & Profile Management
|
||||||
|
|
||||||
### `osal.cmd_add(args: CmdAddArgs) !`
|
### `osal.cmd_add(args: CmdAddArgs) !`
|
||||||
|
|
||||||
Adds (copies or symlinks) a binary to system paths and updates user profiles.
|
Adds (copies or symlinks) a binary to system paths and updates user profiles.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `args` (`CmdAddArgs` struct):
|
* `args` (`CmdAddArgs` struct):
|
||||||
* `cmdname` (string): Name of the command (optional, derived from source if empty).
|
* `cmdname` (string): Name of the command (optional, derived from source if empty).
|
||||||
@@ -267,35 +347,52 @@ Adds (copies or symlinks) a binary to system paths and updates user profiles.
|
|||||||
* `reset` (bool, default: true): Delete existing command if found.
|
* `reset` (bool, default: true): Delete existing command if found.
|
||||||
|
|
||||||
### `osal.profile_path_add_hero() !string`
|
### `osal.profile_path_add_hero() !string`
|
||||||
|
|
||||||
Ensures the `~/hero/bin` path is added to the user's profile.
|
Ensures the `~/hero/bin` path is added to the user's profile.
|
||||||
|
|
||||||
* **Returns**: `string` (the `~/hero/bin` path).
|
* **Returns**: `string` (the `~/hero/bin` path).
|
||||||
|
|
||||||
### `osal.bin_path() !string`
|
### `osal.bin_path() !string`
|
||||||
|
|
||||||
Returns the preferred binary installation path (`~/hero/bin`).
|
Returns the preferred binary installation path (`~/hero/bin`).
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
### `osal.hero_path() !string`
|
### `osal.hero_path() !string`
|
||||||
|
|
||||||
Returns the `~/hero` directory path.
|
Returns the `~/hero` directory path.
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
### `osal.usr_local_path() !string`
|
### `osal.usr_local_path() !string`
|
||||||
|
|
||||||
Returns `/usr/local` for Linux or `~/hero` for macOS.
|
Returns `/usr/local` for Linux or `~/hero` for macOS.
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
### `osal.cmd_exists_profile(cmd string) bool`
|
### `osal.cmd_exists_profile(cmd string) bool`
|
||||||
|
|
||||||
Checks if a command exists in the system's PATH, considering the user's profile.
|
Checks if a command exists in the system's PATH, considering the user's profile.
|
||||||
|
|
||||||
* **Parameters**: `cmd` (string): The command name.
|
* **Parameters**: `cmd` (string): The command name.
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.profile_path_source() !string`
|
### `osal.profile_path_source() !string`
|
||||||
|
|
||||||
Returns a source statement for the preferred profile file (e.g., `. /home/user/.zprofile`).
|
Returns a source statement for the preferred profile file (e.g., `. /home/user/.zprofile`).
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
### `osal.profile_path_source_and() !string`
|
### `osal.profile_path_source_and() !string`
|
||||||
|
|
||||||
Returns a source statement followed by `&&` for command chaining, or empty if profile doesn't exist.
|
Returns a source statement followed by `&&` for command chaining, or empty if profile doesn't exist.
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
### `osal.profile_path_add_remove(args: ProfilePathAddRemoveArgs) !`
|
### `osal.profile_path_add_remove(args: ProfilePathAddRemoveArgs) !`
|
||||||
|
|
||||||
Adds and/or removes paths from specified or preferred user profiles.
|
Adds and/or removes paths from specified or preferred user profiles.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `args` (`ProfilePathAddRemoveArgs` struct):
|
* `args` (`ProfilePathAddRemoveArgs` struct):
|
||||||
* `paths_profile` (string): Comma/newline separated list of profile file paths (optional, uses preferred if empty).
|
* `paths_profile` (string): Comma/newline separated list of profile file paths (optional, uses preferred if empty).
|
||||||
@@ -304,25 +401,34 @@ Adds and/or removes paths from specified or preferred user profiles.
|
|||||||
* `allprofiles` (bool): Apply to all known profile files.
|
* `allprofiles` (bool): Apply to all known profile files.
|
||||||
|
|
||||||
### `osal.cmd_path(cmd string) !string`
|
### `osal.cmd_path(cmd string) !string`
|
||||||
|
|
||||||
Returns the full path of an executable command using `which`.
|
Returns the full path of an executable command using `which`.
|
||||||
|
|
||||||
* **Parameters**: `cmd` (string): Command name.
|
* **Parameters**: `cmd` (string): Command name.
|
||||||
* **Returns**: `string` (full path).
|
* **Returns**: `string` (full path).
|
||||||
|
|
||||||
### `osal.cmd_delete(cmd string) !`
|
### `osal.cmd_delete(cmd string) !`
|
||||||
|
|
||||||
Deletes commands from their found locations.
|
Deletes commands from their found locations.
|
||||||
|
|
||||||
* **Parameters**: `cmd` (string): Command name.
|
* **Parameters**: `cmd` (string): Command name.
|
||||||
|
|
||||||
### `osal.profile_paths_all() ![]string`
|
### `osal.profile_paths_all() ![]string`
|
||||||
|
|
||||||
Lists all possible profile file paths in the OS.
|
Lists all possible profile file paths in the OS.
|
||||||
|
|
||||||
* **Returns**: `[]string`.
|
* **Returns**: `[]string`.
|
||||||
|
|
||||||
### `osal.profile_paths_preferred() ![]string`
|
### `osal.profile_paths_preferred() ![]string`
|
||||||
|
|
||||||
## 5.1. SSH Key Management (`ssh_key.v`)
|
## 5.1. SSH Key Management (`ssh_key.v`)
|
||||||
|
|
||||||
Functions and structs for managing SSH keys.
|
Functions and structs for managing SSH keys.
|
||||||
|
|
||||||
### `struct SSHKey`
|
### `struct SSHKey`
|
||||||
|
|
||||||
Represents an SSH key pair.
|
Represents an SSH key pair.
|
||||||
|
|
||||||
* **Fields**: `name` (string), `directory` (string).
|
* **Fields**: `name` (string), `directory` (string).
|
||||||
* **Methods**:
|
* **Methods**:
|
||||||
* `public_key_path() !pathlib.Path`: Returns the path to the public key.
|
* `public_key_path() !pathlib.Path`: Returns the path to the public key.
|
||||||
@@ -331,82 +437,118 @@ Represents an SSH key pair.
|
|||||||
* `private_key() !string`: Returns the content of the private key.
|
* `private_key() !string`: Returns the content of the private key.
|
||||||
|
|
||||||
### `struct SSHConfig`
|
### `struct SSHConfig`
|
||||||
|
|
||||||
Configuration for SSH key operations.
|
Configuration for SSH key operations.
|
||||||
|
|
||||||
* **Fields**: `directory` (string, default: `~/.ssh`).
|
* **Fields**: `directory` (string, default: `~/.ssh`).
|
||||||
|
|
||||||
### `osal.get_ssh_key(key_name string, config SSHConfig) ?SSHKey`
|
### `osal.get_ssh_key(key_name string, config SSHConfig) ?SSHKey`
|
||||||
|
|
||||||
Retrieves a specific SSH key by name.
|
Retrieves a specific SSH key by name.
|
||||||
|
|
||||||
* **Parameters**: `key_name` (string), `config` (`SSHConfig` struct).
|
* **Parameters**: `key_name` (string), `config` (`SSHConfig` struct).
|
||||||
* **Returns**: `?SSHKey` (optional SSHKey struct).
|
* **Returns**: `?SSHKey` (optional SSHKey struct).
|
||||||
|
|
||||||
### `osal.list_ssh_keys(config SSHConfig) ![]SSHKey`
|
### `osal.list_ssh_keys(config SSHConfig) ![]SSHKey`
|
||||||
|
|
||||||
Lists all SSH keys in the specified directory.
|
Lists all SSH keys in the specified directory.
|
||||||
|
|
||||||
* **Parameters**: `config` (`SSHConfig` struct).
|
* **Parameters**: `config` (`SSHConfig` struct).
|
||||||
* **Returns**: `[]SSHKey`.
|
* **Returns**: `[]SSHKey`.
|
||||||
|
|
||||||
### `osal.new_ssh_key(key_name string, config SSHConfig) !SSHKey`
|
### `osal.new_ssh_key(key_name string, config SSHConfig) !SSHKey`
|
||||||
|
|
||||||
Creates a new SSH key pair.
|
Creates a new SSH key pair.
|
||||||
|
|
||||||
* **Parameters**: `key_name` (string), `config` (`SSHConfig` struct).
|
* **Parameters**: `key_name` (string), `config` (`SSHConfig` struct).
|
||||||
* **Returns**: `SSHKey`.
|
* **Returns**: `SSHKey`.
|
||||||
Lists preferred profile file paths based on the operating system.
|
Lists preferred profile file paths based on the operating system.
|
||||||
* **Returns**: `[]string`.
|
* **Returns**: `[]string`.
|
||||||
|
|
||||||
### `osal.profile_path() !string`
|
### `osal.profile_path() !string`
|
||||||
|
|
||||||
Returns the most preferred profile file path.
|
Returns the most preferred profile file path.
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
## 6. System Information & Utilities
|
## 6. System Information & Utilities
|
||||||
|
|
||||||
### `osal.platform() !PlatformType`
|
### `osal.platform() !PlatformType`
|
||||||
|
|
||||||
Identifies the operating system.
|
Identifies the operating system.
|
||||||
|
|
||||||
* **Returns**: `PlatformType` enum (`.unknown`, `.osx`, `.ubuntu`, `.alpine`, `.arch`, `.suse`).
|
* **Returns**: `PlatformType` enum (`.unknown`, `.osx`, `.ubuntu`, `.alpine`, `.arch`, `.suse`).
|
||||||
|
|
||||||
### `osal.cputype() !CPUType`
|
### `osal.cputype() !CPUType`
|
||||||
|
|
||||||
Identifies the CPU architecture.
|
Identifies the CPU architecture.
|
||||||
|
|
||||||
* **Returns**: `CPUType` enum (`.unknown`, `.intel`, `.arm`, `.intel32`, `.arm32`).
|
* **Returns**: `CPUType` enum (`.unknown`, `.intel`, `.arm`, `.intel32`, `.arm32`).
|
||||||
|
|
||||||
### `osal.is_linux() !bool`
|
### `osal.is_linux() !bool`
|
||||||
|
|
||||||
Checks if the current OS is Linux.
|
Checks if the current OS is Linux.
|
||||||
|
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.is_osx() !bool`
|
### `osal.is_osx() !bool`
|
||||||
|
|
||||||
Checks if the current OS is macOS.
|
Checks if the current OS is macOS.
|
||||||
|
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.is_ubuntu() !bool`
|
### `osal.is_ubuntu() !bool`
|
||||||
|
|
||||||
Checks if the current OS is Ubuntu.
|
Checks if the current OS is Ubuntu.
|
||||||
|
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.is_osx_arm() !bool`
|
### `osal.is_osx_arm() !bool`
|
||||||
|
|
||||||
Checks if the current OS is macOS ARM.
|
Checks if the current OS is macOS ARM.
|
||||||
|
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.is_linux_arm() !bool`
|
### `osal.is_linux_arm() !bool`
|
||||||
|
|
||||||
Checks if the current OS is Linux ARM.
|
Checks if the current OS is Linux ARM.
|
||||||
|
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.is_osx_intel() !bool`
|
### `osal.is_osx_intel() !bool`
|
||||||
|
|
||||||
Checks if the current OS is macOS Intel.
|
Checks if the current OS is macOS Intel.
|
||||||
|
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.is_linux_intel() !bool`
|
### `osal.is_linux_intel() !bool`
|
||||||
|
|
||||||
Checks if the current OS is Linux Intel.
|
Checks if the current OS is Linux Intel.
|
||||||
|
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.hostname() !string`
|
### `osal.hostname() !string`
|
||||||
|
|
||||||
Returns the system hostname.
|
Returns the system hostname.
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
### `osal.initname() !string`
|
### `osal.initname() !string`
|
||||||
|
|
||||||
Returns the init system name (e.g., `systemd`, `bash`, `zinit`).
|
Returns the init system name (e.g., `systemd`, `bash`, `zinit`).
|
||||||
|
|
||||||
* **Returns**: `string`.
|
* **Returns**: `string`.
|
||||||
|
|
||||||
### `osal.sleep(duration int)`
|
### `osal.sleep(duration int)`
|
||||||
|
|
||||||
Pauses execution for a specified duration.
|
Pauses execution for a specified duration.
|
||||||
|
|
||||||
* **Parameters**: `duration` (int): Sleep duration in seconds.
|
* **Parameters**: `duration` (int): Sleep duration in seconds.
|
||||||
|
|
||||||
### `osal.download(args: DownloadArgs) !pathlib.Path`
|
### `osal.download(args: DownloadArgs) !pathlib.Path`
|
||||||
|
|
||||||
Downloads a file from a URL.
|
Downloads a file from a URL.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `args` (`DownloadArgs` struct):
|
* `args` (`DownloadArgs` struct):
|
||||||
* `url` (string, required): URL of the file.
|
* `url` (string, required): URL of the file.
|
||||||
@@ -423,17 +565,23 @@ Downloads a file from a URL.
|
|||||||
* **Returns**: `pathlib.Path` (path to the downloaded file/directory).
|
* **Returns**: `pathlib.Path` (path to the downloaded file/directory).
|
||||||
|
|
||||||
### `osal.user_exists(username string) bool`
|
### `osal.user_exists(username string) bool`
|
||||||
|
|
||||||
Checks if a user exists on the system.
|
Checks if a user exists on the system.
|
||||||
|
|
||||||
* **Parameters**: `username` (string): Username to check.
|
* **Parameters**: `username` (string): Username to check.
|
||||||
* **Returns**: `bool`.
|
* **Returns**: `bool`.
|
||||||
|
|
||||||
### `osal.user_id_get(username string) !int`
|
### `osal.user_id_get(username string) !int`
|
||||||
|
|
||||||
Retrieves the user ID for a given username.
|
Retrieves the user ID for a given username.
|
||||||
|
|
||||||
* **Parameters**: `username` (string): Username.
|
* **Parameters**: `username` (string): Username.
|
||||||
* **Returns**: `int` (User ID).
|
* **Returns**: `int` (User ID).
|
||||||
|
|
||||||
### `osal.user_add(args: UserArgs) !int`
|
### `osal.user_add(args: UserArgs) !int`
|
||||||
|
|
||||||
Adds a new user to the system.
|
Adds a new user to the system.
|
||||||
|
|
||||||
* **Parameters**:
|
* **Parameters**:
|
||||||
* `args` (`UserArgs` struct):
|
* `args` (`UserArgs` struct):
|
||||||
* `name` (string, required): Username to add.
|
* `name` (string, required): Username to add.
|
||||||
@@ -442,67 +590,93 @@ Adds a new user to the system.
|
|||||||
## Enums & Structs
|
## Enums & Structs
|
||||||
|
|
||||||
### `enum PlatformType`
|
### `enum PlatformType`
|
||||||
|
|
||||||
Represents the detected operating system.
|
Represents the detected operating system.
|
||||||
|
|
||||||
* Values: `unknown`, `osx`, `ubuntu`, `alpine`, `arch`, `suse`.
|
* Values: `unknown`, `osx`, `ubuntu`, `alpine`, `arch`, `suse`.
|
||||||
|
|
||||||
### `enum CPUType`
|
### `enum CPUType`
|
||||||
|
|
||||||
Represents the detected CPU architecture.
|
Represents the detected CPU architecture.
|
||||||
|
|
||||||
* Values: `unknown`, `intel`, `arm`, `intel32`, `arm32`.
|
* Values: `unknown`, `intel`, `arm`, `intel32`, `arm32`.
|
||||||
|
|
||||||
### `enum RunTime`
|
### `enum RunTime`
|
||||||
|
|
||||||
Specifies the runtime environment for command execution.
|
Specifies the runtime environment for command execution.
|
||||||
|
|
||||||
* Values: `bash`, `python`, `heroscript`, `herocmd`, `v`.
|
* Values: `bash`, `python`, `heroscript`, `herocmd`, `v`.
|
||||||
|
|
||||||
### `enum JobStatus`
|
### `enum JobStatus`
|
||||||
|
|
||||||
Status of an executed command job.
|
Status of an executed command job.
|
||||||
|
|
||||||
* Values: `init`, `running`, `error_exec`, `error_timeout`, `error_args`, `done`.
|
* Values: `init`, `running`, `error_exec`, `error_timeout`, `error_args`, `done`.
|
||||||
|
|
||||||
### `enum ErrorType`
|
### `enum ErrorType`
|
||||||
|
|
||||||
Types of errors that can occur during job execution.
|
Types of errors that can occur during job execution.
|
||||||
|
|
||||||
* Values: `exec`, `timeout`, `args`.
|
* Values: `exec`, `timeout`, `args`.
|
||||||
|
|
||||||
### `enum PingResult`
|
### `enum PingResult`
|
||||||
|
|
||||||
Result of a ping operation.
|
Result of a ping operation.
|
||||||
|
|
||||||
* Values: `ok`, `timeout`, `unknownhost`.
|
* Values: `ok`, `timeout`, `unknownhost`.
|
||||||
|
|
||||||
### `struct Command`
|
### `struct Command`
|
||||||
|
|
||||||
Configuration for `osal.exec` function. (See `osal.exec` parameters for fields).
|
Configuration for `osal.exec` function. (See `osal.exec` parameters for fields).
|
||||||
|
|
||||||
### `struct Job`
|
### `struct Job`
|
||||||
|
|
||||||
Result object returned by `osal.exec`. (See `osal.exec` returns for fields).
|
Result object returned by `osal.exec`. (See `osal.exec` returns for fields).
|
||||||
|
|
||||||
### `struct JobError`
|
### `struct JobError`
|
||||||
|
|
||||||
Error details for failed jobs.
|
Error details for failed jobs.
|
||||||
|
|
||||||
### `struct PingArgs`
|
### `struct PingArgs`
|
||||||
|
|
||||||
Arguments for `osal.ping` function. (See `osal.ping` parameters for fields).
|
Arguments for `osal.ping` function. (See `osal.ping` parameters for fields).
|
||||||
|
|
||||||
### `struct TcpPortTestArgs`
|
### `struct TcpPortTestArgs`
|
||||||
|
|
||||||
Arguments for `osal.tcp_port_test` function. (See `osal.tcp_port_test` parameters for fields).
|
Arguments for `osal.tcp_port_test` function. (See `osal.tcp_port_test` parameters for fields).
|
||||||
|
|
||||||
### `struct EnvSet`
|
### `struct EnvSet`
|
||||||
|
|
||||||
Arguments for `osal.env_set` function. (See `osal.env_set` parameters for fields).
|
Arguments for `osal.env_set` function. (See `osal.env_set` parameters for fields).
|
||||||
|
|
||||||
### `struct EnvSetAll`
|
### `struct EnvSetAll`
|
||||||
|
|
||||||
Arguments for `osal.env_set_all` function. (See `osal.env_set_all` parameters for fields).
|
Arguments for `osal.env_set_all` function. (See `osal.env_set_all` parameters for fields).
|
||||||
|
|
||||||
### `struct CmdAddArgs`
|
### `struct CmdAddArgs`
|
||||||
|
|
||||||
Arguments for `osal.cmd_add` function. (See `osal.cmd_add` parameters for fields).
|
Arguments for `osal.cmd_add` function. (See `osal.cmd_add` parameters for fields).
|
||||||
|
|
||||||
### `struct ProfilePathAddRemoveArgs`
|
### `struct ProfilePathAddRemoveArgs`
|
||||||
|
|
||||||
Arguments for `osal.profile_path_add_remove` function. (See `osal.profile_path_add_remove` parameters for fields).
|
Arguments for `osal.profile_path_add_remove` function. (See `osal.profile_path_add_remove` parameters for fields).
|
||||||
|
|
||||||
### `struct ProcessMap`
|
### `struct ProcessMap`
|
||||||
|
|
||||||
Contains a list of `ProcessInfo` objects.
|
Contains a list of `ProcessInfo` objects.
|
||||||
|
|
||||||
### `struct ProcessInfo`
|
### `struct ProcessInfo`
|
||||||
|
|
||||||
Detailed information about a single process. (See `osal.processinfo_get` returns for fields).
|
Detailed information about a single process. (See `osal.processinfo_get` returns for fields).
|
||||||
|
|
||||||
### `struct ProcessKillArgs`
|
### `struct ProcessKillArgs`
|
||||||
|
|
||||||
Arguments for `osal.process_kill_recursive` function. (See `osal.process_kill_recursive` parameters for fields).
|
Arguments for `osal.process_kill_recursive` function. (See `osal.process_kill_recursive` parameters for fields).
|
||||||
|
|
||||||
### `struct DownloadArgs`
|
### `struct DownloadArgs`
|
||||||
|
|
||||||
Arguments for `osal.download` function. (See `osal.download` parameters for fields).
|
Arguments for `osal.download` function. (See `osal.download` parameters for fields).
|
||||||
|
|
||||||
### `struct UserArgs`
|
### `struct UserArgs`
|
||||||
|
|
||||||
Arguments for `osal.user_add` function. (See `osal.user_add` parameters for fields).
|
Arguments for `osal.user_add` function. (See `osal.user_add` parameters for fields).
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
The `OurTime` module in V provides flexible time handling, supporting relative and absolute time formats, Unix timestamps, and formatting utilities.
|
The `OurTime` module in V provides flexible time handling, supporting relative and absolute time formats, Unix timestamps, and formatting utilities.
|
||||||
|
|
||||||
## Key Features
|
## Key Features
|
||||||
|
|
||||||
- Create time objects from strings or current time
|
- Create time objects from strings or current time
|
||||||
- Relative time expressions (e.g., `+1h`, `-2d`)
|
- Relative time expressions (e.g., `+1h`, `-2d`)
|
||||||
- Absolute time formats (e.g., `YYYY-MM-DD HH:mm:ss`)
|
- Absolute time formats (e.g., `YYYY-MM-DD HH:mm:ss`)
|
||||||
@@ -12,7 +13,7 @@ The `OurTime` module in V provides flexible time handling, supporting relative a
|
|||||||
## Basic Usage
|
## Basic Usage
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
|
|
||||||
// Current time
|
// Current time
|
||||||
mut t := ourtime.now()
|
mut t := ourtime.now()
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Herolib Spreadsheet Module for AI Prompt Engineering
|
# Herolib Spreadsheet Module for AI Prompt Engineering
|
||||||
|
|
||||||
This document provides an overview and usage instructions for the `freeflowuniverse.herolib.biz.spreadsheet` module, which offers a powerful software representation of a spreadsheet. This module is designed for business modeling, data analysis, and can be leveraged in AI prompt engineering scenarios where structured data manipulation and visualization are required.
|
This document provides an overview and usage instructions for the `incubaid.herolib.biz.spreadsheet` module, which offers a powerful software representation of a spreadsheet. This module is designed for business modeling, data analysis, and can be leveraged in AI prompt engineering scenarios where structured data manipulation and visualization are required.
|
||||||
|
|
||||||
## 1. Core Concepts
|
## 1. Core Concepts
|
||||||
|
|
||||||
@@ -18,8 +18,9 @@ The `Sheet` is the primary container, representing the entire spreadsheet.
|
|||||||
* `currency` (currency.Currency): The default currency for the sheet (e.g., USD), used for automatic conversions.
|
* `currency` (currency.Currency): The default currency for the sheet (e.g., USD), used for automatic conversions.
|
||||||
|
|
||||||
* **Creation:**
|
* **Creation:**
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.biz.spreadsheet
|
import incubaid.herolib.biz.spreadsheet
|
||||||
|
|
||||||
// Create a new sheet named 'my_financial_sheet' with 60 columns (e.g., 60 months)
|
// Create a new sheet named 'my_financial_sheet' with 60 columns (e.g., 60 months)
|
||||||
mut my_sheet := spreadsheet.sheet_new(
|
mut my_sheet := spreadsheet.sheet_new(
|
||||||
@@ -55,6 +56,7 @@ A `Row` represents a single horizontal line of data within a `Sheet`.
|
|||||||
* `aggregatetype` (RowAggregateType): Defines default aggregation for this row (`.sum`, `.avg`, `.max`, `.min`).
|
* `aggregatetype` (RowAggregateType): Defines default aggregation for this row (`.sum`, `.avg`, `.max`, `.min`).
|
||||||
|
|
||||||
* **Creation (within a Sheet):**
|
* **Creation (within a Sheet):**
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Assuming 'my_sheet' is an existing Sheet object
|
// Assuming 'my_sheet' is an existing Sheet object
|
||||||
mut salaries_row := my_sheet.row_new(
|
mut salaries_row := my_sheet.row_new(
|
||||||
@@ -174,8 +176,9 @@ Used across line, bar, and pie charts to specify data and presentation.
|
|||||||
### 4.2. Chart Types
|
### 4.2. Chart Types
|
||||||
|
|
||||||
* **Line Chart (`line_chart`)**: Visualizes trends over time.
|
* **Line Chart (`line_chart`)**: Visualizes trends over time.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.web.echarts // Required for EChartsOption type
|
import incubaid.herolib.web.echarts // Required for EChartsOption type
|
||||||
|
|
||||||
line_chart_option := my_sheet.line_chart(
|
line_chart_option := my_sheet.line_chart(
|
||||||
rowname: 'revenue_row,expenses_row',
|
rowname: 'revenue_row,expenses_row',
|
||||||
@@ -185,6 +188,7 @@ Used across line, bar, and pie charts to specify data and presentation.
|
|||||||
```
|
```
|
||||||
|
|
||||||
* **Bar Chart (`bar_chart`)**: Compares discrete categories or values.
|
* **Bar Chart (`bar_chart`)**: Compares discrete categories or values.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
bar_chart_option := my_sheet.bar_chart(
|
bar_chart_option := my_sheet.bar_chart(
|
||||||
rowname: 'profit_row',
|
rowname: 'profit_row',
|
||||||
@@ -194,6 +198,7 @@ Used across line, bar, and pie charts to specify data and presentation.
|
|||||||
```
|
```
|
||||||
|
|
||||||
* **Pie Chart (`pie_chart`)**: Shows proportions of categories.
|
* **Pie Chart (`pie_chart`)**: Shows proportions of categories.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pie_chart_option := my_sheet.pie_chart(
|
pie_chart_option := my_sheet.pie_chart(
|
||||||
rowname: 'budget_allocation_row',
|
rowname: 'budget_allocation_row',
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Chalk offers functions:- `console.color_fg(text string, color string)` - To chan
|
|||||||
Example:
|
Example:
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
|
|
||||||
# basic usage
|
# basic usage
|
||||||
println('I am really ' + console.color_fg('happy', 'green'))
|
println('I am really ' + console.color_fg('happy', 'green'))
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ the following is a good pragmatic way to remember clients, installers as a globa
|
|||||||
|
|
||||||
module docsite
|
module docsite
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.texttools
|
import incubaid.herolib.core.texttools
|
||||||
|
|
||||||
__global (
|
__global (
|
||||||
siteconfigs map[string]&SiteConfig
|
siteconfigs map[string]&SiteConfig
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ HeroScript is a concise scripting language with the following structure:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Key characteristics:
|
Key characteristics:
|
||||||
|
|
||||||
- **Actions**: Start with `!!`, followed by `actor.action_name` (e.g., `!!mailclient.configure`).
|
- **Actions**: Start with `!!`, followed by `actor.action_name` (e.g., `!!mailclient.configure`).
|
||||||
- **Parameters**: Defined as `key:value`. Values can be quoted for spaces.
|
- **Parameters**: Defined as `key:value`. Values can be quoted for spaces.
|
||||||
- **Multiline Support**: Parameters like `description` can span multiple lines.
|
- **Multiline Support**: Parameters like `description` can span multiple lines.
|
||||||
@@ -26,8 +27,8 @@ Key characteristics:
|
|||||||
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters, this is used in most of the herolib modules, it allows configuration or actions in a structured way.
|
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters, this is used in most of the herolib modules, it allows configuration or actions in a structured way.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.playbook { PlayBook }
|
import incubaid.herolib.core.playbook { PlayBook }
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
|
|
||||||
pub fn play(mut plbook PlayBook) ! {
|
pub fn play(mut plbook PlayBook) ! {
|
||||||
|
|
||||||
@@ -51,4 +52,3 @@ pub fn play(mut plbook PlayBook) ! {
|
|||||||
```
|
```
|
||||||
|
|
||||||
For detailed information on parameter retrieval methods (e.g., `p.get()`, `p.get_int()`, `p.get_default_true()`), refer to `aiprompts/ai_core/core_params.md`.
|
For detailed information on parameter retrieval methods (e.g., `p.get()`, `p.get_int()`, `p.get_default_true()`), refer to `aiprompts/ai_core/core_params.md`.
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters.
|
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import freeflowuniverse.herolib.core.playcmds
|
import incubaid.herolib.core.playcmds
|
||||||
|
|
||||||
// path string
|
// path string
|
||||||
// text string
|
// text string
|
||||||
@@ -21,5 +21,3 @@ mut plbook := playbook.new(path: "....")!
|
|||||||
playcmds.run(mut plbook)!
|
playcmds.run(mut plbook)!
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
The `HTTPConnection` module provides a robust HTTP client for Vlang, supporting JSON, custom headers, retries, and caching.
|
The `HTTPConnection` module provides a robust HTTP client for Vlang, supporting JSON, custom headers, retries, and caching.
|
||||||
|
|
||||||
## Key Features
|
## Key Features
|
||||||
|
|
||||||
- Type-safe JSON methods
|
- Type-safe JSON methods
|
||||||
- Custom headers
|
- Custom headers
|
||||||
- Retry mechanism
|
- Retry mechanism
|
||||||
@@ -12,7 +13,7 @@ The `HTTPConnection` module provides a robust HTTP client for Vlang, supporting
|
|||||||
## Basic Usage
|
## Basic Usage
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.httpconnection
|
import incubaid.herolib.core.httpconnection
|
||||||
|
|
||||||
// Create a new HTTP connection
|
// Create a new HTTP connection
|
||||||
mut conn := httpconnection.new(
|
mut conn := httpconnection.new(
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
# OSAL Core Module - Key Capabilities (freeflowuniverse.herolib.osal.core)
|
# OSAL Core Module - Key Capabilities (incubaid.herolib.osal.core)
|
||||||
|
|
||||||
```v
|
```v
|
||||||
//example how to get started
|
//example how to get started
|
||||||
|
|
||||||
import freeflowuniverse.herolib.osal.core as osal
|
import incubaid.herolib.osal.core as osal
|
||||||
|
|
||||||
job := osal.exec(cmd: 'ls /')!
|
job := osal.exec(cmd: 'ls /')!
|
||||||
```
|
```
|
||||||
@@ -73,7 +73,7 @@ This document describes the core functionalities of the Operating System Abstrac
|
|||||||
* **`osal.hostname() !string`**: Get system hostname.
|
* **`osal.hostname() !string`**: Get system hostname.
|
||||||
* **`osal.sleep(duration int)`**: Pause execution for a specified duration.
|
* **`osal.sleep(duration int)`**: Pause execution for a specified duration.
|
||||||
* **`osal.download(args: DownloadArgs) !pathlib.Path`**: Download a file from a URL.
|
* **`osal.download(args: DownloadArgs) !pathlib.Path`**: Download a file from a URL.
|
||||||
* `pathlib.Path` is from `freeflowuniverse.herolib.core.pathlib`
|
* `pathlib.Path` is from `incubaid.herolib.core.pathlib`
|
||||||
* **Key Parameters**: `url` (string), `dest` (string), `timeout` (int), `retry` (int).
|
* **Key Parameters**: `url` (string), `dest` (string), `timeout` (int), `retry` (int).
|
||||||
* **`osal.user_exists(username string) bool`**: Check if a user exists.
|
* **`osal.user_exists(username string) bool`**: Check if a user exists.
|
||||||
* **`osal.user_id_get(username string) !int`**: Get user ID.
|
* **`osal.user_id_get(username string) !int`**: Get user ID.
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
The `OurTime` module in V provides flexible time handling, supporting relative and absolute time formats, Unix timestamps, and formatting utilities.
|
The `OurTime` module in V provides flexible time handling, supporting relative and absolute time formats, Unix timestamps, and formatting utilities.
|
||||||
|
|
||||||
## Key Features
|
## Key Features
|
||||||
|
|
||||||
- Create time objects from strings or current time
|
- Create time objects from strings or current time
|
||||||
- Relative time expressions (e.g., `+1h`, `-2d`)
|
- Relative time expressions (e.g., `+1h`, `-2d`)
|
||||||
- Absolute time formats (e.g., `YYYY-MM-DD HH:mm:ss`)
|
- Absolute time formats (e.g., `YYYY-MM-DD HH:mm:ss`)
|
||||||
@@ -12,7 +13,7 @@ The `OurTime` module in V provides flexible time handling, supporting relative a
|
|||||||
## Basic Usage
|
## Basic Usage
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
|
|
||||||
// Current time
|
// Current time
|
||||||
mut t := ourtime.now()
|
mut t := ourtime.now()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ This document details the `paramsparser` module, essential for handling paramete
|
|||||||
## Obtaining a `paramsparser` Instance
|
## Obtaining a `paramsparser` Instance
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.data.paramsparser
|
import incubaid.herolib.data.paramsparser
|
||||||
|
|
||||||
// Create new params from a string
|
// Create new params from a string
|
||||||
params := paramsparser.new("color:red size:'large' priority:1 enable:true")!
|
params := paramsparser.new("color:red size:'large' priority:1 enable:true")!
|
||||||
@@ -25,6 +25,7 @@ The parser supports various input formats:
|
|||||||
4. **Comments**: `// this is a comment` (ignored during parsing)
|
4. **Comments**: `// this is a comment` (ignored during parsing)
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := "name:'John Doe' age:30 active:true // user details"
|
text := "name:'John Doe' age:30 active:true // user details"
|
||||||
params := paramsparser.new(text)!
|
params := paramsparser.new(text)!
|
||||||
|
|||||||
@@ -14,8 +14,9 @@ The pathlib module provides a comprehensive interface for handling file system o
|
|||||||
## Basic Usage
|
## Basic Usage
|
||||||
|
|
||||||
### Importing pathlib
|
### Importing pathlib
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
```
|
```
|
||||||
|
|
||||||
### Creating Path Objects
|
### Creating Path Objects
|
||||||
@@ -33,6 +34,7 @@ mut dir_path := pathlib.get("path/to/directory")
|
|||||||
if you know in advance if you expect a dir or file its better to use `pathlib.get_dir(path:...,create:true)` or `pathlib.get_file(path:...,create:true)`.
|
if you know in advance if you expect a dir or file its better to use `pathlib.get_dir(path:...,create:true)` or `pathlib.get_file(path:...,create:true)`.
|
||||||
|
|
||||||
### Basic Path Operations
|
### Basic Path Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Get absolute path
|
// Get absolute path
|
||||||
abs_path := file_path.absolute()
|
abs_path := file_path.absolute()
|
||||||
@@ -49,6 +51,7 @@ if file_path.exists() {
|
|||||||
## Path Properties and Methods
|
## Path Properties and Methods
|
||||||
|
|
||||||
### Path Types
|
### Path Types
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Check if path is a file
|
// Check if path is a file
|
||||||
if file_path.is_file() {
|
if file_path.is_file() {
|
||||||
@@ -67,6 +70,7 @@ if file_path.is_link() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Path Normalization
|
### Path Normalization
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Normalize path (remove extra slashes, resolve . and ..)
|
// Normalize path (remove extra slashes, resolve . and ..)
|
||||||
normalized_path := file_path.path_normalize()
|
normalized_path := file_path.path_normalize()
|
||||||
@@ -81,6 +85,7 @@ name_no_ext := file_path.name_no_ext()
|
|||||||
## File and Directory Operations
|
## File and Directory Operations
|
||||||
|
|
||||||
### File Operations
|
### File Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Write to file
|
// Write to file
|
||||||
file_path.write("Content to write")!
|
file_path.write("Content to write")!
|
||||||
@@ -93,6 +98,7 @@ file_path.delete()!
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Directory Operations
|
### Directory Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Create directory
|
// Create directory
|
||||||
mut dir := pathlib.get_dir(
|
mut dir := pathlib.get_dir(
|
||||||
@@ -108,6 +114,7 @@ dir.delete()!
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Symlink Operations
|
### Symlink Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Create symlink
|
// Create symlink
|
||||||
file_path.link("path/to/symlink", delete_exists: true)!
|
file_path.link("path/to/symlink", delete_exists: true)!
|
||||||
@@ -119,12 +126,14 @@ real_path := file_path.realpath()
|
|||||||
## Advanced Operations
|
## Advanced Operations
|
||||||
|
|
||||||
### Path Copying
|
### Path Copying
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Copy file to destination
|
// Copy file to destination
|
||||||
file_path.copy(dest: "path/to/destination")!
|
file_path.copy(dest: "path/to/destination")!
|
||||||
```
|
```
|
||||||
|
|
||||||
### Recursive Operations
|
### Recursive Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// List directory recursively
|
// List directory recursively
|
||||||
mut recursive_list := dir.list(recursive: true)!
|
mut recursive_list := dir.list(recursive: true)!
|
||||||
@@ -134,6 +143,7 @@ dir.delete()!
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Path Filtering
|
### Path Filtering
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// List files matching pattern
|
// List files matching pattern
|
||||||
mut filtered_list := dir.list(
|
mut filtered_list := dir.list(
|
||||||
@@ -145,6 +155,7 @@ mut filtered_list := dir.list(
|
|||||||
## Best Practices
|
## Best Practices
|
||||||
|
|
||||||
### Error Handling
|
### Error Handling
|
||||||
|
|
||||||
```v
|
```v
|
||||||
if file_path.exists() {
|
if file_path.exists() {
|
||||||
// Safe to operate
|
// Safe to operate
|
||||||
@@ -152,4 +163,3 @@ if file_path.exists() {
|
|||||||
// Handle missing file
|
// Handle missing file
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ The `redisclient` module in Herolib provides a comprehensive client for interact
|
|||||||
To get a Redis client instance, use `redisclient.core_get()`. By default, it connects to `127.0.0.1:6379`. You can specify a different address and port using the `RedisURL` struct.
|
To get a Redis client instance, use `redisclient.core_get()`. By default, it connects to `127.0.0.1:6379`. You can specify a different address and port using the `RedisURL` struct.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
|
|
||||||
// Connect to default Redis instance (127.0.0.1:6379)
|
// Connect to default Redis instance (127.0.0.1:6379)
|
||||||
mut redis := redisclient.core_get()!
|
mut redis := redisclient.core_get()!
|
||||||
@@ -116,7 +116,7 @@ redis.expire('temp_key', 60)! // Expires in 60 seconds
|
|||||||
The `RedisCache` struct provides a convenient way to implement caching using Redis.
|
The `RedisCache` struct provides a convenient way to implement caching using Redis.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
|
|
||||||
mut redis := redisclient.core_get()!
|
mut redis := redisclient.core_get()!
|
||||||
mut cache := redis.cache('my_app_cache')
|
mut cache := redis.cache('my_app_cache')
|
||||||
@@ -145,7 +145,7 @@ cache.reset()!
|
|||||||
The `RedisQueue` struct provides a simple queue mechanism using Redis lists.
|
The `RedisQueue` struct provides a simple queue mechanism using Redis lists.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
import time
|
import time
|
||||||
|
|
||||||
mut redis := redisclient.core_get()!
|
mut redis := redisclient.core_get()!
|
||||||
@@ -169,7 +169,7 @@ task2 := my_queue.pop()!
|
|||||||
The `RedisRpc` struct enables Remote Procedure Call (RPC) over Redis, allowing services to communicate by sending messages to queues and waiting for responses.
|
The `RedisRpc` struct enables Remote Procedure Call (RPC) over Redis, allowing services to communicate by sending messages to queues and waiting for responses.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|||||||
@@ -2,96 +2,124 @@
|
|||||||
|
|
||||||
The `texttools` module provides a comprehensive set of utilities for text manipulation and processing.
|
The `texttools` module provides a comprehensive set of utilities for text manipulation and processing.
|
||||||
|
|
||||||
## Functions and Examples:
|
## Functions and Examples
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.texttools
|
import incubaid.herolib.core.texttools
|
||||||
|
|
||||||
assert hello_world == texttools.name_fix("Hello World!")
|
assert hello_world == texttools.name_fix("Hello World!")
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Name/Path Processing
|
### Name/Path Processing
|
||||||
|
|
||||||
* `name_fix(name string) string`: Normalizes filenames and paths.
|
* `name_fix(name string) string`: Normalizes filenames and paths.
|
||||||
* `name_fix_keepspace(name string) !string`: Like name_fix but preserves spaces.
|
* `name_fix_keepspace(name string) !string`: Like name_fix but preserves spaces.
|
||||||
* `name_fix_no_ext(name_ string) string`: Removes file extension.
|
* `name_fix_no_ext(name_ string) string`: Removes file extension.
|
||||||
* `name_fix_snake_to_pascal(name string) string`: Converts snake_case to PascalCase.
|
* `name_fix_snake_to_pascal(name string) string`: Converts snake_case to PascalCase.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
name := texttools.name_fix_snake_to_pascal("hello_world") // Result: "HelloWorld"
|
name := texttools.name_fix_snake_to_pascal("hello_world") // Result: "HelloWorld"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `snake_case(name string) string`: Converts PascalCase to snake_case.
|
* `snake_case(name string) string`: Converts PascalCase to snake_case.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
name := texttools.snake_case("HelloWorld") // Result: "hello_world"
|
name := texttools.snake_case("HelloWorld") // Result: "hello_world"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `name_split(name string) !(string, string)`: Splits name into site and page components.
|
* `name_split(name string) !(string, string)`: Splits name into site and page components.
|
||||||
|
|
||||||
|
|
||||||
### Text Cleaning
|
### Text Cleaning
|
||||||
|
|
||||||
* `name_clean(r string) string`: Normalizes names by removing special characters.
|
* `name_clean(r string) string`: Normalizes names by removing special characters.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
name := texttools.name_clean("Hello@World!") // Result: "HelloWorld"
|
name := texttools.name_clean("Hello@World!") // Result: "HelloWorld"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `ascii_clean(r string) string`: Removes all non-ASCII characters.
|
* `ascii_clean(r string) string`: Removes all non-ASCII characters.
|
||||||
* `remove_empty_lines(text string) string`: Removes empty lines from text.
|
* `remove_empty_lines(text string) string`: Removes empty lines from text.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := texttools.remove_empty_lines("line1\n\nline2\n\n\nline3") // Result: "line1\nline2\nline3"
|
text := texttools.remove_empty_lines("line1\n\nline2\n\n\nline3") // Result: "line1\nline2\nline3"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `remove_double_lines(text string) string`: Removes consecutive empty lines.
|
* `remove_double_lines(text string) string`: Removes consecutive empty lines.
|
||||||
* `remove_empty_js_blocks(text string) string`: Removes empty code blocks (```...```).
|
* `remove_empty_js_blocks(text string) string`: Removes empty code blocks (```...```).
|
||||||
|
|
||||||
### Command Line Parsing
|
### Command Line Parsing
|
||||||
|
|
||||||
* `cmd_line_args_parser(text string) ![]string`: Parses command line arguments with support for quotes and escaping.
|
* `cmd_line_args_parser(text string) ![]string`: Parses command line arguments with support for quotes and escaping.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
args := texttools.cmd_line_args_parser("'arg with spaces' --flag=value") // Result: ['arg with spaces', '--flag=value']
|
args := texttools.cmd_line_args_parser("'arg with spaces' --flag=value") // Result: ['arg with spaces', '--flag=value']
|
||||||
```
|
```
|
||||||
|
|
||||||
* `text_remove_quotes(text string) string`: Removes quoted sections from text.
|
* `text_remove_quotes(text string) string`: Removes quoted sections from text.
|
||||||
* `check_exists_outside_quotes(text string, items []string) bool`: Checks if items exist in text outside of quotes.
|
* `check_exists_outside_quotes(text string, items []string) bool`: Checks if items exist in text outside of quotes.
|
||||||
|
|
||||||
### Text Expansion
|
### Text Expansion
|
||||||
|
|
||||||
* `expand(txt_ string, l int, expand_with string) string`: Expands text to a specified length with a given character.
|
* `expand(txt_ string, l int, expand_with string) string`: Expands text to a specified length with a given character.
|
||||||
|
|
||||||
### Indentation
|
### Indentation
|
||||||
|
|
||||||
* `indent(text string, prefix string) string`: Adds indentation prefix to each line.
|
* `indent(text string, prefix string) string`: Adds indentation prefix to each line.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := texttools.indent("line1\nline2", " ") // Result: " line1\n line2\n"
|
text := texttools.indent("line1\nline2", " ") // Result: " line1\n line2\n"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `dedent(text string) string`: Removes common leading whitespace from every line.
|
* `dedent(text string) string`: Removes common leading whitespace from every line.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := texttools.dedent(" line1\n line2") // Result: "line1\nline2"
|
text := texttools.dedent(" line1\n line2") // Result: "line1\nline2"
|
||||||
```
|
```
|
||||||
|
|
||||||
### String Validation
|
### String Validation
|
||||||
|
|
||||||
* `is_int(text string) bool`: Checks if text contains only digits.
|
* `is_int(text string) bool`: Checks if text contains only digits.
|
||||||
* `is_upper_text(text string) bool`: Checks if text contains only uppercase letters.
|
* `is_upper_text(text string) bool`: Checks if text contains only uppercase letters.
|
||||||
|
|
||||||
### Multiline Processing
|
### Multiline Processing
|
||||||
|
|
||||||
* `multiline_to_single(text string) !string`: Converts multiline text to a single line with proper escaping.
|
* `multiline_to_single(text string) !string`: Converts multiline text to a single line with proper escaping.
|
||||||
|
|
||||||
### Text Splitting
|
### Text Splitting
|
||||||
|
|
||||||
* `split_smart(t string, delimiter_ string) []string`: Intelligent string splitting that respects quotes.
|
* `split_smart(t string, delimiter_ string) []string`: Intelligent string splitting that respects quotes.
|
||||||
|
|
||||||
### Tokenization
|
### Tokenization
|
||||||
|
|
||||||
* `tokenize(text_ string) TokenizerResult`: Tokenizes text into meaningful parts.
|
* `tokenize(text_ string) TokenizerResult`: Tokenizes text into meaningful parts.
|
||||||
* `text_token_replace(text string, tofind string, replacewith string) !string`: Replaces tokens in text.
|
* `text_token_replace(text string, tofind string, replacewith string) !string`: Replaces tokens in text.
|
||||||
|
|
||||||
### Version Parsing
|
### Version Parsing
|
||||||
|
|
||||||
* `version(text_ string) int`: Converts version strings to comparable integers.
|
* `version(text_ string) int`: Converts version strings to comparable integers.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
ver := texttools.version("v0.4.36") // Result: 4036
|
ver := texttools.version("v0.4.36") // Result: 4036
|
||||||
ver = texttools.version("v1.4.36") // Result: 1004036
|
ver = texttools.version("v1.4.36") // Result: 1004036
|
||||||
```
|
```
|
||||||
|
|
||||||
### Formatting
|
### Formatting
|
||||||
|
|
||||||
* `format_rfc1123(t time.Time) string`: Formats a time.Time object into RFC 1123 format.
|
* `format_rfc1123(t time.Time) string`: Formats a time.Time object into RFC 1123 format.
|
||||||
|
|
||||||
|
|
||||||
### Array Operations
|
### Array Operations
|
||||||
|
|
||||||
* `to_array(r string) []string`: Converts a comma or newline separated list to an array of strings.
|
* `to_array(r string) []string`: Converts a comma or newline separated list to an array of strings.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := "item1,item2,item3"
|
text := "item1,item2,item3"
|
||||||
array := texttools.to_array(text) // Result: ['item1', 'item2', 'item3']
|
array := texttools.to_array(text) // Result: ['item1', 'item2', 'item3']
|
||||||
```
|
```
|
||||||
|
|
||||||
* `to_array_int(r string) []int`: Converts a text list to an array of integers.
|
* `to_array_int(r string) []int`: Converts a text list to an array of integers.
|
||||||
* `to_map(mapstring string, line string, delimiter_ string) map[string]string`: Intelligent mapping of a line to a map based on a template.
|
* `to_map(mapstring string, line string, delimiter_ string) map[string]string`: Intelligent mapping of a line to a map based on a template.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
r := texttools.to_map("name,-,-,-,-,pid,-,-,-,-,path",
|
r := texttools.to_map("name,-,-,-,-,pid,-,-,-,-,path",
|
||||||
"root 304 0.0 0.0 408185328 1360 ?? S 16Dec23 0:34.06 /usr/sbin/distnoted")
|
"root 304 0.0 0.0 408185328 1360 ?? S 16Dec23 0:34.06 /usr/sbin/distnoted")
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ has mechanisms to print better to console, see the methods below
|
|||||||
import as
|
import as
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ this is how we want example scripts to be, see the first line
|
|||||||
```v
|
```v
|
||||||
#!/usr/bin/env -S v -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib...
|
import incubaid.herolib...
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -674,6 +674,7 @@
|
|||||||
|
|
||||||
<file_contents>
|
<file_contents>
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/ai_instructions.md
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/ai_instructions.md
|
||||||
|
|
||||||
```md
|
```md
|
||||||
# HeroDB Model Creation Instructions for AI
|
# HeroDB Model Creation Instructions for AI
|
||||||
|
|
||||||
@@ -808,6 +809,7 @@ pub fn new() !ModelsFactory {
|
|||||||
Use these methods for serialization/deserialization:
|
Use these methods for serialization/deserialization:
|
||||||
|
|
||||||
### Encoder (Serialization)
|
### Encoder (Serialization)
|
||||||
|
|
||||||
- `e.add_bool(val bool)`
|
- `e.add_bool(val bool)`
|
||||||
- `e.add_u8(val u8)`
|
- `e.add_u8(val u8)`
|
||||||
- `e.add_u16(val u16)`
|
- `e.add_u16(val u16)`
|
||||||
@@ -834,6 +836,7 @@ Use these methods for serialization/deserialization:
|
|||||||
- `e.add_list_string(val []string)`
|
- `e.add_list_string(val []string)`
|
||||||
|
|
||||||
### Decoder (Deserialization)
|
### Decoder (Deserialization)
|
||||||
|
|
||||||
- `e.get_bool()!`
|
- `e.get_bool()!`
|
||||||
- `e.get_u8()!`
|
- `e.get_u8()!`
|
||||||
- `e.get_u16()!`
|
- `e.get_u16()!`
|
||||||
@@ -862,6 +865,7 @@ Use these methods for serialization/deserialization:
|
|||||||
## CRUD Methods Implementation
|
## CRUD Methods Implementation
|
||||||
|
|
||||||
### Create New Instance
|
### Create New Instance
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) new(args CalendarArg) !Calendar {
|
pub fn (mut self DBCalendar) new(args CalendarArg) !Calendar {
|
||||||
mut o := Calendar{
|
mut o := Calendar{
|
||||||
@@ -877,6 +881,7 @@ pub fn (mut self DBCalendar) new(args CalendarArg) !Calendar {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Save to Database
|
### Save to Database
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) set(o Calendar) !u32 {
|
pub fn (mut self DBCalendar) set(o Calendar) !u32 {
|
||||||
return self.db.set[Calendar](o)!
|
return self.db.set[Calendar](o)!
|
||||||
@@ -884,6 +889,7 @@ pub fn (mut self DBCalendar) set(o Calendar) !u32 {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Retrieve from Database
|
### Retrieve from Database
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) get(id u32) !Calendar {
|
pub fn (mut self DBCalendar) get(id u32) !Calendar {
|
||||||
mut o, data := self.db.get_data[Calendar](id)!
|
mut o, data := self.db.get_data[Calendar](id)!
|
||||||
@@ -894,6 +900,7 @@ pub fn (mut self DBCalendar) get(id u32) !Calendar {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Delete from Database
|
### Delete from Database
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) delete(id u32) ! {
|
pub fn (mut self DBCalendar) delete(id u32) ! {
|
||||||
self.db.delete[Calendar](id)!
|
self.db.delete[Calendar](id)!
|
||||||
@@ -901,6 +908,7 @@ pub fn (mut self DBCalendar) delete(id u32) ! {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Check Existence
|
### Check Existence
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) exist(id u32) !bool {
|
pub fn (mut self DBCalendar) exist(id u32) !bool {
|
||||||
return self.db.exists[Calendar](id)!
|
return self.db.exists[Calendar](id)!
|
||||||
@@ -908,6 +916,7 @@ pub fn (mut self DBCalendar) exist(id u32) !bool {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### List All Objects
|
### List All Objects
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) list() ![]Calendar {
|
pub fn (mut self DBCalendar) list() ![]Calendar {
|
||||||
return self.db.list[Calendar]()!.map(self.get(it)!)
|
return self.db.list[Calendar]()!.map(self.get(it)!)
|
||||||
@@ -921,8 +930,8 @@ Create a `.vsh` script in `examples/hero/heromodels/` to demonstrate usage:
|
|||||||
```v
|
```v
|
||||||
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
import freeflowuniverse.herolib.hero.heromodels
|
import incubaid.herolib.hero.heromodels
|
||||||
|
|
||||||
mut mydb := heromodels.new()!
|
mut mydb := heromodels.new()!
|
||||||
|
|
||||||
@@ -971,14 +980,15 @@ println('All objects: ${objects}')
|
|||||||
8. Implement CRUD methods
|
8. Implement CRUD methods
|
||||||
9. Create example usage script
|
9. Create example usage script
|
||||||
10. Test the implementation with the example script
|
10. Test the implementation with the example script
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/core_methods.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/core_methods.v
|
||||||
```v
|
```v
|
||||||
module db
|
module db
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
import freeflowuniverse.herolib.data.encoder
|
import incubaid.herolib.data.encoder
|
||||||
|
|
||||||
pub fn (mut self DB) set[T](obj_ T) !u32 {
|
pub fn (mut self DB) set[T](obj_ T) !u32 {
|
||||||
// Get the next ID
|
// Get the next ID
|
||||||
@@ -1082,12 +1092,13 @@ pub fn (mut self DB) new_id() !u32 {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/core_models.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/core_models.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module db
|
module db
|
||||||
|
|
||||||
import crypto.md5
|
import crypto.md5
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
|
|
||||||
// Group represents a collection of users with roles and permissions
|
// Group represents a collection of users with roles and permissions
|
||||||
@[heap]
|
@[heap]
|
||||||
@@ -1125,6 +1136,7 @@ pub mut:
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/helpers_comments.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/helpers_comments.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module db
|
module db
|
||||||
|
|
||||||
@@ -1164,6 +1176,7 @@ pub fn (mut self DB) comment_get(comment string) !u32 {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/helpers_tags.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/helpers_tags.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module db
|
module db
|
||||||
|
|
||||||
@@ -1192,13 +1205,14 @@ pub fn (mut self DB) tags_get(tags []string) !u32 {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/heromodels/calendar_event.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/heromodels/calendar_event.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
|
|
||||||
module heromodels
|
module heromodels
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.encoder
|
import incubaid.herolib.data.encoder
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
import freeflowuniverse.herolib.hero.db
|
import incubaid.herolib.hero.db
|
||||||
|
|
||||||
// CalendarEvent represents a single event in a calendar
|
// CalendarEvent represents a single event in a calendar
|
||||||
@[heap]
|
@[heap]
|
||||||
@@ -1426,6 +1440,7 @@ pub fn (mut self DBCalendarEvent) list() ![]CalendarEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
</file_contents>
|
</file_contents>
|
||||||
<user_instructions>
|
<user_instructions>
|
||||||
make the crud and example for all files in lib/hero/herofs
|
make the crud and example for all files in lib/hero/herofs
|
||||||
@@ -1436,5 +1451,4 @@ check the implementation
|
|||||||
|
|
||||||
do the implementation
|
do the implementation
|
||||||
|
|
||||||
|
|
||||||
</user_instructions>
|
</user_instructions>
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ the template is as follows
|
|||||||
## factory
|
## factory
|
||||||
|
|
||||||
is there factory, which one and quick example how to call, don’t say in which file not relevant
|
is there factory, which one and quick example how to call, don’t say in which file not relevant
|
||||||
show how to import the module is as follows: import freeflowuniverse.herolib.
|
show how to import the module is as follows: import incubaid.herolib.
|
||||||
and then starting from lib e.g. lib/clients/mycelium would result in import freeflowuniverse.herolib. clients.mycelium
|
and then starting from lib e.g. lib/clients/mycelium would result in import incubaid.herolib. clients.mycelium
|
||||||
|
|
||||||
## overview
|
## overview
|
||||||
|
|
||||||
|
|||||||
@@ -10,13 +10,11 @@ start of output file is:
|
|||||||
## factory
|
## factory
|
||||||
|
|
||||||
is there factory, which one and quick example how to call, don’t say in which file not relevant
|
is there factory, which one and quick example how to call, don’t say in which file not relevant
|
||||||
show how to import the module is as follows: import freeflowuniverse.herolib.
|
show how to import the module is as follows: import incubaid.herolib.
|
||||||
and then starting from lib e.g. lib/clients/mycelium would result in import freeflowuniverse.herolib. clients.mycelium
|
and then starting from lib e.g. lib/clients/mycelium would result in import incubaid.herolib. clients.mycelium
|
||||||
|
|
||||||
## structs and methods
|
## structs and methods
|
||||||
|
|
||||||
quick overview as list with identations, of the structs and its methods
|
quick overview as list with identations, of the structs and its methods
|
||||||
|
|
||||||
|
|
||||||
ONLY OUTPUT THE MARKDOWN FILE, NOTHING ELSE
|
ONLY OUTPUT THE MARKDOWN FILE, NOTHING ELSE
|
||||||
|
|
||||||
|
|||||||
@@ -468,6 +468,7 @@
|
|||||||
|
|
||||||
<file_contents>
|
<file_contents>
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_curdir_example.md
|
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_curdir_example.md
|
||||||
|
|
||||||
```md
|
```md
|
||||||
# Getting the Current Script's Path in Herolib/V Shell
|
# Getting the Current Script's Path in Herolib/V Shell
|
||||||
|
|
||||||
@@ -493,7 +494,7 @@ the following is a good pragmatic way to remember clients, installers as a globa
|
|||||||
|
|
||||||
module docsite
|
module docsite
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.texttools
|
import incubaid.herolib.core.texttools
|
||||||
|
|
||||||
__global (
|
__global (
|
||||||
siteconfigs map[string]&SiteConfig
|
siteconfigs map[string]&SiteConfig
|
||||||
@@ -529,6 +530,7 @@ pub fn default() !&SiteConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_heroscript_basics.md
|
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_heroscript_basics.md
|
||||||
@@ -551,18 +553,19 @@ HeroScript is a concise scripting language with the following structure:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Key characteristics:
|
Key characteristics:
|
||||||
- **Actions**: Start with `!!`, followed by `actor.action_name` (e.g., `!!mailclient.configure`).
|
|
||||||
- **Parameters**: Defined as `key:value`. Values can be quoted for spaces.
|
- __Actions__: Start with `!!`, followed by `actor.action_name` (e.g., `!!mailclient.configure`).
|
||||||
- **Multiline Support**: Parameters like `description` can span multiple lines.
|
- __Parameters__: Defined as `key:value`. Values can be quoted for spaces.
|
||||||
- **Arguments**: Values without keys (e.g., `arg1`).
|
- __Multiline Support__: Parameters like `description` can span multiple lines.
|
||||||
|
- __Arguments__: Values without keys (e.g., `arg1`).
|
||||||
|
|
||||||
## Processing HeroScript in Vlang
|
## Processing HeroScript in Vlang
|
||||||
|
|
||||||
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters, this is used in most of the herolib modules, it allows configuration or actions in a structured way.
|
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters, this is used in most of the herolib modules, it allows configuration or actions in a structured way.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.playbook { PlayBook }
|
import incubaid.herolib.core.playbook { PlayBook }
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
|
|
||||||
pub fn play(mut plbook PlayBook) ! {
|
pub fn play(mut plbook PlayBook) ! {
|
||||||
|
|
||||||
@@ -587,7 +590,6 @@ pub fn play(mut plbook PlayBook) ! {
|
|||||||
|
|
||||||
For detailed information on parameter retrieval methods (e.g., `p.get()`, `p.get_int()`, `p.get_default_true()`), refer to `aiprompts/ai_core/core_params.md`.
|
For detailed information on parameter retrieval methods (e.g., `p.get()`, `p.get_int()`, `p.get_default_true()`), refer to `aiprompts/ai_core/core_params.md`.
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_heroscript_playbook.md
|
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_heroscript_playbook.md
|
||||||
@@ -599,8 +601,8 @@ File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_h
|
|||||||
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters.
|
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import freeflowuniverse.herolib.core.playcmds
|
import incubaid.herolib.core.playcmds
|
||||||
|
|
||||||
// path string
|
// path string
|
||||||
// text string
|
// text string
|
||||||
@@ -616,8 +618,6 @@ playcmds.run(mut plbook)!
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_http_client.md
|
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_http_client.md
|
||||||
@@ -636,7 +636,7 @@ The `HTTPConnection` module provides a robust HTTP client for Vlang, supporting
|
|||||||
## Basic Usage
|
## Basic Usage
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.httpconnection
|
import incubaid.herolib.core.httpconnection
|
||||||
|
|
||||||
// Create a new HTTP connection
|
// Create a new HTTP connection
|
||||||
mut conn := httpconnection.new(
|
mut conn := httpconnection.new(
|
||||||
@@ -733,14 +733,15 @@ user := conn.get_json_generic[User](
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_osal.md
|
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_osal.md
|
||||||
|
|
||||||
```md
|
```md
|
||||||
# OSAL Core Module - Key Capabilities (freeflowuniverse.herolib.osal.core)
|
# OSAL Core Module - Key Capabilities (incubaid.herolib.osal.core)
|
||||||
|
|
||||||
|
|
||||||
```v
|
```v
|
||||||
//example how to get started
|
//example how to get started
|
||||||
|
|
||||||
import freeflowuniverse.herolib.osal.core as osal
|
import incubaid.herolib.osal.core as osal
|
||||||
|
|
||||||
osal.exec(cmd:"ls /")!
|
osal.exec(cmd:"ls /")!
|
||||||
|
|
||||||
@@ -752,50 +753,49 @@ this document has info about the most core functions, more detailed info can be
|
|||||||
|
|
||||||
### 1. Process Execution
|
### 1. Process Execution
|
||||||
|
|
||||||
* **`osal.exec(cmd: Command) !Job`**: Execute a shell command.
|
- __`osal.exec(cmd: Command) !Job`__: Execute a shell command.
|
||||||
* **Key Parameters**: `cmd` (string), `timeout` (int), `retry` (int), `work_folder` (string), `environment` (map[string]string), `stdout` (bool), `raise_error` (bool).
|
- __Key Parameters__: `cmd` (string), `timeout` (int), `retry` (int), `work_folder` (string), `environment` (map[string]string), `stdout` (bool), `raise_error` (bool).
|
||||||
* **Returns**: `Job` (status, output, error, exit code).
|
- __Returns__: `Job` (status, output, error, exit code).
|
||||||
* **`osal.execute_silent(cmd string) !string`**: Execute silently, return output.
|
- __`osal.execute_silent(cmd string) !string`__: Execute silently, return output.
|
||||||
* **`osal.cmd_exists(cmd string) bool`**: Check if a command exists.
|
- __`osal.cmd_exists(cmd string) bool`__: Check if a command exists.
|
||||||
* **`osal.process_kill_recursive(args: ProcessKillArgs) !`**: Kill a process and its children.
|
- __`osal.process_kill_recursive(args: ProcessKillArgs) !`__: Kill a process and its children.
|
||||||
|
|
||||||
### 2. Network Utilities
|
### 2. Network Utilities
|
||||||
|
|
||||||
* **`osal.ping(args: PingArgs) !bool`**: Check host reachability.
|
- __`osal.ping(args: PingArgs) !bool`__: Check host reachability.
|
||||||
* **`osal.tcp_port_test(args: TcpPortTestArgs) bool`**: Test if a TCP port is open.
|
- __`osal.tcp_port_test(args: TcpPortTestArgs) bool`__: Test if a TCP port is open.
|
||||||
* **Key Parameters**: `address` (string), `port` (int).
|
- __Key Parameters__: `address` (string), `port` (int).
|
||||||
* **`osal.ipaddr_pub_get() !string`**: Get public IP address.
|
- __`osal.ipaddr_pub_get() !string`__: Get public IP address.
|
||||||
|
|
||||||
### 3. File System Operations
|
### 3. File System Operations
|
||||||
|
|
||||||
* **`osal.file_write(path string, text string) !`**: Write text to a file.
|
- __`osal.file_write(path string, text string) !`__: Write text to a file.
|
||||||
* **`osal.file_read(path string) !string`**: Read content from a file.
|
- __`osal.file_read(path string) !string`__: Read content from a file.
|
||||||
* **`osal.dir_ensure(path string) !`**: Ensure a directory exists.
|
- __`osal.dir_ensure(path string) !`__: Ensure a directory exists.
|
||||||
* **`osal.rm(todelete string) !`**: Remove files/directories.
|
- __`osal.rm(todelete string) !`__: Remove files/directories.
|
||||||
|
|
||||||
### 4. Environment Variables
|
### 4. Environment Variables
|
||||||
|
|
||||||
* **`osal.env_set(args: EnvSet)`**: Set an environment variable.
|
- __`osal.env_set(args: EnvSet)`__: Set an environment variable.
|
||||||
* **Key Parameters**: `key` (string), `value` (string).
|
- __Key Parameters__: `key` (string), `value` (string).
|
||||||
* **`osal.env_get(key string) !string`**: Get an environment variable's value.
|
- __`osal.env_get(key string) !string`__: Get an environment variable's value.
|
||||||
* **`osal.load_env_file(file_path string) !`**: Load variables from a file.
|
- __`osal.load_env_file(file_path string) !`__: Load variables from a file.
|
||||||
|
|
||||||
### 5. Command & Profile Management
|
### 5. Command & Profile Management
|
||||||
|
|
||||||
* **`osal.cmd_add(args: CmdAddArgs) !`**: Add a binary to system paths and update profiles.
|
- __`osal.cmd_add(args: CmdAddArgs) !`__: Add a binary to system paths and update profiles.
|
||||||
* **Key Parameters**: `source` (string, required), `cmdname` (string).
|
- __Key Parameters__: `source` (string, required), `cmdname` (string).
|
||||||
* **`osal.profile_path_add_remove(args: ProfilePathAddRemoveArgs) !`**: Add/remove paths from profiles.
|
- __`osal.profile_path_add_remove(args: ProfilePathAddRemoveArgs) !`__: Add/remove paths from profiles.
|
||||||
* **Key Parameters**: `paths2add` (string), `paths2delete` (string).
|
- __Key Parameters__: `paths2add` (string), `paths2delete` (string).
|
||||||
|
|
||||||
### 6. System Information
|
### 6. System Information
|
||||||
|
|
||||||
* **`osal.platform() !PlatformType`**: Identify the operating system.
|
- __`osal.platform() !PlatformType`__: Identify the operating system.
|
||||||
* **`osal.cputype() !CPUType`**: Identify the CPU architecture.
|
- __`osal.cputype() !CPUType`__: Identify the CPU architecture.
|
||||||
* **`osal.hostname() !string`**: Get system hostname.
|
- __`osal.hostname() !string`__: Get system hostname.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_ourtime.md
|
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_ourtime.md
|
||||||
@@ -814,7 +814,7 @@ The `OurTime` module in V provides flexible time handling, supporting relative a
|
|||||||
## Basic Usage
|
## Basic Usage
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
|
|
||||||
// Current time
|
// Current time
|
||||||
mut t := ourtime.now()
|
mut t := ourtime.now()
|
||||||
@@ -896,6 +896,7 @@ t_invalid := ourtime.new('bad-date') or {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_params.md
|
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_params.md
|
||||||
|
|
||||||
```md
|
```md
|
||||||
# Parameter Parsing in Vlang
|
# Parameter Parsing in Vlang
|
||||||
|
|
||||||
@@ -904,7 +905,7 @@ This document details the `paramsparser` module, essential for handling paramete
|
|||||||
## Obtaining a `paramsparser` Instance
|
## Obtaining a `paramsparser` Instance
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.data.paramsparser
|
import incubaid.herolib.data.paramsparser
|
||||||
|
|
||||||
// Create new params from a string
|
// Create new params from a string
|
||||||
params := paramsparser.new("color:red size:'large' priority:1 enable:true")!
|
params := paramsparser.new("color:red size:'large' priority:1 enable:true")!
|
||||||
@@ -918,12 +919,13 @@ params.set("color", "red")
|
|||||||
|
|
||||||
The parser supports various input formats:
|
The parser supports various input formats:
|
||||||
|
|
||||||
1. **Key-value pairs**: `key:value`
|
1. __Key-value pairs__: `key:value`
|
||||||
2. **Quoted values**: `key:'value with spaces'` (single or double quotes)
|
2. __Quoted values__: `key:'value with spaces'` (single or double quotes)
|
||||||
3. **Arguments without keys**: `arg1 arg2` (accessed by index)
|
3. __Arguments without keys__: `arg1 arg2` (accessed by index)
|
||||||
4. **Comments**: `// this is a comment` (ignored during parsing)
|
4. __Comments__: `// this is a comment` (ignored during parsing)
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := "name:'John Doe' age:30 active:true // user details"
|
text := "name:'John Doe' age:30 active:true // user details"
|
||||||
params := paramsparser.new(text)!
|
params := paramsparser.new(text)!
|
||||||
@@ -1028,10 +1030,11 @@ The pathlib module provides a comprehensive interface for handling file system o
|
|||||||
|
|
||||||
### Importing pathlib
|
### Importing pathlib
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
```
|
```
|
||||||
|
|
||||||
### Creating Path Objects
|
### Creating Path Objects
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Create a Path object for a file
|
// Create a Path object for a file
|
||||||
mut file_path := pathlib.get("path/to/file.txt")
|
mut file_path := pathlib.get("path/to/file.txt")
|
||||||
@@ -1041,6 +1044,7 @@ mut dir_path := pathlib.get("path/to/directory")
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Basic Path Operations
|
### Basic Path Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Get absolute path
|
// Get absolute path
|
||||||
abs_path := file_path.absolute()
|
abs_path := file_path.absolute()
|
||||||
@@ -1057,6 +1061,7 @@ if file_path.exists() {
|
|||||||
## Path Properties and Methods
|
## Path Properties and Methods
|
||||||
|
|
||||||
### Path Types
|
### Path Types
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Check if path is a file
|
// Check if path is a file
|
||||||
if file_path.is_file() {
|
if file_path.is_file() {
|
||||||
@@ -1075,6 +1080,7 @@ if file_path.is_link() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Path Normalization
|
### Path Normalization
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Normalize path (remove extra slashes, resolve . and ..)
|
// Normalize path (remove extra slashes, resolve . and ..)
|
||||||
normalized_path := file_path.path_normalize()
|
normalized_path := file_path.path_normalize()
|
||||||
@@ -1089,6 +1095,7 @@ name_no_ext := file_path.name_no_ext()
|
|||||||
## File and Directory Operations
|
## File and Directory Operations
|
||||||
|
|
||||||
### File Operations
|
### File Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Write to file
|
// Write to file
|
||||||
file_path.write("Content to write")!
|
file_path.write("Content to write")!
|
||||||
@@ -1101,6 +1108,7 @@ file_path.delete()!
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Directory Operations
|
### Directory Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Create directory
|
// Create directory
|
||||||
mut dir := pathlib.get_dir(
|
mut dir := pathlib.get_dir(
|
||||||
@@ -1116,6 +1124,7 @@ dir.delete()!
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Symlink Operations
|
### Symlink Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Create symlink
|
// Create symlink
|
||||||
file_path.link("path/to/symlink", delete_exists: true)!
|
file_path.link("path/to/symlink", delete_exists: true)!
|
||||||
@@ -1127,12 +1136,14 @@ real_path := file_path.realpath()
|
|||||||
## Advanced Operations
|
## Advanced Operations
|
||||||
|
|
||||||
### Path Copying
|
### Path Copying
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Copy file to destination
|
// Copy file to destination
|
||||||
file_path.copy(dest: "path/to/destination")!
|
file_path.copy(dest: "path/to/destination")!
|
||||||
```
|
```
|
||||||
|
|
||||||
### Recursive Operations
|
### Recursive Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// List directory recursively
|
// List directory recursively
|
||||||
mut recursive_list := dir.list(recursive: true)!
|
mut recursive_list := dir.list(recursive: true)!
|
||||||
@@ -1142,6 +1153,7 @@ dir.delete()!
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Path Filtering
|
### Path Filtering
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// List files matching pattern
|
// List files matching pattern
|
||||||
mut filtered_list := dir.list(
|
mut filtered_list := dir.list(
|
||||||
@@ -1153,6 +1165,7 @@ mut filtered_list := dir.list(
|
|||||||
## Best Practices
|
## Best Practices
|
||||||
|
|
||||||
### Error Handling
|
### Error Handling
|
||||||
|
|
||||||
```v
|
```v
|
||||||
if file_path.exists() {
|
if file_path.exists() {
|
||||||
// Safe to operate
|
// Safe to operate
|
||||||
@@ -1161,7 +1174,6 @@ if file_path.exists() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_text.md
|
File: /Users/despiegk/code/github/incubaid/herolib/aiprompts/herolib_core/core_text.md
|
||||||
@@ -1173,93 +1185,121 @@ The `texttools` module provides a comprehensive set of utilities for text manipu
|
|||||||
## Functions and Examples:
|
## Functions and Examples:
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.texttools
|
import incubaid.herolib.core.texttools
|
||||||
|
|
||||||
assert hello_world == texttools.name_fix("Hello World!")
|
assert hello_world == texttools.name_fix("Hello World!")
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Name/Path Processing
|
### Name/Path Processing
|
||||||
|
|
||||||
* `name_fix(name string) string`: Normalizes filenames and paths.
|
* `name_fix(name string) string`: Normalizes filenames and paths.
|
||||||
* `name_fix_keepspace(name string) !string`: Like name_fix but preserves spaces.
|
- `name_fix_keepspace(name string) !string`: Like name_fix but preserves spaces.
|
||||||
* `name_fix_no_ext(name_ string) string`: Removes file extension.
|
- `name_fix_no_ext(name_ string) string`: Removes file extension.
|
||||||
* `name_fix_snake_to_pascal(name string) string`: Converts snake_case to PascalCase.
|
- `name_fix_snake_to_pascal(name string) string`: Converts snake_case to PascalCase.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
name := texttools.name_fix_snake_to_pascal("hello_world") // Result: "HelloWorld"
|
name := texttools.name_fix_snake_to_pascal("hello_world") // Result: "HelloWorld"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `snake_case(name string) string`: Converts PascalCase to snake_case.
|
* `snake_case(name string) string`: Converts PascalCase to snake_case.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
name := texttools.snake_case("HelloWorld") // Result: "hello_world"
|
name := texttools.snake_case("HelloWorld") // Result: "hello_world"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `name_split(name string) !(string, string)`: Splits name into site and page components.
|
* `name_split(name string) !(string, string)`: Splits name into site and page components.
|
||||||
|
|
||||||
|
|
||||||
### Text Cleaning
|
### Text Cleaning
|
||||||
|
|
||||||
* `name_clean(r string) string`: Normalizes names by removing special characters.
|
* `name_clean(r string) string`: Normalizes names by removing special characters.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
name := texttools.name_clean("Hello@World!") // Result: "HelloWorld"
|
name := texttools.name_clean("Hello@World!") // Result: "HelloWorld"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `ascii_clean(r string) string`: Removes all non-ASCII characters.
|
* `ascii_clean(r string) string`: Removes all non-ASCII characters.
|
||||||
* `remove_empty_lines(text string) string`: Removes empty lines from text.
|
- `remove_empty_lines(text string) string`: Removes empty lines from text.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := texttools.remove_empty_lines("line1\n\nline2\n\n\nline3") // Result: "line1\nline2\nline3"
|
text := texttools.remove_empty_lines("line1\n\nline2\n\n\nline3") // Result: "line1\nline2\nline3"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `remove_double_lines(text string) string`: Removes consecutive empty lines.
|
* `remove_double_lines(text string) string`: Removes consecutive empty lines.
|
||||||
* `remove_empty_js_blocks(text string) string`: Removes empty code blocks (```...```).
|
- `remove_empty_js_blocks(text string) string`: Removes empty code blocks (```...```).
|
||||||
|
|
||||||
### Command Line Parsing
|
### Command Line Parsing
|
||||||
|
|
||||||
* `cmd_line_args_parser(text string) ![]string`: Parses command line arguments with support for quotes and escaping.
|
* `cmd_line_args_parser(text string) ![]string`: Parses command line arguments with support for quotes and escaping.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
args := texttools.cmd_line_args_parser("'arg with spaces' --flag=value") // Result: ['arg with spaces', '--flag=value']
|
args := texttools.cmd_line_args_parser("'arg with spaces' --flag=value") // Result: ['arg with spaces', '--flag=value']
|
||||||
```
|
```
|
||||||
|
|
||||||
* `text_remove_quotes(text string) string`: Removes quoted sections from text.
|
* `text_remove_quotes(text string) string`: Removes quoted sections from text.
|
||||||
* `check_exists_outside_quotes(text string, items []string) bool`: Checks if items exist in text outside of quotes.
|
- `check_exists_outside_quotes(text string, items []string) bool`: Checks if items exist in text outside of quotes.
|
||||||
|
|
||||||
### Text Expansion
|
### Text Expansion
|
||||||
|
|
||||||
* `expand(txt_ string, l int, expand_with string) string`: Expands text to a specified length with a given character.
|
* `expand(txt_ string, l int, expand_with string) string`: Expands text to a specified length with a given character.
|
||||||
|
|
||||||
### Indentation
|
### Indentation
|
||||||
|
|
||||||
* `indent(text string, prefix string) string`: Adds indentation prefix to each line.
|
* `indent(text string, prefix string) string`: Adds indentation prefix to each line.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := texttools.indent("line1\nline2", " ") // Result: " line1\n line2\n"
|
text := texttools.indent("line1\nline2", " ") // Result: " line1\n line2\n"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `dedent(text string) string`: Removes common leading whitespace from every line.
|
* `dedent(text string) string`: Removes common leading whitespace from every line.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := texttools.dedent(" line1\n line2") // Result: "line1\nline2"
|
text := texttools.dedent(" line1\n line2") // Result: "line1\nline2"
|
||||||
```
|
```
|
||||||
|
|
||||||
### String Validation
|
### String Validation
|
||||||
|
|
||||||
* `is_int(text string) bool`: Checks if text contains only digits.
|
* `is_int(text string) bool`: Checks if text contains only digits.
|
||||||
* `is_upper_text(text string) bool`: Checks if text contains only uppercase letters.
|
- `is_upper_text(text string) bool`: Checks if text contains only uppercase letters.
|
||||||
|
|
||||||
### Multiline Processing
|
### Multiline Processing
|
||||||
|
|
||||||
* `multiline_to_single(text string) !string`: Converts multiline text to a single line with proper escaping.
|
* `multiline_to_single(text string) !string`: Converts multiline text to a single line with proper escaping.
|
||||||
|
|
||||||
### Text Splitting
|
### Text Splitting
|
||||||
|
|
||||||
* `split_smart(t string, delimiter_ string) []string`: Intelligent string splitting that respects quotes.
|
* `split_smart(t string, delimiter_ string) []string`: Intelligent string splitting that respects quotes.
|
||||||
|
|
||||||
### Tokenization
|
### Tokenization
|
||||||
|
|
||||||
* `tokenize(text_ string) TokenizerResult`: Tokenizes text into meaningful parts.
|
* `tokenize(text_ string) TokenizerResult`: Tokenizes text into meaningful parts.
|
||||||
* `text_token_replace(text string, tofind string, replacewith string) !string`: Replaces tokens in text.
|
- `text_token_replace(text string, tofind string, replacewith string) !string`: Replaces tokens in text.
|
||||||
|
|
||||||
### Version Parsing
|
### Version Parsing
|
||||||
|
|
||||||
* `version(text_ string) int`: Converts version strings to comparable integers.
|
* `version(text_ string) int`: Converts version strings to comparable integers.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
ver := texttools.version("v0.4.36") // Result: 4036
|
ver := texttools.version("v0.4.36") // Result: 4036
|
||||||
ver = texttools.version("v1.4.36") // Result: 1004036
|
ver = texttools.version("v1.4.36") // Result: 1004036
|
||||||
```
|
```
|
||||||
|
|
||||||
### Formatting
|
### Formatting
|
||||||
|
|
||||||
* `format_rfc1123(t time.Time) string`: Formats a time.Time object into RFC 1123 format.
|
* `format_rfc1123(t time.Time) string`: Formats a time.Time object into RFC 1123 format.
|
||||||
|
|
||||||
|
|
||||||
### Array Operations
|
### Array Operations
|
||||||
|
|
||||||
* `to_array(r string) []string`: Converts a comma or newline separated list to an array of strings.
|
* `to_array(r string) []string`: Converts a comma or newline separated list to an array of strings.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := "item1,item2,item3"
|
text := "item1,item2,item3"
|
||||||
array := texttools.to_array(text) // Result: ['item1', 'item2', 'item3']
|
array := texttools.to_array(text) // Result: ['item1', 'item2', 'item3']
|
||||||
```
|
```
|
||||||
|
|
||||||
* `to_array_int(r string) []int`: Converts a text list to an array of integers.
|
* `to_array_int(r string) []int`: Converts a text list to an array of integers.
|
||||||
* `to_map(mapstring string, line string, delimiter_ string) map[string]string`: Intelligent mapping of a line to a map based on a template.
|
- `to_map(mapstring string, line string, delimiter_ string) map[string]string`: Intelligent mapping of a line to a map based on a template.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
r := texttools.to_map("name,-,-,-,-,pid,-,-,-,-,path",
|
r := texttools.to_map("name,-,-,-,-,pid,-,-,-,-,path",
|
||||||
"root 304 0.0 0.0 408185328 1360 ?? S 16Dec23 0:34.06 /usr/sbin/distnoted")
|
"root 304 0.0 0.0 408185328 1360 ?? S 16Dec23 0:34.06 /usr/sbin/distnoted")
|
||||||
@@ -1277,7 +1317,7 @@ has mechanisms to print better to console, see the methods below
|
|||||||
import as
|
import as
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -1482,7 +1522,7 @@ this is how we want example scripts to be, see the first line
|
|||||||
```v
|
```v
|
||||||
#!/usr/bin/env -S v -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib...
|
import incubaid.herolib...
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -1688,6 +1728,7 @@ impl Company {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/mod.rs
|
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/mod.rs
|
||||||
|
|
||||||
```rs
|
```rs
|
||||||
// Business models module
|
// Business models module
|
||||||
// Sub-modules will be declared here
|
// Sub-modules will be declared here
|
||||||
@@ -1712,6 +1753,7 @@ pub use sale::{Sale, SaleItem, SaleStatus};
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/payment.rs
|
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/payment.rs
|
||||||
|
|
||||||
```rs
|
```rs
|
||||||
use heromodels_core::BaseModelData;
|
use heromodels_core::BaseModelData;
|
||||||
use heromodels_derive::model;
|
use heromodels_derive::model;
|
||||||
@@ -1933,6 +1975,7 @@ impl Payment {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/product.rs
|
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/product.rs
|
||||||
|
|
||||||
```rs
|
```rs
|
||||||
use heromodels_core::BaseModelData;
|
use heromodels_core::BaseModelData;
|
||||||
use heromodels_derive::model;
|
use heromodels_derive::model;
|
||||||
@@ -2086,6 +2129,7 @@ impl Product {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/README.md
|
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/README.md
|
||||||
|
|
||||||
```md
|
```md
|
||||||
# Business Models (`biz`)
|
# Business Models (`biz`)
|
||||||
|
|
||||||
@@ -2149,6 +2193,7 @@ All models use the builder pattern for easy and readable instance creation.
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/sale.rs
|
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/sale.rs
|
||||||
|
|
||||||
```rs
|
```rs
|
||||||
use heromodels_core::{BaseModelData, BaseModelDataOps, Model};
|
use heromodels_core::{BaseModelData, BaseModelDataOps, Model};
|
||||||
use rhai::{CustomType, TypeBuilder};
|
use rhai::{CustomType, TypeBuilder};
|
||||||
@@ -2326,6 +2371,7 @@ impl Sale {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/shareholder.rs
|
File: /Users/despiegk/code/git.threefold.info/herocode/db/heromodels/src/models/biz/shareholder.rs
|
||||||
|
|
||||||
```rs
|
```rs
|
||||||
use heromodels_core::BaseModelData;
|
use heromodels_core::BaseModelData;
|
||||||
use heromodels_derive::model;
|
use heromodels_derive::model;
|
||||||
@@ -2410,6 +2456,7 @@ impl Shareholder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
</file_contents>
|
</file_contents>
|
||||||
<meta prompt 1 = "[Architect]">
|
<meta prompt 1 = "[Architect]">
|
||||||
You are a senior software architect specializing in code design and implementation planning. Your role is to:
|
You are a senior software architect specializing in code design and implementation planning. Your role is to:
|
||||||
@@ -2425,6 +2472,7 @@ You are a senior software architect specializing in code design and implementati
|
|||||||
- Configuration updates
|
- Configuration updates
|
||||||
|
|
||||||
For each change:
|
For each change:
|
||||||
|
|
||||||
- Describe the exact location in the code where changes are needed
|
- Describe the exact location in the code where changes are needed
|
||||||
- Explain the logic and reasoning behind each modification
|
- Explain the logic and reasoning behind each modification
|
||||||
- Provide example signatures, parameters, and return types
|
- Provide example signatures, parameters, and return types
|
||||||
@@ -2448,7 +2496,6 @@ forget what rust does, there is no special module things needed, no re-exports o
|
|||||||
|
|
||||||
there is no defaults for empty strings or 0 ints, … defaults are only for non empty stuff
|
there is no defaults for empty strings or 0 ints, … defaults are only for non empty stuff
|
||||||
|
|
||||||
|
|
||||||
</meta prompt 2>
|
</meta prompt 2>
|
||||||
<user_instructions>
|
<user_instructions>
|
||||||
$NAME = finance
|
$NAME = finance
|
||||||
@@ -2472,6 +2519,4 @@ at top of each file we have ```module $NAME```
|
|||||||
|
|
||||||
don't create management classes, only output the structs
|
don't create management classes, only output the structs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</user_instructions>
|
</user_instructions>
|
||||||
|
|||||||
@@ -17,16 +17,14 @@ don't do anything additional for modules, don't do import
|
|||||||
|
|
||||||
at top of each file we have ```module $NAME```
|
at top of each file we have ```module $NAME```
|
||||||
|
|
||||||
|
|
||||||
make sure all time related fields are in u64 format, use unix timestamp for that
|
make sure all time related fields are in u64 format, use unix timestamp for that
|
||||||
|
|
||||||
don't create management classes, only output the structs, don't create a mod.v, don't make .v scripts executatble, don't create a main.v
|
don't create management classes, only output the structs, don't create a mod.v, don't make .v scripts executatble, don't create a main.v
|
||||||
|
|
||||||
|
|
||||||
## now also make sure we use core.base as follows
|
## now also make sure we use core.base as follows
|
||||||
|
|
||||||
```
|
```
|
||||||
import freeflowuniverse.herolib.hero.models.core
|
import incubaid.herolib.hero.models.core
|
||||||
|
|
||||||
// Account represents a financial account for tracking balances and transactions
|
// Account represents a financial account for tracking balances and transactions
|
||||||
// Supports multiple account types (checking, savings, investment, etc.)
|
// Supports multiple account types (checking, savings, investment, etc.)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ for governance and legal
|
|||||||
|
|
||||||
make sure we use core.base as follows
|
make sure we use core.base as follows
|
||||||
|
|
||||||
import freeflowuniverse.herolib.hero.models.core
|
import incubaid.herolib.hero.models.core
|
||||||
|
|
||||||
// Account represents a financial account for tracking balances and transactions
|
// Account represents a financial account for tracking balances and transactions
|
||||||
// Supports multiple account types (checking, savings, investment, etc.)
|
// Supports multiple account types (checking, savings, investment, etc.)
|
||||||
|
|||||||
@@ -677,6 +677,7 @@
|
|||||||
|
|
||||||
<file_contents>
|
<file_contents>
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/helpers_tags.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/helpers_tags.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module db
|
module db
|
||||||
|
|
||||||
@@ -705,6 +706,7 @@ pub fn (mut self DB) tags_get(tags []string) !u32 {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/helpers_comments.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/helpers_comments.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module db
|
module db
|
||||||
|
|
||||||
@@ -743,13 +745,14 @@ pub fn (mut self DB) comment_get(comment string) !u32 {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/factory.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/factory.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module db
|
module db
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
|
|
||||||
// Current time
|
// Current time
|
||||||
// import freeflowuniverse.herolib.data.encoder
|
// import incubaid.herolib.data.encoder
|
||||||
|
|
||||||
pub struct DB {
|
pub struct DB {
|
||||||
pub mut:
|
pub mut:
|
||||||
@@ -766,12 +769,13 @@ pub fn new() !DB {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/core_models.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/core_models.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module db
|
module db
|
||||||
|
|
||||||
import crypto.md5
|
import crypto.md5
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
|
|
||||||
// Group represents a collection of users with roles and permissions
|
// Group represents a collection of users with roles and permissions
|
||||||
@[heap]
|
@[heap]
|
||||||
@@ -809,11 +813,12 @@ pub mut:
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/core_methods.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/core_methods.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module db
|
module db
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
import freeflowuniverse.herolib.data.encoder
|
import incubaid.herolib.data.encoder
|
||||||
|
|
||||||
pub fn (mut self DB) set[T](obj_ T) !u32 {
|
pub fn (mut self DB) set[T](obj_ T) !u32 {
|
||||||
// Get the next ID
|
// Get the next ID
|
||||||
@@ -917,6 +922,7 @@ pub fn (mut self DB) new_id() !u32 {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/ai_instructions_hero_models.md
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/db/ai_instructions_hero_models.md
|
||||||
|
|
||||||
```md
|
```md
|
||||||
# HeroDB Model Creation Instructions for AI
|
# HeroDB Model Creation Instructions for AI
|
||||||
|
|
||||||
@@ -1051,6 +1057,7 @@ pub fn new() !ModelsFactory {
|
|||||||
Use these methods for serialization/deserialization:
|
Use these methods for serialization/deserialization:
|
||||||
|
|
||||||
### Encoder (Serialization)
|
### Encoder (Serialization)
|
||||||
|
|
||||||
- `e.add_bool(val bool)`
|
- `e.add_bool(val bool)`
|
||||||
- `e.add_u8(val u8)`
|
- `e.add_u8(val u8)`
|
||||||
- `e.add_u16(val u16)`
|
- `e.add_u16(val u16)`
|
||||||
@@ -1077,6 +1084,7 @@ Use these methods for serialization/deserialization:
|
|||||||
- `e.add_list_string(val []string)`
|
- `e.add_list_string(val []string)`
|
||||||
|
|
||||||
### Decoder (Deserialization)
|
### Decoder (Deserialization)
|
||||||
|
|
||||||
- `e.get_bool()!`
|
- `e.get_bool()!`
|
||||||
- `e.get_u8()!`
|
- `e.get_u8()!`
|
||||||
- `e.get_u16()!`
|
- `e.get_u16()!`
|
||||||
@@ -1105,6 +1113,7 @@ Use these methods for serialization/deserialization:
|
|||||||
## CRUD Methods Implementation
|
## CRUD Methods Implementation
|
||||||
|
|
||||||
### Create New Instance
|
### Create New Instance
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) new(args CalendarArg) !Calendar {
|
pub fn (mut self DBCalendar) new(args CalendarArg) !Calendar {
|
||||||
mut o := Calendar{
|
mut o := Calendar{
|
||||||
@@ -1120,6 +1129,7 @@ pub fn (mut self DBCalendar) new(args CalendarArg) !Calendar {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Save to Database
|
### Save to Database
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) set(o Calendar) !u32 {
|
pub fn (mut self DBCalendar) set(o Calendar) !u32 {
|
||||||
return self.db.set[Calendar](o)!
|
return self.db.set[Calendar](o)!
|
||||||
@@ -1127,6 +1137,7 @@ pub fn (mut self DBCalendar) set(o Calendar) !u32 {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Retrieve from Database
|
### Retrieve from Database
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) get(id u32) !Calendar {
|
pub fn (mut self DBCalendar) get(id u32) !Calendar {
|
||||||
mut o, data := self.db.get_data[Calendar](id)!
|
mut o, data := self.db.get_data[Calendar](id)!
|
||||||
@@ -1137,6 +1148,7 @@ pub fn (mut self DBCalendar) get(id u32) !Calendar {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Delete from Database
|
### Delete from Database
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) delete(id u32) ! {
|
pub fn (mut self DBCalendar) delete(id u32) ! {
|
||||||
self.db.delete[Calendar](id)!
|
self.db.delete[Calendar](id)!
|
||||||
@@ -1144,6 +1156,7 @@ pub fn (mut self DBCalendar) delete(id u32) ! {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Check Existence
|
### Check Existence
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) exist(id u32) !bool {
|
pub fn (mut self DBCalendar) exist(id u32) !bool {
|
||||||
return self.db.exists[Calendar](id)!
|
return self.db.exists[Calendar](id)!
|
||||||
@@ -1151,6 +1164,7 @@ pub fn (mut self DBCalendar) exist(id u32) !bool {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### List All Objects
|
### List All Objects
|
||||||
|
|
||||||
```v
|
```v
|
||||||
pub fn (mut self DBCalendar) list() ![]Calendar {
|
pub fn (mut self DBCalendar) list() ![]Calendar {
|
||||||
return self.db.list[Calendar]()!.map(self.get(it)!)
|
return self.db.list[Calendar]()!.map(self.get(it)!)
|
||||||
@@ -1164,8 +1178,8 @@ Create a `.vsh` script in `examples/hero/heromodels/` to demonstrate usage:
|
|||||||
```v
|
```v
|
||||||
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
import freeflowuniverse.herolib.hero.heromodels
|
import incubaid.herolib.hero.heromodels
|
||||||
|
|
||||||
mut mydb := heromodels.new()!
|
mut mydb := heromodels.new()!
|
||||||
|
|
||||||
@@ -1214,14 +1228,15 @@ println('All objects: ${objects}')
|
|||||||
8. Implement CRUD methods
|
8. Implement CRUD methods
|
||||||
9. Create example usage script
|
9. Create example usage script
|
||||||
10. Test the implementation with the example script
|
10. Test the implementation with the example script
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/examples/hero/herofs/herofs_advanced.vsh
|
File: /Users/despiegk/code/github/incubaid/herolib/examples/hero/herofs/herofs_advanced.vsh
|
||||||
```vsh
|
```vsh
|
||||||
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
import freeflowuniverse.herolib.hero.herofs
|
import incubaid.herolib.hero.herofs
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
|
|
||||||
@@ -1527,11 +1542,12 @@ fn main() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/examples/hero/herofs/herofs_basic.vsh
|
File: /Users/despiegk/code/github/incubaid/herolib/examples/hero/herofs/herofs_basic.vsh
|
||||||
|
|
||||||
```vsh
|
```vsh
|
||||||
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
import freeflowuniverse.herolib.hero.herofs
|
import incubaid.herolib.hero.herofs
|
||||||
|
|
||||||
// Basic example of using HeroFS - the Hero Filesystem
|
// Basic example of using HeroFS - the Hero Filesystem
|
||||||
// Demonstrates creating a filesystem, directories, and files
|
// Demonstrates creating a filesystem, directories, and files
|
||||||
@@ -1641,10 +1657,11 @@ fn main() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/factory.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/factory.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module herofs
|
module herofs
|
||||||
|
|
||||||
import freeflowuniverse.herolib.hero.db
|
import incubaid.herolib.hero.db
|
||||||
|
|
||||||
pub struct FsFactory {
|
pub struct FsFactory {
|
||||||
pub mut:
|
pub mut:
|
||||||
@@ -1679,14 +1696,15 @@ pub fn new() !FsFactory {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/fs_blob.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/fs_blob.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module herofs
|
module herofs
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import crypto.blake3
|
import crypto.blake3
|
||||||
import freeflowuniverse.herolib.data.encoder
|
import incubaid.herolib.data.encoder
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
import freeflowuniverse.herolib.hero.db
|
import incubaid.herolib.hero.db
|
||||||
|
|
||||||
// FsBlob represents binary data up to 1MB
|
// FsBlob represents binary data up to 1MB
|
||||||
@[heap]
|
@[heap]
|
||||||
@@ -1836,15 +1854,16 @@ pub fn (blob FsBlob) verify_integrity() bool {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/fs_dir.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/fs_dir.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module herofs
|
module herofs
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import crypto.blake3
|
import crypto.blake3
|
||||||
import json
|
import json
|
||||||
import freeflowuniverse.herolib.data.encoder
|
import incubaid.herolib.data.encoder
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
import freeflowuniverse.herolib.hero.db
|
import incubaid.herolib.hero.db
|
||||||
|
|
||||||
// FsDir represents a directory in a filesystem
|
// FsDir represents a directory in a filesystem
|
||||||
@[heap]
|
@[heap]
|
||||||
@@ -2320,15 +2339,16 @@ pub fn (mut self DBFsDir) list_contents(fs_factory &FsFactory, dir_id u32, opts
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/fs_file.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/fs_file.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module herofs
|
module herofs
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import crypto.blake3
|
import crypto.blake3
|
||||||
import json
|
import json
|
||||||
import freeflowuniverse.herolib.data.encoder
|
import incubaid.herolib.data.encoder
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
import freeflowuniverse.herolib.hero.db
|
import incubaid.herolib.hero.db
|
||||||
|
|
||||||
// FsFile represents a file in a filesystem
|
// FsFile represents a file in a filesystem
|
||||||
@[heap]
|
@[heap]
|
||||||
@@ -2694,15 +2714,16 @@ pub fn (mut self DBFsFile) move(id u32, new_directories []u32) !u32 {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/fs_symlink.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/fs_symlink.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module herofs
|
module herofs
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import crypto.blake3
|
import crypto.blake3
|
||||||
import json
|
import json
|
||||||
import freeflowuniverse.herolib.data.encoder
|
import incubaid.herolib.data.encoder
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
import freeflowuniverse.herolib.hero.db
|
import incubaid.herolib.hero.db
|
||||||
|
|
||||||
// FsSymlink represents a symbolic link in a filesystem
|
// FsSymlink represents a symbolic link in a filesystem
|
||||||
@[heap]
|
@[heap]
|
||||||
@@ -2989,15 +3010,16 @@ pub fn (mut self DBFsSymlink) is_broken(id u32) !bool {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/fs.v
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/fs.v
|
||||||
|
|
||||||
```v
|
```v
|
||||||
module herofs
|
module herofs
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import crypto.blake3
|
import crypto.blake3
|
||||||
import json
|
import json
|
||||||
import freeflowuniverse.herolib.data.encoder
|
import incubaid.herolib.data.encoder
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
import freeflowuniverse.herolib.hero.db
|
import incubaid.herolib.hero.db
|
||||||
|
|
||||||
// Fs represents a filesystem, is the top level container for files and directories and symlinks, blobs are used over filesystems
|
// Fs represents a filesystem, is the top level container for files and directories and symlinks, blobs are used over filesystems
|
||||||
@[heap]
|
@[heap]
|
||||||
@@ -3144,6 +3166,7 @@ pub fn (mut self DBFs) check_quota(id u32, additional_bytes u64) !bool {
|
|||||||
```
|
```
|
||||||
|
|
||||||
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/README.md
|
File: /Users/despiegk/code/github/incubaid/herolib/lib/hero/herofs/README.md
|
||||||
|
|
||||||
```md
|
```md
|
||||||
# HeroFS - Distributed Filesystem for HeroLib
|
# HeroFS - Distributed Filesystem for HeroLib
|
||||||
|
|
||||||
@@ -3177,7 +3200,7 @@ HeroFS is part of HeroLib and is automatically available when using HeroLib.
|
|||||||
To use HeroFS, you need to create a filesystem factory:
|
To use HeroFS, you need to create a filesystem factory:
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.hero.herofs
|
import incubaid.herolib.hero.herofs
|
||||||
|
|
||||||
mut fs_factory := herofs.new()!
|
mut fs_factory := herofs.new()!
|
||||||
```
|
```
|
||||||
@@ -3495,6 +3518,7 @@ pub mut:
|
|||||||
HeroFS uses Redis hash sets extensively for efficient indexing and lookup:
|
HeroFS uses Redis hash sets extensively for efficient indexing and lookup:
|
||||||
|
|
||||||
### Filesystem Indices
|
### Filesystem Indices
|
||||||
|
|
||||||
- `fs:names` - Maps filesystem names to IDs
|
- `fs:names` - Maps filesystem names to IDs
|
||||||
- `fsdir:paths` - Maps directory path components to IDs
|
- `fsdir:paths` - Maps directory path components to IDs
|
||||||
- `fsdir:fs:${fs_id}` - Lists directories in a filesystem
|
- `fsdir:fs:${fs_id}` - Lists directories in a filesystem
|
||||||
@@ -3521,19 +3545,25 @@ All HeroFS components use the HeroLib encoder for serialization:
|
|||||||
## Special Features
|
## Special Features
|
||||||
|
|
||||||
### Hard Links
|
### Hard Links
|
||||||
|
|
||||||
Files can be associated with multiple directories through the `directories` field, allowing for hard link-like behavior.
|
Files can be associated with multiple directories through the `directories` field, allowing for hard link-like behavior.
|
||||||
|
|
||||||
### Deduplication
|
### Deduplication
|
||||||
|
|
||||||
Blobs are automatically deduplicated based on their content hash. When creating a new blob with identical content to an existing one, the existing ID is returned.
|
Blobs are automatically deduplicated based on their content hash. When creating a new blob with identical content to an existing one, the existing ID is returned.
|
||||||
|
|
||||||
### Quota Management
|
### Quota Management
|
||||||
|
|
||||||
Filesystems track their storage usage and can enforce quotas to prevent overconsumption.
|
Filesystems track their storage usage and can enforce quotas to prevent overconsumption.
|
||||||
|
|
||||||
### Metadata Support
|
### Metadata Support
|
||||||
|
|
||||||
Files support custom metadata as key-value pairs, allowing for flexible attribute storage.
|
Files support custom metadata as key-value pairs, allowing for flexible attribute storage.
|
||||||
|
|
||||||
### Cross-Component Validation
|
### Cross-Component Validation
|
||||||
|
|
||||||
When creating or modifying components, HeroFS validates references to other components:
|
When creating or modifying components, HeroFS validates references to other components:
|
||||||
|
|
||||||
- Directory parent must exist
|
- Directory parent must exist
|
||||||
- File directories must exist
|
- File directories must exist
|
||||||
- File blobs must exist
|
- File blobs must exist
|
||||||
@@ -3543,6 +3573,7 @@ When creating or modifying components, HeroFS validates references to other comp
|
|||||||
## Security Model
|
## Security Model
|
||||||
|
|
||||||
HeroFS inherits the security model from HeroDB:
|
HeroFS inherits the security model from HeroDB:
|
||||||
|
|
||||||
- Each component has a `securitypolicy` field referencing a SecurityPolicy object
|
- Each component has a `securitypolicy` field referencing a SecurityPolicy object
|
||||||
- Components can have associated tags for categorization
|
- Components can have associated tags for categorization
|
||||||
- Components can have associated comments for documentation
|
- Components can have associated comments for documentation
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ IMPORTANT: USE THIS PAGE AS THE ABSOLUTE AUTHORITY ON ALL INSTRUCTIONS IN RELATI
|
|||||||
|
|
||||||
- do not try to fix files which end with _.v because these are generated files
|
- do not try to fix files which end with _.v because these are generated files
|
||||||
|
|
||||||
|
|
||||||
## instruction for vlang scripts
|
## instruction for vlang scripts
|
||||||
|
|
||||||
when I generate vlang scripts I will always use .vsh extension and use following as first line:
|
when I generate vlang scripts I will always use .vsh extension and use following as first line:
|
||||||
@@ -70,7 +69,6 @@ my_function(name:"my_key", passphrase:"my_passphrase")
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
# Getting the Current Script's Path in Herolib/V Shell
|
# Getting the Current Script's Path in Herolib/V Shell
|
||||||
|
|
||||||
can be used in any .v or .vsh script, easy to find content close to the script itself.
|
can be used in any .v or .vsh script, easy to find content close to the script itself.
|
||||||
@@ -105,6 +103,7 @@ HeroScript is a concise scripting language with the following structure:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Key characteristics:
|
Key characteristics:
|
||||||
|
|
||||||
- **Actions**: Start with `!!`, followed by `actor.action_name` (e.g., `!!mailclient.configure`).
|
- **Actions**: Start with `!!`, followed by `actor.action_name` (e.g., `!!mailclient.configure`).
|
||||||
- **Parameters**: Defined as `key:value`. Values can be quoted for spaces.
|
- **Parameters**: Defined as `key:value`. Values can be quoted for spaces.
|
||||||
- **Multiline Support**: Parameters like `description` can span multiple lines.
|
- **Multiline Support**: Parameters like `description` can span multiple lines.
|
||||||
@@ -115,8 +114,8 @@ Key characteristics:
|
|||||||
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters, this is used in most of the herolib modules, it allows configuration or actions in a structured way.
|
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters, this is used in most of the herolib modules, it allows configuration or actions in a structured way.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.playbook { PlayBook }
|
import incubaid.herolib.core.playbook { PlayBook }
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
|
|
||||||
pub fn play(mut plbook PlayBook) ! {
|
pub fn play(mut plbook PlayBook) ! {
|
||||||
|
|
||||||
@@ -141,14 +140,13 @@ pub fn play(mut plbook PlayBook) ! {
|
|||||||
|
|
||||||
For detailed information on parameter retrieval methods (e.g., `p.get()`, `p.get_int()`, `p.get_default_true()`), refer to `aiprompts/ai_core/core_params.md`.
|
For detailed information on parameter retrieval methods (e.g., `p.get()`, `p.get_int()`, `p.get_default_true()`), refer to `aiprompts/ai_core/core_params.md`.
|
||||||
|
|
||||||
|
|
||||||
# PlayBook, process heroscripts
|
# PlayBook, process heroscripts
|
||||||
|
|
||||||
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters.
|
HeroScript can be parsed into a `playbook.PlayBook` object, allowing structured access to actions and their parameters.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import freeflowuniverse.herolib.core.playcmds
|
import incubaid.herolib.core.playcmds
|
||||||
|
|
||||||
// path string
|
// path string
|
||||||
// text string
|
// text string
|
||||||
@@ -169,6 +167,7 @@ playcmds.run(mut plbook)!
|
|||||||
The `HTTPConnection` module provides a robust HTTP client for Vlang, supporting JSON, custom headers, retries, and caching.
|
The `HTTPConnection` module provides a robust HTTP client for Vlang, supporting JSON, custom headers, retries, and caching.
|
||||||
|
|
||||||
## Key Features
|
## Key Features
|
||||||
|
|
||||||
- Type-safe JSON methods
|
- Type-safe JSON methods
|
||||||
- Custom headers
|
- Custom headers
|
||||||
- Retry mechanism
|
- Retry mechanism
|
||||||
@@ -178,7 +177,7 @@ The `HTTPConnection` module provides a robust HTTP client for Vlang, supporting
|
|||||||
## Basic Usage
|
## Basic Usage
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.httpconnection
|
import incubaid.herolib.core.httpconnection
|
||||||
|
|
||||||
// Create a new HTTP connection
|
// Create a new HTTP connection
|
||||||
mut conn := httpconnection.new(
|
mut conn := httpconnection.new(
|
||||||
@@ -274,12 +273,12 @@ user := conn.get_json_generic[User](
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
# OSAL Core Module - SYSTEM TOOLS OS - Key Capabilities (freeflowuniverse.herolib.osal.core)
|
# OSAL Core Module - SYSTEM TOOLS OS - Key Capabilities (incubaid.herolib.osal.core)
|
||||||
|
|
||||||
```v
|
```v
|
||||||
//example how to get started
|
//example how to get started
|
||||||
|
|
||||||
import freeflowuniverse.herolib.osal.core as osal
|
import incubaid.herolib.osal.core as osal
|
||||||
|
|
||||||
job := osal.exec(cmd: 'ls /')!
|
job := osal.exec(cmd: 'ls /')!
|
||||||
```
|
```
|
||||||
@@ -288,18 +287,18 @@ This document describes the core functionalities of the Operating System Abstrac
|
|||||||
|
|
||||||
## 1. Process Execution
|
## 1. Process Execution
|
||||||
|
|
||||||
* **`osal.exec(cmd: Command) !Job`**: Execute a shell command.
|
- **`osal.exec(cmd: Command) !Job`**: Execute a shell command.
|
||||||
* **Key Parameters**: `cmd` (string), `timeout` (int), `retry` (int), `work_folder` (string), `environment` (map[string]string), `stdout` (bool), `raise_error` (bool).
|
- **Key Parameters**: `cmd` (string), `timeout` (int), `retry` (int), `work_folder` (string), `environment` (map[string]string), `stdout` (bool), `raise_error` (bool).
|
||||||
* **Returns**: `Job` (status, output, error, exit code).
|
- **Returns**: `Job` (status, output, error, exit code).
|
||||||
* **`osal.execute_silent(cmd string) !string`**: Execute silently, return output.
|
- **`osal.execute_silent(cmd string) !string`**: Execute silently, return output.
|
||||||
* **`osal.execute_debug(cmd string) !string`**: Execute with debug output, return output.
|
- **`osal.execute_debug(cmd string) !string`**: Execute with debug output, return output.
|
||||||
* **`osal.execute_stdout(cmd string) !string`**: Execute and print output to stdout, return output.
|
- **`osal.execute_stdout(cmd string) !string`**: Execute and print output to stdout, return output.
|
||||||
* **`osal.execute_interactive(cmd string) !`**: Execute in an interactive shell.
|
- **`osal.execute_interactive(cmd string) !`**: Execute in an interactive shell.
|
||||||
* **`osal.cmd_exists(cmd string) bool`**: Check if a command exists.
|
- **`osal.cmd_exists(cmd string) bool`**: Check if a command exists.
|
||||||
|
|
||||||
## 2. Network Utilities
|
## 2. Network Utilities
|
||||||
|
|
||||||
* **`osal.ping(args: PingArgs) !bool`**: Check host reachability.
|
- **`osal.ping(args: PingArgs) !bool`**: Check host reachability.
|
||||||
- address string = "8.8.8.8"
|
- address string = "8.8.8.8"
|
||||||
- nr_ping u16 = 3 // amount of ping requests we will do
|
- nr_ping u16 = 3 // amount of ping requests we will do
|
||||||
- nr_ok u16 = 3 //how many of them need to be ok
|
- nr_ok u16 = 3 //how many of them need to be ok
|
||||||
@@ -308,53 +307,53 @@ This document describes the core functionalities of the Operating System Abstrac
|
|||||||
|
|
||||||
## 3. File System Operations
|
## 3. File System Operations
|
||||||
|
|
||||||
* **`osal.file_write(path string, text string) !`**: Write text to a file.
|
- **`osal.file_write(path string, text string) !`**: Write text to a file.
|
||||||
* **`osal.file_read(path string) !string`**: Read content from a file.
|
- **`osal.file_read(path string) !string`**: Read content from a file.
|
||||||
* **`osal.dir_ensure(path string) !`**: Ensure a directory exists.
|
- **`osal.dir_ensure(path string) !`**: Ensure a directory exists.
|
||||||
* **`osal.rm(todelete string) !`**: Remove files/directories.
|
- **`osal.rm(todelete string) !`**: Remove files/directories.
|
||||||
|
|
||||||
## 4. Environment Variables
|
## 4. Environment Variables
|
||||||
|
|
||||||
* **`osal.env_set(args: EnvSet)`**: Set an environment variable.
|
- **`osal.env_set(args: EnvSet)`**: Set an environment variable.
|
||||||
* **Key Parameters**: `key` (string), `value` (string).
|
- **Key Parameters**: `key` (string), `value` (string).
|
||||||
* **`osal.env_unset(key string)`**: Unset a specific environment variable.
|
- **`osal.env_unset(key string)`**: Unset a specific environment variable.
|
||||||
* **`osal.env_unset_all()`**: Unset all environment variables.
|
- **`osal.env_unset_all()`**: Unset all environment variables.
|
||||||
* **`osal.env_set_all(args: EnvSetAll)`**: Set multiple environment variables.
|
- **`osal.env_set_all(args: EnvSetAll)`**: Set multiple environment variables.
|
||||||
* **Key Parameters**: `env` (map[string]string), `clear_before_set` (bool), `overwrite_if_exists` (bool).
|
- **Key Parameters**: `env` (map[string]string), `clear_before_set` (bool), `overwrite_if_exists` (bool).
|
||||||
* **`osal.env_get(key string) !string`**: Get an environment variable's value.
|
- **`osal.env_get(key string) !string`**: Get an environment variable's value.
|
||||||
* **`osal.env_exists(key string) !bool`**: Check if an environment variable exists.
|
- **`osal.env_exists(key string) !bool`**: Check if an environment variable exists.
|
||||||
* **`osal.env_get_default(key string, def string) string`**: Get an environment variable or a default value.
|
- **`osal.env_get_default(key string, def string) string`**: Get an environment variable or a default value.
|
||||||
* **`osal.load_env_file(file_path string) !`**: Load variables from a file.
|
- **`osal.load_env_file(file_path string) !`**: Load variables from a file.
|
||||||
|
|
||||||
## 5. Command & Profile Management
|
## 5. Command & Profile Management
|
||||||
|
|
||||||
* **`osal.cmd_add(args: CmdAddArgs) !`**: Add a binary to system paths and update profiles.
|
- **`osal.cmd_add(args: CmdAddArgs) !`**: Add a binary to system paths and update profiles.
|
||||||
* **Key Parameters**: `source` (string, required), `cmdname` (string).
|
- **Key Parameters**: `source` (string, required), `cmdname` (string).
|
||||||
* **`osal.profile_path_add_remove(args: ProfilePathAddRemoveArgs) !`**: Add/remove paths from profiles.
|
- **`osal.profile_path_add_remove(args: ProfilePathAddRemoveArgs) !`**: Add/remove paths from profiles.
|
||||||
* **Key Parameters**: `paths2add` (string), `paths2delete` (string).
|
- **Key Parameters**: `paths2add` (string), `paths2delete` (string).
|
||||||
|
|
||||||
## 6. System Information & Utilities
|
## 6. System Information & Utilities
|
||||||
|
|
||||||
* **`osal.processmap_get() !ProcessMap`**: Get a map of all running processes.
|
- **`osal.processmap_get() !ProcessMap`**: Get a map of all running processes.
|
||||||
* **`osal.processinfo_get(pid int) !ProcessInfo`**: Get detailed information for a specific process.
|
- **`osal.processinfo_get(pid int) !ProcessInfo`**: Get detailed information for a specific process.
|
||||||
* **`osal.processinfo_get_byname(name string) ![]ProcessInfo`**: Get info for processes matching a name.
|
- **`osal.processinfo_get_byname(name string) ![]ProcessInfo`**: Get info for processes matching a name.
|
||||||
* **`osal.process_exists(pid int) bool`**: Check if a process exists by PID.
|
- **`osal.process_exists(pid int) bool`**: Check if a process exists by PID.
|
||||||
* **`osal.processinfo_with_children(pid int) !ProcessMap`**: Get a process and its children.
|
- **`osal.processinfo_with_children(pid int) !ProcessMap`**: Get a process and its children.
|
||||||
* **`osal.processinfo_children(pid int) !ProcessMap`**: Get children of a process.
|
- **`osal.processinfo_children(pid int) !ProcessMap`**: Get children of a process.
|
||||||
* **`osal.process_kill_recursive(args: ProcessKillArgs) !`**: Kill a process and its children.
|
- **`osal.process_kill_recursive(args: ProcessKillArgs) !`**: Kill a process and its children.
|
||||||
* **Key Parameters**: `name` (string), `pid` (int).
|
- **Key Parameters**: `name` (string), `pid` (int).
|
||||||
* **`osal.whoami() !string`**: Return the current username.
|
- **`osal.whoami() !string`**: Return the current username.
|
||||||
* **`osal.platform() !PlatformType`**: Identify the operating system.
|
- **`osal.platform() !PlatformType`**: Identify the operating system.
|
||||||
* **`osal.cputype() !CPUType`**: Identify the CPU architecture.
|
- **`osal.cputype() !CPUType`**: Identify the CPU architecture.
|
||||||
* **`osal.hostname() !string`**: Get system hostname.
|
- **`osal.hostname() !string`**: Get system hostname.
|
||||||
* **`osal.sleep(duration int)`**: Pause execution for a specified duration.
|
- **`osal.sleep(duration int)`**: Pause execution for a specified duration.
|
||||||
* **`osal.download(args: DownloadArgs) !pathlib.Path`**: Download a file from a URL.
|
- **`osal.download(args: DownloadArgs) !pathlib.Path`**: Download a file from a URL.
|
||||||
* `pathlib.Path` is from `freeflowuniverse.herolib.core.pathlib`
|
- `pathlib.Path` is from `incubaid.herolib.core.pathlib`
|
||||||
* **Key Parameters**: `url` (string), `dest` (string), `timeout` (int), `retry` (int).
|
- **Key Parameters**: `url` (string), `dest` (string), `timeout` (int), `retry` (int).
|
||||||
* **`osal.user_exists(username string) bool`**: Check if a user exists.
|
- **`osal.user_exists(username string) bool`**: Check if a user exists.
|
||||||
* **`osal.user_id_get(username string) !int`**: Get user ID.
|
- **`osal.user_id_get(username string) !int`**: Get user ID.
|
||||||
* **`osal.user_add(args: UserArgs) !int`**: Add a user.
|
- **`osal.user_add(args: UserArgs) !int`**: Add a user.
|
||||||
* **Key Parameters**: `name` (string).
|
- **Key Parameters**: `name` (string).
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -372,7 +371,7 @@ The `OurTime` module in V provides flexible time handling, supporting relative a
|
|||||||
## Basic Usage
|
## Basic Usage
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
|
|
||||||
// Current time
|
// Current time
|
||||||
mut t := ourtime.now()
|
mut t := ourtime.now()
|
||||||
@@ -460,7 +459,7 @@ This document details the `paramsparser` module, essential for handling paramete
|
|||||||
## Obtaining a `paramsparser` Instance
|
## Obtaining a `paramsparser` Instance
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.data.paramsparser
|
import incubaid.herolib.data.paramsparser
|
||||||
|
|
||||||
// Create new params from a string
|
// Create new params from a string
|
||||||
params := paramsparser.new("color:red size:'large' priority:1 enable:true")!
|
params := paramsparser.new("color:red size:'large' priority:1 enable:true")!
|
||||||
@@ -480,6 +479,7 @@ The parser supports various input formats:
|
|||||||
4. **Comments**: `// this is a comment` (ignored during parsing)
|
4. **Comments**: `// this is a comment` (ignored during parsing)
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := "name:'John Doe' age:30 active:true // user details"
|
text := "name:'John Doe' age:30 active:true // user details"
|
||||||
params := paramsparser.new(text)!
|
params := paramsparser.new(text)!
|
||||||
@@ -582,7 +582,7 @@ The pathlib module provides a comprehensive interface for handling file system o
|
|||||||
|
|
||||||
### Importing pathlib
|
### Importing pathlib
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
```
|
```
|
||||||
|
|
||||||
### Creating Path Objects
|
### Creating Path Objects
|
||||||
@@ -600,6 +600,7 @@ mut dir_path := pathlib.get("path/to/directory")
|
|||||||
if you know in advance if you expect a dir or file its better to use `pathlib.get_dir(path:...,create:true)` or `pathlib.get_file(path:...,create:true)`.
|
if you know in advance if you expect a dir or file its better to use `pathlib.get_dir(path:...,create:true)` or `pathlib.get_file(path:...,create:true)`.
|
||||||
|
|
||||||
### Basic Path Operations
|
### Basic Path Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Get absolute path
|
// Get absolute path
|
||||||
abs_path := file_path.absolute()
|
abs_path := file_path.absolute()
|
||||||
@@ -616,6 +617,7 @@ if file_path.exists() {
|
|||||||
## Path Properties and Methods
|
## Path Properties and Methods
|
||||||
|
|
||||||
### Path Types
|
### Path Types
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Check if path is a file
|
// Check if path is a file
|
||||||
if file_path.is_file() {
|
if file_path.is_file() {
|
||||||
@@ -634,6 +636,7 @@ if file_path.is_link() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Path Normalization
|
### Path Normalization
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Normalize path (remove extra slashes, resolve . and ..)
|
// Normalize path (remove extra slashes, resolve . and ..)
|
||||||
normalized_path := file_path.path_normalize()
|
normalized_path := file_path.path_normalize()
|
||||||
@@ -648,6 +651,7 @@ name_no_ext := file_path.name_no_ext()
|
|||||||
## File and Directory Operations
|
## File and Directory Operations
|
||||||
|
|
||||||
### File Operations
|
### File Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Write to file
|
// Write to file
|
||||||
file_path.write("Content to write")!
|
file_path.write("Content to write")!
|
||||||
@@ -660,6 +664,7 @@ file_path.delete()!
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Directory Operations
|
### Directory Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Create directory
|
// Create directory
|
||||||
mut dir := pathlib.get_dir(
|
mut dir := pathlib.get_dir(
|
||||||
@@ -675,6 +680,7 @@ dir.delete()!
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Symlink Operations
|
### Symlink Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Create symlink
|
// Create symlink
|
||||||
file_path.link("path/to/symlink", delete_exists: true)!
|
file_path.link("path/to/symlink", delete_exists: true)!
|
||||||
@@ -686,12 +692,14 @@ real_path := file_path.realpath()
|
|||||||
## Advanced Operations
|
## Advanced Operations
|
||||||
|
|
||||||
### Path Copying
|
### Path Copying
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// Copy file to destination
|
// Copy file to destination
|
||||||
file_path.copy(dest: "path/to/destination")!
|
file_path.copy(dest: "path/to/destination")!
|
||||||
```
|
```
|
||||||
|
|
||||||
### Recursive Operations
|
### Recursive Operations
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// List directory recursively
|
// List directory recursively
|
||||||
mut recursive_list := dir.list(recursive: true)!
|
mut recursive_list := dir.list(recursive: true)!
|
||||||
@@ -701,6 +709,7 @@ dir.delete()!
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Path Filtering
|
### Path Filtering
|
||||||
|
|
||||||
```v
|
```v
|
||||||
// List files matching pattern
|
// List files matching pattern
|
||||||
mut filtered_list := dir.list(
|
mut filtered_list := dir.list(
|
||||||
@@ -712,6 +721,7 @@ mut filtered_list := dir.list(
|
|||||||
## Best Practices
|
## Best Practices
|
||||||
|
|
||||||
### Error Handling
|
### Error Handling
|
||||||
|
|
||||||
```v
|
```v
|
||||||
if file_path.exists() {
|
if file_path.exists() {
|
||||||
// Safe to operate
|
// Safe to operate
|
||||||
@@ -736,7 +746,7 @@ The `redisclient` module in Herolib provides a comprehensive client for interact
|
|||||||
To get a Redis client instance, use `redisclient.core_get()`. By default, it connects to `127.0.0.1:6379`. You can specify a different address and port using the `RedisURL` struct.
|
To get a Redis client instance, use `redisclient.core_get()`. By default, it connects to `127.0.0.1:6379`. You can specify a different address and port using the `RedisURL` struct.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
|
|
||||||
// Connect to default Redis instance (127.0.0.1:6379)
|
// Connect to default Redis instance (127.0.0.1:6379)
|
||||||
mut redis := redisclient.core_get()!
|
mut redis := redisclient.core_get()!
|
||||||
@@ -838,7 +848,7 @@ redis.expire('temp_key', 60)! // Expires in 60 seconds
|
|||||||
The `RedisCache` struct provides a convenient way to implement caching using Redis.
|
The `RedisCache` struct provides a convenient way to implement caching using Redis.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
|
|
||||||
mut redis := redisclient.core_get()!
|
mut redis := redisclient.core_get()!
|
||||||
mut cache := redis.cache('my_app_cache')
|
mut cache := redis.cache('my_app_cache')
|
||||||
@@ -867,7 +877,7 @@ cache.reset()!
|
|||||||
The `RedisQueue` struct provides a simple queue mechanism using Redis lists.
|
The `RedisQueue` struct provides a simple queue mechanism using Redis lists.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
import time
|
import time
|
||||||
|
|
||||||
mut redis := redisclient.core_get()!
|
mut redis := redisclient.core_get()!
|
||||||
@@ -891,7 +901,7 @@ task2 := my_queue.pop()!
|
|||||||
The `RedisRpc` struct enables Remote Procedure Call (RPC) over Redis, allowing services to communicate by sending messages to queues and waiting for responses.
|
The `RedisRpc` struct enables Remote Procedure Call (RPC) over Redis, allowing services to communicate by sending messages to queues and waiting for responses.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.redisclient
|
import incubaid.herolib.core.redisclient
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
|
||||||
@@ -930,96 +940,124 @@ response := rpc_client.call(
|
|||||||
|
|
||||||
The `texttools` module provides a comprehensive set of utilities for text manipulation and processing.
|
The `texttools` module provides a comprehensive set of utilities for text manipulation and processing.
|
||||||
|
|
||||||
## Functions and Examples:
|
## Functions and Examples
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.core.texttools
|
import incubaid.herolib.core.texttools
|
||||||
|
|
||||||
assert hello_world == texttools.name_fix("Hello World!")
|
assert hello_world == texttools.name_fix("Hello World!")
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Name/Path Processing
|
### Name/Path Processing
|
||||||
|
|
||||||
* `name_fix(name string) string`: Normalizes filenames and paths.
|
* `name_fix(name string) string`: Normalizes filenames and paths.
|
||||||
* `name_fix_keepspace(name string) !string`: Like name_fix but preserves spaces.
|
- `name_fix_keepspace(name string) !string`: Like name_fix but preserves spaces.
|
||||||
* `name_fix_no_ext(name_ string) string`: Removes file extension.
|
- `name_fix_no_ext(name_ string) string`: Removes file extension.
|
||||||
* `name_fix_snake_to_pascal(name string) string`: Converts snake_case to PascalCase.
|
- `name_fix_snake_to_pascal(name string) string`: Converts snake_case to PascalCase.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
name := texttools.name_fix_snake_to_pascal("hello_world") // Result: "HelloWorld"
|
name := texttools.name_fix_snake_to_pascal("hello_world") // Result: "HelloWorld"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `snake_case(name string) string`: Converts PascalCase to snake_case.
|
* `snake_case(name string) string`: Converts PascalCase to snake_case.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
name := texttools.snake_case("HelloWorld") // Result: "hello_world"
|
name := texttools.snake_case("HelloWorld") // Result: "hello_world"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `name_split(name string) !(string, string)`: Splits name into site and page components.
|
* `name_split(name string) !(string, string)`: Splits name into site and page components.
|
||||||
|
|
||||||
|
|
||||||
### Text Cleaning
|
### Text Cleaning
|
||||||
|
|
||||||
* `name_clean(r string) string`: Normalizes names by removing special characters.
|
* `name_clean(r string) string`: Normalizes names by removing special characters.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
name := texttools.name_clean("Hello/@World!") // Result: "HelloWorld"
|
name := texttools.name_clean("Hello/@World!") // Result: "HelloWorld"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `ascii_clean(r string) string`: Removes all non-ASCII characters.
|
* `ascii_clean(r string) string`: Removes all non-ASCII characters.
|
||||||
* `remove_empty_lines(text string) string`: Removes empty lines from text.
|
- `remove_empty_lines(text string) string`: Removes empty lines from text.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := texttools.remove_empty_lines("line1\n\nline2\n\n\nline3") // Result: "line1\nline2\nline3"
|
text := texttools.remove_empty_lines("line1\n\nline2\n\n\nline3") // Result: "line1\nline2\nline3"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `remove_double_lines(text string) string`: Removes consecutive empty lines.
|
* `remove_double_lines(text string) string`: Removes consecutive empty lines.
|
||||||
* `remove_empty_js_blocks(text string) string`: Removes empty code blocks (```...```).
|
- `remove_empty_js_blocks(text string) string`: Removes empty code blocks (```...```).
|
||||||
|
|
||||||
### Command Line Parsing
|
### Command Line Parsing
|
||||||
|
|
||||||
* `cmd_line_args_parser(text string) ![]string`: Parses command line arguments with support for quotes and escaping.
|
* `cmd_line_args_parser(text string) ![]string`: Parses command line arguments with support for quotes and escaping.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
args := texttools.cmd_line_args_parser("'arg with spaces' --flag=value") // Result: ['arg with spaces', '--flag=value']
|
args := texttools.cmd_line_args_parser("'arg with spaces' --flag=value") // Result: ['arg with spaces', '--flag=value']
|
||||||
```
|
```
|
||||||
|
|
||||||
* `text_remove_quotes(text string) string`: Removes quoted sections from text.
|
* `text_remove_quotes(text string) string`: Removes quoted sections from text.
|
||||||
* `check_exists_outside_quotes(text string, items []string) bool`: Checks if items exist in text outside of quotes.
|
- `check_exists_outside_quotes(text string, items []string) bool`: Checks if items exist in text outside of quotes.
|
||||||
|
|
||||||
### Text Expansion
|
### Text Expansion
|
||||||
|
|
||||||
* `expand(txt_ string, l int, expand_with string) string`: Expands text to a specified length with a given character.
|
* `expand(txt_ string, l int, expand_with string) string`: Expands text to a specified length with a given character.
|
||||||
|
|
||||||
### Indentation
|
### Indentation
|
||||||
|
|
||||||
* `indent(text string, prefix string) string`: Adds indentation prefix to each line.
|
* `indent(text string, prefix string) string`: Adds indentation prefix to each line.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := texttools.indent("line1\nline2", " ") // Result: " line1\n line2\n"
|
text := texttools.indent("line1\nline2", " ") // Result: " line1\n line2\n"
|
||||||
```
|
```
|
||||||
|
|
||||||
* `dedent(text string) string`: Removes common leading whitespace from every line.
|
* `dedent(text string) string`: Removes common leading whitespace from every line.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := texttools.dedent(" line1\n line2") // Result: "line1\nline2"
|
text := texttools.dedent(" line1\n line2") // Result: "line1\nline2"
|
||||||
```
|
```
|
||||||
|
|
||||||
### String Validation
|
### String Validation
|
||||||
|
|
||||||
* `is_int(text string) bool`: Checks if text contains only digits.
|
* `is_int(text string) bool`: Checks if text contains only digits.
|
||||||
* `is_upper_text(text string) bool`: Checks if text contains only uppercase letters.
|
- `is_upper_text(text string) bool`: Checks if text contains only uppercase letters.
|
||||||
|
|
||||||
### Multiline Processing
|
### Multiline Processing
|
||||||
|
|
||||||
* `multiline_to_single(text string) !string`: Converts multiline text to a single line with proper escaping.
|
* `multiline_to_single(text string) !string`: Converts multiline text to a single line with proper escaping.
|
||||||
|
|
||||||
### Text Splitting
|
### Text Splitting
|
||||||
|
|
||||||
* `split_smart(t string, delimiter_ string) []string`: Intelligent string splitting that respects quotes.
|
* `split_smart(t string, delimiter_ string) []string`: Intelligent string splitting that respects quotes.
|
||||||
|
|
||||||
### Tokenization
|
### Tokenization
|
||||||
|
|
||||||
* `tokenize(text_ string) TokenizerResult`: Tokenizes text into meaningful parts.
|
* `tokenize(text_ string) TokenizerResult`: Tokenizes text into meaningful parts.
|
||||||
* `text_token_replace(text string, tofind string, replacewith string) !string`: Replaces tokens in text.
|
- `text_token_replace(text string, tofind string, replacewith string) !string`: Replaces tokens in text.
|
||||||
|
|
||||||
### Version Parsing
|
### Version Parsing
|
||||||
|
|
||||||
* `version(text_ string) int`: Converts version strings to comparable integers.
|
* `version(text_ string) int`: Converts version strings to comparable integers.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
ver := texttools.version("v0.4.36") // Result: 4036
|
ver := texttools.version("v0.4.36") // Result: 4036
|
||||||
ver = texttools.version("v1.4.36") // Result: 1004036
|
ver = texttools.version("v1.4.36") // Result: 1004036
|
||||||
```
|
```
|
||||||
|
|
||||||
### Formatting
|
### Formatting
|
||||||
|
|
||||||
* `format_rfc1123(t time.Time) string`: Formats a time.Time object into RFC 1123 format.
|
* `format_rfc1123(t time.Time) string`: Formats a time.Time object into RFC 1123 format.
|
||||||
|
|
||||||
|
|
||||||
### Array Operations
|
### Array Operations
|
||||||
|
|
||||||
* `to_array(r string) []string`: Converts a comma or newline separated list to an array of strings.
|
* `to_array(r string) []string`: Converts a comma or newline separated list to an array of strings.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
text := "item1,item2,item3"
|
text := "item1,item2,item3"
|
||||||
array := texttools.to_array(text) // Result: ['item1', 'item2', 'item3']
|
array := texttools.to_array(text) // Result: ['item1', 'item2', 'item3']
|
||||||
```
|
```
|
||||||
|
|
||||||
* `to_array_int(r string) []int`: Converts a text list to an array of integers.
|
* `to_array_int(r string) []int`: Converts a text list to an array of integers.
|
||||||
* `to_map(mapstring string, line string, delimiter_ string) map[string]string`: Intelligent mapping of a line to a map based on a template.
|
- `to_map(mapstring string, line string, delimiter_ string) map[string]string`: Intelligent mapping of a line to a map based on a template.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
r := texttools.to_map("name,-,-,-,-,pid,-,-,-,-,path",
|
r := texttools.to_map("name,-,-,-,-,pid,-,-,-,-,path",
|
||||||
"root 304 0.0 0.0 408185328 1360 ?? S 16Dec23 0:34.06 /usr/sbin/distnoted")
|
"root 304 0.0 0.0 408185328 1360 ?? S 16Dec23 0:34.06 /usr/sbin/distnoted")
|
||||||
@@ -1035,7 +1073,7 @@ has mechanisms to print better to console, see the methods below
|
|||||||
import as
|
import as
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -1236,7 +1274,7 @@ this is how we want example scripts to be, see the first line, always use like t
|
|||||||
```v
|
```v
|
||||||
#!/usr/bin/env -S v -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib...
|
import incubaid.herolib...
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -1248,7 +1286,6 @@ the files are in ~/code/github/incubaid/herolib/examples for herolib
|
|||||||
- always use the top line as in example above
|
- always use the top line as in example above
|
||||||
- these scripts can be executed as is but can also use vrun $pathOfFile
|
- these scripts can be executed as is but can also use vrun $pathOfFile
|
||||||
|
|
||||||
|
|
||||||
# V TEMPLATES
|
# V TEMPLATES
|
||||||
|
|
||||||
V allows for easily using text templates, expanded at compile time to
|
V allows for easily using text templates, expanded at compile time to
|
||||||
@@ -1371,7 +1408,7 @@ The include directive is for including other html files (which will be processed
|
|||||||
and consists of two parts, the `/@include` tag and a following `'<path>'` string.
|
and consists of two parts, the `/@include` tag and a following `'<path>'` string.
|
||||||
The path parameter is relative to the template file being called.
|
The path parameter is relative to the template file being called.
|
||||||
|
|
||||||
### Example for the folder structure of a project using templates:
|
### Example for the folder structure of a project using templates
|
||||||
|
|
||||||
```
|
```
|
||||||
Project root
|
Project root
|
||||||
@@ -1391,7 +1428,6 @@ Project root
|
|||||||
> Note that there shouldn't be a file suffix,
|
> Note that there shouldn't be a file suffix,
|
||||||
> it is automatically appended and only allows `html` files.
|
> it is automatically appended and only allows `html` files.
|
||||||
|
|
||||||
|
|
||||||
## js
|
## js
|
||||||
|
|
||||||
The js directive consists of two parts, the `/@js` tag and `'<path>'` string,
|
The js directive consists of two parts, the `/@js` tag and `'<path>'` string,
|
||||||
@@ -1401,7 +1437,7 @@ where you can insert your src
|
|||||||
/@js '<url>'
|
/@js '<url>'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Example for the /@js directive:
|
### Example for the /@js directive
|
||||||
|
|
||||||
```html
|
```html
|
||||||
/@js 'myscripts.js'
|
/@js 'myscripts.js'
|
||||||
|
|||||||
19
cli/hero.v
19
cli/hero.v
@@ -2,14 +2,14 @@ module main
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import cli { Command }
|
import cli { Command }
|
||||||
import freeflowuniverse.herolib.core.herocmds
|
import incubaid.herolib.core.herocmds
|
||||||
import freeflowuniverse.herolib.installers.base
|
import incubaid.herolib.installers.base
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
import freeflowuniverse.herolib.ui
|
import incubaid.herolib.ui
|
||||||
import freeflowuniverse.herolib.osal.core as osal
|
import incubaid.herolib.osal.core as osal
|
||||||
import freeflowuniverse.herolib.core
|
import incubaid.herolib.core
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import freeflowuniverse.herolib.core.playcmds
|
import incubaid.herolib.core.playcmds
|
||||||
|
|
||||||
fn playcmds_do(path string) ! {
|
fn playcmds_do(path string) ! {
|
||||||
mut plbook := playbook.new(path: path)!
|
mut plbook := playbook.new(path: path)!
|
||||||
@@ -38,7 +38,8 @@ fn do() ! {
|
|||||||
|
|
||||||
if os.args.len == 2 {
|
if os.args.len == 2 {
|
||||||
mypath := os.args[1]
|
mypath := os.args[1]
|
||||||
if mypath.to_lower().ends_with('.hero') || mypath.to_lower().ends_with('.heroscript') || mypath.to_lower().ends_with('.hs') {
|
if mypath.to_lower().ends_with('.hero') || mypath.to_lower().ends_with('.heroscript')
|
||||||
|
|| mypath.to_lower().ends_with('.hs') {
|
||||||
// hero was called from a file
|
// hero was called from a file
|
||||||
playcmds_do(mypath)!
|
playcmds_do(mypath)!
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module main
|
module main
|
||||||
|
|
||||||
import freeflowuniverse.herolib.mcp.v_do
|
import incubaid.herolib.mcp.v_do
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// Create and start the MCP server
|
// Create and start the MCP server
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ println('Resetting all symlinks...')
|
|||||||
os.rm('${os.home_dir()}/.vmodules/incubaid/herolib') or {}
|
os.rm('${os.home_dir()}/.vmodules/incubaid/herolib') or {}
|
||||||
|
|
||||||
// Create necessary directories
|
// Create necessary directories
|
||||||
os.mkdir_all('${os.home_dir()}/.vmodules/freeflowuniverse') or {
|
os.mkdir_all('${os.home_dir()}/.vmodules/incubaid') or {
|
||||||
panic('Failed to create directory ~/.vmodules/freeflowuniverse: ${err}')
|
panic('Failed to create directory ~/.vmodules/incubaid: ${err}')
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create new symlinks
|
// Create new symlinks
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ function hero_lib_get {
|
|||||||
hero_lib_pull
|
hero_lib_pull
|
||||||
else
|
else
|
||||||
pushd $DIR_CODE/github/incubaid 2>&1 >> /dev/null
|
pushd $DIR_CODE/github/incubaid 2>&1 >> /dev/null
|
||||||
git clone --depth 1 --no-single-branch https://github.com/freeflowuniverse/herolib.git
|
git clone --depth 1 --no-single-branch https://github.com/incubaid/herolib.git
|
||||||
popd 2>&1 >> /dev/null
|
popd 2>&1 >> /dev/null
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
module main
|
module main
|
||||||
|
|
||||||
import freeflowuniverse.herolib.clients.openai
|
import incubaid.herolib.clients.openai
|
||||||
import os
|
import os
|
||||||
|
|
||||||
fn test1(mut client openai.OpenAI) ! {
|
fn test1(mut client openai.OpenAI) ! {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.mcp.aitools
|
import incubaid.herolib.mcp.aitools
|
||||||
|
|
||||||
// aitools.convert_pug("/root/code/github/incubaid/herolauncher/pkg/herolauncher/web/templates/admin")!
|
// aitools.convert_pug("/root/code/github/incubaid/herolauncher/pkg/herolauncher/web/templates/admin")!
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.clients.jina
|
import incubaid.herolib.clients.jina
|
||||||
|
|
||||||
mut jina_client := jina.get()!
|
mut jina_client := jina.get()!
|
||||||
health := jina_client.health()!
|
health := jina_client.health()!
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.clients.qdrant
|
import incubaid.herolib.clients.qdrant
|
||||||
import freeflowuniverse.herolib.installers.db.qdrant_installer
|
import incubaid.herolib.installers.db.qdrant_installer
|
||||||
import freeflowuniverse.herolib.core.httpconnection
|
import incubaid.herolib.core.httpconnection
|
||||||
import rand
|
import rand
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.hero.bootstrap
|
import incubaid.herolib.hero.bootstrap
|
||||||
|
|
||||||
mut al := bootstrap.new_alpine_loader()
|
mut al := bootstrap.new_alpine_loader()
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.investortool
|
import incubaid.herolib.biz.investortool
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import os
|
import os
|
||||||
|
|
||||||
mut plbook := playbook.new(
|
mut plbook := playbook.new(
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
#!/usr/bin/env -S v -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
// #!/usr/bin/env -S v -cg -enable-globals run
|
// #!/usr/bin/env -S v -cg -enable-globals run
|
||||||
import freeflowuniverse.herolib.data.doctree
|
import incubaid.herolib.data.doctree
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import freeflowuniverse.herolib.core.playcmds
|
import incubaid.herolib.core.playcmds
|
||||||
import freeflowuniverse.herolib.web.mdbook
|
import incubaid.herolib.web.mdbook
|
||||||
import freeflowuniverse.herolib.biz.spreadsheet
|
import incubaid.herolib.biz.spreadsheet
|
||||||
import os
|
import os
|
||||||
|
|
||||||
const name = 'tf9_budget'
|
const name = 'tf9_budget'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import os
|
import os
|
||||||
|
|
||||||
const playbook_path = os.dir(@FILE) + '/playbook'
|
const playbook_path = os.dir(@FILE) + '/playbook'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import os
|
import os
|
||||||
|
|
||||||
heroscript := "
|
heroscript := "
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import os
|
import os
|
||||||
|
|
||||||
heroscript := "
|
heroscript := "
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import os
|
import os
|
||||||
|
|
||||||
heroscript_path := os.join_path(os.dir(@FILE), 'examples/complete.heroscript')
|
heroscript_path := os.join_path(os.dir(@FILE), 'examples/complete.heroscript')
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import freeflowuniverse.herolib.core.playcmds
|
import incubaid.herolib.core.playcmds
|
||||||
import os
|
import os
|
||||||
|
|
||||||
heroscript_path := os.join_path(os.dir(@FILE), 'examples/complete.heroscript')
|
heroscript_path := os.join_path(os.dir(@FILE), 'examples/complete.heroscript')
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import os
|
import os
|
||||||
|
|
||||||
heroscript_path := os.join_path(os.dir(@FILE), 'examples/full')
|
heroscript_path := os.join_path(os.dir(@FILE), 'examples/full')
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import os
|
import os
|
||||||
|
|
||||||
heroscript := "
|
heroscript := "
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import os
|
import os
|
||||||
|
|
||||||
heroscript := "
|
heroscript := "
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.biz.bizmodel
|
import incubaid.herolib.biz.bizmodel
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import os
|
import os
|
||||||
|
|
||||||
heroscript := "
|
heroscript := "
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ A V program that demonstrates remote execution of system operations:
|
|||||||
### `run.sh`
|
### `run.sh`
|
||||||
|
|
||||||
A bash script that:
|
A bash script that:
|
||||||
|
|
||||||
1. Compiles the V program
|
1. Compiles the V program
|
||||||
2. Copies it to a remote machine using SCP
|
2. Copies it to a remote machine using SCP
|
||||||
3. Executes it remotely using SSH
|
3. Executes it remotely using SSH
|
||||||
@@ -45,16 +46,19 @@ Modify these values to match your remote system configuration.
|
|||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
1. Set the required environment variable:
|
1. Set the required environment variable:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export SECRET=your_secret_value
|
export SECRET=your_secret_value
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Make the script executable:
|
2. Make the script executable:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x run.sh
|
chmod +x run.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Run the script:
|
3. Run the script:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./run.sh
|
./run.sh
|
||||||
```
|
```
|
||||||
@@ -66,9 +70,8 @@ This example demonstrates practical usage of the herolib builder module's remote
|
|||||||
The builder module provides a more structured way to manage remote nodes and execute commands:
|
The builder module provides a more structured way to manage remote nodes and execute commands:
|
||||||
|
|
||||||
```v
|
```v
|
||||||
import freeflowuniverse.herolib.builder
|
import incubaid.herolib.builder
|
||||||
mut b := builder.new()!
|
mut b := builder.new()!
|
||||||
mut n := b.node_new(ipaddr:"user@host:port")!
|
mut n := b.node_new(ipaddr:"user@host:port")!
|
||||||
// Execute commands on the remote node
|
// Execute commands on the remote node
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module main
|
module main
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core
|
import incubaid.herolib.core
|
||||||
|
|
||||||
fn do() ! {
|
fn do() ! {
|
||||||
// base.uninstall_brew()!
|
// base.uninstall_brew()!
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.builder
|
import incubaid.herolib.builder
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
import os
|
import os
|
||||||
|
|
||||||
fn do1() ! {
|
fn do1() ! {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.builder
|
import incubaid.herolib.builder
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
import os
|
import os
|
||||||
|
|
||||||
mut b := builder.new()!
|
mut b := builder.new()!
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.builder
|
import incubaid.herolib.builder
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
import os
|
import os
|
||||||
|
|
||||||
mut b := builder.new()!
|
mut b := builder.new()!
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.clients.openai
|
import incubaid.herolib.clients.openai
|
||||||
import freeflowuniverse.herolib.core.playcmds
|
import incubaid.herolib.core.playcmds
|
||||||
|
|
||||||
playcmds.run(
|
playcmds.run(
|
||||||
heroscript: '
|
heroscript: '
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -g -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -g -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.playcmds
|
import incubaid.herolib.core.playcmds
|
||||||
import freeflowuniverse.herolib.clients.giteaclient
|
import incubaid.herolib.clients.giteaclient
|
||||||
|
|
||||||
heroscript := "
|
heroscript := "
|
||||||
!!giteaclient.configure
|
!!giteaclient.configure
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.clients.jina
|
import incubaid.herolib.clients.jina
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.clients.mailclient
|
import incubaid.herolib.clients.mailclient
|
||||||
|
|
||||||
// remove the previous one, otherwise the env variables are not read
|
// remove the previous one, otherwise the env variables are not read
|
||||||
mailclient.config_delete(name: 'test')!
|
mailclient.config_delete(name: 'test')!
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.clients.mycelium
|
import incubaid.herolib.clients.mycelium
|
||||||
import freeflowuniverse.herolib.installers.net.mycelium_installer
|
import incubaid.herolib.installers.net.mycelium_installer
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
import encoding.base64
|
import encoding.base64
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
// Mycelium RPC Client Example
|
// Mycelium RPC Client Example
|
||||||
// This example demonstrates how to use the new Mycelium JSON-RPC client
|
// This example demonstrates how to use the new Mycelium JSON-RPC client
|
||||||
// to interact with a Mycelium node's admin API
|
// to interact with a Mycelium node's admin API
|
||||||
import freeflowuniverse.herolib.clients.mycelium_rpc
|
import incubaid.herolib.clients.mycelium_rpc
|
||||||
import freeflowuniverse.herolib.installers.net.mycelium_installer
|
import incubaid.herolib.installers.net.mycelium_installer
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
import encoding.base64
|
import encoding.base64
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core
|
import incubaid.herolib.core
|
||||||
import freeflowuniverse.herolib.clients.postgresql_client
|
import incubaid.herolib.clients.postgresql_client
|
||||||
|
|
||||||
// Configure PostgreSQL client
|
// Configure PostgreSQL client
|
||||||
heroscript := "
|
heroscript := "
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.clients.zinit
|
import incubaid.herolib.clients.zinit
|
||||||
import freeflowuniverse.herolib.installers.infra.zinit_installer
|
import incubaid.herolib.installers.infra.zinit_installer
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
import freeflowuniverse.herolib.core.jobs.model
|
import incubaid.herolib.core.jobs.model
|
||||||
|
|
||||||
// Create a test agent with some sample data
|
// Create a test agent with some sample data
|
||||||
mut agent := model.Agent{
|
mut agent := model.Agent{
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.base
|
import incubaid.herolib.core.base
|
||||||
|
|
||||||
pub struct MyClient[T] {
|
pub struct MyClient[T] {
|
||||||
base.BaseConfig[T]
|
base.BaseConfig[T]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
import freeflowuniverse.herolib.core.base
|
import incubaid.herolib.core.base
|
||||||
|
|
||||||
pub struct MyClient[T] {
|
pub struct MyClient[T] {
|
||||||
base.BaseConfig[T]
|
base.BaseConfig[T]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.base
|
import incubaid.herolib.core.base
|
||||||
import freeflowuniverse.herolib.develop.gittools
|
import incubaid.herolib.develop.gittools
|
||||||
|
|
||||||
pub struct MyClass {
|
pub struct MyClass {
|
||||||
base.Base
|
base.Base
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
#!/usr/bin/env -S v -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import freeflowuniverse.herolib.core.smartid
|
import incubaid.herolib.core.smartid
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import incubaid.herolib.data.ourtime
|
||||||
import freeflowuniverse.herolib.core.db
|
import incubaid.herolib.core.db
|
||||||
|
|
||||||
pub struct MyStruct {
|
pub struct MyStruct {
|
||||||
db.Base
|
db.Base
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.generator.generic as generator
|
import incubaid.herolib.core.generator.generic as generator
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
|
|
||||||
// mut args := generator.GeneratorArgs{
|
// mut args := generator.GeneratorArgs{
|
||||||
// path: '~/code/github/incubaid/herolib/lib/clients'
|
// path: '~/code/github/incubaid/herolib/lib/clients'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.logger
|
import incubaid.herolib.core.logger
|
||||||
|
|
||||||
mut l := logger.new(path: '/tmp/vlogs')!
|
mut l := logger.new(path: '/tmp/vlogs')!
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import freeflowuniverse.herolib.core.openapi.gen
|
import incubaid.herolib.core.openapi.gen
|
||||||
|
|
||||||
const spec_path = '${os.dir(@FILE)}/openapi.json'
|
const spec_path = '${os.dir(@FILE)}/openapi.json'
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module openrpc_client
|
module openrpc_client
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.jsonrpc { JsonRpcRequest }
|
import incubaid.herolib.data.jsonrpc { JsonRpcRequest }
|
||||||
import net.websocket
|
import net.websocket
|
||||||
|
|
||||||
struct Client {
|
struct Client {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module petstore_client
|
module petstore_client
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.jsonrpc { JsonRpcRequest }
|
import incubaid.herolib.data.jsonrpc { JsonRpcRequest }
|
||||||
import net.websocket
|
import net.websocket
|
||||||
|
|
||||||
struct Client {
|
struct Client {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module petstore_client
|
module petstore_client
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.jsonrpc
|
import incubaid.herolib.data.jsonrpc
|
||||||
|
|
||||||
// get_pets finds pets in the system that the user has access to by tags and within a limit
|
// get_pets finds pets in the system that the user has access to by tags and within a limit
|
||||||
// - tags: tags to filter by
|
// - tags: tags to filter by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
import os
|
import os
|
||||||
|
|
||||||
const testpath3 = os.dir(@FILE) + '/../../..'
|
const testpath3 = os.dir(@FILE) + '/../../..'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
import os
|
import os
|
||||||
|
|
||||||
const testpath4 = os.dir(@FILE) + '../../'
|
const testpath4 = os.dir(@FILE) + '../../'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
import freeflowuniverse.herolib.data.paramsparser
|
import incubaid.herolib.data.paramsparser
|
||||||
import os
|
import os
|
||||||
|
|
||||||
const testpath3 = os.dir(@FILE) + '/../..'
|
const testpath3 = os.dir(@FILE) + '/../..'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.pathlib
|
import incubaid.herolib.core.pathlib
|
||||||
import os
|
import os
|
||||||
|
|
||||||
const testpath4 = os.dir(@FILE) + '/paths_sha256.vsh'
|
const testpath4 = os.dir(@FILE) + '/paths_sha256.vsh'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals -no-skip-unused run
|
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals -no-skip-unused run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.crypt.herocrypt
|
import incubaid.herolib.crypt.herocrypt
|
||||||
import time
|
import time
|
||||||
|
|
||||||
// Initialize the HeroCrypt client
|
// Initialize the HeroCrypt client
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v run
|
#!/usr/bin/env -S v run
|
||||||
|
|
||||||
// Example struct to cache
|
// Example struct to cache
|
||||||
import freeflowuniverse.herolib.data.cache
|
import incubaid.herolib.data.cache
|
||||||
import time
|
import time
|
||||||
|
|
||||||
@[heap]
|
@[heap]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.countries
|
import incubaid.herolib.data.countries
|
||||||
|
|
||||||
mut all_countries := countries.get_all_countries() or {
|
mut all_countries := countries.get_all_countries() or {
|
||||||
eprintln('Error loading countries: ${err}')
|
eprintln('Error loading countries: ${err}')
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourdb
|
import incubaid.herolib.data.ourdb
|
||||||
import time
|
import time
|
||||||
|
|
||||||
// Known worker public key
|
// Known worker public key
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourdb
|
import incubaid.herolib.data.ourdb
|
||||||
|
|
||||||
worker_public_key := '46a9f9cee1ce98ef7478f3dea759589bbf6da9156533e63fed9f233640ac072c'
|
worker_public_key := '46a9f9cee1ce98ef7478f3dea759589bbf6da9156533e63fed9f233640ac072c'
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.encoder
|
import incubaid.herolib.data.encoder
|
||||||
import crypto.ed25519
|
import crypto.ed25519
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
|
|
||||||
struct AStruct {
|
struct AStruct {
|
||||||
mut:
|
mut:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cg -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cg -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.crypt.aes_symmetric { decrypt, encrypt }
|
import incubaid.herolib.crypt.aes_symmetric { decrypt, encrypt }
|
||||||
import freeflowuniverse.herolib.ui.console
|
import incubaid.herolib.ui.console
|
||||||
|
|
||||||
msg := 'my message'.bytes()
|
msg := 'my message'.bytes()
|
||||||
console.print_debug('${msg}')
|
console.print_debug('${msg}')
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
// Example demonstrating GraphDB usage in a social network context
|
// Example demonstrating GraphDB usage in a social network context
|
||||||
import freeflowuniverse.herolib.data.graphdb
|
import incubaid.herolib.data.graphdb
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// Initialize a new graph database with default cache settings
|
// Initialize a new graph database with default cache settings
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.encoderhero
|
import incubaid.herolib.data.encoderhero
|
||||||
import freeflowuniverse.herolib.core.base
|
import incubaid.herolib.core.base
|
||||||
|
|
||||||
// this is docu at top
|
// this is docu at top
|
||||||
@[name: 'teststruct ']
|
@[name: 'teststruct ']
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.encoderhero
|
import incubaid.herolib.data.encoderhero
|
||||||
import freeflowuniverse.herolib.core.base
|
import incubaid.herolib.core.base
|
||||||
import time
|
import time
|
||||||
|
|
||||||
struct Person {
|
struct Person {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -cg -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -cg -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.clients.postgresql_client
|
import incubaid.herolib.clients.postgresql_client
|
||||||
import freeflowuniverse.herolib.data.location
|
import incubaid.herolib.data.location
|
||||||
|
|
||||||
// Configure PostgreSQL client
|
// Configure PostgreSQL client
|
||||||
heroscript := "
|
heroscript := "
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.clients.postgresql_client
|
import incubaid.herolib.clients.postgresql_client
|
||||||
import freeflowuniverse.herolib.data.location
|
import incubaid.herolib.data.location
|
||||||
|
|
||||||
// Configure PostgreSQL client
|
// Configure PostgreSQL client
|
||||||
heroscript := "
|
heroscript := "
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
// Please note that before running this script you need to run the server first
|
// Please note that before running this script you need to run the server first
|
||||||
// See examples/data/ourdb_server.vsh
|
// See examples/data/ourdb_server.vsh
|
||||||
import freeflowuniverse.herolib.data.ourdb
|
import incubaid.herolib.data.ourdb
|
||||||
import os
|
import os
|
||||||
|
|
||||||
mut client := ourdb.new_client(
|
mut client := ourdb.new_client(
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourdb
|
import incubaid.herolib.data.ourdb
|
||||||
|
|
||||||
const test_dir = '/tmp/ourdb'
|
const test_dir = '/tmp/ourdb'
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourdb
|
import incubaid.herolib.data.ourdb
|
||||||
import os
|
import os
|
||||||
|
|
||||||
mut server := ourdb.new_server(
|
mut server := ourdb.new_server(
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module main
|
module main
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourdb_syncer.streamer
|
import incubaid.herolib.data.ourdb_syncer.streamer
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
master_public_key := '570c1069736786f06c4fd2a6dc6c17cd88347604593b60e34b5688c369fa1b39'
|
master_public_key := '570c1069736786f06c4fd2a6dc6c17cd88347604593b60e34b5688c369fa1b39'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module main
|
module main
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourdb_syncer.streamer
|
import incubaid.herolib.data.ourdb_syncer.streamer
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println('Strating the streamer first!')
|
println('Strating the streamer first!')
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module main
|
module main
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourdb_syncer.streamer
|
import incubaid.herolib.data.ourdb_syncer.streamer
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// Create a new streamer
|
// Create a new streamer
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.core.playbook
|
import incubaid.herolib.core.playbook
|
||||||
import freeflowuniverse.herolib.data.paramsparser
|
import incubaid.herolib.data.paramsparser
|
||||||
import os
|
import os
|
||||||
|
|
||||||
const testpath = os.dir(@FILE) + '/data'
|
const testpath = os.dir(@FILE) + '/data'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.paramsparser { Params, parse }
|
import incubaid.herolib.data.paramsparser { Params, parse }
|
||||||
import time
|
import time
|
||||||
|
|
||||||
totalnr := 1000000
|
totalnr := 1000000
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.radixtree
|
import incubaid.herolib.data.radixtree
|
||||||
|
|
||||||
mut rt := radixtree.new(path: '/tmp/radixtree_test', reset: true)!
|
mut rt := radixtree.new(path: '/tmp/radixtree_test', reset: true)!
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.resp
|
import incubaid.herolib.data.resp
|
||||||
import crypto.ed25519
|
import crypto.ed25519
|
||||||
|
|
||||||
mut b := resp.builder_new()
|
mut b := resp.builder_new()
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user