@venizia/ardor 0.3.6 → 0.4.0
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/dist/presets/app/files/.configs/builders/Dockerfile +13 -2
- package/dist/presets/app/files/.configs/builders/docker-entrypoint.d/40-runtime-config.sh +129 -0
- package/dist/presets/app/files/.configs/builders/nginx.conf.template +6 -0
- package/dist/presets/app/files/.configs/formatters/.ignore +2 -2
- package/dist/presets/app/files/_env.example +5 -0
- package/dist/presets/app/files/src/application.test.ts +19 -6
- package/dist/presets/app/files/src/configurations/admin.configuration.ts +11 -2
- package/dist/presets/app/files/src/index.html +7 -1
- package/dist/presets/app/files/src/public/config.js +3 -0
- package/dist/presets/app/preset.json +14 -15
- package/dist/presets/lib/files/.configs/formatters/.ignore +2 -2
- package/dist/presets/lib/preset.json +3 -4
- package/package.json +42 -43
- package/dist/presets/app/files/.configs/formatters/oxfmt.config.mts +0 -4
- package/dist/presets/lib/files/.configs/formatters/oxfmt.config.mts +0 -4
|
@@ -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,14 +64,25 @@ 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
|
|
|
75
|
+
# The variables the app cannot run without, comma separated. A container that starts without one of them,
|
|
76
|
+
# or with it empty, stops and names it instead of falling back to a build-time value. Any name works, not
|
|
77
|
+
# only VITE_ ones; `-e APP_REQUIRED_ENV=...` overrides the list for one environment. Uncomment and list yours:
|
|
78
|
+
# ENV APP_REQUIRED_ENV=VITE_API_URL
|
|
79
|
+
|
|
70
80
|
# The base image reads the DNS servers of /etc/resolv.conf into ${NGINX_LOCAL_RESOLVERS}, which the template
|
|
71
81
|
# gives to `resolver`: nginx looks the upstream up per request, so the container starts without it.
|
|
72
82
|
ENV NGINX_ENTRYPOINT_LOCAL_RESOLVERS=1
|
|
73
83
|
|
|
74
|
-
# No ENTRYPOINT on purpose: the base image's /docker-entrypoint.sh renders the templates
|
|
84
|
+
# No ENTRYPOINT on purpose: the base image's /docker-entrypoint.sh renders the templates and runs the
|
|
85
|
+
# scripts of /docker-entrypoint.d/ (a custom ENTRYPOINT would replace it and skip both).
|
|
75
86
|
EXPOSE 8080
|
|
76
87
|
|
|
77
88
|
CMD ["nginx", "-g", "daemon off;"]
|
|
@@ -0,0 +1,129 @@
|
|
|
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
|
+
# Required variables: APP_REQUIRED_ENV lists, comma separated, the variables the app cannot run without,
|
|
18
|
+
# for example `ENV APP_REQUIRED_ENV="VITE_API_URL,API_UPSTREAM"` in the app's Dockerfile (an operator
|
|
19
|
+
# overrides it with `-e`). A listed variable that is unset or empty stops the container with exit 1, and
|
|
20
|
+
# the message names every missing one - never a value. Any variable name can be listed, not only VITE_
|
|
21
|
+
# ones; a spaces-only or empty entry is skipped, and an entry that is not a variable name is an error.
|
|
22
|
+
# Nothing listed checks nothing. A mounted config.js is kept before any check, as the operator supplied it.
|
|
23
|
+
#
|
|
24
|
+
# RUNTIME_CONFIG_TARGET names another file, for the tests; it is not a VITE_ name, so it is never published.
|
|
25
|
+
set -eu
|
|
26
|
+
|
|
27
|
+
TARGET="${RUNTIME_CONFIG_TARGET:-/usr/share/nginx/html/config.js}"
|
|
28
|
+
|
|
29
|
+
# A read-only file is one the operator mounted over config.js: keep it as it is.
|
|
30
|
+
if [ -e "$TARGET" ] && [ ! -w "$TARGET" ]; then
|
|
31
|
+
echo "[runtime-config] $TARGET is read-only (mounted): keeping the supplied file"
|
|
32
|
+
exit 0
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
# One awk program, so the values never pass through a shell expansion. ENVIRON holds them as they are.
|
|
36
|
+
BODY=$(awk '
|
|
37
|
+
function escape(text, result, index_, character) {
|
|
38
|
+
result = ""
|
|
39
|
+
for (index_ = 1; index_ <= length(text); index_++) {
|
|
40
|
+
character = substr(text, index_, 1)
|
|
41
|
+
result = result ((character in escapes) ? escapes[character] : character)
|
|
42
|
+
}
|
|
43
|
+
return result
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
BEGIN {
|
|
47
|
+
for (code = 1; code < 32; code++) {
|
|
48
|
+
escapes[sprintf("%c", code)] = sprintf("\\u%04x", code)
|
|
49
|
+
}
|
|
50
|
+
escapes[sprintf("%c", 127)] = "\\u007f"
|
|
51
|
+
escapes["\\"] = "\\\\"
|
|
52
|
+
escapes["\""] = "\\\""
|
|
53
|
+
escapes["<"] = "\\u003c"
|
|
54
|
+
escapes[">"] = "\\u003e"
|
|
55
|
+
escapes["&"] = "\\u0026"
|
|
56
|
+
|
|
57
|
+
count = 0
|
|
58
|
+
failed = 0
|
|
59
|
+
|
|
60
|
+
# Names only, in the order declared; a value never reaches a message.
|
|
61
|
+
entries = split(ENVIRON["APP_REQUIRED_ENV"], declared, ",")
|
|
62
|
+
missing = ""
|
|
63
|
+
for (position = 1; position <= entries; position++) {
|
|
64
|
+
entry = declared[position]
|
|
65
|
+
gsub(/^[ \t]+/, "", entry)
|
|
66
|
+
gsub(/[ \t]+$/, "", entry)
|
|
67
|
+
if (entry == "") {
|
|
68
|
+
continue
|
|
69
|
+
}
|
|
70
|
+
if (entry !~ /^[A-Za-z_][A-Za-z0-9_]*$/) {
|
|
71
|
+
print "[runtime-config] FATAL: APP_REQUIRED_ENV entry " position " is not a variable name (letters, digits and _, not starting with a digit)" > "/dev/stderr"
|
|
72
|
+
failed = 1
|
|
73
|
+
continue
|
|
74
|
+
}
|
|
75
|
+
if (entry in seen) {
|
|
76
|
+
continue
|
|
77
|
+
}
|
|
78
|
+
seen[entry] = 1
|
|
79
|
+
if (!(entry in ENVIRON) || ENVIRON[entry] == "") {
|
|
80
|
+
missing = missing (missing == "" ? "" : ", ") entry
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (missing != "") {
|
|
84
|
+
print "[runtime-config] FATAL: required variable(s) missing or empty: " missing > "/dev/stderr"
|
|
85
|
+
failed = 1
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
for (name in ENVIRON) {
|
|
89
|
+
if (name !~ /^VITE_[A-Z0-9_]+$/) {
|
|
90
|
+
continue
|
|
91
|
+
}
|
|
92
|
+
if (name ~ /SECRET|PASSWORD|TOKEN/) {
|
|
93
|
+
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"
|
|
94
|
+
failed = 1
|
|
95
|
+
continue
|
|
96
|
+
}
|
|
97
|
+
names[++count] = name
|
|
98
|
+
}
|
|
99
|
+
if (failed) {
|
|
100
|
+
exit 1
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
for (i = 2; i <= count; i++) {
|
|
104
|
+
current = names[i]
|
|
105
|
+
for (j = i - 1; j >= 1 && names[j] > current; j--) {
|
|
106
|
+
names[j + 1] = names[j]
|
|
107
|
+
}
|
|
108
|
+
names[j + 1] = current
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
for (i = 1; i <= count; i++) {
|
|
112
|
+
printf " \"%s\": \"%s\"%s\n", names[i], escape(ENVIRON[names[i]]), (i < count ? "," : "")
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
' </dev/null) || {
|
|
116
|
+
echo "[runtime-config] FATAL: config.js was not written" >&2
|
|
117
|
+
exit 1
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
{
|
|
121
|
+
printf 'window.__APP_CONFIG__ = Object.freeze({'
|
|
122
|
+
if [ -n "$BODY" ]; then
|
|
123
|
+
printf '\n%s\n' "$BODY"
|
|
124
|
+
fi
|
|
125
|
+
printf '});\n'
|
|
126
|
+
} >"$TARGET"
|
|
127
|
+
|
|
128
|
+
NAMES=$(printf '%s\n' "$BODY" | sed -n 's/^ "\([A-Z0-9_]*\)": .*/\1/p' | tr '\n' ' ')
|
|
129
|
+
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;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Paths
|
|
2
|
-
# `devz lint` passes each line on as
|
|
1
|
+
# Paths bun fmt skips: one gitignore-style pattern per line, relative to this app.
|
|
2
|
+
# `devz lint` passes each line on as --ignore-pattern; lines starting with # are comments.
|
|
3
3
|
# Example: vendored code that keeps its own format.
|
|
4
4
|
# src/vendor/**
|
|
@@ -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
|
-
|
|
42
|
+
expect(await restUrlOf()).toBe('/api');
|
|
43
|
+
});
|
|
30
44
|
|
|
31
|
-
|
|
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(
|
|
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
|
-
|
|
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 })
|
|
@@ -4,11 +4,17 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<meta name="color-scheme" content="light dark" />
|
|
7
|
-
<link
|
|
7
|
+
<link
|
|
8
|
+
rel="icon"
|
|
9
|
+
href="data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2092%20123'%3E%3Cpath%20d%3D'M46%202C46%202%204%2052%204%2080a42%2042%200%200%200%2084%200C88%2060%2070%2036%2046%202Z'%20fill%3D'%230091EA'%2F%3E%3Cpath%20d%3D'M30%2092c-6-14-2-32%2014-38-4%2012%204%2022%2014%2024%2010%202%2016-6%2016-14%206%2014%202%2030-10%2038-12%208-28%204-34-10Z'%20fill%3D'%237DF3FF'%2F%3E%3C%2Fsvg%3E"
|
|
10
|
+
/>
|
|
8
11
|
<title>{{app}}</title>
|
|
9
12
|
</head>
|
|
10
13
|
<body>
|
|
11
14
|
<div id="root"></div>
|
|
15
|
+
<!-- The runtime config: a classic script, so it runs before the module below. The image rewrites it when the
|
|
16
|
+
container starts; src/public/config.js is the empty one that dev and the build use. -->
|
|
17
|
+
<script src="/config.js"></script>
|
|
12
18
|
<script type="module" src="/main.tsx"></script>
|
|
13
19
|
</body>
|
|
14
20
|
</html>
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@reduxjs/toolkit": "^2.13.0",
|
|
15
15
|
"@tanstack/react-query": "^5.104.5",
|
|
16
|
-
"@venizia/ardor": "0.
|
|
17
|
-
"@venizia/ignis-connectors": "0.
|
|
18
|
-
"@venizia/ignis-filter": "0.
|
|
19
|
-
"@venizia/ignis-helpers": "0.
|
|
20
|
-
"@venizia/ignis-inversion": "0.
|
|
21
|
-
"@venizia/ignis-kernel": "0.
|
|
16
|
+
"@venizia/ardor": "0.4.0",
|
|
17
|
+
"@venizia/ignis-connectors": "0.4.0",
|
|
18
|
+
"@venizia/ignis-filter": "0.4.0",
|
|
19
|
+
"@venizia/ignis-helpers": "0.4.0",
|
|
20
|
+
"@venizia/ignis-inversion": "0.4.0",
|
|
21
|
+
"@venizia/ignis-kernel": "0.4.0",
|
|
22
22
|
"class-variance-authority": "^0.7.1",
|
|
23
23
|
"clsx": "^2.1.1",
|
|
24
24
|
"ra-core": "^5.15.5",
|
|
@@ -35,11 +35,10 @@
|
|
|
35
35
|
"@types/bun": "^1.4.3",
|
|
36
36
|
"@types/react": "^19",
|
|
37
37
|
"@types/react-dom": "^19",
|
|
38
|
-
"@venizia/dev-configs": "0.
|
|
39
|
-
"@venizia/ignis-boot": "0.
|
|
38
|
+
"@venizia/dev-configs": "0.4.0",
|
|
39
|
+
"@venizia/ignis-boot": "0.4.0",
|
|
40
40
|
"@vitejs/plugin-react": "^6.1.2",
|
|
41
41
|
"eslint": "^10.13.0",
|
|
42
|
-
"oxfmt": "0.74.0",
|
|
43
42
|
"oxlint": "1.89.0",
|
|
44
43
|
"oxlint-tsgolint": "7.0.2004",
|
|
45
44
|
"tailwindcss": "^4.3.3",
|
|
@@ -47,12 +46,12 @@
|
|
|
47
46
|
"vite": "^8.3.5"
|
|
48
47
|
},
|
|
49
48
|
"peers": {
|
|
50
|
-
"@venizia/dev-configs": "^0.
|
|
51
|
-
"@venizia/ignis-connectors": "^0.
|
|
52
|
-
"@venizia/ignis-filter": "^0.
|
|
53
|
-
"@venizia/ignis-helpers": "^0.
|
|
54
|
-
"@venizia/ignis-inversion": "^0.
|
|
55
|
-
"@venizia/ignis-kernel": "^0.
|
|
49
|
+
"@venizia/dev-configs": "^0.4.0",
|
|
50
|
+
"@venizia/ignis-connectors": "^0.4.0",
|
|
51
|
+
"@venizia/ignis-filter": "^0.4.0",
|
|
52
|
+
"@venizia/ignis-helpers": "^0.4.0",
|
|
53
|
+
"@venizia/ignis-inversion": "^0.4.0",
|
|
54
|
+
"@venizia/ignis-kernel": "^0.4.0"
|
|
56
55
|
},
|
|
57
56
|
"scripts": {
|
|
58
57
|
"server:dev": "vite --config .configs/builders/vite.config.mts",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Paths
|
|
2
|
-
# `devz lint` passes each line on as
|
|
1
|
+
# Paths bun fmt skips: one gitignore-style pattern per line, relative to this app.
|
|
2
|
+
# `devz lint` passes each line on as --ignore-pattern; lines starting with # are comments.
|
|
3
3
|
# Example: vendored code that keeps its own format.
|
|
4
4
|
# src/vendor/**
|
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
"devDependencies": {
|
|
6
6
|
"@types/bun": "^1.4.3",
|
|
7
7
|
"@types/react": "^19",
|
|
8
|
-
"@venizia/ardor": "^0.
|
|
9
|
-
"@venizia/dev-configs": "0.
|
|
8
|
+
"@venizia/ardor": "^0.4.0",
|
|
9
|
+
"@venizia/dev-configs": "0.4.0",
|
|
10
10
|
"eslint": "^10.13.0",
|
|
11
|
-
"oxfmt": "0.74.0",
|
|
12
11
|
"oxlint": "1.89.0",
|
|
13
12
|
"oxlint-tsgolint": "7.0.2004",
|
|
14
13
|
"react": "^19.3.1",
|
|
@@ -18,7 +17,7 @@
|
|
|
18
17
|
"typescript": "^6.0.3"
|
|
19
18
|
},
|
|
20
19
|
"peerDependencies": {
|
|
21
|
-
"@venizia/ardor": "^0.
|
|
20
|
+
"@venizia/ardor": "^0.4.0",
|
|
22
21
|
"react": "^19.3.1",
|
|
23
22
|
"react-dom": "^19.3.1",
|
|
24
23
|
"react-router-dom": "^7.18.4",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venizia/ardor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
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",
|
|
@@ -18,24 +18,29 @@
|
|
|
18
18
|
"venizia"
|
|
19
19
|
],
|
|
20
20
|
"homepage": "https://ardor.venizia.ai",
|
|
21
|
-
"repository": {
|
|
22
|
-
"type": "git",
|
|
23
|
-
"url": "git+https://github.com/VENIZIA-AI/ardor.git",
|
|
24
|
-
"directory": "packages/ardor"
|
|
25
|
-
},
|
|
26
21
|
"bugs": {
|
|
27
22
|
"url": "https://github.com/VENIZIA-AI/ardor/issues"
|
|
28
23
|
},
|
|
24
|
+
"license": "MIT",
|
|
29
25
|
"author": {
|
|
30
26
|
"name": "VENIZIA AI Developer",
|
|
31
27
|
"email": "developer@venizia.ai",
|
|
32
28
|
"url": "https://venizia.ai"
|
|
33
29
|
},
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
"
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/VENIZIA-AI/ardor.git",
|
|
33
|
+
"directory": "packages/ardor"
|
|
37
34
|
},
|
|
35
|
+
"files": [
|
|
36
|
+
"README.md",
|
|
37
|
+
"LICENSE.md",
|
|
38
|
+
"dist",
|
|
39
|
+
"!/**/__tests__",
|
|
40
|
+
"!**/*.tsbuildinfo"
|
|
41
|
+
],
|
|
38
42
|
"type": "module",
|
|
43
|
+
"sideEffects": false,
|
|
39
44
|
"main": "./dist/index.js",
|
|
40
45
|
"module": "./dist/index.js",
|
|
41
46
|
"types": "./dist/index.d.ts",
|
|
@@ -57,20 +62,6 @@
|
|
|
57
62
|
},
|
|
58
63
|
"./package.json": "./package.json"
|
|
59
64
|
},
|
|
60
|
-
"sideEffects": false,
|
|
61
|
-
"vulcan": {
|
|
62
|
-
"presets": {
|
|
63
|
-
"app": "./dist/presets/app/preset.json",
|
|
64
|
-
"lib": "./dist/presets/lib/preset.json"
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
"files": [
|
|
68
|
-
"README.md",
|
|
69
|
-
"LICENSE.md",
|
|
70
|
-
"dist",
|
|
71
|
-
"!/**/__tests__",
|
|
72
|
-
"!**/*.tsbuildinfo"
|
|
73
|
-
],
|
|
74
65
|
"publishConfig": {
|
|
75
66
|
"access": "public"
|
|
76
67
|
},
|
|
@@ -79,18 +70,28 @@
|
|
|
79
70
|
"prepublishOnly": "make rebuild"
|
|
80
71
|
},
|
|
81
72
|
"dependencies": {
|
|
82
|
-
"@venizia/ardor-admin": "0.
|
|
83
|
-
"@venizia/ardor-kernel": "0.
|
|
84
|
-
"@venizia/ardor-react": "0.
|
|
73
|
+
"@venizia/ardor-admin": "0.4.0",
|
|
74
|
+
"@venizia/ardor-kernel": "0.4.0",
|
|
75
|
+
"@venizia/ardor-react": "0.4.0"
|
|
76
|
+
},
|
|
77
|
+
"devDependencies": {
|
|
78
|
+
"@size-limit/preset-small-lib": "^14.2.0",
|
|
79
|
+
"@venizia/dev-configs": "^0.4.0",
|
|
80
|
+
"eslint": "^10.13.0",
|
|
81
|
+
"oxlint": "1.89.0",
|
|
82
|
+
"oxlint-tsgolint": "7.0.2004",
|
|
83
|
+
"size-limit": "^14.2.0",
|
|
84
|
+
"tsc-alias": "~1.8.17",
|
|
85
|
+
"typescript": "^6.0.3"
|
|
85
86
|
},
|
|
86
87
|
"peerDependencies": {
|
|
87
88
|
"@reduxjs/toolkit": ">=2.13.0",
|
|
88
89
|
"@tanstack/react-query": ">=5.104.5",
|
|
89
|
-
"@venizia/ignis-connectors": "^0.
|
|
90
|
-
"@venizia/ignis-filter": "^0.
|
|
91
|
-
"@venizia/ignis-helpers": "^0.
|
|
92
|
-
"@venizia/ignis-inversion": "^0.
|
|
93
|
-
"@venizia/ignis-kernel": "^0.
|
|
90
|
+
"@venizia/ignis-connectors": "^0.4.0",
|
|
91
|
+
"@venizia/ignis-filter": "^0.4.0",
|
|
92
|
+
"@venizia/ignis-helpers": "^0.4.0",
|
|
93
|
+
"@venizia/ignis-inversion": "^0.4.0",
|
|
94
|
+
"@venizia/ignis-kernel": "^0.4.0",
|
|
94
95
|
"ra-core": ">=5.15.5",
|
|
95
96
|
"ra-i18n-polyglot": ">=5.15.5",
|
|
96
97
|
"react": ">=19.3.1",
|
|
@@ -108,17 +109,6 @@
|
|
|
108
109
|
"optional": true
|
|
109
110
|
}
|
|
110
111
|
},
|
|
111
|
-
"devDependencies": {
|
|
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",
|
|
117
|
-
"oxlint-tsgolint": "7.0.2004",
|
|
118
|
-
"size-limit": "^14.2.0",
|
|
119
|
-
"tsc-alias": "~1.8.17",
|
|
120
|
-
"typescript": "^6.0.3"
|
|
121
|
-
},
|
|
122
112
|
"size-limit": [
|
|
123
113
|
{
|
|
124
114
|
"path": "dist/index.js",
|
|
@@ -140,5 +130,14 @@
|
|
|
140
130
|
],
|
|
141
131
|
"limit": "350 B"
|
|
142
132
|
}
|
|
143
|
-
]
|
|
133
|
+
],
|
|
134
|
+
"engines": {
|
|
135
|
+
"bun": ">=1.4"
|
|
136
|
+
},
|
|
137
|
+
"vulcan": {
|
|
138
|
+
"presets": {
|
|
139
|
+
"app": "./dist/presets/app/preset.json",
|
|
140
|
+
"lib": "./dist/presets/lib/preset.json"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
144
143
|
}
|