Files
low-code-react-app-b/src/lib
johndoe6345789 d388a9a075 Generated by Spark: 0s
3m 30s
Run docker/build-push-action@v5
GitHub Actions runtime token ACs
Docker info
Proxy configuration
Buildx version
Builder info
/usr/bin/docker buildx build --cache-from type=gha --cache-to type=gha,mode=max --iidfile /home/runner/work/_temp/docker-actions-toolkit-vCLgYd/build-iidfile-0726305e33.txt --label org.opencontainers.image.created=2026-01-17T14:42:34.857Z --label org.opencontainers.image.description= --label org.opencontainers.image.licenses=MIT --label org.opencontainers.image.revision=33ab37bd18767139f14fd99e455eb90c1baa5af3 --label org.opencontainers.image.source=https://github.com/johndoe6345789/low-code-react-app-b --label org.opencontainers.image.title=low-code-react-app-b --label org.opencontainers.image.url=https://github.com/johndoe6345789/low-code-react-app-b --label org.opencontainers.image.version=main --platform linux/amd64,linux/arm64 --attest type=provenance,mode=max,builder-id=https://github.com/johndoe6345789/low-code-react-app-b/actions/runs/21095926434 --tag ghcr.io/johndoe6345789/low-code-react-app-b:main --tag ghcr.io/johndoe6345789/low-code-react-app-b:main-33ab37b --metadata-file /home/runner/work/_temp/docker-actions-toolkit-vCLgYd/build-metadata-daa99149c8.json --push .
#0 building with "builder-95fadb03-ad83-4e01-bc20-225d7bda06ae" instance using docker-container driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 942B done
#1 DONE 0.0s

#2 [auth] library/nginx:pull token for registry-1.docker.io
#2 DONE 0.0s

#3 [auth] library/node:pull token for registry-1.docker.io
#3 DONE 0.0s

#4 [linux/arm64 internal] load metadata for docker.io/library/node:20-alpine
#4 ...

#5 [linux/arm64 internal] load metadata for docker.io/library/nginx:alpine
#5 DONE 0.4s

#4 [linux/arm64 internal] load metadata for docker.io/library/node:20-alpine
#4 DONE 0.4s

#6 [internal] load .dockerignore
#6 transferring context: 344B done
#6 DONE 0.0s

#7 [linux/amd64 internal] load metadata for docker.io/library/node:20-alpine
#7 DONE 0.4s

#8 [linux/amd64 internal] load metadata for docker.io/library/nginx:alpine
#8 DONE 0.4s

#9 [internal] load build context
#9 DONE 0.0s

#10 [linux/amd64 builder 1/8] FROM docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c
#10 resolve docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c done
#10 DONE 0.0s

#11 [linux/amd64 runtime 1/3] FROM docker.io/library/nginx:alpine@sha256:b0f7830b6bfaa1258f45d94c240ab668ced1b3651c8a222aefe6683447c7bf55
#11 resolve docker.io/library/nginx:alpine@sha256:b0f7830b6bfaa1258f45d94c240ab668ced1b3651c8a222aefe6683447c7bf55 done
#11 DONE 0.0s

#12 importing cache manifest from gha:8468054678720030062
#12 DONE 0.1s

#13 [linux/arm64 builder 1/8] FROM docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c
#13 resolve docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c done
#13 sha256:2e74b1344e24146a5181cea893d6035d8d412a89b8374e4d4360f6c35d985760 444B / 444B 0.0s done
#13 sha256:38d6ffd8958149c983c185c5a62d19cba7ee8807466e60c7993d78a2867eef11 1.26MB / 1.26MB 0.1s done
#13 sha256:f6b4fb9446345fcad2db26eac181fef6c0a919c8a4fcccd3bea5deb7f6dff67e 4.20MB / 4.20MB 0.1s done
#13 extracting sha256:f6b4fb9446345fcad2db26eac181fef6c0a919c8a4fcccd3bea5deb7f6dff67e
#13 ...

#9 [internal] load build context
#9 transferring context: 10.19MB 0.2s done
#9 DONE 0.2s

#14 [linux/amd64 builder 3/8] COPY package*.json ./
#14 CACHED

#15 [linux/amd64 builder 4/8] COPY packages/spark-tools ./packages/spark-tools
#15 CACHED

#16 [linux/amd64 builder 5/8] COPY packages/spark ./packages/spark
#16 CACHED

#17 [linux/amd64 builder 2/8] WORKDIR /app
#17 CACHED

