XyPriss Internal & Plugin Workspace System
Overview
The XyPriss Workspace System provides a mechanism for developers and plugin contributors to define specialized system instances (like $plug) with restricted filesystem access and isolated logic execution. This is particularly useful for building plugins that need to manage their own workspace without interfering with the main project root.
Configuration
Specialized systems are configured in the xypriss.config.json file under the $internal key.
Example Configuration
{
"__sys__": {
"__name__": "My-App"
},
"$internal": {
"$plug": {
"__xfs__": {
"path": "#$/.private"
},
"__meta__": {
"path": "#$/.private/.meta"
}
}
}
}
Configuration Parameters
| Parameter | Type | Description |
|---|---|---|
__xfs__ | object | Defines a specialized xypriss filesystem instance. |
__xfs__.path | string | The root path for the specialized filesystem. Supports #$ or $# for project root resolution. |
__meta__ | object | Defines logic execution paths. |
__meta__.path | string | Path to a file or directory containing +xypriss.meta.ts logic. |
Usage in Code
Once configured, the specialized system is automatically added to the global __sys__ object.
Accessing the Workspace FileSystem
You can access the specialized filesystem using the name defined in the config (e.g., $plug).
import { type XyPrissSys } from "xypriss";
export function myPlugin() {
// Both properties point to the same specialized workspace
const workspaceA = (__sys__ as XyPrissSys).$plug;
const workspaceB = (__sys__ as XyPrissSys).$plg;
// Using the short alias for file operations
const files = workspaceB?.$lsDirs(".");
}
Distributed Configuration & Auto-Discovery
XyPriss supports a distributed configuration model, allowing plugins and internal modules to provide their own xypriss.config.json files. The system automatically scans for these files in standard project directories:
- Project Root
/plugins/*/mods/*/simulations/*/shared/*
This enables plugin contributors to define their own workspaces and meta-logic without requiring manual configuration from the end-user.
Path Resolution Placeholders
The path resolver supports two main types of resolution:
- Project Root Resolution: Using
#$or$#will resolve the path relative to the Global Project Root (the highest directory containing axypriss.config.jsonorpackage.json). - Local Resolution: Any standard relative path (e.g.,
./.privateorworkspace/data) will be resolved relative to the directory containing the specific configuration file being processed.
Format Flexibility
The resolver is whitespace-aware and robust against extra spaces around slashes or placeholders.
"$ # / simulations"resolves correctly to the project's simulations folder."./ .meta"(in a plugin folder) resolves correctly to that specific plugin's.metadirectory.
Error Reporting
The system provides detailed error logs if a configuration cannot be parsed or if a defined __xfs__ or __meta__ path is unresolvable, facilitating easier debugging for plugin developers.
Meta Logic Execution
The system automatically scans defined __meta__ paths for +xypriss.meta.ts/js files.
- If the path is a file, it executes the exported
run()function. - If the path is a directory, it searches for
+xypriss.meta.ts/jswithin that directory (and specialized subfolders like.meta).