@objectifthunes/create-sandstone 0.2.0 → 1.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.
Files changed (58) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +31 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/add-adapter.d.ts +2 -0
  6. package/dist/commands/add-adapter.d.ts.map +1 -0
  7. package/dist/commands/add-adapter.js +683 -0
  8. package/dist/commands/add-adapter.js.map +1 -0
  9. package/dist/commands/generate-adapter.d.ts +2 -0
  10. package/dist/commands/generate-adapter.d.ts.map +1 -0
  11. package/dist/commands/generate-adapter.js +467 -0
  12. package/dist/commands/generate-adapter.js.map +1 -0
  13. package/dist/commands/generate-entity.d.ts +2 -0
  14. package/dist/commands/generate-entity.d.ts.map +1 -0
  15. package/dist/commands/generate-entity.js +210 -0
  16. package/dist/commands/generate-entity.js.map +1 -0
  17. package/dist/generator.d.ts.map +1 -1
  18. package/dist/generator.js +7 -0
  19. package/dist/generator.js.map +1 -1
  20. package/dist/index.js +3 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/presets.d.ts +23 -3
  23. package/dist/presets.d.ts.map +1 -1
  24. package/dist/presets.js +48 -1
  25. package/dist/presets.js.map +1 -1
  26. package/dist/prompts.d.ts.map +1 -1
  27. package/dist/prompts.js +181 -7
  28. package/dist/prompts.js.map +1 -1
  29. package/dist/templates/claude-md.d.ts.map +1 -1
  30. package/dist/templates/claude-md.js +470 -2
  31. package/dist/templates/claude-md.js.map +1 -1
  32. package/dist/templates/docker-compose.d.ts.map +1 -1
  33. package/dist/templates/docker-compose.js +42 -0
  34. package/dist/templates/docker-compose.js.map +1 -1
  35. package/dist/templates/env-example.d.ts.map +1 -1
  36. package/dist/templates/env-example.js +81 -2
  37. package/dist/templates/env-example.js.map +1 -1
  38. package/dist/templates/infrastructure.d.ts.map +1 -1
  39. package/dist/templates/infrastructure.js +431 -27
  40. package/dist/templates/infrastructure.js.map +1 -1
  41. package/dist/templates/main-express.d.ts.map +1 -1
  42. package/dist/templates/main-express.js +41 -6
  43. package/dist/templates/main-express.js.map +1 -1
  44. package/dist/templates/main-fastify.d.ts +3 -0
  45. package/dist/templates/main-fastify.d.ts.map +1 -0
  46. package/dist/templates/main-fastify.js +73 -0
  47. package/dist/templates/main-fastify.js.map +1 -0
  48. package/dist/templates/main-hono.d.ts.map +1 -1
  49. package/dist/templates/main-hono.js +45 -9
  50. package/dist/templates/main-hono.js.map +1 -1
  51. package/dist/templates/package-json.d.ts.map +1 -1
  52. package/dist/templates/package-json.js +67 -3
  53. package/dist/templates/package-json.js.map +1 -1
  54. package/dist/templates/test-setup.d.ts +1 -1
  55. package/dist/templates/test-setup.d.ts.map +1 -1
  56. package/dist/templates/test-setup.js +10 -39
  57. package/dist/templates/test-setup.js.map +1 -1
  58. package/package.json +8 -7