#13 [linux/arm64 builder 1/8] FROM docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c
#13 sha256:efc83bacf48e781625d7de46541986e8525b67c1b1644803b5ff90d4ad73425c 17.83MB / 43.12MB 0.2s
#13 extracting sha256:f6b4fb9446345fcad2db26eac181fef6c0a919c8a4fcccd3bea5deb7f6dff67e 0.2s done
#13 sha256:efc83bacf48e781625d7de46541986e8525b67c1b1644803b5ff90d4ad73425c 43.12MB / 43.12MB 0.3s done
#13 extracting sha256:efc83bacf48e781625d7de46541986e8525b67c1b1644803b5ff90d4ad73425c
#13 ...

#18 [linux/arm64 runtime 1/3] FROM docker.io/library/nginx:alpine@sha256:b0f7830b6bfaa1258f45d94c240ab668ced1b3651c8a222aefe6683447c7bf55
#18 resolve docker.io/library/nginx:alpine@sha256:b0f7830b6bfaa1258f45d94c240ab668ced1b3651c8a222aefe6683447c7bf55 0.0s done
#18 sha256:f4f04eae8d5eb8a0220a0d542da10f9c55b57a585dea1875cfbb1ee99d4c5a4a 1.40kB / 1.40kB 0.0s done
#18 sha256:ceb87b8ac279a84fc99bdc30e7406cf21bf5d5841819fd0e3c8e0c06d867533c 1.21kB / 1.21kB 0.0s done
#18 sha256:6628835d87d286d4d03f10b2c7f51d00f4556c49b5874947ce02609379069575 403B / 403B 0.0s done
#18 sha256:8a735f2296d46b598dbc65289bfdc2ec4dd07607e69a1887e4ce6ef898be56e1 19.66MB / 19.66MB 0.2s done
#18 sha256:c0de4eea5b769c1703c4428a21cf0cce5b0a1668738391f1443979bb32cc9bc1 954B / 954B 0.0s done
#18 sha256:9076aaa4fd77085ce5562e9aca2b51ca88baf3fb8e41f8c777d0df14a1ce1085 628B / 628B 0.0s done
#18 sha256:a0ef6d8231d0e512c7a0c0f7029bcfb8c77f0848b9cb8ec5373b28991c83415b 1.87MB / 1.87MB 0.1s done
#18 extracting sha256:a0ef6d8231d0e512c7a0c0f7029bcfb8c77f0848b9cb8ec5373b28991c83415b 0.1s done
#18 extracting sha256:9076aaa4fd77085ce5562e9aca2b51ca88baf3fb8e41f8c777d0df14a1ce1085 done
#18 extracting sha256:c0de4eea5b769c1703c4428a21cf0cce5b0a1668738391f1443979bb32cc9bc1 done
#18 extracting sha256:6628835d87d286d4d03f10b2c7f51d00f4556c49b5874947ce02609379069575 done
#18 extracting sha256:ceb87b8ac279a84fc99bdc30e7406cf21bf5d5841819fd0e3c8e0c06d867533c done
#18 extracting sha256:f4f04eae8d5eb8a0220a0d542da10f9c55b57a585dea1875cfbb1ee99d4c5a4a done
#18 extracting sha256:8a735f2296d46b598dbc65289bfdc2ec4dd07607e69a1887e4ce6ef898be56e1 0.5s done
#18 DONE 1.1s

#19 [linux/amd64 builder 6/8] RUN npm install --legacy-peer-deps
#19 sha256:acec9428f22bd20125c716a65e27ad75480a1360a59ad4f816044044dad7cc70 4.34kB / 4.34kB 0.0s done
#19 sha256:41b3afaea3b1b1ab04a268431e10dcace7883019a5da7d326aa35dc9713fcbb5 445B / 445B 0.0s done
#19 sha256:1d55258e311479e00466346e8c753c9b7e01237604cee9e4b28b24139f418bb9 92B / 92B 0.0s done
#19 sha256:3dcec91425079e7b455efc5f2a18d026450c47c9382c41897620afc6b1424e44 1.26MB / 1.26MB 0.1s done
#19 sha256:c2b4197efb6ccd7f8b482ae7800f1c9c78c044ea192587887300080bcff6b2c9 42.78MB / 42.78MB 0.4s done
#19 sha256:1074353eec0db2c1d81d5af2671e56e00cf5738486f5762609ea33d606f88612 3.86MB / 3.86MB 0.2s done
#19 extracting sha256:1074353eec0db2c1d81d5af2671e56e00cf5738486f5762609ea33d606f88612 0.1s done
#19 sha256:f4b3dc64ea273c67c4ed06bca84314742da987ddac1c2a30392f4ac39f9e1ff2 1.55MB / 1.55MB 0.2s done
#19 sha256:70e3e49db568901de1214b56a8a69068f5f1d1a21781d8afc9840854c1233580 48.98kB / 48.98kB 0.0s done
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 29.36MB / 264.20MB 0.8s
#19 extracting sha256:c2b4197efb6ccd7f8b482ae7800f1c9c78c044ea192587887300080bcff6b2c9
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 42.99MB / 264.20MB 1.1s
#19 ...

