@venizia/ardor 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/{vulcan-preset → presets}/app/files/.configs/builders/Dockerfile +8 -2
  2. package/dist/presets/app/files/.configs/builders/docker-entrypoint.d/40-runtime-config.sh +93 -0
  3. package/dist/{vulcan-preset → presets}/app/files/.configs/builders/nginx.conf.template +6 -0
  4. package/dist/{vulcan-preset → presets}/app/files/_env.example +5 -0
  5. package/dist/{vulcan-preset → presets}/app/files/src/application.test.ts +19 -6
  6. package/dist/{vulcan-preset → presets}/app/files/src/configurations/admin.configuration.ts +11 -2
  7. package/dist/{vulcan-preset → presets}/app/files/src/index.html +3 -0
  8. package/dist/presets/app/files/src/public/config.js +3 -0
  9. package/dist/{vulcan-preset → presets}/app/files/tsconfig.json +0 -2
  10. package/dist/{vulcan-preset → presets}/app/preset.json +27 -27
  11. package/dist/{vulcan-preset → presets}/lib/files/tsconfig.json +0 -2
  12. package/dist/{vulcan-preset → presets}/lib/preset.json +13 -13
  13. package/package.json +30 -44
  14. /package/dist/{vulcan-preset → presets}/app/files/.configs/builders/vite.config.mts +0 -0
  15. /package/dist/{vulcan-preset → presets}/app/files/.configs/formatters/.ignore +0 -0
  16. /package/dist/{vulcan-preset → presets}/app/files/.configs/formatters/oxfmt.config.mts +0 -0
  17. /package/dist/{vulcan-preset → presets}/app/files/.configs/lints/.ignore +0 -0
  18. /package/dist/{vulcan-preset → presets}/app/files/.configs/lints/eslint.config.mjs +0 -0
  19. /package/dist/{vulcan-preset → presets}/app/files/.configs/lints/oxlint.config.mts +0 -0
  20. /package/dist/{vulcan-preset → presets}/app/files/src/application.ts +0 -0
  21. /package/dist/{vulcan-preset → presets}/app/files/src/components/shadcn/button.tsx +0 -0
  22. /package/dist/{vulcan-preset → presets}/app/files/src/components/shadcn/card.tsx +0 -0
  23. /package/dist/{vulcan-preset → presets}/app/files/src/main.tsx +0 -0
  24. /package/dist/{vulcan-preset → presets}/app/files/src/pages/home.tsx +0 -0
  25. /package/dist/{vulcan-preset → presets}/app/files/src/themes/index.css +0 -0
  26. /package/dist/{vulcan-preset → presets}/app/files/src/utilities/tw.utility.ts +0 -0
  27. /package/dist/{vulcan-preset → presets}/lib/files/.configs/formatters/.ignore +0 -0
  28. /package/dist/{vulcan-preset → presets}/lib/files/.configs/formatters/oxfmt.config.mts +0 -0
  29. /package/dist/{vulcan-preset → presets}/lib/files/.configs/lints/.ignore +0 -0
  30. /package/dist/{vulcan-preset → presets}/lib/files/.configs/lints/eslint.config.mjs +0 -0
  31. /package/dist/{vulcan-preset → presets}/lib/files/.configs/lints/oxlint.config.mts +0 -0
  32. /package/dist/{vulcan-preset → presets}/lib/files/src/feature.test.ts +0 -0
  33. /package/dist/{vulcan-preset → presets}/lib/files/src/feature.ts +0 -0
  34. /package/dist/{vulcan-preset → presets}/lib/files/src/index.ts +0 -0
@@ -5,7 +5,7 @@
5
5
  # docker build -f {{appPath}}/.configs/builders/Dockerfile -t {{app}} \
6
6
  # --build-arg APP_BUILD_COMMIT="$(git rev-parse HEAD)" \
7
7
  # --build-arg APP_BUILD_BRANCH="$(git rev-parse --abbrev-ref HEAD)" .
