create-celsian 0.1.1 → 0.3.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/dist/index.js +145 -36
- package/dist/index.js.map +1 -1
- package/dist/templates/basic.d.ts +3 -3
- package/dist/templates/basic.d.ts.map +1 -1
- package/dist/templates/basic.js +35 -18
- package/dist/templates/basic.js.map +1 -1
- package/dist/templates/full.d.ts +2 -0
- package/dist/templates/full.d.ts.map +1 -0
- package/dist/templates/full.js +874 -0
- package/dist/templates/full.js.map +1 -0
- package/dist/templates/rest-api.d.ts +3 -3
- package/dist/templates/rest-api.d.ts.map +1 -1
- package/dist/templates/rest-api.js +42 -28
- package/dist/templates/rest-api.js.map +1 -1
- package/dist/templates/rpc-api.d.ts +3 -3
- package/dist/templates/rpc-api.d.ts.map +1 -1
- package/dist/templates/rpc-api.js +37 -20
- package/dist/templates/rpc-api.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +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,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoD5B;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;;;;CA2F3B,CAAC"}
|
|
@@ -1,40 +1,57 @@
|
|
|
1
1
|
export const restApiTemplate = {
|
|
2
|
-
|
|
3
|
-
name:
|
|
4
|
-
version:
|
|
5
|
-
type:
|
|
2
|
+
"package.json": JSON.stringify({
|
|
3
|
+
name: "{{name}}",
|
|
4
|
+
version: "0.0.1",
|
|
5
|
+
type: "module",
|
|
6
6
|
scripts: {
|
|
7
|
-
dev:
|
|
8
|
-
build:
|
|
9
|
-
start:
|
|
7
|
+
dev: "npx tsx --watch src/index.ts",
|
|
8
|
+
build: "tsc",
|
|
9
|
+
start: "node dist/index.js",
|
|
10
10
|
},
|
|
11
11
|
dependencies: {
|
|
12
|
-
celsian:
|
|
13
|
-
|
|
12
|
+
celsian: "latest",
|
|
13
|
+
"@sinclair/typebox": "^0.34.0",
|
|
14
14
|
},
|
|
15
15
|
devDependencies: {
|
|
16
|
-
typescript:
|
|
17
|
-
tsx:
|
|
16
|
+
typescript: "^5.7.0",
|
|
17
|
+
tsx: "^4.0.0",
|
|
18
18
|
},
|
|
19
19
|
}, null, 2),
|
|
20
|
-
|
|
20
|
+
"tsconfig.json": JSON.stringify({
|
|
21
21
|
compilerOptions: {
|
|
22
|
-
target:
|
|
23
|
-
module:
|
|
24
|
-
moduleResolution:
|
|
22
|
+
target: "ES2022",
|
|
23
|
+
module: "ESNext",
|
|
24
|
+
moduleResolution: "bundler",
|
|
25
25
|
strict: true,
|
|
26
26
|
esModuleInterop: true,
|
|
27
27
|
skipLibCheck: true,
|
|
28
|
-
outDir:
|
|
29
|
-
rootDir:
|
|
28
|
+
outDir: "dist",
|
|
29
|
+
rootDir: "src",
|
|
30
30
|
},
|
|
31
|
-
include: [
|
|
31
|
+
include: ["src"],
|
|
32
32
|
}, null, 2),
|
|
33
|
-
|
|
33
|
+
"src/index.ts": `import { createApp, serve, cors, security } from 'celsian';
|
|
34
34
|
import { Type } from '@sinclair/typebox';
|
|
35
35
|
|
|
36
36
|
const app = createApp();
|
|
37
37
|
|
|
38
|
+
// ─── Security (CORS + security headers) ───
|
|
39
|
+
|
|
40
|
+
const CORS_ORIGIN = process.env.CORS_ORIGIN ?? 'http://localhost:3000';
|
|
41
|
+
|
|
42
|
+
await app.register(cors({
|
|
43
|
+
origin: CORS_ORIGIN,
|
|
44
|
+
credentials: true,
|
|
45
|
+
maxAge: 86400,
|
|
46
|
+
}));
|
|
47
|
+
|
|
48
|
+
await app.register(security({
|
|
49
|
+
hsts: { maxAge: 31536000, includeSubDomains: true },
|
|
50
|
+
referrerPolicy: 'strict-origin-when-cross-origin',
|
|
51
|
+
}));
|
|
52
|
+
|
|
53
|
+
// ─── Routes ───
|
|
54
|
+
|
|
38
55
|
const CreateUserSchema = Type.Object({
|
|
39
56
|
name: Type.String(),
|
|
40
57
|
email: Type.String({ format: 'email' }),
|
|
@@ -47,16 +64,13 @@ app.get('/users', (req, reply) => {
|
|
|
47
64
|
return reply.json(users);
|
|
48
65
|
});
|
|
49
66
|
|
|
50
|
-
app.
|
|
51
|
-
method: 'POST',
|
|
52
|
-
url: '/users',
|
|
67
|
+
app.post('/users', {
|
|
53
68
|
schema: { body: CreateUserSchema },
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
},
|
|
69
|
+
}, (req, reply) => {
|
|
70
|
+
const { name, email } = req.parsedBody;
|
|
71
|
+
const user = { id: nextId++, name, email };
|
|
72
|
+
users.push(user);
|
|
73
|
+
return reply.status(201).json(user);
|
|
60
74
|
});
|
|
61
75
|
|
|
62
76
|
app.get('/users/:id', (req, reply) => {
|
|
@@ -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,
|
|
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;SACd;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;;;;CA+F1B,CAAC"}
|
|
@@ -1,42 +1,59 @@
|
|
|
1
1
|
export const rpcApiTemplate = {
|
|
2
|
-
|
|
3
|
-
name:
|
|
4
|
-
version:
|
|
5
|
-
type:
|
|
2
|
+
"package.json": JSON.stringify({
|
|
3
|
+
name: "{{name}}",
|
|
4
|
+
version: "0.0.1",
|
|
5
|
+
type: "module",
|
|
6
6
|
scripts: {
|
|
7
|
-
dev:
|
|
8
|
-
build:
|
|
9
|
-
start:
|
|
7
|
+
dev: "npx tsx --watch src/index.ts",
|
|
8
|
+
build: "tsc",
|
|
9
|
+
start: "node dist/index.js",
|
|
10
10
|
},
|
|
11
11
|
dependencies: {
|
|
12
|
-
celsian:
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
celsian: "latest",
|
|
13
|
+
"@celsian/rpc": "latest",
|
|
14
|
+
"@sinclair/typebox": "^0.34.0",
|
|
15
15
|
},
|
|
16
16
|
devDependencies: {
|
|
17
|
-
typescript:
|
|
18
|
-
tsx:
|
|
17
|
+
typescript: "^5.7.0",
|
|
18
|
+
tsx: "^4.0.0",
|
|
19
19
|
},
|
|
20
20
|
}, null, 2),
|
|
21
|
-
|
|
21
|
+
"tsconfig.json": JSON.stringify({
|
|
22
22
|
compilerOptions: {
|
|
23
|
-
target:
|
|
24
|
-
module:
|
|
25
|
-
moduleResolution:
|
|
23
|
+
target: "ES2022",
|
|
24
|
+
module: "ESNext",
|
|
25
|
+
moduleResolution: "bundler",
|
|
26
26
|
strict: true,
|
|
27
27
|
esModuleInterop: true,
|
|
28
28
|
skipLibCheck: true,
|
|
29
|
-
outDir:
|
|
30
|
-
rootDir:
|
|
29
|
+
outDir: "dist",
|
|
30
|
+
rootDir: "src",
|
|
31
31
|
},
|
|
32
|
-
include: [
|
|
32
|
+
include: ["src"],
|
|
33
33
|
}, null, 2),
|
|
34
|
-
|
|
34
|
+
"src/index.ts": `import { createApp, serve, cors, security } from 'celsian';
|
|
35
35
|
import { procedure, router, RPCHandler } from '@celsian/rpc';
|
|
36
36
|
import { Type } from '@sinclair/typebox';
|
|
37
37
|
|
|
38
38
|
const app = createApp();
|
|
39
39
|
|
|
40
|
+
// ─── Security (CORS + security headers) ───
|
|
41
|
+
|
|
42
|
+
const CORS_ORIGIN = process.env.CORS_ORIGIN ?? 'http://localhost:3000';
|
|
43
|
+
|
|
44
|
+
await app.register(cors({
|
|
45
|
+
origin: CORS_ORIGIN,
|
|
46
|
+
credentials: true,
|
|
47
|
+
maxAge: 86400,
|
|
48
|
+
}));
|
|
49
|
+
|
|
50
|
+
await app.register(security({
|
|
51
|
+
hsts: { maxAge: 31536000, includeSubDomains: true },
|
|
52
|
+
referrerPolicy: 'strict-origin-when-cross-origin',
|
|
53
|
+
}));
|
|
54
|
+
|
|
55
|
+
// ─── Routes ───
|
|
56
|
+
|
|
40
57
|
const appRouter = router({
|
|
41
58
|
greeting: {
|
|
42
59
|
hello: procedure
|
|
@@ -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,
|
|
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;SACd;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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-celsian",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"create-celsian": "dist/index.js"
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"dist"
|
|
12
12
|
],
|
|
13
13
|
"license": "MIT",
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=20"
|
|
16
|
+
},
|
|
14
17
|
"scripts": {
|
|
15
18
|
"build": "tsc -b"
|
|
16
19
|
}
|