#13 [linux/arm64 builder 1/8] FROM docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c
#13 extracting sha256:efc83bacf48e781625d7de46541986e8525b67c1b1644803b5ff90d4ad73425c 1.2s done
#13 DONE 1.6s

#13 [linux/arm64 builder 1/8] FROM docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c
#13 extracting sha256:38d6ffd8958149c983c185c5a62d19cba7ee8807466e60c7993d78a2867eef11 0.0s done
#13 extracting sha256:2e74b1344e24146a5181cea893d6035d8d412a89b8374e4d4360f6c35d985760 done
#13 DONE 1.6s

#19 [linux/amd64 builder 6/8] RUN npm install --legacy-peer-deps
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 59.77MB / 264.20MB 1.5s
#19 extracting sha256:c2b4197efb6ccd7f8b482ae7800f1c9c78c044ea192587887300080bcff6b2c9 1.5s done
#19 extracting sha256:3dcec91425079e7b455efc5f2a18d026450c47c9382c41897620afc6b1424e44 0.1s done
#19 ...

#20 [linux/arm64 builder 2/8] WORKDIR /app
#20 DONE 0.7s

#19 [linux/amd64 builder 6/8] RUN npm install --legacy-peer-deps
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 77.59MB / 264.20MB 2.0s
#19 extracting sha256:41b3afaea3b1b1ab04a268431e10dcace7883019a5da7d326aa35dc9713fcbb5 done
#19 extracting sha256:1d55258e311479e00466346e8c753c9b7e01237604cee9e4b28b24139f418bb9 done
#19 extracting sha256:70e3e49db568901de1214b56a8a69068f5f1d1a21781d8afc9840854c1233580 0.0s done
#19 extracting sha256:f4b3dc64ea273c67c4ed06bca84314742da987ddac1c2a30392f4ac39f9e1ff2 0.1s done
#19 ...

#21 [linux/arm64 builder 3/8] COPY package*.json ./
#21 DONE 0.1s

#22 [linux/arm64 builder 4/8] COPY packages/spark-tools ./packages/spark-tools
#22 DONE 0.1s

#23 [linux/arm64 builder 5/8] COPY packages/spark ./packages/spark
#23 DONE 0.0s

#19 [linux/amd64 builder 6/8] RUN npm install --legacy-peer-deps
#19 extracting sha256:acec9428f22bd20125c716a65e27ad75480a1360a59ad4f816044044dad7cc70 done
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 96.47MB / 264.20MB 2.4s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 115.34MB / 264.20MB 2.9s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 128.97MB / 264.20MB 3.2s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 143.65MB / 264.20MB 3.5s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 162.53MB / 264.20MB 3.9s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 179.31MB / 264.20MB 4.4s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 195.04MB / 264.20MB 4.7s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 212.86MB / 264.20MB 5.1s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 226.49MB / 264.20MB 5.4s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 244.32MB / 264.20MB 5.9s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 259.00MB / 264.20MB 6.2s
#19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 264.20MB / 264.20MB 6.5s done
#19 extracting sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d
#19 ...

#24 [linux/arm64 builder 6/8] RUN npm install --legacy-peer-deps
#24 ...

#19 [linux/amd64 builder 6/8] RUN npm install --legacy-peer-deps
#19 extracting sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 12.5s done
#19 DONE 19.2s

#25 [linux/amd64 builder 7/8] COPY . .
#25 DONE 2.2s

#24 [linux/arm64 builder 6/8] RUN npm install --legacy-peer-deps
#24 ...

