@tyravel/repl 0.6.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.
@@ -0,0 +1,2 @@
1
+ export { startRepl } from './repl.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { startRepl } from './repl.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
package/dist/repl.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Start the Tyravel interactive shell.
3
+ * Boots the application and provides a REPL with all facades and models available.
4
+ */
5
+ export declare function startRepl(projectRoot: string): Promise<number>;
6
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgKpE"}
package/dist/repl.js ADDED
@@ -0,0 +1,194 @@
1
+ import { existsSync, readdirSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import { join } from 'node:path';
4
+ import { start as startReplServer } from 'node:repl';
5
+ import { homedir } from 'node:os';
6
+ const CYAN = '\x1b[36m';
7
+ const GREEN = '\x1b[32m';
8
+ const YELLOW = '\x1b[33m';
9
+ const RESET = '\x1b[0m';
10
+ /**
11
+ * Start the Tyravel interactive shell.
12
+ * Boots the application and provides a REPL with all facades and models available.
13
+ */
14
+ export async function startRepl(projectRoot) {
15
+ const context = {};
16
+ // ── Boot the Tyravel application ──────────────────────────────────────
17
+ const bootstrapPath = join(projectRoot, 'bootstrap', 'app.ts');
18
+ const entryPath = join(projectRoot, 'src', 'main.ts');
19
+ try {
20
+ // Try loading the app bootstrap
21
+ const bootstrap = await import(bootstrapPath);
22
+ if (bootstrap.default || bootstrap.app) {
23
+ const app = bootstrap.default || bootstrap.app;
24
+ context.app = app;
25
+ }
26
+ }
27
+ catch {
28
+ // Fallback: try importing src/main.ts
29
+ try {
30
+ const entry = await import(entryPath);
31
+ if (entry.app)
32
+ context.app = entry.app;
33
+ if (entry.default?.isBooted?.())
34
+ context.app = entry.default;
35
+ }
36
+ catch {
37
+ // No app found — shell works without a booted app (limited mode)
38
+ }
39
+ }
40
+ // ── Populate facades ─────────────────────────────────────────────────
41
+ const facades = [
42
+ ['Route', '@tyravel/core'],
43
+ ['DB', '@tyravel/core'],
44
+ ['Auth', '@tyravel/core'],
45
+ ['Cache', '@tyravel/core'],
46
+ ['Queue', '@tyravel/core'],
47
+ ['Events', '@tyravel/core'],
48
+ ['Log', '@tyravel/core'],
49
+ ['Mail', '@tyravel/core'],
50
+ ['Notifications', '@tyravel/core'],
51
+ ['Schedule', '@tyravel/core'],
52
+ ['Storage', '@tyravel/core'],
53
+ ['Config', '@tyravel/config'],
54
+ ['collect', '@tyravel/support'],
55
+ ];
56
+ const req = createRequire(import.meta.url);
57
+ for (const [name, pkg] of facades) {
58
+ try {
59
+ const mod = req(pkg);
60
+ if (mod[name]) {
61
+ context[name] = mod[name];
62
+ }
63
+ }
64
+ catch {
65
+ // Package not available — skip
66
+ }
67
+ }
68
+ // ── Load models from app/models/ ──────────────────────────────────────
69
+ const modelsDir = join(projectRoot, 'app', 'models');
70
+ if (existsSync(modelsDir)) {
71
+ const modelFiles = readdirSync(modelsDir).filter((f) => f.endsWith('.ts') && !f.endsWith('.test.ts'));
72
+ for (const file of modelFiles) {
73
+ try {
74
+ const modelPath = join(modelsDir, file);
75
+ const mod = await import(modelPath);
76
+ const modelName = file.replace(/\.ts$/, '');
77
+ // Export the default or first named export
78
+ if (mod.default) {
79
+ context[modelName] = mod.default;
80
+ }
81
+ else {
82
+ const keys = Object.keys(mod);
83
+ if (keys.length > 0 && keys[0]) {
84
+ context[keys[0]] = mod[keys[0]];
85
+ }
86
+ }
87
+ }
88
+ catch {
89
+ // Skip models that fail to load
90
+ }
91
+ }
92
+ }
93
+ // ── Colorized greeting ───────────────────────────────────────────────
94
+ console.log('');
95
+ console.log(` ${CYAN}⚡ Tyravel Shell${RESET}`);
96
+ console.log(` ${GREEN}Available:${RESET} Route, DB, Auth, Cache, Queue, Events, Log, Mail, Notifications, Schedule, Storage, collect`);
97
+ if (Object.keys(context).length > 11) {
98
+ const modelCount = Object.keys(context).length - 11 - (context.app ? 1 : 0);
99
+ if (modelCount > 0) {
100
+ console.log(` ${GREEN}Models:${RESET} ${modelCount} loaded`);
101
+ }
102
+ }
103
+ console.log(` ${YELLOW}Tip:${RESET} Type .exit to quit, or .help for REPL commands`);
104
+ console.log('');
105
+ // ── Start REPL server ────────────────────────────────────────────────
106
+ const historyFile = join(homedir(), '.tyravel_shell_history');
107
+ const server = startReplServer({
108
+ prompt: `${CYAN}tyravel>${RESET} `,
109
+ eval: evaluateInContext(context),
110
+ preview: true,
111
+ useColors: false,
112
+ });
113
+ // Setup persistent history
114
+ server.setupHistory(historyFile, (err) => {
115
+ if (err) {
116
+ // Silent — history is a nice-to-have
117
+ }
118
+ });
119
+ // ── Define REPL commands ─────────────────────────────────────────────
120
+ server.defineCommand('models', {
121
+ help: 'List all loaded models',
122
+ action() {
123
+ const modelKeys = Object.keys(context).filter((k) => k !== 'app' && !['Route', 'DB', 'Auth', 'Cache', 'Queue', 'Events', 'Log', 'Mail', 'Notifications', 'Schedule', 'Storage', 'Config', 'collect'].includes(k));
124
+ if (modelKeys.length === 0) {
125
+ console.log('No models loaded.');
126
+ }
127
+ else {
128
+ console.log(`Models (${modelKeys.length}):`);
129
+ for (const key of modelKeys) {
130
+ console.log(` ${GREEN}${key}${RESET}`);
131
+ }
132
+ }
133
+ this.displayPrompt();
134
+ },
135
+ });
136
+ server.defineCommand('facades', {
137
+ help: 'List all available facades',
138
+ action() {
139
+ console.log('Available facades and helpers:');
140
+ const facadeList = ['Route', 'DB', 'Auth', 'Cache', 'Queue', 'Events', 'Log', 'Mail', 'Notifications', 'Schedule', 'Storage', 'Config', 'collect'];
141
+ for (const name of facadeList) {
142
+ const status = context[name] ? `${GREEN}✓${RESET}` : `${YELLOW}✗${RESET}`;
143
+ console.log(` ${status} ${name}`);
144
+ }
145
+ this.displayPrompt();
146
+ },
147
+ });
148
+ // Autocomplete context keys
149
+ server.on('reset', () => {
150
+ // Re-populate context on reset
151
+ for (const [key, value] of Object.entries(context)) {
152
+ server.context[key] = value;
153
+ }
154
+ });
155
+ // Populate initial context
156
+ for (const [key, value] of Object.entries(context)) {
157
+ server.context[key] = value;
158
+ }
159
+ return new Promise((resolvePromise) => {
160
+ server.on('exit', () => {
161
+ resolvePromise(0);
162
+ });
163
+ });
164
+ }
165
+ /**
166
+ * Create a custom eval function that wraps the context.
167
+ * Node's REPL natively supports top-level await since Node 22.
168
+ */
169
+ function evaluateInContext(context) {
170
+ return (code, _context, _filename, callback) => {
171
+ // Build a function with the context keys as parameters
172
+ const keys = Object.keys(context);
173
+ const vals = keys.map((k) => context[k]);
174
+ const asyncFn = code.includes('await') || code.includes('async');
175
+ const prefix = asyncFn ? 'return (async () => {\n' : '';
176
+ const suffix = asyncFn ? '\n})()' : '';
177
+ try {
178
+ const fn = new Function(...keys, `${prefix}${code}${suffix}`);
179
+ const result = fn(...vals);
180
+ if (result instanceof Promise) {
181
+ result
182
+ .then((val) => callback(null, val))
183
+ .catch((err) => callback(err));
184
+ }
185
+ else {
186
+ callback(null, result);
187
+ }
188
+ }
189
+ catch (err) {
190
+ callback(err instanceof Error ? err : new Error(String(err)));
191
+ }
192
+ };
193
+ }
194
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@tyravel/repl",
3
+ "version": "0.6.0",
4
+ "description": "Interactive Tyravel REPL (tyravel shell)",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "build": "tsc -p tsconfig.json",
17
+ "typecheck": "tsc -p tsconfig.json --noEmit"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/thesimonharms/tyravel.git",
25
+ "directory": "packages/repl"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "engines": {
31
+ "node": ">=22"
32
+ },
33
+ "dependencies": {
34
+ "@tyravel/core": "0.6.0",
35
+ "@tyravel/support": "0.6.0"
36
+ },
37
+ "devDependencies": {
38
+ "typescript": "^5.7.0"
39
+ }
40
+ }