@@ -1,30 +1,65 @@
1
1
  export function mainExpressTemplate(config) {
2
+ const isSocketIo = config.realtime === 'socketio';
2
3
  const imports = [`import express from 'express'`];
3
- imports.push(`import { expressAdapter } from '@objectifthunes/sandstone-sdk/adapters'`);
4
- imports.push(`import { app } from './infrastructure.js'`);
5
- imports.push(`import { runMigrations } from '@objectifthunes/sandstone-sdk'`);
4
+ imports.push(`import { toExpressHandler } from '@objectifthunes/sandstone-sdk/adapters'`);
5
+ if (isSocketIo) {
6
+ imports.push(`import http from 'node:http'`);
7
+ imports.push(`import { createApp, runMigrations } from '@objectifthunes/sandstone-sdk'`);
8
+ imports.push(`import { appOptions, createRealtime } from './infrastructure.js'`);
9
+ if (config.dashboard) {
10
+ imports.push(`import { createDashboard } from './infrastructure.js'`);
11
+ }
12
+ }
13
+ else {
14
+ imports.push(`import { runMigrations } from '@objectifthunes/sandstone-sdk'`);
15
+ imports.push(`import { app } from './infrastructure.js'`);
16
+ if (config.dashboard) {
17
+ imports.push(`import { dashboardHandler } from './infrastructure.js'`);
18
+ }
19
+ }
6
20
  const lines = [];
7
21
  lines.push(imports.join('\n'));
8
22
  lines.push('');
9
23
  lines.push('const server = express()');
10
24
  lines.push('server.use(express.json())');
11
25
  lines.push('');
26
+ if (isSocketIo) {
27
+ lines.push('const httpServer = http.createServer(server)');
28
+ lines.push('const realtime = createRealtime(httpServer)');
29
+ lines.push('const app = await createApp({ ...appOptions, realtime })');
30
+ lines.push('');
31
+ }
12
32
  // Health check
13
- lines.push(`server.get('/health', expressAdapter(app.healthHandler))`);
33
+ lines.push(`server.get('/health', toExpressHandler(app.healthHandler))`);
14
34
  lines.push('');
15
35
  // GraphQL
16
36
  if (config.graphql) {
17
37
  lines.push(`if (app.graphqlHandler) {`);
18
- lines.push(` server.post('/graphql', expressAdapter(app.graphqlHandler))`);
38
+ lines.push(` server.post('/graphql', toExpressHandler(app.graphqlHandler))`);
19
39
  lines.push(`}`);
20
40
  lines.push('');
21
41
  }
42
+ // Dashboard
43
+ if (config.dashboard) {
44
+ if (isSocketIo) {
45
+ lines.push(`const dashboardHandler = createDashboard(app, {`);
46
+ lines.push(` secret: process.env.DASHBOARD_SECRET,`);
47
+ lines.push(`})`);
48
+ }
49
+ lines.push(`server.get('/_dashboard', toExpressHandler(dashboardHandler))`);
50
+ lines.push('');
51
+ }
22
52
  // Startup
23
53
  lines.push(`const port = Number(process.env.PORT ?? 3000)`);
24
54
  lines.push('');
25
55
  lines.push(`async function start() {`);
26
56
  lines.push(` await runMigrations(app.db, { includeBuiltIn: true })`);
27
- lines.push(` server.listen(port, () => {`);
57
+ if (isSocketIo) {
58
+ lines.push(` httpServer.listen(port, () => {`);
59
+ }
60
+ else {
61
+ lines.push(` server.listen(port, () => {`);
62
+ }
28
63
  lines.push(` app.logger.info({ port }, 'Server started')`);
29
64
  lines.push(` })`);
30
65
  lines.push(`}`);
@@ -1 +1 @@
1
- {"version":3,"file":"main-express.js","sourceRoot":"","sources":["../../src/templates/main-express.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,MAAqB;IACvD,MAAM,OAAO,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IACxF,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAE1D,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAE9E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,eAAe;IACf,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IACvE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,UAAU;IACV,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC5E,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,UAAU;IACV,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;IACxH,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"main-express.js","sourceRoot":"","sources":["../../src/templates/main-express.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectConfig } from '../presets.js';
2
+ export declare function mainFastifyTemplate(config: ProjectConfig): string;
3
+ //# sourceMappingURL=main-fastify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-fastify.d.ts","sourceRoot":"","sources":["../../src/templates/main-fastify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAgFjE"}
@@ -0,0 +1,73 @@
1
+ export function mainFastifyTemplate(config) {
2
+ const isSocketIo = config.realtime === 'socketio';
3
+ const imports = [`import Fastify from 'fastify'`];
4
+ imports.push(`import { toFastifyHandler } from '@objectifthunes/sandstone-sdk/adapters'`);
5
+ if (isSocketIo) {
6
+ imports.push(`import { createApp, runMigrations } from '@objectifthunes/sandstone-sdk'`);
7
+ imports.push(`import { appOptions, createRealtime } from './infrastructure.js'`);
8
+ if (config.dashboard) {
9
+ imports.push(`import { createDashboard } from './infrastructure.js'`);
10
+ }
11
+ }
12
+ else {
13
+ imports.push(`import { runMigrations } from '@objectifthunes/sandstone-sdk'`);
14
+ imports.push(`import { app } from './infrastructure.js'`);
15
+ if (config.dashboard) {
16
+ imports.push(`import { dashboardHandler } from './infrastructure.js'`);
17
+ }
18
+ }
19
+ const lines = [];
20
+ lines.push(imports.join('\n'));
21
+ lines.push('');
22
+ lines.push('const server = Fastify()');
23
+ lines.push('');
24
+ if (isSocketIo) {
25
+ lines.push('const httpServer = server.server');
26
+ lines.push('const realtime = createRealtime(httpServer)');
27
+ lines.push('const app = await createApp({ ...appOptions, realtime })');
28
+ lines.push('');
29
+ }
30
+ // Health check
31
+ lines.push(`server.get('/health', toFastifyHandler(app.healthHandler))`);
32
+ lines.push('');
33
+ // GraphQL
34
+ if (config.graphql) {
35
+ lines.push(`if (app.graphqlHandler) {`);
36
+ lines.push(` server.post('/graphql', toFastifyHandler(app.graphqlHandler))`);
37
+ lines.push(`}`);
38
+ lines.push('');
39
+ }
40
+ // Dashboard
41
+ if (config.dashboard) {
42
+ if (isSocketIo) {
43
+ lines.push(`const dashboardHandler = createDashboard(app, {`);
44
+ lines.push(` secret: process.env.DASHBOARD_SECRET,`);
45
+ lines.push(`})`);
46
+ }
47
+ lines.push(`server.get('/_dashboard', toFastifyHandler(dashboardHandler))`);
48
+ lines.push('');
49
+ }
50
+ // Startup
51
+ lines.push(`const port = Number(process.env.PORT ?? 3000)`);
52
+ lines.push('');
53
+ lines.push(`async function start() {`);
54
+ lines.push(` await runMigrations(app.db, { includeBuiltIn: true })`);
55
+ lines.push(` await server.listen({ port, host: '0.0.0.0' })`);
56
+ lines.push(` app.logger.info({ port }, 'Server started')`);
57
+ lines.push(`}`);
58
+ lines.push('');
59
+ lines.push(`start().catch((err) => {`);
60
+ lines.push(` app.logger.error('Failed to start server', { error: err instanceof Error ? err.message : String(err) })`);
61
+ lines.push(` process.exit(1)`);
62
+ lines.push(`})`);
63
+ lines.push('');
64
+ // Graceful shutdown
65
+ lines.push(`process.on('SIGTERM', async () => {`);
66
+ lines.push(` await server.close()`);
67
+ lines.push(` await app.shutdown()`);
68
+ lines.push(` process.exit(0)`);
69
+ lines.push(`})`);
70
+ lines.push('');
71
+ return lines.join('\n');
72
+ }
73
+ //# sourceMappingURL=main-fastify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-fastify.js","sourceRoot":"","sources":["../../src/templates/main-fastify.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"main-hono.d.ts","sourceRoot":"","sources":["../../src/templates/main-hono.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAmD9D"}
1
+ {"version":3,"file":"main-hono.d.ts","sourceRoot":"","sources":["../../src/templates/main-hono.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAyF9D"}
@@ -1,34 +1,70 @@
1
1
  export function mainHonoTemplate(config) {
2
+ const isSocketIo = config.realtime === 'socketio';
2
3
  const imports = [
3
4
  `import { Hono } from 'hono'`,
4
- `import { serve } from '@hono/node-server'`,
5
- `import { honoAdapter } from '@objectifthunes/sandstone-sdk/adapters'`,
6
- `import { runMigrations } from '@objectifthunes/sandstone-sdk'`,
7
- `import { app } from './infrastructure.js'`,
5
+ `import { serve, createAdaptorServer } from '@hono/node-server'`,
6
+ `import { toHonoHandler } from '@objectifthunes/sandstone-sdk/adapters'`,
8
7
  ];
8
+ if (isSocketIo) {
9
+ imports.push(`import { createApp, runMigrations } from '@objectifthunes/sandstone-sdk'`);
10
+ imports.push(`import { appOptions, createRealtime } from './infrastructure.js'`);
11
+ if (config.dashboard) {
12
+ imports.push(`import { createDashboard } from './infrastructure.js'`);
13
+ }
14
+ }
15
+ else {
16
+ imports.push(`import { runMigrations } from '@objectifthunes/sandstone-sdk'`);
17
+ imports.push(`import { app } from './infrastructure.js'`);
18
+ if (config.dashboard) {
19
+ imports.push(`import { dashboardHandler } from './infrastructure.js'`);
20
+ }
21
+ }
9
22
  const lines = [];
10
23
  lines.push(imports.join('\n'));
11
24
  lines.push('');
12
25
  lines.push('const server = new Hono()');
13
26
  lines.push('');
27
+ if (isSocketIo) {
28
+ lines.push('const httpServer = createAdaptorServer({ fetch: server.fetch })');
29
+ lines.push('const realtime = createRealtime(httpServer)');
30
+ lines.push('const app = await createApp({ ...appOptions, realtime })');
31
+ lines.push('');
32
+ }
14
33
  // Health check
15
- lines.push(`server.get('/health', honoAdapter(app.healthHandler))`);
34
+ lines.push(`server.get('/health', toHonoHandler(app.healthHandler))`);
16
35
  lines.push('');
17
36
  // GraphQL
18
37
  if (config.graphql) {
19
38
  lines.push(`if (app.graphqlHandler) {`);
20
- lines.push(` server.post('/graphql', honoAdapter(app.graphqlHandler))`);
39
+ lines.push(` server.post('/graphql', toHonoHandler(app.graphqlHandler))`);
21
40
  lines.push(`}`);
22
41
  lines.push('');
23
42
  }
43
+ // Dashboard
44
+ if (config.dashboard) {
45
+ if (isSocketIo) {
46
+ lines.push(`const dashboardHandler = createDashboard(app, {`);
47
+ lines.push(` secret: process.env.DASHBOARD_SECRET,`);
48
+ lines.push(`})`);
49
+ }
50
+ lines.push(`server.get('/_dashboard', toHonoHandler(dashboardHandler))`);
51
+ lines.push('');
52
+ }
24
53
  // Startup
25
54
  lines.push(`const port = Number(process.env.PORT ?? 3000)`);
26
55
  lines.push('');
27
56
  lines.push(`async function start() {`);
28
57
  lines.push(` await runMigrations(app.db, { includeBuiltIn: true })`);
29
- lines.push(` serve({ fetch: server.fetch, port }, () => {`);
30
- lines.push(` app.logger.info({ port }, 'Server started')`);
31
- lines.push(` })`);
58
+ if (isSocketIo) {
59
+ lines.push(` httpServer.listen(port, () => {`);
60
+ lines.push(` app.logger.info({ port }, 'Server started')`);
61
+ lines.push(` })`);
62
+ }
63
+ else {
64
+ lines.push(` serve({ fetch: server.fetch, port }, () => {`);
65
+ lines.push(` app.logger.info({ port }, 'Server started')`);
66
+ lines.push(` })`);
67
+ }
32
68
  lines.push(`}`);
33
69
  lines.push('');
34
70
  lines.push(`start().catch((err) => {`);
@@ -1 +1 @@
1
- {"version":3,"file":"main-hono.js","sourceRoot":"","sources":["../../src/templates/main-hono.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,MAAM,OAAO,GAAG;QACd,6BAA6B;QAC7B,2CAA2C;QAC3C,sEAAsE;QACtE,+DAA+D;QAC/D,2CAA2C;KAC5C,CAAC;IAEF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,eAAe;IACf,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,UAAU;IACV,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,UAAU;IACV,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;IACxH,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"main-hono.js","sourceRoot":"","sources":["../../src/templates/main-hono.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../src/templates/package-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA2FjE"}
1
+ {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../src/templates/package-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA+JjE"}
@@ -1,6 +1,6 @@
1
1
  export function packageJsonTemplate(config) {
2
2
  const deps = {
3
- '@objectifthunes/sandstone-sdk': '^0.5.0',
3
+ '@objectifthunes/sandstone-sdk': '^1.1.0',
4
4
  };
5
5
  const devDeps = {
6
6
  '@types/node': '^22.0.0',
@@ -8,8 +8,15 @@ export function packageJsonTemplate(config) {
8
8
  typescript: '^5.7.0',
9
9
  };
10
10
  // Database
11
- deps['pg'] = '^8.13.0';
12
- devDeps['@types/pg'] = '^8.0.0';
11
+ if (config.database === 'supabase') {
12
+ deps['pg'] = '^8.13.0';
13
+ devDeps['@types/pg'] = '^8.0.0';
14
+ }
15
+ else {
16
+ // default: pg
17
+ deps['pg'] = '^8.13.0';
18
+ devDeps['@types/pg'] = '^8.0.0';
19
+ }
13
20
  // Logger
14
21
  deps['pino'] = '^9.6.0';
15
22
  devDeps['pino-pretty'] = '^13.0.0';
@@ -24,6 +31,9 @@ export function packageJsonTemplate(config) {
24
31
  deps['hono'] = '^4.6.0';
25
32
  deps['@hono/node-server'] = '^1.13.0';
26
33
  }
34
+ else if (config.framework === 'fastify') {
35
+ deps['fastify'] = '^5.2.0';
36
+ }
27
37
  // Email
28
38
  if (config.email === 'resend') {
29
39
  deps['resend'] = '^4.1.0';
@@ -50,6 +60,60 @@ export function packageJsonTemplate(config) {
50
60
  if (config.cache === 'upstash') {
51
61
  deps['@upstash/redis'] = '^1.34.0';
52
62
  }
63
+ else if (config.cache === 'redis') {
64
+ deps['ioredis'] = '^5.0.0';
65
+ }
66
+ // memory uses no extra deps
67
+ // SMS
68
+ if (config.sms === 'sns') {
69
+ deps['@aws-sdk/client-sns'] = '^3.700.0';
70
+ }
71
+ // twilio uses fetch — no extra deps
72
+ // Push
73
+ // fcm uses jose + fetch — no extra deps
74
+ // apns uses node:http2 — no extra deps
75
+ // Realtime
76
+ if (config.realtime === 'socketio') {
77
+ deps['socket.io'] = '^4.0.0';
78
+ }
79
+ // pusher, ably use fetch — no extra deps
80
+ // Search
81
+ if (config.search === 'meilisearch') {
82
+ deps['meilisearch'] = '^0.46.0';
83
+ }
84
+ else if (config.search === 'typesense') {
85
+ deps['typesense'] = '^2.0.0';
86
+ }
87
+ // pg-search uses pg (already added above) — no extra deps
88
+ // Queue
89
+ if (config.queue === 'bullmq') {
90
+ deps['bullmq'] = '^5.0.0';
91
+ // bullmq requires ioredis
92
+ deps['ioredis'] = '^5.0.0';
93
+ }
94
+ else if (config.queue === 'pg-boss') {
95
+ deps['pg-boss'] = '^10.0.0';
96
+ }
97
+ // Scheduler (node-cron tick source)
98
+ if (config.scheduler) {
99
+ deps['node-cron'] = '^3.0.0';
100
+ devDeps['@types/node-cron'] = '^3.0.0';
101
+ }
102
+ // Feature flags
103
+ if (config.flags === 'launchdarkly') {
104
+ deps['@launchdarkly/node-server-sdk'] = '^9.0.0';
105
+ }
106
+ // pg-flags uses pg (already added) — no extra deps
107
+ // env-flags uses no extra deps
108
+ // Tracing
109
+ if (config.tracing) {
110
+ deps['@opentelemetry/api'] = '^1.9.0';
111
+ }
112
+ // Authorization
113
+ if (config.authz === 'casbin') {
114
+ deps['casbin'] = '^5.0.0';
115
+ }
116
+ // pg-authz uses pg (already added) — no extra deps
53
117
  // GraphQL
54
118
  if (config.graphql) {
55
119
  deps['graphql'] = '^16.9.0';
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../src/templates/package-json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../src/templates/package-json.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { ProjectConfig } from '../presets.js';
2
- export declare function testSetupTemplate(config: ProjectConfig): string;
2
+ export declare function testSetupTemplate(_config: ProjectConfig): string;
3
3
  //# sourceMappingURL=test-setup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../../src/templates/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA6C/D"}
1
+ {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../../src/templates/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAUhE"}
@@ -1,41 +1,12 @@
1
- export function testSetupTemplate(config) {
2
- const imports = [
3
- `import {`,
4
- ` createInMemoryDatabase,`,
5
- ` createInMemoryEmail,`,
6
- ` createInMemoryTokenSigner,`,
7
- ` createInMemoryLogger,`,
8
- `} from '@objectifthunes/sandstone-sdk/testing'`,
9
- `import { createApp } from '@objectifthunes/sandstone-sdk'`,
10
- ];
11
- if (config.graphql) {
12
- imports.push(`import { schema } from '../src/schema.js'`);
13
- }
14
- const lines = [];
15
- lines.push(imports.join('\n'));
16
- lines.push('');
17
- lines.push(`export async function createTestApp() {`);
18
- lines.push(` const db = createInMemoryDatabase()`);
19
- lines.push(` const email = createInMemoryEmail()`);
20
- lines.push(` const tokens = createInMemoryTokenSigner()`);
21
- lines.push(` const logger = createInMemoryLogger()`);
22
- lines.push('');
23
- lines.push(` const app = await createApp({`);
24
- lines.push(` db,`);
25
- lines.push(` logger,`);
26
- lines.push(` tokens,`);
27
- if (config.auth) {
28
- lines.push(` email: { transport: email, from: 'test@test.com' },`);
29
- lines.push(` auth: { otp: { length: 6, expiresIn: '10m' } },`);
30
- }
31
- if (config.graphql) {
32
- lines.push(` graphql: { schema },`);
33
- }
34
- lines.push(` })`);
35
- lines.push('');
36
- lines.push(` return { app, db, email, tokens, logger }`);
37
- lines.push(`}`);
38
- lines.push('');
39
- return lines.join('\n');
1
+ export function testSetupTemplate(_config) {
2
+ return `import { createTestApp } from '@objectifthunes/sandstone-sdk/testing'
3
+ import type { TestApp } from '@objectifthunes/sandstone-sdk/testing'
4
+
5
+ export type { TestApp }
6
+
7
+ export async function setupTest(): Promise<TestApp> {
8
+ return await createTestApp()
9
+ }
10
+ `;
40
11
  }
41
12
  //# sourceMappingURL=test-setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../../src/templates/test-setup.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,MAAM,OAAO,GAAG;QACd,UAAU;QACV,2BAA2B;QAC3B,wBAAwB;QACxB,8BAA8B;QAC9B,yBAAyB;QACzB,gDAAgD;QAChD,2DAA2D;KAC5D,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE1B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../../src/templates/test-setup.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,OAAO;;;;;;;;CAQR,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,16 +1,21 @@
1
1
  {
2
2
  "name": "@objectifthunes/create-sandstone",
3
- "version": "0.2.0",
3
+ "version": "1.0.0",
4
4
  "description": "Scaffold a complete backend project using @objectifthunes/sandstone-sdk",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": "ObjectifThunes",
8
8
  "bin": {
9
- "create-sandstone": "./dist/index.js"
9
+ "create-sandstone": "./dist/index.js",
10
+ "sandstone": "./dist/cli.js"
10
11
  },
11
12
  "files": [
12
13
  "dist"
13
14
  ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsc --watch"
18
+ },
14
19
  "dependencies": {
15
20
  "prompts": "^2.4.2"
16
21
  },
@@ -21,9 +26,5 @@
21
26
  },
22
27
  "engines": {
23
28
  "node": ">=20"
24
- },
25
- "scripts": {
26
- "build": "tsc",
27
- "dev": "tsc --watch"
28
29
  }
29
- }
30
+ }