#26 [linux/amd64 builder 8/8] RUN npm run build
#26 0.230
#26 0.230 > spark-template@0.0.0 prebuild
#26 0.230 > mkdir -p /tmp/dist || true
#26 0.230
#26 0.238
#26 0.238 > spark-template@0.0.0 build
#26 0.238 > tsc -b --noCheck && vite build
#26 0.238
#26 6.457 vite v7.3.1 building client environment for production...
#26 6.575 transforming...
#26 10.05 Found 3 warnings while optimizing generated CSS:
#26 10.05
#26 10.05 Issue #1:
#26 10.05 │   .container {
#26 10.05 │     width: 100%;
#26 10.05 │     @media (width >= (display-mode: standalone)) {
#26 10.05 ┆                     ^-- Unexpected token ParenthesisBlock
#26 10.05 ┆
#26 10.05 │       max-width: (display-mode: standalone);
#26 10.05 │     }
#26 10.05
#26 10.05 Issue #2:
#26 10.05 │       max-width: (display-mode: standalone);
#26 10.05 │     }
#26 10.05 │     @media (width >= (pointer: coarse)) {
#26 10.05 ┆                     ^-- Unexpected token ParenthesisBlock
#26 10.05 ┆
#26 10.05 │       max-width: (pointer: coarse);
#26 10.05 │     }
#26 10.05
#26 10.05 Issue #3:
#26 10.05 │       max-width: (pointer: coarse);
#26 10.05 │     }
#26 10.05 │     @media (width >= (pointer: fine)) {
#26 10.05 ┆                     ^-- Unexpected token ParenthesisBlock
#26 10.05 ┆
#26 10.05 │       max-width: (pointer: fine);
#26 10.05 │     }
#26 10.05
#26 27.53 ✓ 8276 modules transformed.
#26 30.49 rendering chunks...
#26 ...

#24 [linux/arm64 builder 6/8] RUN npm install --legacy-peer-deps
#24 55.47 npm warn deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation
#24 ...