8
- # docker run --rm -p 8080:8080 -e API_UPSTREAM=http://api:3000 {{app}}
8
+ # docker run --rm -p 8080:8080 -e API_UPSTREAM=http://api:3000 -e VITE_API_URL=/api {{app}}
9
9
  #
10
10
  # The preset cannot know which workspace packages this app needs, so the whole context is copied (the
11
11
  # .dockerignore at the root filters it), then installed and built. A project can list the packages by
@@ -64,6 +64,11 @@ LABEL org.opencontainers.image.revision="${APP_BUILD_COMMIT}"
64
64
  COPY --from=builder /home/bun/app/{{appPath}}/.configs/builders/nginx.conf.template /etc/nginx/templates/default.conf.template
65
65
  COPY --from=builder --chown=101:101 /home/bun/app/{{appPath}}/dist /usr/share/nginx/html
66
66
 
67
+ # The runtime config: this script writes /usr/share/nginx/html/config.js from the VITE_ environment variables
68
+ # when the container starts. 0755 because the base entrypoint skips a script without the executable bit; the
69
+ # file it rewrites is the one the build copied from src/public, owned by 101 above.
70
+ COPY --from=builder --chmod=0755 /home/bun/app/{{appPath}}/.configs/builders/docker-entrypoint.d/40-runtime-config.sh /docker-entrypoint.d/40-runtime-config.sh
71
+
67
72
  # Where /api goes: a compose service name, a cluster service, an address (an origin, with no path).
68
73
  ENV API_UPSTREAM=http://api:3000
69
74
 
@@ -71,7 +76,8 @@ ENV API_UPSTREAM=http://api:3000
71
76
  # gives to `resolver`: nginx looks the upstream up per request, so the container starts without it.
72
77
  ENV NGINX_ENTRYPOINT_LOCAL_RESOLVERS=1
73
78
 
74
- # No ENTRYPOINT on purpose: the base image's /docker-entrypoint.sh renders the templates.
79
+ # No ENTRYPOINT on purpose: the base image's /docker-entrypoint.sh renders the templates and runs the
80
+ # scripts of /docker-entrypoint.d/ (a custom ENTRYPOINT would replace it and skip both).
75
81
  EXPOSE 8080
76
82
 
77
83
  CMD ["nginx", "-g", "daemon off;"]
