@tatara/cli 0.0.0-stage → 0.1.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.
- package/LICENSE +21 -0
- package/dist/bin.mjs +3001 -0
- package/package.json +32 -3
- package/templates/features/admin/files/src/apps/admin/app.ts +4 -0
- package/templates/features/admin/files/src/apps/admin/server.ts +5 -0
- package/templates/features/admin/files/src/modules/example/routes/admin-greeting.routes.ts +24 -0
- package/templates/features/admin/files/src/modules/example/tests/admin.test.ts +20 -0
- package/templates/features/auth/files/src/core/auth/middleware.ts +29 -0
- package/templates/features/auth/files/src/core/auth/routes/me.routes.ts +36 -0
- package/templates/features/auth/files/src/core/auth/tests/me.test.ts +25 -0
- package/templates/features/auth-orgs/files+drizzle+mysql/src/core/auth/db/organization.schema.ts +38 -0
- package/templates/features/auth-orgs/files+drizzle+postgres/src/core/auth/db/organization.schema.ts +38 -0
- package/templates/features/auth-orgs/files+prisma/prisma/models/organization.prisma +41 -0
- package/templates/features/authz/files/src/core/authz/cache.ts +31 -0
- package/templates/features/authz/files/src/core/authz/catalog.ts +85 -0
- package/templates/features/authz/files/src/core/authz/commands/grant-role.ts +21 -0
- package/templates/features/authz/files/src/core/authz/commands/sync-permissions.ts +11 -0
- package/templates/features/authz/files/src/core/authz/constants.ts +32 -0
- package/templates/features/authz/files/src/core/authz/db/seed.ts +10 -0
- package/templates/features/authz/files/src/core/authz/middleware.ts +21 -0
- package/templates/features/authz/files/src/core/authz/permissions.ts +31 -0
- package/templates/features/authz/files/src/core/authz/resolver.ts +98 -0
- package/templates/features/authz/files/src/core/authz/routes/authorization.routes.ts +281 -0
- package/templates/features/authz/files/src/core/authz/services/audit.ts +24 -0
- package/templates/features/authz/files/src/core/authz/services/grants.ts +29 -0
- package/templates/features/authz/files/src/core/authz/services/members.ts +84 -0
- package/templates/features/authz/files/src/core/authz/services/roles.ts +73 -0
- package/templates/features/authz/files/src/core/authz/services/sync.ts +34 -0
- package/templates/features/authz/files/src/core/authz/system-roles.ts +9 -0
- package/templates/features/authz/files/src/core/authz/tests/authz.test.ts +146 -0
- package/templates/features/authz/files/src/core/authz/tests/error-messages.test.ts +34 -0
- package/templates/features/authz/files/src/core/authz/tests/request-body.test.ts +27 -0
- package/templates/features/authz/files/src/core/authz/types.ts +87 -0
- package/templates/features/authz/files/src/core/authz/validators.ts +99 -0
- package/templates/features/authz/files/tests/helpers/authz.ts +30 -0
- package/templates/features/authz/files+drizzle/src/core/authz/db/store.ts +275 -0
- package/templates/features/authz/files+drizzle+mysql/src/core/authz/db/authz.schema.ts +90 -0
- package/templates/features/authz/files+drizzle+postgres/src/core/authz/db/authz.schema.ts +88 -0
- package/templates/features/authz/files+prisma/prisma/models/authz.prisma +75 -0
- package/templates/features/authz/files+prisma/src/core/authz/db/store.ts +236 -0
- package/templates/features/base/files/AGENTS.md +71 -0
- package/templates/features/base/files/CLAUDE.md +1 -0
- package/templates/features/base/files/Dockerfile +16 -0
- package/templates/features/base/files/README.md +31 -0
- package/templates/features/base/files/_github/workflows/ci.yml +26 -0
- package/templates/features/base/files/biome.template.json +20 -0
- package/templates/features/base/files/dockerignore +8 -0
- package/templates/features/base/files/gitignore +9 -0
- package/templates/features/base/files/src/apps/api/app.ts +3 -0
- package/templates/features/base/files/src/apps/api/server.ts +5 -0
- package/templates/features/base/files/src/apps/cli/index.ts +6 -0
- package/templates/features/base/files/src/core/commands/define.ts +33 -0
- package/templates/features/base/files/src/core/commands/runner.ts +54 -0
- package/templates/features/base/files/src/core/commands/tests/flags.test.ts +16 -0
- package/templates/features/base/files/src/core/config/tests/env.test.ts +40 -0
- package/templates/features/base/files/src/core/http/app.ts +57 -0
- package/templates/features/base/files/src/core/http/context.ts +18 -0
- package/templates/features/base/files/src/core/http/errors.ts +79 -0
- package/templates/features/base/files/src/core/http/health.ts +25 -0
- package/templates/features/base/files/src/core/http/middleware/error-handler.ts +36 -0
- package/templates/features/base/files/src/core/http/middleware/request-context.ts +24 -0
- package/templates/features/base/files/src/core/http/middleware/validation.ts +17 -0
- package/templates/features/base/files/src/core/http/response.ts +72 -0
- package/templates/features/base/files/src/core/http/routes.ts +28 -0
- package/templates/features/base/files/src/core/http/server.ts +15 -0
- package/templates/features/base/files/src/core/logging/logger.ts +17 -0
- package/templates/features/base/files/src/core/process/lifecycle.ts +34 -0
- package/templates/features/base/files/src/modules/example/routes/greeting.routes.ts +27 -0
- package/templates/features/base/files/src/modules/example/services/greeting.service.ts +3 -0
- package/templates/features/base/files/src/modules/example/tests/greeting.test.ts +21 -0
- package/templates/features/base/files/src/modules/example/validators/greeting.validators.ts +9 -0
- package/templates/features/base/files/tests/helpers/api.ts +54 -0
- package/templates/features/base/files/tests/setup.ts +2 -0
- package/templates/features/base/files/tsconfig.json +20 -0
- package/templates/features/base/files/tsdown.config.ts +15 -0
- package/templates/features/base/files/vitest.config.ts +16 -0
- package/templates/features/better-auth/files/src/core/auth/auth.ts +26 -0
- package/templates/features/better-auth/files/src/core/auth/db/seed.ts +24 -0
- package/templates/features/better-auth/files/src/core/auth/delivery.ts +48 -0
- package/templates/features/better-auth/files/src/core/auth/openapi.ts +60 -0
- package/templates/features/better-auth/files/src/core/auth/principal.ts +40 -0
- package/templates/features/better-auth/files/src/core/auth/sms.ts +14 -0
- package/templates/features/better-auth/files/src/core/auth/tests/openapi.test.ts +45 -0
- package/templates/features/better-auth/files/tests/helpers/auth.ts +40 -0
- package/templates/features/better-auth/files+admin/src/core/auth/tests/openapi-admin.test.ts +8 -0
- package/templates/features/better-auth/files+auth-orgs/src/core/auth/tests/principal.test.ts +44 -0
- package/templates/features/better-auth/files+auth-orgs+authz/src/core/auth/tests/principal-authz.test.ts +40 -0
- package/templates/features/better-auth/files+drizzle+mysql/src/core/auth/adapter.ts +15 -0
- package/templates/features/better-auth/files+drizzle+mysql/src/core/auth/db/auth.schema.ts +57 -0
- package/templates/features/better-auth/files+drizzle+postgres/src/core/auth/adapter.ts +15 -0
- package/templates/features/better-auth/files+drizzle+postgres/src/core/auth/db/auth.schema.ts +56 -0
- package/templates/features/better-auth/files+prisma/prisma/models/auth.prisma +62 -0
- package/templates/features/better-auth/files+prisma+mysql/src/core/auth/adapter.ts +4 -0
- package/templates/features/better-auth/files+prisma+postgres/src/core/auth/adapter.ts +4 -0
- package/templates/features/db/files/src/core/db/commands/migrate.ts +12 -0
- package/templates/features/db/files/src/core/db/commands/reset.ts +19 -0
- package/templates/features/db/files/src/core/db/commands/seed.ts +13 -0
- package/templates/features/db/files/src/core/db/id.ts +13 -0
- package/templates/features/db/files/src/core/db/seed.ts +14 -0
- package/templates/features/db/files/src/core/db/tests/reset.test.ts +7 -0
- package/templates/features/db/files/tests/global-setup.ts +27 -0
- package/templates/features/db/files/tests/helpers/database-url.ts +9 -0
- package/templates/features/db/files/tests/helpers/db.ts +7 -0
- package/templates/features/db/files+mysql+drizzle/src/core/db/admin.ts +53 -0
- package/templates/features/db/files+mysql+prisma/src/core/db/admin.ts +78 -0
- package/templates/features/db/files+postgres/src/core/db/admin.ts +50 -0
- package/templates/features/drizzle/files+mysql/drizzle.config.ts +12 -0
- package/templates/features/drizzle/files+mysql/src/core/db/client.ts +20 -0
- package/templates/features/drizzle/files+mysql/src/core/db/migrate.ts +13 -0
- package/templates/features/drizzle/files+postgres/drizzle.config.ts +12 -0
- package/templates/features/drizzle/files+postgres/src/core/db/client.ts +20 -0
- package/templates/features/drizzle/files+postgres/src/core/db/migrate.ts +13 -0
- package/templates/features/email/files/src/core/email/commands/send-test.ts +13 -0
- package/templates/features/email/files/src/core/email/send.ts +22 -0
- package/templates/features/email/files/src/core/email/tests/email.test.ts +8 -0
- package/templates/features/i18n/files/src/core/i18n/index.ts +41 -0
- package/templates/features/i18n/files/src/core/i18n/tests/i18n.test.ts +21 -0
- package/templates/features/i18n/files/src/locales/ar.json +10 -0
- package/templates/features/i18n/files/src/locales/en.json +10 -0
- package/templates/features/jobs/files/src/apps/cron/index.ts +25 -0
- package/templates/features/jobs/files/src/apps/worker/index.ts +24 -0
- package/templates/features/jobs/files/src/core/jobs/commands/enqueue.ts +13 -0
- package/templates/features/jobs/files/src/core/jobs/define.ts +37 -0
- package/templates/features/jobs/files/src/core/jobs/lock.ts +17 -0
- package/templates/features/jobs/files/src/core/jobs/process.ts +19 -0
- package/templates/features/jobs/files/src/core/jobs/queue.ts +29 -0
- package/templates/features/jobs/files/src/core/jobs/redis.ts +17 -0
- package/templates/features/jobs/files/src/modules/example/consumers/send-welcome.ts +11 -0
- package/templates/features/jobs/files/src/modules/example/schedules/heartbeat.ts +9 -0
- package/templates/features/jobs/files/src/modules/example/tests/jobs.test.ts +29 -0
- package/templates/features/keycloak/files/keycloak/realm.json +83 -0
- package/templates/features/keycloak/files/src/core/auth/commands/keycloak-token.ts +32 -0
- package/templates/features/keycloak/files/src/core/auth/keycloak.ts +58 -0
- package/templates/features/keycloak/files/src/core/auth/principal.ts +27 -0
- package/templates/features/keycloak/files/tests/helpers/auth.ts +52 -0
- package/templates/features/keycloak/files+drizzle/src/core/auth/users.ts +18 -0
- package/templates/features/keycloak/files+drizzle+mysql/src/core/auth/db/user.schema.ts +10 -0
- package/templates/features/keycloak/files+drizzle+postgres/src/core/auth/db/user.schema.ts +10 -0
- package/templates/features/keycloak/files+prisma/prisma/models/user.prisma +10 -0
- package/templates/features/keycloak/files+prisma/src/core/auth/users.ts +13 -0
- package/templates/features/prisma/files/prisma/models/.gitkeep +0 -0
- package/templates/features/prisma/files/prisma.config.ts +10 -0
- package/templates/features/prisma/files/src/core/db/migrate.ts +13 -0
- package/templates/features/prisma/files+mysql/prisma/schema.prisma +11 -0
- package/templates/features/prisma/files+mysql/src/core/db/client.ts +23 -0
- package/templates/features/prisma/files+postgres/prisma/schema.prisma +11 -0
- package/templates/features/prisma/files+postgres/src/core/db/client.ts +19 -0
- package/templates/features/storage/files/src/core/storage/commands/check.ts +18 -0
- package/templates/features/storage/files/src/core/storage/index.ts +8 -0
- package/templates/features/storage/files/src/core/storage/local.ts +34 -0
- package/templates/features/storage/files/src/core/storage/s3.ts +66 -0
- package/templates/features/storage/files/src/core/storage/storage.ts +21 -0
- package/templates/features/storage/files/src/core/storage/tests/storage.test.ts +22 -0
- package/templates/generators/command/files/src/modules/__moduleKebab__/commands/__nameKebab__.ts +11 -0
- package/templates/generators/consumer/files/src/modules/__moduleKebab__/consumers/__nameKebab__.ts +14 -0
- package/templates/generators/consumer/files/src/modules/__moduleKebab__/tests/__nameKebab__.consumer.test.ts +12 -0
- package/templates/generators/module/files/src/modules/__moduleKebab__/routes/__moduleKebab__.routes.ts +20 -0
- package/templates/generators/module/files/src/modules/__moduleKebab__/services/__moduleKebab__.service.ts +4 -0
- package/templates/generators/module/files/src/modules/__moduleKebab__/tests/__moduleKebab__.test.ts +10 -0
- package/templates/generators/module/files/src/modules/__moduleKebab__/validators/__moduleKebab__.validators.ts +5 -0
- package/templates/generators/permission/files/src/modules/__moduleKebab__/permissions/__nameKebab__.permissions.ts +18 -0
- package/templates/generators/resource/files/src/modules/__moduleKebab__/routes/__nameKebab__.routes.ts +127 -0
- package/templates/generators/resource/files/src/modules/__moduleKebab__/tests/__nameKebab__.routes.test.ts +59 -0
- package/templates/generators/resource/files/src/modules/__moduleKebab__/validators/__nameKebab__.validators.ts +30 -0
- package/templates/generators/resource/files+authz/src/modules/__moduleKebab__/permissions/__nameKebab__.permissions.ts +21 -0
- package/templates/generators/resource/files+drizzle/src/modules/__moduleKebab__/services/__nameKebab__.service.ts +78 -0
- package/templates/generators/resource/files+drizzle+mysql/src/modules/__moduleKebab__/db/__nameKebab__.schema.ts +9 -0
- package/templates/generators/resource/files+drizzle+postgres/src/modules/__moduleKebab__/db/__nameKebab__.schema.ts +9 -0
- package/templates/generators/resource/files+prisma/prisma/models/__nameKebab__.prisma +9 -0
- package/templates/generators/resource/files+prisma/src/modules/__moduleKebab__/services/__nameKebab__.service.ts +73 -0
- package/templates/generators/route/files/src/modules/__moduleKebab__/routes/__nameKebab__.routes.ts +29 -0
- package/templates/generators/route/files/src/modules/__moduleKebab__/validators/__nameKebab__.validators.ts +9 -0
- package/templates/generators/route/files+authz/src/modules/__moduleKebab__/permissions/__nameKebab__.permissions.ts +13 -0
- package/templates/generators/schedule/files/src/modules/__moduleKebab__/schedules/__nameKebab__.ts +11 -0
- package/templates/generators/schema/files+drizzle+mysql/src/modules/__moduleKebab__/db/__nameKebab__.schema.ts +9 -0
- package/templates/generators/schema/files+drizzle+postgres/src/modules/__moduleKebab__/db/__nameKebab__.schema.ts +9 -0
- package/templates/generators/schema/files+prisma/prisma/models/__nameKebab__.prisma +9 -0
- package/templates/generators/service/files/src/modules/__moduleKebab__/services/__nameKebab__.service.ts +4 -0
- package/templates/generators/service/files/src/modules/__moduleKebab__/tests/__nameKebab__.service.test.ts +8 -0
- package/templates/versions.json +34 -0
- package/README.md +0 -3
package/templates/generators/route/files/src/modules/__moduleKebab__/routes/__nameKebab__.routes.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createRoute } from "@hono/zod-openapi";
|
|
2
|
+
import { errorResponses, jsonContent, success, successSchema } from "#core/http/response";
|
|
3
|
+
import { createRouter, defineRoutes } from "#core/http/routes";
|
|
4
|
+
// tatara:slot imports
|
|
5
|
+
import {
|
|
6
|
+
__nameCamel__QuerySchema,
|
|
7
|
+
__nameCamel__ResponseSchema,
|
|
8
|
+
} from "#modules/__moduleKebab__/validators/__nameKebab__.validators";
|
|
9
|
+
|
|
10
|
+
const router = createRouter();
|
|
11
|
+
|
|
12
|
+
router.openapi(
|
|
13
|
+
createRoute({
|
|
14
|
+
method: "get",
|
|
15
|
+
path: "/",
|
|
16
|
+
tags: ["__modulePascal__"],
|
|
17
|
+
summary: "__nameTitle__",
|
|
18
|
+
// tatara:slot guard-read
|
|
19
|
+
request: { query: __nameCamel__QuerySchema },
|
|
20
|
+
responses: {
|
|
21
|
+
200: jsonContent(successSchema(__nameCamel__ResponseSchema), "__nameTitle__"),
|
|
22
|
+
...errorResponses(400),
|
|
23
|
+
// tatara:slot auth-errors
|
|
24
|
+
},
|
|
25
|
+
}),
|
|
26
|
+
(c) => c.json(success({ message: `__nameKebab__: ${c.req.valid("query").q ?? "ok"}` }), 200),
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
export default defineRoutes({ app: "api", basePath: "/__nameKebab__", router });
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { definePermissions } from "#core/authz/catalog";
|
|
2
|
+
|
|
3
|
+
export default definePermissions({
|
|
4
|
+
resources: {
|
|
5
|
+
"__nameKebab__": {
|
|
6
|
+
read: { scoped: false },
|
|
7
|
+
},
|
|
8
|
+
},
|
|
9
|
+
roleGrants: {
|
|
10
|
+
admin: [["__nameKebab__", "read"]],
|
|
11
|
+
member: [["__nameKebab__", "read"]],
|
|
12
|
+
},
|
|
13
|
+
});
|
package/templates/generators/schedule/files/src/modules/__moduleKebab__/schedules/__nameKebab__.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defineSchedule } from "#core/jobs/define";
|
|
2
|
+
|
|
3
|
+
export default defineSchedule({
|
|
4
|
+
name: "__moduleKebab__.__nameKebab__",
|
|
5
|
+
// every day at 02:00 UTC
|
|
6
|
+
cron: "0 2 * * *",
|
|
7
|
+
lockTtlMs: 10 * 60_000,
|
|
8
|
+
async run({ logger }) {
|
|
9
|
+
logger.info("__moduleKebab__.__nameKebab__ ran");
|
|
10
|
+
},
|
|
11
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { mysqlTable, text, timestamp, varchar } from "drizzle-orm/mysql-core";
|
|
2
|
+
|
|
3
|
+
export const __namePluralCamel__ = mysqlTable("__namePluralSnake__", {
|
|
4
|
+
id: varchar({ length: 36 }).primaryKey(),
|
|
5
|
+
name: varchar({ length: 200 }).notNull(),
|
|
6
|
+
description: text(),
|
|
7
|
+
createdAt: timestamp({ fsp: 3, mode: "date" }).notNull().defaultNow(),
|
|
8
|
+
updatedAt: timestamp({ fsp: 3, mode: "date" }).notNull().defaultNow(),
|
|
9
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { pgTable, text, timestamp, uuid, varchar } from "drizzle-orm/pg-core";
|
|
2
|
+
|
|
3
|
+
export const __namePluralCamel__ = pgTable("__namePluralSnake__", {
|
|
4
|
+
id: uuid().primaryKey(),
|
|
5
|
+
name: varchar({ length: 200 }).notNull(),
|
|
6
|
+
description: text(),
|
|
7
|
+
createdAt: timestamp({ withTimezone: true, mode: "date" }).notNull().defaultNow(),
|
|
8
|
+
updatedAt: timestamp({ withTimezone: true, mode: "date" }).notNull().defaultNow(),
|
|
9
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
model __namePascal__ {
|
|
2
|
+
id String @id @db.VarChar(36)
|
|
3
|
+
name String @db.VarChar(200)
|
|
4
|
+
description String? @db.Text
|
|
5
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
6
|
+
updatedAt DateTime @default(now()) @updatedAt @map("updated_at")
|
|
7
|
+
|
|
8
|
+
@@map("__namePluralSnake__")
|
|
9
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { __nameCamel__ } from "#modules/__moduleKebab__/services/__nameKebab__.service";
|
|
3
|
+
|
|
4
|
+
describe("__nameCamel__", () => {
|
|
5
|
+
it("returns a result", () => {
|
|
6
|
+
expect(__nameCamel__({ value: "x" })).toEqual({ result: "x" });
|
|
7
|
+
});
|
|
8
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hono": "4.13.13",
|
|
3
|
+
"@hono/node-server": "2.1.5",
|
|
4
|
+
"@hono/zod-openapi": "1.6.3",
|
|
5
|
+
"@scalar/hono-api-reference": "0.12.12",
|
|
6
|
+
"zod": "4.6.7",
|
|
7
|
+
"@t3-oss/env-core": "0.13.11",
|
|
8
|
+
"pino": "10.4.0",
|
|
9
|
+
"pino-pretty": "13.2.0",
|
|
10
|
+
"typescript": "7.0.2",
|
|
11
|
+
"@types/node": "24.19.2",
|
|
12
|
+
"vitest": "5.0.4",
|
|
13
|
+
"tsdown": "0.23.1",
|
|
14
|
+
"@biomejs/biome": "2.5.15",
|
|
15
|
+
"pg": "8.23.1",
|
|
16
|
+
"@types/pg": "8.23.1",
|
|
17
|
+
"mysql2": "3.24.6",
|
|
18
|
+
"mariadb": "3.4.5",
|
|
19
|
+
"drizzle-orm": "0.45.4",
|
|
20
|
+
"drizzle-kit": "0.31.11",
|
|
21
|
+
"prisma": "7.10.0",
|
|
22
|
+
"@prisma/client": "7.10.0",
|
|
23
|
+
"@prisma/adapter-pg": "7.10.0",
|
|
24
|
+
"@prisma/adapter-mariadb": "7.10.0",
|
|
25
|
+
"better-auth": "1.7.8",
|
|
26
|
+
"jose": "6.2.12",
|
|
27
|
+
"bullmq": "6.3.15",
|
|
28
|
+
"ioredis": "6.0.0",
|
|
29
|
+
"croner": "10.0.1",
|
|
30
|
+
"@aws-sdk/client-s3": "3.1152.0",
|
|
31
|
+
"@aws-sdk/s3-request-presigner": "3.1152.0",
|
|
32
|
+
"nodemailer": "10.1.1",
|
|
33
|
+
"@types/nodemailer": "8.0.2"
|
|
34
|
+
}
|
package/README.md
DELETED