#26 [linux/amd64 builder 8/8] RUN npm run build
#26 56.97 computing gzip size...
#26 57.13 dist/index.html                                       2.18 kB │ gzip:     0.87 kB
#26 57.13 dist/assets/FeatureIdeaCloud-B5DZHykP.css             7.32 kB │ gzip:     1.60 kB
#26 57.13 dist/assets/index-DeAuhr8c.css                      451.83 kB │ gzip:    78.84 kB
#26 57.13 dist/assets/separator-DxaExrET.js                     1.12 kB │ gzip:     0.59 kB
#26 57.13 dist/assets/PWAStatusBar-BxRnFKIe.js                  1.14 kB │ gzip:     0.64 kB
#26 57.13 dist/assets/tabs-uv1gileV.js                          1.34 kB │ gzip:     0.59 kB
#26 57.13 dist/assets/PreviewDialog-CRbuRmHJ.js                 1.36 kB │ gzip:     0.74 kB
#26 57.13 dist/assets/PWAUpdatePrompt-A5H3Brsn.js               1.67 kB │ gzip:     0.82 kB
#26 57.13 dist/assets/PWAInstallPrompt-BXeSE-7b.js              2.31 kB │ gzip:     1.02 kB
#26 57.13 dist/assets/protected-llm-service-Q4cNm1rY.js         2.41 kB │ gzip:     1.00 kB
#26 57.13 dist/assets/use-pwa-CN3ny1f7.js                       2.42 kB │ gzip:     0.95 kB
#26 57.13 dist/assets/KeyboardShortcutsDialog-BpO-G7Ko.js       2.54 kB │ gzip:     0.89 kB
#26 57.13 dist/assets/switch-Le0tcnoA.js                        2.57 kB │ gzip:     1.26 kB
#26 57.13 dist/assets/skeleton-DvZARUoK.js                      2.85 kB │ gzip:     1.34 kB
#26 57.13 dist/assets/FeatureToggleSettings-DyoCP9xu.js         3.36 kB │ gzip:     1.40 kB
#26 57.13 dist/assets/select-CUM2wG-b.js                        3.62 kB │ gzip:     1.29 kB
#26 57.13 dist/assets/page-renderer-CnwNh3EQ.js                 3.92 kB │ gzip:     1.59 kB
#26 57.13 dist/assets/JSONWorkflowDesigner-BMu_I1iN.js          4.04 kB │ gzip:     1.40 kB
#26 57.13 dist/assets/JSONModelDesigner-CtCr0IyF.js             4.06 kB │ gzip:     1.40 kB
#26 57.13 dist/assets/JSONComponentTreeManager-DChvp8bH.js      4.19 kB │ gzip:     1.43 kB
#26 57.13 dist/assets/ComponentTreeBuilder-AKJ_ySXd.js          4.81 kB │ gzip:     1.95 kB
#26 57.13 dist/assets/CodeEditor-BLwoA4UR.js                    4.89 kB │ gzip:     1.86 kB
#26 57.13 dist/assets/FileExplorer-JbASuVTC.js                  4.98 kB │ gzip:     1.78 kB
#26 57.13 dist/assets/ai-service-BB_pmEqI.js                    6.07 kB │ gzip:     1.92 kB
#26 57.13 dist/assets/ModelDesigner-CgtLxbx8.js                 6.09 kB │ gzip:     2.06 kB
#26 57.13 dist/assets/StorybookDesigner-Bpm7g44n.js             6.90 kB │ gzip:     2.34 kB
#26 57.13 dist/assets/PlaywrightDesigner-BfiCriP0.js            7.51 kB │ gzip:     2.51 kB
#26 57.13 dist/assets/PWASettings-3_HqVF29.js                   7.92 kB │ gzip:     1.90 kB
#26 57.13 dist/assets/ComponentTreeManager-NGgMB7h-.js          8.27 kB │ gzip:     2.92 kB
#26 57.13 dist/assets/slider-CYgezrCe.js                        8.65 kB │ gzip:     3.36 kB
#26 57.13 dist/assets/UnitTestDesigner-hJNaBS7K.js              8.73 kB │ gzip:     2.76 kB
#26 57.13 dist/assets/SassStylesShowcase-Be2HgC09.js            8.99 kB │ gzip:     1.67 kB
#26 57.13 dist/assets/ErrorPanel-MW-ZUvQo.js                   11.31 kB │ gzip:     3.65 kB
#26 57.13 dist/assets/react-vendor-RsqJS7wA.js                 11.33 kB │ gzip:     3.99 kB
#26 57.13 dist/assets/FlaskDesigner-COgNGjFx.js                12.03 kB │ gzip:     3.25 kB
#26 57.13 dist/assets/StyleDesigner-B2AQyBAi.js                13.23 kB │ gzip:     3.29 kB
#26 57.13 dist/assets/code-editor-BR3HUJ_E.js                  14.03 kB │ gzip:     4.80 kB
#26 57.13 dist/assets/ProjectSettingsDesigner-DiAcWh5o.js      14.16 kB │ gzip:     3.31 kB
#26 57.13 dist/assets/JSONUIShowcasePage-BYgVWKow.js           14.25 kB │ gzip:     3.93 kB
#26 57.13 dist/assets/LambdaDesigner-CWnKya9X.js               14.42 kB │ gzip:     3.83 kB
#26 57.13 dist/assets/ProjectDashboard-CLf3fcP0.js             15.83 kB │ gzip:     4.53 kB
#26 57.13 dist/assets/ui-extended-CH1jmFOr.js                  16.72 kB │ gzip:     5.34 kB
#26 57.13 dist/assets/component-registry-D8jh1CB-.js           18.21 kB │ gzip:     6.39 kB
#26 57.13 dist/assets/WorkflowDesigner-uASoW4e9.js             18.34 kB │ gzip:     5.03 kB
#26 57.13 dist/assets/DataBindingDesigner-BkzQtXOX.js          20.36 kB │ gzip:     5.24 kB
#26 57.13 dist/assets/SchemaEditorPage-DzxsWN4D.js             21.04 kB │ gzip:     5.95 kB
#26 57.13 dist/assets/FaviconDesigner-DPzmL1L4.js              23.48 kB │ gzip:     6.27 kB
#26 57.13 dist/assets/GlobalSearch-BjLJMhgk.js                 25.04 kB │ gzip:     8.09 kB
#26 57.13 dist/assets/FeatureIdeaCloud-DZ2YR6RT.js             30.07 kB │ gzip:     8.44 kB
#26 57.13 dist/assets/utils-Bt9FPkgP.js                        36.00 kB │ gzip:    11.18 kB
#26 57.13 dist/assets/TemplateSelector-BVFRYL8A.js             42.82 kB │ gzip:     9.32 kB
#26 57.13 dist/assets/form-components-Bgqg-kRU.js              66.01 kB │ gzip:    17.55 kB
#26 57.13 dist/assets/DocumentationView-BjvllHGd.js            70.03 kB │ gzip:    12.62 kB
#26 57.13 dist/assets/workflow-CpSwYplm.js                    101.55 kB │ gzip:    32.48 kB
#26 57.13 dist/assets/ui-core-CS7FcLG5.js                     105.95 kB │ gzip:    32.29 kB
#26 57.13 dist/assets/index-J_d48Gj5.js                       488.88 kB │ gzip:   152.32 kB
#26 57.13 dist/assets/three.module-D5EGS0V7.js                683.00 kB │ gzip:   169.49 kB
#26 57.13 dist/assets/data-viz-DVeW5iYn.js                    717.82 kB │ gzip:   199.17 kB
#26 57.13 dist/assets/icons-CUJifBl7.js                     5,039.69 kB │ gzip: 1,049.93 kB
#26 57.13
#26 57.13 (!) Some chunks are larger than 1000 kB after minification. Consider:
#26 57.13 - Using dynamic import() to code-split the application
#26 57.13 - Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
#26 57.13 - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
#26 57.13 ✓ built in 50.63s
#26 DONE 57.6s

#24 [linux/arm64 builder 6/8] RUN npm install --legacy-peer-deps
#24 ...

#27 [linux/amd64 runtime 2/3] COPY --from=builder /app/dist /usr/share/nginx/html
#27 CACHED