@@ -0,0 +1,93 @@
1
+ #!/bin/sh
2
+ # Writes /usr/share/nginx/html/config.js from the container's environment, so one built image serves
3
+ # every environment: `docker run -e VITE_API_URL=https://api.example.com image`.
4
+ #
5
+ # The nginx image runs every executable file of /docker-entrypoint.d/ in `sort -V` order before it starts
6
+ # nginx. The 40 puts this after the base image's own scripts. A script without the executable bit is
7
+ # skipped, hence `COPY --chmod=0755` in the Dockerfile; the Dockerfile must not declare an ENTRYPOINT,
8
+ # which would replace the script that runs this directory.
9
+ #
10
+ # What is published: the variables named VITE_ followed by capitals, digits and underscores, and nothing
11
+ # else. That is Vite's own rule for what reaches the browser, so the same names work in dev and here.
12
+ # Every published value is readable by every visitor: never put a secret in a VITE_ variable. A name
13
+ # with SECRET, PASSWORD or TOKEN in it stops the container, to catch that mistake early (a name with KEY
14
+ # is fine: public keys are normal). Values are escaped as JavaScript string content, so no value can
15
+ # end its string or the file.
16
+ #
17
+ # RUNTIME_CONFIG_TARGET names another file, for the tests; it is not a VITE_ name, so it is never published.
18
+ set -eu
19
+
20
+ TARGET="${RUNTIME_CONFIG_TARGET:-/usr/share/nginx/html/config.js}"
21
+
22
+ # A read-only file is one the operator mounted over config.js: keep it as it is.
23
+ if [ -e "$TARGET" ] && [ ! -w "$TARGET" ]; then
24
+ echo "[runtime-config] $TARGET is read-only (mounted): keeping the supplied file"
25
+ exit 0
26
+ fi
27
+
28
+ # One awk program, so the values never pass through a shell expansion. ENVIRON holds them as they are.
29
+ BODY=$(awk '
30
+ function escape(text, result, index_, character) {
31
+ result = ""
32
+ for (index_ = 1; index_ <= length(text); index_++) {
33
+ character = substr(text, index_, 1)
34
+ result = result ((character in escapes) ? escapes[character] : character)
35
+ }
36
+ return result
37
+ }
38
+
39
+ BEGIN {
40
+ for (code = 1; code < 32; code++) {
41
+ escapes[sprintf("%c", code)] = sprintf("\\u%04x", code)
42
+ }
43
+ escapes[sprintf("%c", 127)] = "\\u007f"
44
+ escapes["\\"] = "\\\\"
45
+ escapes["\""] = "\\\""
46
+ escapes["<"] = "\\u003c"
47
+ escapes[">"] = "\\u003e"
48
+ escapes["&"] = "\\u0026"
49
+
50
+ count = 0
51
+ failed = 0
52
+ for (name in ENVIRON) {
53
+ if (name !~ /^VITE_[A-Z0-9_]+$/) {
54
+ continue
55
+ }
56
+ if (name ~ /SECRET|PASSWORD|TOKEN/) {
57
+ print "[runtime-config] " name " looks like a secret, and every VITE_ variable is published to every visitor: rename it or keep it out of VITE_" > "/dev/stderr"
58
+ failed = 1
59
+ continue
60
+ }
61
+ names[++count] = name
62
+ }
63
+ if (failed) {
64
+ exit 1
65
+ }
66
+
67
+ for (i = 2; i <= count; i++) {
68
+ current = names[i]
69
+ for (j = i - 1; j >= 1 && names[j] > current; j--) {
70
+ names[j + 1] = names[j]
71
+ }
72
+ names[j + 1] = current
73
+ }
74
+
75
+ for (i = 1; i <= count; i++) {
76
+ printf " \"%s\": \"%s\"%s\n", names[i], escape(ENVIRON[names[i]]), (i < count ? "," : "")
77
+ }
78
+ }
79
+ ' </dev/null) || {
80
+ echo "[runtime-config] FATAL: config.js was not written" >&2
81
+ exit 1
82
+ }
83
+
84
+ {
85
+ printf 'window.__APP_CONFIG__ = Object.freeze({'
86
+ if [ -n "$BODY" ]; then
87
+ printf '\n%s\n' "$BODY"
88
+ fi
89
+ printf '});\n'
90
+ } >"$TARGET"
91
+
92
+ NAMES=$(printf '%s\n' "$BODY" | sed -n 's/^ "\([A-Z0-9_]*\)": .*/\1/p' | tr '\n' ' ')
93
+ echo "[runtime-config] wrote $TARGET with: ${NAMES:-nothing}"
@@ -20,6 +20,12 @@ server {
20
20
  proxy_set_header X-Forwarded-Proto $scheme;
21
21
  }
22
22
 
23
+ # The runtime config is written when the container starts and has no hash in its name: never cached.
24
+ location = /config.js {
25
+ add_header Cache-Control "no-store";
26
+ try_files $uri =404;
27
+ }
28
+
23
29
  # The built files carry a content hash in their name, so a browser may keep them for good.
