create-forgeon 0.1.2 → 0.1.6
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/README.md +19 -17
- package/bin/create-forgeon.mjs +22 -22
- package/package.json +1 -1
- package/src/cli/add-help.mjs +12 -12
- package/src/cli/add-options.mjs +54 -54
- package/src/cli/add-options.test.mjs +24 -24
- package/src/cli/help.mjs +20 -20
- package/src/cli/options.mjs +121 -121
- package/src/cli/options.test.mjs +41 -41
- package/src/cli/prompt-select.mjs +94 -94
- package/src/cli/prompt-select.test.mjs +148 -148
- package/src/constants.mjs +13 -13
- package/src/core/docs.mjs +128 -128
- package/src/core/docs.test.mjs +91 -91
- package/src/core/install.mjs +14 -14
- package/src/core/scaffold.mjs +48 -45
- package/src/core/validate.mjs +12 -12
- package/src/core/validate.test.mjs +73 -73
- package/src/databases/index.mjs +26 -26
- package/src/frameworks/index.mjs +32 -32
- package/src/infrastructure/proxy.mjs +12 -12
- package/src/modules/docs.mjs +70 -70
- package/src/modules/executor.mjs +39 -21
- package/src/modules/executor.test.mjs +95 -45
- package/src/modules/i18n.mjs +283 -0
- package/src/modules/registry.mjs +43 -35
- package/src/presets/i18n.mjs +228 -180
- package/src/presets/index.mjs +2 -2
- package/src/presets/proxy.mjs +32 -32
- package/src/run-add-module.mjs +47 -47
- package/src/run-create-forgeon.mjs +72 -72
- package/src/utils/fs.mjs +26 -26
- package/src/utils/values.mjs +20 -20
- package/templates/base/.dockerignore +7 -7
- package/templates/base/.editorconfig +11 -11
- package/templates/base/README.md +46 -46
- package/templates/base/apps/api/Dockerfile +24 -24
- package/templates/base/apps/api/package.json +39 -39
- package/templates/base/apps/api/prisma/migrations/0001_init/migration.sql +11 -11
- package/templates/base/apps/api/prisma/schema.prisma +14 -14
- package/templates/base/apps/api/prisma/seed.ts +19 -19
- package/templates/base/apps/api/src/app.module.ts +32 -32
- package/templates/base/apps/api/src/common/dto/echo-query.dto.ts +5 -5
- package/templates/base/apps/api/src/common/filters/app-exception.filter.ts +129 -129
- package/templates/base/apps/api/src/config/app.config.ts +12 -12
- package/templates/base/apps/api/src/health/health.controller.ts +30 -30
- package/templates/base/apps/api/src/main.ts +25 -25
- package/templates/base/apps/api/src/prisma/prisma.module.ts +8 -8
- package/templates/base/apps/api/src/prisma/prisma.service.ts +26 -26
- package/templates/base/apps/api/tsconfig.build.json +8 -8
- package/templates/base/apps/api/tsconfig.json +8 -8
- package/templates/base/apps/web/Dockerfile +12 -12
- package/templates/base/apps/web/index.html +11 -11
- package/templates/base/apps/web/package.json +21 -21
- package/templates/base/apps/web/src/App.tsx +35 -35
- package/templates/base/apps/web/src/main.tsx +8 -8
- package/templates/base/apps/web/src/styles.css +32 -32
- package/templates/base/apps/web/tsconfig.json +17 -17
- package/templates/base/apps/web/vite.config.ts +14 -14
- package/templates/base/docs/AI/ARCHITECTURE.md +37 -37
- package/templates/base/docs/AI/MODULE_SPEC.md +56 -56
- package/templates/base/docs/AI/PROJECT.md +31 -31
- package/templates/base/docs/AI/TASKS.md +57 -57
- package/templates/base/docs/README.md +6 -6
- package/templates/base/infra/caddy/Caddyfile +15 -15
- package/templates/base/infra/docker/.env.example +9 -9
- package/templates/base/infra/docker/caddy.Dockerfile +15 -15
- package/templates/base/infra/docker/compose.caddy.yml +44 -44
- package/templates/base/infra/docker/compose.nginx.yml +44 -44
- package/templates/base/infra/docker/compose.none.yml +37 -37
- package/templates/base/infra/docker/compose.yml +44 -44
- package/templates/base/infra/docker/nginx.Dockerfile +15 -15
- package/templates/base/infra/nginx/nginx.conf +31 -31
- package/templates/base/package.json +23 -23
- package/templates/base/packages/core/README.md +2 -2
- package/templates/base/packages/core/package.json +13 -13
- package/templates/base/packages/core/tsconfig.json +7 -7
- package/templates/base/packages/i18n/package.json +18 -18
- package/templates/base/packages/i18n/src/forgeon-i18n.module.ts +45 -45
- package/templates/base/packages/i18n/tsconfig.json +8 -8
- package/templates/base/pnpm-workspace.yaml +2 -2
- package/templates/base/resources/i18n/en/common.json +4 -4
- package/templates/base/resources/i18n/en/validation.json +2 -2
- package/templates/base/resources/i18n/uk/common.json +4 -4
- package/templates/base/resources/i18n/uk/validation.json +2 -2
- package/templates/base/tsconfig.base.json +16 -16
- package/templates/docs-fragments/AI_ARCHITECTURE/00_title.md +1 -1
- package/templates/docs-fragments/AI_ARCHITECTURE/10_layout_base.md +6 -6
- package/templates/docs-fragments/AI_ARCHITECTURE/11_layout_infra.md +1 -1
- package/templates/docs-fragments/AI_ARCHITECTURE/12_layout_i18n_resources.md +1 -1
- package/templates/docs-fragments/AI_ARCHITECTURE/20_env_base.md +4 -4
- package/templates/docs-fragments/AI_ARCHITECTURE/21_env_i18n.md +3 -3
- package/templates/docs-fragments/AI_ARCHITECTURE/30_default_db.md +7 -7
- package/templates/docs-fragments/AI_ARCHITECTURE/31_docker_runtime.md +5 -5
- package/templates/docs-fragments/AI_ARCHITECTURE/32_scope_freeze.md +5 -5
- package/templates/docs-fragments/AI_ARCHITECTURE/40_docs_generation.md +9 -9
- package/templates/docs-fragments/AI_ARCHITECTURE/50_extension_points.md +8 -8
- package/templates/docs-fragments/AI_PROJECT/00_title.md +1 -1
- package/templates/docs-fragments/AI_PROJECT/10_what_is.md +3 -3
- package/templates/docs-fragments/AI_PROJECT/20_structure_base.md +5 -5
- package/templates/docs-fragments/AI_PROJECT/21_structure_i18n.md +2 -0
- package/templates/docs-fragments/AI_PROJECT/22_structure_docker.md +1 -1
- package/templates/docs-fragments/AI_PROJECT/23_structure_docs.md +1 -1
- package/templates/docs-fragments/AI_PROJECT/30_run_dev.md +8 -8
- package/templates/docs-fragments/AI_PROJECT/31_run_docker.md +5 -5
- package/templates/docs-fragments/AI_PROJECT/32_proxy_notes.md +5 -5
- package/templates/docs-fragments/AI_PROJECT/32_proxy_notes_none.md +5 -5
- package/templates/docs-fragments/AI_PROJECT/33_i18n_notes.md +2 -0
- package/templates/docs-fragments/AI_PROJECT/40_change_boundaries_base.md +3 -3
- package/templates/docs-fragments/AI_PROJECT/41_change_boundaries_docker.md +1 -1
- package/templates/docs-fragments/README/00_title.md +3 -3
- package/templates/docs-fragments/README/10_stack.md +8 -8
- package/templates/docs-fragments/README/20_quick_start_dev_intro.md +6 -6
- package/templates/docs-fragments/README/21_quick_start_dev_db_docker.md +4 -4
- package/templates/docs-fragments/README/21_quick_start_dev_db_local.md +1 -1
- package/templates/docs-fragments/README/22_quick_start_dev_outro.md +7 -7
- package/templates/docs-fragments/README/30_quick_start_docker.md +7 -7
- package/templates/docs-fragments/README/30_quick_start_docker_none.md +9 -9
- package/templates/docs-fragments/README/31_proxy_preset_caddy.md +9 -9
- package/templates/docs-fragments/README/31_proxy_preset_nginx.md +8 -8
- package/templates/docs-fragments/README/31_proxy_preset_none.md +6 -6
- package/templates/docs-fragments/README/32_prisma_container_start.md +5 -5
- package/templates/docs-fragments/README/40_i18n.md +14 -8
- package/templates/docs-fragments/README/90_next_steps.md +7 -7
- package/templates/module-fragments/i18n/00_title.md +5 -0
- package/templates/module-fragments/i18n/10_overview.md +9 -0
- package/templates/module-fragments/i18n/20_scope.md +7 -0
- package/templates/module-fragments/i18n/90_status_implemented.md +3 -0
- package/templates/module-fragments/jwt-auth/00_title.md +1 -1
- package/templates/module-fragments/jwt-auth/10_overview.md +6 -6
- package/templates/module-fragments/jwt-auth/20_scope.md +7 -7
- package/templates/module-fragments/jwt-auth/90_status_planned.md +3 -3
- package/templates/module-fragments/queue/00_title.md +1 -1
- package/templates/module-fragments/queue/10_overview.md +6 -6
- package/templates/module-fragments/queue/20_scope.md +7 -7
- package/templates/module-fragments/queue/90_status_planned.md +3 -3
- package/templates/module-presets/i18n/apps/web/src/App.tsx +61 -0
- package/templates/module-presets/i18n/packages/i18n-contracts/package.json +14 -0
- package/templates/module-presets/i18n/packages/i18n-contracts/src/index.ts +7 -0
- package/templates/module-presets/i18n/packages/i18n-contracts/tsconfig.json +8 -0
- package/templates/module-presets/i18n/packages/i18n-web/package.json +17 -0
- package/templates/module-presets/i18n/packages/i18n-web/src/index.ts +50 -0
- package/templates/module-presets/i18n/packages/i18n-web/tsconfig.json +8 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
FROM node:20-alpine AS web-builder
|
|
2
|
-
|
|
3
|
-
WORKDIR /app
|
|
4
|
-
RUN corepack enable
|
|
5
|
-
|
|
6
|
-
COPY package.json pnpm-workspace.yaml ./
|
|
7
|
-
COPY apps/web/package.json apps/web/package.json
|
|
8
|
-
RUN pnpm install --frozen-lockfile=false
|
|
9
|
-
|
|
10
|
-
COPY apps/web apps/web
|
|
11
|
-
WORKDIR /app/apps/web
|
|
12
|
-
RUN pnpm build
|
|
13
|
-
|
|
14
|
-
FROM caddy:2-alpine
|
|
15
|
-
COPY infra/caddy/Caddyfile /etc/caddy/Caddyfile
|
|
1
|
+
FROM node:20-alpine AS web-builder
|
|
2
|
+
|
|
3
|
+
WORKDIR /app
|
|
4
|
+
RUN corepack enable
|
|
5
|
+
|
|
6
|
+
COPY package.json pnpm-workspace.yaml ./
|
|
7
|
+
COPY apps/web/package.json apps/web/package.json
|
|
8
|
+
RUN pnpm install --frozen-lockfile=false
|
|
9
|
+
|
|
10
|
+
COPY apps/web apps/web
|
|
11
|
+
WORKDIR /app/apps/web
|
|
12
|
+
RUN pnpm build
|
|
13
|
+
|
|
14
|
+
FROM caddy:2-alpine
|
|
15
|
+
COPY infra/caddy/Caddyfile /etc/caddy/Caddyfile
|
|
16
16
|
COPY --from=web-builder /app/apps/web/dist /srv
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
services:
|
|
2
|
-
db:
|
|
3
|
-
image: postgres:16-alpine
|
|
4
|
-
restart: unless-stopped
|
|
5
|
-
environment:
|
|
6
|
-
POSTGRES_USER: ${POSTGRES_USER}
|
|
7
|
-
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
8
|
-
POSTGRES_DB: ${POSTGRES_DB}
|
|
9
|
-
ports:
|
|
10
|
-
- "5432:5432"
|
|
11
|
-
volumes:
|
|
12
|
-
- db_data:/var/lib/postgresql/data
|
|
13
|
-
healthcheck:
|
|
14
|
-
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
|
|
15
|
-
interval: 10s
|
|
16
|
-
timeout: 5s
|
|
17
|
-
retries: 10
|
|
18
|
-
|
|
19
|
-
api:
|
|
20
|
-
build:
|
|
21
|
-
context: ../..
|
|
22
|
-
dockerfile: apps/api/Dockerfile
|
|
23
|
-
restart: unless-stopped
|
|
24
|
-
environment:
|
|
25
|
-
PORT: ${PORT}
|
|
26
|
-
DATABASE_URL: ${DATABASE_URL}
|
|
27
|
-
I18N_ENABLED: ${I18N_ENABLED}
|
|
28
|
-
I18N_DEFAULT_LANG: ${I18N_DEFAULT_LANG}
|
|
29
|
-
I18N_FALLBACK_LANG: ${I18N_FALLBACK_LANG}
|
|
30
|
-
depends_on:
|
|
31
|
-
db:
|
|
32
|
-
condition: service_healthy
|
|
33
|
-
|
|
34
|
-
caddy:
|
|
35
|
-
build:
|
|
36
|
-
context: ../..
|
|
37
|
-
dockerfile: infra/docker/caddy.Dockerfile
|
|
38
|
-
restart: unless-stopped
|
|
39
|
-
depends_on:
|
|
40
|
-
- api
|
|
41
|
-
ports:
|
|
42
|
-
- "8080:80"
|
|
43
|
-
|
|
44
|
-
volumes:
|
|
1
|
+
services:
|
|
2
|
+
db:
|
|
3
|
+
image: postgres:16-alpine
|
|
4
|
+
restart: unless-stopped
|
|
5
|
+
environment:
|
|
6
|
+
POSTGRES_USER: ${POSTGRES_USER}
|
|
7
|
+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
8
|
+
POSTGRES_DB: ${POSTGRES_DB}
|
|
9
|
+
ports:
|
|
10
|
+
- "5432:5432"
|
|
11
|
+
volumes:
|
|
12
|
+
- db_data:/var/lib/postgresql/data
|
|
13
|
+
healthcheck:
|
|
14
|
+
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
|
|
15
|
+
interval: 10s
|
|
16
|
+
timeout: 5s
|
|
17
|
+
retries: 10
|
|
18
|
+
|
|
19
|
+
api:
|
|
20
|
+
build:
|
|
21
|
+
context: ../..
|
|
22
|
+
dockerfile: apps/api/Dockerfile
|
|
23
|
+
restart: unless-stopped
|
|
24
|
+
environment:
|
|
25
|
+
PORT: ${PORT}
|
|
26
|
+
DATABASE_URL: ${DATABASE_URL}
|
|
27
|
+
I18N_ENABLED: ${I18N_ENABLED}
|
|
28
|
+
I18N_DEFAULT_LANG: ${I18N_DEFAULT_LANG}
|
|
29
|
+
I18N_FALLBACK_LANG: ${I18N_FALLBACK_LANG}
|
|
30
|
+
depends_on:
|
|
31
|
+
db:
|
|
32
|
+
condition: service_healthy
|
|
33
|
+
|
|
34
|
+
caddy:
|
|
35
|
+
build:
|
|
36
|
+
context: ../..
|
|
37
|
+
dockerfile: infra/docker/caddy.Dockerfile
|
|
38
|
+
restart: unless-stopped
|
|
39
|
+
depends_on:
|
|
40
|
+
- api
|
|
41
|
+
ports:
|
|
42
|
+
- "8080:80"
|
|
43
|
+
|
|
44
|
+
volumes:
|
|
45
45
|
db_data:
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
services:
|
|
2
|
-
db:
|
|
3
|
-
image: postgres:16-alpine
|
|
4
|
-
restart: unless-stopped
|
|
5
|
-
environment:
|
|
6
|
-
POSTGRES_USER: ${POSTGRES_USER}
|
|
7
|
-
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
8
|
-
POSTGRES_DB: ${POSTGRES_DB}
|
|
9
|
-
ports:
|
|
10
|
-
- "5432:5432"
|
|
11
|
-
volumes:
|
|
12
|
-
- db_data:/var/lib/postgresql/data
|
|
13
|
-
healthcheck:
|
|
14
|
-
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
|
|
15
|
-
interval: 10s
|
|
16
|
-
timeout: 5s
|
|
17
|
-
retries: 10
|
|
18
|
-
|
|
19
|
-
api:
|
|
20
|
-
build:
|
|
21
|
-
context: ../..
|
|
22
|
-
dockerfile: apps/api/Dockerfile
|
|
23
|
-
restart: unless-stopped
|
|
24
|
-
environment:
|
|
25
|
-
PORT: ${PORT}
|
|
26
|
-
DATABASE_URL: ${DATABASE_URL}
|
|
27
|
-
I18N_ENABLED: ${I18N_ENABLED}
|
|
28
|
-
I18N_DEFAULT_LANG: ${I18N_DEFAULT_LANG}
|
|
29
|
-
I18N_FALLBACK_LANG: ${I18N_FALLBACK_LANG}
|
|
30
|
-
depends_on:
|
|
31
|
-
db:
|
|
32
|
-
condition: service_healthy
|
|
33
|
-
|
|
34
|
-
nginx:
|
|
35
|
-
build:
|
|
36
|
-
context: ../..
|
|
37
|
-
dockerfile: infra/docker/nginx.Dockerfile
|
|
38
|
-
restart: unless-stopped
|
|
39
|
-
depends_on:
|
|
40
|
-
- api
|
|
41
|
-
ports:
|
|
42
|
-
- "8080:80"
|
|
43
|
-
|
|
44
|
-
volumes:
|
|
1
|
+
services:
|
|
2
|
+
db:
|
|
3
|
+
image: postgres:16-alpine
|
|
4
|
+
restart: unless-stopped
|
|
5
|
+
environment:
|
|
6
|
+
POSTGRES_USER: ${POSTGRES_USER}
|
|
7
|
+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
8
|
+
POSTGRES_DB: ${POSTGRES_DB}
|
|
9
|
+
ports:
|
|
10
|
+
- "5432:5432"
|
|
11
|
+
volumes:
|
|
12
|
+
- db_data:/var/lib/postgresql/data
|
|
13
|
+
healthcheck:
|
|
14
|
+
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
|
|
15
|
+
interval: 10s
|
|
16
|
+
timeout: 5s
|
|
17
|
+
retries: 10
|
|
18
|
+
|
|
19
|
+
api:
|
|
20
|
+
build:
|
|
21
|
+
context: ../..
|
|
22
|
+
dockerfile: apps/api/Dockerfile
|
|
23
|
+
restart: unless-stopped
|
|
24
|
+
environment:
|
|
25
|
+
PORT: ${PORT}
|
|
26
|
+
DATABASE_URL: ${DATABASE_URL}
|
|
27
|
+
I18N_ENABLED: ${I18N_ENABLED}
|
|
28
|
+
I18N_DEFAULT_LANG: ${I18N_DEFAULT_LANG}
|
|
29
|
+
I18N_FALLBACK_LANG: ${I18N_FALLBACK_LANG}
|
|
30
|
+
depends_on:
|
|
31
|
+
db:
|
|
32
|
+
condition: service_healthy
|
|
33
|
+
|
|
34
|
+
nginx:
|
|
35
|
+
build:
|
|
36
|
+
context: ../..
|
|
37
|
+
dockerfile: infra/docker/nginx.Dockerfile
|
|
38
|
+
restart: unless-stopped
|
|
39
|
+
depends_on:
|
|
40
|
+
- api
|
|
41
|
+
ports:
|
|
42
|
+
- "8080:80"
|
|
43
|
+
|
|
44
|
+
volumes:
|
|
45
45
|
db_data:
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
services:
|
|
2
|
-
db:
|
|
3
|
-
image: postgres:16-alpine
|
|
4
|
-
restart: unless-stopped
|
|
5
|
-
environment:
|
|
6
|
-
POSTGRES_USER: ${POSTGRES_USER}
|
|
7
|
-
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
8
|
-
POSTGRES_DB: ${POSTGRES_DB}
|
|
9
|
-
ports:
|
|
10
|
-
- "5432:5432"
|
|
11
|
-
volumes:
|
|
12
|
-
- db_data:/var/lib/postgresql/data
|
|
13
|
-
healthcheck:
|
|
14
|
-
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
|
|
15
|
-
interval: 10s
|
|
16
|
-
timeout: 5s
|
|
17
|
-
retries: 10
|
|
18
|
-
|
|
19
|
-
api:
|
|
20
|
-
build:
|
|
21
|
-
context: ../..
|
|
22
|
-
dockerfile: apps/api/Dockerfile
|
|
23
|
-
restart: unless-stopped
|
|
24
|
-
environment:
|
|
25
|
-
PORT: ${PORT}
|
|
26
|
-
DATABASE_URL: ${DATABASE_URL}
|
|
27
|
-
I18N_ENABLED: ${I18N_ENABLED}
|
|
28
|
-
I18N_DEFAULT_LANG: ${I18N_DEFAULT_LANG}
|
|
29
|
-
I18N_FALLBACK_LANG: ${I18N_FALLBACK_LANG}
|
|
30
|
-
depends_on:
|
|
31
|
-
db:
|
|
32
|
-
condition: service_healthy
|
|
33
|
-
ports:
|
|
34
|
-
- "3000:3000"
|
|
35
|
-
|
|
36
|
-
volumes:
|
|
37
|
-
db_data:
|
|
1
|
+
services:
|
|
2
|
+
db:
|
|
3
|
+
image: postgres:16-alpine
|
|
4
|
+
restart: unless-stopped
|
|
5
|
+
environment:
|
|
6
|
+
POSTGRES_USER: ${POSTGRES_USER}
|
|
7
|
+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
8
|
+
POSTGRES_DB: ${POSTGRES_DB}
|
|
9
|
+
ports:
|
|
10
|
+
- "5432:5432"
|
|
11
|
+
volumes:
|
|
12
|
+
- db_data:/var/lib/postgresql/data
|
|
13
|
+
healthcheck:
|
|
14
|
+
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
|
|
15
|
+
interval: 10s
|
|
16
|
+
timeout: 5s
|
|
17
|
+
retries: 10
|
|
18
|
+
|
|
19
|
+
api:
|
|
20
|
+
build:
|
|
21
|
+
context: ../..
|
|
22
|
+
dockerfile: apps/api/Dockerfile
|
|
23
|
+
restart: unless-stopped
|
|
24
|
+
environment:
|
|
25
|
+
PORT: ${PORT}
|
|
26
|
+
DATABASE_URL: ${DATABASE_URL}
|
|
27
|
+
I18N_ENABLED: ${I18N_ENABLED}
|
|
28
|
+
I18N_DEFAULT_LANG: ${I18N_DEFAULT_LANG}
|
|
29
|
+
I18N_FALLBACK_LANG: ${I18N_FALLBACK_LANG}
|
|
30
|
+
depends_on:
|
|
31
|
+
db:
|
|
32
|
+
condition: service_healthy
|
|
33
|
+
ports:
|
|
34
|
+
- "3000:3000"
|
|
35
|
+
|
|
36
|
+
volumes:
|
|
37
|
+
db_data:
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
services:
|
|
2
|
-
db:
|
|
3
|
-
image: postgres:16-alpine
|
|
4
|
-
restart: unless-stopped
|
|
5
|
-
environment:
|
|
6
|
-
POSTGRES_USER: ${POSTGRES_USER}
|
|
7
|
-
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
8
|
-
POSTGRES_DB: ${POSTGRES_DB}
|
|
9
|
-
ports:
|
|
10
|
-
- "5432:5432"
|
|
11
|
-
volumes:
|
|
12
|
-
- db_data:/var/lib/postgresql/data
|
|
13
|
-
healthcheck:
|
|
14
|
-
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
|
|
15
|
-
interval: 10s
|
|
16
|
-
timeout: 5s
|
|
17
|
-
retries: 10
|
|
18
|
-
|
|
19
|
-
api:
|
|
20
|
-
build:
|
|
21
|
-
context: ../..
|
|
22
|
-
dockerfile: apps/api/Dockerfile
|
|
23
|
-
restart: unless-stopped
|
|
24
|
-
environment:
|
|
25
|
-
PORT: ${PORT}
|
|
26
|
-
DATABASE_URL: ${DATABASE_URL}
|
|
27
|
-
I18N_ENABLED: ${I18N_ENABLED}
|
|
28
|
-
I18N_DEFAULT_LANG: ${I18N_DEFAULT_LANG}
|
|
29
|
-
I18N_FALLBACK_LANG: ${I18N_FALLBACK_LANG}
|
|
30
|
-
depends_on:
|
|
31
|
-
db:
|
|
32
|
-
condition: service_healthy
|
|
33
|
-
|
|
34
|
-
nginx:
|
|
35
|
-
build:
|
|
36
|
-
context: ../..
|
|
37
|
-
dockerfile: infra/docker/nginx.Dockerfile
|
|
38
|
-
restart: unless-stopped
|
|
39
|
-
depends_on:
|
|
40
|
-
- api
|
|
41
|
-
ports:
|
|
42
|
-
- "8080:80"
|
|
43
|
-
|
|
44
|
-
volumes:
|
|
1
|
+
services:
|
|
2
|
+
db:
|
|
3
|
+
image: postgres:16-alpine
|
|
4
|
+
restart: unless-stopped
|
|
5
|
+
environment:
|
|
6
|
+
POSTGRES_USER: ${POSTGRES_USER}
|
|
7
|
+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
8
|
+
POSTGRES_DB: ${POSTGRES_DB}
|
|
9
|
+
ports:
|
|
10
|
+
- "5432:5432"
|
|
11
|
+
volumes:
|
|
12
|
+
- db_data:/var/lib/postgresql/data
|
|
13
|
+
healthcheck:
|
|
14
|
+
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
|
|
15
|
+
interval: 10s
|
|
16
|
+
timeout: 5s
|
|
17
|
+
retries: 10
|
|
18
|
+
|
|
19
|
+
api:
|
|
20
|
+
build:
|
|
21
|
+
context: ../..
|
|
22
|
+
dockerfile: apps/api/Dockerfile
|
|
23
|
+
restart: unless-stopped
|
|
24
|
+
environment:
|
|
25
|
+
PORT: ${PORT}
|
|
26
|
+
DATABASE_URL: ${DATABASE_URL}
|
|
27
|
+
I18N_ENABLED: ${I18N_ENABLED}
|
|
28
|
+
I18N_DEFAULT_LANG: ${I18N_DEFAULT_LANG}
|
|
29
|
+
I18N_FALLBACK_LANG: ${I18N_FALLBACK_LANG}
|
|
30
|
+
depends_on:
|
|
31
|
+
db:
|
|
32
|
+
condition: service_healthy
|
|
33
|
+
|
|
34
|
+
nginx:
|
|
35
|
+
build:
|
|
36
|
+
context: ../..
|
|
37
|
+
dockerfile: infra/docker/nginx.Dockerfile
|
|
38
|
+
restart: unless-stopped
|
|
39
|
+
depends_on:
|
|
40
|
+
- api
|
|
41
|
+
ports:
|
|
42
|
+
- "8080:80"
|
|
43
|
+
|
|
44
|
+
volumes:
|
|
45
45
|
db_data:
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
FROM node:20-alpine AS web-builder
|
|
2
|
-
|
|
3
|
-
WORKDIR /app
|
|
4
|
-
RUN corepack enable
|
|
5
|
-
|
|
6
|
-
COPY package.json pnpm-workspace.yaml ./
|
|
7
|
-
COPY apps/web/package.json apps/web/package.json
|
|
8
|
-
RUN pnpm install --frozen-lockfile=false
|
|
9
|
-
|
|
10
|
-
COPY apps/web apps/web
|
|
11
|
-
WORKDIR /app/apps/web
|
|
12
|
-
RUN pnpm build
|
|
13
|
-
|
|
14
|
-
FROM nginx:1.27-alpine
|
|
15
|
-
COPY infra/nginx/nginx.conf /etc/nginx/nginx.conf
|
|
1
|
+
FROM node:20-alpine AS web-builder
|
|
2
|
+
|
|
3
|
+
WORKDIR /app
|
|
4
|
+
RUN corepack enable
|
|
5
|
+
|
|
6
|
+
COPY package.json pnpm-workspace.yaml ./
|
|
7
|
+
COPY apps/web/package.json apps/web/package.json
|
|
8
|
+
RUN pnpm install --frozen-lockfile=false
|
|
9
|
+
|
|
10
|
+
COPY apps/web apps/web
|
|
11
|
+
WORKDIR /app/apps/web
|
|
12
|
+
RUN pnpm build
|
|
13
|
+
|
|
14
|
+
FROM nginx:1.27-alpine
|
|
15
|
+
COPY infra/nginx/nginx.conf /etc/nginx/nginx.conf
|
|
16
16
|
COPY --from=web-builder /app/apps/web/dist /usr/share/nginx/html
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
worker_processes auto;
|
|
2
|
-
|
|
3
|
-
events {
|
|
4
|
-
worker_connections 1024;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
http {
|
|
8
|
-
include /etc/nginx/mime.types;
|
|
9
|
-
default_type application/octet-stream;
|
|
10
|
-
sendfile on;
|
|
11
|
-
|
|
12
|
-
server {
|
|
13
|
-
listen 80;
|
|
14
|
-
server_name _;
|
|
15
|
-
|
|
16
|
-
root /usr/share/nginx/html;
|
|
17
|
-
index index.html;
|
|
18
|
-
|
|
19
|
-
location /api/ {
|
|
20
|
-
proxy_pass http://api:3000/api/;
|
|
21
|
-
proxy_http_version 1.1;
|
|
22
|
-
proxy_set_header Host $host;
|
|
23
|
-
proxy_set_header X-Real-IP $remote_addr;
|
|
24
|
-
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
25
|
-
proxy_set_header X-Forwarded-Proto $scheme;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
location / {
|
|
29
|
-
try_files $uri /index.html;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
1
|
+
worker_processes auto;
|
|
2
|
+
|
|
3
|
+
events {
|
|
4
|
+
worker_connections 1024;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
http {
|
|
8
|
+
include /etc/nginx/mime.types;
|
|
9
|
+
default_type application/octet-stream;
|
|
10
|
+
sendfile on;
|
|
11
|
+
|
|
12
|
+
server {
|
|
13
|
+
listen 80;
|
|
14
|
+
server_name _;
|
|
15
|
+
|
|
16
|
+
root /usr/share/nginx/html;
|
|
17
|
+
index index.html;
|
|
18
|
+
|
|
19
|
+
location /api/ {
|
|
20
|
+
proxy_pass http://api:3000/api/;
|
|
21
|
+
proxy_http_version 1.1;
|
|
22
|
+
proxy_set_header Host $host;
|
|
23
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
24
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
25
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
location / {
|
|
29
|
+
try_files $uri /index.html;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
32
|
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "forgeon",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"private": true,
|
|
5
|
-
"packageManager": "pnpm@10.0.0",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"dev": "pnpm --parallel --filter @forgeon/api --filter @forgeon/web dev",
|
|
8
|
-
"build": "pnpm -r build",
|
|
9
|
-
"postinstall": "pnpm --filter @forgeon/api prisma:generate",
|
|
10
|
-
"create:forgeon": "node scripts/create-forgeon.mjs",
|
|
11
|
-
"docker:up": "docker compose --env-file infra/docker/.env.example -f infra/docker/compose.yml up --build",
|
|
12
|
-
"docker:down": "docker compose -f infra/docker/compose.yml down -v"
|
|
13
|
-
},
|
|
14
|
-
"pnpm": {
|
|
15
|
-
"onlyBuiltDependencies": [
|
|
16
|
-
"@nestjs/core",
|
|
17
|
-
"@prisma/client",
|
|
18
|
-
"@prisma/engines",
|
|
19
|
-
"esbuild",
|
|
20
|
-
"prisma"
|
|
21
|
-
]
|
|
22
|
-
}
|
|
23
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "forgeon",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"packageManager": "pnpm@10.0.0",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "pnpm --parallel --filter @forgeon/api --filter @forgeon/web dev",
|
|
8
|
+
"build": "pnpm -r build",
|
|
9
|
+
"postinstall": "pnpm --filter @forgeon/api prisma:generate",
|
|
10
|
+
"create:forgeon": "node scripts/create-forgeon.mjs",
|
|
11
|
+
"docker:up": "docker compose --env-file infra/docker/.env.example -f infra/docker/compose.yml up --build",
|
|
12
|
+
"docker:down": "docker compose -f infra/docker/compose.yml down -v"
|
|
13
|
+
},
|
|
14
|
+
"pnpm": {
|
|
15
|
+
"onlyBuiltDependencies": [
|
|
16
|
+
"@nestjs/core",
|
|
17
|
+
"@prisma/client",
|
|
18
|
+
"@prisma/engines",
|
|
19
|
+
"esbuild",
|
|
20
|
+
"prisma"
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
24
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@forgeon/core",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"private": true,
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/index.d.ts",
|
|
7
|
-
"scripts": {
|
|
8
|
-
"build": "tsc -p tsconfig.json"
|
|
9
|
-
},
|
|
10
|
-
"devDependencies": {
|
|
11
|
-
"typescript": "^5.7.3"
|
|
12
|
-
}
|
|
13
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@forgeon/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc -p tsconfig.json"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"typescript": "^5.7.3"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
14
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.base.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"rootDir": "src",
|
|
5
|
-
"outDir": "dist"
|
|
6
|
-
},
|
|
7
|
-
"include": ["src/**/*.ts"]
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"rootDir": "src",
|
|
5
|
+
"outDir": "dist"
|
|
6
|
+
},
|
|
7
|
+
"include": ["src/**/*.ts"]
|
|
8
8
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@forgeon/i18n",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"private": true,
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/index.d.ts",
|
|
7
|
-
"scripts": {
|
|
8
|
-
"build": "tsc -p tsconfig.json"
|
|
9
|
-
},
|
|
10
|
-
"dependencies": {
|
|
11
|
-
"@nestjs/common": "^11.0.1",
|
|
12
|
-
"nestjs-i18n": "^10.5.1"
|
|
13
|
-
},
|
|
14
|
-
"devDependencies": {
|
|
15
|
-
"@types/node": "^22.10.7",
|
|
16
|
-
"typescript": "^5.7.3"
|
|
17
|
-
}
|
|
18
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@forgeon/i18n",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc -p tsconfig.json"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@nestjs/common": "^11.0.1",
|
|
12
|
+
"nestjs-i18n": "^10.5.1"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"@types/node": "^22.10.7",
|
|
16
|
+
"typescript": "^5.7.3"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
19
|
|