#28 [linux/amd64 runtime 3/3] COPY nginx.conf /etc/nginx/conf.d/default.conf
#28 CACHED

#24 [linux/arm64 builder 6/8] RUN npm install --legacy-peer-deps
#24 153.2
#24 153.2 added 712 packages, and audited 715 packages in 3m
#24 153.2
#24 153.2 119 packages are looking for funding
#24 153.2   run `npm fund` for details
#24 153.3
#24 153.3 found 0 vulnerabilities
#24 153.3 npm notice
#24 153.3 npm notice New major version of npm available! 10.8.2 -> 11.7.0
#24 153.3 npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.7.0
#24 153.3 npm notice To update run: npm install -g npm@11.7.0
#24 153.3 npm notice
#24 DONE 153.8s

#29 [linux/arm64 builder 7/8] COPY . .
#29 DONE 0.5s

#30 [linux/arm64 builder 8/8] RUN npm run build
#30 2.651
#30 2.651 > spark-template@0.0.0 prebuild
#30 2.651 > mkdir -p /tmp/dist || true
#30 2.651
#30 2.723
#30 2.723 > spark-template@0.0.0 build
#30 2.723 > tsc -b --noCheck && vite build
#30 2.723
#30 50.69 /app/node_modules/rollup/dist/native.js:83
#30 50.69 		throw new Error(
#30 50.69 		      ^
#30 50.69
#30 50.69 Error: Cannot find module @rollup/rollup-linux-arm64-musl. npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). Please try `npm i` again after removing both package-lock.json and node_modules directory.
#30 50.69     at requireWithFriendlyError (/app/node_modules/rollup/dist/native.js:83:9)
#30 50.69     at Object.<anonymous> (/app/node_modules/rollup/dist/native.js:92:76)
#30 50.69     ... 3 lines matching cause stack trace ...
#30 50.69     at Module._load (node:internal/modules/cjs/loader:1091:12)
#30 50.69     at cjsLoader (node:internal/modules/esm/translators:298:15)
#30 50.69     at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:240:7)
#30 50.69     at ModuleJob.run (node:internal/modules/esm/module_job:325:25)
#30 50.69     at async ModuleLoader.import (node:internal/modules/esm/loader:606:24) {
#30 50.69   [cause]: Error: Cannot find module '@rollup/rollup-linux-arm64-musl'
#30 50.69   Require stack:
#30 50.69   - /app/node_modules/rollup/dist/native.js
#30 50.69       at Module._resolveFilename (node:internal/modules/cjs/loader:1207:15)
#30 50.69       at Module._load (node:internal/modules/cjs/loader:1038:27)
#30 50.69       at Module.require (node:internal/modules/cjs/loader:1289:19)
#30 50.69       at require (node:internal/modules/helpers:182:18)
#30 50.69       at requireWithFriendlyError (/app/node_modules/rollup/dist/native.js:65:10)
#30 50.69       at Object.<anonymous> (/app/node_modules/rollup/dist/native.js:92:76)
#30 50.69       at Module._compile (node:internal/modules/cjs/loader:1521:14)
#30 50.69       at Module._extensions..js (node:internal/modules/cjs/loader:1623:10)
#30 50.69       at Module.load (node:internal/modules/cjs/loader:1266:32)
#30 50.69       at Module._load (node:internal/modules/cjs/loader:1091:12) {
#30 50.69     code: 'MODULE_NOT_FOUND',
#30 50.69     requireStack: [ '/app/node_modules/rollup/dist/native.js' ]
#30 50.69   }
#30 50.69 }
#30 50.70
#30 50.70 Node.js v20.20.0
#30 ERROR: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1
------
 > [linux/arm64 builder 8/8] RUN npm run build:
50.69       at Module._compile (node:internal/modules/cjs/loader:1521:14)
50.69       at Module._extensions..js (node:internal/modules/cjs/loader:1623:10)
50.69       at Module.load (node:internal/modules/cjs/loader:1266:32)
50.69       at Module._load (node:internal/modules/cjs/loader:1091:12) {
50.69     code: 'MODULE_NOT_FOUND',
50.69     requireStack: [ '/app/node_modules/rollup/dist/native.js' ]
50.69   }
50.69 }
50.70
50.70 Node.js v20.20.0
------
Dockerfile:22
--------------------
  20 |
  21 |     # Build the application
  22 | >>> RUN npm run build
  23 |
  24 |     FROM nginx:alpine AS runtime
--------------------
ERROR: failed to build: failed to solve: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1
Error: buildx failed with: ERROR: failed to build: failed to solve: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1
2026-01-17 14:56:40 +00:00
..
2026-01-17 14:56:40 +00:00
2026-01-16 00:32:24 +00:00

