titanpl 2.0.3 → 3.0.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/package.json +1 -1
- package/packages/cli/package.json +6 -6
- package/packages/cli/src/commands/init.js +23 -2
- package/packages/engine-darwin-arm64/package.json +1 -1
- package/packages/engine-linux-x64/bin/titan-server +0 -0
- package/packages/engine-linux-x64/package.json +8 -2
- package/packages/engine-win32-x64/bin/titan-server.exe +0 -0
- package/packages/engine-win32-x64/package.json +1 -1
- package/packages/native/package.json +1 -1
- package/packages/packet/package.json +1 -1
- package/packages/route/package.json +1 -1
- package/templates/common/Dockerfile +57 -25
- package/templates/extension/package.json +2 -2
- package/templates/js/package.json +5 -5
- package/templates/rust-js/package.json +4 -4
- package/templates/rust-ts/package.json +4 -4
- package/templates/ts/package.json +5 -5
- package/titanpl-sdk/package.json +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "titanpl",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Titan Planet is a JavaScript-first backend framework that embeds JS actions into a Rust + Axum server and ships as a single native binary. Routes are compiled to static metadata; only actions run in the embedded JS runtime. No Node.js. No event loop in production.",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "ezetgalaxy",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@titanpl/cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "The unified CLI for Titan Planet. Use it to create, manage, build, and deploy high-performance backend projects.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"titanpl",
|
|
@@ -17,16 +17,16 @@
|
|
|
17
17
|
},
|
|
18
18
|
"bin": {
|
|
19
19
|
"titan": "./index.js",
|
|
20
|
-
"
|
|
20
|
+
"t8n": "./index.js",
|
|
21
21
|
"tit": "./index.js"
|
|
22
22
|
},
|
|
23
23
|
"optionalDependencies": {
|
|
24
|
-
"@titanpl/engine-win32-x64": "2.0.
|
|
25
|
-
"@titanpl/engine-linux-x64": "2.0.
|
|
26
|
-
"@titanpl/engine-darwin-arm64": "2.0.
|
|
24
|
+
"@titanpl/engine-win32-x64": "2.0.4",
|
|
25
|
+
"@titanpl/engine-linux-x64": "2.0.4",
|
|
26
|
+
"@titanpl/engine-darwin-arm64": "2.0.4"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@titanpl/packet": "2.0.
|
|
29
|
+
"@titanpl/packet": "2.0.4",
|
|
30
30
|
"prompts": "^2.4.2",
|
|
31
31
|
"commander": "^11.0.0",
|
|
32
32
|
"chalk": "^4.1.2"
|
|
@@ -99,8 +99,27 @@ export async function initCommand(projectName, templateName) {
|
|
|
99
99
|
let templateDir = path.resolve(__dirname, '..', '..', '..', '..', 'templates', selectedTemplate);
|
|
100
100
|
let commonDir = path.resolve(__dirname, '..', '..', '..', '..', 'templates', 'common');
|
|
101
101
|
|
|
102
|
+
const tryPaths = [
|
|
103
|
+
// 1. Monorepo root / titanpl package root
|
|
104
|
+
{ t: path.resolve(__dirname, '..', '..', '..', '..', 'templates', selectedTemplate), c: path.resolve(__dirname, '..', '..', '..', '..', 'templates', 'common') },
|
|
105
|
+
// 2. Published CLI package (global install / npm package)
|
|
106
|
+
{ t: path.resolve(__dirname, '..', '..', 'templates', selectedTemplate), c: path.resolve(__dirname, '..', '..', 'templates', 'common') },
|
|
107
|
+
// 3. Fallback: one dir up? Just in case
|
|
108
|
+
{ t: path.resolve(__dirname, '..', '..', '..', 'templates', selectedTemplate), c: path.resolve(__dirname, '..', '..', '..', 'templates', 'common') }
|
|
109
|
+
];
|
|
110
|
+
|
|
111
|
+
let found = false;
|
|
112
|
+
for (const paths of tryPaths) {
|
|
113
|
+
if (fs.existsSync(paths.t) && fs.existsSync(paths.c)) {
|
|
114
|
+
templateDir = paths.t;
|
|
115
|
+
commonDir = paths.c;
|
|
116
|
+
found = true;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
102
121
|
// Robust monorepo/fallback template search: look upwards from cwd
|
|
103
|
-
if (!
|
|
122
|
+
if (!found) {
|
|
104
123
|
let searchDir = process.cwd();
|
|
105
124
|
while (searchDir !== path.parse(searchDir).root) {
|
|
106
125
|
const potentialTemplateDir = path.join(searchDir, 'templates', selectedTemplate);
|
|
@@ -108,6 +127,7 @@ export async function initCommand(projectName, templateName) {
|
|
|
108
127
|
if (fs.existsSync(potentialTemplateDir) && fs.existsSync(potentialCommonDir)) {
|
|
109
128
|
templateDir = potentialTemplateDir;
|
|
110
129
|
commonDir = potentialCommonDir;
|
|
130
|
+
found = true;
|
|
111
131
|
break;
|
|
112
132
|
}
|
|
113
133
|
const sdkPotentialTemplateDir = path.join(searchDir, 'titanpl-sdk', 'templates', selectedTemplate);
|
|
@@ -115,13 +135,14 @@ export async function initCommand(projectName, templateName) {
|
|
|
115
135
|
if (fs.existsSync(sdkPotentialTemplateDir) && fs.existsSync(sdkPotentialCommonDir)) {
|
|
116
136
|
templateDir = sdkPotentialTemplateDir;
|
|
117
137
|
commonDir = sdkPotentialCommonDir;
|
|
138
|
+
found = true;
|
|
118
139
|
break;
|
|
119
140
|
}
|
|
120
141
|
searchDir = path.dirname(searchDir);
|
|
121
142
|
}
|
|
122
143
|
}
|
|
123
144
|
|
|
124
|
-
if (!
|
|
145
|
+
if (!found) {
|
|
125
146
|
console.log(chalk.red(`✖ Error finding template paths. Are you in a valid Titan monorepo?`));
|
|
126
147
|
process.exit(1);
|
|
127
148
|
}
|
|
Binary file
|
|
Binary file
|
|
@@ -1,45 +1,68 @@
|
|
|
1
1
|
# ================================================================
|
|
2
|
-
# STAGE 1 —
|
|
2
|
+
# STAGE 1 — Builder
|
|
3
3
|
# ================================================================
|
|
4
|
-
FROM node:20
|
|
4
|
+
FROM node:20-slim AS builder
|
|
5
5
|
|
|
6
6
|
WORKDIR /app
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# build-essential is required for native Titan extensions (C++ or Rust based)
|
|
9
9
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
10
|
-
|
|
10
|
+
build-essential pkg-config git ca-certificates \
|
|
11
11
|
&& rm -rf /var/lib/apt/lists/*
|
|
12
12
|
|
|
13
13
|
ENV NODE_ENV=production
|
|
14
14
|
|
|
15
|
-
# ---------- Node Dependencies ----------
|
|
16
15
|
COPY package.json package-lock.json* ./
|
|
17
|
-
RUN npm install
|
|
18
16
|
|
|
19
|
-
#
|
|
17
|
+
# Install with optional dependencies so it grabs the correct engine for the Linux builder
|
|
18
|
+
RUN npm install --include=optional
|
|
19
|
+
|
|
20
|
+
# ------------------------------------------------
|
|
21
|
+
# Extract Titan Extensions (packages with titan.json)
|
|
22
|
+
# ------------------------------------------------
|
|
23
|
+
RUN mkdir -p /app/.ext && \
|
|
24
|
+
find node_modules -mindepth 2 -maxdepth 3 -type f -name "titan.json" | while read file; do \
|
|
25
|
+
pkg_dir=$(dirname "$file"); \
|
|
26
|
+
pkg_name=$(basename "$pkg_dir"); \
|
|
27
|
+
echo "Extracting Titan extension: $pkg_name"; \
|
|
28
|
+
cp -a "$pkg_dir" "/app/.ext/$pkg_name"; \
|
|
29
|
+
rm -rf "/app/.ext/$pkg_name/node_modules"; \
|
|
30
|
+
done
|
|
31
|
+
|
|
32
|
+
# ------------------------------------------------
|
|
33
|
+
# Copy ANY installed Titan Engine (Architecture agnostic)
|
|
34
|
+
# ------------------------------------------------
|
|
35
|
+
RUN mkdir -p /app/.ext/@titanpl && \
|
|
36
|
+
cp -r node_modules/@titanpl/engine-linux-* /app/.ext/@titanpl/
|
|
37
|
+
|
|
20
38
|
COPY . .
|
|
21
39
|
|
|
22
|
-
# Run the Titan build
|
|
40
|
+
# Run the Titan build step
|
|
23
41
|
RUN npx titan build
|
|
24
42
|
|
|
43
|
+
|
|
25
44
|
# ================================================================
|
|
26
|
-
# STAGE 2 —
|
|
45
|
+
# STAGE 2 — Runtime (Optimized Pure Engine)
|
|
27
46
|
# ================================================================
|
|
28
|
-
FROM
|
|
47
|
+
FROM ubuntu:24.04
|
|
48
|
+
|
|
49
|
+
# Use an unprivileged user for security
|
|
50
|
+
RUN groupadd -r titan && useradd -r -g titan titan
|
|
29
51
|
|
|
30
52
|
WORKDIR /app
|
|
31
53
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
54
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
55
|
+
ca-certificates curl \
|
|
56
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
57
|
+
|
|
58
|
+
# copy dist contents into /app/dist
|
|
59
|
+
COPY --from=builder /app/dist/ ./dist/
|
|
36
60
|
|
|
37
|
-
#
|
|
38
|
-
COPY
|
|
39
|
-
RUN npm ci --omit=dev
|
|
61
|
+
# titan extensions + engine
|
|
62
|
+
COPY --from=builder /app/.ext ./.ext
|
|
40
63
|
|
|
41
|
-
#
|
|
42
|
-
COPY --from=builder /app/
|
|
64
|
+
# runtime assets
|
|
65
|
+
COPY --from=builder /app/package.json ./package.json
|
|
43
66
|
|
|
44
67
|
# ---------------- OPTIONAL APP FOLDERS ----------------
|
|
45
68
|
# Static assets
|
|
@@ -51,16 +74,25 @@ COPY --from=builder /app/dist ./dist
|
|
|
51
74
|
# DB
|
|
52
75
|
# COPY --from=builder /app/app/db ./db
|
|
53
76
|
|
|
54
|
-
#
|
|
55
|
-
|
|
56
|
-
|
|
77
|
+
# CRITICAL SYSTEM SETUP:
|
|
78
|
+
# 1. Mandatory .env file (Engine requires it for config parsing)
|
|
79
|
+
# 2. Node modules symlink for extension JS dependency resolution
|
|
80
|
+
RUN echo "TITAN_DEV=0" > .env && \
|
|
81
|
+
ln -s /app/.ext /app/node_modules && \
|
|
82
|
+
chown -R titan:titan /app
|
|
57
83
|
|
|
58
|
-
#
|
|
84
|
+
# Standard environment variables
|
|
59
85
|
ENV HOST=0.0.0.0
|
|
60
86
|
ENV PORT=5100
|
|
61
87
|
ENV TITAN_DEV=0
|
|
62
88
|
|
|
89
|
+
USER titan
|
|
63
90
|
EXPOSE 5100
|
|
64
91
|
|
|
65
|
-
#
|
|
66
|
-
|
|
92
|
+
# Health check to ensure the server is alive
|
|
93
|
+
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
|
|
94
|
+
CMD curl -f http://localhost:5100/ || exit 1
|
|
95
|
+
|
|
96
|
+
# DYNAMIC ENTRYPOINT: Finds the correct architecture binary and starts it
|
|
97
|
+
# This allows the SAME image to work on x64 vs ARM64 servers.
|
|
98
|
+
CMD ["/bin/sh", "-c", "exec $(find .ext/@titanpl/engine-linux-* -name titan-server -type f | head -n 1) run dist"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "{{name}}",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "A Titan Planet extension",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"@titanpl/core": "latest",
|
|
19
19
|
"chokidar": "^5.0.0",
|
|
20
20
|
"esbuild": "^0.27.2",
|
|
21
|
-
"titanpl-sdk": "2.0.
|
|
21
|
+
"titanpl-sdk": "2.0.4"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@tgrv/microgravity": "latest"
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"template": "js"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@titanpl/cli": "2.0.
|
|
10
|
-
"@titanpl/route": "2.0.
|
|
11
|
-
"@titanpl/native": "2.0.
|
|
9
|
+
"@titanpl/cli": "2.0.4",
|
|
10
|
+
"@titanpl/route": "2.0.4",
|
|
11
|
+
"@titanpl/native": "2.0.4",
|
|
12
12
|
"@titanpl/core": "latest",
|
|
13
13
|
"@titanpl/node": "latest",
|
|
14
|
-
"@titanpl/packet": "2.0.
|
|
14
|
+
"@titanpl/packet": "2.0.4"
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
17
|
"build": "titan build",
|
|
@@ -24,5 +24,5 @@
|
|
|
24
24
|
"eslint": "^9.39.2",
|
|
25
25
|
"eslint-plugin-titanpl": "latest"
|
|
26
26
|
},
|
|
27
|
-
"version": "2.0.
|
|
27
|
+
"version": "2.0.4"
|
|
28
28
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "titanpl",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "A Titan Planet server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"titan": {
|
|
7
7
|
"template": "rust-js"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@titanpl/cli": "2.0.
|
|
11
|
-
"@titanpl/route": "2.0.
|
|
12
|
-
"@titanpl/native": "2.0.
|
|
10
|
+
"@titanpl/cli": "2.0.4",
|
|
11
|
+
"@titanpl/route": "2.0.4",
|
|
12
|
+
"@titanpl/native": "2.0.4",
|
|
13
13
|
"@titanpl/core": "latest",
|
|
14
14
|
"@titanpl/node": "latest"
|
|
15
15
|
},
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "titanpl",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "A Titan Planet server (Rust + TypeScript)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"titan": {
|
|
7
7
|
"template": "rust-ts"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@titanpl/cli": "2.0.
|
|
11
|
-
"@titanpl/route": "2.0.
|
|
12
|
-
"@titanpl/native": "2.0.
|
|
10
|
+
"@titanpl/cli": "2.0.4",
|
|
11
|
+
"@titanpl/route": "2.0.4",
|
|
12
|
+
"@titanpl/native": "2.0.4",
|
|
13
13
|
"@titanpl/core": "latest",
|
|
14
14
|
"@titanpl/node": "latest",
|
|
15
15
|
"typescript": "^5.0.0"
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"template": "ts"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@titanpl/cli": "2.0.
|
|
10
|
-
"@titanpl/route": "2.0.
|
|
11
|
-
"@titanpl/native": "2.0.
|
|
9
|
+
"@titanpl/cli": "2.0.4",
|
|
10
|
+
"@titanpl/route": "2.0.4",
|
|
11
|
+
"@titanpl/native": "2.0.4",
|
|
12
12
|
"@titanpl/core": "latest",
|
|
13
13
|
"@titanpl/node": "latest",
|
|
14
|
-
"@titanpl/packet": "2.0.
|
|
14
|
+
"@titanpl/packet": "2.0.4",
|
|
15
15
|
"typescript": "^5.0.0"
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
"eslint-plugin-titanpl": "latest",
|
|
27
27
|
"@typescript-eslint/parser": "^8.54.0"
|
|
28
28
|
},
|
|
29
|
-
"version": "2.0.
|
|
29
|
+
"version": "2.0.4"
|
|
30
30
|
}
|
package/titanpl-sdk/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "titanpl-sdk",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Development SDK for Titan Planet. Provides TypeScript type definitions for the global 't' runtime object and a 'lite' test-harness runtime for building and verifying extensions.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|