diff --git a/.github/workflows/upload.yaml b/.github/workflows/upload.yaml index 3e4a6af..4f5ef47 100644 --- a/.github/workflows/upload.yaml +++ b/.github/workflows/upload.yaml @@ -9,9 +9,13 @@ on: permissions: contents: read +concurrency: + group: cos-upload-${{ github.repository }}-${{ github.event_name == 'pull_request' && github.run_id || 'production' }} + cancel-in-progress: false + jobs: test: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: @@ -33,36 +37,34 @@ jobs: corepack prepare yarn@4.18.0 --activate yarn --version - # Current Respo modules still request preceding compatible releases, so - # strict Caps resolution rejects the highest SemVer set selected here. - name: Install and validate dependencies run: | - caps --ci + set -euo pipefail + caps --ci --strict yarn install --immutable - caps verify --toolchain - name: Validate Calcit snapshot run: | - calcit calcit.cirru fix --workflow strict --verify --format edn + set -euo pipefail + test -f calcit.cirru + test -f deps.cirru + test ! -e compact.cirru + test ! -e package.cirru calcit calcit.cirru edit format git diff --exit-code -- calcit.cirru calcit calcit.cirru --check-only - calcit calcit.cirru analyze check-types --summary-only --format json - calcit calcit.cirru analyze weak-types --only schema-dynamic,code-dynamic --intent unresolved --summary-only --format json - calcit calcit.cirru analyze deprecated --summary-only --format json - calcit calcit.cirru analyze dynamic-methods --summary-only --format json | jq -e '.data.summary.findings == 0' - name: Build client with CDN asset URLs id: asset-path env: CDN_ORIGIN: https://cos-sh.tiye.me + PR_NUMBER: ${{ github.event.pull_request.number }} run: | + set -euo pipefail if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then - asset_prefix="${GITHUB_REPOSITORY}/pr/" - elif [[ "$GITHUB_REF" == "refs/heads/main" ]]; then - asset_prefix="${GITHUB_REPOSITORY}/" + asset_prefix="${GITHUB_REPOSITORY}/pr/${PR_NUMBER}/${GITHUB_RUN_ID}/" else - asset_prefix="${GITHUB_REPOSITORY}/branches/${GITHUB_REF_NAME}/" + asset_prefix="${GITHUB_REPOSITORY}/" fi export VITE_BASE_URL="${CDN_ORIGIN}/${asset_prefix}" echo "VITE_BASE_URL=${VITE_BASE_URL}" >> "$GITHUB_ENV" diff --git a/.gitignore b/.gitignore index c999d13..41834b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ .compact-inc.cirru .calcit-error.cirru +compact.cirru +package.cirru js-out/ node_modules/ diff --git a/README.md b/README.md index 0f4fa7f..3ed8ba1 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,16 @@ Diffview http://r.tiye.me/Memkits/diffview/ +Use Calcit 0.27.0 and the canonical `calcit.cirru` / `deps.cirru` files. +Retired `compact.cirru` and `package.cirru` snapshots are ignored and rejected +by CI. Dependencies are resolved with `caps --ci --strict`. + +The COS action verifies uploaded resources with its built-in verify settings; +no extra CDN checker is needed. Existing external fonts and server paths remain +unchanged. +Each PR run uses its own preview prefix (`pr///`) and concurrency +group. The six runtime checks do not claim to validate generated CDN URLs. + ### Workflow Workflow https://github.com/calcit-lang/respo-calcit-workflow diff --git a/calcit.cirru b/calcit.cirru index 0491530..4d50539 100644 --- a/calcit.cirru +++ b/calcit.cirru @@ -3,9 +3,9 @@ :about "|Machine-generated snapshot. Do not edit directly — changes will be overwritten. Use `calcit query` to inspect and `calcit edit`/`calcit tree` to modify. Run `calcit docs agents --contract` before mutations; use `--full` for first orientation or changed contract digest. Manual edits must follow format and schema conventions, then run `calcit edit format`." :package |app :entries $ {} $ :default - {} (:description |) (:init-fn 'app.main/main!) (:mode :native) (:reload-fn 'app.main/reload!) + {} (:description |) (:init-fn 'app.main/main!) (:mode :js) (:reload-fn 'app.main/reload!) (:target :browser) :feature-policy $ {} - :modules $ [] |respo.calcit/ |respo-ui.calcit/ |respo-markdown.calcit/ |reel.calcit/ |js-ffi/ + :modules $ [] |respo.calcit/ |respo-ui.calcit/ |reel.calcit/ |js-ffi/ :type-slots $ {} :files $ {} 'app.comp.container $ %{} 'FileEntry @@ -84,11 +84,11 @@ [] idx $ let tok $ :value chunk cond - option:some? $ :removed chunk + option:unwrap-or (:removed chunk) false div $ {} (:inner-text tok) :class-name $ str-spaced style-line style-removed $ if by-word? style-word-mode :title $ str "|Removed " (:count chunk) "| chunks" - (option:some? (:added chunk)) + (option:unwrap-or (:added chunk) false) div $ {} (:inner-text tok) :class-name $ str-spaced style-line style-added $ if by-word? style-word-mode :title $ str "|Added " (:count chunk) "| chunks" @@ -198,7 +198,6 @@ respo.comp.inspect :refer $ comp-inspect reel.comp.reel :refer $ comp-reel reel.schema :as reel-schema - respo-md.comp.md :refer $ comp-md app.config :refer $ dev? |diff :as diff 'app.config $ %{} 'FileEntry diff --git a/deps.cirru b/deps.cirru index f5b1222..6e76f14 100644 --- a/deps.cirru +++ b/deps.cirru @@ -1,7 +1,6 @@ {} (:calcit-version |0.27.0) :version |0.1.3 - :dependencies $ {} (|Respo/reel.calcit |0.6.33-alpha.1) - |Respo/respo-markdown.calcit |0.4.46 - |Respo/respo-ui.calcit |0.7.32-alpha.2 + :dependencies $ {} (|Respo/reel.calcit |0.6.33-alpha.2) + |Respo/respo-ui.calcit |0.7.32-alpha.3 |Respo/respo.calcit |0.16.114-alpha.5 diff --git a/package.json b/package.json index c396578..c8dfab0 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "packageManager": "yarn@4.18.0", "devDependencies": { "bottom-tip": "^0.1.5", - "vite": "^7.3.1" + "vite": "8.3.1" }, "dependencies": { "@calcit/procs": "0.27.0", diff --git a/scripts/upgrade.test.mjs b/scripts/upgrade.test.mjs index ee5e067..4bf7bc0 100644 --- a/scripts/upgrade.test.mjs +++ b/scripts/upgrade.test.mjs @@ -5,6 +5,33 @@ import { assoc, init_tags } from "../js-out/calcit.core.mjs"; import { comp_container } from "../js-out/app.comp.container.mjs"; import { store as defaultStore } from "../js-out/app.schema.mjs"; import { reel as reelSchema } from "../js-out/reel.schema.mjs"; +import * as clt from "../js-out/calcit.core.mjs"; +import { updater } from "../js-out/app.updater.mjs"; +import { sort_by_line } from "../js-out/app.comp.container.mjs"; +import { make_string } from "../js-out/respo.render.html.mjs"; +import { component_$q_, component_tree } from "../js-out/respo.util.detect.mjs"; + +const t = init_tags(["base", "store", "states", "old-text", "new-text", "show-result?", "sorted?", "by-word?", "children", "event", "input", "click", "value", "data", "editor"]); +const unwrap = clt.option_$o_unwrap; +const read = (value, key) => unwrap(clt.get(value, key)); +const op = (name, ...args) => clt._$o__$o_(init_tags([name])[name], ...args); +const apply = (store, name, ...args) => updater(store, op(name, ...args), "test", 0); +const render = (store) => comp_container(assoc(assoc(reelSchema, t.base, store), t.store, store)); + +function handlers(node, kind) { + if (component_$q_(node)) return handlers(unwrap(component_tree(node)), kind); + const result = []; + const events = clt.get(node, t.event); + if (clt.option_$o_some_$q_(events)) { + const handler = clt.get(unwrap(events), kind); + if (clt.option_$o_some_$q_(handler)) result.push(unwrap(handler)); + } + const children = clt.get(node, t.children); + if (clt.option_$o_some_$q_(children)) { + for (const pair of unwrap(children).toArray()) result.push(...handlers(unwrap(clt.nth(pair, 1)), kind)); + } + return result; +} test("npm diff chunks decode into typed Calcit data", () => { const tags = init_tags(["base", "new-text", "old-text", "store"]); @@ -17,3 +44,61 @@ test("npm diff chunks decode into typed Calcit data", () => { assert.ok(comp_container(reel)); }); + +test("line and word differences render added and removed content", () => { + for (const words of [false, true]) { + const store = assoc(assoc(assoc(assoc(defaultStore, t["old-text"], "one two"), t["new-text"], "one three"), t["show-result?"], true), t["by-word?"], words); + const html = make_string(render(store)); + assert.match(html, /Removed/); + assert.match(html, /Added/); + assert.match(html, /two/); + assert.match(html, /three/); + } +}); + +test("textarea callbacks dispatch one Enum and preserve missing-value fallback", () => { + const inputs = handlers(render(defaultStore), t.input); + assert.equal(inputs.length, 2); + for (const [index, handler] of inputs.entries()) { + let store = defaultStore; + const dispatch = (...args) => { + assert.equal(args.length, 1); + store = updater(store, args[0], "test", 0); + }; + handler(clt._$n__$M_(t.value, `text-${index}`), dispatch); + const field = index === 0 ? t["old-text"] : t["new-text"]; + assert.equal(read(store, field), `text-${index}`); + handler(clt._$n__$M_(), dispatch); + assert.equal(read(store, field), ""); + } +}); + +test("toggle, swap and clear operations preserve their intended fields", () => { + let store = apply(apply(defaultStore, "write-old", "before"), "write-new", "after"); + for (const [operation, field] of [["toggle-result", "show-result?"], ["toggle-sorted", "sorted?"], ["toggle-word", "by-word?"]]) { + store = apply(store, operation); + assert.equal(read(store, t[field]), true); + } + store = apply(store, "swap-text"); + assert.equal(read(store, t["old-text"]), "after"); + assert.equal(read(store, t["new-text"]), "before"); + store = apply(store, "clear-text"); + assert.equal(read(store, t["old-text"]), ""); + assert.equal(read(store, t["new-text"]), ""); + assert.equal(read(store, t["show-result?"]), false); + assert.equal(read(store, t["sorted?"]), true); +}); + +test("sorting lines makes reordered texts equivalent", () => { + assert.equal(sort_by_line("z\na"), sort_by_line("a\nz")); + const store = assoc(assoc(assoc(assoc(defaultStore, t["old-text"], "z\na"), t["new-text"], "a\nz"), t["show-result?"], true), t["sorted?"], true); + const html = make_string(render(store)); + assert.doesNotMatch(html, /Added|Removed/); +}); + +test("nested states update preserves application text", () => { + const original = apply(defaultStore, "write-old", "untouched"); + const changed = apply(original, "states", clt._$L_(t.editor), "nested"); + assert.equal(read(changed, t["old-text"]), "untouched"); + assert.equal(read(read(read(changed, t.states), t.editor), t.data), "nested"); +}); diff --git a/yarn.lock b/yarn.lock index b869472..b005cca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,188 +37,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/aix-ppc64@npm:0.28.2" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/android-arm64@npm:0.28.2" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/android-arm@npm:0.28.2" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/android-x64@npm:0.28.2" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/darwin-arm64@npm:0.28.2" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/darwin-x64@npm:0.28.2" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/freebsd-arm64@npm:0.28.2" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/freebsd-x64@npm:0.28.2" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/linux-arm64@npm:0.28.2" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/linux-arm@npm:0.28.2" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/linux-ia32@npm:0.28.2" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/linux-loong64@npm:0.28.2" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/linux-mips64el@npm:0.28.2" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/linux-ppc64@npm:0.28.2" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/linux-riscv64@npm:0.28.2" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/linux-s390x@npm:0.28.2" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/linux-x64@npm:0.28.2" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/netbsd-arm64@npm:0.28.2" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/netbsd-x64@npm:0.28.2" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/openbsd-arm64@npm:0.28.2" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/openbsd-x64@npm:0.28.2" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/openharmony-arm64@npm:0.28.2" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/sunos-x64@npm:0.28.2" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/win32-arm64@npm:0.28.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/win32-ia32@npm:0.28.2" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.28.2": - version: 0.28.2 - resolution: "@esbuild/win32-x64@npm:0.28.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@isaacs/fs-minipass@npm:^4.0.0": version: 4.0.1 resolution: "@isaacs/fs-minipass@npm:4.0.1" @@ -228,192 +46,122 @@ __metadata: languageName: node linkType: hard -"@napi-rs/lzma-linux-x64-gnu@npm:1.5.1": - version: 1.5.1 - resolution: "@napi-rs/lzma-linux-x64-gnu@npm:1.5.1" - conditions: os=linux & cpu=x64 & libc=glibc +"@oxc-project/types@npm:=0.151.0": + version: 0.151.0 + resolution: "@oxc-project/types@npm:0.151.0" + checksum: 10c0/7dac5399345abf368449735c31c218439e6c3a2acf7b8cbc715a88b45989390208f61bea0f3eb28bee5a034a509a7f4142ae60069e6611b07c70a30867c8ca84 languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.62.4" +"@rolldown/binding-android-arm-eabi@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-android-arm-eabi@npm:1.2.11" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-android-arm64@npm:4.62.4" +"@rolldown/binding-android-arm64@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-android-arm64@npm:1.2.11" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-darwin-arm64@npm:4.62.4" +"@rolldown/binding-darwin-arm64@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-darwin-arm64@npm:1.2.11" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-darwin-x64@npm:4.62.4" +"@rolldown/binding-darwin-x64@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-darwin-x64@npm:1.2.11" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.62.4" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-x64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-freebsd-x64@npm:4.62.4" +"@rolldown/binding-freebsd-x64@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-freebsd-x64@npm:1.2.11" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.62.4" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.62.4" - conditions: os=linux & cpu=arm & libc=musl +"@rolldown/binding-linux-arm-gnueabihf@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.2.11" + conditions: os=linux & cpu=arm languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.62.4" +"@rolldown/binding-linux-arm64-gnu@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.2.11" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.62.4" +"@rolldown/binding-linux-arm64-musl@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.2.11" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-loong64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.62.4" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-musl@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-loong64-musl@npm:4.62.4" - conditions: os=linux & cpu=loong64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.62.4" +"@rolldown/binding-linux-ppc64-gnu@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.2.11" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-ppc64-musl@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.62.4" - conditions: os=linux & cpu=ppc64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.62.4" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-musl@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.62.4" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.62.4" +"@rolldown/binding-linux-s390x-gnu@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.2.11" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.62.4" +"@rolldown/binding-linux-x64-gnu@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.2.11" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.62.4" +"@rolldown/binding-linux-x64-musl@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.2.11" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-openbsd-x64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-openbsd-x64@npm:4.62.4" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-openharmony-arm64@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-openharmony-arm64@npm:4.62.4" +"@rolldown/binding-openharmony-arm64@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.2.11" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.62.4" +"@rolldown/binding-win32-arm64-msvc@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.2.11" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.62.4" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-gnu@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-win32-x64-gnu@npm:4.62.4" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.62.4": - version: 4.62.4 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.62.4" +"@rolldown/binding-win32-x64-msvc@npm:1.2.11": + version: 1.2.11 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.2.11" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@types/estree@npm:1.0.9": - version: 1.0.9 - resolution: "@types/estree@npm:1.0.9" - checksum: 10c0/3ad3286ca2988cd550dafb8f2ad599c8474868e954fa601a36655bdfefd8039f7c714b8c1c7f2ae219ffbd58bd4660e66fa7479a0120fc02d4777057d4865387 +"@rolldown/pluginutils@npm:^1.0.0": + version: 1.0.1 + resolution: "@rolldown/pluginutils@npm:1.0.1" + checksum: 10c0/99d9b06d90196823e4d8c841f258db7a16e5dbba5824a2962b05d907b79f1ba929d56f22dd744fd530936e568c865ee56a719dc31e57e13bc0a8eb4764a8d8dd languageName: node linkType: hard @@ -448,7 +196,7 @@ __metadata: "@calcit/procs": "npm:0.27.0" bottom-tip: "npm:^0.1.5" diff: "npm:^8.0.2" - vite: "npm:^7.3.1" + vite: "npm:8.3.1" languageName: unknown linkType: soft @@ -466,6 +214,13 @@ __metadata: languageName: node linkType: hard +"detect-libc@npm:^2.0.3": + version: 2.1.2 + resolution: "detect-libc@npm:2.1.2" + checksum: 10c0/acc675c29a5649fa1fb6e255f993b8ee829e510b6b56b0910666949c80c364738833417d0edb5f90e4e46be17228b0f2b66a010513984e18b15deeeac49369c4 + languageName: node + linkType: hard + "diff@npm:^8.0.2": version: 8.0.4 resolution: "diff@npm:8.0.4" @@ -498,95 +253,6 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.27.0 || ^0.28.0": - version: 0.28.2 - resolution: "esbuild@npm:0.28.2" - dependencies: - "@esbuild/aix-ppc64": "npm:0.28.2" - "@esbuild/android-arm": "npm:0.28.2" - "@esbuild/android-arm64": "npm:0.28.2" - "@esbuild/android-x64": "npm:0.28.2" - "@esbuild/darwin-arm64": "npm:0.28.2" - "@esbuild/darwin-x64": "npm:0.28.2" - "@esbuild/freebsd-arm64": "npm:0.28.2" - "@esbuild/freebsd-x64": "npm:0.28.2" - "@esbuild/linux-arm": "npm:0.28.2" - "@esbuild/linux-arm64": "npm:0.28.2" - "@esbuild/linux-ia32": "npm:0.28.2" - "@esbuild/linux-loong64": "npm:0.28.2" - "@esbuild/linux-mips64el": "npm:0.28.2" - "@esbuild/linux-ppc64": "npm:0.28.2" - "@esbuild/linux-riscv64": "npm:0.28.2" - "@esbuild/linux-s390x": "npm:0.28.2" - "@esbuild/linux-x64": "npm:0.28.2" - "@esbuild/netbsd-arm64": "npm:0.28.2" - "@esbuild/netbsd-x64": "npm:0.28.2" - "@esbuild/openbsd-arm64": "npm:0.28.2" - "@esbuild/openbsd-x64": "npm:0.28.2" - "@esbuild/openharmony-arm64": "npm:0.28.2" - "@esbuild/sunos-x64": "npm:0.28.2" - "@esbuild/win32-arm64": "npm:0.28.2" - "@esbuild/win32-ia32": "npm:0.28.2" - "@esbuild/win32-x64": "npm:0.28.2" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/9b19edb63bd7780fd2e8e65a1394a0e8a05a17d697f73f0647ffe3c134709d8dbe744ab3fd57b35c9470db268cae7678fafd3dcd3ce1f34fc590568c2433f5d2 - languageName: node - linkType: hard - "ev-store@npm:^7.0.0": version: 7.0.0 resolution: "ev-store@npm:7.0.0" @@ -615,7 +281,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": +"fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -625,7 +291,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": +"fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -672,6 +338,126 @@ __metadata: languageName: node linkType: hard +"lightningcss-android-arm64@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-android-arm64@npm:1.33.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-arm64@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-darwin-arm64@npm:1.33.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-x64@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-darwin-x64@npm:1.33.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-freebsd-x64@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-freebsd-x64@npm:1.33.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-linux-arm-gnueabihf@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-linux-arm-gnueabihf@npm:1.33.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"lightningcss-linux-arm64-gnu@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-linux-arm64-gnu@npm:1.33.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-arm64-musl@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-linux-arm64-musl@npm:1.33.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-linux-x64-gnu@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-linux-x64-gnu@npm:1.33.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-x64-musl@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-linux-x64-musl@npm:1.33.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-win32-arm64-msvc@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-win32-arm64-msvc@npm:1.33.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-win32-x64-msvc@npm:1.33.0": + version: 1.33.0 + resolution: "lightningcss-win32-x64-msvc@npm:1.33.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"lightningcss@npm:^1.33.0": + version: 1.33.0 + resolution: "lightningcss@npm:1.33.0" + dependencies: + detect-libc: "npm:^2.0.3" + lightningcss-android-arm64: "npm:1.33.0" + lightningcss-darwin-arm64: "npm:1.33.0" + lightningcss-darwin-x64: "npm:1.33.0" + lightningcss-freebsd-x64: "npm:1.33.0" + lightningcss-linux-arm-gnueabihf: "npm:1.33.0" + lightningcss-linux-arm64-gnu: "npm:1.33.0" + lightningcss-linux-arm64-musl: "npm:1.33.0" + lightningcss-linux-x64-gnu: "npm:1.33.0" + lightningcss-linux-x64-musl: "npm:1.33.0" + lightningcss-win32-arm64-msvc: "npm:1.33.0" + lightningcss-win32-x64-msvc: "npm:1.33.0" + dependenciesMeta: + lightningcss-android-arm64: + optional: true + lightningcss-darwin-arm64: + optional: true + lightningcss-darwin-x64: + optional: true + lightningcss-freebsd-x64: + optional: true + lightningcss-linux-arm-gnueabihf: + optional: true + lightningcss-linux-arm64-gnu: + optional: true + lightningcss-linux-arm64-musl: + optional: true + lightningcss-linux-x64-gnu: + optional: true + lightningcss-linux-x64-musl: + optional: true + lightningcss-win32-arm64-msvc: + optional: true + lightningcss-win32-x64-msvc: + optional: true + checksum: 10c0/ce1f8279fbae636dbf37fa6e7385d5f98ed881d72af3362f24afbd4685e19c1fcdfecf17e5dd77f2ebee3d0c23ade276230d85842d07292229a2cffba8ff20a3 + languageName: node + linkType: hard + "min-document@npm:^2.19.0": version: 2.19.2 resolution: "min-document@npm:2.19.2" @@ -697,12 +483,12 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.17": - version: 3.3.18 - resolution: "nanoid@npm:3.3.18" +"nanoid@npm:^3.3.18": + version: 3.3.19 + resolution: "nanoid@npm:3.3.19" bin: nanoid: bin/nanoid.cjs - checksum: 10c0/b994b4e396730f8be2520923284e2040d61eaee55cc6d4935ef6d38d34bafdc46133eda4d3faea5073bda545aa6079d82b886caeac5c731cf9ac18bcc1301425 + checksum: 10c0/ce7afa6258bfaa00bdc8de291cfe9913280eaa403b7d9cff3db4e4200c1913e7163577df74897958da144db473a96c67f74f57db0f542fbfe409df677bae3255 languageName: node linkType: hard @@ -760,21 +546,28 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.3, picomatch@npm:^4.0.4": +"picomatch@npm:^4.0.4": version: 4.0.5 resolution: "picomatch@npm:4.0.5" checksum: 10c0/947bc6b6e1ff1e6c5aaf95b107a0839d12802f4f7b867663f67d47accba939ca1cb582cf99dfc30438efa1c4648ac5990967e783e8929c36b03e8440704ef1bd languageName: node linkType: hard -"postcss@npm:^8.5.6": - version: 8.5.26 - resolution: "postcss@npm:8.5.26" +"picomatch@npm:^4.0.7": + version: 4.0.7 + resolution: "picomatch@npm:4.0.7" + checksum: 10c0/beb6ae02c43ae44e84883b90830196d9046b1726ead292adcf7f57945e0bb0d992d68563d87e03b484b6f3c9a5c6defda7523477f047d7f0e663f126cc01787f + languageName: node + linkType: hard + +"postcss@npm:^8.5.28": + version: 8.5.28 + resolution: "postcss@npm:8.5.28" dependencies: - nanoid: "npm:^3.3.17" + nanoid: "npm:^3.3.18" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/2bdafc00d96bd57b6649a52e458864a4bf58ee56cfdbe4aea1472b5cccc127e6c1ad653bd0bec50d211e650eb0b9270c80e1e72aff2e2fa40d9e7363234d6e43 + checksum: 10c0/9fe44215a6628d89c8a75184b92f5b2f77e16f9e5b13b39b9009bb7e8e6eccddf82c8854bae922db1f17ace6ef3445073fe38abff513caeb03e5285b1b55620a languageName: node linkType: hard @@ -792,96 +585,61 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.43.0": - version: 4.62.4 - resolution: "rollup@npm:4.62.4" +"rolldown@npm:~1.2.9": + version: 1.2.11 + resolution: "rolldown@npm:1.2.11" dependencies: - "@napi-rs/lzma-linux-x64-gnu": "npm:1.5.1" - "@rollup/rollup-android-arm-eabi": "npm:4.62.4" - "@rollup/rollup-android-arm64": "npm:4.62.4" - "@rollup/rollup-darwin-arm64": "npm:4.62.4" - "@rollup/rollup-darwin-x64": "npm:4.62.4" - "@rollup/rollup-freebsd-arm64": "npm:4.62.4" - "@rollup/rollup-freebsd-x64": "npm:4.62.4" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.62.4" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.62.4" - "@rollup/rollup-linux-arm64-gnu": "npm:4.62.4" - "@rollup/rollup-linux-arm64-musl": "npm:4.62.4" - "@rollup/rollup-linux-loong64-gnu": "npm:4.62.4" - "@rollup/rollup-linux-loong64-musl": "npm:4.62.4" - "@rollup/rollup-linux-ppc64-gnu": "npm:4.62.4" - "@rollup/rollup-linux-ppc64-musl": "npm:4.62.4" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.62.4" - "@rollup/rollup-linux-riscv64-musl": "npm:4.62.4" - "@rollup/rollup-linux-s390x-gnu": "npm:4.62.4" - "@rollup/rollup-linux-x64-gnu": "npm:4.62.4" - "@rollup/rollup-linux-x64-musl": "npm:4.62.4" - "@rollup/rollup-openbsd-x64": "npm:4.62.4" - "@rollup/rollup-openharmony-arm64": "npm:4.62.4" - "@rollup/rollup-win32-arm64-msvc": "npm:4.62.4" - "@rollup/rollup-win32-ia32-msvc": "npm:4.62.4" - "@rollup/rollup-win32-x64-gnu": "npm:4.62.4" - "@rollup/rollup-win32-x64-msvc": "npm:4.62.4" - "@types/estree": "npm:1.0.9" - fsevents: "npm:~2.3.2" + "@oxc-project/types": "npm:=0.151.0" + "@rolldown/binding-android-arm-eabi": "npm:1.2.11" + "@rolldown/binding-android-arm64": "npm:1.2.11" + "@rolldown/binding-darwin-arm64": "npm:1.2.11" + "@rolldown/binding-darwin-x64": "npm:1.2.11" + "@rolldown/binding-freebsd-x64": "npm:1.2.11" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.2.11" + "@rolldown/binding-linux-arm64-gnu": "npm:1.2.11" + "@rolldown/binding-linux-arm64-musl": "npm:1.2.11" + "@rolldown/binding-linux-ppc64-gnu": "npm:1.2.11" + "@rolldown/binding-linux-s390x-gnu": "npm:1.2.11" + "@rolldown/binding-linux-x64-gnu": "npm:1.2.11" + "@rolldown/binding-linux-x64-musl": "npm:1.2.11" + "@rolldown/binding-openharmony-arm64": "npm:1.2.11" + "@rolldown/binding-win32-arm64-msvc": "npm:1.2.11" + "@rolldown/binding-win32-x64-msvc": "npm:1.2.11" + "@rolldown/pluginutils": "npm:^1.0.0" dependenciesMeta: - "@napi-rs/lzma-linux-x64-gnu": - optional: true - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": + "@rolldown/binding-android-arm-eabi": optional: true - "@rollup/rollup-darwin-x64": + "@rolldown/binding-android-arm64": optional: true - "@rollup/rollup-freebsd-arm64": + "@rolldown/binding-darwin-arm64": optional: true - "@rollup/rollup-freebsd-x64": + "@rolldown/binding-darwin-x64": optional: true - "@rollup/rollup-linux-arm-gnueabihf": + "@rolldown/binding-freebsd-x64": optional: true - "@rollup/rollup-linux-arm-musleabihf": + "@rolldown/binding-linux-arm-gnueabihf": optional: true - "@rollup/rollup-linux-arm64-gnu": + "@rolldown/binding-linux-arm64-gnu": optional: true - "@rollup/rollup-linux-arm64-musl": + "@rolldown/binding-linux-arm64-musl": optional: true - "@rollup/rollup-linux-loong64-gnu": + "@rolldown/binding-linux-ppc64-gnu": optional: true - "@rollup/rollup-linux-loong64-musl": + "@rolldown/binding-linux-s390x-gnu": optional: true - "@rollup/rollup-linux-ppc64-gnu": + "@rolldown/binding-linux-x64-gnu": optional: true - "@rollup/rollup-linux-ppc64-musl": + "@rolldown/binding-linux-x64-musl": optional: true - "@rollup/rollup-linux-riscv64-gnu": + "@rolldown/binding-openharmony-arm64": optional: true - "@rollup/rollup-linux-riscv64-musl": + "@rolldown/binding-win32-arm64-msvc": optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-openbsd-x64": - optional: true - "@rollup/rollup-openharmony-arm64": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-gnu": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: + "@rolldown/binding-win32-x64-msvc": optional: true bin: - rollup: dist/bin/rollup - checksum: 10c0/d83bcc89f02db337963dcd0b0d16620129cee263f8437464c02d782dde4e1bb89a6b5b511cd230317ce2c5959fb858884305a9a1a33d1d3da4eef9fe6368414b + rolldown: ./bin/cli.mjs + checksum: 10c0/43dfd083fb625a254c039bddfe04f3dd1d7cf8b84291ead835e3702e8050b7fee5e702c8280d3000b2541c0e24aaa3110bac4251bc2ca50a85fe1c8bbb48d2f5 languageName: node linkType: hard @@ -921,7 +679,7 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15": +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.17": version: 0.2.17 resolution: "tinyglobby@npm:0.2.17" dependencies: @@ -954,22 +712,22 @@ __metadata: languageName: node linkType: hard -"vite@npm:^7.3.1": - version: 7.3.6 - resolution: "vite@npm:7.3.6" +"vite@npm:8.3.1": + version: 8.3.1 + resolution: "vite@npm:8.3.1" dependencies: - esbuild: "npm:^0.27.0 || ^0.28.0" - fdir: "npm:^6.5.0" fsevents: "npm:~2.3.3" - picomatch: "npm:^4.0.3" - postcss: "npm:^8.5.6" - rollup: "npm:^4.43.0" - tinyglobby: "npm:^0.2.15" + lightningcss: "npm:^1.33.0" + picomatch: "npm:^4.0.7" + postcss: "npm:^8.5.28" + rolldown: "npm:~1.2.9" + tinyglobby: "npm:^0.2.17" peerDependencies: "@types/node": ^20.19.0 || >=22.12.0 + "@vitejs/devtools": ^0.7.1 + esbuild: ^0.27.0 || ^0.28.0 jiti: ">=1.21.0" less: ^4.0.0 - lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: ">=0.54.8" @@ -983,12 +741,14 @@ __metadata: peerDependenciesMeta: "@types/node": optional: true + "@vitejs/devtools": + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -1005,7 +765,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/c6d359f84ad362f5c97ff7988b77c90add04162c60cdf6059375a7d9e3217848c53a8cb6b6c48517bef84b6bba4c9bc85319a889b5236acb7d5a2bc8cb7b9a8d + checksum: 10c0/a91f4fee1cd331912ee3ac45f49900044846e28b8632ae734fe1978630e643e503d04181b2aeac59f70556fc51137dd49179fd39cbeb72a3e5f0bce88d2bcd30 languageName: node linkType: hard