Library Utilities

Core utility functions and modules for the CodeForge application.

Module Overview

bundle-metrics.ts

Bundle size and performance monitoring utilities.

Key Functions:

  • trackBundleLoad(chunkName, size) - Track loaded chunks
  • getBundleMetrics() - Get current bundle statistics
  • analyzePerformance() - Analyze page load performance
  • startPerformanceMonitoring() - Start monitoring resource loads
  • formatSize(bytes) - Format byte sizes human-readable

Usage:

import { startPerformanceMonitoring, analyzePerformance } from '@/lib/bundle-metrics'

// Start monitoring on app init
startPerformanceMonitoring()

// Analyze after page load
window.addEventListener('load', () => {
  setTimeout(analyzePerformance, 1000)
})

component-registry.ts

Centralized lazy-loaded component registry with preloading support.

Registries:

  • ComponentRegistry - Main page components
  • DialogRegistry - Dialog/modal components
  • PWARegistry - PWA-related components

Key Functions:

  • preloadCriticalComponents() - Preload dashboard & file explorer
  • preloadComponentByName(name) - Preload specific component

Usage:

import { ComponentRegistry, preloadCriticalComponents } from '@/lib/component-registry'

// Get a component
const Dashboard = ComponentRegistry.ProjectDashboard

// Preload on init
preloadCriticalComponents()

// Render lazily
<Suspense fallback={<Loading />}>
  <Dashboard {...props} />
</Suspense>

lazy-loader.ts

Advanced lazy loading utilities with retry logic and preload support.

Key Functions:

lazyWithRetry<T>(componentImport, options)

Lazy load with automatic retry on failure.

Options:

  • timeout - Load timeout in ms (default: 10000)
  • retries - Number of retry attempts (default: 3)

Usage:

import { lazyWithRetry } from '@/lib/lazy-loader'

const HeavyComponent = lazyWithRetry(
  () => import('./HeavyComponent'),
  { retries: 3, timeout: 15000 }
)

lazyWithPreload<T>(componentImport, preloadKey)

Lazy load with manual preload capability.

Usage:

import { lazyWithPreload } from '@/lib/lazy-loader'

const Dashboard = lazyWithPreload(
  () => import('./Dashboard'),
  'Dashboard'
)

// Later, trigger preload
Dashboard.preload()

preloadComponent(componentImport)

Preload a component without rendering it.

Usage:

import { preloadComponent } from '@/lib/lazy-loader'

// Preload on hover
<button onMouseEnter={() => preloadComponent(() => import('./Modal'))}>
  Open Modal
</button>

createComponentLoader()

Create a component loader with caching and tracking.

Usage:

import { createComponentLoader } from '@/lib/lazy-loader'

const loader = createComponentLoader()

// Load component
const component = await loader.load('MyComponent', () => import('./MyComponent'))

// Check status
if (loader.isLoaded('MyComponent')) {
  // Component ready
}

// Reset cache
loader.reset()

library-loader.ts

Lazy loading utilities for heavy chart and visualization libraries.

Supported Libraries:

  • Recharts (~450KB)
  • D3 (~500KB)
  • Three.js (~600KB)
  • ReactFlow (~300KB)

Key Functions:

loadRecharts(), loadD3(), loadThree(), loadReactFlow()

Load libraries with retry logic and caching.

Usage:

import { loadRecharts, loadD3 } from '@/lib/library-loader'

async function loadChart() {
  const recharts = await loadRecharts()
  // Use recharts
}

preloadLibrary(libraryName)

Preload library before it's needed.

Usage:

import { preloadLibrary } from '@/lib/library-loader'

// Preload on hover
<button onMouseEnter={() => preloadLibrary('recharts')}>
  View Charts
</button>

clearLibraryCache()

Clear all cached library imports.

React Hooks: Use with hooks for automatic loading state management:

import { useRecharts, useD3 } from '@/hooks'

function Chart() {
  const { library: recharts, loading, error } = useRecharts()
  
  if (loading) return <Skeleton />
  if (error) return <Alert>Failed to load</Alert>
  if (!recharts) return null
  
  const { LineChart } = recharts
  return <LineChart />
}

See /docs/LAZY_LOADING_CHARTS.md for complete documentation.

utils.ts

General utility functions (shadcn standard).

Key Functions:

  • cn(...inputs) - Merge Tailwind class names with clsx + tailwind-merge

Usage:

import { cn } from '@/lib/utils'

<div className={cn(
  'base-class',
  isActive && 'active-class',
  className
)} />

Performance Best Practices

1. Choose the Right Lazy Loading Strategy

