create-celsian 0.3.13 → 0.3.15
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/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -60
- package/dist/index.js.map +1 -1
- package/dist/templates/basic.d.ts.map +1 -1
- package/dist/templates/basic.js +2 -4
- package/dist/templates/basic.js.map +1 -1
- package/dist/templates/full.d.ts.map +1 -1
- package/dist/templates/full.js +31 -33
- package/dist/templates/full.js.map +1 -1
- package/dist/templates/rest-api.d.ts.map +1 -1
- package/dist/templates/rest-api.js +2 -4
- package/dist/templates/rest-api.js.map +1 -1
- package/dist/templates/rpc-api.d.ts.map +1 -1
- package/dist/templates/rpc-api.js +7 -11
- package/dist/templates/rpc-api.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// create-celsian — Project scaffolder
|
|
3
3
|
// Zero external dependencies. Interactive prompts via raw stdin.
|
|
4
|
-
import {
|
|
5
|
-
import { basename, dirname, isAbsolute, join,
|
|
4
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
5
|
+
import { basename, dirname, isAbsolute, join, resolve } from "node:path";
|
|
6
6
|
import { createInterface } from "node:readline";
|
|
7
|
-
import { fileURLToPath } from "node:url";
|
|
8
7
|
import { basicTemplate } from "./templates/basic.js";
|
|
9
8
|
import { fullTemplate } from "./templates/full.js";
|
|
10
9
|
import { restApiTemplate } from "./templates/rest-api.js";
|
|
11
10
|
import { rpcApiTemplate } from "./templates/rpc-api.js";
|
|
11
|
+
// ─── Template Registry ───
|
|
12
12
|
const templates = {
|
|
13
13
|
full: fullTemplate,
|
|
14
14
|
basic: basicTemplate,
|
|
@@ -21,6 +21,17 @@ const templateDescriptions = {
|
|
|
21
21
|
"rest-api": "REST API with TypeBox schemas",
|
|
22
22
|
"rpc-api": "RPC-first with typed client",
|
|
23
23
|
};
|
|
24
|
+
// ─── CLI Argument Parsing ───
|
|
25
|
+
const args = process.argv.slice(2);
|
|
26
|
+
// Handle --help
|
|
27
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
28
|
+
printUsage();
|
|
29
|
+
process.exit(0);
|
|
30
|
+
}
|
|
31
|
+
// Extract flags
|
|
32
|
+
const templateFlag = args.indexOf("--template");
|
|
33
|
+
const templateArg = templateFlag !== -1 ? args[templateFlag + 1] : undefined;
|
|
34
|
+
const nameArg = args.find((a) => !a.startsWith("--") && (templateFlag === -1 || args.indexOf(a) !== templateFlag + 1));
|
|
24
35
|
// ─── Interactive Mode ───
|
|
25
36
|
async function prompt(question, defaultValue) {
|
|
26
37
|
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
@@ -58,14 +69,27 @@ async function interactiveMode() {
|
|
|
58
69
|
return { name, template, pm };
|
|
59
70
|
}
|
|
60
71
|
// ─── Scaffold ───
|
|
61
|
-
|
|
72
|
+
function scaffold(name, template, pm) {
|
|
62
73
|
const files = templates[template];
|
|
63
74
|
if (!files) {
|
|
64
75
|
console.error(`\n Unknown template: ${template}`);
|
|
65
76
|
console.error(` Available: ${Object.keys(templates).join(", ")}\n`);
|
|
66
77
|
process.exit(1);
|
|
67
78
|
}
|
|
68
|
-
|
|
79
|
+
// Sanitize: reject names containing path traversal
|
|
80
|
+
if (name.includes("..")) {
|
|
81
|
+
console.error("\n Invalid project name: must not contain '..'.\n");
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
const cwd = process.cwd();
|
|
85
|
+
const dir = isAbsolute(name) ? name : join(cwd, name);
|
|
86
|
+
const resolved = resolve(dir);
|
|
87
|
+
// Ensure the resolved path is a child of cwd
|
|
88
|
+
if (!resolved.startsWith(cwd + "/") && resolved !== cwd) {
|
|
89
|
+
console.error("\n Invalid project name: resolved path must be inside the current directory.\n");
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
const projectName = basename(dir);
|
|
69
93
|
console.log(`\n Creating Celsian project: ${projectName}`);
|
|
70
94
|
console.log(` Template: ${template}`);
|
|
71
95
|
console.log("");
|
|
@@ -91,57 +115,8 @@ export function scaffold(name, template, pm) {
|
|
|
91
115
|
}
|
|
92
116
|
console.log("");
|
|
93
117
|
}
|
|
94
|
-
function validateTarget(name) {
|
|
95
|
-
const trimmedName = name.trim();
|
|
96
|
-
if (!trimmedName) {
|
|
97
|
-
console.error("\n Invalid project name: name is required.\n");
|
|
98
|
-
process.exit(1);
|
|
99
|
-
}
|
|
100
|
-
if (trimmedName.split(/[\\/]+/).includes("..")) {
|
|
101
|
-
console.error("\n Invalid project name: must not contain '..'.\n");
|
|
102
|
-
process.exit(1);
|
|
103
|
-
}
|
|
104
|
-
const cwd = resolve(process.cwd());
|
|
105
|
-
const dir = resolve(isAbsolute(trimmedName) ? trimmedName : join(cwd, trimmedName));
|
|
106
|
-
const rel = relative(cwd, dir);
|
|
107
|
-
if (rel === "" || rel.startsWith("..") || isAbsolute(rel)) {
|
|
108
|
-
console.error("\n Invalid project name: resolved path must be inside the current directory.\n");
|
|
109
|
-
process.exit(1);
|
|
110
|
-
}
|
|
111
|
-
if (existsSync(dir)) {
|
|
112
|
-
const entries = readdirSync(dir);
|
|
113
|
-
if (entries.length > 0) {
|
|
114
|
-
console.error("\n Refusing to create project: target directory already exists and is not empty.\n");
|
|
115
|
-
process.exit(1);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
const projectName = sanitizePackageName(basename(dir));
|
|
119
|
-
if (!projectName) {
|
|
120
|
-
console.error("\n Invalid project name: cannot derive a valid package name.\n");
|
|
121
|
-
process.exit(1);
|
|
122
|
-
}
|
|
123
|
-
return { dir, projectName };
|
|
124
|
-
}
|
|
125
|
-
function sanitizePackageName(name) {
|
|
126
|
-
return name
|
|
127
|
-
.trim()
|
|
128
|
-
.toLowerCase()
|
|
129
|
-
.replace(/^[._-]+/, "")
|
|
130
|
-
.replace(/[._\s]+/g, "-")
|
|
131
|
-
.replace(/[^a-z0-9-]/g, "")
|
|
132
|
-
.replace(/-+/g, "-")
|
|
133
|
-
.replace(/-+$/g, "");
|
|
134
|
-
}
|
|
135
118
|
// ─── Main ───
|
|
136
119
|
async function main() {
|
|
137
|
-
const args = process.argv.slice(2);
|
|
138
|
-
if (args.includes("--help") || args.includes("-h")) {
|
|
139
|
-
printUsage();
|
|
140
|
-
process.exit(0);
|
|
141
|
-
}
|
|
142
|
-
const templateFlag = args.indexOf("--template");
|
|
143
|
-
const templateArg = templateFlag !== -1 ? args[templateFlag + 1] : undefined;
|
|
144
|
-
const nameArg = args.find((a) => !a.startsWith("--") && (templateFlag === -1 || args.indexOf(a) !== templateFlag + 1));
|
|
145
120
|
// If both name and template are provided via CLI args, skip interactive mode
|
|
146
121
|
if (nameArg) {
|
|
147
122
|
const template = templateArg ?? "full";
|
|
@@ -173,10 +148,8 @@ function printUsage() {
|
|
|
173
148
|
console.log(" Run without arguments for interactive mode.");
|
|
174
149
|
console.log("");
|
|
175
150
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
});
|
|
181
|
-
}
|
|
151
|
+
main().catch((err) => {
|
|
152
|
+
console.error(err);
|
|
153
|
+
process.exit(1);
|
|
154
|
+
});
|
|
182
155
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,sCAAsC;AACtC,iEAAiE;AAEjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/templates/basic.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;
|
|
1
|
+
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/templates/basic.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;CAuEzB,CAAC"}
|
package/dist/templates/basic.js
CHANGED
|
@@ -9,7 +9,7 @@ export const basicTemplate = {
|
|
|
9
9
|
start: "node dist/index.js",
|
|
10
10
|
},
|
|
11
11
|
dependencies: {
|
|
12
|
-
celsian: "
|
|
12
|
+
celsian: "latest",
|
|
13
13
|
},
|
|
14
14
|
devDependencies: {
|
|
15
15
|
typescript: "^5.7.0",
|
|
@@ -22,8 +22,6 @@ export const basicTemplate = {
|
|
|
22
22
|
target: "ES2022",
|
|
23
23
|
module: "ESNext",
|
|
24
24
|
moduleResolution: "bundler",
|
|
25
|
-
lib: ["ES2022"],
|
|
26
|
-
types: ["node"],
|
|
27
25
|
strict: true,
|
|
28
26
|
esModuleInterop: true,
|
|
29
27
|
skipLibCheck: true,
|
|
@@ -61,7 +59,7 @@ app.get('/hello/:name', (req, reply) => {
|
|
|
61
59
|
return reply.json({ message: \`Hello, \${req.params.name}!\` });
|
|
62
60
|
});
|
|
63
61
|
|
|
64
|
-
serve(app
|
|
62
|
+
serve(app);
|
|
65
63
|
`,
|
|
66
64
|
};
|
|
67
65
|
//# sourceMappingURL=basic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic.js","sourceRoot":"","sources":["../../src/templates/basic.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,8BAA8B;YACnC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB;SAC5B;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"basic.js","sourceRoot":"","sources":["../../src/templates/basic.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,8BAA8B;YACnC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB;SAC5B;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,QAAQ;SAClB;QACD,eAAe,EAAE;YACf,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,QAAQ;YACb,aAAa,EAAE,SAAS;SACzB;KACF,EACD,IAAI,EACJ,CAAC,CACF;IACD,eAAe,EAAE,IAAI,CAAC,SAAS,CAC7B;QACE,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,SAAS;YAC3B,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,KAAK;SACf;QACD,OAAO,EAAE,CAAC,KAAK,CAAC;KACjB,EACD,IAAI,EACJ,CAAC,CACF;IACD,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BjB;CACA,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../src/templates/full.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../src/templates/full.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAm4B/C,CAAC"}
|
package/dist/templates/full.js
CHANGED
|
@@ -11,11 +11,11 @@ export const fullTemplate = {
|
|
|
11
11
|
lint: "npx tsc --noEmit",
|
|
12
12
|
},
|
|
13
13
|
dependencies: {
|
|
14
|
-
celsian: "
|
|
15
|
-
"@celsian/core": "
|
|
16
|
-
"@celsian/jwt": "
|
|
17
|
-
"@celsian/rpc": "
|
|
18
|
-
"@celsian/rate-limit": "
|
|
14
|
+
celsian: "latest",
|
|
15
|
+
"@celsian/core": "latest",
|
|
16
|
+
"@celsian/jwt": "latest",
|
|
17
|
+
"@celsian/rpc": "latest",
|
|
18
|
+
"@celsian/rate-limit": "latest",
|
|
19
19
|
"@sinclair/typebox": "^0.34.0",
|
|
20
20
|
},
|
|
21
21
|
devDependencies: {
|
|
@@ -216,7 +216,9 @@ export function securityPlugins(): PluginFunction[] {
|
|
|
216
216
|
rateLimit({
|
|
217
217
|
max: 100,
|
|
218
218
|
window: 60_000,
|
|
219
|
-
|
|
219
|
+
// Local scaffold default: use a stable single-process key without trusting proxy headers.
|
|
220
|
+
// In production, replace this with a user/session/IP key appropriate for your deployment.
|
|
221
|
+
keyGenerator: () => 'local-scaffold',
|
|
220
222
|
}),
|
|
221
223
|
];
|
|
222
224
|
}
|
|
@@ -249,7 +251,7 @@ export default function healthRoutes(): PluginFunction {
|
|
|
249
251
|
|
|
250
252
|
import { Type } from '@sinclair/typebox';
|
|
251
253
|
import type { CelsianReply, CelsianRequest, PluginFunction } from '@celsian/core';
|
|
252
|
-
import type {
|
|
254
|
+
import type { User } from '../types.js';
|
|
253
255
|
import { db } from '../plugins/database.js';
|
|
254
256
|
import { requireAuth } from '../plugins/auth.js';
|
|
255
257
|
|
|
@@ -275,7 +277,7 @@ export default function userRoutes(): PluginFunction {
|
|
|
275
277
|
app.post('/users', {
|
|
276
278
|
schema: { body: CreateUserSchema },
|
|
277
279
|
}, (req, reply) => {
|
|
278
|
-
const { name, email } = req.parsedBody as
|
|
280
|
+
const { name, email } = req.parsedBody as { name: string; email: string };
|
|
279
281
|
const user: User = {
|
|
280
282
|
id: db.generateId(),
|
|
281
283
|
name,
|
|
@@ -300,7 +302,7 @@ export default function userRoutes(): PluginFunction {
|
|
|
300
302
|
}, (req, reply) => {
|
|
301
303
|
const user = db.users.get(req.params.id);
|
|
302
304
|
if (!user) return reply.status(404).json({ error: 'User not found' });
|
|
303
|
-
const updates = req.parsedBody as
|
|
305
|
+
const updates = req.parsedBody as { name?: string; email?: string };
|
|
304
306
|
if (updates.name !== undefined) user.name = updates.name;
|
|
305
307
|
if (updates.email !== undefined) user.email = updates.email;
|
|
306
308
|
db.users.set(user.id, user);
|
|
@@ -315,7 +317,7 @@ export default function userRoutes(): PluginFunction {
|
|
|
315
317
|
handler(req: CelsianRequest, reply: CelsianReply) {
|
|
316
318
|
const existed = db.users.delete(req.params.id);
|
|
317
319
|
if (!existed) return reply.status(404).json({ error: 'User not found' });
|
|
318
|
-
return reply.status(204).
|
|
320
|
+
return reply.status(204).json({ deleted: true });
|
|
319
321
|
},
|
|
320
322
|
});
|
|
321
323
|
};
|
|
@@ -333,24 +335,21 @@ import type { PluginFunction } from '@celsian/core';
|
|
|
333
335
|
const appRouter = router({
|
|
334
336
|
greeting: {
|
|
335
337
|
hello: procedure
|
|
336
|
-
.input(Type.Object({ name: Type.String() }))
|
|
338
|
+
.input<{ name: string }>(Type.Object({ name: Type.String() }))
|
|
337
339
|
.query(({ input }) => {
|
|
338
|
-
|
|
339
|
-
return { message: \`Hello, \${data.name}!\` };
|
|
340
|
+
return { message: \`Hello, \${input.name}!\` };
|
|
340
341
|
}),
|
|
341
342
|
},
|
|
342
343
|
math: {
|
|
343
344
|
add: procedure
|
|
344
|
-
.input(Type.Object({ a: Type.Number(), b: Type.Number() }))
|
|
345
|
+
.input<{ a: number; b: number }>(Type.Object({ a: Type.Number(), b: Type.Number() }))
|
|
345
346
|
.query(({ input }) => {
|
|
346
|
-
|
|
347
|
-
return { result: data.a + data.b };
|
|
347
|
+
return { result: input.a + input.b };
|
|
348
348
|
}),
|
|
349
349
|
multiply: procedure
|
|
350
|
-
.input(Type.Object({ a: Type.Number(), b: Type.Number() }))
|
|
350
|
+
.input<{ a: number; b: number }>(Type.Object({ a: Type.Number(), b: Type.Number() }))
|
|
351
351
|
.mutation(({ input }) => {
|
|
352
|
-
|
|
353
|
-
return { result: data.a * data.b };
|
|
352
|
+
return { result: input.a * input.b };
|
|
354
353
|
}),
|
|
355
354
|
},
|
|
356
355
|
system: {
|
|
@@ -509,19 +508,18 @@ import healthRoutes from '../src/routes/health.js';
|
|
|
509
508
|
import userRoutes from '../src/routes/users.js';
|
|
510
509
|
import rpcRoutes from '../src/routes/rpc.js';
|
|
511
510
|
|
|
512
|
-
|
|
511
|
+
function createTestApp() {
|
|
513
512
|
const app = createApp();
|
|
514
513
|
// Register just what we need — skip auth/security for tests
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
await app.ready();
|
|
514
|
+
app.register(healthRoutes());
|
|
515
|
+
app.register(userRoutes());
|
|
516
|
+
app.register(rpcRoutes());
|
|
519
517
|
return app;
|
|
520
518
|
}
|
|
521
519
|
|
|
522
520
|
describe('Health', () => {
|
|
523
521
|
it('GET /health returns status ok', async () => {
|
|
524
|
-
const app =
|
|
522
|
+
const app = createTestApp();
|
|
525
523
|
const res = await app.inject({ url: '/health' });
|
|
526
524
|
expect(res.status).toBe(200);
|
|
527
525
|
const body = await res.json();
|
|
@@ -533,7 +531,7 @@ describe('Health', () => {
|
|
|
533
531
|
|
|
534
532
|
describe('Users CRUD', () => {
|
|
535
533
|
it('GET /users returns the seeded user', async () => {
|
|
536
|
-
const app =
|
|
534
|
+
const app = createTestApp();
|
|
537
535
|
const res = await app.inject({ url: '/users' });
|
|
538
536
|
expect(res.status).toBe(200);
|
|
539
537
|
const users = await res.json();
|
|
@@ -543,7 +541,7 @@ describe('Users CRUD', () => {
|
|
|
543
541
|
});
|
|
544
542
|
|
|
545
543
|
it('POST /users creates a new user', async () => {
|
|
546
|
-
const app =
|
|
544
|
+
const app = createTestApp();
|
|
547
545
|
const res = await app.inject({
|
|
548
546
|
method: 'POST',
|
|
549
547
|
url: '/users',
|
|
@@ -558,7 +556,7 @@ describe('Users CRUD', () => {
|
|
|
558
556
|
});
|
|
559
557
|
|
|
560
558
|
it('GET /users/:id returns a specific user', async () => {
|
|
561
|
-
const app =
|
|
559
|
+
const app = createTestApp();
|
|
562
560
|
|
|
563
561
|
// Create a user first
|
|
564
562
|
const createRes = await app.inject({
|
|
@@ -576,13 +574,13 @@ describe('Users CRUD', () => {
|
|
|
576
574
|
});
|
|
577
575
|
|
|
578
576
|
it('GET /users/:id returns 404 for unknown user', async () => {
|
|
579
|
-
const app =
|
|
577
|
+
const app = createTestApp();
|
|
580
578
|
const res = await app.inject({ url: '/users/99999' });
|
|
581
579
|
expect(res.status).toBe(404);
|
|
582
580
|
});
|
|
583
581
|
|
|
584
582
|
it('DELETE /users/:id without auth returns 401', async () => {
|
|
585
|
-
const app =
|
|
583
|
+
const app = createTestApp();
|
|
586
584
|
const res = await app.inject({ method: 'DELETE', url: '/users/1' });
|
|
587
585
|
// Without the JWT guard registered in test mode, the route handler runs directly.
|
|
588
586
|
// In the full app with auth, this would return 401.
|
|
@@ -593,7 +591,7 @@ describe('Users CRUD', () => {
|
|
|
593
591
|
|
|
594
592
|
describe('RPC', () => {
|
|
595
593
|
it('GET /_rpc/system.ping returns pong', async () => {
|
|
596
|
-
const app =
|
|
594
|
+
const app = createTestApp();
|
|
597
595
|
const res = await app.inject({ url: '/_rpc/system.ping' });
|
|
598
596
|
expect(res.status).toBe(200);
|
|
599
597
|
const body = await res.json();
|
|
@@ -601,7 +599,7 @@ describe('RPC', () => {
|
|
|
601
599
|
});
|
|
602
600
|
|
|
603
601
|
it('GET /_rpc/greeting.hello returns greeting', async () => {
|
|
604
|
-
const app =
|
|
602
|
+
const app = createTestApp();
|
|
605
603
|
const res = await app.inject({
|
|
606
604
|
url: '/_rpc/greeting.hello?input=' + encodeURIComponent(JSON.stringify({ name: 'World' })),
|
|
607
605
|
});
|
|
@@ -611,7 +609,7 @@ describe('RPC', () => {
|
|
|
611
609
|
});
|
|
612
610
|
|
|
613
611
|
it('POST /_rpc/math.multiply performs mutation', async () => {
|
|
614
|
-
const app =
|
|
612
|
+
const app = createTestApp();
|
|
615
613
|
const res = await app.inject({
|
|
616
614
|
method: 'POST',
|
|
617
615
|
url: '/_rpc/math.multiply',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"full.js","sourceRoot":"","sources":["../../src/templates/full.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,8BAA8B;YACnC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB;YAC3B,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,kBAAkB;SACzB;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"full.js","sourceRoot":"","sources":["../../src/templates/full.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,8BAA8B;YACnC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB;YAC3B,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,kBAAkB;SACzB;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,QAAQ;YACjB,eAAe,EAAE,QAAQ;YACzB,cAAc,EAAE,QAAQ;YACxB,cAAc,EAAE,QAAQ;YACxB,qBAAqB,EAAE,QAAQ;YAC/B,mBAAmB,EAAE,SAAS;SAC/B;QACD,eAAe,EAAE;YACf,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,QAAQ;YACb,MAAM,EAAE,QAAQ;YAChB,aAAa,EAAE,SAAS;SACzB;KACF,EACD,IAAI,EACJ,CAAC,CACF;IAED,eAAe,EAAE,IAAI,CAAC,SAAS,CAC7B;QACE,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,SAAS;YAC3B,GAAG,EAAE,CAAC,QAAQ,CAAC;YACf,KAAK,EAAE,CAAC,MAAM,CAAC;YACf,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;YAClB,gCAAgC,EAAE,IAAI;YACtC,iBAAiB,EAAE,IAAI;YACvB,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,KAAK;SACf;QACD,OAAO,EAAE,CAAC,KAAK,CAAC;KACjB,EACD,IAAI,EACJ,CAAC,CACF;IAED,cAAc,EAAE;;;;;;;;;;;;;CAajB;IAEC,YAAY,EAAE;;;;;CAKf;IAEC,uBAAuB;IACvB,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BjB;IAEC,kCAAkC;IAClC,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiC5B;IAEC,8BAA8B;IAC9B,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCxB;IAEC,kCAAkC;IAClC,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuD5B;IAEC,+BAA+B;IAC/B,sBAAsB,EAAE;;;;;;;;;;;;;;;;;;;;CAoBzB;IAEC,8BAA8B;IAC9B,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4ExB;IAEC,4BAA4B;IAC5B,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDtB;IAEC,+BAA+B;IAC/B,sBAAsB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BzB;IAEC,8BAA8B;IAC9B,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;CAkBxB;IAEC,uBAAuB;IACvB,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEjB;IAEC,2BAA2B;IAC3B,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6HrB;IAEC,qBAAqB;IACrB,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCb;IAEC,oBAAoB;IACpB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwNd;CACA,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest-api.d.ts","sourceRoot":"","sources":["../../src/templates/rest-api.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;;;
|
|
1
|
+
{"version":3,"file":"rest-api.d.ts","sourceRoot":"","sources":["../../src/templates/rest-api.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;;;CA4F3B,CAAC"}
|
|
@@ -9,7 +9,7 @@ export const restApiTemplate = {
|
|
|
9
9
|
start: "node dist/index.js",
|
|
10
10
|
},
|
|
11
11
|
dependencies: {
|
|
12
|
-
celsian: "
|
|
12
|
+
celsian: "latest",
|
|
13
13
|
"@sinclair/typebox": "^0.34.0",
|
|
14
14
|
},
|
|
15
15
|
devDependencies: {
|
|
@@ -23,8 +23,6 @@ export const restApiTemplate = {
|
|
|
23
23
|
target: "ES2022",
|
|
24
24
|
module: "ESNext",
|
|
25
25
|
moduleResolution: "bundler",
|
|
26
|
-
lib: ["ES2022"],
|
|
27
|
-
types: ["node"],
|
|
28
26
|
strict: true,
|
|
29
27
|
esModuleInterop: true,
|
|
30
28
|
skipLibCheck: true,
|
|
@@ -82,7 +80,7 @@ app.get('/users/:id', (req, reply) => {
|
|
|
82
80
|
return reply.json(user);
|
|
83
81
|
});
|
|
84
82
|
|
|
85
|
-
serve(app
|
|
83
|
+
serve(app);
|
|
86
84
|
`,
|
|
87
85
|
};
|
|
88
86
|
//# sourceMappingURL=rest-api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest-api.js","sourceRoot":"","sources":["../../src/templates/rest-api.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,8BAA8B;YACnC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB;SAC5B;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"rest-api.js","sourceRoot":"","sources":["../../src/templates/rest-api.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,8BAA8B;YACnC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB;SAC5B;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,QAAQ;YACjB,mBAAmB,EAAE,SAAS;SAC/B;QACD,eAAe,EAAE;YACf,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,QAAQ;YACb,aAAa,EAAE,SAAS;SACzB;KACF,EACD,IAAI,EACJ,CAAC,CACF;IACD,eAAe,EAAE,IAAI,CAAC,SAAS,CAC7B;QACE,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,SAAS;YAC3B,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,KAAK;SACf;QACD,OAAO,EAAE,CAAC,KAAK,CAAC;KACjB,EACD,IAAI,EACJ,CAAC,CACF;IACD,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDjB;CACA,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-api.d.ts","sourceRoot":"","sources":["../../src/templates/rpc-api.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;;
|
|
1
|
+
{"version":3,"file":"rpc-api.d.ts","sourceRoot":"","sources":["../../src/templates/rpc-api.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;;CAgG1B,CAAC"}
|
|
@@ -9,8 +9,8 @@ export const rpcApiTemplate = {
|
|
|
9
9
|
start: "node dist/index.js",
|
|
10
10
|
},
|
|
11
11
|
dependencies: {
|
|
12
|
-
celsian: "
|
|
13
|
-
"@celsian/rpc": "
|
|
12
|
+
celsian: "latest",
|
|
13
|
+
"@celsian/rpc": "latest",
|
|
14
14
|
"@sinclair/typebox": "^0.34.0",
|
|
15
15
|
},
|
|
16
16
|
devDependencies: {
|
|
@@ -24,8 +24,6 @@ export const rpcApiTemplate = {
|
|
|
24
24
|
target: "ES2022",
|
|
25
25
|
module: "ESNext",
|
|
26
26
|
moduleResolution: "bundler",
|
|
27
|
-
lib: ["ES2022"],
|
|
28
|
-
types: ["node"],
|
|
29
27
|
strict: true,
|
|
30
28
|
esModuleInterop: true,
|
|
31
29
|
skipLibCheck: true,
|
|
@@ -60,18 +58,16 @@ await app.register(security({
|
|
|
60
58
|
const appRouter = router({
|
|
61
59
|
greeting: {
|
|
62
60
|
hello: procedure
|
|
63
|
-
.input(Type.Object({ name: Type.String() }))
|
|
61
|
+
.input<{ name: string }>(Type.Object({ name: Type.String() }))
|
|
64
62
|
.query(({ input }) => {
|
|
65
|
-
|
|
66
|
-
return { message: \`Hello, \${data.name}!\` };
|
|
63
|
+
return { message: 'Hello, ' + input.name + '!' };
|
|
67
64
|
}),
|
|
68
65
|
},
|
|
69
66
|
math: {
|
|
70
67
|
add: procedure
|
|
71
|
-
.input(Type.Object({ a: Type.Number(), b: Type.Number() }))
|
|
68
|
+
.input<{ a: number; b: number }>(Type.Object({ a: Type.Number(), b: Type.Number() }))
|
|
72
69
|
.query(({ input }) => {
|
|
73
|
-
|
|
74
|
-
return { result: data.a + data.b };
|
|
70
|
+
return { result: input.a + input.b };
|
|
75
71
|
}),
|
|
76
72
|
},
|
|
77
73
|
});
|
|
@@ -86,7 +82,7 @@ app.route({
|
|
|
86
82
|
},
|
|
87
83
|
});
|
|
88
84
|
|
|
89
|
-
serve(app
|
|
85
|
+
serve(app);
|
|
90
86
|
|
|
91
87
|
export type AppRouter = typeof appRouter;
|
|
92
88
|
`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-api.js","sourceRoot":"","sources":["../../src/templates/rpc-api.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,8BAA8B;YACnC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB;SAC5B;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"rpc-api.js","sourceRoot":"","sources":["../../src/templates/rpc-api.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,8BAA8B;YACnC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB;SAC5B;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,QAAQ;YACjB,cAAc,EAAE,QAAQ;YACxB,mBAAmB,EAAE,SAAS;SAC/B;QACD,eAAe,EAAE;YACf,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,QAAQ;YACb,aAAa,EAAE,SAAS;SACzB;KACF,EACD,IAAI,EACJ,CAAC,CACF;IACD,eAAe,EAAE,IAAI,CAAC,SAAS,CAC7B;QACE,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,SAAS;YAC3B,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,KAAK;SACf;QACD,OAAO,EAAE,CAAC,KAAK,CAAC;KACjB,EACD,IAAI,EACJ,CAAC,CACF;IACD,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDjB;CACA,CAAC"}
|