@trinacria/cli 0.1.1-alpha.1
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.
Potentially problematic release.
This version of @trinacria/cli might be problematic. Click here for more details.
- package/README.md +109 -0
- package/README.npm.md +109 -0
- package/dist/cli.d.ts +19 -0
- package/dist/cli.js +88 -0
- package/dist/commands/build.d.ts +2 -0
- package/dist/commands/build.js +102 -0
- package/dist/commands/dev.d.ts +28 -0
- package/dist/commands/dev.js +186 -0
- package/dist/commands/new.d.ts +41 -0
- package/dist/commands/new.js +280 -0
- package/dist/commands/start.d.ts +13 -0
- package/dist/commands/start.js +110 -0
- package/dist/config/config.contract.d.ts +9 -0
- package/dist/config/config.contract.js +2 -0
- package/dist/config/default-config.d.ts +2 -0
- package/dist/config/default-config.js +11 -0
- package/dist/config/load-config.d.ts +2 -0
- package/dist/config/load-config.js +113 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -0
- package/dist/templates/api-events-rabbitmq/.env.example +23 -0
- package/dist/templates/api-events-rabbitmq/Dockerfile +18 -0
- package/dist/templates/api-events-rabbitmq/README.md +97 -0
- package/dist/templates/api-events-rabbitmq/docker-compose.yml +30 -0
- package/dist/templates/api-events-rabbitmq/package.json +21 -0
- package/dist/templates/api-events-rabbitmq/src/global/config.service.ts +95 -0
- package/dist/templates/api-events-rabbitmq/src/global/controllers/swagger/docs.html +28 -0
- package/dist/templates/api-events-rabbitmq/src/global/controllers/swagger/swagger-docs.controller.ts +79 -0
- package/dist/templates/api-events-rabbitmq/src/global/rabbitmq.service.ts +86 -0
- package/dist/templates/api-events-rabbitmq/src/global/register-global-controllers.ts +20 -0
- package/dist/templates/api-events-rabbitmq/src/main.ts +89 -0
- package/dist/templates/api-events-rabbitmq/src/modules/events/dto/event.dto.ts +24 -0
- package/dist/templates/api-events-rabbitmq/src/modules/events/dto/index.ts +2 -0
- package/dist/templates/api-events-rabbitmq/src/modules/events/dto/publish-event.dto.ts +12 -0
- package/dist/templates/api-events-rabbitmq/src/modules/events/events.controller.ts +76 -0
- package/dist/templates/api-events-rabbitmq/src/modules/events/events.module.ts +27 -0
- package/dist/templates/api-events-rabbitmq/src/modules/events/events.provider.ts +28 -0
- package/dist/templates/api-events-rabbitmq/src/modules/events/events.service.ts +19 -0
- package/dist/templates/api-events-rabbitmq/src/modules/events/events.store.ts +42 -0
- package/dist/templates/api-events-rabbitmq/src/modules/events/events.tokens.ts +11 -0
- package/dist/templates/api-events-rabbitmq/trinacria.config.mjs +12 -0
- package/dist/templates/api-events-rabbitmq/tsconfig.json +14 -0
- package/dist/templates/api-events-redis/.env.example +18 -0
- package/dist/templates/api-events-redis/Dockerfile +18 -0
- package/dist/templates/api-events-redis/README.md +97 -0
- package/dist/templates/api-events-redis/docker-compose.yml +33 -0
- package/dist/templates/api-events-redis/package.json +18 -0
- package/dist/templates/api-events-redis/src/global/config.service.ts +93 -0
- package/dist/templates/api-events-redis/src/global/controllers/swagger/docs.html +28 -0
- package/dist/templates/api-events-redis/src/global/controllers/swagger/swagger-docs.controller.ts +79 -0
- package/dist/templates/api-events-redis/src/global/redis.service.ts +50 -0
- package/dist/templates/api-events-redis/src/global/register-global-controllers.ts +20 -0
- package/dist/templates/api-events-redis/src/main.ts +88 -0
- package/dist/templates/api-events-redis/src/modules/events/dto/event.dto.ts +24 -0
- package/dist/templates/api-events-redis/src/modules/events/dto/index.ts +2 -0
- package/dist/templates/api-events-redis/src/modules/events/dto/publish-event.dto.ts +12 -0
- package/dist/templates/api-events-redis/src/modules/events/events.controller.ts +76 -0
- package/dist/templates/api-events-redis/src/modules/events/events.module.ts +27 -0
- package/dist/templates/api-events-redis/src/modules/events/events.provider.ts +28 -0
- package/dist/templates/api-events-redis/src/modules/events/events.service.ts +19 -0
- package/dist/templates/api-events-redis/src/modules/events/events.store.ts +42 -0
- package/dist/templates/api-events-redis/src/modules/events/events.tokens.ts +11 -0
- package/dist/templates/api-events-redis/trinacria.config.mjs +12 -0
- package/dist/templates/api-events-redis/tsconfig.json +14 -0
- package/dist/templates/api-mongoose-mongodb/.env.example +17 -0
- package/dist/templates/api-mongoose-mongodb/Dockerfile +18 -0
- package/dist/templates/api-mongoose-mongodb/README.md +98 -0
- package/dist/templates/api-mongoose-mongodb/docker-compose.yml +34 -0
- package/dist/templates/api-mongoose-mongodb/package.json +17 -0
- package/dist/templates/api-mongoose-mongodb/src/global/config.service.ts +92 -0
- package/dist/templates/api-mongoose-mongodb/src/global/controllers/swagger/docs.html +28 -0
- package/dist/templates/api-mongoose-mongodb/src/global/controllers/swagger/swagger-docs.controller.ts +79 -0
- package/dist/templates/api-mongoose-mongodb/src/global/mongoose-schema.provider.ts +18 -0
- package/dist/templates/api-mongoose-mongodb/src/global/mongoose.service.ts +36 -0
- package/dist/templates/api-mongoose-mongodb/src/global/register-global-controllers.ts +20 -0
- package/dist/templates/api-mongoose-mongodb/src/main.ts +70 -0
- package/dist/templates/api-mongoose-mongodb/src/modules/users/dto/create-user.dto.ts +14 -0
- package/dist/templates/api-mongoose-mongodb/src/modules/users/dto/index.ts +2 -0
- package/dist/templates/api-mongoose-mongodb/src/modules/users/dto/public-user.dto.ts +22 -0
- package/dist/templates/api-mongoose-mongodb/src/modules/users/users.controller.ts +89 -0
- package/dist/templates/api-mongoose-mongodb/src/modules/users/users.module.ts +17 -0
- package/dist/templates/api-mongoose-mongodb/src/modules/users/users.schema.ts +35 -0
- package/dist/templates/api-mongoose-mongodb/src/modules/users/users.service.ts +35 -0
- package/dist/templates/api-mongoose-mongodb/src/modules/users/users.tokens.ts +9 -0
- package/dist/templates/api-mongoose-mongodb/trinacria.config.mjs +12 -0
- package/dist/templates/api-mongoose-mongodb/tsconfig.json +14 -0
- package/dist/templates/api-prisma-postgresql/.env.example +19 -0
- package/dist/templates/api-prisma-postgresql/Dockerfile +24 -0
- package/dist/templates/api-prisma-postgresql/README.md +107 -0
- package/dist/templates/api-prisma-postgresql/docker-compose.yml +38 -0
- package/dist/templates/api-prisma-postgresql/package.json +26 -0
- package/dist/templates/api-prisma-postgresql/prisma/schema.prisma +15 -0
- package/dist/templates/api-prisma-postgresql/prisma.config.ts +9 -0
- package/dist/templates/api-prisma-postgresql/src/global/config.service.ts +92 -0
- package/dist/templates/api-prisma-postgresql/src/global/controllers/swagger/docs.html +28 -0
- package/dist/templates/api-prisma-postgresql/src/global/controllers/swagger/swagger-docs.controller.ts +79 -0
- package/dist/templates/api-prisma-postgresql/src/global/prisma.service.ts +20 -0
- package/dist/templates/api-prisma-postgresql/src/global/register-global-controllers.ts +20 -0
- package/dist/templates/api-prisma-postgresql/src/main.ts +70 -0
- package/dist/templates/api-prisma-postgresql/src/modules/users/dto/create-user.dto.ts +14 -0
- package/dist/templates/api-prisma-postgresql/src/modules/users/dto/index.ts +2 -0
- package/dist/templates/api-prisma-postgresql/src/modules/users/dto/public-user.dto.ts +22 -0
- package/dist/templates/api-prisma-postgresql/src/modules/users/users.controller.ts +89 -0
- package/dist/templates/api-prisma-postgresql/src/modules/users/users.module.ts +15 -0
- package/dist/templates/api-prisma-postgresql/src/modules/users/users.service.ts +36 -0
- package/dist/templates/api-prisma-postgresql/src/modules/users/users.tokens.ts +7 -0
- package/dist/templates/api-prisma-postgresql/trinacria.config.mjs +12 -0
- package/dist/templates/api-prisma-postgresql/tsconfig.json +14 -0
- package/dist/templates/app-starter/.env.example +1 -0
- package/dist/templates/app-starter/Dockerfile +13 -0
- package/dist/templates/app-starter/README.md +32 -0
- package/dist/templates/app-starter/docker-compose.yml +8 -0
- package/dist/templates/app-starter/package.json +14 -0
- package/dist/templates/app-starter/src/main.ts +14 -0
- package/dist/templates/app-starter/trinacria.config.mjs +12 -0
- package/dist/templates/app-starter/tsconfig.json +14 -0
- package/dist/templates/cron-example/.env.example +11 -0
- package/dist/templates/cron-example/Dockerfile +13 -0
- package/dist/templates/cron-example/README.md +68 -0
- package/dist/templates/cron-example/docker-compose.yml +11 -0
- package/dist/templates/cron-example/package.json +15 -0
- package/dist/templates/cron-example/src/config.service.ts +46 -0
- package/dist/templates/cron-example/src/main.ts +41 -0
- package/dist/templates/cron-example/src/modules/cron/cron.module.ts +15 -0
- package/dist/templates/cron-example/src/modules/cron/cron.tokens.ts +6 -0
- package/dist/templates/cron-example/src/modules/cron/example-cron-jobs.provider.ts +48 -0
- package/dist/templates/cron-example/trinacria.config.mjs +12 -0
- package/dist/templates/cron-example/tsconfig.json +14 -0
- package/package.json +32 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Cron Example App
|
|
2
|
+
|
|
3
|
+
App minimale di esempio per usare `@trinacria/cron`.
|
|
4
|
+
|
|
5
|
+
Mostra:
|
|
6
|
+
|
|
7
|
+
- job a intervallo (`interval`)
|
|
8
|
+
- job con espressione cron (`cron`)
|
|
9
|
+
- protezione overlap con `allowConcurrent: false`
|
|
10
|
+
- hook `onError` e `onEvent` del plugin
|
|
11
|
+
|
|
12
|
+
## Requisiti
|
|
13
|
+
|
|
14
|
+
- build dei package framework:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm run build:packages
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Setup
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
cp apps/cron-example/.env.example apps/cron-example/.env.development
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Avvio
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm run dev -w cron-example
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Oppure dalla root:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm run dev:cron-example
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Docker quick start
|
|
39
|
+
|
|
40
|
+
1. Crea il file `.env` da template:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
cp apps/cron-example/.env.example apps/cron-example/.env
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
2. Avvia il container:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
docker compose \
|
|
50
|
+
--env-file apps/cron-example/.env \
|
|
51
|
+
-f apps/cron-example/docker-compose.yml \
|
|
52
|
+
up --build -d
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
3. Ferma il container:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
docker compose \
|
|
59
|
+
--env-file apps/cron-example/.env \
|
|
60
|
+
-f apps/cron-example/docker-compose.yml \
|
|
61
|
+
down
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Job inclusi
|
|
65
|
+
|
|
66
|
+
- `cron-example:heartbeat` ogni `HEARTBEAT_INTERVAL_MS` (default `10000`)
|
|
67
|
+
- `cron-example:minute-tick` ogni minuto (`* * * * *`)
|
|
68
|
+
- `cron-example:overlap-guard-demo` ogni 5 secondi ma con lavoro da 8 secondi per mostrare skip overlap
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
services:
|
|
2
|
+
app:
|
|
3
|
+
build:
|
|
4
|
+
context: ../..
|
|
5
|
+
dockerfile: apps/cron-example/Dockerfile
|
|
6
|
+
environment:
|
|
7
|
+
ENV: production
|
|
8
|
+
CRON_ENABLED: ${DOCKER_CRON_ENABLED}
|
|
9
|
+
CRON_TICK_MS: ${DOCKER_CRON_TICK_MS}
|
|
10
|
+
HEARTBEAT_INTERVAL_MS: ${DOCKER_HEARTBEAT_INTERVAL_MS}
|
|
11
|
+
restart: unless-stopped
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cron-example",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "commonjs",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"start": "node ../../packages/cli/dist/index.js start",
|
|
7
|
+
"build": "node ../../packages/cli/dist/index.js build",
|
|
8
|
+
"dev": "node ../../packages/cli/dist/index.js dev"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@trinacria/cli": "*",
|
|
12
|
+
"@trinacria/core": "*",
|
|
13
|
+
"@trinacria/cron": "*"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createToken } from "@trinacria/core";
|
|
2
|
+
|
|
3
|
+
export interface AppConfig {
|
|
4
|
+
readonly CRON_ENABLED: boolean;
|
|
5
|
+
readonly CRON_TICK_MS: number;
|
|
6
|
+
readonly HEARTBEAT_INTERVAL_MS: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const CONFIG_SERVICE = createToken<ConfigService>(
|
|
10
|
+
"CRON_EXAMPLE_CONFIG_SERVICE",
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
function parseBoolean(value: string | undefined, fallback: boolean): boolean {
|
|
14
|
+
if (value == null || value.trim() === "") {
|
|
15
|
+
return fallback;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const normalized = value.trim().toLowerCase();
|
|
19
|
+
return normalized === "1" || normalized === "true" || normalized === "yes";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function parseNumber(value: string | undefined, fallback: number): number {
|
|
23
|
+
if (value == null || value.trim() === "") {
|
|
24
|
+
return fallback;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const parsed = Number(value);
|
|
28
|
+
if (!Number.isFinite(parsed)) {
|
|
29
|
+
return fallback;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return parsed;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class ConfigService {
|
|
36
|
+
getAll(): AppConfig {
|
|
37
|
+
return {
|
|
38
|
+
CRON_ENABLED: parseBoolean(process.env.CRON_ENABLED, true),
|
|
39
|
+
CRON_TICK_MS: parseNumber(process.env.CRON_TICK_MS, 1_000),
|
|
40
|
+
HEARTBEAT_INTERVAL_MS: parseNumber(
|
|
41
|
+
process.env.HEARTBEAT_INTERVAL_MS,
|
|
42
|
+
10_000,
|
|
43
|
+
),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ConsoleLogger, TrinacriaApp, valueProvider } from "@trinacria/core";
|
|
2
|
+
import { createCronPlugin } from "@trinacria/cron";
|
|
3
|
+
import { CONFIG_SERVICE, ConfigService } from "./config.service";
|
|
4
|
+
import { CronModule } from "./modules/cron/cron.module";
|
|
5
|
+
|
|
6
|
+
async function bootstrap() {
|
|
7
|
+
const app = new TrinacriaApp();
|
|
8
|
+
const configService = new ConfigService();
|
|
9
|
+
const config = configService.getAll();
|
|
10
|
+
const logger = new ConsoleLogger("cron-example");
|
|
11
|
+
|
|
12
|
+
app.registerGlobalProvider(valueProvider(CONFIG_SERVICE, configService));
|
|
13
|
+
|
|
14
|
+
if (config.CRON_ENABLED) {
|
|
15
|
+
app.use(
|
|
16
|
+
createCronPlugin({
|
|
17
|
+
cronTickMs: config.CRON_TICK_MS,
|
|
18
|
+
onError: (error, job) => {
|
|
19
|
+
logger.error(`Cron job error: ${job.name}`, error);
|
|
20
|
+
},
|
|
21
|
+
onEvent: (event) => {
|
|
22
|
+
logger.info(
|
|
23
|
+
`Cron event job=${event.jobName} status=${event.status} attempts=${event.attempts} durationMs=${event.durationMs}`,
|
|
24
|
+
);
|
|
25
|
+
},
|
|
26
|
+
}),
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
await app.registerModule(CronModule);
|
|
30
|
+
logger.info("Cron plugin enabled");
|
|
31
|
+
} else {
|
|
32
|
+
logger.warn("Cron disabled (CRON_ENABLED=false)");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
await app.start();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
bootstrap().catch((error) => {
|
|
39
|
+
console.error(error);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineModule } from "@trinacria/core";
|
|
2
|
+
import { cronProvider } from "@trinacria/cron";
|
|
3
|
+
import { CONFIG_SERVICE } from "../../config.service";
|
|
4
|
+
import { ExampleCronJobsProvider } from "./example-cron-jobs.provider";
|
|
5
|
+
import { CRON_EXAMPLE_JOBS_PROVIDER } from "./cron.tokens";
|
|
6
|
+
|
|
7
|
+
export const CronModule = defineModule({
|
|
8
|
+
name: "CronModule",
|
|
9
|
+
providers: [
|
|
10
|
+
cronProvider(CRON_EXAMPLE_JOBS_PROVIDER, ExampleCronJobsProvider, [
|
|
11
|
+
CONFIG_SERVICE,
|
|
12
|
+
]),
|
|
13
|
+
],
|
|
14
|
+
exports: [CRON_EXAMPLE_JOBS_PROVIDER],
|
|
15
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ConsoleLogger } from "@trinacria/core";
|
|
2
|
+
import type { CronJobDefinition, CronJobProvider } from "@trinacria/cron";
|
|
3
|
+
import { ConfigService } from "../../config.service";
|
|
4
|
+
|
|
5
|
+
function wait(ms: number): Promise<void> {
|
|
6
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export class ExampleCronJobsProvider implements CronJobProvider {
|
|
10
|
+
private readonly logger = new ConsoleLogger("cron-example:jobs");
|
|
11
|
+
|
|
12
|
+
constructor(private readonly config: ConfigService) {}
|
|
13
|
+
|
|
14
|
+
jobs(): readonly CronJobDefinition[] {
|
|
15
|
+
const { HEARTBEAT_INTERVAL_MS } = this.config.getAll();
|
|
16
|
+
|
|
17
|
+
return [
|
|
18
|
+
{
|
|
19
|
+
name: "cron-example:heartbeat",
|
|
20
|
+
schedule: { type: "interval", everyMs: HEARTBEAT_INTERVAL_MS },
|
|
21
|
+
runOnInit: true,
|
|
22
|
+
run: ({ scheduledAt }) => {
|
|
23
|
+
this.logger.info(
|
|
24
|
+
`[heartbeat] scheduledAt=${scheduledAt.toISOString()} intervalMs=${HEARTBEAT_INTERVAL_MS}`,
|
|
25
|
+
);
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "cron-example:minute-tick",
|
|
30
|
+
schedule: { type: "cron", expression: "* * * * *" },
|
|
31
|
+
run: ({ scheduledAt }) => {
|
|
32
|
+
this.logger.info(
|
|
33
|
+
`[minute-tick] scheduledAt=${scheduledAt.toISOString()}`,
|
|
34
|
+
);
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "cron-example:overlap-guard-demo",
|
|
39
|
+
schedule: { type: "interval", everyMs: 5_000 },
|
|
40
|
+
allowConcurrent: false,
|
|
41
|
+
run: async () => {
|
|
42
|
+
await wait(8_000);
|
|
43
|
+
this.logger.info("[overlap-guard-demo] completed");
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** @type {import('@trinacria/cli').TrinacriaConfig} */
|
|
2
|
+
|
|
3
|
+
const config = {
|
|
4
|
+
entry: "src/main.ts",
|
|
5
|
+
outDir: "dist",
|
|
6
|
+
watchDir: "src",
|
|
7
|
+
env: "development",
|
|
8
|
+
crashLoopWindowMs: 15_000,
|
|
9
|
+
maxConsecutiveCrashRestarts: 3,
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default config;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"types": ["node"],
|
|
4
|
+
"target": "ES2022",
|
|
5
|
+
"module": "CommonJS",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"declaration": true,
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"rootDir": "src",
|
|
11
|
+
"outDir": "dist"
|
|
12
|
+
},
|
|
13
|
+
"include": ["src"]
|
|
14
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@trinacria/cli",
|
|
3
|
+
"version": "0.1.1-alpha.1",
|
|
4
|
+
"private": false,
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"trinacria": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc && node scripts/copy-templates.mjs && chmod +x dist/index.js",
|
|
12
|
+
"test": "tsx --test test/**/*.test.ts",
|
|
13
|
+
"test:coverage": "tsx --test --experimental-test-coverage --test-coverage-include=src/**/*.ts test/**/*.test.ts"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"chokidar": "^5.0.0",
|
|
17
|
+
"tsx": "^4.21.0",
|
|
18
|
+
"typescript": "^5.9.3"
|
|
19
|
+
},
|
|
20
|
+
"peerDependencies": {
|
|
21
|
+
"@trinacria/core": "*"
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/tascaenzo/trinacria.git",
|
|
26
|
+
"directory": "packages/cli"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist",
|
|
30
|
+
"README.md"
|
|
31
|
+
]
|
|
32
|
+
}
|