Use lazy() for:

  • Standard components
  • Low-priority features
  • Small components

Use lazyWithRetry() for:

  • Heavy components (Monaco Editor, D3 visualizations)
  • Network-dependent components
  • Critical but slow-loading features

Use lazyWithPreload() for:

  • Frequently accessed components
  • Components that benefit from hover preload
  • Critical path components that need fast render

2. Preloading Strategy

Immediate Preload:

// On app initialization
preloadCriticalComponents()

Predictive Preload:

// Preload next likely components
useEffect(() => {
  const nextPages = getAdjacentPages(currentPage)
  nextPages.forEach(page => preloadComponentByName(page.component))
}, [currentPage])

Interaction Preload:

// Preload on hover/focus
<button
  onMouseEnter={() => MyDialog.preload()}
  onFocus={() => MyDialog.preload()}
>
  Open Dialog
</button>

3. Bundle Monitoring

Always monitor bundle performance in development:

import { startPerformanceMonitoring } from '@/lib/bundle-metrics'

// In main.tsx or App.tsx
startPerformanceMonitoring()

Watch console for:

  • [BUNDLE] 📦 Chunk loaded - Individual chunk loads
  • [BUNDLE] 📊 Performance Analysis - Overall metrics
  • [LOADER] 🔄 Loading component - Component load attempts
  • [REGISTRY] 🚀 Preloading - Preload operations

Common Patterns

Pattern 1: Dialog with Preload on Hover

import { lazyWithPreload } from '@/lib/lazy-loader'

const SettingsDialog = lazyWithPreload(
  () => import('./SettingsDialog'),
  'SettingsDialog'
)

function App() {
  return (
    <button
      onMouseEnter={() => SettingsDialog.preload()}
      onClick={() => setOpen(true)}
    >
      Settings
    </button>
  )
}

Pattern 2: Heavy Component with Retry

import { lazyWithRetry } from '@/lib/lazy-loader'

const CodeEditor = lazyWithRetry(
  () => import('@monaco-editor/react'),
  { retries: 3, timeout: 20000 }
)

function EditorPage() {
  return (
    <Suspense fallback={<EditorSkeleton />}>
      <CodeEditor {...props} />
    </Suspense>
  )
}

Pattern 3: Component Loader for Dynamic Imports

import { createComponentLoader } from '@/lib/lazy-loader'

const loader = createComponentLoader()

async function loadPlugin(pluginName: string) {
  try {
    const plugin = await loader.load(
      pluginName,
      () => import(`./plugins/${pluginName}`)
    )
    return plugin
  } catch (error) {
    console.error(`Failed to load plugin: ${pluginName}`)
    return null
  }
}

Troubleshooting

Issue: Components not loading

Check:

  1. Console for [LOADER] ❌ Load failed messages
  2. Network tab for failed chunk requests
  3. Chunk files exist in dist/assets/ after build

Solution:

  • Increase retry count or timeout
  • Check network conditions
  • Verify import paths are correct

Issue: Slow initial load

Check:

  1. Bundle size with npm run build
  2. Number of synchronous imports
  3. Critical path components

Solution:

  • Move more components to lazy loading
  • Reduce vendor bundle size
  • Use code splitting more aggressively

Issue: Preload not working

Check:

  1. Console for [REGISTRY] 🎯 Preloading messages
  2. Component has preload() method (use lazyWithPreload)
  3. Preload called before render

Solution:

  • Use lazyWithPreload instead of lazy
  • Call .preload() method explicitly
  • Check browser network tab for prefetch

Testing

Manual Testing

  1. Open DevTools → Network tab
  2. Filter by JS files
  3. Interact with app and verify chunks load on-demand
  4. Check console for bundle metrics

Performance Testing

// In test environment
import { analyzePerformance } from '@/lib/bundle-metrics'

window.addEventListener('load', () => {
  const metrics = analyzePerformance()
  expect(metrics.loadComplete).toBeLessThan(3000)
  expect(metrics.resources.total.size).toBeLessThan(500000)
})

Migration Guide

From Eager Loading to Lazy Loading

Before:

import HeavyComponent from './HeavyComponent'

function App() {
  return <HeavyComponent />
}

After:

import { lazy, Suspense } from 'react'

const HeavyComponent = lazy(() => import('./HeavyComponent'))

function App() {
  return (
    <Suspense fallback={<Loading />}>
      <HeavyComponent />
    </Suspense>
  )
}

From Basic Lazy to Lazy with Retry

Before:

const Editor = lazy(() => import('./Editor'))

After:

import { lazyWithRetry } from '@/lib/lazy-loader'

const Editor = lazyWithRetry(
  () => import('./Editor'),
  { retries: 3 }
)