24
30
  location /assets/ {
25
31
  expires 1y;
@@ -6,3 +6,8 @@ PORT={{devPort}}
6
6
 
7
7
  # The backend the dev server forwards /api to. Empty: the one chosen when the app was added (none, if it had no backend).
8
8
  API_URL={{apiUrl}}
9
+
10
+ # The API the app calls. Empty: /api. In dev the app reads it as import.meta.env.VITE_API_URL; in the image it
11
+ # is the VITE_API_URL given to `docker run -e`, which config.js carries to the browser when the container starts.
12
+ # Every VITE_ variable is public: anything published is readable by every visitor. Never put a secret in one.
13
+ VITE_API_URL=
@@ -1,10 +1,11 @@
1
1
  import 'reflect-metadata';
2
2
 
3
- import { describe, expect, test } from 'bun:test';
3
+ import { afterEach, describe, expect, test } from 'bun:test';
4
4
 
5
5
  import {
6
6
  BaseArdorApplication,
7
7
  CoreBindings,
8
+ RUNTIME_CONFIG_GLOBAL,
8
9
  type IApplicationInfo,
9
10
  type IArtifactIndex,
10
11
  } from '@venizia/ardor';
@@ -24,14 +25,26 @@ class TestApplication extends BaseArdorApplication {
24
25
  bindContext(): void {}
25
26
  }
26
27
 
28
+ const restUrlOf = async (): Promise<unknown> => {
29
+ const application = new TestApplication();
30
+
31
+ await application.start();
32
+
33
+ return application.get<{ url: string }>({ key: CoreBindings.REST_DATA_PROVIDER_OPTIONS }).url;
34
+ };
35
+
27
36
  describe('AdminConfiguration', () => {
37
+ afterEach(() => {
38
+ Reflect.deleteProperty(globalThis, RUNTIME_CONFIG_GLOBAL);
39
+ });
40
+
28
41
  test('binds the REST data provider options under their key', async () => {
29
- const application = new TestApplication();
42
+ expect(await restUrlOf()).toBe('/api');
43
+ });
30
44
 
31
- await application.start();
45
+ test('the API url is the one config.js wrote when the container started', async () => {
46
+ Reflect.set(globalThis, RUNTIME_CONFIG_GLOBAL, { VITE_API_URL: 'https://api.example.com' });
32
47
 
33
- expect(application.get({ key: CoreBindings.REST_DATA_PROVIDER_OPTIONS })).toMatchObject({
34
- url: '/api',
35
- });
48
+ expect(await restUrlOf()).toBe('https://api.example.com');
36
49
  });
37
50
  });
@@ -5,6 +5,7 @@ import {
5
5
  DefaultI18nProvider,
6
6
  DefaultRestDataProvider,
7
7
  englishMessages,
8
+ getRuntimeConfig,
8
9
  inject,
9
10
  provide,
10
11
  } from '@venizia/ardor';
@@ -20,8 +21,16 @@ export class AdminConfiguration {
20
21
 
21
22
  @provide({ key: CoreBindings.REST_DATA_PROVIDER_OPTIONS })
22
23
  restDataProviderOptions() {
23
- // No sign-in: no request carries an Authorization header.
24
- return { url: '/api', noAuthPathRegex: /./ };
24
+ // No sign-in: no request carries an Authorization header. The API is `/api` (the image's nginx
25
+ // forwards it to API_UPSTREAM) unless VITE_API_URL says otherwise: set in .env in dev, or written to
26
+ // config.js when the container starts, so one built image serves every environment.
27
+ const url = getRuntimeConfig({
28
+ key: 'VITE_API_URL',
29
+ buildTimeEnv: import.meta.env,
30
+ defaultValue: '/api',
31
+ });
32
+
33
+ return { url, noAuthPathRegex: /./ };
25
34
  }
26
35
 
27
36
  @provide({ key: CoreBindings.I18N_PROVIDER_OPTIONS })
@@ -9,6 +9,9 @@
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
12
+ <!-- The runtime config: a classic script, so it runs before the module below. The image rewrites it when the
13
+ container starts; src/public/config.js is the empty one that dev and the build use. -->
14
+ <script src="/config.js"></script>
12
15
  <script type="module" src="/main.tsx"></script>
13
16
  </body>
14
17
  </html>
@@ -0,0 +1,3 @@
1
+ // The runtime config. The image's entrypoint replaces this file when the container starts, with the VITE_
2
+ // environment variables; in dev and in the build it is empty, and the app falls back to import.meta.env.
3
+ window.__APP_CONFIG__ = {};
@@ -2,8 +2,6 @@
2
2
  "$schema": "http://json.schemastore.org/tsconfig",
3
3
  "extends": "@venizia/dev-configs/tsconfig.react.json",
4
4
  "compilerOptions": {
5
- "target": "ESNext",
6
- "lib": ["ESNext", "DOM", "DOM.Iterable"],
7
5
  "types": ["vite/client", "bun"],
8
6
  "noEmit": true,
9
7
  "isolatedModules": true,
@@ -11,48 +11,48 @@
11
11
  "/"
12
12
  ],
13
13
  "dependencies": {
14
- "@reduxjs/toolkit": "^2.12.0",
15
- "@tanstack/react-query": "^5.101.2",
16
- "@venizia/ardor": "0.3.5",
17
- "@venizia/ignis-connectors": "0.3.4",
18
- "@venizia/ignis-filter": "0.3.4",
19
- "@venizia/ignis-helpers": "0.3.4",
20
- "@venizia/ignis-inversion": "0.3.5",
21
- "@venizia/ignis-kernel": "0.3.4",
14
+ "@reduxjs/toolkit": "^2.13.0",
15
+ "@tanstack/react-query": "^5.104.5",
16
+ "@venizia/ardor": "0.3.7",
17
+ "@venizia/ignis-connectors": "0.3.6",
18
+ "@venizia/ignis-filter": "0.3.6",
19
+ "@venizia/ignis-helpers": "0.3.6",
20
+ "@venizia/ignis-inversion": "0.3.7",
21
+ "@venizia/ignis-kernel": "0.3.6",
22
22
  "class-variance-authority": "^0.7.1",
23
23
  "clsx": "^2.1.1",
24
- "ra-core": "^5.15.0",
25
- "ra-i18n-polyglot": "^5.15.0",
26
- "react": "^19.2.7",
27
- "react-dom": "^19.2.7",
24
+ "ra-core": "^5.15.5",
25
+ "ra-i18n-polyglot": "^5.15.5",
26
+ "react": "^19.3.1",
27
+ "react-dom": "^19.3.1",
28
28
  "react-redux": "^9.3.0",
29
- "react-router-dom": "^7.9.4",
29
+ "react-router-dom": "^7.18.4",
30
30
  "reflect-metadata": "^0.2.2",
31
31
  "tailwind-merge": "^3.7.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@tailwindcss/vite": "^4.3.3",
35
- "@types/bun": "^1.4.1",
35
+ "@types/bun": "^1.4.3",
36
36
  "@types/react": "^19",
37
37
  "@types/react-dom": "^19",
38
- "@venizia/dev-configs": "0.3.4",
39
- "@venizia/ignis-boot": "0.3.4",
40
- "@vitejs/plugin-react": "^6.1.1",
41
- "eslint": "^10.10.0",
42
- "oxfmt": "0.73.0",
43
- "oxlint": "1.88.0",
38
+ "@venizia/dev-configs": "0.3.6",
39
+ "@venizia/ignis-boot": "0.3.6",
40
+ "@vitejs/plugin-react": "^6.1.2",
41
+ "eslint": "^10.13.0",
42
+ "oxfmt": "0.74.0",
43
+ "oxlint": "1.89.0",
44
44
  "oxlint-tsgolint": "7.0.2004",
45
45
  "tailwindcss": "^4.3.3",
46
46
  "typescript": "^6.0.3",
47
- "vite": "^8.2.2"
47
+ "vite": "^8.3.5"
48
48
  },
49
49
  "peers": {
50
- "@venizia/dev-configs": "^0.3.4",
51
- "@venizia/ignis-connectors": "^0.3.0",
52
- "@venizia/ignis-filter": "^0.3.0",
53
- "@venizia/ignis-helpers": "^0.3.0",
54
- "@venizia/ignis-inversion": "^0.3.0",
55
- "@venizia/ignis-kernel": "^0.3.0"
50
+ "@venizia/dev-configs": "^0.3.6",
51
+ "@venizia/ignis-connectors": "^0.3.6",
52
+ "@venizia/ignis-filter": "^0.3.6",
53
+ "@venizia/ignis-helpers": "^0.3.6",
54
+ "@venizia/ignis-inversion": "^0.3.7",
55
+ "@venizia/ignis-kernel": "^0.3.6"
56
56
  },
57
57
  "scripts": {
58
58
  "server:dev": "vite --config .configs/builders/vite.config.mts",
@@ -2,8 +2,6 @@
2
2
  "$schema": "http://json.schemastore.org/tsconfig",
3
3
  "extends": "@venizia/dev-configs/tsconfig.react.json",
4
4
  "compilerOptions": {
5
- "target": "ESNext",
6
- "lib": ["ESNext", "DOM", "DOM.Iterable"],
7
5
  "types": ["bun"],
8
6
  "noEmit": true,
9
7
  "isolatedModules": true,
@@ -3,25 +3,25 @@
3
3
  "summary": "An ARDOR feature package: one Features.define, a test that mounts it in a probe application, typecheck, lint and test. No bundler and no dev server.",
4
4
  "dependencies": {},
5
5
  "devDependencies": {
6
- "@types/bun": "^1.4.1",
6
+ "@types/bun": "^1.4.3",
7
7
  "@types/react": "^19",
8
- "@venizia/ardor": "^0.3.5",
9
- "@venizia/dev-configs": "0.3.4",
10
- "eslint": "^10.10.0",
11
- "oxfmt": "0.73.0",
12
- "oxlint": "1.88.0",
8
+ "@venizia/ardor": "^0.3.7",
9
+ "@venizia/dev-configs": "0.3.6",
10
+ "eslint": "^10.13.0",
11
+ "oxfmt": "0.74.0",
12
+ "oxlint": "1.89.0",
13
13
  "oxlint-tsgolint": "7.0.2004",
14
- "react": "^19.2.7",
15
- "react-dom": "^19.2.7",
16
- "react-router-dom": "^7.9.4",
14
+ "react": "^19.3.1",
15
+ "react-dom": "^19.3.1",
16
+ "react-router-dom": "^7.18.4",
17
17
  "reflect-metadata": "^0.2.2",
18
18
  "typescript": "^6.0.3"
19
19
  },
20
20
  "peerDependencies": {
21
- "@venizia/ardor": "^0.3.5",
22
- "react": "^19.2.7",
23
- "react-dom": "^19.2.7",
24
- "react-router-dom": "^7.9.4",
21
+ "@venizia/ardor": "^0.3.7",
22
+ "react": "^19.3.1",
23
+ "react-dom": "^19.3.1",
24
+ "react-router-dom": "^7.18.4",
25
25
  "reflect-metadata": "^0.2.2"
26
26
  },
27
27
  "scripts": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@venizia/ardor",
3
- "version": "0.3.5",
3
+ "version": "0.3.7",
4
4
  "description": "ARDOR - frontend application framework for the VENIZIA family. One entry point over ardor-kernel, ardor-react and ardor-admin: IGNIS inversion of control, a REST data layer, auth and i18n providers, and the React bindings for a react-admin application.",
5
5
  "keywords": [
6
6
  "ardor",
@@ -59,8 +59,10 @@
59
59
  },
60
60
  "sideEffects": false,
61
61
  "vulcan": {
62
- "preset": "./dist/vulcan-preset/app/preset.json",
63
- "lib": "./dist/vulcan-preset/lib/preset.json"
62
+ "presets": {
63
+ "app": "./dist/presets/app/preset.json",
64
+ "lib": "./dist/presets/lib/preset.json"
65
+ }
64
66
  },
65
67
  "files": [
66
68
  "README.md",
@@ -73,30 +75,30 @@
73
75
  "access": "public"
74
76
  },
75
77
  "scripts": {
76
- "force-update": "sh ./scripts/force-update.sh",
78
+ "force-update": "sh ../../scripts/force-update.sh",
77
79
  "prepublishOnly": "make rebuild"
78
80
  },
79
81
  "dependencies": {
80
- "@venizia/ardor-admin": "0.3.0",
81
- "@venizia/ardor-kernel": "0.3.0",
82
- "@venizia/ardor-react": "0.3.0"
82
+ "@venizia/ardor-admin": "0.3.7",
83
+ "@venizia/ardor-kernel": "0.3.7",
84
+ "@venizia/ardor-react": "0.3.7"
83
85
  },
84
86
  "peerDependencies": {
85
- "@reduxjs/toolkit": ">=2.12.0",
86
- "@tanstack/react-query": ">=5.101.2",
87
- "@venizia/ignis-connectors": "^0.3.0",
88
- "@venizia/ignis-filter": "^0.3.0",
89
- "@venizia/ignis-helpers": "^0.3.0",
90
- "@venizia/ignis-inversion": "^0.3.0",
91
- "@venizia/ignis-kernel": "^0.3.0",
92
- "ra-core": ">=5.15.0",
93
- "ra-i18n-polyglot": ">=5.15.0",
94
- "react": ">=18.0",
95
- "react-dom": ">=18.0",
87
+ "@reduxjs/toolkit": ">=2.13.0",
88
+ "@tanstack/react-query": ">=5.104.5",
89
+ "@venizia/ignis-connectors": "^0.3.6",
90
+ "@venizia/ignis-filter": "^0.3.6",
91
+ "@venizia/ignis-helpers": "^0.3.6",
92
+ "@venizia/ignis-inversion": "^0.3.7",
93
+ "@venizia/ignis-kernel": "^0.3.6",
94
+ "ra-core": ">=5.15.5",
95
+ "ra-i18n-polyglot": ">=5.15.5",
96
+ "react": ">=19.3.1",
97
+ "react-dom": ">=19.3.1",
96
98
  "react-redux": ">=9.3.0",
97
- "react-router-dom": ">=7.9.4",
99
+ "react-router-dom": ">=7.18.4",
98
100
  "reflect-metadata": ">=0.2.2",
99
- "socket.io-client": ">=4.8.3"
101
+ "socket.io-client": ">=4.8.4"
100
102
  },
101
103
  "peerDependenciesMeta": {
102
104
  "@venizia/ignis-connectors": {
@@ -107,30 +109,14 @@
107
109
  }
108
110
  },
109
111
  "devDependencies": {
110
- "@reduxjs/toolkit": "^2.12.0",
111
- "@size-limit/preset-small-lib": "^11.2.0",
112
- "@tanstack/react-query": "^5.101.2",
113
- "@types/bun": "^1.4.1",
114
- "@types/react": "^19",
115
- "@types/react-dom": "^19",
116
- "@venizia/dev-configs": "^0.3.4",
117
- "@venizia/ignis-connectors": "^0.3.4",
118
- "@venizia/ignis-filter": "^0.3.4",
119
- "@venizia/ignis-inversion": "^0.3.5",
120
- "@venizia/ignis-kernel": "^0.3.4",
121
- "eslint": "^10.10.0",
122
- "oxfmt": "0.73.0",
123
- "oxlint": "1.88.0",
112
+ "@size-limit/preset-small-lib": "^14.2.0",
113
+ "@venizia/dev-configs": "^0.3.6",
114
+ "eslint": "^10.13.0",
115
+ "oxfmt": "0.74.0",
116
+ "oxlint": "1.89.0",
124
117
  "oxlint-tsgolint": "7.0.2004",
125
- "ra-core": "^5.15.0",
126
- "react": "^19.2.7",
127
- "react-dom": "^19.2.7",
128
- "react-redux": "^9.3.0",
129
- "react-router-dom": "^7.9.4",
130
- "reflect-metadata": "^0.2.2",
131
- "size-limit": "^11.2.0",
132
- "socket.io-client": "^4.8.3",
133
- "tsc-alias": "^1.8.16",
118
+ "size-limit": "^14.2.0",
119
+ "tsc-alias": "~1.8.17",
134
120
  "typescript": "^6.0.3"
135
121
  },
136
122
  "size-limit": [
@@ -152,7 +138,7 @@
152
138
  "react-router-dom",
153
139
  "reflect-metadata"
154
140
  ],
155
- "limit": "250 B"
141
+ "limit": "350 B"
156
142
  }
157
143
  ]
158
144
  }