create-prisma-php-app 4.0.0-alpha.2 → 4.0.0-alpha.21
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/dist/.htaccess +54 -41
- package/dist/bootstrap.php +143 -98
- package/dist/index.js +264 -99
- package/dist/settings/auto-swagger-docs.ts +196 -95
- package/dist/settings/bs-config.ts +56 -58
- package/dist/settings/files-list.json +1 -1
- package/dist/settings/restart-mcp.ts +58 -0
- package/dist/settings/restart-websocket.ts +51 -45
- package/dist/settings/utils.ts +240 -0
- package/dist/src/Lib/AI/ChatGPTClient.php +147 -0
- package/dist/src/Lib/Auth/Auth.php +544 -0
- package/dist/src/Lib/Auth/AuthConfig.php +89 -0
- package/dist/src/Lib/CacheHandler.php +121 -0
- package/dist/src/Lib/ErrorHandler.php +322 -0
- package/dist/src/Lib/FileManager/UploadFile.php +383 -0
- package/dist/src/Lib/Headers/Boom.php +192 -0
- package/dist/src/Lib/IncludeTracker.php +59 -0
- package/dist/src/Lib/MCP/WeatherTools.php +104 -0
- package/dist/src/Lib/MCP/mcp-server.php +80 -0
- package/dist/src/Lib/MainLayout.php +230 -0
- package/dist/src/Lib/Middleware/AuthMiddleware.php +154 -0
- package/dist/src/Lib/Middleware/CorsMiddleware.php +145 -0
- package/dist/src/Lib/PHPMailer/Mailer.php +169 -0
- package/dist/src/Lib/PHPX/Exceptions/ComponentValidationException.php +49 -0
- package/dist/src/Lib/PHPX/Fragment.php +32 -0
- package/dist/src/Lib/PHPX/IPHPX.php +22 -0
- package/dist/src/Lib/PHPX/PHPX.php +287 -0
- package/dist/src/Lib/PHPX/TemplateCompiler.php +641 -0
- package/dist/src/Lib/PHPX/TwMerge.php +346 -0
- package/dist/src/Lib/PHPX/TypeCoercer.php +490 -0
- package/dist/src/Lib/PartialRenderer.php +40 -0
- package/dist/src/Lib/PrismaPHPSettings.php +181 -0
- package/dist/src/Lib/Request.php +479 -0
- package/dist/src/Lib/Security/RateLimiter.php +33 -0
- package/dist/src/Lib/Set.php +102 -0
- package/dist/src/Lib/StateManager.php +127 -0
- package/dist/src/Lib/Validator.php +752 -0
- package/dist/src/{Websocket → Lib/Websocket}/ConnectionManager.php +1 -1
- package/dist/src/Lib/Websocket/websocket-server.php +118 -0
- package/dist/src/app/error.php +1 -1
- package/dist/src/app/index.php +24 -5
- package/dist/src/app/js/index.js +1 -1
- package/dist/src/app/layout.php +2 -2
- package/package.json +1 -1
- package/dist/settings/restart-websocket.bat +0 -28
- package/dist/src/app/assets/images/prisma-php-black.svg +0 -6
- package/dist/websocket-server.php +0 -22
- package/vendor/autoload.php +0 -25
- package/vendor/composer/ClassLoader.php +0 -579
- package/vendor/composer/InstalledVersions.php +0 -359
- package/vendor/composer/LICENSE +0 -21
- package/vendor/composer/autoload_classmap.php +0 -10
- package/vendor/composer/autoload_namespaces.php +0 -9
- package/vendor/composer/autoload_psr4.php +0 -10
- package/vendor/composer/autoload_real.php +0 -38
- package/vendor/composer/autoload_static.php +0 -25
- package/vendor/composer/installed.json +0 -825
- package/vendor/composer/installed.php +0 -132
- package/vendor/composer/platform_check.php +0 -26
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
declare(strict_types=1);
|
|
4
|
+
|
|
5
|
+
namespace Lib\Websocket;
|
|
6
|
+
|
|
7
|
+
$root = dirname(__DIR__, 3);
|
|
8
|
+
require $root . '/vendor/autoload.php';
|
|
9
|
+
require_once $root . '/settings/paths.php';
|
|
10
|
+
|
|
11
|
+
use Dotenv\Dotenv;
|
|
12
|
+
use Ratchet\Server\IoServer;
|
|
13
|
+
use Ratchet\Http\HttpServer;
|
|
14
|
+
use Ratchet\WebSocket\WsServer;
|
|
15
|
+
use Lib\Websocket\ConnectionManager;
|
|
16
|
+
use Throwable;
|
|
17
|
+
|
|
18
|
+
// ── Load .env (optional) and timezone ─────────────────────────────────────────
|
|
19
|
+
if (file_exists(DOCUMENT_PATH . '/.env')) {
|
|
20
|
+
Dotenv::createImmutable(DOCUMENT_PATH)->safeLoad();
|
|
21
|
+
}
|
|
22
|
+
date_default_timezone_set($_ENV['APP_TIMEZONE'] ?? 'UTC');
|
|
23
|
+
|
|
24
|
+
// ── Tiny argv parser: allows --host=0.0.0.0 --port=8080 ──────────────────────
|
|
25
|
+
$cli = [];
|
|
26
|
+
foreach ($argv ?? [] as $arg) {
|
|
27
|
+
if (preg_match('/^--([^=]+)=(.*)$/', $arg, $m)) {
|
|
28
|
+
$cli[$m[1]] = $m[2];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// ── Resolve settings (env → cli defaults) ────────────────────────────────────
|
|
33
|
+
$appName = $_ENV['WS_NAME'] ?? 'prisma-php-ws';
|
|
34
|
+
$appVer = $_ENV['WS_VERSION'] ?? '0.0.1';
|
|
35
|
+
$host = $cli['host'] ?? ($_ENV['WS_HOST'] ?? '127.0.0.1');
|
|
36
|
+
$port = (int)($cli['port'] ?? ($_ENV['WS_PORT'] ?? 8080));
|
|
37
|
+
$verbose = filter_var($cli['verbose'] ?? ($_ENV['WS_VERBOSE'] ?? 'true'), FILTER_VALIDATE_BOOLEAN);
|
|
38
|
+
|
|
39
|
+
// ── Console helpers ──────────────────────────────────────────────────────────
|
|
40
|
+
$color = static fn(string $t, string $c) => "\033[{$c}m{$t}\033[0m";
|
|
41
|
+
$info = static fn(string $t) => $color($t, '1;36');
|
|
42
|
+
$ok = static fn(string $t) => $color($t, '32');
|
|
43
|
+
$warn = static fn(string $t) => $color($t, '33');
|
|
44
|
+
$err = static fn(string $t) => $color($t, '31');
|
|
45
|
+
|
|
46
|
+
// ── Preflight: check if port is free (nice error if not) ─────────────────────
|
|
47
|
+
$probe = @stream_socket_server("tcp://{$host}:{$port}", $errno, $errstr);
|
|
48
|
+
if ($probe === false) {
|
|
49
|
+
fwrite(STDERR, $err("✖ Port {$port} on {$host} is not available: {$errstr}\n"));
|
|
50
|
+
exit(1);
|
|
51
|
+
}
|
|
52
|
+
fclose($probe);
|
|
53
|
+
|
|
54
|
+
// ── Build app ────────────────────────────────────────────────────────────────
|
|
55
|
+
$manager = new ConnectionManager(); // your app component
|
|
56
|
+
$server = IoServer::factory(
|
|
57
|
+
new HttpServer(new WsServer($manager)),
|
|
58
|
+
$port,
|
|
59
|
+
$host
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
$pid = getmypid() ?: 0;
|
|
63
|
+
$url = "ws://{$host}:{$port}";
|
|
64
|
+
$ts = date('Y-m-d H:i:s');
|
|
65
|
+
|
|
66
|
+
echo PHP_EOL;
|
|
67
|
+
echo $info("⚡ {$appName} (v{$appVer})") . PHP_EOL;
|
|
68
|
+
echo $warn("→ WebSocket server starting…") . PHP_EOL;
|
|
69
|
+
echo " Host: {$host}" . PHP_EOL;
|
|
70
|
+
echo " Port: {$port}" . PHP_EOL;
|
|
71
|
+
echo " URL: {$url}" . PHP_EOL;
|
|
72
|
+
echo " PID: {$pid}" . PHP_EOL;
|
|
73
|
+
echo " Started: {$ts}" . PHP_EOL;
|
|
74
|
+
|
|
75
|
+
// ── Graceful shutdown & periodic logs (if loop available) ────────────────────
|
|
76
|
+
$loop = property_exists($server, 'loop') ? $server->loop : null;
|
|
77
|
+
if ($loop instanceof \React\EventLoop\LoopInterface) {
|
|
78
|
+
// Periodic stats every 60s
|
|
79
|
+
$loop->addPeriodicTimer(60, function () use ($ok) {
|
|
80
|
+
$mem = function_exists('memory_get_usage') ? number_format(memory_get_usage(true) / 1048576, 2) . ' MB' : 'n/a';
|
|
81
|
+
$msg = "✓ Heartbeat — memory: {$mem}";
|
|
82
|
+
echo $ok($msg) . PHP_EOL;
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// Signal handlers (needs pcntl)
|
|
86
|
+
if (function_exists('pcntl_signal') && method_exists($loop, 'addSignal')) {
|
|
87
|
+
$stop = function (int $sig) use ($warn, $loop) {
|
|
88
|
+
echo PHP_EOL . $warn("⏹ Caught signal {$sig}. Shutting down…") . PHP_EOL;
|
|
89
|
+
$loop->stop();
|
|
90
|
+
};
|
|
91
|
+
$loop->addSignal(SIGINT, $stop);
|
|
92
|
+
$loop->addSignal(SIGTERM, $stop);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// ── Run ──────────────────────────────────────────────────────────────────────
|
|
97
|
+
try {
|
|
98
|
+
echo $ok("✓ Listening on {$url}") . PHP_EOL;
|
|
99
|
+
if ($verbose) {
|
|
100
|
+
// Basic error/exception logging
|
|
101
|
+
set_error_handler(function ($severity, $message, $file, $line) use ($err) {
|
|
102
|
+
// Respect @-silence
|
|
103
|
+
if (!(error_reporting() & $severity)) return;
|
|
104
|
+
fwrite(STDERR, $err("PHP Error [{$severity}] {$message} @ {$file}:{$line}\n"));
|
|
105
|
+
});
|
|
106
|
+
set_exception_handler(function (Throwable $e) use ($err) {
|
|
107
|
+
fwrite(STDERR, $err('Uncaught Exception: ' . $e->getMessage() . "\n" . $e->getTraceAsString() . "\n"));
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
$server->run(); // blocks until loop->stop()
|
|
112
|
+
|
|
113
|
+
echo PHP_EOL . $ok('✔ Server stopped.') . PHP_EOL;
|
|
114
|
+
exit(0);
|
|
115
|
+
} catch (Throwable $e) {
|
|
116
|
+
fwrite(STDERR, $err('✖ Server error: ' . $e->getMessage()) . PHP_EOL);
|
|
117
|
+
exit(1);
|
|
118
|
+
}
|
package/dist/src/app/error.php
CHANGED
package/dist/src/app/index.php
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Lib\Request; ?>
|
|
2
4
|
|
|
3
5
|
<div class="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20">
|
|
4
6
|
<main class="flex flex-col gap-5 row-start-2 items-center sm:items-center">
|
|
5
7
|
<h1 class="text-6xl font-bold tracking-tight">
|
|
6
|
-
<span class="text-
|
|
7
|
-
<span class="text-
|
|
8
|
+
<span class="text-foreground">PRISMA</span>
|
|
9
|
+
<span class="text-foreground text-2xl align-super">PHP</span>
|
|
8
10
|
</h1>
|
|
9
11
|
|
|
10
12
|
<ol class="list-inside list-decimal text-sm/6 text-center sm:text-left">
|
|
11
13
|
<li class="mb-2 tracking-[-.01em]">
|
|
12
14
|
Get started by editing
|
|
13
|
-
<code class="bg-
|
|
15
|
+
<code class="bg-text-foreground/[.05] dark:bg-white/[.06] px-1 py-0.5 rounded font-semibold">
|
|
14
16
|
src/app/index.php
|
|
15
17
|
</code>
|
|
16
18
|
.
|
|
@@ -26,7 +28,24 @@
|
|
|
26
28
|
href="https://prismaphp.tsnc.tech/docs"
|
|
27
29
|
target="_blank"
|
|
28
30
|
rel="noopener noreferrer">
|
|
29
|
-
<
|
|
31
|
+
<svg
|
|
32
|
+
version="1.1"
|
|
33
|
+
viewBox="0 0 123.8 126.8"
|
|
34
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
35
|
+
width="20"
|
|
36
|
+
height="20"
|
|
37
|
+
fill="currentColor"
|
|
38
|
+
aria-hidden="true">
|
|
39
|
+
<g>
|
|
40
|
+
<g id="Layer_2">
|
|
41
|
+
<g id="Layer_1-2">
|
|
42
|
+
<polygon
|
|
43
|
+
points="113.9 50.6 111.5 49.4 105 46.2 97.1 42.4 92.7 37 89 32.7 84.6 31.3 77.9 32.6 72.4 37.9 71.3 45.5 68.1 50.9 66.2 46.6 64.6 33.1 63.1 21.6 60.3 15.1 50.4 5.5 46.7 20.5 46.7 32.9 39 27.4 24.1 11.8 0 0 6.5 12.1 18.2 24.7 27.8 42.1 41 55.6 47.7 66.2 45.2 73.5 44.1 89 35.8 99.3 34.1 106.8 39.7 105.2 37.1 113.5 39.4 122.5 44.1 116.3 47.7 126.8 53.4 117.9 60.8 123.2 62.2 113.2 68.3 115.3 67.8 108.3 74.2 110.1 72.7 101.7 58.8 90.1 77 80.7 84 72.3 88 62.6 90.8 51.1 94.1 46.6 99.8 47.3 107.2 49.9 112.2 51.6 123.8 58.2 113.9 50.6" />
|
|
44
|
+
</g>
|
|
45
|
+
</g>
|
|
46
|
+
</g>
|
|
47
|
+
</svg>
|
|
48
|
+
Read Docs
|
|
30
49
|
</a>
|
|
31
50
|
</div>
|
|
32
51
|
</main>
|