@raclettejs/core 0.1.26 → 0.1.27

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/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.1.27] - 2026-04-27 <a href="https://gitlab.com/raclettejs/core-dev/-/compare/v0.1.26...v0.1.27" target="_blank" rel="noopener"><b>Overview of all changes</b></a>
11
+
12
+ ### Fixed
13
+
14
+ - Build: added missing publish folder `templates`
15
+
10
16
  ## [0.1.26] - 2026-04-27 <a href="https://gitlab.com/raclettejs/core-dev/-/compare/v0.1.25...v0.1.26" target="_blank" rel="noopener"><b>Overview of all changes</b></a>
11
17
 
12
18
  ### Updated
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raclettejs/core",
3
- "version": "0.1.26",
3
+ "version": "0.1.27",
4
4
  "description": "racletteJS core package",
5
5
  "repository": "https://gitlab.com/raclettejs/core",
6
6
  "author": "Pacifico Digital Explorations GmbH <info@raclettejs.com>",
@@ -37,7 +37,8 @@
37
37
  "src/types.ts",
38
38
  "LICENSE.md",
39
39
  "CONTRIBUTING.md",
40
- "raclette.default.config.yaml"
40
+ "raclette.default.config.yaml",
41
+ "templates"
41
42
  ],
42
43
  "exports": {
43
44
  ".": {
@@ -78,7 +79,7 @@
78
79
  "@emnapi/core": "1.9.2",
79
80
  "@emnapi/runtime": "1.9.2",
80
81
  "@eslint/js": "9.35.0",
81
- "@raclettejs/types": "^0.1.26",
82
+ "@raclettejs/types": "^0.1.27",
82
83
  "@types/fs-extra": "11.0.4",
83
84
  "@types/js-yaml": "4.0.9",
84
85
  "@types/node": "25.5.0",
@@ -0,0 +1,31 @@
1
+ FROM node:24.4-alpine3.21
2
+ WORKDIR /app
3
+
4
+ # add bash since alpine doesn't come with a shell
5
+ RUN apk update && apk add bash curl {{config.services.backend.installPackages}} {{.}} {{/config.services.backend.installPackages}}
6
+
7
+ COPY backend/package.json backend/yarn.lock ./
8
+ COPY backend/raclette.config.js ./
9
+
10
+ ARG NODE_ENV={{environment}}
11
+
12
+
13
+ # make sure our raclette packages are being resolved by adding a symlink to handle nodes module resolution
14
+ RUN mkdir -p /app/node_modules/@raclettejs/core
15
+ RUN ln -sf /app/src /app/node_modules/@raclettejs/core/backend
16
+
17
+ COPY ./dist/check-dependencies.sh /app/
18
+ RUN chmod +x /app/check-dependencies.sh
19
+
20
+ # copy everything else that is not ignored (see .dockerignore)
21
+ COPY ./virtual/backend ./
22
+
23
+ # set default values
24
+ ENV PORT 3000
25
+
26
+ # set port
27
+ EXPOSE 3000
28
+ EXPOSE 9229
29
+
30
+ # default command
31
+ CMD ["yarn", "run", "{{#environment}}build{{/environment}} {{^environment}}dev{{/environment}} "]
@@ -0,0 +1,34 @@
1
+ entryPoints:
2
+ - ./src/cli.ts
3
+ - ./src/index.ts
4
+ bundle: true
5
+ platform: node
6
+ target: node20
7
+ outdir: ./dist
8
+ format: esm
9
+ banner:
10
+ js: "import { createRequire } from 'module'; const require = createRequire(import.meta.url);"
11
+ external:
12
+ # External packages that shouldn't be bundled
13
+ - fastify
14
+ - mongodb
15
+ - mongoose
16
+ - redis
17
+ - chokidar
18
+ - fs-extra
19
+ # Node.js built-ins
20
+ - fs
21
+ - path
22
+ - child_process
23
+ - os
24
+ - url
25
+ - util
26
+ - events
27
+ - stream
28
+ - crypto
29
+ # Add any native modules you're using
30
+ - fsevents
31
+ loader:
32
+ .node: file
33
+ sourcemap: true
34
+ minify: false
File without changes
File without changes
@@ -0,0 +1,161 @@
1
+ services:
2
+ mongodb:
3
+ container_name: ${RACLETTE_MONGODB_CONTAINERNAME:-raclette-mongodb}
4
+ image: mongo:8.2
5
+ restart: unless-stopped
6
+ ports:
7
+ - 127.0.0.1:${RACLETTE_MONGODB_PORT:-27017}:27017
8
+ volumes:
9
+ - ${RACLETTE_MONGODB_VOLUME:-raclette-mongodb}:/data/db
10
+ - >-
11
+ ${RACLETTE_MONGODB_CONFIG_VOLUME:-playground-mongodb-config}:/data/config
12
+ networks:
13
+ - raclette_shared
14
+ healthcheck:
15
+ test:
16
+ - CMD
17
+ - mongosh
18
+ - '--eval'
19
+ - db.adminCommand('ping')
20
+ interval: 10s
21
+ timeout: 30s
22
+ retries: 20
23
+ cache:
24
+ container_name: ${RACLETTE_CACHE_CONTAINERNAME:-raclette-cache}
25
+ image: valkey/valkey:9.0-alpine
26
+ ports:
27
+ - 127.0.0.1:${RACLETTE_CACHE_PORT:-6379}:6379
28
+ volumes:
29
+ - ${RACLETTE_CACHE_VOLUME:-raclette-cache}:/data
30
+ networks:
31
+ - raclette_shared
32
+ healthcheck:
33
+ test:
34
+ - CMD
35
+ - valkey-cli
36
+ - ping
37
+ interval: 10s
38
+ timeout: 5s
39
+ retries: 3
40
+ command: valkey-server --save ""
41
+ backend:
42
+ container_name: ${RACLETTE_SERVER_CONTAINERNAME:-playground-backend}
43
+ build:
44
+ context: .
45
+ dockerfile: ./backend.Dockerfile
46
+ args:
47
+ NODE_ENV: development
48
+ command: yarn run dev:inspect
49
+ environment:
50
+ - NODE_ENV=${NODE_ENV:-development}
51
+ - DISABLE_PLUGIN_LOGS=${RACLETTE_DISABLE_PLUGIN_LOGS:-false}
52
+ - >-
53
+ SERVER_TOKEN_SECRET=${RACLETTE_SERVER_TOKEN_SECRET:-thisshouldbesetforproduction}
54
+ - RACLETTE_FRONTEND_URLS=${RACLETTE_FRONTEND_URLS:-}
55
+ - >-
56
+ MONGO_HOST=${RACLETTE_MONGODB_HOST:-mongodb://mongodb:${RACLETTE_MONGODB_PORT:-27017}/${RACLETTE_MONGODB_DATABASE:-raclette}}
57
+ - >-
58
+ CACHE_URL=${RACLETTE_CACHE_URL:-redis://cache:${RACLETTE_CACHE_PORT:-6379}}
59
+ - RACLETTE_DEBUG_MODE=true
60
+ - RACLETTE_APP_PATH=/home/shookie/core-dev/@raclettejs/playground
61
+ volumes:
62
+ - yarn-cache:/usr/local/share/.cache/yarn
63
+ - playground-backend_node_modules:/app/node_modules
64
+ - >-
65
+ /home/shookie/core-dev/@raclettejs/playground/.raclette/virtual/backend/src:/app/src
66
+ - >-
67
+ /home/shookie/core-dev/@raclettejs/playground/plugins:/app/src/appPlugins
68
+ - >-
69
+ /home/shookie/core-dev/@raclettejs/playground/.raclette/backend/raclette.config.js:/app/raclette.config.js
70
+ - >-
71
+ /home/shookie/core-dev/@raclettejs/playground/backend.yarn.lock:/app/yarn.lock
72
+ - >-
73
+ /home/shookie/core-dev/@raclettejs/playground/.raclette/dist/check-dependencies.sh:/app/check-dependencies.sh
74
+ - >-
75
+ /home/shookie/core-dev/@raclettejs/playground/.raclette/backend/package.json:/app/package.json
76
+ ports:
77
+ - ${RACLETTE_SERVER_PORT:-8082}:3000
78
+ - '9229:9229'
79
+ networks:
80
+ - raclette_shared
81
+ depends_on:
82
+ mongodb:
83
+ condition: service_started
84
+ cache:
85
+ condition: service_healthy
86
+ healthcheck:
87
+ test:
88
+ - CMD
89
+ - curl
90
+ - '-f'
91
+ - http://0.0.0.0:3000/health
92
+ interval: 10s
93
+ timeout: 30s
94
+ retries: 10
95
+ entrypoint:
96
+ - /app/check-dependencies.sh
97
+ frontend:
98
+ container_name: ${RACLETTE_CLIENT_CONTAINERNAME:-playground-frontend}
99
+ build:
100
+ context: .
101
+ dockerfile: ./frontend.Dockerfile
102
+ args:
103
+ NODE_ENV: ${NODE_ENV:-development}
104
+ target: ${NODE_ENV:-development}
105
+ command: yarn dev
106
+ depends_on:
107
+ backend:
108
+ condition: service_healthy
109
+ environment:
110
+ - NODE_ENV=${NODE_ENV:-development}
111
+ - RACLETTE_DEBUG_MODE=${RACLETTE_DEBUG_MODE:-true}
112
+ - >-
113
+ RACLETTE_SERVER_BASE_URL=${RACLETTE_SERVER_BASE_URL:-http://localhost:${RACLETTE_SERVER_PORT:-8082}}
114
+ - >-
115
+ RACLETTE_SOCKET_URL=${RACLETTE_SOCKET_URL:-http://localhost:${RACLETTE_SERVER_PORT:-8082}}
116
+ - RACLETTE_DEBUG_MODE=true
117
+ - RACLETTE_APP_PATH=/home/shookie/core-dev/@raclettejs/playground
118
+ volumes:
119
+ - yarn-cache:/usr/local/share/.cache/yarn
120
+ - >-
121
+ /home/shookie/core-dev/@raclettejs/playground/.raclette/virtual/frontend/src:/app/src
122
+ - >-
123
+ /home/shookie/core-dev/@raclettejs/playground/.raclette/virtual/backend/src/shared:/app/src/shared
124
+ - playground-frontend_node_modules:/app/node_modules
125
+ - /home/shookie/core-dev/@raclettejs/playground/plugins:/app/src/plugins
126
+ - >-
127
+ /home/shookie/core-dev/@raclettejs/playground/.raclette/virtual/backend/src/corePlugins:/app/src/corePlugins
128
+ - >-
129
+ /home/shookie/core-dev/@raclettejs/playground/.raclette/frontend/raclette.config.js:/app/raclette.config.js
130
+ - >-
131
+ /home/shookie/core-dev/@raclettejs/playground/frontend.yarn.lock:/app/yarn.lock
132
+ - >-
133
+ /home/shookie/core-dev/@raclettejs/playground/.raclette/dist/check-dependencies.sh:/app/check-dependencies.sh
134
+ - >-
135
+ /home/shookie/core-dev/@raclettejs/playground/.raclette/frontend/package.json:/app/package.json
136
+ ports:
137
+ - ${RACLETTE_CLIENT_PORT:-8081}:8081
138
+ networks:
139
+ - raclette_shared
140
+ healthcheck:
141
+ test:
142
+ - CMD
143
+ - curl
144
+ - '-f'
145
+ - http://0.0.0.0:8081/
146
+ interval: 10s
147
+ timeout: 30s
148
+ retries: 10
149
+ entrypoint:
150
+ - /app/check-dependencies.sh
151
+ volumes:
152
+ yarn-cache:
153
+ driver: local
154
+ raclette-public-shared: null
155
+ {{#volumes}}
156
+ {{entry}}
157
+ {{/volumes}}
158
+ networks:
159
+ raclette_shared:
160
+ external: true
161
+ name: raclette_shared
@@ -0,0 +1,49 @@
1
+ FROM node:24-alpine3.21 AS build
2
+ WORKDIR /app
3
+
4
+ RUN apk update && apk add bash curl {{#config.services.frontend.installPackages}} {{.}} {{/config.services.frontend.installPackages}}
5
+
6
+ # Copy package files first for better caching
7
+ COPY frontend/package.json frontend/yarn.lock ./
8
+ COPY frontend/raclette.config.js ./
9
+
10
+ ARG NODE_ENV={{environment}}
11
+
12
+ # Copy source files - we'll handle development overrides through volumes
13
+ COPY ./virtual/frontend/ ./
14
+
15
+ COPY ./dist/check-dependencies.sh /app/
16
+ RUN chmod +x /app/check-dependencies.sh
17
+
18
+ RUN rm -rf ./src/shared
19
+
20
+ # Now copy the actual shared folder - be explicit with the path
21
+ COPY virtual/backend/src/shared/ ./src/shared/
22
+
23
+ # Ports
24
+ ENV PORT {{config.services.frontend.port}}
25
+ EXPOSE {{config.services.frontend.port}}
26
+
27
+ # Add development target
28
+ FROM build AS development
29
+ CMD ["yarn", "run", "dev"]
30
+
31
+ # ----------------------------------------------------------------
32
+ # 2. production stage
33
+ # Here we will use a new docker image, which is only the web server
34
+ FROM nginx:stable-alpine AS production
35
+ WORKDIR /app
36
+
37
+ # Copy nginx config as a template
38
+ COPY frontend/provision/nginx.conf /etc/nginx/conf.d/default.conf.template
39
+
40
+ COPY --from=build app/dist /usr/share/nginx/html
41
+ COPY frontend/provision/entrypoint.sh /docker-entrypoint.d/entrypoint.sh
42
+
43
+ # Make sure the entrypoint is executable
44
+ RUN chmod +x /docker-entrypoint.d/entrypoint.sh
45
+
46
+ ENV PORT 80
47
+ EXPOSE 80
48
+
49
+ CMD ["nginx", "-g", "daemon off;"]
@@ -0,0 +1,73 @@
1
+ # this defines the contents of the raclette app directory named by config.root (usually .raclette)
2
+ # the files in there are either generated at build time or linked from the sources
3
+ # these settings rarely if ever change, so they are outside the general raclette.config.yaml
4
+ # during development almost everything in there is mounted as volumes to the different running containers
5
+ # in production builds the contents become part of the image
6
+
7
+ # almost the only reason this exists is so the development docker containers can do hot-reload
8
+ # without messing up the workspaces and git repo
9
+ # the hot-reload itself is of course handled by node, vite or tsx
10
+ # but the changes in the repo need to be passed on to the volumes
11
+ # this is done by creating hardlinks on startup
12
+ # and watching the repo itself for relevant additions and deletions
13
+
14
+
15
+ patterns:
16
+ # can be used in vfs mappings, but mainly is used in watcher file selection
17
+ ext: ["**/*.vue", "**/*.ts", "**/*.js", "**/*.json", "**/*.css", "**/*.scss"]
18
+ pkg: ["**/package.json", "**/yarn.lock"] # changes here require new install anyway
19
+ # always added when globbing, config.root is also always added
20
+ ignore: ["**/node_modules/**", "**/.git/**", "**/dist/**", "**/.prettierrc", "**/eslint.config.js"]
21
+
22
+
23
+ mappings:
24
+ # this defines how files are processed, whether they are watched or not
25
+ # remember, all watched files are hard linked, this just defines where from and where to
26
+ # the mappings are processed in order, and when a later mapping tries to link to the same location, that file will be ignored
27
+ #
28
+ # src: files can come from different source paths, the most common being
29
+ # 1. generated files from the raclette root directory, paths starting with "/"
30
+ # generated files are not watched
31
+ # 2. the raclette core package, paths starting with ".", this is the default
32
+ # 3. paths defined in environment variables, starting with "$", the default being "RACLETTE_APP_PATH"
33
+ # 4. any other relative path is from the current application directory, the default is ""
34
+ # get: this selects the files relative to the source that need to be gotten
35
+ # - you use globby syntax here for pattern matching
36
+ # - a string that matches a key in patterns above will splice the pattern into the glob list
37
+ # - default is [ '**' ], i.e. recursivly everything
38
+ # for dst:
39
+ # - always relative to vfs root, i.e. "." is the default, which is "$config.root/virtual/"
40
+ # - the final link target is always the join of dst / selected-file
41
+ # - can be a list for multiple destinations
42
+ # - when the get list is a single file, and dst is not "." and does not end in "/", the file will be renamed
43
+ - src: services/
44
+ - get: src/types.ts
45
+ dst: [backend/types/index.ts, frontend/types/index.ts]
46
+ - src: ./services/
47
+ - src: /
48
+ get: [ frontend/*, backend/* ]
49
+ - get: bin/check-dependencies.sh # copies from core/bin into $config.root/dist/
50
+ dst: ../dist/check-dependencies.sh
51
+ - src: i18n
52
+ dst: frontend/src/orchestrator/i18n/app/
53
+ - src: workbench/i18n
54
+ dst: frontend/src/orchestrator/i18n/workbench/
55
+ - src: shared
56
+ dst: [ frontend/src/shared/app/, backend/src/shared/app/ ]
57
+ - src: $/shared/
58
+ dst: [ backend/src/shared/app/, backend/src/shared/app/ ]
59
+
60
+ # these are the chokidar watcher options that get passed along as is (ignored string compiled as RegExp)
61
+ watcher:
62
+ followSymlinks: false
63
+ ignoreInitial: true
64
+ ignored: ^node_modules|/node_modules$|^dist|/dist$|^\\.git|/\\.git$
65
+
66
+ volumes:
67
+ # these are added to the volumes of the respective services in the compose files
68
+ # since later volumes override earlier volumes, the order here is important
69
+ # for production builds this also defines the order of COPY operations for image creation
70
+ # volume sources can be the same as mapping sources, with one exception:
71
+ # there can't be any direct mounting of core based paths, instead there are vfs based paths
72
+ # i.e. paths starting with "." are relative to "$config.root/virtual"
73
+ -
File without changes
File without changes
@@ -0,0 +1,61 @@
1
+ defineRacletteConfig:
2
+ name: "raclette-dev"
3
+
4
+ # Configure services
5
+ services:
6
+ frontend:
7
+ enabled: true
8
+ port: 8081
9
+
10
+ backend:
11
+ enabled: true
12
+ port: 8082
13
+ enableDebug: {{process.env.ENABLE_DEBUG}}
14
+ installPackages: ["imagemagick", "font-overpass", "font-dejavu"]
15
+
16
+ mongodb:
17
+ name: "raclette-mongodb"
18
+ enabled: true
19
+ port: 27017
20
+ volume: "raclette-mongodb"
21
+ databaseName: "raclette"
22
+
23
+ cache:
24
+ name: "raclette-cache"
25
+ volume: "raclette-cache"
26
+ enabled: true
27
+ port: 6379
28
+
29
+ workbench:
30
+ enabled: true
31
+ debugPort: 9228
32
+ frontendPort: 8083
33
+ backendPort: 8084
34
+ withLogs: false
35
+
36
+ # list your installed plugins
37
+ # make sure they are listed in your package.json
38
+ # Environment-specific configuration
39
+ env:
40
+ development:
41
+ RACLETTE_DEBUG_MODE: true
42
+ production:
43
+ NODE_ENV: "production"
44
+
45
+ # Frontend framework configuration
46
+ frontend:
47
+ meta:
48
+ title: "Dev-Setup"
49
+ i18n:
50
+ locales: ["tl-TL", "en-EU", "de-DE"]
51
+ framework: "vue"
52
+ vue:
53
+ plugins: ["vue-router"]
54
+ workbench:
55
+ frontend:
56
+ i18n:
57
+ # explicitly set enabled languages for the workbench
58
+ locales: ["tl-TL", "en-EU", "de-DE"]
59
+ eslint:
60
+ useRecommended: false
61
+
@@ -0,0 +1,59 @@
1
+ name: "raclette-dev"
2
+ root: ".raclette"
3
+
4
+ services:
5
+ frontend:
6
+ enabled: true
7
+ port: 8081
8
+
9
+ backend:
10
+ enabled: true
11
+ port: 8082
12
+ enableDebug: {{process.env.ENABLE_DEBUG}}
13
+ installPackages: []
14
+
15
+ mongodb:
16
+ name: "raclette-mongodb"
17
+ enabled: true
18
+ port: 27017
19
+ volume: "raclette-mongodb"
20
+ databaseName: "raclette"
21
+
22
+ cache:
23
+ name: "raclette-cache"
24
+ volume: "raclette-cache"
25
+ enabled: true
26
+ port: 6379
27
+
28
+ workbench:
29
+ enabled: true
30
+ debugPort: 9228
31
+ frontendPort: 8083
32
+ backendPort: 8084
33
+ withLogs: false
34
+
35
+ # list your installed plugins
36
+ # make sure they are listed in your package.json
37
+ # Environment-specific configuration
38
+ env:
39
+ development:
40
+ RACLETTE_DEBUG_MODE: true
41
+ production:
42
+ NODE_ENV: "production"
43
+
44
+ # Frontend framework configuration
45
+ frontend:
46
+ meta:
47
+ title: "Dev-Setup"
48
+ i18n:
49
+ locales: ["tl-TL", "en-EU", "de-DE"]
50
+ framework: "vue"
51
+ vue:
52
+ plugins: ["vue-router"]
53
+ workbench:
54
+ frontend:
55
+ i18n:
56
+ # explicitly set enabled languages for the workbench
57
+ locales: ["tl-TL", "en-EU", "de-DE"]
58
+ eslint:
59
+ useRecommended: false
@@ -0,0 +1,5 @@
1
+ declare module "*.vue" {
2
+ import { DefineComponent } from "vue"
3
+ const component: DefineComponent<{}, {}, any>
4
+ export default component
5
+ }
File without changes
@@ -0,0 +1,316 @@
1
+ RacletteAppMode: [ "workbench" , "product-view" ]
2
+
3
+ RacletteConfig:
4
+ name: string
5
+ root: string
6
+
7
+ services:
8
+ frontend?: ServiceFrontendConfig
9
+ backend?: ServiceBackendConfig
10
+
11
+ mongodb?:
12
+ enabled: boolean
13
+ port: number
14
+ name?: string
15
+ volume?: string
16
+ databaseName?: string
17
+ volumes?: VolumeDefinition[] // Add custom volumes property
18
+ cache?: {
19
+ enabled: boolean
20
+ port: number
21
+ name?: string
22
+ volume?: string
23
+ db?: number
24
+ volumes?: VolumeDefinition[]
25
+
26
+ # workbench?: {
27
+ # enabled: boolean
28
+ # debugPort?: number
29
+ # withLogs?: boolean
30
+ # frontendPort: number
31
+ # backendPort: number
32
+ # }
33
+ # [key: string]: any
34
+ # }
35
+ # plugins: Array<string | [string, any]>
36
+ # modules: Array<string | [string, any]>
37
+ # env: {
38
+ # development?: EnvironmentVariables
39
+ # production?: EnvironmentVariables
40
+ # [key: string]: EnvironmentVariables | undefined
41
+ # }
42
+ # global: {
43
+ # requireAuthentication: boolean
44
+ # appMode?: RacletteAppMode
45
+ # }
46
+ # frontend: {
47
+ # additonalPluginPaths?: string[]
48
+ # framework: "vue" | "react"
49
+ # pleaseLetUsAdvertiseOurselfs?: boolean
50
+ # advertiseYourself?: string
51
+ # preventNotifications?: boolean
52
+ # i18n?: {
53
+ # locales?: string[]
54
+ # priorities?: Record<string, number>
55
+ # }
56
+ # vue?: {
57
+ # plugins: string[]
58
+ # }
59
+ # react?: {
60
+ # plugins: string[]
61
+ # }
62
+ # custom?: {
63
+ # [key: string]: any
64
+ # }
65
+ # }
66
+ # backend: {
67
+ # additonalPluginPaths?: string[]
68
+ # sockets?: SocketConfig
69
+ # custom?: {
70
+ # [key: string]: any
71
+ # }
72
+ # cache?: CacheConfig
73
+ # }
74
+ # workbench?: WorkbenchConfig
75
+ # typescript?: {
76
+ # compilerOptions?: {
77
+ # // Allow for any compiler option to be overridden
78
+ # [key: string]: any
79
+ # }
80
+ # }
81
+ # eslint?: {
82
+ # rules?: Record<string, any>
83
+ # plugins?: string[]
84
+ # extends?: string[]
85
+ # ignores?: string[]
86
+ # // Whether to use recommended rules
87
+ # useRecommended?: boolean
88
+ # // For environment-specific configurations
89
+ # env?: Record<string, any>
90
+ # }
91
+ # // Multi-App Workspace feature - configurable source directories
92
+ # sourceDirectories?: Array<{
93
+ # name: string
94
+ # path: string // Supports env variables like process.env.SOME_PATH || "../fallback"
95
+ # priority: number
96
+ # servicePathMap?: {
97
+ # [service: string]: string
98
+ # }
99
+ # folderMappings?: {
100
+ # [targetPath: string]: string
101
+ # }
102
+ # }>
103
+ # // Generic package merging configuration
104
+ # packageMerging?: {
105
+ # frontend?: PackageSourceConfig[]
106
+ # backend?: PackageSourceConfig[]
107
+ # [service: string]: PackageSourceConfig[] | undefined
108
+ # }
109
+ # // Configurable lock file paths
110
+ # lockFiles?: {
111
+ # frontend?: string
112
+ # backend?: string
113
+ # [service: string]: string | undefined
114
+ # }
115
+ #}
116
+ #
117
+ #export type WorkbenchConfig = {
118
+ # frontend: {
119
+ # i18n?: {
120
+ # locales?: string[]
121
+ # }
122
+ # }
123
+ #}
124
+ #
125
+ #export type ServiceFrontendConfig = {
126
+ # enabled: boolean
127
+ # port: number
128
+ # name?: string
129
+ # nodeModulesVolume?: string
130
+ # installPackages?: string[]
131
+ # volumes?: VolumeDefinition[] // Add custom volumes property
132
+ #}
133
+ #
134
+ #export type ServiceBackendConfig = {
135
+ # enabled: boolean
136
+ # port: number
137
+ # name?: string
138
+ # nodeModulesVolume?: string
139
+ # enableDebug?: boolean
140
+ # installPackages?: string[]
141
+ # volumes?: VolumeDefinition[] // Add custom volumes property
142
+ #}
143
+ #
144
+ #export type EnvironmentVariables = {
145
+ # RACLETTE_CORE_ABSOLUTE_PATH?: string
146
+ # RACLETTE_DEBUG_MODE?: boolean
147
+ # RACLETTE_SOCKET_URL?: string
148
+ # RACLETTE_SERVER_BASE_URL?: string
149
+ # RACLETTE_INERHIT_NPMRC?: boolean
150
+ # RACLETTE_DISABLE_PLUGIN_LOGS?: boolean
151
+ # // overrides for service config
152
+ # RACLETTE_SERVER_CONTAINERNAME?: string
153
+ # RACLETTE_SERVER_PORT?: number
154
+ # RACLETTE_SERVER_TOKEN_SECRET?: string
155
+ # RACLETTE_CLIENT_CONTAINERNAME?: string
156
+ # RACLETTE_CLIENT_PORT?: number
157
+ # RACLETTE_MONGODB_HOST?: string
158
+ # RACLETTE_MONGODB_CONTAINERNAME?: string
159
+ # RACLETTE_MONGODB_PORT?: number
160
+ # RACLETTE_MONGODB_VOLUME?: string
161
+ # RACLETTE_MONGODB_CONFIG_VOLUME?: string
162
+ # RACLETTE_CACHE_URL?: string
163
+ # RACLETTE_CACHE_CONTAINERNAME?: string
164
+ # RACLETTE_CACHE_PORT?: number
165
+ # RACLETTE_CACHE_VOLUME?: string
166
+ #
167
+ # // eslint-disable-next-line @typescript-eslint/no-explicit-any
168
+ # [key: string]: any // Allow additional vars
169
+ #}
170
+ #
171
+ #/**
172
+ # * Volume Definition for Docker Compose
173
+ # */
174
+ #export type VolumeDefinition = {
175
+ # // Source can be a named volume, host path, or volume specification
176
+ # source: string
177
+ # // Target is the path inside the container
178
+ # target: string
179
+ # // Optional volume type (bind, volume, tmpfs)
180
+ # type?: "bind" | "volume" | "tmpfs"
181
+ # // Optional read-only flag
182
+ # readonly?: boolean
183
+ # // Skip this volume if source path doesn't exist
184
+ # mustExist?: boolean
185
+ # // Optional volume driver-specific options
186
+ # volumeOptions?: {
187
+ # // Populate on service creation when volume doesn't exist
188
+ # nocopy?: boolean
189
+ # // Any other driver-specific options
190
+ # [key: string]: any
191
+ # }
192
+ # // Optional bind-specific options
193
+ # bindOptions?: {
194
+ # // Propagation mode for bind mounts
195
+ # propagation?:
196
+ # | "private"
197
+ # | "rprivate"
198
+ # | "shared"
199
+ # | "rshared"
200
+ # | "slave"
201
+ # | "rslave"
202
+ # // Create host path if it doesn't exist
203
+ # createHostPath?: boolean
204
+ # // Any other bind-specific options
205
+ # [key: string]: any
206
+ # }
207
+ # // Optional tmpfs-specific options
208
+ # tmpfsOptions?: {
209
+ # // Size of the tmpfs mount in bytes
210
+ # size?: number
211
+ # // File mode of the tmpfs in octal
212
+ # mode?: number
213
+ # }
214
+ #}
215
+ #/**
216
+ # * Cache Configuration
217
+ # */
218
+ #export type CacheConfig = {
219
+ # persistence?: "none" | "rdb" | "aof" | "rdb+aof"
220
+ # RDB_OPTIONS?: string
221
+ #}
222
+ #/**
223
+ # * Socket Configuration
224
+ # */
225
+ #export type SocketConfig = {
226
+ # /** Configure what data is automatically sent when a frontend joins */
227
+ # autoSend: {
228
+ # /** Send compositions data on join */
229
+ # compositions: boolean
230
+ # /** Send interaction links data on join */
231
+ # interactionLinks: boolean
232
+ # /** Send project configuration on join */
233
+ # projectConfig: boolean
234
+ # /** Additional custom data types to send (must be in the DB and registered via stream) */
235
+ # additionalDatatypes?: {
236
+ # [key: string]: boolean | undefined
237
+ # }
238
+ # customData?: {
239
+ # /** Key is the property name in the response, value is the static data */
240
+ # [key: string]: any
241
+ # }
242
+ # }
243
+ #
244
+ # /** Socket security configuration */
245
+ # security: {
246
+ # /** Whether authentication is required for socket connections */
247
+ # requireAuth: boolean
248
+ # /** Token validation method */
249
+ # tokenValidation: "jwt"
250
+ # /** Custom validation handler path */
251
+ # customValidator?: string
252
+ # }
253
+ #
254
+ # /** Advanced socket options */
255
+ # options: {
256
+ # /** Socket.io adapter configuration */
257
+ # adapter: "memory" | "cache" | "mongodb"
258
+ # /** Connection timeout in milliseconds */
259
+ # connectionTimeout: number
260
+ # /** Ping interval in milliseconds */
261
+ # pingInterval: number
262
+ # /** Ping timeout in milliseconds */
263
+ # pingTimeout: number
264
+ # }
265
+ #}
266
+ #
267
+ #/**
268
+ # * Raclette Module Definition
269
+ # */
270
+ #export type RacletteModule = {
271
+ # name: string
272
+ # services?: Record<string, any>
273
+ # extendConfig?: (config: RacletteConfig, options: any) => RacletteConfig
274
+ # backendExtensions?: {
275
+ # plugins?: string[]
276
+ # routes?: string[]
277
+ # }
278
+ # frontendExtensions?: {
279
+ # components?: string[]
280
+ # plugins?: string[]
281
+ # }
282
+ # hooks?: Record<string, (...args: any[]) => Promise<void>>
283
+ #}
284
+ #
285
+ #export type PluginMetadata = {
286
+ # name: string
287
+ # author: string
288
+ # version: string
289
+ # description?: string
290
+ # repository?: string
291
+ # license?: string
292
+ # hooks?: {
293
+ # beforeMount?: (app: any) => Promise<void>
294
+ # mounted?: (app: any) => Promise<void>
295
+ # beforeUnmount?: (app: any) => Promise<void>
296
+ # }
297
+ # pluginKey?: string
298
+ # dependencies?: string[]
299
+ # options?: Record<string, any>
300
+ # frontendDir?: string // default: "./frontend"
301
+ # backendDir?: string // default: "./backend"
302
+ #}
303
+ #
304
+ #export type PackageSourceConfig = {
305
+ # // Path to the packages.json file (supports env variables)
306
+ # file: string
307
+ # // Key within the file to extract (e.g., "frontend", "workbench.frontend")
308
+ # key: string
309
+ #}
310
+ #
311
+ #export type PackageTarget =
312
+ # | "frontend"
313
+ # | "backend"
314
+ # | "workbench.frontend"
315
+ # | "workbench.backend"
316
+ #