@almadar/orb 2.43.0 → 2.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -19
- package/bin/{almadar → orb} +30 -24
- package/package.json +9 -9
- package/scripts/postinstall.js +25 -15
- package/shells/almadar-shell/package.json +16 -3
- package/shells/almadar-shell/packages/client/eslint.config.cjs +34 -1
- package/shells/almadar-shell/packages/client/package.json +28 -25
- package/shells/almadar-shell/packages/client/src/App.tsx +1 -4
- package/shells/almadar-shell/packages/client/src/index.css +4 -20
- package/shells/almadar-shell/packages/client/tailwind.config.js +12 -2
- package/shells/almadar-shell/packages/server/eslint.config.cjs +4 -0
- package/shells/almadar-shell/packages/server/package.json +13 -9
- package/shells/almadar-shell/packages/server/pnpm-lock.yaml +4723 -0
- package/shells/almadar-shell/packages/server/src/app.ts +8 -3
- package/shells/almadar-shell/packages/server/src/types/express.d.ts +3 -1
- package/shells/almadar-shell/packages/shared/package.json +1 -0
- package/shells/almadar-shell/packages/shared/pnpm-lock.yaml +22 -0
- package/shells/almadar-shell-hono/LICENSE +72 -0
- package/shells/almadar-shell-hono/README.md +25 -0
- package/shells/almadar-shell-hono/locales/en.json +120 -0
- package/shells/almadar-shell-hono/package.json +36 -0
- package/shells/almadar-shell-hono/packages/client/eslint.config.cjs +23 -0
- package/shells/almadar-shell-hono/packages/client/index.html +13 -0
- package/shells/almadar-shell-hono/packages/client/package-lock.json +9750 -0
- package/shells/almadar-shell-hono/packages/client/package.json +61 -0
- package/shells/almadar-shell-hono/packages/client/postcss.config.js +6 -0
- package/shells/almadar-shell-hono/packages/client/src/App.tsx +84 -0
- package/shells/almadar-shell-hono/packages/client/src/config/firebase.ts +37 -0
- package/shells/almadar-shell-hono/packages/client/src/features/auth/AuthContext.tsx +139 -0
- package/shells/almadar-shell-hono/packages/client/src/features/auth/authService.ts +83 -0
- package/shells/almadar-shell-hono/packages/client/src/features/auth/components/Login.tsx +218 -0
- package/shells/almadar-shell-hono/packages/client/src/features/auth/components/ProtectedRoute.tsx +27 -0
- package/shells/almadar-shell-hono/packages/client/src/features/auth/components/UserProfile.tsx +68 -0
- package/shells/almadar-shell-hono/packages/client/src/features/auth/components/index.ts +3 -0
- package/shells/almadar-shell-hono/packages/client/src/features/auth/index.ts +13 -0
- package/shells/almadar-shell-hono/packages/client/src/features/auth/types.ts +24 -0
- package/shells/almadar-shell-hono/packages/client/src/index.css +35 -0
- package/shells/almadar-shell-hono/packages/client/src/main.tsx +8 -0
- package/shells/almadar-shell-hono/packages/client/src/navigation/index.ts +55 -0
- package/shells/almadar-shell-hono/packages/client/src/pages/index.ts +12 -0
- package/shells/almadar-shell-hono/packages/client/tailwind-preset.cjs +259 -0
- package/shells/almadar-shell-hono/packages/client/tailwind.config.js +24 -0
- package/shells/almadar-shell-hono/packages/client/tsconfig.json +33 -0
- package/shells/almadar-shell-hono/packages/client/vite.config.ts +50 -0
- package/shells/almadar-shell-hono/packages/server/eslint.config.cjs +19 -0
- package/shells/almadar-shell-hono/packages/server/package.json +38 -0
- package/shells/almadar-shell-hono/packages/server/pnpm-lock.yaml +4665 -0
- package/shells/almadar-shell-hono/packages/server/src/app.ts +31 -0
- package/shells/almadar-shell-hono/packages/server/src/index.ts +31 -0
- package/shells/almadar-shell-hono/packages/server/src/routes.ts +12 -0
- package/shells/almadar-shell-hono/packages/server/src/serve.ts +45 -0
- package/shells/almadar-shell-hono/packages/server/tsconfig.json +23 -0
- package/shells/almadar-shell-hono/packages/shared/package.json +25 -0
- package/shells/almadar-shell-hono/packages/shared/pnpm-lock.yaml +919 -0
- package/shells/almadar-shell-hono/packages/shared/src/index.ts +2 -0
- package/shells/almadar-shell-hono/packages/shared/tsconfig.json +17 -0
- package/shells/{almadar-shell → almadar-shell-hono/packages/shared}/tsup.config.ts +1 -4
- package/shells/almadar-shell-hono/pnpm-workspace.yaml +2 -0
- package/shells/almadar-shell-hono/turbo.json +17 -0
- package/shells/orb-shell/README.md +1 -1
- package/shells/orb-shell/packages/client/package-lock.json +227 -27
- package/shells/orb-shell/packages/client/package.json +1 -1
- package/shells/orb-shell/packages/server/package-lock.json +1 -0
- package/shells/orb-shell/pnpm-lock.yaml +196 -10
- package/shells/almadar-shell/pnpm-lock.yaml +0 -8767
- package/shells/almadar-shell/vitest.config.ts +0 -8
package/README.md
CHANGED
|
@@ -1,45 +1,83 @@
|
|
|
1
|
-
# @almadar/
|
|
1
|
+
# @almadar/orb
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Orb CLI — compile .orb programs to full-stack applications.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install -g @almadar/
|
|
8
|
+
npm install -g @almadar/orb
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or use the curl installer:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl -fsSL https://orb.almadar.io/install.sh | sh
|
|
9
15
|
```
|
|
10
16
|
|
|
11
17
|
## Usage
|
|
12
18
|
|
|
13
19
|
```bash
|
|
14
|
-
# Validate
|
|
15
|
-
|
|
20
|
+
# Validate an .orb file (0 errors, 0 warnings required)
|
|
21
|
+
orbital validate app.orb
|
|
16
22
|
|
|
17
|
-
#
|
|
18
|
-
|
|
23
|
+
# Lower .lolo syntax to .orb JSON IR
|
|
24
|
+
orbital emit-orb app.orb
|
|
19
25
|
|
|
20
|
-
# Compile to
|
|
21
|
-
|
|
26
|
+
# Compile to TypeScript shell
|
|
27
|
+
orbital compile app.orb --shell typescript
|
|
22
28
|
|
|
23
29
|
# Start development server
|
|
24
|
-
|
|
30
|
+
orbital dev app.orb
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Quick Example
|
|
34
|
+
|
|
35
|
+
```lolo
|
|
36
|
+
orbital TaskApp {
|
|
37
|
+
entity Task [persistent: tasks] {
|
|
38
|
+
id : string!
|
|
39
|
+
title : string!
|
|
40
|
+
status : string = "pending"
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
trait TaskBrowser -> Task [interaction] {
|
|
44
|
+
state browsing {
|
|
45
|
+
INIT -> browsing
|
|
46
|
+
(fetch Task)
|
|
47
|
+
(render-ui main { type: "entity-table", entity: "Task", fields: ["title", "status"] })
|
|
48
|
+
CREATE -> creating
|
|
49
|
+
(render-ui modal { type: "modal", isOpen: true, title: "New Task",
|
|
50
|
+
children: [{ type: "form-section", entity: "Task", fields: ["title", "status"], mode: "create" }] })
|
|
51
|
+
}
|
|
52
|
+
state creating {
|
|
53
|
+
SAVE -> browsing
|
|
54
|
+
(persist create Task @payload.data)
|
|
55
|
+
(render-ui modal null)
|
|
56
|
+
CANCEL -> browsing
|
|
57
|
+
(render-ui modal null)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
page "/tasks" -> TaskBrowser
|
|
62
|
+
}
|
|
25
63
|
```
|
|
26
64
|
|
|
27
65
|
## Commands
|
|
28
66
|
|
|
29
67
|
| Command | Description |
|
|
30
68
|
|---------|-------------|
|
|
31
|
-
| `
|
|
32
|
-
| `
|
|
33
|
-
| `
|
|
34
|
-
| `
|
|
35
|
-
| `
|
|
36
|
-
| `almadar dev <file>` | Start both server and client (dev mode) |
|
|
69
|
+
| `orbital validate <file>` | Validate an .orb file |
|
|
70
|
+
| `orbital emit-orb <file>` | Lower .lolo to .orb JSON (stdout) |
|
|
71
|
+
| `orbital compile <file>` | Compile to generated code |
|
|
72
|
+
| `orbital dev <file>` | Start development server |
|
|
73
|
+
| `orbital new <name>` | Create a new project |
|
|
37
74
|
|
|
38
75
|
## Documentation
|
|
39
76
|
|
|
40
|
-
- [Getting Started](https://almadar.io/docs/
|
|
41
|
-
- [CLI Reference](https://almadar.io/docs/
|
|
77
|
+
- [Getting Started](https://orb.almadar.io/docs/getting-started/introduction)
|
|
78
|
+
- [CLI Reference](https://orb.almadar.io/docs/reference/cli)
|
|
79
|
+
- [Language Reference](https://orb.almadar.io/docs/core-concepts/entities)
|
|
42
80
|
|
|
43
81
|
## License
|
|
44
82
|
|
|
45
|
-
|
|
83
|
+
BSL 1.1
|
package/bin/{almadar → orb}
RENAMED
|
@@ -4,19 +4,18 @@ const { execFileSync } = require('child_process');
|
|
|
4
4
|
const path = require('path');
|
|
5
5
|
const fs = require('fs');
|
|
6
6
|
|
|
7
|
-
const BINARY_NAME = process.platform === 'win32' ? '
|
|
7
|
+
const BINARY_NAME = process.platform === 'win32' ? 'orb.exe' : 'orb';
|
|
8
8
|
|
|
9
9
|
function getBinaryPath() {
|
|
10
10
|
const platform = process.platform;
|
|
11
11
|
const arch = process.arch;
|
|
12
12
|
|
|
13
|
-
// Map Node.js platform/arch to package names
|
|
14
13
|
const platformMap = {
|
|
15
|
-
'darwin-x64': '@almadar/
|
|
16
|
-
'darwin-arm64': '@almadar/
|
|
17
|
-
'linux-x64': '@almadar/
|
|
18
|
-
'linux-arm64': '@almadar/
|
|
19
|
-
'win32-x64': '@almadar/
|
|
14
|
+
'darwin-x64': '@almadar/orb-darwin-x64',
|
|
15
|
+
'darwin-arm64': '@almadar/orb-darwin-arm64',
|
|
16
|
+
'linux-x64': '@almadar/orb-linux-x64',
|
|
17
|
+
'linux-arm64': '@almadar/orb-linux-arm64',
|
|
18
|
+
'win32-x64': '@almadar/orb-windows-x64',
|
|
20
19
|
};
|
|
21
20
|
|
|
22
21
|
const key = `${platform}-${arch}`;
|
|
@@ -24,64 +23,71 @@ function getBinaryPath() {
|
|
|
24
23
|
|
|
25
24
|
if (!packageName) {
|
|
26
25
|
console.error(`Unsupported platform: ${platform}-${arch}`);
|
|
27
|
-
console.error('Supported
|
|
26
|
+
console.error('Supported: darwin-x64, darwin-arm64, linux-x64, linux-arm64, win32-x64');
|
|
28
27
|
process.exit(1);
|
|
29
28
|
}
|
|
30
29
|
|
|
31
|
-
// Try to find the binary in node_modules
|
|
32
30
|
const possiblePaths = [
|
|
33
|
-
// Installed as dependency
|
|
34
31
|
path.join(__dirname, '..', 'node_modules', packageName, BINARY_NAME),
|
|
35
|
-
// Hoisted to parent node_modules
|
|
36
32
|
path.join(__dirname, '..', '..', packageName, BINARY_NAME),
|
|
37
|
-
// Global install
|
|
38
33
|
path.join(__dirname, '..', '..', '..', packageName, BINARY_NAME),
|
|
39
34
|
];
|
|
40
35
|
|
|
41
36
|
for (const binaryPath of possiblePaths) {
|
|
42
37
|
if (fs.existsSync(binaryPath)) {
|
|
43
|
-
return binaryPath;
|
|
38
|
+
return { binaryPath, platformDir: path.dirname(binaryPath) };
|
|
44
39
|
}
|
|
45
40
|
}
|
|
46
41
|
|
|
47
|
-
console.error(`Could not find
|
|
48
|
-
console.error('
|
|
42
|
+
console.error(`Could not find Orb binary for ${platform}-${arch}`);
|
|
43
|
+
console.error('Try reinstalling: npm install -g @almadar/orb');
|
|
49
44
|
process.exit(1);
|
|
50
45
|
}
|
|
51
46
|
|
|
52
47
|
function getShellsDir() {
|
|
53
|
-
// If user has set ORBITAL_SHELLS_DIR, respect it
|
|
54
48
|
if (process.env.ORBITAL_SHELLS_DIR) {
|
|
55
49
|
return process.env.ORBITAL_SHELLS_DIR;
|
|
56
50
|
}
|
|
57
51
|
|
|
58
|
-
// Look for shells bundled with this package
|
|
59
52
|
const possiblePaths = [
|
|
60
|
-
// Shells in same package
|
|
61
53
|
path.join(__dirname, '..', 'shells'),
|
|
62
|
-
|
|
63
|
-
path.join(__dirname, '..', '..', '@almadar', 'cli', 'shells'),
|
|
54
|
+
path.join(__dirname, '..', '..', '@almadar', 'orb', 'shells'),
|
|
64
55
|
];
|
|
65
56
|
|
|
66
57
|
for (const shellsPath of possiblePaths) {
|
|
67
|
-
if (fs.existsSync(shellsPath) &&
|
|
58
|
+
if (fs.existsSync(shellsPath) && (
|
|
59
|
+
fs.existsSync(path.join(shellsPath, 'almadar-shell')) ||
|
|
60
|
+
fs.existsSync(path.join(shellsPath, 'typescript-shell'))
|
|
61
|
+
)) {
|
|
68
62
|
return shellsPath;
|
|
69
63
|
}
|
|
70
64
|
}
|
|
71
65
|
|
|
72
|
-
// No bundled shells found - binary will use its fallback or error
|
|
73
66
|
return null;
|
|
74
67
|
}
|
|
75
68
|
|
|
76
|
-
const binaryPath = getBinaryPath();
|
|
69
|
+
const { binaryPath, platformDir } = getBinaryPath();
|
|
77
70
|
const shellsDir = getShellsDir();
|
|
78
71
|
|
|
79
|
-
// Build environment with ORBITAL_SHELLS_DIR if we found shells
|
|
80
72
|
const env = { ...process.env };
|
|
73
|
+
|
|
81
74
|
if (shellsDir) {
|
|
82
75
|
env.ORBITAL_SHELLS_DIR = shellsDir;
|
|
83
76
|
}
|
|
84
77
|
|
|
78
|
+
// Bun runtime (sibling to Rust binary in platform package)
|
|
79
|
+
const bunName = process.platform === 'win32' ? 'bun.exe' : 'bun';
|
|
80
|
+
const bunPath = path.join(platformDir, bunName);
|
|
81
|
+
if (fs.existsSync(bunPath)) {
|
|
82
|
+
env.ORB_BUN_PATH = bunPath;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Agent dist (agent/ directory in platform package)
|
|
86
|
+
const agentDir = path.join(platformDir, 'agent');
|
|
87
|
+
if (fs.existsSync(agentDir)) {
|
|
88
|
+
env.ORB_AGENT_DIR = agentDir;
|
|
89
|
+
}
|
|
90
|
+
|
|
85
91
|
try {
|
|
86
92
|
execFileSync(binaryPath, process.argv.slice(2), {
|
|
87
93
|
stdio: 'inherit',
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almadar/orb",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Orb CLI -
|
|
3
|
+
"version": "2.45.0",
|
|
4
|
+
"description": "Orb CLI - deterministic when it can be, intelligent when it needs to be",
|
|
5
5
|
"license": "BSL-1.1",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "https://github.com/almadar-io/
|
|
8
|
+
"url": "https://github.com/almadar-io/orb.git",
|
|
9
9
|
"directory": "cli/npm"
|
|
10
10
|
},
|
|
11
11
|
"homepage": "https://orb.almadar.io",
|
|
12
12
|
"bugs": {
|
|
13
|
-
"url": "https://github.com/almadar-io/
|
|
13
|
+
"url": "https://github.com/almadar-io/orb/issues"
|
|
14
14
|
},
|
|
15
15
|
"keywords": [
|
|
16
16
|
"orb",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"node": ">=16.0.0"
|
|
50
50
|
},
|
|
51
51
|
"optionalDependencies": {
|
|
52
|
-
"@almadar/orb-darwin-x64": "2.
|
|
53
|
-
"@almadar/orb-darwin-arm64": "2.
|
|
54
|
-
"@almadar/orb-linux-x64": "2.
|
|
55
|
-
"@almadar/orb-linux-arm64": "2.
|
|
56
|
-
"@almadar/orb-windows-x64": "2.
|
|
52
|
+
"@almadar/orb-darwin-x64": "2.45.0",
|
|
53
|
+
"@almadar/orb-darwin-arm64": "2.45.0",
|
|
54
|
+
"@almadar/orb-linux-x64": "2.45.0",
|
|
55
|
+
"@almadar/orb-linux-arm64": "2.45.0",
|
|
56
|
+
"@almadar/orb-windows-x64": "2.45.0"
|
|
57
57
|
}
|
|
58
58
|
}
|
package/scripts/postinstall.js
CHANGED
|
@@ -7,35 +7,45 @@ const platform = process.platform;
|
|
|
7
7
|
const arch = process.arch;
|
|
8
8
|
|
|
9
9
|
const platformMap = {
|
|
10
|
-
'darwin-x64': '@almadar/
|
|
11
|
-
'darwin-arm64': '@almadar/
|
|
12
|
-
'linux-x64': '@almadar/
|
|
13
|
-
'linux-arm64': '@almadar/
|
|
14
|
-
'win32-x64': '@almadar/
|
|
10
|
+
'darwin-x64': '@almadar/orb-darwin-x64',
|
|
11
|
+
'darwin-arm64': '@almadar/orb-darwin-arm64',
|
|
12
|
+
'linux-x64': '@almadar/orb-linux-x64',
|
|
13
|
+
'linux-arm64': '@almadar/orb-linux-arm64',
|
|
14
|
+
'win32-x64': '@almadar/orb-windows-x64',
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
const key = `${platform}-${arch}`;
|
|
18
18
|
const packageName = platformMap[key];
|
|
19
19
|
|
|
20
20
|
if (!packageName) {
|
|
21
|
-
console.warn(`\n
|
|
22
|
-
console.warn('
|
|
21
|
+
console.warn(`\n Orb CLI: No pre-built binary for ${platform}-${arch}`);
|
|
22
|
+
console.warn(' Build from source: https://github.com/almadar-io/orb#building-from-source\n');
|
|
23
23
|
process.exit(0);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
// Check if the platform-specific package was installed
|
|
27
26
|
const possiblePaths = [
|
|
28
27
|
path.join(__dirname, '..', 'node_modules', packageName),
|
|
29
28
|
path.join(__dirname, '..', '..', packageName),
|
|
30
29
|
path.join(__dirname, '..', '..', '..', packageName),
|
|
31
30
|
];
|
|
32
31
|
|
|
33
|
-
const
|
|
32
|
+
const platformDir = possiblePaths.find(p => fs.existsSync(p));
|
|
34
33
|
|
|
35
|
-
if (
|
|
36
|
-
console.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
console.warn(' This may happen if optional dependencies were skipped.');
|
|
40
|
-
console.warn(' Try: npm install -g @almadar/cli --include=optional\n');
|
|
34
|
+
if (!platformDir) {
|
|
35
|
+
console.warn(`\n Orb CLI: Platform package ${packageName} not found`);
|
|
36
|
+
console.warn(' Try: npm install -g @almadar/orb --include=optional\n');
|
|
37
|
+
process.exit(0);
|
|
41
38
|
}
|
|
39
|
+
|
|
40
|
+
// Verify components
|
|
41
|
+
const binaryName = platform === 'win32' ? 'orb.exe' : 'orb';
|
|
42
|
+
const bunName = platform === 'win32' ? 'bun.exe' : 'bun';
|
|
43
|
+
|
|
44
|
+
const hasBinary = fs.existsSync(path.join(platformDir, binaryName));
|
|
45
|
+
const hasBun = fs.existsSync(path.join(platformDir, bunName));
|
|
46
|
+
const hasAgent = fs.existsSync(path.join(platformDir, 'agent', 'cli.js'));
|
|
47
|
+
|
|
48
|
+
console.log(`Orb CLI installed for ${platform}-${arch}:`);
|
|
49
|
+
console.log(` Binary: ${hasBinary ? 'ok' : 'missing'}`);
|
|
50
|
+
console.log(` Bun: ${hasBun ? 'ok' : 'not bundled (agent features require bun on PATH)'}`);
|
|
51
|
+
console.log(` Agent: ${hasAgent ? 'ok' : 'not bundled (agent features unavailable)'}`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almadar/shell",
|
|
3
|
-
"version": "2.4
|
|
3
|
+
"version": "2.16.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Minimal full-stack shell template for Almadar applications",
|
|
6
6
|
"packageManager": "pnpm@10.30.3",
|
|
@@ -19,11 +19,24 @@
|
|
|
19
19
|
"overrides": {
|
|
20
20
|
"@tootallnate/once": "^3.0.1",
|
|
21
21
|
"esbuild": "^0.25.0",
|
|
22
|
-
"flatted": "^3.4.1"
|
|
22
|
+
"flatted": "^3.4.1",
|
|
23
|
+
"protobufjs": ">=7.5.8 <8",
|
|
24
|
+
"node-forge": "^1.4.0",
|
|
25
|
+
"fast-xml-parser": "^5.7.0",
|
|
26
|
+
"fast-xml-builder": ">=1.1.7",
|
|
27
|
+
"express>path-to-regexp": "0.1.13",
|
|
28
|
+
"qs": "^6.15.2",
|
|
29
|
+
"lodash-es": "^4.18.0"
|
|
23
30
|
}
|
|
24
31
|
},
|
|
25
32
|
"files": [
|
|
26
|
-
"
|
|
33
|
+
"packages",
|
|
34
|
+
"locales",
|
|
35
|
+
"pnpm-workspace.yaml",
|
|
36
|
+
"turbo.json",
|
|
37
|
+
"pnpm-lock.yaml",
|
|
38
|
+
".env.example",
|
|
39
|
+
".gitignore"
|
|
27
40
|
],
|
|
28
41
|
"repository": {
|
|
29
42
|
"type": "git",
|
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const tsParser = require("@typescript-eslint/parser");
|
|
3
3
|
const almadarPlugin = require("@almadar/eslint-plugin");
|
|
4
|
+
// react-hooks plugin registered so the codegen-emitted
|
|
5
|
+
// `// eslint-disable-next-line react-hooks/exhaustive-deps` comments are
|
|
6
|
+
// well-formed (eslint errors on disable directives that reference
|
|
7
|
+
// unknown rules). The actual rules are left off — enabling them would
|
|
8
|
+
// surface a backlog of dep-array warnings the codegen knows are
|
|
9
|
+
// intentional. Tightening is a separate codegen-fix pass.
|
|
10
|
+
let reactHooksPlugin;
|
|
11
|
+
try {
|
|
12
|
+
reactHooksPlugin = require("eslint-plugin-react-hooks");
|
|
13
|
+
} catch (_) {
|
|
14
|
+
reactHooksPlugin = { rules: { "exhaustive-deps": { meta: {}, create: () => ({}) }, "rules-of-hooks": { meta: {}, create: () => ({}) } } };
|
|
15
|
+
}
|
|
4
16
|
|
|
5
17
|
module.exports = [
|
|
6
18
|
{ ignores: ["dist/**", "node_modules/**", "**/*.test.ts", "**/*.test.tsx"] },
|
|
7
19
|
{
|
|
8
20
|
files: ["src/**/*.ts", "src/**/*.tsx"],
|
|
21
|
+
// The codegen emits `// eslint-disable-next-line react-hooks/exhaustive-deps`
|
|
22
|
+
// ahead of every mount-only effect's `[]` dep array. Until the real
|
|
23
|
+
// `eslint-plugin-react-hooks` is wired (it would fire the rule and
|
|
24
|
+
// make these directives meaningful), the shim's no-op create() means
|
|
25
|
+
// the rule never reports — so ESLint flags the directives as
|
|
26
|
+
// "Unused eslint-disable directive". That's a false alarm at this
|
|
27
|
+
// stage; suppress it so the strict-error rule set still hard-fails.
|
|
28
|
+
linterOptions: { reportUnusedDisableDirectives: "off" },
|
|
9
29
|
languageOptions: {
|
|
10
30
|
parser: tsParser,
|
|
11
31
|
parserOptions: {
|
|
@@ -14,9 +34,22 @@ module.exports = [
|
|
|
14
34
|
sourceType: "module",
|
|
15
35
|
},
|
|
16
36
|
},
|
|
17
|
-
plugins: { almadar: almadarPlugin },
|
|
37
|
+
plugins: { almadar: almadarPlugin, "react-hooks": reactHooksPlugin },
|
|
18
38
|
rules: {
|
|
39
|
+
// Zero escape hatches in emitted shell code. Each rule pairs with a
|
|
40
|
+
// codegen-template fix in orbital-rust (see docs/Almadar_Compiler_Gaps.md):
|
|
41
|
+
// - no-as-any: catches `as any` casts.
|
|
42
|
+
// - no-unknown-type: catches `: unknown` annotations.
|
|
43
|
+
// Service results are typed via the integrations
|
|
44
|
+
// contract; every other "unknown" is a typed
|
|
45
|
+
// shape the codegen knows.
|
|
46
|
+
// - no-record-string-unknown: catches `as Record<string, unknown>` casts
|
|
47
|
+
// the codegen used to index into entity rows by
|
|
48
|
+
// string key. The entity has a typed interface
|
|
49
|
+
// — emit against that.
|
|
19
50
|
"almadar/no-as-any": "error",
|
|
51
|
+
"almadar/no-unknown-type": "error",
|
|
52
|
+
"almadar/no-record-string-unknown": "error",
|
|
20
53
|
"almadar/no-import-generated": "error",
|
|
21
54
|
},
|
|
22
55
|
},
|
|
@@ -1,58 +1,61 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almadar/shell-client",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.13.15",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "vite",
|
|
8
8
|
"build": "tsc && vite build",
|
|
9
9
|
"typecheck": "tsc --noEmit",
|
|
10
|
-
"lint": "eslint src/",
|
|
10
|
+
"lint": "eslint --max-warnings 0 src/",
|
|
11
11
|
"preview": "vite preview",
|
|
12
12
|
"test": "vitest run --passWithNoTests",
|
|
13
13
|
"test:watch": "vitest"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@almadar/
|
|
17
|
-
"@almadar/evaluator": "
|
|
18
|
-
"@almadar/
|
|
19
|
-
"@almadar/
|
|
20
|
-
"
|
|
16
|
+
"@almadar/core": "^7.14.3",
|
|
17
|
+
"@almadar/evaluator": "^2.11.2",
|
|
18
|
+
"@almadar/logger": "^1.3.0",
|
|
19
|
+
"@almadar/patterns": "^2.30.2",
|
|
20
|
+
"@almadar/syntax": "^1.4.0",
|
|
21
|
+
"@almadar/ui": "^4.55.0",
|
|
22
|
+
"@monaco-editor/react": "^4.7.0",
|
|
23
|
+
"@react-three/drei": "^9.92.0",
|
|
24
|
+
"@react-three/fiber": "^9.0.0",
|
|
25
|
+
"@react-three/postprocessing": "^3.0.0",
|
|
21
26
|
"@tanstack/react-query": "^5.67.3",
|
|
27
|
+
"firebase": "^11.4.0",
|
|
28
|
+
"leaflet": "^1.9.4",
|
|
29
|
+
"lucide-react": "^0.344.0",
|
|
30
|
+
"monaco-editor": "^0.52.2",
|
|
31
|
+
"postprocessing": "^6.39.0",
|
|
22
32
|
"react": "^19.0.0",
|
|
23
33
|
"react-dom": "^19.0.0",
|
|
24
|
-
"react-
|
|
25
|
-
"
|
|
34
|
+
"react-force-graph-2d": "^1.25.5",
|
|
35
|
+
"react-leaflet": "^4.2.1",
|
|
26
36
|
"react-markdown": "^9.0.1",
|
|
27
|
-
"
|
|
28
|
-
"remark-math": "^6.0.0",
|
|
37
|
+
"react-router-dom": "^7.3.0",
|
|
29
38
|
"rehype-katex": "^7.0.1",
|
|
30
39
|
"rehype-raw": "^7.0.0",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"monaco-editor": "^0.52.2",
|
|
34
|
-
"leaflet": "^1.9.4",
|
|
35
|
-
"react-leaflet": "^4.2.1",
|
|
36
|
-
"lucide-react": "^0.344.0",
|
|
40
|
+
"remark-gfm": "^4.0.1",
|
|
41
|
+
"remark-math": "^6.0.0",
|
|
37
42
|
"three": "^0.160.0",
|
|
38
|
-
"
|
|
39
|
-
"@react-three/drei": "^9.92.0",
|
|
40
|
-
"@react-three/postprocessing": "^3.0.0",
|
|
41
|
-
"postprocessing": "^6.39.0"
|
|
43
|
+
"zustand": "^5.0.3"
|
|
42
44
|
},
|
|
43
45
|
"devDependencies": {
|
|
44
|
-
"@almadar/eslint-plugin": "
|
|
45
|
-
"@typescript-eslint/parser": "8.56.0",
|
|
46
|
-
"eslint": "10.0.0",
|
|
47
|
-
"@testing-library/react": "^16.1.0",
|
|
46
|
+
"@almadar/eslint-plugin": "^2.8.1",
|
|
48
47
|
"@testing-library/jest-dom": "^6.6.3",
|
|
48
|
+
"@testing-library/react": "^16.1.0",
|
|
49
49
|
"@types/react": "^19.0.0",
|
|
50
50
|
"@types/react-dom": "^19.0.0",
|
|
51
|
+
"@typescript-eslint/parser": "8.56.0",
|
|
51
52
|
"@vitejs/plugin-react": "^4.3.4",
|
|
52
53
|
"autoprefixer": "^10.4.20",
|
|
54
|
+
"eslint": "10.0.0",
|
|
53
55
|
"jsdom": "^25.0.1",
|
|
54
56
|
"postcss": "^8.5.3",
|
|
55
57
|
"tailwindcss": "^3.4.17",
|
|
58
|
+
"@tailwindcss/container-queries": "^0.1.1",
|
|
56
59
|
"typescript": "^5.7.3",
|
|
57
60
|
"vite": "^6.2.1",
|
|
58
61
|
"vitest": "^2.1.9"
|
|
@@ -16,7 +16,6 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
|
16
16
|
import { ThemeProvider, UISlotProvider } from '@almadar/ui/context';
|
|
17
17
|
import { UISlotComponent, NotifyListener } from '@almadar/ui/components';
|
|
18
18
|
import {
|
|
19
|
-
EntityStoreProvider,
|
|
20
19
|
EventBusProvider,
|
|
21
20
|
VerificationProvider,
|
|
22
21
|
} from '@almadar/ui/providers';
|
|
@@ -48,8 +47,7 @@ function App() {
|
|
|
48
47
|
return (
|
|
49
48
|
<I18nProvider value={i18nValue}>
|
|
50
49
|
<QueryClientProvider client={queryClient}>
|
|
51
|
-
<ThemeProvider>
|
|
52
|
-
<EntityStoreProvider>
|
|
50
|
+
<ThemeProvider defaultTheme="minimalist">
|
|
53
51
|
<EventBusProvider>
|
|
54
52
|
<VerificationProvider>
|
|
55
53
|
<UISlotProvider>
|
|
@@ -74,7 +72,6 @@ function App() {
|
|
|
74
72
|
</UISlotProvider>
|
|
75
73
|
</VerificationProvider>
|
|
76
74
|
</EventBusProvider>
|
|
77
|
-
</EntityStoreProvider>
|
|
78
75
|
</ThemeProvider>
|
|
79
76
|
</QueryClientProvider>
|
|
80
77
|
</I18nProvider>
|
|
@@ -1,29 +1,13 @@
|
|
|
1
1
|
/* Import Almadar theme - @import must precede @tailwind directives */
|
|
2
|
-
@import '@almadar/ui/themes/
|
|
2
|
+
@import '@almadar/ui/themes/minimalist.css';
|
|
3
3
|
|
|
4
4
|
@tailwind base;
|
|
5
5
|
@tailwind components;
|
|
6
6
|
@tailwind utilities;
|
|
7
7
|
|
|
8
|
-
/*
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
max-width: 80rem;
|
|
12
|
-
margin-left: auto;
|
|
13
|
-
margin-right: auto;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
@media (min-width: 768px) {
|
|
17
|
-
.ui-slot-main {
|
|
18
|
-
padding: 1.5rem 1.5rem;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
@media (min-width: 1024px) {
|
|
23
|
-
.ui-slot-main {
|
|
24
|
-
padding: 2rem 2rem;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
8
|
+
/* Main slot fills the viewport edge-to-edge. Variant trees control their
|
|
9
|
+
* own width and padding via className utilities (max-w-*, mx-auto, px-*).
|
|
10
|
+
* The shell stays out of the way. */
|
|
27
11
|
|
|
28
12
|
/* Global transition baseline: smooth state changes on interactive elements */
|
|
29
13
|
button,
|
|
@@ -6,9 +6,19 @@ const require = createRequire(import.meta.url);
|
|
|
6
6
|
const uiEntry = require.resolve('@almadar/ui');
|
|
7
7
|
const uiDist = join(dirname(uiEntry), '..', '**', '*.js');
|
|
8
8
|
|
|
9
|
+
// @almadar/ui's DashboardLayout (sidebar / topnav / bottomnav modes) and
|
|
10
|
+
// several molecules use container-query Tailwind variants (`@md/dashboard:flex`,
|
|
11
|
+
// `@sm/dashboard:block`, etc.). Without this plugin Tailwind silently drops
|
|
12
|
+
// every `@*/dashboard:*` class and the chrome renders as a blank top-bar with
|
|
13
|
+
// action icons collapsed to the left (no nav, no search, no app title).
|
|
14
|
+
const containerQueries = require('@tailwindcss/container-queries');
|
|
15
|
+
|
|
9
16
|
/** @type {import('tailwindcss').Config} */
|
|
10
17
|
export default {
|
|
11
|
-
|
|
18
|
+
// Single source of truth for Layer 1 + Layer 2 token mappings is
|
|
19
|
+
// @almadar/ui's published preset. Don't fork a local copy — it goes
|
|
20
|
+
// stale silently and breaks look variants without any build error.
|
|
21
|
+
presets: [require('@almadar/ui/tailwind-preset')],
|
|
12
22
|
content: [
|
|
13
23
|
"./index.html",
|
|
14
24
|
"./src/**/*.{js,ts,jsx,tsx}",
|
|
@@ -17,5 +27,5 @@ export default {
|
|
|
17
27
|
theme: {
|
|
18
28
|
extend: {},
|
|
19
29
|
},
|
|
20
|
-
plugins: [],
|
|
30
|
+
plugins: [containerQueries],
|
|
21
31
|
}
|
|
@@ -12,7 +12,11 @@ module.exports = [
|
|
|
12
12
|
},
|
|
13
13
|
plugins: { almadar: almadarPlugin },
|
|
14
14
|
rules: {
|
|
15
|
+
// Zero escape hatches in emitted shell code — same rule set as client;
|
|
16
|
+
// see docs/Almadar_Compiler_Gaps.md for the per-rule codegen fix.
|
|
15
17
|
"almadar/no-as-any": "error",
|
|
18
|
+
"almadar/no-unknown-type": "error",
|
|
19
|
+
"almadar/no-record-string-unknown": "error",
|
|
16
20
|
"almadar/no-import-generated": "error",
|
|
17
21
|
},
|
|
18
22
|
},
|
|
@@ -8,31 +8,35 @@
|
|
|
8
8
|
"build": "esbuild src/index.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/index.js",
|
|
9
9
|
"start": "node dist/index.js",
|
|
10
10
|
"typecheck": "tsc --noEmit",
|
|
11
|
-
"lint": "eslint src/",
|
|
11
|
+
"lint": "eslint --max-warnings 0 src/",
|
|
12
12
|
"test": "vitest run --passWithNoTests",
|
|
13
13
|
"test:watch": "vitest"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@almadar/
|
|
17
|
-
"@almadar/evaluator": "
|
|
18
|
-
"@almadar/
|
|
19
|
-
"@almadar/
|
|
16
|
+
"@almadar/core": "^7.14.3",
|
|
17
|
+
"@almadar/evaluator": "^2.12.1",
|
|
18
|
+
"@almadar/integrations": "^2.12.0",
|
|
19
|
+
"@almadar/logger": "^1.3.0",
|
|
20
|
+
"@almadar/runtime": "^6.9.3",
|
|
21
|
+
"@almadar/server": "^2.13.0",
|
|
20
22
|
"cors": "^2.8.5",
|
|
21
23
|
"dotenv": "^16.4.7",
|
|
22
24
|
"express": "^4.21.2",
|
|
25
|
+
"express-rate-limit": "^7.4.0",
|
|
23
26
|
"firebase-admin": "^12.7.0",
|
|
27
|
+
"helmet": "^8.0.0",
|
|
24
28
|
"zod": "^3.22.0"
|
|
25
29
|
},
|
|
26
30
|
"devDependencies": {
|
|
27
|
-
"@almadar/eslint-plugin": "
|
|
28
|
-
"@typescript-eslint/parser": "8.56.0",
|
|
31
|
+
"@almadar/eslint-plugin": "^2.8.1",
|
|
29
32
|
"@types/cors": "^2.8.17",
|
|
30
33
|
"@types/express": "^5.0.0",
|
|
31
34
|
"@types/node": "^20.17.19",
|
|
32
|
-
"eslint": "
|
|
35
|
+
"@typescript-eslint/parser": "8.56.0",
|
|
33
36
|
"esbuild": "^0.25.0",
|
|
37
|
+
"eslint": "10.0.0",
|
|
34
38
|
"tsx": "^4.19.3",
|
|
35
39
|
"typescript": "^5.7.3",
|
|
36
40
|
"vitest": "^2.1.9"
|
|
37
41
|
}
|
|
38
|
-
}
|
|
42
|
+
}
|